@earendil-works/pi-agent-core 0.85.0 → 0.86.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 (198) hide show
  1. package/README.md +16 -6
  2. package/dist/agent-loop.d.ts.map +1 -1
  3. package/dist/agent-loop.js +64 -22
  4. package/dist/agent-loop.js.map +1 -1
  5. package/dist/agent.d.ts +5 -3
  6. package/dist/agent.d.ts.map +1 -1
  7. package/dist/agent.js +15 -6
  8. package/dist/agent.js.map +1 -1
  9. package/dist/harness/config.d.ts +1 -1
  10. package/dist/harness/config.d.ts.map +1 -1
  11. package/dist/harness/config.js +10 -2
  12. package/dist/harness/config.js.map +1 -1
  13. package/dist/harness/env/nodejs.d.ts +2 -1
  14. package/dist/harness/env/nodejs.d.ts.map +1 -1
  15. package/dist/harness/env/nodejs.js +98 -27
  16. package/dist/harness/env/nodejs.js.map +1 -1
  17. package/dist/harness/execution/tools.d.ts +1 -1
  18. package/dist/harness/execution/tools.d.ts.map +1 -1
  19. package/dist/harness/execution/tools.js +0 -2
  20. package/dist/harness/execution/tools.js.map +1 -1
  21. package/dist/harness/messages.d.ts.map +1 -1
  22. package/dist/harness/messages.js +1 -0
  23. package/dist/harness/messages.js.map +1 -1
  24. package/dist/harness/pico3/bash.d.ts +10 -0
  25. package/dist/harness/pico3/bash.d.ts.map +1 -0
  26. package/dist/harness/pico3/bash.js +25 -0
  27. package/dist/harness/pico3/bash.js.map +1 -0
  28. package/dist/harness/pico3/bounded.d.ts +21 -0
  29. package/dist/harness/pico3/bounded.d.ts.map +1 -0
  30. package/dist/harness/pico3/bounded.js +98 -0
  31. package/dist/harness/pico3/bounded.js.map +1 -0
  32. package/dist/harness/pico3/chord.d.ts +41 -0
  33. package/dist/harness/pico3/chord.d.ts.map +1 -0
  34. package/dist/harness/pico3/chord.js +130 -0
  35. package/dist/harness/pico3/chord.js.map +1 -0
  36. package/dist/harness/pico3/context.d.ts +16 -0
  37. package/dist/harness/pico3/context.d.ts.map +1 -0
  38. package/dist/harness/pico3/context.js +88 -0
  39. package/dist/harness/pico3/context.js.map +1 -0
  40. package/dist/harness/pico3/harness.d.ts +197 -0
  41. package/dist/harness/pico3/harness.d.ts.map +1 -0
  42. package/dist/harness/pico3/harness.js +654 -0
  43. package/dist/harness/pico3/harness.js.map +1 -0
  44. package/dist/harness/pico3/hooks.d.ts +10 -0
  45. package/dist/harness/pico3/hooks.d.ts.map +1 -0
  46. package/dist/harness/pico3/hooks.js +33 -0
  47. package/dist/harness/pico3/hooks.js.map +1 -0
  48. package/dist/harness/pico3/index.d.ts +19 -0
  49. package/dist/harness/pico3/index.d.ts.map +1 -0
  50. package/dist/harness/pico3/index.js +15 -0
  51. package/dist/harness/pico3/index.js.map +1 -0
  52. package/dist/harness/pico3/jsonl.d.ts +58 -0
  53. package/dist/harness/pico3/jsonl.d.ts.map +1 -0
  54. package/dist/harness/pico3/jsonl.js +325 -0
  55. package/dist/harness/pico3/jsonl.js.map +1 -0
  56. package/dist/harness/pico3/kinds/collapse.d.ts +49 -0
  57. package/dist/harness/pico3/kinds/collapse.d.ts.map +1 -0
  58. package/dist/harness/pico3/kinds/collapse.js +191 -0
  59. package/dist/harness/pico3/kinds/collapse.js.map +1 -0
  60. package/dist/harness/pico3/kinds/entries.d.ts +78 -0
  61. package/dist/harness/pico3/kinds/entries.d.ts.map +1 -0
  62. package/dist/harness/pico3/kinds/entries.js +13 -0
  63. package/dist/harness/pico3/kinds/entries.js.map +1 -0
  64. package/dist/harness/pico3/kinds/frames.d.ts +9 -0
  65. package/dist/harness/pico3/kinds/frames.d.ts.map +1 -0
  66. package/dist/harness/pico3/kinds/frames.js +75 -0
  67. package/dist/harness/pico3/kinds/frames.js.map +1 -0
  68. package/dist/harness/pico3/kinds/generation.d.ts +94 -0
  69. package/dist/harness/pico3/kinds/generation.d.ts.map +1 -0
  70. package/dist/harness/pico3/kinds/generation.js +504 -0
  71. package/dist/harness/pico3/kinds/generation.js.map +1 -0
  72. package/dist/harness/pico3/kinds/job.d.ts +44 -0
  73. package/dist/harness/pico3/kinds/job.d.ts.map +1 -0
  74. package/dist/harness/pico3/kinds/job.js +143 -0
  75. package/dist/harness/pico3/kinds/job.js.map +1 -0
  76. package/dist/harness/pico3/kinds/plugin.d.ts +15 -0
  77. package/dist/harness/pico3/kinds/plugin.d.ts.map +1 -0
  78. package/dist/harness/pico3/kinds/plugin.js +35 -0
  79. package/dist/harness/pico3/kinds/plugin.js.map +1 -0
  80. package/dist/harness/pico3/kinds/post-tools.d.ts +22 -0
  81. package/dist/harness/pico3/kinds/post-tools.d.ts.map +1 -0
  82. package/dist/harness/pico3/kinds/post-tools.js +145 -0
  83. package/dist/harness/pico3/kinds/post-tools.js.map +1 -0
  84. package/dist/harness/pico3/kinds/task-api.d.ts +3 -0
  85. package/dist/harness/pico3/kinds/task-api.d.ts.map +1 -0
  86. package/dist/harness/pico3/kinds/task-api.js +45 -0
  87. package/dist/harness/pico3/kinds/task-api.js.map +1 -0
  88. package/dist/harness/pico3/kinds/tool.d.ts +43 -0
  89. package/dist/harness/pico3/kinds/tool.d.ts.map +1 -0
  90. package/dist/harness/pico3/kinds/tool.js +373 -0
  91. package/dist/harness/pico3/kinds/tool.js.map +1 -0
  92. package/dist/harness/pico3/membrane.d.ts +23 -0
  93. package/dist/harness/pico3/membrane.d.ts.map +1 -0
  94. package/dist/harness/pico3/membrane.js +141 -0
  95. package/dist/harness/pico3/membrane.js.map +1 -0
  96. package/dist/harness/pico3/memory.d.ts +53 -0
  97. package/dist/harness/pico3/memory.d.ts.map +1 -0
  98. package/dist/harness/pico3/memory.js +264 -0
  99. package/dist/harness/pico3/memory.js.map +1 -0
  100. package/dist/harness/pico3/scheduler.d.ts +46 -0
  101. package/dist/harness/pico3/scheduler.d.ts.map +1 -0
  102. package/dist/harness/pico3/scheduler.js +438 -0
  103. package/dist/harness/pico3/scheduler.js.map +1 -0
  104. package/dist/harness/pico3/session.d.ts +263 -0
  105. package/dist/harness/pico3/session.d.ts.map +1 -0
  106. package/dist/harness/pico3/session.js +1347 -0
  107. package/dist/harness/pico3/session.js.map +1 -0
  108. package/dist/harness/pico3/system.d.ts +126 -0
  109. package/dist/harness/pico3/system.d.ts.map +1 -0
  110. package/dist/harness/pico3/system.js +244 -0
  111. package/dist/harness/pico3/system.js.map +1 -0
  112. package/dist/harness/pico3/types.d.ts +973 -0
  113. package/dist/harness/pico3/types.d.ts.map +1 -0
  114. package/dist/harness/pico3/types.js +96 -0
  115. package/dist/harness/pico3/types.js.map +1 -0
  116. package/dist/harness/pico3/view.d.ts +34 -0
  117. package/dist/harness/pico3/view.d.ts.map +1 -0
  118. package/dist/harness/pico3/view.js +417 -0
  119. package/dist/harness/pico3/view.js.map +1 -0
  120. package/dist/harness/runtime/drive/boundary.d.ts.map +1 -1
  121. package/dist/harness/runtime/drive/boundary.js +6 -3
  122. package/dist/harness/runtime/drive/boundary.js.map +1 -1
  123. package/dist/harness/runtime/drive/response.d.ts.map +1 -1
  124. package/dist/harness/runtime/drive/response.js +4 -4
  125. package/dist/harness/runtime/drive/response.js.map +1 -1
  126. package/dist/harness/runtime/drive/retry.d.ts +2 -2
  127. package/dist/harness/runtime/drive/retry.d.ts.map +1 -1
  128. package/dist/harness/runtime/drive/retry.js +3 -6
  129. package/dist/harness/runtime/drive/retry.js.map +1 -1
  130. package/dist/harness/runtime/drive/structural.d.ts.map +1 -1
  131. package/dist/harness/runtime/drive/structural.js +5 -5
  132. package/dist/harness/runtime/drive/structural.js.map +1 -1
  133. package/dist/harness/runtime/drive/tool-placement.d.ts.map +1 -1
  134. package/dist/harness/runtime/drive/tool-placement.js +2 -27
  135. package/dist/harness/runtime/drive/tool-placement.js.map +1 -1
  136. package/dist/harness/runtime/drive/tools.d.ts.map +1 -1
  137. package/dist/harness/runtime/drive/tools.js.map +1 -1
  138. package/dist/harness/session/fork-policy.d.ts +20 -12
  139. package/dist/harness/session/fork-policy.d.ts.map +1 -1
  140. package/dist/harness/session/fork-policy.js +45 -12
  141. package/dist/harness/session/fork-policy.js.map +1 -1
  142. package/dist/harness/session/fork.d.ts +0 -2
  143. package/dist/harness/session/fork.d.ts.map +1 -1
  144. package/dist/harness/session/fork.js +20 -68
  145. package/dist/harness/session/fork.js.map +1 -1
  146. package/dist/harness/session/in-memory-storage-state.d.ts +5 -5
  147. package/dist/harness/session/in-memory-storage-state.d.ts.map +1 -1
  148. package/dist/harness/session/in-memory-storage-state.js +99 -39
  149. package/dist/harness/session/in-memory-storage-state.js.map +1 -1
  150. package/dist/harness/session/index.d.ts +1 -1
  151. package/dist/harness/session/index.d.ts.map +1 -1
  152. package/dist/harness/session/index.js +1 -1
  153. package/dist/harness/session/index.js.map +1 -1
  154. package/dist/harness/session/jsonl/fork.d.ts +38 -0
  155. package/dist/harness/session/jsonl/fork.d.ts.map +1 -0
  156. package/dist/harness/session/jsonl/fork.js +264 -0
  157. package/dist/harness/session/jsonl/fork.js.map +1 -0
  158. package/dist/harness/session/jsonl/io.d.ts +14 -0
  159. package/dist/harness/session/jsonl/io.d.ts.map +1 -0
  160. package/dist/harness/session/jsonl/io.js +86 -0
  161. package/dist/harness/session/jsonl/io.js.map +1 -0
  162. package/dist/harness/session/jsonl/legacy-v3.d.ts +33 -8
  163. package/dist/harness/session/jsonl/legacy-v3.d.ts.map +1 -1
  164. package/dist/harness/session/jsonl/legacy-v3.js +285 -206
  165. package/dist/harness/session/jsonl/legacy-v3.js.map +1 -1
  166. package/dist/harness/session/jsonl/repo.d.ts +2 -1
  167. package/dist/harness/session/jsonl/repo.d.ts.map +1 -1
  168. package/dist/harness/session/jsonl/repo.js +36 -20
  169. package/dist/harness/session/jsonl/repo.js.map +1 -1
  170. package/dist/harness/session/jsonl/storage.d.ts +4 -5
  171. package/dist/harness/session/jsonl/storage.d.ts.map +1 -1
  172. package/dist/harness/session/jsonl/storage.js +39 -113
  173. package/dist/harness/session/jsonl/storage.js.map +1 -1
  174. package/dist/harness/session/memory.d.ts +3 -5
  175. package/dist/harness/session/memory.d.ts.map +1 -1
  176. package/dist/harness/session/memory.js +9 -14
  177. package/dist/harness/session/memory.js.map +1 -1
  178. package/dist/harness/session/testing/conformance/session-repo.d.ts +2 -0
  179. package/dist/harness/session/testing/conformance/session-repo.d.ts.map +1 -1
  180. package/dist/harness/session/testing/conformance/session-repo.js +220 -1
  181. package/dist/harness/session/testing/conformance/session-repo.js.map +1 -1
  182. package/dist/harness/session/testing/index.d.ts +1 -1
  183. package/dist/harness/session/testing/index.d.ts.map +1 -1
  184. package/dist/harness/session/testing/index.js +1 -1
  185. package/dist/harness/session/testing/index.js.map +1 -1
  186. package/dist/harness/session/types.d.ts +1 -0
  187. package/dist/harness/session/types.d.ts.map +1 -1
  188. package/dist/harness/session/types.js.map +1 -1
  189. package/dist/harness/types.d.ts +14 -0
  190. package/dist/harness/types.d.ts.map +1 -1
  191. package/dist/harness/types.js.map +1 -1
  192. package/dist/proxy.d.ts +2 -2
  193. package/dist/proxy.d.ts.map +1 -1
  194. package/dist/proxy.js.map +1 -1
  195. package/dist/types.d.ts +30 -14
  196. package/dist/types.d.ts.map +1 -1
  197. package/dist/types.js.map +1 -1
  198. package/package.json +10 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/harness/pico3/session.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Context, isJsonValue } from \"@earendil-works/chord\";\nimport { createContextKey, withContextValue, withoutAbortSignal } from \"@earendil-works/chord/context\";\nimport { isBase, type Op, type Tracker, track } from \"@earendil-works/chord/delta\";\nimport { deriveContext } from \"./context.ts\";\nimport { Membrane } from \"./membrane.ts\";\nimport {\n\ttype AnyKind,\n\ttype Checkpoint,\n\tClosed,\n\tCollapseInProgress,\n\ttype ContextView,\n\ttype Conversation,\n\tConversationBusy,\n\ttype ConversationSpec,\n\ttype CoreTx,\n\ttype DocRef,\n\ttype Entry,\n\ttype EntryInput,\n\ttype EntryKind,\n\ttype EntryRef,\n\ttype EntryScan,\n\tFaulted,\n\tForbidden,\n\tGenerationInProgress,\n\ttype Id,\n\ttype Input,\n\ttype InputOf,\n\ttype Invoker,\n\ttype JsonObject,\n\ttype JsonValue,\n\ttype Namespace,\n\ttype NamespaceRegistration,\n\ttype NewEntry,\n\ttype OwnedConversationSpec,\n\ttype QueuedInput,\n\tReadAfterWrite,\n\ttype RewindableState,\n\ttype SendInput,\n\ttype Seq,\n\ttype SessionState,\n\ttype SlotOf,\n\ttype StickyState,\n\ttype Storage,\n\ttype Task,\n\ttype TaskOf,\n\ttype TaskPatch,\n\ttype TaskRef,\n\ttype TaskScan,\n\ttype TaskSpec,\n\ttype ToolSlot,\n\ttype ViewEvent,\n\ttype Write,\n} from \"./types.ts\";\n\n// ---------------------------------------------------------------------------\n// Document cache and defaults\n// ---------------------------------------------------------------------------\n\nconst docKey = (ref: DocRef) => (ref.doc === \"session\" ? \"session\" : `${ref.doc}:${ref.conversationId}`);\n\n/** Remove matching elements from a tracked array IN PLACE (never `arr = arr.filter(...)` on a tracked doc). */\nexport function removeWhere<T>(arr: T[], pred: (item: T) => boolean): void {\n\tfor (let i = arr.length - 1; i >= 0; i--) if (pred(arr[i]!)) arr.splice(i, 1);\n}\n\nconst CORE_KINDS = new Set([\"pi.generation\", \"pi.tool\", \"pi.post_tools\", \"pi.collapse\"]);\nconst CORE_CONFIG_VALIDATORS: Readonly<Record<string, (value: JsonValue) => boolean>> = {\n\tmodel: (value) => exactObject(value, [\"provider\", \"modelId\"]) && value.provider !== \"\" && value.modelId !== \"\",\n\tthinkingLevel: (value) =>\n\t\ttypeof value === \"string\" && [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"].includes(value),\n\tselectedTools: (value) => Array.isArray(value) && value.every((name) => typeof name === \"string\"),\n\tprofile: (value) => typeof value === \"string\",\n\tretry: (value) =>\n\t\texactObject(value, [\"enabled\", \"maxRetries\", \"baseDelayMs\"], [\"maxAgentDelayMs\"]) &&\n\t\ttypeof value.enabled === \"boolean\" &&\n\t\ttypeof value.maxRetries === \"number\" &&\n\t\tNumber.isSafeInteger(value.maxRetries) &&\n\t\tvalue.maxRetries >= 0 &&\n\t\tfiniteNonnegative(value.baseDelayMs) &&\n\t\t(value.maxAgentDelayMs === undefined || finiteNonnegative(value.maxAgentDelayMs)),\n\tthreshold: (value) => typeof value === \"number\" && Number.isFinite(value),\n\tkeepRecent: finiteNonnegative,\n\tsteeringMode: (value) => value === \"all\" || value === \"one-at-a-time\",\n\tfollowUpMode: (value) => value === \"all\" || value === \"one-at-a-time\",\n};\n\nfunction finiteNonnegative(value: JsonValue | undefined): boolean {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\nfunction exactObject(\n\tvalue: JsonValue,\n\trequired: readonly string[],\n\toptional: readonly string[] = [],\n): value is JsonObject {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tconst keys = Object.keys(value);\n\treturn (\n\t\trequired.every((key) => Object.hasOwn(value, key)) &&\n\t\tkeys.every((key) => required.includes(key) || optional.includes(key))\n\t);\n}\nexport const isCoreKind = (name: string) => CORE_KINDS.has(name);\n\n/** Declared config defaults, derived from the registered kinds. Nothing is duplicated elsewhere. */\nexport class Defaults {\n\treadonly rewindable: JsonObject = {};\n\treadonly sticky: JsonObject = {};\n\treadonly route = new Map<string, \"rewindable\" | \"sticky\">();\n\tprivate readonly owners = new Map<string, AnyKind>();\n\tconstructor(kinds: Iterable<AnyKind>) {\n\t\tfor (const kind of kinds) this.register(kind);\n\t}\n\tregister(kind: AnyKind): void {\n\t\tconst declarations = ([\"rewindable\", \"sticky\"] as const).flatMap((doc) =>\n\t\t\tObject.entries(kind.config?.[doc] ?? {}).map(([key, value]) => ({ doc, key, value })),\n\t\t);\n\t\tconst local = new Set<string>();\n\t\tfor (const { key } of declarations) {\n\t\t\tif (local.has(key) || this.route.has(key))\n\t\t\t\tthrow new Error(`config key \"${key}\" declared by more than one kind`);\n\t\t\tlocal.add(key);\n\t\t}\n\t\tfor (const { doc, key, value } of declarations) {\n\t\t\tthis.route.set(key, doc);\n\t\t\tthis.owners.set(key, kind);\n\t\t\tif (value !== undefined) this[doc][key] = structuredClone(value);\n\t\t}\n\t}\n\tunregister(kind: AnyKind): void {\n\t\tfor (const [key, owner] of this.owners) {\n\t\t\tif (owner !== kind) continue;\n\t\t\tthis.owners.delete(key);\n\t\t\tconst doc = this.route.get(key);\n\t\t\tthis.route.delete(key);\n\t\t\tif (doc !== undefined) delete this[doc][key];\n\t\t}\n\t}\n\tvalidate(key: string, value: unknown): value is JsonValue {\n\t\tif (!isJsonValue(value)) return false;\n\t\tconst core = CORE_CONFIG_VALIDATORS[key];\n\t\tif (core !== undefined) return core(value);\n\t\treturn this.route.has(key);\n\t}\n\tvalidateSeed(doc: \"rewindable\" | \"sticky\", seed: object): JsonObject {\n\t\tconst out: JsonObject = {};\n\t\tfor (const [key, value] of Object.entries(seed)) {\n\t\t\tif (value === undefined) continue;\n\t\t\tif (this.route.get(key) !== doc || !this.validate(key, value))\n\t\t\t\tthrow new TypeError(`invalid ${doc} config value for \"${key}\"`);\n\t\t\tout[key] = structuredClone(value);\n\t\t}\n\t\treturn out;\n\t}\n\t/** Fill declared keys that are absent (never `??`: a stored null is a value). */\n\tfill(doc: \"rewindable\" | \"sticky\", target: JsonObject) {\n\t\tfor (const [key, value] of Object.entries(this[doc])) if (!(key in target)) target[key] = structuredClone(value);\n\t}\n\tfreshRewindable(over: Partial<RewindableState> = {}, preservePlugins = false): RewindableState {\n\t\tconst base: JsonObject = { plugins: {} };\n\t\tthis.fill(\"rewindable\", base);\n\t\tconst { plugins, ...raw } = over;\n\t\tconst rest = preservePlugins ? (raw as JsonObject) : this.validateSeed(\"rewindable\", raw);\n\t\treturn {\n\t\t\t...base,\n\t\t\t...rest,\n\t\t\t...(preservePlugins && plugins !== undefined ? { plugins: structuredClone(plugins) } : {}),\n\t\t} as unknown as RewindableState;\n\t}\n\tfreshSticky(over: Partial<StickyState> = {}): StickyState {\n\t\tconst base: JsonObject = { inbox: [], turn: { tools: [] }, tasks: {}, plugins: {} };\n\t\tthis.fill(\"sticky\", base);\n\t\tconst { inbox: _inbox, turn: _turn, tasks: _tasks, plugins: _plugins, ...raw } = over;\n\t\treturn { ...base, ...this.validateSeed(\"sticky\", raw) } as unknown as StickyState;\n\t}\n}\n\nclass Docs {\n\tprivate readonly trackers = new Map<string, Tracker<object>>();\n\tprivate readonly storage: Storage;\n\tprivate readonly defaults: Defaults;\n\t/** Bytes of ops written since the last base, per document. Drives rebase+truncate. */\n\treadonly sinceBase = new Map<string, number>();\n\tconstructor(storage: Storage, defaults: Defaults) {\n\t\tthis.storage = storage;\n\t\tthis.defaults = defaults;\n\t}\n\tnoteOps(ref: DocRef, ops: Op[]) {\n\t\tconst key = docKey(ref);\n\t\tthis.sinceBase.set(key, isBase(ops) ? 0 : (this.sinceBase.get(key) ?? 0) + JSON.stringify(ops).length);\n\t}\n\trequestBase(ref: DocRef) {\n\t\tthis.trackers.get(docKey(ref))?.rebase();\n\t}\n\tasync get(ref: DocRef, ctx: Context): Promise<Tracker<object>> {\n\t\tconst key = docKey(ref);\n\t\tconst cached = this.trackers.get(key);\n\t\tif (cached !== undefined) return cached;\n\t\tconst stored = await this.storage.doc(ref, ctx);\n\t\tif (stored === undefined) throw new Error(`document ${key} does not exist`);\n\t\tif (ref.doc !== \"session\") this.defaults.fill(ref.doc, stored); // declared defaults are visible without being persisted\n\t\tconst t = track(stored as object);\n\t\tt.flush(); // consume the synthetic first flush; never persisted\n\t\tthis.trackers.set(key, t);\n\t\treturn t;\n\t}\n\tevict(ref: DocRef) {\n\t\tthis.trackers.delete(docKey(ref));\n\t}\n\tpeek(ref: DocRef): Tracker<object> | undefined {\n\t\treturn this.trackers.get(docKey(ref));\n\t}\n\tloaded(ref: DocRef): JsonObject | undefined {\n\t\treturn this.trackers.get(docKey(ref))?.target as JsonObject | undefined;\n\t}\n\tadopt(ref: DocRef, tracker: Tracker<object>) {\n\t\tthis.trackers.set(docKey(ref), tracker);\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Transaction: one implementation, capability-checked per method.\n// ---------------------------------------------------------------------------\n\nexport interface CommitChanges {\n\tentries: Entry[];\n\ttasks: Task[];\n\tinputs: Input[];\n\tconversations: Conversation[];\n\tdocs: { ref: DocRef; ops: Op[] }[];\n\tevents: { conversationId: Id; event: ViewEvent }[];\n}\n\n/** Session-side conversation index: owner/parent graph for subtree checks and ancestry. */\nexport interface ConversationIndex {\n\tget(id: Id): Conversation | undefined;\n\t/** Conversation ids in the subtree rooted at `root` (inclusive), via ownership. */\n\tsubtree(root: Id): Set<Id>;\n\t/** Conversation ids from the root down to `id` (exclusive of `id`) via ownership. */\n\tancestors(id: Id): Id[];\n}\n\nconst HOST_TX_METHODS = [\n\t\"conversation\",\n\t\"entry\",\n\t\"entries\",\n\t\"newestEntry\",\n\t\"scanEntries\",\n\t\"context\",\n\t\"task\",\n\t\"tasks\",\n\t\"input\",\n\t\"rewindableAsOf\",\n\t\"snapshot\",\n\t\"plugins\",\n\t\"emit\",\n\t\"config\",\n\t\"write\",\n\t\"createTask\",\n\t\"createConversation\",\n] as const;\nconst TASK_TX_METHODS = [\"checkpoint\", \"slot\"] as const;\nconst CORE_TX_METHODS = [\n\t\"rewindable\",\n\t\"sticky\",\n\t\"session\",\n\t\"toolSlot\",\n\t\"appendEntry\",\n\t\"send\",\n\t\"resolveInputs\",\n\t\"boundary\",\n\t\"markTask\",\n\t\"setTask\",\n\t\"withdrawInput\",\n\t\"createOwnedConversation\",\n\t\"createForkConversation\",\n] as const;\nconst CALLBACK_TX_METHODS = new Set<string>([...HOST_TX_METHODS, ...TASK_TX_METHODS, ...CORE_TX_METHODS]);\n\nclass TxImpl implements CoreTx {\n\tprivate readonly writes: Write[] = [];\n\tprivate readonly touched = new Map<string, { ref: DocRef; tracker: Tracker<object> }>();\n\tprivate readonly membrane = new Membrane(\"tx\");\n\t// Overlays for direct reads: complete for the tables a closure reads after writing.\n\tprivate readonly createdTasks = new Map<Id, Task>();\n\tprivate readonly createdEntries = new Map<Id, Entry>();\n\tprivate readonly createdConversations = new Map<Id, Conversation>();\n\tprivate readonly inputsById = new Map<Id, Input>();\n\tprivate readonly inputsByRequest = new Map<string, Input>();\n\t/**\n\t * Transaction-local identity cache for heterogeneous namespace façades.\n\t * Keys are current namespace token objects, validated before lookup; values are\n\t * merged membrane wrappers. TxImpl owns the map and revoke() invalidates every value.\n\t */\n\tprivate readonly namespaceViews = new Map<object, object>();\n\tprivate readonly changedConfig = new Map<Id, Set<string>>();\n\t// Domains written: scans over them reject.\n\tprivate readonly wroteEntries = new Set<Id>();\n\tprivate wroteTasks = false;\n\tprivate poisoned: Error | undefined;\n\tprivate surfaceActive = true;\n\t/** Set while a terminal closure runs: the invoker's task counts as gone for busy(). */\n\tclosing = false;\n\treadonly changes: CommitChanges = { entries: [], tasks: [], inputs: [], conversations: [], docs: [], events: [] };\n\treadonly invoker: Invoker;\n\tprivate readonly storage: Storage;\n\tprivate readonly docs: Docs;\n\tprivate readonly defaults: Defaults;\n\tprivate readonly kinds: ReadonlyMap<string, AnyKind>;\n\tprivate readonly namespaces: ReadonlyMap<string, NamespaceRegistration>;\n\tprivate readonly liveTasks: ReadonlyMap<Id, Task>;\n\tprivate readonly conversations: ConversationIndex;\n\tprivate readonly now: () => number;\n\tprivate readonly ctx: Context;\n\n\tconstructor(\n\t\tinvoker: Invoker,\n\t\tstorage: Storage,\n\t\tdocs: Docs,\n\t\tdefaults: Defaults,\n\t\tkinds: ReadonlyMap<string, AnyKind>,\n\t\tnamespaces: ReadonlyMap<string, NamespaceRegistration>,\n\t\tliveTasks: ReadonlyMap<Id, Task>,\n\t\tconversations: ConversationIndex,\n\t\tnow: () => number,\n\t\tctx: Context,\n\t) {\n\t\tthis.invoker = invoker;\n\t\tthis.storage = storage;\n\t\tthis.docs = docs;\n\t\tthis.defaults = defaults;\n\t\tthis.kinds = kinds;\n\t\tthis.namespaces = namespaces;\n\t\tthis.liveTasks = liveTasks;\n\t\tthis.conversations = conversations;\n\t\tthis.now = now;\n\t\tthis.ctx = ctx;\n\t}\n\n\tcallbackSurface(): TxImpl {\n\t\tconst implementation = this as unknown as Record<string, unknown>;\n\t\tconst methods = new Map<string, (...args: unknown[]) => unknown>();\n\t\tconst target = Object.freeze(Object.create(null)) as object;\n\t\treturn new Proxy(target, {\n\t\t\tget: (_target, key) => {\n\t\t\t\tif (typeof key !== \"string\" || !CALLBACK_TX_METHODS.has(key)) return undefined;\n\t\t\t\tconst cached = methods.get(key);\n\t\t\t\tif (cached !== undefined) return cached;\n\t\t\t\tconst method = implementation[key];\n\t\t\t\tif (typeof method !== \"function\") throw new Error(`transaction method ${key} is missing`);\n\t\t\t\tconst bound = (...args: unknown[]) => {\n\t\t\t\t\tthis.assertSurfaceActive();\n\t\t\t\t\treturn Reflect.apply(method, this, args);\n\t\t\t\t};\n\t\t\t\tmethods.set(key, bound);\n\t\t\t\treturn bound;\n\t\t\t},\n\t\t}) as unknown as TxImpl;\n\t}\n\tcloseSurface(): void {\n\t\tthis.surfaceActive = false;\n\t}\n\tprivate assertSurfaceActive(): void {\n\t\tif (!this.surfaceActive) throw new TypeError(\"transaction used outside its callback\");\n\t}\n\n\t// --- capability & scope -------------------------------------------------\n\n\tprivate get core() {\n\t\treturn this.invoker.type === \"kernel\" || (this.invoker.type === \"task\" && this.invoker.core);\n\t}\n\tprivate assertCore(what: string) {\n\t\tif (!this.core) throw new Forbidden(`${what}: core turn machinery only`);\n\t}\n\tprivate assertNotHost(what: string) {\n\t\tif (this.invoker.type !== \"task\") throw new Forbidden(`${what} outside a task`);\n\t}\n\t/** A task may touch its own conversation and the subtree it owns. The host and core may touch anything. */\n\tprivate inScope(conversationId: Id): boolean {\n\t\tif (this.invoker.type !== \"task\" || this.invoker.core) return true;\n\t\tif (conversationId === this.invoker.conversationId || this.createdConversations.has(conversationId)) return true;\n\t\tconst task = this.createdTasks.get(this.invoker.id) ?? this.liveTasks.get(this.invoker.id);\n\t\tfor (const root of task?.owns ?? []) if (this.conversations.subtree(root).has(conversationId)) return true;\n\t\treturn false;\n\t}\n\tprivate assertScope(conversationId: Id, what: string) {\n\t\tif (!this.inScope(conversationId))\n\t\t\tthrow new Forbidden(`${what}: conversation ${conversationId} is outside this task's subtree`);\n\t}\n\tprivate assertEntryScope(entry: Entry, what: string) {\n\t\tif (this.inScope(entry.conversationId)) return;\n\t\tif (this.invoker.type !== \"task\" || this.invoker.core)\n\t\t\tthrow new Forbidden(`${what}: entry ${entry.id} is outside this task's subtree`);\n\t\tconst candidates = new Set<Id>([this.invoker.conversationId, ...this.createdConversations.keys()]);\n\t\tconst task = this.createdTasks.get(this.invoker.id) ?? this.liveTasks.get(this.invoker.id);\n\t\tfor (const root of task?.owns ?? []) for (const id of this.conversations.subtree(root)) candidates.add(id);\n\t\tfor (const candidate of candidates) {\n\t\t\tlet conversation = this.createdConversations.get(candidate) ?? this.conversations.get(candidate);\n\t\t\twhile (conversation?.parent !== undefined) {\n\t\t\t\tif (conversation.parent.conversationId === entry.conversationId && entry.id <= conversation.parent.at)\n\t\t\t\t\treturn;\n\t\t\t\tconversation = this.conversations.get(conversation.parent.conversationId);\n\t\t\t}\n\t\t}\n\t\tthrow new Forbidden(`${what}: entry ${entry.id} is not visible from this task's subtree`);\n\t}\n\tprivate poison(error: Error): never {\n\t\tthis.poisoned ??= error;\n\t\tthrow error;\n\t}\n\tprivate assertNoEntryWrites(conversationId: Id, read: string) {\n\t\tif (this.wroteEntries.has(conversationId)) this.poison(new ReadAfterWrite(read, \"entry append\"));\n\t}\n\tprivate assertNoTaskWrites(read: string) {\n\t\tif (this.wroteTasks) this.poison(new ReadAfterWrite(read, \"task write\"));\n\t}\n\tget poison_(): Error | undefined {\n\t\treturn this.poisoned;\n\t}\n\n\t// --- reads (direct reads see this transaction's writes) -------------------\n\n\tasync conversation(id: Id) {\n\t\tthis.assertScope(id, \"conversation\");\n\t\treturn this.createdConversations.get(id) ?? (await this.storage.conversation(id, this.ctx));\n\t}\n\tentry(id: Id): Promise<Entry | undefined>;\n\tentry<E extends Entry>(kind: EntryKind<E>, id: Id): Promise<E | undefined>;\n\tasync entry(a: Id | EntryKind, b?: Id): Promise<Entry | undefined> {\n\t\tconst id = typeof a === \"number\" ? a : b!;\n\t\tconst e = this.createdEntries.get(id) ?? (await this.storage.entries([id], this.ctx)).get(id);\n\t\tif (e !== undefined) this.assertEntryScope(e, \"entry\");\n\t\treturn typeof a === \"number\" || a.is(e) ? e : undefined;\n\t}\n\tasync entries(ids: readonly Id[]) {\n\t\tconst out = await this.storage.entries(\n\t\t\tids.filter((id) => !this.createdEntries.has(id)),\n\t\t\tthis.ctx,\n\t\t);\n\t\tfor (const id of ids) {\n\t\t\tconst c = this.createdEntries.get(id);\n\t\t\tif (c) out.set(id, c);\n\t\t}\n\t\tfor (const entry of out.values()) this.assertEntryScope(entry, \"entries\");\n\t\treturn out;\n\t}\n\tnewestEntry(conversationId: Id, opts?: { kind?: string; withHead?: boolean }): Promise<Entry | undefined>;\n\tnewestEntry<E extends Entry>(conversationId: Id, kind: EntryKind<E>): Promise<E | undefined>;\n\tasync newestEntry(\n\t\tconversationId: Id,\n\t\topts: { kind?: string; withHead?: boolean } | EntryKind = {},\n\t): Promise<Entry | undefined> {\n\t\tthis.assertScope(conversationId, \"newestEntry\");\n\t\tthis.assertNoEntryWrites(conversationId, \"newestEntry\");\n\t\tconst scan = \"is\" in opts ? { kind: opts.kind } : opts;\n\t\tconst [e] = await this.storage.scanEntries({ conversationId, ...scan, limit: 1 }, this.ctx);\n\t\treturn e;\n\t}\n\tscanEntries(scan: EntryScan) {\n\t\tthis.assertScope(scan.conversationId, \"scanEntries\");\n\t\tthis.assertNoEntryWrites(scan.conversationId, \"scanEntries\");\n\t\treturn this.storage.scanEntries(scan, this.ctx);\n\t}\n\tasync context(conversationId: Id, at?: Id): Promise<ContextView> {\n\t\tthis.assertScope(conversationId, \"context\");\n\t\tthis.assertNoEntryWrites(conversationId, \"context\");\n\t\treturn deriveContext(this.storage, conversationId, at, this.ctx);\n\t}\n\ttask(id: Id): Promise<Task | undefined>;\n\ttask<K extends AnyKind>(ref: TaskRef<K>): Promise<TaskOf<K> | undefined>;\n\tasync task(a: Id | TaskRef): Promise<Task | undefined> {\n\t\tconst id = typeof a === \"number\" ? a : a.id;\n\t\tconst task = this.createdTasks.get(id) ?? this.liveTasks.get(id) ?? (await this.storage.task(id, this.ctx));\n\t\tif (task !== undefined) this.assertScope(task.conversationId, \"task\");\n\t\treturn task;\n\t}\n\tasync tasks(scan: TaskScan) {\n\t\tthis.assertNoTaskWrites(\"tasks\");\n\t\tif (scan.conversationId !== undefined) this.assertScope(scan.conversationId, \"tasks\");\n\t\tconst rows = await this.storage.scanTasks(scan, this.ctx);\n\t\tconst seen = new Set(rows.map((t) => t.id));\n\t\tfor (const t of this.liveTasks.values())\n\t\t\tif (\n\t\t\t\t!seen.has(t.id) &&\n\t\t\t\t(scan.conversationId === undefined || t.conversationId === scan.conversationId) &&\n\t\t\t\t(scan.kind === undefined || t.kind === scan.kind)\n\t\t\t)\n\t\t\t\trows.push(t);\n\t\treturn rows.filter((t) => scan.status === undefined || scan.status.includes(t.status));\n\t}\n\tasync input(id: Id) {\n\t\tconst input = this.inputsById.get(id) ?? (await this.storage.input(id, this.ctx));\n\t\tif (input !== undefined) this.assertScope(input.conversationId, \"input\");\n\t\treturn input;\n\t}\n\tprivate async inputByRequest(conversationId: Id, requestId: string) {\n\t\tthis.assertScope(conversationId, \"inputByRequest\");\n\t\treturn (\n\t\t\tthis.inputsByRequest.get(`${conversationId}:${requestId}`) ??\n\t\t\t(await this.storage.inputByRequest(conversationId, requestId, this.ctx))\n\t\t);\n\t}\n\tasync rewindableAsOf(conversationId: Id, at: Id): Promise<RewindableState | undefined> {\n\t\tthis.assertScope(conversationId, \"rewindableAsOf\");\n\t\treturn this.storage.docAsOf(conversationId, at, this.ctx) as Promise<RewindableState | undefined>;\n\t}\n\n\tsnapshot(ref: { doc: \"rewindable\"; conversationId: Id }): RewindableState;\n\tsnapshot(ref: { doc: \"sticky\"; conversationId: Id }): StickyState;\n\tsnapshot(ref: { doc: \"session\" }): SessionState;\n\tsnapshot(ref: DocRef): object {\n\t\tif (ref.doc !== \"session\") this.assertScope(ref.conversationId, \"snapshot\");\n\t\tconst value = structuredClone(this.doc(ref).target) as JsonObject;\n\t\tif (ref.doc !== \"session\") {\n\t\t\tthis.defaults.fill(ref.doc, value);\n\t\t\tif (this.invoker.type === \"task\") {\n\t\t\t\tfor (const [key, fallback] of Object.entries(this.invoker.kind.config?.[ref.doc] ?? {})) {\n\t\t\t\t\tif (!(key in value) && fallback !== undefined) value[key] = structuredClone(fallback);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n\n\t// --- documents ----------------------------------------------------------\n\n\tprivate doc(ref: DocRef): Tracker<object> {\n\t\tconst key = docKey(ref);\n\t\tconst hit = this.touched.get(key);\n\t\tif (hit !== undefined) return hit.tracker;\n\t\tconst cached = this.docs.peek(ref);\n\t\tif (cached !== undefined) {\n\t\t\tthis.touched.set(key, { ref, tracker: cached });\n\t\t\treturn cached;\n\t\t}\n\t\tthrow new Error(`document ${key} not loaded; pass it in commit({ docs })`);\n\t}\n\tprivate view<T extends object>(ref: DocRef): T {\n\t\treturn this.membrane.wrap(this.doc(ref).state as T);\n\t}\n\tasync preload(refs: DocRef[]) {\n\t\tfor (const ref of refs) {\n\t\t\tconst key = docKey(ref);\n\t\t\tif (this.touched.has(key)) continue;\n\t\t\tthis.touched.set(key, { ref, tracker: await this.docs.get(ref, this.ctx) });\n\t\t}\n\t}\n\n\trewindable(conversationId: Id): RewindableState {\n\t\tthis.assertCore(\"rewindable document\");\n\t\treturn this.view<RewindableState>({ doc: \"rewindable\", conversationId });\n\t}\n\tsticky(conversationId: Id): StickyState {\n\t\tthis.assertCore(\"sticky document\");\n\t\treturn this.view<StickyState>({ doc: \"sticky\", conversationId });\n\t}\n\tsession(): SessionState {\n\t\tthis.assertCore(\"session document\");\n\t\treturn this.view<SessionState>({ doc: \"session\" });\n\t}\n\t/** Internal, unchecked. */\n\tprivate raw<T extends object>(ref: DocRef): T {\n\t\treturn this.view<T>(ref);\n\t}\n\n\tplugins<T extends JsonObject>(namespace: Namespace<T>): T {\n\t\tconst registration = this.namespaces.get(namespace.id);\n\t\tif (registration?.token !== namespace) throw new Forbidden(`namespace \"${namespace.id}\" is stale`);\n\t\tconst cached = this.namespaceViews.get(namespace);\n\t\tif (cached !== undefined) return cached as T;\n\t\tconst conversationId = this.invocationConversationId(`plugins(${namespace.id})`);\n\t\tconst target = {};\n\t\tfor (const [key, doc] of registration.routes) {\n\t\t\tconst ref: DocRef = doc === \"session\" ? { doc } : { doc, conversationId };\n\t\t\tconst document = this.raw<{ plugins: { [key: string]: JsonObject } }>(ref);\n\t\t\tif (!Object.hasOwn(document.plugins, namespace.id)) document.plugins[namespace.id] = {};\n\t\t\tconst slice = document.plugins[namespace.id]!;\n\t\t\tconst defaultValue = registration.defaults[doc][key];\n\t\t\tif (!(key in slice) && defaultValue !== undefined) slice[key] = plain(defaultValue);\n\t\t\tObject.defineProperty(target, key, {\n\t\t\t\tenumerable: true,\n\t\t\t\tget: () => slice[key],\n\t\t\t\tset: (value: JsonValue) => {\n\t\t\t\t\tslice[key] = value;\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\tObject.preventExtensions(target);\n\t\tconst view = this.membrane.wrap(target);\n\t\tthis.namespaceViews.set(namespace, view);\n\t\treturn view as T;\n\t}\n\n\temit<T extends JsonObject>(namespace: Namespace<T>, name: string, data: JsonValue): void;\n\temit(event: ViewEvent): void;\n\temit<T extends JsonObject>(namespaceOrEvent: Namespace<T> | ViewEvent, name?: string, data?: JsonValue): void {\n\t\tconst conversationId = this.invocationConversationId(\"emit\");\n\t\tif (\"id\" in namespaceOrEvent && \"unregister\" in namespaceOrEvent) {\n\t\t\tif (this.namespaces.get(namespaceOrEvent.id)?.token !== namespaceOrEvent)\n\t\t\t\tthrow new Forbidden(`namespace \"${namespaceOrEvent.id}\" is stale`);\n\t\t\tif (name === undefined || data === undefined || !/^[a-z][a-z0-9_.-]*$/i.test(name))\n\t\t\t\tthrow new Error(\"invalid plugin event\");\n\t\t\tthis.changes.events.push({\n\t\t\t\tconversationId,\n\t\t\t\tevent: { type: `plugin.${namespaceOrEvent.id}.${name}`, data: plain(data) },\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tthis.assertCore(\"core event\");\n\t\tthis.changes.events.push({ conversationId, event: plain(namespaceOrEvent) });\n\t}\n\n\tprivate invocationConversationId(what: string): Id {\n\t\tconst conversationId = this.invoker.conversationId;\n\t\tif (conversationId === undefined) throw new Forbidden(`${what}: no conversation is bound to this transaction`);\n\t\tthis.assertScope(conversationId, what);\n\t\treturn conversationId;\n\t}\n\n\tconfig(conversationId: Id) {\n\t\tthis.assertScope(conversationId, \"config\");\n\t\tconst definition = (key: string): { doc: \"rewindable\" | \"sticky\"; fallback: JsonValue | undefined } => {\n\t\t\tif (this.invoker.type === \"task\") {\n\t\t\t\tfor (const doc of [\"rewindable\", \"sticky\"] as const) {\n\t\t\t\t\tconst declared = this.invoker.kind.config?.[doc];\n\t\t\t\t\tif (declared !== undefined && Object.hasOwn(declared, key)) return { doc, fallback: declared[key] };\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst doc = this.defaults.route.get(key);\n\t\t\tif (doc === undefined) throw new Error(`unknown config key \"${key}\"`);\n\t\t\treturn { doc, fallback: this.defaults[doc][key] };\n\t\t};\n\t\tconst assertWritable = (key: string) => {\n\t\t\tif (this.invoker.type === \"task\" && !this.invoker.core)\n\t\t\t\tthrow new Forbidden(`config(${key}): ordinary tasks cannot write config`);\n\t\t};\n\t\treturn {\n\t\t\tget: (key: string) => {\n\t\t\t\tthis.assertSurfaceActive();\n\t\t\t\tconst { doc, fallback } = definition(key);\n\t\t\t\tconst document = this.doc({ doc, conversationId }).target as JsonObject;\n\t\t\t\treturn key in document ? structuredClone(document[key]) : structuredClone(fallback);\n\t\t\t},\n\t\t\tset: (key: string, value: JsonValue) => {\n\t\t\t\tthis.assertSurfaceActive();\n\t\t\t\tassertWritable(key);\n\t\t\t\tconst { doc } = definition(key);\n\t\t\t\tif (!this.defaults.validate(key, value)) throw new TypeError(`invalid config value for \"${key}\"`);\n\t\t\t\tthis.raw<JsonObject>({ doc, conversationId })[key] = structuredClone(value);\n\t\t\t\tconst keys = this.changedConfig.get(conversationId) ?? new Set<string>();\n\t\t\t\tkeys.add(key);\n\t\t\t\tthis.changedConfig.set(conversationId, keys);\n\t\t\t},\n\t\t\treset: (key: string) => {\n\t\t\t\tthis.assertSurfaceActive();\n\t\t\t\tassertWritable(key);\n\t\t\t\tconst { doc } = definition(key);\n\t\t\t\tdelete this.raw<JsonObject>({ doc, conversationId })[key];\n\t\t\t\tconst keys = this.changedConfig.get(conversationId) ?? new Set<string>();\n\t\t\t\tkeys.add(key);\n\t\t\t\tthis.changedConfig.set(conversationId, keys);\n\t\t\t},\n\t\t};\n\t}\n\n\tslot<K extends AnyKind>(ref: TaskRef<K>): SlotOf<K> {\n\t\tthis.assertNotHost(\"slot\");\n\t\tconst inv = this.invoker as Extract<Invoker, { type: \"task\" }>;\n\t\tconst task = this.liveTasks.get(ref.id) ?? this.createdTasks.get(ref.id);\n\t\tif (task === undefined) throw new Error(`task ${ref.id} is not live`);\n\t\tif (!inv.core && ref.id !== inv.id) throw new Forbidden(\"slot: another task's slot\");\n\t\tconst s = this.raw<StickyState>({ doc: \"sticky\", conversationId: task.conversationId });\n\t\tif (!(String(ref.id) in s.tasks)) s.tasks[ref.id] = (ref.kind.slot ?? (() => ({})))(task.input as never);\n\t\treturn s.tasks[ref.id] as never;\n\t}\n\ttoolSlot(task: { conversationId: Id; input: { index: number } }): ToolSlot {\n\t\tthis.assertCore(\"toolSlot\");\n\t\tconst slot = this.raw<StickyState>({ doc: \"sticky\", conversationId: task.conversationId }).turn.tools[\n\t\t\ttask.input.index\n\t\t];\n\t\tif (slot === undefined) throw new Error(`no tool slot at index ${task.input.index}`);\n\t\treturn slot;\n\t}\n\n\t// --- writes -------------------------------------------------------------\n\n\tappendEntry(conversationId: Id, entry: NewEntry): Id;\n\tappendEntry<E extends Entry>(conversationId: Id, kind: EntryKind<E>, entry: EntryInput<E>): EntryRef<E>;\n\tappendEntry(conversationId: Id, a: NewEntry | EntryKind, b?: object): Id | EntryRef {\n\t\tthis.assertCore(\"appendEntry\");\n\t\tif (\"is\" in a)\n\t\t\treturn {\n\t\t\t\tid: this.appendEntryInternal(conversationId, { ...(b as object), kind: a.kind } as NewEntry),\n\t\t\t\tkind: a,\n\t\t\t};\n\t\treturn this.appendEntryInternal(conversationId, a);\n\t}\n\tprivate appendEntryInternal(conversationId: Id, entry: NewEntry): Id {\n\t\tif (this.invoker.type === \"task\" && !this.liveTasks.has(this.invoker.id) && !this.closing)\n\t\t\tthrow new Forbidden(\"appendEntry from a task that is not live\");\n\t\tconst id = this.storage.mintId();\n\t\tconst head = entry.head === \"self\" ? id : entry.head;\n\t\tconst { head: _h, ...rest } = entry;\n\t\tconst record = plain<Entry>({\n\t\t\t...rest,\n\t\t\tid,\n\t\t\tconversationId,\n\t\t\t...(head === undefined ? {} : { head }),\n\t\t\t...(this.invoker.type === \"task\" ? { byTaskId: this.invoker.id } : {}),\n\t\t});\n\t\tvalidateEntry(record);\n\t\tthis.writes.push({ type: \"entry\", entry: record });\n\t\tthis.changes.entries.push(record);\n\t\tif (record.head !== undefined)\n\t\t\tthis.changes.events.push({ conversationId, event: { type: \"head.moved\", entry: record } });\n\t\tthis.changes.events.push({ conversationId, event: { type: \"entry.added\", entry: record } });\n\t\tthis.createdEntries.set(id, record);\n\t\tthis.wroteEntries.add(conversationId);\n\t\treturn id;\n\t}\n\n\twrite(conversationId: Id, entry: NewEntry): Promise<Id>;\n\twrite<E extends Entry>(conversationId: Id, kind: EntryKind<E>, entry: EntryInput<E>): Promise<Id>;\n\tasync write(conversationId: Id, a: NewEntry | EntryKind, b?: object): Promise<Id> {\n\t\tthis.assertScope(conversationId, \"write\");\n\t\tconst entry: NewEntry = \"is\" in a ? ({ ...(b as object), kind: a.kind } as NewEntry) : a;\n\t\tif (!this.core) {\n\t\t\tif (entry.head !== undefined) throw new Forbidden(\"write: head entries are core only\");\n\t\t\tif (entry.edits !== undefined) throw new Forbidden(\"write: edits are core only\");\n\t\t\tif (entry.kind.startsWith(\"pi.\") && entry.kind !== \"pi.notice\")\n\t\t\t\tthrow new Forbidden(`write: kind ${entry.kind} is reserved`);\n\t\t\tif (entry.kind === \"pi.notice\" && (entry.model?.length !== 1 || entry.model[0]?.role !== \"user\")) {\n\t\t\t\tthrow new Forbidden(\"write: pi.notice requires exactly one user model message\");\n\t\t\t}\n\t\t}\n\t\tif (this.busy(conversationId)) {\n\t\t\tconst id = this.storage.mintId();\n\t\t\tthis.raw<StickyState>({ doc: \"sticky\", conversationId }).inbox.push({\n\t\t\t\tid,\n\t\t\t\tmode: \"write\",\n\t\t\t\tentry: structuredClone(entry) as QueuedInput extends { entry: infer E } ? E : never,\n\t\t\t});\n\t\t\tthis.putInput({ id, conversationId, status: \"queued\" });\n\t\t\tthis.changes.events.push({ conversationId, event: { type: \"input.queued\", input: id, mode: \"write\" } });\n\t\t\treturn id;\n\t\t}\n\t\tconst id = this.storage.mintId();\n\t\tconst e = this.appendEntryInternal(conversationId, entry);\n\t\tthis.putInput({ id, conversationId, status: \"done\", entry: e });\n\t\treturn id;\n\t}\n\n\tcheckpoint<C extends Checkpoint>(value: C) {\n\t\tthis.assertNotHost(\"checkpoint\");\n\t\tconst inv = this.invoker as Extract<Invoker, { type: \"task\" }>;\n\t\tif (inv.mode === \"abort\") throw new Forbidden(\"checkpoint from an abort invocation\");\n\t\tconst current = this.createdTasks.get(inv.id) ?? this.liveTasks.get(inv.id);\n\t\tif (current === undefined) throw new Error(\"task not live\");\n\t\tthis.setTaskInternal({ ...current, checkpoint: plain(value) });\n\t}\n\t/** Kernel-internal: replace a task's mutable fields. Persists only what changed. */\n\tsetTask(task: Task) {\n\t\tthis.assertCore(\"setTask\");\n\t\tthis.setTaskInternal(task);\n\t}\n\tsetTaskInternalForControl(task: Task) {\n\t\tthis.setTaskInternal(task);\n\t}\n\tprivate setTaskInternal(task: Task) {\n\t\ttask = plain(task);\n\t\tconst prev = this.createdTasks.get(task.id) ?? this.liveTasks.get(task.id);\n\t\tconst patch: Record<string, unknown> = { id: task.id };\n\t\tfor (const key of [\"status\", \"checkpoint\", \"abort\", \"outcome\", \"owns\"] as const) {\n\t\t\tif (JSON.stringify(prev?.[key]) === JSON.stringify(task[key])) continue;\n\t\t\tpatch[key] = key === \"checkpoint\" && task.checkpoint === undefined ? null : task[key];\n\t\t}\n\t\tif (task.status === \"terminal\") {\n\t\t\tpatch.status = \"terminal\";\n\t\t\tpatch.checkpoint = null;\n\t\t\tpatch.owns = task.owns;\n\t\t\tpatch.outcome = task.outcome;\n\t\t\tif (task.abort === true) patch.abort = true;\n\t\t\ttask = { ...task };\n\t\t\tdelete (task as { checkpoint?: Checkpoint }).checkpoint;\n\t\t}\n\t\tif (Object.keys(patch).length === 1) return;\n\t\tif (task.status === \"terminal\")\n\t\t\tdelete this.raw<StickyState>({ doc: \"sticky\", conversationId: task.conversationId }).tasks[task.id];\n\t\tthis.writes.push({ type: \"task.patch\", patch: patch as TaskPatch });\n\t\tthis.changes.tasks.push(task);\n\t\tif (task.status === \"terminal\" && prev?.status !== \"terminal\") {\n\t\t\tconst kind = this.kinds.get(task.kind);\n\t\t\tif (task.kind === \"pi.collapse\") {\n\t\t\t\tif (task.outcome?.status === \"completed\") {\n\t\t\t\t\tconst result = task.outcome.result as { summary: Id };\n\t\t\t\t\tthis.changes.events.push({\n\t\t\t\t\t\tconversationId: task.conversationId,\n\t\t\t\t\t\tevent: { type: \"compaction.finished\", taskId: task.id, summary: result.summary },\n\t\t\t\t\t});\n\t\t\t\t} else if (task.outcome?.status === \"failed\") {\n\t\t\t\t\tconst failure = task.outcome.failure as {\n\t\t\t\t\t\treason: \"stale\" | \"declined\" | \"provider\" | \"retries_exhausted\" | \"no_model\";\n\t\t\t\t\t\tdetail: string;\n\t\t\t\t\t};\n\t\t\t\t\tthis.changes.events.push({\n\t\t\t\t\t\tconversationId: task.conversationId,\n\t\t\t\t\t\tevent: { type: \"compaction.failed\", taskId: task.id, reason: failure.reason, detail: failure.detail },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if ((kind === undefined || kind.turn !== true) && task.outcome !== undefined) {\n\t\t\t\tthis.changes.events.push({\n\t\t\t\t\tconversationId: task.conversationId,\n\t\t\t\t\tevent: { type: \"task.ended\", taskId: task.id, kind: task.kind, outcome: task.outcome.status },\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis.createdTasks.set(task.id, task); // overlay: later direct reads see the patch\n\t\tthis.wroteTasks = true;\n\t}\n\n\tcreateTask(spec: TaskSpec): Id;\n\tcreateTask<K extends AnyKind>(\n\t\tkind: K,\n\t\tinput: InputOf<K>,\n\t\topts?: { conversationId?: Id; background?: true; after?: Id[] },\n\t): TaskRef<K>;\n\tcreateTask(\n\t\ta: TaskSpec | AnyKind,\n\t\tinput?: JsonValue,\n\t\topts: { conversationId?: Id; background?: true; after?: Id[] } = {},\n\t): Id | TaskRef {\n\t\tif (\"initial\" in a) {\n\t\t\tconst registered = this.kinds.get(a.name);\n\t\t\tif (registered !== a) throw new Forbidden(`createTask: kind \"${a.name}\" is not the registered token`);\n\t\t\treturn { id: this.createTaskInternal({ kind: a.name, input: input as JsonValue, ...opts }), kind: a };\n\t\t}\n\t\tthis.assertCore(\"createTask by name\");\n\t\treturn this.createTaskInternal(a);\n\t}\n\tprivate createTaskInternal(spec: TaskSpec): Id {\n\t\tconst kind = this.kinds.get(spec.kind);\n\t\tif (kind === undefined) throw new Error(`unknown task kind ${spec.kind}`);\n\t\tif (isCoreKind(spec.kind) && !this.core) throw new Forbidden(`create core task ${spec.kind}`);\n\t\tconst conversationId =\n\t\t\tspec.conversationId ?? (this.invoker.type === \"task\" ? this.invoker.conversationId : undefined);\n\t\tif (conversationId === undefined) throw new Error(\"createTask: conversationId required\");\n\t\tthis.assertScope(conversationId, \"createTask\");\n\t\tif (spec.kind === \"pi.generation\" && this.hasLiveKind(conversationId, spec.kind))\n\t\t\tthrow new GenerationInProgress(conversationId);\n\t\tif (spec.kind === \"pi.collapse\" && this.hasLiveKind(conversationId, spec.kind))\n\t\t\tthrow new CollapseInProgress(conversationId);\n\t\tconst id = this.storage.mintId();\n\t\tconst task: Task = {\n\t\t\tid,\n\t\t\tconversationId,\n\t\t\tkind: spec.kind,\n\t\t\tinput: plain(spec.input),\n\t\t\tstatus: \"pending\",\n\t\t\tafter: [...(spec.after ?? [])],\n\t\t\towns: [],\n\t\t\t...(spec.background ? { background: true } : {}),\n\t\t};\n\t\tthis.writes.push({ type: \"task\", task });\n\t\tthis.changes.tasks.push(task);\n\t\tif (spec.kind === \"pi.collapse\") {\n\t\t\tconst input = spec.input as { reason: \"threshold\" | \"manual\" | \"overflow\"; through: Id };\n\t\t\tthis.changes.events.push({\n\t\t\t\tconversationId,\n\t\t\t\tevent: { type: \"compaction.started\", taskId: id, reason: input.reason, through: input.through },\n\t\t\t});\n\t\t} else if (kind.turn !== true) {\n\t\t\tthis.changes.events.push({\n\t\t\t\tconversationId,\n\t\t\t\tevent: {\n\t\t\t\t\ttype: \"task.started\",\n\t\t\t\t\ttaskId: id,\n\t\t\t\t\tkind: task.kind,\n\t\t\t\t\t...(task.background ? { background: true } : {}),\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\tthis.createdTasks.set(id, task);\n\t\tthis.wroteTasks = true;\n\t\treturn id;\n\t}\n\tprivate hasLiveKind(conversationId: Id, kind: string): boolean {\n\t\tfor (const task of this.liveTasks.values()) {\n\t\t\tif (task.conversationId !== conversationId || task.kind !== kind) continue;\n\t\t\tconst current = this.createdTasks.get(task.id) ?? task;\n\t\t\tif (current.status === \"terminal\") continue;\n\t\t\tif (this.closing && this.invoker.type === \"task\" && this.invoker.id === task.id) continue;\n\t\t\treturn true;\n\t\t}\n\t\tfor (const task of this.createdTasks.values()) {\n\t\t\tif (\n\t\t\t\ttask.conversationId === conversationId &&\n\t\t\t\ttask.kind === kind &&\n\t\t\t\ttask.status !== \"terminal\" &&\n\t\t\t\t!this.liveTasks.has(task.id)\n\t\t\t)\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tcreateConversation(spec: ConversationSpec): Id {\n\t\tconst owner = this.invoker.type === \"task\" ? this.invoker.id : undefined;\n\t\tif (spec.parent !== undefined) this.assertScope(spec.parent.conversationId, \"createConversation: parent\");\n\t\treturn this.insertConversation(spec, owner, false);\n\t}\n\n\tcreateForkConversation(spec: ConversationSpec): Id {\n\t\tthis.assertCore(\"createForkConversation\");\n\t\treturn this.insertConversation(spec, undefined, true);\n\t}\n\n\tasync createOwnedConversation(ownerTaskId: Id, sourceConversationId: Id, spec: OwnedConversationSpec): Promise<Id> {\n\t\tthis.assertCore(\"createOwnedConversation\");\n\t\tconst owner = this.liveTasks.get(ownerTaskId) ?? this.createdTasks.get(ownerTaskId);\n\t\tif (owner === undefined || owner.status === \"terminal\" || owner.conversationId !== sourceConversationId)\n\t\t\tthrow new Forbidden(`task ${ownerTaskId} cannot create an owned conversation`);\n\t\tconst tip = spec.inherit ? await this.newestEntry(sourceConversationId) : undefined;\n\t\tconst inherited = tip === undefined ? undefined : await this.rewindableAsOf(sourceConversationId, tip.id);\n\t\tconst rawOverrides = structuredClone(spec.rewindable ?? {});\n\t\tdelete rawOverrides.plugins;\n\t\tconst overrides = this.defaults.validateSeed(\"rewindable\", rawOverrides);\n\t\tconst rewindable =\n\t\t\tinherited === undefined\n\t\t\t\t? overrides\n\t\t\t\t: { ...inherited, ...overrides, plugins: structuredClone(inherited.plugins) };\n\t\treturn this.insertConversation(\n\t\t\t{\n\t\t\t\t...(tip === undefined ? {} : { parent: { conversationId: sourceConversationId, at: tip.id } }),\n\t\t\t\trewindable,\n\t\t\t\tsticky: spec.sticky,\n\t\t\t},\n\t\t\townerTaskId,\n\t\t\tinherited !== undefined,\n\t\t);\n\t}\n\n\tprivate insertConversation(spec: ConversationSpec, owner: Id | undefined, preservePlugins: boolean): Id {\n\t\tconst id = this.storage.mintId();\n\t\tconst parent =\n\t\t\tspec.parent === undefined || spec.parent.at === \"start\"\n\t\t\t\t? undefined\n\t\t\t\t: { conversationId: spec.parent.conversationId, at: spec.parent.at };\n\t\tconst conversation: Conversation = {\n\t\t\tid,\n\t\t\t...(parent ? { parent } : {}),\n\t\t\t...(owner === undefined ? {} : { owner }),\n\t\t\t...(spec.sections?.length ? { sections: spec.sections } : {}),\n\t\t};\n\t\tthis.writes.push({ type: \"conversation\", conversation });\n\t\tthis.changes.conversations.push(conversation);\n\t\tthis.createdConversations.set(id, conversation);\n\t\tthis.seedDoc(\n\t\t\t{ doc: \"rewindable\", conversationId: id },\n\t\t\tthis.defaults.freshRewindable(spec.rewindable, preservePlugins) as unknown as JsonObject,\n\t\t);\n\t\tthis.seedDoc(\n\t\t\t{ doc: \"sticky\", conversationId: id },\n\t\t\tthis.defaults.freshSticky(spec.sticky) as unknown as JsonObject,\n\t\t);\n\t\tif (owner !== undefined) {\n\t\t\tconst task = this.liveTasks.get(owner) ?? this.createdTasks.get(owner);\n\t\t\tif (task !== undefined) this.setTaskInternal({ ...task, owns: [...task.owns, id] });\n\t\t}\n\t\treturn id;\n\t}\n\tprivate seedDoc(ref: DocRef, value: object) {\n\t\tconst tracker = track(value);\n\t\ttracker.rebase();\n\t\tconst base = tracker.flush();\n\t\tthis.writes.push({ type: \"doc\", ref, ops: base });\n\t\tthis.changes.docs.push({ ref, ops: base });\n\t\tthis.docs.adopt(ref, tracker);\n\t\tthis.touched.set(docKey(ref), { ref, tracker });\n\t}\n\n\tmarkTask(id: Id) {\n\t\tthis.assertCore(\"markTask\");\n\t\tconst task = this.createdTasks.get(id) ?? this.liveTasks.get(id);\n\t\tif (task === undefined) throw new Error(`task ${id} not live`);\n\t\tif (task.abort !== true) this.setTaskInternal({ ...task, abort: true });\n\t}\n\n\t// --- admission ----------------------------------------------------------\n\n\t/** Prospective: live turn tasks, minus this transaction's terminals and the closing task, plus this transaction's new turn tasks. */\n\tbusy(conversationId: Id): boolean {\n\t\tconst isTurn = (t: Task) => this.kinds.get(t.kind)?.turn === true && t.background !== true;\n\t\tfor (const t of this.liveTasks.values()) {\n\t\t\tif (t.conversationId !== conversationId || !isTurn(t)) continue;\n\t\t\tconst overlay = this.createdTasks.get(t.id);\n\t\t\tif (overlay?.status === \"terminal\") continue;\n\t\t\tif (this.closing && this.invoker.type === \"task\" && t.id === this.invoker.id) continue;\n\t\t\treturn true;\n\t\t}\n\t\tfor (const t of this.createdTasks.values())\n\t\t\tif (t.conversationId === conversationId && isTurn(t) && t.status !== \"terminal\" && !this.liveTasks.has(t.id))\n\t\t\t\treturn true;\n\t\treturn false;\n\t}\n\n\tprivate putInput(input: Input) {\n\t\tinput = plain(input);\n\t\tthis.writes.push({ type: \"input\", input });\n\t\tthis.changes.inputs.push(input);\n\t\tthis.inputsById.set(input.id, input);\n\t\tif (input.requestId !== undefined) this.inputsByRequest.set(`${input.conversationId}:${input.requestId}`, input);\n\t}\n\n\tasync send(conversationId: Id, input: SendInput): Promise<Id> {\n\t\tthis.assertCore(\"send\");\n\t\tif (input.requestId !== undefined) {\n\t\t\tconst existing = await this.inputByRequest(conversationId, input.requestId); // before any write\n\t\t\tif (existing !== undefined) return existing.id;\n\t\t}\n\t\tif (this.busy(conversationId)) {\n\t\t\tconst mode = input.whenBusy ?? \"followUp\";\n\t\t\tif (mode === \"reject\") throw new ConversationBusy(conversationId);\n\t\t\tconst id = this.storage.mintId();\n\t\t\tthis.raw<StickyState>({ doc: \"sticky\", conversationId }).inbox.push({\n\t\t\t\tid,\n\t\t\t\tmode,\n\t\t\t\tinput: structuredClone(input.content),\n\t\t\t});\n\t\t\tthis.putInput({\n\t\t\t\tid,\n\t\t\t\tconversationId,\n\t\t\t\tstatus: \"queued\",\n\t\t\t\t...(input.requestId ? { requestId: input.requestId } : {}),\n\t\t\t});\n\t\t\tthis.changes.events.push({ conversationId, event: { type: \"input.queued\", input: id, mode } });\n\t\t\treturn id;\n\t\t}\n\t\t// Idle: read the head before the first append, place older queued items, then this one.\n\t\tconst head = await this.newestEntry(conversationId, { withHead: true });\n\t\tconst { triggers } = await this.boundary(conversationId, \"final\", head?.id);\n\t\tconst id = this.storage.mintId();\n\t\tconst eventStart = this.changes.events.length;\n\t\tconst entry = this.appendEntryInternal(conversationId, {\n\t\t\tkind: \"pi.user\",\n\t\t\tmodel: [{ role: \"user\", content: input.content, timestamp: this.now() }],\n\t\t});\n\t\tconst entryEvents = this.changes.events.splice(eventStart);\n\t\tthis.putInput({\n\t\t\tid,\n\t\t\tconversationId,\n\t\t\tstatus: \"placed\",\n\t\t\tentry,\n\t\t\t...(input.requestId ? { requestId: input.requestId } : {}),\n\t\t});\n\t\tthis.changes.events.push({ conversationId, event: { type: \"input.placed\", input: id, entry } }, ...entryEvents);\n\t\tconst inputs = [...triggers, id];\n\t\tthis.createTaskInternal({ kind: \"pi.generation\", conversationId, input: { inputs } });\n\t\tthis.changes.events.push({ conversationId, event: { type: \"turn.started\", inputs } });\n\t\treturn id;\n\t}\n\n\tprivate async setInput(id: Id, patch: Partial<Omit<Input, \"id\" | \"conversationId\">>) {\n\t\tconst current = await this.input(id);\n\t\tif (current === undefined) throw new Error(`input ${id} not found`);\n\t\tthis.putInput({ ...current, ...patch });\n\t}\n\t/** Kernel: withdraw a queued input. */\n\tasync withdrawInput(id: Id): Promise<\"aborted\" | \"already_placed\" | \"not_found\"> {\n\t\tthis.assertCore(\"withdrawInput\");\n\t\tconst i = await this.input(id);\n\t\tif (i === undefined) return \"not_found\";\n\t\tif (i.status !== \"queued\") return \"already_placed\";\n\t\tawait this.preload([{ doc: \"sticky\", conversationId: i.conversationId }]);\n\t\tremoveWhere(this.raw<StickyState>({ doc: \"sticky\", conversationId: i.conversationId }).inbox, (q) => q.id === id);\n\t\tawait this.setInput(id, { status: \"unanswered\", reason: \"aborted\" });\n\t\tthis.changes.events.push({ conversationId: i.conversationId, event: { type: \"input.aborted\", input: id } });\n\t\treturn \"aborted\";\n\t}\n\tasync resolveInputs(\n\t\tids: readonly Id[],\n\t\tresolution:\n\t\t\t| { status: \"done\"; answer: Id }\n\t\t\t| { status: \"unanswered\"; reason: NonNullable<Input[\"reason\"]>; detail?: string },\n\t) {\n\t\tthis.assertCore(\"resolveInputs\");\n\t\tfor (const id of ids) await this.setInput(id, resolution);\n\t}\n\n\t/**\n\t * Boundary placement (pico §9.5). No storage scan: `headBoundary` is the newest head as the\n\t * caller knows it, and it advances locally as same-batch self-heads are placed.\n\t */\n\tasync boundary(\n\t\tconversationId: Id,\n\t\tat: \"postTools\" | \"final\",\n\t\theadBoundary: Id | undefined,\n\t): Promise<{ triggers: Id[]; terminated: boolean }> {\n\t\tthis.assertCore(\"boundary\");\n\t\tconst s = this.raw<StickyState>({ doc: \"sticky\", conversationId });\n\t\tconst inbox = [...s.inbox].sort((a, b) => a.id - b.id);\n\t\tlet cut: Id | undefined;\n\t\tfor (const q of inbox) if (q.mode === \"write\" && q.entry.head === \"self\") cut = q.id;\n\t\tconst stale = cut === undefined ? [] : inbox.filter((q) => q.mode !== \"write\" && q.id < cut!).map((q) => q.id);\n\t\tfor (const id of stale) {\n\t\t\tawait this.setInput(id, { status: \"unanswered\", reason: \"stale\" });\n\t\t\tthis.changes.events.push({ conversationId, event: { type: \"input.aborted\", input: id } });\n\t\t}\n\t\tconst survivors = inbox.filter((q) => !stale.includes(q.id));\n\t\tconst pick = (mode: \"steer\" | \"followUp\", policy: \"all\" | \"one-at-a-time\") => {\n\t\t\tconst items = survivors.filter((q) => q.mode === mode);\n\t\t\treturn policy === \"all\" ? items : items.slice(0, 1);\n\t\t};\n\t\tconst selected = new Set<Id>(stale);\n\t\tfor (const q of survivors) if (q.mode === \"write\") selected.add(q.id);\n\t\tfor (const q of pick(\"steer\", s.steeringMode)) selected.add(q.id);\n\t\tif (at === \"final\") for (const q of pick(\"followUp\", s.followUpMode)) selected.add(q.id);\n\t\tlet head = headBoundary;\n\t\tconst triggers: Id[] = [];\n\t\tfor (const q of survivors) {\n\t\t\tif (!selected.has(q.id)) continue;\n\t\t\tif (q.mode === \"write\") {\n\t\t\t\tif (q.entry.head !== undefined && q.entry.head !== \"self\" && head !== undefined && q.entry.head < head) {\n\t\t\t\t\tawait this.setInput(q.id, { status: \"unanswered\", reason: \"stale\" });\n\t\t\t\t\tthis.changes.events.push({ conversationId, event: { type: \"input.aborted\", input: q.id } });\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst eventStart = this.changes.events.length;\n\t\t\t\tconst entry = this.appendEntryInternal(conversationId, q.entry as NewEntry);\n\t\t\t\tconst entryEvents = this.changes.events.splice(eventStart);\n\t\t\t\tif (q.entry.head !== undefined) head = q.entry.head === \"self\" ? entry : q.entry.head;\n\t\t\t\tawait this.setInput(q.id, { status: \"done\", entry });\n\t\t\t\tthis.changes.events.push(\n\t\t\t\t\t{ conversationId, event: { type: \"input.placed\", input: q.id, entry } },\n\t\t\t\t\t...entryEvents,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tconst eventStart = this.changes.events.length;\n\t\t\t\tconst entry = this.appendEntryInternal(conversationId, {\n\t\t\t\t\tkind: \"pi.user\",\n\t\t\t\t\tmodel: [{ role: \"user\", content: q.input, timestamp: this.now() }],\n\t\t\t\t});\n\t\t\t\tconst entryEvents = this.changes.events.splice(eventStart);\n\t\t\t\tawait this.setInput(q.id, { status: \"placed\", entry });\n\t\t\t\tthis.changes.events.push(\n\t\t\t\t\t{ conversationId, event: { type: \"input.placed\", input: q.id, entry } },\n\t\t\t\t\t...entryEvents,\n\t\t\t\t);\n\t\t\t\ttriggers.push(q.id);\n\t\t\t}\n\t\t}\n\t\tremoveWhere(s.inbox, (q) => selected.has(q.id));\n\t\treturn { triggers, terminated: cut !== undefined };\n\t}\n\n\t// --- finish -------------------------------------------------------------\n\n\tfinish(): Write[] {\n\t\tif (this.poisoned !== undefined) throw this.poisoned;\n\t\tfor (const [conversationId, keys] of this.changedConfig) {\n\t\t\tthis.changes.events.push({ conversationId, event: { type: \"config.changed\", keys: [...keys] } });\n\t\t}\n\t\tfor (const { ref, tracker } of this.touched.values()) {\n\t\t\tconst ops = tracker.flush();\n\t\t\tif (ops.length === 0) continue;\n\t\t\tthis.writes.push({ type: \"doc\", ref, ops });\n\t\t\tthis.changes.docs.push({ ref, ops });\n\t\t\tthis.docs.noteOps(ref, ops);\n\t\t}\n\t\treturn this.writes;\n\t}\n\t/** Every wrapper handed out by this transaction throws from now on. */\n\trevoke() {\n\t\tthis.membrane.revoke();\n\t}\n\tevictTouched() {\n\t\tfor (const { ref } of this.touched.values()) this.docs.evict(ref);\n\t}\n}\n\n/** A plain JSON copy: no document proxy, no live reference, strict JSON (throws on cycles/BigInt). */\nconst plain = <T>(v: T): T => JSON.parse(JSON.stringify(v)) as T;\n\nfunction validateEntry(e: Entry) {\n\tif (e.head !== undefined && e.head > e.id) throw new Error(`entry ${e.id}: head ${e.head} is in the future`);\n\tif (e.model !== undefined)\n\t\tfor (const m of e.model)\n\t\t\tif (typeof m !== \"object\" || m === null || typeof (m as { role?: unknown }).role !== \"string\")\n\t\t\t\tthrow new Error(`entry ${e.id}: malformed model message`);\n\tJSON.stringify(e); // strict JSON: throws on BigInt/cycles; undefined is dropped by construction\n}\n\n// ---------------------------------------------------------------------------\n// Session: the line.\n// ---------------------------------------------------------------------------\n\nconst LINE_KEY = createContextKey<true>(\"pico3.session.line\");\nconst owners = new WeakMap<Storage, Session>();\n\nexport class NestedLineOperation extends Error {\n\tconstructor() {\n\t\tsuper(\"nested line operation\");\n\t\tthis.name = \"NestedLineOperation\";\n\t}\n}\n\nexport interface CommitResult<T> {\n\tvalue: T;\n\tseq: Seq | undefined;\n\tchanges: CommitChanges;\n}\n\nexport interface TransactionControl {\n\tsetTask(task: Task): void;\n}\n\nexport class Session {\n\treadonly storage: Storage;\n\treadonly kinds: ReadonlyMap<string, AnyKind>;\n\treadonly namespaces: ReadonlyMap<string, NamespaceRegistration>;\n\tprivate tail: Promise<unknown> = Promise.resolve();\n\tprivate closed = false;\n\tprivate fault: Faulted | undefined;\n\tprivate readonly now: () => number;\n\treadonly docs: Docs;\n\treadonly defaults: Defaults;\n\treadonly liveTasks = new Map<Id, Task>();\n\t/** Owner/parent graph, loaded at open and maintained on every commit. */\n\treadonly conversationRecords = new Map<Id, Conversation>();\n\treadonly lineListeners = new Set<(result: CommitResult<unknown>) => void>();\n\treadonly listeners = new Set<(r: CommitResult<unknown>) => void>();\n\t/** Errors from listeners and other post-commit work; never surface to the writer. */\n\tonReport: (error: unknown) => void = () => {};\n\n\tconstructor(\n\t\tstorage: Storage,\n\t\tkinds: ReadonlyMap<string, AnyKind>,\n\t\tnamespaces: ReadonlyMap<string, NamespaceRegistration>,\n\t\tnow: () => number = Date.now,\n\t) {\n\t\tthis.storage = storage;\n\t\tthis.now = now;\n\t\tthis.kinds = kinds;\n\t\tthis.namespaces = namespaces;\n\t\tif (owners.has(storage)) throw new Error(\"this Storage already has an owning Session\");\n\t\tthis.defaults = new Defaults(kinds.values());\n\t\tthis.docs = new Docs(storage, this.defaults);\n\t\towners.set(storage, this);\n\t}\n\n\treadonly index: ConversationIndex = {\n\t\tget: (id) => this.conversationRecords.get(id),\n\t\tsubtree: (root) => {\n\t\t\tconst out = new Set<Id>([root]);\n\t\t\tlet grew = true;\n\t\t\twhile (grew) {\n\t\t\t\tgrew = false;\n\t\t\t\tfor (const c of this.conversationRecords.values()) {\n\t\t\t\t\tif (out.has(c.id) || c.owner === undefined) continue;\n\t\t\t\t\tconst ownerTask = this.liveTasks.get(c.owner) ?? this.ownerTaskCache.get(c.owner);\n\t\t\t\t\tif (ownerTask && out.has(ownerTask.conversationId)) {\n\t\t\t\t\t\tout.add(c.id);\n\t\t\t\t\t\tgrew = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\t\tancestors: (id) => {\n\t\t\tconst chain: Id[] = [];\n\t\t\tlet c = this.conversationRecords.get(id);\n\t\t\twhile (c?.owner !== undefined) {\n\t\t\t\tconst t = this.liveTasks.get(c.owner) ?? this.ownerTaskCache.get(c.owner);\n\t\t\t\tif (t === undefined) break;\n\t\t\t\tchain.unshift(t.conversationId);\n\t\t\t\tc = this.conversationRecords.get(t.conversationId);\n\t\t\t}\n\t\t\treturn chain;\n\t\t},\n\t};\n\t/** Owner tasks that are terminal but whose conversations still exist (ancestry after reopen). */\n\treadonly ownerTaskCache = new Map<Id, Task>();\n\n\tasync commit<T>(\n\t\tinvoker: Invoker,\n\t\tfn: (tx: TxImpl, ctx: Context, control: TransactionControl) => T | Promise<T>,\n\t\tctx: Context,\n\t\topts: { docs?: DocRef[]; closing?: boolean } = {},\n\t): Promise<CommitResult<T>> {\n\t\tctx.abortSignal?.throwIfAborted();\n\t\tconst authority = Object.freeze({ ...invoker }) as Invoker;\n\t\tconst result = await this.enter(ctx, async (lineCtx) => {\n\t\t\tthis.assertUsable();\n\t\t\tlineCtx.abortSignal?.throwIfAborted();\n\t\t\tif (authority.type === \"task\") {\n\t\t\t\t// A captured runtime cannot write after its invocation returned, after terminalization, or after a mark (run mode).\n\t\t\t\tif (!authority.token.alive) throw new Forbidden(\"commit from a finished invocation\");\n\t\t\t\tconst live = this.liveTasks.get(authority.id);\n\t\t\t\tif (live === undefined) throw new Forbidden(\"commit from a task that is not live\");\n\t\t\t\tif (authority.mode === \"run\" && live.abort === true)\n\t\t\t\t\tthrow new Forbidden(\"commit from a marked run invocation\");\n\t\t\t}\n\t\t\tconst tx = new TxImpl(\n\t\t\t\tauthority,\n\t\t\t\tthis.storage,\n\t\t\t\tthis.docs,\n\t\t\t\tthis.defaults,\n\t\t\t\tthis.kinds,\n\t\t\t\tthis.namespaces,\n\t\t\t\tthis.liveTasks,\n\t\t\t\tthis.index,\n\t\t\t\tthis.now,\n\t\t\t\tlineCtx,\n\t\t\t);\n\t\t\ttx.closing = opts.closing === true;\n\t\t\tconst refs: DocRef[] = [{ doc: \"session\" }, ...(opts.docs ?? [])];\n\t\t\tif (authority.type === \"task\")\n\t\t\t\trefs.push(\n\t\t\t\t\t{ doc: \"rewindable\", conversationId: authority.conversationId },\n\t\t\t\t\t{ doc: \"sticky\", conversationId: authority.conversationId },\n\t\t\t\t);\n\t\t\tlet persisted = false;\n\t\t\ttry {\n\t\t\t\tawait tx.preload(refs);\n\t\t\t\tlet value: T;\n\t\t\t\ttry {\n\t\t\t\t\tvalue = await fn(tx.callbackSurface(), lineCtx, {\n\t\t\t\t\t\tsetTask: (task) => tx.setTaskInternalForControl(task),\n\t\t\t\t\t});\n\t\t\t\t} finally {\n\t\t\t\t\ttx.closeSurface();\n\t\t\t\t}\n\t\t\t\tawait tx.preload(\n\t\t\t\t\t[...new Set(tx.changes.tasks.map((task) => task.conversationId))].map((conversationId) => ({\n\t\t\t\t\t\tdoc: \"sticky\" as const,\n\t\t\t\t\t\tconversationId,\n\t\t\t\t\t})),\n\t\t\t\t);\n\t\t\t\tconst writes = tx.finish();\n\t\t\t\tlet seq: Seq | undefined;\n\t\t\t\tif (writes.length > 0 || tx.changes.events.length > 0) {\n\t\t\t\t\tpersisted = true;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tseq = await this.storage.commit(writes, withoutAbortSignal(lineCtx));\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.fault = new Faulted(error);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.storage.close(withoutAbortSignal(lineCtx));\n\t\t\t\t\t\t\towners.delete(this.storage);\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\tthrow this.fault;\n\t\t\t\t\t}\n\t\t\t\t\tthis.applyChanges(tx.changes);\n\t\t\t\t}\n\t\t\t\tconst result = { value, seq, changes: tx.changes } as CommitResult<T>;\n\t\t\t\tif (seq !== undefined) {\n\t\t\t\t\tfor (const listener of this.lineListeners) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlistener(result);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tthis.onReport(error);\n\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} catch (error) {\n\t\t\t\tif (!persisted) tx.evictTouched();\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\ttx.revoke();\n\t\t\t}\n\t\t});\n\t\tif (result.seq !== undefined)\n\t\t\tfor (const l of this.listeners) {\n\t\t\t\ttry {\n\t\t\t\t\tl(result);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.onReport(error);\n\t\t\t\t}\n\t\t\t}\n\t\treturn result;\n\t}\n\n\t/** Read-only line operation without a transaction. */\n\tread<T>(fn: (storage: Storage, ctx: Context) => Promise<T>, ctx: Context): Promise<T> {\n\t\treturn this.enter(ctx, (lineCtx) => {\n\t\t\tthis.assertUsable();\n\t\t\treturn fn(this.storage, lineCtx);\n\t\t});\n\t}\n\t/** Generic line operation (waiter registration and asynchronous lifecycle work). */\n\tonLine<T>(fn: (ctx: Context) => T | Promise<T>, ctx: Context): Promise<T> {\n\t\treturn this.enter(ctx, (lineCtx) => {\n\t\t\tthis.assertUsable();\n\t\t\treturn fn(lineCtx);\n\t\t});\n\t}\n\n\tstatic readonly STICKY_BASE_BUDGET = 256 * 1024;\n\n\t/** After a task terminalizes: retire its slot; base + truncate when idle or over budget. Truncation runs on the line. */\n\tasync retire(task: Task, ctx: Context) {\n\t\tconst ref: DocRef = { doc: \"sticky\", conversationId: task.conversationId };\n\t\tconst idle = ![...this.liveTasks.values()].some((t) => t.conversationId === task.conversationId);\n\t\tconst over = (this.docs.sinceBase.get(docKey(ref)) ?? 0) > Session.STICKY_BASE_BUDGET;\n\t\tawait this.commit(\n\t\t\t{ type: \"kernel\" },\n\t\t\t(tx) => {\n\t\t\t\tdelete tx.sticky(task.conversationId).tasks[task.id];\n\t\t\t\tif (idle || over) this.docs.requestBase(ref);\n\t\t\t},\n\t\t\tctx,\n\t\t\t{ docs: [ref] },\n\t\t);\n\t\tif (idle || over) await this.enter(ctx, (lineCtx) => this.storage.truncate(ref, withoutAbortSignal(lineCtx)));\n\t}\n\n\tasync fork(parentId: Id, at: Id | \"start\", spec: Omit<ConversationSpec, \"parent\">, ctx: Context): Promise<Id> {\n\t\tconst inherited =\n\t\t\tat === \"start\"\n\t\t\t\t? undefined\n\t\t\t\t: await this.read(async (storage, lineCtx) => {\n\t\t\t\t\t\tconst [entry] = await storage.scanEntries(\n\t\t\t\t\t\t\t{ conversationId: parentId, before: at + 1, limit: 1 },\n\t\t\t\t\t\t\tlineCtx,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (entry?.id !== at) throw new Error(`entry ${at} is not visible from conversation ${parentId}`);\n\t\t\t\t\t\treturn storage.docAsOf(parentId, at, lineCtx) as Promise<RewindableState | undefined>;\n\t\t\t\t\t}, ctx);\n\t\tconst rawOverrides = structuredClone(spec.rewindable ?? {});\n\t\tdelete rawOverrides.plugins;\n\t\tconst overrides = this.defaults.validateSeed(\"rewindable\", rawOverrides);\n\t\tconst rewindable =\n\t\t\tinherited === undefined\n\t\t\t\t? overrides\n\t\t\t\t: { ...inherited, ...overrides, plugins: structuredClone(inherited.plugins) };\n\t\tconst r = await this.commit(\n\t\t\t{ type: \"kernel\" },\n\t\t\t(tx) =>\n\t\t\t\ttx.createForkConversation({\n\t\t\t\t\tparent: { conversationId: parentId, at },\n\t\t\t\t\trewindable,\n\t\t\t\t\tsticky: spec.sticky,\n\t\t\t\t\tsections: spec.sections,\n\t\t\t\t}),\n\t\t\tctx,\n\t\t);\n\t\treturn r.value;\n\t}\n\n\tasync close(ctx: Context) {\n\t\tawait this.enter(ctx, async (lineCtx) => {\n\t\t\tif (this.closed) return;\n\t\t\tawait this.storage.close(withoutAbortSignal(lineCtx));\n\t\t\tthis.closed = true;\n\t\t\towners.delete(this.storage);\n\t\t});\n\t}\n\n\tloadedDocument(ref: DocRef): JsonObject | undefined {\n\t\treturn this.docs.loaded(ref);\n\t}\n\n\tprivate applyChanges(e: CommitChanges) {\n\t\tfor (const t of e.tasks) {\n\t\t\tif (t.status === \"terminal\") {\n\t\t\t\tthis.liveTasks.delete(t.id);\n\t\t\t\tif (t.owns.length) this.ownerTaskCache.set(t.id, t);\n\t\t\t} else this.liveTasks.set(t.id, t);\n\t\t}\n\t\tfor (const c of e.conversations) this.conversationRecords.set(c.id, c);\n\t}\n\n\tprivate enter<T>(ctx: Context, op: (ctx: Context) => T | Promise<T>): Promise<T> {\n\t\tif (ctx.value(LINE_KEY) === true) return Promise.reject(new NestedLineOperation());\n\t\tconst previous = this.tail;\n\t\tlet release!: () => void;\n\t\tthis.tail = new Promise<void>((resolve) => {\n\t\t\trelease = resolve;\n\t\t});\n\t\treturn (async () => {\n\t\t\tawait previous;\n\t\t\ttry {\n\t\t\t\treturn await op(withContextValue(LINE_KEY, true, ctx));\n\t\t\t} finally {\n\t\t\t\trelease();\n\t\t\t}\n\t\t})();\n\t}\n\n\tprivate assertUsable() {\n\t\tif (this.fault !== undefined) throw this.fault;\n\t\tif (this.closed) throw new Closed();\n\t}\n}\n\nexport type { TxImpl };\n"]}
@@ -0,0 +1,126 @@
1
+ import type { Context } from "@earendil-works/chord";
2
+ import type { AnyToolDeclaration, ContextEdit, CoreTx, Entry, HookInfo, HookResult, Id, JsonValue, RewindableState, Runtime, Stored, SystemMessage } from "./types.ts";
3
+ export interface SystemSection<T extends JsonValue = JsonValue> {
4
+ readonly key: string;
5
+ render(value: T): string;
6
+ }
7
+ export declare function defineSystemSection<T extends JsonValue>(definition: {
8
+ key: string;
9
+ render(value: T): string;
10
+ }): SystemSection<T>;
11
+ export type EnvironmentInfo = {
12
+ cwd: string;
13
+ };
14
+ export type SkillInfo = {
15
+ name: string;
16
+ description: string;
17
+ };
18
+ export declare const systemSections: {
19
+ readonly identity: SystemSection<string>;
20
+ readonly environment: SystemSection<EnvironmentInfo>;
21
+ readonly skills: SystemSection<SkillInfo[]>;
22
+ };
23
+ /** Section seed for a new conversation (§8.1): set with a checked pair, or remove an inherited key. */
24
+ export type SectionSeed = {
25
+ key: string;
26
+ value: JsonValue;
27
+ } | {
28
+ key: string;
29
+ remove: true;
30
+ };
31
+ export declare const sectionSeed: <T extends import("@earendil-works/chord").JsonValue>(section: SystemSection<T>, value: T) => SectionSeed;
32
+ export declare const removeSection: (key: string) => SectionSeed;
33
+ export type SectionRecord = {
34
+ key: string;
35
+ action: "set";
36
+ value: JsonValue;
37
+ rendered: string;
38
+ } | {
39
+ key: string;
40
+ action: "remove";
41
+ };
42
+ export type SystemEntryData = {
43
+ baseline?: true;
44
+ sections: SectionRecord[];
45
+ };
46
+ /** A metadata-only delta has `model: []`. */
47
+ export type SystemEntry = Entry & {
48
+ kind: "pi.system";
49
+ model: [] | [Stored<SystemMessage>];
50
+ data: SystemEntryData;
51
+ };
52
+ type SectionState = {
53
+ value: JsonValue;
54
+ rendered: string;
55
+ };
56
+ export type Canonical = Map<string, SectionState>;
57
+ export declare function foldCanonical(reads: Pick<CoreTx, "scanEntries">, conversationId: Id): Promise<{
58
+ canonical: Canonical;
59
+ newestManaged: Id | null;
60
+ newestBaseline: Id | null;
61
+ }>;
62
+ export interface SystemSectionDraft {
63
+ get<T extends JsonValue>(section: SystemSection<T>): T | undefined;
64
+ set<T extends JsonValue>(section: SystemSection<T>, value: T): void;
65
+ delete(section: {
66
+ key: string;
67
+ }): void;
68
+ wrap<T extends JsonValue>(section: SystemSection<T>, transform: (rendered: string) => string): void;
69
+ }
70
+ export interface SectionRegistry {
71
+ readonly map: ReadonlyMap<string, SystemSection>;
72
+ readonly revision: number;
73
+ }
74
+ export interface ToolRegistry {
75
+ readonly map: ReadonlyMap<string, AnyToolDeclaration>;
76
+ readonly revision: number;
77
+ }
78
+ /** Snapshot S. Compared field by field before the `prepared` commit. */
79
+ export interface PreparationSnapshot {
80
+ newestManaged: Id | null;
81
+ newestBaseline: Id | null;
82
+ newestHead: Id | null;
83
+ settings: {
84
+ model?: JsonValue;
85
+ thinkingLevel: JsonValue;
86
+ selectedTools: string[];
87
+ profile: JsonValue;
88
+ };
89
+ sectionsRev: number;
90
+ toolsRev: number;
91
+ }
92
+ export declare const sameSnapshot: (a: PreparationSnapshot, b: PreparationSnapshot) => boolean;
93
+ export declare function takeSnapshot(tx: Pick<CoreTx, "scanEntries" | "newestEntry" | "snapshot" | "conversation">, conversationId: Id, sections: SectionRegistry, tools: ToolRegistry): Promise<{
94
+ snapshot: PreparationSnapshot;
95
+ canonical: Canonical;
96
+ seed: readonly SectionSeed[] | undefined;
97
+ }>;
98
+ export interface SystemInstructionsHooks {
99
+ /** Edit the draft; optionally override the tool loadout (last override wins). A throwing handler's edits are rolled back. */
100
+ systemInstructions(input: {
101
+ sections: SystemSectionDraft;
102
+ config: PreparationSnapshot["settings"];
103
+ tools: readonly AnyToolDeclaration[];
104
+ }, info: HookInfo, ctx: Context): HookResult<{
105
+ tools?: readonly AnyToolDeclaration[];
106
+ }>;
107
+ }
108
+ /** Off the line: seed the draft, run handlers, freeze. */
109
+ export declare function prepareDraft(rt: Pick<Runtime<SystemInstructionsHooks>, "hooks" | "tools">, sections: SectionRegistry, canonical: Canonical, seed: readonly SectionSeed[] | undefined, settings: PreparationSnapshot["settings"], onReport: (m: string) => void, ctx: Context): Promise<{
110
+ desired: Canonical;
111
+ tools: readonly AnyToolDeclaration[];
112
+ }>;
113
+ /** On the line, in the `prepared` commit: diff desired against canonical; baseline if a head intervened. */
114
+ export declare function planManagedEntry(tx: Pick<CoreTx, "context">, conversationId: Id, snapshot: PreparationSnapshot, canonical: Canonical, desired: Canonical, tools: readonly AnyToolDeclaration[], now: number): Promise<{
115
+ data: SystemEntryData;
116
+ model: [] | [Stored<SystemMessage>];
117
+ edits?: ContextEdit[];
118
+ } | undefined>;
119
+ /** Tools effective in a projected request: fold toolsAdded/toolsRemoved across its SystemMessages. */
120
+ export declare function effectiveTools(messages: readonly {
121
+ role: string;
122
+ }[]): {
123
+ name: string;
124
+ }[];
125
+ export type { RewindableState, Runtime };
126
+ //# sourceMappingURL=system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../src/harness/pico3/system.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context } from \"@earendil-works/chord\";\nimport type {\n\tAnyToolDeclaration,\n\tContextEdit,\n\tCoreTx,\n\tEntry,\n\tHookInfo,\n\tHookResult,\n\tId,\n\tJsonValue,\n\tRewindableState,\n\tRuntime,\n\tStored,\n\tSystemMessage,\n} from \"./types.ts\";\n\n// ---------------------------------------------------------------------------\n// Sections (pico §12.1). A section is a stable key plus a pure renderer. Only\n// keys, payloads and rendered text are stored; never renderers.\n// ---------------------------------------------------------------------------\n\nexport interface SystemSection<T extends JsonValue = JsonValue> {\n\treadonly key: string;\n\trender(value: T): string;\n}\nexport function defineSystemSection<T extends JsonValue>(definition: {\n\tkey: string;\n\trender(value: T): string;\n}): SystemSection<T> {\n\treturn Object.freeze(definition);\n}\n\nexport type EnvironmentInfo = { cwd: string };\nexport type SkillInfo = { name: string; description: string };\nexport const systemSections = {\n\tidentity: defineSystemSection<string>({ key: \"identity\", render: (v) => v }),\n\tenvironment: defineSystemSection<EnvironmentInfo>({\n\t\tkey: \"environment\",\n\t\trender: (v) => `Working directory: ${v.cwd}`,\n\t}),\n\tskills: defineSystemSection<SkillInfo[]>({\n\t\tkey: \"skills\",\n\t\trender: (v) => v.map((s) => `- ${s.name}: ${s.description}`).join(\"\\n\"),\n\t}),\n} as const;\n\n/** Section seed for a new conversation (§8.1): set with a checked pair, or remove an inherited key. */\nexport type SectionSeed = { key: string; value: JsonValue } | { key: string; remove: true };\nexport const sectionSeed = <T extends JsonValue>(section: SystemSection<T>, value: T): SectionSeed => ({\n\tkey: section.key,\n\tvalue,\n});\nexport const removeSection = (key: string): SectionSeed => ({ key, remove: true });\n\n// ---------------------------------------------------------------------------\n// The managed entry (§12.3)\n// ---------------------------------------------------------------------------\n\nexport type SectionRecord =\n\t| { key: string; action: \"set\"; value: JsonValue; rendered: string }\n\t| { key: string; action: \"remove\" };\nexport type SystemEntryData = { baseline?: true; sections: SectionRecord[] };\n/** A metadata-only delta has `model: []`. */\nexport type SystemEntry = Entry & { kind: \"pi.system\"; model: [] | [Stored<SystemMessage>]; data: SystemEntryData };\n\n// ---------------------------------------------------------------------------\n// Canonical state (§12.4): fold the fork-visible managed entries from the\n// newest baseline forward. Uses the kind scan; never depends on heads or edits.\n// ---------------------------------------------------------------------------\n\ntype SectionState = { value: JsonValue; rendered: string };\nexport type Canonical = Map<string, SectionState>; // insertion order is canonical order\n\nexport async function foldCanonical(\n\treads: Pick<CoreTx, \"scanEntries\">,\n\tconversationId: Id,\n): Promise<{ canonical: Canonical; newestManaged: Id | null; newestBaseline: Id | null }> {\n\tconst managed: SystemEntry[] = [];\n\tlet before: Id | undefined;\n\tlet baseline: Id | null = null;\n\tscan: for (;;) {\n\t\tconst page = await reads.scanEntries({\n\t\t\tconversationId,\n\t\t\tkind: \"pi.system\",\n\t\t\tlimit: 64,\n\t\t\t...(before === undefined ? {} : { before }),\n\t\t});\n\t\tfor (const e of page) {\n\t\t\tmanaged.push(e as SystemEntry);\n\t\t\tif ((e as SystemEntry).data.baseline) {\n\t\t\t\tbaseline = e.id;\n\t\t\t\tbreak scan;\n\t\t\t}\n\t\t}\n\t\tif (page.length < 64) break;\n\t\tbefore = page[page.length - 1]!.id;\n\t}\n\tmanaged.reverse();\n\tconst canonical: Canonical = new Map();\n\tfor (const e of managed)\n\t\tfor (const r of e.data.sections)\n\t\t\tr.action === \"remove\"\n\t\t\t\t? canonical.delete(r.key)\n\t\t\t\t: canonical.set(r.key, { value: r.value, rendered: r.rendered });\n\treturn { canonical, newestManaged: managed[managed.length - 1]?.id ?? null, newestBaseline: baseline };\n}\n\n// ---------------------------------------------------------------------------\n// Draft (§12.2): what `systemInstructions` handlers edit.\n// ---------------------------------------------------------------------------\n\nexport interface SystemSectionDraft {\n\tget<T extends JsonValue>(section: SystemSection<T>): T | undefined; // owned copy\n\tset<T extends JsonValue>(section: SystemSection<T>, value: T): void; // existing key keeps position; new key appends\n\tdelete(section: { key: string }): void;\n\twrap<T extends JsonValue>(section: SystemSection<T>, transform: (rendered: string) => string): void; // preparation-local\n}\n\nclass Draft implements SystemSectionDraft {\n\tvalues = new Map<string, JsonValue>();\n\twrappers = new Map<string, ((r: string) => string)[]>();\n\ttouched = new Set<string>();\n\tconstructor(seed: Canonical) {\n\t\tfor (const [k, s] of seed) this.values.set(k, s.value);\n\t}\n\tget<T extends JsonValue>(section: SystemSection<T>) {\n\t\tconst v = this.values.get(section.key);\n\t\treturn v === undefined ? undefined : (structuredClone(v) as T);\n\t}\n\tset<T extends JsonValue>(section: SystemSection<T>, value: T) {\n\t\tthis.values.set(section.key, value);\n\t\tthis.touched.add(section.key);\n\t}\n\tdelete(section: { key: string }) {\n\t\tthis.values.delete(section.key);\n\t\tthis.wrappers.delete(section.key);\n\t\tthis.touched.add(section.key);\n\t}\n\twrap<T extends JsonValue>(section: SystemSection<T>, transform: (r: string) => string) {\n\t\t(this.wrappers.get(section.key) ?? this.wrappers.set(section.key, []).get(section.key)!).push(transform);\n\t\tthis.touched.add(section.key);\n\t}\n\tsnapshot() {\n\t\treturn {\n\t\t\tvalues: new Map(this.values),\n\t\t\twrappers: new Map([...this.wrappers].map(([k, v]) => [k, [...v]])),\n\t\t\ttouched: new Set(this.touched),\n\t\t};\n\t}\n\trestore(s: ReturnType<Draft[\"snapshot\"]>) {\n\t\tthis.values = s.values;\n\t\tthis.wrappers = s.wrappers;\n\t\tthis.touched = s.touched;\n\t}\n}\n\n/** Render touched sections (wrappers apply after rendering, in registration order); untouched keep their stored text. */\nfunction freeze(draft: Draft, canonical: Canonical, registry: ReadonlyMap<string, SystemSection>): Canonical {\n\tconst desired: Canonical = new Map();\n\tfor (const [key, value] of draft.values) {\n\t\tif (!draft.touched.has(key)) {\n\t\t\tconst prev = canonical.get(key);\n\t\t\tif (prev) desired.set(key, prev);\n\t\t\tcontinue;\n\t\t}\n\t\tconst def = registry.get(key);\n\t\tif (def === undefined) continue; // unregistered: cannot re-render; treated as removed\n\t\tlet rendered = (def as SystemSection).render(value);\n\t\tfor (const w of draft.wrappers.get(key) ?? []) rendered = w(rendered);\n\t\tdesired.set(key, { value, rendered });\n\t}\n\treturn desired;\n}\n\n// ---------------------------------------------------------------------------\n// Preparation (§12.5)\n// ---------------------------------------------------------------------------\n\nexport interface SectionRegistry {\n\treadonly map: ReadonlyMap<string, SystemSection>;\n\treadonly revision: number;\n}\nexport interface ToolRegistry {\n\treadonly map: ReadonlyMap<string, AnyToolDeclaration>;\n\treadonly revision: number;\n}\n\n/** Snapshot S. Compared field by field before the `prepared` commit. */\nexport interface PreparationSnapshot {\n\tnewestManaged: Id | null;\n\tnewestBaseline: Id | null;\n\tnewestHead: Id | null;\n\tsettings: { model?: JsonValue; thinkingLevel: JsonValue; selectedTools: string[]; profile: JsonValue };\n\tsectionsRev: number;\n\ttoolsRev: number;\n}\nexport const sameSnapshot = (a: PreparationSnapshot, b: PreparationSnapshot) => JSON.stringify(a) === JSON.stringify(b);\n\nexport async function takeSnapshot(\n\ttx: Pick<CoreTx, \"scanEntries\" | \"newestEntry\" | \"snapshot\" | \"conversation\">,\n\tconversationId: Id,\n\tsections: SectionRegistry,\n\ttools: ToolRegistry,\n): Promise<{ snapshot: PreparationSnapshot; canonical: Canonical; seed: readonly SectionSeed[] | undefined }> {\n\tconst { canonical, newestManaged, newestBaseline } = await foldCanonical(tx, conversationId);\n\tconst head = await tx.newestEntry(conversationId, { withHead: true });\n\tconst r = tx.snapshot({ doc: \"rewindable\", conversationId }); // a plain copy: the snapshot outlives this transaction\n\tconst conv = await tx.conversation(conversationId);\n\treturn {\n\t\tsnapshot: {\n\t\t\tnewestManaged,\n\t\t\tnewestBaseline,\n\t\t\tnewestHead: head?.id ?? null,\n\t\t\tsettings: {\n\t\t\t\t...(r.model === undefined ? {} : { model: r.model }),\n\t\t\t\tthinkingLevel: r.thinkingLevel,\n\t\t\t\tselectedTools: [...r.selectedTools],\n\t\t\t\tprofile: r.profile,\n\t\t\t},\n\t\t\tsectionsRev: sections.revision,\n\t\t\ttoolsRev: tools.revision,\n\t\t},\n\t\tcanonical,\n\t\tseed: newestManaged === null ? conv?.sections : undefined, // §8.1: the seed applies while there is no local managed entry\n\t};\n}\n\nexport interface SystemInstructionsHooks {\n\t/** Edit the draft; optionally override the tool loadout (last override wins). A throwing handler's edits are rolled back. */\n\tsystemInstructions(\n\t\tinput: {\n\t\t\tsections: SystemSectionDraft;\n\t\t\tconfig: PreparationSnapshot[\"settings\"];\n\t\t\ttools: readonly AnyToolDeclaration[];\n\t\t},\n\t\tinfo: HookInfo,\n\t\tctx: Context,\n\t): HookResult<{ tools?: readonly AnyToolDeclaration[] }>;\n}\n\n/** Off the line: seed the draft, run handlers, freeze. */\nexport async function prepareDraft(\n\trt: Pick<Runtime<SystemInstructionsHooks>, \"hooks\" | \"tools\">,\n\tsections: SectionRegistry,\n\tcanonical: Canonical,\n\tseed: readonly SectionSeed[] | undefined,\n\tsettings: PreparationSnapshot[\"settings\"],\n\tonReport: (m: string) => void,\n\tctx: Context,\n): Promise<{ desired: Canonical; tools: readonly AnyToolDeclaration[] }> {\n\tconst draft = new Draft(canonical);\n\tfor (const s of seed ?? [])\n\t\t\"remove\" in s ? draft.delete({ key: s.key }) : draft.set({ key: s.key, render: () => \"\" }, s.value);\n\n\tconst defaultTools: AnyToolDeclaration[] = [];\n\tfor (const name of settings.selectedTools) {\n\t\tconst t = rt.tools.get(name);\n\t\tt ? defaultTools.push(t) : onReport(`selected tool ${name} is not registered`);\n\t}\n\tlet tools: readonly AnyToolDeclaration[] = defaultTools;\n\tfor (const binding of rt.hooks.handlers()) {\n\t\tconst before = draft.snapshot();\n\t\ttry {\n\t\t\tconst out = await binding.handlers.systemInstructions?.(\n\t\t\t\t{ sections: draft, config: settings, tools: defaultTools },\n\t\t\t\tbinding.api,\n\t\t\t\tctx,\n\t\t\t);\n\t\t\tif (out?.tools) tools = out.tools;\n\t\t} catch (error) {\n\t\t\tif (ctx.abortSignal?.aborted) throw error;\n\t\t\tdraft.restore(before); // collect / skip: this handler's edits are rolled back\n\t\t\tonReport(String(error));\n\t\t}\n\t}\n\treturn { desired: freeze(draft, canonical, sections.map), tools };\n}\n\n/** On the line, in the `prepared` commit: diff desired against canonical; baseline if a head intervened. */\nexport async function planManagedEntry(\n\ttx: Pick<CoreTx, \"context\">,\n\tconversationId: Id,\n\tsnapshot: PreparationSnapshot,\n\tcanonical: Canonical,\n\tdesired: Canonical,\n\ttools: readonly AnyToolDeclaration[],\n\tnow: number,\n): Promise<{ data: SystemEntryData; model: [] | [Stored<SystemMessage>]; edits?: ContextEdit[] } | undefined> {\n\t// §12.4: no managed history at all → first preparation appends a full baseline; and a usable\n\t// baseline must follow the newest head.\n\tconst needBaseline =\n\t\tsnapshot.newestManaged === null ||\n\t\t(snapshot.newestHead !== null &&\n\t\t\t(snapshot.newestBaseline === null || snapshot.newestHead > snapshot.newestBaseline));\n\tconst toolOf = (t: AnyToolDeclaration) => ({\n\t\tname: t.name,\n\t\tdescription: t.description,\n\t\tparameters: structuredClone(t.parameters) as Stored<SystemMessage>[\"toolsAdded\"] extends (infer X)[] | undefined\n\t\t\t? X extends { parameters: infer PP }\n\t\t\t\t? PP\n\t\t\t\t: never\n\t\t\t: never,\n\t});\n\n\t// Previous effective tools: those declared by the newest managed entry chain (we recompute from canonical's owner: the tail message).\n\tconst { messages } = await tx.context(conversationId);\n\tconst previous = new Map<string, { name: string }>();\n\tfor (const m of messages)\n\t\tif (m.role === \"system\") {\n\t\t\tfor (const t of (m as SystemMessage).toolsRemoved ?? []) previous.delete(t.name);\n\t\t\tfor (const t of (m as SystemMessage).toolsAdded ?? []) previous.set(t.name, t);\n\t\t}\n\n\tif (needBaseline) {\n\t\tconst sections: SectionRecord[] = [...desired].map(([key, s]) => ({\n\t\t\tkey,\n\t\t\taction: \"set\",\n\t\t\tvalue: s.value,\n\t\t\trendered: s.rendered,\n\t\t}));\n\t\tconst content = sections.map((s) => (s.action === \"set\" ? `## ${s.key}\\n${s.rendered}` : \"\")).join(\"\\n\\n\");\n\t\tconst { entries } = await tx.context(conversationId);\n\t\tconst edits: ContextEdit[] = entries\n\t\t\t.filter((e: Entry) => e.kind === \"pi.system\" && e.id > (snapshot.newestHead ?? 0))\n\t\t\t.map((e: Entry) => ({ target: e.id, action: \"omit\" as const }));\n\t\tconst message = {\n\t\t\trole: \"system\",\n\t\t\tcontent,\n\t\t\ttoolsAdded: tools.map(toolOf),\n\t\t\ttimestamp: now,\n\t\t} as Stored<SystemMessage>;\n\t\treturn { data: { baseline: true, sections }, model: [message], ...(edits.length ? { edits } : {}) };\n\t}\n\n\tconst changed: SectionRecord[] = [];\n\tfor (const [key, s] of desired) {\n\t\tconst prev = canonical.get(key);\n\t\tif (!prev || prev.rendered !== s.rendered || JSON.stringify(prev.value) !== JSON.stringify(s.value))\n\t\t\tchanged.push({ key, action: \"set\", value: s.value, rendered: s.rendered });\n\t}\n\tfor (const key of canonical.keys()) if (!desired.has(key)) changed.push({ key, action: \"remove\" });\n\tconst added = tools.filter((t) => !previous.has(t.name));\n\tconst removed = [...previous.values()].filter((p) => !tools.some((t) => t.name === p.name));\n\tif (changed.length === 0 && added.length === 0 && removed.length === 0) return undefined;\n\n\tconst renderChanged = changed.some((s) => s.action === \"remove\" || canonical.get(s.key)?.rendered !== s.rendered);\n\tif (!renderChanged && added.length === 0 && removed.length === 0) return { data: { sections: changed }, model: [] }; // metadata-only delta\n\tconst content = changed\n\t\t.map((s) =>\n\t\t\ts.action === \"set\"\n\t\t\t\t? `The ${s.key} section now reads:\\n${s.rendered}`\n\t\t\t\t: `The ${s.key} section no longer applies.`,\n\t\t)\n\t\t.join(\"\\n\\n\");\n\tconst message = {\n\t\trole: \"system\",\n\t\tcontent,\n\t\t...(added.length ? { toolsAdded: added.map(toolOf) } : {}),\n\t\t...(removed.length ? { toolsRemoved: removed } : {}),\n\t\ttimestamp: now,\n\t} as Stored<SystemMessage>;\n\treturn { data: { sections: changed }, model: [message] };\n}\n\n/** Tools effective in a projected request: fold toolsAdded/toolsRemoved across its SystemMessages. */\nexport function effectiveTools(messages: readonly { role: string }[]): { name: string }[] {\n\tconst tools = new Map<string, { name: string }>();\n\tfor (const m of messages)\n\t\tif (m.role === \"system\") {\n\t\t\tfor (const t of (m as SystemMessage).toolsRemoved ?? []) tools.delete(t.name);\n\t\t\tfor (const t of (m as SystemMessage).toolsAdded ?? []) tools.set(t.name, t);\n\t\t}\n\treturn [...tools.values()];\n}\n\nexport type { RewindableState, Runtime };\n"]}