@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/actor.js CHANGED
@@ -1,10 +1,9 @@
1
1
  import { actor, event, } from "rivetkit";
2
2
  import { db } from "rivetkit/db";
3
3
  import { createPiActions } from "./actions.js";
4
- import { closePiSession, createPiRuntime, PI_RUNTIME, } from "./runtime.js";
4
+ import { assertNoReservedNames, sharedActorConfig, splitConfig, wrapActions, } from "./actor-config.js";
5
+ import { closePiSession, createPiRuntime, PI_RUNTIME, resumeInterruptedRun, stopRunWhenLost, withPiSession, } from "./runtime.js";
5
6
  import { migratePiTables } from "./storage.js";
6
- /** Ten minutes. Pi actions such as `waitForIdle` and `compact` outlive RivetKit's one-minute default. */
7
- const DEFAULT_ACTION_TIMEOUT_MS = 10 * 60_000;
8
7
  const piEvents = {
9
8
  event: event(),
10
9
  };
@@ -32,82 +31,48 @@ const piOptionKeys = [
32
31
  * The session transcript and settings live in the actor's SQLite database and
33
32
  * are restored when the actor wakes. Pi events are broadcast on `event`.
34
33
  * Ordinary actor config (state, vars, actions, events, hooks) is passed through.
34
+ * The app's own actions and lifecycle hooks get the session as `c.pi`.
35
35
  */
36
36
  export function pi(config = {}) {
37
- const { actorConfig, sessionOptions } = splitConfig(config);
37
+ const { actorConfig, options: sessionOptions } = splitConfig(config, piOptionKeys);
38
38
  if (actorConfig.db !== undefined) {
39
39
  throw new Error("pi() owns the actor database; remove the db option");
40
40
  }
41
41
  const actions = createPiActions(sessionOptions);
42
- assertNoReservedKeys("action", actorConfig.actions, actions);
43
- assertNoReservedKeys("event", actorConfig.events, piEvents);
44
- const userVars = actorConfig.vars;
45
- const userCreateVars = actorConfig.createVars;
46
- const userOnSleep = actorConfig.onSleep;
47
- const userOnDestroy = actorConfig.onDestroy;
48
- delete actorConfig.vars;
42
+ assertNoReservedNames("pi()", actorConfig, {
43
+ action: actions,
44
+ event: piEvents,
45
+ });
46
+ const withPi = (hook, opensSession = true) => hook &&
47
+ ((c, ...args) => withPiSession(c, sessionOptions, () => hook(c, ...args), {
48
+ opensSession,
49
+ }));
50
+ const userOnWake = withPi(actorConfig.onWake);
51
+ // The config is built from untyped parts, so `actor()` cannot check it
52
+ // against the generics. The declared return type is the public contract.
49
53
  return actor({
50
- ...actorConfig,
51
- options: {
52
- actionTimeout: DEFAULT_ACTION_TIMEOUT_MS,
53
- ...actorConfig.options,
54
- },
54
+ ...sharedActorConfig("pi()", actorConfig, { slot: PI_RUNTIME, create: createPiRuntime }, (c, stop) => closePiSession(c, sessionOptions, stop), {
55
+ onSleep: withPi(actorConfig.onSleep, false),
56
+ onDestroy: withPi(actorConfig.onDestroy, false),
57
+ }),
55
58
  db: db({ onMigrate: migratePiTables }),
56
59
  events: { ...(actorConfig.events ?? {}), ...piEvents },
57
- actions: { ...(actorConfig.actions ?? {}), ...actions },
58
- createVars: async (c, driverCtx) => {
59
- const vars = userCreateVars
60
- ? await userCreateVars(c, driverCtx)
61
- : userVars === undefined
62
- ? undefined
63
- : structuredClone(userVars);
64
- return attachRuntime(vars);
65
- },
66
- onSleep: async (c) => {
67
- try {
68
- await userOnSleep?.(c);
69
- }
70
- finally {
71
- await closePiSession(c, sessionOptions, "sleep");
72
- }
60
+ actions: {
61
+ ...wrapActions(actorConfig.actions ?? {}, (c, action) => withPiSession(c, sessionOptions, action)),
62
+ ...actions,
73
63
  },
74
- onDestroy: async (c) => {
75
- try {
76
- await userOnDestroy?.(c);
77
- }
78
- finally {
79
- await closePiSession(c, sessionOptions, "destroy");
80
- }
64
+ onWake: async (c) => {
65
+ stopRunWhenLost(c);
66
+ await userOnWake?.(c);
67
+ await resumeInterruptedRun(c, sessionOptions).catch((error) => {
68
+ c.log.error({
69
+ msg: "pi could not resume the run that was active when the actor stopped",
70
+ error,
71
+ });
72
+ });
81
73
  },
74
+ onConnect: withPi(actorConfig.onConnect),
75
+ onDisconnect: withPi(actorConfig.onDisconnect),
82
76
  });
83
77
  }
84
- function splitConfig(config) {
85
- const actorConfig = { ...config };
86
- const sessionOptions = {};
87
- for (const key of piOptionKeys) {
88
- if (key in actorConfig) {
89
- sessionOptions[key] = actorConfig[key];
90
- delete actorConfig[key];
91
- }
92
- }
93
- return { actorConfig, sessionOptions: sessionOptions };
94
- }
95
- /** Adds the Pi runtime slot to the user's vars without changing their shape. */
96
- function attachRuntime(vars) {
97
- const runtime = createPiRuntime();
98
- if (vars === undefined) {
99
- return { [PI_RUNTIME]: runtime };
100
- }
101
- if (typeof vars !== "object" || vars === null) {
102
- throw new Error("pi() requires actor vars to be an object");
103
- }
104
- return Object.assign(vars, { [PI_RUNTIME]: runtime });
105
- }
106
- function assertNoReservedKeys(kind, custom, builtIns) {
107
- for (const key of Object.keys(custom ?? {})) {
108
- if (key in builtIns) {
109
- throw new Error(`pi() ${kind} name is reserved: ${key}`);
110
- }
111
- }
112
- }
113
78
  //# sourceMappingURL=actor.js.map
package/dist/actor.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"actor.js","sourceRoot":"","sources":["../src/actor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actor.js","sourceRoot":"","sources":["../src/actor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnE;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC7B,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,GAC1C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAEhF,4DAA4D;AAC5D,MAAM,WAAW,gBAAgB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAClC,wCAAwC;IACxC,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACpC,iDAAiD;IACjD,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;IACpE;;;;OAIG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;CACvE;AAKD;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;;gBAKlD,MAAM,EAAE,kBAAkB;IAItC,wEAAwE;IACxE,UAAU,IAAI,IAAI;IAKlB,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQ7B,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAgBjE;;;OAGG;IACG,MAAM,CACX,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,KAAK,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,GAC1E,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAkB9B,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG/C"}
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnE;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC7B,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,GAC1C;IACA,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEL,4DAA4D;AAC5D,MAAM,WAAW,gBAAgB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAClC,wCAAwC;IACxC,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACpC,iDAAiD;IACjD,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;IACpE;;;;OAIG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;CACvE;AAKD;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;;gBAKlD,MAAM,EAAE,kBAAkB;IAItC,wEAAwE;IACxE,UAAU,IAAI,IAAI;IAKlB,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQ7B,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAiBjE;;;OAGG;IACG,MAAM,CACX,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,CACH,OAAO,EAAE,YAAY,GAAG,SAAS,KAC7B,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,GACpC,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IA0B9B,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK/C"}
@@ -46,7 +46,8 @@ export class SourceCredentialStore {
46
46
  */
47
47
  async modify(providerId, fn) {
48
48
  const refreshed = this.#source.refresh(providerId).then((credential) => {
49
- if (credential?.type === "oauth" && credential.expires - Date.now() <= PI_OAUTH_MIN_VALIDITY_MS) {
49
+ if (credential?.type === "oauth" &&
50
+ credential.expires - Date.now() <= PI_OAUTH_MIN_VALIDITY_MS) {
50
51
  throw new Error(`the credential source returned a ${providerId} token that expires within five minutes`);
51
52
  }
52
53
  return toPiCredential(credential);
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Fifteen minutes, so a running model call or tool call can finish before a
3
+ * deploy moves the actor. The engine's stop threshold still bounds it.
4
+ */
5
+ export declare const DEFAULT_SLEEP_GRACE_PERIOD_MS: number;
6
+ /**
7
+ * The time a drain must end by. RivetKit's grace deadline starts when the
8
+ * stop starts, just before `onSleep` runs, so the caller takes this before the
9
+ * app's own `onSleep`.
10
+ */
11
+ export declare function drainDeadline(gracePeriodMs: number): number;
12
+ //# sourceMappingURL=drain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drain.d.ts","sourceRoot":"","sources":["../src/drain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,6BAA6B,QAAc,CAAC;AAQzD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAG3D"}
package/dist/drain.js ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Fifteen minutes, so a running model call or tool call can finish before a
3
+ * deploy moves the actor. The engine's stop threshold still bounds it.
4
+ */
5
+ export const DEFAULT_SLEEP_GRACE_PERIOD_MS = 15 * 60_000;
6
+ /**
7
+ * Time kept back from the grace period for closing Pi and suspending the
8
+ * sandbox after a drain, so both finish before RivetKit's grace deadline.
9
+ */
10
+ const MAX_CLOSE_RESERVE_MS = 30_000;
11
+ /**
12
+ * The time a drain must end by. RivetKit's grace deadline starts when the
13
+ * stop starts, just before `onSleep` runs, so the caller takes this before the
14
+ * app's own `onSleep`.
15
+ */
16
+ export function drainDeadline(gracePeriodMs) {
17
+ const closeReserve = Math.min(MAX_CLOSE_RESERVE_MS, gracePeriodMs / 4);
18
+ return Date.now() + gracePeriodMs - closeReserve;
19
+ }
20
+ //# sourceMappingURL=drain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drain.js","sourceRoot":"","sources":["../src/drain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,GAAG,MAAM,CAAC;AAEzD;;;GAGG;AACH,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAEpC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,aAAqB;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,YAAY,CAAC;AAClD,CAAC"}
@@ -0,0 +1,192 @@
1
+ import type { Agent, AgentChange, ConversationAbortOptions, ConversationId, ConversationOwnership, ConversationView, Cursor, EntryId, EntryQuery, JsonObject, SnapshotEvent, SubmissionDraft, SubmissionId, TaskGraph, TaskId, UserInput } from "@earendil-works/pi-durable";
2
+ import type { PiContext } from "../runtime.js";
3
+ import { type PiDurableOptions } from "./runtime.js";
4
+ /** `AgentChange` as it crosses the wire: extensions and tools by name. */
5
+ export type PiAgentChange = Omit<AgentChange, "extensions" | "tools"> & {
6
+ readonly extensions?: readonly string[] | {
7
+ readonly add?: readonly string[];
8
+ readonly remove?: readonly string[];
9
+ } | null;
10
+ readonly tools?: readonly string[] | {
11
+ readonly remove: readonly string[];
12
+ } | null;
13
+ };
14
+ /** A conversation's resolved agent with extensions, tools, and sections by name. */
15
+ export interface PiAgentInfo {
16
+ model: Agent["model"];
17
+ thinkingLevel: Agent["thinkingLevel"];
18
+ extensions: string[];
19
+ tools: string[];
20
+ sections: string[];
21
+ instructions: Agent["instructions"];
22
+ cwd: Agent["cwd"];
23
+ }
24
+ /** Options for `harness.createConversation` and `conversation.fork`, with the agent change by name. */
25
+ export interface PiCreateConversationOptions {
26
+ ownership: ConversationOwnership;
27
+ agent?: PiAgentChange;
28
+ }
29
+ /** Options for `prompt`. */
30
+ export interface PiDurablePromptOptions {
31
+ /** Defaults to the root conversation. */
32
+ conversationId?: number;
33
+ /** Deduplicates retries: a second prompt with the same id returns the first one's submission. */
34
+ requestId?: string;
35
+ whenBusy?: "steer" | "followUp" | "reject";
36
+ }
37
+ /** How a `prompt` settled. `unanswered` carries Pi's reason, such as a model error. */
38
+ export type PiDurablePromptResult = {
39
+ status: "done";
40
+ /** The answer's text. */
41
+ text: string | undefined;
42
+ submissionId: SubmissionId;
43
+ } | {
44
+ status: "unanswered";
45
+ reason: string;
46
+ submissionId: SubmissionId;
47
+ };
48
+ /** The built-in actions of a `piDurable()` actor, as clients call them. */
49
+ export type PiDurableActions = ReturnType<typeof createPiDurableActions>;
50
+ /**
51
+ * The `piDurable()` actions: Pi Durable's `Harness`, `Conversation`, and
52
+ * `Submission` methods under `harness`, `conversation`, and `submission`, with
53
+ * the same names. Ids replace objects, and conversation methods take the
54
+ * conversation id first. `prompt` is the one convenience action.
55
+ */
56
+ export declare function createPiDurableActions(options: PiDurableOptions): {
57
+ harness: {
58
+ root: (c: PiContext, rootOptions?: {
59
+ agent?: PiAgentChange;
60
+ }) => Promise<{
61
+ id: ConversationId;
62
+ }>;
63
+ conversation: (c: PiContext, id: number) => Promise<import("@earendil-works/pi-durable").ConversationRecord | undefined>;
64
+ createConversation: (c: PiContext, create: PiCreateConversationOptions) => Promise<{
65
+ id: ConversationId;
66
+ }>;
67
+ submission: (c: PiContext, id: number) => Promise<import("@earendil-works/pi-durable").SubmissionRecord | undefined>;
68
+ abortSubmission: (c: PiContext, id: number, conversationId?: number) => Promise<"aborted" | "already_placed" | "settled">;
69
+ getTask: (c: PiContext, id: number) => Promise<import("@earendil-works/pi-durable").TaskRecord<import("@earendil-works/chord").JsonValue, import("@earendil-works/chord").JsonValue, unknown> | undefined>;
70
+ abortTask: (c: PiContext, id: number) => Promise<"terminal" | "marked">;
71
+ waitForTask: (c: PiContext, id: number) => Promise<import("@earendil-works/pi-durable").SettledTask<unknown>>;
72
+ waitForIdle: (c: PiContext) => Promise<void>;
73
+ inspect: (c: PiContext) => Promise<{
74
+ tasks: import("@earendil-works/pi-durable").TaskInspection[];
75
+ scheduling: "paused" | "running" | "closing";
76
+ submissions: readonly import("@earendil-works/pi-durable").SubmissionRecord[];
77
+ }>;
78
+ usage: (c: PiContext) => Promise<import("@earendil-works/pi-durable").UsageState>;
79
+ taskGraph: (c: PiContext) => Promise<TaskGraph>;
80
+ snapshot: (c: PiContext, kind: string, conversationId: number) => Promise<Readonly<any> | undefined>;
81
+ /** The task graph; then `pi.taskGraph` frames to this connection. */
82
+ watchTaskGraph: (c: PiContext) => Promise<{
83
+ value: TaskGraph;
84
+ }>;
85
+ unwatchTaskGraph: (c: PiContext) => Promise<void>;
86
+ /**
87
+ * The document's value; then `pi.doc` frames to this connection. A
88
+ * document that does not exist yet has value `undefined`, and its
89
+ * first frame arrives when a commit creates it.
90
+ */
91
+ watchDoc: (c: PiContext, kind: string, conversationId: number) => Promise<{
92
+ value: JsonObject | null | undefined;
93
+ }>;
94
+ unwatchDoc: (c: PiContext, kind: string, conversationId: number) => Promise<void>;
95
+ };
96
+ conversation: {
97
+ agent: (c: PiContext, conversationId: number) => Promise<PiAgentInfo>;
98
+ configure: (c: PiContext, conversationId: number, change: PiAgentChange) => Promise<void>;
99
+ submit: (c: PiContext, conversationId: number, draft: SubmissionDraft) => Promise<import("@earendil-works/pi-durable").SubmissionRecord>;
100
+ reset: (c: PiContext, conversationId: number, handoff?: string) => Promise<void>;
101
+ compact: (c: PiContext, conversationId: number, instructions?: string) => Promise<TaskId<import("@earendil-works/pi-durable").CompactionResult>>;
102
+ context: (c: PiContext, conversationId: number) => Promise<import("@earendil-works/pi-durable").ContextView>;
103
+ entries: (c: PiContext, conversationId: number, query: Omit<EntryQuery, "conversationId">, limit: number, cursor?: Cursor) => Promise<import("@earendil-works/pi-durable").Page<import("@earendil-works/pi-durable").EntryRecord, Readonly<Record<string, import("@earendil-works/chord").JsonValue>>>>;
104
+ fork: (c: PiContext, conversationId: number, at: number, fork: PiCreateConversationOptions) => Promise<{
105
+ id: ConversationId;
106
+ }>;
107
+ abort: (c: PiContext, conversationId: number, abortOptions?: ConversationAbortOptions) => Promise<void>;
108
+ waitForIdle: (c: PiContext, conversationId: number) => Promise<void>;
109
+ /** The structural view; then `pi.view` frames with Chord operations to this connection. */
110
+ watch: (c: PiContext, conversationId: number) => Promise<{
111
+ value: ConversationView;
112
+ }>;
113
+ unwatch: (c: PiContext, conversationId: number) => Promise<void>;
114
+ /** A snapshot, partial answer included; then `pi.events` batches to this connection. Nothing is replayed. */
115
+ watchEvents: (c: PiContext, conversationId: number) => Promise<{
116
+ snapshot: SnapshotEvent;
117
+ }>;
118
+ unwatchEvents: (c: PiContext, conversationId: number) => Promise<void>;
119
+ };
120
+ submission: {
121
+ status: (c: PiContext, id: number) => Promise<import("@earendil-works/pi-durable").SubmissionRecord>;
122
+ wait: (c: PiContext, id: number) => Promise<({
123
+ readonly id: SubmissionId;
124
+ readonly conversationId: ConversationId;
125
+ readonly requestId?: string;
126
+ } & {
127
+ readonly type: "input";
128
+ } & {
129
+ readonly status: "done";
130
+ readonly entry: EntryId;
131
+ readonly answer: EntryId;
132
+ readonly reason?: never;
133
+ readonly detail?: never;
134
+ } & {
135
+ readonly status: "done" | "unanswered";
136
+ }) | ({
137
+ readonly id: SubmissionId;
138
+ readonly conversationId: ConversationId;
139
+ readonly requestId?: string;
140
+ } & {
141
+ readonly type: "input";
142
+ } & {
143
+ readonly status: "unanswered";
144
+ readonly entry?: EntryId;
145
+ readonly answer?: never;
146
+ readonly reason: string;
147
+ readonly detail?: import("@earendil-works/chord").JsonValue;
148
+ } & {
149
+ readonly status: "done" | "unanswered";
150
+ }) | ({
151
+ readonly id: SubmissionId;
152
+ readonly conversationId: ConversationId;
153
+ readonly requestId?: string;
154
+ } & {
155
+ readonly type: "write";
156
+ } & {
157
+ readonly status: "done";
158
+ readonly entry: EntryId;
159
+ readonly answer?: never;
160
+ readonly reason?: never;
161
+ readonly detail?: never;
162
+ } & {
163
+ readonly status: "done" | "unanswered";
164
+ }) | ({
165
+ readonly id: SubmissionId;
166
+ readonly conversationId: ConversationId;
167
+ readonly requestId?: string;
168
+ } & {
169
+ readonly type: "write";
170
+ } & {
171
+ readonly status: "unanswered";
172
+ readonly entry?: never;
173
+ readonly answer?: never;
174
+ readonly reason: string;
175
+ readonly detail?: import("@earendil-works/chord").JsonValue;
176
+ } & {
177
+ readonly status: "done" | "unanswered";
178
+ })>;
179
+ abort: (c: PiContext, id: number) => Promise<"aborted" | "already_placed" | "settled">;
180
+ };
181
+ /**
182
+ * Submits user input, waits for the run to settle, and returns the
183
+ * answer's text. A model error does not reject: the status is
184
+ * `unanswered` with Pi's reason.
185
+ */
186
+ prompt: (c: PiContext, content: UserInput, promptOptions?: PiDurablePromptOptions) => Promise<PiDurablePromptResult>;
187
+ pi: {
188
+ /** Scheduled at the end of a long wait. Opening the harness resumes the waiting work. */
189
+ wake: (c: PiContext) => Promise<void>;
190
+ };
191
+ };
192
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/durable/actions.ts"],"names":[],"mappings":"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"}