@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
|
@@ -4,28 +4,12 @@ export declare const RESERVED_BUNDLE_FILES: Set<string>;
|
|
|
4
4
|
declare const CitationSchema: z.ZodObject<{
|
|
5
5
|
id: z.ZodOptional<z.ZodString>;
|
|
6
6
|
repo: z.ZodString;
|
|
7
|
-
path: z.
|
|
8
|
-
lines: z.ZodOptional<z.
|
|
7
|
+
path: z.ZodString;
|
|
8
|
+
lines: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
9
9
|
symbol: z.ZodOptional<z.ZodString>;
|
|
10
10
|
sha: z.ZodString;
|
|
11
11
|
spanHash: z.ZodString;
|
|
12
|
-
},
|
|
13
|
-
path: string;
|
|
14
|
-
repo: string;
|
|
15
|
-
sha: string;
|
|
16
|
-
spanHash: string;
|
|
17
|
-
symbol?: string | undefined;
|
|
18
|
-
id?: string | undefined;
|
|
19
|
-
lines?: [number, number] | undefined;
|
|
20
|
-
}, {
|
|
21
|
-
path: string;
|
|
22
|
-
repo: string;
|
|
23
|
-
sha: string;
|
|
24
|
-
spanHash: string;
|
|
25
|
-
symbol?: string | undefined;
|
|
26
|
-
id?: string | undefined;
|
|
27
|
-
lines?: [number, number] | undefined;
|
|
28
|
-
}>;
|
|
12
|
+
}, z.core.$strip>;
|
|
29
13
|
export type KnowledgeCitation = z.infer<typeof CitationSchema>;
|
|
30
14
|
export interface ParsedConcept {
|
|
31
15
|
path: string;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a repository's knowledge bundle lives (docs/knowledge.md, "Where the
|
|
3
|
+
* bundle lives"): the folder `.wardby/knowledge.yaml` names, else
|
|
4
|
+
* DEFAULT_KNOWLEDGE_BUNDLE_PATH. A missing, unreadable, or invalid file never
|
|
5
|
+
* fails anything: it degrades to the default, with a warning when the file
|
|
6
|
+
* exists but cannot be used.
|
|
7
|
+
*/
|
|
8
|
+
export declare const KNOWLEDGE_CONFIG_PATH = ".wardby/knowledge.yaml";
|
|
9
|
+
export declare const KNOWLEDGE_CONFIG_MAX_BYTES: number;
|
|
10
|
+
export interface KnowledgeLocation {
|
|
11
|
+
bundlePath: string;
|
|
12
|
+
/** Set when `.wardby/knowledge.yaml` exists but was ignored, saying why. */
|
|
13
|
+
warning?: string;
|
|
14
|
+
}
|
|
15
|
+
export type KnowledgeConfigParse = {
|
|
16
|
+
ok: true;
|
|
17
|
+
bundlePath: string;
|
|
18
|
+
} | {
|
|
19
|
+
ok: false;
|
|
20
|
+
error: string;
|
|
21
|
+
};
|
|
22
|
+
/** `path: <repo-relative folder>`, the file's only key. */
|
|
23
|
+
export declare function parseKnowledgeConfig(text: string): KnowledgeConfigParse;
|
|
24
|
+
/** A repo-relative POSIX folder, without `./` or trailing slashes, outside `.wardby/` and `.git/`. */
|
|
25
|
+
export declare function normalizeBundlePath(raw: string): KnowledgeConfigParse;
|
|
26
|
+
/**
|
|
27
|
+
* The bundle location, given a reader for `.wardby/knowledge.yaml` that
|
|
28
|
+
* returns null when the file does not exist. A reader that throws, like an
|
|
29
|
+
* invalid file, yields the default with a warning.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveKnowledgeLocation(readConfig: () => Promise<string | null | undefined>): Promise<KnowledgeLocation>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { parse as parseYaml } from "yaml";
|
|
2
|
+
import { DEFAULT_KNOWLEDGE_BUNDLE_PATH } from "./concept.js";
|
|
3
|
+
/**
|
|
4
|
+
* Where a repository's knowledge bundle lives (docs/knowledge.md, "Where the
|
|
5
|
+
* bundle lives"): the folder `.wardby/knowledge.yaml` names, else
|
|
6
|
+
* DEFAULT_KNOWLEDGE_BUNDLE_PATH. A missing, unreadable, or invalid file never
|
|
7
|
+
* fails anything: it degrades to the default, with a warning when the file
|
|
8
|
+
* exists but cannot be used.
|
|
9
|
+
*/
|
|
10
|
+
export const KNOWLEDGE_CONFIG_PATH = ".wardby/knowledge.yaml";
|
|
11
|
+
export const KNOWLEDGE_CONFIG_MAX_BYTES = 4 * 1024;
|
|
12
|
+
const MAX_BUNDLE_PATH_LENGTH = 200;
|
|
13
|
+
/** `path: <repo-relative folder>`, the file's only key. */
|
|
14
|
+
export function parseKnowledgeConfig(text) {
|
|
15
|
+
let doc;
|
|
16
|
+
try {
|
|
17
|
+
doc = parseYaml(text);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return { ok: false, error: "it is not valid YAML" };
|
|
21
|
+
}
|
|
22
|
+
if (typeof doc !== "object" || doc === null || Array.isArray(doc))
|
|
23
|
+
return { ok: false, error: "it must be a mapping with a `path` key" };
|
|
24
|
+
const keys = Object.keys(doc);
|
|
25
|
+
const unknown = keys.filter((k) => k !== "path");
|
|
26
|
+
if (unknown.length > 0)
|
|
27
|
+
return { ok: false, error: `unknown key ${unknown.map((k) => `\`${k}\``).join(", ")}` };
|
|
28
|
+
const { path } = doc;
|
|
29
|
+
if (typeof path !== "string")
|
|
30
|
+
return { ok: false, error: "`path` must be a string" };
|
|
31
|
+
return normalizeBundlePath(path);
|
|
32
|
+
}
|
|
33
|
+
/** A repo-relative POSIX folder, without `./` or trailing slashes, outside `.wardby/` and `.git/`. */
|
|
34
|
+
export function normalizeBundlePath(raw) {
|
|
35
|
+
let path = raw.trim();
|
|
36
|
+
while (path.startsWith("./"))
|
|
37
|
+
path = path.slice(2);
|
|
38
|
+
path = path.replace(/\/+$/, "");
|
|
39
|
+
if (path === "" || path === ".")
|
|
40
|
+
return { ok: false, error: "`path` must name a folder inside the repository" };
|
|
41
|
+
if (path.length > MAX_BUNDLE_PATH_LENGTH)
|
|
42
|
+
return { ok: false, error: `\`path\` must be at most ${MAX_BUNDLE_PATH_LENGTH} characters` };
|
|
43
|
+
// eslint-disable-next-line no-control-regex
|
|
44
|
+
if (/[\u0000-\u001f\u007f\\]/.test(path))
|
|
45
|
+
return { ok: false, error: "`path` must be a plain POSIX path" };
|
|
46
|
+
if (path.startsWith("/"))
|
|
47
|
+
return { ok: false, error: "`path` must be relative to the repository root" };
|
|
48
|
+
const segments = path.split("/");
|
|
49
|
+
if (segments.some((s) => s === "" || s === "." || s === ".."))
|
|
50
|
+
return { ok: false, error: "`path` must not contain empty, `.` or `..` segments" };
|
|
51
|
+
if (segments[0] === ".wardby" || segments[0] === ".git")
|
|
52
|
+
return { ok: false, error: "`path` must not be inside `.wardby/` or `.git/`" };
|
|
53
|
+
return { ok: true, bundlePath: path };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The bundle location, given a reader for `.wardby/knowledge.yaml` that
|
|
57
|
+
* returns null when the file does not exist. A reader that throws, like an
|
|
58
|
+
* invalid file, yields the default with a warning.
|
|
59
|
+
*/
|
|
60
|
+
export async function resolveKnowledgeLocation(readConfig) {
|
|
61
|
+
let text;
|
|
62
|
+
try {
|
|
63
|
+
text = await readConfig();
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
67
|
+
return { bundlePath: DEFAULT_KNOWLEDGE_BUNDLE_PATH, warning: ignoredWarning(`it could not be read (${reason})`) };
|
|
68
|
+
}
|
|
69
|
+
if (text === null || text === undefined)
|
|
70
|
+
return { bundlePath: DEFAULT_KNOWLEDGE_BUNDLE_PATH };
|
|
71
|
+
const parsed = parseKnowledgeConfig(text);
|
|
72
|
+
if (!parsed.ok)
|
|
73
|
+
return { bundlePath: DEFAULT_KNOWLEDGE_BUNDLE_PATH, warning: ignoredWarning(parsed.error) };
|
|
74
|
+
return { bundlePath: parsed.bundlePath };
|
|
75
|
+
}
|
|
76
|
+
function ignoredWarning(reason) {
|
|
77
|
+
return `${KNOWLEDGE_CONFIG_PATH} was ignored because ${reason}; using ${DEFAULT_KNOWLEDGE_BUNDLE_PATH}/.`;
|
|
78
|
+
}
|
|
@@ -38,16 +38,17 @@ export declare function assertAgentAccess<A extends AgentRef>(ctx: McpRequestCon
|
|
|
38
38
|
export declare function requireAgentAccess(ctx: McpRequestContext, id: string, required: AgentLevel | "owner", db?: Pick<PrismaClient, "agent" | "resourceGrant">): Promise<{
|
|
39
39
|
agent: {
|
|
40
40
|
name: string;
|
|
41
|
+
updatedAt: Date;
|
|
41
42
|
model: string;
|
|
42
43
|
budgetUsd: import("@prisma/client-runtime-utils").Decimal;
|
|
43
44
|
maxTurns: number;
|
|
44
|
-
createdAt: Date;
|
|
45
|
-
updatedAt: Date;
|
|
46
45
|
kind: import("#prisma").AgentKind;
|
|
46
|
+
createdAt: Date;
|
|
47
47
|
id: string;
|
|
48
48
|
ownerId: string | null;
|
|
49
49
|
nativeExecutionMode: import("#prisma").NativeExecutionMode;
|
|
50
50
|
systemPrompt: string;
|
|
51
|
+
allowedOverrunPercent: number;
|
|
51
52
|
schedule: string | null;
|
|
52
53
|
timezone: string;
|
|
53
54
|
scheduleEnabled: boolean;
|
|
@@ -68,6 +69,13 @@ export declare function requireAgentAccess(ctx: McpRequestContext, id: string, r
|
|
|
68
69
|
* it can adopt the agent first (make_owner / grants adopt-public).
|
|
69
70
|
*/
|
|
70
71
|
export declare function requireBindingOwner(ctx: McpRequestContext, agent: AgentRef): void;
|
|
72
|
+
/**
|
|
73
|
+
* requireBindingOwner, plus: nothing owner-held may be bound to an agent
|
|
74
|
+
* everyone can write (anyone could then rewrite it to use the binding).
|
|
75
|
+
*/
|
|
76
|
+
export declare function requireBindable(ctx: McpRequestContext, agent: AgentRef, db?: GrantDb): Promise<void>;
|
|
77
|
+
/** The public-write half of requireBindable, for paths that skip the owner check (an admin's adminOverride). */
|
|
78
|
+
export declare function requireNotPublicWritable(agent: AgentRef, db: GrantDb): Promise<void>;
|
|
71
79
|
/** Prisma where for agent listings: own rows plus rows granted >= read; the operator sees all. */
|
|
72
80
|
export declare function readableAgentsWhere(ctx: McpRequestContext, db?: GrantDb): Promise<Prisma.AgentWhereInput>;
|
|
73
81
|
/** One grant lookup for a whole listing: returns agent -> the caller's access. */
|
package/dist/mcp/auth/access.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { atLeast, effectiveAccess, grantedAccessMap, grantedIds } from "../../core/grants.js";
|
|
1
|
+
import { atLeast, effectiveAccess, grantedAccessMap, grantedIds, isPublicWritable, } from "../../core/grants.js";
|
|
2
2
|
import { McpError } from "../errors.js";
|
|
3
3
|
export function agentNotFound(id) {
|
|
4
4
|
return new McpError(404, `Agent "${id}" not found.`);
|
|
@@ -42,6 +42,20 @@ export function requireBindingOwner(ctx, agent) {
|
|
|
42
42
|
throw new McpError(403, `Only the owner of agent "${agent.id}" can change its bindings.`);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* requireBindingOwner, plus: nothing owner-held may be bound to an agent
|
|
47
|
+
* everyone can write (anyone could then rewrite it to use the binding).
|
|
48
|
+
*/
|
|
49
|
+
export async function requireBindable(ctx, agent, db = ctx.db) {
|
|
50
|
+
requireBindingOwner(ctx, agent);
|
|
51
|
+
await requireNotPublicWritable(agent, db);
|
|
52
|
+
}
|
|
53
|
+
/** The public-write half of requireBindable, for paths that skip the owner check (an admin's adminOverride). */
|
|
54
|
+
export async function requireNotPublicWritable(agent, db) {
|
|
55
|
+
if (await isPublicWritable(db, agent.id)) {
|
|
56
|
+
throw new McpError(409, `Agent "${agent.id}" is writable by everyone, so nothing can be bound to it; revoke or lower the everyone grant first.`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
45
59
|
/** Prisma where for agent listings: own rows plus rows granted >= read; the operator sees all. */
|
|
46
60
|
export async function readableAgentsWhere(ctx, db = ctx.db) {
|
|
47
61
|
if (ctx.operator)
|
|
@@ -77,16 +77,18 @@ export interface MigrationReport {
|
|
|
77
77
|
}
|
|
78
78
|
export declare function migrationReport(db: ReportDb): Promise<MigrationReport>;
|
|
79
79
|
export declare function formatMigrationReport(report: MigrationReport): string;
|
|
80
|
+
/** A binding that belongs to its resource's owner; for an MCP server, boundName is the server name. */
|
|
81
|
+
export type BindingKind = "secret" | "datastore" | "mcp_server";
|
|
80
82
|
export interface AdoptedAgent {
|
|
81
83
|
agentId: string;
|
|
82
84
|
name: string;
|
|
83
85
|
bindingsRemoved: {
|
|
84
|
-
kind:
|
|
86
|
+
kind: BindingKind;
|
|
85
87
|
boundName: string;
|
|
86
88
|
resourceId: string;
|
|
87
89
|
}[];
|
|
88
90
|
bindingsKept: {
|
|
89
|
-
kind:
|
|
91
|
+
kind: BindingKind;
|
|
90
92
|
boundName: string;
|
|
91
93
|
}[];
|
|
92
94
|
capabilitiesStamped: string[];
|
|
@@ -126,7 +128,7 @@ export declare function formatAdoptResult(result: AdoptResult): string;
|
|
|
126
128
|
export interface PruneResult {
|
|
127
129
|
dryRun: boolean;
|
|
128
130
|
removed: {
|
|
129
|
-
kind:
|
|
131
|
+
kind: BindingKind;
|
|
130
132
|
agentId: string;
|
|
131
133
|
agentName: string;
|
|
132
134
|
boundName: string;
|
|
@@ -134,7 +136,7 @@ export interface PruneResult {
|
|
|
134
136
|
resourceOwnerId: string | null;
|
|
135
137
|
}[];
|
|
136
138
|
}
|
|
137
|
-
/** Deletes cross-owner secret/datastore bindings on owned agents, in one transaction. */
|
|
139
|
+
/** Deletes cross-owner secret/datastore/MCP server bindings on owned agents, in one transaction. */
|
|
138
140
|
export declare function pruneBindings(db: PrismaClient, opts: {
|
|
139
141
|
dryRun: boolean;
|
|
140
142
|
}): Promise<PruneResult>;
|
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
* owner's own bindings, deleting the rest, and stamping the new owner's
|
|
15
15
|
* consent on attachments of its own tools. Other attachments stay inert
|
|
16
16
|
* and are printed with the attach_tool call that re-grants them.
|
|
17
|
-
* - prune-bindings deletes the secret/datastore bindings on owned agents
|
|
17
|
+
* - prune-bindings deletes the secret/datastore/MCP server bindings on owned agents
|
|
18
18
|
* whose resource another principal owns (inert at run time since the
|
|
19
19
|
* grants release) and prints each one: the "removed and listed" record.
|
|
20
20
|
*/
|
|
21
21
|
import { parseArgs } from "node:util";
|
|
22
22
|
import { Prisma } from "#prisma";
|
|
23
|
-
import { canDelegate } from "../../core/grants.js";
|
|
23
|
+
import { canDelegate, filterUnusableMcpServers } from "../../core/grants.js";
|
|
24
24
|
import { resolvePrincipal } from "./principal.js";
|
|
25
25
|
const USAGE = "Use grants migration-report [--json] | grants adopt-public --owner <subject> [--dry-run] [--keep-everyone-execute] | grants prune-bindings [--dry-run].";
|
|
26
26
|
/** The attach_tool call (MCP) that re-grants an attachment's capabilities, for its owner to review and run. */
|
|
@@ -276,8 +276,14 @@ export async function adoptPublic(db, opts) {
|
|
|
276
276
|
include: { datastore: { select: { ownerId: true } } },
|
|
277
277
|
orderBy: { boundName: "asc" },
|
|
278
278
|
});
|
|
279
|
+
const mcpServers = await tx.agentMcpServer.findMany({
|
|
280
|
+
where: { agentId: id },
|
|
281
|
+
include: { server: { select: { id: true, name: true, ownerId: true } } },
|
|
282
|
+
orderBy: { serverId: "asc" },
|
|
283
|
+
});
|
|
279
284
|
const foreignSecrets = secrets.filter((b) => b.secret.ownerId !== owner.id);
|
|
280
285
|
const foreignDatastores = datastores.filter((b) => b.datastore.ownerId !== owner.id);
|
|
286
|
+
const foreignMcpServers = await filterUnusableMcpServers(tx, () => owner.id, mcpServers);
|
|
281
287
|
for (const b of foreignSecrets) {
|
|
282
288
|
await tx.agentSecret.delete({ where: { agentId_secretId: { agentId: id, secretId: b.secretId } } });
|
|
283
289
|
}
|
|
@@ -286,6 +292,9 @@ export async function adoptPublic(db, opts) {
|
|
|
286
292
|
where: { agentId_datastoreId: { agentId: id, datastoreId: b.datastoreId } },
|
|
287
293
|
});
|
|
288
294
|
}
|
|
295
|
+
for (const b of foreignMcpServers) {
|
|
296
|
+
await tx.agentMcpServer.delete({ where: { agentId_serverId: { agentId: id, serverId: b.serverId } } });
|
|
297
|
+
}
|
|
289
298
|
// Only the tool's owner could attach its private tool to a public
|
|
290
299
|
// agent or change that attachment's capabilities, so those carry
|
|
291
300
|
// the new owner's consent. Everything else stays inert.
|
|
@@ -350,6 +359,11 @@ export async function adoptPublic(db, opts) {
|
|
|
350
359
|
boundName: b.boundName,
|
|
351
360
|
resourceId: b.datastoreId,
|
|
352
361
|
})),
|
|
362
|
+
...foreignMcpServers.map((b) => ({
|
|
363
|
+
kind: "mcp_server",
|
|
364
|
+
boundName: b.server.name,
|
|
365
|
+
resourceId: b.serverId,
|
|
366
|
+
})),
|
|
353
367
|
],
|
|
354
368
|
bindingsKept: [
|
|
355
369
|
...secrets
|
|
@@ -358,6 +372,9 @@ export async function adoptPublic(db, opts) {
|
|
|
358
372
|
...datastores
|
|
359
373
|
.filter((b) => b.datastore.ownerId === owner.id)
|
|
360
374
|
.map((b) => ({ kind: "datastore", boundName: b.boundName })),
|
|
375
|
+
...mcpServers
|
|
376
|
+
.filter((b) => !foreignMcpServers.includes(b))
|
|
377
|
+
.map((b) => ({ kind: "mcp_server", boundName: b.server.name })),
|
|
361
378
|
],
|
|
362
379
|
capabilitiesStamped: own.map((at) => at.tool.name),
|
|
363
380
|
foreignTools: attachments
|
|
@@ -411,7 +428,7 @@ export function formatAdoptResult(result) {
|
|
|
411
428
|
}
|
|
412
429
|
return lines.join("\n");
|
|
413
430
|
}
|
|
414
|
-
/** Deletes cross-owner secret/datastore bindings on owned agents, in one transaction. */
|
|
431
|
+
/** Deletes cross-owner secret/datastore/MCP server bindings on owned agents, in one transaction. */
|
|
415
432
|
export async function pruneBindings(db, opts) {
|
|
416
433
|
return db.$transaction(async (tx) => {
|
|
417
434
|
const secrets = await tx.agentSecret.findMany({
|
|
@@ -424,8 +441,17 @@ export async function pruneBindings(db, opts) {
|
|
|
424
441
|
include: { agent: { select: { name: true, ownerId: true } }, datastore: { select: { ownerId: true } } },
|
|
425
442
|
orderBy: [{ agentId: "asc" }, { boundName: "asc" }],
|
|
426
443
|
});
|
|
444
|
+
const mcpServers = await tx.agentMcpServer.findMany({
|
|
445
|
+
where: { agent: { ownerId: { not: null } } },
|
|
446
|
+
include: {
|
|
447
|
+
agent: { select: { name: true, ownerId: true } },
|
|
448
|
+
server: { select: { id: true, name: true, ownerId: true } },
|
|
449
|
+
},
|
|
450
|
+
orderBy: [{ agentId: "asc" }, { serverId: "asc" }],
|
|
451
|
+
});
|
|
427
452
|
const foreignSecrets = secrets.filter((b) => b.secret.ownerId !== b.agent.ownerId);
|
|
428
453
|
const foreignDatastores = datastores.filter((b) => b.datastore.ownerId !== b.agent.ownerId);
|
|
454
|
+
const foreignMcpServers = await filterUnusableMcpServers(tx, (b) => b.agent.ownerId, mcpServers);
|
|
429
455
|
if (!opts.dryRun) {
|
|
430
456
|
for (const b of foreignSecrets) {
|
|
431
457
|
await tx.agentSecret.delete({ where: { agentId_secretId: { agentId: b.agentId, secretId: b.secretId } } });
|
|
@@ -435,6 +461,11 @@ export async function pruneBindings(db, opts) {
|
|
|
435
461
|
where: { agentId_datastoreId: { agentId: b.agentId, datastoreId: b.datastoreId } },
|
|
436
462
|
});
|
|
437
463
|
}
|
|
464
|
+
for (const b of foreignMcpServers) {
|
|
465
|
+
await tx.agentMcpServer.delete({
|
|
466
|
+
where: { agentId_serverId: { agentId: b.agentId, serverId: b.serverId } },
|
|
467
|
+
});
|
|
468
|
+
}
|
|
438
469
|
}
|
|
439
470
|
return {
|
|
440
471
|
dryRun: opts.dryRun,
|
|
@@ -455,6 +486,14 @@ export async function pruneBindings(db, opts) {
|
|
|
455
486
|
resourceId: b.datastoreId,
|
|
456
487
|
resourceOwnerId: b.datastore.ownerId,
|
|
457
488
|
})),
|
|
489
|
+
...foreignMcpServers.map((b) => ({
|
|
490
|
+
kind: "mcp_server",
|
|
491
|
+
agentId: b.agentId,
|
|
492
|
+
agentName: b.agent.name,
|
|
493
|
+
boundName: b.server.name,
|
|
494
|
+
resourceId: b.serverId,
|
|
495
|
+
resourceOwnerId: b.server.ownerId,
|
|
496
|
+
})),
|
|
458
497
|
],
|
|
459
498
|
};
|
|
460
499
|
}, { isolationLevel: Prisma.TransactionIsolationLevel.Serializable });
|
|
@@ -26,8 +26,8 @@ export declare function visibleToPrincipal(principalId: string): {
|
|
|
26
26
|
};
|
|
27
27
|
export declare function requireOwnedBudgetGroup(db: PrismaClient, id: string, principalId: string): Promise<{
|
|
28
28
|
name: string;
|
|
29
|
-
createdAt: Date;
|
|
30
29
|
updatedAt: Date;
|
|
30
|
+
createdAt: Date;
|
|
31
31
|
id: string;
|
|
32
32
|
ownerId: string | null;
|
|
33
33
|
dailyBudgetUsd: import("@prisma/client-runtime-utils").Decimal | null;
|
|
@@ -37,8 +37,8 @@ export declare function requireOwnedBudgetGroup(db: PrismaClient, id: string, pr
|
|
|
37
37
|
}>;
|
|
38
38
|
export declare function requireReadableBudgetGroup(db: Pick<PrismaClient, "budgetGroup">, id: string, principalId: string): Promise<{
|
|
39
39
|
name: string;
|
|
40
|
-
createdAt: Date;
|
|
41
40
|
updatedAt: Date;
|
|
41
|
+
createdAt: Date;
|
|
42
42
|
id: string;
|
|
43
43
|
ownerId: string | null;
|
|
44
44
|
dailyBudgetUsd: import("@prisma/client-runtime-utils").Decimal | null;
|
|
@@ -50,8 +50,8 @@ export declare function requireOwnedSecret(db: PrismaClient, id: string, princip
|
|
|
50
50
|
export declare function requireOwnedWebhook(db: PrismaClient, id: string, principalId: string): Promise<void>;
|
|
51
51
|
export declare function requireOwnedDatastore(db: PrismaClient, id: string, principalId: string): Promise<{
|
|
52
52
|
name: string;
|
|
53
|
-
createdAt: Date;
|
|
54
53
|
updatedAt: Date;
|
|
54
|
+
createdAt: Date;
|
|
55
55
|
id: string;
|
|
56
56
|
ownerId: string | null;
|
|
57
57
|
}>;
|
|
@@ -72,14 +72,14 @@ export declare function assertStrictlyOwnedTool(tool: Tool | null, id: string, p
|
|
|
72
72
|
* triggered them. No canRead/null=public path exists here on purpose.
|
|
73
73
|
*/
|
|
74
74
|
export declare function requireOwnedTask(db: PrismaClient, taskId: string, principalId: string): Promise<{
|
|
75
|
+
updatedAt: Date;
|
|
75
76
|
error: import("@prisma/client/runtime/client").JsonValue | null;
|
|
76
|
-
status: import("#prisma").TaskStatus;
|
|
77
77
|
runId: string | null;
|
|
78
|
-
createdAt: Date;
|
|
79
|
-
updatedAt: Date;
|
|
80
|
-
kind: import("#prisma").TaskKind;
|
|
81
78
|
result: import("@prisma/client/runtime/client").JsonValue | null;
|
|
79
|
+
kind: import("#prisma").TaskKind;
|
|
80
|
+
createdAt: Date;
|
|
82
81
|
id: string;
|
|
82
|
+
status: import("#prisma").TaskStatus;
|
|
83
83
|
principalId: string | null;
|
|
84
84
|
inputRequests: import("@prisma/client/runtime/client").JsonValue | null;
|
|
85
85
|
inputResponses: import("@prisma/client/runtime/client").JsonValue | null;
|
|
@@ -19,7 +19,9 @@ export declare const SCOPES_SUPPORTED: string[];
|
|
|
19
19
|
* runs next to every coding run that names an entry; admin:view reads every
|
|
20
20
|
* owner's runs (the admin viewer API); models:admin changes the model catalog,
|
|
21
21
|
* which prices every principal's runs; power:manage scales the shared coding
|
|
22
|
-
* proxy and native gateway to zero (power_sleep) and reads their state
|
|
22
|
+
* proxy and native gateway to zero (power_sleep) and reads their state;
|
|
23
|
+
* hosts:admin registers host providers, whose approved tools run in the push
|
|
24
|
+
* and pull request flow.
|
|
23
25
|
* A token scope only DELEGATES — it never authorizes on its own:
|
|
24
26
|
* requireScope/requireAnyScope honour one only when one of the caller's
|
|
25
27
|
* roles (McpRequestContext.roles, resolved live per request) grants it.
|
|
@@ -30,6 +30,9 @@ export const SCOPES_SUPPORTED = [
|
|
|
30
30
|
// Scale the coding proxy and native gateway to zero now (power_sleep) and
|
|
31
31
|
// read their state (power_status); low-power mode only (docs/getting-started-gke.md).
|
|
32
32
|
"power:manage",
|
|
33
|
+
// Register host providers and approve their tools (docs/host-providers.md).
|
|
34
|
+
// Bound tools decide who has permission and who wrote a comment.
|
|
35
|
+
"hosts:admin",
|
|
33
36
|
];
|
|
34
37
|
/**
|
|
35
38
|
* Scopes whose operations reach beyond the caller's own (or public)
|
|
@@ -40,7 +43,9 @@ export const SCOPES_SUPPORTED = [
|
|
|
40
43
|
* runs next to every coding run that names an entry; admin:view reads every
|
|
41
44
|
* owner's runs (the admin viewer API); models:admin changes the model catalog,
|
|
42
45
|
* which prices every principal's runs; power:manage scales the shared coding
|
|
43
|
-
* proxy and native gateway to zero (power_sleep) and reads their state
|
|
46
|
+
* proxy and native gateway to zero (power_sleep) and reads their state;
|
|
47
|
+
* hosts:admin registers host providers, whose approved tools run in the push
|
|
48
|
+
* and pull request flow.
|
|
44
49
|
* A token scope only DELEGATES — it never authorizes on its own:
|
|
45
50
|
* requireScope/requireAnyScope honour one only when one of the caller's
|
|
46
51
|
* roles (McpRequestContext.roles, resolved live per request) grants it.
|
|
@@ -52,16 +57,26 @@ export const PRIVILEGED_SCOPES = [
|
|
|
52
57
|
"admin:view",
|
|
53
58
|
"models:admin",
|
|
54
59
|
"power:manage",
|
|
60
|
+
"hosts:admin",
|
|
55
61
|
];
|
|
56
62
|
/**
|
|
57
63
|
* The built-in roles and the permissions (privileged scope names) each
|
|
58
64
|
* grants. No roles = member: every non-privileged scope, nothing privileged.
|
|
59
65
|
*/
|
|
60
66
|
export const ROLE_PERMISSIONS = {
|
|
61
|
-
admin: [
|
|
67
|
+
admin: [
|
|
68
|
+
"agents:admin",
|
|
69
|
+
"packages:approve",
|
|
70
|
+
"services:manage",
|
|
71
|
+
"admin:view",
|
|
72
|
+
"models:admin",
|
|
73
|
+
"power:manage",
|
|
74
|
+
"hosts:admin",
|
|
75
|
+
],
|
|
62
76
|
"package-approver": ["packages:approve"],
|
|
63
77
|
"service-manager": ["services:manage"],
|
|
64
78
|
"model-manager": ["models:admin"],
|
|
79
|
+
"host-manager": ["hosts:admin"],
|
|
65
80
|
};
|
|
66
81
|
export const ROLE_NAMES = Object.keys(ROLE_PERMISSIONS);
|
|
67
82
|
export function isRoleName(name) {
|
|
@@ -23,10 +23,10 @@ export declare function lockUser(tx: AuthDb, id: string): Promise<{
|
|
|
23
23
|
subject: string;
|
|
24
24
|
};
|
|
25
25
|
} & {
|
|
26
|
-
status: string;
|
|
27
|
-
createdAt: Date;
|
|
28
26
|
updatedAt: Date;
|
|
27
|
+
createdAt: Date;
|
|
29
28
|
id: string;
|
|
29
|
+
status: string;
|
|
30
30
|
roles: string[];
|
|
31
31
|
displayName: string | null;
|
|
32
32
|
principalId: string;
|
|
@@ -58,11 +58,11 @@ export declare class IdentityService {
|
|
|
58
58
|
}>;
|
|
59
59
|
revokeKey(keyId: string): Promise<void>;
|
|
60
60
|
listUsers(): Prisma.PrismaPromise<{
|
|
61
|
+
id: string;
|
|
61
62
|
status: string;
|
|
62
63
|
principal: {
|
|
63
64
|
subject: string;
|
|
64
65
|
};
|
|
65
|
-
id: string;
|
|
66
66
|
roles: string[];
|
|
67
67
|
displayName: string | null;
|
|
68
68
|
}[]>;
|
|
@@ -16,10 +16,10 @@ export declare class Sessions {
|
|
|
16
16
|
subject: string;
|
|
17
17
|
};
|
|
18
18
|
} & {
|
|
19
|
-
status: string;
|
|
20
|
-
createdAt: Date;
|
|
21
19
|
updatedAt: Date;
|
|
20
|
+
createdAt: Date;
|
|
22
21
|
id: string;
|
|
22
|
+
status: string;
|
|
23
23
|
roles: string[];
|
|
24
24
|
displayName: string | null;
|
|
25
25
|
principalId: string;
|
package/dist/mcp/context.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ import type { IssueTrackerRegistry } from "../providers/issue-tracker/types.js";
|
|
|
15
15
|
import type { HostUserAuthorizerRegistry, ReviewHostRegistry } from "../providers/review-host/types.js";
|
|
16
16
|
import type { Power } from "../core/power.js";
|
|
17
17
|
import type { ChatProviderRegistry } from "../providers/chat/types.js";
|
|
18
|
+
import type { safeFetch } from "../sandbox/safe-fetch.js";
|
|
18
19
|
export type McpProviders = Pick<ProviderRegistry, "llm" | "engine" | "datastore" | "secrets" | "executor" | "memory"> & {
|
|
19
20
|
reviewHosts?: ReviewHostRegistry;
|
|
20
21
|
/** Issue trackers (Jira); empty or absent = no issue-tracker integration. */
|
|
@@ -31,6 +32,8 @@ export type McpProviders = Pick<ProviderRegistry, "llm" | "engine" | "datastore"
|
|
|
31
32
|
repoAccess?: RepoAccessGate;
|
|
32
33
|
/** Low-power mode (scale idle proxy/gateway to zero); absent = DISABLED_POWER. */
|
|
33
34
|
power?: Power;
|
|
35
|
+
/** Overrides the outbound call to remote MCP servers (register/update/refresh_mcp_server) — tests only. */
|
|
36
|
+
sandboxFetch?: typeof safeFetch;
|
|
34
37
|
};
|
|
35
38
|
export interface McpRequestContext {
|
|
36
39
|
principal: Principal;
|
|
@@ -33,6 +33,8 @@ export interface GitHubIngressDeps {
|
|
|
33
33
|
}>;
|
|
34
34
|
/** Accounts served in addition to the App's owner (WARDBY_GITHUB_ALLOWED_ACCOUNTS). */
|
|
35
35
|
allowedAccounts: () => ReadonlySet<string>;
|
|
36
|
+
/** False = no reply explaining why a mention started nothing (WARDBY_MENTION_EXPLANATIONS). */
|
|
37
|
+
mentionExplanations?: boolean;
|
|
36
38
|
/** Removes the App from an installation on an account that isn't served; absent = ignore only. */
|
|
37
39
|
uninstallInstallation?: (installationId: number) => Promise<void>;
|
|
38
40
|
now?: () => Date;
|
|
@@ -99,7 +99,7 @@ export async function handleGitHubEventIngress(req, deps) {
|
|
|
99
99
|
: {}),
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
|
-
const event = normalizeGitHubEvent(eventName, payload, app);
|
|
102
|
+
const event = normalizeGitHubEvent(eventName, payload, app, (dropped) => log.info({ ...dropped, deliveryId }, "mention ignored: its author did not pass the pre-filter"));
|
|
103
103
|
// An event we don't act on must never claim the delivery id: recording it
|
|
104
104
|
// here would let a later, real delivery of the same id (GitHub does reuse
|
|
105
105
|
// ids across distinct redeliveries of what it considers the same event)
|
|
@@ -130,6 +130,7 @@ export async function handleGitHubEventIngress(req, deps) {
|
|
|
130
130
|
repoAccess: deps.repoAccess,
|
|
131
131
|
...(deps.issueTrackers ? { issueTrackers: deps.issueTrackers } : {}),
|
|
132
132
|
mentionHandle: app.slug,
|
|
133
|
+
...(deps.mentionExplanations === false ? { mentionExplanations: false } : {}),
|
|
133
134
|
});
|
|
134
135
|
log.info({ event: event.kind, repository: event.repository, deliveryId, runIds: routed.runIds }, "host event routed");
|
|
135
136
|
return {
|
package/dist/mcp/index.d.ts
CHANGED
|
@@ -12,6 +12,12 @@ export declare function localOperatorContext(principal: Principal, providers: Mc
|
|
|
12
12
|
export declare function registerAllTools(mcp: WardbyMcpServer, opts: {
|
|
13
13
|
secretElicitationUrl: SecretElicitationUrlBuilder;
|
|
14
14
|
secretElicitationProtocol: boolean;
|
|
15
|
+
/** Builds a get_run_transcript download URL for a minted token; absent = transcripts are not served. */
|
|
16
|
+
runTranscriptUrl?: (token: string) => Promise<string>;
|
|
17
|
+
/** Whether a blob store is configured to serve run transcripts from. */
|
|
18
|
+
blobStoreConfigured?: boolean;
|
|
19
|
+
/** Which host serves those links (default http). */
|
|
20
|
+
runTranscriptAudience?: "stdio" | "http";
|
|
15
21
|
/** Rebuilds the process's installed model CatalogStore after set_model/disable_model/reset_model. */
|
|
16
22
|
refreshModelCatalog?: () => Promise<void>;
|
|
17
23
|
}): void;
|