@rivet-dev/pi 0.1.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/LICENSE +190 -0
- package/dist/actions.d.ts +1 -1
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +8 -10
- package/dist/actions.js.map +1 -1
- package/dist/actor-config.d.ts +33 -0
- package/dist/actor-config.d.ts.map +1 -0
- package/dist/actor-config.js +87 -0
- package/dist/actor-config.js.map +1 -0
- package/dist/actor-types.d.ts +34 -0
- package/dist/actor-types.d.ts.map +1 -0
- package/dist/actor-types.js +2 -0
- package/dist/actor-types.js.map +1 -0
- package/dist/actor.d.ts +17 -9
- package/dist/actor.d.ts.map +1 -1
- package/dist/actor.js +33 -68
- package/dist/actor.js.map +1 -1
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +2 -1
- package/dist/credentials.js.map +1 -1
- package/dist/drain.d.ts +12 -0
- package/dist/drain.d.ts.map +1 -0
- package/dist/drain.js +20 -0
- package/dist/drain.js.map +1 -0
- package/dist/durable/actions.d.ts +192 -0
- package/dist/durable/actions.d.ts.map +1 -0
- package/dist/durable/actions.js +289 -0
- package/dist/durable/actions.js.map +1 -0
- package/dist/durable/actor-sqlite.d.ts +10 -0
- package/dist/durable/actor-sqlite.d.ts.map +1 -0
- package/dist/durable/actor-sqlite.js +32 -0
- package/dist/durable/actor-sqlite.js.map +1 -0
- package/dist/durable/actor.d.ts +36 -0
- package/dist/durable/actor.d.ts.map +1 -0
- package/dist/durable/actor.js +107 -0
- package/dist/durable/actor.js.map +1 -0
- package/dist/durable/env.d.ts +13 -0
- package/dist/durable/env.d.ts.map +1 -0
- package/dist/durable/env.js +178 -0
- package/dist/durable/env.js.map +1 -0
- package/dist/durable/errors.d.ts +8 -0
- package/dist/durable/errors.d.ts.map +1 -0
- package/dist/durable/errors.js +19 -0
- package/dist/durable/errors.js.map +1 -0
- package/dist/durable/index.d.ts +5 -0
- package/dist/durable/index.d.ts.map +1 -0
- package/dist/durable/index.js +2 -0
- package/dist/durable/index.js.map +1 -0
- package/dist/durable/runtime.d.ts +92 -0
- package/dist/durable/runtime.d.ts.map +1 -0
- package/dist/durable/runtime.js +435 -0
- package/dist/durable/runtime.js.map +1 -0
- package/dist/durable/storage.d.ts +31 -0
- package/dist/durable/storage.d.ts.map +1 -0
- package/dist/durable/storage.js +53 -0
- package/dist/durable/storage.js.map +1 -0
- package/dist/durable/watches.d.ts +77 -0
- package/dist/durable/watches.d.ts.map +1 -0
- package/dist/durable/watches.js +245 -0
- package/dist/durable/watches.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/models.d.ts +5 -0
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +13 -6
- package/dist/models.js.map +1 -1
- package/dist/runtime.d.ts +71 -6
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +276 -45
- package/dist/runtime.js.map +1 -1
- package/dist/sandbox.d.ts +9 -3
- package/dist/sandbox.d.ts.map +1 -1
- package/dist/sandbox.js +64 -25
- package/dist/sandbox.js.map +1 -1
- package/dist/storage.d.ts +18 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +49 -0
- package/dist/storage.js.map +1 -1
- package/dist/tracing.d.ts +8 -0
- package/dist/tracing.d.ts.map +1 -1
- package/dist/tracing.js +36 -1
- package/dist/tracing.js.map +1 -1
- package/package.json +46 -15
package/dist/sandbox.js
CHANGED
|
@@ -8,18 +8,31 @@ const IGNORED_DIRECTORIES = [".git", "node_modules"];
|
|
|
8
8
|
* Builds Pi's seven built-in coding tools with every file and shell operation
|
|
9
9
|
* routed into the sandbox. Passed as `customTools`, they replace the built-in
|
|
10
10
|
* tools of the same names.
|
|
11
|
+
*
|
|
12
|
+
* The tools see the session's `root`. Each operation connects the sandbox on
|
|
13
|
+
* first use and runs at the same path under the sandbox's own working
|
|
14
|
+
* directory, so a replaced sandbox with another working directory still works.
|
|
11
15
|
*/
|
|
12
|
-
export function createSandboxTools(
|
|
13
|
-
const root = normalizeRoot(
|
|
14
|
-
const
|
|
16
|
+
export function createSandboxTools(sessionRoot, connect) {
|
|
17
|
+
const root = normalizeRoot(sessionRoot);
|
|
18
|
+
const inSandbox = async (path) => {
|
|
19
|
+
const sandbox = await connect();
|
|
20
|
+
return { sandbox, path: toSandboxPath(root, sandbox.cwd, path) };
|
|
21
|
+
};
|
|
15
22
|
const access = async (path) => {
|
|
16
|
-
const
|
|
17
|
-
if (!(await sandbox.exists(
|
|
18
|
-
throw new Error(`Path not found: ${
|
|
23
|
+
const target = await inSandbox(path);
|
|
24
|
+
if (!(await target.sandbox.exists(target.path))) {
|
|
25
|
+
throw new Error(`Path not found: ${resolveSandboxPath(root, path)}`);
|
|
19
26
|
}
|
|
20
27
|
};
|
|
21
|
-
const readFile = async (path) =>
|
|
22
|
-
|
|
28
|
+
const readFile = async (path) => {
|
|
29
|
+
const target = await inSandbox(path);
|
|
30
|
+
return Buffer.from(await target.sandbox.readFile(target.path));
|
|
31
|
+
};
|
|
32
|
+
const writeFile = async (path, content) => {
|
|
33
|
+
const target = await inSandbox(path);
|
|
34
|
+
await target.sandbox.writeFile(target.path, content);
|
|
35
|
+
};
|
|
23
36
|
const read = createReadToolDefinition(root, {
|
|
24
37
|
operations: {
|
|
25
38
|
access,
|
|
@@ -30,31 +43,44 @@ export function createSandboxTools(sandbox) {
|
|
|
30
43
|
const write = createWriteToolDefinition(root, {
|
|
31
44
|
operations: {
|
|
32
45
|
writeFile,
|
|
33
|
-
mkdir: (path) =>
|
|
46
|
+
mkdir: async (path) => {
|
|
47
|
+
const target = await inSandbox(path);
|
|
48
|
+
await target.sandbox.mkdir(target.path);
|
|
49
|
+
},
|
|
34
50
|
},
|
|
35
51
|
});
|
|
36
52
|
const edit = createEditToolDefinition(root, {
|
|
37
53
|
operations: { access, readFile, writeFile },
|
|
38
54
|
});
|
|
39
55
|
const bash = createBashToolDefinition(root, {
|
|
40
|
-
operations: createSandboxBashOperations(
|
|
56
|
+
operations: createSandboxBashOperations(root, connect),
|
|
41
57
|
});
|
|
42
58
|
const ls = createLsToolDefinition(root, {
|
|
43
59
|
operations: {
|
|
44
|
-
exists: (path) =>
|
|
45
|
-
|
|
60
|
+
exists: async (path) => {
|
|
61
|
+
const target = await inSandbox(path);
|
|
62
|
+
return target.sandbox.exists(target.path);
|
|
63
|
+
},
|
|
64
|
+
readdir: async (path) => {
|
|
65
|
+
const target = await inSandbox(path);
|
|
66
|
+
return target.sandbox.readdir(target.path);
|
|
67
|
+
},
|
|
46
68
|
stat: async (path) => {
|
|
47
|
-
const
|
|
69
|
+
const target = await inSandbox(path);
|
|
70
|
+
const stat = await target.sandbox.stat(target.path);
|
|
48
71
|
return { isDirectory: () => stat.isDirectory };
|
|
49
72
|
},
|
|
50
73
|
},
|
|
51
74
|
});
|
|
52
75
|
const find = createFindToolDefinition(root, {
|
|
53
76
|
operations: {
|
|
54
|
-
exists: (path) =>
|
|
77
|
+
exists: async (path) => {
|
|
78
|
+
const target = await inSandbox(path);
|
|
79
|
+
return target.sandbox.exists(target.path);
|
|
80
|
+
},
|
|
55
81
|
glob: async (pattern, searchDirectory, options) => {
|
|
56
|
-
const
|
|
57
|
-
const result = await sandbox.exec(`find . -type f ${IGNORED_DIRECTORIES.map((directory) => `-not -path ${shellQuote(`*/${directory}/*`)}`).join(" ")}`, { cwd:
|
|
82
|
+
const target = await inSandbox(searchDirectory);
|
|
83
|
+
const result = await target.sandbox.exec(`find . -type f ${IGNORED_DIRECTORIES.map((directory) => `-not -path ${shellQuote(`*/${directory}/*`)}`).join(" ")}`, { cwd: target.path });
|
|
58
84
|
if (result.exitCode !== 0) {
|
|
59
85
|
throw new Error(result.stderr.trim() || `find exited with ${result.exitCode}`);
|
|
60
86
|
}
|
|
@@ -70,7 +96,7 @@ export function createSandboxTools(sandbox) {
|
|
|
70
96
|
const grep = {
|
|
71
97
|
...grepBase,
|
|
72
98
|
execute: async (_toolCallId, params, signal) => {
|
|
73
|
-
const searchPath =
|
|
99
|
+
const searchPath = resolveSandboxPath(root, params.path ?? ".");
|
|
74
100
|
const limit = Math.min(Math.max(1, params.limit ?? 100), MAX_GREP_MATCHES);
|
|
75
101
|
const args = ["-r", "-n", "-I", "-H"];
|
|
76
102
|
if (params.ignoreCase)
|
|
@@ -86,8 +112,9 @@ export function createSandboxTools(sandbox) {
|
|
|
86
112
|
args.push(`--exclude-dir=${directory}`);
|
|
87
113
|
}
|
|
88
114
|
args.push("-e", params.pattern, "--", posix.relative(root, searchPath) || ".");
|
|
89
|
-
const
|
|
90
|
-
|
|
115
|
+
const target = await inSandbox(root);
|
|
116
|
+
const result = await target.sandbox.exec(`grep ${args.map(shellQuote).join(" ")}`, {
|
|
117
|
+
cwd: target.path,
|
|
91
118
|
signal,
|
|
92
119
|
});
|
|
93
120
|
if (result.exitCode !== 0 && result.exitCode !== 1) {
|
|
@@ -99,7 +126,9 @@ export function createSandboxTools(sandbox) {
|
|
|
99
126
|
let output = selected.join("\n");
|
|
100
127
|
let linesTruncated = false;
|
|
101
128
|
if (Buffer.byteLength(output) > MAX_GREP_OUTPUT_BYTES) {
|
|
102
|
-
output = Buffer.from(output)
|
|
129
|
+
output = Buffer.from(output)
|
|
130
|
+
.subarray(0, MAX_GREP_OUTPUT_BYTES)
|
|
131
|
+
.toString();
|
|
103
132
|
linesTruncated = true;
|
|
104
133
|
}
|
|
105
134
|
const details = {};
|
|
@@ -122,14 +151,16 @@ export function createSandboxTools(sandbox) {
|
|
|
122
151
|
*
|
|
123
152
|
* Pi passes the actor host's environment as `options.env`. It is not
|
|
124
153
|
* forwarded, because it holds the host's provider keys; commands run with the
|
|
125
|
-
* sandbox's own environment.
|
|
154
|
+
* sandbox's own environment. Paths map from `sessionRoot` as in
|
|
155
|
+
* `createSandboxTools`.
|
|
126
156
|
*/
|
|
127
|
-
export function createSandboxBashOperations(
|
|
128
|
-
const root = normalizeRoot(
|
|
157
|
+
export function createSandboxBashOperations(sessionRoot, connect) {
|
|
158
|
+
const root = normalizeRoot(sessionRoot);
|
|
129
159
|
return {
|
|
130
160
|
async exec(command, requestedCwd, options) {
|
|
161
|
+
const sandbox = await connect();
|
|
131
162
|
const result = await sandbox.exec(command, {
|
|
132
|
-
cwd:
|
|
163
|
+
cwd: toSandboxPath(root, sandbox.cwd, requestedCwd),
|
|
133
164
|
timeoutMs: options.timeout === undefined ? undefined : options.timeout * 1000,
|
|
134
165
|
signal: options.signal,
|
|
135
166
|
onData: (chunk) => options.onData(Buffer.from(chunk)),
|
|
@@ -151,6 +182,14 @@ export function resolveSandboxPath(root, path) {
|
|
|
151
182
|
}
|
|
152
183
|
return resolved;
|
|
153
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Maps `path`, resolved against the session's `root`, to the same place under
|
|
187
|
+
* the sandbox's working directory. Paths outside `root` are rejected.
|
|
188
|
+
*/
|
|
189
|
+
function toSandboxPath(root, sandboxCwd, path) {
|
|
190
|
+
const relative = posix.relative(normalizeRoot(root), resolveSandboxPath(root, path));
|
|
191
|
+
return posix.join(normalizeRoot(sandboxCwd), relative);
|
|
192
|
+
}
|
|
154
193
|
function normalizeRoot(path) {
|
|
155
194
|
if (!posix.isAbsolute(path)) {
|
|
156
195
|
throw new Error(`sandbox cwd must be an absolute POSIX path, received ${path}`);
|
|
@@ -179,7 +218,7 @@ function imageMimeType(path) {
|
|
|
179
218
|
".webp": "image/webp",
|
|
180
219
|
}[extension];
|
|
181
220
|
}
|
|
182
|
-
function shellQuote(value) {
|
|
221
|
+
export function shellQuote(value) {
|
|
183
222
|
return `'${value.replaceAll("'", `'"'"'`)}'`;
|
|
184
223
|
}
|
|
185
224
|
//# sourceMappingURL=sandbox.js.map
|
package/dist/sandbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAEN,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,GAIzB,MAAM,iCAAiC,CAAC;AAGzC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,qBAAqB,GAAG,GAAG,GAAG,IAAI,CAAC;AACzC,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAErD
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type FileEntry, type SessionEntry, type SessionHeader, type SettingsManager } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
import type { RawAccess } from "rivetkit/db";
|
|
3
3
|
export type PiDatabase = Pick<RawAccess, "execute">;
|
|
4
4
|
export type PiSettings = ReturnType<SettingsManager["getGlobalSettings"]>;
|
|
@@ -24,6 +24,11 @@ export interface StoredSandbox {
|
|
|
24
24
|
* restores the session and Pi migrates old entry versions itself.
|
|
25
25
|
*/
|
|
26
26
|
export declare const migratePiTables: (db: import("rivetkit/unstable/migrations").MigrationDatabase) => Promise<void>;
|
|
27
|
+
/** Messages Pi queued during a run, as `AgentSession` lists them. */
|
|
28
|
+
export interface PiQueue {
|
|
29
|
+
steering: string[];
|
|
30
|
+
followUp: string[];
|
|
31
|
+
}
|
|
27
32
|
export declare function loadPiSession(db: PiDatabase): Promise<StoredPiSession | undefined>;
|
|
28
33
|
export declare function createPiSession(db: PiDatabase, session: {
|
|
29
34
|
header: SessionHeader;
|
|
@@ -34,6 +39,18 @@ export declare function loadPiSandbox(db: PiDatabase): Promise<StoredSandbox | u
|
|
|
34
39
|
export declare function savePiSandbox(db: PiDatabase, sandbox: StoredSandbox): Promise<void>;
|
|
35
40
|
export declare function appendPiEntry(db: PiDatabase, entry: SessionEntry): Promise<void>;
|
|
36
41
|
export declare function savePiSettings(db: PiDatabase, settings: PiSettings): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Brings a session stored by an older `pi-coding-agent` to the current session
|
|
44
|
+
* format with Pi's own migration, and rewrites the stored rows in one
|
|
45
|
+
* transaction, so later loads read them as they are.
|
|
46
|
+
*/
|
|
47
|
+
export declare function migratePiSession(db: RawAccess, stored: StoredPiSession): Promise<StoredPiSession>;
|
|
37
48
|
/** Builds the entry list `SessionManager.inMemory` expects: header first. */
|
|
38
49
|
export declare function toFileEntries(stored: StoredPiSession): FileEntry[];
|
|
50
|
+
/** Records that a run is active, with the messages queued for it. */
|
|
51
|
+
export declare function savePiRunning(db: PiDatabase, queue: PiQueue): Promise<void>;
|
|
52
|
+
/** Records that no run is active. */
|
|
53
|
+
export declare function savePiIdle(db: PiDatabase): Promise<void>;
|
|
54
|
+
/** The queue of the run that was active when the actor stopped, or undefined when none was. */
|
|
55
|
+
export declare function loadPiInterruptedRun(db: PiDatabase): Promise<PiQueue | undefined>;
|
|
39
56
|
//# sourceMappingURL=storage.d.ts.map
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,SAAS,EAEd,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAEpD,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAE1E,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,UAAU,GAAG,SAAS,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACX;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,iFA0C1B,CAAC;AAEH,qEAAqE;AACrE,MAAM,WAAW,OAAO;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,aAAa,CAClC,EAAE,EAAE,UAAU,GACZ,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CA6BtC;AAED,wBAAsB,eAAe,CACpC,EAAE,EAAE,UAAU,EACd,OAAO,EAAE;IACR,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,UAAU,CAAC;CACrB,GACC,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,aAAa,CAClC,EAAE,EAAE,UAAU,GACZ,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAMpC;AAED,wBAAsB,aAAa,CAClC,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,aAAa,CAClC,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,cAAc,CACnC,EAAE,EAAE,UAAU,EACd,QAAQ,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACrC,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,eAAe,GACrB,OAAO,CAAC,eAAe,CAAC,CAgB1B;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,EAAE,CAElE;AAED,qEAAqE;AACrE,wBAAsB,aAAa,CAClC,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,OAAO,GACZ,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,qCAAqC;AACrC,wBAAsB,UAAU,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9D;AAED,+FAA+F;AAC/F,wBAAsB,oBAAoB,CACzC,EAAE,EAAE,UAAU,GACZ,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAW9B"}
|
package/dist/storage.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CURRENT_SESSION_VERSION, migrateSessionEntries, } from "@earendil-works/pi-coding-agent";
|
|
1
2
|
import { migrations } from "rivetkit/unstable/migrations";
|
|
2
3
|
/**
|
|
3
4
|
* One row per Pi session entry, inserted as Pi appends them. The rows are Pi's
|
|
@@ -36,6 +37,15 @@ export const migratePiTables = migrations({
|
|
|
36
37
|
) STRICT;
|
|
37
38
|
`,
|
|
38
39
|
},
|
|
40
|
+
{
|
|
41
|
+
version: 2,
|
|
42
|
+
sql: `
|
|
43
|
+
ALTER TABLE pi_session ADD COLUMN run_state TEXT NOT NULL DEFAULT 'idle'
|
|
44
|
+
CHECK (run_state IN ('idle', 'running'));
|
|
45
|
+
ALTER TABLE pi_session ADD COLUMN queued_json TEXT
|
|
46
|
+
CHECK (queued_json IS NULL OR json_valid(queued_json));
|
|
47
|
+
`,
|
|
48
|
+
},
|
|
39
49
|
],
|
|
40
50
|
});
|
|
41
51
|
export async function loadPiSession(db) {
|
|
@@ -80,8 +90,47 @@ export async function appendPiEntry(db, entry) {
|
|
|
80
90
|
export async function savePiSettings(db, settings) {
|
|
81
91
|
await db.execute(`UPDATE pi_session SET settings_json = ?, updated_at = ? WHERE singleton = 1`, JSON.stringify(settings), Date.now());
|
|
82
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Brings a session stored by an older `pi-coding-agent` to the current session
|
|
95
|
+
* format with Pi's own migration, and rewrites the stored rows in one
|
|
96
|
+
* transaction, so later loads read them as they are.
|
|
97
|
+
*/
|
|
98
|
+
export async function migratePiSession(db, stored) {
|
|
99
|
+
if ((stored.header.version ?? 1) >= CURRENT_SESSION_VERSION)
|
|
100
|
+
return stored;
|
|
101
|
+
const entries = structuredClone(toFileEntries(stored));
|
|
102
|
+
migrateSessionEntries(entries);
|
|
103
|
+
// `toFileEntries` puts the header first, and Pi's migration keeps the order.
|
|
104
|
+
const [header, ...rest] = entries;
|
|
105
|
+
await db.transaction(async (tx) => {
|
|
106
|
+
await tx.execute(`DELETE FROM pi_entry`);
|
|
107
|
+
for (const entry of rest)
|
|
108
|
+
await appendPiEntry(tx, entry);
|
|
109
|
+
await tx.execute(`UPDATE pi_session SET header_json = ?, updated_at = ? WHERE singleton = 1`, JSON.stringify(header), Date.now());
|
|
110
|
+
});
|
|
111
|
+
return { ...stored, header, entries: rest };
|
|
112
|
+
}
|
|
83
113
|
/** Builds the entry list `SessionManager.inMemory` expects: header first. */
|
|
84
114
|
export function toFileEntries(stored) {
|
|
85
115
|
return [stored.header, ...stored.entries];
|
|
86
116
|
}
|
|
117
|
+
/** Records that a run is active, with the messages queued for it. */
|
|
118
|
+
export async function savePiRunning(db, queue) {
|
|
119
|
+
await db.execute(`UPDATE pi_session SET run_state = 'running', queued_json = ? WHERE singleton = 1`, JSON.stringify(queue));
|
|
120
|
+
}
|
|
121
|
+
/** Records that no run is active. */
|
|
122
|
+
export async function savePiIdle(db) {
|
|
123
|
+
await db.execute(`UPDATE pi_session SET run_state = 'idle', queued_json = NULL WHERE singleton = 1`);
|
|
124
|
+
}
|
|
125
|
+
/** The queue of the run that was active when the actor stopped, or undefined when none was. */
|
|
126
|
+
export async function loadPiInterruptedRun(db) {
|
|
127
|
+
const rows = await db.execute(`SELECT run_state, queued_json FROM pi_session WHERE singleton = 1`);
|
|
128
|
+
const row = rows[0];
|
|
129
|
+
if (row?.run_state !== "running")
|
|
130
|
+
return undefined;
|
|
131
|
+
// Only `savePiRunning` writes `queued_json`, from a `PiQueue`.
|
|
132
|
+
return row.queued_json === null
|
|
133
|
+
? { steering: [], followUp: [] }
|
|
134
|
+
: JSON.parse(row.queued_json);
|
|
135
|
+
}
|
|
87
136
|
//# sourceMappingURL=storage.js.map
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/tracing.d.ts
CHANGED
|
@@ -7,4 +7,12 @@ import type { AgentSession } from "@earendil-works/pi-coding-agent";
|
|
|
7
7
|
* tool arguments, and tool results are not recorded.
|
|
8
8
|
*/
|
|
9
9
|
export declare function traceRun(session: AgentSession, actorId: string, run: () => Promise<void>): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Runs one `piDurable()` run inside an `invoke_agent pi` span, with the same
|
|
12
|
+
* attributes as `traceRun`. An unanswered submission marks the span as failed.
|
|
13
|
+
*/
|
|
14
|
+
export declare function traceDurableRun<T extends {
|
|
15
|
+
status: string;
|
|
16
|
+
reason?: string;
|
|
17
|
+
}>(actorId: string, conversationId: number, model: string | undefined, run: () => Promise<T>): Promise<T>;
|
|
10
18
|
//# sourceMappingURL=tracing.d.ts.map
|
package/dist/tracing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAGpE;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAC7B,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACtB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAGpE;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAC7B,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACtB,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACpC,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAE7C,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CA4BZ"}
|
package/dist/tracing.js
CHANGED
|
@@ -24,7 +24,10 @@ export async function traceRun(session, actorId, run) {
|
|
|
24
24
|
const last = session.messages.findLast((message) => message.role === "assistant");
|
|
25
25
|
if (last?.role === "assistant" && last.stopReason === "error") {
|
|
26
26
|
span.setAttribute("error.type", "model_error");
|
|
27
|
-
span.setStatus({
|
|
27
|
+
span.setStatus({
|
|
28
|
+
code: SpanStatusCode.ERROR,
|
|
29
|
+
message: last.errorMessage,
|
|
30
|
+
});
|
|
28
31
|
}
|
|
29
32
|
}
|
|
30
33
|
catch (error) {
|
|
@@ -36,4 +39,36 @@ export async function traceRun(session, actorId, run) {
|
|
|
36
39
|
span.end();
|
|
37
40
|
}
|
|
38
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Runs one `piDurable()` run inside an `invoke_agent pi` span, with the same
|
|
44
|
+
* attributes as `traceRun`. An unanswered submission marks the span as failed.
|
|
45
|
+
*/
|
|
46
|
+
export async function traceDurableRun(actorId, conversationId, model, run) {
|
|
47
|
+
const span = trace.getTracer("@rivet-dev/pi").startSpan("invoke_agent pi", {
|
|
48
|
+
kind: SpanKind.INTERNAL,
|
|
49
|
+
attributes: {
|
|
50
|
+
"gen_ai.operation.name": "invoke_agent",
|
|
51
|
+
"gen_ai.agent.name": "pi",
|
|
52
|
+
"gen_ai.conversation.id": String(conversationId),
|
|
53
|
+
"gen_ai.request.model": model,
|
|
54
|
+
"rivet.actor.id": actorId,
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
try {
|
|
58
|
+
const result = await context.with(trace.setSpan(context.active(), span), run);
|
|
59
|
+
if (result.status === "unanswered") {
|
|
60
|
+
span.setAttribute("error.type", "unanswered");
|
|
61
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: result.reason });
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
span.setAttribute("error.type", "run_error");
|
|
67
|
+
span.setStatus({ code: SpanStatusCode.ERROR });
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
span.end();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
39
74
|
//# sourceMappingURL=tracing.js.map
|
package/dist/tracing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC7B,OAAqB,EACrB,OAAe,EACf,GAAwB;IAExB,IAAI,OAAO,CAAC,WAAW;QAAE,OAAO,GAAG,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,iBAAiB,EAAE;QAC1E,IAAI,EAAE,QAAQ,CAAC,QAAQ;QACvB,UAAU,EAAE;YACX,uBAAuB,EAAE,cAAc;YACvC,mBAAmB,EAAE,IAAI;YACzB,wBAAwB,EAAE,OAAO,CAAC,SAAS;YAC3C,sBAAsB,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE;YACzC,gBAAgB,EAAE,OAAO;SACzB;KACD,CAAC,CAAC;IACH,IAAI,CAAC;QACJ,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rivet-dev/pi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Run the Pi coding agent as a durable Rivet Actor",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/rivet-dev/agents.git",
|
|
9
|
+
"directory": "packages/pi"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://rivet.dev/agents/docs/pi",
|
|
12
|
+
"bugs": "https://github.com/rivet-dev/agents/issues",
|
|
13
|
+
"keywords": [
|
|
14
|
+
"pi",
|
|
15
|
+
"coding-agent",
|
|
16
|
+
"agent",
|
|
17
|
+
"ai",
|
|
18
|
+
"rivet",
|
|
19
|
+
"rivetkit",
|
|
20
|
+
"actors",
|
|
21
|
+
"durable"
|
|
22
|
+
],
|
|
6
23
|
"publishConfig": {
|
|
7
24
|
"access": "public"
|
|
8
25
|
},
|
|
@@ -15,34 +32,48 @@
|
|
|
15
32
|
".": {
|
|
16
33
|
"types": "./dist/index.d.ts",
|
|
17
34
|
"default": "./dist/index.js"
|
|
35
|
+
},
|
|
36
|
+
"./durable": {
|
|
37
|
+
"types": "./dist/durable/index.d.ts",
|
|
38
|
+
"default": "./dist/durable/index.js"
|
|
18
39
|
}
|
|
19
40
|
},
|
|
20
41
|
"main": "./dist/index.js",
|
|
21
42
|
"types": "./dist/index.d.ts",
|
|
22
|
-
"scripts": {
|
|
23
|
-
"build": "tsc -p tsconfig.build.json",
|
|
24
|
-
"check-types": "tsc --noEmit",
|
|
25
|
-
"test": "vitest run"
|
|
26
|
-
},
|
|
27
43
|
"dependencies": {
|
|
28
|
-
"@earendil-works/pi-coding-agent": "1.0.
|
|
44
|
+
"@earendil-works/pi-coding-agent": "1.0.2",
|
|
29
45
|
"@opentelemetry/api": "^1.1.0",
|
|
30
|
-
"@rivet-dev/sandbox-adapter": "0.
|
|
31
|
-
|
|
46
|
+
"@rivet-dev/sandbox-adapter": "0.5.0"
|
|
47
|
+
},
|
|
48
|
+
"peerDependencies": {
|
|
49
|
+
"@earendil-works/chord": "^1.0.2",
|
|
50
|
+
"@earendil-works/pi-durable": "^1.0.2",
|
|
51
|
+
"rivetkit": ">=2.3.23 <2.4.0"
|
|
52
|
+
},
|
|
53
|
+
"peerDependenciesMeta": {
|
|
54
|
+
"@earendil-works/chord": {
|
|
55
|
+
"optional": true
|
|
56
|
+
},
|
|
57
|
+
"@earendil-works/pi-durable": {
|
|
58
|
+
"optional": true
|
|
59
|
+
}
|
|
32
60
|
},
|
|
33
61
|
"devDependencies": {
|
|
34
|
-
"@earendil-works/
|
|
62
|
+
"@earendil-works/chord": "1.0.2",
|
|
63
|
+
"@earendil-works/pi-ai": "1.0.2",
|
|
64
|
+
"@earendil-works/pi-durable": "1.0.2",
|
|
35
65
|
"@opentelemetry/sdk-trace-node": "2.11.0",
|
|
36
66
|
"@types/node": "^24.0.0",
|
|
67
|
+
"rivetkit": "2.3.23",
|
|
37
68
|
"typescript": "^5.9.2",
|
|
38
69
|
"vitest": "^3.2.4"
|
|
39
70
|
},
|
|
40
71
|
"engines": {
|
|
41
72
|
"node": ">=22.19.0"
|
|
42
73
|
},
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
74
|
+
"scripts": {
|
|
75
|
+
"build": "tsc -p tsconfig.build.json",
|
|
76
|
+
"check-types": "tsc --noEmit",
|
|
77
|
+
"test": "vitest run"
|
|
47
78
|
}
|
|
48
|
-
}
|
|
79
|
+
}
|