@earendil-works/pi-agent-core 0.84.3 → 0.85.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 (343) hide show
  1. package/README.md +4 -0
  2. package/dist/agent-loop.d.ts.map +1 -1
  3. package/dist/agent-loop.js +32 -25
  4. package/dist/agent-loop.js.map +1 -1
  5. package/dist/harness/agent-harness.d.ts +639 -384
  6. package/dist/harness/agent-harness.d.ts.map +1 -1
  7. package/dist/harness/agent-harness.js +5 -251
  8. package/dist/harness/agent-harness.js.map +1 -1
  9. package/dist/harness/compaction/branch-summarization.d.ts +12 -6
  10. package/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
  11. package/dist/harness/compaction/branch-summarization.js +33 -26
  12. package/dist/harness/compaction/branch-summarization.js.map +1 -1
  13. package/dist/harness/compaction/compaction.d.ts +30 -8
  14. package/dist/harness/compaction/compaction.d.ts.map +1 -1
  15. package/dist/harness/compaction/compaction.js +53 -63
  16. package/dist/harness/compaction/compaction.js.map +1 -1
  17. package/dist/harness/config.d.ts +9 -0
  18. package/dist/harness/config.d.ts.map +1 -0
  19. package/dist/harness/config.js +27 -0
  20. package/dist/harness/config.js.map +1 -0
  21. package/dist/harness/context.d.ts +9 -0
  22. package/dist/harness/context.d.ts.map +1 -0
  23. package/dist/harness/context.js +13 -0
  24. package/dist/harness/context.js.map +1 -0
  25. package/dist/harness/env/nodejs.d.ts +24 -28
  26. package/dist/harness/env/nodejs.d.ts.map +1 -1
  27. package/dist/harness/env/nodejs.js +242 -87
  28. package/dist/harness/env/nodejs.js.map +1 -1
  29. package/dist/harness/events.d.ts +20 -38
  30. package/dist/harness/events.d.ts.map +1 -1
  31. package/dist/harness/events.js +240 -55
  32. package/dist/harness/events.js.map +1 -1
  33. package/dist/harness/execution/assistant.d.ts +42 -0
  34. package/dist/harness/execution/assistant.d.ts.map +1 -0
  35. package/dist/harness/execution/assistant.js +82 -0
  36. package/dist/harness/execution/assistant.js.map +1 -0
  37. package/dist/harness/execution/effect-gate.d.ts +22 -0
  38. package/dist/harness/execution/effect-gate.d.ts.map +1 -0
  39. package/dist/harness/execution/effect-gate.js +49 -0
  40. package/dist/harness/execution/effect-gate.js.map +1 -0
  41. package/dist/harness/execution/tools.d.ts +67 -0
  42. package/dist/harness/execution/tools.d.ts.map +1 -0
  43. package/dist/harness/execution/tools.js +121 -0
  44. package/dist/harness/execution/tools.js.map +1 -0
  45. package/dist/harness/hooks.d.ts +38 -0
  46. package/dist/harness/hooks.d.ts.map +1 -0
  47. package/dist/harness/hooks.js +406 -0
  48. package/dist/harness/hooks.js.map +1 -0
  49. package/dist/harness/messages.d.ts +2 -2
  50. package/dist/harness/messages.d.ts.map +1 -1
  51. package/dist/harness/messages.js.map +1 -1
  52. package/dist/harness/prompt-templates.d.ts +3 -2
  53. package/dist/harness/prompt-templates.d.ts.map +1 -1
  54. package/dist/harness/prompt-templates.js +17 -17
  55. package/dist/harness/prompt-templates.js.map +1 -1
  56. package/dist/harness/result.d.ts +93 -0
  57. package/dist/harness/result.d.ts.map +1 -1
  58. package/dist/harness/result.js +40 -0
  59. package/dist/harness/result.js.map +1 -1
  60. package/dist/harness/runtime/drive/boundary.d.ts +28 -0
  61. package/dist/harness/runtime/drive/boundary.d.ts.map +1 -0
  62. package/dist/harness/runtime/drive/boundary.js +170 -0
  63. package/dist/harness/runtime/drive/boundary.js.map +1 -0
  64. package/dist/harness/runtime/drive/checkpoint.d.ts +8 -0
  65. package/dist/harness/runtime/drive/checkpoint.d.ts.map +1 -0
  66. package/dist/harness/runtime/drive/checkpoint.js +133 -0
  67. package/dist/harness/runtime/drive/checkpoint.js.map +1 -0
  68. package/dist/harness/runtime/drive/deferred.d.ts +15 -0
  69. package/dist/harness/runtime/drive/deferred.d.ts.map +1 -0
  70. package/dist/harness/runtime/drive/deferred.js +179 -0
  71. package/dist/harness/runtime/drive/deferred.js.map +1 -0
  72. package/dist/harness/runtime/drive/generation.d.ts +8 -0
  73. package/dist/harness/runtime/drive/generation.d.ts.map +1 -0
  74. package/dist/harness/runtime/drive/generation.js +205 -0
  75. package/dist/harness/runtime/drive/generation.js.map +1 -0
  76. package/dist/harness/runtime/drive/reconcile.d.ts +5 -0
  77. package/dist/harness/runtime/drive/reconcile.d.ts.map +1 -0
  78. package/dist/harness/runtime/drive/reconcile.js +140 -0
  79. package/dist/harness/runtime/drive/reconcile.js.map +1 -0
  80. package/dist/harness/runtime/drive/recovery.d.ts +8 -0
  81. package/dist/harness/runtime/drive/recovery.d.ts.map +1 -0
  82. package/dist/harness/runtime/drive/recovery.js +85 -0
  83. package/dist/harness/runtime/drive/recovery.js.map +1 -0
  84. package/dist/harness/runtime/drive/response.d.ts +23 -0
  85. package/dist/harness/runtime/drive/response.d.ts.map +1 -0
  86. package/dist/harness/runtime/drive/response.js +394 -0
  87. package/dist/harness/runtime/drive/response.js.map +1 -0
  88. package/dist/harness/runtime/drive/retry.d.ts +4 -0
  89. package/dist/harness/runtime/drive/retry.d.ts.map +1 -0
  90. package/dist/harness/runtime/drive/retry.js +37 -0
  91. package/dist/harness/runtime/drive/retry.js.map +1 -0
  92. package/dist/harness/runtime/drive/structural.d.ts +32 -0
  93. package/dist/harness/runtime/drive/structural.d.ts.map +1 -0
  94. package/dist/harness/runtime/drive/structural.js +929 -0
  95. package/dist/harness/runtime/drive/structural.js.map +1 -0
  96. package/dist/harness/runtime/drive/terminal.d.ts +7 -0
  97. package/dist/harness/runtime/drive/terminal.d.ts.map +1 -0
  98. package/dist/harness/runtime/drive/terminal.js +49 -0
  99. package/dist/harness/runtime/drive/terminal.js.map +1 -0
  100. package/dist/harness/runtime/drive/tool-placement.d.ts +14 -0
  101. package/dist/harness/runtime/drive/tool-placement.d.ts.map +1 -0
  102. package/dist/harness/runtime/drive/tool-placement.js +244 -0
  103. package/dist/harness/runtime/drive/tool-placement.js.map +1 -0
  104. package/dist/harness/runtime/drive/tools.d.ts +6 -0
  105. package/dist/harness/runtime/drive/tools.d.ts.map +1 -0
  106. package/dist/harness/runtime/drive/tools.js +449 -0
  107. package/dist/harness/runtime/drive/tools.js.map +1 -0
  108. package/dist/harness/runtime/drive.d.ts +6 -0
  109. package/dist/harness/runtime/drive.d.ts.map +1 -0
  110. package/dist/harness/runtime/drive.js +93 -0
  111. package/dist/harness/runtime/drive.js.map +1 -0
  112. package/dist/harness/runtime/harness.d.ts +59 -0
  113. package/dist/harness/runtime/harness.d.ts.map +1 -0
  114. package/dist/harness/runtime/harness.js +311 -0
  115. package/dist/harness/runtime/harness.js.map +1 -0
  116. package/dist/harness/runtime/index.d.ts +2 -0
  117. package/dist/harness/runtime/index.d.ts.map +1 -0
  118. package/dist/harness/runtime/index.js +2 -0
  119. package/dist/harness/runtime/index.js.map +1 -0
  120. package/dist/harness/runtime/lane.d.ts +101 -0
  121. package/dist/harness/runtime/lane.d.ts.map +1 -0
  122. package/dist/harness/runtime/lane.js +1575 -0
  123. package/dist/harness/runtime/lane.js.map +1 -0
  124. package/dist/harness/runtime/progress.d.ts +15 -0
  125. package/dist/harness/runtime/progress.d.ts.map +1 -0
  126. package/dist/harness/runtime/progress.js +66 -0
  127. package/dist/harness/runtime/progress.js.map +1 -0
  128. package/dist/harness/runtime/reducer.d.ts +5 -0
  129. package/dist/harness/runtime/reducer.d.ts.map +1 -0
  130. package/dist/harness/runtime/reducer.js +240 -0
  131. package/dist/harness/runtime/reducer.js.map +1 -0
  132. package/dist/harness/runtime/restore.d.ts +24 -0
  133. package/dist/harness/runtime/restore.d.ts.map +1 -0
  134. package/dist/harness/runtime/restore.js +117 -0
  135. package/dist/harness/runtime/restore.js.map +1 -0
  136. package/dist/harness/runtime/transcript.d.ts +21 -0
  137. package/dist/harness/runtime/transcript.d.ts.map +1 -0
  138. package/dist/harness/runtime/transcript.js +72 -0
  139. package/dist/harness/runtime/transcript.js.map +1 -0
  140. package/dist/harness/runtime/types.d.ts +105 -0
  141. package/dist/harness/runtime/types.d.ts.map +1 -0
  142. package/dist/harness/runtime/types.js +61 -0
  143. package/dist/harness/runtime/types.js.map +1 -0
  144. package/dist/harness/session/commit.d.ts +53 -0
  145. package/dist/harness/session/commit.d.ts.map +1 -0
  146. package/dist/harness/session/commit.js +57 -0
  147. package/dist/harness/session/commit.js.map +1 -0
  148. package/dist/harness/session/context.d.ts +6 -18
  149. package/dist/harness/session/context.d.ts.map +1 -1
  150. package/dist/harness/session/context.js +31 -49
  151. package/dist/harness/session/context.js.map +1 -1
  152. package/dist/harness/session/fork-policy.d.ts +13 -0
  153. package/dist/harness/session/fork-policy.d.ts.map +1 -0
  154. package/dist/harness/session/fork-policy.js +22 -0
  155. package/dist/harness/session/fork-policy.js.map +1 -0
  156. package/dist/harness/session/fork.d.ts +18 -0
  157. package/dist/harness/session/fork.d.ts.map +1 -0
  158. package/dist/harness/session/fork.js +127 -0
  159. package/dist/harness/session/fork.js.map +1 -0
  160. package/dist/harness/session/in-memory-storage-state.d.ts +39 -0
  161. package/dist/harness/session/in-memory-storage-state.d.ts.map +1 -0
  162. package/dist/harness/session/in-memory-storage-state.js +216 -0
  163. package/dist/harness/session/in-memory-storage-state.js.map +1 -0
  164. package/dist/harness/session/index.d.ts +9 -5
  165. package/dist/harness/session/index.d.ts.map +1 -1
  166. package/dist/harness/session/index.js +7 -4
  167. package/dist/harness/session/index.js.map +1 -1
  168. package/dist/harness/session/jsonl/codec.d.ts +19 -8
  169. package/dist/harness/session/jsonl/codec.d.ts.map +1 -1
  170. package/dist/harness/session/jsonl/codec.js +34 -218
  171. package/dist/harness/session/jsonl/codec.js.map +1 -1
  172. package/dist/harness/session/jsonl/index.d.ts +4 -0
  173. package/dist/harness/session/jsonl/index.d.ts.map +1 -0
  174. package/dist/harness/session/jsonl/index.js +4 -0
  175. package/dist/harness/session/jsonl/index.js.map +1 -0
  176. package/dist/harness/session/jsonl/legacy-v3.d.ts +18 -0
  177. package/dist/harness/session/jsonl/legacy-v3.d.ts.map +1 -0
  178. package/dist/harness/session/jsonl/legacy-v3.js +383 -0
  179. package/dist/harness/session/jsonl/legacy-v3.js.map +1 -0
  180. package/dist/harness/session/jsonl/repo.d.ts +26 -19
  181. package/dist/harness/session/jsonl/repo.d.ts.map +1 -1
  182. package/dist/harness/session/jsonl/repo.js +266 -156
  183. package/dist/harness/session/jsonl/repo.js.map +1 -1
  184. package/dist/harness/session/jsonl/storage.d.ts +39 -41
  185. package/dist/harness/session/jsonl/storage.d.ts.map +1 -1
  186. package/dist/harness/session/jsonl/storage.js +238 -181
  187. package/dist/harness/session/jsonl/storage.js.map +1 -1
  188. package/dist/harness/session/jsonl/types.d.ts +23 -22
  189. package/dist/harness/session/jsonl/types.d.ts.map +1 -1
  190. package/dist/harness/session/jsonl/types.js +2 -1
  191. package/dist/harness/session/jsonl/types.js.map +1 -1
  192. package/dist/harness/session/memory.d.ts +46 -40
  193. package/dist/harness/session/memory.d.ts.map +1 -1
  194. package/dist/harness/session/memory.js +346 -113
  195. package/dist/harness/session/memory.js.map +1 -1
  196. package/dist/harness/session/mutation-line.d.ts +8 -0
  197. package/dist/harness/session/mutation-line.d.ts.map +1 -0
  198. package/dist/harness/session/mutation-line.js +21 -0
  199. package/dist/harness/session/mutation-line.js.map +1 -0
  200. package/dist/harness/session/session.d.ts +78 -46
  201. package/dist/harness/session/session.d.ts.map +1 -1
  202. package/dist/harness/session/session.js +343 -209
  203. package/dist/harness/session/session.js.map +1 -1
  204. package/dist/harness/session/testing/benchmark/datasets.d.ts +12 -0
  205. package/dist/harness/session/testing/benchmark/datasets.d.ts.map +1 -0
  206. package/dist/harness/session/testing/benchmark/datasets.js +24 -0
  207. package/dist/harness/session/testing/benchmark/datasets.js.map +1 -0
  208. package/dist/harness/session/testing/benchmark/session-repo.d.ts +42 -0
  209. package/dist/harness/session/testing/benchmark/session-repo.d.ts.map +1 -0
  210. package/dist/harness/session/testing/benchmark/session-repo.js +127 -0
  211. package/dist/harness/session/testing/benchmark/session-repo.js.map +1 -0
  212. package/dist/harness/session/testing/benchmark/storage.d.ts +25 -0
  213. package/dist/harness/session/testing/benchmark/storage.d.ts.map +1 -0
  214. package/dist/harness/session/testing/benchmark/storage.js +114 -0
  215. package/dist/harness/session/testing/benchmark/storage.js.map +1 -0
  216. package/dist/harness/session/testing/conformance/session-repo.d.ts +21 -0
  217. package/dist/harness/session/testing/conformance/session-repo.d.ts.map +1 -0
  218. package/dist/harness/session/testing/conformance/session-repo.js +590 -0
  219. package/dist/harness/session/testing/conformance/session-repo.js.map +1 -0
  220. package/dist/harness/session/testing/conformance/storage.d.ts +4 -0
  221. package/dist/harness/session/testing/conformance/storage.d.ts.map +1 -0
  222. package/dist/harness/session/testing/conformance/storage.js +600 -0
  223. package/dist/harness/session/testing/conformance/storage.js.map +1 -0
  224. package/dist/harness/session/testing/gating-storage.d.ts +26 -0
  225. package/dist/harness/session/testing/gating-storage.d.ts.map +1 -0
  226. package/dist/harness/session/testing/gating-storage.js +100 -0
  227. package/dist/harness/session/testing/gating-storage.js.map +1 -0
  228. package/dist/harness/session/testing/index.d.ts +9 -2
  229. package/dist/harness/session/testing/index.d.ts.map +1 -1
  230. package/dist/harness/session/testing/index.js +8 -1
  231. package/dist/harness/session/testing/index.js.map +1 -1
  232. package/dist/harness/session/testing/instrumented-storage.d.ts +11 -0
  233. package/dist/harness/session/testing/instrumented-storage.d.ts.map +1 -0
  234. package/dist/harness/session/testing/instrumented-storage.js +16 -0
  235. package/dist/harness/session/testing/instrumented-storage.js.map +1 -0
  236. package/dist/harness/session/testing/storage-decorator.d.ts +20 -0
  237. package/dist/harness/session/testing/storage-decorator.d.ts.map +1 -0
  238. package/dist/harness/session/testing/storage-decorator.js +41 -0
  239. package/dist/harness/session/testing/storage-decorator.js.map +1 -0
  240. package/dist/harness/session/testing/types.d.ts +5 -7
  241. package/dist/harness/session/testing/types.d.ts.map +1 -1
  242. package/dist/harness/session/testing/types.js.map +1 -1
  243. package/dist/harness/session/types.d.ts +424 -259
  244. package/dist/harness/session/types.d.ts.map +1 -1
  245. package/dist/harness/session/types.js +7 -8
  246. package/dist/harness/session/types.js.map +1 -1
  247. package/dist/harness/session/values.d.ts +95 -0
  248. package/dist/harness/session/values.d.ts.map +1 -0
  249. package/dist/harness/session/values.js +81 -0
  250. package/dist/harness/session/values.js.map +1 -0
  251. package/dist/harness/skills.d.ts +3 -2
  252. package/dist/harness/skills.d.ts.map +1 -1
  253. package/dist/harness/skills.js +29 -26
  254. package/dist/harness/skills.js.map +1 -1
  255. package/dist/harness/telemetry.d.ts +64 -43
  256. package/dist/harness/telemetry.d.ts.map +1 -1
  257. package/dist/harness/telemetry.js +45 -26
  258. package/dist/harness/telemetry.js.map +1 -1
  259. package/dist/harness/tools/bash.d.ts +4 -4
  260. package/dist/harness/tools/bash.d.ts.map +1 -1
  261. package/dist/harness/tools/bash.js +66 -93
  262. package/dist/harness/tools/bash.js.map +1 -1
  263. package/dist/harness/tools/edit.d.ts.map +1 -1
  264. package/dist/harness/tools/edit.js +10 -10
  265. package/dist/harness/tools/edit.js.map +1 -1
  266. package/dist/harness/tools/file-mutation-queue.d.ts +2 -1
  267. package/dist/harness/tools/file-mutation-queue.d.ts.map +1 -1
  268. package/dist/harness/tools/file-mutation-queue.js +5 -5
  269. package/dist/harness/tools/file-mutation-queue.js.map +1 -1
  270. package/dist/harness/tools/path-utils.d.ts +3 -2
  271. package/dist/harness/tools/path-utils.d.ts.map +1 -1
  272. package/dist/harness/tools/path-utils.js +5 -5
  273. package/dist/harness/tools/path-utils.js.map +1 -1
  274. package/dist/harness/tools/read.d.ts +2 -1
  275. package/dist/harness/tools/read.d.ts.map +1 -1
  276. package/dist/harness/tools/read.js +4 -6
  277. package/dist/harness/tools/read.js.map +1 -1
  278. package/dist/harness/tools/write.d.ts.map +1 -1
  279. package/dist/harness/tools/write.js +7 -7
  280. package/dist/harness/tools/write.js.map +1 -1
  281. package/dist/harness/types.d.ts +108 -45
  282. package/dist/harness/types.d.ts.map +1 -1
  283. package/dist/harness/types.js.map +1 -1
  284. package/dist/harness/utils/adaptive-publisher.d.ts +24 -0
  285. package/dist/harness/utils/adaptive-publisher.d.ts.map +1 -0
  286. package/dist/harness/utils/adaptive-publisher.js +79 -0
  287. package/dist/harness/utils/adaptive-publisher.js.map +1 -0
  288. package/dist/harness/utils/output-capture.d.ts +31 -0
  289. package/dist/harness/utils/output-capture.d.ts.map +1 -0
  290. package/dist/harness/utils/output-capture.js +217 -0
  291. package/dist/harness/utils/output-capture.js.map +1 -0
  292. package/dist/harness/utils/shell-output.d.ts +12 -5
  293. package/dist/harness/utils/shell-output.d.ts.map +1 -1
  294. package/dist/harness/utils/shell-output.js +64 -174
  295. package/dist/harness/utils/shell-output.js.map +1 -1
  296. package/dist/harness/utils/truncate.d.ts +1 -0
  297. package/dist/harness/utils/truncate.d.ts.map +1 -1
  298. package/dist/harness/utils/truncate.js +1 -1
  299. package/dist/harness/utils/truncate.js.map +1 -1
  300. package/dist/harness/utils/usage.d.ts +4 -0
  301. package/dist/harness/utils/usage.d.ts.map +1 -0
  302. package/dist/harness/utils/usage.js +33 -0
  303. package/dist/harness/utils/usage.js.map +1 -0
  304. package/dist/index.d.ts +4 -1
  305. package/dist/index.d.ts.map +1 -1
  306. package/dist/index.js +3 -6
  307. package/dist/index.js.map +1 -1
  308. package/dist/proxy.d.ts +2 -0
  309. package/dist/proxy.d.ts.map +1 -1
  310. package/dist/proxy.js +40 -10
  311. package/dist/proxy.js.map +1 -1
  312. package/dist/search/index.d.ts +24 -16
  313. package/dist/search/index.d.ts.map +1 -1
  314. package/dist/search/index.js +1 -1
  315. package/dist/search/index.js.map +1 -1
  316. package/dist/types.d.ts +5 -2
  317. package/dist/types.d.ts.map +1 -1
  318. package/dist/types.js.map +1 -1
  319. package/package.json +25 -4
  320. package/dist/harness/reducer.d.ts +0 -100
  321. package/dist/harness/reducer.d.ts.map +0 -1
  322. package/dist/harness/reducer.js +0 -415
  323. package/dist/harness/reducer.js.map +0 -1
  324. package/dist/harness/session/jsonl/errors.d.ts +0 -9
  325. package/dist/harness/session/jsonl/errors.d.ts.map +0 -1
  326. package/dist/harness/session/jsonl/errors.js +0 -19
  327. package/dist/harness/session/jsonl/errors.js.map +0 -1
  328. package/dist/harness/session/jsonl.d.ts +0 -3
  329. package/dist/harness/session/jsonl.d.ts.map +0 -1
  330. package/dist/harness/session/jsonl.js +0 -2
  331. package/dist/harness/session/jsonl.js.map +0 -1
  332. package/dist/harness/session/state.d.ts +0 -65
  333. package/dist/harness/session/state.d.ts.map +0 -1
  334. package/dist/harness/session/state.js +0 -319
  335. package/dist/harness/session/state.js.map +0 -1
  336. package/dist/harness/session/testing/conformance.d.ts +0 -4
  337. package/dist/harness/session/testing/conformance.d.ts.map +0 -1
  338. package/dist/harness/session/testing/conformance.js +0 -762
  339. package/dist/harness/session/testing/conformance.js.map +0 -1
  340. package/dist/search/scanning.d.ts +0 -29
  341. package/dist/search/scanning.d.ts.map +0 -1
  342. package/dist/search/scanning.js +0 -103
  343. package/dist/search/scanning.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lane.js","sourceRoot":"","sources":["../../../src/harness/runtime/lane.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Api,\n\ttype ImageContent,\n\ttype Model,\n\ttype Models,\n\treduceAssistantMessageFrames,\n\ttype Usage,\n} from \"@earendil-works/pi-ai\";\nimport type { AgentMessage, ThinkingLevel } from \"../../types.ts\";\nimport type {\n\tAbortRequestResult,\n\tAbortResult,\n\tAgentLane,\n\tCancelQueuedResult,\n\tCompactionResult,\n\tDriveOptions,\n\tDriveResult,\n\tHarnessEvent,\n\tLaneConfigEventPayload,\n\tLaneExecutionInfo,\n\tLaneSnapshot,\n\tModelIdentity,\n\tNavigationResult,\n\tOperationAdmission,\n\tOperationAdmissionResult,\n\tOperationRequest,\n\tQueueResult,\n\tRecordUsageResult,\n\tResumeResult,\n\tRunResult,\n\tSuspendedRun,\n\tWatchHandle,\n} from \"../agent-harness.ts\";\nimport { type BranchPreparation, prepareBranchEntries } from \"../compaction/branch-summarization.ts\";\nimport { prepareCompaction } from \"../compaction/compaction.ts\";\nimport { awaitWithContext, type Context } from \"../context.ts\";\nimport { toolResultFromMessage } from \"../execution/tools.ts\";\nimport type { HookRegistry } from \"../hooks.ts\";\nimport { formatPromptTemplateInvocation } from \"../prompt-templates.ts\";\nimport {\n\tClosed,\n\tHarnessClosed,\n\tHarnessFault,\n\tInvalidMessage,\n\tInvalidNavigation,\n\tLaneBusy,\n\tNoActiveOperation,\n\tNothingToCompact,\n\tNothingToResume,\n\tOperationMismatch,\n\tResult,\n\tUnknownSkill,\n\tUnknownTarget,\n\tUnknownTemplate,\n} from \"../result.ts\";\nimport { insertEntry, insertUsage } from \"../session/commit.ts\";\nimport { SessionInvariantError, SessionPendingAssistantMessageError } from \"../session/session.ts\";\nimport type {\n\tBranchScan,\n\tEntry,\n\tInboxItem,\n\tInboxItemKind,\n\tJsonValue,\n\tNavigationReadyToCommitOperation,\n\tNewEntry,\n\tOperation,\n\tOperationMeta,\n\tOperationResultRecord,\n\tOperationState,\n\tPendingEntry,\n\tRunSettings,\n\tSession,\n\tSessionReader,\n\tStartingOperation,\n\tSummaryDecidingOperation,\n\tWrite,\n} from \"../session/types.ts\";\nimport {\n\tbranchTip,\n\tdeleteValue,\n\tlaneConfig,\n\tlaneState as laneStateValue,\n\toperationMeta as operationMetaValue,\n\toperationPreparation,\n\toperationResult as operationResultValue,\n\toperationState as operationStateValue,\n\toperationToolArgs,\n\tpendingEntry,\n\tpendingToolOutput,\n\tsetValue,\n} from \"../session/values.ts\";\nimport { formatSkillInvocation } from \"../skills.ts\";\nimport { durableBranchPreparation, durableCompactionPreparation } from \"./drive/structural.ts\";\nimport { driveOperation } from \"./drive.ts\";\nimport { readAssistantFrames } from \"./progress.ts\";\nimport { chainEntries, committedEntryEvents, readLaneQueues } from \"./transcript.ts\";\nimport {\n\ttype Config,\n\ttype ContinueOperationResult,\n\tDrive,\n\ttype LaneCommand,\n\ttype LaneState,\n\ttype OperationCommand,\n} from \"./types.ts\";\n\ntype EmitBatch = (events: readonly HarnessEvent[], context: Context) => Promise<void>;\ntype WatchHandler = <T>(\n\tsnapshot: T,\n\tfilter: (event: HarnessEvent) => boolean,\n\tcontext: Context,\n\tresnapshot: (context: Context, markBoundary: () => void) => Promise<T>,\n) => WatchHandle<T>;\ntype FaultHandler = (cause: unknown, context: Context) => Error;\n\ntype LaneCommandOutcome<TResult> =\n\t| { kind: \"return\"; result: TResult; delivery?: Promise<void> }\n\t| { kind: \"reject\"; error: Error }\n\t| { kind: \"idle_blocked\"; owner: Promise<void>; change: Promise<void> };\n\ntype IdleObservation = { kind: \"idle\" } | { kind: \"wait\"; drive: Drive | undefined; change: Promise<void> };\ntype IdleClaimObservation = { kind: \"claimed\" } | { kind: \"wait\"; drive: Drive | undefined; change: Promise<void> };\n\ntype DriveClaim =\n\t| { kind: \"observe\"; drive: Drive; installed: boolean }\n\t| { kind: \"occupied\"; drive: Drive }\n\t| { kind: \"settled\"; outcome: OperationResultRecord }\n\t| { kind: \"mismatch\"; error: OperationMismatch };\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n\tif (value === null || (typeof value !== \"object\" && typeof value !== \"function\")) return false;\n\treturn \"then\" in value && typeof value.then === \"function\";\n}\n\nfunction inboxItems(inbox: readonly InboxItem[], kind: InboxItemKind): InboxItem[] {\n\treturn inbox.filter((item) => item.kind === kind);\n}\n\nfunction withoutInboxItems(inbox: readonly InboxItem[], removed: readonly InboxItem[]): InboxItem[] {\n\tconst removedIds = new Set(removed.map((item) => item.entryId));\n\treturn inbox.filter((item) => !removedIds.has(item.entryId));\n}\n\nfunction selectAcceptedInbox(\n\tinbox: readonly InboxItem[],\n\tsteeringMode: \"all\" | \"one-at-a-time\",\n\tfollowUpMode: \"all\" | \"one-at-a-time\",\n): { selected: InboxItem[]; remainder: InboxItem[] } {\n\tlet steerTaken = false;\n\tlet followUpTaken = false;\n\tconst selected: InboxItem[] = [];\n\tconst remainder: InboxItem[] = [];\n\tfor (const item of inbox) {\n\t\tconst eligible =\n\t\t\titem.kind === \"write\" ||\n\t\t\titem.kind === \"nextRun\" ||\n\t\t\t(item.kind === \"steer\" && (steeringMode === \"all\" || !steerTaken)) ||\n\t\t\t(item.kind === \"followUp\" && (followUpMode === \"all\" || !followUpTaken));\n\t\tif (eligible) {\n\t\t\tselected.push(item);\n\t\t\tif (item.kind === \"steer\") steerTaken = true;\n\t\t\tif (item.kind === \"followUp\") followUpTaken = true;\n\t\t} else {\n\t\t\tremainder.push(item);\n\t\t}\n\t}\n\treturn { selected, remainder };\n}\n\nfunction capturedSettings<TContext extends object | undefined>(config: Config<TContext>): RunSettings {\n\treturn {\n\t\tcompaction: config.compaction,\n\t\tsteeringMode: config.steeringMode,\n\t\tfollowUpMode: config.followUpMode,\n\t\ttoolExecution: config.toolExecution,\n\t};\n}\n\nfunction durableLaneState(\n\tstate: LaneState,\n\tcurrentOperationId: string | null,\n\tinbox: InboxItem[] = state.inbox,\n\tlastOperationId: string | null = state.lastOperationId,\n) {\n\treturn { currentOperationId, lastOperationId, inbox };\n}\n\nfunction pendingEntryWrite(entryId: string, pending: PendingEntry): NewEntry {\n\treturn pending.type === \"message\"\n\t\t? { id: entryId, parentId: null, type: \"message\", message: pending.payload }\n\t\t: {\n\t\t\t\tid: entryId,\n\t\t\t\tparentId: null,\n\t\t\t\ttype: \"custom\",\n\t\t\t\tcustomType: pending.customType,\n\t\t\t\t...(pending.payload === undefined ? {} : { data: pending.payload }),\n\t\t\t};\n}\n\nfunction capturedModel(operation: Operation): ModelIdentity | undefined {\n\tconst { state } = operation;\n\tswitch (state.at) {\n\t\tcase \"assistant.ready\":\n\t\tcase \"assistant.effect_pending\":\n\t\tcase \"assistant.retry_wait\":\n\t\t\treturn state.generationContext.configuration.model;\n\t\tcase \"tools\":\n\t\t\treturn state.batch.configuration.model;\n\t\tcase \"deferred.suspended\":\n\t\tcase \"deferred.effect_pending\":\n\t\t\treturn state.configuration.model;\n\t\tcase \"summary.ready\":\n\t\tcase \"summary.effect_pending\":\n\t\tcase \"summary.retry_wait\":\n\t\t\treturn state.summaryContext.configuration.model;\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\n/** Runtime implementation of one configured lane. */\nexport class Lane<TContext extends object | undefined> implements AgentLane {\n\treadonly name: string;\n\treadonly session: Session;\n\treadonly models: Models;\n\treadonly hooks: HookRegistry;\n\treadonly emitBatch: EmitBatch;\n\tprivate readonly onFault: FaultHandler;\n\tprivate readonly installWatch: WatchHandler;\n\tprivate readonly config: () => Config<TContext>;\n\tprivate stateChange: Promise<void>;\n\tprivate resolveStateChange: () => void;\n\tprivate idleOwner: Promise<void> | undefined;\n\t/** Package-internal drive owner. Public only because deterministic procedure tests install exact owners directly. */\n\tactiveDrive: Drive | undefined;\n\t/** Authoritative live control projection while this harness owns the Session. */\n\tstate: LaneState;\n\tclosedError: Error | undefined;\n\n\tconstructor(\n\t\tname: string,\n\t\tsession: Session,\n\t\tmodels: Models,\n\t\thooks: HookRegistry,\n\t\tstate: LaneState,\n\t\tonFault: FaultHandler,\n\t\temitBatch: EmitBatch,\n\t\tinstallWatch: WatchHandler,\n\t\treadConfig: () => Config<TContext>,\n\t) {\n\t\tthis.session = session;\n\t\tthis.models = models;\n\t\tthis.hooks = hooks;\n\t\tthis.name = name;\n\t\tthis.state = state;\n\t\tthis.onFault = onFault;\n\t\tthis.emitBatch = emitBatch;\n\t\tthis.installWatch = installWatch;\n\t\tthis.config = readConfig;\n\t\tlet resolveStateChange!: () => void;\n\t\tthis.stateChange = new Promise<void>((resolve) => {\n\t\t\tresolveStateChange = resolve;\n\t\t});\n\t\tthis.resolveStateChange = resolveStateChange;\n\t}\n\n\tasync getTipId(_context: Context): Promise<string | null> {\n\t\tthis.assertOpen();\n\t\treturn this.state.tipId;\n\t}\n\n\tasync getResult(operationId: string, context: Context): Promise<OperationResultRecord | undefined> {\n\t\tthis.assertOpen();\n\t\treturn (await this.session.getValue(operationResultValue(operationId), context))?.value;\n\t}\n\n\treadConfig(): Config<TContext> {\n\t\treturn this.config();\n\t}\n\n\tmismatch(expected: string, currentOperationId: string | null, lastOperationId: string | null): OperationMismatch {\n\t\treturn new OperationMismatch({\n\t\t\tlane: this.name,\n\t\t\texpectedOperationId: expected,\n\t\t\t...(currentOperationId === null ? {} : { currentOperationId }),\n\t\t\t...(lastOperationId === null ? {} : { lastOperationId }),\n\t\t\tmessage: `Operation ${expected} does not own lane ${JSON.stringify(this.name)}`,\n\t\t});\n\t}\n\n\t/**\n\t * Run one effect-free command on this lane's serialized mutation line. Owned `state` is authoritative; the\n\t * planner receives that state plus a read-only reader for bounded payload lookups. Committed values and owned\n\t * state are immutable snapshots: update them by replacement, never in place. State-independent input validation\n\t * belongs before `command()`, while every state-dependent decision belongs inside its planner.\n\t *\n\t * A planner may choose exactly one outcome:\n\t * - `commit` commits once, publishes `next`, then synchronously materializes the caller result from\n\t * storage-assigned `CommitResult` metadata;\n\t * - `return` returns without a commit, boxed so a promise value is not awaited while holding the Session line;\n\t * - `reject` rejects outside the mutation/fault boundary as an expected caller error without a commit.\n\t *\n\t * Planner, commit, and materialization errors fault the harness before releasing the Session line. Close/fault gates\n\t * are checked both before queueing and when the callback starts: close-first rejects, while a callback admitted\n\t * before close may finish its commit, publish memory, and resolve without another open check. Never invoke providers,\n\t * tools, hooks, timers, event handlers, or wait for task completion here; perform those after `command()` returns.\n\t */\n\tprivate async readLane<TResult>(\n\t\tread: (state: LaneState, reader: SessionReader) => TResult | Promise<TResult>,\n\t\tcontext: Context,\n\t): Promise<TResult> {\n\t\tthis.assertOpen();\n\t\ttry {\n\t\t\treturn await this.session.mutate(async (reader) => {\n\t\t\t\tthis.assertOpen();\n\t\t\t\ttry {\n\t\t\t\t\treturn await read(this.state, reader);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (this.closedError !== undefined) throw this.closedError;\n\t\t\t\t\tthrow this.onFault(error, context);\n\t\t\t\t}\n\t\t\t}, context);\n\t\t} catch (error) {\n\t\t\tif (this.closedError !== undefined) throw this.closedError;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync command<TResult>(\n\t\tplan: (state: LaneState, reader: SessionReader) => LaneCommand<TResult> | Promise<LaneCommand<TResult>>,\n\t\tcontext: Context,\n\t): Promise<TResult> {\n\t\tthis.assertOpen();\n\t\twhile (this.idleOwner !== undefined) {\n\t\t\tawait awaitWithContext(Promise.race([this.idleOwner, this.stateChange]), context);\n\t\t\tthis.assertOpen();\n\t\t}\n\t\tlet outcome: LaneCommandOutcome<TResult>;\n\t\ttry {\n\t\t\toutcome = await this.session.mutate(async (mutator) => {\n\t\t\t\tthis.assertOpen();\n\t\t\t\tif (this.idleOwner !== undefined) {\n\t\t\t\t\treturn { kind: \"idle_blocked\", owner: this.idleOwner, change: this.stateChange };\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst decision = await plan(this.state, mutator);\n\t\t\t\t\tswitch (decision.kind) {\n\t\t\t\t\t\tcase \"return\":\n\t\t\t\t\t\t\treturn { kind: \"return\", result: decision.result };\n\t\t\t\t\t\tcase \"reject\":\n\t\t\t\t\t\t\treturn { kind: \"reject\", error: decision.error };\n\t\t\t\t\t\tcase \"commit\": {\n\t\t\t\t\t\t\tconst commit = await mutator.commit(decision.writes, context);\n\t\t\t\t\t\t\tthis.state = decision.next;\n\t\t\t\t\t\t\tthis.signalStateChange();\n\t\t\t\t\t\t\tconst result = decision.materialize(commit);\n\t\t\t\t\t\t\tif (isPromiseLike(result)) {\n\t\t\t\t\t\t\t\tthrow new TypeError(\"Lane command materialize() must be synchronous\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst events = decision.events?.(commit) ?? [];\n\t\t\t\t\t\t\tconst delivery = events.length === 0 ? undefined : this.emitBatch(events, context);\n\t\t\t\t\t\t\treturn { kind: \"return\", result, ...(delivery === undefined ? {} : { delivery }) };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (this.closedError !== undefined) throw this.closedError;\n\t\t\t\t\tthrow this.onFault(error, context);\n\t\t\t\t}\n\t\t\t}, context);\n\t\t} catch (error) {\n\t\t\tif (this.closedError !== undefined) throw this.closedError;\n\t\t\tthrow error;\n\t\t}\n\t\tif (outcome.kind === \"idle_blocked\") {\n\t\t\tawait awaitWithContext(Promise.race([outcome.owner, outcome.change]), context);\n\t\t\tthis.assertOpen();\n\t\t\treturn this.command(plan, context);\n\t\t}\n\t\tif (outcome.kind === \"reject\") throw outcome.error;\n\t\tawait outcome.delivery;\n\t\treturn outcome.result;\n\t}\n\n\t/**\n\t * Run a command against the current operation even after cancellation is requested. Use this to settle admitted\n\t * effects, finish the operation, or update concurrent child state. The capability narrows the planner's state type;\n\t * the Drive continuation remains the sole top-level state writer.\n\t */\n\tsettleOperation<TState extends OperationState, TResult>(\n\t\t_capability: TState,\n\t\tplan: (\n\t\t\tstate: LaneState,\n\t\t\tcurrent: TState,\n\t\t\tmeta: OperationMeta,\n\t\t\treader: SessionReader,\n\t\t) => OperationCommand<TResult> | Promise<OperationCommand<TResult>>,\n\t\tcontext: Context,\n\t): Promise<TResult> {\n\t\treturn this.command(async (state, reader) => {\n\t\t\tconst operation = state.operation!;\n\t\t\tconst decision = await plan(state, operation.state as TState, operation.meta, reader);\n\t\t\tif (decision.kind === \"commit\") {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"commit\",\n\t\t\t\t\twrites: [\n\t\t\t\t\t\t...decision.writes,\n\t\t\t\t\t\tsetValue(operationStateValue(operation.meta.operationId), decision.operationState),\n\t\t\t\t\t\t...(decision.lane?.inbox === undefined\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\tsetValue(\n\t\t\t\t\t\t\t\t\t\tlaneStateValue(this.name),\n\t\t\t\t\t\t\t\t\t\tdurableLaneState(state, operation.meta.operationId, decision.lane.inbox),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t],\n\t\t\t\t\tnext: {\n\t\t\t\t\t\t...state,\n\t\t\t\t\t\t...decision.lane,\n\t\t\t\t\t\toperation: { meta: operation.meta, state: decision.operationState },\n\t\t\t\t\t},\n\t\t\t\t\tmaterialize: decision.materialize,\n\t\t\t\t\t...(decision.events === undefined ? {} : { events: decision.events }),\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (decision.kind !== \"finish\") return decision;\n\t\t\tconst inbox = decision.lane?.inbox ?? state.inbox;\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [\n\t\t\t\t\t...decision.writes,\n\t\t\t\t\tsetValue(operationResultValue(operation.meta.operationId), decision.record),\n\t\t\t\t\tsetValue(laneStateValue(this.name), durableLaneState(state, null, inbox, operation.meta.operationId)),\n\t\t\t\t],\n\t\t\t\tnext: {\n\t\t\t\t\t...state,\n\t\t\t\t\t...decision.lane,\n\t\t\t\t\tinbox,\n\t\t\t\t\tlastOperationId: operation.meta.operationId,\n\t\t\t\t\toperation: null,\n\t\t\t\t},\n\t\t\t\tmaterialize: decision.materialize,\n\t\t\t\t...(decision.events === undefined ? {} : { events: decision.events }),\n\t\t\t};\n\t\t}, context);\n\t}\n\n\t/**\n\t * Run an ordinary operation command only while durable control is running. Use this before starting new hooks,\n\t * effects, or forward progress. Returns `cancel_requested` without invoking the planner once cancellation is requested.\n\t */\n\tcontinueOperation<TState extends OperationState, TResult>(\n\t\tcapability: TState,\n\t\tplan: (\n\t\t\tstate: LaneState,\n\t\t\tcurrent: TState,\n\t\t\tmeta: OperationMeta,\n\t\t\treader: SessionReader,\n\t\t) => OperationCommand<TResult> | Promise<OperationCommand<TResult>>,\n\t\tcontext: Context,\n\t): Promise<ContinueOperationResult<TResult>> {\n\t\treturn this.settleOperation<TState, ContinueOperationResult<TResult>>(\n\t\t\tcapability,\n\t\t\tasync (state, latest, meta, reader) => {\n\t\t\t\tif (latest.control.status === \"cancel_requested\") {\n\t\t\t\t\treturn { kind: \"return\", result: { kind: \"cancel_requested\" } };\n\t\t\t\t}\n\t\t\t\tconst decision = await plan(state, latest, meta, reader);\n\t\t\t\tif (decision.kind === \"return\") {\n\t\t\t\t\treturn { kind: \"return\", result: { kind: \"result\", value: decision.result } };\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\t...decision,\n\t\t\t\t\tmaterialize: (commit) => ({ kind: \"result\", value: decision.materialize(commit) }),\n\t\t\t\t};\n\t\t\t},\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync accept(request: OperationRequest, context: Context): Promise<OperationAdmissionResult> {\n\t\tif (this.closedError instanceof HarnessClosed) {\n\t\t\treturn Result.err(new Closed({ message: this.closedError.message }));\n\t\t}\n\t\tthis.assertOpen();\n\t\tconst startedAt = Date.now();\n\t\tconst operationId = request.operationId ?? this.session.idGenerator.next(startedAt);\n\t\tconst acceptanceConfig = this.readConfig();\n\t\tif (request.kind === \"compaction\") {\n\t\t\treturn this.acceptCompaction(request, operationId, startedAt, acceptanceConfig, context);\n\t\t}\n\t\tif (request.kind === \"navigation\") {\n\t\t\treturn this.acceptNavigation(request, operationId, startedAt, acceptanceConfig, context);\n\t\t}\n\n\t\treturn this.acceptRun(request, operationId, startedAt, acceptanceConfig, context);\n\t}\n\n\tprivate async acceptRun(\n\t\trequest: Extract<OperationRequest, { kind: \"prompt\" | \"skill\" | \"prompt_template\" }>,\n\t\toperationId: string,\n\t\tstartedAt: number,\n\t\tacceptanceConfig: Config<TContext>,\n\t\tcontext: Context,\n\t): Promise<OperationAdmissionResult> {\n\t\tlet messages: AgentMessage[];\n\t\tswitch (request.kind) {\n\t\t\tcase \"prompt\":\n\t\t\t\tif (typeof request.prompt !== \"string\") {\n\t\t\t\t\tmessages = Array.isArray(request.prompt) ? request.prompt : [request.prompt];\n\t\t\t\t} else {\n\t\t\t\t\tconst images = request.images ?? [];\n\t\t\t\t\tmessages =\n\t\t\t\t\t\trequest.prompt.length === 0 && images.length === 0\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t\t\t...(request.prompt.length === 0\n\t\t\t\t\t\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t\t\t\t\t\t: [{ type: \"text\" as const, text: request.prompt }]),\n\t\t\t\t\t\t\t\t\t\t\t...images,\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\ttimestamp: startedAt,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"skill\": {\n\t\t\t\tconst skill = acceptanceConfig.resources.skills?.find((candidate) => candidate.name === request.name);\n\t\t\t\tif (skill === undefined) {\n\t\t\t\t\treturn Result.err(new UnknownSkill({ name: request.name, message: `Unknown skill: ${request.name}` }));\n\t\t\t\t}\n\t\t\t\tmessages = [\n\t\t\t\t\t{\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: formatSkillInvocation(skill, request.additionalInstructions) }],\n\t\t\t\t\t\ttimestamp: startedAt,\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"prompt_template\": {\n\t\t\t\tconst template = acceptanceConfig.resources.promptTemplates?.find(\n\t\t\t\t\t(candidate) => candidate.name === request.name,\n\t\t\t\t);\n\t\t\t\tif (template === undefined) {\n\t\t\t\t\treturn Result.err(\n\t\t\t\t\t\tnew UnknownTemplate({ name: request.name, message: `Unknown prompt template: ${request.name}` }),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst content = formatPromptTemplateInvocation(template, request.args);\n\t\t\t\tmessages =\n\t\t\t\t\tcontent.length === 0\n\t\t\t\t\t\t? []\n\t\t\t\t\t\t: [{ role: \"user\", content: [{ type: \"text\", text: content }], timestamp: startedAt }];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (const message of messages) {\n\t\t\tif (message.role === \"assistant\" && message.stopReason === \"pending\") {\n\t\t\t\treturn Result.err(\n\t\t\t\t\tnew InvalidMessage({\n\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\treason: \"pending_assistant\",\n\t\t\t\t\t\tmessage: \"Cannot accept a pending assistant message\",\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconst prompt = messages.map((message) => ({ id: this.session.idGenerator.next(startedAt), message }));\n\n\t\treturn this.command<OperationAdmissionResult>(async (state, reader) => {\n\t\t\tif (state.operation !== null) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"return\",\n\t\t\t\t\tresult: Result.err(\n\t\t\t\t\t\tnew LaneBusy({\n\t\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\t\toperationId: state.operation.meta.operationId,\n\t\t\t\t\t\t\toperationKind: state.operation.meta.intent.kind,\n\t\t\t\t\t\t\tmessage: `Lane ${JSON.stringify(this.name)} already has an active operation`,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst { selected: selectedItems, remainder: inbox } = selectAcceptedInbox(\n\t\t\t\tstate.inbox,\n\t\t\t\tacceptanceConfig.steeringMode,\n\t\t\t\tacceptanceConfig.followUpMode,\n\t\t\t);\n\t\t\tconst captured = await Promise.all(\n\t\t\t\tselectedItems.map(async (item) => {\n\t\t\t\t\tconst stored = await reader.getValue(pendingEntry(item.entryId), context);\n\t\t\t\t\tif (stored === undefined) {\n\t\t\t\t\t\tthrow new SessionInvariantError(`Pending ${item.kind} entry ${item.entryId} is missing its payload`);\n\t\t\t\t\t}\n\t\t\t\t\tif (item.kind !== \"write\" && stored.value.type !== \"message\") {\n\t\t\t\t\t\tthrow new SessionInvariantError(`Pending ${item.kind} entry ${item.entryId} is not a message`);\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tstored.value.type === \"message\" &&\n\t\t\t\t\t\tstored.value.payload.role === \"assistant\" &&\n\t\t\t\t\t\tstored.value.payload.stopReason === \"pending\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new SessionInvariantError(\n\t\t\t\t\t\t\t`Pending ${item.kind} entry ${item.entryId} contains a pending assistant`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn { item, pending: stored.value };\n\t\t\t\t}),\n\t\t\t);\n\t\t\tconst hasCapturedConversation = selectedItems.some((item) => item.kind !== \"write\");\n\t\t\tif (prompt.length === 0 && !hasCapturedConversation) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"return\",\n\t\t\t\t\tresult: Result.err(\n\t\t\t\t\t\tnew InvalidMessage({\n\t\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\t\treason: \"empty\",\n\t\t\t\t\t\t\tmessage: \"Acceptance must append at least one message\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst entries = chainEntries(state.tipId, [\n\t\t\t\t...captured.map(({ item, pending }) => pendingEntryWrite(item.entryId, pending)),\n\t\t\t\t...prompt.map(({ id, message }) => ({ id, parentId: null, type: \"message\" as const, message })),\n\t\t\t]);\n\t\t\tconst parentId = entries[entries.length - 1]!.id;\n\t\t\tconst meta = {\n\t\t\t\toperationId,\n\t\t\t\tlane: this.name,\n\t\t\t\tsourceTipId: state.tipId,\n\t\t\t\tstartedAt,\n\t\t\t\tintent: { kind: \"run\" as const, promptEntryIds: prompt.map(({ id }) => id) },\n\t\t\t};\n\t\t\tconst operationState: StartingOperation = {\n\t\t\t\tat: \"starting\",\n\t\t\t\tcontrol: { status: \"running\" },\n\t\t\t\tsettings: capturedSettings(acceptanceConfig),\n\t\t\t\tlatestAssistantEntryId: null,\n\t\t\t};\n\t\t\tconst remainingQueues = await readLaneQueues(reader, inbox, context);\n\t\t\tconst next: LaneState = {\n\t\t\t\t...state,\n\t\t\t\ttipId: parentId,\n\t\t\t\tinbox,\n\t\t\t\toperation: { meta, state: operationState },\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [\n\t\t\t\t\t...entries.map((entry) => insertEntry(entry)),\n\t\t\t\t\t...selectedItems.map((item) => deleteValue(pendingEntry(item.entryId))),\n\t\t\t\t\tsetValue(branchTip(this.name), parentId),\n\t\t\t\t\tsetValue(operationMetaValue(operationId), meta),\n\t\t\t\t\tsetValue(operationStateValue(operationId), operationState),\n\t\t\t\t\tsetValue(laneStateValue(this.name), durableLaneState(state, operationId, inbox)),\n\t\t\t\t],\n\t\t\t\tnext,\n\t\t\t\tmaterialize: () => Result.ok({ operationId, kind: \"run\", startedAt }),\n\t\t\t\tevents: (commit) => {\n\t\t\t\t\tconst events: HarnessEvent[] = [\n\t\t\t\t\t\t{ type: \"run_start\", runId: operationId, startedAt, lane: this.name },\n\t\t\t\t\t\t...committedEntryEvents(entries, commit, this.name, operationId),\n\t\t\t\t\t];\n\t\t\t\t\tif (selectedItems.length > 0) {\n\t\t\t\t\t\tevents.push({ type: \"queue_update\", queues: remainingQueues, lane: this.name });\n\t\t\t\t\t}\n\t\t\t\t\treturn events;\n\t\t\t\t},\n\t\t\t};\n\t\t}, context);\n\t}\n\n\tprivate acceptCompaction(\n\t\trequest: Extract<OperationRequest, { kind: \"compaction\" }>,\n\t\toperationId: string,\n\t\tstartedAt: number,\n\t\tacceptanceConfig: Config<TContext>,\n\t\tcontext: Context,\n\t): Promise<OperationAdmissionResult> {\n\t\tconst taskId = this.session.idGenerator.next(startedAt);\n\t\treturn this.command<OperationAdmissionResult>(async (state, reader) => {\n\t\t\tif (state.operation !== null) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"return\",\n\t\t\t\t\tresult: Result.err(\n\t\t\t\t\t\tnew LaneBusy({\n\t\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\t\toperationId: state.operation.meta.operationId,\n\t\t\t\t\t\t\toperationKind: state.operation.meta.intent.kind,\n\t\t\t\t\t\t\tmessage: `Lane ${JSON.stringify(this.name)} already has an active operation`,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst path =\n\t\t\t\tstate.tipId === null\n\t\t\t\t\t? []\n\t\t\t\t\t: (\n\t\t\t\t\t\t\tawait reader.scanBranch(\n\t\t\t\t\t\t\t\t{ start: state.tipId, stopAtType: \"compaction\", order: \"newestFirst\" },\n\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t).reverse();\n\t\t\tconst prepared = prepareCompaction(path, acceptanceConfig.compaction);\n\t\t\tif (!prepared.ok) throw prepared.error;\n\t\t\tif (prepared.value === undefined) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"return\",\n\t\t\t\t\tresult: Result.err(\n\t\t\t\t\t\tnew NothingToCompact({\n\t\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\t\tmessage: `Lane ${JSON.stringify(this.name)} has nothing to compact`,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst meta: OperationMeta = {\n\t\t\t\toperationId,\n\t\t\t\tlane: this.name,\n\t\t\t\tsourceTipId: state.tipId,\n\t\t\t\tstartedAt,\n\t\t\t\tintent: {\n\t\t\t\t\tkind: \"compaction\",\n\t\t\t\t\t...(request.customInstructions === undefined ? {} : { customInstructions: request.customInstructions }),\n\t\t\t\t},\n\t\t\t};\n\t\t\tconst operationState: SummaryDecidingOperation = {\n\t\t\t\tat: \"summary.deciding\",\n\t\t\t\tcontrol: { status: \"running\" },\n\t\t\t\tsettings: capturedSettings(acceptanceConfig),\n\t\t\t\tlatestAssistantEntryId: null,\n\t\t\t\ttask: {\n\t\t\t\t\ttaskId,\n\t\t\t\t\treason: \"manual\",\n\t\t\t\t\t...(request.customInstructions === undefined ? {} : { customInstructions: request.customInstructions }),\n\t\t\t\t\tboundary: { kind: \"finish\" },\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [\n\t\t\t\t\tsetValue(operationPreparation(operationId, taskId), durableCompactionPreparation(prepared.value)),\n\t\t\t\t\tsetValue(operationMetaValue(operationId), meta),\n\t\t\t\t\tsetValue(operationStateValue(operationId), operationState),\n\t\t\t\t\tsetValue(laneStateValue(this.name), durableLaneState(state, operationId)),\n\t\t\t\t],\n\t\t\t\tnext: { ...state, operation: { meta, state: operationState } },\n\t\t\t\tmaterialize: () => Result.ok({ operationId, kind: \"compaction\", startedAt }),\n\t\t\t\tevents: () => [\n\t\t\t\t\t{ type: \"compaction_start\", lane: this.name, runId: operationId, reason: \"manual\", startedAt },\n\t\t\t\t],\n\t\t\t};\n\t\t}, context);\n\t}\n\n\tprivate async acceptNavigation(\n\t\trequest: Extract<OperationRequest, { kind: \"navigation\" }>,\n\t\toperationId: string,\n\t\tstartedAt: number,\n\t\tacceptanceConfig: Config<TContext>,\n\t\tcontext: Context,\n\t): Promise<OperationAdmissionResult> {\n\t\tconst taskId = this.session.idGenerator.next(startedAt);\n\t\tconst targetId = request.targetId;\n\t\tconst options = request.options ?? {};\n\t\tconst summarize = options.summarize ?? false;\n\t\tfor (;;) {\n\t\t\tconst observedTipId = this.state.tipId;\n\t\t\tlet preparation: BranchPreparation | undefined;\n\t\t\tif (summarize && observedTipId !== null && targetId !== null) {\n\t\t\t\tconst target = await this.session.getEntries([targetId], context);\n\t\t\t\tif (target.has(targetId)) {\n\t\t\t\t\tconst [oldPath, targetPath] = await Promise.all([\n\t\t\t\t\t\tthis.session.scanBranch({ start: observedTipId, order: \"newestFirst\" }, context),\n\t\t\t\t\t\tthis.session.scanBranch({ start: targetId, order: \"newestFirst\" }, context),\n\t\t\t\t\t]);\n\t\t\t\t\tconst oldIds = new Set(oldPath.map((entry) => entry.id));\n\t\t\t\t\tconst commonAncestorId = targetPath.find((entry) => oldIds.has(entry.id))?.id ?? null;\n\t\t\t\t\tpreparation = prepareBranchEntries(\n\t\t\t\t\t\toldPath\n\t\t\t\t\t\t\t.slice(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tcommonAncestorId === null\n\t\t\t\t\t\t\t\t\t? oldPath.length\n\t\t\t\t\t\t\t\t\t: oldPath.findIndex((entry) => entry.id === commonAncestorId),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.reverse(),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst accepted = await this.command<OperationAdmissionResult | undefined>(async (state, reader) => {\n\t\t\t\tif (state.operation !== null) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"return\",\n\t\t\t\t\t\tresult: Result.err(\n\t\t\t\t\t\t\tnew LaneBusy({\n\t\t\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\t\t\toperationId: state.operation.meta.operationId,\n\t\t\t\t\t\t\t\toperationKind: state.operation.meta.intent.kind,\n\t\t\t\t\t\t\t\tmessage: `Lane ${JSON.stringify(this.name)} already has an active operation`,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (state.tipId !== observedTipId) return { kind: \"return\", result: undefined };\n\t\t\t\tif (targetId === state.tipId) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"return\",\n\t\t\t\t\t\tresult: Result.err(\n\t\t\t\t\t\t\tnew InvalidNavigation({\n\t\t\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\t\t\treason: \"current_tip\",\n\t\t\t\t\t\t\t\tmessage: \"Navigation target must differ from the current tip\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (targetId === null && options.label !== undefined) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"return\",\n\t\t\t\t\t\tresult: Result.err(\n\t\t\t\t\t\t\tnew InvalidNavigation({\n\t\t\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\t\t\treason: \"root_label\",\n\t\t\t\t\t\t\t\tmessage: \"Root navigation cannot set a label\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (summarize && (state.tipId === null || targetId === null)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"return\",\n\t\t\t\t\t\tresult: Result.err(\n\t\t\t\t\t\t\tnew InvalidNavigation({\n\t\t\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\t\t\treason: state.tipId === null ? \"source_root\" : \"target_root\",\n\t\t\t\t\t\t\t\tmessage: \"Summarized navigation requires non-root source and target entries\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (targetId !== null && !(await reader.getEntries([targetId], context)).has(targetId)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"return\",\n\t\t\t\t\t\tresult: Result.err(new UnknownTarget({ targetId, message: `Unknown target: ${targetId}` })),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst intent: OperationMeta[\"intent\"] = {\n\t\t\t\t\tkind: \"navigation\",\n\t\t\t\t\ttargetId,\n\t\t\t\t\tsummarize,\n\t\t\t\t\t...(options.label === undefined ? {} : { label: options.label }),\n\t\t\t\t\t...(options.customInstructions === undefined ? {} : { customInstructions: options.customInstructions }),\n\t\t\t\t};\n\t\t\t\tconst meta: OperationMeta = {\n\t\t\t\t\toperationId,\n\t\t\t\t\tlane: this.name,\n\t\t\t\t\tsourceTipId: state.tipId,\n\t\t\t\t\tstartedAt,\n\t\t\t\t\tintent,\n\t\t\t\t};\n\t\t\t\tconst operationScope = {\n\t\t\t\t\tcontrol: { status: \"running\" as const },\n\t\t\t\t\tsettings: capturedSettings(acceptanceConfig),\n\t\t\t\t\tlatestAssistantEntryId: null,\n\t\t\t\t};\n\t\t\t\tlet operationState: SummaryDecidingOperation | NavigationReadyToCommitOperation;\n\t\t\t\tconst writes: Write[] = [];\n\t\t\t\tif (summarize) {\n\t\t\t\t\tif (state.tipId === null || targetId === null || preparation === undefined) {\n\t\t\t\t\t\tthrow new SessionInvariantError(\"Validated summarized navigation is missing its preparation\");\n\t\t\t\t\t}\n\t\t\t\t\twrites.push(setValue(operationPreparation(operationId, taskId), durableBranchPreparation(preparation)));\n\t\t\t\t\toperationState = {\n\t\t\t\t\t\t...operationScope,\n\t\t\t\t\t\tat: \"summary.deciding\",\n\t\t\t\t\t\ttask: {\n\t\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\t\t...(options.customInstructions === undefined\n\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t: { customInstructions: options.customInstructions }),\n\t\t\t\t\t\t\tboundary: {\n\t\t\t\t\t\t\t\tkind: \"commit_navigation\",\n\t\t\t\t\t\t\t\ttargetId,\n\t\t\t\t\t\t\t\t...(options.label === undefined ? {} : { label: options.label }),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\toperationState = {\n\t\t\t\t\t\t...operationScope,\n\t\t\t\t\t\tat: \"navigation.ready_to_commit\",\n\t\t\t\t\t\ttargetId,\n\t\t\t\t\t\t...(options.label === undefined ? {} : { label: options.label }),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\twrites.push(\n\t\t\t\t\tsetValue(operationMetaValue(operationId), meta),\n\t\t\t\t\tsetValue(operationStateValue(operationId), operationState),\n\t\t\t\t\tsetValue(laneStateValue(this.name), durableLaneState(state, operationId)),\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"commit\",\n\t\t\t\t\twrites,\n\t\t\t\t\tnext: { ...state, operation: { meta, state: operationState } },\n\t\t\t\t\tmaterialize: () => Result.ok({ operationId, kind: \"navigation\", startedAt }),\n\t\t\t\t\tevents: () => [{ type: \"navigation_start\", lane: this.name, runId: operationId, targetId, startedAt }],\n\t\t\t\t};\n\t\t\t}, context);\n\t\t\tif (accepted !== undefined) return accepted;\n\t\t}\n\t}\n\n\tasync drive(options: DriveOptions, context: Context): Promise<DriveResult> {\n\t\tif (this.closedError instanceof HarnessClosed) {\n\t\t\treturn Result.err(new Closed({ message: this.closedError.message }));\n\t\t}\n\t\tthis.assertOpen();\n\n\t\tfor (;;) {\n\t\t\tconst claim = await this.command<DriveClaim>(async (state, reader) => {\n\t\t\t\tconst signal = context.abortSignal;\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\tconst reason: unknown = signal.reason;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"reject\",\n\t\t\t\t\t\terror: reason instanceof Error ? reason : new DOMException(\"The operation was aborted\", \"AbortError\"),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (state.operation?.meta.operationId === options.operationId) {\n\t\t\t\t\tif (this.activeDrive === undefined) {\n\t\t\t\t\t\tconst drive = new Drive(options, context);\n\t\t\t\t\t\tthis.activeDrive = drive;\n\t\t\t\t\t\tthis.signalStateChange();\n\t\t\t\t\t\treturn { kind: \"return\", result: { kind: \"observe\", drive, installed: true } };\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"return\",\n\t\t\t\t\t\tresult:\n\t\t\t\t\t\t\tthis.activeDrive.operationId === options.operationId\n\t\t\t\t\t\t\t\t? { kind: \"observe\", drive: this.activeDrive, installed: false }\n\t\t\t\t\t\t\t\t: { kind: \"occupied\", drive: this.activeDrive },\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst stored = await reader.getValue(operationResultValue(options.operationId), context);\n\t\t\t\treturn stored === undefined\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tkind: \"return\",\n\t\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\t\tkind: \"mismatch\",\n\t\t\t\t\t\t\t\terror: this.mismatch(\n\t\t\t\t\t\t\t\t\toptions.operationId,\n\t\t\t\t\t\t\t\t\tstate.operation?.meta.operationId ?? null,\n\t\t\t\t\t\t\t\t\tstate.lastOperationId,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: { kind: \"return\", result: { kind: \"settled\", outcome: stored.value } };\n\t\t\t}, context);\n\n\t\t\tif (claim.kind === \"settled\") return Result.ok({ kind: \"settled\", outcome: claim.outcome });\n\t\t\tif (claim.kind === \"mismatch\") return Result.err(claim.error);\n\t\t\tif (claim.kind === \"occupied\") {\n\t\t\t\tawait awaitWithContext(claim.drive.completion, context);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (claim.installed) {\n\t\t\t\tvoid driveOperation(this, claim.drive).then(\n\t\t\t\t\t(outcome) => {\n\t\t\t\t\t\tif (this.activeDrive === claim.drive) {\n\t\t\t\t\t\t\tthis.activeDrive = undefined;\n\t\t\t\t\t\t\tthis.signalStateChange();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclaim.drive.settle(outcome);\n\t\t\t\t\t},\n\t\t\t\t\t(error: unknown) => {\n\t\t\t\t\t\tlet failure: unknown = this.closedError;\n\t\t\t\t\t\tif (failure === undefined) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tfailure = this.onFault(error, claim.drive.context);\n\t\t\t\t\t\t\t} catch (faultError) {\n\t\t\t\t\t\t\t\tfailure = faultError;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.activeDrive === claim.drive) {\n\t\t\t\t\t\t\tthis.activeDrive = undefined;\n\t\t\t\t\t\t\tthis.signalStateChange();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclaim.drive.fail(failure);\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn Result.ok(await awaitWithContext(claim.drive.completion, context));\n\t\t}\n\t}\n\n\t/** Package-private durable cancellation primitive. Public exposure remains guarded until M8. */\n\tasync requestOperationAbort(operationId: string, context: Context): Promise<AbortRequestResult> {\n\t\tif (this.closedError instanceof HarnessClosed) {\n\t\t\treturn Result.err(new Closed({ message: this.closedError.message }));\n\t\t}\n\t\tthis.assertOpen();\n\n\t\tconst drive = this.activeDrive?.operationId === operationId ? this.activeDrive : undefined;\n\t\tlet resolveCancellation!: () => void;\n\t\tlet rejectCancellation!: (error: unknown) => void;\n\t\tconst cancellation = new Promise<void>((resolve, reject) => {\n\t\t\tresolveCancellation = resolve;\n\t\t\trejectCancellation = reject;\n\t\t});\n\t\tvoid cancellation.catch(() => {});\n\t\tdrive?.beginAbort(cancellation);\n\t\tlet gateSettled = false;\n\t\tconst settleGate = (signal: boolean): void => {\n\t\t\tif (gateSettled) return;\n\t\t\tgateSettled = true;\n\t\t\tresolveCancellation();\n\t\t\tif (signal) drive?.signalAbort();\n\t\t};\n\n\t\ttry {\n\t\t\tconst result = await this.command<AbortRequestResult>(async (state, reader) => {\n\t\t\t\tconst operation = state.operation;\n\t\t\t\tif (operation?.meta.operationId !== operationId) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"return\",\n\t\t\t\t\t\tresult: Result.err(\n\t\t\t\t\t\t\tthis.mismatch(operationId, operation?.meta.operationId ?? null, state.lastOperationId),\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (operation.state.control.status === \"cancel_requested\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"return\",\n\t\t\t\t\t\tresult: Result.ok({ operationId, newlyRequested: false, steer: [], followUp: [] }),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst removed = state.inbox.filter((item) => item.kind === \"steer\" || item.kind === \"followUp\");\n\t\t\t\tconst payloads = await Promise.all(\n\t\t\t\t\tremoved.map(async (item) => {\n\t\t\t\t\t\tconst stored = await reader.getValue(pendingEntry(item.entryId), context);\n\t\t\t\t\t\tif (stored?.value.type !== \"message\") {\n\t\t\t\t\t\t\tthrow new SessionInvariantError(\n\t\t\t\t\t\t\t\t`Pending ${item.kind} entry ${item.entryId} is missing its message`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { item, message: stored.value.payload };\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tconst steer = payloads.filter(({ item }) => item.kind === \"steer\").map(({ message }) => message);\n\t\t\t\tconst followUp = payloads.filter(({ item }) => item.kind === \"followUp\").map(({ message }) => message);\n\t\t\t\tconst removedIds = new Set(removed.map((item) => item.entryId));\n\t\t\t\tconst inbox = state.inbox.filter((item) => !removedIds.has(item.entryId));\n\t\t\t\tconst queues = await readLaneQueues(reader, inbox, context);\n\t\t\t\tconst operationState: OperationState = {\n\t\t\t\t\t...operation.state,\n\t\t\t\t\tcontrol: { status: \"cancel_requested\", requestedAt: Date.now() },\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"commit\",\n\t\t\t\t\twrites: [\n\t\t\t\t\t\t...removed.map((item) => deleteValue(pendingEntry(item.entryId))),\n\t\t\t\t\t\tsetValue(operationStateValue(operationId), operationState),\n\t\t\t\t\t\tsetValue(laneStateValue(this.name), durableLaneState(state, operationId, inbox)),\n\t\t\t\t\t],\n\t\t\t\t\tnext: { ...state, inbox, operation: { meta: operation.meta, state: operationState } },\n\t\t\t\t\tmaterialize: () => {\n\t\t\t\t\t\tsettleGate(true);\n\t\t\t\t\t\treturn Result.ok({ operationId, newlyRequested: true, steer, followUp });\n\t\t\t\t\t},\n\t\t\t\t\tevents: () => [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"operation_abort\",\n\t\t\t\t\t\t\toperationId,\n\t\t\t\t\t\t\tsteer,\n\t\t\t\t\t\t\tfollowUp,\n\t\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...(removed.length === 0 ? [] : [{ type: \"queue_update\" as const, queues, lane: this.name }]),\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t}, context);\n\t\t\t// A fresh Drive may observe an already-durable marker; pull its gate on the repeat path too. A mismatch\n\t\t\t// can leave only the stale Drive's admission gate in aborting state; its cancellation wait is still released.\n\t\t\tsettleGate(result.ok && result.value.newlyRequested === false);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (!gateSettled) rejectCancellation(error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\trequestAbort(operationId: string, context: Context): Promise<AbortRequestResult> {\n\t\treturn this.requestOperationAbort(operationId, context);\n\t}\n\n\tinspectExecution(context: Context): Promise<LaneExecutionInfo> {\n\t\treturn this.readLane((state) => {\n\t\t\tconst operation = state.operation;\n\t\t\tconst captured = operation === null ? undefined : capturedModel(operation);\n\t\t\tconst current =\n\t\t\t\toperation === null\n\t\t\t\t\t? null\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tid: operation.meta.operationId,\n\t\t\t\t\t\t\tkind: operation.meta.intent.kind,\n\t\t\t\t\t\t\tstatus:\n\t\t\t\t\t\t\t\toperation.state.control.status === \"cancel_requested\"\n\t\t\t\t\t\t\t\t\t? (\"aborting\" as const)\n\t\t\t\t\t\t\t\t\t: (\"open\" as const),\n\t\t\t\t\t\t\tstartedAt: operation.meta.startedAt,\n\t\t\t\t\t\t\t...(captured === undefined ? {} : { capturedModel: captured }),\n\t\t\t\t\t\t};\n\t\t\treturn {\n\t\t\t\tlane: this.name,\n\t\t\t\ttipId: state.tipId,\n\t\t\t\tconfiguredModel: state.configuration.model,\n\t\t\t\tcurrent,\n\t\t\t\tlastOperationId: state.lastOperationId,\n\t\t\t};\n\t\t}, context);\n\t}\n\n\tasync prompt(\n\t\t...args:\n\t\t\t| [text: string, images: ImageContent[] | undefined, context: Context]\n\t\t\t| [message: AgentMessage | AgentMessage[], context: Context]\n\t): Promise<RunResult> {\n\t\tif (args.length === 3) {\n\t\t\treturn this.driveRunRequest(\n\t\t\t\t{ kind: \"prompt\", prompt: args[0], ...(args[1] === undefined ? {} : { images: args[1] }) },\n\t\t\t\targs[2],\n\t\t\t);\n\t\t}\n\t\treturn this.driveRunRequest({ kind: \"prompt\", prompt: args[0] }, args[1]);\n\t}\n\n\tskill(name: string, additionalInstructions: string | undefined, context: Context): Promise<RunResult> {\n\t\treturn this.driveRunRequest(\n\t\t\t{ kind: \"skill\", name, ...(additionalInstructions === undefined ? {} : { additionalInstructions }) },\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tpromptFromTemplate(name: string, args: string[] | undefined, context: Context): Promise<RunResult> {\n\t\treturn this.driveRunRequest({ kind: \"prompt_template\", name, ...(args === undefined ? {} : { args }) }, context);\n\t}\n\n\tprivate async driveRunRequest(\n\t\trequest: Extract<OperationRequest, { kind: \"prompt\" | \"skill\" | \"prompt_template\" }>,\n\t\tcontext: Context,\n\t): Promise<RunResult> {\n\t\tconst admission = await this.accept(request, context);\n\t\tif (!admission.ok) {\n\t\t\tswitch (admission.error._tag) {\n\t\t\t\tcase \"LaneBusy\":\n\t\t\t\tcase \"InvalidMessage\":\n\t\t\t\tcase \"UnknownSkill\":\n\t\t\t\tcase \"UnknownTemplate\":\n\t\t\t\tcase \"Closed\":\n\t\t\t\t\treturn Result.err(admission.error);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow this.onFault(\n\t\t\t\t\t\tnew SessionInvariantError(`Run acceptance returned ${admission.error._tag}`),\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconst driven = await this.drive({ operationId: admission.value.operationId, waitForRetry: true }, context);\n\t\tif (!driven.ok) {\n\t\t\tif (driven.error._tag === \"Closed\") return Result.err(driven.error);\n\t\t\tthrow this.onFault(\n\t\t\t\tnew SessionInvariantError(`Accepted run ${admission.value.operationId} no longer matches its lane`),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t\tif (driven.value.kind === \"settled\") return Result.ok(driven.value.outcome);\n\t\tif (driven.value.reason === \"deferred\") {\n\t\t\treturn Result.ok({\n\t\t\t\toperationId: admission.value.operationId,\n\t\t\t\tstatus: \"suspended\",\n\t\t\t\tdeferred: driven.value.deferred,\n\t\t\t});\n\t\t}\n\t\tthrow this.onFault(\n\t\t\tnew SessionInvariantError(`Run ${admission.value.operationId} returned an unwaited retry`),\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync compact(options: { customInstructions?: string } | undefined, context: Context): Promise<CompactionResult> {\n\t\tconst admission = await this.accept(\n\t\t\t{\n\t\t\t\tkind: \"compaction\",\n\t\t\t\t...(options?.customInstructions === undefined ? {} : { customInstructions: options.customInstructions }),\n\t\t\t},\n\t\t\tcontext,\n\t\t);\n\t\tif (!admission.ok) {\n\t\t\tswitch (admission.error._tag) {\n\t\t\t\tcase \"LaneBusy\":\n\t\t\t\tcase \"NothingToCompact\":\n\t\t\t\tcase \"Closed\":\n\t\t\t\t\treturn Result.err(admission.error);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow this.onFault(\n\t\t\t\t\t\tnew SessionInvariantError(`Compaction acceptance returned ${admission.error._tag}`),\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconst compacted = await this.driveStructuralAdmission(admission.value, context);\n\t\tif (!compacted.ok) return compacted;\n\t\tconst continuation = await this.continueAfterStructural(compacted.value, context);\n\t\treturn continuation.ok\n\t\t\t? Result.ok({\n\t\t\t\t\tcompaction: compacted.value,\n\t\t\t\t\t...(continuation.value === undefined ? {} : { run: continuation.value }),\n\t\t\t\t})\n\t\t\t: continuation;\n\t}\n\n\tasync navigateTree(\n\t\ttargetId: string | null,\n\t\toptions: Extract<OperationRequest, { kind: \"navigation\" }>[\"options\"],\n\t\tcontext: Context,\n\t): Promise<NavigationResult> {\n\t\tconst admission = await this.accept(\n\t\t\t{ kind: \"navigation\", targetId, ...(options === undefined ? {} : { options }) },\n\t\t\tcontext,\n\t\t);\n\t\tif (!admission.ok) {\n\t\t\tswitch (admission.error._tag) {\n\t\t\t\tcase \"LaneBusy\":\n\t\t\t\tcase \"InvalidNavigation\":\n\t\t\t\tcase \"UnknownTarget\":\n\t\t\t\tcase \"Closed\":\n\t\t\t\t\treturn Result.err(admission.error);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow this.onFault(\n\t\t\t\t\t\tnew SessionInvariantError(`Navigation acceptance returned ${admission.error._tag}`),\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconst navigated = await this.driveStructuralAdmission(admission.value, context);\n\t\tif (!navigated.ok) return navigated;\n\t\tconst continuation = await this.continueAfterStructural(navigated.value, context);\n\t\treturn continuation.ok\n\t\t\t? Result.ok({\n\t\t\t\t\tnavigation: navigated.value,\n\t\t\t\t\t...(continuation.value === undefined ? {} : { run: continuation.value }),\n\t\t\t\t})\n\t\t\t: continuation;\n\t}\n\n\tprivate async driveStructuralAdmission(\n\t\tadmission: OperationAdmission,\n\t\tcontext: Context,\n\t): Promise<Result<OperationResultRecord, Closed>> {\n\t\tconst driven = await this.drive({ operationId: admission.operationId, waitForRetry: true }, context);\n\t\tif (!driven.ok) {\n\t\t\tif (driven.error._tag === \"Closed\") return Result.err(driven.error);\n\t\t\tthrow this.onFault(\n\t\t\t\tnew SessionInvariantError(`Accepted ${admission.kind} ${admission.operationId} no longer matches its lane`),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t\tif (driven.value.kind === \"settled\") return Result.ok(driven.value.outcome);\n\t\tthrow this.onFault(\n\t\t\tnew SessionInvariantError(`${admission.kind} ${admission.operationId} returned ${driven.value.reason}`),\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tprivate async continueAfterStructural(\n\t\trecord: OperationResultRecord,\n\t\tcontext: Context,\n\t): Promise<Result<OperationResultRecord | SuspendedRun | undefined, Closed>> {\n\t\tif (record.status === \"aborted\") return Result.ok(undefined);\n\t\tconst admission = await this.accept({ kind: \"prompt\", prompt: \"\" }, context);\n\t\tif (!admission.ok) {\n\t\t\tswitch (admission.error._tag) {\n\t\t\t\tcase \"InvalidMessage\":\n\t\t\t\tcase \"LaneBusy\":\n\t\t\t\t\treturn Result.ok(undefined);\n\t\t\t\tcase \"Closed\":\n\t\t\t\t\treturn Result.err(admission.error);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow this.onFault(\n\t\t\t\t\t\tnew SessionInvariantError(`Structural continuation acceptance returned ${admission.error._tag}`),\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconst driven = await this.drive({ operationId: admission.value.operationId, waitForRetry: true }, context);\n\t\tif (!driven.ok) {\n\t\t\tif (driven.error._tag === \"Closed\") return Result.err(driven.error);\n\t\t\tthrow this.onFault(\n\t\t\t\tnew SessionInvariantError(`Continuation run ${admission.value.operationId} no longer matches its lane`),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t\tif (driven.value.kind === \"settled\") return Result.ok(driven.value.outcome);\n\t\tif (driven.value.reason === \"deferred\") {\n\t\t\treturn Result.ok({\n\t\t\t\toperationId: admission.value.operationId,\n\t\t\t\tstatus: \"suspended\",\n\t\t\t\tdeferred: driven.value.deferred,\n\t\t\t});\n\t\t}\n\t\tthrow this.onFault(\n\t\t\tnew SessionInvariantError(`Continuation run ${admission.value.operationId} returned an unwaited retry`),\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync resume(context: Context): Promise<ResumeResult> {\n\t\tif (this.closedError instanceof HarnessClosed) {\n\t\t\treturn Result.err(new Closed({ message: this.closedError.message }));\n\t\t}\n\t\tthis.assertOpen();\n\t\tconst inspected = await this.command<Result<{ operationId: string }, NothingToResume>>((state) => {\n\t\t\tconst operation = state.operation;\n\t\t\treturn operation === null\n\t\t\t\t? {\n\t\t\t\t\t\tkind: \"return\",\n\t\t\t\t\t\tresult: Result.err(\n\t\t\t\t\t\t\tnew NothingToResume({\n\t\t\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\t\t\tmessage: `Lane ${JSON.stringify(this.name)} has no active operation to resume`,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t}\n\t\t\t\t: { kind: \"return\", result: Result.ok({ operationId: operation.meta.operationId }) };\n\t\t}, context);\n\t\tif (!inspected.ok) return inspected;\n\n\t\tconst driven = await this.drive(\n\t\t\t{ operationId: inspected.value.operationId, pollDeferred: true, waitForRetry: true },\n\t\t\tcontext,\n\t\t);\n\t\tif (!driven.ok) {\n\t\t\tif (driven.error._tag === \"Closed\") return Result.err(driven.error);\n\t\t\tthrow this.onFault(\n\t\t\t\tnew SessionInvariantError(`Operation ${inspected.value.operationId} no longer matches its lane`),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t\tif (driven.value.kind === \"settled\") return Result.ok(driven.value.outcome);\n\t\tif (driven.value.reason === \"deferred\") {\n\t\t\treturn Result.ok({\n\t\t\t\toperationId: inspected.value.operationId,\n\t\t\t\tstatus: \"suspended\",\n\t\t\t\tdeferred: driven.value.deferred,\n\t\t\t});\n\t\t}\n\t\tthrow this.onFault(\n\t\t\tnew SessionInvariantError(`Operation ${inspected.value.operationId} returned an unwaited retry`),\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync abort(context: Context): Promise<AbortResult> {\n\t\tif (this.closedError instanceof HarnessClosed) {\n\t\t\treturn Result.err(new Closed({ message: this.closedError.message }));\n\t\t}\n\t\tthis.assertOpen();\n\t\tconst operationId = await this.command(\n\t\t\t(state) => ({\n\t\t\t\tkind: \"return\",\n\t\t\t\tresult: state.operation?.meta.operationId,\n\t\t\t}),\n\t\t\tcontext,\n\t\t);\n\t\tif (operationId === undefined) {\n\t\t\treturn Result.err(\n\t\t\t\tnew NoActiveOperation({\n\t\t\t\t\tlane: this.name,\n\t\t\t\t\tmessage: `Lane ${JSON.stringify(this.name)} has no active operation`,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tconst requested = await this.requestAbort(operationId, context);\n\t\tif (!requested.ok) {\n\t\t\tif (requested.error._tag === \"Closed\") return Result.err(requested.error);\n\t\t\treturn Result.err(\n\t\t\t\tnew NoActiveOperation({\n\t\t\t\t\tlane: this.name,\n\t\t\t\t\tmessage: `Lane ${JSON.stringify(this.name)} no longer has the inspected operation`,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tconst driven = await this.drive({ operationId }, context);\n\t\tif (!driven.ok && driven.error._tag === \"Closed\") return Result.err(driven.error);\n\t\tif (!driven.ok) {\n\t\t\tthrow this.onFault(\n\t\t\t\tnew SessionInvariantError(`Cancelled operation ${operationId} no longer matches its lane`),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t\treturn Result.ok({\n\t\t\toperationId,\n\t\t\tsteer: requested.value.steer,\n\t\t\tfollowUp: requested.value.followUp,\n\t\t});\n\t}\n\n\tsteer(message: string | AgentMessage, images: ImageContent[] | undefined, context: Context): Promise<QueueResult> {\n\t\treturn this.enqueue(\"steer\", message, images, context);\n\t}\n\n\tfollowUp(\n\t\tmessage: string | AgentMessage,\n\t\timages: ImageContent[] | undefined,\n\t\tcontext: Context,\n\t): Promise<QueueResult> {\n\t\treturn this.enqueue(\"followUp\", message, images, context);\n\t}\n\n\tnextRun(message: string | AgentMessage, images: ImageContent[] | undefined, context: Context): Promise<QueueResult> {\n\t\treturn this.enqueue(\"nextRun\", message, images, context);\n\t}\n\n\tprivate async enqueue(\n\t\tkind: \"steer\" | \"followUp\" | \"nextRun\",\n\t\tinput: string | AgentMessage,\n\t\timages: ImageContent[] | undefined,\n\t\tcontext: Context,\n\t): Promise<QueueResult> {\n\t\tif (this.closedError instanceof HarnessClosed) {\n\t\t\treturn Result.err(new Closed({ message: this.closedError.message }));\n\t\t}\n\t\tthis.assertOpen();\n\t\tconst at = Date.now();\n\t\tlet message: AgentMessage;\n\t\tif (typeof input === \"string\") {\n\t\t\tif (input.length === 0 && (images === undefined || images.length === 0)) {\n\t\t\t\treturn Result.err(\n\t\t\t\t\tnew InvalidMessage({\n\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\treason: \"empty\",\n\t\t\t\t\t\tmessage: \"Queued input must contain text or an image\",\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tmessage = {\n\t\t\t\trole: \"user\",\n\t\t\t\tcontent: [...(input.length === 0 ? [] : [{ type: \"text\" as const, text: input }]), ...(images ?? [])],\n\t\t\t\ttimestamp: at,\n\t\t\t};\n\t\t} else {\n\t\t\tif (input.role === \"assistant\" && input.stopReason === \"pending\") {\n\t\t\t\treturn Result.err(\n\t\t\t\t\tnew InvalidMessage({\n\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\treason: \"pending_assistant\",\n\t\t\t\t\t\tmessage: \"Cannot queue a pending assistant message\",\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (images !== undefined && images.length > 0 && input.role !== \"user\") {\n\t\t\t\treturn Result.err(\n\t\t\t\t\tnew InvalidMessage({\n\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\treason: \"images_with_non_user\",\n\t\t\t\t\t\tmessage: \"Images can be added only to queued user messages\",\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tmessage =\n\t\t\t\timages === undefined || images.length === 0 || input.role !== \"user\"\n\t\t\t\t\t? structuredClone(input)\n\t\t\t\t\t: {\n\t\t\t\t\t\t\t...structuredClone(input),\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t...(typeof input.content === \"string\"\n\t\t\t\t\t\t\t\t\t? input.content.length === 0\n\t\t\t\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t\t\t\t: [{ type: \"text\" as const, text: input.content }]\n\t\t\t\t\t\t\t\t\t: input.content),\n\t\t\t\t\t\t\t\t...images,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t};\n\t\t}\n\t\tconst entryId = this.session.idGenerator.next(at);\n\t\treturn this.command<QueueResult>(async (state, reader) => {\n\t\t\tconst inbox = [...state.inbox, { entryId, kind }];\n\t\t\tconst queues = [\n\t\t\t\t...(await readLaneQueues(reader, state.inbox, context)),\n\t\t\t\t{ entryId, kind, type: \"message\" as const, message },\n\t\t\t];\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [\n\t\t\t\t\tsetValue(pendingEntry(entryId), { type: \"message\", payload: message }),\n\t\t\t\t\tsetValue(\n\t\t\t\t\t\tlaneStateValue(this.name),\n\t\t\t\t\t\tdurableLaneState(state, state.operation?.meta.operationId ?? null, inbox),\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t\tnext: { ...state, inbox },\n\t\t\t\tmaterialize: () => Result.ok({ entryId }),\n\t\t\t\tevents: () => [{ type: \"queue_update\", queues, lane: this.name }],\n\t\t\t};\n\t\t}, context);\n\t}\n\n\tasync cancelQueued(entryId: string, context: Context): Promise<CancelQueuedResult> {\n\t\tif (this.closedError instanceof HarnessClosed) {\n\t\t\treturn Result.err(new Closed({ message: this.closedError.message }));\n\t\t}\n\t\tthis.assertOpen();\n\t\treturn this.command<CancelQueuedResult>(async (state, reader) => {\n\t\t\tconst queued = state.inbox.find((item) => item.entryId === entryId);\n\t\t\tif (queued === undefined) {\n\t\t\t\tconst consumed = (await reader.getEntries([entryId], context)).has(entryId);\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"return\",\n\t\t\t\t\tresult: Result.ok({ kind: consumed ? \"already_consumed\" : \"not_found\" }),\n\t\t\t\t};\n\t\t\t}\n\t\t\tif ((await reader.getValue(pendingEntry(entryId), context)) === undefined) {\n\t\t\t\tthrow new SessionInvariantError(`Queued ${queued.kind} entry ${entryId} is missing its payload`);\n\t\t\t}\n\t\t\tconst inbox = state.inbox.filter((item) => item.entryId !== entryId);\n\t\t\tconst queues = await readLaneQueues(reader, inbox, context);\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [\n\t\t\t\t\tdeleteValue(pendingEntry(entryId)),\n\t\t\t\t\tsetValue(\n\t\t\t\t\t\tlaneStateValue(this.name),\n\t\t\t\t\t\tdurableLaneState(state, state.operation?.meta.operationId ?? null, inbox),\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t\tnext: { ...state, inbox },\n\t\t\t\tmaterialize: () => Result.ok({ kind: \"cancelled\" }),\n\t\t\t\tevents: () => [{ type: \"queue_update\", queues, lane: this.name }],\n\t\t\t};\n\t\t}, context);\n\t}\n\n\tasync recordUsage(\n\t\tusage: Usage,\n\t\toptions: { entryId?: string; details?: JsonValue } | undefined,\n\t\tcontext: Context,\n\t): Promise<RecordUsageResult> {\n\t\tif (this.closedError instanceof HarnessClosed) {\n\t\t\treturn Result.err(new Closed({ message: this.closedError.message }));\n\t\t}\n\t\tthis.assertOpen();\n\t\treturn this.command<RecordUsageResult>((state) => {\n\t\t\tconst usageId = this.session.idGenerator.next();\n\t\t\tconst row = {\n\t\t\t\tid: usageId,\n\t\t\t\tusage,\n\t\t\t\tadjustment: true,\n\t\t\t\t...(options?.entryId === undefined ? {} : { entryId: options.entryId }),\n\t\t\t\t...(options?.details === undefined ? {} : { details: options.details }),\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [insertUsage(row)],\n\t\t\t\tnext: state,\n\t\t\t\tmaterialize: () => Result.ok({ usageId }),\n\t\t\t\tevents: (commit) => [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"usage\",\n\t\t\t\t\t\tlane: this.name,\n\t\t\t\t\t\trow: { ...row, seq: commit.seqs[0]! },\n\t\t\t\t\t\ttotals: commit.stats.usage,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}, context);\n\t}\n\n\tasync waitForIdle(context: Context): Promise<void> {\n\t\tfor (;;) {\n\t\t\tconst observation = await this.command<IdleObservation>(\n\t\t\t\t(state) => ({\n\t\t\t\t\tkind: \"return\",\n\t\t\t\t\tresult:\n\t\t\t\t\t\tstate.operation === null && this.activeDrive === undefined\n\t\t\t\t\t\t\t? { kind: \"idle\" }\n\t\t\t\t\t\t\t: { kind: \"wait\", drive: this.activeDrive, change: this.stateChange },\n\t\t\t\t}),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tif (observation.kind === \"idle\") return;\n\t\t\tawait awaitWithContext(\n\t\t\t\tobservation.drive === undefined ? observation.change : observation.drive.completion.then(() => undefined),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t}\n\n\tasync runWhenIdle(callback: (context: Context) => void | Promise<void>, context: Context): Promise<void> {\n\t\tlet owner: Promise<void> | undefined;\n\t\tlet releaseOwner: (() => void) | undefined;\n\t\tfor (;;) {\n\t\t\tconst observation = await this.command<IdleClaimObservation>((state) => {\n\t\t\t\tif (state.operation !== null || this.activeDrive !== undefined) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"return\",\n\t\t\t\t\t\tresult: { kind: \"wait\", drive: this.activeDrive, change: this.stateChange },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tlet release!: () => void;\n\t\t\t\tconst claimed = new Promise<void>((resolve) => {\n\t\t\t\t\trelease = resolve;\n\t\t\t\t});\n\t\t\t\towner = claimed;\n\t\t\t\treleaseOwner = release;\n\t\t\t\tthis.idleOwner = claimed;\n\t\t\t\tthis.signalStateChange();\n\t\t\t\treturn { kind: \"return\", result: { kind: \"claimed\" } };\n\t\t\t}, context);\n\t\t\tif (observation.kind === \"claimed\") break;\n\t\t\tawait awaitWithContext(\n\t\t\t\tobservation.drive === undefined ? observation.change : observation.drive.completion.then(() => undefined),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t\tif (owner === undefined || releaseOwner === undefined) {\n\t\t\tthrow this.onFault(new SessionInvariantError(\"Idle callback claim was not published\"), context);\n\t\t}\n\t\ttry {\n\t\t\tthis.assertOpen();\n\t\t\tawait callback(context);\n\t\t} finally {\n\t\t\tif (this.idleOwner === owner) this.idleOwner = undefined;\n\t\t\treleaseOwner();\n\t\t\tthis.signalStateChange();\n\t\t}\n\t}\n\n\tasync getModel(_context: Context): Promise<Model<Api> | undefined> {\n\t\tthis.assertOpen();\n\t\treturn this.models.getModel(this.state.configuration.model.provider, this.state.configuration.model.modelId);\n\t}\n\n\tsetModel(model: ModelIdentity, context: Context): Promise<void> {\n\t\treturn this.setConfiguration(\n\t\t\t(configuration) => ({\n\t\t\t\t...configuration,\n\t\t\t\tmodel: { ...model },\n\t\t\t}),\n\t\t\t(previous, value) => ({\n\t\t\t\ttype: \"config_update\",\n\t\t\t\tproperty: \"model\",\n\t\t\t\tprevious: previous.model,\n\t\t\t\tvalue: value.model,\n\t\t\t}),\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync getThinkingLevel(_context: Context): Promise<ThinkingLevel> {\n\t\tthis.assertOpen();\n\t\treturn this.state.configuration.thinkingLevel;\n\t}\n\n\tsetThinkingLevel(thinkingLevel: ThinkingLevel, context: Context): Promise<void> {\n\t\treturn this.setConfiguration(\n\t\t\t(configuration) => ({ ...configuration, thinkingLevel }),\n\t\t\t(previous, value) => ({\n\t\t\t\ttype: \"config_update\",\n\t\t\t\tproperty: \"thinkingLevel\",\n\t\t\t\tprevious: previous.thinkingLevel,\n\t\t\t\tvalue: value.thinkingLevel,\n\t\t\t}),\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync getActiveTools(_context: Context): Promise<string[]> {\n\t\tthis.assertOpen();\n\t\treturn this.state.configuration.activeToolNames;\n\t}\n\n\tsetActiveTools(activeToolNames: string[], context: Context): Promise<void> {\n\t\treturn this.setConfiguration(\n\t\t\t(configuration) => ({ ...configuration, activeToolNames }),\n\t\t\t(previous, value) => ({\n\t\t\t\ttype: \"config_update\",\n\t\t\t\tproperty: \"activeTools\",\n\t\t\t\tprevious: previous.activeToolNames,\n\t\t\t\tvalue: value.activeToolNames,\n\t\t\t}),\n\t\t\tcontext,\n\t\t);\n\t}\n\n\twatch(context: Context): Promise<WatchHandle<LaneSnapshot>> {\n\t\treturn this.readLane(async (state, reader) => {\n\t\t\tconst watcher = this.installWatch<LaneSnapshot>(\n\t\t\t\t{} as LaneSnapshot,\n\t\t\t\t(event) => event.type === \"usage\" || !(\"lane\" in event) || event.lane === this.name,\n\t\t\t\tcontext,\n\t\t\t\t(resnapshotContext, markBoundary) =>\n\t\t\t\t\tthis.readLane(async (latest, latestReader) => {\n\t\t\t\t\t\tconst snapshot = await this.captureLaneSnapshot(latest, latestReader, resnapshotContext);\n\t\t\t\t\t\tmarkBoundary();\n\t\t\t\t\t\treturn snapshot;\n\t\t\t\t\t}, resnapshotContext),\n\t\t\t);\n\t\t\ttry {\n\t\t\t\twatcher.snapshot = await this.captureLaneSnapshot(state, reader, context);\n\t\t\t\treturn watcher;\n\t\t\t} catch (error) {\n\t\t\t\twatcher.unsubscribe();\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}, context);\n\t}\n\n\tprivate async captureLaneSnapshot(state: LaneState, reader: SessionReader, context: Context): Promise<LaneSnapshot> {\n\t\tconst captured = structuredClone(state);\n\t\tconst transcript =\n\t\t\tcaptured.tipId === null\n\t\t\t\t? []\n\t\t\t\t: (\n\t\t\t\t\t\tawait reader.scanBranch(\n\t\t\t\t\t\t\t{ start: captured.tipId, stopAtType: \"compaction\", order: \"newestFirst\" },\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t)\n\t\t\t\t\t).reverse();\n\t\tconst queues = await readLaneQueues(reader, captured.inbox, context);\n\t\tlet lastResult: OperationResultRecord | undefined;\n\t\tif (captured.lastOperationId !== null) {\n\t\t\tconst stored = await reader.getValue(operationResultValue(captured.lastOperationId), context);\n\t\t\tif (stored === undefined) {\n\t\t\t\tthrow new SessionInvariantError(\n\t\t\t\t\t`Lane ${JSON.stringify(this.name)} is missing result ${captured.lastOperationId}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tlastResult = stored.value;\n\t\t}\n\t\tconst stats = await reader.getStats(context);\n\t\tconst operation = captured.operation;\n\n\t\tlet operationSnapshot: NonNullable<LaneSnapshot[\"operation\"]> | null = null;\n\t\tif (operation !== null) {\n\t\t\tconst runningTools: NonNullable<LaneSnapshot[\"operation\"]>[\"runningTools\"] = [];\n\t\t\tlet streamingMessage: NonNullable<LaneSnapshot[\"operation\"]>[\"streamingMessage\"];\n\t\t\tlet retry: NonNullable<LaneSnapshot[\"operation\"]>[\"retry\"];\n\t\t\tlet deferred: NonNullable<LaneSnapshot[\"operation\"]>[\"deferred\"];\n\t\t\tconst readStreamingMessage = async (responseEntryId: string) =>\n\t\t\t\treduceAssistantMessageFrames(\n\t\t\t\t\tawait readAssistantFrames(reader, operation.meta.operationId, responseEntryId, context),\n\t\t\t\t);\n\t\t\tconst state = operation.state;\n\t\t\tswitch (state.at) {\n\t\t\t\tcase \"assistant.retry_wait\":\n\t\t\t\t\tretry = {\n\t\t\t\t\t\tattempt: state.nextAttempt,\n\t\t\t\t\t\tmaxAttempts: state.generationContext.retryPolicy.maxAttempts,\n\t\t\t\t\t\tnextAttemptAt: state.notBefore,\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"assistant.effect_pending\":\n\t\t\t\t\tstreamingMessage = await readStreamingMessage(state.responseEntryId);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"deferred.suspended\":\n\t\t\t\tcase \"deferred.effect_pending\": {\n\t\t\t\t\tconst source = (await reader.getEntries([state.sourceEntryId], context)).get(state.sourceEntryId);\n\t\t\t\t\tif (\n\t\t\t\t\t\tsource?.type !== \"message\" ||\n\t\t\t\t\t\tsource.message.role !== \"assistant\" ||\n\t\t\t\t\t\tsource.message.deferred === undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new SessionInvariantError(\"Deferred source is missing its assistant handle\");\n\t\t\t\t\t}\n\t\t\t\t\tdeferred = { handle: source.message.deferred, poll: state.poll };\n\t\t\t\t\tif (state.at === \"deferred.effect_pending\") {\n\t\t\t\t\t\tstreamingMessage = await readStreamingMessage(state.responseEntryId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"tools\": {\n\t\t\t\t\tconst { batch } = state;\n\t\t\t\t\tconst assistant = (await reader.getEntries([batch.assistantEntryId], context)).get(\n\t\t\t\t\t\tbatch.assistantEntryId,\n\t\t\t\t\t);\n\t\t\t\t\tif (assistant?.type !== \"message\" || assistant.message.role !== \"assistant\") {\n\t\t\t\t\t\tthrow new SessionInvariantError(\"Tool batch assistant entry is invalid\");\n\t\t\t\t\t}\n\t\t\t\t\tfor (const call of batch.calls) {\n\t\t\t\t\t\tif (call.status === \"planned\" || call.status === \"completed\") continue;\n\t\t\t\t\t\tconst block = assistant.message.content[call.sourceIndex];\n\t\t\t\t\t\tif (block?.type !== \"toolCall\") {\n\t\t\t\t\t\t\tthrow new SessionInvariantError(\n\t\t\t\t\t\t\t\t`Tool call source index ${call.sourceIndex} does not name a tool-call block`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst args = await reader.getValue(\n\t\t\t\t\t\t\toperationToolArgs(operation.meta.operationId, batch.turnId, call.sourceIndex),\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (call.status === \"effect_pending\") {\n\t\t\t\t\t\t\tif (args === undefined) {\n\t\t\t\t\t\t\t\tthrow new SessionInvariantError(`Tool call ${block.id} is missing persisted arguments`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst checkpoint = await reader.getValue(\n\t\t\t\t\t\t\t\tpendingToolOutput(operation.meta.operationId, call.resultEntryId),\n\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\trunningTools.push({\n\t\t\t\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\t\t\t\ttoolCallId: block.id,\n\t\t\t\t\t\t\t\ttoolName: block.name,\n\t\t\t\t\t\t\t\targs: args.value,\n\t\t\t\t\t\t\t\t...(checkpoint === undefined ? {} : { result: checkpoint.value }),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst staged = await reader.getValue(pendingEntry(call.resultEntryId), context);\n\t\t\t\t\t\tif (staged?.value.type !== \"message\" || staged.value.payload.role !== \"toolResult\") {\n\t\t\t\t\t\t\tthrow new SessionInvariantError(`Tool call ${call.resultEntryId} is missing its staged result`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staged.value.payload.toolCallId !== block.id || staged.value.payload.toolName !== block.name) {\n\t\t\t\t\t\t\tthrow new SessionInvariantError(`Tool call ${call.resultEntryId} has a mismatched staged result`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trunningTools.push({\n\t\t\t\t\t\t\tstatus: \"settled\",\n\t\t\t\t\t\t\ttoolCallId: block.id,\n\t\t\t\t\t\t\ttoolName: block.name,\n\t\t\t\t\t\t\targs: args?.value ?? block.arguments,\n\t\t\t\t\t\t\tresult: toolResultFromMessage(staged.value.payload, call.terminate),\n\t\t\t\t\t\t\tisError: staged.value.payload.isError,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"summary.retry_wait\":\n\t\t\t\t\tretry = {\n\t\t\t\t\t\tattempt: state.nextAttempt,\n\t\t\t\t\t\tmaxAttempts: state.summaryContext.retryPolicy.maxAttempts,\n\t\t\t\t\t\tnextAttemptAt: state.notBefore,\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\toperationSnapshot = {\n\t\t\t\tid: operation.meta.operationId,\n\t\t\t\tkind: operation.meta.intent.kind,\n\t\t\t\tstartedAt: operation.meta.startedAt,\n\t\t\t\tfromTipId: operation.meta.sourceTipId,\n\t\t\t\tstatus: operation.state.control.status === \"cancel_requested\" ? \"aborting\" : \"open\",\n\t\t\t\t...(retry === undefined ? {} : { retry }),\n\t\t\t\t...(deferred === undefined ? {} : { deferred }),\n\t\t\t\t...(streamingMessage === undefined ? {} : { streamingMessage }),\n\t\t\t\trunningTools,\n\t\t\t};\n\t\t}\n\n\t\treturn structuredClone({\n\t\t\tlane: this.name,\n\t\t\ttranscript,\n\t\t\ttipId: captured.tipId,\n\t\t\t...(lastResult === undefined ? {} : { lastResult }),\n\t\t\tconfiguration: captured.configuration,\n\t\t\tstats,\n\t\t\toperation: operationSnapshot,\n\t\t\tqueues,\n\t\t\tfaulted: this.closedError instanceof HarnessFault,\n\t\t});\n\t}\n\n\tprivate async setConfiguration(\n\t\tupdate: (configuration: LaneState[\"configuration\"]) => LaneState[\"configuration\"],\n\t\tevent: (previous: LaneState[\"configuration\"], value: LaneState[\"configuration\"]) => LaneConfigEventPayload,\n\t\tcontext: Context,\n\t): Promise<void> {\n\t\tawait this.command((state) => {\n\t\t\tconst configuration = update(state.configuration);\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [setValue(laneConfig(this.name), configuration)],\n\t\t\t\tnext: { ...state, configuration },\n\t\t\t\tmaterialize: () => undefined,\n\t\t\t\tevents: () => [{ ...event(state.configuration, configuration), lane: this.name }],\n\t\t\t};\n\t\t}, context);\n\t}\n\n\tasync findEntries(query: BranchScan | undefined, context: Context): Promise<Entry[]> {\n\t\tquery ??= {};\n\t\tthis.assertOpen();\n\t\tconst start = query.start ?? this.state.tipId;\n\t\treturn start === null\n\t\t\t? []\n\t\t\t: this.session.scanBranch({ ...query, start, order: query.order ?? \"newestFirst\" }, context);\n\t}\n\n\tasync findEntry(query: BranchScan | undefined, context: Context): Promise<Entry | undefined> {\n\t\tquery ??= {};\n\t\treturn (\n\t\t\tawait this.findEntries({ ...query, limit: query.limit === undefined ? 1 : Math.min(query.limit, 1) }, context)\n\t\t)[0];\n\t}\n\n\tappendMessage(message: AgentMessage, context: Context): Promise<string> {\n\t\treturn this.append({ type: \"message\", payload: message }, context);\n\t}\n\n\tappendCustomEntry(customType: string, data: JsonValue | undefined, context: Context): Promise<string> {\n\t\treturn this.append({ type: \"custom\", customType, ...(data === undefined ? {} : { payload: data }) }, context);\n\t}\n\n\tprivate append(pending: PendingEntry, context: Context): Promise<string> {\n\t\tthis.assertOpen();\n\t\tif (\n\t\t\tpending.type === \"message\" &&\n\t\t\tpending.payload.role === \"assistant\" &&\n\t\t\tpending.payload.stopReason === \"pending\"\n\t\t) {\n\t\t\treturn Promise.reject(new SessionPendingAssistantMessageError());\n\t\t}\n\t\tconst id = this.session.idGenerator.next();\n\t\treturn this.command(async (state, reader) => {\n\t\t\tif (state.operation === null) {\n\t\t\t\tconst queued = inboxItems(state.inbox, \"write\");\n\t\t\t\tconst captured = await Promise.all(\n\t\t\t\t\tqueued.map(async (item) => {\n\t\t\t\t\t\tconst stored = await reader.getValue(pendingEntry(item.entryId), context);\n\t\t\t\t\t\tif (stored === undefined) {\n\t\t\t\t\t\t\tthrow new SessionInvariantError(`Pending write ${item.entryId} is missing its payload`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn pendingEntryWrite(item.entryId, stored.value);\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tconst inbox = withoutInboxItems(state.inbox, queued);\n\t\t\t\tconst queues = queued.length === 0 ? undefined : await readLaneQueues(reader, inbox, context);\n\t\t\t\tconst entries = chainEntries(state.tipId, [...captured, pendingEntryWrite(id, pending)]);\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"commit\",\n\t\t\t\t\twrites: [\n\t\t\t\t\t\t...entries.map((entry) => insertEntry(entry)),\n\t\t\t\t\t\t...queued.map((item) => deleteValue(pendingEntry(item.entryId))),\n\t\t\t\t\t\tsetValue(branchTip(this.name), id),\n\t\t\t\t\t\tsetValue(laneStateValue(this.name), durableLaneState(state, null, inbox)),\n\t\t\t\t\t],\n\t\t\t\t\tnext: { ...state, tipId: id, inbox },\n\t\t\t\t\tmaterialize: () => id,\n\t\t\t\t\tevents: (commit) => [\n\t\t\t\t\t\t...committedEntryEvents(entries, commit, this.name),\n\t\t\t\t\t\t...(queues === undefined ? [] : [{ type: \"queue_update\" as const, queues, lane: this.name }]),\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst operation = state.operation;\n\t\t\tconst inbox = [...state.inbox, { entryId: id, kind: \"write\" as const }];\n\t\t\tconst queues = [\n\t\t\t\t...(await readLaneQueues(reader, state.inbox, context)),\n\t\t\t\tpending.type === \"message\"\n\t\t\t\t\t? { entryId: id, kind: \"write\" as const, type: \"message\" as const, message: pending.payload }\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tentryId: id,\n\t\t\t\t\t\t\tkind: \"write\" as const,\n\t\t\t\t\t\t\ttype: \"custom\" as const,\n\t\t\t\t\t\t\tcustomType: pending.customType,\n\t\t\t\t\t\t\t...(pending.payload === undefined ? {} : { data: pending.payload }),\n\t\t\t\t\t\t},\n\t\t\t];\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [\n\t\t\t\t\tsetValue(pendingEntry(id), pending),\n\t\t\t\t\tsetValue(laneStateValue(this.name), durableLaneState(state, operation.meta.operationId, inbox)),\n\t\t\t\t],\n\t\t\t\tnext: { ...state, inbox },\n\t\t\t\tmaterialize: () => id,\n\t\t\t\tevents: () => [{ type: \"queue_update\", queues, lane: this.name }],\n\t\t\t};\n\t\t}, context);\n\t}\n\n\tseal(error: Error): Promise<void> {\n\t\tthis.closedError ??= error;\n\t\tthis.activeDrive?.closeGate(error);\n\t\tthis.signalStateChange();\n\t\treturn this.idleOwner ?? Promise.resolve();\n\t}\n\n\tprivate signalStateChange(): void {\n\t\tthis.resolveStateChange();\n\t\tlet resolveStateChange!: () => void;\n\t\tthis.stateChange = new Promise<void>((resolve) => {\n\t\t\tresolveStateChange = resolve;\n\t\t});\n\t\tthis.resolveStateChange = resolveStateChange;\n\t}\n\n\tassertOpen(): void {\n\t\tif (this.closedError !== undefined) throw this.closedError;\n\t}\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import type { AssistantMessageFrame } from "@earendil-works/pi-ai";
2
+ import type { AgentToolResult } from "../../types.ts";
3
+ import type { Context } from "../context.ts";
4
+ import type { SessionReader } from "../session/types.ts";
5
+ import type { Lane } from "./lane.ts";
6
+ import type { Drive } from "./types.ts";
7
+ export interface ProgressChannel<T> {
8
+ write(item: T): void;
9
+ seal(): void;
10
+ drain(): Promise<void>;
11
+ }
12
+ export declare function readAssistantFrames(reader: SessionReader, operationId: string, responseEntryId: string, context: Context): Promise<AssistantMessageFrame[]>;
13
+ export declare function openFrameProgress<TContext extends object | undefined>(lane: Lane<TContext>, drive: Drive, responseEntryId: string): ProgressChannel<AssistantMessageFrame>;
14
+ export declare function openToolProgress<TContext extends object | undefined>(lane: Lane<TContext>, drive: Drive, turnId: string, sourceIndex: number, invocationId: string): ProgressChannel<AgentToolResult<unknown>>;
15
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/harness/runtime/progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAS,MAAM,qBAAqB,CAAC;AAEhE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,eAAe,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,wBAAsB,mBAAmB,CACxC,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAalC;AAoCD,wBAAgB,iBAAiB,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACpE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,MAAM,GACrB,eAAe,CAAC,qBAAqB,CAAC,CAexC;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACnE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GAClB,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAqB3C","sourcesContent":["import type { AssistantMessageFrame } from \"@earendil-works/pi-ai\";\nimport type { AgentToolResult } from \"../../types.ts\";\nimport type { Context } from \"../context.ts\";\nimport type { SessionReader, Write } from \"../session/types.ts\";\nimport { appendList, pendingAssistantFrames, pendingToolOutput, setValue } from \"../session/values.ts\";\nimport type { Lane } from \"./lane.ts\";\nimport type { Drive, LaneState } from \"./types.ts\";\n\nexport interface ProgressChannel<T> {\n\twrite(item: T): void;\n\tseal(): void;\n\tdrain(): Promise<void>;\n}\n\nexport async function readAssistantFrames(\n\treader: SessionReader,\n\toperationId: string,\n\tresponseEntryId: string,\n\tcontext: Context,\n): Promise<AssistantMessageFrame[]> {\n\tconst frames: AssistantMessageFrame[] = [];\n\tlet cursor: { seq: number } | undefined;\n\tfor (;;) {\n\t\tconst page = await reader.readList(\n\t\t\tpendingAssistantFrames(operationId, responseEntryId),\n\t\t\t{ order: \"asc\", limit: 1_000, ...(cursor === undefined ? {} : { cursor }) },\n\t\t\tcontext,\n\t\t);\n\t\tframes.push(...page.map(({ value }) => value));\n\t\tif (page.length < 1_000) return frames;\n\t\tcursor = { seq: page[page.length - 1]!.seq };\n\t}\n}\n\nfunction openProgress<TContext extends object | undefined, T>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tcommitWrite: (item: T) => Write,\n\tstillOwns: (state: LaneState) => boolean,\n): ProgressChannel<T> {\n\tlet sealed = false;\n\tlet latest: Promise<void> = Promise.resolve();\n\treturn {\n\t\twrite(item) {\n\t\t\tif (sealed) return;\n\t\t\tconst write = lane\n\t\t\t\t.command((projection) => {\n\t\t\t\t\tif (!stillOwns(projection)) return { kind: \"return\", result: undefined };\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"commit\",\n\t\t\t\t\t\twrites: [commitWrite(item)],\n\t\t\t\t\t\tnext: projection,\n\t\t\t\t\t\tmaterialize: () => undefined,\n\t\t\t\t\t};\n\t\t\t\t}, drive.context)\n\t\t\t\t.then(() => undefined);\n\t\t\tlatest = write;\n\t\t\tvoid write.catch(() => {});\n\t\t},\n\t\tseal() {\n\t\t\tsealed = true;\n\t\t},\n\t\tasync drain() {\n\t\t\tawait latest;\n\t\t},\n\t};\n}\n\nexport function openFrameProgress<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tresponseEntryId: string,\n): ProgressChannel<AssistantMessageFrame> {\n\tconst address = pendingAssistantFrames(drive.operationId, responseEntryId);\n\treturn openProgress(\n\t\tlane,\n\t\tdrive,\n\t\t(frame) => appendList(address, frame),\n\t\t(state) => {\n\t\t\tconst run = state.operation?.state;\n\t\t\tif (run === undefined) return false;\n\t\t\treturn (\n\t\t\t\t(run.at === \"assistant.effect_pending\" || run.at === \"deferred.effect_pending\") &&\n\t\t\t\trun.responseEntryId === responseEntryId\n\t\t\t);\n\t\t},\n\t);\n}\n\nexport function openToolProgress<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tturnId: string,\n\tsourceIndex: number,\n\tinvocationId: string,\n): ProgressChannel<AgentToolResult<unknown>> {\n\tconst address = pendingToolOutput(drive.operationId, invocationId);\n\treturn openProgress(\n\t\tlane,\n\t\tdrive,\n\t\t(snapshot) => setValue(address, snapshot),\n\t\t(state) => {\n\t\t\tconst operation = state.operation;\n\t\t\tif (operation?.state.at !== \"tools\") return false;\n\t\t\tconst batch = operation.state.batch;\n\t\t\treturn (\n\t\t\t\tbatch.turnId === turnId &&\n\t\t\t\tbatch.calls.some(\n\t\t\t\t\t(call) =>\n\t\t\t\t\t\tcall.sourceIndex === sourceIndex &&\n\t\t\t\t\t\tcall.resultEntryId === invocationId &&\n\t\t\t\t\t\tcall.status === \"effect_pending\",\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\t);\n}\n"]}
@@ -0,0 +1,66 @@
1
+ import { appendList, pendingAssistantFrames, pendingToolOutput, setValue } from "../session/values.js";
2
+ export async function readAssistantFrames(reader, operationId, responseEntryId, context) {
3
+ const frames = [];
4
+ let cursor;
5
+ for (;;) {
6
+ const page = await reader.readList(pendingAssistantFrames(operationId, responseEntryId), { order: "asc", limit: 1_000, ...(cursor === undefined ? {} : { cursor }) }, context);
7
+ frames.push(...page.map(({ value }) => value));
8
+ if (page.length < 1_000)
9
+ return frames;
10
+ cursor = { seq: page[page.length - 1].seq };
11
+ }
12
+ }
13
+ function openProgress(lane, drive, commitWrite, stillOwns) {
14
+ let sealed = false;
15
+ let latest = Promise.resolve();
16
+ return {
17
+ write(item) {
18
+ if (sealed)
19
+ return;
20
+ const write = lane
21
+ .command((projection) => {
22
+ if (!stillOwns(projection))
23
+ return { kind: "return", result: undefined };
24
+ return {
25
+ kind: "commit",
26
+ writes: [commitWrite(item)],
27
+ next: projection,
28
+ materialize: () => undefined,
29
+ };
30
+ }, drive.context)
31
+ .then(() => undefined);
32
+ latest = write;
33
+ void write.catch(() => { });
34
+ },
35
+ seal() {
36
+ sealed = true;
37
+ },
38
+ async drain() {
39
+ await latest;
40
+ },
41
+ };
42
+ }
43
+ export function openFrameProgress(lane, drive, responseEntryId) {
44
+ const address = pendingAssistantFrames(drive.operationId, responseEntryId);
45
+ return openProgress(lane, drive, (frame) => appendList(address, frame), (state) => {
46
+ const run = state.operation?.state;
47
+ if (run === undefined)
48
+ return false;
49
+ return ((run.at === "assistant.effect_pending" || run.at === "deferred.effect_pending") &&
50
+ run.responseEntryId === responseEntryId);
51
+ });
52
+ }
53
+ export function openToolProgress(lane, drive, turnId, sourceIndex, invocationId) {
54
+ const address = pendingToolOutput(drive.operationId, invocationId);
55
+ return openProgress(lane, drive, (snapshot) => setValue(address, snapshot), (state) => {
56
+ const operation = state.operation;
57
+ if (operation?.state.at !== "tools")
58
+ return false;
59
+ const batch = operation.state.batch;
60
+ return (batch.turnId === turnId &&
61
+ batch.calls.some((call) => call.sourceIndex === sourceIndex &&
62
+ call.resultEntryId === invocationId &&
63
+ call.status === "effect_pending"));
64
+ });
65
+ }
66
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../src/harness/runtime/progress.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessageFrame } from \"@earendil-works/pi-ai\";\nimport type { AgentToolResult } from \"../../types.ts\";\nimport type { Context } from \"../context.ts\";\nimport type { SessionReader, Write } from \"../session/types.ts\";\nimport { appendList, pendingAssistantFrames, pendingToolOutput, setValue } from \"../session/values.ts\";\nimport type { Lane } from \"./lane.ts\";\nimport type { Drive, LaneState } from \"./types.ts\";\n\nexport interface ProgressChannel<T> {\n\twrite(item: T): void;\n\tseal(): void;\n\tdrain(): Promise<void>;\n}\n\nexport async function readAssistantFrames(\n\treader: SessionReader,\n\toperationId: string,\n\tresponseEntryId: string,\n\tcontext: Context,\n): Promise<AssistantMessageFrame[]> {\n\tconst frames: AssistantMessageFrame[] = [];\n\tlet cursor: { seq: number } | undefined;\n\tfor (;;) {\n\t\tconst page = await reader.readList(\n\t\t\tpendingAssistantFrames(operationId, responseEntryId),\n\t\t\t{ order: \"asc\", limit: 1_000, ...(cursor === undefined ? {} : { cursor }) },\n\t\t\tcontext,\n\t\t);\n\t\tframes.push(...page.map(({ value }) => value));\n\t\tif (page.length < 1_000) return frames;\n\t\tcursor = { seq: page[page.length - 1]!.seq };\n\t}\n}\n\nfunction openProgress<TContext extends object | undefined, T>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tcommitWrite: (item: T) => Write,\n\tstillOwns: (state: LaneState) => boolean,\n): ProgressChannel<T> {\n\tlet sealed = false;\n\tlet latest: Promise<void> = Promise.resolve();\n\treturn {\n\t\twrite(item) {\n\t\t\tif (sealed) return;\n\t\t\tconst write = lane\n\t\t\t\t.command((projection) => {\n\t\t\t\t\tif (!stillOwns(projection)) return { kind: \"return\", result: undefined };\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"commit\",\n\t\t\t\t\t\twrites: [commitWrite(item)],\n\t\t\t\t\t\tnext: projection,\n\t\t\t\t\t\tmaterialize: () => undefined,\n\t\t\t\t\t};\n\t\t\t\t}, drive.context)\n\t\t\t\t.then(() => undefined);\n\t\t\tlatest = write;\n\t\t\tvoid write.catch(() => {});\n\t\t},\n\t\tseal() {\n\t\t\tsealed = true;\n\t\t},\n\t\tasync drain() {\n\t\t\tawait latest;\n\t\t},\n\t};\n}\n\nexport function openFrameProgress<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tresponseEntryId: string,\n): ProgressChannel<AssistantMessageFrame> {\n\tconst address = pendingAssistantFrames(drive.operationId, responseEntryId);\n\treturn openProgress(\n\t\tlane,\n\t\tdrive,\n\t\t(frame) => appendList(address, frame),\n\t\t(state) => {\n\t\t\tconst run = state.operation?.state;\n\t\t\tif (run === undefined) return false;\n\t\t\treturn (\n\t\t\t\t(run.at === \"assistant.effect_pending\" || run.at === \"deferred.effect_pending\") &&\n\t\t\t\trun.responseEntryId === responseEntryId\n\t\t\t);\n\t\t},\n\t);\n}\n\nexport function openToolProgress<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tturnId: string,\n\tsourceIndex: number,\n\tinvocationId: string,\n): ProgressChannel<AgentToolResult<unknown>> {\n\tconst address = pendingToolOutput(drive.operationId, invocationId);\n\treturn openProgress(\n\t\tlane,\n\t\tdrive,\n\t\t(snapshot) => setValue(address, snapshot),\n\t\t(state) => {\n\t\t\tconst operation = state.operation;\n\t\t\tif (operation?.state.at !== \"tools\") return false;\n\t\t\tconst batch = operation.state.batch;\n\t\t\treturn (\n\t\t\t\tbatch.turnId === turnId &&\n\t\t\t\tbatch.calls.some(\n\t\t\t\t\t(call) =>\n\t\t\t\t\t\tcall.sourceIndex === sourceIndex &&\n\t\t\t\t\t\tcall.resultEntryId === invocationId &&\n\t\t\t\t\t\tcall.status === \"effect_pending\",\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\t);\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import type { HarnessEvent, LaneSnapshot, LaneWatchEvent } from "../agent-harness.ts";
2
+ export type LaneSnapshotReduction = "rebase" | undefined;
3
+ /** Apply one harness event to a mutable lane snapshot. Navigation completion requires a fresh snapshot. */
4
+ export declare function reduceLaneSnapshot(snapshot: LaneSnapshot, event: HarnessEvent | LaneWatchEvent): LaneSnapshotReduction;
5
+ //# sourceMappingURL=reducer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../src/harness/runtime/reducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGtF,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAiBzD,2GAA2G;AAC3G,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,YAAY,GAAG,cAAc,GAClC,qBAAqB,CA+MvB","sourcesContent":["import type { HarnessEvent, LaneSnapshot, LaneWatchEvent } from \"../agent-harness.ts\";\nimport type { OperationResultRecord } from \"../session/types.ts\";\n\nexport type LaneSnapshotReduction = \"rebase\" | undefined;\n\ntype LaneOperationSnapshot = NonNullable<LaneSnapshot[\"operation\"]>;\n\nfunction upsertTool(operation: LaneOperationSnapshot, tool: LaneOperationSnapshot[\"runningTools\"][number]): void {\n\tconst index = operation.runningTools.findIndex((candidate) => candidate.toolCallId === tool.toolCallId);\n\tif (index === -1) operation.runningTools.push(tool);\n\telse operation.runningTools[index] = tool;\n}\n\nfunction matchingOperation(\n\tsnapshot: LaneSnapshot,\n\toperationId: string,\n): NonNullable<LaneSnapshot[\"operation\"]> | undefined {\n\treturn snapshot.operation?.id === operationId ? snapshot.operation : undefined;\n}\n\n/** Apply one harness event to a mutable lane snapshot. Navigation completion requires a fresh snapshot. */\nexport function reduceLaneSnapshot(\n\tsnapshot: LaneSnapshot,\n\tevent: HarnessEvent | LaneWatchEvent,\n): LaneSnapshotReduction {\n\tif (\"lane\" in event && event.lane !== undefined && event.lane !== snapshot.lane && event.type !== \"usage\") return;\n\tswitch (event.type) {\n\t\tcase \"run_start\":\n\t\t\tsnapshot.operation = {\n\t\t\t\tid: event.runId,\n\t\t\t\tkind: \"run\",\n\t\t\t\tstartedAt: event.startedAt,\n\t\t\t\tfromTipId: snapshot.tipId,\n\t\t\t\tstatus: \"open\",\n\t\t\t\trunningTools: [],\n\t\t\t};\n\t\t\treturn;\n\t\tcase \"compaction_start\":\n\t\t\tif (snapshot.operation !== null) return;\n\t\t\tsnapshot.operation = {\n\t\t\t\tid: event.runId,\n\t\t\t\tkind: \"compaction\",\n\t\t\t\tstartedAt: event.startedAt,\n\t\t\t\tfromTipId: snapshot.tipId,\n\t\t\t\tstatus: \"open\",\n\t\t\t\trunningTools: [],\n\t\t\t};\n\t\t\treturn;\n\t\tcase \"navigation_start\":\n\t\t\tsnapshot.operation = {\n\t\t\t\tid: event.runId,\n\t\t\t\tkind: \"navigation\",\n\t\t\t\tstartedAt: event.startedAt,\n\t\t\t\tfromTipId: snapshot.tipId,\n\t\t\t\tstatus: \"open\",\n\t\t\t\trunningTools: [],\n\t\t\t};\n\t\t\treturn;\n\t\tcase \"operation_abort\": {\n\t\t\tconst operation = matchingOperation(snapshot, event.operationId);\n\t\t\tif (operation !== undefined) operation.status = \"aborting\";\n\t\t\treturn;\n\t\t}\n\t\tcase \"run_resume\": {\n\t\t\tconst operation = matchingOperation(snapshot, event.runId);\n\t\t\tif (operation !== undefined) delete operation.deferred;\n\t\t\treturn;\n\t\t}\n\t\tcase \"run_suspend\": {\n\t\t\tconst operation = matchingOperation(snapshot, event.runId);\n\t\t\tif (operation === undefined) return;\n\t\t\tdelete operation.streamingMessage;\n\t\t\toperation.deferred = { handle: event.deferred, poll: event.poll };\n\t\t\treturn;\n\t\t}\n\t\tcase \"retry_scheduled\": {\n\t\t\tconst operation = matchingOperation(snapshot, event.runId);\n\t\t\tif (operation !== undefined) {\n\t\t\t\toperation.retry = {\n\t\t\t\t\tattempt: event.attempt,\n\t\t\t\t\tmaxAttempts: event.maxAttempts,\n\t\t\t\t\tnextAttemptAt: event.notBefore,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tcase \"retry_start\":\n\t\tcase \"retry_end\": {\n\t\t\tconst operation = matchingOperation(snapshot, event.runId);\n\t\t\tif (operation !== undefined) delete operation.retry;\n\t\t\treturn;\n\t\t}\n\t\tcase \"message_start\": {\n\t\t\tif (\n\t\t\t\tevent.runId === undefined ||\n\t\t\t\tevent.message.role !== \"assistant\" ||\n\t\t\t\tevent.message.stopReason !== \"pending\"\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst operation = matchingOperation(snapshot, event.runId);\n\t\t\tif (operation !== undefined) operation.streamingMessage = event.message;\n\t\t\treturn;\n\t\t}\n\t\tcase \"message_update\": {\n\t\t\tif (event.message.role !== \"assistant\") return;\n\t\t\tconst operation = matchingOperation(snapshot, event.runId);\n\t\t\tif (operation !== undefined) operation.streamingMessage = event.message;\n\t\t\treturn;\n\t\t}\n\t\tcase \"message_end\": {\n\t\t\tif (event.runId === undefined) return;\n\t\t\tconst operation = matchingOperation(snapshot, event.runId);\n\t\t\tif (operation !== undefined) delete operation.streamingMessage;\n\t\t\treturn;\n\t\t}\n\t\tcase \"tool_start\": {\n\t\t\tconst operation = matchingOperation(snapshot, event.runId);\n\t\t\tif (operation === undefined) return;\n\t\t\tupsertTool(operation, {\n\t\t\t\tstatus: \"running\",\n\t\t\t\ttoolCallId: event.toolCallId,\n\t\t\t\ttoolName: event.toolName,\n\t\t\t\targs: event.args,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tcase \"tool_update\": {\n\t\t\tconst operation = matchingOperation(snapshot, event.runId);\n\t\t\tconst tool = operation?.runningTools.find((candidate) => candidate.toolCallId === event.toolCallId);\n\t\t\tif (tool?.status === \"running\") tool.result = event.partialResult;\n\t\t\treturn;\n\t\t}\n\t\tcase \"tool_end\": {\n\t\t\tconst operation = matchingOperation(snapshot, event.runId);\n\t\t\tif (operation === undefined) return;\n\t\t\tconst index = operation.runningTools.findIndex((candidate) => candidate.toolCallId === event.toolCallId);\n\t\t\tconst current = operation.runningTools[index];\n\t\t\tif (current === undefined) return;\n\t\t\toperation.runningTools[index] = {\n\t\t\t\tstatus: \"settled\",\n\t\t\t\ttoolCallId: event.toolCallId,\n\t\t\t\ttoolName: event.toolName,\n\t\t\t\targs: current.args,\n\t\t\t\tresult: event.result,\n\t\t\t\tisError: event.isError,\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\t\tcase \"entry_added\": {\n\t\t\tif (event.entry.type === \"message\" && event.entry.message.role === \"toolResult\") {\n\t\t\t\tconst operation = snapshot.operation;\n\t\t\t\tif (operation !== null) {\n\t\t\t\t\tconst toolCallId = event.entry.message.toolCallId;\n\t\t\t\t\tconst index = operation.runningTools.findIndex((candidate) => candidate.toolCallId === toolCallId);\n\t\t\t\t\tif (index !== -1) operation.runningTools.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (event.entry.type === \"compaction\") snapshot.transcript.splice(0, snapshot.transcript.length, event.entry);\n\t\t\telse snapshot.transcript.push(event.entry);\n\t\t\tsnapshot.tipId = event.entry.id;\n\t\t\tif (event.entry.type === \"message\") snapshot.stats.messageCount += 1;\n\t\t\treturn;\n\t\t}\n\t\tcase \"queue_update\":\n\t\t\tsnapshot.queues = event.queues;\n\t\t\treturn;\n\t\tcase \"usage\":\n\t\t\tsnapshot.stats.usage = event.totals;\n\t\t\treturn;\n\t\tcase \"config_update\":\n\t\t\tif (!(\"lane\" in event) || event.lane !== snapshot.lane) return;\n\t\t\tswitch (event.property) {\n\t\t\t\tcase \"model\":\n\t\t\t\t\tsnapshot.configuration.model = event.value;\n\t\t\t\t\treturn;\n\t\t\t\tcase \"thinkingLevel\":\n\t\t\t\t\tsnapshot.configuration.thinkingLevel = event.value;\n\t\t\t\t\treturn;\n\t\t\t\tcase \"activeTools\":\n\t\t\t\t\tsnapshot.configuration.activeToolNames = event.value;\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"run_end\": {\n\t\t\tconst operation = matchingOperation(snapshot, event.runId);\n\t\t\tif (operation?.kind !== \"run\") return;\n\t\t\tconst record: OperationResultRecord = {\n\t\t\t\toperationId: event.runId,\n\t\t\t\tkind: \"run\",\n\t\t\t\tstatus: event.status,\n\t\t\t\t...(event.status === \"failed\" ? { error: event.error } : {}),\n\t\t\t\tfromTipId: event.fromTipId,\n\t\t\t\ttipId: event.tipId,\n\t\t\t\tstartedAt: operation.startedAt,\n\t\t\t\tendedAt: event.endedAt,\n\t\t\t};\n\t\t\tsnapshot.lastResult = record;\n\t\t\tsnapshot.operation = null;\n\t\t\tsnapshot.tipId = event.tipId;\n\t\t\treturn;\n\t\t}\n\t\tcase \"compaction_end\": {\n\t\t\tconst operation = matchingOperation(snapshot, event.runId);\n\t\t\tif (operation?.kind !== \"compaction\") return;\n\t\t\tconst record: OperationResultRecord = {\n\t\t\t\toperationId: event.runId,\n\t\t\t\tkind: \"compaction\",\n\t\t\t\tstatus: event.status,\n\t\t\t\t...(event.status === \"failed\" ? { error: event.error } : {}),\n\t\t\t\tfromTipId: operation.fromTipId,\n\t\t\t\ttipId: snapshot.tipId,\n\t\t\t\tstartedAt: operation.startedAt,\n\t\t\t\tendedAt: event.endedAt,\n\t\t\t};\n\t\t\tsnapshot.lastResult = record;\n\t\t\tsnapshot.operation = null;\n\t\t\treturn;\n\t\t}\n\t\tcase \"navigation_end\":\n\t\t\treturn \"rebase\";\n\t\tcase \"fault\":\n\t\t\tsnapshot.faulted = true;\n\t\t\treturn;\n\t\tcase \"handler_error\":\n\t\tcase \"turn_start\":\n\t\tcase \"turn_end\":\n\t\tcase \"value_update\":\n\t\tcase \"lane_created\":\n\t\t\treturn;\n\t}\n}\n"]}