@wardby/cli 0.2.0 → 0.3.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 +34 -4
- package/README.md +183 -71
- package/dist/claude-coding-worker/driver.d.ts +7 -1
- package/dist/claude-coding-worker/driver.js +31 -2
- package/dist/claude-coding-worker/main.js +5 -2
- package/dist/claude-coding-worker/tool-socket.d.ts +9 -0
- package/dist/claude-coding-worker/tool-socket.js +26 -0
- package/dist/cli-help.d.ts +1 -1
- package/dist/cli-help.js +13 -4
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +219 -29
- package/dist/coding/collect-exclude.d.ts +25 -0
- package/dist/coding/collect-exclude.js +76 -0
- package/dist/coding/profile.d.ts +67 -22
- package/dist/coding/profile.js +58 -25
- package/dist/coding/protected-path-wording.d.ts +24 -0
- package/dist/coding/protected-path-wording.js +55 -0
- package/dist/coding/protected-paths.d.ts +31 -0
- package/dist/coding/protected-paths.js +48 -0
- package/dist/coding/protocol.d.ts +99 -3
- package/dist/coding/protocol.js +155 -4
- package/dist/coding/registry/adapters.d.ts +2 -0
- package/dist/coding/registry/adapters.js +9 -0
- package/dist/coding/registry/allowlist.d.ts +9 -0
- package/dist/coding/registry/allowlist.js +28 -0
- package/dist/coding/registry/json-scan.d.ts +55 -0
- package/dist/coding/registry/json-scan.js +191 -0
- package/dist/coding/registry/lockfiles.d.ts +6 -0
- package/dist/coding/registry/lockfiles.js +89 -0
- package/dist/coding/registry/npm-lockfile.d.ts +9 -0
- package/dist/coding/registry/npm-lockfile.js +73 -0
- package/dist/coding/registry/npm-plan.d.ts +29 -0
- package/dist/coding/registry/npm-plan.js +289 -0
- package/dist/coding/registry/npm.d.ts +7 -0
- package/dist/coding/registry/npm.js +252 -0
- package/dist/coding/registry/pypi.d.ts +4 -0
- package/dist/coding/registry/pypi.js +210 -0
- package/dist/coding/registry/report.d.ts +37 -0
- package/dist/coding/registry/report.js +31 -0
- package/dist/coding/registry/token.d.ts +4 -0
- package/dist/coding/registry/token.js +7 -0
- package/dist/coding/registry/types.d.ts +286 -0
- package/dist/coding/registry/types.js +19 -0
- package/dist/coding/registry/worker-config.d.ts +14 -0
- package/dist/coding/registry/worker-config.js +31 -0
- package/dist/coding/services/builtins.d.ts +22 -0
- package/dist/coding/services/builtins.js +85 -0
- package/dist/coding/services/catalog.d.ts +443 -0
- package/dist/coding/services/catalog.js +159 -0
- package/dist/coding/services/declaration.d.ts +11 -0
- package/dist/coding/services/declaration.js +114 -0
- package/dist/coding/services/note.d.ts +8 -0
- package/dist/coding/services/note.js +15 -0
- package/dist/coding/services/resolve.d.ts +25 -0
- package/dist/coding/services/resolve.js +50 -0
- package/dist/coding/services/wording.d.ts +25 -0
- package/dist/coding/services/wording.js +70 -0
- package/dist/coding-proxy/main.js +24 -4
- package/dist/coding-worker/artifact.d.ts +18 -0
- package/dist/coding-worker/artifact.js +48 -6
- package/dist/coding-worker/debug-trace.d.ts +37 -0
- package/dist/coding-worker/debug-trace.js +117 -0
- package/dist/coding-worker/driver.d.ts +14 -1
- package/dist/coding-worker/driver.js +106 -14
- package/dist/coding-worker/errors.d.ts +7 -0
- package/dist/coding-worker/errors.js +26 -0
- package/dist/coding-worker/main.js +13 -4
- package/dist/coding-worker/sdk.d.ts +2 -2
- package/dist/coding-worker/sdk.js +7 -2
- package/dist/coding-worker/types.d.ts +3 -0
- package/dist/config/providers.d.ts +41 -0
- package/dist/config/providers.js +66 -0
- package/dist/core/budget-groups.d.ts +109 -6
- package/dist/core/budget-groups.js +125 -19
- package/dist/core/budget-wording.d.ts +22 -0
- package/dist/core/budget-wording.js +55 -0
- package/dist/core/coding-queue.d.ts +1 -1
- package/dist/core/datastores.d.ts +1 -1
- package/dist/core/datastores.js +18 -2
- package/dist/core/db.d.ts +40 -2
- package/dist/core/db.js +75 -2
- package/dist/core/dispatch.d.ts +49 -7
- package/dist/core/dispatch.js +290 -45
- package/dist/core/engine-native.js +27 -10
- package/dist/core/grants.d.ts +86 -0
- package/dist/core/grants.js +126 -0
- package/dist/core/host-events.d.ts +49 -0
- package/dist/core/host-events.js +257 -0
- package/dist/core/host-identity-links.d.ts +54 -0
- package/dist/core/host-identity-links.js +189 -0
- package/dist/core/host-status.d.ts +61 -0
- package/dist/core/host-status.js +211 -0
- package/dist/core/http-runtime.js +3 -4
- package/dist/core/in-flight-runs.d.ts +8 -0
- package/dist/core/in-flight-runs.js +56 -0
- package/dist/core/lease.d.ts +1 -1
- package/dist/core/private-directory.d.ts +20 -0
- package/dist/core/private-directory.js +36 -0
- package/dist/core/provider-wording.d.ts +12 -0
- package/dist/core/provider-wording.js +44 -0
- package/dist/core/reconciler.d.ts +39 -3
- package/dist/core/reconciler.js +86 -2
- package/dist/core/repo-access.d.ts +99 -0
- package/dist/core/repo-access.js +136 -0
- package/dist/core/review-host-checks.d.ts +11 -0
- package/dist/core/review-host-checks.js +41 -0
- package/dist/core/review-host-tools.d.ts +47 -0
- package/dist/core/review-host-tools.js +347 -0
- package/dist/core/run-heartbeat.d.ts +27 -0
- package/dist/core/run-heartbeat.js +54 -0
- package/dist/core/runner.d.ts +31 -9
- package/dist/core/runner.js +237 -40
- package/dist/core/scheduler.d.ts +1 -1
- package/dist/core/secrets.d.ts +12 -3
- package/dist/core/secrets.js +25 -6
- package/dist/core/subagent-memory-tools.d.ts +2 -2
- package/dist/core/subagent-memory-tools.js +16 -3
- package/dist/core/tool-admin.d.ts +81 -0
- package/dist/core/tool-admin.js +129 -0
- package/dist/core/tool-names.d.ts +42 -0
- package/dist/core/tool-names.js +64 -0
- package/dist/core/untrusted-content.d.ts +32 -0
- package/dist/core/untrusted-content.js +72 -0
- package/dist/core/webhooks.d.ts +9 -2
- package/dist/core/webhooks.js +23 -2
- package/dist/generated/prisma/browser.d.ts +328 -0
- package/dist/generated/prisma/browser.js +17 -0
- package/dist/generated/prisma/client.d.ts +347 -0
- package/dist/generated/prisma/client.js +34 -0
- package/dist/generated/prisma/commonInputTypes.d.ts +839 -0
- package/dist/generated/prisma/commonInputTypes.js +10 -0
- package/dist/generated/prisma/enums.d.ts +59 -0
- package/dist/generated/prisma/enums.js +59 -0
- package/dist/generated/prisma/internal/class.d.ts +605 -0
- package/dist/generated/prisma/internal/class.js +49 -0
- package/dist/generated/prisma/internal/prismaNamespace.d.ts +4494 -0
- package/dist/generated/prisma/internal/prismaNamespace.js +628 -0
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +635 -0
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +599 -0
- package/dist/generated/prisma/models/Agent.d.ts +3560 -0
- package/dist/generated/prisma/models/Agent.js +1 -0
- package/dist/generated/prisma/models/AgentDatastore.d.ts +1210 -0
- package/dist/generated/prisma/models/AgentDatastore.js +1 -0
- package/dist/generated/prisma/models/AgentMemory.d.ts +986 -0
- package/dist/generated/prisma/models/AgentMemory.js +1 -0
- package/dist/generated/prisma/models/AgentRepository.d.ts +1425 -0
- package/dist/generated/prisma/models/AgentRepository.js +1 -0
- package/dist/generated/prisma/models/AgentSecret.d.ts +1212 -0
- package/dist/generated/prisma/models/AgentSecret.js +1 -0
- package/dist/generated/prisma/models/AgentSubAgent.d.ts +1217 -0
- package/dist/generated/prisma/models/AgentSubAgent.js +1 -0
- package/dist/generated/prisma/models/AgentTool.d.ts +1403 -0
- package/dist/generated/prisma/models/AgentTool.js +1 -0
- package/dist/generated/prisma/models/AuthFormChallenge.d.ts +1298 -0
- package/dist/generated/prisma/models/AuthFormChallenge.js +1 -0
- package/dist/generated/prisma/models/AuthLoginKey.d.ts +1245 -0
- package/dist/generated/prisma/models/AuthLoginKey.js +1 -0
- package/dist/generated/prisma/models/AuthRateLimit.d.ts +979 -0
- package/dist/generated/prisma/models/AuthRateLimit.js +1 -0
- package/dist/generated/prisma/models/AuthSession.d.ts +1376 -0
- package/dist/generated/prisma/models/AuthSession.js +1 -0
- package/dist/generated/prisma/models/AuthUser.d.ts +1700 -0
- package/dist/generated/prisma/models/AuthUser.js +1 -0
- package/dist/generated/prisma/models/BudgetGroup.d.ts +1548 -0
- package/dist/generated/prisma/models/BudgetGroup.js +1 -0
- package/dist/generated/prisma/models/CodingAgentProfile.d.ts +1681 -0
- package/dist/generated/prisma/models/CodingAgentProfile.js +1 -0
- package/dist/generated/prisma/models/CodingProxyRequest.d.ts +1749 -0
- package/dist/generated/prisma/models/CodingProxyRequest.js +1 -0
- package/dist/generated/prisma/models/CodingProxySession.d.ts +1626 -0
- package/dist/generated/prisma/models/CodingProxySession.js +1 -0
- package/dist/generated/prisma/models/CodingRun.d.ts +3583 -0
- package/dist/generated/prisma/models/CodingRun.js +1 -0
- package/dist/generated/prisma/models/CodingService.d.ts +1348 -0
- package/dist/generated/prisma/models/CodingService.js +1 -0
- package/dist/generated/prisma/models/Datastore.d.ts +1434 -0
- package/dist/generated/prisma/models/Datastore.js +1 -0
- package/dist/generated/prisma/models/DatastoreEntry.d.ts +1314 -0
- package/dist/generated/prisma/models/DatastoreEntry.js +1 -0
- package/dist/generated/prisma/models/HostEventDelivery.d.ts +946 -0
- package/dist/generated/prisma/models/HostEventDelivery.js +1 -0
- package/dist/generated/prisma/models/HostIdentity.d.ts +1232 -0
- package/dist/generated/prisma/models/HostIdentity.js +1 -0
- package/dist/generated/prisma/models/HostIdentityLinkRequest.d.ts +1473 -0
- package/dist/generated/prisma/models/HostIdentityLinkRequest.js +1 -0
- package/dist/generated/prisma/models/OAuthAuthorizationCode.d.ts +1526 -0
- package/dist/generated/prisma/models/OAuthAuthorizationCode.js +1 -0
- package/dist/generated/prisma/models/OAuthAuthorizationRequest.d.ts +1350 -0
- package/dist/generated/prisma/models/OAuthAuthorizationRequest.js +1 -0
- package/dist/generated/prisma/models/OAuthClient.d.ts +1289 -0
- package/dist/generated/prisma/models/OAuthClient.js +1 -0
- package/dist/generated/prisma/models/OAuthFamily.d.ts +1540 -0
- package/dist/generated/prisma/models/OAuthFamily.js +1 -0
- package/dist/generated/prisma/models/OAuthGrant.d.ts +1280 -0
- package/dist/generated/prisma/models/OAuthGrant.js +1 -0
- package/dist/generated/prisma/models/Principal.d.ts +2245 -0
- package/dist/generated/prisma/models/Principal.js +1 -0
- package/dist/generated/prisma/models/RegistryAllowance.d.ts +1148 -0
- package/dist/generated/prisma/models/RegistryAllowance.js +1 -0
- package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +1219 -0
- package/dist/generated/prisma/models/RegistryApprovedVersion.js +1 -0
- package/dist/generated/prisma/models/RegistryFetch.d.ts +1428 -0
- package/dist/generated/prisma/models/RegistryFetch.js +1 -0
- package/dist/generated/prisma/models/RegistryPlanRefusal.d.ts +1294 -0
- package/dist/generated/prisma/models/RegistryPlanRefusal.js +1 -0
- package/dist/generated/prisma/models/RegistryVersionFact.d.ts +1085 -0
- package/dist/generated/prisma/models/RegistryVersionFact.js +1 -0
- package/dist/generated/prisma/models/ResourceGrant.d.ts +1437 -0
- package/dist/generated/prisma/models/ResourceGrant.js +1 -0
- package/dist/generated/prisma/models/Run.d.ts +2669 -0
- package/dist/generated/prisma/models/Run.js +1 -0
- package/dist/generated/prisma/models/RunHostCheck.d.ts +1239 -0
- package/dist/generated/prisma/models/RunHostCheck.js +1 -0
- package/dist/generated/prisma/models/RunHostStatus.d.ts +1315 -0
- package/dist/generated/prisma/models/RunHostStatus.js +1 -0
- package/dist/generated/prisma/models/SchedulerLease.d.ts +970 -0
- package/dist/generated/prisma/models/SchedulerLease.js +1 -0
- package/dist/generated/prisma/models/Secret.d.ts +1399 -0
- package/dist/generated/prisma/models/Secret.js +1 -0
- package/dist/generated/prisma/models/SecretElicitationOutcome.d.ts +973 -0
- package/dist/generated/prisma/models/SecretElicitationOutcome.js +1 -0
- package/dist/generated/prisma/models/Task.d.ts +1176 -0
- package/dist/generated/prisma/models/Task.js +1 -0
- package/dist/generated/prisma/models/Tool.d.ts +1490 -0
- package/dist/generated/prisma/models/Tool.js +1 -0
- package/dist/generated/prisma/models/Webhook.d.ts +1386 -0
- package/dist/generated/prisma/models/Webhook.js +1 -0
- package/dist/generated/prisma/models.d.ts +45 -0
- package/dist/generated/prisma/models.js +1 -0
- package/dist/help/build.d.ts +1 -0
- package/dist/help/build.js +9 -0
- package/dist/help/catalog.d.ts +24 -0
- package/dist/help/catalog.js +160 -0
- package/dist/help/cli.d.ts +2 -0
- package/dist/help/cli.js +65 -0
- package/dist/help/runtime.d.ts +3 -0
- package/dist/help/runtime.js +44 -0
- package/dist/help/search.d.ts +9 -0
- package/dist/help/search.js +104 -0
- package/dist/help-index.json +660 -0
- package/dist/import/cli-args.js +3 -2
- package/dist/import/create.d.ts +6 -1
- package/dist/import/create.js +68 -14
- package/dist/import/index.d.ts +1 -1
- package/dist/import/index.js +19 -9
- package/dist/import/neutral-schema.d.ts +11 -11
- package/dist/mcp/auth/access.d.ts +70 -0
- package/dist/mcp/auth/access.js +58 -0
- package/dist/mcp/auth/grants-cli.d.ts +149 -0
- package/dist/mcp/auth/grants-cli.js +518 -0
- package/dist/mcp/auth/host-account-cli.d.ts +2 -0
- package/dist/mcp/auth/host-account-cli.js +47 -0
- package/dist/mcp/auth/ownership.d.ts +37 -63
- package/dist/mcp/auth/ownership.js +19 -14
- package/dist/mcp/auth/principal.d.ts +1 -1
- package/dist/mcp/auth/repo-authorization.d.ts +22 -0
- package/dist/mcp/auth/repo-authorization.js +51 -0
- package/dist/mcp/auth/resource-server.d.ts +32 -3
- package/dist/mcp/auth/resource-server.js +84 -3
- package/dist/mcp/auth/self-hosted/browser.js +22 -8
- package/dist/mcp/auth/self-hosted/cli.d.ts +1 -1
- package/dist/mcp/auth/self-hosted/cli.js +47 -13
- package/dist/mcp/auth/self-hosted/credentials.d.ts +21 -3
- package/dist/mcp/auth/self-hosted/credentials.js +62 -4
- package/dist/mcp/auth/self-hosted/rate-limit.d.ts +1 -1
- package/dist/mcp/auth/self-hosted/session.d.ts +3 -2
- package/dist/mcp/context.d.ts +28 -2
- package/dist/mcp/errors.d.ts +25 -6
- package/dist/mcp/errors.js +98 -0
- package/dist/mcp/host-events/github-ingress.d.ts +36 -0
- package/dist/mcp/host-events/github-ingress.js +92 -0
- package/dist/mcp/host-events/github-user-callback.d.ts +18 -0
- package/dist/mcp/host-events/github-user-callback.js +50 -0
- package/dist/mcp/index.d.ts +8 -1
- package/dist/mcp/index.js +106 -16
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.js +27 -9
- package/dist/mcp/shared/page-style.d.ts +16 -0
- package/dist/mcp/shared/page-style.js +129 -0
- package/dist/mcp/tasks/manager.d.ts +1 -1
- package/dist/mcp/tools/agents.js +447 -49
- package/dist/mcp/tools/budget-groups.js +3 -3
- package/dist/mcp/tools/datastore.js +23 -16
- package/dist/mcp/tools/grants.d.ts +2 -0
- package/dist/mcp/tools/grants.js +239 -0
- package/dist/mcp/tools/help.d.ts +5 -0
- package/dist/mcp/tools/help.js +67 -0
- package/dist/mcp/tools/host-accounts.d.ts +2 -0
- package/dist/mcp/tools/host-accounts.js +114 -0
- package/dist/mcp/tools/memory.d.ts +7 -1
- package/dist/mcp/tools/memory.js +5 -5
- package/dist/mcp/tools/repositories.d.ts +2 -0
- package/dist/mcp/tools/repositories.js +181 -0
- package/dist/mcp/tools/runs.d.ts +6 -0
- package/dist/mcp/tools/runs.js +60 -6
- package/dist/mcp/tools/scheduling.js +4 -7
- package/dist/mcp/tools/secret-elicitation-form.d.ts +1 -1
- package/dist/mcp/tools/secret-elicitation-form.js +10 -28
- package/dist/mcp/tools/secret-elicitation.d.ts +1 -1
- package/dist/mcp/tools/secrets.js +18 -6
- package/dist/mcp/tools/services.d.ts +2 -0
- package/dist/mcp/tools/services.js +222 -0
- package/dist/mcp/tools/subagents.js +53 -17
- package/dist/mcp/tools/tools.d.ts +41 -0
- package/dist/mcp/tools/tools.js +202 -41
- package/dist/mcp/tools/trigger.js +36 -6
- package/dist/mcp/tools/webhooks.js +15 -4
- package/dist/mcp/transport/streamable-http.d.ts +11 -1
- package/dist/mcp/transport/streamable-http.js +32 -2
- package/dist/mcp/unattended-schedules.d.ts +1 -1
- package/dist/mcp/webhooks/ingress.d.ts +1 -1
- package/dist/providers/auth/delegating.d.ts +19 -0
- package/dist/providers/auth/delegating.js +71 -0
- package/dist/providers/auth/index.d.ts +3 -1
- package/dist/providers/auth/index.js +11 -0
- package/dist/providers/auth/self-hosted.d.ts +4 -3
- package/dist/providers/auth/self-hosted.js +16 -4
- package/dist/providers/auth/types.d.ts +6 -0
- package/dist/providers/coding-proxy/memory-ledger.d.ts +3 -0
- package/dist/providers/coding-proxy/memory-ledger.js +21 -2
- package/dist/providers/coding-proxy/metering.d.ts +4 -0
- package/dist/providers/coding-proxy/metering.js +28 -2
- package/dist/providers/coding-proxy/prisma-ledger.d.ts +18 -1
- package/dist/providers/coding-proxy/prisma-ledger.js +50 -5
- package/dist/providers/coding-proxy/proxy.d.ts +13 -0
- package/dist/providers/coding-proxy/proxy.js +479 -18
- package/dist/providers/coding-proxy/registry/audit.d.ts +131 -0
- package/dist/providers/coding-proxy/registry/audit.js +380 -0
- package/dist/providers/coding-proxy/registry/bounded-fetch.d.ts +16 -0
- package/dist/providers/coding-proxy/registry/bounded-fetch.js +77 -0
- package/dist/providers/coding-proxy/registry/plan.d.ts +58 -0
- package/dist/providers/coding-proxy/registry/plan.js +304 -0
- package/dist/providers/coding-proxy/registry/prisma-store.d.ts +34 -0
- package/dist/providers/coding-proxy/registry/prisma-store.js +151 -0
- package/dist/providers/coding-proxy/registry/service.d.ts +213 -0
- package/dist/providers/coding-proxy/registry/service.js +1137 -0
- package/dist/providers/coding-proxy/registry/store.d.ts +127 -0
- package/dist/providers/coding-proxy/registry/store.js +70 -0
- package/dist/providers/coding-proxy/runtime.d.ts +18 -1
- package/dist/providers/coding-proxy/runtime.js +63 -0
- package/dist/providers/coding-proxy/secure-fetch.js +0 -1
- package/dist/providers/coding-proxy/server.d.ts +11 -0
- package/dist/providers/coding-proxy/server.js +163 -0
- package/dist/providers/coding-proxy/types.d.ts +15 -0
- package/dist/providers/datastore/postgres.d.ts +1 -1
- package/dist/providers/engine/types.d.ts +10 -0
- package/dist/providers/executor/build.d.ts +3 -3
- package/dist/providers/executor/composition.d.ts +4 -1
- package/dist/providers/executor/composition.js +19 -0
- package/dist/providers/executor/container.d.ts +106 -4
- package/dist/providers/executor/container.js +305 -22
- package/dist/providers/executor/dbos.d.ts +3 -4
- package/dist/providers/executor/in-process.d.ts +2 -3
- package/dist/providers/executor/routing.d.ts +7 -0
- package/dist/providers/executor/routing.js +13 -0
- package/dist/providers/executor/types.d.ts +22 -0
- package/dist/providers/jobs/claude-tool-setup.d.ts +23 -0
- package/dist/providers/jobs/claude-tool-setup.js +50 -0
- package/dist/providers/jobs/collect-prune.d.ts +7 -0
- package/dist/providers/jobs/collect-prune.js +27 -0
- package/dist/providers/jobs/docker-isolation.d.ts +48 -3
- package/dist/providers/jobs/docker-isolation.js +213 -22
- package/dist/providers/jobs/docker-services.d.ts +35 -0
- package/dist/providers/jobs/docker-services.js +191 -0
- package/dist/providers/jobs/docker.d.ts +60 -2
- package/dist/providers/jobs/docker.js +313 -50
- package/dist/providers/jobs/fake-kubernetes-api.d.ts +1 -0
- package/dist/providers/jobs/fake-kubernetes-api.js +12 -3
- package/dist/providers/jobs/kubernetes-isolation.d.ts +17 -2
- package/dist/providers/jobs/kubernetes-isolation.js +238 -57
- package/dist/providers/jobs/kubernetes-platform.d.ts +10 -4
- package/dist/providers/jobs/kubernetes-platform.js +11 -5
- package/dist/providers/jobs/kubernetes-preflight.js +3 -0
- package/dist/providers/jobs/kubernetes.d.ts +21 -2
- package/dist/providers/jobs/kubernetes.js +117 -31
- package/dist/providers/jobs/types.d.ts +20 -0
- package/dist/providers/llm/anthropic.js +6 -2
- package/dist/providers/llm/bedrock.js +2 -1
- package/dist/providers/llm/claude-messages.d.ts +5 -1
- package/dist/providers/llm/claude-messages.js +1 -0
- package/dist/providers/llm/claude-provider.d.ts +3 -1
- package/dist/providers/llm/claude-provider.js +5 -1
- package/dist/providers/llm/index.d.ts +1 -1
- package/dist/providers/llm/index.js +1 -1
- package/dist/providers/llm/pricing-anthropic.d.ts +10 -0
- package/dist/providers/llm/pricing-anthropic.js +32 -14
- package/dist/providers/llm/pricing-bedrock-claude.d.ts +8 -0
- package/dist/providers/llm/pricing-bedrock-claude.js +9 -0
- package/dist/providers/llm/routing.d.ts +10 -1
- package/dist/providers/llm/routing.js +18 -0
- package/dist/providers/llm/types.d.ts +12 -0
- package/dist/providers/llm/types.js +8 -1
- package/dist/providers/memory/postgres.d.ts +1 -1
- package/dist/providers/review-host/diff-lines.d.ts +16 -0
- package/dist/providers/review-host/diff-lines.js +59 -0
- package/dist/providers/review-host/github-events.d.ts +6 -0
- package/dist/providers/review-host/github-events.js +180 -0
- package/dist/providers/review-host/github-user-auth.d.ts +38 -0
- package/dist/providers/review-host/github-user-auth.js +128 -0
- package/dist/providers/review-host/github.d.ts +57 -0
- package/dist/providers/review-host/github.js +567 -0
- package/dist/providers/review-host/index.d.ts +12 -0
- package/dist/providers/review-host/index.js +30 -0
- package/dist/providers/review-host/review-format.d.ts +19 -0
- package/dist/providers/review-host/review-format.js +59 -0
- package/dist/providers/review-host/types.d.ts +284 -0
- package/dist/providers/review-host/types.js +24 -0
- package/dist/providers/vcs/git.d.ts +16 -6
- package/dist/providers/vcs/git.js +79 -14
- package/dist/providers/vcs/github.d.ts +74 -3
- package/dist/providers/vcs/github.js +195 -15
- package/dist/providers/vcs/types.d.ts +42 -4
- package/dist/quickstart/index.js +34 -32
- package/dist/quickstart/migrate.d.ts +23 -0
- package/dist/quickstart/migrate.js +125 -0
- package/dist/sandbox/fetch-policy.d.ts +20 -2
- package/dist/sandbox/fetch-policy.js +64 -3
- package/dist/sandbox/host-functions.d.ts +9 -1
- package/dist/sandbox/host-functions.js +12 -5
- package/dist/serve.js +1 -1
- package/dist/wardby-bin.js +6 -0
- package/docs/README.md +30 -0
- package/docs/architecture-runtime.md +90 -0
- package/docs/assets/brand/wardby-icon-512.png +0 -0
- package/docs/assets/brand/wardby-icon.svg +16 -0
- package/docs/assets/brand/wardby-mascot-profile-512.png +0 -0
- package/docs/assets/brand/wardby-mascot.png +0 -0
- package/docs/assets/brand/wardby-mascot.svg +5 -0
- package/docs/assets/wardby-workflow.svg +106 -0
- package/docs/code-review-agents.md +481 -0
- package/docs/coding-agent-setup.md +172 -0
- package/docs/coding-packages.md +455 -0
- package/docs/coding-services.md +300 -0
- package/docs/coding-worker-byo-images.md +98 -0
- package/docs/coding-worker-isolation.md +1061 -0
- package/docs/getting-started-gke.md +615 -0
- package/docs/getting-started-identity-provider.md +308 -0
- package/docs/getting-started.md +133 -0
- package/docs/observability.md +53 -0
- package/docs/release-verification.md +66 -0
- package/docs/security-deployment.md +657 -0
- package/help/code-review-agents.md +31 -0
- package/help/coding-packages.md +31 -0
- package/help/coding-services.md +71 -0
- package/help/creating-agents.md +68 -0
- package/help/deploy-gke.md +39 -0
- package/help/deployment-targets.md +39 -0
- package/help/errors/budget-group-exhausted.md +25 -0
- package/help/errors/docker-isolation-unsupported.md +26 -0
- package/help/errors/protected-path.md +45 -0
- package/help/errors/repo-access.md +27 -0
- package/help/errors/service-declaration-invalid.md +27 -0
- package/help/errors/service-declaration-unavailable.md +25 -0
- package/help/errors/service-launcher-unsupported.md +30 -0
- package/help/errors/service-not-allowed.md +27 -0
- package/help/errors/service-unknown.md +23 -0
- package/help/errors/service-unready.md +49 -0
- package/help/getting-started.md +31 -0
- package/help/github.md +30 -0
- package/help/identity-and-access.md +39 -0
- package/help/mcp.md +30 -0
- package/help/native-capabilities.md +30 -0
- package/help/observability.md +41 -0
- package/help/operating-agents.md +30 -0
- package/help/security.md +27 -0
- package/help/troubleshooting/budgets.md +26 -0
- package/help/troubleshooting/coding-workers.md +47 -0
- package/help/troubleshooting/repository-access.md +27 -0
- package/package.json +30 -11
- package/prisma/migrate.config.mjs +20 -0
- package/prisma/migrations/20260925010000_coding_collect_exclude/migration.sql +8 -0
- package/prisma/migrations/20260925015000_allowed_egress_default/migration.sql +8 -0
- package/prisma/migrations/20260925020000_coding_package_registry/migration.sql +55 -0
- package/prisma/migrations/20260925030000_tool_name_per_owner/migration.sql +11 -0
- package/prisma/migrations/20260926010000_run_trigger_host_event/migration.sql +7 -0
- package/prisma/migrations/20260926020000_code_review_hosts/migration.sql +53 -0
- package/prisma/migrations/20260926030000_auth_user_roles/migration.sql +9 -0
- package/prisma/migrations/20260926040000_agent_effort/migration.sql +6 -0
- package/prisma/migrations/20260926050000_registry_lockfile_plan/migration.sql +32 -0
- package/prisma/migrations/20260926050000_repo_access_authorization/migration.sql +82 -0
- package/prisma/migrations/20260926060000_registry_plan_refusal/migration.sql +19 -0
- package/prisma/migrations/20260926100000_registry_plan_refusal_published_at/migration.sql +5 -0
- package/prisma/migrations/20260926190000_run_host_status/migration.sql +18 -0
- package/prisma/migrations/20260926210000_run_host_status_at_dispatch/migration.sql +5 -0
- package/prisma/migrations/20260927010000_resource_grants/migration.sql +72 -0
- package/prisma/migrations/20260927020000_proxy_session_budget_exhausted/migration.sql +3 -0
- package/prisma/migrations/20260927030000_coding_debug_trace/migration.sql +4 -0
- package/prisma/migrations/20260927040000_proxy_session_upstream_failure/migration.sql +3 -0
- package/prisma/migrations/20260927050000_coding_run_services/migration.sql +74 -0
- package/prisma/migrations/20260928000000_coding_run_tool_image/migration.sql +5 -0
- package/prisma/schema.prisma +417 -23
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { tmpdir } from "node:os";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
3
|
import { loadCodingConcurrencyConfig, loadContainerExecutorConfig, loadGitHubVcsConfig, loadKubernetesJobConfig, loadProviderConfig, } from "../../config/providers.js";
|
|
4
|
+
import { summarizeRegistryFetches } from "../../coding/registry/report.js";
|
|
4
5
|
import { drainCodingQueue } from "../../core/coding-queue.js";
|
|
5
6
|
import { logger } from "../../core/logger.js";
|
|
6
7
|
import { EnvironmentCredentialResolver } from "../coding-proxy/environment-credentials.js";
|
|
@@ -15,6 +16,8 @@ import { KubernetesJobLauncher } from "../jobs/kubernetes.js";
|
|
|
15
16
|
import { buildVcsProvider } from "../vcs/index.js";
|
|
16
17
|
import { ContainerExecutor, PrismaContainerExecutionStore, RunCapabilityVault } from "./container.js";
|
|
17
18
|
import { PrismaExecutionKindResolver, RoutingExecutor } from "./routing.js";
|
|
19
|
+
import { createRepoAccessGate } from "../../core/repo-access.js";
|
|
20
|
+
import { buildReviewHosts } from "../review-host/index.js";
|
|
18
21
|
const compositionLog = logger.child({ module: "executor-composition" });
|
|
19
22
|
/** Builds container execution only when Docker or Kubernetes is explicitly selected. */
|
|
20
23
|
export function buildConfiguredExecutor(options) {
|
|
@@ -43,6 +46,15 @@ export function buildConfiguredExecutor(options) {
|
|
|
43
46
|
if (!isRegistryDigest(config.workerImage)) {
|
|
44
47
|
throw new Error("CODING_WORKER_IMAGE must be a registry digest (repo@sha256:...) when JOB_LAUNCHER=kubernetes.");
|
|
45
48
|
}
|
|
49
|
+
for (const image of [config.claudeWorkerImage, config.claudeToolRunnerImage]) {
|
|
50
|
+
if (image !== undefined && !isRegistryDigest(image)) {
|
|
51
|
+
throw new Error("CODING_CLAUDE_WORKER_IMAGE and CODING_CLAUDE_TOOL_RUNNER_IMAGE must be registry digests (repo@sha256:...) when JOB_LAUNCHER=kubernetes.");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const claudePython = config.claudeToolRunnerImages["node-python"]?.["3.12"];
|
|
55
|
+
if (claudePython !== undefined && !isRegistryDigest(claudePython)) {
|
|
56
|
+
throw new Error("CODING_CLAUDE_TOOL_RUNNER_IMAGE_NODE_PYTHON_3_12 must be a registry digest (repo@sha256:...) when JOB_LAUNCHER=kubernetes.");
|
|
57
|
+
}
|
|
46
58
|
const kubernetes = loadKubernetesJobConfig(env);
|
|
47
59
|
// The preflight only runs on the first launch; a configuration that cannot work should
|
|
48
60
|
// fail the process at start-up, not the first coding run an hour later.
|
|
@@ -58,6 +70,7 @@ export function buildConfiguredExecutor(options) {
|
|
|
58
70
|
workspaceRoot,
|
|
59
71
|
resolveCapability: (runId) => capabilities.get(runId),
|
|
60
72
|
readyTimeoutMs: kubernetes.readyTimeoutMs,
|
|
73
|
+
enforcementExecTimeoutMs: kubernetes.enforcementExecTimeoutMs,
|
|
61
74
|
preflight: async () => {
|
|
62
75
|
const { proxyIp } = await runKubernetesPreflight({
|
|
63
76
|
api,
|
|
@@ -101,11 +114,17 @@ export function buildConfiguredExecutor(options) {
|
|
|
101
114
|
workerImage: config.workerImage,
|
|
102
115
|
claudeWorkerImage: config.claudeWorkerImage,
|
|
103
116
|
claudeToolRunnerImage: config.claudeToolRunnerImage,
|
|
117
|
+
claudeToolRunnerImages: config.claudeToolRunnerImages,
|
|
104
118
|
additionalWorkerImages: config.additionalWorkerImages,
|
|
105
119
|
credentialRef: config.credentialRef,
|
|
106
120
|
anthropicCredentialRef: config.anthropicCredentialRef,
|
|
107
121
|
limits: { cpus: config.cpus, memoryMb: config.memoryMb, pids: config.pids, diskMb: config.diskMb },
|
|
108
122
|
maxDiskMb: config.maxDiskMb,
|
|
123
|
+
repoAccess: options.repoAccess ?? createRepoAccessGate({ db: options.db, hosts: buildReviewHosts(env) }),
|
|
124
|
+
registryReport: async (runId) => {
|
|
125
|
+
const rows = await options.db.registryFetch.findMany({ where: { runId }, orderBy: { createdAt: "asc" } });
|
|
126
|
+
return summarizeRegistryFetches(rows);
|
|
127
|
+
},
|
|
109
128
|
onSlotReleased: () => {
|
|
110
129
|
void drainCodingQueue({
|
|
111
130
|
db: options.db,
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
import type { PrismaClient } from "
|
|
1
|
+
import type { PrismaClient } from "#prisma";
|
|
2
|
+
import type { CodingProvider } from "../../coding/provider.js";
|
|
3
|
+
import { type RepoAccessGate } from "../../core/repo-access.js";
|
|
2
4
|
import { type CodingRunObserver } from "../../coding/observability.js";
|
|
3
5
|
import { type CodingRunResult } from "../../coding/protocol.js";
|
|
4
6
|
import type { ProxyProtocol } from "../coding-proxy/types.js";
|
|
5
7
|
import type { JobHandle, JobResourceLimits, WorkspaceJobLauncher } from "../jobs/types.js";
|
|
6
8
|
import type { VcsProvider } from "../vcs/types.js";
|
|
7
9
|
import type { CodingImageSelector, ExecutionRecoveryResult, Executor, PersistedExecutionHandle } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Claude Code's commands run in its tool runner, which never reports back through the agent, so the
|
|
12
|
+
* host rewrites registry-proxy download URLs in collected lockfiles itself (the Codex driver does it
|
|
13
|
+
* in the worker). Best effort and symlink-safe (lockfiles.ts); a Codex workspace is left alone.
|
|
14
|
+
*/
|
|
15
|
+
export declare function normalizeCollectedLockfiles(provider: string, workspacePath: string): Promise<string[]>;
|
|
8
16
|
export interface ContainerRunSnapshot {
|
|
9
17
|
runId: string;
|
|
10
18
|
status: string;
|
|
@@ -19,11 +27,15 @@ export interface ContainerRunSnapshot {
|
|
|
19
27
|
provider: string;
|
|
20
28
|
model: string;
|
|
21
29
|
timeoutSec: number;
|
|
22
|
-
allowedEgress: unknown;
|
|
23
30
|
protectedPaths: unknown;
|
|
31
|
+
/** Stored per-agent collection paths; see src/coding/collect-exclude.ts. */
|
|
32
|
+
collectExclude: unknown;
|
|
24
33
|
/** Revision-in-place: set when this run continues another run's branch/PR. See preflight(). */
|
|
25
34
|
rootCodingRunId: string | null;
|
|
26
35
|
budgetUsd: number;
|
|
36
|
+
/** The agent's own per-run budget; `budgetUsd` is less when its budget group had less left. */
|
|
37
|
+
agentBudgetUsd?: number;
|
|
38
|
+
budgetGroupName?: string | null;
|
|
27
39
|
tokensIn: number;
|
|
28
40
|
tokensOut: number;
|
|
29
41
|
costUsd: number;
|
|
@@ -32,7 +44,19 @@ export interface ContainerRunSnapshot {
|
|
|
32
44
|
proxySessionId: string | null;
|
|
33
45
|
result: unknown;
|
|
34
46
|
workerImage: string | null;
|
|
47
|
+
/** Claude's tool-runner image, resolved at dispatch (CodingRun.toolImage); null on older rows and Codex runs. */
|
|
48
|
+
toolImage?: string | null;
|
|
35
49
|
workspaceDiskMb: number | null;
|
|
50
|
+
/** Admin-requested debug trace, fixed at dispatch (CodingRun.debugTrace). */
|
|
51
|
+
debugTrace?: boolean;
|
|
52
|
+
/** Coding-run services resolved at dispatch (CodingRun.services); parsed with parseStoredServices. */
|
|
53
|
+
services?: unknown;
|
|
54
|
+
/** The terminal failure category, once the run has one (CodingRun.failureCategory). */
|
|
55
|
+
failureCategory?: string | null;
|
|
56
|
+
/** The agent's CURRENT coding-profile repository (null if the profile is gone); may differ from `repository`. */
|
|
57
|
+
profileRepository: string | null;
|
|
58
|
+
/** How the profile's repository was authorized (CodingAgentProfile.repositoryAuthorizedVia). */
|
|
59
|
+
repositoryAuthorizedVia: string | null;
|
|
36
60
|
}
|
|
37
61
|
/**
|
|
38
62
|
* claimed: this caller owns provisioning. unavailable: someone else does, or
|
|
@@ -47,7 +71,7 @@ export interface ContainerExecutionStore {
|
|
|
47
71
|
persistHandle(runId: string, claimId: string, handle: JobHandle): Promise<void>;
|
|
48
72
|
heartbeat(runId: string): Promise<void>;
|
|
49
73
|
complete(runId: string, status: "succeeded" | "budget_exhausted", result: CodingRunResult): Promise<void>;
|
|
50
|
-
terminate(runId: string, status: "failed" | "refused" | "lost" | "cancelled", error: string, audit?: CodingFailureAudit): Promise<void>;
|
|
74
|
+
terminate(runId: string, status: "failed" | "refused" | "lost" | "budget_exhausted" | "cancelled", error: string, audit?: CodingFailureAudit): Promise<void>;
|
|
51
75
|
}
|
|
52
76
|
export interface CodingFailureAudit {
|
|
53
77
|
failureCategory: string;
|
|
@@ -64,7 +88,7 @@ export declare class PrismaContainerExecutionStore implements ContainerExecution
|
|
|
64
88
|
persistHandle(runId: string, claimId: string, handle: JobHandle): Promise<void>;
|
|
65
89
|
heartbeat(runId: string): Promise<void>;
|
|
66
90
|
complete(runId: string, status: "succeeded" | "budget_exhausted", result: CodingRunResult): Promise<void>;
|
|
67
|
-
terminate(runId: string, status: "failed" | "refused" | "lost" | "cancelled", error: string, audit?: CodingFailureAudit): Promise<void>;
|
|
91
|
+
terminate(runId: string, status: "failed" | "refused" | "lost" | "budget_exhausted" | "cancelled", error: string, audit?: CodingFailureAudit): Promise<void>;
|
|
68
92
|
}
|
|
69
93
|
export interface CodingSessionController {
|
|
70
94
|
createSession(input: {
|
|
@@ -79,6 +103,10 @@ export interface CodingSessionController {
|
|
|
79
103
|
capability: string;
|
|
80
104
|
}>;
|
|
81
105
|
cancelSession(sessionId: string): Promise<void>;
|
|
106
|
+
/** Whether the proxy refused a request of this session for budget. */
|
|
107
|
+
budgetExhausted?(sessionId: string): Promise<boolean>;
|
|
108
|
+
/** The code of the first model-provider failure the proxy relayed for this session, if any. */
|
|
109
|
+
upstreamFailure?(sessionId: string): Promise<string | null>;
|
|
82
110
|
}
|
|
83
111
|
/** Plain capabilities live only for the short provisioning window. */
|
|
84
112
|
export declare class RunCapabilityVault {
|
|
@@ -100,6 +128,12 @@ export interface ContainerExecutorOptions {
|
|
|
100
128
|
credentialRef: string;
|
|
101
129
|
claudeWorkerImage?: string;
|
|
102
130
|
claudeToolRunnerImage?: string;
|
|
131
|
+
/**
|
|
132
|
+
* Claude tool-runner images for toolchains beyond the "node" baseline (claudeToolRunnerImage),
|
|
133
|
+
* keyed by toolchain, then version -- the same shape as additionalWorkerImages. Claude's agent
|
|
134
|
+
* image is the same for every toolchain; only the tool runner, which runs the commands, differs.
|
|
135
|
+
*/
|
|
136
|
+
claudeToolRunnerImages?: Record<string, Record<string, string>>;
|
|
103
137
|
anthropicCredentialRef?: string;
|
|
104
138
|
limits: JobResourceLimits;
|
|
105
139
|
/** Operator ceiling (MiB) on CodingRun.workspaceDiskMb; see coding_workspace_disk_exceeds_limit in jobSpec. */
|
|
@@ -117,6 +151,33 @@ export interface ContainerExecutorOptions {
|
|
|
117
151
|
* than on the next scheduler tick. Never called for a run that was queued.
|
|
118
152
|
*/
|
|
119
153
|
onSlotReleased?: () => void;
|
|
154
|
+
/**
|
|
155
|
+
* Loads this run's RegistryFetch ledger (composition.ts wires the Prisma
|
|
156
|
+
* query) so finalizeChanges can surface installed/refused packages in the
|
|
157
|
+
* PR body. Optional so tests and non-registry deployments can omit it;
|
|
158
|
+
* a rejection is swallowed and treated as "nothing to report" since a
|
|
159
|
+
* reporting failure must never fail the run itself.
|
|
160
|
+
*/
|
|
161
|
+
registryReport?: (runId: string) => Promise<RegistryReport>;
|
|
162
|
+
/**
|
|
163
|
+
* Repository authorization: every run is checked, before its workspace is
|
|
164
|
+
* prepared, against the agent owner's current GitHub access (or a recorded
|
|
165
|
+
* admin/grandfathered approval of this exact repository).
|
|
166
|
+
*/
|
|
167
|
+
repoAccess: RepoAccessGate;
|
|
168
|
+
}
|
|
169
|
+
/** A run's deduplicated served packages and refusals (see summarizeRegistryFetches). */
|
|
170
|
+
export interface RegistryReport {
|
|
171
|
+
packages: Array<{
|
|
172
|
+
ecosystem: string;
|
|
173
|
+
name: string;
|
|
174
|
+
version: string;
|
|
175
|
+
}>;
|
|
176
|
+
packageRefusals: Array<{
|
|
177
|
+
ecosystem: string;
|
|
178
|
+
name: string;
|
|
179
|
+
reason: string;
|
|
180
|
+
}>;
|
|
120
181
|
}
|
|
121
182
|
export declare class ContainerExecutor implements Executor {
|
|
122
183
|
private readonly options;
|
|
@@ -155,10 +216,33 @@ export declare class ContainerExecutor implements Executor {
|
|
|
155
216
|
* that is otherwise healthy.
|
|
156
217
|
*/
|
|
157
218
|
private whileHeartbeating;
|
|
219
|
+
/**
|
|
220
|
+
* The run may use its repository only if the agent's current owner still
|
|
221
|
+
* has write on it, or the profile's approval (admin or grandfathered)
|
|
222
|
+
* covers exactly this repository. A profile changed since dispatch no
|
|
223
|
+
* longer covers the run's repository, so that falls back to the owner's
|
|
224
|
+
* access. Throws RepoAccessError (refused before anything is cloned).
|
|
225
|
+
*/
|
|
226
|
+
private authorizeRepository;
|
|
158
227
|
private preflight;
|
|
159
228
|
private finishTerminal;
|
|
229
|
+
/** The package report is informational: any failure loading it (a
|
|
230
|
+
* rejection, a synchronous throw, or a malformed result) yields no
|
|
231
|
+
* package section rather than failing finalization. */
|
|
232
|
+
private loadRegistryReport;
|
|
160
233
|
private resultFor;
|
|
161
234
|
resolveCodingWorkerImage(selector: CodingImageSelector): string;
|
|
235
|
+
/** Claude's tool-runner image for the agent's toolchain, at dispatch (Executor.resolveCodingToolImage); null for Codex. */
|
|
236
|
+
resolveCodingToolImage(selector: CodingImageSelector): string | null;
|
|
237
|
+
/** The tool runner is what runs a Claude agent's commands, so it is what the toolchain selects. */
|
|
238
|
+
private claudeToolImage;
|
|
239
|
+
/** Coding-run services: the repository's declaration at its base ref (Executor.readCodingServiceDeclaration). */
|
|
240
|
+
readCodingServiceDeclaration(input: {
|
|
241
|
+
repository: string;
|
|
242
|
+
baseRef: string;
|
|
243
|
+
}): Promise<string | null>;
|
|
244
|
+
/** The job launcher decides (Kubernetes and Docker start services for both providers). */
|
|
245
|
+
supportsCodingServices(provider: CodingProvider): boolean;
|
|
162
246
|
private requireCurrent;
|
|
163
247
|
private jobSpec;
|
|
164
248
|
private credentialRef;
|
|
@@ -167,6 +251,24 @@ export declare class ContainerExecutor implements Executor {
|
|
|
167
251
|
private preflightForCleanup;
|
|
168
252
|
private abandon;
|
|
169
253
|
private cleanupTerminal;
|
|
254
|
+
/** Whether the proxy refused this run's session for budget. Never throws. */
|
|
255
|
+
private outOfBudget;
|
|
256
|
+
/** The model-provider failure the proxy relayed for this run's session, classified. Never throws. */
|
|
257
|
+
private providerFailure;
|
|
258
|
+
/**
|
|
259
|
+
* A failure the model provider's refusal caused. The persisted error names
|
|
260
|
+
* the class only; the raw upstream code (a fixed identifier, never a message)
|
|
261
|
+
* goes to one operator line an alert can key on, and the failure itself is
|
|
262
|
+
* still logged under its diagnostic id.
|
|
263
|
+
*/
|
|
264
|
+
private providerFailureOf;
|
|
265
|
+
/** The host-safe sentence for a run that ran out of budget. */
|
|
266
|
+
private budgetSentence;
|
|
267
|
+
/**
|
|
268
|
+
* A failure the proxy's budget refusal caused. The failure itself is still
|
|
269
|
+
* logged under its diagnostic id, so the operator keeps the real reason.
|
|
270
|
+
*/
|
|
271
|
+
private budgetFailure;
|
|
170
272
|
private emit;
|
|
171
273
|
private terminal;
|
|
172
274
|
/**
|