@wardby/cli 0.5.3 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +33 -0
- package/README.md +25 -14
- package/deploy/local/docker-compose.quickstart-coding.yml +13 -0
- package/dist/claude-coding-worker/context.d.ts +22 -0
- package/dist/claude-coding-worker/context.js +92 -0
- package/dist/claude-coding-worker/driver.d.ts +27 -3
- package/dist/claude-coding-worker/driver.js +161 -20
- package/dist/claude-coding-worker/main.js +34 -6
- package/dist/claude-coding-worker/sdk.js +25 -5
- package/dist/claude-coding-worker/tool-socket.d.ts +27 -0
- package/dist/claude-coding-worker/tool-socket.js +111 -0
- package/dist/claude-coding-worker/transcript.d.ts +18 -0
- package/dist/claude-coding-worker/transcript.js +77 -0
- package/dist/cli-help.d.ts +1 -1
- package/dist/cli-help.js +6 -2
- package/dist/cli-native-mode.d.ts +9 -0
- package/dist/cli-native-mode.js +20 -0
- package/dist/cli.d.ts +3 -1
- package/dist/cli.js +161 -11
- package/dist/coding/claude-context.d.ts +45 -0
- package/dist/coding/claude-context.js +434 -0
- package/dist/coding/continuation-wording.d.ts +35 -0
- package/dist/coding/continuation-wording.js +73 -0
- package/dist/coding/linked-issue-note.d.ts +23 -0
- package/dist/coding/linked-issue-note.js +47 -0
- package/dist/coding/merge-wording.d.ts +28 -0
- package/dist/coding/merge-wording.js +78 -0
- package/dist/coding/pr-description-note.d.ts +9 -0
- package/dist/coding/pr-description-note.js +32 -0
- package/dist/coding/profile.d.ts +50 -118
- package/dist/coding/profile.js +51 -4
- package/dist/coding/protected-path-wording.d.ts +8 -0
- package/dist/coding/protected-path-wording.js +1 -1
- package/dist/coding/protocol.d.ts +292 -270
- package/dist/coding/protocol.js +322 -15
- package/dist/coding/redact.d.ts +3 -0
- package/dist/coding/redact.js +12 -0
- package/dist/coding/registry/allowlist.d.ts +12 -0
- package/dist/coding/registry/allowlist.js +14 -1
- package/dist/coding/registry/audit-mode.d.ts +153 -0
- package/dist/coding/registry/audit-mode.js +304 -0
- package/dist/coding/registry/lockfile-shared.d.ts +36 -0
- package/dist/coding/registry/lockfile-shared.js +128 -0
- package/dist/coding/registry/lockfiles.js +1 -1
- package/dist/coding/registry/npm-lockfile-formats.d.ts +11 -0
- package/dist/coding/registry/npm-lockfile-formats.js +41 -0
- package/dist/coding/registry/npm-lockfile.d.ts +8 -4
- package/dist/coding/registry/npm-lockfile.js +4 -6
- package/dist/coding/registry/npm.js +78 -8
- package/dist/coding/registry/pnpm-lockfile.d.ts +17 -0
- package/dist/coding/registry/pnpm-lockfile.js +189 -0
- package/dist/coding/registry/pypi-plan.d.ts +50 -0
- package/dist/coding/registry/pypi-plan.js +406 -0
- package/dist/coding/registry/pypi-requirements.d.ts +58 -0
- package/dist/coding/registry/pypi-requirements.js +155 -0
- package/dist/coding/registry/pypi.d.ts +3 -27
- package/dist/coding/registry/pypi.js +40 -154
- package/dist/coding/registry/refusal-hints.d.ts +20 -0
- package/dist/coding/registry/refusal-hints.js +61 -0
- package/dist/coding/registry/refusal-wording.d.ts +11 -0
- package/dist/coding/registry/refusal-wording.js +56 -0
- package/dist/coding/registry/report.d.ts +70 -8
- package/dist/coding/registry/report.js +112 -5
- package/dist/coding/registry/types.d.ts +58 -8
- package/dist/coding/registry/yarn-lockfile.d.ts +30 -0
- package/dist/coding/registry/yarn-lockfile.js +367 -0
- package/dist/coding/services/catalog.d.ts +37 -351
- package/dist/coding/transcript/claude-code.d.ts +13 -0
- package/dist/coding/transcript/claude-code.js +273 -0
- package/dist/coding/transcript/download-protocol.d.ts +30 -0
- package/dist/coding/transcript/download-protocol.js +18 -0
- package/dist/coding/transcript/format.d.ts +20 -0
- package/dist/coding/transcript/format.js +32 -0
- package/dist/coding/transcript/recorder.d.ts +51 -0
- package/dist/coding/transcript/recorder.js +225 -0
- package/dist/coding/transcript/resume/checkout.d.ts +31 -0
- package/dist/coding/transcript/resume/checkout.js +203 -0
- package/dist/coding/transcript/resume/command.d.ts +17 -0
- package/dist/coding/transcript/resume/command.js +176 -0
- package/dist/coding/transcript/resume/download.d.ts +20 -0
- package/dist/coding/transcript/resume/download.js +153 -0
- package/dist/coding/transcript/resume/launch.d.ts +38 -0
- package/dist/coding/transcript/resume/launch.js +128 -0
- package/dist/coding/transcript/resume/session-file.d.ts +13 -0
- package/dist/coding/transcript/resume/session-file.js +79 -0
- package/dist/coding/transcript/resume/stand-in.d.ts +11 -0
- package/dist/coding/transcript/resume/stand-in.js +49 -0
- package/dist/coding-worker/artifact.d.ts +16 -3
- package/dist/coding-worker/artifact.js +5 -3
- package/dist/coding-worker/debug-trace.d.ts +6 -5
- package/dist/coding-worker/debug-trace.js +13 -18
- package/dist/coding-worker/dependency-cache.d.mts +229 -0
- package/dist/coding-worker/dependency-cache.mjs +2123 -0
- package/dist/coding-worker/driver.d.ts +4 -3
- package/dist/coding-worker/driver.js +118 -38
- package/dist/coding-worker/errors.d.ts +1 -0
- package/dist/coding-worker/errors.js +32 -0
- package/dist/coding-worker/sdk.d.ts +6 -0
- package/dist/coding-worker/sdk.js +1 -0
- package/dist/coding-worker/skills.d.ts +23 -0
- package/dist/coding-worker/skills.js +117 -0
- package/dist/coding-worker/task-note.d.ts +11 -0
- package/dist/coding-worker/task-note.js +13 -0
- package/dist/coding-worker/types.d.ts +13 -0
- package/dist/config/dependency-cache.d.ts +23 -0
- package/dist/config/dependency-cache.js +32 -0
- package/dist/config/github-allowed-accounts.d.ts +15 -0
- package/dist/config/github-allowed-accounts.js +36 -0
- package/dist/config/low-power.d.ts +12 -0
- package/dist/config/low-power.js +18 -0
- package/dist/config/mobile.d.ts +12 -0
- package/dist/config/mobile.js +18 -0
- package/dist/config/providers.d.ts +65 -3
- package/dist/config/providers.js +147 -11
- package/dist/config/test-simulators.d.ts +82 -0
- package/dist/config/test-simulators.js +305 -0
- package/dist/core/async-context.d.ts +2 -0
- package/dist/core/async-context.js +12 -0
- package/dist/core/budget-events.d.ts +108 -0
- package/dist/core/budget-events.js +346 -0
- package/dist/core/budget-groups.d.ts +50 -1
- package/dist/core/budget-groups.js +236 -27
- package/dist/core/budget-stopped-head.d.ts +46 -0
- package/dist/core/budget-stopped-head.js +81 -0
- package/dist/core/budget-topup.d.ts +51 -0
- package/dist/core/budget-topup.js +156 -0
- package/dist/core/budget-wording.d.ts +16 -2
- package/dist/core/budget-wording.js +40 -2
- package/dist/core/coding-queue.d.ts +2 -1
- package/dist/core/coding-queue.js +7 -0
- package/dist/core/cron.d.ts +19 -1
- package/dist/core/cron.js +17 -0
- package/dist/core/datastores.js +1 -1
- package/dist/core/db.d.ts +16 -6
- package/dist/core/db.js +12 -10
- package/dist/core/deferred-coding.d.ts +14 -0
- package/dist/core/deferred-coding.js +62 -0
- package/dist/core/delegation-child.d.ts +25 -0
- package/dist/core/delegation-child.js +37 -0
- package/dist/core/dispatch.d.ts +53 -0
- package/dist/core/dispatch.js +167 -57
- package/dist/core/engine-native.js +10 -6
- package/dist/core/error-code.d.ts +38 -0
- package/dist/core/error-code.js +168 -0
- package/dist/core/grants.d.ts +19 -6
- package/dist/core/grants.js +55 -6
- package/dist/core/host-events.d.ts +67 -5
- package/dist/core/host-events.js +571 -37
- package/dist/core/host-status.d.ts +85 -3
- package/dist/core/host-status.js +298 -20
- package/dist/core/issue-bridge.d.ts +50 -6
- package/dist/core/issue-bridge.js +151 -20
- package/dist/core/issue-events.d.ts +1 -1
- package/dist/core/issue-events.js +16 -11
- package/dist/core/issue-status.d.ts +1 -1
- package/dist/core/issue-status.js +68 -29
- package/dist/core/logger.d.ts +5 -0
- package/dist/core/logger.js +14 -1
- package/dist/core/lost-run-children.d.ts +6 -0
- package/dist/core/lost-run-children.js +32 -0
- package/dist/core/mark-ready.d.ts +34 -0
- package/dist/core/mark-ready.js +152 -0
- package/dist/core/markdown-code.d.ts +8 -0
- package/dist/core/markdown-code.js +107 -0
- package/dist/core/memory-tools.js +7 -0
- package/dist/core/merge-order-check.d.ts +130 -0
- package/dist/core/merge-order-check.js +343 -0
- package/dist/core/notification-dispatcher.d.ts +70 -0
- package/dist/core/notification-dispatcher.js +368 -0
- package/dist/core/notification-templates.d.ts +19 -0
- package/dist/core/notification-templates.js +139 -0
- package/dist/core/notifications.d.ts +10 -0
- package/dist/core/notifications.js +38 -0
- package/dist/core/pg-auth.d.ts +22 -0
- package/dist/core/pg-auth.js +152 -0
- package/dist/core/power-composition.d.ts +16 -0
- package/dist/core/power-composition.js +37 -0
- package/dist/core/power-idle.d.ts +14 -0
- package/dist/core/power-idle.js +30 -0
- package/dist/core/power.d.ts +71 -0
- package/dist/core/power.js +202 -0
- package/dist/core/pull-request-state-sync.js +2 -2
- package/dist/core/reconciler.d.ts +8 -5
- package/dist/core/reconciler.js +37 -6
- package/dist/core/related-pull-requests.d.ts +59 -7
- package/dist/core/related-pull-requests.js +140 -25
- package/dist/core/reply-parts.d.ts +21 -0
- package/dist/core/reply-parts.js +73 -0
- package/dist/core/repo-access.d.ts +15 -0
- package/dist/core/repo-access.js +66 -0
- package/dist/core/review-fix.d.ts +38 -1
- package/dist/core/review-fix.js +209 -7
- package/dist/core/review-host-checks.d.ts +1 -1
- package/dist/core/review-host-tools.d.ts +23 -0
- package/dist/core/review-host-tools.js +156 -14
- package/dist/core/review-reads.d.ts +55 -0
- package/dist/core/review-reads.js +233 -0
- package/dist/core/run-status.d.ts +12 -0
- package/dist/core/run-status.js +12 -0
- package/dist/core/runner.d.ts +384 -5
- package/dist/core/runner.js +1244 -372
- package/dist/core/schedule-start.d.ts +12 -0
- package/dist/core/schedule-start.js +14 -0
- package/dist/core/secret-broker-config.d.ts +39 -0
- package/dist/core/secret-broker-config.js +112 -0
- package/dist/core/secret-guard.d.ts +46 -0
- package/dist/core/secret-guard.js +104 -0
- package/dist/core/secret-guarded-stores.d.ts +12 -0
- package/dist/core/secret-guarded-stores.js +41 -0
- package/dist/core/secret-spans.d.ts +50 -0
- package/dist/core/secret-spans.js +94 -0
- package/dist/core/secrets.d.ts +39 -4
- package/dist/core/secrets.js +148 -40
- package/dist/core/stop-run.d.ts +46 -0
- package/dist/core/stop-run.js +61 -0
- package/dist/core/workflow-event-recorder.d.ts +14 -0
- package/dist/core/workflow-event-recorder.js +120 -0
- package/dist/core/workflow-events.d.ts +94 -0
- package/dist/core/workflow-events.js +48 -0
- package/dist/core/workflow-run-events.d.ts +18 -0
- package/dist/core/workflow-run-events.js +75 -0
- package/dist/core/zod-json-schema.d.ts +4 -0
- package/dist/core/zod-json-schema.js +39 -0
- package/dist/core/zod3-window.d.ts +35 -0
- package/dist/core/zod3-window.js +124 -0
- package/dist/generated/prisma/browser.d.ts +92 -3
- package/dist/generated/prisma/client.d.ts +92 -3
- package/dist/generated/prisma/commonInputTypes.d.ts +364 -54
- package/dist/generated/prisma/enums.d.ts +37 -0
- package/dist/generated/prisma/enums.js +31 -0
- package/dist/generated/prisma/internal/class.d.ts +132 -0
- package/dist/generated/prisma/internal/class.js +4 -4
- package/dist/generated/prisma/internal/prismaNamespace.d.ts +1332 -142
- package/dist/generated/prisma/internal/prismaNamespace.js +227 -5
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +234 -0
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +227 -5
- package/dist/generated/prisma/models/Agent.d.ts +464 -7
- package/dist/generated/prisma/models/AgentRepository.d.ts +42 -1
- package/dist/generated/prisma/models/CodingAgentProfile.d.ts +301 -1
- package/dist/generated/prisma/models/CodingProxyRequest.d.ts +207 -3
- package/dist/generated/prisma/models/CodingProxySession.d.ts +114 -1
- package/dist/generated/prisma/models/CodingRun.d.ts +1841 -1
- package/dist/generated/prisma/models/DeferredReview.d.ts +78 -1
- package/dist/generated/prisma/models/DependencySnapshot.d.ts +1668 -0
- package/dist/generated/prisma/models/DependencySnapshot.js +1 -0
- package/dist/generated/prisma/models/IssuePullRequest.d.ts +6 -2
- package/dist/generated/prisma/models/LocalReview.d.ts +40 -1
- package/dist/generated/prisma/models/NativeGatewayCall.d.ts +1713 -0
- package/dist/generated/prisma/models/NativeGatewayCall.js +1 -0
- package/dist/generated/prisma/models/NativeGatewaySession.d.ts +1551 -0
- package/dist/generated/prisma/models/NativeGatewaySession.js +1 -0
- package/dist/generated/prisma/models/NativeWarmWorker.d.ts +1296 -0
- package/dist/generated/prisma/models/NativeWarmWorker.js +1 -0
- package/dist/generated/prisma/models/NotificationChannel.d.ts +1543 -0
- package/dist/generated/prisma/models/NotificationChannel.js +1 -0
- package/dist/generated/prisma/models/NotificationDelivery.d.ts +1502 -0
- package/dist/generated/prisma/models/NotificationDelivery.js +1 -0
- package/dist/generated/prisma/models/NotificationThread.d.ts +1090 -0
- package/dist/generated/prisma/models/NotificationThread.js +1 -0
- package/dist/generated/prisma/models/RegistryAllowance.d.ts +41 -1
- package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +75 -1
- package/dist/generated/prisma/models/RegistryAuditRecord.d.ts +1364 -0
- package/dist/generated/prisma/models/RegistryAuditRecord.js +1 -0
- package/dist/generated/prisma/models/Run.d.ts +1619 -58
- package/dist/generated/prisma/models/RunBudgetEvent.d.ts +1211 -0
- package/dist/generated/prisma/models/RunBudgetEvent.js +1 -0
- package/dist/generated/prisma/models/RunHostCheck.d.ts +36 -1
- package/dist/generated/prisma/models/RunTranscript.d.ts +1339 -0
- package/dist/generated/prisma/models/RunTranscript.js +1 -0
- package/dist/generated/prisma/models/Secret.d.ts +37 -1
- package/dist/generated/prisma/models/SecretBrokerChange.d.ts +1101 -0
- package/dist/generated/prisma/models/SecretBrokerChange.js +1 -0
- package/dist/generated/prisma/models/WorkflowEvent.d.ts +1422 -0
- package/dist/generated/prisma/models/WorkflowEvent.js +1 -0
- package/dist/generated/prisma/models.d.ts +12 -0
- package/dist/help/build.js +4 -2
- package/dist/help/catalog.d.ts +1 -1
- package/dist/help/catalog.js +31 -6
- package/dist/help-index.json +2584 -146
- package/dist/import/create.js +49 -3
- package/dist/import/neutral-schema.d.ts +50 -277
- package/dist/import/neutral-schema.js +7 -4
- package/dist/knowledge/check.d.ts +1 -1
- package/dist/knowledge/cli.d.ts +11 -1
- package/dist/knowledge/cli.js +37 -4
- package/dist/knowledge/concept.d.ts +3 -19
- package/dist/knowledge/location.d.ts +31 -0
- package/dist/knowledge/location.js +78 -0
- package/dist/mcp/auth/access.d.ts +11 -2
- package/dist/mcp/auth/access.js +15 -1
- package/dist/mcp/auth/ownership.d.ts +7 -7
- package/dist/mcp/auth/repo-authorization.js +14 -0
- package/dist/mcp/auth/resource-server.d.ts +2 -1
- package/dist/mcp/auth/resource-server.js +7 -2
- package/dist/mcp/auth/self-hosted/browser.d.ts +1 -1
- package/dist/mcp/auth/self-hosted/browser.js +19 -6
- package/dist/mcp/auth/self-hosted/credentials.d.ts +3 -3
- package/dist/mcp/auth/self-hosted/session.d.ts +2 -2
- package/dist/mcp/context.d.ts +6 -0
- package/dist/mcp/host-events/github-ingress.d.ts +25 -1
- package/dist/mcp/host-events/github-ingress.js +70 -1
- package/dist/mcp/index.d.ts +19 -0
- package/dist/mcp/index.js +117 -20
- package/dist/mcp/server.d.ts +13 -0
- package/dist/mcp/server.js +33 -14
- package/dist/mcp/tools/agents.d.ts +4 -0
- package/dist/mcp/tools/agents.js +277 -24
- package/dist/mcp/tools/datastore.js +17 -8
- package/dist/mcp/tools/grants.js +9 -3
- package/dist/mcp/tools/memory.js +11 -1
- package/dist/mcp/tools/notification-channels.d.ts +2 -0
- package/dist/mcp/tools/notification-channels.js +293 -0
- package/dist/mcp/tools/packages.d.ts +2 -0
- package/dist/mcp/tools/packages.js +195 -0
- package/dist/mcp/tools/power.d.ts +2 -0
- package/dist/mcp/tools/power.js +77 -0
- package/dist/mcp/tools/repositories.js +18 -5
- package/dist/mcp/tools/run-access.d.ts +16 -0
- package/dist/mcp/tools/run-access.js +25 -0
- package/dist/mcp/tools/run-transcript-download.d.ts +30 -0
- package/dist/mcp/tools/run-transcript-download.js +129 -0
- package/dist/mcp/tools/run-transcript.d.ts +19 -0
- package/dist/mcp/tools/run-transcript.js +70 -0
- package/dist/mcp/tools/runs.d.ts +0 -6
- package/dist/mcp/tools/runs.js +41 -14
- package/dist/mcp/tools/scheduling.js +3 -1
- package/dist/mcp/tools/secret-broker-compat.d.ts +12 -0
- package/dist/mcp/tools/secret-broker-compat.js +23 -0
- package/dist/mcp/tools/secret-elicitation-form.d.ts +22 -2
- package/dist/mcp/tools/secret-elicitation-form.js +205 -10
- package/dist/mcp/tools/secret-elicitation-server.d.ts +6 -0
- package/dist/mcp/tools/secret-elicitation-server.js +10 -54
- package/dist/mcp/tools/secret-elicitation.d.ts +38 -3
- package/dist/mcp/tools/secret-elicitation.js +110 -12
- package/dist/mcp/tools/secrets.js +186 -9
- package/dist/mcp/tools/stop-run.d.ts +2 -0
- package/dist/mcp/tools/stop-run.js +82 -0
- package/dist/mcp/tools/subagents.js +2 -2
- package/dist/mcp/tools/tools.d.ts +2 -2
- package/dist/mcp/tools/tools.js +47 -11
- package/dist/mcp/transport/stdio-link-host.d.ts +20 -0
- package/dist/mcp/transport/stdio-link-host.js +67 -0
- package/dist/mcp/transport/streamable-http.d.ts +13 -0
- package/dist/mcp/transport/streamable-http.js +41 -1
- package/dist/native-worker/composition.d.ts +23 -0
- package/dist/native-worker/composition.js +77 -0
- package/dist/native-worker/docker-isolation.d.ts +65 -0
- package/dist/native-worker/docker-isolation.js +183 -0
- package/dist/native-worker/docker-launcher.d.ts +110 -0
- package/dist/native-worker/docker-launcher.js +297 -0
- package/dist/native-worker/gateway-server.d.ts +77 -0
- package/dist/native-worker/gateway-server.js +412 -0
- package/dist/native-worker/gateway.d.ts +70 -0
- package/dist/native-worker/gateway.js +263 -0
- package/dist/native-worker/http-server.d.ts +24 -0
- package/dist/native-worker/http-server.js +113 -0
- package/dist/native-worker/http-transport.d.ts +17 -0
- package/dist/native-worker/http-transport.js +88 -0
- package/dist/native-worker/kubernetes-isolation.d.ts +90 -0
- package/dist/native-worker/kubernetes-isolation.js +218 -0
- package/dist/native-worker/kubernetes-launcher.d.ts +106 -0
- package/dist/native-worker/kubernetes-launcher.js +375 -0
- package/dist/native-worker/launch.d.ts +62 -0
- package/dist/native-worker/launch.js +49 -0
- package/dist/native-worker/ledger.d.ts +125 -0
- package/dist/native-worker/ledger.js +245 -0
- package/dist/native-worker/loopback.d.ts +12 -0
- package/dist/native-worker/loopback.js +44 -0
- package/dist/native-worker/main.d.ts +8 -0
- package/dist/native-worker/main.js +85 -0
- package/dist/native-worker/protocol.d.ts +296 -0
- package/dist/native-worker/protocol.js +246 -0
- package/dist/native-worker/sandbox-executor.d.ts +83 -0
- package/dist/native-worker/sandbox-executor.js +284 -0
- package/dist/native-worker/stderr-redaction.d.ts +77 -0
- package/dist/native-worker/stderr-redaction.js +237 -0
- package/dist/native-worker/stdio.d.ts +29 -0
- package/dist/native-worker/stdio.js +189 -0
- package/dist/native-worker/warm-delivery.d.ts +16 -0
- package/dist/native-worker/warm-delivery.js +33 -0
- package/dist/native-worker/warm-pool-ledger.d.ts +39 -0
- package/dist/native-worker/warm-pool-ledger.js +73 -0
- package/dist/native-worker/warm-pool.d.ts +107 -0
- package/dist/native-worker/warm-pool.js +283 -0
- package/dist/native-worker/worker.d.ts +17 -0
- package/dist/native-worker/worker.js +141 -0
- package/dist/observability/metrics.js +6 -1
- package/dist/providers/auth/authorization-server.d.ts +3 -0
- package/dist/providers/auth/index.js +2 -0
- package/dist/providers/auth/self-hosted.d.ts +14 -2
- package/dist/providers/auth/self-hosted.js +54 -4
- package/dist/providers/chat/fake.d.ts +46 -0
- package/dist/providers/chat/fake.js +39 -0
- package/dist/providers/chat/index.d.ts +4 -0
- package/dist/providers/chat/index.js +8 -0
- package/dist/providers/chat/slack.d.ts +37 -0
- package/dist/providers/chat/slack.js +105 -0
- package/dist/providers/chat/types.d.ts +42 -0
- package/dist/providers/chat/types.js +19 -0
- package/dist/providers/coding-proxy/dependency-cache/eviction.d.ts +29 -0
- package/dist/providers/coding-proxy/dependency-cache/eviction.js +87 -0
- package/dist/providers/coding-proxy/dependency-cache/key.d.ts +33 -0
- package/dist/providers/coding-proxy/dependency-cache/key.js +86 -0
- package/dist/providers/coding-proxy/dependency-cache/model-request-seal.d.ts +18 -0
- package/dist/providers/coding-proxy/dependency-cache/model-request-seal.js +40 -0
- package/dist/providers/coding-proxy/dependency-cache/prisma-store.d.ts +25 -0
- package/dist/providers/coding-proxy/dependency-cache/prisma-store.js +131 -0
- package/dist/providers/coding-proxy/dependency-cache/service.d.ts +70 -0
- package/dist/providers/coding-proxy/dependency-cache/service.js +409 -0
- package/dist/providers/coding-proxy/dependency-cache/store.d.ts +85 -0
- package/dist/providers/coding-proxy/dependency-cache/store.js +95 -0
- package/dist/providers/coding-proxy/hold.d.ts +32 -0
- package/dist/providers/coding-proxy/hold.js +86 -0
- package/dist/providers/coding-proxy/interrupted.d.ts +70 -0
- package/dist/providers/coding-proxy/interrupted.js +104 -0
- package/dist/providers/coding-proxy/memory-ledger.d.ts +15 -2
- package/dist/providers/coding-proxy/memory-ledger.js +84 -8
- package/dist/providers/coding-proxy/metering.d.ts +16 -0
- package/dist/providers/coding-proxy/metering.js +27 -4
- package/dist/providers/coding-proxy/prisma-ledger.d.ts +15 -2
- package/dist/providers/coding-proxy/prisma-ledger.js +179 -67
- package/dist/providers/coding-proxy/proxy.d.ts +14 -1
- package/dist/providers/coding-proxy/proxy.js +166 -14
- package/dist/providers/coding-proxy/registry/audit.d.ts +53 -10
- package/dist/providers/coding-proxy/registry/audit.js +94 -17
- package/dist/providers/coding-proxy/registry/lockfile-parse-worker.d.ts +36 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse-worker.js +67 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse.d.ts +16 -0
- package/dist/providers/coding-proxy/registry/lockfile-parse.js +110 -0
- package/dist/providers/coding-proxy/registry/plan.d.ts +9 -0
- package/dist/providers/coding-proxy/registry/plan.js +201 -48
- package/dist/providers/coding-proxy/registry/prisma-store.d.ts +11 -5
- package/dist/providers/coding-proxy/registry/prisma-store.js +120 -17
- package/dist/providers/coding-proxy/registry/service.d.ts +97 -16
- package/dist/providers/coding-proxy/registry/service.js +579 -112
- package/dist/providers/coding-proxy/registry/store.d.ts +84 -9
- package/dist/providers/coding-proxy/registry/store.js +54 -1
- package/dist/providers/coding-proxy/runtime.d.ts +4 -0
- package/dist/providers/coding-proxy/runtime.js +78 -16
- package/dist/providers/coding-proxy/server.d.ts +6 -1
- package/dist/providers/coding-proxy/server.js +45 -1
- package/dist/providers/coding-proxy/types.d.ts +65 -1
- package/dist/providers/datastore/types.d.ts +5 -0
- package/dist/providers/engine/types.d.ts +36 -2
- package/dist/providers/engine/types.js +39 -0
- package/dist/providers/executor/composition.d.ts +31 -1
- package/dist/providers/executor/composition.js +81 -8
- package/dist/providers/executor/container.d.ts +385 -9
- package/dist/providers/executor/container.js +1234 -99
- package/dist/providers/executor/dbos-status.d.ts +31 -0
- package/dist/providers/executor/dbos-status.js +64 -0
- package/dist/providers/executor/dbos.d.ts +91 -0
- package/dist/providers/executor/dbos.js +319 -26
- package/dist/providers/executor/deferred.d.ts +44 -0
- package/dist/providers/executor/deferred.js +100 -0
- package/dist/providers/executor/in-process.d.ts +9 -1
- package/dist/providers/executor/in-process.js +14 -4
- package/dist/providers/executor/linked-issue-reader.d.ts +16 -0
- package/dist/providers/executor/linked-issue-reader.js +30 -0
- package/dist/providers/executor/routing.d.ts +39 -10
- package/dist/providers/executor/routing.js +77 -32
- package/dist/providers/executor/types.d.ts +25 -0
- package/dist/providers/index.d.ts +2 -1
- package/dist/providers/issue-tracker/types.d.ts +17 -0
- package/dist/providers/issue-tracker/types.js +39 -1
- package/dist/providers/jobs/claude-tool-setup.d.ts +4 -0
- package/dist/providers/jobs/claude-tool-setup.js +5 -2
- package/dist/providers/jobs/docker-isolation.d.ts +8 -0
- package/dist/providers/jobs/docker-isolation.js +17 -0
- package/dist/providers/jobs/docker.d.ts +1 -0
- package/dist/providers/jobs/docker.js +29 -4
- package/dist/providers/jobs/fake-kubernetes-api.d.ts +23 -2
- package/dist/providers/jobs/fake-kubernetes-api.js +45 -1
- package/dist/providers/jobs/kubernetes-api.d.ts +25 -1
- package/dist/providers/jobs/kubernetes-api.js +17 -0
- package/dist/providers/jobs/kubernetes-client.d.ts +10 -1
- package/dist/providers/jobs/kubernetes-client.js +61 -3
- package/dist/providers/jobs/kubernetes-dry-run-fixture.d.ts +6 -1
- package/dist/providers/jobs/kubernetes-dry-run-fixture.js +6 -3
- package/dist/providers/jobs/kubernetes-isolation.d.ts +5 -1
- package/dist/providers/jobs/kubernetes-isolation.js +23 -1
- package/dist/providers/jobs/kubernetes-platform.d.ts +4 -1
- package/dist/providers/jobs/kubernetes-platform.js +38 -1
- package/dist/providers/jobs/kubernetes-preflight.d.ts +2 -1
- package/dist/providers/jobs/kubernetes-preflight.js +4 -2
- package/dist/providers/jobs/kubernetes.d.ts +42 -2
- package/dist/providers/jobs/kubernetes.js +178 -19
- package/dist/providers/jobs/metadata-probes.d.ts +11 -0
- package/dist/providers/jobs/metadata-probes.js +13 -0
- package/dist/providers/jobs/types.d.ts +42 -0
- package/dist/providers/jobs/types.js +13 -1
- package/dist/providers/llm/anthropic.js +5 -1
- package/dist/providers/llm/bedrock.d.ts +0 -12
- package/dist/providers/llm/bedrock.js +4 -0
- package/dist/providers/llm/claude-messages.d.ts +3 -1
- package/dist/providers/llm/claude-messages.js +4 -1
- package/dist/providers/llm/claude-provider.d.ts +2 -2
- package/dist/providers/llm/claude-provider.js +2 -2
- package/dist/providers/llm/openai.d.ts +2 -2
- package/dist/providers/llm/openai.js +6 -2
- package/dist/providers/llm/routing.d.ts +2 -2
- package/dist/providers/llm/routing.js +2 -2
- package/dist/providers/llm/types.d.ts +12 -2
- package/dist/providers/review-host/github-events.d.ts +9 -1
- package/dist/providers/review-host/github-events.js +34 -12
- package/dist/providers/review-host/github.d.ts +39 -2
- package/dist/providers/review-host/github.js +274 -29
- package/dist/providers/review-host/local.d.ts +8 -4
- package/dist/providers/review-host/local.js +49 -31
- package/dist/providers/review-host/patch-pages.d.ts +41 -0
- package/dist/providers/review-host/patch-pages.js +176 -0
- package/dist/providers/review-host/review-format.d.ts +19 -1
- package/dist/providers/review-host/review-format.js +38 -7
- package/dist/providers/review-host/types.d.ts +157 -2
- package/dist/providers/review-host/types.js +8 -0
- package/dist/providers/storage/gcs.d.ts +63 -0
- package/dist/providers/storage/gcs.js +69 -0
- package/dist/providers/storage/index.d.ts +15 -0
- package/dist/providers/storage/index.js +14 -0
- package/dist/providers/storage/local.d.ts +24 -0
- package/dist/providers/storage/local.js +92 -0
- package/dist/providers/storage/meter.d.ts +14 -0
- package/dist/providers/storage/meter.js +34 -0
- package/dist/providers/storage/s3.d.ts +41 -0
- package/dist/providers/storage/s3.js +107 -0
- package/dist/providers/storage/types.d.ts +37 -3
- package/dist/providers/storage/types.js +21 -4
- package/dist/providers/vcs/git.d.ts +33 -2
- package/dist/providers/vcs/git.js +324 -22
- package/dist/providers/vcs/github-remote.d.ts +26 -3
- package/dist/providers/vcs/github-remote.js +124 -14
- package/dist/providers/vcs/github.d.ts +246 -12
- package/dist/providers/vcs/github.js +521 -61
- package/dist/providers/vcs/index.js +8 -1
- package/dist/providers/vcs/pr-description.d.ts +127 -0
- package/dist/providers/vcs/pr-description.js +270 -0
- package/dist/providers/vcs/remote.d.ts +33 -1
- package/dist/providers/vcs/routing.d.ts +4 -2
- package/dist/providers/vcs/routing.js +6 -0
- package/dist/providers/vcs/types.d.ts +80 -3
- package/dist/quickstart/coding-seed.d.ts +21 -3
- package/dist/quickstart/coding-seed.js +283 -3
- package/dist/quickstart/images.d.ts +2 -0
- package/dist/quickstart/images.js +7 -1
- package/dist/quickstart/reviewer-prompt.d.ts +1 -1
- package/dist/quickstart/reviewer-prompt.js +6 -6
- package/dist/quickstart-images.json +1 -1
- package/dist/sandbox/brokered-fetch.d.ts +23 -0
- package/dist/sandbox/brokered-fetch.js +37 -0
- package/dist/sandbox/generated/zod.bundle.js +62 -1
- package/dist/sandbox/generated/zod3.bundle.js +5 -0
- package/dist/sandbox/host-functions.d.ts +35 -0
- package/dist/sandbox/host-functions.js +150 -91
- package/dist/sandbox/prelude.js +7 -1
- package/dist/sandbox/run-in-sandbox.d.ts +19 -0
- package/dist/sandbox/run-in-sandbox.js +28 -10
- package/dist/sandbox/safe-fetch.d.ts +2 -0
- package/dist/sandbox/safe-fetch.js +3 -1
- package/dist/sandbox/secret-broker-sigv4.d.ts +2 -0
- package/dist/sandbox/secret-broker-sigv4.js +49 -0
- package/dist/sandbox/secret-broker.d.ts +34 -0
- package/dist/sandbox/secret-broker.js +161 -0
- package/dist/sandbox/tool-capabilities.d.ts +10 -30
- package/dist/sandbox/user-tool.d.ts +14 -0
- package/dist/sandbox/user-tool.js +32 -0
- package/dist/sandbox/zod-params.d.ts +37 -5
- package/dist/sandbox/zod-params.js +181 -26
- package/dist/serve.js +25 -0
- package/dist/viewer/api-schema.d.ts +372 -2454
- package/dist/viewer/api-schema.js +29 -0
- package/dist/viewer/build-schemas.js +10 -3
- package/dist/viewer/event-bus.d.ts +6 -0
- package/dist/viewer/event-bus.js +16 -7
- package/dist/viewer/graph.d.ts +5 -2
- package/dist/viewer/graph.js +7 -2
- package/dist/viewer/http.d.ts +0 -1
- package/dist/viewer/http.js +2 -2
- package/dist/viewer/infra.js +25 -2
- package/dist/viewer/limits.d.ts +4 -0
- package/dist/viewer/limits.js +4 -0
- package/dist/viewer/openapi.d.ts +15 -0
- package/dist/viewer/openapi.js +170 -0
- package/dist/wardby-bin.js +10 -0
- package/docs/README.md +7 -0
- package/docs/agent-recipes.md +114 -27
- package/docs/architecture-runtime.md +16 -1
- package/docs/code-review-agents.md +689 -45
- package/docs/coding-agent-setup.md +602 -12
- package/docs/coding-packages.md +1037 -92
- package/docs/coding-services.md +30 -13
- package/docs/coding-worker-byo-images.md +218 -6
- package/docs/coding-worker-isolation.md +173 -44
- package/docs/getting-started-gke.md +332 -129
- package/docs/getting-started-identity-provider.md +31 -11
- package/docs/getting-started.md +14 -4
- package/docs/jira-agents.md +22 -9
- package/docs/knowledge/blob-not-found-semantics.md +41 -0
- package/docs/knowledge/bounded-file-descriptor.md +52 -0
- package/docs/knowledge/delegation-admission-slots.md +52 -0
- package/docs/knowledge/http-dispatcher-bootstrap.md +61 -0
- package/docs/knowledge/import-rename-target.md +52 -0
- package/docs/knowledge/index.md +57 -0
- package/docs/knowledge/log.md +9 -0
- package/docs/knowledge/mcp-cancelled-task-precedence.md +41 -0
- package/docs/knowledge/mcp-http-prompt-discovery.md +41 -0
- package/docs/knowledge/mcp-schema-module-boundary.md +41 -0
- package/docs/knowledge/nullable-tool-uniqueness.md +52 -0
- package/docs/knowledge/overview-cli.md +74 -0
- package/docs/knowledge/overview-coding-proxy.md +72 -0
- package/docs/knowledge/overview-coding.md +72 -0
- package/docs/knowledge/overview-config.md +60 -0
- package/docs/knowledge/overview-core.md +72 -0
- package/docs/knowledge/overview-deploy.md +83 -0
- package/docs/knowledge/overview-mcp.md +61 -0
- package/docs/knowledge/overview-prisma.md +72 -0
- package/docs/knowledge/overview-providers.md +89 -0
- package/docs/knowledge/overview-sandbox.md +83 -0
- package/docs/knowledge/overview-surfaces.md +83 -0
- package/docs/knowledge/private-datastore-shared-boundary.md +54 -0
- package/docs/knowledge/proxy-settlement-projections.md +41 -0
- package/docs/knowledge/run-pricing-first-writer.md +43 -0
- package/docs/knowledge/schedule-claim-transaction.md +41 -0
- package/docs/knowledge/secret-entry-replica-contract.md +52 -0
- package/docs/knowledge/terminal-run-first-writer.md +41 -0
- package/docs/knowledge/transactional-agent-authorization.md +52 -0
- package/docs/knowledge/viewer-notify-write-isolation.md +30 -0
- package/docs/knowledge/warm-input-publication.md +30 -0
- package/docs/knowledge/workspace-staging-failure.md +54 -0
- package/docs/knowledge.md +54 -14
- package/docs/native-sandbox.md +731 -0
- package/docs/observability.md +4 -0
- package/docs/release-verification.md +9 -0
- package/docs/security-deployment.md +146 -14
- package/docs/slack-notifications.md +268 -0
- package/docs/tool-secrets.md +284 -0
- package/docs/viewer-api.md +46 -5
- package/docs/viewer-api.openapi.yml +1404 -0
- package/help/admin-viewer.md +29 -3
- package/help/agent-recipes.md +27 -0
- package/help/architecture-agent.md +11 -6
- package/help/brokered-secrets.md +79 -0
- package/help/build-claude-code-image.md +131 -0
- package/help/build-worker-image.md +6 -7
- package/help/builder-agent.md +19 -6
- package/help/code-review-agents.md +243 -10
- package/help/coding-packages.md +156 -6
- package/help/cost-attribution.md +9 -5
- package/help/creating-agents.md +14 -1
- package/help/dependency-cache.md +143 -0
- package/help/deploy-gke.md +23 -9
- package/help/deployment-targets.md +25 -14
- package/help/errors/budget-exhausted.md +187 -0
- package/help/errors/budget-group-exhausted.md +5 -1
- package/help/errors/coding-provider-not-configured.md +2 -2
- package/help/errors/coding-stream-quota-exceeded.md +33 -0
- package/help/errors/coding-workspace-disk-exceeds-limit.md +39 -0
- package/help/errors/continuation-closed.md +9 -12
- package/help/errors/database-auth-invalid.md +28 -0
- package/help/errors/delegation-conflict.md +24 -0
- package/help/errors/file-list-truncated.md +45 -0
- package/help/errors/full-read-required.md +49 -0
- package/help/errors/github-account-not-allowed.md +29 -0
- package/help/errors/graph-incomplete.md +43 -0
- package/help/errors/graph-limit.md +43 -0
- package/help/errors/low-power-disabled.md +29 -0
- package/help/errors/low-power-scale-forbidden.md +35 -0
- package/help/errors/low-power-wake-timeout.md +30 -0
- package/help/errors/merge-conflict.md +49 -0
- package/help/errors/mobile-disabled.md +31 -0
- package/help/errors/native-sandbox-capacity.md +22 -0
- package/help/errors/native-sandbox-deadline-exceeded.md +19 -0
- package/help/errors/native-sandbox-docker-failed.md +20 -0
- package/help/errors/native-sandbox-gateway-error.md +20 -0
- package/help/errors/native-sandbox-gateway-unavailable.md +21 -0
- package/help/errors/native-sandbox-image-not-pinned.md +19 -0
- package/help/errors/native-sandbox-isolation-mismatch.md +20 -0
- package/help/errors/native-sandbox-launch-abandoned.md +21 -0
- package/help/errors/native-sandbox-network-unenforced.md +22 -0
- package/help/errors/native-sandbox-requires-catalog.md +31 -0
- package/help/errors/native-sandbox-unavailable.md +19 -0
- package/help/errors/native-sandbox-warm-delivery-failed.md +21 -0
- package/help/errors/native-sandbox-worker-exited.md +21 -0
- package/help/errors/native-sandbox-worker-lost.md +20 -0
- package/help/errors/native-sandbox-worker-unready.md +22 -0
- package/help/errors/package-not-allowed-pending.md +52 -0
- package/help/errors/package-not-allowed.md +51 -0
- package/help/errors/package-refusals.md +43 -0
- package/help/errors/patch-cursor-malformed.md +31 -0
- package/help/errors/run-lost.md +39 -0
- package/help/errors/run-transcript-download.md +44 -0
- package/help/errors/secret-broker-body-invalid.md +26 -0
- package/help/errors/secret-broker-changed.md +20 -0
- package/help/errors/secret-broker-config-invalid.md +30 -0
- package/help/errors/secret-broker-conflict.md +27 -0
- package/help/errors/secret-broker-destination-denied.md +28 -0
- package/help/errors/secret-broker-value-invalid.md +28 -0
- package/help/errors/secret-brokered.md +24 -0
- package/help/errors/secret-in-value.md +69 -0
- package/help/errors/secret-not-brokered.md +25 -0
- package/help/errors/slack-auth-failed.md +48 -0
- package/help/errors/slack-channel-unreachable.md +39 -0
- package/help/errors/slack-not-configured.md +33 -0
- package/help/errors/target-merge.md +40 -0
- package/help/fix-merge-conflicts.md +73 -0
- package/help/getting-started.md +4 -5
- package/help/github-app-setup.md +132 -0
- package/help/github.md +40 -1
- package/help/identity-and-access.md +7 -1
- package/help/jira.md +23 -6
- package/help/knowledge.md +16 -7
- package/help/local-repositories.md +3 -4
- package/help/low-power-mode.md +131 -0
- package/help/merge-order-check.md +122 -0
- package/help/mobile-app.md +54 -0
- package/help/native-capabilities.md +29 -1
- package/help/native-sandbox.md +150 -0
- package/help/observability.md +8 -0
- package/help/operating-agents.md +5 -0
- package/help/package-audit-mode.md +91 -0
- package/help/related-pull-requests.md +80 -16
- package/help/repo-instructions-and-skills.md +91 -0
- package/help/resume-runs-locally.md +131 -0
- package/help/review-fix-rounds.md +43 -1
- package/help/sharing-agents.md +59 -0
- package/help/slack-notifications.md +76 -0
- package/help/status-comments.md +31 -0
- package/help/stop-run.md +58 -0
- package/help/troubleshooting/budgets.md +28 -0
- package/help/troubleshooting/coding-workers.md +99 -7
- package/package.json +27 -13
- package/prisma/migrations/20261009000003_native_execution_mode/migration.sql +12 -0
- package/prisma/migrations/20261009000004_native_gateway_ledger/migration.sql +65 -0
- package/prisma/migrations/20261009000005_native_gateway_call_child_agent/migration.sql +5 -0
- package/prisma/migrations/20261009000006_run_deferred_start_stop/migration.sql +14 -0
- package/prisma/migrations/20261009000007_native_gateway_network_ready/migration.sql +5 -0
- package/prisma/migrations/20261010000001_workflow_notifications/migration.sql +99 -0
- package/prisma/migrations/20261011000001_native_gateway_session_status_index/migration.sql +2 -0
- package/prisma/migrations/20261012000001_native_warm_worker/migration.sql +32 -0
- package/prisma/migrations/20261013000001_coding_run_merge_order/migration.sql +2 -0
- package/prisma/migrations/20261013000001_secret_broker/migration.sql +17 -0
- package/prisma/migrations/20261013000002_deferred_review_request/migration.sql +4 -0
- package/prisma/migrations/20261014000000_repo_skills/migration.sql +15 -0
- package/prisma/migrations/20261015000001_coding_run_merge_order_index/migration.sql +2 -0
- package/prisma/migrations/20261015000002_no_change_rereview/migration.sql +2 -0
- package/prisma/migrations/20261016000000_registry_approved_accepted_advisories/migration.sql +3 -0
- package/prisma/migrations/20261016000001_mark_ready_when_passing/migration.sql +3 -0
- package/prisma/migrations/20261017000000_debug_trace_max_mb/migration.sql +4 -0
- package/prisma/migrations/20261018000000_dependency_cache/migration.sql +53 -0
- package/prisma/migrations/20261019000000_claude_max_output_tokens/migration.sql +5 -0
- package/prisma/migrations/20261021000000_pr_description_hash/migration.sql +4 -0
- package/prisma/migrations/20261022000000_dependency_snapshot_validation_metadata/migration.sql +4 -0
- package/prisma/migrations/20261023000000_package_audit_mode/migration.sql +27 -0
- package/prisma/migrations/20261024000000_budget_events/migration.sql +26 -0
- package/prisma/migrations/20261025000000_cache_aware_holds/migration.sql +9 -0
- package/prisma/migrations/20261026000000_budget_overrun/migration.sql +4 -0
- package/prisma/migrations/20261027000000_coding_run_request/migration.sql +1 -0
- package/prisma/migrations/20261028000000_native_gateway_review_reads/migration.sql +6 -0
- package/prisma/migrations/20261029000000_lead_survives_deploy/migration.sql +6 -0
- package/prisma/migrations/20261030000000_local_review_covered_sha/migration.sql +2 -0
- package/prisma/migrations/20261031000000_coding_run_budget_limit/migration.sql +9 -0
- package/prisma/migrations/20261101000000_run_transcripts/migration.sql +22 -0
- package/prisma/schema.prisma +631 -146
- package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* `npm run build:viewer-schemas`, and commit the regenerated files.
|
|
7
7
|
*/
|
|
8
8
|
import { z } from "zod";
|
|
9
|
+
import { legacyJsonSchema } from "../core/zod-json-schema.js";
|
|
9
10
|
export const RunStatusSchema = z.enum([
|
|
10
11
|
"pending",
|
|
11
12
|
"running",
|
|
@@ -88,6 +89,10 @@ export const GraphRunSchema = z.object({
|
|
|
88
89
|
model: z.string(),
|
|
89
90
|
/** The coding worker (e.g. `codex`, `claude-code`); null for native runs. */
|
|
90
91
|
codingProvider: z.string().nullable(),
|
|
92
|
+
/** Where a native run executed, snapshotted at start; null for coding runs and runs from before the field existed. */
|
|
93
|
+
nativeExecutionMode: z.enum(["control-plane", "sandbox"]).nullable(),
|
|
94
|
+
/** The warm pool worker (container or pod name) a sandbox run claimed, while its record lasts; null otherwise. */
|
|
95
|
+
warmWorkerName: z.string().nullable(),
|
|
91
96
|
status: RunStatusSchema,
|
|
92
97
|
trigger: RunTriggerSchema,
|
|
93
98
|
turns: z.number().int(),
|
|
@@ -181,6 +186,24 @@ export const InfraInfoSchema = z.object({
|
|
|
181
186
|
managedByLabel: z.record(z.string(), z.string()),
|
|
182
187
|
})
|
|
183
188
|
.nullable(),
|
|
189
|
+
/** How sandbox-mode native agents run; null when NATIVE_SANDBOX_LAUNCHER is unset. */
|
|
190
|
+
native: z
|
|
191
|
+
.object({
|
|
192
|
+
launcher: z.enum(["docker", "kubernetes"]),
|
|
193
|
+
/** Idle workers kept ready for runs to claim (0 = no pool). */
|
|
194
|
+
warmPoolSize: z.number().int(),
|
|
195
|
+
kubernetes: z
|
|
196
|
+
.object({
|
|
197
|
+
namespace: z.string(),
|
|
198
|
+
runtimeClass: z.string().nullable(),
|
|
199
|
+
runLabel: z.string(),
|
|
200
|
+
componentLabel: z.record(z.string(), z.string()),
|
|
201
|
+
warmPoolLabel: z.record(z.string(), z.string()),
|
|
202
|
+
warmWorkerLabel: z.string(),
|
|
203
|
+
})
|
|
204
|
+
.nullable(),
|
|
205
|
+
})
|
|
206
|
+
.nullable(),
|
|
184
207
|
});
|
|
185
208
|
export const VIEWER_SCHEMAS = {
|
|
186
209
|
"graph-snapshot": GraphSnapshotSchema,
|
|
@@ -188,3 +211,9 @@ export const VIEWER_SCHEMAS = {
|
|
|
188
211
|
"viewer-event": ViewerEventSchema,
|
|
189
212
|
"infra-info": InfraInfoSchema,
|
|
190
213
|
};
|
|
214
|
+
/** A viewer schema's JSON Schema (draft-07 keywords, no `$schema`), as the published files spell it. */
|
|
215
|
+
export function viewerJsonSchema(schema) {
|
|
216
|
+
const json = legacyJsonSchema(z.toJSONSchema(schema, { target: "draft-07", io: "output" }));
|
|
217
|
+
delete json.$schema;
|
|
218
|
+
return json;
|
|
219
|
+
}
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
/** Writes src/viewer/schemas/<name>.schema.json from VIEWER_SCHEMAS (npm run build:viewer-schemas). */
|
|
2
|
-
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
-
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
6
5
|
import { VIEWER_SCHEMAS } from "./api-schema.js";
|
|
6
|
+
import { viewerJsonSchema } from "./api-schema.js";
|
|
7
|
+
import { OPENAPI_PATH, renderViewerOpenApi } from "./openapi.js";
|
|
7
8
|
export const SCHEMA_DIR = join(dirname(fileURLToPath(import.meta.url)), "schemas");
|
|
8
9
|
export function renderSchemas() {
|
|
9
10
|
return Object.fromEntries(Object.entries(VIEWER_SCHEMAS).map(([name, schema]) => [
|
|
10
11
|
`${name}.schema.json`,
|
|
11
|
-
`${JSON.stringify(
|
|
12
|
+
`${JSON.stringify({
|
|
13
|
+
$ref: `#/definitions/${name}`,
|
|
14
|
+
definitions: { [name]: viewerJsonSchema(schema) },
|
|
15
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
16
|
+
}, null, 2)}\n`,
|
|
12
17
|
]));
|
|
13
18
|
}
|
|
14
19
|
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
15
20
|
await mkdir(SCHEMA_DIR, { recursive: true });
|
|
16
21
|
for (const [file, text] of Object.entries(renderSchemas()))
|
|
17
22
|
await writeFile(join(SCHEMA_DIR, file), text);
|
|
23
|
+
const pkg = JSON.parse(await readFile(new URL("../../package.json", import.meta.url), "utf8"));
|
|
24
|
+
await writeFile(OPENAPI_PATH, renderViewerOpenApi(pkg.version));
|
|
18
25
|
}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* layer can tell its clients to refetch whatever they may have missed.
|
|
15
15
|
*/
|
|
16
16
|
import pg from "pg";
|
|
17
|
+
import { type DatabaseAuth, type PgAuthOptions } from "../core/pg-auth.js";
|
|
17
18
|
import { type ViewerEvent } from "./api-schema.js";
|
|
18
19
|
export declare const VIEWER_CHANNEL = "wardby_viewer";
|
|
19
20
|
export interface ViewerEventBus {
|
|
@@ -29,8 +30,13 @@ export interface ViewerEventBus {
|
|
|
29
30
|
onState(listener: (live: boolean) => void): () => void;
|
|
30
31
|
close(): Promise<void>;
|
|
31
32
|
}
|
|
33
|
+
/** The LISTEN client's config: auth (pg-auth.ts) plus keepAlive and the pool's connect timeout. */
|
|
34
|
+
export declare function eventBusClientConfig(connectionString: string, auth: DatabaseAuth, pgAuth?: PgAuthOptions): pg.ClientConfig;
|
|
32
35
|
export declare function createViewerEventBus(options: {
|
|
33
36
|
connectionString: string;
|
|
37
|
+
/** Defaults to DATABASE_AUTH. */
|
|
38
|
+
auth?: DatabaseAuth;
|
|
39
|
+
pgAuth?: PgAuthOptions;
|
|
34
40
|
connect?: (connectionString: string) => pg.Client;
|
|
35
41
|
reconnectDelaysMs?: readonly number[];
|
|
36
42
|
healthCheckIntervalMs?: number;
|
package/dist/viewer/event-bus.js
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
import pg from "pg";
|
|
17
17
|
import { poolSettings } from "../core/db.js";
|
|
18
18
|
import { logger } from "../core/logger.js";
|
|
19
|
+
import { databaseAuthFromEnv, pgConnectionConfig } from "../core/pg-auth.js";
|
|
19
20
|
import { ViewerEventSchema } from "./api-schema.js";
|
|
20
21
|
export const VIEWER_CHANNEL = "wardby_viewer";
|
|
21
22
|
const DEFAULT_RECONNECT_DELAYS_MS = [500, 1000, 2000, 5000, 10_000];
|
|
@@ -25,17 +26,25 @@ const DEFAULT_HEALTH_CHECK_INTERVAL_MS = 60_000;
|
|
|
25
26
|
const DEFAULT_HEALTH_CHECK_TIMEOUT_MS = 10_000;
|
|
26
27
|
/** Upper bound on waiting for a graceful disconnect (a half-open socket never answers). */
|
|
27
28
|
const END_TIMEOUT_MS = 2_000;
|
|
29
|
+
/** The LISTEN client's config: auth (pg-auth.ts) plus keepAlive and the pool's connect timeout. */
|
|
30
|
+
export function eventBusClientConfig(connectionString, auth, pgAuth) {
|
|
31
|
+
return {
|
|
32
|
+
...pgConnectionConfig(connectionString, auth, pgAuth),
|
|
33
|
+
keepAlive: true,
|
|
34
|
+
keepAliveInitialDelayMillis: KEEPALIVE_INITIAL_DELAY_MS,
|
|
35
|
+
connectionTimeoutMillis: poolSettings(connectionString).connectionTimeoutMillis,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
28
38
|
export function createViewerEventBus(options) {
|
|
29
39
|
const healthIntervalMs = options.healthCheckIntervalMs ?? DEFAULT_HEALTH_CHECK_INTERVAL_MS;
|
|
30
40
|
const healthTimeoutMs = options.healthCheckTimeoutMs ?? DEFAULT_HEALTH_CHECK_TIMEOUT_MS;
|
|
31
41
|
const delays = options.reconnectDelaysMs?.length ? options.reconnectDelaysMs : DEFAULT_RECONNECT_DELAYS_MS;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}));
|
|
42
|
+
// Built once, up front: a misconfigured DATABASE_AUTH fails here rather than on every reconnect,
|
|
43
|
+
// and under rds-iam every reconnect shares one token cache.
|
|
44
|
+
const clientConfig = options.connect
|
|
45
|
+
? undefined
|
|
46
|
+
: eventBusClientConfig(options.connectionString, options.auth ?? databaseAuthFromEnv(), options.pgAuth);
|
|
47
|
+
const makeClient = options.connect ?? (() => new pg.Client({ ...clientConfig }));
|
|
39
48
|
const listeners = new Set();
|
|
40
49
|
const stateListeners = new Set();
|
|
41
50
|
let client = null; // the current attempt/connection
|
package/dist/viewer/graph.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/** The graph snapshot read model behind GET /admin/api/graph (docs/viewer-api.md). */
|
|
2
2
|
import type { Prisma, PrismaClient } from "#prisma";
|
|
3
3
|
import type { GraphRun, GraphSnapshot } from "./api-schema.js";
|
|
4
|
-
export declare const DEFAULT_GRAPH_LIMIT = 500;
|
|
5
|
-
export declare const MAX_GRAPH_LIMIT = 2000;
|
|
6
4
|
/** Accepts "15m" | "1h" | "6h" | "24h" | "7d" or an ISO-8601 timestamp; null defaults to 1h. Throws otherwise. */
|
|
7
5
|
export declare function parseSince(value: string | null, now: Date): Date;
|
|
8
6
|
declare const runInclude: {
|
|
@@ -23,6 +21,11 @@ declare const runInclude: {
|
|
|
23
21
|
createdAt: "asc";
|
|
24
22
|
};
|
|
25
23
|
};
|
|
24
|
+
nativeWarmWorker: {
|
|
25
|
+
select: {
|
|
26
|
+
name: true;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
26
29
|
};
|
|
27
30
|
type RunRow = Prisma.RunGetPayload<{
|
|
28
31
|
include: typeof runInclude;
|
package/dist/viewer/graph.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { periodStart } from "../core/budget-groups.js";
|
|
2
2
|
import { publicCodingRunResult } from "../coding/protocol.js";
|
|
3
|
-
export const DEFAULT_GRAPH_LIMIT = 500;
|
|
4
|
-
export const MAX_GRAPH_LIMIT = 2000;
|
|
5
3
|
const DEFAULT_SINCE_MS = 60 * 60 * 1000;
|
|
6
4
|
const RELATIVE_SINCE_MS = {
|
|
7
5
|
"15m": 15 * 60 * 1000,
|
|
@@ -30,6 +28,7 @@ const runInclude = {
|
|
|
30
28
|
hostStatus: true,
|
|
31
29
|
issueStatus: true,
|
|
32
30
|
serviceStatuses: { orderBy: { createdAt: "asc" } },
|
|
31
|
+
nativeWarmWorker: { select: { name: true } },
|
|
33
32
|
};
|
|
34
33
|
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
35
34
|
/** Name and version of each service in a coding run's resolved services snapshot. */
|
|
@@ -151,6 +150,12 @@ export function toGraphRun(row, pullRequests, sites = {}) {
|
|
|
151
150
|
agentKind: row.agent.kind,
|
|
152
151
|
model: row.codingRun?.model ?? row.agent.model,
|
|
153
152
|
codingProvider: row.codingRun?.provider ?? null,
|
|
153
|
+
nativeExecutionMode: row.nativeExecutionMode === "sandbox"
|
|
154
|
+
? "sandbox"
|
|
155
|
+
: row.nativeExecutionMode === "control_plane"
|
|
156
|
+
? "control-plane"
|
|
157
|
+
: null,
|
|
158
|
+
warmWorkerName: row.nativeWarmWorker?.name ?? null,
|
|
154
159
|
status: row.status,
|
|
155
160
|
trigger: triggerFor(row, sites),
|
|
156
161
|
turns: row.turns,
|
package/dist/viewer/http.d.ts
CHANGED
|
@@ -12,7 +12,6 @@ import type { InfraInfo } from "./api-schema.js";
|
|
|
12
12
|
import { type IssueSites } from "./graph.js";
|
|
13
13
|
import type { ViewerEventBus } from "./event-bus.js";
|
|
14
14
|
export declare const VIEWER_API_PREFIX = "/admin/api/";
|
|
15
|
-
export declare const SSE_HEARTBEAT_MS = 15000;
|
|
16
15
|
/** A stream whose unsent backlog exceeds this is ended; the client reconnects and resyncs. */
|
|
17
16
|
export declare const SSE_MAX_BUFFERED_BYTES: number;
|
|
18
17
|
export interface ViewerApiDeps {
|
package/dist/viewer/http.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { requireScope } from "../mcp/auth/resource-server.js";
|
|
2
2
|
import { sendJson } from "../mcp/transport/streamable-http.js";
|
|
3
|
-
import {
|
|
3
|
+
import { loadGraph, parseSince } from "./graph.js";
|
|
4
|
+
import { DEFAULT_GRAPH_LIMIT, MAX_GRAPH_LIMIT, SSE_HEARTBEAT_MS } from "./limits.js";
|
|
4
5
|
import { loadRunDetail } from "./run-detail.js";
|
|
5
6
|
export const VIEWER_API_PREFIX = "/admin/api/";
|
|
6
|
-
export const SSE_HEARTBEAT_MS = 15_000;
|
|
7
7
|
/** A stream whose unsent backlog exceeds this is ended; the client reconnects and resyncs. */
|
|
8
8
|
export const SSE_MAX_BUFFERED_BYTES = 1024 * 1024;
|
|
9
9
|
const RUN_ID = /^[A-Za-z0-9_-]{1,64}$/;
|
package/dist/viewer/infra.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
/** The read model behind GET /admin/api/infra (docs/viewer-api.md): built once at startup, no cluster reads. */
|
|
2
|
-
import { loadKubernetesJobConfig, loadProviderConfig } from "../config/providers.js";
|
|
2
|
+
import { loadKubernetesJobConfig, loadNativeSandboxConfig, loadProviderConfig } from "../config/providers.js";
|
|
3
|
+
import { NATIVE_RUN_COMPONENT_LABEL, NATIVE_RUN_SHA_LABEL, NATIVE_WARM_POOL_LABEL, NATIVE_WARM_TOKEN_LABEL, } from "../native-worker/kubernetes-isolation.js";
|
|
3
4
|
import { RUN_COMPONENT_LABEL, RUN_MANAGED_BY_LABEL, RUN_SHA_CHARS, RUN_SHA_LABEL, } from "../providers/jobs/kubernetes-isolation.js";
|
|
4
5
|
export function buildInfraInfo(env = process.env) {
|
|
5
6
|
const raw = loadProviderConfig(env).jobs;
|
|
6
7
|
const launcher = raw === "docker" || raw === "kubernetes" ? raw : "local";
|
|
8
|
+
const native = buildNativeInfo(env);
|
|
7
9
|
if (launcher !== "kubernetes")
|
|
8
|
-
return { launcher, kubernetes: null };
|
|
10
|
+
return { launcher, kubernetes: null, native };
|
|
9
11
|
const k8s = loadKubernetesJobConfig(env);
|
|
10
12
|
return {
|
|
11
13
|
launcher,
|
|
14
|
+
native,
|
|
12
15
|
kubernetes: {
|
|
13
16
|
namespace: k8s.namespace,
|
|
14
17
|
platform: k8s.platform,
|
|
@@ -21,3 +24,23 @@ export function buildInfraInfo(env = process.env) {
|
|
|
21
24
|
},
|
|
22
25
|
};
|
|
23
26
|
}
|
|
27
|
+
/** Where sandbox-mode native agents run (NATIVE_SANDBOX_*); null when no sandbox launcher is configured. */
|
|
28
|
+
function buildNativeInfo(env) {
|
|
29
|
+
const config = loadNativeSandboxConfig(env);
|
|
30
|
+
if (!config)
|
|
31
|
+
return null;
|
|
32
|
+
return {
|
|
33
|
+
launcher: config.launcher,
|
|
34
|
+
warmPoolSize: config.warmPoolSize,
|
|
35
|
+
kubernetes: config.launcher === "kubernetes"
|
|
36
|
+
? {
|
|
37
|
+
namespace: config.namespace,
|
|
38
|
+
runtimeClass: config.runtimeClassName ?? null,
|
|
39
|
+
runLabel: NATIVE_RUN_SHA_LABEL,
|
|
40
|
+
componentLabel: { ...NATIVE_RUN_COMPONENT_LABEL },
|
|
41
|
+
warmPoolLabel: { ...NATIVE_WARM_POOL_LABEL },
|
|
42
|
+
warmWorkerLabel: NATIVE_WARM_TOKEN_LABEL,
|
|
43
|
+
}
|
|
44
|
+
: null,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const OPENAPI_PATH: string;
|
|
2
|
+
type Json = Record<string, unknown>;
|
|
3
|
+
export interface ViewerRoute {
|
|
4
|
+
path: string;
|
|
5
|
+
operationId: string;
|
|
6
|
+
summary: string;
|
|
7
|
+
description: string;
|
|
8
|
+
parameters?: readonly Json[];
|
|
9
|
+
responses: Readonly<Record<string, Json>>;
|
|
10
|
+
}
|
|
11
|
+
export declare const VIEWER_ROUTES: readonly ViewerRoute[];
|
|
12
|
+
export declare function buildViewerOpenApi(version: string): Json;
|
|
13
|
+
export declare const HEADER = "# Generated by npm run build:viewer-schemas from src/viewer/api-schema.ts and src/viewer/openapi.ts. Do not edit.";
|
|
14
|
+
export declare function renderViewerOpenApi(version: string): string;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds the published OpenAPI 3.1 document for the admin viewer API
|
|
3
|
+
* (docs/viewer-api.openapi.yml) from the zod schemas and a route table.
|
|
4
|
+
* Generated by `npm run build:viewer-schemas`; never edit the YAML by hand.
|
|
5
|
+
*/
|
|
6
|
+
import { dirname, join } from "node:path";
|
|
7
|
+
import { fileURLToPath } from "node:url";
|
|
8
|
+
import { stringify } from "yaml";
|
|
9
|
+
import { VIEWER_SCHEMAS } from "./api-schema.js";
|
|
10
|
+
import { viewerJsonSchema } from "./api-schema.js";
|
|
11
|
+
import { DEFAULT_GRAPH_LIMIT, MAX_GRAPH_LIMIT, SSE_HEARTBEAT_MS } from "./limits.js";
|
|
12
|
+
export const OPENAPI_PATH = join(dirname(fileURLToPath(import.meta.url)), "../../docs/viewer-api.openapi.yml");
|
|
13
|
+
const AUTH_NOTE = "Requires a bearer token with the `admin:view` scope, held by a caller with the admin role.";
|
|
14
|
+
const ref = (name) => ({ $ref: `#/components/schemas/${name}` });
|
|
15
|
+
const errorBody = (codes, description) => {
|
|
16
|
+
const list = codes.split(", ");
|
|
17
|
+
return {
|
|
18
|
+
description,
|
|
19
|
+
content: {
|
|
20
|
+
"application/json": {
|
|
21
|
+
schema: { allOf: [ref("ViewerError"), { properties: { error: { enum: list } } }] },
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
"x-error-codes": list,
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
const wwwAuthenticate = { "WWW-Authenticate": { $ref: "#/components/headers/WWWAuthenticate" } };
|
|
28
|
+
export const VIEWER_ROUTES = [
|
|
29
|
+
{
|
|
30
|
+
path: "/admin/api/graph",
|
|
31
|
+
operationId: "getGraph",
|
|
32
|
+
summary: "Graph snapshot",
|
|
33
|
+
description: "Agents, runs, coding-run services and outcomes for a time window, as a graph.",
|
|
34
|
+
parameters: [
|
|
35
|
+
{
|
|
36
|
+
name: "since",
|
|
37
|
+
in: "query",
|
|
38
|
+
required: false,
|
|
39
|
+
description: "Window start: `15m`, `1h`, `6h`, `24h`, `7d`, or an ISO-8601 timestamp. Default `1h`.",
|
|
40
|
+
schema: { type: "string", default: "1h" },
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "limit",
|
|
44
|
+
in: "query",
|
|
45
|
+
required: false,
|
|
46
|
+
description: `Maximum number of runs, 1 to ${MAX_GRAPH_LIMIT}. Default ${DEFAULT_GRAPH_LIMIT}.`,
|
|
47
|
+
schema: { type: "integer", minimum: 1, maximum: MAX_GRAPH_LIMIT, default: DEFAULT_GRAPH_LIMIT },
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
responses: {
|
|
51
|
+
"200": {
|
|
52
|
+
description: "The graph snapshot.",
|
|
53
|
+
content: { "application/json": { schema: ref("graph-snapshot") } },
|
|
54
|
+
},
|
|
55
|
+
"400": errorBody("invalid_since, invalid_limit", "A query parameter is invalid."),
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
path: "/admin/api/runs/{id}",
|
|
60
|
+
operationId: "getRun",
|
|
61
|
+
summary: "Run detail",
|
|
62
|
+
description: "Full detail for one run, including final text.",
|
|
63
|
+
parameters: [{ name: "id", in: "path", required: true, description: "Run id.", schema: { type: "string" } }],
|
|
64
|
+
responses: {
|
|
65
|
+
"200": { description: "The run.", content: { "application/json": { schema: ref("run-detail") } } },
|
|
66
|
+
"404": errorBody("not_found", "No run with that id."),
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
path: "/admin/api/infra",
|
|
71
|
+
operationId: "getInfra",
|
|
72
|
+
summary: "Infrastructure info",
|
|
73
|
+
description: "Where and how this wardby deployment runs its workloads.",
|
|
74
|
+
responses: {
|
|
75
|
+
"200": { description: "Infrastructure info.", content: { "application/json": { schema: ref("infra-info") } } },
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
path: "/admin/api/events",
|
|
80
|
+
operationId: "getEvents",
|
|
81
|
+
summary: "Live event stream",
|
|
82
|
+
description: [
|
|
83
|
+
"A Server-Sent Events stream (`text/event-stream`) of live changes. Frames:",
|
|
84
|
+
"",
|
|
85
|
+
"- `retry: 3000`: suggested client reconnect delay in milliseconds.",
|
|
86
|
+
'- `event: hello`: sent first. Data is `{"connected": <bool>}`, whether the server\'s live-event connection is up.',
|
|
87
|
+
"- `event: run`, `event: service`, `event: outcome`: a run, coding-run service, or outcome changed. Each carries an `id:` line. Payloads match the `viewer-event` schema (see `x-event-schema`).",
|
|
88
|
+
'- `event: status`: the server\'s live-event connection changed. Data is `{"connected": <bool>}`.',
|
|
89
|
+
"- `event: resync`: the live-event connection is up (again). Events may have been missed: refetch the graph.",
|
|
90
|
+
`- \`: ping\`: comment sent every ${SSE_HEARTBEAT_MS / 1000} seconds to keep the connection open.`,
|
|
91
|
+
"",
|
|
92
|
+
"There is no replay. Open the event stream first, then load `/admin/api/graph` and apply events on top of it. Refetch the graph on every `resync` and after every reconnect rather than trying to resume.",
|
|
93
|
+
].join("\n"),
|
|
94
|
+
responses: {
|
|
95
|
+
"200": {
|
|
96
|
+
description: "The event stream.",
|
|
97
|
+
content: { "text/event-stream": { schema: { type: "string" } } },
|
|
98
|
+
"x-event-schema": ref("viewer-event"),
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
];
|
|
103
|
+
function componentSchemas() {
|
|
104
|
+
const schemas = {};
|
|
105
|
+
for (const [name, schema] of Object.entries(VIEWER_SCHEMAS)) {
|
|
106
|
+
schemas[name] = viewerJsonSchema(schema);
|
|
107
|
+
}
|
|
108
|
+
schemas.ViewerError = {
|
|
109
|
+
type: "object",
|
|
110
|
+
required: ["error"],
|
|
111
|
+
properties: { error: { type: "string" } },
|
|
112
|
+
additionalProperties: false,
|
|
113
|
+
};
|
|
114
|
+
schemas.ViewerInternalError = {
|
|
115
|
+
type: "object",
|
|
116
|
+
required: ["error", "id"],
|
|
117
|
+
properties: { error: { type: "string", enum: ["internal_error"] }, id: { type: "string" } },
|
|
118
|
+
additionalProperties: false,
|
|
119
|
+
};
|
|
120
|
+
return schemas;
|
|
121
|
+
}
|
|
122
|
+
function operation(route) {
|
|
123
|
+
return {
|
|
124
|
+
operationId: route.operationId,
|
|
125
|
+
summary: route.summary,
|
|
126
|
+
description: `${route.description}\n\n${AUTH_NOTE}`,
|
|
127
|
+
security: [{ bearer: [] }],
|
|
128
|
+
...(route.parameters ? { parameters: route.parameters } : {}),
|
|
129
|
+
responses: {
|
|
130
|
+
...route.responses,
|
|
131
|
+
"401": { ...errorBody("invalid_token", "No valid bearer token."), headers: wwwAuthenticate },
|
|
132
|
+
"403": {
|
|
133
|
+
...errorBody("invalid_token", "Token lacks the `admin:view` scope (the `WWW-Authenticate` header is present), or the caller lacks the admin role (no `WWW-Authenticate` header)."),
|
|
134
|
+
headers: wwwAuthenticate,
|
|
135
|
+
},
|
|
136
|
+
"405": {
|
|
137
|
+
...errorBody("method_not_allowed", "Only GET is allowed."),
|
|
138
|
+
headers: { Allow: { description: "Allowed methods: GET.", schema: { type: "string", enum: ["GET"] } } },
|
|
139
|
+
},
|
|
140
|
+
default: {
|
|
141
|
+
description: "Unexpected server error (HTTP 500). `id` identifies the failure in the server log.",
|
|
142
|
+
content: { "application/json": { schema: ref("ViewerInternalError") } },
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
export function buildViewerOpenApi(version) {
|
|
148
|
+
const paths = {};
|
|
149
|
+
for (const route of VIEWER_ROUTES)
|
|
150
|
+
paths[route.path] = { get: operation(route) };
|
|
151
|
+
return {
|
|
152
|
+
openapi: "3.1.0",
|
|
153
|
+
info: {
|
|
154
|
+
title: "wardby admin viewer API",
|
|
155
|
+
version,
|
|
156
|
+
description: "Read-only admin API behind the wardby viewer: graph, run detail, infrastructure info and a live event stream. Response objects may gain new fields in later releases; clients should ignore unknown fields. See docs/viewer-api.md for the prose contract.",
|
|
157
|
+
},
|
|
158
|
+
servers: [{ url: "https://{host}", variables: { host: { default: "wardby.example.com" } } }],
|
|
159
|
+
paths,
|
|
160
|
+
components: {
|
|
161
|
+
securitySchemes: { bearer: { type: "http", scheme: "bearer" } },
|
|
162
|
+
headers: { WWWAuthenticate: { description: "Bearer challenge.", schema: { type: "string" } } },
|
|
163
|
+
schemas: componentSchemas(),
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
export const HEADER = "# Generated by npm run build:viewer-schemas from src/viewer/api-schema.ts and src/viewer/openapi.ts. Do not edit.";
|
|
168
|
+
export function renderViewerOpenApi(version) {
|
|
169
|
+
return `${HEADER}\n${stringify(buildViewerOpenApi(version), { lineWidth: 0, aliasDuplicateObjects: false })}`;
|
|
170
|
+
}
|
package/dist/wardby-bin.js
CHANGED
|
@@ -42,6 +42,16 @@ async function main() {
|
|
|
42
42
|
const { helpCommand } = await import("./help/cli.js");
|
|
43
43
|
await helpCommand(process.argv.slice(3));
|
|
44
44
|
}
|
|
45
|
+
else if (command === "resume") {
|
|
46
|
+
// Runs on a developer's machine: no environment, database, or server runtime.
|
|
47
|
+
const { resumeCommand } = await import("./coding/transcript/resume/command.js");
|
|
48
|
+
process.exitCode = await resumeCommand(process.argv.slice(3));
|
|
49
|
+
}
|
|
50
|
+
else if (command === "resume-tools") {
|
|
51
|
+
// Hidden: the stand-in tool server `wardby resume` configures Claude Code to start.
|
|
52
|
+
const { resumeToolsCommand } = await import("./coding/transcript/resume/stand-in.js");
|
|
53
|
+
await resumeToolsCommand(process.argv.slice(3));
|
|
54
|
+
}
|
|
45
55
|
else if (command === "knowledge") {
|
|
46
56
|
// Offline bundle validation: no environment, database, or HTTP runtime.
|
|
47
57
|
const { knowledgeCommand } = await import("./knowledge/cli.js");
|
package/docs/README.md
CHANGED
|
@@ -18,6 +18,11 @@
|
|
|
18
18
|
- [Architecture knowledge bundles](knowledge.md) covers `docs/knowledge/`: the
|
|
19
19
|
concept format, how coding runs and reviewers use it, `wardby knowledge check`,
|
|
20
20
|
and the scheduled architecture agent.
|
|
21
|
+
- [Native sandbox](native-sandbox.md) (0.5.4+) runs a native agent's turn loop and user
|
|
22
|
+
tools in a single-use, credential-free container behind a native gateway.
|
|
23
|
+
- [Secrets and tools](tool-secrets.md) covers readable and brokered secrets
|
|
24
|
+
(brokered secrets require 0.6.0+):
|
|
25
|
+
attaching secrets to tools, `set_secret_broker`, placements, and errors.
|
|
21
26
|
- [Coding-worker isolation](coding-worker-isolation.md) documents the threat
|
|
22
27
|
model and enforced worker boundary.
|
|
23
28
|
- [Bring-your-own worker images](coding-worker-byo-images.md) explains how to
|
|
@@ -29,6 +34,8 @@
|
|
|
29
34
|
the catalog, per-agent permission, variables, and errors.
|
|
30
35
|
- [Jira agents](jira-agents.md) connects wardby to Jira Cloud with a service
|
|
31
36
|
account and webhook, and links agents to projects.
|
|
37
|
+
- [Send workflow updates to Slack](slack-notifications.md) (0.6.0+) links a Slack
|
|
38
|
+
channel to a Jira project or an agent to follow cards from pickup to merge.
|
|
32
39
|
- [Observability](observability.md) covers Prometheus metrics, Grafana, cloud
|
|
33
40
|
collectors, retention, and production ownership.
|
|
34
41
|
- [Release verification](release-verification.md) lists the automated and live
|