@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.
Files changed (85) hide show
  1. package/LICENSE +190 -0
  2. package/dist/actions.d.ts +1 -1
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +8 -10
  5. package/dist/actions.js.map +1 -1
  6. package/dist/actor-config.d.ts +33 -0
  7. package/dist/actor-config.d.ts.map +1 -0
  8. package/dist/actor-config.js +87 -0
  9. package/dist/actor-config.js.map +1 -0
  10. package/dist/actor-types.d.ts +34 -0
  11. package/dist/actor-types.d.ts.map +1 -0
  12. package/dist/actor-types.js +2 -0
  13. package/dist/actor-types.js.map +1 -0
  14. package/dist/actor.d.ts +17 -9
  15. package/dist/actor.d.ts.map +1 -1
  16. package/dist/actor.js +33 -68
  17. package/dist/actor.js.map +1 -1
  18. package/dist/credentials.d.ts.map +1 -1
  19. package/dist/credentials.js +2 -1
  20. package/dist/credentials.js.map +1 -1
  21. package/dist/drain.d.ts +12 -0
  22. package/dist/drain.d.ts.map +1 -0
  23. package/dist/drain.js +20 -0
  24. package/dist/drain.js.map +1 -0
  25. package/dist/durable/actions.d.ts +192 -0
  26. package/dist/durable/actions.d.ts.map +1 -0
  27. package/dist/durable/actions.js +289 -0
  28. package/dist/durable/actions.js.map +1 -0
  29. package/dist/durable/actor-sqlite.d.ts +10 -0
  30. package/dist/durable/actor-sqlite.d.ts.map +1 -0
  31. package/dist/durable/actor-sqlite.js +32 -0
  32. package/dist/durable/actor-sqlite.js.map +1 -0
  33. package/dist/durable/actor.d.ts +36 -0
  34. package/dist/durable/actor.d.ts.map +1 -0
  35. package/dist/durable/actor.js +107 -0
  36. package/dist/durable/actor.js.map +1 -0
  37. package/dist/durable/env.d.ts +13 -0
  38. package/dist/durable/env.d.ts.map +1 -0
  39. package/dist/durable/env.js +178 -0
  40. package/dist/durable/env.js.map +1 -0
  41. package/dist/durable/errors.d.ts +8 -0
  42. package/dist/durable/errors.d.ts.map +1 -0
  43. package/dist/durable/errors.js +19 -0
  44. package/dist/durable/errors.js.map +1 -0
  45. package/dist/durable/index.d.ts +5 -0
  46. package/dist/durable/index.d.ts.map +1 -0
  47. package/dist/durable/index.js +2 -0
  48. package/dist/durable/index.js.map +1 -0
  49. package/dist/durable/runtime.d.ts +92 -0
  50. package/dist/durable/runtime.d.ts.map +1 -0
  51. package/dist/durable/runtime.js +435 -0
  52. package/dist/durable/runtime.js.map +1 -0
  53. package/dist/durable/storage.d.ts +31 -0
  54. package/dist/durable/storage.d.ts.map +1 -0
  55. package/dist/durable/storage.js +53 -0
  56. package/dist/durable/storage.js.map +1 -0
  57. package/dist/durable/watches.d.ts +77 -0
  58. package/dist/durable/watches.d.ts.map +1 -0
  59. package/dist/durable/watches.js +245 -0
  60. package/dist/durable/watches.js.map +1 -0
  61. package/dist/index.d.ts +1 -1
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +1 -1
  64. package/dist/index.js.map +1 -1
  65. package/dist/models.d.ts +5 -0
  66. package/dist/models.d.ts.map +1 -1
  67. package/dist/models.js +13 -6
  68. package/dist/models.js.map +1 -1
  69. package/dist/runtime.d.ts +71 -6
  70. package/dist/runtime.d.ts.map +1 -1
  71. package/dist/runtime.js +276 -45
  72. package/dist/runtime.js.map +1 -1
  73. package/dist/sandbox.d.ts +9 -3
  74. package/dist/sandbox.d.ts.map +1 -1
  75. package/dist/sandbox.js +64 -25
  76. package/dist/sandbox.js.map +1 -1
  77. package/dist/storage.d.ts +18 -1
  78. package/dist/storage.d.ts.map +1 -1
  79. package/dist/storage.js +49 -0
  80. package/dist/storage.js.map +1 -1
  81. package/dist/tracing.d.ts +8 -0
  82. package/dist/tracing.d.ts.map +1 -1
  83. package/dist/tracing.js +36 -1
  84. package/dist/tracing.js.map +1 -1
  85. 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(sandbox) {
13
- const root = normalizeRoot(sandbox.cwd);
14
- const resolvePath = (path) => resolveSandboxPath(root, path);
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 resolved = resolvePath(path);
17
- if (!(await sandbox.exists(resolved))) {
18
- throw new Error(`Path not found: ${resolved}`);
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) => Buffer.from(await sandbox.readFile(resolvePath(path)));
22
- const writeFile = (path, content) => sandbox.writeFile(resolvePath(path), content);
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) => sandbox.mkdir(resolvePath(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(sandbox),
56
+ operations: createSandboxBashOperations(root, connect),
41
57
  });
42
58
  const ls = createLsToolDefinition(root, {
43
59
  operations: {
44
- exists: (path) => sandbox.exists(resolvePath(path)),
45
- readdir: (path) => sandbox.readdir(resolvePath(path)),
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 stat = await sandbox.stat(resolvePath(path));
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) => sandbox.exists(resolvePath(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 searchRoot = resolvePath(searchDirectory);
57
- const result = await sandbox.exec(`find . -type f ${IGNORED_DIRECTORIES.map((directory) => `-not -path ${shellQuote(`*/${directory}/*`)}`).join(" ")}`, { cwd: searchRoot });
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 = resolvePath(params.path ?? ".");
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 result = await sandbox.exec(`grep ${args.map(shellQuote).join(" ")}`, {
90
- cwd: root,
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).subarray(0, MAX_GREP_OUTPUT_BYTES).toString();
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(sandbox) {
128
- const root = normalizeRoot(sandbox.cwd);
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: resolveSandboxPath(root, requestedCwd),
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
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
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;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CACjC,WAAmB,EACnB,OAA+B;IAE/B,MAAM,IAAI,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,MAAM,OAAO,EAAE,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;IAClE,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,mBAAmB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;IACF,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAAE,OAAe,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,EAAE;QAC3C,UAAU,EAAE;YACX,MAAM;YACN,QAAQ;YACR,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;SACxD;KACD,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,EAAE;QAC7C,UAAU,EAAE;YACX,SAAS;YACT,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACrB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;SACD;KACD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,EAAE;QAC3C,UAAU,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE;KAC3C,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,EAAE;QAC3C,UAAU,EAAE,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC;KACtD,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,sBAAsB,CAAC,IAAI,EAAE;QACvC,UAAU,EAAE;YACX,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACtB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrC,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACpB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpD,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAChD,CAAC;SACD;KACD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,EAAE;QAC3C,UAAU,EAAE;YACX,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACtB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE;gBACjD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;gBAChD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CACvC,kBAAkB,mBAAmB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,cAAc,UAAU,CAAC,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EACpH,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,CACpB,CAAC;gBACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CACd,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,oBAAoB,MAAM,CAAC,QAAQ,EAAE,CAC7D,CAAC;gBACH,CAAC;gBACD,OAAO,MAAM,CAAC,MAAM;qBAClB,KAAK,CAAC,IAAI,CAAC;qBACX,GAAG,CAAC,aAAa,CAAC;qBAClB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;qBACnE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;YACvD,CAAC;SACD;KACD,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG;QACZ,GAAG,QAAQ;QACX,OAAO,EAAE,KAAK,EACb,WAAmB,EACnB,MAAqB,EACrB,MAA+B,EAC9B,EAAE;YACH,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;YAChE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACrB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,EAChC,gBAAgB,CAChB,CAAC;YACF,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,UAAU;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACvD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACrD,CAAC;YACD,KAAK,MAAM,SAAS,IAAI,mBAAmB,EAAE,CAAC;gBAC7C,IAAI,CAAC,IAAI,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,IAAI,CACR,IAAI,EACJ,MAAM,CAAC,OAAO,EACd,IAAI,EACJ,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,CACvC,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EACxC;gBACC,GAAG,EAAE,MAAM,CAAC,IAAI;gBAChB,MAAM;aACN,CACD,CAAC;YACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CACd,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,oBAAoB,MAAM,CAAC,QAAQ,EAAE,CAC7D,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACzC,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,qBAAqB,EAAE,CAAC;gBACvD,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;qBAC1B,QAAQ,CAAC,CAAC,EAAE,qBAAqB,CAAC;qBAClC,QAAQ,EAAE,CAAC;gBACb,cAAc,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,MAAM,OAAO,GAAoB,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM;gBAAE,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC;YACxE,IAAI,cAAc;gBAAE,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;YAClD,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,kBAAkB,EAAE,CAAC;gBAC/D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;aAC9D,CAAC;QACH,CAAC;KACmE,CAAC;IAEtE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B,CAC1C,WAAmB,EACnB,OAA+B;IAE/B,MAAM,IAAI,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO;QACN,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO;YACxC,MAAM,OAAO,GAAG,MAAM,OAAO,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;gBAC1C,GAAG,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC;gBACnD,SAAS,EACR,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI;gBACnE,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACrD,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,WAAW,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,CAAC;KACD,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,IAAY;IAC5D,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,cAAc,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,GAAG,CAAC;IACnE,IAAI,QAAQ,KAAK,cAAc,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,IAAY,EAAE,UAAkB,EAAE,IAAY;IACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAC9B,aAAa,CAAC,IAAI,CAAC,EACnB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAC9B,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IAClC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACd,wDAAwD,IAAI,EAAE,CAC9D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,yFAAyF;AACzF,SAAS,eAAe,CAAC,YAAoB,EAAE,OAAe;IAC7D,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CACN,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC;YACxC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,OAAO,EAAE,CAAC,CAChD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACpD,OAAO;QACN,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,YAAY;KACrB,CAAC,SAAS,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACvC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAC9C,CAAC"}
package/dist/storage.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { FileEntry, SessionEntry, SessionHeader, SettingsManager } from "@earendil-works/pi-coding-agent";
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
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,YAAY,EACZ,aAAa,EACb,eAAe,EACf,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,iFAiC1B,CAAC;AAEH,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,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,EAAE,CAElE"}
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
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
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
@@ -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,CA0Bf"}
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({ code: SpanStatusCode.ERROR, message: last.errorMessage });
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
@@ -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,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAClF,IAAI,IAAI,EAAE,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;YAC/D,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC5E,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/C,MAAM,KAAK,CAAC;IACb,CAAC;YAAS,CAAC;QACV,IAAI,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC;AACF,CAAC"}
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.1.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.0",
44
+ "@earendil-works/pi-coding-agent": "1.0.2",
29
45
  "@opentelemetry/api": "^1.1.0",
30
- "@rivet-dev/sandbox-adapter": "0.1.0",
31
- "rivetkit": "^2.3.22"
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/pi-ai": "1.0.0",
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
- "repository": {
44
- "type": "git",
45
- "url": "https://github.com/rivet-dev/rivet.git",
46
- "directory": "integrations/pi"
74
+ "scripts": {
75
+ "build": "tsc -p tsconfig.build.json",
76
+ "check-types": "tsc --noEmit",
77
+ "test": "vitest run"
47
78
  }
48
- }
79
+ }