@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
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Starts Claude Code on the imported session:
|
|
3
|
+
*
|
|
4
|
+
* claude --resume <session file> --mcp-config <stand-in config>
|
|
5
|
+
* [--system-prompt-snapshot off] --append-system-prompt <move note>
|
|
6
|
+
*
|
|
7
|
+
* in the checkout. The MCP config starts the stand-in `wardby_tools` server
|
|
8
|
+
* (stand-in.ts) from this same wardby install, so the run's tool calls
|
|
9
|
+
* render and a call to run_command explains the move.
|
|
10
|
+
*
|
|
11
|
+
* System prompt flags on resume (Claude Code CLI reference, "System prompt
|
|
12
|
+
* flags in resumed conversations"): from v2.1.265 Claude Code records the
|
|
13
|
+
* system prompt on a conversation's first request and reuses it after
|
|
14
|
+
* --resume, so new flag text would apply only after compaction.
|
|
15
|
+
* `--system-prompt-snapshot off` (v2.1.257 and later) rebuilds the prompt on
|
|
16
|
+
* every request, so the note applies. Older versions did not record it
|
|
17
|
+
* while a system prompt flag was passed, so the note applies without it.
|
|
18
|
+
* When the version cannot be read, the flag is included (every current
|
|
19
|
+
* release has it) and the output says to remove it for a version before
|
|
20
|
+
* 2.1.257.
|
|
21
|
+
*/
|
|
22
|
+
import { execFile, spawn } from "node:child_process";
|
|
23
|
+
import { constants } from "node:fs";
|
|
24
|
+
import { open, rename } from "node:fs/promises";
|
|
25
|
+
import { join } from "node:path";
|
|
26
|
+
import { fileURLToPath } from "node:url";
|
|
27
|
+
import { randomBytes } from "node:crypto";
|
|
28
|
+
import { promisify } from "node:util";
|
|
29
|
+
import { STAND_IN_SERVER_NAME } from "./stand-in.js";
|
|
30
|
+
const execFileAsync = promisify(execFile);
|
|
31
|
+
/** Where the run's commands ran in the worker (run_command's workspace, claude-tool-runner/main.mjs). */
|
|
32
|
+
export const WORKER_WORKSPACE = "/workspace";
|
|
33
|
+
/** First Claude Code version with --system-prompt-snapshot. */
|
|
34
|
+
const SNAPSHOT_FLAG_SINCE = [2, 1, 257];
|
|
35
|
+
/** This install's wardby entry point, for the MCP config to start the stand-in with. */
|
|
36
|
+
export function wardbyBinPath() {
|
|
37
|
+
// src/coding/transcript/resume/ and dist/coding/transcript/resume/ are both four levels below the package root.
|
|
38
|
+
return fileURLToPath(new URL("../../../../bin/wardby.js", import.meta.url));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* `runChanges`: true when the checkout is at the run's branch, false when it fell back to the base
|
|
42
|
+
* commit, undefined for --here (the importer did not choose what is checked out).
|
|
43
|
+
*/
|
|
44
|
+
export function moveNote(opts) {
|
|
45
|
+
const changes = opts.runChanges === true
|
|
46
|
+
? "This checkout already contains the run's changes: do not redo them. "
|
|
47
|
+
: opts.runChanges === false
|
|
48
|
+
? "This checkout is at the run's base commit: the run's changes are not in it. "
|
|
49
|
+
: "";
|
|
50
|
+
return (`This conversation was moved from wardby run ${opts.runId} to the user's machine. ` +
|
|
51
|
+
`The worker path ${opts.from} is now ${opts.checkout} (checked out at ${opts.ref}). ` +
|
|
52
|
+
changes +
|
|
53
|
+
`The run_command tool only worked inside the worker and is gone: use your local tools (Bash, Read, Edit) in ${opts.checkout}.`);
|
|
54
|
+
}
|
|
55
|
+
export function mcpConfig(opts) {
|
|
56
|
+
return {
|
|
57
|
+
mcpServers: {
|
|
58
|
+
[STAND_IN_SERVER_NAME]: {
|
|
59
|
+
type: "stdio",
|
|
60
|
+
command: opts.node ?? process.execPath,
|
|
61
|
+
args: [opts.bin ?? wardbyBinPath(), "resume-tools", "--checkout", opts.checkout, "--from", opts.from],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/** Writes the MCP config next to the session file (mode 0600, atomically). */
|
|
67
|
+
export async function writeMcpConfig(dir, config) {
|
|
68
|
+
const path = join(dir, "mcp-config.json");
|
|
69
|
+
const temp = join(dir, `.mcp-config.${randomBytes(6).toString("hex")}.tmp`);
|
|
70
|
+
const handle = await open(temp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, 0o600);
|
|
71
|
+
try {
|
|
72
|
+
await handle.writeFile(`${JSON.stringify(config, null, 2)}\n`);
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
await handle.close();
|
|
76
|
+
}
|
|
77
|
+
await rename(temp, path);
|
|
78
|
+
return path;
|
|
79
|
+
}
|
|
80
|
+
export function parseClaudeVersion(output) {
|
|
81
|
+
const match = /(\d+)\.(\d+)\.(\d+)/.exec(output);
|
|
82
|
+
return match ? [Number(match[1]), Number(match[2]), Number(match[3])] : undefined;
|
|
83
|
+
}
|
|
84
|
+
function atLeast(version, min) {
|
|
85
|
+
for (let i = 0; i < 3; i++)
|
|
86
|
+
if (version[i] !== min[i])
|
|
87
|
+
return version[i] > min[i];
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
/** `claude --version`, or undefined when claude is not on PATH. */
|
|
91
|
+
export async function claudeVersion() {
|
|
92
|
+
try {
|
|
93
|
+
const { stdout } = await execFileAsync("claude", ["--version"], { timeout: 15_000 });
|
|
94
|
+
return stdout.trim();
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export const UNKNOWN_VERSION_NOTE = "Could not read the Claude Code version: the command includes --system-prompt-snapshot off (Claude Code 2.1.257 or later); remove that flag for an older version.";
|
|
101
|
+
export function claudeArgs(opts) {
|
|
102
|
+
// Unknown version (claude missing or unparseable): include it, as every current release supports it.
|
|
103
|
+
const snapshot = !opts.version || atLeast(opts.version, SNAPSHOT_FLAG_SINCE) ? ["--system-prompt-snapshot", "off"] : [];
|
|
104
|
+
return [
|
|
105
|
+
"--resume",
|
|
106
|
+
opts.sessionFile,
|
|
107
|
+
"--mcp-config",
|
|
108
|
+
opts.mcpConfigPath,
|
|
109
|
+
...snapshot,
|
|
110
|
+
"--append-system-prompt",
|
|
111
|
+
opts.note,
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
/** POSIX shell quoting, for printing a command the user can paste. */
|
|
115
|
+
export function shellQuote(arg) {
|
|
116
|
+
return /^[A-Za-z0-9_@%+=:,./-]+$/.test(arg) ? arg : `'${arg.replace(/'/g, `'\\''`)}'`;
|
|
117
|
+
}
|
|
118
|
+
export function printableCommand(cwd, args) {
|
|
119
|
+
return `cd ${shellQuote(cwd)} && claude ${args.map(shellQuote).join(" ")}`;
|
|
120
|
+
}
|
|
121
|
+
/** Runs claude in the checkout with this terminal; resolves with its exit code. */
|
|
122
|
+
export function launchClaude(cwd, args) {
|
|
123
|
+
return new Promise((resolve, reject) => {
|
|
124
|
+
const child = spawn("claude", args, { cwd, stdio: "inherit" });
|
|
125
|
+
child.once("error", reject);
|
|
126
|
+
child.once("exit", (code, signal) => resolve(code ?? (signal ? 1 : 0)));
|
|
127
|
+
});
|
|
128
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type DownloadedTranscript } from "./download.js";
|
|
2
|
+
export declare function defaultSessionsRoot(): string;
|
|
3
|
+
export interface SessionFile {
|
|
4
|
+
path: string;
|
|
5
|
+
/** The directory that holds the session file and the MCP config. */
|
|
6
|
+
dir: string;
|
|
7
|
+
/** "written": new; "same": identical file already there; "continued": a local continuation kept; "replaced": --force. */
|
|
8
|
+
outcome: "written" | "same" | "continued" | "replaced";
|
|
9
|
+
}
|
|
10
|
+
export declare function writeSessionFile(transcript: DownloadedTranscript, opts?: {
|
|
11
|
+
root?: string;
|
|
12
|
+
force?: boolean;
|
|
13
|
+
}): Promise<SessionFile>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Writes a downloaded transcript where `claude --resume <file>` can load it:
|
|
3
|
+
* `<root>/<runId>/<sessionId>.jsonl` (root: ~/.wardby/sessions), the body
|
|
4
|
+
* without wardby's header line, mode 0600, atomically (temp file + rename).
|
|
5
|
+
* Never writes into a Claude Code config directory, and never replaces a
|
|
6
|
+
* different file unless asked to.
|
|
7
|
+
*/
|
|
8
|
+
import { randomBytes } from "node:crypto";
|
|
9
|
+
import { constants } from "node:fs";
|
|
10
|
+
import { mkdir, open, readFile, rename, rm } from "node:fs/promises";
|
|
11
|
+
import { homedir } from "node:os";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
import { promisify } from "node:util";
|
|
14
|
+
import { gunzip } from "node:zlib";
|
|
15
|
+
import { parseTranscriptFile } from "../format.js";
|
|
16
|
+
import { ResumeError } from "./download.js";
|
|
17
|
+
const gunzipAsync = promisify(gunzip);
|
|
18
|
+
const SESSION_ID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
19
|
+
const RUN_ID = /^[a-z0-9]{8,64}$/i;
|
|
20
|
+
const MAX_BODY_BYTES = 64 * 1024 * 1024;
|
|
21
|
+
export function defaultSessionsRoot() {
|
|
22
|
+
return join(homedir(), ".wardby", "sessions");
|
|
23
|
+
}
|
|
24
|
+
export async function writeSessionFile(transcript, opts = {}) {
|
|
25
|
+
const { meta } = transcript;
|
|
26
|
+
// Re-checked here: these name a path.
|
|
27
|
+
if (!RUN_ID.test(meta.runId) || !SESSION_ID.test(meta.sessionId)) {
|
|
28
|
+
throw new ResumeError("The server's response has invalid run details.");
|
|
29
|
+
}
|
|
30
|
+
let text;
|
|
31
|
+
try {
|
|
32
|
+
const raw = await gunzipAsync(transcript.gzip, { maxOutputLength: MAX_BODY_BYTES + 1024 * 1024 });
|
|
33
|
+
text = raw.toString("utf8");
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
throw new ResumeError("The downloaded transcript could not be decompressed.");
|
|
37
|
+
}
|
|
38
|
+
const file = parseTranscriptFile(text);
|
|
39
|
+
if (!file || file.header.sessionId !== meta.sessionId || file.header.status !== "ok" || !file.body) {
|
|
40
|
+
throw new ResumeError("The downloaded transcript is not one wardby resume can load.");
|
|
41
|
+
}
|
|
42
|
+
const body = Buffer.from(file.body, "utf8");
|
|
43
|
+
const dir = join(opts.root ?? defaultSessionsRoot(), meta.runId);
|
|
44
|
+
const path = join(dir, `${meta.sessionId}.jsonl`);
|
|
45
|
+
await mkdir(dir, { recursive: true, mode: 0o700 });
|
|
46
|
+
let existing;
|
|
47
|
+
try {
|
|
48
|
+
existing = await readFile(path);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (error.code !== "ENOENT")
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
if (existing) {
|
|
55
|
+
if (existing.equals(body))
|
|
56
|
+
return { path, dir, outcome: "same" };
|
|
57
|
+
// Claude Code appends the continued conversation to the file it resumed.
|
|
58
|
+
if (!opts.force && existing.byteLength > body.byteLength && existing.subarray(0, body.byteLength).equals(body)) {
|
|
59
|
+
return { path, dir, outcome: "continued" };
|
|
60
|
+
}
|
|
61
|
+
if (!opts.force) {
|
|
62
|
+
throw new ResumeError(`A different session file already exists at ${path}. Nothing was changed. Pass --force to replace it with the downloaded transcript.`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const temp = join(dir, `.${meta.sessionId}.${randomBytes(6).toString("hex")}.tmp`);
|
|
66
|
+
const handle = await open(temp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, 0o600);
|
|
67
|
+
try {
|
|
68
|
+
await handle.writeFile(body);
|
|
69
|
+
await handle.sync();
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
await handle.close();
|
|
73
|
+
await rm(temp, { force: true });
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
await handle.close();
|
|
77
|
+
await rename(temp, path);
|
|
78
|
+
return { path, dir, outcome: existing ? "replaced" : "written" };
|
|
79
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type McpServerFactory } from "@modelcontextprotocol/server";
|
|
2
|
+
export declare const STAND_IN_SERVER_NAME = "wardby_tools";
|
|
3
|
+
export interface StandInOptions {
|
|
4
|
+
/** The local checkout the session continues in. */
|
|
5
|
+
checkout: string;
|
|
6
|
+
/** The worker path the run's commands ran in. */
|
|
7
|
+
from: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function movedMessage(opts: StandInOptions): string;
|
|
10
|
+
export declare function standInFactory(opts: StandInOptions): McpServerFactory;
|
|
11
|
+
export declare function resumeToolsCommand(argv: string[]): Promise<void>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The stand-in for a run's worker tool, started by `wardby resume` through
|
|
3
|
+
* the MCP config it writes: a stdio MCP server named `wardby_tools` that
|
|
4
|
+
* offers `run_command` with the worker's input schema, so a resumed session
|
|
5
|
+
* renders the run's calls. It runs nothing: every call answers with an error
|
|
6
|
+
* telling the model the session moved and to use its local tools.
|
|
7
|
+
*
|
|
8
|
+
* wardby resume-tools --checkout <dir> --from <podPath> (hidden; started by Claude Code)
|
|
9
|
+
*/
|
|
10
|
+
import { parseArgs } from "node:util";
|
|
11
|
+
import { McpServer, fromJsonSchema } from "@modelcontextprotocol/server";
|
|
12
|
+
import { serveStdio, StdioServerTransport } from "@modelcontextprotocol/server/stdio";
|
|
13
|
+
export const STAND_IN_SERVER_NAME = "wardby_tools";
|
|
14
|
+
export function movedMessage(opts) {
|
|
15
|
+
return (`This session moved from a wardby worker. ${opts.from} is now ${opts.checkout}. ` +
|
|
16
|
+
`run_command only ran inside the worker; use your local tools (Bash, Read, Edit) in ${opts.checkout}.`);
|
|
17
|
+
}
|
|
18
|
+
/** The worker's run_command input schema (claude-tool-runner/main.mjs), so recorded calls still match it. */
|
|
19
|
+
const RUN_COMMAND_SCHEMA = {
|
|
20
|
+
type: "object",
|
|
21
|
+
properties: {
|
|
22
|
+
command: { type: "string", minLength: 1 },
|
|
23
|
+
timeout_ms: { type: "integer" },
|
|
24
|
+
},
|
|
25
|
+
required: ["command"],
|
|
26
|
+
};
|
|
27
|
+
export function standInFactory(opts) {
|
|
28
|
+
return () => {
|
|
29
|
+
const server = new McpServer({ name: STAND_IN_SERVER_NAME, version: "1.0.0" });
|
|
30
|
+
server.registerTool("run_command", {
|
|
31
|
+
description: "Ran shell commands inside the wardby worker during the run. Not available locally: it runs nothing. Use your own tools.",
|
|
32
|
+
inputSchema: fromJsonSchema(RUN_COMMAND_SCHEMA),
|
|
33
|
+
}, () => ({ isError: true, content: [{ type: "text", text: movedMessage(opts) }] }));
|
|
34
|
+
return server;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export async function resumeToolsCommand(argv) {
|
|
38
|
+
const { values } = parseArgs({
|
|
39
|
+
args: argv,
|
|
40
|
+
options: { checkout: { type: "string" }, from: { type: "string" } },
|
|
41
|
+
strict: true,
|
|
42
|
+
});
|
|
43
|
+
if (!values.checkout || !values.from)
|
|
44
|
+
throw new Error("usage: wardby resume-tools --checkout <dir> --from <path>");
|
|
45
|
+
// Serves until Claude Code closes its end of stdin.
|
|
46
|
+
serveStdio(standInFactory({ checkout: values.checkout, from: values.from }), {
|
|
47
|
+
transport: new StdioServerTransport(),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type CodingWorkerOutput } from "../coding/protocol.js";
|
|
2
2
|
/**
|
|
3
3
|
* Reads a regular file of at most `maxBytes`, refusing symlinks and anything
|
|
4
4
|
* that is not a regular file.
|
|
@@ -12,9 +12,9 @@ import { type CodingAgentOutput } from "../coding/protocol.js";
|
|
|
12
12
|
*/
|
|
13
13
|
export declare function readBoundedRegularFile(path: string, maxBytes: number, errorCode: string): Promise<string>;
|
|
14
14
|
export declare function readCodingInput(path: string): Promise<{
|
|
15
|
-
repository: string;
|
|
16
15
|
schemaVersion: 1;
|
|
17
16
|
runId: string;
|
|
17
|
+
repository: string;
|
|
18
18
|
baseRef: string;
|
|
19
19
|
headRef: string;
|
|
20
20
|
task: string;
|
|
@@ -25,11 +25,24 @@ export declare function readCodingInput(path: string): Promise<{
|
|
|
25
25
|
runId: string;
|
|
26
26
|
} | undefined;
|
|
27
27
|
debugTrace?: boolean | undefined;
|
|
28
|
+
dependencyCache?: true | undefined;
|
|
29
|
+
sessionResume?: true | undefined;
|
|
30
|
+
diskMb?: number | undefined;
|
|
31
|
+
debugTraceMaxMb?: number | undefined;
|
|
28
32
|
maxTurns?: number | undefined;
|
|
33
|
+
maxOutputTokens?: number | undefined;
|
|
29
34
|
services?: {
|
|
30
35
|
name: string;
|
|
31
36
|
version: string;
|
|
32
37
|
testEnv: Record<string, string>;
|
|
33
38
|
}[] | undefined;
|
|
39
|
+
repoSkills?: boolean | undefined;
|
|
40
|
+
claudeBareMode?: boolean | undefined;
|
|
41
|
+
claudeContext?: {
|
|
42
|
+
files: {
|
|
43
|
+
path: string;
|
|
44
|
+
content: string;
|
|
45
|
+
}[];
|
|
46
|
+
} | undefined;
|
|
34
47
|
}>;
|
|
35
|
-
export declare function writeCodingOutputAtomic(path: string, output:
|
|
48
|
+
export declare function writeCodingOutputAtomic(path: string, output: CodingWorkerOutput): Promise<void>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { constants } from "node:fs";
|
|
2
2
|
import { lstat, mkdir, open, rename, unlink } from "node:fs/promises";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
|
-
import { MAX_CODING_ARTIFACT_BYTES, parseCodingTaskInputJson } from "../coding/protocol.js";
|
|
4
|
+
import { MAX_CODING_ARTIFACT_BYTES, MAX_CODING_INPUT_BYTES, parseCodingTaskInputJson, } from "../coding/protocol.js";
|
|
5
5
|
/**
|
|
6
6
|
* Reads a regular file of at most `maxBytes`, refusing symlinks and anything
|
|
7
7
|
* that is not a regular file.
|
|
@@ -16,7 +16,9 @@ import { MAX_CODING_ARTIFACT_BYTES, parseCodingTaskInputJson } from "../coding/p
|
|
|
16
16
|
export async function readBoundedRegularFile(path, maxBytes, errorCode) {
|
|
17
17
|
let file;
|
|
18
18
|
try {
|
|
19
|
-
|
|
19
|
+
// The mode only applies to a created file, and this open never creates one; an owner-only mode
|
|
20
|
+
// states that, so CodeQL's temporary-file rule doesn't read the open as a world-readable create.
|
|
21
|
+
file = await open(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0) | (constants.O_NONBLOCK ?? 0), 0o600);
|
|
20
22
|
}
|
|
21
23
|
catch (error) {
|
|
22
24
|
// ELOOP: the path is a symlink.
|
|
@@ -48,7 +50,7 @@ export async function readBoundedRegularFile(path, maxBytes, errorCode) {
|
|
|
48
50
|
}
|
|
49
51
|
}
|
|
50
52
|
export async function readCodingInput(path) {
|
|
51
|
-
return parseCodingTaskInputJson(await readBoundedRegularFile(path,
|
|
53
|
+
return parseCodingTaskInputJson(await readBoundedRegularFile(path, MAX_CODING_INPUT_BYTES, "coding_input_invalid_file"));
|
|
52
54
|
}
|
|
53
55
|
export async function writeCodingOutputAtomic(path, output) {
|
|
54
56
|
const directory = dirname(path);
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { MAX_DEBUG_TRACE_LINE_BYTES } from "../coding/protocol.js";
|
|
2
|
+
import { redactSecrets } from "../coding/redact.js";
|
|
2
3
|
/**
|
|
3
4
|
* Admin-requested debug trace (CodingTaskInput.debugTrace). When a run is
|
|
4
|
-
* traced, the worker writes every
|
|
5
|
-
* stream failure to its own stdout, one JSON line each, so an operator can read
|
|
5
|
+
* traced, the worker writes every agent stream event (Codex events, Claude Agent
|
|
6
|
+
* SDK messages) and the full text of any stream failure to its own stdout, one JSON line each, so an operator can read
|
|
6
7
|
* why a run failed from the run pod's log. Nothing here reaches the control
|
|
7
8
|
* plane: the launchers only ever parse `{"error": "<code>"}` lines, and a trace
|
|
8
9
|
* line's single top-level key is `debugTrace`.
|
|
@@ -11,10 +12,9 @@ import { MAX_DEBUG_TRACE_LINE_BYTES } from "../coding/protocol.js";
|
|
|
11
12
|
* values are redacted. Lines and the per-run total are capped so a runaway
|
|
12
13
|
* stream cannot flood the log.
|
|
13
14
|
*/
|
|
14
|
-
export { MAX_DEBUG_TRACE_LINE_BYTES };
|
|
15
|
+
export { MAX_DEBUG_TRACE_LINE_BYTES, redactSecrets };
|
|
16
|
+
/** The per-run total when the input sets no cap (CodingTaskInput.debugTraceMaxMb). */
|
|
15
17
|
export declare const MAX_DEBUG_TRACE_TOTAL_BYTES: number;
|
|
16
|
-
/** Redacts the given exact secrets, then every token-shaped value. */
|
|
17
|
-
export declare function redactSecrets(text: string, secrets?: readonly string[]): string;
|
|
18
18
|
/** An error as plain data: name, message, stack, code, and its cause chain. */
|
|
19
19
|
export declare function describeError(error: unknown, depth?: number): unknown;
|
|
20
20
|
export interface DebugTracer {
|
|
@@ -34,4 +34,5 @@ export declare function createDebugTracer(options: DebugTracerOptions): DebugTra
|
|
|
34
34
|
export declare function workerDebugTracer(input: {
|
|
35
35
|
runId: string;
|
|
36
36
|
debugTrace?: boolean;
|
|
37
|
+
debugTraceMaxMb?: number;
|
|
37
38
|
}, capability: string, write: (line: string) => void): DebugTracer | undefined;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { MAX_DEBUG_TRACE_LINE_BYTES, MAX_REDACTED_SPAN
|
|
1
|
+
import { DEFAULT_DEBUG_TRACE_MAX_MB, MAX_DEBUG_TRACE_LINE_BYTES, MAX_REDACTED_SPAN } from "../coding/protocol.js";
|
|
2
|
+
import { redactSecrets } from "../coding/redact.js";
|
|
2
3
|
import { deriveRegistryToken } from "../coding/registry/token.js";
|
|
3
4
|
/**
|
|
4
5
|
* Admin-requested debug trace (CodingTaskInput.debugTrace). When a run is
|
|
5
|
-
* traced, the worker writes every
|
|
6
|
-
* stream failure to its own stdout, one JSON line each, so an operator can read
|
|
6
|
+
* traced, the worker writes every agent stream event (Codex events, Claude Agent
|
|
7
|
+
* SDK messages) and the full text of any stream failure to its own stdout, one JSON line each, so an operator can read
|
|
7
8
|
* why a run failed from the run pod's log. Nothing here reaches the control
|
|
8
9
|
* plane: the launchers only ever parse `{"error": "<code>"}` lines, and a trace
|
|
9
10
|
* line's single top-level key is `debugTrace`.
|
|
@@ -12,23 +13,12 @@ import { deriveRegistryToken } from "../coding/registry/token.js";
|
|
|
12
13
|
* values are redacted. Lines and the per-run total are capped so a runaway
|
|
13
14
|
* stream cannot flood the log.
|
|
14
15
|
*/
|
|
15
|
-
export { MAX_DEBUG_TRACE_LINE_BYTES };
|
|
16
|
-
|
|
16
|
+
export { MAX_DEBUG_TRACE_LINE_BYTES, redactSecrets };
|
|
17
|
+
/** The per-run total when the input sets no cap (CodingTaskInput.debugTraceMaxMb). */
|
|
18
|
+
export const MAX_DEBUG_TRACE_TOTAL_BYTES = DEFAULT_DEBUG_TRACE_MAX_MB * 1024 * 1024;
|
|
17
19
|
const MAX_DEPTH = 32;
|
|
18
20
|
const MAX_CAUSE_DEPTH = 8;
|
|
19
21
|
const MAX_ENTRIES = 1000;
|
|
20
|
-
const REDACTED = "[REDACTED]";
|
|
21
|
-
/** Shapes protocol.ts's list does not cover, or covers only at longer lengths. */
|
|
22
|
-
const EXTRA_TOKEN_PATTERNS = [/rrp_[A-Za-z0-9_-]{8,}/g, /rrg_[A-Za-z0-9_-]{8,}/g, /\bBearer\s+[^\s"',;]+/gi];
|
|
23
|
-
/** Redacts the given exact secrets, then every token-shaped value. */
|
|
24
|
-
export function redactSecrets(text, secrets = []) {
|
|
25
|
-
let redacted = text;
|
|
26
|
-
for (const secret of secrets)
|
|
27
|
-
if (secret)
|
|
28
|
-
redacted = redacted.split(secret).join(REDACTED);
|
|
29
|
-
redacted = redactTokenShapedValues(redacted);
|
|
30
|
-
return EXTRA_TOKEN_PATTERNS.reduce((value, pattern) => value.replace(pattern, REDACTED), redacted);
|
|
31
|
-
}
|
|
32
22
|
/** An error as plain data: name, message, stack, code, and its cause chain. */
|
|
33
23
|
export function describeError(error, depth = 0) {
|
|
34
24
|
if (!(error instanceof Error))
|
|
@@ -113,5 +103,10 @@ export function createDebugTracer(options) {
|
|
|
113
103
|
export function workerDebugTracer(input, capability, write) {
|
|
114
104
|
if (input.debugTrace !== true)
|
|
115
105
|
return undefined;
|
|
116
|
-
return createDebugTracer({
|
|
106
|
+
return createDebugTracer({
|
|
107
|
+
runId: input.runId,
|
|
108
|
+
secrets: [capability, deriveRegistryToken(capability)],
|
|
109
|
+
write,
|
|
110
|
+
...(input.debugTraceMaxMb ? { maxTotalBytes: input.debugTraceMaxMb * 1024 * 1024 } : {}),
|
|
111
|
+
});
|
|
117
112
|
}
|