@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.
Files changed (258) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +16 -5
  3. package/dist/{acp-2BEHC4DL.js → acp-SK4MD6MM.js} +10 -10
  4. package/dist/{agents-LNNFTM53.js → agents-2FN2K6ME.js} +30 -25
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-KXXFI2VS.js → auth-QIYZWM5I.js} +13 -13
  7. package/dist/{chunk-KHSFENX2.js → chunk-3HAPLH5M.js} +10 -10
  8. package/dist/{chunk-24I7BN55.js → chunk-465YSENW.js} +2 -2
  9. package/dist/{chunk-4OC57DA6.js → chunk-4DGYLA73.js} +53 -2
  10. package/dist/{chunk-CYQKWTG3.js → chunk-4DWFMQDR.js} +4 -4
  11. package/dist/{chunk-E2ER4LJF.js → chunk-5C3AQNDW.js} +25 -1
  12. package/dist/{chunk-22NAGB7X.js → chunk-5C77SEEY.js} +5 -94
  13. package/dist/{chunk-43AOLP7E.js → chunk-5FR74PWO.js} +2 -1
  14. package/dist/{chunk-K7T3E2SR.js → chunk-5UJ6ECTS.js} +10 -9
  15. package/dist/{chunk-6US73PDB.js → chunk-6M7VS3J3.js} +5 -5
  16. package/dist/{chunk-CJUB2JJ2.js → chunk-6TUKSZVF.js} +5 -5
  17. package/dist/{chunk-5JGRAMKL.js → chunk-AB4XIIVB.js} +8 -6
  18. package/dist/{chunk-R46L2BIR.js → chunk-BMWK7ZIZ.js} +14 -20
  19. package/dist/{chunk-4BPJXDWC.js → chunk-C4JBQ5SR.js} +30 -14
  20. package/dist/{chunk-XXQNGV4M.js → chunk-CEYBNUGC.js} +243 -63
  21. package/dist/{chunk-VEZEGCGW.js → chunk-D4MDIG46.js} +20 -18
  22. package/dist/chunk-DJNLUABN.js +843 -0
  23. package/dist/{chunk-RY3LY4J5.js → chunk-DMD2AGVS.js} +5 -4
  24. package/dist/{chunk-KOHPCX4K.js → chunk-DOOEX22V.js} +2 -2
  25. package/dist/chunk-DQA7QLMD.js +123 -0
  26. package/dist/chunk-DR52UMZW.js +21 -0
  27. package/dist/{chunk-XF5N4U5A.js → chunk-EBEFWSGL.js} +6 -5
  28. package/dist/{chunk-EYPA3EGJ.js → chunk-EELBMBT6.js} +120 -13
  29. package/dist/{chunk-CKXWIANG.js → chunk-EOOQZZDE.js} +16 -14
  30. package/dist/{chunk-WR67VIZY.js → chunk-FOT2FX5J.js} +63 -5
  31. package/dist/{chunk-FYYLNIL5.js → chunk-GH5622CP.js} +2 -2
  32. package/dist/chunk-GWS3VEIW.js +195 -0
  33. package/dist/{chunk-LYF7OHWH.js → chunk-J7PIKKWC.js} +8 -463
  34. package/dist/{chunk-NILBFAPG.js → chunk-JNXPYBB4.js} +2 -2
  35. package/dist/{chunk-4VP4KH3K.js → chunk-JRIO5UD2.js} +4 -4
  36. package/dist/{chunk-6XXKFVSN.js → chunk-JTSEDYVQ.js} +7 -7
  37. package/dist/{chunk-QKMUKYO7.js → chunk-KCMKRQX4.js} +236 -84
  38. package/dist/chunk-KZ2H5X4G.js +1026 -0
  39. package/dist/{chunk-QNQHSOLF.js → chunk-LADCF22A.js} +12 -12
  40. package/dist/chunk-M4AKACEO.js +382 -0
  41. package/dist/{chunk-XYDYPRZI.js → chunk-MXI6J5JF.js} +7 -7
  42. package/dist/{chunk-G7MUEIGA.js → chunk-OB5HIGJY.js} +1 -1
  43. package/dist/{chunk-EKY57CSP.js → chunk-OBMAI2DP.js} +61 -767
  44. package/dist/chunk-PD3MESLB.js +242 -0
  45. package/dist/{chunk-ZRGEBJ4T.js → chunk-QCTRSGHQ.js} +21 -21
  46. package/dist/chunk-RVG5JXAL.js +41 -0
  47. package/dist/{chunk-RD5U66HV.js → chunk-SROCI7ZU.js} +7 -7
  48. package/dist/{chunk-MFFY33HR.js → chunk-THKY7CD7.js} +466 -205
  49. package/dist/{chunk-PCZJO5TI.js → chunk-UFQ3F4FW.js} +13 -178
  50. package/dist/{chunk-AD2SYQYC.js → chunk-UHXRNZ2J.js} +121 -3
  51. package/dist/chunk-UND3GU2L.js +103 -0
  52. package/dist/{chunk-QM3F2GKX.js → chunk-UUANF5CR.js} +2247 -2096
  53. package/dist/chunk-UVDSQ6LW.js +472 -0
  54. package/dist/{chunk-DJVECN66.js → chunk-VQNODYQ4.js} +14 -14
  55. package/dist/{chunk-3BPUFZDL.js → chunk-VREKEFLL.js} +3 -3
  56. package/dist/{chunk-PBTHKCPN.js → chunk-WJHBC77E.js} +6 -6
  57. package/dist/{chunk-XE2VEJHX.js → chunk-X2KV5FXT.js} +2 -2
  58. package/dist/{chunk-ZXF4XRKW.js → chunk-XEGB6BCN.js} +157 -7
  59. package/dist/{chunk-E25LMLRW.js → chunk-YD734TPH.js} +2 -2
  60. package/dist/{verifiers-NCBTHHN2.js → chunk-YTYFXUI3.js} +65 -322
  61. package/dist/{chunk-OH3TOQTB.js → chunk-ZGH7FGS5.js} +13 -7
  62. package/dist/cli/index.js +32 -30
  63. package/dist/{clio-M2KGYUFZ.js → clio-WBVQEBKO.js} +7 -7
  64. package/dist/{code-nav-GQNL7XA6.js → code-nav-FGGFIE7L.js} +3 -3
  65. package/dist/{components-5TTYYX6G.js → components-F7OEATSO.js} +4 -4
  66. package/dist/{config-XUUYQIWO.js → config-TRBL3RCF.js} +34 -29
  67. package/dist/{configure-IHJ7YOMV.js → configure-OLCVPHNM.js} +15 -15
  68. package/dist/{context-74JLXAWD.js → context-MJIJ6GOX.js} +11 -11
  69. package/dist/{context-ZQ7SIFJV.js → context-WFPKQSM6.js} +19 -3
  70. package/dist/{context-75MIWW3U.js → context-XEWE3MOJ.js} +31 -26
  71. package/dist/{context-clear-GYKWNUML.js → context-clear-KNOS2JPB.js} +31 -26
  72. package/dist/{context-working-set-UX5KEP4J.js → context-working-set-EUXAZI6N.js} +8 -8
  73. package/dist/{dispatch-runner-GIJBHNFL.js → dispatch-runner-B7MTOVKL.js} +313 -53
  74. package/dist/{docs-6FZSCG5B.js → docs-FLJTIDSE.js} +4 -4
  75. package/dist/{doctor-SVJ5BZCW.js → doctor-RN4YKO2X.js} +14 -14
  76. package/dist/{eval-CG6LLBLD.js → eval-RUBJVSNQ.js} +8 -7
  77. package/dist/{evidence-ZYFIEN42.js → evidence-JZNBUOQZ.js} +30 -25
  78. package/dist/{evolve-QGEXEMDW.js → evolve-FJVC4KKI.js} +30 -25
  79. package/dist/{extensions-ADGNCJJD.js → extensions-IQL36S7K.js} +4 -4
  80. package/dist/{fleet-S5R4ZOQY.js → fleet-BDKYJFCP.js} +214 -360
  81. package/dist/fleet-commands-ZFIWZSB3.js +70 -0
  82. package/dist/fleet-graph-Y6HPXIVF.js +125 -0
  83. package/dist/fleet-new-RDVJLHHH.js +48 -0
  84. package/dist/fleet-validate-BIYREGIK.js +79 -0
  85. package/dist/{init-5DRU55YR.js → init-LQUB5COQ.js} +44 -37
  86. package/dist/library-NJAHIGG4.js +217 -0
  87. package/dist/{memory-7YKKR6UC.js → memory-OG6HOYKM.js} +31 -26
  88. package/dist/{models-ZPOLRU2C.js → models-5ZG5XY7J.js} +21 -20
  89. package/dist/{monitor-US5F5YGZ.js → monitor-TJ7AMTGB.js} +49 -30
  90. package/dist/{orchestrator-E2AL4T5N.js → orchestrator-WZYB54DM.js} +3827 -581
  91. package/dist/{paths-E7KYAQWE.js → paths-XUC7GS6E.js} +4 -4
  92. package/dist/{reset-KZ652EK6.js → reset-PXQT45IY.js} +7 -7
  93. package/dist/{run-SRNBKDWD.js → run-FQ74YF62.js} +53 -45
  94. package/dist/{share-CGZE33UP.js → share-FW7SVCL3.js} +33 -9
  95. package/dist/{skills-S2X4DLY5.js → skills-7E7IRB3R.js} +24 -8
  96. package/dist/{skills-eval-W2GGIC4R.js → skills-eval-LI75W6OK.js} +34 -27
  97. package/dist/{targets-54SWINWB.js → targets-4CIFKCTW.js} +23 -22
  98. package/dist/{terminal-lease-SAIF2OGY.js → terminal-lease-WUZY7ZV5.js} +4 -4
  99. package/dist/{uninstall-BVLWXKBT.js → uninstall-7FV7IP4E.js} +4 -4
  100. package/dist/{upgrade-JKAR27XC.js → upgrade-K2HVIVMQ.js} +20 -19
  101. package/dist/{usage-MSAWCLX4.js → usage-GTZELZQX.js} +116 -49
  102. package/dist/verifiers-RLAHT27O.js +336 -0
  103. package/dist/{verify-X5HDROLA.js → verify-BX3BRKH5.js} +7 -6
  104. package/dist/{wiki-generate-GUSOQ6ZP.js → wiki-generate-ASIFASCN.js} +45 -37
  105. package/dist/worker/entry.js +38 -35
  106. package/docs/README.md +3 -2
  107. package/docs/acp.md +1 -1
  108. package/docs/alcf-provider.md +1 -1
  109. package/docs/architecture.md +2 -2
  110. package/docs/artifact-versions.md +10 -6
  111. package/docs/built-in-agents.md +26 -2
  112. package/docs/capacity-and-scheduling.md +1 -1
  113. package/docs/commands-and-modes.md +82 -2
  114. package/docs/configuration-and-targets.md +79 -2
  115. package/docs/context-engine.md +1 -1
  116. package/docs/development-pipeline.md +1 -1
  117. package/docs/dispatch-architecture-rationale.md +1 -1
  118. package/docs/documentation-coverage.md +3 -3
  119. package/docs/documentation-guide.md +3 -3
  120. package/docs/eval-runner.md +1 -1
  121. package/docs/evals-internal.md +1 -1
  122. package/docs/evidence-and-memory.md +5 -5
  123. package/docs/evolution.md +1 -1
  124. package/docs/exit-codes-and-output.md +4 -1
  125. package/docs/extensions-and-sharing.md +6 -2
  126. package/docs/fleet-demo-runbook.md +2 -2
  127. package/docs/fleet-dispatch.md +197 -10
  128. package/docs/git-commit-provenance.md +2 -2
  129. package/docs/glossary.md +1 -1
  130. package/docs/installation-and-lifecycle.md +2 -2
  131. package/docs/middleware-and-components.md +2 -1
  132. package/docs/model-catalog.md +1 -1
  133. package/docs/observability.md +55 -8
  134. package/docs/proactive-memory.md +1 -1
  135. package/docs/prompt-envelope-and-tools.md +1 -1
  136. package/docs/provider-adapter-cookbook.md +1 -1
  137. package/docs/release-cut-checklist.md +79 -64
  138. package/docs/resource-library.md +59 -0
  139. package/docs/safety-model.md +2 -2
  140. package/docs/scientific-validation.md +3 -3
  141. package/docs/session-lifecycle.md +37 -1
  142. package/docs/skills-marketplace.md +16 -3
  143. package/docs/tool-usage.md +14 -7
  144. package/docs/trace-store.md +1 -1
  145. package/docs/troubleshooting.md +1 -1
  146. package/docs/tui-design.md +1 -1
  147. package/docs/worker-dispatch-mechanics.md +3 -3
  148. package/package.json +1 -1
  149. package/src/cli/fleet-commands.ts +37 -0
  150. package/src/cli/fleet-graph.ts +102 -0
  151. package/src/cli/fleet-new.ts +36 -0
  152. package/src/cli/fleet-preflight.ts +121 -0
  153. package/src/cli/fleet-validate.ts +30 -0
  154. package/src/cli/fleet.ts +173 -335
  155. package/src/cli/index.ts +3 -1
  156. package/src/cli/library.ts +190 -0
  157. package/src/cli/share.ts +13 -1
  158. package/src/cli/usage.ts +111 -19
  159. package/src/core/bus-events.ts +4 -0
  160. package/src/core/commit-attribution.ts +4 -4
  161. package/src/core/config.ts +130 -0
  162. package/src/core/defaults.ts +81 -0
  163. package/src/domains/agents/builtins/architect.md +1 -0
  164. package/src/domains/agents/builtins/oracle.md +33 -0
  165. package/src/domains/agents/catalog.ts +13 -1
  166. package/src/domains/agents/fleet-contract.ts +278 -16
  167. package/src/domains/agents/index.ts +14 -0
  168. package/src/domains/agents/result-contract.ts +235 -1
  169. package/src/domains/config/classify.ts +4 -0
  170. package/src/domains/dispatch/active-route-planner.ts +14 -0
  171. package/src/domains/dispatch/backoff.ts +2 -1
  172. package/src/domains/dispatch/capability-match.ts +1 -0
  173. package/src/domains/dispatch/checkout-writer-lease.ts +175 -0
  174. package/src/domains/dispatch/contract.ts +34 -0
  175. package/src/domains/dispatch/delegation-plan.ts +167 -0
  176. package/src/domains/dispatch/execution-plan.ts +76 -5
  177. package/src/domains/dispatch/execution-role.ts +3 -1
  178. package/src/domains/dispatch/execution-scheduler.ts +183 -67
  179. package/src/domains/dispatch/extension.ts +258 -9
  180. package/src/domains/dispatch/fleet-gate.ts +14 -0
  181. package/src/domains/dispatch/fleet-plan.ts +63 -3
  182. package/src/domains/dispatch/fleet-run.ts +737 -0
  183. package/src/domains/dispatch/gate-role-prompts.ts +9 -0
  184. package/src/domains/dispatch/host-verification.ts +178 -0
  185. package/src/domains/dispatch/index.ts +38 -0
  186. package/src/domains/dispatch/intent.ts +159 -0
  187. package/src/domains/dispatch/receipt-integrity.ts +8 -4
  188. package/src/domains/dispatch/state.ts +36 -3
  189. package/src/domains/dispatch/types.ts +51 -6
  190. package/src/domains/dispatch/validation.ts +66 -6
  191. package/src/domains/evidence/trust-status.ts +10 -1
  192. package/src/domains/middleware/index.ts +15 -0
  193. package/src/domains/middleware/watchdog.ts +281 -0
  194. package/src/domains/observability/contract.ts +3 -1
  195. package/src/domains/observability/cost.ts +12 -1
  196. package/src/domains/observability/extension.ts +2 -2
  197. package/src/domains/observability/index.ts +10 -0
  198. package/src/domains/observability/out-of-turn-usage.ts +223 -0
  199. package/src/domains/resources/index.ts +20 -0
  200. package/src/domains/resources/library.ts +326 -0
  201. package/src/domains/resources/skills/marketplace.ts +37 -12
  202. package/src/domains/session/handoff.ts +629 -0
  203. package/src/domains/share/archive.ts +67 -2
  204. package/src/entry/orchestrator.ts +37 -0
  205. package/src/interactive/bus-notices.ts +26 -0
  206. package/src/interactive/chat-loop.ts +235 -1
  207. package/src/interactive/chat-renderer.ts +22 -0
  208. package/src/interactive/cost-overlay.ts +31 -3
  209. package/src/interactive/council-dispatch.ts +30 -0
  210. package/src/interactive/council-grid.ts +213 -0
  211. package/src/interactive/council.ts +99 -0
  212. package/src/interactive/dispatch-board.ts +260 -16
  213. package/src/interactive/fleet-run-preview.ts +307 -0
  214. package/src/interactive/footer/notifications.ts +219 -0
  215. package/src/interactive/handoff-round.ts +56 -0
  216. package/src/interactive/interactive-application.ts +43 -1
  217. package/src/interactive/interactive-event-projection.ts +9 -1
  218. package/src/interactive/interactive-slash-runtime.ts +52 -2
  219. package/src/interactive/interactive-subscriptions.ts +14 -2
  220. package/src/interactive/oracle.ts +179 -0
  221. package/src/interactive/overlay-ask-user-lifecycle.ts +6 -0
  222. package/src/interactive/overlay-general-openers.ts +190 -1
  223. package/src/interactive/overlay-key-routing.ts +17 -1
  224. package/src/interactive/overlay-lifecycle.ts +41 -1
  225. package/src/interactive/overlay-permission-lifecycle.ts +10 -0
  226. package/src/interactive/overlay-resource-openers.ts +11 -3
  227. package/src/interactive/overlay-session-lifecycle.ts +234 -2
  228. package/src/interactive/overlays/fleet-run-approval.ts +208 -0
  229. package/src/interactive/overlays/handoff-review.ts +185 -0
  230. package/src/interactive/overlays/library-install-confirm.ts +151 -0
  231. package/src/interactive/overlays/list-overlay.ts +168 -2
  232. package/src/interactive/overlays/settings.ts +101 -4
  233. package/src/interactive/overlays/side-question.ts +139 -0
  234. package/src/interactive/overlays/skills-hub.ts +401 -15
  235. package/src/interactive/side-question.ts +171 -0
  236. package/src/interactive/slash-commands.ts +432 -5
  237. package/src/interactive/slash-spec.ts +19 -6
  238. package/src/interactive/theme/tokens.ts +30 -0
  239. package/src/interactive/turn-middleware.ts +15 -1
  240. package/src/interactive/watchdog-run.ts +75 -0
  241. package/src/interactive/worker-share.ts +56 -1
  242. package/src/interactive/worker-stream.ts +7 -0
  243. package/src/tools/bootstrap.ts +3 -0
  244. package/src/tools/compete-worktrees.ts +13 -79
  245. package/src/tools/dispatch-admission.ts +242 -8
  246. package/src/tools/dispatch-arguments.ts +57 -1
  247. package/src/tools/dispatch-plan.ts +136 -6
  248. package/src/tools/dispatch-runner.ts +319 -13
  249. package/src/tools/dispatch-types.ts +20 -1
  250. package/src/tools/dispatch.ts +72 -2
  251. package/src/tools/monitor.ts +16 -0
  252. package/src/tools/profiles.ts +18 -4
  253. package/src/tools/task-worktree.ts +238 -0
  254. package/src/tools/verify/authoring.ts +61 -1
  255. package/src/tools/verify/scripts.ts +62 -0
  256. package/src/tools/worker-evidence.ts +2 -1
  257. package/src/worker/spec-contract.ts +1 -0
  258. package/dist/chunk-HC4CLZ2Y.js +0 -68
@@ -7,10 +7,10 @@ import {
7
7
  fingerprintNativeRuntime,
8
8
  interopProposals,
9
9
  renderProposalEntry
10
- } from "./chunk-RD5U66HV.js";
10
+ } from "./chunk-SROCI7ZU.js";
11
11
  import {
12
12
  initializeClioHome
13
- } from "./chunk-KOHPCX4K.js";
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-24I7BN55.js";
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-DJVECN66.js";
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-4VP4KH3K.js";
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-QNQHSOLF.js.map
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-E25LMLRW.js";
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-KOHPCX4K.js";
11
+ } from "./chunk-DOOEX22V.js";
12
12
  import {
13
13
  readSettings
14
- } from "./chunk-AD2SYQYC.js";
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-IHJ7YOMV.js");
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-SAIF2OGY.js");
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-E2AL4T5N.js");
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-XYDYPRZI.js.map
217
+ //# sourceMappingURL=chunk-MXI6J5JF.js.map
@@ -67,4 +67,4 @@ export {
67
67
  BusChannels,
68
68
  isRunAbortedPayload
69
69
  };
70
- //# sourceMappingURL=chunk-G7MUEIGA.js.map
70
+ //# sourceMappingURL=chunk-OB5HIGJY.js.map