Skip to main content

timebase-cpp-client

Use when the user explicitly asks for TimeBase C++ client code, for example connecting to TimeBase from C++, reading/writing streams, dxapi library acquisition and CMake/vcxproj setup, or TimeBase C++ client debugging.

소스 정보

저장소
epam/TimeBase-Agent-Plugins
최근 소스 활동
2026년 8월 7일 07:12
감지된 SKILL.md 언어
영어
스타
7
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
27 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
timebase-cpp-client
description
Use when the user explicitly asks for TimeBase C++ client code, for example connecting to TimeBase from C++, reading/writing streams, dxapi library acquisition and CMake/vcxproj setup, or TimeBase C++ client debugging.
# TimeBase C++ Client ## Mission Teach correct use of the TimeBase native C++ client: connection lifecycle, positional field access via `DataReader`/`DataWriter`, cursors and loaders. Prefer MCP-grounded stream and schema facts before generating code. ## Scope: Enterprise Edition only This skill covers the Enterprise Edition (EE) dxapi client. Community Edition C++ is not yet supported by this skill. If a user asks specifically for a Community Edition C++ client, say so rather than improvising. ## When to use this skill Use only when the user explicitly requests C++ together with TimeBase. Typical tasks: - connecting via `TickDb::createFromUrl` and resolving streams, - reads/writes via `TickCursor`/`TickLoader` with positional `DataReader`/`DataWriter` field access, - historical, live/resettable (`createCursor`/`reset`), or reverse cursor reads, - hand-written typed message codecs for polymorphic/type-name-dispatched read and write, - stream creation via `TickDb::createStream`, `TickDb::createFileStream`, or QQL DDL, - topic publish/poll via `TopicDB`/`TickDirectLoader`/`TickMessagePoller`, - stream spaces, listing/clearing/renaming/destructively-deleting streams, locking, periodicity, write buffering, - dynamic resubscription on a live cursor, multiplexed cursors, - schema introspection or generic (schema-driven) decode from C++, - in-place schema changes via `TickStream::changeSchema`, - bound/parameterized QQL execution or QQL validation via `compileQuery`, - acquiring and linking the dxapi native library (Nexus tar.gz on Linux/macOS, NuGet package on Windows), - `Decimal64`/DFP field conversions, - debugging connection, linking, or build failures. Do not use for pure QQL authoring with no C++ code to write (use the `qql-generator` skill instead) or for pure MCP discovery with no code to write. ## How to route requests 1. Confirm the user asked for C++ + TimeBase, not generic C++ help. 2. When stream names, schema, symbols, or time bounds matter, use MCP discovery first (`references/mcp-assisted-discovery.md`). 3. Detect how dxapi is already acquired in the target project (extracted archive on Linux/macOS, NuGet package or manually-vendored folder on Windows) and preserve it, don't move or re-derive it. 4. Before generating connection, stream, or cursor/loader code, verify the exact signature from the project's vendored dxapi headers (`references/project-setup.md`) rather than from memory. 5. Pick the smallest proven reference and example for the access pattern. 6. For library acquisition and build integration, use `references/project-setup.md`. ## Mandatory policy - Ground stream keys and schema from MCP or user input. Do not invent field names, type names, or stream keys. - dxapi has no generated/bound message classes for arbitrary schemas. `DataReader`/`DataWriter` field access is **positional**, in the exact order fields are declared in the schema, there is no name-based field lookup. Get the field order right from `get_stream_schema` before writing any read/write code. - When QQL authoring is central, use the QQL generator skill first. Return here for C++ execution via `TickDb::executeQuery`. - Never invent an exact Nexus/NuGet artifact version. Use whatever is already pinned in the project, or ask the user to confirm the current release. See `references/project-setup.md`. - Use placeholder-based credentials (e.g. `NEXUS_USER`/`NEXUS_PASS`) for Nexus/NuGet feed access, and preserve any existing naming convention the project already uses. Never hardcode credentials. - Keep `TickDb`, `TickCursor`, and `TickLoader` lifecycle explicit: wrap in `std::unique_ptr` and call `close()` on every exit path, including exceptions. - Start read-only unless writes are required. Do not write to streams unless the user asked. - Treat `TickStream::clear()`/`truncate()`/`purge()`/`deleteData()`/`deleteStream()`, `deleteSpaces`, `changeSchema`, and `TickDb::format()` as destructive/irreversible. Confirm intent with the user before generating a call to any of them. - `LoadingOptions::writeMode` set to `REWRITE`/`TRUNCATE`/`REPLACE` is also destructive. A default-constructed `LoadingOptions()` already defaults `writeMode` to `REWRITE`, not `APPEND`, so always set `writeMode = WriteMode::APPEND` explicitly for an ordinary write. Confirm the intended mode with the user before generating loader setup for anything else. ## MCP-first workflow When the task depends on live server context, follow the discovery order in [`references/mcp-assisted-discovery.md`](references/mcp-assisted-discovery.md) before generating field-access code. If MCP is unavailable, state what is missing and ask the user for stream/schema context before finalizing. ## Capability map - [`references/workflow-selection.md`](references/workflow-selection.md): routing table - [`references/mcp-assisted-discovery.md`](references/mcp-assisted-discovery.md): MCP discovery order - [`references/project-setup.md`](references/project-setup.md): acquiring dxapi (Nexus archive, NuGet package), build integration, credentials, locating the right header for a given API - [`references/connection-and-lifecycle.md`](references/connection-and-lifecycle.md): `TickDb::createFromUrl`, connection URI schemes, SSL and env vars, basic/OAuth2 auth, read-only mode, `format()` - [`references/cursor-and-streams.md`](references/cursor-and-streams.md): `TickCursor`, `select`/`createCursor`, historical/live/reverse reads, stream creation (including `createFileStream`), multiplexed cursors, dynamic resubscription - [`references/loader-writes.md`](references/loader-writes.md): `TickLoader`, the register/begin/write/send cycle - [`references/message-types-and-decimal64.md`](references/message-types-and-decimal64.md): positional `DataReader`/`DataWriter` field access, nullable/array/ASCII/CHAR/enum/TimeOfDay/interval/compressed-datetime/UInt40 fields, `Decimal64`/DFP conversions, `MarketMessage` base fields, typed codec pattern - [`references/stream-management.md`](references/stream-management.md): `listStreams`/`listEntities`/`listSymbols`, `InstrumentType`/`StreamScope`, `clear`/`truncate`/`purge`/`deleteData`/`deleteStream`, `renameInstruments`, locking, periodicity, write buffering, other `TickStream` accessors, `setSchema` vs `changeSchema` - [`references/stream-spaces.md`](references/stream-spaces.md): reading/writing/managing stream spaces - [`references/schema-introspection.md`](references/schema-introspection.md): parsing stream metadata, schema-driven generic decode - [`references/schema-evolution.md`](references/schema-evolution.md): `TickStream::changeSchema`, tracking background processes - [`references/qql-bound-queries.md`](references/qql-bound-queries.md): parameterized `executeQuery`, `compileQuery` - [`references/topics.md`](references/topics.md): `TopicDB` publish/poll pub-sub - [`references/debugging-and-performance.md`](references/debugging-and-performance.md): acquisition, linking, connection, and runtime failures, protocol-version mismatches, cursor/loader throughput stats and preloading, the cursor/loader exception hierarchy, topic publish/poll failures, schema change failures
GitHub에서 보기