@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
@@ -150,10 +150,13 @@ function readOutOfTurnUsageRows(stateDir) {
150
150
  function asOutOfTurnUsageRow(value) {
151
151
  if (!isRecord(value)) return null;
152
152
  const label = value.label;
153
- if (label !== "side-question" && label !== "handoff") return null;
153
+ if (label !== "side-question" && label !== "handoff" && label !== "prewarm" && label !== "background-memory")
154
+ return null;
154
155
  if (typeof value.timestamp !== "string" || value.timestamp.length === 0) return null;
155
156
  if (!isRecord(value.usage)) return null;
156
157
  const usage = value.usage;
158
+ const timing = asTiming(value.timing);
159
+ const promptCache = asPromptCache(value.promptCache);
157
160
  return {
158
161
  label,
159
162
  sessionId: typeof value.sessionId === "string" ? value.sessionId : null,
@@ -170,7 +173,25 @@ function asOutOfTurnUsageRow(value) {
170
173
  totalTokens: numberOr0(usage.totalTokens),
171
174
  costUsd: numberOr0(usage.costUsd),
172
175
  costProvenance: asCostProvenance(usage.costProvenance)
173
- }
176
+ },
177
+ ...timing === null ? {} : { timing },
178
+ ...promptCache === null ? {} : { promptCache }
179
+ };
180
+ }
181
+ function asTiming(value) {
182
+ if (!isRecord(value)) return null;
183
+ const durationMs = numberOr0(value.durationMs);
184
+ return durationMs === 0 ? null : { durationMs };
185
+ }
186
+ function asPromptCache(value) {
187
+ if (!isRecord(value)) return null;
188
+ if (typeof value.source !== "string" || value.source.length === 0) return null;
189
+ return {
190
+ promptTokens: numberOr0(value.promptTokens),
191
+ cachedTokens: typeof value.cachedTokens === "number" ? value.cachedTokens : null,
192
+ uncachedPrefillTokens: typeof value.uncachedPrefillTokens === "number" ? value.uncachedPrefillTokens : null,
193
+ promptMs: numberOr0(value.promptMs),
194
+ source: value.source
174
195
  };
175
196
  }
176
197
  function asCostProvenance(value) {
@@ -192,4 +213,4 @@ export {
192
213
  appendOutOfTurnUsageRow,
193
214
  readOutOfTurnUsageRows
194
215
  };
195
- //# sourceMappingURL=chunk-GWS3VEIW.js.map
216
+ //# sourceMappingURL=chunk-FWDFM5ZU.js.map
@@ -7,17 +7,17 @@ import {
7
7
  TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS,
8
8
  runTaskMemoryPolicy,
9
9
  taskMemoryBankDelta
10
- } from "./chunk-WHGPSPT5.js";
10
+ } from "./chunk-O6I4CIEU.js";
11
11
  import {
12
12
  isTerminalRunEnvelope
13
- } from "./chunk-CEYBNUGC.js";
13
+ } from "./chunk-4H6ULJ3H.js";
14
14
  import {
15
15
  taskBoardCounts
16
- } from "./chunk-5FR74PWO.js";
16
+ } from "./chunk-2JDWVJND.js";
17
17
  import {
18
18
  SKILL_SUGGESTION_ANCHOR,
19
19
  SKILL_SUGGESTION_PREFIX
20
- } from "./chunk-GOXNB3AO.js";
20
+ } from "./chunk-RAPCMZL4.js";
21
21
  import {
22
22
  legacyToolResultDigest,
23
23
  sanitizeToolResultDigest
@@ -25,13 +25,19 @@ import {
25
25
  import {
26
26
  ToolNames
27
27
  } from "./chunk-CGKSTWHD.js";
28
+ import {
29
+ registerForegroundStream
30
+ } from "./chunk-MIX5N5AC.js";
28
31
  import {
29
32
  ceilChars
30
- } from "./chunk-GEYXPTRF.js";
33
+ } from "./chunk-AEYBF3TB.js";
31
34
  import {
32
35
  reportCommitAttributionDiagnostic,
33
36
  withManagedGitCommitAttributionEnvironment
34
- } from "./chunk-D4MDIG46.js";
37
+ } from "./chunk-B5CSFE7B.js";
38
+ import {
39
+ BusChannels
40
+ } from "./chunk-RKRLDWD3.js";
35
41
  import {
36
42
  require_dist
37
43
  } from "./chunk-APJ265NV.js";
@@ -1559,6 +1565,7 @@ function createMemoryInterventionRegistration(deps) {
1559
1565
  reminder: null,
1560
1566
  inputTokens: 0,
1561
1567
  outputTokens: 0,
1568
+ usage: null,
1562
1569
  effects: NO_EFFECTS
1563
1570
  });
1564
1571
  const live = settings();
@@ -1572,10 +1579,16 @@ function createMemoryInterventionRegistration(deps) {
1572
1579
  let tier = "rules";
1573
1580
  promptedStepTier = tier;
1574
1581
  let promptedResult;
1582
+ let telemetryDecision = null;
1575
1583
  try {
1576
1584
  const client = deps.getModelClient?.() ?? null;
1577
1585
  if (client === null) {
1578
1586
  promptedResult = silent("no_client");
1587
+ } else if (deps.backgroundEndpointBusy?.() === true) {
1588
+ tier = "llm";
1589
+ promptedStepTier = tier;
1590
+ promptedResult = silent("endpoint_busy");
1591
+ telemetryDecision = "dropped";
1579
1592
  } else {
1580
1593
  tier = "llm";
1581
1594
  promptedStepTier = tier;
@@ -1605,10 +1618,17 @@ function createMemoryInterventionRegistration(deps) {
1605
1618
  });
1606
1619
  }
1607
1620
  lastDecision = promptedResult.decision;
1621
+ if (promptedResult.usage !== null) {
1622
+ try {
1623
+ deps.onStepUsage?.(promptedResult.usage);
1624
+ } catch {
1625
+ }
1626
+ }
1627
+ if (promptedResult.decision === "injected") reportInjectedEntries(promptedResult.reminder);
1608
1628
  emitTelemetry(
1609
1629
  triggers,
1610
1630
  tier,
1611
- promptedResult.decision,
1631
+ telemetryDecision ?? promptedResult.decision,
1612
1632
  promptedResult.reason,
1613
1633
  citedEntryCount(promptedResult.reminder),
1614
1634
  promptedResult.inputTokens,
@@ -1621,7 +1641,7 @@ function createMemoryInterventionRegistration(deps) {
1621
1641
  effects: promptedResult.reminder === null ? NO_EFFECTS : [{ kind: "inject_reminder", message: promptedResult.reminder, severity: "advisory" }]
1622
1642
  };
1623
1643
  }
1624
- function emitTelemetry(triggerReasons, tier, decision, reason, citedEntries, inputTokens, outputTokens, started, operations = { bankOperations: 0, droppedOperations: 0 }) {
1644
+ function emitTelemetry(triggerReasons, tier, decision, reason, citedEntries2, inputTokens, outputTokens, started, operations = { bankOperations: 0, droppedOperations: 0 }) {
1625
1645
  const next = deps.bank.snapshot();
1626
1646
  const bankDelta = taskMemoryBankDelta(telemetryBankSnapshot, next);
1627
1647
  telemetryBankSnapshot = next;
@@ -1635,7 +1655,7 @@ function createMemoryInterventionRegistration(deps) {
1635
1655
  reason,
1636
1656
  bankOperations: operations.bankOperations,
1637
1657
  droppedOperations: operations.droppedOperations,
1638
- citedEntries,
1658
+ citedEntries: citedEntries2,
1639
1659
  inputTokens,
1640
1660
  outputTokens,
1641
1661
  latencyMs
@@ -1648,17 +1668,29 @@ function createMemoryInterventionRegistration(deps) {
1648
1668
  tier,
1649
1669
  decision,
1650
1670
  reason,
1651
- citedEntries,
1671
+ citedEntries: citedEntries2,
1652
1672
  bankWrites: countBankWrites(bankDelta),
1653
1673
  latencyMs
1654
1674
  };
1655
1675
  activity.unshift(event);
1656
1676
  if (activity.length > MEMORY_INTERVENTION_ACTIVITY_LIMIT) activity.length = MEMORY_INTERVENTION_ACTIVITY_LIMIT;
1657
1677
  }
1658
- function citedEntryCount(message) {
1659
- if (message === null) return 0;
1678
+ function citedEntries(message) {
1679
+ if (message === null) return [];
1660
1680
  const snapshot = deps.bank.snapshot();
1661
- return [...snapshot.knowledge, ...snapshot.procedural].filter((entry) => message.includes(`[${entry.id}]`)).length;
1681
+ return [...snapshot.knowledge, ...snapshot.procedural].filter((entry) => message.includes(`[${entry.id}]`));
1682
+ }
1683
+ function citedEntryCount(message) {
1684
+ return citedEntries(message).length;
1685
+ }
1686
+ function reportInjectedEntries(reminder) {
1687
+ if (deps.onInjectedEntries === void 0) return;
1688
+ const entries = citedEntries(reminder);
1689
+ if (entries.length === 0) return;
1690
+ try {
1691
+ deps.onInjectedEntries(entries);
1692
+ } catch {
1693
+ }
1662
1694
  }
1663
1695
  function observeBeforeTool(input) {
1664
1696
  const prepared = prepareToolStep(input);
@@ -1867,6 +1899,27 @@ function setBounded(map, key, value, capacity) {
1867
1899
  map.set(key, value);
1868
1900
  }
1869
1901
 
1902
+ // src/domains/middleware/memory-step-endpoint.ts
1903
+ init_esm_shims();
1904
+ function announceMemoryStepEndpoint(deps, complete) {
1905
+ const { bus, endpointKey, targetId } = deps;
1906
+ if (endpointKey === null) return complete;
1907
+ return async (request) => {
1908
+ const releaseEndpointSlot = registerForegroundStream(endpointKey);
1909
+ try {
1910
+ return await complete(request);
1911
+ } finally {
1912
+ releaseEndpointSlot();
1913
+ if (bus !== null) {
1914
+ try {
1915
+ bus.emit(BusChannels.MemoryStepCompleted, { endpointKey, targetId });
1916
+ } catch {
1917
+ }
1918
+ }
1919
+ }
1920
+ };
1921
+ }
1922
+
1870
1923
  // src/domains/middleware/skills-reminder.ts
1871
1924
  init_esm_shims();
1872
1925
  var SKILLS_REMINDER_REGISTRATION_ID = "observer.skills-reminder";
@@ -2395,6 +2448,7 @@ export {
2395
2448
  readHookSources,
2396
2449
  installUserHooks,
2397
2450
  createMemoryInterventionRegistration,
2451
+ announceMemoryStepEndpoint,
2398
2452
  createSkillsReminderRegistration,
2399
2453
  createTaskBoardReminderRegistration,
2400
2454
  createTaskNudgeRegistration,
@@ -2404,4 +2458,4 @@ export {
2404
2458
  createWatchdogRegistration,
2405
2459
  MiddlewareDomainModule
2406
2460
  };
2407
- //# sourceMappingURL=chunk-XEGB6BCN.js.map
2461
+ //# sourceMappingURL=chunk-GAYUJ7LE.js.map
@@ -51,7 +51,7 @@ function gateDeciderAgentId(requested) {
51
51
  return trimmed.length > 0 ? trimmed : DEFAULT_GATE_DECIDER_AGENT_ID;
52
52
  }
53
53
  function appliesRecipeResultContract(gateRole) {
54
- return gateRole !== "reviewer" && gateRole !== "judge";
54
+ return gateRole !== "reviewer" && gateRole !== "judge" && gateRole !== "synthesis";
55
55
  }
56
56
  function routeCorrelationFactsForRun(run) {
57
57
  return {
@@ -100,4 +100,4 @@ export {
100
100
  routeCorrelationFactsForRun,
101
101
  gateRouteCorrelation
102
102
  };
103
- //# sourceMappingURL=chunk-UND3GU2L.js.map
103
+ //# sourceMappingURL=chunk-H7IXIC72.js.map
@@ -1,4 +1,9 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ asDirectoryPathBoundary,
4
+ pathBoundaryEntryCovers,
5
+ resolvePathBoundary
6
+ } from "./chunk-S4COXYBG.js";
2
7
  import {
3
8
  init_esm_shims
4
9
  } from "./chunk-3R73A4XB.js";
@@ -7,21 +12,16 @@ import {
7
12
  init_esm_shims();
8
13
  import path from "node:path";
9
14
  function normalizeRoot(root) {
10
- return path.resolve(root);
11
- }
12
- function isUnder(child, parent) {
13
- const c = normalizeRoot(child);
14
- const p = normalizeRoot(parent);
15
- if (c === p) return true;
16
- const rel = path.relative(p, c);
17
- return rel !== "" && !rel.startsWith("..") && !path.isAbsolute(rel);
15
+ return resolvePathBoundary(process.cwd(), root);
18
16
  }
19
17
  function isSubset(worker, orchestrator) {
20
18
  for (const action of worker.allowedActions) {
21
19
  if (!orchestrator.allowedActions.has(action)) return false;
22
20
  }
23
21
  for (const root of worker.allowedWriteRoots) {
24
- const covered = orchestrator.allowedWriteRoots.some((outer) => isUnder(root, outer));
22
+ const covered = orchestrator.allowedWriteRoots.some(
23
+ (outer) => pathBoundaryEntryCovers(normalizeRoot(outer), normalizeRoot(root))
24
+ );
25
25
  if (!covered) return false;
26
26
  }
27
27
  if (worker.allowNetwork && !orchestrator.allowNetwork) return false;
@@ -36,13 +36,13 @@ var READONLY_SCOPE = {
36
36
  };
37
37
  var WORKSPACE_SCOPE = {
38
38
  allowedActions: /* @__PURE__ */ new Set(["read", "write", "execute", "dispatch"]),
39
- allowedWriteRoots: [process.cwd()],
39
+ allowedWriteRoots: [asDirectoryPathBoundary(path.resolve(process.cwd()))],
40
40
  allowNetwork: true,
41
41
  allowDispatch: true
42
42
  };
43
43
  var CONFIRMED_SCOPE = {
44
44
  allowedActions: /* @__PURE__ */ new Set(["read", "write", "execute", "dispatch", "system_modify"]),
45
- allowedWriteRoots: [process.cwd()],
45
+ allowedWriteRoots: [asDirectoryPathBoundary(path.resolve(process.cwd()))],
46
46
  allowNetwork: true,
47
47
  allowDispatch: true
48
48
  };
@@ -53,4 +53,4 @@ export {
53
53
  WORKSPACE_SCOPE,
54
54
  CONFIRMED_SCOPE
55
55
  };
56
- //# sourceMappingURL=chunk-IR4CFBFN.js.map
56
+ //# sourceMappingURL=chunk-HAY4ZE2P.js.map
@@ -1,16 +1,13 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
- import {
3
- assertAgentIdNamespace
4
- } from "./chunk-DR52UMZW.js";
5
2
  import {
6
3
  loadSkills
7
- } from "./chunk-C4JBQ5SR.js";
4
+ } from "./chunk-AD7Y7STJ.js";
8
5
  import {
9
6
  parseFrontmatter
10
- } from "./chunk-KCMKRQX4.js";
7
+ } from "./chunk-RKKLTLYB.js";
11
8
  import {
12
- parseResultContract
13
- } from "./chunk-DJNLUABN.js";
9
+ enabledExtensionResourceRoots
10
+ } from "./chunk-5QKCQQ3E.js";
14
11
  import {
15
12
  assertAgentSpecPolicy,
16
13
  isAgentAudience,
@@ -20,30 +17,19 @@ import {
20
17
  isAgentProduct,
21
18
  isAgentProjectContextTier,
22
19
  isShadowAgent,
23
- normalizeAgentSpec
24
- } from "./chunk-AOCYTWAV.js";
25
- import {
26
- clioConfigDir
27
- } from "./chunk-BNAZZHFG.js";
20
+ normalizeAgentSpec,
21
+ parseResultContract
22
+ } from "./chunk-S4COXYBG.js";
28
23
  import {
29
24
  resolvePackageRoot
30
25
  } from "./chunk-IWHMRKLL.js";
26
+ import {
27
+ clioConfigDir
28
+ } from "./chunk-BNAZZHFG.js";
31
29
  import {
32
30
  init_esm_shims
33
31
  } from "./chunk-3R73A4XB.js";
34
32
 
35
- // src/domains/agents/index.ts
36
- init_esm_shims();
37
-
38
- // src/domains/agents/extension.ts
39
- init_esm_shims();
40
- import path3 from "node:path";
41
-
42
- // src/domains/agents/registry.ts
43
- init_esm_shims();
44
- import { existsSync, readdirSync, readFileSync } from "node:fs";
45
- import path2 from "node:path";
46
-
47
33
  // src/domains/agents/recipe.ts
48
34
  init_esm_shims();
49
35
  import path from "node:path";
@@ -144,19 +130,19 @@ var RECIPE_KEYS = [
144
130
  ];
145
131
  var OPTIONAL_RECIPE_KEYS = ["product"];
146
132
  var ALL_RECIPE_KEYS = [...RECIPE_KEYS, ...OPTIONAL_RECIPE_KEYS];
147
- function requiredString(value, path4) {
133
+ function requiredString(value, path3) {
148
134
  if (typeof value !== "string" || value.trim().length === 0)
149
- throw new Error(`agent recipe: ${path4} must be a non-empty string`);
135
+ throw new Error(`agent recipe: ${path3} must be a non-empty string`);
150
136
  return value;
151
137
  }
152
- function requiredStringArray(value, path4) {
153
- if (!Array.isArray(value)) throw new Error(`agent recipe: ${path4} must be an array of strings`);
154
- const entries = value.map((entry, index) => requiredString(entry, `${path4}[${index}]`));
155
- if (new Set(entries).size !== entries.length) throw new Error(`agent recipe: ${path4} must not contain duplicates`);
138
+ function requiredStringArray(value, path3) {
139
+ if (!Array.isArray(value)) throw new Error(`agent recipe: ${path3} must be an array of strings`);
140
+ const entries = value.map((entry, index) => requiredString(entry, `${path3}[${index}]`));
141
+ if (new Set(entries).size !== entries.length) throw new Error(`agent recipe: ${path3} must not contain duplicates`);
156
142
  return entries;
157
143
  }
158
- function enumValue(value, path4, predicate) {
159
- if (!predicate(value)) throw new Error(`agent recipe: ${path4} has an unsupported value`);
144
+ function enumValue(value, path3, predicate) {
145
+ if (!predicate(value)) throw new Error(`agent recipe: ${path3} has an unsupported value`);
160
146
  return value;
161
147
  }
162
148
  function parseAudience(value, source, filepath) {
@@ -266,14 +252,33 @@ function parseAgentRecipeSchema(input) {
266
252
  }
267
253
 
268
254
  // src/domains/agents/registry.ts
255
+ init_esm_shims();
256
+ import { existsSync, readdirSync, readFileSync, realpathSync } from "node:fs";
257
+ import path2 from "node:path";
269
258
  var RESERVED_CUSTOM_AGENT_IDS = /* @__PURE__ */ new Set(["worker", "delegate", "auto"]);
270
259
  function resolveBoundSkills(recipe, source) {
271
260
  if (recipe.skills.length === 0) return { ...recipe, boundSkillPaths: [] };
272
261
  const packageSkills = path2.resolve(source.dir, "..", "..", "..", "..", "skills");
273
- const skills = loadSkills({
274
- cwd: process.cwd(),
262
+ if (source.source === "extension" && source.skillRoot === void 0) {
263
+ throw new Error(`agent recipe: ${recipe.filepath}: extension declares bound skills but no skills resource root`);
264
+ }
265
+ const skills = source.source === "extension" ? loadSkills({
266
+ cwd: source.cwd ?? process.cwd(),
267
+ disableDiscovery: true,
268
+ explicitSkillPaths: source.skillRoot === void 0 ? [] : [source.skillRoot]
269
+ }) : loadSkills({
270
+ cwd: source.cwd ?? process.cwd(),
275
271
  ...source.source === "builtin" && existsSync(packageSkills) ? { explicitSkillPaths: [packageSkills] } : {}
276
272
  });
273
+ if (source.source === "extension" && source.skillRoot !== void 0) {
274
+ const canonicalRoot = realpathSync(source.skillRoot);
275
+ for (const skill of skills.items) {
276
+ const relative = path2.relative(canonicalRoot, realpathSync(skill.filePath));
277
+ if (relative === ".." || relative.startsWith(`..${path2.sep}`) || path2.isAbsolute(relative)) {
278
+ throw new Error(`agent recipe: ${recipe.filepath}: bound skill escapes its extension: ${skill.filePath}`);
279
+ }
280
+ }
281
+ }
277
282
  const byName = new Map(skills.items.map((skill) => [skill.name, skill.filePath]));
278
283
  const missing = recipe.skills.filter((skill) => !byName.has(skill));
279
284
  if (missing.length > 0) {
@@ -334,6 +339,11 @@ function mergeRecipes(...sources) {
334
339
  continue;
335
340
  }
336
341
  const builtin = builtinById.get(recipe.id);
342
+ if (recipe.source === "extension" && builtin) {
343
+ process.stderr.write(`[clio:agents] ignore override id=${recipe.id} by=extension reason=reserved-builtin
344
+ `);
345
+ continue;
346
+ }
337
347
  if (recipe.source === "user" && builtin && isShadowAgent(normalizeAgentSpec(builtin))) {
338
348
  process.stderr.write(`[clio:agents] ignore override id=${recipe.id} by=user reason=reserved-shadow
339
349
  `);
@@ -351,122 +361,39 @@ function mergeRecipes(...sources) {
351
361
  }
352
362
  return Array.from(byId.values()).sort((left, right) => left.id.localeCompare(right.id));
353
363
  }
354
-
355
- // src/domains/agents/extension.ts
356
- function createAgentsBundle(_context) {
357
- let recipes = [];
358
- let specs = [];
359
- let diagnostics = [];
360
- function discover() {
361
- const builtinDir = path3.join(resolvePackageRoot(), "src", "domains", "agents", "builtins");
362
- const userDir = path3.join(clioConfigDir(), "agents");
363
- const projectDir = path3.join(process.cwd(), ".clio-coder", "agents");
364
- const nextDiagnostics = [];
365
- const builtin = loadRecipesFromDir({ dir: builtinDir, source: "builtin" }, nextDiagnostics);
366
- const user = loadRecipesFromDir({ dir: userDir, source: "user" }, nextDiagnostics);
367
- const project = loadRecipesFromDir({ dir: projectDir, source: "project" }, nextDiagnostics);
368
- const merged = mergeRecipes(builtin, user, project);
369
- const config = _context.getContract("config");
370
- assertAgentIdNamespace(merged, config?.get()?.delegation?.agents ?? []);
371
- recipes = merged;
372
- specs = recipes.map(normalizeAgentSpec);
373
- diagnostics = nextDiagnostics;
374
- }
375
- const extension = {
376
- async start() {
377
- discover();
378
- },
379
- async stop() {
380
- }
381
- };
382
- const contract = {
383
- list() {
384
- return recipes;
385
- },
386
- get(id) {
387
- return recipes.find((r) => r.id === id) ?? null;
388
- },
389
- diagnostics() {
390
- return diagnostics.map((diagnostic) => ({ ...diagnostic }));
391
- },
392
- listSpecs() {
393
- const config = _context.getContract("config");
394
- const delegationAgents = config?.get()?.delegation?.agents ?? [];
395
- const delegationSpecs = delegationAgents.map((agent) => ({
396
- version: 1,
397
- id: agent.id,
398
- name: agent.id,
399
- description: `External ACP delegation agent: ${agent.command} ${(agent.args ?? []).join(" ")}`,
400
- source: "custom",
401
- filepath: "settings.yaml",
402
- tools: [],
403
- toolRequirements: { required: [], optional: [] },
404
- category: "explore",
405
- capabilityClass: "orchestration",
406
- latencyClass: "deep",
407
- projectContextTier: "none",
408
- audience: "custom",
409
- tags: ["delegation", "acp"],
410
- skills: [],
411
- resultContract: { kind: "external-delegation" },
412
- budget: { toolCalls: 1, readReserve: 0, synthesis: false },
413
- body: "External ACP delegation."
414
- }));
415
- return [...specs, ...delegationSpecs];
416
- },
417
- getSpec(id) {
418
- const found = specs.find((r) => r.id === id);
419
- if (found) return found;
420
- const config = _context.getContract("config");
421
- const agent = config?.get()?.delegation?.agents?.find((entry) => entry.id === id);
422
- if (agent) {
423
- return {
424
- version: 1,
425
- id: agent.id,
426
- name: agent.id,
427
- description: `External ACP delegation agent: ${agent.command} ${(agent.args ?? []).join(" ")}`,
428
- source: "custom",
429
- filepath: "settings.yaml",
430
- tools: [],
431
- toolRequirements: { required: [], optional: [] },
432
- category: "explore",
433
- capabilityClass: "orchestration",
434
- latencyClass: "deep",
435
- projectContextTier: "none",
436
- audience: "custom",
437
- tags: ["delegation", "acp"],
438
- skills: [],
439
- resultContract: { kind: "external-delegation" },
440
- budget: { toolCalls: 1, readReserve: 0, synthesis: false },
441
- body: "External ACP delegation."
442
- };
443
- }
444
- return null;
364
+ function discoverAgentRecipes(cwd = process.cwd(), diagnostics = []) {
365
+ const builtin = loadRecipesFromDir(
366
+ {
367
+ dir: path2.join(resolvePackageRoot(), "src", "domains", "agents", "builtins"),
368
+ source: "builtin",
369
+ cwd
445
370
  },
446
- reload() {
447
- discover();
448
- }
449
- };
450
- return { extension, contract };
371
+ diagnostics
372
+ );
373
+ const skillRoots = new Map(enabledExtensionResourceRoots("skills", cwd).map((root) => [root.source, root.path]));
374
+ const extensionRecipes = enabledExtensionResourceRoots("agents", cwd).sort((left, right) => left.source.localeCompare(right.source)).map((root) => {
375
+ const skillRoot = skillRoots.get(root.source);
376
+ return loadRecipesFromDir(
377
+ {
378
+ dir: root.path,
379
+ source: "extension",
380
+ cwd,
381
+ origin: root.source,
382
+ ...skillRoot === void 0 ? {} : { skillRoot }
383
+ },
384
+ diagnostics
385
+ );
386
+ });
387
+ const user = loadRecipesFromDir({ dir: path2.join(clioConfigDir(), "agents"), source: "user", cwd }, diagnostics);
388
+ const project = loadRecipesFromDir(
389
+ { dir: path2.join(cwd, ".clio-coder", "agents"), source: "project", cwd },
390
+ diagnostics
391
+ );
392
+ return mergeRecipes(builtin, ...extensionRecipes, user, project);
451
393
  }
452
394
 
453
- // src/domains/agents/manifest.ts
454
- init_esm_shims();
455
- var AgentsManifest = {
456
- name: "agents",
457
- dependsOn: ["config"]
458
- };
459
-
460
- // src/domains/agents/index.ts
461
- var AgentsDomainModule = {
462
- manifest: AgentsManifest,
463
- createExtension: createAgentsBundle
464
- };
465
-
466
395
  export {
467
396
  parseAgentRecipeSchema,
468
- loadRecipesFromDir,
469
- mergeRecipes,
470
- AgentsDomainModule
397
+ discoverAgentRecipes
471
398
  };
472
- //# sourceMappingURL=chunk-UVDSQ6LW.js.map
399
+ //# sourceMappingURL=chunk-HCBCAYZU.js.map