@stigmer/runner 3.15.1 → 3.15.2-dev.20260913223433

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 (518) hide show
  1. package/README.md +2 -4
  2. package/dist/.build-fingerprint +1 -1
  3. package/dist/__test-utils__/execution-record-fixture.d.ts +14 -0
  4. package/dist/__test-utils__/execution-record-fixture.js +4 -0
  5. package/dist/__test-utils__/execution-record-fixture.js.map +1 -1
  6. package/dist/__test-utils__/file-review-projection.d.ts +40 -0
  7. package/dist/__test-utils__/file-review-projection.js +136 -0
  8. package/dist/__test-utils__/file-review-projection.js.map +1 -0
  9. package/dist/__test-utils__/harness-contract/types.d.ts +23 -1
  10. package/dist/__test-utils__/harness-contract/types.js +15 -0
  11. package/dist/__test-utils__/harness-contract/types.js.map +1 -1
  12. package/dist/__test-utils__/hermetic-activity.d.ts +44 -12
  13. package/dist/__test-utils__/hermetic-activity.js +52 -14
  14. package/dist/__test-utils__/hermetic-activity.js.map +1 -1
  15. package/dist/__test-utils__/model-registry-fixture.d.ts +32 -7
  16. package/dist/__test-utils__/model-registry-fixture.js +31 -7
  17. package/dist/__test-utils__/model-registry-fixture.js.map +1 -1
  18. package/dist/__test-utils__/turn-input-fixture.d.ts +1 -1
  19. package/dist/__test-utils__/turn-input-fixture.js +1 -1
  20. package/dist/__test-utils__/turn-input-fixture.js.map +1 -1
  21. package/dist/activities/call-agent.js +2 -2
  22. package/dist/activities/call-agent.js.map +1 -1
  23. package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +45 -3
  24. package/dist/activities/execute-cursor/__test-utils__/contract-subject.js.map +1 -1
  25. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +0 -9
  26. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +2 -41
  27. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
  28. package/dist/activities/execute-cursor/adapter.d.ts +7 -5
  29. package/dist/activities/execute-cursor/adapter.js +7 -5
  30. package/dist/activities/execute-cursor/adapter.js.map +1 -1
  31. package/dist/activities/execute-cursor/approval-policy.d.ts +5 -2
  32. package/dist/activities/execute-cursor/approval-policy.js +5 -2
  33. package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
  34. package/dist/activities/execute-cursor/approval-state.d.ts +16 -8
  35. package/dist/activities/execute-cursor/approval-state.js +6 -3
  36. package/dist/activities/execute-cursor/approval-state.js.map +1 -1
  37. package/dist/activities/execute-cursor/cas-observations.d.ts +14 -2
  38. package/dist/activities/execute-cursor/cas-observations.js +19 -2
  39. package/dist/activities/execute-cursor/cas-observations.js.map +1 -1
  40. package/dist/activities/execute-cursor/cursor-capabilities.d.ts +8 -4
  41. package/dist/activities/execute-cursor/cursor-capabilities.js +21 -4
  42. package/dist/activities/execute-cursor/cursor-capabilities.js.map +1 -1
  43. package/dist/activities/execute-cursor/message-translator.d.ts +12 -20
  44. package/dist/activities/execute-cursor/message-translator.js +19 -32
  45. package/dist/activities/execute-cursor/message-translator.js.map +1 -1
  46. package/dist/activities/execute-cursor/prompt-builder.d.ts +48 -58
  47. package/dist/activities/execute-cursor/prompt-builder.js +76 -95
  48. package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
  49. package/dist/activities/execute-cursor/turn-boundary.d.ts +27 -55
  50. package/dist/activities/execute-cursor/turn-boundary.js +30 -90
  51. package/dist/activities/execute-cursor/turn-boundary.js.map +1 -1
  52. package/dist/activities/execute-cursor/turn-settle.d.ts +11 -7
  53. package/dist/activities/execute-cursor/turn-settle.js +37 -49
  54. package/dist/activities/execute-cursor/turn-settle.js.map +1 -1
  55. package/dist/activities/execute-cursor/turn-setup.d.ts +16 -24
  56. package/dist/activities/execute-cursor/turn-setup.js +29 -59
  57. package/dist/activities/execute-cursor/turn-setup.js.map +1 -1
  58. package/dist/activities/execute-cursor/turn-stream.d.ts +3 -8
  59. package/dist/activities/execute-cursor/turn-stream.js +9 -22
  60. package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
  61. package/dist/activities/execute-cursor/turn.js +5 -1
  62. package/dist/activities/execute-cursor/turn.js.map +1 -1
  63. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +93 -0
  64. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +348 -0
  65. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js.map +1 -0
  66. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +170 -0
  67. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +225 -0
  68. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js.map +1 -0
  69. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.d.ts +24 -0
  70. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js +41 -0
  71. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js.map +1 -0
  72. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +54 -0
  73. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +72 -0
  74. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js.map +1 -0
  75. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +187 -23
  76. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +238 -27
  77. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -1
  78. package/dist/activities/execute-deep-agent/adapter.d.ts +41 -0
  79. package/dist/activities/execute-deep-agent/adapter.js +78 -0
  80. package/dist/activities/execute-deep-agent/adapter.js.map +1 -0
  81. package/dist/activities/execute-deep-agent/cas-capture-observer.d.ts +8 -0
  82. package/dist/activities/execute-deep-agent/cas-capture-observer.js +9 -0
  83. package/dist/activities/execute-deep-agent/cas-capture-observer.js.map +1 -1
  84. package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +31 -0
  85. package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +40 -0
  86. package/dist/activities/execute-deep-agent/deep-agent-capabilities.js.map +1 -0
  87. package/dist/activities/execute-deep-agent/execution-state.d.ts +4 -11
  88. package/dist/activities/execute-deep-agent/execution-state.js +4 -12
  89. package/dist/activities/execute-deep-agent/execution-state.js.map +1 -1
  90. package/dist/activities/execute-deep-agent/hitl.d.ts +49 -47
  91. package/dist/activities/execute-deep-agent/hitl.js +77 -103
  92. package/dist/activities/execute-deep-agent/hitl.js.map +1 -1
  93. package/dist/activities/execute-deep-agent/prompt-builder.d.ts +51 -23
  94. package/dist/activities/execute-deep-agent/prompt-builder.js +115 -76
  95. package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
  96. package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +18 -32
  97. package/dist/activities/execute-deep-agent/status-builder-shared.js +10 -65
  98. package/dist/activities/execute-deep-agent/status-builder-shared.js.map +1 -1
  99. package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +10 -8
  100. package/dist/activities/execute-deep-agent/streaming-side-effects.js +12 -14
  101. package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
  102. package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +36 -13
  103. package/dist/activities/execute-deep-agent/subagent-tracker.js +76 -39
  104. package/dist/activities/execute-deep-agent/subagent-tracker.js.map +1 -1
  105. package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +25 -28
  106. package/dist/activities/execute-deep-agent/subagent-transformer.js +29 -82
  107. package/dist/activities/execute-deep-agent/subagent-transformer.js.map +1 -1
  108. package/dist/activities/execute-deep-agent/subagent-wiring.d.ts +3 -2
  109. package/dist/activities/execute-deep-agent/subagent-wiring.js +2 -2
  110. package/dist/activities/execute-deep-agent/subagent-wiring.js.map +1 -1
  111. package/dist/activities/execute-deep-agent/turn-settle.d.ts +42 -0
  112. package/dist/activities/execute-deep-agent/turn-settle.js +146 -0
  113. package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -0
  114. package/dist/activities/execute-deep-agent/turn-setup.d.ts +212 -0
  115. package/dist/activities/execute-deep-agent/turn-setup.js +430 -0
  116. package/dist/activities/execute-deep-agent/turn-setup.js.map +1 -0
  117. package/dist/activities/execute-deep-agent/turn-stream.d.ts +97 -0
  118. package/dist/activities/execute-deep-agent/turn-stream.js +242 -0
  119. package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -0
  120. package/dist/activities/execute-deep-agent/turn.d.ts +42 -0
  121. package/dist/activities/execute-deep-agent/turn.js +116 -0
  122. package/dist/activities/execute-deep-agent/turn.js.map +1 -0
  123. package/dist/activities/execute-deep-agent/v3-event-recorder.d.ts +6 -5
  124. package/dist/activities/execute-deep-agent/v3-event-recorder.js +6 -5
  125. package/dist/activities/execute-deep-agent/v3-event-recorder.js.map +1 -1
  126. package/dist/activities/execute-deep-agent/v3-events.d.ts +1 -1
  127. package/dist/activities/execute-deep-agent/v3-events.js +1 -1
  128. package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +60 -17
  129. package/dist/activities/execute-deep-agent/v3-status-builder.js +72 -57
  130. package/dist/activities/execute-deep-agent/v3-status-builder.js.map +1 -1
  131. package/dist/harness/approval-decisions.d.ts +61 -0
  132. package/dist/harness/approval-decisions.js +102 -0
  133. package/dist/harness/approval-decisions.js.map +1 -0
  134. package/dist/harness/capabilities.d.ts +16 -5
  135. package/dist/harness/capabilities.js +9 -0
  136. package/dist/harness/capabilities.js.map +1 -1
  137. package/dist/harness/capture.d.ts +144 -0
  138. package/dist/harness/capture.js +219 -0
  139. package/dist/harness/capture.js.map +1 -0
  140. package/dist/harness/persist-chokepoint.d.ts +19 -4
  141. package/dist/harness/persist-chokepoint.js +17 -4
  142. package/dist/harness/persist-chokepoint.js.map +1 -1
  143. package/dist/harness/run-turn.js +115 -29
  144. package/dist/harness/run-turn.js.map +1 -1
  145. package/dist/harness/terminal-table.d.ts +40 -11
  146. package/dist/harness/terminal-table.js +58 -19
  147. package/dist/harness/terminal-table.js.map +1 -1
  148. package/dist/harness/turn-context.d.ts +141 -76
  149. package/dist/harness/turn-context.js +194 -99
  150. package/dist/harness/turn-context.js.map +1 -1
  151. package/dist/harness/types.d.ts +65 -12
  152. package/dist/harness/types.js +8 -2
  153. package/dist/harness/types.js.map +1 -1
  154. package/dist/harness-adapters.d.ts +12 -8
  155. package/dist/harness-adapters.js +17 -9
  156. package/dist/harness-adapters.js.map +1 -1
  157. package/dist/middleware/approval-gate.d.ts +1 -1
  158. package/dist/middleware/approval-gate.js +1 -1
  159. package/dist/middleware/approval-gate.js.map +1 -1
  160. package/dist/middleware/cost-advisory.d.ts +39 -0
  161. package/dist/middleware/{cost-cap.js → cost-advisory.js} +37 -55
  162. package/dist/middleware/cost-advisory.js.map +1 -0
  163. package/dist/middleware/index.d.ts +23 -12
  164. package/dist/middleware/index.js +26 -18
  165. package/dist/middleware/index.js.map +1 -1
  166. package/dist/middleware/types.d.ts +3 -2
  167. package/dist/runner-manager.js +1 -5
  168. package/dist/runner-manager.js.map +1 -1
  169. package/dist/runner.js +1 -5
  170. package/dist/runner.js.map +1 -1
  171. package/dist/shared/attachment-resolver.d.ts +41 -18
  172. package/dist/shared/attachment-resolver.js +178 -46
  173. package/dist/shared/attachment-resolver.js.map +1 -1
  174. package/dist/shared/attachment-zip.d.ts +85 -0
  175. package/dist/shared/attachment-zip.js +185 -0
  176. package/dist/shared/attachment-zip.js.map +1 -0
  177. package/dist/shared/connect-backfill.js +5 -4
  178. package/dist/shared/connect-backfill.js.map +1 -1
  179. package/dist/shared/cost-guard.d.ts +3 -3
  180. package/dist/shared/cost-guard.js +3 -3
  181. package/dist/shared/execution-status-writer.d.ts +5 -5
  182. package/dist/shared/execution-status-writer.js +5 -5
  183. package/dist/shared/extract-structured-output.d.ts +8 -7
  184. package/dist/shared/extract-structured-output.js +8 -7
  185. package/dist/shared/extract-structured-output.js.map +1 -1
  186. package/dist/shared/filereview/cas-progress.d.ts +1 -18
  187. package/dist/shared/filereview/cas-progress.js +4 -0
  188. package/dist/shared/filereview/cas-progress.js.map +1 -1
  189. package/dist/shared/filereview/cas-touched.d.ts +56 -0
  190. package/dist/shared/filereview/cas-touched.js +63 -0
  191. package/dist/shared/filereview/cas-touched.js.map +1 -0
  192. package/dist/shared/filereview/index.d.ts +2 -1
  193. package/dist/shared/filereview/index.js +2 -1
  194. package/dist/shared/filereview/index.js.map +1 -1
  195. package/dist/shared/mcp-resolver.d.ts +4 -5
  196. package/dist/shared/mcp-resolver.js +4 -5
  197. package/dist/shared/mcp-resolver.js.map +1 -1
  198. package/dist/shared/persist-decision.d.ts +3 -4
  199. package/dist/shared/persist-decision.js +3 -4
  200. package/dist/shared/persist-decision.js.map +1 -1
  201. package/dist/shared/plan-mode-permissions.d.ts +2 -2
  202. package/dist/shared/plan-mode-permissions.js +2 -2
  203. package/dist/shared/plan-mode-prompt.d.ts +1 -1
  204. package/dist/shared/plan-mode-prompt.js +1 -1
  205. package/dist/shared/prompt-sections.d.ts +163 -0
  206. package/dist/shared/prompt-sections.js +164 -0
  207. package/dist/shared/prompt-sections.js.map +1 -0
  208. package/dist/shared/skill-resolver.d.ts +4 -2
  209. package/dist/shared/skill-resolver.js +4 -2
  210. package/dist/shared/skill-resolver.js.map +1 -1
  211. package/dist/shared/tool-rounds.d.ts +32 -0
  212. package/dist/shared/tool-rounds.js +43 -0
  213. package/dist/shared/tool-rounds.js.map +1 -1
  214. package/dist/shared/tool-row.d.ts +34 -0
  215. package/dist/shared/tool-row.js +52 -0
  216. package/dist/shared/tool-row.js.map +1 -1
  217. package/dist/shared/workspace/session-provision.d.ts +3 -3
  218. package/dist/shared/workspace/session-provision.js +3 -3
  219. package/dist/shared/workspace/stigmer-link.d.ts +3 -3
  220. package/dist/shared/workspace/stigmer-link.js +3 -3
  221. package/dist/shared/workspace/writeback-coordinator.d.ts +15 -22
  222. package/dist/shared/workspace/writeback-coordinator.js +16 -53
  223. package/dist/shared/workspace/writeback-coordinator.js.map +1 -1
  224. package/dist/tools/index.d.ts +1 -1
  225. package/dist/tools/index.js +1 -1
  226. package/package.json +4 -4
  227. package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +1 -0
  228. package/src/__test-utils__/execution-record-fixture.ts +18 -2
  229. package/src/__test-utils__/file-review-projection.ts +156 -0
  230. package/src/__test-utils__/git-workspace-fixture.ts +58 -0
  231. package/src/__test-utils__/harness-boot-order-child.ts +7 -2
  232. package/src/__test-utils__/harness-contract/contract.ts +33 -20
  233. package/src/__test-utils__/harness-contract/recording-sink.ts +11 -1
  234. package/src/__test-utils__/harness-contract/runtime-contract.ts +328 -10
  235. package/src/__test-utils__/harness-contract/scripted-adapter.ts +38 -6
  236. package/src/__test-utils__/harness-contract/types.ts +27 -3
  237. package/src/__test-utils__/hermetic-activity.ts +52 -14
  238. package/src/__test-utils__/model-registry-fixture.ts +32 -7
  239. package/src/__test-utils__/module-specifiers.ts +24 -0
  240. package/src/__test-utils__/turn-input-fixture.ts +2 -2
  241. package/src/__tests__/harness-boot-order.test.ts +9 -2
  242. package/src/activities/call-agent.ts +2 -2
  243. package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +47 -3
  244. package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +2 -48
  245. package/src/activities/execute-cursor/__tests__/approval-decisions-agree.test.ts +1 -1
  246. package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +6 -1
  247. package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +52 -27
  248. package/src/activities/execute-cursor/__tests__/cas-observations.test.ts +25 -0
  249. package/src/activities/execute-cursor/__tests__/goldens/prompt.enhanced.everything.prompt.md +166 -0
  250. package/src/activities/execute-cursor/__tests__/goldens/prompt.enhanced.plan-mode.prompt.md +186 -0
  251. package/src/activities/execute-cursor/__tests__/goldens/prompt.hitl.recovery.prompt.md +191 -0
  252. package/src/activities/execute-cursor/__tests__/goldens/prompt.hitl.reinvocation.prompt.md +13 -0
  253. package/src/activities/execute-cursor/__tests__/goldens/prompt.resumed.prefixed.prompt.md +32 -0
  254. package/src/activities/execute-cursor/__tests__/goldens/prompt.resumed.raw.prompt.md +1 -0
  255. package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +1 -2
  256. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-error-at-create.status.json +4 -0
  257. package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +24 -4
  258. package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +6 -5
  259. package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +9 -0
  260. package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +11 -8
  261. package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +229 -0
  262. package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +3 -3
  263. package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +2 -2
  264. package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +78 -234
  265. package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +1 -26
  266. package/src/activities/execute-cursor/adapter.ts +7 -5
  267. package/src/activities/execute-cursor/approval-policy.ts +5 -2
  268. package/src/activities/execute-cursor/approval-state.ts +16 -8
  269. package/src/activities/execute-cursor/cas-observations.ts +20 -2
  270. package/src/activities/execute-cursor/cursor-capabilities.ts +24 -5
  271. package/src/activities/execute-cursor/message-translator.ts +29 -41
  272. package/src/activities/execute-cursor/prompt-builder.ts +99 -157
  273. package/src/activities/execute-cursor/turn-boundary.ts +34 -140
  274. package/src/activities/execute-cursor/turn-settle.ts +37 -51
  275. package/src/activities/execute-cursor/turn-setup.ts +30 -70
  276. package/src/activities/execute-cursor/turn-stream.ts +8 -31
  277. package/src/activities/execute-cursor/turn.ts +5 -1
  278. package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +391 -0
  279. package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +313 -0
  280. package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +48 -0
  281. package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +85 -0
  282. package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +383 -36
  283. package/src/activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts +76 -0
  284. package/src/activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts +47 -0
  285. package/src/activities/execute-deep-agent/__tests__/adapter.test.ts +80 -0
  286. package/src/activities/execute-deep-agent/__tests__/cas-capture-backend.test.ts +1 -1
  287. package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +0 -2
  288. package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +0 -3
  289. package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.build-from-plan.prompt.md +172 -0
  290. package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.everything.prompt.md +167 -0
  291. package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.minimal.prompt.md +36 -0
  292. package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.plan-mode.prompt.md +178 -0
  293. package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.skills-below-threshold.prompt.md +158 -0
  294. package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +210 -0
  295. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +74 -0
  296. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +104 -0
  297. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +78 -0
  298. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +138 -0
  299. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +68 -0
  300. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +154 -0
  301. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +116 -0
  302. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +69 -0
  303. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +67 -0
  304. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/plain-turn.status.json +47 -0
  305. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +68 -0
  306. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +280 -0
  307. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +77 -0
  308. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/resolution-error.status.json +18 -0
  309. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +99 -0
  310. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +109 -0
  311. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +76 -0
  312. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.text-fallback.status.json +51 -0
  313. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.tier2.status.json +51 -0
  314. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.tool-strategy.status.json +56 -0
  315. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +90 -0
  316. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +70 -0
  317. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +71 -0
  318. package/src/activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts +144 -0
  319. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-approve-all-lease.test.ts +184 -0
  320. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +203 -0
  321. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +170 -0
  322. package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +175 -0
  323. package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +206 -0
  324. package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +142 -0
  325. package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +126 -0
  326. package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +139 -0
  327. package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +122 -0
  328. package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +236 -0
  329. package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +161 -0
  330. package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +157 -0
  331. package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +152 -0
  332. package/src/activities/execute-deep-agent/__tests__/hitl.test.ts +50 -122
  333. package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +8 -6
  334. package/src/activities/execute-deep-agent/__tests__/plan-mode-path-normalization.test.ts +2 -2
  335. package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +35 -35
  336. package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +247 -0
  337. package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +329 -0
  338. package/src/activities/execute-deep-agent/__tests__/status-builder-shared.test.ts +1 -20
  339. package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +78 -0
  340. package/src/activities/execute-deep-agent/__tests__/subagent-gitignored-capture.test.ts +1 -1
  341. package/src/activities/execute-deep-agent/__tests__/subagent-plan-mode-permissions.test.ts +2 -2
  342. package/src/activities/execute-deep-agent/__tests__/subagent-tracker.test.ts +57 -31
  343. package/src/activities/execute-deep-agent/__tests__/subagent-transformer.test.ts +19 -79
  344. package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +15 -15
  345. package/src/activities/execute-deep-agent/__tests__/summarization-verification.test.ts +1 -1
  346. package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +391 -0
  347. package/src/activities/execute-deep-agent/__tests__/v3-status-builder.test.ts +343 -38
  348. package/src/activities/execute-deep-agent/__tests__/vision-input.test.ts +5 -5
  349. package/src/activities/execute-deep-agent/adapter.ts +94 -0
  350. package/src/activities/execute-deep-agent/cas-capture-observer.ts +11 -0
  351. package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +43 -0
  352. package/src/activities/execute-deep-agent/execution-state.ts +4 -13
  353. package/src/activities/execute-deep-agent/hitl.ts +100 -123
  354. package/src/activities/execute-deep-agent/prompt-builder.ts +141 -115
  355. package/src/activities/execute-deep-agent/status-builder-shared.ts +21 -84
  356. package/src/activities/execute-deep-agent/streaming-side-effects.ts +13 -19
  357. package/src/activities/execute-deep-agent/subagent-tracker.ts +77 -42
  358. package/src/activities/execute-deep-agent/subagent-transformer.ts +46 -105
  359. package/src/activities/execute-deep-agent/subagent-wiring.ts +5 -4
  360. package/src/activities/execute-deep-agent/turn-settle.ts +164 -0
  361. package/src/activities/execute-deep-agent/turn-setup.ts +541 -0
  362. package/src/activities/execute-deep-agent/turn-stream.ts +313 -0
  363. package/src/activities/execute-deep-agent/turn.ts +131 -0
  364. package/src/activities/execute-deep-agent/v3-event-recorder.ts +6 -5
  365. package/src/activities/execute-deep-agent/v3-events.ts +1 -1
  366. package/src/activities/execute-deep-agent/v3-status-builder.ts +84 -63
  367. package/src/harness/__tests__/approval-decisions.test.ts +116 -0
  368. package/src/harness/__tests__/capture.test.ts +268 -0
  369. package/src/harness/__tests__/mount-skills.test.ts +169 -0
  370. package/src/harness/__tests__/persist-chokepoint.test.ts +38 -2
  371. package/src/harness/__tests__/run-turn-deterministic.test.ts +94 -0
  372. package/src/harness/__tests__/run-turn.test.ts +39 -23
  373. package/src/harness/__tests__/turn-attachments-vision.test.ts +80 -0
  374. package/src/harness/__tests__/turn-context.test.ts +73 -26
  375. package/src/harness/approval-decisions.ts +104 -0
  376. package/src/harness/capabilities.ts +16 -5
  377. package/src/harness/capture.ts +301 -0
  378. package/src/harness/persist-chokepoint.ts +24 -4
  379. package/src/harness/run-turn.ts +120 -29
  380. package/src/harness/terminal-table.ts +61 -20
  381. package/src/harness/turn-context.ts +208 -111
  382. package/src/harness/types.ts +66 -12
  383. package/src/harness-adapters.ts +17 -9
  384. package/src/middleware/__tests__/approval-gate.test.ts +1 -1
  385. package/src/middleware/__tests__/cost-advisory.test.ts +113 -0
  386. package/src/middleware/approval-gate.ts +2 -2
  387. package/src/middleware/{cost-cap.ts → cost-advisory.ts} +40 -70
  388. package/src/middleware/index.ts +29 -29
  389. package/src/middleware/types.ts +3 -2
  390. package/src/runner-manager.ts +0 -8
  391. package/src/runner.ts +0 -8
  392. package/src/shared/__tests__/attachment-naming.test.ts +6 -19
  393. package/src/shared/__tests__/attachment-resolver.test.ts +158 -8
  394. package/src/shared/__tests__/attachment-zip.test.ts +236 -0
  395. package/src/shared/__tests__/bedrock-adapter.test.ts +1 -1
  396. package/src/shared/__tests__/blueprint-resolver.test.ts +43 -0
  397. package/src/shared/__tests__/cost-guard.test.ts +3 -3
  398. package/src/shared/__tests__/prompt-sections.test.ts +167 -0
  399. package/src/shared/__tests__/secret-leak-scan.test.ts +2 -2
  400. package/src/{activities/execute-deep-agent → shared}/__tests__/stamp-flowed-rows.test.ts +33 -10
  401. package/src/shared/__tests__/vertex-adapter.test.ts +1 -1
  402. package/src/shared/attachment-resolver.ts +218 -55
  403. package/src/shared/attachment-zip.ts +281 -0
  404. package/src/shared/connect-backfill.ts +9 -11
  405. package/src/shared/cost-guard.ts +3 -3
  406. package/src/shared/execution-status-writer.ts +5 -5
  407. package/src/shared/extract-structured-output.ts +8 -7
  408. package/src/shared/filereview/__tests__/capture.test.ts +86 -4
  409. package/src/shared/filereview/__tests__/cas-progress.test.ts +2 -1
  410. package/src/shared/filereview/cas-progress.ts +5 -19
  411. package/src/shared/filereview/cas-touched.ts +89 -0
  412. package/src/shared/filereview/index.ts +4 -2
  413. package/src/shared/mcp-resolver.ts +4 -5
  414. package/src/shared/persist-decision.ts +3 -4
  415. package/src/shared/plan-mode-permissions.ts +2 -2
  416. package/src/shared/plan-mode-prompt.ts +1 -1
  417. package/src/shared/prompt-sections.ts +256 -0
  418. package/src/shared/skill-resolver.ts +4 -2
  419. package/src/shared/tool-rounds.ts +48 -0
  420. package/src/shared/tool-row.ts +61 -0
  421. package/src/shared/workspace/__tests__/stigmer-link.test.ts +7 -22
  422. package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +20 -61
  423. package/src/shared/workspace/session-provision.ts +3 -3
  424. package/src/shared/workspace/stigmer-link.ts +3 -3
  425. package/src/shared/workspace/writeback-coordinator.ts +16 -64
  426. package/src/tools/index.ts +1 -1
  427. package/dist/activities/execute-cursor/capture-flow.d.ts +0 -142
  428. package/dist/activities/execute-cursor/capture-flow.js +0 -285
  429. package/dist/activities/execute-cursor/capture-flow.js.map +0 -1
  430. package/dist/activities/execute-cursor/command-provenance.d.ts +0 -48
  431. package/dist/activities/execute-cursor/command-provenance.js +0 -38
  432. package/dist/activities/execute-cursor/command-provenance.js.map +0 -1
  433. package/dist/activities/execute-deep-agent/attachment-injector.d.ts +0 -134
  434. package/dist/activities/execute-deep-agent/attachment-injector.js +0 -386
  435. package/dist/activities/execute-deep-agent/attachment-injector.js.map +0 -1
  436. package/dist/activities/execute-deep-agent/command-provenance.d.ts +0 -61
  437. package/dist/activities/execute-deep-agent/command-provenance.js +0 -72
  438. package/dist/activities/execute-deep-agent/command-provenance.js.map +0 -1
  439. package/dist/activities/execute-deep-agent/environment.d.ts +0 -24
  440. package/dist/activities/execute-deep-agent/environment.js +0 -58
  441. package/dist/activities/execute-deep-agent/environment.js.map +0 -1
  442. package/dist/activities/execute-deep-agent/event-recorder.d.ts +0 -21
  443. package/dist/activities/execute-deep-agent/event-recorder.js +0 -67
  444. package/dist/activities/execute-deep-agent/event-recorder.js.map +0 -1
  445. package/dist/activities/execute-deep-agent/index.d.ts +0 -15
  446. package/dist/activities/execute-deep-agent/index.js +0 -918
  447. package/dist/activities/execute-deep-agent/index.js.map +0 -1
  448. package/dist/activities/execute-deep-agent/mcp-gate.d.ts +0 -28
  449. package/dist/activities/execute-deep-agent/mcp-gate.js +0 -22
  450. package/dist/activities/execute-deep-agent/mcp-gate.js.map +0 -1
  451. package/dist/activities/execute-deep-agent/post-stream.d.ts +0 -23
  452. package/dist/activities/execute-deep-agent/post-stream.js +0 -71
  453. package/dist/activities/execute-deep-agent/post-stream.js.map +0 -1
  454. package/dist/activities/execute-deep-agent/setup.d.ts +0 -136
  455. package/dist/activities/execute-deep-agent/setup.js +0 -767
  456. package/dist/activities/execute-deep-agent/setup.js.map +0 -1
  457. package/dist/activities/execute-deep-agent/stamp-flowed-rows.d.ts +0 -36
  458. package/dist/activities/execute-deep-agent/stamp-flowed-rows.js +0 -56
  459. package/dist/activities/execute-deep-agent/stamp-flowed-rows.js.map +0 -1
  460. package/dist/activities/execute-deep-agent/status-builder.d.ts +0 -93
  461. package/dist/activities/execute-deep-agent/status-builder.js +0 -365
  462. package/dist/activities/execute-deep-agent/status-builder.js.map +0 -1
  463. package/dist/activities/execute-deep-agent/streaming-terminal.d.ts +0 -21
  464. package/dist/activities/execute-deep-agent/streaming-terminal.js +0 -80
  465. package/dist/activities/execute-deep-agent/streaming-terminal.js.map +0 -1
  466. package/dist/activities/execute-deep-agent/streaming-v3.d.ts +0 -13
  467. package/dist/activities/execute-deep-agent/streaming-v3.js +0 -174
  468. package/dist/activities/execute-deep-agent/streaming-v3.js.map +0 -1
  469. package/dist/activities/execute-deep-agent/streaming.d.ts +0 -81
  470. package/dist/activities/execute-deep-agent/streaming.js +0 -160
  471. package/dist/activities/execute-deep-agent/streaming.js.map +0 -1
  472. package/dist/middleware/cost-cap.d.ts +0 -22
  473. package/dist/middleware/cost-cap.js.map +0 -1
  474. package/dist/middleware/graceful-stop.d.ts +0 -17
  475. package/dist/middleware/graceful-stop.js +0 -63
  476. package/dist/middleware/graceful-stop.js.map +0 -1
  477. package/dist/shared/skill-writer.d.ts +0 -75
  478. package/dist/shared/skill-writer.js +0 -207
  479. package/dist/shared/skill-writer.js.map +0 -1
  480. package/src/activities/execute-cursor/__tests__/capture-flow.test.ts +0 -1032
  481. package/src/activities/execute-cursor/__tests__/command-provenance.test.ts +0 -240
  482. package/src/activities/execute-cursor/__tests__/progress-substrate.test.ts +0 -169
  483. package/src/activities/execute-cursor/capture-flow.ts +0 -379
  484. package/src/activities/execute-cursor/command-provenance.ts +0 -73
  485. package/src/activities/execute-deep-agent/__tests__/attachment-injector.test.ts +0 -1161
  486. package/src/activities/execute-deep-agent/__tests__/command-provenance.test.ts +0 -252
  487. package/src/activities/execute-deep-agent/__tests__/environment.test.ts +0 -108
  488. package/src/activities/execute-deep-agent/__tests__/event-recorder.test.ts +0 -150
  489. package/src/activities/execute-deep-agent/__tests__/hitl-integration.test.ts +0 -226
  490. package/src/activities/execute-deep-agent/__tests__/hitl-reject.test.ts +0 -318
  491. package/src/activities/execute-deep-agent/__tests__/hitl-resume-approve-all.test.ts +0 -351
  492. package/src/activities/execute-deep-agent/__tests__/hitl-resume-history.test.ts +0 -293
  493. package/src/activities/execute-deep-agent/__tests__/index.test.ts +0 -99
  494. package/src/activities/execute-deep-agent/__tests__/mcp-gate.test.ts +0 -44
  495. package/src/activities/execute-deep-agent/__tests__/post-stream.test.ts +0 -112
  496. package/src/activities/execute-deep-agent/__tests__/sequential-gate-resume.test.ts +0 -358
  497. package/src/activities/execute-deep-agent/__tests__/status-builder.test.ts +0 -1933
  498. package/src/activities/execute-deep-agent/__tests__/streaming-terminal.test.ts +0 -40
  499. package/src/activities/execute-deep-agent/__tests__/streaming-v3.test.ts +0 -597
  500. package/src/activities/execute-deep-agent/__tests__/streaming.test.ts +0 -508
  501. package/src/activities/execute-deep-agent/attachment-injector.ts +0 -627
  502. package/src/activities/execute-deep-agent/command-provenance.ts +0 -102
  503. package/src/activities/execute-deep-agent/environment.ts +0 -76
  504. package/src/activities/execute-deep-agent/event-recorder.ts +0 -95
  505. package/src/activities/execute-deep-agent/index.ts +0 -1072
  506. package/src/activities/execute-deep-agent/mcp-gate.ts +0 -37
  507. package/src/activities/execute-deep-agent/post-stream.ts +0 -109
  508. package/src/activities/execute-deep-agent/setup.ts +0 -1081
  509. package/src/activities/execute-deep-agent/stamp-flowed-rows.ts +0 -64
  510. package/src/activities/execute-deep-agent/status-builder.ts +0 -481
  511. package/src/activities/execute-deep-agent/streaming-terminal.ts +0 -106
  512. package/src/activities/execute-deep-agent/streaming-v3.ts +0 -277
  513. package/src/activities/execute-deep-agent/streaming.ts +0 -313
  514. package/src/middleware/__tests__/cost-cap.test.ts +0 -192
  515. package/src/middleware/__tests__/graceful-stop.test.ts +0 -105
  516. package/src/middleware/graceful-stop.ts +0 -86
  517. package/src/shared/__tests__/skill-writer.test.ts +0 -372
  518. package/src/shared/skill-writer.ts +0 -266
@@ -25,7 +25,7 @@ describe("buildEnhancedSystemPrompt", () => {
25
25
  skillsPromptSection: "",
26
26
  workspaceFileRefs: [],
27
27
  workspaceRoot: "/workspace",
28
- injectedFiles: [],
28
+ inputFiles: [],
29
29
  });
30
30
 
31
31
  expect(prompt.startsWith("You are a helpful assistant.")).toBe(true);
@@ -39,7 +39,7 @@ describe("buildEnhancedSystemPrompt", () => {
39
39
  skillsPromptSection: "",
40
40
  workspaceFileRefs: [],
41
41
  workspaceRoot: "/workspace",
42
- injectedFiles: [],
42
+ inputFiles: [],
43
43
  });
44
44
 
45
45
  expect(prompt).toContain("## Response rules");
@@ -53,7 +53,7 @@ describe("buildEnhancedSystemPrompt", () => {
53
53
  skillsPromptSection: "",
54
54
  workspaceFileRefs: [],
55
55
  workspaceRoot: "/workspace",
56
- injectedFiles: [],
56
+ inputFiles: [],
57
57
  });
58
58
 
59
59
  expect(prompt).toContain("## Sub-agent delegation rules");
@@ -67,7 +67,7 @@ describe("buildEnhancedSystemPrompt", () => {
67
67
  skillsPromptSection: "",
68
68
  workspaceFileRefs: [],
69
69
  workspaceRoot: "/workspace",
70
- injectedFiles: [],
70
+ inputFiles: [],
71
71
  });
72
72
 
73
73
  expect(prompt).toContain("## Workspace");
@@ -85,7 +85,7 @@ describe("buildEnhancedSystemPrompt", () => {
85
85
  skillsPromptSection: "",
86
86
  workspaceFileRefs: [],
87
87
  workspaceRoot: "/workspace",
88
- injectedFiles: [],
88
+ inputFiles: [],
89
89
  });
90
90
 
91
91
  expect(prompt).toContain("2 workspace entries");
@@ -103,7 +103,7 @@ describe("buildEnhancedSystemPrompt", () => {
103
103
  skillsPromptSection: "",
104
104
  workspaceFileRefs: [],
105
105
  workspaceRoot: "/workspace",
106
- injectedFiles: [],
106
+ inputFiles: [],
107
107
  });
108
108
 
109
109
  expect(prompt).toContain("src/");
@@ -118,7 +118,7 @@ describe("buildEnhancedSystemPrompt", () => {
118
118
  skillsPromptSection: "\n\n## Skills\n\n- coding-standards",
119
119
  workspaceFileRefs: [],
120
120
  workspaceRoot: "/workspace",
121
- injectedFiles: [],
121
+ inputFiles: [],
122
122
  });
123
123
 
124
124
  expect(prompt).toContain("## Skills");
@@ -133,7 +133,7 @@ describe("buildEnhancedSystemPrompt", () => {
133
133
  skillsPromptSection: "",
134
134
  workspaceFileRefs: ["src/config.yaml", "README.md"],
135
135
  workspaceRoot: "/workspace",
136
- injectedFiles: [],
136
+ inputFiles: [],
137
137
  });
138
138
 
139
139
  expect(prompt).toContain("## Referenced Files");
@@ -153,9 +153,9 @@ describe("buildEnhancedSystemPrompt", () => {
153
153
  skillsPromptSection: "",
154
154
  workspaceFileRefs: [],
155
155
  workspaceRoot: "/workspace",
156
- injectedFiles: [
157
- { filename: "data.csv", path: ".stigmer/inputs/data.csv", sizeBytes: 1024 },
158
- { filename: "notes.md", path: ".stigmer/inputs/notes.md", sizeBytes: 12 },
156
+ inputFiles: [
157
+ { filename: "data.csv", relativePath: ".stigmer/inputs/data.csv", sizeBytes: 1024 },
158
+ { filename: "notes.md", relativePath: ".stigmer/inputs/notes.md", sizeBytes: 12 },
159
159
  ],
160
160
  });
161
161
 
@@ -172,11 +172,11 @@ describe("buildEnhancedSystemPrompt", () => {
172
172
  skillsPromptSection: "",
173
173
  workspaceFileRefs: [],
174
174
  workspaceRoot: "/workspace",
175
- injectedFiles: [
176
- { filename: "report.pdf", path: ".stigmer/inputs/report.pdf", sizeBytes: 10 },
175
+ inputFiles: [
176
+ { filename: "report.pdf", relativePath: ".stigmer/inputs/report.pdf", sizeBytes: 10 },
177
177
  {
178
178
  filename: "report-2.pdf",
179
- path: ".stigmer/inputs/report-2.pdf",
179
+ relativePath: ".stigmer/inputs/report-2.pdf",
180
180
  sizeBytes: 20,
181
181
  renamedFrom: "report.pdf",
182
182
  },
@@ -198,14 +198,14 @@ describe("buildEnhancedSystemPrompt", () => {
198
198
  skillsPromptSection: "",
199
199
  workspaceFileRefs: [],
200
200
  workspaceRoot: "/workspace",
201
- injectedFiles: [
201
+ inputFiles: [
202
202
  {
203
203
  filename: "lease.pdf",
204
- path: ".stigmer/inputs/lease.pdf",
204
+ relativePath: ".stigmer/inputs/lease.pdf",
205
205
  sizeBytes: 2048,
206
206
  downloadUrl: "https://r2.example/lease?sig=abc",
207
207
  },
208
- { filename: "notes.md", path: ".stigmer/inputs/notes.md", sizeBytes: 12 },
208
+ { filename: "notes.md", relativePath: ".stigmer/inputs/notes.md", sizeBytes: 12 },
209
209
  ],
210
210
  downloadUrlKind: "presigned",
211
211
  });
@@ -226,10 +226,10 @@ describe("buildEnhancedSystemPrompt", () => {
226
226
  skillsPromptSection: "",
227
227
  workspaceFileRefs: [],
228
228
  workspaceRoot: "/workspace",
229
- injectedFiles: [
229
+ inputFiles: [
230
230
  {
231
231
  filename: "lease.pdf",
232
- path: ".stigmer/inputs/lease.pdf",
232
+ relativePath: ".stigmer/inputs/lease.pdf",
233
233
  sizeBytes: 2048,
234
234
  downloadUrl: "http://localhost:7235/attachments/01A/lease.pdf",
235
235
  },
@@ -250,8 +250,8 @@ describe("buildEnhancedSystemPrompt", () => {
250
250
  skillsPromptSection: "",
251
251
  workspaceFileRefs: [],
252
252
  workspaceRoot: "/workspace",
253
- injectedFiles: [
254
- { filename: "local.csv", path: ".stigmer/inputs/local.csv", sizeBytes: 5 },
253
+ inputFiles: [
254
+ { filename: "local.csv", relativePath: ".stigmer/inputs/local.csv", sizeBytes: 5 },
255
255
  ],
256
256
  downloadUrlKind: "presigned",
257
257
  });
@@ -286,7 +286,7 @@ describe("buildEnhancedSystemPrompt", () => {
286
286
  skillsPromptSection: "",
287
287
  workspaceFileRefs: [],
288
288
  workspaceRoot: "/workspace",
289
- injectedFiles: [],
289
+ inputFiles: [],
290
290
  });
291
291
 
292
292
  expect(prompt).toContain("https://github.com/org/my-repo");
@@ -302,7 +302,7 @@ describe("buildEnhancedSystemPrompt", () => {
302
302
  skillsPromptSection: "",
303
303
  workspaceFileRefs: [],
304
304
  workspaceRoot: "/workspace",
305
- injectedFiles: [],
305
+ inputFiles: [],
306
306
  });
307
307
 
308
308
  expect(prompt).not.toContain("## Workspace");
@@ -316,7 +316,7 @@ describe("buildEnhancedSystemPrompt", () => {
316
316
  skillsPromptSection: "",
317
317
  workspaceFileRefs: [],
318
318
  workspaceRoot: "",
319
- injectedFiles: [],
319
+ inputFiles: [],
320
320
  };
321
321
 
322
322
  it("appends the bridge as standing session context (every-turn injection)", () => {
@@ -345,7 +345,7 @@ describe("buildEnhancedSystemPrompt", () => {
345
345
  skillsPromptSection: "",
346
346
  workspaceFileRefs: [],
347
347
  workspaceRoot: "",
348
- injectedFiles: [],
348
+ inputFiles: [],
349
349
  };
350
350
 
351
351
  it("appends the sender as standing session context (every-turn injection)", () => {
@@ -374,7 +374,7 @@ describe("buildEnhancedSystemPrompt", () => {
374
374
  skillsPromptSection: "",
375
375
  workspaceFileRefs: [],
376
376
  workspaceRoot: "",
377
- injectedFiles: [],
377
+ inputFiles: [],
378
378
  };
379
379
 
380
380
  it("appends the context as standing session context (every-turn injection)", () => {
@@ -419,7 +419,7 @@ describe("buildEnhancedSystemPrompt", () => {
419
419
  skillsPromptSection: "",
420
420
  workspaceFileRefs: [],
421
421
  workspaceRoot: "",
422
- injectedFiles: [],
422
+ inputFiles: [],
423
423
  };
424
424
 
425
425
  it("appends the preferences with per-scope attribution (every-turn injection)", () => {
@@ -471,7 +471,7 @@ describe("buildEnhancedSystemPrompt", () => {
471
471
  skillsPromptSection: "",
472
472
  workspaceFileRefs: [],
473
473
  workspaceRoot: "",
474
- injectedFiles: [],
474
+ inputFiles: [],
475
475
  };
476
476
 
477
477
  it("appends the confirmed facts with the defensive framing (every-turn injection)", () => {
@@ -519,7 +519,7 @@ describe("buildEnhancedSystemPrompt", () => {
519
519
  skillsPromptSection: "",
520
520
  workspaceFileRefs: [],
521
521
  workspaceRoot: "/workspace",
522
- injectedFiles: [],
522
+ inputFiles: [],
523
523
  };
524
524
 
525
525
  it("appends the shared plan-mode directive plus the native-only read-boundary line as the final section", () => {
@@ -561,11 +561,11 @@ describe("buildEnhancedSystemPrompt", () => {
561
561
  skillsPromptSection: "",
562
562
  workspaceFileRefs: [],
563
563
  workspaceRoot: "/workspace",
564
- injectedFiles: [],
564
+ inputFiles: [],
565
565
  };
566
566
  const planFile = {
567
567
  filename: "plan.md",
568
- path: ".stigmer/inputs/plan.md",
568
+ relativePath: ".stigmer/inputs/plan.md",
569
569
  sizeBytes: 1024,
570
570
  };
571
571
 
@@ -573,7 +573,7 @@ describe("buildEnhancedSystemPrompt", () => {
573
573
  const prompt = buildEnhancedSystemPrompt({
574
574
  ...base,
575
575
  buildFromPlan: true,
576
- injectedFiles: [planFile],
576
+ inputFiles: [planFile],
577
577
  });
578
578
 
579
579
  expect(prompt).toContain("## Implement the approved plan");
@@ -595,7 +595,7 @@ describe("buildEnhancedSystemPrompt", () => {
595
595
  it("omits the directive for an ordinary execution", () => {
596
596
  const prompt = buildEnhancedSystemPrompt({
597
597
  ...base,
598
- injectedFiles: [planFile],
598
+ inputFiles: [planFile],
599
599
  });
600
600
 
601
601
  expect(prompt).not.toContain("## Implement the approved plan");
@@ -605,7 +605,7 @@ describe("buildEnhancedSystemPrompt", () => {
605
605
  const prompt = buildEnhancedSystemPrompt({
606
606
  ...base,
607
607
  buildFromPlan: true,
608
- injectedFiles: [planFile],
608
+ inputFiles: [planFile],
609
609
  });
610
610
 
611
611
  expect(prompt).toContain("to-do list");
@@ -644,7 +644,7 @@ describe("composeUserMessage (conversation catchup, cloud DD-006 / A27)", () =>
644
644
  skillsPromptSection: "",
645
645
  workspaceFileRefs: [],
646
646
  workspaceRoot: "/workspace",
647
- injectedFiles: [],
647
+ inputFiles: [],
648
648
  });
649
649
 
650
650
  expect(prompt).not.toContain("Conversation catchup");
@@ -0,0 +1,247 @@
1
+ /**
2
+ * The native system prompt, whole, as goldens.
3
+ *
4
+ * Every other prompt test in this directory asserts with `toContain`; the
5
+ * hermetic goldens are status JSON and never see a prompt. So until S3 M5 no
6
+ * test pinned a rendered prompt byte for byte, and the relevance-filtered
7
+ * `## Skills` section (eight or more skills, `turn-setup.ts`
8
+ * `renderRootSkillsSection`) had no test at all. These goldens are the
9
+ * photograph taken BEFORE the shared prompt glue moved into
10
+ * `shared/prompt-sections.ts` (S3 M5, Q-M5-1), so the move could be proven
11
+ * byte-identical — the same discipline M0 applied to the activity's status.
12
+ *
13
+ * Why bytes matter here beyond taste: `ScriptedModel` tells its scripted
14
+ * roles apart by the system prompt's text (`__test-utils__/scripted-model.ts`
15
+ * `systemPromptOf`), so a changed byte can silently re-route a scripted reply
16
+ * in the sub-agent delegation golden.
17
+ *
18
+ * The shapes: everything at once (the multi-entry workspace, nine skills so
19
+ * the filter fires, channel templates, referenced files, three input files
20
+ * with a rename and a download URL, the vision disclosure, all five standing
21
+ * sections); the below-threshold skills branch; plan mode; build-from-plan;
22
+ * and the minimal prompt (no instructions, so `DEFAULT_INSTRUCTIONS`). Plan
23
+ * mode and build-from-plan are mutually exclusive in production, so each has
24
+ * its own golden.
25
+ *
26
+ * The goldens are taken through `turn-setup.ts` `composeSystemPrompt`, the
27
+ * production mapping from the runtime's resolved record to the builder's
28
+ * input, so they pin the mapping too, not a copy of it. (C0 photographed the
29
+ * prompt through a field-for-field copy of the mapping as it then sat inline
30
+ * in `buildEngine`; C1 extracted it and re-took the goldens through the
31
+ * extraction — byte-identical, which is the proof the extraction is one.)
32
+ *
33
+ * A golden moves only under a ruling quoted in this header; never a quiet
34
+ * `-u`. Regenerate with `npx vitest run -u <this file>` once ruled.
35
+ */
36
+
37
+ import { describe, it, expect } from "vitest";
38
+ import { create } from "@bufbuild/protobuf";
39
+ import { AgentExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
40
+ import { AgentExecutionSpecSchema, ExecutionConfigSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/spec_pb";
41
+ import { InteractionMode } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
42
+ import type { ChannelTemplate, MessagingChannel } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_io_pb";
43
+ import { ApiResourceMetadataSchema } from "@stigmer/protos/ai/stigmer/commons/apiresource/metadata_pb";
44
+
45
+ import { makeInMemoryArtifactStorage } from "../../../__test-utils__/fake-artifact-storage.js";
46
+ import { mockWorkspaceBackend } from "../../../__test-utils__/mock-workspace.js";
47
+ import { TURN_INPUT_FIXTURE_IDS, turnInputFixture } from "../../../__test-utils__/turn-input-fixture.js";
48
+ import type { TurnInput } from "../../../harness/types.js";
49
+ import type { ResolvedAttachment } from "../../../shared/attachment-resolver.js";
50
+ import type { SkillMetadata } from "../../../shared/skill-resolver.js";
51
+ import type { RecalledMemoriesContent } from "../../../shared/recalled-memories.js";
52
+ import { SourceType, type ProvisionResult } from "../../../shared/workspace/types.js";
53
+ import { buildEnhancedSystemPrompt } from "../prompt-builder.js";
54
+ import { composeSystemPrompt } from "../turn-setup.js";
55
+
56
+ // ---------------------------------------------------------------------------
57
+ // Fixtures — every value is a plain fact a golden can name.
58
+ // ---------------------------------------------------------------------------
59
+
60
+ const USER_MESSAGE = "Deploy the payments service to kubernetes and draft the release notes.";
61
+
62
+ function skill(name: string, description: string): SkillMetadata {
63
+ return { name, description, path: `.stigmer/skills/${name}/SKILL.md` };
64
+ }
65
+
66
+ /** Nine skills: three the message's terms reach, six it does not — the filter has something to exclude. */
67
+ const NINE_SKILLS: readonly SkillMetadata[] = [
68
+ skill("k8s-deploy", "Deploy services to kubernetes clusters with helm charts"),
69
+ skill("release-notes", "Draft release notes from the merged pull requests"),
70
+ skill("payments-domain", "Payments service domain knowledge and ledger invariants"),
71
+ skill("csv-wrangling", "Reshape and validate CSV exports"),
72
+ skill("pdf-extraction", "Pull tables out of PDF statements"),
73
+ skill("slack-digest", "Summarise a Slack channel's day"),
74
+ skill("sql-tuning", "Explain and tune slow SQL queries"),
75
+ skill("image-resize", "Batch-resize and convert images"),
76
+ skill("calendar-sync", "Reconcile two calendars' events"),
77
+ ];
78
+
79
+ const THREE_SKILLS: readonly SkillMetadata[] = NINE_SKILLS.slice(0, 3);
80
+
81
+ const PROVISION_RESULTS: readonly ProvisionResult[] = [
82
+ {
83
+ rootDir: "/ws/app",
84
+ sourceType: SourceType.GIT_REPO,
85
+ consumedKeys: [],
86
+ workspaceDescription: "The payments service, cloned from git.",
87
+ entryName: "app",
88
+ gitMetadata: { repoUrl: "https://github.com/acme/payments", branch: "main", baseCommit: "0123456789abcdef", gitCredentialsConfigured: true },
89
+ fileTree: "app/\n src/\n README.md",
90
+ },
91
+ {
92
+ rootDir: "/ws/docs",
93
+ sourceType: SourceType.LOCAL_PATH,
94
+ consumedKeys: [],
95
+ workspaceDescription: "The docs folder on the user's machine.",
96
+ entryName: "docs",
97
+ },
98
+ ];
99
+
100
+ const INPUT_FILES: readonly ResolvedAttachment[] = [
101
+ { filename: "spec.pdf", relativePath: ".stigmer/inputs/spec.pdf", sizeBytes: 204800 },
102
+ { filename: "report (2).pdf", relativePath: ".stigmer/inputs/report (2).pdf", sizeBytes: 1024, renamedFrom: "report.pdf" },
103
+ {
104
+ filename: "diagram.png",
105
+ relativePath: ".stigmer/inputs/diagram.png",
106
+ sizeBytes: 4096,
107
+ downloadUrl: "https://storage.example.test/diagram.png?sig=abc",
108
+ },
109
+ ];
110
+
111
+ const CHANNEL_MESSAGING = [
112
+ {
113
+ channel: { channel: "isc-whatsapp", provider: "whatsapp" } as MessagingChannel,
114
+ templates: [
115
+ {
116
+ name: "fee_reminder",
117
+ language: "en",
118
+ category: "UTILITY",
119
+ status: "APPROVED",
120
+ parameterFormat: "POSITIONAL",
121
+ parameterNames: ["1", "2"],
122
+ bodyText: "Hi {{1}}, your fee of {{2}} is due.",
123
+ headerFormat: "",
124
+ rejectionReason: "",
125
+ unsupportedReason: "",
126
+ } as ChannelTemplate,
127
+ ],
128
+ },
129
+ ];
130
+
131
+ const RECALLED: RecalledMemoriesContent = { facts: ["Prefers helm over kustomize.", "Release notes go in CHANGELOG.md."] };
132
+
133
+ const PLAN_ATTACHMENT: ResolvedAttachment = {
134
+ filename: "release_aex1.plan.md",
135
+ relativePath: ".stigmer/inputs/release_aex1.plan.md",
136
+ sizeBytes: 2048,
137
+ };
138
+
139
+ interface EverythingShape {
140
+ readonly skills: readonly SkillMetadata[];
141
+ readonly interactionMode?: InteractionMode;
142
+ readonly buildFromPlan?: boolean;
143
+ readonly inputFiles?: readonly ResolvedAttachment[];
144
+ }
145
+
146
+ /**
147
+ * The runtime's resolved record for the "everything" shape — every field the
148
+ * prompt reads, populated: the two-entry workspace rooted at `/ws`, the
149
+ * skills, the channel, the referenced files on the spec, the input files with
150
+ * one inline image and one that degraded, the presigned storage, all five
151
+ * standing facts. `composeSystemPrompt` reads it exactly as `buildEngine`
152
+ * does.
153
+ */
154
+ function everythingInput(shape: EverythingShape): TurnInput {
155
+ const sessionId = TURN_INPUT_FIXTURE_IDS.sessionId;
156
+ const executionId = TURN_INPUT_FIXTURE_IDS.executionId;
157
+ const execution = create(AgentExecutionSchema, {
158
+ metadata: create(ApiResourceMetadataSchema, { id: executionId, org: TURN_INPUT_FIXTURE_IDS.org, name: executionId }),
159
+ spec: create(AgentExecutionSpecSchema, {
160
+ sessionId,
161
+ message: USER_MESSAGE,
162
+ workspaceFileRefs: ["app/src/deploy.ts", "docs/RELEASES.md"],
163
+ executionConfig: create(ExecutionConfigSchema, {
164
+ ...(shape.interactionMode !== undefined ? { interactionMode: shape.interactionMode } : {}),
165
+ ...(shape.buildFromPlan !== undefined ? { buildFromPlan: shape.buildFromPlan } : {}),
166
+ }),
167
+ }),
168
+ });
169
+ return turnInputFixture({
170
+ execution,
171
+ skills: { root: [...shape.skills], bySubAgent: new Map() },
172
+ workspace: {
173
+ dirs: ["/ws"],
174
+ primaryDir: "/ws",
175
+ gitWorkspace: false,
176
+ captureMode: false,
177
+ changeSetId: `${executionId}:0`,
178
+ provision: { workspaceDirs: ["/ws"], provisionResults: [...PROVISION_RESULTS], workspaceBackend: mockWorkspaceBackend() },
179
+ },
180
+ mcp: {
181
+ servers: [],
182
+ channelMessaging: CHANNEL_MESSAGING,
183
+ leases: { global: false, categories: new Set(), servers: new Set() },
184
+ policies: new Map(),
185
+ },
186
+ attachments: {
187
+ results: [...(shape.inputFiles ?? INPUT_FILES)],
188
+ visionImages: [{ filename: "diagram.png", mimeType: "image/png", base64: "", byteSize: 4096 }],
189
+ visionNotViewable: [{ path: ".stigmer/inputs/huge.png", reason: "too_large" }],
190
+ },
191
+ artifactStorage: makeInMemoryArtifactStorage({ downloadUrlKind: "presigned" }).storage,
192
+ standing: {
193
+ contextBridge: "Earlier the user asked for a staging deploy; it succeeded.",
194
+ senderIdentity: { value: "15550001111", kind: "whatsapp_phone" },
195
+ sessionContext: "The user is the on-call engineer this week.",
196
+ declaredPreferences: { orgContext: "We deploy to eu-west-1.", userContext: "Keep answers terse." },
197
+ conversationCatchup: undefined,
198
+ selectRecalledMemories: async () => RECALLED,
199
+ },
200
+ });
201
+ }
202
+
203
+ /** The prompt as `buildEngine` composes it: the production mapping over the record and the awaited memory selection. */
204
+ async function systemPromptOf(input: TurnInput): Promise<string> {
205
+ return composeSystemPrompt(input, await input.standing.selectRecalledMemories());
206
+ }
207
+
208
+ // ---------------------------------------------------------------------------
209
+ // Goldens
210
+ // ---------------------------------------------------------------------------
211
+
212
+ describe("native system prompt goldens (S3 M5, Q-M5-1)", () => {
213
+ it("everything at once, nine skills so the relevance filter fires", async () => {
214
+ const prompt = await systemPromptOf(everythingInput({ skills: NINE_SKILLS }));
215
+ await expect(prompt).toMatchFileSnapshot("./goldens/system-prompt.everything.prompt.md");
216
+ });
217
+
218
+ it("three skills, below the relevance threshold: every skill listed, no also-available note", async () => {
219
+ const prompt = await systemPromptOf(everythingInput({ skills: THREE_SKILLS }));
220
+ await expect(prompt).toMatchFileSnapshot("./goldens/system-prompt.skills-below-threshold.prompt.md");
221
+ });
222
+
223
+ it("plan mode appends the shared directive plus the native read-boundary sentence, last", async () => {
224
+ const prompt = await systemPromptOf(everythingInput({ skills: THREE_SKILLS, interactionMode: InteractionMode.PLAN }));
225
+ await expect(prompt).toMatchFileSnapshot("./goldens/system-prompt.plan-mode.prompt.md");
226
+ });
227
+
228
+ it("build-from-plan points at the attached approved plan", async () => {
229
+ const prompt = await systemPromptOf(
230
+ everythingInput({ skills: THREE_SKILLS, buildFromPlan: true, inputFiles: [...INPUT_FILES, PLAN_ATTACHMENT] }),
231
+ );
232
+ await expect(prompt).toMatchFileSnapshot("./goldens/system-prompt.build-from-plan.prompt.md");
233
+ });
234
+
235
+ it("the minimal prompt: no instructions, nothing else — the default instructions and the two rule blocks", async () => {
236
+ const prompt = buildEnhancedSystemPrompt({
237
+ instructions: "",
238
+ provisionResults: [],
239
+ containerRoot: "",
240
+ skillsPromptSection: "",
241
+ workspaceFileRefs: [],
242
+ workspaceRoot: "/ws",
243
+ inputFiles: [],
244
+ });
245
+ await expect(prompt).toMatchFileSnapshot("./goldens/system-prompt.minimal.prompt.md");
246
+ });
247
+ });