@stigmer/runner 3.14.0 → 3.15.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 (331) hide show
  1. package/dist/.build-fingerprint +1 -1
  2. package/dist/__test-utils__/execution-record-fixture.d.ts +47 -0
  3. package/dist/__test-utils__/execution-record-fixture.js +68 -0
  4. package/dist/__test-utils__/execution-record-fixture.js.map +1 -0
  5. package/dist/__test-utils__/harness-contract/types.d.ts +166 -0
  6. package/dist/__test-utils__/harness-contract/types.js +49 -0
  7. package/dist/__test-utils__/harness-contract/types.js.map +1 -0
  8. package/dist/__test-utils__/hermetic-activity.d.ts +268 -0
  9. package/dist/__test-utils__/hermetic-activity.js +385 -0
  10. package/dist/__test-utils__/hermetic-activity.js.map +1 -0
  11. package/dist/__test-utils__/mock-client.d.ts +13 -0
  12. package/dist/__test-utils__/mock-client.js +45 -0
  13. package/dist/__test-utils__/mock-client.js.map +1 -0
  14. package/dist/__test-utils__/mock-workspace.d.ts +15 -0
  15. package/dist/__test-utils__/mock-workspace.js +21 -0
  16. package/dist/__test-utils__/mock-workspace.js.map +1 -0
  17. package/dist/__test-utils__/model-registry-fixture.d.ts +56 -0
  18. package/dist/__test-utils__/model-registry-fixture.js +66 -0
  19. package/dist/__test-utils__/model-registry-fixture.js.map +1 -0
  20. package/dist/__test-utils__/turn-input-fixture.d.ts +60 -0
  21. package/dist/__test-utils__/turn-input-fixture.js +118 -0
  22. package/dist/__test-utils__/turn-input-fixture.js.map +1 -0
  23. package/dist/activities/execute-cursor/__test-utils__/contract-subject.d.ts +107 -0
  24. package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +344 -0
  25. package/dist/activities/execute-cursor/__test-utils__/contract-subject.js.map +1 -0
  26. package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.d.ts +20 -0
  27. package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.js +58 -0
  28. package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.js.map +1 -1
  29. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +2 -32
  30. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -1
  31. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +148 -0
  32. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +257 -0
  33. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -0
  34. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +183 -0
  35. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +262 -0
  36. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -0
  37. package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.d.ts +138 -0
  38. package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js +191 -0
  39. package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js.map +1 -0
  40. package/dist/activities/execute-cursor/adapter.d.ts +55 -0
  41. package/dist/activities/execute-cursor/adapter.js +119 -0
  42. package/dist/activities/execute-cursor/adapter.js.map +1 -0
  43. package/dist/activities/execute-cursor/approval-state.d.ts +2 -2
  44. package/dist/activities/execute-cursor/approval-state.js.map +1 -1
  45. package/dist/activities/execute-cursor/capture-flow.d.ts +15 -30
  46. package/dist/activities/execute-cursor/capture-flow.js +17 -26
  47. package/dist/activities/execute-cursor/capture-flow.js.map +1 -1
  48. package/dist/activities/execute-cursor/cursor-capabilities.d.ts +23 -0
  49. package/dist/activities/execute-cursor/cursor-capabilities.js +33 -0
  50. package/dist/activities/execute-cursor/cursor-capabilities.js.map +1 -0
  51. package/dist/activities/execute-cursor/cursor-mcp-config.d.ts +2 -2
  52. package/dist/activities/execute-cursor/cursor-mcp-config.js.map +1 -1
  53. package/dist/activities/execute-cursor/fetch-interceptor.d.ts +15 -25
  54. package/dist/activities/execute-cursor/fetch-interceptor.js +39 -33
  55. package/dist/activities/execute-cursor/fetch-interceptor.js.map +1 -1
  56. package/dist/activities/execute-cursor/http2-interceptor.d.ts +21 -17
  57. package/dist/activities/execute-cursor/http2-interceptor.js +38 -31
  58. package/dist/activities/execute-cursor/http2-interceptor.js.map +1 -1
  59. package/dist/activities/execute-cursor/message-translator.d.ts +28 -19
  60. package/dist/activities/execute-cursor/message-translator.js +76 -27
  61. package/dist/activities/execute-cursor/message-translator.js.map +1 -1
  62. package/dist/activities/execute-cursor/prompt-builder.d.ts +180 -11
  63. package/dist/activities/execute-cursor/prompt-builder.js +171 -0
  64. package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
  65. package/dist/activities/execute-cursor/rejection-capture.d.ts +3 -6
  66. package/dist/activities/execute-cursor/rejection-capture.js +5 -7
  67. package/dist/activities/execute-cursor/rejection-capture.js.map +1 -1
  68. package/dist/activities/execute-cursor/session-lifecycle.d.ts +1 -4
  69. package/dist/activities/execute-cursor/session-lifecycle.js.map +1 -1
  70. package/dist/activities/execute-cursor/turn-boundary.d.ts +1 -1
  71. package/dist/activities/execute-cursor/turn-settle.d.ts +49 -0
  72. package/dist/activities/execute-cursor/turn-settle.js +507 -0
  73. package/dist/activities/execute-cursor/turn-settle.js.map +1 -0
  74. package/dist/activities/execute-cursor/turn-setup.d.ts +173 -0
  75. package/dist/activities/execute-cursor/turn-setup.js +496 -0
  76. package/dist/activities/execute-cursor/turn-setup.js.map +1 -0
  77. package/dist/activities/execute-cursor/turn-stream.d.ts +41 -71
  78. package/dist/activities/execute-cursor/turn-stream.js +70 -135
  79. package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
  80. package/dist/activities/execute-cursor/turn.d.ts +43 -0
  81. package/dist/activities/execute-cursor/turn.js +222 -0
  82. package/dist/activities/execute-cursor/turn.js.map +1 -0
  83. package/dist/activities/execute-cursor/usage-pricing.d.ts +38 -0
  84. package/dist/activities/execute-cursor/usage-pricing.js +50 -0
  85. package/dist/activities/execute-cursor/usage-pricing.js.map +1 -0
  86. package/dist/activities/execute-deep-agent/approval-file-change.d.ts +1 -1
  87. package/dist/activities/execute-deep-agent/approval-file-change.js +1 -1
  88. package/dist/activities/execute-deep-agent/environment.js +1 -1
  89. package/dist/activities/execute-deep-agent/environment.js.map +1 -1
  90. package/dist/activities/execute-deep-agent/setup.js +3 -2
  91. package/dist/activities/execute-deep-agent/setup.js.map +1 -1
  92. package/dist/activities/hydrate-workflow-execution.js +1 -1
  93. package/dist/activities/hydrate-workflow-execution.js.map +1 -1
  94. package/dist/config.d.ts +15 -0
  95. package/dist/config.js.map +1 -1
  96. package/dist/harness/capabilities.d.ts +87 -0
  97. package/dist/harness/capabilities.js +37 -0
  98. package/dist/harness/capabilities.js.map +1 -0
  99. package/dist/harness/persist-chokepoint.d.ts +74 -0
  100. package/dist/harness/persist-chokepoint.js +88 -0
  101. package/dist/harness/persist-chokepoint.js.map +1 -0
  102. package/dist/harness/registry.d.ts +106 -0
  103. package/dist/harness/registry.js +168 -0
  104. package/dist/harness/registry.js.map +1 -0
  105. package/dist/harness/run-turn.d.ts +53 -0
  106. package/dist/harness/run-turn.js +528 -0
  107. package/dist/harness/run-turn.js.map +1 -0
  108. package/dist/harness/stop-controller.d.ts +50 -0
  109. package/dist/harness/stop-controller.js +62 -0
  110. package/dist/harness/stop-controller.js.map +1 -0
  111. package/dist/harness/terminal-table.d.ts +141 -0
  112. package/dist/harness/terminal-table.js +239 -0
  113. package/dist/harness/terminal-table.js.map +1 -0
  114. package/dist/harness/turn-context.d.ts +523 -0
  115. package/dist/harness/turn-context.js +739 -0
  116. package/dist/harness/turn-context.js.map +1 -0
  117. package/dist/harness/types.d.ts +448 -0
  118. package/dist/harness/types.js +64 -0
  119. package/dist/harness/types.js.map +1 -0
  120. package/dist/harness/usage-accumulator.d.ts +68 -0
  121. package/dist/harness/usage-accumulator.js +101 -0
  122. package/dist/harness/usage-accumulator.js.map +1 -0
  123. package/dist/harness-adapters.d.ts +27 -0
  124. package/dist/harness-adapters.js +28 -0
  125. package/dist/harness-adapters.js.map +1 -0
  126. package/dist/main.js.map +1 -1
  127. package/dist/runner-manager.js +64 -48
  128. package/dist/runner-manager.js.map +1 -1
  129. package/dist/runner.d.ts +5 -4
  130. package/dist/runner.js +65 -64
  131. package/dist/runner.js.map +1 -1
  132. package/dist/shared/approval-policy.d.ts +1 -1
  133. package/dist/shared/approval-policy.js.map +1 -1
  134. package/dist/{activities/execute-cursor → shared}/attachment-resolver.d.ts +2 -2
  135. package/dist/{activities/execute-cursor → shared}/attachment-resolver.js +5 -5
  136. package/dist/shared/attachment-resolver.js.map +1 -0
  137. package/dist/{activities/execute-cursor → shared}/blueprint-resolver.d.ts +7 -5
  138. package/dist/{activities/execute-cursor → shared}/blueprint-resolver.js +3 -63
  139. package/dist/shared/blueprint-resolver.js.map +1 -0
  140. package/dist/shared/channel-attachment.d.ts +1 -1
  141. package/dist/shared/channel-attachment.js.map +1 -1
  142. package/dist/{activities/execute-cursor → shared}/cost-guard.d.ts +5 -1
  143. package/dist/{activities/execute-cursor → shared}/cost-guard.js +5 -1
  144. package/dist/shared/cost-guard.js.map +1 -0
  145. package/dist/{activities/execute-cursor → shared}/env-resolver.d.ts +1 -1
  146. package/dist/shared/env-resolver.js.map +1 -0
  147. package/dist/{activities/execute-cursor → shared}/exact-apply.d.ts +1 -1
  148. package/dist/{activities/execute-cursor → shared}/exact-apply.js +6 -6
  149. package/dist/shared/exact-apply.js.map +1 -0
  150. package/dist/shared/execution-context.d.ts +35 -0
  151. package/dist/shared/execution-context.js +38 -0
  152. package/dist/shared/execution-context.js.map +1 -0
  153. package/dist/{activities/execute-cursor → shared}/extract-structured-output.d.ts +5 -2
  154. package/dist/{activities/execute-cursor → shared}/extract-structured-output.js +9 -6
  155. package/dist/shared/extract-structured-output.js.map +1 -0
  156. package/dist/shared/filereview/capture.d.ts +1 -1
  157. package/dist/shared/filereview/capture.js +1 -1
  158. package/dist/shared/heartbeat.d.ts +13 -11
  159. package/dist/shared/heartbeat.js +14 -29
  160. package/dist/shared/heartbeat.js.map +1 -1
  161. package/dist/{activities/execute-cursor → shared}/persist-decision.d.ts +5 -2
  162. package/dist/{activities/execute-cursor → shared}/persist-decision.js +4 -1
  163. package/dist/shared/persist-decision.js.map +1 -0
  164. package/dist/{activities/execute-cursor → shared}/skill-resolver.d.ts +16 -3
  165. package/dist/{activities/execute-cursor → shared}/skill-resolver.js +12 -4
  166. package/dist/shared/skill-resolver.js.map +1 -0
  167. package/dist/shared/subagent-rows.d.ts +21 -0
  168. package/dist/shared/subagent-rows.js +34 -0
  169. package/dist/shared/subagent-rows.js.map +1 -0
  170. package/dist/shared/worker-shutdown.d.ts +43 -16
  171. package/dist/shared/worker-shutdown.js +28 -13
  172. package/dist/shared/worker-shutdown.js.map +1 -1
  173. package/dist/shared/workspace/platform-dir.d.ts +1 -1
  174. package/dist/shared/workspace/platform-dir.js +1 -1
  175. package/dist/shared/workspace/session-provision.d.ts +54 -0
  176. package/dist/{activities/execute-cursor/workspace-provision.js → shared/workspace/session-provision.js} +15 -12
  177. package/dist/shared/workspace/session-provision.js.map +1 -0
  178. package/package.json +4 -4
  179. package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +325 -0
  180. package/src/__test-utils__/config-fixture.ts +63 -0
  181. package/src/__test-utils__/execution-record-fixture.ts +104 -0
  182. package/src/__test-utils__/harness-boot-order-child.ts +58 -0
  183. package/src/__test-utils__/harness-contract/contract.ts +581 -0
  184. package/src/__test-utils__/harness-contract/recording-sink.ts +107 -0
  185. package/src/__test-utils__/harness-contract/runtime-contract.ts +666 -0
  186. package/src/__test-utils__/harness-contract/scripted-adapter.ts +349 -0
  187. package/src/__test-utils__/harness-contract/types.ts +176 -0
  188. package/src/__test-utils__/hermetic-activity.ts +502 -0
  189. package/src/__test-utils__/model-registry-fixture.ts +72 -0
  190. package/src/__test-utils__/module-specifiers.ts +82 -0
  191. package/src/__test-utils__/proto-helpers.ts +25 -0
  192. package/src/__test-utils__/turn-input-fixture.ts +155 -0
  193. package/src/__tests__/harness-boot-order.test.ts +77 -0
  194. package/src/__tests__/harness-contract.test.ts +27 -0
  195. package/src/__tests__/runner-manager.test.ts +18 -0
  196. package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +102 -0
  197. package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +396 -0
  198. package/src/activities/execute-cursor/__test-utils__/cursor-hook-harness.ts +66 -0
  199. package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +2 -43
  200. package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +342 -0
  201. package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +368 -0
  202. package/src/activities/execute-cursor/__test-utils__/scripted-sdk.ts +254 -0
  203. package/src/activities/execute-cursor/__tests__/adapter-is-temporal-free.test.ts +45 -0
  204. package/src/activities/execute-cursor/__tests__/approval-decisions-agree.test.ts +90 -0
  205. package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +7 -8
  206. package/src/activities/execute-cursor/__tests__/capture-flow.test.ts +28 -1
  207. package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +1 -1
  208. package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +64 -6
  209. package/src/activities/execute-cursor/__tests__/hermetic/deny-and-retry.test.ts +228 -0
  210. package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +180 -0
  211. package/src/activities/execute-cursor/__tests__/hermetic/goldens/cost-cap.status.json +53 -0
  212. package/src/activities/execute-cursor/__tests__/hermetic/goldens/deny-and-retry.turn1.status.json +55 -0
  213. package/src/activities/execute-cursor/__tests__/hermetic/goldens/deny-and-retry.turn2.status.json +77 -0
  214. package/src/activities/execute-cursor/__tests__/hermetic/goldens/file-review-capture.status.json +126 -0
  215. package/src/activities/execute-cursor/__tests__/hermetic/goldens/pause.status.json +40 -0
  216. package/src/activities/execute-cursor/__tests__/hermetic/goldens/plain-turn.status.json +48 -0
  217. package/src/activities/execute-cursor/__tests__/hermetic/goldens/platform-stop.status.json +56 -0
  218. package/src/activities/execute-cursor/__tests__/hermetic/goldens/recovery-fresh-agent.status.json +53 -0
  219. package/src/activities/execute-cursor/__tests__/hermetic/goldens/recovery-transport-timeout.status.json +48 -0
  220. package/src/activities/execute-cursor/__tests__/hermetic/goldens/resolution-error.status.json +18 -0
  221. package/src/activities/execute-cursor/__tests__/hermetic/goldens/run-cancelled.status.json +36 -0
  222. package/src/activities/execute-cursor/__tests__/hermetic/goldens/run-error-non-retryable.status.json +37 -0
  223. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-error-at-create.status.json +38 -0
  224. package/src/activities/execute-cursor/__tests__/hermetic/goldens/stall.status.json +59 -0
  225. package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-call.status.json +68 -0
  226. package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.status.json +79 -0
  227. package/src/activities/execute-cursor/__tests__/hermetic/goldens/worker-shutdown.status.json +42 -0
  228. package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +170 -0
  229. package/src/activities/execute-cursor/__tests__/hermetic/pause-vs-shutdown.test.ts +205 -0
  230. package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +171 -0
  231. package/src/activities/execute-cursor/__tests__/hermetic/recovery-fresh-agent.test.ts +156 -0
  232. package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +286 -0
  233. package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +332 -0
  234. package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +193 -0
  235. package/src/activities/execute-cursor/__tests__/hermetic/tool-call.test.ts +137 -0
  236. package/src/activities/execute-cursor/__tests__/hermetic/unattributed-hook-block.test.ts +185 -0
  237. package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +151 -0
  238. package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +65 -35
  239. package/src/activities/execute-cursor/__tests__/message-translator.test.ts +0 -40
  240. package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +171 -0
  241. package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +118 -243
  242. package/src/activities/execute-cursor/__tests__/usage-pricing.test.ts +84 -0
  243. package/src/activities/execute-cursor/adapter.ts +138 -0
  244. package/src/activities/execute-cursor/approval-state.ts +2 -2
  245. package/src/activities/execute-cursor/capture-flow.ts +18 -41
  246. package/src/activities/execute-cursor/cursor-capabilities.ts +35 -0
  247. package/src/activities/execute-cursor/cursor-mcp-config.ts +2 -2
  248. package/src/activities/execute-cursor/fetch-interceptor.ts +48 -45
  249. package/src/activities/execute-cursor/http2-interceptor.ts +47 -34
  250. package/src/activities/execute-cursor/message-translator.ts +90 -45
  251. package/src/activities/execute-cursor/prompt-builder.ts +327 -12
  252. package/src/activities/execute-cursor/rejection-capture.ts +5 -12
  253. package/src/activities/execute-cursor/session-lifecycle.ts +1 -5
  254. package/src/activities/execute-cursor/turn-boundary.ts +1 -1
  255. package/src/activities/execute-cursor/turn-settle.ts +601 -0
  256. package/src/activities/execute-cursor/turn-setup.ts +645 -0
  257. package/src/activities/execute-cursor/turn-stream.ts +84 -210
  258. package/src/activities/execute-cursor/turn.ts +240 -0
  259. package/src/activities/execute-cursor/usage-pricing.ts +67 -0
  260. package/src/activities/execute-deep-agent/approval-file-change.ts +1 -1
  261. package/src/activities/execute-deep-agent/environment.ts +1 -1
  262. package/src/activities/execute-deep-agent/setup.ts +3 -2
  263. package/src/activities/hydrate-workflow-execution.ts +1 -1
  264. package/src/config.ts +13 -0
  265. package/src/harness/__tests__/import-direction.test.ts +168 -0
  266. package/src/harness/__tests__/persist-chokepoint.test.ts +146 -0
  267. package/src/harness/__tests__/registry.test.ts +168 -0
  268. package/src/harness/__tests__/run-turn.test.ts +165 -0
  269. package/src/harness/__tests__/stop-controller.test.ts +49 -0
  270. package/src/harness/__tests__/turn-context.test.ts +178 -0
  271. package/src/harness/__tests__/usage-accumulator.test.ts +83 -0
  272. package/src/harness/capabilities.ts +92 -0
  273. package/src/harness/persist-chokepoint.ts +112 -0
  274. package/src/harness/registry.ts +197 -0
  275. package/src/harness/run-turn.ts +618 -0
  276. package/src/harness/stop-controller.ts +83 -0
  277. package/src/harness/terminal-table.ts +276 -0
  278. package/src/harness/turn-context.ts +1028 -0
  279. package/src/harness/types.ts +473 -0
  280. package/src/harness/usage-accumulator.ts +122 -0
  281. package/src/harness-adapters.ts +30 -0
  282. package/src/main.ts +1 -1
  283. package/src/runner-manager.ts +68 -61
  284. package/src/runner.ts +67 -78
  285. package/src/shared/__tests__/attachment-naming.test.ts +1 -1
  286. package/src/{activities/execute-cursor → shared}/__tests__/attachment-resolver.test.ts +6 -4
  287. package/src/{activities/execute-cursor → shared}/__tests__/cost-guard.test.ts +2 -1
  288. package/src/{activities/execute-cursor → shared}/__tests__/exact-apply.test.ts +3 -3
  289. package/src/{activities/execute-cursor → shared}/__tests__/extract-structured-output.test.ts +8 -8
  290. package/src/{activities/execute-cursor → shared}/__tests__/persist-decision.test.ts +4 -2
  291. package/src/{activities/execute-cursor → shared}/__tests__/skill-resolver.test.ts +1 -1
  292. package/src/shared/__tests__/subagent-rows.test.ts +34 -0
  293. package/src/shared/__tests__/worker-shutdown.test.ts +44 -39
  294. package/src/shared/approval-policy.ts +1 -1
  295. package/src/{activities/execute-cursor → shared}/attachment-resolver.ts +6 -6
  296. package/src/{activities/execute-cursor → shared}/blueprint-resolver.ts +7 -78
  297. package/src/shared/channel-attachment.ts +1 -1
  298. package/src/{activities/execute-cursor → shared}/cost-guard.ts +5 -1
  299. package/src/{activities/execute-cursor → shared}/env-resolver.ts +1 -1
  300. package/src/{activities/execute-cursor → shared}/exact-apply.ts +7 -7
  301. package/src/shared/execution-context.ts +45 -0
  302. package/src/{activities/execute-cursor → shared}/extract-structured-output.ts +10 -7
  303. package/src/shared/filereview/capture.ts +1 -1
  304. package/src/shared/heartbeat.ts +13 -33
  305. package/src/{activities/execute-cursor → shared}/persist-decision.ts +5 -2
  306. package/src/{activities/execute-cursor → shared}/skill-resolver.ts +20 -6
  307. package/src/shared/subagent-rows.ts +39 -0
  308. package/src/shared/worker-shutdown.ts +55 -25
  309. package/src/{activities/execute-cursor/__tests__/workspace-provision.test.ts → shared/workspace/__tests__/session-provision.test.ts} +25 -28
  310. package/src/shared/workspace/platform-dir.ts +1 -1
  311. package/src/{activities/execute-cursor/workspace-provision.ts → shared/workspace/session-provision.ts} +29 -16
  312. package/dist/activities/execute-cursor/attachment-resolver.js.map +0 -1
  313. package/dist/activities/execute-cursor/blueprint-resolver.js.map +0 -1
  314. package/dist/activities/execute-cursor/cost-guard.js.map +0 -1
  315. package/dist/activities/execute-cursor/env-resolver.js.map +0 -1
  316. package/dist/activities/execute-cursor/exact-apply.js.map +0 -1
  317. package/dist/activities/execute-cursor/extract-structured-output.js.map +0 -1
  318. package/dist/activities/execute-cursor/index.d.ts +0 -209
  319. package/dist/activities/execute-cursor/index.js +0 -2345
  320. package/dist/activities/execute-cursor/index.js.map +0 -1
  321. package/dist/activities/execute-cursor/persist-decision.js.map +0 -1
  322. package/dist/activities/execute-cursor/skill-resolver.js.map +0 -1
  323. package/dist/activities/execute-cursor/usage-accumulator.d.ts +0 -89
  324. package/dist/activities/execute-cursor/usage-accumulator.js +0 -121
  325. package/dist/activities/execute-cursor/usage-accumulator.js.map +0 -1
  326. package/dist/activities/execute-cursor/workspace-provision.d.ts +0 -42
  327. package/dist/activities/execute-cursor/workspace-provision.js.map +0 -1
  328. package/src/activities/execute-cursor/__tests__/usage-accumulator.test.ts +0 -164
  329. package/src/activities/execute-cursor/index.ts +0 -2876
  330. package/src/activities/execute-cursor/usage-accumulator.ts +0 -169
  331. /package/dist/{activities/execute-cursor → shared}/env-resolver.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-subject.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/contract-subject.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@
17
17
  import { type ApprovalGrant, type McpToolPolicyEntry } from "../approval-state.js";
18
18
  import type { ApprovalCategory } from "../approval-policy.js";
19
19
  import { type CasObservations } from "../cas-observations.js";
20
+ import type { ProposedAction } from "../../../__test-utils__/approval-contract/types.js";
20
21
  /**
21
22
  * Whether `bash` is available on this machine. Hook tests must be skipped where
22
23
  * it is not — use `const d = hasBash ? describe : describe.skip`.
@@ -154,3 +155,22 @@ export declare const hookMcp: (name: string, input?: Record<string, unknown>) =>
154
155
  command: string;
155
156
  hook_event_name: string;
156
157
  };
158
+ /** Build the real preToolUse hook-input payload for an abstract action. */
159
+ export declare function hookInputFor(action: ProposedAction): object;
160
+ /** The gated built-in categories: the only action kinds a grant is ever minted for. */
161
+ export type GatedActionKind = "write" | "shell" | "delete";
162
+ /**
163
+ * Stream-side (SDK) tool name per gated category — deliberately the OTHER
164
+ * taxonomy from the hook input, so a grant minted from the stream matches a
165
+ * hook-named call only via the canonical category, not the raw name.
166
+ */
167
+ export declare const STREAM_NAME: Record<GatedActionKind, string>;
168
+ /**
169
+ * The stream-side args of a gated action, mirroring {@link hookInputFor}: a
170
+ * write carries whole-file content (so its digest is content-exact and matches
171
+ * the hook's), a delete carries only a path, and a shell carries its command
172
+ * (the salient is already exact). The shapes the goldens' `edit` events use.
173
+ */
174
+ export declare function streamArgsFor(action: ProposedAction & {
175
+ kind: GatedActionKind;
176
+ }): Record<string, unknown>;
@@ -127,4 +127,62 @@ export const hookMcp = (name, input = {}) => ({
127
127
  command: "npx -y srv mcp",
128
128
  hook_event_name: "beforeMCPExecution",
129
129
  });
130
+ // ── The contract kits' abstract action, in both of Cursor's taxonomies ──────
131
+ //
132
+ // Both kits (`approval-contract`, `harness-contract`) speak of a side effect as
133
+ // a taxonomy-free `ProposedAction`; Cursor sees the same act twice, as the
134
+ // STREAM tool call the SDK emits (`edit` / `shell` / `delete`, lowercase) and
135
+ // as the HOOK payload the preToolUse script judges (`Write` / `Shell` /
136
+ // `Delete`). One translation here, so every Cursor-side substrate and subject
137
+ // exercises the same category collapse that lets a stream-minted grant match a
138
+ // hook-named call.
139
+ /** Build the real preToolUse hook-input payload for an abstract action. */
140
+ export function hookInputFor(action) {
141
+ switch (action.kind) {
142
+ case "write":
143
+ return hookWrite(action.resource, action.content ?? "x");
144
+ case "shell":
145
+ return hookShell(action.resource);
146
+ case "delete":
147
+ return hookDelete(action.resource);
148
+ case "read":
149
+ return hookRead(action.resource);
150
+ case "mcp":
151
+ return hookMcp(action.mcpToolName ?? "mcp_tool");
152
+ default: {
153
+ const exhaustive = action.kind;
154
+ throw new Error(`hookInputFor: unknown action kind ${String(exhaustive)}`);
155
+ }
156
+ }
157
+ }
158
+ /**
159
+ * Stream-side (SDK) tool name per gated category — deliberately the OTHER
160
+ * taxonomy from the hook input, so a grant minted from the stream matches a
161
+ * hook-named call only via the canonical category, not the raw name.
162
+ */
163
+ export const STREAM_NAME = {
164
+ write: "edit",
165
+ shell: "shell",
166
+ delete: "delete",
167
+ };
168
+ /**
169
+ * The stream-side args of a gated action, mirroring {@link hookInputFor}: a
170
+ * write carries whole-file content (so its digest is content-exact and matches
171
+ * the hook's), a delete carries only a path, and a shell carries its command
172
+ * (the salient is already exact). The shapes the goldens' `edit` events use.
173
+ */
174
+ export function streamArgsFor(action) {
175
+ switch (action.kind) {
176
+ case "shell":
177
+ return { command: action.resource };
178
+ case "delete":
179
+ return { path: action.resource };
180
+ case "write":
181
+ return { path: action.resource, content: action.content ?? "x" };
182
+ default: {
183
+ const exhaustive = action.kind;
184
+ throw new Error(`streamArgsFor: unknown gated kind ${String(exhaustive)}`);
185
+ }
186
+ }
187
+ }
130
188
  //# sourceMappingURL=cursor-hook-harness.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-hook-harness.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/cursor-hook-harness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor-hook-harness.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/cursor-hook-harness.ts"],"names":[],"mappings":"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"}
@@ -14,32 +14,9 @@
14
14
  * token binds the exact resource, so this substrate enforces lease isolation
15
15
  * (`enforcesExactResource: true`) and implements `authorizeAfterGrant`.
16
16
  */
17
- import { setupCursorHookHarness, hasBash, hookWrite, hookShell, hookDelete, hookRead, hookMcp, } from "./cursor-hook-harness.js";
17
+ import { setupCursorHookHarness, hasBash, hookInputFor, streamArgsFor, STREAM_NAME } from "./cursor-hook-harness.js";
18
18
  import { toolIdentity } from "../approval-state.js";
19
19
  import { contentDigest } from "../../../shared/file-tools.js";
20
- /** Build the real preToolUse hook-input payload for an abstract action. */
21
- function hookInputFor(action) {
22
- switch (action.kind) {
23
- case "write":
24
- return hookWrite(action.resource, action.content ?? "x");
25
- case "shell":
26
- return hookShell(action.resource);
27
- case "delete":
28
- return hookDelete(action.resource);
29
- case "read":
30
- return hookRead(action.resource);
31
- case "mcp":
32
- return hookMcp(action.mcpToolName ?? "mcp_tool");
33
- }
34
- }
35
- // Stream-side (SDK) tool name per gated category — deliberately the OTHER
36
- // taxonomy from the hook input, so a grant minted here matches a hook-named call
37
- // only via the canonical category, not the raw name.
38
- const STREAM_NAME = {
39
- write: "edit",
40
- shell: "shell",
41
- delete: "delete",
42
- };
43
20
  /**
44
21
  * Mint the approval grant for an action using its stream-side identity. Only the
45
22
  * gated built-in categories are ever granted in the contract (read is never
@@ -50,14 +27,7 @@ function grantFor(action) {
50
27
  throw new Error(`grantFor: ${action.kind} actions are not granted in the contract`);
51
28
  }
52
29
  const streamName = STREAM_NAME[action.kind];
53
- // Mirror hookInputFor: a write carries whole-file content (so its digest is
54
- // content-exact and matches the hook's), a delete carries only a path (no
55
- // content), and a shell carries its command (the salient is already exact).
56
- const args = action.kind === "shell"
57
- ? { command: action.resource }
58
- : action.kind === "delete"
59
- ? { path: action.resource }
60
- : { path: action.resource, content: action.content ?? "x" };
30
+ const args = streamArgsFor({ ...action, kind: action.kind });
61
31
  const identity = toolIdentity(streamName, "", args);
62
32
  return {
63
33
  toolName: streamName,
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-substrate.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/gateway-substrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway-substrate.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/gateway-substrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * The Cursor slice of the hermetic activity driver: build the fixture record,
3
+ * the scripted SDK and the `Config`, run the REAL `ExecuteCursor` activity under
4
+ * `MockActivityEnvironment`, and hand back what it persisted.
5
+ *
6
+ * Layering (the `approval-contract/` + `gateway-substrate.ts` split): everything
7
+ * harness-agnostic lives in `src/__test-utils__/hermetic-activity.ts` (the
8
+ * activity environment, the execution record behind the client, the temp
9
+ * `~/.stigmer`, the ticking clock, the shutdown signal). This module adds only
10
+ * what is Cursor's: the `@cursor/sdk` double, the model catalog and pricing
11
+ * registry the harness reads at setup, the Cursor `Config` slice, and the
12
+ * per-scenario reset of the harness's module-level caches.
13
+ *
14
+ * What the two `vi.mock` calls a scenario file must carry look like — they are
15
+ * hoisted by vitest and so cannot live here:
16
+ *
17
+ * ```ts
18
+ * vi.mock("@cursor/sdk", async () =>
19
+ * (await import("../../__test-utils__/scripted-sdk.js")).scriptedCursorSdkModule());
20
+ * vi.mock("../../../../client/stigmer-client.js", async () =>
21
+ * (await import("../../../../__test-utils__/hermetic-activity.js")).hermeticStigmerClientModule());
22
+ * ```
23
+ *
24
+ * Network: the registry document and the `fetch` stub that serves it are
25
+ * the runtime's fixtures (`src/__test-utils__/model-registry-fixture.ts`);
26
+ * the record's four resources come from `execution-record-fixture.ts` with
27
+ * this harness's ids and model laid over the defaults.
28
+ *
29
+ * The fixture model is `composer-2.5`, pinned (not Auto) on purpose: Auto short-
30
+ * circuits `resolveServiceTierParams` before the catalog, and a pinned model runs
31
+ * the catalog path, the variant-param pinning, and the `run.wait()` model echo
32
+ * check — more of the production path under the golden.
33
+ *
34
+ * Where a scenario reaches the knobs that drive the terminal table, each on
35
+ * the object that models the thing deciding it: the execution's cost budget
36
+ * and the control plane's STOP answer on the record (`CursorRecordOptions`);
37
+ * a control-plane fault on the client (`clientOverrides`); the runner's stall
38
+ * and lock windows on the scenario's `Config` (`config`); an SDK failure on
39
+ * the SDK double (`ScriptedSdkOptions`); an SDK-side cancel or a mid-stream
40
+ * wedge as an `effect` step on the run. Nothing here is a switch in production
41
+ * code — every knob is a value the production path already reads.
42
+ */
43
+ import type { ModelListItem } from "@cursor/sdk";
44
+ import { type WorkspaceEntry } from "@stigmer/protos/ai/stigmer/agentic/session/v1/workspace_pb";
45
+ import type { StigmerClient } from "../../../client/stigmer-client.js";
46
+ import type { Config } from "../../../config.js";
47
+ import { ExecutionRecord, ScriptedClock, type ActivityInvocation, type HermeticEnvironment, type InvocationControls } from "../../../__test-utils__/hermetic-activity.js";
48
+ import { type ExecutionRecordOptions } from "../../../__test-utils__/execution-record-fixture.js";
49
+ import { ScriptedCursorSdk, type ScriptedSdkOptions } from "./scripted-sdk.js";
50
+ export declare const FIXTURE: {
51
+ readonly org: "hermetic-org";
52
+ readonly executionId: "aex_hermetic_0001";
53
+ readonly sessionId: "ses_hermetic_0001";
54
+ readonly agentInstanceId: "ain_hermetic_0001";
55
+ readonly agentId: "agt_hermetic_0001";
56
+ readonly agentName: "hermetic-agent";
57
+ /** The pinned model; in the registry fixture AND the SDK catalog below. */
58
+ readonly model: "composer-2.5";
59
+ readonly cursorApiKey: "hermetic-cursor-api-key";
60
+ };
61
+ /** The record's knobs; the ids and the default model are this harness's fixture. */
62
+ export type CursorRecordOptions = Omit<ExecutionRecordOptions, "ids">;
63
+ /** The four resources of one execution, wired by id into a chain, under the Cursor fixture ids. */
64
+ export declare function cursorExecutionRecord(options: CursorRecordOptions): ExecutionRecord;
65
+ /** The SDK catalog entry for the fixture model: both pinnable params declared. */
66
+ export declare const SDK_CATALOG: readonly ModelListItem[];
67
+ /** The OSS/local runner posture: direct Cursor API key, no proxy, local mode. */
68
+ export declare function hermeticCursorConfig(env: HermeticEnvironment): Config;
69
+ /**
70
+ * The primary workspace directory a session with NO workspace entries runs in
71
+ * (`session-root.ts`: `<workspaceRootDir>/sessions/<sessionId>`).
72
+ */
73
+ export declare function sessionWorkspaceDir(env: HermeticEnvironment): string;
74
+ /**
75
+ * Run the workspace's installed preToolUse hook exactly as the Cursor SDK does:
76
+ * read `<workspaceRoot>/.cursor/hooks.json`, take the `preToolUse` command the
77
+ * gate installed (an absolute path to the runner's own stable bash script under
78
+ * `~/.stigmer/hitl-gate/<key>/`), and run it with the hook input on stdin. The
79
+ * script resolves the CURRENT turn's state file and denial ledger from the
80
+ * active-turn pointer, walks its parent PIDs to confirm this process is the
81
+ * runner, and prints `{"permission":"allow"|"deny"}`. A deny appends to the
82
+ * ledger the activity's stream loop reads.
83
+ *
84
+ * This is the out-of-process half of deny-and-retry, driven by the real script
85
+ * against the real gate the activity installed — not a simulation of either.
86
+ */
87
+ export declare function runWorkspaceHook(workspaceRoot: string, hookInput: object): {
88
+ readonly permission: "allow" | "deny" | "?";
89
+ readonly raw: string;
90
+ };
91
+ /**
92
+ * A git work tree with one committed file, for the file-review capture
93
+ * scenario. Author, committer and both dates are pinned so the commit AND tree
94
+ * object ids are byte-stable — a file-review golden may carry them.
95
+ */
96
+ export declare function initGitWorkspace(root: string, files: Record<string, string>): void;
97
+ /** A session workspace entry mounting an absolute local path (local mode only). */
98
+ export declare function localPathEntry(name: string, path: string): WorkspaceEntry;
99
+ /**
100
+ * Drop every module-level cache the harness keeps across invocations. Called
101
+ * at the START of a scenario, never between its invocations: a deny-and-retry
102
+ * scenario relies on the parked agent surviving from turn 1 into turn 2 exactly
103
+ * as it does in a live worker.
104
+ */
105
+ export declare function resetCursorModuleState(): void;
106
+ export interface CursorScenario {
107
+ readonly env: HermeticEnvironment;
108
+ readonly clock: ScriptedClock;
109
+ readonly record: ExecutionRecord;
110
+ readonly sdk: ScriptedCursorSdk;
111
+ /** The runner this scenario runs on: the OSS posture plus the scenario's knobs. */
112
+ readonly config: Config;
113
+ }
114
+ export interface CursorScenarioOptions {
115
+ readonly env: HermeticEnvironment;
116
+ readonly clock: ScriptedClock;
117
+ readonly record: ExecutionRecord;
118
+ readonly sdk: ScriptedSdkOptions;
119
+ /**
120
+ * Control-plane facets the scenario opts INTO, or faults it injects, over
121
+ * the record's everyday answers (`ExecutionRecord.client`): a rejecting
122
+ * `getAgent` is how a blueprint-resolution failure is staged.
123
+ */
124
+ readonly clientOverrides?: Partial<StigmerClient>;
125
+ /**
126
+ * Runner knobs over {@link hermeticCursorConfig}: a scenario that needs the
127
+ * stall watchdog or the workspace-lock wait to expire states the window
128
+ * here. A property of the runner the scenario runs on, not of one turn, so
129
+ * it lives on the scenario and every turn of it sees the same `Config`.
130
+ */
131
+ readonly config?: Partial<Config>;
132
+ }
133
+ /** Bind the record and the SDK for a scenario; resets the harness caches first. */
134
+ export declare function beginCursorScenario(options: CursorScenarioOptions): CursorScenario;
135
+ export interface CursorTurnOptions {
136
+ /** Empty for a first invocation; the agent id for a HITL reinvocation. */
137
+ readonly threadId?: string;
138
+ /** The HITL cycle index (0 on the first turn); mints the change-set id. */
139
+ readonly turnSeq?: number;
140
+ readonly onControls?: (controls: InvocationControls) => void;
141
+ }
142
+ /**
143
+ * Run ONE `ExecuteCursor` invocation for the scenario: the real Cursor
144
+ * adapter under the real turn runtime, as the composition roots wire them.
145
+ * Built per invocation (the registry constructs its client, which is the one
146
+ * bound at `beginCursorScenario`; the adapter boots on the scenario's config).
147
+ */
148
+ export declare function runCursorTurn(scenario: CursorScenario, options?: CursorTurnOptions): Promise<ActivityInvocation>;
@@ -0,0 +1,257 @@
1
+ /**
2
+ * The Cursor slice of the hermetic activity driver: build the fixture record,
3
+ * the scripted SDK and the `Config`, run the REAL `ExecuteCursor` activity under
4
+ * `MockActivityEnvironment`, and hand back what it persisted.
5
+ *
6
+ * Layering (the `approval-contract/` + `gateway-substrate.ts` split): everything
7
+ * harness-agnostic lives in `src/__test-utils__/hermetic-activity.ts` (the
8
+ * activity environment, the execution record behind the client, the temp
9
+ * `~/.stigmer`, the ticking clock, the shutdown signal). This module adds only
10
+ * what is Cursor's: the `@cursor/sdk` double, the model catalog and pricing
11
+ * registry the harness reads at setup, the Cursor `Config` slice, and the
12
+ * per-scenario reset of the harness's module-level caches.
13
+ *
14
+ * What the two `vi.mock` calls a scenario file must carry look like — they are
15
+ * hoisted by vitest and so cannot live here:
16
+ *
17
+ * ```ts
18
+ * vi.mock("@cursor/sdk", async () =>
19
+ * (await import("../../__test-utils__/scripted-sdk.js")).scriptedCursorSdkModule());
20
+ * vi.mock("../../../../client/stigmer-client.js", async () =>
21
+ * (await import("../../../../__test-utils__/hermetic-activity.js")).hermeticStigmerClientModule());
22
+ * ```
23
+ *
24
+ * Network: the registry document and the `fetch` stub that serves it are
25
+ * the runtime's fixtures (`src/__test-utils__/model-registry-fixture.ts`);
26
+ * the record's four resources come from `execution-record-fixture.ts` with
27
+ * this harness's ids and model laid over the defaults.
28
+ *
29
+ * The fixture model is `composer-2.5`, pinned (not Auto) on purpose: Auto short-
30
+ * circuits `resolveServiceTierParams` before the catalog, and a pinned model runs
31
+ * the catalog path, the variant-param pinning, and the `run.wait()` model echo
32
+ * check — more of the production path under the golden.
33
+ *
34
+ * Where a scenario reaches the knobs that drive the terminal table, each on
35
+ * the object that models the thing deciding it: the execution's cost budget
36
+ * and the control plane's STOP answer on the record (`CursorRecordOptions`);
37
+ * a control-plane fault on the client (`clientOverrides`); the runner's stall
38
+ * and lock windows on the scenario's `Config` (`config`); an SDK failure on
39
+ * the SDK double (`ScriptedSdkOptions`); an SDK-side cancel or a mid-stream
40
+ * wedge as an `effect` step on the run. Nothing here is a switch in production
41
+ * code — every knob is a value the production path already reads.
42
+ */
43
+ import { execFileSync } from "node:child_process";
44
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
45
+ import { dirname, join } from "node:path";
46
+ import { create } from "@bufbuild/protobuf";
47
+ import { LocalPathSourceSchema, WorkspaceEntrySchema, WorkspaceSourceSchema, } from "@stigmer/protos/ai/stigmer/agentic/session/v1/workspace_pb";
48
+ import { bindHermeticClient, runActivityHermetically, } from "../../../__test-utils__/hermetic-activity.js";
49
+ import { executionRecordFixture } from "../../../__test-utils__/execution-record-fixture.js";
50
+ import { FIXTURE_MODEL } from "../../../__test-utils__/model-registry-fixture.js";
51
+ import { _resetAgentSessionCacheForTests } from "../agent-session-cache.js";
52
+ import { _resetPricingCache } from "../model-pricing-data.js";
53
+ import { resetCatalogCacheForTests } from "../service-tier.js";
54
+ import { _resetRegistryCache } from "../../../shared/model-registry.js";
55
+ import { ScriptedCursorSdk, bindScriptedSdk } from "./scripted-sdk.js";
56
+ // ---------------------------------------------------------------------------
57
+ // Fixture ids — fixed so goldens are readable and byte-stable
58
+ // ---------------------------------------------------------------------------
59
+ export const FIXTURE = {
60
+ org: "hermetic-org",
61
+ executionId: "aex_hermetic_0001",
62
+ sessionId: "ses_hermetic_0001",
63
+ agentInstanceId: "ain_hermetic_0001",
64
+ agentId: "agt_hermetic_0001",
65
+ agentName: "hermetic-agent",
66
+ /** The pinned model; in the registry fixture AND the SDK catalog below. */
67
+ model: FIXTURE_MODEL,
68
+ cursorApiKey: "hermetic-cursor-api-key",
69
+ };
70
+ /** The four resources of one execution, wired by id into a chain, under the Cursor fixture ids. */
71
+ export function cursorExecutionRecord(options) {
72
+ return executionRecordFixture({
73
+ ...options,
74
+ modelName: options.modelName ?? FIXTURE.model,
75
+ ids: {
76
+ org: FIXTURE.org,
77
+ executionId: FIXTURE.executionId,
78
+ sessionId: FIXTURE.sessionId,
79
+ agentInstanceId: FIXTURE.agentInstanceId,
80
+ agentId: FIXTURE.agentId,
81
+ agentName: FIXTURE.agentName,
82
+ },
83
+ });
84
+ }
85
+ // ---------------------------------------------------------------------------
86
+ // The SDK catalog
87
+ // ---------------------------------------------------------------------------
88
+ /** The SDK catalog entry for the fixture model: both pinnable params declared. */
89
+ export const SDK_CATALOG = [
90
+ {
91
+ id: FIXTURE.model,
92
+ displayName: "Composer 2.5",
93
+ parameters: [
94
+ { id: "fast", values: [{ value: "true" }, { value: "false" }] },
95
+ { id: "thinking", values: [{ value: "true" }, { value: "false" }] },
96
+ ],
97
+ },
98
+ ];
99
+ // ---------------------------------------------------------------------------
100
+ // Config
101
+ // ---------------------------------------------------------------------------
102
+ /** The OSS/local runner posture: direct Cursor API key, no proxy, local mode. */
103
+ export function hermeticCursorConfig(env) {
104
+ return {
105
+ taskQueue: "hermetic-test-queue",
106
+ temporalAddress: "localhost:7233",
107
+ temporalNamespace: "default",
108
+ stigmerBackendEndpoint: "http://localhost:7234",
109
+ mcpBridgeEndpoint: null,
110
+ stigmerToken: null,
111
+ cursorApiKey: FIXTURE.cursorApiKey,
112
+ workspaceRootDir: env.workspaceRootDir,
113
+ mode: "local",
114
+ proxyEndpoint: null,
115
+ maxConcurrentActivities: 1,
116
+ idleTimeoutSeconds: null,
117
+ cloudModeEnabled: false,
118
+ checkpointerType: "memory",
119
+ checkpointerProxyEndpoint: null,
120
+ artifactProxyEndpoint: null,
121
+ primaryModel: FIXTURE.model,
122
+ cursorStreamStallTimeoutMs: 180_000,
123
+ agentResolveTimeoutMs: 120_000,
124
+ workspaceLockTimeoutMs: 900_000,
125
+ };
126
+ }
127
+ // ---------------------------------------------------------------------------
128
+ // The side effects the real SDK performs, for `effect` steps
129
+ // ---------------------------------------------------------------------------
130
+ /**
131
+ * The primary workspace directory a session with NO workspace entries runs in
132
+ * (`session-root.ts`: `<workspaceRootDir>/sessions/<sessionId>`).
133
+ */
134
+ export function sessionWorkspaceDir(env) {
135
+ return join(env.workspaceRootDir, "sessions", FIXTURE.sessionId);
136
+ }
137
+ /**
138
+ * Run the workspace's installed preToolUse hook exactly as the Cursor SDK does:
139
+ * read `<workspaceRoot>/.cursor/hooks.json`, take the `preToolUse` command the
140
+ * gate installed (an absolute path to the runner's own stable bash script under
141
+ * `~/.stigmer/hitl-gate/<key>/`), and run it with the hook input on stdin. The
142
+ * script resolves the CURRENT turn's state file and denial ledger from the
143
+ * active-turn pointer, walks its parent PIDs to confirm this process is the
144
+ * runner, and prints `{"permission":"allow"|"deny"}`. A deny appends to the
145
+ * ledger the activity's stream loop reads.
146
+ *
147
+ * This is the out-of-process half of deny-and-retry, driven by the real script
148
+ * against the real gate the activity installed — not a simulation of either.
149
+ */
150
+ export function runWorkspaceHook(workspaceRoot, hookInput) {
151
+ const hooksJsonPath = join(workspaceRoot, ".cursor", "hooks.json");
152
+ const parsed = JSON.parse(readFileSync(hooksJsonPath, "utf-8"));
153
+ const command = parsed.hooks?.preToolUse?.[0]?.command;
154
+ if (!command) {
155
+ throw new Error(`runWorkspaceHook: no preToolUse hook installed in ${hooksJsonPath}`);
156
+ }
157
+ const raw = execFileSync("bash", [command], { input: JSON.stringify(hookInput) }).toString();
158
+ const permission = raw.includes('"permission":"deny"')
159
+ ? "deny"
160
+ : raw.includes('"permission":"allow"')
161
+ ? "allow"
162
+ : "?";
163
+ return { permission, raw };
164
+ }
165
+ /**
166
+ * A git work tree with one committed file, for the file-review capture
167
+ * scenario. Author, committer and both dates are pinned so the commit AND tree
168
+ * object ids are byte-stable — a file-review golden may carry them.
169
+ */
170
+ export function initGitWorkspace(root, files) {
171
+ mkdirSync(root, { recursive: true });
172
+ const gitEnv = {
173
+ ...process.env,
174
+ GIT_AUTHOR_NAME: "hermetic",
175
+ GIT_AUTHOR_EMAIL: "hermetic@stigmer.test",
176
+ GIT_COMMITTER_NAME: "hermetic",
177
+ GIT_COMMITTER_EMAIL: "hermetic@stigmer.test",
178
+ GIT_AUTHOR_DATE: "2026-01-01T00:00:00Z",
179
+ GIT_COMMITTER_DATE: "2026-01-01T00:00:00Z",
180
+ };
181
+ const git = (args) => {
182
+ execFileSync("git", args, { cwd: root, env: gitEnv, stdio: "ignore" });
183
+ };
184
+ git(["init", "-q", "-b", "main"]);
185
+ for (const [rel, content] of Object.entries(files)) {
186
+ const abs = join(root, rel);
187
+ mkdirSync(dirname(abs), { recursive: true });
188
+ writeFileSync(abs, content, "utf-8");
189
+ }
190
+ git(["add", "-A"]);
191
+ git(["commit", "-q", "-m", "initial"]);
192
+ }
193
+ /** A session workspace entry mounting an absolute local path (local mode only). */
194
+ export function localPathEntry(name, path) {
195
+ return create(WorkspaceEntrySchema, {
196
+ name,
197
+ source: create(WorkspaceSourceSchema, {
198
+ source: { case: "localPath", value: create(LocalPathSourceSchema, { path }) },
199
+ }),
200
+ });
201
+ }
202
+ // ---------------------------------------------------------------------------
203
+ // Running a scenario
204
+ // ---------------------------------------------------------------------------
205
+ /**
206
+ * Drop every module-level cache the harness keeps across invocations. Called
207
+ * at the START of a scenario, never between its invocations: a deny-and-retry
208
+ * scenario relies on the parked agent surviving from turn 1 into turn 2 exactly
209
+ * as it does in a live worker.
210
+ */
211
+ export function resetCursorModuleState() {
212
+ _resetAgentSessionCacheForTests();
213
+ resetCatalogCacheForTests();
214
+ _resetPricingCache();
215
+ _resetRegistryCache();
216
+ }
217
+ /** Bind the record and the SDK for a scenario; resets the harness caches first. */
218
+ export function beginCursorScenario(options) {
219
+ resetCursorModuleState();
220
+ const sdk = new ScriptedCursorSdk(options.sdk);
221
+ bindScriptedSdk(sdk);
222
+ bindHermeticClient(options.record.client(options.clientOverrides));
223
+ return {
224
+ env: options.env,
225
+ clock: options.clock,
226
+ record: options.record,
227
+ sdk,
228
+ config: { ...hermeticCursorConfig(options.env), ...options.config },
229
+ };
230
+ }
231
+ /**
232
+ * Run ONE `ExecuteCursor` invocation for the scenario: the real Cursor
233
+ * adapter under the real turn runtime, as the composition roots wire them.
234
+ * Built per invocation (the registry constructs its client, which is the one
235
+ * bound at `beginCursorScenario`; the adapter boots on the scenario's config).
236
+ */
237
+ export async function runCursorTurn(scenario, options = {}) {
238
+ // Imported lazily so the scenario file's `vi.mock` declarations are in
239
+ // force before the adapter module is loaded and before its `boot` loads
240
+ // `@cursor/sdk` (through `turn.ts`) and the registry loads the client.
241
+ const { createCursorAdapter } = await import("../adapter.js");
242
+ const { createHarnessActivities } = await import("../../../harness/registry.js");
243
+ const adapter = createCursorAdapter();
244
+ await adapter.boot(scenario.config);
245
+ const activities = await createHarnessActivities([{ harness: "cursor", adapter }], scenario.config);
246
+ // The typed wire shape the control plane's workflow sends (activity-input.ts).
247
+ const input = {
248
+ execution_id: scenario.record.executionId,
249
+ thread_id: options.threadId ?? "",
250
+ turn_seq: options.turnSeq ?? 0,
251
+ };
252
+ return runActivityHermetically(activities.ExecuteCursor, [input], {
253
+ taskQueue: "hermetic-test-queue",
254
+ onControls: options.onControls,
255
+ });
256
+ }
257
+ //# sourceMappingURL=hermetic-cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermetic-cursor.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts"],"names":[],"mappings":"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"}