@wardby/cli 0.5.3 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +33 -0
- package/README.md +25 -14
- package/deploy/local/docker-compose.quickstart-coding.yml +13 -0
- package/dist/claude-coding-worker/context.d.ts +22 -0
- package/dist/claude-coding-worker/context.js +92 -0
- package/dist/claude-coding-worker/driver.d.ts +27 -3
- package/dist/claude-coding-worker/driver.js +161 -20
- package/dist/claude-coding-worker/main.js +34 -6
- package/dist/claude-coding-worker/sdk.js +25 -5
- package/dist/claude-coding-worker/tool-socket.d.ts +27 -0
- package/dist/claude-coding-worker/tool-socket.js +111 -0
- package/dist/claude-coding-worker/transcript.d.ts +18 -0
- package/dist/claude-coding-worker/transcript.js +77 -0
- package/dist/cli-help.d.ts +1 -1
- package/dist/cli-help.js +6 -2
- package/dist/cli-native-mode.d.ts +9 -0
- package/dist/cli-native-mode.js +20 -0
- package/dist/cli.d.ts +3 -1
- package/dist/cli.js +161 -11
- package/dist/coding/claude-context.d.ts +45 -0
- package/dist/coding/claude-context.js +434 -0
- package/dist/coding/continuation-wording.d.ts +35 -0
- package/dist/coding/continuation-wording.js +73 -0
- package/dist/coding/linked-issue-note.d.ts +23 -0
- package/dist/coding/linked-issue-note.js +47 -0
- package/dist/coding/merge-wording.d.ts +28 -0
- package/dist/coding/merge-wording.js +78 -0
- package/dist/coding/pr-description-note.d.ts +9 -0
- package/dist/coding/pr-description-note.js +32 -0
- package/dist/coding/profile.d.ts +50 -118
- package/dist/coding/profile.js +51 -4
- package/dist/coding/protected-path-wording.d.ts +8 -0
- package/dist/coding/protected-path-wording.js +1 -1
- package/dist/coding/protocol.d.ts +292 -270
- package/dist/coding/protocol.js +322 -15
- package/dist/coding/redact.d.ts +3 -0
- package/dist/coding/redact.js +12 -0
- package/dist/coding/registry/allowlist.d.ts +12 -0
- package/dist/coding/registry/allowlist.js +14 -1
- package/dist/coding/registry/audit-mode.d.ts +153 -0
- package/dist/coding/registry/audit-mode.js +304 -0
- package/dist/coding/registry/lockfile-shared.d.ts +36 -0
- package/dist/coding/registry/lockfile-shared.js +128 -0
- package/dist/coding/registry/lockfiles.js +1 -1
- package/dist/coding/registry/npm-lockfile-formats.d.ts +11 -0
- package/dist/coding/registry/npm-lockfile-formats.js +41 -0
- package/dist/coding/registry/npm-lockfile.d.ts +8 -4
- package/dist/coding/registry/npm-lockfile.js +4 -6
- package/dist/coding/registry/npm.js +78 -8
- package/dist/coding/registry/pnpm-lockfile.d.ts +17 -0
- package/dist/coding/registry/pnpm-lockfile.js +189 -0
- package/dist/coding/registry/pypi-plan.d.ts +50 -0
- package/dist/coding/registry/pypi-plan.js +406 -0
- package/dist/coding/registry/pypi-requirements.d.ts +58 -0
- package/dist/coding/registry/pypi-requirements.js +155 -0
- package/dist/coding/registry/pypi.d.ts +3 -27
- package/dist/coding/registry/pypi.js +40 -154
- package/dist/coding/registry/refusal-hints.d.ts +20 -0
- package/dist/coding/registry/refusal-hints.js +61 -0
- package/dist/coding/registry/refusal-wording.d.ts +11 -0
- package/dist/coding/registry/refusal-wording.js +56 -0
- package/dist/coding/registry/report.d.ts +70 -8
- package/dist/coding/registry/report.js +112 -5
- package/dist/coding/registry/types.d.ts +58 -8
- package/dist/coding/registry/yarn-lockfile.d.ts +30 -0
- package/dist/coding/registry/yarn-lockfile.js +367 -0
- package/dist/coding/services/catalog.d.ts +37 -351
- package/dist/coding/transcript/claude-code.d.ts +13 -0
- package/dist/coding/transcript/claude-code.js +273 -0
- package/dist/coding/transcript/download-protocol.d.ts +30 -0
- package/dist/coding/transcript/download-protocol.js +18 -0
- package/dist/coding/transcript/format.d.ts +20 -0
- package/dist/coding/transcript/format.js +32 -0
- package/dist/coding/transcript/recorder.d.ts +51 -0
- package/dist/coding/transcript/recorder.js +225 -0
- package/dist/coding/transcript/resume/checkout.d.ts +31 -0
- package/dist/coding/transcript/resume/checkout.js +203 -0
- package/dist/coding/transcript/resume/command.d.ts +17 -0
- package/dist/coding/transcript/resume/command.js +176 -0
- package/dist/coding/transcript/resume/download.d.ts +20 -0
- package/dist/coding/transcript/resume/download.js +153 -0
- package/dist/coding/transcript/resume/launch.d.ts +38 -0
- package/dist/coding/transcript/resume/launch.js +128 -0
- package/dist/coding/transcript/resume/session-file.d.ts +13 -0
- package/dist/coding/transcript/resume/session-file.js +79 -0
- package/dist/coding/transcript/resume/stand-in.d.ts +11 -0
- package/dist/coding/transcript/resume/stand-in.js +49 -0
- package/dist/coding-worker/artifact.d.ts +16 -3
- package/dist/coding-worker/artifact.js +5 -3
- package/dist/coding-worker/debug-trace.d.ts +6 -5
- package/dist/coding-worker/debug-trace.js +13 -18
- package/dist/coding-worker/dependency-cache.d.mts +229 -0
- package/dist/coding-worker/dependency-cache.mjs +2123 -0
- package/dist/coding-worker/driver.d.ts +4 -3
- package/dist/coding-worker/driver.js +118 -38
- package/dist/coding-worker/errors.d.ts +1 -0
- package/dist/coding-worker/errors.js +32 -0
- package/dist/coding-worker/sdk.d.ts +6 -0
- package/dist/coding-worker/sdk.js +1 -0
- package/dist/coding-worker/skills.d.ts +23 -0
- package/dist/coding-worker/skills.js +117 -0
- package/dist/coding-worker/task-note.d.ts +11 -0
- package/dist/coding-worker/task-note.js +13 -0
- package/dist/coding-worker/types.d.ts +13 -0
- package/dist/config/dependency-cache.d.ts +23 -0
- package/dist/config/dependency-cache.js +32 -0
- package/dist/config/github-allowed-accounts.d.ts +15 -0
- package/dist/config/github-allowed-accounts.js +36 -0
- package/dist/config/low-power.d.ts +12 -0
- package/dist/config/low-power.js +18 -0
- package/dist/config/mobile.d.ts +12 -0
- package/dist/config/mobile.js +18 -0
- package/dist/config/providers.d.ts +65 -3
- package/dist/config/providers.js +147 -11
- package/dist/config/test-simulators.d.ts +82 -0
- package/dist/config/test-simulators.js +305 -0
- package/dist/core/async-context.d.ts +2 -0
- package/dist/core/async-context.js +12 -0
- package/dist/core/budget-events.d.ts +108 -0
- package/dist/core/budget-events.js +346 -0
- package/dist/core/budget-groups.d.ts +50 -1
- package/dist/core/budget-groups.js +236 -27
- package/dist/core/budget-stopped-head.d.ts +46 -0
- package/dist/core/budget-stopped-head.js +81 -0
- package/dist/core/budget-topup.d.ts +51 -0
- package/dist/core/budget-topup.js +156 -0
- package/dist/core/budget-wording.d.ts +16 -2
- package/dist/core/budget-wording.js +40 -2
- package/dist/core/coding-queue.d.ts +2 -1
- package/dist/core/coding-queue.js +7 -0
- package/dist/core/cron.d.ts +19 -1
- package/dist/core/cron.js +17 -0
- package/dist/core/datastores.js +1 -1
- package/dist/core/db.d.ts +16 -6
- package/dist/core/db.js +12 -10
- package/dist/core/deferred-coding.d.ts +14 -0
- package/dist/core/deferred-coding.js +62 -0
- package/dist/core/delegation-child.d.ts +25 -0
- package/dist/core/delegation-child.js +37 -0
- package/dist/core/dispatch.d.ts +53 -0
- package/dist/core/dispatch.js +167 -57
- package/dist/core/engine-native.js +10 -6
- package/dist/core/error-code.d.ts +38 -0
- package/dist/core/error-code.js +168 -0
- package/dist/core/grants.d.ts +19 -6
- package/dist/core/grants.js +55 -6
- package/dist/core/host-events.d.ts +67 -5
- package/dist/core/host-events.js +571 -37
- package/dist/core/host-status.d.ts +85 -3
- package/dist/core/host-status.js +298 -20
- package/dist/core/issue-bridge.d.ts +50 -6
- package/dist/core/issue-bridge.js +151 -20
- package/dist/core/issue-events.d.ts +1 -1
- package/dist/core/issue-events.js +16 -11
- package/dist/core/issue-status.d.ts +1 -1
- package/dist/core/issue-status.js +68 -29
- package/dist/core/logger.d.ts +5 -0
- package/dist/core/logger.js +14 -1
- package/dist/core/lost-run-children.d.ts +6 -0
- package/dist/core/lost-run-children.js +32 -0
- package/dist/core/mark-ready.d.ts +34 -0
- package/dist/core/mark-ready.js +152 -0
- package/dist/core/markdown-code.d.ts +8 -0
- package/dist/core/markdown-code.js +107 -0
- package/dist/core/memory-tools.js +7 -0
- package/dist/core/merge-order-check.d.ts +130 -0
- package/dist/core/merge-order-check.js +343 -0
- package/dist/core/notification-dispatcher.d.ts +70 -0
- package/dist/core/notification-dispatcher.js +368 -0
- package/dist/core/notification-templates.d.ts +19 -0
- package/dist/core/notification-templates.js +139 -0
- package/dist/core/notifications.d.ts +10 -0
- package/dist/core/notifications.js +38 -0
- package/dist/core/pg-auth.d.ts +22 -0
- package/dist/core/pg-auth.js +152 -0
- package/dist/core/power-composition.d.ts +16 -0
- package/dist/core/power-composition.js +37 -0
- package/dist/core/power-idle.d.ts +14 -0
- package/dist/core/power-idle.js +30 -0
- package/dist/core/power.d.ts +71 -0
- package/dist/core/power.js +202 -0
- package/dist/core/pull-request-state-sync.js +2 -2
- package/dist/core/reconciler.d.ts +8 -5
- package/dist/core/reconciler.js +37 -6
- package/dist/core/related-pull-requests.d.ts +59 -7
- package/dist/core/related-pull-requests.js +140 -25
- package/dist/core/reply-parts.d.ts +21 -0
- package/dist/core/reply-parts.js +73 -0
- package/dist/core/repo-access.d.ts +15 -0
- package/dist/core/repo-access.js +66 -0
- package/dist/core/review-fix.d.ts +38 -1
- package/dist/core/review-fix.js +209 -7
- package/dist/core/review-host-checks.d.ts +1 -1
- package/dist/core/review-host-tools.d.ts +23 -0
- package/dist/core/review-host-tools.js +156 -14
- package/dist/core/review-reads.d.ts +55 -0
- package/dist/core/review-reads.js +233 -0
- package/dist/core/run-status.d.ts +12 -0
- package/dist/core/run-status.js +12 -0
- package/dist/core/runner.d.ts +384 -5
- package/dist/core/runner.js +1244 -372
- package/dist/core/schedule-start.d.ts +12 -0
- package/dist/core/schedule-start.js +14 -0
- package/dist/core/secret-broker-config.d.ts +39 -0
- package/dist/core/secret-broker-config.js +112 -0
- package/dist/core/secret-guard.d.ts +46 -0
- package/dist/core/secret-guard.js +104 -0
- package/dist/core/secret-guarded-stores.d.ts +12 -0
- package/dist/core/secret-guarded-stores.js +41 -0
- package/dist/core/secret-spans.d.ts +50 -0
- package/dist/core/secret-spans.js +94 -0
- package/dist/core/secrets.d.ts +39 -4
- package/dist/core/secrets.js +148 -40
- package/dist/core/stop-run.d.ts +46 -0
- package/dist/core/stop-run.js +61 -0
- package/dist/core/workflow-event-recorder.d.ts +14 -0
- package/dist/core/workflow-event-recorder.js +120 -0
- package/dist/core/workflow-events.d.ts +94 -0
- package/dist/core/workflow-events.js +48 -0
- package/dist/core/workflow-run-events.d.ts +18 -0
- package/dist/core/workflow-run-events.js +75 -0
- package/dist/core/zod-json-schema.d.ts +4 -0
- package/dist/core/zod-json-schema.js +39 -0
- package/dist/core/zod3-window.d.ts +35 -0
- package/dist/core/zod3-window.js +124 -0
- package/dist/generated/prisma/browser.d.ts +92 -3
- package/dist/generated/prisma/client.d.ts +92 -3
- package/dist/generated/prisma/commonInputTypes.d.ts +364 -54
- package/dist/generated/prisma/enums.d.ts +37 -0
- package/dist/generated/prisma/enums.js +31 -0
- package/dist/generated/prisma/internal/class.d.ts +132 -0
- package/dist/generated/prisma/internal/class.js +4 -4
- package/dist/generated/prisma/internal/prismaNamespace.d.ts +1332 -142
- package/dist/generated/prisma/internal/prismaNamespace.js +227 -5
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +234 -0
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +227 -5
- package/dist/generated/prisma/models/Agent.d.ts +464 -7
- package/dist/generated/prisma/models/AgentRepository.d.ts +42 -1
- package/dist/generated/prisma/models/CodingAgentProfile.d.ts +301 -1
- package/dist/generated/prisma/models/CodingProxyRequest.d.ts +207 -3
- package/dist/generated/prisma/models/CodingProxySession.d.ts +114 -1
- package/dist/generated/prisma/models/CodingRun.d.ts +1841 -1
- package/dist/generated/prisma/models/DeferredReview.d.ts +78 -1
- package/dist/generated/prisma/models/DependencySnapshot.d.ts +1668 -0
- package/dist/generated/prisma/models/DependencySnapshot.js +1 -0
- package/dist/generated/prisma/models/IssuePullRequest.d.ts +6 -2
- package/dist/generated/prisma/models/LocalReview.d.ts +40 -1
- package/dist/generated/prisma/models/NativeGatewayCall.d.ts +1713 -0
- package/dist/generated/prisma/models/NativeGatewayCall.js +1 -0
- package/dist/generated/prisma/models/NativeGatewaySession.d.ts +1551 -0
- package/dist/generated/prisma/models/NativeGatewaySession.js +1 -0
- package/dist/generated/prisma/models/NativeWarmWorker.d.ts +1296 -0
- package/dist/generated/prisma/models/NativeWarmWorker.js +1 -0
- package/dist/generated/prisma/models/NotificationChannel.d.ts +1543 -0
- package/dist/generated/prisma/models/NotificationChannel.js +1 -0
- package/dist/generated/prisma/models/NotificationDelivery.d.ts +1502 -0
- package/dist/generated/prisma/models/NotificationDelivery.js +1 -0
- package/dist/generated/prisma/models/NotificationThread.d.ts +1090 -0
- package/dist/generated/prisma/models/NotificationThread.js +1 -0
- package/dist/generated/prisma/models/RegistryAllowance.d.ts +41 -1
- package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +75 -1
- package/dist/generated/prisma/models/RegistryAuditRecord.d.ts +1364 -0
- package/dist/generated/prisma/models/RegistryAuditRecord.js +1 -0
- package/dist/generated/prisma/models/Run.d.ts +1619 -58
- package/dist/generated/prisma/models/RunBudgetEvent.d.ts +1211 -0
- package/dist/generated/prisma/models/RunBudgetEvent.js +1 -0
- package/dist/generated/prisma/models/RunHostCheck.d.ts +36 -1
- package/dist/generated/prisma/models/RunTranscript.d.ts +1339 -0
- package/dist/generated/prisma/models/RunTranscript.js +1 -0
- package/dist/generated/prisma/models/Secret.d.ts +37 -1
- package/dist/generated/prisma/models/SecretBrokerChange.d.ts +1101 -0
- package/dist/generated/prisma/models/SecretBrokerChange.js +1 -0
- package/dist/generated/prisma/models/WorkflowEvent.d.ts +1422 -0
- package/dist/generated/prisma/models/WorkflowEvent.js +1 -0
- package/dist/generated/prisma/models.d.ts +12 -0
- package/dist/help/build.js +4 -2
- package/dist/help/catalog.d.ts +1 -1
- package/dist/help/catalog.js +31 -6
- package/dist/help-index.json +2584 -146
- package/dist/import/create.js +49 -3
- package/dist/import/neutral-schema.d.ts +50 -277
- package/dist/import/neutral-schema.js +7 -4
- package/dist/knowledge/check.d.ts +1 -1
- package/dist/knowledge/cli.d.ts +11 -1
- package/dist/knowledge/cli.js +37 -4
- package/dist/knowledge/concept.d.ts +3 -19
- package/dist/knowledge/location.d.ts +31 -0
- package/dist/knowledge/location.js +78 -0
- package/dist/mcp/auth/access.d.ts +11 -2
- package/dist/mcp/auth/access.js +15 -1
- package/dist/mcp/auth/ownership.d.ts +7 -7
- package/dist/mcp/auth/repo-authorization.js +14 -0
- package/dist/mcp/auth/resource-server.d.ts +2 -1
- package/dist/mcp/auth/resource-server.js +7 -2
- package/dist/mcp/auth/self-hosted/browser.d.ts +1 -1
- package/dist/mcp/auth/self-hosted/browser.js +19 -6
- package/dist/mcp/auth/self-hosted/credentials.d.ts +3 -3
- package/dist/mcp/auth/self-hosted/session.d.ts +2 -2
- package/dist/mcp/context.d.ts +6 -0
- package/dist/mcp/host-events/github-ingress.d.ts +25 -1
- package/dist/mcp/host-events/github-ingress.js +70 -1
- package/dist/mcp/index.d.ts +19 -0
- package/dist/mcp/index.js +117 -20
- package/dist/mcp/server.d.ts +13 -0
- package/dist/mcp/server.js +33 -14
- package/dist/mcp/tools/agents.d.ts +4 -0
- package/dist/mcp/tools/agents.js +277 -24
- package/dist/mcp/tools/datastore.js +17 -8
- package/dist/mcp/tools/grants.js +9 -3
- package/dist/mcp/tools/memory.js +11 -1
- package/dist/mcp/tools/notification-channels.d.ts +2 -0
- package/dist/mcp/tools/notification-channels.js +293 -0
- package/dist/mcp/tools/packages.d.ts +2 -0
- package/dist/mcp/tools/packages.js +195 -0
- package/dist/mcp/tools/power.d.ts +2 -0
- package/dist/mcp/tools/power.js +77 -0
- package/dist/mcp/tools/repositories.js +18 -5
- package/dist/mcp/tools/run-access.d.ts +16 -0
- package/dist/mcp/tools/run-access.js +25 -0
- package/dist/mcp/tools/run-transcript-download.d.ts +30 -0
- package/dist/mcp/tools/run-transcript-download.js +129 -0
- package/dist/mcp/tools/run-transcript.d.ts +19 -0
- package/dist/mcp/tools/run-transcript.js +70 -0
- package/dist/mcp/tools/runs.d.ts +0 -6
- package/dist/mcp/tools/runs.js +41 -14
- package/dist/mcp/tools/scheduling.js +3 -1
- package/dist/mcp/tools/secret-broker-compat.d.ts +12 -0
- package/dist/mcp/tools/secret-broker-compat.js +23 -0
- package/dist/mcp/tools/secret-elicitation-form.d.ts +22 -2
- package/dist/mcp/tools/secret-elicitation-form.js +205 -10
- package/dist/mcp/tools/secret-elicitation-server.d.ts +6 -0
- package/dist/mcp/tools/secret-elicitation-server.js +10 -54
- package/dist/mcp/tools/secret-elicitation.d.ts +38 -3
- package/dist/mcp/tools/secret-elicitation.js +110 -12
- package/dist/mcp/tools/secrets.js +186 -9
- package/dist/mcp/tools/stop-run.d.ts +2 -0
- package/dist/mcp/tools/stop-run.js +82 -0
- package/dist/mcp/tools/subagents.js +2 -2
- package/dist/mcp/tools/tools.d.ts +2 -2
- package/dist/mcp/tools/tools.js +47 -11
- package/dist/mcp/transport/stdio-link-host.d.ts +20 -0
- package/dist/mcp/transport/stdio-link-host.js +67 -0
- package/dist/mcp/transport/streamable-http.d.ts +13 -0
- package/dist/mcp/transport/streamable-http.js +41 -1
- package/dist/native-worker/composition.d.ts +23 -0
- package/dist/native-worker/composition.js +77 -0
- package/dist/native-worker/docker-isolation.d.ts +65 -0
- package/dist/native-worker/docker-isolation.js +183 -0
- package/dist/native-worker/docker-launcher.d.ts +110 -0
- package/dist/native-worker/docker-launcher.js +297 -0
- package/dist/native-worker/gateway-server.d.ts +77 -0
- package/dist/native-worker/gateway-server.js +412 -0
- package/dist/native-worker/gateway.d.ts +70 -0
- package/dist/native-worker/gateway.js +263 -0
- package/dist/native-worker/http-server.d.ts +24 -0
- package/dist/native-worker/http-server.js +113 -0
- package/dist/native-worker/http-transport.d.ts +17 -0
- package/dist/native-worker/http-transport.js +88 -0
- package/dist/native-worker/kubernetes-isolation.d.ts +90 -0
- package/dist/native-worker/kubernetes-isolation.js +218 -0
- package/dist/native-worker/kubernetes-launcher.d.ts +106 -0
- package/dist/native-worker/kubernetes-launcher.js +375 -0
- package/dist/native-worker/launch.d.ts +62 -0
- package/dist/native-worker/launch.js +49 -0
- package/dist/native-worker/ledger.d.ts +125 -0
- package/dist/native-worker/ledger.js +245 -0
- package/dist/native-worker/loopback.d.ts +12 -0
- package/dist/native-worker/loopback.js +44 -0
- package/dist/native-worker/main.d.ts +8 -0
- package/dist/native-worker/main.js +85 -0
- package/dist/native-worker/protocol.d.ts +296 -0
- package/dist/native-worker/protocol.js +246 -0
- package/dist/native-worker/sandbox-executor.d.ts +83 -0
- package/dist/native-worker/sandbox-executor.js +284 -0
- package/dist/native-worker/stderr-redaction.d.ts +77 -0
- package/dist/native-worker/stderr-redaction.js +237 -0
- package/dist/native-worker/stdio.d.ts +29 -0
- package/dist/native-worker/stdio.js +189 -0
- package/dist/native-worker/warm-delivery.d.ts +16 -0
- package/dist/native-worker/warm-delivery.js +33 -0
- package/dist/native-worker/warm-pool-ledger.d.ts +39 -0
- package/dist/native-worker/warm-pool-ledger.js +73 -0
- package/dist/native-worker/warm-pool.d.ts +107 -0
- package/dist/native-worker/warm-pool.js +283 -0
- package/dist/native-worker/worker.d.ts +17 -0
- package/dist/native-worker/worker.js +141 -0
- package/dist/observability/metrics.js +6 -1
- package/dist/providers/auth/authorization-server.d.ts +3 -0
- package/dist/providers/auth/index.js +2 -0
- package/dist/providers/auth/self-hosted.d.ts +14 -2
- package/dist/providers/auth/self-hosted.js +54 -4
- package/dist/providers/chat/fake.d.ts +46 -0
- package/dist/providers/chat/fake.js +39 -0
- package/dist/providers/chat/index.d.ts +4 -0
- package/dist/providers/chat/index.js +8 -0
- package/dist/providers/chat/slack.d.ts +37 -0
- package/dist/providers/chat/slack.js +105 -0
- package/dist/providers/chat/types.d.ts +42 -0
- package/dist/providers/chat/types.js +19 -0
- package/dist/providers/coding-proxy/dependency-cache/eviction.d.ts +29 -0
- package/dist/providers/coding-proxy/dependency-cache/eviction.js +87 -0
- package/dist/providers/coding-proxy/dependency-cache/key.d.ts +33 -0
- package/dist/providers/coding-proxy/dependency-cache/key.js +86 -0
- package/dist/providers/coding-proxy/dependency-cache/model-request-seal.d.ts +18 -0
- package/dist/providers/coding-proxy/dependency-cache/model-request-seal.js +40 -0
- package/dist/providers/coding-proxy/dependency-cache/prisma-store.d.ts +25 -0
- package/dist/providers/coding-proxy/dependency-cache/prisma-store.js +131 -0
- package/dist/providers/coding-proxy/dependency-cache/service.d.ts +70 -0
- package/dist/providers/coding-proxy/dependency-cache/service.js +409 -0
- package/dist/providers/coding-proxy/dependency-cache/store.d.ts +85 -0
- package/dist/providers/coding-proxy/dependency-cache/store.js +95 -0
- package/dist/providers/coding-proxy/hold.d.ts +32 -0
- package/dist/providers/coding-proxy/hold.js +86 -0
- package/dist/providers/coding-proxy/interrupted.d.ts +70 -0
- package/dist/providers/coding-proxy/interrupted.js +104 -0
- package/dist/providers/coding-proxy/memory-ledger.d.ts +15 -2
- package/dist/providers/coding-proxy/memory-ledger.js +84 -8
- package/dist/providers/coding-proxy/metering.d.ts +16 -0
- package/dist/providers/coding-proxy/metering.js +27 -4
- package/dist/providers/coding-proxy/prisma-ledger.d.ts +15 -2
- package/dist/providers/coding-proxy/prisma-ledger.js +179 -67
- package/dist/providers/coding-proxy/proxy.d.ts +14 -1
- package/dist/providers/coding-proxy/proxy.js +166 -14
- package/dist/providers/coding-proxy/registry/audit.d.ts +53 -10
- package/dist/providers/coding-proxy/registry/audit.js +94 -17
- package/dist/providers/coding-proxy/registry/lockfile-parse-worker.d.ts +36 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse-worker.js +67 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse.d.ts +16 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse.js +110 -0
- package/dist/providers/coding-proxy/registry/plan.d.ts +9 -0
- package/dist/providers/coding-proxy/registry/plan.js +201 -48
- package/dist/providers/coding-proxy/registry/prisma-store.d.ts +11 -5
- package/dist/providers/coding-proxy/registry/prisma-store.js +120 -17
- package/dist/providers/coding-proxy/registry/service.d.ts +97 -16
- package/dist/providers/coding-proxy/registry/service.js +579 -112
- package/dist/providers/coding-proxy/registry/store.d.ts +84 -9
- package/dist/providers/coding-proxy/registry/store.js +54 -1
- package/dist/providers/coding-proxy/runtime.d.ts +4 -0
- package/dist/providers/coding-proxy/runtime.js +78 -16
- package/dist/providers/coding-proxy/server.d.ts +6 -1
- package/dist/providers/coding-proxy/server.js +45 -1
- package/dist/providers/coding-proxy/types.d.ts +65 -1
- package/dist/providers/datastore/types.d.ts +5 -0
- package/dist/providers/engine/types.d.ts +36 -2
- package/dist/providers/engine/types.js +39 -0
- package/dist/providers/executor/composition.d.ts +31 -1
- package/dist/providers/executor/composition.js +81 -8
- package/dist/providers/executor/container.d.ts +385 -9
- package/dist/providers/executor/container.js +1234 -99
- package/dist/providers/executor/dbos-status.d.ts +31 -0
- package/dist/providers/executor/dbos-status.js +64 -0
- package/dist/providers/executor/dbos.d.ts +91 -0
- package/dist/providers/executor/dbos.js +319 -26
- package/dist/providers/executor/deferred.d.ts +44 -0
- package/dist/providers/executor/deferred.js +100 -0
- package/dist/providers/executor/in-process.d.ts +9 -1
- package/dist/providers/executor/in-process.js +14 -4
- package/dist/providers/executor/linked-issue-reader.d.ts +16 -0
- package/dist/providers/executor/linked-issue-reader.js +30 -0
- package/dist/providers/executor/routing.d.ts +39 -10
- package/dist/providers/executor/routing.js +77 -32
- package/dist/providers/executor/types.d.ts +25 -0
- package/dist/providers/index.d.ts +2 -1
- package/dist/providers/issue-tracker/types.d.ts +17 -0
- package/dist/providers/issue-tracker/types.js +39 -1
- package/dist/providers/jobs/claude-tool-setup.d.ts +4 -0
- package/dist/providers/jobs/claude-tool-setup.js +5 -2
- package/dist/providers/jobs/docker-isolation.d.ts +8 -0
- package/dist/providers/jobs/docker-isolation.js +17 -0
- package/dist/providers/jobs/docker.d.ts +1 -0
- package/dist/providers/jobs/docker.js +29 -4
- package/dist/providers/jobs/fake-kubernetes-api.d.ts +23 -2
- package/dist/providers/jobs/fake-kubernetes-api.js +45 -1
- package/dist/providers/jobs/kubernetes-api.d.ts +25 -1
- package/dist/providers/jobs/kubernetes-api.js +17 -0
- package/dist/providers/jobs/kubernetes-client.d.ts +10 -1
- package/dist/providers/jobs/kubernetes-client.js +61 -3
- package/dist/providers/jobs/kubernetes-dry-run-fixture.d.ts +6 -1
- package/dist/providers/jobs/kubernetes-dry-run-fixture.js +6 -3
- package/dist/providers/jobs/kubernetes-isolation.d.ts +5 -1
- package/dist/providers/jobs/kubernetes-isolation.js +23 -1
- package/dist/providers/jobs/kubernetes-platform.d.ts +4 -1
- package/dist/providers/jobs/kubernetes-platform.js +38 -1
- package/dist/providers/jobs/kubernetes-preflight.d.ts +2 -1
- package/dist/providers/jobs/kubernetes-preflight.js +4 -2
- package/dist/providers/jobs/kubernetes.d.ts +42 -2
- package/dist/providers/jobs/kubernetes.js +178 -19
- package/dist/providers/jobs/metadata-probes.d.ts +11 -0
- package/dist/providers/jobs/metadata-probes.js +13 -0
- package/dist/providers/jobs/types.d.ts +42 -0
- package/dist/providers/jobs/types.js +13 -1
- package/dist/providers/llm/anthropic.js +5 -1
- package/dist/providers/llm/bedrock.d.ts +0 -12
- package/dist/providers/llm/bedrock.js +4 -0
- package/dist/providers/llm/claude-messages.d.ts +3 -1
- package/dist/providers/llm/claude-messages.js +4 -1
- package/dist/providers/llm/claude-provider.d.ts +2 -2
- package/dist/providers/llm/claude-provider.js +2 -2
- package/dist/providers/llm/openai.d.ts +2 -2
- package/dist/providers/llm/openai.js +6 -2
- package/dist/providers/llm/routing.d.ts +2 -2
- package/dist/providers/llm/routing.js +2 -2
- package/dist/providers/llm/types.d.ts +12 -2
- package/dist/providers/review-host/github-events.d.ts +9 -1
- package/dist/providers/review-host/github-events.js +34 -12
- package/dist/providers/review-host/github.d.ts +39 -2
- package/dist/providers/review-host/github.js +274 -29
- package/dist/providers/review-host/local.d.ts +8 -4
- package/dist/providers/review-host/local.js +49 -31
- package/dist/providers/review-host/patch-pages.d.ts +41 -0
- package/dist/providers/review-host/patch-pages.js +176 -0
- package/dist/providers/review-host/review-format.d.ts +19 -1
- package/dist/providers/review-host/review-format.js +38 -7
- package/dist/providers/review-host/types.d.ts +157 -2
- package/dist/providers/review-host/types.js +8 -0
- package/dist/providers/storage/gcs.d.ts +63 -0
- package/dist/providers/storage/gcs.js +69 -0
- package/dist/providers/storage/index.d.ts +15 -0
- package/dist/providers/storage/index.js +14 -0
- package/dist/providers/storage/local.d.ts +24 -0
- package/dist/providers/storage/local.js +92 -0
- package/dist/providers/storage/meter.d.ts +14 -0
- package/dist/providers/storage/meter.js +34 -0
- package/dist/providers/storage/s3.d.ts +41 -0
- package/dist/providers/storage/s3.js +107 -0
- package/dist/providers/storage/types.d.ts +37 -3
- package/dist/providers/storage/types.js +21 -4
- package/dist/providers/vcs/git.d.ts +33 -2
- package/dist/providers/vcs/git.js +324 -22
- package/dist/providers/vcs/github-remote.d.ts +26 -3
- package/dist/providers/vcs/github-remote.js +124 -14
- package/dist/providers/vcs/github.d.ts +246 -12
- package/dist/providers/vcs/github.js +521 -61
- package/dist/providers/vcs/index.js +8 -1
- package/dist/providers/vcs/pr-description.d.ts +127 -0
- package/dist/providers/vcs/pr-description.js +270 -0
- package/dist/providers/vcs/remote.d.ts +33 -1
- package/dist/providers/vcs/routing.d.ts +4 -2
- package/dist/providers/vcs/routing.js +6 -0
- package/dist/providers/vcs/types.d.ts +80 -3
- package/dist/quickstart/coding-seed.d.ts +21 -3
- package/dist/quickstart/coding-seed.js +283 -3
- package/dist/quickstart/images.d.ts +2 -0
- package/dist/quickstart/images.js +7 -1
- package/dist/quickstart/reviewer-prompt.d.ts +1 -1
- package/dist/quickstart/reviewer-prompt.js +6 -6
- package/dist/quickstart-images.json +1 -1
- package/dist/sandbox/brokered-fetch.d.ts +23 -0
- package/dist/sandbox/brokered-fetch.js +37 -0
- package/dist/sandbox/generated/zod.bundle.js +62 -1
- package/dist/sandbox/generated/zod3.bundle.js +5 -0
- package/dist/sandbox/host-functions.d.ts +35 -0
- package/dist/sandbox/host-functions.js +150 -91
- package/dist/sandbox/prelude.js +7 -1
- package/dist/sandbox/run-in-sandbox.d.ts +19 -0
- package/dist/sandbox/run-in-sandbox.js +28 -10
- package/dist/sandbox/safe-fetch.d.ts +2 -0
- package/dist/sandbox/safe-fetch.js +3 -1
- package/dist/sandbox/secret-broker-sigv4.d.ts +2 -0
- package/dist/sandbox/secret-broker-sigv4.js +49 -0
- package/dist/sandbox/secret-broker.d.ts +34 -0
- package/dist/sandbox/secret-broker.js +161 -0
- package/dist/sandbox/tool-capabilities.d.ts +10 -30
- package/dist/sandbox/user-tool.d.ts +14 -0
- package/dist/sandbox/user-tool.js +32 -0
- package/dist/sandbox/zod-params.d.ts +37 -5
- package/dist/sandbox/zod-params.js +181 -26
- package/dist/serve.js +25 -0
- package/dist/viewer/api-schema.d.ts +372 -2454
- package/dist/viewer/api-schema.js +29 -0
- package/dist/viewer/build-schemas.js +10 -3
- package/dist/viewer/event-bus.d.ts +6 -0
- package/dist/viewer/event-bus.js +16 -7
- package/dist/viewer/graph.d.ts +5 -2
- package/dist/viewer/graph.js +7 -2
- package/dist/viewer/http.d.ts +0 -1
- package/dist/viewer/http.js +2 -2
- package/dist/viewer/infra.js +25 -2
- package/dist/viewer/limits.d.ts +4 -0
- package/dist/viewer/limits.js +4 -0
- package/dist/viewer/openapi.d.ts +15 -0
- package/dist/viewer/openapi.js +170 -0
- package/dist/wardby-bin.js +10 -0
- package/docs/README.md +7 -0
- package/docs/agent-recipes.md +114 -27
- package/docs/architecture-runtime.md +16 -1
- package/docs/code-review-agents.md +689 -45
- package/docs/coding-agent-setup.md +602 -12
- package/docs/coding-packages.md +1037 -92
- package/docs/coding-services.md +30 -13
- package/docs/coding-worker-byo-images.md +218 -6
- package/docs/coding-worker-isolation.md +173 -44
- package/docs/getting-started-gke.md +332 -129
- package/docs/getting-started-identity-provider.md +31 -11
- package/docs/getting-started.md +14 -4
- package/docs/jira-agents.md +22 -9
- package/docs/knowledge/blob-not-found-semantics.md +41 -0
- package/docs/knowledge/bounded-file-descriptor.md +52 -0
- package/docs/knowledge/delegation-admission-slots.md +52 -0
- package/docs/knowledge/http-dispatcher-bootstrap.md +61 -0
- package/docs/knowledge/import-rename-target.md +52 -0
- package/docs/knowledge/index.md +57 -0
- package/docs/knowledge/log.md +9 -0
- package/docs/knowledge/mcp-cancelled-task-precedence.md +41 -0
- package/docs/knowledge/mcp-http-prompt-discovery.md +41 -0
- package/docs/knowledge/mcp-schema-module-boundary.md +41 -0
- package/docs/knowledge/nullable-tool-uniqueness.md +52 -0
- package/docs/knowledge/overview-cli.md +74 -0
- package/docs/knowledge/overview-coding-proxy.md +72 -0
- package/docs/knowledge/overview-coding.md +72 -0
- package/docs/knowledge/overview-config.md +60 -0
- package/docs/knowledge/overview-core.md +72 -0
- package/docs/knowledge/overview-deploy.md +83 -0
- package/docs/knowledge/overview-mcp.md +61 -0
- package/docs/knowledge/overview-prisma.md +72 -0
- package/docs/knowledge/overview-providers.md +89 -0
- package/docs/knowledge/overview-sandbox.md +83 -0
- package/docs/knowledge/overview-surfaces.md +83 -0
- package/docs/knowledge/private-datastore-shared-boundary.md +54 -0
- package/docs/knowledge/proxy-settlement-projections.md +41 -0
- package/docs/knowledge/run-pricing-first-writer.md +43 -0
- package/docs/knowledge/schedule-claim-transaction.md +41 -0
- package/docs/knowledge/secret-entry-replica-contract.md +52 -0
- package/docs/knowledge/terminal-run-first-writer.md +41 -0
- package/docs/knowledge/transactional-agent-authorization.md +52 -0
- package/docs/knowledge/viewer-notify-write-isolation.md +30 -0
- package/docs/knowledge/warm-input-publication.md +30 -0
- package/docs/knowledge/workspace-staging-failure.md +54 -0
- package/docs/knowledge.md +54 -14
- package/docs/native-sandbox.md +731 -0
- package/docs/observability.md +4 -0
- package/docs/release-verification.md +9 -0
- package/docs/security-deployment.md +146 -14
- package/docs/slack-notifications.md +268 -0
- package/docs/tool-secrets.md +284 -0
- package/docs/viewer-api.md +46 -5
- package/docs/viewer-api.openapi.yml +1404 -0
- package/help/admin-viewer.md +29 -3
- package/help/agent-recipes.md +27 -0
- package/help/architecture-agent.md +11 -6
- package/help/brokered-secrets.md +79 -0
- package/help/build-claude-code-image.md +131 -0
- package/help/build-worker-image.md +6 -7
- package/help/builder-agent.md +19 -6
- package/help/code-review-agents.md +243 -10
- package/help/coding-packages.md +156 -6
- package/help/cost-attribution.md +9 -5
- package/help/creating-agents.md +14 -1
- package/help/dependency-cache.md +143 -0
- package/help/deploy-gke.md +23 -9
- package/help/deployment-targets.md +25 -14
- package/help/errors/budget-exhausted.md +187 -0
- package/help/errors/budget-group-exhausted.md +5 -1
- package/help/errors/coding-provider-not-configured.md +2 -2
- package/help/errors/coding-stream-quota-exceeded.md +33 -0
- package/help/errors/coding-workspace-disk-exceeds-limit.md +39 -0
- package/help/errors/continuation-closed.md +9 -12
- package/help/errors/database-auth-invalid.md +28 -0
- package/help/errors/delegation-conflict.md +24 -0
- package/help/errors/file-list-truncated.md +45 -0
- package/help/errors/full-read-required.md +49 -0
- package/help/errors/github-account-not-allowed.md +29 -0
- package/help/errors/graph-incomplete.md +43 -0
- package/help/errors/graph-limit.md +43 -0
- package/help/errors/low-power-disabled.md +29 -0
- package/help/errors/low-power-scale-forbidden.md +35 -0
- package/help/errors/low-power-wake-timeout.md +30 -0
- package/help/errors/merge-conflict.md +49 -0
- package/help/errors/mobile-disabled.md +31 -0
- package/help/errors/native-sandbox-capacity.md +22 -0
- package/help/errors/native-sandbox-deadline-exceeded.md +19 -0
- package/help/errors/native-sandbox-docker-failed.md +20 -0
- package/help/errors/native-sandbox-gateway-error.md +20 -0
- package/help/errors/native-sandbox-gateway-unavailable.md +21 -0
- package/help/errors/native-sandbox-image-not-pinned.md +19 -0
- package/help/errors/native-sandbox-isolation-mismatch.md +20 -0
- package/help/errors/native-sandbox-launch-abandoned.md +21 -0
- package/help/errors/native-sandbox-network-unenforced.md +22 -0
- package/help/errors/native-sandbox-requires-catalog.md +31 -0
- package/help/errors/native-sandbox-unavailable.md +19 -0
- package/help/errors/native-sandbox-warm-delivery-failed.md +21 -0
- package/help/errors/native-sandbox-worker-exited.md +21 -0
- package/help/errors/native-sandbox-worker-lost.md +20 -0
- package/help/errors/native-sandbox-worker-unready.md +22 -0
- package/help/errors/package-not-allowed-pending.md +52 -0
- package/help/errors/package-not-allowed.md +51 -0
- package/help/errors/package-refusals.md +43 -0
- package/help/errors/patch-cursor-malformed.md +31 -0
- package/help/errors/run-lost.md +39 -0
- package/help/errors/run-transcript-download.md +44 -0
- package/help/errors/secret-broker-body-invalid.md +26 -0
- package/help/errors/secret-broker-changed.md +20 -0
- package/help/errors/secret-broker-config-invalid.md +30 -0
- package/help/errors/secret-broker-conflict.md +27 -0
- package/help/errors/secret-broker-destination-denied.md +28 -0
- package/help/errors/secret-broker-value-invalid.md +28 -0
- package/help/errors/secret-brokered.md +24 -0
- package/help/errors/secret-in-value.md +69 -0
- package/help/errors/secret-not-brokered.md +25 -0
- package/help/errors/slack-auth-failed.md +48 -0
- package/help/errors/slack-channel-unreachable.md +39 -0
- package/help/errors/slack-not-configured.md +33 -0
- package/help/errors/target-merge.md +40 -0
- package/help/fix-merge-conflicts.md +73 -0
- package/help/getting-started.md +4 -5
- package/help/github-app-setup.md +132 -0
- package/help/github.md +40 -1
- package/help/identity-and-access.md +7 -1
- package/help/jira.md +23 -6
- package/help/knowledge.md +16 -7
- package/help/local-repositories.md +3 -4
- package/help/low-power-mode.md +131 -0
- package/help/merge-order-check.md +122 -0
- package/help/mobile-app.md +54 -0
- package/help/native-capabilities.md +29 -1
- package/help/native-sandbox.md +150 -0
- package/help/observability.md +8 -0
- package/help/operating-agents.md +5 -0
- package/help/package-audit-mode.md +91 -0
- package/help/related-pull-requests.md +80 -16
- package/help/repo-instructions-and-skills.md +91 -0
- package/help/resume-runs-locally.md +131 -0
- package/help/review-fix-rounds.md +43 -1
- package/help/sharing-agents.md +59 -0
- package/help/slack-notifications.md +76 -0
- package/help/status-comments.md +31 -0
- package/help/stop-run.md +58 -0
- package/help/troubleshooting/budgets.md +28 -0
- package/help/troubleshooting/coding-workers.md +99 -7
- package/package.json +27 -13
- package/prisma/migrations/20261009000003_native_execution_mode/migration.sql +12 -0
- package/prisma/migrations/20261009000004_native_gateway_ledger/migration.sql +65 -0
- package/prisma/migrations/20261009000005_native_gateway_call_child_agent/migration.sql +5 -0
- package/prisma/migrations/20261009000006_run_deferred_start_stop/migration.sql +14 -0
- package/prisma/migrations/20261009000007_native_gateway_network_ready/migration.sql +5 -0
- package/prisma/migrations/20261010000001_workflow_notifications/migration.sql +99 -0
- package/prisma/migrations/20261011000001_native_gateway_session_status_index/migration.sql +2 -0
- package/prisma/migrations/20261012000001_native_warm_worker/migration.sql +32 -0
- package/prisma/migrations/20261013000001_coding_run_merge_order/migration.sql +2 -0
- package/prisma/migrations/20261013000001_secret_broker/migration.sql +17 -0
- package/prisma/migrations/20261013000002_deferred_review_request/migration.sql +4 -0
- package/prisma/migrations/20261014000000_repo_skills/migration.sql +15 -0
- package/prisma/migrations/20261015000001_coding_run_merge_order_index/migration.sql +2 -0
- package/prisma/migrations/20261015000002_no_change_rereview/migration.sql +2 -0
- package/prisma/migrations/20261016000000_registry_approved_accepted_advisories/migration.sql +3 -0
- package/prisma/migrations/20261016000001_mark_ready_when_passing/migration.sql +3 -0
- package/prisma/migrations/20261017000000_debug_trace_max_mb/migration.sql +4 -0
- package/prisma/migrations/20261018000000_dependency_cache/migration.sql +53 -0
- package/prisma/migrations/20261019000000_claude_max_output_tokens/migration.sql +5 -0
- package/prisma/migrations/20261021000000_pr_description_hash/migration.sql +4 -0
- package/prisma/migrations/20261022000000_dependency_snapshot_validation_metadata/migration.sql +4 -0
- package/prisma/migrations/20261023000000_package_audit_mode/migration.sql +27 -0
- package/prisma/migrations/20261024000000_budget_events/migration.sql +26 -0
- package/prisma/migrations/20261025000000_cache_aware_holds/migration.sql +9 -0
- package/prisma/migrations/20261026000000_budget_overrun/migration.sql +4 -0
- package/prisma/migrations/20261027000000_coding_run_request/migration.sql +1 -0
- package/prisma/migrations/20261028000000_native_gateway_review_reads/migration.sql +6 -0
- package/prisma/migrations/20261029000000_lead_survives_deploy/migration.sql +6 -0
- package/prisma/migrations/20261030000000_local_review_covered_sha/migration.sql +2 -0
- package/prisma/migrations/20261031000000_coding_run_budget_limit/migration.sql +9 -0
- package/prisma/migrations/20261101000000_run_transcripts/migration.sql +22 -0
- package/prisma/schema.prisma +631 -146
- package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The native sandbox worker contract, version 1 (docs/private native sandbox
|
|
3
|
+
* plan, phase 2). The worker runs the unchanged NativeEngine; everything it
|
|
4
|
+
* needs from outside — model calls, built-in tools, privileged sandbox
|
|
5
|
+
* bridges, progress, streamed text, and the terminal result — is a call to the
|
|
6
|
+
* trusted gateway. The worker is untrusted: the gateway validates every
|
|
7
|
+
* request against these schemas, and nothing in WorkerInput can carry a
|
|
8
|
+
* secret value or a credential.
|
|
9
|
+
*
|
|
10
|
+
* Transport-neutral: the same messages travel in-process (loopback), over a
|
|
11
|
+
* child process's stdio, and (phase 3) over HTTP.
|
|
12
|
+
*/
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
import { causeCodeOf, GATEWAY_CAUSE_CODES } from "../core/error-code.js";
|
|
15
|
+
export { causeCodeOf, GATEWAY_CAUSE_CODES };
|
|
16
|
+
export declare const NATIVE_WORKER_PROTOCOL_VERSION = 1;
|
|
17
|
+
/** Above the sandbox's 12 MiB bridge-result cap, plus envelope. */
|
|
18
|
+
export declare const MAX_MESSAGE_BYTES: number;
|
|
19
|
+
export type ProtocolErrorCode = "unsupported_protocol_version" | "message_too_large" | "message_not_json" | "message_invalid";
|
|
20
|
+
export declare class ProtocolError extends Error {
|
|
21
|
+
readonly code: ProtocolErrorCode;
|
|
22
|
+
constructor(code: ProtocolErrorCode, message?: string);
|
|
23
|
+
}
|
|
24
|
+
/** Errors the gateway returns for a call; the worker treats them as final for that call. */
|
|
25
|
+
export type GatewayErrorCode =
|
|
26
|
+
/** The run is no longer pending/running, or its task was cancelled: stop. */
|
|
27
|
+
"run_not_drivable"
|
|
28
|
+
/** This callId was already used for a call that is still in flight or not replayable. */
|
|
29
|
+
| "duplicate_call"
|
|
30
|
+
/** A name the run is not allowed to use (unknown tool, bridge, or built-in). */
|
|
31
|
+
| "not_allowed" | "invalid_request"
|
|
32
|
+
/** A privileged bridge failed; `message` is what the tool sees, as in-process. */
|
|
33
|
+
| "bridge_error"
|
|
34
|
+
/** The run's budget cannot cover another model call (the gateway's reservation was refused). */
|
|
35
|
+
| "budget_exhausted"
|
|
36
|
+
/** The worker's network isolation is not proven yet: retry shortly. */
|
|
37
|
+
| "not_ready" | "internal";
|
|
38
|
+
export declare class GatewayError extends Error {
|
|
39
|
+
readonly code: GatewayErrorCode;
|
|
40
|
+
/**
|
|
41
|
+
* For `internal` only: the code the underlying error's message led with (causeCodeOf), so the
|
|
42
|
+
* run can name the cause without the rest of that message.
|
|
43
|
+
*/
|
|
44
|
+
readonly causeCode?: string | undefined;
|
|
45
|
+
constructor(code: GatewayErrorCode, message: string,
|
|
46
|
+
/**
|
|
47
|
+
* For `internal` only: the code the underlying error's message led with (causeCodeOf), so the
|
|
48
|
+
* run can name the cause without the rest of that message.
|
|
49
|
+
*/
|
|
50
|
+
causeCode?: string | undefined);
|
|
51
|
+
}
|
|
52
|
+
/** What the worker is told about an unexpected gateway failure: never the error's own text. */
|
|
53
|
+
export declare const GATEWAY_INTERNAL_MESSAGE = "The gateway could not serve this call.";
|
|
54
|
+
/**
|
|
55
|
+
* `err` as the worker may see it, on every transport (HTTP, stdio, loopback). An unexpected error
|
|
56
|
+
* becomes `internal` with the generic message; a GatewayError keeps its code and message. A cause
|
|
57
|
+
* code is carried only when it is declared (GATEWAY_CAUSE_CODES) and checked: not when it equals, contains, or is contained in a secret
|
|
58
|
+
* value the run can read (`secretValues`, read only when there is a code to check), and not at
|
|
59
|
+
* all when there is nothing to check it against or reading the values fails.
|
|
60
|
+
*/
|
|
61
|
+
export declare function workerGatewayError(err: unknown, secretValues?: () => Promise<Iterable<string>>): Promise<GatewayError>;
|
|
62
|
+
/**
|
|
63
|
+
* `err` as a transport carries it to the worker: a GatewayError (already checked by the gateway
|
|
64
|
+
* that threw it) as is, with a declared cause code only; anything else `internal` with the generic message and no cause code, since
|
|
65
|
+
* a transport has no secret values to check one against.
|
|
66
|
+
*/
|
|
67
|
+
export declare function toGatewayError(err: unknown): GatewayError;
|
|
68
|
+
export declare const LlmRequestSchema: z.ZodObject<{
|
|
69
|
+
model: z.ZodString;
|
|
70
|
+
messages: z.ZodArray<z.ZodObject<{
|
|
71
|
+
role: z.ZodEnum<{
|
|
72
|
+
system: "system";
|
|
73
|
+
user: "user";
|
|
74
|
+
assistant: "assistant";
|
|
75
|
+
tool: "tool";
|
|
76
|
+
}>;
|
|
77
|
+
content: z.ZodString;
|
|
78
|
+
toolCallId: z.ZodOptional<z.ZodString>;
|
|
79
|
+
name: z.ZodOptional<z.ZodString>;
|
|
80
|
+
toolCalls: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
81
|
+
id: z.ZodString;
|
|
82
|
+
name: z.ZodString;
|
|
83
|
+
argsJson: z.ZodString;
|
|
84
|
+
}, z.core.$strict>>>;
|
|
85
|
+
}, z.core.$strict>>;
|
|
86
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
87
|
+
name: z.ZodString;
|
|
88
|
+
description: z.ZodString;
|
|
89
|
+
parameters: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
90
|
+
}, z.core.$strict>>>;
|
|
91
|
+
maxTokens: z.ZodOptional<z.ZodNumber>;
|
|
92
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
93
|
+
stopSequences: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
94
|
+
effort: z.ZodOptional<z.ZodEnum<{
|
|
95
|
+
low: "low";
|
|
96
|
+
medium: "medium";
|
|
97
|
+
high: "high";
|
|
98
|
+
xhigh: "xhigh";
|
|
99
|
+
max: "max";
|
|
100
|
+
}>>;
|
|
101
|
+
}, z.core.$strict>;
|
|
102
|
+
export declare const LlmStreamEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
103
|
+
type: z.ZodLiteral<"text">;
|
|
104
|
+
delta: z.ZodString;
|
|
105
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
106
|
+
type: z.ZodLiteral<"tool_call">;
|
|
107
|
+
id: z.ZodString;
|
|
108
|
+
name: z.ZodString;
|
|
109
|
+
argsJson: z.ZodString;
|
|
110
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
111
|
+
type: z.ZodLiteral<"done">;
|
|
112
|
+
stopReason: z.ZodString;
|
|
113
|
+
usage: z.ZodObject<{
|
|
114
|
+
inputTokens: z.ZodNumber;
|
|
115
|
+
outputTokens: z.ZodNumber;
|
|
116
|
+
cachedInputTokens: z.ZodOptional<z.ZodNumber>;
|
|
117
|
+
cacheWriteTokens: z.ZodOptional<z.ZodNumber>;
|
|
118
|
+
costUsd: z.ZodNumber;
|
|
119
|
+
}, z.core.$strict>;
|
|
120
|
+
}, z.core.$strict>], "type">;
|
|
121
|
+
/** Everything the worker is given, once, at start. No secret values and no credentials. */
|
|
122
|
+
export declare const WorkerInputSchema: z.ZodObject<{
|
|
123
|
+
v: z.ZodLiteral<1>;
|
|
124
|
+
runId: z.ZodString;
|
|
125
|
+
agent: z.ZodObject<{
|
|
126
|
+
systemPrompt: z.ZodString;
|
|
127
|
+
model: z.ZodString;
|
|
128
|
+
budgetUsd: z.ZodNumber;
|
|
129
|
+
maxTurns: z.ZodNumber;
|
|
130
|
+
effort: z.ZodOptional<z.ZodEnum<{
|
|
131
|
+
low: "low";
|
|
132
|
+
medium: "medium";
|
|
133
|
+
high: "high";
|
|
134
|
+
xhigh: "xhigh";
|
|
135
|
+
max: "max";
|
|
136
|
+
}>>;
|
|
137
|
+
untrustedContext: z.ZodOptional<z.ZodString>;
|
|
138
|
+
}, z.core.$strict>;
|
|
139
|
+
tools: z.ZodArray<z.ZodObject<{
|
|
140
|
+
name: z.ZodString;
|
|
141
|
+
description: z.ZodString;
|
|
142
|
+
jsonSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
143
|
+
}, z.core.$strict>>;
|
|
144
|
+
builtinTools: z.ZodArray<z.ZodString>;
|
|
145
|
+
userTools: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
146
|
+
code: z.ZodString;
|
|
147
|
+
paramsZod: z.ZodString;
|
|
148
|
+
}, z.core.$strict>>;
|
|
149
|
+
runsConcurrently: z.ZodArray<z.ZodString>;
|
|
150
|
+
pricing: z.ZodObject<{
|
|
151
|
+
provider: z.ZodString;
|
|
152
|
+
modelId: z.ZodString;
|
|
153
|
+
encoding: z.ZodEnum<{
|
|
154
|
+
cl100k_base: "cl100k_base";
|
|
155
|
+
o200k_base: "o200k_base";
|
|
156
|
+
}>;
|
|
157
|
+
inputPerMTok: z.ZodNumber;
|
|
158
|
+
outputPerMTok: z.ZodNumber;
|
|
159
|
+
cachedInputPerMTok: z.ZodNumber;
|
|
160
|
+
cacheWritePerMTok: z.ZodNumber;
|
|
161
|
+
efforts: z.ZodArray<z.ZodEnum<{
|
|
162
|
+
low: "low";
|
|
163
|
+
medium: "medium";
|
|
164
|
+
high: "high";
|
|
165
|
+
xhigh: "xhigh";
|
|
166
|
+
max: "max";
|
|
167
|
+
}>>;
|
|
168
|
+
thinkingMode: z.ZodString;
|
|
169
|
+
}, z.core.$strict>;
|
|
170
|
+
gateway: z.ZodOptional<z.ZodObject<{
|
|
171
|
+
url: z.ZodString;
|
|
172
|
+
capability: z.ZodString;
|
|
173
|
+
}, z.core.$strict>>;
|
|
174
|
+
}, z.core.$strict>;
|
|
175
|
+
export type WorkerInput = z.infer<typeof WorkerInputSchema>;
|
|
176
|
+
/** Each gateway method and its params. */
|
|
177
|
+
export declare const GatewayParamsSchemas: {
|
|
178
|
+
readonly "llm.stream": z.ZodObject<{
|
|
179
|
+
request: z.ZodObject<{
|
|
180
|
+
model: z.ZodString;
|
|
181
|
+
messages: z.ZodArray<z.ZodObject<{
|
|
182
|
+
role: z.ZodEnum<{
|
|
183
|
+
system: "system";
|
|
184
|
+
user: "user";
|
|
185
|
+
assistant: "assistant";
|
|
186
|
+
tool: "tool";
|
|
187
|
+
}>;
|
|
188
|
+
content: z.ZodString;
|
|
189
|
+
toolCallId: z.ZodOptional<z.ZodString>;
|
|
190
|
+
name: z.ZodOptional<z.ZodString>;
|
|
191
|
+
toolCalls: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
192
|
+
id: z.ZodString;
|
|
193
|
+
name: z.ZodString;
|
|
194
|
+
argsJson: z.ZodString;
|
|
195
|
+
}, z.core.$strict>>>;
|
|
196
|
+
}, z.core.$strict>>;
|
|
197
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
198
|
+
name: z.ZodString;
|
|
199
|
+
description: z.ZodString;
|
|
200
|
+
parameters: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
201
|
+
}, z.core.$strict>>>;
|
|
202
|
+
maxTokens: z.ZodOptional<z.ZodNumber>;
|
|
203
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
204
|
+
stopSequences: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
205
|
+
effort: z.ZodOptional<z.ZodEnum<{
|
|
206
|
+
low: "low";
|
|
207
|
+
medium: "medium";
|
|
208
|
+
high: "high";
|
|
209
|
+
xhigh: "xhigh";
|
|
210
|
+
max: "max";
|
|
211
|
+
}>>;
|
|
212
|
+
}, z.core.$strict>;
|
|
213
|
+
}, z.core.$strict>;
|
|
214
|
+
readonly "llm.countTokens": z.ZodObject<{
|
|
215
|
+
model: z.ZodString;
|
|
216
|
+
messages: z.ZodArray<z.ZodObject<{
|
|
217
|
+
role: z.ZodEnum<{
|
|
218
|
+
system: "system";
|
|
219
|
+
user: "user";
|
|
220
|
+
assistant: "assistant";
|
|
221
|
+
tool: "tool";
|
|
222
|
+
}>;
|
|
223
|
+
content: z.ZodString;
|
|
224
|
+
toolCallId: z.ZodOptional<z.ZodString>;
|
|
225
|
+
name: z.ZodOptional<z.ZodString>;
|
|
226
|
+
toolCalls: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
227
|
+
id: z.ZodString;
|
|
228
|
+
name: z.ZodString;
|
|
229
|
+
argsJson: z.ZodString;
|
|
230
|
+
}, z.core.$strict>>>;
|
|
231
|
+
}, z.core.$strict>>;
|
|
232
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
233
|
+
name: z.ZodString;
|
|
234
|
+
description: z.ZodString;
|
|
235
|
+
parameters: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
236
|
+
}, z.core.$strict>>>;
|
|
237
|
+
}, z.core.$strict>;
|
|
238
|
+
readonly "builtin.call": z.ZodObject<{
|
|
239
|
+
name: z.ZodString;
|
|
240
|
+
argsJson: z.ZodString;
|
|
241
|
+
}, z.core.$strict>;
|
|
242
|
+
/** `invocation` names one tool call, so its bridges share one privileged host (secret redaction is per call). */
|
|
243
|
+
readonly "host.call": z.ZodObject<{
|
|
244
|
+
tool: z.ZodString;
|
|
245
|
+
invocation: z.ZodString;
|
|
246
|
+
bridge: z.ZodString;
|
|
247
|
+
argsJson: z.ZodString;
|
|
248
|
+
}, z.core.$strict>;
|
|
249
|
+
readonly progress: z.ZodObject<{
|
|
250
|
+
turns: z.ZodNumber;
|
|
251
|
+
usage: z.ZodObject<{
|
|
252
|
+
tokensIn: z.ZodNumber;
|
|
253
|
+
tokensOut: z.ZodNumber;
|
|
254
|
+
costUsd: z.ZodNumber;
|
|
255
|
+
}, z.core.$strict>;
|
|
256
|
+
}, z.core.$strict>;
|
|
257
|
+
readonly text: z.ZodObject<{
|
|
258
|
+
seq: z.ZodNumber;
|
|
259
|
+
delta: z.ZodString;
|
|
260
|
+
}, z.core.$strict>;
|
|
261
|
+
readonly finish: z.ZodObject<{
|
|
262
|
+
status: z.ZodEnum<{
|
|
263
|
+
failed: "failed";
|
|
264
|
+
budget_exhausted: "budget_exhausted";
|
|
265
|
+
refused: "refused";
|
|
266
|
+
succeeded: "succeeded";
|
|
267
|
+
}>;
|
|
268
|
+
finalText: z.ZodString;
|
|
269
|
+
turns: z.ZodNumber;
|
|
270
|
+
error: z.ZodOptional<z.ZodString>;
|
|
271
|
+
}, z.core.$strict>;
|
|
272
|
+
};
|
|
273
|
+
export type GatewayMethod = keyof typeof GatewayParamsSchemas;
|
|
274
|
+
export type GatewayParams<M extends GatewayMethod> = z.infer<(typeof GatewayParamsSchemas)[M]>;
|
|
275
|
+
export declare const GatewayRequestSchema: z.ZodObject<{
|
|
276
|
+
v: z.ZodLiteral<1>;
|
|
277
|
+
runId: z.ZodString;
|
|
278
|
+
callId: z.ZodString;
|
|
279
|
+
method: z.ZodEnum<{
|
|
280
|
+
finish: "finish";
|
|
281
|
+
text: "text";
|
|
282
|
+
"llm.stream": "llm.stream";
|
|
283
|
+
"llm.countTokens": "llm.countTokens";
|
|
284
|
+
"builtin.call": "builtin.call";
|
|
285
|
+
"host.call": "host.call";
|
|
286
|
+
progress: "progress";
|
|
287
|
+
}>;
|
|
288
|
+
params: z.ZodUnknown;
|
|
289
|
+
}, z.core.$strict>;
|
|
290
|
+
export type GatewayRequest = z.infer<typeof GatewayRequestSchema>;
|
|
291
|
+
/** Rejects before parsing a message too large to accept. */
|
|
292
|
+
export declare function assertMessageSize(text: string): void;
|
|
293
|
+
/** Parses a JSON message text with the size cap, version check, and schema. */
|
|
294
|
+
export declare function parseMessage<T>(text: string, schema: z.ZodType<T>): T;
|
|
295
|
+
/** A gateway request's params, validated for its method. */
|
|
296
|
+
export declare function parseParams<M extends GatewayMethod>(method: M, params: unknown): GatewayParams<M>;
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The native sandbox worker contract, version 1 (docs/private native sandbox
|
|
3
|
+
* plan, phase 2). The worker runs the unchanged NativeEngine; everything it
|
|
4
|
+
* needs from outside — model calls, built-in tools, privileged sandbox
|
|
5
|
+
* bridges, progress, streamed text, and the terminal result — is a call to the
|
|
6
|
+
* trusted gateway. The worker is untrusted: the gateway validates every
|
|
7
|
+
* request against these schemas, and nothing in WorkerInput can carry a
|
|
8
|
+
* secret value or a credential.
|
|
9
|
+
*
|
|
10
|
+
* Transport-neutral: the same messages travel in-process (loopback), over a
|
|
11
|
+
* child process's stdio, and (phase 3) over HTTP.
|
|
12
|
+
*/
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
import { causeCodeOf, GATEWAY_CAUSE_CODES } from "../core/error-code.js";
|
|
15
|
+
import { LLM_EFFORT_LEVELS } from "../providers/llm/types.js";
|
|
16
|
+
import { overlapsSecretValue } from "../sandbox/host-functions.js";
|
|
17
|
+
// The allow-list and its checked helper live in core/error-code.ts (shared with the runner); re-exported here.
|
|
18
|
+
export { causeCodeOf, GATEWAY_CAUSE_CODES };
|
|
19
|
+
export const NATIVE_WORKER_PROTOCOL_VERSION = 1;
|
|
20
|
+
/** Above the sandbox's 12 MiB bridge-result cap, plus envelope. */
|
|
21
|
+
export const MAX_MESSAGE_BYTES = 16 * 1024 * 1024;
|
|
22
|
+
export class ProtocolError extends Error {
|
|
23
|
+
code;
|
|
24
|
+
constructor(code, message) {
|
|
25
|
+
super(message ? `${code}: ${message}` : code);
|
|
26
|
+
this.code = code;
|
|
27
|
+
this.name = "ProtocolError";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export class GatewayError extends Error {
|
|
31
|
+
code;
|
|
32
|
+
causeCode;
|
|
33
|
+
constructor(code, message,
|
|
34
|
+
/**
|
|
35
|
+
* For `internal` only: the code the underlying error's message led with (causeCodeOf), so the
|
|
36
|
+
* run can name the cause without the rest of that message.
|
|
37
|
+
*/
|
|
38
|
+
causeCode) {
|
|
39
|
+
super(message);
|
|
40
|
+
this.code = code;
|
|
41
|
+
this.causeCode = causeCode;
|
|
42
|
+
this.name = "GatewayError";
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** What the worker is told about an unexpected gateway failure: never the error's own text. */
|
|
46
|
+
export const GATEWAY_INTERNAL_MESSAGE = "The gateway could not serve this call.";
|
|
47
|
+
/**
|
|
48
|
+
* `err` as the worker may see it, on every transport (HTTP, stdio, loopback). An unexpected error
|
|
49
|
+
* becomes `internal` with the generic message; a GatewayError keeps its code and message. A cause
|
|
50
|
+
* code is carried only when it is declared (GATEWAY_CAUSE_CODES) and checked: not when it equals, contains, or is contained in a secret
|
|
51
|
+
* value the run can read (`secretValues`, read only when there is a code to check), and not at
|
|
52
|
+
* all when there is nothing to check it against or reading the values fails.
|
|
53
|
+
*/
|
|
54
|
+
export async function workerGatewayError(err, secretValues) {
|
|
55
|
+
const leading = err instanceof GatewayError ? err.causeCode : causeCodeOf(err);
|
|
56
|
+
// Declared codes only; the exact-value check below is a second guard.
|
|
57
|
+
const candidate = leading && GATEWAY_CAUSE_CODES.has(leading) ? leading : undefined;
|
|
58
|
+
let causeCode;
|
|
59
|
+
if (candidate && secretValues) {
|
|
60
|
+
const values = await secretValues().catch(() => undefined);
|
|
61
|
+
if (values && !overlapsSecretValue(candidate, values))
|
|
62
|
+
causeCode = candidate;
|
|
63
|
+
}
|
|
64
|
+
if (err instanceof GatewayError)
|
|
65
|
+
return new GatewayError(err.code, err.message, causeCode);
|
|
66
|
+
return new GatewayError("internal", causeCode ? `The gateway could not serve this call (${causeCode}).` : GATEWAY_INTERNAL_MESSAGE, causeCode);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* `err` as a transport carries it to the worker: a GatewayError (already checked by the gateway
|
|
70
|
+
* that threw it) as is, with a declared cause code only; anything else `internal` with the generic message and no cause code, since
|
|
71
|
+
* a transport has no secret values to check one against.
|
|
72
|
+
*/
|
|
73
|
+
export function toGatewayError(err) {
|
|
74
|
+
if (err instanceof GatewayError) {
|
|
75
|
+
const causeCode = err.causeCode && GATEWAY_CAUSE_CODES.has(err.causeCode) ? err.causeCode : undefined;
|
|
76
|
+
return new GatewayError(err.code, err.message, causeCode);
|
|
77
|
+
}
|
|
78
|
+
return new GatewayError("internal", GATEWAY_INTERNAL_MESSAGE);
|
|
79
|
+
}
|
|
80
|
+
const runId = z.string().min(1).max(64);
|
|
81
|
+
const callId = z.string().min(1).max(128);
|
|
82
|
+
const LlmMessageSchema = z
|
|
83
|
+
.object({
|
|
84
|
+
role: z.enum(["system", "user", "assistant", "tool"]),
|
|
85
|
+
content: z.string(),
|
|
86
|
+
toolCallId: z.string().optional(),
|
|
87
|
+
name: z.string().optional(),
|
|
88
|
+
toolCalls: z.array(z.object({ id: z.string(), name: z.string(), argsJson: z.string() }).strict()).optional(),
|
|
89
|
+
})
|
|
90
|
+
.strict();
|
|
91
|
+
const LlmToolDefSchema = z
|
|
92
|
+
.object({ name: z.string(), description: z.string(), parameters: z.record(z.string(), z.unknown()) })
|
|
93
|
+
.strict();
|
|
94
|
+
export const LlmRequestSchema = z
|
|
95
|
+
.object({
|
|
96
|
+
model: z.string(),
|
|
97
|
+
messages: z.array(LlmMessageSchema),
|
|
98
|
+
tools: z.array(LlmToolDefSchema).optional(),
|
|
99
|
+
maxTokens: z.number().int().positive().optional(),
|
|
100
|
+
temperature: z.number().optional(),
|
|
101
|
+
stopSequences: z.array(z.string()).optional(),
|
|
102
|
+
effort: z.enum(LLM_EFFORT_LEVELS).optional(),
|
|
103
|
+
})
|
|
104
|
+
.strict();
|
|
105
|
+
export const LlmStreamEventSchema = z.discriminatedUnion("type", [
|
|
106
|
+
z.object({ type: z.literal("text"), delta: z.string() }).strict(),
|
|
107
|
+
z.object({ type: z.literal("tool_call"), id: z.string(), name: z.string(), argsJson: z.string() }).strict(),
|
|
108
|
+
z
|
|
109
|
+
.object({
|
|
110
|
+
type: z.literal("done"),
|
|
111
|
+
stopReason: z.string(),
|
|
112
|
+
usage: z
|
|
113
|
+
.object({
|
|
114
|
+
inputTokens: z.number(),
|
|
115
|
+
outputTokens: z.number(),
|
|
116
|
+
cachedInputTokens: z.number().optional(),
|
|
117
|
+
cacheWriteTokens: z.number().optional(),
|
|
118
|
+
costUsd: z.number(),
|
|
119
|
+
})
|
|
120
|
+
.strict(),
|
|
121
|
+
})
|
|
122
|
+
.strict(),
|
|
123
|
+
]);
|
|
124
|
+
const LoadedToolSchema = z
|
|
125
|
+
.object({ name: z.string(), description: z.string(), jsonSchema: z.record(z.string(), z.unknown()) })
|
|
126
|
+
.strict();
|
|
127
|
+
/** A user tool as the worker runs it: code and schema only. Capabilities stay on the gateway. */
|
|
128
|
+
const WorkerUserToolSchema = z.object({ code: z.string(), paramsZod: z.string() }).strict();
|
|
129
|
+
const PricingSchema = z
|
|
130
|
+
.object({
|
|
131
|
+
provider: z.string(),
|
|
132
|
+
modelId: z.string(),
|
|
133
|
+
encoding: z.enum(["cl100k_base", "o200k_base"]),
|
|
134
|
+
inputPerMTok: z.number(),
|
|
135
|
+
outputPerMTok: z.number(),
|
|
136
|
+
cachedInputPerMTok: z.number(),
|
|
137
|
+
cacheWritePerMTok: z.number(),
|
|
138
|
+
efforts: z.array(z.enum(LLM_EFFORT_LEVELS)),
|
|
139
|
+
thinkingMode: z.string(),
|
|
140
|
+
})
|
|
141
|
+
.strict();
|
|
142
|
+
/** Everything the worker is given, once, at start. No secret values and no credentials. */
|
|
143
|
+
export const WorkerInputSchema = z
|
|
144
|
+
.object({
|
|
145
|
+
v: z.literal(NATIVE_WORKER_PROTOCOL_VERSION),
|
|
146
|
+
runId,
|
|
147
|
+
agent: z
|
|
148
|
+
.object({
|
|
149
|
+
systemPrompt: z.string(),
|
|
150
|
+
model: z.string(),
|
|
151
|
+
budgetUsd: z.number().nonnegative(),
|
|
152
|
+
maxTurns: z.number().int().positive(),
|
|
153
|
+
effort: z.enum(LLM_EFFORT_LEVELS).optional(),
|
|
154
|
+
untrustedContext: z.string().optional(),
|
|
155
|
+
})
|
|
156
|
+
.strict(),
|
|
157
|
+
tools: z.array(LoadedToolSchema),
|
|
158
|
+
/** Names the gateway serves (memory, repo_*, jira_*, sub-agent memory, delegate_to_*). */
|
|
159
|
+
builtinTools: z.array(z.string()),
|
|
160
|
+
/** User tools the worker runs itself, by name. */
|
|
161
|
+
userTools: z.record(z.string(), WorkerUserToolSchema),
|
|
162
|
+
/** Tool names whose calls in one turn may run at the same time (delegations, when opted in). */
|
|
163
|
+
runsConcurrently: z.array(z.string()),
|
|
164
|
+
/** The run's pinned catalog entry, so the engine's local budget checks price without a network call. */
|
|
165
|
+
pricing: PricingSchema,
|
|
166
|
+
/**
|
|
167
|
+
* Where and how to reach the HTTP gateway. Absent: the gateway is on this process's stdio.
|
|
168
|
+
* The capability is given once, here, on the worker's stdin; it is never in its environment,
|
|
169
|
+
* argv, or the server's stored snapshot (only its hash is stored).
|
|
170
|
+
*/
|
|
171
|
+
gateway: z
|
|
172
|
+
.object({ url: z.string().url(), capability: z.string().min(32).max(256) })
|
|
173
|
+
.strict()
|
|
174
|
+
.optional(),
|
|
175
|
+
})
|
|
176
|
+
.strict();
|
|
177
|
+
const UsageTotalsSchema = z.object({ tokensIn: z.number(), tokensOut: z.number(), costUsd: z.number() }).strict();
|
|
178
|
+
/** Each gateway method and its params. */
|
|
179
|
+
export const GatewayParamsSchemas = {
|
|
180
|
+
"llm.stream": z.object({ request: LlmRequestSchema }).strict(),
|
|
181
|
+
"llm.countTokens": z
|
|
182
|
+
.object({ model: z.string(), messages: z.array(LlmMessageSchema), tools: z.array(LlmToolDefSchema).optional() })
|
|
183
|
+
.strict(),
|
|
184
|
+
"builtin.call": z.object({ name: z.string().max(200), argsJson: z.string() }).strict(),
|
|
185
|
+
/** `invocation` names one tool call, so its bridges share one privileged host (secret redaction is per call). */
|
|
186
|
+
"host.call": z
|
|
187
|
+
.object({
|
|
188
|
+
tool: z.string().max(200),
|
|
189
|
+
invocation: z.string().min(1).max(128),
|
|
190
|
+
bridge: z.string().max(64),
|
|
191
|
+
argsJson: z.string(),
|
|
192
|
+
})
|
|
193
|
+
.strict(),
|
|
194
|
+
progress: z.object({ turns: z.number().int().nonnegative(), usage: UsageTotalsSchema }).strict(),
|
|
195
|
+
text: z.object({ seq: z.number().int().nonnegative(), delta: z.string() }).strict(),
|
|
196
|
+
finish: z
|
|
197
|
+
.object({
|
|
198
|
+
status: z.enum(["succeeded", "budget_exhausted", "refused", "failed"]),
|
|
199
|
+
finalText: z.string(),
|
|
200
|
+
turns: z.number().int().nonnegative(),
|
|
201
|
+
error: z.string().optional(),
|
|
202
|
+
})
|
|
203
|
+
.strict(),
|
|
204
|
+
};
|
|
205
|
+
export const GatewayRequestSchema = z
|
|
206
|
+
.object({
|
|
207
|
+
v: z.literal(NATIVE_WORKER_PROTOCOL_VERSION),
|
|
208
|
+
runId,
|
|
209
|
+
callId,
|
|
210
|
+
method: z.enum(Object.keys(GatewayParamsSchemas)),
|
|
211
|
+
params: z.unknown(),
|
|
212
|
+
})
|
|
213
|
+
.strict();
|
|
214
|
+
/** Rejects before parsing a message too large to accept. */
|
|
215
|
+
export function assertMessageSize(text) {
|
|
216
|
+
if (Buffer.byteLength(text) > MAX_MESSAGE_BYTES)
|
|
217
|
+
throw new ProtocolError("message_too_large");
|
|
218
|
+
}
|
|
219
|
+
function checkVersion(raw) {
|
|
220
|
+
if (raw && typeof raw === "object" && "v" in raw && raw.v !== NATIVE_WORKER_PROTOCOL_VERSION) {
|
|
221
|
+
throw new ProtocolError("unsupported_protocol_version");
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/** Parses a JSON message text with the size cap, version check, and schema. */
|
|
225
|
+
export function parseMessage(text, schema) {
|
|
226
|
+
assertMessageSize(text);
|
|
227
|
+
let raw;
|
|
228
|
+
try {
|
|
229
|
+
raw = JSON.parse(text);
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
throw new ProtocolError("message_not_json");
|
|
233
|
+
}
|
|
234
|
+
checkVersion(raw);
|
|
235
|
+
const parsed = schema.safeParse(raw);
|
|
236
|
+
if (!parsed.success)
|
|
237
|
+
throw new ProtocolError("message_invalid", parsed.error.issues[0]?.message);
|
|
238
|
+
return parsed.data;
|
|
239
|
+
}
|
|
240
|
+
/** A gateway request's params, validated for its method. */
|
|
241
|
+
export function parseParams(method, params) {
|
|
242
|
+
const parsed = GatewayParamsSchemas[method].safeParse(params);
|
|
243
|
+
if (!parsed.success)
|
|
244
|
+
throw new ProtocolError("message_invalid", parsed.error.issues[0]?.message);
|
|
245
|
+
return parsed.data;
|
|
246
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Executor for sandbox-mode native runs (docs/native-sandbox.md). Phase 1's
|
|
3
|
+
* RoutingExecutor sends every run whose snapshot says `sandbox` here.
|
|
4
|
+
*
|
|
5
|
+
* - start: creates the run's gateway session (pinning the run and recording
|
|
6
|
+
* `native-sandbox` as its backend before any worker exists), launches the
|
|
7
|
+
* worker, and returns. Whichever gateway replica serves the worker's
|
|
8
|
+
* `finish` makes the terminal write; this executor only watches for a
|
|
9
|
+
* worker that exits without one, and for its deadline.
|
|
10
|
+
* - stop: records the run cancelled, ends the session (every further gateway
|
|
11
|
+
* call is refused, so the worker exits at its next one), gives the worker a
|
|
12
|
+
* short grace to exit, then kills and removes it (a warm pool worker is
|
|
13
|
+
* discarded, never reused), and stops its open delegations.
|
|
14
|
+
* - recover: answers the reconciler from the worker's container state, and
|
|
15
|
+
* never launches one.
|
|
16
|
+
* - launch: the janitor removes workers whose runs have ended.
|
|
17
|
+
*/
|
|
18
|
+
import { type NativeRunProviders, type RunnerDb } from "../core/runner.js";
|
|
19
|
+
import type { ExecutionRecoveryResult, Executor, PersistedExecutionHandle } from "../providers/executor/types.js";
|
|
20
|
+
import type { NativeWorkerState } from "./docker-launcher.js";
|
|
21
|
+
import { type DetachedWorkerLauncher, type WorkerHandle } from "./launch.js";
|
|
22
|
+
import { type GatewayLedgerDb } from "./ledger.js";
|
|
23
|
+
/** What the executor needs from a worker launcher (DockerNativeWorkerLauncher, or a test double). */
|
|
24
|
+
export interface ManagedWorkerLauncher extends DetachedWorkerLauncher {
|
|
25
|
+
handle(runId: string): WorkerHandle;
|
|
26
|
+
inspect(runId: string): Promise<NativeWorkerState>;
|
|
27
|
+
kill(runId: string): Promise<void>;
|
|
28
|
+
remove(runId: string): Promise<void>;
|
|
29
|
+
listWorkers(): Promise<{
|
|
30
|
+
name: string;
|
|
31
|
+
runHash: string;
|
|
32
|
+
}[]>;
|
|
33
|
+
removeByWorkerName(name: string): Promise<void>;
|
|
34
|
+
/** The URL workers dial, when only the launcher can know it (a Kubernetes Service's ClusterIP). */
|
|
35
|
+
resolveGatewayUrl?(): Promise<string>;
|
|
36
|
+
/** Background upkeep the long-lived process runs from the executor's `launch()` (the warm pool's). */
|
|
37
|
+
start?(): Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
export interface NativeSandboxExecutorOptions {
|
|
40
|
+
db: RunnerDb & GatewayLedgerDb;
|
|
41
|
+
/** The server's providers: the run's load, and its terminal writes when the worker cannot make them. */
|
|
42
|
+
providers: NativeRunProviders;
|
|
43
|
+
launcher: ManagedWorkerLauncher;
|
|
44
|
+
/** What workers dial: the gateway's alias on their run network. */
|
|
45
|
+
gatewayUrl: string;
|
|
46
|
+
/** NATIVE_SANDBOX_MAX_CONCURRENT: a start past this many active sessions fails with native_sandbox_capacity. */
|
|
47
|
+
maxConcurrent?: number;
|
|
48
|
+
/** How long a stopped run's worker gets to exit on its own before it is killed (default NATIVE_SANDBOX_STOP_GRACE_MS). */
|
|
49
|
+
stopGraceMs?: number;
|
|
50
|
+
/** How often a launching run's heartbeat is refreshed (default a third of HEARTBEAT_TIMEOUT_MS). */
|
|
51
|
+
heartbeatIntervalMs?: number;
|
|
52
|
+
now?: () => number;
|
|
53
|
+
sleep?: (ms: number) => Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
/** A stopped sandbox run's worker exits at its next (refused) gateway call; past this it is killed. */
|
|
56
|
+
export declare const NATIVE_SANDBOX_STOP_GRACE_MS = 5000;
|
|
57
|
+
export declare const NATIVE_SANDBOX_WORKER_EXITED = "native_sandbox_worker_exited";
|
|
58
|
+
export declare const NATIVE_SANDBOX_DEADLINE = "native_sandbox_deadline_exceeded";
|
|
59
|
+
export declare class NativeSandboxExecutor implements Executor {
|
|
60
|
+
private readonly options;
|
|
61
|
+
private readonly ledger;
|
|
62
|
+
private readonly watching;
|
|
63
|
+
private readonly deadlineKilled;
|
|
64
|
+
constructor(options: NativeSandboxExecutorOptions);
|
|
65
|
+
private now;
|
|
66
|
+
private finishContext;
|
|
67
|
+
start(runId: string): Promise<void>;
|
|
68
|
+
/** Refreshes a still-live run's heartbeat while `work` runs. */
|
|
69
|
+
private whileHeartbeating;
|
|
70
|
+
/** The run is still live and its session open: a worker launched now would have work to do. */
|
|
71
|
+
private stillWanted;
|
|
72
|
+
/** Watches one worker in this process: its exit, and its deadline. */
|
|
73
|
+
private watch;
|
|
74
|
+
private onWorkerExit;
|
|
75
|
+
private endSession;
|
|
76
|
+
stop(runId: string, reason?: string): Promise<void>;
|
|
77
|
+
/** Waits up to stopGraceMs for the run's worker to exit or be gone; false when it still runs. Never throws. */
|
|
78
|
+
private awaitWorkerExit;
|
|
79
|
+
recover(handle: PersistedExecutionHandle): Promise<ExecutionRecoveryResult>;
|
|
80
|
+
/** Startup janitor: removes worker containers whose runs have ended or passed their deadline. Starts the warm pool. */
|
|
81
|
+
launch(): Promise<void>;
|
|
82
|
+
sweep(): Promise<number>;
|
|
83
|
+
}
|