@earendil-works/pi-durable 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/CHANGELOG.md +186 -0
  2. package/README.md +181 -84
  3. package/dist/codemode/codemode.d.ts +4 -4
  4. package/dist/codemode/codemode.d.ts.map +1 -1
  5. package/dist/codemode/codemode.js +9 -12
  6. package/dist/codemode/codemode.js.map +1 -1
  7. package/dist/codemode/models.js +4 -4
  8. package/dist/codemode/models.js.map +1 -1
  9. package/dist/env/index.d.ts +12 -10
  10. package/dist/env/index.d.ts.map +1 -1
  11. package/dist/env/index.js.map +1 -1
  12. package/dist/env/node-watch.d.ts +3 -3
  13. package/dist/env/node-watch.d.ts.map +1 -1
  14. package/dist/env/node-watch.js +18 -16
  15. package/dist/env/node-watch.js.map +1 -1
  16. package/dist/env/node.d.ts +2 -2
  17. package/dist/env/node.d.ts.map +1 -1
  18. package/dist/env/node.js +1 -1
  19. package/dist/env/node.js.map +1 -1
  20. package/dist/errors.d.ts +18 -2
  21. package/dist/errors.d.ts.map +1 -1
  22. package/dist/errors.js +26 -3
  23. package/dist/errors.js.map +1 -1
  24. package/dist/harness/agent.d.ts.map +1 -1
  25. package/dist/harness/agent.js +10 -2
  26. package/dist/harness/agent.js.map +1 -1
  27. package/dist/harness/compaction.d.ts.map +1 -1
  28. package/dist/harness/compaction.js +19 -2
  29. package/dist/harness/compaction.js.map +1 -1
  30. package/dist/harness/context.d.ts +23 -7
  31. package/dist/harness/context.d.ts.map +1 -1
  32. package/dist/harness/context.js +71 -25
  33. package/dist/harness/context.js.map +1 -1
  34. package/dist/harness/define.d.ts +7 -3
  35. package/dist/harness/define.d.ts.map +1 -1
  36. package/dist/harness/define.js +4 -0
  37. package/dist/harness/define.js.map +1 -1
  38. package/dist/harness/generation.d.ts +38 -5
  39. package/dist/harness/generation.d.ts.map +1 -1
  40. package/dist/harness/generation.js +445 -96
  41. package/dist/harness/generation.js.map +1 -1
  42. package/dist/harness/harness.d.ts +2 -0
  43. package/dist/harness/harness.d.ts.map +1 -1
  44. package/dist/harness/harness.js +87 -62
  45. package/dist/harness/harness.js.map +1 -1
  46. package/dist/harness/inbox.d.ts +5 -1
  47. package/dist/harness/inbox.d.ts.map +1 -1
  48. package/dist/harness/inbox.js +4 -1
  49. package/dist/harness/inbox.js.map +1 -1
  50. package/dist/harness/json.d.ts +20 -4
  51. package/dist/harness/json.d.ts.map +1 -1
  52. package/dist/harness/json.js +23 -5
  53. package/dist/harness/json.js.map +1 -1
  54. package/dist/harness/live.d.ts +122 -16
  55. package/dist/harness/live.d.ts.map +1 -1
  56. package/dist/harness/live.js +93 -12
  57. package/dist/harness/live.js.map +1 -1
  58. package/dist/harness/partial-changes.d.ts +54 -0
  59. package/dist/harness/partial-changes.d.ts.map +1 -0
  60. package/dist/harness/partial-changes.js +162 -0
  61. package/dist/harness/partial-changes.js.map +1 -0
  62. package/dist/harness/registry-reader.d.ts +11 -0
  63. package/dist/harness/registry-reader.d.ts.map +1 -0
  64. package/dist/harness/registry-reader.js +25 -0
  65. package/dist/harness/registry-reader.js.map +1 -0
  66. package/dist/harness/scheduler.d.ts +46 -19
  67. package/dist/harness/scheduler.d.ts.map +1 -1
  68. package/dist/harness/scheduler.js +973 -376
  69. package/dist/harness/scheduler.js.map +1 -1
  70. package/dist/harness/submissions.d.ts +17 -10
  71. package/dist/harness/submissions.d.ts.map +1 -1
  72. package/dist/harness/submissions.js +62 -25
  73. package/dist/harness/submissions.js.map +1 -1
  74. package/dist/harness/task-graph.d.ts +12 -9
  75. package/dist/harness/task-graph.d.ts.map +1 -1
  76. package/dist/harness/task-graph.js +38 -28
  77. package/dist/harness/task-graph.js.map +1 -1
  78. package/dist/harness/telemetry.d.ts +11 -11
  79. package/dist/harness/telemetry.d.ts.map +1 -1
  80. package/dist/harness/telemetry.js +7 -7
  81. package/dist/harness/telemetry.js.map +1 -1
  82. package/dist/harness/tool.d.ts +2 -0
  83. package/dist/harness/tool.d.ts.map +1 -1
  84. package/dist/harness/tool.js +171 -55
  85. package/dist/harness/tool.js.map +1 -1
  86. package/dist/harness/transcript.d.ts +72 -0
  87. package/dist/harness/transcript.d.ts.map +1 -0
  88. package/dist/harness/transcript.js +264 -0
  89. package/dist/harness/transcript.js.map +1 -0
  90. package/dist/harness/types.d.ts +218 -59
  91. package/dist/harness/types.d.ts.map +1 -1
  92. package/dist/harness/types.js.map +1 -1
  93. package/dist/harness/util.d.ts +3 -1
  94. package/dist/harness/util.d.ts.map +1 -1
  95. package/dist/harness/util.js +9 -0
  96. package/dist/harness/util.js.map +1 -1
  97. package/dist/harness/view.d.ts +43 -22
  98. package/dist/harness/view.d.ts.map +1 -1
  99. package/dist/harness/view.js +130 -71
  100. package/dist/harness/view.js.map +1 -1
  101. package/dist/index.d.ts +9 -7
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +4 -3
  104. package/dist/index.js.map +1 -1
  105. package/dist/search.d.ts +19 -3
  106. package/dist/search.d.ts.map +1 -1
  107. package/dist/search.js +107 -44
  108. package/dist/search.js.map +1 -1
  109. package/dist/session/cached-storage.d.ts +71 -0
  110. package/dist/session/cached-storage.d.ts.map +1 -0
  111. package/dist/session/cached-storage.js +269 -0
  112. package/dist/session/cached-storage.js.map +1 -0
  113. package/dist/session/conversation-tails.d.ts +33 -0
  114. package/dist/session/conversation-tails.d.ts.map +1 -0
  115. package/dist/session/conversation-tails.js +101 -0
  116. package/dist/session/conversation-tails.js.map +1 -0
  117. package/dist/session/keys.d.ts +68 -0
  118. package/dist/session/keys.d.ts.map +1 -0
  119. package/dist/session/keys.js +161 -0
  120. package/dist/session/keys.js.map +1 -0
  121. package/dist/session/session.d.ts +167 -26
  122. package/dist/session/session.d.ts.map +1 -1
  123. package/dist/session/session.js +1029 -171
  124. package/dist/session/session.js.map +1 -1
  125. package/dist/session/transaction.d.ts +81 -3
  126. package/dist/session/transaction.d.ts.map +1 -1
  127. package/dist/session/transaction.js +224 -37
  128. package/dist/session/transaction.js.map +1 -1
  129. package/dist/session/writer.d.ts +74 -0
  130. package/dist/session/writer.d.ts.map +1 -0
  131. package/dist/session/writer.js +294 -0
  132. package/dist/session/writer.js.map +1 -0
  133. package/dist/storage/indexeddb.d.ts +10 -2
  134. package/dist/storage/indexeddb.d.ts.map +1 -1
  135. package/dist/storage/indexeddb.js +91 -41
  136. package/dist/storage/indexeddb.js.map +1 -1
  137. package/dist/storage/jsonl/storage.d.ts +14 -2
  138. package/dist/storage/jsonl/storage.d.ts.map +1 -1
  139. package/dist/storage/jsonl/storage.js +88 -24
  140. package/dist/storage/jsonl/storage.js.map +1 -1
  141. package/dist/storage/memory.d.ts +7 -2
  142. package/dist/storage/memory.d.ts.map +1 -1
  143. package/dist/storage/memory.js +28 -2
  144. package/dist/storage/memory.js.map +1 -1
  145. package/dist/storage/sqlite/storage.d.ts +14 -2
  146. package/dist/storage/sqlite/storage.d.ts.map +1 -1
  147. package/dist/storage/sqlite/storage.js +110 -36
  148. package/dist/storage/sqlite/storage.js.map +1 -1
  149. package/dist/storage/store/commit.d.ts +33 -0
  150. package/dist/storage/store/commit.d.ts.map +1 -0
  151. package/dist/storage/store/commit.js +286 -0
  152. package/dist/storage/store/commit.js.map +1 -0
  153. package/dist/storage/store/documents.d.ts +43 -0
  154. package/dist/storage/store/documents.d.ts.map +1 -0
  155. package/dist/storage/store/documents.js +102 -0
  156. package/dist/storage/store/documents.js.map +1 -0
  157. package/dist/storage/store/index.d.ts +2 -0
  158. package/dist/storage/store/index.d.ts.map +1 -0
  159. package/dist/storage/store/index.js +2 -0
  160. package/dist/storage/store/index.js.map +1 -0
  161. package/dist/storage/store/queries.d.ts +49 -0
  162. package/dist/storage/store/queries.d.ts.map +1 -0
  163. package/dist/storage/store/queries.js +93 -0
  164. package/dist/storage/store/queries.js.map +1 -0
  165. package/dist/storage/store/storage.d.ts +59 -0
  166. package/dist/storage/store/storage.d.ts.map +1 -0
  167. package/dist/storage/store/storage.js +438 -0
  168. package/dist/storage/store/storage.js.map +1 -0
  169. package/dist/storage/store/tables.d.ts +54 -0
  170. package/dist/storage/store/tables.d.ts.map +1 -0
  171. package/dist/storage/store/tables.js +108 -0
  172. package/dist/storage/store/tables.js.map +1 -0
  173. package/dist/testing/commit-writes.d.ts +5 -0
  174. package/dist/testing/commit-writes.d.ts.map +1 -0
  175. package/dist/testing/commit-writes.js +12 -0
  176. package/dist/testing/commit-writes.js.map +1 -0
  177. package/dist/testing/env-conformance.js +7 -7
  178. package/dist/testing/env-conformance.js.map +1 -1
  179. package/dist/testing/index.d.ts +1 -0
  180. package/dist/testing/index.d.ts.map +1 -1
  181. package/dist/testing/index.js +1 -0
  182. package/dist/testing/index.js.map +1 -1
  183. package/dist/testing/storage-benchmark.d.ts.map +1 -1
  184. package/dist/testing/storage-benchmark.js +18 -17
  185. package/dist/testing/storage-benchmark.js.map +1 -1
  186. package/dist/testing/storage-conformance.d.ts.map +1 -1
  187. package/dist/testing/storage-conformance.js +354 -69
  188. package/dist/testing/storage-conformance.js.map +1 -1
  189. package/dist/tool-search/tool-search.d.ts +6 -12
  190. package/dist/tool-search/tool-search.d.ts.map +1 -1
  191. package/dist/tool-search/tool-search.js +7 -7
  192. package/dist/tool-search/tool-search.js.map +1 -1
  193. package/dist/tools/bash.d.ts +12 -12
  194. package/dist/tools/bash.d.ts.map +1 -1
  195. package/dist/tools/bash.js +16 -15
  196. package/dist/tools/bash.js.map +1 -1
  197. package/dist/tools/edit.d.ts +7 -7
  198. package/dist/tools/edit.d.ts.map +1 -1
  199. package/dist/tools/edit.js +9 -9
  200. package/dist/tools/edit.js.map +1 -1
  201. package/dist/tools/index.d.ts +32 -32
  202. package/dist/tools/read.d.ts +6 -6
  203. package/dist/tools/read.d.ts.map +1 -1
  204. package/dist/tools/read.js +19 -8
  205. package/dist/tools/read.js.map +1 -1
  206. package/dist/tools/write.d.ts +4 -4
  207. package/dist/tools/write.d.ts.map +1 -1
  208. package/dist/tools/write.js +5 -5
  209. package/dist/tools/write.js.map +1 -1
  210. package/dist/types.d.ts +223 -77
  211. package/dist/types.d.ts.map +1 -1
  212. package/dist/types.js.map +1 -1
  213. package/package.json +19 -12
  214. package/dist/harness/events.d.ts +0 -186
  215. package/dist/harness/events.d.ts.map +0 -1
  216. package/dist/harness/events.js +0 -373
  217. package/dist/harness/events.js.map +0 -1
  218. package/dist/session/observation.d.ts +0 -42
  219. package/dist/session/observation.d.ts.map +0 -1
  220. package/dist/session/observation.js +0 -281
  221. package/dist/session/observation.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"generation.js","sourceRoot":"","sources":["../../src/harness/generation.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Context, copyJson, type Draft, type JsonValue } from \"@earendil-works/chord\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tDeferredHandle,\n\tMessage,\n\tModel,\n\tModelThinkingLevel,\n\tSimpleStreamOptions,\n\tToolCall,\n} from \"@earendil-works/pi-ai\";\nimport { isContextOverflow } from \"@earendil-works/pi-ai/utils/overflow\";\nimport { isRetryableAssistantError, retryDelayMs } from \"@earendil-works/pi-ai/utils/retry\";\nimport { getCurrentTools } from \"@earendil-works/pi-ai/utils/transcript\";\nimport { AssistantEntry, ResetEntry, SystemEntry, UserEntry } from \"../entries.ts\";\nimport type { ExecutionEnv } from \"../env/index.ts\";\nimport type { TaskCreationOptions } from \"../session/transaction.ts\";\nimport { defineTask } from \"../tasks.ts\";\nimport type {\n\tConversationId,\n\tEntryId,\n\tNextTaskState,\n\tSubmissionId,\n\tSubmissionSettlement,\n\tTaskId,\n\tTaskOutcome,\n\tTaskRuntime,\n\tTx,\n\tTypedEntry,\n} from \"../types.ts\";\nimport { addTools, sectionExtension } from \"./agent.ts\";\nimport { compactionPolicy, createCompaction, estimateContext, selectCut } from \"./compaction.ts\";\nimport { applyBoundary, type Boundary, prepareBoundary, withdrawQueuedInputs } from \"./inbox.ts\";\nimport { assignJson } from \"./json.ts\";\nimport { endRun, LiveDoc, type LiveState, type ToolSlot } from \"./live.ts\";\nimport { planSystemEntries, renderSections, replaySections } from \"./prompt.ts\";\nimport { ensureProviderSessionId } from \"./provider.ts\";\nimport { appendToolResult, harnessError, ToolTask, type ToolTaskResult } from \"./tool.ts\";\nimport type {\n\tAfterFailedRun,\n\tCompactionPolicy,\n\tCompactionResult,\n\tContextView,\n\tConversationStreamOptions,\n\tGenerationHooks,\n\tModelRef,\n\tPromptInput,\n\tToolControl,\n\tUserInput,\n} from \"./types.ts\";\nimport { recordUsage } from \"./usage.ts\";\nimport { optionalExtension } from \"./util.ts\";\n\nexport type GenerationInput = Record<string, never>;\n\nexport type GenerationCheckpoint =\n\t| {\n\t\t\tphase: \"prepare\";\n\t\t\tattempt: number;\n\t\t\t/** The blocking compaction this generation waited for; it starts no other compaction (spec §8.3). */\n\t\t\tcompacted?: TaskId<CompactionResult>;\n\t\t\t/** Error text of the overflow that started `compacted`; checked once when `prepare` resumes. */\n\t\t\toverflow?: string;\n\t\t\t/** Set when the blocking threshold started `compacted`; its outcome is checked once when `prepare` resumes. */\n\t\t\tthreshold?: true;\n\t }\n\t| {\n\t\t\tphase: \"request\";\n\t\t\tattempt: number;\n\t\t\tcompacted?: TaskId<CompactionResult>;\n\t\t\tmodel: ModelRef;\n\t\t\tthinkingLevel: ModelThinkingLevel;\n\t\t\t/** The settings' request options when preparation committed; a resend after recovery uses them unchanged. */\n\t\t\tstreamOptions: ConversationStreamOptions;\n\t\t\t/** Newest entry included in the request. */\n\t\t\tcutoff: EntryId;\n\t }\n\t| { phase: \"retry\"; attempt: number; compacted?: TaskId<CompactionResult>; until: number }\n\t| {\n\t\t\tphase: \"poll\";\n\t\t\tattempt: number;\n\t\t\tcompacted?: TaskId<CompactionResult>;\n\t\t\tmodel: ModelRef;\n\t\t\tcutoff: EntryId;\n\t\t\thandle: DeferredHandle;\n\t\t\tpollAt: number;\n\t }\n\t| {\n\t\t\t/** Waiting on the round's tool tasks, which the generation owns (spec §8.5). */\n\t\t\tphase: \"tools\";\n\t\t\t/** The tool-calling answer. */\n\t\t\tassistant: EntryId;\n\t\t\t/** Tool tasks created so far, in call order; grows by one per started call of a sequential round. */\n\t\t\ttools: TaskId<ToolTaskResult>[];\n\t\t\t/** Calls of a sequential round not started yet, in call order. */\n\t\t\tpending: string[];\n\t };\n\nexport type GenerationResult = { entryId: EntryId };\n\ntype Runtime = TaskRuntime<GenerationInput, GenerationCheckpoint, GenerationResult, GenerationHooks>;\ntype Next = NextTaskState<GenerationCheckpoint, GenerationResult>;\n\n/** What classification needs from the request that produced a message. */\ntype Request = {\n\treadonly attempt: number;\n\treadonly compacted: TaskId<CompactionResult> | undefined;\n\treadonly model: ModelRef;\n\treadonly cutoff: EntryId;\n\t/** Committed model context through `cutoff`, when the phase already derived it. */\n\treadonly messages?: readonly Message[];\n\t/** Set when the message came from polling, so a still deferred result polls strictly later. */\n\treadonly pollAt?: number;\n};\n\nconst DEFAULT_POLL_AFTER_MS = 5000;\n\n/**\n * Built-in generation task: prepares the positional system prompt and tool loadout, requests or polls the model,\n * retries, and classifies the response. The run's inputs live in `pi.live.run`.\n */\nexport const GenerationTask = defineTask<GenerationInput, GenerationCheckpoint, GenerationResult, GenerationHooks>({\n\tname: \"pi.generation\",\n\tversion: 1,\n\tinitial: () => ({ phase: \"prepare\", attempt: 1 }),\n\tphases: {\n\t\t/**\n\t\t * Render the system prompt and tool loadout and append the positional `pi.system` entries they need, then move to\n\t\t * `request`. The agent and settings resolved here are fixed for this request. Only the Harness writes model\n\t\t * context to a busy conversation, so the context read here is still current at the commit; display-only entries\n\t\t * may land meanwhile.\n\t\t */\n\t\tprepare: async (task, runtime, context) => {\n\t\t\tconst { conversationId } = runtime;\n\t\t\tconst agent = await runtime.agent(context);\n\t\t\tconst settings = runtime.settings;\n\t\t\tconst { model, thinkingLevel } = agent;\n\t\t\tconst resolved = model === undefined ? undefined : runtime.models.getModel(model.provider, model.modelId);\n\t\t\tif (model === undefined || resolved === undefined) return failNoModel(runtime, model, context);\n\t\t\tconst { attempt, compacted, overflow, threshold: blocked } = task.state.checkpoint;\n\t\t\tif (compacted !== undefined && overflow !== undefined) {\n\t\t\t\tconst [outcome] = await runtime.outcomes([compacted], context);\n\t\t\t\tif (outcome?.status !== \"completed\" || outcome.result.entryId === undefined) {\n\t\t\t\t\treturn failModelError(runtime, overflow, context);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// A threshold compaction that found nothing to compact or was declined leaves a request that may still fit. One\n\t\t\t// that failed left a context it judged too large: sending it would at best leave no room for the answer.\n\t\t\tif (compacted !== undefined && blocked === true) {\n\t\t\t\tconst [outcome] = await runtime.outcomes([compacted], context);\n\t\t\t\tif (outcome !== undefined && outcome.status !== \"completed\") {\n\t\t\t\t\treturn failModelError(runtime, compactionFailure(outcome), context);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst view = await runtime.context(conversationId, context);\n\t\t\tconst shown = replaySections(view.messages);\n\t\t\tlet env: ExecutionEnv | undefined;\n\t\t\ttry {\n\t\t\t\tenv = await runtime.env(context);\n\t\t\t} catch (error) {\n\t\t\t\tif (context.abortSignal?.aborted) throw error;\n\t\t\t\truntime.report(error, { type: \"host\", callback: \"env\" });\n\t\t\t}\n\t\t\tconst input: PromptInput = { conversationId, agent, env, shown: Object.fromEntries(shown), read: runtime };\n\t\t\tconst desired = await renderSections(\n\t\t\t\tagent.sections,\n\t\t\t\tinput,\n\t\t\t\tshown,\n\t\t\t\t(error, section) =>\n\t\t\t\t\truntime.report(error, {\n\t\t\t\t\t\ttype: \"extension\",\n\t\t\t\t\t\t...optionalExtension(sectionExtension(agent, section.key)),\n\t\t\t\t\t}),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst entries = planSystemEntries(view, desired, agent.tools, runtime.now());\n\t\t\tconst threshold =\n\t\t\t\tcompacted === undefined\n\t\t\t\t\t? thresholdCompaction(view, entries, resolved.contextWindow, compactionPolicy(settings, model))\n\t\t\t\t\t: undefined;\n\t\t\tif (threshold === \"blocking\") {\n\t\t\t\t// Compact first and prepare again; the transcript is unchanged until the compaction appends.\n\t\t\t\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t\t\t\tconst child = await createCompaction(tx, conversationId, { reason: \"threshold\" }, runtime.taskId);\n\t\t\t\t\tconst checkpoint = { phase: \"prepare\", attempt, compacted: child, threshold: true } as const;\n\t\t\t\t\treturn { status: \"waiting\", checkpoint, on: [child], policy: \"allSettled\" };\n\t\t\t\t}, context);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runtime.commit(async (tx) => {\n\t\t\t\tlet cutoff = (await tx.scanEntries({ conversationId }, 1)).items[0]?.id;\n\t\t\t\tfor (const entry of entries) cutoff = (await tx.appendEntry(SystemEntry, conversationId, entry)).id;\n\t\t\t\tif (cutoff === undefined) throw new Error(`Conversation ${conversationId} has no entries to send`);\n\t\t\t\t// Checked in this commit, so a compaction admitted during preparation counts.\n\t\t\t\tif (threshold === \"background\" && (await tx.doc(LiveDoc, conversationId)).compactions === undefined) {\n\t\t\t\t\tawait createCompaction(tx, conversationId, { reason: \"threshold\" });\n\t\t\t\t}\n\t\t\t\tconst request = {\n\t\t\t\t\tattempt,\n\t\t\t\t\t...(compacted === undefined ? {} : { compacted }),\n\t\t\t\t\tmodel,\n\t\t\t\t\tthinkingLevel,\n\t\t\t\t\tstreamOptions: settings.stream,\n\t\t\t\t\tcutoff,\n\t\t\t\t};\n\t\t\t\treturn { status: \"running\", checkpoint: { phase: \"request\", ...request } };\n\t\t\t}, context);\n\t\t},\n\t\trequest: async (task, runtime, context) => {\n\t\t\tconst { attempt, compacted, model: ref, thinkingLevel, streamOptions, cutoff } = task.state.checkpoint;\n\t\t\tconst conversationId = runtime.conversationId;\n\t\t\tawait runtime.commit(async (tx) => {\n\t\t\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\t\t\tawait convertPartial(tx, live, conversationId);\n\t\t\t\tlive.generation = { attempt };\n\t\t\t\treturn undefined;\n\t\t\t}, context);\n\t\t\tconst model = runtime.models.getModel(ref.provider, ref.modelId);\n\t\t\tif (model === undefined) return failNoModel(runtime, ref, context);\n\t\t\tconst view = await runtime.context(conversationId, context, { at: cutoff });\n\t\t\tlet messages = view.messages;\n\t\t\tawait runtime.hooks.each(\"beforeRequest\", async (hook) => {\n\t\t\t\tconst replaced = await hook({ messages }, runtime, context);\n\t\t\t\tif (replaced !== undefined) messages = replaced.messages;\n\t\t\t});\n\t\t\tconst options: SimpleStreamOptions = {\n\t\t\t\t...streamOptions,\n\t\t\t\tsignal: runtime.signal,\n\t\t\t\ttelemetry: context.telemetry,\n\t\t\t\tsessionId: await ensureProviderSessionId(runtime, context),\n\t\t\t\t...(thinkingLevel === \"off\" ? {} : { reasoning: thinkingLevel }),\n\t\t\t};\n\t\t\tconst message = await streamResponse(runtime, model, messages, options, attempt, context);\n\t\t\tconst request = { attempt, compacted, model: ref, cutoff, messages: view.messages };\n\t\t\tawait classify(runtime, request, message, context);\n\t\t},\n\t\t/** After the backoff's sleep; a run before `until` (an early wake, or a record of an earlier version) sleeps again. */\n\t\tretry: async (task, runtime, context) => {\n\t\t\tconst { attempt, compacted, until } = task.state.checkpoint;\n\t\t\tif (until > runtime.now()) return runtime.sleepUntil(until, task.state.checkpoint, context);\n\t\t\tawait runtime.commit(async (tx) => {\n\t\t\t\t(await tx.doc(LiveDoc, runtime.conversationId)).generation = { attempt: attempt + 1 };\n\t\t\t\tconst checkpoint: GenerationCheckpoint = {\n\t\t\t\t\tphase: \"prepare\",\n\t\t\t\t\tattempt: attempt + 1,\n\t\t\t\t\t...(compacted === undefined ? {} : { compacted }),\n\t\t\t\t};\n\t\t\t\treturn { status: \"running\", checkpoint };\n\t\t\t}, context);\n\t\t},\n\t\t/** After the sleep until `pollAt`; a run before it (an early wake, or a record of an earlier version) sleeps again. */\n\t\tpoll: async (task, runtime, context) => {\n\t\t\tconst { attempt, compacted, model: ref, cutoff, handle, pollAt } = task.state.checkpoint;\n\t\t\tif (pollAt > runtime.now()) return runtime.sleepUntil(pollAt, task.state.checkpoint, context);\n\t\t\tconst model = runtime.models.getModel(ref.provider, ref.modelId);\n\t\t\tif (model === undefined) return failNoModel(runtime, ref, context);\n\t\t\tconst message = await runtime.models.fetchDeferred(model, handle, {\n\t\t\t\tsignal: runtime.signal,\n\t\t\t\ttelemetry: context.telemetry,\n\t\t\t});\n\t\t\tconst request = { attempt, compacted, model: ref, cutoff, pollAt };\n\t\t\tawait classify(runtime, request, message, context);\n\t\t},\n\t\ttools: async (task, runtime, context) => {\n\t\t\tconst { assistant, tools, pending } = task.state.checkpoint;\n\t\t\tconst [next, ...rest] = pending;\n\t\t\tif (next === undefined) return finishToolRound(runtime, assistant, tools, context);\n\t\t\t// Sequential round: start the next call and wait for it.\n\t\t\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\t\t\tconst taskId = await createToolTask(tx, runtime, assistant, next);\n\t\t\t\tconst slot = live.tools?.find((slot) => slot.callId === next && slot.taskId === undefined);\n\t\t\t\tif (slot !== undefined) slot.taskId = taskId;\n\t\t\t\tconst checkpoint: GenerationCheckpoint = {\n\t\t\t\t\tphase: \"tools\",\n\t\t\t\t\tassistant,\n\t\t\t\t\ttools: [...tools, taskId],\n\t\t\t\t\tpending: rest,\n\t\t\t\t};\n\t\t\t\treturn { status: \"waiting\", checkpoint, on: [taskId], policy: \"allSettled\" };\n\t\t\t}, context);\n\t\t},\n\t},\n\tabort: async (task, runtime, context) => {\n\t\tconst checkpoint = task.state.checkpoint;\n\t\tif (checkpoint.phase === \"poll\") {\n\t\t\tconst model = runtime.models.getModel(checkpoint.model.provider, checkpoint.model.modelId);\n\t\t\tif (model !== undefined) {\n\t\t\t\ttry {\n\t\t\t\t\tawait runtime.models.cancelDeferred(model, checkpoint.handle, {\n\t\t\t\t\t\tsignal: runtime.signal,\n\t\t\t\t\t\ttelemetry: context.telemetry,\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\truntime.report(error, { type: \"host\", callback: \"models\" });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst conversationId = runtime.conversationId;\n\t\t// Runs after the round's tool tasks are terminal; calls never started get `aborted` results (spec §8.5).\n\t\tconst unstarted =\n\t\t\tcheckpoint.phase === \"tools\"\n\t\t\t\t? await readCalls(runtime, checkpoint.assistant, checkpoint.pending, context)\n\t\t\t\t: [];\n\t\tawait runtime.commit(async (tx) => {\n\t\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\t\tawait convertPartial(tx, live, conversationId);\n\t\t\tfor (const call of unstarted) {\n\t\t\t\tconst result = harnessError(\"aborted\", `Tool ${call.name} was aborted`);\n\t\t\t\tawait appendToolResult(tx, conversationId, call, result, { timestamp: runtime.now() });\n\t\t\t}\n\t\t\tendRun(tx, live, runtime.taskId, { status: \"unanswered\", reason: \"aborted\" });\n\t\t\treturn { status: \"terminal\", outcome: { status: \"aborted\" } };\n\t\t}, context);\n\t},\n});\n\n/** The calls `callIds` of the assistant entry, in the given order. */\nasync function readCalls(\n\truntime: Runtime,\n\tassistant: EntryId,\n\tcallIds: readonly string[],\n\tcontext: Context,\n): Promise<ToolCall[]> {\n\tconst message = (await runtime.entry(AssistantEntry, assistant, context))?.model?.[0];\n\tconst calls = message?.role === \"assistant\" ? message.content.filter((content) => content.type === \"toolCall\") : [];\n\treturn callIds.flatMap((id) => calls.filter((call) => call.id === id).slice(0, 1));\n}\n\n/** A tool task for call `callId`, owned by the generation. */\nfunction createToolTask(tx: Tx, runtime: Runtime, assistant: EntryId, callId: string): Promise<TaskId<ToolTaskResult>> {\n\treturn tx.createTask(\n\t\tToolTask,\n\t\t{ kind: \"model\", assistant, callId },\n\t\t{ ownership: { kind: \"task\", taskId: runtime.taskId } },\n\t);\n}\n\n/**\n * Which threshold compaction preparation starts before its request (spec §8.3): `blocking` above\n * `contextWindow - reserveTokens`, `background` above the background threshold, and only when range selection finds a\n * cut. The caller starts a background one only while no compaction is listed.\n */\nfunction thresholdCompaction(\n\tview: ContextView,\n\tplanned: readonly { readonly model?: readonly Message[] }[],\n\tcontextWindow: number,\n\tpolicy: CompactionPolicy,\n): \"blocking\" | \"background\" | undefined {\n\tif (!policy.enabled || contextWindow <= 0) return undefined;\n\tconst tokens = estimateContext(\n\t\tview,\n\t\tplanned.flatMap((entry) => entry.model ?? []),\n\t);\n\tconst blocking = contextWindow - policy.reserveTokens;\n\tconst background = blocking - policy.backgroundTokens;\n\tconst over =\n\t\ttokens > blocking ? \"blocking\" : policy.backgroundTokens > 0 && tokens > background ? \"background\" : undefined;\n\tif (over === undefined || selectCut(view, policy.keepRecentTokens) === undefined) return undefined;\n\treturn over;\n}\n\n/** Error text for a generation whose blocking compaction ended without completing. */\nfunction compactionFailure(outcome: Exclude<TaskOutcome<CompactionResult>, { status: \"completed\" }>): string {\n\tswitch (outcome.status) {\n\t\tcase \"failed\":\n\t\tcase \"faulted\":\n\t\t\treturn `Compaction failed: ${outcome.error.message}`;\n\t\tcase \"orphaned\":\n\t\t\treturn `Compaction failed: ${outcome.reason}`;\n\t\tcase \"aborted\":\n\t\t\treturn \"Compaction was aborted\";\n\t}\n}\n\n/** Settle the run's inputs `unanswered` with `model_error` and fail with `text`. */\nasync function failModelError(runtime: Runtime, text: string, context: Context): Promise<void> {\n\tawait runtime.commit(async (tx) => {\n\t\tconst failure = await prepareFailure(tx, runtime);\n\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\tawait endFailedRun(tx, runtime, live, failure, { status: \"unanswered\", reason: \"model_error\", detail: text });\n\t\treturn {\n\t\t\tstatus: \"terminal\",\n\t\t\toutcome: { status: \"failed\", error: { message: text, detail: { reason: \"model_error\" } } },\n\t\t};\n\t}, context);\n}\n\n/** Settle the run's inputs `unanswered` with `no_model` and fail. */\nasync function failNoModel(runtime: Runtime, ref: ModelRef | undefined, context: Context): Promise<void> {\n\tconst message =\n\t\tref === undefined ? \"No model is configured\" : `Model ${ref.provider}/${ref.modelId} is not available`;\n\tawait runtime.commit(async (tx) => {\n\t\tconst failure = await prepareFailure(tx, runtime);\n\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\tawait endFailedRun(tx, runtime, live, failure, { status: \"unanswered\", reason: \"no_model\" });\n\t\treturn { status: \"terminal\", outcome: { status: \"failed\", error: { message, detail: { reason: \"no_model\" } } } };\n\t}, context);\n}\n\n/** What a failed run's end needs from the table, read before the commit's first table write. */\ntype Failure = { readonly policy: AfterFailedRun; readonly boundary?: Boundary };\n\nasync function prepareFailure(tx: Tx, runtime: Runtime): Promise<Failure> {\n\tconst settings = runtime.settings;\n\tconst policy = settings.afterFailedRun;\n\tif (policy !== \"continue\") return { policy };\n\treturn { policy, boundary: await prepareBoundary(tx, runtime.conversationId, settings) };\n}\n\n/**\n * End a failed run, settling its inputs with `settlement`, and do with the inputs queued behind it what\n * `settings.afterFailedRun` says (spec §6): keep them, start the next run with them, or withdraw them.\n */\nasync function endFailedRun(\n\ttx: Tx,\n\truntime: Runtime,\n\tlive: Draft<LiveState>,\n\tfailure: Failure,\n\tsettlement: SubmissionSettlement,\n): Promise<void> {\n\tconst conversationId = runtime.conversationId;\n\tendRun(tx, live, runtime.taskId, settlement);\n\tif (failure.policy === \"withdraw\") await withdrawQueuedInputs(tx, conversationId, \"run_failed\");\n\tif (failure.boundary === undefined) return;\n\tconst { users } = await applyBoundary(tx, failure.boundary, \"final\", runtime.now());\n\tif (users.length > 0) await startRun(tx, conversationId, live, users);\n}\n\n/**\n * Append a committed partial left by an interrupted, aborted, faulted, or orphaned attempt as an aborted assistant\n * entry; the caller replaces or removes `generation`.\n */\nexport async function convertPartial(tx: Tx, live: Draft<LiveState>, conversationId: ConversationId): Promise<void> {\n\tconst partial = live.generation?.message;\n\tif (partial === undefined) return;\n\tconst message = copyJson(partial) as unknown as AssistantMessage;\n\tawait appendAssistant(tx, conversationId, { ...message, stopReason: \"aborted\" });\n}\n\n/**\n * Stream one request and return the terminal message. Partials commit as trailing writes at most every\n * `progress.partialIntervalMs` (default 100 ms) with one commit in flight; `finally` stops the throttle and awaits that\n * commit, so no stale partial lands after the outcome.\n */\nasync function streamResponse(\n\truntime: Runtime,\n\tmodel: Model<Api>,\n\tmessages: readonly Message[],\n\toptions: SimpleStreamOptions,\n\tattempt: number,\n\tcontext: Context,\n): Promise<AssistantMessage> {\n\tconst interval = runtime.settings.progress.partialIntervalMs;\n\tlet pending: AssistantMessage | undefined;\n\tlet timer: (() => void) | undefined;\n\tlet inFlight: Promise<void> | undefined;\n\tlet stopped = false;\n\tconst flush = (): void => {\n\t\ttimer = undefined;\n\t\tconst partial = pending;\n\t\tpending = undefined;\n\t\tif (partial === undefined || stopped) return;\n\t\tinFlight = (async () => {\n\t\t\t// Copy synchronously: the provider keeps mutating its partial.\n\t\t\tconst message = copyJson(partial, { omitUndefinedProperties: true });\n\t\t\tawait runtime.commit(async (tx) => {\n\t\t\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\t\t\tlive.generation ??= { attempt };\n\t\t\t\tassignJson(live.generation as Draft<Record<string, JsonValue>>, \"message\", message);\n\t\t\t\treturn undefined;\n\t\t\t}, context);\n\t\t})()\n\t\t\t.catch((error: unknown) => {\n\t\t\t\t// Rejections after an abort mark or close are expected; the committed state stays consistent.\n\t\t\t\tif (!runtime.signal.aborted) runtime.report(error);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tinFlight = undefined;\n\t\t\t\tif (pending !== undefined && !stopped) timer = runtime.setTimer(flush, interval);\n\t\t\t});\n\t};\n\ttry {\n\t\tconst events = runtime.models.streamSimple(model, { messages: [...messages] }, options);\n\t\tfor await (const event of events) {\n\t\t\t// A partial without content, such as pi-ai's opening `start` event, shows nothing; a deferred response\n\t\t\t// never gets past it, so it never leaves a partial.\n\t\t\tif (event.type === \"done\" || event.type === \"error\" || event.partial.content.length === 0) continue;\n\t\t\tpending = event.partial;\n\t\t\tif (timer === undefined && inFlight === undefined) timer = runtime.setTimer(flush, interval);\n\t\t}\n\t\treturn await events.result();\n\t} finally {\n\t\tstopped = true;\n\t\ttimer?.();\n\t\tawait inFlight;\n\t}\n}\n\n/** Classify a terminal provider message in one commit that also clears the partial. */\nasync function classify(\n\truntime: Runtime,\n\trequest: Request,\n\tmessage: AssistantMessage,\n\tcontext: Context,\n): Promise<void> {\n\t// An abort mark or close: the abort invocation or the reopened run handles the committed state.\n\truntime.signal.throwIfAborted();\n\tconst conversationId = runtime.conversationId;\n\tconst { attempt, compacted, model: ref, cutoff } = request;\n\tif (message.stopReason === \"deferred\" && message.deferred !== undefined) {\n\t\tconst handle = message.deferred;\n\t\tconst pollAt = Math.max(\n\t\t\truntime.now() + (handle.pollAfterMs ?? DEFAULT_POLL_AFTER_MS),\n\t\t\trequest.pollAt === undefined ? Number.NEGATIVE_INFINITY : request.pollAt + 1,\n\t\t);\n\t\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t\t(await tx.doc(LiveDoc, conversationId)).generation = { attempt, deferred: { pollAt } };\n\t\t\tconst checkpoint = {\n\t\t\t\tphase: \"poll\",\n\t\t\t\tattempt,\n\t\t\t\t...(compacted === undefined ? {} : { compacted }),\n\t\t\t\tmodel: ref,\n\t\t\t\tcutoff,\n\t\t\t\thandle,\n\t\t\t\tpollAt,\n\t\t\t} as const;\n\t\t\treturn { status: \"sleeping\", checkpoint, until: pollAt };\n\t\t}, context);\n\t\treturn;\n\t}\n\tawait runtime.hooks.each(\"afterResponse\", (hook) => hook(message, runtime, context));\n\tconst calls = message.content.filter((content): content is ToolCall => content.type === \"toolCall\");\n\tif (message.stopReason === \"toolUse\" && calls.length > 0) {\n\t\treturn startToolRound(runtime, request, message, calls, context);\n\t}\n\tif (message.stopReason === \"stop\" || message.stopReason === \"length\" || message.stopReason === \"toolUse\") {\n\t\treturn answer(runtime, message, context);\n\t}\n\t// The retry and compaction policies govern the next attempt, so they are read now rather than pinned at preparation.\n\tconst settings = runtime.settings;\n\tconst overflow = message.stopReason === \"error\" && isContextOverflow(message);\n\tconst compaction = compactionPolicy(settings, ref);\n\tif (overflow && compacted === undefined && compaction.enabled) {\n\t\tconst view = await runtime.context(conversationId, context, { at: cutoff });\n\t\tif (selectCut(view, compaction.keepRecentTokens) !== undefined) {\n\t\t\tconst text = message.errorMessage ?? \"Context overflow\";\n\t\t\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\t\t\tawait appendAssistant(tx, conversationId, message);\n\t\t\t\tdelete live.generation;\n\t\t\t\tconst child = await createCompaction(tx, conversationId, { reason: \"overflow\" }, runtime.taskId);\n\t\t\t\tconst checkpoint = { phase: \"prepare\", attempt, compacted: child, overflow: text } as const;\n\t\t\t\treturn { status: \"waiting\", checkpoint, on: [child], policy: \"allSettled\" };\n\t\t\t}, context);\n\t\t\treturn;\n\t\t}\n\t}\n\tconst policy = settings.retry;\n\t// An overflow is never retried: only a compaction can make the next request fit.\n\tconst retry =\n\t\tmessage.stopReason === \"error\" &&\n\t\t!overflow &&\n\t\tisRetryableAssistantError(message) &&\n\t\tpolicy.enabled &&\n\t\tattempt <= policy.maxRetries;\n\tconst until = retry ? runtime.now() + retryDelayMs(policy, attempt) : 0;\n\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t// Read before the first table write; only a failure uses it.\n\t\tconst failure = retry ? undefined : await prepareFailure(tx, runtime);\n\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\tawait appendAssistant(tx, conversationId, message);\n\t\tif (failure === undefined) {\n\t\t\tlive.generation = { attempt, retry: { at: until, error: message.errorMessage ?? \"\" } };\n\t\t\tconst checkpoint = {\n\t\t\t\tphase: \"retry\",\n\t\t\t\tattempt,\n\t\t\t\t...(compacted === undefined ? {} : { compacted }),\n\t\t\t\tuntil,\n\t\t\t} as const;\n\t\t\treturn { status: \"sleeping\", checkpoint, until };\n\t\t}\n\t\tconst text = message.errorMessage ?? `Model response ended with stop reason ${message.stopReason}`;\n\t\tawait endFailedRun(tx, runtime, live, failure, { status: \"unanswered\", reason: \"model_error\", detail: text });\n\t\treturn {\n\t\t\tstatus: \"terminal\",\n\t\t\toutcome: { status: \"failed\", error: { message: text, detail: { reason: \"model_error\" } } },\n\t\t};\n\t}, context);\n}\n\n/**\n * A final answer; the final boundary places queued items (spec §6). The first `onYield` continuation appends a user\n * message and hands the run to a successor generation, but only when the boundary selected no user item and no reset.\n * Otherwise the run's inputs settle `done`, and selected user items start the next run.\n */\nasync function answer(runtime: Runtime, message: AssistantMessage, context: Context): Promise<void> {\n\tlet continuation: UserInput | undefined;\n\tawait runtime.hooks.each(\"onYield\", async (hook) => {\n\t\tif (continuation !== undefined) return;\n\t\tcontinuation = (await hook(message, runtime, context))?.continue;\n\t});\n\tconst conversationId = runtime.conversationId;\n\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t// Queue modes are read on the Session line, when the boundary is decided.\n\t\tconst boundary = await prepareBoundary(tx, conversationId, runtime.settings);\n\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\tconst entry = await appendAssistant(tx, conversationId, message);\n\t\tconst result: Next = { status: \"terminal\", outcome: { status: \"completed\", result: { entryId: entry.id } } };\n\t\tconst { users, reset } = await applyBoundary(tx, boundary, \"final\", runtime.now());\n\t\tif (continuation !== undefined && users.length === 0 && !reset) {\n\t\t\tconst user = { role: \"user\", content: continuation, timestamp: runtime.now() } as const;\n\t\t\tawait tx.appendEntry(UserEntry, conversationId, { model: [user] });\n\t\t\thandOver(live, runtime.taskId, await createGeneration(tx, conversationId));\n\t\t\tdelete live.generation;\n\t\t\treturn result;\n\t\t}\n\t\tendRun(tx, live, runtime.taskId, { status: \"done\", answer: entry.id });\n\t\tif (users.length > 0) await startRun(tx, conversationId, live, users);\n\t\treturn result;\n\t}, context);\n}\n\n/**\n * Append the tool-calling answer and start its tool round in one commit (spec §8.3). A call to a tool the request did\n * not offer gets its `tool_unavailable` result here; every other call gets a tool task owned by the generation, only the\n * first one now when the round is sequential. The generation then waits for them in its `tools` phase, keeping the run.\n */\nasync function startToolRound(\n\truntime: Runtime,\n\trequest: Request,\n\tmessage: AssistantMessage,\n\tcalls: readonly ToolCall[],\n\tcontext: Context,\n): Promise<void> {\n\tconst conversationId = runtime.conversationId;\n\tconst messages =\n\t\trequest.messages ?? (await runtime.context(conversationId, context, { at: request.cutoff })).messages;\n\tconst offered = new Set(getCurrentTools(messages).map((tool) => tool.name));\n\t// Read as the round starts; a tool is resolved as its tool task resolves it.\n\tconst tools = (await runtime.agent(context)).tools;\n\tconst sequential =\n\t\truntime.settings.toolExecution === \"sequential\" ||\n\t\tcalls.some(\n\t\t\t(call) =>\n\t\t\t\toffered.has(call.name) && tools.find((tool) => tool.name === call.name)?.executionMode === \"sequential\",\n\t\t);\n\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\tconst entry = await appendAssistant(tx, conversationId, message);\n\t\tconst slots: ToolSlot[] = [];\n\t\tconst tools: TaskId<ToolTaskResult>[] = [];\n\t\tconst pending: string[] = [];\n\t\tfor (const call of calls) {\n\t\t\tif (!offered.has(call.name)) {\n\t\t\t\tconst unavailable = harnessError(\"tool_unavailable\", `Tool ${call.name} is not available`);\n\t\t\t\tconst result = await appendToolResult(tx, conversationId, call, unavailable, { timestamp: runtime.now() });\n\t\t\t\tslots.push({ callId: call.id, name: call.name, status: \"done\", entry: result.id });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (sequential && tools.length > 0) {\n\t\t\t\tpending.push(call.id);\n\t\t\t\tslots.push({ callId: call.id, name: call.name, status: \"pending\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst taskId = await createToolTask(tx, runtime, entry.id, call.id);\n\t\t\ttools.push(taskId);\n\t\t\tslots.push({ callId: call.id, name: call.name, taskId, status: \"pending\" });\n\t\t}\n\t\tdelete live.generation;\n\t\tlive.tools = slots;\n\t\tconst checkpoint = { phase: \"tools\", assistant: entry.id, tools, pending } as const;\n\t\treturn { status: \"waiting\", checkpoint, on: tools, policy: \"allSettled\" };\n\t}, context);\n}\n\n/**\n * The round's tools are terminal: apply their controls and either end the run at the final boundary (`terminate`,\n * `handoff`, or a queued reset) or hand it to the next generation at the `postTools` boundary (spec §8.5).\n */\nasync function finishToolRound(\n\truntime: Runtime,\n\tassistant: EntryId,\n\ttools: readonly TaskId<ToolTaskResult>[],\n\tcontext: Context,\n): Promise<void> {\n\tconst conversationId = runtime.conversationId;\n\tconst controls = new Map<TaskId, ToolControl | undefined>();\n\tconst outcomes = await runtime.outcomes(tools, context);\n\ttools.forEach((id, index) => {\n\t\tconst outcome = outcomes[index]!;\n\t\t// Version 1 results have no kind; every result a generation's round reads is a model-issued call's.\n\t\tcontrols.set(\n\t\t\tid,\n\t\t\toutcome.status === \"completed\" && outcome.result.kind !== \"nested\" ? outcome.result.control : undefined,\n\t\t);\n\t});\n\tconst slots = (await runtime.snapshot(LiveDoc, conversationId, context))?.tools ?? [];\n\tconst results = slots.flatMap((slot) => (slot.entry === undefined ? [] : [slot.entry]));\n\tawait runtime.hooks.each(\"afterTools\", (hook) => hook(assistant, results, runtime, context));\n\t// Every call of the round, including those answered without a task, must ask to terminate.\n\tconst terminate =\n\t\tslots.length > 0 &&\n\t\tslots.every((slot) => slot.taskId !== undefined && controls.get(slot.taskId)?.terminate === true);\n\tconst added = [...controls.values()].flatMap((control) => control?.addTools ?? []);\n\t// The last handoff in call order wins.\n\tconst handoff = [...controls.values()].findLast((control) => control?.handoff !== undefined)?.handoff;\n\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\tconst boundary = await prepareBoundary(tx, conversationId, runtime.settings);\n\t\tif (added.length > 0) await addTools(tx, conversationId, added);\n\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\tconst now = runtime.now();\n\t\tif (terminate || handoff !== undefined) {\n\t\t\tif (handoff !== undefined) {\n\t\t\t\tconst message = { role: \"user\", content: handoff, timestamp: now } as const;\n\t\t\t\tconst entry = await tx.appendEntry(ResetEntry, conversationId, { head: \"self\", model: [message] });\n\t\t\t\tboundary.head = entry.id;\n\t\t\t}\n\t\t\tconst { users } = await applyBoundary(tx, boundary, \"final\", now);\n\t\t\tendRun(tx, live, runtime.taskId, { status: \"done\", answer: assistant });\n\t\t\tif (users.length > 0) await startRun(tx, conversationId, live, users);\n\t\t} else {\n\t\t\tconst { users, reset } = await applyBoundary(tx, boundary, \"postTools\", now);\n\t\t\tif (reset) {\n\t\t\t\t// The queued reset cut the run's context before an answer.\n\t\t\t\tendRun(tx, live, runtime.taskId, { status: \"unanswered\", reason: \"reset\" });\n\t\t\t\tif (users.length > 0) await startRun(tx, conversationId, live, users);\n\t\t\t} else {\n\t\t\t\tdelete live.tools;\n\t\t\t\tdelete live.nestedTools;\n\t\t\t\tif (live.run?.taskId === runtime.taskId) live.run.inputs.push(...users);\n\t\t\t\thandOver(live, runtime.taskId, await createGeneration(tx, conversationId));\n\t\t\t}\n\t\t}\n\t\treturn { status: \"terminal\", outcome: { status: \"completed\", result: { entryId: assistant } } };\n\t}, context);\n}\n\n/**\n * Append a provider result and add its usage to `pi.usage` in the same commit.\n * REMINDER: every built-in writer of assistant entries goes through here, so the usage ledger stays complete.\n */\nasync function appendAssistant(\n\ttx: Tx,\n\tconversationId: ConversationId,\n\tmessage: AssistantMessage,\n): Promise<TypedEntry<never>> {\n\tawait recordUsage(tx, conversationId, \"models\", `${message.provider}/${message.model}`, message.usage);\n\treturn tx.appendEntry(AssistantEntry, conversationId, { model: [message] });\n}\n\n/** Start a run for `inputs`, placed input submissions: a new generation takes `pi.live.run`. */\nexport async function startRun(\n\ttx: Tx,\n\tconversationId: ConversationId,\n\tlive: Draft<LiveState>,\n\tinputs: SubmissionId[],\n): Promise<void> {\n\tlive.run = { taskId: await createGeneration(tx, conversationId, { submissionIds: inputs }), inputs };\n}\n\n/** A generation owned by its conversation. */\nfunction createGeneration(\n\ttx: Tx,\n\tconversationId: ConversationId,\n\ttelemetry: Pick<TaskCreationOptions, \"submissionIds\"> = {},\n): Promise<TaskId<GenerationResult>> {\n\treturn tx.createTask(GenerationTask, {}, { ownership: { kind: \"conversation\" }, conversationId, ...telemetry });\n}\n\n/** Hand run control from `from` to `to`; the run's inputs move with it. */\nexport function handOver(live: Draft<LiveState>, from: TaskId, to: TaskId): void {\n\tif (live.run?.taskId === from) live.run.taskId = to;\n}\n"]}
1
+ {"version":3,"file":"generation.js","sourceRoot":"","sources":["../../src/harness/generation.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Context, copyJson, type Draft, type JsonValue } from \"@earendil-works/chord\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tDeferredHandle,\n\tMessage,\n\tModel,\n\tModelThinkingLevel,\n\tSimpleStreamOptions,\n\tToolCall,\n} from \"@earendil-works/pi-ai\";\nimport { isContextOverflow } from \"@earendil-works/pi-ai/utils/overflow\";\nimport { isRetryableAssistantError, retryDelayMs } from \"@earendil-works/pi-ai/utils/retry\";\nimport { getCurrentTools } from \"@earendil-works/pi-ai/utils/transcript\";\nimport { AssistantEntry, ResetEntry, SystemEntry, UserEntry } from \"../entries.ts\";\nimport type { ExecutionEnv } from \"../env/index.ts\";\nimport type { TaskCreationOptions } from \"../session/transaction.ts\";\nimport { defineTask } from \"../tasks.ts\";\nimport type {\n\tConversationId,\n\tEntryId,\n\tNextTaskState,\n\tSubmissionId,\n\tTask,\n\tTaskId,\n\tTaskOutcome,\n\tTaskRuntime,\n\tTx,\n\tTypedEntry,\n} from \"../types.ts\";\nimport { addTools, agentHooks, sectionExtension } from \"./agent.ts\";\nimport { compactionPolicy, createCompaction, estimateContext, selectCut } from \"./compaction.ts\";\nimport { applyBoundary, type Boundary, hasQueuedReset, prepareBoundary, withdrawQueuedInputs } from \"./inbox.ts\";\nimport {\n\tcutOffCount,\n\tcutOffTooOften,\n\tendRun,\n\tLiveDoc,\n\ttype LiveState,\n\tPROGRESS_COMMIT,\n\ttype RunEnd,\n\tsalvageable,\n\ttype ToolSlot,\n} from \"./live.ts\";\nimport { PartialChanges, type PartialMessage } from \"./partial-changes.ts\";\nimport { planSystemEntries, renderSections, replaySections } from \"./prompt.ts\";\nimport { ensureProviderSessionId } from \"./provider.ts\";\nimport { endedByCrashes } from \"./scheduler.ts\";\nimport { appendToolResult, harnessError, ToolTask, type ToolTaskResult } from \"./tool.ts\";\nimport type {\n\tAfterFailedRun,\n\tCompactionPolicy,\n\tCompactionResult,\n\tContextView,\n\tConversationStreamOptions,\n\tGenerationHooks,\n\tModelRef,\n\tPromptInput,\n\tRunEndTask,\n\tRunSummary,\n\tToolControl,\n\tUserInput,\n} from \"./types.ts\";\nimport { recordUsage } from \"./usage.ts\";\nimport { optionalExtension } from \"./util.ts\";\n\nexport type GenerationInput = Record<string, never>;\n\nexport type GenerationCheckpoint =\n\t| {\n\t\t\tphase: \"prepare\";\n\t\t\tattempt: number;\n\t\t\t/** The blocking compaction this generation waited for; it starts no other compaction (spec §8.3). */\n\t\t\tcompacted?: TaskId<CompactionResult>;\n\t\t\t/** Error text of the overflow that started `compacted`; checked once when `prepare` resumes. */\n\t\t\toverflow?: string;\n\t\t\t/** Set when the blocking threshold started `compacted`; its outcome is checked once when `prepare` resumes. */\n\t\t\tthreshold?: true;\n\t }\n\t| {\n\t\t\tphase: \"request\";\n\t\t\tattempt: number;\n\t\t\tcompacted?: TaskId<CompactionResult>;\n\t\t\tmodel: ModelRef;\n\t\t\tthinkingLevel: ModelThinkingLevel;\n\t\t\t/** The settings' request options when preparation committed; a resend after recovery uses them unchanged. */\n\t\t\tstreamOptions: ConversationStreamOptions;\n\t\t\t/** Newest entry included in the request. */\n\t\t\tcutoff: EntryId;\n\t }\n\t| {\n\t\t\tphase: \"retry\";\n\t\t\tattempt: number;\n\t\t\tcompacted?: TaskId<CompactionResult>;\n\t\t\tuntil: number;\n\t\t\t/**\n\t\t\t * The deferred response a poll was fetching when the host died: the next attempt polls it again instead of\n\t\t\t * sending another request, so the provider's job is neither lost nor paid twice. Absent otherwise.\n\t\t\t */\n\t\t\tpoll?: { model: ModelRef; thinkingLevel?: ModelThinkingLevel; cutoff: EntryId; handle: DeferredHandle };\n\t }\n\t| {\n\t\t\tphase: \"poll\";\n\t\t\tattempt: number;\n\t\t\tcompacted?: TaskId<CompactionResult>;\n\t\t\tmodel: ModelRef;\n\t\t\t/** Absent in checkpoints of earlier versions. */\n\t\t\tthinkingLevel?: ModelThinkingLevel;\n\t\t\tcutoff: EntryId;\n\t\t\thandle: DeferredHandle;\n\t\t\tpollAt: number;\n\t }\n\t| {\n\t\t\t/** Waiting on the round's tool tasks, which the generation owns (spec §8.5). */\n\t\t\tphase: \"tools\";\n\t\t\t/** The tool-calling answer. */\n\t\t\tassistant: EntryId;\n\t\t\t/** Tool tasks created so far, in call order; grows by one per started call of a sequential round. */\n\t\t\ttools: TaskId<ToolTaskResult>[];\n\t\t\t/** Calls of a sequential round not started yet, in call order. */\n\t\t\tpending: string[];\n\t }\n\t| {\n\t\t\t/**\n\t\t\t * The run answered: its answer is committed and its inputs settled, and it keeps `pi.live.run` while `afterRun`\n\t\t\t * hooks are asked for tasks (spec §8.3). A crash here asks them again: nothing was created yet.\n\t\t\t */\n\t\t\tphase: \"finish\";\n\t\t\trun: RunSummary;\n\t }\n\t| {\n\t\t\t/** Waiting on the tasks `afterRun` hooks asked for, which the generation owns; then the run ends. */\n\t\t\tphase: \"drain\";\n\t\t\tanswer: EntryId;\n\t\t\ttasks: TaskId[];\n\t };\n\nexport type GenerationResult = { entryId: EntryId };\n\ntype Runtime = TaskRuntime<GenerationInput, GenerationCheckpoint, GenerationResult, GenerationHooks>;\ntype Next = NextTaskState<GenerationCheckpoint, GenerationResult>;\n\n/** What classification needs from the request that produced a message. */\ntype Request = {\n\treadonly attempt: number;\n\treadonly compacted: TaskId<CompactionResult> | undefined;\n\treadonly model: ModelRef;\n\treadonly thinkingLevel: ModelThinkingLevel | undefined;\n\treadonly cutoff: EntryId;\n\t/** Committed model context through `cutoff`, when the phase already derived it. */\n\treadonly messages?: readonly Message[];\n\t/** Set when the message came from polling, so a still deferred result polls strictly later. */\n\treadonly pollAt?: number;\n};\n\nconst DEFAULT_POLL_AFTER_MS = 5000;\n\n/**\n * Built-in generation task: prepares the positional system prompt and tool loadout, requests or polls the model,\n * retries, and classifies the response. The run's inputs live in `pi.live.run`.\n */\nexport const GenerationTask = defineTask<GenerationInput, GenerationCheckpoint, GenerationResult, GenerationHooks>({\n\tname: \"pi.generation\",\n\tversion: 2,\n\tinitial: () => ({ phase: \"prepare\", attempt: 1 }),\n\t// Version 2 leaves calls to tools not offered in a sequential round's `pending`, flagged `unoffered` in their slots.\n\t// A version 1 Harness would start their tool tasks unflagged, resolving the name, so it leaves version 2 blocked\n\t// instead. A version 1 checkpoint has no such calls and is kept as it is.\n\tmigrate: (input, checkpoint) => ({\n\t\tinput: input as GenerationInput,\n\t\tcheckpoint: checkpoint as GenerationCheckpoint,\n\t}),\n\tphases: {\n\t\t/**\n\t\t * Render the system prompt and tool loadout and append the positional `pi.system` entries they need, then move to\n\t\t * `request`. The agent and settings resolved here are fixed for this request. Only the Harness writes model\n\t\t * context to a busy conversation, so the context read here is still current at the commit; display-only entries\n\t\t * may land meanwhile.\n\t\t */\n\t\tprepare: async (task, runtime, context) => {\n\t\t\tif (cutOffTooOften(task, runtime)) return endCutOff(runtime, task, context);\n\t\t\tconst { conversationId } = runtime;\n\t\t\tconst agent = await runtime.agent(context);\n\t\t\tconst settings = runtime.settings;\n\t\t\tconst { model, thinkingLevel } = agent;\n\t\t\tconst resolved = model === undefined ? undefined : runtime.models.getModel(model.provider, model.modelId);\n\t\t\tif (model === undefined || resolved === undefined) return failNoModel(runtime, model, context);\n\t\t\tconst { attempt, compacted, overflow, threshold: blocked } = task.state.checkpoint;\n\t\t\tif (compacted !== undefined && overflow !== undefined) {\n\t\t\t\tconst [outcome] = await runtime.outcomes([compacted], context);\n\t\t\t\tif (outcome?.status !== \"completed\" || outcome.result.entryId === undefined) {\n\t\t\t\t\treturn failModelError(runtime, overflow, context);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// A threshold compaction that found nothing to compact or was declined leaves a request that may still fit. One\n\t\t\t// that failed left a context it judged too large: sending it would at best leave no room for the answer.\n\t\t\tif (compacted !== undefined && blocked === true) {\n\t\t\t\tconst [outcome] = await runtime.outcomes([compacted], context);\n\t\t\t\tif (outcome !== undefined && outcome.status !== \"completed\") {\n\t\t\t\t\treturn failModelError(runtime, compactionFailure(outcome), context);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst view = await runtime.context(conversationId, context);\n\t\t\t// The model owes an answer only to a context ending in a user message or tool results; system messages say\n\t\t\t// nothing it answers. Otherwise, as for a continue after an answer or in an empty conversation, end the run\n\t\t\t// before any request.\n\t\t\tconst last = view.messages.findLast((message) => message.role !== \"system\");\n\t\t\tif (last?.role !== \"user\" && last?.role !== \"toolResult\") return failNothingToAnswer(runtime, context);\n\t\t\tconst shown = replaySections(view.messages);\n\t\t\tlet env: ExecutionEnv | undefined;\n\t\t\ttry {\n\t\t\t\tenv = await runtime.env(context);\n\t\t\t} catch (error) {\n\t\t\t\tif (context.abortSignal?.aborted) throw error;\n\t\t\t\truntime.report(error, { kind: \"host\", callback: \"env\" });\n\t\t\t}\n\t\t\tconst input: PromptInput = { conversationId, agent, env, shown: Object.fromEntries(shown), read: runtime };\n\t\t\tconst desired = await renderSections(\n\t\t\t\tagent.sections,\n\t\t\t\tinput,\n\t\t\t\tshown,\n\t\t\t\t(error, section) =>\n\t\t\t\t\truntime.report(error, {\n\t\t\t\t\t\tkind: \"extension\",\n\t\t\t\t\t\t...optionalExtension(sectionExtension(agent, section.key)),\n\t\t\t\t\t}),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst entries = planSystemEntries(view, desired, agent.tools, runtime.now());\n\t\t\tconst threshold =\n\t\t\t\tcompacted === undefined\n\t\t\t\t\t? thresholdCompaction(view, entries, resolved.contextWindow, compactionPolicy(settings, model))\n\t\t\t\t\t: undefined;\n\t\t\tif (threshold === \"blocking\") {\n\t\t\t\t// Compact first and prepare again; the transcript is unchanged until the compaction appends.\n\t\t\t\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t\t\t\tconst child = await createCompaction(tx, conversationId, { reason: \"threshold\" }, runtime.taskId);\n\t\t\t\t\tconst checkpoint = { phase: \"prepare\", attempt, compacted: child, threshold: true } as const;\n\t\t\t\t\treturn { status: \"waiting\", checkpoint, on: [child], policy: \"allSettled\" };\n\t\t\t\t}, context);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runtime.commit(async (tx) => {\n\t\t\t\t// The context ends in a message the model answers, so the conversation has an entry.\n\t\t\t\tlet cutoff = (await tx.latestEntryId(conversationId))!;\n\t\t\t\tfor (const entry of entries) cutoff = (await tx.appendEntry(SystemEntry, conversationId, entry)).id;\n\t\t\t\t// Checked in this commit, so a compaction admitted during preparation counts.\n\t\t\t\tif (threshold === \"background\" && (await tx.doc(LiveDoc, conversationId)).compactions === undefined) {\n\t\t\t\t\tawait createCompaction(tx, conversationId, { reason: \"threshold\" });\n\t\t\t\t}\n\t\t\t\tconst request = {\n\t\t\t\t\tattempt,\n\t\t\t\t\t...(compacted === undefined ? {} : { compacted }),\n\t\t\t\t\tmodel,\n\t\t\t\t\tthinkingLevel,\n\t\t\t\t\tstreamOptions: settings.stream,\n\t\t\t\t\tcutoff,\n\t\t\t\t};\n\t\t\t\treturn { status: \"running\", checkpoint: { phase: \"request\", ...request } };\n\t\t\t}, context);\n\t\t},\n\t\trequest: async (task, runtime, context) => {\n\t\t\t// Charging the attempt may itself be what keeps failing, such as converting a huge partial: the limit ends it.\n\t\t\tif (cutOffTooOften(task, runtime)) return endCutOff(runtime, task, context);\n\t\t\t// The host stopped while this request was in flight: a failed attempt, not a resend (spec §8.3).\n\t\t\tif (task.restarts !== undefined) return interrupted(runtime, task.state.checkpoint, context);\n\t\t\tconst { attempt, compacted, model: ref, thinkingLevel, streamOptions, cutoff } = task.state.checkpoint;\n\t\t\tconst conversationId = runtime.conversationId;\n\t\t\t// The attempt shown is presentation, stored like progress (`PROGRESS_COMMIT`); converting a partial left by an\n\t\t\t// interrupted attempt appends an entry, which makes the commit immediate.\n\t\t\tawait runtime.commit(\n\t\t\t\tasync (tx) => {\n\t\t\t\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\t\t\t\tawait convertPartial(tx, live, conversationId);\n\t\t\t\t\tlive.generation = { attempt };\n\t\t\t\t\treturn undefined;\n\t\t\t\t},\n\t\t\t\tcontext,\n\t\t\t\tPROGRESS_COMMIT,\n\t\t\t);\n\t\t\tconst model = runtime.models.getModel(ref.provider, ref.modelId);\n\t\t\tif (model === undefined) return failNoModel(runtime, ref, context);\n\t\t\tconst view = await runtime.context(conversationId, context, { at: cutoff });\n\t\t\tlet messages = view.messages;\n\t\t\tawait runtime.hooks.each(\"beforeRequest\", async (hook) => {\n\t\t\t\tconst replaced = await hook({ messages }, runtime, context);\n\t\t\t\tif (replaced !== undefined) messages = replaced.messages;\n\t\t\t});\n\t\t\tconst options: SimpleStreamOptions = {\n\t\t\t\t...streamOptions,\n\t\t\t\tsignal: runtime.signal,\n\t\t\t\ttelemetry: context.telemetry,\n\t\t\t\tsessionId: await ensureProviderSessionId(runtime, context),\n\t\t\t\t...(thinkingLevel === \"off\" ? {} : { reasoning: thinkingLevel }),\n\t\t\t\tonPayload: (payload) => providerPayload(runtime, model, payload, context),\n\t\t\t};\n\t\t\tconst message = await streamResponse(runtime, model, messages, options, attempt, context);\n\t\t\tconst request = { attempt, compacted, model: ref, thinkingLevel, cutoff, messages: view.messages };\n\t\t\tawait classify(runtime, request, message, context);\n\t\t},\n\t\t/** After the backoff's sleep; a run before `until` (an early wake, or a record of an earlier version) sleeps again. */\n\t\tretry: async (task, runtime, context) => {\n\t\t\tconst { attempt, compacted, until, poll } = task.state.checkpoint;\n\t\t\tif (cutOffTooOften(task, runtime)) return endCutOff(runtime, task, context);\n\t\t\tif (until > runtime.now()) return runtime.sleepUntil(until, task.state.checkpoint, context);\n\t\t\tawait runtime.commit(async (tx) => {\n\t\t\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\t\t\tconst kept = compacted === undefined ? {} : { compacted };\n\t\t\t\t// A poll the host died during polls its response again, as the next attempt.\n\t\t\t\tif (poll !== undefined) {\n\t\t\t\t\tconst pollAt = runtime.now();\n\t\t\t\t\tlive.generation = { attempt: attempt + 1, deferred: { pollAt } };\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\t\tcheckpoint: { phase: \"poll\", attempt: attempt + 1, ...kept, ...poll, pollAt },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tlive.generation = { attempt: attempt + 1 };\n\t\t\t\treturn { status: \"running\", checkpoint: { phase: \"prepare\", attempt: attempt + 1, ...kept } };\n\t\t\t}, context);\n\t\t},\n\t\t/** After the sleep until `pollAt`; a run before it (an early wake, or a record of an earlier version) sleeps again. */\n\t\tpoll: async (task, runtime, context) => {\n\t\t\tconst { attempt, compacted, model: ref, thinkingLevel, cutoff, handle, pollAt } = task.state.checkpoint;\n\t\t\tif (cutOffTooOften(task, runtime)) return endCutOff(runtime, task, context);\n\t\t\t// The host stopped while the poll's fetch was in flight: a failed attempt, as for a request. Checked before the\n\t\t\t// time, which may have moved backwards on a replacement host; a sleeping poll is never cut off.\n\t\t\tif (task.restarts !== undefined) return interrupted(runtime, task.state.checkpoint, context);\n\t\t\tif (pollAt > runtime.now()) return runtime.sleepUntil(pollAt, task.state.checkpoint, context);\n\t\t\tconst model = runtime.models.getModel(ref.provider, ref.modelId);\n\t\t\tif (model === undefined) return failNoModel(runtime, ref, context);\n\t\t\tconst message = await runtime.models.fetchDeferred(model, handle, {\n\t\t\t\tsignal: runtime.signal,\n\t\t\t\ttelemetry: context.telemetry,\n\t\t\t});\n\t\t\tconst request = { attempt, compacted, model: ref, thinkingLevel, cutoff, pollAt };\n\t\t\tawait classify(runtime, request, message, context);\n\t\t},\n\t\ttools: async (task, runtime, context) => {\n\t\t\tif (cutOffTooOften(task, runtime)) return endCutOff(runtime, task, context);\n\t\t\tconst { assistant, tools, pending } = task.state.checkpoint;\n\t\t\tconst [next, ...rest] = pending;\n\t\t\tif (next === undefined) return finishToolRound(runtime, assistant, tools, context);\n\t\t\t// Sequential round: start the next call and wait for it.\n\t\t\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\t\t\tconst slot = live.tools?.find((slot) => slot.callId === next && slot.taskId === undefined);\n\t\t\t\tconst taskId = await createToolTask(tx, runtime, assistant, next, slot?.unoffered);\n\t\t\t\tif (slot !== undefined) slot.taskId = taskId;\n\t\t\t\tconst checkpoint: GenerationCheckpoint = {\n\t\t\t\t\tphase: \"tools\",\n\t\t\t\t\tassistant,\n\t\t\t\t\ttools: [...tools, taskId],\n\t\t\t\t\tpending: rest,\n\t\t\t\t};\n\t\t\t\treturn { status: \"waiting\", checkpoint, on: [taskId], policy: \"allSettled\" };\n\t\t\t}, context);\n\t\t},\n\t\t/**\n\t\t * Ask the `afterRun` hooks for tasks and create them, as the generation's children, in the commit that moves to\n\t\t * `drain`; without any, end the run now.\n\t\t */\n\t\tfinish: async (task, runtime, context) => {\n\t\t\tconst { run } = task.state.checkpoint;\n\t\t\tif (cutOffTooOften(task, runtime)) return endAnsweredCutOff(runtime, task, run.answer, context);\n\t\t\tconst prepared: PreparedTask[] = [];\n\t\t\tawait runtime.hooks.each(\"afterRun\", async (hook) => {\n\t\t\t\tconst asked = await hook(run, runtime, context);\n\t\t\t\tif (asked !== undefined) prepareRunEndTasks(runtime, asked.tasks, prepared);\n\t\t\t});\n\t\t\tif (prepared.length === 0) return endAnsweredRun(runtime, run.answer, context);\n\t\t\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t\t\tconst tasks: TaskId[] = [];\n\t\t\t\tfor (const { task, input } of prepared) {\n\t\t\t\t\ttasks.push(await tx.createTask(task, input, { ownership: { kind: \"task\", taskId: runtime.taskId } }));\n\t\t\t\t}\n\t\t\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\t\t\tif (live.run?.taskId === runtime.taskId && live.run.afterRun !== undefined) live.run.afterRun.tasks = tasks;\n\t\t\t\tconst checkpoint = { phase: \"drain\", answer: run.answer, tasks } as const;\n\t\t\t\treturn { status: \"waiting\", checkpoint, on: tasks, policy: \"allSettled\" };\n\t\t\t}, context);\n\t\t},\n\t\t/** The after-run tasks are terminal, whatever their outcomes: end the run. */\n\t\tdrain: async (task, runtime, context) => {\n\t\t\tconst { answer } = task.state.checkpoint;\n\t\t\tif (cutOffTooOften(task, runtime)) return endAnsweredCutOff(runtime, task, answer, context);\n\t\t\treturn endAnsweredRun(runtime, answer, context);\n\t\t},\n\t},\n\tabort: async (task, runtime, context) => {\n\t\tconst checkpoint = task.state.checkpoint;\n\t\tconst polled = deferredOf(checkpoint);\n\t\tif (polled !== undefined) await cancelDeferred(runtime, polled, context);\n\t\tconst conversationId = runtime.conversationId;\n\t\t// Runs after the round's tool tasks are terminal; calls never started get `aborted` results (spec §8.5), unoffered\n\t\t// ones `tool_unavailable`.\n\t\tconst unstarted =\n\t\t\tcheckpoint.phase === \"tools\"\n\t\t\t\t? await readCalls(runtime, checkpoint.assistant, checkpoint.pending, context)\n\t\t\t\t: [];\n\t\tawait runtime.commit(async (tx) => {\n\t\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\t\tawait convertPartial(tx, live, conversationId);\n\t\t\tfor (const call of unstarted) {\n\t\t\t\t// A call its request did not offer could not have run either way.\n\t\t\t\tconst unoffered = live.tools?.find((slot) => slot.callId === call.id)?.unoffered === true;\n\t\t\t\tconst result = unoffered\n\t\t\t\t\t? harnessError(\"tool_unavailable\", `Tool ${call.name} is not available`)\n\t\t\t\t\t: harnessError(\"aborted\", `Tool ${call.name} was aborted`);\n\t\t\t\tawait appendToolResult(tx, conversationId, call, result, { timestamp: runtime.now() });\n\t\t\t}\n\t\t\t// In `finish` and `drain` the run answered already: it ends without a failure, its inputs stay `done`.\n\t\t\tendRun(tx, live, runtime.taskId, { status: \"unanswered\", reason: \"aborted\" });\n\t\t\treturn { status: \"terminal\", outcome: { status: \"aborted\" } };\n\t\t}, context);\n\t},\n});\n\n/** The calls `callIds` of the assistant entry, in the given order. */\nasync function readCalls(\n\truntime: Runtime,\n\tassistant: EntryId,\n\tcallIds: readonly string[],\n\tcontext: Context,\n): Promise<ToolCall[]> {\n\tconst message = (await runtime.entry(AssistantEntry, assistant, context))?.model?.[0];\n\tconst calls = message?.role === \"assistant\" ? message.content.filter((content) => content.type === \"toolCall\") : [];\n\treturn callIds.flatMap((id) => calls.filter((call) => call.id === id).slice(0, 1));\n}\n\n/** A tool task for call `callId`, owned by the generation; `unoffered` for a call to a tool its request did not offer. */\nfunction createToolTask(\n\ttx: Tx,\n\truntime: Runtime,\n\tassistant: EntryId,\n\tcallId: string,\n\tunoffered: true | undefined,\n): Promise<TaskId<ToolTaskResult>> {\n\treturn tx.createTask(\n\t\tToolTask,\n\t\t{ kind: \"model\", assistant, callId, ...(unoffered === undefined ? {} : { unoffered }) },\n\t\t{ ownership: { kind: \"task\", taskId: runtime.taskId } },\n\t);\n}\n\n/**\n * Which threshold compaction preparation starts before its request (spec §8.3): `blocking` above\n * `contextWindow - reserveTokens`, `background` above the background threshold, and only when range selection finds a\n * cut. The caller starts a background one only while no compaction is listed.\n */\nfunction thresholdCompaction(\n\tview: ContextView,\n\tplanned: readonly { readonly model?: readonly Message[] }[],\n\tcontextWindow: number,\n\tpolicy: CompactionPolicy,\n): \"blocking\" | \"background\" | undefined {\n\tif (!policy.enabled || contextWindow <= 0) return undefined;\n\tconst tokens = estimateContext(\n\t\tview,\n\t\tplanned.flatMap((entry) => entry.model ?? []),\n\t);\n\tconst blocking = contextWindow - policy.reserveTokens;\n\tconst background = blocking - policy.backgroundTokens;\n\tconst over =\n\t\ttokens > blocking ? \"blocking\" : policy.backgroundTokens > 0 && tokens > background ? \"background\" : undefined;\n\tif (over === undefined || selectCut(view, policy.keepRecentTokens) === undefined) return undefined;\n\treturn over;\n}\n\n/** Error text for a generation whose blocking compaction ended without completing. */\nfunction compactionFailure(outcome: Exclude<TaskOutcome<CompactionResult>, { status: \"completed\" }>): string {\n\tswitch (outcome.status) {\n\t\tcase \"failed\":\n\t\tcase \"faulted\":\n\t\t\treturn `Compaction failed: ${outcome.error.message}`;\n\t\tcase \"orphaned\":\n\t\t\treturn `Compaction failed: ${outcome.reason}`;\n\t\tcase \"aborted\":\n\t\t\treturn \"Compaction was aborted\";\n\t}\n}\n\n/** Settle the run's inputs `unanswered` with `model_error` and fail with `text`. */\nasync function failModelError(runtime: Runtime, text: string, context: Context): Promise<void> {\n\tawait runtime.commit(async (tx) => {\n\t\tconst failure = await prepareFailure(tx, runtime);\n\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\tawait endFailedRun(tx, runtime, live, failure, { status: \"unanswered\", reason: \"model_error\", detail: text });\n\t\treturn {\n\t\t\tstatus: \"terminal\",\n\t\t\toutcome: { status: \"failed\", error: { message: text, detail: { reason: \"model_error\" } } },\n\t\t};\n\t}, context);\n}\n\n/**\n * The host stopped while this attempt's request or poll was in flight (`TaskRecord.restarts`): a failed attempt under\n * `settings.retry` (spec §8.3). The committed partial becomes an aborted entry; the next attempt follows the backoff, a\n * poll's by polling its deferred response again, or, with no retry left, the run ends `interrupted`.\n */\nasync function interrupted(\n\truntime: Runtime,\n\tcheckpoint: Extract<GenerationCheckpoint, { phase: \"request\" | \"poll\" }>,\n\tcontext: Context,\n): Promise<void> {\n\tconst { attempt, compacted } = checkpoint;\n\tconst policy = runtime.settings.retry;\n\tconst retry = policy.enabled && attempt <= policy.maxRetries;\n\tconst until = retry ? runtime.now() + retryDelayMs(policy, attempt) : 0;\n\tconst polled = checkpoint.phase === \"poll\" ? checkpoint : undefined;\n\tconst text =\n\t\tpolled === undefined\n\t\t\t? `The host stopped while the model was answering, on attempt ${attempt}`\n\t\t\t: `The host stopped while the deferred answer was fetched, on attempt ${attempt}`;\n\t// A run that ends does not leave the provider's job running.\n\tif (!retry && polled !== undefined) await cancelDeferred(runtime, polled, context);\n\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t// Read before the first table write; only a failure uses it.\n\t\tconst failure = retry ? undefined : await prepareFailure(tx, runtime);\n\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\tawait convertPartial(tx, live, runtime.conversationId);\n\t\tif (failure === undefined) {\n\t\t\tlive.generation = { attempt, retry: { at: until, error: text } };\n\t\t\tconst poll =\n\t\t\t\tpolled === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tpoll: {\n\t\t\t\t\t\t\t\tmodel: polled.model,\n\t\t\t\t\t\t\t\t...(polled.thinkingLevel === undefined ? {} : { thinkingLevel: polled.thinkingLevel }),\n\t\t\t\t\t\t\t\tcutoff: polled.cutoff,\n\t\t\t\t\t\t\t\thandle: polled.handle,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\tconst next = { phase: \"retry\", attempt, ...(compacted === undefined ? {} : { compacted }), until, ...poll };\n\t\t\treturn { status: \"sleeping\", checkpoint: next as GenerationCheckpoint, until };\n\t\t}\n\t\tawait endFailedRun(tx, runtime, live, failure, { status: \"unanswered\", reason: \"interrupted\", detail: text });\n\t\treturn {\n\t\t\tstatus: \"terminal\",\n\t\t\toutcome: { status: \"failed\", error: { message: text, detail: { reason: \"interrupted\" } } },\n\t\t};\n\t}, context);\n}\n\n/**\n * End a run whose generation was cut off `settings.restartLimit` times in a row (spec §5.4). At the limit it still\n * keeps a committed partial as an aborted entry and cancels a deferred response it polled; past the limit that cleanup\n * may be what cut it off, so it ends without it.\n */\nasync function endCutOff(\n\truntime: Runtime,\n\ttask: { readonly restarts?: number; readonly state: { readonly checkpoint: GenerationCheckpoint } },\n\tcontext: Context,\n): Promise<void> {\n\tconst checkpoint = task.state.checkpoint;\n\tconst text = `The generation was interrupted ${cutOffCount(task)} in its ${checkpoint.phase} phase`;\n\tconst salvage = salvageable(task, runtime);\n\tconst polled = deferredOf(checkpoint);\n\tif (salvage && polled !== undefined) await cancelDeferred(runtime, polled, context);\n\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\tconst failure = await prepareFailure(tx, runtime);\n\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\tif (salvage) await convertPartial(tx, live, runtime.conversationId);\n\t\tawait endFailedRun(tx, runtime, live, failure, { status: \"unanswered\", reason: \"restart_limit\", detail: text });\n\t\treturn {\n\t\t\tstatus: \"terminal\",\n\t\t\toutcome: { status: \"failed\", error: { message: text, detail: { reason: \"restart_limit\" } } },\n\t\t};\n\t}, context);\n}\n\n/** The deferred response a checkpoint polls, or will poll again after a retry's backoff. */\nfunction deferredOf(\n\tcheckpoint: GenerationCheckpoint,\n): { readonly model: ModelRef; readonly handle: DeferredHandle } | undefined {\n\tif (checkpoint.phase === \"poll\") return checkpoint;\n\treturn checkpoint.phase === \"retry\" ? checkpoint.poll : undefined;\n}\n\n/** Cancel a deferred response no attempt will poll again; a failure is reported, never thrown. */\nasync function cancelDeferred(\n\truntime: Runtime,\n\tcheckpoint: { readonly model: ModelRef; readonly handle: DeferredHandle },\n\tcontext: Context,\n): Promise<void> {\n\tconst model = runtime.models.getModel(checkpoint.model.provider, checkpoint.model.modelId);\n\tif (model === undefined) return;\n\ttry {\n\t\tawait runtime.models.cancelDeferred(model, checkpoint.handle, {\n\t\t\tsignal: runtime.signal,\n\t\t\ttelemetry: context.telemetry,\n\t\t});\n\t} catch (error) {\n\t\truntime.report(error, { kind: \"host\", callback: \"models\" });\n\t}\n}\n\n/** Settle the run's inputs `unanswered` with `no_model` and fail. */\nasync function failNoModel(runtime: Runtime, ref: ModelRef | undefined, context: Context): Promise<void> {\n\tconst message =\n\t\tref === undefined ? \"No model is configured\" : `Model ${ref.provider}/${ref.modelId} is not available`;\n\tawait runtime.commit(async (tx) => {\n\t\tconst failure = await prepareFailure(tx, runtime);\n\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\tawait endFailedRun(tx, runtime, live, failure, {\n\t\t\tstatus: \"unanswered\",\n\t\t\treason: \"no_model\",\n\t\t\tdetail: message,\n\t\t\tsettlement: { status: \"unanswered\", reason: \"no_model\" },\n\t\t});\n\t\treturn { status: \"terminal\", outcome: { status: \"failed\", error: { message, detail: { reason: \"no_model\" } } } };\n\t}, context);\n}\n\n/** End the run without a request: its context has nothing the model would answer. */\nasync function failNothingToAnswer(runtime: Runtime, context: Context): Promise<void> {\n\tconst message = \"The conversation has nothing to answer\";\n\tawait runtime.commit(async (tx) => {\n\t\tconst failure = await prepareFailure(tx, runtime);\n\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\tawait endFailedRun(tx, runtime, live, failure, { status: \"unanswered\", reason: \"nothing_to_answer\" });\n\t\tconst error = { message, detail: { reason: \"nothing_to_answer\" } };\n\t\treturn { status: \"terminal\", outcome: { status: \"failed\", error } };\n\t}, context);\n}\n\n/** What a failed run's end needs from the table, read before the commit's first table write. */\ntype Failure = { readonly policy: AfterFailedRun; readonly boundary?: Boundary };\n\nasync function prepareFailure(tx: Tx, runtime: Runtime): Promise<Failure> {\n\tconst settings = runtime.settings;\n\tconst policy = settings.afterFailedRun;\n\tif (policy !== \"continue\") return { policy };\n\treturn { policy, boundary: await prepareBoundary(tx, runtime.conversationId, settings) };\n}\n\n/**\n * End a failed run, settling its inputs with `settlement`, and do with the inputs queued behind it what\n * `settings.afterFailedRun` says (spec §6): keep them, start the next run with them, or withdraw them.\n */\nasync function endFailedRun(\n\ttx: Tx,\n\truntime: Runtime,\n\tlive: Draft<LiveState>,\n\tfailure: Failure,\n\tend: Extract<RunEnd, { status: \"unanswered\" }>,\n): Promise<void> {\n\tconst conversationId = runtime.conversationId;\n\tendRun(tx, live, runtime.taskId, end);\n\tif (failure.policy === \"withdraw\") await withdrawQueuedInputs(tx, conversationId, \"run_failed\");\n\tif (failure.boundary === undefined) return;\n\tconst { users, first } = await applyBoundary(tx, failure.boundary, \"final\", runtime.now());\n\tif (users.length > 0) await startRun(tx, conversationId, live, { inputs: users, first }, { keepFailure: true });\n}\n\n/**\n * Append a committed partial left by an interrupted, aborted, faulted, or orphaned attempt as an aborted assistant\n * entry; the caller replaces or removes `generation`.\n */\nexport async function convertPartial(tx: Tx, live: Draft<LiveState>, conversationId: ConversationId): Promise<void> {\n\tconst partial = live.generation?.message;\n\tif (partial === undefined) return;\n\tconst message = copyJson(partial) as unknown as AssistantMessage;\n\tawait appendAssistant(tx, conversationId, { ...message, stopReason: \"aborted\" });\n}\n\n/** The `beforeProviderRequest` replacement chain over one provider request body. */\nasync function providerPayload(\n\truntime: Runtime,\n\tmodel: Model<Api>,\n\tpayload: unknown,\n\tcontext: Context,\n): Promise<unknown> {\n\tlet current = payload;\n\tawait runtime.hooks.each(\"beforeProviderRequest\", async (hook) => {\n\t\tconst replaced = await hook({ model, payload: current }, runtime, context);\n\t\tif (replaced !== undefined) current = replaced.payload;\n\t});\n\treturn current;\n}\n\n/**\n * Stream one request and return the terminal message. Partials commit as trailing writes at most every\n * `progress.partialIntervalMs` (default 100 ms) with one commit in flight, deferred (`PROGRESS_COMMIT`); `finally` stops\n * the throttle and awaits that commit, so no stale partial lands after the outcome. A commit appends what text and\n * thinking grew by and applies the argument changes since the last one (`PartialChanges`), so its cost follows the new\n * text, not the strings' length.\n */\nasync function streamResponse(\n\truntime: Runtime,\n\tmodel: Model<Api>,\n\tmessages: readonly Message[],\n\toptions: SimpleStreamOptions,\n\tattempt: number,\n\tcontext: Context,\n): Promise<AssistantMessage> {\n\tconst interval = runtime.settings.progress.partialIntervalMs;\n\tlet pending: AssistantMessage | undefined;\n\tlet timer: (() => void) | undefined;\n\tlet inFlight: Promise<void> | undefined;\n\tlet stopped = false;\n\tconst changes = new PartialChanges();\n\tconst flush = (): void => {\n\t\ttimer = undefined;\n\t\tconst partial = pending;\n\t\tpending = undefined;\n\t\tif (partial === undefined || stopped) return;\n\t\tinFlight = (async () => {\n\t\t\t// Copy synchronously: the provider keeps mutating its partial. The changes since the last commit belong to it.\n\t\t\t// `copyJson()` returns untyped JSON; a copy of a message is that message's JSON representation.\n\t\t\tconst message = copyJson(partial, { omitUndefinedProperties: true }) as PartialMessage;\n\t\t\tconst taken = changes.take(message);\n\t\t\ttry {\n\t\t\t\tawait runtime.commit(\n\t\t\t\t\tasync (tx) => {\n\t\t\t\t\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\t\t\t\t\tlive.generation ??= { attempt };\n\t\t\t\t\t\tchanges.commit(live.generation, message, taken);\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t},\n\t\t\t\t\tcontext,\n\t\t\t\t\tPROGRESS_COMMIT,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tchanges.restore(taken);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t})()\n\t\t\t.catch((error: unknown) => {\n\t\t\t\t// Rejections after an abort mark or close are expected; the committed state stays consistent.\n\t\t\t\tif (!runtime.signal.aborted) runtime.report(error);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tinFlight = undefined;\n\t\t\t\tif (pending !== undefined && !stopped) timer = runtime.setTimer(flush, interval);\n\t\t\t});\n\t};\n\ttry {\n\t\tconst events = runtime.models.streamSimple(model, { messages: [...messages] }, options);\n\t\tfor await (const event of events) {\n\t\t\t// A partial without content, such as pi-ai's opening `start` event, shows nothing; a deferred response\n\t\t\t// never gets past it, so it never leaves a partial.\n\t\t\tif (event.type === \"done\" || event.type === \"error\" || event.partial.content.length === 0) continue;\n\t\t\tchanges.observe(event);\n\t\t\tpending = event.partial;\n\t\t\tif (timer === undefined && inFlight === undefined) timer = runtime.setTimer(flush, interval);\n\t\t}\n\t\treturn await events.result();\n\t} finally {\n\t\tstopped = true;\n\t\ttimer?.();\n\t\tawait inFlight;\n\t}\n}\n\n/** Classify a terminal provider message in one commit that also clears the partial. */\nasync function classify(\n\truntime: Runtime,\n\trequest: Request,\n\tmessage: AssistantMessage,\n\tcontext: Context,\n): Promise<void> {\n\t// An abort mark or close: the abort invocation or the reopened run handles the committed state.\n\truntime.signal.throwIfAborted();\n\tconst conversationId = runtime.conversationId;\n\tconst { attempt, compacted, model: ref, thinkingLevel, cutoff } = request;\n\t// Record the requested level, as pi-agent-core's agent loop does.\n\tif (thinkingLevel !== undefined) message.thinkingLevel = thinkingLevel;\n\tif (message.stopReason === \"deferred\" && message.deferred !== undefined) {\n\t\tconst handle = message.deferred;\n\t\tconst pollAt = Math.max(\n\t\t\truntime.now() + (handle.pollAfterMs ?? DEFAULT_POLL_AFTER_MS),\n\t\t\trequest.pollAt === undefined ? Number.NEGATIVE_INFINITY : request.pollAt + 1,\n\t\t);\n\t\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t\t(await tx.doc(LiveDoc, conversationId)).generation = { attempt, deferred: { pollAt } };\n\t\t\tconst checkpoint = {\n\t\t\t\tphase: \"poll\",\n\t\t\t\tattempt,\n\t\t\t\t...(compacted === undefined ? {} : { compacted }),\n\t\t\t\tmodel: ref,\n\t\t\t\t...(thinkingLevel === undefined ? {} : { thinkingLevel }),\n\t\t\t\tcutoff,\n\t\t\t\thandle,\n\t\t\t\tpollAt,\n\t\t\t} as const;\n\t\t\treturn { status: \"sleeping\", checkpoint, until: pollAt };\n\t\t}, context);\n\t\treturn;\n\t}\n\tawait runtime.hooks.each(\"afterResponse\", (hook) => hook(message, runtime, context));\n\tconst calls = message.content.filter((content): content is ToolCall => content.type === \"toolCall\");\n\tif (message.stopReason === \"toolUse\" && calls.length > 0) {\n\t\treturn startToolRound(runtime, request, message, calls, context);\n\t}\n\tif (message.stopReason === \"stop\" || message.stopReason === \"length\" || message.stopReason === \"toolUse\") {\n\t\treturn answer(runtime, message, context);\n\t}\n\t// The retry and compaction policies govern the next attempt, so they are read now rather than pinned at preparation.\n\tconst settings = runtime.settings;\n\tconst overflow = message.stopReason === \"error\" && isContextOverflow(message);\n\tconst compaction = compactionPolicy(settings, ref);\n\tif (overflow && compacted === undefined && compaction.enabled) {\n\t\tconst view = await runtime.context(conversationId, context, { at: cutoff });\n\t\tif (selectCut(view, compaction.keepRecentTokens) !== undefined) {\n\t\t\tconst text = message.errorMessage ?? \"Context overflow\";\n\t\t\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\t\t\tawait appendAssistant(tx, conversationId, message);\n\t\t\t\tdelete live.generation;\n\t\t\t\tconst child = await createCompaction(tx, conversationId, { reason: \"overflow\" }, runtime.taskId);\n\t\t\t\tconst checkpoint = { phase: \"prepare\", attempt, compacted: child, overflow: text } as const;\n\t\t\t\treturn { status: \"waiting\", checkpoint, on: [child], policy: \"allSettled\" };\n\t\t\t}, context);\n\t\t\treturn;\n\t\t}\n\t}\n\tconst policy = settings.retry;\n\t// An overflow is never retried: only a compaction can make the next request fit.\n\tconst retry =\n\t\tmessage.stopReason === \"error\" &&\n\t\t!overflow &&\n\t\tisRetryableAssistantError(message) &&\n\t\tpolicy.enabled &&\n\t\tattempt <= policy.maxRetries;\n\tconst until = retry ? runtime.now() + retryDelayMs(policy, attempt) : 0;\n\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t// Read before the first table write; only a failure uses it.\n\t\tconst failure = retry ? undefined : await prepareFailure(tx, runtime);\n\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\tawait appendAssistant(tx, conversationId, message);\n\t\tif (failure === undefined) {\n\t\t\tlive.generation = { attempt, retry: { at: until, error: message.errorMessage ?? \"\" } };\n\t\t\tconst checkpoint = {\n\t\t\t\tphase: \"retry\",\n\t\t\t\tattempt,\n\t\t\t\t...(compacted === undefined ? {} : { compacted }),\n\t\t\t\tuntil,\n\t\t\t} as const;\n\t\t\treturn { status: \"sleeping\", checkpoint, until };\n\t\t}\n\t\tconst text = message.errorMessage ?? `Model response ended with stop reason ${message.stopReason}`;\n\t\tawait endFailedRun(tx, runtime, live, failure, { status: \"unanswered\", reason: \"model_error\", detail: text });\n\t\treturn {\n\t\t\tstatus: \"terminal\",\n\t\t\toutcome: { status: \"failed\", error: { message: text, detail: { reason: \"model_error\" } } },\n\t\t};\n\t}, context);\n}\n\n/**\n * A final answer; the final boundary places queued items (spec §6). The first `onYield` continuation appends a user\n * message and hands the run to a successor generation, but only when the inbox holds no user item and no reset.\n * Otherwise the run's inputs settle `done`; with `afterRun` hooks selected the run waits for the tasks they ask for,\n * in `finish` and `drain`, before the final boundary; without, selected user items start the next run now.\n */\nasync function answer(runtime: Runtime, message: AssistantMessage, context: Context): Promise<void> {\n\tlet continuation: UserInput | undefined;\n\tawait runtime.hooks.each(\"onYield\", async (hook) => {\n\t\tif (continuation !== undefined) return;\n\t\tcontinuation = (await hook(message, runtime, context))?.continue;\n\t});\n\tconst afterRun = await asksAfterRun(runtime, context);\n\tconst conversationId = runtime.conversationId;\n\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\t// Queue modes are read on the Session line, when the boundary is decided.\n\t\tconst boundary = await prepareBoundary(tx, conversationId, runtime.settings);\n\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\tconst entry = await appendAssistant(tx, conversationId, message);\n\t\tconst result: Next = { status: \"terminal\", outcome: { status: \"completed\", result: { entryId: entry.id } } };\n\t\tconst continues = takesContinuation(continuation, boundary) ? continuation : undefined;\n\t\tif (continues === undefined && afterRun) {\n\t\t\tconst held = holdRun(tx, live, runtime, { reason: \"answer\", answer: entry.id, last: entry.id });\n\t\t\tif (held !== undefined) return held;\n\t\t}\n\t\tconst { users, first } = await applyBoundary(tx, boundary, \"final\", runtime.now());\n\t\tif (continues !== undefined) {\n\t\t\tconst user = { role: \"user\", content: continues, timestamp: runtime.now() } as const;\n\t\t\tawait tx.appendEntry(UserEntry, conversationId, { model: [user] });\n\t\t\t// The continuation starts the run's turn count over: bounding `onYield` loops is the extension's job.\n\t\t\tif (live.run?.taskId === runtime.taskId) live.run.turns = 0;\n\t\t\thandOver(live, runtime.taskId, await createGeneration(tx, conversationId));\n\t\t\tdelete live.generation;\n\t\t\treturn result;\n\t\t}\n\t\tendRun(tx, live, runtime.taskId, { status: \"done\", answer: entry.id });\n\t\tif (users.length > 0) await startRun(tx, conversationId, live, { inputs: users, first });\n\t\treturn result;\n\t}, context);\n}\n\n/** Whether the phase's agent selects an `afterRun` hook, so a run that answers waits for its tasks (spec §8.3). */\nasync function asksAfterRun(runtime: Runtime, context: Context): Promise<boolean> {\n\tconst hooks = agentHooks(await runtime.agent(context), GenerationTask.definition.name);\n\treturn hooks.some(({ handlers }) => typeof (handlers as Partial<GenerationHooks>).afterRun === \"function\");\n}\n\n/**\n * Commit A of a run that answered with `afterRun` hooks selected (spec §8.3): settle the run's inputs `done` with the\n * answer and keep `pi.live.run` for the after-run tasks, then ask the hooks in `finish`. The final boundary waits for\n * the run's end, so queued items stay queued.\n */\nfunction holdRun(tx: Tx, live: Draft<LiveState>, runtime: Runtime, end: Omit<RunSummary, \"first\">): Next | undefined {\n\tconst run = live.run;\n\tif (run?.taskId !== runtime.taskId) return undefined;\n\tfor (const id of run.inputs) tx.settleSubmission(id, { status: \"done\", answer: end.answer });\n\trun.inputs = [];\n\trun.afterRun = {};\n\tdelete live.generation;\n\tdelete live.tools;\n\tdelete live.nestedTools;\n\t// A run started before `first` was recorded has its answer as its first entry.\n\tconst summary: RunSummary = { ...end, first: run.first ?? end.answer };\n\treturn { status: \"running\", checkpoint: { phase: \"finish\", run: summary } };\n}\n\n/** A task an `afterRun` hook asked for, checked and ready to create. */\ntype PreparedTask = { readonly task: Task<JsonValue, { phase: string }, JsonValue, object>; readonly input: JsonValue };\n\n/**\n * Check the tasks one `afterRun` hook asked for, off the line, and add those that pass to `prepared`, so a broken request\n * is skipped instead of failing the creating commit: its kind must be an installed task that is not built-in, its input\n * JSON, and its definition's `initial()` must return a JSON checkpoint of one of its phases. The task is created from\n * the installed definition, as every task runs under it, with that checkpoint, so `initial()` runs once. Then throws\n * the rejections, which `hooks.each` reports against the hook's extension.\n */\nfunction prepareRunEndTasks(runtime: Runtime, requests: readonly RunEndTask[], prepared: PreparedTask[]): void {\n\tconst rejected: unknown[] = [];\n\tfor (const request of requests) {\n\t\ttry {\n\t\t\tconst name = request.task.definition.name;\n\t\t\tif (name.startsWith(\"pi.\")) throw new Error(`An afterRun hook cannot start the built-in task ${name}`);\n\t\t\tconst installed = runtime.registry.task(name);\n\t\t\tif (installed === undefined) throw new Error(`Task ${name} is not installed`);\n\t\t\tconst input = copyJson(request.input, { omitUndefinedProperties: true });\n\t\t\t// The registry erases definitions; an installed one is a task definition of its kind.\n\t\t\tconst definition = installed.definition as PreparedTask[\"task\"][\"definition\"];\n\t\t\tconst checkpoint = copyJson(definition.initial(input), { omitUndefinedProperties: true }) as { phase: string };\n\t\t\tif (!Object.hasOwn(definition.phases, checkpoint.phase)) {\n\t\t\t\tthrow new Error(`Task ${name} starts at the unknown phase ${String(checkpoint.phase)}`);\n\t\t\t}\n\t\t\tprepared.push({ task: { definition: { ...definition, initial: () => checkpoint } }, input });\n\t\t} catch (error) {\n\t\t\trejected.push(error);\n\t\t}\n\t}\n\tif (rejected.length === 1) throw rejected[0];\n\tif (rejected.length > 1)\n\t\tthrow new AggregateError(rejected, `${rejected.length} afterRun task requests were rejected`);\n}\n\n/**\n * Commit B of a run that answered (spec §8.3): its after-run tasks are terminal, or there were none. Place what the\n * final boundary selects, end the run, and start the next one for selected user items.\n */\nasync function endAnsweredRun(runtime: Runtime, answer: EntryId, context: Context): Promise<void> {\n\tconst conversationId = runtime.conversationId;\n\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\tconst boundary = await prepareBoundary(tx, conversationId, runtime.settings);\n\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\tconst { users, first } = await applyBoundary(tx, boundary, \"final\", runtime.now());\n\t\tendRun(tx, live, runtime.taskId, { status: \"done\", answer });\n\t\tif (users.length > 0) await startRun(tx, conversationId, live, { inputs: users, first });\n\t\treturn { status: \"terminal\", outcome: { status: \"completed\", result: { entryId: answer } } };\n\t}, context);\n}\n\n/**\n * End a run that answered once its `finish` or `drain` phase was cut off `settings.restartLimit` times (spec §5.4):\n * the run answered, so it ends `completed`, without a failure and without the tasks it would still have waited for,\n * marked so the scheduler reports it `task_interrupted`. Queued items stay queued, as after a failed run.\n */\nasync function endAnsweredCutOff(\n\truntime: Runtime,\n\ttask: { readonly restarts?: number; readonly state: { readonly checkpoint: GenerationCheckpoint } },\n\tanswer: EntryId,\n\tcontext: Context,\n): Promise<void> {\n\tconst text = `The generation was interrupted ${cutOffCount(task)} in its ${task.state.checkpoint.phase} phase`;\n\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\tconst live = await tx.doc(LiveDoc, runtime.conversationId);\n\t\tendRun(tx, live, runtime.taskId, { status: \"done\", answer });\n\t\tconst completed: Next = { status: \"terminal\", outcome: { status: \"completed\", result: { entryId: answer } } };\n\t\treturn endedByCrashes(completed, text);\n\t}, context);\n}\n\n/**\n * Whether an answer's `onYield` continuation is taken (spec §8.3), decided from the inbox before the final boundary\n * places anything: only when it holds no user item, of which the boundary would select one, and no reset, which would\n * otherwise run first. A continuation starts the turn count over.\n */\nfunction takesContinuation(continuation: UserInput | undefined, boundary: Boundary): continuation is UserInput {\n\tconst items = boundary.inbox.items;\n\treturn (\n\t\tcontinuation !== undefined &&\n\t\t!items.some((item) => item.mode === \"steer\" || item.mode === \"followUp\") &&\n\t\t!hasQueuedReset(items)\n\t);\n}\n\n/**\n * Append the tool-calling answer and start its tool round in one commit (spec §8.3). Every call gets a tool task owned by\n * the generation, in call order, only the first one now when the round is sequential; a call to a tool the request did\n * not offer is flagged, and its task settles `tool_unavailable`. The generation then waits for them in its `tools`\n * phase, keeping the run.\n */\nasync function startToolRound(\n\truntime: Runtime,\n\trequest: Request,\n\tmessage: AssistantMessage,\n\tcalls: readonly ToolCall[],\n\tcontext: Context,\n): Promise<void> {\n\tconst conversationId = runtime.conversationId;\n\tconst messages =\n\t\trequest.messages ?? (await runtime.context(conversationId, context, { at: request.cutoff })).messages;\n\tconst offered = new Set(getCurrentTools(messages).map((tool) => tool.name));\n\t// Read as the round starts; a tool is resolved as its tool task resolves it.\n\tconst tools = (await runtime.agent(context)).tools;\n\tconst sequential =\n\t\truntime.settings.toolExecution === \"sequential\" ||\n\t\tcalls.some(\n\t\t\t(call) =>\n\t\t\t\toffered.has(call.name) && tools.find((tool) => tool.name === call.name)?.executionMode === \"sequential\",\n\t\t);\n\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\tconst entry = await appendAssistant(tx, conversationId, message);\n\t\tconst slots: ToolSlot[] = [];\n\t\tconst tools: TaskId<ToolTaskResult>[] = [];\n\t\tconst pending: string[] = [];\n\t\tfor (const call of calls) {\n\t\t\tconst unoffered = offered.has(call.name) ? {} : ({ unoffered: true } as const);\n\t\t\tif (sequential && tools.length > 0) {\n\t\t\t\tpending.push(call.id);\n\t\t\t\tslots.push({ callId: call.id, name: call.name, status: \"pending\", ...unoffered });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst taskId = await createToolTask(tx, runtime, entry.id, call.id, unoffered.unoffered);\n\t\t\ttools.push(taskId);\n\t\t\tslots.push({ callId: call.id, name: call.name, taskId, status: \"pending\", ...unoffered });\n\t\t}\n\t\tdelete live.generation;\n\t\tlive.tools = slots;\n\t\tif (live.run?.taskId === runtime.taskId) {\n\t\t\t// A tool round is one turn of the run (`AgentState.maxTurns`).\n\t\t\tlive.run.turns += 1;\n\t\t\t// A run its boundary started without placing anything, as a continue after an answer, begins here.\n\t\t\tlive.run.first ??= entry.id;\n\t\t}\n\t\tconst checkpoint = { phase: \"tools\", assistant: entry.id, tools, pending } as const;\n\t\treturn { status: \"waiting\", checkpoint, on: tools, policy: \"allSettled\" };\n\t}, context);\n}\n\n/**\n * The round's tools are terminal: apply their controls, append a `handoff`'s reset, and then end the run at the final\n * boundary (`terminate`), end it like a failure at the conversation's turn limit (`turn_limit`), end it at a queued\n * reset, or hand it to the next generation at the `postTools` boundary, in the handoff's new context when there is one\n * (spec §8.5).\n */\nasync function finishToolRound(\n\truntime: Runtime,\n\tassistant: EntryId,\n\ttools: readonly TaskId<ToolTaskResult>[],\n\tcontext: Context,\n): Promise<void> {\n\tconst conversationId = runtime.conversationId;\n\tconst controls = new Map<TaskId, ToolControl | undefined>();\n\tconst outcomes = await runtime.outcomes(tools, context);\n\ttools.forEach((id, index) => {\n\t\tconst outcome = outcomes[index]!;\n\t\t// Version 1 results have no kind; every result a generation's round reads is a model-issued call's.\n\t\tcontrols.set(\n\t\t\tid,\n\t\t\toutcome.status === \"completed\" && outcome.result.kind !== \"nested\" ? outcome.result.control : undefined,\n\t\t);\n\t});\n\tconst slots = (await runtime.snapshot(LiveDoc, conversationId, context))?.tools ?? [];\n\tconst results = slots.flatMap((slot) => (slot.entry === undefined ? [] : [slot.entry]));\n\tawait runtime.hooks.each(\"afterTools\", (hook) => hook(assistant, results, runtime, context));\n\t// In call order, the slots' order; a slot without a task (faulted or orphaned before it got one) has no control.\n\tconst ordered = slots.map((slot) => (slot.taskId === undefined ? undefined : controls.get(slot.taskId)));\n\t// Every call of the round must ask to terminate.\n\tconst terminate = slots.length > 0 && ordered.every((control) => control?.terminate === true);\n\tconst added = ordered.flatMap((control) => control?.addTools ?? []);\n\t// The last handoff in call order wins.\n\tconst handoff = ordered.findLast((control) => control?.handoff !== undefined)?.handoff;\n\t// Read from the phase's agent, as every agent field; a `configure()` during the round applies at its end.\n\tconst maxTurns = (await runtime.agent(context)).maxTurns;\n\tconst afterRun = terminate && (await asksAfterRun(runtime, context));\n\tawait runtime.commit(async (tx): Promise<Next> => {\n\t\tconst boundary = await prepareBoundary(tx, conversationId, runtime.settings);\n\t\tif (added.length > 0) await addTools(tx, conversationId, added);\n\t\tconst live = await tx.doc(LiveDoc, conversationId);\n\t\tconst now = runtime.now();\n\t\t// The run's last entry so far: the newest result, or the assistant when no result has an entry.\n\t\tlet last = results.reduce((newest, id) => (id > newest ? id : newest), assistant);\n\t\tif (handoff !== undefined) {\n\t\t\t// The handoff's reset precedes every queued item, so queued writes and selected steers land in its context.\n\t\t\tconst message = { role: \"user\", content: handoff, timestamp: now } as const;\n\t\t\tconst entry = await tx.appendEntry(ResetEntry, conversationId, { head: \"self\", model: [message] });\n\t\t\tboundary.head = entry.id;\n\t\t\tlast = entry.id;\n\t\t}\n\t\tconst turns = live.run?.taskId === runtime.taskId ? live.run.turns : 0;\n\t\tconst held = afterRun ? holdRun(tx, live, runtime, { reason: \"terminate\", answer: assistant, last }) : undefined;\n\t\tif (held !== undefined) return held;\n\t\tif (terminate) {\n\t\t\tconst { users, first } = await applyBoundary(tx, boundary, \"final\", now);\n\t\t\tendRun(tx, live, runtime.taskId, { status: \"done\", answer: assistant });\n\t\t\tif (users.length > 0) await startRun(tx, conversationId, live, { inputs: users, first });\n\t\t} else if (maxTurns !== undefined && turns >= maxTurns) {\n\t\t\t// The turn limit ends the run like a failure: `afterFailedRun` decides the queued items, and a continue resumes\n\t\t\t// it on the round's results. The table was read for the boundary already, before any write.\n\t\t\tconst policy = runtime.settings.afterFailedRun;\n\t\t\tconst failure = { policy, ...(policy === \"continue\" ? { boundary } : {}) };\n\t\t\tawait endFailedRun(tx, runtime, live, failure, {\n\t\t\t\tstatus: \"unanswered\",\n\t\t\t\treason: \"turn_limit\",\n\t\t\t\tdetail: turns === 1 ? \"1 turn\" : `${turns} turns`,\n\t\t\t});\n\t\t} else {\n\t\t\tconst { users, first, reset } = await applyBoundary(tx, boundary, \"postTools\", now);\n\t\t\tif (reset) {\n\t\t\t\t// The queued reset cut the run's context before an answer.\n\t\t\t\tendRun(tx, live, runtime.taskId, { status: \"unanswered\", reason: \"reset\" });\n\t\t\t\tif (users.length > 0) {\n\t\t\t\t\tawait startRun(tx, conversationId, live, { inputs: users, first }, { keepFailure: true });\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdelete live.tools;\n\t\t\t\tdelete live.nestedTools;\n\t\t\t\tif (live.run?.taskId === runtime.taskId) live.run.inputs.push(...users);\n\t\t\t\thandOver(live, runtime.taskId, await createGeneration(tx, conversationId));\n\t\t\t}\n\t\t}\n\t\treturn { status: \"terminal\", outcome: { status: \"completed\", result: { entryId: assistant } } };\n\t}, context);\n}\n\n/**\n * Append a provider result and add its usage to `pi.usage` in the same commit.\n * REMINDER: every built-in writer of assistant entries goes through here, so the usage ledger stays complete.\n */\nasync function appendAssistant(\n\ttx: Tx,\n\tconversationId: ConversationId,\n\tmessage: AssistantMessage,\n): Promise<TypedEntry<never>> {\n\tawait recordUsage(tx, conversationId, \"models\", `${message.provider}/${message.model}`, message.usage);\n\treturn tx.appendEntry(AssistantEntry, conversationId, { model: [message] });\n}\n\n/**\n * Start a run for `inputs`, placed input submissions, whose first entry is `first` (`LiveRun.first`): a new generation\n * takes `pi.live.run`. Removes `runFailure`, unless `keepFailure`: a run started in the commit that ended the failed one\n * keeps its failure.\n */\nexport async function startRun(\n\ttx: Tx,\n\tconversationId: ConversationId,\n\tlive: Draft<LiveState>,\n\trun: { readonly inputs: SubmissionId[]; readonly first: EntryId | undefined },\n\toptions?: { readonly keepFailure?: boolean },\n): Promise<void> {\n\tconst { inputs, first } = run;\n\tconst taskId = await createGeneration(tx, conversationId, { submissionIds: inputs });\n\tlive.run = { taskId, inputs, turns: 0, ...(first === undefined ? {} : { first }) };\n\tif (options?.keepFailure !== true) delete live.runFailure;\n}\n\n/** A generation owned by its conversation. */\nfunction createGeneration(\n\ttx: Tx,\n\tconversationId: ConversationId,\n\ttelemetry: Pick<TaskCreationOptions, \"submissionIds\"> = {},\n): Promise<TaskId<GenerationResult>> {\n\treturn tx.createTask(GenerationTask, {}, { ownership: { kind: \"conversation\" }, conversationId, ...telemetry });\n}\n\n/** Hand run control from `from` to `to`; the run's inputs move with it. */\nexport function handOver(live: Draft<LiveState>, from: TaskId, to: TaskId): void {\n\tif (live.run?.taskId === from) live.run.taskId = to;\n}\n"]}
@@ -4,6 +4,8 @@ import type { ReportInfo, Storage } from "../types.ts";
4
4
  import type { HarnessOptions, Harness as HarnessType, ToolRegistration } from "./types.ts";
5
5
  /** Key of the Harness's internal index-size getter, for tests. */
6
6
  export declare const SCHEDULER_INDEX_SIZES: unique symbol;
7
+ /** Key of the Harness's internal idle-state getter (kept contexts against a full recompute), for tests. */
8
+ export declare const SCHEDULER_IDLE_STATE: unique symbol;
7
9
  /** Request identity of a Harness's model requests: pi-ai's defaults with provider attribution to pi. */
8
10
  export declare const DEFAULT_HARNESS_IDENTITY: ClientIdentity;
9
11
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/harness/harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2B,OAAO,EAAa,MAAM,uBAAuB,CAAC;AAGzF,OAAO,EACN,KAAK,cAAc,EAInB,MAAM,sCAAsC,CAAC;AAa9C,OAAO,KAAK,EASX,UAAU,EACV,OAAO,EAKP,MAAM,aAAa,CAAC;AAarB,OAAO,KAAK,EAYX,cAAc,EAEd,OAAO,IAAI,WAAW,EAKtB,gBAAgB,EAEhB,MAAM,YAAY,CAAC;AA+BpB,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,eAA+C,CAAC;AAoFlF,wGAAwG;AACxG,eAAO,MAAM,wBAAwB,EAAE,cAAgD,CAAC;AA8RxF;;;GAGG;AACH,wBAAgB,OAAO,CACtB,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,EAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,GAChD,MAAM,MAAM,CAed;AAuCD,8CAA8C;AAC9C,MAAM,MAAM,OAAO,GAAG,WAAW,CAAC;AAElC,eAAO,MAAM,OAAO;IACnB,0FAA0F;IACpF,IAAI,CAAC,IAAI,SAAS,gBAAgB,WAC9B,OAAO,WACP,cAAc,CAAC,IAAI,CAAC,WACpB,OAAO,GACd,OAAO,CAAC,OAAO,CAAC;CAmBnB,CAAC"}
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/harness/harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAa,MAAM,uBAAuB,CAAC;AAGhE,OAAO,EACN,KAAK,cAAc,EAInB,MAAM,sCAAsC,CAAC;AAa9C,OAAO,KAAK,EAaX,UAAU,EACV,OAAO,EAKP,MAAM,aAAa,CAAC;AAarB,OAAO,KAAK,EAYX,cAAc,EAEd,OAAO,IAAI,WAAW,EAKtB,gBAAgB,EAEhB,MAAM,YAAY,CAAC;AA+BpB,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,eAA+C,CAAC;AAElF,2GAA2G;AAC3G,eAAO,MAAM,oBAAoB,eAA8C,CAAC;AA+EhF,wGAAwG;AACxG,eAAO,MAAM,wBAAwB,EAAE,cAAgD,CAAC;AAgUxF;;;GAGG;AACH,wBAAgB,OAAO,CACtB,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,EAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,GAChD,MAAM,MAAM,CAed;AAmDD,8CAA8C;AAC9C,MAAM,MAAM,OAAO,GAAG,WAAW,CAAC;AAElC,eAAO,MAAM,OAAO;IACnB,0FAA0F;IACpF,IAAI,CAAC,IAAI,SAAS,gBAAgB,WAC9B,OAAO,WACP,cAAc,CAAC,IAAI,CAAC,WACpB,OAAO,GACd,OAAO,CAAC,OAAO,CAAC;CAmBnB,CAAC"}