@stigmer/runner 3.10.0 → 3.11.1-dev.20260812192248
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.
- package/README.md +14 -1
- package/dist/.build-fingerprint +1 -1
- package/dist/activities/call-llm.js +9 -10
- package/dist/activities/call-llm.js.map +1 -1
- package/dist/activities/classify-tool-approvals.d.ts +2 -1
- package/dist/activities/classify-tool-approvals.js +28 -2
- package/dist/activities/classify-tool-approvals.js.map +1 -1
- package/dist/activities/discover-mcp-server.d.ts +39 -0
- package/dist/activities/discover-mcp-server.js +165 -28
- package/dist/activities/discover-mcp-server.js.map +1 -1
- package/dist/activities/emit-event.d.ts +14 -2
- package/dist/activities/emit-event.js +52 -17
- package/dist/activities/emit-event.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.d.ts +8 -0
- package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.js +1 -1
- package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.js.map +1 -1
- package/dist/activities/execute-cursor/approval-state.d.ts +28 -2
- package/dist/activities/execute-cursor/approval-state.js +7 -1
- package/dist/activities/execute-cursor/approval-state.js.map +1 -1
- package/dist/activities/execute-cursor/attachment-resolver.d.ts +14 -0
- package/dist/activities/execute-cursor/attachment-resolver.js +18 -4
- package/dist/activities/execute-cursor/attachment-resolver.js.map +1 -1
- package/dist/activities/execute-cursor/blueprint-resolver.d.ts +1 -9
- package/dist/activities/execute-cursor/blueprint-resolver.js +6 -22
- package/dist/activities/execute-cursor/blueprint-resolver.js.map +1 -1
- package/dist/activities/execute-cursor/env-resolver.js +3 -1
- package/dist/activities/execute-cursor/env-resolver.js.map +1 -1
- package/dist/activities/execute-cursor/error-classifier.d.ts +59 -3
- package/dist/activities/execute-cursor/error-classifier.js +115 -6
- package/dist/activities/execute-cursor/error-classifier.js.map +1 -1
- package/dist/activities/execute-cursor/extract-structured-output.d.ts +29 -0
- package/dist/activities/execute-cursor/extract-structured-output.js +58 -0
- package/dist/activities/execute-cursor/extract-structured-output.js.map +1 -0
- package/dist/activities/execute-cursor/hook-script.d.ts +14 -3
- package/dist/activities/execute-cursor/hook-script.js +72 -10
- package/dist/activities/execute-cursor/hook-script.js.map +1 -1
- package/dist/activities/execute-cursor/index.d.ts +51 -11
- package/dist/activities/execute-cursor/index.js +177 -93
- package/dist/activities/execute-cursor/index.js.map +1 -1
- package/dist/activities/execute-cursor/mcp-resolver.d.ts +24 -1
- package/dist/activities/execute-cursor/mcp-resolver.js +5 -2
- package/dist/activities/execute-cursor/mcp-resolver.js.map +1 -1
- package/dist/activities/execute-cursor/model-pricing-data.d.ts +2 -0
- package/dist/activities/execute-cursor/model-pricing-data.js +13 -3
- package/dist/activities/execute-cursor/model-pricing-data.js.map +1 -1
- package/dist/activities/execute-cursor/prompt-builder.d.ts +51 -4
- package/dist/activities/execute-cursor/prompt-builder.js +49 -7
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
- package/dist/activities/execute-cursor/turn-recovery.d.ts +52 -0
- package/dist/activities/execute-cursor/turn-recovery.js +193 -0
- package/dist/activities/execute-cursor/turn-recovery.js.map +1 -0
- package/dist/activities/execute-cursor/turn-stream.js +4 -1
- package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
- package/dist/activities/execute-deep-agent/attachment-injector.d.ts +18 -1
- package/dist/activities/execute-deep-agent/attachment-injector.js +68 -23
- package/dist/activities/execute-deep-agent/attachment-injector.js.map +1 -1
- package/dist/activities/execute-deep-agent/environment.js +3 -1
- package/dist/activities/execute-deep-agent/environment.js.map +1 -1
- package/dist/activities/execute-deep-agent/index.js +15 -0
- package/dist/activities/execute-deep-agent/index.js.map +1 -1
- package/dist/activities/execute-deep-agent/prompt-builder.d.ts +7 -7
- package/dist/activities/execute-deep-agent/prompt-builder.js +8 -2
- package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
- package/dist/activities/execute-deep-agent/setup.d.ts +10 -0
- package/dist/activities/execute-deep-agent/setup.js +65 -24
- package/dist/activities/execute-deep-agent/setup.js.map +1 -1
- package/dist/activities/execute-deep-agent/shell-env.d.ts +5 -1
- package/dist/activities/execute-deep-agent/shell-env.js +7 -9
- package/dist/activities/execute-deep-agent/shell-env.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +18 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.js +15 -2
- package/dist/activities/execute-deep-agent/subagent-transformer.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-wiring.d.ts +27 -6
- package/dist/activities/execute-deep-agent/subagent-wiring.js +26 -5
- package/dist/activities/execute-deep-agent/subagent-wiring.js.map +1 -1
- package/dist/activities/hydrate-workflow-execution.js +8 -3
- package/dist/activities/hydrate-workflow-execution.js.map +1 -1
- package/dist/activities/run-command.d.ts +5 -2
- package/dist/activities/run-command.js +22 -10
- package/dist/activities/run-command.js.map +1 -1
- package/dist/activities/run-env.d.ts +40 -0
- package/dist/activities/run-env.js +66 -0
- package/dist/activities/run-env.js.map +1 -0
- package/dist/activities/workflow-event-activities.d.ts +28 -10
- package/dist/activities/workflow-event-activities.js +87 -58
- package/dist/activities/workflow-event-activities.js.map +1 -1
- package/dist/bootstrap.js +5 -0
- package/dist/bootstrap.js.map +1 -1
- package/dist/claimcheck/payload-codec.js +21 -1
- package/dist/claimcheck/payload-codec.js.map +1 -1
- package/dist/client/stigmer-client.d.ts +83 -21
- package/dist/client/stigmer-client.js +106 -29
- package/dist/client/stigmer-client.js.map +1 -1
- package/dist/encryption/config.d.ts +64 -0
- package/dist/encryption/config.js +108 -0
- package/dist/encryption/config.js.map +1 -0
- package/dist/encryption/index.d.ts +3 -0
- package/dist/encryption/index.js +3 -0
- package/dist/encryption/index.js.map +1 -0
- package/dist/encryption/payload-codec.d.ts +41 -0
- package/dist/encryption/payload-codec.js +130 -0
- package/dist/encryption/payload-codec.js.map +1 -0
- package/dist/middleware/index.d.ts +3 -0
- package/dist/middleware/index.js +7 -0
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/path-normalization.d.ts +57 -0
- package/dist/middleware/path-normalization.js +109 -0
- package/dist/middleware/path-normalization.js.map +1 -0
- package/dist/middleware/types.d.ts +8 -0
- package/dist/payload-codecs.d.ts +17 -0
- package/dist/payload-codecs.js +42 -0
- package/dist/payload-codecs.js.map +1 -0
- package/dist/preflight.d.ts +31 -0
- package/dist/preflight.js +43 -0
- package/dist/preflight.js.map +1 -1
- package/dist/runner-manager.js +21 -17
- package/dist/runner-manager.js.map +1 -1
- package/dist/runner.js +11 -18
- package/dist/runner.js.map +1 -1
- package/dist/shared/approval-policy.d.ts +9 -3
- package/dist/shared/approval-policy.js +15 -6
- package/dist/shared/approval-policy.js.map +1 -1
- package/dist/shared/artifact-storage.d.ts +23 -1
- package/dist/shared/artifact-storage.js +51 -10
- package/dist/shared/artifact-storage.js.map +1 -1
- package/dist/shared/attachment-naming.d.ts +53 -0
- package/dist/shared/attachment-naming.js +59 -0
- package/dist/shared/attachment-naming.js.map +1 -0
- package/dist/shared/caller-identity.d.ts +23 -2
- package/dist/shared/caller-identity.js +36 -5
- package/dist/shared/caller-identity.js.map +1 -1
- package/dist/shared/channel-attachment.js +1 -0
- package/dist/shared/channel-attachment.js.map +1 -1
- package/dist/shared/checkpointer/http-saver.d.ts +26 -1
- package/dist/shared/checkpointer/http-saver.js +54 -8
- package/dist/shared/checkpointer/http-saver.js.map +1 -1
- package/dist/shared/conversation-attachment.js +1 -0
- package/dist/shared/conversation-attachment.js.map +1 -1
- package/dist/shared/conversation-catchup.d.ts +9 -2
- package/dist/shared/conversation-catchup.js +39 -6
- package/dist/shared/conversation-catchup.js.map +1 -1
- package/dist/shared/datastore-attachment.d.ts +50 -7
- package/dist/shared/datastore-attachment.js +93 -11
- package/dist/shared/datastore-attachment.js.map +1 -1
- package/dist/shared/grpc-retry.d.ts +5 -1
- package/dist/shared/grpc-retry.js +5 -1
- package/dist/shared/grpc-retry.js.map +1 -1
- package/dist/shared/http-retry.d.ts +85 -0
- package/dist/shared/http-retry.js +101 -0
- package/dist/shared/http-retry.js.map +1 -0
- package/dist/shared/llm-backend.d.ts +275 -0
- package/dist/shared/llm-backend.js +425 -0
- package/dist/shared/llm-backend.js.map +1 -0
- package/dist/shared/llm-proxy.d.ts +8 -0
- package/dist/shared/llm-proxy.js +15 -0
- package/dist/shared/llm-proxy.js.map +1 -1
- package/dist/shared/mcp-enabled-tools.d.ts +57 -0
- package/dist/shared/mcp-enabled-tools.js +86 -0
- package/dist/shared/mcp-enabled-tools.js.map +1 -0
- package/dist/shared/mcp-manager.d.ts +11 -5
- package/dist/shared/mcp-manager.js +47 -8
- package/dist/shared/mcp-manager.js.map +1 -1
- package/dist/shared/mcp-resolver.d.ts +39 -2
- package/dist/shared/mcp-resolver.js +38 -2
- package/dist/shared/mcp-resolver.js.map +1 -1
- package/dist/shared/mcp-schema-sanitizer.d.ts +70 -0
- package/dist/shared/mcp-schema-sanitizer.js +197 -0
- package/dist/shared/mcp-schema-sanitizer.js.map +1 -0
- package/dist/shared/model-client.d.ts +18 -5
- package/dist/shared/model-client.js +149 -18
- package/dist/shared/model-client.js.map +1 -1
- package/dist/shared/model-error.js +198 -5
- package/dist/shared/model-error.js.map +1 -1
- package/dist/shared/model-pricing-data.d.ts +2 -0
- package/dist/shared/model-pricing-data.js +13 -3
- package/dist/shared/model-pricing-data.js.map +1 -1
- package/dist/shared/model-registry.js +3 -2
- package/dist/shared/model-registry.js.map +1 -1
- package/dist/shared/plan-mode-permissions.d.ts +33 -0
- package/dist/shared/plan-mode-permissions.js +35 -0
- package/dist/shared/plan-mode-permissions.js.map +1 -0
- package/dist/shared/registry-endpoint.d.ts +20 -0
- package/dist/shared/registry-endpoint.js +25 -0
- package/dist/shared/registry-endpoint.js.map +1 -1
- package/dist/shared/runner-credential-keys.d.ts +24 -0
- package/dist/shared/runner-credential-keys.js +47 -0
- package/dist/shared/runner-credential-keys.js.map +1 -0
- package/dist/worker.d.ts +2 -1
- package/dist/worker.js +2 -4
- package/dist/worker.js.map +1 -1
- package/dist/workflow-engine/resolve.d.ts +19 -1
- package/dist/workflow-engine/resolve.js +37 -2
- package/dist/workflow-engine/resolve.js.map +1 -1
- package/dist/workflow-engine/types.d.ts +18 -0
- package/dist/workflow-engine/types.js.map +1 -1
- package/dist/workflows/call-agent-orchestrator.d.ts +9 -0
- package/dist/workflows/call-agent-orchestrator.js +1 -0
- package/dist/workflows/call-agent-orchestrator.js.map +1 -1
- package/dist/workflows/connect-mcp-server.js +9 -0
- package/dist/workflows/connect-mcp-server.js.map +1 -1
- package/dist/workflows/engine-core.js +23 -2
- package/dist/workflows/engine-core.js.map +1 -1
- package/dist/workflows/execute-from-execution.d.ts +1 -1
- package/dist/workflows/execute-from-execution.js +11 -1
- package/dist/workflows/execute-from-execution.js.map +1 -1
- package/dist/workflows/types.d.ts +8 -0
- package/package.json +9 -4
- package/src/__test-utils__/__tests__/vitest-global-setup.test.ts +37 -0
- package/src/__test-utils__/vitest-global-setup.ts +50 -0
- package/src/__tests__/bootstrap.test.ts +43 -0
- package/src/__tests__/claimcheck-codec.test.ts +36 -0
- package/src/__tests__/encryption-codec.test.ts +287 -0
- package/src/__tests__/fixtures/encrypted-payload-fixture.json +15 -0
- package/src/__tests__/history-encryption-e2e.test.ts +243 -0
- package/src/__tests__/preflight.test.ts +65 -2
- package/src/activities/__tests__/call-llm.test.ts +75 -0
- package/src/activities/__tests__/classify-tool-approvals.test.ts +117 -1
- package/src/activities/__tests__/discover-mcp-server.hang.test.ts +103 -0
- package/src/activities/__tests__/discover-mcp-server.test.ts +242 -1
- package/src/activities/__tests__/error-classifier.test.ts +94 -2
- package/src/activities/__tests__/run-command.test.ts +221 -0
- package/src/activities/__tests__/workflow-event-activities.test.ts +107 -8
- package/src/activities/call-llm.ts +9 -16
- package/src/activities/classify-tool-approvals.ts +34 -4
- package/src/activities/discover-mcp-server.ts +203 -31
- package/src/activities/emit-event.ts +65 -21
- package/src/activities/execute-cursor/__test-utils__/cursor-hook-harness.ts +9 -0
- package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +14 -0
- package/src/activities/execute-cursor/__tests__/attachment-resolver.test.ts +53 -0
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +151 -16
- package/src/activities/execute-cursor/__tests__/error-classifier-extraction.test.ts +208 -0
- package/src/activities/execute-cursor/__tests__/extract-structured-output.test.ts +120 -0
- package/src/activities/execute-cursor/__tests__/hook-script.test.ts +93 -0
- package/src/activities/execute-cursor/__tests__/mcp-resolver.test.ts +125 -0
- package/src/activities/execute-cursor/__tests__/model-pricing.test.ts +62 -1
- package/src/activities/execute-cursor/__tests__/prompt-builder-delegation.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/turn-recovery.test.ts +160 -0
- package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +13 -0
- package/src/activities/execute-cursor/approval-state.ts +30 -1
- package/src/activities/execute-cursor/attachment-resolver.ts +31 -3
- package/src/activities/execute-cursor/blueprint-resolver.ts +7 -27
- package/src/activities/execute-cursor/env-resolver.ts +3 -1
- package/src/activities/execute-cursor/error-classifier.ts +131 -7
- package/src/activities/execute-cursor/extract-structured-output.ts +72 -0
- package/src/activities/execute-cursor/hook-script.ts +74 -10
- package/src/activities/execute-cursor/index.ts +209 -109
- package/src/activities/execute-cursor/mcp-resolver.ts +36 -2
- package/src/activities/execute-cursor/model-pricing-data.ts +22 -3
- package/src/activities/execute-cursor/prompt-builder.ts +85 -9
- package/src/activities/execute-cursor/turn-recovery.ts +208 -0
- package/src/activities/execute-cursor/turn-stream.ts +5 -2
- package/src/activities/execute-deep-agent/__tests__/attachment-injector.test.ts +110 -8
- package/src/activities/execute-deep-agent/__tests__/datastore-degradation.test.ts +104 -0
- package/src/activities/execute-deep-agent/__tests__/hitl-reject.test.ts +2 -0
- package/src/activities/execute-deep-agent/__tests__/hitl-resume-approve-all.test.ts +1 -0
- package/src/activities/execute-deep-agent/__tests__/hitl-resume-history.test.ts +1 -0
- package/src/activities/execute-deep-agent/__tests__/plan-mode-path-normalization.test.ts +174 -0
- package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +34 -5
- package/src/activities/execute-deep-agent/__tests__/sequential-gate-resume.test.ts +1 -0
- package/src/activities/execute-deep-agent/__tests__/shell-env.test.ts +24 -10
- package/src/activities/execute-deep-agent/__tests__/subagent-plan-mode-permissions.test.ts +178 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +12 -7
- package/src/activities/execute-deep-agent/attachment-injector.ts +94 -30
- package/src/activities/execute-deep-agent/environment.ts +3 -1
- package/src/activities/execute-deep-agent/index.ts +20 -0
- package/src/activities/execute-deep-agent/prompt-builder.ts +20 -10
- package/src/activities/execute-deep-agent/setup.ts +85 -29
- package/src/activities/execute-deep-agent/shell-env.ts +8 -9
- package/src/activities/execute-deep-agent/subagent-transformer.ts +30 -2
- package/src/activities/execute-deep-agent/subagent-wiring.ts +39 -6
- package/src/activities/hydrate-workflow-execution.ts +8 -3
- package/src/activities/run-command.ts +25 -12
- package/src/activities/run-env.ts +79 -0
- package/src/activities/workflow-event-activities.ts +96 -69
- package/src/bootstrap.ts +5 -0
- package/src/claimcheck/payload-codec.ts +33 -1
- package/src/client/__tests__/stigmer-client.test.ts +110 -11
- package/src/client/stigmer-client.ts +150 -37
- package/src/encryption/config.ts +155 -0
- package/src/encryption/index.ts +3 -0
- package/src/encryption/payload-codec.ts +152 -0
- package/src/middleware/__tests__/path-normalization.test.ts +140 -0
- package/src/middleware/index.ts +8 -0
- package/src/middleware/path-normalization.ts +125 -0
- package/src/middleware/types.ts +11 -0
- package/src/payload-codecs.ts +62 -0
- package/src/preflight.ts +45 -0
- package/src/runner-manager.ts +26 -26
- package/src/runner.ts +12 -27
- package/src/shared/__tests__/approval-policy.test.ts +82 -39
- package/src/shared/__tests__/artifact-storage.test.ts +145 -2
- package/src/shared/__tests__/attachment-naming.test.ts +159 -0
- package/src/shared/__tests__/bedrock-adapter.test.ts +213 -0
- package/src/shared/__tests__/bedrock-seam.test.ts +390 -0
- package/src/shared/__tests__/caller-identity.test.ts +25 -0
- package/src/shared/__tests__/channel-attachment.test.ts +1 -1
- package/src/shared/__tests__/connect-backfill.test.ts +1 -0
- package/src/shared/__tests__/conversation-attachment.test.ts +1 -1
- package/src/shared/__tests__/conversation-catchup.test.ts +24 -0
- package/src/shared/__tests__/datastore-attachment.test.ts +129 -1
- package/src/shared/__tests__/foundry-adapter.test.ts +276 -0
- package/src/shared/__tests__/foundry-seam.test.ts +482 -0
- package/src/shared/__tests__/http-retry.test.ts +68 -0
- package/src/shared/__tests__/llm-backend.test.ts +616 -0
- package/src/shared/__tests__/mcp-enabled-tools.test.ts +86 -0
- package/src/shared/__tests__/mcp-manager.test.ts +137 -15
- package/src/shared/__tests__/mcp-resolver.test.ts +146 -3
- package/src/shared/__tests__/mcp-schema-sanitizer.test.ts +267 -0
- package/src/shared/__tests__/model-client.test.ts +200 -0
- package/src/shared/__tests__/model-error.test.ts +289 -1
- package/src/shared/__tests__/model-pricing.test.ts +62 -2
- package/src/shared/__tests__/model-registry.test.ts +22 -0
- package/src/shared/__tests__/synthesized-attachment.test.ts +1 -0
- package/src/shared/__tests__/vertex-adapter.test.ts +169 -0
- package/src/shared/__tests__/vertex-seam.test.ts +295 -0
- package/src/shared/approval-policy.ts +14 -7
- package/src/shared/artifact-storage.ts +75 -10
- package/src/shared/attachment-naming.ts +78 -0
- package/src/shared/caller-identity.ts +40 -5
- package/src/shared/channel-attachment.ts +1 -0
- package/src/shared/checkpointer/__tests__/http-saver.test.ts +196 -1
- package/src/shared/checkpointer/http-saver.ts +71 -8
- package/src/shared/conversation-attachment.ts +1 -0
- package/src/shared/conversation-catchup.ts +39 -6
- package/src/shared/datastore-attachment.ts +106 -11
- package/src/shared/grpc-retry.ts +5 -1
- package/src/shared/http-retry.ts +139 -0
- package/src/shared/llm-backend.ts +544 -0
- package/src/shared/llm-proxy.ts +15 -0
- package/src/shared/mcp-enabled-tools.ts +105 -0
- package/src/shared/mcp-manager.ts +56 -8
- package/src/shared/mcp-resolver.ts +73 -2
- package/src/shared/mcp-schema-sanitizer.ts +224 -0
- package/src/shared/model-client.ts +179 -19
- package/src/shared/model-error.ts +222 -4
- package/src/shared/model-pricing-data.ts +22 -3
- package/src/shared/model-registry.ts +7 -2
- package/src/shared/plan-mode-permissions.ts +37 -0
- package/src/shared/registry-endpoint.ts +27 -0
- package/src/shared/runner-credential-keys.ts +46 -0
- package/src/worker.ts +4 -5
- package/src/workflow-engine/__tests__/tasks/emit-event.test.ts +127 -49
- package/src/workflow-engine/resolve.ts +48 -2
- package/src/workflow-engine/types.ts +18 -0
- package/src/workflows/__tests__/connect-mcp-server.test.ts +25 -0
- package/src/workflows/__tests__/execute-serverless-workflow.test.ts +68 -2
- package/src/workflows/call-agent-orchestrator.ts +10 -0
- package/src/workflows/connect-mcp-server.ts +9 -0
- package/src/workflows/engine-core.ts +23 -2
- package/src/workflows/execute-from-execution.ts +12 -2
- package/src/workflows/types.ts +8 -0
- package/dist/activities/execute-cursor/mcp-config.d.ts +0 -30
- package/dist/activities/execute-cursor/mcp-config.js +0 -39
- package/dist/activities/execute-cursor/mcp-config.js.map +0 -1
- package/src/activities/execute-cursor/mcp-config.ts +0 -66
|
@@ -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)
|
|
@@ -9,11 +15,16 @@
|
|
|
9
15
|
* bypassed) — installed only when the parent itself is gated
|
|
10
16
|
* (`approvalGate` present; absent under auto-approve-all)
|
|
11
17
|
* - Shared cost cap view (parent's budget, no reset on sub-agent start)
|
|
18
|
+
* - Error hints (issue #255): a thrown tool error becomes a recoverable
|
|
19
|
+
* ToolMessage exactly as on the parent. Without it, any tool throw — a
|
|
20
|
+
* plan-mode permission denial, an MCP hiccup — propagated out of the
|
|
21
|
+
* sub-agent graph and killed the whole delegated task, losing all its
|
|
22
|
+
* accumulated work, where the parent's identical error is one failed
|
|
23
|
+
* tool round the model adapts to.
|
|
12
24
|
*
|
|
13
25
|
* The sub-agent middleware stack does NOT include:
|
|
14
26
|
* - Graceful stop (parent handles STOP signal propagation)
|
|
15
27
|
* - OTel spans (parent's OTel context propagates automatically)
|
|
16
|
-
* - Error hints (applied at tool level, not sub-agent level)
|
|
17
28
|
*
|
|
18
29
|
* Approval-gate note: the gate is what *creates* the LangGraph `interrupt()`.
|
|
19
30
|
* A sub-agent's interrupt does surface at the parent checkpoint and resumes
|
|
@@ -21,23 +32,32 @@
|
|
|
21
32
|
* the gate runs inside the sub-agent in the first place — omitting it here was
|
|
22
33
|
* the live HITL bypass this wiring closes.
|
|
23
34
|
*/
|
|
35
|
+
import { createPathNormalizationMiddleware } from "../../middleware/path-normalization.js";
|
|
24
36
|
import { createLoopDetectionMiddleware } from "../../middleware/loop-detection.js";
|
|
25
37
|
import { createToolTruncationMiddleware } from "../../middleware/tool-truncation.js";
|
|
26
38
|
import { createExecutionBudgetMiddleware } from "../../middleware/execution-budget.js";
|
|
27
39
|
import { createApprovalGateMiddleware, } from "../../middleware/approval-gate.js";
|
|
40
|
+
import { createErrorHintsMiddleware } from "../../middleware/error-hints.js";
|
|
28
41
|
const SUB_AGENT_ADVISORY_INTERVAL = 30;
|
|
29
42
|
const SUB_AGENT_MAX_ADVISORIES = 4;
|
|
30
43
|
/**
|
|
31
44
|
* Build the middleware stack for a single sub-agent.
|
|
32
45
|
*
|
|
33
46
|
* Returns an ordered array mirroring the parent composition:
|
|
34
|
-
* loop detection → execution budget (periodic) →
|
|
35
|
-
* [approval gate] → cost cap view
|
|
36
|
-
*
|
|
37
|
-
*
|
|
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
|
|
51
|
+
* cost-cap view so an approval pause happens before budget accounting, and
|
|
52
|
+
* error hints come after the gate — both matching the parent order
|
|
53
|
+
* (…→ truncation → graceful-stop → approval gate → cost cap → error hints …),
|
|
54
|
+
* which keeps the gate's HITL interrupt outside the hints' try/catch.
|
|
38
55
|
*/
|
|
39
56
|
export function buildSubAgentMiddleware(options = {}) {
|
|
40
57
|
const stack = [];
|
|
58
|
+
if (options.pathNormalization) {
|
|
59
|
+
stack.push(createPathNormalizationMiddleware(options.pathNormalization));
|
|
60
|
+
}
|
|
41
61
|
stack.push(createLoopDetectionMiddleware({ enabled: true }));
|
|
42
62
|
stack.push(createExecutionBudgetMiddleware({
|
|
43
63
|
warningInterval: SUB_AGENT_ADVISORY_INTERVAL,
|
|
@@ -61,6 +81,7 @@ export function buildSubAgentMiddleware(options = {}) {
|
|
|
61
81
|
if (options.costCap) {
|
|
62
82
|
stack.push(options.costCap.forSubAgent());
|
|
63
83
|
}
|
|
84
|
+
stack.push(createErrorHintsMiddleware());
|
|
64
85
|
return stack;
|
|
65
86
|
}
|
|
66
87
|
//# sourceMappingURL=subagent-wiring.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-wiring.js","sourceRoot":"","sources":["../../../src/activities/execute-deep-agent/subagent-wiring.ts"],"names":[],"mappings":"AAAA
|
|
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,9 +175,14 @@ function parseWorkflowYaml(yaml, workflowId) {
|
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
async function fetchAndFlattenEnv(client, executionId) {
|
|
178
|
-
//
|
|
179
|
-
//
|
|
180
|
-
//
|
|
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.
|
|
181
186
|
const scopedToken = await client.acquireScopedRunnerToken({
|
|
182
187
|
workflowExecutionId: executionId,
|
|
183
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":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,yEAAyE,CAAC;AAW1G,MAAM,UAAU,+BAA+B,CAAC,MAAc;IAC5D,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC,sBAAsB;QACvC,KAAK,EAAE,MAAM,CAAC,YAAY;QAC1B,QAAQ,EAAE,MAAM,CAAC,eAAe;QAChC,cAAc,EAAE,MAAM,CAAC,qBAAqB;KAC7C,CAAC,CAAC;IAEH,OAAO;QACL,wBAAwB,EAAE,CAAC,KAAmB,EAA2C,EAAE,CACzF,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAmB,EACnB,MAAqB;IAErB,MAAM,EAAE,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAE1E,kEAAkE;IAClE,MAAM,iBAAiB,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC7E,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,EAAE,cAAc,IAAI,EAAE,CAAC;IACpE,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAElE,mFAAmF;IACnF,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAChD,MAAM,EAAE,WAAW,EAAE,oBAAoB,CAC1C,CAAC;IAEF,oFAAoF;IACpF,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;IAE9E,mCAAmC;IACnC,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IAE1D,4CAA4C;IAC5C,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE3D,6CAA6C;IAC7C,MAAM,cAAc,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAE3D,OAAO;QACL,KAAK;QACL,cAAc;QACd,GAAG;QACH,QAAQ,EAAE;YACR,YAAY;YACZ,WAAW,EAAE,kBAAkB;YAC/B,oBAAoB;YACpB,MAAM;SACP;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,MAAqB,EACrB,WAAmB;IAEnB,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,IAAI,GAAI,GAAkC,EAAE,IAAI,CAAC;QACvD,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/D,MAAM,kBAAkB,CAAC,YAAY,CACnC,sBAAsB,WAAW,aAAa,EAC9C,8BAA8B,CAC/B,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAqB,EACrB,UAAkB,EAClB,kBAA0B;IAE1B,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,kBAAkB,CAAC,YAAY,CACnC,iFAAiF,EACjF,4BAA4B,CAC7B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;QAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,kBAAkB,CAAC,YAAY,CACnC,qBAAqB,kBAAkB,8BAA8B,EACrE,2BAA2B,CAC5B,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,GAAG,YAAY,kBAAkB;YAAE,MAAM,GAAG,CAAC;QACjD,MAAM,IAAI,GAAI,GAAkC,EAAE,IAAI,CAAC;QACvD,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/D,MAAM,kBAAkB,CAAC,YAAY,CACnC,qBAAqB,kBAAkB,aAAa,EACpD,6BAA6B,CAC9B,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,iBAAiB,CAC9B,MAAqB,EACrB,UAAkB,EAClB,WAA+B;IAE/B,yEAAyE;IACzE,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAC9E,IAAI,YAAY,EAAE,aAAa,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CACT,8DAA8D,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAC5F,CAAC;gBACF,OAAO,YAAY,CAAC,aAAa,CAAC;YACpC,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,iEAAiE;YACjE,wEAAwE;YACxE,2DAA2D;YAC3D,OAAO,CAAC,IAAI,CACV,8CAA8C,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM;gBAC5E,uCAAuC,EACvC,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,OAAO,gCAAgC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,gCAAgC,CAC7C,MAAqB,EACrB,UAAkB;IAElB,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,IAAI,GAAI,GAAkC,EAAE,IAAI,CAAC;QACvD,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/D,MAAM,kBAAkB,CAAC,YAAY,CACnC,aAAa,UAAU,aAAa,EACpC,oBAAoB,CACrB,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;IACjE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,kBAAkB,CAAC,YAAY,CACnC,aAAa,UAAU,sDAAsD;YAC7E,8CAA8C,EAC9C,oBAAoB,CACrB,CAAC;IACJ,CAAC;IAED,QAAQ,UAAU,CAAC,KAAK,EAAE,CAAC;QACzB,KAAK,eAAe,CAAC,KAAK;YACxB,MAAM;QACR,KAAK,eAAe,CAAC,OAAO;YAC1B,MAAM,kBAAkB,CAAC,SAAS,CAChC,aAAa,UAAU,8CAA8C,EACrE,oBAAoB,CACrB,CAAC;QACJ,KAAK,eAAe,CAAC,OAAO;YAC1B,MAAM,kBAAkB,CAAC,YAAY,CACnC,aAAa,UAAU,wBAAwB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC7E,oBAAoB,CACrB,CAAC;QACJ,KAAK,eAAe,CAAC,MAAM;YACzB,MAAM,kBAAkB,CAAC,YAAY,CACnC,aAAa,UAAU,4CAA4C;gBACnE,qCAAqC,EACrC,mBAAmB,CACpB,CAAC;QACJ;YACE,MAAM,kBAAkB,CAAC,YAAY,CACnC,aAAa,UAAU,sCAAsC,UAAU,CAAC,KAAK,EAAE,EAC/E,0BAA0B,CAC3B,CAAC;IACN,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,kBAAkB,CAAC,YAAY,CACnC,aAAa,UAAU,gDAAgD;YACvE,iEAAiE;YACjE,wEAAwE,EACxE,YAAY,CACb,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,UAAkB;IACzD,IAAI,CAAC;QACH,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,kBAAkB,CAAC,YAAY,CACnC,+DAA+D,UAAU,MAAM,OAAO,EAAE,EACxF,kBAAkB,CACnB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,MAAqB,EACrB,WAAmB;IAEnB,uEAAuE;IACvE,uEAAuE;IACvE,oEAAoE;IACpE,uEAAuE;IACvE,mEAAmE;IACnE,yEAAyE;IACzE,0EAA0E;IAC1E,+DAA+D;IAC/D,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC;QACxD,mBAAmB,EAAE,WAAW;KACjC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACpF,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,iEAAiE;QACjE,uCAAuC;QACvC,MAAM,IAAI,GAAI,GAAkC,EAAE,IAAI,CAAC;QACvD,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/D,OAAO,CAAC,GAAG,CACT,qDAAqD,WAAW,KAAK;gBACrE,mCAAmC,CACpC,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IAChC,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CACT,6CAA6C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CACvE,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,cAAsB;IACjD,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -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
|
-
*
|
|
9
|
-
*
|
|
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
|
-
*
|
|
9
|
-
*
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"run-command.js","sourceRoot":"","sources":["../../src/activities/run-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,KAAK,CAAC,SAAS,CAAC,MAAwB;YACtC,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC;gBACH,OAAO,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;oBAAS,CAAC;gBACT,EAAE,CAAC,IAAI,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,MAAwB;YACrC,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC;gBACH,OAAO,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;oBAAS,CAAC;gBACT,EAAE,CAAC,IAAI,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,MAAwB;IACnD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,kBAAkB,CAAC,YAAY,CAAC,yCAAyC,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC;IAClC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAK,CAAC;IAC1B,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,GAAG,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9C,MAAM,WAAW,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3D,IAAI,OAA2B,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC;QACjD,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAEnD,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,EAAE;YACzE,GAAG;YACH,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC5B,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,kBAAkB,CAAC,YAAY,CACnC,sCAAsC,GAAG,CAAC,IAAI,GAAG,EACjD,yBAAyB,EACzB,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAC3D,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAwB;IAClD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,kBAAkB,CAAC,YAAY,CAAC,uCAAuC,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;IAChC,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;QACjC,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAChC,CAAC,CAAC,OAAO,CAAC;IACZ,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE;YAC9C,GAAG;YACH,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC5B,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,kBAAkB,CAAC,YAAY,CACnC,mCAAmC,GAAG,CAAC,IAAI,GAAG,EAC9C,wBAAwB,EACxB,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAC3D,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,MAAwB;IAC5C,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,GAAG,YAAY,iCAAiC,EAAE,CAAC;YACrD,MAAM,kBAAkB,CAAC,YAAY,CACnC,GAAG,CAAC,OAAO,EACX,gCAAgC,EAChC,EAAE,QAAQ,EAAE,GAAG,CAAC,YAAY,EAAE,CAC/B,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAa;IAClC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,CAAC;AAQD,SAAS,WAAW,CAAC,GAAY;IAC/B,OAAO,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,CAAC;AAC/C,CAAC"}
|
|
@@ -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"}
|
|
@@ -3,8 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Converts plain event descriptors (safe for the Temporal deterministic
|
|
5
5
|
* sandbox) into WorkflowExecutionEvent proto objects and sends them
|
|
6
|
-
* alongside a status update via gRPC.
|
|
7
|
-
*
|
|
6
|
+
* alongside a status update via gRPC. Failures propagate so the local
|
|
7
|
+
* activity's retry policy fires — safe because sequence numbers are
|
|
8
|
+
* workflow-assigned (stable across attempts) and the store skips
|
|
9
|
+
* already-persisted sequences, making retries idempotent. The workflow's
|
|
10
|
+
* emit wrappers catch after retries are exhausted; event emission never
|
|
11
|
+
* fails a run.
|
|
8
12
|
*
|
|
9
13
|
* Registered as proxyLocalActivities in engine-core.ts so the workflow
|
|
10
14
|
* sandbox can emit events at task boundaries and approval gates.
|
|
@@ -14,21 +18,35 @@ import type { WorkflowEventDescriptor } from "../workflow-engine/types.js";
|
|
|
14
18
|
import type { TaskStatusEntry } from "../workflow-engine/task-status-accumulator.js";
|
|
15
19
|
import type { RecoveryTaskData } from "../workflow-engine/recovery.js";
|
|
16
20
|
/**
|
|
17
|
-
*
|
|
21
|
+
* Return the persisted event-log high-water mark for the execution, and
|
|
22
|
+
* seed the legacy process-global counter from it.
|
|
18
23
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
24
|
+
* The workflow seeds its own sequence counter from the returned value
|
|
25
|
+
* (patched path); the legacy global seed remains for pre-patch replays,
|
|
26
|
+
* whose emit path still assigns sequences here in the activity.
|
|
21
27
|
*
|
|
22
|
-
* On
|
|
23
|
-
*
|
|
24
|
-
*
|
|
28
|
+
* On first run (no prior events) returns 0, so the first event gets
|
|
29
|
+
* sequence_number = 1. On recovery (events already persisted from a
|
|
30
|
+
* failed run) returns the highest persisted sequence_number, so new
|
|
31
|
+
* events continue from N+1.
|
|
25
32
|
*
|
|
26
33
|
* When executionId is empty (direct executeServerlessWorkflow without a
|
|
27
|
-
* persisted execution),
|
|
34
|
+
* persisted execution), returns 0 as a safe fallback.
|
|
35
|
+
*
|
|
36
|
+
* Returns a plain number — the value crosses back into the workflow
|
|
37
|
+
* through Temporal's JSON payload converter, which cannot carry BigInt.
|
|
28
38
|
*/
|
|
29
|
-
export declare function initSequenceFromEventLog(executionId: string): Promise<
|
|
39
|
+
export declare function initSequenceFromEventLog(executionId: string): Promise<number>;
|
|
30
40
|
/** @internal Exported for unit testing only. */
|
|
31
41
|
export declare function toProtoEvent(desc: WorkflowEventDescriptor): WorkflowExecutionEvent;
|
|
42
|
+
/**
|
|
43
|
+
* Emit workflow events (with the accompanying status snapshot) to the
|
|
44
|
+
* server. Errors propagate so the local activity retry policy fires;
|
|
45
|
+
* retries are idempotent because workflow-assigned sequence numbers are
|
|
46
|
+
* stable across attempts and the store skips already-persisted ones. The
|
|
47
|
+
* workflow-side emit wrappers absorb the failure after retries are
|
|
48
|
+
* exhausted, so a broken timeline write never fails the run.
|
|
49
|
+
*/
|
|
32
50
|
export declare function emitWorkflowEvents(executionId: string, events: WorkflowEventDescriptor[], taskStatuses?: TaskStatusEntry[]): Promise<void>;
|
|
33
51
|
/**
|
|
34
52
|
* Loads recovery context data from the previous run's status snapshot.
|
|
@@ -3,8 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Converts plain event descriptors (safe for the Temporal deterministic
|
|
5
5
|
* sandbox) into WorkflowExecutionEvent proto objects and sends them
|
|
6
|
-
* alongside a status update via gRPC.
|
|
7
|
-
*
|
|
6
|
+
* alongside a status update via gRPC. Failures propagate so the local
|
|
7
|
+
* activity's retry policy fires — safe because sequence numbers are
|
|
8
|
+
* workflow-assigned (stable across attempts) and the store skips
|
|
9
|
+
* already-persisted sequences, making retries idempotent. The workflow's
|
|
10
|
+
* emit wrappers catch after retries are exhausted; event emission never
|
|
11
|
+
* fails a run.
|
|
8
12
|
*
|
|
9
13
|
* Registered as proxyLocalActivities in engine-core.ts so the workflow
|
|
10
14
|
* sandbox can emit events at task boundaries and approval gates.
|
|
@@ -110,38 +114,60 @@ function buildClient() {
|
|
|
110
114
|
token: config.stigmerToken,
|
|
111
115
|
});
|
|
112
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* LEGACY sequence assignment — only for descriptors that arrive without a
|
|
119
|
+
* workflow-assigned `sequenceNumber`, i.e. replays of histories recorded
|
|
120
|
+
* before the "workflow-assigned-event-sequences" patch (see
|
|
121
|
+
* engine-core.ts). This counter is process-global: it is shared across
|
|
122
|
+
* every execution on the worker and resets on worker restart, which is
|
|
123
|
+
* the root cause of oss#308's silent event loss. Deliberately NOT fixed —
|
|
124
|
+
* pre-patch executions keep their old (flawed) behavior for the
|
|
125
|
+
* migration window. Delete together with the patch gate once pre-patch
|
|
126
|
+
* executions have drained.
|
|
127
|
+
*/
|
|
113
128
|
let sequenceCounter = 0;
|
|
114
129
|
function nextSequence() {
|
|
115
130
|
sequenceCounter += 1;
|
|
116
131
|
return BigInt(sequenceCounter);
|
|
117
132
|
}
|
|
118
133
|
/**
|
|
119
|
-
*
|
|
134
|
+
* Return the persisted event-log high-water mark for the execution, and
|
|
135
|
+
* seed the legacy process-global counter from it.
|
|
120
136
|
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
137
|
+
* The workflow seeds its own sequence counter from the returned value
|
|
138
|
+
* (patched path); the legacy global seed remains for pre-patch replays,
|
|
139
|
+
* whose emit path still assigns sequences here in the activity.
|
|
123
140
|
*
|
|
124
|
-
* On
|
|
125
|
-
*
|
|
126
|
-
*
|
|
141
|
+
* On first run (no prior events) returns 0, so the first event gets
|
|
142
|
+
* sequence_number = 1. On recovery (events already persisted from a
|
|
143
|
+
* failed run) returns the highest persisted sequence_number, so new
|
|
144
|
+
* events continue from N+1.
|
|
127
145
|
*
|
|
128
146
|
* When executionId is empty (direct executeServerlessWorkflow without a
|
|
129
|
-
* persisted execution),
|
|
147
|
+
* persisted execution), returns 0 as a safe fallback.
|
|
148
|
+
*
|
|
149
|
+
* Returns a plain number — the value crosses back into the workflow
|
|
150
|
+
* through Temporal's JSON payload converter, which cannot carry BigInt.
|
|
130
151
|
*/
|
|
131
152
|
export async function initSequenceFromEventLog(executionId) {
|
|
132
153
|
if (!executionId) {
|
|
133
154
|
sequenceCounter = 0;
|
|
134
|
-
return;
|
|
155
|
+
return 0;
|
|
135
156
|
}
|
|
136
157
|
const client = buildClient();
|
|
137
158
|
const highWaterMark = await client.getEventLogHighWaterMark(executionId);
|
|
138
159
|
sequenceCounter = Number(highWaterMark);
|
|
160
|
+
return sequenceCounter;
|
|
139
161
|
}
|
|
140
162
|
/** @internal Exported for unit testing only. */
|
|
141
163
|
export function toProtoEvent(desc) {
|
|
142
164
|
const base = create(WorkflowExecutionEventSchema, {
|
|
143
165
|
eventId: crypto.randomUUID(),
|
|
144
|
-
|
|
166
|
+
// Workflow-assigned sequence when present (stable across activity
|
|
167
|
+
// retries); legacy activity-side assignment only for pre-patch replays.
|
|
168
|
+
sequenceNumber: desc.sequenceNumber !== undefined
|
|
169
|
+
? BigInt(desc.sequenceNumber)
|
|
170
|
+
: nextSequence(),
|
|
145
171
|
occurredAt: desc.occurredAt,
|
|
146
172
|
taskName: desc.taskName ?? "",
|
|
147
173
|
});
|
|
@@ -331,58 +357,61 @@ export function toProtoEvent(desc) {
|
|
|
331
357
|
}
|
|
332
358
|
return base;
|
|
333
359
|
}
|
|
360
|
+
/**
|
|
361
|
+
* Emit workflow events (with the accompanying status snapshot) to the
|
|
362
|
+
* server. Errors propagate so the local activity retry policy fires;
|
|
363
|
+
* retries are idempotent because workflow-assigned sequence numbers are
|
|
364
|
+
* stable across attempts and the store skips already-persisted ones. The
|
|
365
|
+
* workflow-side emit wrappers absorb the failure after retries are
|
|
366
|
+
* exhausted, so a broken timeline write never fails the run.
|
|
367
|
+
*/
|
|
334
368
|
export async function emitWorkflowEvents(executionId, events, taskStatuses) {
|
|
335
369
|
if (!executionId || events.length === 0)
|
|
336
370
|
return;
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
statusFields.startedAt = startedEvent.occurredAt;
|
|
363
|
-
}
|
|
364
|
-
if (completedEvent && completedEvent.type === "execution_completed") {
|
|
365
|
-
statusFields.phase = ExecutionPhase.EXECUTION_COMPLETED;
|
|
366
|
-
statusFields.completedAt = completedEvent.occurredAt;
|
|
367
|
-
statusFields.totalCostMicros = BigInt(completedEvent.totalCostMicros);
|
|
368
|
-
statusFields.totalInputTokens = BigInt(completedEvent.totalInputTokens ?? 0);
|
|
369
|
-
statusFields.totalOutputTokens = BigInt(completedEvent.totalOutputTokens ?? 0);
|
|
370
|
-
}
|
|
371
|
-
if (failedEvent && failedEvent.type === "execution_failed") {
|
|
372
|
-
statusFields.phase = ExecutionPhase.EXECUTION_FAILED;
|
|
373
|
-
statusFields.completedAt = failedEvent.occurredAt;
|
|
374
|
-
statusFields.error = failedEvent.error;
|
|
375
|
-
}
|
|
376
|
-
const input = create(WorkflowExecutionUpdateStatusInputSchema, {
|
|
377
|
-
executionId,
|
|
378
|
-
status: create(WorkflowExecutionStatusSchema, statusFields),
|
|
379
|
-
events: protoEvents,
|
|
380
|
-
});
|
|
381
|
-
await client.workflowExecutionCommand.updateStatus(input);
|
|
371
|
+
const client = buildClient();
|
|
372
|
+
const protoEvents = events.map(toProtoEvent);
|
|
373
|
+
const protoTasks = (taskStatuses ?? []).map(ts => create(WorkflowTaskSchema, {
|
|
374
|
+
taskId: ts.taskId ?? "",
|
|
375
|
+
taskName: ts.taskName,
|
|
376
|
+
taskType: TASK_KIND_TO_TYPE_MAP[ts.taskKind] ?? WorkflowTaskType.WORKFLOW_TASK_TYPE_UNSPECIFIED,
|
|
377
|
+
status: TASK_STATUS_MAP[ts.status],
|
|
378
|
+
startedAt: ts.startedAt ?? "",
|
|
379
|
+
completedAt: ts.completedAt ?? "",
|
|
380
|
+
error: ts.error ?? "",
|
|
381
|
+
input: toJsonObject(ts.input),
|
|
382
|
+
output: toJsonObject(ts.output),
|
|
383
|
+
metadata: toJsonObject(ts.metadata),
|
|
384
|
+
costMicros: BigInt(ts.costMicros ?? 0),
|
|
385
|
+
inputTokens: BigInt(ts.inputTokens ?? 0),
|
|
386
|
+
outputTokens: BigInt(ts.outputTokens ?? 0),
|
|
387
|
+
uiHint: ts.uiHint ?? "",
|
|
388
|
+
}));
|
|
389
|
+
const startedEvent = events.find(e => e.type === "execution_started");
|
|
390
|
+
const completedEvent = events.find(e => e.type === "execution_completed");
|
|
391
|
+
const failedEvent = events.find(e => e.type === "execution_failed");
|
|
392
|
+
const statusFields = { tasks: protoTasks };
|
|
393
|
+
if (startedEvent) {
|
|
394
|
+
statusFields.phase = ExecutionPhase.EXECUTION_IN_PROGRESS;
|
|
395
|
+
statusFields.startedAt = startedEvent.occurredAt;
|
|
382
396
|
}
|
|
383
|
-
|
|
384
|
-
|
|
397
|
+
if (completedEvent && completedEvent.type === "execution_completed") {
|
|
398
|
+
statusFields.phase = ExecutionPhase.EXECUTION_COMPLETED;
|
|
399
|
+
statusFields.completedAt = completedEvent.occurredAt;
|
|
400
|
+
statusFields.totalCostMicros = BigInt(completedEvent.totalCostMicros);
|
|
401
|
+
statusFields.totalInputTokens = BigInt(completedEvent.totalInputTokens ?? 0);
|
|
402
|
+
statusFields.totalOutputTokens = BigInt(completedEvent.totalOutputTokens ?? 0);
|
|
385
403
|
}
|
|
404
|
+
if (failedEvent && failedEvent.type === "execution_failed") {
|
|
405
|
+
statusFields.phase = ExecutionPhase.EXECUTION_FAILED;
|
|
406
|
+
statusFields.completedAt = failedEvent.occurredAt;
|
|
407
|
+
statusFields.error = failedEvent.error;
|
|
408
|
+
}
|
|
409
|
+
const input = create(WorkflowExecutionUpdateStatusInputSchema, {
|
|
410
|
+
executionId,
|
|
411
|
+
status: create(WorkflowExecutionStatusSchema, statusFields),
|
|
412
|
+
events: protoEvents,
|
|
413
|
+
});
|
|
414
|
+
await client.workflowExecutionCommand.updateStatus(input);
|
|
386
415
|
}
|
|
387
416
|
const PROTO_STATUS_TO_STRING = {
|
|
388
417
|
[WorkflowTaskStatus.WORKFLOW_TASK_IN_PROGRESS]: "started",
|