@stigmer/runner 3.11.0 → 3.12.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 (239) hide show
  1. package/README.md +2 -0
  2. package/dist/.build-fingerprint +1 -1
  3. package/dist/activities/discover-mcp-server.d.ts +7 -0
  4. package/dist/activities/discover-mcp-server.js +6 -4
  5. package/dist/activities/discover-mcp-server.js.map +1 -1
  6. package/dist/activities/emit-event.d.ts +14 -2
  7. package/dist/activities/emit-event.js +52 -17
  8. package/dist/activities/emit-event.js.map +1 -1
  9. package/dist/activities/execute-cursor/attachment-resolver.d.ts +11 -0
  10. package/dist/activities/execute-cursor/attachment-resolver.js +8 -0
  11. package/dist/activities/execute-cursor/attachment-resolver.js.map +1 -1
  12. package/dist/activities/execute-cursor/blueprint-resolver.d.ts +1 -9
  13. package/dist/activities/execute-cursor/blueprint-resolver.js +0 -1
  14. package/dist/activities/execute-cursor/blueprint-resolver.js.map +1 -1
  15. package/dist/activities/execute-cursor/error-classifier.d.ts +19 -0
  16. package/dist/activities/execute-cursor/error-classifier.js +34 -3
  17. package/dist/activities/execute-cursor/error-classifier.js.map +1 -1
  18. package/dist/activities/execute-cursor/index.d.ts +52 -12
  19. package/dist/activities/execute-cursor/index.js +141 -67
  20. package/dist/activities/execute-cursor/index.js.map +1 -1
  21. package/dist/activities/execute-cursor/model-pricing-data.d.ts +2 -0
  22. package/dist/activities/execute-cursor/model-pricing-data.js +13 -3
  23. package/dist/activities/execute-cursor/model-pricing-data.js.map +1 -1
  24. package/dist/activities/execute-cursor/prompt-builder.d.ts +48 -11
  25. package/dist/activities/execute-cursor/prompt-builder.js +57 -10
  26. package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
  27. package/dist/activities/execute-cursor/turn-recovery.d.ts +52 -0
  28. package/dist/activities/execute-cursor/turn-recovery.js +193 -0
  29. package/dist/activities/execute-cursor/turn-recovery.js.map +1 -0
  30. package/dist/activities/execute-deep-agent/attachment-injector.d.ts +11 -0
  31. package/dist/activities/execute-deep-agent/attachment-injector.js +7 -1
  32. package/dist/activities/execute-deep-agent/attachment-injector.js.map +1 -1
  33. package/dist/activities/execute-deep-agent/index.js +0 -15
  34. package/dist/activities/execute-deep-agent/index.js.map +1 -1
  35. package/dist/activities/execute-deep-agent/mcp-gate.d.ts +0 -2
  36. package/dist/activities/execute-deep-agent/mcp-gate.js +0 -1
  37. package/dist/activities/execute-deep-agent/mcp-gate.js.map +1 -1
  38. package/dist/activities/execute-deep-agent/prompt-builder.d.ts +7 -8
  39. package/dist/activities/execute-deep-agent/prompt-builder.js +14 -7
  40. package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
  41. package/dist/activities/execute-deep-agent/setup.d.ts +0 -10
  42. package/dist/activities/execute-deep-agent/setup.js +22 -49
  43. package/dist/activities/execute-deep-agent/setup.js.map +1 -1
  44. package/dist/activities/execute-deep-agent/shell-env.d.ts +5 -1
  45. package/dist/activities/execute-deep-agent/shell-env.js +7 -9
  46. package/dist/activities/execute-deep-agent/shell-env.js.map +1 -1
  47. package/dist/activities/execute-deep-agent/subagent-transformer.js +7 -1
  48. package/dist/activities/execute-deep-agent/subagent-transformer.js.map +1 -1
  49. package/dist/activities/execute-deep-agent/subagent-wiring.d.ts +17 -3
  50. package/dist/activities/execute-deep-agent/subagent-wiring.js +14 -2
  51. package/dist/activities/execute-deep-agent/subagent-wiring.js.map +1 -1
  52. package/dist/activities/hydrate-workflow-execution.js +8 -5
  53. package/dist/activities/hydrate-workflow-execution.js.map +1 -1
  54. package/dist/activities/run-command.d.ts +5 -2
  55. package/dist/activities/run-command.js +22 -10
  56. package/dist/activities/run-command.js.map +1 -1
  57. package/dist/activities/run-env.d.ts +40 -0
  58. package/dist/activities/run-env.js +66 -0
  59. package/dist/activities/run-env.js.map +1 -0
  60. package/dist/bootstrap.js +5 -0
  61. package/dist/bootstrap.js.map +1 -1
  62. package/dist/client/stigmer-client.d.ts +83 -26
  63. package/dist/client/stigmer-client.js +88 -24
  64. package/dist/client/stigmer-client.js.map +1 -1
  65. package/dist/config.d.ts +6 -5
  66. package/dist/config.js.map +1 -1
  67. package/dist/encryption/config.d.ts +41 -9
  68. package/dist/encryption/config.js +63 -23
  69. package/dist/encryption/config.js.map +1 -1
  70. package/dist/middleware/index.d.ts +3 -0
  71. package/dist/middleware/index.js +7 -0
  72. package/dist/middleware/index.js.map +1 -1
  73. package/dist/middleware/path-normalization.d.ts +57 -0
  74. package/dist/middleware/path-normalization.js +109 -0
  75. package/dist/middleware/path-normalization.js.map +1 -0
  76. package/dist/middleware/types.d.ts +8 -0
  77. package/dist/payload-codecs.d.ts +2 -1
  78. package/dist/payload-codecs.js +7 -3
  79. package/dist/payload-codecs.js.map +1 -1
  80. package/dist/runner-manager.js +17 -3
  81. package/dist/runner-manager.js.map +1 -1
  82. package/dist/runner.js +7 -3
  83. package/dist/runner.js.map +1 -1
  84. package/dist/shared/artifact-storage.d.ts +34 -1
  85. package/dist/shared/artifact-storage.js +53 -10
  86. package/dist/shared/artifact-storage.js.map +1 -1
  87. package/dist/shared/attachment-download-urls.d.ts +62 -0
  88. package/dist/shared/attachment-download-urls.js +79 -0
  89. package/dist/shared/attachment-download-urls.js.map +1 -0
  90. package/dist/shared/channel-attachment.d.ts +1 -1
  91. package/dist/shared/channel-attachment.js +1 -1
  92. package/dist/shared/checkpointer/http-saver.d.ts +4 -20
  93. package/dist/shared/checkpointer/http-saver.js +15 -57
  94. package/dist/shared/checkpointer/http-saver.js.map +1 -1
  95. package/dist/shared/conversation-attachment.d.ts +2 -3
  96. package/dist/shared/conversation-attachment.js +2 -3
  97. package/dist/shared/conversation-attachment.js.map +1 -1
  98. package/dist/shared/conversation-catchup.d.ts +9 -2
  99. package/dist/shared/conversation-catchup.js +39 -6
  100. package/dist/shared/conversation-catchup.js.map +1 -1
  101. package/dist/shared/grpc-retry.d.ts +5 -1
  102. package/dist/shared/grpc-retry.js +5 -1
  103. package/dist/shared/grpc-retry.js.map +1 -1
  104. package/dist/shared/http-retry.d.ts +51 -9
  105. package/dist/shared/http-retry.js +60 -9
  106. package/dist/shared/http-retry.js.map +1 -1
  107. package/dist/shared/mcp-manager.d.ts +8 -4
  108. package/dist/shared/mcp-manager.js +30 -4
  109. package/dist/shared/mcp-manager.js.map +1 -1
  110. package/dist/shared/mcp-schema-sanitizer.d.ts +70 -0
  111. package/dist/shared/mcp-schema-sanitizer.js +197 -0
  112. package/dist/shared/mcp-schema-sanitizer.js.map +1 -0
  113. package/dist/shared/mcp-transport-guard.d.ts +2 -2
  114. package/dist/shared/mcp-transport-guard.js +2 -2
  115. package/dist/shared/model-client.d.ts +6 -0
  116. package/dist/shared/model-client.js +14 -3
  117. package/dist/shared/model-client.js.map +1 -1
  118. package/dist/shared/model-pricing-data.d.ts +2 -0
  119. package/dist/shared/model-pricing-data.js +13 -3
  120. package/dist/shared/model-pricing-data.js.map +1 -1
  121. package/dist/shared/model-registry.js +3 -2
  122. package/dist/shared/model-registry.js.map +1 -1
  123. package/dist/shared/plan-mode-permissions.d.ts +7 -0
  124. package/dist/shared/plan-mode-permissions.js +7 -0
  125. package/dist/shared/plan-mode-permissions.js.map +1 -1
  126. package/dist/shared/registry-endpoint.d.ts +20 -0
  127. package/dist/shared/registry-endpoint.js +25 -0
  128. package/dist/shared/registry-endpoint.js.map +1 -1
  129. package/dist/shared/runner-credential-keys.d.ts +24 -0
  130. package/dist/shared/runner-credential-keys.js +47 -0
  131. package/dist/shared/runner-credential-keys.js.map +1 -0
  132. package/dist/shared/synthesized-attachment.d.ts +4 -4
  133. package/dist/shared/synthesized-attachment.js +4 -4
  134. package/dist/workflow-engine/resolve.d.ts +19 -1
  135. package/dist/workflow-engine/resolve.js +37 -2
  136. package/dist/workflow-engine/resolve.js.map +1 -1
  137. package/dist/workflows/connect-mcp-server.js +2 -0
  138. package/dist/workflows/connect-mcp-server.js.map +1 -1
  139. package/dist/workflows/types.d.ts +8 -0
  140. package/package.json +3 -4
  141. package/src/__test-utils__/__tests__/vitest-global-setup.test.ts +37 -0
  142. package/src/__test-utils__/fake-artifact-storage.ts +10 -1
  143. package/src/__test-utils__/vitest-global-setup.ts +50 -0
  144. package/src/__tests__/bootstrap.test.ts +43 -0
  145. package/src/__tests__/encryption-codec.test.ts +53 -0
  146. package/src/__tests__/preflight.test.ts +15 -0
  147. package/src/activities/__tests__/discover-mcp-server.test.ts +39 -1
  148. package/src/activities/__tests__/error-classifier.test.ts +94 -2
  149. package/src/activities/__tests__/run-command.test.ts +221 -0
  150. package/src/activities/discover-mcp-server.ts +16 -2
  151. package/src/activities/emit-event.ts +65 -21
  152. package/src/activities/execute-cursor/__tests__/attachment-resolver.test.ts +63 -3
  153. package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +173 -31
  154. package/src/activities/execute-cursor/__tests__/model-pricing.test.ts +62 -1
  155. package/src/activities/execute-cursor/__tests__/turn-recovery.test.ts +160 -0
  156. package/src/activities/execute-cursor/attachment-resolver.ts +24 -0
  157. package/src/activities/execute-cursor/blueprint-resolver.ts +1 -10
  158. package/src/activities/execute-cursor/error-classifier.ts +40 -3
  159. package/src/activities/execute-cursor/index.ts +175 -74
  160. package/src/activities/execute-cursor/model-pricing-data.ts +22 -3
  161. package/src/activities/execute-cursor/prompt-builder.ts +89 -22
  162. package/src/activities/execute-cursor/turn-recovery.ts +208 -0
  163. package/src/activities/execute-deep-agent/__tests__/attachment-injector.test.ts +105 -0
  164. package/src/activities/execute-deep-agent/__tests__/hitl-reject.test.ts +0 -2
  165. package/src/activities/execute-deep-agent/__tests__/hitl-resume-approve-all.test.ts +0 -1
  166. package/src/activities/execute-deep-agent/__tests__/hitl-resume-history.test.ts +0 -1
  167. package/src/activities/execute-deep-agent/__tests__/mcp-gate.test.ts +2 -7
  168. package/src/activities/execute-deep-agent/__tests__/plan-mode-path-normalization.test.ts +174 -0
  169. package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +71 -0
  170. package/src/activities/execute-deep-agent/__tests__/sequential-gate-resume.test.ts +0 -1
  171. package/src/activities/execute-deep-agent/__tests__/shell-env.test.ts +24 -10
  172. package/src/activities/execute-deep-agent/__tests__/subagent-plan-mode-permissions.test.ts +22 -17
  173. package/src/activities/execute-deep-agent/attachment-injector.ts +20 -1
  174. package/src/activities/execute-deep-agent/index.ts +0 -19
  175. package/src/activities/execute-deep-agent/mcp-gate.ts +0 -3
  176. package/src/activities/execute-deep-agent/prompt-builder.ts +27 -15
  177. package/src/activities/execute-deep-agent/setup.ts +22 -73
  178. package/src/activities/execute-deep-agent/shell-env.ts +8 -9
  179. package/src/activities/execute-deep-agent/subagent-transformer.ts +7 -1
  180. package/src/activities/execute-deep-agent/subagent-wiring.ts +26 -3
  181. package/src/activities/hydrate-workflow-execution.ts +8 -5
  182. package/src/activities/run-command.ts +25 -12
  183. package/src/activities/run-env.ts +79 -0
  184. package/src/bootstrap.ts +5 -0
  185. package/src/client/__tests__/stigmer-client.test.ts +104 -5
  186. package/src/client/stigmer-client.ts +128 -29
  187. package/src/config.ts +6 -5
  188. package/src/encryption/config.ts +87 -23
  189. package/src/middleware/__tests__/path-normalization.test.ts +140 -0
  190. package/src/middleware/index.ts +8 -0
  191. package/src/middleware/path-normalization.ts +125 -0
  192. package/src/middleware/types.ts +11 -0
  193. package/src/payload-codecs.ts +8 -2
  194. package/src/runner-manager.ts +21 -3
  195. package/src/runner.ts +7 -3
  196. package/src/shared/__tests__/artifact-storage.test.ts +154 -2
  197. package/src/shared/__tests__/attachment-download-urls.test.ts +70 -0
  198. package/src/shared/__tests__/channel-attachment.test.ts +2 -2
  199. package/src/shared/__tests__/conversation-catchup.test.ts +24 -0
  200. package/src/shared/__tests__/http-retry.test.ts +5 -4
  201. package/src/shared/__tests__/mcp-manager.test.ts +53 -13
  202. package/src/shared/__tests__/mcp-schema-sanitizer.test.ts +267 -0
  203. package/src/shared/__tests__/model-client.test.ts +46 -0
  204. package/src/shared/__tests__/model-pricing.test.ts +62 -2
  205. package/src/shared/__tests__/model-registry.test.ts +22 -0
  206. package/src/shared/__tests__/synthesized-attachment.test.ts +19 -41
  207. package/src/shared/artifact-storage.ts +86 -10
  208. package/src/shared/attachment-download-urls.ts +98 -0
  209. package/src/shared/channel-attachment.ts +1 -1
  210. package/src/shared/checkpointer/http-saver.ts +15 -60
  211. package/src/shared/conversation-attachment.ts +2 -3
  212. package/src/shared/conversation-catchup.ts +39 -6
  213. package/src/shared/grpc-retry.ts +5 -1
  214. package/src/shared/http-retry.ts +98 -9
  215. package/src/shared/mcp-manager.ts +35 -4
  216. package/src/shared/mcp-schema-sanitizer.ts +224 -0
  217. package/src/shared/mcp-transport-guard.ts +2 -2
  218. package/src/shared/model-client.ts +21 -3
  219. package/src/shared/model-pricing-data.ts +22 -3
  220. package/src/shared/model-registry.ts +7 -2
  221. package/src/shared/plan-mode-permissions.ts +7 -0
  222. package/src/shared/registry-endpoint.ts +27 -0
  223. package/src/shared/runner-credential-keys.ts +46 -0
  224. package/src/shared/synthesized-attachment.ts +4 -4
  225. package/src/workflow-engine/__tests__/tasks/emit-event.test.ts +127 -49
  226. package/src/workflow-engine/resolve.ts +48 -2
  227. package/src/workflows/__tests__/connect-mcp-server.test.ts +25 -0
  228. package/src/workflows/connect-mcp-server.ts +2 -0
  229. package/src/workflows/types.ts +8 -0
  230. package/dist/activities/execute-cursor/mcp-config.d.ts +0 -30
  231. package/dist/activities/execute-cursor/mcp-config.js +0 -39
  232. package/dist/activities/execute-cursor/mcp-config.js.map +0 -1
  233. package/dist/shared/datastore-attachment.d.ts +0 -99
  234. package/dist/shared/datastore-attachment.js +0 -184
  235. package/dist/shared/datastore-attachment.js.map +0 -1
  236. package/src/activities/execute-cursor/mcp-config.ts +0 -66
  237. package/src/activities/execute-deep-agent/__tests__/datastore-degradation.test.ts +0 -104
  238. package/src/shared/__tests__/datastore-attachment.test.ts +0 -293
  239. package/src/shared/datastore-attachment.ts +0 -209
@@ -2,6 +2,12 @@
2
2
  * Sub-agent middleware composition for ExecuteDeepAgent.
3
3
  *
4
4
  * Each sub-agent gets its own middleware stack with:
5
+ * - Path normalization (issue #429), FIRST and only on permission-rule-
6
+ * bearing graphs (plan mode) — workspace-relative paths are rewritten to
7
+ * workspace-absolute before deepagents' permission validation refuses
8
+ * them, exactly as on the parent. `compileSubagents` derives it from the
9
+ * same `permissions` option it bakes into the graph, keeping the rules
10
+ * and their normalization shim coupled.
5
11
  * - Fresh loop detection (independent cycle tracking)
6
12
  * - Fresh tool truncation (same limits as parent)
7
13
  * - Periodic execution budget (interval=30, max=4 advisories)
@@ -26,6 +32,7 @@
26
32
  * the gate runs inside the sub-agent in the first place — omitting it here was
27
33
  * the live HITL bypass this wiring closes.
28
34
  */
35
+ import { createPathNormalizationMiddleware } from "../../middleware/path-normalization.js";
29
36
  import { createLoopDetectionMiddleware } from "../../middleware/loop-detection.js";
30
37
  import { createToolTruncationMiddleware } from "../../middleware/tool-truncation.js";
31
38
  import { createExecutionBudgetMiddleware } from "../../middleware/execution-budget.js";
@@ -37,8 +44,10 @@ const SUB_AGENT_MAX_ADVISORIES = 4;
37
44
  * Build the middleware stack for a single sub-agent.
38
45
  *
39
46
  * Returns an ordered array mirroring the parent composition:
40
- * loop detection → execution budget (periodic) → tool truncation →
41
- * [approval gate] → cost cap view → error hints. The gate sits before the
47
+ * [path normalization] → loop detection → execution budget (periodic) →
48
+ * tool truncation → [approval gate] → cost cap view → error hints.
49
+ * Normalization is outermost so everything downstream observes canonical
50
+ * workspace-absolute paths (matching the parent). The gate sits before the
42
51
  * cost-cap view so an approval pause happens before budget accounting, and
43
52
  * error hints come after the gate — both matching the parent order
44
53
  * (…→ truncation → graceful-stop → approval gate → cost cap → error hints …),
@@ -46,6 +55,9 @@ const SUB_AGENT_MAX_ADVISORIES = 4;
46
55
  */
47
56
  export function buildSubAgentMiddleware(options = {}) {
48
57
  const stack = [];
58
+ if (options.pathNormalization) {
59
+ stack.push(createPathNormalizationMiddleware(options.pathNormalization));
60
+ }
49
61
  stack.push(createLoopDetectionMiddleware({ enabled: true }));
50
62
  stack.push(createExecutionBudgetMiddleware({
51
63
  warningInterval: SUB_AGENT_ADVISORY_INTERVAL,
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-wiring.js","sourceRoot":"","sources":["../../../src/activities/execute-deep-agent/subagent-wiring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,EACL,4BAA4B,GAE7B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,MAAM,2BAA2B,GAAG,EAAE,CAAC;AACvC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAsBnC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAqC,EAAE;IAEvC,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE7D,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC;QACzC,eAAe,EAAE,2BAA2B;QAC5C,WAAW,EAAE,wBAAwB;KACtC,CAAC,CAAC,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAEnE,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,6EAA6E;QAC7E,6EAA6E;QAC7E,uEAAuE;QACvE,0EAA0E;QAC1E,6EAA6E;QAC7E,uEAAuE;QACvE,+EAA+E;QAC/E,2EAA2E;QAC3E,+EAA+E;QAC/E,KAAK,CAAC,IAAI,CAAC,4BAA4B,CACrC,OAAO,CAAC,cAAc;YACpB,CAAC,CAAC,OAAO,CAAC,YAAY;YACtB,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,CACvF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAEzC,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"subagent-wiring.js","sourceRoot":"","sources":["../../../src/activities/execute-deep-agent/subagent-wiring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAQH,OAAO,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAC3F,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,EACL,4BAA4B,GAE7B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,MAAM,2BAA2B,GAAG,EAAE,CAAC;AACvC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AA4BnC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAqC,EAAE;IAEvC,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE7D,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC;QACzC,eAAe,EAAE,2BAA2B;QAC5C,WAAW,EAAE,wBAAwB;KACtC,CAAC,CAAC,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAEnE,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,6EAA6E;QAC7E,6EAA6E;QAC7E,uEAAuE;QACvE,0EAA0E;QAC1E,6EAA6E;QAC7E,uEAAuE;QACvE,+EAA+E;QAC/E,2EAA2E;QAC3E,+EAA+E;QAC/E,KAAK,CAAC,IAAI,CAAC,4BAA4B,CACrC,OAAO,CAAC,cAAc;YACpB,CAAC,CAAC,OAAO,CAAC,YAAY;YACtB,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,CACvF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAEzC,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -175,11 +175,14 @@ function parseWorkflowYaml(yaml, workflowId) {
175
175
  }
176
176
  }
177
177
  async function fetchAndFlattenEnv(client, executionId) {
178
- // A desktop runner exchanges its bootstrap credential for a token scoped to
179
- // this workflow execution, so cloud's decrypt gate binds the read (#156).
180
- // No-op for cloud sandbox and OSS runners. A failed exchange throws and
181
- // fails the activity: the bootstrap credential no longer decrypts
182
- // (stigmer-cloud#218), so proceeding would hydrate redacted placeholders.
178
+ // The runner acquires a token scoped to this workflow execution so the
179
+ // server's decrypt gate binds the read: a desktop runner exchanges its
180
+ // bootstrap credential (#156, hard error on failure the bootstrap
181
+ // credential no longer decrypts since stigmer-cloud#218, so proceeding
182
+ // would hydrate redacted placeholders), and an OSS runner asks the
183
+ // credential-less best-effort exchange (oss#535 — the OSS server redacts
184
+ // EC reads by default and mints execution-scoped tokens). No-op for cloud
185
+ // sandbox runners, whose ambient credential is already scoped.
183
186
  const scopedToken = await client.acquireScopedRunnerToken({
184
187
  workflowExecutionId: executionId,
185
188
  });
@@ -1 +1 @@
1
- {"version":3,"file":"hydrate-workflow-execution.js","sourceRoot":"","sources":["../../src/activities/hydrate-workflow-execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hydrate-workflow-execution.js","sourceRoot":"","sources":["../../src/activities/hydrate-workflow-execution.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,11 @@
5
5
  * - RunScript: writes inline code to a temp file, executes via node/python
6
6
  * - RunShell: executes a shell command directly
7
7
  *
8
- * Both resolve runtime placeholders (JIT secrets) before execution
9
- * and capture stdout as the activity result.
8
+ * The child environment follows the declare-to-receive contract in
9
+ * run-env.ts: a minimal base plus the task's declared `environment`,
10
+ * with runtime placeholders (JIT secrets) resolved here in the activity
11
+ * so secret values never enter Temporal history. Both activities capture
12
+ * stdout as the activity result.
10
13
  */
11
14
  import type { RunCommandConfig } from "../workflow-engine/types.js";
12
15
  export declare function createRunCommandActivities(): {
@@ -5,8 +5,11 @@
5
5
  * - RunScript: writes inline code to a temp file, executes via node/python
6
6
  * - RunShell: executes a shell command directly
7
7
  *
8
- * Both resolve runtime placeholders (JIT secrets) before execution
9
- * and capture stdout as the activity result.
8
+ * The child environment follows the declare-to-receive contract in
9
+ * run-env.ts: a minimal base plus the task's declared `environment`,
10
+ * with runtime placeholders (JIT secrets) resolved here in the activity
11
+ * so secret values never enter Temporal history. Both activities capture
12
+ * stdout as the activity result.
10
13
  */
11
14
  import { execFile, exec } from "node:child_process";
12
15
  import { writeFile, mkdtemp, rm } from "node:fs/promises";
@@ -14,7 +17,9 @@ import { tmpdir } from "node:os";
14
17
  import { join } from "node:path";
15
18
  import { promisify } from "node:util";
16
19
  import { ApplicationFailure } from "@temporalio/activity";
20
+ import { RuntimePlaceholderResolutionError } from "../workflow-engine/resolve.js";
17
21
  import { startHeartbeat } from "../shared/heartbeat.js";
22
+ import { buildRunEnv } from "./run-env.js";
18
23
  const execFileAsync = promisify(execFile);
19
24
  const execAsync = promisify(exec);
20
25
  export function createRunCommandActivities() {
@@ -45,7 +50,7 @@ async function runScriptImpl(config) {
45
50
  }
46
51
  const language = config.language;
47
52
  const code = config.code;
48
- const env = buildEnv(config.environment);
53
+ const env = buildTaskEnv(config);
49
54
  const ext = language === "js" ? ".js" : ".py";
50
55
  const interpreter = language === "js" ? "node" : "python3";
51
56
  let tempDir;
@@ -82,7 +87,7 @@ async function runShellImpl(config) {
82
87
  const fullCommand = args.length > 0
83
88
  ? `${command} ${args.join(" ")}`
84
89
  : command;
85
- const env = buildEnv(config.environment);
90
+ const env = buildTaskEnv(config);
86
91
  try {
87
92
  const { stdout } = await execAsync(fullCommand, {
88
93
  env,
@@ -98,14 +103,21 @@ async function runShellImpl(config) {
98
103
  throw err;
99
104
  }
100
105
  }
101
- function buildEnv(taskEnv) {
102
- const base = { ...process.env };
103
- if (taskEnv) {
104
- for (const [k, v] of Object.entries(taskEnv)) {
105
- base[k] = v;
106
+ /**
107
+ * Build the child env per the run-env.ts contract, translating a missing
108
+ * placeholder key into a non-retryable failure — retrying cannot conjure
109
+ * a variable the workflow's runtime env does not have.
110
+ */
111
+ function buildTaskEnv(config) {
112
+ try {
113
+ return buildRunEnv(config.environment, config.runtimeEnv);
114
+ }
115
+ catch (err) {
116
+ if (err instanceof RuntimePlaceholderResolutionError) {
117
+ throw ApplicationFailure.nonRetryable(err.message, "RUN_ENV_UNRESOLVED_PLACEHOLDER", { variable: err.variableName });
106
118
  }
119
+ throw err;
107
120
  }
108
- return base;
109
121
  }
110
122
  function buildArgsList(args) {
111
123
  if (!args)
@@ -1 +1 @@
1
- {"version":3,"file":"run-command.js","sourceRoot":"","sources":["../../src/activities/run-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-command.js","sourceRoot":"","sources":["../../src/activities/run-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Environment contract for the workflow `run` task (shell and script modes).
3
+ *
4
+ * Declare-to-receive, the same rule the stdio MCP contract adopted after
5
+ * #256 (PR #383): the child process sees ONLY
6
+ *
7
+ * 1. a minimal base copied from the runner process
8
+ * ({@link RUN_ENV_BASE_KEYS} — the six variables the MCP SDK pins),
9
+ * 2. the task's declared `environment` map, with `${.secrets.KEY}` /
10
+ * `${.env_vars.KEY}` placeholders resolved just-in-time from the
11
+ * workflow's runtime env. Resolution happens here in the activity,
12
+ * never in the deterministic workflow phase, so secret values stay
13
+ * out of Temporal history.
14
+ *
15
+ * Runner credentials (STIGMER_TOKEN, the HITL secret, provider keys) are
16
+ * structurally absent rather than denylisted — a workflow-authored
17
+ * `printenv` cannot read what was never passed (oss#384). A missing
18
+ * placeholder key fails loudly: running a command with a silently-empty
19
+ * credential produces cryptic downstream failures.
20
+ *
21
+ * Placeholders resolve only in declared environment VALUES, never in
22
+ * `command` / `code` strings — argv is visible to `ps` on the host, so
23
+ * the environment is the sanctioned channel for secrets.
24
+ */
25
+ /**
26
+ * Base variables copied from the runner process when present — the same
27
+ * six the MCP SDK provides to stdio servers, so "undeclared subprocess
28
+ * environment" has one platform-wide answer. `PATH` keeps interpreters
29
+ * and tools findable; the rest keep shells and language runtimes sane.
30
+ */
31
+ export declare const RUN_ENV_BASE_KEYS: readonly string[];
32
+ /**
33
+ * Build the environment for a run task's child process: minimal base +
34
+ * declared overlay with strict placeholder resolution (declared wins on
35
+ * conflict with the base).
36
+ *
37
+ * @throws RuntimePlaceholderResolutionError when a declared value
38
+ * references a runtime key that does not exist.
39
+ */
40
+ export declare function buildRunEnv(declaredEnv: Readonly<Record<string, string>> | undefined, runtimeEnv: Readonly<Record<string, unknown>>, baseEnv?: NodeJS.ProcessEnv): Record<string, string>;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Environment contract for the workflow `run` task (shell and script modes).
3
+ *
4
+ * Declare-to-receive, the same rule the stdio MCP contract adopted after
5
+ * #256 (PR #383): the child process sees ONLY
6
+ *
7
+ * 1. a minimal base copied from the runner process
8
+ * ({@link RUN_ENV_BASE_KEYS} — the six variables the MCP SDK pins),
9
+ * 2. the task's declared `environment` map, with `${.secrets.KEY}` /
10
+ * `${.env_vars.KEY}` placeholders resolved just-in-time from the
11
+ * workflow's runtime env. Resolution happens here in the activity,
12
+ * never in the deterministic workflow phase, so secret values stay
13
+ * out of Temporal history.
14
+ *
15
+ * Runner credentials (STIGMER_TOKEN, the HITL secret, provider keys) are
16
+ * structurally absent rather than denylisted — a workflow-authored
17
+ * `printenv` cannot read what was never passed (oss#384). A missing
18
+ * placeholder key fails loudly: running a command with a silently-empty
19
+ * credential produces cryptic downstream failures.
20
+ *
21
+ * Placeholders resolve only in declared environment VALUES, never in
22
+ * `command` / `code` strings — argv is visible to `ps` on the host, so
23
+ * the environment is the sanctioned channel for secrets.
24
+ */
25
+ import { resolveRuntimePlaceholdersStrict } from "../workflow-engine/resolve.js";
26
+ /**
27
+ * Base variables copied from the runner process when present — the same
28
+ * six the MCP SDK provides to stdio servers, so "undeclared subprocess
29
+ * environment" has one platform-wide answer. `PATH` keeps interpreters
30
+ * and tools findable; the rest keep shells and language runtimes sane.
31
+ */
32
+ export const RUN_ENV_BASE_KEYS = [
33
+ "HOME",
34
+ "LOGNAME",
35
+ "PATH",
36
+ "SHELL",
37
+ "TERM",
38
+ "USER",
39
+ ];
40
+ /**
41
+ * Build the environment for a run task's child process: minimal base +
42
+ * declared overlay with strict placeholder resolution (declared wins on
43
+ * conflict with the base).
44
+ *
45
+ * @throws RuntimePlaceholderResolutionError when a declared value
46
+ * references a runtime key that does not exist.
47
+ */
48
+ export function buildRunEnv(declaredEnv, runtimeEnv, baseEnv = process.env) {
49
+ const env = {};
50
+ for (const key of RUN_ENV_BASE_KEYS) {
51
+ const value = baseEnv[key];
52
+ if (value !== undefined)
53
+ env[key] = value;
54
+ }
55
+ if (!declaredEnv || Object.keys(declaredEnv).length === 0) {
56
+ // The only case whose behavior changed in oss#384 (previously the
57
+ // child inherited the full runner env) — leave a trace for operators.
58
+ console.log("run task declares no environment — child receives the minimal base env only");
59
+ return env;
60
+ }
61
+ for (const [key, value] of Object.entries(declaredEnv)) {
62
+ env[key] = resolveRuntimePlaceholdersStrict(value, runtimeEnv, `environment "${key}"`);
63
+ }
64
+ return env;
65
+ }
66
+ //# sourceMappingURL=run-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-env.js","sourceRoot":"","sources":["../../src/activities/run-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,MAAM;IACN,SAAS;IACT,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;CACP,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CACzB,WAAyD,EACzD,UAA6C,EAC7C,UAA6B,OAAO,CAAC,GAAG;IAExC,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,kEAAkE;QAClE,sEAAsE;QACtE,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;QAC3F,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,GAAG,CAAC,GAAG,gCAAgC,CACzC,KAAK,EACL,UAAU,EACV,gBAAgB,GAAG,GAAG,CACvB,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
package/dist/bootstrap.js CHANGED
@@ -69,6 +69,11 @@ export async function resolveRunnerBootstrap(options, clientFactory = defaultCli
69
69
  // (OSS / no signing key) and is handled by the runner, not treated as fatal.
70
70
  runnerAccessToken: discovered.runnerAccessToken,
71
71
  runnerAccessTokenExpiresInSeconds: discovered.runnerAccessTokenExpiresInSeconds,
72
+ // Server-managed payload-encryption keys ride the same best-effort lane:
73
+ // absent on OSS (env-configured keys) and on cloud servers predating key
74
+ // management. Note the explicit-address and localhost branches above return
75
+ // none by construction — key management only exists where discovery does.
76
+ payloadEncryption: discovered.payloadEncryption,
72
77
  };
73
78
  }
74
79
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -23,9 +23,29 @@ import type { GetArtifactResponse } from "@stigmer/protos/ai/stigmer/agentic/ski
23
23
  import type { UpdateStatusResponse } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/io_pb";
24
24
  import { WorkflowExecutionCommandController } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/command_pb";
25
25
  import type { WorkflowExecution, WorkflowExecutionStatus } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
26
+ import type { JsonObject } from "@bufbuild/protobuf";
26
27
  import type { Workflow } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
27
28
  import type { WorkflowInstance } from "@stigmer/protos/ai/stigmer/agentic/workflowinstance/v1/api_pb";
28
29
  import type { ChannelTemplate, MessagingChannel } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_io_pb";
30
+ /**
31
+ * Server-managed Temporal payload-encryption keys for this runner.
32
+ *
33
+ * Minted once per caller identity and persisted by the control plane, so
34
+ * every boot of the same identity's runners receives the SAME key — the
35
+ * persistence Temporal replay requires across runner restarts. The secondary
36
+ * pair is present only during a rotation window (decrypt-only; new payloads
37
+ * are written under the primary).
38
+ */
39
+ export interface BootstrapPayloadEncryptionKeys {
40
+ /** Base64-encoded 32-byte AES-256 key. */
41
+ key: string;
42
+ /** Key id stamped on payloads encrypted under {@link key}. */
43
+ keyId: string;
44
+ /** Previous key of this identity, present during rotation windows. */
45
+ secondaryKey?: string;
46
+ /** Key id of {@link secondaryKey}; present exactly when it is. */
47
+ secondaryKeyId?: string;
48
+ }
29
49
  /**
30
50
  * Everything an embedded runner needs to bootstrap: Temporal coordinates plus
31
51
  * its own minted access token.
@@ -33,7 +53,10 @@ import type { ChannelTemplate, MessagingChannel } from "@stigmer/protos/ai/stigm
33
53
  * The Temporal coordinates are always present. The access token is optional: the
34
54
  * server only mints one when it has a Cursor proxy to authenticate against
35
55
  * (cloud) and a signing key configured — OSS and misconfigured servers omit it,
36
- * and the runner keeps using its existing token in that case.
56
+ * and the runner keeps using its existing token in that case. Payload-encryption
57
+ * keys follow the same presence contract: absent when the server does not manage
58
+ * runner keys (OSS uses env-configured keys; older cloud servers predate key
59
+ * management).
37
60
  */
38
61
  export interface RunnerBootstrapConfig {
39
62
  temporalAddress: string;
@@ -42,14 +65,17 @@ export interface RunnerBootstrapConfig {
42
65
  runnerAccessToken?: string;
43
66
  /** Lifetime of {@link runnerAccessToken} in seconds; absent/0 when no token. */
44
67
  runnerAccessTokenExpiresInSeconds?: number;
68
+ /** Server-managed payload-encryption keys; absent when not managed by the server. */
69
+ payloadEncryption?: BootstrapPayloadEncryptionKeys;
45
70
  }
46
71
  /**
47
72
  * A runner token scoped to one unit of dispatched work (issue #156).
48
73
  *
49
- * Minted on demand by the control plane when the runner exchanges its
50
- * bootstrap credential at task start; presented for the ExecutionContext
51
- * fetch of exactly that execution. Absent when the server does not mint
52
- * (OSS, or no signing key) the runner keeps its existing credential.
74
+ * Minted on demand by the control plane at task start a desktop runner
75
+ * exchanges its bootstrap credential, an OSS runner asks with no credential
76
+ * at all (oss#535) and presented for the ExecutionContext fetch of exactly
77
+ * that execution. Absent when the server does not mint (pre-oss#535 OSS, or
78
+ * a refused credential class) — the runner keeps its existing credential.
53
79
  */
54
80
  export interface RunnerScopedToken {
55
81
  token: string;
@@ -146,14 +172,16 @@ export declare class StigmerClient {
146
172
  */
147
173
  getExecutionContextByExecutionId(executionId: string, scopedToken?: string): Promise<ExecutionContext>;
148
174
  /**
149
- * Exchange this runner's bootstrap credential for a token scoped to one
150
- * unit of dispatched work (issue #156).
175
+ * Exchange this runner's credential for a token scoped to one unit of
176
+ * dispatched work (issue #156).
151
177
  *
152
- * The call authenticates with the runner credential (see the interceptor);
153
- * the server verifies it is an embedded_runner token and that its identity
154
- * can view the named execution, then mints the same session/execution-scoped
155
- * sandbox token a cloud sandbox runner receives at provisioning. Returns
156
- * undefined when the server does not mint (OSS, or no signing key) —
178
+ * The call authenticates with the runner credential (see the interceptor).
179
+ * Cloud verifies it is an embedded_runner token and that its identity can
180
+ * view the named execution, then mints the same session/execution-scoped
181
+ * sandbox token a cloud sandbox runner receives at provisioning. OSS mints
182
+ * an execution-scoped token for any caller (oss#535 a lane discriminator
183
+ * on a single-user server, not a trust boundary). Returns undefined when
184
+ * the server does not mint (pre-oss#535 OSS, or an unserved scope arm) —
157
185
  * presence-based, like the bootstrap token fields.
158
186
  *
159
187
  * `callerToken` authenticates the exchange per-call instead of the
@@ -166,21 +194,33 @@ export declare class StigmerClient {
166
194
  * Acquire a scoped runner token for an ExecutionContext read, if this
167
195
  * runner's credential situation calls for one.
168
196
  *
169
- * The gate is the credential itself: only an unscoped embedded_runner
170
- * bootstrap token needs exchanging. A cloud sandbox runner's credential is
171
- * already scoped (skip the exchange would rightly refuse it), and an
172
- * OSS/local runner holds no runner-class credential at all (skip the
173
- * server neither mints nor redacts).
197
+ * The gate is the credential itself, three ways:
198
+ *
199
+ * 1. An unscoped embedded_runner bootstrap token MUST be exchanged, and a
200
+ * failed exchange is a hard error, not a fallback: since the #156
201
+ * item-3 flip (stigmer-cloud#218) the bootstrap credential no longer
202
+ * decrypts, so a read that "fell back" would silently receive redacted
203
+ * placeholders and the execution would run against junk secret values —
204
+ * strictly worse than failing here with the real reason. The
205
+ * secret-delivery call sites let this error fail the activity;
206
+ * opportunistic consumers that can genuinely proceed without a scoped
207
+ * token (attachment credential, channel discovery) catch it at the
208
+ * call site, where their degrade-to-empty contract lives.
174
209
  *
175
- * A failed exchange is a hard error, not a fallback: since the #156 item-3
176
- * flip (stigmer-cloud#218) the bootstrap credential no longer decrypts, so
177
- * a read that "fell back" would silently receive redacted placeholders and
178
- * the execution would run against junk secret values — strictly worse than
179
- * failing here with the real reason. The secret-delivery call sites let
180
- * this error fail the activity; opportunistic consumers that can genuinely
181
- * proceed without a scoped token (attachment credential, channel
182
- * discovery) catch it at the call site, where their degrade-to-empty
183
- * contract lives.
210
+ * 2. Any other runner-class credential is already scoped (a cloud
211
+ * sandbox/pool/connect token) skip; the exchange would rightly
212
+ * refuse it and the ambient credential decrypts on its own.
213
+ *
214
+ * 3. No runner-class credential at all (OSS/local, where the process
215
+ * token is absent or carries no token_type claim) attempt the
216
+ * exchange best-effort (oss#535): a current OSS server mints an
217
+ * execution-scoped token here, which is the ONLY way this runner can
218
+ * read decrypted secrets from its redact-by-default EC RPCs. A server
219
+ * that answers "not minted" (pre-oss#535 OSS, which also does not
220
+ * redact) or refuses the exchange (cloud refusing a non-runner
221
+ * credential — the legacy desktop degrade, which reads redacted today
222
+ * regardless) falls through to the tokenless read, preserving each
223
+ * old pairing's exact behavior.
184
224
  */
185
225
  acquireScopedRunnerToken(scope: RunnerScopedTokenScope): Promise<string | undefined>;
186
226
  /**
@@ -231,6 +271,23 @@ export declare class StigmerClient {
231
271
  updatePendingFileReviews?: boolean;
232
272
  pendingUpdateChildAgentExecutionId?: string;
233
273
  }): Promise<WorkflowExecution>;
274
+ /**
275
+ * Deliver a named signal to another workflow execution through the
276
+ * server's SendSignal lane (validate → phase gate → relay via the
277
+ * outer orchestrator). This is the ONLY sanctioned path for
278
+ * runner-originated signals: a direct Temporal client would bypass
279
+ * both the authorization boundary and the payload-encryption design
280
+ * (per-identity runner keys make sender-side encryption fail closed
281
+ * at receivers holding a different key — see oss#517).
282
+ *
283
+ * Deliberately sends no idempotency_key: the server's dedupe claim is
284
+ * not released when delivery fails (oss#442), so a key here would
285
+ * poison the exact retry it exists to protect — and emit envelope ids
286
+ * regenerate per activity attempt anyway. Revisit once oss#442 lands.
287
+ */
288
+ sendWorkflowSignal(executionId: string, signalName: string, payload: JsonObject | undefined, options?: {
289
+ timeoutMs?: number;
290
+ }): Promise<WorkflowExecution>;
234
291
  getWorkflowExecution(executionId: string): Promise<WorkflowExecution>;
235
292
  /**
236
293
  * Return the highest persisted event sequence_number for a workflow execution.