@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,479 +0,0 @@
1
- /**
2
- * SubAgentTracker — tracks sub-agent lifecycle and routes namespace-scoped
3
- * events to per-sub-agent message lists.
4
- *
5
- * Correlation strategy (mirrors deepagents createSubagentTransformer):
6
- * - Parent calls "task" tool → tool_started at depth 0 or 1
7
- * (depth 1 in real runtime: namespace = ["tools:<pregelTaskUuid>"])
8
- * - The task tool-started event's namespace segment becomes the routing prefix
9
- * - Sub-agent child events arrive at depth >= 2, with the routing prefix as
10
- * their first segment (e.g. "tools:<pregelUuid>|model_request:<innerUuid>")
11
- * - First segment match (before "|") correlates child events to sub-agent
12
- *
13
- * The tracker builds INTO the status's own `subAgentExecutions` array, by
14
- * reference: it pushes new rows and mutates existing ones, never replaces the
15
- * array, so the caller that seeded the array from the persisted transcript
16
- * (the turn runtime's `seedFromPersistedStatus`) keeps every prior turn's
17
- * row and every wrapper of the status sees the same rows. Seeded rows are
18
- * indexed by id on construction; a re-emitted `task` tool start for a known
19
- * id binds its routing prefix to the existing row instead of pushing a twin
20
- * (the memory-checkpointer replay re-drives the whole graph), exactly as the
21
- * parent builder reconciles re-emitted tool calls through its rebuilt index.
22
- * Until S3 M2a the tracker owned a private array that `syncSubAgentExecutions`
23
- * assigned onto the status wholesale, which a resumed turn's first delegation
24
- * would have used to drop turn 1's rows (S3 M1 deferred debt).
25
- *
26
- * V3StatusBuilder delegates sub-agent-scoped events here instead of the
27
- * parent message list. Marking rows CANCELLED when a turn stops is NOT the
28
- * tracker's: `shared/subagent-rows.ts` `cancelInProgressSubAgentProtos` is
29
- * the one home of that transition for every harness (the runtime's thrown
30
- * arms and both adapters' stops call it); the tracker only clears the
31
- * streaming flags those rows' messages still carry
32
- * ({@link SubAgentTracker.finalizeAllStreaming}).
33
- */
34
-
35
- import { create, type JsonObject } from "@bufbuild/protobuf";
36
- import { SubAgentExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/subagent_pb";
37
- import type { SubAgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/subagent_pb";
38
- import {
39
- AgentMessageSchema,
40
- ToolCallSchema,
41
- } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
42
- import type { AgentMessage, ToolCall } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
43
- import {
44
- SubAgentStatus,
45
- MessageType,
46
- ToolCallStatus,
47
- } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
48
- import { utcTimestamp } from "../../shared/status.js";
49
- import { classifyTool } from "../../shared/tool-kind.js";
50
- import { extractToolResultV3 } from "./status-builder-shared.js";
51
- import type { StigmerRunEvent } from "./v3-events.js";
52
-
53
- // ── Per-SubAgent State ───────────────────────────────────────────────────────
54
-
55
- interface SubAgentState {
56
- readonly proto: SubAgentExecution;
57
- readonly callId: string;
58
- readonly namespacePrefix: string;
59
-
60
- /** LLM runId → AgentMessage within this sub-agent's messages. */
61
- messagesByRun: Map<string, AgentMessage>;
62
- /** Namespace → current AI message for tool call attachment. */
63
- currentAiMessage: Map<string, AgentMessage>;
64
- /** Namespace → latest LLM runId for turn-boundary detection. */
65
- lastLlmRunId: Map<string, string>;
66
- /** ToolCallId → live ToolCall reference. */
67
- toolCalls: Map<string, ToolCall>;
68
- /** Progressive tool call arg accumulation. */
69
- toolArgBuffers: Map<string, string>;
70
- }
71
-
72
- /** Fresh routing state over a row; `namespacePrefix` is `""` for a seeded row until its `task` start re-announces it. */
73
- function newSubAgentState(proto: SubAgentExecution, callId: string, namespacePrefix: string): SubAgentState {
74
- return {
75
- proto,
76
- callId,
77
- namespacePrefix,
78
- messagesByRun: new Map(),
79
- currentAiMessage: new Map(),
80
- lastLlmRunId: new Map(),
81
- toolCalls: new Map(),
82
- toolArgBuffers: new Map(),
83
- };
84
- }
85
-
86
- // ── SubAgentTracker ──────────────────────────────────────────────────────────
87
-
88
- export class SubAgentTracker {
89
- private readonly stateByCallId = new Map<string, SubAgentState>();
90
- private readonly stateByPrefix = new Map<string, SubAgentState>();
91
-
92
- /**
93
- * @param executions - The status's own `subAgentExecutions` array, built
94
- * into by reference. Rows already on it (the runtime's seed on a
95
- * reinvocation) are indexed by id, with their tool calls, so a re-driven
96
- * event reconciles onto them; their routing prefix is unknown until a
97
- * `task` tool start re-announces it.
98
- */
99
- constructor(private readonly executions: SubAgentExecution[]) {
100
- for (const proto of executions) {
101
- const state = newSubAgentState(proto, proto.id, "");
102
- for (const message of proto.messages) {
103
- for (const tc of message.toolCalls) {
104
- if (tc.id) state.toolCalls.set(tc.id, tc);
105
- }
106
- }
107
- this.stateByCallId.set(proto.id, state);
108
- }
109
- }
110
-
111
- /**
112
- * Called when a "task" tool_started event is observed at depth 0 or 1.
113
- * Creates a new SubAgentExecution and begins tracking — or, for a seeded
114
- * row re-announced by a replayed graph, binds the routing prefix to the
115
- * row that already exists.
116
- *
117
- * @param callId - Provider tool call ID (e.g. "toolu_01HW...")
118
- * @param args - Tool input arguments (subagent_type, description)
119
- * @param routingPrefix - The namespace segment used to match child events.
120
- * At depth 1 this is the event's own namespace (the LangGraph tools-node
121
- * segment, e.g. "tools:<pregelUuid>"). At depth 0 (edge case / tests) the
122
- * caller provides a synthetic prefix like "tools:<callId>".
123
- */
124
- onTaskToolStarted(callId: string, args: Record<string, unknown>, routingPrefix: string): void {
125
- const existing = this.stateByCallId.get(callId);
126
- if (existing) {
127
- if (existing.namespacePrefix === "") {
128
- const bound = { ...existing, namespacePrefix: routingPrefix };
129
- this.stateByCallId.set(callId, bound);
130
- this.stateByPrefix.set(routingPrefix, bound);
131
- }
132
- return;
133
- }
134
-
135
- const name = safeString(args, "subagent_type") || "task";
136
- const description = safeString(args, "description") || "";
137
-
138
- const proto = create(SubAgentExecutionSchema, {
139
- id: callId,
140
- name,
141
- subject: description,
142
- input: description,
143
- status: SubAgentStatus.SUB_AGENT_IN_PROGRESS,
144
- startedAt: utcTimestamp(),
145
- });
146
-
147
- const state = newSubAgentState(proto, callId, routingPrefix);
148
-
149
- this.executions.push(proto);
150
- this.stateByCallId.set(callId, state);
151
- this.stateByPrefix.set(routingPrefix, state);
152
- }
153
-
154
- /**
155
- * Called when the "task" tool finishes successfully.
156
- */
157
- onTaskToolFinished(callId: string, output: unknown): void {
158
- const state = this.stateByCallId.get(callId);
159
- if (!state) return;
160
-
161
- state.proto.status = SubAgentStatus.SUB_AGENT_COMPLETED;
162
- state.proto.completedAt = utcTimestamp();
163
- state.proto.output = extractToolResultV3(output);
164
-
165
- this.finalizeStreamingMessages(state);
166
- }
167
-
168
- /**
169
- * Called when the "task" tool errors.
170
- */
171
- onTaskToolError(callId: string, errorMessage: string): void {
172
- const state = this.stateByCallId.get(callId);
173
- if (!state) return;
174
-
175
- state.proto.status = SubAgentStatus.SUB_AGENT_FAILED;
176
- state.proto.completedAt = utcTimestamp();
177
- state.proto.error = errorMessage;
178
-
179
- this.finalizeStreamingMessages(state);
180
- }
181
-
182
- /**
183
- * Clear the streaming flag on every tracked sub-agent's in-flight
184
- * messages. Called when the turn stops before the sub-agents finished;
185
- * the rows' own CANCELLED transition is the caller's, through the shared
186
- * `cancelInProgressSubAgentProtos` (see the header).
187
- */
188
- finalizeAllStreaming(): void {
189
- for (const state of this.stateByCallId.values()) {
190
- this.finalizeStreamingMessages(state);
191
- }
192
- }
193
-
194
- /**
195
- * Returns true if the given formatted namespace belongs to a tracked sub-agent.
196
- *
197
- * Only matches events at depth >= 2 (namespace contains a pipe separator).
198
- * Depth-1 events share the same first segment as registered prefixes but are
199
- * parent-level tool lifecycle events (handled separately by isTrackedTaskTool).
200
- * Child events have the registered prefix as their first segment PLUS additional
201
- * inner segments (e.g. "tools:<pregelUuid>|model_request:<innerUuid>").
202
- */
203
- isSubAgentNamespace(namespace: string): boolean {
204
- if (!namespace || !namespace.includes("|")) return false;
205
- const firstSegment = extractFirstSegment(namespace);
206
- return this.stateByPrefix.has(firstSegment);
207
- }
208
-
209
- /**
210
- * Route a sub-agent-scoped event to the correct SubAgentExecution's messages.
211
- * The event has already been confirmed as sub-agent-scoped via isSubAgentNamespace.
212
- */
213
- routeEvent(event: StigmerRunEvent): void {
214
- const firstSegment = extractFirstSegment(event.namespace);
215
- const state = this.stateByPrefix.get(firstSegment);
216
- if (!state) return;
217
-
218
- // Resolve agent namespace: strip the sub-agent's graph segment AND any
219
- // tools:* segments from the remaining path. Within a sub-agent, all events
220
- // (from node "model_request", from "tools:callId", etc.) belong to the same
221
- // flat agent context — map them all to the canonical "" key.
222
- const localNs = this.resolveAgentNamespace(stripFirstSegment(event.namespace));
223
-
224
- switch (event.kind) {
225
- case "message_start":
226
- this.handleMessageStart(state, event.runId, localNs);
227
- break;
228
- case "text_delta":
229
- this.handleTextDelta(state, event.runId, localNs, event.text);
230
- break;
231
- case "reasoning_delta":
232
- this.handleReasoningDelta(state, event.runId, localNs, event.text);
233
- break;
234
- case "tool_call_arg_delta":
235
- this.handleToolCallArgDelta(state, event.callId, event.argsChunk);
236
- break;
237
- case "message_finish":
238
- this.handleMessageFinish(state, event.runId);
239
- break;
240
- case "tool_started":
241
- this.handleToolStarted(state, event.callId, event.name, event.input, localNs);
242
- break;
243
- case "tool_finished":
244
- this.handleToolFinished(state, event.callId, event.output);
245
- break;
246
- case "tool_error":
247
- this.handleToolError(state, event.callId, event.message);
248
- break;
249
- case "tool_output_delta":
250
- this.handleToolOutputDelta(state, event.callId, event.delta);
251
- break;
252
- case "usage":
253
- case "lifecycle":
254
- case "provider":
255
- break;
256
- }
257
- }
258
-
259
- // ── Message Handlers ─────────────────────────────────────────────────────
260
-
261
- private handleMessageStart(state: SubAgentState, runId: string, localNs: string): void {
262
- const lastRunId = state.lastLlmRunId.get(localNs);
263
- if (lastRunId && lastRunId !== runId) {
264
- const existingMsg = state.currentAiMessage.get(localNs);
265
- if (existingMsg) existingMsg.isStreaming = false;
266
- }
267
- state.lastLlmRunId.set(localNs, runId);
268
- }
269
-
270
- private handleTextDelta(state: SubAgentState, runId: string, localNs: string, text: string): void {
271
- const msg = this.ensureAiMessage(state, runId, localNs, MessageType.MESSAGE_AI);
272
- msg.content += text;
273
- msg.isStreaming = true;
274
- }
275
-
276
- private handleReasoningDelta(state: SubAgentState, runId: string, localNs: string, text: string): void {
277
- const thinkingKey = `thinking:${localNs}`;
278
- const existing = state.messagesByRun.get(thinkingKey);
279
- if (existing && existing.type === MessageType.MESSAGE_THINKING) {
280
- existing.content += text;
281
- existing.isStreaming = true;
282
- return;
283
- }
284
-
285
- const msg = create(AgentMessageSchema, {
286
- type: MessageType.MESSAGE_THINKING,
287
- content: text,
288
- timestamp: utcTimestamp(),
289
- isStreaming: true,
290
- });
291
-
292
- state.proto.messages.push(msg);
293
- state.messagesByRun.set(thinkingKey, msg);
294
- }
295
-
296
- private handleMessageFinish(state: SubAgentState, runId: string): void {
297
- const msg = state.messagesByRun.get(runId);
298
- if (msg) msg.isStreaming = false;
299
- // The usage on this event was reported by `V3StatusBuilder.processEvent`
300
- // before it routed here (Q-M2b-1); the tracker owns the transcript only.
301
- }
302
-
303
- // ── Tool Handlers ──────────────────────────────────────────────────────
304
-
305
- private handleToolStarted(
306
- state: SubAgentState,
307
- callId: string,
308
- name: string,
309
- input: Record<string, unknown>,
310
- localNs: string,
311
- ): void {
312
- const agentNs = this.resolveAgentNamespace(localNs);
313
- const parentMsg = state.currentAiMessage.get(agentNs)
314
- ?? this.ensureAiMessageForToolCall(state, agentNs);
315
- if (!parentMsg) return;
316
-
317
- const tc = create(ToolCallSchema, {
318
- id: callId,
319
- name,
320
- status: ToolCallStatus.TOOL_CALL_RUNNING,
321
- startedAt: utcTimestamp(),
322
- toolKind: classifyTool(name),
323
- });
324
-
325
- if (Object.keys(input).length > 0) {
326
- tc.args = input as JsonObject;
327
- }
328
-
329
- parentMsg.toolCalls.push(tc);
330
- state.toolCalls.set(callId, tc);
331
- }
332
-
333
- private handleToolFinished(state: SubAgentState, callId: string, output: unknown): void {
334
- const tc = state.toolCalls.get(callId);
335
- if (!tc) return;
336
-
337
- // Faithful result only; payload size is bounded at the persist chokepoint
338
- // (see v3 builder note). Truncating here would corrupt image base64.
339
- tc.status = ToolCallStatus.TOOL_CALL_COMPLETED;
340
- tc.result = extractToolResultV3(output);
341
- tc.completedAt = utcTimestamp();
342
- tc.isStreaming = false;
343
- state.toolArgBuffers.delete(callId);
344
- }
345
-
346
- private handleToolError(state: SubAgentState, callId: string, message: string): void {
347
- const tc = state.toolCalls.get(callId);
348
- if (!tc) return;
349
-
350
- tc.status = ToolCallStatus.TOOL_CALL_FAILED;
351
- tc.error = message;
352
- tc.completedAt = utcTimestamp();
353
- tc.isStreaming = false;
354
- state.toolArgBuffers.delete(callId);
355
- }
356
-
357
- private handleToolCallArgDelta(state: SubAgentState, callId: string, argsChunk: string): void {
358
- const tc = state.toolCalls.get(callId);
359
- if (!tc) return;
360
-
361
- const buffer = (state.toolArgBuffers.get(callId) ?? "") + argsChunk;
362
- state.toolArgBuffers.set(callId, buffer);
363
-
364
- try {
365
- tc.args = JSON.parse(buffer) as JsonObject;
366
- } catch {
367
- // Partial JSON — will resolve on next chunk or tool-finished
368
- }
369
- }
370
-
371
- private handleToolOutputDelta(state: SubAgentState, callId: string, delta: string): void {
372
- const tc = state.toolCalls.get(callId);
373
- if (!tc) return;
374
- tc.result = (tc.result ?? "") + delta;
375
- }
376
-
377
- // ── Helpers ────────────────────────────────────────────────────────────
378
-
379
- private ensureAiMessage(
380
- state: SubAgentState,
381
- runId: string,
382
- localNs: string,
383
- type: MessageType,
384
- ): AgentMessage {
385
- const existing = state.messagesByRun.get(runId);
386
- if (existing) return existing;
387
-
388
- const lastRunId = state.lastLlmRunId.get(localNs);
389
- if (lastRunId && lastRunId !== runId) {
390
- const prev = state.currentAiMessage.get(localNs);
391
- if (prev) prev.isStreaming = false;
392
- }
393
-
394
- const msg = create(AgentMessageSchema, {
395
- type,
396
- content: "",
397
- timestamp: utcTimestamp(),
398
- isStreaming: true,
399
- });
400
-
401
- state.proto.messages.push(msg);
402
- state.messagesByRun.set(runId, msg);
403
- state.currentAiMessage.set(localNs, msg);
404
- state.lastLlmRunId.set(localNs, runId);
405
-
406
- return msg;
407
- }
408
-
409
- private ensureAiMessageForToolCall(state: SubAgentState, localNs: string): AgentMessage {
410
- const lastRunId = state.lastLlmRunId.get(localNs);
411
- if (lastRunId) {
412
- const existing = state.messagesByRun.get(lastRunId);
413
- if (existing) {
414
- state.currentAiMessage.set(localNs, existing);
415
- return existing;
416
- }
417
- }
418
-
419
- const msg = create(AgentMessageSchema, {
420
- type: MessageType.MESSAGE_AI,
421
- content: "",
422
- timestamp: utcTimestamp(),
423
- isStreaming: false,
424
- });
425
-
426
- state.proto.messages.push(msg);
427
- state.currentAiMessage.set(localNs, msg);
428
- return msg;
429
- }
430
-
431
- /**
432
- * Resolve a local namespace to an agent-level key.
433
- *
434
- * Within a sub-agent's flat execution context, internal namespace segments
435
- * (graph node names like "model_request", tool scopes like "tools:callId")
436
- * all belong to the same single agent. We collapse them to "" — the sub-agent
437
- * has only one conversation thread.
438
- */
439
- private resolveAgentNamespace(ns: string): string {
440
- if (!ns) return "";
441
- // Strip tools:* and known graph-node segments — sub-agents are flat
442
- const parts = ns.split("|").filter(p =>
443
- !p.startsWith("tools:") && !p.startsWith("model_request"),
444
- );
445
- return parts.join("|");
446
- }
447
-
448
- private finalizeStreamingMessages(state: SubAgentState): void {
449
- for (const msg of state.currentAiMessage.values()) {
450
- msg.isStreaming = false;
451
- }
452
- }
453
- }
454
-
455
- // ── Namespace Utilities ──────────────────────────────────────────────────────
456
-
457
- /**
458
- * Extract the first segment from a pipe-separated namespace.
459
- * "tools:toolu_123|model_request:0" → "tools:toolu_123"
460
- */
461
- function extractFirstSegment(namespace: string): string {
462
- const pipeIdx = namespace.indexOf("|");
463
- return pipeIdx === -1 ? namespace : namespace.slice(0, pipeIdx);
464
- }
465
-
466
- /**
467
- * Strip the first segment, returning everything after the first pipe.
468
- * "tools:toolu_123|model_request:0" → "model_request:0"
469
- * "tools:toolu_123" → ""
470
- */
471
- function stripFirstSegment(namespace: string): string {
472
- const pipeIdx = namespace.indexOf("|");
473
- return pipeIdx === -1 ? "" : namespace.slice(pipeIdx + 1);
474
- }
475
-
476
- function safeString(obj: Record<string, unknown>, key: string): string {
477
- const val = obj[key];
478
- return typeof val === "string" ? val : "";
479
- }
@@ -1,153 +0,0 @@
1
- /**
2
- * StigmerRunEvent — normalized v3 protocol event types.
3
- *
4
- * The V3ProtocolNormalizer converts raw LangGraph ProtocolEvents into
5
- * these typed variants. V3StatusBuilder consumes them to build the
6
- * AgentExecutionStatus proto.
7
- *
8
- * This is a runner-internal contract (not persisted, not exposed to
9
- * clients). It isolates the V3StatusBuilder from LangGraph protocol
10
- * instability (field naming, delta shapes, channel semantics).
11
- *
12
- * ID conventions:
13
- * - `runId` — LLM invocation ID; shared across message events in one turn
14
- * - `callId` — provider tool call ID (e.g. `toolu_...`); keys ToolCall records
15
- * - `namespace` — formatted string from v3 namespace array; empty = parent agent
16
- */
17
-
18
- // ── Base ──────────────────────────────────────────────────────────
19
-
20
- interface StigmerRunEventBase {
21
- readonly kind: string;
22
- readonly seq: number;
23
- /** Formatted namespace string: empty = parent agent, joined with "|" for nested. */
24
- readonly namespace: string;
25
- readonly node?: string;
26
- }
27
-
28
- // ── Message Events (from `messages` channel) ──────────────────────
29
-
30
- export interface MessageStartEvent extends StigmerRunEventBase {
31
- readonly kind: "message_start";
32
- readonly runId: string;
33
- readonly messageId?: string;
34
- }
35
-
36
- export interface TextDeltaEvent extends StigmerRunEventBase {
37
- readonly kind: "text_delta";
38
- readonly runId: string;
39
- readonly text: string;
40
- }
41
-
42
- export interface ReasoningDeltaEvent extends StigmerRunEventBase {
43
- readonly kind: "reasoning_delta";
44
- readonly runId: string;
45
- readonly text: string;
46
- }
47
-
48
- export interface ToolCallArgDeltaEvent extends StigmerRunEventBase {
49
- readonly kind: "tool_call_arg_delta";
50
- readonly callId: string;
51
- readonly argsChunk: string;
52
- }
53
-
54
- export interface MessageFinishEvent extends StigmerRunEventBase {
55
- readonly kind: "message_finish";
56
- readonly runId: string;
57
- readonly usage?: V3UsagePayload;
58
- readonly reason?: string;
59
- }
60
-
61
- // ── Tool Events (from `tools` channel — authoritative) ───────────
62
-
63
- export interface ToolStartedEvent extends StigmerRunEventBase {
64
- readonly kind: "tool_started";
65
- readonly callId: string;
66
- readonly name: string;
67
- readonly input: Record<string, unknown>;
68
- }
69
-
70
- export interface ToolOutputDeltaEvent extends StigmerRunEventBase {
71
- readonly kind: "tool_output_delta";
72
- readonly callId: string;
73
- readonly delta: string;
74
- }
75
-
76
- export interface ToolFinishedEvent extends StigmerRunEventBase {
77
- readonly kind: "tool_finished";
78
- readonly callId: string;
79
- readonly output: unknown;
80
- }
81
-
82
- export interface ToolErrorEvent extends StigmerRunEventBase {
83
- readonly kind: "tool_error";
84
- readonly callId: string;
85
- readonly message: string;
86
- }
87
-
88
- // ── Usage / Lifecycle / Provider ──────────────────────────────────
89
-
90
- export interface UsageEvent extends StigmerRunEventBase {
91
- readonly kind: "usage";
92
- readonly runId: string;
93
- readonly usage: V3UsagePayload;
94
- }
95
-
96
- export interface LifecycleEvent extends StigmerRunEventBase {
97
- readonly kind: "lifecycle";
98
- readonly event: string;
99
- readonly graphName?: string;
100
- }
101
-
102
- export interface ProviderEvent extends StigmerRunEventBase {
103
- readonly kind: "provider";
104
- readonly provider: string;
105
- readonly model?: string;
106
- }
107
-
108
- // ── Usage Payload ─────────────────────────────────────────────────
109
-
110
- export interface V3UsagePayload {
111
- readonly input_tokens?: number;
112
- readonly output_tokens?: number;
113
- readonly total_tokens?: number;
114
- readonly input_token_details?: {
115
- readonly cache_creation?: number;
116
- readonly cache_read?: number;
117
- };
118
- }
119
-
120
- // ── Union ─────────────────────────────────────────────────────────
121
-
122
- export type StigmerRunEvent =
123
- | MessageStartEvent
124
- | TextDeltaEvent
125
- | ReasoningDeltaEvent
126
- | ToolCallArgDeltaEvent
127
- | MessageFinishEvent
128
- | ToolStartedEvent
129
- | ToolOutputDeltaEvent
130
- | ToolFinishedEvent
131
- | ToolErrorEvent
132
- | UsageEvent
133
- | LifecycleEvent
134
- | ProviderEvent;
135
-
136
- // ── Namespace Formatting ──────────────────────────────────────────
137
-
138
- export function formatNamespace(ns: readonly string[]): string {
139
- return ns.length === 0 ? "" : ns.join("|");
140
- }
141
-
142
- /**
143
- * Returns the depth (number of segments) of a formatted namespace string.
144
- * Empty string → 0, single segment → 1, "a|b" → 2, etc.
145
- */
146
- export function namespaceDepth(namespace: string): number {
147
- if (!namespace) return 0;
148
- let count = 1;
149
- for (let i = 0; i < namespace.length; i++) {
150
- if (namespace[i] === "|") count++;
151
- }
152
- return count;
153
- }