@wardby/cli 0.5.2 → 0.6.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/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 +7 -1
- package/dist/claude-coding-worker/driver.js +38 -5
- package/dist/claude-coding-worker/sdk.js +13 -4
- package/dist/cli-help.d.ts +1 -1
- package/dist/cli-help.js +5 -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 +141 -5
- package/dist/coding/claude-context.d.ts +45 -0
- package/dist/coding/claude-context.js +434 -0
- package/dist/coding/local-git.js +9 -1
- package/dist/coding/profile.d.ts +12 -0
- package/dist/coding/profile.js +6 -0
- package/dist/coding/protocol.d.ts +104 -0
- package/dist/coding/protocol.js +87 -3
- package/dist/coding/registry/pypi.d.ts +25 -1
- package/dist/coding/registry/pypi.js +140 -16
- package/dist/coding/registry/types.d.ts +17 -3
- package/dist/coding-worker/artifact.d.ts +8 -0
- package/dist/coding-worker/artifact.js +2 -2
- package/dist/coding-worker/driver.js +2 -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/types.d.ts +2 -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 +56 -2
- package/dist/config/providers.js +92 -6
- package/dist/core/db.d.ts +16 -6
- package/dist/core/db.js +12 -10
- package/dist/core/dispatch.d.ts +11 -0
- package/dist/core/dispatch.js +36 -1
- package/dist/core/engine-native.js +9 -5
- package/dist/core/host-events.d.ts +49 -3
- package/dist/core/host-events.js +289 -15
- package/dist/core/http-runtime.js +13 -6
- package/dist/core/issue-bridge.js +42 -2
- package/dist/core/issue-events.js +12 -1
- package/dist/core/issue-status.js +14 -3
- package/dist/core/merge-order-check.d.ts +129 -0
- package/dist/core/merge-order-check.js +336 -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 +25 -0
- package/dist/core/notification-templates.js +105 -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/reconciler.d.ts +4 -2
- package/dist/core/reconciler.js +29 -5
- package/dist/core/related-pull-requests.d.ts +48 -4
- package/dist/core/related-pull-requests.js +113 -11
- package/dist/core/repo-access.d.ts +15 -0
- package/dist/core/repo-access.js +66 -0
- package/dist/core/review-fix.d.ts +37 -0
- package/dist/core/review-fix.js +207 -6
- package/dist/core/review-host-tools.d.ts +20 -0
- package/dist/core/review-host-tools.js +58 -2
- package/dist/core/runner.d.ts +336 -3
- package/dist/core/runner.js +894 -317
- package/dist/core/secret-broker-config.d.ts +103 -0
- package/dist/core/secret-broker-config.js +112 -0
- package/dist/core/secrets.d.ts +39 -4
- package/dist/core/secrets.js +148 -40
- 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 +82 -0
- package/dist/core/workflow-events.js +44 -0
- package/dist/core/workflow-run-events.d.ts +16 -0
- package/dist/core/workflow-run-events.js +40 -0
- package/dist/generated/prisma/browser.d.ts +58 -0
- package/dist/generated/prisma/client.d.ts +58 -0
- package/dist/generated/prisma/commonInputTypes.d.ts +150 -0
- package/dist/generated/prisma/enums.d.ts +27 -0
- package/dist/generated/prisma/enums.js +23 -0
- package/dist/generated/prisma/internal/class.d.ts +88 -0
- package/dist/generated/prisma/internal/class.js +4 -4
- package/dist/generated/prisma/internal/prismaNamespace.d.ts +772 -1
- package/dist/generated/prisma/internal/prismaNamespace.js +135 -4
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +139 -0
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +135 -4
- package/dist/generated/prisma/models/Agent.d.ts +360 -1
- package/dist/generated/prisma/models/CodingAgentProfile.d.ts +73 -1
- package/dist/generated/prisma/models/CodingRun.d.ts +205 -1
- package/dist/generated/prisma/models/DeferredReview.d.ts +78 -1
- package/dist/generated/prisma/models/NativeGatewayCall.d.ts +1675 -0
- package/dist/generated/prisma/models/NativeGatewayCall.js +1 -0
- package/dist/generated/prisma/models/NativeGatewaySession.d.ts +1517 -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/Run.d.ts +826 -1
- package/dist/generated/prisma/models/RunHostCheck.d.ts +36 -1
- 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 +8 -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 +1492 -113
- package/dist/import/create.js +17 -0
- package/dist/import/neutral-schema.d.ts +6 -2
- package/dist/import/neutral-schema.js +2 -0
- package/dist/mcp/auth/access.d.ts +1 -0
- package/dist/mcp/auth/ownership.d.ts +1 -1
- 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/context.d.ts +6 -0
- package/dist/mcp/host-events/github-ingress.d.ts +23 -1
- package/dist/mcp/host-events/github-ingress.js +68 -0
- package/dist/mcp/index.d.ts +13 -0
- package/dist/mcp/index.js +59 -10
- package/dist/mcp/tools/agents.js +83 -12
- package/dist/mcp/tools/notification-channels.d.ts +2 -0
- package/dist/mcp/tools/notification-channels.js +293 -0
- package/dist/mcp/tools/power.d.ts +2 -0
- package/dist/mcp/tools/power.js +77 -0
- package/dist/mcp/tools/runs.d.ts +0 -6
- package/dist/mcp/tools/runs.js +7 -2
- 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 +200 -10
- package/dist/mcp/tools/secret-elicitation-server.js +8 -1
- 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 +184 -7
- package/dist/mcp/tools/tools.d.ts +1 -1
- package/dist/mcp/tools/tools.js +22 -2
- 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 +74 -0
- package/dist/native-worker/docker-launcher.js +237 -0
- package/dist/native-worker/gateway-server.d.ts +39 -0
- package/dist/native-worker/gateway-server.js +315 -0
- package/dist/native-worker/gateway.d.ts +44 -0
- package/dist/native-worker/gateway.js +197 -0
- package/dist/native-worker/http-server.d.ts +22 -0
- package/dist/native-worker/http-server.js +109 -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 +102 -0
- package/dist/native-worker/kubernetes-launcher.js +335 -0
- package/dist/native-worker/launch.d.ts +45 -0
- package/dist/native-worker/launch.js +44 -0
- package/dist/native-worker/ledger.d.ts +109 -0
- package/dist/native-worker/ledger.js +192 -0
- package/dist/native-worker/loopback.d.ts +12 -0
- package/dist/native-worker/loopback.js +49 -0
- package/dist/native-worker/main.d.ts +7 -0
- package/dist/native-worker/main.js +74 -0
- package/dist/native-worker/protocol.d.ts +744 -0
- package/dist/native-worker/protocol.js +200 -0
- package/dist/native-worker/sandbox-executor.d.ts +68 -0
- package/dist/native-worker/sandbox-executor.js +210 -0
- package/dist/native-worker/stdio.d.ts +29 -0
- package/dist/native-worker/stdio.js +188 -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 +115 -0
- 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 +13 -1
- 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/mock-upstream.d.ts +33 -0
- package/dist/providers/coding-proxy/mock-upstream.js +116 -0
- package/dist/providers/coding-proxy/registry/prisma-store.d.ts +3 -0
- package/dist/providers/coding-proxy/registry/prisma-store.js +17 -0
- package/dist/providers/coding-proxy/registry/service.d.ts +4 -0
- package/dist/providers/coding-proxy/registry/service.js +20 -3
- package/dist/providers/coding-proxy/registry/store.d.ts +18 -1
- package/dist/providers/coding-proxy/registry/store.js +33 -0
- package/dist/providers/coding-proxy/runtime.js +12 -1
- package/dist/providers/coding-proxy/types.d.ts +2 -0
- package/dist/providers/engine/types.d.ts +19 -0
- package/dist/providers/engine/types.js +22 -0
- package/dist/providers/executor/composition.d.ts +24 -1
- package/dist/providers/executor/composition.js +39 -6
- package/dist/providers/executor/container.d.ts +24 -1
- package/dist/providers/executor/container.js +101 -11
- package/dist/providers/executor/dbos.d.ts +42 -0
- package/dist/providers/executor/dbos.js +118 -12
- package/dist/providers/executor/deferred.d.ts +56 -0
- package/dist/providers/executor/deferred.js +119 -0
- package/dist/providers/executor/routing.d.ts +37 -10
- package/dist/providers/executor/routing.js +73 -32
- package/dist/providers/executor/types.d.ts +12 -0
- package/dist/providers/jobs/docker.js +3 -3
- package/dist/providers/jobs/fake-kubernetes-api.d.ts +21 -2
- package/dist/providers/jobs/fake-kubernetes-api.js +42 -1
- package/dist/providers/jobs/kubernetes-api.d.ts +17 -1
- package/dist/providers/jobs/kubernetes-api.js +7 -0
- package/dist/providers/jobs/kubernetes-client.d.ts +10 -1
- package/dist/providers/jobs/kubernetes-client.js +52 -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 +16 -1
- package/dist/providers/jobs/kubernetes-isolation.js +58 -5
- 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 +56 -7
- package/dist/providers/jobs/kubernetes.js +117 -36
- 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 +9 -0
- package/dist/providers/llm/openai.js +0 -1
- package/dist/providers/review-host/github.d.ts +11 -1
- package/dist/providers/review-host/github.js +50 -0
- package/dist/providers/review-host/types.d.ts +23 -0
- package/dist/providers/vcs/github.d.ts +32 -6
- package/dist/providers/vcs/github.js +74 -16
- package/dist/quickstart/coding-db.js +14 -2
- package/dist/quickstart/coding-doctor.d.ts +3 -0
- package/dist/quickstart/coding-doctor.js +3 -0
- package/dist/quickstart/coding-images.d.ts +9 -0
- package/dist/quickstart/coding-images.js +39 -0
- package/dist/quickstart/coding-seed.d.ts +20 -1
- package/dist/quickstart/coding-seed.js +96 -7
- package/dist/quickstart/coding.d.ts +2 -0
- package/dist/quickstart/coding.js +75 -3
- package/dist/quickstart/config.d.ts +2 -0
- package/dist/quickstart/config.js +4 -0
- package/dist/quickstart/images.d.ts +13 -0
- package/dist/quickstart/images.js +80 -12
- package/dist/quickstart/index.d.ts +0 -2
- package/dist/quickstart/index.js +10 -14
- package/dist/quickstart/manifests.d.ts +56 -0
- package/dist/quickstart/manifests.js +523 -0
- package/dist/quickstart/python-detect.d.ts +10 -0
- package/dist/quickstart/python-detect.js +32 -0
- package/dist/quickstart/repo-packages.d.ts +10 -0
- package/dist/quickstart/repo-packages.js +132 -0
- package/dist/quickstart/reviewer-prompt.d.ts +12 -0
- package/dist/quickstart/reviewer-prompt.js +84 -0
- package/dist/quickstart/scenarios.d.ts +19 -0
- package/dist/quickstart/scenarios.js +28 -0
- package/dist/quickstart/sync-reviewer-prompt.d.ts +1 -0
- package/dist/quickstart/sync-reviewer-prompt.js +10 -0
- 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/host-functions.d.ts +34 -0
- package/dist/sandbox/host-functions.js +144 -80
- 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 +162 -0
- package/dist/sandbox/user-tool.d.ts +14 -0
- package/dist/sandbox/user-tool.js +32 -0
- package/dist/serve.js +18 -0
- package/dist/viewer/api-schema.d.ts +214 -18
- package/dist/viewer/api-schema.js +22 -0
- package/dist/viewer/build-schemas.js +4 -1
- 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 +172 -0
- package/docs/README.md +7 -0
- package/docs/agent-recipes.md +57 -8
- package/docs/architecture-runtime.md +16 -1
- package/docs/code-review-agents.md +139 -5
- package/docs/coding-agent-setup.md +127 -2
- package/docs/coding-packages.md +105 -5
- package/docs/coding-services.md +3 -1
- package/docs/coding-worker-byo-images.md +239 -2
- package/docs/coding-worker-isolation.md +88 -23
- package/docs/getting-started-gke.md +225 -9
- package/docs/getting-started-identity-provider.md +21 -10
- package/docs/getting-started.md +140 -11
- package/docs/jira-agents.md +5 -1
- package/docs/knowledge.md +11 -0
- package/docs/native-sandbox.md +635 -0
- package/docs/release-verification.md +9 -0
- package/docs/security-deployment.md +113 -12
- package/docs/slack-notifications.md +252 -0
- package/docs/tool-secrets.md +252 -0
- package/docs/viewer-api.md +46 -5
- package/docs/viewer-api.openapi.yml +1404 -0
- package/help/admin-viewer.md +6 -2
- package/help/agent-recipes.md +27 -0
- package/help/architecture-agent.md +136 -0
- package/help/brokered-secrets.md +79 -0
- package/help/build-claude-code-image.md +131 -0
- package/help/build-worker-image.md +195 -0
- package/help/code-review-agents.md +68 -6
- package/help/coding-packages.md +31 -2
- package/help/creating-agents.md +14 -0
- package/help/deploy-gke.md +37 -6
- package/help/deployment-targets.md +24 -13
- package/help/errors/coding-provider-not-configured.md +2 -2
- package/help/errors/database-auth-invalid.md +28 -0
- package/help/errors/github-account-not-allowed.md +25 -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/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-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-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 +20 -0
- package/help/errors/native-sandbox-worker-lost.md +20 -0
- package/help/errors/native-sandbox-worker-unready.md +22 -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-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/getting-started.md +18 -0
- package/help/github.md +18 -1
- package/help/identity-and-access.md +5 -1
- package/help/local-repositories.md +35 -5
- package/help/low-power-mode.md +125 -0
- package/help/merge-order-check.md +117 -0
- package/help/mobile-app.md +54 -0
- package/help/native-sandbox.md +136 -0
- package/help/observability.md +8 -0
- package/help/related-pull-requests.md +70 -9
- package/help/repo-instructions-and-skills.md +91 -0
- package/help/review-fix-rounds.md +10 -0
- package/help/slack-notifications.md +62 -0
- package/help/troubleshooting/coding-workers.md +21 -0
- package/package.json +13 -5
- 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/schema.prisma +362 -91
package/dist/cli.js
CHANGED
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Minimal CLI.
|
|
4
4
|
*
|
|
5
|
-
* wardby agent create --name <n> --model <m> --prompt <p> --budget <usd> [--schedule "<cron>"] [--timezone <tz>] [--memory-enabled] [--effort <level>]
|
|
5
|
+
* wardby agent create --name <n> --model <m> --prompt <p> --budget <usd> [--schedule "<cron>"] [--timezone <tz>] [--memory-enabled] [--effort <level>] [--native-execution-mode control-plane|sandbox]
|
|
6
6
|
* wardby agent list
|
|
7
|
+
* wardby agent mode <name> control-plane|sandbox
|
|
7
8
|
* wardby agent schedule <name> --cron "<expr>" [--timezone <tz>] [--disable]
|
|
8
9
|
* wardby run <name>
|
|
9
10
|
* wardby runs [--agent <name>] [--limit N] [--status <s>]
|
|
10
11
|
* wardby scheduler [--scope default]
|
|
12
|
+
* wardby native-gateway (the native sandbox gateway only; NATIVE_GATEWAY_LISTEN)
|
|
11
13
|
* wardby mcp (MCP_TRANSPORT=stdio|http selects the transport; authoring/
|
|
12
14
|
* control is MCP-first from here — this floor keeps working
|
|
13
15
|
* before/without an MCP client)
|
|
@@ -28,6 +30,11 @@ import { describePreflightFailure, kubernetesPreflight, preflightCanaryImage, }
|
|
|
28
30
|
import { RoutingLlmProvider, isLlmEffort, modelSupportedEfforts, resolveLlmRegistrations, } from "./providers/llm/index.js";
|
|
29
31
|
import { startModelCatalog } from "./providers/llm/catalog-store.js";
|
|
30
32
|
import { buildConfiguredExecutor, buildExecutor } from "./providers/executor/index.js";
|
|
33
|
+
import { DeferredExecutor, drainDeferredRuns } from "./providers/executor/deferred.js";
|
|
34
|
+
import { parseGatewayListen, startGatewayServer } from "./native-worker/http-server.js";
|
|
35
|
+
import { NATIVE_GATEWAY_DENY_PORT } from "./native-worker/docker-isolation.js";
|
|
36
|
+
import { startDenyPortListener } from "./providers/coding-proxy/deny-port.js";
|
|
37
|
+
import { buildNativeSandboxExecutor } from "./native-worker/composition.js";
|
|
31
38
|
import { PostgresDatastore } from "./providers/datastore/index.js";
|
|
32
39
|
import { PostgresAgentMemory } from "./providers/memory/index.js";
|
|
33
40
|
import { buildSecretCipher } from "./providers/secrets/index.js";
|
|
@@ -35,19 +42,22 @@ import { prisma } from "./core/db.js";
|
|
|
35
42
|
import { runAgent } from "./core/runner.js";
|
|
36
43
|
import { cancelRunOnSignal } from "./core/run-heartbeat.js";
|
|
37
44
|
import { buildIssueTrackers } from "./providers/issue-tracker/index.js";
|
|
45
|
+
import { buildChatProviders } from "./providers/chat/index.js";
|
|
38
46
|
import { buildReviewHosts } from "./providers/review-host/index.js";
|
|
39
47
|
import { createRepoAccessGate } from "./core/repo-access.js";
|
|
40
48
|
import { validateCronExpression } from "./core/cron.js";
|
|
41
49
|
import { assertAgentModelAvailable } from "./core/run-pricing.js";
|
|
42
50
|
import { startScheduler } from "./core/scheduler.js";
|
|
43
51
|
import { startReconciler } from "./core/reconciler.js";
|
|
52
|
+
import { startNotifications } from "./core/notifications.js";
|
|
44
53
|
import { NativeEngine } from "./core/engine-native.js";
|
|
45
54
|
import { logger } from "./core/logger.js";
|
|
55
|
+
import { buildPower } from "./core/power-composition.js";
|
|
46
56
|
import { deriveJsonSchema } from "./sandbox/zod-params.js";
|
|
47
57
|
import { findSameNamedAttachedTool, reservedToolNameReason, resolveToolRef } from "./core/tool-names.js";
|
|
48
58
|
import { ToolAttachedError, deleteToolGuarded, formatAttachedAgents, formatToolLine, hasToolChanges, prepareToolUpdate, updateToolGuarded, } from "./core/tool-admin.js";
|
|
49
59
|
import { ToolCapabilitiesPatchSchema } from "./sandbox/tool-capabilities.js";
|
|
50
|
-
import { startMcp } from "./mcp/index.js";
|
|
60
|
+
import { startMcp, warmUpExecutor } from "./mcp/index.js";
|
|
51
61
|
import { startServe } from "./serve.js";
|
|
52
62
|
import { authCommand } from "./mcp/auth/self-hosted/cli.js";
|
|
53
63
|
import { hostAccountCommand } from "./mcp/auth/host-account-cli.js";
|
|
@@ -56,6 +66,7 @@ import { everyoneGrantData } from "./core/grants.js";
|
|
|
56
66
|
import { parseImportArgs } from "./import/cli-args.js";
|
|
57
67
|
import { runImport } from "./import/index.js";
|
|
58
68
|
import { CLI_USAGE } from "./cli-help.js";
|
|
69
|
+
import { parseCliNativeExecutionMode } from "./cli-native-mode.js";
|
|
59
70
|
import { helpCommand } from "./help/cli.js";
|
|
60
71
|
const cliLog = logger.child({ module: "cli" });
|
|
61
72
|
const RUN_STATUSES = [
|
|
@@ -121,6 +132,7 @@ async function agentCreate(args) {
|
|
|
121
132
|
effort: { type: "string" },
|
|
122
133
|
owner: { type: "string" },
|
|
123
134
|
public: { type: "boolean" },
|
|
135
|
+
"native-execution-mode": { type: "string" },
|
|
124
136
|
},
|
|
125
137
|
});
|
|
126
138
|
if (!values.name || !values.model || !values.prompt || !values.budget) {
|
|
@@ -134,6 +146,15 @@ async function agentCreate(args) {
|
|
|
134
146
|
if (!Number.isInteger(maxTurns) || maxTurns <= 0) {
|
|
135
147
|
fail(`--max-turns must be a positive integer, got "${values["max-turns"]}".`);
|
|
136
148
|
}
|
|
149
|
+
let nativeExecutionMode;
|
|
150
|
+
if (values["native-execution-mode"] !== undefined) {
|
|
151
|
+
try {
|
|
152
|
+
nativeExecutionMode = parseCliNativeExecutionMode(values["native-execution-mode"]);
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
fail(err instanceof Error ? err.message : String(err));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
137
158
|
const timezone = values.timezone ?? "UTC";
|
|
138
159
|
if (values.schedule) {
|
|
139
160
|
try {
|
|
@@ -188,6 +209,7 @@ async function agentCreate(args) {
|
|
|
188
209
|
maxTurns,
|
|
189
210
|
memoryEnabled: values["memory-enabled"] ?? false,
|
|
190
211
|
effort: values.effort ?? null,
|
|
212
|
+
...(nativeExecutionMode ? { nativeExecutionMode } : {}),
|
|
191
213
|
ownerId: ownerId,
|
|
192
214
|
},
|
|
193
215
|
});
|
|
@@ -506,6 +528,29 @@ async function agentSchedule(args) {
|
|
|
506
528
|
});
|
|
507
529
|
console.log(`schedule set for "${name}": "${schedule}" (${timezone}).`);
|
|
508
530
|
}
|
|
531
|
+
/** Where a native agent's later runs execute; runs already created keep their mode. */
|
|
532
|
+
async function agentMode(args) {
|
|
533
|
+
const [name, value, ...extra] = args;
|
|
534
|
+
if (!name || !value || extra.length > 0) {
|
|
535
|
+
fail("agent mode requires an agent name and a mode: wardby agent mode <name> control-plane|sandbox");
|
|
536
|
+
}
|
|
537
|
+
let nativeExecutionMode;
|
|
538
|
+
try {
|
|
539
|
+
nativeExecutionMode = parseCliNativeExecutionMode(value);
|
|
540
|
+
}
|
|
541
|
+
catch (err) {
|
|
542
|
+
fail(err instanceof Error ? err.message : String(err));
|
|
543
|
+
}
|
|
544
|
+
const agent = await prisma.agent.findUnique({ where: { name } });
|
|
545
|
+
if (!agent) {
|
|
546
|
+
fail(`unknown agent "${name}".`);
|
|
547
|
+
}
|
|
548
|
+
if (agent.kind !== "native") {
|
|
549
|
+
fail(`"${name}" is a coding agent; the native execution mode only applies to native agents.`);
|
|
550
|
+
}
|
|
551
|
+
await prisma.agent.update({ where: { id: agent.id }, data: { nativeExecutionMode } });
|
|
552
|
+
console.log(`native execution mode for "${name}": ${value}.`);
|
|
553
|
+
}
|
|
509
554
|
async function agentList() {
|
|
510
555
|
const agents = await prisma.agent.findMany({ orderBy: { name: "asc" } });
|
|
511
556
|
if (agents.length === 0) {
|
|
@@ -517,7 +562,8 @@ async function agentList() {
|
|
|
517
562
|
? `${agent.scheduleEnabled ? "enabled" : "disabled"}: ${agent.schedule} (${agent.timezone})`
|
|
518
563
|
: "manual";
|
|
519
564
|
console.log(`${agent.name} ${agent.kind.padEnd(6)} ${agent.model} ` +
|
|
520
|
-
`$${Number(agent.budgetUsd).toFixed(4)} ${agent.maxTurns} turns memory ${agent.memoryEnabled ? "on" : "off"} ${schedule}`
|
|
565
|
+
`$${Number(agent.budgetUsd).toFixed(4)} ${agent.maxTurns} turns memory ${agent.memoryEnabled ? "on" : "off"} ${schedule}` +
|
|
566
|
+
(agent.kind === "native" && agent.nativeExecutionMode === "sandbox" ? " sandbox" : ""));
|
|
521
567
|
}
|
|
522
568
|
}
|
|
523
569
|
async function run(name) {
|
|
@@ -713,11 +759,42 @@ async function scheduler(args) {
|
|
|
713
759
|
const memory = buildMemory();
|
|
714
760
|
const reviewHosts = buildReviewHosts(process.env, prisma);
|
|
715
761
|
const issueTrackers = buildIssueTrackers();
|
|
762
|
+
const chat = buildChatProviders();
|
|
716
763
|
// One repository-access gate (and cache) for native repo_* calls and coding runs.
|
|
717
764
|
const repoAccess = createRepoAccessGate({ db: prisma, hosts: reviewHosts });
|
|
718
|
-
|
|
719
|
-
|
|
765
|
+
// Patched with the composed executor below, as startMcp does: native runs read
|
|
766
|
+
// `providers.executor` at call time, so their delegate_to_* calls can dispatch coding and
|
|
767
|
+
// sandbox-mode sub-agents through the same RoutingExecutor.
|
|
768
|
+
const nativeProviders = {
|
|
769
|
+
llm,
|
|
770
|
+
engine,
|
|
771
|
+
datastore,
|
|
772
|
+
secrets,
|
|
773
|
+
memory,
|
|
774
|
+
reviewHosts,
|
|
775
|
+
issueTrackers,
|
|
776
|
+
repoAccess,
|
|
777
|
+
};
|
|
778
|
+
const nativeExecutor = buildExecutor(config, nativeProviders, prisma);
|
|
779
|
+
const power = buildPower({ env: process.env, db: prisma });
|
|
780
|
+
if (power.enabled) {
|
|
781
|
+
void power.checkAccess().then((missing) => {
|
|
782
|
+
if (missing.length)
|
|
783
|
+
cliLog.warn(`low_power_scale_forbidden: missing ${missing.join(", ")}`);
|
|
784
|
+
}, (err) => cliLog.warn({ err }, "low_power_access_check_failed"));
|
|
785
|
+
}
|
|
786
|
+
const executor = buildConfiguredExecutor({
|
|
787
|
+
native: nativeExecutor,
|
|
788
|
+
db: prisma,
|
|
789
|
+
providerConfig: config,
|
|
790
|
+
repoAccess,
|
|
791
|
+
power,
|
|
792
|
+
// Sandbox-mode native runs (docs/native-sandbox.md); undefined when NATIVE_SANDBOX_LAUNCHER is unset.
|
|
793
|
+
nativeSandbox: buildNativeSandboxExecutor({ db: prisma, providers: nativeProviders, power }),
|
|
794
|
+
});
|
|
795
|
+
nativeProviders.executor = executor;
|
|
720
796
|
await executor.launch?.();
|
|
797
|
+
warmUpExecutor(executor);
|
|
721
798
|
const reconciler = startReconciler({
|
|
722
799
|
db: prisma,
|
|
723
800
|
executor,
|
|
@@ -725,6 +802,7 @@ async function scheduler(args) {
|
|
|
725
802
|
issueTrackers,
|
|
726
803
|
deferredReviews: { db: prisma, executor, hosts: reviewHosts, repoAccess, issueTrackers },
|
|
727
804
|
});
|
|
805
|
+
const notifications = await startNotifications({ db: prisma, chat });
|
|
728
806
|
const selfDefects = { db: prisma, issueTrackers };
|
|
729
807
|
const sched = startScheduler({
|
|
730
808
|
executor,
|
|
@@ -733,6 +811,9 @@ async function scheduler(args) {
|
|
|
733
811
|
selfDefects,
|
|
734
812
|
onLeaderTick: async () => {
|
|
735
813
|
await drainCodingQueue({ db: prisma, executor, ...concurrency, selfDefects });
|
|
814
|
+
// Runs the native sandbox gateway dispatched (or asked to stop): it holds no executor of its own.
|
|
815
|
+
await drainDeferredRuns({ db: prisma, executor });
|
|
816
|
+
await power.sleepIfIdle().catch((err) => cliLog.warn({ err }, "power_sleep_failed"));
|
|
736
817
|
},
|
|
737
818
|
});
|
|
738
819
|
console.log(`wardby scheduler started (scope "${scope}"). Press Ctrl+C to stop.`);
|
|
@@ -741,6 +822,7 @@ async function scheduler(args) {
|
|
|
741
822
|
console.log("\nwardby scheduler shutting down...");
|
|
742
823
|
sched.stop();
|
|
743
824
|
reconciler.stop();
|
|
825
|
+
notifications.stop();
|
|
744
826
|
void Promise.resolve(executor.close?.())
|
|
745
827
|
.catch((err) => cliLog.warn({ err }, "executor close failed during scheduler shutdown"))
|
|
746
828
|
.finally(() => {
|
|
@@ -752,6 +834,54 @@ async function scheduler(args) {
|
|
|
752
834
|
process.once("SIGTERM", shutdown);
|
|
753
835
|
});
|
|
754
836
|
}
|
|
837
|
+
/**
|
|
838
|
+
* The native sandbox gateway on its own (docs/native-sandbox.md): only the internal listener
|
|
839
|
+
* sandbox workers call, on NATIVE_GATEWAY_LISTEN (default 0.0.0.0:8790). It never starts or
|
|
840
|
+
* stops a run itself — workers can reach it, so it holds no Docker socket or cluster
|
|
841
|
+
* credential: a delegation it makes is started by the scheduler leader (DeferredExecutor).
|
|
842
|
+
* It needs the server's database and LLM/integration settings, nothing more.
|
|
843
|
+
*/
|
|
844
|
+
async function nativeGateway() {
|
|
845
|
+
const listen = parseGatewayListen(process.env.NATIVE_GATEWAY_LISTEN) ?? { host: "0.0.0.0", port: 8790 };
|
|
846
|
+
let modelCatalog;
|
|
847
|
+
try {
|
|
848
|
+
modelCatalog = await startModelCatalog(prisma);
|
|
849
|
+
}
|
|
850
|
+
catch (err) {
|
|
851
|
+
fail(err instanceof Error ? err.message : String(err));
|
|
852
|
+
}
|
|
853
|
+
const secrets = buildSecrets();
|
|
854
|
+
const reviewHosts = buildReviewHosts(process.env, prisma);
|
|
855
|
+
const providers = {
|
|
856
|
+
llm: buildLlmProvider(),
|
|
857
|
+
engine: buildEngine(),
|
|
858
|
+
datastore: buildDatastore(secrets),
|
|
859
|
+
secrets,
|
|
860
|
+
memory: buildMemory(),
|
|
861
|
+
reviewHosts,
|
|
862
|
+
issueTrackers: buildIssueTrackers(),
|
|
863
|
+
repoAccess: createRepoAccessGate({ db: prisma, hosts: reviewHosts }),
|
|
864
|
+
// Coding resolution only (worker image, service declaration): never started or stopped here.
|
|
865
|
+
executor: new DeferredExecutor(prisma, buildConfiguredExecutor({ native: noopExecutor(), db: prisma })),
|
|
866
|
+
};
|
|
867
|
+
const server = await startGatewayServer(listen, { db: prisma, providers });
|
|
868
|
+
// The deny port (NATIVE_GATEWAY_DENY_PORT, default 8791) serves nothing: a worker that can reach the
|
|
869
|
+
// gateway port but not this one proves its NetworkPolicy is programmed and port-scoped.
|
|
870
|
+
const denyPort = Number(process.env.NATIVE_GATEWAY_DENY_PORT ?? NATIVE_GATEWAY_DENY_PORT);
|
|
871
|
+
const deny = await startDenyPortListener(listen.host, denyPort);
|
|
872
|
+
console.error(`wardby native-gateway listening on ${listen.host}:${listen.port}. Press Ctrl+C to stop.`);
|
|
873
|
+
await new Promise((resolve) => {
|
|
874
|
+
const shutdown = () => {
|
|
875
|
+
server.close(() => {
|
|
876
|
+
modelCatalog.close();
|
|
877
|
+
void deny.close().finally(resolve);
|
|
878
|
+
});
|
|
879
|
+
server.closeIdleConnections();
|
|
880
|
+
};
|
|
881
|
+
process.once("SIGINT", shutdown);
|
|
882
|
+
process.once("SIGTERM", shutdown);
|
|
883
|
+
});
|
|
884
|
+
}
|
|
755
885
|
async function mcp() {
|
|
756
886
|
const handle = await startMcp();
|
|
757
887
|
// startMcp() resolves once the transport is up (bound/listening), not
|
|
@@ -843,6 +973,9 @@ async function main() {
|
|
|
843
973
|
else if (command === "agent" && rest[0] === "schedule") {
|
|
844
974
|
await agentSchedule(rest.slice(1));
|
|
845
975
|
}
|
|
976
|
+
else if (command === "agent" && rest[0] === "mode") {
|
|
977
|
+
await agentMode(rest.slice(1));
|
|
978
|
+
}
|
|
846
979
|
else if (command === "tool" && rest[0] === "create") {
|
|
847
980
|
await toolCreate(rest.slice(1));
|
|
848
981
|
}
|
|
@@ -873,6 +1006,9 @@ async function main() {
|
|
|
873
1006
|
else if (command === "scheduler") {
|
|
874
1007
|
await scheduler(rest);
|
|
875
1008
|
}
|
|
1009
|
+
else if (command === "native-gateway") {
|
|
1010
|
+
await nativeGateway();
|
|
1011
|
+
}
|
|
876
1012
|
else if (command === "mcp") {
|
|
877
1013
|
await mcp();
|
|
878
1014
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type ClaudeContextFile } from "./protocol.js";
|
|
2
|
+
export interface ClaudeContextSkip {
|
|
3
|
+
path: string;
|
|
4
|
+
reason: "symlink" | "not_file" | "too_large" | "not_utf8" | "limit" | "outside_repo" | "not_allowed";
|
|
5
|
+
}
|
|
6
|
+
export interface ClaudeContext {
|
|
7
|
+
files: ClaudeContextFile[];
|
|
8
|
+
/** Files left out and why, at most `MAX_RECORDED_SKIPS` entries. */
|
|
9
|
+
skipped: ClaudeContextSkip[];
|
|
10
|
+
/**
|
|
11
|
+
* How many further files were left out without an entry in `skipped`: skips
|
|
12
|
+
* beyond `MAX_RECORDED_SKIPS`, plus `@imports` beyond `MAX_IMPORTS_PER_FILE`
|
|
13
|
+
* in a single file, which are not followed at all, plus 1 when `.claude/skills` has more than
|
|
14
|
+
* `MAX_SKILL_ENTRIES` entries. 0 when nothing overflowed.
|
|
15
|
+
*/
|
|
16
|
+
skippedOverflow: number;
|
|
17
|
+
}
|
|
18
|
+
/** Content of the `CLAUDE.md` synthesized for a repository that only has `AGENTS.md`. */
|
|
19
|
+
export declare const AGENTS_BRIDGE = "@AGENTS.md\n";
|
|
20
|
+
/** At most this many `skipped` entries are recorded; the rest are only counted in `skippedOverflow`. */
|
|
21
|
+
export declare const MAX_RECORDED_SKIPS = 50;
|
|
22
|
+
/** Only the first this-many distinct `@imports` of each file are followed; the rest are counted in `skippedOverflow`. */
|
|
23
|
+
export declare const MAX_IMPORTS_PER_FILE = 100;
|
|
24
|
+
/**
|
|
25
|
+
* At most this many `.claude/skills` entries are considered (matching the Codex worker's scan cap);
|
|
26
|
+
* if there are more, the rest are neither read nor counted beyond adding one to `skippedOverflow`.
|
|
27
|
+
*/
|
|
28
|
+
export declare const MAX_SKILL_ENTRIES = 2000;
|
|
29
|
+
/**
|
|
30
|
+
* Returns the `@path` imports in a Markdown instruction file, in order and
|
|
31
|
+
* de-duplicated. Imports inside fenced code blocks and inline code spans are
|
|
32
|
+
* ignored, as is an `@` not preceded by whitespace (an e-mail address). Runs
|
|
33
|
+
* in time linear in the input, whatever the repository puts in it.
|
|
34
|
+
*/
|
|
35
|
+
export declare function importsOf(markdown: string): string[];
|
|
36
|
+
/**
|
|
37
|
+
* Builds the Claude Code context for the checkout at `workspace`. Files are
|
|
38
|
+
* ordered roots first, then imports breadth-first, then skills by directory
|
|
39
|
+
* name. A file reached more than once is read once. Once the next file would
|
|
40
|
+
* exceed the file-count or total-size limit, it and every later candidate are
|
|
41
|
+
* reported as `limit` without being read.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildClaudeContext(workspace: string, options: {
|
|
44
|
+
skills: boolean;
|
|
45
|
+
}): Promise<ClaudeContext>;
|