@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,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* First-class headless adapter contract (flows#141).
|
|
3
|
+
*
|
|
4
|
+
* Every supported agent CLI ships one implementation. `worker-cli.ts` and
|
|
5
|
+
* `cli/check.ts` dispatch through the registry in `./index.ts` — never string
|
|
6
|
+
* formatting against per-CLI knowledge inline. Adding a new CLI is one new
|
|
7
|
+
* file that implements this interface.
|
|
8
|
+
*
|
|
9
|
+
* Behavior-preserving migration: the exported functions in `cli-adapter.ts`
|
|
10
|
+
* (`agentExecution`, `llmExecution`, `authenticationProbe`,
|
|
11
|
+
* `modelReadinessProbe`, `adapterIdentification`) now delegate to the
|
|
12
|
+
* registered adapter for the resolved kind, so callers don't change.
|
|
13
|
+
*/
|
|
14
|
+
export interface CliInvocation {
|
|
15
|
+
args: string[];
|
|
16
|
+
timeoutMs: number;
|
|
17
|
+
/** Set only for wrapper readiness probes; raw providers receive a model flag. */
|
|
18
|
+
modelEnv?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface CliAdapterIdentification {
|
|
21
|
+
invocation: CliInvocation;
|
|
22
|
+
expectedStdout?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The declared, per-CLI headless contract. Members intentionally mirror the
|
|
26
|
+
* function-scoped predecessors in `cli-adapter.ts` so migration is mechanical.
|
|
27
|
+
*/
|
|
28
|
+
export interface HeadlessAdapter {
|
|
29
|
+
/** Identity of this adapter — matches CliAdapterKind for registry keys. */
|
|
30
|
+
readonly kind: string;
|
|
31
|
+
/** Shape-check invocation before classifying an auth failure. */
|
|
32
|
+
buildIdentification(): CliAdapterIdentification;
|
|
33
|
+
/** Non-interactive auth-status probe. */
|
|
34
|
+
buildAuthProbe(): CliInvocation;
|
|
35
|
+
/**
|
|
36
|
+
* Real, noninteractive model round-trip. Providers hand the model via a
|
|
37
|
+
* native flag; wrappers hand it via the explicitly identified environment
|
|
38
|
+
* contract on `modelEnv`.
|
|
39
|
+
*/
|
|
40
|
+
buildModelReadinessProbe(model: string): CliInvocation;
|
|
41
|
+
/** Agent-step worker argv for an instruction under an optional model. */
|
|
42
|
+
buildAgentInvocation(instruction: string, model?: string): CliInvocation;
|
|
43
|
+
/** LLM-step worker argv for a prompt under an optional model. */
|
|
44
|
+
buildLlmInvocation(prompt: string, model?: string): CliInvocation;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,aAAa,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,iEAAiE;IACjE,mBAAmB,IAAI,wBAAwB,CAAC;IAEhD,yCAAyC;IACzC,cAAc,IAAI,aAAa,CAAC;IAEhC;;;;OAIG;IACH,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC;IAEvD,yEAAyE;IACzE,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IAEzE,iEAAiE;IACjE,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;CACnE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* First-class headless adapter contract (flows#141).
|
|
3
|
+
*
|
|
4
|
+
* Every supported agent CLI ships one implementation. `worker-cli.ts` and
|
|
5
|
+
* `cli/check.ts` dispatch through the registry in `./index.ts` — never string
|
|
6
|
+
* formatting against per-CLI knowledge inline. Adding a new CLI is one new
|
|
7
|
+
* file that implements this interface.
|
|
8
|
+
*
|
|
9
|
+
* Behavior-preserving migration: the exported functions in `cli-adapter.ts`
|
|
10
|
+
* (`agentExecution`, `llmExecution`, `authenticationProbe`,
|
|
11
|
+
* `modelReadinessProbe`, `adapterIdentification`) now delegate to the
|
|
12
|
+
* registered adapter for the resolved kind, so callers don't change.
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { HeadlessAdapter } from './base.js';
|
|
2
|
+
/** Claude Code CLI headless contract. Wire and behavior identical to the
|
|
3
|
+
* pre-#141 inline shape in `cli-adapter.ts` — only the packaging changed. */
|
|
4
|
+
export declare const claudeAdapter: HeadlessAdapter;
|
|
5
|
+
//# sourceMappingURL=claude.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,WAAW,CAAC;AAInB;8EAC8E;AAC9E,eAAO,MAAM,aAAa,EAAE,eA4C3B,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const MODEL_PROBE_PROMPT = 'Reply with exactly RELAYFLOWS_MODEL_READY and nothing else.';
|
|
2
|
+
/** Claude Code CLI headless contract. Wire and behavior identical to the
|
|
3
|
+
* pre-#141 inline shape in `cli-adapter.ts` — only the packaging changed. */
|
|
4
|
+
export const claudeAdapter = {
|
|
5
|
+
kind: 'claude',
|
|
6
|
+
buildIdentification() {
|
|
7
|
+
return { invocation: { args: ['auth', 'status', '--help'], timeoutMs: 10_000 } };
|
|
8
|
+
},
|
|
9
|
+
buildAuthProbe() {
|
|
10
|
+
return { args: ['auth', 'status'], timeoutMs: 10_000 };
|
|
11
|
+
},
|
|
12
|
+
buildModelReadinessProbe(model) {
|
|
13
|
+
return {
|
|
14
|
+
args: [
|
|
15
|
+
'-p', '--model', model, '--tools', '', '--no-session-persistence',
|
|
16
|
+
MODEL_PROBE_PROMPT,
|
|
17
|
+
],
|
|
18
|
+
timeoutMs: 60_000,
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
buildAgentInvocation(instruction, model) {
|
|
22
|
+
return {
|
|
23
|
+
args: [
|
|
24
|
+
'-p',
|
|
25
|
+
// Symmetric to codex's --dangerously-bypass-approvals-and-sandbox: in
|
|
26
|
+
// agent mode the flow explicitly delegates writes. Without this
|
|
27
|
+
// claude's headless mode prompts for tool approval, gets no TTY,
|
|
28
|
+
// and completes "successfully" without touching files.
|
|
29
|
+
'--dangerously-skip-permissions',
|
|
30
|
+
...(model === undefined ? [] : ['--model', model]),
|
|
31
|
+
instruction,
|
|
32
|
+
],
|
|
33
|
+
timeoutMs: 0,
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
buildLlmInvocation(prompt, model) {
|
|
37
|
+
return {
|
|
38
|
+
args: ['-p', '--tools', '', '--no-session-persistence',
|
|
39
|
+
...(model === undefined ? [] : ['--model', model]), prompt],
|
|
40
|
+
timeoutMs: 0,
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAMA,MAAM,kBAAkB,GAAG,6DAA6D,CAAC;AAEzF;8EAC8E;AAC9E,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,IAAI,EAAE,QAAQ;IAEd,mBAAmB;QACjB,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACnF,CAAC;IAED,cAAc;QACZ,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACzD,CAAC;IAED,wBAAwB,CAAC,KAAa;QACpC,OAAO;YACL,IAAI,EAAE;gBACJ,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,0BAA0B;gBACjE,kBAAkB;aACnB;YACD,SAAS,EAAE,MAAM;SAClB,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,WAAmB,EAAE,KAAc;QACtD,OAAO;YACL,IAAI,EAAE;gBACJ,IAAI;gBACJ,sEAAsE;gBACtE,gEAAgE;gBAChE,iEAAiE;gBACjE,uDAAuD;gBACvD,gCAAgC;gBAChC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAClD,WAAW;aACZ;YACD,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,MAAc,EAAE,KAAc;QAC/C,OAAO;YACL,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,0BAA0B;gBACpD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;YAC7D,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { HeadlessAdapter } from './base.js';
|
|
2
|
+
/** OpenAI Codex CLI headless contract. Behavior identical to the pre-#141
|
|
3
|
+
* inline shape in `cli-adapter.ts` — only the packaging changed. */
|
|
4
|
+
export declare const codexAdapter: HeadlessAdapter;
|
|
5
|
+
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,WAAW,CAAC;AAInB;qEACqE;AACrE,eAAO,MAAM,YAAY,EAAE,eA6C1B,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
const MODEL_PROBE_PROMPT = 'Reply with exactly RELAYFLOWS_MODEL_READY and nothing else.';
|
|
2
|
+
/** OpenAI Codex CLI headless contract. Behavior identical to the pre-#141
|
|
3
|
+
* inline shape in `cli-adapter.ts` — only the packaging changed. */
|
|
4
|
+
export const codexAdapter = {
|
|
5
|
+
kind: 'codex',
|
|
6
|
+
buildIdentification() {
|
|
7
|
+
return { invocation: { args: ['login', 'status', '--help'], timeoutMs: 10_000 } };
|
|
8
|
+
},
|
|
9
|
+
buildAuthProbe() {
|
|
10
|
+
return { args: ['login', 'status'], timeoutMs: 10_000 };
|
|
11
|
+
},
|
|
12
|
+
buildModelReadinessProbe(model) {
|
|
13
|
+
return {
|
|
14
|
+
args: [
|
|
15
|
+
'exec', '--ephemeral', '--sandbox', 'read-only', '--skip-git-repo-check',
|
|
16
|
+
'--model', model, MODEL_PROBE_PROMPT,
|
|
17
|
+
],
|
|
18
|
+
timeoutMs: 60_000,
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
buildAgentInvocation(instruction, model) {
|
|
22
|
+
return {
|
|
23
|
+
args: [
|
|
24
|
+
'exec', '--ephemeral', '--skip-git-repo-check',
|
|
25
|
+
// Agent-mode is where the flow explicitly delegates code changes to
|
|
26
|
+
// the CLI. Without this flag codex prompts for approval on every
|
|
27
|
+
// write, gets nothing (no TTY), and completes "successfully" without
|
|
28
|
+
// touching files — the dogfood no-op failure mode. LLM-mode stays
|
|
29
|
+
// read-only and does NOT get the bypass.
|
|
30
|
+
'--dangerously-bypass-approvals-and-sandbox',
|
|
31
|
+
...(model === undefined ? [] : ['--model', model]),
|
|
32
|
+
instruction,
|
|
33
|
+
],
|
|
34
|
+
timeoutMs: 0,
|
|
35
|
+
};
|
|
36
|
+
},
|
|
37
|
+
buildLlmInvocation(prompt, model) {
|
|
38
|
+
return {
|
|
39
|
+
args: ['exec', '--ephemeral', '--sandbox', 'read-only', '--skip-git-repo-check',
|
|
40
|
+
...(model === undefined ? [] : ['--model', model]), prompt],
|
|
41
|
+
timeoutMs: 0,
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAMA,MAAM,kBAAkB,GAAG,6DAA6D,CAAC;AAEzF;qEACqE;AACrE,MAAM,CAAC,MAAM,YAAY,GAAoB;IAC3C,IAAI,EAAE,OAAO;IAEb,mBAAmB;QACjB,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACpF,CAAC;IAED,cAAc;QACZ,OAAO,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAC1D,CAAC;IAED,wBAAwB,CAAC,KAAa;QACpC,OAAO;YACL,IAAI,EAAE;gBACJ,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,uBAAuB;gBACxE,SAAS,EAAE,KAAK,EAAE,kBAAkB;aACrC;YACD,SAAS,EAAE,MAAM;SAClB,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,WAAmB,EAAE,KAAc;QACtD,OAAO;YACL,IAAI,EAAE;gBACJ,MAAM,EAAE,aAAa,EAAE,uBAAuB;gBAC9C,oEAAoE;gBACpE,iEAAiE;gBACjE,qEAAqE;gBACrE,kEAAkE;gBAClE,yCAAyC;gBACzC,4CAA4C;gBAC5C,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAClD,WAAW;aACZ;YACD,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,MAAc,EAAE,KAAc;QAC/C,OAAO;YACL,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,uBAAuB;gBAC7E,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;YAC7D,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { claudeAdapter } from './claude.js';
|
|
2
|
+
import { codexAdapter } from './codex.js';
|
|
3
|
+
import { wrapperAdapter } from './wrapper.js';
|
|
4
|
+
import type { HeadlessAdapter } from './base.js';
|
|
5
|
+
export type CliAdapterKind = 'claude' | 'codex' | 'relayflows-wrapper-v1';
|
|
6
|
+
/** Select the adapter for the resolved executable basename. */
|
|
7
|
+
export declare function resolveAdapter(executable: string): HeadlessAdapter;
|
|
8
|
+
/** Backward-compatible kind lookup for callers still speaking string-tag lang. */
|
|
9
|
+
export declare function resolveAdapterKind(executable: string): CliAdapterKind;
|
|
10
|
+
/** Registered adapters by kind (read-only view for tests and diagnostics). */
|
|
11
|
+
export declare function registeredAdapters(): Readonly<Record<CliAdapterKind, HeadlessAdapter>>;
|
|
12
|
+
export { claudeAdapter, codexAdapter, wrapperAdapter };
|
|
13
|
+
export type { HeadlessAdapter, CliInvocation, CliAdapterIdentification } from './base.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,uBAAuB,CAAC;AAS1E,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAKlE;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAErE;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,IAAI,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAEtF;AAED,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { basename } from 'node:path';
|
|
2
|
+
import { claudeAdapter } from './claude.js';
|
|
3
|
+
import { codexAdapter } from './codex.js';
|
|
4
|
+
import { wrapperAdapter } from './wrapper.js';
|
|
5
|
+
/** The registered adapter set. Adding a CLI is adding one file + one entry. */
|
|
6
|
+
const ADAPTERS = {
|
|
7
|
+
claude: claudeAdapter,
|
|
8
|
+
codex: codexAdapter,
|
|
9
|
+
'relayflows-wrapper-v1': wrapperAdapter,
|
|
10
|
+
};
|
|
11
|
+
/** Select the adapter for the resolved executable basename. */
|
|
12
|
+
export function resolveAdapter(executable) {
|
|
13
|
+
const name = basename(executable).replace(/\.exe$/i, '');
|
|
14
|
+
if (name === 'claude')
|
|
15
|
+
return ADAPTERS.claude;
|
|
16
|
+
if (name === 'codex')
|
|
17
|
+
return ADAPTERS.codex;
|
|
18
|
+
return ADAPTERS['relayflows-wrapper-v1'];
|
|
19
|
+
}
|
|
20
|
+
/** Backward-compatible kind lookup for callers still speaking string-tag lang. */
|
|
21
|
+
export function resolveAdapterKind(executable) {
|
|
22
|
+
return resolveAdapter(executable).kind;
|
|
23
|
+
}
|
|
24
|
+
/** Registered adapters by kind (read-only view for tests and diagnostics). */
|
|
25
|
+
export function registeredAdapters() {
|
|
26
|
+
return ADAPTERS;
|
|
27
|
+
}
|
|
28
|
+
export { claudeAdapter, codexAdapter, wrapperAdapter };
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAK9C,+EAA+E;AAC/E,MAAM,QAAQ,GAA4C;IACxD,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,YAAY;IACnB,uBAAuB,EAAE,cAAc;CACxC,CAAC;AAEF,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC,MAAM,CAAC;IAC9C,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;IAC5C,OAAO,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAC3C,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC,IAAsB,CAAC;AAC3D,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB;IAChC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HeadlessAdapter } from './base.js';
|
|
2
|
+
/**
|
|
3
|
+
* `relayflows-adapter-v1` identifies a per-flow wrapper script — the pre-#141
|
|
4
|
+
* per-flow shim shape. The wrapper answers a probe with a known token; agent
|
|
5
|
+
* and llm execution flow through `runWrapperSession`, so this adapter refuses
|
|
6
|
+
* to construct a direct-argv invocation for them.
|
|
7
|
+
*/
|
|
8
|
+
export declare const WRAPPER_IDENTIFY_ARG = "--relayflows-adapter-v1";
|
|
9
|
+
export declare const WRAPPER_IDENTIFY_TOKEN = "relayflows-agent-cli-v1";
|
|
10
|
+
export declare const WRAPPER_EXECUTE_TOKEN = "relayflows-agent-cli-v1-execute";
|
|
11
|
+
export declare const wrapperAdapter: HeadlessAdapter;
|
|
12
|
+
//# sourceMappingURL=wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../src/adapters/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,WAAW,CAAC;AAEnB;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAC9D,eAAO,MAAM,sBAAsB,4BAA4B,CAAC;AAChE,eAAO,MAAM,qBAAqB,oCAAoC,CAAC;AAEvE,eAAO,MAAM,cAAc,EAAE,eAyB5B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `relayflows-adapter-v1` identifies a per-flow wrapper script — the pre-#141
|
|
3
|
+
* per-flow shim shape. The wrapper answers a probe with a known token; agent
|
|
4
|
+
* and llm execution flow through `runWrapperSession`, so this adapter refuses
|
|
5
|
+
* to construct a direct-argv invocation for them.
|
|
6
|
+
*/
|
|
7
|
+
export const WRAPPER_IDENTIFY_ARG = '--relayflows-adapter-v1';
|
|
8
|
+
export const WRAPPER_IDENTIFY_TOKEN = 'relayflows-agent-cli-v1';
|
|
9
|
+
export const WRAPPER_EXECUTE_TOKEN = 'relayflows-agent-cli-v1-execute';
|
|
10
|
+
export const wrapperAdapter = {
|
|
11
|
+
kind: 'relayflows-wrapper-v1',
|
|
12
|
+
buildIdentification() {
|
|
13
|
+
return {
|
|
14
|
+
invocation: { args: [WRAPPER_IDENTIFY_ARG], timeoutMs: 10_000 },
|
|
15
|
+
expectedStdout: WRAPPER_IDENTIFY_TOKEN,
|
|
16
|
+
};
|
|
17
|
+
},
|
|
18
|
+
buildAuthProbe() {
|
|
19
|
+
return { args: ['auth', 'status'], timeoutMs: 10_000 };
|
|
20
|
+
},
|
|
21
|
+
buildModelReadinessProbe(model) {
|
|
22
|
+
return { args: ['auth', 'status'], timeoutMs: 60_000, modelEnv: model };
|
|
23
|
+
},
|
|
24
|
+
buildAgentInvocation() {
|
|
25
|
+
throw new Error('custom wrapper execution requires the runAgentCli same-process session');
|
|
26
|
+
},
|
|
27
|
+
buildLlmInvocation() {
|
|
28
|
+
throw new Error('custom wrapper execution requires the same-process session');
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../src/adapters/wrapper.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAChE,MAAM,CAAC,MAAM,qBAAqB,GAAG,iCAAiC,CAAC;AAEvE,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,IAAI,EAAE,uBAAuB;IAE7B,mBAAmB;QACjB,OAAO;YACL,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE;YAC/D,cAAc,EAAE,sBAAsB;SACvC,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACzD,CAAC;IAED,wBAAwB,CAAC,KAAa;QACpC,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC1E,CAAC;IAED,oBAAoB;QAClB,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED,kBAAkB;QAChB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const isRecord: (value: unknown) => value is Record<string, unknown>;
|
|
2
|
+
export declare const nonempty: (value: unknown) => value is string;
|
|
3
|
+
export interface RelayTaskExecution {
|
|
4
|
+
execution_id: string;
|
|
5
|
+
run_id: string;
|
|
6
|
+
step_id: string;
|
|
7
|
+
dispatch_id: string;
|
|
8
|
+
deadline: string;
|
|
9
|
+
worker_generation?: string;
|
|
10
|
+
accepted_at?: string;
|
|
11
|
+
accounting?: Record<string, number>;
|
|
12
|
+
}
|
|
13
|
+
export interface RelayTaskReceipt {
|
|
14
|
+
invocation_id: string;
|
|
15
|
+
action_name: "task.run";
|
|
16
|
+
status: "pending" | "dispatched" | "running" | "completed" | "failed";
|
|
17
|
+
task_execution: RelayTaskExecution;
|
|
18
|
+
output: unknown;
|
|
19
|
+
error: string | null;
|
|
20
|
+
completed_at: string | null;
|
|
21
|
+
}
|
|
22
|
+
/** GET is authoritative. A spawn/POST acknowledgment is never a task result. */
|
|
23
|
+
export declare function readTaskReceipt(value: unknown, invocationId: string, input: Record<string, unknown>, previous?: RelayTaskReceipt): RelayTaskReceipt;
|
|
24
|
+
//# sourceMappingURL=agent-relay-receipt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-relay-receipt.d.ts","sourceRoot":"","sources":["../src/agent-relay-receipt.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CACH,CAAC;AACvE,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MACJ,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AACD,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,UAAU,CAAC;IACxB,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtE,cAAc,EAAE,kBAAkB,CAAC;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,gBAAgB,CAsFlB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { canonicalize } from "./canonical.js";
|
|
2
|
+
export const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3
|
+
export const nonempty = (value) => typeof value === "string" && value.length > 0;
|
|
4
|
+
/** GET is authoritative. A spawn/POST acknowledgment is never a task result. */
|
|
5
|
+
export function readTaskReceipt(value, invocationId, input, previous) {
|
|
6
|
+
const context = input.task_context;
|
|
7
|
+
if (!isRecord(value) ||
|
|
8
|
+
value.invocation_id !== invocationId ||
|
|
9
|
+
value.action_name !== "task.run" ||
|
|
10
|
+
canonicalize(value.input) !== canonicalize(input) ||
|
|
11
|
+
!isRecord(value.task_execution)) {
|
|
12
|
+
throw new Error("Relay task receipt has mismatched invocation or input");
|
|
13
|
+
}
|
|
14
|
+
const execution = value.task_execution;
|
|
15
|
+
const validDate = (date) => nonempty(date) && Number.isFinite(Date.parse(date));
|
|
16
|
+
if (!nonempty(execution.execution_id) ||
|
|
17
|
+
!validDate(execution.deadline) ||
|
|
18
|
+
["run_id", "step_id", "dispatch_id"].some((key) => execution[key] !== context[key]) ||
|
|
19
|
+
!["pending", "dispatched", "running", "completed", "failed"].includes(String(value.status))) {
|
|
20
|
+
throw new Error("Relay task receipt has invalid execution correlation");
|
|
21
|
+
}
|
|
22
|
+
const accepted = nonempty(execution.worker_generation) && validDate(execution.accepted_at);
|
|
23
|
+
if ((value.status === "running" || value.status === "completed") &&
|
|
24
|
+
!accepted) {
|
|
25
|
+
throw new Error("Relay task receipt is missing durable acceptance");
|
|
26
|
+
}
|
|
27
|
+
if ((execution.worker_generation !== undefined ||
|
|
28
|
+
execution.accepted_at !== undefined) &&
|
|
29
|
+
!accepted) {
|
|
30
|
+
throw new Error("Relay task receipt has incomplete durable acceptance");
|
|
31
|
+
}
|
|
32
|
+
if (previous !== undefined &&
|
|
33
|
+
(previous.task_execution.execution_id !== execution.execution_id ||
|
|
34
|
+
previous.task_execution.deadline !== execution.deadline ||
|
|
35
|
+
(previous.task_execution.worker_generation !== undefined &&
|
|
36
|
+
(previous.task_execution.worker_generation !==
|
|
37
|
+
execution.worker_generation ||
|
|
38
|
+
previous.task_execution.accepted_at !== execution.accepted_at)))) {
|
|
39
|
+
throw new Error("Relay task receipt changed its execution, accepted generation/time, or deadline");
|
|
40
|
+
}
|
|
41
|
+
if (execution.accounting !== undefined &&
|
|
42
|
+
(!isRecord(execution.accounting) ||
|
|
43
|
+
Object.values(execution.accounting).some((n) => typeof n !== "number" || !Number.isFinite(n) || n < 0))) {
|
|
44
|
+
throw new Error("Relay task receipt has invalid accounting");
|
|
45
|
+
}
|
|
46
|
+
if (value.status === "completed" &&
|
|
47
|
+
(!Object.hasOwn(value, "output") ||
|
|
48
|
+
value.error !== null ||
|
|
49
|
+
!validDate(value.completed_at))) {
|
|
50
|
+
throw new Error("Relay task receipt has no authoritative final output");
|
|
51
|
+
}
|
|
52
|
+
if (value.status === "failed" &&
|
|
53
|
+
(!nonempty(value.error) || !validDate(value.completed_at))) {
|
|
54
|
+
throw new Error("Relay task failure receipt has no reason");
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
invocation_id: invocationId,
|
|
58
|
+
action_name: "task.run",
|
|
59
|
+
status: value.status,
|
|
60
|
+
task_execution: execution,
|
|
61
|
+
output: value.output,
|
|
62
|
+
error: value.error,
|
|
63
|
+
completed_at: value.completed_at,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=agent-relay-receipt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-relay-receipt.js","sourceRoot":"","sources":["../src/agent-relay-receipt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface RelayTaskClaim {
|
|
2
|
+
version: 1;
|
|
3
|
+
baseUrl: string;
|
|
4
|
+
callerId: string;
|
|
5
|
+
workspaceId: string;
|
|
6
|
+
invocationId: string;
|
|
7
|
+
runId: string;
|
|
8
|
+
stepId: string;
|
|
9
|
+
idempotencyKey: string;
|
|
10
|
+
input: Record<string, unknown>;
|
|
11
|
+
startedAt: number;
|
|
12
|
+
}
|
|
13
|
+
/** Exclusive creation pins the request before POST; no last-writer overwrite. */
|
|
14
|
+
export declare function claimRelayTask(dataDir: string, claim: RelayTaskClaim): Promise<{
|
|
15
|
+
claim: RelayTaskClaim;
|
|
16
|
+
created: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=agent-relay-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-relay-state.d.ts","sourceRoot":"","sources":["../src/agent-relay-state.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,iFAAiF;AACjF,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAkDtD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { mkdir, open, readFile } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { canonicalize } from "./canonical.js";
|
|
5
|
+
/** Exclusive creation pins the request before POST; no last-writer overwrite. */
|
|
6
|
+
export async function claimRelayTask(dataDir, claim) {
|
|
7
|
+
const directory = join(dataDir, "relay-tasks");
|
|
8
|
+
await mkdir(directory, { recursive: true });
|
|
9
|
+
const parent = await open(dataDir, "r");
|
|
10
|
+
try {
|
|
11
|
+
await parent.sync();
|
|
12
|
+
}
|
|
13
|
+
finally {
|
|
14
|
+
await parent.close();
|
|
15
|
+
}
|
|
16
|
+
const digest = createHash("sha256")
|
|
17
|
+
.update(canonicalize([claim.runId, claim.stepId, claim.idempotencyKey]))
|
|
18
|
+
.digest("hex");
|
|
19
|
+
const path = join(directory, `${digest}.json`);
|
|
20
|
+
let file;
|
|
21
|
+
try {
|
|
22
|
+
file = await open(path, "wx", 0o600);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
if (error.code !== "EEXIST")
|
|
26
|
+
throw error;
|
|
27
|
+
const prior = JSON.parse(await readFile(path, "utf8"));
|
|
28
|
+
if (typeof prior !== "object" ||
|
|
29
|
+
prior === null ||
|
|
30
|
+
!("startedAt" in prior) ||
|
|
31
|
+
typeof prior.startedAt !== "number" ||
|
|
32
|
+
!Number.isSafeInteger(prior.startedAt) ||
|
|
33
|
+
prior.startedAt < 0 ||
|
|
34
|
+
canonicalize(prior) !==
|
|
35
|
+
canonicalize({ ...claim, startedAt: prior.startedAt })) {
|
|
36
|
+
throw new Error("Relay task dispatch conflicts with its durable caller, endpoint, or input");
|
|
37
|
+
}
|
|
38
|
+
return { claim: prior, created: false };
|
|
39
|
+
}
|
|
40
|
+
// A crash during creation leaves a partial claim that fails closed on read.
|
|
41
|
+
// Never remove an uncertain claim and retry under a different identity.
|
|
42
|
+
try {
|
|
43
|
+
await file.writeFile(canonicalize(claim));
|
|
44
|
+
await file.sync();
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
await file.close();
|
|
48
|
+
}
|
|
49
|
+
const dir = await open(directory, "r");
|
|
50
|
+
try {
|
|
51
|
+
await dir.sync();
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
await dir.close();
|
|
55
|
+
}
|
|
56
|
+
return { claim, created: true };
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=agent-relay-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-relay-state.js","sourceRoot":"","sources":["../src/agent-relay-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAe9C,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAe,EACf,KAAqB;IAErB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC/C,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;SAChC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;SACvE,MAAM,CAAC,KAAK,CAAC,CAAC;IACjB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;QACpE,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC;YACvB,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;YACnC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;YACtC,KAAK,CAAC,SAAS,GAAG,CAAC;YACnB,YAAY,CAAC,KAAK,CAAC;gBACjB,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,EACxD,CAAC;YACD,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAuB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5D,CAAC;IACD,4EAA4E;IAC5E,wEAAwE;IACxE,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IACnB,CAAC;YAAS,CAAC;QACT,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type RelayTaskReceipt } from "./agent-relay-receipt.js";
|
|
2
|
+
export type AgentTransport = "direct" | "relay";
|
|
3
|
+
export interface AgentRelayTaskRequest {
|
|
4
|
+
cli: string;
|
|
5
|
+
task: string;
|
|
6
|
+
model?: string;
|
|
7
|
+
worker_cwd?: string;
|
|
8
|
+
result_schema?: unknown;
|
|
9
|
+
runId: string;
|
|
10
|
+
stepId: string;
|
|
11
|
+
idempotencyKey: string;
|
|
12
|
+
dataDir: string;
|
|
13
|
+
/** Engine task contract ceiling; bounded independently of the renewing lease. */
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface AgentRelayEnv {
|
|
17
|
+
baseUrl?: string;
|
|
18
|
+
agentToken?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class AgentRelayTransportError extends Error {
|
|
21
|
+
readonly cause?: unknown | undefined;
|
|
22
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
23
|
+
}
|
|
24
|
+
export declare function readAgentRelayEnv(env?: NodeJS.ProcessEnv): Required<AgentRelayEnv>;
|
|
25
|
+
/** Exact Relaycast #436 HTTP contract. Only terminal GET receipts can return. */
|
|
26
|
+
export declare function runAgentRelayTask(request: AgentRelayTaskRequest, options?: AgentRelayEnv & {
|
|
27
|
+
fetch?: typeof fetch;
|
|
28
|
+
signal?: AbortSignal;
|
|
29
|
+
pollMs?: number;
|
|
30
|
+
}): Promise<RelayTaskReceipt>;
|
|
31
|
+
//# sourceMappingURL=agent-relay-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-relay-transport.d.ts","sourceRoot":"","sources":["../src/agent-relay-transport.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAChD,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AACD,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,qBAAa,wBAAyB,SAAQ,KAAK;aAG/B,KAAK,CAAC,EAAE,OAAO;gBAD/B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,OAAO,YAAA;CAKlC;AACD,wBAAgB,iBAAiB,CAC/B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,QAAQ,CAAC,aAAa,CAAC,CAUzB;AAED,iFAAiF;AACjF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,GAAE,aAAa,GAAG;IACvB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ,GACL,OAAO,CAAC,gBAAgB,CAAC,CAmN3B"}
|