@stigmer/runner 3.15.3-dev.20260914100347 → 3.15.3-dev.20260916211208

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 (549) hide show
  1. package/README.md +1 -0
  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 +14 -11
  12. package/dist/activities/execute-cursor/__test-utils__/contract-subject.js.map +1 -1
  13. package/dist/activities/execute-cursor/__test-utils__/fold.d.ts +61 -0
  14. package/dist/activities/execute-cursor/__test-utils__/fold.js +94 -0
  15. package/dist/activities/execute-cursor/__test-utils__/fold.js.map +1 -0
  16. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +1 -1
  17. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -1
  18. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +52 -14
  19. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +46 -12
  20. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
  21. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +21 -28
  22. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +27 -11
  23. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -1
  24. package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.d.ts +70 -26
  25. package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js +82 -32
  26. package/dist/activities/execute-cursor/__test-utils__/scripted-sdk.js.map +1 -1
  27. package/dist/activities/execute-cursor/adapter.d.ts +8 -7
  28. package/dist/activities/execute-cursor/adapter.js +13 -9
  29. package/dist/activities/execute-cursor/adapter.js.map +1 -1
  30. package/dist/activities/execute-cursor/approval-policy.d.ts +10 -10
  31. package/dist/activities/execute-cursor/approval-policy.js +12 -23
  32. package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
  33. package/dist/activities/execute-cursor/approval-state.d.ts +35 -1
  34. package/dist/activities/execute-cursor/approval-state.js +65 -0
  35. package/dist/activities/execute-cursor/approval-state.js.map +1 -1
  36. package/dist/activities/execute-cursor/{message-translator.d.ts → boundary-rows.d.ts} +45 -341
  37. package/dist/activities/execute-cursor/boundary-rows.js +1018 -0
  38. package/dist/activities/execute-cursor/boundary-rows.js.map +1 -0
  39. package/dist/activities/execute-cursor/cursor-capabilities.d.ts +1 -1
  40. package/dist/activities/execute-cursor/cursor-capabilities.js +1 -1
  41. package/dist/activities/execute-cursor/cursor-event-recorder.d.ts +33 -14
  42. package/dist/activities/execute-cursor/cursor-event-recorder.js +43 -21
  43. package/dist/activities/execute-cursor/cursor-event-recorder.js.map +1 -1
  44. package/dist/activities/execute-cursor/prompt-builder.d.ts +3 -3
  45. package/dist/activities/execute-cursor/prompt-builder.js +4 -4
  46. package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
  47. package/dist/activities/execute-cursor/sdk-warmup.d.ts +15 -6
  48. package/dist/activities/execute-cursor/sdk-warmup.js +15 -6
  49. package/dist/activities/execute-cursor/sdk-warmup.js.map +1 -1
  50. package/dist/activities/execute-cursor/service-tier.js +1 -2
  51. package/dist/activities/execute-cursor/service-tier.js.map +1 -1
  52. package/dist/activities/execute-cursor/session-lifecycle.d.ts +38 -59
  53. package/dist/activities/execute-cursor/session-lifecycle.js +59 -96
  54. package/dist/activities/execute-cursor/session-lifecycle.js.map +1 -1
  55. package/dist/activities/execute-cursor/session-store.d.ts +100 -0
  56. package/dist/activities/execute-cursor/session-store.js +157 -0
  57. package/dist/activities/execute-cursor/session-store.js.map +1 -0
  58. package/dist/activities/execute-cursor/sub-agent-steps.d.ts +79 -0
  59. package/dist/activities/execute-cursor/sub-agent-steps.js +180 -0
  60. package/dist/activities/execute-cursor/sub-agent-steps.js.map +1 -0
  61. package/dist/activities/execute-cursor/tool-result.d.ts +49 -0
  62. package/dist/activities/execute-cursor/tool-result.js +130 -0
  63. package/dist/activities/execute-cursor/tool-result.js.map +1 -0
  64. package/dist/activities/execute-cursor/translator.d.ts +178 -0
  65. package/dist/activities/execute-cursor/translator.js +485 -0
  66. package/dist/activities/execute-cursor/translator.js.map +1 -0
  67. package/dist/activities/execute-cursor/turn-boundary.d.ts +15 -5
  68. package/dist/activities/execute-cursor/turn-boundary.js +10 -14
  69. package/dist/activities/execute-cursor/turn-boundary.js.map +1 -1
  70. package/dist/activities/execute-cursor/turn-settle.d.ts +11 -7
  71. package/dist/activities/execute-cursor/turn-settle.js +47 -34
  72. package/dist/activities/execute-cursor/turn-settle.js.map +1 -1
  73. package/dist/activities/execute-cursor/turn-setup.d.ts +2 -2
  74. package/dist/activities/execute-cursor/turn-setup.js +5 -5
  75. package/dist/activities/execute-cursor/turn-setup.js.map +1 -1
  76. package/dist/activities/execute-cursor/turn-stream.d.ts +23 -14
  77. package/dist/activities/execute-cursor/turn-stream.js +41 -28
  78. package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
  79. package/dist/activities/execute-cursor/turn.d.ts +4 -4
  80. package/dist/activities/execute-cursor/turn.js +5 -5
  81. package/dist/activities/execute-cursor/usage-pricing.d.ts +2 -2
  82. package/dist/activities/execute-cursor/usage-pricing.js +2 -2
  83. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +2 -2
  84. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +2 -2
  85. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +16 -11
  86. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +22 -10
  87. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js.map +1 -1
  88. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js +1 -1
  89. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js.map +1 -1
  90. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +2 -3
  91. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +2 -3
  92. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js.map +1 -1
  93. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +12 -3
  94. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +18 -4
  95. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -1
  96. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.d.ts +10 -1
  97. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js +24 -11
  98. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js.map +1 -1
  99. package/dist/activities/execute-deep-agent/adapter.d.ts +1 -1
  100. package/dist/activities/execute-deep-agent/adapter.js +1 -1
  101. package/dist/activities/execute-deep-agent/approval-file-change.d.ts +19 -19
  102. package/dist/activities/execute-deep-agent/approval-file-change.js +16 -15
  103. package/dist/activities/execute-deep-agent/approval-file-change.js.map +1 -1
  104. package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +2 -2
  105. package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +2 -2
  106. package/dist/activities/execute-deep-agent/hitl.d.ts +2 -2
  107. package/dist/activities/execute-deep-agent/hitl.js +2 -2
  108. package/dist/activities/execute-deep-agent/inline-publisher.d.ts +13 -3
  109. package/dist/activities/execute-deep-agent/inline-publisher.js +3 -3
  110. package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -1
  111. package/dist/activities/execute-deep-agent/prompt-builder.d.ts +3 -3
  112. package/dist/activities/execute-deep-agent/prompt-builder.js +6 -7
  113. package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
  114. package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +16 -8
  115. package/dist/activities/execute-deep-agent/streaming-side-effects.js +20 -33
  116. package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
  117. package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +3 -3
  118. package/dist/activities/execute-deep-agent/subagent-transformer.js +1 -1
  119. package/dist/activities/execute-deep-agent/translator.d.ts +134 -0
  120. package/dist/activities/execute-deep-agent/translator.js +418 -0
  121. package/dist/activities/execute-deep-agent/translator.js.map +1 -0
  122. package/dist/activities/execute-deep-agent/turn-settle.d.ts +13 -7
  123. package/dist/activities/execute-deep-agent/turn-settle.js +34 -45
  124. package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -1
  125. package/dist/activities/execute-deep-agent/turn-setup.d.ts +8 -8
  126. package/dist/activities/execute-deep-agent/turn-setup.js +7 -7
  127. package/dist/activities/execute-deep-agent/turn-stream.d.ts +13 -10
  128. package/dist/activities/execute-deep-agent/turn-stream.js +44 -41
  129. package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -1
  130. package/dist/activities/execute-deep-agent/turn.d.ts +3 -3
  131. package/dist/activities/execute-deep-agent/turn.js +3 -3
  132. package/dist/config.d.ts +2 -2
  133. package/dist/harness/approval-decisions.d.ts +1 -1
  134. package/dist/harness/approval-decisions.js +1 -1
  135. package/dist/harness/capabilities.d.ts +21 -11
  136. package/dist/harness/capabilities.js +2 -2
  137. package/dist/harness/capture.d.ts +4 -4
  138. package/dist/harness/capture.js +4 -4
  139. package/dist/harness/persist-chokepoint.d.ts +3 -3
  140. package/dist/harness/persist-chokepoint.js +3 -3
  141. package/dist/harness/registry.d.ts +2 -2
  142. package/dist/harness/registry.js +2 -2
  143. package/dist/harness/run-turn.d.ts +6 -4
  144. package/dist/harness/run-turn.js +31 -9
  145. package/dist/harness/run-turn.js.map +1 -1
  146. package/dist/harness/stop-controller.d.ts +1 -1
  147. package/dist/harness/stop-controller.js +1 -1
  148. package/dist/harness/terminal-table.d.ts +7 -7
  149. package/dist/harness/terminal-table.js +7 -7
  150. package/dist/harness/transcript/builder.d.ts +182 -0
  151. package/dist/harness/transcript/builder.js +693 -0
  152. package/dist/harness/transcript/builder.js.map +1 -0
  153. package/dist/harness/transcript/events.d.ts +218 -0
  154. package/dist/harness/transcript/events.js +50 -0
  155. package/dist/harness/transcript/events.js.map +1 -0
  156. package/dist/harness/transcript/state.d.ts +110 -0
  157. package/dist/harness/transcript/state.js +148 -0
  158. package/dist/harness/transcript/state.js.map +1 -0
  159. package/dist/harness/turn-context.d.ts +54 -38
  160. package/dist/harness/turn-context.js +42 -43
  161. package/dist/harness/turn-context.js.map +1 -1
  162. package/dist/harness/types.d.ts +63 -22
  163. package/dist/harness/types.js +12 -11
  164. package/dist/harness/types.js.map +1 -1
  165. package/dist/harness/usage-accumulator.d.ts +2 -2
  166. package/dist/harness/usage-accumulator.js +2 -2
  167. package/dist/harness-adapters.d.ts +5 -4
  168. package/dist/harness-adapters.js +5 -4
  169. package/dist/harness-adapters.js.map +1 -1
  170. package/dist/middleware/approval-gate.d.ts +6 -0
  171. package/dist/middleware/approval-gate.js +7 -57
  172. package/dist/middleware/approval-gate.js.map +1 -1
  173. package/dist/middleware/cost-advisory.d.ts +3 -3
  174. package/dist/middleware/cost-advisory.js +3 -3
  175. package/dist/middleware/index.d.ts +1 -1
  176. package/dist/middleware/index.js +1 -1
  177. package/dist/runner-manager.js +1 -1
  178. package/dist/runner-manager.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-vision.d.ts +2 -1
  188. package/dist/shared/attachment-vision.js.map +1 -1
  189. package/dist/shared/attachment-zip.d.ts +2 -2
  190. package/dist/shared/attachment-zip.js +2 -2
  191. package/dist/shared/cost-guard.d.ts +2 -2
  192. package/dist/shared/cost-guard.js +2 -2
  193. package/dist/shared/exact-apply.d.ts +1 -1
  194. package/dist/shared/exact-apply.js +1 -1
  195. package/dist/shared/execution-context.d.ts +2 -2
  196. package/dist/shared/execution-context.js +2 -2
  197. package/dist/shared/extract-structured-output.d.ts +2 -2
  198. package/dist/shared/extract-structured-output.js +2 -2
  199. package/dist/shared/filereview/cas-touched.d.ts +2 -2
  200. package/dist/shared/filereview/cas-touched.js +2 -2
  201. package/dist/shared/heartbeat.d.ts +1 -1
  202. package/dist/shared/heartbeat.js +1 -1
  203. package/dist/shared/llm-backend.d.ts +0 -4
  204. package/dist/shared/llm-backend.js +0 -4
  205. package/dist/shared/llm-backend.js.map +1 -1
  206. package/dist/shared/model-error.d.ts +1 -2
  207. package/dist/shared/model-error.js +1 -2
  208. package/dist/shared/model-error.js.map +1 -1
  209. package/dist/shared/persist-decision.d.ts +18 -24
  210. package/dist/shared/persist-decision.js +19 -11
  211. package/dist/shared/persist-decision.js.map +1 -1
  212. package/dist/shared/prompt-sections.d.ts +4 -4
  213. package/dist/shared/prompt-sections.js +4 -4
  214. package/dist/shared/skill-resolver.d.ts +3 -3
  215. package/dist/shared/skill-resolver.js +3 -3
  216. package/dist/shared/status-offload.d.ts +1 -1
  217. package/dist/shared/status-offload.js +2 -2
  218. package/dist/shared/status-offload.js.map +1 -1
  219. package/dist/shared/streaming-scheduler.d.ts +2 -7
  220. package/dist/shared/streaming-scheduler.js +6 -14
  221. package/dist/shared/streaming-scheduler.js.map +1 -1
  222. package/dist/shared/subagent-rows.d.ts +2 -2
  223. package/dist/shared/subagent-rows.js +2 -2
  224. package/dist/shared/todos.d.ts +3 -3
  225. package/dist/shared/todos.js +3 -3
  226. package/dist/shared/tool-row.d.ts +19 -1
  227. package/dist/shared/tool-row.js +36 -2
  228. package/dist/shared/tool-row.js.map +1 -1
  229. package/dist/shared/worker-shutdown.d.ts +1 -1
  230. package/dist/shared/worker-shutdown.js +1 -1
  231. package/dist/shared/workspace/session-provision.d.ts +1 -1
  232. package/dist/shared/workspace/session-provision.js +1 -1
  233. package/dist/shared/workspace/sources/empty.d.ts +1 -1
  234. package/dist/shared/workspace/sources/empty.js +1 -2
  235. package/dist/shared/workspace/sources/empty.js.map +1 -1
  236. package/dist/shared/workspace/sources/git.js +4 -4
  237. package/dist/shared/workspace/sources/git.js.map +1 -1
  238. package/dist/shared/workspace/sources/local-path.js +6 -6
  239. package/dist/shared/workspace/sources/local-path.js.map +1 -1
  240. package/dist/shared/workspace/stigmer-link.d.ts +1 -1
  241. package/dist/shared/workspace/stigmer-link.js +1 -1
  242. package/dist/shared/workspace/types.d.ts +2 -5
  243. package/dist/shared/workspace/types.js +0 -6
  244. package/dist/shared/workspace/types.js.map +1 -1
  245. package/dist/shared/workspace/writeback-coordinator.d.ts +17 -4
  246. package/dist/shared/workspace/writeback-coordinator.js +7 -9
  247. package/dist/shared/workspace/writeback-coordinator.js.map +1 -1
  248. package/package.json +5 -5
  249. package/src/__test-utils__/__tests__/execution-record-barrier.test.ts +70 -0
  250. package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +35 -1
  251. package/src/__test-utils__/approval-contract/contract.ts +1 -1
  252. package/src/__test-utils__/approval-contract/types.ts +1 -1
  253. package/src/__test-utils__/harness-boot-order-child.ts +1 -1
  254. package/src/__test-utils__/harness-contract/contract.ts +8 -8
  255. package/src/__test-utils__/harness-contract/recording-sink.ts +11 -1
  256. package/src/__test-utils__/harness-contract/runtime-contract.ts +52 -16
  257. package/src/__test-utils__/harness-contract/scripted-adapter.ts +47 -43
  258. package/src/__test-utils__/hermetic-activity.ts +113 -9
  259. package/src/__test-utils__/model-registry-fixture.ts +31 -7
  260. package/src/__test-utils__/module-specifiers.ts +32 -3
  261. package/src/__tests__/harness-boot-order.test.ts +1 -1
  262. package/src/__tests__/harness-contract.test.ts +1 -1
  263. package/src/__tests__/runner-manager.test.ts +1 -1
  264. package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +32 -8
  265. package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +12 -10
  266. package/src/activities/execute-cursor/__test-utils__/fold.ts +116 -0
  267. package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +1 -1
  268. package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +72 -19
  269. package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +35 -29
  270. package/src/activities/execute-cursor/__test-utils__/scripted-sdk.ts +94 -38
  271. package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +2 -1
  272. package/src/activities/execute-cursor/__tests__/approval-state.test.ts +14 -21
  273. package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +3 -3
  274. package/src/activities/execute-cursor/__tests__/coarse-fingerprint.test.ts +2 -1
  275. package/src/activities/execute-cursor/__tests__/cursor-baseurl-routing.test.ts +10 -8
  276. package/src/activities/execute-cursor/__tests__/cursor-event-recorder.test.ts +142 -0
  277. package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.test.ts +24 -12
  278. package/src/activities/execute-cursor/__tests__/cursor-generate-image-live.test.ts +7 -2
  279. package/src/activities/execute-cursor/__tests__/cursor-hook-protocol-live.test.ts +163 -0
  280. package/src/activities/execute-cursor/__tests__/cursor-sdk-auth-smoke.test.ts +23 -20
  281. package/src/activities/execute-cursor/__tests__/cursor-transcript-live.test.ts +298 -0
  282. package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +4 -2
  283. package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +1 -1
  284. package/src/activities/execute-cursor/__tests__/hermetic/deny-and-retry.test.ts +5 -2
  285. package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +5 -2
  286. package/src/activities/execute-cursor/__tests__/hermetic/goldens/mcp-tool-call.status.json +71 -0
  287. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-task-note.status.json +73 -0
  288. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.error-delta.status.json +78 -0
  289. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.output-first.status.json +72 -0
  290. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.status.json +72 -0
  291. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sub-agent-delegation.status.json +109 -0
  292. package/src/activities/execute-cursor/__tests__/hermetic/goldens/thinking-turn.status.json +78 -0
  293. package/src/activities/execute-cursor/__tests__/hermetic/goldens/todo-write.status.json +119 -0
  294. package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-error.status.json +68 -0
  295. package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-only-step.status.json +67 -0
  296. package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.status.json +1 -1
  297. package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +10 -7
  298. package/src/activities/execute-cursor/__tests__/hermetic/mcp-tool-call.test.ts +146 -0
  299. package/src/activities/execute-cursor/__tests__/hermetic/pause-vs-shutdown.test.ts +8 -5
  300. package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +6 -2
  301. package/src/activities/execute-cursor/__tests__/hermetic/recovery-fresh-agent.test.ts +4 -1
  302. package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +6 -2
  303. package/src/activities/execute-cursor/__tests__/hermetic/sdk-task-note.test.ts +122 -0
  304. package/src/activities/execute-cursor/__tests__/hermetic/shell-output-delta.test.ts +276 -0
  305. package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +12 -9
  306. package/src/activities/execute-cursor/__tests__/hermetic/sub-agent-delegation.test.ts +196 -0
  307. package/src/activities/execute-cursor/__tests__/hermetic/thinking-turn.test.ts +145 -0
  308. package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +4 -1
  309. package/src/activities/execute-cursor/__tests__/hermetic/todo-write.test.ts +165 -0
  310. package/src/activities/execute-cursor/__tests__/hermetic/tool-call.test.ts +7 -4
  311. package/src/activities/execute-cursor/__tests__/hermetic/tool-error.test.ts +138 -0
  312. package/src/activities/execute-cursor/__tests__/hermetic/tool-only-step.test.ts +130 -0
  313. package/src/activities/execute-cursor/__tests__/hermetic/unattributed-hook-block.test.ts +17 -2
  314. package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -2
  315. package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +43 -60
  316. package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +23 -28
  317. package/src/activities/execute-cursor/__tests__/hook-script.test.ts +2 -1
  318. package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +1 -1
  319. package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +5 -5
  320. package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +11 -13
  321. package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +8 -11
  322. package/src/activities/execute-cursor/__tests__/session-lifecycle.test.ts +86 -58
  323. package/src/activities/execute-cursor/__tests__/session-store.test.ts +220 -0
  324. package/src/activities/execute-cursor/__tests__/tool-result-image.test.ts +8 -22
  325. package/src/activities/execute-cursor/__tests__/translator.test.ts +594 -0
  326. package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +8 -5
  327. package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +87 -63
  328. package/src/activities/execute-cursor/adapter.ts +13 -9
  329. package/src/activities/execute-cursor/approval-policy.ts +12 -24
  330. package/src/activities/execute-cursor/approval-state.ts +66 -1
  331. package/src/activities/execute-cursor/boundary-rows.ts +1132 -0
  332. package/src/activities/execute-cursor/cursor-capabilities.ts +1 -1
  333. package/src/activities/execute-cursor/cursor-event-recorder.ts +57 -28
  334. package/src/activities/execute-cursor/fetch-interceptor.ts +1 -1
  335. package/src/activities/execute-cursor/http2-interceptor.ts +1 -1
  336. package/src/activities/execute-cursor/prompt-builder.ts +6 -6
  337. package/src/activities/execute-cursor/sdk-warmup.ts +15 -6
  338. package/src/activities/execute-cursor/service-tier.ts +1 -2
  339. package/src/activities/execute-cursor/session-lifecycle.ts +63 -109
  340. package/src/activities/execute-cursor/session-store.ts +187 -0
  341. package/src/activities/execute-cursor/sub-agent-steps.ts +188 -0
  342. package/src/activities/execute-cursor/tool-result.ts +128 -0
  343. package/src/activities/execute-cursor/translator.ts +541 -0
  344. package/src/activities/execute-cursor/turn-boundary.ts +21 -14
  345. package/src/activities/execute-cursor/turn-settle.ts +46 -34
  346. package/src/activities/execute-cursor/turn-setup.ts +5 -5
  347. package/src/activities/execute-cursor/turn-stream.ts +49 -46
  348. package/src/activities/execute-cursor/turn.ts +5 -5
  349. package/src/activities/execute-cursor/usage-pricing.ts +2 -2
  350. package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +2 -2
  351. package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +23 -11
  352. package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +1 -1
  353. package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +2 -3
  354. package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +25 -4
  355. package/src/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.ts +25 -11
  356. package/src/activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts +1 -1
  357. package/src/activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts +1 -1
  358. package/src/activities/execute-deep-agent/__tests__/approval-file-change.test.ts +6 -17
  359. package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +25 -8
  360. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +2 -7
  361. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +4 -14
  362. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +1 -5
  363. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +4 -7
  364. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +1 -5
  365. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +2 -9
  366. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +2 -9
  367. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +1 -4
  368. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +1 -4
  369. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +1 -4
  370. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +109 -76
  371. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +1 -5
  372. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +2 -10
  373. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +2 -10
  374. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +1 -5
  375. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +3 -6
  376. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +1 -4
  377. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +1 -4
  378. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/write-todos.status.json +92 -0
  379. package/src/activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts +3 -3
  380. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-approve-all-lease.test.ts +9 -5
  381. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +3 -3
  382. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +3 -3
  383. package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +7 -6
  384. package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +10 -11
  385. package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +4 -4
  386. package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +9 -8
  387. package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +21 -13
  388. package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +2 -2
  389. package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +7 -7
  390. package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +28 -12
  391. package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +21 -21
  392. package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -5
  393. package/src/activities/execute-deep-agent/__tests__/hermetic/write-todos.test.ts +160 -0
  394. package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +35 -30
  395. package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +3 -4
  396. package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +12 -10
  397. package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +13 -3
  398. package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +26 -18
  399. package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +1 -1
  400. package/src/activities/execute-deep-agent/__tests__/{subagent-tracker.test.ts → translator-subagents.test.ts} +76 -57
  401. package/src/activities/execute-deep-agent/__tests__/{v3-status-builder.test.ts → translator-through-builder.test.ts} +213 -299
  402. package/src/activities/execute-deep-agent/__tests__/translator.test.ts +505 -0
  403. package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +11 -29
  404. package/src/activities/execute-deep-agent/adapter.ts +1 -1
  405. package/src/activities/execute-deep-agent/approval-file-change.ts +20 -22
  406. package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +2 -2
  407. package/src/activities/execute-deep-agent/hitl.ts +2 -2
  408. package/src/activities/execute-deep-agent/inline-publisher.ts +16 -5
  409. package/src/activities/execute-deep-agent/prompt-builder.ts +6 -7
  410. package/src/activities/execute-deep-agent/streaming-side-effects.ts +22 -31
  411. package/src/activities/execute-deep-agent/subagent-transformer.ts +3 -3
  412. package/src/activities/execute-deep-agent/translator.ts +463 -0
  413. package/src/activities/execute-deep-agent/turn-settle.ts +35 -43
  414. package/src/activities/execute-deep-agent/turn-setup.ts +8 -8
  415. package/src/activities/execute-deep-agent/turn-stream.ts +53 -51
  416. package/src/activities/execute-deep-agent/turn.ts +3 -3
  417. package/src/config.ts +2 -2
  418. package/src/harness/README.md +335 -0
  419. package/src/harness/__tests__/approval-decisions.test.ts +2 -2
  420. package/src/harness/__tests__/capture.test.ts +3 -3
  421. package/src/harness/__tests__/import-direction.test.ts +3 -2
  422. package/src/harness/__tests__/mount-skills.test.ts +4 -1
  423. package/src/harness/__tests__/readme-index.test.ts +339 -0
  424. package/src/harness/__tests__/run-turn.test.ts +131 -6
  425. package/src/harness/__tests__/transcript-is-engine-free.test.ts +83 -0
  426. package/src/harness/__tests__/transcript-writers.test.ts +191 -0
  427. package/src/harness/__tests__/turn-attachments-vision.test.ts +5 -2
  428. package/src/harness/__tests__/turn-context.test.ts +5 -5
  429. package/src/harness/approval-decisions.ts +1 -1
  430. package/src/harness/capabilities.ts +21 -11
  431. package/src/harness/capture.ts +4 -4
  432. package/src/harness/persist-chokepoint.ts +3 -3
  433. package/src/harness/registry.ts +2 -2
  434. package/src/harness/run-turn.ts +33 -9
  435. package/src/harness/stop-controller.ts +1 -1
  436. package/src/harness/terminal-table.ts +7 -7
  437. package/src/harness/transcript/__tests__/builder.test.ts +975 -0
  438. package/src/harness/transcript/__tests__/state.test.ts +143 -0
  439. package/src/harness/transcript/builder.ts +755 -0
  440. package/src/harness/transcript/events.ts +262 -0
  441. package/src/harness/transcript/state.ts +167 -0
  442. package/src/harness/turn-context.ts +61 -46
  443. package/src/harness/types.ts +64 -22
  444. package/src/harness/usage-accumulator.ts +2 -2
  445. package/src/harness-adapters.ts +5 -4
  446. package/src/middleware/__tests__/cost-advisory.test.ts +2 -2
  447. package/src/middleware/approval-gate.ts +7 -74
  448. package/src/middleware/cost-advisory.ts +3 -3
  449. package/src/middleware/index.ts +1 -1
  450. package/src/runner-manager.ts +1 -1
  451. package/src/shared/__tests__/approval-policy.test.ts +45 -0
  452. package/src/shared/__tests__/args-preview.test.ts +40 -20
  453. package/src/shared/__tests__/attachment-naming.test.ts +1 -1
  454. package/src/shared/__tests__/attachment-resolver.test.ts +5 -5
  455. package/src/shared/__tests__/attachment-zip.test.ts +1 -1
  456. package/src/shared/__tests__/blueprint-resolver.test.ts +1 -1
  457. package/src/shared/__tests__/cost-guard.test.ts +1 -1
  458. package/src/shared/__tests__/exact-apply.test.ts +2 -1
  459. package/src/shared/__tests__/persist-decision.test.ts +19 -33
  460. package/src/shared/__tests__/prompt-sections.test.ts +1 -1
  461. package/src/shared/__tests__/stamp-flowed-rows.test.ts +1 -1
  462. package/src/shared/__tests__/status-offload.test.ts +1 -1
  463. package/src/shared/__tests__/streaming-scheduler.test.ts +8 -9
  464. package/src/shared/__tests__/todos.test.ts +1 -1
  465. package/src/shared/__tests__/tool-row.test.ts +1 -1
  466. package/src/shared/approval-policy.ts +95 -0
  467. package/src/shared/args-preview.ts +51 -42
  468. package/src/shared/attachment-resolver.ts +4 -4
  469. package/src/shared/attachment-vision.ts +2 -1
  470. package/src/shared/attachment-zip.ts +2 -2
  471. package/src/shared/cost-guard.ts +2 -2
  472. package/src/shared/exact-apply.ts +1 -1
  473. package/src/shared/execution-context.ts +2 -2
  474. package/src/shared/extract-structured-output.ts +2 -2
  475. package/src/shared/filereview/__tests__/capture.test.ts +9 -5
  476. package/src/shared/filereview/__tests__/git-substrate.test.ts +4 -1
  477. package/src/shared/filereview/__tests__/proxy-reconcile.test.ts +3 -3
  478. package/src/shared/filereview/cas-touched.ts +2 -2
  479. package/src/shared/heartbeat.ts +1 -1
  480. package/src/shared/llm-backend.ts +0 -4
  481. package/src/shared/model-error.ts +1 -2
  482. package/src/shared/persist-decision.ts +19 -28
  483. package/src/shared/prompt-sections.ts +4 -4
  484. package/src/shared/skill-resolver.ts +3 -3
  485. package/src/shared/status-offload.ts +2 -2
  486. package/src/shared/streaming-scheduler.ts +8 -13
  487. package/src/shared/subagent-rows.ts +2 -2
  488. package/src/shared/todos.ts +3 -3
  489. package/src/shared/tool-row.ts +38 -2
  490. package/src/shared/worker-shutdown.ts +1 -1
  491. package/src/shared/workspace/__tests__/git-source.test.ts +3 -3
  492. package/src/shared/workspace/__tests__/provisioner.test.ts +5 -5
  493. package/src/shared/workspace/__tests__/session-provision.test.ts +2 -2
  494. package/src/shared/workspace/__tests__/writeback-coordinator.integration.test.ts +8 -9
  495. package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +25 -25
  496. package/src/shared/workspace/provisioner.ts +1 -1
  497. package/src/shared/workspace/session-provision.ts +1 -1
  498. package/src/shared/workspace/sources/empty.ts +2 -2
  499. package/src/shared/workspace/sources/git.ts +3 -4
  500. package/src/shared/workspace/sources/local-path.ts +5 -6
  501. package/src/shared/workspace/stigmer-link.ts +1 -1
  502. package/src/shared/workspace/types.ts +2 -5
  503. package/src/shared/workspace/writeback-coordinator.ts +23 -12
  504. package/dist/activities/execute-cursor/delta-enricher.d.ts +0 -87
  505. package/dist/activities/execute-cursor/delta-enricher.js +0 -265
  506. package/dist/activities/execute-cursor/delta-enricher.js.map +0 -1
  507. package/dist/activities/execute-cursor/message-translator.js +0 -2040
  508. package/dist/activities/execute-cursor/message-translator.js.map +0 -1
  509. package/dist/activities/execute-cursor/todo-tracker.d.ts +0 -40
  510. package/dist/activities/execute-cursor/todo-tracker.js +0 -80
  511. package/dist/activities/execute-cursor/todo-tracker.js.map +0 -1
  512. package/dist/activities/execute-deep-agent/execution-state.d.ts +0 -54
  513. package/dist/activities/execute-deep-agent/execution-state.js +0 -68
  514. package/dist/activities/execute-deep-agent/execution-state.js.map +0 -1
  515. package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +0 -65
  516. package/dist/activities/execute-deep-agent/status-builder-shared.js +0 -90
  517. package/dist/activities/execute-deep-agent/status-builder-shared.js.map +0 -1
  518. package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +0 -113
  519. package/dist/activities/execute-deep-agent/subagent-tracker.js +0 -400
  520. package/dist/activities/execute-deep-agent/subagent-tracker.js.map +0 -1
  521. package/dist/activities/execute-deep-agent/v3-events.d.ts +0 -102
  522. package/dist/activities/execute-deep-agent/v3-events.js +0 -35
  523. package/dist/activities/execute-deep-agent/v3-events.js.map +0 -1
  524. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.d.ts +0 -15
  525. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js +0 -235
  526. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js.map +0 -1
  527. package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +0 -111
  528. package/dist/activities/execute-deep-agent/v3-status-builder.js +0 -457
  529. package/dist/activities/execute-deep-agent/v3-status-builder.js.map +0 -1
  530. package/dist/shared/execution-status-writer.d.ts +0 -31
  531. package/dist/shared/execution-status-writer.js +0 -43
  532. package/dist/shared/execution-status-writer.js.map +0 -1
  533. package/src/activities/execute-cursor/__tests__/delta-enricher.test.ts +0 -310
  534. package/src/activities/execute-cursor/__tests__/message-translator.test.ts +0 -1033
  535. package/src/activities/execute-cursor/__tests__/todo-tracker.test.ts +0 -498
  536. package/src/activities/execute-cursor/delta-enricher.ts +0 -307
  537. package/src/activities/execute-cursor/message-translator.ts +0 -2319
  538. package/src/activities/execute-cursor/todo-tracker.ts +0 -91
  539. package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +0 -148
  540. package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +0 -154
  541. package/src/activities/execute-deep-agent/__tests__/status-builder-shared.test.ts +0 -47
  542. package/src/activities/execute-deep-agent/__tests__/v3-protocol-normalizer.test.ts +0 -324
  543. package/src/activities/execute-deep-agent/execution-state.ts +0 -78
  544. package/src/activities/execute-deep-agent/status-builder-shared.ts +0 -142
  545. package/src/activities/execute-deep-agent/subagent-tracker.ts +0 -479
  546. package/src/activities/execute-deep-agent/v3-events.ts +0 -153
  547. package/src/activities/execute-deep-agent/v3-protocol-normalizer.ts +0 -264
  548. package/src/activities/execute-deep-agent/v3-status-builder.ts +0 -565
  549. package/src/shared/execution-status-writer.ts +0 -56
@@ -1,11 +1,16 @@
1
1
  /**
2
2
  * The `@cursor/sdk` module a hermetic `ExecuteCursor` run imports — every
3
- * runtime surface the activity path touches, backed by scripted agents.
3
+ * runtime surface the activity path touches, backed by scripted agents — and
4
+ * the `@cursor/sdk/sqlite` module beside it, backed by a store that holds
5
+ * nothing.
4
6
  *
5
- * The activity reaches the SDK at three runtime sites and nowhere else:
7
+ * The activity reaches the SDK at four runtime sites and nowhere else:
6
8
  *
7
- * - `session-lifecycle.ts`: `Agent.create(options)`, `Agent.resume(id, options)`,
8
- * `Agent.archive(id, ...)` — the agent handle.
9
+ * - `session-lifecycle.ts`: `Agent.create(options)`, `Agent.resume(id, options)`
10
+ * — the agent handle.
11
+ * - `session-store.ts`: `SqliteLocalAgentStore.open({ workspaceRef, stateRoot })`
12
+ * from `@cursor/sdk/sqlite` — the session's store the handle is created and
13
+ * resumed over (`local.store`).
9
14
  * - `service-tier.ts`: `Cursor.models.list({ apiKey })` — the catalog the
10
15
  * variant params (`fast`, `thinking`) are pinned from.
11
16
  * - `index.ts` outer catch: `import("@cursor/sdk")` for `CursorSdkError`, the
@@ -13,34 +18,41 @@
13
18
  *
14
19
  * Neither the SDK nor the client is injectable into the activity (the real
15
20
  * seam arrives with the harness contract; parent Q1/Q2), so — exactly as the
16
- * native activity tests already do for their boundary modules — the module is
17
- * substituted with `vi.mock`. Three existing tests each mock ONE of these
21
+ * native activity tests already do for their boundary modules — the modules
22
+ * are substituted with `vi.mock`. Three existing tests each mock ONE of these
18
23
  * surfaces (`session-lifecycle.test.ts`, `service-tier.test.ts`,
19
- * `sdk-warmup.test.ts`); a whole-activity run needs all three at once, which is
20
- * what this module is.
24
+ * `sdk-warmup.test.ts`); a whole-activity run needs all of them at once, which
25
+ * is what this module is.
21
26
  *
22
- * `vi.mock` is hoisted and must appear in the test file; the factory can
23
- * `await import()` this module and return {@link scriptedCursorSdkModule}. The
24
- * module's statics read the {@link ScriptedCursorSdk} bound for the current
27
+ * `vi.mock` is hoisted and must appear in the test file, once per module id
28
+ * (a subpath is its own module id, so `@cursor/sdk/sqlite` needs its own
29
+ * `vi.mock`); the factories `await import()` this module and return
30
+ * {@link scriptedCursorSdkModule} and {@link scriptedCursorSqliteModule}. The
31
+ * modules' statics read the {@link ScriptedCursorSdk} bound for the current
25
32
  * scenario ({@link bindScriptedSdk}), so one test file can run several
26
- * scenarios with different agents against the same mocked module.
33
+ * scenarios with different agents against the same mocked modules.
27
34
  *
28
35
  * Resolution rules a scenario declares, mirroring what the real SDK does:
29
36
  * - `Agent.create` hands out the agent declared for the session it is asked
30
- * for (`agentForSession`, when the scenario resolves agents per session —
31
- * the harness contract kit runs several sessions concurrently on one
32
- * adapter, and the order their creates arrive in is real I/O timing), else
33
- * the NEXT unclaimed agent in `agents` (turn 1 of a fresh session; the fresh
34
- * agent of a poisoned-handle recovery) — unless the scenario declared a
35
- * `createFailure`, which the FIRST create throws instead (the SDK refusing
37
+ * for (`agentForWorkspaceRef`, when the scenario resolves agents per
38
+ * session — the harness contract kit runs several sessions concurrently on
39
+ * one adapter, and the order their creates arrive in is real I/O timing),
40
+ * else the NEXT unclaimed agent in `agents` (turn 1 of a fresh session; the
41
+ * fresh agent of a poisoned-handle recovery) — unless the scenario declared
42
+ * a `createFailure`, which the FIRST create throws instead (the SDK refusing
36
43
  * to mint an agent: a 401 on the key, a validation error).
37
44
  * - `Agent.resume(id)` hands back the agent with that id if the scenario
38
45
  * declared it (in `agents` or `resumableAgents`, or handed out for a
39
46
  * session), else throws — `resolveAgent` then falls back to `create`, which
40
47
  * is the production shape of a lost handle.
41
48
  * - `Cursor.models.list` answers the scenario's catalog.
49
+ * - `SqliteLocalAgentStore.open` hands out a {@link ScriptedLocalAgentStore}
50
+ * carrying the ref and root it was asked for, and records the open; its
51
+ * `dispose()` is recorded too, so a scenario can assert the adapter's
52
+ * session-store lifetime (`releaseSession`, `shutdown`).
42
53
  */
43
54
  import type { AgentOptions, ModelListItem, SDKAgent } from "@cursor/sdk";
55
+ import type { SqliteLocalAgentStoreOptions } from "@cursor/sdk/sqlite";
44
56
  import type { ScriptedCursorAgent } from "./scripted-agent.js";
45
57
  export interface ScriptedSdkOptions {
46
58
  /** Agents handed out by `Agent.create`, in order. Also resumable by id. */
@@ -48,12 +60,12 @@ export interface ScriptedSdkOptions {
48
60
  /**
49
61
  * The agent `Agent.create` hands out for the session the create names,
50
62
  * consulted before the ordered list. The SDK's create options carry the
51
- * session as `platform.workspaceRef` (`session-lifecycle.ts`
52
- * `resolvePlatformOptions`: `stigmer-session:<sessionId>`), so the resolver
53
- * is keyed by that ref — a scenario computes the ref the same way the
54
- * adapter does. `undefined` falls through to the list. Consulted live on
55
- * every create, so a scenario may mint the session's agent only when it
56
- * learns of the session.
63
+ * session as the store's `workspaceRef` (`local.store`, opened by
64
+ * `session-store.ts`: `stigmer-session:<sessionId>`), so the resolver is
65
+ * keyed by that ref — a scenario computes the ref the same way the adapter
66
+ * does (`resolveSessionStoreLocation`). `undefined` falls through to the
67
+ * list. Consulted live on every create, so a scenario may mint the session's
68
+ * agent only when it learns of the session.
57
69
  */
58
70
  readonly agentForWorkspaceRef?: (workspaceRef: string) => ScriptedCursorAgent | undefined;
59
71
  /**
@@ -77,17 +89,32 @@ export interface RecordedResolution {
77
89
  readonly agentId: string | undefined;
78
90
  readonly options: Partial<AgentOptions> | undefined;
79
91
  }
92
+ /**
93
+ * The `@cursor/sdk/sqlite` store the adapter opens per session, holding
94
+ * nothing: the scripted agents carry their own state, so the store only has
95
+ * to be the thing `Agent.create` / `Agent.resume` are handed and the thing
96
+ * `releaseSession` / `shutdown` dispose. `open` and `dispose` are recorded on
97
+ * the bound {@link ScriptedCursorSdk} for lifetime assertions.
98
+ */
99
+ export declare class ScriptedLocalAgentStore {
100
+ readonly workspaceRef: string;
101
+ readonly stateRoot: string;
102
+ disposeCalls: number;
103
+ constructor(workspaceRef: string, stateRoot: string);
104
+ static open(options: SqliteLocalAgentStoreOptions): Promise<ScriptedLocalAgentStore>;
105
+ dispose(): Promise<void>;
106
+ }
80
107
  export declare class ScriptedCursorSdk {
81
108
  private readonly options;
82
109
  readonly resolutions: RecordedResolution[];
83
- readonly archived: string[];
110
+ /** Every store `SqliteLocalAgentStore.open` handed out, in order. */
111
+ readonly stores: ScriptedLocalAgentStore[];
84
112
  private nextCreate;
85
113
  private createFailurePending;
86
114
  private readonly byId;
87
115
  constructor(options: ScriptedSdkOptions);
88
116
  create(options: AgentOptions): SDKAgent;
89
117
  resume(agentId: string, options: Partial<AgentOptions> | undefined): SDKAgent;
90
- archive(agentId: string): void;
91
118
  listModels(): readonly ModelListItem[];
92
119
  }
93
120
  /** The construction options of the SDK's `CursorSdkError` (`errors.d.ts`), minus `cause`. */
@@ -136,3 +163,20 @@ export declare function bindScriptedSdk(sdk: ScriptedCursorSdk): void;
136
163
  * here rather than silently stubbed.
137
164
  */
138
165
  export declare function scriptedCursorSdkModule(): Record<string, unknown>;
166
+ /**
167
+ * The factory a test passes to `vi.mock("@cursor/sdk/sqlite", ...)`, beside
168
+ * the one above:
169
+ *
170
+ * ```ts
171
+ * vi.mock("@cursor/sdk/sqlite", async () =>
172
+ * (await import("../../__test-utils__/scripted-sdk.js")).scriptedCursorSqliteModule(),
173
+ * );
174
+ * ```
175
+ *
176
+ * The one export the runner reads from that entry (`session-store.ts`). The
177
+ * class is exported under the SDK's name so `session-store.ts`'s dynamic
178
+ * import destructures it unchanged; its type is the SDK's, which is why
179
+ * {@link ScriptedLocalAgentStore} carries `workspaceRef`, `stateRoot` and
180
+ * `dispose()` — the members the runner touches — and nothing else.
181
+ */
182
+ export declare function scriptedCursorSqliteModule(): Record<string, unknown>;
@@ -1,11 +1,16 @@
1
1
  /**
2
2
  * The `@cursor/sdk` module a hermetic `ExecuteCursor` run imports — every
3
- * runtime surface the activity path touches, backed by scripted agents.
3
+ * runtime surface the activity path touches, backed by scripted agents — and
4
+ * the `@cursor/sdk/sqlite` module beside it, backed by a store that holds
5
+ * nothing.
4
6
  *
5
- * The activity reaches the SDK at three runtime sites and nowhere else:
7
+ * The activity reaches the SDK at four runtime sites and nowhere else:
6
8
  *
7
- * - `session-lifecycle.ts`: `Agent.create(options)`, `Agent.resume(id, options)`,
8
- * `Agent.archive(id, ...)` — the agent handle.
9
+ * - `session-lifecycle.ts`: `Agent.create(options)`, `Agent.resume(id, options)`
10
+ * — the agent handle.
11
+ * - `session-store.ts`: `SqliteLocalAgentStore.open({ workspaceRef, stateRoot })`
12
+ * from `@cursor/sdk/sqlite` — the session's store the handle is created and
13
+ * resumed over (`local.store`).
9
14
  * - `service-tier.ts`: `Cursor.models.list({ apiKey })` — the catalog the
10
15
  * variant params (`fast`, `thinking`) are pinned from.
11
16
  * - `index.ts` outer catch: `import("@cursor/sdk")` for `CursorSdkError`, the
@@ -13,50 +18,78 @@
13
18
  *
14
19
  * Neither the SDK nor the client is injectable into the activity (the real
15
20
  * seam arrives with the harness contract; parent Q1/Q2), so — exactly as the
16
- * native activity tests already do for their boundary modules — the module is
17
- * substituted with `vi.mock`. Three existing tests each mock ONE of these
21
+ * native activity tests already do for their boundary modules — the modules
22
+ * are substituted with `vi.mock`. Three existing tests each mock ONE of these
18
23
  * surfaces (`session-lifecycle.test.ts`, `service-tier.test.ts`,
19
- * `sdk-warmup.test.ts`); a whole-activity run needs all three at once, which is
20
- * what this module is.
24
+ * `sdk-warmup.test.ts`); a whole-activity run needs all of them at once, which
25
+ * is what this module is.
21
26
  *
22
- * `vi.mock` is hoisted and must appear in the test file; the factory can
23
- * `await import()` this module and return {@link scriptedCursorSdkModule}. The
24
- * module's statics read the {@link ScriptedCursorSdk} bound for the current
27
+ * `vi.mock` is hoisted and must appear in the test file, once per module id
28
+ * (a subpath is its own module id, so `@cursor/sdk/sqlite` needs its own
29
+ * `vi.mock`); the factories `await import()` this module and return
30
+ * {@link scriptedCursorSdkModule} and {@link scriptedCursorSqliteModule}. The
31
+ * modules' statics read the {@link ScriptedCursorSdk} bound for the current
25
32
  * scenario ({@link bindScriptedSdk}), so one test file can run several
26
- * scenarios with different agents against the same mocked module.
33
+ * scenarios with different agents against the same mocked modules.
27
34
  *
28
35
  * Resolution rules a scenario declares, mirroring what the real SDK does:
29
36
  * - `Agent.create` hands out the agent declared for the session it is asked
30
- * for (`agentForSession`, when the scenario resolves agents per session —
31
- * the harness contract kit runs several sessions concurrently on one
32
- * adapter, and the order their creates arrive in is real I/O timing), else
33
- * the NEXT unclaimed agent in `agents` (turn 1 of a fresh session; the fresh
34
- * agent of a poisoned-handle recovery) — unless the scenario declared a
35
- * `createFailure`, which the FIRST create throws instead (the SDK refusing
37
+ * for (`agentForWorkspaceRef`, when the scenario resolves agents per
38
+ * session — the harness contract kit runs several sessions concurrently on
39
+ * one adapter, and the order their creates arrive in is real I/O timing),
40
+ * else the NEXT unclaimed agent in `agents` (turn 1 of a fresh session; the
41
+ * fresh agent of a poisoned-handle recovery) — unless the scenario declared
42
+ * a `createFailure`, which the FIRST create throws instead (the SDK refusing
36
43
  * to mint an agent: a 401 on the key, a validation error).
37
44
  * - `Agent.resume(id)` hands back the agent with that id if the scenario
38
45
  * declared it (in `agents` or `resumableAgents`, or handed out for a
39
46
  * session), else throws — `resolveAgent` then falls back to `create`, which
40
47
  * is the production shape of a lost handle.
41
48
  * - `Cursor.models.list` answers the scenario's catalog.
49
+ * - `SqliteLocalAgentStore.open` hands out a {@link ScriptedLocalAgentStore}
50
+ * carrying the ref and root it was asked for, and records the open; its
51
+ * `dispose()` is recorded too, so a scenario can assert the adapter's
52
+ * session-store lifetime (`releaseSession`, `shutdown`).
42
53
  */
43
54
  /**
44
- * The `platform.workspaceRef` a create names, read defensively: the platform
45
- * option's type re-exports from the unshipped `@anysphere/cursor-sdk-local-runtime`
46
- * and resolves to `any` under `skipLibCheck` (the same gap `scripted-agent.ts`
47
- * records for the delta channel), so the shape is checked here, not assumed.
55
+ * The session a create names: the `workspaceRef` of the store it passes as
56
+ * `local.store`. In a hermetic run that store is the one this module's sqlite
57
+ * double opened; anything else (a test that mocks `@cursor/sdk` with its own
58
+ * stub and passes no store) names no session and falls through to the list.
48
59
  */
49
60
  function workspaceRefOf(options) {
50
- const platform = options.platform;
51
- if (typeof platform !== "object" || platform === null)
52
- return undefined;
53
- const ref = platform.workspaceRef;
54
- return typeof ref === "string" ? ref : undefined;
61
+ const store = options.local?.store;
62
+ return store instanceof ScriptedLocalAgentStore ? store.workspaceRef : undefined;
63
+ }
64
+ /**
65
+ * The `@cursor/sdk/sqlite` store the adapter opens per session, holding
66
+ * nothing: the scripted agents carry their own state, so the store only has
67
+ * to be the thing `Agent.create` / `Agent.resume` are handed and the thing
68
+ * `releaseSession` / `shutdown` dispose. `open` and `dispose` are recorded on
69
+ * the bound {@link ScriptedCursorSdk} for lifetime assertions.
70
+ */
71
+ export class ScriptedLocalAgentStore {
72
+ workspaceRef;
73
+ stateRoot;
74
+ disposeCalls = 0;
75
+ constructor(workspaceRef, stateRoot) {
76
+ this.workspaceRef = workspaceRef;
77
+ this.stateRoot = stateRoot;
78
+ }
79
+ static async open(options) {
80
+ const store = new ScriptedLocalAgentStore(options.workspaceRef, options.stateRoot ?? "");
81
+ current().stores.push(store);
82
+ return store;
83
+ }
84
+ async dispose() {
85
+ this.disposeCalls++;
86
+ }
55
87
  }
56
88
  export class ScriptedCursorSdk {
57
89
  options;
58
90
  resolutions = [];
59
- archived = [];
91
+ /** Every store `SqliteLocalAgentStore.open` handed out, in order. */
92
+ stores = [];
60
93
  nextCreate = 0;
61
94
  createFailurePending;
62
95
  byId = new Map();
@@ -101,9 +134,6 @@ export class ScriptedCursorSdk {
101
134
  agent.model = options.model;
102
135
  return agent;
103
136
  }
104
- archive(agentId) {
105
- this.archived.push(agentId);
106
- }
107
137
  listModels() {
108
138
  return this.options.catalog;
109
139
  }
@@ -178,7 +208,6 @@ export function scriptedCursorSdkModule() {
178
208
  Agent: {
179
209
  create: async (options) => current().create(options),
180
210
  resume: async (agentId, options) => current().resume(agentId, options),
181
- archive: async (agentId) => current().archive(agentId),
182
211
  },
183
212
  Cursor: {
184
213
  models: {
@@ -188,4 +217,25 @@ export function scriptedCursorSdkModule() {
188
217
  CursorSdkError: ScriptedCursorSdkError,
189
218
  };
190
219
  }
220
+ /**
221
+ * The factory a test passes to `vi.mock("@cursor/sdk/sqlite", ...)`, beside
222
+ * the one above:
223
+ *
224
+ * ```ts
225
+ * vi.mock("@cursor/sdk/sqlite", async () =>
226
+ * (await import("../../__test-utils__/scripted-sdk.js")).scriptedCursorSqliteModule(),
227
+ * );
228
+ * ```
229
+ *
230
+ * The one export the runner reads from that entry (`session-store.ts`). The
231
+ * class is exported under the SDK's name so `session-store.ts`'s dynamic
232
+ * import destructures it unchanged; its type is the SDK's, which is why
233
+ * {@link ScriptedLocalAgentStore} carries `workspaceRef`, `stateRoot` and
234
+ * `dispose()` — the members the runner touches — and nothing else.
235
+ */
236
+ export function scriptedCursorSqliteModule() {
237
+ return {
238
+ SqliteLocalAgentStore: ScriptedLocalAgentStore,
239
+ };
240
+ }
191
241
  //# sourceMappingURL=scripted-sdk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripted-sdk.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/scripted-sdk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scripted-sdk.js","sourceRoot":"","sources":["../../../../src/activities/execute-cursor/__test-utils__/scripted-sdk.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,10 @@
5
5
  * module boots, releases, and delegates.
6
6
  *
7
7
  * What this adapter owns: the proxy interceptors and the parked-agent cache
8
- * (worker lifetime), the parked agent per session (session lifetime), and one
9
- * engine turn (`runTurn`, through `turn.ts`). Everything else about a turn is
10
- * the runtime's (`harness/run-turn.ts`).
8
+ * (worker lifetime), the parked agent and the SDK store per session (session
9
+ * lifetime; `agent-session-cache.ts`, `session-store.ts`), and one engine turn
10
+ * (`runTurn`, through `turn.ts`). Everything else about a turn is the
11
+ * runtime's (`harness/run-turn.ts`).
11
12
  *
12
13
  * THIS MODULE'S STATIC GRAPH IS SDK-FREE, ON PURPOSE. The composition roots
13
14
  * import it (through `src/harness-adapters.ts`) BEFORE they boot it, and
@@ -27,7 +28,7 @@
27
28
  * The interceptors read the proxy credential from `Config.proxyTokenRef` per
28
29
  * request; which credential that is (the static root's control-plane token,
29
30
  * the manager's minted runner token) is the root's decision, not this
30
- * module's (Q-S2-7).
31
+ * module's.
31
32
  *
32
33
  * What this adapter never does: throw out of `runTurn` (an SDK failure is
33
34
  * `failed` with the classifier's sentence; an unexpected exception is
@@ -39,14 +40,14 @@
39
40
  *
40
41
  * The turn boundary (`turn-boundary.ts`) runs inside `turn.ts` and reads
41
42
  * this harness's deny-and-retry evidence — the denial ledger — into WAITING
42
- * rows and settled rows. The file-review capture is NOT here since S3 M4:
43
+ * rows and settled rows. The file-review capture is NOT here since #1096:
43
44
  * the runtime pins the baseline before this adapter runs and captures the
44
45
  * whole turn's tree after it returns (`harness/capture.ts`); what this
45
46
  * adapter contributes is the hook sidecar it binds as the runtime's CAS
46
47
  * observations (`turn-setup.ts` `installGate`).
47
48
  *
48
- * Extracted from `index.ts` `createCursorActivities` at S2 M3b; split from
49
- * the turn body at S2 M5. The seventeen hermetic goldens under
49
+ * Extracted from `index.ts` `createCursorActivities` in #1070, which also
50
+ * split it from the turn body. The seventeen hermetic goldens under
50
51
  * `__tests__/hermetic/` pin the result byte for byte.
51
52
  */
52
53
  import type { Config } from "../../config.js";
@@ -5,9 +5,10 @@
5
5
  * module boots, releases, and delegates.
6
6
  *
7
7
  * What this adapter owns: the proxy interceptors and the parked-agent cache
8
- * (worker lifetime), the parked agent per session (session lifetime), and one
9
- * engine turn (`runTurn`, through `turn.ts`). Everything else about a turn is
10
- * the runtime's (`harness/run-turn.ts`).
8
+ * (worker lifetime), the parked agent and the SDK store per session (session
9
+ * lifetime; `agent-session-cache.ts`, `session-store.ts`), and one engine turn
10
+ * (`runTurn`, through `turn.ts`). Everything else about a turn is the
11
+ * runtime's (`harness/run-turn.ts`).
11
12
  *
12
13
  * THIS MODULE'S STATIC GRAPH IS SDK-FREE, ON PURPOSE. The composition roots
13
14
  * import it (through `src/harness-adapters.ts`) BEFORE they boot it, and
@@ -27,7 +28,7 @@
27
28
  * The interceptors read the proxy credential from `Config.proxyTokenRef` per
28
29
  * request; which credential that is (the static root's control-plane token,
29
30
  * the manager's minted runner token) is the root's decision, not this
30
- * module's (Q-S2-7).
31
+ * module's.
31
32
  *
32
33
  * What this adapter never does: throw out of `runTurn` (an SDK failure is
33
34
  * `failed` with the classifier's sentence; an unexpected exception is
@@ -39,14 +40,14 @@
39
40
  *
40
41
  * The turn boundary (`turn-boundary.ts`) runs inside `turn.ts` and reads
41
42
  * this harness's deny-and-retry evidence — the denial ledger — into WAITING
42
- * rows and settled rows. The file-review capture is NOT here since S3 M4:
43
+ * rows and settled rows. The file-review capture is NOT here since #1096:
43
44
  * the runtime pins the baseline before this adapter runs and captures the
44
45
  * whole turn's tree after it returns (`harness/capture.ts`); what this
45
46
  * adapter contributes is the hook sidecar it binds as the runtime's CAS
46
47
  * observations (`turn-setup.ts` `installGate`).
47
48
  *
48
- * Extracted from `index.ts` `createCursorActivities` at S2 M3b; split from
49
- * the turn body at S2 M5. The seventeen hermetic goldens under
49
+ * Extracted from `index.ts` `createCursorActivities` in #1070, which also
50
+ * split it from the turn body. The seventeen hermetic goldens under
50
51
  * `__tests__/hermetic/` pin the result byte for byte.
51
52
  */
52
53
  import { markBoot } from "../../shared/cold-start-timing.js";
@@ -54,6 +55,7 @@ import { closeAllCachedAgents, evictSessionAgent } from "./agent-session-cache.j
54
55
  import { CURSOR_CAPABILITIES } from "./cursor-capabilities.js";
55
56
  import { installFetchInterceptor } from "./fetch-interceptor.js";
56
57
  import { assertHttp2ConnectPatched, installHttp2Interceptor } from "./http2-interceptor.js";
58
+ import { releaseAllSessionStores, releaseSessionStore } from "./session-store.js";
57
59
  /** The config slice this adapter reads per turn, taken at `boot`; a whole `Config` satisfies it. */
58
60
  export function resolveCursorConfig(config) {
59
61
  return {
@@ -102,13 +104,15 @@ export function createCursorAdapter() {
102
104
  const { runCursorTurn } = await import("./turn.js");
103
105
  booted = { config: resolveCursorConfig(bootConfig), runCursorTurn };
104
106
  },
105
- /** Close every parked agent (their executor leases and MCP subprocesses). */
107
+ /** Close every parked agent (their executor leases and MCP subprocesses), then every session's SDK store. */
106
108
  async shutdown() {
107
109
  closeAllCachedAgents();
110
+ await releaseAllSessionStores();
108
111
  },
109
- /** The session is done on this host: close the agent parked for it, if any (#215). */
112
+ /** The session is done on this host: close the agent parked for it, if any (#215), then its SDK store (#1053). */
110
113
  async releaseSession(sessionId) {
111
114
  evictSessionAgent(sessionId);
115
+ await releaseSessionStore(sessionId);
112
116
  },
113
117
  async runTurn(input, sink) {
114
118
  if (booted === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAG5F,oGAAoG;AACpG,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;KACpD,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,mBAAmB;IACjC,IAAI,MAAuC,CAAC;IAE5C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,mBAAmB;QAEjC;;;;;;WAMG;QACH,KAAK,CAAC,IAAI,CAAC,UAAkB;YAC3B,IAAI,UAAU,CAAC,aAAa,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CACb,oIAAoI,CACrI,CAAC;YACJ,CAAC;YACD,qEAAqE;YACrE,uEAAuE;YACvE,wEAAwE;YACxE,oEAAoE;YACpE,uBAAuB,CAAC;gBACtB,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,SAAS;gBACpD,aAAa,EAAE,UAAU,CAAC,aAAa;aACxC,CAAC,CAAC;YACH,uBAAuB,CAAC;gBACtB,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,SAAS;gBACpD,aAAa,EAAE,UAAU,CAAC,aAAa;aACxC,CAAC,CAAC;YACH,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YACnC,yEAAyE;YACzE,sEAAsE;YACtE,mDAAmD;YACnD,MAAM,yBAAyB,EAAE,CAAC;YAElC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YACpD,MAAM,GAAG,EAAE,MAAM,EAAE,mBAAmB,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;QACtE,CAAC;QAED,6EAA6E;QAC7E,KAAK,CAAC,QAAQ;YACZ,oBAAoB,EAAE,CAAC;QACzB,CAAC;QAED,sFAAsF;QACtF,KAAK,CAAC,cAAc,CAAC,SAAiB;YACpC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,KAAgB,EAAE,IAAc;YAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;YACpH,CAAC;YACD,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGlF,oGAAoG;AACpG,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;KACpD,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,mBAAmB;IACjC,IAAI,MAAuC,CAAC;IAE5C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,mBAAmB;QAEjC;;;;;;WAMG;QACH,KAAK,CAAC,IAAI,CAAC,UAAkB;YAC3B,IAAI,UAAU,CAAC,aAAa,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CACb,oIAAoI,CACrI,CAAC;YACJ,CAAC;YACD,qEAAqE;YACrE,uEAAuE;YACvE,wEAAwE;YACxE,oEAAoE;YACpE,uBAAuB,CAAC;gBACtB,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,SAAS;gBACpD,aAAa,EAAE,UAAU,CAAC,aAAa;aACxC,CAAC,CAAC;YACH,uBAAuB,CAAC;gBACtB,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,SAAS;gBACpD,aAAa,EAAE,UAAU,CAAC,aAAa;aACxC,CAAC,CAAC;YACH,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YACnC,yEAAyE;YACzE,sEAAsE;YACtE,mDAAmD;YACnD,MAAM,yBAAyB,EAAE,CAAC;YAElC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YACpD,MAAM,GAAG,EAAE,MAAM,EAAE,mBAAmB,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;QACtE,CAAC;QAED,6GAA6G;QAC7G,KAAK,CAAC,QAAQ;YACZ,oBAAoB,EAAE,CAAC;YACvB,MAAM,uBAAuB,EAAE,CAAC;QAClC,CAAC;QAED,kHAAkH;QAClH,KAAK,CAAC,cAAc,CAAC,SAAiB;YACpC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC7B,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,KAAgB,EAAE,IAAc;YAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;YACpH,CAAC;YACD,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -37,16 +37,14 @@ export type { MergedToolPolicy, PolicySource } from "../../shared/approval-polic
37
37
  export type ApprovalCategory = ToolApprovalCategory;
38
38
  export declare const approvalCategory: typeof toolApprovalCategory;
39
39
  /**
40
- * Top-level tool-argument fields, in priority order, that identify the specific
41
- * resource a built-in tool acts on. The list deliberately spans BOTH taxonomies'
42
- * arg shapes: the hook input names a file `file_path` and the stream names it
43
- * `path`; both name a shell command `command`. Extracting the same resource
44
- * VALUE on both sides (the absolute path / the command string) is what lets the
45
- * hook-recorded denial token equal the stream-computed token. Authored here once
46
- * and injected into the generated preToolUse hook script so the runner and the
47
- * hook never disagree on which field to match.
40
+ * The salient argument fields — the resource a built-in acts on — are the
41
+ * platform's one list, `shared/args-preview.ts` `SALIENT_ARG_FIELDS` (moved
42
+ * there in #1097: the transcript builder previews every row over it for
43
+ * both harnesses). Re-exported here for this harness's identity code and the
44
+ * generated hook script, which inject it so the runner and the hook never
45
+ * disagree on which field to match.
48
46
  */
49
- export declare const SALIENT_ARG_FIELDS: readonly ["file_path", "path", "target_notebook", "command"];
47
+ export { SALIENT_ARG_FIELDS } from "../../shared/args-preview.js";
50
48
  /**
51
49
  * Check whether a built-in (non-MCP) Cursor tool requires user approval.
52
50
  *
@@ -88,7 +86,9 @@ export declare function getBuiltInGatedCategories(): Array<[string, ApprovalCate
88
86
  * Approval-message template for a gated built-in tool (either taxonomy), or
89
87
  * undefined when the tool is not gated. Resolved via {@link approvalCategory}
90
88
  * so stream-side names (`edit`/`shell`/`delete`) and hook-side names
91
- * (`Write`/`Shell`/`Delete`) both map to the same template. Callers resolve the
89
+ * (`Write`/`Shell`/`Delete`) both map to the same template — the platform's
90
+ * ONE table, `shared/approval-policy.ts` `CATEGORY_APPROVAL_MESSAGE`, shared
91
+ * with the native gate since #1097. Callers resolve the
92
92
  * placeholders against the tool args via resolveApprovalMessage.
93
93
  */
94
94
  export declare function getBuiltInApprovalMessage(toolName: string): string | undefined;
@@ -22,6 +22,7 @@ import { toolApprovalCategory } from "../../shared/tool-kind.js";
22
22
  // (`from "./approval-policy.js"`) keep working unchanged. This module now owns
23
23
  // only the Cursor-specific built-in-tool gating helpers below.
24
24
  export { mergeApprovalPolicies, lookupMcpToolPolicy, resolveApprovalMessage, POLICY_ENGINE_VERSION, } from "../../shared/approval-policy.js";
25
+ import { CATEGORY_APPROVAL_MESSAGE } from "../../shared/approval-policy.js";
25
26
  /**
26
27
  * Built-in Cursor tools the preToolUse hook gates, named as the hook receives
27
28
  * them.
@@ -43,29 +44,15 @@ const BUILT_IN_GATED = new Set([
43
44
  ]);
44
45
  export const approvalCategory = toolApprovalCategory;
45
46
  /**
46
- * Human-readable approval-message template per canonical category. Keyed by
47
- * category (not raw tool name) so a denial surfaced from either taxonomy renders
48
- * the same message. Placeholders resolve against the tool args via
49
- * {@link resolveApprovalMessage}; `{{args.path}}` and `{{args.command}}` are the
50
- * stream-side field names (the runner builds the approval surface from the
51
- * streamed tool call, whose args use `path`/`command`).
47
+ * The salient argument fields — the resource a built-in acts on — are the
48
+ * platform's one list, `shared/args-preview.ts` `SALIENT_ARG_FIELDS` (moved
49
+ * there in #1097: the transcript builder previews every row over it for
50
+ * both harnesses). Re-exported here for this harness's identity code and the
51
+ * generated hook script, which inject it so the runner and the hook never
52
+ * disagree on which field to match.
52
53
  */
53
- const CATEGORY_APPROVAL_MESSAGE = {
54
- write: "Write file: {{args.path}}",
55
- delete: "Delete: {{args.path}}",
56
- shell: "Run command: {{args.command}}",
57
- };
58
- /**
59
- * Top-level tool-argument fields, in priority order, that identify the specific
60
- * resource a built-in tool acts on. The list deliberately spans BOTH taxonomies'
61
- * arg shapes: the hook input names a file `file_path` and the stream names it
62
- * `path`; both name a shell command `command`. Extracting the same resource
63
- * VALUE on both sides (the absolute path / the command string) is what lets the
64
- * hook-recorded denial token equal the stream-computed token. Authored here once
65
- * and injected into the generated preToolUse hook script so the runner and the
66
- * hook never disagree on which field to match.
67
- */
68
- export const SALIENT_ARG_FIELDS = ["file_path", "path", "target_notebook", "command"];
54
+ export { SALIENT_ARG_FIELDS } from "../../shared/args-preview.js";
55
+ import { SALIENT_ARG_FIELDS } from "../../shared/args-preview.js";
69
56
  /**
70
57
  * Check whether a built-in (non-MCP) Cursor tool requires user approval.
71
58
  *
@@ -119,7 +106,9 @@ export function getBuiltInGatedCategories() {
119
106
  * Approval-message template for a gated built-in tool (either taxonomy), or
120
107
  * undefined when the tool is not gated. Resolved via {@link approvalCategory}
121
108
  * so stream-side names (`edit`/`shell`/`delete`) and hook-side names
122
- * (`Write`/`Shell`/`Delete`) both map to the same template. Callers resolve the
109
+ * (`Write`/`Shell`/`Delete`) both map to the same template — the platform's
110
+ * ONE table, `shared/approval-policy.ts` `CATEGORY_APPROVAL_MESSAGE`, shared
111
+ * with the native gate since #1097. Callers resolve the
123
112
  * placeholders against the tool args via resolveApprovalMessage.
124
113
  */
125
114
  export function getBuiltInApprovalMessage(toolName) {
@@ -1 +1 @@
1
- {"version":3,"file":"approval-policy.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/approval-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,oBAAoB,EAA6B,MAAM,2BAA2B,CAAC;AAE5F,+EAA+E;AAC/E,iFAAiF;AACjF,+DAA+D;AAC/D,+EAA+E;AAC/E,+DAA+D;AAC/D,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AAGzC;;;;;;;;;;;GAWG;AACH,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IAClD,OAAO;IACP,YAAY;IACZ,cAAc;IACd,OAAO;IACP,QAAQ;CACT,CAAC,CAAC;AAoBH,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,yBAAyB,GAAqC;IAClE,KAAK,EAAE,2BAA2B;IAClC,MAAM,EAAE,uBAAuB;IAC/B,KAAK,EAAE,+BAA+B;CACvC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,iBAAiB,EAAE,SAAS,CAAU,CAAC;AAE/F;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,KAAK,GAAsC,EAAE,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAgB;IACxD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAyC;IACrE,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"approval-policy.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/approval-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,oBAAoB,EAA6B,MAAM,2BAA2B,CAAC;AAE5F,+EAA+E;AAC/E,iFAAiF;AACjF,+DAA+D;AAC/D,+EAA+E;AAC/E,+DAA+D;AAC/D,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAG5E;;;;;;;;;;;GAWG;AACH,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IAClD,OAAO;IACP,YAAY;IACZ,cAAc;IACd,OAAO;IACP,QAAQ;CACT,CAAC,CAAC;AAoBH,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAErD;;;;;;;GAOG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,KAAK,GAAsC,EAAE,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAgB;IACxD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAyC;IACrE,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -81,7 +81,7 @@
81
81
  */
82
82
  import { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
83
83
  import type { PendingApproval } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/approval_pb";
84
- import type { AgentMessage } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
84
+ import type { AgentMessage, ToolCall } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
85
85
  import type { MergedToolPolicy, ApprovalCategory } from "./approval-policy.js";
86
86
  import { type FingerprintKey } from "../../shared/approval-fingerprint.js";
87
87
  export interface McpToolPolicyEntry {
@@ -248,6 +248,40 @@ export declare function contentToken(key: string, salient: string, contentDigest
248
248
  * reinvoke-time identities can never drift.
249
249
  */
250
250
  export declare function primaryToken(key: string, salient: string, contentDigest: string): string;
251
+ /**
252
+ * Compute a streamed tool call's identity token in the same canonical space the
253
+ * preToolUse hook records denials in (see {@link toolIdentity} / primaryToken).
254
+ * The token keys on the cross-taxonomy category + salient resource PLUS, for a
255
+ * file edit/write, the {@link contentDigest} of the edit content — so a stream
256
+ * `edit` correlates to the hook's `Write` deny for the same path AND content,
257
+ * and an approval of one edit does not match a DIFFERENT edit to the same file.
258
+ *
259
+ * The digest is read from the persisted `approval_content_digest` field when
260
+ * present (a seeded gate carries it, stable even if `args` was elided), and is
261
+ * recomputed from the call's args otherwise (a freshly-streamed call). For a
262
+ * shell/delete/MCP call (no content) it falls back to the coarse token, exactly
263
+ * as before — so those identities are unchanged.
264
+ *
265
+ * Exported so the resume-grant round-trip can be locked against it: the grant a
266
+ * resume mints for an approved tool (buildApprovalGrants -> primaryToken) must
267
+ * equal THIS denial/overlay identity, or the re-issued call is re-gated forever
268
+ * (the dual-path drift the approval-state round-trip suite guards against).
269
+ */
270
+ export declare function toolCallIdentityToken(tc: ToolCall): string;
271
+ /**
272
+ * Decode a primary token back into its (key, salient, digest) for the synthesis
273
+ * fallback. The token is `base64(key \n salient)` (coarse) or
274
+ * `base64(key \n salient \n digest)` (content-exact); the digest is the optional
275
+ * third segment. salient never contains a newline (a path or shell command), so
276
+ * splitting on the first two newlines is unambiguous.
277
+ */
278
+ export declare function decodeIdentityToken(token: string): {
279
+ key: string;
280
+ salient: string;
281
+ digest: string;
282
+ } | undefined;
283
+ /** Best-effort args record for a tool call (proto struct, else parsed preview). */
284
+ export declare function toolCallArgs(tc: ToolCall): Record<string, unknown>;
251
285
  /**
252
286
  * The shared HMAC coarse fingerprint of an approval grant.
253
287
  *