@wardby/cli 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +5 -5
- package/README.md +6 -1
- package/deploy/local/docker-compose.quickstart-coding.yml +19 -0
- package/dist/claude-coding-worker/driver.d.ts +33 -3
- package/dist/claude-coding-worker/driver.js +151 -21
- package/dist/claude-coding-worker/main.js +38 -6
- package/dist/claude-coding-worker/sdk.js +29 -2
- package/dist/claude-coding-worker/tool-socket.d.ts +27 -0
- package/dist/claude-coding-worker/tool-socket.js +111 -0
- package/dist/claude-coding-worker/transcript.d.ts +18 -0
- package/dist/claude-coding-worker/transcript.js +77 -0
- package/dist/claude-plugin/command.d.ts +61 -0
- package/dist/claude-plugin/command.js +376 -0
- package/dist/cli-help.d.ts +1 -1
- package/dist/cli-help.js +3 -1
- package/dist/cli.js +71 -13
- package/dist/coding/code-host.d.ts +16 -0
- package/dist/coding/code-host.js +60 -0
- package/dist/coding/continuation-wording.d.ts +35 -0
- package/dist/coding/continuation-wording.js +73 -0
- package/dist/coding/linked-issue-note.d.ts +23 -0
- package/dist/coding/linked-issue-note.js +47 -0
- package/dist/coding/mcp-token.d.ts +12 -0
- package/dist/coding/mcp-token.js +26 -0
- package/dist/coding/merge-wording.d.ts +28 -0
- package/dist/coding/merge-wording.js +78 -0
- package/dist/coding/pr-description-note.d.ts +9 -0
- package/dist/coding/pr-description-note.js +32 -0
- package/dist/coding/profile.d.ts +46 -126
- package/dist/coding/profile.js +45 -4
- package/dist/coding/protected-path-wording.d.ts +8 -0
- package/dist/coding/protected-path-wording.js +1 -1
- package/dist/coding/protocol.d.ts +264 -346
- package/dist/coding/protocol.js +237 -12
- package/dist/coding/redact.d.ts +3 -0
- package/dist/coding/redact.js +17 -0
- package/dist/coding/registry/allowlist.d.ts +12 -0
- package/dist/coding/registry/allowlist.js +14 -1
- package/dist/coding/registry/audit-mode.d.ts +153 -0
- package/dist/coding/registry/audit-mode.js +304 -0
- package/dist/coding/registry/lockfile-shared.d.ts +36 -0
- package/dist/coding/registry/lockfile-shared.js +128 -0
- package/dist/coding/registry/lockfiles.js +1 -1
- package/dist/coding/registry/npm-lockfile-formats.d.ts +11 -0
- package/dist/coding/registry/npm-lockfile-formats.js +41 -0
- package/dist/coding/registry/npm-lockfile.d.ts +8 -4
- package/dist/coding/registry/npm-lockfile.js +4 -6
- package/dist/coding/registry/npm.js +78 -8
- package/dist/coding/registry/pnpm-lockfile.d.ts +17 -0
- package/dist/coding/registry/pnpm-lockfile.js +189 -0
- package/dist/coding/registry/pypi-plan.d.ts +50 -0
- package/dist/coding/registry/pypi-plan.js +406 -0
- package/dist/coding/registry/pypi-requirements.d.ts +58 -0
- package/dist/coding/registry/pypi-requirements.js +155 -0
- package/dist/coding/registry/pypi.d.ts +3 -27
- package/dist/coding/registry/pypi.js +40 -154
- package/dist/coding/registry/refusal-hints.d.ts +20 -0
- package/dist/coding/registry/refusal-hints.js +61 -0
- package/dist/coding/registry/refusal-wording.d.ts +11 -0
- package/dist/coding/registry/refusal-wording.js +56 -0
- package/dist/coding/registry/report.d.ts +70 -8
- package/dist/coding/registry/report.js +112 -5
- package/dist/coding/registry/types.d.ts +58 -8
- package/dist/coding/registry/yarn-lockfile.d.ts +30 -0
- package/dist/coding/registry/yarn-lockfile.js +367 -0
- package/dist/coding/services/catalog.d.ts +37 -351
- package/dist/coding/transcript/claude-code.d.ts +13 -0
- package/dist/coding/transcript/claude-code.js +273 -0
- package/dist/coding/transcript/download-protocol.d.ts +30 -0
- package/dist/coding/transcript/download-protocol.js +18 -0
- package/dist/coding/transcript/format.d.ts +20 -0
- package/dist/coding/transcript/format.js +32 -0
- package/dist/coding/transcript/recorder.d.ts +52 -0
- package/dist/coding/transcript/recorder.js +225 -0
- package/dist/coding/transcript/resume/checkout.d.ts +31 -0
- package/dist/coding/transcript/resume/checkout.js +203 -0
- package/dist/coding/transcript/resume/command.d.ts +17 -0
- package/dist/coding/transcript/resume/command.js +176 -0
- package/dist/coding/transcript/resume/download.d.ts +20 -0
- package/dist/coding/transcript/resume/download.js +153 -0
- package/dist/coding/transcript/resume/launch.d.ts +38 -0
- package/dist/coding/transcript/resume/launch.js +128 -0
- package/dist/coding/transcript/resume/session-file.d.ts +13 -0
- package/dist/coding/transcript/resume/session-file.js +79 -0
- package/dist/coding/transcript/resume/stand-in.d.ts +11 -0
- package/dist/coding/transcript/resume/stand-in.js +49 -0
- package/dist/coding-worker/artifact.d.ts +8 -3
- package/dist/coding-worker/artifact.js +3 -1
- package/dist/coding-worker/debug-trace.d.ts +9 -6
- package/dist/coding-worker/debug-trace.js +16 -19
- package/dist/coding-worker/dependency-cache.d.mts +229 -0
- package/dist/coding-worker/dependency-cache.mjs +2123 -0
- package/dist/coding-worker/driver.d.ts +4 -3
- package/dist/coding-worker/driver.js +124 -39
- package/dist/coding-worker/errors.d.ts +1 -0
- package/dist/coding-worker/errors.js +32 -0
- package/dist/coding-worker/main.js +5 -1
- package/dist/coding-worker/mcp-config.d.ts +27 -0
- package/dist/coding-worker/mcp-config.js +32 -0
- package/dist/coding-worker/sdk.d.ts +36 -0
- package/dist/coding-worker/sdk.js +28 -1
- package/dist/coding-worker/task-note.d.ts +11 -0
- package/dist/coding-worker/task-note.js +13 -0
- package/dist/coding-worker/types.d.ts +15 -0
- package/dist/config/dependency-cache.d.ts +23 -0
- package/dist/config/dependency-cache.js +32 -0
- package/dist/config/mcp-call-limit.d.ts +8 -0
- package/dist/config/mcp-call-limit.js +18 -0
- package/dist/config/mcp-servers.d.ts +8 -0
- package/dist/config/mcp-servers.js +12 -0
- package/dist/config/providers.d.ts +12 -3
- package/dist/config/providers.js +55 -5
- package/dist/config/test-simulators.d.ts +92 -0
- package/dist/config/test-simulators.js +333 -0
- package/dist/config/tool-timeout.d.ts +1 -0
- package/dist/config/tool-timeout.js +18 -0
- package/dist/core/async-context.d.ts +2 -0
- package/dist/core/async-context.js +12 -0
- package/dist/core/budget-events.d.ts +108 -0
- package/dist/core/budget-events.js +346 -0
- package/dist/core/budget-groups.d.ts +50 -1
- package/dist/core/budget-groups.js +236 -27
- package/dist/core/budget-stopped-head.d.ts +46 -0
- package/dist/core/budget-stopped-head.js +81 -0
- package/dist/core/budget-topup.d.ts +51 -0
- package/dist/core/budget-topup.js +156 -0
- package/dist/core/budget-wording.d.ts +16 -2
- package/dist/core/budget-wording.js +40 -2
- package/dist/core/coding-mcp.d.ts +36 -0
- package/dist/core/coding-mcp.js +253 -0
- package/dist/core/coding-queue.d.ts +2 -1
- package/dist/core/coding-queue.js +7 -0
- package/dist/core/coding-repository.d.ts +46 -0
- package/dist/core/coding-repository.js +92 -0
- package/dist/core/cron.d.ts +19 -1
- package/dist/core/cron.js +17 -0
- package/dist/core/datastores.js +1 -1
- package/dist/core/deferred-coding.d.ts +14 -0
- package/dist/core/deferred-coding.js +62 -0
- package/dist/core/delegation-child.d.ts +25 -0
- package/dist/core/delegation-child.js +37 -0
- package/dist/core/delegation-slots.d.ts +27 -0
- package/dist/core/delegation-slots.js +44 -0
- package/dist/core/dispatch.d.ts +48 -2
- package/dist/core/dispatch.js +166 -66
- package/dist/core/engine-native.js +1 -1
- package/dist/core/error-code.d.ts +38 -0
- package/dist/core/error-code.js +169 -0
- package/dist/core/grants.d.ts +46 -8
- package/dist/core/grants.js +99 -8
- package/dist/core/host-events.d.ts +18 -2
- package/dist/core/host-events.js +291 -27
- package/dist/core/host-status.d.ts +85 -3
- package/dist/core/host-status.js +300 -22
- package/dist/core/issue-bridge.d.ts +50 -6
- package/dist/core/issue-bridge.js +124 -33
- package/dist/core/issue-events.d.ts +1 -1
- package/dist/core/issue-events.js +4 -10
- package/dist/core/issue-status.d.ts +1 -1
- package/dist/core/issue-status.js +58 -29
- package/dist/core/logger.d.ts +5 -0
- package/dist/core/logger.js +14 -1
- package/dist/core/lost-run-children.d.ts +6 -0
- package/dist/core/lost-run-children.js +32 -0
- package/dist/core/mark-ready.d.ts +34 -0
- package/dist/core/mark-ready.js +152 -0
- package/dist/core/markdown-code.d.ts +8 -0
- package/dist/core/markdown-code.js +107 -0
- package/dist/core/mcp-client/client.d.ts +47 -0
- package/dist/core/mcp-client/client.js +141 -0
- package/dist/core/mcp-client/jsonrpc.d.ts +15 -0
- package/dist/core/mcp-client/jsonrpc.js +54 -0
- package/dist/core/mcp-client/results.d.ts +13 -0
- package/dist/core/mcp-client/results.js +42 -0
- package/dist/core/mcp-servers.d.ts +90 -0
- package/dist/core/mcp-servers.js +230 -0
- package/dist/core/mcp-tools.d.ts +108 -0
- package/dist/core/mcp-tools.js +287 -0
- package/dist/core/memory-tools.js +7 -0
- package/dist/core/merge-order-check.d.ts +2 -1
- package/dist/core/merge-order-check.js +44 -18
- package/dist/core/notification-dispatcher.js +2 -1
- package/dist/core/notification-templates.d.ts +1 -7
- package/dist/core/notification-templates.js +36 -2
- package/dist/core/pull-request-state-sync.js +2 -2
- package/dist/core/reconciler.d.ts +4 -3
- package/dist/core/reconciler.js +8 -1
- package/dist/core/related-pull-requests.d.ts +11 -3
- package/dist/core/related-pull-requests.js +49 -20
- package/dist/core/reply-parts.d.ts +21 -0
- package/dist/core/reply-parts.js +73 -0
- package/dist/core/review-fix.d.ts +1 -1
- package/dist/core/review-fix.js +4 -3
- package/dist/core/review-host-checks.d.ts +1 -1
- package/dist/core/review-host-tools.d.ts +3 -0
- package/dist/core/review-host-tools.js +102 -14
- package/dist/core/review-reads.d.ts +55 -0
- package/dist/core/review-reads.js +233 -0
- package/dist/core/run-status.d.ts +12 -0
- package/dist/core/run-status.js +12 -0
- package/dist/core/runner.d.ts +145 -49
- package/dist/core/runner.js +719 -216
- package/dist/core/schedule-start.d.ts +12 -0
- package/dist/core/schedule-start.js +14 -0
- package/dist/core/secret-broker-config.d.ts +12 -74
- package/dist/core/secret-broker-config.js +1 -1
- package/dist/core/secret-guard.d.ts +49 -0
- package/dist/core/secret-guard.js +119 -0
- package/dist/core/secret-guarded-stores.d.ts +12 -0
- package/dist/core/secret-guarded-stores.js +41 -0
- package/dist/core/secret-spans.d.ts +50 -0
- package/dist/core/secret-spans.js +94 -0
- package/dist/core/secrets.d.ts +11 -1
- package/dist/core/secrets.js +27 -1
- package/dist/core/serializable-retry.d.ts +18 -0
- package/dist/core/serializable-retry.js +43 -0
- package/dist/core/stop-run.d.ts +46 -0
- package/dist/core/stop-run.js +61 -0
- package/dist/core/tool-admin.d.ts +5 -1
- package/dist/core/tool-admin.js +7 -2
- package/dist/core/tool-names.d.ts +13 -0
- package/dist/core/tool-names.js +20 -0
- package/dist/core/webhooks.d.ts +4 -0
- package/dist/core/webhooks.js +68 -49
- package/dist/core/workflow-events.d.ts +14 -2
- package/dist/core/workflow-events.js +4 -0
- package/dist/core/workflow-run-events.d.ts +5 -3
- package/dist/core/workflow-run-events.js +45 -9
- package/dist/core/zod-json-schema.d.ts +4 -0
- package/dist/core/zod-json-schema.js +39 -0
- package/dist/core/zod3-window.d.ts +35 -0
- package/dist/core/zod3-window.js +124 -0
- package/dist/generated/prisma/browser.d.ts +65 -3
- package/dist/generated/prisma/client.d.ts +65 -3
- package/dist/generated/prisma/commonInputTypes.d.ts +266 -106
- package/dist/generated/prisma/enums.d.ts +10 -0
- package/dist/generated/prisma/enums.js +8 -0
- package/dist/generated/prisma/internal/class.d.ts +110 -0
- package/dist/generated/prisma/internal/class.js +4 -4
- package/dist/generated/prisma/internal/prismaNamespace.d.ts +957 -9
- package/dist/generated/prisma/internal/prismaNamespace.js +166 -2
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +174 -0
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +166 -2
- package/dist/generated/prisma/models/Agent.d.ts +377 -8
- package/dist/generated/prisma/models/AgentMcpServer.d.ts +1412 -0
- package/dist/generated/prisma/models/AgentMcpServer.js +1 -0
- package/dist/generated/prisma/models/AgentRepository.d.ts +81 -1
- package/dist/generated/prisma/models/AuthUser.d.ts +1 -1
- package/dist/generated/prisma/models/CodingAgentProfile.d.ts +228 -7
- package/dist/generated/prisma/models/CodingProxyRequest.d.ts +207 -3
- package/dist/generated/prisma/models/CodingProxySession.d.ts +232 -2
- package/dist/generated/prisma/models/CodingRun.d.ts +1712 -1
- package/dist/generated/prisma/models/DependencySnapshot.d.ts +1668 -0
- package/dist/generated/prisma/models/DependencySnapshot.js +1 -0
- package/dist/generated/prisma/models/HostProvider.d.ts +2176 -0
- package/dist/generated/prisma/models/HostProvider.js +1 -0
- package/dist/generated/prisma/models/HostProviderCredential.d.ts +1285 -0
- package/dist/generated/prisma/models/HostProviderCredential.js +1 -0
- package/dist/generated/prisma/models/HostProviderOperation.d.ts +1470 -0
- package/dist/generated/prisma/models/HostProviderOperation.js +1 -0
- package/dist/generated/prisma/models/HostProviderTrustedAccount.d.ts +1145 -0
- package/dist/generated/prisma/models/HostProviderTrustedAccount.js +1 -0
- package/dist/generated/prisma/models/IssuePullRequest.d.ts +6 -2
- package/dist/generated/prisma/models/LocalReview.d.ts +40 -1
- package/dist/generated/prisma/models/McpServer.d.ts +1500 -0
- package/dist/generated/prisma/models/McpServer.js +1 -0
- package/dist/generated/prisma/models/NativeGatewayCall.d.ts +77 -1
- package/dist/generated/prisma/models/NativeGatewaySession.d.ts +35 -1
- package/dist/generated/prisma/models/Principal.d.ts +167 -0
- package/dist/generated/prisma/models/RegistryAllowance.d.ts +41 -1
- package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +75 -1
- package/dist/generated/prisma/models/RegistryAuditRecord.d.ts +1364 -0
- package/dist/generated/prisma/models/RegistryAuditRecord.js +1 -0
- package/dist/generated/prisma/models/ResourceGrant.d.ts +1 -1
- package/dist/generated/prisma/models/Run.d.ts +738 -2
- package/dist/generated/prisma/models/RunBudgetEvent.d.ts +1211 -0
- package/dist/generated/prisma/models/RunBudgetEvent.js +1 -0
- package/dist/generated/prisma/models/RunTranscript.d.ts +1339 -0
- package/dist/generated/prisma/models/RunTranscript.js +1 -0
- package/dist/generated/prisma/models/Secret.d.ts +387 -0
- package/dist/generated/prisma/models/Tool.d.ts +223 -1
- package/dist/generated/prisma/models.d.ts +10 -0
- package/dist/help/search.js +12 -3
- package/dist/help-index.json +2033 -110
- package/dist/import/create.js +48 -4
- package/dist/import/neutral-schema.d.ts +51 -281
- package/dist/import/neutral-schema.js +7 -4
- package/dist/knowledge/check.d.ts +1 -1
- package/dist/knowledge/cli.d.ts +11 -1
- package/dist/knowledge/cli.js +37 -4
- package/dist/knowledge/concept.d.ts +3 -19
- package/dist/knowledge/location.d.ts +31 -0
- package/dist/knowledge/location.js +78 -0
- package/dist/mcp/auth/access.d.ts +10 -2
- package/dist/mcp/auth/access.js +15 -1
- package/dist/mcp/auth/grants-cli.d.ts +6 -4
- package/dist/mcp/auth/grants-cli.js +42 -3
- package/dist/mcp/auth/ownership.d.ts +7 -7
- package/dist/mcp/auth/resource-server.d.ts +3 -1
- package/dist/mcp/auth/resource-server.js +17 -2
- package/dist/mcp/auth/self-hosted/credentials.d.ts +3 -3
- package/dist/mcp/auth/self-hosted/session.d.ts +2 -2
- package/dist/mcp/context.d.ts +3 -0
- package/dist/mcp/host-events/github-ingress.d.ts +2 -0
- package/dist/mcp/host-events/github-ingress.js +2 -1
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.js +69 -10
- package/dist/mcp/server.d.ts +13 -0
- package/dist/mcp/server.js +33 -14
- package/dist/mcp/tools/agents.d.ts +4 -0
- package/dist/mcp/tools/agents.js +295 -28
- package/dist/mcp/tools/datastore.js +17 -8
- package/dist/mcp/tools/grants.js +73 -29
- package/dist/mcp/tools/host-providers.d.ts +2 -0
- package/dist/mcp/tools/host-providers.js +215 -0
- package/dist/mcp/tools/mcp-servers.d.ts +26 -0
- package/dist/mcp/tools/mcp-servers.js +481 -0
- package/dist/mcp/tools/memory.js +11 -1
- package/dist/mcp/tools/notification-channels.js +2 -2
- package/dist/mcp/tools/packages.d.ts +2 -0
- package/dist/mcp/tools/packages.js +195 -0
- package/dist/mcp/tools/repositories.js +65 -12
- package/dist/mcp/tools/run-access.d.ts +16 -0
- package/dist/mcp/tools/run-access.js +25 -0
- package/dist/mcp/tools/run-transcript-download.d.ts +30 -0
- package/dist/mcp/tools/run-transcript-download.js +129 -0
- package/dist/mcp/tools/run-transcript.d.ts +19 -0
- package/dist/mcp/tools/run-transcript.js +70 -0
- package/dist/mcp/tools/runs.js +209 -27
- package/dist/mcp/tools/scheduling.js +3 -1
- package/dist/mcp/tools/secret-elicitation-form.js +5 -0
- package/dist/mcp/tools/secret-elicitation-server.d.ts +6 -0
- package/dist/mcp/tools/secret-elicitation-server.js +10 -61
- package/dist/mcp/tools/secret-elicitation.d.ts +2 -0
- package/dist/mcp/tools/secret-elicitation.js +25 -2
- package/dist/mcp/tools/secrets.js +40 -6
- package/dist/mcp/tools/stop-run.d.ts +2 -0
- package/dist/mcp/tools/stop-run.js +82 -0
- package/dist/mcp/tools/subagents.js +2 -2
- package/dist/mcp/tools/tools.d.ts +7 -5
- package/dist/mcp/tools/tools.js +64 -16
- package/dist/mcp/tools/trigger.js +28 -6
- package/dist/mcp/transport/http-limits.d.ts +2 -0
- package/dist/mcp/transport/http-limits.js +6 -2
- package/dist/mcp/transport/stdio-link-host.d.ts +20 -0
- package/dist/mcp/transport/stdio-link-host.js +67 -0
- package/dist/mcp/transport/streamable-http.d.ts +13 -0
- package/dist/mcp/transport/streamable-http.js +41 -1
- package/dist/mcp/webhooks/ingress.js +10 -0
- package/dist/native-worker/docker-launcher.d.ts +38 -2
- package/dist/native-worker/docker-launcher.js +65 -5
- package/dist/native-worker/gateway-server.d.ts +55 -3
- package/dist/native-worker/gateway-server.js +152 -34
- package/dist/native-worker/gateway.d.ts +29 -1
- package/dist/native-worker/gateway.js +74 -4
- package/dist/native-worker/http-server.d.ts +7 -1
- package/dist/native-worker/http-server.js +62 -7
- package/dist/native-worker/http-transport.js +1 -1
- package/dist/native-worker/kubernetes-launcher.d.ts +7 -3
- package/dist/native-worker/kubernetes-launcher.js +43 -3
- package/dist/native-worker/launch.d.ts +18 -1
- package/dist/native-worker/launch.js +6 -1
- package/dist/native-worker/ledger.d.ts +24 -4
- package/dist/native-worker/ledger.js +62 -8
- package/dist/native-worker/loopback.js +3 -8
- package/dist/native-worker/main.d.ts +2 -1
- package/dist/native-worker/main.js +14 -3
- package/dist/native-worker/protocol.d.ts +130 -577
- package/dist/native-worker/protocol.js +51 -2
- package/dist/native-worker/sandbox-executor.d.ts +17 -2
- package/dist/native-worker/sandbox-executor.js +78 -4
- package/dist/native-worker/stderr-redaction.d.ts +77 -0
- package/dist/native-worker/stderr-redaction.js +237 -0
- package/dist/native-worker/stdio.d.ts +1 -1
- package/dist/native-worker/stdio.js +6 -5
- package/dist/native-worker/warm-pool.d.ts +2 -2
- package/dist/native-worker/warm-pool.js +4 -4
- package/dist/native-worker/worker.js +28 -2
- package/dist/observability/metrics.js +6 -1
- package/dist/providers/auth/self-hosted.d.ts +1 -1
- package/dist/providers/coding-proxy/capability-hash.d.ts +2 -0
- package/dist/providers/coding-proxy/capability-hash.js +5 -0
- package/dist/providers/coding-proxy/dependency-cache/eviction.d.ts +29 -0
- package/dist/providers/coding-proxy/dependency-cache/eviction.js +87 -0
- package/dist/providers/coding-proxy/dependency-cache/key.d.ts +33 -0
- package/dist/providers/coding-proxy/dependency-cache/key.js +86 -0
- package/dist/providers/coding-proxy/dependency-cache/model-request-seal.d.ts +18 -0
- package/dist/providers/coding-proxy/dependency-cache/model-request-seal.js +40 -0
- package/dist/providers/coding-proxy/dependency-cache/prisma-store.d.ts +25 -0
- package/dist/providers/coding-proxy/dependency-cache/prisma-store.js +131 -0
- package/dist/providers/coding-proxy/dependency-cache/service.d.ts +70 -0
- package/dist/providers/coding-proxy/dependency-cache/service.js +409 -0
- package/dist/providers/coding-proxy/dependency-cache/store.d.ts +85 -0
- package/dist/providers/coding-proxy/dependency-cache/store.js +95 -0
- package/dist/providers/coding-proxy/hold.d.ts +32 -0
- package/dist/providers/coding-proxy/hold.js +86 -0
- package/dist/providers/coding-proxy/interrupted.d.ts +70 -0
- package/dist/providers/coding-proxy/interrupted.js +104 -0
- package/dist/providers/coding-proxy/mcp-route.d.ts +34 -0
- package/dist/providers/coding-proxy/mcp-route.js +166 -0
- package/dist/providers/coding-proxy/memory-ledger.d.ts +17 -2
- package/dist/providers/coding-proxy/memory-ledger.js +99 -8
- package/dist/providers/coding-proxy/metering.d.ts +16 -0
- package/dist/providers/coding-proxy/metering.js +27 -4
- package/dist/providers/coding-proxy/prisma-ledger.d.ts +16 -2
- package/dist/providers/coding-proxy/prisma-ledger.js +209 -69
- package/dist/providers/coding-proxy/proxy.d.ts +21 -2
- package/dist/providers/coding-proxy/proxy.js +300 -48
- package/dist/providers/coding-proxy/registry/audit.d.ts +53 -10
- package/dist/providers/coding-proxy/registry/audit.js +94 -17
- package/dist/providers/coding-proxy/registry/lockfile-parse-worker.d.ts +36 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse-worker.js +67 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse.d.ts +16 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse.js +110 -0
- package/dist/providers/coding-proxy/registry/plan.d.ts +9 -0
- package/dist/providers/coding-proxy/registry/plan.js +201 -48
- package/dist/providers/coding-proxy/registry/prisma-store.d.ts +11 -5
- package/dist/providers/coding-proxy/registry/prisma-store.js +120 -17
- package/dist/providers/coding-proxy/registry/service.d.ts +97 -16
- package/dist/providers/coding-proxy/registry/service.js +579 -112
- package/dist/providers/coding-proxy/registry/store.d.ts +84 -9
- package/dist/providers/coding-proxy/registry/store.js +54 -1
- package/dist/providers/coding-proxy/runtime.d.ts +10 -0
- package/dist/providers/coding-proxy/runtime.js +109 -16
- package/dist/providers/coding-proxy/server.d.ts +9 -1
- package/dist/providers/coding-proxy/server.js +55 -1
- package/dist/providers/coding-proxy/types.d.ts +78 -1
- package/dist/providers/datastore/types.d.ts +5 -0
- package/dist/providers/engine/types.d.ts +17 -2
- package/dist/providers/engine/types.js +17 -0
- package/dist/providers/executor/composition.d.ts +10 -3
- package/dist/providers/executor/composition.js +52 -7
- package/dist/providers/executor/container.d.ts +394 -9
- package/dist/providers/executor/container.js +1210 -96
- package/dist/providers/executor/dbos-status.d.ts +31 -0
- package/dist/providers/executor/dbos-status.js +64 -0
- package/dist/providers/executor/dbos.d.ts +50 -1
- package/dist/providers/executor/dbos.js +207 -20
- package/dist/providers/executor/deferred.d.ts +12 -24
- package/dist/providers/executor/deferred.js +10 -29
- package/dist/providers/executor/in-process.d.ts +9 -1
- package/dist/providers/executor/in-process.js +14 -4
- package/dist/providers/executor/linked-issue-reader.d.ts +16 -0
- package/dist/providers/executor/linked-issue-reader.js +30 -0
- package/dist/providers/executor/routing.d.ts +2 -0
- package/dist/providers/executor/routing.js +4 -0
- package/dist/providers/executor/types.d.ts +13 -0
- package/dist/providers/host-tools/invoke.d.ts +37 -0
- package/dist/providers/host-tools/invoke.js +117 -0
- package/dist/providers/host-tools/operations.d.ts +65 -0
- package/dist/providers/host-tools/operations.js +149 -0
- package/dist/providers/host-tools/registry.d.ts +79 -0
- package/dist/providers/host-tools/registry.js +362 -0
- package/dist/providers/host-tools/request-guard.d.ts +17 -0
- package/dist/providers/host-tools/request-guard.js +99 -0
- package/dist/providers/host-tools/self-test.d.ts +64 -0
- package/dist/providers/host-tools/self-test.js +142 -0
- package/dist/providers/index.d.ts +2 -1
- package/dist/providers/issue-tracker/types.d.ts +17 -0
- package/dist/providers/issue-tracker/types.js +39 -1
- package/dist/providers/jobs/claude-tool-setup.d.ts +4 -0
- package/dist/providers/jobs/claude-tool-setup.js +5 -2
- package/dist/providers/jobs/docker-isolation.d.ts +10 -2
- package/dist/providers/jobs/docker-isolation.js +47 -8
- package/dist/providers/jobs/docker.d.ts +9 -0
- package/dist/providers/jobs/docker.js +60 -11
- package/dist/providers/jobs/fake-kubernetes-api.d.ts +2 -0
- package/dist/providers/jobs/fake-kubernetes-api.js +3 -0
- package/dist/providers/jobs/kubernetes-api.d.ts +8 -0
- package/dist/providers/jobs/kubernetes-api.js +10 -0
- package/dist/providers/jobs/kubernetes-client.js +10 -1
- package/dist/providers/jobs/kubernetes-isolation.d.ts +5 -1
- package/dist/providers/jobs/kubernetes-isolation.js +32 -3
- package/dist/providers/jobs/kubernetes.d.ts +11 -1
- package/dist/providers/jobs/kubernetes.js +111 -17
- package/dist/providers/jobs/types.d.ts +39 -0
- package/dist/providers/jobs/types.js +13 -1
- package/dist/providers/llm/anthropic.js +5 -1
- package/dist/providers/llm/bedrock.d.ts +0 -12
- package/dist/providers/llm/bedrock.js +4 -0
- package/dist/providers/llm/claude-messages.d.ts +3 -1
- package/dist/providers/llm/claude-messages.js +4 -1
- package/dist/providers/llm/claude-provider.d.ts +2 -2
- package/dist/providers/llm/claude-provider.js +2 -2
- package/dist/providers/llm/openai.d.ts +2 -2
- package/dist/providers/llm/openai.js +6 -2
- package/dist/providers/llm/routing.d.ts +2 -2
- package/dist/providers/llm/routing.js +2 -2
- package/dist/providers/llm/types.d.ts +12 -2
- package/dist/providers/review-host/github-events.d.ts +9 -1
- package/dist/providers/review-host/github-events.js +34 -12
- package/dist/providers/review-host/github.d.ts +29 -2
- package/dist/providers/review-host/github.js +224 -29
- package/dist/providers/review-host/local.d.ts +8 -4
- package/dist/providers/review-host/local.js +49 -31
- package/dist/providers/review-host/patch-pages.d.ts +41 -0
- package/dist/providers/review-host/patch-pages.js +176 -0
- package/dist/providers/review-host/review-format.d.ts +19 -1
- package/dist/providers/review-host/review-format.js +38 -7
- package/dist/providers/review-host/types.d.ts +140 -6
- package/dist/providers/review-host/types.js +9 -1
- package/dist/providers/storage/gcs.d.ts +63 -0
- package/dist/providers/storage/gcs.js +69 -0
- package/dist/providers/storage/index.d.ts +15 -0
- package/dist/providers/storage/index.js +14 -0
- package/dist/providers/storage/local.d.ts +24 -0
- package/dist/providers/storage/local.js +92 -0
- package/dist/providers/storage/meter.d.ts +14 -0
- package/dist/providers/storage/meter.js +34 -0
- package/dist/providers/storage/s3.d.ts +41 -0
- package/dist/providers/storage/s3.js +107 -0
- package/dist/providers/storage/types.d.ts +37 -3
- package/dist/providers/storage/types.js +21 -4
- package/dist/providers/vcs/git.d.ts +39 -4
- package/dist/providers/vcs/git.js +339 -26
- package/dist/providers/vcs/github-remote.d.ts +26 -3
- package/dist/providers/vcs/github-remote.js +124 -14
- package/dist/providers/vcs/github.d.ts +183 -44
- package/dist/providers/vcs/github.js +455 -56
- package/dist/providers/vcs/index.d.ts +1 -1
- package/dist/providers/vcs/index.js +9 -2
- package/dist/providers/vcs/pr-description.d.ts +127 -0
- package/dist/providers/vcs/pr-description.js +270 -0
- package/dist/providers/vcs/remote.d.ts +37 -1
- package/dist/providers/vcs/remote.js +7 -1
- package/dist/providers/vcs/routing.d.ts +16 -8
- package/dist/providers/vcs/routing.js +27 -6
- package/dist/providers/vcs/types.d.ts +150 -5
- package/dist/quickstart/coding-seed.d.ts +14 -3
- package/dist/quickstart/coding-seed.js +213 -4
- package/dist/quickstart/index.d.ts +5 -0
- package/dist/quickstart/index.js +21 -0
- package/dist/quickstart/reviewer-prompt.d.ts +1 -1
- package/dist/quickstart/reviewer-prompt.js +6 -6
- package/dist/quickstart-images.json +1 -1
- package/dist/sandbox/eval-core.d.ts +12 -2
- package/dist/sandbox/eval-core.js +20 -4
- package/dist/sandbox/generated/zod.bundle.js +62 -1
- package/dist/sandbox/generated/zod3.bundle.js +5 -0
- package/dist/sandbox/host-functions.d.ts +5 -0
- package/dist/sandbox/host-functions.js +13 -13
- package/dist/sandbox/limits.d.ts +4 -1
- package/dist/sandbox/limits.js +4 -1
- package/dist/sandbox/run-in-sandbox.d.ts +6 -0
- package/dist/sandbox/run-in-sandbox.js +14 -2
- package/dist/sandbox/safe-fetch.d.ts +2 -0
- package/dist/sandbox/safe-fetch.js +1 -1
- package/dist/sandbox/secret-broker.d.ts +1 -0
- package/dist/sandbox/secret-broker.js +4 -5
- package/dist/sandbox/tool-capabilities.d.ts +10 -30
- package/dist/sandbox/tool-timeout.d.ts +32 -0
- package/dist/sandbox/tool-timeout.js +52 -0
- package/dist/sandbox/user-tool.d.ts +8 -1
- package/dist/sandbox/user-tool.js +9 -3
- package/dist/sandbox/zod-params.d.ts +37 -5
- package/dist/sandbox/zod-params.js +181 -26
- package/dist/serve.js +8 -1
- package/dist/viewer/api-schema.d.ts +349 -2627
- package/dist/viewer/api-schema.js +7 -0
- package/dist/viewer/build-schemas.js +6 -2
- package/dist/viewer/graph.js +2 -1
- package/dist/viewer/openapi.js +2 -4
- package/dist/wardby-bin.js +15 -0
- package/docs/README.md +11 -1
- package/docs/agent-recipes.md +95 -24
- package/docs/architecture-runtime.md +1 -1
- package/docs/claude-code-plugin.md +164 -0
- package/docs/code-review-agents.md +557 -41
- package/docs/coding-agent-setup.md +566 -8
- package/docs/coding-packages.md +1033 -90
- package/docs/coding-services.md +27 -12
- package/docs/coding-worker-byo-images.md +24 -2
- package/docs/coding-worker-isolation.md +183 -37
- package/docs/debugging-agent-runs.md +242 -0
- package/docs/getting-started-gke.md +129 -141
- package/docs/getting-started-identity-provider.md +53 -38
- package/docs/getting-started.md +17 -0
- package/docs/host-providers.md +294 -0
- package/docs/jira-agents.md +17 -8
- package/docs/knowledge/blob-not-found-semantics.md +41 -0
- package/docs/knowledge/bounded-file-descriptor.md +52 -0
- package/docs/knowledge/delegation-admission-slots.md +52 -0
- package/docs/knowledge/http-dispatcher-bootstrap.md +61 -0
- package/docs/knowledge/import-rename-target.md +52 -0
- package/docs/knowledge/index.md +57 -0
- package/docs/knowledge/log.md +9 -0
- package/docs/knowledge/mcp-cancelled-task-precedence.md +41 -0
- package/docs/knowledge/mcp-http-prompt-discovery.md +41 -0
- package/docs/knowledge/mcp-schema-module-boundary.md +41 -0
- package/docs/knowledge/nullable-tool-uniqueness.md +52 -0
- package/docs/knowledge/overview-cli.md +74 -0
- package/docs/knowledge/overview-coding-proxy.md +72 -0
- package/docs/knowledge/overview-coding.md +72 -0
- package/docs/knowledge/overview-config.md +60 -0
- package/docs/knowledge/overview-core.md +72 -0
- package/docs/knowledge/overview-deploy.md +83 -0
- package/docs/knowledge/overview-mcp.md +61 -0
- package/docs/knowledge/overview-prisma.md +72 -0
- package/docs/knowledge/overview-providers.md +89 -0
- package/docs/knowledge/overview-sandbox.md +83 -0
- package/docs/knowledge/overview-surfaces.md +83 -0
- package/docs/knowledge/private-datastore-shared-boundary.md +54 -0
- package/docs/knowledge/proxy-settlement-projections.md +41 -0
- package/docs/knowledge/run-pricing-first-writer.md +43 -0
- package/docs/knowledge/schedule-claim-transaction.md +41 -0
- package/docs/knowledge/secret-entry-replica-contract.md +52 -0
- package/docs/knowledge/terminal-run-first-writer.md +41 -0
- package/docs/knowledge/transactional-agent-authorization.md +52 -0
- package/docs/knowledge/viewer-notify-write-isolation.md +30 -0
- package/docs/knowledge/warm-input-publication.md +30 -0
- package/docs/knowledge/workspace-staging-failure.md +54 -0
- package/docs/knowledge.md +54 -14
- package/docs/mcp-servers.md +254 -0
- package/docs/native-sandbox.md +143 -31
- package/docs/observability.md +4 -0
- package/docs/security-deployment.md +139 -29
- package/docs/slack-notifications.md +35 -19
- package/docs/tool-secrets.md +45 -10
- package/docs/viewer-api.md +6 -0
- package/docs/viewer-api.openapi.yml +1 -1
- package/help/admin-viewer.md +28 -2
- package/help/agent-recipes.md +33 -2
- package/help/architecture-agent.md +11 -6
- package/help/brokered-secrets.md +3 -0
- package/help/build-claude-code-image.md +1 -1
- package/help/build-worker-image.md +3 -1
- package/help/builder-agent.md +19 -6
- package/help/claude-code-run-pane.md +40 -0
- package/help/code-review-agents.md +177 -6
- package/help/coding-packages.md +156 -6
- package/help/cost-attribution.md +9 -5
- package/help/creating-agents.md +14 -1
- package/help/dependency-cache.md +143 -0
- package/help/deploy-gke.md +15 -8
- package/help/errors/budget-exhausted.md +187 -0
- package/help/errors/budget-group-exhausted.md +5 -1
- package/help/errors/coding-mcp-pins-unavailable.md +35 -0
- package/help/errors/coding-stream-quota-exceeded.md +33 -0
- package/help/errors/coding-workspace-disk-exceeds-limit.md +39 -0
- package/help/errors/continuation-closed.md +9 -12
- package/help/errors/database-auth-invalid.md +1 -1
- package/help/errors/delegation-conflict.md +24 -0
- package/help/errors/file-list-truncated.md +45 -0
- package/help/errors/full-read-required.md +49 -0
- package/help/errors/github-account-not-allowed.md +4 -0
- package/help/errors/graph-incomplete.md +43 -0
- package/help/errors/graph-limit.md +43 -0
- package/help/errors/host-provider-error.md +40 -0
- package/help/errors/host-tool-failed.md +36 -0
- package/help/errors/mcp-call-limit.md +22 -0
- package/help/errors/mcp-call-timeout.md +22 -0
- package/help/errors/mcp-server-auth-failed.md +22 -0
- package/help/errors/mcp-server-credentials-unavailable.md +45 -0
- package/help/errors/mcp-server-error.md +28 -0
- package/help/errors/mcp-server-unreachable.md +22 -0
- package/help/errors/mcp-servers-off.md +21 -0
- package/help/errors/mcp-tool-not-allowed.md +26 -0
- package/help/errors/mcp-tool-removed.md +22 -0
- package/help/errors/mcp-unavailable.md +25 -0
- package/help/errors/merge-conflict.md +49 -0
- package/help/errors/native-sandbox-capacity.md +1 -1
- package/help/errors/native-sandbox-deadline-exceeded.md +1 -1
- package/help/errors/native-sandbox-docker-failed.md +1 -1
- package/help/errors/native-sandbox-gateway-error.md +20 -0
- package/help/errors/native-sandbox-gateway-unavailable.md +1 -1
- package/help/errors/native-sandbox-image-not-pinned.md +1 -1
- package/help/errors/native-sandbox-isolation-mismatch.md +1 -1
- package/help/errors/native-sandbox-launch-abandoned.md +21 -0
- package/help/errors/native-sandbox-network-unenforced.md +1 -1
- package/help/errors/native-sandbox-requires-catalog.md +1 -1
- package/help/errors/native-sandbox-unavailable.md +1 -1
- package/help/errors/native-sandbox-warm-delivery-failed.md +1 -1
- package/help/errors/native-sandbox-worker-exited.md +4 -3
- package/help/errors/native-sandbox-worker-lost.md +1 -1
- package/help/errors/native-sandbox-worker-unready.md +1 -1
- package/help/errors/package-not-allowed-pending.md +52 -0
- package/help/errors/package-not-allowed.md +51 -0
- package/help/errors/package-refusals.md +43 -0
- package/help/errors/patch-cursor-malformed.md +31 -0
- package/help/errors/repository-not-listed.md +36 -0
- package/help/errors/repository-required.md +36 -0
- package/help/errors/run-lost.md +39 -0
- package/help/errors/run-transcript-download.md +44 -0
- package/help/errors/secret-in-value.md +69 -0
- package/help/errors/target-merge.md +40 -0
- package/help/errors/tool-timeout.md +38 -0
- package/help/fix-merge-conflicts.md +73 -0
- package/help/github-app-setup.md +132 -0
- package/help/github.md +22 -0
- package/help/host-providers.md +40 -0
- package/help/identity-and-access.md +6 -1
- package/help/jira.md +23 -6
- package/help/knowledge.md +16 -7
- package/help/local-repositories.md +1 -1
- package/help/low-power-mode.md +7 -1
- package/help/mcp-servers.md +73 -0
- package/help/mcp.md +7 -2
- package/help/merge-order-check.md +5 -0
- package/help/native-capabilities.md +55 -1
- package/help/native-sandbox.md +16 -2
- package/help/operating-agents.md +21 -0
- package/help/package-audit-mode.md +91 -0
- package/help/related-pull-requests.md +17 -10
- package/help/repo-instructions-and-skills.md +3 -1
- package/help/resume-runs-locally.md +134 -0
- package/help/review-fix-rounds.md +33 -1
- package/help/sharing-agents.md +59 -0
- package/help/slack-notifications.md +19 -5
- package/help/status-comments.md +31 -0
- package/help/stop-run.md +58 -0
- package/help/troubleshooting/budgets.md +28 -0
- package/help/troubleshooting/coding-workers.md +86 -7
- package/help/troubleshooting/debugging-agent-runs.md +29 -0
- package/package.json +18 -10
- package/prisma/migrations/20261016000000_registry_approved_accepted_advisories/migration.sql +3 -0
- package/prisma/migrations/20261016000001_mark_ready_when_passing/migration.sql +3 -0
- package/prisma/migrations/20261017000000_debug_trace_max_mb/migration.sql +4 -0
- package/prisma/migrations/20261018000000_dependency_cache/migration.sql +53 -0
- package/prisma/migrations/20261019000000_claude_max_output_tokens/migration.sql +5 -0
- package/prisma/migrations/20261021000000_pr_description_hash/migration.sql +4 -0
- package/prisma/migrations/20261022000000_dependency_snapshot_validation_metadata/migration.sql +4 -0
- package/prisma/migrations/20261023000000_package_audit_mode/migration.sql +27 -0
- package/prisma/migrations/20261024000000_budget_events/migration.sql +26 -0
- package/prisma/migrations/20261025000000_cache_aware_holds/migration.sql +9 -0
- package/prisma/migrations/20261026000000_budget_overrun/migration.sql +4 -0
- package/prisma/migrations/20261027000000_coding_run_request/migration.sql +1 -0
- package/prisma/migrations/20261028000000_native_gateway_review_reads/migration.sql +6 -0
- package/prisma/migrations/20261029000000_lead_survives_deploy/migration.sql +6 -0
- package/prisma/migrations/20261030000000_local_review_covered_sha/migration.sql +2 -0
- package/prisma/migrations/20261031000000_coding_run_budget_limit/migration.sql +9 -0
- package/prisma/migrations/20261101000000_run_transcripts/migration.sql +22 -0
- package/prisma/migrations/20261102000000_host_providers/migration.sql +56 -0
- package/prisma/migrations/20261104000000_coding_agent_repository_list/migration.sql +5 -0
- package/prisma/migrations/20261106000000_tool_timeout/migration.sql +4 -0
- package/prisma/migrations/20261107000000_mcp_servers/migration.sql +33 -0
- package/prisma/migrations/20261108000000_coding_mcp/migration.sql +5 -0
- package/prisma/migrations/20261109000000_task_run_index/migration.sql +3 -0
- package/prisma/schema.prisma +468 -109
- package/scripts/git-askpass.sh +1 -1
- package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
|
@@ -79,15 +79,16 @@ 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`, `models:admin` and `
|
|
85
|
-
| `package-approver` | `packages:approve`
|
|
86
|
-
| `service-manager` | `services:manage`
|
|
87
|
-
| `model-manager` | `models:admin`
|
|
88
|
-
|
|
|
82
|
+
| Role | Grants |
|
|
83
|
+
| ------------------ | --------------------------------------------------------------------------------------------------------------------- |
|
|
84
|
+
| `admin` | `agents:admin`, `packages:approve`, `services:manage`, `admin:view`, `models:admin`, `power:manage` and `hosts:admin` |
|
|
85
|
+
| `package-approver` | `packages:approve` |
|
|
86
|
+
| `service-manager` | `services:manage` |
|
|
87
|
+
| `model-manager` | `models:admin` |
|
|
88
|
+
| `host-manager` | `hosts:admin` |
|
|
89
|
+
| (none) | nothing privileged; every other scope works as the token allows |
|
|
89
90
|
|
|
90
|
-
|
|
91
|
+
Nine kinds of operation are privileged:
|
|
91
92
|
|
|
92
93
|
- `make_owner`, which reassigns any agent's owner, including another
|
|
93
94
|
principal's private agent (see [Sharing agents](#sharing-agents) for what
|
|
@@ -107,7 +108,15 @@ Eight operations are privileged:
|
|
|
107
108
|
[viewer-api.md](viewer-api.md));
|
|
108
109
|
- reading low-power state and scaling the coding proxy and native gateway to
|
|
109
110
|
zero now (`power_status`, `power_sleep`; see
|
|
110
|
-
[Low-power mode](getting-started-gke.md#low-power-mode))
|
|
111
|
+
[Low-power mode](getting-started-gke.md#low-power-mode));
|
|
112
|
+
- registering, approving, testing and deleting host providers
|
|
113
|
+
(`register_host_provider`, `approve_host_provider_tools`,
|
|
114
|
+
`test_host_provider`, `delete_host_provider`; reading one with
|
|
115
|
+
`get_host_provider` needs the same permission). Approved tools run on the
|
|
116
|
+
control plane with the provider's credentials, so grant `hosts:admin` like
|
|
117
|
+
`agents:admin`. Any host manager can read and re-register any provider,
|
|
118
|
+
including its tool code, whoever owns the tools; see
|
|
119
|
+
[host-providers.md](host-providers.md).
|
|
111
120
|
|
|
112
121
|
Each needs **both** its scope on the token **and** a role that grants that
|
|
113
122
|
permission:
|
|
@@ -119,13 +128,16 @@ permission:
|
|
|
119
128
|
- The admin viewer API needs `admin:view`, which only the `admin` role grants.
|
|
120
129
|
- `power_status` and `power_sleep` need `power:manage`, which only the `admin`
|
|
121
130
|
role grants.
|
|
131
|
+
- Host provider tools need `hosts:admin`, which the `admin` and `host-manager`
|
|
132
|
+
roles grant.
|
|
122
133
|
|
|
123
134
|
In practice:
|
|
124
135
|
|
|
125
|
-
- an `admin` can do all
|
|
136
|
+
- an `admin` can do all of them;
|
|
126
137
|
- a `package-approver` can approve packages only;
|
|
127
138
|
- a `service-manager` can change the service catalog only;
|
|
128
139
|
- a `model-manager` can change the model catalog only;
|
|
140
|
+
- a `host-manager` can manage host providers only;
|
|
129
141
|
- a member can do none of them.
|
|
130
142
|
|
|
131
143
|
Callers who fail the check get `403`:
|
|
@@ -266,8 +278,17 @@ so a tool a write-grantee attaches runs with none until you re-run
|
|
|
266
278
|
the coding profile, kind and budget group; and sub-agents, since an edge
|
|
267
279
|
would hand every run's data to another agent.
|
|
268
280
|
|
|
269
|
-
**Everyone** can be granted
|
|
270
|
-
anyone
|
|
281
|
+
**Everyone** (any signed-in principal) can be granted up to `write`, a
|
|
282
|
+
public agent anyone can list, run and edit, but only while the agent holds
|
|
283
|
+
none of its owner's bindings: secrets, datastores, repositories, sub-agents,
|
|
284
|
+
tool capabilities, or a coding repository (so a coding agent is never
|
|
285
|
+
public-write). `grant_access` refuses everyone-`write` on an agent that has
|
|
286
|
+
any, and the binding tools (`attach_secret`, `attach_datastore`,
|
|
287
|
+
`link_repository` including an admin's `adminOverride`, `attach_subagent`,
|
|
288
|
+
and `attach_tool` with capabilities) refuse to add one to an agent everyone
|
|
289
|
+
can write, as `update_agent` refuses making it a coding agent. Otherwise anyone could
|
|
290
|
+
rewrite the prompt of an agent that uses your secrets. Detach the bindings
|
|
291
|
+
first, or grant everyone `execute` instead.
|
|
271
292
|
|
|
272
293
|
**Nothing crosses owners without a grant on that exact resource**, checked
|
|
273
294
|
when bindings are written and again at run time, so rows written before this
|
|
@@ -303,7 +324,7 @@ someone else's agent (it can adopt the agent first). An HTTP user whose
|
|
|
303
324
|
subject equals `LOCAL_PRINCIPAL` is not the operator. **Admins** get no
|
|
304
325
|
implicit access to others' agents: they can `list_access` any agent (incident
|
|
305
326
|
response) and reassign one with `make_owner`, which removes bindings the new
|
|
306
|
-
owner doesn't own, suspends tool capabilities the new owner never granted,
|
|
327
|
+
owner doesn't own (secrets, datastores and MCP server attachments), suspends tool capabilities the new owner never granted,
|
|
307
328
|
cuts sub-agent edges the new owner can't delegate, and, between two owners,
|
|
308
329
|
resets every grant. Adopting an owner-less agent keeps its grants but lowers
|
|
309
330
|
an everyone grant to `read` unless `keepEveryoneExecute` is set.
|
|
@@ -338,7 +359,7 @@ without their tools' capabilities. Operator runbook:
|
|
|
338
359
|
printed for review, with the `attach_tool` call that re-grants any
|
|
339
360
|
capabilities it had. The subject must already exist.
|
|
340
361
|
4. `wardby grants prune-bindings` removes, and prints, every remaining
|
|
341
|
-
binding of one owner's secret or
|
|
362
|
+
binding of one owner's secret, datastore or MCP server to another owner's agent
|
|
342
363
|
(already inert).
|
|
343
364
|
5. `wardby grants migration-report > after.txt`.
|
|
344
365
|
|
|
@@ -371,6 +392,15 @@ Trust assumptions:
|
|
|
371
392
|
owner enabled `allowWebhookTaskOverride`; the owner controls the tools,
|
|
372
393
|
secrets and repository. A repository is a binding: only the owner (or an
|
|
373
394
|
admin's explicit approval) sets it, never a `write`-grantee.
|
|
395
|
+
- **A task can steer a coding agent to any repository on its list.** A caller
|
|
396
|
+
who may pass `repository` (for `trigger_agent`, the owner, or anyone when
|
|
397
|
+
`allowWebhookTaskOverride` is on; for a webhook, whoever created it, and only
|
|
398
|
+
when `allowWebhookTaskOverride` is on), and a lead that delegates to the
|
|
399
|
+
agent, can pick any listed repository, and the agent's one toolchain,
|
|
400
|
+
services and package allowlist apply to all of them. Keep the list small, and keep
|
|
401
|
+
repositories with different trust levels on separate agents. Refusals never
|
|
402
|
+
repeat the requested value, and a lead sees a sub-agent's list only when it
|
|
403
|
+
has the same owner or may choose (execute access and the opt-in).
|
|
374
404
|
- **Owner-less agents never hold a repository**, even admin-approved: there is
|
|
375
405
|
no owner whose GitHub access can be checked. Assign an owner first.
|
|
376
406
|
- **Checked where it's used.** Every coding run (before its workspace is
|
|
@@ -513,20 +543,22 @@ records. Delete them (see pruning above) if you want the rollback to be final.
|
|
|
513
543
|
|
|
514
544
|
## Resource and networking limits
|
|
515
545
|
|
|
516
|
-
| Surface | Limit
|
|
517
|
-
| ------------------------------ |
|
|
518
|
-
| MCP/webhook bodies | 1 MiB raw bytes
|
|
519
|
-
|
|
|
520
|
-
|
|
|
521
|
-
|
|
|
522
|
-
|
|
|
523
|
-
|
|
|
524
|
-
|
|
|
525
|
-
|
|
|
526
|
-
|
|
|
527
|
-
|
|
|
528
|
-
|
|
|
529
|
-
|
|
|
546
|
+
| Surface | Limit |
|
|
547
|
+
| ------------------------------ | ------------------------------------------------ |
|
|
548
|
+
| MCP/webhook bodies | 1 MiB raw bytes |
|
|
549
|
+
| MCP tool-call arguments | 100,000 array elements and object members |
|
|
550
|
+
| Auth bodies | 64 KiB raw bytes |
|
|
551
|
+
| Request completion / headers | 15 seconds / 10 seconds |
|
|
552
|
+
| Sandbox invocation | 32 MiB heap, 1 MiB stack, 10 seconds (see below) |
|
|
553
|
+
| Sandbox fetch | 8 MiB encoded and decoded, 5 redirects |
|
|
554
|
+
| Bridge input / output | 1 MiB / 12 MiB |
|
|
555
|
+
| Parser input / console payload | 256 KiB / 16 KiB |
|
|
556
|
+
| HTML links extracted | 1000, with incremental result-byte accounting |
|
|
557
|
+
| Random bytes | 65,536 bytes |
|
|
558
|
+
| Host calls | 256 per invocation, at most 8 pending |
|
|
559
|
+
| Datastore value / keys listed | 1 MiB / 1000 |
|
|
560
|
+
| Datastore key / secret name | 1024 bytes |
|
|
561
|
+
| New secret plaintext | 64 KiB |
|
|
530
562
|
|
|
531
563
|
Oversized or malformed input fails explicitly. Existing oversized datastore
|
|
532
564
|
values/keys and secret ciphertext fail instead of entering Node allocations.
|
|
@@ -535,6 +567,27 @@ and pins the validated DNS result to the connection while retaining Host and
|
|
|
535
567
|
TLS verification. Cross-origin redirects remove credentials, including custom
|
|
536
568
|
API-key headers; forwarding a request body across origins is rejected.
|
|
537
569
|
|
|
570
|
+
Every sandbox invocation, including the one that validates a custom tool's
|
|
571
|
+
call arguments against its `paramsZod`, runs in a fresh QuickJS runtime with the
|
|
572
|
+
heap, stack, and time limits above. One that hits a limit fails that tool call
|
|
573
|
+
only: the model receives a `validation_failed` or sandbox error result and the
|
|
574
|
+
run continues. The invocation runs on the thread of the process that hosts the
|
|
575
|
+
run (the server, or the run's worker with the native sandbox). Code that keeps
|
|
576
|
+
the thread busy is also stopped by the instruction budget, so a long time limit
|
|
577
|
+
mostly lets a call wait on slow requests.
|
|
578
|
+
|
|
579
|
+
For this release only, a custom tool's `paramsZod` is compiled with Zod 4's
|
|
580
|
+
built-in Zod 3 API (`zod/v3`) so that existing tools keep working; see
|
|
581
|
+
[native capabilities](../help/native-capabilities.md). `zod/v3` does not have
|
|
582
|
+
the fix for GHSA-mrhx-c7xc-m3w5: given an array, set, or map larger than its
|
|
583
|
+
`.max()`, it still checks every element and records an issue for each bad one.
|
|
584
|
+
For a tool's arguments that work stays inside the sandbox limits above, the same
|
|
585
|
+
limits that bound the tool's own code. Wardby's own validation uses Zod 4. A
|
|
586
|
+
tool whose schema the next release (Zod 4 only) would reject is flagged with a
|
|
587
|
+
`warnings` list in `create_tool`, `update_tool`, `dry_run_tool`, `list_tools`
|
|
588
|
+
and `get_agent` results (on tools the caller owns) and in one server log line
|
|
589
|
+
per tool at startup; a warning names only the tool and the removed Zod 3 methods.
|
|
590
|
+
|
|
538
591
|
Every resolved address must be global. A tool's own `allowedHosts` only
|
|
539
592
|
narrows egress; it never opens a private, loopback or link-local destination.
|
|
540
593
|
Only the operator's `WARDBY_FETCH_ALLOWED_HOSTS` (exact normalized hosts) can,
|
|
@@ -547,7 +600,7 @@ The network layer cannot back this up for the control plane on GKE, because
|
|
|
547
600
|
Workload Identity needs the metadata server.
|
|
548
601
|
Sandbox code can explicitly log secrets it has been given; log size limits do
|
|
549
602
|
not provide automatic redaction. Keep tool-authoring privileges restricted.
|
|
550
|
-
Public/non-owner tool listings expose only id/name/description; owners retain
|
|
603
|
+
Public/non-owner tool listings expose only id/name/description/timeoutMs; owners retain
|
|
551
604
|
their source and schema. Private agents are indistinguishable from missing IDs.
|
|
552
605
|
|
|
553
606
|
Cancellation stops bridge delivery, sleep timers, and in-flight network work.
|
|
@@ -560,6 +613,57 @@ bound connection pools and concurrent invocations, and review a cancellable
|
|
|
560
613
|
database adapter or isolated worker if strict immediate termination is required.
|
|
561
614
|
Do not claim these per-invocation caps establish a whole-process memory ceiling.
|
|
562
615
|
|
|
616
|
+
### Tool time limits
|
|
617
|
+
|
|
618
|
+
A tool call has 10 seconds unless the tool sets its own `timeoutMs`
|
|
619
|
+
(`create_tool`, `update_tool`, `dry_run_tool`, `wardby tool create|update
|
|
620
|
+
--timeout-ms`, or `timeoutMs` in a bundle's `config/tools.json`). The limit
|
|
621
|
+
covers the whole call: each `fetch` may run until it, and a timer can't be set
|
|
622
|
+
for longer. A call never outlasts its run: stopping the run aborts it, and a
|
|
623
|
+
sandboxed run's deadline cuts it off.
|
|
624
|
+
|
|
625
|
+
| Variable | Default | Meaning |
|
|
626
|
+
| ---------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
627
|
+
| `WARDBY_TOOL_MAX_TIMEOUT_MS` | `300000` | The longest `timeoutMs` a tool may set, in milliseconds (at least `10000`). A larger value is refused when the tool is saved. A run uses the lower of the tool's `timeoutMs` and this value, so lowering it also covers existing tools. |
|
|
628
|
+
|
|
629
|
+
Set it on every process that runs tools or serves the native sandbox gateway:
|
|
630
|
+
`wardby serve`, `wardby scheduler` and the gateway. An invalid value stops
|
|
631
|
+
start-up. On the native sandbox the gateway gives each of a tool's host calls
|
|
632
|
+
its limit plus 20 seconds, never past the run's deadline. A long limit lets one
|
|
633
|
+
call hold its run (and a sandboxed run's worker) for longer, so raise the
|
|
634
|
+
ceiling only as far as your tools need.
|
|
635
|
+
|
|
636
|
+
**Upgrading:** the release adds the nullable `Tool.timeoutMs` and
|
|
637
|
+
`HostProviderOperation.timeoutMs` columns; apply the migration with
|
|
638
|
+
`prisma migrate deploy` as with any upgrade. A sandboxed run passes a tool's
|
|
639
|
+
`timeoutMs` to its worker, so update the native worker image together with the
|
|
640
|
+
server: an older image refuses the run of an agent that has a tool with
|
|
641
|
+
`timeoutMs`. Tools without `timeoutMs` run on either image.
|
|
642
|
+
|
|
643
|
+
### Remote MCP servers
|
|
644
|
+
|
|
645
|
+
Owners can register a remote MCP server (Streamable HTTP, HTTPS only) and attach
|
|
646
|
+
an allowlisted subset of its tools to a native agent, which then calls them
|
|
647
|
+
through Wardby's control plane. `WARDBY_MCP_SERVERS` decides who may register
|
|
648
|
+
servers: `owners` (the default), `admins` (only `hosts:admin` holders), or `off`
|
|
649
|
+
to disable the feature. An agent can use a server only while its owner owns it or
|
|
650
|
+
holds `use` on it through a grant; revoking or lowering that grant detaches it. Secret values for a server are never sent to the model,
|
|
651
|
+
stored in run records, or returned by Wardby's MCP tools. See [Remote MCP servers](mcp-servers.md) for the
|
|
652
|
+
full guide.
|
|
653
|
+
|
|
654
|
+
Claude Code and Codex agents can use attached servers too. Their workers reach
|
|
655
|
+
the tools only through the coding proxy's `/mcp` route, which forwards to the
|
|
656
|
+
native sandbox gateway's `/coding-mcp` route; the proxy never sees a server's URL
|
|
657
|
+
or secrets. Codex agents get only tools the server marks `readOnlyHint: true`
|
|
658
|
+
(see [Coding worker isolation](coding-worker-isolation.md#remote-mcp-tools)).
|
|
659
|
+
|
|
660
|
+
| Variable | Read by | Default | Meaning |
|
|
661
|
+
| ------------------------------ | -------------------------------------------------------------------------------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
662
|
+
| `WARDBY_MCP_SERVERS` | the server processes and the gateway | `owners` | Who may register remote MCP servers: `owners` (the default: owners may register servers), `admins` (registering, updating and refreshing a server needs `hosts:admin`), or `off` (every MCP-server tool except `detach_mcp_server` and `delete_mcp_server` is refused with a 403 that names this variable, and attached servers' tools are left out of runs). Any other value stops start-up. |
|
|
663
|
+
| `WARDBY_MCP_MAX_CALLS_PER_RUN` | the native gateway, which counts calls; also checked at start-up by the server processes and the gateway | `100` | The most remote MCP tool calls one coding run (Claude Code or Codex) may make. Every call to one of the run's MCP tools counts, whatever its outcome; a call past the limit is refused with the [`mcp_call_limit`](../help/errors/mcp-call-limit.md) error, which the agent sees as the tool's result. A positive whole number; any other value stops start-up. |
|
|
664
|
+
| `WARDBY_MCP_GATEWAY_URL` | the coding proxy | unset | The native sandbox gateway's base URL, for example `http://<gateway host>:<port>`. The proxy's `/mcp` route, which a coding run's worker uses as its MCP server, forwards each request to the gateway's `/coding-mcp` route; the proxy never sees an MCP server's URL or credentials. Unset, coding runs get no MCP tools: `/mcp` answers `503` with [`mcp_unavailable`](../help/errors/mcp-unavailable.md). An `http` or `https` URL without credentials, query or fragment; any other value stops start-up. |
|
|
665
|
+
| `WARDBY_MCP_TOKEN` | the coding worker | set by Wardby | Don't set it. Wardby gives each coding run whose agent has MCP tools its own MCP token in this worker variable. It is valid only for the proxy's `/mcp` route, and only while the run is active and before its deadline; only its hash is stored, and it is never logged. |
|
|
666
|
+
|
|
563
667
|
## Slack workflow notifications
|
|
564
668
|
|
|
565
669
|
This integration requires Wardby 0.6.0 or later.
|
|
@@ -748,6 +852,12 @@ packages, both forced to patched versions by `overrides` in `package.json`:
|
|
|
748
852
|
re-run `prisma generate`, `prisma validate`, the `migrate diff` drift check,
|
|
749
853
|
and the migration image's `migrate deploy`.
|
|
750
854
|
|
|
855
|
+
ESLint and `typescript-eslint` still ask for `minimatch` 10, which is flagged
|
|
856
|
+
(GHSA-g3hv-75wg-m249, moderate, fixed in 11.0.1), so `overrides` also forces
|
|
857
|
+
`minimatch` to 11.0.3. It is development-only and never reaches a production
|
|
858
|
+
image. After changing it, confirm `npm run lint` checks the same files and
|
|
859
|
+
still reports problems.
|
|
860
|
+
|
|
751
861
|
`scripts/security-audit.mjs` carries no exceptions: with the overrides the full
|
|
752
862
|
and production audits are clean, and if a lockfile change ever dropped one, the
|
|
753
863
|
advisory would reappear and the security job would fail.
|
|
@@ -12,20 +12,24 @@ wardby exposes no new inbound endpoint for it.
|
|
|
12
12
|
|
|
13
13
|
### Events
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
| Kind
|
|
18
|
-
|
|
|
19
|
-
| `issue_picked_up`
|
|
20
|
-
| `run_failed`
|
|
21
|
-
| `
|
|
22
|
-
| `
|
|
23
|
-
| `
|
|
24
|
-
| `
|
|
25
|
-
|
|
26
|
-
A run
|
|
27
|
-
|
|
28
|
-
|
|
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.
|
|
29
33
|
|
|
30
34
|
Some runs do not post `run_failed` at all:
|
|
31
35
|
|
|
@@ -34,13 +38,24 @@ Some runs do not post `run_failed` at all:
|
|
|
34
38
|
- a review verdict or failure from a coding agent acting as the reviewer, and
|
|
35
39
|
- runs started from the `wardby run` CLI command.
|
|
36
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
|
+
|
|
37
51
|
A pull request linked to several issues posts `pr_opened` and `pr_closed`
|
|
38
52
|
only to the first linked issue's thread.
|
|
39
53
|
|
|
40
54
|
### Threads
|
|
41
55
|
|
|
42
|
-
Each channel gets one thread per card: one per Jira issue
|
|
43
|
-
|
|
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
|
|
44
59
|
posts a parent message naming the issue or pull request; every later event
|
|
45
60
|
for the same card is a reply in that thread, and the parent is kept updated
|
|
46
61
|
with a short status line. The statuses are:
|
|
@@ -55,14 +70,15 @@ with a short status line. The statuses are:
|
|
|
55
70
|
| `fix rounds exhausted` | fix rounds reaching the cap with changes still requested |
|
|
56
71
|
| `merged ✅` | the pull request merged |
|
|
57
72
|
| `closed` | the pull request closed without merging |
|
|
73
|
+
| `blocked ⛔` | `run_blocked` |
|
|
58
74
|
| `failed ❌` | `run_failed` |
|
|
59
75
|
|
|
60
|
-
A `COMMENT` review
|
|
76
|
+
A `COMMENT` review and `packages_audited` leave the status as it was. `merged ✅` and `closed` stick:
|
|
61
77
|
a late review, fix round, failure, or repeated close does not change them.
|
|
62
78
|
Only a new start does — the card picked up again, or a new pull request
|
|
63
79
|
opened for it — which sets `picked up` or `PR open` again.
|
|
64
80
|
|
|
65
|
-
Most events only post as a thread reply. A merge and a top-level run failure
|
|
81
|
+
Most events only post as a thread reply. A merge, a blocked run, and a top-level run failure
|
|
66
82
|
also post to the channel itself, so they are visible without opening the
|
|
67
83
|
thread.
|
|
68
84
|
|
|
@@ -104,7 +120,7 @@ is not paused up front. Delivery pauses when the first actual delivery fails
|
|
|
104
120
|
authentication (see [Failure modes](#failure-modes)).
|
|
105
121
|
|
|
106
122
|
With `WARDBY_SLACK_CUSTOMIZE=true`, a message about an event that names an
|
|
107
|
-
agent (`issue_picked_up`, `run_failed`, `review_posted`) is posted under that
|
|
123
|
+
agent (`issue_picked_up`, `run_failed`, `run_blocked`, `review_posted`, `packages_audited`) is posted under that
|
|
108
124
|
agent's name; every other message, and every message when the option is off,
|
|
109
125
|
posts as `wardby`. A thread's parent message uses the name of the event that
|
|
110
126
|
started the thread. wardby sets no icon.
|
package/docs/tool-secrets.md
CHANGED
|
@@ -157,6 +157,9 @@ or that the tool is not granted, fails with
|
|
|
157
157
|
[`secret_brokered`](../help/errors/secret-brokered.md), so update tools that read
|
|
158
158
|
the value to use `fetch` instead.
|
|
159
159
|
|
|
160
|
+
A host provider's credentials must be brokered secrets, placed in a header or
|
|
161
|
+
query parameter. See [host-providers.md](host-providers.md).
|
|
162
|
+
|
|
160
163
|
## What the host enforces
|
|
161
164
|
|
|
162
165
|
- **https only**, to the default port. Any other scheme or port is refused with
|
|
@@ -235,18 +238,50 @@ request. Choose destinations with that in mind:
|
|
|
235
238
|
- Brokering does not change who can attach tools or grant secrets. Keep
|
|
236
239
|
`allowedSecrets` and `allowedHosts` narrow on each attachment.
|
|
237
240
|
|
|
241
|
+
## Secret values are never stored
|
|
242
|
+
|
|
243
|
+
Wardby refuses to store a secret's value anywhere it could be read back. A
|
|
244
|
+
datastore or agent memory write (from a tool in either run mode, from the MCP
|
|
245
|
+
`datastore_set` or `set_agent_memory` tools, or from a bundle import) is refused
|
|
246
|
+
with [`secret_in_value`](../help/errors/secret-in-value.md) when the value or the key
|
|
247
|
+
contains the value of a secret attached to the agent. The error names the
|
|
248
|
+
secret, and nothing is stored. Store the secret's name and read the secret when
|
|
249
|
+
it is needed, with `secrets.get` or `fetch(url, { secrets })`.
|
|
250
|
+
|
|
251
|
+
- Matching is by exact value, including JSON-escaped forms and, for brokered
|
|
252
|
+
secrets, the encoded forms the broker scrubs. Values shorter than 6
|
|
253
|
+
characters are not matched.
|
|
254
|
+
- If the agent's secrets cannot be read to check a value, the write is refused
|
|
255
|
+
with [`secret_check_unavailable`](../help/errors/secret-in-value.md) and nothing
|
|
256
|
+
is stored.
|
|
257
|
+
- A bundle import skips a seeded datastore entry (per-agent or shared) whose key
|
|
258
|
+
or value contains an attached secret's value and reports a warning that names
|
|
259
|
+
the secret; the entry's key is withheld from the warning.
|
|
260
|
+
- A native run's final text and error, and comments, reviews, and Jira posts
|
|
261
|
+
made through built-in tools, have attached secret values replaced with
|
|
262
|
+
`[REDACTED]`. So does the task text of a `delegate_to_*` call, using the
|
|
263
|
+
delegating agent's secrets, before the sub-agent's run is created, in both run
|
|
264
|
+
modes. If the secrets cannot be read when a run ends, its stored final text
|
|
265
|
+
and error are `[withheld: this text could not be checked for secret values]`.
|
|
266
|
+
A posting tool or `delegate_to_*` call that cannot read the secrets returns
|
|
267
|
+
`secret_check_unavailable` and posts nothing or creates no sub-agent run.
|
|
268
|
+
- Values that are split, re-encoded, or otherwise transformed are not detected,
|
|
269
|
+
and values stored before this check existed are not scanned.
|
|
270
|
+
|
|
238
271
|
## Errors
|
|
239
272
|
|
|
240
|
-
| Code | Meaning
|
|
241
|
-
| ---------------------------------------------------------------------------------------- |
|
|
242
|
-
| [`secret_brokered`](../help/errors/secret-brokered.md) | A tool read a brokered secret with `secrets.get`.
|
|
243
|
-
| [`secret_not_brokered`](../help/errors/secret-not-brokered.md) | `fetch` named a secret that is not brokered or not granted to the tool.
|
|
244
|
-
| [`secret_broker_destination_denied`](../help/errors/secret-broker-destination-denied.md) | The URL is not https, or its host, port, or path is outside the config.
|
|
245
|
-
| [`secret_broker_conflict`](../help/errors/secret-broker-conflict.md) | The request sets what a broker places, or brokers collide.
|
|
246
|
-
| [`secret_broker_body_invalid`](../help/errors/secret-broker-body-invalid.md) | Body placement needs a JSON-object or form-encoded body.
|
|
247
|
-
| [`secret_broker_value_invalid`](../help/errors/secret-broker-value-invalid.md) | The value is too short, or is not the JSON a SigV4 secret needs.
|
|
248
|
-
| [`secret_broker_changed`](../help/errors/secret-broker-changed.md) | A removal link was created before the broker config last changed.
|
|
249
|
-
| [`secret_broker_config_invalid`](../help/errors/secret-broker-config-invalid.md) | The broker config failed validation.
|
|
273
|
+
| Code | Meaning |
|
|
274
|
+
| ---------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
|
275
|
+
| [`secret_brokered`](../help/errors/secret-brokered.md) | A tool read a brokered secret with `secrets.get`. |
|
|
276
|
+
| [`secret_not_brokered`](../help/errors/secret-not-brokered.md) | `fetch` named a secret that is not brokered or not granted to the tool. |
|
|
277
|
+
| [`secret_broker_destination_denied`](../help/errors/secret-broker-destination-denied.md) | The URL is not https, or its host, port, or path is outside the config. |
|
|
278
|
+
| [`secret_broker_conflict`](../help/errors/secret-broker-conflict.md) | The request sets what a broker places, or brokers collide. |
|
|
279
|
+
| [`secret_broker_body_invalid`](../help/errors/secret-broker-body-invalid.md) | Body placement needs a JSON-object or form-encoded body. |
|
|
280
|
+
| [`secret_broker_value_invalid`](../help/errors/secret-broker-value-invalid.md) | The value is too short, or is not the JSON a SigV4 secret needs. |
|
|
281
|
+
| [`secret_broker_changed`](../help/errors/secret-broker-changed.md) | A removal link was created before the broker config last changed. |
|
|
282
|
+
| [`secret_broker_config_invalid`](../help/errors/secret-broker-config-invalid.md) | The broker config failed validation. |
|
|
283
|
+
| [`secret_in_value`](../help/errors/secret-in-value.md) | A datastore or memory write contains an attached secret's value. |
|
|
284
|
+
| [`secret_check_unavailable`](../help/errors/secret-in-value.md) | The write or posting could not be checked because secrets were unreadable. |
|
|
250
285
|
|
|
251
286
|
See also the short help article
|
|
252
287
|
[Brokered secrets](../help/brokered-secrets.md).
|
package/docs/viewer-api.md
CHANGED
|
@@ -13,6 +13,12 @@ the `admin` role.
|
|
|
13
13
|
|
|
14
14
|
## Access
|
|
15
15
|
|
|
16
|
+
From an MCP client, an admin gets a deployment-wide listing without this API:
|
|
17
|
+
`list_agents` and `list_runs` with `all: true` (Wardby 0.8.0 and later) need the
|
|
18
|
+
same `admin:view` scope and `admin` role, and are refused otherwise. Their
|
|
19
|
+
`triggerInfo` and `outcomes` fields have the same shapes as a graph run's
|
|
20
|
+
`trigger` and `outcomes` here; `serviceReadiness` is `services` without `reason`.
|
|
21
|
+
|
|
16
22
|
A caller needs an access token for the Wardby MCP resource that carries the
|
|
17
23
|
`admin:view` scope, and the Wardby `admin` role. Send it as
|
|
18
24
|
`Authorization: Bearer <token>`.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
openapi: 3.1.0
|
|
3
3
|
info:
|
|
4
4
|
title: wardby admin viewer API
|
|
5
|
-
version: 0.
|
|
5
|
+
version: 0.8.0
|
|
6
6
|
description: "Read-only admin API behind the wardby viewer: graph, run detail, infrastructure info and a live event stream. Response objects may gain new fields in later releases; clients should ignore unknown fields. See docs/viewer-api.md for the prose contract."
|
|
7
7
|
servers:
|
|
8
8
|
- url: https://{host}
|
package/help/admin-viewer.md
CHANGED
|
@@ -3,7 +3,7 @@ id: admin-viewer
|
|
|
3
3
|
title: Watch live runs with the admin viewer API
|
|
4
4
|
summary: Read-only, deployment-wide live view of runs, sub-agent trees, triggers, outcomes and coding-run services for admins (admin:view).
|
|
5
5
|
audience: operator
|
|
6
|
-
tags: [viewer, admin, runs, live, desktop, infrastructure, kubernetes, download, openapi, api contract]
|
|
6
|
+
tags: [viewer, admin, runs, live, desktop, infrastructure, kubernetes, download, openapi, api contract, sign-in]
|
|
7
7
|
appliesTo: ">=0.4.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -19,6 +19,10 @@ It requires the Wardby `admin` role and the `admin:view` scope, which only the
|
|
|
19
19
|
provider and map it like `agents:admin`. See
|
|
20
20
|
[Configure identity and privileged access](identity-and-access.md).
|
|
21
21
|
|
|
22
|
+
From an MCP client, an admin gets the same deployment-wide listing with
|
|
23
|
+
`list_agents` and `list_runs` and `all: true` (Wardby 0.8.0 and later; also
|
|
24
|
+
`admin:view`). Without the role the call is refused.
|
|
25
|
+
|
|
22
26
|
Endpoints, all `GET`:
|
|
23
27
|
|
|
24
28
|
- `/admin/api/graph?since=1h&limit=500`: a snapshot of runs in a time window.
|
|
@@ -36,6 +40,25 @@ your server's canonical URI, sign in with an `admin` user in the browser, and it
|
|
|
36
40
|
shows the live graph. Each GitHub release has an unsigned macOS build of the viewer attached (see the README for opening it past Gatekeeper). Its README covers setup, and what an external identity
|
|
37
41
|
provider client needs when the server runs in delegating mode.
|
|
38
42
|
|
|
43
|
+
## Viewer sign-in with an external identity provider
|
|
44
|
+
|
|
45
|
+
In delegating mode, the viewer signs in through your identity provider's
|
|
46
|
+
public (native) client. That client must:
|
|
47
|
+
|
|
48
|
+
- register the exact redirect URI `http://127.0.0.1:8585/callback`. The viewer
|
|
49
|
+
always listens on port 8585, and some providers (Okta, for example) match a
|
|
50
|
+
loopback redirect by its exact port, so a port-less or wildcard loopback
|
|
51
|
+
entry may not match;
|
|
52
|
+
- allow the `admin:view` scope for the Wardby resource;
|
|
53
|
+
- enable the refresh-token grant and allow the `offline_access` scope. The
|
|
54
|
+
viewer requests it so the provider returns a refresh token, and sign-in
|
|
55
|
+
fails with "server issued no refresh token" without one.
|
|
56
|
+
|
|
57
|
+
The viewer prints its callback URL to stderr at startup. If sign-in reports
|
|
58
|
+
that it could not open the local callback listener on `127.0.0.1:8585`,
|
|
59
|
+
another program is using that port: close it and sign in again. In
|
|
60
|
+
self-hosted mode the viewer registers itself, so there is no client to set up.
|
|
61
|
+
|
|
39
62
|
From Wardby 0.6.0, admins can also sign in to a mobile app for the same read-only live view; see the help article `mobile-app`.
|
|
40
63
|
|
|
41
64
|
The Infrastructure tab shows the Kubernetes pods where your deployment runs
|
|
@@ -44,7 +67,10 @@ requires a minimal read-only Kubernetes role. See the Infrastructure view
|
|
|
44
67
|
section of the [viewer README](../apps/viewer/README.md#infrastructure-view) for
|
|
45
68
|
setup. Its Map shows the request path (entry, protection layer such as Cloud
|
|
46
69
|
Armor, routes), each NetworkPolicy with a plain-English summary, and on GKE a
|
|
47
|
-
link from each pod to the Google Cloud console.
|
|
70
|
+
link from each pod to the Google Cloud console. In low-power mode the sleeping
|
|
71
|
+
coding proxy and native gateway show as asleep (with when they last woke), and
|
|
72
|
+
a failed old replica next to a healthy one is greyed out rather than shown as a
|
|
73
|
+
failure. The run graph's zoom controls
|
|
48
74
|
include **Fit width**, which fills the canvas with the graph's width.
|
|
49
75
|
|
|
50
76
|
From Wardby 0.6.0 the API is also published as OpenAPI 3.1 (`docs/viewer-api.openapi.yml` in the package), an API contract you can feed to client generators such as `openapi-typescript`.
|
package/help/agent-recipes.md
CHANGED
|
@@ -162,8 +162,8 @@ yourself.`
|
|
|
162
162
|
A router delegates once per run by default. For one native agent that splits a
|
|
163
163
|
request across several repositories, attach one builder per repository and set
|
|
164
164
|
the lead's `maxDelegationsPerRun` (1 to 20) with `create_agent` or
|
|
165
|
-
`update_agent`.
|
|
166
|
-
|
|
165
|
+
`update_agent`. A run delegates to each sub-agent and repository at most
|
|
166
|
+
once; the calls run one after another unless you also set
|
|
167
167
|
`parallelDelegations: true`, which starts only the **consecutive**
|
|
168
168
|
`delegate_to_*` calls of one turn together — a non-delegation call between
|
|
169
169
|
two delegations splits them, nothing is reordered, and results return to the
|
|
@@ -208,6 +208,37 @@ pull request in it also gets a `wardby merge order` check run showing
|
|
|
208
208
|
whether its earlier steps have merged yet; search help for "merge order
|
|
209
209
|
check" for its states and for requiring it in branch protection.
|
|
210
210
|
|
|
211
|
+
**One coding agent across several repositories.** Instead of one builder per
|
|
212
|
+
repository, give one coding builder a list: its default in
|
|
213
|
+
`codingProfile.repository`, and each other repository with `link_repository`
|
|
214
|
+
(`access: "write"`, no triggers). The lead then names the repository on each
|
|
215
|
+
call, and may delegate to the same builder once per repository:
|
|
216
|
+
|
|
217
|
+
```json
|
|
218
|
+
{ "task": "Add the /quotes endpoint the client will call.", "repository": "your-org/api", "mergeOrder": 1 }
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
```json
|
|
222
|
+
{ "task": "Add the quotes page that calls /quotes.", "repository": "your-org/web", "mergeOrder": 2 }
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Set `maxDelegationsPerRun` (up to 20) for the number of calls, and use
|
|
226
|
+
`mergeOrder` where the pull requests must land in order. A call without
|
|
227
|
+
`repository` is refused with `repository_required` (unless it continues a prior
|
|
228
|
+
run with `continuePriorRun`), and a repository not on the list with
|
|
229
|
+
`repository_not_listed`. A native sub-agent refuses `repository` with
|
|
230
|
+
`repository_requires_coding_agent`. The lead sees the list in the tool
|
|
231
|
+
definition only when it has the same owner as the builder, or another owner
|
|
232
|
+
with execute access to a builder that sets `allowWebhookTaskOverride`. All
|
|
233
|
+
repositories share the builder's toolchain, budget and prompt.
|
|
234
|
+
|
|
235
|
+
Being on the list lets a run work in a repository; it starts nothing there. Link
|
|
236
|
+
the lead and the reviewer on each listed GitHub repository with the triggers
|
|
237
|
+
they need, or a pull request opened there gets no review, mention follow-up, fix
|
|
238
|
+
round or mark-ready.
|
|
239
|
+
|
|
240
|
+
Search help for `repository_required` or `repository_not_listed` for what to do about those refusals.
|
|
241
|
+
|
|
211
242
|
## Step 3: confirm
|
|
212
243
|
|
|
213
244
|
Summarize what you created: each agent's name and id, the sub-agent bindings,
|