@wardby/cli 0.5.3 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +33 -0
- package/README.md +25 -14
- package/deploy/local/docker-compose.quickstart-coding.yml +13 -0
- package/dist/claude-coding-worker/context.d.ts +22 -0
- package/dist/claude-coding-worker/context.js +92 -0
- package/dist/claude-coding-worker/driver.d.ts +27 -3
- package/dist/claude-coding-worker/driver.js +161 -20
- package/dist/claude-coding-worker/main.js +34 -6
- package/dist/claude-coding-worker/sdk.js +25 -5
- package/dist/claude-coding-worker/tool-socket.d.ts +27 -0
- package/dist/claude-coding-worker/tool-socket.js +111 -0
- package/dist/claude-coding-worker/transcript.d.ts +18 -0
- package/dist/claude-coding-worker/transcript.js +77 -0
- package/dist/cli-help.d.ts +1 -1
- package/dist/cli-help.js +6 -2
- package/dist/cli-native-mode.d.ts +9 -0
- package/dist/cli-native-mode.js +20 -0
- package/dist/cli.d.ts +3 -1
- package/dist/cli.js +161 -11
- package/dist/coding/claude-context.d.ts +45 -0
- package/dist/coding/claude-context.js +434 -0
- package/dist/coding/continuation-wording.d.ts +35 -0
- package/dist/coding/continuation-wording.js +73 -0
- package/dist/coding/linked-issue-note.d.ts +23 -0
- package/dist/coding/linked-issue-note.js +47 -0
- package/dist/coding/merge-wording.d.ts +28 -0
- package/dist/coding/merge-wording.js +78 -0
- package/dist/coding/pr-description-note.d.ts +9 -0
- package/dist/coding/pr-description-note.js +32 -0
- package/dist/coding/profile.d.ts +50 -118
- package/dist/coding/profile.js +51 -4
- package/dist/coding/protected-path-wording.d.ts +8 -0
- package/dist/coding/protected-path-wording.js +1 -1
- package/dist/coding/protocol.d.ts +292 -270
- package/dist/coding/protocol.js +322 -15
- package/dist/coding/redact.d.ts +3 -0
- package/dist/coding/redact.js +12 -0
- package/dist/coding/registry/allowlist.d.ts +12 -0
- package/dist/coding/registry/allowlist.js +14 -1
- package/dist/coding/registry/audit-mode.d.ts +153 -0
- package/dist/coding/registry/audit-mode.js +304 -0
- package/dist/coding/registry/lockfile-shared.d.ts +36 -0
- package/dist/coding/registry/lockfile-shared.js +128 -0
- package/dist/coding/registry/lockfiles.js +1 -1
- package/dist/coding/registry/npm-lockfile-formats.d.ts +11 -0
- package/dist/coding/registry/npm-lockfile-formats.js +41 -0
- package/dist/coding/registry/npm-lockfile.d.ts +8 -4
- package/dist/coding/registry/npm-lockfile.js +4 -6
- package/dist/coding/registry/npm.js +78 -8
- package/dist/coding/registry/pnpm-lockfile.d.ts +17 -0
- package/dist/coding/registry/pnpm-lockfile.js +189 -0
- package/dist/coding/registry/pypi-plan.d.ts +50 -0
- package/dist/coding/registry/pypi-plan.js +406 -0
- package/dist/coding/registry/pypi-requirements.d.ts +58 -0
- package/dist/coding/registry/pypi-requirements.js +155 -0
- package/dist/coding/registry/pypi.d.ts +3 -27
- package/dist/coding/registry/pypi.js +40 -154
- package/dist/coding/registry/refusal-hints.d.ts +20 -0
- package/dist/coding/registry/refusal-hints.js +61 -0
- package/dist/coding/registry/refusal-wording.d.ts +11 -0
- package/dist/coding/registry/refusal-wording.js +56 -0
- package/dist/coding/registry/report.d.ts +70 -8
- package/dist/coding/registry/report.js +112 -5
- package/dist/coding/registry/types.d.ts +58 -8
- package/dist/coding/registry/yarn-lockfile.d.ts +30 -0
- package/dist/coding/registry/yarn-lockfile.js +367 -0
- package/dist/coding/services/catalog.d.ts +37 -351
- package/dist/coding/transcript/claude-code.d.ts +13 -0
- package/dist/coding/transcript/claude-code.js +273 -0
- package/dist/coding/transcript/download-protocol.d.ts +30 -0
- package/dist/coding/transcript/download-protocol.js +18 -0
- package/dist/coding/transcript/format.d.ts +20 -0
- package/dist/coding/transcript/format.js +32 -0
- package/dist/coding/transcript/recorder.d.ts +51 -0
- package/dist/coding/transcript/recorder.js +225 -0
- package/dist/coding/transcript/resume/checkout.d.ts +31 -0
- package/dist/coding/transcript/resume/checkout.js +203 -0
- package/dist/coding/transcript/resume/command.d.ts +17 -0
- package/dist/coding/transcript/resume/command.js +176 -0
- package/dist/coding/transcript/resume/download.d.ts +20 -0
- package/dist/coding/transcript/resume/download.js +153 -0
- package/dist/coding/transcript/resume/launch.d.ts +38 -0
- package/dist/coding/transcript/resume/launch.js +128 -0
- package/dist/coding/transcript/resume/session-file.d.ts +13 -0
- package/dist/coding/transcript/resume/session-file.js +79 -0
- package/dist/coding/transcript/resume/stand-in.d.ts +11 -0
- package/dist/coding/transcript/resume/stand-in.js +49 -0
- package/dist/coding-worker/artifact.d.ts +16 -3
- package/dist/coding-worker/artifact.js +5 -3
- package/dist/coding-worker/debug-trace.d.ts +6 -5
- package/dist/coding-worker/debug-trace.js +13 -18
- package/dist/coding-worker/dependency-cache.d.mts +229 -0
- package/dist/coding-worker/dependency-cache.mjs +2123 -0
- package/dist/coding-worker/driver.d.ts +4 -3
- package/dist/coding-worker/driver.js +118 -38
- package/dist/coding-worker/errors.d.ts +1 -0
- package/dist/coding-worker/errors.js +32 -0
- package/dist/coding-worker/sdk.d.ts +6 -0
- package/dist/coding-worker/sdk.js +1 -0
- package/dist/coding-worker/skills.d.ts +23 -0
- package/dist/coding-worker/skills.js +117 -0
- package/dist/coding-worker/task-note.d.ts +11 -0
- package/dist/coding-worker/task-note.js +13 -0
- package/dist/coding-worker/types.d.ts +13 -0
- package/dist/config/dependency-cache.d.ts +23 -0
- package/dist/config/dependency-cache.js +32 -0
- package/dist/config/github-allowed-accounts.d.ts +15 -0
- package/dist/config/github-allowed-accounts.js +36 -0
- package/dist/config/low-power.d.ts +12 -0
- package/dist/config/low-power.js +18 -0
- package/dist/config/mobile.d.ts +12 -0
- package/dist/config/mobile.js +18 -0
- package/dist/config/providers.d.ts +65 -3
- package/dist/config/providers.js +147 -11
- package/dist/config/test-simulators.d.ts +82 -0
- package/dist/config/test-simulators.js +305 -0
- package/dist/core/async-context.d.ts +2 -0
- package/dist/core/async-context.js +12 -0
- package/dist/core/budget-events.d.ts +108 -0
- package/dist/core/budget-events.js +346 -0
- package/dist/core/budget-groups.d.ts +50 -1
- package/dist/core/budget-groups.js +236 -27
- package/dist/core/budget-stopped-head.d.ts +46 -0
- package/dist/core/budget-stopped-head.js +81 -0
- package/dist/core/budget-topup.d.ts +51 -0
- package/dist/core/budget-topup.js +156 -0
- package/dist/core/budget-wording.d.ts +16 -2
- package/dist/core/budget-wording.js +40 -2
- package/dist/core/coding-queue.d.ts +2 -1
- package/dist/core/coding-queue.js +7 -0
- package/dist/core/cron.d.ts +19 -1
- package/dist/core/cron.js +17 -0
- package/dist/core/datastores.js +1 -1
- package/dist/core/db.d.ts +16 -6
- package/dist/core/db.js +12 -10
- package/dist/core/deferred-coding.d.ts +14 -0
- package/dist/core/deferred-coding.js +62 -0
- package/dist/core/delegation-child.d.ts +25 -0
- package/dist/core/delegation-child.js +37 -0
- package/dist/core/dispatch.d.ts +53 -0
- package/dist/core/dispatch.js +167 -57
- package/dist/core/engine-native.js +10 -6
- package/dist/core/error-code.d.ts +38 -0
- package/dist/core/error-code.js +168 -0
- package/dist/core/grants.d.ts +19 -6
- package/dist/core/grants.js +55 -6
- package/dist/core/host-events.d.ts +67 -5
- package/dist/core/host-events.js +571 -37
- package/dist/core/host-status.d.ts +85 -3
- package/dist/core/host-status.js +298 -20
- package/dist/core/issue-bridge.d.ts +50 -6
- package/dist/core/issue-bridge.js +151 -20
- package/dist/core/issue-events.d.ts +1 -1
- package/dist/core/issue-events.js +16 -11
- package/dist/core/issue-status.d.ts +1 -1
- package/dist/core/issue-status.js +68 -29
- package/dist/core/logger.d.ts +5 -0
- package/dist/core/logger.js +14 -1
- package/dist/core/lost-run-children.d.ts +6 -0
- package/dist/core/lost-run-children.js +32 -0
- package/dist/core/mark-ready.d.ts +34 -0
- package/dist/core/mark-ready.js +152 -0
- package/dist/core/markdown-code.d.ts +8 -0
- package/dist/core/markdown-code.js +107 -0
- package/dist/core/memory-tools.js +7 -0
- package/dist/core/merge-order-check.d.ts +130 -0
- package/dist/core/merge-order-check.js +343 -0
- package/dist/core/notification-dispatcher.d.ts +70 -0
- package/dist/core/notification-dispatcher.js +368 -0
- package/dist/core/notification-templates.d.ts +19 -0
- package/dist/core/notification-templates.js +139 -0
- package/dist/core/notifications.d.ts +10 -0
- package/dist/core/notifications.js +38 -0
- package/dist/core/pg-auth.d.ts +22 -0
- package/dist/core/pg-auth.js +152 -0
- package/dist/core/power-composition.d.ts +16 -0
- package/dist/core/power-composition.js +37 -0
- package/dist/core/power-idle.d.ts +14 -0
- package/dist/core/power-idle.js +30 -0
- package/dist/core/power.d.ts +71 -0
- package/dist/core/power.js +202 -0
- package/dist/core/pull-request-state-sync.js +2 -2
- package/dist/core/reconciler.d.ts +8 -5
- package/dist/core/reconciler.js +37 -6
- package/dist/core/related-pull-requests.d.ts +59 -7
- package/dist/core/related-pull-requests.js +140 -25
- package/dist/core/reply-parts.d.ts +21 -0
- package/dist/core/reply-parts.js +73 -0
- package/dist/core/repo-access.d.ts +15 -0
- package/dist/core/repo-access.js +66 -0
- package/dist/core/review-fix.d.ts +38 -1
- package/dist/core/review-fix.js +209 -7
- package/dist/core/review-host-checks.d.ts +1 -1
- package/dist/core/review-host-tools.d.ts +23 -0
- package/dist/core/review-host-tools.js +156 -14
- package/dist/core/review-reads.d.ts +55 -0
- package/dist/core/review-reads.js +233 -0
- package/dist/core/run-status.d.ts +12 -0
- package/dist/core/run-status.js +12 -0
- package/dist/core/runner.d.ts +384 -5
- package/dist/core/runner.js +1244 -372
- package/dist/core/schedule-start.d.ts +12 -0
- package/dist/core/schedule-start.js +14 -0
- package/dist/core/secret-broker-config.d.ts +39 -0
- package/dist/core/secret-broker-config.js +112 -0
- package/dist/core/secret-guard.d.ts +46 -0
- package/dist/core/secret-guard.js +104 -0
- package/dist/core/secret-guarded-stores.d.ts +12 -0
- package/dist/core/secret-guarded-stores.js +41 -0
- package/dist/core/secret-spans.d.ts +50 -0
- package/dist/core/secret-spans.js +94 -0
- package/dist/core/secrets.d.ts +39 -4
- package/dist/core/secrets.js +148 -40
- package/dist/core/stop-run.d.ts +46 -0
- package/dist/core/stop-run.js +61 -0
- package/dist/core/workflow-event-recorder.d.ts +14 -0
- package/dist/core/workflow-event-recorder.js +120 -0
- package/dist/core/workflow-events.d.ts +94 -0
- package/dist/core/workflow-events.js +48 -0
- package/dist/core/workflow-run-events.d.ts +18 -0
- package/dist/core/workflow-run-events.js +75 -0
- package/dist/core/zod-json-schema.d.ts +4 -0
- package/dist/core/zod-json-schema.js +39 -0
- package/dist/core/zod3-window.d.ts +35 -0
- package/dist/core/zod3-window.js +124 -0
- package/dist/generated/prisma/browser.d.ts +92 -3
- package/dist/generated/prisma/client.d.ts +92 -3
- package/dist/generated/prisma/commonInputTypes.d.ts +364 -54
- package/dist/generated/prisma/enums.d.ts +37 -0
- package/dist/generated/prisma/enums.js +31 -0
- package/dist/generated/prisma/internal/class.d.ts +132 -0
- package/dist/generated/prisma/internal/class.js +4 -4
- package/dist/generated/prisma/internal/prismaNamespace.d.ts +1332 -142
- package/dist/generated/prisma/internal/prismaNamespace.js +227 -5
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +234 -0
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +227 -5
- package/dist/generated/prisma/models/Agent.d.ts +464 -7
- package/dist/generated/prisma/models/AgentRepository.d.ts +42 -1
- package/dist/generated/prisma/models/CodingAgentProfile.d.ts +301 -1
- package/dist/generated/prisma/models/CodingProxyRequest.d.ts +207 -3
- package/dist/generated/prisma/models/CodingProxySession.d.ts +114 -1
- package/dist/generated/prisma/models/CodingRun.d.ts +1841 -1
- package/dist/generated/prisma/models/DeferredReview.d.ts +78 -1
- package/dist/generated/prisma/models/DependencySnapshot.d.ts +1668 -0
- package/dist/generated/prisma/models/DependencySnapshot.js +1 -0
- package/dist/generated/prisma/models/IssuePullRequest.d.ts +6 -2
- package/dist/generated/prisma/models/LocalReview.d.ts +40 -1
- package/dist/generated/prisma/models/NativeGatewayCall.d.ts +1713 -0
- package/dist/generated/prisma/models/NativeGatewayCall.js +1 -0
- package/dist/generated/prisma/models/NativeGatewaySession.d.ts +1551 -0
- package/dist/generated/prisma/models/NativeGatewaySession.js +1 -0
- package/dist/generated/prisma/models/NativeWarmWorker.d.ts +1296 -0
- package/dist/generated/prisma/models/NativeWarmWorker.js +1 -0
- package/dist/generated/prisma/models/NotificationChannel.d.ts +1543 -0
- package/dist/generated/prisma/models/NotificationChannel.js +1 -0
- package/dist/generated/prisma/models/NotificationDelivery.d.ts +1502 -0
- package/dist/generated/prisma/models/NotificationDelivery.js +1 -0
- package/dist/generated/prisma/models/NotificationThread.d.ts +1090 -0
- package/dist/generated/prisma/models/NotificationThread.js +1 -0
- package/dist/generated/prisma/models/RegistryAllowance.d.ts +41 -1
- package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +75 -1
- package/dist/generated/prisma/models/RegistryAuditRecord.d.ts +1364 -0
- package/dist/generated/prisma/models/RegistryAuditRecord.js +1 -0
- package/dist/generated/prisma/models/Run.d.ts +1619 -58
- package/dist/generated/prisma/models/RunBudgetEvent.d.ts +1211 -0
- package/dist/generated/prisma/models/RunBudgetEvent.js +1 -0
- package/dist/generated/prisma/models/RunHostCheck.d.ts +36 -1
- package/dist/generated/prisma/models/RunTranscript.d.ts +1339 -0
- package/dist/generated/prisma/models/RunTranscript.js +1 -0
- package/dist/generated/prisma/models/Secret.d.ts +37 -1
- package/dist/generated/prisma/models/SecretBrokerChange.d.ts +1101 -0
- package/dist/generated/prisma/models/SecretBrokerChange.js +1 -0
- package/dist/generated/prisma/models/WorkflowEvent.d.ts +1422 -0
- package/dist/generated/prisma/models/WorkflowEvent.js +1 -0
- package/dist/generated/prisma/models.d.ts +12 -0
- package/dist/help/build.js +4 -2
- package/dist/help/catalog.d.ts +1 -1
- package/dist/help/catalog.js +31 -6
- package/dist/help-index.json +2584 -146
- package/dist/import/create.js +49 -3
- package/dist/import/neutral-schema.d.ts +50 -277
- package/dist/import/neutral-schema.js +7 -4
- package/dist/knowledge/check.d.ts +1 -1
- package/dist/knowledge/cli.d.ts +11 -1
- package/dist/knowledge/cli.js +37 -4
- package/dist/knowledge/concept.d.ts +3 -19
- package/dist/knowledge/location.d.ts +31 -0
- package/dist/knowledge/location.js +78 -0
- package/dist/mcp/auth/access.d.ts +11 -2
- package/dist/mcp/auth/access.js +15 -1
- package/dist/mcp/auth/ownership.d.ts +7 -7
- package/dist/mcp/auth/repo-authorization.js +14 -0
- package/dist/mcp/auth/resource-server.d.ts +2 -1
- package/dist/mcp/auth/resource-server.js +7 -2
- package/dist/mcp/auth/self-hosted/browser.d.ts +1 -1
- package/dist/mcp/auth/self-hosted/browser.js +19 -6
- package/dist/mcp/auth/self-hosted/credentials.d.ts +3 -3
- package/dist/mcp/auth/self-hosted/session.d.ts +2 -2
- package/dist/mcp/context.d.ts +6 -0
- package/dist/mcp/host-events/github-ingress.d.ts +25 -1
- package/dist/mcp/host-events/github-ingress.js +70 -1
- package/dist/mcp/index.d.ts +19 -0
- package/dist/mcp/index.js +117 -20
- package/dist/mcp/server.d.ts +13 -0
- package/dist/mcp/server.js +33 -14
- package/dist/mcp/tools/agents.d.ts +4 -0
- package/dist/mcp/tools/agents.js +277 -24
- package/dist/mcp/tools/datastore.js +17 -8
- package/dist/mcp/tools/grants.js +9 -3
- package/dist/mcp/tools/memory.js +11 -1
- package/dist/mcp/tools/notification-channels.d.ts +2 -0
- package/dist/mcp/tools/notification-channels.js +293 -0
- package/dist/mcp/tools/packages.d.ts +2 -0
- package/dist/mcp/tools/packages.js +195 -0
- package/dist/mcp/tools/power.d.ts +2 -0
- package/dist/mcp/tools/power.js +77 -0
- package/dist/mcp/tools/repositories.js +18 -5
- package/dist/mcp/tools/run-access.d.ts +16 -0
- package/dist/mcp/tools/run-access.js +25 -0
- package/dist/mcp/tools/run-transcript-download.d.ts +30 -0
- package/dist/mcp/tools/run-transcript-download.js +129 -0
- package/dist/mcp/tools/run-transcript.d.ts +19 -0
- package/dist/mcp/tools/run-transcript.js +70 -0
- package/dist/mcp/tools/runs.d.ts +0 -6
- package/dist/mcp/tools/runs.js +41 -14
- package/dist/mcp/tools/scheduling.js +3 -1
- package/dist/mcp/tools/secret-broker-compat.d.ts +12 -0
- package/dist/mcp/tools/secret-broker-compat.js +23 -0
- package/dist/mcp/tools/secret-elicitation-form.d.ts +22 -2
- package/dist/mcp/tools/secret-elicitation-form.js +205 -10
- package/dist/mcp/tools/secret-elicitation-server.d.ts +6 -0
- package/dist/mcp/tools/secret-elicitation-server.js +10 -54
- package/dist/mcp/tools/secret-elicitation.d.ts +38 -3
- package/dist/mcp/tools/secret-elicitation.js +110 -12
- package/dist/mcp/tools/secrets.js +186 -9
- package/dist/mcp/tools/stop-run.d.ts +2 -0
- package/dist/mcp/tools/stop-run.js +82 -0
- package/dist/mcp/tools/subagents.js +2 -2
- package/dist/mcp/tools/tools.d.ts +2 -2
- package/dist/mcp/tools/tools.js +47 -11
- package/dist/mcp/transport/stdio-link-host.d.ts +20 -0
- package/dist/mcp/transport/stdio-link-host.js +67 -0
- package/dist/mcp/transport/streamable-http.d.ts +13 -0
- package/dist/mcp/transport/streamable-http.js +41 -1
- package/dist/native-worker/composition.d.ts +23 -0
- package/dist/native-worker/composition.js +77 -0
- package/dist/native-worker/docker-isolation.d.ts +65 -0
- package/dist/native-worker/docker-isolation.js +183 -0
- package/dist/native-worker/docker-launcher.d.ts +110 -0
- package/dist/native-worker/docker-launcher.js +297 -0
- package/dist/native-worker/gateway-server.d.ts +77 -0
- package/dist/native-worker/gateway-server.js +412 -0
- package/dist/native-worker/gateway.d.ts +70 -0
- package/dist/native-worker/gateway.js +263 -0
- package/dist/native-worker/http-server.d.ts +24 -0
- package/dist/native-worker/http-server.js +113 -0
- package/dist/native-worker/http-transport.d.ts +17 -0
- package/dist/native-worker/http-transport.js +88 -0
- package/dist/native-worker/kubernetes-isolation.d.ts +90 -0
- package/dist/native-worker/kubernetes-isolation.js +218 -0
- package/dist/native-worker/kubernetes-launcher.d.ts +106 -0
- package/dist/native-worker/kubernetes-launcher.js +375 -0
- package/dist/native-worker/launch.d.ts +62 -0
- package/dist/native-worker/launch.js +49 -0
- package/dist/native-worker/ledger.d.ts +125 -0
- package/dist/native-worker/ledger.js +245 -0
- package/dist/native-worker/loopback.d.ts +12 -0
- package/dist/native-worker/loopback.js +44 -0
- package/dist/native-worker/main.d.ts +8 -0
- package/dist/native-worker/main.js +85 -0
- package/dist/native-worker/protocol.d.ts +296 -0
- package/dist/native-worker/protocol.js +246 -0
- package/dist/native-worker/sandbox-executor.d.ts +83 -0
- package/dist/native-worker/sandbox-executor.js +284 -0
- package/dist/native-worker/stderr-redaction.d.ts +77 -0
- package/dist/native-worker/stderr-redaction.js +237 -0
- package/dist/native-worker/stdio.d.ts +29 -0
- package/dist/native-worker/stdio.js +189 -0
- package/dist/native-worker/warm-delivery.d.ts +16 -0
- package/dist/native-worker/warm-delivery.js +33 -0
- package/dist/native-worker/warm-pool-ledger.d.ts +39 -0
- package/dist/native-worker/warm-pool-ledger.js +73 -0
- package/dist/native-worker/warm-pool.d.ts +107 -0
- package/dist/native-worker/warm-pool.js +283 -0
- package/dist/native-worker/worker.d.ts +17 -0
- package/dist/native-worker/worker.js +141 -0
- package/dist/observability/metrics.js +6 -1
- package/dist/providers/auth/authorization-server.d.ts +3 -0
- package/dist/providers/auth/index.js +2 -0
- package/dist/providers/auth/self-hosted.d.ts +14 -2
- package/dist/providers/auth/self-hosted.js +54 -4
- package/dist/providers/chat/fake.d.ts +46 -0
- package/dist/providers/chat/fake.js +39 -0
- package/dist/providers/chat/index.d.ts +4 -0
- package/dist/providers/chat/index.js +8 -0
- package/dist/providers/chat/slack.d.ts +37 -0
- package/dist/providers/chat/slack.js +105 -0
- package/dist/providers/chat/types.d.ts +42 -0
- package/dist/providers/chat/types.js +19 -0
- package/dist/providers/coding-proxy/dependency-cache/eviction.d.ts +29 -0
- package/dist/providers/coding-proxy/dependency-cache/eviction.js +87 -0
- package/dist/providers/coding-proxy/dependency-cache/key.d.ts +33 -0
- package/dist/providers/coding-proxy/dependency-cache/key.js +86 -0
- package/dist/providers/coding-proxy/dependency-cache/model-request-seal.d.ts +18 -0
- package/dist/providers/coding-proxy/dependency-cache/model-request-seal.js +40 -0
- package/dist/providers/coding-proxy/dependency-cache/prisma-store.d.ts +25 -0
- package/dist/providers/coding-proxy/dependency-cache/prisma-store.js +131 -0
- package/dist/providers/coding-proxy/dependency-cache/service.d.ts +70 -0
- package/dist/providers/coding-proxy/dependency-cache/service.js +409 -0
- package/dist/providers/coding-proxy/dependency-cache/store.d.ts +85 -0
- package/dist/providers/coding-proxy/dependency-cache/store.js +95 -0
- package/dist/providers/coding-proxy/hold.d.ts +32 -0
- package/dist/providers/coding-proxy/hold.js +86 -0
- package/dist/providers/coding-proxy/interrupted.d.ts +70 -0
- package/dist/providers/coding-proxy/interrupted.js +104 -0
- package/dist/providers/coding-proxy/memory-ledger.d.ts +15 -2
- package/dist/providers/coding-proxy/memory-ledger.js +84 -8
- package/dist/providers/coding-proxy/metering.d.ts +16 -0
- package/dist/providers/coding-proxy/metering.js +27 -4
- package/dist/providers/coding-proxy/prisma-ledger.d.ts +15 -2
- package/dist/providers/coding-proxy/prisma-ledger.js +179 -67
- package/dist/providers/coding-proxy/proxy.d.ts +14 -1
- package/dist/providers/coding-proxy/proxy.js +166 -14
- package/dist/providers/coding-proxy/registry/audit.d.ts +53 -10
- package/dist/providers/coding-proxy/registry/audit.js +94 -17
- package/dist/providers/coding-proxy/registry/lockfile-parse-worker.d.ts +36 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse-worker.js +67 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse.d.ts +16 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse.js +110 -0
- package/dist/providers/coding-proxy/registry/plan.d.ts +9 -0
- package/dist/providers/coding-proxy/registry/plan.js +201 -48
- package/dist/providers/coding-proxy/registry/prisma-store.d.ts +11 -5
- package/dist/providers/coding-proxy/registry/prisma-store.js +120 -17
- package/dist/providers/coding-proxy/registry/service.d.ts +97 -16
- package/dist/providers/coding-proxy/registry/service.js +579 -112
- package/dist/providers/coding-proxy/registry/store.d.ts +84 -9
- package/dist/providers/coding-proxy/registry/store.js +54 -1
- package/dist/providers/coding-proxy/runtime.d.ts +4 -0
- package/dist/providers/coding-proxy/runtime.js +78 -16
- package/dist/providers/coding-proxy/server.d.ts +6 -1
- package/dist/providers/coding-proxy/server.js +45 -1
- package/dist/providers/coding-proxy/types.d.ts +65 -1
- package/dist/providers/datastore/types.d.ts +5 -0
- package/dist/providers/engine/types.d.ts +36 -2
- package/dist/providers/engine/types.js +39 -0
- package/dist/providers/executor/composition.d.ts +31 -1
- package/dist/providers/executor/composition.js +81 -8
- package/dist/providers/executor/container.d.ts +385 -9
- package/dist/providers/executor/container.js +1234 -99
- package/dist/providers/executor/dbos-status.d.ts +31 -0
- package/dist/providers/executor/dbos-status.js +64 -0
- package/dist/providers/executor/dbos.d.ts +91 -0
- package/dist/providers/executor/dbos.js +319 -26
- package/dist/providers/executor/deferred.d.ts +44 -0
- package/dist/providers/executor/deferred.js +100 -0
- package/dist/providers/executor/in-process.d.ts +9 -1
- package/dist/providers/executor/in-process.js +14 -4
- package/dist/providers/executor/linked-issue-reader.d.ts +16 -0
- package/dist/providers/executor/linked-issue-reader.js +30 -0
- package/dist/providers/executor/routing.d.ts +39 -10
- package/dist/providers/executor/routing.js +77 -32
- package/dist/providers/executor/types.d.ts +25 -0
- package/dist/providers/index.d.ts +2 -1
- package/dist/providers/issue-tracker/types.d.ts +17 -0
- package/dist/providers/issue-tracker/types.js +39 -1
- package/dist/providers/jobs/claude-tool-setup.d.ts +4 -0
- package/dist/providers/jobs/claude-tool-setup.js +5 -2
- package/dist/providers/jobs/docker-isolation.d.ts +8 -0
- package/dist/providers/jobs/docker-isolation.js +17 -0
- package/dist/providers/jobs/docker.d.ts +1 -0
- package/dist/providers/jobs/docker.js +29 -4
- package/dist/providers/jobs/fake-kubernetes-api.d.ts +23 -2
- package/dist/providers/jobs/fake-kubernetes-api.js +45 -1
- package/dist/providers/jobs/kubernetes-api.d.ts +25 -1
- package/dist/providers/jobs/kubernetes-api.js +17 -0
- package/dist/providers/jobs/kubernetes-client.d.ts +10 -1
- package/dist/providers/jobs/kubernetes-client.js +61 -3
- package/dist/providers/jobs/kubernetes-dry-run-fixture.d.ts +6 -1
- package/dist/providers/jobs/kubernetes-dry-run-fixture.js +6 -3
- package/dist/providers/jobs/kubernetes-isolation.d.ts +5 -1
- package/dist/providers/jobs/kubernetes-isolation.js +23 -1
- package/dist/providers/jobs/kubernetes-platform.d.ts +4 -1
- package/dist/providers/jobs/kubernetes-platform.js +38 -1
- package/dist/providers/jobs/kubernetes-preflight.d.ts +2 -1
- package/dist/providers/jobs/kubernetes-preflight.js +4 -2
- package/dist/providers/jobs/kubernetes.d.ts +42 -2
- package/dist/providers/jobs/kubernetes.js +178 -19
- package/dist/providers/jobs/metadata-probes.d.ts +11 -0
- package/dist/providers/jobs/metadata-probes.js +13 -0
- package/dist/providers/jobs/types.d.ts +42 -0
- package/dist/providers/jobs/types.js +13 -1
- package/dist/providers/llm/anthropic.js +5 -1
- package/dist/providers/llm/bedrock.d.ts +0 -12
- package/dist/providers/llm/bedrock.js +4 -0
- package/dist/providers/llm/claude-messages.d.ts +3 -1
- package/dist/providers/llm/claude-messages.js +4 -1
- package/dist/providers/llm/claude-provider.d.ts +2 -2
- package/dist/providers/llm/claude-provider.js +2 -2
- package/dist/providers/llm/openai.d.ts +2 -2
- package/dist/providers/llm/openai.js +6 -2
- package/dist/providers/llm/routing.d.ts +2 -2
- package/dist/providers/llm/routing.js +2 -2
- package/dist/providers/llm/types.d.ts +12 -2
- package/dist/providers/review-host/github-events.d.ts +9 -1
- package/dist/providers/review-host/github-events.js +34 -12
- package/dist/providers/review-host/github.d.ts +39 -2
- package/dist/providers/review-host/github.js +274 -29
- package/dist/providers/review-host/local.d.ts +8 -4
- package/dist/providers/review-host/local.js +49 -31
- package/dist/providers/review-host/patch-pages.d.ts +41 -0
- package/dist/providers/review-host/patch-pages.js +176 -0
- package/dist/providers/review-host/review-format.d.ts +19 -1
- package/dist/providers/review-host/review-format.js +38 -7
- package/dist/providers/review-host/types.d.ts +157 -2
- package/dist/providers/review-host/types.js +8 -0
- package/dist/providers/storage/gcs.d.ts +63 -0
- package/dist/providers/storage/gcs.js +69 -0
- package/dist/providers/storage/index.d.ts +15 -0
- package/dist/providers/storage/index.js +14 -0
- package/dist/providers/storage/local.d.ts +24 -0
- package/dist/providers/storage/local.js +92 -0
- package/dist/providers/storage/meter.d.ts +14 -0
- package/dist/providers/storage/meter.js +34 -0
- package/dist/providers/storage/s3.d.ts +41 -0
- package/dist/providers/storage/s3.js +107 -0
- package/dist/providers/storage/types.d.ts +37 -3
- package/dist/providers/storage/types.js +21 -4
- package/dist/providers/vcs/git.d.ts +33 -2
- package/dist/providers/vcs/git.js +324 -22
- package/dist/providers/vcs/github-remote.d.ts +26 -3
- package/dist/providers/vcs/github-remote.js +124 -14
- package/dist/providers/vcs/github.d.ts +246 -12
- package/dist/providers/vcs/github.js +521 -61
- package/dist/providers/vcs/index.js +8 -1
- package/dist/providers/vcs/pr-description.d.ts +127 -0
- package/dist/providers/vcs/pr-description.js +270 -0
- package/dist/providers/vcs/remote.d.ts +33 -1
- package/dist/providers/vcs/routing.d.ts +4 -2
- package/dist/providers/vcs/routing.js +6 -0
- package/dist/providers/vcs/types.d.ts +80 -3
- package/dist/quickstart/coding-seed.d.ts +21 -3
- package/dist/quickstart/coding-seed.js +283 -3
- package/dist/quickstart/images.d.ts +2 -0
- package/dist/quickstart/images.js +7 -1
- package/dist/quickstart/reviewer-prompt.d.ts +1 -1
- package/dist/quickstart/reviewer-prompt.js +6 -6
- package/dist/quickstart-images.json +1 -1
- package/dist/sandbox/brokered-fetch.d.ts +23 -0
- package/dist/sandbox/brokered-fetch.js +37 -0
- package/dist/sandbox/generated/zod.bundle.js +62 -1
- package/dist/sandbox/generated/zod3.bundle.js +5 -0
- package/dist/sandbox/host-functions.d.ts +35 -0
- package/dist/sandbox/host-functions.js +150 -91
- package/dist/sandbox/prelude.js +7 -1
- package/dist/sandbox/run-in-sandbox.d.ts +19 -0
- package/dist/sandbox/run-in-sandbox.js +28 -10
- package/dist/sandbox/safe-fetch.d.ts +2 -0
- package/dist/sandbox/safe-fetch.js +3 -1
- package/dist/sandbox/secret-broker-sigv4.d.ts +2 -0
- package/dist/sandbox/secret-broker-sigv4.js +49 -0
- package/dist/sandbox/secret-broker.d.ts +34 -0
- package/dist/sandbox/secret-broker.js +161 -0
- package/dist/sandbox/tool-capabilities.d.ts +10 -30
- package/dist/sandbox/user-tool.d.ts +14 -0
- package/dist/sandbox/user-tool.js +32 -0
- package/dist/sandbox/zod-params.d.ts +37 -5
- package/dist/sandbox/zod-params.js +181 -26
- package/dist/serve.js +25 -0
- package/dist/viewer/api-schema.d.ts +372 -2454
- package/dist/viewer/api-schema.js +29 -0
- package/dist/viewer/build-schemas.js +10 -3
- package/dist/viewer/event-bus.d.ts +6 -0
- package/dist/viewer/event-bus.js +16 -7
- package/dist/viewer/graph.d.ts +5 -2
- package/dist/viewer/graph.js +7 -2
- package/dist/viewer/http.d.ts +0 -1
- package/dist/viewer/http.js +2 -2
- package/dist/viewer/infra.js +25 -2
- package/dist/viewer/limits.d.ts +4 -0
- package/dist/viewer/limits.js +4 -0
- package/dist/viewer/openapi.d.ts +15 -0
- package/dist/viewer/openapi.js +170 -0
- package/dist/wardby-bin.js +10 -0
- package/docs/README.md +7 -0
- package/docs/agent-recipes.md +114 -27
- package/docs/architecture-runtime.md +16 -1
- package/docs/code-review-agents.md +689 -45
- package/docs/coding-agent-setup.md +602 -12
- package/docs/coding-packages.md +1037 -92
- package/docs/coding-services.md +30 -13
- package/docs/coding-worker-byo-images.md +218 -6
- package/docs/coding-worker-isolation.md +173 -44
- package/docs/getting-started-gke.md +332 -129
- package/docs/getting-started-identity-provider.md +31 -11
- package/docs/getting-started.md +14 -4
- package/docs/jira-agents.md +22 -9
- package/docs/knowledge/blob-not-found-semantics.md +41 -0
- package/docs/knowledge/bounded-file-descriptor.md +52 -0
- package/docs/knowledge/delegation-admission-slots.md +52 -0
- package/docs/knowledge/http-dispatcher-bootstrap.md +61 -0
- package/docs/knowledge/import-rename-target.md +52 -0
- package/docs/knowledge/index.md +57 -0
- package/docs/knowledge/log.md +9 -0
- package/docs/knowledge/mcp-cancelled-task-precedence.md +41 -0
- package/docs/knowledge/mcp-http-prompt-discovery.md +41 -0
- package/docs/knowledge/mcp-schema-module-boundary.md +41 -0
- package/docs/knowledge/nullable-tool-uniqueness.md +52 -0
- package/docs/knowledge/overview-cli.md +74 -0
- package/docs/knowledge/overview-coding-proxy.md +72 -0
- package/docs/knowledge/overview-coding.md +72 -0
- package/docs/knowledge/overview-config.md +60 -0
- package/docs/knowledge/overview-core.md +72 -0
- package/docs/knowledge/overview-deploy.md +83 -0
- package/docs/knowledge/overview-mcp.md +61 -0
- package/docs/knowledge/overview-prisma.md +72 -0
- package/docs/knowledge/overview-providers.md +89 -0
- package/docs/knowledge/overview-sandbox.md +83 -0
- package/docs/knowledge/overview-surfaces.md +83 -0
- package/docs/knowledge/private-datastore-shared-boundary.md +54 -0
- package/docs/knowledge/proxy-settlement-projections.md +41 -0
- package/docs/knowledge/run-pricing-first-writer.md +43 -0
- package/docs/knowledge/schedule-claim-transaction.md +41 -0
- package/docs/knowledge/secret-entry-replica-contract.md +52 -0
- package/docs/knowledge/terminal-run-first-writer.md +41 -0
- package/docs/knowledge/transactional-agent-authorization.md +52 -0
- package/docs/knowledge/viewer-notify-write-isolation.md +30 -0
- package/docs/knowledge/warm-input-publication.md +30 -0
- package/docs/knowledge/workspace-staging-failure.md +54 -0
- package/docs/knowledge.md +54 -14
- package/docs/native-sandbox.md +731 -0
- package/docs/observability.md +4 -0
- package/docs/release-verification.md +9 -0
- package/docs/security-deployment.md +146 -14
- package/docs/slack-notifications.md +268 -0
- package/docs/tool-secrets.md +284 -0
- package/docs/viewer-api.md +46 -5
- package/docs/viewer-api.openapi.yml +1404 -0
- package/help/admin-viewer.md +29 -3
- package/help/agent-recipes.md +27 -0
- package/help/architecture-agent.md +11 -6
- package/help/brokered-secrets.md +79 -0
- package/help/build-claude-code-image.md +131 -0
- package/help/build-worker-image.md +6 -7
- package/help/builder-agent.md +19 -6
- package/help/code-review-agents.md +243 -10
- package/help/coding-packages.md +156 -6
- package/help/cost-attribution.md +9 -5
- package/help/creating-agents.md +14 -1
- package/help/dependency-cache.md +143 -0
- package/help/deploy-gke.md +23 -9
- package/help/deployment-targets.md +25 -14
- package/help/errors/budget-exhausted.md +187 -0
- package/help/errors/budget-group-exhausted.md +5 -1
- package/help/errors/coding-provider-not-configured.md +2 -2
- package/help/errors/coding-stream-quota-exceeded.md +33 -0
- package/help/errors/coding-workspace-disk-exceeds-limit.md +39 -0
- package/help/errors/continuation-closed.md +9 -12
- package/help/errors/database-auth-invalid.md +28 -0
- package/help/errors/delegation-conflict.md +24 -0
- package/help/errors/file-list-truncated.md +45 -0
- package/help/errors/full-read-required.md +49 -0
- package/help/errors/github-account-not-allowed.md +29 -0
- package/help/errors/graph-incomplete.md +43 -0
- package/help/errors/graph-limit.md +43 -0
- package/help/errors/low-power-disabled.md +29 -0
- package/help/errors/low-power-scale-forbidden.md +35 -0
- package/help/errors/low-power-wake-timeout.md +30 -0
- package/help/errors/merge-conflict.md +49 -0
- package/help/errors/mobile-disabled.md +31 -0
- package/help/errors/native-sandbox-capacity.md +22 -0
- package/help/errors/native-sandbox-deadline-exceeded.md +19 -0
- package/help/errors/native-sandbox-docker-failed.md +20 -0
- package/help/errors/native-sandbox-gateway-error.md +20 -0
- package/help/errors/native-sandbox-gateway-unavailable.md +21 -0
- package/help/errors/native-sandbox-image-not-pinned.md +19 -0
- package/help/errors/native-sandbox-isolation-mismatch.md +20 -0
- package/help/errors/native-sandbox-launch-abandoned.md +21 -0
- package/help/errors/native-sandbox-network-unenforced.md +22 -0
- package/help/errors/native-sandbox-requires-catalog.md +31 -0
- package/help/errors/native-sandbox-unavailable.md +19 -0
- package/help/errors/native-sandbox-warm-delivery-failed.md +21 -0
- package/help/errors/native-sandbox-worker-exited.md +21 -0
- package/help/errors/native-sandbox-worker-lost.md +20 -0
- package/help/errors/native-sandbox-worker-unready.md +22 -0
- package/help/errors/package-not-allowed-pending.md +52 -0
- package/help/errors/package-not-allowed.md +51 -0
- package/help/errors/package-refusals.md +43 -0
- package/help/errors/patch-cursor-malformed.md +31 -0
- package/help/errors/run-lost.md +39 -0
- package/help/errors/run-transcript-download.md +44 -0
- package/help/errors/secret-broker-body-invalid.md +26 -0
- package/help/errors/secret-broker-changed.md +20 -0
- package/help/errors/secret-broker-config-invalid.md +30 -0
- package/help/errors/secret-broker-conflict.md +27 -0
- package/help/errors/secret-broker-destination-denied.md +28 -0
- package/help/errors/secret-broker-value-invalid.md +28 -0
- package/help/errors/secret-brokered.md +24 -0
- package/help/errors/secret-in-value.md +69 -0
- package/help/errors/secret-not-brokered.md +25 -0
- package/help/errors/slack-auth-failed.md +48 -0
- package/help/errors/slack-channel-unreachable.md +39 -0
- package/help/errors/slack-not-configured.md +33 -0
- package/help/errors/target-merge.md +40 -0
- package/help/fix-merge-conflicts.md +73 -0
- package/help/getting-started.md +4 -5
- package/help/github-app-setup.md +132 -0
- package/help/github.md +40 -1
- package/help/identity-and-access.md +7 -1
- package/help/jira.md +23 -6
- package/help/knowledge.md +16 -7
- package/help/local-repositories.md +3 -4
- package/help/low-power-mode.md +131 -0
- package/help/merge-order-check.md +122 -0
- package/help/mobile-app.md +54 -0
- package/help/native-capabilities.md +29 -1
- package/help/native-sandbox.md +150 -0
- package/help/observability.md +8 -0
- package/help/operating-agents.md +5 -0
- package/help/package-audit-mode.md +91 -0
- package/help/related-pull-requests.md +80 -16
- package/help/repo-instructions-and-skills.md +91 -0
- package/help/resume-runs-locally.md +131 -0
- package/help/review-fix-rounds.md +43 -1
- package/help/sharing-agents.md +59 -0
- package/help/slack-notifications.md +76 -0
- package/help/status-comments.md +31 -0
- package/help/stop-run.md +58 -0
- package/help/troubleshooting/budgets.md +28 -0
- package/help/troubleshooting/coding-workers.md +99 -7
- package/package.json +27 -13
- package/prisma/migrations/20261009000003_native_execution_mode/migration.sql +12 -0
- package/prisma/migrations/20261009000004_native_gateway_ledger/migration.sql +65 -0
- package/prisma/migrations/20261009000005_native_gateway_call_child_agent/migration.sql +5 -0
- package/prisma/migrations/20261009000006_run_deferred_start_stop/migration.sql +14 -0
- package/prisma/migrations/20261009000007_native_gateway_network_ready/migration.sql +5 -0
- package/prisma/migrations/20261010000001_workflow_notifications/migration.sql +99 -0
- package/prisma/migrations/20261011000001_native_gateway_session_status_index/migration.sql +2 -0
- package/prisma/migrations/20261012000001_native_warm_worker/migration.sql +32 -0
- package/prisma/migrations/20261013000001_coding_run_merge_order/migration.sql +2 -0
- package/prisma/migrations/20261013000001_secret_broker/migration.sql +17 -0
- package/prisma/migrations/20261013000002_deferred_review_request/migration.sql +4 -0
- package/prisma/migrations/20261014000000_repo_skills/migration.sql +15 -0
- package/prisma/migrations/20261015000001_coding_run_merge_order_index/migration.sql +2 -0
- package/prisma/migrations/20261015000002_no_change_rereview/migration.sql +2 -0
- package/prisma/migrations/20261016000000_registry_approved_accepted_advisories/migration.sql +3 -0
- package/prisma/migrations/20261016000001_mark_ready_when_passing/migration.sql +3 -0
- package/prisma/migrations/20261017000000_debug_trace_max_mb/migration.sql +4 -0
- package/prisma/migrations/20261018000000_dependency_cache/migration.sql +53 -0
- package/prisma/migrations/20261019000000_claude_max_output_tokens/migration.sql +5 -0
- package/prisma/migrations/20261021000000_pr_description_hash/migration.sql +4 -0
- package/prisma/migrations/20261022000000_dependency_snapshot_validation_metadata/migration.sql +4 -0
- package/prisma/migrations/20261023000000_package_audit_mode/migration.sql +27 -0
- package/prisma/migrations/20261024000000_budget_events/migration.sql +26 -0
- package/prisma/migrations/20261025000000_cache_aware_holds/migration.sql +9 -0
- package/prisma/migrations/20261026000000_budget_overrun/migration.sql +4 -0
- package/prisma/migrations/20261027000000_coding_run_request/migration.sql +1 -0
- package/prisma/migrations/20261028000000_native_gateway_review_reads/migration.sql +6 -0
- package/prisma/migrations/20261029000000_lead_survives_deploy/migration.sql +6 -0
- package/prisma/migrations/20261030000000_local_review_covered_sha/migration.sql +2 -0
- package/prisma/migrations/20261031000000_coding_run_budget_limit/migration.sql +9 -0
- package/prisma/migrations/20261101000000_run_transcripts/migration.sql +22 -0
- package/prisma/schema.prisma +631 -146
- package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
package/docs/observability.md
CHANGED
|
@@ -49,5 +49,9 @@ the coding-proxy coverage, so verify required signals before production use.
|
|
|
49
49
|
- Alert on request failures, budget cutoffs, cleanup failures, stalled runs,
|
|
50
50
|
and sustained latency or memory growth.
|
|
51
51
|
- Confirm alerts reach an owned channel and rehearse one response path.
|
|
52
|
+
- Watch the logs for package audit mode: the control plane logs
|
|
53
|
+
`coding.package_audit.set` when an owner turns it on, off or extends it, and
|
|
54
|
+
the coding proxy logs `registry.audited` for each package it installs
|
|
55
|
+
because of it (see [Package audit mode](coding-packages.md#package-audit-mode)).
|
|
52
56
|
- Treat telemetry as operational evidence, not as a replacement for Wardby's
|
|
53
57
|
accounting database.
|
|
@@ -40,6 +40,15 @@ repository-scoped GitHub App installation, and a deliberately small budget.
|
|
|
40
40
|
Verify the requested diff, terminal outcome, cost, resource cleanup, and branch
|
|
41
41
|
cleanup. See [local coding-agent setup](coding-agent-setup.md).
|
|
42
42
|
|
|
43
|
+
The bundled help catalog is built for the version in `package.json`.
|
|
44
|
+
`appliesTo` on each help article must name its minimum release; later articles
|
|
45
|
+
stay in source but are omitted from that release's CLI and MCP help. The build
|
|
46
|
+
fails when an included article links to an omitted one. When adding a newer
|
|
47
|
+
feature to an older article, move its guidance into a suitably versioned
|
|
48
|
+
article or update the older article so it remains accurate for its stated
|
|
49
|
+
minimum release. Mark newer features in the public `docs/` guides with their
|
|
50
|
+
minimum release as well.
|
|
51
|
+
|
|
43
52
|
Before production deployment, review [runtime architecture](architecture-runtime.md),
|
|
44
53
|
[coding-worker isolation](coding-worker-isolation.md), and the
|
|
45
54
|
[security deployment guide](security-deployment.md). A self-hosted operator is
|
|
@@ -79,15 +79,15 @@ Scopes and roles do different jobs:
|
|
|
79
79
|
- **Roles authorize.** A user has a set of roles. With no roles, the user is a
|
|
80
80
|
member:
|
|
81
81
|
|
|
82
|
-
| Role | Grants
|
|
83
|
-
| ------------------ |
|
|
84
|
-
| `admin` | `agents:admin`, `packages:approve`, `services:manage`, `admin:view` and `
|
|
85
|
-
| `package-approver` | `packages:approve`
|
|
86
|
-
| `service-manager` | `services:manage`
|
|
87
|
-
| `model-manager` | `models:admin`
|
|
88
|
-
| (none) | nothing privileged; every other scope works as the token allows
|
|
82
|
+
| Role | Grants |
|
|
83
|
+
| ------------------ | ------------------------------------------------------------------------------------------------------ |
|
|
84
|
+
| `admin` | `agents:admin`, `packages:approve`, `services:manage`, `admin:view`, `models:admin` and `power:manage` |
|
|
85
|
+
| `package-approver` | `packages:approve` |
|
|
86
|
+
| `service-manager` | `services:manage` |
|
|
87
|
+
| `model-manager` | `models:admin` |
|
|
88
|
+
| (none) | nothing privileged; every other scope works as the token allows |
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
Eight operations are privileged:
|
|
91
91
|
|
|
92
92
|
- `make_owner`, which reassigns any agent's owner, including another
|
|
93
93
|
principal's private agent (see [Sharing agents](#sharing-agents) for what
|
|
@@ -104,7 +104,10 @@ Seven operations are privileged:
|
|
|
104
104
|
(`set_model`, `disable_model`, `reset_model`; reading the catalog is
|
|
105
105
|
`agents:read`, see [models.md](models.md));
|
|
106
106
|
- reading every owner's runs through the admin viewer API (see
|
|
107
|
-
[viewer-api.md](viewer-api.md))
|
|
107
|
+
[viewer-api.md](viewer-api.md));
|
|
108
|
+
- reading low-power state and scaling the coding proxy and native gateway to
|
|
109
|
+
zero now (`power_status`, `power_sleep`; see
|
|
110
|
+
[Low-power mode](getting-started-gke.md#low-power-mode)).
|
|
108
111
|
|
|
109
112
|
Each needs **both** its scope on the token **and** a role that grants that
|
|
110
113
|
permission:
|
|
@@ -114,10 +117,12 @@ permission:
|
|
|
114
117
|
- Service catalog changes need `services:manage`.
|
|
115
118
|
- Model catalog changes need `models:admin`.
|
|
116
119
|
- The admin viewer API needs `admin:view`, which only the `admin` role grants.
|
|
120
|
+
- `power_status` and `power_sleep` need `power:manage`, which only the `admin`
|
|
121
|
+
role grants.
|
|
117
122
|
|
|
118
123
|
In practice:
|
|
119
124
|
|
|
120
|
-
- an `admin` can do all
|
|
125
|
+
- an `admin` can do all eight;
|
|
121
126
|
- a `package-approver` can approve packages only;
|
|
122
127
|
- a `service-manager` can change the service catalog only;
|
|
123
128
|
- a `model-manager` can change the model catalog only;
|
|
@@ -190,7 +195,10 @@ See the [Fetch standard](https://fetch.spec.whatwg.org/#append-a-request-origin-
|
|
|
190
195
|
|
|
191
196
|
Clients must re-register as public clients (`token_endpoint_auth_method=none`).
|
|
192
197
|
Only S256 PKCE and exact registered redirect strings are accepted. Redirects
|
|
193
|
-
must be HTTPS or loopback HTTP,
|
|
198
|
+
must be HTTPS or loopback HTTP, or, only with `WARDBY_MOBILE_ENABLED=true`,
|
|
199
|
+
exactly the configured mobile redirect (`WARDBY_MOBILE_REDIRECT_URI`, default
|
|
200
|
+
`com.wardby.mobile:/oauth`; see the `mobile-app` help article), without
|
|
201
|
+
credentials or fragments. Registration
|
|
194
202
|
allows 1-10 redirects and a bounded client name. `AUTH_MAX_CLIENTS` defaults to
|
|
195
203
|
1000; PostgreSQL serializes capacity checks and shares rate limits across
|
|
196
204
|
processes. There is no confidential-client support or client secret.
|
|
@@ -258,8 +266,17 @@ so a tool a write-grantee attaches runs with none until you re-run
|
|
|
258
266
|
the coding profile, kind and budget group; and sub-agents, since an edge
|
|
259
267
|
would hand every run's data to another agent.
|
|
260
268
|
|
|
261
|
-
**Everyone** can be granted
|
|
262
|
-
anyone
|
|
269
|
+
**Everyone** (any signed-in principal) can be granted up to `write`, a
|
|
270
|
+
public agent anyone can list, run and edit, but only while the agent holds
|
|
271
|
+
none of its owner's bindings: secrets, datastores, repositories, sub-agents,
|
|
272
|
+
tool capabilities, or a coding repository (so a coding agent is never
|
|
273
|
+
public-write). `grant_access` refuses everyone-`write` on an agent that has
|
|
274
|
+
any, and the binding tools (`attach_secret`, `attach_datastore`,
|
|
275
|
+
`link_repository` including an admin's `adminOverride`, `attach_subagent`,
|
|
276
|
+
and `attach_tool` with capabilities) refuse to add one to an agent everyone
|
|
277
|
+
can write, as `update_agent` refuses making it a coding agent. Otherwise anyone could
|
|
278
|
+
rewrite the prompt of an agent that uses your secrets. Detach the bindings
|
|
279
|
+
first, or grant everyone `execute` instead.
|
|
263
280
|
|
|
264
281
|
**Nothing crosses owners without a grant on that exact resource**, checked
|
|
265
282
|
when bindings are written and again at run time, so rows written before this
|
|
@@ -456,6 +473,15 @@ stale, whichever executor id owns it. Set a fixed id only for a single,
|
|
|
456
473
|
long-lived process that should re-drive its own runs at launch rather than
|
|
457
474
|
after the heartbeat timeout.
|
|
458
475
|
|
|
476
|
+
An owner that is stalled but still alive (event-loop or database-pool
|
|
477
|
+
starvation long enough for its heartbeat to go stale) can overlap the attempt
|
|
478
|
+
another process adopted. The first attempt to record a step keeps the run; the
|
|
479
|
+
other stops at that step without writing the run or sending any
|
|
480
|
+
notifications, and DBOS parks it as a duplicate execution. That stopped step's
|
|
481
|
+
model spend is discarded rather than counted against the run, so look for the
|
|
482
|
+
`run_ownership_lost` warning in the server logs (it carries the run id, the
|
|
483
|
+
step, and the discarded usage when known) to see how often this happens.
|
|
484
|
+
|
|
459
485
|
**New data at rest.** Durable execution checkpoints every step's result into
|
|
460
486
|
`dbos.operation_outputs`: each turn's assistant text, every tool call's
|
|
461
487
|
arguments, every tool result in full, and the `load` step's pinned agent
|
|
@@ -499,8 +525,10 @@ records. Delete them (see pruning above) if you want the rollback to be final.
|
|
|
499
525
|
| Surface | Limit |
|
|
500
526
|
| ------------------------------ | ------------------------------------------------- |
|
|
501
527
|
| MCP/webhook bodies | 1 MiB raw bytes |
|
|
528
|
+
| MCP tool-call arguments | 100,000 array elements and object members |
|
|
502
529
|
| Auth bodies | 64 KiB raw bytes |
|
|
503
530
|
| Request completion / headers | 15 seconds / 10 seconds |
|
|
531
|
+
| Sandbox invocation | 32 MiB heap, 1 MiB stack, 10 seconds |
|
|
504
532
|
| Sandbox fetch | 8 MiB encoded and decoded, 5 redirects, 8 seconds |
|
|
505
533
|
| Bridge input / output | 1 MiB / 12 MiB |
|
|
506
534
|
| Parser input / console payload | 256 KiB / 16 KiB |
|
|
@@ -518,6 +546,26 @@ and pins the validated DNS result to the connection while retaining Host and
|
|
|
518
546
|
TLS verification. Cross-origin redirects remove credentials, including custom
|
|
519
547
|
API-key headers; forwarding a request body across origins is rejected.
|
|
520
548
|
|
|
549
|
+
Every sandbox invocation, including the one that validates a custom tool's
|
|
550
|
+
call arguments against its `paramsZod`, runs in a fresh QuickJS runtime with the
|
|
551
|
+
heap, stack, and time limits above. One that hits a limit fails that tool call
|
|
552
|
+
only: the model receives a `validation_failed` or sandbox error result and the
|
|
553
|
+
run continues. The invocation runs on the thread of the process that hosts the
|
|
554
|
+
run (the server, or the run's worker with the native sandbox), so a call that
|
|
555
|
+
runs to the time limit holds that thread for up to 10 seconds.
|
|
556
|
+
|
|
557
|
+
For this release only, a custom tool's `paramsZod` is compiled with Zod 4's
|
|
558
|
+
built-in Zod 3 API (`zod/v3`) so that existing tools keep working; see
|
|
559
|
+
[native capabilities](../help/native-capabilities.md). `zod/v3` does not have
|
|
560
|
+
the fix for GHSA-mrhx-c7xc-m3w5: given an array, set, or map larger than its
|
|
561
|
+
`.max()`, it still checks every element and records an issue for each bad one.
|
|
562
|
+
For a tool's arguments that work stays inside the sandbox limits above, the same
|
|
563
|
+
limits that bound the tool's own code. Wardby's own validation uses Zod 4. A
|
|
564
|
+
tool whose schema the next release (Zod 4 only) would reject is flagged with a
|
|
565
|
+
`warnings` list in `create_tool`, `update_tool`, `dry_run_tool`, `list_tools`
|
|
566
|
+
and `get_agent` results (on tools the caller owns) and in one server log line
|
|
567
|
+
per tool at startup; a warning names only the tool and the removed Zod 3 methods.
|
|
568
|
+
|
|
521
569
|
Every resolved address must be global. A tool's own `allowedHosts` only
|
|
522
570
|
narrows egress; it never opens a private, loopback or link-local destination.
|
|
523
571
|
Only the operator's `WARDBY_FETCH_ALLOWED_HOSTS` (exact normalized hosts) can,
|
|
@@ -543,6 +591,23 @@ bound connection pools and concurrent invocations, and review a cancellable
|
|
|
543
591
|
database adapter or isolated worker if strict immediate termination is required.
|
|
544
592
|
Do not claim these per-invocation caps establish a whole-process memory ceiling.
|
|
545
593
|
|
|
594
|
+
## Slack workflow notifications
|
|
595
|
+
|
|
596
|
+
This integration requires Wardby 0.6.0 or later.
|
|
597
|
+
|
|
598
|
+
Optional Slack workflow notifications add no inbound endpoint: wardby only
|
|
599
|
+
ever calls out to Slack's `chat.postMessage`/`chat.update`/`conversations.info`,
|
|
600
|
+
and the app manifest requests no event subscriptions or interactivity, so
|
|
601
|
+
nothing posted in Slack can start or affect a run. What reaches Slack is
|
|
602
|
+
limited to issue keys/titles and their links, pull request numbers and
|
|
603
|
+
links, agent names, review verdicts, fix-round numbers, a failed run's
|
|
604
|
+
reason (its first line, at most 200 characters), and (only when a link opts
|
|
605
|
+
in) the run's spend line — never code, diffs, review bodies, or run output.
|
|
606
|
+
Issue titles are posted regardless of Jira issue security, so link a project
|
|
607
|
+
only to a channel whose members may see every issue in it. The bot token is a provider credential like any other and never
|
|
608
|
+
reaches a sandboxed tool or coding-run worker. See
|
|
609
|
+
[Send workflow updates to Slack](slack-notifications.md).
|
|
610
|
+
|
|
546
611
|
## Coding runs on Kubernetes
|
|
547
612
|
|
|
548
613
|
`JOB_LAUNCHER=kubernetes` runs each coding agent in its own pod instead of a
|
|
@@ -565,7 +630,7 @@ connects from inside the pod to a destination that must be blocked and requires
|
|
|
565
630
|
three consecutive refusals. A cluster that does not enforce policy, or has not
|
|
566
631
|
yet programmed this pod's rules, never reaches the point of running agent code.
|
|
567
632
|
The same check runs at startup against a throwaway canary pod, which also
|
|
568
|
-
verifies the pod cannot reach DNS, the internet or the cloud metadata
|
|
633
|
+
verifies the pod cannot reach DNS, the internet or the cloud metadata endpoints.
|
|
569
634
|
|
|
570
635
|
**RBAC.** The control plane needs a namespace Role (`pods`, `pods/exec`,
|
|
571
636
|
`pods/log`, `secrets`, `configmaps`, `networkpolicies`, `services`) and a
|
|
@@ -579,6 +644,15 @@ has none, so that configuration is development-only and says so. Set
|
|
|
579
644
|
`KUBERNETES_RUNTIME_CLASS` to the cluster's sandboxed runtime class in
|
|
580
645
|
production; the launcher warns loudly when it is unset.
|
|
581
646
|
|
|
647
|
+
The `eks` platform profile (Amazon EKS with a gVisor node group) also requires
|
|
648
|
+
the `gvisor` runtime class. The cluster supplies a RuntimeClass `gvisor`
|
|
649
|
+
(handler `runsc`) whose scheduling block targets nodes labelled
|
|
650
|
+
`wardby.dev/sandbox=gvisor` and tainted `sandbox=gvisor:NoSchedule`; coding-pod attestation
|
|
651
|
+
forgives that node selector and toleration and nothing else. The startup canary
|
|
652
|
+
and the native sandbox gate probe the cloud metadata endpoints
|
|
653
|
+
`169.254.169.254`, `169.254.170.23` and `fd00:ec2::23` (EKS Pod Identity agent, IPv4 and IPv6) and
|
|
654
|
+
`fd00:ec2::254` (EC2 IPv6), all on port 80, and require every one to be unreachable.
|
|
655
|
+
|
|
582
656
|
The `gke-autopilot` platform profile contains narrow admission allowances
|
|
583
657
|
captured from a real cluster and requires the `gvisor` runtime class. A dry-run
|
|
584
658
|
capture cannot observe labels added after pod scheduling, so live-run behavior
|
|
@@ -592,6 +666,52 @@ Per-run record ConfigMaps currently require operator-managed garbage collection,
|
|
|
592
666
|
and the real-cluster suite does not yet cover every Docker containment
|
|
593
667
|
scenario.
|
|
594
668
|
|
|
669
|
+
## Database authentication
|
|
670
|
+
|
|
671
|
+
By default `DATABASE_URL` carries the database password. On Amazon RDS (or
|
|
672
|
+
Aurora) for PostgreSQL, set `DATABASE_AUTH=rds-iam` to authenticate with IAM
|
|
673
|
+
database authentication instead: the password is a short-lived token signed with
|
|
674
|
+
the workload's AWS credentials (for example EKS Pod Identity), minted when a
|
|
675
|
+
connection opens. Any other value is refused with
|
|
676
|
+
[`database_auth_invalid`](../help/errors/database-auth-invalid.md).
|
|
677
|
+
|
|
678
|
+
Under `rds-iam`:
|
|
679
|
+
|
|
680
|
+
- `DATABASE_URL` must be `postgresql://` (or `postgres://`) with the database
|
|
681
|
+
user and no password, and must contain `sslmode=verify-full` and
|
|
682
|
+
`sslrootcert=<path to the RDS CA bundle>`. The port defaults to 5432.
|
|
683
|
+
- The region comes from `DATABASE_AWS_REGION`, else `AWS_REGION`.
|
|
684
|
+
- The database user must be granted `rds_iam` and the workload's IAM role must
|
|
685
|
+
allow `rds-db:connect` for it.
|
|
686
|
+
- Tokens are valid for 15 minutes and only for opening a connection; Wardby
|
|
687
|
+
reuses one for 10 minutes, and open connections outlive their token.
|
|
688
|
+
- It applies to every app connection: the Prisma clients (server, scheduler,
|
|
689
|
+
coding proxy, native gateway), the DBOS system database
|
|
690
|
+
(`DBOS_SYSTEM_DATABASE_URL`, else `DATABASE_URL`, under the same rules) and
|
|
691
|
+
the viewer's LISTEN connection. The DBOS system pool holds up to 10
|
|
692
|
+
connections; count it in the database's connection budget.
|
|
693
|
+
- URL parameters that are carried over: `application_name`,
|
|
694
|
+
`fallback_application_name`, `options`, `client_encoding`,
|
|
695
|
+
`statement_timeout`, `lock_timeout`, `idle_in_transaction_session_timeout`,
|
|
696
|
+
`query_timeout`. `connection_limit` and `pool_timeout` still size and bound
|
|
697
|
+
the pool, `connect_timeout` (seconds) applies to the DBOS pool, and `schema`
|
|
698
|
+
is accepted with no run-time effect, as in password mode. Every other
|
|
699
|
+
parameter is refused by name, including `sslcert`, `sslkey`, `ssl`, `host` and
|
|
700
|
+
`pgbouncer`; the Cloud SQL `sslcert=` advice does not apply to RDS.
|
|
701
|
+
- A misconfigured setup fails at process start, for every `wardby` command,
|
|
702
|
+
because the database module is loaded at start.
|
|
703
|
+
- `prisma migrate deploy` and `dbos schema` take a URL, not a connection
|
|
704
|
+
config, so they are not covered. Mint a short-lived URL with the helper
|
|
705
|
+
shipped in the migration image and run them within its 15 minutes:
|
|
706
|
+
|
|
707
|
+
```bash
|
|
708
|
+
DATABASE_URL="$(node scripts/rds-iam-url.mjs)" && export DATABASE_URL && npm run prisma:migrate && npm run dbos:migrate
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
The helper reads `DATABASE_URL`, `DATABASE_AWS_REGION`/`AWS_REGION` and the
|
|
712
|
+
ambient AWS credentials, and prints a URL containing a credential: never log
|
|
713
|
+
its output. `wardby quickstart` does not support `rds-iam`.
|
|
714
|
+
|
|
595
715
|
## Coding package registry
|
|
596
716
|
|
|
597
717
|
Enabling a coding agent's package allowlist widens the trusted proxy's own
|
|
@@ -613,6 +733,18 @@ guarantee; and the OSV vulnerability audit fails **closed**
|
|
|
613
733
|
operator explicitly sets `REGISTRY_AUDIT_FAIL_OPEN=true` to allow installs
|
|
614
734
|
through unaudited during an OSV outage.
|
|
615
735
|
|
|
736
|
+
## Native sandbox
|
|
737
|
+
|
|
738
|
+
A native agent set to `nativeExecutionMode=sandbox` runs its turn loop and user
|
|
739
|
+
tools in a single-use container with no credentials, database access, Docker
|
|
740
|
+
socket, or network except the native gateway. The gateway is a trusted
|
|
741
|
+
component: it holds the LLM credentials and integration settings, so give it
|
|
742
|
+
the database and provider settings it needs and nothing else, never the Docker
|
|
743
|
+
socket, and do not publish its port outside the Docker host. Only the server,
|
|
744
|
+
which launches workers, needs Docker access (or, on Kubernetes, permission to
|
|
745
|
+
create pods in the run namespace). See
|
|
746
|
+
[Native sandbox](native-sandbox.md).
|
|
747
|
+
|
|
616
748
|
## Images and dependencies
|
|
617
749
|
|
|
618
750
|
```sh
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
# Send workflow updates to Slack
|
|
2
|
+
|
|
3
|
+
> **Requires Wardby 0.6.0 or later.**
|
|
4
|
+
|
|
5
|
+
Link a Slack channel to a Jira project or to an agent (native or coding), and wardby posts
|
|
6
|
+
that project's or agent's workflow updates there: a card picked up, a pull
|
|
7
|
+
request opened, a review verdict, fix rounds, and the merge — one thread per
|
|
8
|
+
card. This is outbound only: nothing in Slack starts or affects a run, and
|
|
9
|
+
wardby exposes no new inbound endpoint for it.
|
|
10
|
+
|
|
11
|
+
## What it does
|
|
12
|
+
|
|
13
|
+
### Events
|
|
14
|
+
|
|
15
|
+
Eight kinds of lifecycle event can post to a linked channel:
|
|
16
|
+
|
|
17
|
+
| Kind | Posts when | Content |
|
|
18
|
+
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
19
|
+
| `issue_picked_up` | A Jira event starts a run on a linked issue | Issue key, title, and link; agent name; trigger kind |
|
|
20
|
+
| `run_failed` | A top-level run ends `failed`, `refused`, `budget_exhausted`, `cancelled`, or `lost` | Agent name, status, a short first-line reason (never the full error) |
|
|
21
|
+
| `run_blocked` | A top-level run succeeds without a pull request, but a coding child refused packages and made no changes or failed | ⛔ Blocked status, refused packages, and code-specific fixes |
|
|
22
|
+
| `pr_opened` | A coding run opens a pull request | Repository#number and link, the issue it is for, any Jira status move |
|
|
23
|
+
| `review_posted` | wardby's own review check posts a verdict | `APPROVE` / `CHANGES_REQUESTED` / `COMMENT`, the reviewer agent, the PR link |
|
|
24
|
+
| `review_fix` | An automatic [fix round](../help/review-fix-rounds.md) starts or hits the cap | Round number of the cap, started or capped |
|
|
25
|
+
| `pr_closed` | A pull request is merged or closed | Merged or closed, any Jira status move |
|
|
26
|
+
| `packages_audited` | A top-level run ends (any status) and its coding children installed anything under [package audit mode](coding-packages.md#package-audit-mode) | The mode, up to ten package names to approve, any names of unknown relation listed apart, and counts of their dependencies and of advisories served past |
|
|
27
|
+
|
|
28
|
+
A successful run normally shows up as `pr_opened` or `review_posted`. A run
|
|
29
|
+
blocked by package refusals instead emits `run_blocked`, once per run, using
|
|
30
|
+
the same rule and guidance as [status comments](../help/status-comments.md): a
|
|
31
|
+
run that answered, or worked around a refusal, is not blocked. Child
|
|
32
|
+
coding runs surface through their parent's events.
|
|
33
|
+
|
|
34
|
+
Some runs do not post `run_failed` at all:
|
|
35
|
+
|
|
36
|
+
- a coding agent's run triggered directly (rather than as a child of a
|
|
37
|
+
native agent's run),
|
|
38
|
+
- a review verdict or failure from a coding agent acting as the reviewer, and
|
|
39
|
+
- runs started from the `wardby run` CLI command.
|
|
40
|
+
|
|
41
|
+
`pr_opened` and `pr_closed` also post for a pull request opened from a GitHub
|
|
42
|
+
issue mention, the same as for a Jira issue: GitHub issues record the pull
|
|
43
|
+
requests opened for them. The thread is the issue's, one per GitHub issue
|
|
44
|
+
(`issue:github:owner/repo#N`) however many pull requests it has, not one per
|
|
45
|
+
pull request. Once a pull request is recorded for the issue, its
|
|
46
|
+
`review_posted` and `review_fix` events reply in that thread too. The run
|
|
47
|
+
events (`run_failed`, `run_blocked`, `packages_audited`) of a run a GitHub
|
|
48
|
+
issue mention started are not tied to the issue and post in a thread of
|
|
49
|
+
their own.
|
|
50
|
+
|
|
51
|
+
A pull request linked to several issues posts `pr_opened` and `pr_closed`
|
|
52
|
+
only to the first linked issue's thread.
|
|
53
|
+
|
|
54
|
+
### Threads
|
|
55
|
+
|
|
56
|
+
Each channel gets one thread per card: one per issue (a Jira issue, or the
|
|
57
|
+
GitHub issue a pull request was opened from) when the event has one, else one
|
|
58
|
+
per pull request. The first event for a card
|
|
59
|
+
posts a parent message naming the issue or pull request; every later event
|
|
60
|
+
for the same card is a reply in that thread, and the parent is kept updated
|
|
61
|
+
with a short status line. The statuses are:
|
|
62
|
+
|
|
63
|
+
| Status | Set by |
|
|
64
|
+
| ---------------------- | ---------------------------------------------------------------- |
|
|
65
|
+
| `picked up` | `issue_picked_up` on a new thread, or after `merged ✅`/`closed` |
|
|
66
|
+
| `PR open` | `pr_opened` |
|
|
67
|
+
| `changes requested` | a `CHANGES_REQUESTED` review |
|
|
68
|
+
| `approved` | an `APPROVE` review |
|
|
69
|
+
| `fixing` | a fix round starting (the round number is in the thread reply) |
|
|
70
|
+
| `fix rounds exhausted` | fix rounds reaching the cap with changes still requested |
|
|
71
|
+
| `merged ✅` | the pull request merged |
|
|
72
|
+
| `closed` | the pull request closed without merging |
|
|
73
|
+
| `blocked ⛔` | `run_blocked` |
|
|
74
|
+
| `failed ❌` | `run_failed` |
|
|
75
|
+
|
|
76
|
+
A `COMMENT` review and `packages_audited` leave the status as it was. `merged ✅` and `closed` stick:
|
|
77
|
+
a late review, fix round, failure, or repeated close does not change them.
|
|
78
|
+
Only a new start does — the card picked up again, or a new pull request
|
|
79
|
+
opened for it — which sets `picked up` or `PR open` again.
|
|
80
|
+
|
|
81
|
+
Most events only post as a thread reply. A merge, a blocked run, and a top-level run failure
|
|
82
|
+
also post to the channel itself, so they are visible without opening the
|
|
83
|
+
thread.
|
|
84
|
+
|
|
85
|
+
### What is never sent
|
|
86
|
+
|
|
87
|
+
wardby never posts code, diffs, review bodies, or run output to Slack. Error
|
|
88
|
+
messages shown in Slack are a short first line only (at most 200 characters),
|
|
89
|
+
never a full error or stack trace.
|
|
90
|
+
|
|
91
|
+
## 1. Create the Slack app
|
|
92
|
+
|
|
93
|
+
Use the manifest in [`deploy/slack/app-manifest.yaml`](../deploy/slack/app-manifest.yaml):
|
|
94
|
+
|
|
95
|
+
1. Open [api.slack.com/apps](https://api.slack.com/apps), choose **Create New
|
|
96
|
+
App → From a manifest**, pick your workspace, and paste the manifest.
|
|
97
|
+
2. On **OAuth & Permissions**, click **Install to Workspace** and approve the
|
|
98
|
+
requested scopes.
|
|
99
|
+
3. Copy the **Bot User OAuth Token** (starts `xoxb-`).
|
|
100
|
+
|
|
101
|
+
See [`deploy/slack/README.md`](../deploy/slack/README.md) for the full
|
|
102
|
+
walkthrough, including the optional per-agent display-name scope.
|
|
103
|
+
|
|
104
|
+
## 2. Configure wardby
|
|
105
|
+
|
|
106
|
+
| Variable | Value |
|
|
107
|
+
| --------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
108
|
+
| `WARDBY_SLACK_BOT_TOKEN` | The bot token from step 1 (`xoxb-…`). Unset = Slack notifications are disabled. |
|
|
109
|
+
| `WARDBY_SLACK_API_BASE_URL` | Optional. Overrides the Slack Web API base URL (`https://slack.com/api`); must be `https`. |
|
|
110
|
+
| `WARDBY_SLACK_CUSTOMIZE` | Optional, `true` or `false` (default `false`). Needs `chat:write.customize` in the installed app. |
|
|
111
|
+
|
|
112
|
+
Store `WARDBY_SLACK_BOT_TOKEN` in your secrets backend the same way you store
|
|
113
|
+
other provider credentials (`GITHUB_APP_PRIVATE_KEY`, `WARDBY_JIRA_API_TOKEN`)
|
|
114
|
+
— never in a committed file. On the GKE reference deployment, see
|
|
115
|
+
[Getting started on GKE](getting-started-gke.md). Restart wardby after setting
|
|
116
|
+
it. The startup log line `chat notifications acting as` names the Slack team
|
|
117
|
+
and bot user id wardby authenticated as. If that check fails instead, wardby
|
|
118
|
+
only logs an error and still starts: it does not fail to boot, and delivery
|
|
119
|
+
is not paused up front. Delivery pauses when the first actual delivery fails
|
|
120
|
+
authentication (see [Failure modes](#failure-modes)).
|
|
121
|
+
|
|
122
|
+
With `WARDBY_SLACK_CUSTOMIZE=true`, a message about an event that names an
|
|
123
|
+
agent (`issue_picked_up`, `run_failed`, `run_blocked`, `review_posted`, `packages_audited`) is posted under that
|
|
124
|
+
agent's name; every other message, and every message when the option is off,
|
|
125
|
+
posts as `wardby`. A thread's parent message uses the name of the event that
|
|
126
|
+
started the thread. wardby sets no icon.
|
|
127
|
+
|
|
128
|
+
Without `WARDBY_SLACK_BOT_TOKEN`, `link_notification_channel` and
|
|
129
|
+
`test_notification_channel` are refused and the dispatcher does not start;
|
|
130
|
+
`unlink_notification_channel` and `list_notification_channels` still work, so
|
|
131
|
+
you can clean up old links. See
|
|
132
|
+
[`errors/slack-not-configured`](../help/errors/slack-not-configured.md).
|
|
133
|
+
|
|
134
|
+
## Scopes and why
|
|
135
|
+
|
|
136
|
+
| Scope | Required | Used for |
|
|
137
|
+
| ---------------------- | ----------- | --------------------------------------------------------------------------------------------------------- |
|
|
138
|
+
| `chat:write` | Yes | Posting and updating the bot's own messages, including threaded replies |
|
|
139
|
+
| `chat:write.public` | Recommended | Posting to public channels without inviting the bot first |
|
|
140
|
+
| `channels:read` | Recommended | Validating a channel id and recording its name when linking |
|
|
141
|
+
| `groups:read` | Recommended | The same, for private channels |
|
|
142
|
+
| `chat:write.customize` | Optional | Posting under the name of the agent an event is about instead of `wardby` (`WARDBY_SLACK_CUSTOMIZE=true`) |
|
|
143
|
+
|
|
144
|
+
Without `channels:read`/`groups:read`, linking still accepts a raw channel id
|
|
145
|
+
but skips validating it. Any other authentication error while linking (an
|
|
146
|
+
invalid or revoked token) refuses the link; see
|
|
147
|
+
[`errors/slack-auth-failed`](../help/errors/slack-auth-failed.md). Private channels always need `/invite @wardby` (or
|
|
148
|
+
whatever you named the app) regardless of scopes — Slack never lets a bot see
|
|
149
|
+
or post to a private channel it hasn't been invited to. `chat.postMessage` is
|
|
150
|
+
rate-limited to about one message per second per channel; wardby's dispatcher
|
|
151
|
+
paces its own posts to stay under that.
|
|
152
|
+
|
|
153
|
+
## Link channels
|
|
154
|
+
|
|
155
|
+
Use the `link_notification_channel` MCP tool. It needs `agents:admin` with
|
|
156
|
+
the admin role, the same trust model as `link_issue_project`: wardby cannot
|
|
157
|
+
verify a caller's own Slack workspace access, so an administrator approves
|
|
158
|
+
every link.
|
|
159
|
+
|
|
160
|
+
Link a channel to a Jira project:
|
|
161
|
+
|
|
162
|
+
```json
|
|
163
|
+
{
|
|
164
|
+
"channel": "C0123456789",
|
|
165
|
+
"projectKey": "PAY",
|
|
166
|
+
"issueProvider": "jira",
|
|
167
|
+
"events": ["issue_picked_up", "pr_opened", "review_posted", "pr_closed"],
|
|
168
|
+
"includeCost": true
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Link a channel to an agent instead (every event for that agent's runs, no
|
|
173
|
+
filter):
|
|
174
|
+
|
|
175
|
+
```json
|
|
176
|
+
{
|
|
177
|
+
"channel": "C0123456789",
|
|
178
|
+
"agentId": "<agent id>"
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
- Give exactly one of `projectKey` (with optional `issueProvider`, default
|
|
183
|
+
`jira`) or `agentId`.
|
|
184
|
+
- `channel` is the Slack channel id — `C…` for a public channel, `G…` for a
|
|
185
|
+
private one — never a `#name`. Find it in the channel's details in Slack
|
|
186
|
+
(**View channel details**, near the bottom). Passing a `#name` is refused.
|
|
187
|
+
- `events` narrows which of the six kinds post to this link; omit it (or pass
|
|
188
|
+
an empty list) for all six.
|
|
189
|
+
- `includeCost` appends the run's spend line to messages for this link.
|
|
190
|
+
- Invite the bot to any private channel before linking it:
|
|
191
|
+
`/invite @wardby` in that channel.
|
|
192
|
+
- Re-linking the same channel and subject replaces `events` and
|
|
193
|
+
`includeCost` and clears any previously recorded delivery error — send the
|
|
194
|
+
full desired state each time.
|
|
195
|
+
|
|
196
|
+
Then confirm delivery works before relying on it:
|
|
197
|
+
|
|
198
|
+
```json
|
|
199
|
+
{ "id": "<link id from link_notification_channel>" }
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
`test_notification_channel` posts "✅ wardby is connected to this channel." —
|
|
203
|
+
if the bot can't write there, you get the error immediately instead of
|
|
204
|
+
finding out when the first real event is dropped. A successful test also
|
|
205
|
+
clears the link's `lastError`.
|
|
206
|
+
|
|
207
|
+
`list_notification_channels` shows every link's `lastError` and its pending
|
|
208
|
+
and failed delivery counts (counted per channel: two links to the same
|
|
209
|
+
channel show the same counts); filter by `projectKey`, `agentId`, or `channel`.
|
|
210
|
+
Listing your own agent's links needs read access to that agent; listing
|
|
211
|
+
everything (or filtering by `projectKey`) needs `agents:admin` with the admin
|
|
212
|
+
role. `unlink_notification_channel` removes a link by `id`.
|
|
213
|
+
|
|
214
|
+
## Failure modes
|
|
215
|
+
|
|
216
|
+
- **Channel not found, bot not in channel, or channel archived.** That
|
|
217
|
+
channel's pending deliveries fail immediately and are never retried, and
|
|
218
|
+
every link to it shows the error in `lastError`. Invite the bot
|
|
219
|
+
(`/invite @wardby`) or otherwise fix the channel in Slack. New events
|
|
220
|
+
deliver as soon as the bot can post there again; the deliveries that
|
|
221
|
+
already failed are not resent. Re-linking the channel (or a successful
|
|
222
|
+
`test_notification_channel`) clears `lastError`. See
|
|
223
|
+
[`errors/slack-channel-unreachable`](../help/errors/slack-channel-unreachable.md).
|
|
224
|
+
- **Invalid or revoked token.** Delivery pauses for every linked channel (no
|
|
225
|
+
deliveries are lost — they stay pending), and wardby re-checks the token
|
|
226
|
+
every five minutes with Slack's `auth.test`; it resumes automatically once
|
|
227
|
+
the check succeeds. See
|
|
228
|
+
[`errors/slack-auth-failed`](../help/errors/slack-auth-failed.md).
|
|
229
|
+
- **A missing scope.** Delivery pauses the same way, but `auth.test` needs no
|
|
230
|
+
scope, so the five-minute check succeeds, the next delivery fails again,
|
|
231
|
+
and delivery pauses again. It does not fix itself: add the scope to the app
|
|
232
|
+
and reinstall it to the workspace (and if Slack issues a new token, set it
|
|
233
|
+
and restart wardby). Pending deliveries are kept and sent once it works.
|
|
234
|
+
- **Rate limits.** wardby paces its own posts to about one per second per
|
|
235
|
+
channel; if Slack still responds with a rate-limit error, that delivery is
|
|
236
|
+
retried after the delay Slack specifies, with no attempt counted against
|
|
237
|
+
the retry limit below.
|
|
238
|
+
- **Transient errors** (network issues, Slack 5xx responses) are retried with
|
|
239
|
+
increasing back-off, up to 10 attempts, before the delivery is marked
|
|
240
|
+
failed.
|
|
241
|
+
- **Events while Slack isn't configured.** An event recorded before
|
|
242
|
+
`WARDBY_SLACK_BOT_TOKEN` is set is not queued and is not delivered once you
|
|
243
|
+
configure it — only events recorded after Slack notifications are enabled
|
|
244
|
+
reach Slack.
|
|
245
|
+
- **Duplicates.** Delivery is at least once: if wardby crashes or loses its
|
|
246
|
+
database connection right after Slack accepts a message, that message can
|
|
247
|
+
be posted again. A rare duplicate thread reply is possible.
|
|
248
|
+
- **Retention.** Delivery records are kept for 30 days and then pruned.
|
|
249
|
+
|
|
250
|
+
## Security
|
|
251
|
+
|
|
252
|
+
Phase 1 is outbound only: wardby requests no event subscriptions and no
|
|
253
|
+
interactivity in the manifest, so there is no new inbound endpoint and
|
|
254
|
+
nothing posted in Slack can start or affect a run.
|
|
255
|
+
|
|
256
|
+
What leaves to Slack: issue keys, titles, and their links; pull request
|
|
257
|
+
numbers and links; agent names; review verdicts; fix-round numbers; a failed
|
|
258
|
+
run's reason (its first line, at most 200 characters); and, only when a
|
|
259
|
+
link's `includeCost` is on, the run's spend line. wardby never posts code,
|
|
260
|
+
diffs, review bodies, or run output, and an error message shown in Slack is a
|
|
261
|
+
short first line only, never a full error or stack trace.
|
|
262
|
+
|
|
263
|
+
Issue titles go to the linked channel regardless of Jira issue security: an
|
|
264
|
+
issue restricted by a Jira security level still has its key and title posted.
|
|
265
|
+
Link a project only to a channel whose members may see every issue in it.
|
|
266
|
+
|
|
267
|
+
The bot token stays on the wardby server; agents, sandboxed tools, and
|
|
268
|
+
coding-run workers never see it.
|