@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
@@ -1,324 +0,0 @@
1
- import { describe, it, expect, beforeEach } from "vitest";
2
- import { normalize } from "../v3-protocol-normalizer.js";
3
- import {
4
- resetSeq,
5
- makeProtocolEvent,
6
- makeMessageStart,
7
- makeMessageFinish,
8
- makeTextDelta,
9
- makeReasoningDelta,
10
- makeToolCallArgDelta,
11
- makeToolStarted,
12
- makeToolFinished,
13
- makeToolError,
14
- makeToolOutputDelta,
15
- makeUsageEvent,
16
- makeProviderEvent,
17
- makeLifecycleRunning,
18
- makeLifecycleCompleted,
19
- makeContentBlockStartText,
20
- makeContentBlockFinish,
21
- makeCheckpointEvent,
22
- makeTasksEvent,
23
- makeValuesEvent,
24
- makeUpdatesEvent,
25
- } from "../__test-utils__/v3-event-fixtures.js";
26
-
27
- beforeEach(() => resetSeq());
28
-
29
- describe("V3ProtocolNormalizer", () => {
30
-
31
- // ── Message channel ──────────────────────────────────────────────
32
-
33
- describe("messages channel", () => {
34
- it("normalizes message-start", () => {
35
- const result = normalize(makeMessageStart("run-1", { messageId: "msg_abc" }));
36
- expect(result).toHaveLength(1);
37
- expect(result[0]).toMatchObject({
38
- kind: "message_start",
39
- runId: "run-1",
40
- messageId: "msg_abc",
41
- namespace: "",
42
- });
43
- });
44
-
45
- it("normalizes text-delta", () => {
46
- const result = normalize(makeTextDelta("run-1", "Hello "));
47
- expect(result).toHaveLength(1);
48
- expect(result[0]).toMatchObject({
49
- kind: "text_delta",
50
- runId: "run-1",
51
- text: "Hello ",
52
- });
53
- });
54
-
55
- it("normalizes reasoning-delta", () => {
56
- const result = normalize(makeReasoningDelta("run-1", "Let me think..."));
57
- expect(result).toHaveLength(1);
58
- expect(result[0]).toMatchObject({
59
- kind: "reasoning_delta",
60
- runId: "run-1",
61
- text: "Let me think...",
62
- });
63
- });
64
-
65
- it("normalizes tool_call_chunk via block-delta", () => {
66
- const result = normalize(makeToolCallArgDelta("run-1", "toolu_123", '{"path":'));
67
- expect(result).toHaveLength(1);
68
- expect(result[0]).toMatchObject({
69
- kind: "tool_call_arg_delta",
70
- callId: "toolu_123",
71
- argsChunk: '{"path":',
72
- });
73
- });
74
-
75
- it("normalizes message-finish with usage", () => {
76
- const result = normalize(makeMessageFinish("run-1", {
77
- reason: "end_turn",
78
- usage: { input_tokens: 100, output_tokens: 20, total_tokens: 120 },
79
- }));
80
- expect(result).toHaveLength(1);
81
- expect(result[0]).toMatchObject({
82
- kind: "message_finish",
83
- runId: "run-1",
84
- reason: "end_turn",
85
- usage: {
86
- input_tokens: 100,
87
- output_tokens: 20,
88
- },
89
- });
90
- });
91
-
92
- it("normalizes message-finish without usage", () => {
93
- const result = normalize(makeMessageFinish("run-1"));
94
- expect(result).toHaveLength(1);
95
- expect(result[0]).toMatchObject({
96
- kind: "message_finish",
97
- runId: "run-1",
98
- usage: undefined,
99
- });
100
- });
101
-
102
- it("normalizes usage event", () => {
103
- const result = normalize(makeUsageEvent("run-1", {
104
- input_tokens: 50, output_tokens: 10,
105
- input_token_details: { cache_creation: 40, cache_read: 5 },
106
- }));
107
- expect(result).toHaveLength(1);
108
- expect(result[0]).toMatchObject({
109
- kind: "usage",
110
- usage: {
111
- input_tokens: 50,
112
- output_tokens: 10,
113
- input_token_details: { cache_creation: 40, cache_read: 5 },
114
- },
115
- });
116
- });
117
-
118
- it("normalizes provider event with model", () => {
119
- const result = normalize(makeProviderEvent("run-1", "anthropic", "claude-sonnet-4-6"));
120
- expect(result).toHaveLength(1);
121
- expect(result[0]).toMatchObject({
122
- kind: "provider",
123
- provider: "anthropic",
124
- model: "claude-sonnet-4-6",
125
- });
126
- });
127
-
128
- it("returns empty for content-block-start", () => {
129
- const result = normalize(makeContentBlockStartText("run-1"));
130
- expect(result).toHaveLength(0);
131
- });
132
-
133
- it("returns empty for content-block-finish", () => {
134
- const result = normalize(makeContentBlockFinish("run-1"));
135
- expect(result).toHaveLength(0);
136
- });
137
-
138
- it("ignores empty text-delta", () => {
139
- const result = normalize(makeTextDelta("run-1", ""));
140
- expect(result).toHaveLength(0);
141
- });
142
-
143
- it("ignores empty reasoning-delta", () => {
144
- const result = normalize(makeReasoningDelta("run-1", ""));
145
- expect(result).toHaveLength(0);
146
- });
147
- });
148
-
149
- // ── Tools channel ────────────────────────────────────────────────
150
-
151
- describe("tools channel", () => {
152
- it("normalizes tool-started with snake_case fields", () => {
153
- const result = normalize(makeToolStarted("toolu_abc", "read_file", '{"path":"/src/main.ts"}'));
154
- expect(result).toHaveLength(1);
155
- expect(result[0]).toMatchObject({
156
- kind: "tool_started",
157
- callId: "toolu_abc",
158
- name: "read_file",
159
- input: { path: "/src/main.ts" },
160
- });
161
- });
162
-
163
- it("normalizes tool-started with camelCase fields", () => {
164
- const event = makeProtocolEvent("tools", {
165
- event: "tool-started",
166
- toolCallId: "toolu_abc",
167
- toolName: "read_file",
168
- input: { path: "/src/main.ts" },
169
- }, { namespace: ["tools:toolu_abc"] });
170
- const result = normalize(event);
171
- expect(result).toHaveLength(1);
172
- expect(result[0]).toMatchObject({
173
- kind: "tool_started",
174
- callId: "toolu_abc",
175
- name: "read_file",
176
- });
177
- });
178
-
179
- it("normalizes tool-finished", () => {
180
- const result = normalize(makeToolFinished("toolu_abc", "file content here"));
181
- expect(result).toHaveLength(1);
182
- expect(result[0]).toMatchObject({
183
- kind: "tool_finished",
184
- callId: "toolu_abc",
185
- });
186
- });
187
-
188
- it("normalizes tool-error", () => {
189
- const result = normalize(makeToolError("toolu_abc", "permission denied"));
190
- expect(result).toHaveLength(1);
191
- expect(result[0]).toMatchObject({
192
- kind: "tool_error",
193
- callId: "toolu_abc",
194
- message: "permission denied",
195
- });
196
- });
197
-
198
- it("normalizes tool-output-delta", () => {
199
- const result = normalize(makeToolOutputDelta("toolu_abc", "partial output"));
200
- expect(result).toHaveLength(1);
201
- expect(result[0]).toMatchObject({
202
- kind: "tool_output_delta",
203
- callId: "toolu_abc",
204
- delta: "partial output",
205
- });
206
- });
207
-
208
- it("parses string JSON input into object", () => {
209
- const result = normalize(makeToolStarted("toolu_abc", "think", '{"thought":"test"}'));
210
- expect(result[0]).toMatchObject({
211
- kind: "tool_started",
212
- input: { thought: "test" },
213
- });
214
- });
215
-
216
- it("handles malformed JSON input gracefully", () => {
217
- const result = normalize(makeToolStarted("toolu_abc", "think", "not json"));
218
- expect(result[0]).toMatchObject({
219
- kind: "tool_started",
220
- input: {},
221
- });
222
- });
223
- });
224
-
225
- // ── Lifecycle channel ────────────────────────────────────────────
226
-
227
- describe("lifecycle channel", () => {
228
- it("normalizes running event", () => {
229
- const result = normalize(makeLifecycleRunning("root"));
230
- expect(result).toHaveLength(1);
231
- expect(result[0]).toMatchObject({
232
- kind: "lifecycle",
233
- event: "running",
234
- graphName: "root",
235
- });
236
- });
237
-
238
- it("normalizes completed event", () => {
239
- const result = normalize(makeLifecycleCompleted("model_request", ["model_request:abc"]));
240
- expect(result).toHaveLength(1);
241
- expect(result[0]).toMatchObject({
242
- kind: "lifecycle",
243
- event: "completed",
244
- graphName: "model_request",
245
- namespace: "model_request:abc",
246
- });
247
- });
248
- });
249
-
250
- // ── Ignored channels ─────────────────────────────────────────────
251
-
252
- describe("ignored channels", () => {
253
- it("returns empty for checkpoints", () => {
254
- expect(normalize(makeCheckpointEvent())).toHaveLength(0);
255
- });
256
-
257
- it("returns empty for tasks", () => {
258
- expect(normalize(makeTasksEvent())).toHaveLength(0);
259
- });
260
-
261
- it("returns empty for values", () => {
262
- expect(normalize(makeValuesEvent())).toHaveLength(0);
263
- });
264
-
265
- it("returns empty for updates", () => {
266
- expect(normalize(makeUpdatesEvent())).toHaveLength(0);
267
- });
268
- });
269
-
270
- // ── Edge cases ───────────────────────────────────────────────────
271
-
272
- describe("edge cases", () => {
273
- it("returns empty for unknown method", () => {
274
- const event = makeProtocolEvent("input", { event: "something" });
275
- expect(normalize(event)).toHaveLength(0);
276
- });
277
-
278
- it("returns empty for missing data", () => {
279
- const event = makeProtocolEvent("messages", undefined);
280
- expect(normalize(event)).toHaveLength(0);
281
- });
282
-
283
- it("returns empty for unknown message event type", () => {
284
- const event = makeProtocolEvent("messages", { event: "brand-new-thing", run_id: "r" });
285
- expect(normalize(event)).toHaveLength(0);
286
- });
287
-
288
- it("preserves namespace from event params", () => {
289
- const result = normalize(makeTextDelta("run-1", "hi", { namespace: ["subagent:worker-1"] }));
290
- expect(result[0]).toMatchObject({ namespace: "subagent:worker-1" });
291
- });
292
-
293
- it("joins multi-segment namespace with pipe", () => {
294
- const result = normalize(makeTextDelta("run-1", "hi", { namespace: ["a", "b"] }));
295
- expect(result[0]).toMatchObject({ namespace: "a|b" });
296
- });
297
-
298
- it("preserves seq from original event", () => {
299
- const event = makeTextDelta("run-1", "hi");
300
- const result = normalize(event);
301
- expect(result[0].seq).toBe(event.seq);
302
- });
303
-
304
- it("handles delta with no type gracefully", () => {
305
- const event = makeProtocolEvent("messages", {
306
- event: "content-block-delta",
307
- index: 0,
308
- delta: {},
309
- run_id: "run-1",
310
- });
311
- expect(normalize(event)).toHaveLength(0);
312
- });
313
-
314
- it("handles missing tool_call_id in tool-started", () => {
315
- const event = makeProtocolEvent("tools", {
316
- event: "tool-started",
317
- tool_name: "read_file",
318
- }, { namespace: ["tools:abc"] });
319
- const result = normalize(event);
320
- expect(result).toHaveLength(1);
321
- expect(result[0]).toMatchObject({ kind: "tool_started", callId: "" });
322
- });
323
- });
324
- });
@@ -1,78 +0,0 @@
1
- /**
2
- * Mutable execution state for `V3StatusBuilder`.
3
- *
4
- * Holds the AgentExecutionStatus proto being progressively built and
5
- * O(1) lookup indexes into its repeated fields. Mutations to indexed
6
- * references (ToolCall, AgentMessage) propagate directly to the proto
7
- * because they share the same object reference. Sub-agent transcripts are
8
- * `SubAgentTracker`'s, keyed by namespace beside this state.
9
- */
10
-
11
- import type { AgentExecutionStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
12
- import type { AgentMessage, ToolCall } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
13
-
14
- export class ExecutionState {
15
- /** The protobuf projection being built. */
16
- readonly proto: AgentExecutionStatus;
17
-
18
- /**
19
- * tool_call_id -> live ToolCall reference inside a message's repeated
20
- * field. Mutations propagate directly to the proto.
21
- */
22
- readonly toolCalls: Map<string, ToolCall> = new Map();
23
-
24
- /**
25
- * LLM run_id -> the AgentMessage that run is streaming into.
26
- * Prevents token interleaving when the model produces multiple runs.
27
- */
28
- readonly messagesByRun: Map<string, AgentMessage> = new Map();
29
-
30
- /**
31
- * Namespace -> most recently created AI message in that execution
32
- * context. Tool calls are appended to this message's toolCalls field.
33
- * Empty string key represents the main agent.
34
- */
35
- readonly currentAiMessage: Map<string, AgentMessage> = new Map();
36
-
37
- /**
38
- * Namespace -> latest LLM run_id for turn-boundary detection.
39
- * When a new run_id appears in the same namespace, a new AgentMessage
40
- * is created rather than appending to the existing one.
41
- */
42
- readonly lastLlmRunId: Map<string, string> = new Map();
43
-
44
- constructor(proto: AgentExecutionStatus) {
45
- this.proto = proto;
46
- }
47
-
48
- /**
49
- * Reset all ephemeral indexes. The proto itself is not cleared —
50
- * this is used when resuming from a persisted status where the proto
51
- * already has messages and tool calls, but runtime tracking state
52
- * (run_id maps, timing) must start fresh.
53
- */
54
- resetEphemeralState(): void {
55
- this.messagesByRun.clear();
56
- this.currentAiMessage.clear();
57
- this.lastLlmRunId.clear();
58
- }
59
-
60
- /**
61
- * Rebuild the toolCalls index from the proto's messages.
62
- *
63
- * Used on the resume path where the V3StatusBuilder is initialized
64
- * with a persisted AgentExecutionStatus that already contains
65
- * messages and tool calls. Only proto-derivable indexes are rebuilt;
66
- * ephemeral runtime state starts fresh.
67
- */
68
- rebuildToolCallIndex(): void {
69
- this.toolCalls.clear();
70
- for (const message of this.proto.messages) {
71
- for (const tc of message.toolCalls) {
72
- if (tc.id) {
73
- this.toolCalls.set(tc.id, tc);
74
- }
75
- }
76
- }
77
- }
78
- }
@@ -1,142 +0,0 @@
1
- /**
2
- * What the transcript builders share: the tool-result serialization and the
3
- * approval-provenance stamp that `V3StatusBuilder` (the root transcript) and
4
- * `SubAgentTracker` (the sub-agent transcripts) both perform at the moment
5
- * they classify a tool call, so the two never drift on either rule.
6
- *
7
- * Until S3 M2b this module also carried the v2 `StatusBuilder`'s share — the
8
- * `UsageAccumulator` that summed `streamingUsage` (the turn runtime's
9
- * accountant owns the field now, `harness/usage-accumulator.ts`) and the v2
10
- * `on_tool_end` result extractor — both retired with the v2 stream (Q-S3-1).
11
- */
12
-
13
- import type { ToolCall } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
14
- import {
15
- POLICY_ENGINE_VERSION,
16
- resolveApprovalProvenance,
17
- toProtoPolicySource,
18
- type MergedToolPolicy,
19
- } from "../../shared/approval-policy.js";
20
- import type { ToolApprovalCategory } from "../../shared/tool-kind.js";
21
-
22
- // ── Tool Result Extraction ─────────────────────────────────────────
23
-
24
- /**
25
- * Serialize a LangChain message `content` field into the canonical tool-result
26
- * string.
27
- *
28
- * Text-only content is a plain string and passes through unchanged. Multimodal
29
- * content (image, or mixed text+image — e.g. a computer-use screenshot) is an
30
- * array of content blocks; we serialize the blocks array ITSELF, not the
31
- * surrounding message envelope, so the result lands in the exact top-level-array
32
- * shape the persist-time offload (`detectImagePayload`/`contentBlocks` in
33
- * status-offload.ts) consumes to lift the image out into a renderable
34
- * `ToolCallOutputRef`. Serializing the envelope instead would bury the base64
35
- * one level deeper and defeat that detection.
36
- *
37
- * Returns undefined when `content` is neither a string nor an array, letting the
38
- * caller fall back to serializing whatever else it holds.
39
- */
40
- function serializeToolContent(content: unknown): string | undefined {
41
- if (typeof content === "string") return content;
42
- if (Array.isArray(content)) return JSON.stringify(content);
43
- return undefined;
44
- }
45
-
46
- /**
47
- * Extract tool result from v3 tool-finished output.
48
- * v3 output wraps LangChain ToolMessage in a constructor envelope:
49
- * `{ lc, type, id, kwargs: { content, status, ... } }`
50
- */
51
- export function extractToolResultV3(output: unknown): string {
52
- if (typeof output === "string") return output;
53
- if (typeof output === "object" && output !== null) {
54
- const obj = output as Record<string, unknown>;
55
- const kwargs = obj.kwargs as Record<string, unknown> | undefined;
56
- if (kwargs) {
57
- const fromKwargs = serializeToolContent(kwargs.content);
58
- if (fromKwargs !== undefined) return fromKwargs;
59
- }
60
- const fromContent = serializeToolContent(obj.content);
61
- if (fromContent !== undefined) return fromContent;
62
- }
63
- try {
64
- return JSON.stringify(output);
65
- } catch {
66
- return "[serialization error]";
67
- }
68
- }
69
-
70
- // ── Authorization Provenance ───────────────────────────────────────
71
-
72
- /**
73
- * The policy inputs the builders need to decide whether a tool call waits for
74
- * approval and to attribute its authorization provenance.
75
- */
76
- export interface ApprovalProvenanceInputs {
77
- readonly policies: ReadonlyMap<string, MergedToolPolicy>;
78
- readonly toolServerMap: ReadonlyMap<string, string>;
79
- /**
80
- * Built-in categories with a run-lifetime lease, so a leased built-in is
81
- * attributed to its lease (approval_lease) rather than the plain category gate.
82
- * Optional (mirroring {@link ApprovalGateConfig.leasedCategories}); absent =
83
- * no lease active.
84
- */
85
- readonly leasedCategories?: ReadonlySet<ToolApprovalCategory>;
86
- /** Pre-armed spec.auto_approve_all — the one whole-run global bypass. */
87
- readonly globalBypass: boolean;
88
- /**
89
- * Unattended approval mode (ExecutionConfig.approval_mode = UNATTENDED):
90
- * the gate auto-skips gated calls instead of interrupting, so the builders
91
- * must NOT seed WAITING_APPROVAL rows or flip the phase to
92
- * WAITING_FOR_APPROVAL — the row streams as RUNNING and the post-stream
93
- * `reconcileUnattendedSkips` stamps the terminal SKIPPED + provenance.
94
- */
95
- readonly unattended?: boolean;
96
- }
97
-
98
- /**
99
- * The name the builder's API uses for the same shape (`setApprovalProvider`):
100
- * the adapter hands the gate's policy state in under this name. One shape, two
101
- * names on purpose — the provider is what a caller SUPPLIES, the inputs are
102
- * what the stamper READS; until S3 M2b the v2 builder declared the provider as
103
- * an empty `interface extends`, a second type for one shape.
104
- */
105
- export type ApprovalPolicyProvider = ApprovalProvenanceInputs;
106
-
107
- /** Shared empty set so a provider without leases allocates nothing per call. */
108
- const NO_LEASED_CATEGORIES: ReadonlySet<ToolApprovalCategory> = new Set();
109
-
110
- /**
111
- * Stamp a tool call's authorization provenance — which policy layer governs it —
112
- * alongside `tool_kind`, in exactly the spot both builders classify the tool.
113
- *
114
- * This is the read-side companion to the gate: it records WHY a tool is gated or
115
- * auto-approved for every observed tool call, so the persisted record is
116
- * auditable and the UI can explain the gate. Built-ins that no layer governs (a
117
- * read-only built-in) and the no-provider path both leave the field at
118
- * UNSPECIFIED, like an unclassified tool_kind.
119
- */
120
- export function stampApprovalProvenance(
121
- tc: ToolCall,
122
- provider: ApprovalProvenanceInputs | null,
123
- ): void {
124
- if (!provider) return;
125
- const serverSlug = tc.mcpServerSlug || provider.toolServerMap.get(tc.name) || "";
126
- const source = resolveApprovalProvenance(
127
- tc.name,
128
- serverSlug,
129
- provider.policies,
130
- provider.leasedCategories ?? NO_LEASED_CATEGORIES,
131
- provider.globalBypass,
132
- );
133
- tc.approvalPolicySource = toProtoPolicySource(source);
134
- if (source) tc.policyEngineVersion = POLICY_ENGINE_VERSION;
135
- }
136
-
137
- // ── Approval Args Sanitization ─────────────────────────────────────
138
-
139
- // Relocated to src/shared/args-preview.ts so both harnesses share one home for
140
- // arg sanitization. Re-exported here so the native importers (v3-status-builder,
141
- // approval-file-change) keep their existing import path.
142
- export { sanitizeArgsPreview } from "../../shared/args-preview.js";