@stigmer/runner 3.15.3-dev.20260914121148 → 3.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) hide show
  1. package/README.md +2 -1
  2. package/dist/.build-fingerprint +1 -1
  3. package/dist/__test-utils__/approval-contract/types.d.ts +1 -1
  4. package/dist/__test-utils__/hermetic-activity.d.ts +61 -7
  5. package/dist/__test-utils__/hermetic-activity.js +100 -9
  6. package/dist/__test-utils__/hermetic-activity.js.map +1 -1
  7. package/dist/__test-utils__/model-registry-fixture.d.ts +22 -3
  8. package/dist/__test-utils__/model-registry-fixture.js +22 -7
  9. package/dist/__test-utils__/model-registry-fixture.js.map +1 -1
  10. package/dist/activities/execute-cursor/__test-utils__/contract-subject.d.ts +2 -2
  11. package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +2 -2
  12. package/dist/activities/execute-cursor/__test-utils__/fold.d.ts +61 -0
  13. package/dist/activities/execute-cursor/__test-utils__/fold.js +94 -0
  14. package/dist/activities/execute-cursor/__test-utils__/fold.js.map +1 -0
  15. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +1 -1
  16. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -1
  17. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +47 -12
  18. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +41 -10
  19. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
  20. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +15 -6
  21. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +17 -4
  22. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -1
  23. package/dist/activities/execute-cursor/adapter.d.ts +4 -4
  24. package/dist/activities/execute-cursor/adapter.js +4 -4
  25. package/dist/activities/execute-cursor/approval-policy.d.ts +10 -10
  26. package/dist/activities/execute-cursor/approval-policy.js +12 -23
  27. package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
  28. package/dist/activities/execute-cursor/approval-state.d.ts +35 -1
  29. package/dist/activities/execute-cursor/approval-state.js +65 -0
  30. package/dist/activities/execute-cursor/approval-state.js.map +1 -1
  31. package/dist/activities/execute-cursor/{message-translator.d.ts → boundary-rows.d.ts} +45 -341
  32. package/dist/activities/execute-cursor/boundary-rows.js +1018 -0
  33. package/dist/activities/execute-cursor/boundary-rows.js.map +1 -0
  34. package/dist/activities/execute-cursor/cursor-capabilities.d.ts +1 -1
  35. package/dist/activities/execute-cursor/cursor-capabilities.js +1 -1
  36. package/dist/activities/execute-cursor/cursor-event-recorder.d.ts +33 -14
  37. package/dist/activities/execute-cursor/cursor-event-recorder.js +43 -21
  38. package/dist/activities/execute-cursor/cursor-event-recorder.js.map +1 -1
  39. package/dist/activities/execute-cursor/prompt-builder.d.ts +3 -3
  40. package/dist/activities/execute-cursor/prompt-builder.js +4 -4
  41. package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
  42. package/dist/activities/execute-cursor/service-tier.js +1 -2
  43. package/dist/activities/execute-cursor/service-tier.js.map +1 -1
  44. package/dist/activities/execute-cursor/sub-agent-steps.d.ts +79 -0
  45. package/dist/activities/execute-cursor/sub-agent-steps.js +180 -0
  46. package/dist/activities/execute-cursor/sub-agent-steps.js.map +1 -0
  47. package/dist/activities/execute-cursor/tool-result.d.ts +49 -0
  48. package/dist/activities/execute-cursor/tool-result.js +130 -0
  49. package/dist/activities/execute-cursor/tool-result.js.map +1 -0
  50. package/dist/activities/execute-cursor/translator.d.ts +178 -0
  51. package/dist/activities/execute-cursor/translator.js +485 -0
  52. package/dist/activities/execute-cursor/translator.js.map +1 -0
  53. package/dist/activities/execute-cursor/turn-boundary.d.ts +15 -5
  54. package/dist/activities/execute-cursor/turn-boundary.js +10 -14
  55. package/dist/activities/execute-cursor/turn-boundary.js.map +1 -1
  56. package/dist/activities/execute-cursor/turn-settle.d.ts +11 -7
  57. package/dist/activities/execute-cursor/turn-settle.js +47 -34
  58. package/dist/activities/execute-cursor/turn-settle.js.map +1 -1
  59. package/dist/activities/execute-cursor/turn-setup.d.ts +2 -2
  60. package/dist/activities/execute-cursor/turn-setup.js +5 -5
  61. package/dist/activities/execute-cursor/turn-setup.js.map +1 -1
  62. package/dist/activities/execute-cursor/turn-stream.d.ts +23 -14
  63. package/dist/activities/execute-cursor/turn-stream.js +41 -28
  64. package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
  65. package/dist/activities/execute-cursor/turn.d.ts +4 -4
  66. package/dist/activities/execute-cursor/turn.js +5 -5
  67. package/dist/activities/execute-cursor/usage-pricing.d.ts +2 -2
  68. package/dist/activities/execute-cursor/usage-pricing.js +2 -2
  69. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +2 -2
  70. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +2 -2
  71. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +16 -11
  72. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +22 -10
  73. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js.map +1 -1
  74. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js +1 -1
  75. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js.map +1 -1
  76. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +2 -3
  77. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +2 -3
  78. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js.map +1 -1
  79. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +12 -3
  80. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +18 -4
  81. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -1
  82. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.d.ts +10 -1
  83. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js +24 -11
  84. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js.map +1 -1
  85. package/dist/activities/execute-deep-agent/adapter.d.ts +1 -1
  86. package/dist/activities/execute-deep-agent/adapter.js +1 -1
  87. package/dist/activities/execute-deep-agent/approval-file-change.d.ts +19 -19
  88. package/dist/activities/execute-deep-agent/approval-file-change.js +16 -15
  89. package/dist/activities/execute-deep-agent/approval-file-change.js.map +1 -1
  90. package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +2 -2
  91. package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +2 -2
  92. package/dist/activities/execute-deep-agent/hitl.d.ts +2 -2
  93. package/dist/activities/execute-deep-agent/hitl.js +2 -2
  94. package/dist/activities/execute-deep-agent/inline-publisher.d.ts +13 -3
  95. package/dist/activities/execute-deep-agent/inline-publisher.js +3 -3
  96. package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -1
  97. package/dist/activities/execute-deep-agent/prompt-builder.d.ts +3 -3
  98. package/dist/activities/execute-deep-agent/prompt-builder.js +6 -7
  99. package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
  100. package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +16 -8
  101. package/dist/activities/execute-deep-agent/streaming-side-effects.js +20 -33
  102. package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
  103. package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +3 -3
  104. package/dist/activities/execute-deep-agent/subagent-transformer.js +1 -1
  105. package/dist/activities/execute-deep-agent/translator.d.ts +134 -0
  106. package/dist/activities/execute-deep-agent/translator.js +418 -0
  107. package/dist/activities/execute-deep-agent/translator.js.map +1 -0
  108. package/dist/activities/execute-deep-agent/turn-settle.d.ts +13 -7
  109. package/dist/activities/execute-deep-agent/turn-settle.js +34 -45
  110. package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -1
  111. package/dist/activities/execute-deep-agent/turn-setup.d.ts +8 -8
  112. package/dist/activities/execute-deep-agent/turn-setup.js +7 -7
  113. package/dist/activities/execute-deep-agent/turn-stream.d.ts +13 -10
  114. package/dist/activities/execute-deep-agent/turn-stream.js +44 -41
  115. package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -1
  116. package/dist/activities/execute-deep-agent/turn.d.ts +3 -3
  117. package/dist/activities/execute-deep-agent/turn.js +3 -3
  118. package/dist/activities/generate-session-subject.d.ts +25 -4
  119. package/dist/activities/generate-session-subject.js +17 -7
  120. package/dist/activities/generate-session-subject.js.map +1 -1
  121. package/dist/client/stigmer-client.d.ts +17 -6
  122. package/dist/client/stigmer-client.js +47 -14
  123. package/dist/client/stigmer-client.js.map +1 -1
  124. package/dist/config.d.ts +6 -3
  125. package/dist/config.js +4 -1
  126. package/dist/config.js.map +1 -1
  127. package/dist/harness/approval-decisions.d.ts +1 -1
  128. package/dist/harness/approval-decisions.js +1 -1
  129. package/dist/harness/capabilities.d.ts +21 -11
  130. package/dist/harness/capabilities.js +2 -2
  131. package/dist/harness/capture.d.ts +4 -4
  132. package/dist/harness/capture.js +4 -4
  133. package/dist/harness/persist-chokepoint.d.ts +3 -3
  134. package/dist/harness/persist-chokepoint.js +3 -3
  135. package/dist/harness/registry.d.ts +2 -2
  136. package/dist/harness/registry.js +2 -2
  137. package/dist/harness/run-turn.d.ts +6 -4
  138. package/dist/harness/run-turn.js +31 -9
  139. package/dist/harness/run-turn.js.map +1 -1
  140. package/dist/harness/stop-controller.d.ts +1 -1
  141. package/dist/harness/stop-controller.js +1 -1
  142. package/dist/harness/terminal-table.d.ts +7 -7
  143. package/dist/harness/terminal-table.js +7 -7
  144. package/dist/harness/transcript/builder.d.ts +182 -0
  145. package/dist/harness/transcript/builder.js +693 -0
  146. package/dist/harness/transcript/builder.js.map +1 -0
  147. package/dist/harness/transcript/events.d.ts +218 -0
  148. package/dist/harness/transcript/events.js +50 -0
  149. package/dist/harness/transcript/events.js.map +1 -0
  150. package/dist/harness/transcript/state.d.ts +110 -0
  151. package/dist/harness/transcript/state.js +148 -0
  152. package/dist/harness/transcript/state.js.map +1 -0
  153. package/dist/harness/turn-context.d.ts +54 -38
  154. package/dist/harness/turn-context.js +42 -43
  155. package/dist/harness/turn-context.js.map +1 -1
  156. package/dist/harness/types.d.ts +63 -22
  157. package/dist/harness/types.js +12 -11
  158. package/dist/harness/types.js.map +1 -1
  159. package/dist/harness/usage-accumulator.d.ts +2 -2
  160. package/dist/harness/usage-accumulator.js +2 -2
  161. package/dist/harness-adapters.d.ts +5 -4
  162. package/dist/harness-adapters.js +5 -4
  163. package/dist/harness-adapters.js.map +1 -1
  164. package/dist/interceptors/run-credential-activity.d.ts +28 -0
  165. package/dist/interceptors/run-credential-activity.js +56 -0
  166. package/dist/interceptors/run-credential-activity.js.map +1 -0
  167. package/dist/middleware/approval-gate.d.ts +6 -0
  168. package/dist/middleware/approval-gate.js +7 -57
  169. package/dist/middleware/approval-gate.js.map +1 -1
  170. package/dist/middleware/cost-advisory.d.ts +3 -3
  171. package/dist/middleware/cost-advisory.js +3 -3
  172. package/dist/middleware/index.d.ts +1 -1
  173. package/dist/middleware/index.js +1 -1
  174. package/dist/runner-manager.js +10 -4
  175. package/dist/runner-manager.js.map +1 -1
  176. package/dist/shared/activity-input.d.ts +9 -0
  177. package/dist/shared/activity-input.js +17 -0
  178. package/dist/shared/activity-input.js.map +1 -1
  179. package/dist/shared/approval-policy.d.ts +53 -0
  180. package/dist/shared/approval-policy.js +76 -0
  181. package/dist/shared/approval-policy.js.map +1 -1
  182. package/dist/shared/args-preview.d.ts +45 -22
  183. package/dist/shared/args-preview.js +51 -41
  184. package/dist/shared/args-preview.js.map +1 -1
  185. package/dist/shared/attachment-resolver.d.ts +4 -4
  186. package/dist/shared/attachment-resolver.js +4 -4
  187. package/dist/shared/attachment-zip.d.ts +2 -2
  188. package/dist/shared/attachment-zip.js +2 -2
  189. package/dist/shared/channel-attachment.d.ts +8 -5
  190. package/dist/shared/channel-attachment.js +10 -6
  191. package/dist/shared/channel-attachment.js.map +1 -1
  192. package/dist/shared/cost-guard.d.ts +2 -2
  193. package/dist/shared/cost-guard.js +2 -2
  194. package/dist/shared/exact-apply.d.ts +1 -1
  195. package/dist/shared/exact-apply.js +1 -1
  196. package/dist/shared/execution-context.d.ts +2 -2
  197. package/dist/shared/execution-context.js +2 -2
  198. package/dist/shared/extract-structured-output.d.ts +2 -2
  199. package/dist/shared/extract-structured-output.js +2 -2
  200. package/dist/shared/filereview/cas-touched.d.ts +2 -2
  201. package/dist/shared/filereview/cas-touched.js +2 -2
  202. package/dist/shared/filereview/progress.d.ts +13 -0
  203. package/dist/shared/filereview/progress.js +13 -0
  204. package/dist/shared/filereview/progress.js.map +1 -1
  205. package/dist/shared/heartbeat.d.ts +1 -1
  206. package/dist/shared/heartbeat.js +1 -1
  207. package/dist/shared/llm-backend.d.ts +0 -4
  208. package/dist/shared/llm-backend.js +0 -4
  209. package/dist/shared/llm-backend.js.map +1 -1
  210. package/dist/shared/memory-attachment.d.ts +16 -9
  211. package/dist/shared/memory-attachment.js +18 -10
  212. package/dist/shared/memory-attachment.js.map +1 -1
  213. package/dist/shared/model-error.d.ts +1 -2
  214. package/dist/shared/model-error.js +1 -2
  215. package/dist/shared/model-error.js.map +1 -1
  216. package/dist/shared/persist-decision.d.ts +18 -24
  217. package/dist/shared/persist-decision.js +19 -11
  218. package/dist/shared/persist-decision.js.map +1 -1
  219. package/dist/shared/prompt-sections.d.ts +4 -4
  220. package/dist/shared/prompt-sections.js +4 -4
  221. package/dist/shared/run-credential-store.d.ts +32 -0
  222. package/dist/shared/run-credential-store.js +39 -0
  223. package/dist/shared/run-credential-store.js.map +1 -0
  224. package/dist/shared/run-credential.d.ts +61 -0
  225. package/dist/shared/run-credential.js +68 -0
  226. package/dist/shared/run-credential.js.map +1 -0
  227. package/dist/shared/skill-resolver.d.ts +3 -3
  228. package/dist/shared/skill-resolver.js +3 -3
  229. package/dist/shared/status-offload.d.ts +1 -1
  230. package/dist/shared/status-offload.js +2 -2
  231. package/dist/shared/status-offload.js.map +1 -1
  232. package/dist/shared/streaming-scheduler.d.ts +2 -7
  233. package/dist/shared/streaming-scheduler.js +6 -14
  234. package/dist/shared/streaming-scheduler.js.map +1 -1
  235. package/dist/shared/subagent-rows.d.ts +2 -2
  236. package/dist/shared/subagent-rows.js +2 -2
  237. package/dist/shared/synthesized-attachment.d.ts +30 -3
  238. package/dist/shared/synthesized-attachment.js +26 -0
  239. package/dist/shared/synthesized-attachment.js.map +1 -1
  240. package/dist/shared/todos.d.ts +3 -3
  241. package/dist/shared/todos.js +3 -3
  242. package/dist/shared/tool-row.d.ts +19 -1
  243. package/dist/shared/tool-row.js +36 -2
  244. package/dist/shared/tool-row.js.map +1 -1
  245. package/dist/shared/worker-shutdown.d.ts +1 -1
  246. package/dist/shared/worker-shutdown.js +1 -1
  247. package/dist/shared/workspace/session-provision.d.ts +1 -1
  248. package/dist/shared/workspace/session-provision.js +1 -1
  249. package/dist/shared/workspace/sources/empty.d.ts +1 -1
  250. package/dist/shared/workspace/sources/empty.js +1 -2
  251. package/dist/shared/workspace/sources/empty.js.map +1 -1
  252. package/dist/shared/workspace/sources/git.js +4 -4
  253. package/dist/shared/workspace/sources/git.js.map +1 -1
  254. package/dist/shared/workspace/sources/local-path.js +6 -6
  255. package/dist/shared/workspace/sources/local-path.js.map +1 -1
  256. package/dist/shared/workspace/stigmer-link.d.ts +1 -1
  257. package/dist/shared/workspace/stigmer-link.js +1 -1
  258. package/dist/shared/workspace/types.d.ts +2 -5
  259. package/dist/shared/workspace/types.js +0 -6
  260. package/dist/shared/workspace/types.js.map +1 -1
  261. package/dist/shared/workspace/writeback-coordinator.d.ts +17 -4
  262. package/dist/shared/workspace/writeback-coordinator.js +7 -9
  263. package/dist/shared/workspace/writeback-coordinator.js.map +1 -1
  264. package/dist/worker.js +10 -3
  265. package/dist/worker.js.map +1 -1
  266. package/dist/workflow-source.d.ts +10 -0
  267. package/dist/workflow-source.js +12 -0
  268. package/dist/workflow-source.js.map +1 -1
  269. package/dist/workflows/execute-from-execution.d.ts +15 -0
  270. package/dist/workflows/execute-from-execution.js +11 -0
  271. package/dist/workflows/execute-from-execution.js.map +1 -1
  272. package/dist/workflows/index.d.ts +5 -3
  273. package/dist/workflows/index.js +5 -3
  274. package/dist/workflows/index.js.map +1 -1
  275. package/dist/workflows/interceptors/run-credential.d.ts +34 -0
  276. package/dist/workflows/interceptors/run-credential.js +71 -0
  277. package/dist/workflows/interceptors/run-credential.js.map +1 -0
  278. package/package.json +4 -4
  279. package/src/__test-utils__/__tests__/execution-record-barrier.test.ts +70 -0
  280. package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +35 -1
  281. package/src/__test-utils__/approval-contract/contract.ts +1 -1
  282. package/src/__test-utils__/approval-contract/types.ts +1 -1
  283. package/src/__test-utils__/harness-boot-order-child.ts +1 -1
  284. package/src/__test-utils__/harness-contract/contract.ts +8 -8
  285. package/src/__test-utils__/harness-contract/recording-sink.ts +11 -1
  286. package/src/__test-utils__/harness-contract/runtime-contract.ts +52 -16
  287. package/src/__test-utils__/harness-contract/scripted-adapter.ts +47 -43
  288. package/src/__test-utils__/hermetic-activity.ts +113 -9
  289. package/src/__test-utils__/model-registry-fixture.ts +31 -7
  290. package/src/__test-utils__/module-specifiers.ts +32 -3
  291. package/src/__tests__/harness-boot-order.test.ts +1 -1
  292. package/src/__tests__/harness-contract.test.ts +1 -1
  293. package/src/__tests__/run-credential-e2e.test.ts +233 -0
  294. package/src/__tests__/run-credential-registration.test.ts +80 -0
  295. package/src/__tests__/runner-manager.test.ts +1 -1
  296. package/src/activities/__tests__/generate-session-subject-wire.test.ts +119 -0
  297. package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +1 -1
  298. package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +2 -2
  299. package/src/activities/execute-cursor/__test-utils__/fold.ts +116 -0
  300. package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +1 -1
  301. package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +67 -17
  302. package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +19 -5
  303. package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +2 -1
  304. package/src/activities/execute-cursor/__tests__/approval-state.test.ts +14 -21
  305. package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +3 -3
  306. package/src/activities/execute-cursor/__tests__/coarse-fingerprint.test.ts +2 -1
  307. package/src/activities/execute-cursor/__tests__/cursor-event-recorder.test.ts +142 -0
  308. package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.test.ts +19 -8
  309. package/src/activities/execute-cursor/__tests__/cursor-sdk-auth-smoke.test.ts +10 -8
  310. package/src/activities/execute-cursor/__tests__/cursor-transcript-live.test.ts +298 -0
  311. package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +4 -2
  312. package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +1 -1
  313. package/src/activities/execute-cursor/__tests__/hermetic/deny-and-retry.test.ts +1 -1
  314. package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +1 -1
  315. package/src/activities/execute-cursor/__tests__/hermetic/goldens/mcp-tool-call.status.json +71 -0
  316. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-task-note.status.json +73 -0
  317. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.error-delta.status.json +78 -0
  318. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.output-first.status.json +72 -0
  319. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.status.json +72 -0
  320. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sub-agent-delegation.status.json +109 -0
  321. package/src/activities/execute-cursor/__tests__/hermetic/goldens/thinking-turn.status.json +78 -0
  322. package/src/activities/execute-cursor/__tests__/hermetic/goldens/todo-write.status.json +119 -0
  323. package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-error.status.json +68 -0
  324. package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-only-step.status.json +67 -0
  325. package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.status.json +1 -1
  326. package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +7 -7
  327. package/src/activities/execute-cursor/__tests__/hermetic/mcp-tool-call.test.ts +146 -0
  328. package/src/activities/execute-cursor/__tests__/hermetic/pause-vs-shutdown.test.ts +5 -5
  329. package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +2 -1
  330. package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +2 -1
  331. package/src/activities/execute-cursor/__tests__/hermetic/sdk-task-note.test.ts +122 -0
  332. package/src/activities/execute-cursor/__tests__/hermetic/shell-output-delta.test.ts +276 -0
  333. package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +8 -8
  334. package/src/activities/execute-cursor/__tests__/hermetic/sub-agent-delegation.test.ts +196 -0
  335. package/src/activities/execute-cursor/__tests__/hermetic/thinking-turn.test.ts +145 -0
  336. package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +1 -1
  337. package/src/activities/execute-cursor/__tests__/hermetic/todo-write.test.ts +165 -0
  338. package/src/activities/execute-cursor/__tests__/hermetic/tool-call.test.ts +3 -3
  339. package/src/activities/execute-cursor/__tests__/hermetic/tool-error.test.ts +138 -0
  340. package/src/activities/execute-cursor/__tests__/hermetic/tool-only-step.test.ts +130 -0
  341. package/src/activities/execute-cursor/__tests__/hermetic/unattributed-hook-block.test.ts +13 -1
  342. package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +2 -2
  343. package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +43 -60
  344. package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +23 -28
  345. package/src/activities/execute-cursor/__tests__/hook-script.test.ts +2 -1
  346. package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +1 -1
  347. package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +5 -5
  348. package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +11 -13
  349. package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +8 -11
  350. package/src/activities/execute-cursor/__tests__/tool-result-image.test.ts +8 -22
  351. package/src/activities/execute-cursor/__tests__/translator.test.ts +594 -0
  352. package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +8 -5
  353. package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +87 -63
  354. package/src/activities/execute-cursor/adapter.ts +4 -4
  355. package/src/activities/execute-cursor/approval-policy.ts +12 -24
  356. package/src/activities/execute-cursor/approval-state.ts +66 -1
  357. package/src/activities/execute-cursor/boundary-rows.ts +1132 -0
  358. package/src/activities/execute-cursor/cursor-capabilities.ts +1 -1
  359. package/src/activities/execute-cursor/cursor-event-recorder.ts +57 -28
  360. package/src/activities/execute-cursor/fetch-interceptor.ts +1 -1
  361. package/src/activities/execute-cursor/http2-interceptor.ts +1 -1
  362. package/src/activities/execute-cursor/prompt-builder.ts +6 -6
  363. package/src/activities/execute-cursor/service-tier.ts +1 -2
  364. package/src/activities/execute-cursor/sub-agent-steps.ts +188 -0
  365. package/src/activities/execute-cursor/tool-result.ts +128 -0
  366. package/src/activities/execute-cursor/translator.ts +541 -0
  367. package/src/activities/execute-cursor/turn-boundary.ts +21 -14
  368. package/src/activities/execute-cursor/turn-settle.ts +46 -34
  369. package/src/activities/execute-cursor/turn-setup.ts +5 -5
  370. package/src/activities/execute-cursor/turn-stream.ts +49 -46
  371. package/src/activities/execute-cursor/turn.ts +5 -5
  372. package/src/activities/execute-cursor/usage-pricing.ts +2 -2
  373. package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +2 -2
  374. package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +23 -11
  375. package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +1 -1
  376. package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +2 -3
  377. package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +25 -4
  378. package/src/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.ts +25 -11
  379. package/src/activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts +1 -1
  380. package/src/activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts +1 -1
  381. package/src/activities/execute-deep-agent/__tests__/approval-file-change.test.ts +6 -17
  382. package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +25 -8
  383. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +2 -7
  384. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +4 -14
  385. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +1 -5
  386. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +4 -7
  387. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +1 -5
  388. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +2 -9
  389. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +2 -9
  390. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +1 -4
  391. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +1 -4
  392. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +1 -4
  393. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +109 -76
  394. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +1 -5
  395. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +2 -10
  396. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +2 -10
  397. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +1 -5
  398. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +3 -6
  399. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +1 -4
  400. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +1 -4
  401. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/write-todos.status.json +92 -0
  402. package/src/activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts +3 -3
  403. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-approve-all-lease.test.ts +9 -5
  404. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +3 -3
  405. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +3 -3
  406. package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +7 -6
  407. package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +10 -11
  408. package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +4 -4
  409. package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +9 -8
  410. package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +21 -13
  411. package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +2 -2
  412. package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +7 -7
  413. package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +28 -12
  414. package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +21 -21
  415. package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -5
  416. package/src/activities/execute-deep-agent/__tests__/hermetic/write-todos.test.ts +160 -0
  417. package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +35 -30
  418. package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +3 -4
  419. package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +12 -10
  420. package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +13 -3
  421. package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +26 -18
  422. package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +1 -1
  423. package/src/activities/execute-deep-agent/__tests__/{subagent-tracker.test.ts → translator-subagents.test.ts} +76 -57
  424. package/src/activities/execute-deep-agent/__tests__/{v3-status-builder.test.ts → translator-through-builder.test.ts} +213 -299
  425. package/src/activities/execute-deep-agent/__tests__/translator.test.ts +505 -0
  426. package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +11 -29
  427. package/src/activities/execute-deep-agent/adapter.ts +1 -1
  428. package/src/activities/execute-deep-agent/approval-file-change.ts +20 -22
  429. package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +2 -2
  430. package/src/activities/execute-deep-agent/hitl.ts +2 -2
  431. package/src/activities/execute-deep-agent/inline-publisher.ts +16 -5
  432. package/src/activities/execute-deep-agent/prompt-builder.ts +6 -7
  433. package/src/activities/execute-deep-agent/streaming-side-effects.ts +22 -31
  434. package/src/activities/execute-deep-agent/subagent-transformer.ts +3 -3
  435. package/src/activities/execute-deep-agent/translator.ts +463 -0
  436. package/src/activities/execute-deep-agent/turn-settle.ts +35 -43
  437. package/src/activities/execute-deep-agent/turn-setup.ts +8 -8
  438. package/src/activities/execute-deep-agent/turn-stream.ts +53 -51
  439. package/src/activities/execute-deep-agent/turn.ts +3 -3
  440. package/src/activities/generate-session-subject.ts +29 -4
  441. package/src/client/__tests__/stigmer-client.test.ts +92 -0
  442. package/src/client/stigmer-client.ts +48 -14
  443. package/src/config.ts +6 -3
  444. package/src/harness/README.md +335 -0
  445. package/src/harness/__tests__/approval-decisions.test.ts +2 -2
  446. package/src/harness/__tests__/capture.test.ts +3 -3
  447. package/src/harness/__tests__/import-direction.test.ts +3 -2
  448. package/src/harness/__tests__/mount-skills.test.ts +4 -1
  449. package/src/harness/__tests__/readme-index.test.ts +339 -0
  450. package/src/harness/__tests__/run-turn.test.ts +131 -6
  451. package/src/harness/__tests__/transcript-is-engine-free.test.ts +83 -0
  452. package/src/harness/__tests__/transcript-writers.test.ts +191 -0
  453. package/src/harness/__tests__/turn-attachments-vision.test.ts +5 -2
  454. package/src/harness/__tests__/turn-context.test.ts +5 -5
  455. package/src/harness/approval-decisions.ts +1 -1
  456. package/src/harness/capabilities.ts +21 -11
  457. package/src/harness/capture.ts +4 -4
  458. package/src/harness/persist-chokepoint.ts +3 -3
  459. package/src/harness/registry.ts +2 -2
  460. package/src/harness/run-turn.ts +33 -9
  461. package/src/harness/stop-controller.ts +1 -1
  462. package/src/harness/terminal-table.ts +7 -7
  463. package/src/harness/transcript/__tests__/builder.test.ts +975 -0
  464. package/src/harness/transcript/__tests__/state.test.ts +143 -0
  465. package/src/harness/transcript/builder.ts +755 -0
  466. package/src/harness/transcript/events.ts +262 -0
  467. package/src/harness/transcript/state.ts +167 -0
  468. package/src/harness/turn-context.ts +61 -46
  469. package/src/harness/types.ts +64 -22
  470. package/src/harness/usage-accumulator.ts +2 -2
  471. package/src/harness-adapters.ts +5 -4
  472. package/src/interceptors/__tests__/run-credential-activity.test.ts +133 -0
  473. package/src/interceptors/run-credential-activity.ts +67 -0
  474. package/src/middleware/__tests__/cost-advisory.test.ts +2 -2
  475. package/src/middleware/approval-gate.ts +7 -74
  476. package/src/middleware/cost-advisory.ts +3 -3
  477. package/src/middleware/index.ts +1 -1
  478. package/src/runner-manager.ts +14 -4
  479. package/src/shared/__tests__/approval-policy.test.ts +45 -0
  480. package/src/shared/__tests__/args-preview.test.ts +40 -20
  481. package/src/shared/__tests__/attachment-naming.test.ts +1 -1
  482. package/src/shared/__tests__/attachment-resolver.test.ts +5 -5
  483. package/src/shared/__tests__/attachment-zip.test.ts +1 -1
  484. package/src/shared/__tests__/blueprint-resolver.test.ts +1 -1
  485. package/src/shared/__tests__/channel-attachment.test.ts +12 -0
  486. package/src/shared/__tests__/cost-guard.test.ts +1 -1
  487. package/src/shared/__tests__/exact-apply.test.ts +2 -1
  488. package/src/shared/__tests__/memory-attachment.test.ts +17 -0
  489. package/src/shared/__tests__/persist-decision.test.ts +19 -33
  490. package/src/shared/__tests__/prompt-sections.test.ts +1 -1
  491. package/src/shared/__tests__/run-credential.test.ts +111 -0
  492. package/src/shared/__tests__/stamp-flowed-rows.test.ts +1 -1
  493. package/src/shared/__tests__/status-offload.test.ts +1 -1
  494. package/src/shared/__tests__/streaming-scheduler.test.ts +8 -9
  495. package/src/shared/__tests__/todos.test.ts +1 -1
  496. package/src/shared/__tests__/tool-row.test.ts +1 -1
  497. package/src/shared/activity-input.ts +21 -0
  498. package/src/shared/approval-policy.ts +95 -0
  499. package/src/shared/args-preview.ts +51 -42
  500. package/src/shared/attachment-resolver.ts +4 -4
  501. package/src/shared/attachment-zip.ts +2 -2
  502. package/src/shared/channel-attachment.ts +14 -6
  503. package/src/shared/cost-guard.ts +2 -2
  504. package/src/shared/exact-apply.ts +1 -1
  505. package/src/shared/execution-context.ts +2 -2
  506. package/src/shared/extract-structured-output.ts +2 -2
  507. package/src/shared/filereview/__tests__/capture.test.ts +9 -5
  508. package/src/shared/filereview/__tests__/git-substrate.test.ts +4 -1
  509. package/src/shared/filereview/__tests__/proxy-reconcile.test.ts +3 -3
  510. package/src/shared/filereview/cas-touched.ts +2 -2
  511. package/src/shared/filereview/progress.ts +13 -0
  512. package/src/shared/heartbeat.ts +1 -1
  513. package/src/shared/llm-backend.ts +0 -4
  514. package/src/shared/memory-attachment.ts +22 -10
  515. package/src/shared/model-error.ts +1 -2
  516. package/src/shared/persist-decision.ts +19 -28
  517. package/src/shared/prompt-sections.ts +4 -4
  518. package/src/shared/run-credential-store.ts +45 -0
  519. package/src/shared/run-credential.ts +70 -0
  520. package/src/shared/skill-resolver.ts +3 -3
  521. package/src/shared/status-offload.ts +2 -2
  522. package/src/shared/streaming-scheduler.ts +8 -13
  523. package/src/shared/subagent-rows.ts +2 -2
  524. package/src/shared/synthesized-attachment.ts +38 -3
  525. package/src/shared/todos.ts +3 -3
  526. package/src/shared/tool-row.ts +38 -2
  527. package/src/shared/worker-shutdown.ts +1 -1
  528. package/src/shared/workspace/__tests__/git-source.test.ts +3 -3
  529. package/src/shared/workspace/__tests__/provisioner.test.ts +5 -5
  530. package/src/shared/workspace/__tests__/session-provision.test.ts +2 -2
  531. package/src/shared/workspace/__tests__/writeback-coordinator.integration.test.ts +8 -9
  532. package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +25 -25
  533. package/src/shared/workspace/provisioner.ts +1 -1
  534. package/src/shared/workspace/session-provision.ts +1 -1
  535. package/src/shared/workspace/sources/empty.ts +2 -2
  536. package/src/shared/workspace/sources/git.ts +3 -4
  537. package/src/shared/workspace/sources/local-path.ts +5 -6
  538. package/src/shared/workspace/stigmer-link.ts +1 -1
  539. package/src/shared/workspace/types.ts +2 -5
  540. package/src/shared/workspace/writeback-coordinator.ts +23 -12
  541. package/src/worker.ts +15 -3
  542. package/src/workflow-source.ts +15 -0
  543. package/src/workflows/__tests__/run-credential-interceptor.test.ts +178 -0
  544. package/src/workflows/execute-from-execution.ts +17 -0
  545. package/src/workflows/index.ts +5 -3
  546. package/src/workflows/interceptors/run-credential.ts +101 -0
  547. package/dist/activities/execute-cursor/delta-enricher.d.ts +0 -87
  548. package/dist/activities/execute-cursor/delta-enricher.js +0 -265
  549. package/dist/activities/execute-cursor/delta-enricher.js.map +0 -1
  550. package/dist/activities/execute-cursor/message-translator.js +0 -2040
  551. package/dist/activities/execute-cursor/message-translator.js.map +0 -1
  552. package/dist/activities/execute-cursor/todo-tracker.d.ts +0 -40
  553. package/dist/activities/execute-cursor/todo-tracker.js +0 -80
  554. package/dist/activities/execute-cursor/todo-tracker.js.map +0 -1
  555. package/dist/activities/execute-deep-agent/execution-state.d.ts +0 -54
  556. package/dist/activities/execute-deep-agent/execution-state.js +0 -68
  557. package/dist/activities/execute-deep-agent/execution-state.js.map +0 -1
  558. package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +0 -65
  559. package/dist/activities/execute-deep-agent/status-builder-shared.js +0 -90
  560. package/dist/activities/execute-deep-agent/status-builder-shared.js.map +0 -1
  561. package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +0 -113
  562. package/dist/activities/execute-deep-agent/subagent-tracker.js +0 -400
  563. package/dist/activities/execute-deep-agent/subagent-tracker.js.map +0 -1
  564. package/dist/activities/execute-deep-agent/v3-events.d.ts +0 -102
  565. package/dist/activities/execute-deep-agent/v3-events.js +0 -35
  566. package/dist/activities/execute-deep-agent/v3-events.js.map +0 -1
  567. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.d.ts +0 -15
  568. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js +0 -235
  569. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js.map +0 -1
  570. package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +0 -111
  571. package/dist/activities/execute-deep-agent/v3-status-builder.js +0 -457
  572. package/dist/activities/execute-deep-agent/v3-status-builder.js.map +0 -1
  573. package/dist/shared/execution-status-writer.d.ts +0 -31
  574. package/dist/shared/execution-status-writer.js +0 -43
  575. package/dist/shared/execution-status-writer.js.map +0 -1
  576. package/src/activities/execute-cursor/__tests__/delta-enricher.test.ts +0 -310
  577. package/src/activities/execute-cursor/__tests__/message-translator.test.ts +0 -1033
  578. package/src/activities/execute-cursor/__tests__/todo-tracker.test.ts +0 -498
  579. package/src/activities/execute-cursor/delta-enricher.ts +0 -307
  580. package/src/activities/execute-cursor/message-translator.ts +0 -2319
  581. package/src/activities/execute-cursor/todo-tracker.ts +0 -91
  582. package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +0 -148
  583. package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +0 -154
  584. package/src/activities/execute-deep-agent/__tests__/status-builder-shared.test.ts +0 -47
  585. package/src/activities/execute-deep-agent/__tests__/v3-protocol-normalizer.test.ts +0 -324
  586. package/src/activities/execute-deep-agent/execution-state.ts +0 -78
  587. package/src/activities/execute-deep-agent/status-builder-shared.ts +0 -142
  588. package/src/activities/execute-deep-agent/subagent-tracker.ts +0 -479
  589. package/src/activities/execute-deep-agent/v3-events.ts +0 -153
  590. package/src/activities/execute-deep-agent/v3-protocol-normalizer.ts +0 -264
  591. package/src/activities/execute-deep-agent/v3-status-builder.ts +0 -565
  592. package/src/shared/execution-status-writer.ts +0 -56
package/README.md CHANGED
@@ -111,7 +111,7 @@ These are orthogonal. The **desktop runner** is the canonical case where they di
111
111
 
112
112
  The transport setting drives two credential modes:
113
113
 
114
- - **Direct mode** (local / OSS): you provide `CURSOR_API_KEY` directly (for the Cursor harness); `STIGMER_TOKEN` is optional because a local Stigmer server has no auth. `STIGMER_PROXY_ENDPOINT` is unset.
114
+ - **Direct mode** (local / OSS): you provide `CURSOR_API_KEY` directly (for the Cursor harness); `STIGMER_TOKEN` is optional against a trusted-local server, which verifies no credential, and is the runner's own API key against a self-hosted server with sign-in on (the run's per-run credential arrives with each dispatch; see `src/shared/run-credential.ts`). `STIGMER_PROXY_ENDPOINT` is unset.
115
115
  - **Proxy mode** (cloud / managed runners): `STIGMER_PROXY_ENDPOINT` and `STIGMER_TOKEN` are required. You do not supply `CURSOR_API_KEY` — the proxy validates your token and injects the real Cursor key upstream. The runner sets `CURSOR_BACKEND_URL` / `CURSOR_API_BASE_URL` to the proxy endpoint automatically; these are runner-managed, not configuration you set.
116
116
 
117
117
  ## Required infrastructure
@@ -235,3 +235,4 @@ These tune internal behavior or support testing. Most operators never set them.
235
235
  - **[Embedding integration guide](https://stigmer.ai/docs/guides/runners/embedding)** — building a desktop client (local execution) and a web client (cloud execution), including the per-audience configuration each one passes.
236
236
  - **SDK `RunnerAdapter` and `executionTarget`** — the local-execution surfaces in `@stigmer/react` and `@stigmer/sdk`. The [embedding guide](https://stigmer.ai/docs/guides/runners/embedding) covers them today; a dedicated SDK reference is forthcoming.
237
237
  - **Public API** — `src/index.ts` exports `createStigmerRunner` and `createStigmerRunnerManager` with typed options and inline examples.
238
+ - **[Adding a harness](src/harness/README.md)** — the turn runtime, the adapter contract, the contract kit, and the checklist of files inside and outside the runner a new harness touches.
@@ -1 +1 @@
1
- {"hash":"6b6b5d40b5a502b8","builtAt":"2026-09-14T12:16:21.904Z","fileCount":326}
1
+ {"hash":"743b3c1774352cc9","builtAt":"2026-09-17T10:35:20.685Z","fileCount":329}
@@ -133,7 +133,7 @@ export interface SubstrateCapabilities {
133
133
  * and stamps the source at interrupt time (`true`); the Cursor substrate's
134
134
  * provenance is a reconstruction-time projection over the persisted tool call,
135
135
  * not a property of the hook's deny decision, so it is `false` here and is
136
- * covered instead by the message-translator and corpus suites.
136
+ * covered instead by the translator, boundary-rows and corpus suites.
137
137
  */
138
138
  readonly surfacesGatePolicySource: boolean;
139
139
  }
@@ -14,7 +14,7 @@
14
14
  * and driven by the framework's own activity environment. Both harnesses now
15
15
  * run on it (`execute-cursor/__test-utils__/hermetic-cursor.ts`,
16
16
  * `execute-deep-agent/__test-utils__/hermetic-deep-agent.ts`), and the earlier
17
- * native tests were re-homed onto the native driver (S3 M0), their assertions
17
+ * native tests were re-homed onto the native driver (#1096), their assertions
18
18
  * carried into `execute-deep-agent/__tests__/hermetic/`.
19
19
  *
20
20
  * What is generic here and what is not: everything an activity touches that is
@@ -55,11 +55,22 @@
55
55
  * Determinism: the clock is faked for `Date` ONLY (`vi.useFakeTimers({ toFake:
56
56
  * ["Date"] })`) and TICKS — the harness double advances it a fixed quantum per
57
57
  * script step through {@link ScriptedClock}. Frozen time would make
58
- * `delta-enricher.ts`'s persist debounce (`Date.now() - lastPersistTime`) never
58
+ * the streaming scheduler's cadence (`Date.now()` against its last send) never
59
59
  * elapse and silently skip the mid-stream persist path production always runs;
60
60
  * a ticking clock runs the same path and lands on the same instants every run.
61
61
  * Timers stay real so the periodic heartbeat and the stall watchdog behave.
62
62
  *
63
+ * The live posture (#1097's live-run gate): a `CURSOR_API_KEY`-gated live
64
+ * instrument keeps all three substitutions above — the real `Context`, the
65
+ * record behind the client, the temp environment — and drops only the
66
+ * harness's SDK double, so the REAL activity runs against the REAL vendor SDK
67
+ * with everything the activity persists still readable from the record.
68
+ * Two things differ from a hermetic run and both are the caller's explicit
69
+ * choice: no `ScriptedClock` is installed (the real SDK is not ticked, and a
70
+ * frozen clock would skip the persist cadence production runs), and the
71
+ * environment may name an `eventRecordingDir` so the run leaves a recording.
72
+ * The harness's driver names the entry (`beginLiveCursorScenario`).
73
+ *
63
74
  * Not in scope: this module never edits a production module and never
64
75
  * normalizes output. If a golden is not byte-stable, the volatile source is
65
76
  * controlled at its origin or the surprise is escalated — never redacted here.
@@ -120,6 +131,8 @@ export declare class ExecutionRecord {
120
131
  private readonly controlSignal;
121
132
  /** Every `updateStatus` payload, in order, snapshotted at write time. */
122
133
  readonly persisted: AgentExecutionStatus[];
134
+ /** Fired after every full-status `applyStatusUpdate`; {@link whenToolCallsSettled} subscribes here. */
135
+ private readonly persistListeners;
123
136
  /** Setup-progress labels reported before the stream started, in order. */
124
137
  readonly setupProgress: string[];
125
138
  /**
@@ -142,6 +155,37 @@ export declare class ExecutionRecord {
142
155
  get persistedPhases(): ExecutionPhase[];
143
156
  /** Every tool call on the held transcript (top-level messages), in order. */
144
157
  toolCalls(): ToolCall[];
158
+ /**
159
+ * Resolves once every one of `ids` is a SETTLED row (not RUNNING) in a status
160
+ * the activity has persisted — root messages and every sub-agent's alike.
161
+ * Resolves at once for an empty list or when they already are.
162
+ *
163
+ * This is the barrier a real model gives the runtime for free and a
164
+ * scripted one does not: a model that takes 300 ms to answer never starts
165
+ * its next turn before the loop has folded and persisted the tool results
166
+ * it is answering, while `ScriptedModel` answers instantly and LangGraph's
167
+ * producer can run a whole turn ahead of the consumer while the consumer
168
+ * awaits one mid-stream persist (on a git workspace that persist shells out
169
+ * for `file_change_progress`). The stamps the consumer writes at apply time
170
+ * then land on either side of the scripted clock's next tick depending on
171
+ * I/O timing — a golden that flips between `:01` and `:02` on the day. The
172
+ * driver awaits this before it ticks (`hermetic-deep-agent.ts`), so every
173
+ * stamp of turn N precedes turn N+1's instant, run after run.
174
+ *
175
+ * Why "settled" and not "seen": the row's `completedAt` is stamped when the
176
+ * tool's end event is applied, and the producer calls the next model turn
177
+ * right after emitting that event, so a barrier on the row merely existing
178
+ * would still race the completion stamp. The persist that carries the
179
+ * settled row always exists: a tool's finish forces one (the builder's
180
+ * force flag), and a turn followed by another turn always has a tool call.
181
+ *
182
+ * Bounded by real time (timers are real under the scripted clock): a
183
+ * scenario that breaks the fact above — a persist that never carries the
184
+ * row — fails naming the ids still open, never hangs.
185
+ */
186
+ whenToolCallsSettled(ids: readonly string[], timeoutMs?: number): Promise<void>;
187
+ /** The ids of every row not RUNNING in the held status, across the root and every sub-agent transcript. */
188
+ private settledToolCallIds;
145
189
  /** The tool calls currently paused for a decision. */
146
190
  waitingToolCalls(): ToolCall[];
147
191
  /**
@@ -198,6 +242,15 @@ export declare function bindHermeticClient(client: StigmerClient): void;
198
242
  export declare function hermeticStigmerClientModule(): {
199
243
  StigmerClient: new () => StigmerClient;
200
244
  };
245
+ export interface HermeticEnvironmentOptions {
246
+ /**
247
+ * Where the Cursor event recorder writes this run's raw SDK recording
248
+ * (`<dir>/<executionId>.cursor-events.jsonl`). Named ONLY by a live
249
+ * instrument, whose point is a recording of the real SDK; a hermetic
250
+ * scenario leaves it unset and the variable is cleared for the run.
251
+ */
252
+ readonly eventRecordingDir?: string;
253
+ }
201
254
  export interface HermeticEnvironment {
202
255
  /** The temp `HOME` (the runner's `~/.stigmer` lands under it). */
203
256
  readonly home: string;
@@ -213,21 +266,22 @@ export interface HermeticEnvironment {
213
266
  * `beforeAll`) — the fingerprint secret is memoized per process on first use,
214
267
  * and vitest isolates files in forks, so per-file is the natural unit.
215
268
  */
216
- export declare function createHermeticEnvironment(): HermeticEnvironment;
269
+ export declare function createHermeticEnvironment(options?: HermeticEnvironmentOptions): HermeticEnvironment;
217
270
  /**
218
271
  * A deterministic, TICKING clock: `Date` AND `performance` are faked and
219
272
  * advance together; timers stay real (the periodic heartbeat, the stall
220
273
  * watchdog, `withTimeout` all need them). The harness double calls
221
274
  * {@link ScriptedClock.tick} once per script step, so every clock-based
222
- * decision on the activity path — status timestamps, the enricher's persist
223
- * debounce, cache TTLs (`Date`); the streaming scheduler's persist cadence
275
+ * decision on the activity path — status timestamps, the builder's row
276
+ * instants, cache TTLs (`Date`); the streaming scheduler's persist cadence
224
277
  * (`performance.now()`) — sees the same instants run after run and runs the
225
278
  * same branches production runs.
226
279
  *
227
- * Why both (S3 M5, Q-M5-7; F-M2a-20): until M5 only `Date` was faked, so the
280
+ * Why both (since #1096): until then only `Date` was faked, so the
228
281
  * scheduler paced persists on REAL elapsed time and `fileChangeProgress`,
229
282
  * which rides persists, could gain or lose a capture under load — a golden
230
- * flake seen twice across S3. One clock, two faces: `tick` advances through
283
+ * flake seen twice while the native adapter moved onto the runtime. One clock,
284
+ * two faces: `tick` advances through
231
285
  * the fake clock's own `tick` (`vi.advanceTimersByTime`), which moves both
232
286
  * `Date` and `performance.now()`; `vi.setSystemTime` would move `Date` alone
233
287
  * (fake-timers keeps `performance` monotonic across a system-time jump), so
@@ -14,7 +14,7 @@
14
14
  * and driven by the framework's own activity environment. Both harnesses now
15
15
  * run on it (`execute-cursor/__test-utils__/hermetic-cursor.ts`,
16
16
  * `execute-deep-agent/__test-utils__/hermetic-deep-agent.ts`), and the earlier
17
- * native tests were re-homed onto the native driver (S3 M0), their assertions
17
+ * native tests were re-homed onto the native driver (#1096), their assertions
18
18
  * carried into `execute-deep-agent/__tests__/hermetic/`.
19
19
  *
20
20
  * What is generic here and what is not: everything an activity touches that is
@@ -55,11 +55,22 @@
55
55
  * Determinism: the clock is faked for `Date` ONLY (`vi.useFakeTimers({ toFake:
56
56
  * ["Date"] })`) and TICKS — the harness double advances it a fixed quantum per
57
57
  * script step through {@link ScriptedClock}. Frozen time would make
58
- * `delta-enricher.ts`'s persist debounce (`Date.now() - lastPersistTime`) never
58
+ * the streaming scheduler's cadence (`Date.now()` against its last send) never
59
59
  * elapse and silently skip the mid-stream persist path production always runs;
60
60
  * a ticking clock runs the same path and lands on the same instants every run.
61
61
  * Timers stay real so the periodic heartbeat and the stall watchdog behave.
62
62
  *
63
+ * The live posture (#1097's live-run gate): a `CURSOR_API_KEY`-gated live
64
+ * instrument keeps all three substitutions above — the real `Context`, the
65
+ * record behind the client, the temp environment — and drops only the
66
+ * harness's SDK double, so the REAL activity runs against the REAL vendor SDK
67
+ * with everything the activity persists still readable from the record.
68
+ * Two things differ from a hermetic run and both are the caller's explicit
69
+ * choice: no `ScriptedClock` is installed (the real SDK is not ticked, and a
70
+ * frozen clock would skip the persist cadence production runs), and the
71
+ * environment may name an `eventRecordingDir` so the run leaves a recording.
72
+ * The harness's driver names the entry (`beginLiveCursorScenario`).
73
+ *
63
74
  * Not in scope: this module never edits a production module and never
64
75
  * normalizes output. If a golden is not byte-stable, the volatile source is
65
76
  * controlled at its origin or the surprise is escalated — never redacted here.
@@ -106,6 +117,8 @@ export class ExecutionRecord {
106
117
  controlSignal;
107
118
  /** Every `updateStatus` payload, in order, snapshotted at write time. */
108
119
  persisted = [];
120
+ /** Fired after every full-status `applyStatusUpdate`; {@link whenToolCallsSettled} subscribes here. */
121
+ persistListeners = new Set();
109
122
  /** Setup-progress labels reported before the stream started, in order. */
110
123
  setupProgress = [];
111
124
  /**
@@ -156,6 +169,75 @@ export class ExecutionRecord {
156
169
  toolCalls() {
157
170
  return this.execution.status?.messages.flatMap((m) => m.toolCalls) ?? [];
158
171
  }
172
+ /**
173
+ * Resolves once every one of `ids` is a SETTLED row (not RUNNING) in a status
174
+ * the activity has persisted — root messages and every sub-agent's alike.
175
+ * Resolves at once for an empty list or when they already are.
176
+ *
177
+ * This is the barrier a real model gives the runtime for free and a
178
+ * scripted one does not: a model that takes 300 ms to answer never starts
179
+ * its next turn before the loop has folded and persisted the tool results
180
+ * it is answering, while `ScriptedModel` answers instantly and LangGraph's
181
+ * producer can run a whole turn ahead of the consumer while the consumer
182
+ * awaits one mid-stream persist (on a git workspace that persist shells out
183
+ * for `file_change_progress`). The stamps the consumer writes at apply time
184
+ * then land on either side of the scripted clock's next tick depending on
185
+ * I/O timing — a golden that flips between `:01` and `:02` on the day. The
186
+ * driver awaits this before it ticks (`hermetic-deep-agent.ts`), so every
187
+ * stamp of turn N precedes turn N+1's instant, run after run.
188
+ *
189
+ * Why "settled" and not "seen": the row's `completedAt` is stamped when the
190
+ * tool's end event is applied, and the producer calls the next model turn
191
+ * right after emitting that event, so a barrier on the row merely existing
192
+ * would still race the completion stamp. The persist that carries the
193
+ * settled row always exists: a tool's finish forces one (the builder's
194
+ * force flag), and a turn followed by another turn always has a tool call.
195
+ *
196
+ * Bounded by real time (timers are real under the scripted clock): a
197
+ * scenario that breaks the fact above — a persist that never carries the
198
+ * row — fails naming the ids still open, never hangs.
199
+ */
200
+ whenToolCallsSettled(ids, timeoutMs = 10_000) {
201
+ const unsettled = () => {
202
+ const settled = this.settledToolCallIds();
203
+ return ids.filter((id) => !settled.has(id));
204
+ };
205
+ if (unsettled().length === 0)
206
+ return Promise.resolve();
207
+ return new Promise((resolve, reject) => {
208
+ const timer = setTimeout(() => {
209
+ this.persistListeners.delete(check);
210
+ reject(new Error(`ExecutionRecord: tool call(s) ${unsettled().join(", ")} never settled in a persisted status ` +
211
+ `within ${timeoutMs} ms (${this.persisted.length} persists seen). A model turn was asked to ` +
212
+ `wait for the results it answers; the loop never persisted them — a scenario or runtime bug.`));
213
+ }, timeoutMs);
214
+ const check = () => {
215
+ if (unsettled().length > 0)
216
+ return;
217
+ clearTimeout(timer);
218
+ this.persistListeners.delete(check);
219
+ resolve();
220
+ };
221
+ this.persistListeners.add(check);
222
+ });
223
+ }
224
+ /** The ids of every row not RUNNING in the held status, across the root and every sub-agent transcript. */
225
+ settledToolCallIds() {
226
+ const out = new Set();
227
+ const status = this.execution.status;
228
+ if (!status)
229
+ return out;
230
+ const transcripts = [status.messages, ...status.subAgentExecutions.map((s) => s.messages)];
231
+ for (const messages of transcripts) {
232
+ for (const message of messages) {
233
+ for (const tc of message.toolCalls) {
234
+ if (tc.status !== ToolCallStatus.TOOL_CALL_RUNNING)
235
+ out.add(tc.id);
236
+ }
237
+ }
238
+ }
239
+ return out;
240
+ }
159
241
  /** The tool calls currently paused for a decision. */
160
242
  waitingToolCalls() {
161
243
  return this.toolCalls().filter((tc) => tc.status === ToolCallStatus.TOOL_CALL_WAITING_APPROVAL);
@@ -203,6 +285,8 @@ export class ExecutionRecord {
203
285
  return ExecutionControlSignal.UNSPECIFIED;
204
286
  }
205
287
  this.execution.status = clone(AgentExecutionStatusSchema, snapshot);
288
+ for (const listener of [...this.persistListeners])
289
+ listener();
206
290
  return this.controlSignal(snapshot);
207
291
  }
208
292
  /**
@@ -283,19 +367,24 @@ export function hermeticStigmerClientModule() {
283
367
  * (an absent store flips capture off — a different code path).
284
368
  * - `STIGMER_RUNNER_HITL_SECRET`: the one randomness source on the activity
285
369
  * path, pinned so grant tokens and fingerprints are byte-stable.
286
- * - `CURSOR_EVENT_RECORD_DIR` cleared: never write recordings from a test.
370
+ * - `CURSOR_EVENT_RECORD_DIR` cleared: never write recordings from a test —
371
+ * unless the caller names an `eventRecordingDir`, the live instruments'
372
+ * opt-in (below), in which case this environment SETS it. Either way the
373
+ * variable has one owner here, and dispose restores it.
287
374
  */
288
375
  const PINNED_ENV = {
289
376
  ARTIFACT_STORAGE_TYPE: "local",
290
377
  STIGMER_RUNNER_HITL_SECRET: "hermetic-fixture-secret-do-not-use-in-production",
291
378
  };
292
- const CLEARED_ENV = ["CURSOR_EVENT_RECORD_DIR", "STIGMER_PROXY_ENDPOINT", "STIGMER_CLOUD_API_URL"];
379
+ const CLEARED_ENV = ["STIGMER_PROXY_ENDPOINT", "STIGMER_CLOUD_API_URL"];
380
+ /** The one name the Cursor recorder is switched on by (`turn-settle.ts` reads it). */
381
+ const CURSOR_EVENT_RECORD_DIR = "CURSOR_EVENT_RECORD_DIR";
293
382
  /**
294
383
  * Create the temp tree and pin the env vars. Call once per test FILE (in
295
384
  * `beforeAll`) — the fingerprint secret is memoized per process on first use,
296
385
  * and vitest isolates files in forks, so per-file is the natural unit.
297
386
  */
298
- export function createHermeticEnvironment() {
387
+ export function createHermeticEnvironment(options = {}) {
299
388
  const root = mkdtempSync(join(tmpdir(), "stigmer-hermetic-"));
300
389
  const home = join(root, "home");
301
390
  const workspaceRootDir = join(root, "workspaces");
@@ -315,6 +404,7 @@ export function createHermeticEnvironment() {
315
404
  set(k, v);
316
405
  for (const k of CLEARED_ENV)
317
406
  set(k, undefined);
407
+ set(CURSOR_EVENT_RECORD_DIR, options.eventRecordingDir);
318
408
  let disposed = false;
319
409
  return {
320
410
  home,
@@ -342,15 +432,16 @@ export function createHermeticEnvironment() {
342
432
  * advance together; timers stay real (the periodic heartbeat, the stall
343
433
  * watchdog, `withTimeout` all need them). The harness double calls
344
434
  * {@link ScriptedClock.tick} once per script step, so every clock-based
345
- * decision on the activity path — status timestamps, the enricher's persist
346
- * debounce, cache TTLs (`Date`); the streaming scheduler's persist cadence
435
+ * decision on the activity path — status timestamps, the builder's row
436
+ * instants, cache TTLs (`Date`); the streaming scheduler's persist cadence
347
437
  * (`performance.now()`) — sees the same instants run after run and runs the
348
438
  * same branches production runs.
349
439
  *
350
- * Why both (S3 M5, Q-M5-7; F-M2a-20): until M5 only `Date` was faked, so the
440
+ * Why both (since #1096): until then only `Date` was faked, so the
351
441
  * scheduler paced persists on REAL elapsed time and `fileChangeProgress`,
352
442
  * which rides persists, could gain or lose a capture under load — a golden
353
- * flake seen twice across S3. One clock, two faces: `tick` advances through
443
+ * flake seen twice while the native adapter moved onto the runtime. One clock,
444
+ * two faces: `tick` advances through
354
445
  * the fake clock's own `tick` (`vi.advanceTimersByTime`), which moves both
355
446
  * `Date` and `performance.now()`; `vi.setSystemTime` would move `Date` alone
356
447
  * (fake-timers keeps `performance` monotonic across a system-time jump), so
@@ -1 +1 @@
1
- {"version":3,"file":"hermetic-activity.js","sourceRoot":"","sources":["../../src/__test-utils__/hermetic-activity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hermetic-activity.js","sourceRoot":"","sources":["../../src/__test-utils__/hermetic-activity.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,15 @@
23
23
  * never consulted and adding an entry is byte-invisible to the other
24
24
  * harness's goldens (verified when the native entry landed: Cursor's
25
25
  * seventeen unchanged).
26
+ *
27
+ * The live posture (`stubRegistryFetch({ live: true })`): a live instrument
28
+ * runs the real activity against the REAL `@cursor/sdk`, whose cloud-api
29
+ * client (`Cursor.models.list`, the user-key token exchange) goes through
30
+ * global `fetch` — only its Connect RPC stream rides connect-node. Such a run
31
+ * keeps this document for the registry (pricing and tier stay pinned; nothing
32
+ * a live turn proves lives there) and lets every other URL reach the network
33
+ * through the `fetch` that was global before the stub. The refusal stays the
34
+ * default: a hermetic run that grows a network dependency must still fail.
26
35
  */
27
36
  /** The pinned model of every Cursor hermetic run; in the registry document AND in the Cursor double's catalog. */
28
37
  export declare const FIXTURE_MODEL = "composer-2.5";
@@ -71,11 +80,21 @@ export declare const REGISTRY_DOCUMENT: {
71
80
  };
72
81
  }];
73
82
  };
83
+ export interface StubRegistryFetchOptions {
84
+ /**
85
+ * The live posture (header): every URL that is not the registry reaches the
86
+ * network through the pre-stub `fetch`. Default false — refuse, and fail the
87
+ * run.
88
+ */
89
+ readonly live?: boolean;
90
+ }
74
91
  /**
75
- * Stub `fetch` to answer the registry document and refuse everything else.
76
- * Returns the URLs fetched, for the "no other network" assertion.
92
+ * Stub `fetch` to answer the registry document and — by default — refuse
93
+ * everything else. Returns the URLs fetched, for the "no other network"
94
+ * assertion (and, in the live posture, for the record of what a real turn
95
+ * dialled).
77
96
  */
78
- export declare function stubRegistryFetch(): {
97
+ export declare function stubRegistryFetch(options?: StubRegistryFetchOptions): {
79
98
  readonly urls: string[];
80
99
  restore(): void;
81
100
  };
@@ -23,6 +23,15 @@
23
23
  * never consulted and adding an entry is byte-invisible to the other
24
24
  * harness's goldens (verified when the native entry landed: Cursor's
25
25
  * seventeen unchanged).
26
+ *
27
+ * The live posture (`stubRegistryFetch({ live: true })`): a live instrument
28
+ * runs the real activity against the REAL `@cursor/sdk`, whose cloud-api
29
+ * client (`Cursor.models.list`, the user-key token exchange) goes through
30
+ * global `fetch` — only its Connect RPC stream rides connect-node. Such a run
31
+ * keeps this document for the registry (pricing and tier stay pinned; nothing
32
+ * a live turn proves lives there) and lets every other URL reach the network
33
+ * through the `fetch` that was global before the stub. The refusal stays the
34
+ * default: a hermetic run that grows a network dependency must still fail.
26
35
  */
27
36
  import { vi } from "vitest";
28
37
  /** The pinned model of every Cursor hermetic run; in the registry document AND in the Cursor double's catalog. */
@@ -72,18 +81,24 @@ export const REGISTRY_DOCUMENT = {
72
81
  ],
73
82
  };
74
83
  /**
75
- * Stub `fetch` to answer the registry document and refuse everything else.
76
- * Returns the URLs fetched, for the "no other network" assertion.
84
+ * Stub `fetch` to answer the registry document and — by default — refuse
85
+ * everything else. Returns the URLs fetched, for the "no other network"
86
+ * assertion (and, in the live posture, for the record of what a real turn
87
+ * dialled).
77
88
  */
78
- export function stubRegistryFetch() {
89
+ export function stubRegistryFetch(options = {}) {
79
90
  const urls = [];
80
- vi.stubGlobal("fetch", vi.fn(async (input) => {
91
+ const networkFetch = globalThis.fetch;
92
+ vi.stubGlobal("fetch", vi.fn(async (input, init) => {
81
93
  const url = typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
82
94
  urls.push(url);
83
- if (!url.includes("/model-registry")) {
84
- throw new Error(`hermetic run attempted a non-registry network call: ${url}`);
95
+ if (url.includes("/model-registry")) {
96
+ return { ok: true, status: 200, json: async () => REGISTRY_DOCUMENT };
97
+ }
98
+ if (options.live) {
99
+ return networkFetch(input, init);
85
100
  }
86
- return { ok: true, status: 200, json: async () => REGISTRY_DOCUMENT };
101
+ throw new Error(`hermetic run attempted a non-registry network call: ${url}`);
87
102
  }));
88
103
  return { urls, restore: () => vi.unstubAllGlobals() };
89
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model-registry-fixture.js","sourceRoot":"","sources":["../../src/__test-utils__/model-registry-fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B,kHAAkH;AAClH,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAE5C,kEAAkE;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEvD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE;QACN;YACE,EAAE,EAAE,aAAa;YACjB,WAAW,EAAE,iCAAiC;YAC9C,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;YAC9B,OAAO,EAAE;gBACP,oBAAoB,EAAE,GAAG;gBACzB,qBAAqB,EAAE,GAAG;gBAC1B,yBAAyB,EAAE,GAAG;gBAC9B,wBAAwB,EAAE,GAAG;aAC9B;YACD,eAAe,EAAE;gBACf,IAAI,EAAE;oBACJ,oBAAoB,EAAE,GAAG;oBACzB,qBAAqB,EAAE,IAAI;oBAC3B,yBAAyB,EAAE,GAAG;oBAC9B,wBAAwB,EAAE,GAAG;iBAC9B;aACF;SACF;QACD;YACE,EAAE,EAAE,oBAAoB;YACxB,WAAW,EAAE,qCAAqC;YAClD,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;YAC9B,OAAO,EAAE;gBACP,oBAAoB,EAAE,GAAG;gBACzB,qBAAqB,EAAE,GAAG;gBAC1B,yBAAyB,EAAE,IAAI;gBAC/B,wBAAwB,EAAE,GAAG;aAC9B;SACF;KACF;CACO,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAA6B,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QACpG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,uDAAuD,GAAG,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,iBAAiB,EAAyB,CAAC;IAC/F,CAAC,CAAC,CACH,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"model-registry-fixture.js","sourceRoot":"","sources":["../../src/__test-utils__/model-registry-fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B,kHAAkH;AAClH,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAE5C,kEAAkE;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEvD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE;QACN;YACE,EAAE,EAAE,aAAa;YACjB,WAAW,EAAE,iCAAiC;YAC9C,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;YAC9B,OAAO,EAAE;gBACP,oBAAoB,EAAE,GAAG;gBACzB,qBAAqB,EAAE,GAAG;gBAC1B,yBAAyB,EAAE,GAAG;gBAC9B,wBAAwB,EAAE,GAAG;aAC9B;YACD,eAAe,EAAE;gBACf,IAAI,EAAE;oBACJ,oBAAoB,EAAE,GAAG;oBACzB,qBAAqB,EAAE,IAAI;oBAC3B,yBAAyB,EAAE,GAAG;oBAC9B,wBAAwB,EAAE,GAAG;iBAC9B;aACF;SACF;QACD;YACE,EAAE,EAAE,oBAAoB;YACxB,WAAW,EAAE,qCAAqC;YAClD,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;YAC9B,OAAO,EAAE;gBACP,oBAAoB,EAAE,GAAG;gBACzB,qBAAqB,EAAE,GAAG;gBAC1B,yBAAyB,EAAE,IAAI;gBAC/B,wBAAwB,EAAE,GAAG;aAC9B;SACF;KACF;CACO,CAAC;AAWX;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAoC,EAAE;IACtE,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC;IACtC,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAA6B,EAAE,IAAkB,EAAE,EAAE;QAChE,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QACpG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,IAAI,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,iBAAiB,EAAyB,CAAC;QAC/F,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,uDAAuD,GAAG,EAAE,CAAC,CAAC;IAChF,CAAC,CAAC,CACH,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC;AACxD,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The Cursor harness as a `HarnessContractSubject` — the REAL `createCursorAdapter()`
3
3
  * driven through the harness contract kit, with the kit's engine-neutral
4
- * scenario vocabulary translated onto S0's scripted `@cursor/sdk` double.
4
+ * scenario vocabulary translated onto the scripted `@cursor/sdk` double (#1048).
5
5
  *
6
6
  * The sibling of `gateway-substrate.ts` (the Cursor side of the approval
7
7
  * contract kit): the kit owns the invariants and the runtime stand-in, this
@@ -59,7 +59,7 @@
59
59
  * Every script that does not end in `fail`, `cancelled` or `hang` closes with
60
60
  * `finished({ result: <last say> })` so `run.wait()` has an answer.
61
61
  *
62
- * ── Two modelling decisions (S2 M4, Q-M4-4) ─────────────────────────────────
62
+ * ── Two modelling decisions (#1070) ─────────────────────────────────────────
63
63
  * A `propose` for an id this subject has already seen the hook ALLOW emits
64
64
  * nothing: the real SDK does not re-run a completed tool on resume — the parked
65
65
  * agent's conversation already holds the tool's result. A `propose` whose id
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The Cursor harness as a `HarnessContractSubject` — the REAL `createCursorAdapter()`
3
3
  * driven through the harness contract kit, with the kit's engine-neutral
4
- * scenario vocabulary translated onto S0's scripted `@cursor/sdk` double.
4
+ * scenario vocabulary translated onto the scripted `@cursor/sdk` double (#1048).
5
5
  *
6
6
  * The sibling of `gateway-substrate.ts` (the Cursor side of the approval
7
7
  * contract kit): the kit owns the invariants and the runtime stand-in, this
@@ -59,7 +59,7 @@
59
59
  * Every script that does not end in `fail`, `cancelled` or `hang` closes with
60
60
  * `finished({ result: <last say> })` so `run.wait()` has an answer.
61
61
  *
62
- * ── Two modelling decisions (S2 M4, Q-M4-4) ─────────────────────────────────
62
+ * ── Two modelling decisions (#1070) ─────────────────────────────────────────
63
63
  * A `propose` for an id this subject has already seen the hook ALLOW emits
64
64
  * nothing: the real SDK does not re-run a completed tool on resume — the parked
65
65
  * agent's conversation already holds the tool's result. A `propose` whose id
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Drive Cursor SDK events through the REAL pair the harness runs in production
3
+ * — `CursorTranslator` into `TranscriptBuilder` over an `AgentExecutionStatus`
4
+ * — and hand back what they built. The unit-test seam that replaced
5
+ * `new <accumulator>(messages, options)` in #1097 (the accumulator folded
6
+ * rows itself; now the translator emits events and the shared builder folds
7
+ * them), so the arms that read a row's shape after a sequence of SDK events
8
+ * keep their shape while the module under them changed.
9
+ *
10
+ * The same shape as the native translator's local `feedAll` in
11
+ * `execute-deep-agent/__tests__/translator-through-builder.test.ts`, shared
12
+ * here because seven Cursor test files read through it.
13
+ *
14
+ * Deltas follow the loop's discipline (`turn-stream.ts`): `observeDelta`
15
+ * queues, and the queue is drained into the builder after the NEXT stream
16
+ * event — or at {@link CursorFold.drain} for a caller that wants them applied
17
+ * now, the settle's own last drain before `finalize()`.
18
+ */
19
+ import type { InteractionUpdate, SDKMessage } from "@cursor/sdk";
20
+ import { type AgentExecutionStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
21
+ import type { AgentMessage, ToolCall } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
22
+ import { TranscriptBuilder } from "../../../harness/transcript/builder.js";
23
+ import { CursorTranslator, type CursorTranslatorOptions } from "../translator.js";
24
+ export interface CursorFoldOptions {
25
+ /** The status to build into; a fresh empty one when omitted. Its `messages` are the translator's seed. */
26
+ readonly status?: AgentExecutionStatus;
27
+ /**
28
+ * An existing `messages` array to build into BY REFERENCE (a test that
29
+ * hand-built its seeded rows and keeps asserting on the same objects). Wins
30
+ * over `status`'s own array.
31
+ */
32
+ readonly messages?: AgentMessage[];
33
+ readonly policies?: CursorTranslatorOptions["policies"];
34
+ readonly leases?: CursorTranslatorOptions["leases"];
35
+ }
36
+ export declare class CursorFold {
37
+ readonly status: AgentExecutionStatus;
38
+ readonly translator: CursorTranslator;
39
+ readonly builder: TranscriptBuilder;
40
+ constructor(options?: CursorFoldOptions);
41
+ /** One stream event, translated and folded, then the deltas queued so far — the loop's order. */
42
+ event(event: SDKMessage): this;
43
+ events(...events: SDKMessage[]): this;
44
+ /** One delta, queued — applied at the next {@link event} or {@link drain}. */
45
+ delta(update: InteractionUpdate): this;
46
+ drain(): this;
47
+ finalize(): this;
48
+ get messages(): AgentMessage[];
49
+ /** Every root row, in transcript order. */
50
+ rows(): ToolCall[];
51
+ row(callId: string): ToolCall;
52
+ }
53
+ /** Fold a sequence of stream events into a fresh transcript; the common one-liner. */
54
+ export declare function foldCursorEvents(events: readonly SDKMessage[], options?: CursorFoldOptions): CursorFold;
55
+ /**
56
+ * A builder over an existing `messages` array, kept BY REFERENCE (the status
57
+ * is given the array itself, never a copy), so a boundary test that built its
58
+ * rows by hand can hand them to `reconcileDeniedToolCalls` and keep asserting
59
+ * on the same objects.
60
+ */
61
+ export declare function builderOver(messages: AgentMessage[], executionId?: string): TranscriptBuilder;