@stigmer/runner 3.15.3-dev.20260914100347 → 3.15.3-dev.20260916211208

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 (549) hide show
  1. package/README.md +1 -0
  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 +14 -11
  12. package/dist/activities/execute-cursor/__test-utils__/contract-subject.js.map +1 -1
  13. package/dist/activities/execute-cursor/__test-utils__/fold.d.ts +61 -0
  14. package/dist/activities/execute-cursor/__test-utils__/fold.js +94 -0
  15. package/dist/activities/execute-cursor/__test-utils__/fold.js.map +1 -0
  16. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +1 -1
  17. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -1
  18. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +52 -14
  19. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +46 -12
  20. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
  21. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +21 -28
  22. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +27 -11
  23. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -1
  24. package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.d.ts +70 -26
  25. package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js +82 -32
  26. package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js.map +1 -1
  27. package/dist/activities/execute-cursor/adapter.d.ts +8 -7
  28. package/dist/activities/execute-cursor/adapter.js +13 -9
  29. package/dist/activities/execute-cursor/adapter.js.map +1 -1
  30. package/dist/activities/execute-cursor/approval-policy.d.ts +10 -10
  31. package/dist/activities/execute-cursor/approval-policy.js +12 -23
  32. package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
  33. package/dist/activities/execute-cursor/approval-state.d.ts +35 -1
  34. package/dist/activities/execute-cursor/approval-state.js +65 -0
  35. package/dist/activities/execute-cursor/approval-state.js.map +1 -1
  36. package/dist/activities/execute-cursor/{message-translator.d.ts → boundary-rows.d.ts} +45 -341
  37. package/dist/activities/execute-cursor/boundary-rows.js +1018 -0
  38. package/dist/activities/execute-cursor/boundary-rows.js.map +1 -0
  39. package/dist/activities/execute-cursor/cursor-capabilities.d.ts +1 -1
  40. package/dist/activities/execute-cursor/cursor-capabilities.js +1 -1
  41. package/dist/activities/execute-cursor/cursor-event-recorder.d.ts +33 -14
  42. package/dist/activities/execute-cursor/cursor-event-recorder.js +43 -21
  43. package/dist/activities/execute-cursor/cursor-event-recorder.js.map +1 -1
  44. package/dist/activities/execute-cursor/prompt-builder.d.ts +3 -3
  45. package/dist/activities/execute-cursor/prompt-builder.js +4 -4
  46. package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
  47. package/dist/activities/execute-cursor/sdk-warmup.d.ts +15 -6
  48. package/dist/activities/execute-cursor/sdk-warmup.js +15 -6
  49. package/dist/activities/execute-cursor/sdk-warmup.js.map +1 -1
  50. package/dist/activities/execute-cursor/service-tier.js +1 -2
  51. package/dist/activities/execute-cursor/service-tier.js.map +1 -1
  52. package/dist/activities/execute-cursor/session-lifecycle.d.ts +38 -59
  53. package/dist/activities/execute-cursor/session-lifecycle.js +59 -96
  54. package/dist/activities/execute-cursor/session-lifecycle.js.map +1 -1
  55. package/dist/activities/execute-cursor/session-store.d.ts +100 -0
  56. package/dist/activities/execute-cursor/session-store.js +157 -0
  57. package/dist/activities/execute-cursor/session-store.js.map +1 -0
  58. package/dist/activities/execute-cursor/sub-agent-steps.d.ts +79 -0
  59. package/dist/activities/execute-cursor/sub-agent-steps.js +180 -0
  60. package/dist/activities/execute-cursor/sub-agent-steps.js.map +1 -0
  61. package/dist/activities/execute-cursor/tool-result.d.ts +49 -0
  62. package/dist/activities/execute-cursor/tool-result.js +130 -0
  63. package/dist/activities/execute-cursor/tool-result.js.map +1 -0
  64. package/dist/activities/execute-cursor/translator.d.ts +178 -0
  65. package/dist/activities/execute-cursor/translator.js +485 -0
  66. package/dist/activities/execute-cursor/translator.js.map +1 -0
  67. package/dist/activities/execute-cursor/turn-boundary.d.ts +15 -5
  68. package/dist/activities/execute-cursor/turn-boundary.js +10 -14
  69. package/dist/activities/execute-cursor/turn-boundary.js.map +1 -1
  70. package/dist/activities/execute-cursor/turn-settle.d.ts +11 -7
  71. package/dist/activities/execute-cursor/turn-settle.js +47 -34
  72. package/dist/activities/execute-cursor/turn-settle.js.map +1 -1
  73. package/dist/activities/execute-cursor/turn-setup.d.ts +2 -2
  74. package/dist/activities/execute-cursor/turn-setup.js +5 -5
  75. package/dist/activities/execute-cursor/turn-setup.js.map +1 -1
  76. package/dist/activities/execute-cursor/turn-stream.d.ts +23 -14
  77. package/dist/activities/execute-cursor/turn-stream.js +41 -28
  78. package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
  79. package/dist/activities/execute-cursor/turn.d.ts +4 -4
  80. package/dist/activities/execute-cursor/turn.js +5 -5
  81. package/dist/activities/execute-cursor/usage-pricing.d.ts +2 -2
  82. package/dist/activities/execute-cursor/usage-pricing.js +2 -2
  83. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +2 -2
  84. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +2 -2
  85. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +16 -11
  86. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +22 -10
  87. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js.map +1 -1
  88. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js +1 -1
  89. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js.map +1 -1
  90. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +2 -3
  91. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +2 -3
  92. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js.map +1 -1
  93. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +12 -3
  94. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +18 -4
  95. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -1
  96. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.d.ts +10 -1
  97. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js +24 -11
  98. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js.map +1 -1
  99. package/dist/activities/execute-deep-agent/adapter.d.ts +1 -1
  100. package/dist/activities/execute-deep-agent/adapter.js +1 -1
  101. package/dist/activities/execute-deep-agent/approval-file-change.d.ts +19 -19
  102. package/dist/activities/execute-deep-agent/approval-file-change.js +16 -15
  103. package/dist/activities/execute-deep-agent/approval-file-change.js.map +1 -1
  104. package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +2 -2
  105. package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +2 -2
  106. package/dist/activities/execute-deep-agent/hitl.d.ts +2 -2
  107. package/dist/activities/execute-deep-agent/hitl.js +2 -2
  108. package/dist/activities/execute-deep-agent/inline-publisher.d.ts +13 -3
  109. package/dist/activities/execute-deep-agent/inline-publisher.js +3 -3
  110. package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -1
  111. package/dist/activities/execute-deep-agent/prompt-builder.d.ts +3 -3
  112. package/dist/activities/execute-deep-agent/prompt-builder.js +6 -7
  113. package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
  114. package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +16 -8
  115. package/dist/activities/execute-deep-agent/streaming-side-effects.js +20 -33
  116. package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
  117. package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +3 -3
  118. package/dist/activities/execute-deep-agent/subagent-transformer.js +1 -1
  119. package/dist/activities/execute-deep-agent/translator.d.ts +134 -0
  120. package/dist/activities/execute-deep-agent/translator.js +418 -0
  121. package/dist/activities/execute-deep-agent/translator.js.map +1 -0
  122. package/dist/activities/execute-deep-agent/turn-settle.d.ts +13 -7
  123. package/dist/activities/execute-deep-agent/turn-settle.js +34 -45
  124. package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -1
  125. package/dist/activities/execute-deep-agent/turn-setup.d.ts +8 -8
  126. package/dist/activities/execute-deep-agent/turn-setup.js +7 -7
  127. package/dist/activities/execute-deep-agent/turn-stream.d.ts +13 -10
  128. package/dist/activities/execute-deep-agent/turn-stream.js +44 -41
  129. package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -1
  130. package/dist/activities/execute-deep-agent/turn.d.ts +3 -3
  131. package/dist/activities/execute-deep-agent/turn.js +3 -3
  132. package/dist/config.d.ts +2 -2
  133. package/dist/harness/approval-decisions.d.ts +1 -1
  134. package/dist/harness/approval-decisions.js +1 -1
  135. package/dist/harness/capabilities.d.ts +21 -11
  136. package/dist/harness/capabilities.js +2 -2
  137. package/dist/harness/capture.d.ts +4 -4
  138. package/dist/harness/capture.js +4 -4
  139. package/dist/harness/persist-chokepoint.d.ts +3 -3
  140. package/dist/harness/persist-chokepoint.js +3 -3
  141. package/dist/harness/registry.d.ts +2 -2
  142. package/dist/harness/registry.js +2 -2
  143. package/dist/harness/run-turn.d.ts +6 -4
  144. package/dist/harness/run-turn.js +31 -9
  145. package/dist/harness/run-turn.js.map +1 -1
  146. package/dist/harness/stop-controller.d.ts +1 -1
  147. package/dist/harness/stop-controller.js +1 -1
  148. package/dist/harness/terminal-table.d.ts +7 -7
  149. package/dist/harness/terminal-table.js +7 -7
  150. package/dist/harness/transcript/builder.d.ts +182 -0
  151. package/dist/harness/transcript/builder.js +693 -0
  152. package/dist/harness/transcript/builder.js.map +1 -0
  153. package/dist/harness/transcript/events.d.ts +218 -0
  154. package/dist/harness/transcript/events.js +50 -0
  155. package/dist/harness/transcript/events.js.map +1 -0
  156. package/dist/harness/transcript/state.d.ts +110 -0
  157. package/dist/harness/transcript/state.js +148 -0
  158. package/dist/harness/transcript/state.js.map +1 -0
  159. package/dist/harness/turn-context.d.ts +54 -38
  160. package/dist/harness/turn-context.js +42 -43
  161. package/dist/harness/turn-context.js.map +1 -1
  162. package/dist/harness/types.d.ts +63 -22
  163. package/dist/harness/types.js +12 -11
  164. package/dist/harness/types.js.map +1 -1
  165. package/dist/harness/usage-accumulator.d.ts +2 -2
  166. package/dist/harness/usage-accumulator.js +2 -2
  167. package/dist/harness-adapters.d.ts +5 -4
  168. package/dist/harness-adapters.js +5 -4
  169. package/dist/harness-adapters.js.map +1 -1
  170. package/dist/middleware/approval-gate.d.ts +6 -0
  171. package/dist/middleware/approval-gate.js +7 -57
  172. package/dist/middleware/approval-gate.js.map +1 -1
  173. package/dist/middleware/cost-advisory.d.ts +3 -3
  174. package/dist/middleware/cost-advisory.js +3 -3
  175. package/dist/middleware/index.d.ts +1 -1
  176. package/dist/middleware/index.js +1 -1
  177. package/dist/runner-manager.js +1 -1
  178. package/dist/runner-manager.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-vision.d.ts +2 -1
  188. package/dist/shared/attachment-vision.js.map +1 -1
  189. package/dist/shared/attachment-zip.d.ts +2 -2
  190. package/dist/shared/attachment-zip.js +2 -2
  191. package/dist/shared/cost-guard.d.ts +2 -2
  192. package/dist/shared/cost-guard.js +2 -2
  193. package/dist/shared/exact-apply.d.ts +1 -1
  194. package/dist/shared/exact-apply.js +1 -1
  195. package/dist/shared/execution-context.d.ts +2 -2
  196. package/dist/shared/execution-context.js +2 -2
  197. package/dist/shared/extract-structured-output.d.ts +2 -2
  198. package/dist/shared/extract-structured-output.js +2 -2
  199. package/dist/shared/filereview/cas-touched.d.ts +2 -2
  200. package/dist/shared/filereview/cas-touched.js +2 -2
  201. package/dist/shared/heartbeat.d.ts +1 -1
  202. package/dist/shared/heartbeat.js +1 -1
  203. package/dist/shared/llm-backend.d.ts +0 -4
  204. package/dist/shared/llm-backend.js +0 -4
  205. package/dist/shared/llm-backend.js.map +1 -1
  206. package/dist/shared/model-error.d.ts +1 -2
  207. package/dist/shared/model-error.js +1 -2
  208. package/dist/shared/model-error.js.map +1 -1
  209. package/dist/shared/persist-decision.d.ts +18 -24
  210. package/dist/shared/persist-decision.js +19 -11
  211. package/dist/shared/persist-decision.js.map +1 -1
  212. package/dist/shared/prompt-sections.d.ts +4 -4
  213. package/dist/shared/prompt-sections.js +4 -4
  214. package/dist/shared/skill-resolver.d.ts +3 -3
  215. package/dist/shared/skill-resolver.js +3 -3
  216. package/dist/shared/status-offload.d.ts +1 -1
  217. package/dist/shared/status-offload.js +2 -2
  218. package/dist/shared/status-offload.js.map +1 -1
  219. package/dist/shared/streaming-scheduler.d.ts +2 -7
  220. package/dist/shared/streaming-scheduler.js +6 -14
  221. package/dist/shared/streaming-scheduler.js.map +1 -1
  222. package/dist/shared/subagent-rows.d.ts +2 -2
  223. package/dist/shared/subagent-rows.js +2 -2
  224. package/dist/shared/todos.d.ts +3 -3
  225. package/dist/shared/todos.js +3 -3
  226. package/dist/shared/tool-row.d.ts +19 -1
  227. package/dist/shared/tool-row.js +36 -2
  228. package/dist/shared/tool-row.js.map +1 -1
  229. package/dist/shared/worker-shutdown.d.ts +1 -1
  230. package/dist/shared/worker-shutdown.js +1 -1
  231. package/dist/shared/workspace/session-provision.d.ts +1 -1
  232. package/dist/shared/workspace/session-provision.js +1 -1
  233. package/dist/shared/workspace/sources/empty.d.ts +1 -1
  234. package/dist/shared/workspace/sources/empty.js +1 -2
  235. package/dist/shared/workspace/sources/empty.js.map +1 -1
  236. package/dist/shared/workspace/sources/git.js +4 -4
  237. package/dist/shared/workspace/sources/git.js.map +1 -1
  238. package/dist/shared/workspace/sources/local-path.js +6 -6
  239. package/dist/shared/workspace/sources/local-path.js.map +1 -1
  240. package/dist/shared/workspace/stigmer-link.d.ts +1 -1
  241. package/dist/shared/workspace/stigmer-link.js +1 -1
  242. package/dist/shared/workspace/types.d.ts +2 -5
  243. package/dist/shared/workspace/types.js +0 -6
  244. package/dist/shared/workspace/types.js.map +1 -1
  245. package/dist/shared/workspace/writeback-coordinator.d.ts +17 -4
  246. package/dist/shared/workspace/writeback-coordinator.js +7 -9
  247. package/dist/shared/workspace/writeback-coordinator.js.map +1 -1
  248. package/package.json +5 -5
  249. package/src/__test-utils__/__tests__/execution-record-barrier.test.ts +70 -0
  250. package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +35 -1
  251. package/src/__test-utils__/approval-contract/contract.ts +1 -1
  252. package/src/__test-utils__/approval-contract/types.ts +1 -1
  253. package/src/__test-utils__/harness-boot-order-child.ts +1 -1
  254. package/src/__test-utils__/harness-contract/contract.ts +8 -8
  255. package/src/__test-utils__/harness-contract/recording-sink.ts +11 -1
  256. package/src/__test-utils__/harness-contract/runtime-contract.ts +52 -16
  257. package/src/__test-utils__/harness-contract/scripted-adapter.ts +47 -43
  258. package/src/__test-utils__/hermetic-activity.ts +113 -9
  259. package/src/__test-utils__/model-registry-fixture.ts +31 -7
  260. package/src/__test-utils__/module-specifiers.ts +32 -3
  261. package/src/__tests__/harness-boot-order.test.ts +1 -1
  262. package/src/__tests__/harness-contract.test.ts +1 -1
  263. package/src/__tests__/runner-manager.test.ts +1 -1
  264. package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +32 -8
  265. package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +12 -10
  266. package/src/activities/execute-cursor/__test-utils__/fold.ts +116 -0
  267. package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +1 -1
  268. package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +72 -19
  269. package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +35 -29
  270. package/src/activities/execute-cursor/__test-utils__/scripted-sdk.ts +94 -38
  271. package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +2 -1
  272. package/src/activities/execute-cursor/__tests__/approval-state.test.ts +14 -21
  273. package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +3 -3
  274. package/src/activities/execute-cursor/__tests__/coarse-fingerprint.test.ts +2 -1
  275. package/src/activities/execute-cursor/__tests__/cursor-baseurl-routing.test.ts +10 -8
  276. package/src/activities/execute-cursor/__tests__/cursor-event-recorder.test.ts +142 -0
  277. package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.test.ts +24 -12
  278. package/src/activities/execute-cursor/__tests__/cursor-generate-image-live.test.ts +7 -2
  279. package/src/activities/execute-cursor/__tests__/cursor-hook-protocol-live.test.ts +163 -0
  280. package/src/activities/execute-cursor/__tests__/cursor-sdk-auth-smoke.test.ts +23 -20
  281. package/src/activities/execute-cursor/__tests__/cursor-transcript-live.test.ts +298 -0
  282. package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +4 -2
  283. package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +1 -1
  284. package/src/activities/execute-cursor/__tests__/hermetic/deny-and-retry.test.ts +5 -2
  285. package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +5 -2
  286. package/src/activities/execute-cursor/__tests__/hermetic/goldens/mcp-tool-call.status.json +71 -0
  287. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-task-note.status.json +73 -0
  288. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.error-delta.status.json +78 -0
  289. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.output-first.status.json +72 -0
  290. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.status.json +72 -0
  291. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sub-agent-delegation.status.json +109 -0
  292. package/src/activities/execute-cursor/__tests__/hermetic/goldens/thinking-turn.status.json +78 -0
  293. package/src/activities/execute-cursor/__tests__/hermetic/goldens/todo-write.status.json +119 -0
  294. package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-error.status.json +68 -0
  295. package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-only-step.status.json +67 -0
  296. package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.status.json +1 -1
  297. package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +10 -7
  298. package/src/activities/execute-cursor/__tests__/hermetic/mcp-tool-call.test.ts +146 -0
  299. package/src/activities/execute-cursor/__tests__/hermetic/pause-vs-shutdown.test.ts +8 -5
  300. package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +6 -2
  301. package/src/activities/execute-cursor/__tests__/hermetic/recovery-fresh-agent.test.ts +4 -1
  302. package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +6 -2
  303. package/src/activities/execute-cursor/__tests__/hermetic/sdk-task-note.test.ts +122 -0
  304. package/src/activities/execute-cursor/__tests__/hermetic/shell-output-delta.test.ts +276 -0
  305. package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +12 -9
  306. package/src/activities/execute-cursor/__tests__/hermetic/sub-agent-delegation.test.ts +196 -0
  307. package/src/activities/execute-cursor/__tests__/hermetic/thinking-turn.test.ts +145 -0
  308. package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +4 -1
  309. package/src/activities/execute-cursor/__tests__/hermetic/todo-write.test.ts +165 -0
  310. package/src/activities/execute-cursor/__tests__/hermetic/tool-call.test.ts +7 -4
  311. package/src/activities/execute-cursor/__tests__/hermetic/tool-error.test.ts +138 -0
  312. package/src/activities/execute-cursor/__tests__/hermetic/tool-only-step.test.ts +130 -0
  313. package/src/activities/execute-cursor/__tests__/hermetic/unattributed-hook-block.test.ts +17 -2
  314. package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -2
  315. package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +43 -60
  316. package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +23 -28
  317. package/src/activities/execute-cursor/__tests__/hook-script.test.ts +2 -1
  318. package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +1 -1
  319. package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +5 -5
  320. package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +11 -13
  321. package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +8 -11
  322. package/src/activities/execute-cursor/__tests__/session-lifecycle.test.ts +86 -58
  323. package/src/activities/execute-cursor/__tests__/session-store.test.ts +220 -0
  324. package/src/activities/execute-cursor/__tests__/tool-result-image.test.ts +8 -22
  325. package/src/activities/execute-cursor/__tests__/translator.test.ts +594 -0
  326. package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +8 -5
  327. package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +87 -63
  328. package/src/activities/execute-cursor/adapter.ts +13 -9
  329. package/src/activities/execute-cursor/approval-policy.ts +12 -24
  330. package/src/activities/execute-cursor/approval-state.ts +66 -1
  331. package/src/activities/execute-cursor/boundary-rows.ts +1132 -0
  332. package/src/activities/execute-cursor/cursor-capabilities.ts +1 -1
  333. package/src/activities/execute-cursor/cursor-event-recorder.ts +57 -28
  334. package/src/activities/execute-cursor/fetch-interceptor.ts +1 -1
  335. package/src/activities/execute-cursor/http2-interceptor.ts +1 -1
  336. package/src/activities/execute-cursor/prompt-builder.ts +6 -6
  337. package/src/activities/execute-cursor/sdk-warmup.ts +15 -6
  338. package/src/activities/execute-cursor/service-tier.ts +1 -2
  339. package/src/activities/execute-cursor/session-lifecycle.ts +63 -109
  340. package/src/activities/execute-cursor/session-store.ts +187 -0
  341. package/src/activities/execute-cursor/sub-agent-steps.ts +188 -0
  342. package/src/activities/execute-cursor/tool-result.ts +128 -0
  343. package/src/activities/execute-cursor/translator.ts +541 -0
  344. package/src/activities/execute-cursor/turn-boundary.ts +21 -14
  345. package/src/activities/execute-cursor/turn-settle.ts +46 -34
  346. package/src/activities/execute-cursor/turn-setup.ts +5 -5
  347. package/src/activities/execute-cursor/turn-stream.ts +49 -46
  348. package/src/activities/execute-cursor/turn.ts +5 -5
  349. package/src/activities/execute-cursor/usage-pricing.ts +2 -2
  350. package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +2 -2
  351. package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +23 -11
  352. package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +1 -1
  353. package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +2 -3
  354. package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +25 -4
  355. package/src/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.ts +25 -11
  356. package/src/activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts +1 -1
  357. package/src/activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts +1 -1
  358. package/src/activities/execute-deep-agent/__tests__/approval-file-change.test.ts +6 -17
  359. package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +25 -8
  360. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +2 -7
  361. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +4 -14
  362. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +1 -5
  363. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +4 -7
  364. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +1 -5
  365. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +2 -9
  366. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +2 -9
  367. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +1 -4
  368. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +1 -4
  369. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +1 -4
  370. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +109 -76
  371. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +1 -5
  372. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +2 -10
  373. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +2 -10
  374. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +1 -5
  375. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +3 -6
  376. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +1 -4
  377. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +1 -4
  378. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/write-todos.status.json +92 -0
  379. package/src/activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts +3 -3
  380. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-approve-all-lease.test.ts +9 -5
  381. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +3 -3
  382. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +3 -3
  383. package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +7 -6
  384. package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +10 -11
  385. package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +4 -4
  386. package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +9 -8
  387. package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +21 -13
  388. package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +2 -2
  389. package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +7 -7
  390. package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +28 -12
  391. package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +21 -21
  392. package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -5
  393. package/src/activities/execute-deep-agent/__tests__/hermetic/write-todos.test.ts +160 -0
  394. package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +35 -30
  395. package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +3 -4
  396. package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +12 -10
  397. package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +13 -3
  398. package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +26 -18
  399. package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +1 -1
  400. package/src/activities/execute-deep-agent/__tests__/{subagent-tracker.test.ts → translator-subagents.test.ts} +76 -57
  401. package/src/activities/execute-deep-agent/__tests__/{v3-status-builder.test.ts → translator-through-builder.test.ts} +213 -299
  402. package/src/activities/execute-deep-agent/__tests__/translator.test.ts +505 -0
  403. package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +11 -29
  404. package/src/activities/execute-deep-agent/adapter.ts +1 -1
  405. package/src/activities/execute-deep-agent/approval-file-change.ts +20 -22
  406. package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +2 -2
  407. package/src/activities/execute-deep-agent/hitl.ts +2 -2
  408. package/src/activities/execute-deep-agent/inline-publisher.ts +16 -5
  409. package/src/activities/execute-deep-agent/prompt-builder.ts +6 -7
  410. package/src/activities/execute-deep-agent/streaming-side-effects.ts +22 -31
  411. package/src/activities/execute-deep-agent/subagent-transformer.ts +3 -3
  412. package/src/activities/execute-deep-agent/translator.ts +463 -0
  413. package/src/activities/execute-deep-agent/turn-settle.ts +35 -43
  414. package/src/activities/execute-deep-agent/turn-setup.ts +8 -8
  415. package/src/activities/execute-deep-agent/turn-stream.ts +53 -51
  416. package/src/activities/execute-deep-agent/turn.ts +3 -3
  417. package/src/config.ts +2 -2
  418. package/src/harness/README.md +335 -0
  419. package/src/harness/__tests__/approval-decisions.test.ts +2 -2
  420. package/src/harness/__tests__/capture.test.ts +3 -3
  421. package/src/harness/__tests__/import-direction.test.ts +3 -2
  422. package/src/harness/__tests__/mount-skills.test.ts +4 -1
  423. package/src/harness/__tests__/readme-index.test.ts +339 -0
  424. package/src/harness/__tests__/run-turn.test.ts +131 -6
  425. package/src/harness/__tests__/transcript-is-engine-free.test.ts +83 -0
  426. package/src/harness/__tests__/transcript-writers.test.ts +191 -0
  427. package/src/harness/__tests__/turn-attachments-vision.test.ts +5 -2
  428. package/src/harness/__tests__/turn-context.test.ts +5 -5
  429. package/src/harness/approval-decisions.ts +1 -1
  430. package/src/harness/capabilities.ts +21 -11
  431. package/src/harness/capture.ts +4 -4
  432. package/src/harness/persist-chokepoint.ts +3 -3
  433. package/src/harness/registry.ts +2 -2
  434. package/src/harness/run-turn.ts +33 -9
  435. package/src/harness/stop-controller.ts +1 -1
  436. package/src/harness/terminal-table.ts +7 -7
  437. package/src/harness/transcript/__tests__/builder.test.ts +975 -0
  438. package/src/harness/transcript/__tests__/state.test.ts +143 -0
  439. package/src/harness/transcript/builder.ts +755 -0
  440. package/src/harness/transcript/events.ts +262 -0
  441. package/src/harness/transcript/state.ts +167 -0
  442. package/src/harness/turn-context.ts +61 -46
  443. package/src/harness/types.ts +64 -22
  444. package/src/harness/usage-accumulator.ts +2 -2
  445. package/src/harness-adapters.ts +5 -4
  446. package/src/middleware/__tests__/cost-advisory.test.ts +2 -2
  447. package/src/middleware/approval-gate.ts +7 -74
  448. package/src/middleware/cost-advisory.ts +3 -3
  449. package/src/middleware/index.ts +1 -1
  450. package/src/runner-manager.ts +1 -1
  451. package/src/shared/__tests__/approval-policy.test.ts +45 -0
  452. package/src/shared/__tests__/args-preview.test.ts +40 -20
  453. package/src/shared/__tests__/attachment-naming.test.ts +1 -1
  454. package/src/shared/__tests__/attachment-resolver.test.ts +5 -5
  455. package/src/shared/__tests__/attachment-zip.test.ts +1 -1
  456. package/src/shared/__tests__/blueprint-resolver.test.ts +1 -1
  457. package/src/shared/__tests__/cost-guard.test.ts +1 -1
  458. package/src/shared/__tests__/exact-apply.test.ts +2 -1
  459. package/src/shared/__tests__/persist-decision.test.ts +19 -33
  460. package/src/shared/__tests__/prompt-sections.test.ts +1 -1
  461. package/src/shared/__tests__/stamp-flowed-rows.test.ts +1 -1
  462. package/src/shared/__tests__/status-offload.test.ts +1 -1
  463. package/src/shared/__tests__/streaming-scheduler.test.ts +8 -9
  464. package/src/shared/__tests__/todos.test.ts +1 -1
  465. package/src/shared/__tests__/tool-row.test.ts +1 -1
  466. package/src/shared/approval-policy.ts +95 -0
  467. package/src/shared/args-preview.ts +51 -42
  468. package/src/shared/attachment-resolver.ts +4 -4
  469. package/src/shared/attachment-vision.ts +2 -1
  470. package/src/shared/attachment-zip.ts +2 -2
  471. package/src/shared/cost-guard.ts +2 -2
  472. package/src/shared/exact-apply.ts +1 -1
  473. package/src/shared/execution-context.ts +2 -2
  474. package/src/shared/extract-structured-output.ts +2 -2
  475. package/src/shared/filereview/__tests__/capture.test.ts +9 -5
  476. package/src/shared/filereview/__tests__/git-substrate.test.ts +4 -1
  477. package/src/shared/filereview/__tests__/proxy-reconcile.test.ts +3 -3
  478. package/src/shared/filereview/cas-touched.ts +2 -2
  479. package/src/shared/heartbeat.ts +1 -1
  480. package/src/shared/llm-backend.ts +0 -4
  481. package/src/shared/model-error.ts +1 -2
  482. package/src/shared/persist-decision.ts +19 -28
  483. package/src/shared/prompt-sections.ts +4 -4
  484. package/src/shared/skill-resolver.ts +3 -3
  485. package/src/shared/status-offload.ts +2 -2
  486. package/src/shared/streaming-scheduler.ts +8 -13
  487. package/src/shared/subagent-rows.ts +2 -2
  488. package/src/shared/todos.ts +3 -3
  489. package/src/shared/tool-row.ts +38 -2
  490. package/src/shared/worker-shutdown.ts +1 -1
  491. package/src/shared/workspace/__tests__/git-source.test.ts +3 -3
  492. package/src/shared/workspace/__tests__/provisioner.test.ts +5 -5
  493. package/src/shared/workspace/__tests__/session-provision.test.ts +2 -2
  494. package/src/shared/workspace/__tests__/writeback-coordinator.integration.test.ts +8 -9
  495. package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +25 -25
  496. package/src/shared/workspace/provisioner.ts +1 -1
  497. package/src/shared/workspace/session-provision.ts +1 -1
  498. package/src/shared/workspace/sources/empty.ts +2 -2
  499. package/src/shared/workspace/sources/git.ts +3 -4
  500. package/src/shared/workspace/sources/local-path.ts +5 -6
  501. package/src/shared/workspace/stigmer-link.ts +1 -1
  502. package/src/shared/workspace/types.ts +2 -5
  503. package/src/shared/workspace/writeback-coordinator.ts +23 -12
  504. package/dist/activities/execute-cursor/delta-enricher.d.ts +0 -87
  505. package/dist/activities/execute-cursor/delta-enricher.js +0 -265
  506. package/dist/activities/execute-cursor/delta-enricher.js.map +0 -1
  507. package/dist/activities/execute-cursor/message-translator.js +0 -2040
  508. package/dist/activities/execute-cursor/message-translator.js.map +0 -1
  509. package/dist/activities/execute-cursor/todo-tracker.d.ts +0 -40
  510. package/dist/activities/execute-cursor/todo-tracker.js +0 -80
  511. package/dist/activities/execute-cursor/todo-tracker.js.map +0 -1
  512. package/dist/activities/execute-deep-agent/execution-state.d.ts +0 -54
  513. package/dist/activities/execute-deep-agent/execution-state.js +0 -68
  514. package/dist/activities/execute-deep-agent/execution-state.js.map +0 -1
  515. package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +0 -65
  516. package/dist/activities/execute-deep-agent/status-builder-shared.js +0 -90
  517. package/dist/activities/execute-deep-agent/status-builder-shared.js.map +0 -1
  518. package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +0 -113
  519. package/dist/activities/execute-deep-agent/subagent-tracker.js +0 -400
  520. package/dist/activities/execute-deep-agent/subagent-tracker.js.map +0 -1
  521. package/dist/activities/execute-deep-agent/v3-events.d.ts +0 -102
  522. package/dist/activities/execute-deep-agent/v3-events.js +0 -35
  523. package/dist/activities/execute-deep-agent/v3-events.js.map +0 -1
  524. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.d.ts +0 -15
  525. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js +0 -235
  526. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js.map +0 -1
  527. package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +0 -111
  528. package/dist/activities/execute-deep-agent/v3-status-builder.js +0 -457
  529. package/dist/activities/execute-deep-agent/v3-status-builder.js.map +0 -1
  530. package/dist/shared/execution-status-writer.d.ts +0 -31
  531. package/dist/shared/execution-status-writer.js +0 -43
  532. package/dist/shared/execution-status-writer.js.map +0 -1
  533. package/src/activities/execute-cursor/__tests__/delta-enricher.test.ts +0 -310
  534. package/src/activities/execute-cursor/__tests__/message-translator.test.ts +0 -1033
  535. package/src/activities/execute-cursor/__tests__/todo-tracker.test.ts +0 -498
  536. package/src/activities/execute-cursor/delta-enricher.ts +0 -307
  537. package/src/activities/execute-cursor/message-translator.ts +0 -2319
  538. package/src/activities/execute-cursor/todo-tracker.ts +0 -91
  539. package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +0 -148
  540. package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +0 -154
  541. package/src/activities/execute-deep-agent/__tests__/status-builder-shared.test.ts +0 -47
  542. package/src/activities/execute-deep-agent/__tests__/v3-protocol-normalizer.test.ts +0 -324
  543. package/src/activities/execute-deep-agent/execution-state.ts +0 -78
  544. package/src/activities/execute-deep-agent/status-builder-shared.ts +0 -142
  545. package/src/activities/execute-deep-agent/subagent-tracker.ts +0 -479
  546. package/src/activities/execute-deep-agent/v3-events.ts +0 -153
  547. package/src/activities/execute-deep-agent/v3-protocol-normalizer.ts +0 -264
  548. package/src/activities/execute-deep-agent/v3-status-builder.ts +0 -565
  549. package/src/shared/execution-status-writer.ts +0 -56
@@ -1,11 +1,26 @@
1
+ /**
2
+ * Sub-agent transcripts, end to end through the native translator and the
3
+ * builder: raw LangGraph v3 events with nested namespaces, the translator
4
+ * scoping them and speaking each sub-agent's lifecycle, the builder folding
5
+ * them into the row's own transcript (since #1097). These are the
6
+ * native translator's integration arms for delegation — the sub-agent
7
+ * tracker they once tested (`subagent-tracker.ts`, the second copy of the
8
+ * folding handlers) is gone; the builder's own scoped-handler arms live in
9
+ * `harness/transcript/__tests__/builder.test.ts`, the translator's scope
10
+ * arms in `translator.test.ts`.
11
+ *
12
+ * In the adapter's folder because the fixtures and the translator are
13
+ * `activities/` modules the direction fence keeps out of `harness/`.
14
+ */
15
+
1
16
  import { describe, it, expect, beforeEach } from "vitest";
2
17
  import { create } from "@bufbuild/protobuf";
3
- import { AgentExecutionStatusSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
18
+ import { type AgentExecutionStatus, AgentExecutionStatusSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
4
19
  import { SubAgentExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/subagent_pb";
5
20
  import { SubAgentStatus, MessageType, ToolCallStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
6
21
  import { cancelInProgressSubAgentProtos } from "../../../shared/subagent-rows.js";
7
- import { V3StatusBuilder } from "../v3-status-builder.js";
8
- import { normalize } from "../v3-protocol-normalizer.js";
22
+ import { TranscriptBuilder } from "../../../harness/transcript/builder.js";
23
+ import { DeepAgentTranslator } from "../translator.js";
9
24
  import type { V3ProtocolEvent } from "../v3-event-recorder.js";
10
25
  import {
11
26
  resetSeq,
@@ -20,14 +35,18 @@ import {
20
35
  makeProtocolEvent,
21
36
  } from "../__test-utils__/v3-event-fixtures.js";
22
37
 
23
- function makeBuilder(): V3StatusBuilder {
24
- return new V3StatusBuilder("exec-test", create(AgentExecutionStatusSchema, {}));
38
+ /** A builder and the status it builds into: the test writes through `sb` and reads `status`, as production reads `TurnSink.status`. */
39
+ function makeBuilder(): { sb: TranscriptBuilder; status: AgentExecutionStatus } {
40
+ const status = create(AgentExecutionStatusSchema, {});
41
+ return { sb: new TranscriptBuilder("exec-test", status), status };
25
42
  }
26
43
 
27
- function feedAll(sb: V3StatusBuilder, events: V3ProtocolEvent[]): void {
44
+ /** The loop's path: one translator for the turn (it holds the task prefixes), every canonical event into the builder. */
45
+ function feedAll(sb: TranscriptBuilder, events: V3ProtocolEvent[]): void {
46
+ const translator = new DeepAgentTranslator(null);
28
47
  for (const raw of events) {
29
- for (const e of normalize(raw)) {
30
- sb.processEvent(e);
48
+ for (const e of translator.translate(raw)) {
49
+ sb.apply(e);
31
50
  }
32
51
  }
33
52
  }
@@ -79,18 +98,18 @@ function makeSubAgentEvent(taskCallId: string, method: string, data: unknown, ex
79
98
 
80
99
  beforeEach(() => resetSeq());
81
100
 
82
- describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
101
+ describe("sub-agent transcripts (the translator and the builder together)", () => {
83
102
 
84
103
  describe("lifecycle — happy path", () => {
85
104
  it("creates SubAgentExecution on task tool_started", () => {
86
- const sb = makeBuilder();
105
+ const { sb, status } = makeBuilder();
87
106
  feedAll(sb, [
88
107
  makeMessageStart("parent-1"),
89
108
  makeTextDelta("parent-1", "Delegating to researcher."),
90
109
  makeMessageFinish("parent-1"),
91
110
  makeTaskToolStarted("call_sub_1", "researcher", "Research renewable energy"),
92
111
  ]);
93
- const subs = sb.currentStatus.subAgentExecutions;
112
+ const subs = status.subAgentExecutions;
94
113
  expect(subs).toHaveLength(1);
95
114
  expect(subs[0].id).toBe("call_sub_1");
96
115
  expect(subs[0].name).toBe("researcher");
@@ -101,24 +120,24 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
101
120
  });
102
121
 
103
122
  it("marks SubAgentExecution COMPLETED on task tool_finished", () => {
104
- const sb = makeBuilder();
123
+ const { sb, status } = makeBuilder();
105
124
  feedAll(sb, [
106
125
  makeTaskToolStarted("call_sub_1", "researcher", "Research topic"),
107
126
  makeTaskToolFinished("call_sub_1", "Renewable energy summary here."),
108
127
  ]);
109
- const sub = sb.currentStatus.subAgentExecutions[0];
128
+ const sub = status.subAgentExecutions[0];
110
129
  expect(sub.status).toBe(SubAgentStatus.SUB_AGENT_COMPLETED);
111
130
  expect(sub.output).toBe("Renewable energy summary here.");
112
131
  expect(sub.completedAt).toBeTruthy();
113
132
  });
114
133
 
115
134
  it("marks SubAgentExecution FAILED on task tool_error", () => {
116
- const sb = makeBuilder();
135
+ const { sb, status } = makeBuilder();
117
136
  feedAll(sb, [
118
137
  makeTaskToolStarted("call_sub_1", "researcher", "Research topic"),
119
138
  makeTaskToolError("call_sub_1", "Context overflow in sub-agent"),
120
139
  ]);
121
- const sub = sb.currentStatus.subAgentExecutions[0];
140
+ const sub = status.subAgentExecutions[0];
122
141
  expect(sub.status).toBe(SubAgentStatus.SUB_AGENT_FAILED);
123
142
  expect(sub.error).toBe("Context overflow in sub-agent");
124
143
  expect(sub.completedAt).toBeTruthy();
@@ -127,14 +146,14 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
127
146
 
128
147
  describe("lifecycle — a stopped turn (the shared cancel act + the tracker's streaming finalize)", () => {
129
148
  it("the shared cancelInProgressSubAgentProtos marks the tracked rows CANCELLED in place", () => {
130
- const sb = makeBuilder();
149
+ const { sb, status } = makeBuilder();
131
150
  feedAll(sb, [
132
151
  makeTaskToolStarted("call_sub_1", "researcher", "Task 1"),
133
152
  makeTaskToolStarted("call_sub_2", "shell", "Task 2"),
134
153
  ]);
135
154
 
136
- cancelInProgressSubAgentProtos(sb.currentStatus.subAgentExecutions);
137
- const subs = sb.currentStatus.subAgentExecutions;
155
+ cancelInProgressSubAgentProtos(status.subAgentExecutions);
156
+ const subs = status.subAgentExecutions;
138
157
  expect(subs).toHaveLength(2);
139
158
  expect(subs[0].status).toBe(SubAgentStatus.SUB_AGENT_CANCELLED);
140
159
  expect(subs[0].completedAt).toBeTruthy();
@@ -142,21 +161,21 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
142
161
  });
143
162
 
144
163
  it("does not cancel already-completed sub-agents", () => {
145
- const sb = makeBuilder();
164
+ const { sb, status } = makeBuilder();
146
165
  feedAll(sb, [
147
166
  makeTaskToolStarted("call_sub_1", "researcher", "Task 1"),
148
167
  makeTaskToolFinished("call_sub_1", "done"),
149
168
  makeTaskToolStarted("call_sub_2", "shell", "Task 2"),
150
169
  ]);
151
170
 
152
- cancelInProgressSubAgentProtos(sb.currentStatus.subAgentExecutions);
153
- const subs = sb.currentStatus.subAgentExecutions;
171
+ cancelInProgressSubAgentProtos(status.subAgentExecutions);
172
+ const subs = status.subAgentExecutions;
154
173
  expect(subs[0].status).toBe(SubAgentStatus.SUB_AGENT_COMPLETED);
155
174
  expect(subs[1].status).toBe(SubAgentStatus.SUB_AGENT_CANCELLED);
156
175
  });
157
176
 
158
- it("finalizeSubAgentStreaming clears the streaming flag on a sub-agent's in-flight message", () => {
159
- const sb = makeBuilder();
177
+ it("finalize() clears the streaming flag on a sub-agent's in-flight message", () => {
178
+ const { sb, status } = makeBuilder();
160
179
  feedAll(sb, [
161
180
  makeTaskToolStarted("call_sub_1", "researcher", "Task 1"),
162
181
  makeSubAgentEvent("call_sub_1", "messages", { event: "message-start", id: "msg_sub_1", run_id: "sub-run-1" }),
@@ -164,19 +183,19 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
164
183
  event: "content-block-delta", index: 0, delta: { type: "text-delta", text: "Half a sente" }, run_id: "sub-run-1",
165
184
  }),
166
185
  ]);
167
- const msg = sb.currentStatus.subAgentExecutions[0].messages[0];
186
+ const msg = status.subAgentExecutions[0].messages[0];
168
187
  expect(msg.isStreaming, "the delta left the message streaming").toBe(true);
169
188
 
170
- sb.finalizeSubAgentStreaming();
189
+ sb.finalize();
171
190
  expect(msg.isStreaming).toBe(false);
172
191
  });
173
192
  });
174
193
 
175
- describe("the status's array is built into by reference (S3 M1 deferred debt)", () => {
194
+ describe("the status's array is built into by reference", () => {
176
195
  it("new rows are pushed onto the array the builder was handed, never a replacement", () => {
177
196
  const status = create(AgentExecutionStatusSchema, {});
178
197
  const rows = status.subAgentExecutions;
179
- const sb = new V3StatusBuilder("exec-test", status);
198
+ const sb = new TranscriptBuilder("exec-test", status);
180
199
  feedAll(sb, [makeTaskToolStarted("call_sub_1", "researcher", "Task 1")]);
181
200
  expect(status.subAgentExecutions, "the same array object").toBe(rows);
182
201
  expect(rows).toHaveLength(1);
@@ -189,7 +208,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
189
208
  status: SubAgentStatus.SUB_AGENT_IN_PROGRESS,
190
209
  });
191
210
  const status = create(AgentExecutionStatusSchema, { subAgentExecutions: [seeded] });
192
- const sb = new V3StatusBuilder("exec-test", status);
211
+ const sb = new TranscriptBuilder("exec-test", status);
193
212
  feedAll(sb, [
194
213
  makeTaskToolStarted("call_sub_1", "researcher", "Task 1"),
195
214
  makeSubAgentEvent("call_sub_1", "messages", { event: "message-start", id: "msg_sub_1", run_id: "sub-run-1" }),
@@ -208,7 +227,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
208
227
 
209
228
  describe("namespace routing — sub-agent messages isolated from parent", () => {
210
229
  it("routes sub-agent text events to SubAgentExecution.messages", () => {
211
- const sb = makeBuilder();
230
+ const { sb, status } = makeBuilder();
212
231
  feedAll(sb, [
213
232
  makeMessageStart("parent-1"),
214
233
  makeTextDelta("parent-1", "Delegating."),
@@ -229,21 +248,21 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
229
248
  ]);
230
249
 
231
250
  // Parent messages should NOT contain sub-agent text
232
- const parentMessages = sb.currentStatus.messages;
251
+ const parentMessages = status.messages;
233
252
  expect(parentMessages).toHaveLength(1);
234
253
  expect(parentMessages[0].content).toBe("Delegating.");
235
254
  expect(parentMessages[0].toolCalls).toHaveLength(1);
236
255
  expect(parentMessages[0].toolCalls[0].name).toBe("task");
237
256
 
238
257
  // Sub-agent should have its own messages
239
- const sub = sb.currentStatus.subAgentExecutions[0];
258
+ const sub = status.subAgentExecutions[0];
240
259
  expect(sub.messages).toHaveLength(1);
241
260
  expect(sub.messages[0].content).toBe("I found results.");
242
261
  expect(sub.messages[0].type).toBe(MessageType.MESSAGE_AI);
243
262
  });
244
263
 
245
264
  it("routes sub-agent thinking events to SubAgentExecution.messages", () => {
246
- const sb = makeBuilder();
265
+ const { sb, status } = makeBuilder();
247
266
  feedAll(sb, [
248
267
  makeTaskToolStarted("call_sub_1", "researcher", "Research"),
249
268
  makeSubAgentEvent("call_sub_1", "messages", {
@@ -263,7 +282,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
263
282
  event: "message-finish", reason: "end_turn", run_id: "sub-run-1",
264
283
  }),
265
284
  ]);
266
- const sub = sb.currentStatus.subAgentExecutions[0];
285
+ const sub = status.subAgentExecutions[0];
267
286
  expect(sub.messages).toHaveLength(2);
268
287
  expect(sub.messages[0].type).toBe(MessageType.MESSAGE_THINKING);
269
288
  expect(sub.messages[0].content).toBe("Let me think...");
@@ -271,14 +290,14 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
271
290
  expect(sub.messages[1].content).toBe("Here are the results.");
272
291
 
273
292
  // Parent has one message: the AI message hosting the task tool_call
274
- expect(sb.currentStatus.messages).toHaveLength(1);
275
- expect(sb.currentStatus.messages[0].toolCalls[0].name).toBe("task");
293
+ expect(status.messages).toHaveLength(1);
294
+ expect(status.messages[0].toolCalls[0].name).toBe("task");
276
295
  });
277
296
  });
278
297
 
279
298
  describe("sub-agent tool calls", () => {
280
299
  it("tracks tool calls within sub-agent context", () => {
281
- const sb = makeBuilder();
300
+ const { sb, status } = makeBuilder();
282
301
  const taskCallId = "call_task_1";
283
302
  const subToolCallId = "call_grep_1";
284
303
 
@@ -304,7 +323,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
304
323
  output: { lc: 1, type: "constructor", id: ["langchain_core", "messages", "ToolMessage"], kwargs: { content: "Found 3 matches", status: "success", tool_call_id: subToolCallId, name: "grep" } },
305
324
  }, { namespace: [toolsNodeSegment(taskCallId), `tools:${subToolCallId}`] }),
306
325
  ]);
307
- const sub = sb.currentStatus.subAgentExecutions[0];
326
+ const sub = status.subAgentExecutions[0];
308
327
  expect(sub.messages).toHaveLength(1);
309
328
  expect(sub.messages[0].toolCalls).toHaveLength(1);
310
329
  expect(sub.messages[0].toolCalls[0].name).toBe("grep");
@@ -315,7 +334,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
315
334
 
316
335
  describe("multiple concurrent sub-agents", () => {
317
336
  it("tracks multiple sub-agents independently", () => {
318
- const sb = makeBuilder();
337
+ const { sb, status } = makeBuilder();
319
338
 
320
339
  feedAll(sb, [
321
340
  makeTaskToolStarted("call_sub_1", "researcher", "Research topic A"),
@@ -347,7 +366,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
347
366
  makeTaskToolFinished("call_sub_1", "A done"),
348
367
  makeTaskToolFinished("call_sub_2", "B done"),
349
368
  ]);
350
- const subs = sb.currentStatus.subAgentExecutions;
369
+ const subs = status.subAgentExecutions;
351
370
  expect(subs).toHaveLength(2);
352
371
 
353
372
  expect(subs[0].name).toBe("researcher");
@@ -362,7 +381,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
362
381
  });
363
382
 
364
383
  it("same sub-agent type invoked twice uses unique callIds", () => {
365
- const sb = makeBuilder();
384
+ const { sb, status } = makeBuilder();
366
385
 
367
386
  feedAll(sb, [
368
387
  makeTaskToolStarted("call_1", "researcher", "Research A"),
@@ -370,7 +389,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
370
389
  makeTaskToolStarted("call_2", "researcher", "Research B"),
371
390
  makeTaskToolFinished("call_2", "Result B"),
372
391
  ]);
373
- const subs = sb.currentStatus.subAgentExecutions;
392
+ const subs = status.subAgentExecutions;
374
393
  expect(subs).toHaveLength(2);
375
394
  expect(subs[0].id).toBe("call_1");
376
395
  expect(subs[0].output).toBe("Result A");
@@ -381,7 +400,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
381
400
 
382
401
  describe("parent timeline integrity", () => {
383
402
  it("task tool_call appears in parent AI message", () => {
384
- const sb = makeBuilder();
403
+ const { sb, status } = makeBuilder();
385
404
  feedAll(sb, [
386
405
  makeMessageStart("parent-1"),
387
406
  makeTextDelta("parent-1", "Let me delegate."),
@@ -392,7 +411,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
392
411
  makeTextDelta("parent-2", "The research is complete."),
393
412
  makeMessageFinish("parent-2"),
394
413
  ]);
395
- const msgs = sb.currentStatus.messages;
414
+ const msgs = status.messages;
396
415
 
397
416
  // First AI message has the task tool call
398
417
  expect(msgs[0].content).toBe("Let me delegate.");
@@ -409,36 +428,36 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
409
428
 
410
429
  describe("edge cases", () => {
411
430
  it("idempotent on duplicate task tool_started", () => {
412
- const sb = makeBuilder();
431
+ const { sb, status } = makeBuilder();
413
432
  feedAll(sb, [
414
433
  makeTaskToolStarted("call_sub_1", "researcher", "Research"),
415
434
  makeTaskToolStarted("call_sub_1", "researcher", "Research"),
416
435
  ]);
417
- expect(sb.currentStatus.subAgentExecutions).toHaveLength(1);
436
+ expect(status.subAgentExecutions).toHaveLength(1);
418
437
  });
419
438
 
420
439
  it("handles tool_finished for unknown callId gracefully", () => {
421
- const sb = makeBuilder();
440
+ const { sb, status } = makeBuilder();
422
441
  feedAll(sb, [
423
442
  makeTaskToolFinished("unknown_call_id", "output"),
424
443
  ]);
425
- expect(sb.currentStatus.subAgentExecutions).toHaveLength(0);
444
+ expect(status.subAgentExecutions).toHaveLength(0);
426
445
  });
427
446
 
428
447
  it("events for non-tracked namespace pass to parent", () => {
429
- const sb = makeBuilder();
448
+ const { sb, status } = makeBuilder();
430
449
  feedAll(sb, [
431
450
  makeMessageStart("parent-1"),
432
451
  makeTextDelta("parent-1", "Normal text."),
433
452
  makeMessageFinish("parent-1"),
434
453
  ]);
435
454
 
436
- expect(sb.currentStatus.messages).toHaveLength(1);
437
- expect(sb.currentStatus.messages[0].content).toBe("Normal text.");
455
+ expect(status.messages).toHaveLength(1);
456
+ expect(status.messages[0].content).toBe("Normal text.");
438
457
  });
439
458
 
440
459
  it("depth-0 task tool_started (empty namespace) uses callId-based prefix", () => {
441
- const sb = makeBuilder();
460
+ const { sb, status } = makeBuilder();
442
461
  const callId = "call_depth0";
443
462
 
444
463
  feedAll(sb, [
@@ -461,7 +480,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
461
480
  event: "message-finish", reason: "end_turn", run_id: "sub-run",
462
481
  }, { namespace: [`tools:${callId}`, "model_request"], node: "model_request" }),
463
482
  ]);
464
- const subs = sb.currentStatus.subAgentExecutions;
483
+ const subs = status.subAgentExecutions;
465
484
  expect(subs).toHaveLength(1);
466
485
  expect(subs[0].name).toBe("researcher");
467
486
  expect(subs[0].messages).toHaveLength(1);
@@ -469,7 +488,7 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
469
488
  });
470
489
 
471
490
  it("depth-1 events with registered prefix but no pipe stay in parent pipeline", () => {
472
- const sb = makeBuilder();
491
+ const { sb, status } = makeBuilder();
473
492
  const callId = "call_depth1_test";
474
493
 
475
494
  feedAll(sb, [
@@ -489,11 +508,11 @@ describe("SubAgentTracker (via V3StatusBuilder integration)", () => {
489
508
  ]);
490
509
  // First message: AI message with task tool call (created by handleToolStarted)
491
510
  // Second message: parent text that follows
492
- expect(sb.currentStatus.messages).toHaveLength(2);
493
- expect(sb.currentStatus.messages[0].toolCalls[0].name).toBe("task");
494
- expect(sb.currentStatus.messages[1].content).toBe("Parent continues.");
511
+ expect(status.messages).toHaveLength(2);
512
+ expect(status.messages[0].toolCalls[0].name).toBe("task");
513
+ expect(status.messages[1].content).toBe("Parent continues.");
495
514
  // Sub-agent has no messages (only registered, no child events routed)
496
- const sub = sb.currentStatus.subAgentExecutions[0];
515
+ const sub = status.subAgentExecutions[0];
497
516
  expect(sub.messages).toHaveLength(0);
498
517
  });
499
518
  });