@yemi33/minions 0.1.2447 → 0.1.2449
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/bin/cli-api-client.js +1 -1
- package/bin/install-internal-minions.js +1382 -44
- package/bin/install-layout.js +150 -0
- package/bin/minions.js +460 -167
- package/dashboard/docs/typography.md +65 -12
- package/dashboard/js/command-center.js +66 -7
- package/dashboard/js/detail-panel.js +36 -0
- package/dashboard/js/memory-panel.js +59 -12
- package/dashboard/js/qa.js +186 -45
- package/dashboard/js/refresh.js +148 -12
- package/dashboard/js/render-dispatch.js +3 -4
- package/dashboard/js/render-inbox.js +2 -2
- package/dashboard/js/render-other.js +3 -3
- package/dashboard/js/render-pipelines.js +14 -0
- package/dashboard/js/render-plans.js +57 -9
- package/dashboard/js/render-prd.js +132 -23
- package/dashboard/js/render-prs.js +195 -166
- package/dashboard/js/render-schedules.js +63 -3
- package/dashboard/js/render-utils.js +3 -3
- package/dashboard/js/render-watches.js +19 -3
- package/dashboard/js/render-work-items.js +238 -30
- package/dashboard/js/settings.js +205 -54
- package/dashboard/js/utils.js +51 -1
- package/dashboard/pages/home.html +1 -1
- package/dashboard/pages/qa.html +1 -16
- package/dashboard/pages/work.html +40 -0
- package/dashboard/shared/cc-limits.js +79 -0
- package/dashboard/shared/pr-filters.js +21 -38
- package/dashboard/shared/project-git-summary.js +1 -1
- package/dashboard/shared/record-filters.js +169 -0
- package/dashboard/shared/watches-source.js +1 -1
- package/dashboard/shared/welcome-popup.js +1 -1
- package/dashboard/shared/wi-filters.js +302 -0
- package/dashboard/slim/body.html +1 -0
- package/dashboard/slim/js/command-send.js +26 -0
- package/dashboard/slim/js/modals-tiles.js +380 -39
- package/dashboard/slim/js/status.js +13 -21
- package/dashboard/slim/layout.html +1 -0
- package/dashboard/slim/panel-bootstrap.js +6 -2
- package/dashboard/slim/styles.css +38 -0
- package/dashboard/styles.css +159 -55
- package/dashboard-build.js +52 -6
- package/dashboard.js +956 -423
- package/docs/README.md +11 -6
- package/docs/api-errors.md +2 -2
- package/docs/architecture-review-2026-07-09.md +1 -1
- package/docs/architecture.excalidraw +2 -2
- package/docs/auto-discovery.md +18 -9
- package/docs/branch-derivation.md +4 -4
- package/docs/capture-demos.js +39 -2
- package/docs/ci-runner-canary.md +123 -0
- package/docs/claude-md-propagation.md +2 -2
- package/docs/cloud-agent-dispatch.md +204 -0
- package/docs/command-center.md +7 -7
- package/docs/completion-reports.md +43 -20
- package/docs/constants.md +10 -3
- package/docs/constellation-bridge.md +134 -6
- package/docs/constellation-style-telemetry.md +4 -4
- package/docs/contracts/capability-protocol.v1.json +165 -0
- package/docs/cooldown-merge-semantics.md +12 -12
- package/docs/copilot-cli-schema.md +7 -7
- package/docs/cross-repo-plans.md +10 -10
- package/docs/dead-code-audit-retractions.md +5 -5
- package/docs/default-branch-ci.md +173 -0
- package/docs/deprecated.json +31 -31
- package/docs/design-inbox-entries-schema.md +3 -3
- package/docs/design-language.md +1051 -0
- package/docs/design-state-storage.md +11 -11
- package/docs/diagnostics-crash-reports.md +9 -9
- package/docs/diagnostics-memory.md +5 -5
- package/docs/documentation-audit-2026-07-09.md +7 -7
- package/docs/engine-restart.md +90 -5
- package/docs/harness-mode.md +1 -1
- package/docs/internal-install.md +338 -39
- package/docs/kb-dedup-duplicate-pair-investigation.md +5 -5
- package/docs/kb-pr3223-cascade-archiving.md +1 -1
- package/docs/kb-pr696-merge-conflict-docs.md +6 -6
- package/docs/kb-sweep.md +35 -35
- package/docs/keep-processes.md +1 -1
- package/docs/live-checkout-mode.md +30 -30
- package/docs/managed-spawn.md +18 -14
- package/docs/named-agents.md +7 -7
- package/docs/plan-lifecycle.md +69 -2
- package/docs/pr-author-identity.md +114 -0
- package/docs/pr-auto-fix-dispatch.md +19 -4
- package/docs/pr-comment-followup.md +6 -6
- package/docs/pr-review-fix-loop.md +59 -10
- package/docs/process-termination.md +40 -0
- package/docs/proposals/repo-pool-for-live-checkout.md +13 -13
- package/docs/qa-runbook-lifecycle.md +367 -17
- package/docs/qa-runbooks.md +3 -3
- package/docs/rfc-completion-json.md +18 -18
- package/docs/runtime-adapters.md +26 -21
- package/docs/security.md +6 -6
- package/docs/self-improvement.md +4 -4
- package/docs/shared-lifecycle-module-map.md +473 -472
- package/docs/skills.md +52 -3
- package/docs/slim-ux/concepts.md +121 -116
- package/docs/specs/agent-configurability.md +18 -18
- package/docs/specs/agent-rename.md +18 -18
- package/docs/team-memory.md +38 -21
- package/docs/timeouts-and-liveness.md +118 -10
- package/docs/tutorials/01-install-and-connect.md +1 -1
- package/docs/watches.md +40 -39
- package/docs/workspace-manifests.md +4 -4
- package/docs/worktree-lifecycle.md +293 -14
- package/engine/README.md +46 -0
- package/engine/{ado-comment.js → ado/comment.js} +8 -8
- package/engine/{ado-git-auth.js → ado/git-auth.js} +4 -4
- package/engine/{ado.js → ado/index.js} +417 -63
- package/engine/{ado-status.js → ado/status.js} +6 -8
- package/engine/{ado-token.js → ado/token.js} +1 -1
- package/engine/{acp-transport.js → agents/acp-transport.js} +62 -22
- package/engine/{agent-worker-pool.js → agents/agent-worker-pool.js} +17 -8
- package/engine/{cc-worker-pool.js → agents/cc-worker-pool.js} +16 -6
- package/engine/{claude-md-context.js → agents/claude-md-context.js} +5 -5
- package/engine/{harness-context.js → agents/harness-context.js} +5 -5
- package/engine/{harness.js → agents/harness.js} +3 -3
- package/engine/{llm.js → agents/llm.js} +18 -14
- package/engine/{model-discovery.js → agents/model-discovery.js} +2 -2
- package/engine/{playbook.js → agents/playbook.js} +155 -22
- package/engine/{pooled-agent-process.js → agents/pooled-agent-process.js} +14 -12
- package/engine/{preflight.js → agents/preflight.js} +29 -10
- package/engine/{spawn-agent.js → agents/spawn-agent.js} +25 -14
- package/engine/{spawn-phase-watchdog.js → agents/spawn-phase-watchdog.js} +16 -7
- package/engine/{steering.js → agents/steering.js} +5 -5
- package/engine/{tools-inventory.js → agents/tools-inventory.js} +2 -2
- package/engine/{agent-api-validation.js → api/agent-api-validation.js} +2 -2
- package/engine/{api-validation.js → api/api-validation.js} +1 -1
- package/engine/api/bridge.js +787 -0
- package/engine/{cc-api-validation.js → api/cc-api-validation.js} +1 -1
- package/engine/api/companion.js +560 -0
- package/engine/{content-api-validation.js → api/content-api-validation.js} +2 -2
- package/engine/{pr-issue-validation.js → api/pr-issue-validation.js} +33 -6
- package/engine/{settings-validation.js → api/settings-validation.js} +32 -4
- package/engine/api-contracts/agent-content.js +4 -4
- package/engine/api-contracts/capability-manifest.js +236 -0
- package/engine/api-contracts/capability-protocol.js +333 -0
- package/engine/api-contracts/cc-ops.js +1 -1
- package/engine/api-contracts/config-runtime.js +5 -0
- package/engine/api-contracts/core.js +28 -1
- package/engine/api-contracts/index.js +100 -0
- package/engine/api-contracts/orchestration.js +18 -5
- package/engine/api-contracts/pull-requests.js +37 -6
- package/engine/api-contracts/qa-process.js +29 -6
- package/engine/api-contracts/work-plan-prd.js +21 -1
- package/engine/cloud/contract.js +212 -0
- package/engine/cloud/index.js +159 -0
- package/engine/{execution-model.js → core/execution-model.js} +1 -1
- package/engine/{features.js → core/features.js} +4 -4
- package/engine/{operator-identity.js → core/operator-identity.js} +1 -1
- package/engine/{queries.js → core/queries.js} +201 -36
- package/engine/{safe-expr.js → core/safe-expr.js} +1 -1
- package/engine/{shared.js → core/shared.js} +1637 -175
- package/engine/{stdio-timestamps.js → core/stdio-timestamps.js} +1 -1
- package/engine/{untrusted-fence.js → core/untrusted-fence.js} +3 -3
- package/engine/db/index.js +11 -2
- package/engine/db/migrations/002-dispatches.js +3 -3
- package/engine/db/migrations/003-work-items.js +1 -1
- package/engine/db/migrations/004-pull-requests.js +1 -1
- package/engine/db/migrations/006-metrics.js +1 -1
- package/engine/db/migrations/007-watches.js +2 -2
- package/engine/db/migrations/008-small-state.js +1 -1
- package/engine/db/migrations/009-qa.js +1 -1
- package/engine/db/migrations/010-pr-links.js +1 -1
- package/engine/db/migrations/011-remaining-state.js +1 -1
- package/engine/db/migrations/012-steering-deliveries.js +2 -2
- package/engine/db/migrations/013-backfill-broken-note-links.js +1 -1
- package/engine/db/migrations/014-pr-fix-target-prefs.js +2 -2
- package/engine/db/migrations/015-plans-prds.js +0 -0
- package/engine/db/migrations/018-sql-only-cutover.js +2 -2
- package/engine/db/migrations/021-archived-work-items.js +1 -1
- package/engine/db/migrations/022-global-cc-session.js +1 -1
- package/engine/db/migrations/023-engine-state.js +1 -1
- package/engine/db/migrations/025-malformed-work-item-phantoms.js +1 -1
- package/engine/db/migrations/027-review-learning-lifecycle.js +1 -1
- package/engine/db/migrations/029-repair-reused-versions.js +20 -0
- package/engine/db/migrations/031-pr-author-identity.js +137 -0
- package/engine/{consolidation.js → memory/consolidation.js} +6 -6
- package/engine/{kb-sweep-runner.js → memory/kb-sweep-runner.js} +2 -2
- package/engine/{kb-sweep.js → memory/kb-sweep.js} +9 -7
- package/engine/{memory-retrieval.js → memory/memory-retrieval.js} +46 -4
- package/engine/{memory-store.js → memory/memory-store.js} +3 -3
- package/engine/{promotion.js → memory/promotion.js} +3 -3
- package/engine/{review-learning-backfill.js → memory/review-learning-backfill.js} +6 -6
- package/engine/{review-learning.js → memory/review-learning.js} +10 -5
- package/engine/{diagnostics-memory.js → observability/diagnostics-memory.js} +1 -1
- package/engine/{logs-store.js → observability/logs-store.js} +5 -5
- package/engine/{metrics-store.js → observability/metrics-store.js} +4 -4
- package/engine/{check-status.js → operations/check-status.js} +3 -3
- package/engine/{cli.js → operations/cli.js} +271 -113
- package/engine/{distribution.js → operations/distribution.js} +5 -6
- package/engine/{cleanup.js → orchestration/cleanup.js} +72 -45
- package/engine/{cooldown.js → orchestration/cooldown.js} +5 -5
- package/engine/{dispatch-events.js → orchestration/dispatch-events.js} +2 -2
- package/engine/{dispatch.js → orchestration/dispatch.js} +129 -36
- package/engine/orchestration/failed-scheduled-cleanup.js +274 -0
- package/engine/{lifecycle.js → orchestration/lifecycle.js} +198 -90
- package/engine/{meeting.js → orchestration/meeting.js} +6 -16
- package/engine/{pipeline.js → orchestration/pipeline.js} +12 -12
- package/engine/{pre-dispatch-eval.js → orchestration/pre-dispatch-eval.js} +10 -9
- package/engine/{routing.js → orchestration/routing.js} +3 -3
- package/engine/{schedule-bootstrap.js → orchestration/schedule-bootstrap.js} +4 -4
- package/engine/{scheduler.js → orchestration/scheduler.js} +38 -8
- package/engine/{timeout.js → orchestration/timeout.js} +158 -109
- package/engine/{db-events.js → persistence/db-events.js} +2 -2
- package/engine/{dispatch-store.js → persistence/dispatch-store.js} +7 -7
- package/engine/{inbox-store.js → persistence/inbox-store.js} +2 -2
- package/engine/{note-link-backfill.js → persistence/note-link-backfill.js} +4 -4
- package/engine/{pr-fix-target-store.js → persistence/pr-fix-target-store.js} +8 -8
- package/engine/{pull-requests-store.js → persistence/pull-requests-store.js} +21 -7
- package/engine/{small-state-store.js → persistence/small-state-store.js} +31 -31
- package/engine/persistence/state-operations.js +350 -0
- package/engine/{steering-store.js → persistence/steering-store.js} +6 -6
- package/engine/{issues.js → planning/issues.js} +2 -2
- package/engine/{plan-prd-validation.js → planning/plan-prd-validation.js} +8 -2
- package/engine/planning/prd-result-sidecar.js +190 -0
- package/engine/{prd-store.js → planning/prd-store.js} +17 -17
- package/engine/{project-discovery.js → planning/project-discovery.js} +5 -5
- package/engine/{projects.js → planning/projects.js} +10 -10
- package/engine/{resolve-area.js → planning/resolve-area.js} +1 -1
- package/engine/{work-item-validation.js → planning/work-item-validation.js} +39 -3
- package/engine/{work-items-store.js → planning/work-items-store.js} +29 -21
- package/engine/{keep-process-sweep.js → processes/keep-process-sweep.js} +57 -17
- package/engine/{managed-spawn-launcher.js → processes/managed-spawn-launcher.js} +3 -3
- package/engine/{managed-spawn.js → processes/managed-spawn.js} +97 -46
- package/engine/{process-utils.js → processes/process-utils.js} +599 -55
- package/engine/{abandoned-pr-reconciliation.js → providers/abandoned-pr-reconciliation.js} +17 -7
- package/engine/{comment-classifier.js → providers/comment-classifier.js} +85 -17
- package/engine/{comment-format.js → providers/comment-format.js} +5 -5
- package/engine/{gh-comment.js → providers/gh-comment.js} +15 -15
- package/engine/{gh-token.js → providers/gh-token.js} +4 -4
- package/engine/{github.js → providers/github.js} +131 -54
- package/engine/{pr-action.js → providers/pr-action.js} +13 -12
- package/engine/{pr-clone-keep.js → providers/pr-clone-keep.js} +7 -7
- package/engine/{pr-devbox.js → providers/pr-devbox.js} +6 -6
- package/engine/{pr-fix-target.js → providers/pr-fix-target.js} +13 -13
- package/engine/{pr-remote-patch.js → providers/pr-remote-patch.js} +4 -4
- package/engine/{pr-resolve.js → providers/pr-resolve.js} +7 -7
- package/engine/{pr-temp-clone.js → providers/pr-temp-clone.js} +5 -5
- package/engine/{pr-track.js → providers/pr-track.js} +11 -13
- package/engine/{shared-branch-pr-reconcile.js → providers/shared-branch-pr-reconcile.js} +4 -4
- package/engine/qa/auto-prd-qa.js +313 -0
- package/engine/{qa-from-prd.js → qa/from-prd.js} +42 -12
- package/engine/qa/prd-session.js +240 -0
- package/engine/{qa-process-validation.js → qa/process-validation.js} +14 -9
- package/engine/{qa-runbooks.js → qa/runbooks.js} +1 -1
- package/engine/{qa-runs.js → qa/runs.js} +286 -15
- package/engine/{qa-sessions.js → qa/sessions.js} +595 -49
- package/engine/qa/visual-journey.js +654 -0
- package/engine/{qa-runners.js → qa-runners/index.js} +7 -7
- package/engine/qa-runners/maestro.js +3 -3
- package/engine/qa-runners/playwright.js +2 -2
- package/engine/{restart-health.js → recovery/restart-health.js} +48 -4
- package/engine/recovery/stop-stack.js +607 -0
- package/engine/{supervisor.js → recovery/supervisor.js} +105 -175
- package/engine/{watchdog.js → recovery/watchdog.js} +136 -13
- package/engine/runtimes/claude.js +14 -12
- package/engine/runtimes/codex.js +8 -6
- package/engine/runtimes/copilot.js +17 -16
- package/engine/{watch-actions.js → watches/actions.js} +13 -13
- package/engine/{watches.js → watches/index.js} +43 -32
- package/engine/{watches-store.js → watches/store.js} +4 -4
- package/engine/{create-pr-worktree.js → worktrees/create-pr.js} +1 -1
- package/engine/{worktree-gc.js → worktrees/gc.js} +70 -22
- package/engine/worktrees/inventory.js +671 -0
- package/engine/{live-checkout.js → worktrees/live-checkout.js} +4 -4
- package/engine/{worktree-pool.js → worktrees/pool.js} +2 -2
- package/engine/{worktree-preflight.js → worktrees/preflight.js} +1 -0
- package/engine/worktrees/quarantine-refs.js +173 -0
- package/engine.js +1137 -208
- package/minions.js +147 -77
- package/package.json +10 -6
- package/playbooks/_pr-description-audit.md +110 -78
- package/playbooks/build-fix-complex.md +2 -0
- package/playbooks/fix.md +16 -12
- package/playbooks/implement-shared.md +2 -0
- package/playbooks/implement.md +19 -20
- package/playbooks/plan-to-prd.md +18 -3
- package/playbooks/qa-session-draft.md +136 -1
- package/playbooks/qa-session-execute.md +80 -2
- package/playbooks/qa-session-setup.md +17 -1
- package/playbooks/qa-validate.md +1 -1
- package/playbooks/setup.md +2 -0
- package/playbooks/shared-rules.md +25 -32
- package/playbooks/templates/followup-dispatch.md +4 -3
- package/playbooks/verify.md +1 -1
- package/prompts/cc-system.md +19 -27
- package/watch-plugins/README.md +92 -0
- package/watch-plugins/ado-author-prs.js +336 -0
- package/watch-plugins/gh-author-prs.js +375 -0
- package/watch-plugins/http.js +474 -0
- package/watch-plugins/teams-channel.js +869 -0
- package/docs/dev-composite-workflow.md +0 -101
- package/docs/pr-screenshots/pr-886/after-single-header.png +0 -0
- package/docs/pr-screenshots/pr-886/before-duplicate-header.png +0 -0
- package/docs/pr-screenshots/pr-895/01-cancellation-reason-detail.png +0 -0
- package/docs/pr-screenshots/pr-899/worker-pool-worktrees-AFTER.png +0 -0
- package/docs/pr-screenshots/pr-899/worker-pool-worktrees-BEFORE.png +0 -0
- package/docs/pr-screenshots/pr-901/projects-tab-default.png +0 -0
- package/docs/pr-screenshots/pr-901/projects-tab-fmf-selected.png +0 -0
- package/docs/pr-screenshots/pr-916/model-picker-AFTER-crop.png +0 -0
- package/docs/pr-screenshots/pr-916/model-picker-AFTER.png +0 -0
- package/docs/pr-screenshots/pr-916/model-picker-BEFORE-crop.png +0 -0
- package/docs/pr-screenshots/pr-916/model-picker-BEFORE.png +0 -0
- package/docs/pr-screenshots/pr-916/model-picker-dropdown-AFTER.png +0 -0
- package/docs/pr-screenshots/pr-979/auto-fix-pane-AFTER.png +0 -0
- package/docs/pr-screenshots/pr-979/auto-fix-pane-BEFORE.png +0 -0
- package/docs/pr-screenshots/pr-985/pr-column-em-dash-AFTER.png +0 -0
- package/docs/pr-screenshots/pr-985/pr-column-em-dash-BEFORE.png +0 -0
- package/docs/visual-evidence-ci.md +0 -103
- package/engine/bridge.js +0 -379
- package/engine/quarantine-refs.js +0 -103
- package/engine/state-operations.js +0 -178
- /package/engine/{steering-constraints.js → agents/steering-constraints.js} +0 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* engine/cloud/index.js — Cloud dispatch provider registry.
|
|
5
|
+
*
|
|
6
|
+
* Single resolution point for everything specific to a REMOTE coding agent
|
|
7
|
+
* (Agency, GitHub Copilot cloud, ADO work-item assignment). Engine code MUST
|
|
8
|
+
* go through `resolveCloudProvider()` — never `require('./providers/<id>')`
|
|
9
|
+
* — and MUST gate behavior on `provider.capabilities.*`, never on a provider
|
|
10
|
+
* id comparison. Same discipline as the runtime registry, different contract:
|
|
11
|
+
* see the header of `contract.js` for why cloud is not a runtime.
|
|
12
|
+
*
|
|
13
|
+
* Adding a provider:
|
|
14
|
+
* 1. Implement API version 1 from contract.js.
|
|
15
|
+
* 2. `registerCloudProvider('<id>', require('./providers/<id>'));`
|
|
16
|
+
* 3. Nothing else — resolution, config gating, and the dashboard listing
|
|
17
|
+
* pick it up from the registry.
|
|
18
|
+
*
|
|
19
|
+
* NOTE: no providers are registered yet. The registry ships empty on purpose
|
|
20
|
+
* so the surface, validation, and fail-closed gating land (and are tested)
|
|
21
|
+
* before any provider can dispatch real work anywhere.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
const contract = require('./contract');
|
|
25
|
+
|
|
26
|
+
const registry = new Map();
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Register a cloud provider. Always strict — unlike runtimes there is no
|
|
30
|
+
* legacy adapter generation to stay compatible with, so a provider either
|
|
31
|
+
* satisfies API version 1 or does not register at all.
|
|
32
|
+
*/
|
|
33
|
+
function registerCloudProvider(id, provider) {
|
|
34
|
+
const normalized = contract.normalizeCloudProvider(id, provider);
|
|
35
|
+
registry.set(id, normalized);
|
|
36
|
+
return normalized;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Names of every registered provider, sorted. Used by the dashboard and by
|
|
41
|
+
* error messages so an operator sees the real option list.
|
|
42
|
+
*/
|
|
43
|
+
function listCloudProviders() {
|
|
44
|
+
return Array.from(registry.keys()).sort();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Look up a provider by id. Throws (never falls back to a default) so a typo
|
|
49
|
+
* or an unbuilt provider surfaces immediately at dispatch time instead of
|
|
50
|
+
* silently routing work somewhere unintended.
|
|
51
|
+
*
|
|
52
|
+
* @throws {Error} with `code: 'CLOUD_PROVIDER_UNKNOWN'`
|
|
53
|
+
*/
|
|
54
|
+
function resolveCloudProvider(id) {
|
|
55
|
+
const key = typeof id === 'string' ? id.trim() : '';
|
|
56
|
+
const provider = key ? registry.get(key) : null;
|
|
57
|
+
if (!provider) {
|
|
58
|
+
const known = listCloudProviders();
|
|
59
|
+
const err = new Error(
|
|
60
|
+
`Unknown cloud provider "${key || String(id)}". `
|
|
61
|
+
+ (known.length
|
|
62
|
+
? `Registered providers: ${known.join(', ')}.`
|
|
63
|
+
: `No cloud providers are registered.`)
|
|
64
|
+
);
|
|
65
|
+
err.code = 'CLOUD_PROVIDER_UNKNOWN';
|
|
66
|
+
throw err;
|
|
67
|
+
}
|
|
68
|
+
return provider;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Resolve the provider id declared for a dispatch, most specific first:
|
|
73
|
+
* 1. `item.meta.cloudProvider` — per work item
|
|
74
|
+
* 2. `project.cloudProvider` — per project
|
|
75
|
+
* 3. `engine.cloudProvider` — fleet default
|
|
76
|
+
* Returns null when nothing is declared (the caller then fails the dispatch
|
|
77
|
+
* with CLOUD_PROVIDER_UNAVAILABLE rather than guessing a provider).
|
|
78
|
+
*/
|
|
79
|
+
function resolveCloudProviderId(item, project, engine) {
|
|
80
|
+
const fromItem = item && typeof item === 'object' && item.meta && typeof item.meta === 'object'
|
|
81
|
+
? item.meta.cloudProvider
|
|
82
|
+
: undefined;
|
|
83
|
+
const candidates = [fromItem, project?.cloudProvider, engine?.cloudProvider];
|
|
84
|
+
for (const candidate of candidates) {
|
|
85
|
+
if (typeof candidate === 'string' && candidate.trim()) return candidate.trim();
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Fail-closed pre-dispatch gate. Answers "can this work item actually be sent
|
|
92
|
+
* to a cloud provider right now?" without any network call.
|
|
93
|
+
*
|
|
94
|
+
* Every negative answer is STRUCTURAL — an unregistered id, no declared
|
|
95
|
+
* provider, or a provider that reports itself unconfigured for this project.
|
|
96
|
+
* Retrying reproduces it identically, which is why the caller maps this to the
|
|
97
|
+
* non-retryable FAILURE_CLASS.CLOUD_PROVIDER_UNAVAILABLE instead of burning
|
|
98
|
+
* the retry budget.
|
|
99
|
+
*
|
|
100
|
+
* A provider whose isConfigured() THROWS is treated as unavailable rather than
|
|
101
|
+
* allowed through: a provider that cannot answer the cheap question is not one
|
|
102
|
+
* we should hand a work item to.
|
|
103
|
+
*
|
|
104
|
+
* @returns {{ok: true, provider: object, id: string}
|
|
105
|
+
* |{ok: false, reason: string, id: string|null}}
|
|
106
|
+
*/
|
|
107
|
+
function resolveCloudDispatchTarget({ item, project, engine, config } = {}) {
|
|
108
|
+
const id = resolveCloudProviderId(item, project, engine);
|
|
109
|
+
if (!id) {
|
|
110
|
+
return {
|
|
111
|
+
ok: false,
|
|
112
|
+
id: null,
|
|
113
|
+
reason: 'no cloud provider is declared — set `meta.cloudProvider` on the work item, '
|
|
114
|
+
+ '`cloudProvider` on the project, or `engine.cloudProvider` as the fleet default',
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
let provider;
|
|
118
|
+
try {
|
|
119
|
+
provider = resolveCloudProvider(id);
|
|
120
|
+
} catch (err) {
|
|
121
|
+
return { ok: false, id, reason: err.message };
|
|
122
|
+
}
|
|
123
|
+
let configured = false;
|
|
124
|
+
try {
|
|
125
|
+
configured = provider.isConfigured({ config, project }) === true;
|
|
126
|
+
} catch (err) {
|
|
127
|
+
return {
|
|
128
|
+
ok: false,
|
|
129
|
+
id,
|
|
130
|
+
reason: `cloud provider "${id}" could not report its configuration state: ${err.message}`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
if (!configured) {
|
|
134
|
+
return {
|
|
135
|
+
ok: false,
|
|
136
|
+
id,
|
|
137
|
+
reason: `cloud provider "${id}" is not configured for project `
|
|
138
|
+
+ `"${project?.name || '(none)'}" (missing credentials, repo binding, or disabled in config)`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
return { ok: true, provider, id };
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
module.exports = {
|
|
145
|
+
CLOUD_PROVIDER_API_VERSION: contract.CLOUD_PROVIDER_API_VERSION,
|
|
146
|
+
CLOUD_SESSION_STATE: contract.CLOUD_SESSION_STATE,
|
|
147
|
+
CLOUD_SESSION_STATE_VALUES: contract.CLOUD_SESSION_STATE_VALUES,
|
|
148
|
+
isTerminalCloudSessionState: contract.isTerminalCloudSessionState,
|
|
149
|
+
normalizeSessionStatus: contract.normalizeSessionStatus,
|
|
150
|
+
normalizeCreatedSession: contract.normalizeCreatedSession,
|
|
151
|
+
validateCloudProvider: contract.normalizeCloudProvider,
|
|
152
|
+
registerCloudProvider,
|
|
153
|
+
resolveCloudProvider,
|
|
154
|
+
resolveCloudProviderId,
|
|
155
|
+
resolveCloudDispatchTarget,
|
|
156
|
+
listCloudProviders,
|
|
157
|
+
// Exposed for tests — engine code MUST go through resolveCloudProvider.
|
|
158
|
+
_registry: registry,
|
|
159
|
+
};
|
|
@@ -71,7 +71,7 @@ function runtimeDefaultModelLabel(runtime) {
|
|
|
71
71
|
/**
|
|
72
72
|
* A model id we can show verbatim. `auto` is a request for the runtime to pick,
|
|
73
73
|
* not a concrete model — mirrors buildRuntimeModelEvidence's treatment in
|
|
74
|
-
* engine/queries.js.
|
|
74
|
+
* engine/core/queries.js.
|
|
75
75
|
*/
|
|
76
76
|
function concreteExecutionModel(value) {
|
|
77
77
|
const model = normalizeExecutionModel(value);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* engine/features.js — Feature flag registry. Recipe in CLAUDE.md → "Feature Flags".
|
|
2
|
+
* engine/core/features.js — Feature flag registry. Recipe in CLAUDE.md → "Feature Flags".
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
// Entry shape: id → { description, default: bool, addedIn?: version, expires?: ISO-date, requiredCcRuntime?: string }
|
|
@@ -45,7 +45,7 @@ const FEATURES = {
|
|
|
45
45
|
expires: '2026-11-01',
|
|
46
46
|
},
|
|
47
47
|
// ccUseWorkerPool — sub-tasks B/C/D of W-mp2w003600196c51 (CC perf).
|
|
48
|
-
// Routes Command Center / doc-chat through engine/cc-worker-pool.js
|
|
48
|
+
// Routes Command Center / doc-chat through engine/agents/cc-worker-pool.js
|
|
49
49
|
// (persistent `copilot --acp` per CC tab) instead of spawning a fresh CLI
|
|
50
50
|
// per turn. Saves ~14 s of cold-start cost.
|
|
51
51
|
//
|
|
@@ -59,7 +59,7 @@ const FEATURES = {
|
|
|
59
59
|
// which now refuses the override when CC runtime is not copilot
|
|
60
60
|
// (W-mphlriic00095f69).
|
|
61
61
|
//
|
|
62
|
-
// Resolution: `shared.resolveCcUseWorkerPool(engine)` (engine/shared.js)
|
|
62
|
+
// Resolution: `shared.resolveCcUseWorkerPool(engine)` (engine/core/shared.js)
|
|
63
63
|
// is the canonical predicate every dashboard.js call site uses. Explicit
|
|
64
64
|
// `engine.ccUseWorkerPool` true/false in config wins ONLY when CC runtime
|
|
65
65
|
// is copilot; otherwise the helper forces `false`. PR #2492 flipped the
|
|
@@ -122,7 +122,7 @@ function readEnvOverride(id) {
|
|
|
122
122
|
|
|
123
123
|
function isFeatureOn(id, config, registry = FEATURES) {
|
|
124
124
|
if (!Object.prototype.hasOwnProperty.call(registry, id)) {
|
|
125
|
-
throw new Error(`Unknown feature flag: "${id}". Register it in engine/features.js.`);
|
|
125
|
+
throw new Error(`Unknown feature flag: "${id}". Register it in engine/core/features.js.`);
|
|
126
126
|
}
|
|
127
127
|
const env = readEnvOverride(id);
|
|
128
128
|
if (env !== undefined) return env;
|