@rkat/mobkit-sdk 0.4.9

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.
Files changed (82) hide show
  1. package/dist/agent-builder.d.ts +44 -0
  2. package/dist/agent-builder.d.ts.map +1 -0
  3. package/dist/agent-builder.js +111 -0
  4. package/dist/agent-builder.js.map +1 -0
  5. package/dist/builder.d.ts +74 -0
  6. package/dist/builder.d.ts.map +1 -0
  7. package/dist/builder.js +145 -0
  8. package/dist/builder.js.map +1 -0
  9. package/dist/cjs/agent-builder.cjs +114 -0
  10. package/dist/cjs/builder.cjs +182 -0
  11. package/dist/cjs/client.cjs +182 -0
  12. package/dist/cjs/config/auth.cjs +44 -0
  13. package/dist/cjs/config/index.cjs +51 -0
  14. package/dist/cjs/config/memory.cjs +28 -0
  15. package/dist/cjs/config/session-store.cjs +41 -0
  16. package/dist/cjs/errors.cjs +82 -0
  17. package/dist/cjs/events.cjs +176 -0
  18. package/dist/cjs/helpers.cjs +72 -0
  19. package/dist/cjs/index.cjs +130 -0
  20. package/dist/cjs/models.cjs +124 -0
  21. package/dist/cjs/runtime.cjs +476 -0
  22. package/dist/cjs/sse.cjs +79 -0
  23. package/dist/cjs/transport.cjs +282 -0
  24. package/dist/cjs/types.cjs +376 -0
  25. package/dist/client.d.ts +79 -0
  26. package/dist/client.d.ts.map +1 -0
  27. package/dist/client.js +178 -0
  28. package/dist/client.js.map +1 -0
  29. package/dist/config/auth.d.ts +28 -0
  30. package/dist/config/auth.d.ts.map +1 -0
  31. package/dist/config/auth.js +39 -0
  32. package/dist/config/auth.js.map +1 -0
  33. package/dist/config/index.d.ts +16 -0
  34. package/dist/config/index.d.ts.map +1 -0
  35. package/dist/config/index.js +16 -0
  36. package/dist/config/index.js.map +1 -0
  37. package/dist/config/memory.d.ts +16 -0
  38. package/dist/config/memory.d.ts.map +1 -0
  39. package/dist/config/memory.js +25 -0
  40. package/dist/config/memory.js.map +1 -0
  41. package/dist/config/session-store.d.ts +23 -0
  42. package/dist/config/session-store.d.ts.map +1 -0
  43. package/dist/config/session-store.js +36 -0
  44. package/dist/config/session-store.js.map +1 -0
  45. package/dist/errors.d.ts +48 -0
  46. package/dist/errors.d.ts.map +1 -0
  47. package/dist/errors.js +74 -0
  48. package/dist/errors.js.map +1 -0
  49. package/dist/events.d.ts +126 -0
  50. package/dist/events.d.ts.map +1 -0
  51. package/dist/events.js +164 -0
  52. package/dist/events.js.map +1 -0
  53. package/dist/helpers.d.ts +58 -0
  54. package/dist/helpers.d.ts.map +1 -0
  55. package/dist/helpers.js +62 -0
  56. package/dist/helpers.js.map +1 -0
  57. package/dist/index.cjs +2 -0
  58. package/dist/index.d.ts +48 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +49 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/models.d.ts +61 -0
  63. package/dist/models.d.ts.map +1 -0
  64. package/dist/models.js +118 -0
  65. package/dist/models.js.map +1 -0
  66. package/dist/runtime.d.ts +131 -0
  67. package/dist/runtime.d.ts.map +1 -0
  68. package/dist/runtime.js +470 -0
  69. package/dist/runtime.js.map +1 -0
  70. package/dist/sse.d.ts +21 -0
  71. package/dist/sse.d.ts.map +1 -0
  72. package/dist/sse.js +76 -0
  73. package/dist/sse.js.map +1 -0
  74. package/dist/transport.d.ts +84 -0
  75. package/dist/transport.d.ts.map +1 -0
  76. package/dist/transport.js +275 -0
  77. package/dist/transport.js.map +1 -0
  78. package/dist/types.d.ts +209 -0
  79. package/dist/types.d.ts.map +1 -0
  80. package/dist/types.js +348 -0
  81. package/dist/types.js.map +1 -0
  82. package/package.json +34 -0
@@ -0,0 +1,470 @@
1
+ /**
2
+ * MobKit runtime — the running instance returned by the builder.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * const rt = await MobKit.builder().mob("mob.toml").gateway(bin).build();
7
+ * const handle = rt.mobHandle();
8
+ *
9
+ * const status = await handle.status();
10
+ * console.log(status.contractVersion, status.loadedModules);
11
+ *
12
+ * await rt.shutdown();
13
+ * ```
14
+ */
15
+ import { request as httpRequest } from "node:http";
16
+ import { request as httpsRequest } from "node:https";
17
+ import { readFileSync } from "node:fs";
18
+ import { CallbackDispatcher } from "./agent-builder.js";
19
+ import { NotConnectedError, RpcError, TransportError } from "./errors.js";
20
+ import { PersistentTransport, buildJsonRpcRequest } from "./transport.js";
21
+ import { parseSseStream } from "./sse.js";
22
+ import { parseAgentEventFromSse, parseMobEventFromSse, } from "./events.js";
23
+ import { discoverySpecToDict } from "./models.js";
24
+ import { parseStatusResult, parseCapabilitiesResult, parseReconcileResult, parseSpawnResult, parseSubscribeResult, parseSendMessageResult, parseRoutingResolution, parseDeliveryResult, parseDeliveryHistoryResult, parseMemoryQueryResult, parseMemoryStoreInfo, parseMemoryIndexResult, parseCallToolResult, parseMemberSnapshot, parseRuntimeRouteResult, parseGatingEvaluateResult, parseGatingDecisionResult, parseGatingAuditEntry, parseGatingPendingEntry, parseRediscoverReport, parseReconcileEdgesReport, parsePersistedEvent, eventQueryToDict, } from "./types.js";
25
+ // -- Request ID counter ---------------------------------------------------
26
+ let requestCounter = 0;
27
+ function nextRequestId(method) {
28
+ return `${method}:${++requestCounter}`;
29
+ }
30
+ // -- MobKitRuntime --------------------------------------------------------
31
+ /**
32
+ * Running MobKit runtime instance.
33
+ *
34
+ * Supports explicit lifecycle (`connect` / `shutdown`).
35
+ */
36
+ export class MobKitRuntime {
37
+ _config;
38
+ _transport;
39
+ _running = false;
40
+ _dispatcher = new CallbackDispatcher();
41
+ _rustHttpBase = null;
42
+ /** @internal */
43
+ constructor(config, transport) {
44
+ this._config = config;
45
+ this._transport = transport ?? null;
46
+ }
47
+ /** @internal */
48
+ static async _create(config) {
49
+ const runtime = new MobKitRuntime(config);
50
+ await runtime._bootstrap();
51
+ return runtime;
52
+ }
53
+ /** Explicitly connect to the runtime. Idempotent. */
54
+ async connect() {
55
+ if (this._running)
56
+ return;
57
+ await this._bootstrap();
58
+ }
59
+ async _bootstrap() {
60
+ if (this._config.gatewayBin) {
61
+ this._transport = new PersistentTransport(this._config.gatewayBin);
62
+ // Register builder FIRST — init may trigger callback/build_agent
63
+ if (this._config.sessionBuilder) {
64
+ this._dispatcher.registerBuilder(this._config.sessionBuilder);
65
+ }
66
+ if (this._config.errorCallback !== null) {
67
+ this._dispatcher.registerErrorCallback(this._config.errorCallback);
68
+ }
69
+ this._transport.setCallbackHandler(this._dispatcher.handleCallback.bind(this._dispatcher));
70
+ this._transport.start();
71
+ if (!this._transport.isRunning()) {
72
+ throw new TransportError(`gateway binary failed to start: ${this._config.gatewayBin}`);
73
+ }
74
+ try {
75
+ const initResult = await this._rpc("mobkit/init", this._buildInitParams());
76
+ if (typeof initResult === "object" &&
77
+ initResult !== null &&
78
+ "http_base_url" in initResult) {
79
+ this._rustHttpBase = String(initResult.http_base_url ?? "") || null;
80
+ }
81
+ }
82
+ catch {
83
+ if (this._transport !== null && !this._transport.isRunning()) {
84
+ throw new TransportError("gateway process died during bootstrap");
85
+ }
86
+ throw new TransportError("mobkit/init failed — runtime could not be initialized");
87
+ }
88
+ }
89
+ else if (this._config.sessionBuilder) {
90
+ this._dispatcher.registerBuilder(this._config.sessionBuilder);
91
+ }
92
+ this._running = true;
93
+ }
94
+ _buildInitParams() {
95
+ const params = {};
96
+ if (this._config.mobConfigPath) {
97
+ params.mob_config = readFileSync(this._config.mobConfigPath, "utf-8");
98
+ }
99
+ if (this._config.modules.length > 0) {
100
+ params.modules = this._config.modules;
101
+ }
102
+ params.has_session_builder = Boolean(this._config.sessionBuilder);
103
+ params.runtime_options = {};
104
+ return params;
105
+ }
106
+ /** @internal */
107
+ async _rpc(method, params) {
108
+ if (this._transport === null) {
109
+ throw new NotConnectedError("runtime not started — no transport available");
110
+ }
111
+ const rid = nextRequestId(method);
112
+ const request = buildJsonRpcRequest(rid, method, params ?? {});
113
+ const response = (await this._transport.sendAsync(request));
114
+ if ("error" in response) {
115
+ const err = response.error;
116
+ throw new RpcError(Number(err.code ?? -1), String(err.message ?? String(err)), rid, method);
117
+ }
118
+ return response.result;
119
+ }
120
+ get rustHttpBaseUrl() {
121
+ return this._rustHttpBase;
122
+ }
123
+ setRustHttpBase(url) {
124
+ this._rustHttpBase = url;
125
+ }
126
+ mobHandle() {
127
+ return new MobHandle(this);
128
+ }
129
+ sseBridge() {
130
+ return new SseBridge(this);
131
+ }
132
+ async shutdown() {
133
+ this._running = false;
134
+ if (this._transport !== null) {
135
+ this._transport.stop();
136
+ }
137
+ }
138
+ get isRunning() {
139
+ return this._running;
140
+ }
141
+ }
142
+ // -- MobHandle ------------------------------------------------------------
143
+ /**
144
+ * Proxy for the MobKit RPC API. Returns typed result objects.
145
+ *
146
+ * @example
147
+ * ```ts
148
+ * const handle = runtime.mobHandle();
149
+ * const members = await handle.listMembers();
150
+ * await handle.send(members[0].meerkatId, "Hello!");
151
+ * ```
152
+ */
153
+ export class MobHandle {
154
+ _runtime;
155
+ /** @internal */
156
+ constructor(_runtime) {
157
+ this._runtime = _runtime;
158
+ }
159
+ // -- Status & capabilities ----------------------------------------------
160
+ async status() {
161
+ return parseStatusResult(await this._runtime._rpc("mobkit/status"));
162
+ }
163
+ async capabilities() {
164
+ return parseCapabilitiesResult(await this._runtime._rpc("mobkit/capabilities"));
165
+ }
166
+ // -- Spawn & reconcile --------------------------------------------------
167
+ async spawn(spec) {
168
+ return parseSpawnResult(await this._runtime._rpc("mobkit/spawn_member", discoverySpecToDict(spec)));
169
+ }
170
+ async spawnMember(moduleId) {
171
+ return parseSpawnResult(await this._runtime._rpc("mobkit/spawn_member", { module_id: moduleId }));
172
+ }
173
+ async reconcile(modules) {
174
+ return parseReconcileResult(await this._runtime._rpc("mobkit/reconcile", { modules }));
175
+ }
176
+ // -- Event subscription -------------------------------------------------
177
+ async subscribeEvents(scope = "mob", lastEventId, agentId) {
178
+ const params = { scope };
179
+ if (lastEventId !== undefined)
180
+ params.last_event_id = lastEventId;
181
+ if (agentId !== undefined)
182
+ params.agent_id = agentId;
183
+ return parseSubscribeResult(await this._runtime._rpc("mobkit/events/subscribe", params));
184
+ }
185
+ async *subscribeAgent(memberId) {
186
+ const bridge = this._runtime.sseBridge();
187
+ for await (const sse of bridge.agentEvents(memberId)) {
188
+ yield parseAgentEventFromSse(sse);
189
+ }
190
+ }
191
+ async *subscribeMob() {
192
+ const bridge = this._runtime.sseBridge();
193
+ for await (const sse of bridge.mobEvents()) {
194
+ yield parseMobEventFromSse(sse);
195
+ }
196
+ }
197
+ async queryEvents(query) {
198
+ const params = query ? eventQueryToDict(query) : {};
199
+ const raw = await this._runtime._rpc("mobkit/query_events", params);
200
+ if (typeof raw === "object" &&
201
+ raw !== null &&
202
+ raw.status === "no_event_log_configured") {
203
+ return [];
204
+ }
205
+ if (Array.isArray(raw)) {
206
+ return raw.map(parsePersistedEvent);
207
+ }
208
+ return [];
209
+ }
210
+ // -- Messaging ----------------------------------------------------------
211
+ async send(memberId, message) {
212
+ return parseSendMessageResult(await this._runtime._rpc("mobkit/send_message", {
213
+ member_id: memberId,
214
+ message,
215
+ }));
216
+ }
217
+ /** Alias for {@link send}. */
218
+ sendMessage = this.send.bind(this);
219
+ async ensureMember(memberId, profile, options) {
220
+ const params = {
221
+ profile,
222
+ meerkat_id: memberId,
223
+ };
224
+ if (options?.labels)
225
+ params.labels = options.labels;
226
+ if (options?.context !== undefined)
227
+ params.context = options.context;
228
+ if (options?.resumeSessionId) {
229
+ params.resume_session_id = options.resumeSessionId;
230
+ }
231
+ if (options?.additionalInstructions) {
232
+ params.additional_instructions = options.additionalInstructions;
233
+ }
234
+ return parseMemberSnapshot(await this._runtime._rpc("mobkit/ensure_member", params));
235
+ }
236
+ async findMembers(labelKey, labelValue) {
237
+ const raw = await this._runtime._rpc("mobkit/find_members", {
238
+ label_key: labelKey,
239
+ label_value: labelValue,
240
+ });
241
+ if (Array.isArray(raw)) {
242
+ return raw.map(parseMemberSnapshot);
243
+ }
244
+ return [];
245
+ }
246
+ // -- Roster -------------------------------------------------------------
247
+ async listMembers() {
248
+ const raw = await this._runtime._rpc("mobkit/list_members");
249
+ if (Array.isArray(raw)) {
250
+ return raw.map(parseMemberSnapshot);
251
+ }
252
+ return [];
253
+ }
254
+ async getMember(memberId) {
255
+ return parseMemberSnapshot(await this._runtime._rpc("mobkit/get_member", { member_id: memberId }));
256
+ }
257
+ async retireMember(memberId) {
258
+ await this._runtime._rpc("mobkit/retire_member", {
259
+ member_id: memberId,
260
+ });
261
+ }
262
+ async respawnMember(memberId) {
263
+ await this._runtime._rpc("mobkit/respawn_member", {
264
+ member_id: memberId,
265
+ });
266
+ }
267
+ // -- Routing ------------------------------------------------------------
268
+ async resolveRouting(recipient, options) {
269
+ return parseRoutingResolution(await this._runtime._rpc("mobkit/routing/resolve", {
270
+ recipient,
271
+ ...(options ?? {}),
272
+ }));
273
+ }
274
+ async listRoutes() {
275
+ const raw = await this._runtime._rpc("mobkit/routing/routes/list");
276
+ const routes = typeof raw === "object" && raw !== null
277
+ ? raw.routes ?? []
278
+ : [];
279
+ return routes.map(parseRuntimeRouteResult);
280
+ }
281
+ async addRoute(routeKey, recipient, sink, targetModule, channel) {
282
+ const params = {
283
+ route_key: routeKey,
284
+ recipient,
285
+ sink,
286
+ target_module: targetModule,
287
+ };
288
+ if (channel !== undefined)
289
+ params.channel = channel;
290
+ const raw = await this._runtime._rpc("mobkit/routing/routes/add", params);
291
+ const routeData = typeof raw === "object" && raw !== null
292
+ ? raw.route ?? raw
293
+ : raw;
294
+ return parseRuntimeRouteResult(routeData);
295
+ }
296
+ async deleteRoute(routeKey) {
297
+ const raw = await this._runtime._rpc("mobkit/routing/routes/delete", {
298
+ route_key: routeKey,
299
+ });
300
+ const deletedData = typeof raw === "object" && raw !== null
301
+ ? raw.deleted ?? raw
302
+ : raw;
303
+ return parseRuntimeRouteResult(deletedData);
304
+ }
305
+ // -- Delivery -----------------------------------------------------------
306
+ async sendDelivery(options) {
307
+ return parseDeliveryResult(await this._runtime._rpc("mobkit/delivery/send", options));
308
+ }
309
+ async deliveryHistory(recipient, sink, limit = 20) {
310
+ const params = { limit };
311
+ if (recipient !== undefined)
312
+ params.recipient = recipient;
313
+ if (sink !== undefined)
314
+ params.sink = sink;
315
+ return parseDeliveryHistoryResult(await this._runtime._rpc("mobkit/delivery/history", params));
316
+ }
317
+ // -- Memory -------------------------------------------------------------
318
+ async memoryQuery(query, options) {
319
+ return parseMemoryQueryResult(await this._runtime._rpc("mobkit/memory/query", {
320
+ query,
321
+ ...(options ?? {}),
322
+ }));
323
+ }
324
+ async memoryStores() {
325
+ const raw = await this._runtime._rpc("mobkit/memory/stores");
326
+ const stores = typeof raw === "object" && raw !== null
327
+ ? raw.stores ?? []
328
+ : [];
329
+ return stores.map(parseMemoryStoreInfo);
330
+ }
331
+ async memoryIndex(entity, topic, store, options) {
332
+ return parseMemoryIndexResult(await this._runtime._rpc("mobkit/memory/index", {
333
+ entity,
334
+ topic,
335
+ store,
336
+ ...(options ?? {}),
337
+ }));
338
+ }
339
+ // -- Tools --------------------------------------------------------------
340
+ async callTool(moduleId, tool, args) {
341
+ const params = { module_id: moduleId, tool };
342
+ if (args)
343
+ params.arguments = args;
344
+ return parseCallToolResult(await this._runtime._rpc("mobkit/call_tool", params));
345
+ }
346
+ toolCaller(moduleId) {
347
+ return new ToolCaller(this, moduleId);
348
+ }
349
+ // -- Gating -------------------------------------------------------------
350
+ async gatingEvaluate(action, actorId, options) {
351
+ return parseGatingEvaluateResult(await this._runtime._rpc("mobkit/gating/evaluate", {
352
+ action,
353
+ actor_id: actorId,
354
+ ...(options ?? {}),
355
+ }));
356
+ }
357
+ async gatingPending() {
358
+ const raw = await this._runtime._rpc("mobkit/gating/pending");
359
+ const entries = typeof raw === "object" && raw !== null
360
+ ? raw.pending ?? []
361
+ : [];
362
+ return entries.map(parseGatingPendingEntry);
363
+ }
364
+ async gatingDecide(pendingId, decision, approverId, options) {
365
+ return parseGatingDecisionResult(await this._runtime._rpc("mobkit/gating/decide", {
366
+ pending_id: pendingId,
367
+ decision,
368
+ approver_id: approverId,
369
+ ...(options ?? {}),
370
+ }));
371
+ }
372
+ async gatingAudit(limit = 100) {
373
+ const raw = await this._runtime._rpc("mobkit/gating/audit", { limit });
374
+ const entries = typeof raw === "object" && raw !== null
375
+ ? raw.entries ?? []
376
+ : [];
377
+ return entries.map(parseGatingAuditEntry);
378
+ }
379
+ // -- Topology -----------------------------------------------------------
380
+ async rediscover() {
381
+ const raw = await this._runtime._rpc("mobkit/rediscover");
382
+ if (typeof raw === "object" &&
383
+ raw !== null &&
384
+ "status" in raw) {
385
+ return null;
386
+ }
387
+ return parseRediscoverReport(raw);
388
+ }
389
+ async reconcileEdges() {
390
+ return parseReconcileEdgesReport(await this._runtime._rpc("mobkit/reconcile_edges"));
391
+ }
392
+ }
393
+ // -- ToolCaller -----------------------------------------------------------
394
+ /**
395
+ * Bound callable scoped to one MCP module.
396
+ *
397
+ * @example
398
+ * ```ts
399
+ * const gmail = handle.toolCaller("google-workspace");
400
+ * const messages = await gmail.call("gmail_search", { query: "is:unread" });
401
+ * ```
402
+ */
403
+ export class ToolCaller {
404
+ _mobHandle;
405
+ _moduleId;
406
+ constructor(_mobHandle, _moduleId) {
407
+ this._mobHandle = _mobHandle;
408
+ this._moduleId = _moduleId;
409
+ }
410
+ async call(tool, args) {
411
+ const result = await this._mobHandle.callTool(this._moduleId, tool, args);
412
+ return result.result;
413
+ }
414
+ }
415
+ // -- SseBridge ------------------------------------------------------------
416
+ /**
417
+ * Bridge for streaming SSE from the Rust backend's HTTP server.
418
+ */
419
+ export class SseBridge {
420
+ _runtime;
421
+ constructor(_runtime) {
422
+ this._runtime = _runtime;
423
+ }
424
+ _baseUrl() {
425
+ const base = this._runtime.rustHttpBaseUrl;
426
+ if (base === null) {
427
+ throw new NotConnectedError("SSE bridge requires rustHttpBaseUrl — set it via " +
428
+ "runtime.setRustHttpBase('http://127.0.0.1:8081') or " +
429
+ "ensure the Rust binary reports it during bootstrap");
430
+ }
431
+ return base;
432
+ }
433
+ async *agentEvents(agentId) {
434
+ const url = `${this._baseUrl()}/agents/${agentId}/events`;
435
+ yield* this._streamSse(url);
436
+ }
437
+ async *mobEvents() {
438
+ const url = `${this._baseUrl()}/mob/events`;
439
+ yield* this._streamSse(url);
440
+ }
441
+ async *_streamSse(url) {
442
+ const body = await this._fetchSseStream(url);
443
+ yield* parseSseStream(body);
444
+ }
445
+ _fetchSseStream(url) {
446
+ const parsed = new URL(url);
447
+ const requester = parsed.protocol === "https:" ? httpsRequest : httpRequest;
448
+ return new Promise((resolve, reject) => {
449
+ const req = requester(url, { method: "GET", headers: { accept: "text/event-stream" } }, (res) => {
450
+ if (!res.statusCode || res.statusCode >= 400) {
451
+ reject(new Error(`SSE request failed: ${res.statusCode} ${res.statusMessage}`));
452
+ res.resume();
453
+ return;
454
+ }
455
+ // Convert Node readable stream to AsyncIterable<Uint8Array>
456
+ const stream = (async function* () {
457
+ for await (const chunk of res) {
458
+ yield chunk instanceof Uint8Array
459
+ ? chunk
460
+ : new TextEncoder().encode(String(chunk));
461
+ }
462
+ })();
463
+ resolve(stream);
464
+ });
465
+ req.on("error", reject);
466
+ req.end();
467
+ });
468
+ }
469
+ }
470
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
package/dist/sse.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ * SSE (Server-Sent Events) parsing and encoding.
3
+ *
4
+ * Internal module — not exported from the barrel. Used by the runtime
5
+ * SSE bridge for streaming agent and mob events.
6
+ */
7
+ export interface SseEvent {
8
+ readonly id: string | null;
9
+ readonly event: string;
10
+ readonly data: string;
11
+ }
12
+ /** Serialize an SSE event to the wire format. */
13
+ export declare function encodeSseEvent(event: SseEvent): string;
14
+ /**
15
+ * Parse an SSE byte stream into typed {@link SseEvent} objects.
16
+ *
17
+ * Handles `id:`, `event:`, `data:` fields and comment lines (`:` prefix).
18
+ * Events are emitted on blank-line boundaries per the SSE spec.
19
+ */
20
+ export declare function parseSseStream(body: AsyncIterable<Uint8Array>): AsyncGenerator<SseEvent, void, undefined>;
21
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAID,iDAAiD;AACjD,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CActD;AAID;;;;;GAKG;AACH,wBAAuB,cAAc,CACnC,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,GAC9B,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CA0C3C"}
package/dist/sse.js ADDED
@@ -0,0 +1,76 @@
1
+ /**
2
+ * SSE (Server-Sent Events) parsing and encoding.
3
+ *
4
+ * Internal module — not exported from the barrel. Used by the runtime
5
+ * SSE bridge for streaming agent and mob events.
6
+ */
7
+ // -- Encoding -------------------------------------------------------------
8
+ /** Serialize an SSE event to the wire format. */
9
+ export function encodeSseEvent(event) {
10
+ const lines = [];
11
+ if (event.id !== null) {
12
+ lines.push(`id: ${event.id}`);
13
+ }
14
+ if (event.event !== "message") {
15
+ lines.push(`event: ${event.event}`);
16
+ }
17
+ for (const line of event.data.split("\n")) {
18
+ lines.push(`data: ${line}`);
19
+ }
20
+ lines.push("");
21
+ lines.push("");
22
+ return lines.join("\n");
23
+ }
24
+ // -- Parsing --------------------------------------------------------------
25
+ /**
26
+ * Parse an SSE byte stream into typed {@link SseEvent} objects.
27
+ *
28
+ * Handles `id:`, `event:`, `data:` fields and comment lines (`:` prefix).
29
+ * Events are emitted on blank-line boundaries per the SSE spec.
30
+ */
31
+ export async function* parseSseStream(body) {
32
+ const decoder = new TextDecoder("utf-8");
33
+ let buffer = "";
34
+ let currentId = null;
35
+ let currentEvent = "message";
36
+ const currentData = [];
37
+ for await (const chunk of body) {
38
+ buffer += decoder.decode(chunk, { stream: true });
39
+ while (buffer.includes("\n")) {
40
+ const idx = buffer.indexOf("\n");
41
+ let line = buffer.slice(0, idx);
42
+ buffer = buffer.slice(idx + 1);
43
+ line = line.replace(/\r$/, "");
44
+ if (line === "") {
45
+ // Blank line — emit event if we have data
46
+ if (currentData.length > 0) {
47
+ yield {
48
+ id: currentId,
49
+ event: currentEvent,
50
+ data: currentData.join("\n"),
51
+ };
52
+ }
53
+ currentId = null;
54
+ currentEvent = "message";
55
+ currentData.length = 0;
56
+ }
57
+ else if (line.startsWith(":")) {
58
+ // Comment — skip
59
+ continue;
60
+ }
61
+ else if (line.startsWith("id: ")) {
62
+ currentId = line.slice(4);
63
+ }
64
+ else if (line.startsWith("event: ")) {
65
+ currentEvent = line.slice(7);
66
+ }
67
+ else if (line.startsWith("data: ")) {
68
+ currentData.push(line.slice(6));
69
+ }
70
+ else if (line.startsWith("data:")) {
71
+ currentData.push(line.slice(5));
72
+ }
73
+ }
74
+ }
75
+ }
76
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"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"}