@earendil-works/pi-agent-core 0.87.0 → 0.99.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 (242) hide show
  1. package/README.md +4 -0
  2. package/dist/agent-loop.d.ts +27 -2
  3. package/dist/agent-loop.d.ts.map +1 -1
  4. package/dist/agent-loop.js +44 -15
  5. package/dist/agent-loop.js.map +1 -1
  6. package/dist/agent.d.ts +9 -0
  7. package/dist/agent.d.ts.map +1 -1
  8. package/dist/agent.js +3 -0
  9. package/dist/agent.js.map +1 -1
  10. package/dist/harness/agent-harness.d.ts.map +1 -1
  11. package/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
  12. package/dist/harness/compaction/branch-summarization.js.map +1 -1
  13. package/dist/harness/compaction/compaction.d.ts.map +1 -1
  14. package/dist/harness/compaction/compaction.js.map +1 -1
  15. package/dist/harness/compaction/utils.d.ts.map +1 -1
  16. package/dist/harness/compaction/utils.js.map +1 -1
  17. package/dist/harness/config.d.ts.map +1 -1
  18. package/dist/harness/config.js.map +1 -1
  19. package/dist/harness/context.d.ts.map +1 -1
  20. package/dist/harness/context.js.map +1 -1
  21. package/dist/harness/env/nodejs.d.ts.map +1 -1
  22. package/dist/harness/env/nodejs.js.map +1 -1
  23. package/dist/harness/events.d.ts.map +1 -1
  24. package/dist/harness/events.js.map +1 -1
  25. package/dist/harness/execution/assistant.d.ts.map +1 -1
  26. package/dist/harness/execution/assistant.js.map +1 -1
  27. package/dist/harness/execution/effect-gate.d.ts.map +1 -1
  28. package/dist/harness/execution/effect-gate.js.map +1 -1
  29. package/dist/harness/execution/tools.d.ts.map +1 -1
  30. package/dist/harness/execution/tools.js.map +1 -1
  31. package/dist/harness/hooks.d.ts.map +1 -1
  32. package/dist/harness/hooks.js.map +1 -1
  33. package/dist/harness/messages.d.ts.map +1 -1
  34. package/dist/harness/messages.js.map +1 -1
  35. package/dist/harness/pico3/bash.d.ts.map +1 -1
  36. package/dist/harness/pico3/bash.js.map +1 -1
  37. package/dist/harness/pico3/bounded.d.ts.map +1 -1
  38. package/dist/harness/pico3/bounded.js.map +1 -1
  39. package/dist/harness/pico3/chord.d.ts.map +1 -1
  40. package/dist/harness/pico3/chord.js.map +1 -1
  41. package/dist/harness/pico3/context.d.ts.map +1 -1
  42. package/dist/harness/pico3/context.js.map +1 -1
  43. package/dist/harness/pico3/harness.d.ts +4 -3
  44. package/dist/harness/pico3/harness.d.ts.map +1 -1
  45. package/dist/harness/pico3/harness.js.map +1 -1
  46. package/dist/harness/pico3/hooks.d.ts +2 -2
  47. package/dist/harness/pico3/hooks.d.ts.map +1 -1
  48. package/dist/harness/pico3/hooks.js.map +1 -1
  49. package/dist/harness/pico3/index.d.ts.map +1 -1
  50. package/dist/harness/pico3/jsonl.d.ts.map +1 -1
  51. package/dist/harness/pico3/jsonl.js.map +1 -1
  52. package/dist/harness/pico3/kinds/collapse.d.ts.map +1 -1
  53. package/dist/harness/pico3/kinds/collapse.js.map +1 -1
  54. package/dist/harness/pico3/kinds/entries.d.ts.map +1 -1
  55. package/dist/harness/pico3/kinds/frames.d.ts.map +1 -1
  56. package/dist/harness/pico3/kinds/frames.js.map +1 -1
  57. package/dist/harness/pico3/kinds/generation.d.ts.map +1 -1
  58. package/dist/harness/pico3/kinds/generation.js.map +1 -1
  59. package/dist/harness/pico3/kinds/job.d.ts.map +1 -1
  60. package/dist/harness/pico3/kinds/job.js.map +1 -1
  61. package/dist/harness/pico3/kinds/plugin.d.ts.map +1 -1
  62. package/dist/harness/pico3/kinds/plugin.js.map +1 -1
  63. package/dist/harness/pico3/kinds/post-tools.d.ts.map +1 -1
  64. package/dist/harness/pico3/kinds/post-tools.js.map +1 -1
  65. package/dist/harness/pico3/kinds/task-api.d.ts.map +1 -1
  66. package/dist/harness/pico3/kinds/task-api.js.map +1 -1
  67. package/dist/harness/pico3/kinds/tool.d.ts.map +1 -1
  68. package/dist/harness/pico3/kinds/tool.js.map +1 -1
  69. package/dist/harness/pico3/legacy-tracker.d.ts +11 -0
  70. package/dist/harness/pico3/legacy-tracker.d.ts.map +1 -0
  71. package/dist/harness/pico3/legacy-tracker.js +41 -0
  72. package/dist/harness/pico3/legacy-tracker.js.map +1 -0
  73. package/dist/harness/pico3/membrane.d.ts.map +1 -1
  74. package/dist/harness/pico3/membrane.js.map +1 -1
  75. package/dist/harness/pico3/memory.d.ts +1 -1
  76. package/dist/harness/pico3/memory.d.ts.map +1 -1
  77. package/dist/harness/pico3/memory.js.map +1 -1
  78. package/dist/harness/pico3/scheduler.d.ts +3 -0
  79. package/dist/harness/pico3/scheduler.d.ts.map +1 -1
  80. package/dist/harness/pico3/scheduler.js.map +1 -1
  81. package/dist/harness/pico3/session.d.ts +3 -2
  82. package/dist/harness/pico3/session.d.ts.map +1 -1
  83. package/dist/harness/pico3/session.js +5 -4
  84. package/dist/harness/pico3/session.js.map +1 -1
  85. package/dist/harness/pico3/system.d.ts +1 -1
  86. package/dist/harness/pico3/system.d.ts.map +1 -1
  87. package/dist/harness/pico3/system.js.map +1 -1
  88. package/dist/harness/pico3/types.d.ts +1 -1
  89. package/dist/harness/pico3/types.d.ts.map +1 -1
  90. package/dist/harness/pico3/types.js.map +1 -1
  91. package/dist/harness/pico3/view.d.ts.map +1 -1
  92. package/dist/harness/pico3/view.js +6 -12
  93. package/dist/harness/pico3/view.js.map +1 -1
  94. package/dist/harness/prompt-templates.d.ts.map +1 -1
  95. package/dist/harness/prompt-templates.js.map +1 -1
  96. package/dist/harness/result.d.ts.map +1 -1
  97. package/dist/harness/result.js.map +1 -1
  98. package/dist/harness/runtime/drive/boundary.d.ts.map +1 -1
  99. package/dist/harness/runtime/drive/boundary.js.map +1 -1
  100. package/dist/harness/runtime/drive/checkpoint.d.ts.map +1 -1
  101. package/dist/harness/runtime/drive/checkpoint.js.map +1 -1
  102. package/dist/harness/runtime/drive/deferred.d.ts.map +1 -1
  103. package/dist/harness/runtime/drive/deferred.js.map +1 -1
  104. package/dist/harness/runtime/drive/generation.d.ts.map +1 -1
  105. package/dist/harness/runtime/drive/generation.js.map +1 -1
  106. package/dist/harness/runtime/drive/reconcile.d.ts.map +1 -1
  107. package/dist/harness/runtime/drive/reconcile.js.map +1 -1
  108. package/dist/harness/runtime/drive/recovery.d.ts.map +1 -1
  109. package/dist/harness/runtime/drive/recovery.js.map +1 -1
  110. package/dist/harness/runtime/drive/response.d.ts.map +1 -1
  111. package/dist/harness/runtime/drive/response.js.map +1 -1
  112. package/dist/harness/runtime/drive/retry.d.ts.map +1 -1
  113. package/dist/harness/runtime/drive/retry.js.map +1 -1
  114. package/dist/harness/runtime/drive/structural.d.ts.map +1 -1
  115. package/dist/harness/runtime/drive/structural.js.map +1 -1
  116. package/dist/harness/runtime/drive/terminal.d.ts.map +1 -1
  117. package/dist/harness/runtime/drive/terminal.js.map +1 -1
  118. package/dist/harness/runtime/drive/tool-placement.d.ts.map +1 -1
  119. package/dist/harness/runtime/drive/tool-placement.js.map +1 -1
  120. package/dist/harness/runtime/drive/tools.d.ts.map +1 -1
  121. package/dist/harness/runtime/drive/tools.js.map +1 -1
  122. package/dist/harness/runtime/drive.d.ts.map +1 -1
  123. package/dist/harness/runtime/drive.js.map +1 -1
  124. package/dist/harness/runtime/harness.d.ts.map +1 -1
  125. package/dist/harness/runtime/harness.js.map +1 -1
  126. package/dist/harness/runtime/index.d.ts.map +1 -1
  127. package/dist/harness/runtime/lane.d.ts +17 -0
  128. package/dist/harness/runtime/lane.d.ts.map +1 -1
  129. package/dist/harness/runtime/lane.js.map +1 -1
  130. package/dist/harness/runtime/progress.d.ts.map +1 -1
  131. package/dist/harness/runtime/progress.js.map +1 -1
  132. package/dist/harness/runtime/reducer.d.ts.map +1 -1
  133. package/dist/harness/runtime/reducer.js.map +1 -1
  134. package/dist/harness/runtime/restore.d.ts.map +1 -1
  135. package/dist/harness/runtime/restore.js.map +1 -1
  136. package/dist/harness/runtime/transcript.d.ts.map +1 -1
  137. package/dist/harness/runtime/transcript.js.map +1 -1
  138. package/dist/harness/runtime/types.d.ts.map +1 -1
  139. package/dist/harness/runtime/types.js.map +1 -1
  140. package/dist/harness/session/commit.d.ts.map +1 -1
  141. package/dist/harness/session/commit.js.map +1 -1
  142. package/dist/harness/session/context.d.ts.map +1 -1
  143. package/dist/harness/session/context.js.map +1 -1
  144. package/dist/harness/session/fork-policy.d.ts.map +1 -1
  145. package/dist/harness/session/fork-policy.js.map +1 -1
  146. package/dist/harness/session/fork.d.ts.map +1 -1
  147. package/dist/harness/session/fork.js.map +1 -1
  148. package/dist/harness/session/in-memory-storage-state.d.ts.map +1 -1
  149. package/dist/harness/session/in-memory-storage-state.js.map +1 -1
  150. package/dist/harness/session/index.d.ts.map +1 -1
  151. package/dist/harness/session/jsonl/codec.d.ts.map +1 -1
  152. package/dist/harness/session/jsonl/codec.js.map +1 -1
  153. package/dist/harness/session/jsonl/fork.d.ts.map +1 -1
  154. package/dist/harness/session/jsonl/fork.js.map +1 -1
  155. package/dist/harness/session/jsonl/index.d.ts.map +1 -1
  156. package/dist/harness/session/jsonl/io.d.ts.map +1 -1
  157. package/dist/harness/session/jsonl/io.js.map +1 -1
  158. package/dist/harness/session/jsonl/legacy-v3.d.ts +1 -0
  159. package/dist/harness/session/jsonl/legacy-v3.d.ts.map +1 -1
  160. package/dist/harness/session/jsonl/legacy-v3.js.map +1 -1
  161. package/dist/harness/session/jsonl/repo.d.ts.map +1 -1
  162. package/dist/harness/session/jsonl/repo.js.map +1 -1
  163. package/dist/harness/session/jsonl/storage.d.ts +1 -0
  164. package/dist/harness/session/jsonl/storage.d.ts.map +1 -1
  165. package/dist/harness/session/jsonl/storage.js.map +1 -1
  166. package/dist/harness/session/jsonl/types.d.ts.map +1 -1
  167. package/dist/harness/session/memory.d.ts.map +1 -1
  168. package/dist/harness/session/memory.js.map +1 -1
  169. package/dist/harness/session/mutation-line.d.ts.map +1 -1
  170. package/dist/harness/session/mutation-line.js.map +1 -1
  171. package/dist/harness/session/session.d.ts.map +1 -1
  172. package/dist/harness/session/session.js.map +1 -1
  173. package/dist/harness/session/testing/benchmark/datasets.d.ts.map +1 -1
  174. package/dist/harness/session/testing/benchmark/datasets.js.map +1 -1
  175. package/dist/harness/session/testing/benchmark/session-repo.d.ts.map +1 -1
  176. package/dist/harness/session/testing/benchmark/session-repo.js.map +1 -1
  177. package/dist/harness/session/testing/benchmark/storage.d.ts.map +1 -1
  178. package/dist/harness/session/testing/benchmark/storage.js.map +1 -1
  179. package/dist/harness/session/testing/conformance/session-repo.d.ts.map +1 -1
  180. package/dist/harness/session/testing/conformance/session-repo.js.map +1 -1
  181. package/dist/harness/session/testing/conformance/storage.d.ts.map +1 -1
  182. package/dist/harness/session/testing/conformance/storage.js.map +1 -1
  183. package/dist/harness/session/testing/gating-storage.d.ts.map +1 -1
  184. package/dist/harness/session/testing/gating-storage.js.map +1 -1
  185. package/dist/harness/session/testing/index.d.ts.map +1 -1
  186. package/dist/harness/session/testing/instrumented-storage.d.ts.map +1 -1
  187. package/dist/harness/session/testing/instrumented-storage.js.map +1 -1
  188. package/dist/harness/session/testing/storage-decorator.d.ts.map +1 -1
  189. package/dist/harness/session/testing/storage-decorator.js.map +1 -1
  190. package/dist/harness/session/testing/types.d.ts.map +1 -1
  191. package/dist/harness/session/types.d.ts.map +1 -1
  192. package/dist/harness/session/types.js.map +1 -1
  193. package/dist/harness/session/values.d.ts +2 -2
  194. package/dist/harness/session/values.d.ts.map +1 -1
  195. package/dist/harness/session/values.js.map +1 -1
  196. package/dist/harness/skills.d.ts.map +1 -1
  197. package/dist/harness/skills.js.map +1 -1
  198. package/dist/harness/system-prompt.d.ts.map +1 -1
  199. package/dist/harness/system-prompt.js.map +1 -1
  200. package/dist/harness/telemetry.d.ts.map +1 -1
  201. package/dist/harness/telemetry.js.map +1 -1
  202. package/dist/harness/tools/bash.d.ts.map +1 -1
  203. package/dist/harness/tools/bash.js.map +1 -1
  204. package/dist/harness/tools/edit-diff.d.ts.map +1 -1
  205. package/dist/harness/tools/edit-diff.js.map +1 -1
  206. package/dist/harness/tools/edit.d.ts.map +1 -1
  207. package/dist/harness/tools/edit.js.map +1 -1
  208. package/dist/harness/tools/file-mutation-queue.d.ts.map +1 -1
  209. package/dist/harness/tools/file-mutation-queue.js.map +1 -1
  210. package/dist/harness/tools/image.d.ts.map +1 -1
  211. package/dist/harness/tools/image.js.map +1 -1
  212. package/dist/harness/tools/index.d.ts.map +1 -1
  213. package/dist/harness/tools/path-utils.d.ts.map +1 -1
  214. package/dist/harness/tools/path-utils.js.map +1 -1
  215. package/dist/harness/tools/read.d.ts.map +1 -1
  216. package/dist/harness/tools/read.js.map +1 -1
  217. package/dist/harness/tools/tool-context.d.ts.map +1 -1
  218. package/dist/harness/tools/write.d.ts.map +1 -1
  219. package/dist/harness/tools/write.js.map +1 -1
  220. package/dist/harness/types.d.ts.map +1 -1
  221. package/dist/harness/types.js.map +1 -1
  222. package/dist/harness/utils/adaptive-publisher.d.ts.map +1 -1
  223. package/dist/harness/utils/adaptive-publisher.js.map +1 -1
  224. package/dist/harness/utils/output-capture.d.ts.map +1 -1
  225. package/dist/harness/utils/output-capture.js.map +1 -1
  226. package/dist/harness/utils/shell-output.d.ts.map +1 -1
  227. package/dist/harness/utils/shell-output.js.map +1 -1
  228. package/dist/harness/utils/truncate.d.ts.map +1 -1
  229. package/dist/harness/utils/truncate.js.map +1 -1
  230. package/dist/harness/utils/usage.d.ts.map +1 -1
  231. package/dist/harness/utils/usage.js.map +1 -1
  232. package/dist/index.d.ts.map +1 -1
  233. package/dist/node.d.ts.map +1 -1
  234. package/dist/proxy.d.ts.map +1 -1
  235. package/dist/proxy.js.map +1 -1
  236. package/dist/search/index.d.ts.map +1 -1
  237. package/dist/stream-fn.d.ts.map +1 -1
  238. package/dist/stream-fn.js.map +1 -1
  239. package/dist/types.d.ts +30 -2
  240. package/dist/types.d.ts.map +1 -1
  241. package/dist/types.js.map +1 -1
  242. package/package.json +9 -10
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/harness/pico3/context.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context } from \"@earendil-works/chord\";\nimport type { ContextEdit, ContextView, Entry, Id, RequestMessage, Storage, StoredMessage } from \"./types.ts\";\n\n/**\n * pico §1.3, verbatim:\n * H = newest fork-visible entry at or before T with a head\n * from = H ? H.head : transcript start\n * range = fork-visible entries from `from` through T\n * edits = per target, newest edit in range wins\n * entries = H ? [H, ...range without any head entries] : range\n * model = concat(entries.map(e => edits[e.id] ? apply : e.model)), then reorder tool results\n *\n * Display-only entries (aborted/error assistants, pi.usage, model-less plugin entries) have no\n * `model` and contribute nothing. Nothing here inspects an error string.\n */\nexport async function deriveContext(\n\tstorage: Storage,\n\tconversationId: Id,\n\tat: Id | undefined,\n\tctx: Context,\n): Promise<ContextView> {\n\tconst [head] = await storage.scanEntries(\n\t\t{ conversationId, withHead: true, ...(at === undefined ? {} : { before: at + 1 }), limit: 1 },\n\t\tctx,\n\t);\n\tconst from = head?.head;\n\n\t// Walk newest-first until we pass `from`.\n\tconst range: Entry[] = [];\n\tlet before = at === undefined ? undefined : at + 1;\n\tfor (;;) {\n\t\tconst page = await storage.scanEntries(\n\t\t\t{ conversationId, ...(before === undefined ? {} : { before }), limit: 256 },\n\t\t\tctx,\n\t\t);\n\t\tlet done = page.length < 256;\n\t\tfor (const e of page) {\n\t\t\tif (from !== undefined && e.id < from) {\n\t\t\t\tdone = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\trange.push(e);\n\t\t}\n\t\tif (done) break;\n\t\tbefore = page[page.length - 1]!.id;\n\t}\n\trange.reverse();\n\n\tconst edits = new Map<Id, ContextEdit>();\n\tfor (const e of range) for (const edit of e.edits ?? []) edits.set(edit.target, edit); // later wins by iteration order\n\n\tconst entries = head === undefined ? range : [head, ...range.filter((e) => e.head === undefined)];\n\n\tconst messages: RequestMessage[] = [];\n\tfor (const e of entries) {\n\t\tconst edit = edits.get(e.id);\n\t\tif (edit?.action === \"omit\") continue;\n\t\tif (edit?.action === \"replace\") {\n\t\t\tmessages.push(...(edit.messages ?? []));\n\t\t\tcontinue;\n\t\t}\n\t\tif (e.model) messages.push(...e.model);\n\t}\n\treturn { head, entries, messages: reorderToolResults(messages) };\n}\n\n/** Results are appended as tools finish; put them back in call order, synthesising a missing one after a fork cut. */\ntype StoredAssistant = Extract<StoredMessage, { role: \"assistant\" }>;\ntype StoredToolResult = Extract<StoredMessage, { role: \"toolResult\" }>;\ntype StoredToolCall = Extract<StoredAssistant[\"content\"][number], { type: \"toolCall\" }>;\nfunction reorderToolResults(messages: RequestMessage[]): RequestMessage[] {\n\tconst out: RequestMessage[] = [];\n\tfor (let i = 0; i < messages.length; i++) {\n\t\tconst m = messages[i]!;\n\t\tout.push(m);\n\t\tif (m.role !== \"assistant\") continue;\n\t\tconst calls = (m as StoredAssistant).content.filter((c): c is StoredToolCall => c.type === \"toolCall\");\n\t\tif (calls.length === 0) continue;\n\t\tconst results = new Map<string, StoredToolResult>();\n\t\tlet j = i + 1;\n\t\twhile (j < messages.length && messages[j]!.role === \"toolResult\") {\n\t\t\tconst r = messages[j] as StoredToolResult;\n\t\t\tresults.set(r.toolCallId, r);\n\t\t\tj++;\n\t\t}\n\t\tfor (const call of calls) {\n\t\t\tout.push(\n\t\t\t\tresults.get(call.id) ??\n\t\t\t\t\t({\n\t\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\t\ttoolCallId: call.id,\n\t\t\t\t\t\ttoolName: call.name,\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{ type: \"text\", text: \"Tool result unavailable: history ends before this call completed.\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\tdetails: { reason: \"missing_after_fork\" },\n\t\t\t\t\t\ttimestamp: (m as StoredAssistant).timestamp,\n\t\t\t\t\t} as StoredToolResult),\n\t\t\t);\n\t\t}\n\t\ti = j - 1;\n\t}\n\treturn out;\n}\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/harness/pico3/context.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context } from \"@earendil-works/chord\";\nimport type { ContextEdit, ContextView, Entry, Id, RequestMessage, Storage, StoredMessage } from \"./types.ts\";\n\n/**\n * pico §1.3, verbatim:\n * H = newest fork-visible entry at or before T with a head\n * from = H ? H.head : transcript start\n * range = fork-visible entries from `from` through T\n * edits = per target, newest edit in range wins\n * entries = H ? [H, ...range without any head entries] : range\n * model = concat(entries.map(e => edits[e.id] ? apply : e.model)), then reorder tool results\n *\n * Display-only entries (aborted/error assistants, pi.usage, model-less plugin entries) have no\n * `model` and contribute nothing. Nothing here inspects an error string.\n */\nexport async function deriveContext(\n\tstorage: Storage,\n\tconversationId: Id,\n\tat: Id | undefined,\n\tctx: Context,\n): Promise<ContextView> {\n\tconst [head] = await storage.scanEntries(\n\t\t{ conversationId, withHead: true, ...(at === undefined ? {} : { before: at + 1 }), limit: 1 },\n\t\tctx,\n\t);\n\tconst from = head?.head;\n\n\t// Walk newest-first until we pass `from`.\n\tconst range: Entry[] = [];\n\tlet before = at === undefined ? undefined : at + 1;\n\tfor (;;) {\n\t\tconst page = await storage.scanEntries(\n\t\t\t{ conversationId, ...(before === undefined ? {} : { before }), limit: 256 },\n\t\t\tctx,\n\t\t);\n\t\tlet done = page.length < 256;\n\t\tfor (const e of page) {\n\t\t\tif (from !== undefined && e.id < from) {\n\t\t\t\tdone = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\trange.push(e);\n\t\t}\n\t\tif (done) break;\n\t\tbefore = page[page.length - 1]!.id;\n\t}\n\trange.reverse();\n\n\tconst edits = new Map<Id, ContextEdit>();\n\tfor (const e of range) for (const edit of e.edits ?? []) edits.set(edit.target, edit); // later wins by iteration order\n\n\tconst entries = head === undefined ? range : [head, ...range.filter((e) => e.head === undefined)];\n\n\tconst messages: RequestMessage[] = [];\n\tfor (const e of entries) {\n\t\tconst edit = edits.get(e.id);\n\t\tif (edit?.action === \"omit\") continue;\n\t\tif (edit?.action === \"replace\") {\n\t\t\tmessages.push(...(edit.messages ?? []));\n\t\t\tcontinue;\n\t\t}\n\t\tif (e.model) messages.push(...e.model);\n\t}\n\treturn { head, entries, messages: reorderToolResults(messages) };\n}\n\n/** Results are appended as tools finish; put them back in call order, synthesising a missing one after a fork cut. */\ntype StoredAssistant = Extract<StoredMessage, { role: \"assistant\" }>;\ntype StoredToolResult = Extract<StoredMessage, { role: \"toolResult\" }>;\ntype StoredToolCall = Extract<StoredAssistant[\"content\"][number], { type: \"toolCall\" }>;\nfunction reorderToolResults(messages: RequestMessage[]): RequestMessage[] {\n\tconst out: RequestMessage[] = [];\n\tfor (let i = 0; i < messages.length; i++) {\n\t\tconst m = messages[i]!;\n\t\tout.push(m);\n\t\tif (m.role !== \"assistant\") continue;\n\t\tconst calls = (m as StoredAssistant).content.filter((c): c is StoredToolCall => c.type === \"toolCall\");\n\t\tif (calls.length === 0) continue;\n\t\tconst results = new Map<string, StoredToolResult>();\n\t\tlet j = i + 1;\n\t\twhile (j < messages.length && messages[j]!.role === \"toolResult\") {\n\t\t\tconst r = messages[j] as StoredToolResult;\n\t\t\tresults.set(r.toolCallId, r);\n\t\t\tj++;\n\t\t}\n\t\tfor (const call of calls) {\n\t\t\tout.push(\n\t\t\t\tresults.get(call.id) ??\n\t\t\t\t\t({\n\t\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\t\ttoolCallId: call.id,\n\t\t\t\t\t\ttoolName: call.name,\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{ type: \"text\", text: \"Tool result unavailable: history ends before this call completed.\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\tdetails: { reason: \"missing_after_fork\" },\n\t\t\t\t\t\ttimestamp: (m as StoredAssistant).timestamp,\n\t\t\t\t\t} as StoredToolResult),\n\t\t\t);\n\t\t}\n\t\ti = j - 1;\n\t}\n\treturn out;\n}\n"]}
@@ -128,6 +128,7 @@ export declare class Harness<Ks extends readonly AnyKind[] = []> {
128
128
  /** Signals every invocation, waits for them, closes storage. Writes nothing. */
129
129
  close(ctx: Context): Promise<void>;
130
130
  private handle;
131
+ /** Capture and subscribe in one line operation. */
131
132
  private watch;
132
133
  private inputHandle;
133
134
  }
@@ -143,7 +144,7 @@ export { applyEnvelope, WATCH_CAPACITY } from "./view.ts";
143
144
  /** The built-in kinds, as typed witnesses for `api.task`, `waitForTask`, and `hooks(kind, …)`. */
144
145
  export declare const kinds: {
145
146
  readonly generation: import("./types.ts").CoreKind<import("./kinds/generation.ts").GenerationInput, import("./kinds/generation.ts").GenerationCheckpoint, import("./kinds/generation.ts").GenerationResult, import("./kinds/generation.ts").GenerationFailure, {
146
- assistant?: number | undefined;
147
+ assistant?: Id;
147
148
  }, import("./kinds/generation.ts").GenerationHooks, {
148
149
  readonly rewindable: {
149
150
  readonly model: import("./types.ts").ModelRef | undefined;
@@ -156,7 +157,7 @@ export declare const kinds: {
156
157
  };
157
158
  }>;
158
159
  readonly tool: import("./types.ts").CoreKind<import("./kinds/tool.ts").ToolInput, import("./kinds/tool.ts").ToolCheckpoint, import("./kinds/tool.ts").ToolTaskResult, never, {
159
- entry: number;
160
+ entry: Id;
160
161
  }, import("./kinds/tool.ts").ToolHooks>;
161
162
  readonly postTools: import("./types.ts").CoreKind<import("./kinds/post-tools.ts").PostToolsInput, never, import("./kinds/post-tools.ts").PostToolsResult, never, null, import("./kinds/post-tools.ts").PostToolsHooks, {
162
163
  readonly sticky: {
@@ -165,7 +166,7 @@ export declare const kinds: {
165
166
  };
166
167
  }>;
167
168
  readonly collapse: import("./types.ts").CoreKind<import("./kinds/collapse.ts").CollapseInput, import("./kinds/collapse.ts").CollapseCheckpoint, {
168
- summary: number;
169
+ summary: Id;
169
170
  }, import("./kinds/collapse.ts").CollapseFailure, null, import("./kinds/collapse.ts").CollapseHooks, {
170
171
  readonly rewindable: {
171
172
  readonly threshold: number;
@@ -1 +1 @@
1
- {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../../src/harness/pico3/harness.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context } from \"@earendil-works/chord\";\nimport { withAbortSignal } from \"@earendil-works/chord/context\";\nimport type { TSchema } from \"typebox\";\nimport { createHookRunners, type HookRegistration } from \"./hooks.ts\";\nimport { chooseThrough, collapse } from \"./kinds/collapse.ts\";\nimport { entries as builtinEntries } from \"./kinds/entries.ts\";\nimport { generation } from \"./kinds/generation.ts\";\nimport { job } from \"./kinds/job.ts\";\nimport { plugin } from \"./kinds/plugin.ts\";\nimport { postTools } from \"./kinds/post-tools.ts\";\nimport { tool } from \"./kinds/tool.ts\";\nimport { Scheduler } from \"./scheduler.ts\";\nimport { isCoreKind, Session, type TxImpl } from \"./session.ts\";\nimport { type SystemSection, systemSections } from \"./system.ts\";\nimport {\n\ttype AnyKind,\n\ttype AnyToolDeclaration,\n\ttype ConfigFacade,\n\ttype ConfigOfKinds,\n\ttype ContextView,\n\ttype Conversation,\n\ttype ConversationSpec,\n\ttype DisjointConfig,\n\ttype DocRef,\n\ttype Entry,\n\ttype EntryKind,\n\ttype EntryScan,\n\tForbidden,\n\ttype HooksOf,\n\ttype HostTx,\n\ttype Id,\n\ttype Input,\n\ttype Invoker,\n\ttype JsonObject,\n\ttype JsonValue,\n\ttype Models,\n\ttype Namespace,\n\ttype NamespaceDefaults,\n\ttype NamespaceRegistration,\n\ttype NewEntry,\n\ttype PluginHandler,\n\ttype ProcessHost,\n\ttype RewindableState,\n\ttype Runtime,\n\ttype SendInput,\n\ttype StickyState,\n\ttype Storage,\n\ttype Task,\n\ttype ToolDeclaration,\n\ttype UserInput,\n} from \"./types.ts\";\nimport { ViewManager, type Watch } from \"./view.ts\";\n\n// ---------------------------------------------------------------------------\n// Harness\n// ---------------------------------------------------------------------------\n\nexport interface HarnessOptions<Ks extends readonly AnyKind[] = []> {\n\tmodels: Models;\n\ttools?: AnyToolDeclaration[];\n\t/** Ordinary kinds authored with `defineTask`. Their `config` merges onto `c.config`; keys must be disjoint. */\n\ttaskKinds?: Ks;\n\tsections?: SystemSection[];\n\tplugins?: { [name: string]: PluginHandler };\n\tprocessHost?: ProcessHost;\n\t/** Clock for durable kernel timestamps and retry scheduling. */\n\tnow?: () => number;\n\troot?: { rewindable?: Partial<RewindableState>; sticky?: Partial<StickyState> };\n\t/** Errors from listeners, hooks, watches, and the scheduler. Never delivered as commit failures. */\n\tonReport?: (error: unknown) => void;\n}\n\nexport type BuiltinKinds = readonly [\n\ttypeof generation,\n\ttypeof tool,\n\ttypeof postTools,\n\ttypeof collapse,\n\ttypeof job,\n\ttypeof plugin,\n];\nexport type ConfigFor<Ks extends readonly AnyKind[]> = ConfigOfKinds<[...BuiltinKinds, ...Ks]>;\n\nexport interface ConversationHandle<Cfg extends object = ConfigFor<[]>> {\n\treadonly id: Id;\n\treadonly config: ConfigFacade<Cfg>;\n\tsend(input: SendInput, ctx: Context): Promise<InputHandle>;\n\twrite(entry: NewEntry, ctx: Context): Promise<Id>;\n\tcommit<T>(fn: (tx: HostTx, ctx: Context) => T | Promise<T>, ctx: Context): Promise<T>;\n\trewindable(ctx: Context): Promise<RewindableState>;\n\tsticky(ctx: Context): Promise<StickyState>;\n\tcontext(ctx: Context): Promise<ContextView>;\n\tfork(at: Id | \"start\", spec: Omit<ConversationSpec, \"parent\">, ctx: Context): Promise<ConversationHandle<Cfg>>;\n\tcollapse(instructions: string | undefined, ctx: Context): Promise<Id>;\n\treset(handoff: string | undefined, ctx: Context): Promise<void>;\n\tabort(ctx: Context): Promise<void>;\n\twaitForIdle(ctx: Context): Promise<void>;\n\thooks<T extends JsonObject, K extends AnyKind>(\n\t\tnamespace: Namespace<T>,\n\t\tkind: K,\n\t\thandlers: Partial<HooksOf<K>>,\n\t\topts?: { subtree?: boolean },\n\t): () => void;\n\twatch(ctx: Context): Promise<Watch>;\n}\nexport interface InputHandle {\n\treadonly id: Id;\n\tresult(ctx: Context): Promise<Input | undefined>;\n\twait(ctx: Context): Promise<Input>;\n\tabort(ctx: Context): Promise<\"aborted\" | \"already_placed\" | \"not_found\">;\n}\n\nconst KERNEL: Invoker = { type: \"kernel\" };\n\nexport class Harness<Ks extends readonly AnyKind[] = []> {\n\tprivate readonly session: Session;\n\tprivate readonly scheduler: Scheduler;\n\tprivate readonly views: ViewManager;\n\tprivate readonly kinds: Map<string, AnyKind>;\n\tprivate readonly namespaces = new Map<string, NamespaceRegistration>();\n\tprivate readonly tools = new Map<string, AnyToolDeclaration>();\n\tprivate readonly sectionMap = new Map<string, SystemSection>();\n\tprivate readonly entryKinds = new Map<string, EntryKind>();\n\tprivate readonly revisions = { sections: 0, tools: 0 };\n\tprivate readonly plugins: Map<string, PluginHandler>;\n\tprivate readonly hookRegistrations: HookRegistration[] = [];\n\tprivate readonly conversationListeners = new Set<(conversation: ConversationHandle<ConfigFor<Ks>>) => void>();\n\tprivate readonly onReport: (error: unknown) => void;\n\tprivate readonly now: () => number;\n\tprivate readonly ctx: Context;\n\tprivate readonly options: HarnessOptions<Ks>;\n\tprivate resumed = false;\n\tprivate suspended = false;\n\n\tstatic async open<Ks extends readonly AnyKind[] = []>(\n\t\tstorage: Storage,\n\t\toptions: HarnessOptions<Ks> &\n\t\t\t(DisjointConfig<[...BuiltinKinds, ...Ks]> extends true\n\t\t\t\t? unknown\n\t\t\t\t: { readonly __error: \"config keys collide across kinds\" }),\n\t\tctx: Context,\n\t): Promise<Harness<Ks>> {\n\t\tconst h = new Harness<Ks>(storage, options, ctx);\n\t\tawait h.init();\n\t\treturn h;\n\t}\n\n\tprivate constructor(storage: Storage, options: HarnessOptions<Ks>, ctx: Context) {\n\t\tthis.ctx = ctx;\n\t\tthis.options = options;\n\t\tthis.now = options.now ?? Date.now;\n\t\tthis.onReport = (error) => {\n\t\t\ttry {\n\t\t\t\toptions.onReport?.(error);\n\t\t\t} catch {}\n\t\t};\n\t\t// Fixed core, installed internally. User kinds may not replace or shadow a built-in.\n\t\tconst builtins: AnyKind[] = [generation, tool, postTools, collapse, job, plugin];\n\t\tthis.kinds = new Map(builtins.map((k) => [k.name, k]));\n\t\tfor (const k of options.taskKinds ?? []) {\n\t\t\tif (k.name.startsWith(\"pi.\"))\n\t\t\t\tthrow new Error(`task kind \"${k.name}\": names beginning with \"pi.\" are reserved`);\n\t\t\tif (this.kinds.has(k.name)) throw new Error(`task kind \"${k.name}\" registered twice`);\n\t\t\tthis.kinds.set(k.name, k);\n\t\t}\n\t\tfor (const t of options.tools ?? []) this.registerTool(t, \"open\");\n\t\tfor (const s of Object.values(systemSections)) this.sectionMap.set(s.key, s as SystemSection);\n\t\tfor (const s of options.sections ?? []) this.registerSection(s, \"open\");\n\t\tfor (const e of Object.values(builtinEntries)) this.entryKinds.set(e.kind, e as EntryKind);\n\t\tthis.plugins = new Map(Object.entries(options.plugins ?? {}));\n\t\tthis.session = new Session(storage, this.kinds, this.namespaces, this.now); // throws if the Storage already has an owner; validates config disjointness\n\t\tthis.session.onReport = this.onReport;\n\t\tthis.views = new ViewManager(this.session, this.onReport);\n\t\tthis.session.lineListeners.add((result) => this.views.update(result));\n\t\tthis.session.listeners.add((result) => {\n\t\t\tthis.views.deliver();\n\t\t\tfor (const conversation of result.changes.conversations) this.notifyConversation(conversation);\n\t\t});\n\t\tconst self = this;\n\t\tconst hooksFor = createHookRunners(\n\t\t\t() => this.hookRegistrations,\n\t\t\t(c) => this.session.index.ancestors(c),\n\t\t\tthis.onReport,\n\t\t);\n\t\tthis.scheduler = new Scheduler({\n\t\t\tsession: this.session,\n\t\t\tkinds: this.kinds,\n\t\t\tonReport: this.onReport,\n\t\t\tctx,\n\t\t\truntime(task, invoker, _ictx): Runtime {\n\t\t\t\treturn {\n\t\t\t\t\ttaskId: task.id,\n\t\t\t\t\tconversationId: task.conversationId,\n\t\t\t\t\tkind: invoker.kind,\n\t\t\t\t\tcommit: (fn, c) => {\n\t\t\t\t\t\tconst owns = self.session.liveTasks.get(task.id)?.owns ?? [];\n\t\t\t\t\t\tconst docs = owns.flatMap((id): DocRef[] => [\n\t\t\t\t\t\t\t{ doc: \"rewindable\", conversationId: id },\n\t\t\t\t\t\t\t{ doc: \"sticky\", conversationId: id },\n\t\t\t\t\t\t]);\n\t\t\t\t\t\treturn self.session\n\t\t\t\t\t\t\t.commit(invoker, (tx, lineCtx) => fn(tx, self.session.liveTasks.get(task.id)!, lineCtx), c, {\n\t\t\t\t\t\t\t\tdocs,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.then((r) => r.value);\n\t\t\t\t\t},\n\t\t\t\t\thooks: hooksFor(invoker.kind, { taskId: task.id, conversationId: task.conversationId }),\n\t\t\t\t\tmodels: options.models,\n\t\t\t\t\ttools: self.tools,\n\t\t\t\t\tregistries: {\n\t\t\t\t\t\tsections: {\n\t\t\t\t\t\t\tmap: self.sectionMap,\n\t\t\t\t\t\t\tget revision() {\n\t\t\t\t\t\t\t\treturn self.revisions.sections;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttools: {\n\t\t\t\t\t\t\tmap: self.tools,\n\t\t\t\t\t\t\tget revision() {\n\t\t\t\t\t\t\t\treturn self.revisions.tools;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tkinds: self.kinds,\n\t\t\t\t\tprocessHost: options.processHost,\n\t\t\t\t\tplugins: self.plugins,\n\t\t\t\t\tnow: self.now,\n\t\t\t\t\tsleep: (untilMs, c) =>\n\t\t\t\t\t\tnew Promise((resolve, reject) => {\n\t\t\t\t\t\t\tconst ms = Math.max(0, untilMs - Date.now());\n\t\t\t\t\t\t\tconst t = setTimeout(() => {\n\t\t\t\t\t\t\t\tc.abortSignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t}, ms);\n\t\t\t\t\t\t\tconst onAbort = () => {\n\t\t\t\t\t\t\t\tclearTimeout(t);\n\t\t\t\t\t\t\t\treject(c.abortSignal?.reason ?? new Error(\"aborted\"));\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tc.abortSignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\t\t\t}),\n\t\t\t\t\twaitForInput: (id, c) => self.scheduler.waitForInput(id, c),\n\t\t\t\t\twaitForTask: (id, c) => self.scheduler.waitForTask(id, c),\n\t\t\t\t\tabortTask: async (id, c) => {\n\t\t\t\t\t\tawait self.session.onLine(async (lineCtx) => {\n\t\t\t\t\t\t\tself.assertInvocation(invoker);\n\t\t\t\t\t\t\tconst target = self.session.liveTasks.get(id) ?? (await self.session.storage.task(id, lineCtx));\n\t\t\t\t\t\t\tif (target === undefined) throw new Error(`task ${id} not found`);\n\t\t\t\t\t\t\tself.assertTaskConversationScope(task.id, target.conversationId);\n\t\t\t\t\t\t}, c);\n\t\t\t\t\t\treturn self.scheduler.abortTask(id, c);\n\t\t\t\t\t},\n\t\t\t\t\tabortConversation: async (id, c) => {\n\t\t\t\t\t\tawait self.session.onLine(() => {\n\t\t\t\t\t\t\tself.assertInvocation(invoker);\n\t\t\t\t\t\t\tself.assertOwnedConversation(task.id, id);\n\t\t\t\t\t\t}, c);\n\t\t\t\t\t\tconst h = await self.conversation(id, c);\n\t\t\t\t\t\tif (h) await h.abort(c);\n\t\t\t\t\t},\n\t\t\t\t\tcreateOwnedConversation: (spec, c) =>\n\t\t\t\t\t\tself.session\n\t\t\t\t\t\t\t.commit(\n\t\t\t\t\t\t\t\tKERNEL,\n\t\t\t\t\t\t\t\t(tx) => {\n\t\t\t\t\t\t\t\t\tself.assertInvocation(invoker);\n\t\t\t\t\t\t\t\t\treturn tx.createOwnedConversation(task.id, task.conversationId, spec);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tc,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.then((result) => result.value),\n\t\t\t\t\tsendOwned: (id, input, c) =>\n\t\t\t\t\t\tself.session\n\t\t\t\t\t\t\t.commit(\n\t\t\t\t\t\t\t\tKERNEL,\n\t\t\t\t\t\t\t\t(tx) => {\n\t\t\t\t\t\t\t\t\tself.assertInvocation(invoker);\n\t\t\t\t\t\t\t\t\tself.assertOwnedConversation(task.id, id);\n\t\t\t\t\t\t\t\t\treturn tx.send(id, input);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tc,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tdocs: [\n\t\t\t\t\t\t\t\t\t\t{ doc: \"rewindable\", conversationId: id },\n\t\t\t\t\t\t\t\t\t\t{ doc: \"sticky\", conversationId: id },\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.then((r) => r.value),\n\t\t\t\t\tcontext: (c, at, cx) => self.session.commit(invoker, (tx) => tx.context(c, at), cx).then((r) => r.value),\n\t\t\t\t\tnewestEntry: (c, opts, cx) =>\n\t\t\t\t\t\tself.session.commit(invoker, (tx) => tx.newestEntry(c, opts), cx).then((r) => r.value),\n\t\t\t\t\trewindable: (c, cx) =>\n\t\t\t\t\t\tself.session\n\t\t\t\t\t\t\t.commit(invoker, (tx) => tx.snapshot({ doc: \"rewindable\", conversationId: c }), cx, {\n\t\t\t\t\t\t\t\tdocs: [{ doc: \"rewindable\", conversationId: c }],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.then((r) => r.value),\n\t\t\t\t\tsticky: (c, cx) =>\n\t\t\t\t\t\tself.session\n\t\t\t\t\t\t\t.commit(invoker, (tx) => tx.snapshot({ doc: \"sticky\", conversationId: c }), cx, {\n\t\t\t\t\t\t\t\tdocs: [{ doc: \"sticky\", conversationId: c }],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.then((r) => r.value),\n\t\t\t\t\trewindableAsOf: (c, at, cx) =>\n\t\t\t\t\t\tself.session.commit(invoker, (tx) => tx.rewindableAsOf(c, at), cx).then((r) => r.value),\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate notifyConversation(conversation: Conversation): void {\n\t\tif (this.conversationListeners.size === 0) return;\n\t\tconst handle = this.handle(conversation);\n\t\tfor (const listener of [...this.conversationListeners]) {\n\t\t\ttry {\n\t\t\t\tlistener(handle);\n\t\t\t} catch (error) {\n\t\t\t\tthis.onReport(error);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate assertInvocation(invoker: Extract<Invoker, { type: \"task\" }>): void {\n\t\tif (!invoker.token.alive) throw new Forbidden(\"operation from a finished invocation\");\n\t\tconst live = this.session.liveTasks.get(invoker.id);\n\t\tif (live === undefined) throw new Forbidden(\"operation from a task that is not live\");\n\t\tif (invoker.mode === \"run\" && live.abort === true) throw new Forbidden(\"operation from a marked run invocation\");\n\t}\n\n\tprivate assertTaskConversationScope(taskId: Id, conversationId: Id): void {\n\t\tconst task = this.session.liveTasks.get(taskId);\n\t\tif (task?.conversationId === conversationId) return;\n\t\tif (task?.owns.some((root) => this.session.index.subtree(root).has(conversationId))) return;\n\t\tthrow new Forbidden(`conversation ${conversationId} is outside task ${taskId}'s subtree`);\n\t}\n\n\tprivate assertOwnedConversation(taskId: Id, conversationId: Id): void {\n\t\tconst task = this.session.liveTasks.get(taskId);\n\t\tif (task === undefined || !task.owns.some((root) => this.session.index.subtree(root).has(conversationId))) {\n\t\t\tthrow new Forbidden(`conversation ${conversationId} is not owned by task ${taskId}`);\n\t\t}\n\t}\n\n\tprivate async init() {\n\t\tconst { session } = this;\n\t\tconst convs = await session.read((s, ctx) => s.conversations(ctx), this.ctx);\n\t\tfor (const c of convs) session.conversationRecords.set(c.id, c);\n\t\tconst live = await session.read((s, ctx) => s.scanTasks({ status: [\"pending\", \"running\"] }, ctx), this.ctx);\n\t\tfor (const task of live) session.liveTasks.set(task.id, task);\n\t\t// Owner tasks that are terminal but still own existing conversations: needed for ancestry.\n\t\tconst owners = new Set(convs.map((c) => c.owner).filter((o): o is Id => o !== undefined));\n\t\tfor (const id of owners)\n\t\t\tif (!session.liveTasks.has(id)) {\n\t\t\t\tconst t = await session.read((s, ctx) => s.task(id, ctx), this.ctx);\n\t\t\t\tif (t) session.ownerTaskCache.set(id, t);\n\t\t\t}\n\t\tif (convs.length === 0) {\n\t\t\tawait session.commit(\n\t\t\t\tKERNEL,\n\t\t\t\t(tx) =>\n\t\t\t\t\ttx.createConversation({ rewindable: this.options.root?.rewindable, sticky: this.options.root?.sticky }),\n\t\t\t\tthis.ctx,\n\t\t\t);\n\t\t}\n\t}\n\n\tresume() {\n\t\tif (this.suspended) throw new Error(\"cannot resume a suspended harness; reopen storage with a new harness\");\n\t\tif (this.resumed) return;\n\t\tthis.resumed = true;\n\t\tvoid this.reconcileOrphans()\n\t\t\t.then(() => {\n\t\t\t\tif (!this.suspended) this.scheduler.resume();\n\t\t\t})\n\t\t\t.catch((error) => this.onReport(error));\n\t}\n\tprivate async reconcileOrphans(): Promise<void> {\n\t\tconst orphaned = [...this.session.liveTasks.values()].filter((task) => !this.kinds.has(task.kind));\n\t\tif (orphaned.length === 0) return;\n\t\tconst docs = [...new Set(orphaned.map((task) => task.conversationId))].map(\n\t\t\t(conversationId): DocRef => ({ doc: \"sticky\", conversationId }),\n\t\t);\n\t\tawait this.session.commit(\n\t\t\tKERNEL,\n\t\t\t(tx) => {\n\t\t\t\tfor (const task of orphaned) tx.setTask({ ...task, status: \"terminal\", outcome: { status: \"orphaned\" } });\n\t\t\t},\n\t\t\tthis.ctx,\n\t\t\t{ docs },\n\t\t);\n\t}\n\tquiescent(): boolean {\n\t\treturn this.scheduler.quiescent();\n\t}\n\thold(): () => void {\n\t\tif (!this.scheduler.quiescent()) throw new Error(\"cannot hold a non-quiescent harness; suspend it instead\");\n\t\treturn this.scheduler.hold();\n\t}\n\t/** Cancel and join in-process invocations, clear transient waits, then close without terminalizing tasks. */\n\tasync suspend(ctx: Context): Promise<void> {\n\t\tif (this.suspended) return;\n\t\tthis.suspended = true;\n\t\tawait this.scheduler.joinAll();\n\t\tconst tools = [...this.session.liveTasks.values()].filter((task) => task.kind === \"pi.tool\");\n\t\tif (tools.length > 0) {\n\t\t\tconst docs = [...new Set(tools.map((task) => task.conversationId))].map(\n\t\t\t\t(conversationId): DocRef => ({ doc: \"sticky\", conversationId }),\n\t\t\t);\n\t\t\tawait this.session.commit(\n\t\t\t\tKERNEL,\n\t\t\t\t(tx) => {\n\t\t\t\t\tfor (const task of tools) {\n\t\t\t\t\t\tconst index = (task.input as { index: number }).index;\n\t\t\t\t\t\tconst slot = tx.sticky(task.conversationId).turn.tools[index];\n\t\t\t\t\t\tif (slot?.waitingOn !== undefined) delete slot.waitingOn;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t\t{ docs },\n\t\t\t);\n\t\t}\n\t\tthis.views.close();\n\t\tawait this.session.close(ctx);\n\t}\n\n\t// --- registries --------------------------------------------------------------\n\n\tregisterTaskKind<K extends AnyKind>(kind: K): () => void {\n\t\tif (kind.name.startsWith(\"pi.\"))\n\t\t\tthrow new Error(`task kind \"${kind.name}\": names beginning with \"pi.\" are reserved`);\n\t\tif (this.kinds.has(kind.name)) throw new Error(`task kind \"${kind.name}\" already registered`);\n\t\tthis.session.defaults.register(kind);\n\t\tthis.kinds.set(kind.name, kind);\n\t\tthis.scheduler.kick();\n\t\treturn () => {\n\t\t\tif (this.kinds.get(kind.name) !== kind) return;\n\t\t\tthis.kinds.delete(kind.name);\n\t\t\tthis.session.defaults.unregister(kind);\n\t\t};\n\t}\n\n\tnamespace<T extends JsonObject>(\n\t\tid: string,\n\t\tdefaults: NamespaceDefaults<T>,\n\t\topts: { view?: (slice: Readonly<T>) => JsonValue } = {},\n\t): Namespace<T> {\n\t\tif (!/^[a-z][a-z0-9_.-]*$/i.test(id) || id.startsWith(\"pi.\")) throw new Error(`invalid namespace \"${id}\"`);\n\t\tif (this.namespaces.has(id)) throw new Error(`namespace \"${id}\" already registered`);\n\t\tconst stored = JSON.parse(JSON.stringify(defaults)) as {\n\t\t\trewindable?: JsonObject;\n\t\t\tsticky?: JsonObject;\n\t\t\tsession?: JsonObject;\n\t\t};\n\t\tconst routes = new Map<string, \"rewindable\" | \"sticky\" | \"session\">();\n\t\tfor (const doc of [\"rewindable\", \"sticky\", \"session\"] as const) {\n\t\t\tfor (const key of Object.keys(stored[doc] ?? {})) {\n\t\t\t\tif (routes.has(key))\n\t\t\t\t\tthrow new Error(`namespace \"${id}\" key \"${key}\" is declared in more than one document`);\n\t\t\t\troutes.set(key, doc);\n\t\t\t}\n\t\t}\n\t\tlet token!: Namespace<T>;\n\t\ttoken = {\n\t\t\tid,\n\t\t\tunregister: () => {\n\t\t\t\tif (this.namespaces.get(id)?.token !== token) return;\n\t\t\t\tthis.namespaces.delete(id);\n\t\t\t\tfor (let index = this.hookRegistrations.length - 1; index >= 0; index--) {\n\t\t\t\t\tif ((this.hookRegistrations[index]!.namespace as object) === token)\n\t\t\t\t\t\tthis.hookRegistrations.splice(index, 1);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tconst registration: NamespaceRegistration = {\n\t\t\ttoken,\n\t\t\tdefaults: {\n\t\t\t\trewindable: stored.rewindable ?? {},\n\t\t\t\tsticky: stored.sticky ?? {},\n\t\t\t\tsession: stored.session ?? {},\n\t\t\t},\n\t\t\troutes,\n\t\t\tproject: opts.view === undefined ? undefined : (slice) => opts.view!(slice as Readonly<T>),\n\t\t};\n\t\tthis.namespaces.set(id, registration);\n\t\treturn token;\n\t}\n\n\t/** Register a tool. A duplicate name rejects. Unregister removes only this exact declaration; idempotent. */\n\tregisterTool(tool: AnyToolDeclaration, at: \"open\" | \"runtime\" = \"runtime\"): () => void {\n\t\tif (this.tools.has(tool.name)) throw new Error(`tool \"${tool.name}\" already registered`);\n\t\tthis.tools.set(tool.name, tool);\n\t\tthis.revisions.tools++;\n\t\tvoid at;\n\t\treturn () => {\n\t\t\tif (this.tools.get(tool.name) === tool) {\n\t\t\t\tthis.tools.delete(tool.name);\n\t\t\t\tthis.revisions.tools++;\n\t\t\t}\n\t\t};\n\t}\n\tregisterSection(section: SystemSection, at: \"open\" | \"runtime\" = \"runtime\"): () => void {\n\t\tif (this.sectionMap.has(section.key)) throw new Error(`section \"${section.key}\" already registered`);\n\t\tthis.sectionMap.set(section.key, section);\n\t\tthis.revisions.sections++;\n\t\tvoid at;\n\t\treturn () => {\n\t\t\tif (this.sectionMap.get(section.key) === section) {\n\t\t\t\tthis.sectionMap.delete(section.key);\n\t\t\t\tthis.revisions.sections++;\n\t\t\t}\n\t\t};\n\t}\n\tregisterEntryKind(kind: EntryKind): () => void {\n\t\tif (kind.kind.startsWith(\"pi.\"))\n\t\t\tthrow new Error(`entry kind \"${kind.kind}\": names beginning with \"pi.\" are reserved`);\n\t\tif (this.entryKinds.has(kind.kind)) throw new Error(`entry kind \"${kind.kind}\" already registered`);\n\t\tthis.entryKinds.set(kind.kind, kind);\n\t\treturn () => {\n\t\t\tif (this.entryKinds.get(kind.kind) === kind) this.entryKinds.delete(kind.kind);\n\t\t};\n\t}\n\t/** Register namespace-bound handlers for one kind's hook points, harness-wide. Both tokens must be current. */\n\thooks<T extends JsonObject, K extends AnyKind>(\n\t\tnamespace: Namespace<T>,\n\t\tkind: K,\n\t\thandlers: Partial<HooksOf<K>>,\n\t\t_opts?: Readonly<Record<string, never>>,\n\t): () => void {\n\t\treturn this.addHooks({ namespace: this.checkNamespace(namespace), kind: this.checkKind(kind), handlers });\n\t}\n\tprivate checkKind(kind: AnyKind): AnyKind {\n\t\tif (this.kinds.get(kind.name) !== kind) throw new Error(`kind \"${kind.name}\" is not the registered token`);\n\t\treturn kind;\n\t}\n\tprivate checkNamespace<T extends JsonObject>(namespace: Namespace<T>): Namespace<JsonObject> {\n\t\tif (this.namespaces.get(namespace.id)?.token !== namespace)\n\t\t\tthrow new Forbidden(`namespace \"${namespace.id}\" is stale`);\n\t\treturn namespace as unknown as Namespace<JsonObject>;\n\t}\n\tprivate addHooks(reg: HookRegistration): () => void {\n\t\tthis.hookRegistrations.push(reg);\n\t\tlet done = false;\n\t\treturn () => {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\tconst index = this.hookRegistrations.indexOf(reg);\n\t\t\tif (index >= 0) this.hookRegistrations.splice(index, 1);\n\t\t};\n\t}\n\n\t// --- conversations -------------------------------------------------------------\n\n\tasync root(ctx: Context): Promise<ConversationHandle<ConfigFor<Ks>>> {\n\t\treturn this.conversation(1, ctx).then((c) => c!);\n\t}\n\tonConversation(listener: (conversation: ConversationHandle<ConfigFor<Ks>>) => void): () => void {\n\t\tthis.conversationListeners.add(listener);\n\t\tfor (const conversation of this.session.conversationRecords.values()) {\n\t\t\ttry {\n\t\t\t\tlistener(this.handle(conversation));\n\t\t\t} catch (error) {\n\t\t\t\tthis.onReport(error);\n\t\t\t}\n\t\t}\n\t\treturn () => this.conversationListeners.delete(listener);\n\t}\n\tasync conversation(id: Id, ctx: Context): Promise<ConversationHandle<ConfigFor<Ks>> | undefined> {\n\t\tconst c = await this.session.read((s, lineCtx) => s.conversation(id, lineCtx), ctx);\n\t\treturn c === undefined ? undefined : this.handle(c);\n\t}\n\tasync createConversation(\n\t\tspec: ConversationSpec & { input?: UserInput },\n\t\tctx: Context,\n\t): Promise<ConversationHandle<ConfigFor<Ks>>> {\n\t\tconst { input, ...rest } = spec;\n\t\tconst id = await this.session\n\t\t\t.commit(\n\t\t\t\tKERNEL,\n\t\t\t\tasync (tx) => {\n\t\t\t\t\tconst id = tx.createConversation(rest);\n\t\t\t\t\tif (input !== undefined) await tx.send(id, { content: input });\n\t\t\t\t\treturn id;\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t)\n\t\t\t.then((r) => r.value);\n\t\treturn (await this.conversation(id, ctx))!;\n\t}\n\tentries(scan: EntryScan, ctx: Context): Promise<Entry[]> {\n\t\treturn this.session.read((s, lineCtx) => s.scanEntries(scan, lineCtx), ctx);\n\t}\n\tgetTask(id: Id, ctx: Context): Promise<Task | undefined> {\n\t\treturn this.session.read((s, lineCtx) => s.task(id, lineCtx), ctx);\n\t}\n\tasync abortInput(id: Id, ctx: Context, conversationId?: Id): Promise<\"aborted\" | \"already_placed\" | \"not_found\"> {\n\t\tif (conversationId !== undefined) {\n\t\t\tconst input = await this.session.read((storage, lineCtx) => storage.input(id, lineCtx), ctx);\n\t\t\tif (input !== undefined && input.conversationId !== conversationId)\n\t\t\t\tthrow new Forbidden(`input ${id} is outside conversation ${conversationId}`);\n\t\t}\n\t\treturn this.inputHandle(id).abort(ctx);\n\t}\n\tabortTask(id: Id, ctx: Context): Promise<\"marked\" | \"terminal\"> {\n\t\treturn this.scheduler.abortTask(id, ctx);\n\t}\n\t/** Durably mark a task for abort without signalling its invocation; the scheduler aborts it when it next drains. */\n\tmarkTask(id: Id, ctx: Context): Promise<\"marked\" | \"terminal\"> {\n\t\treturn this.session\n\t\t\t.commit(\n\t\t\t\tKERNEL,\n\t\t\t\tasync (tx) => {\n\t\t\t\t\tconst t = await tx.task(id);\n\t\t\t\t\tif (t === undefined) throw new Error(`task ${id} not found`);\n\t\t\t\t\tif (t.status === \"terminal\") return \"terminal\" as const;\n\t\t\t\t\ttx.markTask(id);\n\t\t\t\t\treturn \"marked\" as const;\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t)\n\t\t\t.then((r) => r.value);\n\t}\n\twaitForIdle(ctx: Context): Promise<void> {\n\t\treturn this.scheduler.waitForIdle(undefined, ctx);\n\t}\n\twaitForTask(id: Id, ctx: Context): Promise<Task> {\n\t\treturn this.scheduler.waitForTask(id, ctx);\n\t}\n\n\t/** Signals every invocation, waits for them, closes storage. Writes nothing. */\n\tasync close(ctx: Context) {\n\t\tawait this.suspend(ctx);\n\t}\n\n\tprivate handle(c: Conversation): ConversationHandle<ConfigFor<Ks>> {\n\t\tconst self = this;\n\t\tconst docs: DocRef[] = [\n\t\t\t{ doc: \"rewindable\", conversationId: c.id },\n\t\t\t{ doc: \"sticky\", conversationId: c.id },\n\t\t];\n\t\tconst hostInvoker: Invoker = { type: \"host\", conversationId: c.id };\n\t\tconst kernelInvoker: Invoker = { type: \"kernel\", conversationId: c.id };\n\t\tconst host = <T>(fn: (tx: HostTx, ctx: Context) => T | Promise<T>, ctx: Context) =>\n\t\t\tself.session.commit(hostInvoker, (tx, lineCtx) => fn(tx, lineCtx), ctx, { docs }).then((r) => r.value);\n\t\tconst kernel = <T>(fn: (tx: TxImpl, ctx: Context) => T | Promise<T>, ctx: Context) =>\n\t\t\tself.session.commit(kernelInvoker, fn, ctx, { docs }).then((r) => r.value);\n\t\tconst config: ConfigFacade<ConfigFor<Ks>> = {\n\t\t\tget: (ctx) =>\n\t\t\t\thost((tx) => {\n\t\t\t\t\tconst cfg = tx.config(c.id);\n\t\t\t\t\tconst out: { [k: string]: JsonValue | undefined } = {};\n\t\t\t\t\tfor (const key of self.session.defaults.route.keys()) out[key] = cfg.get(key);\n\t\t\t\t\treturn out as ConfigFor<Ks>;\n\t\t\t\t}, ctx),\n\t\t\tset: (patch, ctx) =>\n\t\t\t\thost((tx) => {\n\t\t\t\t\tconst cfg = tx.config(c.id);\n\t\t\t\t\tfor (const [key, value] of Object.entries(patch)) {\n\t\t\t\t\t\tif (value === undefined) throw new Error(`config.set(${key}): use config.reset()`);\n\t\t\t\t\t\tcfg.set(key, value as JsonValue);\n\t\t\t\t\t}\n\t\t\t\t}, ctx),\n\t\t\treset: (keys, ctx) =>\n\t\t\t\thost((tx) => {\n\t\t\t\t\tconst cfg = tx.config(c.id);\n\t\t\t\t\tfor (const key of keys) cfg.reset(String(key));\n\t\t\t\t}, ctx),\n\t\t};\n\t\treturn {\n\t\t\tid: c.id,\n\t\t\tconfig,\n\t\t\tasync send(input, ctx) {\n\t\t\t\tconst id = await kernel((tx) => tx.send(c.id, input), ctx);\n\t\t\t\treturn self.inputHandle(id);\n\t\t\t},\n\t\t\twrite: (entry, ctx) => host((tx) => tx.write(c.id, entry), ctx),\n\t\t\tcommit: host,\n\t\t\trewindable: (ctx) => host((tx) => tx.snapshot({ doc: \"rewindable\", conversationId: c.id }), ctx),\n\t\t\tsticky: (ctx) => host((tx) => tx.snapshot({ doc: \"sticky\", conversationId: c.id }), ctx),\n\t\t\tcontext: (ctx) => host((tx) => tx.context(c.id), ctx),\n\t\t\tasync fork(at, spec, ctx) {\n\t\t\t\tconst id = await self.session.fork(c.id, at, spec, ctx);\n\t\t\t\treturn (await self.conversation(id, ctx))!;\n\t\t\t},\n\t\t\tcollapse: (instructions, ctx) =>\n\t\t\t\tkernel(async (tx) => {\n\t\t\t\t\tconst { entries } = await tx.context(c.id);\n\t\t\t\t\tconst state = tx.rewindable(c.id);\n\t\t\t\t\tconst through = chooseThrough(entries, state.keepRecent);\n\t\t\t\t\tif (through === undefined) throw new Error(\"nothing to collapse\");\n\t\t\t\t\treturn tx.createTask({\n\t\t\t\t\t\tkind: \"pi.collapse\",\n\t\t\t\t\t\tconversationId: c.id,\n\t\t\t\t\t\tbackground: true,\n\t\t\t\t\t\tinput: { reason: \"manual\", through, ...(instructions === undefined ? {} : { instructions }) },\n\t\t\t\t\t});\n\t\t\t\t}, ctx),\n\t\t\treset: async (handoff, ctx) => {\n\t\t\t\tawait kernel(\n\t\t\t\t\t(tx) =>\n\t\t\t\t\t\ttx.write(\n\t\t\t\t\t\t\tc.id,\n\t\t\t\t\t\t\thandoff === undefined\n\t\t\t\t\t\t\t\t? { kind: \"pi.reset\", head: \"self\" }\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\tkind: \"pi.handoff\",\n\t\t\t\t\t\t\t\t\t\thead: \"self\",\n\t\t\t\t\t\t\t\t\t\tmodel: [{ role: \"user\", content: handoff, timestamp: self.now() }],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\tctx,\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync abort(ctx) {\n\t\t\t\tconst owned: Id[] = [];\n\t\t\t\tconst marked = await kernel(async (tx) => {\n\t\t\t\t\tconst s = tx.sticky(c.id);\n\t\t\t\t\tconst withdrawn = s.inbox.filter((q) => q.mode !== \"write\").map((q) => q.id);\n\t\t\t\t\tfor (let i = s.inbox.length - 1; i >= 0; i--) if (s.inbox[i]!.mode !== \"write\") s.inbox.splice(i, 1);\n\t\t\t\t\tawait tx.resolveInputs(withdrawn, { status: \"unanswered\", reason: \"aborted\" });\n\t\t\t\t\tfor (const input of withdrawn) tx.emit({ type: \"input.aborted\", input });\n\t\t\t\t\tconst ids: Id[] = [];\n\t\t\t\t\tfor (const t of [...self.session.liveTasks.values()]) {\n\t\t\t\t\t\tif (t.conversationId !== c.id || t.background) continue;\n\t\t\t\t\t\tfor (const o of t.owns) owned.push(o);\n\t\t\t\t\t\tif (t.abort !== true) tx.markTask(t.id);\n\t\t\t\t\t\tids.push(t.id);\n\t\t\t\t\t}\n\t\t\t\t\treturn ids;\n\t\t\t\t}, ctx);\n\t\t\t\tfor (const id of marked) await self.scheduler.abortTask(id, ctx);\n\t\t\t\tawait self.scheduler.waitForIdle(c.id, ctx);\n\t\t\t\tawait Promise.all(owned.map((o) => self.scheduler.waitForIdle(o, ctx)));\n\t\t\t},\n\t\t\twaitForIdle: (ctx) => self.scheduler.waitForIdle(c.id, ctx),\n\t\t\thooks: (namespace, kind, handlers, opts) =>\n\t\t\t\tself.addHooks({\n\t\t\t\t\tnamespace: self.checkNamespace(namespace),\n\t\t\t\t\tkind: self.checkKind(kind),\n\t\t\t\t\thandlers,\n\t\t\t\t\tconversationId: c.id,\n\t\t\t\t\tsubtree: opts?.subtree,\n\t\t\t\t}),\n\t\t\twatch: (ctx) => self.watch(c, ctx),\n\t\t};\n\t}\n\n\t/** Capture and subscribe in one line operation. */\n\tprivate async watch(conversation: Conversation, ctx: Context): Promise<Watch> {\n\t\treturn this.session\n\t\t\t.commit(\n\t\t\t\t{ type: \"host\", conversationId: conversation.id },\n\t\t\t\tasync (tx) => {\n\t\t\t\t\tconst entries = await captureActiveTranscript((scan) => tx.scanEntries(scan), conversation.id);\n\t\t\t\t\treturn this.views.watch(conversation, entries);\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t\t{\n\t\t\t\t\tdocs: [\n\t\t\t\t\t\t{ doc: \"rewindable\", conversationId: conversation.id },\n\t\t\t\t\t\t{ doc: \"sticky\", conversationId: conversation.id },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t)\n\t\t\t.then((result) => result.value);\n\t}\n\n\tprivate inputHandle(id: Id): InputHandle {\n\t\treturn {\n\t\t\tid,\n\t\t\tresult: (ctx) => this.session.read((s, lineCtx) => s.input(id, lineCtx), ctx),\n\t\t\twait: (ctx) => this.scheduler.waitForInput(id, ctx),\n\t\t\tabort: (ctx) =>\n\t\t\t\tthis.session.commit(KERNEL, (tx) => tx.withdrawInput(id), ctx, { docs: [] }).then((r) => r.value),\n\t\t};\n\t}\n}\n\n/**\n * §9: H = newest fork-visible entry with a head. Active transcript = H plus every fork-visible entry\n * with id ≥ H.head, chronological, nothing dropped inside the range; the whole transcript if no head.\n */\nexport async function captureActiveTranscript(\n\tscan: (s: EntryScan) => Promise<Entry[]>,\n\tconversationId: Id,\n): Promise<Entry[]> {\n\tconst [h] = await scan({ conversationId, withHead: true, limit: 1 });\n\tconst from = h?.head;\n\tconst out: Entry[] = [];\n\tlet before: Id | undefined;\n\tfor (;;) {\n\t\tconst page = await scan({ conversationId, ...(before === undefined ? {} : { before }), limit: 256 });\n\t\tlet done = page.length < 256;\n\t\tfor (const e of page) {\n\t\t\tif (from !== undefined && e.id < from) {\n\t\t\t\tdone = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tout.push(e);\n\t\t}\n\t\tif (done) break;\n\t\tbefore = page[page.length - 1]!.id;\n\t}\n\treturn out.reverse();\n}\n\nexport { withAbortSignal, isCoreKind };\nexport type { ConversationView, Envelope, ViewEvent } from \"./types.ts\";\nexport type { Watch } from \"./view.ts\";\nexport { applyEnvelope, WATCH_CAPACITY } from \"./view.ts\";\n/** The built-in kinds, as typed witnesses for `api.task`, `waitForTask`, and `hooks(kind, …)`. */\nexport const kinds = { generation, tool, postTools, collapse, job, plugin } as const;\nexport const entries = builtinEntries;\nexport type { ToolDeclaration, TSchema };\n"]}
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../../src/harness/pico3/harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAiB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAwB,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,aAAa,CAAC;AACjE,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAEhB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAEnB,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,SAAS,EAEd,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,EAAE,EACP,KAAK,KAAK,EAEV,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,iBAAiB,EAEtB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EAEpB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,IAAI,EACT,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,WAAW,CAAC;AAMpD,MAAM,WAAW,cAAc,CAAC,EAAE,SAAS,SAAS,OAAO,EAAE,GAAG,EAAE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC7B,+GAA+G;IAC/G,SAAS,CAAC,EAAE,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;KAAE,CAAC;IAChF,oGAAoG;IACpG,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,MAAM,YAAY,GAAG,SAAS;IACnC,OAAO,UAAU;IACjB,OAAO,IAAI;IACX,OAAO,SAAS;IAChB,OAAO,QAAQ;IACf,OAAO,GAAG;IACV,OAAO,MAAM;CACb,CAAC;AACF,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,SAAS,OAAO,EAAE,IAAI,aAAa,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAE/F,MAAM,WAAW,kBAAkB,CAAC,GAAG,SAAS,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACrE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3D,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAClD,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtF,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/G,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IACtE,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,KAAK,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,OAAO,EAC5C,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EACvB,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAC7B,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAC1B,MAAM,IAAI,CAAC;IACd,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;CACpC;AACD,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,GAAG,gBAAgB,GAAG,WAAW,CAAC,CAAC;CACzE;AAID,qBAAa,OAAO,CAAC,EAAE,SAAS,SAAS,OAAO,EAAE,GAAG,EAAE;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4C;IACvE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyC;IAC/D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAC/D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0B;IAC5D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAwE;IAC9G,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAU;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAa,IAAI,CAAC,EAAE,SAAS,SAAS,OAAO,EAAE,GAAG,EAAE,EACnD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,GAC1B,CAAC,cAAc,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,IAAI,GACnD,OAAO,GACP;QAAE,QAAQ,CAAC,OAAO,EAAE,kCAAkC,CAAA;KAAE,CAAC,EAC7D,GAAG,EAAE,OAAO,GACV,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAItB;IAED,OAAO,eAiKN;IAED,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,uBAAuB;YAOjB,IAAI;IAuBlB,MAAM,SASL;YACa,gBAAgB;IAe9B,SAAS,IAAI,OAAO,CAEnB;IACD,IAAI,IAAI,MAAM,IAAI,CAGjB;IACD,6GAA6G;IACvG,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBzC;IAID,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,IAAI,CAYvD;IAED,SAAS,CAAC,CAAC,SAAS,UAAU,EAC7B,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC9B,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,CAAA;KAAO,GACrD,SAAS,CAAC,CAAC,CAAC,CAwCd;IAED,6GAA6G;IAC7G,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,EAAE,GAAE,MAAM,GAAG,SAAqB,GAAG,MAAM,IAAI,CAWrF;IACD,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,GAAE,MAAM,GAAG,SAAqB,GAAG,MAAM,IAAI,CAWtF;IACD,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,IAAI,CAQ7C;IACD,+GAA+G;IAC/G,KAAK,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,OAAO,EAC5C,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EACvB,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAC7B,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GACrC,MAAM,IAAI,CAEZ;IACD,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,QAAQ;IAaV,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAEnE;IACD,cAAc,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAU9F;IACK,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAG/F;IACK,kBAAkB,CACvB,IAAI,EAAE,gBAAgB,GAAG;QAAE,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,EAC9C,GAAG,EAAE,OAAO,GACV,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAc5C;IACD,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAEvD;IACD,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAEvD;IACK,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,SAAS,GAAG,gBAAgB,GAAG,WAAW,CAAC,CAO/G;IACD,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,UAAU,CAAC,CAE9D;IACD,oHAAoH;IACpH,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,UAAU,CAAC,CAc7D;IACD,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvC;IACD,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;IAED,gFAAgF;IAC1E,KAAK,CAAC,GAAG,EAAE,OAAO,iBAEvB;IAED,OAAO,CAAC,MAAM;IAiHd,mDAAmD;YACrC,KAAK;IAmBnB,OAAO,CAAC,WAAW;CASnB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC5C,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,EACxC,cAAc,EAAE,EAAE,GAChB,OAAO,CAAC,KAAK,EAAE,CAAC,CAmBlB;AAED,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AACvC,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxE,YAAY,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC1D,kGAAkG;AAClG,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAkE,CAAC;AACrF,eAAO,MAAM,OAAO;;;;;;;;;;CAAiB,CAAC;AACtC,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../../src/harness/pico3/harness.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context } from \"@earendil-works/chord\";\nimport { withAbortSignal } from \"@earendil-works/chord/context\";\nimport type { TSchema } from \"typebox\";\nimport { createHookRunners, type HookRegistration } from \"./hooks.ts\";\nimport { chooseThrough, collapse } from \"./kinds/collapse.ts\";\nimport { entries as builtinEntries } from \"./kinds/entries.ts\";\nimport { generation } from \"./kinds/generation.ts\";\nimport { job } from \"./kinds/job.ts\";\nimport { plugin } from \"./kinds/plugin.ts\";\nimport { postTools } from \"./kinds/post-tools.ts\";\nimport { tool } from \"./kinds/tool.ts\";\nimport { Scheduler } from \"./scheduler.ts\";\nimport { isCoreKind, Session, type TxImpl } from \"./session.ts\";\nimport { type SystemSection, systemSections } from \"./system.ts\";\nimport {\n\ttype AnyKind,\n\ttype AnyToolDeclaration,\n\ttype ConfigFacade,\n\ttype ConfigOfKinds,\n\ttype ContextView,\n\ttype Conversation,\n\ttype ConversationSpec,\n\ttype DisjointConfig,\n\ttype DocRef,\n\ttype Entry,\n\ttype EntryKind,\n\ttype EntryScan,\n\tForbidden,\n\ttype HooksOf,\n\ttype HostTx,\n\ttype Id,\n\ttype Input,\n\ttype Invoker,\n\ttype JsonObject,\n\ttype JsonValue,\n\ttype Models,\n\ttype Namespace,\n\ttype NamespaceDefaults,\n\ttype NamespaceRegistration,\n\ttype NewEntry,\n\ttype PluginHandler,\n\ttype ProcessHost,\n\ttype RewindableState,\n\ttype Runtime,\n\ttype SendInput,\n\ttype StickyState,\n\ttype Storage,\n\ttype Task,\n\ttype ToolDeclaration,\n\ttype UserInput,\n} from \"./types.ts\";\nimport { ViewManager, type Watch } from \"./view.ts\";\n\n// ---------------------------------------------------------------------------\n// Harness\n// ---------------------------------------------------------------------------\n\nexport interface HarnessOptions<Ks extends readonly AnyKind[] = []> {\n\tmodels: Models;\n\ttools?: AnyToolDeclaration[];\n\t/** Ordinary kinds authored with `defineTask`. Their `config` merges onto `c.config`; keys must be disjoint. */\n\ttaskKinds?: Ks;\n\tsections?: SystemSection[];\n\tplugins?: { [name: string]: PluginHandler };\n\tprocessHost?: ProcessHost;\n\t/** Clock for durable kernel timestamps and retry scheduling. */\n\tnow?: () => number;\n\troot?: { rewindable?: Partial<RewindableState>; sticky?: Partial<StickyState> };\n\t/** Errors from listeners, hooks, watches, and the scheduler. Never delivered as commit failures. */\n\tonReport?: (error: unknown) => void;\n}\n\nexport type BuiltinKinds = readonly [\n\ttypeof generation,\n\ttypeof tool,\n\ttypeof postTools,\n\ttypeof collapse,\n\ttypeof job,\n\ttypeof plugin,\n];\nexport type ConfigFor<Ks extends readonly AnyKind[]> = ConfigOfKinds<[...BuiltinKinds, ...Ks]>;\n\nexport interface ConversationHandle<Cfg extends object = ConfigFor<[]>> {\n\treadonly id: Id;\n\treadonly config: ConfigFacade<Cfg>;\n\tsend(input: SendInput, ctx: Context): Promise<InputHandle>;\n\twrite(entry: NewEntry, ctx: Context): Promise<Id>;\n\tcommit<T>(fn: (tx: HostTx, ctx: Context) => T | Promise<T>, ctx: Context): Promise<T>;\n\trewindable(ctx: Context): Promise<RewindableState>;\n\tsticky(ctx: Context): Promise<StickyState>;\n\tcontext(ctx: Context): Promise<ContextView>;\n\tfork(at: Id | \"start\", spec: Omit<ConversationSpec, \"parent\">, ctx: Context): Promise<ConversationHandle<Cfg>>;\n\tcollapse(instructions: string | undefined, ctx: Context): Promise<Id>;\n\treset(handoff: string | undefined, ctx: Context): Promise<void>;\n\tabort(ctx: Context): Promise<void>;\n\twaitForIdle(ctx: Context): Promise<void>;\n\thooks<T extends JsonObject, K extends AnyKind>(\n\t\tnamespace: Namespace<T>,\n\t\tkind: K,\n\t\thandlers: Partial<HooksOf<K>>,\n\t\topts?: { subtree?: boolean },\n\t): () => void;\n\twatch(ctx: Context): Promise<Watch>;\n}\nexport interface InputHandle {\n\treadonly id: Id;\n\tresult(ctx: Context): Promise<Input | undefined>;\n\twait(ctx: Context): Promise<Input>;\n\tabort(ctx: Context): Promise<\"aborted\" | \"already_placed\" | \"not_found\">;\n}\n\nconst KERNEL: Invoker = { type: \"kernel\" };\n\nexport class Harness<Ks extends readonly AnyKind[] = []> {\n\tprivate readonly session: Session;\n\tprivate readonly scheduler: Scheduler;\n\tprivate readonly views: ViewManager;\n\tprivate readonly kinds: Map<string, AnyKind>;\n\tprivate readonly namespaces = new Map<string, NamespaceRegistration>();\n\tprivate readonly tools = new Map<string, AnyToolDeclaration>();\n\tprivate readonly sectionMap = new Map<string, SystemSection>();\n\tprivate readonly entryKinds = new Map<string, EntryKind>();\n\tprivate readonly revisions = { sections: 0, tools: 0 };\n\tprivate readonly plugins: Map<string, PluginHandler>;\n\tprivate readonly hookRegistrations: HookRegistration[] = [];\n\tprivate readonly conversationListeners = new Set<(conversation: ConversationHandle<ConfigFor<Ks>>) => void>();\n\tprivate readonly onReport: (error: unknown) => void;\n\tprivate readonly now: () => number;\n\tprivate readonly ctx: Context;\n\tprivate readonly options: HarnessOptions<Ks>;\n\tprivate resumed = false;\n\tprivate suspended = false;\n\n\tstatic async open<Ks extends readonly AnyKind[] = []>(\n\t\tstorage: Storage,\n\t\toptions: HarnessOptions<Ks> &\n\t\t\t(DisjointConfig<[...BuiltinKinds, ...Ks]> extends true\n\t\t\t\t? unknown\n\t\t\t\t: { readonly __error: \"config keys collide across kinds\" }),\n\t\tctx: Context,\n\t): Promise<Harness<Ks>> {\n\t\tconst h = new Harness<Ks>(storage, options, ctx);\n\t\tawait h.init();\n\t\treturn h;\n\t}\n\n\tprivate constructor(storage: Storage, options: HarnessOptions<Ks>, ctx: Context) {\n\t\tthis.ctx = ctx;\n\t\tthis.options = options;\n\t\tthis.now = options.now ?? Date.now;\n\t\tthis.onReport = (error) => {\n\t\t\ttry {\n\t\t\t\toptions.onReport?.(error);\n\t\t\t} catch {}\n\t\t};\n\t\t// Fixed core, installed internally. User kinds may not replace or shadow a built-in.\n\t\tconst builtins: AnyKind[] = [generation, tool, postTools, collapse, job, plugin];\n\t\tthis.kinds = new Map(builtins.map((k) => [k.name, k]));\n\t\tfor (const k of options.taskKinds ?? []) {\n\t\t\tif (k.name.startsWith(\"pi.\"))\n\t\t\t\tthrow new Error(`task kind \"${k.name}\": names beginning with \"pi.\" are reserved`);\n\t\t\tif (this.kinds.has(k.name)) throw new Error(`task kind \"${k.name}\" registered twice`);\n\t\t\tthis.kinds.set(k.name, k);\n\t\t}\n\t\tfor (const t of options.tools ?? []) this.registerTool(t, \"open\");\n\t\tfor (const s of Object.values(systemSections)) this.sectionMap.set(s.key, s as SystemSection);\n\t\tfor (const s of options.sections ?? []) this.registerSection(s, \"open\");\n\t\tfor (const e of Object.values(builtinEntries)) this.entryKinds.set(e.kind, e as EntryKind);\n\t\tthis.plugins = new Map(Object.entries(options.plugins ?? {}));\n\t\tthis.session = new Session(storage, this.kinds, this.namespaces, this.now); // throws if the Storage already has an owner; validates config disjointness\n\t\tthis.session.onReport = this.onReport;\n\t\tthis.views = new ViewManager(this.session, this.onReport);\n\t\tthis.session.lineListeners.add((result) => this.views.update(result));\n\t\tthis.session.listeners.add((result) => {\n\t\t\tthis.views.deliver();\n\t\t\tfor (const conversation of result.changes.conversations) this.notifyConversation(conversation);\n\t\t});\n\t\tconst self = this;\n\t\tconst hooksFor = createHookRunners(\n\t\t\t() => this.hookRegistrations,\n\t\t\t(c) => this.session.index.ancestors(c),\n\t\t\tthis.onReport,\n\t\t);\n\t\tthis.scheduler = new Scheduler({\n\t\t\tsession: this.session,\n\t\t\tkinds: this.kinds,\n\t\t\tonReport: this.onReport,\n\t\t\tctx,\n\t\t\truntime(task, invoker, _ictx): Runtime {\n\t\t\t\treturn {\n\t\t\t\t\ttaskId: task.id,\n\t\t\t\t\tconversationId: task.conversationId,\n\t\t\t\t\tkind: invoker.kind,\n\t\t\t\t\tcommit: (fn, c) => {\n\t\t\t\t\t\tconst owns = self.session.liveTasks.get(task.id)?.owns ?? [];\n\t\t\t\t\t\tconst docs = owns.flatMap((id): DocRef[] => [\n\t\t\t\t\t\t\t{ doc: \"rewindable\", conversationId: id },\n\t\t\t\t\t\t\t{ doc: \"sticky\", conversationId: id },\n\t\t\t\t\t\t]);\n\t\t\t\t\t\treturn self.session\n\t\t\t\t\t\t\t.commit(invoker, (tx, lineCtx) => fn(tx, self.session.liveTasks.get(task.id)!, lineCtx), c, {\n\t\t\t\t\t\t\t\tdocs,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.then((r) => r.value);\n\t\t\t\t\t},\n\t\t\t\t\thooks: hooksFor(invoker.kind, { taskId: task.id, conversationId: task.conversationId }),\n\t\t\t\t\tmodels: options.models,\n\t\t\t\t\ttools: self.tools,\n\t\t\t\t\tregistries: {\n\t\t\t\t\t\tsections: {\n\t\t\t\t\t\t\tmap: self.sectionMap,\n\t\t\t\t\t\t\tget revision() {\n\t\t\t\t\t\t\t\treturn self.revisions.sections;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttools: {\n\t\t\t\t\t\t\tmap: self.tools,\n\t\t\t\t\t\t\tget revision() {\n\t\t\t\t\t\t\t\treturn self.revisions.tools;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tkinds: self.kinds,\n\t\t\t\t\tprocessHost: options.processHost,\n\t\t\t\t\tplugins: self.plugins,\n\t\t\t\t\tnow: self.now,\n\t\t\t\t\tsleep: (untilMs, c) =>\n\t\t\t\t\t\tnew Promise((resolve, reject) => {\n\t\t\t\t\t\t\tconst ms = Math.max(0, untilMs - Date.now());\n\t\t\t\t\t\t\tconst t = setTimeout(() => {\n\t\t\t\t\t\t\t\tc.abortSignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t}, ms);\n\t\t\t\t\t\t\tconst onAbort = () => {\n\t\t\t\t\t\t\t\tclearTimeout(t);\n\t\t\t\t\t\t\t\treject(c.abortSignal?.reason ?? new Error(\"aborted\"));\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tc.abortSignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\t\t\t}),\n\t\t\t\t\twaitForInput: (id, c) => self.scheduler.waitForInput(id, c),\n\t\t\t\t\twaitForTask: (id, c) => self.scheduler.waitForTask(id, c),\n\t\t\t\t\tabortTask: async (id, c) => {\n\t\t\t\t\t\tawait self.session.onLine(async (lineCtx) => {\n\t\t\t\t\t\t\tself.assertInvocation(invoker);\n\t\t\t\t\t\t\tconst target = self.session.liveTasks.get(id) ?? (await self.session.storage.task(id, lineCtx));\n\t\t\t\t\t\t\tif (target === undefined) throw new Error(`task ${id} not found`);\n\t\t\t\t\t\t\tself.assertTaskConversationScope(task.id, target.conversationId);\n\t\t\t\t\t\t}, c);\n\t\t\t\t\t\treturn self.scheduler.abortTask(id, c);\n\t\t\t\t\t},\n\t\t\t\t\tabortConversation: async (id, c) => {\n\t\t\t\t\t\tawait self.session.onLine(() => {\n\t\t\t\t\t\t\tself.assertInvocation(invoker);\n\t\t\t\t\t\t\tself.assertOwnedConversation(task.id, id);\n\t\t\t\t\t\t}, c);\n\t\t\t\t\t\tconst h = await self.conversation(id, c);\n\t\t\t\t\t\tif (h) await h.abort(c);\n\t\t\t\t\t},\n\t\t\t\t\tcreateOwnedConversation: (spec, c) =>\n\t\t\t\t\t\tself.session\n\t\t\t\t\t\t\t.commit(\n\t\t\t\t\t\t\t\tKERNEL,\n\t\t\t\t\t\t\t\t(tx) => {\n\t\t\t\t\t\t\t\t\tself.assertInvocation(invoker);\n\t\t\t\t\t\t\t\t\treturn tx.createOwnedConversation(task.id, task.conversationId, spec);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tc,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.then((result) => result.value),\n\t\t\t\t\tsendOwned: (id, input, c) =>\n\t\t\t\t\t\tself.session\n\t\t\t\t\t\t\t.commit(\n\t\t\t\t\t\t\t\tKERNEL,\n\t\t\t\t\t\t\t\t(tx) => {\n\t\t\t\t\t\t\t\t\tself.assertInvocation(invoker);\n\t\t\t\t\t\t\t\t\tself.assertOwnedConversation(task.id, id);\n\t\t\t\t\t\t\t\t\treturn tx.send(id, input);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tc,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tdocs: [\n\t\t\t\t\t\t\t\t\t\t{ doc: \"rewindable\", conversationId: id },\n\t\t\t\t\t\t\t\t\t\t{ doc: \"sticky\", conversationId: id },\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.then((r) => r.value),\n\t\t\t\t\tcontext: (c, at, cx) => self.session.commit(invoker, (tx) => tx.context(c, at), cx).then((r) => r.value),\n\t\t\t\t\tnewestEntry: (c, opts, cx) =>\n\t\t\t\t\t\tself.session.commit(invoker, (tx) => tx.newestEntry(c, opts), cx).then((r) => r.value),\n\t\t\t\t\trewindable: (c, cx) =>\n\t\t\t\t\t\tself.session\n\t\t\t\t\t\t\t.commit(invoker, (tx) => tx.snapshot({ doc: \"rewindable\", conversationId: c }), cx, {\n\t\t\t\t\t\t\t\tdocs: [{ doc: \"rewindable\", conversationId: c }],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.then((r) => r.value),\n\t\t\t\t\tsticky: (c, cx) =>\n\t\t\t\t\t\tself.session\n\t\t\t\t\t\t\t.commit(invoker, (tx) => tx.snapshot({ doc: \"sticky\", conversationId: c }), cx, {\n\t\t\t\t\t\t\t\tdocs: [{ doc: \"sticky\", conversationId: c }],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.then((r) => r.value),\n\t\t\t\t\trewindableAsOf: (c, at, cx) =>\n\t\t\t\t\t\tself.session.commit(invoker, (tx) => tx.rewindableAsOf(c, at), cx).then((r) => r.value),\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate notifyConversation(conversation: Conversation): void {\n\t\tif (this.conversationListeners.size === 0) return;\n\t\tconst handle = this.handle(conversation);\n\t\tfor (const listener of [...this.conversationListeners]) {\n\t\t\ttry {\n\t\t\t\tlistener(handle);\n\t\t\t} catch (error) {\n\t\t\t\tthis.onReport(error);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate assertInvocation(invoker: Extract<Invoker, { type: \"task\" }>): void {\n\t\tif (!invoker.token.alive) throw new Forbidden(\"operation from a finished invocation\");\n\t\tconst live = this.session.liveTasks.get(invoker.id);\n\t\tif (live === undefined) throw new Forbidden(\"operation from a task that is not live\");\n\t\tif (invoker.mode === \"run\" && live.abort === true) throw new Forbidden(\"operation from a marked run invocation\");\n\t}\n\n\tprivate assertTaskConversationScope(taskId: Id, conversationId: Id): void {\n\t\tconst task = this.session.liveTasks.get(taskId);\n\t\tif (task?.conversationId === conversationId) return;\n\t\tif (task?.owns.some((root) => this.session.index.subtree(root).has(conversationId))) return;\n\t\tthrow new Forbidden(`conversation ${conversationId} is outside task ${taskId}'s subtree`);\n\t}\n\n\tprivate assertOwnedConversation(taskId: Id, conversationId: Id): void {\n\t\tconst task = this.session.liveTasks.get(taskId);\n\t\tif (task === undefined || !task.owns.some((root) => this.session.index.subtree(root).has(conversationId))) {\n\t\t\tthrow new Forbidden(`conversation ${conversationId} is not owned by task ${taskId}`);\n\t\t}\n\t}\n\n\tprivate async init() {\n\t\tconst { session } = this;\n\t\tconst convs = await session.read((s, ctx) => s.conversations(ctx), this.ctx);\n\t\tfor (const c of convs) session.conversationRecords.set(c.id, c);\n\t\tconst live = await session.read((s, ctx) => s.scanTasks({ status: [\"pending\", \"running\"] }, ctx), this.ctx);\n\t\tfor (const task of live) session.liveTasks.set(task.id, task);\n\t\t// Owner tasks that are terminal but still own existing conversations: needed for ancestry.\n\t\tconst owners = new Set(convs.map((c) => c.owner).filter((o): o is Id => o !== undefined));\n\t\tfor (const id of owners)\n\t\t\tif (!session.liveTasks.has(id)) {\n\t\t\t\tconst t = await session.read((s, ctx) => s.task(id, ctx), this.ctx);\n\t\t\t\tif (t) session.ownerTaskCache.set(id, t);\n\t\t\t}\n\t\tif (convs.length === 0) {\n\t\t\tawait session.commit(\n\t\t\t\tKERNEL,\n\t\t\t\t(tx) =>\n\t\t\t\t\ttx.createConversation({ rewindable: this.options.root?.rewindable, sticky: this.options.root?.sticky }),\n\t\t\t\tthis.ctx,\n\t\t\t);\n\t\t}\n\t}\n\n\tresume() {\n\t\tif (this.suspended) throw new Error(\"cannot resume a suspended harness; reopen storage with a new harness\");\n\t\tif (this.resumed) return;\n\t\tthis.resumed = true;\n\t\tvoid this.reconcileOrphans()\n\t\t\t.then(() => {\n\t\t\t\tif (!this.suspended) this.scheduler.resume();\n\t\t\t})\n\t\t\t.catch((error) => this.onReport(error));\n\t}\n\tprivate async reconcileOrphans(): Promise<void> {\n\t\tconst orphaned = [...this.session.liveTasks.values()].filter((task) => !this.kinds.has(task.kind));\n\t\tif (orphaned.length === 0) return;\n\t\tconst docs = [...new Set(orphaned.map((task) => task.conversationId))].map(\n\t\t\t(conversationId): DocRef => ({ doc: \"sticky\", conversationId }),\n\t\t);\n\t\tawait this.session.commit(\n\t\t\tKERNEL,\n\t\t\t(tx) => {\n\t\t\t\tfor (const task of orphaned) tx.setTask({ ...task, status: \"terminal\", outcome: { status: \"orphaned\" } });\n\t\t\t},\n\t\t\tthis.ctx,\n\t\t\t{ docs },\n\t\t);\n\t}\n\tquiescent(): boolean {\n\t\treturn this.scheduler.quiescent();\n\t}\n\thold(): () => void {\n\t\tif (!this.scheduler.quiescent()) throw new Error(\"cannot hold a non-quiescent harness; suspend it instead\");\n\t\treturn this.scheduler.hold();\n\t}\n\t/** Cancel and join in-process invocations, clear transient waits, then close without terminalizing tasks. */\n\tasync suspend(ctx: Context): Promise<void> {\n\t\tif (this.suspended) return;\n\t\tthis.suspended = true;\n\t\tawait this.scheduler.joinAll();\n\t\tconst tools = [...this.session.liveTasks.values()].filter((task) => task.kind === \"pi.tool\");\n\t\tif (tools.length > 0) {\n\t\t\tconst docs = [...new Set(tools.map((task) => task.conversationId))].map(\n\t\t\t\t(conversationId): DocRef => ({ doc: \"sticky\", conversationId }),\n\t\t\t);\n\t\t\tawait this.session.commit(\n\t\t\t\tKERNEL,\n\t\t\t\t(tx) => {\n\t\t\t\t\tfor (const task of tools) {\n\t\t\t\t\t\tconst index = (task.input as { index: number }).index;\n\t\t\t\t\t\tconst slot = tx.sticky(task.conversationId).turn.tools[index];\n\t\t\t\t\t\tif (slot?.waitingOn !== undefined) delete slot.waitingOn;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t\t{ docs },\n\t\t\t);\n\t\t}\n\t\tthis.views.close();\n\t\tawait this.session.close(ctx);\n\t}\n\n\t// --- registries --------------------------------------------------------------\n\n\tregisterTaskKind<K extends AnyKind>(kind: K): () => void {\n\t\tif (kind.name.startsWith(\"pi.\"))\n\t\t\tthrow new Error(`task kind \"${kind.name}\": names beginning with \"pi.\" are reserved`);\n\t\tif (this.kinds.has(kind.name)) throw new Error(`task kind \"${kind.name}\" already registered`);\n\t\tthis.session.defaults.register(kind);\n\t\tthis.kinds.set(kind.name, kind);\n\t\tthis.scheduler.kick();\n\t\treturn () => {\n\t\t\tif (this.kinds.get(kind.name) !== kind) return;\n\t\t\tthis.kinds.delete(kind.name);\n\t\t\tthis.session.defaults.unregister(kind);\n\t\t};\n\t}\n\n\tnamespace<T extends JsonObject>(\n\t\tid: string,\n\t\tdefaults: NamespaceDefaults<T>,\n\t\topts: { view?: (slice: Readonly<T>) => JsonValue } = {},\n\t): Namespace<T> {\n\t\tif (!/^[a-z][a-z0-9_.-]*$/i.test(id) || id.startsWith(\"pi.\")) throw new Error(`invalid namespace \"${id}\"`);\n\t\tif (this.namespaces.has(id)) throw new Error(`namespace \"${id}\" already registered`);\n\t\tconst stored = JSON.parse(JSON.stringify(defaults)) as {\n\t\t\trewindable?: JsonObject;\n\t\t\tsticky?: JsonObject;\n\t\t\tsession?: JsonObject;\n\t\t};\n\t\tconst routes = new Map<string, \"rewindable\" | \"sticky\" | \"session\">();\n\t\tfor (const doc of [\"rewindable\", \"sticky\", \"session\"] as const) {\n\t\t\tfor (const key of Object.keys(stored[doc] ?? {})) {\n\t\t\t\tif (routes.has(key))\n\t\t\t\t\tthrow new Error(`namespace \"${id}\" key \"${key}\" is declared in more than one document`);\n\t\t\t\troutes.set(key, doc);\n\t\t\t}\n\t\t}\n\t\tlet token!: Namespace<T>;\n\t\ttoken = {\n\t\t\tid,\n\t\t\tunregister: () => {\n\t\t\t\tif (this.namespaces.get(id)?.token !== token) return;\n\t\t\t\tthis.namespaces.delete(id);\n\t\t\t\tfor (let index = this.hookRegistrations.length - 1; index >= 0; index--) {\n\t\t\t\t\tif ((this.hookRegistrations[index]!.namespace as object) === token)\n\t\t\t\t\t\tthis.hookRegistrations.splice(index, 1);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tconst registration: NamespaceRegistration = {\n\t\t\ttoken,\n\t\t\tdefaults: {\n\t\t\t\trewindable: stored.rewindable ?? {},\n\t\t\t\tsticky: stored.sticky ?? {},\n\t\t\t\tsession: stored.session ?? {},\n\t\t\t},\n\t\t\troutes,\n\t\t\tproject: opts.view === undefined ? undefined : (slice) => opts.view!(slice as Readonly<T>),\n\t\t};\n\t\tthis.namespaces.set(id, registration);\n\t\treturn token;\n\t}\n\n\t/** Register a tool. A duplicate name rejects. Unregister removes only this exact declaration; idempotent. */\n\tregisterTool(tool: AnyToolDeclaration, at: \"open\" | \"runtime\" = \"runtime\"): () => void {\n\t\tif (this.tools.has(tool.name)) throw new Error(`tool \"${tool.name}\" already registered`);\n\t\tthis.tools.set(tool.name, tool);\n\t\tthis.revisions.tools++;\n\t\tvoid at;\n\t\treturn () => {\n\t\t\tif (this.tools.get(tool.name) === tool) {\n\t\t\t\tthis.tools.delete(tool.name);\n\t\t\t\tthis.revisions.tools++;\n\t\t\t}\n\t\t};\n\t}\n\tregisterSection(section: SystemSection, at: \"open\" | \"runtime\" = \"runtime\"): () => void {\n\t\tif (this.sectionMap.has(section.key)) throw new Error(`section \"${section.key}\" already registered`);\n\t\tthis.sectionMap.set(section.key, section);\n\t\tthis.revisions.sections++;\n\t\tvoid at;\n\t\treturn () => {\n\t\t\tif (this.sectionMap.get(section.key) === section) {\n\t\t\t\tthis.sectionMap.delete(section.key);\n\t\t\t\tthis.revisions.sections++;\n\t\t\t}\n\t\t};\n\t}\n\tregisterEntryKind(kind: EntryKind): () => void {\n\t\tif (kind.kind.startsWith(\"pi.\"))\n\t\t\tthrow new Error(`entry kind \"${kind.kind}\": names beginning with \"pi.\" are reserved`);\n\t\tif (this.entryKinds.has(kind.kind)) throw new Error(`entry kind \"${kind.kind}\" already registered`);\n\t\tthis.entryKinds.set(kind.kind, kind);\n\t\treturn () => {\n\t\t\tif (this.entryKinds.get(kind.kind) === kind) this.entryKinds.delete(kind.kind);\n\t\t};\n\t}\n\t/** Register namespace-bound handlers for one kind's hook points, harness-wide. Both tokens must be current. */\n\thooks<T extends JsonObject, K extends AnyKind>(\n\t\tnamespace: Namespace<T>,\n\t\tkind: K,\n\t\thandlers: Partial<HooksOf<K>>,\n\t\t_opts?: Readonly<Record<string, never>>,\n\t): () => void {\n\t\treturn this.addHooks({ namespace: this.checkNamespace(namespace), kind: this.checkKind(kind), handlers });\n\t}\n\tprivate checkKind(kind: AnyKind): AnyKind {\n\t\tif (this.kinds.get(kind.name) !== kind) throw new Error(`kind \"${kind.name}\" is not the registered token`);\n\t\treturn kind;\n\t}\n\tprivate checkNamespace<T extends JsonObject>(namespace: Namespace<T>): Namespace<JsonObject> {\n\t\tif (this.namespaces.get(namespace.id)?.token !== namespace)\n\t\t\tthrow new Forbidden(`namespace \"${namespace.id}\" is stale`);\n\t\treturn namespace as unknown as Namespace<JsonObject>;\n\t}\n\tprivate addHooks(reg: HookRegistration): () => void {\n\t\tthis.hookRegistrations.push(reg);\n\t\tlet done = false;\n\t\treturn () => {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\tconst index = this.hookRegistrations.indexOf(reg);\n\t\t\tif (index >= 0) this.hookRegistrations.splice(index, 1);\n\t\t};\n\t}\n\n\t// --- conversations -------------------------------------------------------------\n\n\tasync root(ctx: Context): Promise<ConversationHandle<ConfigFor<Ks>>> {\n\t\treturn this.conversation(1, ctx).then((c) => c!);\n\t}\n\tonConversation(listener: (conversation: ConversationHandle<ConfigFor<Ks>>) => void): () => void {\n\t\tthis.conversationListeners.add(listener);\n\t\tfor (const conversation of this.session.conversationRecords.values()) {\n\t\t\ttry {\n\t\t\t\tlistener(this.handle(conversation));\n\t\t\t} catch (error) {\n\t\t\t\tthis.onReport(error);\n\t\t\t}\n\t\t}\n\t\treturn () => this.conversationListeners.delete(listener);\n\t}\n\tasync conversation(id: Id, ctx: Context): Promise<ConversationHandle<ConfigFor<Ks>> | undefined> {\n\t\tconst c = await this.session.read((s, lineCtx) => s.conversation(id, lineCtx), ctx);\n\t\treturn c === undefined ? undefined : this.handle(c);\n\t}\n\tasync createConversation(\n\t\tspec: ConversationSpec & { input?: UserInput },\n\t\tctx: Context,\n\t): Promise<ConversationHandle<ConfigFor<Ks>>> {\n\t\tconst { input, ...rest } = spec;\n\t\tconst id = await this.session\n\t\t\t.commit(\n\t\t\t\tKERNEL,\n\t\t\t\tasync (tx) => {\n\t\t\t\t\tconst id = tx.createConversation(rest);\n\t\t\t\t\tif (input !== undefined) await tx.send(id, { content: input });\n\t\t\t\t\treturn id;\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t)\n\t\t\t.then((r) => r.value);\n\t\treturn (await this.conversation(id, ctx))!;\n\t}\n\tentries(scan: EntryScan, ctx: Context): Promise<Entry[]> {\n\t\treturn this.session.read((s, lineCtx) => s.scanEntries(scan, lineCtx), ctx);\n\t}\n\tgetTask(id: Id, ctx: Context): Promise<Task | undefined> {\n\t\treturn this.session.read((s, lineCtx) => s.task(id, lineCtx), ctx);\n\t}\n\tasync abortInput(id: Id, ctx: Context, conversationId?: Id): Promise<\"aborted\" | \"already_placed\" | \"not_found\"> {\n\t\tif (conversationId !== undefined) {\n\t\t\tconst input = await this.session.read((storage, lineCtx) => storage.input(id, lineCtx), ctx);\n\t\t\tif (input !== undefined && input.conversationId !== conversationId)\n\t\t\t\tthrow new Forbidden(`input ${id} is outside conversation ${conversationId}`);\n\t\t}\n\t\treturn this.inputHandle(id).abort(ctx);\n\t}\n\tabortTask(id: Id, ctx: Context): Promise<\"marked\" | \"terminal\"> {\n\t\treturn this.scheduler.abortTask(id, ctx);\n\t}\n\t/** Durably mark a task for abort without signalling its invocation; the scheduler aborts it when it next drains. */\n\tmarkTask(id: Id, ctx: Context): Promise<\"marked\" | \"terminal\"> {\n\t\treturn this.session\n\t\t\t.commit(\n\t\t\t\tKERNEL,\n\t\t\t\tasync (tx) => {\n\t\t\t\t\tconst t = await tx.task(id);\n\t\t\t\t\tif (t === undefined) throw new Error(`task ${id} not found`);\n\t\t\t\t\tif (t.status === \"terminal\") return \"terminal\" as const;\n\t\t\t\t\ttx.markTask(id);\n\t\t\t\t\treturn \"marked\" as const;\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t)\n\t\t\t.then((r) => r.value);\n\t}\n\twaitForIdle(ctx: Context): Promise<void> {\n\t\treturn this.scheduler.waitForIdle(undefined, ctx);\n\t}\n\twaitForTask(id: Id, ctx: Context): Promise<Task> {\n\t\treturn this.scheduler.waitForTask(id, ctx);\n\t}\n\n\t/** Signals every invocation, waits for them, closes storage. Writes nothing. */\n\tasync close(ctx: Context) {\n\t\tawait this.suspend(ctx);\n\t}\n\n\tprivate handle(c: Conversation): ConversationHandle<ConfigFor<Ks>> {\n\t\tconst self = this;\n\t\tconst docs: DocRef[] = [\n\t\t\t{ doc: \"rewindable\", conversationId: c.id },\n\t\t\t{ doc: \"sticky\", conversationId: c.id },\n\t\t];\n\t\tconst hostInvoker: Invoker = { type: \"host\", conversationId: c.id };\n\t\tconst kernelInvoker: Invoker = { type: \"kernel\", conversationId: c.id };\n\t\tconst host = <T>(fn: (tx: HostTx, ctx: Context) => T | Promise<T>, ctx: Context) =>\n\t\t\tself.session.commit(hostInvoker, (tx, lineCtx) => fn(tx, lineCtx), ctx, { docs }).then((r) => r.value);\n\t\tconst kernel = <T>(fn: (tx: TxImpl, ctx: Context) => T | Promise<T>, ctx: Context) =>\n\t\t\tself.session.commit(kernelInvoker, fn, ctx, { docs }).then((r) => r.value);\n\t\tconst config: ConfigFacade<ConfigFor<Ks>> = {\n\t\t\tget: (ctx) =>\n\t\t\t\thost((tx) => {\n\t\t\t\t\tconst cfg = tx.config(c.id);\n\t\t\t\t\tconst out: { [k: string]: JsonValue | undefined } = {};\n\t\t\t\t\tfor (const key of self.session.defaults.route.keys()) out[key] = cfg.get(key);\n\t\t\t\t\treturn out as ConfigFor<Ks>;\n\t\t\t\t}, ctx),\n\t\t\tset: (patch, ctx) =>\n\t\t\t\thost((tx) => {\n\t\t\t\t\tconst cfg = tx.config(c.id);\n\t\t\t\t\tfor (const [key, value] of Object.entries(patch)) {\n\t\t\t\t\t\tif (value === undefined) throw new Error(`config.set(${key}): use config.reset()`);\n\t\t\t\t\t\tcfg.set(key, value as JsonValue);\n\t\t\t\t\t}\n\t\t\t\t}, ctx),\n\t\t\treset: (keys, ctx) =>\n\t\t\t\thost((tx) => {\n\t\t\t\t\tconst cfg = tx.config(c.id);\n\t\t\t\t\tfor (const key of keys) cfg.reset(String(key));\n\t\t\t\t}, ctx),\n\t\t};\n\t\treturn {\n\t\t\tid: c.id,\n\t\t\tconfig,\n\t\t\tasync send(input, ctx) {\n\t\t\t\tconst id = await kernel((tx) => tx.send(c.id, input), ctx);\n\t\t\t\treturn self.inputHandle(id);\n\t\t\t},\n\t\t\twrite: (entry, ctx) => host((tx) => tx.write(c.id, entry), ctx),\n\t\t\tcommit: host,\n\t\t\trewindable: (ctx) => host((tx) => tx.snapshot({ doc: \"rewindable\", conversationId: c.id }), ctx),\n\t\t\tsticky: (ctx) => host((tx) => tx.snapshot({ doc: \"sticky\", conversationId: c.id }), ctx),\n\t\t\tcontext: (ctx) => host((tx) => tx.context(c.id), ctx),\n\t\t\tasync fork(at, spec, ctx) {\n\t\t\t\tconst id = await self.session.fork(c.id, at, spec, ctx);\n\t\t\t\treturn (await self.conversation(id, ctx))!;\n\t\t\t},\n\t\t\tcollapse: (instructions, ctx) =>\n\t\t\t\tkernel(async (tx) => {\n\t\t\t\t\tconst { entries } = await tx.context(c.id);\n\t\t\t\t\tconst state = tx.rewindable(c.id);\n\t\t\t\t\tconst through = chooseThrough(entries, state.keepRecent);\n\t\t\t\t\tif (through === undefined) throw new Error(\"nothing to collapse\");\n\t\t\t\t\treturn tx.createTask({\n\t\t\t\t\t\tkind: \"pi.collapse\",\n\t\t\t\t\t\tconversationId: c.id,\n\t\t\t\t\t\tbackground: true,\n\t\t\t\t\t\tinput: { reason: \"manual\", through, ...(instructions === undefined ? {} : { instructions }) },\n\t\t\t\t\t});\n\t\t\t\t}, ctx),\n\t\t\treset: async (handoff, ctx) => {\n\t\t\t\tawait kernel(\n\t\t\t\t\t(tx) =>\n\t\t\t\t\t\ttx.write(\n\t\t\t\t\t\t\tc.id,\n\t\t\t\t\t\t\thandoff === undefined\n\t\t\t\t\t\t\t\t? { kind: \"pi.reset\", head: \"self\" }\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\tkind: \"pi.handoff\",\n\t\t\t\t\t\t\t\t\t\thead: \"self\",\n\t\t\t\t\t\t\t\t\t\tmodel: [{ role: \"user\", content: handoff, timestamp: self.now() }],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\tctx,\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync abort(ctx) {\n\t\t\t\tconst owned: Id[] = [];\n\t\t\t\tconst marked = await kernel(async (tx) => {\n\t\t\t\t\tconst s = tx.sticky(c.id);\n\t\t\t\t\tconst withdrawn = s.inbox.filter((q) => q.mode !== \"write\").map((q) => q.id);\n\t\t\t\t\tfor (let i = s.inbox.length - 1; i >= 0; i--) if (s.inbox[i]!.mode !== \"write\") s.inbox.splice(i, 1);\n\t\t\t\t\tawait tx.resolveInputs(withdrawn, { status: \"unanswered\", reason: \"aborted\" });\n\t\t\t\t\tfor (const input of withdrawn) tx.emit({ type: \"input.aborted\", input });\n\t\t\t\t\tconst ids: Id[] = [];\n\t\t\t\t\tfor (const t of [...self.session.liveTasks.values()]) {\n\t\t\t\t\t\tif (t.conversationId !== c.id || t.background) continue;\n\t\t\t\t\t\tfor (const o of t.owns) owned.push(o);\n\t\t\t\t\t\tif (t.abort !== true) tx.markTask(t.id);\n\t\t\t\t\t\tids.push(t.id);\n\t\t\t\t\t}\n\t\t\t\t\treturn ids;\n\t\t\t\t}, ctx);\n\t\t\t\tfor (const id of marked) await self.scheduler.abortTask(id, ctx);\n\t\t\t\tawait self.scheduler.waitForIdle(c.id, ctx);\n\t\t\t\tawait Promise.all(owned.map((o) => self.scheduler.waitForIdle(o, ctx)));\n\t\t\t},\n\t\t\twaitForIdle: (ctx) => self.scheduler.waitForIdle(c.id, ctx),\n\t\t\thooks: (namespace, kind, handlers, opts) =>\n\t\t\t\tself.addHooks({\n\t\t\t\t\tnamespace: self.checkNamespace(namespace),\n\t\t\t\t\tkind: self.checkKind(kind),\n\t\t\t\t\thandlers,\n\t\t\t\t\tconversationId: c.id,\n\t\t\t\t\tsubtree: opts?.subtree,\n\t\t\t\t}),\n\t\t\twatch: (ctx) => self.watch(c, ctx),\n\t\t};\n\t}\n\n\t/** Capture and subscribe in one line operation. */\n\tprivate async watch(conversation: Conversation, ctx: Context): Promise<Watch> {\n\t\treturn this.session\n\t\t\t.commit(\n\t\t\t\t{ type: \"host\", conversationId: conversation.id },\n\t\t\t\tasync (tx) => {\n\t\t\t\t\tconst entries = await captureActiveTranscript((scan) => tx.scanEntries(scan), conversation.id);\n\t\t\t\t\treturn this.views.watch(conversation, entries);\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t\t{\n\t\t\t\t\tdocs: [\n\t\t\t\t\t\t{ doc: \"rewindable\", conversationId: conversation.id },\n\t\t\t\t\t\t{ doc: \"sticky\", conversationId: conversation.id },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t)\n\t\t\t.then((result) => result.value);\n\t}\n\n\tprivate inputHandle(id: Id): InputHandle {\n\t\treturn {\n\t\t\tid,\n\t\t\tresult: (ctx) => this.session.read((s, lineCtx) => s.input(id, lineCtx), ctx),\n\t\t\twait: (ctx) => this.scheduler.waitForInput(id, ctx),\n\t\t\tabort: (ctx) =>\n\t\t\t\tthis.session.commit(KERNEL, (tx) => tx.withdrawInput(id), ctx, { docs: [] }).then((r) => r.value),\n\t\t};\n\t}\n}\n\n/**\n * §9: H = newest fork-visible entry with a head. Active transcript = H plus every fork-visible entry\n * with id ≥ H.head, chronological, nothing dropped inside the range; the whole transcript if no head.\n */\nexport async function captureActiveTranscript(\n\tscan: (s: EntryScan) => Promise<Entry[]>,\n\tconversationId: Id,\n): Promise<Entry[]> {\n\tconst [h] = await scan({ conversationId, withHead: true, limit: 1 });\n\tconst from = h?.head;\n\tconst out: Entry[] = [];\n\tlet before: Id | undefined;\n\tfor (;;) {\n\t\tconst page = await scan({ conversationId, ...(before === undefined ? {} : { before }), limit: 256 });\n\t\tlet done = page.length < 256;\n\t\tfor (const e of page) {\n\t\t\tif (from !== undefined && e.id < from) {\n\t\t\t\tdone = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tout.push(e);\n\t\t}\n\t\tif (done) break;\n\t\tbefore = page[page.length - 1]!.id;\n\t}\n\treturn out.reverse();\n}\n\nexport { withAbortSignal, isCoreKind };\nexport type { ConversationView, Envelope, ViewEvent } from \"./types.ts\";\nexport type { Watch } from \"./view.ts\";\nexport { applyEnvelope, WATCH_CAPACITY } from \"./view.ts\";\n/** The built-in kinds, as typed witnesses for `api.task`, `waitForTask`, and `hooks(kind, …)`. */\nexport const kinds = { generation, tool, postTools, collapse, job, plugin } as const;\nexport const entries = builtinEntries;\nexport type { ToolDeclaration, TSchema };\n"]}
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../../src/harness/pico3/harness.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context } from \"@earendil-works/chord\";\nimport { withAbortSignal } from \"@earendil-works/chord/context\";\nimport type { TSchema } from \"typebox\";\nimport { createHookRunners, type HookRegistration } from \"./hooks.ts\";\nimport { chooseThrough, collapse } from \"./kinds/collapse.ts\";\nimport { entries as builtinEntries } from \"./kinds/entries.ts\";\nimport { generation } from \"./kinds/generation.ts\";\nimport { job } from \"./kinds/job.ts\";\nimport { plugin } from \"./kinds/plugin.ts\";\nimport { postTools } from \"./kinds/post-tools.ts\";\nimport { tool } from \"./kinds/tool.ts\";\nimport { Scheduler } from \"./scheduler.ts\";\nimport { isCoreKind, Session, type TxImpl } from \"./session.ts\";\nimport { type SystemSection, systemSections } from \"./system.ts\";\nimport {\n\ttype AnyKind,\n\ttype AnyToolDeclaration,\n\ttype ConfigFacade,\n\ttype ConfigOfKinds,\n\ttype ContextView,\n\ttype Conversation,\n\ttype ConversationSpec,\n\ttype DisjointConfig,\n\ttype DocRef,\n\ttype Entry,\n\ttype EntryKind,\n\ttype EntryScan,\n\tForbidden,\n\ttype HooksOf,\n\ttype HostTx,\n\ttype Id,\n\ttype Input,\n\ttype Invoker,\n\ttype JsonObject,\n\ttype JsonValue,\n\ttype Models,\n\ttype Namespace,\n\ttype NamespaceDefaults,\n\ttype NamespaceRegistration,\n\ttype NewEntry,\n\ttype PluginHandler,\n\ttype ProcessHost,\n\ttype RewindableState,\n\ttype Runtime,\n\ttype SendInput,\n\ttype StickyState,\n\ttype Storage,\n\ttype Task,\n\ttype ToolDeclaration,\n\ttype UserInput,\n} from \"./types.ts\";\nimport { ViewManager, type Watch } from \"./view.ts\";\n\n// ---------------------------------------------------------------------------\n// Harness\n// ---------------------------------------------------------------------------\n\nexport interface HarnessOptions<Ks extends readonly AnyKind[] = []> {\n\tmodels: Models;\n\ttools?: AnyToolDeclaration[];\n\t/** Ordinary kinds authored with `defineTask`. Their `config` merges onto `c.config`; keys must be disjoint. */\n\ttaskKinds?: Ks;\n\tsections?: SystemSection[];\n\tplugins?: { [name: string]: PluginHandler };\n\tprocessHost?: ProcessHost;\n\t/** Clock for durable kernel timestamps and retry scheduling. */\n\tnow?: () => number;\n\troot?: { rewindable?: Partial<RewindableState>; sticky?: Partial<StickyState> };\n\t/** Errors from listeners, hooks, watches, and the scheduler. Never delivered as commit failures. */\n\tonReport?: (error: unknown) => void;\n}\n\nexport type BuiltinKinds = readonly [\n\ttypeof generation,\n\ttypeof tool,\n\ttypeof postTools,\n\ttypeof collapse,\n\ttypeof job,\n\ttypeof plugin,\n];\nexport type ConfigFor<Ks extends readonly AnyKind[]> = ConfigOfKinds<[...BuiltinKinds, ...Ks]>;\n\nexport interface ConversationHandle<Cfg extends object = ConfigFor<[]>> {\n\treadonly id: Id;\n\treadonly config: ConfigFacade<Cfg>;\n\tsend(input: SendInput, ctx: Context): Promise<InputHandle>;\n\twrite(entry: NewEntry, ctx: Context): Promise<Id>;\n\tcommit<T>(fn: (tx: HostTx, ctx: Context) => T | Promise<T>, ctx: Context): Promise<T>;\n\trewindable(ctx: Context): Promise<RewindableState>;\n\tsticky(ctx: Context): Promise<StickyState>;\n\tcontext(ctx: Context): Promise<ContextView>;\n\tfork(at: Id | \"start\", spec: Omit<ConversationSpec, \"parent\">, ctx: Context): Promise<ConversationHandle<Cfg>>;\n\tcollapse(instructions: string | undefined, ctx: Context): Promise<Id>;\n\treset(handoff: string | undefined, ctx: Context): Promise<void>;\n\tabort(ctx: Context): Promise<void>;\n\twaitForIdle(ctx: Context): Promise<void>;\n\thooks<T extends JsonObject, K extends AnyKind>(\n\t\tnamespace: Namespace<T>,\n\t\tkind: K,\n\t\thandlers: Partial<HooksOf<K>>,\n\t\topts?: { subtree?: boolean },\n\t): () => void;\n\twatch(ctx: Context): Promise<Watch>;\n}\nexport interface InputHandle {\n\treadonly id: Id;\n\tresult(ctx: Context): Promise<Input | undefined>;\n\twait(ctx: Context): Promise<Input>;\n\tabort(ctx: Context): Promise<\"aborted\" | \"already_placed\" | \"not_found\">;\n}\n\nconst KERNEL: Invoker = { type: \"kernel\" };\n\nexport class Harness<Ks extends readonly AnyKind[] = []> {\n\tprivate readonly session: Session;\n\tprivate readonly scheduler: Scheduler;\n\tprivate readonly views: ViewManager;\n\tprivate readonly kinds: Map<string, AnyKind>;\n\tprivate readonly namespaces = new Map<string, NamespaceRegistration>();\n\tprivate readonly tools = new Map<string, AnyToolDeclaration>();\n\tprivate readonly sectionMap = new Map<string, SystemSection>();\n\tprivate readonly entryKinds = new Map<string, EntryKind>();\n\tprivate readonly revisions = { sections: 0, tools: 0 };\n\tprivate readonly plugins: Map<string, PluginHandler>;\n\tprivate readonly hookRegistrations: HookRegistration[] = [];\n\tprivate readonly conversationListeners = new Set<(conversation: ConversationHandle<ConfigFor<Ks>>) => void>();\n\tprivate readonly onReport: (error: unknown) => void;\n\tprivate readonly now: () => number;\n\tprivate readonly ctx: Context;\n\tprivate readonly options: HarnessOptions<Ks>;\n\tprivate resumed = false;\n\tprivate suspended = false;\n\n\tstatic async open<Ks extends readonly AnyKind[] = []>(\n\t\tstorage: Storage,\n\t\toptions: HarnessOptions<Ks> &\n\t\t\t(DisjointConfig<[...BuiltinKinds, ...Ks]> extends true\n\t\t\t\t? unknown\n\t\t\t\t: { readonly __error: \"config keys collide across kinds\" }),\n\t\tctx: Context,\n\t): Promise<Harness<Ks>> {\n\t\tconst h = new Harness<Ks>(storage, options, ctx);\n\t\tawait h.init();\n\t\treturn h;\n\t}\n\n\tprivate constructor(storage: Storage, options: HarnessOptions<Ks>, ctx: Context) {\n\t\tthis.ctx = ctx;\n\t\tthis.options = options;\n\t\tthis.now = options.now ?? Date.now;\n\t\tthis.onReport = (error) => {\n\t\t\ttry {\n\t\t\t\toptions.onReport?.(error);\n\t\t\t} catch {}\n\t\t};\n\t\t// Fixed core, installed internally. User kinds may not replace or shadow a built-in.\n\t\tconst builtins: AnyKind[] = [generation, tool, postTools, collapse, job, plugin];\n\t\tthis.kinds = new Map(builtins.map((k) => [k.name, k]));\n\t\tfor (const k of options.taskKinds ?? []) {\n\t\t\tif (k.name.startsWith(\"pi.\"))\n\t\t\t\tthrow new Error(`task kind \"${k.name}\": names beginning with \"pi.\" are reserved`);\n\t\t\tif (this.kinds.has(k.name)) throw new Error(`task kind \"${k.name}\" registered twice`);\n\t\t\tthis.kinds.set(k.name, k);\n\t\t}\n\t\tfor (const t of options.tools ?? []) this.registerTool(t, \"open\");\n\t\tfor (const s of Object.values(systemSections)) this.sectionMap.set(s.key, s as SystemSection);\n\t\tfor (const s of options.sections ?? []) this.registerSection(s, \"open\");\n\t\tfor (const e of Object.values(builtinEntries)) this.entryKinds.set(e.kind, e as EntryKind);\n\t\tthis.plugins = new Map(Object.entries(options.plugins ?? {}));\n\t\tthis.session = new Session(storage, this.kinds, this.namespaces, this.now); // throws if the Storage already has an owner; validates config disjointness\n\t\tthis.session.onReport = this.onReport;\n\t\tthis.views = new ViewManager(this.session, this.onReport);\n\t\tthis.session.lineListeners.add((result) => this.views.update(result));\n\t\tthis.session.listeners.add((result) => {\n\t\t\tthis.views.deliver();\n\t\t\tfor (const conversation of result.changes.conversations) this.notifyConversation(conversation);\n\t\t});\n\t\tconst self = this;\n\t\tconst hooksFor = createHookRunners(\n\t\t\t() => this.hookRegistrations,\n\t\t\t(c) => this.session.index.ancestors(c),\n\t\t\tthis.onReport,\n\t\t);\n\t\tthis.scheduler = new Scheduler({\n\t\t\tsession: this.session,\n\t\t\tkinds: this.kinds,\n\t\t\tonReport: this.onReport,\n\t\t\tctx,\n\t\t\truntime(task, invoker, _ictx): Runtime {\n\t\t\t\treturn {\n\t\t\t\t\ttaskId: task.id,\n\t\t\t\t\tconversationId: task.conversationId,\n\t\t\t\t\tkind: invoker.kind,\n\t\t\t\t\tcommit: (fn, c) => {\n\t\t\t\t\t\tconst owns = self.session.liveTasks.get(task.id)?.owns ?? [];\n\t\t\t\t\t\tconst docs = owns.flatMap((id): DocRef[] => [\n\t\t\t\t\t\t\t{ doc: \"rewindable\", conversationId: id },\n\t\t\t\t\t\t\t{ doc: \"sticky\", conversationId: id },\n\t\t\t\t\t\t]);\n\t\t\t\t\t\treturn self.session\n\t\t\t\t\t\t\t.commit(invoker, (tx, lineCtx) => fn(tx, self.session.liveTasks.get(task.id)!, lineCtx), c, {\n\t\t\t\t\t\t\t\tdocs,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.then((r) => r.value);\n\t\t\t\t\t},\n\t\t\t\t\thooks: hooksFor(invoker.kind, { taskId: task.id, conversationId: task.conversationId }),\n\t\t\t\t\tmodels: options.models,\n\t\t\t\t\ttools: self.tools,\n\t\t\t\t\tregistries: {\n\t\t\t\t\t\tsections: {\n\t\t\t\t\t\t\tmap: self.sectionMap,\n\t\t\t\t\t\t\tget revision() {\n\t\t\t\t\t\t\t\treturn self.revisions.sections;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttools: {\n\t\t\t\t\t\t\tmap: self.tools,\n\t\t\t\t\t\t\tget revision() {\n\t\t\t\t\t\t\t\treturn self.revisions.tools;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tkinds: self.kinds,\n\t\t\t\t\tprocessHost: options.processHost,\n\t\t\t\t\tplugins: self.plugins,\n\t\t\t\t\tnow: self.now,\n\t\t\t\t\tsleep: (untilMs, c) =>\n\t\t\t\t\t\tnew Promise((resolve, reject) => {\n\t\t\t\t\t\t\tconst ms = Math.max(0, untilMs - Date.now());\n\t\t\t\t\t\t\tconst t = setTimeout(() => {\n\t\t\t\t\t\t\t\tc.abortSignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t}, ms);\n\t\t\t\t\t\t\tconst onAbort = () => {\n\t\t\t\t\t\t\t\tclearTimeout(t);\n\t\t\t\t\t\t\t\treject(c.abortSignal?.reason ?? new Error(\"aborted\"));\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tc.abortSignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\t\t\t}),\n\t\t\t\t\twaitForInput: (id, c) => self.scheduler.waitForInput(id, c),\n\t\t\t\t\twaitForTask: (id, c) => self.scheduler.waitForTask(id, c),\n\t\t\t\t\tabortTask: async (id, c) => {\n\t\t\t\t\t\tawait self.session.onLine(async (lineCtx) => {\n\t\t\t\t\t\t\tself.assertInvocation(invoker);\n\t\t\t\t\t\t\tconst target = self.session.liveTasks.get(id) ?? (await self.session.storage.task(id, lineCtx));\n\t\t\t\t\t\t\tif (target === undefined) throw new Error(`task ${id} not found`);\n\t\t\t\t\t\t\tself.assertTaskConversationScope(task.id, target.conversationId);\n\t\t\t\t\t\t}, c);\n\t\t\t\t\t\treturn self.scheduler.abortTask(id, c);\n\t\t\t\t\t},\n\t\t\t\t\tabortConversation: async (id, c) => {\n\t\t\t\t\t\tawait self.session.onLine(() => {\n\t\t\t\t\t\t\tself.assertInvocation(invoker);\n\t\t\t\t\t\t\tself.assertOwnedConversation(task.id, id);\n\t\t\t\t\t\t}, c);\n\t\t\t\t\t\tconst h = await self.conversation(id, c);\n\t\t\t\t\t\tif (h) await h.abort(c);\n\t\t\t\t\t},\n\t\t\t\t\tcreateOwnedConversation: (spec, c) =>\n\t\t\t\t\t\tself.session\n\t\t\t\t\t\t\t.commit(\n\t\t\t\t\t\t\t\tKERNEL,\n\t\t\t\t\t\t\t\t(tx) => {\n\t\t\t\t\t\t\t\t\tself.assertInvocation(invoker);\n\t\t\t\t\t\t\t\t\treturn tx.createOwnedConversation(task.id, task.conversationId, spec);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tc,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.then((result) => result.value),\n\t\t\t\t\tsendOwned: (id, input, c) =>\n\t\t\t\t\t\tself.session\n\t\t\t\t\t\t\t.commit(\n\t\t\t\t\t\t\t\tKERNEL,\n\t\t\t\t\t\t\t\t(tx) => {\n\t\t\t\t\t\t\t\t\tself.assertInvocation(invoker);\n\t\t\t\t\t\t\t\t\tself.assertOwnedConversation(task.id, id);\n\t\t\t\t\t\t\t\t\treturn tx.send(id, input);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tc,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tdocs: [\n\t\t\t\t\t\t\t\t\t\t{ doc: \"rewindable\", conversationId: id },\n\t\t\t\t\t\t\t\t\t\t{ doc: \"sticky\", conversationId: id },\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.then((r) => r.value),\n\t\t\t\t\tcontext: (c, at, cx) => self.session.commit(invoker, (tx) => tx.context(c, at), cx).then((r) => r.value),\n\t\t\t\t\tnewestEntry: (c, opts, cx) =>\n\t\t\t\t\t\tself.session.commit(invoker, (tx) => tx.newestEntry(c, opts), cx).then((r) => r.value),\n\t\t\t\t\trewindable: (c, cx) =>\n\t\t\t\t\t\tself.session\n\t\t\t\t\t\t\t.commit(invoker, (tx) => tx.snapshot({ doc: \"rewindable\", conversationId: c }), cx, {\n\t\t\t\t\t\t\t\tdocs: [{ doc: \"rewindable\", conversationId: c }],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.then((r) => r.value),\n\t\t\t\t\tsticky: (c, cx) =>\n\t\t\t\t\t\tself.session\n\t\t\t\t\t\t\t.commit(invoker, (tx) => tx.snapshot({ doc: \"sticky\", conversationId: c }), cx, {\n\t\t\t\t\t\t\t\tdocs: [{ doc: \"sticky\", conversationId: c }],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.then((r) => r.value),\n\t\t\t\t\trewindableAsOf: (c, at, cx) =>\n\t\t\t\t\t\tself.session.commit(invoker, (tx) => tx.rewindableAsOf(c, at), cx).then((r) => r.value),\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate notifyConversation(conversation: Conversation): void {\n\t\tif (this.conversationListeners.size === 0) return;\n\t\tconst handle = this.handle(conversation);\n\t\tfor (const listener of [...this.conversationListeners]) {\n\t\t\ttry {\n\t\t\t\tlistener(handle);\n\t\t\t} catch (error) {\n\t\t\t\tthis.onReport(error);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate assertInvocation(invoker: Extract<Invoker, { type: \"task\" }>): void {\n\t\tif (!invoker.token.alive) throw new Forbidden(\"operation from a finished invocation\");\n\t\tconst live = this.session.liveTasks.get(invoker.id);\n\t\tif (live === undefined) throw new Forbidden(\"operation from a task that is not live\");\n\t\tif (invoker.mode === \"run\" && live.abort === true) throw new Forbidden(\"operation from a marked run invocation\");\n\t}\n\n\tprivate assertTaskConversationScope(taskId: Id, conversationId: Id): void {\n\t\tconst task = this.session.liveTasks.get(taskId);\n\t\tif (task?.conversationId === conversationId) return;\n\t\tif (task?.owns.some((root) => this.session.index.subtree(root).has(conversationId))) return;\n\t\tthrow new Forbidden(`conversation ${conversationId} is outside task ${taskId}'s subtree`);\n\t}\n\n\tprivate assertOwnedConversation(taskId: Id, conversationId: Id): void {\n\t\tconst task = this.session.liveTasks.get(taskId);\n\t\tif (task === undefined || !task.owns.some((root) => this.session.index.subtree(root).has(conversationId))) {\n\t\t\tthrow new Forbidden(`conversation ${conversationId} is not owned by task ${taskId}`);\n\t\t}\n\t}\n\n\tprivate async init() {\n\t\tconst { session } = this;\n\t\tconst convs = await session.read((s, ctx) => s.conversations(ctx), this.ctx);\n\t\tfor (const c of convs) session.conversationRecords.set(c.id, c);\n\t\tconst live = await session.read((s, ctx) => s.scanTasks({ status: [\"pending\", \"running\"] }, ctx), this.ctx);\n\t\tfor (const task of live) session.liveTasks.set(task.id, task);\n\t\t// Owner tasks that are terminal but still own existing conversations: needed for ancestry.\n\t\tconst owners = new Set(convs.map((c) => c.owner).filter((o): o is Id => o !== undefined));\n\t\tfor (const id of owners)\n\t\t\tif (!session.liveTasks.has(id)) {\n\t\t\t\tconst t = await session.read((s, ctx) => s.task(id, ctx), this.ctx);\n\t\t\t\tif (t) session.ownerTaskCache.set(id, t);\n\t\t\t}\n\t\tif (convs.length === 0) {\n\t\t\tawait session.commit(\n\t\t\t\tKERNEL,\n\t\t\t\t(tx) =>\n\t\t\t\t\ttx.createConversation({ rewindable: this.options.root?.rewindable, sticky: this.options.root?.sticky }),\n\t\t\t\tthis.ctx,\n\t\t\t);\n\t\t}\n\t}\n\n\tresume() {\n\t\tif (this.suspended) throw new Error(\"cannot resume a suspended harness; reopen storage with a new harness\");\n\t\tif (this.resumed) return;\n\t\tthis.resumed = true;\n\t\tvoid this.reconcileOrphans()\n\t\t\t.then(() => {\n\t\t\t\tif (!this.suspended) this.scheduler.resume();\n\t\t\t})\n\t\t\t.catch((error) => this.onReport(error));\n\t}\n\tprivate async reconcileOrphans(): Promise<void> {\n\t\tconst orphaned = [...this.session.liveTasks.values()].filter((task) => !this.kinds.has(task.kind));\n\t\tif (orphaned.length === 0) return;\n\t\tconst docs = [...new Set(orphaned.map((task) => task.conversationId))].map(\n\t\t\t(conversationId): DocRef => ({ doc: \"sticky\", conversationId }),\n\t\t);\n\t\tawait this.session.commit(\n\t\t\tKERNEL,\n\t\t\t(tx) => {\n\t\t\t\tfor (const task of orphaned) tx.setTask({ ...task, status: \"terminal\", outcome: { status: \"orphaned\" } });\n\t\t\t},\n\t\t\tthis.ctx,\n\t\t\t{ docs },\n\t\t);\n\t}\n\tquiescent(): boolean {\n\t\treturn this.scheduler.quiescent();\n\t}\n\thold(): () => void {\n\t\tif (!this.scheduler.quiescent()) throw new Error(\"cannot hold a non-quiescent harness; suspend it instead\");\n\t\treturn this.scheduler.hold();\n\t}\n\t/** Cancel and join in-process invocations, clear transient waits, then close without terminalizing tasks. */\n\tasync suspend(ctx: Context): Promise<void> {\n\t\tif (this.suspended) return;\n\t\tthis.suspended = true;\n\t\tawait this.scheduler.joinAll();\n\t\tconst tools = [...this.session.liveTasks.values()].filter((task) => task.kind === \"pi.tool\");\n\t\tif (tools.length > 0) {\n\t\t\tconst docs = [...new Set(tools.map((task) => task.conversationId))].map(\n\t\t\t\t(conversationId): DocRef => ({ doc: \"sticky\", conversationId }),\n\t\t\t);\n\t\t\tawait this.session.commit(\n\t\t\t\tKERNEL,\n\t\t\t\t(tx) => {\n\t\t\t\t\tfor (const task of tools) {\n\t\t\t\t\t\tconst index = (task.input as { index: number }).index;\n\t\t\t\t\t\tconst slot = tx.sticky(task.conversationId).turn.tools[index];\n\t\t\t\t\t\tif (slot?.waitingOn !== undefined) delete slot.waitingOn;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t\t{ docs },\n\t\t\t);\n\t\t}\n\t\tthis.views.close();\n\t\tawait this.session.close(ctx);\n\t}\n\n\t// --- registries --------------------------------------------------------------\n\n\tregisterTaskKind<K extends AnyKind>(kind: K): () => void {\n\t\tif (kind.name.startsWith(\"pi.\"))\n\t\t\tthrow new Error(`task kind \"${kind.name}\": names beginning with \"pi.\" are reserved`);\n\t\tif (this.kinds.has(kind.name)) throw new Error(`task kind \"${kind.name}\" already registered`);\n\t\tthis.session.defaults.register(kind);\n\t\tthis.kinds.set(kind.name, kind);\n\t\tthis.scheduler.kick();\n\t\treturn () => {\n\t\t\tif (this.kinds.get(kind.name) !== kind) return;\n\t\t\tthis.kinds.delete(kind.name);\n\t\t\tthis.session.defaults.unregister(kind);\n\t\t};\n\t}\n\n\tnamespace<T extends JsonObject>(\n\t\tid: string,\n\t\tdefaults: NamespaceDefaults<T>,\n\t\topts: { view?: (slice: Readonly<T>) => JsonValue } = {},\n\t): Namespace<T> {\n\t\tif (!/^[a-z][a-z0-9_.-]*$/i.test(id) || id.startsWith(\"pi.\")) throw new Error(`invalid namespace \"${id}\"`);\n\t\tif (this.namespaces.has(id)) throw new Error(`namespace \"${id}\" already registered`);\n\t\tconst stored = JSON.parse(JSON.stringify(defaults)) as {\n\t\t\trewindable?: JsonObject;\n\t\t\tsticky?: JsonObject;\n\t\t\tsession?: JsonObject;\n\t\t};\n\t\tconst routes = new Map<string, \"rewindable\" | \"sticky\" | \"session\">();\n\t\tfor (const doc of [\"rewindable\", \"sticky\", \"session\"] as const) {\n\t\t\tfor (const key of Object.keys(stored[doc] ?? {})) {\n\t\t\t\tif (routes.has(key))\n\t\t\t\t\tthrow new Error(`namespace \"${id}\" key \"${key}\" is declared in more than one document`);\n\t\t\t\troutes.set(key, doc);\n\t\t\t}\n\t\t}\n\t\tlet token!: Namespace<T>;\n\t\ttoken = {\n\t\t\tid,\n\t\t\tunregister: () => {\n\t\t\t\tif (this.namespaces.get(id)?.token !== token) return;\n\t\t\t\tthis.namespaces.delete(id);\n\t\t\t\tfor (let index = this.hookRegistrations.length - 1; index >= 0; index--) {\n\t\t\t\t\tif ((this.hookRegistrations[index]!.namespace as object) === token)\n\t\t\t\t\t\tthis.hookRegistrations.splice(index, 1);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tconst registration: NamespaceRegistration = {\n\t\t\ttoken,\n\t\t\tdefaults: {\n\t\t\t\trewindable: stored.rewindable ?? {},\n\t\t\t\tsticky: stored.sticky ?? {},\n\t\t\t\tsession: stored.session ?? {},\n\t\t\t},\n\t\t\troutes,\n\t\t\tproject: opts.view === undefined ? undefined : (slice) => opts.view!(slice as Readonly<T>),\n\t\t};\n\t\tthis.namespaces.set(id, registration);\n\t\treturn token;\n\t}\n\n\t/** Register a tool. A duplicate name rejects. Unregister removes only this exact declaration; idempotent. */\n\tregisterTool(tool: AnyToolDeclaration, at: \"open\" | \"runtime\" = \"runtime\"): () => void {\n\t\tif (this.tools.has(tool.name)) throw new Error(`tool \"${tool.name}\" already registered`);\n\t\tthis.tools.set(tool.name, tool);\n\t\tthis.revisions.tools++;\n\t\tvoid at;\n\t\treturn () => {\n\t\t\tif (this.tools.get(tool.name) === tool) {\n\t\t\t\tthis.tools.delete(tool.name);\n\t\t\t\tthis.revisions.tools++;\n\t\t\t}\n\t\t};\n\t}\n\tregisterSection(section: SystemSection, at: \"open\" | \"runtime\" = \"runtime\"): () => void {\n\t\tif (this.sectionMap.has(section.key)) throw new Error(`section \"${section.key}\" already registered`);\n\t\tthis.sectionMap.set(section.key, section);\n\t\tthis.revisions.sections++;\n\t\tvoid at;\n\t\treturn () => {\n\t\t\tif (this.sectionMap.get(section.key) === section) {\n\t\t\t\tthis.sectionMap.delete(section.key);\n\t\t\t\tthis.revisions.sections++;\n\t\t\t}\n\t\t};\n\t}\n\tregisterEntryKind(kind: EntryKind): () => void {\n\t\tif (kind.kind.startsWith(\"pi.\"))\n\t\t\tthrow new Error(`entry kind \"${kind.kind}\": names beginning with \"pi.\" are reserved`);\n\t\tif (this.entryKinds.has(kind.kind)) throw new Error(`entry kind \"${kind.kind}\" already registered`);\n\t\tthis.entryKinds.set(kind.kind, kind);\n\t\treturn () => {\n\t\t\tif (this.entryKinds.get(kind.kind) === kind) this.entryKinds.delete(kind.kind);\n\t\t};\n\t}\n\t/** Register namespace-bound handlers for one kind's hook points, harness-wide. Both tokens must be current. */\n\thooks<T extends JsonObject, K extends AnyKind>(\n\t\tnamespace: Namespace<T>,\n\t\tkind: K,\n\t\thandlers: Partial<HooksOf<K>>,\n\t\t_opts?: Readonly<Record<string, never>>,\n\t): () => void {\n\t\treturn this.addHooks({ namespace: this.checkNamespace(namespace), kind: this.checkKind(kind), handlers });\n\t}\n\tprivate checkKind(kind: AnyKind): AnyKind {\n\t\tif (this.kinds.get(kind.name) !== kind) throw new Error(`kind \"${kind.name}\" is not the registered token`);\n\t\treturn kind;\n\t}\n\tprivate checkNamespace<T extends JsonObject>(namespace: Namespace<T>): Namespace<JsonObject> {\n\t\tif (this.namespaces.get(namespace.id)?.token !== namespace)\n\t\t\tthrow new Forbidden(`namespace \"${namespace.id}\" is stale`);\n\t\treturn namespace as unknown as Namespace<JsonObject>;\n\t}\n\tprivate addHooks(reg: HookRegistration): () => void {\n\t\tthis.hookRegistrations.push(reg);\n\t\tlet done = false;\n\t\treturn () => {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\tconst index = this.hookRegistrations.indexOf(reg);\n\t\t\tif (index >= 0) this.hookRegistrations.splice(index, 1);\n\t\t};\n\t}\n\n\t// --- conversations -------------------------------------------------------------\n\n\tasync root(ctx: Context): Promise<ConversationHandle<ConfigFor<Ks>>> {\n\t\treturn this.conversation(1, ctx).then((c) => c!);\n\t}\n\tonConversation(listener: (conversation: ConversationHandle<ConfigFor<Ks>>) => void): () => void {\n\t\tthis.conversationListeners.add(listener);\n\t\tfor (const conversation of this.session.conversationRecords.values()) {\n\t\t\ttry {\n\t\t\t\tlistener(this.handle(conversation));\n\t\t\t} catch (error) {\n\t\t\t\tthis.onReport(error);\n\t\t\t}\n\t\t}\n\t\treturn () => this.conversationListeners.delete(listener);\n\t}\n\tasync conversation(id: Id, ctx: Context): Promise<ConversationHandle<ConfigFor<Ks>> | undefined> {\n\t\tconst c = await this.session.read((s, lineCtx) => s.conversation(id, lineCtx), ctx);\n\t\treturn c === undefined ? undefined : this.handle(c);\n\t}\n\tasync createConversation(\n\t\tspec: ConversationSpec & { input?: UserInput },\n\t\tctx: Context,\n\t): Promise<ConversationHandle<ConfigFor<Ks>>> {\n\t\tconst { input, ...rest } = spec;\n\t\tconst id = await this.session\n\t\t\t.commit(\n\t\t\t\tKERNEL,\n\t\t\t\tasync (tx) => {\n\t\t\t\t\tconst id = tx.createConversation(rest);\n\t\t\t\t\tif (input !== undefined) await tx.send(id, { content: input });\n\t\t\t\t\treturn id;\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t)\n\t\t\t.then((r) => r.value);\n\t\treturn (await this.conversation(id, ctx))!;\n\t}\n\tentries(scan: EntryScan, ctx: Context): Promise<Entry[]> {\n\t\treturn this.session.read((s, lineCtx) => s.scanEntries(scan, lineCtx), ctx);\n\t}\n\tgetTask(id: Id, ctx: Context): Promise<Task | undefined> {\n\t\treturn this.session.read((s, lineCtx) => s.task(id, lineCtx), ctx);\n\t}\n\tasync abortInput(id: Id, ctx: Context, conversationId?: Id): Promise<\"aborted\" | \"already_placed\" | \"not_found\"> {\n\t\tif (conversationId !== undefined) {\n\t\t\tconst input = await this.session.read((storage, lineCtx) => storage.input(id, lineCtx), ctx);\n\t\t\tif (input !== undefined && input.conversationId !== conversationId)\n\t\t\t\tthrow new Forbidden(`input ${id} is outside conversation ${conversationId}`);\n\t\t}\n\t\treturn this.inputHandle(id).abort(ctx);\n\t}\n\tabortTask(id: Id, ctx: Context): Promise<\"marked\" | \"terminal\"> {\n\t\treturn this.scheduler.abortTask(id, ctx);\n\t}\n\t/** Durably mark a task for abort without signalling its invocation; the scheduler aborts it when it next drains. */\n\tmarkTask(id: Id, ctx: Context): Promise<\"marked\" | \"terminal\"> {\n\t\treturn this.session\n\t\t\t.commit(\n\t\t\t\tKERNEL,\n\t\t\t\tasync (tx) => {\n\t\t\t\t\tconst t = await tx.task(id);\n\t\t\t\t\tif (t === undefined) throw new Error(`task ${id} not found`);\n\t\t\t\t\tif (t.status === \"terminal\") return \"terminal\" as const;\n\t\t\t\t\ttx.markTask(id);\n\t\t\t\t\treturn \"marked\" as const;\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t)\n\t\t\t.then((r) => r.value);\n\t}\n\twaitForIdle(ctx: Context): Promise<void> {\n\t\treturn this.scheduler.waitForIdle(undefined, ctx);\n\t}\n\twaitForTask(id: Id, ctx: Context): Promise<Task> {\n\t\treturn this.scheduler.waitForTask(id, ctx);\n\t}\n\n\t/** Signals every invocation, waits for them, closes storage. Writes nothing. */\n\tasync close(ctx: Context) {\n\t\tawait this.suspend(ctx);\n\t}\n\n\tprivate handle(c: Conversation): ConversationHandle<ConfigFor<Ks>> {\n\t\tconst self = this;\n\t\tconst docs: DocRef[] = [\n\t\t\t{ doc: \"rewindable\", conversationId: c.id },\n\t\t\t{ doc: \"sticky\", conversationId: c.id },\n\t\t];\n\t\tconst hostInvoker: Invoker = { type: \"host\", conversationId: c.id };\n\t\tconst kernelInvoker: Invoker = { type: \"kernel\", conversationId: c.id };\n\t\tconst host = <T>(fn: (tx: HostTx, ctx: Context) => T | Promise<T>, ctx: Context) =>\n\t\t\tself.session.commit(hostInvoker, (tx, lineCtx) => fn(tx, lineCtx), ctx, { docs }).then((r) => r.value);\n\t\tconst kernel = <T>(fn: (tx: TxImpl, ctx: Context) => T | Promise<T>, ctx: Context) =>\n\t\t\tself.session.commit(kernelInvoker, fn, ctx, { docs }).then((r) => r.value);\n\t\tconst config: ConfigFacade<ConfigFor<Ks>> = {\n\t\t\tget: (ctx) =>\n\t\t\t\thost((tx) => {\n\t\t\t\t\tconst cfg = tx.config(c.id);\n\t\t\t\t\tconst out: { [k: string]: JsonValue | undefined } = {};\n\t\t\t\t\tfor (const key of self.session.defaults.route.keys()) out[key] = cfg.get(key);\n\t\t\t\t\treturn out as ConfigFor<Ks>;\n\t\t\t\t}, ctx),\n\t\t\tset: (patch, ctx) =>\n\t\t\t\thost((tx) => {\n\t\t\t\t\tconst cfg = tx.config(c.id);\n\t\t\t\t\tfor (const [key, value] of Object.entries(patch)) {\n\t\t\t\t\t\tif (value === undefined) throw new Error(`config.set(${key}): use config.reset()`);\n\t\t\t\t\t\tcfg.set(key, value as JsonValue);\n\t\t\t\t\t}\n\t\t\t\t}, ctx),\n\t\t\treset: (keys, ctx) =>\n\t\t\t\thost((tx) => {\n\t\t\t\t\tconst cfg = tx.config(c.id);\n\t\t\t\t\tfor (const key of keys) cfg.reset(String(key));\n\t\t\t\t}, ctx),\n\t\t};\n\t\treturn {\n\t\t\tid: c.id,\n\t\t\tconfig,\n\t\t\tasync send(input, ctx) {\n\t\t\t\tconst id = await kernel((tx) => tx.send(c.id, input), ctx);\n\t\t\t\treturn self.inputHandle(id);\n\t\t\t},\n\t\t\twrite: (entry, ctx) => host((tx) => tx.write(c.id, entry), ctx),\n\t\t\tcommit: host,\n\t\t\trewindable: (ctx) => host((tx) => tx.snapshot({ doc: \"rewindable\", conversationId: c.id }), ctx),\n\t\t\tsticky: (ctx) => host((tx) => tx.snapshot({ doc: \"sticky\", conversationId: c.id }), ctx),\n\t\t\tcontext: (ctx) => host((tx) => tx.context(c.id), ctx),\n\t\t\tasync fork(at, spec, ctx) {\n\t\t\t\tconst id = await self.session.fork(c.id, at, spec, ctx);\n\t\t\t\treturn (await self.conversation(id, ctx))!;\n\t\t\t},\n\t\t\tcollapse: (instructions, ctx) =>\n\t\t\t\tkernel(async (tx) => {\n\t\t\t\t\tconst { entries } = await tx.context(c.id);\n\t\t\t\t\tconst state = tx.rewindable(c.id);\n\t\t\t\t\tconst through = chooseThrough(entries, state.keepRecent);\n\t\t\t\t\tif (through === undefined) throw new Error(\"nothing to collapse\");\n\t\t\t\t\treturn tx.createTask({\n\t\t\t\t\t\tkind: \"pi.collapse\",\n\t\t\t\t\t\tconversationId: c.id,\n\t\t\t\t\t\tbackground: true,\n\t\t\t\t\t\tinput: { reason: \"manual\", through, ...(instructions === undefined ? {} : { instructions }) },\n\t\t\t\t\t});\n\t\t\t\t}, ctx),\n\t\t\treset: async (handoff, ctx) => {\n\t\t\t\tawait kernel(\n\t\t\t\t\t(tx) =>\n\t\t\t\t\t\ttx.write(\n\t\t\t\t\t\t\tc.id,\n\t\t\t\t\t\t\thandoff === undefined\n\t\t\t\t\t\t\t\t? { kind: \"pi.reset\", head: \"self\" }\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\tkind: \"pi.handoff\",\n\t\t\t\t\t\t\t\t\t\thead: \"self\",\n\t\t\t\t\t\t\t\t\t\tmodel: [{ role: \"user\", content: handoff, timestamp: self.now() }],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\tctx,\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync abort(ctx) {\n\t\t\t\tconst owned: Id[] = [];\n\t\t\t\tconst marked = await kernel(async (tx) => {\n\t\t\t\t\tconst s = tx.sticky(c.id);\n\t\t\t\t\tconst withdrawn = s.inbox.filter((q) => q.mode !== \"write\").map((q) => q.id);\n\t\t\t\t\tfor (let i = s.inbox.length - 1; i >= 0; i--) if (s.inbox[i]!.mode !== \"write\") s.inbox.splice(i, 1);\n\t\t\t\t\tawait tx.resolveInputs(withdrawn, { status: \"unanswered\", reason: \"aborted\" });\n\t\t\t\t\tfor (const input of withdrawn) tx.emit({ type: \"input.aborted\", input });\n\t\t\t\t\tconst ids: Id[] = [];\n\t\t\t\t\tfor (const t of [...self.session.liveTasks.values()]) {\n\t\t\t\t\t\tif (t.conversationId !== c.id || t.background) continue;\n\t\t\t\t\t\tfor (const o of t.owns) owned.push(o);\n\t\t\t\t\t\tif (t.abort !== true) tx.markTask(t.id);\n\t\t\t\t\t\tids.push(t.id);\n\t\t\t\t\t}\n\t\t\t\t\treturn ids;\n\t\t\t\t}, ctx);\n\t\t\t\tfor (const id of marked) await self.scheduler.abortTask(id, ctx);\n\t\t\t\tawait self.scheduler.waitForIdle(c.id, ctx);\n\t\t\t\tawait Promise.all(owned.map((o) => self.scheduler.waitForIdle(o, ctx)));\n\t\t\t},\n\t\t\twaitForIdle: (ctx) => self.scheduler.waitForIdle(c.id, ctx),\n\t\t\thooks: (namespace, kind, handlers, opts) =>\n\t\t\t\tself.addHooks({\n\t\t\t\t\tnamespace: self.checkNamespace(namespace),\n\t\t\t\t\tkind: self.checkKind(kind),\n\t\t\t\t\thandlers,\n\t\t\t\t\tconversationId: c.id,\n\t\t\t\t\tsubtree: opts?.subtree,\n\t\t\t\t}),\n\t\t\twatch: (ctx) => self.watch(c, ctx),\n\t\t};\n\t}\n\n\t/** Capture and subscribe in one line operation. */\n\tprivate async watch(conversation: Conversation, ctx: Context): Promise<Watch> {\n\t\treturn this.session\n\t\t\t.commit(\n\t\t\t\t{ type: \"host\", conversationId: conversation.id },\n\t\t\t\tasync (tx) => {\n\t\t\t\t\tconst entries = await captureActiveTranscript((scan) => tx.scanEntries(scan), conversation.id);\n\t\t\t\t\treturn this.views.watch(conversation, entries);\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t\t{\n\t\t\t\t\tdocs: [\n\t\t\t\t\t\t{ doc: \"rewindable\", conversationId: conversation.id },\n\t\t\t\t\t\t{ doc: \"sticky\", conversationId: conversation.id },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t)\n\t\t\t.then((result) => result.value);\n\t}\n\n\tprivate inputHandle(id: Id): InputHandle {\n\t\treturn {\n\t\t\tid,\n\t\t\tresult: (ctx) => this.session.read((s, lineCtx) => s.input(id, lineCtx), ctx),\n\t\t\twait: (ctx) => this.scheduler.waitForInput(id, ctx),\n\t\t\tabort: (ctx) =>\n\t\t\t\tthis.session.commit(KERNEL, (tx) => tx.withdrawInput(id), ctx, { docs: [] }).then((r) => r.value),\n\t\t};\n\t}\n}\n\n/**\n * §9: H = newest fork-visible entry with a head. Active transcript = H plus every fork-visible entry\n * with id ≥ H.head, chronological, nothing dropped inside the range; the whole transcript if no head.\n */\nexport async function captureActiveTranscript(\n\tscan: (s: EntryScan) => Promise<Entry[]>,\n\tconversationId: Id,\n): Promise<Entry[]> {\n\tconst [h] = await scan({ conversationId, withHead: true, limit: 1 });\n\tconst from = h?.head;\n\tconst out: Entry[] = [];\n\tlet before: Id | undefined;\n\tfor (;;) {\n\t\tconst page = await scan({ conversationId, ...(before === undefined ? {} : { before }), limit: 256 });\n\t\tlet done = page.length < 256;\n\t\tfor (const e of page) {\n\t\t\tif (from !== undefined && e.id < from) {\n\t\t\t\tdone = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tout.push(e);\n\t\t}\n\t\tif (done) break;\n\t\tbefore = page[page.length - 1]!.id;\n\t}\n\treturn out.reverse();\n}\n\nexport { withAbortSignal, isCoreKind };\nexport type { ConversationView, Envelope, ViewEvent } from \"./types.ts\";\nexport type { Watch } from \"./view.ts\";\nexport { applyEnvelope, WATCH_CAPACITY } from \"./view.ts\";\n/** The built-in kinds, as typed witnesses for `api.task`, `waitForTask`, and `hooks(kind, …)`. */\nexport const kinds = { generation, tool, postTools, collapse, job, plugin } as const;\nexport const entries = builtinEntries;\nexport type { ToolDeclaration, TSchema };\n"]}
@@ -1,4 +1,4 @@
1
- import type { AnyKind, HookRunner, Id, Namespace } from "./types.ts";
1
+ import type { AnyKind, HookInfo, HookRunner, Id, Namespace } from "./types.ts";
2
2
  export interface HookRegistration {
3
3
  namespace: Namespace;
4
4
  kind: AnyKind;
@@ -6,5 +6,5 @@ export interface HookRegistration {
6
6
  conversationId?: Id;
7
7
  subtree?: boolean;
8
8
  }
9
- export declare function createHookRunners(registrations: () => readonly HookRegistration[], ancestors: (conversationId: Id) => readonly Id[], onReport: (error: unknown) => void): <H extends object>(kind: AnyKind, info: Omit<import("./types.ts").HookApi, "kind">) => HookRunner<H>;
9
+ export declare function createHookRunners(registrations: () => readonly HookRegistration[], ancestors: (conversationId: Id) => readonly Id[], onReport: (error: unknown) => void): <H extends object>(kind: AnyKind, info: Omit<HookInfo, "kind">) => HookRunner<H>;
10
10
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/harness/pico3/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAY,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE/E,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAChC,aAAa,EAAE,MAAM,SAAS,gBAAgB,EAAE,EAChD,SAAS,EAAE,CAAC,cAAc,EAAE,EAAE,KAAK,SAAS,EAAE,EAAE,EAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,IAE1B,CAAC,mGA+BT","sourcesContent":["import type { AnyKind, HookInfo, HookRunner, Id, Namespace } from \"./types.ts\";\n\nexport interface HookRegistration {\n\tnamespace: Namespace;\n\tkind: AnyKind;\n\thandlers: object;\n\tconversationId?: Id;\n\tsubtree?: boolean;\n}\n\nexport function createHookRunners(\n\tregistrations: () => readonly HookRegistration[],\n\tancestors: (conversationId: Id) => readonly Id[],\n\tonReport: (error: unknown) => void,\n) {\n\treturn <H extends object>(kind: AnyKind, info: Omit<HookInfo, \"kind\">): HookRunner<H> => {\n\t\tconst handlers = () =>\n\t\t\tregistrations()\n\t\t\t\t.filter((registration) => registration.kind === kind)\n\t\t\t\t.filter(\n\t\t\t\t\t(registration) =>\n\t\t\t\t\t\tregistration.conversationId === undefined ||\n\t\t\t\t\t\tregistration.conversationId === info.conversationId ||\n\t\t\t\t\t\t(registration.subtree === true &&\n\t\t\t\t\t\t\tancestors(info.conversationId).includes(registration.conversationId)),\n\t\t\t\t)\n\t\t\t\t.map((registration) => ({\n\t\t\t\t\thandlers: registration.handlers as Partial<H>,\n\t\t\t\t\tnamespace: registration.namespace,\n\t\t\t\t\tapi: { ...info, kind: kind.name },\n\t\t\t\t}));\n\t\treturn {\n\t\t\thandlers,\n\t\t\tasync each(ctx, fn, onValue) {\n\t\t\t\tfor (const binding of handlers()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst v = await fn(binding.handlers, binding.api);\n\t\t\t\t\t\tif (v !== undefined && onValue?.(v as never) === true) return;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (ctx.abortSignal?.aborted) throw error;\n\t\t\t\t\t\tonReport(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t};\n}\n"]}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/harness/pico3/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE/E,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAChC,aAAa,EAAE,MAAM,SAAS,gBAAgB,EAAE,EAChD,SAAS,EAAE,CAAC,cAAc,EAAE,EAAE,KAAK,SAAS,EAAE,EAAE,EAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,IAE1B,CAAC,SAAS,MAAM,QAAQ,OAAO,QAAQ,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAG,UAAU,CAAC,CAAC,CAAC,CA+BrF"}
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/harness/pico3/hooks.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,iBAAiB,CAChC,aAAgD,EAChD,SAAgD,EAChD,QAAkC,EACjC;IACD,OAAO,CAAmB,IAAa,EAAE,IAA4B,EAAiB,EAAE,CAAC;QACxF,MAAM,QAAQ,GAAG,GAAG,EAAE,CACrB,aAAa,EAAE;aACb,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC;aACpD,MAAM,CACN,CAAC,YAAY,EAAE,EAAE,CAChB,YAAY,CAAC,cAAc,KAAK,SAAS;YACzC,YAAY,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc;YACnD,CAAC,YAAY,CAAC,OAAO,KAAK,IAAI;gBAC7B,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CACvE;aACA,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACvB,QAAQ,EAAE,YAAY,CAAC,QAAsB;YAC7C,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;SACjC,CAAC,CAAC,CAAC;QACN,OAAO;YACN,QAAQ;YACR,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE;gBAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,EAAE,CAAC;oBAClC,IAAI,CAAC;wBACJ,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;wBAClD,IAAI,CAAC,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC,CAAU,CAAC,KAAK,IAAI;4BAAE,OAAO;oBAC/D,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,IAAI,GAAG,CAAC,WAAW,EAAE,OAAO;4BAAE,MAAM,KAAK,CAAC;wBAC1C,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC;gBACF,CAAC;YAAA,CACD;SACD,CAAC;IAAA,CACF,CAAC;AAAA,CACF","sourcesContent":["import type { AnyKind, HookInfo, HookRunner, Id, Namespace } from \"./types.ts\";\n\nexport interface HookRegistration {\n\tnamespace: Namespace;\n\tkind: AnyKind;\n\thandlers: object;\n\tconversationId?: Id;\n\tsubtree?: boolean;\n}\n\nexport function createHookRunners(\n\tregistrations: () => readonly HookRegistration[],\n\tancestors: (conversationId: Id) => readonly Id[],\n\tonReport: (error: unknown) => void,\n) {\n\treturn <H extends object>(kind: AnyKind, info: Omit<HookInfo, \"kind\">): HookRunner<H> => {\n\t\tconst handlers = () =>\n\t\t\tregistrations()\n\t\t\t\t.filter((registration) => registration.kind === kind)\n\t\t\t\t.filter(\n\t\t\t\t\t(registration) =>\n\t\t\t\t\t\tregistration.conversationId === undefined ||\n\t\t\t\t\t\tregistration.conversationId === info.conversationId ||\n\t\t\t\t\t\t(registration.subtree === true &&\n\t\t\t\t\t\t\tancestors(info.conversationId).includes(registration.conversationId)),\n\t\t\t\t)\n\t\t\t\t.map((registration) => ({\n\t\t\t\t\thandlers: registration.handlers as Partial<H>,\n\t\t\t\t\tnamespace: registration.namespace,\n\t\t\t\t\tapi: { ...info, kind: kind.name },\n\t\t\t\t}));\n\t\treturn {\n\t\t\thandlers,\n\t\t\tasync each(ctx, fn, onValue) {\n\t\t\t\tfor (const binding of handlers()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst v = await fn(binding.handlers, binding.api);\n\t\t\t\t\t\tif (v !== undefined && onValue?.(v as never) === true) return;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (ctx.abortSignal?.aborted) throw error;\n\t\t\t\t\t\tonReport(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t};\n}\n"]}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/harness/pico3/hooks.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,iBAAiB,CAChC,aAAgD,EAChD,SAAgD,EAChD,QAAkC;IAElC,OAAO,CAAmB,IAAa,EAAE,IAA4B,EAAiB,EAAE;QACvF,MAAM,QAAQ,GAAG,GAAG,EAAE,CACrB,aAAa,EAAE;aACb,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC;aACpD,MAAM,CACN,CAAC,YAAY,EAAE,EAAE,CAChB,YAAY,CAAC,cAAc,KAAK,SAAS;YACzC,YAAY,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc;YACnD,CAAC,YAAY,CAAC,OAAO,KAAK,IAAI;gBAC7B,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CACvE;aACA,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACvB,QAAQ,EAAE,YAAY,CAAC,QAAsB;YAC7C,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;SACjC,CAAC,CAAC,CAAC;QACN,OAAO;YACN,QAAQ;YACR,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO;gBAC1B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,EAAE,CAAC;oBAClC,IAAI,CAAC;wBACJ,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;wBAClD,IAAI,CAAC,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC,CAAU,CAAC,KAAK,IAAI;4BAAE,OAAO;oBAC/D,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,IAAI,GAAG,CAAC,WAAW,EAAE,OAAO;4BAAE,MAAM,KAAK,CAAC;wBAC1C,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC;gBACF,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC,CAAC;AACH,CAAC","sourcesContent":["import type { AnyKind, HookInfo, HookRunner, Id, Namespace } from \"./types.ts\";\n\nexport interface HookRegistration {\n\tnamespace: Namespace;\n\tkind: AnyKind;\n\thandlers: object;\n\tconversationId?: Id;\n\tsubtree?: boolean;\n}\n\nexport function createHookRunners(\n\tregistrations: () => readonly HookRegistration[],\n\tancestors: (conversationId: Id) => readonly Id[],\n\tonReport: (error: unknown) => void,\n) {\n\treturn <H extends object>(kind: AnyKind, info: Omit<HookInfo, \"kind\">): HookRunner<H> => {\n\t\tconst handlers = () =>\n\t\t\tregistrations()\n\t\t\t\t.filter((registration) => registration.kind === kind)\n\t\t\t\t.filter(\n\t\t\t\t\t(registration) =>\n\t\t\t\t\t\tregistration.conversationId === undefined ||\n\t\t\t\t\t\tregistration.conversationId === info.conversationId ||\n\t\t\t\t\t\t(registration.subtree === true &&\n\t\t\t\t\t\t\tancestors(info.conversationId).includes(registration.conversationId)),\n\t\t\t\t)\n\t\t\t\t.map((registration) => ({\n\t\t\t\t\thandlers: registration.handlers as Partial<H>,\n\t\t\t\t\tnamespace: registration.namespace,\n\t\t\t\t\tapi: { ...info, kind: kind.name },\n\t\t\t\t}));\n\t\treturn {\n\t\t\thandlers,\n\t\t\tasync each(ctx, fn, onValue) {\n\t\t\t\tfor (const binding of handlers()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst v = await fn(binding.handlers, binding.api);\n\t\t\t\t\t\tif (v !== undefined && onValue?.(v as never) === true) return;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (ctx.abortSignal?.aborted) throw error;\n\t\t\t\t\t\tonReport(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/harness/pico3/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EACX,eAAe,EACf,sBAAsB,EACtB,yBAAyB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,eAAe,EACf,6BAA6B,EAC7B,uBAAuB,EACvB,kBAAkB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EACX,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,KAAK,GACL,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,aAAa,EACb,uBAAuB,EACvB,OAAO,EACP,OAAO,EACP,UAAU,EACV,KAAK,EACL,cAAc,EACd,eAAe,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClE,YAAY,EACX,YAAY,EACZ,OAAO,EACP,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,OAAO,EACP,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,QAAQ,EACR,UAAU,EACV,UAAU,EACV,OAAO,EACP,MAAM,EACN,EAAE,EACF,KAAK,EACL,OAAO,EACP,UAAU,EACV,aAAa,EACb,SAAS,EACT,IAAI,EACJ,UAAU,EACV,SAAS,EACT,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,EACX,eAAe,EACf,OAAO,EACP,SAAS,EACT,GAAG,EACH,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,WAAW,EACX,OAAO,EACP,MAAM,EACN,aAAa,EACb,aAAa,EACb,IAAI,EACJ,MAAM,EACN,OAAO,EACP,QAAQ,EACR,MAAM,EACN,aAAa,EACb,OAAO,EACP,QAAQ,EACR,WAAW,EACX,eAAe,EACf,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,SAAS,EACT,KAAK,GACL,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,MAAM,EACN,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,OAAO,EACP,SAAS,EACT,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,QAAQ,GACR,MAAM,YAAY,CAAC","sourcesContent":["/**\n * Experimental Pico3 kernel API.\n *\n * This subpath is intentionally separate from the package root while the kernel\n * and its Chord integration are being validated.\n */\n\nexport { bashTool } from \"./bash.ts\";\nexport { Bounded } from \"./bounded.ts\";\nexport type {\n\tChordViewBridge,\n\tChordViewBridgeOptions,\n\tPublishedConversationView,\n} from \"./chord.ts\";\nexport {\n\tattachChordView,\n\tcreatePicoConversationService,\n\tPicoConversationService,\n\tPicoHarnessService,\n} from \"./chord.ts\";\nexport type {\n\tBuiltinKinds,\n\tConfigFor,\n\tConversationHandle,\n\tHarnessOptions,\n\tInputHandle,\n\tWatch,\n} from \"./harness.ts\";\nexport {\n\tapplyEnvelope,\n\tcaptureActiveTranscript,\n\tentries,\n\tHarness,\n\tisCoreKind,\n\tkinds,\n\tWATCH_CAPACITY,\n\twithAbortSignal,\n} from \"./harness.ts\";\nexport { JsonlStorage } from \"./jsonl.ts\";\nexport { MemoryStorage } from \"./memory.ts\";\nexport type { SystemSection } from \"./system.ts\";\nexport { defineSystemSection, systemSections } from \"./system.ts\";\nexport type {\n\tAbortClosure,\n\tAnyKind,\n\tAnyToolDeclaration,\n\tAssistantMessage,\n\tBeforeToolApi,\n\tCheckpoint,\n\tCheckpointAt,\n\tClosure,\n\tCompletion,\n\tConfigFacade,\n\tConfigOf,\n\tConfigOfKinds,\n\tConfigShape,\n\tContextEdit,\n\tContextView,\n\tConversation,\n\tConversationSpec,\n\tConversationView,\n\tDeferredHandle,\n\tDisjointConfig,\n\tDocRef,\n\tEntry,\n\tEntryInput,\n\tEntryKind,\n\tEntryRef,\n\tEntryScan,\n\tEnvelope,\n\tGenerationStatus,\n\tHookApi,\n\tHookBinding,\n\tHookInfo,\n\tHookResult,\n\tHookRunner,\n\tHooksOf,\n\tHostTx,\n\tId,\n\tInput,\n\tInputOf,\n\tJsonObject,\n\tJsonPrimitive,\n\tJsonValue,\n\tKind,\n\tKindConfig,\n\tKindTypes,\n\tMessage,\n\tModel,\n\tModelRef,\n\tModels,\n\tNamespace,\n\tNamespaceDefaults,\n\tNewEntry,\n\tOutcome,\n\tOwnedConversation,\n\tOwnedConversationSpec,\n\tPhaseHandler,\n\tPluginHandler,\n\tProcessHost,\n\tProcessSpec,\n\tProcessStatus,\n\tQueuedInput,\n\tRequestMessage,\n\tRequestOptions,\n\tRetryPolicy,\n\tRewindableState,\n\tRuntime,\n\tSendInput,\n\tSeq,\n\tSessionState,\n\tSlotOf,\n\tStep,\n\tStickyState,\n\tStorage,\n\tStored,\n\tStoredMessage,\n\tSystemMessage,\n\tTask,\n\tTaskOf,\n\tTaskRef,\n\tTaskScan,\n\tTaskTx,\n\tThinkingLevel,\n\tToolApi,\n\tToolCall,\n\tToolControl,\n\tToolDeclaration,\n\tToolDiagnostic,\n\tToolResult,\n\tToolResultMessage,\n\tToolSlot,\n\tTurnState,\n\tTurnView,\n\tUserInput,\n\tUserMessage,\n\tViewEvent,\n\tWrite,\n} from \"./types.ts\";\nexport {\n\tClosed,\n\tCollapseInProgress,\n\tConversationBusy,\n\tdefineEntry,\n\tdefineTask,\n\tFaulted,\n\tForbidden,\n\tGenerationInProgress,\n\tmemoOnce,\n\tReadAfterWrite,\n\tTaskContractFault,\n\ttoStored,\n} from \"./types.ts\";\n"]}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/harness/pico3/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EACX,eAAe,EACf,sBAAsB,EACtB,yBAAyB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,eAAe,EACf,6BAA6B,EAC7B,uBAAuB,EACvB,kBAAkB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EACX,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,KAAK,GACL,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,aAAa,EACb,uBAAuB,EACvB,OAAO,EACP,OAAO,EACP,UAAU,EACV,KAAK,EACL,cAAc,EACd,eAAe,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClE,YAAY,EACX,YAAY,EACZ,OAAO,EACP,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,OAAO,EACP,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,QAAQ,EACR,UAAU,EACV,UAAU,EACV,OAAO,EACP,MAAM,EACN,EAAE,EACF,KAAK,EACL,OAAO,EACP,UAAU,EACV,aAAa,EACb,SAAS,EACT,IAAI,EACJ,UAAU,EACV,SAAS,EACT,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,EACX,eAAe,EACf,OAAO,EACP,SAAS,EACT,GAAG,EACH,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,WAAW,EACX,OAAO,EACP,MAAM,EACN,aAAa,EACb,aAAa,EACb,IAAI,EACJ,MAAM,EACN,OAAO,EACP,QAAQ,EACR,MAAM,EACN,aAAa,EACb,OAAO,EACP,QAAQ,EACR,WAAW,EACX,eAAe,EACf,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,SAAS,EACT,KAAK,GACL,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,MAAM,EACN,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,OAAO,EACP,SAAS,EACT,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,QAAQ,GACR,MAAM,YAAY,CAAC"}