@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
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/native-sandbox-network-unenforced
|
|
3
|
+
title: Native worker network isolation not proven
|
|
4
|
+
summary: On Kubernetes, Wardby could not prove a sandbox pod's network isolation in time, so it removed the pod and failed the run.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, native-agents, sandbox, kubernetes, native_sandbox_network_unenforced]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Native worker network isolation not proven
|
|
11
|
+
|
|
12
|
+
`native_sandbox_network_unenforced` means that with `NATIVE_SANDBOX_LAUNCHER=kubernetes`, Wardby ran a check inside the worker pod and it did not pass before the time limit. The check requires the gateway to be reachable on port 8790 while the gateway's deny port (8791 by default), an outside address, and the cloud metadata endpoints (`169.254.169.254:80`, the EKS Pod Identity agent `169.254.170.23:80` and `[fd00:ec2::23]:80`, and EC2's IPv6 metadata address `[fd00:ec2::254]:80`) are not. The message says which part failed. The pod is removed and the run never started.
|
|
13
|
+
|
|
14
|
+
- **"the gateway was unreachable"**: confirm the gateway Deployment has ready pods, the `wardby-native-gateway` Service (or `NATIVE_GATEWAY_SERVICE`) exposes 8790 and 8791, and the gateway's own NetworkPolicy admits `wardby.io/component: native-run` pods on port 8790.
|
|
15
|
+
- **"the gateway's deny port was reachable"** or **"an outside address was reachable"** (or a metadata endpoint): the cluster is not enforcing the per-run NetworkPolicy. Confirm your CNI enforces `NetworkPolicy` (some local clusters need a policy-capable CNI such as Calico), and that no other policy or mesh adds egress for these pods.
|
|
16
|
+
- If the Service lacks port 8791, or the gateway's policy does not admit 8791, unprogrammed pods would look isolated. Keep both in place; the check depends on them.
|
|
17
|
+
- On a slow node the policy can take longer to program. Retrigger the run once, or raise `NATIVE_SANDBOX_ENFORCEMENT_TIMEOUT_MS` (default 30000), before changing anything.
|
|
18
|
+
|
|
19
|
+
A cluster that does not enforce NetworkPolicy fails every sandbox run this way, by design. Switch the agent back to `control-plane` if you cannot enable enforcement.
|
|
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,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/native-sandbox-requires-catalog
|
|
3
|
+
title: Sandbox run has no model catalog entry
|
|
4
|
+
summary: A sandbox-mode run could not start because no model catalog entry was recorded for it.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, native-agents, sandbox, model-catalog, native_sandbox_requires_catalog]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Sandbox run has no model catalog entry
|
|
11
|
+
|
|
12
|
+
`native_sandbox_requires_catalog` means a sandbox-mode run reached its worker
|
|
13
|
+
launch without a model catalog entry. The worker prices every model call and
|
|
14
|
+
enforces the run's budget from that entry, so Wardby fails the run before
|
|
15
|
+
starting a worker or spending anything.
|
|
16
|
+
|
|
17
|
+
Every run records its model's catalog entry when it first starts. A model
|
|
18
|
+
that is unknown, disabled, or has no configured provider fails earlier with
|
|
19
|
+
its own model error, not this one. This error only appears when the process
|
|
20
|
+
executing the run does not use Wardby's catalog-backed model router, for
|
|
21
|
+
example a modified build or an embedding that supplies its own LLM provider.
|
|
22
|
+
|
|
23
|
+
1. Run sandbox-mode agents on a standard `wardby serve` (or `wardby
|
|
24
|
+
scheduler` / `wardby mcp`) process, which always uses the catalog.
|
|
25
|
+
2. If you supply your own LLM provider, route it through the model catalog,
|
|
26
|
+
or keep the agent on `control-plane` with `update_agent` or
|
|
27
|
+
`wardby agent mode <name> control-plane`.
|
|
28
|
+
3. Trigger the run again. A failed run is not retried on its own.
|
|
29
|
+
|
|
30
|
+
See [Run native agents in a sandbox](../native-sandbox.md) and
|
|
31
|
+
[Models and the model catalog](../models.md).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/native-sandbox-unavailable
|
|
3
|
+
title: Native execution mode unavailable
|
|
4
|
+
summary: A run failed with native_sandbox_unavailable because its agent is in sandbox mode but the server has no native sandbox configured.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, native-agents, sandbox, native_sandbox_unavailable]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Native execution mode unavailable
|
|
11
|
+
|
|
12
|
+
`native_sandbox_unavailable` means the agent's `nativeExecutionMode` is `sandbox` but this deployment has no native sandbox configured. Wardby fails the run before any spend rather than running it unisolated.
|
|
13
|
+
|
|
14
|
+
1. To use the sandbox, set `NATIVE_SANDBOX_LAUNCHER=docker`, `NATIVE_SANDBOX_WORKER_IMAGE`, and `NATIVE_GATEWAY_CONTAINER` on the server that executes runs (`wardby serve` or `wardby scheduler`), start the native gateway, and restart the server.
|
|
15
|
+
2. Otherwise set the agent back to `control-plane` with `update_agent`.
|
|
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,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/native-sandbox-warm-delivery-failed
|
|
3
|
+
title: Native sandbox warm worker could not take the run
|
|
4
|
+
summary: A run claimed an idle warm-pool worker, delivering its input failed, and the worker could not be confirmed stopped within 30 seconds, so the run failed instead of cold-launching.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, native-agents, sandbox, warm-pool, kubernetes, docker, native_sandbox_warm_delivery_failed]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Native sandbox warm worker could not take the run
|
|
11
|
+
|
|
12
|
+
`native_sandbox_warm_delivery_failed` means a sandbox run claimed an idle worker from the warm pool (`NATIVE_SANDBOX_WARM_POOL_SIZE`), but writing the run's input into that worker failed. The worker may already hold the run's one-time gateway capability, so Wardby removes it and waits up to 30 seconds for it to be confirmed gone before starting a cold worker. This error means it could not be confirmed gone in that time, so the run failed rather than risk two workers holding the same capability. If the worker is confirmed gone, the run cold-launches and you see no error (the log has a `fallback` event).
|
|
13
|
+
|
|
14
|
+
1. Trigger the run again. Most failures are transient.
|
|
15
|
+
2. Check that the worker is gone: `kubectl get pods -n <namespace> -l wardby.io/pool=warm` (Kubernetes) or `docker ps --all --filter label=io.wardby.pool=warm` (Docker). Pool upkeep removes leftovers, but a stuck pod usually means the node or Docker host is unhealthy.
|
|
16
|
+
3. Look for `native-warm-pool` log entries with `event` `fallback`, and check that the server may exec into pods in the run namespace.
|
|
17
|
+
4. To bypass the pool while you investigate, set `NATIVE_SANDBOX_WARM_POOL_SIZE=0`; every run then cold-starts.
|
|
18
|
+
|
|
19
|
+
See [Run native agents in a sandbox](../native-sandbox.md) and the
|
|
20
|
+
[native sandbox guide](../../docs/native-sandbox.md#warm-pool). A related error is
|
|
21
|
+
[native_sandbox_capacity](native-sandbox-capacity.md).
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/native-sandbox-worker-exited
|
|
3
|
+
title: Native worker exited without a result
|
|
4
|
+
summary: The sandbox worker container ended without producing a result.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, native-agents, sandbox, native_sandbox_worker_exited]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Native worker exited without a result
|
|
11
|
+
|
|
12
|
+
`native_sandbox_worker_exited` means the worker container stopped without reporting a result; the message includes its exit code. Common causes are a tool that exhausted the worker's memory or process limit, or a crash in tool code.
|
|
13
|
+
|
|
14
|
+
1. Read the exit code in the run's error (`get_run`). Code 137 usually means the memory limit was hit.
|
|
15
|
+
2. If limits are the cause, raise `NATIVE_SANDBOX_MEMORY_MB`, `NATIVE_SANDBOX_PIDS`, or `NATIVE_SANDBOX_CPUS` on the server and restart it.
|
|
16
|
+
3. Otherwise test the agent's tools with `dry_run_tool` and fix the failing code.
|
|
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,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/native-sandbox-worker-lost
|
|
3
|
+
title: Native worker lost
|
|
4
|
+
summary: The sandbox worker container disappeared and was not relaunched.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, native-agents, sandbox, native_sandbox_worker_lost]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Native worker lost
|
|
11
|
+
|
|
12
|
+
`native_sandbox_worker_lost` means the run's worker container (or Kubernetes pod) is gone and left no result, for example because the Docker host restarted or an operator removed the container. Wardby never relaunches a worker, because a relaunch could repeat tool side effects.
|
|
13
|
+
|
|
14
|
+
1. Check whether the Docker host or daemon restarted around the run's time.
|
|
15
|
+
2. List workers with `docker ps --all --filter label=io.wardby.component=native-worker`; do not remove workers of running runs by hand.
|
|
16
|
+
3. On Kubernetes, check whether the node was drained or preempted, and list pods with `kubectl get pods -n <namespace> -l wardby.io/component=native-run`.
|
|
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,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/native-sandbox-worker-unready
|
|
3
|
+
title: Native worker pod did not start
|
|
4
|
+
summary: On Kubernetes, the sandbox worker pod did not reach the Running state in time, so the run failed before starting.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, native-agents, sandbox, kubernetes, native_sandbox_worker_unready]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Native worker pod did not start
|
|
11
|
+
|
|
12
|
+
`native_sandbox_worker_unready` means that with `NATIVE_SANDBOX_LAUNCHER=kubernetes`, the worker pod stayed pending past the start-up limit (`NATIVE_SANDBOX_READY_TIMEOUT_MS`, default two minutes). Nothing ran.
|
|
13
|
+
|
|
14
|
+
1. Describe the pod while it waits: `kubectl describe pod -n <namespace> -l wardby.io/component=native-run`. Look at the events for image pull errors, unschedulable reasons, or an unknown runtime class.
|
|
15
|
+
2. Image pull: the cluster must be able to pull `NATIVE_SANDBOX_WORKER_IMAGE` (a registry digest) without interactive credentials; add a pull secret to the namespace's default service account if the registry is private.
|
|
16
|
+
3. Scheduling: raise node capacity or lower `NATIVE_SANDBOX_CPUS` and `NATIVE_SANDBOX_MEMORY_MB`, and check namespace ResourceQuotas.
|
|
17
|
+
4. Runtime class: confirm `NATIVE_SANDBOX_RUNTIME_CLASS` (or `KUBERNETES_RUNTIME_CLASS`) exists on the cluster. On Amazon EKS (`KUBERNETES_PLATFORM=eks`) the `gvisor` RuntimeClass must use handler `runsc` and its scheduling block must match your sandbox nodes (label `wardby.dev/sandbox=gvisor`, taint `sandbox=gvisor:NoSchedule`); a mismatch leaves the pod pending.
|
|
18
|
+
5. On a cold node, such as a first gVisor pod on GKE Autopilot (about two minutes), raise `NATIVE_SANDBOX_READY_TIMEOUT_MS` (1000 to 1800000; about 600000 on Autopilot).
|
|
19
|
+
6. Trigger the run again.
|
|
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,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/secret-broker-body-invalid
|
|
3
|
+
title: Secret broker body invalid
|
|
4
|
+
summary: Body placement needs a JSON-object or form-encoded request body with a matching content-type.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, secrets, secret_broker_body_invalid]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Secret broker body invalid
|
|
11
|
+
|
|
12
|
+
`secret_broker_body_invalid` means a secret placed in the request body could not
|
|
13
|
+
be added to the body the tool sent. Body placement needs one of:
|
|
14
|
+
|
|
15
|
+
- a JSON object body with `content-type: application/json` (or a `+json` type);
|
|
16
|
+
- a form body with `content-type: application/x-www-form-urlencoded`.
|
|
17
|
+
|
|
18
|
+
The request must have a body, valid JSON that is an object (not an array or a
|
|
19
|
+
scalar), and a matching `content-type` header.
|
|
20
|
+
|
|
21
|
+
1. Send a body of a supported type and set the `content-type` header to match.
|
|
22
|
+
2. If the API expects the credential elsewhere, change the placement with
|
|
23
|
+
`set_secret_broker` to `header` or `query`.
|
|
24
|
+
|
|
25
|
+
See [Brokered secrets](../brokered-secrets.md) and the
|
|
26
|
+
[secrets guide](../../docs/tool-secrets.md).
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/secret-broker-changed
|
|
3
|
+
title: Brokering changed since the link was created
|
|
4
|
+
summary: A browser link to remove brokering was created before the secret's broker config changed, so it no longer applies.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, secrets, secret_broker_changed]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Brokering changed since the link was created
|
|
11
|
+
|
|
12
|
+
`secret_broker_changed` means the browser link for removing brokering was minted
|
|
13
|
+
for a broker config that has since changed or been removed. A link only ever
|
|
14
|
+
removes the exact config it was created for.
|
|
15
|
+
|
|
16
|
+
1. Call `set_secret_broker` with `broker: null` again to get a new link.
|
|
17
|
+
2. Check the config shown on the new page before confirming removal.
|
|
18
|
+
|
|
19
|
+
See [Brokered secrets](../brokered-secrets.md) and the
|
|
20
|
+
[secrets guide](../../docs/tool-secrets.md).
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/secret-broker-config-invalid
|
|
3
|
+
title: Secret broker config invalid
|
|
4
|
+
summary: A broker config failed validation: hosts, path prefixes, or placement are malformed.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, secrets, secret_broker_config_invalid]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Secret broker config invalid
|
|
11
|
+
|
|
12
|
+
`secret_broker_config_invalid` means the broker config passed to `create_secret`,
|
|
13
|
+
`set_secret_broker`, or the browser form did not validate. The message lists
|
|
14
|
+
each problem. Common causes:
|
|
15
|
+
|
|
16
|
+
- `hosts` is empty, has more than 20 entries, or contains a scheme, port,
|
|
17
|
+
wildcard, or IP address (including short forms such as `127.1`), or a label
|
|
18
|
+
ending in `-`; use exact hostnames such as `api.example.com`;
|
|
19
|
+
- a `pathPrefixes` entry does not start with `/`, or contains `?`, `#`, a
|
|
20
|
+
backslash, a control character, `%2F`, or `%5C`;
|
|
21
|
+
- a header `format` does not contain `{value}` exactly once or contains a line
|
|
22
|
+
break, or the header name is not allowed (`Host`, `Content-Length` and similar);
|
|
23
|
+
- an AWS `region` or `service` is malformed;
|
|
24
|
+
- the config or its placement has fields it does not define.
|
|
25
|
+
|
|
26
|
+
1. Fix the fields named in the message and retry.
|
|
27
|
+
2. The config shape is `{ hosts, pathPrefixes?, placement }`.
|
|
28
|
+
|
|
29
|
+
See [Brokered secrets](../brokered-secrets.md) and the
|
|
30
|
+
[secrets guide](../../docs/tool-secrets.md).
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/secret-broker-conflict
|
|
3
|
+
title: Secret broker placement conflict
|
|
4
|
+
summary: The request already sets the header, parameter, or field a broker places, two brokers collide, or more than one SigV4 secret was named.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, secrets, secret_broker_conflict]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Secret broker placement conflict
|
|
11
|
+
|
|
12
|
+
`secret_broker_conflict` means the request would set the same spot twice. A
|
|
13
|
+
brokered value is never merged with or overridden by one from the tool. It
|
|
14
|
+
occurs when:
|
|
15
|
+
|
|
16
|
+
- the tool sets the header, query parameter, or body field that a brokered
|
|
17
|
+
secret places (for SigV4: `authorization`, `x-amz-date`,
|
|
18
|
+
`x-amz-security-token`, or `x-amz-content-sha256`);
|
|
19
|
+
- two named secrets place the same header, parameter, or field;
|
|
20
|
+
- more than one AWS SigV4 secret is named in one request.
|
|
21
|
+
|
|
22
|
+
1. Remove the conflicting header, parameter, or field from the tool's request.
|
|
23
|
+
2. Send secrets that place the same spot in separate requests.
|
|
24
|
+
3. Name at most one SigV4 secret per request.
|
|
25
|
+
|
|
26
|
+
See [Brokered secrets](../brokered-secrets.md) and the
|
|
27
|
+
[secrets guide](../../docs/tool-secrets.md).
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/secret-broker-destination-denied
|
|
3
|
+
title: Secret broker destination denied
|
|
4
|
+
summary: A fetch with a brokered secret targeted a URL that is not https, uses a non-default port, or is outside the allowed hosts or path prefixes.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, secrets, secret_broker_destination_denied]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Secret broker destination denied
|
|
11
|
+
|
|
12
|
+
`secret_broker_destination_denied` means a brokered secret may not be sent to
|
|
13
|
+
the requested URL. The message says which check failed:
|
|
14
|
+
|
|
15
|
+
- the URL is not `https`, or names a port other than the default;
|
|
16
|
+
- the host is not in the secret's `hosts` (exact match, no wildcards);
|
|
17
|
+
- the path does not start with any of the secret's `pathPrefixes`, or, for a
|
|
18
|
+
secret with `pathPrefixes`, contains an encoded slash or backslash (`%2F`,
|
|
19
|
+
`%5C`).
|
|
20
|
+
|
|
21
|
+
1. Correct the URL in the tool.
|
|
22
|
+
2. If the destination is intended, the secret's owner updates the config with
|
|
23
|
+
`set_secret_broker`, adding the host or path prefix.
|
|
24
|
+
3. Make sure the tool attachment's `allowedHosts` also lists the host; a host
|
|
25
|
+
missing there is refused by the normal fetch policy.
|
|
26
|
+
|
|
27
|
+
See [Brokered secrets](../brokered-secrets.md) and the
|
|
28
|
+
[secrets guide](../../docs/tool-secrets.md).
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/secret-broker-value-invalid
|
|
3
|
+
title: Secret broker value invalid
|
|
4
|
+
summary: A brokered value is shorter than 6 characters, or an AWS SigV4 secret is not the expected JSON.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, secrets, secret_broker_value_invalid]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Secret broker value invalid
|
|
11
|
+
|
|
12
|
+
`secret_broker_value_invalid` means the stored value cannot be brokered under its
|
|
13
|
+
config. It is returned when saving a config and when a tool uses the secret.
|
|
14
|
+
|
|
15
|
+
- A brokered value must be at least 6 characters.
|
|
16
|
+
- An AWS SigV4 secret's value must be JSON
|
|
17
|
+
`{"accessKeyId": "...", "secretAccessKey": "...", "sessionToken": "..."}` with
|
|
18
|
+
no other keys. `sessionToken` is optional; the secret access key and session
|
|
19
|
+
token must each be at least 6 characters.
|
|
20
|
+
|
|
21
|
+
1. Re-enter the value with `create_secret` using the same name; it rotates the
|
|
22
|
+
value in place. Leave out `broker`: a rotation without one keeps the
|
|
23
|
+
existing broker config. In the browser form, correct the value and submit
|
|
24
|
+
the same link again.
|
|
25
|
+
2. For SigV4, store the credentials as that JSON object.
|
|
26
|
+
|
|
27
|
+
See [Brokered secrets](../brokered-secrets.md) and the
|
|
28
|
+
[secrets guide](../../docs/tool-secrets.md).
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/secret-brokered
|
|
3
|
+
title: Secret is brokered and cannot be read
|
|
4
|
+
summary: A tool called secrets.get on a brokered secret; brokered secrets are only sent with fetch(url, { secrets }).
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, secrets, secret_brokered]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Secret is brokered and cannot be read
|
|
11
|
+
|
|
12
|
+
`secret_brokered` means a tool called `secrets.get(name)` on a secret that is
|
|
13
|
+
brokered. A brokered secret never exposes its value to tool code.
|
|
14
|
+
|
|
15
|
+
1. Update the tool to send the secret with
|
|
16
|
+
`fetch(url, { secrets: ["NAME"] })`; the host places the value in the request.
|
|
17
|
+
2. Or, if the tool really must read the value, have the secret owner remove
|
|
18
|
+
brokering with `set_secret_broker` and `broker: null`, confirmed in the
|
|
19
|
+
browser. This makes the value readable by every tool granted it.
|
|
20
|
+
3. `attach_tool` and `set_secret_broker` warn when a granted tool calls
|
|
21
|
+
`secrets.get`; that scan is best-effort.
|
|
22
|
+
|
|
23
|
+
See [Brokered secrets](../brokered-secrets.md) and the
|
|
24
|
+
[secrets guide](../../docs/tool-secrets.md).
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/secret-not-brokered
|
|
3
|
+
title: Secret is not brokered
|
|
4
|
+
summary: A fetch named a secret that is readable, not attached to the agent, or not granted to the tool.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, secrets, secret_not_brokered]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Secret is not brokered
|
|
11
|
+
|
|
12
|
+
`secret_not_brokered` means `fetch(url, { secrets: [...] })` named a secret that
|
|
13
|
+
is not a brokered secret available to this tool: it is readable, it is not
|
|
14
|
+
attached to the agent, it is not listed in the attachment's `allowedSecrets`, or
|
|
15
|
+
the request named more than 8 secrets.
|
|
16
|
+
|
|
17
|
+
1. Check the name matches the alias the secret is attached under
|
|
18
|
+
(`attach_secret`) and appears in the tool attachment's `allowedSecrets`.
|
|
19
|
+
2. To send the secret through `fetch`, make it brokered with
|
|
20
|
+
`set_secret_broker { name, broker }`.
|
|
21
|
+
3. If the secret is meant to stay readable, read it with `secrets.get(name)`
|
|
22
|
+
instead of naming it in `fetch`.
|
|
23
|
+
|
|
24
|
+
See [Brokered secrets](../brokered-secrets.md) and the
|
|
25
|
+
[secrets guide](../../docs/tool-secrets.md).
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/slack-auth-failed
|
|
3
|
+
title: Bot authentication failed — invalid or revoked token
|
|
4
|
+
summary: wardby's Slack bot token is invalid, revoked, disabled, or missing a required scope, so delivery to every linked channel is paused.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, notifications, auth, authentication, invalid_auth, token_revoked, missing_scope]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Bot authentication failed — invalid or revoked token
|
|
11
|
+
|
|
12
|
+
Slack returned `invalid_auth`, `token_revoked`, `account_inactive`,
|
|
13
|
+
`missing_scope`, or `not_authed` for `WARDBY_SLACK_BOT_TOKEN`. This is
|
|
14
|
+
different from a single channel being unreachable: it means the token
|
|
15
|
+
itself no longer works, so wardby pauses delivery to **every** linked
|
|
16
|
+
channel rather than attempting and failing each one. Deliveries already
|
|
17
|
+
queued stay pending — nothing is lost — and wardby automatically re-checks
|
|
18
|
+
the token every five minutes with Slack's `auth.test`, resuming delivery as
|
|
19
|
+
soon as it succeeds.
|
|
20
|
+
|
|
21
|
+
A **missing scope** (`missing_scope`) does not fix itself this way:
|
|
22
|
+
`auth.test` needs no scope, so the re-check succeeds, the next delivery fails
|
|
23
|
+
again, and delivery pauses again. Add the scope and reinstall the app (steps
|
|
24
|
+
1–2 below).
|
|
25
|
+
|
|
26
|
+
The same errors while linking a channel refuse the link, except
|
|
27
|
+
`missing_scope` from a missing `channels:read`/`groups:read`, which only
|
|
28
|
+
skips validating the channel id.
|
|
29
|
+
|
|
30
|
+
wardby logs this once per pause, not on every retry.
|
|
31
|
+
|
|
32
|
+
## What to do
|
|
33
|
+
|
|
34
|
+
1. In Slack, check the app's **OAuth & Permissions** page: is the bot
|
|
35
|
+
installed, and does it still have `chat:write` at minimum?
|
|
36
|
+
2. If the app's scopes changed (for example after editing
|
|
37
|
+
[`app-manifest.yaml`](../../deploy/slack/app-manifest.yaml)), reinstall
|
|
38
|
+
the app to the workspace to apply them.
|
|
39
|
+
3. If the token was revoked or the app was uninstalled, reinstall it and
|
|
40
|
+
copy a fresh Bot User OAuth Token.
|
|
41
|
+
4. If Slack issued a new token, set it as `WARDBY_SLACK_BOT_TOKEN` and
|
|
42
|
+
restart wardby; the startup log line `chat notifications acting as`
|
|
43
|
+
confirms it. If the token is unchanged (a scope added and the app
|
|
44
|
+
reinstalled), no restart is needed: pending deliveries go out after the
|
|
45
|
+
next check.
|
|
46
|
+
|
|
47
|
+
See [Send workflow updates to Slack](../../docs/slack-notifications.md) for
|
|
48
|
+
the full guide.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/slack-channel-unreachable
|
|
3
|
+
title: Channel unreachable — bot not invited or archived
|
|
4
|
+
summary: wardby's bot can no longer post to a linked Slack channel — it was removed, archived, or never invited — and that channel's pending deliveries have failed.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, notifications, channel, channel-error, not_in_channel, channel_not_found, is_archived]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Channel unreachable — bot not invited or archived
|
|
11
|
+
|
|
12
|
+
Slack returned `channel_not_found`, `not_in_channel`, or `is_archived` when
|
|
13
|
+
wardby tried to post or update a message. This means the bot genuinely
|
|
14
|
+
cannot write to that channel right now — the channel was deleted or
|
|
15
|
+
archived, or (most commonly) the bot was never invited to a private
|
|
16
|
+
channel.
|
|
17
|
+
|
|
18
|
+
wardby fails that channel's pending deliveries immediately rather than
|
|
19
|
+
retrying forever, and stamps the error on every `NotificationChannel` link
|
|
20
|
+
pointing at it. `list_notification_channels` shows it in `lastError` until
|
|
21
|
+
you fix it.
|
|
22
|
+
|
|
23
|
+
## What to do
|
|
24
|
+
|
|
25
|
+
1. In Slack, confirm the channel still exists and isn't archived.
|
|
26
|
+
2. If it's private, invite the bot: `/invite @wardby` (or whatever you named
|
|
27
|
+
the app) in that channel.
|
|
28
|
+
3. Confirm it worked with `test_notification_channel` — it posts "✅ wardby
|
|
29
|
+
is connected to this channel."
|
|
30
|
+
4. New events deliver as soon as the bot can post there again. Deliveries
|
|
31
|
+
that already failed are not resent. To clear `lastError`, re-link the
|
|
32
|
+
channel with `link_notification_channel` using the same arguments as
|
|
33
|
+
before (a successful `test_notification_channel` in step 3 also clears it).
|
|
34
|
+
|
|
35
|
+
If the channel is gone for good, remove the link with
|
|
36
|
+
`unlink_notification_channel` instead.
|
|
37
|
+
|
|
38
|
+
See [Send workflow updates to Slack](../../docs/slack-notifications.md) for
|
|
39
|
+
the full guide.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: errors/slack-not-configured
|
|
3
|
+
title: Notification bot token not configured
|
|
4
|
+
summary: link_notification_channel and test_notification_channel are refused because wardby has no Slack bot token configured.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [error, notifications, configuration, config, setup, WARDBY_SLACK_BOT_TOKEN]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Notification bot token not configured
|
|
11
|
+
|
|
12
|
+
`link_notification_channel` and `test_notification_channel` are refused when
|
|
13
|
+
the wardby server has no `WARDBY_SLACK_BOT_TOKEN` set. Without it, Slack workflow notifications are
|
|
14
|
+
entirely disabled: the notification dispatcher does not start, and any event
|
|
15
|
+
that would otherwise post to Slack is skipped — none are queued or
|
|
16
|
+
backfilled once you do configure it.
|
|
17
|
+
|
|
18
|
+
`list_notification_channels` and `unlink_notification_channel` still work,
|
|
19
|
+
so you can see and remove links created earlier, but nothing is delivered to
|
|
20
|
+
them while Slack is unconfigured.
|
|
21
|
+
|
|
22
|
+
## What to do
|
|
23
|
+
|
|
24
|
+
1. Create the Slack app from
|
|
25
|
+
[`deploy/slack/app-manifest.yaml`](../../deploy/slack/app-manifest.yaml)
|
|
26
|
+
and install it to your workspace.
|
|
27
|
+
2. Copy the Bot User OAuth Token (`xoxb-…`) and set
|
|
28
|
+
`WARDBY_SLACK_BOT_TOKEN`, stored like any other provider credential.
|
|
29
|
+
3. Restart wardby. The startup log line `chat notifications acting as`
|
|
30
|
+
confirms which Slack workspace and bot it authenticated as.
|
|
31
|
+
|
|
32
|
+
See [Send workflow updates to Slack](../../docs/slack-notifications.md) for
|
|
33
|
+
the full setup.
|
package/help/getting-started.md
CHANGED
|
@@ -30,6 +30,11 @@ Claude Code. Run `wardby doctor` afterwards to verify the local installation.
|
|
|
30
30
|
Review that branch with
|
|
31
31
|
`trigger_agent {"agentId": "<reviewer id>", "review": {"branch": "wardby/run-<run id>"}}`.
|
|
32
32
|
You need Docker and an OpenAI key (Codex) or an Anthropic key (Claude Code).
|
|
33
|
+
For a Python project (a root `pyproject.toml`, `setup.py`, `setup.cfg`,
|
|
34
|
+
`Pipfile` or `requirements*.txt`), the builder gets a Node + Python 3.12
|
|
35
|
+
workspace and can run `pytest`. Quickstart also offers the packages the
|
|
36
|
+
repository declares as the builder's package allowlist, so it can install
|
|
37
|
+
them (`--allow-repo-packages` in a non-interactive run).
|
|
33
38
|
See [Use local git repositories](local-repositories.md).
|
|
34
39
|
- **B. A coding agent that opens GitHub pull requests.** Do A first. Then
|
|
35
40
|
install a GitHub App on the repository (Contents and Pull requests: read and
|
|
@@ -42,6 +47,19 @@ Claude Code. Run `wardby doctor` afterwards to verify the local installation.
|
|
|
42
47
|
with webhooks, link a native agent to the repository with the `pull_request`
|
|
43
48
|
trigger, and open a pull request. See [Code review agents](code-review-agents.md).
|
|
44
49
|
|
|
50
|
+
- **D. Another language (Go, Java, Rust…).** Do A, then build an image with
|
|
51
|
+
that toolchain and set the builder's `codingProfile.workerImageRef`. Ask your
|
|
52
|
+
assistant "Help me build a Wardby worker image for Go"; it follows
|
|
53
|
+
[Build a custom worker image](build-worker-image.md).
|
|
54
|
+
|
|
55
|
+
The quickstart ends with a menu of next steps to ask your assistant: run the
|
|
56
|
+
builder and reviewer, allow more packages, build a worker image, schedule an
|
|
57
|
+
agent, set up an architecture reviewer and keeper (see
|
|
58
|
+
[Set up an architecture agent](architecture-agent.md), which has a
|
|
59
|
+
local-repository variant), or plan a GKE deployment
|
|
60
|
+
([Deploy on GKE](deploy-gke.md)). Each names the help article the assistant
|
|
61
|
+
follows.
|
|
62
|
+
|
|
45
63
|
The full step-by-step guide is "Choose what to set up next" in
|
|
46
64
|
[`docs/getting-started.md`](../docs/getting-started.md).
|
|
47
65
|
|
package/help/github.md
CHANGED
|
@@ -3,7 +3,7 @@ id: github-integration
|
|
|
3
3
|
title: Connect GitHub repositories
|
|
4
4
|
summary: Authorize repository access and configure Wardby coding or review agents through a scoped GitHub App.
|
|
5
5
|
audience: operator
|
|
6
|
-
tags: [github, repositories, coding-agents, code-review]
|
|
6
|
+
tags: [github, repositories, coding-agents, code-review, WARDBY_GITHUB_ALLOWED_ACCOUNTS]
|
|
7
7
|
appliesTo: >=0.2.1
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -27,6 +27,17 @@ Set the App's credentials as `GITHUB_APP_ID` and `GITHUB_APP_PRIVATE_KEY` on
|
|
|
27
27
|
the wardby server. Without them, a coding run on a GitHub repository fails with
|
|
28
28
|
[`vcs_github_not_configured`](errors/vcs-github-not-configured.md).
|
|
29
29
|
|
|
30
|
+
From Wardby 0.6.0, wardby serves only trusted GitHub accounts through the App:
|
|
31
|
+
the App's owner, plus any accounts listed in `WARDBY_GITHUB_ALLOWED_ACCOUNTS`
|
|
32
|
+
(comma-separated logins). Other accounts' events are ignored and their
|
|
33
|
+
repositories are refused with `github_account_not_allowed` (help article
|
|
34
|
+
`errors/github-account-not-allowed`), including existing links and scheduled
|
|
35
|
+
runs after an upgrade. wardby removes the App when another account installs it
|
|
36
|
+
or changes its repository selection; remove installations that already exist
|
|
37
|
+
on other accounts by hand (App settings, **Install App**). After transferring
|
|
38
|
+
the App or renaming its owner, list the new owner in the variable or restart
|
|
39
|
+
wardby.
|
|
40
|
+
|
|
30
41
|
No GitHub App is needed for a git repository on the wardby host. See
|
|
31
42
|
[Use local git repositories](local-repositories.md).
|
|
32
43
|
|
|
@@ -62,4 +73,10 @@ opened. See [Automatic review fix rounds](review-fix-rounds.md).
|
|
|
62
73
|
finishes, and gates its ability to approve on CI passing. See
|
|
63
74
|
[Review after CI (`waitForCi`)](code-review-agents.md#review-after-ci-waitforci).
|
|
64
75
|
|
|
76
|
+
With Wardby 0.6.0 or later, a `pull_request` reviewer also holds its review, with or without
|
|
77
|
+
`waitForCi`, until the pull request's own delegating run finishes, when its
|
|
78
|
+
opening coding run was delegated by a lead agent. See [Reviewing a pull
|
|
79
|
+
request a delegated run
|
|
80
|
+
opened](code-review-agents.md#reviewing-a-pull-request-a-delegated-run-opened).
|
|
81
|
+
|
|
65
82
|
For Jira Cloud instead of GitHub, see [Run Jira agents](jira.md).
|
|
@@ -21,7 +21,7 @@ audience, and the granted Wardby scopes in `scope` or `scp`.
|
|
|
21
21
|
|
|
22
22
|
Scopes authorize normal operations such as managing agents, runs, tools,
|
|
23
23
|
datastores, secrets, webhooks, budgets, packages, services, memory, and
|
|
24
|
-
models.
|
|
24
|
+
models. Six sensitive permissions have an additional role requirement:
|
|
25
25
|
|
|
26
26
|
- `agents:admin` requires the Wardby `admin` role.
|
|
27
27
|
- `packages:approve` requires the `admin` or `package-approver` role.
|
|
@@ -31,6 +31,10 @@ models. Five sensitive permissions have an additional role requirement:
|
|
|
31
31
|
- `models:admin` requires the `admin` or `model-manager` role. It adds,
|
|
32
32
|
overrides, disables, and resets model catalog entries; see
|
|
33
33
|
[Models and pricing](models.md).
|
|
34
|
+
- `power:manage` requires the `admin` role. It reads low-power state and
|
|
35
|
+
sleeps the coding proxy and native gateway now (`power_status`,
|
|
36
|
+
`power_sleep`); see
|
|
37
|
+
[Low-power mode](../docs/getting-started-gke.md#low-power-mode).
|
|
34
38
|
|
|
35
39
|
Map roles only from an IdP claim that users cannot self-assign. Removing a
|
|
36
40
|
role affects the next token the caller receives.
|