@elpapi42/pi-fleet-sdk 0.4.0 → 0.5.0

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 (68) hide show
  1. package/README.md +5 -1
  2. package/dist/fleet/agent.d.ts +88 -0
  3. package/dist/fleet/agent.d.ts.map +1 -0
  4. package/dist/fleet/agent.js +44 -0
  5. package/dist/fleet/agent.js.map +1 -0
  6. package/dist/fleet/client.d.ts +19 -0
  7. package/dist/fleet/client.d.ts.map +1 -0
  8. package/dist/{client.js → fleet/client.js} +86 -51
  9. package/dist/fleet/client.js.map +1 -0
  10. package/dist/index.d.ts +5 -4
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +3 -3
  13. package/dist/index.js.map +1 -1
  14. package/dist/{internal/pi-rpc.d.ts → pi/runtime.d.ts} +10 -3
  15. package/dist/pi/runtime.d.ts.map +1 -0
  16. package/dist/{internal/pi-rpc.js → pi/runtime.js} +19 -8
  17. package/dist/pi/runtime.js.map +1 -0
  18. package/dist/{internal/registry.d.ts → state/store.d.ts} +9 -10
  19. package/dist/state/store.d.ts.map +1 -0
  20. package/dist/{internal/registry.js → state/store.js} +25 -27
  21. package/dist/state/store.js.map +1 -0
  22. package/dist/worker/control.d.ts +20 -0
  23. package/dist/worker/control.d.ts.map +1 -0
  24. package/dist/worker/control.js +261 -0
  25. package/dist/worker/control.js.map +1 -0
  26. package/dist/worker/protocol.d.ts +86 -0
  27. package/dist/worker/protocol.d.ts.map +1 -0
  28. package/dist/worker/protocol.js.map +1 -0
  29. package/dist/worker/server.d.ts +2 -0
  30. package/dist/worker/server.d.ts.map +1 -0
  31. package/dist/worker/server.js +296 -0
  32. package/dist/worker/server.js.map +1 -0
  33. package/package.json +3 -3
  34. package/dist/agent.d.ts +0 -15
  35. package/dist/agent.d.ts.map +0 -1
  36. package/dist/agent.js +0 -23
  37. package/dist/agent.js.map +0 -1
  38. package/dist/client.d.ts +0 -3
  39. package/dist/client.d.ts.map +0 -1
  40. package/dist/client.js.map +0 -1
  41. package/dist/internal/paths.d.ts +0 -6
  42. package/dist/internal/paths.d.ts.map +0 -1
  43. package/dist/internal/paths.js +0 -25
  44. package/dist/internal/paths.js.map +0 -1
  45. package/dist/internal/pi-rpc.d.ts.map +0 -1
  46. package/dist/internal/pi-rpc.js.map +0 -1
  47. package/dist/internal/protocol.d.ts +0 -42
  48. package/dist/internal/protocol.d.ts.map +0 -1
  49. package/dist/internal/protocol.js.map +0 -1
  50. package/dist/internal/registry.d.ts.map +0 -1
  51. package/dist/internal/registry.js.map +0 -1
  52. package/dist/internal/worker-client.d.ts +0 -7
  53. package/dist/internal/worker-client.d.ts.map +0 -1
  54. package/dist/internal/worker-client.js +0 -94
  55. package/dist/internal/worker-client.js.map +0 -1
  56. package/dist/internal/worker-launcher.d.ts +0 -3
  57. package/dist/internal/worker-launcher.d.ts.map +0 -1
  58. package/dist/internal/worker-launcher.js +0 -13
  59. package/dist/internal/worker-launcher.js.map +0 -1
  60. package/dist/internal/worker.d.ts +0 -2
  61. package/dist/internal/worker.d.ts.map +0 -1
  62. package/dist/internal/worker.js +0 -200
  63. package/dist/internal/worker.js.map +0 -1
  64. package/dist/types.d.ts +0 -50
  65. package/dist/types.d.ts.map +0 -1
  66. package/dist/types.js +0 -19
  67. package/dist/types.js.map +0 -1
  68. /package/dist/{internal → worker}/protocol.js +0 -0
@@ -1,8 +1,8 @@
1
+ import { chmod, mkdir, realpath } from "node:fs/promises";
2
+ import { join } from "node:path";
1
3
  import { open } from "lmdb";
2
- import { prepareStateDir } from "./paths.js";
3
- import { AgentNameTakenError } from "../types.js";
4
- const environments = new Map();
5
- export class Registry {
4
+ const stores = new Map();
5
+ export class FleetStore {
6
6
  #stateDir;
7
7
  #shared;
8
8
  #agents;
@@ -16,12 +16,10 @@ export class Registry {
16
16
  }
17
17
  async create(record) {
18
18
  this.assertOpen();
19
- const created = await this.#names.ifNoExists(record.name, () => {
19
+ return this.#names.ifNoExists(record.name, () => {
20
20
  this.#agents.put(record.id, record, 1);
21
21
  this.#names.put(record.name, record.id);
22
22
  });
23
- if (!created)
24
- throw new AgentNameTakenError(record.name);
25
23
  }
26
24
  getById(id) {
27
25
  this.assertOpen();
@@ -34,12 +32,7 @@ export class Registry {
34
32
  }
35
33
  list() {
36
34
  this.assertOpen();
37
- return [...this.#agents.getRange({})].map(({ value }) => ({
38
- id: value.id,
39
- name: value.name,
40
- cwd: value.cwd,
41
- state: value.state,
42
- }));
35
+ return [...this.#agents.getRange({})].map(({ value }) => value);
43
36
  }
44
37
  async markReady(id, runtimeGeneration, ready) {
45
38
  this.assertOpen();
@@ -72,11 +65,7 @@ export class Registry {
72
65
  if (entry.value.state === state)
73
66
  return true;
74
67
  const version = entry.version ?? 0;
75
- const updated = {
76
- ...entry.value,
77
- state,
78
- updatedAt: Date.now(),
79
- };
68
+ const updated = { ...entry.value, state, updatedAt: Date.now() };
80
69
  if (await this.#agents.put(id, updated, version + 1, version))
81
70
  return true;
82
71
  }
@@ -104,8 +93,8 @@ export class Registry {
104
93
  await closing;
105
94
  }
106
95
  finally {
107
- if (environments.get(this.#stateDir) === this.#shared)
108
- environments.delete(this.#stateDir);
96
+ if (stores.get(this.#stateDir) === this.#shared)
97
+ stores.delete(this.#stateDir);
109
98
  }
110
99
  }
111
100
  assertOpen() {
@@ -113,12 +102,12 @@ export class Registry {
113
102
  throw new Error("The pi-fleet client is closed");
114
103
  }
115
104
  }
116
- export async function openRegistry(stateDir) {
117
- const canonicalStateDir = await prepareStateDir(stateDir);
118
- let shared = environments.get(canonicalStateDir);
105
+ export async function openStore(stateDir) {
106
+ const canonicalStateDir = await prepareStateDirectory(stateDir);
107
+ let shared = stores.get(canonicalStateDir);
119
108
  if (shared?.closing) {
120
109
  await shared.closing;
121
- shared = environments.get(canonicalStateDir);
110
+ shared = stores.get(canonicalStateDir);
122
111
  }
123
112
  if (!shared) {
124
113
  const root = open({ path: canonicalStateDir, maxDbs: 3 });
@@ -128,9 +117,18 @@ export async function openRegistry(stateDir) {
128
117
  names: root.openDB("names", { encoding: "string" }),
129
118
  references: 0,
130
119
  };
131
- environments.set(canonicalStateDir, shared);
120
+ stores.set(canonicalStateDir, shared);
132
121
  }
133
122
  shared.references += 1;
134
- return new Registry(canonicalStateDir, shared);
123
+ return new FleetStore(canonicalStateDir, shared);
135
124
  }
136
- //# sourceMappingURL=registry.js.map
125
+ async function prepareStateDirectory(stateDir) {
126
+ await mkdir(stateDir, { recursive: true, mode: 0o700 });
127
+ await chmod(stateDir, 0o700);
128
+ const canonicalStateDir = await realpath(stateDir);
129
+ const ipcDir = join(canonicalStateDir, "ipc");
130
+ await mkdir(ipcDir, { recursive: true, mode: 0o700 });
131
+ await chmod(ipcDir, 0o700);
132
+ return canonicalStateDir;
133
+ }
134
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/state/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type ChildProcess } from "node:child_process";
2
+ import { type AgentEvent } from "../fleet/agent.js";
3
+ import { type StatusResponse } from "./protocol.js";
4
+ export type WorkerTarget = {
5
+ id: string;
6
+ name: string;
7
+ runtime?: {
8
+ generation: string;
9
+ endpoint?: string;
10
+ };
11
+ };
12
+ export declare function workerEndpoint(stateDir: string, agentId: string, generation: string): string;
13
+ export declare function launchWorker(stateDir: string, agentId: string, generation: string): ChildProcess;
14
+ export declare function stopWorker(worker: ChildProcess | undefined): Promise<void>;
15
+ export declare function requestStatus(record: WorkerTarget, timeoutMs?: number): Promise<NonNullable<StatusResponse["status"]>>;
16
+ export declare function receiveEvents(record: WorkerTarget, signal?: AbortSignal): AsyncIterable<AgentEvent>;
17
+ export declare function requestSend(record: WorkerTarget, message: string, delivery: "steer" | "followUp", timeoutMs?: number): Promise<{
18
+ acceptedAt: number;
19
+ }>;
20
+ //# sourceMappingURL=control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../src/worker/control.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAI7D,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC1E,OAAO,EAOL,KAAK,cAAc,EAIpB,MAAM,eAAe,CAAA;AAEtB,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE;QACR,UAAU,EAAE,MAAM,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;CACF,CAAA;AAKD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAG5F;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAShG;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhF;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAgB3H;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC,CAoEnG;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,UAAU,EAAE,SAAS,SAAS,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAqB5J"}
@@ -0,0 +1,261 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { spawn } from "node:child_process";
3
+ import { Dealer } from "zeromq";
4
+ import { fileURLToPath } from "node:url";
5
+ import { join } from "node:path";
6
+ import { AgentUnavailableError } from "../fleet/agent.js";
7
+ import { decode, encode, } from "./protocol.js";
8
+ const AGENT_STATES = new Set(["starting", "idle", "working", "stopped", "failed"]);
9
+ const STREAM_IDLE_PROBE_MS = 1_000;
10
+ export function workerEndpoint(stateDir, agentId, generation) {
11
+ const identity = createHash("sha256").update(`${stateDir}\0${agentId}\0${generation}`).digest("hex").slice(0, 24);
12
+ return `ipc://${join(stateDir, "ipc", `${identity}.sock`)}`;
13
+ }
14
+ export function launchWorker(stateDir, agentId, generation) {
15
+ const serverPath = fileURLToPath(new URL("./server.js", import.meta.url));
16
+ const child = spawn(process.execPath, [serverPath, "--state-dir", stateDir, "--agent", agentId, "--generation", generation], {
17
+ detached: true,
18
+ stdio: "ignore",
19
+ env: process.env,
20
+ });
21
+ child.unref();
22
+ return child;
23
+ }
24
+ export async function stopWorker(worker) {
25
+ if (!worker || worker.exitCode !== null || worker.signalCode !== null)
26
+ return;
27
+ worker.kill("SIGTERM");
28
+ if (await waitForExit(worker, 1_000))
29
+ return;
30
+ worker.kill("SIGKILL");
31
+ await waitForExit(worker, 1_000);
32
+ }
33
+ export async function requestStatus(record, timeoutMs = 1_000) {
34
+ const request = {
35
+ version: 1,
36
+ requestId: randomUUID(),
37
+ command: "status",
38
+ agentId: record.id,
39
+ runtimeGeneration: record.runtime?.generation ?? "",
40
+ };
41
+ const response = await requestWorker(record, request, timeoutMs);
42
+ if (!isStatusResponse(response) || response.requestId !== request.requestId || !response.ok || !response.status ||
43
+ response.status.id !== record.id || response.status.name !== record.name ||
44
+ response.status.runtimeGeneration !== record.runtime?.generation || !AGENT_STATES.has(response.status.state)) {
45
+ throw new AgentUnavailableError(record.name);
46
+ }
47
+ return response.status;
48
+ }
49
+ export function receiveEvents(record, signal) {
50
+ return {
51
+ [Symbol.asyncIterator]: async function* () {
52
+ const runtime = record.runtime;
53
+ if (!runtime?.endpoint)
54
+ throw new AgentUnavailableError(record.name);
55
+ const socket = new Dealer({ routingId: randomUUID(), immediate: true, linger: 0, sendTimeout: STREAM_IDLE_PROBE_MS });
56
+ let subscriptionId;
57
+ try {
58
+ socket.connect(runtime.endpoint);
59
+ const request = {
60
+ version: 1,
61
+ requestId: randomUUID(),
62
+ command: "subscribe",
63
+ agentId: record.id,
64
+ runtimeGeneration: runtime.generation,
65
+ };
66
+ await socket.send(encode(request));
67
+ const response = decode((await withTimeout(socket.receive(), STREAM_IDLE_PROBE_MS, record.name))[0]);
68
+ if (!isSubscribeResponse(response) || !response.ok || response.requestId !== request.requestId ||
69
+ response.agentId !== record.id || response.runtimeGeneration !== runtime.generation ||
70
+ typeof response.subscriptionId !== "string" || !response.subscriptionId) {
71
+ throw new AgentUnavailableError(record.name);
72
+ }
73
+ subscriptionId = response.subscriptionId;
74
+ let nextFrame = socket.receive();
75
+ void nextFrame.catch(() => { });
76
+ while (!signal?.aborted) {
77
+ const result = await awaitStreamFrame(nextFrame, signal);
78
+ if (result === "aborted")
79
+ return;
80
+ if (result === "idle") {
81
+ await requestStatus(record, STREAM_IDLE_PROBE_MS);
82
+ continue;
83
+ }
84
+ nextFrame = socket.receive();
85
+ void nextFrame.catch(() => { });
86
+ const frame = decode(result[0]);
87
+ if (!isEventFrame(frame) || frame.agentId !== record.id || frame.runtimeGeneration !== runtime.generation ||
88
+ frame.subscriptionId !== subscriptionId) {
89
+ throw new AgentUnavailableError(record.name);
90
+ }
91
+ yield frame.event;
92
+ }
93
+ }
94
+ catch (error) {
95
+ if (signal?.aborted)
96
+ return;
97
+ if (error instanceof AgentUnavailableError)
98
+ throw error;
99
+ throw new AgentUnavailableError(record.name);
100
+ }
101
+ finally {
102
+ if (subscriptionId) {
103
+ const unsubscribe = {
104
+ version: 1,
105
+ requestId: randomUUID(),
106
+ command: "unsubscribe",
107
+ agentId: record.id,
108
+ runtimeGeneration: runtime.generation,
109
+ subscriptionId,
110
+ };
111
+ try {
112
+ await socket.send(encode(unsubscribe));
113
+ }
114
+ catch {
115
+ // The stream is already ending. The worker removes stale routes after a failed delivery.
116
+ }
117
+ }
118
+ socket.close();
119
+ }
120
+ },
121
+ };
122
+ }
123
+ export async function requestSend(record, message, delivery, timeoutMs = 10_000) {
124
+ const request = {
125
+ version: 1,
126
+ requestId: randomUUID(),
127
+ command: "send",
128
+ agentId: record.id,
129
+ runtimeGeneration: record.runtime?.generation ?? "",
130
+ message,
131
+ delivery,
132
+ };
133
+ const response = await requestWorker(record, request, timeoutMs);
134
+ if (!isSendResponse(response) || response.requestId !== request.requestId || response.agentId !== record.id || response.runtimeGeneration !== record.runtime?.generation) {
135
+ throw new AgentUnavailableError(record.name);
136
+ }
137
+ if (!response.ok) {
138
+ if (typeof response.error === "string" && response.error)
139
+ throw new Error(response.error);
140
+ throw new AgentUnavailableError(record.name);
141
+ }
142
+ if (typeof response.acceptedAt !== "number")
143
+ throw new AgentUnavailableError(record.name);
144
+ return { acceptedAt: response.acceptedAt };
145
+ }
146
+ async function requestWorker(record, request, timeoutMs) {
147
+ const runtime = record.runtime;
148
+ if (!runtime?.endpoint)
149
+ throw new AgentUnavailableError(record.name);
150
+ const socket = new Dealer({ routingId: randomUUID(), immediate: true, linger: 0, sendTimeout: timeoutMs });
151
+ try {
152
+ socket.connect(runtime.endpoint);
153
+ await socket.send(encode(request));
154
+ return decode((await withTimeout(socket.receive(), timeoutMs, record.name))[0]);
155
+ }
156
+ catch (error) {
157
+ if (error instanceof AgentUnavailableError)
158
+ throw error;
159
+ throw new AgentUnavailableError(record.name);
160
+ }
161
+ finally {
162
+ socket.close();
163
+ }
164
+ }
165
+ function isSubscribeResponse(response) {
166
+ return isRecord(response) && response.version === 1 && response.command === "subscribe" &&
167
+ typeof response.requestId === "string" && typeof response.agentId === "string" &&
168
+ typeof response.runtimeGeneration === "string" && typeof response.ok === "boolean";
169
+ }
170
+ function isEventFrame(response) {
171
+ if (!isRecord(response) || response.version !== 1 || response.command !== "event" ||
172
+ typeof response.agentId !== "string" || typeof response.runtimeGeneration !== "string" ||
173
+ typeof response.subscriptionId !== "string")
174
+ return false;
175
+ return isAgentEvent(response.event);
176
+ }
177
+ function isAgentEvent(value) {
178
+ if (!isRecord(value) || typeof value.type !== "string" || typeof value.eventId !== "string" ||
179
+ typeof value.activityId !== "string" || typeof value.timestamp !== "number")
180
+ return false;
181
+ switch (value.type) {
182
+ case "thinking.started":
183
+ case "message.started":
184
+ return true;
185
+ case "thinking.finished":
186
+ return typeof value.content === "string";
187
+ case "message.finished":
188
+ return typeof value.text === "string";
189
+ case "tool.started":
190
+ return typeof value.toolName === "string" && "args" in value;
191
+ case "tool.finished":
192
+ return typeof value.toolName === "string" && typeof value.isError === "boolean";
193
+ default:
194
+ return false;
195
+ }
196
+ }
197
+ async function awaitStreamFrame(nextFrame, signal) {
198
+ let timer;
199
+ let onAbort;
200
+ try {
201
+ return await Promise.race([
202
+ nextFrame,
203
+ new Promise((resolve) => {
204
+ timer = setTimeout(() => resolve("idle"), STREAM_IDLE_PROBE_MS);
205
+ }),
206
+ new Promise((resolve) => {
207
+ if (!signal)
208
+ return;
209
+ onAbort = () => resolve("aborted");
210
+ signal.addEventListener("abort", onAbort, { once: true });
211
+ }),
212
+ ]);
213
+ }
214
+ finally {
215
+ if (timer)
216
+ clearTimeout(timer);
217
+ if (onAbort)
218
+ signal?.removeEventListener("abort", onAbort);
219
+ }
220
+ }
221
+ function isStatusResponse(response) {
222
+ return isRecord(response) && response.version === 1 && typeof response.requestId === "string";
223
+ }
224
+ function isSendResponse(response) {
225
+ return isRecord(response) && response.version === 1 && response.command === "send" && typeof response.requestId === "string" &&
226
+ typeof response.agentId === "string" && typeof response.runtimeGeneration === "string" && typeof response.ok === "boolean";
227
+ }
228
+ function isRecord(value) {
229
+ return typeof value === "object" && value !== null;
230
+ }
231
+ async function withTimeout(promise, timeoutMs, name) {
232
+ let timeout;
233
+ try {
234
+ return await Promise.race([
235
+ promise,
236
+ new Promise((_, reject) => {
237
+ timeout = setTimeout(() => reject(new AgentUnavailableError(name)), timeoutMs);
238
+ }),
239
+ ]);
240
+ }
241
+ finally {
242
+ if (timeout)
243
+ clearTimeout(timeout);
244
+ }
245
+ }
246
+ async function waitForExit(worker, timeoutMs) {
247
+ if (worker.exitCode !== null || worker.signalCode !== null)
248
+ return true;
249
+ return new Promise((resolve) => {
250
+ const timeout = setTimeout(() => {
251
+ worker.off("exit", onExit);
252
+ resolve(false);
253
+ }, timeoutMs);
254
+ const onExit = () => {
255
+ clearTimeout(timeout);
256
+ resolve(true);
257
+ };
258
+ worker.once("exit", onExit);
259
+ });
260
+ }
261
+ //# sourceMappingURL=control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/worker/control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { AgentEvent, AgentState } from "../fleet/agent.js";
2
+ export type StatusRequest = {
3
+ version: 1;
4
+ requestId: string;
5
+ command: "status";
6
+ agentId: string;
7
+ runtimeGeneration: string;
8
+ };
9
+ export type SendRequest = {
10
+ version: 1;
11
+ requestId: string;
12
+ command: "send";
13
+ agentId: string;
14
+ runtimeGeneration: string;
15
+ message: string;
16
+ delivery: "steer" | "followUp";
17
+ };
18
+ export type SubscribeRequest = {
19
+ version: 1;
20
+ requestId: string;
21
+ command: "subscribe";
22
+ agentId: string;
23
+ runtimeGeneration: string;
24
+ };
25
+ export type UnsubscribeRequest = {
26
+ version: 1;
27
+ requestId: string;
28
+ command: "unsubscribe";
29
+ agentId: string;
30
+ runtimeGeneration: string;
31
+ subscriptionId: string;
32
+ };
33
+ export type StatusResponse = {
34
+ version: 1;
35
+ requestId: string;
36
+ ok: boolean;
37
+ status?: {
38
+ id: string;
39
+ name: string;
40
+ runtimeGeneration: string;
41
+ state: AgentState;
42
+ };
43
+ error?: string;
44
+ };
45
+ export type SendResponse = {
46
+ version: 1;
47
+ requestId: string;
48
+ command: "send";
49
+ ok: boolean;
50
+ agentId: string;
51
+ runtimeGeneration: string;
52
+ acceptedAt?: number;
53
+ error?: string;
54
+ };
55
+ export type SubscribeResponse = {
56
+ version: 1;
57
+ requestId: string;
58
+ command: "subscribe";
59
+ ok: boolean;
60
+ agentId: string;
61
+ runtimeGeneration: string;
62
+ subscriptionId?: string;
63
+ error?: string;
64
+ };
65
+ export type UnsubscribeResponse = {
66
+ version: 1;
67
+ requestId: string;
68
+ command: "unsubscribe";
69
+ ok: boolean;
70
+ agentId: string;
71
+ runtimeGeneration: string;
72
+ subscriptionId: string;
73
+ error?: string;
74
+ };
75
+ export type EventFrame = {
76
+ version: 1;
77
+ command: "event";
78
+ agentId: string;
79
+ runtimeGeneration: string;
80
+ subscriptionId: string;
81
+ event: AgentEvent;
82
+ };
83
+ export type WorkerMessage = StatusRequest | SendRequest | SubscribeRequest | UnsubscribeRequest | StatusResponse | SendResponse | SubscribeResponse | UnsubscribeResponse | EventFrame;
84
+ export declare function encode(message: WorkerMessage): string;
85
+ export declare function decode(text: Buffer): unknown;
86
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/worker/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/worker/protocol.ts"],"names":[],"mappings":"AAkGA,MAAM,UAAU,MAAM,CAAC,OAAsB;IAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;AAC1C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/worker/server.ts"],"names":[],"mappings":""}