@rkat/sdk 0.4.5 → 0.4.7

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/session.js CHANGED
@@ -31,101 +31,110 @@ export class Session {
31
31
  this._ref = result.sessionRef;
32
32
  this._lastResult = result;
33
33
  }
34
- // -- Identity -----------------------------------------------------------
35
- /** The stable UUID for this session. */
36
34
  get id() {
37
35
  return this._id;
38
36
  }
39
- /** Optional human-readable session reference. */
40
37
  get ref() {
41
38
  return this._ref;
42
39
  }
43
- // -- Last result shortcuts ----------------------------------------------
44
- /** The most recent {@link RunResult}. */
45
40
  get lastResult() {
46
41
  return this._lastResult;
47
42
  }
48
- /** The assistant's text from the last turn. */
49
43
  get text() {
50
44
  return this._lastResult.text;
51
45
  }
52
- /** Token usage from the last turn. */
53
46
  get usage() {
54
47
  return this._lastResult.usage;
55
48
  }
56
- /** Number of LLM turns in the last run. */
57
49
  get turns() {
58
50
  return this._lastResult.turns;
59
51
  }
60
- /** Number of tool calls in the last run. */
61
52
  get toolCalls() {
62
53
  return this._lastResult.toolCalls;
63
54
  }
64
- /** Structured output from the last run, if requested. */
65
55
  get structuredOutput() {
66
56
  return this._lastResult.structuredOutput;
67
57
  }
68
- // -- Multi-turn ---------------------------------------------------------
69
- /** Run another turn on this session (non-streaming). */
70
58
  async turn(prompt, options) {
71
59
  const result = await this._client._startTurn(this._id, prompt, options);
72
60
  this._lastResult = result;
73
61
  return result;
74
62
  }
75
- /**
76
- * Run another turn on this session with streaming events.
77
- *
78
- * Returns an {@link EventStream} `AsyncIterable<AgentEvent>`.
79
- *
80
- * @example
81
- * ```ts
82
- * for await (const event of session.stream("prompt")) {
83
- * // ...
84
- * }
85
- * ```
86
- */
87
63
  stream(prompt, options) {
88
64
  return this._client._startTurnStreaming(this._id, prompt, options, this);
89
65
  }
90
- // -- Lifecycle ----------------------------------------------------------
91
- /** Cancel the currently running turn, if any. */
92
66
  async interrupt() {
93
67
  await this._client._interrupt(this._id);
94
68
  }
95
- /** Archive (remove) this session from the server. */
96
69
  async archive() {
97
70
  await this._client._archive(this._id);
98
71
  }
99
- // -- Skills convenience -------------------------------------------------
100
- /**
101
- * Invoke a skill in this session.
102
- *
103
- * Accepts a {@link SkillKey} or a legacy string reference.
104
- * Sends the structured `skill_refs` parameter to the runtime.
105
- */
72
+ async history(options) {
73
+ return this._client.readSessionHistory(this._id, options);
74
+ }
75
+ async subscribeEvents() {
76
+ return this._client.subscribeSessionEvents(this._id);
77
+ }
106
78
  async invokeSkill(skillRef, prompt) {
107
79
  this._client.requireCapability("skills");
108
80
  return this.turn(prompt, { skillRefs: [skillRef] });
109
81
  }
110
- // -- Comms convenience --------------------------------------------------
111
- /** Send a comms command scoped to this session. */
112
82
  async send(command) {
113
- return this._client._send(this._id, command);
83
+ const { session_id: _ignored, ...rest } = command;
84
+ return this._client._send(this._id, rest);
114
85
  }
115
- /** List peers visible to this session's comms runtime. */
116
86
  async peers() {
117
87
  const result = await this._client._peers(this._id);
118
88
  return (result.peers ?? []);
119
89
  }
120
- async openCommsStream(options) {
121
- return this._client.openCommsStream(this._id, options);
90
+ toString() {
91
+ const ref = this._ref ? ` ref=${this._ref}` : "";
92
+ return `Session(id=${this._id}${ref})`;
122
93
  }
123
- async sendAndStream(command) {
124
- return this._client.sendAndStream(this._id, command);
94
+ }
95
+ /**
96
+ * A session created with `initial_turn: "deferred"`.
97
+ *
98
+ * No first turn has been executed yet. Use {@link startTurn} to run the first
99
+ * turn with optional per-turn overrides.
100
+ */
101
+ export class DeferredSession {
102
+ _client;
103
+ _id;
104
+ _ref;
105
+ /** @internal — constructed by MeerkatClient, not directly. */
106
+ constructor(client, sessionId, sessionRef) {
107
+ this._client = client;
108
+ this._id = sessionId;
109
+ this._ref = sessionRef;
110
+ }
111
+ get id() {
112
+ return this._id;
113
+ }
114
+ get ref() {
115
+ return this._ref;
116
+ }
117
+ /**
118
+ * Run the first turn on this deferred session.
119
+ *
120
+ * Accepts per-turn overrides (model, provider, etc.) that are applied
121
+ * before the session is materialized.
122
+ */
123
+ async startTurn(prompt, options) {
124
+ return this._client._startTurn(this._id, prompt, options);
125
+ }
126
+ async interrupt() {
127
+ await this._client._interrupt(this._id);
128
+ }
129
+ async archive() {
130
+ await this._client._archive(this._id);
131
+ }
132
+ async history(options) {
133
+ return this._client.readSessionHistory(this._id, options);
125
134
  }
126
135
  toString() {
127
136
  const ref = this._ref ? ` ref=${this._ref}` : "";
128
- return `Session(id=${this._id}${ref})`;
137
+ return `DeferredSession(id=${this._id}${ref})`;
129
138
  }
130
139
  }
131
140
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAOH,MAAM,OAAO,OAAO;IAClB,gBAAgB;IAChB,WAAW,CAAY;IAEN,OAAO,CAAgB;IACvB,GAAG,CAAS;IACZ,IAAI,CAAqB;IAE1C,8DAA8D;IAC9D,YAAY,MAAqB,EAAE,MAAiB;QAClD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;IAC5B,CAAC;IAED,0EAA0E;IAE1E,wCAAwC;IACxC,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,iDAAiD;IACjD,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,0EAA0E;IAE1E,yCAAyC;IACzC,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,+CAA+C;IAC/C,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,sCAAsC;IACtC,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAChC,CAAC;IAED,2CAA2C;IAC3C,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAChC,CAAC;IAED,4CAA4C;IAC5C,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;IACpC,CAAC;IAED,yDAAyD;IACzD,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;IAC3C,CAAC;IAED,0EAA0E;IAE1E,wDAAwD;IACxD,KAAK,CAAC,IAAI,CACR,MAAc,EACd,OAIC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAC1C,IAAI,CAAC,GAAG,EACR,MAAM,EACN,OAAO,CACR,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,MAAM,CACJ,MAAc,EACd,OAIC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CACrC,IAAI,CAAC,GAAG,EACR,MAAM,EACN,OAAO,EACP,IAAI,CACL,CAAC;IACJ,CAAC;IAED,0EAA0E;IAE1E,iDAAiD;IACjD,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,0EAA0E;IAE1E;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CACf,QAAkB,EAClB,MAAc;QAEd,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,0EAA0E;IAE1E,mDAAmD;IACnD,KAAK,CAAC,IAAI,CAAC,OAAgC;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,KAAK;QACT,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAmC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,OAAuE;QAEvE,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,OAAgC;QAEhC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,QAAQ;QACN,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,OAAO,cAAc,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;IACzC,CAAC;CACF"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
@@ -19,11 +19,17 @@ import type { StreamEvent } from "./events.js";
19
19
  import type { RunResult } from "./types.js";
20
20
  import type { Session } from "./session.js";
21
21
  /** @internal Queue with promise-based get(). */
22
- declare class AsyncQueue<T> {
22
+ export declare class AsyncQueue<T> {
23
23
  private buffer;
24
24
  private waiters;
25
+ private nextWaiterId;
25
26
  put(item: T): void;
26
27
  get(): Promise<T>;
28
+ private _get;
29
+ waitForItemCancelable(): {
30
+ promise: Promise<void>;
31
+ cancel: () => void;
32
+ };
27
33
  tryGet(): T | undefined;
28
34
  get isEmpty(): boolean;
29
35
  failAll(error: Error): void;
@@ -58,23 +64,7 @@ export declare class EventStream implements AsyncIterable<StreamEvent> {
58
64
  collect(): Promise<RunResult>;
59
65
  /** Consume events, accumulate text deltas, return `[fullText, result]`. */
60
66
  collectText(): Promise<[string, RunResult]>;
67
+ private _drainLateEvents;
61
68
  private _finalise;
62
69
  }
63
- /**
64
- * Async iterable of raw comms stream notifications emitted via `comms/stream_event`.
65
- */
66
- export declare class CommsEventStream implements AsyncIterable<Record<string, unknown>> {
67
- private readonly _streamId;
68
- private readonly _eventQueue;
69
- private readonly _onClose;
70
- constructor(opts: {
71
- streamId: string;
72
- eventQueue: AsyncQueue<Record<string, unknown> | null>;
73
- onClose: (streamId: string) => Promise<void>;
74
- });
75
- get streamId(): string;
76
- [Symbol.asyncIterator](): AsyncGenerator<Record<string, unknown>, void, undefined>;
77
- close(): Promise<void>;
78
- }
79
- export { AsyncQueue };
80
70
  //# sourceMappingURL=streaming.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,gDAAgD;AAChD,cAAM,UAAU,CAAC,CAAC;IAChB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,OAAO,CAAiC;IAEhD,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAQlB,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;IASjB,MAAM,IAAI,CAAC,GAAG,SAAS;IAIvB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAQ5B;AAKD;;;;;GAKG;AACH,qBAAa,WAAY,YAAW,aAAa,CAAC,WAAW,CAAC;IAC5D,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6C;IACzE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8C;IAC3E,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAE1C,8DAA8D;gBAClD,IAAI,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACvD,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAClD,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,SAAS,CAAC;QACzD,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB;IAQD,oCAAoC;IACpC,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,wEAAwE;IACxE,IAAI,MAAM,IAAI,SAAS,CAQtB;IAEM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC;IA0C7E,+DAA+D;IACzD,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;IAOnC,2EAA2E;IACrE,WAAW,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAUjD,OAAO,CAAC,SAAS;CASlB;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6C;IACzE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;gBAEnD,IAAI,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACvD,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9C;IAMD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAEM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;IAQnF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAGD,OAAO,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,gDAAgD;AAChD,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,OAAO,CAAkD;IACjE,OAAO,CAAC,YAAY,CAAK;IAEzB,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAalB,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;YAIH,IAAI;IAOlB,qBAAqB,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE;IAqCvE,MAAM,IAAI,CAAC,GAAG,SAAS;IAIvB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAW5B;AAID;;;;;GAKG;AACH,qBAAa,WAAY,YAAW,aAAa,CAAC,WAAW,CAAC;IAC5D,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6C;IACzE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8C;IAC3E,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAE1C,8DAA8D;gBAClD,IAAI,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACvD,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAClD,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,SAAS,CAAC;QACzD,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB;IAQD,oCAAoC;IACpC,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,wEAAwE;IACxE,IAAI,MAAM,IAAI,SAAS,CAQtB;IAEM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC;IA2C7E,+DAA+D;IACzD,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;IAOnC,2EAA2E;IACrE,WAAW,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAUlC,gBAAgB;IAgC/B,OAAO,CAAC,SAAS;CASlB"}
package/dist/streaming.js CHANGED
@@ -18,24 +18,63 @@
18
18
  import { isTextDelta, parseEvent } from "./events.js";
19
19
  import { MeerkatError } from "./generated/errors.js";
20
20
  /** @internal Queue with promise-based get(). */
21
- class AsyncQueue {
21
+ export class AsyncQueue {
22
22
  buffer = [];
23
23
  waiters = [];
24
+ nextWaiterId = 0;
24
25
  put(item) {
25
- if (this.waiters.length > 0) {
26
- this.waiters.shift()(item);
26
+ this.buffer.push(item);
27
+ if (this.waiters.length === 0) {
28
+ return;
27
29
  }
28
- else {
29
- this.buffer.push(item);
30
+ const waiters = this.waiters;
31
+ this.waiters = [];
32
+ for (const waiter of waiters) {
33
+ waiter.resolve();
30
34
  }
31
35
  }
32
36
  get() {
37
+ return this._get();
38
+ }
39
+ async _get() {
40
+ while (this.buffer.length === 0) {
41
+ await this.waitForItemCancelable().promise;
42
+ }
43
+ return this.buffer.shift();
44
+ }
45
+ waitForItemCancelable() {
33
46
  if (this.buffer.length > 0) {
34
- return Promise.resolve(this.buffer.shift());
47
+ return {
48
+ promise: Promise.resolve(),
49
+ cancel: () => {
50
+ // Already resolved from the buffer.
51
+ },
52
+ };
35
53
  }
36
- return new Promise((resolve) => {
37
- this.waiters.push(resolve);
54
+ const waiterId = this.nextWaiterId++;
55
+ let settled = false;
56
+ const promise = new Promise((resolve) => {
57
+ this.waiters.push({
58
+ id: waiterId,
59
+ resolve: () => {
60
+ settled = true;
61
+ resolve();
62
+ },
63
+ });
38
64
  });
65
+ return {
66
+ promise,
67
+ cancel: () => {
68
+ if (settled) {
69
+ return;
70
+ }
71
+ const waiterIndex = this.waiters.findIndex((waiter) => waiter.id === waiterId);
72
+ if (waiterIndex >= 0) {
73
+ this.waiters.splice(waiterIndex, 1);
74
+ }
75
+ settled = true;
76
+ },
77
+ };
39
78
  }
40
79
  tryGet() {
41
80
  return this.buffer.shift();
@@ -44,16 +83,18 @@ class AsyncQueue {
44
83
  return this.buffer.length === 0;
45
84
  }
46
85
  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);
86
+ // Wake every current waiter with a sentinel so pending gets can complete.
87
+ for (let i = 0; i < Math.max(this.waiters.length, 1); i += 1) {
88
+ this.buffer.push(undefined);
51
89
  }
90
+ const waiters = this.waiters;
52
91
  this.waiters = [];
92
+ for (const waiter of waiters) {
93
+ waiter.resolve();
94
+ }
53
95
  }
54
96
  }
55
- /** Sentinel for end-of-stream. */
56
- const SENTINEL = Symbol("eos");
97
+ const RESPONSE_DRAIN_GRACE_MS = 75;
57
98
  /**
58
99
  * Typed async iterable of {@link StreamEvent} objects from a running turn.
59
100
  *
@@ -96,30 +137,31 @@ export class EventStream {
96
137
  });
97
138
  while (true) {
98
139
  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);
105
- }
140
+ yield* this._drainLateEvents();
106
141
  this._finalise(responseResult);
107
142
  return;
108
143
  }
109
144
  // Race: next event vs response
110
- const eventPromise = this._eventQueue.get();
145
+ const { promise: itemReady, cancel } = this._eventQueue.waitForItemCancelable();
111
146
  const result = await Promise.race([
112
- eventPromise.then((raw) => ({ kind: "event", raw })),
147
+ itemReady.then(() => ({ kind: "event" })),
113
148
  responseHandler.then(() => ({ kind: "response", raw: null })),
114
149
  ]);
115
150
  if (result.kind === "event") {
116
- if (result.raw == null) {
151
+ const raw = this._eventQueue.tryGet();
152
+ if (raw === undefined) {
153
+ continue;
154
+ }
155
+ if (raw === null) {
117
156
  // Sentinel — stream ended
118
157
  await responseHandler;
119
158
  this._finalise(responseResult);
120
159
  return;
121
160
  }
122
- yield parseEvent(result.raw);
161
+ yield parseEvent(raw);
162
+ }
163
+ else {
164
+ cancel();
123
165
  }
124
166
  // If response, loop back to the top which handles drain
125
167
  }
@@ -141,6 +183,34 @@ export class EventStream {
141
183
  }
142
184
  return [parts.join(""), this.result];
143
185
  }
186
+ async *_drainLateEvents() {
187
+ let deadline = Date.now() + RESPONSE_DRAIN_GRACE_MS;
188
+ while (true) {
189
+ let yieldedEvent = false;
190
+ while (!this._eventQueue.isEmpty) {
191
+ const raw = this._eventQueue.tryGet();
192
+ if (raw === undefined) {
193
+ break;
194
+ }
195
+ if (raw === null) {
196
+ return;
197
+ }
198
+ yieldedEvent = true;
199
+ yield parseEvent(raw);
200
+ }
201
+ if (yieldedEvent) {
202
+ deadline = Date.now() + RESPONSE_DRAIN_GRACE_MS;
203
+ continue;
204
+ }
205
+ const remainingMs = deadline - Date.now();
206
+ if (remainingMs <= 0) {
207
+ return;
208
+ }
209
+ await new Promise((resolve) => {
210
+ setTimeout(resolve, Math.min(remainingMs, 5));
211
+ });
212
+ }
213
+ }
144
214
  _finalise(rawResult) {
145
215
  this._result = this._parseResult(rawResult);
146
216
  if (!this._sessionId) {
@@ -151,33 +221,4 @@ export class EventStream {
151
221
  }
152
222
  }
153
223
  }
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);
179
- }
180
- }
181
- // Re-export AsyncQueue for internal use by client
182
- export { AsyncQueue };
183
224
  //# sourceMappingURL=streaming.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { AsyncQueue } from "./streaming.js";
2
+ export declare class EventSubscription<T> implements AsyncIterable<T> {
3
+ private readonly streamId;
4
+ private readonly queue;
5
+ private readonly closeRemote;
6
+ private readonly parseEvent;
7
+ private readonly getTerminalOutcome;
8
+ private closed;
9
+ /** @internal */
10
+ constructor(opts: {
11
+ streamId: string;
12
+ queue: AsyncQueue<Record<string, unknown> | null>;
13
+ closeRemote: (streamId: string) => Promise<void>;
14
+ parseEvent: (raw: Record<string, unknown>) => T;
15
+ getTerminalOutcome: () => Record<string, unknown> | undefined;
16
+ });
17
+ get id(): string;
18
+ get isClosed(): boolean;
19
+ get terminalOutcome(): Record<string, unknown> | undefined;
20
+ close(): Promise<void>;
21
+ [Symbol.asyncIterator](): AsyncGenerator<T, void, undefined>;
22
+ }
23
+ //# sourceMappingURL=subscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../src/subscription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,qBAAa,iBAAiB,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6C;IACnE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4C;IAC/E,OAAO,CAAC,MAAM,CAAS;IAEvB,gBAAgB;gBACJ,IAAI,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAClD,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACjD,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAChD,kBAAkB,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;KAC/D;IAQD,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAEzD;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;CASpE"}
@@ -0,0 +1,42 @@
1
+ export class EventSubscription {
2
+ streamId;
3
+ queue;
4
+ closeRemote;
5
+ parseEvent;
6
+ getTerminalOutcome;
7
+ closed = false;
8
+ /** @internal */
9
+ constructor(opts) {
10
+ this.streamId = opts.streamId;
11
+ this.queue = opts.queue;
12
+ this.closeRemote = opts.closeRemote;
13
+ this.parseEvent = opts.parseEvent;
14
+ this.getTerminalOutcome = opts.getTerminalOutcome;
15
+ }
16
+ get id() {
17
+ return this.streamId;
18
+ }
19
+ get isClosed() {
20
+ return this.closed;
21
+ }
22
+ get terminalOutcome() {
23
+ return this.getTerminalOutcome();
24
+ }
25
+ async close() {
26
+ if (this.closed)
27
+ return;
28
+ this.closed = true;
29
+ this.queue.put(null);
30
+ await this.closeRemote(this.streamId);
31
+ }
32
+ async *[Symbol.asyncIterator]() {
33
+ while (true) {
34
+ const raw = await this.queue.get();
35
+ if (raw == null) {
36
+ return;
37
+ }
38
+ yield this.parseEvent(raw);
39
+ }
40
+ }
41
+ }
42
+ //# sourceMappingURL=subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription.js","sourceRoot":"","sources":["../src/subscription.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAiB;IACX,QAAQ,CAAS;IACjB,KAAK,CAA6C;IAClD,WAAW,CAAsC;IACjD,UAAU,CAAsC;IAChD,kBAAkB,CAA4C;IACvE,MAAM,GAAG,KAAK,CAAC;IAEvB,gBAAgB;IAChB,YAAY,IAMX;QACC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;IACpD,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACnC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;CACF"}
package/dist/types.d.ts CHANGED
@@ -71,7 +71,97 @@ export interface SessionInfo {
71
71
  readonly totalTokens: number;
72
72
  readonly isActive: boolean;
73
73
  }
74
+ export interface SessionToolCall {
75
+ readonly id: string;
76
+ readonly name: string;
77
+ readonly args: unknown;
78
+ }
79
+ export interface SessionToolResult {
80
+ readonly toolUseId: string;
81
+ readonly content: string;
82
+ readonly isError: boolean;
83
+ }
84
+ export interface SessionAssistantBlock {
85
+ readonly blockType: string;
86
+ readonly text?: string;
87
+ readonly id?: string;
88
+ readonly name?: string;
89
+ readonly args?: unknown;
90
+ readonly meta?: Record<string, unknown>;
91
+ }
92
+ export interface SessionMessage {
93
+ readonly role: string;
94
+ readonly content?: string;
95
+ readonly toolCalls: readonly SessionToolCall[];
96
+ readonly stopReason?: string;
97
+ readonly blocks: readonly SessionAssistantBlock[];
98
+ readonly results: readonly SessionToolResult[];
99
+ }
100
+ export interface SessionHistory {
101
+ readonly sessionId: string;
102
+ readonly sessionRef?: string;
103
+ readonly messageCount: number;
104
+ readonly offset: number;
105
+ readonly limit?: number;
106
+ readonly hasMore: boolean;
107
+ readonly messages: readonly SessionMessage[];
108
+ }
74
109
  /** A runtime capability and its availability status. */
110
+ export interface EventEnvelope<T = unknown> {
111
+ readonly timestamp_ms: number;
112
+ readonly source_id: string;
113
+ readonly seq: number;
114
+ readonly event_id: string;
115
+ readonly payload: T;
116
+ }
117
+ export interface AttributedEvent {
118
+ readonly source: string;
119
+ readonly profile: string;
120
+ readonly envelope: EventEnvelope;
121
+ }
122
+ export interface MobDefinition {
123
+ readonly id: string;
124
+ readonly profiles: Record<string, unknown>;
125
+ readonly wiring?: Record<string, unknown>;
126
+ readonly flows?: Record<string, unknown>;
127
+ readonly mcp_servers?: Record<string, unknown>;
128
+ readonly skills?: Record<string, unknown>;
129
+ readonly orchestrator?: unknown;
130
+ readonly backend?: unknown;
131
+ }
132
+ export interface SpawnSpec {
133
+ readonly profile: string;
134
+ readonly meerkatId: string;
135
+ readonly initialMessage?: string;
136
+ readonly runtimeMode?: "turn_driven" | "autonomous_host";
137
+ readonly backend?: "subagent" | "external";
138
+ readonly labels?: Record<string, string>;
139
+ readonly context?: Record<string, unknown>;
140
+ readonly resumeSessionId?: string;
141
+ readonly additionalInstructions?: string[];
142
+ }
143
+ export interface MobMember {
144
+ readonly meerkatId: string;
145
+ readonly profile: string;
146
+ readonly memberRef?: Record<string, unknown>;
147
+ readonly runtimeMode?: string;
148
+ readonly state?: string;
149
+ readonly wiredTo?: readonly string[];
150
+ readonly labels?: Record<string, string>;
151
+ readonly sessionId?: string;
152
+ }
153
+ export interface MobSummary {
154
+ readonly mobId: string;
155
+ readonly status: string;
156
+ }
157
+ export interface MobStatus {
158
+ readonly mobId: string;
159
+ readonly status: string;
160
+ }
161
+ export type MobLifecycleAction = "stop" | "resume" | "complete" | "destroy" | "reset";
162
+ export interface MobFlowStatus {
163
+ readonly run?: Record<string, unknown> | null;
164
+ }
75
165
  export interface Capability {
76
166
  readonly id: string;
77
167
  readonly description: string;
@@ -100,4 +190,23 @@ export interface SessionOptions {
100
190
  skillRefs?: SkillRef[];
101
191
  skillReferences?: string[];
102
192
  }
193
+ /** Explicit standalone session-event envelope. */
194
+ export interface AgentEventEnvelope {
195
+ readonly eventId: string;
196
+ readonly sourceId: string;
197
+ readonly seq: number;
198
+ readonly timestampMs: number;
199
+ readonly payload: import("./events.js").AgentEvent;
200
+ }
201
+ /** Mob-wide attributed event emitted by member/mob observation streams. */
202
+ export interface AttributedMobEvent {
203
+ readonly source: string;
204
+ readonly profile: string;
205
+ readonly envelope: AgentEventEnvelope;
206
+ }
207
+ /** Options for creating a mob through the RPC-backed SDK surface. */
208
+ export interface MobCreateOptions {
209
+ prefab?: string;
210
+ definition?: Record<string, unknown>;
211
+ }
103
212
  //# sourceMappingURL=types.d.ts.map