@namzu/sdk 1.0.0 → 1.2.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 (330) hide show
  1. package/CHANGELOG.md +253 -0
  2. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  3. package/dist/agents/ReactiveAgent.js +5 -0
  4. package/dist/agents/ReactiveAgent.js.map +1 -1
  5. package/dist/agents/SupervisorAgent.d.ts +22 -1
  6. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  7. package/dist/agents/SupervisorAgent.js +47 -14
  8. package/dist/agents/SupervisorAgent.js.map +1 -1
  9. package/dist/agents/__tests__/supervisor-ledger.test.d.ts +2 -0
  10. package/dist/agents/__tests__/supervisor-ledger.test.d.ts.map +1 -0
  11. package/dist/agents/__tests__/supervisor-ledger.test.js +131 -0
  12. package/dist/agents/__tests__/supervisor-ledger.test.js.map +1 -0
  13. package/dist/bridge/a2a/mapper.d.ts.map +1 -1
  14. package/dist/bridge/a2a/mapper.js +2 -0
  15. package/dist/bridge/a2a/mapper.js.map +1 -1
  16. package/dist/bridge/sse/mapper.d.ts.map +1 -1
  17. package/dist/bridge/sse/mapper.js +4 -0
  18. package/dist/bridge/sse/mapper.js.map +1 -1
  19. package/dist/config/runtime.d.ts +24 -0
  20. package/dist/config/runtime.d.ts.map +1 -1
  21. package/dist/config/runtime.js +9 -0
  22. package/dist/config/runtime.js.map +1 -1
  23. package/dist/connector/builtins/webhook.test.js +17 -0
  24. package/dist/connector/builtins/webhook.test.js.map +1 -1
  25. package/dist/connector/index.d.ts +1 -0
  26. package/dist/connector/index.d.ts.map +1 -1
  27. package/dist/connector/index.js +1 -0
  28. package/dist/connector/index.js.map +1 -1
  29. package/dist/connector/mcp/client.d.ts.map +1 -1
  30. package/dist/connector/mcp/client.js +4 -0
  31. package/dist/connector/mcp/client.js.map +1 -1
  32. package/dist/connector/mcp/index.d.ts +1 -0
  33. package/dist/connector/mcp/index.d.ts.map +1 -1
  34. package/dist/connector/mcp/index.js +1 -0
  35. package/dist/connector/mcp/index.js.map +1 -1
  36. package/dist/connector/mcp/streamable-http.d.ts +22 -0
  37. package/dist/connector/mcp/streamable-http.d.ts.map +1 -0
  38. package/dist/connector/mcp/streamable-http.js +128 -0
  39. package/dist/connector/mcp/streamable-http.js.map +1 -0
  40. package/dist/connector/mcp/streamable-http.test.d.ts +2 -0
  41. package/dist/connector/mcp/streamable-http.test.d.ts.map +1 -0
  42. package/dist/connector/mcp/streamable-http.test.js +132 -0
  43. package/dist/connector/mcp/streamable-http.test.js.map +1 -0
  44. package/dist/{runtime/query → constants}/continuation.d.ts +5 -0
  45. package/dist/constants/continuation.d.ts.map +1 -0
  46. package/dist/{runtime/query → constants}/continuation.js +5 -0
  47. package/dist/constants/continuation.js.map +1 -0
  48. package/dist/constants/index.d.ts +1 -0
  49. package/dist/constants/index.d.ts.map +1 -1
  50. package/dist/constants/index.js +1 -0
  51. package/dist/constants/index.js.map +1 -1
  52. package/dist/manager/run/persistence.d.ts +11 -0
  53. package/dist/manager/run/persistence.d.ts.map +1 -1
  54. package/dist/manager/run/persistence.js +30 -1
  55. package/dist/manager/run/persistence.js.map +1 -1
  56. package/dist/persona/assembler.d.ts.map +1 -1
  57. package/dist/persona/assembler.js +18 -9
  58. package/dist/persona/assembler.js.map +1 -1
  59. package/dist/provider/capabilities.d.ts +27 -0
  60. package/dist/provider/capabilities.d.ts.map +1 -0
  61. package/dist/provider/capabilities.js +29 -0
  62. package/dist/provider/capabilities.js.map +1 -0
  63. package/dist/provider/collect.d.ts.map +1 -1
  64. package/dist/provider/collect.js +4 -1
  65. package/dist/provider/collect.js.map +1 -1
  66. package/dist/provider/index.d.ts +2 -0
  67. package/dist/provider/index.d.ts.map +1 -1
  68. package/dist/provider/index.js +1 -0
  69. package/dist/provider/index.js.map +1 -1
  70. package/dist/public-runtime.d.ts +4 -3
  71. package/dist/public-runtime.d.ts.map +1 -1
  72. package/dist/public-runtime.js +3 -3
  73. package/dist/public-runtime.js.map +1 -1
  74. package/dist/registry/tool/execute.d.ts +27 -0
  75. package/dist/registry/tool/execute.d.ts.map +1 -1
  76. package/dist/registry/tool/execute.js +124 -21
  77. package/dist/registry/tool/execute.js.map +1 -1
  78. package/dist/registry/tool/execute.test.d.ts +9 -6
  79. package/dist/registry/tool/execute.test.d.ts.map +1 -1
  80. package/dist/registry/tool/execute.test.js +72 -10
  81. package/dist/registry/tool/execute.test.js.map +1 -1
  82. package/dist/registry/toolset/catalog.test.js +62 -0
  83. package/dist/registry/toolset/catalog.test.js.map +1 -1
  84. package/dist/run/reporter.d.ts.map +1 -1
  85. package/dist/run/reporter.js +8 -0
  86. package/dist/run/reporter.js.map +1 -1
  87. package/dist/runtime/query/__tests__/capability-negotiation.test.d.ts +2 -0
  88. package/dist/runtime/query/__tests__/capability-negotiation.test.d.ts.map +1 -0
  89. package/dist/runtime/query/__tests__/capability-negotiation.test.js +184 -0
  90. package/dist/runtime/query/__tests__/capability-negotiation.test.js.map +1 -0
  91. package/dist/runtime/query/__tests__/checkpoint-store.test.d.ts +2 -0
  92. package/dist/runtime/query/__tests__/checkpoint-store.test.d.ts.map +1 -0
  93. package/dist/runtime/query/__tests__/checkpoint-store.test.js +259 -0
  94. package/dist/runtime/query/__tests__/checkpoint-store.test.js.map +1 -0
  95. package/dist/runtime/query/__tests__/checkpoint.test.js +9 -3
  96. package/dist/runtime/query/__tests__/checkpoint.test.js.map +1 -1
  97. package/dist/runtime/query/__tests__/deferred-tools.test.js +43 -5
  98. package/dist/runtime/query/__tests__/deferred-tools.test.js.map +1 -1
  99. package/dist/runtime/query/__tests__/long-document-flow.test.d.ts +2 -0
  100. package/dist/runtime/query/__tests__/long-document-flow.test.d.ts.map +1 -0
  101. package/dist/runtime/query/__tests__/long-document-flow.test.js +154 -0
  102. package/dist/runtime/query/__tests__/long-document-flow.test.js.map +1 -0
  103. package/dist/runtime/query/__tests__/orphan-task-turn-end.test.d.ts +2 -0
  104. package/dist/runtime/query/__tests__/orphan-task-turn-end.test.d.ts.map +1 -0
  105. package/dist/runtime/query/__tests__/orphan-task-turn-end.test.js +110 -0
  106. package/dist/runtime/query/__tests__/orphan-task-turn-end.test.js.map +1 -0
  107. package/dist/runtime/query/__tests__/prompt.test.js +15 -11
  108. package/dist/runtime/query/__tests__/prompt.test.js.map +1 -1
  109. package/dist/runtime/query/checkpoint.d.ts +16 -2
  110. package/dist/runtime/query/checkpoint.d.ts.map +1 -1
  111. package/dist/runtime/query/checkpoint.js +21 -7
  112. package/dist/runtime/query/checkpoint.js.map +1 -1
  113. package/dist/runtime/query/context.d.ts +7 -0
  114. package/dist/runtime/query/context.d.ts.map +1 -1
  115. package/dist/runtime/query/context.js +1 -0
  116. package/dist/runtime/query/context.js.map +1 -1
  117. package/dist/runtime/query/index.d.ts +29 -0
  118. package/dist/runtime/query/index.d.ts.map +1 -1
  119. package/dist/runtime/query/index.js +98 -8
  120. package/dist/runtime/query/index.js.map +1 -1
  121. package/dist/runtime/query/iteration/index.d.ts +3 -55
  122. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  123. package/dist/runtime/query/iteration/index.js +260 -656
  124. package/dist/runtime/query/iteration/index.js.map +1 -1
  125. package/dist/runtime/query/iteration/phases/checkpoint.d.ts.map +1 -1
  126. package/dist/runtime/query/iteration/phases/checkpoint.js +24 -2
  127. package/dist/runtime/query/iteration/phases/checkpoint.js.map +1 -1
  128. package/dist/runtime/query/iteration/phases/compaction.d.ts +8 -0
  129. package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
  130. package/dist/runtime/query/iteration/phases/compaction.js +84 -3
  131. package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
  132. package/dist/runtime/query/iteration/phases/context.d.ts +13 -2
  133. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  134. package/dist/runtime/query/iteration/phases/context.js +53 -0
  135. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  136. package/dist/runtime/query/iteration/phases/hitl-abort-race.test.d.ts +2 -0
  137. package/dist/runtime/query/iteration/phases/hitl-abort-race.test.d.ts.map +1 -0
  138. package/dist/runtime/query/iteration/phases/hitl-abort-race.test.js +73 -0
  139. package/dist/runtime/query/iteration/phases/hitl-abort-race.test.js.map +1 -0
  140. package/dist/runtime/query/iteration/phases/hitl-answer-question.test.d.ts +2 -0
  141. package/dist/runtime/query/iteration/phases/hitl-answer-question.test.d.ts.map +1 -0
  142. package/dist/runtime/query/iteration/phases/hitl-answer-question.test.js +120 -0
  143. package/dist/runtime/query/iteration/phases/hitl-answer-question.test.js.map +1 -0
  144. package/dist/runtime/query/iteration/phases/tool-review.d.ts +1 -1
  145. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  146. package/dist/runtime/query/iteration/phases/tool-review.js +7 -2
  147. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  148. package/dist/runtime/query/iteration/phases/working-memory-compaction.test.d.ts +19 -0
  149. package/dist/runtime/query/iteration/phases/working-memory-compaction.test.d.ts.map +1 -0
  150. package/dist/runtime/query/iteration/phases/working-memory-compaction.test.js +177 -0
  151. package/dist/runtime/query/iteration/phases/working-memory-compaction.test.js.map +1 -0
  152. package/dist/runtime/query/iteration/phases/working-memory.d.ts +31 -0
  153. package/dist/runtime/query/iteration/phases/working-memory.d.ts.map +1 -0
  154. package/dist/runtime/query/iteration/phases/working-memory.js +81 -0
  155. package/dist/runtime/query/iteration/phases/working-memory.js.map +1 -0
  156. package/dist/runtime/query/iteration/stream-turn.d.ts +35 -0
  157. package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -0
  158. package/dist/runtime/query/iteration/stream-turn.js +341 -0
  159. package/dist/runtime/query/iteration/stream-turn.js.map +1 -0
  160. package/dist/runtime/query/replay/list.d.ts +17 -1
  161. package/dist/runtime/query/replay/list.d.ts.map +1 -1
  162. package/dist/runtime/query/replay/list.js +21 -4
  163. package/dist/runtime/query/replay/list.js.map +1 -1
  164. package/dist/runtime/query/replay/prepare.d.ts +10 -0
  165. package/dist/runtime/query/replay/prepare.d.ts.map +1 -1
  166. package/dist/runtime/query/replay/prepare.js +20 -4
  167. package/dist/runtime/query/replay/prepare.js.map +1 -1
  168. package/dist/session/workspace/__tests__/shared-run.test.js +1 -1
  169. package/dist/session/workspace/__tests__/shared-run.test.js.map +1 -1
  170. package/dist/session/workspace/shared-run.js +1 -0
  171. package/dist/session/workspace/shared-run.js.map +1 -1
  172. package/dist/skills/loader.test.js +8 -8
  173. package/dist/skills/loader.test.js.map +1 -1
  174. package/dist/store/index.d.ts +1 -0
  175. package/dist/store/index.d.ts.map +1 -1
  176. package/dist/store/index.js +1 -0
  177. package/dist/store/index.js.map +1 -1
  178. package/dist/store/run/checkpoint-disk.d.ts +28 -0
  179. package/dist/store/run/checkpoint-disk.d.ts.map +1 -0
  180. package/dist/store/run/checkpoint-disk.js +55 -0
  181. package/dist/store/run/checkpoint-disk.js.map +1 -0
  182. package/dist/streaming/coalesce.test.js.map +1 -1
  183. package/dist/tools/builtins/__tests__/payload-budget.test.js +48 -0
  184. package/dist/tools/builtins/__tests__/payload-budget.test.js.map +1 -1
  185. package/dist/tools/builtins/__tests__/read-file.test.js +9 -0
  186. package/dist/tools/builtins/__tests__/read-file.test.js.map +1 -1
  187. package/dist/tools/builtins/read-file.d.ts.map +1 -1
  188. package/dist/tools/builtins/read-file.js +50 -2
  189. package/dist/tools/builtins/read-file.js.map +1 -1
  190. package/dist/tools/builtins/search-tools.d.ts.map +1 -1
  191. package/dist/tools/builtins/search-tools.js +32 -7
  192. package/dist/tools/builtins/search-tools.js.map +1 -1
  193. package/dist/tools/coordinator/__tests__/approve-plan.test.d.ts +2 -0
  194. package/dist/tools/coordinator/__tests__/approve-plan.test.d.ts.map +1 -0
  195. package/dist/tools/coordinator/__tests__/approve-plan.test.js +114 -0
  196. package/dist/tools/coordinator/__tests__/approve-plan.test.js.map +1 -0
  197. package/dist/tools/coordinator/__tests__/ask-user-question.test.d.ts +2 -0
  198. package/dist/tools/coordinator/__tests__/ask-user-question.test.d.ts.map +1 -0
  199. package/dist/tools/coordinator/__tests__/ask-user-question.test.js +309 -0
  200. package/dist/tools/coordinator/__tests__/ask-user-question.test.js.map +1 -0
  201. package/dist/tools/coordinator/index.d.ts +8 -0
  202. package/dist/tools/coordinator/index.d.ts.map +1 -1
  203. package/dist/tools/coordinator/index.js +195 -15
  204. package/dist/tools/coordinator/index.js.map +1 -1
  205. package/dist/types/agent/index.d.ts +1 -0
  206. package/dist/types/agent/index.d.ts.map +1 -1
  207. package/dist/types/agent/index.js +1 -0
  208. package/dist/types/agent/index.js.map +1 -1
  209. package/dist/types/agent/reactive.d.ts +15 -0
  210. package/dist/types/agent/reactive.d.ts.map +1 -1
  211. package/dist/types/agent/supervisor.d.ts +18 -0
  212. package/dist/types/agent/supervisor.d.ts.map +1 -1
  213. package/dist/types/agent/working-memory.d.ts +29 -0
  214. package/dist/types/agent/working-memory.d.ts.map +1 -0
  215. package/dist/types/agent/working-memory.js +2 -0
  216. package/dist/types/agent/working-memory.js.map +1 -0
  217. package/dist/types/common/index.d.ts +10 -0
  218. package/dist/types/common/index.d.ts.map +1 -1
  219. package/dist/types/common/index.js +18 -0
  220. package/dist/types/common/index.js.map +1 -1
  221. package/dist/types/common/usage-merge.test.d.ts +2 -0
  222. package/dist/types/common/usage-merge.test.d.ts.map +1 -0
  223. package/dist/types/common/usage-merge.test.js +48 -0
  224. package/dist/types/common/usage-merge.test.js.map +1 -0
  225. package/dist/types/connector/mcp.d.ts +9 -2
  226. package/dist/types/connector/mcp.d.ts.map +1 -1
  227. package/dist/types/hitl/index.d.ts +42 -0
  228. package/dist/types/hitl/index.d.ts.map +1 -1
  229. package/dist/types/hitl/index.js +11 -0
  230. package/dist/types/hitl/index.js.map +1 -1
  231. package/dist/types/provider/chat.d.ts +9 -0
  232. package/dist/types/provider/chat.d.ts.map +1 -1
  233. package/dist/types/provider/config.d.ts +18 -0
  234. package/dist/types/provider/config.d.ts.map +1 -1
  235. package/dist/types/provider/interface.d.ts +10 -0
  236. package/dist/types/provider/interface.d.ts.map +1 -1
  237. package/dist/types/run/checkpoint-store.d.ts +64 -0
  238. package/dist/types/run/checkpoint-store.d.ts.map +1 -0
  239. package/dist/types/run/checkpoint-store.js +12 -0
  240. package/dist/types/run/checkpoint-store.js.map +1 -0
  241. package/dist/types/run/config.d.ts +27 -0
  242. package/dist/types/run/config.d.ts.map +1 -1
  243. package/dist/types/run/events.d.ts +6 -0
  244. package/dist/types/run/events.d.ts.map +1 -1
  245. package/dist/types/run/events.js.map +1 -1
  246. package/dist/types/run/index.d.ts +1 -0
  247. package/dist/types/run/index.d.ts.map +1 -1
  248. package/dist/types/run/index.js +1 -0
  249. package/dist/types/run/index.js.map +1 -1
  250. package/dist/version.d.ts.map +1 -1
  251. package/dist/version.js +25 -4
  252. package/dist/version.js.map +1 -1
  253. package/package.json +1 -1
  254. package/src/agents/ReactiveAgent.ts +5 -0
  255. package/src/agents/SupervisorAgent.ts +56 -16
  256. package/src/agents/__tests__/supervisor-ledger.test.ts +185 -0
  257. package/src/bridge/a2a/mapper.ts +3 -0
  258. package/src/bridge/sse/mapper.ts +5 -0
  259. package/src/config/runtime.ts +9 -0
  260. package/src/connector/builtins/webhook.test.ts +21 -0
  261. package/src/connector/index.ts +1 -0
  262. package/src/connector/mcp/client.ts +4 -0
  263. package/src/connector/mcp/index.ts +1 -0
  264. package/src/connector/mcp/streamable-http.test.ts +169 -0
  265. package/src/connector/mcp/streamable-http.ts +152 -0
  266. package/src/{runtime/query → constants}/continuation.ts +5 -0
  267. package/src/constants/index.ts +1 -0
  268. package/src/manager/run/persistence.ts +34 -1
  269. package/src/persona/assembler.ts +18 -6
  270. package/src/provider/capabilities.ts +47 -0
  271. package/src/provider/collect.ts +4 -1
  272. package/src/provider/index.ts +5 -0
  273. package/src/public-runtime.ts +5 -0
  274. package/src/registry/tool/execute.test.ts +85 -10
  275. package/src/registry/tool/execute.ts +124 -21
  276. package/src/registry/toolset/catalog.test.ts +68 -0
  277. package/src/run/reporter.ts +9 -0
  278. package/src/runtime/query/__tests__/capability-negotiation.test.ts +248 -0
  279. package/src/runtime/query/__tests__/checkpoint-store.test.ts +322 -0
  280. package/src/runtime/query/__tests__/checkpoint.test.ts +15 -6
  281. package/src/runtime/query/__tests__/deferred-tools.test.ts +52 -5
  282. package/src/runtime/query/__tests__/long-document-flow.test.ts +180 -0
  283. package/src/runtime/query/__tests__/orphan-task-turn-end.test.ts +127 -0
  284. package/src/runtime/query/__tests__/prompt.test.ts +15 -11
  285. package/src/runtime/query/checkpoint.ts +23 -9
  286. package/src/runtime/query/context.ts +9 -0
  287. package/src/runtime/query/index.ts +148 -29
  288. package/src/runtime/query/iteration/index.ts +316 -831
  289. package/src/runtime/query/iteration/phases/checkpoint.ts +32 -2
  290. package/src/runtime/query/iteration/phases/compaction.ts +89 -3
  291. package/src/runtime/query/iteration/phases/context.ts +59 -3
  292. package/src/runtime/query/iteration/phases/hitl-abort-race.test.ts +86 -0
  293. package/src/runtime/query/iteration/phases/hitl-answer-question.test.ts +139 -0
  294. package/src/runtime/query/iteration/phases/tool-review.ts +7 -3
  295. package/src/runtime/query/iteration/phases/working-memory-compaction.test.ts +215 -0
  296. package/src/runtime/query/iteration/phases/working-memory.ts +86 -0
  297. package/src/runtime/query/iteration/stream-turn.ts +396 -0
  298. package/src/runtime/query/replay/list.ts +38 -4
  299. package/src/runtime/query/replay/prepare.ts +37 -4
  300. package/src/session/workspace/__tests__/shared-run.test.ts +1 -1
  301. package/src/session/workspace/shared-run.ts +1 -0
  302. package/src/skills/loader.test.ts +8 -8
  303. package/src/store/index.ts +1 -0
  304. package/src/store/run/checkpoint-disk.ts +67 -0
  305. package/src/streaming/coalesce.test.ts +3 -3
  306. package/src/tools/builtins/__tests__/payload-budget.test.ts +63 -0
  307. package/src/tools/builtins/__tests__/read-file.test.ts +12 -0
  308. package/src/tools/builtins/read-file.ts +50 -2
  309. package/src/tools/builtins/search-tools.ts +38 -7
  310. package/src/tools/coordinator/__tests__/approve-plan.test.ts +139 -0
  311. package/src/tools/coordinator/__tests__/ask-user-question.test.ts +370 -0
  312. package/src/tools/coordinator/index.ts +227 -17
  313. package/src/types/agent/index.ts +1 -0
  314. package/src/types/agent/reactive.ts +17 -0
  315. package/src/types/agent/supervisor.ts +20 -0
  316. package/src/types/agent/working-memory.ts +29 -0
  317. package/src/types/common/index.ts +19 -0
  318. package/src/types/common/usage-merge.test.ts +53 -0
  319. package/src/types/connector/mcp.ts +14 -2
  320. package/src/types/hitl/index.ts +52 -1
  321. package/src/types/provider/chat.ts +10 -0
  322. package/src/types/provider/config.ts +18 -0
  323. package/src/types/provider/interface.ts +11 -0
  324. package/src/types/run/checkpoint-store.ts +72 -0
  325. package/src/types/run/config.ts +30 -0
  326. package/src/types/run/events.ts +13 -0
  327. package/src/types/run/index.ts +1 -0
  328. package/src/version.ts +26 -4
  329. package/dist/runtime/query/continuation.d.ts.map +0 -1
  330. package/dist/runtime/query/continuation.js.map +0 -1
@@ -0,0 +1,341 @@
1
+ import { mergeTokenUsage } from '../../../types/common/index.js';
2
+ import { generateMessageId } from '../../../utils/id.js';
3
+ /**
4
+ * Map a provider's coarse `finishReason` plus the orchestrator's
5
+ * `forceFinalize` flag onto the per-message {@link MessageStopReason}
6
+ * union the v3 `message_completed` event surfaces.
7
+ */
8
+ function synthesizeMessageStopReason(finishReason, forceFinalize) {
9
+ if (forceFinalize)
10
+ return 'forced_finalize';
11
+ switch (finishReason) {
12
+ case 'tool_calls':
13
+ return 'tool_use';
14
+ case 'length':
15
+ return 'max_tokens';
16
+ case 'content_filter':
17
+ return 'refusal';
18
+ default:
19
+ return 'end_turn';
20
+ }
21
+ }
22
+ /**
23
+ * Consume a provider's streaming response and emit the v3 RunEvent
24
+ * lifecycle natively (message_started → text_delta* + tool_input_*
25
+ * → message_completed). Returns the aggregated `ChatCompletionResponse`
26
+ * for downstream code that still expects the legacy shape (assistant
27
+ * message construction, working-state extraction, telemetry attribute
28
+ * stamping).
29
+ *
30
+ * Per-delta `emitEvent` calls are followed by a `drainPending()`
31
+ * yield so SSE consumers see live progress instead of a burst at
32
+ * end-of-message. The bus's ephemeral filter (D1) ensures these
33
+ * deltas never hit transcript.jsonl.
34
+ *
35
+ * Edge cases (codex A3, A4, A5):
36
+ * - Stream ends without `finishReason` (anthropic-sdk-typescript#842
37
+ * dropped message_stop): we still emit `message_completed` from a
38
+ * finally-style fall-through path with `stopReason: 'refusal'`.
39
+ * - `tool_input_delta` with no `toolUseId` registered yet: we drop
40
+ * the fragment and log a warning (proxies seen to misorder events).
41
+ * - `chunk.error`: when no tool input is recoverable, we surface as
42
+ * a thrown error after emitting the message_completed terminator so
43
+ * consumer cards still close. If a tool-use block was already open,
44
+ * we instead synthesize a tool call with runtime truncation metadata
45
+ * so the executor can return a model-readable retry hint.
46
+ */
47
+ export async function* streamProviderTurn(provider, params, emitEvent, drainPending, runId, iteration, forceFinalize, log) {
48
+ const messageId = generateMessageId();
49
+ await emitEvent({ type: 'message_started', runId, iteration, messageId });
50
+ yield* drainPending();
51
+ let id = '';
52
+ const model = '';
53
+ let textBuf = '';
54
+ let finishReason = 'stop';
55
+ let usage = {
56
+ promptTokens: 0,
57
+ completionTokens: 0,
58
+ totalTokens: 0,
59
+ cachedTokens: 0,
60
+ cacheWriteTokens: 0,
61
+ };
62
+ const toolBuckets = new Map();
63
+ let streamError;
64
+ const stream = provider.chatStream({ ...params, stream: true });
65
+ // Drive the stream manually so each `.next()` can be RACED against the run
66
+ // abort: a Stop tears the in-flight model request down (the provider got
67
+ // `params.signal`), and we ALSO stop pulling within a tick even if a
68
+ // transport buffers or ignores the signal. The abort rejection propagates
69
+ // out of this generator so the run loop settles the turn as cancelled.
70
+ // `{ once: true }` keeps a multi-iteration run from leaking a listener/turn.
71
+ const it = stream[Symbol.asyncIterator]();
72
+ const signal = params.signal;
73
+ let onAbort;
74
+ const aborted = signal
75
+ ? new Promise((_resolve, reject) => {
76
+ if (signal.aborted) {
77
+ reject(signal.reason);
78
+ return;
79
+ }
80
+ onAbort = () => reject(signal.reason);
81
+ signal.addEventListener('abort', onAbort, { once: true });
82
+ })
83
+ : undefined;
84
+ try {
85
+ for (;;) {
86
+ const next = it.next();
87
+ // Neutralize the dangling loser so an eventual rejection of the
88
+ // un-awaited `next` is never an unhandled rejection.
89
+ if (aborted)
90
+ next.catch(() => { });
91
+ const res = await (aborted ? Promise.race([next, aborted]) : next);
92
+ if (res.done)
93
+ break;
94
+ const chunk = res.value;
95
+ if (chunk.error) {
96
+ streamError = chunk.error;
97
+ break;
98
+ }
99
+ if (!id && chunk.id)
100
+ id = chunk.id;
101
+ if (chunk.delta.content) {
102
+ textBuf += chunk.delta.content;
103
+ await emitEvent({
104
+ type: 'text_delta',
105
+ runId,
106
+ iteration,
107
+ messageId,
108
+ text: chunk.delta.content,
109
+ });
110
+ yield* drainPending();
111
+ }
112
+ for (const tc of chunk.delta.toolCalls ?? []) {
113
+ let bucket = toolBuckets.get(tc.index);
114
+ if (!bucket) {
115
+ bucket = {
116
+ id: tc.id ?? '',
117
+ name: tc.function?.name ?? '',
118
+ argsBuf: '',
119
+ started: false,
120
+ completed: false,
121
+ parsed: null,
122
+ inputTruncated: false,
123
+ };
124
+ toolBuckets.set(tc.index, bucket);
125
+ }
126
+ if (tc.id && !bucket.id)
127
+ bucket.id = tc.id;
128
+ if (tc.function?.name && !bucket.name)
129
+ bucket.name = tc.function.name;
130
+ if (!bucket.started && bucket.id && bucket.name) {
131
+ bucket.started = true;
132
+ await emitEvent({
133
+ type: 'tool_input_started',
134
+ runId,
135
+ iteration,
136
+ messageId,
137
+ toolUseId: bucket.id,
138
+ toolName: bucket.name,
139
+ });
140
+ yield* drainPending();
141
+ }
142
+ const fragment = tc.function?.arguments;
143
+ if (fragment) {
144
+ if (!bucket.id) {
145
+ log.warn('tool_input_delta arrived before tool id was known; dropping fragment', {
146
+ runId,
147
+ index: tc.index,
148
+ length: fragment.length,
149
+ });
150
+ }
151
+ else {
152
+ bucket.argsBuf += fragment;
153
+ await emitEvent({
154
+ type: 'tool_input_delta',
155
+ runId,
156
+ toolUseId: bucket.id,
157
+ partialJson: fragment,
158
+ });
159
+ yield* drainPending();
160
+ }
161
+ }
162
+ }
163
+ if (chunk.delta.toolCallEnd) {
164
+ const { index, id: endId } = chunk.delta.toolCallEnd;
165
+ const bucket = toolBuckets.get(index);
166
+ if (bucket && !bucket.completed) {
167
+ bucket.completed = true;
168
+ let parsed = {};
169
+ try {
170
+ parsed = bucket.argsBuf ? JSON.parse(bucket.argsBuf) : {};
171
+ }
172
+ catch (err) {
173
+ bucket.inputTruncated = true;
174
+ log.warn('tool input JSON parse failed at content_block_stop', {
175
+ runId,
176
+ toolUseId: endId,
177
+ error: err instanceof Error ? err.message : String(err),
178
+ });
179
+ }
180
+ bucket.parsed = parsed;
181
+ await emitEvent({
182
+ type: 'tool_input_completed',
183
+ runId,
184
+ toolUseId: endId,
185
+ input: parsed,
186
+ ...(bucket.inputTruncated ? { inputTruncated: true } : {}),
187
+ });
188
+ yield* drainPending();
189
+ }
190
+ }
191
+ if (chunk.finishReason)
192
+ finishReason = chunk.finishReason;
193
+ // Merge (per-field max), not last-write-wins: a late usage frame that
194
+ // omits input/cache tokens must not zero the counts seen earlier in the
195
+ // stream, which would under-report this turn's accumulated usage.
196
+ if (chunk.usage)
197
+ usage = mergeTokenUsage(usage, chunk.usage);
198
+ }
199
+ }
200
+ catch (err) {
201
+ // An abort tears the turn down: propagate it so the run loop settles the
202
+ // run as cancelled rather than recording a normal (errored) turn. Any
203
+ // other stream error is captured into the synthesized response as before.
204
+ if (signal?.aborted)
205
+ throw err;
206
+ streamError = err instanceof Error ? err.message : String(err);
207
+ }
208
+ finally {
209
+ if (onAbort)
210
+ signal?.removeEventListener('abort', onAbort);
211
+ // Release the underlying connection on every exit (natural end, error,
212
+ // or abort). `for await` did this implicitly on natural completion; the
213
+ // manual drive must do it explicitly. `.return()` on an already-finished
214
+ // provider generator is a no-op.
215
+ await it.return?.().catch(() => { });
216
+ }
217
+ // Flush any tool buckets the provider failed to close (no toolCallEnd
218
+ // arrived — defensive against providers that don't yet emit it, and
219
+ // the load-bearing path when the provider stream ends with
220
+ // `stop_reason: "max_tokens"` mid-`input_json_delta`. In that case
221
+ // Anthropic's SSE never sends `content_block_stop` for the open
222
+ // tool_use block: the upstream model ran out of completion tokens
223
+ // before it could close the JSON literal, so the buffered
224
+ // `argsBuf` ends with something like `"content":"…some prefix` —
225
+ // not parseable.
226
+ //
227
+ // Two cases coalesce here:
228
+ // 1. The buffer parses cleanly (the provider just forgot to emit
229
+ // `content_block_stop` but the args are intact) — keep parsed.
230
+ // 2. The buffer is truncated mid-literal — `parsed = {}` is the
231
+ // safe fallback so the executor's `JSON.parse(arguments)`
232
+ // succeeds and downstream consumers don't crash. The PRICE
233
+ // we used to pay was the model getting back a generic
234
+ // "<field> is required" Zod error and not realising its
235
+ // previous tool call was truncated server-side, so it would
236
+ // retry with the SAME long input and hit the same cutoff in
237
+ // a loop. Detect the truncation case and mark the tool call
238
+ // with runtime metadata; the executor surfaces a specific
239
+ // "your tool call was cut off by max_tokens — retry with
240
+ // shorter input or split into smaller calls" message that the
241
+ // model can act on.
242
+ for (const bucket of toolBuckets.values()) {
243
+ if (bucket.started && !bucket.completed) {
244
+ bucket.completed = true;
245
+ let parsed = {};
246
+ let truncated = false;
247
+ if (bucket.argsBuf) {
248
+ try {
249
+ parsed = JSON.parse(bucket.argsBuf);
250
+ }
251
+ catch {
252
+ // argsBuf had content but didn't parse — almost
253
+ // certainly the max_tokens-mid-literal cutoff. Mark
254
+ // the bucket so the executor can return a model-
255
+ // readable hint instead of a generic Zod error.
256
+ truncated = true;
257
+ parsed = {};
258
+ }
259
+ }
260
+ bucket.parsed = parsed;
261
+ bucket.inputTruncated = truncated;
262
+ if (truncated) {
263
+ log.warn('tool input truncated by upstream cutoff (no toolCallEnd, argsBuf unparsable)', {
264
+ runId,
265
+ toolUseId: bucket.id,
266
+ toolName: bucket.name,
267
+ bufferLength: bucket.argsBuf.length,
268
+ });
269
+ }
270
+ await emitEvent({
271
+ type: 'tool_input_completed',
272
+ runId,
273
+ toolUseId: bucket.id,
274
+ input: parsed,
275
+ ...(truncated ? { inputTruncated: true } : {}),
276
+ });
277
+ yield* drainPending();
278
+ }
279
+ }
280
+ // `arguments` MUST be valid JSON for the executor's `JSON.parse`
281
+ // (`runtime/query/executor.ts:executeSingle`) to succeed. We
282
+ // always serialise from the bucket's `parsed` object (filled by
283
+ // either the `toolCallEnd` branch above or the post-stream flush
284
+ // loop) instead of re-emitting `argsBuf`. When the provider
285
+ // stream truncated mid-input, `metadata.inputTruncated` carries that
286
+ // state; the executor parses cleanly and returns a specific
287
+ // model-readable retry hint instead of the generic "Invalid JSON in
288
+ // tool arguments" intercept.
289
+ const toolCalls = [...toolBuckets.entries()]
290
+ .sort(([a], [b]) => a - b)
291
+ .map(([, b]) => ({
292
+ id: b.id,
293
+ type: 'function',
294
+ function: {
295
+ name: b.name,
296
+ arguments: JSON.stringify(b.parsed ?? {}),
297
+ },
298
+ ...(b.inputTruncated ? { metadata: { inputTruncated: true } } : {}),
299
+ }));
300
+ const recoveredToolInputFromStreamError = streamError !== undefined && toolCalls.some((tc) => tc.id && tc.function.name);
301
+ const effectiveFinishReason = recoveredToolInputFromStreamError ? 'tool_calls' : finishReason;
302
+ if (recoveredToolInputFromStreamError) {
303
+ log.warn('provider stream failed after tool input; surfacing tool call to executor', {
304
+ runId,
305
+ iteration,
306
+ error: streamError,
307
+ toolCallCount: toolCalls.length,
308
+ });
309
+ }
310
+ const stopReason = streamError
311
+ ? recoveredToolInputFromStreamError
312
+ ? 'tool_use'
313
+ : 'refusal'
314
+ : synthesizeMessageStopReason(effectiveFinishReason, forceFinalize);
315
+ await emitEvent({
316
+ type: 'message_completed',
317
+ runId,
318
+ iteration,
319
+ messageId,
320
+ stopReason,
321
+ usage,
322
+ content: textBuf || undefined,
323
+ });
324
+ yield* drainPending();
325
+ if (streamError && !recoveredToolInputFromStreamError) {
326
+ throw new Error(`Provider stream error: ${streamError}`);
327
+ }
328
+ const response = {
329
+ id: id || messageId,
330
+ model: model || params.model,
331
+ message: {
332
+ role: 'assistant',
333
+ content: textBuf.length > 0 ? textBuf : null,
334
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
335
+ },
336
+ finishReason: effectiveFinishReason,
337
+ usage,
338
+ };
339
+ return { response, messageId };
340
+ }
341
+ //# sourceMappingURL=stream-turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-turn.js","sourceRoot":"","sources":["../../../../src/runtime/query/iteration/stream-turn.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { RunId } from '../../../types/ids/index.js';
2
+ import type { CheckpointRunScope, CheckpointStore } from '../../../types/run/checkpoint-store.js';
2
3
  import type { CheckpointListEntry } from '../../../types/run/replay.js';
3
4
  import type { Logger } from '../../../utils/logger.js';
4
5
  export interface ListCheckpointsInput {
@@ -7,6 +8,15 @@ export interface ListCheckpointsInput {
7
8
  /** Run whose checkpoints should be listed. */
8
9
  runId: RunId;
9
10
  logger?: Logger;
11
+ /**
12
+ * Optional store override (host-injected, e.g. Postgres). When set,
13
+ * `scope` is required — a scope-keyed backend cannot be addressed by
14
+ * `baseDir` — and `baseDir` is ignored. Absent ⇒ the disk layout under
15
+ * `baseDir` is read, exactly as before.
16
+ */
17
+ checkpointStore?: CheckpointStore;
18
+ /** Run scope for `checkpointStore`. Required when it is set. */
19
+ scope?: CheckpointRunScope;
10
20
  }
11
21
  /**
12
22
  * Read-only listing of a run's checkpoints for use with {@link
@@ -15,10 +25,16 @@ export interface ListCheckpointsInput {
15
25
  * pick a fork point — not the full `IterationCheckpoint` payload.
16
26
  *
17
27
  * Entries are returned in the order the underlying store returns them
18
- * (disk store sorts by `createdAt` ascending). Callers that want a
28
+ * (stores sort by `createdAt` ascending). Callers that want a
19
29
  * specific order should sort client-side.
20
30
  *
21
31
  * See ses_005-deterministic-replay/design.md §3.1.
22
32
  */
23
33
  export declare function listCheckpoints(input: ListCheckpointsInput): Promise<CheckpointListEntry[]>;
34
+ /**
35
+ * Guard shared by the replay entry points: an injected {@link
36
+ * CheckpointStore} is scope-keyed, so the caller must say which run —
37
+ * across the full five-layer attribution — it is asking about.
38
+ */
39
+ export declare function requireScope(scope: CheckpointRunScope | undefined, caller: string): CheckpointRunScope;
24
40
  //# sourceMappingURL=list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/runtime/query/replay/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAGtD,MAAM,WAAW,oBAAoB;IACpC,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAKjG"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/runtime/query/replay/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAGtD,MAAM,WAAW,oBAAoB;IACpC,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;OAKG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,gEAAgE;IAChE,KAAK,CAAC,EAAE,kBAAkB,CAAA;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAGjG;AAWD;;;;GAIG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,kBAAkB,GAAG,SAAS,EACrC,MAAM,EAAE,MAAM,GACZ,kBAAkB,CAOpB"}
@@ -1,5 +1,5 @@
1
1
  import { RunDiskStore } from '../../../store/run/disk.js';
2
- import { CheckpointManager } from '../checkpoint.js';
2
+ import { toCheckpointListEntry } from '../checkpoint.js';
3
3
  /**
4
4
  * Read-only listing of a run's checkpoints for use with {@link
5
5
  * import('./prepare.js').prepareReplayState}. Returns the public
@@ -7,15 +7,32 @@ import { CheckpointManager } from '../checkpoint.js';
7
7
  * pick a fork point — not the full `IterationCheckpoint` payload.
8
8
  *
9
9
  * Entries are returned in the order the underlying store returns them
10
- * (disk store sorts by `createdAt` ascending). Callers that want a
10
+ * (stores sort by `createdAt` ascending). Callers that want a
11
11
  * specific order should sort client-side.
12
12
  *
13
13
  * See ses_005-deterministic-replay/design.md §3.1.
14
14
  */
15
15
  export async function listCheckpoints(input) {
16
+ const checkpoints = await listRawCheckpoints(input);
17
+ return checkpoints.map(toCheckpointListEntry);
18
+ }
19
+ async function listRawCheckpoints(input) {
20
+ if (input.checkpointStore) {
21
+ return input.checkpointStore.listCheckpoints(requireScope(input.scope, 'listCheckpoints'));
22
+ }
16
23
  const store = new RunDiskStore({ baseDir: input.baseDir, logger: input.logger });
17
24
  await store.initRun(input.runId);
18
- const mgr = new CheckpointManager(store);
19
- return mgr.listEntries();
25
+ return store.listCheckpoints();
26
+ }
27
+ /**
28
+ * Guard shared by the replay entry points: an injected {@link
29
+ * CheckpointStore} is scope-keyed, so the caller must say which run —
30
+ * across the full five-layer attribution — it is asking about.
31
+ */
32
+ export function requireScope(scope, caller) {
33
+ if (!scope) {
34
+ throw new Error(`${caller}: \`checkpointStore\` was provided without \`scope\` — an injected store is keyed by tenantId/projectId/sessionId/runId, not by baseDir.`);
35
+ }
36
+ return scope;
20
37
  }
21
38
  //# sourceMappingURL=list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/runtime/query/replay/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAIzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAUpD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAA2B;IAChE,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IAChF,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAChC,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACxC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/runtime/query/replay/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAKzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAmBxD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAA2B;IAChE,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACnD,OAAO,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;AAC9C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,KAA2B;IAC5D,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAC3F,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IAChF,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAChC,OAAO,KAAK,CAAC,eAAe,EAAE,CAAA;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC3B,KAAqC,EACrC,MAAc;IAEd,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACd,GAAG,MAAM,0IAA0I,CACnJ,CAAA;IACF,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { CheckpointId, IterationCheckpoint } from '../../../types/hitl/index.js';
2
2
  import type { RunId } from '../../../types/ids/index.js';
3
3
  import type { Message } from '../../../types/message/index.js';
4
+ import type { CheckpointRunScope, CheckpointStore } from '../../../types/run/checkpoint-store.js';
4
5
  import type { Mutation, ReplayAttribution } from '../../../types/run/replay.js';
5
6
  import type { Logger } from '../../../utils/logger.js';
6
7
  export type CheckpointSelector = CheckpointId | 'latest' | 'emergency';
@@ -20,6 +21,15 @@ export interface PrepareReplayInput {
20
21
  */
21
22
  emergencyDir?: string;
22
23
  logger?: Logger;
24
+ /**
25
+ * Optional store override (host-injected, e.g. Postgres). When set,
26
+ * `scope` is required and `baseDir` is ignored for checkpoint reads.
27
+ * The `'emergency'` selector still reads the on-disk dump under
28
+ * `emergencyDir` — emergency saves are process-local by nature.
29
+ */
30
+ checkpointStore?: CheckpointStore;
31
+ /** Run scope for `checkpointStore`. Required when it is set. */
32
+ scope?: CheckpointRunScope;
23
33
  }
24
34
  export interface PreparedReplayState {
25
35
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../../../src/runtime/query/replay/prepare.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACrF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAItD,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEtE,MAAM,WAAW,kBAAkB;IAClC,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAA;IACf,+BAA+B;IAC/B,KAAK,EAAE,KAAK,CAAA;IACZ,mCAAmC;IACnC,cAAc,EAAE,kBAAkB,CAAA;IAClC,+FAA+F;IAC/F,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAA;IACnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IACnC;;;;OAIG;IACH,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,6EAA6E;IAC7E,gBAAgB,EAAE,mBAAmB,CAAA;IACrC;;;;OAIG;IACH,WAAW,EAAE,iBAAiB,CAAA;CAC9B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAahG"}
1
+ {"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../../../src/runtime/query/replay/prepare.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACrF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACjG,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAKtD,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEtE,MAAM,WAAW,kBAAkB;IAClC,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAA;IACf,+BAA+B;IAC/B,KAAK,EAAE,KAAK,CAAA;IACZ,mCAAmC;IACnC,cAAc,EAAE,kBAAkB,CAAA;IAClC,+FAA+F;IAC/F,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAA;IACnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;OAKG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,gEAAgE;IAChE,KAAK,CAAC,EAAE,kBAAkB,CAAA;CAC1B;AAED,MAAM,WAAW,mBAAmB;IACnC;;;;OAIG;IACH,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,6EAA6E;IAC7E,gBAAgB,EAAE,mBAAmB,CAAA;IACrC;;;;OAIG;IACH,WAAW,EAAE,iBAAiB,CAAA;CAC9B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAahG"}
@@ -2,6 +2,7 @@ import { join } from 'node:path';
2
2
  import { EmergencySaveManager } from '../../../manager/run/emergency.js';
3
3
  import { RunDiskStore } from '../../../store/run/disk.js';
4
4
  import { projectEmergencyToCheckpoint } from '../checkpoint.js';
5
+ import { requireScope } from './list.js';
5
6
  import { applyMutations } from './mutate.js';
6
7
  /**
7
8
  * Produce the state materials needed to execute a replay run — the mutated
@@ -34,21 +35,36 @@ async function resolveCheckpoint(input) {
34
35
  if (input.fromCheckpoint === 'emergency') {
35
36
  return resolveEmergency(input);
36
37
  }
37
- const store = new RunDiskStore({ baseDir: input.baseDir, logger: input.logger });
38
- await store.initRun(input.runId);
38
+ const reader = await bindCheckpointReader(input);
39
39
  if (input.fromCheckpoint === 'latest') {
40
- const all = await store.listCheckpoints();
40
+ const all = await reader.list();
41
41
  if (all.length === 0) {
42
42
  throw new Error(`No checkpoints found for run ${input.runId} in ${input.baseDir}`);
43
43
  }
44
44
  return [...all].sort((a, b) => b.iteration - a.iteration)[0];
45
45
  }
46
- const checkpoint = await store.readCheckpoint(input.fromCheckpoint);
46
+ const checkpoint = await reader.read(input.fromCheckpoint);
47
47
  if (!checkpoint) {
48
48
  throw new Error(`Checkpoint ${input.fromCheckpoint} not found for run ${input.runId}`);
49
49
  }
50
50
  return checkpoint;
51
51
  }
52
+ async function bindCheckpointReader(input) {
53
+ if (input.checkpointStore) {
54
+ const store = input.checkpointStore;
55
+ const scope = requireScope(input.scope, 'prepareReplayState');
56
+ return {
57
+ list: () => store.listCheckpoints(scope),
58
+ read: (id) => store.readCheckpoint(scope, id),
59
+ };
60
+ }
61
+ const store = new RunDiskStore({ baseDir: input.baseDir, logger: input.logger });
62
+ await store.initRun(input.runId);
63
+ return {
64
+ list: () => store.listCheckpoints(),
65
+ read: (id) => store.readCheckpoint(id),
66
+ };
67
+ }
52
68
  async function resolveEmergency(input) {
53
69
  if (!input.emergencyDir) {
54
70
  throw new Error("fromCheckpoint: 'emergency' requires an `emergencyDir` — conventionally sibling of baseDir");
@@ -1 +1 @@
1
- {"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../../src/runtime/query/replay/prepare.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../../src/runtime/query/replay/prepare.ts"],"names":[],"mappings":"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"}
@@ -117,7 +117,7 @@ describe('SharedRunWorkspace', () => {
117
117
  hostRoot,
118
118
  runtimeRoot: '/mnt/user-data/outputs/_work',
119
119
  });
120
- const big = '# Task Context\n\n' + 'A'.repeat(40_000);
120
+ const big = `# Task Context\n\n${'A'.repeat(40_000)}`;
121
121
  const path = await workspace.writeTaskContext(big);
122
122
  expect(path).toBe('/mnt/user-data/outputs/_work/01_task_context.md');
123
123
  expect(workspace.refs().taskContextPath).toBe(path);
@@ -1 +1 @@
1
- {"version":3,"file":"shared-run.test.js","sourceRoot":"","sources":["../../../../src/session/workspace/__tests__/shared-run.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared-run.test.js","sourceRoot":"","sources":["../../../../src/session/workspace/__tests__/shared-run.test.ts"],"names":[],"mappings":"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"}
@@ -230,6 +230,7 @@ function ensureTrailingNewline(value) {
230
230
  return value.endsWith('\n') ? value : `${value}\n`;
231
231
  }
232
232
  async function writeJsonAtomic(path, value) {
233
+ await mkdir(dirnameFor(path), { recursive: true });
233
234
  const tmpPath = `${path}.${process.pid}.${Date.now()}.tmp`;
234
235
  await writeFile(tmpPath, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
235
236
  await rename(tmpPath, path);