@wardby/cli 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +5 -5
- package/README.md +6 -1
- package/deploy/local/docker-compose.quickstart-coding.yml +19 -0
- package/dist/claude-coding-worker/driver.d.ts +33 -3
- package/dist/claude-coding-worker/driver.js +151 -21
- package/dist/claude-coding-worker/main.js +38 -6
- package/dist/claude-coding-worker/sdk.js +29 -2
- package/dist/claude-coding-worker/tool-socket.d.ts +27 -0
- package/dist/claude-coding-worker/tool-socket.js +111 -0
- package/dist/claude-coding-worker/transcript.d.ts +18 -0
- package/dist/claude-coding-worker/transcript.js +77 -0
- package/dist/claude-plugin/command.d.ts +61 -0
- package/dist/claude-plugin/command.js +376 -0
- package/dist/cli-help.d.ts +1 -1
- package/dist/cli-help.js +3 -1
- package/dist/cli.js +71 -13
- package/dist/coding/code-host.d.ts +16 -0
- package/dist/coding/code-host.js +60 -0
- package/dist/coding/continuation-wording.d.ts +35 -0
- package/dist/coding/continuation-wording.js +73 -0
- package/dist/coding/linked-issue-note.d.ts +23 -0
- package/dist/coding/linked-issue-note.js +47 -0
- package/dist/coding/mcp-token.d.ts +12 -0
- package/dist/coding/mcp-token.js +26 -0
- package/dist/coding/merge-wording.d.ts +28 -0
- package/dist/coding/merge-wording.js +78 -0
- package/dist/coding/pr-description-note.d.ts +9 -0
- package/dist/coding/pr-description-note.js +32 -0
- package/dist/coding/profile.d.ts +46 -126
- package/dist/coding/profile.js +45 -4
- package/dist/coding/protected-path-wording.d.ts +8 -0
- package/dist/coding/protected-path-wording.js +1 -1
- package/dist/coding/protocol.d.ts +264 -346
- package/dist/coding/protocol.js +237 -12
- package/dist/coding/redact.d.ts +3 -0
- package/dist/coding/redact.js +17 -0
- package/dist/coding/registry/allowlist.d.ts +12 -0
- package/dist/coding/registry/allowlist.js +14 -1
- package/dist/coding/registry/audit-mode.d.ts +153 -0
- package/dist/coding/registry/audit-mode.js +304 -0
- package/dist/coding/registry/lockfile-shared.d.ts +36 -0
- package/dist/coding/registry/lockfile-shared.js +128 -0
- package/dist/coding/registry/lockfiles.js +1 -1
- package/dist/coding/registry/npm-lockfile-formats.d.ts +11 -0
- package/dist/coding/registry/npm-lockfile-formats.js +41 -0
- package/dist/coding/registry/npm-lockfile.d.ts +8 -4
- package/dist/coding/registry/npm-lockfile.js +4 -6
- package/dist/coding/registry/npm.js +78 -8
- package/dist/coding/registry/pnpm-lockfile.d.ts +17 -0
- package/dist/coding/registry/pnpm-lockfile.js +189 -0
- package/dist/coding/registry/pypi-plan.d.ts +50 -0
- package/dist/coding/registry/pypi-plan.js +406 -0
- package/dist/coding/registry/pypi-requirements.d.ts +58 -0
- package/dist/coding/registry/pypi-requirements.js +155 -0
- package/dist/coding/registry/pypi.d.ts +3 -27
- package/dist/coding/registry/pypi.js +40 -154
- package/dist/coding/registry/refusal-hints.d.ts +20 -0
- package/dist/coding/registry/refusal-hints.js +61 -0
- package/dist/coding/registry/refusal-wording.d.ts +11 -0
- package/dist/coding/registry/refusal-wording.js +56 -0
- package/dist/coding/registry/report.d.ts +70 -8
- package/dist/coding/registry/report.js +112 -5
- package/dist/coding/registry/types.d.ts +58 -8
- package/dist/coding/registry/yarn-lockfile.d.ts +30 -0
- package/dist/coding/registry/yarn-lockfile.js +367 -0
- package/dist/coding/services/catalog.d.ts +37 -351
- package/dist/coding/transcript/claude-code.d.ts +13 -0
- package/dist/coding/transcript/claude-code.js +273 -0
- package/dist/coding/transcript/download-protocol.d.ts +30 -0
- package/dist/coding/transcript/download-protocol.js +18 -0
- package/dist/coding/transcript/format.d.ts +20 -0
- package/dist/coding/transcript/format.js +32 -0
- package/dist/coding/transcript/recorder.d.ts +52 -0
- package/dist/coding/transcript/recorder.js +225 -0
- package/dist/coding/transcript/resume/checkout.d.ts +31 -0
- package/dist/coding/transcript/resume/checkout.js +203 -0
- package/dist/coding/transcript/resume/command.d.ts +17 -0
- package/dist/coding/transcript/resume/command.js +176 -0
- package/dist/coding/transcript/resume/download.d.ts +20 -0
- package/dist/coding/transcript/resume/download.js +153 -0
- package/dist/coding/transcript/resume/launch.d.ts +38 -0
- package/dist/coding/transcript/resume/launch.js +128 -0
- package/dist/coding/transcript/resume/session-file.d.ts +13 -0
- package/dist/coding/transcript/resume/session-file.js +79 -0
- package/dist/coding/transcript/resume/stand-in.d.ts +11 -0
- package/dist/coding/transcript/resume/stand-in.js +49 -0
- package/dist/coding-worker/artifact.d.ts +8 -3
- package/dist/coding-worker/artifact.js +3 -1
- package/dist/coding-worker/debug-trace.d.ts +9 -6
- package/dist/coding-worker/debug-trace.js +16 -19
- package/dist/coding-worker/dependency-cache.d.mts +229 -0
- package/dist/coding-worker/dependency-cache.mjs +2123 -0
- package/dist/coding-worker/driver.d.ts +4 -3
- package/dist/coding-worker/driver.js +124 -39
- package/dist/coding-worker/errors.d.ts +1 -0
- package/dist/coding-worker/errors.js +32 -0
- package/dist/coding-worker/main.js +5 -1
- package/dist/coding-worker/mcp-config.d.ts +27 -0
- package/dist/coding-worker/mcp-config.js +32 -0
- package/dist/coding-worker/sdk.d.ts +36 -0
- package/dist/coding-worker/sdk.js +28 -1
- package/dist/coding-worker/task-note.d.ts +11 -0
- package/dist/coding-worker/task-note.js +13 -0
- package/dist/coding-worker/types.d.ts +15 -0
- package/dist/config/dependency-cache.d.ts +23 -0
- package/dist/config/dependency-cache.js +32 -0
- package/dist/config/mcp-call-limit.d.ts +8 -0
- package/dist/config/mcp-call-limit.js +18 -0
- package/dist/config/mcp-servers.d.ts +8 -0
- package/dist/config/mcp-servers.js +12 -0
- package/dist/config/providers.d.ts +12 -3
- package/dist/config/providers.js +55 -5
- package/dist/config/test-simulators.d.ts +92 -0
- package/dist/config/test-simulators.js +333 -0
- package/dist/config/tool-timeout.d.ts +1 -0
- package/dist/config/tool-timeout.js +18 -0
- package/dist/core/async-context.d.ts +2 -0
- package/dist/core/async-context.js +12 -0
- package/dist/core/budget-events.d.ts +108 -0
- package/dist/core/budget-events.js +346 -0
- package/dist/core/budget-groups.d.ts +50 -1
- package/dist/core/budget-groups.js +236 -27
- package/dist/core/budget-stopped-head.d.ts +46 -0
- package/dist/core/budget-stopped-head.js +81 -0
- package/dist/core/budget-topup.d.ts +51 -0
- package/dist/core/budget-topup.js +156 -0
- package/dist/core/budget-wording.d.ts +16 -2
- package/dist/core/budget-wording.js +40 -2
- package/dist/core/coding-mcp.d.ts +36 -0
- package/dist/core/coding-mcp.js +253 -0
- package/dist/core/coding-queue.d.ts +2 -1
- package/dist/core/coding-queue.js +7 -0
- package/dist/core/coding-repository.d.ts +46 -0
- package/dist/core/coding-repository.js +92 -0
- package/dist/core/cron.d.ts +19 -1
- package/dist/core/cron.js +17 -0
- package/dist/core/datastores.js +1 -1
- package/dist/core/deferred-coding.d.ts +14 -0
- package/dist/core/deferred-coding.js +62 -0
- package/dist/core/delegation-child.d.ts +25 -0
- package/dist/core/delegation-child.js +37 -0
- package/dist/core/delegation-slots.d.ts +27 -0
- package/dist/core/delegation-slots.js +44 -0
- package/dist/core/dispatch.d.ts +48 -2
- package/dist/core/dispatch.js +166 -66
- package/dist/core/engine-native.js +1 -1
- package/dist/core/error-code.d.ts +38 -0
- package/dist/core/error-code.js +169 -0
- package/dist/core/grants.d.ts +46 -8
- package/dist/core/grants.js +99 -8
- package/dist/core/host-events.d.ts +18 -2
- package/dist/core/host-events.js +291 -27
- package/dist/core/host-status.d.ts +85 -3
- package/dist/core/host-status.js +300 -22
- package/dist/core/issue-bridge.d.ts +50 -6
- package/dist/core/issue-bridge.js +124 -33
- package/dist/core/issue-events.d.ts +1 -1
- package/dist/core/issue-events.js +4 -10
- package/dist/core/issue-status.d.ts +1 -1
- package/dist/core/issue-status.js +58 -29
- package/dist/core/logger.d.ts +5 -0
- package/dist/core/logger.js +14 -1
- package/dist/core/lost-run-children.d.ts +6 -0
- package/dist/core/lost-run-children.js +32 -0
- package/dist/core/mark-ready.d.ts +34 -0
- package/dist/core/mark-ready.js +152 -0
- package/dist/core/markdown-code.d.ts +8 -0
- package/dist/core/markdown-code.js +107 -0
- package/dist/core/mcp-client/client.d.ts +47 -0
- package/dist/core/mcp-client/client.js +141 -0
- package/dist/core/mcp-client/jsonrpc.d.ts +15 -0
- package/dist/core/mcp-client/jsonrpc.js +54 -0
- package/dist/core/mcp-client/results.d.ts +13 -0
- package/dist/core/mcp-client/results.js +42 -0
- package/dist/core/mcp-servers.d.ts +90 -0
- package/dist/core/mcp-servers.js +230 -0
- package/dist/core/mcp-tools.d.ts +108 -0
- package/dist/core/mcp-tools.js +287 -0
- package/dist/core/memory-tools.js +7 -0
- package/dist/core/merge-order-check.d.ts +2 -1
- package/dist/core/merge-order-check.js +44 -18
- package/dist/core/notification-dispatcher.js +2 -1
- package/dist/core/notification-templates.d.ts +1 -7
- package/dist/core/notification-templates.js +36 -2
- package/dist/core/pull-request-state-sync.js +2 -2
- package/dist/core/reconciler.d.ts +4 -3
- package/dist/core/reconciler.js +8 -1
- package/dist/core/related-pull-requests.d.ts +11 -3
- package/dist/core/related-pull-requests.js +49 -20
- package/dist/core/reply-parts.d.ts +21 -0
- package/dist/core/reply-parts.js +73 -0
- package/dist/core/review-fix.d.ts +1 -1
- package/dist/core/review-fix.js +4 -3
- package/dist/core/review-host-checks.d.ts +1 -1
- package/dist/core/review-host-tools.d.ts +3 -0
- package/dist/core/review-host-tools.js +102 -14
- package/dist/core/review-reads.d.ts +55 -0
- package/dist/core/review-reads.js +233 -0
- package/dist/core/run-status.d.ts +12 -0
- package/dist/core/run-status.js +12 -0
- package/dist/core/runner.d.ts +145 -49
- package/dist/core/runner.js +719 -216
- package/dist/core/schedule-start.d.ts +12 -0
- package/dist/core/schedule-start.js +14 -0
- package/dist/core/secret-broker-config.d.ts +12 -74
- package/dist/core/secret-broker-config.js +1 -1
- package/dist/core/secret-guard.d.ts +49 -0
- package/dist/core/secret-guard.js +119 -0
- package/dist/core/secret-guarded-stores.d.ts +12 -0
- package/dist/core/secret-guarded-stores.js +41 -0
- package/dist/core/secret-spans.d.ts +50 -0
- package/dist/core/secret-spans.js +94 -0
- package/dist/core/secrets.d.ts +11 -1
- package/dist/core/secrets.js +27 -1
- package/dist/core/serializable-retry.d.ts +18 -0
- package/dist/core/serializable-retry.js +43 -0
- package/dist/core/stop-run.d.ts +46 -0
- package/dist/core/stop-run.js +61 -0
- package/dist/core/tool-admin.d.ts +5 -1
- package/dist/core/tool-admin.js +7 -2
- package/dist/core/tool-names.d.ts +13 -0
- package/dist/core/tool-names.js +20 -0
- package/dist/core/webhooks.d.ts +4 -0
- package/dist/core/webhooks.js +68 -49
- package/dist/core/workflow-events.d.ts +14 -2
- package/dist/core/workflow-events.js +4 -0
- package/dist/core/workflow-run-events.d.ts +5 -3
- package/dist/core/workflow-run-events.js +45 -9
- package/dist/core/zod-json-schema.d.ts +4 -0
- package/dist/core/zod-json-schema.js +39 -0
- package/dist/core/zod3-window.d.ts +35 -0
- package/dist/core/zod3-window.js +124 -0
- package/dist/generated/prisma/browser.d.ts +65 -3
- package/dist/generated/prisma/client.d.ts +65 -3
- package/dist/generated/prisma/commonInputTypes.d.ts +266 -106
- package/dist/generated/prisma/enums.d.ts +10 -0
- package/dist/generated/prisma/enums.js +8 -0
- package/dist/generated/prisma/internal/class.d.ts +110 -0
- package/dist/generated/prisma/internal/class.js +4 -4
- package/dist/generated/prisma/internal/prismaNamespace.d.ts +957 -9
- package/dist/generated/prisma/internal/prismaNamespace.js +166 -2
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +174 -0
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +166 -2
- package/dist/generated/prisma/models/Agent.d.ts +377 -8
- package/dist/generated/prisma/models/AgentMcpServer.d.ts +1412 -0
- package/dist/generated/prisma/models/AgentMcpServer.js +1 -0
- package/dist/generated/prisma/models/AgentRepository.d.ts +81 -1
- package/dist/generated/prisma/models/AuthUser.d.ts +1 -1
- package/dist/generated/prisma/models/CodingAgentProfile.d.ts +228 -7
- package/dist/generated/prisma/models/CodingProxyRequest.d.ts +207 -3
- package/dist/generated/prisma/models/CodingProxySession.d.ts +232 -2
- package/dist/generated/prisma/models/CodingRun.d.ts +1712 -1
- package/dist/generated/prisma/models/DependencySnapshot.d.ts +1668 -0
- package/dist/generated/prisma/models/DependencySnapshot.js +1 -0
- package/dist/generated/prisma/models/HostProvider.d.ts +2176 -0
- package/dist/generated/prisma/models/HostProvider.js +1 -0
- package/dist/generated/prisma/models/HostProviderCredential.d.ts +1285 -0
- package/dist/generated/prisma/models/HostProviderCredential.js +1 -0
- package/dist/generated/prisma/models/HostProviderOperation.d.ts +1470 -0
- package/dist/generated/prisma/models/HostProviderOperation.js +1 -0
- package/dist/generated/prisma/models/HostProviderTrustedAccount.d.ts +1145 -0
- package/dist/generated/prisma/models/HostProviderTrustedAccount.js +1 -0
- package/dist/generated/prisma/models/IssuePullRequest.d.ts +6 -2
- package/dist/generated/prisma/models/LocalReview.d.ts +40 -1
- package/dist/generated/prisma/models/McpServer.d.ts +1500 -0
- package/dist/generated/prisma/models/McpServer.js +1 -0
- package/dist/generated/prisma/models/NativeGatewayCall.d.ts +77 -1
- package/dist/generated/prisma/models/NativeGatewaySession.d.ts +35 -1
- package/dist/generated/prisma/models/Principal.d.ts +167 -0
- package/dist/generated/prisma/models/RegistryAllowance.d.ts +41 -1
- package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +75 -1
- package/dist/generated/prisma/models/RegistryAuditRecord.d.ts +1364 -0
- package/dist/generated/prisma/models/RegistryAuditRecord.js +1 -0
- package/dist/generated/prisma/models/ResourceGrant.d.ts +1 -1
- package/dist/generated/prisma/models/Run.d.ts +738 -2
- package/dist/generated/prisma/models/RunBudgetEvent.d.ts +1211 -0
- package/dist/generated/prisma/models/RunBudgetEvent.js +1 -0
- package/dist/generated/prisma/models/RunTranscript.d.ts +1339 -0
- package/dist/generated/prisma/models/RunTranscript.js +1 -0
- package/dist/generated/prisma/models/Secret.d.ts +387 -0
- package/dist/generated/prisma/models/Tool.d.ts +223 -1
- package/dist/generated/prisma/models.d.ts +10 -0
- package/dist/help/search.js +12 -3
- package/dist/help-index.json +2033 -110
- package/dist/import/create.js +48 -4
- package/dist/import/neutral-schema.d.ts +51 -281
- package/dist/import/neutral-schema.js +7 -4
- package/dist/knowledge/check.d.ts +1 -1
- package/dist/knowledge/cli.d.ts +11 -1
- package/dist/knowledge/cli.js +37 -4
- package/dist/knowledge/concept.d.ts +3 -19
- package/dist/knowledge/location.d.ts +31 -0
- package/dist/knowledge/location.js +78 -0
- package/dist/mcp/auth/access.d.ts +10 -2
- package/dist/mcp/auth/access.js +15 -1
- package/dist/mcp/auth/grants-cli.d.ts +6 -4
- package/dist/mcp/auth/grants-cli.js +42 -3
- package/dist/mcp/auth/ownership.d.ts +7 -7
- package/dist/mcp/auth/resource-server.d.ts +3 -1
- package/dist/mcp/auth/resource-server.js +17 -2
- package/dist/mcp/auth/self-hosted/credentials.d.ts +3 -3
- package/dist/mcp/auth/self-hosted/session.d.ts +2 -2
- package/dist/mcp/context.d.ts +3 -0
- package/dist/mcp/host-events/github-ingress.d.ts +2 -0
- package/dist/mcp/host-events/github-ingress.js +2 -1
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.js +69 -10
- package/dist/mcp/server.d.ts +13 -0
- package/dist/mcp/server.js +33 -14
- package/dist/mcp/tools/agents.d.ts +4 -0
- package/dist/mcp/tools/agents.js +295 -28
- package/dist/mcp/tools/datastore.js +17 -8
- package/dist/mcp/tools/grants.js +73 -29
- package/dist/mcp/tools/host-providers.d.ts +2 -0
- package/dist/mcp/tools/host-providers.js +215 -0
- package/dist/mcp/tools/mcp-servers.d.ts +26 -0
- package/dist/mcp/tools/mcp-servers.js +481 -0
- package/dist/mcp/tools/memory.js +11 -1
- package/dist/mcp/tools/notification-channels.js +2 -2
- package/dist/mcp/tools/packages.d.ts +2 -0
- package/dist/mcp/tools/packages.js +195 -0
- package/dist/mcp/tools/repositories.js +65 -12
- package/dist/mcp/tools/run-access.d.ts +16 -0
- package/dist/mcp/tools/run-access.js +25 -0
- package/dist/mcp/tools/run-transcript-download.d.ts +30 -0
- package/dist/mcp/tools/run-transcript-download.js +129 -0
- package/dist/mcp/tools/run-transcript.d.ts +19 -0
- package/dist/mcp/tools/run-transcript.js +70 -0
- package/dist/mcp/tools/runs.js +209 -27
- package/dist/mcp/tools/scheduling.js +3 -1
- package/dist/mcp/tools/secret-elicitation-form.js +5 -0
- package/dist/mcp/tools/secret-elicitation-server.d.ts +6 -0
- package/dist/mcp/tools/secret-elicitation-server.js +10 -61
- package/dist/mcp/tools/secret-elicitation.d.ts +2 -0
- package/dist/mcp/tools/secret-elicitation.js +25 -2
- package/dist/mcp/tools/secrets.js +40 -6
- package/dist/mcp/tools/stop-run.d.ts +2 -0
- package/dist/mcp/tools/stop-run.js +82 -0
- package/dist/mcp/tools/subagents.js +2 -2
- package/dist/mcp/tools/tools.d.ts +7 -5
- package/dist/mcp/tools/tools.js +64 -16
- package/dist/mcp/tools/trigger.js +28 -6
- package/dist/mcp/transport/http-limits.d.ts +2 -0
- package/dist/mcp/transport/http-limits.js +6 -2
- package/dist/mcp/transport/stdio-link-host.d.ts +20 -0
- package/dist/mcp/transport/stdio-link-host.js +67 -0
- package/dist/mcp/transport/streamable-http.d.ts +13 -0
- package/dist/mcp/transport/streamable-http.js +41 -1
- package/dist/mcp/webhooks/ingress.js +10 -0
- package/dist/native-worker/docker-launcher.d.ts +38 -2
- package/dist/native-worker/docker-launcher.js +65 -5
- package/dist/native-worker/gateway-server.d.ts +55 -3
- package/dist/native-worker/gateway-server.js +152 -34
- package/dist/native-worker/gateway.d.ts +29 -1
- package/dist/native-worker/gateway.js +74 -4
- package/dist/native-worker/http-server.d.ts +7 -1
- package/dist/native-worker/http-server.js +62 -7
- package/dist/native-worker/http-transport.js +1 -1
- package/dist/native-worker/kubernetes-launcher.d.ts +7 -3
- package/dist/native-worker/kubernetes-launcher.js +43 -3
- package/dist/native-worker/launch.d.ts +18 -1
- package/dist/native-worker/launch.js +6 -1
- package/dist/native-worker/ledger.d.ts +24 -4
- package/dist/native-worker/ledger.js +62 -8
- package/dist/native-worker/loopback.js +3 -8
- package/dist/native-worker/main.d.ts +2 -1
- package/dist/native-worker/main.js +14 -3
- package/dist/native-worker/protocol.d.ts +130 -577
- package/dist/native-worker/protocol.js +51 -2
- package/dist/native-worker/sandbox-executor.d.ts +17 -2
- package/dist/native-worker/sandbox-executor.js +78 -4
- package/dist/native-worker/stderr-redaction.d.ts +77 -0
- package/dist/native-worker/stderr-redaction.js +237 -0
- package/dist/native-worker/stdio.d.ts +1 -1
- package/dist/native-worker/stdio.js +6 -5
- package/dist/native-worker/warm-pool.d.ts +2 -2
- package/dist/native-worker/warm-pool.js +4 -4
- package/dist/native-worker/worker.js +28 -2
- package/dist/observability/metrics.js +6 -1
- package/dist/providers/auth/self-hosted.d.ts +1 -1
- package/dist/providers/coding-proxy/capability-hash.d.ts +2 -0
- package/dist/providers/coding-proxy/capability-hash.js +5 -0
- package/dist/providers/coding-proxy/dependency-cache/eviction.d.ts +29 -0
- package/dist/providers/coding-proxy/dependency-cache/eviction.js +87 -0
- package/dist/providers/coding-proxy/dependency-cache/key.d.ts +33 -0
- package/dist/providers/coding-proxy/dependency-cache/key.js +86 -0
- package/dist/providers/coding-proxy/dependency-cache/model-request-seal.d.ts +18 -0
- package/dist/providers/coding-proxy/dependency-cache/model-request-seal.js +40 -0
- package/dist/providers/coding-proxy/dependency-cache/prisma-store.d.ts +25 -0
- package/dist/providers/coding-proxy/dependency-cache/prisma-store.js +131 -0
- package/dist/providers/coding-proxy/dependency-cache/service.d.ts +70 -0
- package/dist/providers/coding-proxy/dependency-cache/service.js +409 -0
- package/dist/providers/coding-proxy/dependency-cache/store.d.ts +85 -0
- package/dist/providers/coding-proxy/dependency-cache/store.js +95 -0
- package/dist/providers/coding-proxy/hold.d.ts +32 -0
- package/dist/providers/coding-proxy/hold.js +86 -0
- package/dist/providers/coding-proxy/interrupted.d.ts +70 -0
- package/dist/providers/coding-proxy/interrupted.js +104 -0
- package/dist/providers/coding-proxy/mcp-route.d.ts +34 -0
- package/dist/providers/coding-proxy/mcp-route.js +166 -0
- package/dist/providers/coding-proxy/memory-ledger.d.ts +17 -2
- package/dist/providers/coding-proxy/memory-ledger.js +99 -8
- package/dist/providers/coding-proxy/metering.d.ts +16 -0
- package/dist/providers/coding-proxy/metering.js +27 -4
- package/dist/providers/coding-proxy/prisma-ledger.d.ts +16 -2
- package/dist/providers/coding-proxy/prisma-ledger.js +209 -69
- package/dist/providers/coding-proxy/proxy.d.ts +21 -2
- package/dist/providers/coding-proxy/proxy.js +300 -48
- package/dist/providers/coding-proxy/registry/audit.d.ts +53 -10
- package/dist/providers/coding-proxy/registry/audit.js +94 -17
- package/dist/providers/coding-proxy/registry/lockfile-parse-worker.d.ts +36 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse-worker.js +67 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse.d.ts +16 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse.js +110 -0
- package/dist/providers/coding-proxy/registry/plan.d.ts +9 -0
- package/dist/providers/coding-proxy/registry/plan.js +201 -48
- package/dist/providers/coding-proxy/registry/prisma-store.d.ts +11 -5
- package/dist/providers/coding-proxy/registry/prisma-store.js +120 -17
- package/dist/providers/coding-proxy/registry/service.d.ts +97 -16
- package/dist/providers/coding-proxy/registry/service.js +579 -112
- package/dist/providers/coding-proxy/registry/store.d.ts +84 -9
- package/dist/providers/coding-proxy/registry/store.js +54 -1
- package/dist/providers/coding-proxy/runtime.d.ts +10 -0
- package/dist/providers/coding-proxy/runtime.js +109 -16
- package/dist/providers/coding-proxy/server.d.ts +9 -1
- package/dist/providers/coding-proxy/server.js +55 -1
- package/dist/providers/coding-proxy/types.d.ts +78 -1
- package/dist/providers/datastore/types.d.ts +5 -0
- package/dist/providers/engine/types.d.ts +17 -2
- package/dist/providers/engine/types.js +17 -0
- package/dist/providers/executor/composition.d.ts +10 -3
- package/dist/providers/executor/composition.js +52 -7
- package/dist/providers/executor/container.d.ts +394 -9
- package/dist/providers/executor/container.js +1210 -96
- package/dist/providers/executor/dbos-status.d.ts +31 -0
- package/dist/providers/executor/dbos-status.js +64 -0
- package/dist/providers/executor/dbos.d.ts +50 -1
- package/dist/providers/executor/dbos.js +207 -20
- package/dist/providers/executor/deferred.d.ts +12 -24
- package/dist/providers/executor/deferred.js +10 -29
- package/dist/providers/executor/in-process.d.ts +9 -1
- package/dist/providers/executor/in-process.js +14 -4
- package/dist/providers/executor/linked-issue-reader.d.ts +16 -0
- package/dist/providers/executor/linked-issue-reader.js +30 -0
- package/dist/providers/executor/routing.d.ts +2 -0
- package/dist/providers/executor/routing.js +4 -0
- package/dist/providers/executor/types.d.ts +13 -0
- package/dist/providers/host-tools/invoke.d.ts +37 -0
- package/dist/providers/host-tools/invoke.js +117 -0
- package/dist/providers/host-tools/operations.d.ts +65 -0
- package/dist/providers/host-tools/operations.js +149 -0
- package/dist/providers/host-tools/registry.d.ts +79 -0
- package/dist/providers/host-tools/registry.js +362 -0
- package/dist/providers/host-tools/request-guard.d.ts +17 -0
- package/dist/providers/host-tools/request-guard.js +99 -0
- package/dist/providers/host-tools/self-test.d.ts +64 -0
- package/dist/providers/host-tools/self-test.js +142 -0
- package/dist/providers/index.d.ts +2 -1
- package/dist/providers/issue-tracker/types.d.ts +17 -0
- package/dist/providers/issue-tracker/types.js +39 -1
- package/dist/providers/jobs/claude-tool-setup.d.ts +4 -0
- package/dist/providers/jobs/claude-tool-setup.js +5 -2
- package/dist/providers/jobs/docker-isolation.d.ts +10 -2
- package/dist/providers/jobs/docker-isolation.js +47 -8
- package/dist/providers/jobs/docker.d.ts +9 -0
- package/dist/providers/jobs/docker.js +60 -11
- package/dist/providers/jobs/fake-kubernetes-api.d.ts +2 -0
- package/dist/providers/jobs/fake-kubernetes-api.js +3 -0
- package/dist/providers/jobs/kubernetes-api.d.ts +8 -0
- package/dist/providers/jobs/kubernetes-api.js +10 -0
- package/dist/providers/jobs/kubernetes-client.js +10 -1
- package/dist/providers/jobs/kubernetes-isolation.d.ts +5 -1
- package/dist/providers/jobs/kubernetes-isolation.js +32 -3
- package/dist/providers/jobs/kubernetes.d.ts +11 -1
- package/dist/providers/jobs/kubernetes.js +111 -17
- package/dist/providers/jobs/types.d.ts +39 -0
- package/dist/providers/jobs/types.js +13 -1
- package/dist/providers/llm/anthropic.js +5 -1
- package/dist/providers/llm/bedrock.d.ts +0 -12
- package/dist/providers/llm/bedrock.js +4 -0
- package/dist/providers/llm/claude-messages.d.ts +3 -1
- package/dist/providers/llm/claude-messages.js +4 -1
- package/dist/providers/llm/claude-provider.d.ts +2 -2
- package/dist/providers/llm/claude-provider.js +2 -2
- package/dist/providers/llm/openai.d.ts +2 -2
- package/dist/providers/llm/openai.js +6 -2
- package/dist/providers/llm/routing.d.ts +2 -2
- package/dist/providers/llm/routing.js +2 -2
- package/dist/providers/llm/types.d.ts +12 -2
- package/dist/providers/review-host/github-events.d.ts +9 -1
- package/dist/providers/review-host/github-events.js +34 -12
- package/dist/providers/review-host/github.d.ts +29 -2
- package/dist/providers/review-host/github.js +224 -29
- package/dist/providers/review-host/local.d.ts +8 -4
- package/dist/providers/review-host/local.js +49 -31
- package/dist/providers/review-host/patch-pages.d.ts +41 -0
- package/dist/providers/review-host/patch-pages.js +176 -0
- package/dist/providers/review-host/review-format.d.ts +19 -1
- package/dist/providers/review-host/review-format.js +38 -7
- package/dist/providers/review-host/types.d.ts +140 -6
- package/dist/providers/review-host/types.js +9 -1
- package/dist/providers/storage/gcs.d.ts +63 -0
- package/dist/providers/storage/gcs.js +69 -0
- package/dist/providers/storage/index.d.ts +15 -0
- package/dist/providers/storage/index.js +14 -0
- package/dist/providers/storage/local.d.ts +24 -0
- package/dist/providers/storage/local.js +92 -0
- package/dist/providers/storage/meter.d.ts +14 -0
- package/dist/providers/storage/meter.js +34 -0
- package/dist/providers/storage/s3.d.ts +41 -0
- package/dist/providers/storage/s3.js +107 -0
- package/dist/providers/storage/types.d.ts +37 -3
- package/dist/providers/storage/types.js +21 -4
- package/dist/providers/vcs/git.d.ts +39 -4
- package/dist/providers/vcs/git.js +339 -26
- package/dist/providers/vcs/github-remote.d.ts +26 -3
- package/dist/providers/vcs/github-remote.js +124 -14
- package/dist/providers/vcs/github.d.ts +183 -44
- package/dist/providers/vcs/github.js +455 -56
- package/dist/providers/vcs/index.d.ts +1 -1
- package/dist/providers/vcs/index.js +9 -2
- package/dist/providers/vcs/pr-description.d.ts +127 -0
- package/dist/providers/vcs/pr-description.js +270 -0
- package/dist/providers/vcs/remote.d.ts +37 -1
- package/dist/providers/vcs/remote.js +7 -1
- package/dist/providers/vcs/routing.d.ts +16 -8
- package/dist/providers/vcs/routing.js +27 -6
- package/dist/providers/vcs/types.d.ts +150 -5
- package/dist/quickstart/coding-seed.d.ts +14 -3
- package/dist/quickstart/coding-seed.js +213 -4
- package/dist/quickstart/index.d.ts +5 -0
- package/dist/quickstart/index.js +21 -0
- package/dist/quickstart/reviewer-prompt.d.ts +1 -1
- package/dist/quickstart/reviewer-prompt.js +6 -6
- package/dist/quickstart-images.json +1 -1
- package/dist/sandbox/eval-core.d.ts +12 -2
- package/dist/sandbox/eval-core.js +20 -4
- package/dist/sandbox/generated/zod.bundle.js +62 -1
- package/dist/sandbox/generated/zod3.bundle.js +5 -0
- package/dist/sandbox/host-functions.d.ts +5 -0
- package/dist/sandbox/host-functions.js +13 -13
- package/dist/sandbox/limits.d.ts +4 -1
- package/dist/sandbox/limits.js +4 -1
- package/dist/sandbox/run-in-sandbox.d.ts +6 -0
- package/dist/sandbox/run-in-sandbox.js +14 -2
- package/dist/sandbox/safe-fetch.d.ts +2 -0
- package/dist/sandbox/safe-fetch.js +1 -1
- package/dist/sandbox/secret-broker.d.ts +1 -0
- package/dist/sandbox/secret-broker.js +4 -5
- package/dist/sandbox/tool-capabilities.d.ts +10 -30
- package/dist/sandbox/tool-timeout.d.ts +32 -0
- package/dist/sandbox/tool-timeout.js +52 -0
- package/dist/sandbox/user-tool.d.ts +8 -1
- package/dist/sandbox/user-tool.js +9 -3
- package/dist/sandbox/zod-params.d.ts +37 -5
- package/dist/sandbox/zod-params.js +181 -26
- package/dist/serve.js +8 -1
- package/dist/viewer/api-schema.d.ts +349 -2627
- package/dist/viewer/api-schema.js +7 -0
- package/dist/viewer/build-schemas.js +6 -2
- package/dist/viewer/graph.js +2 -1
- package/dist/viewer/openapi.js +2 -4
- package/dist/wardby-bin.js +15 -0
- package/docs/README.md +11 -1
- package/docs/agent-recipes.md +95 -24
- package/docs/architecture-runtime.md +1 -1
- package/docs/claude-code-plugin.md +164 -0
- package/docs/code-review-agents.md +557 -41
- package/docs/coding-agent-setup.md +566 -8
- package/docs/coding-packages.md +1033 -90
- package/docs/coding-services.md +27 -12
- package/docs/coding-worker-byo-images.md +24 -2
- package/docs/coding-worker-isolation.md +183 -37
- package/docs/debugging-agent-runs.md +242 -0
- package/docs/getting-started-gke.md +129 -141
- package/docs/getting-started-identity-provider.md +53 -38
- package/docs/getting-started.md +17 -0
- package/docs/host-providers.md +294 -0
- package/docs/jira-agents.md +17 -8
- package/docs/knowledge/blob-not-found-semantics.md +41 -0
- package/docs/knowledge/bounded-file-descriptor.md +52 -0
- package/docs/knowledge/delegation-admission-slots.md +52 -0
- package/docs/knowledge/http-dispatcher-bootstrap.md +61 -0
- package/docs/knowledge/import-rename-target.md +52 -0
- package/docs/knowledge/index.md +57 -0
- package/docs/knowledge/log.md +9 -0
- package/docs/knowledge/mcp-cancelled-task-precedence.md +41 -0
- package/docs/knowledge/mcp-http-prompt-discovery.md +41 -0
- package/docs/knowledge/mcp-schema-module-boundary.md +41 -0
- package/docs/knowledge/nullable-tool-uniqueness.md +52 -0
- package/docs/knowledge/overview-cli.md +74 -0
- package/docs/knowledge/overview-coding-proxy.md +72 -0
- package/docs/knowledge/overview-coding.md +72 -0
- package/docs/knowledge/overview-config.md +60 -0
- package/docs/knowledge/overview-core.md +72 -0
- package/docs/knowledge/overview-deploy.md +83 -0
- package/docs/knowledge/overview-mcp.md +61 -0
- package/docs/knowledge/overview-prisma.md +72 -0
- package/docs/knowledge/overview-providers.md +89 -0
- package/docs/knowledge/overview-sandbox.md +83 -0
- package/docs/knowledge/overview-surfaces.md +83 -0
- package/docs/knowledge/private-datastore-shared-boundary.md +54 -0
- package/docs/knowledge/proxy-settlement-projections.md +41 -0
- package/docs/knowledge/run-pricing-first-writer.md +43 -0
- package/docs/knowledge/schedule-claim-transaction.md +41 -0
- package/docs/knowledge/secret-entry-replica-contract.md +52 -0
- package/docs/knowledge/terminal-run-first-writer.md +41 -0
- package/docs/knowledge/transactional-agent-authorization.md +52 -0
- package/docs/knowledge/viewer-notify-write-isolation.md +30 -0
- package/docs/knowledge/warm-input-publication.md +30 -0
- package/docs/knowledge/workspace-staging-failure.md +54 -0
- package/docs/knowledge.md +54 -14
- package/docs/mcp-servers.md +254 -0
- package/docs/native-sandbox.md +143 -31
- package/docs/observability.md +4 -0
- package/docs/security-deployment.md +139 -29
- package/docs/slack-notifications.md +35 -19
- package/docs/tool-secrets.md +45 -10
- package/docs/viewer-api.md +6 -0
- package/docs/viewer-api.openapi.yml +1 -1
- package/help/admin-viewer.md +28 -2
- package/help/agent-recipes.md +33 -2
- package/help/architecture-agent.md +11 -6
- package/help/brokered-secrets.md +3 -0
- package/help/build-claude-code-image.md +1 -1
- package/help/build-worker-image.md +3 -1
- package/help/builder-agent.md +19 -6
- package/help/claude-code-run-pane.md +40 -0
- package/help/code-review-agents.md +177 -6
- package/help/coding-packages.md +156 -6
- package/help/cost-attribution.md +9 -5
- package/help/creating-agents.md +14 -1
- package/help/dependency-cache.md +143 -0
- package/help/deploy-gke.md +15 -8
- package/help/errors/budget-exhausted.md +187 -0
- package/help/errors/budget-group-exhausted.md +5 -1
- package/help/errors/coding-mcp-pins-unavailable.md +35 -0
- package/help/errors/coding-stream-quota-exceeded.md +33 -0
- package/help/errors/coding-workspace-disk-exceeds-limit.md +39 -0
- package/help/errors/continuation-closed.md +9 -12
- package/help/errors/database-auth-invalid.md +1 -1
- package/help/errors/delegation-conflict.md +24 -0
- package/help/errors/file-list-truncated.md +45 -0
- package/help/errors/full-read-required.md +49 -0
- package/help/errors/github-account-not-allowed.md +4 -0
- package/help/errors/graph-incomplete.md +43 -0
- package/help/errors/graph-limit.md +43 -0
- package/help/errors/host-provider-error.md +40 -0
- package/help/errors/host-tool-failed.md +36 -0
- package/help/errors/mcp-call-limit.md +22 -0
- package/help/errors/mcp-call-timeout.md +22 -0
- package/help/errors/mcp-server-auth-failed.md +22 -0
- package/help/errors/mcp-server-credentials-unavailable.md +45 -0
- package/help/errors/mcp-server-error.md +28 -0
- package/help/errors/mcp-server-unreachable.md +22 -0
- package/help/errors/mcp-servers-off.md +21 -0
- package/help/errors/mcp-tool-not-allowed.md +26 -0
- package/help/errors/mcp-tool-removed.md +22 -0
- package/help/errors/mcp-unavailable.md +25 -0
- package/help/errors/merge-conflict.md +49 -0
- package/help/errors/native-sandbox-capacity.md +1 -1
- package/help/errors/native-sandbox-deadline-exceeded.md +1 -1
- package/help/errors/native-sandbox-docker-failed.md +1 -1
- package/help/errors/native-sandbox-gateway-error.md +20 -0
- package/help/errors/native-sandbox-gateway-unavailable.md +1 -1
- package/help/errors/native-sandbox-image-not-pinned.md +1 -1
- package/help/errors/native-sandbox-isolation-mismatch.md +1 -1
- package/help/errors/native-sandbox-launch-abandoned.md +21 -0
- package/help/errors/native-sandbox-network-unenforced.md +1 -1
- package/help/errors/native-sandbox-requires-catalog.md +1 -1
- package/help/errors/native-sandbox-unavailable.md +1 -1
- package/help/errors/native-sandbox-warm-delivery-failed.md +1 -1
- package/help/errors/native-sandbox-worker-exited.md +4 -3
- package/help/errors/native-sandbox-worker-lost.md +1 -1
- package/help/errors/native-sandbox-worker-unready.md +1 -1
- package/help/errors/package-not-allowed-pending.md +52 -0
- package/help/errors/package-not-allowed.md +51 -0
- package/help/errors/package-refusals.md +43 -0
- package/help/errors/patch-cursor-malformed.md +31 -0
- package/help/errors/repository-not-listed.md +36 -0
- package/help/errors/repository-required.md +36 -0
- package/help/errors/run-lost.md +39 -0
- package/help/errors/run-transcript-download.md +44 -0
- package/help/errors/secret-in-value.md +69 -0
- package/help/errors/target-merge.md +40 -0
- package/help/errors/tool-timeout.md +38 -0
- package/help/fix-merge-conflicts.md +73 -0
- package/help/github-app-setup.md +132 -0
- package/help/github.md +22 -0
- package/help/host-providers.md +40 -0
- package/help/identity-and-access.md +6 -1
- package/help/jira.md +23 -6
- package/help/knowledge.md +16 -7
- package/help/local-repositories.md +1 -1
- package/help/low-power-mode.md +7 -1
- package/help/mcp-servers.md +73 -0
- package/help/mcp.md +7 -2
- package/help/merge-order-check.md +5 -0
- package/help/native-capabilities.md +55 -1
- package/help/native-sandbox.md +16 -2
- package/help/operating-agents.md +21 -0
- package/help/package-audit-mode.md +91 -0
- package/help/related-pull-requests.md +17 -10
- package/help/repo-instructions-and-skills.md +3 -1
- package/help/resume-runs-locally.md +134 -0
- package/help/review-fix-rounds.md +33 -1
- package/help/sharing-agents.md +59 -0
- package/help/slack-notifications.md +19 -5
- package/help/status-comments.md +31 -0
- package/help/stop-run.md +58 -0
- package/help/troubleshooting/budgets.md +28 -0
- package/help/troubleshooting/coding-workers.md +86 -7
- package/help/troubleshooting/debugging-agent-runs.md +29 -0
- package/package.json +18 -10
- package/prisma/migrations/20261016000000_registry_approved_accepted_advisories/migration.sql +3 -0
- package/prisma/migrations/20261016000001_mark_ready_when_passing/migration.sql +3 -0
- package/prisma/migrations/20261017000000_debug_trace_max_mb/migration.sql +4 -0
- package/prisma/migrations/20261018000000_dependency_cache/migration.sql +53 -0
- package/prisma/migrations/20261019000000_claude_max_output_tokens/migration.sql +5 -0
- package/prisma/migrations/20261021000000_pr_description_hash/migration.sql +4 -0
- package/prisma/migrations/20261022000000_dependency_snapshot_validation_metadata/migration.sql +4 -0
- package/prisma/migrations/20261023000000_package_audit_mode/migration.sql +27 -0
- package/prisma/migrations/20261024000000_budget_events/migration.sql +26 -0
- package/prisma/migrations/20261025000000_cache_aware_holds/migration.sql +9 -0
- package/prisma/migrations/20261026000000_budget_overrun/migration.sql +4 -0
- package/prisma/migrations/20261027000000_coding_run_request/migration.sql +1 -0
- package/prisma/migrations/20261028000000_native_gateway_review_reads/migration.sql +6 -0
- package/prisma/migrations/20261029000000_lead_survives_deploy/migration.sql +6 -0
- package/prisma/migrations/20261030000000_local_review_covered_sha/migration.sql +2 -0
- package/prisma/migrations/20261031000000_coding_run_budget_limit/migration.sql +9 -0
- package/prisma/migrations/20261101000000_run_transcripts/migration.sql +22 -0
- package/prisma/migrations/20261102000000_host_providers/migration.sql +56 -0
- package/prisma/migrations/20261104000000_coding_agent_repository_list/migration.sql +5 -0
- package/prisma/migrations/20261106000000_tool_timeout/migration.sql +4 -0
- package/prisma/migrations/20261107000000_mcp_servers/migration.sql +33 -0
- package/prisma/migrations/20261108000000_coding_mcp/migration.sql +5 -0
- package/prisma/migrations/20261109000000_task_run_index/migration.sql +3 -0
- package/prisma/schema.prisma +468 -109
- package/scripts/git-askpass.sh +1 -1
- package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# Debugging an agent run
|
|
2
|
+
|
|
3
|
+
You can triage most agent problems yourself with the Wardby MCP and GitHub. Only
|
|
4
|
+
some failures need someone with server logs.
|
|
5
|
+
|
|
6
|
+
## Start here
|
|
7
|
+
|
|
8
|
+
Find the run with `list_runs`, then read it with `get_run`. Then go to the section
|
|
9
|
+
for what you see.
|
|
10
|
+
|
|
11
|
+
```mermaid
|
|
12
|
+
flowchart TD
|
|
13
|
+
start["Find the run: list_runs, then get_run"]
|
|
14
|
+
start --> none["No run started<br/>Check the repo links and triggers"]
|
|
15
|
+
start --> failed["Failed or refused<br/>Read failureCategory and the final text"]
|
|
16
|
+
start --> nopr["Succeeded, no PR<br/>Read outcome in codingResult"]
|
|
17
|
+
start --> missed["PR, but it missed<br/>Read the diff and the review"]
|
|
18
|
+
none --> nopull["See: No pull request appeared"]
|
|
19
|
+
nopr --> nopull
|
|
20
|
+
failed --> runfailed["See: The run failed"]
|
|
21
|
+
missed --> didntfix["See: The agent didn't fix what you expected"]
|
|
22
|
+
runfailed -- still unexplained --> operator["See: When you need an operator"]
|
|
23
|
+
nopr -- why it decided that --> transcript["See: Run transcripts"]
|
|
24
|
+
missed -- why it decided that --> transcript
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## What you can use without server access
|
|
28
|
+
|
|
29
|
+
These all work through the Wardby MCP or GitHub, and you only see runs you have
|
|
30
|
+
access to.
|
|
31
|
+
|
|
32
|
+
| Tool | What it tells you |
|
|
33
|
+
| --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
34
|
+
| `list_runs` (agent id, optional `status`) | An agent's recent runs: status, trigger, cost, turns, final text, and which run started it |
|
|
35
|
+
| `list_runs` without an agent id (from 0.8.0) | Your runs across every agent, each with `agentName`; no final text. `active: true` or `since` (ISO time) narrow it |
|
|
36
|
+
| `get_run` (run id) | One run in full, adding `failureCategory`, `diagnosticId`, `codingResult.outcome`, `request`, budget events and package refusals |
|
|
37
|
+
| `triggerInfo`, `outcomes`, `serviceReadiness` (from 0.8.0, on `get_run` and on `list_runs` without an agent id) | What started the run (the pull request and whether it was a review or a mention, the issue, the schedule or the lead), what it produced (pull requests opened, comments, checks) and each service's state, in the admin viewer API's shapes. Follow a pull request from the run that opened it through its review and fix rounds by matching one run's outcome to the next run's trigger |
|
|
38
|
+
| `get_agent`, `list_repositories`, `list_subagents` | How the agent is set up: prompt, model, budget, repo links and triggers, sub-agents |
|
|
39
|
+
| `search_help`, `get_help_article` | Help for an error code or failure category |
|
|
40
|
+
| `cost_report` | What runs cost, when spend is the question |
|
|
41
|
+
| `get_run_transcript` | The run's conversation, for Claude Code runs with `sessionResume` on |
|
|
42
|
+
| `stop_run` | Stops a run that's stuck |
|
|
43
|
+
| The PR, issue or Jira ticket | The diff, CI, the review, and the comment the run posted |
|
|
44
|
+
|
|
45
|
+
From Wardby 0.8.0, `list_agents` with `summary: true` returns each agent's id,
|
|
46
|
+
name, kind, model, coding provider, budget, owner and your access, without the
|
|
47
|
+
prompt and coding profile. Admins (the `admin` role, `admin:view` scope) can add
|
|
48
|
+
`all: true` to `list_agents` or `list_runs` to see every agent or run in the
|
|
49
|
+
deployment.
|
|
50
|
+
|
|
51
|
+
Admins can also use the [Wardby Viewer](viewer-api.md), a desktop app showing runs,
|
|
52
|
+
sub-agent trees, triggers and outcomes for every owner.
|
|
53
|
+
|
|
54
|
+
## The run failed
|
|
55
|
+
|
|
56
|
+
Call `get_run` and read `status`, `error`, `failureCategory` and the final text. A
|
|
57
|
+
failed coding run's `error` looks like
|
|
58
|
+
`coding_failure_repo_access:coding_diag_…`: the middle part is the stage that
|
|
59
|
+
failed, and the ID is what an operator searches for.
|
|
60
|
+
|
|
61
|
+
| What you see | Likely cause | What to do |
|
|
62
|
+
| ------------------------------- | --------------------------------------------------------- | -------------------------------------------------------------------- |
|
|
63
|
+
| `repo_access` | The agent's owner lost access, or a repo link was removed | Check `list_repositories` and the owner's GitHub access |
|
|
64
|
+
| `repo_access_unavailable` | GitHub couldn't be reached reliably | Try again later |
|
|
65
|
+
| `workspace` | Often a workspace disk size above the server's limit | Lower `workspaceDiskMb`, or ask an operator to raise the limit |
|
|
66
|
+
| `executor` while running checks | The run may have run out of memory, among other causes | Reduce what the checks run; send the ID to an operator if it repeats |
|
|
67
|
+
| `merge_conflict` | The branch conflicts with its target | Read the `merge-conflict` help article |
|
|
68
|
+
| `service_unready` | A service the run needs, such as Postgres, didn't start | Check `.wardby/services.yaml` and the agent's `services` |
|
|
69
|
+
| `coding_turn_limit` | The run used all its turns | Raise `maxTurns` or narrow the task |
|
|
70
|
+
| `budgetEvents`, or `refused` | The run, run tree or budget group ran out of money | Raise the budget or check spend with `cost_report` |
|
|
71
|
+
| `packageRefusals` | A package isn't allowed or is too new | Add it to `packageAllowlist`, or wait out the release age limit |
|
|
72
|
+
|
|
73
|
+
For anything else, call `search_help` with the code or category. If that doesn't
|
|
74
|
+
explain it, see [When you need an operator](#when-you-need-an-operator).
|
|
75
|
+
|
|
76
|
+
**Prompt for Claude Code:**
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
Wardby run <run id> failed. Why, and what can I do about it?
|
|
80
|
+
If it needs server logs, give me the diagnosticId.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## No pull request appeared
|
|
84
|
+
|
|
85
|
+
First find out whether a run started, using `list_runs` on the lead or router,
|
|
86
|
+
then on the coding agent.
|
|
87
|
+
|
|
88
|
+
| What `list_runs` shows | What it means | What to do |
|
|
89
|
+
| -------------------------------- | ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
|
|
90
|
+
| No new run | The request never started anything: nothing is linked with that trigger, or the person doesn't have access | Check `list_repositories` on the router. Only one agent per repo can hold the `mention` trigger |
|
|
91
|
+
| Lead ran, no coding run under it | The lead chose not to delegate | Read the lead's final text, which should say why |
|
|
92
|
+
| Coding run failed or was refused | See [The run failed](#the-run-failed) | |
|
|
93
|
+
| Coding run succeeded, with no PR | Check `codingResult.outcome` in `get_run` | See below |
|
|
94
|
+
|
|
95
|
+
| `outcome` | Meaning |
|
|
96
|
+
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
97
|
+
| `no_changes` | The agent changed nothing. Its final text should say why: the request may be vague or already done. On Claude Code, the transcript shows how it decided |
|
|
98
|
+
| `budget_exhausted` | It ran out of money before finishing. Raise the budget or narrow the task |
|
|
99
|
+
| `branch_pushed` | A local repo: there's a branch, and no PR by design |
|
|
100
|
+
|
|
101
|
+
A mention can also get no reply at all. If a server sets
|
|
102
|
+
`WARDBY_MENTION_EXPLANATIONS=false`, a mention that starts nothing stays silent. An
|
|
103
|
+
operator can look for `mention ignored` or `mention declined` in the server log.
|
|
104
|
+
|
|
105
|
+
**Prompt for Claude Code:**
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
I asked Wardby agent <agent name> to <request> in <your-org/your-repo>,
|
|
109
|
+
and no pull request appeared. Why?
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## The agent didn't fix what you expected
|
|
113
|
+
|
|
114
|
+
The run succeeded, so most of what you need is on the PR and the run, with no
|
|
115
|
+
server logs involved. Check these in order:
|
|
116
|
+
|
|
117
|
+
1. **The diff:** what actually changed.
|
|
118
|
+
2. **The PR description:** the run's final text, including what it says it tested.
|
|
119
|
+
If it says the tests weren't run, trust CI.
|
|
120
|
+
3. **The review:** whether your review check caught the miss.
|
|
121
|
+
4. **The request:** whether the issue or mention said what you meant.
|
|
122
|
+
5. **The task the agent received:** `request` in `get_run` (from Wardby 0.8.0). On a
|
|
123
|
+
delegated run, this shows what the lead told the coding agent.
|
|
124
|
+
6. **The transcript:** why it decided that. This is only for Claude Code runs with
|
|
125
|
+
`sessionResume` on.
|
|
126
|
+
|
|
127
|
+
The usual causes are a vague request, a lead that dropped something when it rewrote
|
|
128
|
+
the request, a repo rule missing from `AGENTS.md`, or a fix aimed at the symptom it
|
|
129
|
+
was told about.
|
|
130
|
+
|
|
131
|
+
**To fix it,** comment on the PR, mentioning the App, with what's wrong. The
|
|
132
|
+
follow-up pushes to the same branch and PR, so you don't start again. If the same
|
|
133
|
+
miss keeps happening, add the rule to `AGENTS.md` so future runs follow it.
|
|
134
|
+
|
|
135
|
+
**Prompt for Claude Code:**
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
PR <PR URL> from Wardby didn't do what I expected: <what you expected>.
|
|
139
|
+
Where did it go wrong? Draft a follow-up comment, but don't post it.
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Run transcripts
|
|
143
|
+
|
|
144
|
+
A transcript is the run's conversation: the messages, the tool calls and their
|
|
145
|
+
results, and the files and skills the agent loaded. You can get it yourself,
|
|
146
|
+
without server access, on Claude Code agents.
|
|
147
|
+
|
|
148
|
+
**To turn it on,** set `codingProfile.sessionResume` to `true` with `update_agent`.
|
|
149
|
+
It's off by default and has to be turned on for each agent. It only applies to runs
|
|
150
|
+
started afterward, so an earlier failure has no transcript. The server also needs a
|
|
151
|
+
blob store, set in the environment of the process that launches coding runs:
|
|
152
|
+
`BLOB_STORE` set to `local`, `gcs` or `s3`, plus `BLOB_STORE_LOCAL_DIR`,
|
|
153
|
+
`BLOB_STORE_GCS_BUCKET`, or `BLOB_STORE_S3_BUCKET` and `BLOB_STORE_S3_REGION`.
|
|
154
|
+
Without `BLOB_STORE`, no transcript is stored.
|
|
155
|
+
|
|
156
|
+
**To read one,** call `get_run_transcript` with the run ID. It returns a download
|
|
157
|
+
link that works for 10 minutes and a command. Run `npx @wardby/cli@latest resume -`
|
|
158
|
+
in a clone of the repo and paste the link, which also lets you continue the session
|
|
159
|
+
on your machine.
|
|
160
|
+
|
|
161
|
+
| Transcripts | |
|
|
162
|
+
| ------------------ | ------------------------------------------------------------------------------ |
|
|
163
|
+
| **Who can read** | Anyone who can read the run: the person who triggered it and the agent's owner |
|
|
164
|
+
| **Stored for** | Runs that finish, fail, or stop at their budget |
|
|
165
|
+
| **Not stored for** | Runs stopped with `stop_run` or ended by their timeout |
|
|
166
|
+
| **Removed** | Thinking blocks, the system prompt, the worker's environment, account details |
|
|
167
|
+
| **Redacted** | The agent's attached secrets and the run's own tokens |
|
|
168
|
+
| **Not available** | On Codex agents |
|
|
169
|
+
|
|
170
|
+
Redaction removes secret values, not other sensitive text, so a transcript includes
|
|
171
|
+
what the agent saw in the repo and in command output. Turn this on only for agents
|
|
172
|
+
whose runs you're comfortable sharing with everyone who can read them.
|
|
173
|
+
|
|
174
|
+
**Prompts for Claude Code:**
|
|
175
|
+
|
|
176
|
+
To turn it on:
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
Turn on transcripts for Wardby agent <agent name>.
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
To get one:
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
Get me the transcript for Wardby run <run id>.
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
See [Resume Claude Code runs locally](../help/resume-runs-locally.md) for more.
|
|
189
|
+
|
|
190
|
+
## When you need an operator
|
|
191
|
+
|
|
192
|
+
Ask someone with server access when `get_run` and help don't explain a failure. The
|
|
193
|
+
specific reason for a failed coding run is written only to the server log, under
|
|
194
|
+
its `diagnosticId`.
|
|
195
|
+
|
|
196
|
+
**Send them:** the run ID, the `diagnosticId`, the repo, and what you expected to
|
|
197
|
+
happen.
|
|
198
|
+
|
|
199
|
+
**What the operator can do:**
|
|
200
|
+
|
|
201
|
+
1. Search the control-plane log for the `diagnosticId`, which holds the real reason.
|
|
202
|
+
2. If that isn't enough, turn on the
|
|
203
|
+
[debug trace](coding-worker-isolation.md#debug-trace) with `debugTraceMinutes`
|
|
204
|
+
and reproduce the failure.
|
|
205
|
+
|
|
206
|
+
The debug trace won't help you directly. Only admins can turn it on, it only covers
|
|
207
|
+
runs started afterward, and its output goes to the run's worker log, which you can't
|
|
208
|
+
read. It can include prompts and repo content, so it isn't exposed through MCP.
|
|
209
|
+
|
|
210
|
+
**What the trace holds:** the agent's whole stream, the commands it ran with their
|
|
211
|
+
output (Claude Code), final usage and duration, and stream failures in full.
|
|
212
|
+
Token-shaped values are redacted. It stops at 2 MiB per run by default.
|
|
213
|
+
|
|
214
|
+
**What MCP gives you:** the trace itself isn't available through MCP. You can only
|
|
215
|
+
turn it on or off with `update_agent` (admin role), see when it expires with
|
|
216
|
+
`get_agent` (`debugTraceUntil`), and see whether a run was traced with `get_run`
|
|
217
|
+
(`debugTrace: true`).
|
|
218
|
+
|
|
219
|
+
**Prompt to try first.** Paste this into any client connected to the Wardby MCP:
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
Wardby run <run id> didn't do what I expected. What happened, and what can I do?
|
|
223
|
+
If it needs server logs, give me the diagnosticId.
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Known gaps
|
|
227
|
+
|
|
228
|
+
Two things can't be answered without server access yet.
|
|
229
|
+
|
|
230
|
+
| Gap | Why it matters | What you can do |
|
|
231
|
+
| --------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------- |
|
|
232
|
+
| The specific reason a coding run failed | You get the stage, such as `executor`, but not why | Send the `diagnosticId` to an operator |
|
|
233
|
+
| Why a mention got no reply | With explanations off, a declined mention leaves no reply and no run | Turn explanations on where that's acceptable: `true` is the default |
|
|
234
|
+
|
|
235
|
+
**To turn explanations on,** an operator removes
|
|
236
|
+
`WARDBY_MENTION_EXPLANATIONS=false` from the server's settings, or sets it to
|
|
237
|
+
`true`, then redeploys. Once on, the GitHub App replies to say why a mention started
|
|
238
|
+
nothing. On a public repo, anyone who can read that comment can see what is or isn't
|
|
239
|
+
linked there.
|
|
240
|
+
|
|
241
|
+
Run transcripts are limited to Claude Code runs with `sessionResume` on, so they
|
|
242
|
+
don't help on Codex agents.
|
|
@@ -50,6 +50,7 @@ Install and authenticate:
|
|
|
50
50
|
- `kubectl`
|
|
51
51
|
- Helm 3 or later (installs External Secrets Operator)
|
|
52
52
|
- Node.js 24 and npm
|
|
53
|
+
- `curl`, `openssl` and `base64` (the database grants step uses them)
|
|
53
54
|
|
|
54
55
|
You also need:
|
|
55
56
|
|
|
@@ -200,7 +201,9 @@ refuses to start with either one set and no token.
|
|
|
200
201
|
`WARDBY_GITHUB_ALLOWED_ACCOUNTS` (optional, not a secret) adds GitHub accounts
|
|
201
202
|
the App serves besides its owner. Pass it to `up.sh` on every run, for example
|
|
202
203
|
`WARDBY_GITHUB_ALLOWED_ACCOUNTS=acme-labs WARDBY_HOSTNAME=app.example.com deploy/gke/up.sh`;
|
|
203
|
-
a run without it serves only the App's owner.
|
|
204
|
+
a run without it serves only the App's owner. `up.sh` gives the same value to
|
|
205
|
+
the control plane and to the native sandbox gateway, which runs sandboxed
|
|
206
|
+
agents' repository tools. See
|
|
204
207
|
[Which accounts the App serves](code-review-agents.md#which-accounts-the-app-serves-wardby_github_allowed_accounts).
|
|
205
208
|
|
|
206
209
|
`WARDBY_MOBILE_ENABLED=true` (optional, not a secret) lets the Wardby mobile app
|
|
@@ -210,6 +213,11 @@ sign-in off. It works for normal and low-power deploys. White-label builds that
|
|
|
210
213
|
use their own redirect URI add `WARDBY_MOBILE_REDIRECT_URI` to the control
|
|
211
214
|
plane's `env` themselves. See the help article `mobile-app`.
|
|
212
215
|
|
|
216
|
+
`WARDBY_MENTION_EXPLANATIONS=false` (optional, not a secret) stops the GitHub
|
|
217
|
+
App replying to say why a mention started nothing; pass it to `up.sh` on every
|
|
218
|
+
run, the same way. See
|
|
219
|
+
[What a linked review agent does](code-review-agents.md#what-a-linked-review-agent-does).
|
|
220
|
+
|
|
213
221
|
Generate `SECRET_APP_KEY` with:
|
|
214
222
|
|
|
215
223
|
```sh
|
|
@@ -315,10 +323,9 @@ Allow DNS and the managed certificate to converge before treating an HTTPS
|
|
|
315
323
|
failure as an application failure.
|
|
316
324
|
|
|
317
325
|
On a brand-new project, run `terraform apply` and then
|
|
318
|
-
`bootstrap-database-iam.sh` before `up.sh`: the bootstrap has to
|
|
319
|
-
migrator before any migration can run. See "Database login" below
|
|
320
|
-
|
|
321
|
-
bootstrap run has granted the coding proxy too.
|
|
326
|
+
`bootstrap-database-iam.sh` once before the first `up.sh`: the bootstrap has to
|
|
327
|
+
grant the migrator before any migration can run. See "Database login" below
|
|
328
|
+
for the exact order.
|
|
322
329
|
|
|
323
330
|
### Database login
|
|
324
331
|
|
|
@@ -327,20 +334,19 @@ through the Cloud SQL Auth Proxy, via Workload Identity from one Kubernetes
|
|
|
327
334
|
service account. What each may do inside the database comes from a `NOLOGIN`
|
|
328
335
|
group role in `deploy/gke/database-grants.sql`:
|
|
329
336
|
|
|
330
|
-
| Workload | Google service account | Kubernetes service account | May do
|
|
331
|
-
| -------------- | ------------------------ | -------------------------- |
|
|
332
|
-
| Control plane | `<name_prefix>-app` | `wardby-control-plane` | `wardby_app`: read/write every table, including the durable executor's in schema `dbos`; never change a schema
|
|
333
|
-
| Coding proxy | `<name_prefix>-proxy` | `wardby-coding-proxy` | `wardby_proxy`:
|
|
334
|
-
| Native gateway | `<name_prefix>-gateway` | `wardby-native-gateway` | Member of `wardby_app`: the same data access as the control plane, under its own login (see [Native sandbox](#native-sandbox))
|
|
335
|
-
| Migrations | `<name_prefix>-migrator` | `wardby-migrator` | Acts as the table owner (`SET ROLE`), so `prisma migrate deploy` and `dbos schema` can alter and create tables
|
|
337
|
+
| Workload | Google service account | Kubernetes service account | May do |
|
|
338
|
+
| -------------- | ------------------------ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
339
|
+
| Control plane | `<name_prefix>-app` | `wardby-control-plane` | `wardby_app`: read/write every table, including the durable executor's in schema `dbos`; never change a schema |
|
|
340
|
+
| Coding proxy | `<name_prefix>-proxy` | `wardby-coding-proxy` | `wardby_proxy`: its budget ledger (`CodingProxySession`/`CodingProxyRequest`/`RunModelUsage`: read, insert, update), the package registry's tables (`RegistryAllowance`, `RegistryFetch`, `RegistryAuditRecord`, `RegistryVersionFact`, `RegistryApprovedVersion`, `RegistryPlanRefusal`: read and insert only), the dependency cache's `DependencySnapshot` (read, insert, update, delete), update `tokensIn`, `tokensOut`, `costUsd` and `turns` on `Run` and read only its `id`, and read only the `runId`, `packageAllowlist`, `packagePolicy`, `repository`, `workerImage`, `toolImage`, `dependencyCache` and `packageAuditMode` columns of `CodingRun` |
|
|
341
|
+
| Native gateway | `<name_prefix>-gateway` | `wardby-native-gateway` | Member of `wardby_app`: the same data access as the control plane, under its own login (see [Native sandbox](#native-sandbox)) |
|
|
342
|
+
| Migrations | `<name_prefix>-migrator` | `wardby-migrator` | Acts as the table owner (`SET ROLE`), so `prisma migrate deploy` and `dbos schema` can alter and create tables |
|
|
336
343
|
|
|
337
344
|
`deploy/gke/bootstrap-database-iam.sh` applies the grants as the built-in
|
|
338
|
-
owner, from a short-lived Job inside the cluster.
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
grants
|
|
343
|
-
The grants run in one transaction, so a statement the database refuses leaves
|
|
345
|
+
owner, from a short-lived Job inside the cluster. `up.sh` runs it on every
|
|
346
|
+
deploy, after the migrations and before the rollout (see
|
|
347
|
+
[Upgrading an existing deployment](#upgrading-an-existing-deployment)); you
|
|
348
|
+
run it by hand only on a brand-new project, below, or with `--check`. The
|
|
349
|
+
grants run in one transaction, so a statement the database refuses leaves
|
|
344
350
|
nothing applied.
|
|
345
351
|
|
|
346
352
|
The built-in owner is not a Terraform resource: `bootstrap-database-iam.sh`
|
|
@@ -349,119 +355,28 @@ SQL Admin API, uses that password once to apply the grants, and resets it to
|
|
|
349
355
|
a value nobody holds on every exit, including a failed grant. No password is
|
|
350
356
|
ever stored, printed, or passed as a process argument.
|
|
351
357
|
|
|
352
|
-
A deployment that already runs and then gains the native gateway identity from
|
|
353
|
-
`terraform apply` runs `deploy/gke/bootstrap-database-iam.sh` once, so the
|
|
354
|
-
gateway's user gets its `wardby_app` membership, and then `deploy/gke/up.sh`.
|
|
355
|
-
`up.sh`'s database check also tests the native gateway and says so if the
|
|
356
|
-
grant is missing.
|
|
357
|
-
|
|
358
358
|
A brand-new project runs, in this order:
|
|
359
359
|
|
|
360
360
|
1. `terraform -chdir=deploy/gke apply` — creates the cluster, the instance
|
|
361
361
|
and the four IAM database users. Run it yourself rather than through
|
|
362
362
|
`up.sh`, which would go on to the migrations before the migrator has its
|
|
363
363
|
grants.
|
|
364
|
-
2. `deploy/gke/bootstrap-database-iam.sh`
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
3. `deploy/gke/up.sh` — applies the migrations
|
|
369
|
-
|
|
370
|
-
exist in step 2.
|
|
371
|
-
4. `deploy/gke/bootstrap-database-iam.sh` again — now that the tables exist,
|
|
372
|
-
also applies the coding proxy's ledger grants.
|
|
373
|
-
5. `deploy/gke/up.sh` — rolls out again and passes every check.
|
|
374
|
-
|
|
375
|
-
Two bootstrap runs, not one: a grant on a named table can't apply before the
|
|
376
|
-
migration that creates that table has run.
|
|
377
|
-
|
|
378
|
-
The same applies to every later release that adds a table the coding proxy
|
|
379
|
-
uses: run `bootstrap-database-iam.sh` again after its migration. `up.sh`
|
|
380
|
-
checks this for you. After the rollout it asks the database, as the proxy's
|
|
381
|
-
own role, for every privilege `database-grants.sql` gives `wardby_proxy`
|
|
382
|
-
(`deploy/gke/proxy-grant-checks.mjs`), and stops with the list of missing
|
|
383
|
-
grants instead of letting the proxy fail registry requests with "permission
|
|
384
|
-
denied".
|
|
385
|
-
|
|
386
|
-
After upgrading an existing deployment to a release with cost attribution,
|
|
387
|
-
re-run `bootstrap-database-iam.sh` so the coding proxy can record per-model
|
|
388
|
-
usage for coding runs (used by the `cost_report` tool's `model` grouping).
|
|
389
|
-
Until then coding runs still work, but their per-model breakdown isn't
|
|
390
|
-
recorded.
|
|
364
|
+
2. `deploy/gke/bootstrap-database-iam.sh` — fetches the cluster's kubectl
|
|
365
|
+
credentials if you don't have them yet, creates the owner, and applies the
|
|
366
|
+
migrator's (and the app's) grants. Grants on tables that don't exist yet
|
|
367
|
+
are skipped: expected.
|
|
368
|
+
3. `deploy/gke/up.sh` — applies the migrations, then the grants again (now
|
|
369
|
+
that every table exists), then rolls out and passes every check.
|
|
391
370
|
|
|
392
371
|
`bootstrap-database-iam.sh --check` runs the grants inside a transaction that
|
|
393
372
|
is then rolled back, and reports success or the exact statement the database
|
|
394
|
-
refused, without changing
|
|
395
|
-
deployment.
|
|
373
|
+
refused, without changing any grant. Use it to see why a grants step failed.
|
|
396
374
|
|
|
397
375
|
`connector_enforcement` (the Cloud SQL instance setting) defaults to
|
|
398
376
|
`REQUIRED`: it refuses any connection that does not come through the Auth
|
|
399
377
|
Proxy or a Cloud SQL connector, and with port 5432 to the instance closed in
|
|
400
378
|
every NetworkPolicy, there's no route left for a plain Postgres connection to
|
|
401
|
-
even attempt. Leave it at the default
|
|
402
|
-
login moves off it on an earlier revision of this module, below.
|
|
403
|
-
|
|
404
|
-
### Moving an older deployment
|
|
405
|
-
|
|
406
|
-
A deployment still on password login — from before this module retired it —
|
|
407
|
-
can't adopt this revision directly: this revision no longer syncs the
|
|
408
|
-
password `DATABASE_URL`, closes port 5432 and refuses non-Auth-Proxy
|
|
409
|
-
connections, which would cut off pods still logging in with the password.
|
|
410
|
-
It moves over in stages, because real pods are already serving traffic
|
|
411
|
-
throughout.
|
|
412
|
-
|
|
413
|
-
**1–2. Cut the running pods to IAM login, on the revision before this one.**
|
|
414
|
-
Check out the revision of this module that added IAM login, before the
|
|
415
|
-
password was retired: the merge of pull request #83 into `main`.
|
|
416
|
-
`git log --oneline --first-parent main -- deploy/gke` lists the merges that
|
|
417
|
-
changed this module, newest first; it's the one titled
|
|
418
|
-
`Merge pull request #83 ...`, just below the merge that retired the password
|
|
419
|
-
(`git log --oneline --merges --grep='#83' main` finds it directly). Then
|
|
420
|
-
`git checkout <that commit>` and follow that revision's own
|
|
421
|
-
`docs/getting-started-gke.md`, "Database login", and its order for "an
|
|
422
|
-
existing deployment still on password login": `bootstrap-database-iam.sh
|
|
423
|
-
--password-from-stdin --check`, the same without `--check`, then `up.sh`.
|
|
424
|
-
That rolls out password-less pods while the password still works as a
|
|
425
|
-
fallback, and proves the control plane and the coding proxy each read the
|
|
426
|
-
database through their own IAM login. That revision's
|
|
427
|
-
`connector_enforcement` default is still `NOT_REQUIRED`, so nothing that
|
|
428
|
-
still uses the password is cut off. Then return to this revision
|
|
429
|
-
(`git checkout main`) for the last stage.
|
|
430
|
-
|
|
431
|
-
**3. Retire the password**, once every pod speaks IAM login and this change
|
|
432
|
-
has merged to `main`:
|
|
433
|
-
|
|
434
|
-
1. Confirm nothing still uses the password: both Deployments' pods log in as
|
|
435
|
-
IAM users, and no pod has a password `DATABASE_URL` in its effective env.
|
|
436
|
-
2. Delete the `database-url` Secret Manager secret:
|
|
437
|
-
`gcloud secrets delete <name_prefix>-database-url --quiet` — this module no
|
|
438
|
-
longer creates or reads it. Deleting it by hand first, before the next
|
|
439
|
-
step, is what lets Terraform drop it from state instead of trying to
|
|
440
|
-
destroy it.
|
|
441
|
-
3. Remove any `connector_enforcement` line from `terraform.tfvars` (or set
|
|
442
|
-
it to `REQUIRED`), so the new default takes effect. Then `terraform plan`:
|
|
443
|
-
expect the generated password destroyed, the `database-url` secret and
|
|
444
|
-
its IAM binding gone from state (already deleted by hand), the old
|
|
445
|
-
password-login user forgotten (not destroyed), `connector_enforcement`
|
|
446
|
-
moving to `REQUIRED` on the instance (updated in place, not replaced),
|
|
447
|
-
and no other destroy. Review
|
|
448
|
-
the plan, then apply only once it matches that. If apply still fails
|
|
449
|
-
trying to destroy the `database-url` secret, the secret wasn't actually
|
|
450
|
-
deleted in step 2 — delete it and re-apply. Never turn off
|
|
451
|
-
`secrets_deletion_protection` to get past that error: it unprotects every
|
|
452
|
-
other secret in the same set, including `SECRET_APP_KEY` and the auth
|
|
453
|
-
keys, and losing `SECRET_APP_KEY` makes every credential already stored
|
|
454
|
-
in the database unreadable.
|
|
455
|
-
4. `deploy/gke/up.sh` — new ExternalSecrets carry no `DATABASE_URL`,
|
|
456
|
-
NetworkPolicies no longer allow 5432, migrations, rollout, and the
|
|
457
|
-
database and endpoint checks.
|
|
458
|
-
5. `deploy/gke/bootstrap-database-iam.sh` (default mode) — the guard now
|
|
459
|
-
passes, since the Secret no longer has a `DATABASE_URL`: it sets a
|
|
460
|
-
one-time owner password, reapplies the grants, and resets the password to
|
|
461
|
-
a value nobody holds.
|
|
462
|
-
6. Verify: a direct password connection is refused (NetworkPolicy blocks
|
|
463
|
-
5432, and the instance refuses it too), the pods still log in through
|
|
464
|
-
IAM, and the Terraform state holds no database password.
|
|
379
|
+
even attempt. Leave it at the default.
|
|
465
380
|
|
|
466
381
|
## 7. Verify
|
|
467
382
|
|
|
@@ -486,9 +401,10 @@ server answers `415`, because it checks the content type before the token.
|
|
|
486
401
|
Create the first self-hosted login credential. It is printed once.
|
|
487
402
|
`--role admin` makes this operator account an admin. Only admins can use all
|
|
488
403
|
the privileged operations: `make_owner`, BYO `workerImageRef`, package
|
|
489
|
-
approval, service catalog changes,
|
|
490
|
-
`package-approver` can approve packages only, a
|
|
491
|
-
the service catalog only,
|
|
404
|
+
approval, service catalog changes, model catalog changes, and host providers
|
|
405
|
+
(`hosts:admin`). A `package-approver` can approve packages only, a
|
|
406
|
+
`service-manager` can change the service catalog only, a `model-manager` can
|
|
407
|
+
change the model catalog only, and a `host-manager` can manage host providers
|
|
492
408
|
only. Users created without `--role` have no roles. See
|
|
493
409
|
[roles and privileged operations](security-deployment.md#roles-and-privileged-operations).
|
|
494
410
|
|
|
@@ -552,6 +468,38 @@ roll; if it fails, `up.sh` prints the `migrate` and `cloud-sql-proxy` container
|
|
|
552
468
|
logs (and, if those are empty or the Job timed out, the Job's and pod's
|
|
553
469
|
events), then stops.
|
|
554
470
|
|
|
471
|
+
### Upgrading an existing deployment
|
|
472
|
+
|
|
473
|
+
To upgrade, check out the new release and re-run `deploy/gke/up.sh`. No
|
|
474
|
+
manual database step is needed: `up.sh` applies the migrations, then the
|
|
475
|
+
database grants (`deploy/gke/bootstrap-database-iam.sh`, which applies
|
|
476
|
+
`deploy/gke/database-grants.sql`), and only then rolls out the new pods. A
|
|
477
|
+
release that adds a table, a column, or a workload that needs a new grant
|
|
478
|
+
therefore never runs without it.
|
|
479
|
+
|
|
480
|
+
- **If the migrations fail**, `up.sh` stops before the grants and the
|
|
481
|
+
rollout; the running version is untouched.
|
|
482
|
+
- **If the grants fail**, `up.sh` stops before the rollout with a non-zero
|
|
483
|
+
exit; the running version keeps serving. The migrations already applied
|
|
484
|
+
are additive, so the running version tolerates them. Run
|
|
485
|
+
`deploy/gke/bootstrap-database-iam.sh --check` to see the exact statement
|
|
486
|
+
the database refused without changing anything, fix the cause, and re-run
|
|
487
|
+
`up.sh`.
|
|
488
|
+
- **After the rollout**, `up.sh` checks that each new pod can read the
|
|
489
|
+
database, and asks the database, as the coding proxy's own role, for every
|
|
490
|
+
privilege `database-grants.sql` gives it
|
|
491
|
+
(`deploy/gke/proxy-grant-checks.mjs`). A missing grant stops the deploy
|
|
492
|
+
with a non-zero exit and the list of what's missing, rather than letting
|
|
493
|
+
the proxy fail registry requests with "permission denied".
|
|
494
|
+
|
|
495
|
+
Never run two `up.sh` deploys against the same project at once: both would
|
|
496
|
+
run migrations, set and reset the database owner's password, and roll out
|
|
497
|
+
over each other. Nothing locks against it, so wait for one to finish.
|
|
498
|
+
|
|
499
|
+
You run `bootstrap-database-iam.sh` by hand only on a brand-new project,
|
|
500
|
+
between `terraform apply` and the first `up.sh` (see
|
|
501
|
+
[Database login](#database-login)), or as `--check` for a dry run.
|
|
502
|
+
|
|
555
503
|
### Durable executor
|
|
556
504
|
|
|
557
505
|
The control plane runs native runs on the durable executor (`EXECUTOR=dbos`):
|
|
@@ -576,24 +524,33 @@ the step that was in flight runs again. Coding runs are Kubernetes Jobs and are
|
|
|
576
524
|
`up.sh` re-run whose source did not change, runs continue. When you deploy
|
|
577
525
|
new code, the old pod first **drains**: after its 30-second `preStop` it
|
|
578
526
|
stops the scheduler and waits for the runs it is executing to finish, up to
|
|
579
|
-
`SHUTDOWN_DRAIN_SECONDS` (
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
527
|
+
`SHUTDOWN_DRAIN_SECONDS` (540 in the GKE manifest), while the new pod
|
|
528
|
+
serves traffic. Open HTTP connections, such as a connected MCP client's
|
|
529
|
+
stream, get 10 seconds to finish and are then closed; clients reconnect to
|
|
530
|
+
the new pod.
|
|
531
|
+
An idle pod exits at once. A native run that is waiting in a `delegate_to_*`
|
|
532
|
+
call on a coding sub-agent or a sandbox-mode native sub-agent is taken over
|
|
533
|
+
by the new version: it continues when the sub-agent finishes, without
|
|
534
|
+
repeating the turns it already took. A run that was mid-turn, waiting on
|
|
535
|
+
another tool, or waiting on a control-plane native sub-agent is marked
|
|
536
|
+
`lost` rather than taken over, as is a taken-over run whose recorded steps
|
|
537
|
+
no longer match the new code, and a run still going after the drain limit.
|
|
538
|
+
The sub-agent runs a lost run started are stopped (reason
|
|
539
|
+
`parent run lost`). If an `@`-mention started a lost run, its status comment
|
|
540
|
+
on GitHub says the request was interrupted and should be repeated. The
|
|
541
|
+
manifest's `terminationGracePeriodSeconds` (600) must stay above the drain
|
|
542
|
+
limit plus the `preStop` delay. Autopilot does not allow more than 600: a
|
|
543
|
+
larger value is lowered to 600, so to change the budget, lower
|
|
544
|
+
`SHUTDOWN_DRAIN_SECONDS` rather than raising the grace period.
|
|
585
545
|
- **Data at rest and retention.** `dbos.operation_outputs` holds every step's
|
|
586
546
|
output — prompts, model responses and full tool results — with no retention
|
|
587
547
|
limit. Pruning finished workflows is the operator's job; see
|
|
588
548
|
[Durable executor](security-deployment.md#durable-executor) for what is
|
|
589
549
|
stored and how to prune it with `DBOS.deleteWorkflow`.
|
|
590
550
|
|
|
591
|
-
**Enabling it on an existing deployment.**
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
grants the new control-plane pod crash-loops with "permission denied" while
|
|
595
|
-
the old one keeps serving, and `up.sh` stops at the rollout. On a brand-new
|
|
596
|
-
project the order under "Database login" already covers it.
|
|
551
|
+
**Enabling it on an existing deployment.** Re-run `deploy/gke/up.sh`: it
|
|
552
|
+
applies the durable executor's grants before the rollout (see
|
|
553
|
+
[Upgrading an existing deployment](#upgrading-an-existing-deployment)).
|
|
597
554
|
|
|
598
555
|
**Switching back** to the in-process executor: set `EXECUTOR` to `in-process`
|
|
599
556
|
in `deploy/kind-coding/manifests/overlays/gke-autopilot/control-plane.yaml`
|
|
@@ -629,7 +586,7 @@ delete the class and re-run `up.sh` to change them.
|
|
|
629
586
|
|
|
630
587
|
### Native sandbox
|
|
631
588
|
|
|
632
|
-
Native sandbox requires Wardby 0.
|
|
589
|
+
Native sandbox requires Wardby 0.6.0 or later.
|
|
633
590
|
|
|
634
591
|
`up.sh` deploys everything the [native sandbox](native-sandbox.md) needs on
|
|
635
592
|
this cluster. It builds and pushes the `native-worker` image, checks it (Node is
|
|
@@ -643,10 +600,10 @@ control plane is configured with `NATIVE_SANDBOX_LAUNCHER=kubernetes`,
|
|
|
643
600
|
`NATIVE_SANDBOX_ENFORCEMENT_TIMEOUT_MS=60000`. Worker pods use the gVisor runtime
|
|
644
601
|
class, `KUBERNETES_PLATFORM=gke-autopilot`, and the run priority class.
|
|
645
602
|
|
|
646
|
-
- **
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
[
|
|
603
|
+
- **Database login.** The gateway has its own database login. `up.sh`
|
|
604
|
+
applies its `wardby_app` membership before the rollout, so adding its
|
|
605
|
+
identity to an existing deployment needs no manual step; see
|
|
606
|
+
[Upgrading an existing deployment](#upgrading-an-existing-deployment).
|
|
650
607
|
- **Enable per agent.** Nothing runs in the sandbox until you opt an agent in:
|
|
651
608
|
set its `nativeExecutionMode` to `sandbox` with the `update_agent` MCP tool
|
|
652
609
|
(native agents only).
|
|
@@ -723,6 +680,13 @@ low-power mode until its rollout ends, and the mark stops it scaling them back
|
|
|
723
680
|
down. With the mode on they stay up through the deploy (its database checks
|
|
724
681
|
need them) and sleep one idle window later if nothing uses them.
|
|
725
682
|
|
|
683
|
+
**Failed replicas.** Without the headroom placeholder, a rollout is more likely
|
|
684
|
+
to hit Autopilot's admission race: the node rejects a new pod with `OutOfcpu`
|
|
685
|
+
and the Deployment starts a replacement. The rejected pod stays behind as a
|
|
686
|
+
Failed pod. After the rollouts, `up.sh` deletes Failed pods of the control
|
|
687
|
+
plane, coding proxy and native gateway (never coding-run or sandbox pods), and
|
|
688
|
+
the Viewer shows any such leftover as an old replica rather than a failure.
|
|
689
|
+
|
|
726
690
|
**Sleeping now.** To skip the idle window (for example right after a test), an
|
|
727
691
|
admin calls the MCP tool `power_sleep`, optionally with `target` set to `proxy`
|
|
728
692
|
or `gateway` (default both). It scales the target to 0 at once, but never stops
|
|
@@ -792,6 +756,32 @@ that schedules onto a fresh node — one that has never pulled the image before
|
|
|
792
756
|
cached. Raise `KUBERNETES_READY_TIMEOUT_MS` if you see runs fail
|
|
793
757
|
`service_unready` only on new nodes.
|
|
794
758
|
|
|
759
|
+
### Run dependency cache
|
|
760
|
+
|
|
761
|
+
Off by default. To keep npm `node_modules` snapshots for coding runs
|
|
762
|
+
(see [Dependency cache](coding-packages.md#dependency-cache)), set
|
|
763
|
+
`dependency_cache_enabled = true` and a unique `dependency_cache_bucket_name` in
|
|
764
|
+
`terraform.tfvars`, and deploy with `WARDBY_DEPENDENCY_CACHE=true
|
|
765
|
+
deploy/gke/up.sh` (it grants the coding proxy's role the `DependencySnapshot`
|
|
766
|
+
table before the rollout; see
|
|
767
|
+
[Upgrading an existing deployment](#upgrading-an-existing-deployment)). Keep
|
|
768
|
+
`dependency_cache_max_age_days` equal to the proxy's
|
|
769
|
+
`WARDBY_DEPENDENCY_CACHE_MAX_AGE_DAYS` (default 14). Details:
|
|
770
|
+
[`deploy/gke/README.md`](../deploy/gke/README.md#run-dependency-cache).
|
|
771
|
+
|
|
772
|
+
### Session transcripts
|
|
773
|
+
|
|
774
|
+
Off by default. To keep the transcripts of Claude Code agents with
|
|
775
|
+
`sessionResume` on (see
|
|
776
|
+
[Resume a run locally](coding-agent-setup.md#resume-a-run-locally)), set
|
|
777
|
+
`session_transcripts_enabled = true` and a unique
|
|
778
|
+
`session_transcripts_bucket_name` in `terraform.tfvars`, and deploy with
|
|
779
|
+
`WARDBY_SESSION_TRANSCRIPTS=true deploy/gke/up.sh`. The bucket is separate from
|
|
780
|
+
the dependency cache bucket and only the control plane can use it; its
|
|
781
|
+
lifecycle rule and the control plane's `RUN_TRANSCRIPT_RETENTION_DAYS` both
|
|
782
|
+
come from `session_transcripts_retention_days` (default 30). Details:
|
|
783
|
+
[`deploy/gke/README.md`](../deploy/gke/README.md#session-transcripts).
|
|
784
|
+
|
|
795
785
|
### Roll back
|
|
796
786
|
|
|
797
787
|
Images are pinned by digest, so undoing a rollout restores exactly what ran
|
|
@@ -803,11 +793,9 @@ kubectl -n wardby-coding rollout undo deploy/wardby-coding-proxy
|
|
|
803
793
|
kubectl -n wardby-coding rollout undo deploy/wardby-native-gateway
|
|
804
794
|
```
|
|
805
795
|
|
|
806
|
-
`rollout undo` restores only the Deployments' images and pod templates
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
change to the database egress rules themselves is not undone by `rollout
|
|
810
|
-
undo`.
|
|
796
|
+
`rollout undo` restores only the Deployments' images and pod templates. It
|
|
797
|
+
does not touch the database grants or any NetworkPolicy: a change to the
|
|
798
|
+
database egress rules themselves is not undone by `rollout undo`.
|
|
811
799
|
|
|
812
800
|
Database migrations only go forward: a rollback does not undo a schema change.
|
|
813
801
|
That is safe while every migration is additive (new tables, nullable columns,
|