@wardby/cli 0.5.2 → 0.6.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/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 +7 -1
- package/dist/claude-coding-worker/driver.js +38 -5
- package/dist/claude-coding-worker/sdk.js +13 -4
- package/dist/cli-help.d.ts +1 -1
- package/dist/cli-help.js +5 -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 +141 -5
- package/dist/coding/claude-context.d.ts +45 -0
- package/dist/coding/claude-context.js +434 -0
- package/dist/coding/local-git.js +9 -1
- package/dist/coding/profile.d.ts +12 -0
- package/dist/coding/profile.js +6 -0
- package/dist/coding/protocol.d.ts +104 -0
- package/dist/coding/protocol.js +87 -3
- package/dist/coding/registry/pypi.d.ts +25 -1
- package/dist/coding/registry/pypi.js +140 -16
- package/dist/coding/registry/types.d.ts +17 -3
- package/dist/coding-worker/artifact.d.ts +8 -0
- package/dist/coding-worker/artifact.js +2 -2
- package/dist/coding-worker/driver.js +2 -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/types.d.ts +2 -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 +56 -2
- package/dist/config/providers.js +92 -6
- package/dist/core/db.d.ts +16 -6
- package/dist/core/db.js +12 -10
- package/dist/core/dispatch.d.ts +11 -0
- package/dist/core/dispatch.js +36 -1
- package/dist/core/engine-native.js +9 -5
- package/dist/core/host-events.d.ts +49 -3
- package/dist/core/host-events.js +289 -15
- package/dist/core/http-runtime.js +13 -6
- package/dist/core/issue-bridge.js +42 -2
- package/dist/core/issue-events.js +12 -1
- package/dist/core/issue-status.js +14 -3
- package/dist/core/merge-order-check.d.ts +129 -0
- package/dist/core/merge-order-check.js +336 -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 +25 -0
- package/dist/core/notification-templates.js +105 -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/reconciler.d.ts +4 -2
- package/dist/core/reconciler.js +29 -5
- package/dist/core/related-pull-requests.d.ts +48 -4
- package/dist/core/related-pull-requests.js +113 -11
- package/dist/core/repo-access.d.ts +15 -0
- package/dist/core/repo-access.js +66 -0
- package/dist/core/review-fix.d.ts +37 -0
- package/dist/core/review-fix.js +207 -6
- package/dist/core/review-host-tools.d.ts +20 -0
- package/dist/core/review-host-tools.js +58 -2
- package/dist/core/runner.d.ts +336 -3
- package/dist/core/runner.js +894 -317
- package/dist/core/secret-broker-config.d.ts +103 -0
- package/dist/core/secret-broker-config.js +112 -0
- package/dist/core/secrets.d.ts +39 -4
- package/dist/core/secrets.js +148 -40
- 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 +82 -0
- package/dist/core/workflow-events.js +44 -0
- package/dist/core/workflow-run-events.d.ts +16 -0
- package/dist/core/workflow-run-events.js +40 -0
- package/dist/generated/prisma/browser.d.ts +58 -0
- package/dist/generated/prisma/client.d.ts +58 -0
- package/dist/generated/prisma/commonInputTypes.d.ts +150 -0
- package/dist/generated/prisma/enums.d.ts +27 -0
- package/dist/generated/prisma/enums.js +23 -0
- package/dist/generated/prisma/internal/class.d.ts +88 -0
- package/dist/generated/prisma/internal/class.js +4 -4
- package/dist/generated/prisma/internal/prismaNamespace.d.ts +772 -1
- package/dist/generated/prisma/internal/prismaNamespace.js +135 -4
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +139 -0
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +135 -4
- package/dist/generated/prisma/models/Agent.d.ts +360 -1
- package/dist/generated/prisma/models/CodingAgentProfile.d.ts +73 -1
- package/dist/generated/prisma/models/CodingRun.d.ts +205 -1
- package/dist/generated/prisma/models/DeferredReview.d.ts +78 -1
- package/dist/generated/prisma/models/NativeGatewayCall.d.ts +1675 -0
- package/dist/generated/prisma/models/NativeGatewayCall.js +1 -0
- package/dist/generated/prisma/models/NativeGatewaySession.d.ts +1517 -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/Run.d.ts +826 -1
- package/dist/generated/prisma/models/RunHostCheck.d.ts +36 -1
- 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 +8 -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 +1492 -113
- package/dist/import/create.js +17 -0
- package/dist/import/neutral-schema.d.ts +6 -2
- package/dist/import/neutral-schema.js +2 -0
- package/dist/mcp/auth/access.d.ts +1 -0
- package/dist/mcp/auth/ownership.d.ts +1 -1
- 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/context.d.ts +6 -0
- package/dist/mcp/host-events/github-ingress.d.ts +23 -1
- package/dist/mcp/host-events/github-ingress.js +68 -0
- package/dist/mcp/index.d.ts +13 -0
- package/dist/mcp/index.js +59 -10
- package/dist/mcp/tools/agents.js +83 -12
- package/dist/mcp/tools/notification-channels.d.ts +2 -0
- package/dist/mcp/tools/notification-channels.js +293 -0
- package/dist/mcp/tools/power.d.ts +2 -0
- package/dist/mcp/tools/power.js +77 -0
- package/dist/mcp/tools/runs.d.ts +0 -6
- package/dist/mcp/tools/runs.js +7 -2
- 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 +200 -10
- package/dist/mcp/tools/secret-elicitation-server.js +8 -1
- 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 +184 -7
- package/dist/mcp/tools/tools.d.ts +1 -1
- package/dist/mcp/tools/tools.js +22 -2
- 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 +74 -0
- package/dist/native-worker/docker-launcher.js +237 -0
- package/dist/native-worker/gateway-server.d.ts +39 -0
- package/dist/native-worker/gateway-server.js +315 -0
- package/dist/native-worker/gateway.d.ts +44 -0
- package/dist/native-worker/gateway.js +197 -0
- package/dist/native-worker/http-server.d.ts +22 -0
- package/dist/native-worker/http-server.js +109 -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 +102 -0
- package/dist/native-worker/kubernetes-launcher.js +335 -0
- package/dist/native-worker/launch.d.ts +45 -0
- package/dist/native-worker/launch.js +44 -0
- package/dist/native-worker/ledger.d.ts +109 -0
- package/dist/native-worker/ledger.js +192 -0
- package/dist/native-worker/loopback.d.ts +12 -0
- package/dist/native-worker/loopback.js +49 -0
- package/dist/native-worker/main.d.ts +7 -0
- package/dist/native-worker/main.js +74 -0
- package/dist/native-worker/protocol.d.ts +744 -0
- package/dist/native-worker/protocol.js +200 -0
- package/dist/native-worker/sandbox-executor.d.ts +68 -0
- package/dist/native-worker/sandbox-executor.js +210 -0
- package/dist/native-worker/stdio.d.ts +29 -0
- package/dist/native-worker/stdio.js +188 -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 +115 -0
- 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 +13 -1
- 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/mock-upstream.d.ts +33 -0
- package/dist/providers/coding-proxy/mock-upstream.js +116 -0
- package/dist/providers/coding-proxy/registry/prisma-store.d.ts +3 -0
- package/dist/providers/coding-proxy/registry/prisma-store.js +17 -0
- package/dist/providers/coding-proxy/registry/service.d.ts +4 -0
- package/dist/providers/coding-proxy/registry/service.js +20 -3
- package/dist/providers/coding-proxy/registry/store.d.ts +18 -1
- package/dist/providers/coding-proxy/registry/store.js +33 -0
- package/dist/providers/coding-proxy/runtime.js +12 -1
- package/dist/providers/coding-proxy/types.d.ts +2 -0
- package/dist/providers/engine/types.d.ts +19 -0
- package/dist/providers/engine/types.js +22 -0
- package/dist/providers/executor/composition.d.ts +24 -1
- package/dist/providers/executor/composition.js +39 -6
- package/dist/providers/executor/container.d.ts +24 -1
- package/dist/providers/executor/container.js +101 -11
- package/dist/providers/executor/dbos.d.ts +42 -0
- package/dist/providers/executor/dbos.js +118 -12
- package/dist/providers/executor/deferred.d.ts +56 -0
- package/dist/providers/executor/deferred.js +119 -0
- package/dist/providers/executor/routing.d.ts +37 -10
- package/dist/providers/executor/routing.js +73 -32
- package/dist/providers/executor/types.d.ts +12 -0
- package/dist/providers/jobs/docker.js +3 -3
- package/dist/providers/jobs/fake-kubernetes-api.d.ts +21 -2
- package/dist/providers/jobs/fake-kubernetes-api.js +42 -1
- package/dist/providers/jobs/kubernetes-api.d.ts +17 -1
- package/dist/providers/jobs/kubernetes-api.js +7 -0
- package/dist/providers/jobs/kubernetes-client.d.ts +10 -1
- package/dist/providers/jobs/kubernetes-client.js +52 -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 +16 -1
- package/dist/providers/jobs/kubernetes-isolation.js +58 -5
- 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 +56 -7
- package/dist/providers/jobs/kubernetes.js +117 -36
- 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 +9 -0
- package/dist/providers/llm/openai.js +0 -1
- package/dist/providers/review-host/github.d.ts +11 -1
- package/dist/providers/review-host/github.js +50 -0
- package/dist/providers/review-host/types.d.ts +23 -0
- package/dist/providers/vcs/github.d.ts +32 -6
- package/dist/providers/vcs/github.js +74 -16
- package/dist/quickstart/coding-db.js +14 -2
- package/dist/quickstart/coding-doctor.d.ts +3 -0
- package/dist/quickstart/coding-doctor.js +3 -0
- package/dist/quickstart/coding-images.d.ts +9 -0
- package/dist/quickstart/coding-images.js +39 -0
- package/dist/quickstart/coding-seed.d.ts +20 -1
- package/dist/quickstart/coding-seed.js +96 -7
- package/dist/quickstart/coding.d.ts +2 -0
- package/dist/quickstart/coding.js +75 -3
- package/dist/quickstart/config.d.ts +2 -0
- package/dist/quickstart/config.js +4 -0
- package/dist/quickstart/images.d.ts +13 -0
- package/dist/quickstart/images.js +80 -12
- package/dist/quickstart/index.d.ts +0 -2
- package/dist/quickstart/index.js +10 -14
- package/dist/quickstart/manifests.d.ts +56 -0
- package/dist/quickstart/manifests.js +523 -0
- package/dist/quickstart/python-detect.d.ts +10 -0
- package/dist/quickstart/python-detect.js +32 -0
- package/dist/quickstart/repo-packages.d.ts +10 -0
- package/dist/quickstart/repo-packages.js +132 -0
- package/dist/quickstart/reviewer-prompt.d.ts +12 -0
- package/dist/quickstart/reviewer-prompt.js +84 -0
- package/dist/quickstart/scenarios.d.ts +19 -0
- package/dist/quickstart/scenarios.js +28 -0
- package/dist/quickstart/sync-reviewer-prompt.d.ts +1 -0
- package/dist/quickstart/sync-reviewer-prompt.js +10 -0
- 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/host-functions.d.ts +34 -0
- package/dist/sandbox/host-functions.js +144 -80
- 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 +162 -0
- package/dist/sandbox/user-tool.d.ts +14 -0
- package/dist/sandbox/user-tool.js +32 -0
- package/dist/serve.js +18 -0
- package/dist/viewer/api-schema.d.ts +214 -18
- package/dist/viewer/api-schema.js +22 -0
- package/dist/viewer/build-schemas.js +4 -1
- 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 +172 -0
- package/docs/README.md +7 -0
- package/docs/agent-recipes.md +57 -8
- package/docs/architecture-runtime.md +16 -1
- package/docs/code-review-agents.md +139 -5
- package/docs/coding-agent-setup.md +127 -2
- package/docs/coding-packages.md +105 -5
- package/docs/coding-services.md +3 -1
- package/docs/coding-worker-byo-images.md +239 -2
- package/docs/coding-worker-isolation.md +88 -23
- package/docs/getting-started-gke.md +225 -9
- package/docs/getting-started-identity-provider.md +21 -10
- package/docs/getting-started.md +140 -11
- package/docs/jira-agents.md +5 -1
- package/docs/knowledge.md +11 -0
- package/docs/native-sandbox.md +635 -0
- package/docs/release-verification.md +9 -0
- package/docs/security-deployment.md +113 -12
- package/docs/slack-notifications.md +252 -0
- package/docs/tool-secrets.md +252 -0
- package/docs/viewer-api.md +46 -5
- package/docs/viewer-api.openapi.yml +1404 -0
- package/help/admin-viewer.md +6 -2
- package/help/agent-recipes.md +27 -0
- package/help/architecture-agent.md +136 -0
- package/help/brokered-secrets.md +79 -0
- package/help/build-claude-code-image.md +131 -0
- package/help/build-worker-image.md +195 -0
- package/help/code-review-agents.md +68 -6
- package/help/coding-packages.md +31 -2
- package/help/creating-agents.md +14 -0
- package/help/deploy-gke.md +37 -6
- package/help/deployment-targets.md +24 -13
- package/help/errors/coding-provider-not-configured.md +2 -2
- package/help/errors/database-auth-invalid.md +28 -0
- package/help/errors/github-account-not-allowed.md +25 -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/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-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-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 +20 -0
- package/help/errors/native-sandbox-worker-lost.md +20 -0
- package/help/errors/native-sandbox-worker-unready.md +22 -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-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/getting-started.md +18 -0
- package/help/github.md +18 -1
- package/help/identity-and-access.md +5 -1
- package/help/local-repositories.md +35 -5
- package/help/low-power-mode.md +125 -0
- package/help/merge-order-check.md +117 -0
- package/help/mobile-app.md +54 -0
- package/help/native-sandbox.md +136 -0
- package/help/observability.md +8 -0
- package/help/related-pull-requests.md +70 -9
- package/help/repo-instructions-and-skills.md +91 -0
- package/help/review-fix-rounds.md +10 -0
- package/help/slack-notifications.md +62 -0
- package/help/troubleshooting/coding-workers.md +21 -0
- package/package.json +13 -5
- 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/schema.prisma +362 -91
|
@@ -43,6 +43,17 @@ from bots and people without write access. Repository links require the
|
|
|
43
43
|
agent owner's linked GitHub access, or an explicitly recorded administrator
|
|
44
44
|
approval.
|
|
45
45
|
|
|
46
|
+
## When a review starts
|
|
47
|
+
|
|
48
|
+
A push normally starts a review right away, but its timing can be held back
|
|
49
|
+
by two independent things: from Wardby 0.6.0, the pull request's own
|
|
50
|
+
delegating request still running (see [Reviewing a pull request a delegated run
|
|
51
|
+
opened](#reviewing-a-pull-request-a-delegated-run-opened) below), and, on a
|
|
52
|
+
link set up for it, CI on the pushed head still running (see [Review after
|
|
53
|
+
CI (`waitForCi`)](#review-after-ci-waitforci) below). Either can delay the
|
|
54
|
+
check that reports the review's result; neither changes what the review
|
|
55
|
+
itself reports once it runs.
|
|
56
|
+
|
|
46
57
|
## CI and sibling pull requests
|
|
47
58
|
|
|
48
59
|
`repo_pr_read` also returns `ci`: the CI check runs and commit statuses on the
|
|
@@ -65,6 +76,54 @@ on the review check instead.
|
|
|
65
76
|
Commit statuses need the App's **Commit statuses: Read** permission; without
|
|
66
77
|
it only check runs are shown.
|
|
67
78
|
|
|
79
|
+
With Wardby 0.6.0 or later, `repo_pr_read` also returns `relatedPullRequests`: this
|
|
80
|
+
request's pull requests (`repository`, `number`, `state`, `mergeOrder`,
|
|
81
|
+
`self`), computed fresh at call time; empty on a human pull request, one
|
|
82
|
+
with no recognized Wardby marker, or a pull request on a local repository
|
|
83
|
+
(no origin marker to look up there). The `self` entry (the pull request just
|
|
84
|
+
read) always has a `state` (`draft`, `open`, `merged`, or `closed`) from that
|
|
85
|
+
same read. Another entry has a `state` (`open`, `merged`, or `closed`) only
|
|
86
|
+
when Wardby has it stored, as it does for pull requests linked to an issue,
|
|
87
|
+
and omits it otherwise; call `repo_pr_read` on that pull request when you
|
|
88
|
+
need its live state. The list is current; the PR body's **Related pull
|
|
89
|
+
requests** section can be stale — see
|
|
90
|
+
[Related pull requests across repositories](related-pull-requests.md).
|
|
91
|
+
|
|
92
|
+
With Wardby 0.6.0 or later, once a set has more than one `mergeOrder`, each
|
|
93
|
+
pull request in it also gets its own check run, named `wardby merge order`,
|
|
94
|
+
independent of any reviewer link; search help for "merge order check" for
|
|
95
|
+
its states and for requiring it in branch protection.
|
|
96
|
+
|
|
97
|
+
## Reviewing a pull request a delegated run opened
|
|
98
|
+
|
|
99
|
+
This requires Wardby 0.6.0 or later; earlier releases review such a pull
|
|
100
|
+
request on its first push. When a lead agent delegates coding work and a sub-agent opens the pull
|
|
101
|
+
request (see [Fanning out to several
|
|
102
|
+
builders](../docs/agent-recipes.md#fanning-out-to-several-builders)), every
|
|
103
|
+
reviewer linked with the `pull_request` trigger holds its review of that
|
|
104
|
+
pull request until the delegating (lead) run finishes, however it ends
|
|
105
|
+
(including failing, being cancelled or being lost), even if the link has no
|
|
106
|
+
`waitForCi` set. This gives the request's other pull requests, if any, time
|
|
107
|
+
to open before any of them is reviewed, so a reviewer does not report a
|
|
108
|
+
field or route as missing only because a sibling pull request had not opened
|
|
109
|
+
yet. When the lead run finishes normally, their **Related pull requests**
|
|
110
|
+
sections have also been rewritten (see [Related pull requests across
|
|
111
|
+
repositories](related-pull-requests.md)); when it is ended another way, such
|
|
112
|
+
as being cancelled, held reviews start without that rewrite. Either way,
|
|
113
|
+
reviewers should rely on `repo_pr_read`'s `relatedPullRequests`.
|
|
114
|
+
|
|
115
|
+
A reviewer linked with `waitForCi` then waits for CI too, once the lead run
|
|
116
|
+
finishes, with its own full 15-minute fallback counted from that point. A
|
|
117
|
+
pull request opened directly, by a human, or on a local repository is never
|
|
118
|
+
held this way. A later request that continues an already-open pull request
|
|
119
|
+
is not held again: the request that opened it has already finished (a push
|
|
120
|
+
inside the same, still-running request is held). If Wardby cannot tell
|
|
121
|
+
whether the pull request's opening run was delegated, the review starts
|
|
122
|
+
right away instead. A held review not released when its lead run finishes is
|
|
123
|
+
reconsidered by Wardby's reconciliation sweep once it has been held for 15
|
|
124
|
+
minutes and released when the lead run has finished, and dropped after 24
|
|
125
|
+
hours like a review held for CI.
|
|
126
|
+
|
|
68
127
|
## Review after CI (`waitForCi`)
|
|
69
128
|
|
|
70
129
|
A `pull_request` link can set `waitForCi: true` so this reviewer reviews a
|
|
@@ -105,12 +164,15 @@ Add this to a reviewer's system prompt:
|
|
|
105
164
|
Reviewer step (CI and related pull requests). Read `ci` from repo_pr_read.
|
|
106
165
|
When `ci` and the description's Tests disagree, follow CI and say so; never
|
|
107
166
|
ask for a fix only because a sandbox test failed while CI passed. Report
|
|
108
|
-
pending checks as pending. If
|
|
109
|
-
|
|
110
|
-
of those pull requests: do not report it as missing; note the
|
|
111
|
-
and the
|
|
112
|
-
|
|
113
|
-
|
|
167
|
+
pending checks as pending. If repo_pr_read's relatedPullRequests is
|
|
168
|
+
non-empty, a field, route or schema the change relies on may be added by
|
|
169
|
+
one of those pull requests: do not report it as missing; note the
|
|
170
|
+
dependency and the listed merge order instead. relatedPullRequests is
|
|
171
|
+
current; the PR body's "Related pull requests" section can be stale.
|
|
172
|
+
|
|
173
|
+
On a release before 0.6.0, `repo_pr_read` has no `relatedPullRequests`:
|
|
174
|
+
use the description's **Related pull requests** section in its place in that
|
|
175
|
+
step. Wardby also writes that section: see
|
|
114
176
|
[Related pull requests across repositories](related-pull-requests.md).
|
|
115
177
|
|
|
116
178
|
For App permissions, webhook setup, trigger configuration, and security
|
package/help/coding-packages.md
CHANGED
|
@@ -3,7 +3,7 @@ id: coding-packages
|
|
|
3
3
|
title: Approve packages for coding agents
|
|
4
4
|
summary: Let Codex coding workers install vetted npm and PyPI dependencies through Wardby's registry proxy.
|
|
5
5
|
audience: operator
|
|
6
|
-
tags: [coding-agents, packages, npm, pypi, supply-chain, refusals, lockfile]
|
|
6
|
+
tags: [coding-agents, packages, npm, pypi, supply-chain, refusals, lockfile, extras, pip-extras]
|
|
7
7
|
appliesTo: >=0.2.1
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -35,8 +35,37 @@ if its own checks failed. A package reachable only through a refused one is
|
|
|
35
35
|
refused too, so a high-severity advisory deep in a toolchain blocks every run
|
|
36
36
|
that installs it.
|
|
37
37
|
|
|
38
|
+
## PyPI extras
|
|
39
|
+
|
|
40
|
+
A PyPI entry may name extras, as pip does: `psycopg[binary]`,
|
|
41
|
+
`uvicorn[standard]>=0.30`. An extra allows only the dependencies that
|
|
42
|
+
package's own metadata declares under that extra (for `psycopg[binary]`, the
|
|
43
|
+
`psycopg-binary` wheel); a bare `psycopg` entry follows no extra, so
|
|
44
|
+
`psycopg-binary` is refused with `wardby_package_not_allowed`. A plain entry
|
|
45
|
+
follows no extras at all, its own or its dependencies': a plain `fastapi`
|
|
46
|
+
whose metadata asks for `uvicorn[standard]` gets bare `uvicorn` only. Extras a
|
|
47
|
+
dependency line names are followed only below an entry that names extras
|
|
48
|
+
(`fastapi[standard]`), once the proxy has served that parent's metadata: if
|
|
49
|
+
an extra's packages are still refused with `403 wardby_package_not_allowed`,
|
|
50
|
+
name the extra on the allowlist directly (`uvicorn[standard]`). Every
|
|
51
|
+
safeguard still applies to what an extra adds. Extras need the coding proxy
|
|
52
|
+
and control plane on the same Wardby version: a proxy from before extras
|
|
53
|
+
support cannot load an allowlist with a `name[extra]` entry, so every registry
|
|
54
|
+
request of that run fails; and once a profile stores an extras entry, do not
|
|
55
|
+
downgrade below the release that added extras.
|
|
56
|
+
|
|
57
|
+
The quickstart's coding step offers the packages a local repository declares
|
|
58
|
+
(`package.json`, `pyproject.toml` including its build-system packages,
|
|
59
|
+
`requirements*.txt`, keeping Python extras such as `psycopg[binary]`) as
|
|
60
|
+
`local-builder`'s allowlist after asking, or with `--allow-repo-packages` in a non-interactive
|
|
61
|
+
run. See [Local repositories](local-repositories.md).
|
|
62
|
+
|
|
63
|
+
> Re-running the quickstart replaces `local-builder`'s package allowlist with
|
|
64
|
+
> what the repository declares (or empties it), discarding any packages you
|
|
65
|
+
> added with `update_agent`; re-add them after a re-run.
|
|
66
|
+
|
|
38
67
|
Review agents see the pull request's CI results in `repo_pr_read` and are
|
|
39
68
|
told to trust CI over the sandbox's **Tests**.
|
|
40
69
|
|
|
41
70
|
Read [`docs/coding-packages.md`](../docs/coding-packages.md) for allowlist
|
|
42
|
-
syntax, package-policy controls, lockfile behavior, and refusal errors.
|
|
71
|
+
syntax (including [PyPI extras](../docs/coding-packages.md#pypi-extras)), package-policy controls, lockfile behavior, and refusal errors.
|
package/help/creating-agents.md
CHANGED
|
@@ -59,6 +59,20 @@ separately; a missing one fails the run itself at dispatch, not
|
|
|
59
59
|
`create_agent`/`update_agent`. See [Models and pricing](models.md) and
|
|
60
60
|
[Model not available](errors/model-unavailable.md).
|
|
61
61
|
|
|
62
|
+
## Run it on a schedule
|
|
63
|
+
|
|
64
|
+
Give an agent a cron schedule with `set_schedule` (`agentId`, `schedule` such
|
|
65
|
+
as `0 6 * * 1`, and `timezone`), and turn it off with `disable_schedule`. A
|
|
66
|
+
coding agent needs a `codingProfile.defaultTask` first, since a scheduled run
|
|
67
|
+
has no one to pass a task. A native agent's system prompt is its task. Trigger
|
|
68
|
+
the agent once with `trigger_agent` and check the result before scheduling it.
|
|
69
|
+
|
|
70
|
+
Schedules fire only while a Wardby scheduler runs: `wardby serve`, or
|
|
71
|
+
`wardby scheduler` next to `wardby mcp`. On a quickstart install, start
|
|
72
|
+
`npx @wardby/cli@latest scheduler` from the project directory and keep it
|
|
73
|
+
running; the MCP server your assistant starts never fires schedules. See
|
|
74
|
+
[Operate managed agents](operating-agents.md).
|
|
75
|
+
|
|
62
76
|
## Decision checklist
|
|
63
77
|
|
|
64
78
|
Choose a native agent when all of these are true:
|
package/help/deploy-gke.md
CHANGED
|
@@ -11,8 +11,9 @@ appliesTo: >=0.2.1
|
|
|
11
11
|
|
|
12
12
|
The supported Google Cloud deployment creates a GKE Autopilot cluster, private
|
|
13
13
|
Cloud SQL for PostgreSQL, Artifact Registry, HTTPS Gateway, Google Secret
|
|
14
|
-
Manager synchronization, and isolated gVisor-backed
|
|
15
|
-
|
|
14
|
+
Manager synchronization, and isolated gVisor-backed coding-worker pods for
|
|
15
|
+
Codex and Claude Code. It also applies namespace RBAC and default-deny network
|
|
16
|
+
policies.
|
|
16
17
|
|
|
17
18
|
Use a dedicated billed project, a hostname you control, remote Terraform state,
|
|
18
19
|
and a GitHub App installed only on repositories that agents need. Review
|
|
@@ -28,8 +29,12 @@ The deployment process is:
|
|
|
28
29
|
3. Put first-time values in an untracked `.env.local`; `deploy/gke/up.sh`
|
|
29
30
|
seeds Secret Manager without overwriting existing production values.
|
|
30
31
|
Jira settings are optional there, all or none; see [Jira](jira.md).
|
|
31
|
-
4. Run `
|
|
32
|
+
4. Run `WARDBY_HOSTNAME=wardby.example.com deploy/gke/up.sh`, then verify DNS,
|
|
32
33
|
certificate issuance, database IAM bootstrap, and service health.
|
|
34
|
+
Use `WARDBY_HOSTNAME`, not `HOSTNAME` (shells set that to the machine name);
|
|
35
|
+
the script refuses local names such as `*.lan` or `*.local`, and asks you
|
|
36
|
+
to confirm (or set `WARDBY_HOSTNAME_CHANGE=<new hostname>`) before moving
|
|
37
|
+
a deployment to a different hostname.
|
|
33
38
|
|
|
34
39
|
When a release changes `deploy/gke/database-grants.sql`, re-run the database
|
|
35
40
|
grants bootstrap **before** deploying that release, so the proxy role can
|
|
@@ -37,9 +42,35 @@ already write the tables and columns it adds (such as per-model usage for
|
|
|
37
42
|
[cost attribution](cost-attribution.md), or a run's live turn count). Until the
|
|
38
43
|
grants are applied, the coding proxy's writes are refused and coding runs fail.
|
|
39
44
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
App before allowing people to use the public endpoint.
|
|
45
|
+
The Kubernetes launcher runs Codex and Claude Code coding workers; a Claude
|
|
46
|
+
Code pod adds a tool-runner sidecar with its own image. Configure an identity
|
|
47
|
+
provider and GitHub App before allowing people to use the public endpoint.
|
|
48
|
+
|
|
49
|
+
To lower the idle cost of a lightly used deployment, see
|
|
50
|
+
[Low-power mode](../docs/getting-started-gke.md#low-power-mode) (Wardby 0.6.0 and later).
|
|
51
|
+
|
|
52
|
+
## Plan it with your assistant
|
|
53
|
+
|
|
54
|
+
If you are an assistant connected to Wardby over MCP and the user asked to plan
|
|
55
|
+
a GKE deployment, produce a written plan; do not create cloud resources. Read
|
|
56
|
+
[Choose a deployment target](deployment-targets.md) first and confirm GKE is
|
|
57
|
+
the right target. Then ask for, one at a time, and record:
|
|
58
|
+
|
|
59
|
+
1. The Google Cloud project (dedicated, with billing) and region, and who
|
|
60
|
+
holds the IAM roles to apply Terraform.
|
|
61
|
+
2. The public hostname and who controls its DNS.
|
|
62
|
+
3. The identity provider for people signing in (see
|
|
63
|
+
[Configure identity and privileged access](identity-and-access.md)).
|
|
64
|
+
4. The GitHub App: which repositories it is installed on (see
|
|
65
|
+
[Connect GitHub repositories](github.md)).
|
|
66
|
+
5. Which coding providers the agents use (Codex, Claude Code or both), and
|
|
67
|
+
which provider keys and worker images that needs.
|
|
68
|
+
6. Where Terraform state lives, and the monthly cloud budget and alerts.
|
|
69
|
+
7. Optional: Jira.
|
|
70
|
+
|
|
71
|
+
The plan lists those answers, the ordered steps above with the values filled
|
|
72
|
+
in, the commands the user will run themselves, and the open questions. Point
|
|
73
|
+
the user to the full guide below for every step.
|
|
43
74
|
|
|
44
75
|
Follow the complete, ordered guide at
|
|
45
76
|
[`docs/getting-started-gke.md`](../docs/getting-started-gke.md). It includes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: deployment-targets
|
|
3
3
|
title: Choose a deployment target
|
|
4
|
-
summary:
|
|
4
|
+
summary: Compare local, self-hosted, and GKE deployment paths and their operational boundaries.
|
|
5
5
|
audience: operator
|
|
6
6
|
tags: [deployment, docker, gke, aws, production]
|
|
7
7
|
appliesTo: >=0.2.1
|
|
@@ -9,31 +9,42 @@ appliesTo: >=0.2.1
|
|
|
9
9
|
|
|
10
10
|
# Choose a deployment target
|
|
11
11
|
|
|
12
|
-
Wardby has
|
|
12
|
+
Wardby has a local development path, a self-hosted container deployment
|
|
13
|
+
reference, and a supported GKE reference deployment. The references provide
|
|
14
|
+
different parts of a production environment; operators must complete the
|
|
15
|
+
remaining controls and verification before accepting production work.
|
|
13
16
|
|
|
14
17
|
- **Local development:** `wardby quickstart` runs the control plane locally
|
|
15
18
|
with its portable PostgreSQL container. It is the best place to evaluate,
|
|
16
19
|
develop agents, and connect a local Codex or Claude Code client.
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
`deploy/kind-coding` is a local Kubernetes proof harness, not a production
|
|
21
|
+
deployment.
|
|
22
|
+
- **Self-hosted container deployment** (e.g., Docker Compose on a VM or
|
|
23
|
+
on-premises host): Wardby supplies runtime and migration images plus a
|
|
24
|
+
Compose/Caddy edge reference. The operator supplies PostgreSQL, secrets,
|
|
25
|
+
network and egress controls, backups and restore testing, monitoring, and a
|
|
26
|
+
separate coding-controller host. Configure authentication for the deployment.
|
|
21
27
|
- **Google Kubernetes Engine Autopilot:** the supported Google Cloud path. It
|
|
22
|
-
provisions GKE, private-IP Cloud SQL
|
|
23
|
-
|
|
28
|
+
provisions GKE, private-IP Cloud SQL with backups and point-in-time recovery,
|
|
29
|
+
Artifact Registry, isolated Codex and Claude Code workers, HTTPS Gateway, and
|
|
30
|
+
GCP-native secret and network controls. Operators still need to choose
|
|
31
|
+
availability, test recovery, and configure alerts and retention. See
|
|
24
32
|
[Deploy on GKE](deploy-gke.md).
|
|
25
33
|
|
|
26
|
-
AWS
|
|
27
|
-
|
|
34
|
+
AWS can run the portable runtime and has a Bedrock Claude adapter, but a native
|
|
35
|
+
AWS deployment module is planned and has not shipped. Other cloud providers
|
|
28
36
|
can run the production container image with equivalent database, ingress,
|
|
29
37
|
identity, secret, isolation, and observability controls; that infrastructure is
|
|
30
|
-
operator-owned.
|
|
38
|
+
operator-owned. On Amazon EKS, set `KUBERNETES_PLATFORM=eks` (gVisor node group
|
|
39
|
+
required) and, for RDS, `DATABASE_AUTH=rds-iam`; see "Database
|
|
40
|
+
authentication" in
|
|
41
|
+
[`docs/security-deployment.md`](../docs/security-deployment.md).
|
|
31
42
|
|
|
32
43
|
The older `deploy/gcp` Cloud Run module is deprecated. Do not choose it for a
|
|
33
44
|
new installation.
|
|
34
45
|
|
|
35
|
-
Before going live, complete the
|
|
36
|
-
|
|
46
|
+
Before going live, complete the release verification and security deployment
|
|
47
|
+
checks, and make plans for backups, upgrades, alerts, and incident response. Read
|
|
37
48
|
[`docs/getting-started.md`](../docs/getting-started.md) for the local and
|
|
38
49
|
container setup, and [`docs/security-deployment.md`](../docs/security-deployment.md)
|
|
39
50
|
for the production controls.
|
|
@@ -26,8 +26,8 @@ runs recorded it) when `CODING_WORKER_IMAGE` has since been unset.
|
|
|
26
26
|
a toolchain with its own image (such as `CODING_WORKER_IMAGE_NODE_PYTHON_3_12`),
|
|
27
27
|
still runs without `CODING_WORKER_IMAGE`.
|
|
28
28
|
- **`coding_provider_not_configured:claude-code`**: `CODING_CLAUDE_WORKER_IMAGE`
|
|
29
|
-
or `CODING_CLAUDE_TOOL_RUNNER_IMAGE` isn't set. Claude Code needs both,
|
|
30
|
-
|
|
29
|
+
or `CODING_CLAUDE_TOOL_RUNNER_IMAGE` isn't set. Claude Code needs both, even
|
|
30
|
+
for an agent with its own `workerImageRef`.
|
|
31
31
|
|
|
32
32
|
This error is about images, not API keys. A missing or invalid model API key
|
|
33
33
|
fails later, when the run calls the model.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/database-auth-invalid
|
|
3
|
+
title: Database authentication is misconfigured
|
|
4
|
+
summary: DATABASE_AUTH or the database URL does not meet the rules for the chosen authentication mode, so the process refused to start.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, database, rds, iam, deploy, database_auth_invalid, rds-iam]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Database authentication is misconfigured
|
|
11
|
+
|
|
12
|
+
`database_auth_invalid` means `DATABASE_AUTH` is not valid, or `DATABASE_AUTH=rds-iam` is set and `DATABASE_URL` (or `DBOS_SYSTEM_DATABASE_URL`) does not meet its rules. Wardby checks this when the process starts, so every `wardby` command fails with it, not only the server. The message names the problem; it never includes the URL, credentials, or parameter values.
|
|
13
|
+
|
|
14
|
+
`DATABASE_AUTH` is `password` (the default; the password is in `DATABASE_URL`) or `rds-iam` (Amazon RDS IAM database authentication, where the password is a short-lived token signed with the workload's AWS credentials). Any other value is refused.
|
|
15
|
+
|
|
16
|
+
Under `rds-iam` check each of these:
|
|
17
|
+
|
|
18
|
+
1. `DATABASE_URL` starts with `postgresql://` or `postgres://`, has a user, and has no password.
|
|
19
|
+
2. `AWS_REGION` or `DATABASE_AWS_REGION` is set (`DATABASE_AWS_REGION` wins).
|
|
20
|
+
3. The URL has `sslmode=verify-full` and `sslrootcert=<path to the RDS CA bundle>`, and that file exists and is readable in the container. An unreadable file is reported with its error code, such as `ENOENT` for a missing file or `EACCES` for one the process cannot read.
|
|
21
|
+
4. Only supported parameters are present: `sslmode`, `sslrootcert`, `application_name`, `fallback_application_name`, `options`, `client_encoding`, `statement_timeout`, `lock_timeout`, `idle_in_transaction_session_timeout`, `query_timeout`, `connection_limit`, `pool_timeout`, `connect_timeout`, `schema`. Anything else (`sslcert`, `sslkey`, `ssl`, `host`, `pgbouncer`, ...) is refused by name; remove it.
|
|
22
|
+
5. User and database names in the URL are correctly percent-encoded.
|
|
23
|
+
|
|
24
|
+
If the code is not raised but connections are rejected, the configuration is valid and the problem is on the AWS side: the workload's IAM role needs `rds-db:connect` for the database user, and that user needs the `rds_iam` role in the database.
|
|
25
|
+
|
|
26
|
+
`prisma migrate deploy` and `dbos schema` take a URL and do not follow `DATABASE_AUTH`. Mint a short-lived URL with the migration image's helper: `DATABASE_URL="$(node scripts/rds-iam-url.mjs)" && export DATABASE_URL && npm run prisma:migrate && npm run dbos:migrate`. It reports the same `database_auth_invalid` errors for the checks it shares. `wardby quickstart` does not support `rds-iam`.
|
|
27
|
+
|
|
28
|
+
See [Database authentication](../../docs/security-deployment.md#database-authentication).
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/github-account-not-allowed
|
|
3
|
+
title: The repository's GitHub account is not served by this server
|
|
4
|
+
summary: The repository belongs to a GitHub user or organization that is neither the GitHub App's owner nor listed in WARDBY_GITHUB_ALLOWED_ACCOUNTS, so wardby refuses to link or use it.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, github, repositories, configuration, WARDBY_GITHUB_ALLOWED_ACCOUNTS, link_repository]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# The repository's GitHub account is not served by this server
|
|
11
|
+
|
|
12
|
+
`github_account_not_allowed` means the repository's owner is not one of the
|
|
13
|
+
accounts this server serves through its GitHub App: the App's owner and the
|
|
14
|
+
accounts in `WARDBY_GITHUB_ALLOWED_ACCOUNTS`. `link_repository` and coding
|
|
15
|
+
profiles refuse such a repository, even with `adminOverride`, and runs on an
|
|
16
|
+
existing link to it are refused.
|
|
17
|
+
|
|
18
|
+
## What to do
|
|
19
|
+
|
|
20
|
+
- **The repository should be served:** an operator adds its owner's login to
|
|
21
|
+
`WARDBY_GITHUB_ALLOWED_ACCOUNTS` and restarts the server, then links it again.
|
|
22
|
+
- **It should not:** use a repository owned by a served account, or another
|
|
23
|
+
wardby server with its own GitHub App.
|
|
24
|
+
|
|
25
|
+
Related: [Connect GitHub repositories](../github.md).
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/low-power-disabled
|
|
3
|
+
title: Scale-down refused, mode not enabled
|
|
4
|
+
summary: A request to put the coding proxy or native gateway to sleep was refused because WARDBY_LOW_POWER is not 1 on this deployment.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, gke, kubernetes, low_power_disabled]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Sleep refused: low-power mode not enabled
|
|
11
|
+
|
|
12
|
+
`low_power_disabled` (HTTP 409) means `power_sleep` was called, but low-power
|
|
13
|
+
mode is not on for this deployment: `WARDBY_LOW_POWER` is not `1` on the
|
|
14
|
+
control plane, or the control plane does not use `JOB_LAUNCHER=kubernetes` (it
|
|
15
|
+
then logs `low_power_ignored` at start-up). Nothing was scaled.
|
|
16
|
+
|
|
17
|
+
With the mode off, the coding proxy and native gateway always run, so there is
|
|
18
|
+
nothing to put to sleep. `power_status` returns `{ "enabled": false }` in the
|
|
19
|
+
same case.
|
|
20
|
+
|
|
21
|
+
To turn the mode on:
|
|
22
|
+
|
|
23
|
+
1. Deploy with the flag: `WARDBY_HOSTNAME=wardby.example.com WARDBY_LOW_POWER=1 deploy/gke/up.sh`.
|
|
24
|
+
On a local kind cluster, use `WARDBY_LOW_POWER=1 deploy/kind-coding/up.sh` and
|
|
25
|
+
also set `WARDBY_LOW_POWER=1` in the environment of `wardby serve`.
|
|
26
|
+
2. Check that the control plane runs with `JOB_LAUNCHER=kubernetes`.
|
|
27
|
+
3. Call `power_status`; it reports `"enabled": true` once the mode is on.
|
|
28
|
+
|
|
29
|
+
See [Low-power mode on GKE](../low-power-mode.md).
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/low-power-scale-forbidden
|
|
3
|
+
title: Scaling forbidden by RBAC
|
|
4
|
+
summary: In low-power mode, the control plane is not allowed to read or scale the coding proxy or native gateway Deployment, or read its Endpoints, because the wardby-power Role is missing or out of date.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, low-power, gke, kubernetes, rbac, low_power_scale_forbidden]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Low-power scale forbidden
|
|
11
|
+
|
|
12
|
+
`low_power_scale_forbidden` means the Kubernetes API refused the control plane
|
|
13
|
+
something low-power mode needs: reading or scaling the coding proxy or native
|
|
14
|
+
gateway Deployment, or reading its Endpoints to see whether a woken target is
|
|
15
|
+
ready. The message names the action and the object, for example
|
|
16
|
+
`may not get Endpoints "wardby-native-gateway"`. It can come from a run waking a
|
|
17
|
+
target, from `power_status`, or from `power_sleep`.
|
|
18
|
+
|
|
19
|
+
Low-power mode needs the Role `wardby-power` (and its RoleBinding) in the
|
|
20
|
+
namespace. It grants `get` and `patch` on the two Deployments and `get` on
|
|
21
|
+
their Endpoints, by name. At start-up the control plane warns
|
|
22
|
+
`low_power_scale_forbidden: missing ...` naming each missing permission (for
|
|
23
|
+
example `get endpoints/wardby-native-gateway`); if the check itself fails it
|
|
24
|
+
logs `low_power_access_check_failed`.
|
|
25
|
+
|
|
26
|
+
1. Re-run the deploy with the mode on: `WARDBY_LOW_POWER=1 deploy/gke/up.sh`
|
|
27
|
+
(on kind, `WARDBY_LOW_POWER=1 deploy/kind-coding/up.sh`). It applies the
|
|
28
|
+
current Role, including the Endpoints rule an older Role may lack.
|
|
29
|
+
2. Confirm: `kubectl -n wardby-coding describe role wardby-power` lists both
|
|
30
|
+
rules, and `kubectl -n wardby-coding get rolebinding wardby-power` exists.
|
|
31
|
+
3. If you meant to turn the mode off, unset `WARDBY_LOW_POWER` on the control
|
|
32
|
+
plane too, then re-run `up.sh` without it.
|
|
33
|
+
4. Trigger the run again.
|
|
34
|
+
|
|
35
|
+
See [Low-power mode on GKE](../low-power-mode.md).
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/low-power-wake-timeout
|
|
3
|
+
title: Wake timed out (scale to zero)
|
|
4
|
+
summary: When scaling from zero, the coding proxy or native gateway did not become ready after being scaled up, or its Deployment does not exist.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, low-power, gke, kubernetes, scale-to-zero, low_power_wake_timeout]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Low-power wake timed out
|
|
11
|
+
|
|
12
|
+
`low_power_wake_timeout` means a run needed the coding proxy (or, for a sandbox
|
|
13
|
+
run, the native gateway), Wardby scaled it from 0 to 1, and no ready endpoint
|
|
14
|
+
appeared within the bound. The bound is 5 minutes, or
|
|
15
|
+
`KUBERNETES_READY_TIMEOUT_MS` for the proxy and
|
|
16
|
+
`NATIVE_SANDBOX_READY_TIMEOUT_MS` for the gateway when that is higher. It is
|
|
17
|
+
also raised when the target Deployment does not exist.
|
|
18
|
+
|
|
19
|
+
1. Check the Deployment exists: `kubectl -n wardby-coding get deploy wardby-coding-proxy wardby-native-gateway`
|
|
20
|
+
(names follow `KUBERNETES_PROXY_SERVICE` and `NATIVE_GATEWAY_SERVICE`). If
|
|
21
|
+
one is missing, re-run `deploy/gke/up.sh`.
|
|
22
|
+
2. If it exists, look at why its Pod is not ready: `kubectl -n wardby-coding describe pod -l app.kubernetes.io/name=wardby-coding-proxy`.
|
|
23
|
+
A cold Autopilot node can take 1 to 2 minutes; unschedulable Pods, image
|
|
24
|
+
pull errors or a failing sidecar are the usual causes.
|
|
25
|
+
3. If the node is simply slow, raise the timeout for that target above 5
|
|
26
|
+
minutes (300000): set `KUBERNETES_READY_TIMEOUT_MS` (proxy) or
|
|
27
|
+
`NATIVE_SANDBOX_READY_TIMEOUT_MS` (gateway) on the control-plane Deployment.
|
|
28
|
+
4. Trigger the run again.
|
|
29
|
+
|
|
30
|
+
See [Low-power mode on GKE](../low-power-mode.md).
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/mobile-disabled
|
|
3
|
+
title: Mobile sign-in is not enabled
|
|
4
|
+
summary: The server refused the mobile app's sign-in or registration because WARDBY_MOBILE_ENABLED is not true.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, mobile, sign-in, oauth, mobile_disabled, WARDBY_MOBILE_ENABLED]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Mobile sign-in is not enabled
|
|
11
|
+
|
|
12
|
+
Mobile sign-in is switched off. An operator turns it on with
|
|
13
|
+
`WARDBY_MOBILE_ENABLED`.
|
|
14
|
+
|
|
15
|
+
Only client registration returns the reason: `400 invalid_redirect_uri` with the
|
|
16
|
+
description `mobile_disabled: mobile sign-in is not enabled on this server
|
|
17
|
+
(WARDBY_MOBILE_ENABLED)`. Sign-in (authorize) and token refresh return the
|
|
18
|
+
generic `invalid_request` or `invalid_grant` with an `id`. The `mobile_disabled`
|
|
19
|
+
reason appears only in the control-plane log line "self-hosted OAuth request
|
|
20
|
+
rejected" for that `id`, so look the `id` up in the control-plane logs.
|
|
21
|
+
|
|
22
|
+
1. Set `WARDBY_MOBILE_ENABLED=true` on the control plane and restart it. On GKE,
|
|
23
|
+
redeploy with `WARDBY_MOBILE_ENABLED=true` passed to `deploy/gke/up.sh`; a
|
|
24
|
+
run without it turns mobile sign-in off again.
|
|
25
|
+
2. If you use a white-label build, check that `WARDBY_MOBILE_REDIRECT_URI`
|
|
26
|
+
matches the redirect URI the app uses.
|
|
27
|
+
3. Sign in again from the app.
|
|
28
|
+
|
|
29
|
+
With an external identity provider this error does not come from Wardby; check
|
|
30
|
+
that the IdP client lists the mobile redirect URI. See
|
|
31
|
+
[Use the wardby mobile app](../mobile-app.md).
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/native-sandbox-capacity
|
|
3
|
+
title: Native sandbox is at capacity
|
|
4
|
+
summary: A sandbox run could not start because the concurrent sandbox run limit or the namespace ResourceQuota has no room; the run failed at start and was not queued.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, native-agents, sandbox, kubernetes, capacity, quota, native_sandbox_capacity]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Native sandbox is at capacity
|
|
11
|
+
|
|
12
|
+
`native_sandbox_capacity` means a sandbox-mode run could not start because there was no room for it. The run failed at start; it is not queued. The message gives one of two reasons:
|
|
13
|
+
|
|
14
|
+
- **"N sandbox runs are already active (NATIVE_SANDBOX_MAX_CONCURRENT)"**: the cap on concurrent sandbox runs, counted across all server replicas as active gateway sessions, has been reached.
|
|
15
|
+
- **"the namespace's ResourceQuota has no room for another native worker pod"**: with `NATIVE_SANDBOX_LAUNCHER=kubernetes`, the run namespace's quota on pods, CPU, or memory is full.
|
|
16
|
+
|
|
17
|
+
1. Wait for running sandbox runs to finish, then trigger the run again.
|
|
18
|
+
2. To allow more at once, raise `NATIVE_SANDBOX_MAX_CONCURRENT` (unset means no cap) and raise the namespace ResourceQuota with it. Each worker pod needs its CPU and memory limits (`NATIVE_SANDBOX_CPUS`, `NATIVE_SANDBOX_MEMORY_MB`) from the quota, which coding runs and the gateway share. Idle warm-pool workers (`NATIVE_SANDBOX_WARM_POOL_SIZE`) take quota too, so leave room for `NATIVE_SANDBOX_MAX_CONCURRENT` plus the pool size.
|
|
19
|
+
3. Check current usage with `kubectl describe resourcequota -n <namespace>` and `kubectl get pods -n <namespace> -l wardby.io/component=native-run`.
|
|
20
|
+
|
|
21
|
+
See [Run native agents in a sandbox](../native-sandbox.md) and the
|
|
22
|
+
[native sandbox guide](../../docs/native-sandbox.md).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/native-sandbox-deadline-exceeded
|
|
3
|
+
title: Native run deadline exceeded
|
|
4
|
+
summary: A sandbox run passed its 60-minute maximum lifetime and its worker was stopped.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, native-agents, sandbox, native_sandbox_deadline_exceeded]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Native run deadline exceeded
|
|
11
|
+
|
|
12
|
+
`native_sandbox_deadline_exceeded` means the run was still going when it reached the sandbox's maximum lifetime of 60 minutes, so the worker was stopped and the run failed. The limit protects against stuck runs and is not configurable.
|
|
13
|
+
|
|
14
|
+
1. Look for a tool that waits forever or a loop that does not converge.
|
|
15
|
+
2. Split long work into smaller runs, or delegate parts to sub-agents (each is its own run).
|
|
16
|
+
3. Trigger the run again.
|
|
17
|
+
|
|
18
|
+
See [Run native agents in a sandbox](../native-sandbox.md) and the
|
|
19
|
+
[native sandbox guide](../../docs/native-sandbox.md).
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/native-sandbox-docker-failed
|
|
3
|
+
title: Native worker Docker command failed
|
|
4
|
+
summary: A Docker command Wardby ran to start or clean up a sandbox worker failed.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, native-agents, sandbox, native_sandbox_docker_failed]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Native worker Docker command failed
|
|
11
|
+
|
|
12
|
+
`native_sandbox_docker_failed` means a Docker command needed to launch a worker (pull the image, create the run network, join the gateway to it, or start the container) failed. The message names the step and includes Docker's error output.
|
|
13
|
+
|
|
14
|
+
1. Confirm the server can reach the Docker daemon (`docker info` as the server's user).
|
|
15
|
+
2. For an image step, confirm the image exists on the host (a local id must already be present; a digest must be pullable without registry credentials, or pull it beforehand).
|
|
16
|
+
3. For a network step, confirm `NATIVE_GATEWAY_CONTAINER` names a running gateway container on this Docker host.
|
|
17
|
+
4. Trigger the run again.
|
|
18
|
+
|
|
19
|
+
See [Run native agents in a sandbox](../native-sandbox.md) and the
|
|
20
|
+
[native sandbox guide](../../docs/native-sandbox.md).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/native-sandbox-gateway-unavailable
|
|
3
|
+
title: Native gateway Service unavailable
|
|
4
|
+
summary: On Kubernetes, Wardby could not find a usable native gateway Service, so a sandbox run could not start.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, native-agents, sandbox, kubernetes, native_sandbox_gateway_unavailable]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Native gateway Service unavailable
|
|
11
|
+
|
|
12
|
+
`native_sandbox_gateway_unavailable` means that with `NATIVE_SANDBOX_LAUNCHER=kubernetes`, the Service named by `NATIVE_GATEWAY_SERVICE` (default `wardby-native-gateway`) does not exist in the sandbox namespace or has no ClusterIP. Workers dial the Service's ClusterIP, so Wardby needs one.
|
|
13
|
+
|
|
14
|
+
1. Confirm the namespace: `NATIVE_SANDBOX_NAMESPACE`, else `KUBERNETES_NAMESPACE`, else `wardby-coding`.
|
|
15
|
+
2. Create the Service there as a regular ClusterIP Service (not headless) that selects the gateway pods (`app.kubernetes.io/name: wardby-native-gateway`) and exposes both 8790 and the deny port 8791.
|
|
16
|
+
3. Confirm the server's Role allows `get` on `services` in that namespace.
|
|
17
|
+
4. Alternatively set `NATIVE_GATEWAY_URL` to an address workers can dial, and keep the gateway's NetworkPolicy and the workers' egress consistent with it.
|
|
18
|
+
5. Trigger the run again.
|
|
19
|
+
|
|
20
|
+
See [Run native agents in a sandbox](../native-sandbox.md) and the
|
|
21
|
+
[native sandbox guide](../../docs/native-sandbox.md).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/native-sandbox-image-not-pinned
|
|
3
|
+
title: Native worker image not pinned
|
|
4
|
+
summary: NATIVE_SANDBOX_WORKER_IMAGE is a mutable tag, so Wardby refused to launch a sandbox worker.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, native-agents, sandbox, native_sandbox_image_not_pinned]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Native worker image not pinned
|
|
11
|
+
|
|
12
|
+
`native_sandbox_image_not_pinned` means `NATIVE_SANDBOX_WORKER_IMAGE` is not immutable. Wardby only launches a worker from a digest (`repo@sha256:...`) or a local image id, so the code it isolates cannot change underneath it.
|
|
13
|
+
|
|
14
|
+
1. Use the digest-pinned reference listed as `nativeWorker` in `dist/quickstart-images.json` for your version, or build locally with `npm run native-worker:image:local` and use the image id from `docker image inspect --format '{{.Id}}' wardby-native-worker:local`.
|
|
15
|
+
2. On Kubernetes (`NATIVE_SANDBOX_LAUNCHER=kubernetes`) a local image id is not accepted: the image must be a registry digest, `repo@sha256:...`, that the cluster can pull. Push your build to a registry and use its digest.
|
|
16
|
+
3. Set it as `NATIVE_SANDBOX_WORKER_IMAGE`, restart the server, and trigger the run again.
|
|
17
|
+
|
|
18
|
+
See [Run native agents in a sandbox](../native-sandbox.md) and the
|
|
19
|
+
[native sandbox guide](../../docs/native-sandbox.md).
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/native-sandbox-isolation-mismatch
|
|
3
|
+
title: Native worker pod differs from what Wardby built
|
|
4
|
+
summary: On Kubernetes, the sandbox pod or its NetworkPolicy as stored by the cluster differs from what Wardby created, so the run failed before starting.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, native-agents, sandbox, kubernetes, native_sandbox_isolation_mismatch]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Native worker pod differs from what Wardby built
|
|
11
|
+
|
|
12
|
+
`native_sandbox_isolation_mismatch` means that with `NATIVE_SANDBOX_LAUNCHER=kubernetes`, Wardby read back the worker pod and NetworkPolicy it had just created and found a security-relevant difference: a service-account token, host networking, a different runtime class, priority class, image, container resources, or container security context or environment, an extra init container, or a changed NetworkPolicy. Something in the cluster modified the objects after creation, typically a mutating admission webhook, policy engine, or service mesh injector. The run is failed and the pod removed.
|
|
13
|
+
|
|
14
|
+
1. Inspect an equivalent pod while a run is starting: `kubectl get pods -n <namespace> -l wardby.io/component=native-run -o yaml`.
|
|
15
|
+
2. Find the admission controller that changes it (`kubectl get mutatingwebhookconfigurations`) and exempt pods labeled `wardby.io/component: native-run` and the run namespace's NetworkPolicies, for example by namespace or label selector. Do not disable sidecar-style injection by editing the pod after the fact.
|
|
16
|
+
3. If `NATIVE_SANDBOX_RUNTIME_CLASS` or `NATIVE_SANDBOX_PRIORITY_CLASS` is set, confirm no policy overrides it. On GKE Autopilot set `KUBERNETES_PLATFORM=gke-autopilot` so pod resources are already in the form Autopilot admits and are not rewritten.
|
|
17
|
+
4. Trigger the run again.
|
|
18
|
+
|
|
19
|
+
See [Run native agents in a sandbox](../native-sandbox.md) and the
|
|
20
|
+
[native sandbox guide](../../docs/native-sandbox.md).
|