@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/help/knowledge.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: knowledge
|
|
3
3
|
title: Architecture knowledge bundles
|
|
4
|
-
summary: Keep cited, non-obvious architecture knowledge in docs/knowledge/ so coding runs, reviewers, and live sessions (through the AGENTS.md pointer) use it; validate it with wardby knowledge check.
|
|
4
|
+
summary: Keep cited, non-obvious architecture knowledge in docs/knowledge/ (or a folder you pick in .wardby/knowledge.yaml) so coding runs, reviewers, and live sessions (through the AGENTS.md pointer) use it; validate it with wardby knowledge check.
|
|
5
5
|
audience: operator
|
|
6
|
-
tags: [knowledge, architecture, coding-agents, okf, cli, drift, push]
|
|
6
|
+
tags: [knowledge, architecture, coding-agents, okf, cli, drift, push, knowledge.yaml, bundle-path]
|
|
7
7
|
appliesTo: >=0.4.0
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -16,9 +16,18 @@ their reasons, and cross-module contracts. It uses the Open Knowledge Format
|
|
|
16
16
|
for, the paths it affects, and citations to the code it describes. Each citation
|
|
17
17
|
carries a commit `sha` and a `spanHash` so staleness can be detected.
|
|
18
18
|
|
|
19
|
-
- `
|
|
20
|
-
|
|
21
|
-
-
|
|
19
|
+
- `index.md` lists every concept in one line; `log.md` records changes to the
|
|
20
|
+
bundle.
|
|
21
|
+
- **Pick your own folder:** add `.wardby/knowledge.yaml` with one line,
|
|
22
|
+
`path: .okf` (any repo-relative folder outside `.wardby/` and `.git/`). Wardby
|
|
23
|
+
then reads the bundle there for the coding-run note, merge-watcher drift runs,
|
|
24
|
+
and `wardby knowledge check`. Without the file it uses `docs/knowledge/`; an
|
|
25
|
+
invalid file is ignored with a warning (`knowledge_config_invalid` from the
|
|
26
|
+
check). Or skip wardby's reading entirely: tell your agents where knowledge
|
|
27
|
+
lives in their prompts or `AGENTS.md`, and they use that folder; you lose
|
|
28
|
+
only the automatic note and drift scoping on merge. Update any prompt that
|
|
29
|
+
names `docs/knowledge/` to your folder.
|
|
30
|
+
- When the bundle's `index.md` exists on a coding run's base branch, the run's
|
|
22
31
|
task includes the index automatically (up to 8 KiB). It never fails a
|
|
23
32
|
dispatch; an unreadable index just means no note.
|
|
24
33
|
- When the run's commit is known (it always is for a normal clone) and the
|
|
@@ -26,8 +35,8 @@ carries a commit `sha` and a `spanHash` so staleness can be detected.
|
|
|
26
35
|
has no git metadata, so use that value for citation `sha` fields.
|
|
27
36
|
- Validate the bundle with `wardby knowledge check` (add `--strict` to fail on
|
|
28
37
|
warnings, `--json` for machine output, `--root` to point at the repository).
|
|
29
|
-
Errors are `concept_invalid`, `concept_secret`, `index_missing`,
|
|
30
|
-
`index_link_broken`; warnings are `concept_not_indexed`,
|
|
38
|
+
Errors are `concept_invalid`, `concept_secret`, `index_missing`,
|
|
39
|
+
`index_link_broken`, and `knowledge_config_invalid`; warnings are `concept_not_indexed`,
|
|
31
40
|
`citation_unverifiable`, and `citation_stale`.
|
|
32
41
|
- Builders may edit concept prose. Citations can go stale afterward; the
|
|
33
42
|
architecture agent re-anchors them.
|
|
@@ -50,7 +50,7 @@ The easiest way to try it is the optional coding step of
|
|
|
50
50
|
machine cannot see the folder: it ignores a trusted folder that does not
|
|
51
51
|
exist, so the repository fails with `local_repo_not_allowed`, and `doctor`
|
|
52
52
|
reports the folder as missing.
|
|
53
|
-
- **git 2.
|
|
53
|
+
- **git 2.38 or newer** on the machine that runs the wardby server.
|
|
54
54
|
- **Worker images from this release or later.** An older worker image rejects
|
|
55
55
|
a `local:` repository and the run fails with `worker_input_failed`. That
|
|
56
56
|
includes a bring-your-own `workerImageRef` image: rebuild it on a current
|
|
@@ -143,9 +143,8 @@ then:
|
|
|
143
143
|
`CODING_CLAUDE_TOOL_RUNNER_IMAGE_NODE_PYTHON_3_12` (Claude Code); set them to
|
|
144
144
|
override. If this version has no Python image, quickstart says so and the
|
|
145
145
|
builder uses the Node workspace (it can edit but not run Python tests). Other
|
|
146
|
-
languages need a bring-your-own image via `workerImageRef
|
|
147
|
-
|
|
148
|
-
the BYO worker images guide in the long-form docs;
|
|
146
|
+
languages need a bring-your-own image via `workerImageRef`. See the BYO
|
|
147
|
+
worker images guide in the long-form docs;
|
|
149
148
|
- finds the repository: a trusted folder that is a git repository, or the
|
|
150
149
|
repositories directly inside a trusted folder (hidden folders are skipped).
|
|
151
150
|
With several it asks which to use; non-interactively it uses the first in
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: low-power-mode
|
|
3
|
+
title: Low power mode on GKE
|
|
4
|
+
summary: Low power mode: scale the coding proxy and native gateway to zero when idle to cut the cost of a lightly used GKE deployment, and what changes when they wake.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [gke, cost, low-power, scale-to-zero, kubernetes, autoscaling, idle, power_sleep, power_status, sleep now, power:manage]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Low-power mode on GKE
|
|
11
|
+
|
|
12
|
+
Low-power mode reduces the cost of a GKE Autopilot deployment that runs agents
|
|
13
|
+
only occasionally. When it is on, the coding proxy and the native gateway scale
|
|
14
|
+
to zero replicas after an idle window and wake when a run needs them. The
|
|
15
|
+
headroom placeholder is off, and the control plane runs 1 copy that scales to 2
|
|
16
|
+
under load.
|
|
17
|
+
|
|
18
|
+
It needs `JOB_LAUNCHER=kubernetes`. Without it Wardby logs `low_power_ignored`
|
|
19
|
+
and the mode does nothing.
|
|
20
|
+
|
|
21
|
+
## Turn it on or off
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
WARDBY_HOSTNAME=wardby.example.com WARDBY_LOW_POWER=1 deploy/gke/up.sh
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Re-running `up.sh` without `WARDBY_LOW_POWER=1` turns it off: it removes the
|
|
28
|
+
autoscaler `wardby-control-plane` and the Role and RoleBinding `wardby-power`
|
|
29
|
+
and restores proxy 1, gateway 2, headroom 1, control plane 1.
|
|
30
|
+
|
|
31
|
+
`WARDBY_LOW_POWER` accepts only unset, `0` or `1`; anything else fails `up.sh`
|
|
32
|
+
and stops the control plane at start-up. `LOW_POWER_IDLE_MINUTES` is an integer
|
|
33
|
+
from 5 to 1440 (default 30) set on the control-plane Deployment; it is read
|
|
34
|
+
only when `WARDBY_LOW_POWER=1`.
|
|
35
|
+
|
|
36
|
+
## How it behaves
|
|
37
|
+
|
|
38
|
+
- **Sleep.** Every minute the scheduler leader scales the coding proxy
|
|
39
|
+
(`wardby-coding-proxy`) or native gateway (`wardby-native-gateway`) to 0 when
|
|
40
|
+
nothing is pending or running for it and nothing finished within the idle
|
|
41
|
+
window. The gateway also needs no active session. Either target sleeps only
|
|
42
|
+
once at least one idle window has passed since it was last woken (annotation
|
|
43
|
+
`wardby.io/power-woke-at`) and since the control plane started, whichever is
|
|
44
|
+
later. The check repeats just before scaling. Log: `power: proxy slept (idle 30m)`.
|
|
45
|
+
- **Wake.** A coding run scales the proxy to 1 and waits for a ready endpoint;
|
|
46
|
+
a sandbox run does the same for the gateway. The wait is at least 5 minutes.
|
|
47
|
+
A `KUBERNETES_READY_TIMEOUT_MS` (proxy) or `NATIVE_SANDBOX_READY_TIMEOUT_MS`
|
|
48
|
+
(gateway) above that, set on the control-plane Deployment, raises it. Expect
|
|
49
|
+
about 1 to 2 minutes extra on a cold node. Log: `power: proxy woke`. A
|
|
50
|
+
sandbox run woken this way may then wait for a gVisor node for its worker
|
|
51
|
+
pod, so its first model call can come several minutes after it started. From
|
|
52
|
+
0.7.0 it shows as running the whole time and is not reaped as orphaned; only
|
|
53
|
+
the wake and pod-start limits above can fail it.
|
|
54
|
+
- **Preflight.** The first coding run after a control-plane restart also runs
|
|
55
|
+
the cluster preflight canary, because start-up preflight is deferred while the
|
|
56
|
+
proxy sleeps (`kubernetes_preflight_deferred`).
|
|
57
|
+
- **Deploys.** Every `up.sh` run, including one that turns the mode off, marks
|
|
58
|
+
the proxy and gateway as just woken before it brings them back up, so the
|
|
59
|
+
control plane being replaced cannot scale them down mid-deploy. With the mode
|
|
60
|
+
on they stay up through the deploy (its database checks need them) and sleep
|
|
61
|
+
one idle window later.
|
|
62
|
+
- **Control plane.** It scales 1 to 2 on CPU (20% target, scale down
|
|
63
|
+
after 10 minutes). A run executes on the copy that started it, so scheduled
|
|
64
|
+
runs stay on the scheduler leader; webhook and MCP-started runs spread. The
|
|
65
|
+
autoscaler owns the replica count while the mode is on.
|
|
66
|
+
|
|
67
|
+
## Sleep now
|
|
68
|
+
|
|
69
|
+
To skip the idle window, for example right after a test, call `power_sleep`.
|
|
70
|
+
Pass `target: "proxy"` or `target: "gateway"` to sleep one; omit it for both.
|
|
71
|
+
|
|
72
|
+
- It scales the target to 0 at once, ignoring the idle window and the woke-at
|
|
73
|
+
grace.
|
|
74
|
+
- It never stops a run. A target with a pending or running run, or for the
|
|
75
|
+
gateway an active gateway session, stays up, and its run ids are returned:
|
|
76
|
+
`{ "slept": ["proxy"], "blocked": [{ "target": "gateway", "runIds": ["..."] }] }`.
|
|
77
|
+
Recently finished runs do not block it.
|
|
78
|
+
- The next run wakes the target as usual.
|
|
79
|
+
- Each call is logged with `event: "power.sleep"` and the caller's principal.
|
|
80
|
+
|
|
81
|
+
`power_status` returns, for each target, `replicas`, `ready`, `wokeAt` and
|
|
82
|
+
`blockers` (the run ids keeping it busy).
|
|
83
|
+
|
|
84
|
+
Both tools need the `power:manage` scope, which only the `admin` role grants
|
|
85
|
+
(see [Identity and access](identity-and-access.md)). With the mode off,
|
|
86
|
+
`power_sleep` fails with
|
|
87
|
+
[`409 low_power_disabled`](errors/low-power-disabled.md) and `power_status`
|
|
88
|
+
returns `{ "enabled": false }`.
|
|
89
|
+
|
|
90
|
+
## Trade-offs and requirements
|
|
91
|
+
|
|
92
|
+
- With headroom off, the control plane has less protection against preemption.
|
|
93
|
+
- The gateway runs 1 replica instead of 2 while awake: no redundancy.
|
|
94
|
+
- `NATIVE_SANDBOX_WARM_POOL_SIZE` must be 0, or the control plane refuses to
|
|
95
|
+
start.
|
|
96
|
+
- The gateway must be in the same namespace as `KUBERNETES_NAMESPACE`.
|
|
97
|
+
|
|
98
|
+
## Cost
|
|
99
|
+
|
|
100
|
+
Autopilot bills Pod requests while a Pod exists. At us-central1 list prices
|
|
101
|
+
($0.0445 per vCPU-hour, $0.0049225 per GiB-hour, 730 hours a month; use your
|
|
102
|
+
region's rates), always-on cost per workload is: control plane (1.1 vCPU / 2.125
|
|
103
|
+
GiB) $43.37, coding proxy (1.1 / 3.125) $46.96, native gateway (0.35 / 0.625 per
|
|
104
|
+
replica, two replicas) $27.23, headroom (0.25 / 0.5) $9.92. In low-power mode
|
|
105
|
+
the proxy costs $0.0643 an hour and a gateway replica $0.0187 an hour only
|
|
106
|
+
while awake, and headroom costs nothing. See
|
|
107
|
+
[Getting started on GKE](../docs/getting-started-gke.md#low-power-mode) for the
|
|
108
|
+
full table.
|
|
109
|
+
|
|
110
|
+
## Errors and log lines
|
|
111
|
+
|
|
112
|
+
- [`low_power_wake_timeout`](errors/low-power-wake-timeout.md): the target did
|
|
113
|
+
not become ready in time, or its Deployment does not exist.
|
|
114
|
+
- `native_sandbox_launch_abandoned` (0.7.0 and later): a sandbox run was
|
|
115
|
+
stopped while the gateway woke, so no worker pod was made.
|
|
116
|
+
- [`low_power_disabled`](errors/low-power-disabled.md): `power_sleep` was
|
|
117
|
+
called while the mode is off.
|
|
118
|
+
- [`low_power_scale_forbidden`](errors/low-power-scale-forbidden.md): the
|
|
119
|
+
control plane may not read or scale a Deployment or read its Endpoints
|
|
120
|
+
(Role `wardby-power` missing or out of date).
|
|
121
|
+
- Also: `power_sleep_failed`, `low_power_access_check_failed`,
|
|
122
|
+
`low_power_ignored`.
|
|
123
|
+
|
|
124
|
+
## Local kind
|
|
125
|
+
|
|
126
|
+
`WARDBY_LOW_POWER=1 deploy/kind-coding/up.sh` applies the Role. The kind control
|
|
127
|
+
plane runs on your host, so set `WARDBY_LOW_POWER=1` (and optionally
|
|
128
|
+
`LOW_POWER_IDLE_MINUTES`) in the environment of `wardby serve` too.
|
|
129
|
+
|
|
130
|
+
Related: [Deploy Wardby on GKE Autopilot](deploy-gke.md),
|
|
131
|
+
[Run native agents in a sandbox](native-sandbox.md).
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: merge-order-check
|
|
3
|
+
title: The wardby merge order check
|
|
4
|
+
summary: A per-pull-request `wardby merge order` check that tracks whether the pull requests a step depends on, by mergeOrder, have merged yet.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [github, checks, branch protection, merge order, delegation, mergeOrder, pull-requests, related-pull-requests]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# The wardby merge order check
|
|
11
|
+
|
|
12
|
+
> **Requires Wardby 0.6.0 or later.**
|
|
13
|
+
|
|
14
|
+
When a delegating agent sets a `mergeOrder` on a request's pull requests
|
|
15
|
+
(see [Setting a merge
|
|
16
|
+
order](related-pull-requests.md#setting-a-merge-order)), Wardby posts a
|
|
17
|
+
check run named exactly **`wardby merge order`** on each open or draft pull
|
|
18
|
+
request of that [related set](related-pull-requests.md) that its own GitHub
|
|
19
|
+
App opened. The check tells you, per pull request, whether the steps it
|
|
20
|
+
depends on have merged yet — so you can tell at a glance, or gate a merge
|
|
21
|
+
on it, without reading every sibling pull request's state by hand.
|
|
22
|
+
|
|
23
|
+
## When it is posted
|
|
24
|
+
|
|
25
|
+
Only when the pull request's related set has **more than one distinct
|
|
26
|
+
`mergeOrder` value** across its members, merged and closed ones included.
|
|
27
|
+
A request whose pull requests all share one `mergeOrder`, or carry none at
|
|
28
|
+
all, gets no check. A pull request without a `mergeOrder` is never checked
|
|
29
|
+
itself, and is never any other pull request's dependency either.
|
|
30
|
+
|
|
31
|
+
A member with order _k_ depends on every other member of the set with a
|
|
32
|
+
strictly lower, non-null order. Members that share the same `mergeOrder`
|
|
33
|
+
have no order between them — neither is the other's dependency, and either
|
|
34
|
+
may merge first.
|
|
35
|
+
|
|
36
|
+
## The three states
|
|
37
|
+
|
|
38
|
+
- **Waiting for earlier steps (`in_progress`)** — one or more dependencies
|
|
39
|
+
(strictly lower `mergeOrder`) have not merged yet. The title reads
|
|
40
|
+
"Waiting for _N_ earlier pull request(s) to merge", and the summary lists
|
|
41
|
+
them by link.
|
|
42
|
+
- **Every earlier step has merged (`success`)** — every dependency has
|
|
43
|
+
merged, or the pull request is the set's lowest step and has nothing to
|
|
44
|
+
wait for. The check completes with conclusion `success`.
|
|
45
|
+
- **An earlier step was closed without merging (`failure`)** — a dependency
|
|
46
|
+
was closed and never merged. The check completes with conclusion
|
|
47
|
+
`failure` and names the closed pull request(s) in the summary.
|
|
48
|
+
|
|
49
|
+
Every state's summary also carries a step label, "Step _k_ of _n_ in the
|
|
50
|
+
merge order set by the delegating agent," counted over the whole set
|
|
51
|
+
(merged and closed pull requests included), so a pull request's step
|
|
52
|
+
number doesn't change as earlier steps merge.
|
|
53
|
+
|
|
54
|
+
With Wardby 0.7.0 or later, when the delegating lead is linked with
|
|
55
|
+
`markReadyWhenPassing`, later steps become ready for review only once this
|
|
56
|
+
check is `success`. See
|
|
57
|
+
[Mark ready when passing](code-review-agents.md#mark-ready-when-passing).
|
|
58
|
+
|
|
59
|
+
### Waiting for the delegating run to finish
|
|
60
|
+
|
|
61
|
+
While the delegating (lead) agent's run that produced this set is still
|
|
62
|
+
running, it may still add or reorder steps. So, for every pull request
|
|
63
|
+
above the set's **lowest** step, a would-be `success` is held back: the
|
|
64
|
+
check stays `in_progress` with the title "Waiting for the delegating run
|
|
65
|
+
to finish" until that run ends, however it ends. Only a lead agent's run
|
|
66
|
+
holds later steps this way: a coding run that continues one of the set's
|
|
67
|
+
pull requests on its own (a review fix round, or an `@` mention picked up
|
|
68
|
+
by a coding link) never does, and its pushes update the check as they
|
|
69
|
+
land. The lowest step still
|
|
70
|
+
reports `success` right away ("First step: nothing to wait for") — it has
|
|
71
|
+
no dependency this hold could change. A pull request already `in_progress`
|
|
72
|
+
on an unmerged dependency, or `failure` on a closed one, is reported as
|
|
73
|
+
such regardless of whether the delegating run is still running.
|
|
74
|
+
|
|
75
|
+
## When it is updated
|
|
76
|
+
|
|
77
|
+
The check is recomputed and reposted, reading every member's current state
|
|
78
|
+
live from GitHub:
|
|
79
|
+
|
|
80
|
+
- when the delegating (lead) agent's run finishes;
|
|
81
|
+
- when any pull request in the set is closed or merged;
|
|
82
|
+
- on a new head or a reopen of any pull request in
|
|
83
|
+
the set, on every open or draft pull request Wardby's own GitHub App
|
|
84
|
+
opened; and
|
|
85
|
+
- by Wardby's own reconciliation sweep (below), for events the first three
|
|
86
|
+
points might have missed.
|
|
87
|
+
|
|
88
|
+
Reopening a closed, unmerged dependency moves any pull request that was
|
|
89
|
+
reported `failure` because of it back to `in_progress` — once that
|
|
90
|
+
dependency merges (or another dependency is still unmerged or closed), the
|
|
91
|
+
check moves on from there as usual.
|
|
92
|
+
|
|
93
|
+
### The reconciliation sweep
|
|
94
|
+
|
|
95
|
+
As a fallback for a missed GitHub event, Wardby periodically re-checks
|
|
96
|
+
merge-ordered sets in the background: at most once every 10 minutes per
|
|
97
|
+
process, covering the 50 most recently updated coding runs that carry a
|
|
98
|
+
`mergeOrder` and were updated within the last 7 days, resolved to their
|
|
99
|
+
request's run tree and synced a bounded number at a time, least-recently
|
|
100
|
+
swept first, so every covered set is revisited eventually. A set whose
|
|
101
|
+
pull requests haven't changed in over 7 days relies on its GitHub events
|
|
102
|
+
alone.
|
|
103
|
+
|
|
104
|
+
## Requiring it in branch protection
|
|
105
|
+
|
|
106
|
+
Posting the check never blocks a merge by itself — that's opt-in. To make
|
|
107
|
+
GitHub refuse a merge until a pull request's earlier steps have merged,
|
|
108
|
+
add `wardby merge order` as a required status check in the repository's
|
|
109
|
+
branch protection rules (or, on a repository using rulesets, its ruleset's
|
|
110
|
+
required status checks): **Settings → Branches** (or **Rules → Rulesets**)
|
|
111
|
+
**→ require status checks to pass → `wardby merge order`**. GitHub matches
|
|
112
|
+
required checks by name, so it must be exactly that string. Also set the
|
|
113
|
+
required check's expected source to your Wardby GitHub App, so a check of
|
|
114
|
+
the same name reported by anything else (another App, or a workflow in the
|
|
115
|
+
repository — any workflow with `checks: write`, such as one running on a
|
|
116
|
+
pull request author's `GITHUB_TOKEN`) cannot satisfy it. A request
|
|
117
|
+
without a `mergeOrder` on more than one pull request never posts this
|
|
118
|
+
check, so don't require it on a repository whose pull requests are never
|
|
119
|
+
ordered this way — GitHub would then wait on a check that never arrives.
|
|
120
|
+
|
|
121
|
+
See also [Branch protection](../docs/code-review-agents.md#branch-protection)
|
|
122
|
+
for requiring a passing _review_ the same way.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: mobile-app
|
|
3
|
+
title: Use the wardby mobile app
|
|
4
|
+
summary: Let admins sign in to the wardby mobile app for a read-only live view of runs; enable it with WARDBY_MOBILE_ENABLED on self-hosted auth or register the redirect URI in your IdP.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [mobile, ios, android, sign-in, oauth, WARDBY_MOBILE_ENABLED]
|
|
7
|
+
appliesTo: ">=0.6.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Use the wardby mobile app
|
|
11
|
+
|
|
12
|
+
The mobile app is a read-only live view of runs for admins, built on the admin
|
|
13
|
+
viewer API (see `admin-viewer`). Sign-in needs the `admin` role and the
|
|
14
|
+
`admin:view` scope.
|
|
15
|
+
|
|
16
|
+
## Enable it with self-hosted auth
|
|
17
|
+
|
|
18
|
+
Mobile sign-in is off by default. Set `WARDBY_MOBILE_ENABLED=true` on the
|
|
19
|
+
control plane and restart it. The OAuth server then accepts exactly one extra
|
|
20
|
+
redirect URI, `com.wardby.mobile:/oauth`, by exact match only. On GKE, pass
|
|
21
|
+
`WARDBY_MOBILE_ENABLED=true` to `deploy/gke/up.sh` on every run; a run without it
|
|
22
|
+
turns mobile sign-in off.
|
|
23
|
+
|
|
24
|
+
`WARDBY_MOBILE_REDIRECT_URI` is for white-label builds only. It must be a
|
|
25
|
+
reverse-domain private-use URI, for example `com.example.app:/oauth`: a
|
|
26
|
+
lowercase scheme with at least one dot, then `:/`, then a path of letters,
|
|
27
|
+
digits, `/`, `_` or `-`, with no host, query or fragment. Changing it signs out
|
|
28
|
+
app clients registered under the old value; they must sign in again. A
|
|
29
|
+
malformed `WARDBY_MOBILE_ENABLED` or `WARDBY_MOBILE_REDIRECT_URI` stops startup
|
|
30
|
+
in every auth mode.
|
|
31
|
+
|
|
32
|
+
## Enable it with an external identity provider
|
|
33
|
+
|
|
34
|
+
Wardby needs no setting. Register `com.wardby.mobile:/oauth` (or your
|
|
35
|
+
white-label redirect) as an allowed redirect URI on the IdP client that
|
|
36
|
+
requests `admin:view`, and make sure the `admin:view` scope is defined and
|
|
37
|
+
mapped. See [Configure identity and privileged access](identity-and-access.md).
|
|
38
|
+
|
|
39
|
+
## Turning it off
|
|
40
|
+
|
|
41
|
+
Set `WARDBY_MOBILE_ENABLED=false` (or unset it). New sign-ins and token
|
|
42
|
+
refreshes are refused. Access tokens already issued keep working until they
|
|
43
|
+
expire, at most 10 minutes. Turning it back on lets existing sessions refresh
|
|
44
|
+
again; nothing is revoked.
|
|
45
|
+
|
|
46
|
+
## Troubleshooting
|
|
47
|
+
|
|
48
|
+
If the app's registration or sign-in is refused with `mobile_disabled`, see
|
|
49
|
+
[Mobile sign-in is not enabled](errors/mobile-disabled.md).
|
|
50
|
+
|
|
51
|
+
## See also
|
|
52
|
+
|
|
53
|
+
- [Watch live runs with the admin viewer API](admin-viewer.md)
|
|
54
|
+
- The viewer API reference in `docs/viewer-api.md`.
|
|
@@ -3,7 +3,7 @@ id: native-capabilities
|
|
|
3
3
|
title: Use native agents, tools, and data
|
|
4
4
|
summary: Attach scoped tools, secrets, datastores, memory, schedules, and sub-agents to a native Wardby agent.
|
|
5
5
|
audience: developer
|
|
6
|
-
tags: [agents, tools, secrets, datastores, memory, schedules, subagents]
|
|
6
|
+
tags: [agents, tools, secrets, datastores, memory, schedules, subagents, zod, paramsZod, create_tool, dry_run_tool]
|
|
7
7
|
appliesTo: >=0.2.1
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -20,6 +20,34 @@ checkout. Give each agent only the capabilities its job needs:
|
|
|
20
20
|
- **Schedules and webhooks** to start event-driven work.
|
|
21
21
|
- **Sub-agents** for delegated, bounded work with their own capability set.
|
|
22
22
|
|
|
23
|
+
A tool's parameters are a Zod schema written as source text (`paramsZod` on
|
|
24
|
+
`create_tool` and `update_tool`). Wardby compiles it inside the sandbox, both to
|
|
25
|
+
derive the JSON Schema the model sees and to validate each call's arguments.
|
|
26
|
+
|
|
27
|
+
Wardby itself now uses Zod 4. For this release only, a tool's `paramsZod` is
|
|
28
|
+
still compiled with Zod 3 (Zod 4's built-in `zod/v3` API), so existing tools keep
|
|
29
|
+
working unchanged; a schema Zod 3 can't compile, such as one using `z.email()`,
|
|
30
|
+
is compiled with Zod 4. **Zod 3 schemas stop working in the next release**,
|
|
31
|
+
which compiles `paramsZod` with Zod 4 only. A schema that calls something Zod 4
|
|
32
|
+
removed, such as `.nonstrict()`, `.deepPartial()`, `z.ostring()` or
|
|
33
|
+
`z.string().ip()`, will then fail every call's validation.
|
|
34
|
+
|
|
35
|
+
Wardby warns about each such tool now:
|
|
36
|
+
|
|
37
|
+
- `create_tool`, `update_tool` and `dry_run_tool` results include a `warnings`
|
|
38
|
+
list naming the tool and the removed methods;
|
|
39
|
+
- in `list_tools` and in `get_agent`'s attached tools, each tool you own that is
|
|
40
|
+
affected carries the same `warnings` list;
|
|
41
|
+
- `wardby tool create` and bundle imports print the same warning;
|
|
42
|
+
- the server logs one warning per affected tool at startup.
|
|
43
|
+
|
|
44
|
+
To check a schema before the next release, call `dry_run_tool` with the tool's
|
|
45
|
+
`paramsZod` and sample arguments. With no `warnings` in the result, the schema
|
|
46
|
+
compiles with Zod 4 and Zod 4 treats those arguments the same way. Otherwise,
|
|
47
|
+
rewrite the schema with the Zod 4 API (for example `z.looseObject()` for
|
|
48
|
+
`.nonstrict()`, `z.string().optional()` for `z.ostring()`, and `z.ipv4()` or
|
|
49
|
+
`z.ipv6()` for `.ip()`), dry-run it again, and save it with `update_tool`.
|
|
50
|
+
|
|
23
51
|
Use a budget or shared budget group on every agent, and inspect runs before
|
|
24
52
|
expanding its access. An access grant is intentional delegation: use it only
|
|
25
53
|
when an owner permits one agent to use another resource. Creating or changing
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: native-sandbox
|
|
3
|
+
title: Run native agents in a sandbox
|
|
4
|
+
summary: Turn on sandbox mode so a native agent's turn loop and tools run in a single-use, credential-free Docker container or Kubernetes pod behind a native gateway.
|
|
5
|
+
audience: operator
|
|
6
|
+
tags: [native-agents, sandbox, isolation, docker, kubernetes, native-gateway, security, warm-pool]
|
|
7
|
+
appliesTo: ">=0.5.4"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Run native agents in a sandbox
|
|
11
|
+
|
|
12
|
+
By default a native agent runs inside the Wardby server. Set its
|
|
13
|
+
`nativeExecutionMode` to `sandbox` and its whole turn loop and user tools run in
|
|
14
|
+
a single-use Docker container or Kubernetes pod (the `wardby-native-worker`
|
|
15
|
+
image) instead. The
|
|
16
|
+
container has no credentials, no database access, no Docker socket, and no
|
|
17
|
+
network except the **native gateway**, a separate trusted container that holds
|
|
18
|
+
the LLM credentials and enforces each tool attachment's grants. The server and
|
|
19
|
+
gateway are trusted; the agent loop and user tool code are not.
|
|
20
|
+
|
|
21
|
+
## Turn it on
|
|
22
|
+
|
|
23
|
+
1. Run the gateway: `wardby native-gateway` in a container with the server's
|
|
24
|
+
database, LLM, secrets, and integration settings, listening on
|
|
25
|
+
`NATIVE_GATEWAY_LISTEN` (default `0.0.0.0:8790`; `GET /healthz`). Give it no
|
|
26
|
+
Docker socket.
|
|
27
|
+
2. On the server (`wardby serve` or `wardby scheduler`) set
|
|
28
|
+
`NATIVE_SANDBOX_LAUNCHER=docker`, `NATIVE_SANDBOX_WORKER_IMAGE` (a
|
|
29
|
+
`repo@sha256:...` digest or local image id), and `NATIVE_GATEWAY_CONTAINER`
|
|
30
|
+
(the gateway container's name). Optional: `NATIVE_GATEWAY_URL`,
|
|
31
|
+
`NATIVE_SANDBOX_CPUS` (1), `NATIVE_SANDBOX_MEMORY_MB` (512),
|
|
32
|
+
`NATIVE_SANDBOX_PIDS` (128).
|
|
33
|
+
3. Set the mode with `create_agent` or `update_agent` (`nativeExecutionMode`:
|
|
34
|
+
`control-plane` or `sandbox`; native agents only), or from the CLI with
|
|
35
|
+
`wardby agent create ... --native-execution-mode sandbox` or
|
|
36
|
+
`wardby agent mode <name> sandbox`. `sandbox` is refused when the server
|
|
37
|
+
(or, for the CLI, its environment) has no native sandbox configured. Each
|
|
38
|
+
run keeps the mode it started with; `get_run` shows it.
|
|
39
|
+
|
|
40
|
+
### Kubernetes
|
|
41
|
+
|
|
42
|
+
Set `NATIVE_SANDBOX_LAUNCHER=kubernetes` instead and the server starts one pod
|
|
43
|
+
per run. Run the gateway as a Deployment in the run namespace with a ClusterIP
|
|
44
|
+
Service that exposes both 8790 and the deny port 8791, and a NetworkPolicy that
|
|
45
|
+
admits `wardby.io/component: native-run` pods on both ports (keep the 8791
|
|
46
|
+
rule). On the server set `NATIVE_SANDBOX_WORKER_IMAGE` to a registry digest
|
|
47
|
+
(`repo@sha256:...`; a local image id is not accepted), and optionally
|
|
48
|
+
`NATIVE_SANDBOX_NAMESPACE` (default `KUBERNETES_NAMESPACE`, else
|
|
49
|
+
`wardby-coding`), `KUBERNETES_CONTEXT`, `NATIVE_SANDBOX_RUNTIME_CLASS` (for
|
|
50
|
+
example gVisor), `NATIVE_GATEWAY_SERVICE` (default `wardby-native-gateway`),
|
|
51
|
+
`NATIVE_SANDBOX_PRIORITY_CLASS` (not a `system-` class),
|
|
52
|
+
`NATIVE_SANDBOX_MAX_CONCURRENT` (cap on simultaneous sandbox runs across all
|
|
53
|
+
replicas; unset means no cap), `NATIVE_SANDBOX_READY_TIMEOUT_MS` (default 120000) and `NATIVE_SANDBOX_ENFORCEMENT_TIMEOUT_MS` (default 30000).
|
|
54
|
+
`NATIVE_SANDBOX_PIDS` applies to Docker only. On GKE Autopilot also set
|
|
55
|
+
`KUBERNETES_PLATFORM=gke-autopilot`: pod resources are conformed to Autopilot's
|
|
56
|
+
rules and the gVisor runtime class is required. On Amazon EKS with a gVisor node
|
|
57
|
+
group set `KUBERNETES_PLATFORM=eks`, which also requires the gVisor runtime class. The shipped GKE deployment
|
|
58
|
+
runs the gateway for you; see the GKE guide. The
|
|
59
|
+
server needs permission in that namespace to create, get, and delete pods,
|
|
60
|
+
Secrets, and NetworkPolicies, list pods, exec into pods, and get Services.
|
|
61
|
+
|
|
62
|
+
Each run starts "not ready": the gateway refuses the worker until the server
|
|
63
|
+
has verified the pod and its NetworkPolicy and proven from inside the pod that
|
|
64
|
+
the gateway answers while the deny port, the outside world, and the cloud
|
|
65
|
+
metadata endpoints do not. Failures
|
|
66
|
+
there are
|
|
67
|
+
[native_sandbox_network_unenforced](errors/native-sandbox-network-unenforced.md),
|
|
68
|
+
[native_sandbox_isolation_mismatch](errors/native-sandbox-isolation-mismatch.md),
|
|
69
|
+
[native_sandbox_gateway_unavailable](errors/native-sandbox-gateway-unavailable.md),
|
|
70
|
+
and [native_sandbox_worker_unready](errors/native-sandbox-worker-unready.md).
|
|
71
|
+
A start past the concurrent cap or the namespace quota fails with
|
|
72
|
+
[native_sandbox_capacity](errors/native-sandbox-capacity.md).
|
|
73
|
+
|
|
74
|
+
The full procedure, topology, and local compose overlay are in
|
|
75
|
+
[Native sandbox](../docs/native-sandbox.md).
|
|
76
|
+
|
|
77
|
+
### Warm pool
|
|
78
|
+
|
|
79
|
+
Set `NATIVE_SANDBOX_WARM_POOL_SIZE` (0 to 50, default 0 = off) to keep that many
|
|
80
|
+
idle, already-isolated workers ready, with either launcher. A run claims one
|
|
81
|
+
atomically through the database; its input and one-time gateway capability are
|
|
82
|
+
delivered over exec stdin only after the claim, and the worker is still
|
|
83
|
+
single-use. `NATIVE_SANDBOX_WARM_MAX_AGE_MS` (60000 to 21600000, default 1800000) replaces idle workers older than that. With no idle worker, or one that
|
|
84
|
+
fails the claim-time re-check, the run cold-launches as usual. If delivery fails
|
|
85
|
+
and the worker cannot be confirmed gone within 30 seconds, the run fails with
|
|
86
|
+
[native_sandbox_warm_delivery_failed](errors/native-sandbox-warm-delivery-failed.md).
|
|
87
|
+
|
|
88
|
+
Idle workers are extra pods or containers: the Kubernetes ResourceQuota needs
|
|
89
|
+
room for `NATIVE_SANDBOX_MAX_CONCURRENT` plus the pool size, and each idle
|
|
90
|
+
worker reserves its CPU and memory (billed on GKE Autopilot). Rebuild the worker
|
|
91
|
+
image so it can be a pool worker. Pool workers are named `wardby-nwarm-<token>`
|
|
92
|
+
and labelled `wardby.io/pool=warm`; logs use module `native-warm-pool`. Details
|
|
93
|
+
are in [Native sandbox](../docs/native-sandbox.md#warm-pool).
|
|
94
|
+
|
|
95
|
+
## What to expect
|
|
96
|
+
|
|
97
|
+
- The worker is read-only, non-root (uid 10001), has all capabilities dropped, a
|
|
98
|
+
size-capped `/tmp`, and CPU, memory, and PID limits. Each run gets its own
|
|
99
|
+
internal network shared only with the gateway.
|
|
100
|
+
- The gateway is the budget authority: it reserves each model call's worst-case
|
|
101
|
+
cost first and settles at actual usage. A call the budget cannot cover ends the
|
|
102
|
+
run `budget_exhausted`.
|
|
103
|
+
- Sub-agents of a sandboxed run are managed runs started by the scheduler
|
|
104
|
+
leader on its next tick (about every 10 seconds), so the server or scheduler
|
|
105
|
+
must be running. A coding agent child is resolved by the server when it
|
|
106
|
+
starts (worker image, services, knowledge), so the gateway needs no `CODING_*`
|
|
107
|
+
settings; a problem there (such as a `workerImageRef` that is not pinned by digest)
|
|
108
|
+
shows as the child run `failed` or `refused`; the parent's `delegate_to_*`
|
|
109
|
+
call receives `status: "failed"` with the `errorCode`, or for a refused child
|
|
110
|
+
the refusal sentence, and the full error is on the child run (`get_run`).
|
|
111
|
+
Upgrade `wardby serve` and `wardby scheduler` before or together with the
|
|
112
|
+
gateway: an older server starts the child unresolved (a Codex child on the
|
|
113
|
+
default image without its instructions, a Claude Code child failing with
|
|
114
|
+
`coding_provider_not_configured:claude-code`).
|
|
115
|
+
- A sandbox run has a 60-minute maximum lifetime.
|
|
116
|
+
- `stop_run` stops a sandbox run: its gateway session ends so the worker exits
|
|
117
|
+
at its next call, and a worker still running after 5 seconds is killed and
|
|
118
|
+
removed (a warm pool worker is discarded, never reused). Search help for
|
|
119
|
+
"stop run" (article `stop-run`, Wardby 0.7.0 and later).
|
|
120
|
+
|
|
121
|
+
## Roll back
|
|
122
|
+
|
|
123
|
+
Set the agent back to `control-plane`. Only new runs are affected: runs
|
|
124
|
+
already started in sandbox mode finish there.
|
|
125
|
+
|
|
126
|
+
## Troubleshooting
|
|
127
|
+
|
|
128
|
+
Check the gateway with `GET /healthz`, list worker containers with
|
|
129
|
+
`docker ps --all --filter label=io.wardby.component=native-worker`, and read the
|
|
130
|
+
run's error with `get_run`. On Kubernetes list worker pods with
|
|
131
|
+
`kubectl get pods -n <namespace> -l wardby.io/component=native-run`. Error
|
|
132
|
+
codes:
|
|
133
|
+
|
|
134
|
+
- [native_sandbox_unavailable](errors/native-sandbox-unavailable.md)
|
|
135
|
+
- [native_sandbox_worker_exited](errors/native-sandbox-worker-exited.md)
|
|
136
|
+
- [native_sandbox_gateway_error](errors/native-sandbox-gateway-error.md)
|
|
137
|
+
- [native_sandbox_deadline_exceeded](errors/native-sandbox-deadline-exceeded.md)
|
|
138
|
+
- [native_sandbox_worker_lost](errors/native-sandbox-worker-lost.md)
|
|
139
|
+
- [native_sandbox_image_not_pinned](errors/native-sandbox-image-not-pinned.md)
|
|
140
|
+
- [native_sandbox_docker_failed](errors/native-sandbox-docker-failed.md)
|
|
141
|
+
- [native_sandbox_network_unenforced](errors/native-sandbox-network-unenforced.md)
|
|
142
|
+
- [native_sandbox_isolation_mismatch](errors/native-sandbox-isolation-mismatch.md)
|
|
143
|
+
- [native_sandbox_gateway_unavailable](errors/native-sandbox-gateway-unavailable.md)
|
|
144
|
+
- [native_sandbox_worker_unready](errors/native-sandbox-worker-unready.md)
|
|
145
|
+
- [native_sandbox_capacity](errors/native-sandbox-capacity.md)
|
|
146
|
+
- [native_sandbox_warm_delivery_failed](errors/native-sandbox-warm-delivery-failed.md)
|
|
147
|
+
- [native_sandbox_requires_catalog](errors/native-sandbox-requires-catalog.md)
|
|
148
|
+
|
|
149
|
+
See also [Use native agents, tools, and data](native-capabilities.md) and
|
|
150
|
+
[Understand Wardby security boundaries](security.md).
|
package/help/observability.md
CHANGED
|
@@ -37,5 +37,13 @@ Alert on proxy failures, budget cutoffs, cleanup failures, stalled runs, and
|
|
|
37
37
|
sustained latency or memory growth. Wardby's database remains the source of
|
|
38
38
|
truth for runs, budgets, and accounting.
|
|
39
39
|
|
|
40
|
+
With the durable executor (`EXECUTOR=dbos`), also watch the server logs for
|
|
41
|
+
the `run_ownership_lost` warning. It means a run's owner stalled long enough
|
|
42
|
+
for another process to adopt the run, and the stalled attempt stopped without
|
|
43
|
+
writing the run; the step it stopped at had its model spend discarded. The run
|
|
44
|
+
itself is unaffected. Repeated warnings point at event-loop or database-pool
|
|
45
|
+
starvation. See the durable executor section of
|
|
46
|
+
[`docs/security-deployment.md`](../docs/security-deployment.md).
|
|
47
|
+
|
|
40
48
|
Read [`docs/observability.md`](../docs/observability.md) for configuration and
|
|
41
49
|
the full production checklist.
|
package/help/operating-agents.md
CHANGED
|
@@ -32,5 +32,10 @@ A running run's cost, token counts, and turn count update after each model
|
|
|
32
32
|
call, so `get_run` and `list_runs` show spend so far rather than zero until the
|
|
33
33
|
run finishes.
|
|
34
34
|
|
|
35
|
+
To stop a run that is pending, queued, or running (for example one a schedule
|
|
36
|
+
started that you did not want), call `stop_run` with its id. It ends as
|
|
37
|
+
`cancelled`, along with the sub-agent runs it still has in flight. Search help
|
|
38
|
+
for "stop run" (article `stop-run`, Wardby 0.7.0 and later).
|
|
39
|
+
|
|
35
40
|
For the full lifecycle and the controls applied to every managed run, read
|
|
36
41
|
[`README.md`](../README.md).
|