@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
package/README.md CHANGED
@@ -46,4 +46,8 @@ const client = await connectPiFleet({ stateDir: "/path/to/pi-fleet-state" })
46
46
  await agent.send("Summarize the findings", { delivery: "followUp" })
47
47
  ```
48
48
 
49
- `send()` resolves after Pi accepts or queues the instruction. It does not wait for completion. Slice 2 supports Unix-like hosts with ZeroMQ `ipc://` support. It provides create, get, list, status, and send. Event streaming, recovery, retirement, compact, and destroy come in later slices.
49
+ `send()` resolves after Pi accepts or queues the instruction. It does not wait for completion.
50
+
51
+ `agent.receive()` provides best-effort live activity after the subscription starts. Each client receives an independent stream. Slice 3 does not replay missed events. The stream reports `thinking.started`, `thinking.finished`, `message.started`, `message.finished`, `tool.started`, and `tool.finished`. It ends normally when the consumer stops or the client closes. It throws if the worker or Pi becomes unavailable.
52
+
53
+ Slice 3 supports Unix-like hosts with ZeroMQ `ipc://` support. It provides create, get, list, status, send, and live receive. Recovery, durable replay, retirement, compact, and destroy come in later slices.
@@ -0,0 +1,88 @@
1
+ export type AgentState = "starting" | "idle" | "working" | "stopped" | "failed";
2
+ export type AgentSummary = {
3
+ id: string;
4
+ name: string;
5
+ cwd: string;
6
+ state: AgentState;
7
+ };
8
+ export type AgentStatus = {
9
+ id: string;
10
+ name: string;
11
+ state: AgentState;
12
+ };
13
+ export type SendDelivery = "steer" | "followUp";
14
+ export type SendOptions = {
15
+ delivery?: SendDelivery;
16
+ };
17
+ export type SendResult = {
18
+ acceptedAt: number;
19
+ };
20
+ export type AgentEvent = {
21
+ type: "thinking.started";
22
+ eventId: string;
23
+ activityId: string;
24
+ timestamp: number;
25
+ } | {
26
+ type: "thinking.finished";
27
+ eventId: string;
28
+ activityId: string;
29
+ timestamp: number;
30
+ content: string;
31
+ } | {
32
+ type: "message.started";
33
+ eventId: string;
34
+ activityId: string;
35
+ timestamp: number;
36
+ } | {
37
+ type: "message.finished";
38
+ eventId: string;
39
+ activityId: string;
40
+ timestamp: number;
41
+ text: string;
42
+ } | {
43
+ type: "tool.started";
44
+ eventId: string;
45
+ activityId: string;
46
+ timestamp: number;
47
+ toolName: string;
48
+ args: unknown;
49
+ } | {
50
+ type: "tool.finished";
51
+ eventId: string;
52
+ activityId: string;
53
+ timestamp: number;
54
+ toolName: string;
55
+ isError: boolean;
56
+ };
57
+ export interface Agent {
58
+ readonly id: string;
59
+ readonly name: string;
60
+ status(): Promise<AgentStatus>;
61
+ send(message: string, options?: SendOptions): Promise<SendResult>;
62
+ receive(): AsyncIterable<AgentEvent>;
63
+ }
64
+ export declare class AgentNameTakenError extends Error {
65
+ constructor(name: string);
66
+ }
67
+ export declare class AgentNotFoundError extends Error {
68
+ constructor(name: string);
69
+ }
70
+ export declare class AgentUnavailableError extends Error {
71
+ constructor(name: string);
72
+ }
73
+ type AgentClient = {
74
+ status(id: string, name: string): Promise<AgentStatus>;
75
+ send(id: string, name: string, message: string, options?: SendOptions): Promise<SendResult>;
76
+ receive(id: string, name: string): AsyncIterable<AgentEvent>;
77
+ };
78
+ export declare class AgentHandle implements Agent {
79
+ #private;
80
+ constructor(client: AgentClient, id: string, name: string);
81
+ get id(): string;
82
+ get name(): string;
83
+ status(): Promise<AgentStatus>;
84
+ send(message: string, options?: SendOptions): Promise<SendResult>;
85
+ receive(): AsyncIterable<AgentEvent>;
86
+ }
87
+ export {};
88
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/fleet/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ export class AgentNameTakenError extends Error {
2
+ constructor(name) {
3
+ super(`An agent named ${JSON.stringify(name)} already exists`);
4
+ this.name = "AgentNameTakenError";
5
+ }
6
+ }
7
+ export class AgentNotFoundError extends Error {
8
+ constructor(name) {
9
+ super(`No agent named ${JSON.stringify(name)} exists`);
10
+ this.name = "AgentNotFoundError";
11
+ }
12
+ }
13
+ export class AgentUnavailableError extends Error {
14
+ constructor(name) {
15
+ super(`Agent ${JSON.stringify(name)} is unavailable`);
16
+ this.name = "AgentUnavailableError";
17
+ }
18
+ }
19
+ export class AgentHandle {
20
+ #client;
21
+ #id;
22
+ #name;
23
+ constructor(client, id, name) {
24
+ this.#client = client;
25
+ this.#id = id;
26
+ this.#name = name;
27
+ }
28
+ get id() {
29
+ return this.#id;
30
+ }
31
+ get name() {
32
+ return this.#name;
33
+ }
34
+ status() {
35
+ return this.#client.status(this.#id, this.#name);
36
+ }
37
+ send(message, options) {
38
+ return this.#client.send(this.#id, this.#name, message, options);
39
+ }
40
+ receive() {
41
+ return this.#client.receive(this.#id, this.#name);
42
+ }
43
+ }
44
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/fleet/agent.ts"],"names":[],"mappings":"AAyCA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,IAAY;QACtB,KAAK,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC9D,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,IAAY;QACtB,KAAK,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACtD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,IAAY;QACtB,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QACrD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF;AAQD,MAAM,OAAO,WAAW;IACb,OAAO,CAAa;IACpB,GAAG,CAAQ;IACX,KAAK,CAAQ;IAEtB,YAAY,MAAmB,EAAE,EAAU,EAAE,IAAY;QACvD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;QACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAClD,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAqB;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAClE,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACnD,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import { type Agent, type AgentSummary } from "./agent.js";
2
+ export type ConnectOptions = {
3
+ /** A private state directory. Intended for isolated tests and advanced local setups. */
4
+ stateDir?: string;
5
+ };
6
+ export type CreateAgentOptions = {
7
+ name: string;
8
+ cwd: string;
9
+ piArgs?: string[];
10
+ };
11
+ export interface PiFleetClient {
12
+ create(options: CreateAgentOptions): Promise<Agent>;
13
+ get(name: string): Promise<Agent>;
14
+ list(): Promise<AgentSummary[]>;
15
+ close(): Promise<void>;
16
+ }
17
+ export declare function connectPiFleet(options?: ConnectOptions): Promise<PiFleetClient>;
18
+ export declare function resolveStateDir(options?: ConnectOptions): string;
19
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/fleet/client.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,KAAK,EAGV,KAAK,YAAY,EAIlB,MAAM,YAAY,CAAA;AAOnB,MAAM,MAAM,cAAc,GAAG;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;IACnD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;IACjC,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAoGD,wBAAsB,cAAc,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAIzF;AAED,wBAAgB,eAAe,CAAC,OAAO,GAAE,cAAmB,GAAG,MAAM,CAEpE"}
@@ -1,21 +1,20 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { capability } from "zeromq";
3
2
  import { stat } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
4
  import { resolve } from "node:path";
5
- import { AgentHandle } from "./agent.js";
6
- import { AgentNotFoundError } from "./types.js";
7
- import { resolveStateDir, workerEndpoint } from "./internal/paths.js";
8
- import { openRegistry } from "./internal/registry.js";
9
- import { launchWorker } from "./internal/worker-launcher.js";
10
- import { requestSend, requestStatus } from "./internal/worker-client.js";
5
+ import { capability } from "zeromq";
6
+ import { AgentHandle, AgentNameTakenError, AgentNotFoundError, } from "./agent.js";
7
+ import { openStore } from "../state/store.js";
8
+ import { launchWorker, receiveEvents, requestSend, requestStatus, stopWorker, workerEndpoint } from "../worker/control.js";
9
+ import { validatePiArguments } from "../pi/runtime.js";
11
10
  const STARTUP_TIMEOUT_MS = 10_000;
12
- const OWNED_PI_OPTIONS = new Set(["--mode", "--no-session"]);
13
11
  class PiFleetClientImpl {
14
- #registry;
12
+ #store;
15
13
  #stateDir;
14
+ #streamControllers = new Set();
16
15
  #closed = false;
17
- constructor(registry, stateDir) {
18
- this.#registry = registry;
16
+ constructor(store, stateDir) {
17
+ this.#store = store;
19
18
  this.#stateDir = stateDir;
20
19
  }
21
20
  async create(options) {
@@ -39,41 +38,42 @@ class PiFleetClientImpl {
39
38
  createdAt: now,
40
39
  updatedAt: now,
41
40
  };
42
- await this.#registry.create(record);
41
+ if (!(await this.#store.create(record)))
42
+ throw new AgentNameTakenError(input.name);
43
43
  let worker;
44
44
  try {
45
45
  worker = launchWorker(this.#stateDir, id, generation);
46
- await waitForWorkerReady(record, worker, STARTUP_TIMEOUT_MS);
46
+ await waitForWorkerReady(workerTarget(record), worker, STARTUP_TIMEOUT_MS);
47
47
  return new AgentHandle(this, id, input.name);
48
48
  }
49
49
  catch (error) {
50
50
  await stopWorker(worker);
51
- await this.#registry.rollbackCreation(id, input.name, generation);
51
+ await this.#store.rollbackCreation(id, input.name, generation);
52
52
  throw error;
53
53
  }
54
54
  }
55
55
  async get(name) {
56
56
  this.assertOpen();
57
- const record = this.#registry.getByName(name);
57
+ const record = this.#store.getByName(name);
58
58
  if (!record)
59
59
  throw new AgentNotFoundError(name);
60
60
  return new AgentHandle(this, record.id, record.name);
61
61
  }
62
62
  async list() {
63
63
  this.assertOpen();
64
- return this.#registry.list();
64
+ return this.#store.list().map(({ id, name, cwd, state }) => ({ id, name, cwd, state }));
65
65
  }
66
66
  async status(id, name) {
67
67
  this.assertOpen();
68
- const record = this.#registry.getById(id);
68
+ const record = this.#store.getById(id);
69
69
  if (!record || record.name !== name)
70
70
  throw new AgentNotFoundError(name);
71
- const status = await requestStatus(record);
71
+ const status = await requestStatus(workerTarget(record));
72
72
  return { id: status.id, name: status.name, state: status.state };
73
73
  }
74
74
  async send(id, name, message, options = {}) {
75
75
  this.assertOpen();
76
- const record = this.#registry.getById(id);
76
+ const record = this.#store.getById(id);
77
77
  if (!record || record.name !== name)
78
78
  throw new AgentNotFoundError(name);
79
79
  if (typeof message !== "string" || !message.trim())
@@ -81,13 +81,24 @@ class PiFleetClientImpl {
81
81
  const delivery = options.delivery ?? "steer";
82
82
  if (!isSendDelivery(delivery))
83
83
  throw new TypeError(`Invalid delivery: ${String(delivery)}`);
84
- return requestSend(record, message, delivery);
84
+ return requestSend(workerTarget(record), message, delivery);
85
+ }
86
+ receive(id, name) {
87
+ this.assertOpen();
88
+ const record = this.#store.getById(id);
89
+ if (!record || record.name !== name)
90
+ throw new AgentNotFoundError(name);
91
+ const controller = new AbortController();
92
+ this.#streamControllers.add(controller);
93
+ return trackStream(receiveEvents(workerTarget(record), controller.signal), controller, this.#streamControllers);
85
94
  }
86
95
  close() {
87
96
  if (this.#closed)
88
97
  return Promise.resolve();
89
98
  this.#closed = true;
90
- return this.#registry.close();
99
+ for (const controller of this.#streamControllers)
100
+ controller.abort();
101
+ return this.#store.close();
91
102
  }
92
103
  assertOpen() {
93
104
  if (this.#closed)
@@ -98,7 +109,10 @@ export async function connectPiFleet(options = {}) {
98
109
  if (!capability.ipc)
99
110
  throw new Error("pi-fleet requires ZeroMQ ipc:// support on this host");
100
111
  const stateDir = resolveStateDir(options);
101
- return new PiFleetClientImpl(await openRegistry(stateDir), stateDir);
112
+ return new PiFleetClientImpl(await openStore(stateDir), stateDir);
113
+ }
114
+ export function resolveStateDir(options = {}) {
115
+ return options.stateDir ? resolve(options.stateDir) : resolve(homedir(), ".pi-fleet");
102
116
  }
103
117
  function isSendDelivery(value) {
104
118
  return value === "steer" || value === "followUp";
@@ -115,13 +129,58 @@ async function validateCreateOptions(options) {
115
129
  if (!(await stat(cwd)).isDirectory())
116
130
  throw new TypeError(`Agent cwd is not a directory: ${cwd}`);
117
131
  const piArgs = options.piArgs ? [...options.piArgs] : [];
118
- for (const arg of piArgs) {
119
- if (OWNED_PI_OPTIONS.has(arg) || [...OWNED_PI_OPTIONS].some((option) => arg.startsWith(`${option}=`))) {
120
- throw new TypeError(`Pi argument ${JSON.stringify(arg)} is managed by pi-fleet`);
121
- }
122
- }
132
+ validatePiArguments(piArgs);
123
133
  return { name, cwd, piArgs };
124
134
  }
135
+ function trackStream(stream, controller, controllers) {
136
+ return {
137
+ [Symbol.asyncIterator]() {
138
+ const iterator = stream[Symbol.asyncIterator]();
139
+ const release = () => controllers.delete(controller);
140
+ return {
141
+ async next() {
142
+ try {
143
+ const result = await iterator.next();
144
+ if (result.done)
145
+ release();
146
+ return result;
147
+ }
148
+ catch (error) {
149
+ release();
150
+ throw error;
151
+ }
152
+ },
153
+ async return() {
154
+ controller.abort();
155
+ try {
156
+ return await iterator.return?.() ?? { done: true, value: undefined };
157
+ }
158
+ finally {
159
+ release();
160
+ }
161
+ },
162
+ async throw(error) {
163
+ controller.abort();
164
+ try {
165
+ if (iterator.throw)
166
+ return await iterator.throw(error);
167
+ throw error;
168
+ }
169
+ finally {
170
+ release();
171
+ }
172
+ },
173
+ };
174
+ },
175
+ };
176
+ }
177
+ function workerTarget(record) {
178
+ return {
179
+ id: record.id,
180
+ name: record.name,
181
+ runtime: record.runtime && { generation: record.runtime.generation, endpoint: record.runtime.endpoint },
182
+ };
183
+ }
125
184
  async function waitForWorkerReady(record, worker, timeoutMs) {
126
185
  let onExit = () => { };
127
186
  const exited = new Promise((_, reject) => {
@@ -135,30 +194,6 @@ async function waitForWorkerReady(record, worker, timeoutMs) {
135
194
  worker.off("exit", onExit);
136
195
  }
137
196
  }
138
- async function stopWorker(worker) {
139
- if (!worker || worker.exitCode !== null || worker.signalCode !== null)
140
- return;
141
- worker.kill("SIGTERM");
142
- if (await waitForExit(worker, 1_000))
143
- return;
144
- worker.kill("SIGKILL");
145
- await waitForExit(worker, 1_000);
146
- }
147
- async function waitForExit(worker, timeoutMs) {
148
- if (worker.exitCode !== null || worker.signalCode !== null)
149
- return true;
150
- return new Promise((resolve) => {
151
- const timeout = setTimeout(() => {
152
- worker.off("exit", onExit);
153
- resolve(false);
154
- }, timeoutMs);
155
- const onExit = () => {
156
- clearTimeout(timeout);
157
- resolve(true);
158
- };
159
- worker.once("exit", onExit);
160
- });
161
- }
162
197
  async function waitForStatus(record, timeoutMs) {
163
198
  const end = Date.now() + timeoutMs;
164
199
  let lastError;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/fleet/client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- export declare const version = "0.4.0";
2
- export { connectPiFleet } from "./client.js";
3
- export { AgentNameTakenError, AgentNotFoundError, AgentUnavailableError, } from "./types.js";
4
- export type { Agent, AgentState, AgentStatus, AgentSummary, ConnectOptions, CreateAgentOptions, PiFleetClient, SendDelivery, SendOptions, SendResult, } from "./types.js";
1
+ export declare const version = "0.5.0";
2
+ export { connectPiFleet } from "./fleet/client.js";
3
+ export { AgentNameTakenError, AgentNotFoundError, AgentUnavailableError, } from "./fleet/agent.js";
4
+ export type { Agent, AgentEvent, AgentState, AgentStatus, AgentSummary, SendDelivery, SendOptions, SendResult, } from "./fleet/agent.js";
5
+ export type { ConnectOptions, CreateAgentOptions, PiFleetClient, } from "./fleet/client.js";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAA;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,KAAK,EACL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,UAAU,GACX,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAA;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAA;AAEzB,YAAY,EACV,KAAK,EACL,UAAU,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,UAAU,GACX,MAAM,kBAAkB,CAAA;AACzB,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,aAAa,GACd,MAAM,mBAAmB,CAAA"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export const version = "0.4.0";
2
- export { connectPiFleet } from "./client.js";
3
- export { AgentNameTakenError, AgentNotFoundError, AgentUnavailableError, } from "./types.js";
1
+ export const version = "0.5.0";
2
+ export { connectPiFleet } from "./fleet/client.js";
3
+ export { AgentNameTakenError, AgentNotFoundError, AgentUnavailableError, } from "./fleet/agent.js";
4
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAA"}
@@ -1,5 +1,9 @@
1
1
  import { type ChildProcessWithoutNullStreams } from "node:child_process";
2
- import type { AgentRecord } from "./registry.js";
2
+ export type PiLaunch = {
3
+ cwd: string;
4
+ piArgs: string[];
5
+ sessionPath?: string;
6
+ };
3
7
  export type PiState = {
4
8
  sessionFile: string;
5
9
  sessionId: string;
@@ -10,10 +14,13 @@ export type PiProcess = {
10
14
  process: ChildProcessWithoutNullStreams;
11
15
  state: PiState;
12
16
  send(message: string, delivery: PiDelivery, timeoutMs?: number): Promise<void>;
17
+ stop(): Promise<void>;
13
18
  };
14
19
  export declare class PiStartupError extends Error {
15
20
  }
16
21
  export declare class PiRequestError extends Error {
17
22
  }
18
- export declare function startPi(record: AgentRecord, timeoutMs?: number, onEvent?: PiEventHandler): Promise<PiProcess>;
19
- //# sourceMappingURL=pi-rpc.d.ts.map
23
+ export declare function validatePiArguments(piArgs: readonly string[]): void;
24
+ export declare function startPi(launch: PiLaunch, timeoutMs?: number, onEvent?: PiEventHandler): Promise<PiProcess>;
25
+ export declare function stopPi(child: ChildProcessWithoutNullStreams | undefined): Promise<void>;
26
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/pi/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,8BAA8B,EAAE,MAAM,oBAAoB,CAAA;AAG/E,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,CAAA;AAC7C,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;AAErD,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,8BAA8B,CAAA;IACvC,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB,CAAA;AAED,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAC5C,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAa5C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAMnE;AAyID,wBAAsB,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,SAAS,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CA4BhH;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE,8BAA8B,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7F"}
@@ -5,6 +5,7 @@ export class PiStartupError extends Error {
5
5
  }
6
6
  export class PiRequestError extends Error {
7
7
  }
8
+ const FLEET_PI_OPTIONS = new Set(["--mode", "--no-session"]);
8
9
  const USER_SESSION_SELECTORS = new Set([
9
10
  "--session",
10
11
  "--session-id",
@@ -14,6 +15,13 @@ const USER_SESSION_SELECTORS = new Set([
14
15
  "-r",
15
16
  "--fork",
16
17
  ]);
18
+ export function validatePiArguments(piArgs) {
19
+ for (const arg of piArgs) {
20
+ if (FLEET_PI_OPTIONS.has(arg) || [...FLEET_PI_OPTIONS].some((option) => arg.startsWith(`${option}=`))) {
21
+ throw new TypeError(`Pi argument ${JSON.stringify(arg)} is managed by pi-fleet`);
22
+ }
23
+ }
24
+ }
17
25
  class PiRpcClient {
18
26
  #process;
19
27
  #onEvent;
@@ -137,13 +145,13 @@ class PiRpcClient {
137
145
  }
138
146
  }
139
147
  }
140
- export async function startPi(record, timeoutMs = 10_000, onEvent) {
148
+ export async function startPi(launch, timeoutMs = 10_000, onEvent) {
141
149
  const command = process.env.PI_FLEET_PI_COMMAND ?? "pi";
142
- const args = ["--mode", "rpc", ...record.piArgs];
143
- if (record.sessionPath && !record.piArgs.some((arg) => USER_SESSION_SELECTORS.has(arg))) {
144
- args.push("--session", record.sessionPath);
150
+ const args = ["--mode", "rpc", ...launch.piArgs];
151
+ if (launch.sessionPath && !launch.piArgs.some((arg) => USER_SESSION_SELECTORS.has(arg))) {
152
+ args.push("--session", launch.sessionPath);
145
153
  }
146
- const child = spawn(command, args, { cwd: record.cwd, stdio: "pipe" });
154
+ const child = spawn(command, args, { cwd: launch.cwd, stdio: "pipe" });
147
155
  let stderr = "";
148
156
  child.stderr.on("data", (chunk) => {
149
157
  stderr = `${stderr}${chunk.toString("utf8")}`.slice(-4_096);
@@ -155,17 +163,20 @@ export async function startPi(record, timeoutMs = 10_000, onEvent) {
155
163
  process: child,
156
164
  state,
157
165
  send: (message, delivery, requestTimeoutMs) => rpc.send(message, delivery, requestTimeoutMs),
166
+ stop: () => stopPi(child),
158
167
  };
159
168
  }
160
169
  catch (error) {
161
170
  rpc.close();
162
- await terminate(child);
171
+ await stopPi(child);
163
172
  const detail = stderr.trim();
164
173
  const message = error instanceof Error ? error.message : String(error);
165
174
  throw new PiStartupError(detail ? `${message}: ${detail}` : message);
166
175
  }
167
176
  }
168
- async function terminate(child) {
177
+ export async function stopPi(child) {
178
+ if (!child)
179
+ return;
169
180
  if (child.exitCode !== null || child.signalCode !== null)
170
181
  return;
171
182
  child.kill("SIGTERM");
@@ -192,4 +203,4 @@ async function waitForExit(child, timeoutMs) {
192
203
  function isRecord(value) {
193
204
  return typeof value === "object" && value !== null;
194
205
  }
195
- //# sourceMappingURL=pi-rpc.js.map
206
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/pi/runtime.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type Database, type RootDatabase } from "lmdb";
2
- import type { AgentState, AgentSummary } from "../types.js";
2
+ import type { AgentState } from "../fleet/agent.js";
3
3
  export type AgentRecord = {
4
4
  id: string;
5
5
  name: string;
@@ -20,27 +20,26 @@ export type AgentRecord = {
20
20
  createdAt: number;
21
21
  updatedAt: number;
22
22
  };
23
- type Environment = RootDatabase;
24
- type SharedEnvironment = {
25
- root: Environment;
23
+ type SharedStore = {
24
+ root: RootDatabase;
26
25
  agents: Database<AgentRecord, string>;
27
26
  names: Database<string, string>;
28
27
  references: number;
29
28
  closing?: Promise<void>;
30
29
  };
31
- export declare class Registry {
30
+ export declare class FleetStore {
32
31
  #private;
33
- constructor(stateDir: string, shared: SharedEnvironment);
34
- create(record: AgentRecord): Promise<void>;
32
+ constructor(stateDir: string, shared: SharedStore);
33
+ create(record: AgentRecord): Promise<boolean>;
35
34
  getById(id: string): AgentRecord | undefined;
36
35
  getByName(name: string): AgentRecord | undefined;
37
- list(): AgentSummary[];
36
+ list(): AgentRecord[];
38
37
  markReady(id: string, runtimeGeneration: string, ready: Pick<NonNullable<AgentRecord["runtime"]>, "workerPid" | "endpoint"> & Pick<AgentRecord, "sessionPath" | "sessionId">): Promise<boolean>;
39
38
  updateState(id: string, runtimeGeneration: string, state: "working" | "idle"): Promise<boolean>;
40
39
  rollbackCreation(id: string, name: string, runtimeGeneration: string): Promise<void>;
41
40
  close(): Promise<void>;
42
41
  private assertOpen;
43
42
  }
44
- export declare function openRegistry(stateDir: string): Promise<Registry>;
43
+ export declare function openStore(stateDir: string): Promise<FleetStore>;
45
44
  export {};
46
- //# sourceMappingURL=registry.d.ts.map
45
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/state/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,MAAM,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,UAAU,CAAA;IACjB,OAAO,CAAC,EAAE;QACR,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,UAAU,GAAG,OAAO,CAAA;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,YAAY,CAAA;IAClB,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACrC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CACxB,CAAA;AAID,qBAAa,UAAU;;gBAOT,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IAO3C,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAQnD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAK5C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAMhD,IAAI,IAAI,WAAW,EAAE;IAKf,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB/L,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa/F,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B,OAAO,CAAC,UAAU;CAGnB;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBrE"}