@earendil-works/pi-durable 1.3.0 → 1.4.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 (119) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +111 -3
  3. package/dist/codemode/codemode.d.ts.map +1 -1
  4. package/dist/codemode/codemode.js +12 -4
  5. package/dist/codemode/codemode.js.map +1 -1
  6. package/dist/codemode/models.d.ts.map +1 -1
  7. package/dist/codemode/models.js +2 -0
  8. package/dist/codemode/models.js.map +1 -1
  9. package/dist/documents.d.ts +1 -1
  10. package/dist/documents.d.ts.map +1 -1
  11. package/dist/documents.js.map +1 -1
  12. package/dist/env/node.d.ts.map +1 -1
  13. package/dist/env/node.js +11 -3
  14. package/dist/env/node.js.map +1 -1
  15. package/dist/harness/agent.d.ts +13 -2
  16. package/dist/harness/agent.d.ts.map +1 -1
  17. package/dist/harness/agent.js +39 -5
  18. package/dist/harness/agent.js.map +1 -1
  19. package/dist/harness/compaction.d.ts +3 -1
  20. package/dist/harness/compaction.d.ts.map +1 -1
  21. package/dist/harness/compaction.js +19 -4
  22. package/dist/harness/compaction.js.map +1 -1
  23. package/dist/harness/generation.d.ts.map +1 -1
  24. package/dist/harness/generation.js +67 -27
  25. package/dist/harness/generation.js.map +1 -1
  26. package/dist/harness/harness.d.ts +5 -2
  27. package/dist/harness/harness.d.ts.map +1 -1
  28. package/dist/harness/harness.js +78 -13
  29. package/dist/harness/harness.js.map +1 -1
  30. package/dist/harness/inbox.d.ts +2 -2
  31. package/dist/harness/inbox.d.ts.map +1 -1
  32. package/dist/harness/inbox.js +3 -3
  33. package/dist/harness/inbox.js.map +1 -1
  34. package/dist/harness/prompt.d.ts +1 -1
  35. package/dist/harness/prompt.d.ts.map +1 -1
  36. package/dist/harness/prompt.js +1 -1
  37. package/dist/harness/prompt.js.map +1 -1
  38. package/dist/harness/scheduler.d.ts +55 -10
  39. package/dist/harness/scheduler.d.ts.map +1 -1
  40. package/dist/harness/scheduler.js +617 -124
  41. package/dist/harness/scheduler.js.map +1 -1
  42. package/dist/harness/submissions.d.ts +7 -2
  43. package/dist/harness/submissions.d.ts.map +1 -1
  44. package/dist/harness/submissions.js +48 -17
  45. package/dist/harness/submissions.js.map +1 -1
  46. package/dist/harness/task-graph.d.ts +18 -1
  47. package/dist/harness/task-graph.d.ts.map +1 -1
  48. package/dist/harness/task-graph.js +50 -11
  49. package/dist/harness/task-graph.js.map +1 -1
  50. package/dist/harness/telemetry.d.ts +307 -0
  51. package/dist/harness/telemetry.d.ts.map +1 -0
  52. package/dist/harness/telemetry.js +136 -0
  53. package/dist/harness/telemetry.js.map +1 -0
  54. package/dist/harness/tool.d.ts.map +1 -1
  55. package/dist/harness/tool.js +53 -7
  56. package/dist/harness/tool.js.map +1 -1
  57. package/dist/harness/types.d.ts +110 -15
  58. package/dist/harness/types.d.ts.map +1 -1
  59. package/dist/harness/types.js.map +1 -1
  60. package/dist/harness/util.d.ts +4 -0
  61. package/dist/harness/util.d.ts.map +1 -1
  62. package/dist/harness/util.js +4 -0
  63. package/dist/harness/util.js.map +1 -1
  64. package/dist/index.d.ts +6 -4
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +3 -2
  67. package/dist/index.js.map +1 -1
  68. package/dist/session/session.d.ts +17 -6
  69. package/dist/session/session.d.ts.map +1 -1
  70. package/dist/session/session.js +64 -32
  71. package/dist/session/session.js.map +1 -1
  72. package/dist/session/transaction.d.ts +5 -1
  73. package/dist/session/transaction.d.ts.map +1 -1
  74. package/dist/session/transaction.js +26 -1
  75. package/dist/session/transaction.js.map +1 -1
  76. package/dist/storage/indexeddb.d.ts +60 -0
  77. package/dist/storage/indexeddb.d.ts.map +1 -0
  78. package/dist/storage/indexeddb.js +831 -0
  79. package/dist/storage/indexeddb.js.map +1 -0
  80. package/dist/storage/jsonl/storage.d.ts +16 -0
  81. package/dist/storage/jsonl/storage.d.ts.map +1 -1
  82. package/dist/storage/memory.js +1 -1
  83. package/dist/storage/memory.js.map +1 -1
  84. package/dist/storage/sqlite/cloudflare.d.ts +2 -51
  85. package/dist/storage/sqlite/cloudflare.d.ts.map +1 -1
  86. package/dist/storage/sqlite/cloudflare.js +2 -133
  87. package/dist/storage/sqlite/cloudflare.js.map +1 -1
  88. package/dist/storage/sqlite/database.d.ts +1 -36
  89. package/dist/storage/sqlite/database.d.ts.map +1 -1
  90. package/dist/storage/sqlite/database.js.map +1 -1
  91. package/dist/storage/sqlite/index.d.ts +1 -1
  92. package/dist/storage/sqlite/index.d.ts.map +1 -1
  93. package/dist/storage/sqlite/index.js.map +1 -1
  94. package/dist/storage/sqlite/migrations.d.ts +2 -5
  95. package/dist/storage/sqlite/migrations.d.ts.map +1 -1
  96. package/dist/storage/sqlite/migrations.js +28 -28
  97. package/dist/storage/sqlite/migrations.js.map +1 -1
  98. package/dist/storage/sqlite/node.d.ts +2 -37
  99. package/dist/storage/sqlite/node.d.ts.map +1 -1
  100. package/dist/storage/sqlite/node.js +3 -174
  101. package/dist/storage/sqlite/node.js.map +1 -1
  102. package/dist/storage/sqlite/schema.d.ts +1 -3
  103. package/dist/storage/sqlite/schema.d.ts.map +1 -1
  104. package/dist/storage/sqlite/schema.js +2 -9
  105. package/dist/storage/sqlite/schema.js.map +1 -1
  106. package/dist/storage/sqlite/storage.d.ts +1 -1
  107. package/dist/storage/sqlite/storage.d.ts.map +1 -1
  108. package/dist/storage/sqlite/storage.js.map +1 -1
  109. package/dist/testing/storage-conformance.d.ts.map +1 -1
  110. package/dist/testing/storage-conformance.js +17 -0
  111. package/dist/testing/storage-conformance.js.map +1 -1
  112. package/dist/timers.d.ts +21 -0
  113. package/dist/timers.d.ts.map +1 -0
  114. package/dist/timers.js +72 -0
  115. package/dist/timers.js.map +1 -0
  116. package/dist/types.d.ts +130 -9
  117. package/dist/types.d.ts.map +1 -1
  118. package/dist/types.js.map +1 -1
  119. package/package.json +15 -5
@@ -3,9 +3,21 @@ import type { Models } from "@earendil-works/pi-ai";
3
3
  import type { ExecutionEnv } from "../env/index.ts";
4
4
  import type { SessionImpl } from "../session/session.ts";
5
5
  import type { Transaction } from "../session/transaction.ts";
6
- import type { ConversationId, Storage, TaskId, TaskOutcome, TaskRecord } from "../types.ts";
7
- import type { Agent, ConversationHandle, HarnessInspection, RegistryReader, RegistrySnapshot, Settings, SettledTask, TaskInspection } from "./types.ts";
6
+ import type { Timers } from "../timers.ts";
7
+ import type { ConversationId, ReportInfo, Storage, StorageWrite, TaskId, TaskOutcome, TaskRecord, TaskState } from "../types.ts";
8
+ import type { Agent, ConversationHandle, HarnessInspection, HarnessOptions, RegistryReader, RegistrySnapshot, Settings, SettledTask, TaskInspection, Wake } from "./types.ts";
8
9
  type AnyTaskRecord = TaskRecord<JsonValue, JsonValue, JsonValue>;
10
+ /** What `blockedReason()` reads of a task: the task graph keeps only this of each record. */
11
+ export type BlockedSubject = Pick<AnyTaskRecord, "id" | "kind" | "version" | "abortRequested" | "abortReason" | "restarts"> & {
12
+ readonly status: TaskState<JsonValue, JsonValue>["status"];
13
+ };
14
+ /** The part of a record `blockedReason()` reads. */
15
+ export declare function blockedSubject(record: AnyTaskRecord): BlockedSubject;
16
+ /**
17
+ * Why a task cannot be reserved: no registered definition can take it, or it was cut off `restartLimit` times in a row.
18
+ * Derived from the registry, the settings, and the record's `restarts`.
19
+ */
20
+ export type BlockedReason = "missing_task" | "task_too_old" | "migration_failed" | "restart_limit";
9
21
  /** Terminal outcomes the scheduler writes without running task code. */
10
22
  export type SchedulerOutcome = Extract<TaskOutcome<JsonValue>, {
11
23
  readonly status: "faulted" | "orphaned";
@@ -16,10 +28,12 @@ export type InvocationBinding = {
16
28
  check(): void;
17
29
  };
18
30
  export type TaskSchedulerOptions = {
31
+ readonly telemetry?: HarnessOptions["telemetry"];
19
32
  readonly session: SessionImpl;
20
33
  readonly storage: Storage;
21
34
  readonly registry: RegistryReader;
22
- readonly models: Models;
35
+ /** The host's current model access (`HarnessOptions.models`); read at each access. */
36
+ readonly models: () => Models;
23
37
  /** Resolve a conversation's agent against a snapshot; the runtime calls it at most once per phase. */
24
38
  readonly agent: (conversationId: ConversationId, snapshot: RegistrySnapshot, context: Context) => Promise<Agent>;
25
39
  /** Resolve the settings; read at each access. */
@@ -27,7 +41,13 @@ export type TaskSchedulerOptions = {
27
41
  /** Build a conversation's environment with `HarnessOptions.env`. */
28
42
  readonly env: (conversationId: ConversationId, context: Context) => Promise<ExecutionEnv | undefined>;
29
43
  readonly now: () => number;
30
- readonly report: (error: unknown) => void;
44
+ /** `HarnessOptions.onWake`: replaces the timer for sleeping tasks. */
45
+ readonly onWake: ((wake: Wake) => void) | undefined;
46
+ /** The host's timers (`HarnessOptions.setTimer`). */
47
+ readonly timers: Timers;
48
+ /** While closing, on the line after admitted commits settle, write what the callback returns straight to Storage. */
49
+ readonly writeAtClose: (writes: () => readonly StorageWrite[]) => Promise<void>;
50
+ readonly report: (error: unknown, info: ReportInfo, context?: Context) => void;
31
51
  /** Harness cleanup staged in the commit that makes an outcome the scheduler wrote itself terminal. */
32
52
  readonly settleOutcome: (tx: Transaction, record: AnyTaskRecord, outcome: SchedulerOutcome) => Promise<void>;
33
53
  /** Withdraw a conversation's queued inputs, for conversation abort and abort cascades. */
@@ -40,8 +60,9 @@ export type TaskSchedulerOptions = {
40
60
  /**
41
61
  * Durable task scheduler of one Harness.
42
62
  *
43
- * `#live` mirrors every committed non-terminal task record: pending, running, waiting, and completing. The synchronous
44
- * commit listener updates it on the Session line, so code running on the line reads exactly the committed state from it.
63
+ * `#live` mirrors every committed non-terminal task record: pending, running, waiting, sleeping, and completing. The
64
+ * synchronous commit listener updates it on the Session line, so code running on the line reads exactly the committed
65
+ * state from it.
45
66
  *
46
67
  * Tasks and conversations form one ownership tree (spec §5.5): a task's parent is its owner task, or its conversation;
47
68
  * a conversation's parent is its owner task, if any. Walks up that tree decide what reaches one task: a cancelling
@@ -61,13 +82,37 @@ export type TaskSchedulerOptions = {
61
82
  export declare class TaskScheduler {
62
83
  #private;
63
84
  constructor(options: TaskSchedulerOptions);
64
- /** Load live tasks and change surviving `running` tasks back to `pending`. Dispatches nothing. */
85
+ /**
86
+ * Load live tasks and change surviving `running` tasks back to `pending`, counting the restart. Dispatches nothing. A
87
+ * task that reaches the restart limit this way is parked and reported.
88
+ */
65
89
  open(context: Context): Promise<void>;
66
- /** Enable scheduling. Idempotent; the kick does nothing once closing. */
90
+ /**
91
+ * Enable scheduling, and make sleeping tasks that are due runnable: a host wakeup, such as an alarm, calls this.
92
+ * Idempotent; the kick does nothing once closing.
93
+ */
67
94
  resume(): void;
68
95
  /**
69
- * Signal every invocation and wait for them; writes nothing. Close calls this after every close listener has run, so
70
- * waits, watches, and streams a task holds end with the Session's reason, not as cancelled by its signal.
96
+ * Run a task parked by the restart limit again: clears its restart count and enables scheduling. Does nothing for a
97
+ * task that is not parked; rejects for an unknown one.
98
+ */
99
+ retry(id: TaskId, context: Context): Promise<void>;
100
+ /**
101
+ * Why a live task cannot run here, if it cannot: its definition (missing, too old, failed migration) or the restart
102
+ * limit. A running task, an abort-marked one, and one holding its outcome are never blocked.
103
+ */
104
+ blockedReason(record: BlockedSubject): BlockedReason | undefined;
105
+ /** Call `listener` when blocked reasons may have changed without a commit: a registry change or a failed migration. */
106
+ subscribeBlocked(listener: () => void): () => void;
107
+ /**
108
+ * When the Session next needs a process: `active` while some task can run now or is running, `at` for the earliest
109
+ * sleep not yet due. Synchronous, from memory; a task whose chain is not loaded yet counts as it would alone.
110
+ */
111
+ wake(): Wake;
112
+ /**
113
+ * Signal every invocation and wait for them, then write the tasks they ran back as `pending` (`writeAtClose`), as a
114
+ * close is not a crash. Close calls this after every close listener has run, so waits, watches, and streams a task
115
+ * holds end with the Session's reason, not as cancelled by its signal.
71
116
  */
72
117
  join(): Promise<void>;
73
118
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/harness/scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/harness/scheduler.ts"],"names":[],"mappings":"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"}