@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.
- package/README.md +5 -1
- package/dist/fleet/agent.d.ts +88 -0
- package/dist/fleet/agent.d.ts.map +1 -0
- package/dist/fleet/agent.js +44 -0
- package/dist/fleet/agent.js.map +1 -0
- package/dist/fleet/client.d.ts +19 -0
- package/dist/fleet/client.d.ts.map +1 -0
- package/dist/{client.js → fleet/client.js} +86 -51
- package/dist/fleet/client.js.map +1 -0
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/{internal/pi-rpc.d.ts → pi/runtime.d.ts} +10 -3
- package/dist/pi/runtime.d.ts.map +1 -0
- package/dist/{internal/pi-rpc.js → pi/runtime.js} +19 -8
- package/dist/pi/runtime.js.map +1 -0
- package/dist/{internal/registry.d.ts → state/store.d.ts} +9 -10
- package/dist/state/store.d.ts.map +1 -0
- package/dist/{internal/registry.js → state/store.js} +25 -27
- package/dist/state/store.js.map +1 -0
- package/dist/worker/control.d.ts +20 -0
- package/dist/worker/control.d.ts.map +1 -0
- package/dist/worker/control.js +261 -0
- package/dist/worker/control.js.map +1 -0
- package/dist/worker/protocol.d.ts +86 -0
- package/dist/worker/protocol.d.ts.map +1 -0
- package/dist/worker/protocol.js.map +1 -0
- package/dist/worker/server.d.ts +2 -0
- package/dist/worker/server.d.ts.map +1 -0
- package/dist/worker/server.js +296 -0
- package/dist/worker/server.js.map +1 -0
- package/package.json +3 -3
- package/dist/agent.d.ts +0 -15
- package/dist/agent.d.ts.map +0 -1
- package/dist/agent.js +0 -23
- package/dist/agent.js.map +0 -1
- package/dist/client.d.ts +0 -3
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js.map +0 -1
- package/dist/internal/paths.d.ts +0 -6
- package/dist/internal/paths.d.ts.map +0 -1
- package/dist/internal/paths.js +0 -25
- package/dist/internal/paths.js.map +0 -1
- package/dist/internal/pi-rpc.d.ts.map +0 -1
- package/dist/internal/pi-rpc.js.map +0 -1
- package/dist/internal/protocol.d.ts +0 -42
- package/dist/internal/protocol.d.ts.map +0 -1
- package/dist/internal/protocol.js.map +0 -1
- package/dist/internal/registry.d.ts.map +0 -1
- package/dist/internal/registry.js.map +0 -1
- package/dist/internal/worker-client.d.ts +0 -7
- package/dist/internal/worker-client.d.ts.map +0 -1
- package/dist/internal/worker-client.js +0 -94
- package/dist/internal/worker-client.js.map +0 -1
- package/dist/internal/worker-launcher.d.ts +0 -3
- package/dist/internal/worker-launcher.d.ts.map +0 -1
- package/dist/internal/worker-launcher.js +0 -13
- package/dist/internal/worker-launcher.js.map +0 -1
- package/dist/internal/worker.d.ts +0 -2
- package/dist/internal/worker.d.ts.map +0 -1
- package/dist/internal/worker.js +0 -200
- package/dist/internal/worker.js.map +0 -1
- package/dist/types.d.ts +0 -50
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -19
- package/dist/types.js.map +0 -1
- /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.
|
|
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 {
|
|
6
|
-
import { AgentNotFoundError } from "./
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
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
|
-
#
|
|
12
|
+
#store;
|
|
15
13
|
#stateDir;
|
|
14
|
+
#streamControllers = new Set();
|
|
16
15
|
#closed = false;
|
|
17
|
-
constructor(
|
|
18
|
-
this.#
|
|
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.#
|
|
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.#
|
|
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.#
|
|
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.#
|
|
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.#
|
|
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.#
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,kBAAkB,GAQnB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,SAAS,EAAqC,MAAM,mBAAmB,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAqB,MAAM,sBAAsB,CAAA;AAC7I,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEtD,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAoBjC,MAAM,iBAAiB;IACZ,MAAM,CAAY;IAClB,SAAS,CAAQ;IACjB,kBAAkB,GAAG,IAAI,GAAG,EAAmB,CAAA;IACxD,OAAO,GAAG,KAAK,CAAA;IAEf,YAAY,KAAiB,EAAE,QAAgB;QAC7C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAA2B;QACtC,IAAI,CAAC,UAAU,EAAE,CAAA;QACjB,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAA;QAClD,MAAM,EAAE,GAAG,UAAU,EAAE,CAAA;QACvB,MAAM,UAAU,GAAG,UAAU,EAAE,CAAA;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,MAAM,GAAgB;YAC1B,EAAE;YACF,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE;gBACP,UAAU;gBACV,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,UAAU,CAAC;aACzD;YACD,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAA;QAED,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAAE,MAAM,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAElF,IAAI,MAAgC,CAAA;QACpC,IAAI,CAAC;YACH,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,UAAU,CAAC,CAAA;YACrD,MAAM,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAA;YAC1E,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,UAAU,CAAC,MAAM,CAAC,CAAA;YACxB,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;YAC9D,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAY;QACpB,IAAI,CAAC,UAAU,EAAE,CAAA;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAC/C,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,UAAU,EAAE,CAAA;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACzF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAAY;QACnC,IAAI,CAAC,UAAU,EAAE,CAAA;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;YAAE,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACvE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAA;QACxD,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;IAClE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAU,EAAE,IAAY,EAAE,OAAe,EAAE,UAAuB,EAAE;QAC7E,IAAI,CAAC,UAAU,EAAE,CAAA;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;YAAE,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACvE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAA;QACpG,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAA;QAC5C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,qBAAqB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC3F,OAAO,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC7D,CAAC;IAED,OAAO,CAAC,EAAU,EAAE,IAAY;QAC9B,IAAI,CAAC,UAAU,EAAE,CAAA;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;YAAE,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACvE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACvC,OAAO,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;IACjH,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,kBAAkB;YAAE,UAAU,CAAC,KAAK,EAAE,CAAA;QACpE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IACpE,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAA0B,EAAE;IAC/D,IAAI,CAAC,UAAU,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IAC5F,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IACzC,OAAO,IAAI,iBAAiB,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAA;AACnE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAA0B,EAAE;IAC1D,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAA;AACvF,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,UAAU,CAAA;AAClD,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,OAA2B;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAA;IACjC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAA;IAC9D,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAA;IACvF,IAAI,CAAC,OAAO,CAAC,GAAG;QAAE,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAA;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAA;IACjG,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACxD,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAC3B,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAA;AAC9B,CAAC;AAED,SAAS,WAAW,CAAC,MAAiC,EAAE,UAA2B,EAAE,WAAiC;IACpH,OAAO;QACL,CAAC,MAAM,CAAC,aAAa,CAAC;YACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAA;YAC/C,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YACpD,OAAO;gBACL,KAAK,CAAC,IAAI;oBACR,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;wBACpC,IAAI,MAAM,CAAC,IAAI;4BAAE,OAAO,EAAE,CAAA;wBAC1B,OAAO,MAAM,CAAA;oBACf,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,EAAE,CAAA;wBACT,MAAM,KAAK,CAAA;oBACb,CAAC;gBACH,CAAC;gBACD,KAAK,CAAC,MAAM;oBACV,UAAU,CAAC,KAAK,EAAE,CAAA;oBAClB,IAAI,CAAC;wBACH,OAAO,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;oBACtE,CAAC;4BAAS,CAAC;wBACT,OAAO,EAAE,CAAA;oBACX,CAAC;gBACH,CAAC;gBACD,KAAK,CAAC,KAAK,CAAC,KAAe;oBACzB,UAAU,CAAC,KAAK,EAAE,CAAA;oBAClB,IAAI,CAAC;wBACH,IAAI,QAAQ,CAAC,KAAK;4BAAE,OAAO,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;wBACtD,MAAM,KAAK,CAAA;oBACb,CAAC;4BAAS,CAAC;wBACT,OAAO,EAAE,CAAA;oBACX,CAAC;gBACH,CAAC;aACF,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAmB;IACvC,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;KACxG,CAAA;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,MAAoB,EAAE,MAAoB,EAAE,SAAiB;IAC7F,IAAI,MAAM,GAAiE,GAAG,EAAE,GAAE,CAAC,CAAA;IACnF,MAAM,MAAM,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAC9C,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,MAAM,IAAI,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC,CAAA;QAC/G,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IACF,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IAChE,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,MAAoB,EAAE,SAAiB;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;IAClC,IAAI,SAAkB,CAAA;IACtB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YAC5D,OAAM;QACR,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAA;YACjB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;IACD,MAAM,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;AACzF,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export declare const version = "0.
|
|
2
|
-
export { connectPiFleet } from "./client.js";
|
|
3
|
-
export { AgentNameTakenError, AgentNotFoundError, AgentUnavailableError, } from "./
|
|
4
|
-
export type { Agent, AgentState, AgentStatus, AgentSummary,
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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.
|
|
2
|
-
export { connectPiFleet } from "./client.js";
|
|
3
|
-
export { AgentNameTakenError, AgentNotFoundError, AgentUnavailableError, } from "./
|
|
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,
|
|
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
|
-
|
|
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
|
|
19
|
-
|
|
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(
|
|
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", ...
|
|
143
|
-
if (
|
|
144
|
-
args.push("--session",
|
|
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:
|
|
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
|
|
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
|
|
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=
|
|
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
|
|
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
|
|
24
|
-
|
|
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
|
|
30
|
+
export declare class FleetStore {
|
|
32
31
|
#private;
|
|
33
|
-
constructor(stateDir: string, shared:
|
|
34
|
-
create(record: AgentRecord): Promise<
|
|
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():
|
|
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
|
|
43
|
+
export declare function openStore(stateDir: string): Promise<FleetStore>;
|
|
45
44
|
export {};
|
|
46
|
-
//# sourceMappingURL=
|
|
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"}
|