@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
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { isIP } from "node:net";
|
|
3
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
4
|
+
import { claimRelayTask } from "./agent-relay-state.js";
|
|
5
|
+
import { canonicalize } from "./canonical.js";
|
|
6
|
+
import { isRecord, nonempty, readTaskReceipt, } from "./agent-relay-receipt.js";
|
|
7
|
+
export class AgentRelayTransportError extends Error {
|
|
8
|
+
cause;
|
|
9
|
+
constructor(message, cause) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.cause = cause;
|
|
12
|
+
this.name = "AgentRelayTransportError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function readAgentRelayEnv(env = process.env) {
|
|
16
|
+
const agentToken = env.RELAY_AGENT_TOKEN?.trim();
|
|
17
|
+
if (!agentToken)
|
|
18
|
+
throw new AgentRelayTransportError("Relay task transport requires a pre-provisioned RELAY_AGENT_TOKEN.");
|
|
19
|
+
return {
|
|
20
|
+
baseUrl: env.RELAY_BASE_URL?.trim() || "https://cast.agentrelay.com",
|
|
21
|
+
agentToken,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** Exact Relaycast #436 HTTP contract. Only terminal GET receipts can return. */
|
|
25
|
+
export async function runAgentRelayTask(request, options = {}) {
|
|
26
|
+
const env = options.agentToken
|
|
27
|
+
? {
|
|
28
|
+
baseUrl: options.baseUrl || "https://cast.agentrelay.com",
|
|
29
|
+
agentToken: options.agentToken,
|
|
30
|
+
}
|
|
31
|
+
: { ...readAgentRelayEnv(), ...options };
|
|
32
|
+
const base = new URL(env.baseUrl);
|
|
33
|
+
if (base.username ||
|
|
34
|
+
base.password ||
|
|
35
|
+
base.search ||
|
|
36
|
+
base.hash ||
|
|
37
|
+
base.pathname !== "/" ||
|
|
38
|
+
!["https:", "http:"].includes(base.protocol))
|
|
39
|
+
throw new AgentRelayTransportError("Invalid Relay task base URL");
|
|
40
|
+
const loopback = base.hostname === "[::1]" ||
|
|
41
|
+
(isIP(base.hostname) === 4 && base.hostname.startsWith("127."));
|
|
42
|
+
if (base.protocol !== "https:" && !loopback) {
|
|
43
|
+
throw new AgentRelayTransportError("Relay task credentials require HTTPS outside literal loopback addresses");
|
|
44
|
+
}
|
|
45
|
+
const baseUrl = base.origin;
|
|
46
|
+
const timeoutMs = request.timeoutMs ?? 86_400_000;
|
|
47
|
+
if (!Number.isSafeInteger(timeoutMs) ||
|
|
48
|
+
timeoutMs < 1 ||
|
|
49
|
+
timeoutMs > 86_400_000 ||
|
|
50
|
+
![
|
|
51
|
+
request.runId,
|
|
52
|
+
request.stepId,
|
|
53
|
+
request.idempotencyKey,
|
|
54
|
+
request.dataDir,
|
|
55
|
+
request.cli,
|
|
56
|
+
].every(nonempty)) {
|
|
57
|
+
throw new AgentRelayTransportError("Relay task requires durable dispatch identity and a valid deadline");
|
|
58
|
+
}
|
|
59
|
+
const pollMs = options.pollMs ?? 1000;
|
|
60
|
+
if (!Number.isFinite(pollMs) || pollMs < 1)
|
|
61
|
+
throw new AgentRelayTransportError("Invalid Relay task polling interval");
|
|
62
|
+
const doFetch = options.fetch ?? globalThis.fetch;
|
|
63
|
+
const outer = options.signal ?? new AbortController().signal;
|
|
64
|
+
let deadline = Date.now() + timeoutMs + 30_000;
|
|
65
|
+
let missingDeadline = Date.now() + 30_000;
|
|
66
|
+
async function http(path, body) {
|
|
67
|
+
for (;;) {
|
|
68
|
+
outer.throwIfAborted();
|
|
69
|
+
if (Date.now() >= deadline)
|
|
70
|
+
throw new AgentRelayTransportError("Relay task status unavailable before its reconciliation deadline");
|
|
71
|
+
const bounded = AbortSignal.any([
|
|
72
|
+
outer,
|
|
73
|
+
AbortSignal.timeout(Math.min(15_000, Math.max(1, deadline - Date.now()))),
|
|
74
|
+
]);
|
|
75
|
+
let response;
|
|
76
|
+
let value;
|
|
77
|
+
try {
|
|
78
|
+
response = await doFetch(new URL(path, baseUrl), {
|
|
79
|
+
method: body === undefined ? "GET" : "POST",
|
|
80
|
+
redirect: "error",
|
|
81
|
+
signal: bounded,
|
|
82
|
+
headers: {
|
|
83
|
+
authorization: `Bearer ${env.agentToken}`,
|
|
84
|
+
"content-type": "application/json",
|
|
85
|
+
...(body === undefined
|
|
86
|
+
? {}
|
|
87
|
+
: { "Idempotency-Key": request.idempotencyKey }),
|
|
88
|
+
},
|
|
89
|
+
...(body === undefined ? {} : { body: canonicalize(body) }),
|
|
90
|
+
});
|
|
91
|
+
if (response.status === 404 &&
|
|
92
|
+
body === undefined &&
|
|
93
|
+
path.includes("/invocations/")) {
|
|
94
|
+
if (Date.now() >= missingDeadline)
|
|
95
|
+
throw new AgentRelayTransportError("Relay task dispatch remains unconfirmed; no repeat POST is permitted");
|
|
96
|
+
}
|
|
97
|
+
else if (!response.ok &&
|
|
98
|
+
response.status !== 429 &&
|
|
99
|
+
response.status < 500) {
|
|
100
|
+
// Never copy untrusted response bodies, URLs, or tokens into diagnostics.
|
|
101
|
+
throw new AgentRelayTransportError(`Relay task request refused with HTTP ${response.status}`);
|
|
102
|
+
}
|
|
103
|
+
if (response.ok)
|
|
104
|
+
value = await response.json();
|
|
105
|
+
if (body !== undefined && !response.ok)
|
|
106
|
+
return {}; // ambiguous POST: GET only below
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
outer.throwIfAborted();
|
|
110
|
+
if (error instanceof AgentRelayTransportError)
|
|
111
|
+
throw error;
|
|
112
|
+
if (body !== undefined)
|
|
113
|
+
return {}; // response loss or invalid JSON never causes another POST
|
|
114
|
+
if (response?.ok && !bounded.aborted)
|
|
115
|
+
throw new AgentRelayTransportError("Relay task response was not valid JSON");
|
|
116
|
+
}
|
|
117
|
+
outer.throwIfAborted();
|
|
118
|
+
if (response?.ok && value !== undefined) {
|
|
119
|
+
if (!isRecord(value) || value.ok !== true || !isRecord(value.data))
|
|
120
|
+
throw new AgentRelayTransportError("Relay task response has an invalid data envelope");
|
|
121
|
+
return value.data;
|
|
122
|
+
}
|
|
123
|
+
await delay(pollMs, undefined, { signal: outer });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Resolving the agent is read-only. Pin identity before any invocation so a
|
|
127
|
+
// restarted runner cannot create a second task using another caller's key.
|
|
128
|
+
const agent = await http("/v1/agent");
|
|
129
|
+
if (!nonempty(agent.id))
|
|
130
|
+
throw new AgentRelayTransportError("Relay task caller identity is missing");
|
|
131
|
+
if (!nonempty(agent.workspace_id))
|
|
132
|
+
throw new AgentRelayTransportError("Relay task workspace identity is missing");
|
|
133
|
+
// Pinned action-invoke-v1 identity contract from Relaycast #436.
|
|
134
|
+
const invocationId = "inv_idem_" +
|
|
135
|
+
createHash("sha256")
|
|
136
|
+
.update([
|
|
137
|
+
"action-invoke-v1",
|
|
138
|
+
agent.workspace_id,
|
|
139
|
+
agent.id,
|
|
140
|
+
"task.run",
|
|
141
|
+
request.idempotencyKey,
|
|
142
|
+
].join("\0"))
|
|
143
|
+
.digest("hex");
|
|
144
|
+
const input = {
|
|
145
|
+
cli: request.cli,
|
|
146
|
+
task: request.task,
|
|
147
|
+
...(request.model === undefined ? {} : { model: request.model }),
|
|
148
|
+
...(request.worker_cwd === undefined
|
|
149
|
+
? {}
|
|
150
|
+
: { worker_cwd: request.worker_cwd }),
|
|
151
|
+
...(request.result_schema === undefined
|
|
152
|
+
? {}
|
|
153
|
+
: { result_schema: request.result_schema }),
|
|
154
|
+
task_context: {
|
|
155
|
+
run_id: request.runId,
|
|
156
|
+
step_id: request.stepId,
|
|
157
|
+
dispatch_id: request.idempotencyKey,
|
|
158
|
+
timeout_ms: timeoutMs,
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
const { claim, created } = await claimRelayTask(request.dataDir, {
|
|
162
|
+
version: 1,
|
|
163
|
+
baseUrl,
|
|
164
|
+
callerId: agent.id,
|
|
165
|
+
workspaceId: agent.workspace_id,
|
|
166
|
+
invocationId,
|
|
167
|
+
runId: request.runId,
|
|
168
|
+
stepId: request.stepId,
|
|
169
|
+
idempotencyKey: request.idempotencyKey,
|
|
170
|
+
input,
|
|
171
|
+
startedAt: Date.now(),
|
|
172
|
+
});
|
|
173
|
+
// A restarted runner may recover a terminal receipt after the task deadline.
|
|
174
|
+
// Give that read one bounded window; never reopen or extend the remote task.
|
|
175
|
+
deadline = Math.max(claim.startedAt + timeoutMs + 30_000, Date.now() + 15_000);
|
|
176
|
+
missingDeadline = claim.startedAt + 30_000;
|
|
177
|
+
if (created) {
|
|
178
|
+
const ack = await http("/v1/actions/task.run/invoke", { input });
|
|
179
|
+
if (Object.keys(ack).length &&
|
|
180
|
+
(ack.invocation_id !== invocationId ||
|
|
181
|
+
ack.action_name !== "task.run" ||
|
|
182
|
+
canonicalize(ack.input) !== canonicalize(input))) {
|
|
183
|
+
throw new AgentRelayTransportError("Relay task acknowledgment has mismatched invocation or input");
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
let previous;
|
|
187
|
+
for (;;) {
|
|
188
|
+
const value = await http(`/v1/actions/task.run/invocations/${encodeURIComponent(invocationId)}`);
|
|
189
|
+
if (value.caller_id !== agent.id)
|
|
190
|
+
throw new AgentRelayTransportError("Relay task receipt belongs to another caller");
|
|
191
|
+
const receipt = readTaskReceipt(value, invocationId, input, previous);
|
|
192
|
+
outer.throwIfAborted();
|
|
193
|
+
if (receipt.status === "completed" || receipt.status === "failed")
|
|
194
|
+
return receipt;
|
|
195
|
+
previous = receipt;
|
|
196
|
+
await delay(pollMs, undefined, { signal: outer });
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=agent-relay-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-relay-transport.js","sourceRoot":"","sources":["../src/agent-relay-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { JournalClient } from './journal-client.js';
|
|
2
|
+
import type { RunOutcome } from './protocol.js';
|
|
3
|
+
import type { KernelRunSpec } from './spec.js';
|
|
4
|
+
/** Serialized admission for the internal authored runner's separate step runs. */
|
|
5
|
+
export declare class AuthoredBudget {
|
|
6
|
+
private readonly limit;
|
|
7
|
+
private failed;
|
|
8
|
+
private tail;
|
|
9
|
+
private charges;
|
|
10
|
+
constructor(header: unknown);
|
|
11
|
+
execute<T>(journal: JournalClient, spec: KernelRunSpec, consume: (outcome: RunOutcome) => Promise<T>): Promise<T>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=authored-budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authored-budget.d.ts","sourceRoot":"","sources":["../src/authored-budget.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAoB,aAAa,EAAE,MAAM,WAAW,CAAC;AAEjE,kFAAkF;AAClF,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAuC;IACnD,OAAO,CAAC,OAAO,CAAmF;gBAEtF,MAAM,EAAE,OAAO;IASrB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CA8CxH"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { BudgetSyntaxError, parseBudget, toKernelBudget } from './budget.js';
|
|
2
|
+
import { AuthoredFlowExecutionError } from './authored-flow-error.js';
|
|
3
|
+
/** Serialized admission for the internal authored runner's separate step runs. */
|
|
4
|
+
export class AuthoredBudget {
|
|
5
|
+
limit;
|
|
6
|
+
failed = false;
|
|
7
|
+
tail = Promise.resolve();
|
|
8
|
+
charges = [];
|
|
9
|
+
constructor(header) {
|
|
10
|
+
try {
|
|
11
|
+
this.limit = header === undefined ? undefined : toKernelBudget(parseBudget(header));
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (error instanceof BudgetSyntaxError)
|
|
15
|
+
throw new AuthoredFlowExecutionError('budget_syntax_invalid', error.message);
|
|
16
|
+
throw error;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async execute(journal, spec, consume) {
|
|
20
|
+
if (this.limit === undefined)
|
|
21
|
+
return consume(await journal.runStart(spec));
|
|
22
|
+
const previous = this.tail;
|
|
23
|
+
let release;
|
|
24
|
+
this.tail = new Promise(resolve => { release = resolve; });
|
|
25
|
+
await previous;
|
|
26
|
+
try {
|
|
27
|
+
if (this.failed)
|
|
28
|
+
throw new AuthoredFlowExecutionError('step_failed', 'A prior budgeted step did not finish successfully.');
|
|
29
|
+
// Window selection follows journal timestamps, never the SDK host clock.
|
|
30
|
+
const day = this.charges.at(-1)?.day;
|
|
31
|
+
const total = this.charges.filter(c => this.limit.window !== 'day' || c.day === day)
|
|
32
|
+
.reduce((s, c) => ({ input: s.input + c.input, output: s.output + c.output, micro: s.micro + c.micro, ms: s.ms + c.ms }), { input: 0n, output: 0n, micro: 0n, ms: 0n });
|
|
33
|
+
const exactNumber = (n) => { if (n > BigInt(Number.MAX_SAFE_INTEGER))
|
|
34
|
+
throw new Error('budget counter overflow'); return Number(n); };
|
|
35
|
+
const outcome = await journal.runStart({ ...spec, budget: { ...this.limit, prior_spend: {
|
|
36
|
+
tokens_in: exactNumber(total.input), tokens_out: exactNumber(total.output),
|
|
37
|
+
dollars: `${total.micro / 1000000n}.${String(total.micro % 1000000n).padStart(6, '0')}`,
|
|
38
|
+
wallclock_ms: exactNumber(total.ms), ...(this.limit.window === 'day' && day !== undefined ? { day } : {}),
|
|
39
|
+
} } });
|
|
40
|
+
try {
|
|
41
|
+
if (outcome.completion_reason === 'budget_exceeded')
|
|
42
|
+
throw new AuthoredFlowExecutionError('step_failed', 'Flow budget exceeded before the next step.', 'budget_exceeded', outcome.run_id);
|
|
43
|
+
return await consume(outcome);
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
let seq = 1;
|
|
47
|
+
for (;;) {
|
|
48
|
+
const { entries } = await journal.journalRead(outcome.run_id, seq);
|
|
49
|
+
if (entries.length === 0)
|
|
50
|
+
break;
|
|
51
|
+
for (const raw of entries) {
|
|
52
|
+
const e = raw;
|
|
53
|
+
seq = e.seq + 1;
|
|
54
|
+
if (!['step.completed', 'memory.injected'].includes(e.entry_type))
|
|
55
|
+
continue;
|
|
56
|
+
const b = e.payload.budget;
|
|
57
|
+
if (b === undefined)
|
|
58
|
+
throw new Error('journal completion missing budget');
|
|
59
|
+
const [whole, fraction = ''] = b.dollars.split('.');
|
|
60
|
+
if (fraction.length > 6 && /[1-9]/.test(fraction.slice(6)))
|
|
61
|
+
throw new Error('budget accounting requires microdollar precision');
|
|
62
|
+
this.charges.push({ input: BigInt(b.tokens_in), output: BigInt(b.tokens_out),
|
|
63
|
+
micro: BigInt(whole) * 1000000n + BigInt(fraction.slice(0, 6).padEnd(6, '0')),
|
|
64
|
+
ms: BigInt(e.payload.spend?.wallclock_ms ?? 0), day: Math.floor(e.at_ms / 86_400_000) });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
this.failed = true;
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
release();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=authored-budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authored-budget.js","sourceRoot":"","sources":["../src/authored-budget.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +1,9 @@
|
|
|
1
|
-
import type { CheckFailureKind } from './failure-kinds.js';
|
|
2
1
|
import type { CompletionReason as ProtocolCompletionReason, RunCompletionReason as ProtocolRunCompletionReason } from './protocol.js';
|
|
3
|
-
export type AuthoredFlowExecutionErrorCode = 'agent_cli_unresolved' | 'agent_parked' | 'duplicate_completion' | 'journal_protocol_violation' | 'missing_completion' | 'operation_after_completion' | 'operation_callback_failed' | 'step_failed' | 'unsupported_completion' | 'unsupported_gate' | 'unsupported_header' | 'unsettled_derived_work' | 'unsupported_promise_lifecycle' | 'unsupported_workspace_permission' | 'unawaited_step' | 'unsupported_verb';
|
|
2
|
+
export type AuthoredFlowExecutionErrorCode = 'helper_provider.mount_required' | 'helper_provider.unsupported' | 'helper_slack.credential_missing' | 'helper_slack.mount_required' | 'budget_syntax_invalid' | 'budget_missing_price' | 'agent_cli_unresolved' | 'agent_parked' | 'llm_cli_unresolved' | 'llm_parked' | 'duplicate_completion' | 'journal_protocol_violation' | 'missing_completion' | 'memory_unreachable' | 'operation_after_completion' | 'operation_callback_failed' | 'step_failed' | 'lease_exceeded' | 'unsupported_completion' | 'unsupported_gate' | 'unsupported_header' | 'unsettled_derived_work' | 'unsupported_promise_lifecycle' | 'unsupported_workspace_permission' | 'unawaited_step' | 'unsupported_verb';
|
|
4
3
|
export declare class AuthoredFlowExecutionError extends Error {
|
|
5
4
|
readonly code: AuthoredFlowExecutionErrorCode;
|
|
6
5
|
readonly completionReason?: (ProtocolCompletionReason | ProtocolRunCompletionReason) | undefined;
|
|
7
6
|
readonly runId?: string | undefined;
|
|
8
|
-
|
|
9
|
-
* Set only for `code === 'agent_cli_unresolved'`: the specific preflight
|
|
10
|
-
* refusal kind (`cli_missing`, `model_unknown`, `model_unavailable`, ...)
|
|
11
|
-
* `checkAuthoredFlow` actually produced, so a caller can distinguish a bad
|
|
12
|
-
* model declaration from a missing CLI the same way the declarative
|
|
13
|
-
* `flows check` path's `report.diagnostics[].kind` already lets it —
|
|
14
|
-
* collapsing every refusal to one generic code would lose that taxonomy.
|
|
15
|
-
*/
|
|
16
|
-
readonly refusalKind?: CheckFailureKind | undefined;
|
|
17
|
-
constructor(code: AuthoredFlowExecutionErrorCode, message: string, completionReason?: (ProtocolCompletionReason | ProtocolRunCompletionReason) | undefined, runId?: string | undefined,
|
|
18
|
-
/**
|
|
19
|
-
* Set only for `code === 'agent_cli_unresolved'`: the specific preflight
|
|
20
|
-
* refusal kind (`cli_missing`, `model_unknown`, `model_unavailable`, ...)
|
|
21
|
-
* `checkAuthoredFlow` actually produced, so a caller can distinguish a bad
|
|
22
|
-
* model declaration from a missing CLI the same way the declarative
|
|
23
|
-
* `flows check` path's `report.diagnostics[].kind` already lets it —
|
|
24
|
-
* collapsing every refusal to one generic code would lose that taxonomy.
|
|
25
|
-
*/
|
|
26
|
-
refusalKind?: CheckFailureKind | undefined);
|
|
7
|
+
constructor(code: AuthoredFlowExecutionErrorCode, message: string, completionReason?: (ProtocolCompletionReason | ProtocolRunCompletionReason) | undefined, runId?: string | undefined);
|
|
27
8
|
}
|
|
28
9
|
//# sourceMappingURL=authored-flow-error.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authored-flow-error.d.ts","sourceRoot":"","sources":["../src/authored-flow-error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"authored-flow-error.d.ts","sourceRoot":"","sources":["../src/authored-flow-error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,IAAI,wBAAwB,EAC5C,mBAAmB,IAAI,2BAA2B,EACnD,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,8BAA8B,GACtC,gCAAgC,GAChC,6BAA6B,GAC7B,iCAAiC,GACjC,6BAA6B,GAC7B,uBAAuB,GACvB,sBAAsB,GACtB,sBAAsB,GACtB,cAAc,GACd,oBAAoB,GACpB,YAAY,GACZ,sBAAsB,GACtB,4BAA4B,GAC5B,oBAAoB,GACpB,oBAAoB,GACpB,4BAA4B,GAC5B,2BAA2B,GAC3B,aAAa,GACb,gBAAgB,GAChB,wBAAwB,GACxB,kBAAkB,GAClB,oBAAoB,GACpB,wBAAwB,GACxB,+BAA+B,GAC/B,kCAAkC,GAClC,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB,qBAAa,0BAA2B,SAAQ,KAAK;IAEjD,QAAQ,CAAC,IAAI,EAAE,8BAA8B;IAE7C,QAAQ,CAAC,gBAAgB,CAAC,GAAE,wBAAwB,GAAG,2BAA2B;IAClF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM;gBAHd,IAAI,EAAE,8BAA8B,EAC7C,OAAO,EAAE,MAAM,EACN,gBAAgB,CAAC,GAAE,wBAAwB,GAAG,2BAA2B,aAAA,EACzE,KAAK,CAAC,EAAE,MAAM,YAAA;CAK1B"}
|
|
@@ -2,22 +2,11 @@ export class AuthoredFlowExecutionError extends Error {
|
|
|
2
2
|
code;
|
|
3
3
|
completionReason;
|
|
4
4
|
runId;
|
|
5
|
-
|
|
6
|
-
constructor(code, message, completionReason, runId,
|
|
7
|
-
/**
|
|
8
|
-
* Set only for `code === 'agent_cli_unresolved'`: the specific preflight
|
|
9
|
-
* refusal kind (`cli_missing`, `model_unknown`, `model_unavailable`, ...)
|
|
10
|
-
* `checkAuthoredFlow` actually produced, so a caller can distinguish a bad
|
|
11
|
-
* model declaration from a missing CLI the same way the declarative
|
|
12
|
-
* `flows check` path's `report.diagnostics[].kind` already lets it —
|
|
13
|
-
* collapsing every refusal to one generic code would lose that taxonomy.
|
|
14
|
-
*/
|
|
15
|
-
refusalKind) {
|
|
5
|
+
constructor(code, message, completionReason, runId) {
|
|
16
6
|
super(`${code}: ${message}`);
|
|
17
7
|
this.code = code;
|
|
18
8
|
this.completionReason = completionReason;
|
|
19
9
|
this.runId = runId;
|
|
20
|
-
this.refusalKind = refusalKind;
|
|
21
10
|
this.name = 'AuthoredFlowExecutionError';
|
|
22
11
|
}
|
|
23
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authored-flow-error.js","sourceRoot":"","sources":["../src/authored-flow-error.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"authored-flow-error.js","sourceRoot":"","sources":["../src/authored-flow-error.ts"],"names":[],"mappings":"AAiCA,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAExC;IAEA;IACA;IAJX,YACW,IAAoC,EAC7C,OAAe,EACN,gBAAyE,EACzE,KAAc;QAEvB,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QALpB,SAAI,GAAJ,IAAI,CAAgC;QAEpC,qBAAgB,GAAhB,gBAAgB,CAAyD;QACzE,UAAK,GAAL,KAAK,CAAS;QAGvB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type FlowCompletionReason } from '@relayflows/surface';
|
|
2
|
+
import { type FlowHandle } from '@relayflows/surface/runtime';
|
|
3
|
+
import { type ProgressEvent } from './progress.js';
|
|
2
4
|
import type { GetFlowDefinition } from './authored-flow-loader.js';
|
|
3
|
-
import {
|
|
5
|
+
import type { RunLifecycleOptions } from './cli/run.js';
|
|
4
6
|
import { AuthoredFlowExecutionError, type AuthoredFlowExecutionErrorCode } from './authored-flow-error.js';
|
|
5
7
|
import { JournalClient } from './journal-client.js';
|
|
6
|
-
import type { CompletionReason as ProtocolCompletionReason
|
|
8
|
+
import type { CompletionReason as ProtocolCompletionReason } from './protocol.js';
|
|
7
9
|
export { AuthoredFlowExecutionError, type AuthoredFlowExecutionErrorCode };
|
|
8
10
|
export interface AuthoredFlowJournalStep {
|
|
9
11
|
readonly id: string;
|
|
@@ -12,7 +14,7 @@ export interface AuthoredFlowJournalStep {
|
|
|
12
14
|
}
|
|
13
15
|
export interface AuthoredFlowExecutionResult {
|
|
14
16
|
readonly name: string;
|
|
15
|
-
readonly completionReason:
|
|
17
|
+
readonly completionReason: FlowCompletionReason;
|
|
16
18
|
readonly journalSteps: readonly AuthoredFlowJournalStep[];
|
|
17
19
|
}
|
|
18
20
|
/**
|
|
@@ -20,9 +22,9 @@ export interface AuthoredFlowExecutionResult {
|
|
|
20
22
|
*
|
|
21
23
|
* This is deliberately not exported by the SDK package: without a durable
|
|
22
24
|
* authored root, it is not a resumable public runner. The seam is narrow: an
|
|
23
|
-
*
|
|
24
|
-
* `f.done("success")`.
|
|
25
|
-
*
|
|
25
|
+
* flow with an optional budget may await `f.run`, `f.llm`, and `f.agent` steps and must
|
|
26
|
+
* finish with `f.done("success")` or `f.done("needs_human")`. Each step and the terminal marker is
|
|
27
|
+
* a compiled spec submitted through
|
|
26
28
|
* `JournalClient`; values are read back from `step.completed` journal entries.
|
|
27
29
|
* Unsupported headers, verbs, gates, or completion lowering fail closed.
|
|
28
30
|
*/
|
|
@@ -34,6 +36,8 @@ export interface ExecuteAuthoredFlowOptions {
|
|
|
34
36
|
* `getDefinition` instead; see authored-flow-loader.ts's comment on why.
|
|
35
37
|
*/
|
|
36
38
|
readonly getDefinition?: GetFlowDefinition;
|
|
39
|
+
/** Helper receipt and mock-writeback storage; CLI passes its daemon data directory. */
|
|
40
|
+
readonly dataDir?: string;
|
|
37
41
|
/**
|
|
38
42
|
* The flow file's own path — passed straight to `checkAuthoredFlow`
|
|
39
43
|
* (cli/check.ts) so `f.agent` resolves a CLI the same way a declarative
|
|
@@ -49,6 +53,8 @@ export interface ExecuteAuthoredFlowOptions {
|
|
|
49
53
|
/** Passed straight through to classifyOutcome (cli/run.ts) for f.agent's wait. */
|
|
50
54
|
readonly signal?: RunLifecycleOptions['signal'];
|
|
51
55
|
readonly onWait?: RunLifecycleOptions['onWait'];
|
|
56
|
+
readonly onProgress?: (event: ProgressEvent) => void;
|
|
57
|
+
readonly localAgentStream?: string;
|
|
52
58
|
}
|
|
53
59
|
export declare function executeAuthoredFlow<Input = undefined>(handle: FlowHandle, journal: JournalClient, input?: Input, options?: ExecuteAuthoredFlowOptions): Promise<AuthoredFlowExecutionResult>;
|
|
54
60
|
//# sourceMappingURL=authored-flow-executor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authored-flow-executor.d.ts","sourceRoot":"","sources":["../src/authored-flow-executor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"authored-flow-executor.d.ts","sourceRoot":"","sources":["../src/authored-flow-executor.ts"],"names":[],"mappings":"AAcA,OAAO,EAML,KAAK,oBAAoB,EAG1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAmD,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE/G,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,0BAA0B,EAC1B,KAAK,8BAA8B,EACpC,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EACV,gBAAgB,IAAI,wBAAwB,EAE7C,MAAM,eAAe,CAAC;AAoBvB,OAAO,EAAE,0BAA0B,EAAE,KAAK,8BAA8B,EAAE,CAAC;AAE3E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;CACrD;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAC3D;AASD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAC3C,uFAAuF;IACvF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAChD,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,wBAAsB,mBAAmB,CAAC,KAAK,GAAG,SAAS,EACzD,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,aAAa,EACtB,KAAK,CAAC,EAAE,KAAK,EACb,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,2BAA2B,CAAC,CAsQtC"}
|