@wardby/cli 0.6.0 → 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/deploy/local/docker-compose.quickstart-coding.yml +13 -0
- package/dist/claude-coding-worker/driver.d.ts +21 -3
- package/dist/claude-coding-worker/driver.js +125 -17
- package/dist/claude-coding-worker/main.js +34 -6
- package/dist/claude-coding-worker/sdk.js +12 -1
- 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 +1 -0
- package/dist/cli.js +24 -10
- 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 +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 +235 -12
- 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 +8 -3
- package/dist/coding-worker/artifact.js +3 -1
- 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 +116 -38
- package/dist/coding-worker/errors.d.ts +1 -0
- package/dist/coding-worker/errors.js +32 -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 +11 -0
- package/dist/config/dependency-cache.d.ts +23 -0
- package/dist/config/dependency-cache.js +32 -0
- package/dist/config/providers.d.ts +12 -3
- package/dist/config/providers.js +55 -5
- 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/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 +42 -0
- package/dist/core/dispatch.js +131 -56
- package/dist/core/engine-native.js +1 -1
- 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 +18 -2
- package/dist/core/host-events.js +284 -24
- 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 +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 +54 -26
- 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 +2 -1
- package/dist/core/merge-order-check.js +8 -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 +27 -14
- 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 +2 -1
- 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 +99 -13
- 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 +80 -34
- package/dist/core/runner.js +439 -144
- 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 +10 -74
- 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/stop-run.d.ts +46 -0
- package/dist/core/stop-run.js +61 -0
- 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 +43 -8
- 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 +34 -3
- package/dist/generated/prisma/client.d.ts +34 -3
- package/dist/generated/prisma/commonInputTypes.d.ts +220 -60
- 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 +44 -0
- package/dist/generated/prisma/internal/class.js +4 -4
- package/dist/generated/prisma/internal/prismaNamespace.d.ts +428 -9
- package/dist/generated/prisma/internal/prismaNamespace.js +92 -1
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +95 -0
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +92 -1
- package/dist/generated/prisma/models/Agent.d.ts +106 -8
- package/dist/generated/prisma/models/AgentRepository.d.ts +42 -1
- package/dist/generated/prisma/models/CodingAgentProfile.d.ts +229 -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 +1637 -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 +39 -1
- package/dist/generated/prisma/models/NativeGatewaySession.d.ts +35 -1
- 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 +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.d.ts +4 -0
- package/dist/help-index.json +1320 -69
- package/dist/import/create.js +32 -3
- package/dist/import/neutral-schema.d.ts +50 -281
- package/dist/import/neutral-schema.js +5 -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/ownership.d.ts +7 -7
- 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/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 +58 -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 +198 -16
- 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.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 +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.js +34 -12
- 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/secrets.js +2 -2
- 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 +1 -1
- package/dist/mcp/tools/tools.js +25 -9
- 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/docker-launcher.d.ts +38 -2
- package/dist/native-worker/docker-launcher.js +65 -5
- package/dist/native-worker/gateway-server.d.ts +41 -3
- package/dist/native-worker/gateway-server.js +124 -27
- package/dist/native-worker/gateway.d.ts +27 -1
- package/dist/native-worker/gateway.js +70 -4
- package/dist/native-worker/http-server.d.ts +3 -1
- package/dist/native-worker/http-server.js +11 -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 +18 -2
- package/dist/native-worker/ledger.js +57 -4
- 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 +129 -577
- package/dist/native-worker/protocol.js +47 -1
- 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/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 +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 +47 -7
- package/dist/providers/executor/container.d.ts +361 -8
- package/dist/providers/executor/container.js +1136 -91
- 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/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 +27 -2
- 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 +2 -0
- package/dist/providers/jobs/kubernetes-isolation.js +17 -1
- package/dist/providers/jobs/kubernetes.d.ts +6 -1
- package/dist/providers/jobs/kubernetes.js +105 -16
- package/dist/providers/jobs/types.d.ts +33 -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 +134 -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 +214 -6
- package/dist/providers/vcs/github.js +447 -45
- 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 +14 -3
- package/dist/quickstart/coding-seed.js +213 -4
- 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/generated/zod.bundle.js +62 -1
- package/dist/sandbox/generated/zod3.bundle.js +5 -0
- package/dist/sandbox/host-functions.d.ts +1 -0
- package/dist/sandbox/host-functions.js +6 -11
- package/dist/sandbox/secret-broker.js +3 -4
- package/dist/sandbox/tool-capabilities.d.ts +10 -30
- 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/openapi.js +2 -4
- package/dist/wardby-bin.js +10 -0
- package/docs/agent-recipes.md +58 -20
- package/docs/code-review-agents.md +551 -41
- package/docs/coding-agent-setup.md +489 -7
- package/docs/coding-packages.md +1033 -90
- package/docs/coding-services.md +27 -12
- package/docs/coding-worker-byo-images.md +20 -0
- package/docs/coding-worker-isolation.md +105 -30
- package/docs/getting-started-gke.md +124 -137
- package/docs/getting-started-identity-provider.md +10 -1
- package/docs/getting-started.md +9 -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/native-sandbox.md +119 -23
- package/docs/observability.md +4 -0
- package/docs/security-deployment.md +33 -2
- package/docs/slack-notifications.md +35 -19
- package/docs/tool-secrets.md +42 -10
- package/docs/viewer-api.openapi.yml +1 -1
- package/help/admin-viewer.md +24 -2
- package/help/architecture-agent.md +11 -6
- package/help/build-worker-image.md +3 -1
- package/help/builder-agent.md +19 -6
- 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-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/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/merge-conflict.md +49 -0
- package/help/errors/native-sandbox-gateway-error.md +20 -0
- package/help/errors/native-sandbox-launch-abandoned.md +21 -0
- package/help/errors/native-sandbox-worker-exited.md +3 -2
- 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-in-value.md +69 -0
- package/help/errors/target-merge.md +40 -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/identity-and-access.md +2 -0
- 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/merge-order-check.md +5 -0
- package/help/native-capabilities.md +29 -1
- package/help/native-sandbox.md +15 -1
- package/help/operating-agents.md +5 -0
- package/help/package-audit-mode.md +91 -0
- package/help/related-pull-requests.md +10 -7
- package/help/resume-runs-locally.md +131 -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 +78 -7
- package/package.json +17 -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/schema.prisma +311 -97
- package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
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
|
|
@@ -269,30 +294,49 @@ const UNREADABLE_DECLARATION = {
|
|
|
269
294
|
};
|
|
270
295
|
/**
|
|
271
296
|
* The knowledge note's input (docs/knowledge.md): the repository's bundle
|
|
272
|
-
* 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
|
|
273
299
|
* declaration. Any failure means no note, never a failed dispatch.
|
|
274
300
|
*/
|
|
275
301
|
async function readKnowledgeIndex(options, profile, resolvedBranch, ownerId) {
|
|
276
|
-
|
|
277
|
-
if (!executor.readCodingRepositoryFile)
|
|
302
|
+
if (!options.executor.readCodingRepositoryFile)
|
|
278
303
|
return undefined;
|
|
304
|
+
let baseRef;
|
|
279
305
|
try {
|
|
280
306
|
// Resolved here, inside the try: a branch problem is the transaction's to report, not the note's.
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
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`,
|
|
286
330
|
maxBytes: KNOWLEDGE_INDEX_READ_MAX_BYTES,
|
|
287
331
|
});
|
|
288
|
-
return indexText ? { bundlePath
|
|
332
|
+
return indexText ? { bundlePath, indexText } : undefined;
|
|
289
333
|
}
|
|
290
334
|
catch (err) {
|
|
291
335
|
if (err instanceof Error && err.message in UNREADABLE_DECLARATION) {
|
|
292
|
-
dispatchLog.info({ repository
|
|
336
|
+
dispatchLog.info({ repository, reason: err.message }, "knowledge index unreadable; dispatching without it");
|
|
293
337
|
return undefined;
|
|
294
338
|
}
|
|
295
|
-
dispatchLog.warn({ err, repository
|
|
339
|
+
dispatchLog.warn({ err, repository }, "knowledge index read failed; dispatching without it");
|
|
296
340
|
return undefined;
|
|
297
341
|
}
|
|
298
342
|
}
|
|
@@ -304,56 +348,54 @@ async function readKnowledgeIndex(options, profile, resolvedBranch, ownerId) {
|
|
|
304
348
|
*/
|
|
305
349
|
async function readServiceDeclaration(options, profile, ownerId) {
|
|
306
350
|
const branch = await resolveCodingBranch(options.db, options, profile, ownerId);
|
|
307
|
-
|
|
308
|
-
|
|
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) {
|
|
309
360
|
if (!executor.readCodingServiceDeclaration)
|
|
310
|
-
return {
|
|
361
|
+
return { kind: "none" };
|
|
311
362
|
let text;
|
|
312
363
|
try {
|
|
313
|
-
text = await executor.readCodingServiceDeclaration({
|
|
314
|
-
repository: profile.repository,
|
|
315
|
-
baseRef: normalizeGitRef(branch.baseRef),
|
|
316
|
-
});
|
|
364
|
+
text = await executor.readCodingServiceDeclaration({ repository, baseRef: normalizeGitRef(baseRef) });
|
|
317
365
|
}
|
|
318
366
|
catch (err) {
|
|
319
367
|
const reason = UNREADABLE_DECLARATION[err instanceof Error ? err.message : ""];
|
|
320
368
|
if (reason) {
|
|
321
369
|
return {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
kind: "refused",
|
|
325
|
-
refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(reason)),
|
|
326
|
-
},
|
|
370
|
+
kind: "refused",
|
|
371
|
+
refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(reason)),
|
|
327
372
|
};
|
|
328
373
|
}
|
|
329
|
-
dispatchLog.warn({ err,
|
|
374
|
+
dispatchLog.warn({ err, repository }, "could not read the repository's service declaration");
|
|
330
375
|
return {
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
kind: "refused",
|
|
334
|
-
refusal: serviceRefusal("service_declaration_unavailable", DECLARATION_UNAVAILABLE_SENTENCE),
|
|
335
|
-
},
|
|
376
|
+
kind: "refused",
|
|
377
|
+
refusal: serviceRefusal("service_declaration_unavailable", DECLARATION_UNAVAILABLE_SENTENCE),
|
|
336
378
|
};
|
|
337
379
|
}
|
|
338
380
|
if (text === null)
|
|
339
|
-
return {
|
|
381
|
+
return { kind: "none" };
|
|
340
382
|
try {
|
|
341
|
-
return {
|
|
383
|
+
return { kind: "declared", services: parseServiceDeclaration(text) };
|
|
342
384
|
}
|
|
343
385
|
catch (err) {
|
|
344
386
|
if (!(err instanceof ServiceDeclarationError))
|
|
345
387
|
throw err;
|
|
346
388
|
return {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
kind: "refused",
|
|
350
|
-
refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(err.reason)),
|
|
351
|
-
},
|
|
389
|
+
kind: "refused",
|
|
390
|
+
refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(err.reason)),
|
|
352
391
|
};
|
|
353
392
|
}
|
|
354
393
|
}
|
|
355
|
-
/**
|
|
356
|
-
|
|
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) {
|
|
357
399
|
if (outcome.kind === "refused")
|
|
358
400
|
return { refusal: outcome.refusal };
|
|
359
401
|
if (outcome.kind === "none" || outcome.services.length === 0)
|
|
@@ -385,15 +427,19 @@ export async function dispatchRun(options) {
|
|
|
385
427
|
},
|
|
386
428
|
});
|
|
387
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;
|
|
388
433
|
// Only an agent allowed some service reads the repository's declaration; any
|
|
389
434
|
// other coding agent never calls the host for it and gets no services.
|
|
390
|
-
const declarationRead =
|
|
435
|
+
const declarationRead = !deferCoding &&
|
|
436
|
+
preview?.kind === "coding" &&
|
|
391
437
|
preview.codingProfile &&
|
|
392
438
|
parseAllowedServiceNames(preview.codingProfile.services).length > 0
|
|
393
439
|
? await readServiceDeclaration(options, preview.codingProfile, preview.ownerId ?? null)
|
|
394
440
|
: undefined;
|
|
395
441
|
// The knowledge note's input: the repository's bundle index at the run's base (a network call).
|
|
396
|
-
const knowledgeIndex = preview?.kind === "coding" && preview.codingProfile && options.executor.readCodingRepositoryFile
|
|
442
|
+
const knowledgeIndex = !deferCoding && preview?.kind === "coding" && preview.codingProfile && options.executor.readCodingRepositoryFile
|
|
397
443
|
? await readKnowledgeIndex(options, preview.codingProfile, declarationRead?.branch, preview.ownerId ?? null)
|
|
398
444
|
: undefined;
|
|
399
445
|
const persistOnce = () => options.db.$transaction(async (tx) => {
|
|
@@ -471,6 +517,7 @@ export async function dispatchRun(options) {
|
|
|
471
517
|
// Fixed for the run's life: the executor routes on this, never on the agent's current setting.
|
|
472
518
|
nativeExecutionMode: agent.kind === "native" ? agent.nativeExecutionMode : null,
|
|
473
519
|
parentRunId: options.parentRunId,
|
|
520
|
+
parentCallId: options.parentCallId,
|
|
474
521
|
grantedParentMemoryKeys: options.grantedParentMemoryKeys ?? [],
|
|
475
522
|
taskOverride: options.taskOverride,
|
|
476
523
|
triggeredById: options.triggeredById ?? null,
|
|
@@ -490,6 +537,13 @@ export async function dispatchRun(options) {
|
|
|
490
537
|
: {}),
|
|
491
538
|
},
|
|
492
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
|
+
}
|
|
493
547
|
if (options.afterPersist)
|
|
494
548
|
await options.afterPersist(tx, run);
|
|
495
549
|
const attributed = await attributeRun(tx, run.id, {
|
|
@@ -504,8 +558,13 @@ export async function dispatchRun(options) {
|
|
|
504
558
|
if (!request)
|
|
505
559
|
throw new Error(`Coding agent "${agent.id}" requires a task.`);
|
|
506
560
|
// The worker sees only the task text, so the agent's own instructions, and the
|
|
507
|
-
// services note, ride in it.
|
|
508
|
-
|
|
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);
|
|
509
568
|
const budgetUsd = codingBudget.budgetUsd;
|
|
510
569
|
// Resolved once: before the transaction when the declaration was read from it.
|
|
511
570
|
const branch = declarationRead?.branch ?? (await resolveCodingBranch(tx, options, agent.codingProfile, agent.ownerId));
|
|
@@ -531,16 +590,22 @@ export async function dispatchRun(options) {
|
|
|
531
590
|
toolchainVersion: agent.codingProfile.toolchainVersion,
|
|
532
591
|
workerImageRef: agent.codingProfile.workerImageRef,
|
|
533
592
|
};
|
|
534
|
-
|
|
593
|
+
// Deferred, both stay null until the starting process resolves them.
|
|
594
|
+
const workerImage = deferCoding ? null : options.executor.resolveCodingWorkerImage?.(imageSelector);
|
|
535
595
|
// Claude Code's commands run in its tool runner, so the toolchain picks that image too; fixed
|
|
536
596
|
// here with the worker image so the run keeps both however the deployment changes later.
|
|
537
|
-
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;
|
|
538
601
|
await tx.codingRun.create({
|
|
539
602
|
data: {
|
|
540
603
|
runId: run.id,
|
|
604
|
+
budgetLimitedBy: codingBudget.limitedBy ?? null,
|
|
541
605
|
issueProvider: attributed?.provider ?? null,
|
|
542
606
|
issueKey: attributed?.key ?? null,
|
|
543
607
|
task: input.task,
|
|
608
|
+
request,
|
|
544
609
|
repository: input.repository,
|
|
545
610
|
baseRef: input.baseRef,
|
|
546
611
|
headRef: input.headRef,
|
|
@@ -554,15 +619,25 @@ export async function dispatchRun(options) {
|
|
|
554
619
|
workerImage,
|
|
555
620
|
toolImage,
|
|
556
621
|
budgetReservedUsd: budgetUsd,
|
|
622
|
+
budgetBaseUsd: codingBudget.baseBudgetUsd,
|
|
623
|
+
budgetLimitUsd: codingBudget.limitUsd,
|
|
557
624
|
rootCodingRunId,
|
|
558
625
|
mergeOrder,
|
|
559
626
|
workspaceDiskMb: agent.codingProfile.workspaceDiskMb,
|
|
560
627
|
maxTurns: agent.codingProfile.maxTurns,
|
|
628
|
+
maxOutputTokens: agent.codingProfile.maxOutputTokens,
|
|
561
629
|
repoSkills: agent.codingProfile.repoSkills,
|
|
562
630
|
claudeBareMode: agent.codingProfile.claudeBareMode,
|
|
631
|
+
dependencyCache: agent.codingProfile.dependencyCache,
|
|
632
|
+
sessionResume: agent.codingProfile.sessionResume,
|
|
563
633
|
// Fixed here so a run's tracing never changes mid-run.
|
|
564
|
-
debugTrace:
|
|
565
|
-
|
|
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,
|
|
566
641
|
services,
|
|
567
642
|
},
|
|
568
643
|
});
|
|
@@ -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,168 @@
|
|
|
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_provider_quota",
|
|
77
|
+
"coding_provider_rate_limited",
|
|
78
|
+
"coding_provider_unavailable",
|
|
79
|
+
"coding_provider_rejected",
|
|
80
|
+
"coding_ambiguous_provisioning",
|
|
81
|
+
"coding_artifact_duplicate_key",
|
|
82
|
+
"coding_artifact_invalid_json",
|
|
83
|
+
"coding_artifact_nesting_limit",
|
|
84
|
+
"coding_artifact_path_invalid",
|
|
85
|
+
"coding_artifact_root_invalid",
|
|
86
|
+
"coding_artifact_size_limit",
|
|
87
|
+
"coding_budget_exhausted",
|
|
88
|
+
"coding_capability_exists",
|
|
89
|
+
"coding_capability_unavailable",
|
|
90
|
+
"coding_credential_ref_invalid",
|
|
91
|
+
"coding_credential_reference_invalid",
|
|
92
|
+
"coding_credential_unavailable",
|
|
93
|
+
"coding_dispatch_unavailable",
|
|
94
|
+
"coding_head_ref_invalid",
|
|
95
|
+
"coding_input_invalid_file",
|
|
96
|
+
"coding_job_handle_conflict",
|
|
97
|
+
"coding_job_handle_mismatch",
|
|
98
|
+
"coding_job_status_unavailable",
|
|
99
|
+
"coding_output_invalid",
|
|
100
|
+
"coding_output_missing",
|
|
101
|
+
"coding_output_run_mismatch",
|
|
102
|
+
"coding_output_size_limit",
|
|
103
|
+
"coding_provider_not_configured",
|
|
104
|
+
"coding_provider_unsupported",
|
|
105
|
+
"coding_queue_timeout",
|
|
106
|
+
"coding_recovery_incomplete",
|
|
107
|
+
"coding_recovery_unavailable",
|
|
108
|
+
"coding_resource_limits_invalid",
|
|
109
|
+
"coding_result_missing",
|
|
110
|
+
"coding_result_run_mismatch",
|
|
111
|
+
"coding_run_budget_invalid",
|
|
112
|
+
"coding_run_no_longer_active",
|
|
113
|
+
"coding_run_not_active",
|
|
114
|
+
"coding_run_not_found",
|
|
115
|
+
"coding_run_ownership_invalid",
|
|
116
|
+
"coding_run_pricing_mismatch",
|
|
117
|
+
"coding_run_status_invalid",
|
|
118
|
+
"coding_run_terminal_conflict",
|
|
119
|
+
"coding_service_catalog_invalid",
|
|
120
|
+
"coding_service_unready",
|
|
121
|
+
"coding_services_unsupported",
|
|
122
|
+
"coding_services_unsupported_launcher",
|
|
123
|
+
"coding_stream_agent_exited",
|
|
124
|
+
"coding_stream_failed",
|
|
125
|
+
"coding_stream_proxy_denied",
|
|
126
|
+
"coding_stream_proxy_unreachable",
|
|
127
|
+
"coding_stream_quota_exceeded",
|
|
128
|
+
"coding_stream_rate_limited",
|
|
129
|
+
"coding_stream_timeout",
|
|
130
|
+
"coding_stream_upstream_error",
|
|
131
|
+
"coding_toolchain_unsupported",
|
|
132
|
+
"coding_turn_failed",
|
|
133
|
+
"coding_turn_limit",
|
|
134
|
+
"coding_workspace_disk_exceeds_limit",
|
|
135
|
+
"coding_workspace_lost",
|
|
136
|
+
"model_unavailable",
|
|
137
|
+
"model_not_allowed",
|
|
138
|
+
"executor_run_not_found",
|
|
139
|
+
"run_not_drivable",
|
|
140
|
+
"ownership_lost",
|
|
141
|
+
"step_replay_mismatch",
|
|
142
|
+
"worker_error",
|
|
143
|
+
"worker_tool_runner_unreachable",
|
|
144
|
+
"sandbox_dispatch_unavailable",
|
|
145
|
+
"native_sandbox_capacity",
|
|
146
|
+
"native_sandbox_deadline_exceeded",
|
|
147
|
+
"native_sandbox_docker_failed",
|
|
148
|
+
"native_sandbox_gateway_error",
|
|
149
|
+
"native_sandbox_gateway_unavailable",
|
|
150
|
+
"native_sandbox_image_not_pinned",
|
|
151
|
+
"native_sandbox_invalid_run_id",
|
|
152
|
+
"native_sandbox_invalid_warm_token",
|
|
153
|
+
"native_sandbox_isolation_mismatch",
|
|
154
|
+
"native_sandbox_launch_abandoned",
|
|
155
|
+
"native_sandbox_network_unenforced",
|
|
156
|
+
"native_sandbox_platform_unsupported",
|
|
157
|
+
"native_sandbox_recovery_unavailable",
|
|
158
|
+
"native_sandbox_requires_catalog",
|
|
159
|
+
"native_sandbox_warm_delivery_failed",
|
|
160
|
+
"native_sandbox_worker_exited",
|
|
161
|
+
"native_sandbox_worker_lost",
|
|
162
|
+
"native_sandbox_worker_unready",
|
|
163
|
+
]);
|
|
164
|
+
/** The leading code of an arbitrary error or message, only when it is declared in `allowed`. */
|
|
165
|
+
export function declaredCodeOf(err, allowed = GATEWAY_CAUSE_CODES) {
|
|
166
|
+
const code = causeCodeOf(err);
|
|
167
|
+
return code && allowed.has(code) ? code : undefined;
|
|
168
|
+
}
|
package/dist/core/grants.d.ts
CHANGED
|
@@ -19,14 +19,14 @@ export type ResourceType = keyof typeof LEVELS;
|
|
|
19
19
|
export type Level<T extends ResourceType = ResourceType> = (typeof LEVELS)[T][number];
|
|
20
20
|
export type Access<T extends ResourceType = ResourceType> = "none" | Level<T> | "owner";
|
|
21
21
|
/**
|
|
22
|
-
* Highest level an "everyone" grant may carry
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
22
|
+
* Highest level an "everyone" grant may carry. Agents may be public-write
|
|
23
|
+
* (anyone signed in can edit them) but only while they hold none of their
|
|
24
|
+
* owner's bindings: see agentOwnerBindings and the guard in grant_access and
|
|
25
|
+
* the binding tools. Otherwise anyone could rewrite the prompt of an agent
|
|
26
|
+
* that holds its owner's secrets.
|
|
27
27
|
*/
|
|
28
28
|
export declare const EVERYONE_MAX: {
|
|
29
|
-
readonly agent: "
|
|
29
|
+
readonly agent: "write";
|
|
30
30
|
readonly tool: "use";
|
|
31
31
|
readonly budget_group: "use";
|
|
32
32
|
};
|
|
@@ -84,3 +84,16 @@ export declare function everyoneGrantData(type: ResourceType, resourceId: string
|
|
|
84
84
|
};
|
|
85
85
|
/** Every resource delete path calls this in the same transaction (no FK on resourceId). */
|
|
86
86
|
export declare function deleteGrantsFor(db: GrantDb, type: ResourceType, resourceId: string): Promise<number>;
|
|
87
|
+
type BindingDb = Pick<PrismaClient, "agentSecret" | "agentDatastore" | "agentRepository" | "agentSubAgent" | "agentTool" | "codingAgentProfile">;
|
|
88
|
+
/**
|
|
89
|
+
* The owner-only bindings an agent holds, by kind (empty = none). An agent
|
|
90
|
+
* may be public-write only while this is empty; binding a secret, datastore,
|
|
91
|
+
* repository, sub-agent or owner-granted tool capability to a public-write
|
|
92
|
+
* agent is refused for the same reason. A coding profile counts: its
|
|
93
|
+
* repository is the owner's GitHub access, and the prompt is part of every
|
|
94
|
+
* coding task.
|
|
95
|
+
*/
|
|
96
|
+
export declare function agentOwnerBindings(db: BindingDb, agentId: string): Promise<string[]>;
|
|
97
|
+
/** True when everyone holds write on the agent. */
|
|
98
|
+
export declare function isPublicWritable(db: GrantDb, agentId: string): Promise<boolean>;
|
|
99
|
+
export {};
|