@rkat/sdk 0.3.4 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/streaming.js CHANGED
@@ -1,78 +1,183 @@
1
1
  /**
2
- * Async event stream over JSON-RPC notifications from rkat-rpc.
3
- */
4
- /**
5
- * Async iterator that yields WireEvent objects from JSON-RPC notifications.
2
+ * Streaming API for the Meerkat TypeScript SDK.
6
3
  *
7
- * Skips response messages (which have an `id` field) and only yields
8
- * notification payloads parsed as WireEvent.
4
+ * {@link EventStream} is an `AsyncIterable<StreamEvent>` that yields typed
5
+ * events from a running turn, with access to the final {@link RunResult}
6
+ * after iteration.
9
7
  *
10
8
  * @example
11
9
  * ```ts
12
- * for await (const event of new EventStream(readline)) {
13
- * console.log(event.session_id, event.event);
10
+ * for await (const event of session.stream("prompt")) {
11
+ * if (event.type === "text_delta") {
12
+ * process.stdout.write(event.delta);
13
+ * }
14
14
  * }
15
+ * console.log(stream.result.usage.inputTokens);
15
16
  * ```
16
17
  */
17
- export class EventStream {
18
+ import { isTextDelta, parseEvent } from "./events.js";
19
+ import { MeerkatError } from "./generated/errors.js";
20
+ /** @internal Queue with promise-based get(). */
21
+ class AsyncQueue {
18
22
  buffer = [];
19
23
  waiters = [];
20
- closed = false;
21
- constructor(rl) {
22
- rl.on("line", (line) => {
23
- try {
24
- const data = JSON.parse(line);
25
- // Skip responses (they have an "id" field)
26
- if ("id" in data)
27
- return;
28
- const params = (data.params ?? {});
29
- const event = {
30
- session_id: String(params.session_id ?? ""),
31
- sequence: Number(params.sequence ?? 0),
32
- event: (params.event ?? {}),
33
- contract_version: String(params.contract_version ?? ""),
34
- };
35
- if (this.waiters.length > 0) {
36
- const waiter = this.waiters.shift();
37
- waiter({ value: event, done: false });
38
- }
39
- else {
40
- this.buffer.push(event);
24
+ put(item) {
25
+ if (this.waiters.length > 0) {
26
+ this.waiters.shift()(item);
27
+ }
28
+ else {
29
+ this.buffer.push(item);
30
+ }
31
+ }
32
+ get() {
33
+ if (this.buffer.length > 0) {
34
+ return Promise.resolve(this.buffer.shift());
35
+ }
36
+ return new Promise((resolve) => {
37
+ this.waiters.push(resolve);
38
+ });
39
+ }
40
+ tryGet() {
41
+ return this.buffer.shift();
42
+ }
43
+ get isEmpty() {
44
+ return this.buffer.length === 0;
45
+ }
46
+ failAll(error) {
47
+ // Waiters receive a rejected promise; we wrap by rejecting in the next tick
48
+ for (const waiter of this.waiters) {
49
+ // Use a sentinel; callers handle it
50
+ waiter(undefined);
51
+ }
52
+ this.waiters = [];
53
+ }
54
+ }
55
+ /** Sentinel for end-of-stream. */
56
+ const SENTINEL = Symbol("eos");
57
+ /**
58
+ * Typed async iterable of {@link StreamEvent} objects from a running turn.
59
+ *
60
+ * After iteration completes, the {@link result} getter returns the final
61
+ * {@link RunResult}.
62
+ */
63
+ export class EventStream {
64
+ /** @internal */ _sessionId;
65
+ _eventQueue;
66
+ _responsePromise;
67
+ _parseResult;
68
+ _result = null;
69
+ _session;
70
+ /** @internal — constructed by MeerkatClient, not directly. */
71
+ constructor(opts) {
72
+ this._sessionId = opts.sessionId;
73
+ this._eventQueue = opts.eventQueue;
74
+ this._responsePromise = opts.responsePromise;
75
+ this._parseResult = opts.parseResult;
76
+ this._session = opts.session ?? null;
77
+ }
78
+ /** The session ID for this turn. */
79
+ get sessionId() {
80
+ return this._sessionId;
81
+ }
82
+ /** The final {@link RunResult}. Available after iteration completes. */
83
+ get result() {
84
+ if (this._result === null) {
85
+ throw new MeerkatError("STREAM_NOT_CONSUMED", "Iterate the stream before accessing result");
86
+ }
87
+ return this._result;
88
+ }
89
+ async *[Symbol.asyncIterator]() {
90
+ // Race event queue items against the response promise
91
+ let responseDone = false;
92
+ let responseResult = null;
93
+ const responseHandler = this._responsePromise.then((result) => {
94
+ responseDone = true;
95
+ responseResult = result;
96
+ });
97
+ while (true) {
98
+ if (responseDone) {
99
+ // Drain remaining queued events
100
+ while (!this._eventQueue.isEmpty) {
101
+ const raw = this._eventQueue.tryGet();
102
+ if (raw == null)
103
+ break;
104
+ yield parseEvent(raw);
41
105
  }
106
+ this._finalise(responseResult);
107
+ return;
42
108
  }
43
- catch {
44
- // Ignore non-JSON lines
109
+ // Race: next event vs response
110
+ const eventPromise = this._eventQueue.get();
111
+ const result = await Promise.race([
112
+ eventPromise.then((raw) => ({ kind: "event", raw })),
113
+ responseHandler.then(() => ({ kind: "response", raw: null })),
114
+ ]);
115
+ if (result.kind === "event") {
116
+ if (result.raw == null) {
117
+ // Sentinel — stream ended
118
+ await responseHandler;
119
+ this._finalise(responseResult);
120
+ return;
121
+ }
122
+ yield parseEvent(result.raw);
45
123
  }
46
- });
47
- rl.on("close", () => {
48
- this.closed = true;
49
- // Resolve any pending waiters with done
50
- for (const waiter of this.waiters) {
51
- waiter({ value: undefined, done: true });
124
+ // If response, loop back to the top which handles drain
125
+ }
126
+ }
127
+ /** Consume all events silently and return the final result. */
128
+ async collect() {
129
+ for await (const _ of this) {
130
+ // discard
131
+ }
132
+ return this.result;
133
+ }
134
+ /** Consume events, accumulate text deltas, return `[fullText, result]`. */
135
+ async collectText() {
136
+ const parts = [];
137
+ for await (const event of this) {
138
+ if (isTextDelta(event)) {
139
+ parts.push(event.delta);
52
140
  }
53
- this.waiters = [];
54
- });
141
+ }
142
+ return [parts.join(""), this.result];
55
143
  }
56
- [Symbol.asyncIterator]() {
57
- return {
58
- next: () => {
59
- if (this.buffer.length > 0) {
60
- return Promise.resolve({
61
- value: this.buffer.shift(),
62
- done: false,
63
- });
64
- }
65
- if (this.closed) {
66
- return Promise.resolve({
67
- value: undefined,
68
- done: true,
69
- });
70
- }
71
- return new Promise((resolve) => {
72
- this.waiters.push(resolve);
73
- });
74
- },
75
- };
144
+ _finalise(rawResult) {
145
+ this._result = this._parseResult(rawResult);
146
+ if (!this._sessionId) {
147
+ this._sessionId = this._result.sessionId;
148
+ }
149
+ if (this._session) {
150
+ this._session._lastResult = this._result;
151
+ }
152
+ }
153
+ }
154
+ /**
155
+ * Async iterable of raw comms stream notifications emitted via `comms/stream_event`.
156
+ */
157
+ export class CommsEventStream {
158
+ _streamId;
159
+ _eventQueue;
160
+ _onClose;
161
+ constructor(opts) {
162
+ this._streamId = opts.streamId;
163
+ this._eventQueue = opts.eventQueue;
164
+ this._onClose = opts.onClose;
165
+ }
166
+ get streamId() {
167
+ return this._streamId;
168
+ }
169
+ async *[Symbol.asyncIterator]() {
170
+ while (true) {
171
+ const raw = await this._eventQueue.get();
172
+ if (raw == null)
173
+ return;
174
+ yield raw;
175
+ }
176
+ }
177
+ async close() {
178
+ await this._onClose(this._streamId);
76
179
  }
77
180
  }
181
+ // Re-export AsyncQueue for internal use by client
182
+ export { AsyncQueue };
78
183
  //# sourceMappingURL=streaming.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,GAAgB,EAAE,CAAC;IACzB,OAAO,GAAsD,EAAE,CAAC;IAChE,MAAM,GAAG,KAAK,CAAC;IAEvB,YAAY,EAAqB;QAC/B,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YAC7B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,2CAA2C;gBAC3C,IAAI,IAAI,IAAI,IAAI;oBAAE,OAAO;gBAEzB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC;gBAC9D,MAAM,KAAK,GAAc;oBACvB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;oBAC3C,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;oBACtC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAA4B;oBACtD,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;iBACxD,CAAC;gBAEF,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAG,CAAC;oBACrC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,wCAAwC;YACxC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClC,MAAM,CAAC,EAAE,KAAK,EAAE,SAAiC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,GAAuC,EAAE;gBAC7C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3B,OAAO,OAAO,CAAC,OAAO,CAAC;wBACrB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAG;wBAC3B,IAAI,EAAE,KAAK;qBACZ,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,OAAO,OAAO,CAAC,OAAO,CAAC;wBACrB,KAAK,EAAE,SAAiC;wBACxC,IAAI,EAAE,IAAI;qBACX,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Public domain types for the Meerkat TypeScript SDK.
3
+ *
4
+ * These replace the `Wire*` prefixed generated types. All fields use
5
+ * idiomatic camelCase.
6
+ */
7
+ import type { Usage } from "./events.js";
8
+ export type { Usage } from "./events.js";
9
+ /** Warning emitted when structured output doesn't match a provider's schema. */
10
+ export interface SchemaWarning {
11
+ readonly provider: string;
12
+ readonly path: string;
13
+ readonly message: string;
14
+ }
15
+ /** Runtime health snapshot for skill source resolution. */
16
+ export interface SourceHealthSnapshot {
17
+ readonly state: string;
18
+ readonly invalidRatio: number;
19
+ readonly invalidCount: number;
20
+ readonly totalCount: number;
21
+ readonly failureStreak: number;
22
+ readonly handshakeFailed: boolean;
23
+ }
24
+ /** Diagnostic details for a single quarantined skill entry. */
25
+ export interface SkillQuarantineDiagnostic {
26
+ readonly sourceUuid: string;
27
+ readonly skillId: string;
28
+ readonly location: string;
29
+ readonly errorCode: string;
30
+ readonly errorClass: string;
31
+ readonly message: string;
32
+ readonly firstSeenUnixSecs: number;
33
+ readonly lastSeenUnixSecs: number;
34
+ }
35
+ /** Runtime diagnostics emitted by the Rust skill subsystem. */
36
+ export interface SkillRuntimeDiagnostics {
37
+ readonly sourceHealth: SourceHealthSnapshot;
38
+ readonly quarantined: readonly SkillQuarantineDiagnostic[];
39
+ }
40
+ /** Structured skill identifier (source UUID + skill name). */
41
+ export interface SkillKey {
42
+ readonly sourceUuid: string;
43
+ readonly skillName: string;
44
+ }
45
+ /** A skill reference — either a {@link SkillKey} or a legacy string. */
46
+ export type SkillRef = SkillKey | string;
47
+ /** Ephemeral per-turn tool visibility overlay. */
48
+ export interface TurnToolOverlay {
49
+ readonly allowedTools?: readonly string[];
50
+ readonly blockedTools?: readonly string[];
51
+ }
52
+ /** Result of an agent session creation or turn. */
53
+ export interface RunResult {
54
+ readonly sessionId: string;
55
+ readonly sessionRef?: string;
56
+ readonly text: string;
57
+ readonly turns: number;
58
+ readonly toolCalls: number;
59
+ readonly usage: Usage;
60
+ readonly structuredOutput?: unknown;
61
+ readonly schemaWarnings?: readonly SchemaWarning[];
62
+ readonly skillDiagnostics?: SkillRuntimeDiagnostics;
63
+ }
64
+ /** Summary of an active session. */
65
+ export interface SessionInfo {
66
+ readonly sessionId: string;
67
+ readonly sessionRef?: string;
68
+ readonly createdAt: string;
69
+ readonly updatedAt: string;
70
+ readonly messageCount: number;
71
+ readonly totalTokens: number;
72
+ readonly isActive: boolean;
73
+ }
74
+ /** A runtime capability and its availability status. */
75
+ export interface Capability {
76
+ readonly id: string;
77
+ readonly description: string;
78
+ readonly status: string;
79
+ }
80
+ /** Options for creating a new session. */
81
+ export interface SessionOptions {
82
+ model?: string;
83
+ provider?: string;
84
+ systemPrompt?: string;
85
+ maxTokens?: number;
86
+ outputSchema?: Record<string, unknown>;
87
+ structuredOutputRetries?: number;
88
+ hooksOverride?: Record<string, unknown>;
89
+ enableBuiltins?: boolean;
90
+ enableShell?: boolean;
91
+ enableSubagents?: boolean;
92
+ enableMemory?: boolean;
93
+ enableMob?: boolean;
94
+ hostMode?: boolean;
95
+ commsName?: string;
96
+ peerMeta?: Record<string, unknown>;
97
+ budgetLimits?: Record<string, unknown>;
98
+ providerParams?: Record<string, unknown>;
99
+ preloadSkills?: string[];
100
+ skillRefs?: SkillRef[];
101
+ skillReferences?: string[];
102
+ }
103
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Public domain types for the Meerkat TypeScript SDK.
3
+ *
4
+ * These replace the `Wire*` prefixed generated types. All fields use
5
+ * idiomatic camelCase.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rkat/sdk",
3
- "version": "0.3.4",
3
+ "version": "0.4.1",
4
4
  "description": "TypeScript SDK for Meerkat agent runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,24 +0,0 @@
1
- /**
2
- * Capability checking and method gating for the Meerkat SDK.
3
- */
4
- import type { CapabilitiesResponse } from "./generated/types.js";
5
- /**
6
- * Gates method calls by checking runtime capabilities.
7
- *
8
- * @example
9
- * ```ts
10
- * const checker = new CapabilityChecker(capabilitiesResponse);
11
- * checker.require("comms"); // throws if comms not available
12
- * ```
13
- */
14
- export declare class CapabilityChecker {
15
- private capabilities;
16
- constructor(response: CapabilitiesResponse);
17
- /** Check if a capability is available. */
18
- has(capabilityId: string): boolean;
19
- /** Throw CapabilityUnavailableError if capability is not available. */
20
- require(capabilityId: string): void;
21
- /** List all available capability IDs. */
22
- get available(): string[];
23
- }
24
- //# sourceMappingURL=capabilities.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE;;;;;;;;GAQG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,YAAY,CAAsB;gBAE9B,QAAQ,EAAE,oBAAoB;IAM1C,0CAA0C;IAC1C,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAIlC,uEAAuE;IACvE,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IASnC,yCAAyC;IACzC,IAAI,SAAS,IAAI,MAAM,EAAE,CAIxB;CACF"}
@@ -1,36 +0,0 @@
1
- /**
2
- * Capability checking and method gating for the Meerkat SDK.
3
- */
4
- import { CapabilityUnavailableError } from "./generated/errors.js";
5
- /**
6
- * Gates method calls by checking runtime capabilities.
7
- *
8
- * @example
9
- * ```ts
10
- * const checker = new CapabilityChecker(capabilitiesResponse);
11
- * checker.require("comms"); // throws if comms not available
12
- * ```
13
- */
14
- export class CapabilityChecker {
15
- capabilities;
16
- constructor(response) {
17
- this.capabilities = new Map(response.capabilities.map((c) => [c.id, c.status]));
18
- }
19
- /** Check if a capability is available. */
20
- has(capabilityId) {
21
- return this.capabilities.get(capabilityId) === "Available";
22
- }
23
- /** Throw CapabilityUnavailableError if capability is not available. */
24
- require(capabilityId) {
25
- if (!this.has(capabilityId)) {
26
- throw new CapabilityUnavailableError("CAPABILITY_UNAVAILABLE", `Capability '${capabilityId}' is not available in this runtime`);
27
- }
28
- }
29
- /** List all available capability IDs. */
30
- get available() {
31
- return [...this.capabilities.entries()]
32
- .filter(([, status]) => status === "Available")
33
- .map(([id]) => id);
34
- }
35
- }
36
- //# sourceMappingURL=capabilities.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;;;;;;;GAQG;AACH,MAAM,OAAO,iBAAiB;IACpB,YAAY,CAAsB;IAE1C,YAAY,QAA8B;QACxC,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CACzB,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CACnD,CAAC;IACJ,CAAC;IAED,0CAA0C;IAC1C,GAAG,CAAC,YAAoB;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,WAAW,CAAC;IAC7D,CAAC;IAED,uEAAuE;IACvE,OAAO,CAAC,YAAoB;QAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,0BAA0B,CAClC,wBAAwB,EACxB,eAAe,YAAY,oCAAoC,CAChE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,IAAI,SAAS;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;aACpC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,KAAK,WAAW,CAAC;aAC9C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;CACF"}
package/dist/skills.d.ts DELETED
@@ -1,41 +0,0 @@
1
- /**
2
- * Skill invocation helpers for the Meerkat SDK.
3
- */
4
- import type { MeerkatClient } from "./client.js";
5
- import type { WireRunResult } from "./generated/types.js";
6
- /**
7
- * Helpers for working with Meerkat skills.
8
- *
9
- * Skills are loaded by the agent from filesystem and embedded sources.
10
- * The agent's system prompt contains an inventory of available skills.
11
- * To invoke a skill, include its reference (e.g. `/shell-patterns`)
12
- * in the user prompt.
13
- *
14
- * @example
15
- * ```ts
16
- * const helper = new SkillHelper(client);
17
- * helper.requireSkills();
18
- * const result = await helper.invoke(sessionId, "/shell-patterns", "How do I run a background job?");
19
- * ```
20
- */
21
- export declare class SkillHelper {
22
- private client;
23
- constructor(client: MeerkatClient);
24
- /** Check if the skills capability is available in this runtime. */
25
- isAvailable(): boolean;
26
- /** Throw if skills capability is not available. */
27
- requireSkills(): void;
28
- /**
29
- * Invoke a skill within an existing session.
30
- *
31
- * The skill reference (e.g. `/shell-patterns`) is prepended to the prompt.
32
- * The agent's system prompt already contains the skill inventory, so it
33
- * knows how to resolve the reference.
34
- */
35
- invoke(sessionId: string, skillReference: string, prompt: string): Promise<WireRunResult>;
36
- /**
37
- * Create a new session and invoke a skill in the first turn.
38
- */
39
- invokeNewSession(skillReference: string, prompt: string, model?: string): Promise<WireRunResult>;
40
- }
41
- //# sourceMappingURL=skills.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAIjC,mEAAmE;IACnE,WAAW,IAAI,OAAO;IAItB,mDAAmD;IACnD,aAAa,IAAI,IAAI;IAUrB;;;;;;OAMG;IACG,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,CAAC;IAMzB;;OAEG;IACG,gBAAgB,CACpB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,CAAC;CAK1B"}
package/dist/skills.js DELETED
@@ -1,57 +0,0 @@
1
- /**
2
- * Skill invocation helpers for the Meerkat SDK.
3
- */
4
- import { CapabilityUnavailableError } from "./generated/errors.js";
5
- /**
6
- * Helpers for working with Meerkat skills.
7
- *
8
- * Skills are loaded by the agent from filesystem and embedded sources.
9
- * The agent's system prompt contains an inventory of available skills.
10
- * To invoke a skill, include its reference (e.g. `/shell-patterns`)
11
- * in the user prompt.
12
- *
13
- * @example
14
- * ```ts
15
- * const helper = new SkillHelper(client);
16
- * helper.requireSkills();
17
- * const result = await helper.invoke(sessionId, "/shell-patterns", "How do I run a background job?");
18
- * ```
19
- */
20
- export class SkillHelper {
21
- client;
22
- constructor(client) {
23
- this.client = client;
24
- }
25
- /** Check if the skills capability is available in this runtime. */
26
- isAvailable() {
27
- return this.client.hasCapability("skills");
28
- }
29
- /** Throw if skills capability is not available. */
30
- requireSkills() {
31
- if (!this.isAvailable()) {
32
- throw new CapabilityUnavailableError("CAPABILITY_UNAVAILABLE", "Skills capability is not available in this runtime. " +
33
- "Build with --features skills to enable.");
34
- }
35
- }
36
- /**
37
- * Invoke a skill within an existing session.
38
- *
39
- * The skill reference (e.g. `/shell-patterns`) is prepended to the prompt.
40
- * The agent's system prompt already contains the skill inventory, so it
41
- * knows how to resolve the reference.
42
- */
43
- async invoke(sessionId, skillReference, prompt) {
44
- this.requireSkills();
45
- const fullPrompt = `${skillReference} ${prompt}`;
46
- return this.client.startTurn(sessionId, fullPrompt);
47
- }
48
- /**
49
- * Create a new session and invoke a skill in the first turn.
50
- */
51
- async invokeNewSession(skillReference, prompt, model) {
52
- this.requireSkills();
53
- const fullPrompt = `${skillReference} ${prompt}`;
54
- return this.client.createSession({ prompt: fullPrompt, model });
55
- }
56
- }
57
- //# sourceMappingURL=skills.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,CAAgB;IAE9B,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,mEAAmE;IACnE,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,mDAAmD;IACnD,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,0BAA0B,CAClC,wBAAwB,EACxB,sDAAsD;gBACpD,yCAAyC,CAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CACV,SAAiB,EACjB,cAAsB,EACtB,MAAc;QAEd,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,GAAG,cAAc,IAAI,MAAM,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,cAAsB,EACtB,MAAc,EACd,KAAc;QAEd,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,GAAG,cAAc,IAAI,MAAM,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;CACF"}