@stigmer/runner 3.15.3-dev.20260914121148 → 3.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) hide show
  1. package/README.md +2 -1
  2. package/dist/.build-fingerprint +1 -1
  3. package/dist/__test-utils__/approval-contract/types.d.ts +1 -1
  4. package/dist/__test-utils__/hermetic-activity.d.ts +61 -7
  5. package/dist/__test-utils__/hermetic-activity.js +100 -9
  6. package/dist/__test-utils__/hermetic-activity.js.map +1 -1
  7. package/dist/__test-utils__/model-registry-fixture.d.ts +22 -3
  8. package/dist/__test-utils__/model-registry-fixture.js +22 -7
  9. package/dist/__test-utils__/model-registry-fixture.js.map +1 -1
  10. package/dist/activities/execute-cursor/__test-utils__/contract-subject.d.ts +2 -2
  11. package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +2 -2
  12. package/dist/activities/execute-cursor/__test-utils__/fold.d.ts +61 -0
  13. package/dist/activities/execute-cursor/__test-utils__/fold.js +94 -0
  14. package/dist/activities/execute-cursor/__test-utils__/fold.js.map +1 -0
  15. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +1 -1
  16. package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -1
  17. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +47 -12
  18. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +41 -10
  19. package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
  20. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +15 -6
  21. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +17 -4
  22. package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -1
  23. package/dist/activities/execute-cursor/adapter.d.ts +4 -4
  24. package/dist/activities/execute-cursor/adapter.js +4 -4
  25. package/dist/activities/execute-cursor/approval-policy.d.ts +10 -10
  26. package/dist/activities/execute-cursor/approval-policy.js +12 -23
  27. package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
  28. package/dist/activities/execute-cursor/approval-state.d.ts +35 -1
  29. package/dist/activities/execute-cursor/approval-state.js +65 -0
  30. package/dist/activities/execute-cursor/approval-state.js.map +1 -1
  31. package/dist/activities/execute-cursor/{message-translator.d.ts → boundary-rows.d.ts} +45 -341
  32. package/dist/activities/execute-cursor/boundary-rows.js +1018 -0
  33. package/dist/activities/execute-cursor/boundary-rows.js.map +1 -0
  34. package/dist/activities/execute-cursor/cursor-capabilities.d.ts +1 -1
  35. package/dist/activities/execute-cursor/cursor-capabilities.js +1 -1
  36. package/dist/activities/execute-cursor/cursor-event-recorder.d.ts +33 -14
  37. package/dist/activities/execute-cursor/cursor-event-recorder.js +43 -21
  38. package/dist/activities/execute-cursor/cursor-event-recorder.js.map +1 -1
  39. package/dist/activities/execute-cursor/prompt-builder.d.ts +3 -3
  40. package/dist/activities/execute-cursor/prompt-builder.js +4 -4
  41. package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
  42. package/dist/activities/execute-cursor/service-tier.js +1 -2
  43. package/dist/activities/execute-cursor/service-tier.js.map +1 -1
  44. package/dist/activities/execute-cursor/sub-agent-steps.d.ts +79 -0
  45. package/dist/activities/execute-cursor/sub-agent-steps.js +180 -0
  46. package/dist/activities/execute-cursor/sub-agent-steps.js.map +1 -0
  47. package/dist/activities/execute-cursor/tool-result.d.ts +49 -0
  48. package/dist/activities/execute-cursor/tool-result.js +130 -0
  49. package/dist/activities/execute-cursor/tool-result.js.map +1 -0
  50. package/dist/activities/execute-cursor/translator.d.ts +178 -0
  51. package/dist/activities/execute-cursor/translator.js +485 -0
  52. package/dist/activities/execute-cursor/translator.js.map +1 -0
  53. package/dist/activities/execute-cursor/turn-boundary.d.ts +15 -5
  54. package/dist/activities/execute-cursor/turn-boundary.js +10 -14
  55. package/dist/activities/execute-cursor/turn-boundary.js.map +1 -1
  56. package/dist/activities/execute-cursor/turn-settle.d.ts +11 -7
  57. package/dist/activities/execute-cursor/turn-settle.js +47 -34
  58. package/dist/activities/execute-cursor/turn-settle.js.map +1 -1
  59. package/dist/activities/execute-cursor/turn-setup.d.ts +2 -2
  60. package/dist/activities/execute-cursor/turn-setup.js +5 -5
  61. package/dist/activities/execute-cursor/turn-setup.js.map +1 -1
  62. package/dist/activities/execute-cursor/turn-stream.d.ts +23 -14
  63. package/dist/activities/execute-cursor/turn-stream.js +41 -28
  64. package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
  65. package/dist/activities/execute-cursor/turn.d.ts +4 -4
  66. package/dist/activities/execute-cursor/turn.js +5 -5
  67. package/dist/activities/execute-cursor/usage-pricing.d.ts +2 -2
  68. package/dist/activities/execute-cursor/usage-pricing.js +2 -2
  69. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +2 -2
  70. package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +2 -2
  71. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +16 -11
  72. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +22 -10
  73. package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js.map +1 -1
  74. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js +1 -1
  75. package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js.map +1 -1
  76. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +2 -3
  77. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +2 -3
  78. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js.map +1 -1
  79. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +12 -3
  80. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +18 -4
  81. package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -1
  82. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.d.ts +10 -1
  83. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js +24 -11
  84. package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js.map +1 -1
  85. package/dist/activities/execute-deep-agent/adapter.d.ts +1 -1
  86. package/dist/activities/execute-deep-agent/adapter.js +1 -1
  87. package/dist/activities/execute-deep-agent/approval-file-change.d.ts +19 -19
  88. package/dist/activities/execute-deep-agent/approval-file-change.js +16 -15
  89. package/dist/activities/execute-deep-agent/approval-file-change.js.map +1 -1
  90. package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +2 -2
  91. package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +2 -2
  92. package/dist/activities/execute-deep-agent/hitl.d.ts +2 -2
  93. package/dist/activities/execute-deep-agent/hitl.js +2 -2
  94. package/dist/activities/execute-deep-agent/inline-publisher.d.ts +13 -3
  95. package/dist/activities/execute-deep-agent/inline-publisher.js +3 -3
  96. package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -1
  97. package/dist/activities/execute-deep-agent/prompt-builder.d.ts +3 -3
  98. package/dist/activities/execute-deep-agent/prompt-builder.js +6 -7
  99. package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
  100. package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +16 -8
  101. package/dist/activities/execute-deep-agent/streaming-side-effects.js +20 -33
  102. package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
  103. package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +3 -3
  104. package/dist/activities/execute-deep-agent/subagent-transformer.js +1 -1
  105. package/dist/activities/execute-deep-agent/translator.d.ts +134 -0
  106. package/dist/activities/execute-deep-agent/translator.js +418 -0
  107. package/dist/activities/execute-deep-agent/translator.js.map +1 -0
  108. package/dist/activities/execute-deep-agent/turn-settle.d.ts +13 -7
  109. package/dist/activities/execute-deep-agent/turn-settle.js +34 -45
  110. package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -1
  111. package/dist/activities/execute-deep-agent/turn-setup.d.ts +8 -8
  112. package/dist/activities/execute-deep-agent/turn-setup.js +7 -7
  113. package/dist/activities/execute-deep-agent/turn-stream.d.ts +13 -10
  114. package/dist/activities/execute-deep-agent/turn-stream.js +44 -41
  115. package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -1
  116. package/dist/activities/execute-deep-agent/turn.d.ts +3 -3
  117. package/dist/activities/execute-deep-agent/turn.js +3 -3
  118. package/dist/activities/generate-session-subject.d.ts +25 -4
  119. package/dist/activities/generate-session-subject.js +17 -7
  120. package/dist/activities/generate-session-subject.js.map +1 -1
  121. package/dist/client/stigmer-client.d.ts +17 -6
  122. package/dist/client/stigmer-client.js +47 -14
  123. package/dist/client/stigmer-client.js.map +1 -1
  124. package/dist/config.d.ts +6 -3
  125. package/dist/config.js +4 -1
  126. package/dist/config.js.map +1 -1
  127. package/dist/harness/approval-decisions.d.ts +1 -1
  128. package/dist/harness/approval-decisions.js +1 -1
  129. package/dist/harness/capabilities.d.ts +21 -11
  130. package/dist/harness/capabilities.js +2 -2
  131. package/dist/harness/capture.d.ts +4 -4
  132. package/dist/harness/capture.js +4 -4
  133. package/dist/harness/persist-chokepoint.d.ts +3 -3
  134. package/dist/harness/persist-chokepoint.js +3 -3
  135. package/dist/harness/registry.d.ts +2 -2
  136. package/dist/harness/registry.js +2 -2
  137. package/dist/harness/run-turn.d.ts +6 -4
  138. package/dist/harness/run-turn.js +31 -9
  139. package/dist/harness/run-turn.js.map +1 -1
  140. package/dist/harness/stop-controller.d.ts +1 -1
  141. package/dist/harness/stop-controller.js +1 -1
  142. package/dist/harness/terminal-table.d.ts +7 -7
  143. package/dist/harness/terminal-table.js +7 -7
  144. package/dist/harness/transcript/builder.d.ts +182 -0
  145. package/dist/harness/transcript/builder.js +693 -0
  146. package/dist/harness/transcript/builder.js.map +1 -0
  147. package/dist/harness/transcript/events.d.ts +218 -0
  148. package/dist/harness/transcript/events.js +50 -0
  149. package/dist/harness/transcript/events.js.map +1 -0
  150. package/dist/harness/transcript/state.d.ts +110 -0
  151. package/dist/harness/transcript/state.js +148 -0
  152. package/dist/harness/transcript/state.js.map +1 -0
  153. package/dist/harness/turn-context.d.ts +54 -38
  154. package/dist/harness/turn-context.js +42 -43
  155. package/dist/harness/turn-context.js.map +1 -1
  156. package/dist/harness/types.d.ts +63 -22
  157. package/dist/harness/types.js +12 -11
  158. package/dist/harness/types.js.map +1 -1
  159. package/dist/harness/usage-accumulator.d.ts +2 -2
  160. package/dist/harness/usage-accumulator.js +2 -2
  161. package/dist/harness-adapters.d.ts +5 -4
  162. package/dist/harness-adapters.js +5 -4
  163. package/dist/harness-adapters.js.map +1 -1
  164. package/dist/interceptors/run-credential-activity.d.ts +28 -0
  165. package/dist/interceptors/run-credential-activity.js +56 -0
  166. package/dist/interceptors/run-credential-activity.js.map +1 -0
  167. package/dist/middleware/approval-gate.d.ts +6 -0
  168. package/dist/middleware/approval-gate.js +7 -57
  169. package/dist/middleware/approval-gate.js.map +1 -1
  170. package/dist/middleware/cost-advisory.d.ts +3 -3
  171. package/dist/middleware/cost-advisory.js +3 -3
  172. package/dist/middleware/index.d.ts +1 -1
  173. package/dist/middleware/index.js +1 -1
  174. package/dist/runner-manager.js +10 -4
  175. package/dist/runner-manager.js.map +1 -1
  176. package/dist/shared/activity-input.d.ts +9 -0
  177. package/dist/shared/activity-input.js +17 -0
  178. package/dist/shared/activity-input.js.map +1 -1
  179. package/dist/shared/approval-policy.d.ts +53 -0
  180. package/dist/shared/approval-policy.js +76 -0
  181. package/dist/shared/approval-policy.js.map +1 -1
  182. package/dist/shared/args-preview.d.ts +45 -22
  183. package/dist/shared/args-preview.js +51 -41
  184. package/dist/shared/args-preview.js.map +1 -1
  185. package/dist/shared/attachment-resolver.d.ts +4 -4
  186. package/dist/shared/attachment-resolver.js +4 -4
  187. package/dist/shared/attachment-zip.d.ts +2 -2
  188. package/dist/shared/attachment-zip.js +2 -2
  189. package/dist/shared/channel-attachment.d.ts +8 -5
  190. package/dist/shared/channel-attachment.js +10 -6
  191. package/dist/shared/channel-attachment.js.map +1 -1
  192. package/dist/shared/cost-guard.d.ts +2 -2
  193. package/dist/shared/cost-guard.js +2 -2
  194. package/dist/shared/exact-apply.d.ts +1 -1
  195. package/dist/shared/exact-apply.js +1 -1
  196. package/dist/shared/execution-context.d.ts +2 -2
  197. package/dist/shared/execution-context.js +2 -2
  198. package/dist/shared/extract-structured-output.d.ts +2 -2
  199. package/dist/shared/extract-structured-output.js +2 -2
  200. package/dist/shared/filereview/cas-touched.d.ts +2 -2
  201. package/dist/shared/filereview/cas-touched.js +2 -2
  202. package/dist/shared/filereview/progress.d.ts +13 -0
  203. package/dist/shared/filereview/progress.js +13 -0
  204. package/dist/shared/filereview/progress.js.map +1 -1
  205. package/dist/shared/heartbeat.d.ts +1 -1
  206. package/dist/shared/heartbeat.js +1 -1
  207. package/dist/shared/llm-backend.d.ts +0 -4
  208. package/dist/shared/llm-backend.js +0 -4
  209. package/dist/shared/llm-backend.js.map +1 -1
  210. package/dist/shared/memory-attachment.d.ts +16 -9
  211. package/dist/shared/memory-attachment.js +18 -10
  212. package/dist/shared/memory-attachment.js.map +1 -1
  213. package/dist/shared/model-error.d.ts +1 -2
  214. package/dist/shared/model-error.js +1 -2
  215. package/dist/shared/model-error.js.map +1 -1
  216. package/dist/shared/persist-decision.d.ts +18 -24
  217. package/dist/shared/persist-decision.js +19 -11
  218. package/dist/shared/persist-decision.js.map +1 -1
  219. package/dist/shared/prompt-sections.d.ts +4 -4
  220. package/dist/shared/prompt-sections.js +4 -4
  221. package/dist/shared/run-credential-store.d.ts +32 -0
  222. package/dist/shared/run-credential-store.js +39 -0
  223. package/dist/shared/run-credential-store.js.map +1 -0
  224. package/dist/shared/run-credential.d.ts +61 -0
  225. package/dist/shared/run-credential.js +68 -0
  226. package/dist/shared/run-credential.js.map +1 -0
  227. package/dist/shared/skill-resolver.d.ts +3 -3
  228. package/dist/shared/skill-resolver.js +3 -3
  229. package/dist/shared/status-offload.d.ts +1 -1
  230. package/dist/shared/status-offload.js +2 -2
  231. package/dist/shared/status-offload.js.map +1 -1
  232. package/dist/shared/streaming-scheduler.d.ts +2 -7
  233. package/dist/shared/streaming-scheduler.js +6 -14
  234. package/dist/shared/streaming-scheduler.js.map +1 -1
  235. package/dist/shared/subagent-rows.d.ts +2 -2
  236. package/dist/shared/subagent-rows.js +2 -2
  237. package/dist/shared/synthesized-attachment.d.ts +30 -3
  238. package/dist/shared/synthesized-attachment.js +26 -0
  239. package/dist/shared/synthesized-attachment.js.map +1 -1
  240. package/dist/shared/todos.d.ts +3 -3
  241. package/dist/shared/todos.js +3 -3
  242. package/dist/shared/tool-row.d.ts +19 -1
  243. package/dist/shared/tool-row.js +36 -2
  244. package/dist/shared/tool-row.js.map +1 -1
  245. package/dist/shared/worker-shutdown.d.ts +1 -1
  246. package/dist/shared/worker-shutdown.js +1 -1
  247. package/dist/shared/workspace/session-provision.d.ts +1 -1
  248. package/dist/shared/workspace/session-provision.js +1 -1
  249. package/dist/shared/workspace/sources/empty.d.ts +1 -1
  250. package/dist/shared/workspace/sources/empty.js +1 -2
  251. package/dist/shared/workspace/sources/empty.js.map +1 -1
  252. package/dist/shared/workspace/sources/git.js +4 -4
  253. package/dist/shared/workspace/sources/git.js.map +1 -1
  254. package/dist/shared/workspace/sources/local-path.js +6 -6
  255. package/dist/shared/workspace/sources/local-path.js.map +1 -1
  256. package/dist/shared/workspace/stigmer-link.d.ts +1 -1
  257. package/dist/shared/workspace/stigmer-link.js +1 -1
  258. package/dist/shared/workspace/types.d.ts +2 -5
  259. package/dist/shared/workspace/types.js +0 -6
  260. package/dist/shared/workspace/types.js.map +1 -1
  261. package/dist/shared/workspace/writeback-coordinator.d.ts +17 -4
  262. package/dist/shared/workspace/writeback-coordinator.js +7 -9
  263. package/dist/shared/workspace/writeback-coordinator.js.map +1 -1
  264. package/dist/worker.js +10 -3
  265. package/dist/worker.js.map +1 -1
  266. package/dist/workflow-source.d.ts +10 -0
  267. package/dist/workflow-source.js +12 -0
  268. package/dist/workflow-source.js.map +1 -1
  269. package/dist/workflows/execute-from-execution.d.ts +15 -0
  270. package/dist/workflows/execute-from-execution.js +11 -0
  271. package/dist/workflows/execute-from-execution.js.map +1 -1
  272. package/dist/workflows/index.d.ts +5 -3
  273. package/dist/workflows/index.js +5 -3
  274. package/dist/workflows/index.js.map +1 -1
  275. package/dist/workflows/interceptors/run-credential.d.ts +34 -0
  276. package/dist/workflows/interceptors/run-credential.js +71 -0
  277. package/dist/workflows/interceptors/run-credential.js.map +1 -0
  278. package/package.json +4 -4
  279. package/src/__test-utils__/__tests__/execution-record-barrier.test.ts +70 -0
  280. package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +35 -1
  281. package/src/__test-utils__/approval-contract/contract.ts +1 -1
  282. package/src/__test-utils__/approval-contract/types.ts +1 -1
  283. package/src/__test-utils__/harness-boot-order-child.ts +1 -1
  284. package/src/__test-utils__/harness-contract/contract.ts +8 -8
  285. package/src/__test-utils__/harness-contract/recording-sink.ts +11 -1
  286. package/src/__test-utils__/harness-contract/runtime-contract.ts +52 -16
  287. package/src/__test-utils__/harness-contract/scripted-adapter.ts +47 -43
  288. package/src/__test-utils__/hermetic-activity.ts +113 -9
  289. package/src/__test-utils__/model-registry-fixture.ts +31 -7
  290. package/src/__test-utils__/module-specifiers.ts +32 -3
  291. package/src/__tests__/harness-boot-order.test.ts +1 -1
  292. package/src/__tests__/harness-contract.test.ts +1 -1
  293. package/src/__tests__/run-credential-e2e.test.ts +233 -0
  294. package/src/__tests__/run-credential-registration.test.ts +80 -0
  295. package/src/__tests__/runner-manager.test.ts +1 -1
  296. package/src/activities/__tests__/generate-session-subject-wire.test.ts +119 -0
  297. package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +1 -1
  298. package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +2 -2
  299. package/src/activities/execute-cursor/__test-utils__/fold.ts +116 -0
  300. package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +1 -1
  301. package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +67 -17
  302. package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +19 -5
  303. package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +2 -1
  304. package/src/activities/execute-cursor/__tests__/approval-state.test.ts +14 -21
  305. package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +3 -3
  306. package/src/activities/execute-cursor/__tests__/coarse-fingerprint.test.ts +2 -1
  307. package/src/activities/execute-cursor/__tests__/cursor-event-recorder.test.ts +142 -0
  308. package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.test.ts +19 -8
  309. package/src/activities/execute-cursor/__tests__/cursor-sdk-auth-smoke.test.ts +10 -8
  310. package/src/activities/execute-cursor/__tests__/cursor-transcript-live.test.ts +298 -0
  311. package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +4 -2
  312. package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +1 -1
  313. package/src/activities/execute-cursor/__tests__/hermetic/deny-and-retry.test.ts +1 -1
  314. package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +1 -1
  315. package/src/activities/execute-cursor/__tests__/hermetic/goldens/mcp-tool-call.status.json +71 -0
  316. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-task-note.status.json +73 -0
  317. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.error-delta.status.json +78 -0
  318. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.output-first.status.json +72 -0
  319. package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.status.json +72 -0
  320. package/src/activities/execute-cursor/__tests__/hermetic/goldens/sub-agent-delegation.status.json +109 -0
  321. package/src/activities/execute-cursor/__tests__/hermetic/goldens/thinking-turn.status.json +78 -0
  322. package/src/activities/execute-cursor/__tests__/hermetic/goldens/todo-write.status.json +119 -0
  323. package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-error.status.json +68 -0
  324. package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-only-step.status.json +67 -0
  325. package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.status.json +1 -1
  326. package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +7 -7
  327. package/src/activities/execute-cursor/__tests__/hermetic/mcp-tool-call.test.ts +146 -0
  328. package/src/activities/execute-cursor/__tests__/hermetic/pause-vs-shutdown.test.ts +5 -5
  329. package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +2 -1
  330. package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +2 -1
  331. package/src/activities/execute-cursor/__tests__/hermetic/sdk-task-note.test.ts +122 -0
  332. package/src/activities/execute-cursor/__tests__/hermetic/shell-output-delta.test.ts +276 -0
  333. package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +8 -8
  334. package/src/activities/execute-cursor/__tests__/hermetic/sub-agent-delegation.test.ts +196 -0
  335. package/src/activities/execute-cursor/__tests__/hermetic/thinking-turn.test.ts +145 -0
  336. package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +1 -1
  337. package/src/activities/execute-cursor/__tests__/hermetic/todo-write.test.ts +165 -0
  338. package/src/activities/execute-cursor/__tests__/hermetic/tool-call.test.ts +3 -3
  339. package/src/activities/execute-cursor/__tests__/hermetic/tool-error.test.ts +138 -0
  340. package/src/activities/execute-cursor/__tests__/hermetic/tool-only-step.test.ts +130 -0
  341. package/src/activities/execute-cursor/__tests__/hermetic/unattributed-hook-block.test.ts +13 -1
  342. package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +2 -2
  343. package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +43 -60
  344. package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +23 -28
  345. package/src/activities/execute-cursor/__tests__/hook-script.test.ts +2 -1
  346. package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +1 -1
  347. package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +5 -5
  348. package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +11 -13
  349. package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +8 -11
  350. package/src/activities/execute-cursor/__tests__/tool-result-image.test.ts +8 -22
  351. package/src/activities/execute-cursor/__tests__/translator.test.ts +594 -0
  352. package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +8 -5
  353. package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +87 -63
  354. package/src/activities/execute-cursor/adapter.ts +4 -4
  355. package/src/activities/execute-cursor/approval-policy.ts +12 -24
  356. package/src/activities/execute-cursor/approval-state.ts +66 -1
  357. package/src/activities/execute-cursor/boundary-rows.ts +1132 -0
  358. package/src/activities/execute-cursor/cursor-capabilities.ts +1 -1
  359. package/src/activities/execute-cursor/cursor-event-recorder.ts +57 -28
  360. package/src/activities/execute-cursor/fetch-interceptor.ts +1 -1
  361. package/src/activities/execute-cursor/http2-interceptor.ts +1 -1
  362. package/src/activities/execute-cursor/prompt-builder.ts +6 -6
  363. package/src/activities/execute-cursor/service-tier.ts +1 -2
  364. package/src/activities/execute-cursor/sub-agent-steps.ts +188 -0
  365. package/src/activities/execute-cursor/tool-result.ts +128 -0
  366. package/src/activities/execute-cursor/translator.ts +541 -0
  367. package/src/activities/execute-cursor/turn-boundary.ts +21 -14
  368. package/src/activities/execute-cursor/turn-settle.ts +46 -34
  369. package/src/activities/execute-cursor/turn-setup.ts +5 -5
  370. package/src/activities/execute-cursor/turn-stream.ts +49 -46
  371. package/src/activities/execute-cursor/turn.ts +5 -5
  372. package/src/activities/execute-cursor/usage-pricing.ts +2 -2
  373. package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +2 -2
  374. package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +23 -11
  375. package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +1 -1
  376. package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +2 -3
  377. package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +25 -4
  378. package/src/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.ts +25 -11
  379. package/src/activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts +1 -1
  380. package/src/activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts +1 -1
  381. package/src/activities/execute-deep-agent/__tests__/approval-file-change.test.ts +6 -17
  382. package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +25 -8
  383. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +2 -7
  384. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +4 -14
  385. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +1 -5
  386. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +4 -7
  387. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +1 -5
  388. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +2 -9
  389. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +2 -9
  390. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +1 -4
  391. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +1 -4
  392. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +1 -4
  393. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +109 -76
  394. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +1 -5
  395. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +2 -10
  396. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +2 -10
  397. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +1 -5
  398. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +3 -6
  399. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +1 -4
  400. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +1 -4
  401. package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/write-todos.status.json +92 -0
  402. package/src/activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts +3 -3
  403. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-approve-all-lease.test.ts +9 -5
  404. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +3 -3
  405. package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +3 -3
  406. package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +7 -6
  407. package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +10 -11
  408. package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +4 -4
  409. package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +9 -8
  410. package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +21 -13
  411. package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +2 -2
  412. package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +7 -7
  413. package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +28 -12
  414. package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +21 -21
  415. package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -5
  416. package/src/activities/execute-deep-agent/__tests__/hermetic/write-todos.test.ts +160 -0
  417. package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +35 -30
  418. package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +3 -4
  419. package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +12 -10
  420. package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +13 -3
  421. package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +26 -18
  422. package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +1 -1
  423. package/src/activities/execute-deep-agent/__tests__/{subagent-tracker.test.ts → translator-subagents.test.ts} +76 -57
  424. package/src/activities/execute-deep-agent/__tests__/{v3-status-builder.test.ts → translator-through-builder.test.ts} +213 -299
  425. package/src/activities/execute-deep-agent/__tests__/translator.test.ts +505 -0
  426. package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +11 -29
  427. package/src/activities/execute-deep-agent/adapter.ts +1 -1
  428. package/src/activities/execute-deep-agent/approval-file-change.ts +20 -22
  429. package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +2 -2
  430. package/src/activities/execute-deep-agent/hitl.ts +2 -2
  431. package/src/activities/execute-deep-agent/inline-publisher.ts +16 -5
  432. package/src/activities/execute-deep-agent/prompt-builder.ts +6 -7
  433. package/src/activities/execute-deep-agent/streaming-side-effects.ts +22 -31
  434. package/src/activities/execute-deep-agent/subagent-transformer.ts +3 -3
  435. package/src/activities/execute-deep-agent/translator.ts +463 -0
  436. package/src/activities/execute-deep-agent/turn-settle.ts +35 -43
  437. package/src/activities/execute-deep-agent/turn-setup.ts +8 -8
  438. package/src/activities/execute-deep-agent/turn-stream.ts +53 -51
  439. package/src/activities/execute-deep-agent/turn.ts +3 -3
  440. package/src/activities/generate-session-subject.ts +29 -4
  441. package/src/client/__tests__/stigmer-client.test.ts +92 -0
  442. package/src/client/stigmer-client.ts +48 -14
  443. package/src/config.ts +6 -3
  444. package/src/harness/README.md +335 -0
  445. package/src/harness/__tests__/approval-decisions.test.ts +2 -2
  446. package/src/harness/__tests__/capture.test.ts +3 -3
  447. package/src/harness/__tests__/import-direction.test.ts +3 -2
  448. package/src/harness/__tests__/mount-skills.test.ts +4 -1
  449. package/src/harness/__tests__/readme-index.test.ts +339 -0
  450. package/src/harness/__tests__/run-turn.test.ts +131 -6
  451. package/src/harness/__tests__/transcript-is-engine-free.test.ts +83 -0
  452. package/src/harness/__tests__/transcript-writers.test.ts +191 -0
  453. package/src/harness/__tests__/turn-attachments-vision.test.ts +5 -2
  454. package/src/harness/__tests__/turn-context.test.ts +5 -5
  455. package/src/harness/approval-decisions.ts +1 -1
  456. package/src/harness/capabilities.ts +21 -11
  457. package/src/harness/capture.ts +4 -4
  458. package/src/harness/persist-chokepoint.ts +3 -3
  459. package/src/harness/registry.ts +2 -2
  460. package/src/harness/run-turn.ts +33 -9
  461. package/src/harness/stop-controller.ts +1 -1
  462. package/src/harness/terminal-table.ts +7 -7
  463. package/src/harness/transcript/__tests__/builder.test.ts +975 -0
  464. package/src/harness/transcript/__tests__/state.test.ts +143 -0
  465. package/src/harness/transcript/builder.ts +755 -0
  466. package/src/harness/transcript/events.ts +262 -0
  467. package/src/harness/transcript/state.ts +167 -0
  468. package/src/harness/turn-context.ts +61 -46
  469. package/src/harness/types.ts +64 -22
  470. package/src/harness/usage-accumulator.ts +2 -2
  471. package/src/harness-adapters.ts +5 -4
  472. package/src/interceptors/__tests__/run-credential-activity.test.ts +133 -0
  473. package/src/interceptors/run-credential-activity.ts +67 -0
  474. package/src/middleware/__tests__/cost-advisory.test.ts +2 -2
  475. package/src/middleware/approval-gate.ts +7 -74
  476. package/src/middleware/cost-advisory.ts +3 -3
  477. package/src/middleware/index.ts +1 -1
  478. package/src/runner-manager.ts +14 -4
  479. package/src/shared/__tests__/approval-policy.test.ts +45 -0
  480. package/src/shared/__tests__/args-preview.test.ts +40 -20
  481. package/src/shared/__tests__/attachment-naming.test.ts +1 -1
  482. package/src/shared/__tests__/attachment-resolver.test.ts +5 -5
  483. package/src/shared/__tests__/attachment-zip.test.ts +1 -1
  484. package/src/shared/__tests__/blueprint-resolver.test.ts +1 -1
  485. package/src/shared/__tests__/channel-attachment.test.ts +12 -0
  486. package/src/shared/__tests__/cost-guard.test.ts +1 -1
  487. package/src/shared/__tests__/exact-apply.test.ts +2 -1
  488. package/src/shared/__tests__/memory-attachment.test.ts +17 -0
  489. package/src/shared/__tests__/persist-decision.test.ts +19 -33
  490. package/src/shared/__tests__/prompt-sections.test.ts +1 -1
  491. package/src/shared/__tests__/run-credential.test.ts +111 -0
  492. package/src/shared/__tests__/stamp-flowed-rows.test.ts +1 -1
  493. package/src/shared/__tests__/status-offload.test.ts +1 -1
  494. package/src/shared/__tests__/streaming-scheduler.test.ts +8 -9
  495. package/src/shared/__tests__/todos.test.ts +1 -1
  496. package/src/shared/__tests__/tool-row.test.ts +1 -1
  497. package/src/shared/activity-input.ts +21 -0
  498. package/src/shared/approval-policy.ts +95 -0
  499. package/src/shared/args-preview.ts +51 -42
  500. package/src/shared/attachment-resolver.ts +4 -4
  501. package/src/shared/attachment-zip.ts +2 -2
  502. package/src/shared/channel-attachment.ts +14 -6
  503. package/src/shared/cost-guard.ts +2 -2
  504. package/src/shared/exact-apply.ts +1 -1
  505. package/src/shared/execution-context.ts +2 -2
  506. package/src/shared/extract-structured-output.ts +2 -2
  507. package/src/shared/filereview/__tests__/capture.test.ts +9 -5
  508. package/src/shared/filereview/__tests__/git-substrate.test.ts +4 -1
  509. package/src/shared/filereview/__tests__/proxy-reconcile.test.ts +3 -3
  510. package/src/shared/filereview/cas-touched.ts +2 -2
  511. package/src/shared/filereview/progress.ts +13 -0
  512. package/src/shared/heartbeat.ts +1 -1
  513. package/src/shared/llm-backend.ts +0 -4
  514. package/src/shared/memory-attachment.ts +22 -10
  515. package/src/shared/model-error.ts +1 -2
  516. package/src/shared/persist-decision.ts +19 -28
  517. package/src/shared/prompt-sections.ts +4 -4
  518. package/src/shared/run-credential-store.ts +45 -0
  519. package/src/shared/run-credential.ts +70 -0
  520. package/src/shared/skill-resolver.ts +3 -3
  521. package/src/shared/status-offload.ts +2 -2
  522. package/src/shared/streaming-scheduler.ts +8 -13
  523. package/src/shared/subagent-rows.ts +2 -2
  524. package/src/shared/synthesized-attachment.ts +38 -3
  525. package/src/shared/todos.ts +3 -3
  526. package/src/shared/tool-row.ts +38 -2
  527. package/src/shared/worker-shutdown.ts +1 -1
  528. package/src/shared/workspace/__tests__/git-source.test.ts +3 -3
  529. package/src/shared/workspace/__tests__/provisioner.test.ts +5 -5
  530. package/src/shared/workspace/__tests__/session-provision.test.ts +2 -2
  531. package/src/shared/workspace/__tests__/writeback-coordinator.integration.test.ts +8 -9
  532. package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +25 -25
  533. package/src/shared/workspace/provisioner.ts +1 -1
  534. package/src/shared/workspace/session-provision.ts +1 -1
  535. package/src/shared/workspace/sources/empty.ts +2 -2
  536. package/src/shared/workspace/sources/git.ts +3 -4
  537. package/src/shared/workspace/sources/local-path.ts +5 -6
  538. package/src/shared/workspace/stigmer-link.ts +1 -1
  539. package/src/shared/workspace/types.ts +2 -5
  540. package/src/shared/workspace/writeback-coordinator.ts +23 -12
  541. package/src/worker.ts +15 -3
  542. package/src/workflow-source.ts +15 -0
  543. package/src/workflows/__tests__/run-credential-interceptor.test.ts +178 -0
  544. package/src/workflows/execute-from-execution.ts +17 -0
  545. package/src/workflows/index.ts +5 -3
  546. package/src/workflows/interceptors/run-credential.ts +101 -0
  547. package/dist/activities/execute-cursor/delta-enricher.d.ts +0 -87
  548. package/dist/activities/execute-cursor/delta-enricher.js +0 -265
  549. package/dist/activities/execute-cursor/delta-enricher.js.map +0 -1
  550. package/dist/activities/execute-cursor/message-translator.js +0 -2040
  551. package/dist/activities/execute-cursor/message-translator.js.map +0 -1
  552. package/dist/activities/execute-cursor/todo-tracker.d.ts +0 -40
  553. package/dist/activities/execute-cursor/todo-tracker.js +0 -80
  554. package/dist/activities/execute-cursor/todo-tracker.js.map +0 -1
  555. package/dist/activities/execute-deep-agent/execution-state.d.ts +0 -54
  556. package/dist/activities/execute-deep-agent/execution-state.js +0 -68
  557. package/dist/activities/execute-deep-agent/execution-state.js.map +0 -1
  558. package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +0 -65
  559. package/dist/activities/execute-deep-agent/status-builder-shared.js +0 -90
  560. package/dist/activities/execute-deep-agent/status-builder-shared.js.map +0 -1
  561. package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +0 -113
  562. package/dist/activities/execute-deep-agent/subagent-tracker.js +0 -400
  563. package/dist/activities/execute-deep-agent/subagent-tracker.js.map +0 -1
  564. package/dist/activities/execute-deep-agent/v3-events.d.ts +0 -102
  565. package/dist/activities/execute-deep-agent/v3-events.js +0 -35
  566. package/dist/activities/execute-deep-agent/v3-events.js.map +0 -1
  567. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.d.ts +0 -15
  568. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js +0 -235
  569. package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js.map +0 -1
  570. package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +0 -111
  571. package/dist/activities/execute-deep-agent/v3-status-builder.js +0 -457
  572. package/dist/activities/execute-deep-agent/v3-status-builder.js.map +0 -1
  573. package/dist/shared/execution-status-writer.d.ts +0 -31
  574. package/dist/shared/execution-status-writer.js +0 -43
  575. package/dist/shared/execution-status-writer.js.map +0 -1
  576. package/src/activities/execute-cursor/__tests__/delta-enricher.test.ts +0 -310
  577. package/src/activities/execute-cursor/__tests__/message-translator.test.ts +0 -1033
  578. package/src/activities/execute-cursor/__tests__/todo-tracker.test.ts +0 -498
  579. package/src/activities/execute-cursor/delta-enricher.ts +0 -307
  580. package/src/activities/execute-cursor/message-translator.ts +0 -2319
  581. package/src/activities/execute-cursor/todo-tracker.ts +0 -91
  582. package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +0 -148
  583. package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +0 -154
  584. package/src/activities/execute-deep-agent/__tests__/status-builder-shared.test.ts +0 -47
  585. package/src/activities/execute-deep-agent/__tests__/v3-protocol-normalizer.test.ts +0 -324
  586. package/src/activities/execute-deep-agent/execution-state.ts +0 -78
  587. package/src/activities/execute-deep-agent/status-builder-shared.ts +0 -142
  588. package/src/activities/execute-deep-agent/subagent-tracker.ts +0 -479
  589. package/src/activities/execute-deep-agent/v3-events.ts +0 -153
  590. package/src/activities/execute-deep-agent/v3-protocol-normalizer.ts +0 -264
  591. package/src/activities/execute-deep-agent/v3-status-builder.ts +0 -565
  592. package/src/shared/execution-status-writer.ts +0 -56
package/dist/worker.js CHANGED
@@ -15,7 +15,8 @@
15
15
  */
16
16
  import { createRequire } from "node:module";
17
17
  import { NativeConnection, Worker } from "@temporalio/worker";
18
- import { resolveWorkflowSource, OTEL_WORKFLOW_INTERCEPTOR_MODULE } from "./workflow-source.js";
18
+ import { resolveWorkflowSource, runCredentialWorkflowInterceptorModule, OTEL_WORKFLOW_INTERCEPTOR_MODULE, } from "./workflow-source.js";
19
+ import { runCredentialActivityInterceptor } from "./interceptors/run-credential-activity.js";
19
20
  export async function startWorker(opts) {
20
21
  const { config, activities, payloadCodecs } = opts;
21
22
  const connection = await NativeConnection.connect({
@@ -23,9 +24,15 @@ export async function startWorker(opts) {
23
24
  });
24
25
  const { createWorkflowMetricsSinks } = await import("./interceptors/workflow-metrics-sink.js");
25
26
  const workflowSource = resolveWorkflowSource();
26
- const activityInterceptors = [];
27
+ // The run credential's two ends (shared/run-credential.ts): the workflow
28
+ // side lifts a run's credential onto every activity it schedules, the
29
+ // activity side enters it for the client to present. Always on; inert
30
+ // without a credential. Workflow-side modules must live INSIDE the
31
+ // workflow bundle — a pre-built bundle has it baked in
32
+ // (scripts/bundle-slim.mjs); only the runtime path registers it here.
33
+ const activityInterceptors = [runCredentialActivityInterceptor];
27
34
  let sinks = { ...createWorkflowMetricsSinks() };
28
- const workflowInterceptorModules = [];
35
+ const workflowInterceptorModules = workflowSource.kind === "runtime" ? [runCredentialWorkflowInterceptorModule()] : [];
29
36
  if (process.env.OTEL_EXPORTER_OTLP_ENDPOINT) {
30
37
  const { OpenTelemetryActivityInboundInterceptor, makeWorkflowExporter, } = await import("@temporalio/interceptors-opentelemetry");
31
38
  const { OTLPTraceExporter } = await import("@opentelemetry/exporter-trace-otlp-grpc");
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
@@ -35,4 +35,14 @@ export type WorkflowSource = {
35
35
  * with the workflow bundle.
36
36
  */
37
37
  export declare const OTEL_WORKFLOW_INTERCEPTOR_MODULE = "@temporalio/interceptors-opentelemetry/lib/workflow-interceptors";
38
+ /**
39
+ * Path of the runner's own workflow interceptor — the one that carries a
40
+ * run's credential from the workflow input to every activity it schedules
41
+ * (`workflows/interceptors/run-credential.ts`). Always registered, unlike
42
+ * the OTel module: it is inert without a credential and load-bearing with
43
+ * one. Resolved beside this module so the tsc dist and the slim artifact
44
+ * both find their own compiled copy; the build script names the source
45
+ * file itself.
46
+ */
47
+ export declare function runCredentialWorkflowInterceptorModule(): string;
38
48
  export declare function resolveWorkflowSource(): WorkflowSource;
@@ -28,6 +28,18 @@ import { fileURLToPath } from "node:url";
28
28
  * with the workflow bundle.
29
29
  */
30
30
  export const OTEL_WORKFLOW_INTERCEPTOR_MODULE = "@temporalio/interceptors-opentelemetry/lib/workflow-interceptors";
31
+ /**
32
+ * Path of the runner's own workflow interceptor — the one that carries a
33
+ * run's credential from the workflow input to every activity it schedules
34
+ * (`workflows/interceptors/run-credential.ts`). Always registered, unlike
35
+ * the OTel module: it is inert without a credential and load-bearing with
36
+ * one. Resolved beside this module so the tsc dist and the slim artifact
37
+ * both find their own compiled copy; the build script names the source
38
+ * file itself.
39
+ */
40
+ export function runCredentialWorkflowInterceptorModule() {
41
+ return fileURLToPath(new URL("./workflows/interceptors/run-credential.js", import.meta.url));
42
+ }
31
43
  export function resolveWorkflowSource() {
32
44
  const explicit = process.env.STIGMER_WORKFLOW_BUNDLE;
33
45
  if (explicit) {
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-source.js","sourceRoot":"","sources":["../src/workflow-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAczC;;;;GAIG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAC3C,kEAAkE,CAAC;AAErE,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IACrD,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,0DAA0D,QAAQ,EAAE,CACrE,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAClD,CAAC;IAED,2EAA2E;IAC3E,yEAAyE;IACzE,0EAA0E;IAC1E,4EAA4E;IAC5E,gEAAgE;IAChE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,IAAI,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,aAAa,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC/E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"workflow-source.js","sourceRoot":"","sources":["../src/workflow-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAczC;;;;GAIG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAC3C,kEAAkE,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,UAAU,sCAAsC;IACpD,OAAO,aAAa,CAClB,IAAI,GAAG,CAAC,4CAA4C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CACvE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IACrD,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,0DAA0D,QAAQ,EAAE,CACrE,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAClD,CAAC;IAED,2EAA2E;IAC3E,yEAAyE;IACzE,0EAA0E;IAC1E,4EAA4E;IAC5E,gEAAgE;IAChE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,IAAI,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,aAAa,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC/E,CAAC;AACJ,CAAC"}
@@ -20,6 +20,14 @@
20
20
  * SANDBOX RULES: This file runs inside the Temporal deterministic V8
21
21
  * isolate. No Node.js built-ins, no non-deterministic operations.
22
22
  */
23
+ /**
24
+ * The Temporal workflow type this function is exported as in `index.ts` — the
25
+ * server's `CHILD_WORKFLOW_TYPE`, byte-pinned on both sides. Named here so
26
+ * the run-credential interceptor can gate on it without a second literal; a
27
+ * test pins it to the barrel's export alias (an ES2022 export alias must be a
28
+ * literal, so the barrel cannot import this).
29
+ */
30
+ export declare const EXECUTE_FROM_EXECUTION_WORKFLOW_TYPE = "stigmer/workflow/execute-from-execution";
23
31
  export interface ExecuteFromExecutionInput {
24
32
  execution_id: string;
25
33
  workflow_instance_id: string;
@@ -28,5 +36,12 @@ export interface ExecuteFromExecutionInput {
28
36
  callback_token?: Uint8Array | null;
29
37
  invoker_identity_account_id?: string;
30
38
  recovery_mode?: boolean;
39
+ /**
40
+ * The run credential the server minted for this execution at dispatch —
41
+ * absent from an older server's dispatch. This workflow never reads it: the
42
+ * interceptor in `interceptors/run-credential.ts` lifts it onto every
43
+ * activity this workflow schedules, as a header (`shared/run-credential.ts`).
44
+ */
45
+ execution_context_token?: string;
31
46
  }
32
47
  export declare function executeFromExecution(input: ExecuteFromExecutionInput): Promise<void>;
@@ -33,6 +33,17 @@ const hydrateProxy = proxyActivities({
33
33
  },
34
34
  });
35
35
  // ─────────────────────────────────────────────────────────────────────────────
36
+ // Workflow Input Type (Temporal wire contract with Java/Go orchestrators)
37
+ // ─────────────────────────────────────────────────────────────────────────────
38
+ /**
39
+ * The Temporal workflow type this function is exported as in `index.ts` — the
40
+ * server's `CHILD_WORKFLOW_TYPE`, byte-pinned on both sides. Named here so
41
+ * the run-credential interceptor can gate on it without a second literal; a
42
+ * test pins it to the barrel's export alias (an ES2022 export alias must be a
43
+ * literal, so the barrel cannot import this).
44
+ */
45
+ export const EXECUTE_FROM_EXECUTION_WORKFLOW_TYPE = "stigmer/workflow/execute-from-execution";
46
+ // ─────────────────────────────────────────────────────────────────────────────
36
47
  // Workflow Function
37
48
  // ─────────────────────────────────────────────────────────────────────────────
38
49
  export async function executeFromExecution(input) {
@@ -1 +1 @@
1
- {"version":3,"file":"execute-from-execution.js","sourceRoot":"","sources":["../../src/workflows/execute-from-execution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAUjE,MAAM,YAAY,GAAG,eAAe,CAAoB;IACtD,mBAAmB,EAAE,IAAI;IACzB,KAAK,EAAE;QACL,eAAe,EAAE,CAAC;QAClB,eAAe,EAAE,IAAI;QACrB,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,KAAK;KACvB;CACF,CAAC,CAAC;AAgBH,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAgC;IAEhC,MAAM,EAAE,UAAU,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAElD,GAAG,CAAC,IAAI,CAAC,4CAA4C,EAAE;QACrD,WAAW,EAAE,KAAK,CAAC,YAAY;QAC/B,UAAU,EAAE,KAAK,CAAC,WAAW;QAC7B,kBAAkB,EAAE,KAAK,CAAC,oBAAoB;QAC9C,KAAK,EAAE,KAAK,CAAC,MAAM;KACpB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,wBAAwB,CAAC;QAC/D,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE;QAC9C,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI;QAC9C,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM;KAC/C,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,sEAAsE;QACtE,qEAAqE;QACrE,mEAAmE;QACnE,sEAAsE;QACtE,sEAAsE;QACtE,wEAAwE;QACxE,wEAAwE;QACxE,iEAAiE;QACjE,oEAAoE;QACpE,iEAAiE;QACjE,MAAM,iBAAiB,CAAC,YAAY,EAAE;YACpC,UAAU;YACV,YAAY,EAAE,KAAK,CAAC,aAAa,IAAI,KAAK;SAC3C,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,8CAA8C,EAAE;gBACvD,WAAW,EAAE,KAAK,CAAC,YAAY;aAChC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"execute-from-execution.js","sourceRoot":"","sources":["../../src/workflows/execute-from-execution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAUjE,MAAM,YAAY,GAAG,eAAe,CAAoB;IACtD,mBAAmB,EAAE,IAAI;IACzB,KAAK,EAAE;QACL,eAAe,EAAE,CAAC;QAClB,eAAe,EAAE,IAAI;QACrB,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,KAAK;KACvB;CACF,CAAC,CAAC;AAEH,gFAAgF;AAChF,0EAA0E;AAC1E,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAC/C,yCAAyC,CAAC;AAmB5C,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAgC;IAEhC,MAAM,EAAE,UAAU,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAElD,GAAG,CAAC,IAAI,CAAC,4CAA4C,EAAE;QACrD,WAAW,EAAE,KAAK,CAAC,YAAY;QAC/B,UAAU,EAAE,KAAK,CAAC,WAAW;QAC7B,kBAAkB,EAAE,KAAK,CAAC,oBAAoB;QAC9C,KAAK,EAAE,KAAK,CAAC,MAAM;KACpB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,wBAAwB,CAAC;QAC/D,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE;QAC9C,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI;QAC9C,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM;KAC/C,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,sEAAsE;QACtE,qEAAqE;QACrE,mEAAmE;QACnE,sEAAsE;QACtE,sEAAsE;QACtE,wEAAwE;QACxE,wEAAwE;QACxE,iEAAiE;QACjE,oEAAoE;QACpE,iEAAiE;QACjE,MAAM,iBAAiB,CAAC,YAAY,EAAE;YACpC,UAAU;YACV,YAAY,EAAE,KAAK,CAAC,aAAa,IAAI,KAAK;SAC3C,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,8CAA8C,EAAE;gBACvD,WAAW,EAAE,KAAK,CAAC,YAAY;aAChC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -13,9 +13,11 @@
13
13
  * us map TypeScript function names to the slash-delimited Temporal
14
14
  * workflow type names that the backend expects.
15
15
  *
16
- * OTel workflow interceptors are registered at bundle time — not
17
- * imported here. Pre-built bundles (scripts/bundle-slim.mjs) bake them
18
- * in; the runtime-bundling fallback passes them to the bundler (see
16
+ * Workflow interceptors are registered at bundle time — not imported
17
+ * here: the runner's own run-credential interceptor
18
+ * (./interceptors/run-credential.ts, always) and OTel's (when the host
19
+ * configures the sink). Pre-built bundles (scripts/bundle-slim.mjs) bake
20
+ * them in; the runtime-bundling fallback passes them to the bundler (see
19
21
  * src/workflow-source.ts).
20
22
  */
21
23
  export { connectMcpServer as "stigmer/mcp-server/connect", discoverMcpServerLegacy as "stigmer/mcp-server/discover", } from "./connect-mcp-server.js";
@@ -13,9 +13,11 @@
13
13
  * us map TypeScript function names to the slash-delimited Temporal
14
14
  * workflow type names that the backend expects.
15
15
  *
16
- * OTel workflow interceptors are registered at bundle time — not
17
- * imported here. Pre-built bundles (scripts/bundle-slim.mjs) bake them
18
- * in; the runtime-bundling fallback passes them to the bundler (see
16
+ * Workflow interceptors are registered at bundle time — not imported
17
+ * here: the runner's own run-credential interceptor
18
+ * (./interceptors/run-credential.ts, always) and OTel's (when the host
19
+ * configures the sink). Pre-built bundles (scripts/bundle-slim.mjs) bake
20
+ * them in; the runtime-bundling fallback passes them to the bundler (see
19
21
  * src/workflow-source.ts).
20
22
  */
21
23
  export { connectMcpServer as "stigmer/mcp-server/connect", discoverMcpServerLegacy as "stigmer/mcp-server/discover", } from "./connect-mcp-server.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflows/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,gBAAgB,IAAI,4BAA4B,EAChD,uBAAuB,IAAI,6BAA6B,GACzD,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,yBAAyB,IAAI,0BAA0B,GACxD,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,oBAAoB,IAAI,yCAAyC,GAClE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflows/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EACL,gBAAgB,IAAI,4BAA4B,EAChD,uBAAuB,IAAI,6BAA6B,GACzD,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,yBAAyB,IAAI,0BAA0B,GACxD,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,oBAAoB,IAAI,yCAAyC,GAClE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Workflow-side interceptors that carry a run's credential from the workflow
3
+ * input to every activity the workflow schedules — as a Temporal activity
4
+ * header, the SDK's channel for context that crosses the isolate boundary
5
+ * without being anybody's argument (`shared/run-credential.ts` has the
6
+ * whole story; `interceptors/run-credential-activity.ts` is the other end).
7
+ *
8
+ * Gated by WORKFLOW TYPE, not by input shape. The connect workflow's input
9
+ * carries the same key for a different token — a clocked decrypt-lane token
10
+ * bound to a synthetic id that no verifier admits as a run — and stamping it
11
+ * onto that lane's activities would present it where it does not belong.
12
+ * The gate is the positive list below: the workflow types whose input
13
+ * carries a RUN credential. One entry today; a test pins each entry to an
14
+ * export of `workflows/index.ts`, so the list cannot name a type that does
15
+ * not exist.
16
+ *
17
+ * Per-run state lives on this factory's closure: the SDK instantiates the
18
+ * factory once per workflow run, which is the documented contract. The
19
+ * header is a pure function of the input, so replay recomputes exactly what
20
+ * was recorded, and a credential-less input stamps nothing — an in-flight
21
+ * run from before the credential existed replays byte for byte.
22
+ *
23
+ * TEMPORAL SANDBOX: this file is bundled into the workflow isolate. No Node
24
+ * built-ins. It is baked into the pre-built bundle by
25
+ * `scripts/bundle-slim.mjs` and passed to the runtime bundler by both worker
26
+ * roots (`src/workflow-source.ts` names it beside the OTel module).
27
+ */
28
+ import type { WorkflowInterceptorsFactory } from "@temporalio/workflow";
29
+ /**
30
+ * The workflow types whose input carries a run credential. Byte-pinned wire
31
+ * names; each must be an export alias of `workflows/index.ts`.
32
+ */
33
+ export declare const RUN_WORKFLOW_TYPES: readonly string[];
34
+ export declare const interceptors: WorkflowInterceptorsFactory;
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Workflow-side interceptors that carry a run's credential from the workflow
3
+ * input to every activity the workflow schedules — as a Temporal activity
4
+ * header, the SDK's channel for context that crosses the isolate boundary
5
+ * without being anybody's argument (`shared/run-credential.ts` has the
6
+ * whole story; `interceptors/run-credential-activity.ts` is the other end).
7
+ *
8
+ * Gated by WORKFLOW TYPE, not by input shape. The connect workflow's input
9
+ * carries the same key for a different token — a clocked decrypt-lane token
10
+ * bound to a synthetic id that no verifier admits as a run — and stamping it
11
+ * onto that lane's activities would present it where it does not belong.
12
+ * The gate is the positive list below: the workflow types whose input
13
+ * carries a RUN credential. One entry today; a test pins each entry to an
14
+ * export of `workflows/index.ts`, so the list cannot name a type that does
15
+ * not exist.
16
+ *
17
+ * Per-run state lives on this factory's closure: the SDK instantiates the
18
+ * factory once per workflow run, which is the documented contract. The
19
+ * header is a pure function of the input, so replay recomputes exactly what
20
+ * was recorded, and a credential-less input stamps nothing — an in-flight
21
+ * run from before the credential existed replays byte for byte.
22
+ *
23
+ * TEMPORAL SANDBOX: this file is bundled into the workflow isolate. No Node
24
+ * built-ins. It is baked into the pre-built bundle by
25
+ * `scripts/bundle-slim.mjs` and passed to the runtime bundler by both worker
26
+ * roots (`src/workflow-source.ts` names it beside the OTel module).
27
+ */
28
+ import { workflowInfo } from "@temporalio/workflow";
29
+ import { defaultPayloadConverter } from "@temporalio/common";
30
+ import { RUN_CREDENTIAL_HEADER, readRunCredentialFromInput, } from "../../shared/run-credential.js";
31
+ import { EXECUTE_FROM_EXECUTION_WORKFLOW_TYPE } from "../execute-from-execution.js";
32
+ /**
33
+ * The workflow types whose input carries a run credential. Byte-pinned wire
34
+ * names; each must be an export alias of `workflows/index.ts`.
35
+ */
36
+ export const RUN_WORKFLOW_TYPES = [
37
+ EXECUTE_FROM_EXECUTION_WORKFLOW_TYPE,
38
+ ];
39
+ export const interceptors = () => {
40
+ let credential;
41
+ const inbound = {
42
+ async execute(input, next) {
43
+ if (RUN_WORKFLOW_TYPES.includes(workflowInfo().workflowType)) {
44
+ credential = readRunCredentialFromInput(input.args[0]);
45
+ }
46
+ return next(input);
47
+ },
48
+ };
49
+ const outbound = {
50
+ async scheduleActivity(input, next) {
51
+ return next(stamped(input));
52
+ },
53
+ async scheduleLocalActivity(input, next) {
54
+ return next(stamped(input));
55
+ },
56
+ };
57
+ function stamped(input) {
58
+ if (credential === undefined) {
59
+ return input;
60
+ }
61
+ return {
62
+ ...input,
63
+ headers: {
64
+ ...input.headers,
65
+ [RUN_CREDENTIAL_HEADER]: defaultPayloadConverter.toPayload(credential),
66
+ },
67
+ };
68
+ }
69
+ return { inbound: [inbound], outbound: [outbound] };
70
+ };
71
+ //# sourceMappingURL=run-credential.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-credential.js","sourceRoot":"","sources":["../../../src/workflows/interceptors/run-credential.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAUpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EACL,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,oCAAoC,EAAE,MAAM,8BAA8B,CAAC;AAEpF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,oCAAoC;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAgC,GAAG,EAAE;IAC5D,IAAI,UAA8B,CAAC;IAEnC,MAAM,OAAO,GAAoC;QAC/C,KAAK,CAAC,OAAO,CACX,KAA2B,EAC3B,IAAsD;YAEtD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7D,UAAU,GAAG,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;KACF,CAAC;IAEF,MAAM,QAAQ,GAAqC;QACjD,KAAK,CAAC,gBAAgB,CACpB,KAAoB,EACpB,IAAgE;YAEhE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,KAAK,CAAC,qBAAqB,CACzB,KAAyB,EACzB,IAAqE;YAErE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC;IAEF,SAAS,OAAO,CACd,KAAQ;QAER,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO;YACL,GAAG,KAAK;YACR,OAAO,EAAE;gBACP,GAAG,KAAK,CAAC,OAAO;gBAChB,CAAC,qBAAqB,CAAC,EAAE,uBAAuB,CAAC,SAAS,CAAC,UAAU,CAAC;aACvE;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;AACtD,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stigmer/runner",
3
- "version": "3.15.3-dev.20260914121148",
3
+ "version": "3.16.0",
4
4
  "description": "Embeddable Temporal worker for the Stigmer AI agent platform — handles agent execution, workflow orchestration, and MCP server management",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -104,9 +104,9 @@
104
104
  "@opentelemetry/sdk-metrics": "^2.0.0",
105
105
  "@opentelemetry/sdk-trace-base": "^2.0.0",
106
106
  "@opentelemetry/sdk-trace-node": "^2.0.0",
107
- "@stigmer/protos": "3.15.3-dev.20260914121148",
108
- "@stigmer/temporal-codecs": "3.15.3-dev.20260914121148",
109
- "@stigmer/zip-structure": "3.15.3-dev.20260914121148",
107
+ "@stigmer/protos": "3.16.0",
108
+ "@stigmer/temporal-codecs": "3.16.0",
109
+ "@stigmer/zip-structure": "3.16.0",
110
110
  "@temporalio/activity": "1.16.2",
111
111
  "@temporalio/common": "1.16.2",
112
112
  "@temporalio/interceptors-opentelemetry": "1.16.2",
@@ -0,0 +1,70 @@
1
+ /**
2
+ * `ExecutionRecord.whenToolCallsSettled` — the barrier the hermetic scripted
3
+ * model waits on before it ticks (since #1097): resolves once every named row is
4
+ * persisted settled, across the root and the sub-agent transcripts; resolves
5
+ * at once when there is nothing to wait for; fails naming the open ids rather
6
+ * than hanging when no persist ever carries them.
7
+ */
8
+ import { describe, expect, it } from "vitest";
9
+ import { create } from "@bufbuild/protobuf";
10
+ import { AgentExecutionStatusSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
11
+ import { ExecutionPhase, MessageType, ToolCallStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
12
+ import { deepAgentExecutionRecord } from "../../activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js";
13
+
14
+ function statusWith(rows: Array<{ id: string; status: ToolCallStatus; subAgent?: boolean }>) {
15
+ const message = (ids: typeof rows) => ({
16
+ type: MessageType.MESSAGE_AI,
17
+ content: "",
18
+ toolCalls: ids.map((r) => ({ id: r.id, name: "probe", status: r.status })),
19
+ });
20
+ return create(AgentExecutionStatusSchema, {
21
+ phase: ExecutionPhase.EXECUTION_IN_PROGRESS,
22
+ messages: [message(rows.filter((r) => !r.subAgent))],
23
+ subAgentExecutions: rows.some((r) => r.subAgent)
24
+ ? [{ id: "task-1", name: "helper", messages: [message(rows.filter((r) => r.subAgent))] }]
25
+ : [],
26
+ });
27
+ }
28
+
29
+ describe("ExecutionRecord.whenToolCallsSettled", () => {
30
+ it("resolves at once for no ids, and for ids already persisted settled", async () => {
31
+ const record = deepAgentExecutionRecord({ message: "go" });
32
+ await expect(record.whenToolCallsSettled([])).resolves.toBeUndefined();
33
+
34
+ record.applyStatusUpdate(statusWith([{ id: "c-1", status: ToolCallStatus.TOOL_CALL_COMPLETED }]));
35
+ await expect(record.whenToolCallsSettled(["c-1"])).resolves.toBeUndefined();
36
+ });
37
+
38
+ it("waits through a RUNNING persist and releases on the persist that settles the row", async () => {
39
+ const record = deepAgentExecutionRecord({ message: "go" });
40
+ let released = false;
41
+ const barrier = record.whenToolCallsSettled(["c-1"]).then(() => {
42
+ released = true;
43
+ });
44
+
45
+ record.applyStatusUpdate(statusWith([{ id: "c-1", status: ToolCallStatus.TOOL_CALL_RUNNING }]));
46
+ await Promise.resolve();
47
+ expect(released, "a RUNNING row is not settled").toBe(false);
48
+
49
+ record.applyStatusUpdate(statusWith([{ id: "c-1", status: ToolCallStatus.TOOL_CALL_WAITING_APPROVAL }]));
50
+ await barrier;
51
+ expect(released).toBe(true);
52
+ });
53
+
54
+ it("finds a sub-agent's rows in its own transcript", async () => {
55
+ const record = deepAgentExecutionRecord({ message: "go" });
56
+ record.applyStatusUpdate(
57
+ statusWith([
58
+ { id: "task-1", status: ToolCallStatus.TOOL_CALL_RUNNING },
59
+ { id: "sub-1", status: ToolCallStatus.TOOL_CALL_COMPLETED, subAgent: true },
60
+ ]),
61
+ );
62
+ await expect(record.whenToolCallsSettled(["sub-1"])).resolves.toBeUndefined();
63
+ });
64
+
65
+ it("fails naming the ids still open when no persist ever settles them, instead of hanging", async () => {
66
+ const record = deepAgentExecutionRecord({ message: "go" });
67
+ record.applyStatusUpdate(statusWith([{ id: "c-1", status: ToolCallStatus.TOOL_CALL_RUNNING }]));
68
+ await expect(record.whenToolCallsSettled(["c-1", "c-2"], 20)).rejects.toThrow(/c-1, c-2 never settled/);
69
+ });
70
+ });
@@ -27,7 +27,9 @@
27
27
 
28
28
  import { describe, it, expect } from "vitest";
29
29
  import { CancelledFailure } from "@temporalio/activity";
30
+ import { create } from "@bufbuild/protobuf";
30
31
  import { ApprovalAction, ToolCallStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
32
+ import { SubAgentExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/subagent_pb";
31
33
 
32
34
  import type { HarnessAdapter, TurnInput, TurnOutcome, TurnSink } from "../../harness/types.js";
33
35
  import {
@@ -41,11 +43,12 @@ import {
41
43
  assertStopSignalInterrupts,
42
44
  assertUsageReachesSinkAsDeltas,
43
45
  } from "../harness-contract/contract.js";
46
+ import { assertTranscriptStreamsNothing } from "../harness-contract/runtime-contract.js";
44
47
  import { scriptedSubject } from "../harness-contract/scripted-adapter.js";
45
48
  import type { ScriptedSubject } from "../harness-contract/scripted-adapter.js";
46
49
  import { scenario } from "../harness-contract/types.js";
47
50
  import type { EngineView, HarnessContractSubject, TurnScenario } from "../harness-contract/types.js";
48
- import { findToolCallRow } from "../proto-helpers.js";
51
+ import { aiMessage, emptyStatus, findToolCallRow, toolCall } from "../proto-helpers.js";
49
52
 
50
53
  /** Short enough to keep this file fast; long enough that an honest microtask settle never trips it. */
51
54
  const SHORT_BOUND_MS = 100;
@@ -75,6 +78,7 @@ function adapterOver(inner: HarnessAdapter, name: string, patch: Partial<Harness
75
78
  function sinkOver(inner: TurnSink, patch: Partial<TurnSink>): TurnSink {
76
79
  return {
77
80
  status: inner.status,
81
+ transcript: inner.transcript,
78
82
  stopSignal: inner.stopSignal,
79
83
  setupTiming: inner.setupTiming,
80
84
  requestPersist: () => inner.requestPersist(),
@@ -324,3 +328,33 @@ describe("harness contract kit self-check — the driver stands in for the runti
324
328
  expect(turn.sink.status.messages.map((m) => m.content), "the stop landed in the hang, after the setup step and before the step after it").toEqual(["setting up"]);
325
329
  });
326
330
  });
331
+
332
+ // ── The runtime half's transcript fact ──────────────────────────────────────
333
+
334
+ describe("harness contract kit self-check — the settled-transcript assertion can fail", () => {
335
+ it("passes a transcript with every flag off", () => {
336
+ const status = emptyStatus();
337
+ const message = aiMessage("done");
338
+ message.toolCalls.push(toolCall("t-1", "read", ToolCallStatus.TOOL_CALL_COMPLETED));
339
+ status.messages.push(message);
340
+ expect(() => assertTranscriptStreamsNothing("honest", status)).not.toThrow();
341
+ });
342
+
343
+ it("names a message left streaming", () => {
344
+ const status = emptyStatus();
345
+ const message = aiMessage("still typing");
346
+ message.isStreaming = true;
347
+ status.messages.push(message);
348
+ expect(() => assertTranscriptStreamsNothing("broken:streams", status)).toThrow(/broken:streams: a settled turn's transcript is still streaming at messages\[0\]/);
349
+ });
350
+
351
+ it("names a tool-call row left streaming, inside a sub-agent's transcript", () => {
352
+ const status = emptyStatus();
353
+ const row = toolCall("t-2", "shell");
354
+ row.isStreaming = true;
355
+ const message = aiMessage("");
356
+ message.toolCalls.push(row);
357
+ status.subAgentExecutions.push(create(SubAgentExecutionSchema, { id: "sub-1", messages: [message] }));
358
+ expect(() => assertTranscriptStreamsNothing("broken:streams", status)).toThrow(/subAgentExecutions\[sub-1\]\.messages\[0\]\.toolCalls\[t-2\]/);
359
+ });
360
+ });
@@ -90,7 +90,7 @@ export function describeGatewayContract(substrate: GatewaySubstrate): void {
90
90
  // effect is always auditable to the policy layer that governed it. Gated to
91
91
  // substrates that decide the source at the gate (the deep-agent gate); the
92
92
  // Cursor substrate projects provenance at reconstruction time and is covered
93
- // by the message-translator + corpus suites.
93
+ // by the translator + boundary-rows + corpus suites.
94
94
  if (substrate.capabilities.surfacesGatePolicySource) {
95
95
  it("tags every gated side effect with a non-UNSPECIFIED policy source", async () => {
96
96
  for (const action of [WRITE_A, SHELL, DELETE]) {
@@ -137,7 +137,7 @@ export interface SubstrateCapabilities {
137
137
  * and stamps the source at interrupt time (`true`); the Cursor substrate's
138
138
  * provenance is a reconstruction-time projection over the persisted tool call,
139
139
  * not a property of the hook's deny decision, so it is `false` here and is
140
- * covered instead by the message-translator and corpus suites.
140
+ * covered instead by the translator, boundary-rows and corpus suites.
141
141
  */
142
142
  readonly surfacesGatePolicySource: boolean;
143
143
  }
@@ -15,7 +15,7 @@
15
15
  * a bound token ref. Success means the pre-boot graph was connect-free,
16
16
  * both interceptors installed, `assertHttp2ConnectPatched` passed, the
17
17
  * Cursor SDK slice loaded from inside its `boot`, and the native
18
- * deep-agent adapter (the table's second row since S3 M2b) registered its
18
+ * deep-agent adapter (the table's second row since #1096) registered its
19
19
  * profiles and loaded LangChain after the patch. That neither engine is
20
20
  * on the table's STATIC graph is each adapter's own fence
21
21
  * (`adapter-graph-is-sdk-free.test.ts`); this child proves the boot
@@ -38,7 +38,7 @@
38
38
  * is carried to COMPLETED; with REJECT or SKIP → never executes and the
39
39
  * turn continues (the row's SKIPPED status is the runtime's to write,
40
40
  * `harness/approval-decisions.ts`, proven in the runtime half — the
41
- * driver stands in for that write between turns, Q-M1-3); reinvoked again
41
+ * driver stands in for that write between turns); reinvoked again
42
42
  * after the approval → still once, never re-gated.
43
43
  * 4. Aborting `stopSignal` mid-hang settles `runTurn` as `interrupted` within
44
44
  * {@link INTERRUPT_SETTLE_BOUND_MS} and nothing after the stop executes or
@@ -48,8 +48,8 @@
48
48
  * executes on the resumed turn is the pause primitive's business — an
49
49
  * interrupt engine completes the pending task before its model speaks,
50
50
  * a deny-and-retry engine re-reaches it whenever its model does — so it
51
- * is below the contract line (S3 M3 Q-M3-2; each harness's own kit file
52
- * observes its order).
51
+ * is below the contract line (each harness's own kit file observes its
52
+ * order).
53
53
  * 5. Usage reaches the sink as non-negative deltas summing to what the engine
54
54
  * emitted.
55
55
  * 6. Capability and behaviour agree on the state id: an `engine-minted`
@@ -154,7 +154,7 @@ export class ExecutionDriver {
154
154
 
155
155
  /** Start a turn without awaiting it, for invariants about turns in flight. */
156
156
  begin(turn: TurnScenario, options: TurnOptions = {}): TurnInFlight {
157
- const sink = options.sink ?? new RecordingTurnSink({ status: this.seedStatus() });
157
+ const sink = options.sink ?? new RecordingTurnSink({ status: this.seedStatus(), executionId: this.executionId });
158
158
  // The engine's view and the record's copy both derive from the status
159
159
  // this turn folds into, so a prepared sink's status is honoured too.
160
160
  const view: EngineView = {
@@ -297,7 +297,7 @@ export async function assertEveryExitIsAnOutcome(subject: HarnessContractSubject
297
297
  driver.recordTurn(sink);
298
298
  }
299
299
 
300
- const preAborted = new RecordingTurnSink({ status: driver.seedStatus() });
300
+ const preAborted = new RecordingTurnSink({ status: driver.seedStatus(), executionId: driver.executionId });
301
301
  preAborted.abort("kit: aborted before the turn");
302
302
  const { settled } = driver.begin([scenario.say("never")], { sink: preAborted });
303
303
  await settleAsOutcome(subject, settleWithinBound(subject, settled, "under a pre-aborted signal", boundMs), "under a pre-aborted signal");
@@ -335,8 +335,8 @@ export async function assertProposalIsWaitingAndUnexecuted(subject: HarnessContr
335
335
  * turn continues — the row's terminal status is NOT asserted here because
336
336
  * it is not the adapter's to write (the decision is the server's field and
337
337
  * the WAITING → SKIPPED transition follows from it with no engine knowledge,
338
- * so it is the runtime's — `terminalizeNonExecutingDecisions`, landed at
339
- * S3 M1 and pinned by the runtime half's REJECT / SKIP arms; S2 M4 Q-M4-1).
338
+ * so it is the runtime's — `terminalizeNonExecutingDecisions`, landed in
339
+ * #1096 and pinned by the runtime half's REJECT / SKIP arms).
340
340
  * The reinvocation sees a CLONE of the persisted status, as it would from
341
341
  * the server.
342
342
  */
@@ -391,7 +391,7 @@ export async function assertStopSignalInterrupts(subject: HarnessContractSubject
391
391
  expect(findToolCallRow(hanging.sink.status, id), `${subject.name}: nothing after the stop may even reach the gate — the proposal after the hang has no row`).toBeUndefined();
392
392
  driver.recordTurn(hanging.sink);
393
393
 
394
- const preAborted = new RecordingTurnSink({ status: driver.seedStatus() });
394
+ const preAborted = new RecordingTurnSink({ status: driver.seedStatus(), executionId: driver.executionId });
395
395
  preAborted.abort("kit: aborted before the turn");
396
396
  const early = driver.begin([scenario.propose(id, WRITE_ALPHA)], { sink: preAborted });
397
397
  const earlyOutcome = await settleWithinBound(subject, early.settled, "under a pre-aborted signal", boundMs);
@@ -20,6 +20,7 @@
20
20
 
21
21
  import type { AgentExecutionStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
22
22
 
23
+ import { TranscriptBuilder } from "../../harness/transcript/builder.js";
23
24
  import type { TurnSink, UsageDelta } from "../../harness/types.js";
24
25
  import type { CasTouchedReader } from "../../shared/filereview/cas-touched.js";
25
26
  import { TimingRecorder } from "../../shared/cold-start-timing.js";
@@ -35,14 +36,22 @@ export type SinkEvent =
35
36
  | { readonly kind: "cas-observations" };
36
37
 
37
38
  export interface RecordingTurnSinkOptions {
38
- /** The status this turn folds into; a fresh empty one when omitted. */
39
+ /**
40
+ * The status this turn folds into; a fresh empty one when omitted. A
41
+ * reinvocation's clone arrives already carrying last turn's rows, and the
42
+ * builder indexes them as the runtime's would after its seed.
43
+ */
39
44
  readonly status?: AgentExecutionStatus;
45
+ /** The execution the builder names in its log lines; the kit's driver passes its own. */
46
+ readonly executionId?: string;
40
47
  /** When set, `bindHarnessState` rejects with this error (a failed session write). */
41
48
  readonly bindRejectsWith?: Error;
42
49
  }
43
50
 
44
51
  export class RecordingTurnSink implements TurnSink {
45
52
  readonly status: AgentExecutionStatus;
53
+ /** The one builder over `status`, as the runtime hands every adapter; the fake creates its rows through it. */
54
+ readonly transcript: TranscriptBuilder;
46
55
  readonly stopSignal: AbortSignal;
47
56
  readonly setupTiming = new TimingRecorder();
48
57
 
@@ -52,6 +61,7 @@ export class RecordingTurnSink implements TurnSink {
52
61
 
53
62
  constructor(options: RecordingTurnSinkOptions = {}) {
54
63
  this.status = options.status ?? emptyStatus();
64
+ this.transcript = new TranscriptBuilder(options.executionId ?? "kit-exec", this.status);
55
65
  this.stopSignal = this.controller.signal;
56
66
  this.bindRejectsWith = options.bindRejectsWith;
57
67
  }