@stigmer/runner 3.15.3-dev.20260914121148 → 3.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) hide show
  1. package/README.md +2 -1
  2. package/dist/.build-fingerprint +1 -1
  3. package/dist/__test-utils__/approval-contract/types.d.ts +1 -1
  4. package/dist/__test-utils__/hermetic-activity.d.ts +61 -7
  5. package/dist/__test-utils__/hermetic-activity.js +100 -9
  6. package/dist/__test-utils__/hermetic-activity.js.map +1 -1
  7. package/dist/__test-utils__/model-registry-fixture.d.ts +22 -3
  8. package/dist/__test-utils__/model-registry-fixture.js +22 -7
  9. package/dist/__test-utils__/model-registry-fixture.js.map +1 -1
  10. package/dist/activities/execute-cursor/__test-utils__/contract-subject.d.ts +2 -2
  11. package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +2 -2
  12. package/dist/activities/execute-cursor/__test-utils__/fold.d.ts +61 -0
  13. package/dist/activities/execute-cursor/__test-utils__/fold.js +94 -0
  14. package/dist/activities/execute-cursor/__test-utils__/fold.js.map +1 -0
  15. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +1 -1
  16. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -1
  17. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +47 -12
  18. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +41 -10
  19. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
  20. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +15 -6
  21. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +17 -4
  22. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -1
  23. package/dist/activities/execute-cursor/adapter.d.ts +4 -4
  24. package/dist/activities/execute-cursor/adapter.js +4 -4
  25. package/dist/activities/execute-cursor/approval-policy.d.ts +10 -10
  26. package/dist/activities/execute-cursor/approval-policy.js +12 -23
  27. package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
  28. package/dist/activities/execute-cursor/approval-state.d.ts +35 -1
  29. package/dist/activities/execute-cursor/approval-state.js +65 -0
  30. package/dist/activities/execute-cursor/approval-state.js.map +1 -1
  31. package/dist/activities/execute-cursor/{message-translator.d.ts → boundary-rows.d.ts} +45 -341
  32. package/dist/activities/execute-cursor/boundary-rows.js +1018 -0
  33. package/dist/activities/execute-cursor/boundary-rows.js.map +1 -0
  34. package/dist/activities/execute-cursor/cursor-capabilities.d.ts +1 -1
  35. package/dist/activities/execute-cursor/cursor-capabilities.js +1 -1
  36. package/dist/activities/execute-cursor/cursor-event-recorder.d.ts +33 -14
  37. package/dist/activities/execute-cursor/cursor-event-recorder.js +43 -21
  38. package/dist/activities/execute-cursor/cursor-event-recorder.js.map +1 -1
  39. package/dist/activities/execute-cursor/prompt-builder.d.ts +3 -3
  40. package/dist/activities/execute-cursor/prompt-builder.js +4 -4
  41. package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
  42. package/dist/activities/execute-cursor/service-tier.js +1 -2
  43. package/dist/activities/execute-cursor/service-tier.js.map +1 -1
  44. package/dist/activities/execute-cursor/sub-agent-steps.d.ts +79 -0
  45. package/dist/activities/execute-cursor/sub-agent-steps.js +180 -0
  46. package/dist/activities/execute-cursor/sub-agent-steps.js.map +1 -0
  47. package/dist/activities/execute-cursor/tool-result.d.ts +49 -0
  48. package/dist/activities/execute-cursor/tool-result.js +130 -0
  49. package/dist/activities/execute-cursor/tool-result.js.map +1 -0
  50. package/dist/activities/execute-cursor/translator.d.ts +178 -0
  51. package/dist/activities/execute-cursor/translator.js +485 -0
  52. package/dist/activities/execute-cursor/translator.js.map +1 -0
  53. package/dist/activities/execute-cursor/turn-boundary.d.ts +15 -5
  54. package/dist/activities/execute-cursor/turn-boundary.js +10 -14
  55. package/dist/activities/execute-cursor/turn-boundary.js.map +1 -1
  56. package/dist/activities/execute-cursor/turn-settle.d.ts +11 -7
  57. package/dist/activities/execute-cursor/turn-settle.js +47 -34
  58. package/dist/activities/execute-cursor/turn-settle.js.map +1 -1
  59. package/dist/activities/execute-cursor/turn-setup.d.ts +2 -2
  60. package/dist/activities/execute-cursor/turn-setup.js +5 -5
  61. package/dist/activities/execute-cursor/turn-setup.js.map +1 -1
  62. package/dist/activities/execute-cursor/turn-stream.d.ts +23 -14
  63. package/dist/activities/execute-cursor/turn-stream.js +41 -28
  64. package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
  65. package/dist/activities/execute-cursor/turn.d.ts +4 -4
  66. package/dist/activities/execute-cursor/turn.js +5 -5
  67. package/dist/activities/execute-cursor/usage-pricing.d.ts +2 -2
  68. package/dist/activities/execute-cursor/usage-pricing.js +2 -2
  69. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +2 -2
  70. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +2 -2
  71. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +16 -11
  72. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +22 -10
  73. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js.map +1 -1
  74. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js +1 -1
  75. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js.map +1 -1
  76. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +2 -3
  77. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +2 -3
  78. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js.map +1 -1
  79. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +12 -3
  80. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +18 -4
  81. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -1
  82. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.d.ts +10 -1
  83. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js +24 -11
  84. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js.map +1 -1
  85. package/dist/activities/execute-deep-agent/adapter.d.ts +1 -1
  86. package/dist/activities/execute-deep-agent/adapter.js +1 -1
  87. package/dist/activities/execute-deep-agent/approval-file-change.d.ts +19 -19
  88. package/dist/activities/execute-deep-agent/approval-file-change.js +16 -15
  89. package/dist/activities/execute-deep-agent/approval-file-change.js.map +1 -1
  90. package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +2 -2
  91. package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +2 -2
  92. package/dist/activities/execute-deep-agent/hitl.d.ts +2 -2
  93. package/dist/activities/execute-deep-agent/hitl.js +2 -2
  94. package/dist/activities/execute-deep-agent/inline-publisher.d.ts +13 -3
  95. package/dist/activities/execute-deep-agent/inline-publisher.js +3 -3
  96. package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -1
  97. package/dist/activities/execute-deep-agent/prompt-builder.d.ts +3 -3
  98. package/dist/activities/execute-deep-agent/prompt-builder.js +6 -7
  99. package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
  100. package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +16 -8
  101. package/dist/activities/execute-deep-agent/streaming-side-effects.js +20 -33
  102. package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
  103. package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +3 -3
  104. package/dist/activities/execute-deep-agent/subagent-transformer.js +1 -1
  105. package/dist/activities/execute-deep-agent/translator.d.ts +134 -0
  106. package/dist/activities/execute-deep-agent/translator.js +418 -0
  107. package/dist/activities/execute-deep-agent/translator.js.map +1 -0
  108. package/dist/activities/execute-deep-agent/turn-settle.d.ts +13 -7
  109. package/dist/activities/execute-deep-agent/turn-settle.js +34 -45
  110. package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -1
  111. package/dist/activities/execute-deep-agent/turn-setup.d.ts +8 -8
  112. package/dist/activities/execute-deep-agent/turn-setup.js +7 -7
  113. package/dist/activities/execute-deep-agent/turn-stream.d.ts +13 -10
  114. package/dist/activities/execute-deep-agent/turn-stream.js +44 -41
  115. package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -1
  116. package/dist/activities/execute-deep-agent/turn.d.ts +3 -3
  117. package/dist/activities/execute-deep-agent/turn.js +3 -3
  118. package/dist/activities/generate-session-subject.d.ts +25 -4
  119. package/dist/activities/generate-session-subject.js +17 -7
  120. package/dist/activities/generate-session-subject.js.map +1 -1
  121. package/dist/client/stigmer-client.d.ts +17 -6
  122. package/dist/client/stigmer-client.js +47 -14
  123. package/dist/client/stigmer-client.js.map +1 -1
  124. package/dist/config.d.ts +6 -3
  125. package/dist/config.js +4 -1
  126. package/dist/config.js.map +1 -1
  127. package/dist/harness/approval-decisions.d.ts +1 -1
  128. package/dist/harness/approval-decisions.js +1 -1
  129. package/dist/harness/capabilities.d.ts +21 -11
  130. package/dist/harness/capabilities.js +2 -2
  131. package/dist/harness/capture.d.ts +4 -4
  132. package/dist/harness/capture.js +4 -4
  133. package/dist/harness/persist-chokepoint.d.ts +3 -3
  134. package/dist/harness/persist-chokepoint.js +3 -3
  135. package/dist/harness/registry.d.ts +2 -2
  136. package/dist/harness/registry.js +2 -2
  137. package/dist/harness/run-turn.d.ts +6 -4
  138. package/dist/harness/run-turn.js +31 -9
  139. package/dist/harness/run-turn.js.map +1 -1
  140. package/dist/harness/stop-controller.d.ts +1 -1
  141. package/dist/harness/stop-controller.js +1 -1
  142. package/dist/harness/terminal-table.d.ts +7 -7
  143. package/dist/harness/terminal-table.js +7 -7
  144. package/dist/harness/transcript/builder.d.ts +182 -0
  145. package/dist/harness/transcript/builder.js +693 -0
  146. package/dist/harness/transcript/builder.js.map +1 -0
  147. package/dist/harness/transcript/events.d.ts +218 -0
  148. package/dist/harness/transcript/events.js +50 -0
  149. package/dist/harness/transcript/events.js.map +1 -0
  150. package/dist/harness/transcript/state.d.ts +110 -0
  151. package/dist/harness/transcript/state.js +148 -0
  152. package/dist/harness/transcript/state.js.map +1 -0
  153. package/dist/harness/turn-context.d.ts +54 -38
  154. package/dist/harness/turn-context.js +42 -43
  155. package/dist/harness/turn-context.js.map +1 -1
  156. package/dist/harness/types.d.ts +63 -22
  157. package/dist/harness/types.js +12 -11
  158. package/dist/harness/types.js.map +1 -1
  159. package/dist/harness/usage-accumulator.d.ts +2 -2
  160. package/dist/harness/usage-accumulator.js +2 -2
  161. package/dist/harness-adapters.d.ts +5 -4
  162. package/dist/harness-adapters.js +5 -4
  163. package/dist/harness-adapters.js.map +1 -1
  164. package/dist/interceptors/run-credential-activity.d.ts +28 -0
  165. package/dist/interceptors/run-credential-activity.js +56 -0
  166. package/dist/interceptors/run-credential-activity.js.map +1 -0
  167. package/dist/middleware/approval-gate.d.ts +6 -0
  168. package/dist/middleware/approval-gate.js +7 -57
  169. package/dist/middleware/approval-gate.js.map +1 -1
  170. package/dist/middleware/cost-advisory.d.ts +3 -3
  171. package/dist/middleware/cost-advisory.js +3 -3
  172. package/dist/middleware/index.d.ts +1 -1
  173. package/dist/middleware/index.js +1 -1
  174. package/dist/runner-manager.js +10 -4
  175. package/dist/runner-manager.js.map +1 -1
  176. package/dist/shared/activity-input.d.ts +9 -0
  177. package/dist/shared/activity-input.js +17 -0
  178. package/dist/shared/activity-input.js.map +1 -1
  179. package/dist/shared/approval-policy.d.ts +53 -0
  180. package/dist/shared/approval-policy.js +76 -0
  181. package/dist/shared/approval-policy.js.map +1 -1
  182. package/dist/shared/args-preview.d.ts +45 -22
  183. package/dist/shared/args-preview.js +51 -41
  184. package/dist/shared/args-preview.js.map +1 -1
  185. package/dist/shared/attachment-resolver.d.ts +4 -4
  186. package/dist/shared/attachment-resolver.js +4 -4
  187. package/dist/shared/attachment-zip.d.ts +2 -2
  188. package/dist/shared/attachment-zip.js +2 -2
  189. package/dist/shared/channel-attachment.d.ts +8 -5
  190. package/dist/shared/channel-attachment.js +10 -6
  191. package/dist/shared/channel-attachment.js.map +1 -1
  192. package/dist/shared/cost-guard.d.ts +2 -2
  193. package/dist/shared/cost-guard.js +2 -2
  194. package/dist/shared/exact-apply.d.ts +1 -1
  195. package/dist/shared/exact-apply.js +1 -1
  196. package/dist/shared/execution-context.d.ts +2 -2
  197. package/dist/shared/execution-context.js +2 -2
  198. package/dist/shared/extract-structured-output.d.ts +2 -2
  199. package/dist/shared/extract-structured-output.js +2 -2
  200. package/dist/shared/filereview/cas-touched.d.ts +2 -2
  201. package/dist/shared/filereview/cas-touched.js +2 -2
  202. package/dist/shared/filereview/progress.d.ts +13 -0
  203. package/dist/shared/filereview/progress.js +13 -0
  204. package/dist/shared/filereview/progress.js.map +1 -1
  205. package/dist/shared/heartbeat.d.ts +1 -1
  206. package/dist/shared/heartbeat.js +1 -1
  207. package/dist/shared/llm-backend.d.ts +0 -4
  208. package/dist/shared/llm-backend.js +0 -4
  209. package/dist/shared/llm-backend.js.map +1 -1
  210. package/dist/shared/memory-attachment.d.ts +16 -9
  211. package/dist/shared/memory-attachment.js +18 -10
  212. package/dist/shared/memory-attachment.js.map +1 -1
  213. package/dist/shared/model-error.d.ts +1 -2
  214. package/dist/shared/model-error.js +1 -2
  215. package/dist/shared/model-error.js.map +1 -1
  216. package/dist/shared/persist-decision.d.ts +18 -24
  217. package/dist/shared/persist-decision.js +19 -11
  218. package/dist/shared/persist-decision.js.map +1 -1
  219. package/dist/shared/prompt-sections.d.ts +4 -4
  220. package/dist/shared/prompt-sections.js +4 -4
  221. package/dist/shared/run-credential-store.d.ts +32 -0
  222. package/dist/shared/run-credential-store.js +39 -0
  223. package/dist/shared/run-credential-store.js.map +1 -0
  224. package/dist/shared/run-credential.d.ts +61 -0
  225. package/dist/shared/run-credential.js +68 -0
  226. package/dist/shared/run-credential.js.map +1 -0
  227. package/dist/shared/skill-resolver.d.ts +3 -3
  228. package/dist/shared/skill-resolver.js +3 -3
  229. package/dist/shared/status-offload.d.ts +1 -1
  230. package/dist/shared/status-offload.js +2 -2
  231. package/dist/shared/status-offload.js.map +1 -1
  232. package/dist/shared/streaming-scheduler.d.ts +2 -7
  233. package/dist/shared/streaming-scheduler.js +6 -14
  234. package/dist/shared/streaming-scheduler.js.map +1 -1
  235. package/dist/shared/subagent-rows.d.ts +2 -2
  236. package/dist/shared/subagent-rows.js +2 -2
  237. package/dist/shared/synthesized-attachment.d.ts +30 -3
  238. package/dist/shared/synthesized-attachment.js +26 -0
  239. package/dist/shared/synthesized-attachment.js.map +1 -1
  240. package/dist/shared/todos.d.ts +3 -3
  241. package/dist/shared/todos.js +3 -3
  242. package/dist/shared/tool-row.d.ts +19 -1
  243. package/dist/shared/tool-row.js +36 -2
  244. package/dist/shared/tool-row.js.map +1 -1
  245. package/dist/shared/worker-shutdown.d.ts +1 -1
  246. package/dist/shared/worker-shutdown.js +1 -1
  247. package/dist/shared/workspace/session-provision.d.ts +1 -1
  248. package/dist/shared/workspace/session-provision.js +1 -1
  249. package/dist/shared/workspace/sources/empty.d.ts +1 -1
  250. package/dist/shared/workspace/sources/empty.js +1 -2
  251. package/dist/shared/workspace/sources/empty.js.map +1 -1
  252. package/dist/shared/workspace/sources/git.js +4 -4
  253. package/dist/shared/workspace/sources/git.js.map +1 -1
  254. package/dist/shared/workspace/sources/local-path.js +6 -6
  255. package/dist/shared/workspace/sources/local-path.js.map +1 -1
  256. package/dist/shared/workspace/stigmer-link.d.ts +1 -1
  257. package/dist/shared/workspace/stigmer-link.js +1 -1
  258. package/dist/shared/workspace/types.d.ts +2 -5
  259. package/dist/shared/workspace/types.js +0 -6
  260. package/dist/shared/workspace/types.js.map +1 -1
  261. package/dist/shared/workspace/writeback-coordinator.d.ts +17 -4
  262. package/dist/shared/workspace/writeback-coordinator.js +7 -9
  263. package/dist/shared/workspace/writeback-coordinator.js.map +1 -1
  264. package/dist/worker.js +10 -3
  265. package/dist/worker.js.map +1 -1
  266. package/dist/workflow-source.d.ts +10 -0
  267. package/dist/workflow-source.js +12 -0
  268. package/dist/workflow-source.js.map +1 -1
  269. package/dist/workflows/execute-from-execution.d.ts +15 -0
  270. package/dist/workflows/execute-from-execution.js +11 -0
  271. package/dist/workflows/execute-from-execution.js.map +1 -1
  272. package/dist/workflows/index.d.ts +5 -3
  273. package/dist/workflows/index.js +5 -3
  274. package/dist/workflows/index.js.map +1 -1
  275. package/dist/workflows/interceptors/run-credential.d.ts +34 -0
  276. package/dist/workflows/interceptors/run-credential.js +71 -0
  277. package/dist/workflows/interceptors/run-credential.js.map +1 -0
  278. package/package.json +4 -4
  279. package/src/__test-utils__/__tests__/execution-record-barrier.test.ts +70 -0
  280. package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +35 -1
  281. package/src/__test-utils__/approval-contract/contract.ts +1 -1
  282. package/src/__test-utils__/approval-contract/types.ts +1 -1
  283. package/src/__test-utils__/harness-boot-order-child.ts +1 -1
  284. package/src/__test-utils__/harness-contract/contract.ts +8 -8
  285. package/src/__test-utils__/harness-contract/recording-sink.ts +11 -1
  286. package/src/__test-utils__/harness-contract/runtime-contract.ts +52 -16
  287. package/src/__test-utils__/harness-contract/scripted-adapter.ts +47 -43
  288. package/src/__test-utils__/hermetic-activity.ts +113 -9
  289. package/src/__test-utils__/model-registry-fixture.ts +31 -7
  290. package/src/__test-utils__/module-specifiers.ts +32 -3
  291. package/src/__tests__/harness-boot-order.test.ts +1 -1
  292. package/src/__tests__/harness-contract.test.ts +1 -1
  293. package/src/__tests__/run-credential-e2e.test.ts +233 -0
  294. package/src/__tests__/run-credential-registration.test.ts +80 -0
  295. package/src/__tests__/runner-manager.test.ts +1 -1
  296. package/src/activities/__tests__/generate-session-subject-wire.test.ts +119 -0
  297. package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +1 -1
  298. package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +2 -2
  299. package/src/activities/execute-cursor/__test-utils__/fold.ts +116 -0
  300. package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +1 -1
  301. package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +67 -17
  302. package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +19 -5
  303. package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +2 -1
  304. package/src/activities/execute-cursor/__tests__/approval-state.test.ts +14 -21
  305. package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +3 -3
  306. package/src/activities/execute-cursor/__tests__/coarse-fingerprint.test.ts +2 -1
  307. package/src/activities/execute-cursor/__tests__/cursor-event-recorder.test.ts +142 -0
  308. package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.test.ts +19 -8
  309. package/src/activities/execute-cursor/__tests__/cursor-sdk-auth-smoke.test.ts +10 -8
  310. package/src/activities/execute-cursor/__tests__/cursor-transcript-live.test.ts +298 -0
  311. package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +4 -2
  312. package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +1 -1
  313. package/src/activities/execute-cursor/__tests__/hermetic/deny-and-retry.test.ts +1 -1
  314. package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +1 -1
  315. package/src/activities/execute-cursor/__tests__/hermetic/goldens/mcp-tool-call.status.json +71 -0
  316. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-task-note.status.json +73 -0
  317. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.error-delta.status.json +78 -0
  318. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.output-first.status.json +72 -0
  319. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.status.json +72 -0
  320. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sub-agent-delegation.status.json +109 -0
  321. package/src/activities/execute-cursor/__tests__/hermetic/goldens/thinking-turn.status.json +78 -0
  322. package/src/activities/execute-cursor/__tests__/hermetic/goldens/todo-write.status.json +119 -0
  323. package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-error.status.json +68 -0
  324. package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-only-step.status.json +67 -0
  325. package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.status.json +1 -1
  326. package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +7 -7
  327. package/src/activities/execute-cursor/__tests__/hermetic/mcp-tool-call.test.ts +146 -0
  328. package/src/activities/execute-cursor/__tests__/hermetic/pause-vs-shutdown.test.ts +5 -5
  329. package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +2 -1
  330. package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +2 -1
  331. package/src/activities/execute-cursor/__tests__/hermetic/sdk-task-note.test.ts +122 -0
  332. package/src/activities/execute-cursor/__tests__/hermetic/shell-output-delta.test.ts +276 -0
  333. package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +8 -8
  334. package/src/activities/execute-cursor/__tests__/hermetic/sub-agent-delegation.test.ts +196 -0
  335. package/src/activities/execute-cursor/__tests__/hermetic/thinking-turn.test.ts +145 -0
  336. package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +1 -1
  337. package/src/activities/execute-cursor/__tests__/hermetic/todo-write.test.ts +165 -0
  338. package/src/activities/execute-cursor/__tests__/hermetic/tool-call.test.ts +3 -3
  339. package/src/activities/execute-cursor/__tests__/hermetic/tool-error.test.ts +138 -0
  340. package/src/activities/execute-cursor/__tests__/hermetic/tool-only-step.test.ts +130 -0
  341. package/src/activities/execute-cursor/__tests__/hermetic/unattributed-hook-block.test.ts +13 -1
  342. package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +2 -2
  343. package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +43 -60
  344. package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +23 -28
  345. package/src/activities/execute-cursor/__tests__/hook-script.test.ts +2 -1
  346. package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +1 -1
  347. package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +5 -5
  348. package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +11 -13
  349. package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +8 -11
  350. package/src/activities/execute-cursor/__tests__/tool-result-image.test.ts +8 -22
  351. package/src/activities/execute-cursor/__tests__/translator.test.ts +594 -0
  352. package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +8 -5
  353. package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +87 -63
  354. package/src/activities/execute-cursor/adapter.ts +4 -4
  355. package/src/activities/execute-cursor/approval-policy.ts +12 -24
  356. package/src/activities/execute-cursor/approval-state.ts +66 -1
  357. package/src/activities/execute-cursor/boundary-rows.ts +1132 -0
  358. package/src/activities/execute-cursor/cursor-capabilities.ts +1 -1
  359. package/src/activities/execute-cursor/cursor-event-recorder.ts +57 -28
  360. package/src/activities/execute-cursor/fetch-interceptor.ts +1 -1
  361. package/src/activities/execute-cursor/http2-interceptor.ts +1 -1
  362. package/src/activities/execute-cursor/prompt-builder.ts +6 -6
  363. package/src/activities/execute-cursor/service-tier.ts +1 -2
  364. package/src/activities/execute-cursor/sub-agent-steps.ts +188 -0
  365. package/src/activities/execute-cursor/tool-result.ts +128 -0
  366. package/src/activities/execute-cursor/translator.ts +541 -0
  367. package/src/activities/execute-cursor/turn-boundary.ts +21 -14
  368. package/src/activities/execute-cursor/turn-settle.ts +46 -34
  369. package/src/activities/execute-cursor/turn-setup.ts +5 -5
  370. package/src/activities/execute-cursor/turn-stream.ts +49 -46
  371. package/src/activities/execute-cursor/turn.ts +5 -5
  372. package/src/activities/execute-cursor/usage-pricing.ts +2 -2
  373. package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +2 -2
  374. package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +23 -11
  375. package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +1 -1
  376. package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +2 -3
  377. package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +25 -4
  378. package/src/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.ts +25 -11
  379. package/src/activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts +1 -1
  380. package/src/activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts +1 -1
  381. package/src/activities/execute-deep-agent/__tests__/approval-file-change.test.ts +6 -17
  382. package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +25 -8
  383. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +2 -7
  384. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +4 -14
  385. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +1 -5
  386. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +4 -7
  387. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +1 -5
  388. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +2 -9
  389. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +2 -9
  390. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +1 -4
  391. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +1 -4
  392. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +1 -4
  393. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +109 -76
  394. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +1 -5
  395. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +2 -10
  396. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +2 -10
  397. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +1 -5
  398. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +3 -6
  399. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +1 -4
  400. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +1 -4
  401. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/write-todos.status.json +92 -0
  402. package/src/activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts +3 -3
  403. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-approve-all-lease.test.ts +9 -5
  404. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +3 -3
  405. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +3 -3
  406. package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +7 -6
  407. package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +10 -11
  408. package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +4 -4
  409. package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +9 -8
  410. package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +21 -13
  411. package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +2 -2
  412. package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +7 -7
  413. package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +28 -12
  414. package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +21 -21
  415. package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -5
  416. package/src/activities/execute-deep-agent/__tests__/hermetic/write-todos.test.ts +160 -0
  417. package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +35 -30
  418. package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +3 -4
  419. package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +12 -10
  420. package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +13 -3
  421. package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +26 -18
  422. package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +1 -1
  423. package/src/activities/execute-deep-agent/__tests__/{subagent-tracker.test.ts → translator-subagents.test.ts} +76 -57
  424. package/src/activities/execute-deep-agent/__tests__/{v3-status-builder.test.ts → translator-through-builder.test.ts} +213 -299
  425. package/src/activities/execute-deep-agent/__tests__/translator.test.ts +505 -0
  426. package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +11 -29
  427. package/src/activities/execute-deep-agent/adapter.ts +1 -1
  428. package/src/activities/execute-deep-agent/approval-file-change.ts +20 -22
  429. package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +2 -2
  430. package/src/activities/execute-deep-agent/hitl.ts +2 -2
  431. package/src/activities/execute-deep-agent/inline-publisher.ts +16 -5
  432. package/src/activities/execute-deep-agent/prompt-builder.ts +6 -7
  433. package/src/activities/execute-deep-agent/streaming-side-effects.ts +22 -31
  434. package/src/activities/execute-deep-agent/subagent-transformer.ts +3 -3
  435. package/src/activities/execute-deep-agent/translator.ts +463 -0
  436. package/src/activities/execute-deep-agent/turn-settle.ts +35 -43
  437. package/src/activities/execute-deep-agent/turn-setup.ts +8 -8
  438. package/src/activities/execute-deep-agent/turn-stream.ts +53 -51
  439. package/src/activities/execute-deep-agent/turn.ts +3 -3
  440. package/src/activities/generate-session-subject.ts +29 -4
  441. package/src/client/__tests__/stigmer-client.test.ts +92 -0
  442. package/src/client/stigmer-client.ts +48 -14
  443. package/src/config.ts +6 -3
  444. package/src/harness/README.md +335 -0
  445. package/src/harness/__tests__/approval-decisions.test.ts +2 -2
  446. package/src/harness/__tests__/capture.test.ts +3 -3
  447. package/src/harness/__tests__/import-direction.test.ts +3 -2
  448. package/src/harness/__tests__/mount-skills.test.ts +4 -1
  449. package/src/harness/__tests__/readme-index.test.ts +339 -0
  450. package/src/harness/__tests__/run-turn.test.ts +131 -6
  451. package/src/harness/__tests__/transcript-is-engine-free.test.ts +83 -0
  452. package/src/harness/__tests__/transcript-writers.test.ts +191 -0
  453. package/src/harness/__tests__/turn-attachments-vision.test.ts +5 -2
  454. package/src/harness/__tests__/turn-context.test.ts +5 -5
  455. package/src/harness/approval-decisions.ts +1 -1
  456. package/src/harness/capabilities.ts +21 -11
  457. package/src/harness/capture.ts +4 -4
  458. package/src/harness/persist-chokepoint.ts +3 -3
  459. package/src/harness/registry.ts +2 -2
  460. package/src/harness/run-turn.ts +33 -9
  461. package/src/harness/stop-controller.ts +1 -1
  462. package/src/harness/terminal-table.ts +7 -7
  463. package/src/harness/transcript/__tests__/builder.test.ts +975 -0
  464. package/src/harness/transcript/__tests__/state.test.ts +143 -0
  465. package/src/harness/transcript/builder.ts +755 -0
  466. package/src/harness/transcript/events.ts +262 -0
  467. package/src/harness/transcript/state.ts +167 -0
  468. package/src/harness/turn-context.ts +61 -46
  469. package/src/harness/types.ts +64 -22
  470. package/src/harness/usage-accumulator.ts +2 -2
  471. package/src/harness-adapters.ts +5 -4
  472. package/src/interceptors/__tests__/run-credential-activity.test.ts +133 -0
  473. package/src/interceptors/run-credential-activity.ts +67 -0
  474. package/src/middleware/__tests__/cost-advisory.test.ts +2 -2
  475. package/src/middleware/approval-gate.ts +7 -74
  476. package/src/middleware/cost-advisory.ts +3 -3
  477. package/src/middleware/index.ts +1 -1
  478. package/src/runner-manager.ts +14 -4
  479. package/src/shared/__tests__/approval-policy.test.ts +45 -0
  480. package/src/shared/__tests__/args-preview.test.ts +40 -20
  481. package/src/shared/__tests__/attachment-naming.test.ts +1 -1
  482. package/src/shared/__tests__/attachment-resolver.test.ts +5 -5
  483. package/src/shared/__tests__/attachment-zip.test.ts +1 -1
  484. package/src/shared/__tests__/blueprint-resolver.test.ts +1 -1
  485. package/src/shared/__tests__/channel-attachment.test.ts +12 -0
  486. package/src/shared/__tests__/cost-guard.test.ts +1 -1
  487. package/src/shared/__tests__/exact-apply.test.ts +2 -1
  488. package/src/shared/__tests__/memory-attachment.test.ts +17 -0
  489. package/src/shared/__tests__/persist-decision.test.ts +19 -33
  490. package/src/shared/__tests__/prompt-sections.test.ts +1 -1
  491. package/src/shared/__tests__/run-credential.test.ts +111 -0
  492. package/src/shared/__tests__/stamp-flowed-rows.test.ts +1 -1
  493. package/src/shared/__tests__/status-offload.test.ts +1 -1
  494. package/src/shared/__tests__/streaming-scheduler.test.ts +8 -9
  495. package/src/shared/__tests__/todos.test.ts +1 -1
  496. package/src/shared/__tests__/tool-row.test.ts +1 -1
  497. package/src/shared/activity-input.ts +21 -0
  498. package/src/shared/approval-policy.ts +95 -0
  499. package/src/shared/args-preview.ts +51 -42
  500. package/src/shared/attachment-resolver.ts +4 -4
  501. package/src/shared/attachment-zip.ts +2 -2
  502. package/src/shared/channel-attachment.ts +14 -6
  503. package/src/shared/cost-guard.ts +2 -2
  504. package/src/shared/exact-apply.ts +1 -1
  505. package/src/shared/execution-context.ts +2 -2
  506. package/src/shared/extract-structured-output.ts +2 -2
  507. package/src/shared/filereview/__tests__/capture.test.ts +9 -5
  508. package/src/shared/filereview/__tests__/git-substrate.test.ts +4 -1
  509. package/src/shared/filereview/__tests__/proxy-reconcile.test.ts +3 -3
  510. package/src/shared/filereview/cas-touched.ts +2 -2
  511. package/src/shared/filereview/progress.ts +13 -0
  512. package/src/shared/heartbeat.ts +1 -1
  513. package/src/shared/llm-backend.ts +0 -4
  514. package/src/shared/memory-attachment.ts +22 -10
  515. package/src/shared/model-error.ts +1 -2
  516. package/src/shared/persist-decision.ts +19 -28
  517. package/src/shared/prompt-sections.ts +4 -4
  518. package/src/shared/run-credential-store.ts +45 -0
  519. package/src/shared/run-credential.ts +70 -0
  520. package/src/shared/skill-resolver.ts +3 -3
  521. package/src/shared/status-offload.ts +2 -2
  522. package/src/shared/streaming-scheduler.ts +8 -13
  523. package/src/shared/subagent-rows.ts +2 -2
  524. package/src/shared/synthesized-attachment.ts +38 -3
  525. package/src/shared/todos.ts +3 -3
  526. package/src/shared/tool-row.ts +38 -2
  527. package/src/shared/worker-shutdown.ts +1 -1
  528. package/src/shared/workspace/__tests__/git-source.test.ts +3 -3
  529. package/src/shared/workspace/__tests__/provisioner.test.ts +5 -5
  530. package/src/shared/workspace/__tests__/session-provision.test.ts +2 -2
  531. package/src/shared/workspace/__tests__/writeback-coordinator.integration.test.ts +8 -9
  532. package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +25 -25
  533. package/src/shared/workspace/provisioner.ts +1 -1
  534. package/src/shared/workspace/session-provision.ts +1 -1
  535. package/src/shared/workspace/sources/empty.ts +2 -2
  536. package/src/shared/workspace/sources/git.ts +3 -4
  537. package/src/shared/workspace/sources/local-path.ts +5 -6
  538. package/src/shared/workspace/stigmer-link.ts +1 -1
  539. package/src/shared/workspace/types.ts +2 -5
  540. package/src/shared/workspace/writeback-coordinator.ts +23 -12
  541. package/src/worker.ts +15 -3
  542. package/src/workflow-source.ts +15 -0
  543. package/src/workflows/__tests__/run-credential-interceptor.test.ts +178 -0
  544. package/src/workflows/execute-from-execution.ts +17 -0
  545. package/src/workflows/index.ts +5 -3
  546. package/src/workflows/interceptors/run-credential.ts +101 -0
  547. package/dist/activities/execute-cursor/delta-enricher.d.ts +0 -87
  548. package/dist/activities/execute-cursor/delta-enricher.js +0 -265
  549. package/dist/activities/execute-cursor/delta-enricher.js.map +0 -1
  550. package/dist/activities/execute-cursor/message-translator.js +0 -2040
  551. package/dist/activities/execute-cursor/message-translator.js.map +0 -1
  552. package/dist/activities/execute-cursor/todo-tracker.d.ts +0 -40
  553. package/dist/activities/execute-cursor/todo-tracker.js +0 -80
  554. package/dist/activities/execute-cursor/todo-tracker.js.map +0 -1
  555. package/dist/activities/execute-deep-agent/execution-state.d.ts +0 -54
  556. package/dist/activities/execute-deep-agent/execution-state.js +0 -68
  557. package/dist/activities/execute-deep-agent/execution-state.js.map +0 -1
  558. package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +0 -65
  559. package/dist/activities/execute-deep-agent/status-builder-shared.js +0 -90
  560. package/dist/activities/execute-deep-agent/status-builder-shared.js.map +0 -1
  561. package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +0 -113
  562. package/dist/activities/execute-deep-agent/subagent-tracker.js +0 -400
  563. package/dist/activities/execute-deep-agent/subagent-tracker.js.map +0 -1
  564. package/dist/activities/execute-deep-agent/v3-events.d.ts +0 -102
  565. package/dist/activities/execute-deep-agent/v3-events.js +0 -35
  566. package/dist/activities/execute-deep-agent/v3-events.js.map +0 -1
  567. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.d.ts +0 -15
  568. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js +0 -235
  569. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js.map +0 -1
  570. package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +0 -111
  571. package/dist/activities/execute-deep-agent/v3-status-builder.js +0 -457
  572. package/dist/activities/execute-deep-agent/v3-status-builder.js.map +0 -1
  573. package/dist/shared/execution-status-writer.d.ts +0 -31
  574. package/dist/shared/execution-status-writer.js +0 -43
  575. package/dist/shared/execution-status-writer.js.map +0 -1
  576. package/src/activities/execute-cursor/__tests__/delta-enricher.test.ts +0 -310
  577. package/src/activities/execute-cursor/__tests__/message-translator.test.ts +0 -1033
  578. package/src/activities/execute-cursor/__tests__/todo-tracker.test.ts +0 -498
  579. package/src/activities/execute-cursor/delta-enricher.ts +0 -307
  580. package/src/activities/execute-cursor/message-translator.ts +0 -2319
  581. package/src/activities/execute-cursor/todo-tracker.ts +0 -91
  582. package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +0 -148
  583. package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +0 -154
  584. package/src/activities/execute-deep-agent/__tests__/status-builder-shared.test.ts +0 -47
  585. package/src/activities/execute-deep-agent/__tests__/v3-protocol-normalizer.test.ts +0 -324
  586. package/src/activities/execute-deep-agent/execution-state.ts +0 -78
  587. package/src/activities/execute-deep-agent/status-builder-shared.ts +0 -142
  588. package/src/activities/execute-deep-agent/subagent-tracker.ts +0 -479
  589. package/src/activities/execute-deep-agent/v3-events.ts +0 -153
  590. package/src/activities/execute-deep-agent/v3-protocol-normalizer.ts +0 -264
  591. package/src/activities/execute-deep-agent/v3-status-builder.ts +0 -565
  592. package/src/shared/execution-status-writer.ts +0 -56
@@ -0,0 +1,335 @@
1
+ # harness/ — the turn runtime and the adapter contract
2
+
3
+ This folder is the turn runtime, the code that runs one agent turn for every
4
+ harness, and the contract a harness implements to run behind it
5
+ (`harness/types.ts`). A harness is one engine the runner can drive: today the
6
+ native LangGraph deep-agent and the Cursor SDK; the contract was designed
7
+ against the Claude Agent SDK and the Codex SDK as well
8
+ (`harness/capabilities.ts`). An adapter is the `HarnessAdapter` object a
9
+ harness's factory returns; a harness is that adapter plus its registry row.
10
+
11
+ This file is an index for someone adding a harness. To add one: read the modules
12
+ below in order, write the adapter files, touch the sites, prove it with the kit.
13
+ The rules this file follows are at the end.
14
+
15
+ ## One harness, six spellings
16
+
17
+ The harness identity is spelled differently in each layer, and every spelling is
18
+ pinned somewhere. Read a row across before searching for anything.
19
+
20
+ | Spelling | Native | Cursor |
21
+ | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | ---------------------------- |
22
+ | The adapter's folder | `activities/execute-deep-agent/` | `activities/execute-cursor/` |
23
+ | `HarnessName` in `harness/registry.ts` | `deep-agent` | `cursor` |
24
+ | The Temporal activity in `harness/registry.ts` | `ExecuteDeepAgent` | `ExecuteCursor` |
25
+ | The proto enum in `apis/ai/stigmer/agentic/session/v1/enum.proto` | `HARNESS_NATIVE` | `HARNESS_CURSOR` |
26
+ | The model registry's key in `backend/services/stigmer-server/src/domain/workflow/registry/data/model-registry.json` | `native` | `cursor` |
27
+ | The file-review id in `activities/execute-deep-agent/deep-agent-capabilities.ts` and `activities/execute-cursor/cursor-capabilities.ts` | `deep-agent` | `cursor` |
28
+ | The vendor SDK package in `backend/services/runner/package.json` | `deepagents` | `@cursor/sdk` |
29
+
30
+ ## Modules, in reading order
31
+
32
+ - `harness/types.ts` — the contract: `HarnessAdapter`, `TurnInput`, `TurnSink`,
33
+ `TurnOutcome`, and what was deliberately left off it.
34
+ - `harness/capabilities.ts` — the flags the runtime branches on instead of
35
+ harness names (`HarnessCapabilities`, `PausePrimitive`, `StateIdSource`), the
36
+ harness matrix the contract was designed against, and which values a real
37
+ adapter stands behind.
38
+ - `__test-utils__/harness-contract/scripted-adapter.ts` — the template: every
39
+ rule of the contract as the smallest code that obeys it, with the reason
40
+ beside it.
41
+ - `harness/registry.ts` — the wire vocabulary: `HarnessName`, the byte-pinned
42
+ `HARNESS_ACTIVITY_NAMES`, the boot order and how a boot failure is handled,
43
+ and `createHarnessActivities`.
44
+ - `harness-adapters.ts` — the one table of real rows (`HARNESS_ADAPTERS`), and
45
+ why its static graph must stay SDK-free.
46
+ - `harness/transcript/events.ts` — `TranscriptEvent`, the canonical event a
47
+ translator emits.
48
+ - `harness/transcript/builder.ts` — `TranscriptBuilder`, the one builder every
49
+ harness folds its events through.
50
+ - `harness/capture.ts` — the file-review capture. The runtime owns all of it; an
51
+ adapter supplies one fact, which CAS-owned paths its engine touched.
52
+ - `harness/turn-context.ts` — the resolution phases that build the `TurnInput`
53
+ (`resolveTurnContext`), and what is deliberately left to the adapter.
54
+ - `harness/run-turn.ts` — the activity body (`runTurnActivity`) and
55
+ `settleWith`, the one place a turn's terminal status is written.
56
+
57
+ ## Adapter files
58
+
59
+ What the contract requires:
60
+
61
+ - `activities/<harness>/adapter.ts` — a factory returning a `HarnessAdapter`.
62
+ `activities/execute-deep-agent/adapter.ts` (`createDeepAgentAdapter`) is the
63
+ smaller real shape, with no per-session state;
64
+ `activities/execute-cursor/adapter.ts` (`createCursorAdapter`) is the one with
65
+ session state.
66
+ - `activities/<harness>/<harness>-capabilities.ts` — the flags, declared once,
67
+ each with its reason:
68
+ `activities/execute-deep-agent/deep-agent-capabilities.ts`
69
+ (`DEEP_AGENT_CAPABILITIES`),
70
+ `activities/execute-cursor/cursor-capabilities.ts` (`CURSOR_CAPABILITIES`).
71
+ - `activities/<harness>/translator.ts` — the engine's events rendered as
72
+ `TranscriptEvent`s into `TranscriptBuilder` (`harness/transcript/events.ts` is
73
+ the union): `activities/execute-deep-agent/translator.ts`,
74
+ `activities/execute-cursor/translator.ts`.
75
+
76
+ Everything else in an adapter's folder is the engine's business and is not a
77
+ template: 17 of the native adapter's 20 modules and 32 of the Cursor adapter's
78
+ 35, at the commit the footprint below measures. That business is:
79
+
80
+ - how the engine is created or resumed,
81
+ - how the prompt is placed,
82
+ - how MCP servers are bound,
83
+ - how the engine is made to stop before a gated side effect.
84
+
85
+ What every adapter's test side carries:
86
+
87
+ - `activities/<harness>/__test-utils__/contract-subject.ts` — the harness as a
88
+ `HarnessContractSubject`: the real adapter, with the kit's scenario vocabulary
89
+ translated onto the harness's own SDK double.
90
+ `activities/execute-deep-agent/__test-utils__/contract-subject.ts` is the
91
+ smaller example;
92
+ `activities/execute-cursor/__test-utils__/contract-subject.ts` the first.
93
+ - `activities/<harness>/__tests__/hermetic/harness-contract.test.ts` — both
94
+ halves of the kit against the real adapter, with what the subject cannot
95
+ produce declared SKIPPED:
96
+ `activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts`,
97
+ `activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts`. Their
98
+ goldens: `activities/execute-deep-agent/__tests__/hermetic/goldens/`,
99
+ `activities/execute-cursor/__tests__/hermetic/goldens/`.
100
+ - `activities/<harness>/__tests__/adapter-is-temporal-free.test.ts` — the fence
101
+ that keeps `@temporalio/*` out of the adapter:
102
+ `activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts`,
103
+ `activities/execute-cursor/__tests__/adapter-is-temporal-free.test.ts`.
104
+ - `activities/<harness>/__tests__/adapter-graph-is-sdk-free.test.ts` — the fence
105
+ that walks the adapter module's static graph and refuses a vendor SDK on it. A
106
+ new harness adds it.
107
+ `activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts` is
108
+ the shape; the Cursor adapter predates it, and
109
+ `__tests__/harness-boot-order.test.ts` proves its graph in a fresh process.
110
+
111
+ ## Sites a new harness touches
112
+
113
+ Measured at commit f25d15131 (2026-09-16). Every list in this section is dated
114
+ by that line.
115
+
116
+ ### In the runner
117
+
118
+ Read off the registry, its tests and the package, not off the probes below. The
119
+ composition roots, `runner.ts` and `runner-manager.ts`, read `HARNESS_ADAPTERS`
120
+ and nothing per harness; there is nothing to touch there.
121
+
122
+ - `harness-adapters.ts` — one row in `HARNESS_ADAPTERS`, in boot order.
123
+ - `harness/registry.ts` — one member of `HarnessName` and one entry in
124
+ `HARNESS_ACTIVITY_NAMES`, byte-identical to the server's pin.
125
+ - `harness/capabilities.ts` — the harness matrix in the header gains a column.
126
+ - `config.ts` — the harness's own settings, if it has any (`cursorApiKey`,
127
+ `checkpointerType` are the two adapters' today).
128
+ - `activities/call-agent.ts` — `resolveHarness`, the wire string to the proto
129
+ enum for the workflow task.
130
+ - `workflow-engine/loader.ts` — the YAML shorthand map from harness word to enum
131
+ name.
132
+ - `shared/filereview/events.ts` — a comment stating the closed set of
133
+ file-review ids.
134
+ - `__tests__/harness-boot-order.test.ts` — the header states the row count; its
135
+ child process, `__test-utils__/harness-boot-order-child.ts`, boots
136
+ `HARNESS_ADAPTERS` itself, so a new row runs with no code change.
137
+ - `backend/services/runner/package.json` — the vendor SDK dependency.
138
+ - `backend/services/runner/scripts/bundle-slim.mjs` — `RUNTIME_EXTERNALS`, the
139
+ SDKs the slim bundle leaves external because they ship native helpers.
140
+ - `backend/services/runner/README.md` — the environment-variable table names
141
+ each harness's settings.
142
+ - `backend/services/runner/Dockerfile.sandbox` — a comment listing the
143
+ activities the image serves.
144
+
145
+ ### Outside the runner: the method
146
+
147
+ The identity has six spellings (the table above); the folder is not searched
148
+ for, and each of the five probes below finds one of the others. Run all five
149
+ from the repository root and read every hit; the lists below came from doing
150
+ exactly that.
151
+
152
+ ```bash
153
+ # The same exclusions for every probe. __test-utils__/ stays in: the kit and the hermetic drivers enumerate harnesses.
154
+ X=(-g '!node_modules' -g '!**/gen/**' -g '!*_pb.*' -g '!*.pb.go' -g '!apis/stubs/**' -g '!tools/codegen/output/**'
155
+ -g '!**/dist/**' -g '!**/dist-slim/**' -g '!**/__tests__/**' -g '!*.test.*' -g '!**/goldens/**' -g '!*lock*')
156
+ rg -l "${X[@]}" 'HARNESS_NATIVE|HARNESS_CURSOR|Harness\.(NATIVE|CURSOR)|\bHarnessOption\b' # the proto enum
157
+ rg -l "${X[@]}" 'ExecuteDeepAgent|ExecuteCursor|HARNESS_ACTIVITY_NAMES' # the activity name
158
+ rg -l "${X[@]}" '\bHarnessName\b|["'"'"']deep-agent["'"'"']|["'"'"']cursor["'"'"']' # the registry name and file-review id
159
+ rg -l "${X[@]}" '"harness"\s*:\s*"(native|cursor)"' # the model registry's key
160
+ rg -l "${X[@]}" '@cursor/sdk|\bdeepagents\b' # the vendor SDK package
161
+ ```
162
+
163
+ Every hit falls into one of three classes:
164
+
165
+ - **Enumerates** — a switch, a record keyed by harness, a label table, a
166
+ byte-pinned name, a per-harness data row, or a comment that states the closed
167
+ set. A new harness must touch it.
168
+ - **Passes through** — reads, forwards or types by the value, or a fixture that
169
+ carries it. Nothing to touch.
170
+ - **Generated** — rebuilt from the proto or the registry by `make codegen`.
171
+ Never edited by hand.
172
+
173
+ ### Outside the runner: sites that enumerate
174
+
175
+ | File | What enumerates the harness set |
176
+ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
177
+ | `apis/ai/stigmer/agentic/session/v1/enum.proto` | The `Harness` enum itself; the root. Then `make codegen`. |
178
+ | `apis/ai/stigmer/agentic/session/v1/spec.proto` | The `harness` field's comment lists each harness and its activity. |
179
+ | `apis/ai/stigmer/agentic/workflow/v1/tasks/agent_call.proto` | The `harness` field's comment lists each harness. |
180
+ | `apis/ai/stigmer/iam/identityaccount/v1/spec.proto` | `default_harness` names the allowed lowercase strings in its validation rule. |
181
+ | `apis/ai/stigmer/agentic/agentexecution/v1/filereview.proto` | `harness_id` comments state the closed set of file-review ids. |
182
+ | `apis/ai/stigmer/billing/v1/io.proto`, `apis/ai/stigmer/billing/v1/policy.proto` | Harness string fields whose comments state the set. |
183
+ | `backend/services/stigmer-server/src/temporal/agentexecution/names.ts` | `EXECUTE_CURSOR_ACTIVITY_NAME`, `EXECUTE_DEEP_AGENT_ACTIVITY_NAME`: the server side of the runner's byte-pinned names. |
184
+ | `backend/services/stigmer-server/src/temporal/agentexecution/workflows/invoke-agent-execution.ts` | The activity proxy typed per name, and a branch on the enum: `executeCursorFlow` for a harness whose engine mints the state id (the server reads it back), the deep-agent flow for one whose id the server mints first (`EnsureThread`). The largest site; a new harness needs an arm here, its own flow or one of these two. |
185
+ | `backend/services/stigmer-server/src/domain/workflow/converter/task-converters.ts` | A `switch` over `Harness` to the YAML shorthand. |
186
+ | `backend/services/stigmer-server/src/domain/workflow/converter/unmarshal.ts` | `normalizeEnumShorthands`: the YAML word to the enum name. |
187
+ | `backend/services/stigmer-server/src/domain/workflow/registry/pin-validation.ts` | `HARNESS_NAME_CURSOR` and a Cursor-only pin rule. |
188
+ | `backend/services/stigmer-server/src/domain/workflow/registry/data/model-registry.json` | Per-harness model rows; a harness with its own catalog adds rows. |
189
+ | `backend/services/stigmer-server/src/temporal/schedule/model-pinning.ts` | A Cursor-only pinning rule. |
190
+ | `backend/services/stigmer-server/scripts/capture-replay-histories.ts` | A map keyed by activity name, one stub per activity (a maintainer script). |
191
+ | `client-apps/cli/src/commands/agent-exec-flags.ts` | The `--harness` flag's help text lists the values. |
192
+ | `client-apps/cli/src/resources/run/create.ts` | The flag string to the enum. |
193
+ | `client-apps/cli/src/resources/run/prepare.ts` | `HarnessFlag` and its checks. |
194
+ | `client-apps/cli/src/resources/run/header.ts` | The run header's harness label. |
195
+ | `client-apps/cli/src/resources/task-configs.ts` | The YAML shorthand map. |
196
+ | `apis/ai/stigmer/agentic/agentexecution/v1/enum.proto` | A comment on tool-name casing per harness. |
197
+ | `backend/README.md` | Lists the harnesses and the SDK behind each. |
198
+ | `client-apps/desktop/scripts/stage-runner-slim.sh`, `client-apps/desktop/scripts/macos-codesign-tree.sh` | Stage and sign the vendor SDKs' native helpers for the desktop app; a harness whose SDK ships one touches both. |
199
+ | `sdk/react/src/models/harness.ts` | The SDK hub: `HarnessOption`, `HARNESS_META`, `HARNESS_LABELS`, `HARNESS_OPTIONS`, `DEFAULT_HARNESS`, `toProtoHarness`, `fromProtoHarness`. `HarnessOption` carries four values beyond the proto's two; `toProtoHarness` maps them to `NATIVE` through its `default` arm. |
200
+ | `sdk/react/src/models/HarnessSelector.tsx` | `OPTIONS`, the two selectable values. |
201
+ | `sdk/react/src/models/ModelSelector.tsx` | A Cursor-only thinking rule, and the filter that hides the extra options by name. |
202
+ | `sdk/react/src/identity-account/AccountPreferencesPanel.tsx` | One `HarnessOptionRow` per harness, placed by hand. |
203
+ | `sdk/react/src/identity-account/useAccountExecutionDefaults.ts` | Validates the preference against the two names. |
204
+ | `sdk/react/src/workflow/inspector/forms/AgentCallForm.tsx` | Two radio buttons, placed by hand. |
205
+ | `sdk/react/src/pricing-governance/BaselineEditor.tsx` | A select with one option per harness. |
206
+ | `site/src/components/pages/pricing/ModelPricingTable.tsx` | Harness to display label. |
207
+ | `site/src/data/harness-cost-comparison.json` | Per-harness cost rows. |
208
+ | `docs/concepts/harnesses.mdx`, `docs/concepts/sessions.mdx`, `docs/guides/runners/cursor-harness.mdx`, `docs/guides/workflows/task-types/agent-call.mdx`, `docs/vocabulary.md` | Hand-authored pages that name the harness set; each has an entry in `docs/_inventory/classification.yaml` to keep current. |
209
+
210
+ The cloud composition that serves api.stigmer.ai has sites of the same three
211
+ classes (billing gates, pricing arms, the channel broker's harness switch, its
212
+ own model registry). A harness that must run there is a change on that side too.
213
+
214
+ ### Outside the runner: sites that pass the value through
215
+
216
+ Nothing to touch. Listed so a probe's hit here is a stop, not a lead.
217
+
218
+ - `apis/`: `apis/ai/stigmer/agentic/workflow/v1/tasks/meta/agent_call.yaml` (an
219
+ example value); `apis/ai/stigmer/agentic/agentexecution/v1/io.proto`,
220
+ `apis/ai/stigmer/agentic/agentexecution/v1/usage.proto`,
221
+ `apis/ai/stigmer/billing/v1/model_pricing_baseline.proto`,
222
+ `apis/ai/stigmer/billing/v1/pricing_override.proto` (free-form provider or
223
+ harness strings with examples); the fixtures under
224
+ `apis/testdata/hitl/file-review/`.
225
+ - The server: `backend/services/stigmer-server/src/domain/session/steps.ts` (the
226
+ immutability check; no per-harness arm);
227
+ `backend/services/stigmer-server/src/temporal/agentexecution/dispatch.ts`,
228
+ `backend/services/stigmer-server/src/temporal/agentexecution/activities.ts`,
229
+ `backend/services/stigmer-server/src/temporal/agentexecution/worker.ts`,
230
+ `backend/services/stigmer-server/src/temporal/agentexecution/workflow-input.ts`
231
+ (read the session's harness or name the activities in prose).
232
+ - The React SDK: `sdk/react/src/models/registry.ts`,
233
+ `sdk/react/src/models/useModelRegistry.ts`,
234
+ `sdk/react/src/models/service-tier.ts`; everything under
235
+ `sdk/react/src/channel/`, `sdk/react/src/composer/`,
236
+ `sdk/react/src/execution/`, `sdk/react/src/schedule/`,
237
+ `sdk/react/src/session/` (typed by the option or defaulting to one value).
238
+ - Fixtures and clients: `test/e2e/helpers/approval.ts`,
239
+ `test/extension-consumer/src/fake-extension.ts`, `test/fixtures/tool-view/`,
240
+ `site/src/components/docs/demos/shared/StigmerPreviewProvider.tsx`,
241
+ `sdk/java/src/main/java/ai/stigmer/sdk/BillingClient.java` (a hand-written
242
+ client's field comment).
243
+ - Inside the runner: comments across `shared/` and the composition roots that
244
+ name both activities or the native engine's tool names as examples;
245
+ `__test-utils__/hermetic-activity.ts` and
246
+ `__test-utils__/model-registry-fixture.ts`; the kit's
247
+ `__test-utils__/harness-contract/runtime-contract.ts` and
248
+ `__test-utils__/harness-contract/types.ts`, typed by `HarnessName` and
249
+ selecting by it.
250
+
251
+ ### Generated
252
+
253
+ `make codegen` rebuilds these from the proto and the registry; do not edit them:
254
+ `apis/stubs/`, `sdk/go/proto/`, `tools/codegen/output/`,
255
+ `tools/codegen/schemas/`,
256
+ `backend/services/stigmer-server/src/domain/workflow/registry/data/task-kind-registry.json`,
257
+ `docs/sdk/resources/`, `docs/sdk/react/`, `docs/cli/commands/`.
258
+
259
+ ### Verifying
260
+
261
+ `make codegen` after the proto edit. `npm test` in `backend/services/runner/`
262
+ runs the kit, every fence, the boot-order test and this file's own test.
263
+
264
+ ## The contract kit
265
+
266
+ - `__test-utils__/harness-contract/contract.ts` — the adapter-side half:
267
+ `describeHarnessContract`, the invariants every adapter owes the runtime, and
268
+ what the kit cannot measure.
269
+ - `__test-utils__/harness-contract/runtime-contract.ts` — the runtime-side half:
270
+ `describeHarnessRuntimeContract`, what the runtime owes every harness, proven
271
+ through the real activity.
272
+ - `__test-utils__/harness-contract/types.ts` — `HarnessContractSubject`, the one
273
+ interface a real adapter implements to join the kit, and the scenario
274
+ vocabulary (`ScenarioStep`).
275
+ - `__test-utils__/hermetic-activity.ts` — `runActivityHermetically`: a real
276
+ activity with no network, and the rule for a golden that will not hold still.
277
+ The vendor SDK double is the adapter's own.
278
+ - `__tests__/harness-contract.test.ts` — the template under both pause
279
+ primitives and both state-id sources; a real adapter registers both halves in
280
+ its own hermetic file instead.
281
+ - `__test-utils__/__tests__/harness-contract-self-check.test.ts` — every
282
+ invariant run against an adapter broken in exactly the way it exists to catch.
283
+ - `harness/__tests__/run-turn.test.ts` — the runtime-side half against the
284
+ template, one arm per row of the terminal table, and the template's own
285
+ timing, not any engine's.
286
+
287
+ The hermetic goldens in each adapter's goldens folder (named above) are the
288
+ second net: they pin a turn's persisted status byte for byte.
289
+
290
+ ## Footprint
291
+
292
+ Measured at commit f25d15131 (2026-09-16), production TypeScript only,
293
+ `__tests__/` and `__test-utils__/` excluded. Run from `backend/services/runner/`
294
+ to re-measure:
295
+
296
+ ```bash
297
+ wc -l src/__test-utils__/harness-contract/scripted-adapter.ts
298
+ for d in src/activities/execute-deep-agent src/activities/execute-cursor src/harness; do
299
+ printf '%s: ' "$d"
300
+ find "$d" -name '*.ts' -not -path '*/__tests__/*' -not -path '*/__test-utils__/*' | xargs cat | wc -l
301
+ done
302
+ ```
303
+
304
+ | What | Lines | Files |
305
+ | -------------------------------------------------------------------------------------------------------- | ------ | ----- |
306
+ | The template, `__test-utils__/harness-contract/scripted-adapter.ts`: the floor, no engine, no translator | 385 | 1 |
307
+ | The native adapter, `activities/execute-deep-agent/` | 4,308 | 20 |
308
+ | The Cursor adapter, `activities/execute-cursor/`: the ceiling, with its deny-and-retry hook and ledger | 11,554 | 35 |
309
+ | The runtime, `harness/`, for scale: written once | 4,985 | 14 |
310
+ | The test side the native adapter adds: its subject, its hermetic kit file, its two fences | 658 | 4 |
311
+
312
+ ## Design history
313
+
314
+ The pull requests carry the measured acceptance of each step; the module headers
315
+ carry the reasoning.
316
+
317
+ - #1048 — the hermetic regression net: a real activity, no network, goldens byte
318
+ for byte.
319
+ - #1064 — the adapter contract, the scripted template, the contract kit and the
320
+ registry.
321
+ - #1070 — the turn runtime extracted; the Cursor activity became an adapter.
322
+ - #1096 — the native deep-agent harness as an adapter over the same runtime.
323
+ - #1097 — one transcript builder over one canonical event for every harness.
324
+ - #1136 — the headers made readable to a stranger; every citation public.
325
+
326
+ ## About this file
327
+
328
+ Every fact about the design has one home, the header of the module that owns it.
329
+ This file points at that home in one sentence and restates nothing; if this file
330
+ and a header disagree, the header is right and this file is corrected. It adds
331
+ two things no header can carry: the sites outside the runner, derived by the
332
+ method above, and the footprint. Paths inside the runner's `src` directory are
333
+ spelled from `src`; every other path is spelled from the repository root.
334
+ `harness/__tests__/readme-index.test.ts` fails when a path or a symbol named
335
+ here stops resolving.
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * `harness/approval-decisions.ts` — the runtime's one settler of a decision
3
3
  * that never runs the tool. These arms came with the function from the
4
- * native harness's `hitl.ts` (`reconcileNonExecutingDecisions`, S3 M1 /
5
- * M2a): SKIP and REJECT settle to SKIPPED (REJECT with the pinned reason),
4
+ * native harness's `hitl.ts` (`reconcileNonExecutingDecisions`, in #1096):
5
+ * SKIP and REJECT settle to SKIPPED (REJECT with the pinned reason),
6
6
  * APPROVE and APPROVE_ALL are left to the engine's own events, sub-agent
7
7
  * transcripts are settled alike, and an undecided row is untouched. The
8
8
  * reader half (`approvalDecisionsOf`) is pinned against the Cursor adapter's
@@ -5,14 +5,14 @@
5
5
  * resolution phases and the outcome table.
6
6
  *
7
7
  * What is asserted here and nowhere else are the two rules the lift made
8
- * one for every harness (S3 M4, Q-M4-5, Q-M4-6):
8
+ * one for every harness (#1096):
9
9
  *
10
10
  * - the stamp reads the ROW's status: a COMPLETED write row created this
11
11
  * turn is badged, a FAILED or WAITING one is not, a seeded prior-turn row
12
12
  * keeps its own change set;
13
13
  * - the provenance scopes by id-novelty and consents by the row's own
14
14
  * approval: the approved command that executed ON ITS SEEDED ROW (message
15
- * 0, the shape both engines produce — F-M4-P3) qualifies the turn, where
15
+ * 0, the shape both engines produce) qualifies the turn, where
16
16
  * a positional scope missed it.
17
17
  *
18
18
  * The ledger shape itself is `shared/filereview/capture.ts`'s and is pinned
@@ -210,7 +210,7 @@ describe("harness/capture over a git work tree", () => {
210
210
  });
211
211
  });
212
212
 
213
- describe("deriveCommandProvenance — one rule for both engines (F-M4-P3)", () => {
213
+ describe("deriveCommandProvenance — one rule for both engines", () => {
214
214
  const seededShell = (status: ToolCallStatus, approvalAction: ApprovalAction) =>
215
215
  row("tc-shell", "shell", status, { approvalAction, args: { command: "make generate" } });
216
216
 
@@ -17,8 +17,8 @@
17
17
  * Temporal-free fence), so a path quoted in a header comment (several
18
18
  * `shared/` modules cite `activities/...` in prose) cannot trip it, and no
19
19
  * import form can slip past it: static, type-only, side-effect, re-export
20
- * and dynamic `import()` are all module specifiers to the parser. Ruled at
21
- * the S2 gate (Q-S2-9); the `shared/` half ruled at the M1 gate (Q-M1-5).
20
+ * and dynamic `import()` are all module specifiers to the parser. The
21
+ * `harness/` fence landed in #1070; the `shared/` half in #1097.
22
22
  */
23
23
 
24
24
  import { describe, it, expect } from "vitest";
@@ -128,6 +128,7 @@ describe("src/harness never imports src/activities", () => {
128
128
  join("harness", "registry.ts"),
129
129
  join("harness", "types.ts"),
130
130
  join("harness", "capabilities.ts"),
131
+ join("harness", "transcript", "builder.ts"),
131
132
  ]),
132
133
  );
133
134
  });
@@ -31,6 +31,7 @@ import { mockStigmerClient } from "../../__test-utils__/mock-client.js";
31
31
  import { testConfig } from "../../__test-utils__/config-fixture.js";
32
32
  import { turnInputFixture } from "../../__test-utils__/turn-input-fixture.js";
33
33
  import { TimingRecorder } from "../../shared/cold-start-timing.js";
34
+ import { TranscriptBuilder } from "../transcript/builder.js";
34
35
  import { mountSkills, type ResolutionDeps } from "../turn-context.js";
35
36
 
36
37
  const env = createHermeticEnvironment();
@@ -62,13 +63,15 @@ function skillClient(available: readonly string[]) {
62
63
 
63
64
  function depsWith(client: ResolutionDeps["client"], sessionId: string): { deps: ResolutionDeps; labels: string[] } {
64
65
  const labels: string[] = [];
66
+ const status = create(AgentExecutionStatusSchema, {});
65
67
  return {
66
68
  labels,
67
69
  deps: {
68
70
  input: { executionId: `aex-${sessionId}`, threadId: "", turnSeq: 0 },
69
71
  client,
70
72
  config: testConfig({ workspaceRootDir: env.workspaceRootDir }),
71
- status: create(AgentExecutionStatusSchema, {}),
73
+ status,
74
+ transcript: new TranscriptBuilder(`aex-${sessionId}`, status),
72
75
  artifactStorage: undefined,
73
76
  timing: new TimingRecorder(),
74
77
  signal: new AbortController().signal,