@stigmer/runner 3.15.3-dev.20260914121148 → 3.16.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 (592) hide show
  1. package/README.md +2 -1
  2. package/dist/.build-fingerprint +1 -1
  3. package/dist/__test-utils__/approval-contract/types.d.ts +1 -1
  4. package/dist/__test-utils__/hermetic-activity.d.ts +61 -7
  5. package/dist/__test-utils__/hermetic-activity.js +100 -9
  6. package/dist/__test-utils__/hermetic-activity.js.map +1 -1
  7. package/dist/__test-utils__/model-registry-fixture.d.ts +22 -3
  8. package/dist/__test-utils__/model-registry-fixture.js +22 -7
  9. package/dist/__test-utils__/model-registry-fixture.js.map +1 -1
  10. package/dist/activities/execute-cursor/__test-utils__/contract-subject.d.ts +2 -2
  11. package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +2 -2
  12. package/dist/activities/execute-cursor/__test-utils__/fold.d.ts +61 -0
  13. package/dist/activities/execute-cursor/__test-utils__/fold.js +94 -0
  14. package/dist/activities/execute-cursor/__test-utils__/fold.js.map +1 -0
  15. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +1 -1
  16. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -1
  17. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +47 -12
  18. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +41 -10
  19. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
  20. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +15 -6
  21. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +17 -4
  22. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -1
  23. package/dist/activities/execute-cursor/adapter.d.ts +4 -4
  24. package/dist/activities/execute-cursor/adapter.js +4 -4
  25. package/dist/activities/execute-cursor/approval-policy.d.ts +10 -10
  26. package/dist/activities/execute-cursor/approval-policy.js +12 -23
  27. package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
  28. package/dist/activities/execute-cursor/approval-state.d.ts +35 -1
  29. package/dist/activities/execute-cursor/approval-state.js +65 -0
  30. package/dist/activities/execute-cursor/approval-state.js.map +1 -1
  31. package/dist/activities/execute-cursor/{message-translator.d.ts → boundary-rows.d.ts} +45 -341
  32. package/dist/activities/execute-cursor/boundary-rows.js +1018 -0
  33. package/dist/activities/execute-cursor/boundary-rows.js.map +1 -0
  34. package/dist/activities/execute-cursor/cursor-capabilities.d.ts +1 -1
  35. package/dist/activities/execute-cursor/cursor-capabilities.js +1 -1
  36. package/dist/activities/execute-cursor/cursor-event-recorder.d.ts +33 -14
  37. package/dist/activities/execute-cursor/cursor-event-recorder.js +43 -21
  38. package/dist/activities/execute-cursor/cursor-event-recorder.js.map +1 -1
  39. package/dist/activities/execute-cursor/prompt-builder.d.ts +3 -3
  40. package/dist/activities/execute-cursor/prompt-builder.js +4 -4
  41. package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
  42. package/dist/activities/execute-cursor/service-tier.js +1 -2
  43. package/dist/activities/execute-cursor/service-tier.js.map +1 -1
  44. package/dist/activities/execute-cursor/sub-agent-steps.d.ts +79 -0
  45. package/dist/activities/execute-cursor/sub-agent-steps.js +180 -0
  46. package/dist/activities/execute-cursor/sub-agent-steps.js.map +1 -0
  47. package/dist/activities/execute-cursor/tool-result.d.ts +49 -0
  48. package/dist/activities/execute-cursor/tool-result.js +130 -0
  49. package/dist/activities/execute-cursor/tool-result.js.map +1 -0
  50. package/dist/activities/execute-cursor/translator.d.ts +178 -0
  51. package/dist/activities/execute-cursor/translator.js +485 -0
  52. package/dist/activities/execute-cursor/translator.js.map +1 -0
  53. package/dist/activities/execute-cursor/turn-boundary.d.ts +15 -5
  54. package/dist/activities/execute-cursor/turn-boundary.js +10 -14
  55. package/dist/activities/execute-cursor/turn-boundary.js.map +1 -1
  56. package/dist/activities/execute-cursor/turn-settle.d.ts +11 -7
  57. package/dist/activities/execute-cursor/turn-settle.js +47 -34
  58. package/dist/activities/execute-cursor/turn-settle.js.map +1 -1
  59. package/dist/activities/execute-cursor/turn-setup.d.ts +2 -2
  60. package/dist/activities/execute-cursor/turn-setup.js +5 -5
  61. package/dist/activities/execute-cursor/turn-setup.js.map +1 -1
  62. package/dist/activities/execute-cursor/turn-stream.d.ts +23 -14
  63. package/dist/activities/execute-cursor/turn-stream.js +41 -28
  64. package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
  65. package/dist/activities/execute-cursor/turn.d.ts +4 -4
  66. package/dist/activities/execute-cursor/turn.js +5 -5
  67. package/dist/activities/execute-cursor/usage-pricing.d.ts +2 -2
  68. package/dist/activities/execute-cursor/usage-pricing.js +2 -2
  69. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +2 -2
  70. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +2 -2
  71. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +16 -11
  72. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +22 -10
  73. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js.map +1 -1
  74. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js +1 -1
  75. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js.map +1 -1
  76. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +2 -3
  77. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +2 -3
  78. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js.map +1 -1
  79. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +12 -3
  80. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +18 -4
  81. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -1
  82. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.d.ts +10 -1
  83. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js +24 -11
  84. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js.map +1 -1
  85. package/dist/activities/execute-deep-agent/adapter.d.ts +1 -1
  86. package/dist/activities/execute-deep-agent/adapter.js +1 -1
  87. package/dist/activities/execute-deep-agent/approval-file-change.d.ts +19 -19
  88. package/dist/activities/execute-deep-agent/approval-file-change.js +16 -15
  89. package/dist/activities/execute-deep-agent/approval-file-change.js.map +1 -1
  90. package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +2 -2
  91. package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +2 -2
  92. package/dist/activities/execute-deep-agent/hitl.d.ts +2 -2
  93. package/dist/activities/execute-deep-agent/hitl.js +2 -2
  94. package/dist/activities/execute-deep-agent/inline-publisher.d.ts +13 -3
  95. package/dist/activities/execute-deep-agent/inline-publisher.js +3 -3
  96. package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -1
  97. package/dist/activities/execute-deep-agent/prompt-builder.d.ts +3 -3
  98. package/dist/activities/execute-deep-agent/prompt-builder.js +6 -7
  99. package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
  100. package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +16 -8
  101. package/dist/activities/execute-deep-agent/streaming-side-effects.js +20 -33
  102. package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
  103. package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +3 -3
  104. package/dist/activities/execute-deep-agent/subagent-transformer.js +1 -1
  105. package/dist/activities/execute-deep-agent/translator.d.ts +134 -0
  106. package/dist/activities/execute-deep-agent/translator.js +418 -0
  107. package/dist/activities/execute-deep-agent/translator.js.map +1 -0
  108. package/dist/activities/execute-deep-agent/turn-settle.d.ts +13 -7
  109. package/dist/activities/execute-deep-agent/turn-settle.js +34 -45
  110. package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -1
  111. package/dist/activities/execute-deep-agent/turn-setup.d.ts +8 -8
  112. package/dist/activities/execute-deep-agent/turn-setup.js +7 -7
  113. package/dist/activities/execute-deep-agent/turn-stream.d.ts +13 -10
  114. package/dist/activities/execute-deep-agent/turn-stream.js +44 -41
  115. package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -1
  116. package/dist/activities/execute-deep-agent/turn.d.ts +3 -3
  117. package/dist/activities/execute-deep-agent/turn.js +3 -3
  118. package/dist/activities/generate-session-subject.d.ts +25 -4
  119. package/dist/activities/generate-session-subject.js +17 -7
  120. package/dist/activities/generate-session-subject.js.map +1 -1
  121. package/dist/client/stigmer-client.d.ts +17 -6
  122. package/dist/client/stigmer-client.js +47 -14
  123. package/dist/client/stigmer-client.js.map +1 -1
  124. package/dist/config.d.ts +6 -3
  125. package/dist/config.js +4 -1
  126. package/dist/config.js.map +1 -1
  127. package/dist/harness/approval-decisions.d.ts +1 -1
  128. package/dist/harness/approval-decisions.js +1 -1
  129. package/dist/harness/capabilities.d.ts +21 -11
  130. package/dist/harness/capabilities.js +2 -2
  131. package/dist/harness/capture.d.ts +4 -4
  132. package/dist/harness/capture.js +4 -4
  133. package/dist/harness/persist-chokepoint.d.ts +3 -3
  134. package/dist/harness/persist-chokepoint.js +3 -3
  135. package/dist/harness/registry.d.ts +2 -2
  136. package/dist/harness/registry.js +2 -2
  137. package/dist/harness/run-turn.d.ts +6 -4
  138. package/dist/harness/run-turn.js +31 -9
  139. package/dist/harness/run-turn.js.map +1 -1
  140. package/dist/harness/stop-controller.d.ts +1 -1
  141. package/dist/harness/stop-controller.js +1 -1
  142. package/dist/harness/terminal-table.d.ts +7 -7
  143. package/dist/harness/terminal-table.js +7 -7
  144. package/dist/harness/transcript/builder.d.ts +182 -0
  145. package/dist/harness/transcript/builder.js +693 -0
  146. package/dist/harness/transcript/builder.js.map +1 -0
  147. package/dist/harness/transcript/events.d.ts +218 -0
  148. package/dist/harness/transcript/events.js +50 -0
  149. package/dist/harness/transcript/events.js.map +1 -0
  150. package/dist/harness/transcript/state.d.ts +110 -0
  151. package/dist/harness/transcript/state.js +148 -0
  152. package/dist/harness/transcript/state.js.map +1 -0
  153. package/dist/harness/turn-context.d.ts +54 -38
  154. package/dist/harness/turn-context.js +42 -43
  155. package/dist/harness/turn-context.js.map +1 -1
  156. package/dist/harness/types.d.ts +63 -22
  157. package/dist/harness/types.js +12 -11
  158. package/dist/harness/types.js.map +1 -1
  159. package/dist/harness/usage-accumulator.d.ts +2 -2
  160. package/dist/harness/usage-accumulator.js +2 -2
  161. package/dist/harness-adapters.d.ts +5 -4
  162. package/dist/harness-adapters.js +5 -4
  163. package/dist/harness-adapters.js.map +1 -1
  164. package/dist/interceptors/run-credential-activity.d.ts +28 -0
  165. package/dist/interceptors/run-credential-activity.js +56 -0
  166. package/dist/interceptors/run-credential-activity.js.map +1 -0
  167. package/dist/middleware/approval-gate.d.ts +6 -0
  168. package/dist/middleware/approval-gate.js +7 -57
  169. package/dist/middleware/approval-gate.js.map +1 -1
  170. package/dist/middleware/cost-advisory.d.ts +3 -3
  171. package/dist/middleware/cost-advisory.js +3 -3
  172. package/dist/middleware/index.d.ts +1 -1
  173. package/dist/middleware/index.js +1 -1
  174. package/dist/runner-manager.js +10 -4
  175. package/dist/runner-manager.js.map +1 -1
  176. package/dist/shared/activity-input.d.ts +9 -0
  177. package/dist/shared/activity-input.js +17 -0
  178. package/dist/shared/activity-input.js.map +1 -1
  179. package/dist/shared/approval-policy.d.ts +53 -0
  180. package/dist/shared/approval-policy.js +76 -0
  181. package/dist/shared/approval-policy.js.map +1 -1
  182. package/dist/shared/args-preview.d.ts +45 -22
  183. package/dist/shared/args-preview.js +51 -41
  184. package/dist/shared/args-preview.js.map +1 -1
  185. package/dist/shared/attachment-resolver.d.ts +4 -4
  186. package/dist/shared/attachment-resolver.js +4 -4
  187. package/dist/shared/attachment-zip.d.ts +2 -2
  188. package/dist/shared/attachment-zip.js +2 -2
  189. package/dist/shared/channel-attachment.d.ts +8 -5
  190. package/dist/shared/channel-attachment.js +10 -6
  191. package/dist/shared/channel-attachment.js.map +1 -1
  192. package/dist/shared/cost-guard.d.ts +2 -2
  193. package/dist/shared/cost-guard.js +2 -2
  194. package/dist/shared/exact-apply.d.ts +1 -1
  195. package/dist/shared/exact-apply.js +1 -1
  196. package/dist/shared/execution-context.d.ts +2 -2
  197. package/dist/shared/execution-context.js +2 -2
  198. package/dist/shared/extract-structured-output.d.ts +2 -2
  199. package/dist/shared/extract-structured-output.js +2 -2
  200. package/dist/shared/filereview/cas-touched.d.ts +2 -2
  201. package/dist/shared/filereview/cas-touched.js +2 -2
  202. package/dist/shared/filereview/progress.d.ts +13 -0
  203. package/dist/shared/filereview/progress.js +13 -0
  204. package/dist/shared/filereview/progress.js.map +1 -1
  205. package/dist/shared/heartbeat.d.ts +1 -1
  206. package/dist/shared/heartbeat.js +1 -1
  207. package/dist/shared/llm-backend.d.ts +0 -4
  208. package/dist/shared/llm-backend.js +0 -4
  209. package/dist/shared/llm-backend.js.map +1 -1
  210. package/dist/shared/memory-attachment.d.ts +16 -9
  211. package/dist/shared/memory-attachment.js +18 -10
  212. package/dist/shared/memory-attachment.js.map +1 -1
  213. package/dist/shared/model-error.d.ts +1 -2
  214. package/dist/shared/model-error.js +1 -2
  215. package/dist/shared/model-error.js.map +1 -1
  216. package/dist/shared/persist-decision.d.ts +18 -24
  217. package/dist/shared/persist-decision.js +19 -11
  218. package/dist/shared/persist-decision.js.map +1 -1
  219. package/dist/shared/prompt-sections.d.ts +4 -4
  220. package/dist/shared/prompt-sections.js +4 -4
  221. package/dist/shared/run-credential-store.d.ts +32 -0
  222. package/dist/shared/run-credential-store.js +39 -0
  223. package/dist/shared/run-credential-store.js.map +1 -0
  224. package/dist/shared/run-credential.d.ts +61 -0
  225. package/dist/shared/run-credential.js +68 -0
  226. package/dist/shared/run-credential.js.map +1 -0
  227. package/dist/shared/skill-resolver.d.ts +3 -3
  228. package/dist/shared/skill-resolver.js +3 -3
  229. package/dist/shared/status-offload.d.ts +1 -1
  230. package/dist/shared/status-offload.js +2 -2
  231. package/dist/shared/status-offload.js.map +1 -1
  232. package/dist/shared/streaming-scheduler.d.ts +2 -7
  233. package/dist/shared/streaming-scheduler.js +6 -14
  234. package/dist/shared/streaming-scheduler.js.map +1 -1
  235. package/dist/shared/subagent-rows.d.ts +2 -2
  236. package/dist/shared/subagent-rows.js +2 -2
  237. package/dist/shared/synthesized-attachment.d.ts +30 -3
  238. package/dist/shared/synthesized-attachment.js +26 -0
  239. package/dist/shared/synthesized-attachment.js.map +1 -1
  240. package/dist/shared/todos.d.ts +3 -3
  241. package/dist/shared/todos.js +3 -3
  242. package/dist/shared/tool-row.d.ts +19 -1
  243. package/dist/shared/tool-row.js +36 -2
  244. package/dist/shared/tool-row.js.map +1 -1
  245. package/dist/shared/worker-shutdown.d.ts +1 -1
  246. package/dist/shared/worker-shutdown.js +1 -1
  247. package/dist/shared/workspace/session-provision.d.ts +1 -1
  248. package/dist/shared/workspace/session-provision.js +1 -1
  249. package/dist/shared/workspace/sources/empty.d.ts +1 -1
  250. package/dist/shared/workspace/sources/empty.js +1 -2
  251. package/dist/shared/workspace/sources/empty.js.map +1 -1
  252. package/dist/shared/workspace/sources/git.js +4 -4
  253. package/dist/shared/workspace/sources/git.js.map +1 -1
  254. package/dist/shared/workspace/sources/local-path.js +6 -6
  255. package/dist/shared/workspace/sources/local-path.js.map +1 -1
  256. package/dist/shared/workspace/stigmer-link.d.ts +1 -1
  257. package/dist/shared/workspace/stigmer-link.js +1 -1
  258. package/dist/shared/workspace/types.d.ts +2 -5
  259. package/dist/shared/workspace/types.js +0 -6
  260. package/dist/shared/workspace/types.js.map +1 -1
  261. package/dist/shared/workspace/writeback-coordinator.d.ts +17 -4
  262. package/dist/shared/workspace/writeback-coordinator.js +7 -9
  263. package/dist/shared/workspace/writeback-coordinator.js.map +1 -1
  264. package/dist/worker.js +10 -3
  265. package/dist/worker.js.map +1 -1
  266. package/dist/workflow-source.d.ts +10 -0
  267. package/dist/workflow-source.js +12 -0
  268. package/dist/workflow-source.js.map +1 -1
  269. package/dist/workflows/execute-from-execution.d.ts +15 -0
  270. package/dist/workflows/execute-from-execution.js +11 -0
  271. package/dist/workflows/execute-from-execution.js.map +1 -1
  272. package/dist/workflows/index.d.ts +5 -3
  273. package/dist/workflows/index.js +5 -3
  274. package/dist/workflows/index.js.map +1 -1
  275. package/dist/workflows/interceptors/run-credential.d.ts +34 -0
  276. package/dist/workflows/interceptors/run-credential.js +71 -0
  277. package/dist/workflows/interceptors/run-credential.js.map +1 -0
  278. package/package.json +4 -4
  279. package/src/__test-utils__/__tests__/execution-record-barrier.test.ts +70 -0
  280. package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +35 -1
  281. package/src/__test-utils__/approval-contract/contract.ts +1 -1
  282. package/src/__test-utils__/approval-contract/types.ts +1 -1
  283. package/src/__test-utils__/harness-boot-order-child.ts +1 -1
  284. package/src/__test-utils__/harness-contract/contract.ts +8 -8
  285. package/src/__test-utils__/harness-contract/recording-sink.ts +11 -1
  286. package/src/__test-utils__/harness-contract/runtime-contract.ts +52 -16
  287. package/src/__test-utils__/harness-contract/scripted-adapter.ts +47 -43
  288. package/src/__test-utils__/hermetic-activity.ts +113 -9
  289. package/src/__test-utils__/model-registry-fixture.ts +31 -7
  290. package/src/__test-utils__/module-specifiers.ts +32 -3
  291. package/src/__tests__/harness-boot-order.test.ts +1 -1
  292. package/src/__tests__/harness-contract.test.ts +1 -1
  293. package/src/__tests__/run-credential-e2e.test.ts +233 -0
  294. package/src/__tests__/run-credential-registration.test.ts +80 -0
  295. package/src/__tests__/runner-manager.test.ts +1 -1
  296. package/src/activities/__tests__/generate-session-subject-wire.test.ts +119 -0
  297. package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +1 -1
  298. package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +2 -2
  299. package/src/activities/execute-cursor/__test-utils__/fold.ts +116 -0
  300. package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +1 -1
  301. package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +67 -17
  302. package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +19 -5
  303. package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +2 -1
  304. package/src/activities/execute-cursor/__tests__/approval-state.test.ts +14 -21
  305. package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +3 -3
  306. package/src/activities/execute-cursor/__tests__/coarse-fingerprint.test.ts +2 -1
  307. package/src/activities/execute-cursor/__tests__/cursor-event-recorder.test.ts +142 -0
  308. package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.test.ts +19 -8
  309. package/src/activities/execute-cursor/__tests__/cursor-sdk-auth-smoke.test.ts +10 -8
  310. package/src/activities/execute-cursor/__tests__/cursor-transcript-live.test.ts +298 -0
  311. package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +4 -2
  312. package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +1 -1
  313. package/src/activities/execute-cursor/__tests__/hermetic/deny-and-retry.test.ts +1 -1
  314. package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +1 -1
  315. package/src/activities/execute-cursor/__tests__/hermetic/goldens/mcp-tool-call.status.json +71 -0
  316. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-task-note.status.json +73 -0
  317. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.error-delta.status.json +78 -0
  318. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.output-first.status.json +72 -0
  319. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.status.json +72 -0
  320. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sub-agent-delegation.status.json +109 -0
  321. package/src/activities/execute-cursor/__tests__/hermetic/goldens/thinking-turn.status.json +78 -0
  322. package/src/activities/execute-cursor/__tests__/hermetic/goldens/todo-write.status.json +119 -0
  323. package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-error.status.json +68 -0
  324. package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-only-step.status.json +67 -0
  325. package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.status.json +1 -1
  326. package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +7 -7
  327. package/src/activities/execute-cursor/__tests__/hermetic/mcp-tool-call.test.ts +146 -0
  328. package/src/activities/execute-cursor/__tests__/hermetic/pause-vs-shutdown.test.ts +5 -5
  329. package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +2 -1
  330. package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +2 -1
  331. package/src/activities/execute-cursor/__tests__/hermetic/sdk-task-note.test.ts +122 -0
  332. package/src/activities/execute-cursor/__tests__/hermetic/shell-output-delta.test.ts +276 -0
  333. package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +8 -8
  334. package/src/activities/execute-cursor/__tests__/hermetic/sub-agent-delegation.test.ts +196 -0
  335. package/src/activities/execute-cursor/__tests__/hermetic/thinking-turn.test.ts +145 -0
  336. package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +1 -1
  337. package/src/activities/execute-cursor/__tests__/hermetic/todo-write.test.ts +165 -0
  338. package/src/activities/execute-cursor/__tests__/hermetic/tool-call.test.ts +3 -3
  339. package/src/activities/execute-cursor/__tests__/hermetic/tool-error.test.ts +138 -0
  340. package/src/activities/execute-cursor/__tests__/hermetic/tool-only-step.test.ts +130 -0
  341. package/src/activities/execute-cursor/__tests__/hermetic/unattributed-hook-block.test.ts +13 -1
  342. package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +2 -2
  343. package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +43 -60
  344. package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +23 -28
  345. package/src/activities/execute-cursor/__tests__/hook-script.test.ts +2 -1
  346. package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +1 -1
  347. package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +5 -5
  348. package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +11 -13
  349. package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +8 -11
  350. package/src/activities/execute-cursor/__tests__/tool-result-image.test.ts +8 -22
  351. package/src/activities/execute-cursor/__tests__/translator.test.ts +594 -0
  352. package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +8 -5
  353. package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +87 -63
  354. package/src/activities/execute-cursor/adapter.ts +4 -4
  355. package/src/activities/execute-cursor/approval-policy.ts +12 -24
  356. package/src/activities/execute-cursor/approval-state.ts +66 -1
  357. package/src/activities/execute-cursor/boundary-rows.ts +1132 -0
  358. package/src/activities/execute-cursor/cursor-capabilities.ts +1 -1
  359. package/src/activities/execute-cursor/cursor-event-recorder.ts +57 -28
  360. package/src/activities/execute-cursor/fetch-interceptor.ts +1 -1
  361. package/src/activities/execute-cursor/http2-interceptor.ts +1 -1
  362. package/src/activities/execute-cursor/prompt-builder.ts +6 -6
  363. package/src/activities/execute-cursor/service-tier.ts +1 -2
  364. package/src/activities/execute-cursor/sub-agent-steps.ts +188 -0
  365. package/src/activities/execute-cursor/tool-result.ts +128 -0
  366. package/src/activities/execute-cursor/translator.ts +541 -0
  367. package/src/activities/execute-cursor/turn-boundary.ts +21 -14
  368. package/src/activities/execute-cursor/turn-settle.ts +46 -34
  369. package/src/activities/execute-cursor/turn-setup.ts +5 -5
  370. package/src/activities/execute-cursor/turn-stream.ts +49 -46
  371. package/src/activities/execute-cursor/turn.ts +5 -5
  372. package/src/activities/execute-cursor/usage-pricing.ts +2 -2
  373. package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +2 -2
  374. package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +23 -11
  375. package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +1 -1
  376. package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +2 -3
  377. package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +25 -4
  378. package/src/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.ts +25 -11
  379. package/src/activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts +1 -1
  380. package/src/activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts +1 -1
  381. package/src/activities/execute-deep-agent/__tests__/approval-file-change.test.ts +6 -17
  382. package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +25 -8
  383. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +2 -7
  384. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +4 -14
  385. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +1 -5
  386. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +4 -7
  387. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +1 -5
  388. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +2 -9
  389. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +2 -9
  390. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +1 -4
  391. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +1 -4
  392. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +1 -4
  393. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +109 -76
  394. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +1 -5
  395. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +2 -10
  396. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +2 -10
  397. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +1 -5
  398. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +3 -6
  399. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +1 -4
  400. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +1 -4
  401. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/write-todos.status.json +92 -0
  402. package/src/activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts +3 -3
  403. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-approve-all-lease.test.ts +9 -5
  404. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +3 -3
  405. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +3 -3
  406. package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +7 -6
  407. package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +10 -11
  408. package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +4 -4
  409. package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +9 -8
  410. package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +21 -13
  411. package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +2 -2
  412. package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +7 -7
  413. package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +28 -12
  414. package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +21 -21
  415. package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -5
  416. package/src/activities/execute-deep-agent/__tests__/hermetic/write-todos.test.ts +160 -0
  417. package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +35 -30
  418. package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +3 -4
  419. package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +12 -10
  420. package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +13 -3
  421. package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +26 -18
  422. package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +1 -1
  423. package/src/activities/execute-deep-agent/__tests__/{subagent-tracker.test.ts → translator-subagents.test.ts} +76 -57
  424. package/src/activities/execute-deep-agent/__tests__/{v3-status-builder.test.ts → translator-through-builder.test.ts} +213 -299
  425. package/src/activities/execute-deep-agent/__tests__/translator.test.ts +505 -0
  426. package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +11 -29
  427. package/src/activities/execute-deep-agent/adapter.ts +1 -1
  428. package/src/activities/execute-deep-agent/approval-file-change.ts +20 -22
  429. package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +2 -2
  430. package/src/activities/execute-deep-agent/hitl.ts +2 -2
  431. package/src/activities/execute-deep-agent/inline-publisher.ts +16 -5
  432. package/src/activities/execute-deep-agent/prompt-builder.ts +6 -7
  433. package/src/activities/execute-deep-agent/streaming-side-effects.ts +22 -31
  434. package/src/activities/execute-deep-agent/subagent-transformer.ts +3 -3
  435. package/src/activities/execute-deep-agent/translator.ts +463 -0
  436. package/src/activities/execute-deep-agent/turn-settle.ts +35 -43
  437. package/src/activities/execute-deep-agent/turn-setup.ts +8 -8
  438. package/src/activities/execute-deep-agent/turn-stream.ts +53 -51
  439. package/src/activities/execute-deep-agent/turn.ts +3 -3
  440. package/src/activities/generate-session-subject.ts +29 -4
  441. package/src/client/__tests__/stigmer-client.test.ts +92 -0
  442. package/src/client/stigmer-client.ts +48 -14
  443. package/src/config.ts +6 -3
  444. package/src/harness/README.md +335 -0
  445. package/src/harness/__tests__/approval-decisions.test.ts +2 -2
  446. package/src/harness/__tests__/capture.test.ts +3 -3
  447. package/src/harness/__tests__/import-direction.test.ts +3 -2
  448. package/src/harness/__tests__/mount-skills.test.ts +4 -1
  449. package/src/harness/__tests__/readme-index.test.ts +339 -0
  450. package/src/harness/__tests__/run-turn.test.ts +131 -6
  451. package/src/harness/__tests__/transcript-is-engine-free.test.ts +83 -0
  452. package/src/harness/__tests__/transcript-writers.test.ts +191 -0
  453. package/src/harness/__tests__/turn-attachments-vision.test.ts +5 -2
  454. package/src/harness/__tests__/turn-context.test.ts +5 -5
  455. package/src/harness/approval-decisions.ts +1 -1
  456. package/src/harness/capabilities.ts +21 -11
  457. package/src/harness/capture.ts +4 -4
  458. package/src/harness/persist-chokepoint.ts +3 -3
  459. package/src/harness/registry.ts +2 -2
  460. package/src/harness/run-turn.ts +33 -9
  461. package/src/harness/stop-controller.ts +1 -1
  462. package/src/harness/terminal-table.ts +7 -7
  463. package/src/harness/transcript/__tests__/builder.test.ts +975 -0
  464. package/src/harness/transcript/__tests__/state.test.ts +143 -0
  465. package/src/harness/transcript/builder.ts +755 -0
  466. package/src/harness/transcript/events.ts +262 -0
  467. package/src/harness/transcript/state.ts +167 -0
  468. package/src/harness/turn-context.ts +61 -46
  469. package/src/harness/types.ts +64 -22
  470. package/src/harness/usage-accumulator.ts +2 -2
  471. package/src/harness-adapters.ts +5 -4
  472. package/src/interceptors/__tests__/run-credential-activity.test.ts +133 -0
  473. package/src/interceptors/run-credential-activity.ts +67 -0
  474. package/src/middleware/__tests__/cost-advisory.test.ts +2 -2
  475. package/src/middleware/approval-gate.ts +7 -74
  476. package/src/middleware/cost-advisory.ts +3 -3
  477. package/src/middleware/index.ts +1 -1
  478. package/src/runner-manager.ts +14 -4
  479. package/src/shared/__tests__/approval-policy.test.ts +45 -0
  480. package/src/shared/__tests__/args-preview.test.ts +40 -20
  481. package/src/shared/__tests__/attachment-naming.test.ts +1 -1
  482. package/src/shared/__tests__/attachment-resolver.test.ts +5 -5
  483. package/src/shared/__tests__/attachment-zip.test.ts +1 -1
  484. package/src/shared/__tests__/blueprint-resolver.test.ts +1 -1
  485. package/src/shared/__tests__/channel-attachment.test.ts +12 -0
  486. package/src/shared/__tests__/cost-guard.test.ts +1 -1
  487. package/src/shared/__tests__/exact-apply.test.ts +2 -1
  488. package/src/shared/__tests__/memory-attachment.test.ts +17 -0
  489. package/src/shared/__tests__/persist-decision.test.ts +19 -33
  490. package/src/shared/__tests__/prompt-sections.test.ts +1 -1
  491. package/src/shared/__tests__/run-credential.test.ts +111 -0
  492. package/src/shared/__tests__/stamp-flowed-rows.test.ts +1 -1
  493. package/src/shared/__tests__/status-offload.test.ts +1 -1
  494. package/src/shared/__tests__/streaming-scheduler.test.ts +8 -9
  495. package/src/shared/__tests__/todos.test.ts +1 -1
  496. package/src/shared/__tests__/tool-row.test.ts +1 -1
  497. package/src/shared/activity-input.ts +21 -0
  498. package/src/shared/approval-policy.ts +95 -0
  499. package/src/shared/args-preview.ts +51 -42
  500. package/src/shared/attachment-resolver.ts +4 -4
  501. package/src/shared/attachment-zip.ts +2 -2
  502. package/src/shared/channel-attachment.ts +14 -6
  503. package/src/shared/cost-guard.ts +2 -2
  504. package/src/shared/exact-apply.ts +1 -1
  505. package/src/shared/execution-context.ts +2 -2
  506. package/src/shared/extract-structured-output.ts +2 -2
  507. package/src/shared/filereview/__tests__/capture.test.ts +9 -5
  508. package/src/shared/filereview/__tests__/git-substrate.test.ts +4 -1
  509. package/src/shared/filereview/__tests__/proxy-reconcile.test.ts +3 -3
  510. package/src/shared/filereview/cas-touched.ts +2 -2
  511. package/src/shared/filereview/progress.ts +13 -0
  512. package/src/shared/heartbeat.ts +1 -1
  513. package/src/shared/llm-backend.ts +0 -4
  514. package/src/shared/memory-attachment.ts +22 -10
  515. package/src/shared/model-error.ts +1 -2
  516. package/src/shared/persist-decision.ts +19 -28
  517. package/src/shared/prompt-sections.ts +4 -4
  518. package/src/shared/run-credential-store.ts +45 -0
  519. package/src/shared/run-credential.ts +70 -0
  520. package/src/shared/skill-resolver.ts +3 -3
  521. package/src/shared/status-offload.ts +2 -2
  522. package/src/shared/streaming-scheduler.ts +8 -13
  523. package/src/shared/subagent-rows.ts +2 -2
  524. package/src/shared/synthesized-attachment.ts +38 -3
  525. package/src/shared/todos.ts +3 -3
  526. package/src/shared/tool-row.ts +38 -2
  527. package/src/shared/worker-shutdown.ts +1 -1
  528. package/src/shared/workspace/__tests__/git-source.test.ts +3 -3
  529. package/src/shared/workspace/__tests__/provisioner.test.ts +5 -5
  530. package/src/shared/workspace/__tests__/session-provision.test.ts +2 -2
  531. package/src/shared/workspace/__tests__/writeback-coordinator.integration.test.ts +8 -9
  532. package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +25 -25
  533. package/src/shared/workspace/provisioner.ts +1 -1
  534. package/src/shared/workspace/session-provision.ts +1 -1
  535. package/src/shared/workspace/sources/empty.ts +2 -2
  536. package/src/shared/workspace/sources/git.ts +3 -4
  537. package/src/shared/workspace/sources/local-path.ts +5 -6
  538. package/src/shared/workspace/stigmer-link.ts +1 -1
  539. package/src/shared/workspace/types.ts +2 -5
  540. package/src/shared/workspace/writeback-coordinator.ts +23 -12
  541. package/src/worker.ts +15 -3
  542. package/src/workflow-source.ts +15 -0
  543. package/src/workflows/__tests__/run-credential-interceptor.test.ts +178 -0
  544. package/src/workflows/execute-from-execution.ts +17 -0
  545. package/src/workflows/index.ts +5 -3
  546. package/src/workflows/interceptors/run-credential.ts +101 -0
  547. package/dist/activities/execute-cursor/delta-enricher.d.ts +0 -87
  548. package/dist/activities/execute-cursor/delta-enricher.js +0 -265
  549. package/dist/activities/execute-cursor/delta-enricher.js.map +0 -1
  550. package/dist/activities/execute-cursor/message-translator.js +0 -2040
  551. package/dist/activities/execute-cursor/message-translator.js.map +0 -1
  552. package/dist/activities/execute-cursor/todo-tracker.d.ts +0 -40
  553. package/dist/activities/execute-cursor/todo-tracker.js +0 -80
  554. package/dist/activities/execute-cursor/todo-tracker.js.map +0 -1
  555. package/dist/activities/execute-deep-agent/execution-state.d.ts +0 -54
  556. package/dist/activities/execute-deep-agent/execution-state.js +0 -68
  557. package/dist/activities/execute-deep-agent/execution-state.js.map +0 -1
  558. package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +0 -65
  559. package/dist/activities/execute-deep-agent/status-builder-shared.js +0 -90
  560. package/dist/activities/execute-deep-agent/status-builder-shared.js.map +0 -1
  561. package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +0 -113
  562. package/dist/activities/execute-deep-agent/subagent-tracker.js +0 -400
  563. package/dist/activities/execute-deep-agent/subagent-tracker.js.map +0 -1
  564. package/dist/activities/execute-deep-agent/v3-events.d.ts +0 -102
  565. package/dist/activities/execute-deep-agent/v3-events.js +0 -35
  566. package/dist/activities/execute-deep-agent/v3-events.js.map +0 -1
  567. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.d.ts +0 -15
  568. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js +0 -235
  569. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js.map +0 -1
  570. package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +0 -111
  571. package/dist/activities/execute-deep-agent/v3-status-builder.js +0 -457
  572. package/dist/activities/execute-deep-agent/v3-status-builder.js.map +0 -1
  573. package/dist/shared/execution-status-writer.d.ts +0 -31
  574. package/dist/shared/execution-status-writer.js +0 -43
  575. package/dist/shared/execution-status-writer.js.map +0 -1
  576. package/src/activities/execute-cursor/__tests__/delta-enricher.test.ts +0 -310
  577. package/src/activities/execute-cursor/__tests__/message-translator.test.ts +0 -1033
  578. package/src/activities/execute-cursor/__tests__/todo-tracker.test.ts +0 -498
  579. package/src/activities/execute-cursor/delta-enricher.ts +0 -307
  580. package/src/activities/execute-cursor/message-translator.ts +0 -2319
  581. package/src/activities/execute-cursor/todo-tracker.ts +0 -91
  582. package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +0 -148
  583. package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +0 -154
  584. package/src/activities/execute-deep-agent/__tests__/status-builder-shared.test.ts +0 -47
  585. package/src/activities/execute-deep-agent/__tests__/v3-protocol-normalizer.test.ts +0 -324
  586. package/src/activities/execute-deep-agent/execution-state.ts +0 -78
  587. package/src/activities/execute-deep-agent/status-builder-shared.ts +0 -142
  588. package/src/activities/execute-deep-agent/subagent-tracker.ts +0 -479
  589. package/src/activities/execute-deep-agent/v3-events.ts +0 -153
  590. package/src/activities/execute-deep-agent/v3-protocol-normalizer.ts +0 -264
  591. package/src/activities/execute-deep-agent/v3-status-builder.ts +0 -565
  592. package/src/shared/execution-status-writer.ts +0 -56
@@ -10,20 +10,29 @@
10
10
  * retry froze the UI and mis-handled a mid-retry pause. One loop removes that
11
11
  * drift by construction.
12
12
  *
13
+ * The transcript (since #1097): every stream event goes through the harness's
14
+ * translator (`translator.ts`) into the shared `TranscriptBuilder`
15
+ * (`harness/transcript/builder.ts`), and the delta channel's facts, which the
16
+ * translator QUEUES as they arrive in `onDelta`, are drained into the builder
17
+ * after each stream event — never during an awaited persist, where a row
18
+ * write would land on a row the offload is replacing.
19
+ * Until #1097 this loop fed three writers of its own (the message accumulator,
20
+ * the delta enricher, the todo tracker), the Cursor copy of the folding rule.
21
+ *
13
22
  * What the loop asks of the runtime, through the sink (`harness/types.ts`):
14
23
  * `recordActivity()` per event (with the tool name) and per delta, so the
15
24
  * runtime's stall watchdog measures the engine; `reportUsage()` per
16
25
  * `turn-ended` delta, priced here at the requested variant's rates
17
26
  * (`usage-pricing.ts`), so the runtime accounts and enforces the cost cap;
18
27
  * `requestPersist()` where a discrete change or the streaming cadence says
19
- * so (`shared/persist-decision.ts` over this loop's own dirty flags), AWAITED,
28
+ * so (`shared/persist-decision.ts` over the builder's dirty flag), AWAITED,
20
29
  * so a platform STOP the runtime reads from that write aborts the signal
21
30
  * before the next event is pulled; and `stopSignal`, checked at every event
22
31
  * boundary and listened to inside the pull, where an abort cancels the SDK
23
32
  * run — the one way a wedged stream is unblocked, and the same act for every
24
33
  * cause of stopping (the runtime knows why; this loop never does).
25
34
  *
26
- * Until S2 M3 this loop armed its own stall watchdog, enforced the cost cap,
35
+ * Until #1070 this loop armed its own stall watchdog, enforced the cost cap,
27
36
  * read STOP from its own persist, and told a pause from the activity's
28
37
  * cancellation signal; every one of those is the runtime's now, and the loop
29
38
  * reports only `completed`, `first-denial` or `interrupted`.
@@ -44,15 +53,19 @@ export function newTurnStreamState() {
44
53
  * Build the shared onDelta callback. The Cursor SDK's fine-grained delta channel
45
54
  * carries token usage, live shell output, and precise tool-call timings; it also
46
55
  * fires far more often than discrete stream events, so it is where the runtime's
47
- * stall timer is reset during a long model generation.
56
+ * stall timer is reset during a long model generation. Usage is priced here
57
+ * (a loop concern); the transcript facts are the translator's to queue.
48
58
  */
49
59
  export function makeCursorTurnOnDelta(deps) {
50
- const { sink, usagePricer, deltaEnricher, promptEstimatedTokens, executionId, state } = deps;
60
+ const { sink, usagePricer, translator, eventRecorder, promptEstimatedTokens, executionId, state } = deps;
51
61
  return ({ update }) => {
52
62
  // Progress on the delta channel too: a long model generation emits token
53
63
  // deltas but few discrete stream events, and resetting only in the stream
54
64
  // loop would false-positive a stall.
55
65
  sink.recordActivity();
66
+ // Recorded on arrival, before anything reads it, so the file's order is
67
+ // the SDK's order across both channels.
68
+ eventRecorder?.recordDelta(update);
56
69
  if (update.type === "turn-ended" && update.usage) {
57
70
  // The running estimate advances only here; the runtime enforces the cap
58
71
  // and aborts the signal, which the loop reads at the next boundary.
@@ -66,7 +79,7 @@ export function makeCursorTurnOnDelta(deps) {
66
79
  `cursorOverhead=${cursorOverhead} (estimated)`);
67
80
  }
68
81
  }
69
- deltaEnricher.processDelta(update);
82
+ translator.observeDelta(update);
70
83
  };
71
84
  }
72
85
  /**
@@ -78,8 +91,8 @@ export function makeCursorTurnOnDelta(deps) {
78
91
  * post-stream finalize and the settle.
79
92
  */
80
93
  export async function consumeCursorTurnStream(run, deps) {
81
- const { sink, accumulator, todoTracker, deltaEnricher, eventRecorder, scheduler, hitlDir, executionId, state, } = deps;
82
- const { status, stopSignal } = sink;
94
+ const { sink, translator, eventRecorder, scheduler, hitlDir, executionId, state, } = deps;
95
+ const { stopSignal, transcript } = sink;
83
96
  // The runtime's stop, whatever its cause, ends the run through the SDK's
84
97
  // own cancel: that is what unblocks a wedged `for await` (a stall), and it
85
98
  // stops the engine's tools and deltas from outliving the turn on every
@@ -106,12 +119,14 @@ export async function consumeCursorTurnStream(run, deps) {
106
119
  // Progress: reset the runtime's stall timer on every stream event,
107
120
  // naming the tool so a stall's copy can say `last tool: shell`.
108
121
  sink.recordActivity(event.type === "tool_call" && typeof event.name === "string" ? event.name : undefined);
109
- eventRecorder?.record(event, state.eventCount);
110
- accumulator.processEvent(event);
111
- todoTracker.processEvent(event);
112
- if (event.type === "tool_call" && event.name === "task") {
113
- accumulator.trackSubAgentExecution(event);
114
- }
122
+ eventRecorder?.record(event);
123
+ // The stream event, then the deltas that arrived since the last one —
124
+ // the enricher's order, kept so a completion the delta channel reported
125
+ // in the same window as the stream's own defers to the stream's instant.
126
+ for (const fact of translator.translate(event))
127
+ transcript.apply(fact);
128
+ for (const fact of translator.drainDeltas())
129
+ transcript.apply(fact);
115
130
  // First-denial stop (HITL clean pause). In CAPTURE mode this fires only for
116
131
  // an IRREVERSIBLE tool the hook still gates (shell, MCP, or a gitignored
117
132
  // write/delete) — file edits flow freely and are captured at the turn
@@ -126,7 +141,7 @@ export async function consumeCursorTurnStream(run, deps) {
126
141
  // post-denial reaction (thinking, narration, a workaround shell) stream and
127
142
  // persist live (production case aex_01kwj07f7g23c3wp9sn8496z5g). The
128
143
  // tool_call-event read stays as the backstop for platforms where fs.watch
129
- // is unreliable; the current event was already accumulated above, so the
144
+ // is unreliable; the current event was already folded above, so the
130
145
  // anchor's own row is always present for the turn-boundary gate overlay.
131
146
  if (!state.firstDenialDetected && hitlDir && (state.denialLedgerDirty || event.type === "tool_call")) {
132
147
  state.denialLedgerDirty = false;
@@ -152,7 +167,6 @@ export async function consumeCursorTurnStream(run, deps) {
152
167
  break;
153
168
  }
154
169
  }
155
- deltaEnricher.applyEnrichments(status.messages);
156
170
  state.eventCount++;
157
171
  if (event.type === "status") {
158
172
  console.log(`ExecuteCursor stream status: execution=${executionId}, status=${JSON.stringify(event)}`);
@@ -164,23 +178,22 @@ export async function consumeCursorTurnStream(run, deps) {
164
178
  state.streamErrorMessage = statusEvent.message;
165
179
  }
166
180
  }
167
- const shouldPersist = shouldPersistStreamingStatus({
168
- deltaEnricherDirty: deltaEnricher.isDirty,
169
- todosDirty: todoTracker.isDirty,
170
- contentDirty: accumulator.isDirty,
171
- }, scheduler, state.eventCount);
181
+ // The builder's one flag is the discrete signal, as on native
182
+ // (`shared/persist-decision.ts`).
183
+ const shouldPersist = shouldPersistStreamingStatus(transcript.dirty, scheduler, state.eventCount);
172
184
  if (shouldPersist) {
173
- // The accumulator upserts sub-agent rows into `status.subAgentExecutions`
174
- // in place (wrapped by reference at construction), so every persist
175
- // already carries delegation, IN_PROGRESS included. The runtime attaches
176
- // the mid-run file-change progress on this write (the chokepoint's
177
- // step 2), as it does on every write.
185
+ // Cleared as the write is requested, not after it lands (the same
186
+ // order as the native loop): a change that folds while the write is
187
+ // in flight must dirty the next one.
188
+ transcript.markPersisted();
189
+ // The builder upserts sub-agent rows into `status.subAgentExecutions`
190
+ // in place (the status's own array), so every persist already carries
191
+ // delegation, IN_PROGRESS included. The runtime attaches the mid-run
192
+ // file-change progress on this write (the chokepoint's step 2), as it
193
+ // does on every write.
178
194
  // Awaited: the runtime reads the control plane's answer to this write,
179
195
  // and a STOP must be seen at the next event boundary, not one event late.
180
196
  await sink.requestPersist();
181
- deltaEnricher.markPersisted();
182
- todoTracker.markPersisted();
183
- accumulator.markPersisted();
184
197
  scheduler.markUpdateSent(state.eventCount);
185
198
  }
186
199
  }
@@ -1 +1 @@
1
- {"version":3,"file":"turn-stream.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/turn-stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"turn-stream.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/turn-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAIH,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA8CxE,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,mBAAmB,EAAE,KAAK;QAC1B,iBAAiB,EAAE,KAAK;QACxB,mBAAmB,EAAE,SAAS;QAC9B,kBAAkB,EAAE,SAAS;QAC7B,UAAU,EAAE,CAAC;QACb,0BAA0B,EAAE,KAAK;KAClC,CAAC;AACJ,CAAC;AA2BD;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAqB;IAErB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,qBAAqB,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACzG,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACpB,yEAAyE;QACzE,0EAA0E;QAC1E,qCAAqC;QACrC,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,wEAAwE;QACxE,wCAAwC;QACxC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjD,wEAAwE;YACxE,oEAAoE;YACpE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAElD,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC;gBACtC,KAAK,CAAC,0BAA0B,GAAG,IAAI,CAAC;gBACxC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;gBACrD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,qBAAqB,CAAC,CAAC;gBAC3E,OAAO,CAAC,GAAG,CACT,6DAA6D,WAAW,IAAI;oBAC1E,kBAAkB,cAAc,qBAAqB,qBAAqB,IAAI;oBAC9E,kBAAkB,cAAc,cAAc,CACjD,CAAC;YACJ,CAAC;QACH,CAAC;QACD,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAAkB,EAClB,IAA0B;IAE1B,MAAM,EACJ,IAAI,EACJ,UAAU,EACV,aAAa,EACb,SAAS,EACT,OAAO,EACP,WAAW,EACX,KAAK,GACN,GAAG,IAAI,CAAC;IACT,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAExC,yEAAyE;IACzE,2EAA2E;IAC3E,uEAAuE;IACvE,2EAA2E;IAC3E,+DAA+D;IAC/D,MAAM,YAAY,GAAG,GAAS,EAAE;QAC9B,OAAO,CAAC,GAAG,CAAC,yEAAyE,WAAW,EAAE,CAAC,CAAC;QACpG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE;gBACpC,OAAO,CAAC,IAAI,CACV,uEAAuE,WAAW,IAAI;oBACpF,SAAS,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CACxE,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IACF,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,YAAY,EAAE,CAAC;QACf,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEnE,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,UAAU,CAAC,OAAO;gBAAE,MAAM;YAE9B,mEAAmE;YACnE,gEAAgE;YAChE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAE3G,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAE7B,sEAAsE;YACtE,wEAAwE;YACxE,yEAAyE;YACzE,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;gBAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvE,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE;gBAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEpE,4EAA4E;YAC5E,yEAAyE;YACzE,sEAAsE;YACtE,sEAAsE;YACtE,0EAA0E;YAC1E,0EAA0E;YAC1E,sEAAsE;YACtE,0EAA0E;YAC1E,sEAAsE;YACtE,sEAAsE;YACtE,0EAA0E;YAC1E,4EAA4E;YAC5E,qEAAqE;YACrE,0EAA0E;YAC1E,oEAAoE;YACpE,yEAAyE;YACzE,IAAI,CAAC,KAAK,CAAC,mBAAmB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,CAAC;gBACrG,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAChC,sEAAsE;gBACtE,oEAAoE;gBACpE,qEAAqE;gBACrE,oDAAoD;gBACpD,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;gBACjE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC;oBACjC,OAAO,CAAC,GAAG,CACT,wCAAwC,OAAO,CAAC,MAAM,UAAU;wBAC9D,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,4BAA4B;wBACrE,mCAAmC,WAAW,EAAE,CACnD,CAAC;oBACF,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC7B,qEAAqE;wBACrE,2DAA2D;wBAC3D,KAAK,CAAC,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAC3C,GAAG,EAAE,GAAE,CAAC,EACR,CAAC,SAAkB,EAAE,EAAE;4BACrB,OAAO,CAAC,IAAI,CACV,oEAAoE;gCAClE,aAAa,WAAW,IAAI;gCAC5B,SAAS,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CACxE,CAAC;wBACJ,CAAC,CACF,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,CAAC;YACH,CAAC;YAED,KAAK,CAAC,UAAU,EAAE,CAAC;YAEnB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CACT,0CAA0C,WAAW,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CACzF,CAAC;gBACF,MAAM,WAAW,GAAG,KAA+C,CAAC;gBACpE,sEAAsE;gBACtE,kEAAkE;gBAClE,0DAA0D;gBAC1D,IAAI,WAAW,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAChH,KAAK,CAAC,kBAAkB,GAAG,WAAW,CAAC,OAAO,CAAC;gBACjD,CAAC;YACH,CAAC;YAED,8DAA8D;YAC9D,kCAAkC;YAClC,MAAM,aAAa,GAAG,4BAA4B,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAClG,IAAI,aAAa,EAAE,CAAC;gBAClB,kEAAkE;gBAClE,oEAAoE;gBACpE,qCAAqC;gBACrC,UAAU,CAAC,aAAa,EAAE,CAAC;gBAC3B,sEAAsE;gBACtE,sEAAsE;gBACtE,qEAAqE;gBACrE,sEAAsE;gBACtE,uBAAuB;gBACvB,uEAAuE;gBACvE,0EAA0E;gBAC1E,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC5B,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,SAAS,EAAE,CAAC;QACnB,wEAAwE;QACxE,yEAAyE;QACzE,wEAAwE;QACxE,sEAAsE;QACtE,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;YACtD,MAAM,SAAS,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,IAAI,CACV,oDAAoD,WAAW,IAAI;YACjE,WAAW,UAAU,CAAC,OAAO,iBAAiB,KAAK,CAAC,mBAAmB,EAAE,CAC5E,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;IAED,0EAA0E;IAC1E,4EAA4E;IAC5E,eAAe;IACf,IAAI,UAAU,CAAC,OAAO;QAAE,OAAO,aAAa,CAAC;IAC7C,IAAI,KAAK,CAAC,mBAAmB;QAAE,OAAO,cAAc,CAAC;IACrD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -25,17 +25,17 @@
25
25
  * on why `stopSignal` aborted, never writes a phase or a terminal copy, never
26
26
  * imports `@temporalio/*` (`__tests__/adapter-is-temporal-free.test.ts`).
27
27
  *
28
- * Engine disposition, one rule per outcome (Q-S2-6): the agent is PARKED
28
+ * Engine disposition, one rule per outcome: the agent is PARKED
29
29
  * for the session's next turn on every exit but a failure — `completed`,
30
30
  * `cancelled`, `awaiting_approval` and `interrupted` alike (a wedged handle
31
31
  * after a stall is caught by the poisoned-handle recovery on the next turn;
32
- * before S2 a pause, a shutdown and a stall dropped the handle, leaking the
32
+ * before #1070 a pause, a shutdown and a stall dropped the handle, leaking the
33
33
  * executor lease). A `failed` turn keeps the orchestrator's three
34
34
  * dispositions: an engine-reported failure parks (a bad key is not a bad
35
35
  * handle), a user-actionable failure closes, an internal failure drops.
36
36
  *
37
- * Extracted from `index.ts` `executeCursorInner` at S2 M3b and moved out of
38
- * `adapter.ts` at S2 M5; the seventeen hermetic goldens under `__tests__/hermetic/`
37
+ * Extracted from `index.ts` `executeCursorInner` and moved out of
38
+ * `adapter.ts` in #1070; the seventeen hermetic goldens under `__tests__/hermetic/`
39
39
  * pin the result byte for byte.
40
40
  */
41
41
  import type { TurnInput, TurnOutcome, TurnSink } from "../../harness/types.js";
@@ -25,17 +25,17 @@
25
25
  * on why `stopSignal` aborted, never writes a phase or a terminal copy, never
26
26
  * imports `@temporalio/*` (`__tests__/adapter-is-temporal-free.test.ts`).
27
27
  *
28
- * Engine disposition, one rule per outcome (Q-S2-6): the agent is PARKED
28
+ * Engine disposition, one rule per outcome: the agent is PARKED
29
29
  * for the session's next turn on every exit but a failure — `completed`,
30
30
  * `cancelled`, `awaiting_approval` and `interrupted` alike (a wedged handle
31
31
  * after a stall is caught by the poisoned-handle recovery on the next turn;
32
- * before S2 a pause, a shutdown and a stall dropped the handle, leaking the
32
+ * before #1070 a pause, a shutdown and a stall dropped the handle, leaking the
33
33
  * executor lease). A `failed` turn keeps the orchestrator's three
34
34
  * dispositions: an engine-reported failure parks (a bad key is not a bad
35
35
  * handle), a user-actionable failure closes, an internal failure drops.
36
36
  *
37
- * Extracted from `index.ts` `executeCursorInner` at S2 M3b and moved out of
38
- * `adapter.ts` at S2 M5; the seventeen hermetic goldens under `__tests__/hermetic/`
37
+ * Extracted from `index.ts` `executeCursorInner` and moved out of
38
+ * `adapter.ts` in #1070; the seventeen hermetic goldens under `__tests__/hermetic/`
39
39
  * pin the result byte for byte.
40
40
  */
41
41
  import { describeExecutionError } from "../../shared/model-error.js";
@@ -54,7 +54,7 @@ export async function runCursorTurn(input, sink, config) {
54
54
  closeProxySessions();
55
55
  // The module-level fallback the interceptors read when no execution
56
56
  // context is entered (the runtime enters one around the whole activity;
57
- // the SDK warm-up in main.ts has none). Deprecated; an S5 footprint item.
57
+ // the SDK warm-up in main.ts has none). Deprecated; its removal is #1132.
58
58
  setInterceptorExecutionId(executionId);
59
59
  if (sink.stopSignal.aborted)
60
60
  return { kind: "interrupted" };
@@ -4,11 +4,11 @@
4
4
  * basis on the priced delta the runtime accumulates.
5
5
  *
6
6
  * The runtime cannot price without the vendor's table and variant semantics,
7
- * and it must not import them (Q-S2-12), so the adapter hands
7
+ * and it must not import them, so the adapter hands
8
8
  * `TurnSink.reportUsage` a delta that already carries `estimatedCostUsd`
9
9
  * and the basis (`model`, the catalog-validated id; `requestedModelParams`,
10
10
  * the JSON of the params sent with every create/resume) the runtime writes
11
- * into `streaming_usage`. Split out of the accumulator at S2 M3
11
+ * into `streaming_usage`. Split out of the accumulator in #1070
12
12
  * (`harness/usage-accumulator.ts` keeps the sums); the arithmetic and the
13
13
  * rounding are unchanged, so the estimate is byte-for-byte the old one.
14
14
  *
@@ -4,11 +4,11 @@
4
4
  * basis on the priced delta the runtime accumulates.
5
5
  *
6
6
  * The runtime cannot price without the vendor's table and variant semantics,
7
- * and it must not import them (Q-S2-12), so the adapter hands
7
+ * and it must not import them, so the adapter hands
8
8
  * `TurnSink.reportUsage` a delta that already carries `estimatedCostUsd`
9
9
  * and the basis (`model`, the catalog-validated id; `requestedModelParams`,
10
10
  * the JSON of the params sent with every create/resume) the runtime writes
11
- * into `streaming_usage`. Split out of the accumulator at S2 M3
11
+ * into `streaming_usage`. Split out of the accumulator in #1070
12
12
  * (`harness/usage-accumulator.ts` keeps the sums); the arithmetic and the
13
13
  * rounding are unchanged, so the estimate is byte-for-byte the old one.
14
14
  *
@@ -10,7 +10,7 @@
10
10
  * module owns the ENGINE — what the model will do on its next call — and
11
11
  * reports what really happened. The adapter under test is the production
12
12
  * one, untouched; the model client is the one module doubled
13
- * (`scripted-model-module.ts`, S3 M0 ruling Q-M0-1), and the tools the model
13
+ * (`scripted-model-module.ts`), and the tools the model
14
14
  * calls are deepagents' real built-ins over the real gate.
15
15
  *
16
16
  * ── The engine is per execution, and its memory is the conversation ────────
@@ -28,7 +28,7 @@
28
28
  * checkpoint IS the engine's memory, which is why the same plan is right on
29
29
  * a `Command(resume)` (the tool result is in the transcript before the model
30
30
  * is asked) and on a later turn of the same thread (an approved-and-run call
31
- * is not proposed again — Cursor's "obedient model" of Q-M4-4, derived
31
+ * is not proposed again — Cursor's subject's "obedient model", derived
32
32
  * instead of stored).
33
33
  *
34
34
  * ── The translation, one rule per word ──────────────────────────────────────
@@ -10,7 +10,7 @@
10
10
  * module owns the ENGINE — what the model will do on its next call — and
11
11
  * reports what really happened. The adapter under test is the production
12
12
  * one, untouched; the model client is the one module doubled
13
- * (`scripted-model-module.ts`, S3 M0 ruling Q-M0-1), and the tools the model
13
+ * (`scripted-model-module.ts`), and the tools the model
14
14
  * calls are deepagents' real built-ins over the real gate.
15
15
  *
16
16
  * ── The engine is per execution, and its memory is the conversation ────────
@@ -28,7 +28,7 @@
28
28
  * checkpoint IS the engine's memory, which is why the same plan is right on
29
29
  * a `Command(resume)` (the tool result is in the transcript before the model
30
30
  * is asked) and on a later turn of the same thread (an approved-and-run call
31
- * is not proposed again — Cursor's "obedient model" of Q-M4-4, derived
31
+ * is not proposed again — Cursor's subject's "obedient model", derived
32
32
  * instead of stored).
33
33
  *
34
34
  * ── The translation, one rule per word ──────────────────────────────────────
@@ -41,25 +41,30 @@
41
41
  * network. A scenario picks one; the HITL arms record both.
42
42
  *
43
43
  * The ONE knowledge of production this driver holds is `activityFactory`: how
44
- * to obtain the `ExecuteDeepAgent` function from a `Config`. Since S3 M2a it
44
+ * to obtain the `ExecuteDeepAgent` function from a `Config`. Since #1096 it
45
45
  * is the harness registry's: the native adapter booted and bound to its
46
46
  * byte-pinned activity name through `createHarnessActivities`, exactly the
47
- * way the composition roots bind it since S3 M2b through `harness-adapters.ts`
47
+ * way the composition roots bind it since #1096 through `harness-adapters.ts`
48
48
  * (and the way the Cursor driver binds its own, `hermetic-cursor.ts`). The
49
- * orchestrator this adapter replaced (`index.ts`, `setup.ts`) was deleted at
50
- * M2b; the goldens moved once, with the M2a flip, each hunk quoted with its
51
- * ruling in its test's header (Q-M2a-1), and the switch of the roots moved
52
- * none (Q-M2b-4).
49
+ * orchestrator this adapter replaced (`index.ts`, `setup.ts`) was deleted in
50
+ * #1096; the goldens moved once, with the flip onto the runtime, each hunk
51
+ * quoted with its reason in its test's header, and the switch of the roots
52
+ * moved none.
53
53
  *
54
54
  * `boot` registers the deepagents harness profiles as production does
55
- * (S3 M2a F-M2a-14: the orchestrator-driven runs never did, so deepagents
56
- * auto-injected its ungated `general-purpose` sub-agent into every M0
55
+ * (found in #1096: the orchestrator-driven runs never did, so deepagents
56
+ * auto-injected its ungated `general-purpose` sub-agent into every earlier
57
57
  * scenario; the scripted model never delegated to it).
58
58
  *
59
- * Determinism beyond S0's: the clock ticks once per model turn (the scripted
59
+ * Determinism beyond the Cursor driver's (#1048): the clock ticks once per model turn (the scripted
60
60
  * model's `onTurn`), so status timestamps and the persist cadence land on the
61
61
  * same instants every run; a scenario's interruption (pause, worker shutdown)
62
- * is scheduled on a model turn through the same hook, never on a timer.
62
+ * is scheduled on a model turn through the same hook, never on a timer. And
63
+ * a turn does not begin — the clock does not tick — until the loop has
64
+ * persisted the previous turn's tool results settled
65
+ * (`ExecutionRecord.whenToolCallsSettled`): the ground a real model's latency
66
+ * gives for free, without which the producer runs ahead of a consumer that is
67
+ * awaiting a slow persist and the stamps of one turn straddle the next tick.
63
68
  */
64
69
  import type { Config } from "../../../config.js";
65
70
  import type { StigmerClient } from "../../../client/stigmer-client.js";
@@ -94,7 +99,7 @@ export declare function hermeticDeepAgentConfig(env: HermeticEnvironment, checkp
94
99
  export declare function sessionWorkspaceDir(env: HermeticEnvironment): string;
95
100
  /** The `ExecuteDeepAgent` function as the runner serves it: the typed object OR the legacy positional pair. */
96
101
  export type ExecuteDeepAgentFn = (arg0: ExecuteActivityInput | string, arg1?: string) => Promise<unknown>;
97
- /** How the driver obtains the activity from a `Config` — the one seam M2 flips. */
102
+ /** How the driver obtains the activity from a `Config` — the one seam the move onto the runtime flipped. */
98
103
  export type ActivityFactory = (config: Config) => Promise<ExecuteDeepAgentFn>;
99
104
  /**
100
105
  * The adapter through the registry: `createDeepAgentAdapter()` booted on the
@@ -41,25 +41,30 @@
41
41
  * network. A scenario picks one; the HITL arms record both.
42
42
  *
43
43
  * The ONE knowledge of production this driver holds is `activityFactory`: how
44
- * to obtain the `ExecuteDeepAgent` function from a `Config`. Since S3 M2a it
44
+ * to obtain the `ExecuteDeepAgent` function from a `Config`. Since #1096 it
45
45
  * is the harness registry's: the native adapter booted and bound to its
46
46
  * byte-pinned activity name through `createHarnessActivities`, exactly the
47
- * way the composition roots bind it since S3 M2b through `harness-adapters.ts`
47
+ * way the composition roots bind it since #1096 through `harness-adapters.ts`
48
48
  * (and the way the Cursor driver binds its own, `hermetic-cursor.ts`). The
49
- * orchestrator this adapter replaced (`index.ts`, `setup.ts`) was deleted at
50
- * M2b; the goldens moved once, with the M2a flip, each hunk quoted with its
51
- * ruling in its test's header (Q-M2a-1), and the switch of the roots moved
52
- * none (Q-M2b-4).
49
+ * orchestrator this adapter replaced (`index.ts`, `setup.ts`) was deleted in
50
+ * #1096; the goldens moved once, with the flip onto the runtime, each hunk
51
+ * quoted with its reason in its test's header, and the switch of the roots
52
+ * moved none.
53
53
  *
54
54
  * `boot` registers the deepagents harness profiles as production does
55
- * (S3 M2a F-M2a-14: the orchestrator-driven runs never did, so deepagents
56
- * auto-injected its ungated `general-purpose` sub-agent into every M0
55
+ * (found in #1096: the orchestrator-driven runs never did, so deepagents
56
+ * auto-injected its ungated `general-purpose` sub-agent into every earlier
57
57
  * scenario; the scripted model never delegated to it).
58
58
  *
59
- * Determinism beyond S0's: the clock ticks once per model turn (the scripted
59
+ * Determinism beyond the Cursor driver's (#1048): the clock ticks once per model turn (the scripted
60
60
  * model's `onTurn`), so status timestamps and the persist cadence land on the
61
61
  * same instants every run; a scenario's interruption (pause, worker shutdown)
62
- * is scheduled on a model turn through the same hook, never on a timer.
62
+ * is scheduled on a model turn through the same hook, never on a timer. And
63
+ * a turn does not begin — the clock does not tick — until the loop has
64
+ * persisted the previous turn's tool results settled
65
+ * (`ExecutionRecord.whenToolCallsSettled`): the ground a real model's latency
66
+ * gives for free, without which the producer runs ahead of a consumer that is
67
+ * awaiting a slow persist and the stamps of one turn straddle the next tick.
63
68
  */
64
69
  import { rmSync } from "node:fs";
65
70
  import { dirname, join } from "node:path";
@@ -182,6 +187,13 @@ export class DeepAgentScenario {
182
187
  this.config = config;
183
188
  this.model = new ScriptedModel(script, [], {
184
189
  onTurn: async (info) => {
190
+ // A real model answers long after the loop has folded and persisted
191
+ // the tool results it is answering; a scripted one answers at once and
192
+ // lets the producer run a turn ahead of the consumer. Wait for that
193
+ // ground before ticking, so every stamp of the previous turn precedes
194
+ // this turn's instant, whatever the persist's I/O took (the barrier's
195
+ // own header on `ExecutionRecord` carries the whole reason).
196
+ await this.record.whenToolCallsSettled(info.priorToolCallIds);
185
197
  this.clock.tick();
186
198
  if (onTurn && this.controls)
187
199
  await onTurn(info, this.controls);
@@ -1 +1 @@
1
- {"version":3,"file":"hermetic-deep-agent.js","sourceRoot":"","sources":["../../../../src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hermetic-deep-agent.js","sourceRoot":"","sources":["../../../../src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts"],"names":[],"mappings":"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"}
@@ -24,7 +24,7 @@ export const EXECUTE_CALL_B = {
24
24
  };
25
25
  /** The gate's copy for a SHELL built-in (`CATEGORY_APPROVAL_MESSAGE.shell` over the args). */
26
26
  export function executeApprovalMessage(call) {
27
- return `Execute command: ${String(call.args.command)}`;
27
+ return `Run command: ${String(call.args.command)}`;
28
28
  }
29
29
  /** Round 0 of every gated arm: one text block and the gated `execute` A. */
30
30
  export const GATED_OPENING_TURN = {
@@ -1 +1 @@
1
- {"version":3,"file":"hitl-script.js","sourceRoot":"","sources":["../../../../src/activities/execute-deep-agent/__test-utils__/hitl-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;CACrC,CAAC;AAEF,8FAA8F;AAC9F,MAAM,UAAU,sBAAsB,CAAC,IAAsB;IAC3D,OAAO,oBAAoB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AACzD,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,IAAI,EAAE,yBAAyB;IAC/B,SAAS,EAAE,CAAC,cAAc,CAAC;IAC3B,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;CAChD,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,wBAAwB;IAC9B,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;CAChD,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC"}
1
+ {"version":3,"file":"hitl-script.js","sourceRoot":"","sources":["../../../../src/activities/execute-deep-agent/__test-utils__/hitl-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;CACrC,CAAC;AAEF,8FAA8F;AAC9F,MAAM,UAAU,sBAAsB,CAAC,IAAsB;IAC3D,OAAO,gBAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,IAAI,EAAE,yBAAyB;IAC/B,SAAS,EAAE,CAAC,cAAc,CAAC;IAC3B,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;CAChD,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,wBAAwB;IAC9B,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;CAChD,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC"}
@@ -9,8 +9,7 @@
9
9
  * (`shared/extract-structured-output.ts`). None of them takes a model as an
10
10
  * argument, so the one seam a hermetic run has is this module — the native analog of the Cursor
11
11
  * driver's `vi.mock("@cursor/sdk")`: the vendor engine doubled where the
12
- * runner imports it, and nothing else (S3 M0 ruling Q-M0-1, amending
13
- * Q-S3-11).
12
+ * runner imports it, and nothing else.
14
13
  *
15
14
  * `vi.mock` is hoisted and must live in the test file; the factory can
16
15
  * `await import()` this module:
@@ -33,7 +32,7 @@
33
32
  * header), so a test that runs several executions at once — the harness
34
33
  * contract kit's concurrency invariant — routes each build to that
35
34
  * execution's own engine through the id production already sends, and
36
- * through nothing added for the test (S3 M3).
35
+ * through nothing added for the test.
37
36
  */
38
37
  import type { BuildChatModelOptions, BuiltChatModel } from "../../../shared/model-client.js";
39
38
  import type { ScriptedModel } from "./scripted-model.js";
@@ -9,8 +9,7 @@
9
9
  * (`shared/extract-structured-output.ts`). None of them takes a model as an
10
10
  * argument, so the one seam a hermetic run has is this module — the native analog of the Cursor
11
11
  * driver's `vi.mock("@cursor/sdk")`: the vendor engine doubled where the
12
- * runner imports it, and nothing else (S3 M0 ruling Q-M0-1, amending
13
- * Q-S3-11).
12
+ * runner imports it, and nothing else.
14
13
  *
15
14
  * `vi.mock` is hoisted and must live in the test file; the factory can
16
15
  * `await import()` this module:
@@ -33,7 +32,7 @@
33
32
  * header), so a test that runs several executions at once — the harness
34
33
  * contract kit's concurrency invariant — routes each build to that
35
34
  * execution's own engine through the id production already sends, and
36
- * through nothing added for the test (S3 M3).
35
+ * through nothing added for the test.
37
36
  */
38
37
  import { stripProviderPrefix, tryInferProvider } from "../../../shared/llm-proxy.js";
39
38
  let resolve;
@@ -1 +1 @@
1
- {"version":3,"file":"scripted-model-module.js","sourceRoot":"","sources":["../../../../src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAMrF,IAAI,OAA0C,CAAC;AAC/C,MAAM,MAAM,GAA4B,EAAE,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA4C;IAC5E,OAAO,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IAC5D,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACpB,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,yBAAyB;IAGvC,OAAO;QACL,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,gFAAgF;oBAC9E,oCAAoC,CACvC,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;gBACL,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC;gBACpB,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,WAAW;gBACzD,UAAU,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;aAChD,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"scripted-model-module.js","sourceRoot":"","sources":["../../../../src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAGH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAMrF,IAAI,OAA0C,CAAC;AAC/C,MAAM,MAAM,GAA4B,EAAE,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA4C;IAC5E,OAAO,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IAC5D,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACpB,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,yBAAyB;IAGvC,OAAO;QACL,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,gFAAgF;oBAC9E,oCAAoC,CACvC,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;gBACL,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC;gBACpB,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,WAAW;gBACzD,UAAU,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;aAChD,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -28,7 +28,7 @@
28
28
  * indexing left to the caller — for a consumer whose plan is not "turn k on
29
29
  * round k" but "the first step the conversation does not yet show" (the
30
30
  * harness contract kit's native subject, whose one execution spans many
31
- * kit turns on one sqlite thread, S3 M3).
31
+ * kit turns on one sqlite thread).
32
32
  *
33
33
  * A turn may END the model call instead of finishing the message
34
34
  * ({@link TurnEnding}): `fail` throws after its chunks (a provider error
@@ -46,8 +46,8 @@
46
46
  * and otherwise falls back to a synthesized final-message event sequence
47
47
  * (`@langchain/langgraph` `pregel/messages-v2.js` `emitFinalMessage`). The
48
48
  * fallback spreads a `tool_call` block's `args` OBJECT into the
49
- * `tool_call_chunk` fields the runner's normalizer reads as a JSON STRING
50
- * (`v3-protocol-normalizer.ts` `argsChunk`), which no real provider does.
49
+ * `tool_call_chunk` fields the runner's translator reads as a JSON STRING
50
+ * (`translator.ts` `argsChunk`), which no real provider does.
51
51
  * Streaming keeps the double on the production event path: `@langchain/core`
52
52
  * `language_models/compat.js` `convertChunksToEvents` turns the chunks below
53
53
  * into `message-start`, per-block `content-block-start` / `-delta` /
@@ -167,6 +167,13 @@ export type ScriptSelector = (boundToolNames: string[], context: ScriptRoleConte
167
167
  export interface ScriptedTurnInfo {
168
168
  readonly boundToolNames: readonly string[];
169
169
  readonly round: number;
170
+ /**
171
+ * The ids of the tool calls the transcript's last AI message made — the
172
+ * calls whose results this turn answers. Empty on a role's first turn and
173
+ * after a text-only turn. Read from the transcript the engine hands the
174
+ * model, never from the script, so it is what the engine actually ran.
175
+ */
176
+ readonly priorToolCallIds: readonly string[];
170
177
  }
171
178
  export interface ScriptedModelOptions {
172
179
  /**
@@ -223,6 +230,8 @@ export declare class ScriptedModel extends BaseChatModel {
223
230
  }
224
231
  /** Tool rounds the transcript already holds: AI messages that proposed at least one tool call. */
225
232
  export declare function completedToolRounds(messages: readonly BaseMessage[]): number;
233
+ /** The tool-call ids on the transcript's last AI message; `[]` when there is none or it made no calls. */
234
+ export declare function priorToolCallIds(messages: readonly BaseMessage[]): string[];
226
235
  /** A pending approval interrupt surfaced at the parent checkpoint. */
227
236
  export interface PendingInterrupt {
228
237
  taskId: string;
@@ -28,7 +28,7 @@
28
28
  * indexing left to the caller — for a consumer whose plan is not "turn k on
29
29
  * round k" but "the first step the conversation does not yet show" (the
30
30
  * harness contract kit's native subject, whose one execution spans many
31
- * kit turns on one sqlite thread, S3 M3).
31
+ * kit turns on one sqlite thread).
32
32
  *
33
33
  * A turn may END the model call instead of finishing the message
34
34
  * ({@link TurnEnding}): `fail` throws after its chunks (a provider error
@@ -46,8 +46,8 @@
46
46
  * and otherwise falls back to a synthesized final-message event sequence
47
47
  * (`@langchain/langgraph` `pregel/messages-v2.js` `emitFinalMessage`). The
48
48
  * fallback spreads a `tool_call` block's `args` OBJECT into the
49
- * `tool_call_chunk` fields the runner's normalizer reads as a JSON STRING
50
- * (`v3-protocol-normalizer.ts` `argsChunk`), which no real provider does.
49
+ * `tool_call_chunk` fields the runner's translator reads as a JSON STRING
50
+ * (`translator.ts` `argsChunk`), which no real provider does.
51
51
  * Streaming keeps the double on the production event path: `@langchain/core`
52
52
  * `language_models/compat.js` `convertChunksToEvents` turns the chunks below
53
53
  * into `message-start`, per-block `content-block-start` / `-delta` /
@@ -99,7 +99,11 @@ export class ScriptedModel extends BaseChatModel {
99
99
  /** The turn for this transcript, after the driver hook has run. */
100
100
  async turnFor(messages) {
101
101
  const round = completedToolRounds(messages);
102
- await this.options.onTurn?.({ boundToolNames: this.toolNames, round });
102
+ await this.options.onTurn?.({
103
+ boundToolNames: this.toolNames,
104
+ round,
105
+ priorToolCallIds: priorToolCallIds(messages),
106
+ });
103
107
  const context = { systemPrompt: systemPromptOf(messages) };
104
108
  return resolveTurn(this.select(this.toolNames, context), { round, transcript: messages, toolNames: this.toolNames });
105
109
  }
@@ -197,6 +201,16 @@ export function completedToolRounds(messages) {
197
201
  }
198
202
  return rounds;
199
203
  }
204
+ /** The tool-call ids on the transcript's last AI message; `[]` when there is none or it made no calls. */
205
+ export function priorToolCallIds(messages) {
206
+ for (let i = messages.length - 1; i >= 0; i--) {
207
+ const m = messages[i];
208
+ if (!isAIMessage(m))
209
+ continue;
210
+ return (m.tool_calls ?? []).flatMap((call) => (call.id ? [call.id] : []));
211
+ }
212
+ return [];
213
+ }
200
214
  function resolveTurn(script, request) {
201
215
  if (typeof script === "function")
202
216
  return script(request.transcript);