@relayflows/sdk 2.0.9 → 2.0.11
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/dist/adapters/base.d.ts +46 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +15 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/claude.d.ts +5 -0
- package/dist/adapters/claude.d.ts.map +1 -0
- package/dist/adapters/claude.js +44 -0
- package/dist/adapters/claude.js.map +1 -0
- package/dist/adapters/codex.d.ts +5 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +45 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/index.d.ts +14 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +29 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/wrapper.d.ts +12 -0
- package/dist/adapters/wrapper.d.ts.map +1 -0
- package/dist/adapters/wrapper.js +31 -0
- package/dist/adapters/wrapper.js.map +1 -0
- package/dist/agent-relay-receipt.d.ts +24 -0
- package/dist/agent-relay-receipt.d.ts.map +1 -0
- package/dist/agent-relay-receipt.js +66 -0
- package/dist/agent-relay-receipt.js.map +1 -0
- package/dist/agent-relay-state.d.ts +18 -0
- package/dist/agent-relay-state.d.ts.map +1 -0
- package/dist/agent-relay-state.js +58 -0
- package/dist/agent-relay-state.js.map +1 -0
- package/dist/agent-relay-transport.d.ts +31 -0
- package/dist/agent-relay-transport.d.ts.map +1 -0
- package/dist/agent-relay-transport.js +199 -0
- package/dist/agent-relay-transport.js.map +1 -0
- package/dist/authored-budget.d.ts +13 -0
- package/dist/authored-budget.d.ts.map +1 -0
- package/dist/authored-budget.js +78 -0
- package/dist/authored-budget.js.map +1 -0
- package/dist/authored-flow-error.d.ts +2 -21
- package/dist/authored-flow-error.d.ts.map +1 -1
- package/dist/authored-flow-error.js +1 -12
- package/dist/authored-flow-error.js.map +1 -1
- package/dist/authored-flow-executor.d.ts +13 -7
- package/dist/authored-flow-executor.d.ts.map +1 -1
- package/dist/authored-flow-executor.js +116 -235
- package/dist/authored-flow-executor.js.map +1 -1
- package/dist/authored-flow-loader.d.ts +10 -1
- package/dist/authored-flow-loader.d.ts.map +1 -1
- package/dist/authored-flow-loader.js +56 -3
- package/dist/authored-flow-loader.js.map +1 -1
- package/dist/authored-flow-operation.d.ts +9 -1
- package/dist/authored-flow-operation.d.ts.map +1 -1
- package/dist/authored-flow-operation.js +35 -4
- package/dist/authored-flow-operation.js.map +1 -1
- package/dist/authored-helper-effect.d.ts +12 -0
- package/dist/authored-helper-effect.d.ts.map +1 -0
- package/dist/authored-helper-effect.js +144 -0
- package/dist/authored-helper-effect.js.map +1 -0
- package/dist/authored-mcp.d.ts +17 -0
- package/dist/authored-mcp.d.ts.map +1 -0
- package/dist/authored-mcp.js +171 -0
- package/dist/authored-mcp.js.map +1 -0
- package/dist/authored-memory.d.ts +7 -0
- package/dist/authored-memory.d.ts.map +1 -0
- package/dist/authored-memory.js +60 -0
- package/dist/authored-memory.js.map +1 -0
- package/dist/authored-plugin-effect.d.ts +16 -0
- package/dist/authored-plugin-effect.d.ts.map +1 -0
- package/dist/authored-plugin-effect.js +163 -0
- package/dist/authored-plugin-effect.js.map +1 -0
- package/dist/authored-step-output.d.ts +23 -0
- package/dist/authored-step-output.d.ts.map +1 -0
- package/dist/authored-step-output.js +67 -0
- package/dist/authored-step-output.js.map +1 -0
- package/dist/authored-worker-step.d.ts +15 -0
- package/dist/authored-worker-step.d.ts.map +1 -0
- package/dist/authored-worker-step.js +136 -0
- package/dist/authored-worker-step.js.map +1 -0
- package/dist/budget-preflight.d.ts +5 -0
- package/dist/budget-preflight.d.ts.map +1 -0
- package/dist/budget-preflight.js +33 -0
- package/dist/budget-preflight.js.map +1 -0
- package/dist/budget.d.ts +14 -0
- package/dist/budget.d.ts.map +1 -0
- package/dist/budget.js +52 -0
- package/dist/budget.js.map +1 -0
- package/dist/bundle-transport.d.ts +18 -0
- package/dist/bundle-transport.d.ts.map +1 -0
- package/dist/bundle-transport.js +111 -0
- package/dist/bundle-transport.js.map +1 -0
- package/dist/bundle-typescript.d.ts +8 -0
- package/dist/bundle-typescript.d.ts.map +1 -0
- package/dist/bundle-typescript.js +108 -0
- package/dist/bundle-typescript.js.map +1 -0
- package/dist/bundle.d.ts +25 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +199 -0
- package/dist/bundle.js.map +1 -0
- package/dist/child-stop.d.ts +59 -0
- package/dist/child-stop.d.ts.map +1 -0
- package/dist/child-stop.js +94 -0
- package/dist/child-stop.js.map +1 -0
- package/dist/cli/add.d.ts +6 -0
- package/dist/cli/add.d.ts.map +1 -0
- package/dist/cli/add.js +47 -0
- package/dist/cli/add.js.map +1 -0
- package/dist/cli/build.d.ts +13 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.js +224 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/bundle-preflight.d.ts +5 -0
- package/dist/cli/bundle-preflight.d.ts.map +1 -0
- package/dist/cli/bundle-preflight.js +28 -0
- package/dist/cli/bundle-preflight.js.map +1 -0
- package/dist/cli/check-helper-body.d.ts +4 -0
- package/dist/cli/check-helper-body.d.ts.map +1 -0
- package/dist/cli/check-helper-body.js +15 -0
- package/dist/cli/check-helper-body.js.map +1 -0
- package/dist/cli/check-triggers.d.ts +14 -0
- package/dist/cli/check-triggers.d.ts.map +1 -0
- package/dist/cli/check-triggers.js +37 -0
- package/dist/cli/check-triggers.js.map +1 -0
- package/dist/cli/check-typescript.d.ts +20 -0
- package/dist/cli/check-typescript.d.ts.map +1 -0
- package/dist/cli/check-typescript.js +54 -0
- package/dist/cli/check-typescript.js.map +1 -0
- package/dist/cli/check.d.ts +36 -3
- package/dist/cli/check.d.ts.map +1 -1
- package/dist/cli/check.js +122 -11
- package/dist/cli/check.js.map +1 -1
- package/dist/cli/cloud-run.d.ts +8 -0
- package/dist/cli/cloud-run.d.ts.map +1 -0
- package/dist/cli/cloud-run.js +50 -0
- package/dist/cli/cloud-run.js.map +1 -0
- package/dist/cli/deploy.d.ts +9 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +58 -0
- package/dist/cli/deploy.js.map +1 -0
- package/dist/cli/deterministic-failure.d.ts +5 -0
- package/dist/cli/deterministic-failure.d.ts.map +1 -0
- package/dist/cli/deterministic-failure.js +66 -0
- package/dist/cli/deterministic-failure.js.map +1 -0
- package/dist/cli/direct-run.d.ts.map +1 -1
- package/dist/cli/direct-run.js +83 -18
- package/dist/cli/direct-run.js.map +1 -1
- package/dist/cli/hn-monitor.d.ts.map +1 -1
- package/dist/cli/hn-monitor.js +2 -1
- package/dist/cli/hn-monitor.js.map +1 -1
- package/dist/cli/replay.d.ts +12 -0
- package/dist/cli/replay.d.ts.map +1 -0
- package/dist/cli/replay.js +82 -0
- package/dist/cli/replay.js.map +1 -0
- package/dist/cli/reuse.d.ts +8 -0
- package/dist/cli/reuse.d.ts.map +1 -0
- package/dist/cli/reuse.js +25 -0
- package/dist/cli/reuse.js.map +1 -0
- package/dist/cli/run-digest.d.ts +4 -0
- package/dist/cli/run-digest.d.ts.map +1 -0
- package/dist/cli/run-digest.js +24 -0
- package/dist/cli/run-digest.js.map +1 -0
- package/dist/cli/run.d.ts +16 -5
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +99 -17
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/serve-webhook.d.ts +40 -0
- package/dist/cli/serve-webhook.d.ts.map +1 -0
- package/dist/cli/serve-webhook.js +233 -0
- package/dist/cli/serve-webhook.js.map +1 -0
- package/dist/cli/tick-runner.d.ts.map +1 -1
- package/dist/cli/tick-runner.js +2 -1
- package/dist/cli/tick-runner.js.map +1 -1
- package/dist/cli-adapter.d.ts +8 -14
- package/dist/cli-adapter.d.ts.map +1 -1
- package/dist/cli-adapter.js +19 -64
- package/dist/cli-adapter.js.map +1 -1
- package/dist/cli-watch.d.ts +13 -0
- package/dist/cli-watch.d.ts.map +1 -0
- package/dist/cli-watch.js +185 -0
- package/dist/cli-watch.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +387 -14
- package/dist/cli.js.map +1 -1
- package/dist/cloud-http.d.ts +22 -0
- package/dist/cloud-http.d.ts.map +1 -0
- package/dist/cloud-http.js +84 -0
- package/dist/cloud-http.js.map +1 -0
- package/dist/cloud-run.d.ts +38 -0
- package/dist/cloud-run.d.ts.map +1 -0
- package/dist/cloud-run.js +112 -0
- package/dist/cloud-run.js.map +1 -0
- package/dist/compile.d.ts +21 -3
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +97 -23
- package/dist/compile.js.map +1 -1
- package/dist/create-flow.d.ts +17 -0
- package/dist/create-flow.d.ts.map +1 -0
- package/dist/create-flow.js +72 -0
- package/dist/create-flow.js.map +1 -0
- package/dist/daemon-connection.d.ts +14 -0
- package/dist/daemon-connection.d.ts.map +1 -1
- package/dist/daemon-connection.js +33 -1
- package/dist/daemon-connection.js.map +1 -1
- package/dist/demo-hn-monitor.js +2 -1
- package/dist/demo-hn-monitor.js.map +1 -1
- package/dist/effect-channel.d.ts +30 -0
- package/dist/effect-channel.d.ts.map +1 -0
- package/dist/effect-channel.js +71 -0
- package/dist/effect-channel.js.map +1 -0
- package/dist/failure-kinds.d.ts +14 -3
- package/dist/failure-kinds.d.ts.map +1 -1
- package/dist/failure-kinds.js +27 -0
- package/dist/failure-kinds.js.map +1 -1
- package/dist/gate-contract.d.ts.map +1 -1
- package/dist/gate-contract.js +9 -0
- package/dist/gate-contract.js.map +1 -1
- package/dist/helper-preflight.d.ts +18 -0
- package/dist/helper-preflight.d.ts.map +1 -0
- package/dist/helper-preflight.js +32 -0
- package/dist/helper-preflight.js.map +1 -0
- package/dist/helper-storage.d.ts +5 -0
- package/dist/helper-storage.d.ts.map +1 -0
- package/dist/helper-storage.js +31 -0
- package/dist/helper-storage.js.map +1 -0
- package/dist/helper-writeback.d.ts +12 -0
- package/dist/helper-writeback.d.ts.map +1 -0
- package/dist/helper-writeback.js +95 -0
- package/dist/helper-writeback.js.map +1 -0
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/input-binding.d.ts +4 -0
- package/dist/input-binding.d.ts.map +1 -0
- package/dist/input-binding.js +78 -0
- package/dist/input-binding.js.map +1 -0
- package/dist/journal-client.d.ts +12 -4
- package/dist/journal-client.d.ts.map +1 -1
- package/dist/journal-client.js +17 -6
- package/dist/journal-client.js.map +1 -1
- package/dist/journal-offset.d.ts +3 -0
- package/dist/journal-offset.d.ts.map +1 -0
- package/dist/journal-offset.js +69 -0
- package/dist/journal-offset.js.map +1 -0
- package/dist/journal-reader.d.ts +30 -0
- package/dist/journal-reader.d.ts.map +1 -0
- package/dist/journal-reader.js +156 -0
- package/dist/journal-reader.js.map +1 -0
- package/dist/json-schema.d.ts +2 -0
- package/dist/json-schema.d.ts.map +1 -1
- package/dist/json-schema.js +38 -22
- package/dist/json-schema.js.map +1 -1
- package/dist/llm-worker.d.ts +16 -0
- package/dist/llm-worker.d.ts.map +1 -0
- package/dist/llm-worker.js +79 -0
- package/dist/llm-worker.js.map +1 -0
- package/dist/local-agent.d.ts +8 -0
- package/dist/local-agent.d.ts.map +1 -0
- package/dist/local-agent.js +25 -0
- package/dist/local-agent.js.map +1 -0
- package/dist/mcp-client.d.ts +15 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +104 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/mcp-config.d.ts +4 -0
- package/dist/mcp-config.d.ts.map +1 -0
- package/dist/mcp-config.js +61 -0
- package/dist/mcp-config.js.map +1 -0
- package/dist/mcp-stdio.d.ts +24 -0
- package/dist/mcp-stdio.d.ts.map +1 -0
- package/dist/mcp-stdio.js +89 -0
- package/dist/mcp-stdio.js.map +1 -0
- package/dist/model-pricing.d.ts +22 -0
- package/dist/model-pricing.d.ts.map +1 -0
- package/dist/model-pricing.js +30 -0
- package/dist/model-pricing.js.map +1 -0
- package/dist/mount-registry.d.ts +9 -0
- package/dist/mount-registry.d.ts.map +1 -0
- package/dist/mount-registry.js +47 -0
- package/dist/mount-registry.js.map +1 -0
- package/dist/named-gate-lowering.d.ts +9 -0
- package/dist/named-gate-lowering.d.ts.map +1 -0
- package/dist/named-gate-lowering.js +152 -0
- package/dist/named-gate-lowering.js.map +1 -0
- package/dist/named-gates.d.ts +10 -0
- package/dist/named-gates.d.ts.map +1 -0
- package/dist/named-gates.js +69 -0
- package/dist/named-gates.js.map +1 -0
- package/dist/observer-link.d.ts +129 -0
- package/dist/observer-link.d.ts.map +1 -0
- package/dist/observer-link.js +274 -0
- package/dist/observer-link.js.map +1 -0
- package/dist/plugin-loader.d.ts +13 -0
- package/dist/plugin-loader.d.ts.map +1 -0
- package/dist/plugin-loader.js +110 -0
- package/dist/plugin-loader.js.map +1 -0
- package/dist/plugin-manifest.d.ts +27 -0
- package/dist/plugin-manifest.d.ts.map +1 -0
- package/dist/plugin-manifest.js +89 -0
- package/dist/plugin-manifest.js.map +1 -0
- package/dist/preflight.d.ts +26 -2
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +175 -1
- package/dist/preflight.js.map +1 -1
- package/dist/progress.d.ts +14 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +39 -0
- package/dist/progress.js.map +1 -0
- package/dist/protocol.d.ts +11 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/pty-sidechannel.d.ts +14 -0
- package/dist/pty-sidechannel.d.ts.map +1 -0
- package/dist/pty-sidechannel.js +103 -0
- package/dist/pty-sidechannel.js.map +1 -0
- package/dist/scope-compiler.d.ts +52 -0
- package/dist/scope-compiler.d.ts.map +1 -0
- package/dist/scope-compiler.js +62 -0
- package/dist/scope-compiler.js.map +1 -0
- package/dist/slack-preflight.d.ts +6 -0
- package/dist/slack-preflight.d.ts.map +1 -0
- package/dist/slack-preflight.js +28 -0
- package/dist/slack-preflight.js.map +1 -0
- package/dist/slack-writeback.d.ts +40 -0
- package/dist/slack-writeback.d.ts.map +1 -0
- package/dist/slack-writeback.js +60 -0
- package/dist/slack-writeback.js.map +1 -0
- package/dist/spec.d.ts +134 -4
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js.map +1 -1
- package/dist/step-dependencies.d.ts.map +1 -1
- package/dist/step-dependencies.js +2 -1
- package/dist/step-dependencies.js.map +1 -1
- package/dist/step-fields.d.ts +4 -4
- package/dist/step-fields.d.ts.map +1 -1
- package/dist/step-fields.js +5 -2
- package/dist/step-fields.js.map +1 -1
- package/dist/trigger-executor.d.ts +7 -0
- package/dist/trigger-executor.d.ts.map +1 -0
- package/dist/trigger-executor.js +35 -0
- package/dist/trigger-executor.js.map +1 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +53 -6
- package/dist/validate.js.map +1 -1
- package/dist/webhook-rate-limit.d.ts +29 -0
- package/dist/webhook-rate-limit.d.ts.map +1 -0
- package/dist/webhook-rate-limit.js +38 -0
- package/dist/webhook-rate-limit.js.map +1 -0
- package/dist/webhook-signature.d.ts +22 -0
- package/dist/webhook-signature.d.ts.map +1 -0
- package/dist/webhook-signature.js +53 -0
- package/dist/webhook-signature.js.map +1 -0
- package/dist/worker-cli.d.ts +16 -1
- package/dist/worker-cli.d.ts.map +1 -1
- package/dist/worker-cli.js +129 -12
- package/dist/worker-cli.js.map +1 -1
- package/dist/worker-input.d.ts +4 -0
- package/dist/worker-input.d.ts.map +1 -0
- package/dist/worker-input.js +14 -0
- package/dist/worker-input.js.map +1 -0
- package/dist/worker-lease.d.ts +5 -0
- package/dist/worker-lease.d.ts.map +1 -0
- package/dist/worker-lease.js +80 -0
- package/dist/worker-lease.js.map +1 -0
- package/dist/worker-spend.d.ts +19 -0
- package/dist/worker-spend.d.ts.map +1 -0
- package/dist/worker-spend.js +22 -0
- package/dist/worker-spend.js.map +1 -0
- package/dist/worker-usage.d.ts +7 -0
- package/dist/worker-usage.d.ts.map +1 -0
- package/dist/worker-usage.js +54 -0
- package/dist/worker-usage.js.map +1 -0
- package/dist/worker.d.ts +2 -0
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +29 -9
- package/dist/worker.js.map +1 -1
- package/dist/wrapper-session.d.ts +1 -1
- package/dist/wrapper-session.d.ts.map +1 -1
- package/dist/wrapper-session.js +56 -19
- package/dist/wrapper-session.js.map +1 -1
- package/dist/yaml-helper-effect.d.ts +8 -0
- package/dist/yaml-helper-effect.d.ts.map +1 -0
- package/dist/yaml-helper-effect.js +79 -0
- package/dist/yaml-helper-effect.js.map +1 -0
- package/dist/yaml-helpers.d.ts +18 -0
- package/dist/yaml-helpers.d.ts.map +1 -0
- package/dist/yaml-helpers.js +116 -0
- package/dist/yaml-helpers.js.map +1 -0
- package/package.json +19 -2
- package/src/adapters/base.ts +53 -0
- package/src/adapters/claude.ts +55 -0
- package/src/adapters/codex.ts +56 -0
- package/src/adapters/index.ts +36 -0
- package/src/adapters/wrapper.ts +42 -0
- package/src/agent-relay-receipt.ts +120 -0
- package/src/agent-relay-state.ts +73 -0
- package/src/agent-relay-transport.ts +273 -0
- package/src/authored-budget.ts +69 -0
- package/src/authored-flow-error.ts +10 -10
- package/src/authored-flow-executor.ts +171 -347
- package/src/authored-flow-loader.ts +60 -3
- package/src/authored-flow-operation.ts +38 -5
- package/src/authored-helper-effect.ts +143 -0
- package/src/authored-mcp.ts +166 -0
- package/src/authored-memory.ts +55 -0
- package/src/authored-plugin-effect.ts +152 -0
- package/src/authored-step-output.ts +107 -0
- package/src/authored-worker-step.ts +181 -0
- package/src/budget-preflight.ts +31 -0
- package/src/budget.ts +49 -0
- package/src/bundle-transport.ts +79 -0
- package/src/bundle-typescript.ts +98 -0
- package/src/bundle.ts +182 -0
- package/src/child-stop.ts +138 -0
- package/src/cli/add.ts +45 -0
- package/src/cli/build.ts +214 -0
- package/src/cli/bundle-preflight.ts +28 -0
- package/src/cli/check-helper-body.ts +14 -0
- package/src/cli/check-triggers.ts +41 -0
- package/src/cli/check-typescript.ts +63 -0
- package/src/cli/check.ts +132 -14
- package/src/cli/cloud-run.ts +47 -0
- package/src/cli/deploy.ts +52 -0
- package/src/cli/deterministic-failure.ts +69 -0
- package/src/cli/direct-run.ts +79 -18
- package/src/cli/hn-monitor.ts +2 -1
- package/src/cli/replay.ts +81 -0
- package/src/cli/reuse.ts +23 -0
- package/src/cli/run-digest.ts +24 -0
- package/src/cli/run.ts +104 -21
- package/src/cli/serve-webhook.ts +246 -0
- package/src/cli/tick-runner.ts +2 -1
- package/src/cli-adapter.ts +31 -74
- package/src/cli-watch.ts +174 -0
- package/src/cli.ts +396 -17
- package/src/cloud-http.ts +100 -0
- package/src/cloud-run.ts +137 -0
- package/src/compile.ts +102 -23
- package/src/create-flow.ts +82 -0
- package/src/daemon-connection.ts +32 -1
- package/src/demo-hn-monitor.ts +2 -1
- package/src/effect-channel.ts +97 -0
- package/src/failure-kinds.ts +38 -0
- package/src/gate-contract.ts +7 -0
- package/src/helper-preflight.ts +34 -0
- package/src/helper-storage.ts +23 -0
- package/src/helper-writeback.ts +83 -0
- package/src/index.ts +26 -0
- package/src/input-binding.ts +76 -0
- package/src/journal-client.ts +20 -7
- package/src/journal-offset.ts +60 -0
- package/src/journal-reader.ts +165 -0
- package/src/json-schema.ts +34 -18
- package/src/llm-worker.ts +82 -0
- package/src/local-agent.ts +30 -0
- package/src/mcp-client.ts +97 -0
- package/src/mcp-config.ts +42 -0
- package/src/mcp-stdio.ts +84 -0
- package/src/model-pricing.ts +32 -0
- package/src/mount-registry.ts +44 -0
- package/src/named-gate-lowering.ts +147 -0
- package/src/named-gates.ts +76 -0
- package/src/observer-link.ts +368 -0
- package/src/plugin-loader.ts +88 -0
- package/src/plugin-manifest.ts +76 -0
- package/src/preflight.ts +178 -4
- package/src/progress.ts +51 -0
- package/src/protocol.ts +12 -0
- package/src/pty-sidechannel.ts +92 -0
- package/src/scope-compiler.ts +105 -0
- package/src/slack-preflight.ts +25 -0
- package/src/slack-writeback.ts +63 -0
- package/src/spec.ts +112 -4
- package/src/step-dependencies.ts +3 -1
- package/src/step-fields.ts +5 -2
- package/src/trigger-executor.ts +34 -0
- package/src/validate.ts +47 -6
- package/src/webhook-rate-limit.ts +69 -0
- package/src/webhook-signature.ts +74 -0
- package/src/worker-cli.ts +150 -11
- package/src/worker-input.ts +15 -0
- package/src/worker-lease.ts +85 -0
- package/src/worker-spend.ts +23 -0
- package/src/worker-usage.ts +48 -0
- package/src/worker.ts +34 -10
- package/src/wrapper-session.ts +50 -15
- package/src/yaml-helper-effect.ts +78 -0
- package/src/yaml-helpers.ts +131 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Step } from '@relayflows/surface';
|
|
1
|
+
import type { NamedGate, Step } from '@relayflows/surface';
|
|
2
2
|
import { AuthoredFlowLifecycle, type AuthoredOperationInvocation } from './authored-flow-lifecycle.js';
|
|
3
3
|
type OperationState = 'created' | 'running' | 'fulfilled' | 'rejected';
|
|
4
4
|
/** A root authored operation whose outcome cannot be hidden by promise handlers. */
|
|
@@ -9,6 +9,14 @@ export declare class AuthoredFlowOperation<T> {
|
|
|
9
9
|
private readonly start;
|
|
10
10
|
private readonly scope;
|
|
11
11
|
readonly step: Step<T>;
|
|
12
|
+
/**
|
|
13
|
+
* Named-gate config attached via `.gate({type: '…', …})`. The start closure
|
|
14
|
+
* reads this at spec-build time and injects it into the compiled StepSpec's
|
|
15
|
+
* `verification:` field — journal-honest via slice P's named-gate lowering.
|
|
16
|
+
* Undefined means no postfix gate (default behavior). Predicate `.gate(fn)`
|
|
17
|
+
* still throws `unsupported_gate` and never sets this field.
|
|
18
|
+
*/
|
|
19
|
+
namedGate: NamedGate | undefined;
|
|
12
20
|
private state;
|
|
13
21
|
private thenInvoked;
|
|
14
22
|
private rootFailureRecorded;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authored-flow-operation.d.ts","sourceRoot":"","sources":["../src/authored-flow-operation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"authored-flow-operation.d.ts","sourceRoot":"","sources":["../src/authored-flow-operation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EACL,qBAAqB,EACrB,KAAK,2BAA2B,EACjC,MAAM,8BAA8B,CAAC;AAatC,KAAK,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AAGvE,oFAAoF;AACpF,qBAAa,qBAAqB,CAAC,CAAC;IAqBhC,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAxBxB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB;;;;;;OAMG;IACH,SAAS,EAAE,SAAS,GAAG,SAAS,CAAa;IAC7C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;gBAGzC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACJ,cAAc,EAAE,MAAM,IAAI,EAC1B,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACvB,KAAK,EAAE,qBAAqB;IAuD/C,IAAI,SAAS,IAAI,cAAc,CAE9B;IAED,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,OAAO,IAAI;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAErE;IAED,IAAI,cAAc,IAAI;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAE5E;IAED,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAOtB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC,cAAc,CAAC,OAAO,EACpB,UAAU,EAAE,2BAA2B,EACvC,QAAQ,EAAE,MAAM,OAAO,GACtB,OAAO;YAII,KAAK;IAenB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,qBAAqB;CAK9B;AAED,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,SAAS,qBAAqB,CAAC,OAAO,CAAC,EAAE,EACrD,SAAS,EAAE,qBAAqB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAED,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,SAAS,qBAAqB,CAAC,OAAO,CAAC,EAAE,EACrD,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { executionAsyncId } from 'node:async_hooks';
|
|
2
2
|
import { AuthoredFlowExecutionError } from './authored-flow-error.js';
|
|
3
|
+
/** Slice-P kinds the surface `.gate(config)` accepts and the SDK lowers. */
|
|
4
|
+
const NAMED_GATE_KINDS = new Set([
|
|
5
|
+
'references_input', 'subprocess_gate', 'word_count_bounds', 'regex_match',
|
|
6
|
+
]);
|
|
7
|
+
function isNamedGateConfig(candidate) {
|
|
8
|
+
return typeof candidate === 'object' && candidate !== null && !Array.isArray(candidate)
|
|
9
|
+
&& typeof candidate.type === 'string'
|
|
10
|
+
&& NAMED_GATE_KINDS.has(candidate.type);
|
|
11
|
+
}
|
|
3
12
|
const nativePromiseThen = Promise.prototype.then;
|
|
4
13
|
/** A root authored operation whose outcome cannot be hidden by promise handlers. */
|
|
5
14
|
export class AuthoredFlowOperation {
|
|
@@ -9,6 +18,14 @@ export class AuthoredFlowOperation {
|
|
|
9
18
|
start;
|
|
10
19
|
scope;
|
|
11
20
|
step;
|
|
21
|
+
/**
|
|
22
|
+
* Named-gate config attached via `.gate({type: '…', …})`. The start closure
|
|
23
|
+
* reads this at spec-build time and injects it into the compiled StepSpec's
|
|
24
|
+
* `verification:` field — journal-honest via slice P's named-gate lowering.
|
|
25
|
+
* Undefined means no postfix gate (default behavior). Predicate `.gate(fn)`
|
|
26
|
+
* still throws `unsupported_gate` and never sets this field.
|
|
27
|
+
*/
|
|
28
|
+
namedGate = undefined;
|
|
12
29
|
state = 'created';
|
|
13
30
|
thenInvoked = false;
|
|
14
31
|
rootFailureRecorded = false;
|
|
@@ -34,9 +51,19 @@ export class AuthoredFlowOperation {
|
|
|
34
51
|
this.reject = reject;
|
|
35
52
|
observeRejection(this.promise, (error) => this.recordRootFailure(error));
|
|
36
53
|
const operation = this;
|
|
37
|
-
|
|
38
|
-
gate() {
|
|
39
|
-
|
|
54
|
+
const step = {
|
|
55
|
+
gate(configOrPredicate, _because) {
|
|
56
|
+
if (isNamedGateConfig(configOrPredicate)) {
|
|
57
|
+
// Config-object gate: lowers into the compiled StepSpec's
|
|
58
|
+
// `verification:` field via slice-P named-gate lowering.
|
|
59
|
+
operation.namedGate = configOrPredicate;
|
|
60
|
+
return step;
|
|
61
|
+
}
|
|
62
|
+
// Predicate gate: closures cannot be journaled (covenant 1
|
|
63
|
+
// journal-as-truth). Refuse — authors should use a config-object
|
|
64
|
+
// gate or the declarative `verification:` block.
|
|
65
|
+
throw new AuthoredFlowExecutionError('unsupported_gate', 'postfix .gate(predicate) closures cannot be journaled; '
|
|
66
|
+
+ 'use .gate({type: "…", …}) with a slice-P named gate instead.');
|
|
40
67
|
},
|
|
41
68
|
then(onfulfilled, onrejected) {
|
|
42
69
|
operation.thenInvoked = true;
|
|
@@ -45,7 +72,11 @@ export class AuthoredFlowOperation {
|
|
|
45
72
|
const derived = nativeThen(operation.promise, wrapResolver(operation, invocation, onfulfilled), wrapResolver(operation, invocation, onrejected));
|
|
46
73
|
return trackDerivedPromise(derived, (error) => operation.recordCallbackFailure(error));
|
|
47
74
|
},
|
|
48
|
-
}
|
|
75
|
+
};
|
|
76
|
+
// Freeze the `then`/`gate` method table so the surface's Step contract
|
|
77
|
+
// stays intact, but keep `namedGate` reachable via the enclosing
|
|
78
|
+
// operation reference (not through the surface Step handle).
|
|
79
|
+
this.step = Object.freeze(step);
|
|
49
80
|
this.scope.registerStep(this.step, this);
|
|
50
81
|
}
|
|
51
82
|
get lifecycle() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authored-flow-operation.js","sourceRoot":"","sources":["../src/authored-flow-operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"authored-flow-operation.js","sourceRoot":"","sources":["../src/authored-flow-operation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { JournalClient } from './journal-client.js';
|
|
2
|
+
import type { AuthoredFlowJournalStep } from './authored-flow-executor.js';
|
|
3
|
+
import { type HelperCall } from '@relayflows/surface/runtime';
|
|
4
|
+
import { type SlackCall } from './slack-writeback.js';
|
|
5
|
+
type ProviderCall = HelperCall | SlackCall;
|
|
6
|
+
export declare function assertHelperCredentials(provider: string): void;
|
|
7
|
+
/** Each helper uses the existing agent lease + effect protocol; no new kernel verb. */
|
|
8
|
+
export declare function runHelperEffect(journal: JournalClient, name: string, stepId: string, call: ProviderCall, dataDir: string, journalSteps: AuthoredFlowJournalStep[]): Promise<unknown>;
|
|
9
|
+
/** Recognize only the journaled helper envelope, so ordinary agent runs keep their worker path. */
|
|
10
|
+
export declare function resumeHelperEffect(journal: JournalClient, runId: string, dataDir: string): Promise<boolean>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=authored-helper-effect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authored-helper-effect.d.ts","sourceRoot":"","sources":["../src/authored-helper-effect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAK3E,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAG/E,OAAO,EAA6D,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjH,KAAK,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3C,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAS9D;AAED,uFAAuF;AACvF,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EACxE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,uBAAuB,EAAE,GACvD,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED,mGAAmG;AACnG,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBjH"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { randomUUID } from 'node:crypto';
|
|
4
|
+
import { JournalClient } from './journal-client.js';
|
|
5
|
+
import { AuthoredFlowExecutionError } from './authored-flow-error.js';
|
|
6
|
+
import { readCompletedStepOutput } from './authored-step-output.js';
|
|
7
|
+
import { compileSpec, toKernelSpec } from './compile.js';
|
|
8
|
+
import { SPEC_SCHEMA_VERSION } from './spec.js';
|
|
9
|
+
import { withWorkerLease } from './worker-lease.js';
|
|
10
|
+
import { helperProviders } from '@relayflows/surface/runtime';
|
|
11
|
+
import { helperWriteback, HelperDeliveryError } from './helper-writeback.js';
|
|
12
|
+
import { checkSlackHelpers } from './slack-preflight.js';
|
|
13
|
+
import { atomicJson, readSlackReceipt, receiptPath, slackWriteback } from './slack-writeback.js';
|
|
14
|
+
export function assertHelperCredentials(provider) {
|
|
15
|
+
const namespace = helperProviders.find(p => p.provider === provider)?.namespace;
|
|
16
|
+
if (!namespace)
|
|
17
|
+
throw new AuthoredFlowExecutionError('helper_provider.unsupported', `Unknown helper ${provider}`);
|
|
18
|
+
const report = checkSlackHelpers({ header: { tools: { [namespace]: true } }, body() { } });
|
|
19
|
+
if (!report.ok) {
|
|
20
|
+
const diagnostic = report.diagnostics[0];
|
|
21
|
+
throw new AuthoredFlowExecutionError(diagnostic.kind, diagnostic.message);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** Each helper uses the existing agent lease + effect protocol; no new kernel verb. */
|
|
25
|
+
export async function runHelperEffect(journal, name, stepId, call, dataDir, journalSteps) {
|
|
26
|
+
assertHelperCredentials(call.provider);
|
|
27
|
+
if (call.provider === 'notion' && call.verb === 'appendBlock' && process.env.RELAYFLOWS_NOTION_MOCK !== '1') {
|
|
28
|
+
throw new AuthoredFlowExecutionError('helper_provider.unsupported', 'Notion appendBlock has no upstream mount writeback route');
|
|
29
|
+
}
|
|
30
|
+
const stream = `${call.provider}-helper-${randomUUID()}`;
|
|
31
|
+
const spec = toKernelSpec(compileSpec({
|
|
32
|
+
version: SPEC_SCHEMA_VERSION, name: `${name}/${stepId}`,
|
|
33
|
+
steps: [{ id: stepId, type: 'agent', instruction: JSON.stringify(call),
|
|
34
|
+
maxIterations: 3, recoveryMode: 'reset',
|
|
35
|
+
surfaces: { streams: [{ stream }], external: [`/${call.provider}`] } }],
|
|
36
|
+
}));
|
|
37
|
+
const outcome = await journal.runStart(spec);
|
|
38
|
+
await atomicJson(join(dataDir, 'helper-runs', `${outcome.run_id}.json`), { provider: call.provider });
|
|
39
|
+
await driveHelperEffect(journal, outcome.run_id, spec.steps[0], call, dataDir);
|
|
40
|
+
const output = await readCompletedStepOutput(journal, outcome.run_id, stepId, journalSteps);
|
|
41
|
+
return output.receipt;
|
|
42
|
+
}
|
|
43
|
+
/** Recognize only the journaled helper envelope, so ordinary agent runs keep their worker path. */
|
|
44
|
+
export async function resumeHelperEffect(journal, runId, dataDir) {
|
|
45
|
+
if (!/^[A-Za-z0-9_-]+$/.test(runId) || !existsSync(join(dataDir, 'helper-runs', `${runId}.json`)))
|
|
46
|
+
return false;
|
|
47
|
+
const entries = (await journal.journalRead(runId, 1)).entries;
|
|
48
|
+
const steps = entries.find(entry => entry.entry_type === 'run.spawned')?.payload.spec?.steps;
|
|
49
|
+
if (steps?.length !== 1)
|
|
50
|
+
return false;
|
|
51
|
+
const step = steps[0];
|
|
52
|
+
if (step.type !== 'agent' || !step.surfaces?.streams?.[0]?.stream.includes('-helper-'))
|
|
53
|
+
return false;
|
|
54
|
+
const call = JSON.parse(step.instruction);
|
|
55
|
+
if (call.type !== 'effect' || !helperProviders.some(p => p.provider === call.provider && p.supported))
|
|
56
|
+
return false;
|
|
57
|
+
const snapshot = await journal.runGet(runId);
|
|
58
|
+
if (snapshot.status === 'completed' || snapshot.status === 'failed')
|
|
59
|
+
return true;
|
|
60
|
+
assertHelperCredentials(call.provider);
|
|
61
|
+
await driveHelperEffect(journal, runId, step, call, dataDir);
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
async function driveHelperEffect(journal, runId, step, call, dataDir) {
|
|
65
|
+
const client = new JournalClient(journal.socketPath);
|
|
66
|
+
const stream = step.surfaces.streams[0].stream;
|
|
67
|
+
const pins = { workspace: [], streams: [{ stream, read_offset: 0 }] };
|
|
68
|
+
let resolve;
|
|
69
|
+
let reject;
|
|
70
|
+
const completed = new Promise((yes, no) => { resolve = yes; reject = no; });
|
|
71
|
+
// Observe early dispatch failures even while attach/run.resume is still pending.
|
|
72
|
+
void completed.catch(() => undefined);
|
|
73
|
+
let executing = false;
|
|
74
|
+
client.on('step.dispatch', (dispatch) => {
|
|
75
|
+
if (executing || dispatch.run_id !== runId || dispatch.step_id !== step.id)
|
|
76
|
+
return;
|
|
77
|
+
executing = true;
|
|
78
|
+
void completeHelperDispatch(client, dispatch, call, dataDir).then(resolve, reject);
|
|
79
|
+
});
|
|
80
|
+
client.on('error', reject);
|
|
81
|
+
try {
|
|
82
|
+
await client.connect();
|
|
83
|
+
await client.hello('flows-provider-helper');
|
|
84
|
+
await client.workerAttach(`${call.provider}-${randomUUID()}`, ['agent'], pins, 1);
|
|
85
|
+
const outcome = await journal.runResume(runId);
|
|
86
|
+
if (outcome.status === 'completed')
|
|
87
|
+
return;
|
|
88
|
+
if (outcome.status === 'failed') {
|
|
89
|
+
throw new AuthoredFlowExecutionError('step_failed', `Helper run ${runId} ${outcome.status}`, undefined, runId);
|
|
90
|
+
}
|
|
91
|
+
await completed;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
if (error instanceof AuthoredFlowExecutionError)
|
|
95
|
+
throw error;
|
|
96
|
+
throw new AuthoredFlowExecutionError('step_failed', error instanceof Error ? error.message : 'Helper effect failed', 'worker_error', runId);
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
client.close();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async function completeHelperDispatch(client, dispatch, call, dataDir) {
|
|
103
|
+
let output;
|
|
104
|
+
try {
|
|
105
|
+
output = await withWorkerLease(client, dispatch, async (signal) => {
|
|
106
|
+
const file = receiptPath(dataDir, dispatch.run_id, dispatch.step_id);
|
|
107
|
+
let receipt;
|
|
108
|
+
await client.performEffect({
|
|
109
|
+
runId: dispatch.run_id, stepId: dispatch.step_id, attempt: dispatch.attempt,
|
|
110
|
+
idempotencyKey: dispatch.idempotency_key, surfacePath: `/${call.provider}`,
|
|
111
|
+
revisionBefore: 'pending', revisionAfter: `${dispatch.run_id}:${dispatch.step_id}`,
|
|
112
|
+
}, async () => {
|
|
113
|
+
try {
|
|
114
|
+
receipt = await readSlackReceipt(file);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
if (error.code !== 'ENOENT')
|
|
118
|
+
throw error;
|
|
119
|
+
receipt = await (call.provider === 'slack' && 'params' in call
|
|
120
|
+
? slackWriteback(call, dataDir, dispatch.run_id, dispatch.step_id, signal)
|
|
121
|
+
: helperWriteback(call, dataDir, dispatch.run_id, dispatch.step_id, signal));
|
|
122
|
+
await atomicJson(file, receipt);
|
|
123
|
+
}
|
|
124
|
+
signal.throwIfAborted();
|
|
125
|
+
});
|
|
126
|
+
// Also required after a confirmed election followed by a crash before step.complete.
|
|
127
|
+
if (receipt === undefined)
|
|
128
|
+
receipt = await readSlackReceipt(file);
|
|
129
|
+
return { ...call, idempotencyKey: `${dispatch.run_id}:${dispatch.step_id}`, receipt };
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
if (!(error instanceof HelperDeliveryError))
|
|
134
|
+
throw error;
|
|
135
|
+
await client.stepComplete(dispatch.run_id, dispatch.step_id, dispatch.attempt, dispatch.idempotency_key, 'worker_error', {
|
|
136
|
+
output: { ...call, diagnostic: error.message },
|
|
137
|
+
started_pins: dispatch.pins, end_pins: dispatch.pins, effects: [],
|
|
138
|
+
});
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
await client.stepComplete(dispatch.run_id, dispatch.step_id, dispatch.attempt, dispatch.idempotency_key, 'success', { output, started_pins: dispatch.pins, end_pins: dispatch.pins,
|
|
142
|
+
effects: [{ surface_path: `/${call.provider}`, idempotency_key: dispatch.idempotency_key }] });
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=authored-helper-effect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authored-helper-effect.js","sourceRoot":"","sources":["../src/authored-helper-effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAuC,MAAM,0BAA0B,CAAC;AAC3G,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAwB,MAAM,WAAW,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAmB,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAkB,MAAM,sBAAsB,CAAC;AAIjH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,SAAS,CAAC;IAChF,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,0BAA0B,CAAC,6BAA6B,EAAE,kBAAkB,QAAQ,EAAE,CAAC,CAAC;IAClH,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,KAAI,CAAC,EAAE,CAAC,CAAC;IAC1F,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC1C,MAAM,IAAI,0BAA0B,CAClC,UAAU,CAAC,IAAsC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAsB,EAAE,IAAY,EAAE,MAAc,EAAE,IAAkB,EACxE,OAAe,EAAE,YAAuC;IAExD,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,GAAG,EAAE,CAAC;QAC5G,MAAM,IAAI,0BAA0B,CAAC,6BAA6B,EAAE,0DAA0D,CAAC,CAAC;IAClI,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,WAAW,UAAU,EAAE,EAAE,CAAC;IACzD,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC;QACpC,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,MAAM,EAAE;QACvD,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBACpE,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,OAAO;gBACvC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;KAC1E,CAAC,CAAC,CAAC;IACJ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtG,MAAM,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAoB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAClG,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5F,OAAQ,MAA+B,CAAC,OAAO,CAAC;AAClD,CAAC;AAED,mGAAmG;AACnG,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAsB,EAAE,KAAa,EAAE,OAAe;IAC7F,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAChH,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,OAEpD,CAAC;IACH,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,aAAa,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;IAC7F,IAAI,KAAK,EAAE,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACvB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACrG,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAiB,CAAC;IAC1D,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACpH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjF,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAAsB,EAAE,KAAa,EAAE,IAAqB,EAAE,IAAkB,EAAE,OAAe;IAEjG,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAS,CAAC,OAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;IAClD,MAAM,IAAI,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACtE,IAAI,OAAoB,CAAC;IACzB,IAAI,MAAiC,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,iFAAiF;IACjF,KAAK,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,QAA2B,EAAE,EAAE;QACzD,IAAI,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE;YAAE,OAAO;QACnF,SAAS,GAAG,IAAI,CAAC;QACjB,KAAK,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC5C,MAAM,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO;QAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,0BAA0B,CAAC,aAAa,EAAE,cAAc,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACjH,CAAC;QACD,MAAM,SAAS,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,0BAA0B;YAAE,MAAM,KAAK,CAAC;QAC7D,MAAM,IAAI,0BAA0B,CAAC,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IAC9I,CAAC;YAAS,CAAC;QAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,MAAqB,EAAE,QAA2B,EAAE,IAAkB,EAAE,OAAe;IAC3H,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;YAC9D,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YACrE,IAAI,OAAgB,CAAC;YACrB,MAAM,MAAM,CAAC,aAAa,CAAC;gBACzB,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO;gBAC3E,cAAc,EAAE,QAAQ,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC1E,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE;aACnF,EAAE,KAAK,IAAI,EAAE;gBACZ,IAAI,CAAC;oBAAC,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAAC,CAAC;gBAC/C,OAAO,KAAK,EAAE,CAAC;oBACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;wBAAE,MAAM,KAAK,CAAC;oBACpE,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,IAAI,IAAI;wBAC5D,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;wBAC1E,CAAC,CAAC,eAAe,CAAC,IAAkB,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;oBAC7F,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAClC,CAAC;gBACD,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,qFAAqF;YACrF,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAClE,OAAO,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC;QACxF,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,mBAAmB,CAAC;YAAE,MAAM,KAAK,CAAC;QACzD,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAC3E,QAAQ,CAAC,eAAe,EAAE,cAAc,EAAE;YACxC,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE;YAC9C,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;SAClE,CAAC,CAAC;QACL,OAAO;IACT,CAAC;IACD,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAC3E,QAAQ,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACjG,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;AACrG,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Ctx, Step } from '@relayflows/surface';
|
|
2
|
+
import type { McpServerConfig } from './spec.js';
|
|
3
|
+
import type { JournalClient } from './journal-client.js';
|
|
4
|
+
import { AuthoredFlowExecutionError } from './authored-flow-error.js';
|
|
5
|
+
import type { AuthoredFlowJournalStep } from './authored-flow-executor.js';
|
|
6
|
+
/** Own keys expose precisely the preflight inventory, including prototype-like names. */
|
|
7
|
+
export declare function buildMcpProxy(inventory: Readonly<Record<string, readonly string[]>>, invoke: (server: string, tool: string, args: unknown, known: boolean) => Step<unknown>): Ctx['mcp'];
|
|
8
|
+
export declare class McpStepError extends AuthoredFlowExecutionError {
|
|
9
|
+
readonly diagnostic: string;
|
|
10
|
+
constructor(diagnostic: string, runId: string);
|
|
11
|
+
}
|
|
12
|
+
/** Helpers lower to an existing agent effect, never a fourth kernel primitive.
|
|
13
|
+
* The MCP receipt lives in step.completed.output: { type, input, output, ... }.
|
|
14
|
+
* A private stream routes the step to this short-lived SDK worker exclusively.
|
|
15
|
+
*/
|
|
16
|
+
export declare function runMcpEffect(journal: JournalClient, flowName: string, id: string, server: string, tool: string, args: unknown, known: boolean, config: McpServerConfig, journalSteps: AuthoredFlowJournalStep[]): Promise<unknown>;
|
|
17
|
+
//# sourceMappingURL=authored-mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authored-mcp.d.ts","sourceRoot":"","sources":["../src/authored-mcp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAI3E,yFAAyF;AACzF,wBAAgB,aAAa,CAC3B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,EACtD,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,GACrF,GAAG,CAAC,KAAK,CAAC,CAkBZ;AAED,qBAAa,YAAa,SAAQ,0BAA0B;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAGvD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAClF,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EACtD,YAAY,EAAE,uBAAuB,EAAE,GACtC,OAAO,CAAC,OAAO,CAAC,CA6GlB"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { compileSpec, toKernelSpec } from './compile.js';
|
|
3
|
+
import { snapshotJsonValue } from './json-value.js';
|
|
4
|
+
import { McpError, openMcpSession } from './mcp-client.js';
|
|
5
|
+
import { SPEC_SCHEMA_VERSION } from './spec.js';
|
|
6
|
+
import { AuthoredFlowExecutionError } from './authored-flow-error.js';
|
|
7
|
+
import { readCompletedStepOutput } from './authored-step-output.js';
|
|
8
|
+
import { withWorkerLease } from './worker-lease.js';
|
|
9
|
+
/** Own keys expose precisely the preflight inventory, including prototype-like names. */
|
|
10
|
+
export function buildMcpProxy(inventory, invoke) {
|
|
11
|
+
const servers = Object.create(null);
|
|
12
|
+
for (const [server, names] of Object.entries(inventory)) {
|
|
13
|
+
const tools = Object.create(null);
|
|
14
|
+
const call = (tool, known) => (args) => invoke(server, tool, snapshotJsonValue(args, `f.mcp.${server}.${tool} arguments`), known);
|
|
15
|
+
for (const tool of names)
|
|
16
|
+
tools[tool] = call(tool, true);
|
|
17
|
+
servers[server] = new Proxy(Object.freeze(tools), {
|
|
18
|
+
get(target, key) {
|
|
19
|
+
if (typeof key !== 'string')
|
|
20
|
+
return undefined;
|
|
21
|
+
if (Object.hasOwn(target, key))
|
|
22
|
+
return target[key];
|
|
23
|
+
// Calling a tool outside the inventory still creates an operation,
|
|
24
|
+
// so worker_error is journaled like other runtime failures.
|
|
25
|
+
return call(key, false);
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return Object.freeze(servers);
|
|
30
|
+
}
|
|
31
|
+
export class McpStepError extends AuthoredFlowExecutionError {
|
|
32
|
+
diagnostic;
|
|
33
|
+
constructor(diagnostic, runId) {
|
|
34
|
+
super('step_failed', diagnostic, 'worker_error', runId);
|
|
35
|
+
this.diagnostic = diagnostic;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Helpers lower to an existing agent effect, never a fourth kernel primitive.
|
|
39
|
+
* The MCP receipt lives in step.completed.output: { type, input, output, ... }.
|
|
40
|
+
* A private stream routes the step to this short-lived SDK worker exclusively.
|
|
41
|
+
*/
|
|
42
|
+
export async function runMcpEffect(journal, flowName, id, server, tool, args, known, config, journalSteps) {
|
|
43
|
+
const idempotencyKey = `mcp:${server}:${tool}:${createHash('sha256').update(JSON.stringify(args)).digest('hex')}`;
|
|
44
|
+
const surfacePath = `/mcp/${pathPart(server)}/${pathPart(tool)}`;
|
|
45
|
+
const stream = `mcp-worker-${randomUUID()}`;
|
|
46
|
+
const instruction = JSON.stringify({ type: 'mcp', server, tool, input: args });
|
|
47
|
+
const peer = journal.createPeer();
|
|
48
|
+
let diagnostic;
|
|
49
|
+
let settled;
|
|
50
|
+
let failed;
|
|
51
|
+
const completed = new Promise((resolve, reject) => { settled = resolve; failed = reject; });
|
|
52
|
+
void completed.catch(() => undefined);
|
|
53
|
+
let timer;
|
|
54
|
+
let work;
|
|
55
|
+
let dispatchExpired = false;
|
|
56
|
+
const dispatch = (event) => {
|
|
57
|
+
if (dispatchExpired)
|
|
58
|
+
return;
|
|
59
|
+
const dispatched = event.spec;
|
|
60
|
+
if (event.step_id !== id || event.step_type !== 'agent' || work !== undefined
|
|
61
|
+
|| dispatched?.instruction !== instruction
|
|
62
|
+
|| !dispatched.surfaces?.streams?.some(pin => pin.stream === stream)) {
|
|
63
|
+
failed(new Error('MCP worker received an unexpected dispatch'));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
clearTimeout(timer);
|
|
67
|
+
timer = undefined;
|
|
68
|
+
work = execute(event);
|
|
69
|
+
void work.then(settled, failed);
|
|
70
|
+
};
|
|
71
|
+
async function execute(event) {
|
|
72
|
+
const receipt = { type: 'mcp', server, tool, input: args, idempotencyKey };
|
|
73
|
+
let output;
|
|
74
|
+
let confirmed = false;
|
|
75
|
+
try {
|
|
76
|
+
if (!known)
|
|
77
|
+
throw new Error('mcp_unknown_tool');
|
|
78
|
+
// Renew the worker lease while the MCP tool is in flight. Without this,
|
|
79
|
+
// a tool that runs longer than the initial lease loses ownership and
|
|
80
|
+
// the write-back path fails — see worker-lease.ts for the renewal contract.
|
|
81
|
+
confirmed = await withWorkerLease(peer, event, async () => {
|
|
82
|
+
return peer.performEffect({
|
|
83
|
+
runId: event.run_id, stepId: id, attempt: event.attempt, idempotencyKey: event.idempotency_key,
|
|
84
|
+
surfacePath, revisionBefore: 'pending', revisionAfter: idempotencyKey,
|
|
85
|
+
}, async () => {
|
|
86
|
+
const session = await openMcpSession(config, 10_000);
|
|
87
|
+
try {
|
|
88
|
+
output = await session.callTool(tool, args);
|
|
89
|
+
if (typeof output === 'object' && output !== null && 'isError' in output && output.isError === true) {
|
|
90
|
+
throw new Error('mcp_tool_error');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
await session.close();
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
// A confirmed election without its receipt is an interrupted writeback,
|
|
99
|
+
// not a successful result we may invent or a call we may safely repeat.
|
|
100
|
+
if (!confirmed)
|
|
101
|
+
throw new Error('mcp_result_unavailable');
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (error instanceof McpError)
|
|
105
|
+
diagnostic = error.code;
|
|
106
|
+
else if (error instanceof Error && ['mcp_unknown_tool', 'mcp_tool_error', 'mcp_result_unavailable'].includes(error.message))
|
|
107
|
+
diagnostic = error.message;
|
|
108
|
+
else
|
|
109
|
+
throw error; // Journal failures remain fail-closed, never provider errors.
|
|
110
|
+
}
|
|
111
|
+
await peer.stepComplete(event.run_id, id, event.attempt, event.idempotency_key, diagnostic === undefined ? 'success' : 'worker_error', {
|
|
112
|
+
output: { ...receipt, output: output ?? null, ...(diagnostic ? { diagnostic } : {}) },
|
|
113
|
+
started_pins: event.pins, end_pins: event.pins,
|
|
114
|
+
...(diagnostic ? { trajectory_tail: { ...receipt, diagnostic } } : {}),
|
|
115
|
+
effects: confirmed ? [{ surface_path: surfacePath, idempotency_key: event.idempotency_key }] : [],
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
let childRunId;
|
|
119
|
+
try {
|
|
120
|
+
await peer.connect();
|
|
121
|
+
await peer.hello('flows-mcp');
|
|
122
|
+
peer.on('step.dispatch', dispatch);
|
|
123
|
+
await peer.workerAttach(stream, ['agent'], { workspace: [], streams: [{ stream, read_offset: 0 }] }, 1);
|
|
124
|
+
const spec = toKernelSpec(compileSpec({ version: SPEC_SCHEMA_VERSION, name: `${flowName}/${id}`,
|
|
125
|
+
steps: [{ id, type: 'agent', instruction,
|
|
126
|
+
surfaces: { streams: [{ stream }], external: [surfacePath] }, maxIterations: 1 }],
|
|
127
|
+
}));
|
|
128
|
+
timer = setTimeout(() => {
|
|
129
|
+
dispatchExpired = true;
|
|
130
|
+
failed(new Error('MCP worker dispatch deadline exceeded'));
|
|
131
|
+
}, 30_000);
|
|
132
|
+
// Propagate a dispatch failure even if run.start itself is still pending.
|
|
133
|
+
const starting = journal.runStart(spec);
|
|
134
|
+
await Promise.race([starting, completed]);
|
|
135
|
+
const outcome = await starting;
|
|
136
|
+
childRunId = outcome.run_id;
|
|
137
|
+
await completed;
|
|
138
|
+
if (diagnostic !== undefined) {
|
|
139
|
+
try {
|
|
140
|
+
await readCompletedStepOutput(journal, outcome.run_id, id, journalSteps);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (!(error instanceof AuthoredFlowExecutionError) || error.code !== 'step_failed')
|
|
144
|
+
throw error;
|
|
145
|
+
throw new McpStepError(diagnostic, outcome.run_id);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const receipt = await readCompletedStepOutput(journal, outcome.run_id, id, journalSteps);
|
|
149
|
+
return receipt.output;
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
clearTimeout(timer);
|
|
153
|
+
peer.off('step.dispatch', dispatch);
|
|
154
|
+
// If the dispatch deadline fired we started a child run that will never
|
|
155
|
+
// be worked -- cancel it so its journal doesn't stay indeterminate.
|
|
156
|
+
// Best-effort: the parent flow already surfaced the deadline via the
|
|
157
|
+
// rejected `completed` promise, so a cancel error here must not mask it.
|
|
158
|
+
if (dispatchExpired && childRunId !== undefined) {
|
|
159
|
+
try {
|
|
160
|
+
await journal.runCancel(childRunId);
|
|
161
|
+
}
|
|
162
|
+
catch { /* fail-open on cleanup */ }
|
|
163
|
+
}
|
|
164
|
+
peer.close();
|
|
165
|
+
await work?.catch(() => undefined);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function pathPart(value) {
|
|
169
|
+
return encodeURIComponent(value).replaceAll('.', '%2E');
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=authored-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authored-mcp.js","sourceRoot":"","sources":["../src/authored-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MemoryHelper } from '@relayflows/surface';
|
|
2
|
+
/** Stable across runs; disjoint from other flow files and other named flows. */
|
|
3
|
+
export declare function scriptMemoryScope(flowPath: string, name: string): string;
|
|
4
|
+
export declare function probeScriptMemory(): Promise<void>;
|
|
5
|
+
export declare function assertMemoryReachable(): Promise<void>;
|
|
6
|
+
export declare function authoredMemory(scope: string, assertOpen: () => void, enabled: boolean): MemoryHelper;
|
|
7
|
+
//# sourceMappingURL=authored-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authored-memory.d.ts","sourceRoot":"","sources":["../src/authored-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIxE;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAOvD;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3D;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,IAAI,EACtB,OAAO,EAAE,OAAO,GACf,YAAY,CAqBd"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { access, stat } from 'node:fs/promises';
|
|
3
|
+
import { constants } from 'node:fs';
|
|
4
|
+
import { dirname, join, resolve } from 'node:path';
|
|
5
|
+
import { AuthoredFlowExecutionError } from './authored-flow-error.js';
|
|
6
|
+
import { preflightMemory } from './preflight.js';
|
|
7
|
+
/** Stable across runs; disjoint from other flow files and other named flows. */
|
|
8
|
+
export function scriptMemoryScope(flowPath, name) {
|
|
9
|
+
const absolute = resolve(flowPath);
|
|
10
|
+
const key = createHash('sha256').update(JSON.stringify([absolute, name])).digest('hex');
|
|
11
|
+
return join(dirname(absolute), '.relayflows', 'memory', 'scripts', key);
|
|
12
|
+
}
|
|
13
|
+
export async function probeScriptMemory() {
|
|
14
|
+
const { defaultDbPath, openAiHist } = await import('ai-hist');
|
|
15
|
+
const path = defaultDbPath();
|
|
16
|
+
await access(path, constants.R_OK);
|
|
17
|
+
if (!(await stat(path)).isFile())
|
|
18
|
+
throw new Error('memory database must be a file');
|
|
19
|
+
const reader = await openAiHist({ dbPath: path, fallback: 'error' });
|
|
20
|
+
try {
|
|
21
|
+
reader.search('', { limit: 1 });
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
reader.close();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export async function assertMemoryReachable() {
|
|
28
|
+
const refusal = await preflightMemory(probeScriptMemory);
|
|
29
|
+
if (refusal)
|
|
30
|
+
throw new AuthoredFlowExecutionError('memory_unreachable', refusal.message);
|
|
31
|
+
}
|
|
32
|
+
export function authoredMemory(scope, assertOpen, enabled) {
|
|
33
|
+
async function read(action) {
|
|
34
|
+
assertOpen();
|
|
35
|
+
if (!enabled)
|
|
36
|
+
throw new AuthoredFlowExecutionError('unsupported_header', 'f.memory requires script memory; memory.script is false');
|
|
37
|
+
await assertMemoryReachable();
|
|
38
|
+
assertOpen();
|
|
39
|
+
const { openAiHist } = await import('ai-hist');
|
|
40
|
+
const reader = await openAiHist({ projectScope: scope, fallback: 'error' });
|
|
41
|
+
try {
|
|
42
|
+
return action(reader);
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
reader.close();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
recall: (query, options) => read(reader => reader.search(query, { ...options, project: scope })),
|
|
50
|
+
why: task => read(reader => {
|
|
51
|
+
const entry = reader.whyForTask(task);
|
|
52
|
+
return entry?.projectId === scope ? [entry] : [];
|
|
53
|
+
}),
|
|
54
|
+
async learn() {
|
|
55
|
+
assertOpen();
|
|
56
|
+
throw new AuthoredFlowExecutionError('unsupported_verb', 'f.memory.learn requires the follow-up journal-backed trajectory writer');
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=authored-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authored-memory.js","sourceRoot":"","sources":["../src/authored-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type LoadedPlugin } from './plugin-loader.js';
|
|
2
|
+
import type { PluginVerb } from './plugin-manifest.js';
|
|
3
|
+
import type { AuthoredBudget } from './authored-budget.js';
|
|
4
|
+
import type { JournalClient } from './journal-client.js';
|
|
5
|
+
import { AuthoredFlowExecutionError } from './authored-flow-error.js';
|
|
6
|
+
import type { AuthoredFlowJournalStep } from './authored-flow-executor.js';
|
|
7
|
+
export declare class PluginStepError extends AuthoredFlowExecutionError {
|
|
8
|
+
readonly diagnostic: string;
|
|
9
|
+
constructor(diagnostic: string, runId: string);
|
|
10
|
+
}
|
|
11
|
+
/** Helpers lower to an existing agent effect, never a fourth kernel primitive.
|
|
12
|
+
* The Plugin receipt lives in step.completed.output: { type, input, output, ... }.
|
|
13
|
+
* A private stream routes the step to this short-lived SDK worker exclusively.
|
|
14
|
+
*/
|
|
15
|
+
export declare function runPluginEffect(journal: JournalClient, flowName: string, id: string, plugin: LoadedPlugin, verb: PluginVerb, args: unknown, journalSteps: AuthoredFlowJournalStep[], budget: AuthoredBudget): Promise<unknown>;
|
|
16
|
+
//# sourceMappingURL=authored-plugin-effect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authored-plugin-effect.d.ts","sourceRoot":"","sources":["../src/authored-plugin-effect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAI3E,qBAAa,eAAgB,SAAQ,0BAA0B;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAGvD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAC5F,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,EAAE,MAAM,EAAE,cAAc,GAC7E,OAAO,CAAC,OAAO,CAAC,CAuHlB"}
|