@stigmer/runner 3.0.9-dev.20260615153829 → 3.1.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 (329) hide show
  1. package/dist/.build-fingerprint +1 -1
  2. package/dist/__test-utils__/approval-contract/types.d.ts +174 -0
  3. package/dist/__test-utils__/approval-contract/types.js +24 -0
  4. package/dist/__test-utils__/approval-contract/types.js.map +1 -0
  5. package/dist/activities/call-agent-status.d.ts +19 -1
  6. package/dist/activities/call-agent-status.js +64 -5
  7. package/dist/activities/call-agent-status.js.map +1 -1
  8. package/dist/activities/call-llm.js +19 -53
  9. package/dist/activities/call-llm.js.map +1 -1
  10. package/dist/activities/classify-tool-approvals.d.ts +24 -0
  11. package/dist/activities/classify-tool-approvals.js +69 -17
  12. package/dist/activities/classify-tool-approvals.js.map +1 -1
  13. package/dist/activities/discover-mcp-server.d.ts +7 -0
  14. package/dist/activities/discover-mcp-server.js +11 -1
  15. package/dist/activities/discover-mcp-server.js.map +1 -1
  16. package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.d.ts +140 -0
  17. package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.js +130 -0
  18. package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.js.map +1 -0
  19. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.d.ts +18 -0
  20. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +123 -0
  21. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -0
  22. package/dist/activities/execute-cursor/approval-policy.d.ts +17 -61
  23. package/dist/activities/execute-cursor/approval-policy.js +8 -120
  24. package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
  25. package/dist/activities/execute-cursor/approval-state.d.ts +219 -9
  26. package/dist/activities/execute-cursor/approval-state.js +233 -17
  27. package/dist/activities/execute-cursor/approval-state.js.map +1 -1
  28. package/dist/activities/execute-cursor/capture-flow.d.ts +127 -0
  29. package/dist/activities/execute-cursor/capture-flow.js +234 -0
  30. package/dist/activities/execute-cursor/capture-flow.js.map +1 -0
  31. package/dist/activities/execute-cursor/cas-observations.d.ts +96 -0
  32. package/dist/activities/execute-cursor/cas-observations.js +184 -0
  33. package/dist/activities/execute-cursor/cas-observations.js.map +1 -0
  34. package/dist/activities/execute-cursor/command-provenance.d.ts +62 -0
  35. package/dist/activities/execute-cursor/command-provenance.js +128 -0
  36. package/dist/activities/execute-cursor/command-provenance.js.map +1 -0
  37. package/dist/activities/execute-cursor/exact-apply.d.ts +110 -0
  38. package/dist/activities/execute-cursor/exact-apply.js +204 -0
  39. package/dist/activities/execute-cursor/exact-apply.js.map +1 -0
  40. package/dist/activities/execute-cursor/hook-script.d.ts +53 -24
  41. package/dist/activities/execute-cursor/hook-script.js +310 -47
  42. package/dist/activities/execute-cursor/hook-script.js.map +1 -1
  43. package/dist/activities/execute-cursor/index.d.ts +8 -1
  44. package/dist/activities/execute-cursor/index.js +500 -64
  45. package/dist/activities/execute-cursor/index.js.map +1 -1
  46. package/dist/activities/execute-cursor/message-translator.d.ts +258 -11
  47. package/dist/activities/execute-cursor/message-translator.js +836 -90
  48. package/dist/activities/execute-cursor/message-translator.js.map +1 -1
  49. package/dist/activities/execute-cursor/prompt-builder.d.ts +20 -23
  50. package/dist/activities/execute-cursor/prompt-builder.js +74 -15
  51. package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
  52. package/dist/activities/execute-cursor/workspace-setup.d.ts +17 -0
  53. package/dist/activities/execute-cursor/workspace-setup.js +212 -33
  54. package/dist/activities/execute-cursor/workspace-setup.js.map +1 -1
  55. package/dist/activities/execute-deep-agent/__test-utils__/gateway-substrate.d.ts +19 -0
  56. package/dist/activities/execute-deep-agent/__test-utils__/gateway-substrate.js +143 -0
  57. package/dist/activities/execute-deep-agent/__test-utils__/gateway-substrate.js.map +1 -0
  58. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +88 -0
  59. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +81 -0
  60. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -0
  61. package/dist/activities/execute-deep-agent/approval-file-change.d.ts +47 -0
  62. package/dist/activities/execute-deep-agent/approval-file-change.js +68 -0
  63. package/dist/activities/execute-deep-agent/approval-file-change.js.map +1 -0
  64. package/dist/activities/execute-deep-agent/attachment-injector.d.ts +8 -1
  65. package/dist/activities/execute-deep-agent/attachment-injector.js +7 -7
  66. package/dist/activities/execute-deep-agent/attachment-injector.js.map +1 -1
  67. package/dist/activities/execute-deep-agent/cas-capture-backend.d.ts +42 -0
  68. package/dist/activities/execute-deep-agent/cas-capture-backend.js +47 -0
  69. package/dist/activities/execute-deep-agent/cas-capture-backend.js.map +1 -0
  70. package/dist/activities/execute-deep-agent/cas-capture-observer.d.ts +79 -0
  71. package/dist/activities/execute-deep-agent/cas-capture-observer.js +112 -0
  72. package/dist/activities/execute-deep-agent/cas-capture-observer.js.map +1 -0
  73. package/dist/activities/execute-deep-agent/hitl.d.ts +16 -3
  74. package/dist/activities/execute-deep-agent/hitl.js +11 -3
  75. package/dist/activities/execute-deep-agent/hitl.js.map +1 -1
  76. package/dist/activities/execute-deep-agent/index.d.ts +2 -1
  77. package/dist/activities/execute-deep-agent/index.js +393 -33
  78. package/dist/activities/execute-deep-agent/index.js.map +1 -1
  79. package/dist/activities/execute-deep-agent/inline-publisher.d.ts +7 -1
  80. package/dist/activities/execute-deep-agent/inline-publisher.js +23 -2
  81. package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -1
  82. package/dist/activities/execute-deep-agent/setup.d.ts +53 -2
  83. package/dist/activities/execute-deep-agent/setup.js +149 -92
  84. package/dist/activities/execute-deep-agent/setup.js.map +1 -1
  85. package/dist/activities/execute-deep-agent/stamp-flowed-rows.d.ts +36 -0
  86. package/dist/activities/execute-deep-agent/stamp-flowed-rows.js +56 -0
  87. package/dist/activities/execute-deep-agent/stamp-flowed-rows.js.map +1 -0
  88. package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +34 -1
  89. package/dist/activities/execute-deep-agent/status-builder-shared.js +26 -25
  90. package/dist/activities/execute-deep-agent/status-builder-shared.js.map +1 -1
  91. package/dist/activities/execute-deep-agent/status-builder.d.ts +17 -5
  92. package/dist/activities/execute-deep-agent/status-builder.js +44 -3
  93. package/dist/activities/execute-deep-agent/status-builder.js.map +1 -1
  94. package/dist/activities/execute-deep-agent/streaming-side-effects.js +2 -19
  95. package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
  96. package/dist/activities/execute-deep-agent/streaming.js +3 -15
  97. package/dist/activities/execute-deep-agent/streaming.js.map +1 -1
  98. package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +25 -7
  99. package/dist/activities/execute-deep-agent/subagent-transformer.js +23 -7
  100. package/dist/activities/execute-deep-agent/subagent-transformer.js.map +1 -1
  101. package/dist/activities/execute-deep-agent/subagent-wiring.d.ts +30 -3
  102. package/dist/activities/execute-deep-agent/subagent-wiring.js +29 -3
  103. package/dist/activities/execute-deep-agent/subagent-wiring.js.map +1 -1
  104. package/dist/activities/execute-deep-agent/v3-status-builder.js +32 -2
  105. package/dist/activities/execute-deep-agent/v3-status-builder.js.map +1 -1
  106. package/dist/claimcheck/payload-codec.js +9 -5
  107. package/dist/claimcheck/payload-codec.js.map +1 -1
  108. package/dist/client/stigmer-client.d.ts +2 -0
  109. package/dist/client/stigmer-client.js +2 -0
  110. package/dist/client/stigmer-client.js.map +1 -1
  111. package/dist/middleware/approval-gate.d.ts +85 -4
  112. package/dist/middleware/approval-gate.js +165 -38
  113. package/dist/middleware/approval-gate.js.map +1 -1
  114. package/dist/middleware/types.d.ts +2 -5
  115. package/dist/shared/activity-input.d.ts +43 -0
  116. package/dist/shared/activity-input.js +17 -0
  117. package/dist/shared/activity-input.js.map +1 -0
  118. package/dist/shared/approval-canonicalize.d.ts +19 -0
  119. package/dist/shared/approval-canonicalize.js +119 -0
  120. package/dist/shared/approval-canonicalize.js.map +1 -0
  121. package/dist/shared/approval-fingerprint.d.ts +106 -0
  122. package/dist/shared/approval-fingerprint.js +113 -0
  123. package/dist/shared/approval-fingerprint.js.map +1 -0
  124. package/dist/shared/approval-policy.d.ts +182 -12
  125. package/dist/shared/approval-policy.js +213 -27
  126. package/dist/shared/approval-policy.js.map +1 -1
  127. package/dist/shared/args-preview.d.ts +52 -0
  128. package/dist/shared/args-preview.js +93 -0
  129. package/dist/shared/args-preview.js.map +1 -0
  130. package/dist/shared/artifact-storage.d.ts +19 -1
  131. package/dist/shared/artifact-storage.js +48 -11
  132. package/dist/shared/artifact-storage.js.map +1 -1
  133. package/dist/shared/file-change.d.ts +44 -0
  134. package/dist/shared/file-change.js +57 -0
  135. package/dist/shared/file-change.js.map +1 -0
  136. package/dist/shared/file-tools.d.ts +107 -0
  137. package/dist/shared/file-tools.js +168 -0
  138. package/dist/shared/file-tools.js.map +1 -0
  139. package/dist/shared/filereview/capture.d.ts +202 -0
  140. package/dist/shared/filereview/capture.js +498 -0
  141. package/dist/shared/filereview/capture.js.map +1 -0
  142. package/dist/shared/filereview/cas-substrate.d.ts +190 -0
  143. package/dist/shared/filereview/cas-substrate.js +284 -0
  144. package/dist/shared/filereview/cas-substrate.js.map +1 -0
  145. package/dist/shared/filereview/digest.d.ts +40 -0
  146. package/dist/shared/filereview/digest.js +66 -0
  147. package/dist/shared/filereview/digest.js.map +1 -0
  148. package/dist/shared/filereview/events.d.ts +170 -0
  149. package/dist/shared/filereview/events.js +298 -0
  150. package/dist/shared/filereview/events.js.map +1 -0
  151. package/dist/shared/filereview/git-substrate.d.ts +175 -0
  152. package/dist/shared/filereview/git-substrate.js +439 -0
  153. package/dist/shared/filereview/git-substrate.js.map +1 -0
  154. package/dist/shared/filereview/index.d.ts +11 -0
  155. package/dist/shared/filereview/index.js +12 -0
  156. package/dist/shared/filereview/index.js.map +1 -0
  157. package/dist/shared/filereview/secret-paths.d.ts +63 -0
  158. package/dist/shared/filereview/secret-paths.js +105 -0
  159. package/dist/shared/filereview/secret-paths.js.map +1 -0
  160. package/dist/shared/fingerprint-secret.d.ts +26 -0
  161. package/dist/shared/fingerprint-secret.js +47 -0
  162. package/dist/shared/fingerprint-secret.js.map +1 -0
  163. package/dist/shared/model-client.d.ts +51 -0
  164. package/dist/shared/model-client.js +77 -0
  165. package/dist/shared/model-client.js.map +1 -0
  166. package/dist/shared/plan-artifact.js +0 -2
  167. package/dist/shared/plan-artifact.js.map +1 -1
  168. package/dist/shared/status-offload.d.ts +83 -9
  169. package/dist/shared/status-offload.js +399 -79
  170. package/dist/shared/status-offload.js.map +1 -1
  171. package/dist/shared/status.js +14 -1
  172. package/dist/shared/status.js.map +1 -1
  173. package/dist/shared/tool-kind.d.ts +19 -0
  174. package/dist/shared/tool-kind.js +13 -0
  175. package/dist/shared/tool-kind.js.map +1 -1
  176. package/dist/shared/tool-row.d.ts +88 -0
  177. package/dist/shared/tool-row.js +127 -0
  178. package/dist/shared/tool-row.js.map +1 -0
  179. package/dist/shared/workspace/platform-dir.d.ts +25 -0
  180. package/dist/shared/workspace/platform-dir.js +38 -2
  181. package/dist/shared/workspace/platform-dir.js.map +1 -1
  182. package/dist/workflows/call-agent-orchestrator.js +56 -7
  183. package/dist/workflows/call-agent-orchestrator.js.map +1 -1
  184. package/dist/workflows/connect-mcp-server.d.ts +50 -0
  185. package/dist/workflows/connect-mcp-server.js +136 -15
  186. package/dist/workflows/connect-mcp-server.js.map +1 -1
  187. package/dist/workflows/types.d.ts +8 -0
  188. package/package.json +2 -2
  189. package/src/__test-utils__/approval-contract/contract.ts +224 -0
  190. package/src/__test-utils__/approval-contract/types.ts +179 -0
  191. package/src/__test-utils__/fake-artifact-storage.ts +72 -0
  192. package/src/__tests__/approval-gateway-contract.test.ts +29 -0
  193. package/src/__tests__/claimcheck-codec.test.ts +16 -53
  194. package/src/__tests__/golden-e2e.test.ts +2 -0
  195. package/src/__tests__/runner-token-coordinator.test.ts +3 -3
  196. package/src/activities/__tests__/call-agent-status.test.ts +135 -0
  197. package/src/activities/__tests__/call-llm.test.ts +1 -1
  198. package/src/activities/__tests__/classify-tool-approvals.test.ts +208 -1
  199. package/src/activities/__tests__/discover-mcp-server.test.ts +30 -0
  200. package/src/activities/__tests__/workflow-event-activities.test.ts +2 -1
  201. package/src/activities/call-agent-status.ts +74 -4
  202. package/src/activities/call-llm.ts +18 -63
  203. package/src/activities/classify-tool-approvals.ts +101 -19
  204. package/src/activities/discover-mcp-server.ts +29 -1
  205. package/src/activities/execute-cursor/__test-utils__/cursor-hook-harness.ts +216 -0
  206. package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +148 -0
  207. package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +41 -9
  208. package/src/activities/execute-cursor/__tests__/approval-state.test.ts +292 -0
  209. package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +68 -1
  210. package/src/activities/execute-cursor/__tests__/capture-flow.test.ts +1005 -0
  211. package/src/activities/execute-cursor/__tests__/cas-observations.test.ts +187 -0
  212. package/src/activities/execute-cursor/__tests__/coarse-fingerprint.test.ts +97 -0
  213. package/src/activities/execute-cursor/__tests__/command-provenance.test.ts +240 -0
  214. package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +203 -0
  215. package/src/activities/execute-cursor/__tests__/exact-apply.test.ts +375 -0
  216. package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +1294 -24
  217. package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +446 -0
  218. package/src/activities/execute-cursor/__tests__/hook-script.test.ts +384 -110
  219. package/src/activities/execute-cursor/__tests__/message-translator.test.ts +171 -25
  220. package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +189 -0
  221. package/src/activities/execute-cursor/__tests__/tool-result-image.test.ts +44 -23
  222. package/src/activities/execute-cursor/__tests__/workspace-setup.test.ts +190 -10
  223. package/src/activities/execute-cursor/approval-policy.ts +28 -159
  224. package/src/activities/execute-cursor/approval-state.ts +366 -18
  225. package/src/activities/execute-cursor/capture-flow.ts +323 -0
  226. package/src/activities/execute-cursor/cas-observations.ts +204 -0
  227. package/src/activities/execute-cursor/command-provenance.ts +168 -0
  228. package/src/activities/execute-cursor/exact-apply.ts +253 -0
  229. package/src/activities/execute-cursor/hook-script.ts +317 -51
  230. package/src/activities/execute-cursor/index.ts +575 -67
  231. package/src/activities/execute-cursor/message-translator.ts +963 -89
  232. package/src/activities/execute-cursor/prompt-builder.ts +80 -14
  233. package/src/activities/execute-cursor/workspace-setup.ts +257 -42
  234. package/src/activities/execute-deep-agent/__test-utils__/gateway-substrate.ts +180 -0
  235. package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +134 -0
  236. package/src/activities/execute-deep-agent/__tests__/approval-file-change.test.ts +84 -0
  237. package/src/activities/execute-deep-agent/__tests__/attachment-injector.test.ts +11 -24
  238. package/src/activities/execute-deep-agent/__tests__/cas-capture-backend.test.ts +64 -0
  239. package/src/activities/execute-deep-agent/__tests__/cas-capture-observer.test.ts +163 -0
  240. package/src/activities/execute-deep-agent/__tests__/hitl-integration.test.ts +8 -5
  241. package/src/activities/execute-deep-agent/__tests__/hitl-resume-approve-all.test.ts +342 -0
  242. package/src/activities/execute-deep-agent/__tests__/hitl-resume-history.test.ts +284 -0
  243. package/src/activities/execute-deep-agent/__tests__/hitl.test.ts +14 -36
  244. package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +31 -13
  245. package/src/activities/execute-deep-agent/__tests__/sequential-gate-resume.test.ts +349 -0
  246. package/src/activities/execute-deep-agent/__tests__/stamp-flowed-rows.test.ts +119 -0
  247. package/src/activities/execute-deep-agent/__tests__/status-builder.test.ts +91 -10
  248. package/src/activities/execute-deep-agent/__tests__/streaming-v3.test.ts +9 -9
  249. package/src/activities/execute-deep-agent/__tests__/subagent-approval-propagation.test.ts +160 -0
  250. package/src/activities/execute-deep-agent/__tests__/subagent-gitignored-capture.test.ts +213 -0
  251. package/src/activities/execute-deep-agent/__tests__/subagent-transformer.test.ts +3 -6
  252. package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +84 -1
  253. package/src/activities/execute-deep-agent/__tests__/v3-status-builder.test.ts +4 -1
  254. package/src/activities/execute-deep-agent/approval-file-change.ts +80 -0
  255. package/src/activities/execute-deep-agent/attachment-injector.ts +20 -11
  256. package/src/activities/execute-deep-agent/cas-capture-backend.ts +66 -0
  257. package/src/activities/execute-deep-agent/cas-capture-observer.ts +125 -0
  258. package/src/activities/execute-deep-agent/hitl.ts +23 -7
  259. package/src/activities/execute-deep-agent/index.ts +463 -40
  260. package/src/activities/execute-deep-agent/inline-publisher.ts +27 -4
  261. package/src/activities/execute-deep-agent/setup.ts +223 -125
  262. package/src/activities/execute-deep-agent/stamp-flowed-rows.ts +64 -0
  263. package/src/activities/execute-deep-agent/status-builder-shared.ts +62 -23
  264. package/src/activities/execute-deep-agent/status-builder.ts +63 -8
  265. package/src/activities/execute-deep-agent/streaming-side-effects.ts +2 -16
  266. package/src/activities/execute-deep-agent/streaming.ts +3 -13
  267. package/src/activities/execute-deep-agent/subagent-transformer.ts +53 -13
  268. package/src/activities/execute-deep-agent/subagent-wiring.ts +50 -3
  269. package/src/activities/execute-deep-agent/v3-status-builder.ts +36 -2
  270. package/src/claimcheck/payload-codec.ts +8 -8
  271. package/src/client/stigmer-client.ts +9 -1
  272. package/src/middleware/__tests__/approval-gate.test.ts +488 -4
  273. package/src/middleware/approval-gate.ts +247 -38
  274. package/src/middleware/types.ts +5 -5
  275. package/src/shared/__tests__/activity-input.test.ts +78 -0
  276. package/src/shared/__tests__/approval-canonicalize.test.ts +106 -0
  277. package/src/shared/__tests__/approval-fingerprint.test.ts +115 -0
  278. package/src/shared/__tests__/approval-policy.test.ts +274 -40
  279. package/src/shared/__tests__/args-preview.test.ts +78 -0
  280. package/src/shared/__tests__/artifact-storage-extended.test.ts +62 -10
  281. package/src/shared/__tests__/artifact-storage.test.ts +123 -11
  282. package/src/shared/__tests__/file-change.test.ts +85 -0
  283. package/src/shared/__tests__/file-tools.test.ts +90 -0
  284. package/src/shared/__tests__/fingerprint-secret.test.ts +51 -0
  285. package/src/shared/__tests__/lease-scope-corpus.test.ts +56 -0
  286. package/src/shared/__tests__/model-client.test.ts +162 -0
  287. package/src/shared/__tests__/plan-artifact.test.ts +11 -26
  288. package/src/shared/__tests__/policy-source-corpus.test.ts +58 -0
  289. package/src/shared/__tests__/status-offload.test.ts +573 -16
  290. package/src/shared/__tests__/status.test.ts +4 -5
  291. package/src/shared/__tests__/tool-kind.test.ts +24 -1
  292. package/src/shared/__tests__/tool-row.test.ts +221 -0
  293. package/src/shared/activity-input.ts +57 -0
  294. package/src/shared/approval-canonicalize.ts +159 -0
  295. package/src/shared/approval-fingerprint.ts +148 -0
  296. package/src/shared/approval-policy.ts +303 -27
  297. package/src/shared/args-preview.ts +98 -0
  298. package/src/shared/artifact-storage.ts +62 -11
  299. package/src/shared/checkpointer/__tests__/http-saver.test.ts +1 -2
  300. package/src/shared/file-change.ts +64 -0
  301. package/src/shared/file-tools.ts +169 -0
  302. package/src/shared/filereview/__tests__/capture.test.ts +856 -0
  303. package/src/shared/filereview/__tests__/cas-substrate.test.ts +404 -0
  304. package/src/shared/filereview/__tests__/digest.test.ts +100 -0
  305. package/src/shared/filereview/__tests__/events.test.ts +245 -0
  306. package/src/shared/filereview/__tests__/git-substrate.test.ts +362 -0
  307. package/src/shared/filereview/__tests__/proxy-reconcile.test.ts +286 -0
  308. package/src/shared/filereview/__tests__/secret-paths.test.ts +121 -0
  309. package/src/shared/filereview/capture.ts +727 -0
  310. package/src/shared/filereview/cas-substrate.ts +401 -0
  311. package/src/shared/filereview/digest.ts +83 -0
  312. package/src/shared/filereview/events.ts +449 -0
  313. package/src/shared/filereview/git-substrate.ts +555 -0
  314. package/src/shared/filereview/index.ts +60 -0
  315. package/src/shared/filereview/secret-paths.ts +121 -0
  316. package/src/shared/fingerprint-secret.ts +53 -0
  317. package/src/shared/model-client.ts +122 -0
  318. package/src/shared/plan-artifact.ts +0 -2
  319. package/src/shared/status-offload.ts +433 -77
  320. package/src/shared/status.ts +13 -0
  321. package/src/shared/tool-kind.ts +33 -0
  322. package/src/shared/tool-row.ts +135 -0
  323. package/src/shared/workspace/platform-dir.ts +41 -2
  324. package/src/workflow-engine/__tests__/golden-execution.test.ts +35 -18
  325. package/src/workflow-engine/__tests__/tasks/try.test.ts +1 -1
  326. package/src/workflows/__tests__/connect-mcp-server.test.ts +304 -29
  327. package/src/workflows/call-agent-orchestrator.ts +53 -6
  328. package/src/workflows/connect-mcp-server.ts +179 -24
  329. package/src/workflows/types.ts +8 -0
@@ -3,8 +3,10 @@
3
3
  *
4
4
  * Tool outputs (an MCP screenshot's base64 image, a giant accessibility-tree
5
5
  * dump, a multi-MB shell log, a huge file write) are stored inline in
6
- * `ToolCall.result`/`args_preview`, which live in `status.messages` and are
7
- * re-serialized whole on every `persistStatus` -> `updateStatus` gRPC call.
6
+ * `ToolCall.result`/`args_preview`, which live in `status.messages` AND in
7
+ * each `status.sub_agent_executions[].messages` (a delegated tool call's
8
+ * result is just as unbounded), and are re-serialized whole on every
9
+ * `persistStatus` -> `updateStatus` gRPC call.
8
10
  * Left unchecked, a single large result pushes the message past the server's
9
11
  * 4 MiB gRPC receive cap; the call fails with `resource_exhausted`, progress
10
12
  * stops persisting, and the live UI freezes mid-execution.
@@ -20,18 +22,30 @@
20
22
  * Idempotent and content-hash-deduped so the throttled, repeated persists
21
23
  * (and result re-inflation by mergeToolCallEvent) upload each blob once.
22
24
  *
23
- * 2. enforceStatusSizeLimit — an aggregate, type-agnostic backstop that runs
25
+ * 2. offloadCandidateChangesToFit — an aggregate, storage-backed step for the
26
+ * file-review ledger: if the status still exceeds the soft cap after (1),
27
+ * it offloads the largest still-inline captured before/after bodies to
28
+ * retrievable refs (biggest-first) until it fits, so a captured file stays
29
+ * REVIEWABLE (the UI lazily fetches the ref) instead of being dropped. The
30
+ * persisted body is a display projection — reconcile sources bytes from the
31
+ * git refs / CAS manifest, never this body — so this is correctness-neutral.
32
+ *
33
+ * 3. enforceStatusSizeLimit — an aggregate, type-agnostic backstop that runs
24
34
  * even when no artifact storage is available: if the encoded status still
25
35
  * exceeds a soft cap (comfortably under 4 MiB), it elides the largest
26
- * remaining inline fields in place until the payload fits.
36
+ * remaining inline fields in place until the payload fits. For file-review
37
+ * bodies this is the LAST resort (no storage, or (2) could not free enough):
38
+ * the body is dropped and the file marked SIZE_ELIDED / incomplete.
27
39
  *
28
- * Both operate ONLY on what is persisted/streamed; the agent's working context
40
+ * All operate ONLY on what is persisted/streamed; the agent's working context
29
41
  * is managed by the harness/SDK separately, so reasoning is unaffected.
30
42
  */
31
43
  import { createHash } from "node:crypto";
32
44
  import { create, toBinary } from "@bufbuild/protobuf";
33
45
  import { AgentExecutionStatusSchema, } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
34
46
  import { ToolCallOutputRefSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
47
+ import { FileReviewBlockReason } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
48
+ import { deriveDiffCompleteness } from "./filereview/events.js";
35
49
  /**
36
50
  * A single tool output (result or args_preview) larger than this many bytes is
37
51
  * offloaded to artifact storage instead of inlined into the persisted status.
@@ -39,6 +53,13 @@ import { ToolCallOutputRefSchema } from "@stigmer/protos/ai/stigmer/agentic/agen
39
53
  * even a handful of large-but-sub-threshold results cannot aggregate past it.
40
54
  */
41
55
  export const INLINE_TOOL_OUTPUT_MAX_BYTES = 256 * 1024;
56
+ /**
57
+ * A single FileChange before/after body larger than this is offloaded to
58
+ * artifact storage. Smaller than the 256 KiB tool-output cap because a file
59
+ * change can carry two bodies (before + after) per change and several changes
60
+ * per tool call, so the aggregate would otherwise climb quickly.
61
+ */
62
+ export const INLINE_FILE_CONTENT_MAX_BYTES = 128 * 1024;
42
63
  /** Head of an offloaded text result kept inline for an at-a-glance preview. */
43
64
  export const TEXT_PREVIEW_HEAD_CHARS = 4_000;
44
65
  /**
@@ -51,8 +72,14 @@ export const STATUS_PAYLOAD_SOFT_LIMIT_BYTES = 3 * 1024 * 1024;
51
72
  * large, to maximize the chance the retry succeeds.
52
73
  */
53
74
  export const STATUS_PAYLOAD_HARD_LIMIT_BYTES = 2 * 1024 * 1024;
54
- /** Marker left in place of an aggregate-elided inline field. */
55
- const ELISION_MARKER = "[output elided to keep status under the size limit]";
75
+ /**
76
+ * Marker left in place of an aggregate-elided inline field. Exported so the
77
+ * resume-time exact-apply resolver can recognize (and refuse to write) an elided
78
+ * body rather than corrupting a file with the marker text — the lossy elision is
79
+ * the one case where the exact approved bytes are unrecoverable and exact-apply
80
+ * must fall back. The two sides cannot drift because they share this constant.
81
+ */
82
+ export const ELISION_MARKER = "[output elided to keep status under the size limit]";
56
83
  /** Below this size an inline field is not worth eliding (the marker is ~50B). */
57
84
  const ELISION_MIN_BYTES = 1_024;
58
85
  function byteLen(s) {
@@ -71,6 +98,28 @@ function formatBytes(n) {
71
98
  return `${(n / 1024).toFixed(1)} KB`;
72
99
  return `${n} B`;
73
100
  }
101
+ /**
102
+ * Every message list carried on the status: the parent transcript plus each
103
+ * sub-agent's nested transcript. Sub-agent tool calls hold real results (a
104
+ * delegated read/grep/screenshot can be as large as a top-level one), so every
105
+ * size-bounding pass in this module walks THIS set — a location covered by
106
+ * offload but not elision (or vice versa) would be a hole in the persist
107
+ * boundary's bounded-payload guarantee.
108
+ */
109
+ function allMessageLists(status) {
110
+ return [status.messages, ...status.subAgentExecutions.map((sa) => sa.messages)];
111
+ }
112
+ /** Every tool call in the status, across the parent and all sub-agents. */
113
+ function allToolCalls(status) {
114
+ const out = [];
115
+ for (const messages of allMessageLists(status)) {
116
+ for (const msg of messages) {
117
+ for (const tc of msg.toolCalls)
118
+ out.push(tc);
119
+ }
120
+ }
121
+ return out;
122
+ }
74
123
  function extFromMime(mimeType) {
75
124
  switch (mimeType) {
76
125
  case "image/png": return "png";
@@ -81,66 +130,92 @@ function extFromMime(mimeType) {
81
130
  default: return "bin";
82
131
  }
83
132
  }
133
+ /** Match an exact `data:image/...;base64,...` URL (the whole string). */
84
134
  function matchDataUrl(s) {
85
135
  const m = s.match(/^data:(image\/[a-zA-Z0-9.+-]+);base64,([\s\S]+)$/);
86
136
  if (!m)
87
137
  return null;
88
138
  return { mimeType: m[1], base64: m[2].replace(/\s+/g, "") };
89
139
  }
90
- function contentBlocks(parsed) {
91
- if (Array.isArray(parsed))
92
- return parsed;
93
- if (parsed && typeof parsed === "object") {
94
- const obj = parsed;
95
- if (Array.isArray(obj.content))
96
- return obj.content;
97
- // Defensive: a serialized LangChain ToolMessage envelope nests its blocks
98
- // under kwargs.content. The deep-agent extractor already normalizes image
99
- // results to a top-level array (status-builder-shared.ts), so this branch is
100
- // insurance against future shape drift — not the primary path.
101
- const kwargs = obj.kwargs;
102
- if (kwargs && typeof kwargs === "object" && Array.isArray(kwargs.content)) {
103
- return kwargs.content;
104
- }
105
- }
106
- return [];
140
+ /**
141
+ * Find a `data:image/...;base64,...` URL anywhere in a string — whether it IS
142
+ * the whole result or is embedded in surrounding text/JSON. A data URL is an
143
+ * unambiguous image signal, so scanning is safe (no false positives on ordinary
144
+ * text). The base64 run is bounded by the first non-base64 character (e.g. a
145
+ * closing JSON quote), so an embedded URL is extracted cleanly.
146
+ */
147
+ function findDataUrlInString(s) {
148
+ const m = s.match(/data:(image\/[a-zA-Z0-9.+-]+);base64,([A-Za-z0-9+/=\s]+)/);
149
+ if (!m)
150
+ return null;
151
+ return { mimeType: m[1], base64: m[2].replace(/\s+/g, "") };
107
152
  }
108
153
  /**
109
- * Best-effort extraction of an inline base64 image from a tool result string.
110
- * Handles a raw data URL, MCP image content blocks ({type:"image", data,
111
- * mimeType}) and OpenAI-style image_url blocks. Returns null for non-image or
112
- * unparseable results so the caller falls back to text offload.
154
+ * Build an ImagePayload from a block's `data` + optional mime hint. Accepts the
155
+ * shapes the Cursor SDK actually delivers for an image block's `data`:
156
+ * - Node Buffer-JSON ({ type:"Buffer", data:number[] }) the runtime shape
157
+ * confirmed from a real cursor-harness get_app_state result. (The SDK's .d.ts
158
+ * types `data` as a string, but at runtime image bytes serialize as
159
+ * Buffer-JSON, so both must be handled.)
160
+ * - a `data:` URL string, or
161
+ * - a bare base64 string.
162
+ * Anything else (a file path, a number) yields null, so only an explicit image
163
+ * signal ever matches. The mime hint defaults to image/png when absent — Cursor
164
+ * MCP image blocks frequently omit mimeType.
113
165
  */
114
- export function detectImagePayload(result) {
115
- const direct = matchDataUrl(result.trim());
116
- if (direct)
117
- return direct;
118
- let parsed;
119
- try {
120
- parsed = JSON.parse(result);
166
+ function imageFromData(data, mime) {
167
+ const mimeType = typeof mime === "string" && mime.length > 0 ? mime : "image/png";
168
+ if (data && typeof data === "object") {
169
+ const d = data;
170
+ if (d.type === "Buffer" && Array.isArray(d.data)) {
171
+ try {
172
+ const base64 = Buffer.from(d.data).toString("base64");
173
+ return base64.length > 0 ? { mimeType, base64 } : null;
174
+ }
175
+ catch {
176
+ return null;
177
+ }
178
+ }
179
+ return null;
121
180
  }
122
- catch {
181
+ if (typeof data !== "string" || data.length === 0)
123
182
  return null;
183
+ const asUrl = matchDataUrl(data);
184
+ if (asUrl)
185
+ return asUrl;
186
+ return { mimeType, base64: data.replace(/\s+/g, "") };
187
+ }
188
+ /**
189
+ * Extract an image from a single object IF it is a recognized image block.
190
+ * Recognized shapes, all of which carry an explicit image marker (so an
191
+ * arbitrary object never matches):
192
+ * - Cursor SDK MCP block: { image: { data: <base64|dataUrl>, mimeType? } }
193
+ * - Anthropic/MCP-style block: { type: "image", data: <base64>, mimeType? }
194
+ * - OpenAI-style block: { type: "image_url", image_url: { url: <dataUrl> } }
195
+ * (also tolerates { type: "image", image: <base64> })
196
+ *
197
+ * Returns null when no image marker is present, leaving the recursive walk to
198
+ * keep searching siblings/children.
199
+ */
200
+ function imageFromBlock(obj) {
201
+ // Cursor SDK shape: the image rides under a nested `image` object. This is the
202
+ // exact shape @cursor/sdk uses for MCP image content (see conversation-types),
203
+ // which canonicalizeImageResult normalizes — but only when the result reaches
204
+ // it as an object. A result delivered already-serialized (a string) bypasses
205
+ // that, so detection must recognize this shape directly.
206
+ if (obj.image && typeof obj.image === "object") {
207
+ const img = obj.image;
208
+ const payload = imageFromData(img.data, img.mimeType ?? img.mime_type);
209
+ if (payload)
210
+ return payload;
124
211
  }
125
- for (const block of contentBlocks(parsed)) {
126
- if (!block || typeof block !== "object")
127
- continue;
128
- const obj = block;
129
- const type = typeof obj.type === "string" ? obj.type : "";
130
- if (type !== "image" && type !== "image_url")
131
- continue;
132
- const raw = typeof obj.data === "string" ? obj.data :
133
- typeof obj.image === "string" ? obj.image :
134
- undefined;
135
- if (raw) {
136
- const asUrl = matchDataUrl(raw);
137
- if (asUrl)
138
- return asUrl;
139
- const mimeType = typeof obj.mimeType === "string" ? obj.mimeType :
140
- typeof obj.mime_type === "string" ? obj.mime_type :
141
- "image/png";
142
- return { mimeType, base64: raw.replace(/\s+/g, "") };
143
- }
212
+ const type = typeof obj.type === "string" ? obj.type : "";
213
+ if (type === "image" || type === "image_url") {
214
+ const inline = imageFromData(typeof obj.data === "string" ? obj.data
215
+ : typeof obj.image === "string" ? obj.image
216
+ : undefined, obj.mimeType ?? obj.mime_type);
217
+ if (inline)
218
+ return inline;
144
219
  const imageUrl = obj.image_url;
145
220
  if (imageUrl && typeof imageUrl === "object") {
146
221
  const url = imageUrl.url;
@@ -153,6 +228,69 @@ export function detectImagePayload(result) {
153
228
  }
154
229
  return null;
155
230
  }
231
+ /**
232
+ * Walk a parsed JSON value depth-first, returning the first recognized image
233
+ * block. Recursing (rather than only checking the top level or a `content`
234
+ * array) is what makes detection robust to HOW a harness wraps the image: a
235
+ * multimodal MCP result may arrive as a top-level array, under `value.content`,
236
+ * under `kwargs.content`, or nested deeper still. Because imageFromBlock
237
+ * requires an explicit image marker, the walk never misclassifies ordinary
238
+ * nested data as an image.
239
+ */
240
+ function findImageInValue(value) {
241
+ if (Array.isArray(value)) {
242
+ for (const item of value) {
243
+ const found = findImageInValue(item);
244
+ if (found)
245
+ return found;
246
+ }
247
+ return null;
248
+ }
249
+ if (value && typeof value === "object") {
250
+ const obj = value;
251
+ const direct = imageFromBlock(obj);
252
+ if (direct)
253
+ return direct;
254
+ for (const child of Object.values(obj)) {
255
+ const found = findImageInValue(child);
256
+ if (found)
257
+ return found;
258
+ }
259
+ }
260
+ return null;
261
+ }
262
+ /**
263
+ * Best-effort extraction of an inline image from a tool result string.
264
+ *
265
+ * An MCP tool that returns an image (e.g. a computer-use screenshot) must be
266
+ * lifted into a renderable `ToolCallOutputRef`; otherwise it persists as text
267
+ * and the UI shows raw JSON / "view full output" instead of the picture. The
268
+ * image can arrive in many wrappers depending on the harness and whether the
269
+ * result was pre-serialized, so detection looks for an UNAMBIGUOUS image signal
270
+ * rather than a fixed envelope position:
271
+ *
272
+ * 1. a `data:image/*;base64,...` URL anywhere in the string, then
273
+ * 2. a recognized image block at any depth of a JSON result
274
+ * (see {@link imageFromBlock}).
275
+ *
276
+ * Returns null for non-image or unparseable results so the caller falls back to
277
+ * text offload. It deliberately does NOT treat a bare base64 string with no
278
+ * image marker as an image — that would misclassify legitimate large text
279
+ * (logs, base64-encoded files) as pictures.
280
+ */
281
+ export function detectImagePayload(result) {
282
+ const embeddedUrl = findDataUrlInString(result);
283
+ if (embeddedUrl)
284
+ return embeddedUrl;
285
+ let parsed;
286
+ try {
287
+ parsed = JSON.parse(result);
288
+ }
289
+ catch {
290
+ return null;
291
+ }
292
+ return findImageInValue(parsed);
293
+ }
156
294
  function collapsedResultFor(ref) {
157
295
  if (ref.isImage) {
158
296
  return `[image output — ${formatBytes(Number(ref.sizeBytes))}, view inline]`;
@@ -181,10 +319,8 @@ async function maybeOffloadToolCall(tc, ctx, maxBytes) {
181
319
  const bytes = Buffer.from(image.base64, "base64");
182
320
  const key = `artifacts/${ctx.executionId}/toolcalls/${tc.id}.${extFromMime(image.mimeType)}`;
183
321
  await ctx.artifactStorage.upload(key, bytes, image.mimeType);
184
- const downloadUrl = await ctx.artifactStorage.getDownloadUrl(key);
185
322
  tc.outputRef = create(ToolCallOutputRefSchema, {
186
323
  storageKey: key,
187
- downloadUrl,
188
324
  sizeBytes: BigInt(bytes.length),
189
325
  contentHash: hash,
190
326
  mimeType: image.mimeType,
@@ -201,10 +337,8 @@ async function maybeOffloadToolCall(tc, ctx, maxBytes) {
201
337
  const content = Buffer.from(result, "utf8");
202
338
  const key = `artifacts/${ctx.executionId}/toolcalls/${tc.id}.txt`;
203
339
  await ctx.artifactStorage.upload(key, content, "text/plain");
204
- const downloadUrl = await ctx.artifactStorage.getDownloadUrl(key);
205
340
  tc.outputRef = create(ToolCallOutputRefSchema, {
206
341
  storageKey: key,
207
- downloadUrl,
208
342
  sizeBytes: BigInt(content.length),
209
343
  contentHash: hash,
210
344
  mimeType: "text/plain",
@@ -213,33 +347,179 @@ async function maybeOffloadToolCall(tc, ctx, maxBytes) {
213
347
  });
214
348
  tc.result = collapsedResultFor(tc.outputRef);
215
349
  }
350
+ /**
351
+ * Spill one side (before/after) of a file change to artifact storage when its
352
+ * inline body exceeds the cap, replacing the inline body with a ref carrying a
353
+ * head preview. A side that is absent, already a ref (offloaded on a prior
354
+ * persist), or under the cap is left untouched — the `case === "ref"` check
355
+ * makes this idempotent across the throttled, repeated persists.
356
+ */
357
+ async function maybeOffloadFileContent(content, key, ctx, maxBytes) {
358
+ if (!content || content.body.case !== "inline")
359
+ return;
360
+ const text = content.body.value;
361
+ if (byteLen(text) <= maxBytes)
362
+ return;
363
+ const bytes = Buffer.from(text, "utf8");
364
+ await ctx.artifactStorage.upload(key, bytes, "text/plain");
365
+ content.body = {
366
+ case: "ref",
367
+ value: create(ToolCallOutputRefSchema, {
368
+ storageKey: key,
369
+ sizeBytes: BigInt(bytes.length),
370
+ contentHash: sha256(text),
371
+ mimeType: "text/plain",
372
+ isImage: false,
373
+ truncatedPreview: headChars(text, TEXT_PREVIEW_HEAD_CHARS),
374
+ }),
375
+ };
376
+ }
377
+ /**
378
+ * Every captured file change carried on a CANDIDATE_CAPTURED event in the
379
+ * file_review ledger. The before/after bodies live HERE (not on tool calls)
380
+ * under the apply-then-review model, so the persist-boundary size guards must
381
+ * cover this location too — otherwise a large captured file silently pushes the
382
+ * status past the gRPC cap (the freeze this module exists to prevent).
383
+ */
384
+ function candidateChanges(status) {
385
+ const out = [];
386
+ for (const ev of status.fileReviewEventStream?.events ?? []) {
387
+ if (ev.payload.case === "candidateCaptured") {
388
+ out.push(...ev.payload.value.changes);
389
+ }
390
+ }
391
+ return out;
392
+ }
393
+ /** Offload oversized before/after bodies of every captured file-review change. */
394
+ async function maybeOffloadCandidateChanges(status, ctx, maxBytes) {
395
+ const changes = candidateChanges(status);
396
+ for (const change of changes) {
397
+ const base = `artifacts/${ctx.executionId}/filereview/${change.id}`;
398
+ await maybeOffloadFileContent(change.before, `${base}.before.txt`, ctx, maxBytes);
399
+ await maybeOffloadFileContent(change.after, `${base}.after.txt`, ctx, maxBytes);
400
+ }
401
+ }
216
402
  /**
217
403
  * Offload every oversized tool result in the status to artifact storage,
218
404
  * replacing the inline value with a short head + ToolCallOutputRef. Per-tool
219
405
  * failures fall back to an inline truncation (a bounded result beats a failed
220
406
  * persist) and never throw, so a storage hiccup cannot fail the execution.
407
+ *
408
+ * File-review before/after bodies (on the CANDIDATE_CAPTURED ledger events) are
409
+ * offloaded in the same pass — a tool can produce a small result yet a large
410
+ * captured diff. A file-review offload failure is non-fatal — the body stays
411
+ * inline and the aggregate backstop (enforceStatusSizeLimit) drops it if needed.
221
412
  */
222
413
  export async function offloadOversizedToolOutputs(status, ctx) {
223
414
  const maxBytes = ctx.maxInlineBytes ?? INLINE_TOOL_OUTPUT_MAX_BYTES;
224
- for (const msg of status.messages) {
225
- for (const tc of msg.toolCalls) {
226
- try {
227
- await maybeOffloadToolCall(tc, ctx, maxBytes);
228
- }
229
- catch (err) {
230
- const original = tc.result ?? "";
231
- tc.result =
232
- headChars(original, TEXT_PREVIEW_HEAD_CHARS) +
233
- `\n\n[output truncated — offload failed: ${err instanceof Error ? err.message : String(err)}]`;
234
- console.warn(`[status-offload] execution=${ctx.executionId} tool=${tc.name} ` +
235
- `offload failed (non-fatal); truncated inline`);
236
- }
415
+ const maxFileBytes = ctx.maxInlineFileBytes ?? INLINE_FILE_CONTENT_MAX_BYTES;
416
+ for (const tc of allToolCalls(status)) {
417
+ try {
418
+ await maybeOffloadToolCall(tc, ctx, maxBytes);
419
+ }
420
+ catch (err) {
421
+ const original = tc.result ?? "";
422
+ tc.result =
423
+ headChars(original, TEXT_PREVIEW_HEAD_CHARS) +
424
+ `\n\n[output truncated — offload failed: ${err instanceof Error ? err.message : String(err)}]`;
425
+ console.warn(`[status-offload] execution=${ctx.executionId} tool=${tc.name} ` +
426
+ `offload failed (non-fatal); truncated inline`);
237
427
  }
238
428
  }
429
+ // File-review ledger: offload oversized captured before/after bodies the same
430
+ // way (the proto's contract is "offloaded before the candidate event is
431
+ // persisted"). A failure is non-fatal — the body stays inline and the
432
+ // mark-incomplete backstop handles it without corrupting the ledger.
433
+ try {
434
+ await maybeOffloadCandidateChanges(status, ctx, maxFileBytes);
435
+ }
436
+ catch {
437
+ console.warn(`[status-offload] execution=${ctx.executionId} ` +
438
+ `file-review change offload failed (non-fatal); left inline for the size backstop`);
439
+ }
440
+ }
441
+ /**
442
+ * Aggregate-budget offload of file-review candidate bodies (async, storage-backed).
443
+ *
444
+ * The per-item pass ({@link offloadOversizedToolOutputs}) only offloads a body
445
+ * over {@link INLINE_FILE_CONTENT_MAX_BYTES}; many mid-sized captured files (each
446
+ * under that per-file cap) can still sum the whole status past the soft limit.
447
+ * Rather than let the storage-less backstop ({@link enforceStatusSizeLimit}) DROP
448
+ * those bodies — which sets `diff_complete=false` and blocks approval, turning a
449
+ * reviewable change discard-only — this step offloads the largest still-inline
450
+ * captured bodies to retrievable refs (biggest-first) until the status fits. The
451
+ * review UI then lazily fetches each ref via getArtifactContent exactly as it
452
+ * already does for a >128 KiB file, and the change stays reviewable
453
+ * (`diff_complete` is untouched, so the set rollup is unchanged).
454
+ *
455
+ * Correctness: the persisted before/after body is a DISPLAY projection —
456
+ * reconcile sources the approved bytes from the pinned git refs / CAS manifest
457
+ * and verifies them against the enforcement digests (`before_sha256`/
458
+ * `after_sha256`), never this body (see {@link ../filereview/capture.js}). So
459
+ * converting a body to a ref (or, in the backstop, dropping it) cannot change
460
+ * what is applied on approval.
461
+ *
462
+ * Non-fatal per side: a storage failure leaves that body inline for the backstop
463
+ * to drop. Returns true if any body was offloaded. Called only for a status that
464
+ * actually carries file-review events (the caller guards on that), and a no-op
465
+ * (single encode) when the status already fits.
466
+ */
467
+ export async function offloadCandidateChangesToFit(status, ctx, softLimitBytes = STATUS_PAYLOAD_SOFT_LIMIT_BYTES) {
468
+ if (encodedSize(status) <= softLimitBytes)
469
+ return false;
470
+ const sides = [];
471
+ for (const change of candidateChanges(status)) {
472
+ const base = `artifacts/${ctx.executionId}/filereview/${change.id}`;
473
+ if (change.before?.body.case === "inline" && byteLen(change.before.body.value) > ELISION_MIN_BYTES) {
474
+ sides.push({ content: change.before, key: `${base}.before.txt`, bytes: byteLen(change.before.body.value) });
475
+ }
476
+ if (change.after?.body.case === "inline" && byteLen(change.after.body.value) > ELISION_MIN_BYTES) {
477
+ sides.push({ content: change.after, key: `${base}.after.txt`, bytes: byteLen(change.after.body.value) });
478
+ }
479
+ }
480
+ // Largest first: shed the most bytes per upload and offload the fewest bodies.
481
+ sides.sort((a, b) => b.bytes - a.bytes);
482
+ let offloadedAny = false;
483
+ for (const side of sides) {
484
+ if (encodedSize(status) <= softLimitBytes)
485
+ break;
486
+ try {
487
+ // Pre-filtered to inline & over the threshold, so this always offloads;
488
+ // the shared helper keeps the ref shape + the `case === "ref"` idempotency.
489
+ await maybeOffloadFileContent(side.content, side.key, ctx, ELISION_MIN_BYTES);
490
+ offloadedAny = true;
491
+ }
492
+ catch {
493
+ // Non-fatal: leave this body inline for enforceStatusSizeLimit to drop.
494
+ console.warn(`[status-offload] execution=${ctx.executionId} ` +
495
+ `aggregate file-review offload failed for ${side.key} (non-fatal); ` +
496
+ `left inline for the size backstop`);
497
+ }
498
+ }
499
+ return offloadedAny;
239
500
  }
240
501
  function encodedSize(status) {
241
502
  return toBinary(AgentExecutionStatusSchema, status).length;
242
503
  }
504
+ /**
505
+ * Drop a captured change's oversized inline before/after bodies (replacing them
506
+ * with nothing), returning true if either side was large enough to drop. Used by
507
+ * the backstop for file-review bodies, where overwriting with the elision marker
508
+ * would corrupt the authoritative content — dropping + marking incomplete is the
509
+ * safe alternative (bytes are re-sourced from refs/re-capture on reconcile).
510
+ */
511
+ function dropInlineBodiesIfLarge(change) {
512
+ let dropped = false;
513
+ if (change.before?.body.case === "inline" && byteLen(change.before.body.value) > ELISION_MIN_BYTES) {
514
+ change.before = undefined;
515
+ dropped = true;
516
+ }
517
+ if (change.after?.body.case === "inline" && byteLen(change.after.body.value) > ELISION_MIN_BYTES) {
518
+ change.after = undefined;
519
+ dropped = true;
520
+ }
521
+ return dropped;
522
+ }
243
523
  /**
244
524
  * Aggregate, type-agnostic backstop. If the encoded status exceeds
245
525
  * `softLimitBytes`, elide the largest inline tool fields (and, as a last
@@ -250,11 +530,7 @@ function encodedSize(status) {
250
530
  export function enforceStatusSizeLimit(status, softLimitBytes = STATUS_PAYLOAD_SOFT_LIMIT_BYTES) {
251
531
  if (encodedSize(status) <= softLimitBytes)
252
532
  return false;
253
- const toolCalls = [];
254
- for (const msg of status.messages) {
255
- for (const tc of msg.toolCalls)
256
- toolCalls.push(tc);
257
- }
533
+ const toolCalls = allToolCalls(status);
258
534
  // Largest inline footprint first so we shed the most bytes per elision.
259
535
  toolCalls.sort((a, b) => byteLen(b.result) + byteLen(b.argsPreview) -
260
536
  (byteLen(a.result) + byteLen(a.argsPreview)));
@@ -275,9 +551,53 @@ export function enforceStatusSizeLimit(status, softLimitBytes = STATUS_PAYLOAD_S
275
551
  elidedAny = true;
276
552
  }
277
553
  }
278
- // Last resort: oversized message content (e.g. a huge AI response).
554
+ // File-review ledger bodies the storage-less LAST resort. When storage is
555
+ // available, offloadCandidateChangesToFit has already turned oversized captured
556
+ // bodies into retrievable refs (kept reviewable); a body still inline here means
557
+ // there was no storage, or offloading everything still did not free enough.
558
+ // Unlike a tool output, we never overwrite the captured body with the elision
559
+ // marker — the review renders this body, so a marker would show corrupt content;
560
+ // instead we DROP it and mark the file incomplete (SIZE_ELIDED). Reconcile
561
+ // sources bytes from the git refs / CAS manifest (never this display body), and
562
+ // the review surface blocks approval of an incomplete diff. This trades
563
+ // reviewability for a bounded payload, never correctness.
564
+ if (encodedSize(status) > softLimitBytes) {
565
+ for (const ev of status.fileReviewEventStream?.events ?? []) {
566
+ if (encodedSize(status) <= softLimitBytes)
567
+ break;
568
+ if (ev.payload.case !== "candidateCaptured")
569
+ continue;
570
+ const candidate = ev.payload.value;
571
+ let markedAny = false;
572
+ for (const change of candidate.changes) {
573
+ if (encodedSize(status) <= softLimitBytes)
574
+ break;
575
+ if (dropInlineBodiesIfLarge(change)) {
576
+ change.diffComplete = false;
577
+ // Record the honest cause so the review UI distinguishes a size-elided
578
+ // diff from a secret-withheld one (doc 15). Don't overwrite a reason a
579
+ // more specific producer already set (e.g. SECRET_WITHHELD).
580
+ if (change.blockedReason === FileReviewBlockReason.UNSPECIFIED) {
581
+ change.blockedReason = FileReviewBlockReason.SIZE_ELIDED;
582
+ }
583
+ markedAny = true;
584
+ elidedAny = true;
585
+ }
586
+ }
587
+ if (markedAny) {
588
+ // Re-derive the rollup from the now-elided changes via the single shared
589
+ // rule. A dropped inline body is non-binary incomplete, so the set
590
+ // downgrades to PARTIAL_BLOCKED (a BINARY_SUMMARY_ONLY set that loses a
591
+ // text body is no longer binary-only); computing it here keeps the rule
592
+ // in one place instead of hardcoding the outcome.
593
+ candidate.diffCompleteness = deriveDiffCompleteness(candidate.changes);
594
+ }
595
+ }
596
+ }
597
+ // Last resort: oversized message content (e.g. a huge AI response),
598
+ // parent and sub-agent alike.
279
599
  if (encodedSize(status) > softLimitBytes) {
280
- const byContent = [...status.messages].sort((a, b) => byteLen(b.content) - byteLen(a.content));
600
+ const byContent = allMessageLists(status).flat().sort((a, b) => byteLen(b.content) - byteLen(a.content));
281
601
  for (const msg of byContent) {
282
602
  if (encodedSize(status) <= softLimitBytes)
283
603
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"status-offload.js","sourceRoot":"","sources":["../../src/shared/status-offload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status-offload.js","sourceRoot":"","sources":["../../src/shared/status-offload.ts"],"names":[],"mappings":"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"}