@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
package/dist/core/dispatch.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type { Prisma, PrismaClient, Run, RunTrigger, Task } from "#prisma";
|
|
2
2
|
import type { Executor } from "../providers/executor/types.js";
|
|
3
|
+
import { type CodingProvider } from "../coding/provider.js";
|
|
4
|
+
import { type DeclaredService } from "../coding/services/declaration.js";
|
|
5
|
+
import { type ServiceResolution } from "../coding/services/resolve.js";
|
|
3
6
|
import { type AttributionIntent } from "./attribution.js";
|
|
4
7
|
import { type BudgetConstraint } from "./budget-groups.js";
|
|
8
|
+
import { type KnowledgeNoteInput } from "../knowledge/note.js";
|
|
5
9
|
import { type SelfDefectSink } from "./self-defects.js";
|
|
6
10
|
export type DispatchDb = Pick<PrismaClient, "agent" | "run" | "runHostCheck" | "codingRun" | "task" | "webhook" | "budgetGroup" | "$transaction" | "$queryRaw">;
|
|
7
11
|
export type DispatchTx = Pick<Prisma.TransactionClient, "agent" | "run" | "runHostCheck" | "runHostStatus" | "runIssueStatus" | "codingRun" | "codingService" | "task" | "webhook" | "budgetGroup" | "resourceGrant" | "workItem" | "localPullRequest" | "runAttribution" | "$queryRaw" | "$executeRawUnsafe">;
|
|
@@ -28,6 +32,17 @@ export interface DispatchRunOptions {
|
|
|
28
32
|
* exclusive with `codingBaseRef`. Coding agents only.
|
|
29
33
|
*/
|
|
30
34
|
continuesCodingRunId?: string;
|
|
35
|
+
/**
|
|
36
|
+
* The step in the delegating agent's declared merge order for this coding
|
|
37
|
+
* run (1 = merge first; equal numbers mean no order between them). Integer
|
|
38
|
+
* 1-99, validated by the caller (the delegate_to_* tool's mergeOrder
|
|
39
|
+
* argument); throws `Error("invalid_merge_order")` otherwise. Coding agents
|
|
40
|
+
* only; ignored for a native agent (no CodingRun to store it on). A
|
|
41
|
+
* continuation (`continuesCodingRunId`) that omits this inherits the pull
|
|
42
|
+
* request's effective value: the newest non-null `mergeOrder` among the
|
|
43
|
+
* root coding run and its continuations.
|
|
44
|
+
*/
|
|
45
|
+
mergeOrder?: number;
|
|
31
46
|
now?: Date;
|
|
32
47
|
lockAgent?: boolean;
|
|
33
48
|
task?: {
|
|
@@ -52,6 +67,12 @@ export interface DispatchRunOptions {
|
|
|
52
67
|
triggeredById?: string | null;
|
|
53
68
|
/** Sub-agent dispatch (see AgentSubAgent): links this run into a run tree. */
|
|
54
69
|
parentRunId?: string;
|
|
70
|
+
/**
|
|
71
|
+
* The parent's delegation call (the model's tool-call id) that dispatches this sub-agent run.
|
|
72
|
+
* Unique per parent, so a re-executed delegate step finds the child its call created
|
|
73
|
+
* (findDelegationChild) instead of starting a second one.
|
|
74
|
+
*/
|
|
75
|
+
parentCallId?: string;
|
|
55
76
|
/**
|
|
56
77
|
* Cost attribution for a run that starts a new attribution (issue event,
|
|
57
78
|
* linked PR, explicit key), resolved before the call (attribution.ts
|
|
@@ -137,6 +158,19 @@ export declare function markRunFailedFromExecutorError(db: Pick<DispatchDb, "run
|
|
|
137
158
|
* `run_tree_exhausted`, then a sentence for people.
|
|
138
159
|
*/
|
|
139
160
|
export declare function budgetExhaustedError(constraint: BudgetConstraint): string;
|
|
161
|
+
/**
|
|
162
|
+
* Serializes grouped coding dispatches (security review I1). Under
|
|
163
|
+
* Serializable, a row lock taken after the transaction's first read cannot
|
|
164
|
+
* queue anything: the snapshot is already fixed, so each waiter wakes up
|
|
165
|
+
* with a stale view and aborts. LOCK TABLE is the one statement that takes
|
|
166
|
+
* no snapshot, so as the transaction's first statement it makes a waiter's
|
|
167
|
+
* snapshot start only after the previous holder committed. SHARE ROW
|
|
168
|
+
* EXCLUSIVE conflicts with itself and with writes to BudgetGroup rows, but not
|
|
169
|
+
* with the ROW SHARE that foreign-key checks from Agent take, so attaching
|
|
170
|
+
* agents to groups is not blocked. It serializes grouped coding dispatches
|
|
171
|
+
* across all groups; each holds it only for one short transaction.
|
|
172
|
+
*/
|
|
173
|
+
export declare const GROUP_DISPATCH_LOCK_SQL = "LOCK TABLE \"BudgetGroup\" IN SHARE ROW EXCLUSIVE MODE";
|
|
140
174
|
/**
|
|
141
175
|
* Attempts for the persist transaction, and the jittered backoff between
|
|
142
176
|
* them, for serialization failures, deadlocks and transactions that could
|
|
@@ -178,6 +212,25 @@ export type ContinuationCheck = {
|
|
|
178
212
|
* run at all" (a user-facing refusal message, not a dispatch).
|
|
179
213
|
*/
|
|
180
214
|
export declare function checkContinuation(reader: Pick<DispatchTx, "codingRun">, runId: string, repository: string, dispatchingOwnerId?: string | null): Promise<ContinuationCheck>;
|
|
215
|
+
/** What dispatch learned about a coding run's .wardby/services.yaml before its transaction. */
|
|
216
|
+
export type DeclarationOutcome = {
|
|
217
|
+
kind: "none";
|
|
218
|
+
} | {
|
|
219
|
+
kind: "declared";
|
|
220
|
+
services: DeclaredService[];
|
|
221
|
+
} | {
|
|
222
|
+
kind: "refused";
|
|
223
|
+
refusal: string;
|
|
224
|
+
};
|
|
225
|
+
/** The bundle index at a known base ref; also how a deferred coding run reads it when it starts. */
|
|
226
|
+
export declare function readKnowledgeIndexAt(executor: Executor, repository: string, baseRef: string): Promise<KnowledgeNoteInput | undefined>;
|
|
227
|
+
/** The declaration at a known base ref, parsed; also how a deferred coding run reads it when it starts. */
|
|
228
|
+
export declare function readServiceDeclarationAt(executor: Executor, repository: string, baseRef: string): Promise<DeclarationOutcome>;
|
|
229
|
+
/**
|
|
230
|
+
* Inside the transaction: the run's services, or the refusal that stops it. Takes only the
|
|
231
|
+
* catalog, so a deferred coding run's start resolves them the same way with a plain client.
|
|
232
|
+
*/
|
|
233
|
+
export declare function resolveDispatchServices(tx: Pick<Prisma.TransactionClient, "codingService">, outcome: DeclarationOutcome, allowed: unknown, executor: Executor, provider: CodingProvider, request: string, instructions: string | null): Promise<ServiceResolution>;
|
|
181
234
|
/**
|
|
182
235
|
* Persists every detached run input in one transaction, then invokes the
|
|
183
236
|
* executor only after commit. A null result means the caller's transactional
|
package/dist/core/dispatch.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CODING_PROTOCOL_VERSION, CodingTaskInputSchema, normalizeGitHubRepository, normalizeGitRef, publicCodingRunResult, composeCodingTask, } from "../coding/protocol.js";
|
|
2
2
|
import { assertCodingProvider, assertCodingProviderModel } from "../coding/provider.js";
|
|
3
|
+
import { isPackageAuditActive } from "../coding/registry/audit-mode.js";
|
|
3
4
|
import { ModelUnavailableError, entryOf } from "../providers/llm/catalog-types.js";
|
|
4
5
|
import { parseAllowedServiceNames, workerServices } from "../coding/services/catalog.js";
|
|
5
6
|
import { MAX_SERVICE_DECLARATION_BYTES, ServiceDeclarationError, parseServiceDeclaration, } from "../coding/services/declaration.js";
|
|
@@ -7,8 +8,8 @@ import { servicesInstructionNote } from "../coding/services/note.js";
|
|
|
7
8
|
import { resolveRunServices } from "../coding/services/resolve.js";
|
|
8
9
|
import { DECLARATION_UNAVAILABLE_SENTENCE, LAUNCHER_UNSUPPORTED_SENTENCE, invalidDeclarationSentence, serviceRefusal, } from "../coding/services/wording.js";
|
|
9
10
|
import { attributeRun } from "./attribution.js";
|
|
10
|
-
import { effectiveBudgetForRun, MIN_RESERVATION_USD } from "./budget-groups.js";
|
|
11
|
-
import {
|
|
11
|
+
import { effectiveBudgetForRun, MIN_RESERVATION_USD, } from "./budget-groups.js";
|
|
12
|
+
import { KNOWLEDGE_CONFIG_MAX_BYTES, KNOWLEDGE_CONFIG_PATH, resolveKnowledgeLocation } from "../knowledge/location.js";
|
|
12
13
|
import { KNOWLEDGE_INDEX_READ_MAX_BYTES, knowledgeSection } from "../knowledge/note.js";
|
|
13
14
|
import { logger } from "./logger.js";
|
|
14
15
|
import { CodingModelProviderMismatchError, resolveCodingEntry } from "./run-pricing.js";
|
|
@@ -107,21 +108,45 @@ export function budgetExhaustedError(constraint) {
|
|
|
107
108
|
* agents to groups is not blocked. It serializes grouped coding dispatches
|
|
108
109
|
* across all groups; each holds it only for one short transaction.
|
|
109
110
|
*/
|
|
110
|
-
const GROUP_DISPATCH_LOCK_SQL = 'LOCK TABLE "BudgetGroup" IN SHARE ROW EXCLUSIVE MODE';
|
|
111
|
+
export const GROUP_DISPATCH_LOCK_SQL = 'LOCK TABLE "BudgetGroup" IN SHARE ROW EXCLUSIVE MODE';
|
|
112
|
+
/** Rounded down to CodingRun's 6 decimal places. */
|
|
113
|
+
function floorToMicroUsd(usd) {
|
|
114
|
+
return Math.floor(usd / MIN_RESERVATION_USD) * MIN_RESERVATION_USD;
|
|
115
|
+
}
|
|
111
116
|
/**
|
|
112
|
-
* A coding run's budget reservation: the requested
|
|
117
|
+
* A coding run's budget reservation: the requested base (override or the
|
|
113
118
|
* 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
|
|
119
|
+
* live in-flight run's unspent hold already counts as spent. Only the base is
|
|
120
|
+
* reserved (CodingRun.budgetReservedUsd, and budgetBaseUsd beside it). The
|
|
121
|
+
* agent's allowedOverrunPercent raises the requested base to the run's limit
|
|
122
|
+
* (CodingRun.budgetLimitUsd), which is never reserved: the run may spend past
|
|
123
|
+
* its base only through top-ups its group and run tree have room for when it
|
|
124
|
+
* needs them (budget-topup.ts). Rounded down to 6 decimal places; a base less
|
|
125
|
+
* than that is refused.
|
|
116
126
|
*/
|
|
117
127
|
async function reserveCodingBudget(tx, agent, now, options) {
|
|
128
|
+
const overrunPercent = agent.allowedOverrunPercent;
|
|
118
129
|
const effective = await effectiveBudgetForRun(tx, agent, now, options.parentRunId);
|
|
119
130
|
const requested = options.budgetUsdOverride ?? Number(agent.budgetUsd);
|
|
120
|
-
const
|
|
121
|
-
if (
|
|
122
|
-
return {
|
|
131
|
+
const baseBudgetUsd = floorToMicroUsd(Math.min(requested, effective.effectiveBudgetUsd));
|
|
132
|
+
if (baseBudgetUsd < MIN_RESERVATION_USD && effective.exhaustedBy) {
|
|
133
|
+
return {
|
|
134
|
+
budgetUsd: 0,
|
|
135
|
+
baseBudgetUsd: 0,
|
|
136
|
+
limitUsd: null,
|
|
137
|
+
refusal: budgetExhaustedError(effective.exhaustedBy),
|
|
138
|
+
...(effective.exhaustedDetail
|
|
139
|
+
? { refusalDetail: { limit: effective.exhaustedBy, detail: effective.exhaustedDetail } }
|
|
140
|
+
: {}),
|
|
141
|
+
};
|
|
123
142
|
}
|
|
124
|
-
|
|
143
|
+
const limitUsd = overrunPercent > 0 ? floorToMicroUsd((requested * (100 + overrunPercent)) / 100) : null;
|
|
144
|
+
return {
|
|
145
|
+
budgetUsd: baseBudgetUsd,
|
|
146
|
+
baseBudgetUsd,
|
|
147
|
+
limitUsd: limitUsd !== null && limitUsd > baseBudgetUsd ? limitUsd : null,
|
|
148
|
+
...(effective.limitedBy ? { limitedBy: effective.limitedBy } : {}),
|
|
149
|
+
};
|
|
125
150
|
}
|
|
126
151
|
/**
|
|
127
152
|
* Attempts for the persist transaction, and the jittered backoff between
|
|
@@ -227,8 +252,37 @@ ownerId) {
|
|
|
227
252
|
headRef: root.headRef,
|
|
228
253
|
continuationOf: { runId: root.runId },
|
|
229
254
|
rootCodingRunId: root.runId,
|
|
255
|
+
mergeOrder: await effectiveMergeOrder(reader, root.runId),
|
|
230
256
|
};
|
|
231
257
|
}
|
|
258
|
+
/**
|
|
259
|
+
* The pull request's current merge step: the newest non-null mergeOrder
|
|
260
|
+
* (by run start) among the root coding run and every continuation of it
|
|
261
|
+
* (CodingRun.rootCodingRunId, indexed), or null when none set one. A
|
|
262
|
+
* continuation that omits mergeOrder inherits this, so an earlier
|
|
263
|
+
* continuation's override is kept rather than reverting to the root's.
|
|
264
|
+
*/
|
|
265
|
+
async function effectiveMergeOrder(reader, rootRunId) {
|
|
266
|
+
const newest = await reader.codingRun.findFirst({
|
|
267
|
+
where: { OR: [{ runId: rootRunId }, { rootCodingRunId: rootRunId }], mergeOrder: { not: null } },
|
|
268
|
+
orderBy: [{ run: { startedAt: "desc" } }, { runId: "desc" }],
|
|
269
|
+
select: { mergeOrder: true },
|
|
270
|
+
});
|
|
271
|
+
return newest?.mergeOrder ?? null;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Resolves the CodingRun's mergeOrder: the caller's own value if given (an
|
|
275
|
+
* integer 1-99; anything else throws), else the inherited effective value
|
|
276
|
+
* (undefined for a fresh branch), else null (no order).
|
|
277
|
+
*/
|
|
278
|
+
function resolveMergeOrder(options, inherited) {
|
|
279
|
+
if (options.mergeOrder === undefined)
|
|
280
|
+
return inherited ?? null;
|
|
281
|
+
if (!Number.isInteger(options.mergeOrder) || options.mergeOrder < 1 || options.mergeOrder > 99) {
|
|
282
|
+
throw new Error("invalid_merge_order");
|
|
283
|
+
}
|
|
284
|
+
return options.mergeOrder;
|
|
285
|
+
}
|
|
232
286
|
/** Read failures that are the file's fault rather than the host's: reported as an invalid declaration. */
|
|
233
287
|
const UNREADABLE_DECLARATION = {
|
|
234
288
|
github_file_too_large: `it is larger than ${MAX_SERVICE_DECLARATION_BYTES} bytes`,
|
|
@@ -240,30 +294,49 @@ const UNREADABLE_DECLARATION = {
|
|
|
240
294
|
};
|
|
241
295
|
/**
|
|
242
296
|
* The knowledge note's input (docs/knowledge.md): the repository's bundle
|
|
243
|
-
* index at the run's base
|
|
297
|
+
* index at the run's base (in the folder .wardby/knowledge.yaml names, else
|
|
298
|
+
* docs/knowledge/), read before the transaction like the services
|
|
244
299
|
* declaration. Any failure means no note, never a failed dispatch.
|
|
245
300
|
*/
|
|
246
301
|
async function readKnowledgeIndex(options, profile, resolvedBranch, ownerId) {
|
|
247
|
-
|
|
248
|
-
if (!executor.readCodingRepositoryFile)
|
|
302
|
+
if (!options.executor.readCodingRepositoryFile)
|
|
249
303
|
return undefined;
|
|
304
|
+
let baseRef;
|
|
250
305
|
try {
|
|
251
306
|
// Resolved here, inside the try: a branch problem is the transaction's to report, not the note's.
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
307
|
+
baseRef = (resolvedBranch ?? (await resolveCodingBranch(options.db, options, profile, ownerId))).baseRef;
|
|
308
|
+
}
|
|
309
|
+
catch (err) {
|
|
310
|
+
dispatchLog.warn({ err, repository: profile.repository }, "knowledge index read failed; dispatching without it");
|
|
311
|
+
return undefined;
|
|
312
|
+
}
|
|
313
|
+
return readKnowledgeIndexAt(options.executor, profile.repository, baseRef);
|
|
314
|
+
}
|
|
315
|
+
/** The bundle index at a known base ref; also how a deferred coding run reads it when it starts. */
|
|
316
|
+
export async function readKnowledgeIndexAt(executor, repository, baseRef) {
|
|
317
|
+
const readFile = executor.readCodingRepositoryFile?.bind(executor);
|
|
318
|
+
if (!readFile)
|
|
319
|
+
return undefined;
|
|
320
|
+
const ref = normalizeGitRef(baseRef);
|
|
321
|
+
// The repository may name its bundle folder in .wardby/knowledge.yaml; anything wrong with that file falls back to the default.
|
|
322
|
+
const { bundlePath, warning } = await resolveKnowledgeLocation(() => readFile({ repository, baseRef: ref, path: KNOWLEDGE_CONFIG_PATH, maxBytes: KNOWLEDGE_CONFIG_MAX_BYTES }));
|
|
323
|
+
if (warning)
|
|
324
|
+
dispatchLog.warn({ repository, baseRef: ref }, warning);
|
|
325
|
+
try {
|
|
326
|
+
const indexText = await readFile({
|
|
327
|
+
repository,
|
|
328
|
+
baseRef: ref,
|
|
329
|
+
path: `${bundlePath}/index.md`,
|
|
257
330
|
maxBytes: KNOWLEDGE_INDEX_READ_MAX_BYTES,
|
|
258
331
|
});
|
|
259
|
-
return indexText ? { bundlePath
|
|
332
|
+
return indexText ? { bundlePath, indexText } : undefined;
|
|
260
333
|
}
|
|
261
334
|
catch (err) {
|
|
262
335
|
if (err instanceof Error && err.message in UNREADABLE_DECLARATION) {
|
|
263
|
-
dispatchLog.info({ repository
|
|
336
|
+
dispatchLog.info({ repository, reason: err.message }, "knowledge index unreadable; dispatching without it");
|
|
264
337
|
return undefined;
|
|
265
338
|
}
|
|
266
|
-
dispatchLog.warn({ err, repository
|
|
339
|
+
dispatchLog.warn({ err, repository }, "knowledge index read failed; dispatching without it");
|
|
267
340
|
return undefined;
|
|
268
341
|
}
|
|
269
342
|
}
|
|
@@ -275,56 +348,54 @@ async function readKnowledgeIndex(options, profile, resolvedBranch, ownerId) {
|
|
|
275
348
|
*/
|
|
276
349
|
async function readServiceDeclaration(options, profile, ownerId) {
|
|
277
350
|
const branch = await resolveCodingBranch(options.db, options, profile, ownerId);
|
|
278
|
-
|
|
279
|
-
|
|
351
|
+
return {
|
|
352
|
+
repository: profile.repository,
|
|
353
|
+
profileBaseRef: profile.baseRef,
|
|
354
|
+
branch,
|
|
355
|
+
outcome: await readServiceDeclarationAt(options.executor, profile.repository, branch.baseRef),
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
/** The declaration at a known base ref, parsed; also how a deferred coding run reads it when it starts. */
|
|
359
|
+
export async function readServiceDeclarationAt(executor, repository, baseRef) {
|
|
280
360
|
if (!executor.readCodingServiceDeclaration)
|
|
281
|
-
return {
|
|
361
|
+
return { kind: "none" };
|
|
282
362
|
let text;
|
|
283
363
|
try {
|
|
284
|
-
text = await executor.readCodingServiceDeclaration({
|
|
285
|
-
repository: profile.repository,
|
|
286
|
-
baseRef: normalizeGitRef(branch.baseRef),
|
|
287
|
-
});
|
|
364
|
+
text = await executor.readCodingServiceDeclaration({ repository, baseRef: normalizeGitRef(baseRef) });
|
|
288
365
|
}
|
|
289
366
|
catch (err) {
|
|
290
367
|
const reason = UNREADABLE_DECLARATION[err instanceof Error ? err.message : ""];
|
|
291
368
|
if (reason) {
|
|
292
369
|
return {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
kind: "refused",
|
|
296
|
-
refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(reason)),
|
|
297
|
-
},
|
|
370
|
+
kind: "refused",
|
|
371
|
+
refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(reason)),
|
|
298
372
|
};
|
|
299
373
|
}
|
|
300
|
-
dispatchLog.warn({ err,
|
|
374
|
+
dispatchLog.warn({ err, repository }, "could not read the repository's service declaration");
|
|
301
375
|
return {
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
kind: "refused",
|
|
305
|
-
refusal: serviceRefusal("service_declaration_unavailable", DECLARATION_UNAVAILABLE_SENTENCE),
|
|
306
|
-
},
|
|
376
|
+
kind: "refused",
|
|
377
|
+
refusal: serviceRefusal("service_declaration_unavailable", DECLARATION_UNAVAILABLE_SENTENCE),
|
|
307
378
|
};
|
|
308
379
|
}
|
|
309
380
|
if (text === null)
|
|
310
|
-
return {
|
|
381
|
+
return { kind: "none" };
|
|
311
382
|
try {
|
|
312
|
-
return {
|
|
383
|
+
return { kind: "declared", services: parseServiceDeclaration(text) };
|
|
313
384
|
}
|
|
314
385
|
catch (err) {
|
|
315
386
|
if (!(err instanceof ServiceDeclarationError))
|
|
316
387
|
throw err;
|
|
317
388
|
return {
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
kind: "refused",
|
|
321
|
-
refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(err.reason)),
|
|
322
|
-
},
|
|
389
|
+
kind: "refused",
|
|
390
|
+
refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(err.reason)),
|
|
323
391
|
};
|
|
324
392
|
}
|
|
325
393
|
}
|
|
326
|
-
/**
|
|
327
|
-
|
|
394
|
+
/**
|
|
395
|
+
* Inside the transaction: the run's services, or the refusal that stops it. Takes only the
|
|
396
|
+
* catalog, so a deferred coding run's start resolves them the same way with a plain client.
|
|
397
|
+
*/
|
|
398
|
+
export async function resolveDispatchServices(tx, outcome, allowed, executor, provider, request, instructions) {
|
|
328
399
|
if (outcome.kind === "refused")
|
|
329
400
|
return { refusal: outcome.refusal };
|
|
330
401
|
if (outcome.kind === "none" || outcome.services.length === 0)
|
|
@@ -356,15 +427,19 @@ export async function dispatchRun(options) {
|
|
|
356
427
|
},
|
|
357
428
|
});
|
|
358
429
|
const lockGroups = preview?.kind === "coding" && preview.budgetGroupId != null;
|
|
430
|
+
// The native gateway's executor has no coding configuration: the run is recorded
|
|
431
|
+
// unresolved and the process that starts it reads and resolves (resolveDeferredCodingRun).
|
|
432
|
+
const deferCoding = options.executor.defersCodingResolution === true;
|
|
359
433
|
// Only an agent allowed some service reads the repository's declaration; any
|
|
360
434
|
// other coding agent never calls the host for it and gets no services.
|
|
361
|
-
const declarationRead =
|
|
435
|
+
const declarationRead = !deferCoding &&
|
|
436
|
+
preview?.kind === "coding" &&
|
|
362
437
|
preview.codingProfile &&
|
|
363
438
|
parseAllowedServiceNames(preview.codingProfile.services).length > 0
|
|
364
439
|
? await readServiceDeclaration(options, preview.codingProfile, preview.ownerId ?? null)
|
|
365
440
|
: undefined;
|
|
366
441
|
// The knowledge note's input: the repository's bundle index at the run's base (a network call).
|
|
367
|
-
const knowledgeIndex = preview?.kind === "coding" && preview.codingProfile && options.executor.readCodingRepositoryFile
|
|
442
|
+
const knowledgeIndex = !deferCoding && preview?.kind === "coding" && preview.codingProfile && options.executor.readCodingRepositoryFile
|
|
368
443
|
? await readKnowledgeIndex(options, preview.codingProfile, declarationRead?.branch, preview.ownerId ?? null)
|
|
369
444
|
: undefined;
|
|
370
445
|
const persistOnce = () => options.db.$transaction(async (tx) => {
|
|
@@ -439,7 +514,10 @@ export async function dispatchRun(options) {
|
|
|
439
514
|
agentId: agent.id,
|
|
440
515
|
trigger: options.trigger ?? "manual",
|
|
441
516
|
executionManaged: true,
|
|
517
|
+
// Fixed for the run's life: the executor routes on this, never on the agent's current setting.
|
|
518
|
+
nativeExecutionMode: agent.kind === "native" ? agent.nativeExecutionMode : null,
|
|
442
519
|
parentRunId: options.parentRunId,
|
|
520
|
+
parentCallId: options.parentCallId,
|
|
443
521
|
grantedParentMemoryKeys: options.grantedParentMemoryKeys ?? [],
|
|
444
522
|
taskOverride: options.taskOverride,
|
|
445
523
|
triggeredById: options.triggeredById ?? null,
|
|
@@ -459,6 +537,13 @@ export async function dispatchRun(options) {
|
|
|
459
537
|
: {}),
|
|
460
538
|
},
|
|
461
539
|
});
|
|
540
|
+
if (refusal && codingBudget?.refusalDetail && refusal === codingBudget.refusal) {
|
|
541
|
+
const { limit, detail } = codingBudget.refusalDetail;
|
|
542
|
+
// Group and lead names are filled at read time.
|
|
543
|
+
await tx.runBudgetEvent.create({
|
|
544
|
+
data: { runId: run.id, kind: "refused", limit, details: { source: "dispatch", ...detail } },
|
|
545
|
+
});
|
|
546
|
+
}
|
|
462
547
|
if (options.afterPersist)
|
|
463
548
|
await options.afterPersist(tx, run);
|
|
464
549
|
const attributed = await attributeRun(tx, run.id, {
|
|
@@ -473,13 +558,19 @@ export async function dispatchRun(options) {
|
|
|
473
558
|
if (!request)
|
|
474
559
|
throw new Error(`Coding agent "${agent.id}" requires a task.`);
|
|
475
560
|
// The worker sees only the task text, so the agent's own instructions, and the
|
|
476
|
-
// services note, ride in it.
|
|
477
|
-
|
|
561
|
+
// services note, ride in it. Deferred, the task is stored raw and composed when the
|
|
562
|
+
// run starts; composing here only checks its size, so it throws exactly as today.
|
|
563
|
+
if (deferCoding)
|
|
564
|
+
composeCodingTask(agent.systemPrompt, request);
|
|
565
|
+
const task = deferCoding
|
|
566
|
+
? request
|
|
567
|
+
: composeCodingTask(agent.systemPrompt, request, servicesInstructionNote(services), knowledgeIndex ? knowledgeSection(knowledgeIndex) : undefined);
|
|
478
568
|
const budgetUsd = codingBudget.budgetUsd;
|
|
479
569
|
// Resolved once: before the transaction when the declaration was read from it.
|
|
480
570
|
const branch = declarationRead?.branch ?? (await resolveCodingBranch(tx, options, agent.codingProfile, agent.ownerId));
|
|
481
|
-
const { baseRef, continuationOf, rootCodingRunId } = branch;
|
|
571
|
+
const { baseRef, continuationOf, rootCodingRunId, mergeOrder: inheritedMergeOrder } = branch;
|
|
482
572
|
const headRef = branch.headRef ?? `wardby/run-${run.id}`;
|
|
573
|
+
const mergeOrder = resolveMergeOrder(options, inheritedMergeOrder);
|
|
483
574
|
const input = CodingTaskInputSchema.parse({
|
|
484
575
|
schemaVersion: CODING_PROTOCOL_VERSION,
|
|
485
576
|
runId: run.id,
|
|
@@ -499,16 +590,22 @@ export async function dispatchRun(options) {
|
|
|
499
590
|
toolchainVersion: agent.codingProfile.toolchainVersion,
|
|
500
591
|
workerImageRef: agent.codingProfile.workerImageRef,
|
|
501
592
|
};
|
|
502
|
-
|
|
593
|
+
// Deferred, both stay null until the starting process resolves them.
|
|
594
|
+
const workerImage = deferCoding ? null : options.executor.resolveCodingWorkerImage?.(imageSelector);
|
|
503
595
|
// Claude Code's commands run in its tool runner, so the toolchain picks that image too; fixed
|
|
504
596
|
// here with the worker image so the run keeps both however the deployment changes later.
|
|
505
|
-
const toolImage = options.executor.resolveCodingToolImage?.(imageSelector) ?? null;
|
|
597
|
+
const toolImage = deferCoding ? null : (options.executor.resolveCodingToolImage?.(imageSelector) ?? null);
|
|
598
|
+
const traced = agent.codingProfile.debugTraceUntil != null &&
|
|
599
|
+
now.getTime() < agent.codingProfile.debugTraceUntil.getTime();
|
|
600
|
+
const { packageAuditMode, packageAuditUntil } = agent.codingProfile;
|
|
506
601
|
await tx.codingRun.create({
|
|
507
602
|
data: {
|
|
508
603
|
runId: run.id,
|
|
604
|
+
budgetLimitedBy: codingBudget.limitedBy ?? null,
|
|
509
605
|
issueProvider: attributed?.provider ?? null,
|
|
510
606
|
issueKey: attributed?.key ?? null,
|
|
511
607
|
task: input.task,
|
|
608
|
+
request,
|
|
512
609
|
repository: input.repository,
|
|
513
610
|
baseRef: input.baseRef,
|
|
514
611
|
headRef: input.headRef,
|
|
@@ -522,12 +619,25 @@ export async function dispatchRun(options) {
|
|
|
522
619
|
workerImage,
|
|
523
620
|
toolImage,
|
|
524
621
|
budgetReservedUsd: budgetUsd,
|
|
622
|
+
budgetBaseUsd: codingBudget.baseBudgetUsd,
|
|
623
|
+
budgetLimitUsd: codingBudget.limitUsd,
|
|
525
624
|
rootCodingRunId,
|
|
625
|
+
mergeOrder,
|
|
526
626
|
workspaceDiskMb: agent.codingProfile.workspaceDiskMb,
|
|
527
627
|
maxTurns: agent.codingProfile.maxTurns,
|
|
628
|
+
maxOutputTokens: agent.codingProfile.maxOutputTokens,
|
|
629
|
+
repoSkills: agent.codingProfile.repoSkills,
|
|
630
|
+
claudeBareMode: agent.codingProfile.claudeBareMode,
|
|
631
|
+
dependencyCache: agent.codingProfile.dependencyCache,
|
|
632
|
+
sessionResume: agent.codingProfile.sessionResume,
|
|
528
633
|
// Fixed here so a run's tracing never changes mid-run.
|
|
529
|
-
debugTrace:
|
|
530
|
-
|
|
634
|
+
debugTrace: traced,
|
|
635
|
+
debugTraceMaxMb: traced ? agent.codingProfile.debugTraceMaxMb : null,
|
|
636
|
+
// Fixed here too: a run keeps the mode its dispatch saw for its
|
|
637
|
+
// whole life, however the window moves afterwards.
|
|
638
|
+
packageAuditMode: isPackageAuditActive(packageAuditMode, packageAuditUntil, now)
|
|
639
|
+
? packageAuditMode
|
|
640
|
+
: null,
|
|
531
641
|
services,
|
|
532
642
|
},
|
|
533
643
|
});
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* lives behind a seam (a future LangGraph engine swaps in here) and why
|
|
7
7
|
* the budget guardrail must stay above whichever engine is running.
|
|
8
8
|
*/
|
|
9
|
-
import { runStepInline } from "../providers/engine/types.js";
|
|
9
|
+
import { RunOwnershipLostError, runStepInline } from "../providers/engine/types.js";
|
|
10
10
|
import { applyPreflightSafetyMargin, checkTokenCalibration, estimateInputCost, isOverBudget } from "./budget.js";
|
|
11
11
|
import { logger } from "./logger.js";
|
|
12
12
|
import { UNTRUSTED_CONTEXT_TAG, UNTRUSTED_TOOL_OUTPUT_TAG, wrapUntrusted } from "./untrusted-content.js";
|
|
@@ -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;
|
|
@@ -197,11 +197,15 @@ export class NativeEngine {
|
|
|
197
197
|
engineLog.info({ turn, toolCallIds: batch.map((i) => toolCalls[i].id) }, "running tool calls concurrently");
|
|
198
198
|
const settled = await Promise.allSettled(batch.map((i) => runCall(i)));
|
|
199
199
|
const rejections = settled.filter((outcome) => outcome.status === "rejected");
|
|
200
|
-
|
|
201
|
-
|
|
200
|
+
// An ownership loss wins over an ordinary failure: this attempt no longer owns the run, so it
|
|
201
|
+
// must stop without a terminal write rather than fail the run for the attempt that does.
|
|
202
|
+
const thrown = rejections.find((r) => r.reason instanceof RunOwnershipLostError) ?? rejections[0];
|
|
203
|
+
for (const extra of rejections) {
|
|
204
|
+
if (extra !== thrown)
|
|
205
|
+
engineLog.warn({ turn, err: extra.reason }, "concurrent tool call also failed");
|
|
202
206
|
}
|
|
203
|
-
if (
|
|
204
|
-
throw
|
|
207
|
+
if (thrown)
|
|
208
|
+
throw thrown.reason;
|
|
205
209
|
settled.forEach((outcome, position) => {
|
|
206
210
|
results[batch[position]] = outcome.value;
|
|
207
211
|
});
|
|
@@ -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;
|