@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
|
@@ -54,26 +54,27 @@ access tokens for that audience.
|
|
|
54
54
|
|
|
55
55
|
Create these scopes in the provider:
|
|
56
56
|
|
|
57
|
-
| Scope | Capability
|
|
58
|
-
| --------------------- |
|
|
59
|
-
| `agents:read` | Inspect agents, models, runs, memory, and attached resources.
|
|
60
|
-
| `agents:write` | Create and modify agents, schedules, and sub-agent relationships.
|
|
61
|
-
| `runs:trigger` | Start agent runs.
|
|
62
|
-
| `tools:write` | Create, attach, and manage tools.
|
|
63
|
-
| `datastore:write` | Create, attach, query, and modify datastores.
|
|
64
|
-
| `secrets:write` | Create, attach, rotate, and remove secret bindings.
|
|
65
|
-
| `webhooks:write` | Create and manage webhook triggers.
|
|
66
|
-
| `budget_groups:write` | Create and manage shared budget groups.
|
|
67
|
-
| `packages:approve` | Approve coding agents' package allowlists.
|
|
68
|
-
| `services:manage` | Create, update and delete coding-run service catalog entries.
|
|
69
|
-
| `agents:admin` | Reassign agent ownership, BYO worker images; admins only.
|
|
70
|
-
| `memory:write` | Set and delete agent memory entries.
|
|
71
|
-
| `admin:view` | Read every owner's runs through the admin viewer API; admins only.
|
|
72
|
-
| `models:admin` | Add, override, disable and reset model catalog entries.
|
|
73
|
-
| `power:manage` | Read low-power state and sleep the proxy/gateway now; admins only.
|
|
57
|
+
| Scope | Capability |
|
|
58
|
+
| --------------------- | ------------------------------------------------------------------------------- |
|
|
59
|
+
| `agents:read` | Inspect agents, models, runs, memory, and attached resources. |
|
|
60
|
+
| `agents:write` | Create and modify agents, schedules, and sub-agent relationships. |
|
|
61
|
+
| `runs:trigger` | Start agent runs. |
|
|
62
|
+
| `tools:write` | Create, attach, and manage tools. |
|
|
63
|
+
| `datastore:write` | Create, attach, query, and modify datastores. |
|
|
64
|
+
| `secrets:write` | Create, attach, rotate, and remove secret bindings. |
|
|
65
|
+
| `webhooks:write` | Create and manage webhook triggers. |
|
|
66
|
+
| `budget_groups:write` | Create and manage shared budget groups. |
|
|
67
|
+
| `packages:approve` | Approve coding agents' package allowlists. |
|
|
68
|
+
| `services:manage` | Create, update and delete coding-run service catalog entries. |
|
|
69
|
+
| `agents:admin` | Reassign agent ownership, BYO worker images; admins only. |
|
|
70
|
+
| `memory:write` | Set and delete agent memory entries. |
|
|
71
|
+
| `admin:view` | Read every owner's runs through the admin viewer API; admins only. |
|
|
72
|
+
| `models:admin` | Add, override, disable and reset model catalog entries. |
|
|
73
|
+
| `power:manage` | Read low-power state and sleep the proxy/gateway now; admins only. |
|
|
74
|
+
| `hosts:admin` | Register host providers and approve their tools; admins and host managers only. |
|
|
74
75
|
|
|
75
76
|
MCP clients discover this list from Wardby's protected-resource metadata and
|
|
76
|
-
may request every advertised scope. Define all
|
|
77
|
+
may request every advertised scope. Define all sixteen in the provider even when
|
|
77
78
|
policy grants a particular client or user only a subset. Ensure granted scopes
|
|
78
79
|
are emitted in the access token's `scope` or `scp` claim; defining them only in
|
|
79
80
|
the provider UI is not sufficient.
|
|
@@ -97,24 +98,29 @@ every advertised scope fail with `invalid_scope`.
|
|
|
97
98
|
deployment, define it in the provider too and map it like `agents:admin`;
|
|
98
99
|
otherwise clients that request every advertised scope fail with `invalid_scope`.
|
|
99
100
|
|
|
101
|
+
`hosts:admin` was added after `power:manage`. When you upgrade an existing
|
|
102
|
+
deployment, define it in the provider too and map it like `agents:admin`;
|
|
103
|
+
otherwise clients that request every advertised scope fail with `invalid_scope`.
|
|
104
|
+
|
|
100
105
|
### Wardby roles
|
|
101
106
|
|
|
102
107
|
A scope only delegates. `agents:admin`, `packages:approve`, `services:manage`,
|
|
103
|
-
`admin:view`, `models:admin` and `
|
|
108
|
+
`admin:view`, `models:admin`, `power:manage` and `hosts:admin` take effect only for a caller who also holds a Wardby role that grants them:
|
|
104
109
|
|
|
105
|
-
| Wardby role | Grants
|
|
106
|
-
| ------------------ |
|
|
107
|
-
| `admin` | `agents:admin` (`make_owner`, BYO `workerImageRef`), `packages:approve`, `services:manage`, `admin:view` (read every owner's runs, see [viewer-api.md](viewer-api.md)), `models:admin` (model catalog) and `power:manage` (`power_status`, `power_sleep`; see [getting-started-gke.md](getting-started-gke.md#low-power-mode)) |
|
|
108
|
-
| `package-approver` | `packages:approve` (package allowlist and policy approval)
|
|
109
|
-
| `service-manager` | `services:manage` (coding-run service catalog changes)
|
|
110
|
-
| `model-manager` | `models:admin` (model catalog changes: `set_model`, `disable_model`, `reset_model`; see [models.md](models.md))
|
|
110
|
+
| Wardby role | Grants |
|
|
111
|
+
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
112
|
+
| `admin` | `agents:admin` (`make_owner`, BYO `workerImageRef`), `packages:approve`, `services:manage`, `admin:view` (read every owner's runs, see [viewer-api.md](viewer-api.md)), `models:admin` (model catalog), `hosts:admin` (host providers) and `power:manage` (`power_status`, `power_sleep`; see [getting-started-gke.md](getting-started-gke.md#low-power-mode)) |
|
|
113
|
+
| `package-approver` | `packages:approve` (package allowlist and policy approval) |
|
|
114
|
+
| `service-manager` | `services:manage` (coding-run service catalog changes) |
|
|
115
|
+
| `model-manager` | `models:admin` (model catalog changes: `set_model`, `disable_model`, `reset_model`; see [models.md](models.md)) |
|
|
116
|
+
| `host-manager` | `hosts:admin` (`register_host_provider`, `approve_host_provider_tools`, `test_host_provider`; see [host-providers.md](host-providers.md)) |
|
|
111
117
|
|
|
112
118
|
The roles come from a claim in the caller's **access token**, which you map to
|
|
113
119
|
Wardby roles:
|
|
114
120
|
|
|
115
121
|
```dotenv
|
|
116
122
|
AUTH_ROLE_CLAIM=groups # claim name or dotted path
|
|
117
|
-
AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager
|
|
123
|
+
AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager,wardby-hosts=host-manager
|
|
118
124
|
```
|
|
119
125
|
|
|
120
126
|
Wardby looks up `AUTH_ROLE_CLAIM` in two steps:
|
|
@@ -162,20 +168,20 @@ their next token.
|
|
|
162
168
|
|
|
163
169
|
Provider examples:
|
|
164
170
|
|
|
165
|
-
- **Okta** (custom authorization server): create
|
|
166
|
-
`wardby-packages`, `wardby-services` and `wardby-
|
|
171
|
+
- **Okta** (custom authorization server): create five groups, `wardby-admin`,
|
|
172
|
+
`wardby-packages`, `wardby-services`, `wardby-models` and `wardby-hosts`. Add a `groups` claim
|
|
167
173
|
to the access token, filtered to those groups. Set `AUTH_ROLE_CLAIM=groups` and
|
|
168
|
-
`AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager`.
|
|
174
|
+
`AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager,wardby-hosts=host-manager`.
|
|
169
175
|
Optionally, add access policy rules so only those groups can obtain
|
|
170
|
-
`agents:admin`, `packages:approve`, `services:manage`, `admin:view`, `models:admin` and `
|
|
171
|
-
- **FusionAuth:** create
|
|
172
|
-
`package-approver`, `service-manager` and `
|
|
176
|
+
`agents:admin`, `packages:approve`, `services:manage`, `admin:view`, `models:admin`, `power:manage` and `hosts:admin`.
|
|
177
|
+
- **FusionAuth:** create five application roles, `admin`,
|
|
178
|
+
`package-approver`, `service-manager`, `model-manager` and `host-manager`. They appear in the
|
|
173
179
|
access token's top-level `roles` claim. Set `AUTH_ROLE_CLAIM=roles` and
|
|
174
|
-
`AUTH_ROLE_MAP=admin=admin,package-approver=package-approver,service-manager=service-manager,model-manager=model-manager`.
|
|
180
|
+
`AUTH_ROLE_MAP=admin=admin,package-approver=package-approver,service-manager=service-manager,model-manager=model-manager,host-manager=host-manager`.
|
|
175
181
|
- **Keycloak:** create realm roles such as `wardby-admin`, `wardby-packages`,
|
|
176
|
-
`wardby-services` and `wardby-
|
|
182
|
+
`wardby-services`, `wardby-models` and `wardby-hosts`. Realm roles appear under
|
|
177
183
|
`realm_access.roles`. Set `AUTH_ROLE_CLAIM=realm_access.roles` and
|
|
178
|
-
`AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager`.
|
|
184
|
+
`AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager,wardby-hosts=host-manager`.
|
|
179
185
|
For client roles, use `resource_access.<client-id>.roles`. The
|
|
180
186
|
[local Keycloak harness](../deploy/keycloak-test/README.md) sets this up.
|
|
181
187
|
- **Auth0:** add the user's roles to the access token as a namespaced custom
|
|
@@ -190,7 +196,10 @@ that case, register the MCP client manually as a **public/native application**:
|
|
|
190
196
|
|
|
191
197
|
- require authorization code flow with PKCE S256;
|
|
192
198
|
- do not issue or embed a client secret in a desktop client;
|
|
193
|
-
- register the client's exact loopback callback URI;
|
|
199
|
+
- register the client's exact loopback callback URI;
|
|
200
|
+
- enable the refresh-token grant and allow the `offline_access` scope, so the
|
|
201
|
+
client receives a refresh token (desktop clients need one to keep a session);
|
|
202
|
+
and
|
|
194
203
|
- allow it to request the Wardby audience and scopes.
|
|
195
204
|
|
|
196
205
|
To let the Wardby mobile app sign in, also register its private-use redirect
|
|
@@ -212,6 +221,12 @@ public client ID. If a client supports only dynamic registration, either enable
|
|
|
212
221
|
that feature with suitable provider-side restrictions or use Wardby's
|
|
213
222
|
self-hosted authentication mode.
|
|
214
223
|
|
|
224
|
+
The Wardby viewer desktop app signs in on a fixed loopback callback,
|
|
225
|
+
`http://127.0.0.1:8585/callback`; register that exact URI on its public/native
|
|
226
|
+
client. Some providers match a loopback redirect by its exact port rather than
|
|
227
|
+
the port-agnostic rule of RFC 8252 §7.3 — for those, this precise port must be
|
|
228
|
+
registered, because a port-less or wildcard loopback entry will not match it.
|
|
229
|
+
|
|
215
230
|
## 4. Configure Wardby
|
|
216
231
|
|
|
217
232
|
Inject these settings through the deployment's secret/configuration mechanism:
|
|
@@ -227,7 +242,7 @@ AUTH_JWKS_URI=https://identity.example.com/your-tenant/.well-known/jwks.json
|
|
|
227
242
|
AUTH_AUDIENCE=https://wardby.example.com/mcp
|
|
228
243
|
# Optional: Wardby roles (see "Wardby roles" above).
|
|
229
244
|
AUTH_ROLE_CLAIM=groups
|
|
230
|
-
AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager
|
|
245
|
+
AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager,wardby-hosts=host-manager
|
|
231
246
|
```
|
|
232
247
|
|
|
233
248
|
Copy `AUTH_ISSUER` exactly from the token's `iss` claim or the provider's
|
|
@@ -263,7 +278,7 @@ Confirm that:
|
|
|
263
278
|
|
|
264
279
|
- `resource` is the canonical MCP URI;
|
|
265
280
|
- `authorization_servers` contains the external issuer; and
|
|
266
|
-
- `scopes_supported` contains all
|
|
281
|
+
- `scopes_supported` contains all sixteen Wardby scopes.
|
|
267
282
|
|
|
268
283
|
An unauthenticated MCP request must return `401` with a `WWW-Authenticate`
|
|
269
284
|
challenge pointing back to that metadata document.
|
package/docs/getting-started.md
CHANGED
|
@@ -238,6 +238,13 @@ After connecting, try:
|
|
|
238
238
|
> List my Wardby agents, show the latest run and its actual cost, then create a
|
|
239
239
|
> new agent with a maximum budget of $0.50. Do not run it yet.
|
|
240
240
|
|
|
241
|
+
From Wardby 0.8.0, Claude Code can also show your runs in a pane beside the
|
|
242
|
+
chat. With `--client claude` or `both`, quickstart offers to install it
|
|
243
|
+
(`--claude-plugin` installs it unattended, `--no-claude-plugin` skips the
|
|
244
|
+
question); otherwise run `npx @wardby/cli@latest claude-plugin install`, then
|
|
245
|
+
`/wardby-runs`. `wardby doctor` reports whether it is set up. See the
|
|
246
|
+
[Claude Code plugin](claude-code-plugin.md) guide.
|
|
247
|
+
|
|
241
248
|
### Reasoning effort
|
|
242
249
|
|
|
243
250
|
A native agent can set `effort` (`low`, `medium`, `high`, `xhigh`, or `max`)
|
|
@@ -422,6 +429,15 @@ along with the database. See
|
|
|
422
429
|
run does, its requirements (the server must run on the same machine as the
|
|
423
430
|
folders) and its limits (no submodules or Git LFS).
|
|
424
431
|
|
|
432
|
+
#### Faster installs: the dependency cache
|
|
433
|
+
|
|
434
|
+
For an npm repository, the coding proxy can keep `node_modules` snapshots so a
|
|
435
|
+
run starts with its dependencies already installed. Add
|
|
436
|
+
`WARDBY_DEPENDENCY_CACHE=true` to `.wardby/.env`, restart the stack, then set
|
|
437
|
+
`codingProfile.dependencyCache` to `true` on the agent with `update_agent`. This
|
|
438
|
+
needs wardby 0.7.0 or later; snapshots live on a Docker volume that
|
|
439
|
+
`down -v` removes. See [Dependency cache](coding-packages.md#dependency-cache).
|
|
440
|
+
|
|
425
441
|
## Your first agents
|
|
426
442
|
|
|
427
443
|
[Agent recipes](agent-recipes.md) gives two complete, copyable setups: an
|
|
@@ -455,6 +471,7 @@ help article.
|
|
|
455
471
|
## Next steps
|
|
456
472
|
|
|
457
473
|
- [Agent recipes](agent-recipes.md)
|
|
474
|
+
- [Claude Code plugin](claude-code-plugin.md): your runs beside the chat (0.8.0+)
|
|
458
475
|
- [Runtime architecture](architecture-runtime.md)
|
|
459
476
|
- [Coding-agent setup](coding-agent-setup.md) and its
|
|
460
477
|
[local repositories](coding-agent-setup.md#local-repositories) section
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# Host providers
|
|
2
|
+
|
|
3
|
+
A host provider adds a code host to Wardby using your own custom tools. You can add
|
|
4
|
+
a host, or fix one, without a Wardby release.
|
|
5
|
+
|
|
6
|
+
Host providers are being added in stages. **This release (0.8.0) lets you register a
|
|
7
|
+
provider, approve its tools and test them. Agents can't use a registered provider yet**,
|
|
8
|
+
and `link_repository` still refuses its repositories.
|
|
9
|
+
|
|
10
|
+
## Who can manage one
|
|
11
|
+
|
|
12
|
+
Every host provider tool (`register_host_provider`, `approve_host_provider_tools`,
|
|
13
|
+
`get_host_provider`, `test_host_provider`, `delete_host_provider`) needs the
|
|
14
|
+
`hosts:admin` scope and a role that grants it (`admin` or `host-manager`), or the local
|
|
15
|
+
stdio operator. Bound tools decide who has permission and who wrote a comment, so treat
|
|
16
|
+
this like `agents:admin`. See
|
|
17
|
+
[getting-started-identity-provider.md](getting-started-identity-provider.md#wardby-roles)
|
|
18
|
+
for defining the scope and mapping the role.
|
|
19
|
+
|
|
20
|
+
Providers are shared by every host manager: any host manager can read and re-register any
|
|
21
|
+
provider, including its tool code, whoever owns the tools it names.
|
|
22
|
+
|
|
23
|
+
## Register a provider
|
|
24
|
+
|
|
25
|
+
1. Create a tool for each operation with `create_tool`. Each does one host call. See
|
|
26
|
+
[Tool contract](#tool-contract).
|
|
27
|
+
2. Store each credential with `create_secret`, and broker it with `set_secret_broker`
|
|
28
|
+
([tool-secrets.md](tool-secrets.md)). Allow every API host and place it in a header or
|
|
29
|
+
query parameter. Repository credentials also allow the git host; the permission
|
|
30
|
+
credential needs only the API hosts.
|
|
31
|
+
3. Store a webhook secret of at least 16 characters. Don't attach it to any agent.
|
|
32
|
+
4. Call `register_host_provider`:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"provider": "your-host",
|
|
37
|
+
"gitHost": "git.example.com",
|
|
38
|
+
"apiHosts": ["api.example.com"],
|
|
39
|
+
"gitUsername": "x-token-auth",
|
|
40
|
+
"pullRequestUrlTemplate": "https://git.example.com/{repository}/pull/{number}",
|
|
41
|
+
"repositoryApiPath": "/2.0/repositories/{repository}",
|
|
42
|
+
"webhook": {
|
|
43
|
+
"header": "X-Hub-Signature",
|
|
44
|
+
"algorithm": "sha256",
|
|
45
|
+
"deliveryHeader": "X-Request-UUID",
|
|
46
|
+
"eventHeader": "X-Event-Key",
|
|
47
|
+
"secret": "your-webhook-secret"
|
|
48
|
+
},
|
|
49
|
+
"credentials": [{ "repositories": "your-workspace/*", "secret": "your-token" }],
|
|
50
|
+
"trustedAccounts": ["<account id>"],
|
|
51
|
+
"tools": { "getPullRequest": "your_get_pr_tool" }
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Bind every required operation in `tools` (names here are placeholders), and any optional
|
|
56
|
+
ones you want. For example:
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
"tools": {
|
|
60
|
+
"getPullRequest": "your_get_pr", "listPullRequestFiles": "your_list_files",
|
|
61
|
+
"getDiff": "your_get_diff", "readFile": "your_read_file", "listFiles": "your_list_dir",
|
|
62
|
+
"listComments": "your_list_comments", "createComment": "your_create_comment",
|
|
63
|
+
"submitVerdict": "your_submit_verdict", "findPullRequest": "your_find_pr",
|
|
64
|
+
"openPullRequest": "your_open_pr", "updatePullRequest": "your_update_pr"
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
5. No restart is needed in this release, because agents can't use a provider yet. Once they
|
|
69
|
+
can, a new provider will need a server restart; approvals won't.
|
|
70
|
+
|
|
71
|
+
The tools and secrets you name must be yours. Secret rules, each refused with a named code:
|
|
72
|
+
|
|
73
|
+
- Credentials and `permissionCredential` must be brokered, placed in a header or query
|
|
74
|
+
parameter, and allowed on the API hosts (credentials also on the git host; the permission credential needs only the API hosts).
|
|
75
|
+
- `permissionCredential` can't also be listed in `credentials`
|
|
76
|
+
(`host_provider_permission_secret_shared`), so no other operation can reach it.
|
|
77
|
+
- The webhook secret can't be a credential or permission secret of any provider, and can't
|
|
78
|
+
be attached to an agent (`host_provider_webhook_secret_shared`). `attach_secret` refuses
|
|
79
|
+
it too.
|
|
80
|
+
- The webhook secret needs at least 16 characters (`host_provider_webhook_secret_short`).
|
|
81
|
+
- A permission secret can't be a credential or permission secret of any other provider, and a
|
|
82
|
+
credential can't be another provider's permission secret
|
|
83
|
+
(`host_provider_permission_secret_shared`).
|
|
84
|
+
- `gitUsername` can't be a credential's value and can't contain "username".
|
|
85
|
+
- `pullRequestUrlTemplate` is an https URL on `gitHost`, with no username, password or port.
|
|
86
|
+
|
|
87
|
+
Keep provider credentials unattached. A brokered credential attached to one of its owner's agents
|
|
88
|
+
can be used by that agent's tools without the host provider path guard, which only applies to a
|
|
89
|
+
provider's bound tools.
|
|
90
|
+
|
|
91
|
+
See [the refusal codes](../help/errors/host-provider-error.md) for what each one means.
|
|
92
|
+
|
|
93
|
+
These provider names can't be used: `github`, `local`, `http`, `https`, `ssh`, `git`,
|
|
94
|
+
`file` and `constructor`. Names match `^[a-z][a-z0-9-]{1,30}$`.
|
|
95
|
+
|
|
96
|
+
These operations are required: `getPullRequest`, `listPullRequestFiles`, `getDiff`,
|
|
97
|
+
`readFile`, `listFiles`, `listComments`, `createComment`, `submitVerdict`,
|
|
98
|
+
`findPullRequest`, `openPullRequest` and `updatePullRequest`. These are optional:
|
|
99
|
+
`editComment`, `resolveThread`, `listCommitStatuses`, `setCommitStatus`,
|
|
100
|
+
`getRepositoryPermission` and `normalizeEvent`. `getRepositoryPermission` becomes required
|
|
101
|
+
when you set `permissionCredential`.
|
|
102
|
+
|
|
103
|
+
## Who may start a run
|
|
104
|
+
|
|
105
|
+
This is how it will work once agents can use a provider. Registering records your choice
|
|
106
|
+
now; nothing enforces it in this release.
|
|
107
|
+
|
|
108
|
+
| Setup | Situation | Result |
|
|
109
|
+
| ------------------------- | ---------------------------------------- | --------------------------------- |
|
|
110
|
+
| `permissionCredential` | The host says the user has enough access | Run starts |
|
|
111
|
+
| `permissionCredential` | The host says they don't | Refused, even if in the allowlist |
|
|
112
|
+
| `permissionCredential` | The lookup fails | Refused, with no fallback |
|
|
113
|
+
| No `permissionCredential` | The user is in `trustedAccounts` | Run starts, at `write` level |
|
|
114
|
+
| No `permissionCredential` | The user isn't in `trustedAccounts` | Refused |
|
|
115
|
+
|
|
116
|
+
`permissionCredential` needs `permissionApiPath` (with `{workspace}` and `{repo}`) and a
|
|
117
|
+
bound `getRepositoryPermission`.
|
|
118
|
+
|
|
119
|
+
## Change a tool
|
|
120
|
+
|
|
121
|
+
Registering copies each tool's code, schema and `timeoutMs` (its time limit), and only that
|
|
122
|
+
copy ever runs.
|
|
123
|
+
`update_tool` changes nothing until you approve it, so the last approved version keeps
|
|
124
|
+
working in the meantime.
|
|
125
|
+
|
|
126
|
+
1. Call `update_tool`.
|
|
127
|
+
2. Call `get_host_provider` with `includeCode: true`. Changed tools show `status: "changed"`.
|
|
128
|
+
Each operation has `approvedCode` and `approvedParamsZod`, and a changed one also has
|
|
129
|
+
`currentCode` and `currentParamsZod`, because a change can be to the schema alone. Every
|
|
130
|
+
operation also shows `approvedTimeoutMs` and `currentTimeoutMs` (`null` is the default
|
|
131
|
+
10 seconds), since a change can be to the time limit alone.
|
|
132
|
+
3. Read the change, then call `approve_host_provider_tools` with the operation names. It
|
|
133
|
+
applies from the next call.
|
|
134
|
+
|
|
135
|
+
Deleting a tool keeps its snapshot running, with `status: "tool_deleted"`. To change that
|
|
136
|
+
operation, bind a new tool by registering again. Registering again also approves every tool
|
|
137
|
+
at its current code.
|
|
138
|
+
|
|
139
|
+
## Rotate a secret
|
|
140
|
+
|
|
141
|
+
A secret a provider uses is replaced with `create_secret` under the same name, whether it's a
|
|
142
|
+
credential, the permission credential or the webhook secret. Change its broker config with
|
|
143
|
+
`set_secret_broker`. Both need `hosts:admin` with a role that grants it, as well as
|
|
144
|
+
`secrets:write`, and refuse before handing out a browser link. Without brokering a credential
|
|
145
|
+
stops working, so `set_secret_broker` with `broker: null` also breaks the provider.
|
|
146
|
+
|
|
147
|
+
Only the secret's owner can rotate it this way, because secret names belong to their owner. If
|
|
148
|
+
another host manager calls `create_secret` with the same name, they get a separate secret and the
|
|
149
|
+
provider keeps the old value. They must register the provider again with their own secret instead.
|
|
150
|
+
|
|
151
|
+
The new webhook value needs at least 16 characters, whether you pass it directly or enter it
|
|
152
|
+
in the browser (`host_provider_webhook_secret_short`). A browser link requested before the secret
|
|
153
|
+
joined a provider is refused (`host_provider_secret_link_stale`); request a new one.
|
|
154
|
+
|
|
155
|
+
Rotating needs no re-registration: the next call uses the new value. Update the webhook secret on
|
|
156
|
+
the host at the same time.
|
|
157
|
+
|
|
158
|
+
## Test a provider
|
|
159
|
+
|
|
160
|
+
`test_host_provider` runs each approved read-only tool against one repository, using the
|
|
161
|
+
real credential:
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
{
|
|
165
|
+
"provider": "your-host",
|
|
166
|
+
"repository": "your-host:your-workspace/your-repo",
|
|
167
|
+
"pullRequest": 4,
|
|
168
|
+
"headRef": "a-branch-with-a-pull-request",
|
|
169
|
+
"ref": "a-commit-or-branch",
|
|
170
|
+
"accountId": "<account id>"
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Only `provider` and `repository` are required. Each other field enables the checks that need it:
|
|
175
|
+
|
|
176
|
+
| Field | Checks it enables |
|
|
177
|
+
| ------------- | ----------------------------------------------------------------------------------- |
|
|
178
|
+
| `pullRequest` | `getPullRequest`, `listPullRequestFiles`, `getDiff`, `listComments` |
|
|
179
|
+
| `headRef` | `findPullRequest` |
|
|
180
|
+
| `ref` | `readFile`, `listFiles`, `listCommitStatuses` (defaults to the pull request's head) |
|
|
181
|
+
| `accountId` | `getRepositoryPermission` |
|
|
182
|
+
|
|
183
|
+
Each result is an `outcome` of `pass`, `fail` (with a fixed code, below) or `skipped`. A skip has
|
|
184
|
+
one of these codes: `not_bound` (no tool bound), `needs_pull_request`, `needs_head_ref`,
|
|
185
|
+
`needs_ref`, `needs_account` (the field above is missing), `allowlist_mode` (no
|
|
186
|
+
`permissionCredential`, so no permission lookup) and `not_read_only` (a write operation, never run).
|
|
187
|
+
|
|
188
|
+
Write operations are skipped. A read-only tool can only send GET requests. The report holds
|
|
189
|
+
an operation, an outcome and a fixed code for each, and no response data, so you can share it.
|
|
190
|
+
|
|
191
|
+
| Code | Meaning |
|
|
192
|
+
| --------------------------------------- | ---------------------------------------------------------------- |
|
|
193
|
+
| `host_unauthorized`, `host_forbidden` | The host refused the credential for this call. |
|
|
194
|
+
| `host_not_found` | The host doesn't have what was asked for. |
|
|
195
|
+
| `host_rate_limited`, `host_unavailable` | Try again later. |
|
|
196
|
+
| `host_conflict` | The host refused because of the current state. |
|
|
197
|
+
| `host_tool_invalid_result` | The tool's answer doesn't match its operation's shape. |
|
|
198
|
+
| `host_tool_invalid_params` | The tool's schema refused what Wardby sends it. |
|
|
199
|
+
| `host_tool_request_denied` | The tool went outside what a bound tool may request (see below). |
|
|
200
|
+
| `host_tool_no_credential` | See below. |
|
|
201
|
+
| `host_tool_failed` | The tool threw an error. Its message is dropped on purpose. |
|
|
202
|
+
| `host_tool_timeout` | The tool ran out of time or instructions. |
|
|
203
|
+
|
|
204
|
+
`host_tool_no_credential` has these causes: no credential's `repositories` covers this repository,
|
|
205
|
+
the secret can't be decrypted, or the secret is no longer brokered or no longer allows every API
|
|
206
|
+
host.
|
|
207
|
+
|
|
208
|
+
## Tool contract
|
|
209
|
+
|
|
210
|
+
Each tool receives `workspace`, `repo` and `repository` (`workspace/repo`), plus its
|
|
211
|
+
operation's input fields (below). Declare them in `paramsZod`.
|
|
212
|
+
|
|
213
|
+
A tool answers with its operation's result, or `{ "error": "<code>" }` when the host refused,
|
|
214
|
+
where the code is `unauthorized`, `forbidden`, `not_found`, `conflict`, `rate_limited` or
|
|
215
|
+
`unavailable`. Results are checked strictly: an extra key, a missing key or a wrong type fails the
|
|
216
|
+
call with `host_tool_invalid_result`.
|
|
217
|
+
|
|
218
|
+
A pull request object, as returned by `getPullRequest` and `findPullRequest`, has exactly:
|
|
219
|
+
`number` (positive integer), `title`, `body`, `author` (string or null), `state` (`open` or
|
|
220
|
+
`closed`; a merged pull request is `closed` with `merged` true, so map your host's own states),
|
|
221
|
+
`merged` (boolean), `draft` (boolean), `baseRef`, `headRef`, `headSha` (non-empty), `isFork` (boolean) and
|
|
222
|
+
`htmlUrl` (a URL).
|
|
223
|
+
|
|
224
|
+
Read operations (method GET):
|
|
225
|
+
|
|
226
|
+
| Operation | Input fields | Result |
|
|
227
|
+
| ------------------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
228
|
+
| `getPullRequest` | `number` | A pull request object. |
|
|
229
|
+
| `findPullRequest` | `headRef` | `{ pullRequest }`: a pull request object, or null if none. |
|
|
230
|
+
| `listPullRequestFiles` | `number`, `page` | `{ files, nextPage }`. Each file: `filename`, `status` (`added`, `modified`, `removed` or `renamed`), `additions`, `deletions` (non-negative integers) and optionally `previousFilename`. |
|
|
231
|
+
| `getDiff` | `number` | `{ diff }`: the unified diff text. |
|
|
232
|
+
| `readFile` | `ref`, `path` | `{ kind: "file", content }`, `{ kind: "directory" }` or `{ kind: "not_found" }`. No other keys. |
|
|
233
|
+
| `listFiles` | `ref`, `path`, `page` | `{ entries, nextPage }`. Each entry: `path`, `type` (`file` or `directory`) and optionally `size` (non-negative integer). |
|
|
234
|
+
| `listComments` | `number`, `page` | `{ comments, nextPage }`. Each comment: `id` (non-empty), `author` and `authorId` (string or null), `body`, `createdAt`, `path` (string or null), `line` (positive integer or null), `parentId` (string or null), `resolved` (boolean). |
|
|
235
|
+
| `listCommitStatuses` | `ref`, `page` | `{ statuses, nextPage }`. Each status: `key`, `state` (`pending`, `success`, `failure` or `stopped`) and `url` (string or null). |
|
|
236
|
+
| `getRepositoryPermission` | `accountId` | `{ permission }`: `none`, `read`, `triage`, `write`, `maintain` or `admin`. Uses the permission credential and `permissionApiPath`. |
|
|
237
|
+
|
|
238
|
+
`listPullRequestFiles`, `listFiles`, `listComments` and `listCommitStatuses` page. Each returns
|
|
239
|
+
one page per call, with `nextPage`: a string to continue from, or null at the end. To get the next
|
|
240
|
+
page, Wardby passes that string back as the optional `page` input, and it leaves `page` out for the
|
|
241
|
+
first page. Declare `page` in `paramsZod`, because `z.object` drops keys it doesn't name, and a tool
|
|
242
|
+
without it would return the first page every time. `test_host_provider` reads the first page only.
|
|
243
|
+
|
|
244
|
+
`ref` is optional on `readFile` and `listFiles`, where leaving it out means the default branch, so
|
|
245
|
+
declare it as optional there. `listCommitStatuses` always needs one, because statuses belong to a
|
|
246
|
+
commit.
|
|
247
|
+
|
|
248
|
+
Keep a file's `status` to those four words: Wardby treats a `removed` file as having nothing to read
|
|
249
|
+
at the head.
|
|
250
|
+
|
|
251
|
+
Write operations:
|
|
252
|
+
|
|
253
|
+
| Operation | Method | Result |
|
|
254
|
+
| ------------------- | ------ | ---------------------------- |
|
|
255
|
+
| `openPullRequest` | POST | A pull request object. |
|
|
256
|
+
| `updatePullRequest` | PUT | A pull request object. |
|
|
257
|
+
| `createComment` | POST | `{ id }` (non-empty string). |
|
|
258
|
+
| `editComment` | PUT | `{ id }` (non-empty string). |
|
|
259
|
+
| `resolveThread` | POST | `{}` |
|
|
260
|
+
| `submitVerdict` | POST | `{}` |
|
|
261
|
+
| `setCommitStatus` | POST | `{}` |
|
|
262
|
+
|
|
263
|
+
The input fields of the write operations are defined when agents can use a provider, in a later
|
|
264
|
+
release, so tools for them may need changing then. `test_host_provider` never runs them.
|
|
265
|
+
|
|
266
|
+
`normalizeEvent` makes no requests and isn't called yet.
|
|
267
|
+
|
|
268
|
+
Use `fetch(url, { secrets: ["host"] })`. Wardby resolves `host` to the credential for this
|
|
269
|
+
call's repository. A bound tool:
|
|
270
|
+
|
|
271
|
+
- reaches only `apiHosts`, over https on the default port, with no embedded credentials;
|
|
272
|
+
- stays under `repositoryApiPath` for this repository. `getRepositoryPermission` stays under
|
|
273
|
+
`permissionApiPath` instead, and is the only operation that gets `permissionCredential`;
|
|
274
|
+
- uses its operation's method: GET for reads, and POST or PUT for writes;
|
|
275
|
+
- may set only the headers `accept`, `content-type`, `if-match` and `if-none-match`;
|
|
276
|
+
- makes at most three requests per call. No request follows a redirect, whether or not it
|
|
277
|
+
carries a secret: follow a `Location` yourself, which counts as a request and goes through
|
|
278
|
+
the same limits;
|
|
279
|
+
- can't send the query keys `_method` or any starting `x-http-method`, in any case, which some
|
|
280
|
+
frameworks read as the request's method;
|
|
281
|
+
- has its path judged by what a server could turn it into: dot-only segments after decoding
|
|
282
|
+
and encoded separators are refused. A few unusual file names can therefore be refused, and a
|
|
283
|
+
repository path must be sent literally, not percent-encoded;
|
|
284
|
+
- has no datastore, shared datastore or readable secrets, and its `console` output is dropped;
|
|
285
|
+
- runs under the usual sandbox limits: 10 s per call, 8 s per fetch, 8 MiB per response.
|
|
286
|
+
|
|
287
|
+
Anything outside these limits fails the call with `host_tool_request_denied`, even if the
|
|
288
|
+
tool catches the error.
|
|
289
|
+
|
|
290
|
+
## Remove a provider
|
|
291
|
+
|
|
292
|
+
`delete_host_provider` removes a provider and its snapshots. It's refused while an agent links
|
|
293
|
+
to one of its repositories. `delete_secret` is refused while a provider uses that secret, and
|
|
294
|
+
names the provider.
|
package/docs/jira-agents.md
CHANGED
|
@@ -466,9 +466,12 @@ What happens:
|
|
|
466
466
|
the same branch instead of opening a second pull request. The run message
|
|
467
467
|
lists up to ten open pull requests recorded for the issue this way — any
|
|
468
468
|
agent's, not only the triggered agent's own — each with its own run id, so
|
|
469
|
-
a follow-up can continue every one the change touches.
|
|
469
|
+
a follow-up can continue every one the change touches. GitHub issues behave
|
|
470
|
+
the same way; see
|
|
471
|
+
[Follow-ups on an issue](code-review-agents.md#follow-ups-on-an-issue).
|
|
470
472
|
- **Several repositories.** When the issue leads to pull requests in more
|
|
471
|
-
than one repository (in the same run, or in later runs for the same issue
|
|
473
|
+
than one repository (in the same run, or in later runs for the same issue,
|
|
474
|
+
Jira or GitHub),
|
|
472
475
|
each pull request's description gets a **Related pull requests** section
|
|
473
476
|
naming the issue and every pull request recorded for it, merged and closed
|
|
474
477
|
ones included as context; see
|
|
@@ -574,8 +577,16 @@ A run is attributed when:
|
|
|
574
577
|
- its parent run is attributed (sub-agents and coding runs inherit, and cannot
|
|
575
578
|
change it).
|
|
576
579
|
|
|
580
|
+
GitHub issues are attributed the same way, to a work item with provider
|
|
581
|
+
`github` and key `owner/repo#N`: a run started by a mention on the issue (and
|
|
582
|
+
every sub-agent and coding run it starts), and runs on a pull request opened
|
|
583
|
+
from it. `cost_report` lists them like any other work item
|
|
584
|
+
(`provider: "github"` narrows to them).
|
|
585
|
+
|
|
577
586
|
When a run is attributed to an issue, whatever the source, coding runs it
|
|
578
|
-
starts name that issue in their pull request's title and body.
|
|
587
|
+
starts name that issue in their pull request's title and body. A GitHub issue
|
|
588
|
+
is named only in the body, as `From issue #N`, on a pull request in the
|
|
589
|
+
issue's own repository. The issue total
|
|
579
590
|
in a Jira comment's spend line covers every run attributed to that issue,
|
|
580
591
|
whichever agent ran it.
|
|
581
592
|
|
|
@@ -602,11 +613,9 @@ How to read the numbers:
|
|
|
602
613
|
- You see the runs of agents you own and runs you triggered, the same as
|
|
603
614
|
`list_runs` and `get_run`.
|
|
604
615
|
|
|
605
|
-
On GKE,
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
but their per-model breakdown isn't recorded. See
|
|
609
|
-
[Getting started on GKE](getting-started-gke.md).
|
|
616
|
+
On GKE, the coding proxy needs a database grant to write per-model usage for
|
|
617
|
+
coding runs; `deploy/gke/up.sh` applies it when you upgrade. See
|
|
618
|
+
[Upgrading an existing deployment](getting-started-gke.md#upgrading-an-existing-deployment).
|
|
610
619
|
|
|
611
620
|
### Company-managed projects using Epic Link
|
|
612
621
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: invariant
|
|
3
|
+
title: Blob absence must distinguish missing infrastructure
|
|
4
|
+
description: Mapping a storage outage to not_found can delete valid dependency snapshot metadata.
|
|
5
|
+
tags: [storage, cache, providers]
|
|
6
|
+
status: stable
|
|
7
|
+
generated: { by: wardby-architect/gpt-6.1-sol, at: 2026-10-16T18:34:00.557Z }
|
|
8
|
+
sources:
|
|
9
|
+
- id: missing
|
|
10
|
+
url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/providers/storage/s3.ts#L26-L32
|
|
11
|
+
- id: cleanup
|
|
12
|
+
url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/providers/coding-proxy/dependency-cache/service.ts#L275-L295
|
|
13
|
+
wardby:
|
|
14
|
+
schema: 1
|
|
15
|
+
roles: [builder, reviewer]
|
|
16
|
+
affects: ["src/providers/storage/**", "src/providers/coding-proxy/dependency-cache/service.ts"]
|
|
17
|
+
citations:
|
|
18
|
+
- id: missing
|
|
19
|
+
repo: github:wardby/wardby
|
|
20
|
+
path: src/providers/storage/s3.ts
|
|
21
|
+
lines: [26, 32]
|
|
22
|
+
symbol: isNotFound
|
|
23
|
+
sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
|
|
24
|
+
spanHash: sha256:686cdad150c8c0d58e6b9acc5a2cd0bdf2e65b07b5ce8740938f43747f1408b7
|
|
25
|
+
- id: cleanup
|
|
26
|
+
repo: github:wardby/wardby
|
|
27
|
+
path: src/providers/coding-proxy/dependency-cache/service.ts
|
|
28
|
+
lines: [275, 295]
|
|
29
|
+
symbol: download
|
|
30
|
+
sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
|
|
31
|
+
spanHash: sha256:02d4e058438d562ba55b6681e0267e890eed1ef82159a3b332d214f2fd066427
|
|
32
|
+
confidence: high
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
The cache deletes snapshot metadata when getStream raises BlobStoreError with code not_found. The S3 adapter therefore maps missing keys, including the bare HeadObject NotFound response, but leaves NoSuchBucket and other failures as errors.[^missing][^cleanup]
|
|
36
|
+
|
|
37
|
+
**Why:** not_found authorizes metadata cleanup; it is not a generic unavailable response. New storage adapters must preserve this distinction so an infrastructure failure cannot masquerade as a dangling snapshot.
|
|
38
|
+
|
|
39
|
+
[^missing]: src/providers/storage/s3.ts, lines 26-32.
|
|
40
|
+
|
|
41
|
+
[^cleanup]: src/providers/coding-proxy/dependency-cache/service.ts, lines 275-295.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: invariant
|
|
3
|
+
title: Untrusted file bounds belong to the open descriptor
|
|
4
|
+
description: Checking a path before reading it leaves file substitution and growth races across worker boundaries.
|
|
5
|
+
tags: [coding, isolation, files]
|
|
6
|
+
status: stable
|
|
7
|
+
generated: { by: wardby-architect/gpt-6.1-sol, at: 2026-10-16T18:34:00.557Z }
|
|
8
|
+
sources:
|
|
9
|
+
- id: read
|
|
10
|
+
url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/coding-worker/artifact.ts#L12-L48
|
|
11
|
+
- id: skills
|
|
12
|
+
url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/coding-worker/skills.ts#L43-L54
|
|
13
|
+
- id: result
|
|
14
|
+
url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/providers/jobs/docker.ts#L1263-L1277
|
|
15
|
+
wardby:
|
|
16
|
+
schema: 1
|
|
17
|
+
roles: [builder, reviewer]
|
|
18
|
+
affects: ["src/coding-worker/artifact.ts", "src/coding-worker/skills.ts", "src/providers/jobs/docker.ts"]
|
|
19
|
+
citations:
|
|
20
|
+
- id: read
|
|
21
|
+
repo: github:wardby/wardby
|
|
22
|
+
path: src/coding-worker/artifact.ts
|
|
23
|
+
lines: [12, 48]
|
|
24
|
+
symbol: readBoundedRegularFile
|
|
25
|
+
sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
|
|
26
|
+
spanHash: sha256:ce5173dc2723b798c03e33fcb780c5c4da5b2dd15f2b517c4db77fec841f788d
|
|
27
|
+
- id: skills
|
|
28
|
+
repo: github:wardby/wardby
|
|
29
|
+
path: src/coding-worker/skills.ts
|
|
30
|
+
lines: [43, 54]
|
|
31
|
+
symbol: skillNameFromFile
|
|
32
|
+
sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
|
|
33
|
+
spanHash: sha256:022ed743f1ccb279f73e4520bf458ad28eeace035ae695853c9e5f7ee52087d4
|
|
34
|
+
- id: result
|
|
35
|
+
repo: github:wardby/wardby
|
|
36
|
+
path: src/providers/jobs/docker.ts
|
|
37
|
+
lines: [1263, 1277]
|
|
38
|
+
symbol: readResultArtifact
|
|
39
|
+
sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
|
|
40
|
+
spanHash: sha256:da6466b5dc44b1de79f473668648048b3f3ef3f82a6cce61516e8bfa76efb996
|
|
41
|
+
confidence: high
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
The bounded reader opens without following a final symlink and without blocking on a FIFO, checks the opened descriptor against the path inode, and reads at most one byte beyond the limit to detect growth. Both repository skill scanning and Docker result collection use it.[^read][^skills][^result]
|
|
45
|
+
|
|
46
|
+
**What to do:** preserve descriptor checks and the bounded read together. Replacing them with a path stat followed by readFile reopens substitution and growth races even when the initial size was safe.
|
|
47
|
+
|
|
48
|
+
[^read]: src/coding-worker/artifact.ts, lines 12-48.
|
|
49
|
+
|
|
50
|
+
[^skills]: src/coding-worker/skills.ts, lines 43-54.
|
|
51
|
+
|
|
52
|
+
[^result]: src/providers/jobs/docker.ts, lines 1263-1277.
|