@iowarp/clio-coder 0.3.6 → 0.3.7
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/CHANGELOG.md +28 -0
- package/README.md +16 -5
- package/dist/{acp-2BEHC4DL.js → acp-SK4MD6MM.js} +10 -10
- package/dist/{agents-LNNFTM53.js → agents-2FN2K6ME.js} +30 -25
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-KXXFI2VS.js → auth-QIYZWM5I.js} +13 -13
- package/dist/{chunk-KHSFENX2.js → chunk-3HAPLH5M.js} +10 -10
- package/dist/{chunk-24I7BN55.js → chunk-465YSENW.js} +2 -2
- package/dist/{chunk-4OC57DA6.js → chunk-4DGYLA73.js} +53 -2
- package/dist/{chunk-CYQKWTG3.js → chunk-4DWFMQDR.js} +4 -4
- package/dist/{chunk-E2ER4LJF.js → chunk-5C3AQNDW.js} +25 -1
- package/dist/{chunk-22NAGB7X.js → chunk-5C77SEEY.js} +5 -94
- package/dist/{chunk-43AOLP7E.js → chunk-5FR74PWO.js} +2 -1
- package/dist/{chunk-K7T3E2SR.js → chunk-5UJ6ECTS.js} +10 -9
- package/dist/{chunk-6US73PDB.js → chunk-6M7VS3J3.js} +5 -5
- package/dist/{chunk-CJUB2JJ2.js → chunk-6TUKSZVF.js} +5 -5
- package/dist/{chunk-5JGRAMKL.js → chunk-AB4XIIVB.js} +8 -6
- package/dist/{chunk-R46L2BIR.js → chunk-BMWK7ZIZ.js} +14 -20
- package/dist/{chunk-4BPJXDWC.js → chunk-C4JBQ5SR.js} +30 -14
- package/dist/{chunk-XXQNGV4M.js → chunk-CEYBNUGC.js} +243 -63
- package/dist/{chunk-VEZEGCGW.js → chunk-D4MDIG46.js} +20 -18
- package/dist/chunk-DJNLUABN.js +843 -0
- package/dist/{chunk-RY3LY4J5.js → chunk-DMD2AGVS.js} +5 -4
- package/dist/{chunk-KOHPCX4K.js → chunk-DOOEX22V.js} +2 -2
- package/dist/chunk-DQA7QLMD.js +123 -0
- package/dist/chunk-DR52UMZW.js +21 -0
- package/dist/{chunk-XF5N4U5A.js → chunk-EBEFWSGL.js} +6 -5
- package/dist/{chunk-EYPA3EGJ.js → chunk-EELBMBT6.js} +120 -13
- package/dist/{chunk-CKXWIANG.js → chunk-EOOQZZDE.js} +16 -14
- package/dist/{chunk-WR67VIZY.js → chunk-FOT2FX5J.js} +63 -5
- package/dist/{chunk-FYYLNIL5.js → chunk-GH5622CP.js} +2 -2
- package/dist/chunk-GWS3VEIW.js +195 -0
- package/dist/{chunk-LYF7OHWH.js → chunk-J7PIKKWC.js} +8 -463
- package/dist/{chunk-NILBFAPG.js → chunk-JNXPYBB4.js} +2 -2
- package/dist/{chunk-4VP4KH3K.js → chunk-JRIO5UD2.js} +4 -4
- package/dist/{chunk-6XXKFVSN.js → chunk-JTSEDYVQ.js} +7 -7
- package/dist/{chunk-QKMUKYO7.js → chunk-KCMKRQX4.js} +236 -84
- package/dist/chunk-KZ2H5X4G.js +1026 -0
- package/dist/{chunk-QNQHSOLF.js → chunk-LADCF22A.js} +12 -12
- package/dist/chunk-M4AKACEO.js +382 -0
- package/dist/{chunk-XYDYPRZI.js → chunk-MXI6J5JF.js} +7 -7
- package/dist/{chunk-G7MUEIGA.js → chunk-OB5HIGJY.js} +1 -1
- package/dist/{chunk-EKY57CSP.js → chunk-OBMAI2DP.js} +61 -767
- package/dist/chunk-PD3MESLB.js +242 -0
- package/dist/{chunk-ZRGEBJ4T.js → chunk-QCTRSGHQ.js} +21 -21
- package/dist/chunk-RVG5JXAL.js +41 -0
- package/dist/{chunk-RD5U66HV.js → chunk-SROCI7ZU.js} +7 -7
- package/dist/{chunk-MFFY33HR.js → chunk-THKY7CD7.js} +466 -205
- package/dist/{chunk-PCZJO5TI.js → chunk-UFQ3F4FW.js} +13 -178
- package/dist/{chunk-AD2SYQYC.js → chunk-UHXRNZ2J.js} +121 -3
- package/dist/chunk-UND3GU2L.js +103 -0
- package/dist/{chunk-QM3F2GKX.js → chunk-UUANF5CR.js} +2247 -2096
- package/dist/chunk-UVDSQ6LW.js +472 -0
- package/dist/{chunk-DJVECN66.js → chunk-VQNODYQ4.js} +14 -14
- package/dist/{chunk-3BPUFZDL.js → chunk-VREKEFLL.js} +3 -3
- package/dist/{chunk-PBTHKCPN.js → chunk-WJHBC77E.js} +6 -6
- package/dist/{chunk-XE2VEJHX.js → chunk-X2KV5FXT.js} +2 -2
- package/dist/{chunk-ZXF4XRKW.js → chunk-XEGB6BCN.js} +157 -7
- package/dist/{chunk-E25LMLRW.js → chunk-YD734TPH.js} +2 -2
- package/dist/{verifiers-NCBTHHN2.js → chunk-YTYFXUI3.js} +65 -322
- package/dist/{chunk-OH3TOQTB.js → chunk-ZGH7FGS5.js} +13 -7
- package/dist/cli/index.js +32 -30
- package/dist/{clio-M2KGYUFZ.js → clio-WBVQEBKO.js} +7 -7
- package/dist/{code-nav-GQNL7XA6.js → code-nav-FGGFIE7L.js} +3 -3
- package/dist/{components-5TTYYX6G.js → components-F7OEATSO.js} +4 -4
- package/dist/{config-XUUYQIWO.js → config-TRBL3RCF.js} +34 -29
- package/dist/{configure-IHJ7YOMV.js → configure-OLCVPHNM.js} +15 -15
- package/dist/{context-74JLXAWD.js → context-MJIJ6GOX.js} +11 -11
- package/dist/{context-ZQ7SIFJV.js → context-WFPKQSM6.js} +19 -3
- package/dist/{context-75MIWW3U.js → context-XEWE3MOJ.js} +31 -26
- package/dist/{context-clear-GYKWNUML.js → context-clear-KNOS2JPB.js} +31 -26
- package/dist/{context-working-set-UX5KEP4J.js → context-working-set-EUXAZI6N.js} +8 -8
- package/dist/{dispatch-runner-GIJBHNFL.js → dispatch-runner-B7MTOVKL.js} +313 -53
- package/dist/{docs-6FZSCG5B.js → docs-FLJTIDSE.js} +4 -4
- package/dist/{doctor-SVJ5BZCW.js → doctor-RN4YKO2X.js} +14 -14
- package/dist/{eval-CG6LLBLD.js → eval-RUBJVSNQ.js} +8 -7
- package/dist/{evidence-ZYFIEN42.js → evidence-JZNBUOQZ.js} +30 -25
- package/dist/{evolve-QGEXEMDW.js → evolve-FJVC4KKI.js} +30 -25
- package/dist/{extensions-ADGNCJJD.js → extensions-IQL36S7K.js} +4 -4
- package/dist/{fleet-S5R4ZOQY.js → fleet-BDKYJFCP.js} +214 -360
- package/dist/fleet-commands-ZFIWZSB3.js +70 -0
- package/dist/fleet-graph-Y6HPXIVF.js +125 -0
- package/dist/fleet-new-RDVJLHHH.js +48 -0
- package/dist/fleet-validate-BIYREGIK.js +79 -0
- package/dist/{init-5DRU55YR.js → init-LQUB5COQ.js} +44 -37
- package/dist/library-NJAHIGG4.js +217 -0
- package/dist/{memory-7YKKR6UC.js → memory-OG6HOYKM.js} +31 -26
- package/dist/{models-ZPOLRU2C.js → models-5ZG5XY7J.js} +21 -20
- package/dist/{monitor-US5F5YGZ.js → monitor-TJ7AMTGB.js} +49 -30
- package/dist/{orchestrator-E2AL4T5N.js → orchestrator-WZYB54DM.js} +3827 -581
- package/dist/{paths-E7KYAQWE.js → paths-XUC7GS6E.js} +4 -4
- package/dist/{reset-KZ652EK6.js → reset-PXQT45IY.js} +7 -7
- package/dist/{run-SRNBKDWD.js → run-FQ74YF62.js} +53 -45
- package/dist/{share-CGZE33UP.js → share-FW7SVCL3.js} +33 -9
- package/dist/{skills-S2X4DLY5.js → skills-7E7IRB3R.js} +24 -8
- package/dist/{skills-eval-W2GGIC4R.js → skills-eval-LI75W6OK.js} +34 -27
- package/dist/{targets-54SWINWB.js → targets-4CIFKCTW.js} +23 -22
- package/dist/{terminal-lease-SAIF2OGY.js → terminal-lease-WUZY7ZV5.js} +4 -4
- package/dist/{uninstall-BVLWXKBT.js → uninstall-7FV7IP4E.js} +4 -4
- package/dist/{upgrade-JKAR27XC.js → upgrade-K2HVIVMQ.js} +20 -19
- package/dist/{usage-MSAWCLX4.js → usage-GTZELZQX.js} +116 -49
- package/dist/verifiers-RLAHT27O.js +336 -0
- package/dist/{verify-X5HDROLA.js → verify-BX3BRKH5.js} +7 -6
- package/dist/{wiki-generate-GUSOQ6ZP.js → wiki-generate-ASIFASCN.js} +45 -37
- package/dist/worker/entry.js +38 -35
- package/docs/README.md +3 -2
- package/docs/acp.md +1 -1
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-versions.md +10 -6
- package/docs/built-in-agents.md +26 -2
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +82 -2
- package/docs/configuration-and-targets.md +79 -2
- package/docs/context-engine.md +1 -1
- package/docs/development-pipeline.md +1 -1
- package/docs/dispatch-architecture-rationale.md +1 -1
- package/docs/documentation-coverage.md +3 -3
- package/docs/documentation-guide.md +3 -3
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +5 -5
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +4 -1
- package/docs/extensions-and-sharing.md +6 -2
- package/docs/fleet-demo-runbook.md +2 -2
- package/docs/fleet-dispatch.md +197 -10
- package/docs/git-commit-provenance.md +2 -2
- package/docs/glossary.md +1 -1
- package/docs/installation-and-lifecycle.md +2 -2
- package/docs/middleware-and-components.md +2 -1
- package/docs/model-catalog.md +1 -1
- package/docs/observability.md +55 -8
- package/docs/proactive-memory.md +1 -1
- package/docs/prompt-envelope-and-tools.md +1 -1
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +79 -64
- package/docs/resource-library.md +59 -0
- package/docs/safety-model.md +2 -2
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +37 -1
- package/docs/skills-marketplace.md +16 -3
- package/docs/tool-usage.md +14 -7
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +1 -1
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.md +3 -3
- package/package.json +1 -1
- package/src/cli/fleet-commands.ts +37 -0
- package/src/cli/fleet-graph.ts +102 -0
- package/src/cli/fleet-new.ts +36 -0
- package/src/cli/fleet-preflight.ts +121 -0
- package/src/cli/fleet-validate.ts +30 -0
- package/src/cli/fleet.ts +173 -335
- package/src/cli/index.ts +3 -1
- package/src/cli/library.ts +190 -0
- package/src/cli/share.ts +13 -1
- package/src/cli/usage.ts +111 -19
- package/src/core/bus-events.ts +4 -0
- package/src/core/commit-attribution.ts +4 -4
- package/src/core/config.ts +130 -0
- package/src/core/defaults.ts +81 -0
- package/src/domains/agents/builtins/architect.md +1 -0
- package/src/domains/agents/builtins/oracle.md +33 -0
- package/src/domains/agents/catalog.ts +13 -1
- package/src/domains/agents/fleet-contract.ts +278 -16
- package/src/domains/agents/index.ts +14 -0
- package/src/domains/agents/result-contract.ts +235 -1
- package/src/domains/config/classify.ts +4 -0
- package/src/domains/dispatch/active-route-planner.ts +14 -0
- package/src/domains/dispatch/backoff.ts +2 -1
- package/src/domains/dispatch/capability-match.ts +1 -0
- package/src/domains/dispatch/checkout-writer-lease.ts +175 -0
- package/src/domains/dispatch/contract.ts +34 -0
- package/src/domains/dispatch/delegation-plan.ts +167 -0
- package/src/domains/dispatch/execution-plan.ts +76 -5
- package/src/domains/dispatch/execution-role.ts +3 -1
- package/src/domains/dispatch/execution-scheduler.ts +183 -67
- package/src/domains/dispatch/extension.ts +258 -9
- package/src/domains/dispatch/fleet-gate.ts +14 -0
- package/src/domains/dispatch/fleet-plan.ts +63 -3
- package/src/domains/dispatch/fleet-run.ts +737 -0
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/host-verification.ts +178 -0
- package/src/domains/dispatch/index.ts +38 -0
- package/src/domains/dispatch/intent.ts +159 -0
- package/src/domains/dispatch/receipt-integrity.ts +8 -4
- package/src/domains/dispatch/state.ts +36 -3
- package/src/domains/dispatch/types.ts +51 -6
- package/src/domains/dispatch/validation.ts +66 -6
- package/src/domains/evidence/trust-status.ts +10 -1
- package/src/domains/middleware/index.ts +15 -0
- package/src/domains/middleware/watchdog.ts +281 -0
- package/src/domains/observability/contract.ts +3 -1
- package/src/domains/observability/cost.ts +12 -1
- package/src/domains/observability/extension.ts +2 -2
- package/src/domains/observability/index.ts +10 -0
- package/src/domains/observability/out-of-turn-usage.ts +223 -0
- package/src/domains/resources/index.ts +20 -0
- package/src/domains/resources/library.ts +326 -0
- package/src/domains/resources/skills/marketplace.ts +37 -12
- package/src/domains/session/handoff.ts +629 -0
- package/src/domains/share/archive.ts +67 -2
- package/src/entry/orchestrator.ts +37 -0
- package/src/interactive/bus-notices.ts +26 -0
- package/src/interactive/chat-loop.ts +235 -1
- package/src/interactive/chat-renderer.ts +22 -0
- package/src/interactive/cost-overlay.ts +31 -3
- package/src/interactive/council-dispatch.ts +30 -0
- package/src/interactive/council-grid.ts +213 -0
- package/src/interactive/council.ts +99 -0
- package/src/interactive/dispatch-board.ts +260 -16
- package/src/interactive/fleet-run-preview.ts +307 -0
- package/src/interactive/footer/notifications.ts +219 -0
- package/src/interactive/handoff-round.ts +56 -0
- package/src/interactive/interactive-application.ts +43 -1
- package/src/interactive/interactive-event-projection.ts +9 -1
- package/src/interactive/interactive-slash-runtime.ts +52 -2
- package/src/interactive/interactive-subscriptions.ts +14 -2
- package/src/interactive/oracle.ts +179 -0
- package/src/interactive/overlay-ask-user-lifecycle.ts +6 -0
- package/src/interactive/overlay-general-openers.ts +190 -1
- package/src/interactive/overlay-key-routing.ts +17 -1
- package/src/interactive/overlay-lifecycle.ts +41 -1
- package/src/interactive/overlay-permission-lifecycle.ts +10 -0
- package/src/interactive/overlay-resource-openers.ts +11 -3
- package/src/interactive/overlay-session-lifecycle.ts +234 -2
- package/src/interactive/overlays/fleet-run-approval.ts +208 -0
- package/src/interactive/overlays/handoff-review.ts +185 -0
- package/src/interactive/overlays/library-install-confirm.ts +151 -0
- package/src/interactive/overlays/list-overlay.ts +168 -2
- package/src/interactive/overlays/settings.ts +101 -4
- package/src/interactive/overlays/side-question.ts +139 -0
- package/src/interactive/overlays/skills-hub.ts +401 -15
- package/src/interactive/side-question.ts +171 -0
- package/src/interactive/slash-commands.ts +432 -5
- package/src/interactive/slash-spec.ts +19 -6
- package/src/interactive/theme/tokens.ts +30 -0
- package/src/interactive/turn-middleware.ts +15 -1
- package/src/interactive/watchdog-run.ts +75 -0
- package/src/interactive/worker-share.ts +56 -1
- package/src/interactive/worker-stream.ts +7 -0
- package/src/tools/bootstrap.ts +3 -0
- package/src/tools/compete-worktrees.ts +13 -79
- package/src/tools/dispatch-admission.ts +242 -8
- package/src/tools/dispatch-arguments.ts +57 -1
- package/src/tools/dispatch-plan.ts +136 -6
- package/src/tools/dispatch-runner.ts +319 -13
- package/src/tools/dispatch-types.ts +20 -1
- package/src/tools/dispatch.ts +72 -2
- package/src/tools/monitor.ts +16 -0
- package/src/tools/profiles.ts +18 -4
- package/src/tools/task-worktree.ts +238 -0
- package/src/tools/verify/authoring.ts +61 -1
- package/src/tools/verify/scripts.ts +62 -0
- package/src/tools/worker-evidence.ts +2 -1
- package/src/worker/spec-contract.ts +1 -0
- package/dist/chunk-HC4CLZ2Y.js +0 -68
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
fingerprintNativeRuntime,
|
|
8
8
|
interopProposals,
|
|
9
9
|
renderProposalEntry
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-SROCI7ZU.js";
|
|
11
11
|
import {
|
|
12
12
|
initializeClioHome
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-DOOEX22V.js";
|
|
14
14
|
import {
|
|
15
15
|
createDelayedManualCodeInput,
|
|
16
16
|
promptOAuthSelection
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
import {
|
|
26
26
|
credentialWriteFailed,
|
|
27
27
|
printPlaintextCredentialWarning
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-465YSENW.js";
|
|
29
29
|
import {
|
|
30
30
|
printError,
|
|
31
31
|
printOk
|
|
@@ -44,20 +44,20 @@ import {
|
|
|
44
44
|
probeCapabilitiesForModel,
|
|
45
45
|
registerBuiltinRuntimes,
|
|
46
46
|
supportGroupLabel
|
|
47
|
-
} from "./chunk-
|
|
48
|
-
import {
|
|
49
|
-
readSettings,
|
|
50
|
-
removeTargetFromSettings,
|
|
51
|
-
settingsPath,
|
|
52
|
-
updateSettings
|
|
53
|
-
} from "./chunk-AD2SYQYC.js";
|
|
47
|
+
} from "./chunk-VQNODYQ4.js";
|
|
54
48
|
import {
|
|
55
49
|
openAuthStorage,
|
|
56
50
|
registerClioOAuthProviders,
|
|
57
51
|
resolveAuthTarget,
|
|
58
52
|
resolveRuntimeAuthTarget,
|
|
59
53
|
targetRequiresAuth
|
|
60
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-JRIO5UD2.js";
|
|
55
|
+
import {
|
|
56
|
+
readSettings,
|
|
57
|
+
removeTargetFromSettings,
|
|
58
|
+
settingsPath,
|
|
59
|
+
updateSettings
|
|
60
|
+
} from "./chunk-UHXRNZ2J.js";
|
|
61
61
|
import {
|
|
62
62
|
init_esm_shims
|
|
63
63
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -1489,4 +1489,4 @@ export {
|
|
|
1489
1489
|
runTargetRename,
|
|
1490
1490
|
runConfigureCommand
|
|
1491
1491
|
};
|
|
1492
|
-
//# sourceMappingURL=chunk-
|
|
1492
|
+
//# sourceMappingURL=chunk-LADCF22A.js.map
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
fleetLoopCheckStepId,
|
|
4
|
+
fleetLoopRepairStepId,
|
|
5
|
+
fleetStepWriteBoundary
|
|
6
|
+
} from "./chunk-KCMKRQX4.js";
|
|
7
|
+
import {
|
|
8
|
+
init_esm_shims
|
|
9
|
+
} from "./chunk-3R73A4XB.js";
|
|
10
|
+
|
|
11
|
+
// src/domains/dispatch/execution-plan.ts
|
|
12
|
+
init_esm_shims();
|
|
13
|
+
import { createHash } from "node:crypto";
|
|
14
|
+
function requireAgentSteps(steps) {
|
|
15
|
+
return steps.map((step) => {
|
|
16
|
+
if (step.kind === "code") throw new Error(`execution plan: step '${step.id}' is a code step and has no route`);
|
|
17
|
+
return step;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function canonicalSteps(steps) {
|
|
21
|
+
return steps.map(
|
|
22
|
+
(step) => step.kind === "code" ? { ...step, kind: "code", dependencies: [...step.dependencies].sort() } : { ...step, kind: "agent", dependencies: [...step.dependencies].sort() }
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
function executionPlanWaves(steps, maxWorkers) {
|
|
26
|
+
if (!Number.isInteger(maxWorkers) || maxWorkers < 1)
|
|
27
|
+
throw new Error("execution plan: maxWorkers must be a positive integer");
|
|
28
|
+
if (steps.length === 0) throw new Error("execution plan: plan must contain at least one step");
|
|
29
|
+
const ids = /* @__PURE__ */ new Set();
|
|
30
|
+
for (const step of steps) {
|
|
31
|
+
if (step.id.trim().length === 0) throw new Error("execution plan: step id must be non-empty");
|
|
32
|
+
if (ids.has(step.id)) throw new Error(`execution plan: duplicate step id '${step.id}'`);
|
|
33
|
+
ids.add(step.id);
|
|
34
|
+
}
|
|
35
|
+
for (const step of steps)
|
|
36
|
+
for (const dependency of step.dependencies) {
|
|
37
|
+
if (!ids.has(dependency))
|
|
38
|
+
throw new Error(`execution plan: step '${step.id}' has missing dependency '${dependency}'`);
|
|
39
|
+
if (dependency === step.id) throw new Error(`execution plan: cycle includes '${step.id}'`);
|
|
40
|
+
}
|
|
41
|
+
const remaining = new Set(steps.map((step) => step.id));
|
|
42
|
+
const completed = /* @__PURE__ */ new Set();
|
|
43
|
+
const waves = [];
|
|
44
|
+
while (remaining.size > 0) {
|
|
45
|
+
const ready = steps.filter((step) => remaining.has(step.id) && step.dependencies.every((id) => completed.has(id)));
|
|
46
|
+
if (ready.length === 0) throw new Error("execution plan: dependency cycle detected");
|
|
47
|
+
const codeReady = ready.filter((step) => step.kind === "code").map((step) => step.id);
|
|
48
|
+
const agentReady = ready.filter((step) => step.kind !== "code").map((step) => step.id);
|
|
49
|
+
const chunks = [];
|
|
50
|
+
for (let offset = 0; offset < agentReady.length; offset += maxWorkers) {
|
|
51
|
+
chunks.push(agentReady.slice(offset, offset + maxWorkers));
|
|
52
|
+
}
|
|
53
|
+
if (chunks.length === 0) chunks.push([]);
|
|
54
|
+
chunks[0] = [...codeReady, ...chunks[0] ?? []];
|
|
55
|
+
for (const wave of chunks) {
|
|
56
|
+
waves.push(wave);
|
|
57
|
+
for (const id of wave) {
|
|
58
|
+
remaining.delete(id);
|
|
59
|
+
completed.add(id);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return waves;
|
|
64
|
+
}
|
|
65
|
+
function checkLoops(steps, loops) {
|
|
66
|
+
const byId = new Map(steps.map((step) => [step.id, step]));
|
|
67
|
+
const seen = /* @__PURE__ */ new Set();
|
|
68
|
+
for (const loop of loops) {
|
|
69
|
+
if (seen.has(loop.id)) throw new Error(`execution plan: duplicate loop id '${loop.id}'`);
|
|
70
|
+
seen.add(loop.id);
|
|
71
|
+
if (!Number.isInteger(loop.maxAttempts) || loop.maxAttempts < 1) {
|
|
72
|
+
throw new Error(`execution plan: loop '${loop.id}' must declare a positive attempt bound`);
|
|
73
|
+
}
|
|
74
|
+
if (loop.checkStepIds.length !== loop.maxAttempts || loop.repairStepIds.length !== loop.maxAttempts - 1) {
|
|
75
|
+
throw new Error(`execution plan: loop '${loop.id}' membership does not match its bound of ${loop.maxAttempts}`);
|
|
76
|
+
}
|
|
77
|
+
for (const id of [...loop.checkStepIds, ...loop.repairStepIds]) {
|
|
78
|
+
const step = byId.get(id);
|
|
79
|
+
if (step === void 0) throw new Error(`execution plan: loop '${loop.id}' names unknown step '${id}'`);
|
|
80
|
+
if (step.loop?.loopId !== loop.id) {
|
|
81
|
+
throw new Error(`execution plan: step '${id}' is not a member of loop '${loop.id}'`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
for (const step of steps) {
|
|
86
|
+
if (step.loop !== void 0 && !seen.has(step.loop.loopId)) {
|
|
87
|
+
throw new Error(`execution plan: step '${step.id}' belongs to undeclared loop '${step.loop.loopId}'`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function checkWriteBoundaryWaves(steps, waves, writerLimit) {
|
|
92
|
+
const byId = new Map(steps.map((step) => [step.id, step]));
|
|
93
|
+
for (const [index, wave] of waves.entries()) {
|
|
94
|
+
const members = wave.flatMap((id) => {
|
|
95
|
+
const step = byId.get(id);
|
|
96
|
+
return step === void 0 ? [] : [step];
|
|
97
|
+
});
|
|
98
|
+
const declared = members.filter((step) => step.writes !== void 0);
|
|
99
|
+
if (declared.length === 0) continue;
|
|
100
|
+
const undeclared = members.filter((step) => step.writes === void 0);
|
|
101
|
+
if (undeclared.length > 0 && writerLimit !== 1) {
|
|
102
|
+
throw new Error(
|
|
103
|
+
`execution plan: wave ${index} mixes boundary-enforced steps (${declared.map((step) => step.id).join(", ")}) with steps that declare no boundary (${undeclared.map((step) => step.id).join(", ")}); they share one checkout, so the undeclared step's writes cannot be told from a violation`
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
const writers = declared.filter((step) => (step.writes?.length ?? 0) > 0);
|
|
107
|
+
if (writers.length > 1 && writerLimit !== 1) {
|
|
108
|
+
throw new Error(
|
|
109
|
+
`execution plan: wave ${index} schedules ${writers.length} steps that may write (${writers.map((step) => step.id).join(
|
|
110
|
+
", "
|
|
111
|
+
)}); a write boundary is verified by diffing one shared checkout, so concurrent writers cannot be attributed. Order them with dependencies or lower maxWorkers`
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function compileExecutionPlan(input) {
|
|
117
|
+
if (input.writers !== void 0 && input.writers !== 1) {
|
|
118
|
+
throw new Error("execution plan: writers must be 1 when present");
|
|
119
|
+
}
|
|
120
|
+
const steps = canonicalSteps(input.steps);
|
|
121
|
+
const loops = (input.loops ?? []).map((loop) => ({
|
|
122
|
+
...loop,
|
|
123
|
+
checkStepIds: [...loop.checkStepIds],
|
|
124
|
+
repairStepIds: [...loop.repairStepIds]
|
|
125
|
+
}));
|
|
126
|
+
checkLoops(steps, loops);
|
|
127
|
+
const waves = executionPlanWaves(steps, input.maxWorkers);
|
|
128
|
+
checkWriteBoundaryWaves(steps, waves, input.writers);
|
|
129
|
+
const canonical = {
|
|
130
|
+
version: 4,
|
|
131
|
+
topology: input.topology,
|
|
132
|
+
rootTask: input.rootTask,
|
|
133
|
+
maxWorkers: input.maxWorkers,
|
|
134
|
+
...input.writers === 1 ? { writers: 1 } : {},
|
|
135
|
+
onFailure: input.onFailure,
|
|
136
|
+
steps,
|
|
137
|
+
loops,
|
|
138
|
+
waves
|
|
139
|
+
};
|
|
140
|
+
return { ...canonical, hash: createHash("sha256").update(JSON.stringify(canonical)).digest("hex") };
|
|
141
|
+
}
|
|
142
|
+
function executionPlanAncestors(plan, stepId) {
|
|
143
|
+
const byId = new Map(plan.steps.map((step) => [step.id, step]));
|
|
144
|
+
const ancestors = /* @__PURE__ */ new Set();
|
|
145
|
+
const pending = [...byId.get(stepId)?.dependencies ?? []];
|
|
146
|
+
while (pending.length > 0) {
|
|
147
|
+
const next = pending.pop();
|
|
148
|
+
if (next === void 0 || ancestors.has(next)) continue;
|
|
149
|
+
ancestors.add(next);
|
|
150
|
+
pending.push(...byId.get(next)?.dependencies ?? []);
|
|
151
|
+
}
|
|
152
|
+
return ancestors;
|
|
153
|
+
}
|
|
154
|
+
function spliceExecutionPlan(plan, parentId, tasks) {
|
|
155
|
+
const parent = plan.steps.find((step) => step.id === parentId);
|
|
156
|
+
if (parent?.kind !== "agent" || parent.plan === void 0) {
|
|
157
|
+
throw new Error(`execution plan: '${parentId}' is not a plan step`);
|
|
158
|
+
}
|
|
159
|
+
const inserted = tasks.map((task) => ({
|
|
160
|
+
kind: "agent",
|
|
161
|
+
id: task.id,
|
|
162
|
+
agentId: task.agentId,
|
|
163
|
+
executionRole: task.executionRole,
|
|
164
|
+
scope: task.writes.length > 0 ? "workspace" : "readonly",
|
|
165
|
+
expectedResultContract: task.expectedResultContract,
|
|
166
|
+
requestedAuthority: task.requestedAuthority,
|
|
167
|
+
approvedAuthority: task.approvedAuthority,
|
|
168
|
+
dependencies: [parentId, ...task.dependencies],
|
|
169
|
+
task: task.task,
|
|
170
|
+
writes: [...task.writes],
|
|
171
|
+
...task.target !== void 0 ? { target: task.target } : {},
|
|
172
|
+
...task.profile !== void 0 ? { profile: task.profile } : {},
|
|
173
|
+
planParentId: parentId
|
|
174
|
+
}));
|
|
175
|
+
return compileExecutionPlan({
|
|
176
|
+
topology: plan.topology,
|
|
177
|
+
rootTask: plan.rootTask,
|
|
178
|
+
maxWorkers: plan.maxWorkers,
|
|
179
|
+
...plan.writers === 1 ? { writers: 1 } : {},
|
|
180
|
+
onFailure: plan.onFailure,
|
|
181
|
+
steps: [...plan.steps, ...inserted],
|
|
182
|
+
loops: plan.loops
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// src/domains/dispatch/fleet-plan.ts
|
|
187
|
+
init_esm_shims();
|
|
188
|
+
function expandDependencies(dependencies, loopMembers) {
|
|
189
|
+
return dependencies.flatMap((id) => {
|
|
190
|
+
const loop = loopMembers.get(id);
|
|
191
|
+
return loop === void 0 ? [id] : [...loop.checkStepIds];
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
function expandCommitSources(sources, loopMembers) {
|
|
195
|
+
return sources.flatMap((id) => {
|
|
196
|
+
const loop = loopMembers.get(id);
|
|
197
|
+
return loop === void 0 ? [id] : [...loop.repairStepIds].reverse();
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
function declaredLoops(steps) {
|
|
201
|
+
const loops = /* @__PURE__ */ new Map();
|
|
202
|
+
for (const step of steps) {
|
|
203
|
+
if (step.kind !== "loop") continue;
|
|
204
|
+
const checkStepIds = [];
|
|
205
|
+
const repairStepIds = [];
|
|
206
|
+
for (let attempt = 1; attempt <= step.maxAttempts; attempt++) {
|
|
207
|
+
checkStepIds.push(fleetLoopCheckStepId(step.id, attempt));
|
|
208
|
+
if (attempt < step.maxAttempts) repairStepIds.push(fleetLoopRepairStepId(step.id, attempt));
|
|
209
|
+
}
|
|
210
|
+
loops.set(step.id, {
|
|
211
|
+
id: step.id,
|
|
212
|
+
checkKind: step.check.kind === "gate" ? "code" : step.check.kind,
|
|
213
|
+
maxAttempts: step.maxAttempts,
|
|
214
|
+
checkStepIds,
|
|
215
|
+
repairStepIds
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return loops;
|
|
219
|
+
}
|
|
220
|
+
function compileFleetExecutionPlan(input) {
|
|
221
|
+
const { contract, task, resolveAgent } = input;
|
|
222
|
+
const loops = declaredLoops(contract.steps);
|
|
223
|
+
const steps = [];
|
|
224
|
+
const boundary = (scope, writes) => {
|
|
225
|
+
const resolved = fleetStepWriteBoundary(contract.version, scope, writes);
|
|
226
|
+
return resolved === void 0 ? {} : { writes: [...resolved] };
|
|
227
|
+
};
|
|
228
|
+
const agentNode = (context, dependencies, writes, loop, extra) => {
|
|
229
|
+
const resolved = resolveAgent(context);
|
|
230
|
+
return {
|
|
231
|
+
kind: "agent",
|
|
232
|
+
id: context.stepId,
|
|
233
|
+
agentId: context.agentId,
|
|
234
|
+
scope: context.scope,
|
|
235
|
+
dependencies: [...dependencies],
|
|
236
|
+
task,
|
|
237
|
+
expectedResultContract: resolved.expectedResultContract,
|
|
238
|
+
requestedAuthority: resolved.requestedAuthority,
|
|
239
|
+
approvedAuthority: resolved.approvedAuthority,
|
|
240
|
+
executionRole: resolved.executionRole,
|
|
241
|
+
...boundary(context.scope, writes),
|
|
242
|
+
...loop !== void 0 ? { loop } : {},
|
|
243
|
+
...context.target !== void 0 ? { target: context.target } : {},
|
|
244
|
+
...context.profile !== void 0 ? { profile: context.profile } : {},
|
|
245
|
+
...extra
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
const routeOf = (value) => ({
|
|
249
|
+
...value.target !== void 0 ? { target: value.target } : {},
|
|
250
|
+
...value.profile !== void 0 ? { profile: value.profile } : {}
|
|
251
|
+
});
|
|
252
|
+
for (const step of contract.steps) {
|
|
253
|
+
const dependencies = expandDependencies(step.dependencies, loops);
|
|
254
|
+
if (step.kind === "agent") {
|
|
255
|
+
steps.push(
|
|
256
|
+
agentNode(
|
|
257
|
+
{ stepId: step.id, agentId: step.agent, scope: step.scope, attempt: 0, ...routeOf(step) },
|
|
258
|
+
dependencies,
|
|
259
|
+
step.writes
|
|
260
|
+
)
|
|
261
|
+
);
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
if (step.kind === "gate") {
|
|
265
|
+
steps.push(
|
|
266
|
+
agentNode(
|
|
267
|
+
{ stepId: step.id, agentId: step.agent, scope: "workspace", attempt: 0, gateAuthorRole: true, ...routeOf(step) },
|
|
268
|
+
dependencies,
|
|
269
|
+
[step.path],
|
|
270
|
+
void 0,
|
|
271
|
+
{ gate: { path: step.path, commandId: step.run } }
|
|
272
|
+
)
|
|
273
|
+
);
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
if (step.kind === "plan") {
|
|
277
|
+
steps.push(
|
|
278
|
+
agentNode(
|
|
279
|
+
{ stepId: step.id, agentId: step.agent, scope: step.scope, attempt: 0, planRole: true, ...routeOf(step) },
|
|
280
|
+
dependencies,
|
|
281
|
+
step.writes,
|
|
282
|
+
void 0,
|
|
283
|
+
{ plan: { roster: [...step.roster], maxTasks: step.maxTasks, proposals: step.proposals } }
|
|
284
|
+
)
|
|
285
|
+
);
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
if (step.kind === "code") {
|
|
289
|
+
steps.push({
|
|
290
|
+
kind: "code",
|
|
291
|
+
id: step.id,
|
|
292
|
+
commandId: step.command,
|
|
293
|
+
scope: step.scope,
|
|
294
|
+
dependencies,
|
|
295
|
+
...boundary(step.scope, step.writes),
|
|
296
|
+
...step.commitFrom !== void 0 ? { commitFrom: expandCommitSources(step.commitFrom, loops) } : {}
|
|
297
|
+
});
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
const loop = loops.get(step.id);
|
|
301
|
+
if (loop === void 0) throw new Error(`fleet plan: loop '${step.id}' failed to compile`);
|
|
302
|
+
for (let attempt = 1; attempt <= step.maxAttempts; attempt++) {
|
|
303
|
+
const checkId = loop.checkStepIds[attempt - 1] ?? "";
|
|
304
|
+
const previousRepair = attempt === 1 ? null : loop.repairStepIds[attempt - 2] ?? "";
|
|
305
|
+
const checkDependencies = previousRepair === null ? dependencies : [previousRepair];
|
|
306
|
+
const membership = { loopId: loop.id, role: "check", attempt };
|
|
307
|
+
if (step.check.kind === "code") {
|
|
308
|
+
steps.push({
|
|
309
|
+
kind: "code",
|
|
310
|
+
id: checkId,
|
|
311
|
+
commandId: step.check.command,
|
|
312
|
+
scope: step.check.scope,
|
|
313
|
+
dependencies: checkDependencies,
|
|
314
|
+
...boundary(step.check.scope, step.check.writes),
|
|
315
|
+
loop: membership,
|
|
316
|
+
// The green a later step may rely on; the scheduler re-runs it
|
|
317
|
+
// when a workspace step lands after it.
|
|
318
|
+
verification: true
|
|
319
|
+
});
|
|
320
|
+
} else if (step.check.kind === "gate") {
|
|
321
|
+
const gateId = step.check.gate;
|
|
322
|
+
const gate = contract.steps.find((candidate) => candidate.id === gateId);
|
|
323
|
+
if (gate?.kind !== "gate") throw new Error(`fleet plan: gate '${gateId}' failed to resolve`);
|
|
324
|
+
steps.push({
|
|
325
|
+
kind: "code",
|
|
326
|
+
id: checkId,
|
|
327
|
+
commandId: gate.run,
|
|
328
|
+
scope: "readonly",
|
|
329
|
+
dependencies: checkDependencies,
|
|
330
|
+
writes: [],
|
|
331
|
+
loop: membership,
|
|
332
|
+
verification: true,
|
|
333
|
+
gate: { gateId: gate.id, path: gate.path }
|
|
334
|
+
});
|
|
335
|
+
} else {
|
|
336
|
+
steps.push(
|
|
337
|
+
agentNode(
|
|
338
|
+
{
|
|
339
|
+
stepId: checkId,
|
|
340
|
+
agentId: step.check.agent,
|
|
341
|
+
scope: step.check.scope,
|
|
342
|
+
attempt: 0,
|
|
343
|
+
gateRole: "reviewer",
|
|
344
|
+
...routeOf(step.check)
|
|
345
|
+
},
|
|
346
|
+
checkDependencies,
|
|
347
|
+
step.check.writes,
|
|
348
|
+
membership
|
|
349
|
+
)
|
|
350
|
+
);
|
|
351
|
+
}
|
|
352
|
+
if (attempt >= step.maxAttempts) continue;
|
|
353
|
+
const repairId = loop.repairStepIds[attempt - 1] ?? "";
|
|
354
|
+
steps.push(
|
|
355
|
+
agentNode(
|
|
356
|
+
{ stepId: repairId, agentId: step.repair.agent, scope: step.repair.scope, attempt, ...routeOf(step.repair) },
|
|
357
|
+
[checkId],
|
|
358
|
+
step.repair.writes,
|
|
359
|
+
{ loopId: loop.id, role: "repair", attempt }
|
|
360
|
+
)
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return compileExecutionPlan({
|
|
365
|
+
topology: "fleet",
|
|
366
|
+
rootTask: task,
|
|
367
|
+
maxWorkers: contract.maxWorkers,
|
|
368
|
+
...contract.writers === 1 ? { writers: 1 } : {},
|
|
369
|
+
onFailure: contract.onFailure,
|
|
370
|
+
steps,
|
|
371
|
+
loops: [...loops.values()]
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
export {
|
|
376
|
+
requireAgentSteps,
|
|
377
|
+
compileExecutionPlan,
|
|
378
|
+
executionPlanAncestors,
|
|
379
|
+
spliceExecutionPlan,
|
|
380
|
+
compileFleetExecutionPlan
|
|
381
|
+
};
|
|
382
|
+
//# sourceMappingURL=chunk-M4AKACEO.js.map
|
|
@@ -2,16 +2,16 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
|
|
|
2
2
|
import {
|
|
3
3
|
readLayeredSettings,
|
|
4
4
|
readStrictLayeredSettings
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-YD734TPH.js";
|
|
6
6
|
import {
|
|
7
7
|
formatBootTrace
|
|
8
8
|
} from "./chunk-HKIYEGME.js";
|
|
9
9
|
import {
|
|
10
10
|
initializeClioHome
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-DOOEX22V.js";
|
|
12
12
|
import {
|
|
13
13
|
readSettings
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-UHXRNZ2J.js";
|
|
15
15
|
import {
|
|
16
16
|
require_dist
|
|
17
17
|
} from "./chunk-APJ265NV.js";
|
|
@@ -158,7 +158,7 @@ Run \`clio-coder auth login ${verdict.store}\` if the endpoint requires one; loc
|
|
|
158
158
|
} else if (verdict.kind !== "usable") {
|
|
159
159
|
process.stdout.write(`${describeVerdict(verdict)} Starting \`clio-coder configure\`.
|
|
160
160
|
`);
|
|
161
|
-
const { runConfigureCommand } = await import("./configure-
|
|
161
|
+
const { runConfigureCommand } = await import("./configure-OLCVPHNM.js");
|
|
162
162
|
const configured = await runConfigureCommand([]);
|
|
163
163
|
if (configured !== 0) return configured;
|
|
164
164
|
startupSettings = readStrictLayeredSettings(process.cwd()).settings;
|
|
@@ -167,7 +167,7 @@ Run \`clio-coder auth login ${verdict.store}\` if the endpoint requires one; loc
|
|
|
167
167
|
let terminalLease;
|
|
168
168
|
try {
|
|
169
169
|
if (terminalLeaseEligible(options)) {
|
|
170
|
-
const { createProcessTerminalLease, instantShellEnabled } = await import("./terminal-lease-
|
|
170
|
+
const { createProcessTerminalLease, instantShellEnabled } = await import("./terminal-lease-WUZY7ZV5.js");
|
|
171
171
|
if (instantShellEnabled()) {
|
|
172
172
|
let stage0FrameId = null;
|
|
173
173
|
terminalLease = createProcessTerminalLease({
|
|
@@ -190,7 +190,7 @@ Run \`clio-coder auth login ${verdict.store}\` if the endpoint requires one; loc
|
|
|
190
190
|
throw new Error("injected Stage 1 hydration failure");
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
|
-
const { bootOrchestrator } = await import("./orchestrator-
|
|
193
|
+
const { bootOrchestrator } = await import("./orchestrator-WZYB54DM.js");
|
|
194
194
|
const result = await bootOrchestrator({
|
|
195
195
|
...options,
|
|
196
196
|
...startupSettings ? { startupSettings } : {},
|
|
@@ -214,4 +214,4 @@ export {
|
|
|
214
214
|
terminalLeaseEligible,
|
|
215
215
|
runClioCommand
|
|
216
216
|
};
|
|
217
|
-
//# sourceMappingURL=chunk-
|
|
217
|
+
//# sourceMappingURL=chunk-MXI6J5JF.js.map
|