@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
@@ -0,0 +1,245 @@
1
+ import { BACKGROUND_CONTEXT } from "@earendil-works/chord/context";
2
+ import { watchEvents, } from "@earendil-works/pi-durable";
3
+ import { deleteConnectionWatches, deleteWatch, loadWatches, saveWatch, } from "./storage.js";
4
+ export function createConnectionWatches() {
5
+ return { byConnection: new Map(), queue: Promise.resolve() };
6
+ }
7
+ function serially(watches, change) {
8
+ const run = watches.queue.then(change);
9
+ watches.queue = run.catch(() => { });
10
+ return run;
11
+ }
12
+ function watchKey(spec) {
13
+ switch (spec.kind) {
14
+ case "events":
15
+ case "view":
16
+ return `${spec.kind}:${spec.conversationId}`;
17
+ case "taskGraph":
18
+ return spec.kind;
19
+ case "doc":
20
+ return `doc:${spec.conversationId}:${spec.docKind}`;
21
+ }
22
+ }
23
+ /**
24
+ * Starts a watch for a connection, stored so it comes back after sleep, and
25
+ * returns the value it starts from. Watching the same thing again restarts
26
+ * it with a fresh value. `requireTarget` runs in the queue too, so a watch
27
+ * and an unwatch sent right after it take effect in the order they arrive.
28
+ */
29
+ export async function watch(actor, watches, harness, documents, connId, spec, requireTarget) {
30
+ const key = watchKey(spec);
31
+ return serially(watches, async () => {
32
+ await requireTarget();
33
+ await saveWatch(actor.db, { connId, key, spec });
34
+ return attach(actor, watches, harness, documents, connId, key, spec, false);
35
+ });
36
+ }
37
+ export async function unwatch(actor, watches, connId, spec) {
38
+ const key = watchKey(spec);
39
+ await serially(watches, async () => {
40
+ const active = watches.byConnection.get(connId)?.get(key);
41
+ watches.byConnection.get(connId)?.delete(key);
42
+ await active?.stop();
43
+ await deleteWatch(actor.db, connId, key);
44
+ });
45
+ }
46
+ /** Ends every watch of a connection that left. */
47
+ export async function unwatchConnection(actor, watches, connId) {
48
+ await serially(watches, async () => {
49
+ const active = [...(watches.byConnection.get(connId)?.values() ?? [])];
50
+ watches.byConnection.delete(connId);
51
+ await Promise.all(active.map((watch) => watch.stop()));
52
+ await deleteConnectionWatches(actor.db, connId);
53
+ });
54
+ }
55
+ /** Ends every watch of this generation, without forgetting them. Called when the harness closes. */
56
+ export async function stopAllWatches(watches) {
57
+ await serially(watches, async () => {
58
+ const active = [...watches.byConnection.values()].flatMap((byKey) => [
59
+ ...byKey.values(),
60
+ ]);
61
+ watches.byConnection.clear();
62
+ await Promise.all(active.map((watch) => watch.stop()));
63
+ });
64
+ }
65
+ /**
66
+ * Restarts the stored watches of connections that are still open, after wake
67
+ * or a reopen. Each sends its whole value as a `seq` 0 frame. Watches of
68
+ * connections that are gone are forgotten.
69
+ */
70
+ export async function reattachWatches(actor, watches, harness, documents) {
71
+ await serially(watches, async () => {
72
+ const open = new Set(actor.conns.keys());
73
+ for (const stored of await loadWatches(actor.db)) {
74
+ if (!open.has(stored.connId)) {
75
+ await deleteWatch(actor.db, stored.connId, stored.key);
76
+ continue;
77
+ }
78
+ try {
79
+ await attach(actor, watches, harness, documents, stored.connId, stored.key, stored.spec, true);
80
+ }
81
+ catch (error) {
82
+ actor.log.warn({
83
+ msg: "pi durable could not reattach a watch after wake",
84
+ connId: stored.connId,
85
+ watch: stored.key,
86
+ error,
87
+ });
88
+ }
89
+ }
90
+ });
91
+ }
92
+ async function attach(actor, watches, harness, documents, connId, key, spec, resend) {
93
+ const byKey = watches.byConnection.get(connId) ?? new Map();
94
+ watches.byConnection.set(connId, byKey);
95
+ await byKey.get(key)?.stop();
96
+ let seq = 0;
97
+ let active;
98
+ const send = (name, frame) => {
99
+ const conn = actor.conns.get(connId);
100
+ if (!conn) {
101
+ void active?.stop();
102
+ return;
103
+ }
104
+ conn.send(name, { ...frame, seq: seq++ });
105
+ };
106
+ const started = await start(actor.log, harness, documents, spec, send, resend);
107
+ active = started;
108
+ byKey.set(key, started);
109
+ if (!resend)
110
+ seq = 1;
111
+ return started.initial;
112
+ }
113
+ /** Starts the Pi watch. With `resend`, the initial value goes out as the first frame. */
114
+ async function start(log, harness, documents, spec, send, resend) {
115
+ const context = BACKGROUND_CONTEXT;
116
+ switch (spec.kind) {
117
+ case "events": {
118
+ const conversationId = spec.conversationId;
119
+ const stream = await watchEvents(harness, conversationId, context);
120
+ if (resend)
121
+ send("pi.events", {
122
+ conversationId,
123
+ events: [stream.snapshot],
124
+ });
125
+ stream.start(async (events) => send("pi.events", { conversationId, events }));
126
+ return {
127
+ initial: { snapshot: stream.snapshot },
128
+ stop: async () => void (await stream.stop()),
129
+ };
130
+ }
131
+ case "view": {
132
+ const conversationId = spec.conversationId;
133
+ const conversation = await harness.conversation(conversationId, context);
134
+ if (!conversation)
135
+ throw new Error(`conversation ${conversationId} does not exist`);
136
+ const view = await conversation.watch(context);
137
+ if (resend)
138
+ send("pi.view", { conversationId, value: view.value });
139
+ view.start(async (_value, ops) => send("pi.view", { conversationId, ops }));
140
+ return {
141
+ initial: { value: view.value },
142
+ stop: async () => void (await view.stop()),
143
+ };
144
+ }
145
+ case "taskGraph": {
146
+ const graph = await harness.watchTaskGraph(context);
147
+ if (resend)
148
+ send("pi.taskGraph", { value: graph.value });
149
+ graph.start(async (_value, ops) => send("pi.taskGraph", { ops }));
150
+ return {
151
+ initial: { value: graph.value },
152
+ stop: async () => void (await graph.stop()),
153
+ };
154
+ }
155
+ case "doc":
156
+ return startDoc(log, harness, documents, spec, send, resend);
157
+ }
158
+ }
159
+ /**
160
+ * Pi's `watchDoc` never creates a document, and its watch ends when the
161
+ * document is retired. While the document does not exist, the watch attaches
162
+ * when a commit creates it, and its value is the next frame.
163
+ */
164
+ async function startDoc(log, harness, documents, spec, send, resend) {
165
+ const token = documents.get(spec.docKind);
166
+ if (!token)
167
+ throw new Error(`document ${spec.docKind} is not listed in piDurable({ documents })`);
168
+ const { docKind: kind, conversationId } = spec;
169
+ const conversation = conversationId;
170
+ let docWatch;
171
+ let unsubscribe;
172
+ let stopped = false;
173
+ const follow = (handle, sendFirst) => {
174
+ docWatch = handle;
175
+ if (sendFirst)
176
+ send("pi.doc", { kind, conversationId, value: handle.value });
177
+ handle.start(async (value) => {
178
+ send("pi.doc", { kind, conversationId, value });
179
+ if (value !== null || stopped)
180
+ return;
181
+ // A retired document's watch ends, so wait for a commit that creates it again.
182
+ docWatch = undefined;
183
+ void handle.stop();
184
+ awaitCreation();
185
+ });
186
+ };
187
+ const awaitCreation = () => {
188
+ let attaching = false;
189
+ const attachCreated = async () => {
190
+ try {
191
+ const handle = await harness.watchDoc(token, conversation, BACKGROUND_CONTEXT);
192
+ if (stopped) {
193
+ await handle?.stop();
194
+ return;
195
+ }
196
+ if (!handle) {
197
+ attaching = false;
198
+ return;
199
+ }
200
+ unsubscribe?.();
201
+ unsubscribe = undefined;
202
+ follow(handle, true);
203
+ }
204
+ catch (error) {
205
+ // The next write to the document tries again.
206
+ attaching = false;
207
+ log.warn({
208
+ msg: "pi durable could not attach a document watch",
209
+ kind,
210
+ conversationId,
211
+ error,
212
+ });
213
+ }
214
+ };
215
+ unsubscribe = harness.subscribeCommits((publication) => {
216
+ const created = publication.changes.some((change) => change.type === "document" &&
217
+ change.record.kind === kind &&
218
+ change.conversationId === conversation &&
219
+ change.value !== null);
220
+ if (!created || attaching)
221
+ return;
222
+ attaching = true;
223
+ // Commit listeners must not call Pi Durable, so the watch attaches after the listener returns.
224
+ queueMicrotask(() => void attachCreated());
225
+ });
226
+ };
227
+ const existing = await harness.watchDoc(token, conversation, BACKGROUND_CONTEXT);
228
+ if (existing) {
229
+ follow(existing, resend);
230
+ }
231
+ else {
232
+ if (resend)
233
+ send("pi.doc", { kind, conversationId, value: null });
234
+ awaitCreation();
235
+ }
236
+ return {
237
+ initial: { value: existing?.value },
238
+ stop: async () => {
239
+ stopped = true;
240
+ unsubscribe?.();
241
+ await docWatch?.stop();
242
+ },
243
+ };
244
+ }
245
+ //# sourceMappingURL=watches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watches.js","sourceRoot":"","sources":["../../src/durable/watches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAUN,WAAW,GACX,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACN,uBAAuB,EACvB,WAAW,EACX,WAAW,EACX,SAAS,GAET,MAAM,cAAc,CAAC;AAuDtB,MAAM,UAAU,uBAAuB;IACtC,OAAO,EAAE,YAAY,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;AAC9D,CAAC;AAED,SAAS,QAAQ,CAChB,OAA0B,EAC1B,MAAwB;IAExB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACZ,CAAC;AAID,SAAS,QAAQ,CAAC,IAAe;IAChC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACV,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QAC9C,KAAK,WAAW;YACf,OAAO,IAAI,CAAC,IAAI,CAAC;QAClB,KAAK,KAAK;YACT,OAAO,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAC1B,KAAgB,EAChB,OAA0B,EAC1B,OAAgB,EAChB,SAAoB,EACpB,MAAc,EACd,IAAe,EACf,aAAkC;IAElC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,aAAa,EAAE,CAAC;QACtB,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC5B,KAAgB,EAChB,OAA0B,EAC1B,MAAc,EACd,IAAe;IAEf,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1D,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC;QACrB,MAAM,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,kDAAkD;AAClD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,KAAgB,EAChB,OAA0B,EAC1B,MAAc;IAEd,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACvD,MAAM,uBAAuB,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,OAA0B;IAE1B,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YACpE,GAAG,KAAK,CAAC,MAAM,EAAE;SACjB,CAAC,CAAC;QACH,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACpC,KAAgB,EAChB,OAA0B,EAC1B,OAAgB,EAChB,SAAoB;IAEpB,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC,KAAK,MAAM,MAAM,IAAI,MAAM,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9B,MAAM,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;gBACvD,SAAS;YACV,CAAC;YACD,IAAI,CAAC;gBACJ,MAAM,MAAM,CACX,KAAK,EACL,OAAO,EACP,OAAO,EACP,SAAS,EACT,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,IAAI,EACX,IAAI,CACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;oBACd,GAAG,EAAE,kDAAkD;oBACvD,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,KAAK,EAAE,MAAM,CAAC,GAAG;oBACjB,KAAK;iBACL,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,MAAM,CACpB,KAAgB,EAChB,OAA0B,EAC1B,OAAgB,EAChB,SAAoB,EACpB,MAAc,EACd,GAAW,EACX,IAAe,EACf,MAAe;IAEf,MAAM,KAAK,GACV,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAuB,CAAC;IACpE,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACxC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IAE7B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,MAA+B,CAAC;IACpC,MAAM,IAAI,GAAG,CACZ,IAAO,EACP,KAAoC,EACnC,EAAE;QACH,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,KAAK,CAC1B,KAAK,CAAC,GAAG,EACT,OAAO,EACP,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,MAAM,CACN,CAAC;IACF,MAAM,GAAG,OAAO,CAAC;IACjB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM;QAAE,GAAG,GAAG,CAAC,CAAC;IACrB,OAAO,OAAO,CAAC,OAAO,CAAC;AACxB,CAAC;AAOD,yFAAyF;AACzF,KAAK,UAAU,KAAK,CACnB,GAAqB,EACrB,OAAgB,EAChB,SAAoB,EACpB,IAAe,EACf,IAAU,EACV,MAAe;IAEf,MAAM,OAAO,GAAG,kBAAkB,CAAC;IACnC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,WAAW,CAC/B,OAAO,EACP,cAAgC,EAChC,OAAO,CACP,CAAC;YACF,IAAI,MAAM;gBACT,IAAI,CAAC,WAAW,EAAE;oBACjB,cAAc;oBACd,MAAM,EAAE,CAAC,MAAM,CAAC,QAAgC,CAAC;iBACjD,CAAC,CAAC;YACJ,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAC7B,IAAI,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAC7C,CAAC;YACF,OAAO;gBACN,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;gBACtC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;aAC5C,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YAC3C,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,YAAY,CAC9C,cAAgC,EAChC,OAAO,CACP,CAAC;YACF,IAAI,CAAC,YAAY;gBAChB,MAAM,IAAI,KAAK,CAAC,gBAAgB,cAAc,iBAAiB,CAAC,CAAC;YAClE,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,MAAM;gBAAE,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAChC,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CACxC,CAAC;YACF,OAAO;gBACN,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;gBAC9B,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1C,CAAC;QACH,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YAClB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,MAAM;gBAAE,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACzD,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAClE,OAAO;gBACN,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;gBAC/B,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;aAC3C,CAAC;QACH,CAAC;QACD,KAAK,KAAK;YACT,OAAO,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,QAAQ,CACtB,GAAqB,EACrB,OAAgB,EAChB,SAAoB,EACpB,IAAyC,EACzC,IAAU,EACV,MAAe;IAEf,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK;QACT,MAAM,IAAI,KAAK,CACd,YAAY,IAAI,CAAC,OAAO,4CAA4C,CACpE,CAAC;IACH,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAC/C,MAAM,YAAY,GAAG,cAAgC,CAAC;IACtD,IAAI,QAA8D,CAAC;IACnE,IAAI,WAAqC,CAAC;IAC1C,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,MAAM,GAAG,CACd,MAAgD,EAChD,SAAkB,EACjB,EAAE;QACH,QAAQ,GAAG,MAAM,CAAC;QAClB,IAAI,SAAS;YACZ,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5B,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;YAChD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO;gBAAE,OAAO;YACtC,+EAA+E;YAC/E,QAAQ,GAAG,SAAS,CAAC;YACrB,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;YACnB,aAAa,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QAC1B,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CACpC,KAAK,EACL,YAAY,EACZ,kBAAkB,CAClB,CAAC;gBACF,IAAI,OAAO,EAAE,CAAC;oBACb,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC;oBACrB,OAAO;gBACR,CAAC;gBACD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACb,SAAS,GAAG,KAAK,CAAC;oBAClB,OAAO;gBACR,CAAC;gBACD,WAAW,EAAE,EAAE,CAAC;gBAChB,WAAW,GAAG,SAAS,CAAC;gBACxB,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,8CAA8C;gBAC9C,SAAS,GAAG,KAAK,CAAC;gBAClB,GAAG,CAAC,IAAI,CAAC;oBACR,GAAG,EAAE,8CAA8C;oBACnD,IAAI;oBACJ,cAAc;oBACd,KAAK;iBACL,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC;QACF,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,EAAE;YACtD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CACvC,CAAC,MAAM,EAAE,EAAE,CACV,MAAM,CAAC,IAAI,KAAK,UAAU;gBAC1B,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI;gBAC3B,MAAM,CAAC,cAAc,KAAK,YAAY;gBACtC,MAAM,CAAC,KAAK,KAAK,IAAI,CACtB,CAAC;YACF,IAAI,CAAC,OAAO,IAAI,SAAS;gBAAE,OAAO;YAClC,SAAS,GAAG,IAAI,CAAC;YACjB,+FAA+F;YAC/F,cAAc,CAAC,GAAG,EAAE,CAAC,KAAK,aAAa,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,CACtC,KAAK,EACL,YAAY,EACZ,kBAAkB,CAClB,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACP,IAAI,MAAM;YAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,aAAa,EAAE,CAAC;IACjB,CAAC;IACD,OAAO;QACN,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;QACnC,IAAI,EAAE,KAAK,IAAI,EAAE;YAChB,OAAO,GAAG,IAAI,CAAC;YACf,WAAW,EAAE,EAAE,CAAC;YAChB,MAAM,QAAQ,EAAE,IAAI,EAAE,CAAC;QACxB,CAAC;KACD,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export type { PiActions, PiBashResult, PiPromptOptions, PiSessionInfo, } from "./actions.js";
2
- export { pi, type PiActorConfigInput, type PiEvents } from "./actor.js";
2
+ export { type PiAccess, type PiActorConfigInput, type PiEvents, type PiUserActions, pi, } from "./actor.js";
3
3
  export type { PiCredentialInfo, PiCredentialSource, PiProviderCredential, } from "./credentials.js";
4
4
  export type { PiModelInfo, PiModelOptions, PiProviderConfig, } from "./models.js";
5
5
  export type { PiSessionOptions } from "./runtime.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,SAAS,EACT,YAAY,EACZ,eAAe,EACf,aAAa,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,EAAE,EAAE,KAAK,kBAAkB,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AACxE,YAAY,EACX,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACX,WAAW,EACX,cAAc,EACd,gBAAgB,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,SAAS,EACT,YAAY,EACZ,eAAe,EACf,aAAa,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,EAAE,GACF,MAAM,YAAY,CAAC;AACpB,YAAY,EACX,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACX,WAAW,EACX,cAAc,EACd,gBAAgB,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { pi } from "./actor.js";
1
+ export { pi, } from "./actor.js";
2
2
  //# 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":"AAMA,OAAO,EAAE,EAAE,EAA0C,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAKN,EAAE,GACF,MAAM,YAAY,CAAC"}
package/dist/models.d.ts CHANGED
@@ -52,6 +52,11 @@ type AllowlistOptions = Pick<PiModelOptions, "model" | "scopedModels">;
52
52
  export declare function createActorModelRuntime(options: Omit<PiModelOptions, "credentials">, credentials: PiCredentialStore): Promise<ModelRuntime>;
53
53
  /** A credential store that holds nothing and refuses writes. */
54
54
  export declare const emptyCredentialStore: PiCredentialStore;
55
+ /**
56
+ * Throws unless a client may switch to `provider/modelId`. With neither
57
+ * `model` nor `scopedModels` set, a client may not choose any model.
58
+ */
59
+ export declare function assertModelAllowed(options: AllowlistOptions, provider: string, modelId: string): void;
55
60
  /**
56
61
  * The model a session opens with: the model saved in the session when it is
57
62
  * still allowed, otherwise the configured default. Undefined lets Pi choose,
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,yBAAyB,EAC9B,YAAY,EACZ,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,qGAAqG;AACrG,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC,CAAC;AAEtF,0EAA0E;AAC1E,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvF,wFAAwF;AACxF,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/E,iCAAiC;AACjC,MAAM,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAExE,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC9B,+FAA+F;IAC/F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,kBAAkB,CAAC;CACnD;AAED,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,mEAAmE;AACnE,KAAK,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC;AAEvE;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC5C,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,EAC5C,WAAW,EAAE,iBAAiB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAUvB;AAED,gEAAgE;AAChE,eAAO,MAAM,oBAAoB,EAAE,iBAalC,CAAC;AAqBF;;;;GAIG;AACH,wBAAgB,YAAY,CAC3B,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACjD,OAAO,GAAG,SAAS,CAOrB;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAC9B,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,YAAY,GACnB,WAAW,EAAE,CAaf;AAED,yGAAyG;AACzG,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAW7D;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAChC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAef"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
package/dist/models.js CHANGED
@@ -36,10 +36,21 @@ function allowedModels(options) {
36
36
  function isAllowed(options, provider, modelId) {
37
37
  return allowedModels(options).includes(`${provider}/${modelId}`);
38
38
  }
39
+ /**
40
+ * Throws unless a client may switch to `provider/modelId`. With neither
41
+ * `model` nor `scopedModels` set, a client may not choose any model.
42
+ */
43
+ export function assertModelAllowed(options, provider, modelId) {
44
+ if (!isAllowed(options, provider, modelId)) {
45
+ throw new UserError(`Model ${provider}/${modelId} is not allowed for this agent.`, { code: "model_not_allowed" });
46
+ }
47
+ }
39
48
  /** Looks up a `provider/modelId` in the actor's catalog. */
40
49
  function catalogModel(runtime, name) {
41
50
  const slash = name.indexOf("/");
42
- const model = slash > 0 ? runtime.getModel(name.slice(0, slash), name.slice(slash + 1)) : undefined;
51
+ const model = slash > 0
52
+ ? runtime.getModel(name.slice(0, slash), name.slice(slash + 1))
53
+ : undefined;
43
54
  if (!model) {
44
55
  throw new Error(`pi() model ${name} is not in Pi's model catalog; add it with providers`);
45
56
  }
@@ -93,11 +104,7 @@ export function requireCredential(session) {
93
104
  * runtime's catalog, so a client can never choose the URL a key is sent to.
94
105
  */
95
106
  export async function switchModel(options, session, provider, modelId) {
96
- if (!isAllowed(options, provider, modelId)) {
97
- throw new UserError(`Model ${provider}/${modelId} is not allowed for this agent.`, {
98
- code: "model_not_allowed",
99
- });
100
- }
107
+ assertModelAllowed(options, provider, modelId);
101
108
  const model = session.modelRuntime
102
109
  .getAvailableSnapshot()
103
110
  .find((candidate) => candidate.provider === provider && candidate.id === modelId);
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
package/dist/runtime.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { type AgentSession, type BashOperations, type CreateAgentSessionOptions, SettingsManager } from "@earendil-works/pi-coding-agent";
2
2
  import type { Sandbox, SandboxProvider } from "@rivet-dev/sandbox-adapter";
3
- import type { ActorContext } from "rivetkit";
3
+ import { type ActorContext } from "rivetkit";
4
4
  import type { DatabaseProvider, RawAccess } from "rivetkit/db";
5
5
  import { SourceCredentialStore } from "./credentials.js";
6
6
  import { type PiModelOptions } from "./models.js";
@@ -8,6 +8,13 @@ import { type PiSettings } from "./storage.js";
8
8
  export type PiDatabaseProvider = DatabaseProvider<RawAccess>;
9
9
  /** The actor context shape every Pi helper works against. */
10
10
  export type PiContext = ActorContext<any, any, any, any, any, PiDatabaseProvider, any, any>;
11
+ /** How an actor generation stops. A sleep drains until `drainUntil`; a destroy stops at once. */
12
+ export type PiStop = {
13
+ reason: "sleep";
14
+ drainUntil: number;
15
+ } | {
16
+ reason: "destroy";
17
+ };
11
18
  /** Pi options accepted by `pi()` on top of ordinary actor config. */
12
19
  export interface PiSessionOptions extends Omit<CreateAgentSessionOptions, "sessionManager" | "settingsManager" | "modelRuntime" | "model" | "scopedModels">, PiModelOptions {
13
20
  /** Initial Pi settings for a brand-new session. Later changes persist per actor. */
@@ -23,7 +30,7 @@ export interface PiSession {
23
30
  session: AgentSession;
24
31
  settingsManager: SettingsManager;
25
32
  cwd: string;
26
- sandbox: ConnectedSandbox | undefined;
33
+ sandbox: LazySandbox | undefined;
27
34
  /** Command execution for `executeBash`. Undefined when there is no sandbox. */
28
35
  bashOperations: BashOperations | undefined;
29
36
  /** JSON of the settings last written to SQLite, to skip no-op writes. */
@@ -39,26 +46,84 @@ export interface ConnectedSandbox {
39
46
  id: string;
40
47
  sandbox: Sandbox;
41
48
  }
49
+ /**
50
+ * The actor's sandbox, connected on first use in this generation. Opening a
51
+ * session never needs it, so actions that touch no files cost no connect.
52
+ */
53
+ interface LazySandbox {
54
+ connect(): Promise<ConnectedSandbox>;
55
+ /** The connection of this generation, if one was made. */
56
+ current: Promise<ConnectedSandbox> | undefined;
57
+ }
42
58
  /** Per-actor-generation runtime state, stored on `c.vars` under `PI_RUNTIME`. */
43
59
  export interface PiRuntime {
44
60
  ready?: Promise<PiSession>;
45
61
  /** Serializes SQLite entry writes so entries keep their append order. Never rejects. */
46
62
  writes: Promise<void>;
63
+ /** Set once the session closes for sleep or destroy. It never reopens in this generation. */
64
+ closing: boolean;
47
65
  }
48
66
  export declare const PI_RUNTIME: unique symbol;
49
67
  export declare function createPiRuntime(): PiRuntime;
50
68
  export declare function piRuntime(c: PiContext): PiRuntime;
51
69
  /** Returns the actor's Pi session, opening it from SQLite on first use. */
52
70
  export declare function ensurePiSession(c: PiContext, options: PiSessionOptions): Promise<PiSession>;
71
+ /**
72
+ * Runs the app's own action or hook with `c.pi` set to the session, then
73
+ * saves what it changed, such as the model, as the built-in actions do. Code
74
+ * that never reads `c.pi` runs even when the session cannot open; reading
75
+ * `c.pi` throws the open error. Shutdown hooks pass `opensSession: false`, so
76
+ * they use a session that is already open and never create a session or a
77
+ * sandbox only to close it.
78
+ */
79
+ export declare function withPiSession<T>(c: PiContext, options: PiSessionOptions, body: () => T | Promise<T>, { opensSession }?: {
80
+ opensSession?: boolean;
81
+ }): Promise<T>;
82
+ /** Runs `body` with a `c.pi` that throws `error` when read. */
83
+ export declare function withUnavailablePi<T>(c: PiContext, error: unknown, body: () => T | Promise<T>): T | Promise<T>;
84
+ /**
85
+ * Connects to the actor's sandbox, creating one when none is stored or the
86
+ * provider reports the stored one no longer exists. A new sandbox id is saved
87
+ * as soon as `create` returns, so a failure later in the start reuses it. Any
88
+ * other connect failure is thrown, so a temporary outage never replaces a
89
+ * sandbox. `pi()` and `piDurable()` both store the id in `pi_sandbox`.
90
+ */
91
+ export declare function connectSandbox(c: PiContext, provider: SandboxProvider): Promise<ConnectedSandbox>;
92
+ /**
93
+ * Continues the run that was active when the actor stopped, when Pi's own
94
+ * `Agent.continue()` accepts the transcript: its last message is a user or a
95
+ * tool result message. Otherwise the chat stays as Pi left it, as after an
96
+ * abort. The run continues in the background and keeps the actor awake.
97
+ */
98
+ export declare function resumeInterruptedRun(c: PiContext, options: PiSessionOptions): Promise<void>;
53
99
  /**
54
100
  * Queues entries appended since the last flush and writes Pi's mutable settings
55
101
  * when they changed. Called after every action and on shutdown.
56
102
  */
57
103
  export declare function persistPiState(c: PiContext, handle: PiSession): Promise<void>;
58
104
  /**
59
- * Stops the Pi session for this actor generation: aborts any run, lets
60
- * extensions shut down, and flushes settings and entries. Then suspends the
61
- * sandbox on sleep, or destroys it on destroy.
105
+ * Aborts the run in memory when RivetKit declares this actor generation lost.
106
+ * The engine may already run the next generation, which resumes the run, so
107
+ * the lost one must stop calling the model and running tools. A lost
108
+ * generation skips `onSleep`, and its storage rejects writes, so nothing is
109
+ * stored here. A normal stop fires the same signal and drains in `onSleep`.
110
+ * Takes the wake context, whose signal is the actor's, not one action's.
111
+ */
112
+ export declare function stopRunWhenLost(c: PiContext): void;
113
+ /**
114
+ * Stops the Pi session for this actor generation. On sleep it first waits,
115
+ * until `drainUntil`, for a run to finish. A run still active then is not
116
+ * aborted: the transcript ends at the last message Pi stored, and the next
117
+ * wake resumes it. On destroy it aborts the run at once, since nothing would
118
+ * resume it. Then lets extensions shut down, flushes settings and entries,
119
+ * and suspends the sandbox on sleep, or destroys it on destroy.
120
+ */
121
+ export declare function closePiSession(c: PiContext, options: PiSessionOptions, stop: PiStop): Promise<void>;
122
+ /**
123
+ * Suspends the sandbox this generation connected when the actor sleeps. On
124
+ * destroy it destroys the actor's sandbox, also one stored by an earlier
125
+ * generation that this one never connected.
62
126
  */
63
- export declare function closePiSession(c: PiContext, options: PiSessionOptions, reason: "sleep" | "destroy"): Promise<void>;
127
+ export declare function closeSandbox(c: PiContext, provider: SandboxProvider, connection: Promise<ConnectedSandbox> | undefined, stop: PiStop): Promise<void>;
128
+ export {};
64
129
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,YAAY,EAEjB,KAAK,cAAc,EAEnB,KAAK,yBAAyB,EAI9B,eAAe,EACf,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAIN,KAAK,cAAc,EACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAKN,KAAK,UAAU,EAKf,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAE7D,6DAA6D;AAC7D,MAAM,MAAM,SAAS,GAAG,YAAY,CACnC,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,kBAAkB,EAClB,GAAG,EACH,GAAG,CACH,CAAC;AAEF,qEAAqE;AACrE,MAAM,WAAW,gBAChB,SAAQ,IAAI,CACV,yBAAyB,EACzB,gBAAgB,GAAG,iBAAiB,GAAG,cAAc,GAAG,OAAO,GAAG,cAAc,CAChF,EACD,cAAc;IACf,oFAAoF;IACpF,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/B;;;OAGG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,uDAAuD;AACvD,MAAM,WAAW,SAAS;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,eAAe,EAAE,eAAe,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACtC,+EAA+E;IAC/E,cAAc,EAAE,cAAc,GAAG,SAAS,CAAC;IAC3C,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wEAAwE;IACxE,WAAW,EAAE,qBAAqB,GAAG,SAAS,CAAC;CAC/C;AAED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,eAAe,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,iFAAiF;AACjF,MAAM,WAAW,SAAS;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3B,wFAAwF;IACxF,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,eAAO,MAAM,UAAU,EAAE,OAAO,MAA4C,CAAC;AAE7E,wBAAgB,eAAe,IAAI,SAAS,CAE3C;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAUjD;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAC9B,CAAC,EAAE,SAAS,EACZ,OAAO,EAAE,gBAAgB,GACvB,OAAO,CAAC,SAAS,CAAC,CASpB;AAqOD;;;GAGG;AACH,wBAAsB,cAAc,CACnC,CAAC,EAAE,SAAS,EACZ,MAAM,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CACnC,CAAC,EAAE,SAAS,EACZ,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,OAAO,GAAG,SAAS,GACzB,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}