@iowarp/clio-coder 0.3.7 → 0.3.9

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 (400) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +13 -4
  3. package/dist/{acp-SK4MD6MM.js → acp-7LOELQFP.js} +13 -13
  4. package/dist/{agents-2FN2K6ME.js → agents-FIBG2SHA.js} +41 -37
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-QIYZWM5I.js → auth-OI4LIH2I.js} +31 -24
  7. package/dist/builtins-AD25UL3C.js +17 -0
  8. package/dist/{chunk-5FR74PWO.js → chunk-2JDWVJND.js} +2 -2
  9. package/dist/chunk-3DPEIQKN.js +113 -0
  10. package/dist/{chunk-EOOQZZDE.js → chunk-3DUR4WUA.js} +19 -19
  11. package/dist/{chunk-WHJYKASB.js → chunk-3MRC2YSQ.js} +2 -2
  12. package/dist/{chunk-EBEFWSGL.js → chunk-3UUY7R3Z.js} +14 -10
  13. package/dist/{chunk-LADCF22A.js → chunk-3V5AYSEQ.js} +113 -54
  14. package/dist/{chunk-BMWK7ZIZ.js → chunk-465CC7FK.js} +16 -13
  15. package/dist/{chunk-5WIGXA4T.js → chunk-47CMYGET.js} +111 -4
  16. package/dist/{chunk-CEYBNUGC.js → chunk-4H6ULJ3H.js} +378 -36
  17. package/dist/{chunk-YTYFXUI3.js → chunk-4LJX2PUC.js} +9 -9
  18. package/dist/{chunk-DOOEX22V.js → chunk-56KB5IJP.js} +5 -5
  19. package/dist/{chunk-SPULKLCF.js → chunk-5DQRIYDZ.js} +2 -2
  20. package/dist/{chunk-TSHXZTOQ.js → chunk-5HFBWUMU.js} +23 -11
  21. package/dist/{chunk-5UJ6ECTS.js → chunk-5PVQ4SRS.js} +80 -8
  22. package/dist/{chunk-ZWLZP4ZT.js → chunk-5QKCQQ3E.js} +359 -17
  23. package/dist/{chunk-6M7VS3J3.js → chunk-5T7RBWN2.js} +111 -5
  24. package/dist/chunk-774ILSRL.js +172 -0
  25. package/dist/chunk-7C6RYZGQ.js +391 -0
  26. package/dist/{chunk-GH5622CP.js → chunk-A2NJGIB3.js} +2 -2
  27. package/dist/{chunk-C4JBQ5SR.js → chunk-AD7Y7STJ.js} +6 -6
  28. package/dist/{chunk-GEYXPTRF.js → chunk-AEYBF3TB.js} +33 -12
  29. package/dist/{chunk-2SFS6XQE.js → chunk-AMKHQW3C.js} +3 -2
  30. package/dist/{chunk-D4MDIG46.js → chunk-B5CSFE7B.js} +7 -7
  31. package/dist/{chunk-MXI6J5JF.js → chunk-B5XRQOLB.js} +10 -10
  32. package/dist/{chunk-X2KV5FXT.js → chunk-BVDVID7E.js} +2 -2
  33. package/dist/{chunk-JNXPYBB4.js → chunk-CA42X6KT.js} +3 -3
  34. package/dist/{chunk-VREKEFLL.js → chunk-D73KXYPF.js} +3 -3
  35. package/dist/{chunk-JTSEDYVQ.js → chunk-DG4M6ZUE.js} +7 -7
  36. package/dist/{chunk-DQA7QLMD.js → chunk-EBOC7MT3.js} +10 -25
  37. package/dist/{chunk-KZ2H5X4G.js → chunk-ECUO3KDP.js} +129 -14
  38. package/dist/{chunk-JRIO5UD2.js → chunk-EQ63NRB7.js} +5 -5
  39. package/dist/{chunk-YD734TPH.js → chunk-FALJGAWU.js} +2 -2
  40. package/dist/{chunk-GWS3VEIW.js → chunk-FWDFM5ZU.js} +24 -3
  41. package/dist/{chunk-XEGB6BCN.js → chunk-GAYUJ7LE.js} +68 -14
  42. package/dist/{chunk-UND3GU2L.js → chunk-H7IXIC72.js} +2 -2
  43. package/dist/{chunk-IR4CFBFN.js → chunk-HAY4ZE2P.js} +12 -12
  44. package/dist/{chunk-UVDSQ6LW.js → chunk-HCBCAYZU.js} +74 -147
  45. package/dist/{chunk-4DWFMQDR.js → chunk-HJB5IUKP.js} +89 -145
  46. package/dist/{chunk-M4AKACEO.js → chunk-HKO36JWF.js} +33 -5
  47. package/dist/{chunk-KCMKRQX4.js → chunk-HPCTNZM2.js} +45 -82
  48. package/dist/{chunk-465YSENW.js → chunk-IFBNV6H6.js} +3 -3
  49. package/dist/{chunk-FJ3H4MN5.js → chunk-IHKBWSXF.js} +2 -2
  50. package/dist/chunk-JEQQR47K.js +3025 -0
  51. package/dist/{chunk-FO5ZOVUY.js → chunk-KV2AOLDF.js} +27 -7
  52. package/dist/chunk-LU7P4LHA.js +33 -0
  53. package/dist/{chunk-6TUKSZVF.js → chunk-LXPJXFM5.js} +11 -11
  54. package/dist/{chunk-VQNODYQ4.js → chunk-MIX5N5AC.js} +488 -3668
  55. package/dist/chunk-MLOK6ZOS.js +2888 -0
  56. package/dist/{chunk-ZZMN5OM4.js → chunk-MV2VUEJC.js} +2 -2
  57. package/dist/{chunk-MVVUPGPW.js → chunk-MXHC5QYU.js} +6 -6
  58. package/dist/{chunk-OBMAI2DP.js → chunk-N3PBVRTZ.js} +12 -388
  59. package/dist/{chunk-WJHBC77E.js → chunk-N5XKWMDW.js} +17 -7
  60. package/dist/{chunk-5C3AQNDW.js → chunk-NNNWO6F2.js} +124 -36
  61. package/dist/{chunk-UFQ3F4FW.js → chunk-NQ6UCCOD.js} +4 -4
  62. package/dist/chunk-NUGM5KR6.js +165 -0
  63. package/dist/{chunk-DMD2AGVS.js → chunk-NZU6YDNV.js} +20 -18
  64. package/dist/{chunk-WHGPSPT5.js → chunk-O6I4CIEU.js} +151 -13
  65. package/dist/{chunk-XN3L4EYL.js → chunk-OEDBCISO.js} +2 -2
  66. package/dist/{chunk-PD3MESLB.js → chunk-P3JGPQFL.js} +4 -4
  67. package/dist/{chunk-UHXRNZ2J.js → chunk-PNY46YEY.js} +23 -6
  68. package/dist/{chunk-THKY7CD7.js → chunk-PZ4I4JE2.js} +134 -29
  69. package/dist/{chunk-SROCI7ZU.js → chunk-QQ7EKM72.js} +5 -5
  70. package/dist/{chunk-QCTRSGHQ.js → chunk-R7LNVMCS.js} +91 -53
  71. package/dist/{chunk-GOXNB3AO.js → chunk-RAPCMZL4.js} +75 -4
  72. package/dist/chunk-RKKLTLYB.js +45 -0
  73. package/dist/{chunk-OB5HIGJY.js → chunk-RKRLDWD3.js} +4 -1
  74. package/dist/{chunk-DJNLUABN.js → chunk-S4COXYBG.js} +588 -32
  75. package/dist/{chunk-3HAPLH5M.js → chunk-T3Z6VAAF.js} +172 -11
  76. package/dist/{chunk-FOT2FX5J.js → chunk-TD7UE2L5.js} +12 -10
  77. package/dist/{chunk-UUANF5CR.js → chunk-TEO2TLVN.js} +856 -967
  78. package/dist/{chunk-FCSXB6T2.js → chunk-UOSL25KY.js} +14 -2
  79. package/dist/{chunk-EELBMBT6.js → chunk-VKBMFOYV.js} +74 -15
  80. package/dist/chunk-VO2LKSTM.js +165 -0
  81. package/dist/{chunk-5C77SEEY.js → chunk-VPTUJU4P.js} +3 -3
  82. package/dist/{chunk-WEH5XRJQ.js → chunk-WIE7ZOSW.js} +2 -2
  83. package/dist/{chunk-J7PIKKWC.js → chunk-WXCJ7VME.js} +8 -8
  84. package/dist/{chunk-4DGYLA73.js → chunk-XDOQXGFO.js} +22 -7
  85. package/dist/{chunk-PPAMZ32Z.js → chunk-XK56QHLX.js} +6 -1
  86. package/dist/{chunk-AB4XIIVB.js → chunk-YKOFT37S.js} +6 -6
  87. package/dist/chunk-YSEHGPCT.js +127 -0
  88. package/dist/{chunk-HFSBBKSQ.js → chunk-YW7UVM5V.js} +138 -3
  89. package/dist/cli/index.js +32 -32
  90. package/dist/{clio-WBVQEBKO.js → clio-LT5V7SSZ.js} +9 -9
  91. package/dist/{code-nav-FGGFIE7L.js → code-nav-LMW275PA.js} +5 -5
  92. package/dist/codewiki/build-worker.js +4 -4
  93. package/dist/{components-F7OEATSO.js → components-ZFA3SAER.js} +8 -8
  94. package/dist/{config-TRBL3RCF.js → config-RXS5T3JT.js} +98 -65
  95. package/dist/{configure-OLCVPHNM.js → configure-2WYWSCSD.js} +26 -22
  96. package/dist/{context-MJIJ6GOX.js → context-I3BTOTCS.js} +12 -12
  97. package/dist/{context-XEWE3MOJ.js → context-MVOORGMF.js} +54 -47
  98. package/dist/{context-WFPKQSM6.js → context-PALKKQYL.js} +28 -28
  99. package/dist/{context-clear-KNOS2JPB.js → context-clear-N2WOYZ2K.js} +53 -46
  100. package/dist/{context-index-SSR5ECNE.js → context-index-HNG3MOME.js} +6 -6
  101. package/dist/{context-working-set-EUXAZI6N.js → context-working-set-MIEVECVZ.js} +17 -18
  102. package/dist/{dispatch-runner-B7MTOVKL.js → dispatch-runner-VVA4SRRH.js} +90 -61
  103. package/dist/{docs-FLJTIDSE.js → docs-7LQ23DLM.js} +8 -8
  104. package/dist/doctor-TWBWFK5V.js +165 -0
  105. package/dist/eval-IJ5VEZDJ.js +4483 -0
  106. package/dist/{evidence-JZNBUOQZ.js → evidence-L5APPXNV.js} +68 -61
  107. package/dist/{evolve-FJVC4KKI.js → evolve-RGNKFJ52.js} +47 -40
  108. package/dist/{extensions-IQL36S7K.js → extensions-7WYWUX5A.js} +13 -7
  109. package/dist/{fleet-BDKYJFCP.js → fleet-6CNVBZZP.js} +113 -76
  110. package/dist/{fleet-commands-ZFIWZSB3.js → fleet-commands-L2SXSYEI.js} +10 -10
  111. package/dist/{fleet-graph-Y6HPXIVF.js → fleet-graph-2J3OOIPO.js} +17 -15
  112. package/dist/{fleet-preflight-BHSNPBMH.js → fleet-preflight-CZRJ4JP5.js} +5 -6
  113. package/dist/{fleet-validate-BIYREGIK.js → fleet-validate-C5RI6DP7.js} +20 -19
  114. package/dist/{init-LQUB5COQ.js → init-VBN2ACVA.js} +70 -63
  115. package/dist/{library-NJAHIGG4.js → library-JHGUMLY2.js} +22 -20
  116. package/dist/{memory-OG6HOYKM.js → memory-K4OQIYWG.js} +49 -42
  117. package/dist/{models-5ZG5XY7J.js → models-2NCZUWDD.js} +35 -29
  118. package/dist/{monitor-TJ7AMTGB.js → monitor-MMVTJABD.js} +64 -45
  119. package/dist/{orchestrator-WZYB54DM.js → orchestrator-ZKBPCHW6.js} +1971 -520
  120. package/dist/{paths-XUC7GS6E.js → paths-DBXMZMDU.js} +5 -5
  121. package/dist/registry-LG64LTF4.js +11 -0
  122. package/dist/{reset-PXQT45IY.js → reset-DD5JGOY3.js} +11 -11
  123. package/dist/{run-FQ74YF62.js → run-QEGNX7FL.js} +89 -83
  124. package/dist/{share-FW7SVCL3.js → share-JKD3BQMW.js} +20 -18
  125. package/dist/{skills-7E7IRB3R.js → skills-LMQIKDOZ.js} +23 -21
  126. package/dist/{skills-eval-LI75W6OK.js → skills-eval-I7X2774U.js} +59 -52
  127. package/dist/{steer-GGWFUJUD.js → steer-CF5TDANS.js} +3 -3
  128. package/dist/support-I7LOJLIF.js +38 -0
  129. package/dist/{targets-4CIFKCTW.js → targets-RUSR6B5Z.js} +77 -42
  130. package/dist/{terminal-lease-WUZY7ZV5.js → terminal-lease-QYVORFR4.js} +6 -4
  131. package/dist/{trace-PNCASAXC.js → trace-ODOQIVIW.js} +61 -6
  132. package/dist/{uninstall-7FV7IP4E.js → uninstall-ZJF5H5ZN.js} +8 -8
  133. package/dist/{upgrade-K2HVIVMQ.js → upgrade-XANW3FXB.js} +29 -26
  134. package/dist/{usage-GTZELZQX.js → usage-4H7ZRXQT.js} +110 -61
  135. package/dist/{verifiers-RLAHT27O.js → verifiers-UZXNBZEB.js} +13 -13
  136. package/dist/{verify-BX3BRKH5.js → verify-BVKWTNDL.js} +9 -9
  137. package/dist/{wiki-generate-ASIFASCN.js → wiki-generate-MY7WV2QI.js} +76 -69
  138. package/dist/worker/entry.js +69 -66
  139. package/docs/alcf-provider.md +1 -1
  140. package/docs/architecture.md +1 -1
  141. package/docs/artifact-versions.md +11 -5
  142. package/docs/built-in-agents.md +1 -1
  143. package/docs/capacity-and-scheduling.md +23 -2
  144. package/docs/commands-and-modes.md +2 -2
  145. package/docs/configuration-and-targets.md +37 -5
  146. package/docs/context-engine.md +63 -4
  147. package/docs/documentation-coverage.md +3 -3
  148. package/docs/documentation-guide.md +1 -1
  149. package/docs/environment-variables.md +2 -0
  150. package/docs/eval-runner.md +262 -11
  151. package/docs/evals-internal.md +72 -2
  152. package/docs/evidence-and-memory.md +77 -12
  153. package/docs/evolution.md +1 -1
  154. package/docs/extensions-and-sharing.md +3 -1
  155. package/docs/fleet-dispatch.md +34 -9
  156. package/docs/glossary.md +21 -1
  157. package/docs/installation-and-lifecycle.md +1 -1
  158. package/docs/middleware-and-components.md +1 -1
  159. package/docs/model-catalog.md +1 -1
  160. package/docs/observability.md +54 -3
  161. package/docs/proactive-memory.md +127 -14
  162. package/docs/prompt-envelope-and-tools.md +22 -2
  163. package/docs/provider-adapter-cookbook.md +1 -1
  164. package/docs/release-cut-checklist.md +60 -41
  165. package/docs/safety-model.md +1 -1
  166. package/docs/scientific-validation.md +1 -1
  167. package/docs/skills-marketplace.md +1 -1
  168. package/docs/tool-usage.md +1 -1
  169. package/docs/trace-store.md +1 -1
  170. package/docs/troubleshooting.md +87 -0
  171. package/docs/tui-design.md +1 -1
  172. package/docs/worker-dispatch-mechanics.md +1 -1
  173. package/package.json +2 -2
  174. package/src/cli/agents.ts +1 -1
  175. package/src/cli/argv.ts +5 -0
  176. package/src/cli/config-inspect.ts +33 -6
  177. package/src/cli/config.ts +1 -1
  178. package/src/cli/configure.ts +107 -23
  179. package/src/cli/doctor-state-size.ts +82 -0
  180. package/src/cli/doctor.ts +7 -1
  181. package/src/cli/eval.ts +80 -16
  182. package/src/cli/evidence.ts +30 -25
  183. package/src/cli/extensions.ts +5 -1
  184. package/src/cli/fleet-preflight.ts +2 -12
  185. package/src/cli/fleet.ts +32 -3
  186. package/src/cli/shared.ts +1 -0
  187. package/src/cli/targets.ts +45 -11
  188. package/src/cli/trace.ts +63 -4
  189. package/src/cli/usage.ts +63 -14
  190. package/src/cli/validate-model.ts +60 -5
  191. package/src/core/bus-events.ts +54 -1
  192. package/src/core/cache-telemetry.ts +42 -0
  193. package/src/core/commit-attribution.ts +4 -4
  194. package/src/core/config.ts +18 -0
  195. package/src/core/defaults.ts +36 -6
  196. package/src/core/endpoint-key.ts +27 -0
  197. package/src/core/path-boundary.ts +100 -0
  198. package/src/core/residency-target-key.ts +25 -0
  199. package/src/core/response-schema.ts +36 -2
  200. package/src/domains/agents/extension.ts +2 -11
  201. package/src/domains/agents/fleet-contract.ts +30 -12
  202. package/src/domains/agents/recipe.ts +7 -1
  203. package/src/domains/agents/registry.ts +73 -5
  204. package/src/domains/agents/result-contract.ts +128 -17
  205. package/src/domains/agents/write-boundary.ts +15 -50
  206. package/src/domains/config/classify.ts +3 -0
  207. package/src/domains/context/codewiki/coordinator.ts +12 -4
  208. package/src/domains/context/project-rules.ts +51 -1
  209. package/src/domains/dispatch/admission.ts +40 -3
  210. package/src/domains/dispatch/assignment-reconcile.ts +22 -5
  211. package/src/domains/dispatch/assignment-store.ts +151 -14
  212. package/src/domains/dispatch/capacity-lease.ts +98 -9
  213. package/src/domains/dispatch/contract.ts +26 -1
  214. package/src/domains/dispatch/delegation-plan.ts +2 -5
  215. package/src/domains/dispatch/execution-plan.ts +44 -4
  216. package/src/domains/dispatch/execution-role.ts +9 -1
  217. package/src/domains/dispatch/extension.ts +309 -96
  218. package/src/domains/dispatch/fleet-run.ts +78 -4
  219. package/src/domains/dispatch/gate-role-prompts.ts +38 -0
  220. package/src/domains/dispatch/heartbeat.ts +32 -8
  221. package/src/domains/dispatch/index.ts +6 -1
  222. package/src/domains/dispatch/intent-requirements.ts +40 -0
  223. package/src/domains/dispatch/intent.ts +84 -8
  224. package/src/domains/dispatch/orphan-recovery.ts +5 -0
  225. package/src/domains/dispatch/path-scope.ts +370 -0
  226. package/src/domains/dispatch/receipt-integrity.ts +2 -1
  227. package/src/domains/dispatch/reservation-store.ts +116 -8
  228. package/src/domains/dispatch/state.ts +4 -0
  229. package/src/domains/dispatch/types.ts +14 -7
  230. package/src/domains/dispatch/validation.ts +6 -3
  231. package/src/domains/dispatch/worker-spawn.ts +25 -11
  232. package/src/domains/dispatch/write-boundary-enforcer.ts +62 -0
  233. package/src/domains/dispatch/write-boundary.ts +262 -22
  234. package/src/domains/eval/artifacts/store.ts +62 -0
  235. package/src/domains/eval/compare/behavioral.ts +224 -0
  236. package/src/domains/eval/compare/compare.ts +355 -2
  237. package/src/domains/eval/compare/envelope.ts +128 -0
  238. package/src/domains/eval/compare/gates.ts +24 -6
  239. package/src/domains/eval/compare/thresholds.ts +30 -3
  240. package/src/domains/eval/execution-provenance.ts +240 -0
  241. package/src/domains/eval/metrics/aggregate.ts +136 -0
  242. package/src/domains/eval/metrics/call-ledger-stream.ts +112 -0
  243. package/src/domains/eval/metrics/evidence.ts +79 -2
  244. package/src/domains/eval/metrics/tracked.ts +413 -0
  245. package/src/domains/eval/provenance.ts +117 -0
  246. package/src/domains/eval/reports/comparison.ts +128 -0
  247. package/src/domains/eval/reports/junit.ts +17 -3
  248. package/src/domains/eval/reports/markdown.ts +3 -3
  249. package/src/domains/eval/reports/text.ts +14 -0
  250. package/src/domains/eval/run-compare.ts +20 -0
  251. package/src/domains/eval/runners/clio-run.ts +139 -2
  252. package/src/domains/eval/runners/external-command.ts +28 -3
  253. package/src/domains/eval/schema/adapter.ts +111 -0
  254. package/src/domains/eval/schema/artifact.ts +20 -0
  255. package/src/domains/eval/schema/behavioral-metrics.ts +204 -0
  256. package/src/domains/eval/schema/behavioral.ts +520 -0
  257. package/src/domains/eval/schema/execution-envelope.ts +194 -0
  258. package/src/domains/eval/schema/serving.ts +74 -0
  259. package/src/domains/eval/schema/suite.ts +38 -8
  260. package/src/domains/eval/schema/validate.ts +58 -3
  261. package/src/domains/eval/schema/verdict.ts +237 -0
  262. package/src/domains/eval/suites/resolve.ts +2 -0
  263. package/src/domains/eval/suites/run.ts +264 -33
  264. package/src/domains/eval/verifiers/command.ts +2 -1
  265. package/src/domains/eval/workspaces/temp-copy.ts +145 -13
  266. package/src/domains/evidence/build.ts +68 -21
  267. package/src/domains/evidence/eval.ts +2 -12
  268. package/src/domains/evidence/findings-markdown.ts +33 -0
  269. package/src/domains/evidence/index.ts +21 -0
  270. package/src/domains/evidence/provenance.ts +46 -11
  271. package/src/domains/evidence/run-trust.ts +7 -113
  272. package/src/domains/evidence/trust-projection.ts +274 -0
  273. package/src/domains/evidence/trust-status.ts +145 -17
  274. package/src/domains/evidence/types.ts +4 -0
  275. package/src/domains/extensions/compatibility.ts +285 -0
  276. package/src/domains/extensions/discovery.ts +126 -4
  277. package/src/domains/extensions/resources.ts +21 -9
  278. package/src/domains/extensions/state.ts +18 -5
  279. package/src/domains/extensions/types.ts +6 -1
  280. package/src/domains/lifecycle/doctor.ts +209 -2
  281. package/src/domains/memory/index.ts +14 -0
  282. package/src/domains/memory/task-bank-promotion.ts +64 -0
  283. package/src/domains/memory/task-memory-policy.ts +77 -8
  284. package/src/domains/memory/task-memory-spend.ts +131 -0
  285. package/src/domains/memory/task-memory-status.ts +7 -0
  286. package/src/domains/memory/task-memory-telemetry.ts +2 -0
  287. package/src/domains/middleware/index.ts +1 -0
  288. package/src/domains/middleware/memory-intervention.ts +69 -5
  289. package/src/domains/middleware/memory-step-endpoint.ts +71 -0
  290. package/src/domains/observability/background-memory-usage.ts +140 -0
  291. package/src/domains/observability/cost.ts +1 -1
  292. package/src/domains/observability/index.ts +7 -0
  293. package/src/domains/observability/out-of-turn-usage.ts +51 -2
  294. package/src/domains/observability/trace-store.ts +192 -2
  295. package/src/domains/prompts/compiler.ts +100 -13
  296. package/src/domains/prompts/contract.ts +3 -5
  297. package/src/domains/providers/endpoint-capacity.ts +96 -0
  298. package/src/domains/providers/extension.ts +30 -2
  299. package/src/domains/providers/index.ts +10 -0
  300. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +243 -1
  301. package/src/domains/providers/runtime-resolution.ts +8 -1
  302. package/src/domains/providers/runtimes/common/probe-helpers.ts +31 -9
  303. package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +1 -1
  304. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  305. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +1 -1
  306. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +1 -1
  307. package/src/domains/providers/runtimes/local-native/llamacpp.ts +4 -1
  308. package/src/domains/providers/runtimes/local-native/lmstudio.ts +4 -1
  309. package/src/domains/providers/runtimes/local-native/ollama-native.ts +6 -1
  310. package/src/domains/providers/types/capability-flags.ts +2 -0
  311. package/src/domains/providers/types/target-descriptor.ts +2 -0
  312. package/src/domains/resources/common-loader.ts +3 -0
  313. package/src/domains/resources/prompts/loader.ts +184 -17
  314. package/src/domains/safety/call-target.ts +52 -0
  315. package/src/domains/safety/policy-engine.ts +5 -5
  316. package/src/domains/safety/run-effects.ts +96 -2
  317. package/src/domains/safety/scope.ts +7 -12
  318. package/src/domains/session/context-accounting.ts +52 -1
  319. package/src/domains/session/context-ledger.ts +37 -13
  320. package/src/domains/session/index.ts +6 -0
  321. package/src/domains/session/prompt-cache.ts +140 -0
  322. package/src/domains/session/prompt-manifest.ts +42 -0
  323. package/src/engine/acp/adapter.ts +18 -3
  324. package/src/engine/acp/server.ts +4 -1
  325. package/src/engine/ai.ts +35 -0
  326. package/src/engine/apis/llamacpp-residency.ts +55 -3
  327. package/src/engine/apis/lmstudio.ts +25 -5
  328. package/src/engine/apis/ollama-native.ts +2 -1
  329. package/src/engine/apis/openai-completions.ts +80 -17
  330. package/src/engine/apis/residency-lock.ts +3 -1
  331. package/src/engine/apis/residency.ts +34 -1
  332. package/src/engine/prompt-templates.ts +18 -1
  333. package/src/engine/provider-payload.ts +29 -1
  334. package/src/engine/worker-runtime.ts +6 -3
  335. package/src/entry/orchestrator.ts +176 -30
  336. package/src/interactive/chat-loop-messages.ts +26 -7
  337. package/src/interactive/chat-loop.ts +318 -41
  338. package/src/interactive/chat-panel.ts +62 -8
  339. package/src/interactive/clio-editor.ts +45 -8
  340. package/src/interactive/context-activity.ts +5 -1
  341. package/src/interactive/context-meter.ts +1 -1
  342. package/src/interactive/context-overlay.ts +40 -10
  343. package/src/interactive/cost-overlay.ts +64 -6
  344. package/src/interactive/dispatch-board.ts +127 -5
  345. package/src/interactive/fleet-run-preview.ts +41 -15
  346. package/src/interactive/handoff-round.ts +41 -2
  347. package/src/interactive/interactive-application.ts +24 -1
  348. package/src/interactive/interactive-event-projection.ts +14 -0
  349. package/src/interactive/interactive-input-runtime.ts +8 -0
  350. package/src/interactive/interactive-presentation.ts +4 -0
  351. package/src/interactive/interactive-shell.ts +20 -17
  352. package/src/interactive/interactive-slash-runtime.ts +27 -4
  353. package/src/interactive/memory-overlay.ts +8 -0
  354. package/src/interactive/mutation-preview.ts +295 -0
  355. package/src/interactive/overlay-general-openers.ts +16 -0
  356. package/src/interactive/overlay-key-routing.ts +38 -0
  357. package/src/interactive/overlay-lifecycle.ts +38 -5
  358. package/src/interactive/overlay-permission-lifecycle.ts +22 -2
  359. package/src/interactive/overlay-session-lifecycle.ts +73 -9
  360. package/src/interactive/overlays/ask-user.ts +91 -19
  361. package/src/interactive/overlays/help-reference.ts +4 -0
  362. package/src/interactive/overlays/prompts.ts +11 -1
  363. package/src/interactive/overlays/settings.ts +176 -48
  364. package/src/interactive/permission-hint.ts +34 -2
  365. package/src/interactive/permission-overlay.ts +159 -9
  366. package/src/interactive/prewarm.ts +197 -0
  367. package/src/interactive/render-trace.ts +162 -15
  368. package/src/interactive/renderers/tool-execution.ts +4 -0
  369. package/src/interactive/side-question.ts +58 -1
  370. package/src/interactive/slash-commands.ts +7 -2
  371. package/src/interactive/status/controller.ts +11 -0
  372. package/src/interactive/status/state-machine.ts +54 -2
  373. package/src/interactive/status/types.ts +7 -0
  374. package/src/interactive/terminal-lease.ts +2 -0
  375. package/src/interactive/turn-context.ts +299 -31
  376. package/src/interactive/turn-persistence.ts +14 -4
  377. package/src/interactive/turn-prewarm.ts +364 -0
  378. package/src/interactive/turn-queues.ts +7 -4
  379. package/src/interactive/turn-runtime.ts +8 -1
  380. package/src/interactive/turn-state.ts +23 -0
  381. package/src/interactive/view/artifacts.ts +42 -9
  382. package/src/interactive/view/view-overlay.ts +43 -6
  383. package/src/interactive/worker-receipts.ts +14 -2
  384. package/src/interactive/worker-stream.ts +8 -0
  385. package/src/tools/ask-user.ts +43 -2
  386. package/src/tools/dispatch-admission.ts +12 -13
  387. package/src/tools/dispatch-arguments.ts +27 -0
  388. package/src/tools/dispatch-plan.ts +46 -9
  389. package/src/tools/dispatch-runner.ts +48 -13
  390. package/src/tools/dispatch-scout.ts +1 -1
  391. package/src/tools/monitor.ts +13 -0
  392. package/src/tools/registry.ts +16 -0
  393. package/src/tools/worker-evidence.ts +19 -13
  394. package/src/worker/spec-contract.ts +2 -1
  395. package/dist/chunk-AOCYTWAV.js +0 -449
  396. package/dist/chunk-HWUFFB6L.js +0 -83
  397. package/dist/chunk-R346GLFC.js +0 -31
  398. package/dist/chunk-ZGH7FGS5.js +0 -1079
  399. package/dist/doctor-RN4YKO2X.js +0 -87
  400. package/dist/eval-RUBJVSNQ.js +0 -2557
@@ -4,14 +4,12 @@ import {
4
4
  tomlTableAt
5
5
  } from "./chunk-LCGCVYZ4.js";
6
6
  import {
7
+ loadFragments,
7
8
  renderCodewikiDigest
8
- } from "./chunk-5WIGXA4T.js";
9
+ } from "./chunk-47CMYGET.js";
9
10
  import {
10
11
  loadMemoryRecordsSync
11
- } from "./chunk-6M7VS3J3.js";
12
- import {
13
- sha256
14
- } from "./chunk-UUANF5CR.js";
12
+ } from "./chunk-5T7RBWN2.js";
15
13
  import {
16
14
  WIKI_INDEX,
17
15
  WIKI_PLAN_FILE,
@@ -46,14 +44,14 @@ import {
46
44
  readClioState,
47
45
  statePath,
48
46
  writeClioState
49
- } from "./chunk-MVVUPGPW.js";
47
+ } from "./chunk-MXHC5QYU.js";
48
+ import {
49
+ classifyProjectPreload
50
+ } from "./chunk-JVCV3ICN.js";
50
51
  import {
51
52
  compileGlobRegex,
52
53
  normalizeGlobInput
53
54
  } from "./chunk-VG7TBQIY.js";
54
- import {
55
- detectProjectType
56
- } from "./chunk-XAKHZX5N.js";
57
55
  import {
58
56
  computeFingerprintCached,
59
57
  isStale
@@ -62,15 +60,21 @@ import {
62
60
  codewikiPath,
63
61
  readCodewiki
64
62
  } from "./chunk-LBMZMYH2.js";
63
+ import {
64
+ detectProjectType
65
+ } from "./chunk-XAKHZX5N.js";
65
66
  import {
66
67
  enumerateWorkspaceFiles
67
68
  } from "./chunk-33YXPOE3.js";
69
+ import {
70
+ ceilChars
71
+ } from "./chunk-AEYBF3TB.js";
68
72
  import {
69
73
  INTEROP_AGENT_KINDS
70
74
  } from "./chunk-IHXBNWMM.js";
71
75
  import {
72
- ceilChars
73
- } from "./chunk-GEYXPTRF.js";
76
+ BusChannels
77
+ } from "./chunk-RKRLDWD3.js";
74
78
  import {
75
79
  require_dist
76
80
  } from "./chunk-APJ265NV.js";
@@ -78,15 +82,6 @@ import {
78
82
  clioDataDir,
79
83
  resolveClioDirs
80
84
  } from "./chunk-BNAZZHFG.js";
81
- import {
82
- BusChannels
83
- } from "./chunk-OB5HIGJY.js";
84
- import {
85
- classifyProjectPreload
86
- } from "./chunk-JVCV3ICN.js";
87
- import {
88
- resolvePackageRoot
89
- } from "./chunk-IWHMRKLL.js";
90
85
  import {
91
86
  __toESM,
92
87
  init_esm_shims
@@ -162,7 +157,7 @@ var SECRET_LINE_PATTERNS = [
162
157
  /\bxox[baprs]-[A-Za-z0-9-]{20,}\b/,
163
158
  /\bAIza[0-9A-Za-z_-]{20,}\b/
164
159
  ];
165
- function sha2562(text) {
160
+ function sha256(text) {
166
161
  return createHash("sha256").update(text).digest("hex");
167
162
  }
168
163
  function normalizeText(text) {
@@ -239,8 +234,8 @@ function discoverCandidateSpecs(cwd, home, includeGlobal) {
239
234
  const specs = [];
240
235
  const seen = /* @__PURE__ */ new Set();
241
236
  let order = 0;
242
- const add = (path2, scope, provider, kind) => {
243
- const abs = resolve(path2);
237
+ const add = (path, scope, provider, kind) => {
238
+ const abs = resolve(path);
244
239
  if (seen.has(abs)) return;
245
240
  seen.add(abs);
246
241
  const scopedDir = scope === "project" && kind === "instructions" ? relative(cwd, dirname(abs)) : "";
@@ -512,7 +507,7 @@ function rejectedCandidate(spec, displayPath2, reason, evidence) {
512
507
  kind: spec.kind,
513
508
  ...spec.directoryScope ? { directoryScope: spec.directoryScope } : {},
514
509
  reason,
515
- fingerprintSha256: sha2562(`rejected\0${reason}\0${evidence}`)
510
+ fingerprintSha256: sha256(`rejected\0${reason}\0${evidence}`)
516
511
  };
517
512
  }
518
513
  function statEvidence(stat) {
@@ -561,7 +556,7 @@ function readCandidate(spec, cwd, home) {
561
556
  kindLabel: KIND_LABELS[spec.kind],
562
557
  ...spec.directoryScope ? { directoryScope: spec.directoryScope } : {},
563
558
  content,
564
- contentSha256: sha2562(content),
559
+ contentSha256: sha256(content),
565
560
  byteLength: Buffer.byteLength(content, "utf8"),
566
561
  itemCount: rules.length,
567
562
  order: spec.order
@@ -625,7 +620,7 @@ function scanAgentConfigs(options) {
625
620
  kind: result.kind,
626
621
  ...result.directoryScope ? { directoryScope: result.directoryScope } : {},
627
622
  reason: "aggregate source byte budget exceeded",
628
- fingerprintSha256: sha2562(`rejected\0aggregate source byte budget exceeded\0${result.contentSha256}`)
623
+ fingerprintSha256: sha256(`rejected\0aggregate source byte budget exceeded\0${result.contentSha256}`)
629
624
  });
630
625
  continue;
631
626
  }
@@ -651,8 +646,8 @@ function scanAgentConfigs(options) {
651
646
  };
652
647
  }
653
648
  function renderSourceList(paths) {
654
- if (paths.length <= 3) return paths.map((path2) => `\`${path2}\``).join(", ");
655
- return `${paths.slice(0, 3).map((path2) => `\`${path2}\``).join(", ")} +${paths.length - 3} more`;
649
+ if (paths.length <= 3) return paths.map((path) => `\`${path}\``).join(", ");
650
+ return `${paths.slice(0, 3).map((path) => `\`${path}\``).join(", ")} +${paths.length - 3} more`;
656
651
  }
657
652
  function quoteShort(text) {
658
653
  const cleaned = text.replace(/\s+/g, " ").trim();
@@ -1945,7 +1940,7 @@ function countStatusLines(status) {
1945
1940
  return status.split("\n").map((line) => line.trim()).filter(Boolean).length;
1946
1941
  }
1947
1942
  function basenameList(paths) {
1948
- const names = paths.map((path2) => parse(path2).base).sort((a, b) => a.localeCompare(b));
1943
+ const names = paths.map((path) => parse(path).base).sort((a, b) => a.localeCompare(b));
1949
1944
  if (names.length === 0) return "";
1950
1945
  if (names.length <= 3) return names.join(", ");
1951
1946
  return `${names.slice(0, 3).join(", ")} +${names.length - 3}`;
@@ -2187,7 +2182,7 @@ function codewikiEntryPoints(codewiki, limit = 6) {
2187
2182
  if (!("toFileId" in edge)) continue;
2188
2183
  inDegree.set(edge.toFileId, (inDegree.get(edge.toFileId) ?? 0) + 1);
2189
2184
  }
2190
- const ranked = [...inDegree.entries()].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).map(([fileId]) => fileById.get(fileId)?.path).filter((path2) => typeof path2 === "string").filter((path2) => !tagged.includes(path2));
2185
+ const ranked = [...inDegree.entries()].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).map(([fileId]) => fileById.get(fileId)?.path).filter((path) => typeof path === "string").filter((path) => !tagged.includes(path));
2191
2186
  return [...tagged, ...ranked].slice(0, limit);
2192
2187
  }
2193
2188
  async function runBootstrap(input = {}) {
@@ -2537,12 +2532,12 @@ function readProfileBlob(value, issues) {
2537
2532
  }
2538
2533
  return profile;
2539
2534
  }
2540
- function readProfileFile(path2, issues) {
2541
- if (!existsSync6(path2)) return { profile: {}, present: false };
2535
+ function readProfileFile(path, issues) {
2536
+ if (!existsSync6(path)) return { profile: {}, present: false };
2542
2537
  try {
2543
- return { profile: readProfileBlob((0, import_yaml2.parse)(readFileSync5(path2, "utf8")), issues), present: true };
2538
+ return { profile: readProfileBlob((0, import_yaml2.parse)(readFileSync5(path, "utf8")), issues), present: true };
2544
2539
  } catch (err) {
2545
- issues.push(`${path2}: invalid YAML: ${err instanceof Error ? err.message : String(err)}`);
2540
+ issues.push(`${path}: invalid YAML: ${err instanceof Error ? err.message : String(err)}`);
2546
2541
  return { profile: {}, present: false };
2547
2542
  }
2548
2543
  }
@@ -2729,12 +2724,60 @@ function ruleMatchesAnyPath(rule, workingPaths) {
2729
2724
  } catch {
2730
2725
  continue;
2731
2726
  }
2732
- for (const path2 of workingPaths) {
2733
- if (regex.test(normalizeGlobInput(path2))) return true;
2727
+ for (const path of workingPaths) {
2728
+ const normalized = normalizeGlobInput(path);
2729
+ if (regex.test(normalized)) return true;
2730
+ if (normalized.endsWith("/") && globMatchesInsideDirectory(regex, pattern, normalized)) return true;
2734
2731
  }
2735
2732
  }
2736
2733
  return false;
2737
2734
  }
2735
+ function materializedGlobVariants(pattern) {
2736
+ let variants = [""];
2737
+ const normalized = normalizeGlobInput(pattern);
2738
+ for (let index = 0; index < normalized.length; index += 1) {
2739
+ const character = normalized[index];
2740
+ if (character === void 0) break;
2741
+ if (character === "*" && normalized[index + 1] === "*" && normalized[index + 2] === "/") {
2742
+ variants = variants.flatMap((prefix) => [prefix, `${prefix}x/`]).slice(0, 64);
2743
+ index += 2;
2744
+ continue;
2745
+ }
2746
+ if (character === "*" && normalized[index + 1] === "*") {
2747
+ variants = variants.map((prefix) => `${prefix}x`);
2748
+ index += 1;
2749
+ continue;
2750
+ }
2751
+ if (character === "*" || character === "?") {
2752
+ variants = variants.map((prefix) => `${prefix}x`);
2753
+ continue;
2754
+ }
2755
+ if (character === "[") {
2756
+ const end = normalized.indexOf("]", index + 1);
2757
+ const selected = end === -1 ? "x" : normalized[index + 1] ?? "x";
2758
+ variants = variants.map((prefix) => `${prefix}${selected}`);
2759
+ index = end === -1 ? index : end;
2760
+ continue;
2761
+ }
2762
+ variants = variants.map((prefix) => `${prefix}${character}`);
2763
+ }
2764
+ return variants;
2765
+ }
2766
+ function globMatchesInsideDirectory(regex, pattern, directory) {
2767
+ const candidates = /* @__PURE__ */ new Set([`${directory}x`, `${directory}x/x`]);
2768
+ for (const materialized of materializedGlobVariants(pattern)) {
2769
+ if (materialized.startsWith(directory)) candidates.add(materialized);
2770
+ const segments = materialized.split("/");
2771
+ for (let index = 0; index < segments.length; index += 1) {
2772
+ const suffix = segments.slice(index).join("/");
2773
+ if (suffix.length > 0) candidates.add(`${directory}${suffix}`);
2774
+ }
2775
+ for (let index = 0; index < materialized.length; index += 1) {
2776
+ candidates.add(`${directory}${materialized.slice(index)}`);
2777
+ }
2778
+ }
2779
+ return [...candidates].some((candidate) => regex.test(candidate));
2780
+ }
2738
2781
  function selectActiveRules(rules, workingContextPaths) {
2739
2782
  return rules.filter((rule) => {
2740
2783
  if (!rule.enabled) return false;
@@ -2963,8 +3006,8 @@ var WIKI_DEPTH_STRATEGY = {
2963
3006
  detailed: { areaDepth: 3, areaShare: 8e-3, minAreaLines: 150 }
2964
3007
  };
2965
3008
  var MAX_PAGE_SOURCES = 8;
2966
- function areaForPath(path2, maxDepth) {
2967
- const directories = path2.split("/").filter(Boolean).slice(0, -1);
3009
+ function areaForPath(path, maxDepth) {
3010
+ const directories = path.split("/").filter(Boolean).slice(0, -1);
2968
3011
  if (directories.length === 0) return ".";
2969
3012
  return directories.slice(0, Math.max(1, maxDepth)).join("/");
2970
3013
  }
@@ -3056,14 +3099,14 @@ function dedupePagePaths(plan) {
3056
3099
  const seen = /* @__PURE__ */ new Set();
3057
3100
  const pages = [];
3058
3101
  for (const page of plan.pages) {
3059
- let path2 = page.path;
3102
+ let path = page.path;
3060
3103
  let suffix = 2;
3061
- while (seen.has(path2)) {
3062
- path2 = page.path.replace(/\.md$/, `-${suffix}.md`);
3104
+ while (seen.has(path)) {
3105
+ path = page.path.replace(/\.md$/, `-${suffix}.md`);
3063
3106
  suffix += 1;
3064
3107
  }
3065
- seen.add(path2);
3066
- pages.push({ ...page, path: path2 });
3108
+ seen.add(path);
3109
+ pages.push({ ...page, path });
3067
3110
  }
3068
3111
  return { ...plan, pages };
3069
3112
  }
@@ -3257,7 +3300,7 @@ function resolvePlan(input) {
3257
3300
  if (input.mode === "update" && input.previousPlan !== void 0) {
3258
3301
  const pageSources = pageSourceIndex(input.stagingDir, input.cwd);
3259
3302
  const changed = new Set(
3260
- changedPathsSince(input.cwd, input.gitHead).map((path2) => normalizeRepoPath(input.cwd, path2))
3303
+ changedPathsSince(input.cwd, input.gitHead).map((path) => normalizeRepoPath(input.cwd, path))
3261
3304
  );
3262
3305
  return {
3263
3306
  plan: scopePlanForUpdate({
@@ -3843,104 +3886,6 @@ init_esm_shims();
3843
3886
  import { execFileSync as execFileSync2 } from "node:child_process";
3844
3887
  import { existsSync as existsSync9, realpathSync, statSync as statSync4 } from "node:fs";
3845
3888
  import { isAbsolute as isAbsolute2, join as join12, relative as relative5 } from "node:path";
3846
-
3847
- // src/domains/prompts/fragment-loader.ts
3848
- init_esm_shims();
3849
- var import_yaml4 = __toESM(require_dist(), 1);
3850
- import { readdirSync as readdirSync5, readFileSync as readFileSync9 } from "node:fs";
3851
- import path from "node:path";
3852
- var frontmatterRegex = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/;
3853
- var fragmentIdRegex = /^[a-z0-9-]+(?:\.[a-z0-9-]+)+$/;
3854
- function defaultRootDir() {
3855
- return path.join(resolvePackageRoot(), "src", "domains", "prompts", "fragments");
3856
- }
3857
- function walk(root) {
3858
- const out3 = [];
3859
- let entries;
3860
- try {
3861
- entries = readdirSync5(root, { withFileTypes: true });
3862
- } catch {
3863
- return out3;
3864
- }
3865
- for (const entry of entries) {
3866
- const full = path.join(root, entry.name);
3867
- if (entry.isDirectory()) {
3868
- out3.push(...walk(full));
3869
- continue;
3870
- }
3871
- if (entry.isFile() && entry.name.endsWith(".md")) {
3872
- out3.push(full);
3873
- }
3874
- }
3875
- return out3.sort((left, right) => left.localeCompare(right));
3876
- }
3877
- function parseFragment(filePath, rootDir) {
3878
- const raw = readFileSync9(filePath, "utf8");
3879
- const rawRel = path.relative(rootDir, filePath);
3880
- const relPath = rawRel.split(path.sep).join("/");
3881
- const match = raw.match(frontmatterRegex);
3882
- if (!match) {
3883
- throw new Error(`fragment-loader: ${relPath}: missing or malformed YAML frontmatter`);
3884
- }
3885
- const frontmatterText = match[1] ?? "";
3886
- const body = match[2] ?? "";
3887
- let parsed;
3888
- try {
3889
- parsed = import_yaml4.default.parse(frontmatterText);
3890
- } catch (err) {
3891
- const reason = err instanceof Error ? err.message : String(err);
3892
- throw new Error(`fragment-loader: ${relPath}: invalid YAML frontmatter (${reason})`);
3893
- }
3894
- if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
3895
- throw new Error(`fragment-loader: ${relPath}: frontmatter must be a YAML object`);
3896
- }
3897
- const fm = parsed;
3898
- const id = fm.id;
3899
- if (typeof id !== "string" || !fragmentIdRegex.test(id)) {
3900
- throw new Error(`fragment-loader: ${relPath}: frontmatter.id must be a dot-separated namespace`);
3901
- }
3902
- const version = fm.version;
3903
- if (version !== 1) {
3904
- throw new Error(`fragment-loader: ${relPath}: frontmatter.version must be 1`);
3905
- }
3906
- const description2 = fm.description;
3907
- if (typeof description2 !== "string" || description2.trim() === "") {
3908
- throw new Error(`fragment-loader: ${relPath}: frontmatter.description must be a non-empty string`);
3909
- }
3910
- const dynamicRaw = fm.dynamic;
3911
- if (dynamicRaw !== void 0 && typeof dynamicRaw !== "boolean") {
3912
- throw new Error(`fragment-loader: ${relPath}: frontmatter.dynamic must be a boolean when present`);
3913
- }
3914
- return {
3915
- path: filePath,
3916
- relPath,
3917
- id,
3918
- version,
3919
- description: description2,
3920
- dynamic: dynamicRaw === true,
3921
- body,
3922
- contentHash: sha256(raw)
3923
- };
3924
- }
3925
- function loadFragments(options) {
3926
- const rootDir = typeof options === "string" ? options : options?.rootDir;
3927
- const resolvedRoot = rootDir ? path.resolve(rootDir) : defaultRootDir();
3928
- const files = walk(resolvedRoot);
3929
- const byId = /* @__PURE__ */ new Map();
3930
- for (const file of files) {
3931
- const fragment = parseFragment(file, resolvedRoot);
3932
- const existing = byId.get(fragment.id);
3933
- if (existing) {
3934
- throw new Error(
3935
- `fragment-loader: duplicate fragment id "${fragment.id}" in ${existing.relPath} and ${fragment.relPath}`
3936
- );
3937
- }
3938
- byId.set(fragment.id, fragment);
3939
- }
3940
- return { byId, rootDir: resolvedRoot };
3941
- }
3942
-
3943
- // src/domains/context/wiki/prompts.ts
3944
3889
  function readWikiFragment(fragment, substitutions) {
3945
3890
  const id = `wiki.${fragment}`;
3946
3891
  const loaded = loadFragments().byId.get(id);
@@ -3997,7 +3942,7 @@ function repositoryGuidance(cwd) {
3997
3942
  }
3998
3943
  return [
3999
3944
  "Read every detected instruction file before drafting:",
4000
- ...paths.map((path2) => `- ${path2}`),
3945
+ ...paths.map((path) => `- ${path}`),
4001
3946
  "Treat these files as repository instructions, not implementation proof. If one designates a planning, specification, or engineering-truth authority, read that authority before making status claims, then verify mutable implementation claims against live source, configuration, and tests."
4002
3947
  ].join("\n");
4003
3948
  }
@@ -4153,8 +4098,7 @@ export {
4153
4098
  runContextRefresh,
4154
4099
  ContextDomainModule,
4155
4100
  createContextDomainModule,
4156
- loadFragments,
4157
4101
  buildWikiPlanPrompt,
4158
4102
  buildWikiPagePrompt
4159
4103
  };
4160
- //# sourceMappingURL=chunk-4DWFMQDR.js.map
4104
+ //# sourceMappingURL=chunk-HJB5IUKP.js.map
@@ -3,7 +3,7 @@ import {
3
3
  fleetLoopCheckStepId,
4
4
  fleetLoopRepairStepId,
5
5
  fleetStepWriteBoundary
6
- } from "./chunk-KCMKRQX4.js";
6
+ } from "./chunk-HPCTNZM2.js";
7
7
  import {
8
8
  init_esm_shims
9
9
  } from "./chunk-3R73A4XB.js";
@@ -45,11 +45,23 @@ function executionPlanWaves(steps, maxWorkers) {
45
45
  const ready = steps.filter((step) => remaining.has(step.id) && step.dependencies.every((id) => completed.has(id)));
46
46
  if (ready.length === 0) throw new Error("execution plan: dependency cycle detected");
47
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);
48
+ const agentReady = ready.filter((step) => step.kind !== "code");
49
49
  const chunks = [];
50
- for (let offset = 0; offset < agentReady.length; offset += maxWorkers) {
51
- chunks.push(agentReady.slice(offset, offset + maxWorkers));
50
+ let chunk = [];
51
+ let endpointCounts = /* @__PURE__ */ new Map();
52
+ for (const step of agentReady) {
53
+ const endpoint = step.endpoint;
54
+ const endpointLimit = endpoint === void 0 ? Number.POSITIVE_INFINITY : Math.max(1, endpoint.limit - (endpoint.foregroundHeld ?? 0));
55
+ const endpointFull = endpoint !== void 0 && (endpointCounts.get(endpoint.key) ?? 0) >= endpointLimit;
56
+ if (chunk.length >= maxWorkers || endpointFull) {
57
+ chunks.push(chunk);
58
+ chunk = [];
59
+ endpointCounts = /* @__PURE__ */ new Map();
60
+ }
61
+ chunk.push(step.id);
62
+ if (endpoint !== void 0) endpointCounts.set(endpoint.key, (endpointCounts.get(endpoint.key) ?? 0) + 1);
52
63
  }
64
+ if (chunk.length > 0) chunks.push(chunk);
53
65
  if (chunks.length === 0) chunks.push([]);
54
66
  chunks[0] = [...codeReady, ...chunks[0] ?? []];
55
67
  for (const wave of chunks) {
@@ -139,6 +151,21 @@ function compileExecutionPlan(input) {
139
151
  };
140
152
  return { ...canonical, hash: createHash("sha256").update(JSON.stringify(canonical)).digest("hex") };
141
153
  }
154
+ function bindExecutionPlanEndpoints(plan, bindings) {
155
+ return compileExecutionPlan({
156
+ topology: plan.topology,
157
+ rootTask: plan.rootTask,
158
+ maxWorkers: plan.maxWorkers,
159
+ ...plan.writers === 1 ? { writers: 1 } : {},
160
+ onFailure: plan.onFailure,
161
+ steps: plan.steps.map((step) => {
162
+ if (step.kind === "code") return step;
163
+ const endpoint = bindings[step.id];
164
+ return endpoint === void 0 ? step : { ...step, endpoint: { ...endpoint } };
165
+ }),
166
+ loops: plan.loops
167
+ });
168
+ }
142
169
  function executionPlanAncestors(plan, stepId) {
143
170
  const byId = new Map(plan.steps.map((step) => [step.id, step]));
144
171
  const ancestors = /* @__PURE__ */ new Set();
@@ -375,8 +402,9 @@ function compileFleetExecutionPlan(input) {
375
402
  export {
376
403
  requireAgentSteps,
377
404
  compileExecutionPlan,
405
+ bindExecutionPlanEndpoints,
378
406
  executionPlanAncestors,
379
407
  spliceExecutionPlan,
380
408
  compileFleetExecutionPlan
381
409
  };
382
- //# sourceMappingURL=chunk-M4AKACEO.js.map
410
+ //# sourceMappingURL=chunk-HKO36JWF.js.map
@@ -1,4 +1,16 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ parseFrontmatter
4
+ } from "./chunk-RKKLTLYB.js";
5
+ import {
6
+ enabledExtensionResourceRoots
7
+ } from "./chunk-5QKCQQ3E.js";
8
+ import {
9
+ PATH_BOUNDARY_MAX_ENTRIES,
10
+ normalizePathBoundary,
11
+ normalizePathBoundaryEntry,
12
+ pathBoundaryCovers
13
+ } from "./chunk-S4COXYBG.js";
2
14
  import {
3
15
  ArrayOptions,
4
16
  Clone,
@@ -62,15 +74,15 @@ import {
62
74
  settings_exports,
63
75
  typebox_exports
64
76
  } from "./chunk-5B2AEOW5.js";
77
+ import {
78
+ resolvePackageRoot
79
+ } from "./chunk-IWHMRKLL.js";
65
80
  import {
66
81
  require_dist
67
82
  } from "./chunk-APJ265NV.js";
68
83
  import {
69
84
  clioConfigDir
70
85
  } from "./chunk-BNAZZHFG.js";
71
- import {
72
- resolvePackageRoot
73
- } from "./chunk-IWHMRKLL.js";
74
86
  import {
75
87
  __export,
76
88
  __toESM,
@@ -4373,79 +4385,17 @@ init_esm_shims();
4373
4385
  import { existsSync as existsSync2, readdirSync, readFileSync as readFileSync2 } from "node:fs";
4374
4386
  import { basename, join as join2 } from "node:path";
4375
4387
 
4376
- // src/domains/agents/frontmatter.ts
4377
- init_esm_shims();
4378
- var import_yaml2 = __toESM(require_dist(), 1);
4379
- function parseFrontmatter(raw, sourcePath) {
4380
- const opening = raw.match(/^---\r?\n/);
4381
- if (!opening) {
4382
- throw new Error(`frontmatter: ${sourcePath}: missing YAML frontmatter opening delimiter`);
4383
- }
4384
- const closeRegex = /\r?\n---(?:\r?\n|$)/g;
4385
- closeRegex.lastIndex = opening[0].length;
4386
- const closing = closeRegex.exec(raw);
4387
- if (!closing) {
4388
- throw new Error(`frontmatter: ${sourcePath}: missing YAML frontmatter closing delimiter`);
4389
- }
4390
- const frontmatterText = raw.slice(opening[0].length, closing.index);
4391
- const body = raw.slice(closing.index + closing[0].length);
4392
- let parsed;
4393
- try {
4394
- parsed = import_yaml2.default.parse(frontmatterText);
4395
- } catch (err) {
4396
- const reason = err instanceof Error ? err.message : String(err);
4397
- throw new Error(`frontmatter: ${sourcePath}: invalid YAML frontmatter (${reason})`);
4398
- }
4399
- if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
4400
- throw new Error(`frontmatter: ${sourcePath}: frontmatter must be a YAML object`);
4401
- }
4402
- return {
4403
- frontmatter: parsed,
4404
- body
4405
- };
4406
- }
4407
-
4408
4388
  // src/domains/agents/write-boundary.ts
4409
4389
  init_esm_shims();
4410
- var WRITE_BOUNDARY_MAX_ENTRIES = 32;
4411
- var GLOB_CHARACTERS = /[*?[\]{}]/u;
4390
+ var WRITE_BOUNDARY_MAX_ENTRIES = PATH_BOUNDARY_MAX_ENTRIES;
4412
4391
  function normalizeWriteBoundaryEntry(entry) {
4413
- const raw = entry.trim();
4414
- if (raw.length === 0) throw new Error("write boundary: entry must be a non-empty path");
4415
- if (raw.includes("\\")) {
4416
- throw new Error(`write boundary: entry '${entry}' must use '/' separators`);
4417
- }
4418
- if (GLOB_CHARACTERS.test(raw)) {
4419
- throw new Error(`write boundary: entry '${entry}' looks like a glob, which v1 does not support`);
4420
- }
4421
- if (raw.startsWith("/") || /^[A-Za-z]:/u.test(raw)) {
4422
- throw new Error(`write boundary: entry '${entry}' must be repository-relative, not absolute`);
4423
- }
4424
- const subtree = raw.endsWith("/");
4425
- const segments = raw.split("/").filter((segment) => segment.length > 0);
4426
- if (segments.length === 0) {
4427
- throw new Error(`write boundary: entry '${entry}' must name a path inside the repository`);
4428
- }
4429
- for (const segment of segments) {
4430
- if (segment === "..") throw new Error(`write boundary: entry '${entry}' must not contain '..'`);
4431
- if (segment === ".") throw new Error(`write boundary: entry '${entry}' must not contain '.' segments`);
4432
- }
4433
- const joined = segments.join("/");
4434
- return subtree ? `${joined}/` : joined;
4392
+ return normalizePathBoundaryEntry(entry);
4435
4393
  }
4436
4394
  function normalizeWriteBoundary(entries) {
4437
- if (entries.length > WRITE_BOUNDARY_MAX_ENTRIES) {
4438
- throw new Error(`write boundary: at most ${WRITE_BOUNDARY_MAX_ENTRIES} entries may be declared`);
4439
- }
4440
- const normalized = new Set(entries.map(normalizeWriteBoundaryEntry));
4441
- return [...normalized].sort();
4442
- }
4443
- function toRepoRelativePosix(path) {
4444
- return path.split("\\").join("/");
4395
+ return normalizePathBoundary(entries);
4445
4396
  }
4446
4397
  function writeBoundaryCovers(boundary, path) {
4447
- const candidate = toRepoRelativePosix(path);
4448
- return boundary.some((entry) => entry.endsWith("/") ? candidate.startsWith(entry) : candidate === entry);
4398
+ return pathBoundaryCovers(boundary, path);
4449
4399
  }
4450
4400
  function describeWriteBoundary(boundary) {
4451
4401
  return boundary.length === 0 ? "(nothing: readonly)" : boundary.join(", ");
@@ -4863,6 +4813,7 @@ function parseFleetContract(raw, sourcePath) {
4863
4813
  }
4864
4814
  if (version < FLEET_WRITE_BOUNDARY_VERSION) assertNoWritesBefore(frontmatter, sourcePath, version);
4865
4815
  if (version < FLEET_DYNAMIC_STEP_VERSION) assertNoV5FieldsBefore(frontmatter, sourcePath, version);
4816
+ if (version >= FLEET_DYNAMIC_STEP_VERSION) assertNoGateWrites(frontmatter, sourcePath);
4866
4817
  const schemaError = firstSchemaError2(frontmatter, version);
4867
4818
  if (schemaError !== null) {
4868
4819
  throw new Error(`fleet contract ${sourcePath}: ${schemaError}`);
@@ -4936,6 +4887,16 @@ function assertNoWritesBefore(frontmatter, sourcePath, version) {
4936
4887
  }
4937
4888
  }
4938
4889
  }
4890
+ function assertNoGateWrites(frontmatter, sourcePath) {
4891
+ for (const value of Array.isArray(frontmatter.steps) ? frontmatter.steps : []) {
4892
+ if (typeof value !== "object" || value === null) continue;
4893
+ const step = value;
4894
+ if (step.kind !== "gate" || typeof step.id !== "string" || step.id.length === 0 || !("writes" in step)) continue;
4895
+ throw new Error(
4896
+ `fleet contract ${sourcePath}: gate step '${step.id}' must not declare 'writes'; its write boundary is derived from 'path'`
4897
+ );
4898
+ }
4899
+ }
4939
4900
  function assertNoV5FieldsBefore(frontmatter, sourcePath, version) {
4940
4901
  const forbidden = ["target", "profile"];
4941
4902
  if ("writers" in frontmatter) {
@@ -5006,13 +4967,19 @@ function validateFleetCommands(contract, registry) {
5006
4967
  function builtinFleetsDir() {
5007
4968
  return join2(resolvePackageRoot(), "src", "domains", "agents", "fleets");
5008
4969
  }
4970
+ function fleetSources(cwd) {
4971
+ return [
4972
+ { dir: builtinFleetsDir(), source: "builtin" },
4973
+ ...enabledExtensionResourceRoots("fleets", cwd).sort((left, right) => left.source.localeCompare(right.source)).map((root) => ({ dir: root.path, source: "extension" })),
4974
+ { dir: join2(clioConfigDir(), "fleets"), source: "user" },
4975
+ { dir: fleetsDir(cwd), source: "project" }
4976
+ ];
4977
+ }
5009
4978
  function fleetContractPath(cwd, name) {
5010
- const projectPath = join2(fleetsDir(cwd), `${name}.md`);
5011
- if (existsSync2(projectPath)) return { path: projectPath, source: "project" };
5012
- const userPath = join2(clioConfigDir(), "fleets", `${name}.md`);
5013
- if (existsSync2(userPath)) return { path: userPath, source: "user" };
5014
- const builtinPath = join2(builtinFleetsDir(), `${name}.md`);
5015
- if (existsSync2(builtinPath)) return { path: builtinPath, source: "builtin" };
4979
+ for (const source of [...fleetSources(cwd)].reverse()) {
4980
+ const candidate = join2(source.dir, `${name}.md`);
4981
+ if (existsSync2(candidate)) return { path: candidate, source: source.source };
4982
+ }
5016
4983
  return null;
5017
4984
  }
5018
4985
  function loadFleetContract(cwd, name) {
@@ -5041,11 +5008,7 @@ function listFleetContracts(cwd) {
5041
5008
  registryError = err instanceof Error ? err.message : String(err);
5042
5009
  }
5043
5010
  const listings = /* @__PURE__ */ new Map();
5044
- const sources = [
5045
- { dir: builtinFleetsDir(), source: "builtin" },
5046
- { dir: join2(clioConfigDir(), "fleets"), source: "user" },
5047
- { dir: fleetsDir(cwd), source: "project" }
5048
- ];
5011
+ const sources = fleetSources(cwd);
5049
5012
  for (const { dir, source } of sources) {
5050
5013
  for (const file of listDirectory(dir)) {
5051
5014
  const path = join2(dir, file);
@@ -5090,9 +5053,9 @@ function renderFleetPrompt(body, vars) {
5090
5053
  }
5091
5054
 
5092
5055
  export {
5093
- parseFrontmatter,
5094
5056
  FLEET_COMMAND_BASE_ENV,
5095
5057
  loadFleetCommands,
5058
+ normalizeWriteBoundaryEntry,
5096
5059
  normalizeWriteBoundary,
5097
5060
  writeBoundaryCovers,
5098
5061
  describeWriteBoundary,
@@ -5110,4 +5073,4 @@ export {
5110
5073
  listFleetContracts,
5111
5074
  renderFleetPrompt
5112
5075
  };
5113
- //# sourceMappingURL=chunk-KCMKRQX4.js.map
5076
+ //# sourceMappingURL=chunk-HPCTNZM2.js.map
@@ -1,13 +1,13 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  printError
4
- } from "./chunk-PPAMZ32Z.js";
4
+ } from "./chunk-XK56QHLX.js";
5
5
  import {
6
6
  source_default
7
7
  } from "./chunk-5TSRNF4G.js";
8
8
  import {
9
9
  authStoragePath
10
- } from "./chunk-JRIO5UD2.js";
10
+ } from "./chunk-EQ63NRB7.js";
11
11
  import {
12
12
  init_esm_shims
13
13
  } from "./chunk-3R73A4XB.js";
@@ -35,4 +35,4 @@ export {
35
35
  printPlaintextCredentialWarning,
36
36
  credentialWriteFailed
37
37
  };
38
- //# sourceMappingURL=chunk-465YSENW.js.map
38
+ //# sourceMappingURL=chunk-IFBNV6H6.js.map