@wardby/cli 0.6.0 → 0.8.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 +5 -5
- package/README.md +6 -1
- package/deploy/local/docker-compose.quickstart-coding.yml +19 -0
- package/dist/claude-coding-worker/driver.d.ts +33 -3
- package/dist/claude-coding-worker/driver.js +151 -21
- package/dist/claude-coding-worker/main.js +38 -6
- package/dist/claude-coding-worker/sdk.js +29 -2
- 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/claude-plugin/command.d.ts +61 -0
- package/dist/claude-plugin/command.js +376 -0
- package/dist/cli-help.d.ts +1 -1
- package/dist/cli-help.js +3 -1
- package/dist/cli.js +71 -13
- package/dist/coding/code-host.d.ts +16 -0
- package/dist/coding/code-host.js +60 -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/mcp-token.d.ts +12 -0
- package/dist/coding/mcp-token.js +26 -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 +46 -126
- package/dist/coding/profile.js +45 -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 +264 -346
- package/dist/coding/protocol.js +237 -12
- package/dist/coding/redact.d.ts +3 -0
- package/dist/coding/redact.js +17 -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 +52 -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 +8 -3
- package/dist/coding-worker/artifact.js +3 -1
- package/dist/coding-worker/debug-trace.d.ts +9 -6
- package/dist/coding-worker/debug-trace.js +16 -19
- 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 +124 -39
- package/dist/coding-worker/errors.d.ts +1 -0
- package/dist/coding-worker/errors.js +32 -0
- package/dist/coding-worker/main.js +5 -1
- package/dist/coding-worker/mcp-config.d.ts +27 -0
- package/dist/coding-worker/mcp-config.js +32 -0
- package/dist/coding-worker/sdk.d.ts +36 -0
- package/dist/coding-worker/sdk.js +28 -1
- 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 +15 -0
- package/dist/config/dependency-cache.d.ts +23 -0
- package/dist/config/dependency-cache.js +32 -0
- package/dist/config/mcp-call-limit.d.ts +8 -0
- package/dist/config/mcp-call-limit.js +18 -0
- package/dist/config/mcp-servers.d.ts +8 -0
- package/dist/config/mcp-servers.js +12 -0
- package/dist/config/providers.d.ts +12 -3
- package/dist/config/providers.js +55 -5
- package/dist/config/test-simulators.d.ts +92 -0
- package/dist/config/test-simulators.js +333 -0
- package/dist/config/tool-timeout.d.ts +1 -0
- package/dist/config/tool-timeout.js +18 -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-mcp.d.ts +36 -0
- package/dist/core/coding-mcp.js +253 -0
- package/dist/core/coding-queue.d.ts +2 -1
- package/dist/core/coding-queue.js +7 -0
- package/dist/core/coding-repository.d.ts +46 -0
- package/dist/core/coding-repository.js +92 -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/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/delegation-slots.d.ts +27 -0
- package/dist/core/delegation-slots.js +44 -0
- package/dist/core/dispatch.d.ts +48 -2
- package/dist/core/dispatch.js +166 -66
- package/dist/core/engine-native.js +1 -1
- package/dist/core/error-code.d.ts +38 -0
- package/dist/core/error-code.js +169 -0
- package/dist/core/grants.d.ts +46 -8
- package/dist/core/grants.js +99 -8
- package/dist/core/host-events.d.ts +18 -2
- package/dist/core/host-events.js +291 -27
- package/dist/core/host-status.d.ts +85 -3
- package/dist/core/host-status.js +300 -22
- package/dist/core/issue-bridge.d.ts +50 -6
- package/dist/core/issue-bridge.js +124 -33
- package/dist/core/issue-events.d.ts +1 -1
- package/dist/core/issue-events.js +4 -10
- package/dist/core/issue-status.d.ts +1 -1
- package/dist/core/issue-status.js +58 -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/mcp-client/client.d.ts +47 -0
- package/dist/core/mcp-client/client.js +141 -0
- package/dist/core/mcp-client/jsonrpc.d.ts +15 -0
- package/dist/core/mcp-client/jsonrpc.js +54 -0
- package/dist/core/mcp-client/results.d.ts +13 -0
- package/dist/core/mcp-client/results.js +42 -0
- package/dist/core/mcp-servers.d.ts +90 -0
- package/dist/core/mcp-servers.js +230 -0
- package/dist/core/mcp-tools.d.ts +108 -0
- package/dist/core/mcp-tools.js +287 -0
- package/dist/core/memory-tools.js +7 -0
- package/dist/core/merge-order-check.d.ts +2 -1
- package/dist/core/merge-order-check.js +44 -18
- package/dist/core/notification-dispatcher.js +2 -1
- package/dist/core/notification-templates.d.ts +1 -7
- package/dist/core/notification-templates.js +36 -2
- package/dist/core/pull-request-state-sync.js +2 -2
- package/dist/core/reconciler.d.ts +4 -3
- package/dist/core/reconciler.js +8 -1
- package/dist/core/related-pull-requests.d.ts +11 -3
- package/dist/core/related-pull-requests.js +49 -20
- package/dist/core/reply-parts.d.ts +21 -0
- package/dist/core/reply-parts.js +73 -0
- package/dist/core/review-fix.d.ts +1 -1
- package/dist/core/review-fix.js +4 -3
- package/dist/core/review-host-checks.d.ts +1 -1
- package/dist/core/review-host-tools.d.ts +3 -0
- package/dist/core/review-host-tools.js +102 -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 +145 -49
- package/dist/core/runner.js +719 -216
- 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 +12 -74
- package/dist/core/secret-broker-config.js +1 -1
- package/dist/core/secret-guard.d.ts +49 -0
- package/dist/core/secret-guard.js +119 -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 +11 -1
- package/dist/core/secrets.js +27 -1
- package/dist/core/serializable-retry.d.ts +18 -0
- package/dist/core/serializable-retry.js +43 -0
- package/dist/core/stop-run.d.ts +46 -0
- package/dist/core/stop-run.js +61 -0
- package/dist/core/tool-admin.d.ts +5 -1
- package/dist/core/tool-admin.js +7 -2
- package/dist/core/tool-names.d.ts +13 -0
- package/dist/core/tool-names.js +20 -0
- package/dist/core/webhooks.d.ts +4 -0
- package/dist/core/webhooks.js +68 -49
- package/dist/core/workflow-events.d.ts +14 -2
- package/dist/core/workflow-events.js +4 -0
- package/dist/core/workflow-run-events.d.ts +5 -3
- package/dist/core/workflow-run-events.js +45 -9
- 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 +65 -3
- package/dist/generated/prisma/client.d.ts +65 -3
- package/dist/generated/prisma/commonInputTypes.d.ts +266 -106
- package/dist/generated/prisma/enums.d.ts +10 -0
- package/dist/generated/prisma/enums.js +8 -0
- package/dist/generated/prisma/internal/class.d.ts +110 -0
- package/dist/generated/prisma/internal/class.js +4 -4
- package/dist/generated/prisma/internal/prismaNamespace.d.ts +957 -9
- package/dist/generated/prisma/internal/prismaNamespace.js +166 -2
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +174 -0
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +166 -2
- package/dist/generated/prisma/models/Agent.d.ts +377 -8
- package/dist/generated/prisma/models/AgentMcpServer.d.ts +1412 -0
- package/dist/generated/prisma/models/AgentMcpServer.js +1 -0
- package/dist/generated/prisma/models/AgentRepository.d.ts +81 -1
- package/dist/generated/prisma/models/AuthUser.d.ts +1 -1
- package/dist/generated/prisma/models/CodingAgentProfile.d.ts +228 -7
- package/dist/generated/prisma/models/CodingProxyRequest.d.ts +207 -3
- package/dist/generated/prisma/models/CodingProxySession.d.ts +232 -2
- package/dist/generated/prisma/models/CodingRun.d.ts +1712 -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/HostProvider.d.ts +2176 -0
- package/dist/generated/prisma/models/HostProvider.js +1 -0
- package/dist/generated/prisma/models/HostProviderCredential.d.ts +1285 -0
- package/dist/generated/prisma/models/HostProviderCredential.js +1 -0
- package/dist/generated/prisma/models/HostProviderOperation.d.ts +1470 -0
- package/dist/generated/prisma/models/HostProviderOperation.js +1 -0
- package/dist/generated/prisma/models/HostProviderTrustedAccount.d.ts +1145 -0
- package/dist/generated/prisma/models/HostProviderTrustedAccount.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/McpServer.d.ts +1500 -0
- package/dist/generated/prisma/models/McpServer.js +1 -0
- package/dist/generated/prisma/models/NativeGatewayCall.d.ts +77 -1
- package/dist/generated/prisma/models/NativeGatewaySession.d.ts +35 -1
- package/dist/generated/prisma/models/Principal.d.ts +167 -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/ResourceGrant.d.ts +1 -1
- package/dist/generated/prisma/models/Run.d.ts +738 -2
- package/dist/generated/prisma/models/RunBudgetEvent.d.ts +1211 -0
- package/dist/generated/prisma/models/RunBudgetEvent.js +1 -0
- 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 +387 -0
- package/dist/generated/prisma/models/Tool.d.ts +223 -1
- package/dist/generated/prisma/models.d.ts +10 -0
- package/dist/help/search.js +12 -3
- package/dist/help-index.json +2033 -110
- package/dist/import/create.js +48 -4
- package/dist/import/neutral-schema.d.ts +51 -281
- 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 +10 -2
- package/dist/mcp/auth/access.js +15 -1
- package/dist/mcp/auth/grants-cli.d.ts +6 -4
- package/dist/mcp/auth/grants-cli.js +42 -3
- package/dist/mcp/auth/ownership.d.ts +7 -7
- package/dist/mcp/auth/resource-server.d.ts +3 -1
- package/dist/mcp/auth/resource-server.js +17 -2
- 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 +3 -0
- package/dist/mcp/host-events/github-ingress.d.ts +2 -0
- package/dist/mcp/host-events/github-ingress.js +2 -1
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.js +69 -10
- 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 +295 -28
- package/dist/mcp/tools/datastore.js +17 -8
- package/dist/mcp/tools/grants.js +73 -29
- package/dist/mcp/tools/host-providers.d.ts +2 -0
- package/dist/mcp/tools/host-providers.js +215 -0
- package/dist/mcp/tools/mcp-servers.d.ts +26 -0
- package/dist/mcp/tools/mcp-servers.js +481 -0
- package/dist/mcp/tools/memory.js +11 -1
- package/dist/mcp/tools/notification-channels.js +2 -2
- package/dist/mcp/tools/packages.d.ts +2 -0
- package/dist/mcp/tools/packages.js +195 -0
- package/dist/mcp/tools/repositories.js +65 -12
- 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.js +209 -27
- package/dist/mcp/tools/scheduling.js +3 -1
- package/dist/mcp/tools/secret-elicitation-form.js +5 -0
- package/dist/mcp/tools/secret-elicitation-server.d.ts +6 -0
- package/dist/mcp/tools/secret-elicitation-server.js +10 -61
- package/dist/mcp/tools/secret-elicitation.d.ts +2 -0
- package/dist/mcp/tools/secret-elicitation.js +25 -2
- package/dist/mcp/tools/secrets.js +40 -6
- 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 +7 -5
- package/dist/mcp/tools/tools.js +64 -16
- package/dist/mcp/tools/trigger.js +28 -6
- package/dist/mcp/transport/http-limits.d.ts +2 -0
- package/dist/mcp/transport/http-limits.js +6 -2
- 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/mcp/webhooks/ingress.js +10 -0
- package/dist/native-worker/docker-launcher.d.ts +38 -2
- package/dist/native-worker/docker-launcher.js +65 -5
- package/dist/native-worker/gateway-server.d.ts +55 -3
- package/dist/native-worker/gateway-server.js +152 -34
- package/dist/native-worker/gateway.d.ts +29 -1
- package/dist/native-worker/gateway.js +74 -4
- package/dist/native-worker/http-server.d.ts +7 -1
- package/dist/native-worker/http-server.js +62 -7
- package/dist/native-worker/http-transport.js +1 -1
- package/dist/native-worker/kubernetes-launcher.d.ts +7 -3
- package/dist/native-worker/kubernetes-launcher.js +43 -3
- package/dist/native-worker/launch.d.ts +18 -1
- package/dist/native-worker/launch.js +6 -1
- package/dist/native-worker/ledger.d.ts +24 -4
- package/dist/native-worker/ledger.js +62 -8
- package/dist/native-worker/loopback.js +3 -8
- package/dist/native-worker/main.d.ts +2 -1
- package/dist/native-worker/main.js +14 -3
- package/dist/native-worker/protocol.d.ts +130 -577
- package/dist/native-worker/protocol.js +51 -2
- package/dist/native-worker/sandbox-executor.d.ts +17 -2
- package/dist/native-worker/sandbox-executor.js +78 -4
- 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 +1 -1
- package/dist/native-worker/stdio.js +6 -5
- package/dist/native-worker/warm-pool.d.ts +2 -2
- package/dist/native-worker/warm-pool.js +4 -4
- package/dist/native-worker/worker.js +28 -2
- package/dist/observability/metrics.js +6 -1
- package/dist/providers/auth/self-hosted.d.ts +1 -1
- package/dist/providers/coding-proxy/capability-hash.d.ts +2 -0
- package/dist/providers/coding-proxy/capability-hash.js +5 -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/mcp-route.d.ts +34 -0
- package/dist/providers/coding-proxy/mcp-route.js +166 -0
- package/dist/providers/coding-proxy/memory-ledger.d.ts +17 -2
- package/dist/providers/coding-proxy/memory-ledger.js +99 -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 +16 -2
- package/dist/providers/coding-proxy/prisma-ledger.js +209 -69
- package/dist/providers/coding-proxy/proxy.d.ts +21 -2
- package/dist/providers/coding-proxy/proxy.js +300 -48
- 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 +10 -0
- package/dist/providers/coding-proxy/runtime.js +109 -16
- package/dist/providers/coding-proxy/server.d.ts +9 -1
- package/dist/providers/coding-proxy/server.js +55 -1
- package/dist/providers/coding-proxy/types.d.ts +78 -1
- package/dist/providers/datastore/types.d.ts +5 -0
- package/dist/providers/engine/types.d.ts +17 -2
- package/dist/providers/engine/types.js +17 -0
- package/dist/providers/executor/composition.d.ts +10 -3
- package/dist/providers/executor/composition.js +52 -7
- package/dist/providers/executor/container.d.ts +394 -9
- package/dist/providers/executor/container.js +1210 -96
- 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 +50 -1
- package/dist/providers/executor/dbos.js +207 -20
- package/dist/providers/executor/deferred.d.ts +12 -24
- package/dist/providers/executor/deferred.js +10 -29
- 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 +2 -0
- package/dist/providers/executor/routing.js +4 -0
- package/dist/providers/executor/types.d.ts +13 -0
- package/dist/providers/host-tools/invoke.d.ts +37 -0
- package/dist/providers/host-tools/invoke.js +117 -0
- package/dist/providers/host-tools/operations.d.ts +65 -0
- package/dist/providers/host-tools/operations.js +149 -0
- package/dist/providers/host-tools/registry.d.ts +79 -0
- package/dist/providers/host-tools/registry.js +362 -0
- package/dist/providers/host-tools/request-guard.d.ts +17 -0
- package/dist/providers/host-tools/request-guard.js +99 -0
- package/dist/providers/host-tools/self-test.d.ts +64 -0
- package/dist/providers/host-tools/self-test.js +142 -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 +10 -2
- package/dist/providers/jobs/docker-isolation.js +47 -8
- package/dist/providers/jobs/docker.d.ts +9 -0
- package/dist/providers/jobs/docker.js +60 -11
- package/dist/providers/jobs/fake-kubernetes-api.d.ts +2 -0
- package/dist/providers/jobs/fake-kubernetes-api.js +3 -0
- package/dist/providers/jobs/kubernetes-api.d.ts +8 -0
- package/dist/providers/jobs/kubernetes-api.js +10 -0
- package/dist/providers/jobs/kubernetes-client.js +10 -1
- package/dist/providers/jobs/kubernetes-isolation.d.ts +5 -1
- package/dist/providers/jobs/kubernetes-isolation.js +32 -3
- package/dist/providers/jobs/kubernetes.d.ts +11 -1
- package/dist/providers/jobs/kubernetes.js +111 -17
- package/dist/providers/jobs/types.d.ts +39 -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 +29 -2
- package/dist/providers/review-host/github.js +224 -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 +140 -6
- package/dist/providers/review-host/types.js +9 -1
- 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 +39 -4
- package/dist/providers/vcs/git.js +339 -26
- 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 +183 -44
- package/dist/providers/vcs/github.js +455 -56
- package/dist/providers/vcs/index.d.ts +1 -1
- package/dist/providers/vcs/index.js +9 -2
- 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 +37 -1
- package/dist/providers/vcs/remote.js +7 -1
- package/dist/providers/vcs/routing.d.ts +16 -8
- package/dist/providers/vcs/routing.js +27 -6
- package/dist/providers/vcs/types.d.ts +150 -5
- package/dist/quickstart/coding-seed.d.ts +14 -3
- package/dist/quickstart/coding-seed.js +213 -4
- package/dist/quickstart/index.d.ts +5 -0
- package/dist/quickstart/index.js +21 -0
- 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/eval-core.d.ts +12 -2
- package/dist/sandbox/eval-core.js +20 -4
- 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 +5 -0
- package/dist/sandbox/host-functions.js +13 -13
- package/dist/sandbox/limits.d.ts +4 -1
- package/dist/sandbox/limits.js +4 -1
- package/dist/sandbox/run-in-sandbox.d.ts +6 -0
- package/dist/sandbox/run-in-sandbox.js +14 -2
- package/dist/sandbox/safe-fetch.d.ts +2 -0
- package/dist/sandbox/safe-fetch.js +1 -1
- package/dist/sandbox/secret-broker.d.ts +1 -0
- package/dist/sandbox/secret-broker.js +4 -5
- package/dist/sandbox/tool-capabilities.d.ts +10 -30
- package/dist/sandbox/tool-timeout.d.ts +32 -0
- package/dist/sandbox/tool-timeout.js +52 -0
- package/dist/sandbox/user-tool.d.ts +8 -1
- package/dist/sandbox/user-tool.js +9 -3
- package/dist/sandbox/zod-params.d.ts +37 -5
- package/dist/sandbox/zod-params.js +181 -26
- package/dist/serve.js +8 -1
- package/dist/viewer/api-schema.d.ts +349 -2627
- package/dist/viewer/api-schema.js +7 -0
- package/dist/viewer/build-schemas.js +6 -2
- package/dist/viewer/graph.js +2 -1
- package/dist/viewer/openapi.js +2 -4
- package/dist/wardby-bin.js +15 -0
- package/docs/README.md +11 -1
- package/docs/agent-recipes.md +95 -24
- package/docs/architecture-runtime.md +1 -1
- package/docs/claude-code-plugin.md +164 -0
- package/docs/code-review-agents.md +557 -41
- package/docs/coding-agent-setup.md +566 -8
- package/docs/coding-packages.md +1033 -90
- package/docs/coding-services.md +27 -12
- package/docs/coding-worker-byo-images.md +24 -2
- package/docs/coding-worker-isolation.md +183 -37
- package/docs/debugging-agent-runs.md +242 -0
- package/docs/getting-started-gke.md +129 -141
- package/docs/getting-started-identity-provider.md +53 -38
- package/docs/getting-started.md +17 -0
- package/docs/host-providers.md +294 -0
- package/docs/jira-agents.md +17 -8
- 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/mcp-servers.md +254 -0
- package/docs/native-sandbox.md +143 -31
- package/docs/observability.md +4 -0
- package/docs/security-deployment.md +139 -29
- package/docs/slack-notifications.md +35 -19
- package/docs/tool-secrets.md +45 -10
- package/docs/viewer-api.md +6 -0
- package/docs/viewer-api.openapi.yml +1 -1
- package/help/admin-viewer.md +28 -2
- package/help/agent-recipes.md +33 -2
- package/help/architecture-agent.md +11 -6
- package/help/brokered-secrets.md +3 -0
- package/help/build-claude-code-image.md +1 -1
- package/help/build-worker-image.md +3 -1
- package/help/builder-agent.md +19 -6
- package/help/claude-code-run-pane.md +40 -0
- package/help/code-review-agents.md +177 -6
- 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 +15 -8
- package/help/errors/budget-exhausted.md +187 -0
- package/help/errors/budget-group-exhausted.md +5 -1
- package/help/errors/coding-mcp-pins-unavailable.md +35 -0
- 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 +1 -1
- 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 +4 -0
- package/help/errors/graph-incomplete.md +43 -0
- package/help/errors/graph-limit.md +43 -0
- package/help/errors/host-provider-error.md +40 -0
- package/help/errors/host-tool-failed.md +36 -0
- package/help/errors/mcp-call-limit.md +22 -0
- package/help/errors/mcp-call-timeout.md +22 -0
- package/help/errors/mcp-server-auth-failed.md +22 -0
- package/help/errors/mcp-server-credentials-unavailable.md +45 -0
- package/help/errors/mcp-server-error.md +28 -0
- package/help/errors/mcp-server-unreachable.md +22 -0
- package/help/errors/mcp-servers-off.md +21 -0
- package/help/errors/mcp-tool-not-allowed.md +26 -0
- package/help/errors/mcp-tool-removed.md +22 -0
- package/help/errors/mcp-unavailable.md +25 -0
- package/help/errors/merge-conflict.md +49 -0
- package/help/errors/native-sandbox-capacity.md +1 -1
- package/help/errors/native-sandbox-deadline-exceeded.md +1 -1
- package/help/errors/native-sandbox-docker-failed.md +1 -1
- package/help/errors/native-sandbox-gateway-error.md +20 -0
- package/help/errors/native-sandbox-gateway-unavailable.md +1 -1
- package/help/errors/native-sandbox-image-not-pinned.md +1 -1
- package/help/errors/native-sandbox-isolation-mismatch.md +1 -1
- package/help/errors/native-sandbox-launch-abandoned.md +21 -0
- package/help/errors/native-sandbox-network-unenforced.md +1 -1
- package/help/errors/native-sandbox-requires-catalog.md +1 -1
- package/help/errors/native-sandbox-unavailable.md +1 -1
- package/help/errors/native-sandbox-warm-delivery-failed.md +1 -1
- package/help/errors/native-sandbox-worker-exited.md +4 -3
- package/help/errors/native-sandbox-worker-lost.md +1 -1
- package/help/errors/native-sandbox-worker-unready.md +1 -1
- 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/repository-not-listed.md +36 -0
- package/help/errors/repository-required.md +36 -0
- package/help/errors/run-lost.md +39 -0
- package/help/errors/run-transcript-download.md +44 -0
- package/help/errors/secret-in-value.md +69 -0
- package/help/errors/target-merge.md +40 -0
- package/help/errors/tool-timeout.md +38 -0
- package/help/fix-merge-conflicts.md +73 -0
- package/help/github-app-setup.md +132 -0
- package/help/github.md +22 -0
- package/help/host-providers.md +40 -0
- package/help/identity-and-access.md +6 -1
- package/help/jira.md +23 -6
- package/help/knowledge.md +16 -7
- package/help/local-repositories.md +1 -1
- package/help/low-power-mode.md +7 -1
- package/help/mcp-servers.md +73 -0
- package/help/mcp.md +7 -2
- package/help/merge-order-check.md +5 -0
- package/help/native-capabilities.md +55 -1
- package/help/native-sandbox.md +16 -2
- package/help/operating-agents.md +21 -0
- package/help/package-audit-mode.md +91 -0
- package/help/related-pull-requests.md +17 -10
- package/help/repo-instructions-and-skills.md +3 -1
- package/help/resume-runs-locally.md +134 -0
- package/help/review-fix-rounds.md +33 -1
- package/help/sharing-agents.md +59 -0
- package/help/slack-notifications.md +19 -5
- 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 +86 -7
- package/help/troubleshooting/debugging-agent-runs.md +29 -0
- package/package.json +18 -10
- 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/migrations/20261102000000_host_providers/migration.sql +56 -0
- package/prisma/migrations/20261104000000_coding_agent_repository_list/migration.sql +5 -0
- package/prisma/migrations/20261106000000_tool_timeout/migration.sql +4 -0
- package/prisma/migrations/20261107000000_mcp_servers/migration.sql +33 -0
- package/prisma/migrations/20261108000000_coding_mcp/migration.sql +5 -0
- package/prisma/migrations/20261109000000_task_run_index/migration.sql +3 -0
- package/prisma/schema.prisma +468 -109
- package/scripts/git-askpass.sh +1 -1
- package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
package/dist/core/dispatch.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { normalizeHostedRepository } from "../coding/code-host.js";
|
|
2
|
+
import { CODING_PROTOCOL_VERSION, CodingTaskInputSchema, normalizeGitRef, publicCodingRunResult, composeCodingTask, } from "../coding/protocol.js";
|
|
2
3
|
import { assertCodingProvider, assertCodingProviderModel } from "../coding/provider.js";
|
|
4
|
+
import { isPackageAuditActive } from "../coding/registry/audit-mode.js";
|
|
3
5
|
import { ModelUnavailableError, entryOf } from "../providers/llm/catalog-types.js";
|
|
4
6
|
import { parseAllowedServiceNames, workerServices } from "../coding/services/catalog.js";
|
|
5
7
|
import { MAX_SERVICE_DECLARATION_BYTES, ServiceDeclarationError, parseServiceDeclaration, } from "../coding/services/declaration.js";
|
|
@@ -7,11 +9,12 @@ import { servicesInstructionNote } from "../coding/services/note.js";
|
|
|
7
9
|
import { resolveRunServices } from "../coding/services/resolve.js";
|
|
8
10
|
import { DECLARATION_UNAVAILABLE_SENTENCE, LAUNCHER_UNSUPPORTED_SENTENCE, invalidDeclarationSentence, serviceRefusal, } from "../coding/services/wording.js";
|
|
9
11
|
import { attributeRun } from "./attribution.js";
|
|
10
|
-
import { effectiveBudgetForRun, MIN_RESERVATION_USD } from "./budget-groups.js";
|
|
11
|
-
import {
|
|
12
|
+
import { effectiveBudgetForRun, MIN_RESERVATION_USD, } from "./budget-groups.js";
|
|
13
|
+
import { KNOWLEDGE_CONFIG_MAX_BYTES, KNOWLEDGE_CONFIG_PATH, resolveKnowledgeLocation } from "../knowledge/location.js";
|
|
12
14
|
import { KNOWLEDGE_INDEX_READ_MAX_BYTES, knowledgeSection } from "../knowledge/note.js";
|
|
13
15
|
import { logger } from "./logger.js";
|
|
14
16
|
import { CodingModelProviderMismatchError, resolveCodingEntry } from "./run-pricing.js";
|
|
17
|
+
import { resolveCodingRepository, } from "./coding-repository.js";
|
|
15
18
|
import { CONTENDED_TX_MAX_WAIT_MS } from "./timing.js";
|
|
16
19
|
import { fileSelfDefectForRun } from "./self-defects.js";
|
|
17
20
|
const dispatchLog = logger.child({ module: "dispatch" });
|
|
@@ -107,21 +110,45 @@ export function budgetExhaustedError(constraint) {
|
|
|
107
110
|
* agents to groups is not blocked. It serializes grouped coding dispatches
|
|
108
111
|
* across all groups; each holds it only for one short transaction.
|
|
109
112
|
*/
|
|
110
|
-
const GROUP_DISPATCH_LOCK_SQL = 'LOCK TABLE "BudgetGroup" IN SHARE ROW EXCLUSIVE MODE';
|
|
113
|
+
export const GROUP_DISPATCH_LOCK_SQL = 'LOCK TABLE "BudgetGroup" IN SHARE ROW EXCLUSIVE MODE';
|
|
114
|
+
/** Rounded down to CodingRun's 6 decimal places. */
|
|
115
|
+
function floorToMicroUsd(usd) {
|
|
116
|
+
return Math.floor(usd / MIN_RESERVATION_USD) * MIN_RESERVATION_USD;
|
|
117
|
+
}
|
|
111
118
|
/**
|
|
112
|
-
* A coding run's budget reservation: the requested
|
|
119
|
+
* A coding run's budget reservation: the requested base (override or the
|
|
113
120
|
* agent's budgetUsd) tightened by its budget group and run tree, where every
|
|
114
|
-
* live in-flight run's unspent hold already counts as spent.
|
|
115
|
-
* CodingRun.budgetReservedUsd
|
|
121
|
+
* live in-flight run's unspent hold already counts as spent. Only the base is
|
|
122
|
+
* reserved (CodingRun.budgetReservedUsd, and budgetBaseUsd beside it). The
|
|
123
|
+
* agent's allowedOverrunPercent raises the requested base to the run's limit
|
|
124
|
+
* (CodingRun.budgetLimitUsd), which is never reserved: the run may spend past
|
|
125
|
+
* its base only through top-ups its group and run tree have room for when it
|
|
126
|
+
* needs them (budget-topup.ts). Rounded down to 6 decimal places; a base less
|
|
127
|
+
* than that is refused.
|
|
116
128
|
*/
|
|
117
129
|
async function reserveCodingBudget(tx, agent, now, options) {
|
|
130
|
+
const overrunPercent = agent.allowedOverrunPercent;
|
|
118
131
|
const effective = await effectiveBudgetForRun(tx, agent, now, options.parentRunId);
|
|
119
132
|
const requested = options.budgetUsdOverride ?? Number(agent.budgetUsd);
|
|
120
|
-
const
|
|
121
|
-
if (
|
|
122
|
-
return {
|
|
133
|
+
const baseBudgetUsd = floorToMicroUsd(Math.min(requested, effective.effectiveBudgetUsd));
|
|
134
|
+
if (baseBudgetUsd < MIN_RESERVATION_USD && effective.exhaustedBy) {
|
|
135
|
+
return {
|
|
136
|
+
budgetUsd: 0,
|
|
137
|
+
baseBudgetUsd: 0,
|
|
138
|
+
limitUsd: null,
|
|
139
|
+
refusal: budgetExhaustedError(effective.exhaustedBy),
|
|
140
|
+
...(effective.exhaustedDetail
|
|
141
|
+
? { refusalDetail: { limit: effective.exhaustedBy, detail: effective.exhaustedDetail } }
|
|
142
|
+
: {}),
|
|
143
|
+
};
|
|
123
144
|
}
|
|
124
|
-
|
|
145
|
+
const limitUsd = overrunPercent > 0 ? floorToMicroUsd((requested * (100 + overrunPercent)) / 100) : null;
|
|
146
|
+
return {
|
|
147
|
+
budgetUsd: baseBudgetUsd,
|
|
148
|
+
baseBudgetUsd,
|
|
149
|
+
limitUsd: limitUsd !== null && limitUsd > baseBudgetUsd ? limitUsd : null,
|
|
150
|
+
...(effective.limitedBy ? { limitedBy: effective.limitedBy } : {}),
|
|
151
|
+
};
|
|
125
152
|
}
|
|
126
153
|
/**
|
|
127
154
|
* Attempts for the persist transaction, and the jittered backoff between
|
|
@@ -180,7 +207,7 @@ export async function checkContinuation(reader, runId, repository, dispatchingOw
|
|
|
180
207
|
: candidate;
|
|
181
208
|
if (!root)
|
|
182
209
|
return { ok: false, reason: "unknown_run" };
|
|
183
|
-
if (
|
|
210
|
+
if (normalizeHostedRepository(root.repository) !== normalizeHostedRepository(repository)) {
|
|
184
211
|
return { ok: false, reason: "other_repository" };
|
|
185
212
|
}
|
|
186
213
|
const rootResult = publicCodingRunResult(root.result);
|
|
@@ -206,6 +233,15 @@ export async function checkContinuation(reader, runId, repository, dispatchingOw
|
|
|
206
233
|
},
|
|
207
234
|
};
|
|
208
235
|
}
|
|
236
|
+
function codingTarget(reader, options, profile) {
|
|
237
|
+
return resolveCodingRepository(reader, {
|
|
238
|
+
agentId: options.agentId,
|
|
239
|
+
profile,
|
|
240
|
+
requested: options.codingRepository,
|
|
241
|
+
continuesCodingRunId: options.continuesCodingRunId,
|
|
242
|
+
requireExplicit: options.requireExplicitRepository,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
209
245
|
/**
|
|
210
246
|
* Resolves a coding run's branch: an override, else a continuation root's
|
|
211
247
|
* (see checkContinuation), else the profile's base.
|
|
@@ -269,30 +305,49 @@ const UNREADABLE_DECLARATION = {
|
|
|
269
305
|
};
|
|
270
306
|
/**
|
|
271
307
|
* The knowledge note's input (docs/knowledge.md): the repository's bundle
|
|
272
|
-
* index at the run's base
|
|
308
|
+
* index at the run's base (in the folder .wardby/knowledge.yaml names, else
|
|
309
|
+
* docs/knowledge/), read before the transaction like the services
|
|
273
310
|
* declaration. Any failure means no note, never a failed dispatch.
|
|
274
311
|
*/
|
|
275
312
|
async function readKnowledgeIndex(options, profile, resolvedBranch, ownerId) {
|
|
276
|
-
|
|
277
|
-
if (!executor.readCodingRepositoryFile)
|
|
313
|
+
if (!options.executor.readCodingRepositoryFile)
|
|
278
314
|
return undefined;
|
|
315
|
+
let baseRef;
|
|
279
316
|
try {
|
|
280
317
|
// Resolved here, inside the try: a branch problem is the transaction's to report, not the note's.
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
318
|
+
baseRef = (resolvedBranch ?? (await resolveCodingBranch(options.db, options, profile, ownerId))).baseRef;
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
dispatchLog.warn({ err, repository: profile.repository }, "knowledge index read failed; dispatching without it");
|
|
322
|
+
return undefined;
|
|
323
|
+
}
|
|
324
|
+
return readKnowledgeIndexAt(options.executor, profile.repository, baseRef);
|
|
325
|
+
}
|
|
326
|
+
/** The bundle index at a known base ref; also how a deferred coding run reads it when it starts. */
|
|
327
|
+
export async function readKnowledgeIndexAt(executor, repository, baseRef) {
|
|
328
|
+
const readFile = executor.readCodingRepositoryFile?.bind(executor);
|
|
329
|
+
if (!readFile)
|
|
330
|
+
return undefined;
|
|
331
|
+
const ref = normalizeGitRef(baseRef);
|
|
332
|
+
// The repository may name its bundle folder in .wardby/knowledge.yaml; anything wrong with that file falls back to the default.
|
|
333
|
+
const { bundlePath, warning } = await resolveKnowledgeLocation(() => readFile({ repository, baseRef: ref, path: KNOWLEDGE_CONFIG_PATH, maxBytes: KNOWLEDGE_CONFIG_MAX_BYTES }));
|
|
334
|
+
if (warning)
|
|
335
|
+
dispatchLog.warn({ repository, baseRef: ref }, warning);
|
|
336
|
+
try {
|
|
337
|
+
const indexText = await readFile({
|
|
338
|
+
repository,
|
|
339
|
+
baseRef: ref,
|
|
340
|
+
path: `${bundlePath}/index.md`,
|
|
286
341
|
maxBytes: KNOWLEDGE_INDEX_READ_MAX_BYTES,
|
|
287
342
|
});
|
|
288
|
-
return indexText ? { bundlePath
|
|
343
|
+
return indexText ? { bundlePath, indexText } : undefined;
|
|
289
344
|
}
|
|
290
345
|
catch (err) {
|
|
291
346
|
if (err instanceof Error && err.message in UNREADABLE_DECLARATION) {
|
|
292
|
-
dispatchLog.info({ repository
|
|
347
|
+
dispatchLog.info({ repository, reason: err.message }, "knowledge index unreadable; dispatching without it");
|
|
293
348
|
return undefined;
|
|
294
349
|
}
|
|
295
|
-
dispatchLog.warn({ err, repository
|
|
350
|
+
dispatchLog.warn({ err, repository }, "knowledge index read failed; dispatching without it");
|
|
296
351
|
return undefined;
|
|
297
352
|
}
|
|
298
353
|
}
|
|
@@ -304,56 +359,54 @@ async function readKnowledgeIndex(options, profile, resolvedBranch, ownerId) {
|
|
|
304
359
|
*/
|
|
305
360
|
async function readServiceDeclaration(options, profile, ownerId) {
|
|
306
361
|
const branch = await resolveCodingBranch(options.db, options, profile, ownerId);
|
|
307
|
-
|
|
308
|
-
|
|
362
|
+
return {
|
|
363
|
+
repository: profile.repository,
|
|
364
|
+
profileBaseRef: profile.baseRef,
|
|
365
|
+
branch,
|
|
366
|
+
outcome: await readServiceDeclarationAt(options.executor, profile.repository, branch.baseRef),
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
/** The declaration at a known base ref, parsed; also how a deferred coding run reads it when it starts. */
|
|
370
|
+
export async function readServiceDeclarationAt(executor, repository, baseRef) {
|
|
309
371
|
if (!executor.readCodingServiceDeclaration)
|
|
310
|
-
return {
|
|
372
|
+
return { kind: "none" };
|
|
311
373
|
let text;
|
|
312
374
|
try {
|
|
313
|
-
text = await executor.readCodingServiceDeclaration({
|
|
314
|
-
repository: profile.repository,
|
|
315
|
-
baseRef: normalizeGitRef(branch.baseRef),
|
|
316
|
-
});
|
|
375
|
+
text = await executor.readCodingServiceDeclaration({ repository, baseRef: normalizeGitRef(baseRef) });
|
|
317
376
|
}
|
|
318
377
|
catch (err) {
|
|
319
378
|
const reason = UNREADABLE_DECLARATION[err instanceof Error ? err.message : ""];
|
|
320
379
|
if (reason) {
|
|
321
380
|
return {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
kind: "refused",
|
|
325
|
-
refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(reason)),
|
|
326
|
-
},
|
|
381
|
+
kind: "refused",
|
|
382
|
+
refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(reason)),
|
|
327
383
|
};
|
|
328
384
|
}
|
|
329
|
-
dispatchLog.warn({ err,
|
|
385
|
+
dispatchLog.warn({ err, repository }, "could not read the repository's service declaration");
|
|
330
386
|
return {
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
kind: "refused",
|
|
334
|
-
refusal: serviceRefusal("service_declaration_unavailable", DECLARATION_UNAVAILABLE_SENTENCE),
|
|
335
|
-
},
|
|
387
|
+
kind: "refused",
|
|
388
|
+
refusal: serviceRefusal("service_declaration_unavailable", DECLARATION_UNAVAILABLE_SENTENCE),
|
|
336
389
|
};
|
|
337
390
|
}
|
|
338
391
|
if (text === null)
|
|
339
|
-
return {
|
|
392
|
+
return { kind: "none" };
|
|
340
393
|
try {
|
|
341
|
-
return {
|
|
394
|
+
return { kind: "declared", services: parseServiceDeclaration(text) };
|
|
342
395
|
}
|
|
343
396
|
catch (err) {
|
|
344
397
|
if (!(err instanceof ServiceDeclarationError))
|
|
345
398
|
throw err;
|
|
346
399
|
return {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
kind: "refused",
|
|
350
|
-
refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(err.reason)),
|
|
351
|
-
},
|
|
400
|
+
kind: "refused",
|
|
401
|
+
refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(err.reason)),
|
|
352
402
|
};
|
|
353
403
|
}
|
|
354
404
|
}
|
|
355
|
-
/**
|
|
356
|
-
|
|
405
|
+
/**
|
|
406
|
+
* Inside the transaction: the run's services, or the refusal that stops it. Takes only the
|
|
407
|
+
* catalog, so a deferred coding run's start resolves them the same way with a plain client.
|
|
408
|
+
*/
|
|
409
|
+
export async function resolveDispatchServices(tx, outcome, allowed, executor, provider, request, instructions) {
|
|
357
410
|
if (outcome.kind === "refused")
|
|
358
411
|
return { refusal: outcome.refusal };
|
|
359
412
|
if (outcome.kind === "none" || outcome.services.length === 0)
|
|
@@ -385,16 +438,30 @@ export async function dispatchRun(options) {
|
|
|
385
438
|
},
|
|
386
439
|
});
|
|
387
440
|
const lockGroups = preview?.kind === "coding" && preview.budgetGroupId != null;
|
|
441
|
+
// The native gateway's executor has no coding configuration: the run is recorded
|
|
442
|
+
// unresolved and the process that starts it reads and resolves (resolveDeferredCodingRun).
|
|
443
|
+
const deferCoding = options.executor.defersCodingResolution === true;
|
|
444
|
+
// The repository this run works in, resolved from the agent's list before any network read. A
|
|
445
|
+
// refusal propagates: nothing has been written, and it is not a retryable conflict.
|
|
446
|
+
const previewTarget = !deferCoding && preview?.kind === "coding" && preview.codingProfile
|
|
447
|
+
? await codingTarget(options.db, options, preview.codingProfile)
|
|
448
|
+
: undefined;
|
|
388
449
|
// Only an agent allowed some service reads the repository's declaration; any
|
|
389
450
|
// other coding agent never calls the host for it and gets no services.
|
|
390
|
-
const declarationRead =
|
|
451
|
+
const declarationRead = !deferCoding &&
|
|
452
|
+
preview?.kind === "coding" &&
|
|
391
453
|
preview.codingProfile &&
|
|
454
|
+
previewTarget &&
|
|
392
455
|
parseAllowedServiceNames(preview.codingProfile.services).length > 0
|
|
393
|
-
? await readServiceDeclaration(options,
|
|
456
|
+
? await readServiceDeclaration(options, previewTarget, preview.ownerId ?? null)
|
|
394
457
|
: undefined;
|
|
395
458
|
// The knowledge note's input: the repository's bundle index at the run's base (a network call).
|
|
396
|
-
const knowledgeIndex =
|
|
397
|
-
|
|
459
|
+
const knowledgeIndex = !deferCoding &&
|
|
460
|
+
preview?.kind === "coding" &&
|
|
461
|
+
preview.codingProfile &&
|
|
462
|
+
previewTarget &&
|
|
463
|
+
options.executor.readCodingRepositoryFile
|
|
464
|
+
? await readKnowledgeIndex(options, previewTarget, declarationRead?.branch, preview.ownerId ?? null)
|
|
398
465
|
: undefined;
|
|
399
466
|
const persistOnce = () => options.db.$transaction(async (tx) => {
|
|
400
467
|
if (lockGroups)
|
|
@@ -426,11 +493,14 @@ export async function dispatchRun(options) {
|
|
|
426
493
|
let modelFailure;
|
|
427
494
|
let services = [];
|
|
428
495
|
let servicesRefusal;
|
|
496
|
+
let target;
|
|
429
497
|
if (agent.kind === "coding") {
|
|
430
498
|
if (!agent.codingProfile)
|
|
431
499
|
throw new Error(`Coding agent "${agent.id}" has no coding profile.`);
|
|
432
500
|
// An unknown coding provider is a broken profile, not a catalog state: still thrown.
|
|
433
501
|
assertCodingProvider(agent.codingProfile.provider);
|
|
502
|
+
// Resolved again inside the transaction: an unlink since the preview refuses the run here.
|
|
503
|
+
target = await codingTarget(tx, options, agent.codingProfile);
|
|
434
504
|
// Recorded on the run row below: the run is billed at this entry for its whole life.
|
|
435
505
|
// A model the catalog cannot run (missing, disabled, or another provider's) fails
|
|
436
506
|
// the run here instead of throwing: the run row commits with the reason, so the
|
|
@@ -446,8 +516,7 @@ export async function dispatchRun(options) {
|
|
|
446
516
|
modelFailure = err.message;
|
|
447
517
|
}
|
|
448
518
|
if (!modelFailure && declarationRead) {
|
|
449
|
-
if (declarationRead.repository !==
|
|
450
|
-
declarationRead.profileBaseRef !== agent.codingProfile.baseRef) {
|
|
519
|
+
if (declarationRead.repository !== target.repository || declarationRead.profileBaseRef !== target.baseRef) {
|
|
451
520
|
// The declaration was read for a profile that changed before this transaction.
|
|
452
521
|
throw new Error("The coding agent's repository or base branch changed during dispatch; try again.");
|
|
453
522
|
}
|
|
@@ -471,6 +540,7 @@ export async function dispatchRun(options) {
|
|
|
471
540
|
// Fixed for the run's life: the executor routes on this, never on the agent's current setting.
|
|
472
541
|
nativeExecutionMode: agent.kind === "native" ? agent.nativeExecutionMode : null,
|
|
473
542
|
parentRunId: options.parentRunId,
|
|
543
|
+
parentCallId: options.parentCallId,
|
|
474
544
|
grantedParentMemoryKeys: options.grantedParentMemoryKeys ?? [],
|
|
475
545
|
taskOverride: options.taskOverride,
|
|
476
546
|
triggeredById: options.triggeredById ?? null,
|
|
@@ -490,6 +560,13 @@ export async function dispatchRun(options) {
|
|
|
490
560
|
: {}),
|
|
491
561
|
},
|
|
492
562
|
});
|
|
563
|
+
if (refusal && codingBudget?.refusalDetail && refusal === codingBudget.refusal) {
|
|
564
|
+
const { limit, detail } = codingBudget.refusalDetail;
|
|
565
|
+
// Group and lead names are filled at read time.
|
|
566
|
+
await tx.runBudgetEvent.create({
|
|
567
|
+
data: { runId: run.id, kind: "refused", limit, details: { source: "dispatch", ...detail } },
|
|
568
|
+
});
|
|
569
|
+
}
|
|
493
570
|
if (options.afterPersist)
|
|
494
571
|
await options.afterPersist(tx, run);
|
|
495
572
|
const attributed = await attributeRun(tx, run.id, {
|
|
@@ -497,25 +574,30 @@ export async function dispatchRun(options) {
|
|
|
497
574
|
continuesCodingRunId: options.continuesCodingRunId,
|
|
498
575
|
intent: options.attribution,
|
|
499
576
|
}, now);
|
|
500
|
-
if (agent.kind === "coding" && agent.codingProfile && codingBudget && !refusal) {
|
|
577
|
+
if (agent.kind === "coding" && agent.codingProfile && target && codingBudget && !refusal) {
|
|
501
578
|
// Checked above too; repeated so the provider type narrows here.
|
|
502
579
|
assertCodingProviderModel(agent.codingProfile.provider, agent.model);
|
|
503
580
|
const request = options.codingTask ?? agent.codingProfile.defaultTask;
|
|
504
581
|
if (!request)
|
|
505
582
|
throw new Error(`Coding agent "${agent.id}" requires a task.`);
|
|
506
583
|
// The worker sees only the task text, so the agent's own instructions, and the
|
|
507
|
-
// services note, ride in it.
|
|
508
|
-
|
|
584
|
+
// services note, ride in it. Deferred, the task is stored raw and composed when the
|
|
585
|
+
// run starts; composing here only checks its size, so it throws exactly as today.
|
|
586
|
+
if (deferCoding)
|
|
587
|
+
composeCodingTask(agent.systemPrompt, request);
|
|
588
|
+
const task = deferCoding
|
|
589
|
+
? request
|
|
590
|
+
: composeCodingTask(agent.systemPrompt, request, servicesInstructionNote(services), knowledgeIndex ? knowledgeSection(knowledgeIndex) : undefined);
|
|
509
591
|
const budgetUsd = codingBudget.budgetUsd;
|
|
510
592
|
// Resolved once: before the transaction when the declaration was read from it.
|
|
511
|
-
const branch = declarationRead?.branch ?? (await resolveCodingBranch(tx, options,
|
|
593
|
+
const branch = declarationRead?.branch ?? (await resolveCodingBranch(tx, options, target, agent.ownerId));
|
|
512
594
|
const { baseRef, continuationOf, rootCodingRunId, mergeOrder: inheritedMergeOrder } = branch;
|
|
513
595
|
const headRef = branch.headRef ?? `wardby/run-${run.id}`;
|
|
514
596
|
const mergeOrder = resolveMergeOrder(options, inheritedMergeOrder);
|
|
515
597
|
const input = CodingTaskInputSchema.parse({
|
|
516
598
|
schemaVersion: CODING_PROTOCOL_VERSION,
|
|
517
599
|
runId: run.id,
|
|
518
|
-
repository:
|
|
600
|
+
repository: target.repository,
|
|
519
601
|
baseRef,
|
|
520
602
|
headRef,
|
|
521
603
|
task,
|
|
@@ -531,18 +613,25 @@ export async function dispatchRun(options) {
|
|
|
531
613
|
toolchainVersion: agent.codingProfile.toolchainVersion,
|
|
532
614
|
workerImageRef: agent.codingProfile.workerImageRef,
|
|
533
615
|
};
|
|
534
|
-
|
|
616
|
+
// Deferred, both stay null until the starting process resolves them.
|
|
617
|
+
const workerImage = deferCoding ? null : options.executor.resolveCodingWorkerImage?.(imageSelector);
|
|
535
618
|
// Claude Code's commands run in its tool runner, so the toolchain picks that image too; fixed
|
|
536
619
|
// here with the worker image so the run keeps both however the deployment changes later.
|
|
537
|
-
const toolImage = options.executor.resolveCodingToolImage?.(imageSelector) ?? null;
|
|
620
|
+
const toolImage = deferCoding ? null : (options.executor.resolveCodingToolImage?.(imageSelector) ?? null);
|
|
621
|
+
const traced = agent.codingProfile.debugTraceUntil != null &&
|
|
622
|
+
now.getTime() < agent.codingProfile.debugTraceUntil.getTime();
|
|
623
|
+
const { packageAuditMode, packageAuditUntil } = agent.codingProfile;
|
|
538
624
|
await tx.codingRun.create({
|
|
539
625
|
data: {
|
|
540
626
|
runId: run.id,
|
|
627
|
+
budgetLimitedBy: codingBudget.limitedBy ?? null,
|
|
541
628
|
issueProvider: attributed?.provider ?? null,
|
|
542
629
|
issueKey: attributed?.key ?? null,
|
|
543
630
|
task: input.task,
|
|
631
|
+
request,
|
|
544
632
|
repository: input.repository,
|
|
545
633
|
baseRef: input.baseRef,
|
|
634
|
+
viaRepositoryLink: target.viaRepositoryLink,
|
|
546
635
|
headRef: input.headRef,
|
|
547
636
|
provider: agent.codingProfile.provider,
|
|
548
637
|
model: input.model,
|
|
@@ -554,15 +643,25 @@ export async function dispatchRun(options) {
|
|
|
554
643
|
workerImage,
|
|
555
644
|
toolImage,
|
|
556
645
|
budgetReservedUsd: budgetUsd,
|
|
646
|
+
budgetBaseUsd: codingBudget.baseBudgetUsd,
|
|
647
|
+
budgetLimitUsd: codingBudget.limitUsd,
|
|
557
648
|
rootCodingRunId,
|
|
558
649
|
mergeOrder,
|
|
559
650
|
workspaceDiskMb: agent.codingProfile.workspaceDiskMb,
|
|
560
651
|
maxTurns: agent.codingProfile.maxTurns,
|
|
652
|
+
maxOutputTokens: agent.codingProfile.maxOutputTokens,
|
|
561
653
|
repoSkills: agent.codingProfile.repoSkills,
|
|
562
654
|
claudeBareMode: agent.codingProfile.claudeBareMode,
|
|
655
|
+
dependencyCache: agent.codingProfile.dependencyCache,
|
|
656
|
+
sessionResume: agent.codingProfile.sessionResume,
|
|
563
657
|
// Fixed here so a run's tracing never changes mid-run.
|
|
564
|
-
debugTrace:
|
|
565
|
-
|
|
658
|
+
debugTrace: traced,
|
|
659
|
+
debugTraceMaxMb: traced ? agent.codingProfile.debugTraceMaxMb : null,
|
|
660
|
+
// Fixed here too: a run keeps the mode its dispatch saw for its
|
|
661
|
+
// whole life, however the window moves afterwards.
|
|
662
|
+
packageAuditMode: isPackageAuditActive(packageAuditMode, packageAuditUntil, now)
|
|
663
|
+
? packageAuditMode
|
|
664
|
+
: null,
|
|
566
665
|
services,
|
|
567
666
|
},
|
|
568
667
|
});
|
|
@@ -570,7 +669,8 @@ export async function dispatchRun(options) {
|
|
|
570
669
|
else if (agent.kind !== "coding" &&
|
|
571
670
|
(options.codingTask !== undefined ||
|
|
572
671
|
options.codingBaseRef !== undefined ||
|
|
573
|
-
options.continuesCodingRunId !== undefined
|
|
672
|
+
options.continuesCodingRunId !== undefined ||
|
|
673
|
+
options.codingRepository !== undefined)) {
|
|
574
674
|
throw new Error("Coding overrides cannot be supplied for a native agent.");
|
|
575
675
|
}
|
|
576
676
|
const task = options.task
|
|
@@ -178,7 +178,7 @@ export class NativeEngine {
|
|
|
178
178
|
* once all have settled, the first rejection by call order is rethrown.
|
|
179
179
|
*/
|
|
180
180
|
async runToolCalls(ctx, step, turn, toolCalls) {
|
|
181
|
-
const runCall = (index) => step(`turn:${turn}:tool:${index}`, () => ctx.runSandboxTool(toolCalls[index].name, toolCalls[index].argsJson));
|
|
181
|
+
const runCall = (index) => step(`turn:${turn}:tool:${index}`, () => ctx.runSandboxTool(toolCalls[index].name, toolCalls[index].argsJson, toolCalls[index].id));
|
|
182
182
|
const concurrent = ctx.runsConcurrently;
|
|
183
183
|
const results = new Array(toolCalls.length);
|
|
184
184
|
let index = 0;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The code a wardby error message leads with (`some_code` or `some_code: detail`), or undefined.
|
|
3
|
+
* Worker-safe: the native sandbox worker image ships this module.
|
|
4
|
+
*/
|
|
5
|
+
export declare function errorCodeOf(message: string | null | undefined): string | undefined;
|
|
6
|
+
/** The code an unexpected error's message leads with, if it is code-shaped (has an underscore) and short enough. */
|
|
7
|
+
export declare function causeCodeOf(err: unknown): string | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* The only codes that may be shown from an arbitrary error's text (to a worker, or to the model in a
|
|
10
|
+
* tool result): wardby's own codes that an unexpected error on those paths can lead with. Anything
|
|
11
|
+
* else, however code-shaped, could be a value from an error's text, so it never crosses.
|
|
12
|
+
* - coding_execution_not_configured, coding_profile_missing: a coding delegation reaching a process
|
|
13
|
+
* that cannot start coding runs (core/deferred-coding.ts, providers/executor/routing.ts).
|
|
14
|
+
* - message_too_large, message_not_json, message_invalid, unsupported_protocol_version: the native
|
|
15
|
+
* worker protocol's own ProtocolError codes (native-worker/protocol.ts).
|
|
16
|
+
* - invalid_merge_order: dispatchRun's refusal of a bad mergeOrder (core/dispatch.ts).
|
|
17
|
+
* - coding_worker_image_invalid: a coding worker image that is not pinned by digest
|
|
18
|
+
* (providers/executor/container.ts).
|
|
19
|
+
* - native_sandbox_unavailable: createRun/the router refusing a sandbox-mode agent with no sandbox executor
|
|
20
|
+
* (core/runner.ts).
|
|
21
|
+
* - run_tree_exhausted: dispatchRun refusing a run whose tree budget is spent (core/dispatch.ts).
|
|
22
|
+
* - secret_in_value, secret_check_unavailable: the datastore and memory write guard refusing a value
|
|
23
|
+
* that holds an attached secret's value (core/secret-guard.ts); the code carries only the name of
|
|
24
|
+
* the secret, never its value, across the gateway.
|
|
25
|
+
*/
|
|
26
|
+
export declare const GATEWAY_CAUSE_CODES: ReadonlySet<string>;
|
|
27
|
+
/**
|
|
28
|
+
* The codes wardby itself writes as a failed coding or native child run's Run.error (read from the
|
|
29
|
+
* literals in core/dispatch.ts, core/coding-queue.ts, providers/executor/*, core/run-pricing.ts,
|
|
30
|
+
* providers/llm/catalog-types.ts and the native sandbox). A parent may be told which of these a
|
|
31
|
+
* child failed with; any other leading word is not shown. Includes GATEWAY_CAUSE_CODES, and the
|
|
32
|
+
* container executor's terminal codes: `coding_failure_<category>` for every category
|
|
33
|
+
* failureCategory files a failure under (providers/executor/container.ts), and
|
|
34
|
+
* `coding_provider_<class>` for every provider failure class (core/provider-wording.ts).
|
|
35
|
+
*/
|
|
36
|
+
export declare const CHILD_RUN_FAILURE_CODES: ReadonlySet<string>;
|
|
37
|
+
/** The leading code of an arbitrary error or message, only when it is declared in `allowed`. */
|
|
38
|
+
export declare function declaredCodeOf(err: unknown, allowed?: ReadonlySet<string>): string | undefined;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The code a wardby error message leads with (`some_code` or `some_code: detail`), or undefined.
|
|
3
|
+
* Worker-safe: the native sandbox worker image ships this module.
|
|
4
|
+
*/
|
|
5
|
+
export function errorCodeOf(message) {
|
|
6
|
+
return message ? /^([a-z][a-z0-9_]*)(:|$)/.exec(message)?.[1] : undefined;
|
|
7
|
+
}
|
|
8
|
+
/** The longest cause code carried; a longer leading word is not a code. */
|
|
9
|
+
const MAX_CAUSE_CODE_LENGTH = 64;
|
|
10
|
+
/** The code an unexpected error's message leads with, if it is code-shaped (has an underscore) and short enough. */
|
|
11
|
+
export function causeCodeOf(err) {
|
|
12
|
+
const code = errorCodeOf(err instanceof Error ? err.message : typeof err === "string" ? err : undefined);
|
|
13
|
+
// Only the code form leaves a boundary: snake_case with an underscore, so a bare word
|
|
14
|
+
// (which could be a token) never crosses.
|
|
15
|
+
return code && code.includes("_") && code.length <= MAX_CAUSE_CODE_LENGTH ? code : undefined;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The only codes that may be shown from an arbitrary error's text (to a worker, or to the model in a
|
|
19
|
+
* tool result): wardby's own codes that an unexpected error on those paths can lead with. Anything
|
|
20
|
+
* else, however code-shaped, could be a value from an error's text, so it never crosses.
|
|
21
|
+
* - coding_execution_not_configured, coding_profile_missing: a coding delegation reaching a process
|
|
22
|
+
* that cannot start coding runs (core/deferred-coding.ts, providers/executor/routing.ts).
|
|
23
|
+
* - message_too_large, message_not_json, message_invalid, unsupported_protocol_version: the native
|
|
24
|
+
* worker protocol's own ProtocolError codes (native-worker/protocol.ts).
|
|
25
|
+
* - invalid_merge_order: dispatchRun's refusal of a bad mergeOrder (core/dispatch.ts).
|
|
26
|
+
* - coding_worker_image_invalid: a coding worker image that is not pinned by digest
|
|
27
|
+
* (providers/executor/container.ts).
|
|
28
|
+
* - native_sandbox_unavailable: createRun/the router refusing a sandbox-mode agent with no sandbox executor
|
|
29
|
+
* (core/runner.ts).
|
|
30
|
+
* - run_tree_exhausted: dispatchRun refusing a run whose tree budget is spent (core/dispatch.ts).
|
|
31
|
+
* - secret_in_value, secret_check_unavailable: the datastore and memory write guard refusing a value
|
|
32
|
+
* that holds an attached secret's value (core/secret-guard.ts); the code carries only the name of
|
|
33
|
+
* the secret, never its value, across the gateway.
|
|
34
|
+
*/
|
|
35
|
+
export const GATEWAY_CAUSE_CODES = new Set([
|
|
36
|
+
"coding_execution_not_configured",
|
|
37
|
+
"coding_profile_missing",
|
|
38
|
+
"message_too_large",
|
|
39
|
+
"message_not_json",
|
|
40
|
+
"message_invalid",
|
|
41
|
+
"unsupported_protocol_version",
|
|
42
|
+
"invalid_merge_order",
|
|
43
|
+
"coding_worker_image_invalid",
|
|
44
|
+
"native_sandbox_unavailable",
|
|
45
|
+
"run_tree_exhausted",
|
|
46
|
+
"secret_in_value",
|
|
47
|
+
"secret_check_unavailable",
|
|
48
|
+
]);
|
|
49
|
+
/**
|
|
50
|
+
* The codes wardby itself writes as a failed coding or native child run's Run.error (read from the
|
|
51
|
+
* literals in core/dispatch.ts, core/coding-queue.ts, providers/executor/*, core/run-pricing.ts,
|
|
52
|
+
* providers/llm/catalog-types.ts and the native sandbox). A parent may be told which of these a
|
|
53
|
+
* child failed with; any other leading word is not shown. Includes GATEWAY_CAUSE_CODES, and the
|
|
54
|
+
* container executor's terminal codes: `coding_failure_<category>` for every category
|
|
55
|
+
* failureCategory files a failure under (providers/executor/container.ts), and
|
|
56
|
+
* `coding_provider_<class>` for every provider failure class (core/provider-wording.ts).
|
|
57
|
+
*/
|
|
58
|
+
export const CHILD_RUN_FAILURE_CODES = new Set([
|
|
59
|
+
...GATEWAY_CAUSE_CODES,
|
|
60
|
+
"coding_failure_turn_limit",
|
|
61
|
+
"coding_failure_service_unready",
|
|
62
|
+
"coding_failure_preflight",
|
|
63
|
+
"coding_failure_job",
|
|
64
|
+
"coding_failure_repo_access_unavailable",
|
|
65
|
+
"coding_failure_repo_access",
|
|
66
|
+
"coding_failure_github",
|
|
67
|
+
"coding_failure_protected_path",
|
|
68
|
+
"coding_failure_continuation_closed",
|
|
69
|
+
"coding_failure_merge_conflict",
|
|
70
|
+
"coding_failure_target_merge",
|
|
71
|
+
"coding_failure_workspace",
|
|
72
|
+
"coding_failure_budget",
|
|
73
|
+
"coding_failure_artifact",
|
|
74
|
+
"coding_failure_cancelled",
|
|
75
|
+
"coding_failure_executor",
|
|
76
|
+
"coding_failure_mcp_pins_unavailable",
|
|
77
|
+
"coding_provider_quota",
|
|
78
|
+
"coding_provider_rate_limited",
|
|
79
|
+
"coding_provider_unavailable",
|
|
80
|
+
"coding_provider_rejected",
|
|
81
|
+
"coding_ambiguous_provisioning",
|
|
82
|
+
"coding_artifact_duplicate_key",
|
|
83
|
+
"coding_artifact_invalid_json",
|
|
84
|
+
"coding_artifact_nesting_limit",
|
|
85
|
+
"coding_artifact_path_invalid",
|
|
86
|
+
"coding_artifact_root_invalid",
|
|
87
|
+
"coding_artifact_size_limit",
|
|
88
|
+
"coding_budget_exhausted",
|
|
89
|
+
"coding_capability_exists",
|
|
90
|
+
"coding_capability_unavailable",
|
|
91
|
+
"coding_credential_ref_invalid",
|
|
92
|
+
"coding_credential_reference_invalid",
|
|
93
|
+
"coding_credential_unavailable",
|
|
94
|
+
"coding_dispatch_unavailable",
|
|
95
|
+
"coding_head_ref_invalid",
|
|
96
|
+
"coding_input_invalid_file",
|
|
97
|
+
"coding_job_handle_conflict",
|
|
98
|
+
"coding_job_handle_mismatch",
|
|
99
|
+
"coding_job_status_unavailable",
|
|
100
|
+
"coding_output_invalid",
|
|
101
|
+
"coding_output_missing",
|
|
102
|
+
"coding_output_run_mismatch",
|
|
103
|
+
"coding_output_size_limit",
|
|
104
|
+
"coding_provider_not_configured",
|
|
105
|
+
"coding_provider_unsupported",
|
|
106
|
+
"coding_queue_timeout",
|
|
107
|
+
"coding_recovery_incomplete",
|
|
108
|
+
"coding_recovery_unavailable",
|
|
109
|
+
"coding_resource_limits_invalid",
|
|
110
|
+
"coding_result_missing",
|
|
111
|
+
"coding_result_run_mismatch",
|
|
112
|
+
"coding_run_budget_invalid",
|
|
113
|
+
"coding_run_no_longer_active",
|
|
114
|
+
"coding_run_not_active",
|
|
115
|
+
"coding_run_not_found",
|
|
116
|
+
"coding_run_ownership_invalid",
|
|
117
|
+
"coding_run_pricing_mismatch",
|
|
118
|
+
"coding_run_status_invalid",
|
|
119
|
+
"coding_run_terminal_conflict",
|
|
120
|
+
"coding_service_catalog_invalid",
|
|
121
|
+
"coding_service_unready",
|
|
122
|
+
"coding_services_unsupported",
|
|
123
|
+
"coding_services_unsupported_launcher",
|
|
124
|
+
"coding_stream_agent_exited",
|
|
125
|
+
"coding_stream_failed",
|
|
126
|
+
"coding_stream_proxy_denied",
|
|
127
|
+
"coding_stream_proxy_unreachable",
|
|
128
|
+
"coding_stream_quota_exceeded",
|
|
129
|
+
"coding_stream_rate_limited",
|
|
130
|
+
"coding_stream_timeout",
|
|
131
|
+
"coding_stream_upstream_error",
|
|
132
|
+
"coding_toolchain_unsupported",
|
|
133
|
+
"coding_turn_failed",
|
|
134
|
+
"coding_turn_limit",
|
|
135
|
+
"coding_workspace_disk_exceeds_limit",
|
|
136
|
+
"coding_workspace_lost",
|
|
137
|
+
"model_unavailable",
|
|
138
|
+
"model_not_allowed",
|
|
139
|
+
"executor_run_not_found",
|
|
140
|
+
"run_not_drivable",
|
|
141
|
+
"ownership_lost",
|
|
142
|
+
"step_replay_mismatch",
|
|
143
|
+
"worker_error",
|
|
144
|
+
"worker_tool_runner_unreachable",
|
|
145
|
+
"sandbox_dispatch_unavailable",
|
|
146
|
+
"native_sandbox_capacity",
|
|
147
|
+
"native_sandbox_deadline_exceeded",
|
|
148
|
+
"native_sandbox_docker_failed",
|
|
149
|
+
"native_sandbox_gateway_error",
|
|
150
|
+
"native_sandbox_gateway_unavailable",
|
|
151
|
+
"native_sandbox_image_not_pinned",
|
|
152
|
+
"native_sandbox_invalid_run_id",
|
|
153
|
+
"native_sandbox_invalid_warm_token",
|
|
154
|
+
"native_sandbox_isolation_mismatch",
|
|
155
|
+
"native_sandbox_launch_abandoned",
|
|
156
|
+
"native_sandbox_network_unenforced",
|
|
157
|
+
"native_sandbox_platform_unsupported",
|
|
158
|
+
"native_sandbox_recovery_unavailable",
|
|
159
|
+
"native_sandbox_requires_catalog",
|
|
160
|
+
"native_sandbox_warm_delivery_failed",
|
|
161
|
+
"native_sandbox_worker_exited",
|
|
162
|
+
"native_sandbox_worker_lost",
|
|
163
|
+
"native_sandbox_worker_unready",
|
|
164
|
+
]);
|
|
165
|
+
/** The leading code of an arbitrary error or message, only when it is declared in `allowed`. */
|
|
166
|
+
export function declaredCodeOf(err, allowed = GATEWAY_CAUSE_CODES) {
|
|
167
|
+
const code = causeCodeOf(err);
|
|
168
|
+
return code && allowed.has(code) ? code : undefined;
|
|
169
|
+
}
|