@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/prisma/schema.prisma
CHANGED
|
@@ -25,6 +25,8 @@ model Agent {
|
|
|
25
25
|
systemPrompt String
|
|
26
26
|
model String
|
|
27
27
|
budgetUsd Decimal @db.Decimal(10, 4)
|
|
28
|
+
/// Percent above budgetUsd a run may spend: each coding run's limit, or (on a lead agent) its run tree's ceiling for coding sub-agents; native model calls are unaffected; group caps still apply.
|
|
29
|
+
allowedOverrunPercent Int @default(0)
|
|
28
30
|
createdAt DateTime @default(now())
|
|
29
31
|
updatedAt DateTime @updatedAt
|
|
30
32
|
runs Run[]
|
|
@@ -39,25 +41,26 @@ model Agent {
|
|
|
39
41
|
lastScheduledAt DateTime?
|
|
40
42
|
|
|
41
43
|
// Phase 3: tools + multi-turn loop.
|
|
42
|
-
tools
|
|
43
|
-
maxTurns
|
|
44
|
+
tools AgentTool[]
|
|
45
|
+
maxTurns Int @default(10)
|
|
44
46
|
/// Sub-agent delegations one run may make (delegate_to_*), each to a different sub-agent. 1 = route to exactly one.
|
|
45
|
-
maxDelegationsPerRun Int
|
|
47
|
+
maxDelegationsPerRun Int @default(1)
|
|
46
48
|
/// Native leads: the delegate_to_* calls of one model turn run at the same time. False = one after another.
|
|
47
|
-
parallelDelegations
|
|
49
|
+
parallelDelegations Boolean @default(false)
|
|
48
50
|
|
|
49
51
|
// Phase 4: ownership. Null = owner-less, a transition state only: access
|
|
50
52
|
// then comes from ResourceGrant rows alone (the migration gives everyone
|
|
51
53
|
// execute), and `wardby grants adopt-public` assigns an owner. See
|
|
52
54
|
// ResourceGrant.
|
|
53
|
-
ownerId
|
|
54
|
-
owner
|
|
55
|
-
secrets
|
|
56
|
-
datastores
|
|
57
|
-
webhooks
|
|
58
|
-
repositories
|
|
59
|
-
deferredReviews
|
|
60
|
-
issueProjects
|
|
55
|
+
ownerId String?
|
|
56
|
+
owner Principal? @relation(fields: [ownerId], references: [id])
|
|
57
|
+
secrets AgentSecret[]
|
|
58
|
+
datastores AgentDatastore[]
|
|
59
|
+
webhooks Webhook[]
|
|
60
|
+
repositories AgentRepository[]
|
|
61
|
+
deferredReviews DeferredReview[]
|
|
62
|
+
issueProjects AgentIssueProject[]
|
|
63
|
+
notificationChannels NotificationChannel[]
|
|
61
64
|
|
|
62
65
|
/// Self-defects opt-in: the Jira project and issue type wardby files the agent's own failures into. Both or neither.
|
|
63
66
|
defectProjectKey String?
|
|
@@ -78,6 +81,12 @@ model Agent {
|
|
|
78
81
|
/// Null = the provider's default.
|
|
79
82
|
effort String?
|
|
80
83
|
|
|
84
|
+
/// Native agents only: where their runs execute. control-plane (default) =
|
|
85
|
+
/// in this server process (in-process or DBOS); sandbox = an isolated,
|
|
86
|
+
/// single-use worker container/pod. Each Run snapshots this at creation
|
|
87
|
+
/// (Run.nativeExecutionMode), so a change reaches only later runs.
|
|
88
|
+
nativeExecutionMode NativeExecutionMode @default(control_plane)
|
|
89
|
+
|
|
81
90
|
/// Un-phased: sub-agent composition edges (see AgentSubAgent below). An
|
|
82
91
|
/// agent can be a parent (has children it can delegate to) and/or a
|
|
83
92
|
/// child (is delegated to by others) independently.
|
|
@@ -134,6 +143,12 @@ enum AgentKind {
|
|
|
134
143
|
coding
|
|
135
144
|
}
|
|
136
145
|
|
|
146
|
+
/// Where a native agent's runs execute (Agent.nativeExecutionMode).
|
|
147
|
+
enum NativeExecutionMode {
|
|
148
|
+
control_plane @map("control-plane")
|
|
149
|
+
sandbox
|
|
150
|
+
}
|
|
151
|
+
|
|
137
152
|
enum RunStatus {
|
|
138
153
|
pending
|
|
139
154
|
running
|
|
@@ -312,51 +327,72 @@ enum RunTrigger {
|
|
|
312
327
|
}
|
|
313
328
|
|
|
314
329
|
model Run {
|
|
315
|
-
id
|
|
316
|
-
agent
|
|
317
|
-
agentId
|
|
318
|
-
status
|
|
319
|
-
trigger
|
|
320
|
-
tokensIn
|
|
321
|
-
tokensOut
|
|
322
|
-
costUsd
|
|
323
|
-
error
|
|
324
|
-
startedAt
|
|
325
|
-
finishedAt
|
|
330
|
+
id String @id @default(cuid())
|
|
331
|
+
agent Agent @relation(fields: [agentId], references: [id])
|
|
332
|
+
agentId String
|
|
333
|
+
status RunStatus @default(pending)
|
|
334
|
+
trigger RunTrigger @default(manual)
|
|
335
|
+
tokensIn Int @default(0)
|
|
336
|
+
tokensOut Int @default(0)
|
|
337
|
+
costUsd Decimal @default(0) @db.Decimal(10, 6)
|
|
338
|
+
error String?
|
|
339
|
+
startedAt DateTime @default(now())
|
|
340
|
+
finishedAt DateTime?
|
|
326
341
|
/// Phase 2: beaten by the executor while running; a stale value past
|
|
327
342
|
/// HEARTBEAT_TIMEOUT is how the reconciler finds an orphaned run.
|
|
328
|
-
heartbeatAt
|
|
343
|
+
heartbeatAt DateTime?
|
|
329
344
|
/// Phase 4: EngineResult.finalText, persisted so a Task (MCP) or later
|
|
330
345
|
/// inspection can read a completed run's answer. Previously only ever
|
|
331
346
|
/// streamed live via onText and dropped — no durable place to read it
|
|
332
347
|
/// from until this field existed.
|
|
333
|
-
finalText
|
|
348
|
+
finalText String?
|
|
334
349
|
/// Phase 4: EngineResult.turns, persisted for the same reason as
|
|
335
350
|
/// finalText — MCP's list_runs/get_run need it and it was previously
|
|
336
351
|
/// dropped after the engine returned.
|
|
337
|
-
turns
|
|
352
|
+
turns Int @default(0)
|
|
338
353
|
/// The run's model catalog entry, recorded when it started (native: the
|
|
339
354
|
/// runner's load step; coding: dispatch). The run is billed at these rates
|
|
340
355
|
/// for its whole life, resumes included. Null on runs from before the
|
|
341
356
|
/// model catalog.
|
|
342
|
-
pricingVersion
|
|
343
|
-
pricingSnapshot
|
|
357
|
+
pricingVersion String?
|
|
358
|
+
pricingSnapshot Json?
|
|
344
359
|
/// Detached executors are recovered by handle rather than inferred from trigger.
|
|
345
|
-
executionManaged
|
|
360
|
+
executionManaged Boolean @default(false)
|
|
346
361
|
/// Phase 6: which durable executor backend holds this run, if any
|
|
347
362
|
/// ("dbos" = a DBOS workflow whose id equals this run's id). Null for
|
|
348
363
|
/// in-process runs. The reconciler consults the backend before declaring a
|
|
349
364
|
/// stale run lost, and can adopt one orphaned by a dead instance.
|
|
350
|
-
executionBackend
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
365
|
+
executionBackend String?
|
|
366
|
+
/// The DBOS workflow that currently holds this run, when it is not the run id: set when
|
|
367
|
+
/// recover() forks the run's workflow under a new application version. Null = the run id.
|
|
368
|
+
executionWorkflowId String?
|
|
369
|
+
/// The agent's nativeExecutionMode when this run was created, fixed for the
|
|
370
|
+
/// run's life and what the executor routes on. Null for coding runs and for
|
|
371
|
+
/// native runs from before the field existed, which run in the control plane.
|
|
372
|
+
nativeExecutionMode NativeExecutionMode?
|
|
373
|
+
codingRun CodingRun?
|
|
374
|
+
transcript RunTranscript?
|
|
375
|
+
hostCheck RunHostCheck?
|
|
376
|
+
hostStatus RunHostStatus?
|
|
377
|
+
issueStatus RunIssueStatus?
|
|
378
|
+
attribution RunAttribution?
|
|
379
|
+
modelUsage RunModelUsage[]
|
|
380
|
+
serviceStatuses CodingRunServiceStatus[]
|
|
381
|
+
budgetEvents RunBudgetEvent[]
|
|
358
382
|
/// A manual review of a local branch: this run is the review run dispatched for it.
|
|
359
|
-
localPullRequest
|
|
383
|
+
localPullRequest LocalPullRequest?
|
|
384
|
+
/// A sandbox-mode native run's gateway session (native sandbox phase 3).
|
|
385
|
+
nativeGatewaySession NativeGatewaySession?
|
|
386
|
+
/// The warm pool worker this sandbox-mode run claimed (native sandbox phase 6).
|
|
387
|
+
nativeWarmWorker NativeWarmWorker?
|
|
388
|
+
/// Set when a process that may not start runs itself (the native sandbox
|
|
389
|
+
/// gateway, which holds no executor) dispatched this run: the scheduler
|
|
390
|
+
/// leader starts it through the server's executor and clears this.
|
|
391
|
+
startDeferredAt DateTime?
|
|
392
|
+
/// Likewise a stop that process asked for: the scheduler leader stops the
|
|
393
|
+
/// run through the server's executor and clears this.
|
|
394
|
+
stopRequestedAt DateTime?
|
|
395
|
+
stopRequestReason String?
|
|
360
396
|
|
|
361
397
|
/// Un-phased: sub-agent dispatch (see AgentSubAgent). Null for a
|
|
362
398
|
/// top-level run; set when this run was created by a parent run's
|
|
@@ -367,6 +403,9 @@ model Run {
|
|
|
367
403
|
parentRunId String?
|
|
368
404
|
parentRun Run? @relation("RunTree", fields: [parentRunId], references: [id])
|
|
369
405
|
childRuns Run[] @relation("RunTree")
|
|
406
|
+
/// The parent's delegation call (the model's tool-call id) that created this child, so a
|
|
407
|
+
/// re-executed delegate step finds the same child instead of starting another.
|
|
408
|
+
parentCallId String?
|
|
370
409
|
/// Ephemeral, per-dispatch grant: exactly the parent-memory keys this
|
|
371
410
|
/// one child run was handed permission to read via parent_memory_get.
|
|
372
411
|
/// Never a standing allowlist — re-granted on every dispatch call.
|
|
@@ -392,39 +431,62 @@ model Run {
|
|
|
392
431
|
@@index([startedAt])
|
|
393
432
|
@@index([status])
|
|
394
433
|
@@index([parentRunId])
|
|
434
|
+
@@index([startDeferredAt])
|
|
435
|
+
@@index([stopRequestedAt])
|
|
436
|
+
@@unique([parentRunId, parentCallId])
|
|
395
437
|
}
|
|
396
438
|
|
|
397
439
|
/// Phase 5: owner-configured coding behavior. Runtime credentials and opaque
|
|
398
440
|
/// launcher handles never live on the reusable profile.
|
|
399
441
|
model CodingAgentProfile {
|
|
400
|
-
agentId String
|
|
401
|
-
agent Agent
|
|
402
|
-
provider String
|
|
442
|
+
agentId String @id
|
|
443
|
+
agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
|
|
444
|
+
provider String @default("codex")
|
|
403
445
|
repository String
|
|
404
|
-
baseRef String
|
|
446
|
+
baseRef String @default("main")
|
|
405
447
|
defaultTask String?
|
|
406
|
-
allowWebhookTaskOverride Boolean
|
|
407
|
-
timeoutSec Int
|
|
448
|
+
allowWebhookTaskOverride Boolean @default(false)
|
|
449
|
+
timeoutSec Int @default(1800)
|
|
408
450
|
/// Claude Code runs only: the most agent turns a run may take. Null = the worker default (200).
|
|
409
451
|
maxTurns Int?
|
|
452
|
+
/// Claude Code runs only: the most output tokens per model reply (1024-128000). Null = the worker default (32000).
|
|
453
|
+
maxOutputTokens Int?
|
|
410
454
|
/// Unused; dropped after rollout (see the package-registry plan, Task 14).
|
|
411
|
-
allowedEgress Json
|
|
455
|
+
allowedEgress Json @default("[]")
|
|
412
456
|
protectedPaths Json
|
|
413
|
-
collectExclude Json
|
|
414
|
-
toolchain String
|
|
457
|
+
collectExclude Json @default("[]")
|
|
458
|
+
toolchain String @default("node")
|
|
415
459
|
toolchainVersion String?
|
|
416
460
|
workerImageRef String?
|
|
417
461
|
/// Per-agent workspace size in MiB; null = CODING_DISK_MB.
|
|
418
462
|
workspaceDiskMb Int?
|
|
419
|
-
packageAllowlist Json
|
|
420
|
-
packagePolicy Json
|
|
463
|
+
packageAllowlist Json @default("{}")
|
|
464
|
+
packagePolicy Json @default("{}")
|
|
421
465
|
/// Admin-requested debug trace: while now < debugTraceUntil, every coding
|
|
422
466
|
/// run of this agent is dispatched with CodingRun.debugTrace set. Null = off.
|
|
423
467
|
debugTraceUntil DateTime?
|
|
468
|
+
/// Admin-set cap on one traced run's trace output, in MiB; null = the worker default (2).
|
|
469
|
+
debugTraceMaxMb Int?
|
|
424
470
|
/// Coding-run services (docs/coding-services.md): the catalog names
|
|
425
471
|
/// (CodingService.name) this agent's runs may start, any version the catalog
|
|
426
472
|
/// has. Empty = none. Owner-set through update_agent.
|
|
427
|
-
services Json
|
|
473
|
+
services Json @default("[]")
|
|
474
|
+
/// Load the repository's agent skills into coding runs (Codex: .agents/skills, .codex/skills;
|
|
475
|
+
/// Claude Code: .claude/skills). Repo instructions (AGENTS.md / CLAUDE.md) load regardless.
|
|
476
|
+
repoSkills Boolean @default(true)
|
|
477
|
+
/// Claude Code runs only: keep Claude Code's bare mode (CLAUDE_CODE_SIMPLE=1); wardby injects
|
|
478
|
+
/// repo instructions and the skill list into the system prompt. False = Claude Code's native loading.
|
|
479
|
+
claudeBareMode Boolean @default(true)
|
|
480
|
+
/// Restore node_modules from a cached snapshot (written only by trusted wardby code before the
|
|
481
|
+
/// agent starts) instead of a full install. Owner-set; off by default.
|
|
482
|
+
dependencyCache Boolean @default(false)
|
|
483
|
+
/// Keep each Claude Code run's session transcript so it can be resumed in a local CLI
|
|
484
|
+
/// (docs/coding-agent-setup.md#resume-a-run-locally). Owner-set; off by default.
|
|
485
|
+
sessionResume Boolean @default(false)
|
|
486
|
+
/// Owner-set package audit mode (docs/coding-packages.md#package-audit-mode); active while now < packageAuditUntil.
|
|
487
|
+
packageAuditMode PackageAuditMode?
|
|
488
|
+
/// End of the audit window; null = off.
|
|
489
|
+
packageAuditUntil DateTime?
|
|
428
490
|
|
|
429
491
|
/// How `repository` was authorized for this agent (see AgentRepository.authorizedVia):
|
|
430
492
|
/// "host_permission", "admin", or "grandfathered". Null = never authorized; runs are refused.
|
|
@@ -437,58 +499,103 @@ model CodingAgentProfile {
|
|
|
437
499
|
/// Phase 5: immutable dispatch inputs plus opaque execution/result state for
|
|
438
500
|
/// one coding run. Policy is copied from the profile before work starts.
|
|
439
501
|
model CodingRun {
|
|
440
|
-
runId
|
|
441
|
-
run
|
|
442
|
-
task
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
502
|
+
runId String @id
|
|
503
|
+
run Run @relation(fields: [runId], references: [id], onDelete: Cascade)
|
|
504
|
+
task String
|
|
505
|
+
/// The run's own request (the trigger's task or the agent's default task), without the agent's standing instructions. Null on older runs.
|
|
506
|
+
request String? @db.Text
|
|
507
|
+
repository String
|
|
508
|
+
baseRef String
|
|
509
|
+
headRef String
|
|
510
|
+
provider String
|
|
511
|
+
model String
|
|
512
|
+
timeoutSec Int
|
|
449
513
|
/// Unused; dropped after rollout (see the package-registry plan, Task 14).
|
|
450
|
-
allowedEgress
|
|
451
|
-
protectedPaths
|
|
452
|
-
collectExclude
|
|
453
|
-
jobBackend
|
|
454
|
-
jobHandle
|
|
455
|
-
result
|
|
456
|
-
resultSchema
|
|
514
|
+
allowedEgress Json @default("[]")
|
|
515
|
+
protectedPaths Json
|
|
516
|
+
collectExclude Json @default("[]")
|
|
517
|
+
jobBackend String?
|
|
518
|
+
jobHandle String?
|
|
519
|
+
result Json?
|
|
520
|
+
resultSchema Int @default(1)
|
|
457
521
|
/// Sanitized terminal classification and an opaque log correlation reference.
|
|
458
522
|
/// Neither field may contain task, repository, environment, or credential data.
|
|
459
|
-
failureCategory
|
|
460
|
-
diagnosticId
|
|
461
|
-
workerImage
|
|
523
|
+
failureCategory String?
|
|
524
|
+
diagnosticId String?
|
|
525
|
+
workerImage String?
|
|
462
526
|
/// Claude Code's tool-runner image, resolved from the agent's toolchain at dispatch; null for Codex runs.
|
|
463
|
-
toolImage
|
|
464
|
-
|
|
527
|
+
toolImage String?
|
|
528
|
+
/// What the run may spend now: its base, plus every overrun top-up granted so
|
|
529
|
+
/// far (on runs with budgetLimitUsd). Budget groups and run trees hold it.
|
|
530
|
+
budgetReservedUsd Decimal @db.Decimal(10, 6)
|
|
531
|
+
/// The budget before the agent's allowed overrun. Null on older runs.
|
|
532
|
+
budgetBaseUsd Decimal? @db.Decimal(10, 6)
|
|
533
|
+
/// The most the run may spend: its base budget raised by the agent's allowed
|
|
534
|
+
/// overrun, never reserved up front; top-ups raise budgetReservedUsd toward it
|
|
535
|
+
/// only from room its group and run tree have left. Null = no top-ups (older
|
|
536
|
+
/// runs, or no allowed overrun): budgetReservedUsd is the limit.
|
|
537
|
+
budgetLimitUsd Decimal? @db.Decimal(10, 6)
|
|
538
|
+
/// What set budgetReservedUsd below the agent's own budget at dispatch:
|
|
539
|
+
/// run-tree, day, week or month. Null = the agent's own budget.
|
|
540
|
+
budgetLimitedBy String?
|
|
465
541
|
/// Phase 12 concurrency queue: set when start() found every coding slot
|
|
466
542
|
/// taken (CODING_MAX_CONCURRENT), cleared when the run claims a slot. A
|
|
467
543
|
/// pending run with queuedAt set is waiting, not orphaned.
|
|
468
|
-
queuedAt
|
|
544
|
+
queuedAt DateTime?
|
|
469
545
|
/// Per-agent workspace size in MiB; null = CODING_DISK_MB.
|
|
470
|
-
workspaceDiskMb
|
|
471
|
-
packageAllowlist
|
|
472
|
-
packagePolicy
|
|
546
|
+
workspaceDiskMb Int?
|
|
547
|
+
packageAllowlist Json @default("{}")
|
|
548
|
+
packagePolicy Json @default("{}")
|
|
473
549
|
/// Fixed at dispatch from the profile's debugTraceUntil: the worker writes a
|
|
474
550
|
/// full stream trace to its own pod log (never to the database).
|
|
475
|
-
debugTrace
|
|
551
|
+
debugTrace Boolean @default(false)
|
|
552
|
+
/// Fixed at dispatch from the profile's debugTraceMaxMb, only on a traced run. Null = the worker default.
|
|
553
|
+
debugTraceMaxMb Int?
|
|
476
554
|
/// Fixed at dispatch from the profile's maxTurns: the Claude Code worker's turn limit. Null = the worker default.
|
|
477
|
-
maxTurns
|
|
555
|
+
maxTurns Int?
|
|
556
|
+
/// Fixed at dispatch from the profile's maxOutputTokens: Claude Code's output tokens per reply. Null = the worker default.
|
|
557
|
+
maxOutputTokens Int?
|
|
558
|
+
/// Fixed at dispatch from the profile's repoSkills.
|
|
559
|
+
repoSkills Boolean @default(true)
|
|
560
|
+
/// Fixed at dispatch from the profile's claudeBareMode.
|
|
561
|
+
claudeBareMode Boolean @default(true)
|
|
478
562
|
/// Coding-run services resolved at dispatch from the base branch's
|
|
479
563
|
/// .wardby/services.yaml: one snapshot per service (the catalog entry minus
|
|
480
564
|
/// kind), fixed for the run's lifetime. Empty = none.
|
|
481
|
-
services
|
|
565
|
+
services Json @default("[]")
|
|
482
566
|
/// The originating tracker issue ("jira" + key), set by the control plane from the run tree, never from model output.
|
|
483
|
-
issueProvider
|
|
484
|
-
issueKey
|
|
567
|
+
issueProvider String?
|
|
568
|
+
issueKey String?
|
|
485
569
|
/// The branch a run pushed to a local repository (no pull request exists); null otherwise.
|
|
486
|
-
resultBranch
|
|
570
|
+
resultBranch String?
|
|
487
571
|
/// The commit the run started from (the base ref's tip when the workspace was prepared).
|
|
488
|
-
baseSha
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
572
|
+
baseSha String?
|
|
573
|
+
/// Step in the request's merge order set by the delegating agent (1 = first); null = no order.
|
|
574
|
+
mergeOrder Int?
|
|
575
|
+
/// When Wardby marked this run's pull request ready for review (at most once;
|
|
576
|
+
/// a person moving it back to draft is final). Only set on a root coding run.
|
|
577
|
+
markedReadyAt DateTime?
|
|
578
|
+
/// Root coding run only: SHA-256 (hex) of the pull request description Wardby last wrote,
|
|
579
|
+
/// normalized (CRLF→LF, Related pull requests section removed, blank lines collapsed, trimmed).
|
|
580
|
+
/// Null = never recorded (pull requests opened before this column, or a lost first write).
|
|
581
|
+
prDescriptionSha256 String?
|
|
582
|
+
/// Root coding run only: the coding run whose final message is that description's agent-written part.
|
|
583
|
+
prDescriptionRunId String?
|
|
584
|
+
/// This run's description update: written | replaced | refreshed:<reason> | unchanged |
|
|
585
|
+
/// edited_by_hand | skipped:<reason>. Null = not attempted.
|
|
586
|
+
prDescriptionOutcome String?
|
|
587
|
+
/// Fixed at dispatch from the profile's dependencyCache.
|
|
588
|
+
dependencyCache Boolean @default(false)
|
|
589
|
+
/// Fixed at dispatch from the profile's sessionResume.
|
|
590
|
+
sessionResume Boolean @default(false)
|
|
591
|
+
/// What the run's dependency cache did, written by the control plane when it collects the run:
|
|
592
|
+
/// { result, key?, sizeBytes?, restoreMs?, installMs?, reason? }. Null = not used or not reported.
|
|
593
|
+
dependencyCacheResult Json?
|
|
594
|
+
/// Fixed at dispatch: the profile's packageAuditMode when its window was open, else null.
|
|
595
|
+
packageAuditMode PackageAuditMode?
|
|
596
|
+
createdAt DateTime @default(now())
|
|
597
|
+
updatedAt DateTime @updatedAt
|
|
598
|
+
proxySession CodingProxySession?
|
|
492
599
|
|
|
493
600
|
/// Revision-in-place for continuing an existing coding pull request.
|
|
494
601
|
/// Points directly at the ROOT CodingRun that actually owns the branch/PR
|
|
@@ -504,11 +611,35 @@ model CodingRun {
|
|
|
504
611
|
registryFetches RegistryFetch[]
|
|
505
612
|
registryApprovedVersions RegistryApprovedVersion[]
|
|
506
613
|
registryPlanRefusals RegistryPlanRefusal[]
|
|
614
|
+
registryAuditRecords RegistryAuditRecord[]
|
|
615
|
+
dependencySnapshots DependencySnapshot[]
|
|
507
616
|
|
|
508
617
|
@@index([jobBackend, jobHandle])
|
|
509
618
|
@@index([failureCategory])
|
|
510
619
|
@@index([queuedAt])
|
|
511
620
|
@@index([rootCodingRunId])
|
|
621
|
+
@@index([mergeOrder])
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
/// A coding run's session transcript for local resume: metadata only. The redacted content lives in
|
|
625
|
+
/// the blob store under blobKey; the unredacted transcript is never stored.
|
|
626
|
+
model RunTranscript {
|
|
627
|
+
runId String @id
|
|
628
|
+
run Run @relation(fields: [runId], references: [id], onDelete: Cascade)
|
|
629
|
+
/// "claude-code" (Codex later).
|
|
630
|
+
provider String
|
|
631
|
+
/// stored | too_large | not_captured | failed
|
|
632
|
+
status String
|
|
633
|
+
/// Fixed code for a status other than stored (e.g. missing, no_blob_store, secrets_unavailable); never content.
|
|
634
|
+
reason String?
|
|
635
|
+
sessionId String?
|
|
636
|
+
blobKey String?
|
|
637
|
+
sizeBytes Int?
|
|
638
|
+
sha256 String?
|
|
639
|
+
createdAt DateTime @default(now())
|
|
640
|
+
expiresAt DateTime
|
|
641
|
+
|
|
642
|
+
@@index([expiresAt])
|
|
512
643
|
}
|
|
513
644
|
|
|
514
645
|
/// Coding-run services (docs/coding-services.md): the catalog a repository's
|
|
@@ -590,44 +721,185 @@ enum CodingProxyRequestStatus {
|
|
|
590
721
|
uncertain
|
|
591
722
|
}
|
|
592
723
|
|
|
724
|
+
enum RunBudgetEventKind {
|
|
725
|
+
refused
|
|
726
|
+
/// A coding run's overrun top-up found no room in its budget group or run tree.
|
|
727
|
+
overrun_unavailable
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
/// One budget decision about a run: a refusal by the coding proxy or at
|
|
731
|
+
/// dispatch, or an overrun top-up with no room, with the numbers behind it.
|
|
732
|
+
/// `limit` names what refused it: run, run-tree, day, week or month. `details`
|
|
733
|
+
/// holds amounts, the model and the turn; never secrets or message text.
|
|
734
|
+
model RunBudgetEvent {
|
|
735
|
+
id String @id @default(cuid())
|
|
736
|
+
runId String
|
|
737
|
+
run Run @relation(fields: [runId], references: [id], onDelete: Cascade)
|
|
738
|
+
kind RunBudgetEventKind
|
|
739
|
+
limit String
|
|
740
|
+
at DateTime @default(now())
|
|
741
|
+
details Json
|
|
742
|
+
|
|
743
|
+
@@index([runId, at])
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
enum NativeGatewaySessionStatus {
|
|
747
|
+
active
|
|
748
|
+
finished
|
|
749
|
+
cancelled
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
enum NativeWarmWorkerStatus {
|
|
753
|
+
warming
|
|
754
|
+
idle
|
|
755
|
+
claimed
|
|
756
|
+
retiring
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
enum NativeGatewayCallStatus {
|
|
760
|
+
reserved
|
|
761
|
+
completed
|
|
762
|
+
released
|
|
763
|
+
uncertain
|
|
764
|
+
pending
|
|
765
|
+
waiting_budget
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
/// The trusted gateway's record of one sandbox-mode native run (native
|
|
769
|
+
/// sandbox phase 3): the worker authenticates with a capability whose hash is
|
|
770
|
+
/// stored here (the raw token is never persisted), and any control-plane
|
|
771
|
+
/// replica can serve it from this row. `snapshot` is what the run loaded --
|
|
772
|
+
/// the worker's input plus trusted-only capabilities and links -- and never
|
|
773
|
+
/// holds a secret value.
|
|
774
|
+
model NativeGatewaySession {
|
|
775
|
+
id String @id @default(cuid())
|
|
776
|
+
runId String @unique
|
|
777
|
+
run Run @relation(fields: [runId], references: [id], onDelete: Cascade)
|
|
778
|
+
capabilityHash String @unique
|
|
779
|
+
status NativeGatewaySessionStatus @default(active)
|
|
780
|
+
deadlineAt DateTime
|
|
781
|
+
budgetUsd Decimal @db.Decimal(18, 10)
|
|
782
|
+
snapshot Json
|
|
783
|
+
/// Set the first time the gateway refuses a model call for budget.
|
|
784
|
+
budgetExhaustedAt DateTime?
|
|
785
|
+
/// When the worker's network isolation was proven (a Kubernetes run's in-pod
|
|
786
|
+
/// probe; a Docker run's network exists before its container). The gateway
|
|
787
|
+
/// serves nothing before this is set.
|
|
788
|
+
networkReadyAt DateTime?
|
|
789
|
+
/// What the run's review tools have read (ReviewReadsState), saved between gateway requests
|
|
790
|
+
/// for repo_publish_review's unread_files check. Null until the run reads a pull request.
|
|
791
|
+
reviewReads Json?
|
|
792
|
+
createdAt DateTime @default(now())
|
|
793
|
+
updatedAt DateTime @updatedAt
|
|
794
|
+
calls NativeGatewayCall[]
|
|
795
|
+
|
|
796
|
+
/// NATIVE_SANDBOX_MAX_CONCURRENT counts the active sessions on every start.
|
|
797
|
+
@@index([status])
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
/// One worker of the native sandbox warm pool (native sandbox phase 6): an
|
|
801
|
+
/// isolated worker started before any run exists, holding no run data or
|
|
802
|
+
/// capability. A run claims an idle one with a compare-and-swap on this row
|
|
803
|
+
/// (`runId` is set at the claim), its input is delivered only after, and the
|
|
804
|
+
/// worker is destroyed after that one run. The row is inserted before the
|
|
805
|
+
/// worker is created, so a worker with no row is an orphan.
|
|
806
|
+
model NativeWarmWorker {
|
|
807
|
+
/// The worker's random token; its container or pod name carries it.
|
|
808
|
+
id String @id
|
|
809
|
+
name String @unique
|
|
810
|
+
status NativeWarmWorkerStatus @default(warming)
|
|
811
|
+
/// What the worker was built from (image, limits, isolation settings): a
|
|
812
|
+
/// claim only takes a worker of the current spec.
|
|
813
|
+
specHash String
|
|
814
|
+
runId String? @unique
|
|
815
|
+
run Run? @relation(fields: [runId], references: [id], onDelete: SetNull)
|
|
816
|
+
/// When its isolation was proven and it became claimable.
|
|
817
|
+
readyAt DateTime?
|
|
818
|
+
claimedAt DateTime?
|
|
819
|
+
createdAt DateTime @default(now())
|
|
820
|
+
updatedAt DateTime @updatedAt
|
|
821
|
+
|
|
822
|
+
@@index([status, specHash])
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
/// One worker call through the gateway, keyed by its callId: model calls are
|
|
826
|
+
/// reserved before the provider is called and settled after; side-effecting
|
|
827
|
+
/// built-in and bridge calls keep their result so a retried callId replays it;
|
|
828
|
+
/// a delegation records the child run it started.
|
|
829
|
+
model NativeGatewayCall {
|
|
830
|
+
id String @id @default(cuid())
|
|
831
|
+
sessionId String
|
|
832
|
+
session NativeGatewaySession @relation(fields: [sessionId], references: [id], onDelete: Cascade)
|
|
833
|
+
callId String
|
|
834
|
+
method String
|
|
835
|
+
status NativeGatewayCallStatus
|
|
836
|
+
reservationUsd Decimal? @db.Decimal(18, 10)
|
|
837
|
+
actualCostUsd Decimal? @db.Decimal(18, 10)
|
|
838
|
+
/// actualCostUsd is an estimate for an interrupted call, not provider usage.
|
|
839
|
+
costEstimated Boolean @default(false)
|
|
840
|
+
inputTokens Int?
|
|
841
|
+
outputTokens Int?
|
|
842
|
+
cachedInputTokens Int?
|
|
843
|
+
cacheWriteTokens Int?
|
|
844
|
+
/// A replayable result. Never a secret value.
|
|
845
|
+
result Json?
|
|
846
|
+
childRunId String?
|
|
847
|
+
/// A delegation's sub-agent, recorded at admission (it holds a place while waiting for budget).
|
|
848
|
+
childAgentId String?
|
|
849
|
+
createdAt DateTime @default(now())
|
|
850
|
+
updatedAt DateTime @updatedAt
|
|
851
|
+
completedAt DateTime?
|
|
852
|
+
|
|
853
|
+
@@unique([sessionId, callId])
|
|
854
|
+
@@index([sessionId, status])
|
|
855
|
+
}
|
|
856
|
+
|
|
593
857
|
/// Trusted-boundary state for one coding run. Only a capability digest and an
|
|
594
858
|
/// upstream credential reference are persisted; neither secret value enters the DB.
|
|
595
859
|
model CodingProxySession {
|
|
596
|
-
id
|
|
597
|
-
runId
|
|
598
|
-
run
|
|
599
|
-
capabilityHash
|
|
600
|
-
credentialRef
|
|
601
|
-
protocol
|
|
602
|
-
allowedModels
|
|
603
|
-
deadlineAt
|
|
604
|
-
budgetUsd
|
|
605
|
-
status
|
|
606
|
-
createdAt
|
|
607
|
-
updatedAt
|
|
608
|
-
requests
|
|
860
|
+
id String @id @default(cuid())
|
|
861
|
+
runId String @unique
|
|
862
|
+
run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
|
|
863
|
+
capabilityHash String @unique
|
|
864
|
+
credentialRef String
|
|
865
|
+
protocol String @default("openai-responses")
|
|
866
|
+
allowedModels Json
|
|
867
|
+
deadlineAt DateTime
|
|
868
|
+
budgetUsd Decimal @db.Decimal(18, 10)
|
|
869
|
+
status CodingProxySessionStatus @default(active)
|
|
870
|
+
createdAt DateTime @default(now())
|
|
871
|
+
updatedAt DateTime @updatedAt
|
|
872
|
+
requests CodingProxyRequest[]
|
|
609
873
|
/// Hash of the derived registry-only token (see deriveRegistryToken); the
|
|
610
874
|
/// token itself is never persisted.
|
|
611
|
-
registryTokenHash
|
|
875
|
+
registryTokenHash String? @unique
|
|
612
876
|
/// Set the first time the proxy refuses a request of this session for
|
|
613
877
|
/// budget; lets the executor report the run as out of budget.
|
|
614
|
-
budgetExhaustedAt
|
|
878
|
+
budgetExhaustedAt DateTime?
|
|
879
|
+
/// The numbers behind the first budget refusal of this session (budget, spent, holds, refused hold, model, turn); the control plane copies them into RunBudgetEvent. Never secrets.
|
|
880
|
+
budgetRefusal Json?
|
|
615
881
|
/// The upstream error code (a fixed identifier, never a message) of the
|
|
616
882
|
/// first provider failure the proxy relayed for this session; lets the
|
|
617
883
|
/// executor say the model provider refused the run.
|
|
618
|
-
upstreamFailure
|
|
884
|
+
upstreamFailure String?
|
|
619
885
|
/// The run's catalog entry, copied from Run.pricingSnapshot when the session
|
|
620
886
|
/// is created; the proxy prices and shapes requests from it. Null on
|
|
621
887
|
/// sessions from before the model catalog (the proxy falls back to the
|
|
622
888
|
/// shipped catalog).
|
|
623
|
-
pricingVersion
|
|
624
|
-
catalogEntry
|
|
889
|
+
pricingVersion String?
|
|
890
|
+
catalogEntry Json?
|
|
891
|
+
/// Dependency cache: every lockfile hash this session's plans approved (with
|
|
892
|
+
/// no refusals) while unsealed, at most 8. Only these may be restored or uploaded.
|
|
893
|
+
dependencyCacheLockHashes String[] @default([])
|
|
894
|
+
/// Set when the run's dependency step is over; after it the cache refuses this session.
|
|
895
|
+
dependencyCacheSealedAt DateTime?
|
|
625
896
|
|
|
626
897
|
@@index([deadlineAt])
|
|
627
898
|
}
|
|
628
899
|
|
|
629
|
-
/// Monotonic per-upstream-call ledger.
|
|
630
|
-
///
|
|
900
|
+
/// Monotonic per-upstream-call ledger. An uncertain request without an
|
|
901
|
+
/// estimate stays held in full; one the proxy estimated (costEstimated) counts
|
|
902
|
+
/// at that estimate.
|
|
631
903
|
model CodingProxyRequest {
|
|
632
904
|
id String @id @default(cuid())
|
|
633
905
|
sessionId String
|
|
@@ -638,6 +910,17 @@ model CodingProxyRequest {
|
|
|
638
910
|
status CodingProxyRequestStatus @default(reserved)
|
|
639
911
|
reservationUsd Decimal @db.Decimal(18, 10)
|
|
640
912
|
actualCostUsd Decimal? @db.Decimal(18, 10)
|
|
913
|
+
/// actualCostUsd is the proxy's estimate for an interrupted (uncertain)
|
|
914
|
+
/// reply, not provider-reported usage.
|
|
915
|
+
costEstimated Boolean @default(false)
|
|
916
|
+
/// UTF-8 bytes of the forwarded request body; the next request's hold compares against it.
|
|
917
|
+
requestBytes Int?
|
|
918
|
+
/// The worst-case hold (whole body as uncached input); a reply costing more cancels the session.
|
|
919
|
+
ceilingUsd Decimal? @db.Decimal(18, 10)
|
|
920
|
+
/// "cached" (priced from the conversation's previous reply) or "full" (= ceilingUsd).
|
|
921
|
+
reservationBasis String?
|
|
922
|
+
/// sha256 of what identifies the conversation (first message, or OpenAI prompt_cache_key).
|
|
923
|
+
conversationKey String?
|
|
641
924
|
pricingVersion String
|
|
642
925
|
pricingSnapshot Json
|
|
643
926
|
inputTokens Int?
|
|
@@ -652,6 +935,33 @@ model CodingProxyRequest {
|
|
|
652
935
|
|
|
653
936
|
@@unique([sessionId, requestKey])
|
|
654
937
|
@@index([sessionId, status])
|
|
938
|
+
@@index([sessionId, conversationKey])
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
/// Package audit mode (docs/coding-packages.md#package-audit-mode).
|
|
942
|
+
enum PackageAuditMode {
|
|
943
|
+
audit
|
|
944
|
+
full
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
/// One package version a run's registry served only because of package audit mode (or, in full mode,
|
|
948
|
+
/// served despite blocking advisories). Insert-only for the proxy.
|
|
949
|
+
model RegistryAuditRecord {
|
|
950
|
+
runId String
|
|
951
|
+
ecosystem String
|
|
952
|
+
name String
|
|
953
|
+
version String
|
|
954
|
+
/// "top-level" | "transitive" | "unknown" | "allowed" (allowed = on the allowlist graph, recorded only for advisories)
|
|
955
|
+
relation String
|
|
956
|
+
/// The top-level audited package that pulled it in (transitive only).
|
|
957
|
+
via String?
|
|
958
|
+
sizeBytes Int?
|
|
959
|
+
/// Full mode: [{ id, severity, summary }] served past; [] otherwise.
|
|
960
|
+
advisories Json @default("[]")
|
|
961
|
+
createdAt DateTime @default(now())
|
|
962
|
+
run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
|
|
963
|
+
|
|
964
|
+
@@id([runId, ecosystem, name, version])
|
|
655
965
|
}
|
|
656
966
|
|
|
657
967
|
enum RegistryFetchOutcome {
|
|
@@ -663,11 +973,15 @@ enum RegistryFetchOutcome {
|
|
|
663
973
|
/// once at dispatch (see CodingRun.packageAllowlist) and used to gate every
|
|
664
974
|
/// proxy fetch for the run's lifetime.
|
|
665
975
|
model RegistryAllowance {
|
|
666
|
-
runId
|
|
667
|
-
ecosystem
|
|
668
|
-
name
|
|
669
|
-
|
|
670
|
-
|
|
976
|
+
runId String
|
|
977
|
+
ecosystem String
|
|
978
|
+
name String
|
|
979
|
+
/// Set only in an audit-mode run: the top-level audited package whose metadata or file declared this
|
|
980
|
+
/// name (its own name for a top-level audited package; empty when a lockfile plan could not tell). Null = a
|
|
981
|
+
/// normal allowance.
|
|
982
|
+
auditedVia String?
|
|
983
|
+
createdAt DateTime @default(now())
|
|
984
|
+
run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
|
|
671
985
|
|
|
672
986
|
@@id([runId, ecosystem, name])
|
|
673
987
|
}
|
|
@@ -713,13 +1027,20 @@ model RegistryVersionFact {
|
|
|
713
1027
|
/// /registry/<ecosystem>/-/plan) verified and approved: a download of it is
|
|
714
1028
|
/// served directly, integrity-checked against this value.
|
|
715
1029
|
model RegistryApprovedVersion {
|
|
716
|
-
runId
|
|
717
|
-
ecosystem
|
|
718
|
-
name
|
|
719
|
-
version
|
|
720
|
-
integrity
|
|
721
|
-
|
|
722
|
-
|
|
1030
|
+
runId String
|
|
1031
|
+
ecosystem String
|
|
1032
|
+
name String
|
|
1033
|
+
version String
|
|
1034
|
+
integrity String
|
|
1035
|
+
/// Blocking advisories this run's packagePolicy.acceptedAdvisories waived
|
|
1036
|
+
/// for this version: empty unless the plan kept it only by that waiver. A
|
|
1037
|
+
/// download of it records them on its served RegistryFetch row.
|
|
1038
|
+
acceptedAdvisories String[] @default([])
|
|
1039
|
+
/// Audit-mode plans only: { relation, via?, advisories? } for an approval outside the allowlist, or
|
|
1040
|
+
/// one kept past advisories in full mode. Null = a normal approval.
|
|
1041
|
+
audit Json?
|
|
1042
|
+
createdAt DateTime @default(now())
|
|
1043
|
+
run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
|
|
723
1044
|
|
|
724
1045
|
@@id([runId, ecosystem, name, version])
|
|
725
1046
|
}
|
|
@@ -729,10 +1050,10 @@ model RegistryApprovedVersion {
|
|
|
729
1050
|
/// published, no integrity, hosted elsewhere): a download of it is answered
|
|
730
1051
|
/// from here with the same code and reason, without a graph walk.
|
|
731
1052
|
model RegistryPlanRefusal {
|
|
732
|
-
runId
|
|
733
|
-
ecosystem
|
|
734
|
-
name
|
|
735
|
-
version
|
|
1053
|
+
runId String
|
|
1054
|
+
ecosystem String
|
|
1055
|
+
name String
|
|
1056
|
+
version String
|
|
736
1057
|
code String
|
|
737
1058
|
reason String
|
|
738
1059
|
/// Set for a too-new refusal: the answer re-checks the version's age
|
|
@@ -744,6 +1065,39 @@ model RegistryPlanRefusal {
|
|
|
744
1065
|
@@id([runId, ecosystem, name, version])
|
|
745
1066
|
}
|
|
746
1067
|
|
|
1068
|
+
/// A cached node_modules snapshot for one npm project of a repository, keyed
|
|
1069
|
+
/// server-side by the coding proxy. The archive lives in the blob store under
|
|
1070
|
+
/// blobKey; only trusted wardby code writes it, before a run's agent starts.
|
|
1071
|
+
/// Outlives the run that created it (createdByRunId is cleared when that run is
|
|
1072
|
+
/// deleted); evicted least-recently-used.
|
|
1073
|
+
model DependencySnapshot {
|
|
1074
|
+
id String @id @default(cuid())
|
|
1075
|
+
ecosystem String
|
|
1076
|
+
repository String
|
|
1077
|
+
/// The project's folder relative to the repository root; "." = the root.
|
|
1078
|
+
projectPath String @default(".")
|
|
1079
|
+
lockHash String
|
|
1080
|
+
workerImage String
|
|
1081
|
+
policyHash String
|
|
1082
|
+
blobKey String @unique
|
|
1083
|
+
sha256 String
|
|
1084
|
+
sizeBytes BigInt
|
|
1085
|
+
/// The format/version and bounds trusted worker code verified before upload.
|
|
1086
|
+
/// Null on snapshots made before validation metadata was introduced.
|
|
1087
|
+
archiveScanVersion Int?
|
|
1088
|
+
archiveEntries Int?
|
|
1089
|
+
unpackedBytes BigInt?
|
|
1090
|
+
createdAt DateTime @default(now())
|
|
1091
|
+
lastUsedAt DateTime @default(now())
|
|
1092
|
+
createdByRunId String?
|
|
1093
|
+
createdByRun CodingRun? @relation(fields: [createdByRunId], references: [runId], onDelete: SetNull)
|
|
1094
|
+
|
|
1095
|
+
@@unique([ecosystem, repository, projectPath, lockHash, workerImage, policyHash])
|
|
1096
|
+
@@index([ecosystem, repository, projectPath, workerImage, policyHash, createdAt])
|
|
1097
|
+
@@index([lastUsedAt])
|
|
1098
|
+
@@index([createdByRunId, projectPath])
|
|
1099
|
+
}
|
|
1100
|
+
|
|
747
1101
|
/// Phase 2: single-row-per-scope lease so exactly one scheduler process
|
|
748
1102
|
/// ticks at a time. `holder` is a process instance id (crypto.randomUUID()).
|
|
749
1103
|
model SchedulerLease {
|
|
@@ -849,6 +1203,8 @@ model Secret {
|
|
|
849
1203
|
name String
|
|
850
1204
|
ciphertext String
|
|
851
1205
|
keyId String
|
|
1206
|
+
/// Brokered-secret config (core/secret-broker-config.ts). Null = readable by attached tools.
|
|
1207
|
+
broker Json?
|
|
852
1208
|
ownerId String?
|
|
853
1209
|
owner Principal? @relation(fields: [ownerId], references: [id])
|
|
854
1210
|
createdAt DateTime @default(now())
|
|
@@ -858,6 +1214,24 @@ model Secret {
|
|
|
858
1214
|
@@unique([ownerId, name])
|
|
859
1215
|
}
|
|
860
1216
|
|
|
1217
|
+
/// Audit trail of every change to a secret's broker config. No FK to Secret,
|
|
1218
|
+
/// so the history survives deleting the secret. Never holds a value.
|
|
1219
|
+
model SecretBrokerChange {
|
|
1220
|
+
id String @id @default(cuid())
|
|
1221
|
+
secretId String
|
|
1222
|
+
ownerId String
|
|
1223
|
+
secretName String
|
|
1224
|
+
actorId String
|
|
1225
|
+
before Json?
|
|
1226
|
+
after Json?
|
|
1227
|
+
/// "mcp" or "browser"
|
|
1228
|
+
via String
|
|
1229
|
+
createdAt DateTime @default(now())
|
|
1230
|
+
|
|
1231
|
+
@@index([secretId, createdAt])
|
|
1232
|
+
@@index([ownerId, createdAt])
|
|
1233
|
+
}
|
|
1234
|
+
|
|
861
1235
|
/// Phase 4: attaches a secret to an agent, addressed at sandbox point-of-use
|
|
862
1236
|
/// by `boundName` (secrets.get(boundName)). `boundName` defaults to the
|
|
863
1237
|
/// secret's canonical name; it differs only when the agent binds the secret
|
|
@@ -1065,29 +1439,34 @@ model AuthRateLimit {
|
|
|
1065
1439
|
/// and which host events trigger it. See
|
|
1066
1440
|
/// docs/private/2026-09-25-code-review-host-design.md §4.1.
|
|
1067
1441
|
model AgentRepository {
|
|
1068
|
-
id
|
|
1069
|
-
agentId
|
|
1070
|
-
agent
|
|
1442
|
+
id String @id @default(cuid())
|
|
1443
|
+
agentId String
|
|
1444
|
+
agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
|
|
1071
1445
|
/// "github" today; validated in code so adding a host needs no enum migration.
|
|
1072
|
-
provider
|
|
1446
|
+
provider String
|
|
1073
1447
|
/// Canonical lower-case owner/name for the provider.
|
|
1074
|
-
repository
|
|
1448
|
+
repository String
|
|
1075
1449
|
/// "read" or "write".
|
|
1076
|
-
access
|
|
1450
|
+
access String
|
|
1077
1451
|
/// Subset of "pull_request", "mention", "push", "review_fix".
|
|
1078
|
-
triggers
|
|
1452
|
+
triggers String[] @default([])
|
|
1079
1453
|
/// Only with the "pull_request" trigger (required there); names the agent's
|
|
1080
1454
|
/// check. Unique per repository across all links (NULLs are distinct).
|
|
1081
|
-
checkName
|
|
1455
|
+
checkName String?
|
|
1082
1456
|
/// Only with the "review_fix" trigger: how many automatic fix rounds a
|
|
1083
1457
|
/// pull request gets before wardby stops. Null = the default (2).
|
|
1084
|
-
reviewFixMaxRounds
|
|
1458
|
+
reviewFixMaxRounds Int?
|
|
1085
1459
|
/// Only with the "pull_request" trigger: holds this agent's review on a
|
|
1086
1460
|
/// pushed head until that head's own CI finishes (see DeferredReview),
|
|
1087
1461
|
/// instead of racing it. Default off: existing links review immediately,
|
|
1088
1462
|
/// exactly as today.
|
|
1089
|
-
waitForCi
|
|
1090
|
-
|
|
1463
|
+
waitForCi Boolean @default(false)
|
|
1464
|
+
/// Only on a write (builder) link: Wardby marks the draft pull requests this
|
|
1465
|
+
/// agent opened in the repository ready for review, once, after every Wardby
|
|
1466
|
+
/// review check passed, CI is green and the merge order check (if any) is
|
|
1467
|
+
/// success. Default off.
|
|
1468
|
+
markReadyWhenPassing Boolean @default(false)
|
|
1469
|
+
createdAt DateTime @default(now())
|
|
1091
1470
|
|
|
1092
1471
|
/// How this link was authorized: "host_permission" (the agent owner's
|
|
1093
1472
|
/// verified host identity had enough access), "admin" (a wardby admin
|
|
@@ -1122,38 +1501,46 @@ model DeferredReview {
|
|
|
1122
1501
|
/// against the same check even if the link's checkName changes later.
|
|
1123
1502
|
checkName String
|
|
1124
1503
|
createdAt DateTime @default(now())
|
|
1504
|
+
/// Why the review waits: "ci" (until CI finishes) or "request" (until the
|
|
1505
|
+
/// delegating lead run finishes, then CI if the link waits for it).
|
|
1506
|
+
reason String @default("ci")
|
|
1507
|
+
/// The run-tree root a "request" row waits for.
|
|
1508
|
+
leadRunId String?
|
|
1125
1509
|
|
|
1126
1510
|
@@unique([provider, repository, prNumber, headSha, agentId])
|
|
1127
1511
|
@@index([provider, repository, headSha])
|
|
1128
1512
|
@@index([createdAt])
|
|
1513
|
+
@@index([leadRunId])
|
|
1129
1514
|
}
|
|
1130
1515
|
|
|
1131
1516
|
/// The host check a run owns, so the review tool can complete it and the
|
|
1132
1517
|
/// run finalizer can close it if the run ends without publishing.
|
|
1133
1518
|
model RunHostCheck {
|
|
1134
|
-
runId
|
|
1135
|
-
run
|
|
1136
|
-
provider
|
|
1137
|
-
repository
|
|
1138
|
-
checkId
|
|
1139
|
-
headSha
|
|
1519
|
+
runId String @id
|
|
1520
|
+
run Run @relation(fields: [runId], references: [id], onDelete: Cascade)
|
|
1521
|
+
provider String
|
|
1522
|
+
repository String
|
|
1523
|
+
checkId String
|
|
1524
|
+
headSha String
|
|
1140
1525
|
/// The pull request the run was dispatched for. The review tool only
|
|
1141
1526
|
/// completes or creates a check for this PR. Null on rows written before it
|
|
1142
1527
|
/// existed: such a run publishes without a check.
|
|
1143
|
-
prNumber
|
|
1144
|
-
completedAt
|
|
1528
|
+
prNumber Int?
|
|
1529
|
+
completedAt DateTime?
|
|
1145
1530
|
/// The verdict the run published on its own check ("APPROVE",
|
|
1146
1531
|
/// "CHANGES_REQUESTED", "COMMENT"); null until then, or when the check was
|
|
1147
1532
|
/// closed without one (superseded, or by the finalizer).
|
|
1148
|
-
verdict
|
|
1533
|
+
verdict String?
|
|
1149
1534
|
/// The published review's summary and body (capped), kept for an automatic
|
|
1150
1535
|
/// fix round started when the run finishes.
|
|
1151
|
-
reviewBody
|
|
1536
|
+
reviewBody String?
|
|
1152
1537
|
/// The run published COMMENT while CI on its head was still running or had
|
|
1153
1538
|
/// not reported yet. CI finishing on that head later re-runs the review.
|
|
1154
|
-
ciPendingAtReview
|
|
1539
|
+
ciPendingAtReview Boolean?
|
|
1155
1540
|
/// When CI finishing on this head re-ran the review: at most once per head.
|
|
1156
|
-
ciRereviewAt
|
|
1541
|
+
ciRereviewAt DateTime?
|
|
1542
|
+
/// When a no-change review-fix round re-reviewed this CHANGES_REQUESTED review: at most once.
|
|
1543
|
+
noChangeRereviewAt DateTime?
|
|
1157
1544
|
}
|
|
1158
1545
|
|
|
1159
1546
|
/// De-duplicates host webhook redeliveries; pruned after 7 days.
|
|
@@ -1303,12 +1690,14 @@ model IssueFingerprint {
|
|
|
1303
1690
|
@@index([createdByRunId])
|
|
1304
1691
|
}
|
|
1305
1692
|
|
|
1306
|
-
/// A pull request wardby opened for
|
|
1693
|
+
/// A pull request wardby opened for an issue (a Jira issue, a GitHub issue): one shape for every issue
|
|
1694
|
+
/// provider. Provider-neutral on both sides.
|
|
1307
1695
|
/// Deliberately no foreign keys to Agent or Run: audit-style rows that survive agent/run deletion.
|
|
1308
1696
|
model IssuePullRequest {
|
|
1309
1697
|
id String @id @default(cuid())
|
|
1310
|
-
/// "jira"
|
|
1698
|
+
/// "jira" or "github" (an issue on a repository).
|
|
1311
1699
|
issueProvider String
|
|
1700
|
+
/// A Jira key ("PROJ-7"), or a GitHub issue's "<owner>/<repo>#<number>" (githubIssueKey).
|
|
1312
1701
|
issueKey String
|
|
1313
1702
|
/// "github" today; "bitbucket" next.
|
|
1314
1703
|
codeProvider String
|
|
@@ -1458,6 +1847,9 @@ model LocalReview {
|
|
|
1458
1847
|
pullRequest LocalPullRequest @relation(fields: [pullRequestId], references: [id], onDelete: Cascade)
|
|
1459
1848
|
agentId String
|
|
1460
1849
|
headSha String
|
|
1850
|
+
/// headSha when this review read every file of it (null otherwise): the head a later
|
|
1851
|
+
/// re-review may compare from and still APPROVE (repo_pr_read's lastCoveredSha).
|
|
1852
|
+
coveredSha String?
|
|
1461
1853
|
/// APPROVE | CHANGES_REQUESTED | COMMENT
|
|
1462
1854
|
verdict String
|
|
1463
1855
|
summary String
|
|
@@ -1468,3 +1860,96 @@ model LocalReview {
|
|
|
1468
1860
|
|
|
1469
1861
|
@@index([pullRequestId, createdAt])
|
|
1470
1862
|
}
|
|
1863
|
+
|
|
1864
|
+
/// A Slack (chat) channel that receives workflow notifications for a Jira
|
|
1865
|
+
/// project or for one agent. Exactly one subject: (issueProvider, projectKey)
|
|
1866
|
+
/// or agentId (enforced in code and by a CHECK constraint). Admin-approved.
|
|
1867
|
+
/// See docs/slack-notifications.md.
|
|
1868
|
+
model NotificationChannel {
|
|
1869
|
+
id String @id @default(cuid())
|
|
1870
|
+
/// "slack" today; validated in code.
|
|
1871
|
+
provider String
|
|
1872
|
+
/// Slack channel id (C…/G…), upper-case.
|
|
1873
|
+
channelId String
|
|
1874
|
+
/// Last known channel name, display only.
|
|
1875
|
+
channelName String?
|
|
1876
|
+
issueProvider String?
|
|
1877
|
+
projectKey String?
|
|
1878
|
+
agentId String?
|
|
1879
|
+
agent Agent? @relation(fields: [agentId], references: [id], onDelete: Cascade)
|
|
1880
|
+
/// Subset of the workflow event kinds; empty = all.
|
|
1881
|
+
events String[] @default([])
|
|
1882
|
+
/// Append the run's spend line to messages.
|
|
1883
|
+
includeCost Boolean @default(false)
|
|
1884
|
+
/// Set by the dispatcher on a permanent channel error; cleared by re-linking.
|
|
1885
|
+
lastError String?
|
|
1886
|
+
lastErrorAt DateTime?
|
|
1887
|
+
authorizedById String
|
|
1888
|
+
authorizedAt DateTime @default(now())
|
|
1889
|
+
createdAt DateTime @default(now())
|
|
1890
|
+
|
|
1891
|
+
@@unique([provider, channelId, issueProvider, projectKey])
|
|
1892
|
+
@@unique([provider, channelId, agentId])
|
|
1893
|
+
@@index([issueProvider, projectKey])
|
|
1894
|
+
@@index([agentId])
|
|
1895
|
+
}
|
|
1896
|
+
|
|
1897
|
+
/// One workflow fact (a card picked up, a PR opened, ...). Written only when
|
|
1898
|
+
/// at least one channel matches. No FKs to Run/Agent: audit-style rows.
|
|
1899
|
+
model WorkflowEvent {
|
|
1900
|
+
id String @id @default(cuid())
|
|
1901
|
+
kind String
|
|
1902
|
+
/// Idempotency key: repeated recordings of the same fact are no-ops.
|
|
1903
|
+
dedupeKey String @unique
|
|
1904
|
+
runId String?
|
|
1905
|
+
agentId String?
|
|
1906
|
+
workItemProvider String?
|
|
1907
|
+
workItemKey String?
|
|
1908
|
+
codeProvider String?
|
|
1909
|
+
repository String?
|
|
1910
|
+
prNumber Int?
|
|
1911
|
+
/// Template inputs only: never secrets, code, review bodies or run output.
|
|
1912
|
+
payload Json
|
|
1913
|
+
createdAt DateTime @default(now())
|
|
1914
|
+
deliveries NotificationDelivery[]
|
|
1915
|
+
|
|
1916
|
+
@@index([createdAt])
|
|
1917
|
+
}
|
|
1918
|
+
|
|
1919
|
+
/// One event's delivery to one channel (the outbox row the dispatcher works).
|
|
1920
|
+
model NotificationDelivery {
|
|
1921
|
+
id String @id @default(cuid())
|
|
1922
|
+
eventId String
|
|
1923
|
+
event WorkflowEvent @relation(fields: [eventId], references: [id], onDelete: Cascade)
|
|
1924
|
+
provider String
|
|
1925
|
+
channelId String
|
|
1926
|
+
threadKey String
|
|
1927
|
+
includeCost Boolean @default(false)
|
|
1928
|
+
/// "pending" | "delivered" | "failed"
|
|
1929
|
+
state String @default("pending")
|
|
1930
|
+
attempts Int @default(0)
|
|
1931
|
+
nextAttemptAt DateTime @default(now())
|
|
1932
|
+
lastError String?
|
|
1933
|
+
messageTs String?
|
|
1934
|
+
deliveredAt DateTime?
|
|
1935
|
+
createdAt DateTime @default(now())
|
|
1936
|
+
|
|
1937
|
+
@@unique([eventId, provider, channelId])
|
|
1938
|
+
@@index([state, nextAttemptAt])
|
|
1939
|
+
@@index([provider, channelId, threadKey, createdAt])
|
|
1940
|
+
}
|
|
1941
|
+
|
|
1942
|
+
/// The parent message of a work item's (or PR's) thread in one channel.
|
|
1943
|
+
model NotificationThread {
|
|
1944
|
+
id String @id @default(cuid())
|
|
1945
|
+
provider String
|
|
1946
|
+
channelId String
|
|
1947
|
+
threadKey String
|
|
1948
|
+
parentTs String
|
|
1949
|
+
/// Current status line shown on the parent message.
|
|
1950
|
+
status String
|
|
1951
|
+
createdAt DateTime @default(now())
|
|
1952
|
+
updatedAt DateTime @updatedAt
|
|
1953
|
+
|
|
1954
|
+
@@unique([provider, channelId, threadKey])
|
|
1955
|
+
}
|