@elpapi42/pi-fleet-sdk 0.3.1 → 0.4.1
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 +0 -3
- package/dist/{types.d.ts → fleet/agent.d.ts} +14 -17
- package/dist/fleet/agent.d.ts.map +1 -0
- package/dist/{types.js → fleet/agent.js} +23 -1
- 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} +33 -53
- 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 -10
- package/dist/pi/runtime.js.map +1 -0
- package/dist/{internal/registry.d.ts → state/store.d.ts} +9 -11
- 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 +18 -0
- package/dist/worker/control.d.ts.map +1 -0
- package/dist/{internal/worker-client.js → worker/control.js} +47 -11
- package/dist/worker/control.js.map +1 -0
- package/dist/{internal → worker}/protocol.d.ts +1 -1
- package/dist/{internal → worker}/protocol.d.ts.map +1 -1
- 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/{internal/worker.js → worker/server.js} +10 -36
- 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.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.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.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- /package/dist/{internal → worker}/protocol.js +0 -0
package/README.md
CHANGED
|
@@ -13,7 +13,6 @@ const client = await connectPiFleet()
|
|
|
13
13
|
const agent = await client.create({
|
|
14
14
|
name: "researcher",
|
|
15
15
|
cwd: process.cwd(),
|
|
16
|
-
instructions: "Give concise answers.",
|
|
17
16
|
})
|
|
18
17
|
|
|
19
18
|
await agent.send("Investigate the database schema")
|
|
@@ -21,8 +20,6 @@ console.log(await agent.status())
|
|
|
21
20
|
await client.close()
|
|
22
21
|
```
|
|
23
22
|
|
|
24
|
-
`instructions` adds durable system instructions. It does not send initial work.
|
|
25
|
-
|
|
26
23
|
`piArgs` passes Pi options through unchanged. Pi-fleet adds `--mode rpc` and rejects `--mode` and `--no-session`. User session selectors remain authoritative:
|
|
27
24
|
|
|
28
25
|
```ts
|
|
@@ -1,14 +1,4 @@
|
|
|
1
1
|
export type AgentState = "starting" | "idle" | "working" | "stopped" | "failed";
|
|
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
|
-
instructions?: string;
|
|
10
|
-
piArgs?: string[];
|
|
11
|
-
};
|
|
12
2
|
export type AgentSummary = {
|
|
13
3
|
id: string;
|
|
14
4
|
name: string;
|
|
@@ -33,12 +23,6 @@ export interface Agent {
|
|
|
33
23
|
status(): Promise<AgentStatus>;
|
|
34
24
|
send(message: string, options?: SendOptions): Promise<SendResult>;
|
|
35
25
|
}
|
|
36
|
-
export interface PiFleetClient {
|
|
37
|
-
create(options: CreateAgentOptions): Promise<Agent>;
|
|
38
|
-
get(name: string): Promise<Agent>;
|
|
39
|
-
list(): Promise<AgentSummary[]>;
|
|
40
|
-
close(): Promise<void>;
|
|
41
|
-
}
|
|
42
26
|
export declare class AgentNameTakenError extends Error {
|
|
43
27
|
constructor(name: string);
|
|
44
28
|
}
|
|
@@ -48,4 +32,17 @@ export declare class AgentNotFoundError extends Error {
|
|
|
48
32
|
export declare class AgentUnavailableError extends Error {
|
|
49
33
|
constructor(name: string);
|
|
50
34
|
}
|
|
51
|
-
|
|
35
|
+
type AgentClient = {
|
|
36
|
+
status(id: string, name: string): Promise<AgentStatus>;
|
|
37
|
+
send(id: string, name: string, message: string, options?: SendOptions): Promise<SendResult>;
|
|
38
|
+
};
|
|
39
|
+
export declare class AgentHandle implements Agent {
|
|
40
|
+
#private;
|
|
41
|
+
constructor(client: AgentClient, id: string, name: string);
|
|
42
|
+
get id(): string;
|
|
43
|
+
get name(): string;
|
|
44
|
+
status(): Promise<AgentStatus>;
|
|
45
|
+
send(message: string, options?: SendOptions): Promise<SendResult>;
|
|
46
|
+
}
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/fleet/agent.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE/E,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,UAAU,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,UAAU,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,CAAA;AAE/C,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,CAAA;IAC9B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CAClE;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,IAAI,EAAE,MAAM;CAIzB;AAED,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,IAAI,EAAE,MAAM;CAIzB;AAED,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,IAAI,EAAE,MAAM;CAIzB;AAED,KAAK,WAAW,GAAG;IACjB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IACtD,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CAC5F,CAAA;AAED,qBAAa,WAAY,YAAW,KAAK;;gBAK3B,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAMzD,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;IAI9B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CAGlE"}
|
|
@@ -16,4 +16,26 @@ export class AgentUnavailableError extends Error {
|
|
|
16
16
|
this.name = "AgentUnavailableError";
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
|
|
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
|
+
}
|
|
41
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/fleet/agent.ts"],"names":[],"mappings":"AAgCA,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;AAOD,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;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,EAEV,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;AAyFD,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,19 @@
|
|
|
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, 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;
|
|
16
14
|
#closed = false;
|
|
17
|
-
constructor(
|
|
18
|
-
this.#
|
|
15
|
+
constructor(store, stateDir) {
|
|
16
|
+
this.#store = store;
|
|
19
17
|
this.#stateDir = stateDir;
|
|
20
18
|
}
|
|
21
19
|
async create(options) {
|
|
@@ -28,7 +26,6 @@ class PiFleetClientImpl {
|
|
|
28
26
|
id,
|
|
29
27
|
name: input.name,
|
|
30
28
|
cwd: input.cwd,
|
|
31
|
-
instructions: input.instructions,
|
|
32
29
|
piArgs: input.piArgs,
|
|
33
30
|
state: "starting",
|
|
34
31
|
runtime: {
|
|
@@ -40,41 +37,42 @@ class PiFleetClientImpl {
|
|
|
40
37
|
createdAt: now,
|
|
41
38
|
updatedAt: now,
|
|
42
39
|
};
|
|
43
|
-
await this.#
|
|
40
|
+
if (!(await this.#store.create(record)))
|
|
41
|
+
throw new AgentNameTakenError(input.name);
|
|
44
42
|
let worker;
|
|
45
43
|
try {
|
|
46
44
|
worker = launchWorker(this.#stateDir, id, generation);
|
|
47
|
-
await waitForWorkerReady(record, worker, STARTUP_TIMEOUT_MS);
|
|
45
|
+
await waitForWorkerReady(workerTarget(record), worker, STARTUP_TIMEOUT_MS);
|
|
48
46
|
return new AgentHandle(this, id, input.name);
|
|
49
47
|
}
|
|
50
48
|
catch (error) {
|
|
51
49
|
await stopWorker(worker);
|
|
52
|
-
await this.#
|
|
50
|
+
await this.#store.rollbackCreation(id, input.name, generation);
|
|
53
51
|
throw error;
|
|
54
52
|
}
|
|
55
53
|
}
|
|
56
54
|
async get(name) {
|
|
57
55
|
this.assertOpen();
|
|
58
|
-
const record = this.#
|
|
56
|
+
const record = this.#store.getByName(name);
|
|
59
57
|
if (!record)
|
|
60
58
|
throw new AgentNotFoundError(name);
|
|
61
59
|
return new AgentHandle(this, record.id, record.name);
|
|
62
60
|
}
|
|
63
61
|
async list() {
|
|
64
62
|
this.assertOpen();
|
|
65
|
-
return this.#
|
|
63
|
+
return this.#store.list().map(({ id, name, cwd, state }) => ({ id, name, cwd, state }));
|
|
66
64
|
}
|
|
67
65
|
async status(id, name) {
|
|
68
66
|
this.assertOpen();
|
|
69
|
-
const record = this.#
|
|
67
|
+
const record = this.#store.getById(id);
|
|
70
68
|
if (!record || record.name !== name)
|
|
71
69
|
throw new AgentNotFoundError(name);
|
|
72
|
-
const status = await requestStatus(record);
|
|
70
|
+
const status = await requestStatus(workerTarget(record));
|
|
73
71
|
return { id: status.id, name: status.name, state: status.state };
|
|
74
72
|
}
|
|
75
73
|
async send(id, name, message, options = {}) {
|
|
76
74
|
this.assertOpen();
|
|
77
|
-
const record = this.#
|
|
75
|
+
const record = this.#store.getById(id);
|
|
78
76
|
if (!record || record.name !== name)
|
|
79
77
|
throw new AgentNotFoundError(name);
|
|
80
78
|
if (typeof message !== "string" || !message.trim())
|
|
@@ -82,13 +80,13 @@ class PiFleetClientImpl {
|
|
|
82
80
|
const delivery = options.delivery ?? "steer";
|
|
83
81
|
if (!isSendDelivery(delivery))
|
|
84
82
|
throw new TypeError(`Invalid delivery: ${String(delivery)}`);
|
|
85
|
-
return requestSend(record, message, delivery);
|
|
83
|
+
return requestSend(workerTarget(record), message, delivery);
|
|
86
84
|
}
|
|
87
85
|
close() {
|
|
88
86
|
if (this.#closed)
|
|
89
87
|
return Promise.resolve();
|
|
90
88
|
this.#closed = true;
|
|
91
|
-
return this.#
|
|
89
|
+
return this.#store.close();
|
|
92
90
|
}
|
|
93
91
|
assertOpen() {
|
|
94
92
|
if (this.#closed)
|
|
@@ -99,7 +97,10 @@ export async function connectPiFleet(options = {}) {
|
|
|
99
97
|
if (!capability.ipc)
|
|
100
98
|
throw new Error("pi-fleet requires ZeroMQ ipc:// support on this host");
|
|
101
99
|
const stateDir = resolveStateDir(options);
|
|
102
|
-
return new PiFleetClientImpl(await
|
|
100
|
+
return new PiFleetClientImpl(await openStore(stateDir), stateDir);
|
|
101
|
+
}
|
|
102
|
+
export function resolveStateDir(options = {}) {
|
|
103
|
+
return options.stateDir ? resolve(options.stateDir) : resolve(homedir(), ".pi-fleet");
|
|
103
104
|
}
|
|
104
105
|
function isSendDelivery(value) {
|
|
105
106
|
return value === "steer" || value === "followUp";
|
|
@@ -116,12 +117,15 @@ async function validateCreateOptions(options) {
|
|
|
116
117
|
if (!(await stat(cwd)).isDirectory())
|
|
117
118
|
throw new TypeError(`Agent cwd is not a directory: ${cwd}`);
|
|
118
119
|
const piArgs = options.piArgs ? [...options.piArgs] : [];
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
120
|
+
validatePiArguments(piArgs);
|
|
121
|
+
return { name, cwd, piArgs };
|
|
122
|
+
}
|
|
123
|
+
function workerTarget(record) {
|
|
124
|
+
return {
|
|
125
|
+
id: record.id,
|
|
126
|
+
name: record.name,
|
|
127
|
+
runtime: record.runtime && { generation: record.runtime.generation, endpoint: record.runtime.endpoint },
|
|
128
|
+
};
|
|
125
129
|
}
|
|
126
130
|
async function waitForWorkerReady(record, worker, timeoutMs) {
|
|
127
131
|
let onExit = () => { };
|
|
@@ -136,30 +140,6 @@ async function waitForWorkerReady(record, worker, timeoutMs) {
|
|
|
136
140
|
worker.off("exit", onExit);
|
|
137
141
|
}
|
|
138
142
|
}
|
|
139
|
-
async function stopWorker(worker) {
|
|
140
|
-
if (!worker || worker.exitCode !== null || worker.signalCode !== null)
|
|
141
|
-
return;
|
|
142
|
-
worker.kill("SIGTERM");
|
|
143
|
-
if (await waitForExit(worker, 1_000))
|
|
144
|
-
return;
|
|
145
|
-
worker.kill("SIGKILL");
|
|
146
|
-
await waitForExit(worker, 1_000);
|
|
147
|
-
}
|
|
148
|
-
async function waitForExit(worker, timeoutMs) {
|
|
149
|
-
if (worker.exitCode !== null || worker.signalCode !== null)
|
|
150
|
-
return true;
|
|
151
|
-
return new Promise((resolve) => {
|
|
152
|
-
const timeout = setTimeout(() => {
|
|
153
|
-
worker.off("exit", onExit);
|
|
154
|
-
resolve(false);
|
|
155
|
-
}, timeoutMs);
|
|
156
|
-
const onExit = () => {
|
|
157
|
-
clearTimeout(timeout);
|
|
158
|
-
resolve(true);
|
|
159
|
-
};
|
|
160
|
-
worker.once("exit", onExit);
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
143
|
async function waitForStatus(record, timeoutMs) {
|
|
164
144
|
const end = Date.now() + timeoutMs;
|
|
165
145
|
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.
|
|
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.4.1";
|
|
2
|
+
export { connectPiFleet } from "./fleet/client.js";
|
|
3
|
+
export { AgentNameTakenError, AgentNotFoundError, AgentUnavailableError, } from "./fleet/agent.js";
|
|
4
|
+
export type { Agent, 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,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.4.1";
|
|
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,15 +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("--
|
|
145
|
-
if (record.sessionPath && !record.piArgs.some((arg) => USER_SESSION_SELECTORS.has(arg))) {
|
|
146
|
-
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);
|
|
147
153
|
}
|
|
148
|
-
const child = spawn(command, args, { cwd:
|
|
154
|
+
const child = spawn(command, args, { cwd: launch.cwd, stdio: "pipe" });
|
|
149
155
|
let stderr = "";
|
|
150
156
|
child.stderr.on("data", (chunk) => {
|
|
151
157
|
stderr = `${stderr}${chunk.toString("utf8")}`.slice(-4_096);
|
|
@@ -157,17 +163,20 @@ export async function startPi(record, timeoutMs = 10_000, onEvent) {
|
|
|
157
163
|
process: child,
|
|
158
164
|
state,
|
|
159
165
|
send: (message, delivery, requestTimeoutMs) => rpc.send(message, delivery, requestTimeoutMs),
|
|
166
|
+
stop: () => stopPi(child),
|
|
160
167
|
};
|
|
161
168
|
}
|
|
162
169
|
catch (error) {
|
|
163
170
|
rpc.close();
|
|
164
|
-
await
|
|
171
|
+
await stopPi(child);
|
|
165
172
|
const detail = stderr.trim();
|
|
166
173
|
const message = error instanceof Error ? error.message : String(error);
|
|
167
174
|
throw new PiStartupError(detail ? `${message}: ${detail}` : message);
|
|
168
175
|
}
|
|
169
176
|
}
|
|
170
|
-
async function
|
|
177
|
+
export async function stopPi(child) {
|
|
178
|
+
if (!child)
|
|
179
|
+
return;
|
|
171
180
|
if (child.exitCode !== null || child.signalCode !== null)
|
|
172
181
|
return;
|
|
173
182
|
child.kill("SIGTERM");
|
|
@@ -194,4 +203,4 @@ async function waitForExit(child, timeoutMs) {
|
|
|
194
203
|
function isRecord(value) {
|
|
195
204
|
return typeof value === "object" && value !== null;
|
|
196
205
|
}
|
|
197
|
-
//# 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,10 +1,9 @@
|
|
|
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;
|
|
6
6
|
cwd: string;
|
|
7
|
-
instructions?: string;
|
|
8
7
|
piArgs: string[];
|
|
9
8
|
sessionPath?: string;
|
|
10
9
|
sessionId?: string;
|
|
@@ -21,27 +20,26 @@ export type AgentRecord = {
|
|
|
21
20
|
createdAt: number;
|
|
22
21
|
updatedAt: number;
|
|
23
22
|
};
|
|
24
|
-
type
|
|
25
|
-
|
|
26
|
-
root: Environment;
|
|
23
|
+
type SharedStore = {
|
|
24
|
+
root: RootDatabase;
|
|
27
25
|
agents: Database<AgentRecord, string>;
|
|
28
26
|
names: Database<string, string>;
|
|
29
27
|
references: number;
|
|
30
28
|
closing?: Promise<void>;
|
|
31
29
|
};
|
|
32
|
-
export declare class
|
|
30
|
+
export declare class FleetStore {
|
|
33
31
|
#private;
|
|
34
|
-
constructor(stateDir: string, shared:
|
|
35
|
-
create(record: AgentRecord): Promise<
|
|
32
|
+
constructor(stateDir: string, shared: SharedStore);
|
|
33
|
+
create(record: AgentRecord): Promise<boolean>;
|
|
36
34
|
getById(id: string): AgentRecord | undefined;
|
|
37
35
|
getByName(name: string): AgentRecord | undefined;
|
|
38
|
-
list():
|
|
36
|
+
list(): AgentRecord[];
|
|
39
37
|
markReady(id: string, runtimeGeneration: string, ready: Pick<NonNullable<AgentRecord["runtime"]>, "workerPid" | "endpoint"> & Pick<AgentRecord, "sessionPath" | "sessionId">): Promise<boolean>;
|
|
40
38
|
updateState(id: string, runtimeGeneration: string, state: "working" | "idle"): Promise<boolean>;
|
|
41
39
|
rollbackCreation(id: string, name: string, runtimeGeneration: string): Promise<void>;
|
|
42
40
|
close(): Promise<void>;
|
|
43
41
|
private assertOpen;
|
|
44
42
|
}
|
|
45
|
-
export declare function
|
|
43
|
+
export declare function openStore(stateDir: string): Promise<FleetStore>;
|
|
46
44
|
export {};
|
|
47
|
-
//# 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"}
|
|
@@ -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
|
-
|
|
3
|
-
|
|
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
|
-
|
|
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 (
|
|
108
|
-
|
|
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
|
|
117
|
-
const canonicalStateDir = await
|
|
118
|
-
let shared =
|
|
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 =
|
|
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
|
-
|
|
120
|
+
stores.set(canonicalStateDir, shared);
|
|
132
121
|
}
|
|
133
122
|
shared.references += 1;
|
|
134
|
-
return new
|
|
123
|
+
return new FleetStore(canonicalStateDir, shared);
|
|
135
124
|
}
|
|
136
|
-
|
|
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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"}
|