@iowarp/clio-coder 0.3.6 → 0.3.8

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 (323) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +22 -6
  3. package/dist/{acp-2BEHC4DL.js → acp-U67UHUK2.js} +14 -14
  4. package/dist/{agents-LNNFTM53.js → agents-YU6SGALZ.js} +42 -35
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-KXXFI2VS.js → auth-5ZPJOIVG.js} +32 -24
  7. package/dist/builtins-C6JMZVV6.js +17 -0
  8. package/dist/{chunk-E25LMLRW.js → chunk-26LEYJZH.js} +2 -2
  9. package/dist/{chunk-TSHXZTOQ.js → chunk-2HEJ2F35.js} +5 -5
  10. package/dist/{chunk-PBTHKCPN.js → chunk-2HFZQUHL.js} +7 -7
  11. package/dist/{chunk-FO5ZOVUY.js → chunk-3BINW3FP.js} +5 -5
  12. package/dist/{chunk-4OC57DA6.js → chunk-4DGYLA73.js} +53 -2
  13. package/dist/{chunk-CKXWIANG.js → chunk-4SPRNWDE.js} +18 -16
  14. package/dist/{chunk-E2ER4LJF.js → chunk-5C3AQNDW.js} +25 -1
  15. package/dist/{chunk-XF5N4U5A.js → chunk-5DHKRSMQ.js} +9 -8
  16. package/dist/{chunk-43AOLP7E.js → chunk-5FR74PWO.js} +2 -1
  17. package/dist/{chunk-EKY57CSP.js → chunk-5H3GB5BO.js} +68 -772
  18. package/dist/{chunk-6XXKFVSN.js → chunk-5Q2VVUKB.js} +4 -4
  19. package/dist/{chunk-DJVECN66.js → chunk-7RFXX52T.js} +295 -3705
  20. package/dist/{chunk-ZXF4XRKW.js → chunk-7RGZWPB6.js} +158 -8
  21. package/dist/{chunk-FYYLNIL5.js → chunk-A2NJGIB3.js} +2 -2
  22. package/dist/{chunk-XXQNGV4M.js → chunk-A3WNZD3P.js} +548 -72
  23. package/dist/{chunk-VEZEGCGW.js → chunk-B5CSFE7B.js} +23 -21
  24. package/dist/{chunk-2SFS6XQE.js → chunk-DGSYXYMX.js} +3 -2
  25. package/dist/chunk-DR52UMZW.js +21 -0
  26. package/dist/{chunk-ZWLZP4ZT.js → chunk-DYIM5TJT.js} +98 -12
  27. package/dist/{chunk-QKMUKYO7.js → chunk-E77JEWSD.js} +270 -125
  28. package/dist/{chunk-LYF7OHWH.js → chunk-EMYUUSFG.js} +12 -467
  29. package/dist/{chunk-4VP4KH3K.js → chunk-EQ63NRB7.js} +8 -8
  30. package/dist/chunk-FBVTI2TJ.js +518 -0
  31. package/dist/{chunk-R46L2BIR.js → chunk-FHJEP5SW.js} +19 -25
  32. package/dist/{chunk-WR67VIZY.js → chunk-GN57SG4G.js} +66 -8
  33. package/dist/{chunk-RD5U66HV.js → chunk-GPIEI3LY.js} +9 -9
  34. package/dist/{chunk-PCZJO5TI.js → chunk-GU2UIAFZ.js} +13 -178
  35. package/dist/chunk-GWS3VEIW.js +195 -0
  36. package/dist/chunk-H7IXIC72.js +103 -0
  37. package/dist/{chunk-3BPUFZDL.js → chunk-HLE42MG7.js} +3 -3
  38. package/dist/{chunk-24I7BN55.js → chunk-IFBNV6H6.js} +3 -3
  39. package/dist/{chunk-QNQHSOLF.js → chunk-IGWKHNIQ.js} +114 -55
  40. package/dist/chunk-IIZWH4XA.js +172 -0
  41. package/dist/{chunk-AD2SYQYC.js → chunk-IJ7RPIYJ.js} +124 -6
  42. package/dist/chunk-J3YUBZWY.js +382 -0
  43. package/dist/{chunk-5JGRAMKL.js → chunk-JOZYP4GM.js} +8 -6
  44. package/dist/{chunk-OH3TOQTB.js → chunk-K4XHGFR5.js} +751 -15
  45. package/dist/{chunk-EYPA3EGJ.js → chunk-KTYTFRMB.js} +178 -14
  46. package/dist/chunk-LU7P4LHA.js +33 -0
  47. package/dist/chunk-ME6CCNFO.js +108 -0
  48. package/dist/chunk-MXKJU4JB.js +1100 -0
  49. package/dist/{chunk-RY3LY4J5.js → chunk-N22QMJKY.js} +21 -18
  50. package/dist/chunk-NMPKI6XL.js +3006 -0
  51. package/dist/chunk-NUGM5KR6.js +165 -0
  52. package/dist/{chunk-22NAGB7X.js → chunk-P43ETTHK.js} +5 -94
  53. package/dist/{chunk-NILBFAPG.js → chunk-PMDBGQSJ.js} +2 -2
  54. package/dist/chunk-PT7HYKEM.js +165 -0
  55. package/dist/chunk-RVG5JXAL.js +41 -0
  56. package/dist/{chunk-GEYXPTRF.js → chunk-RWSI4YD7.js} +2 -2
  57. package/dist/{chunk-4BPJXDWC.js → chunk-TANS5ZJS.js} +35 -19
  58. package/dist/{verifiers-NCBTHHN2.js → chunk-TB5666IT.js} +67 -324
  59. package/dist/{chunk-QM3F2GKX.js → chunk-TLQJPP24.js} +7927 -8088
  60. package/dist/{chunk-G7MUEIGA.js → chunk-TT36MB5S.js} +2 -1
  61. package/dist/chunk-TTHACPOM.js +961 -0
  62. package/dist/{chunk-6US73PDB.js → chunk-TYPGUK6W.js} +7 -7
  63. package/dist/{chunk-MFFY33HR.js → chunk-U6MBIEMB.js} +554 -209
  64. package/dist/chunk-VAWNZU7Z.js +242 -0
  65. package/dist/{chunk-IR4CFBFN.js → chunk-VCBR6CU7.js} +12 -12
  66. package/dist/{chunk-WHJYKASB.js → chunk-VHN4MY6O.js} +2 -2
  67. package/dist/{chunk-XYDYPRZI.js → chunk-VWZOAB7K.js} +10 -10
  68. package/dist/{chunk-ZRGEBJ4T.js → chunk-WLFILSD5.js} +48 -48
  69. package/dist/{chunk-K7T3E2SR.js → chunk-WNIJTQQK.js} +12 -11
  70. package/dist/{chunk-CYQKWTG3.js → chunk-WSB3FPX7.js} +68 -20
  71. package/dist/{chunk-KHSFENX2.js → chunk-WWCZ5F23.js} +116 -14
  72. package/dist/{chunk-XE2VEJHX.js → chunk-WXY7KU3G.js} +2 -2
  73. package/dist/{chunk-PPAMZ32Z.js → chunk-XK56QHLX.js} +6 -1
  74. package/dist/{chunk-KOHPCX4K.js → chunk-XWSF374K.js} +5 -5
  75. package/dist/{chunk-CJUB2JJ2.js → chunk-YS5VLNH5.js} +10 -10
  76. package/dist/{chunk-ZZMN5OM4.js → chunk-ZNLWCMVZ.js} +2 -2
  77. package/dist/{chunk-WHGPSPT5.js → chunk-ZVJ5BLO2.js} +2 -2
  78. package/dist/cli/index.js +33 -31
  79. package/dist/{clio-M2KGYUFZ.js → clio-QVTYJ57A.js} +10 -10
  80. package/dist/{code-nav-GQNL7XA6.js → code-nav-FGGFIE7L.js} +5 -5
  81. package/dist/codewiki/build-worker.js +4 -4
  82. package/dist/{components-5TTYYX6G.js → components-ZFA3SAER.js} +9 -9
  83. package/dist/{config-XUUYQIWO.js → config-LW5IJFQN.js} +65 -55
  84. package/dist/{configure-IHJ7YOMV.js → configure-7XIZCOU4.js} +29 -24
  85. package/dist/{context-75MIWW3U.js → context-L3WL3X7K.js} +54 -43
  86. package/dist/{context-ZQ7SIFJV.js → context-N52ZA626.js} +30 -14
  87. package/dist/{context-74JLXAWD.js → context-Y6Y7QPR6.js} +12 -12
  88. package/dist/{context-clear-GYKWNUML.js → context-clear-MBQRLSDQ.js} +54 -43
  89. package/dist/{context-index-SSR5ECNE.js → context-index-HVMFQHK3.js} +5 -5
  90. package/dist/{context-working-set-UX5KEP4J.js → context-working-set-GS6DSO7F.js} +18 -18
  91. package/dist/{dispatch-runner-GIJBHNFL.js → dispatch-runner-22ZCNOM3.js} +367 -79
  92. package/dist/{docs-6FZSCG5B.js → docs-7LQ23DLM.js} +9 -9
  93. package/dist/{doctor-SVJ5BZCW.js → doctor-M7YEDGAE.js} +27 -23
  94. package/dist/{eval-CG6LLBLD.js → eval-BEC2WHDA.js} +73 -20
  95. package/dist/{evidence-ZYFIEN42.js → evidence-REJUMSKM.js} +70 -59
  96. package/dist/{evolve-QGEXEMDW.js → evolve-PY5ZBA5K.js} +50 -39
  97. package/dist/{extensions-ADGNCJJD.js → extensions-HVKU65YU.js} +7 -7
  98. package/dist/{fleet-S5R4ZOQY.js → fleet-7WZEWRFA.js} +236 -377
  99. package/dist/fleet-commands-UVHWM76J.js +70 -0
  100. package/dist/fleet-graph-6ULH7PES.js +125 -0
  101. package/dist/fleet-new-RDVJLHHH.js +48 -0
  102. package/dist/{fleet-preflight-BHSNPBMH.js → fleet-preflight-J53T6CCE.js} +5 -5
  103. package/dist/fleet-validate-72PC4SLA.js +79 -0
  104. package/dist/{init-5DRU55YR.js → init-OG3TPGQG.js} +69 -57
  105. package/dist/library-CNTMPLRF.js +217 -0
  106. package/dist/{memory-7YKKR6UC.js → memory-6IS7F275.js} +52 -41
  107. package/dist/{models-ZPOLRU2C.js → models-ENRJDA5W.js} +37 -31
  108. package/dist/{monitor-US5F5YGZ.js → monitor-XLDVO7TN.js} +79 -42
  109. package/dist/{orchestrator-E2AL4T5N.js → orchestrator-6KSPYRHA.js} +4126 -762
  110. package/dist/{paths-E7KYAQWE.js → paths-DBXMZMDU.js} +6 -6
  111. package/dist/registry-LG64LTF4.js +11 -0
  112. package/dist/{reset-KZ652EK6.js → reset-RZ4ER727.js} +12 -12
  113. package/dist/{run-SRNBKDWD.js → run-Y2CNK5RU.js} +89 -76
  114. package/dist/{share-CGZE33UP.js → share-A55GYP6Z.js} +37 -13
  115. package/dist/{skills-S2X4DLY5.js → skills-ALC5J6AT.js} +29 -13
  116. package/dist/{skills-eval-W2GGIC4R.js → skills-eval-JPBEBYQU.js} +60 -48
  117. package/dist/support-MIETYA5E.js +38 -0
  118. package/dist/{targets-54SWINWB.js → targets-VGNXIR3S.js} +46 -36
  119. package/dist/{terminal-lease-SAIF2OGY.js → terminal-lease-WOBR64YA.js} +4 -4
  120. package/dist/{uninstall-BVLWXKBT.js → uninstall-ZJF5H5ZN.js} +9 -9
  121. package/dist/{upgrade-JKAR27XC.js → upgrade-FUSUAGHR.js} +31 -28
  122. package/dist/{usage-MSAWCLX4.js → usage-N4MKVHKD.js} +140 -68
  123. package/dist/verifiers-YAWOJ3H2.js +336 -0
  124. package/dist/{verify-X5HDROLA.js → verify-LTDHYBGY.js} +10 -9
  125. package/dist/{wiki-generate-GUSOQ6ZP.js → wiki-generate-6M7GHTBJ.js} +75 -62
  126. package/dist/worker/entry.js +67 -57
  127. package/docs/README.md +3 -2
  128. package/docs/acp.md +1 -1
  129. package/docs/alcf-provider.md +1 -1
  130. package/docs/architecture.md +2 -2
  131. package/docs/artifact-versions.md +11 -6
  132. package/docs/built-in-agents.md +26 -2
  133. package/docs/capacity-and-scheduling.md +1 -1
  134. package/docs/commands-and-modes.md +83 -3
  135. package/docs/configuration-and-targets.md +86 -4
  136. package/docs/context-engine.md +1 -1
  137. package/docs/development-pipeline.md +1 -1
  138. package/docs/dispatch-architecture-rationale.md +1 -1
  139. package/docs/documentation-coverage.md +3 -3
  140. package/docs/documentation-guide.md +3 -3
  141. package/docs/eval-runner.md +1 -1
  142. package/docs/evals-internal.md +1 -1
  143. package/docs/evidence-and-memory.md +74 -10
  144. package/docs/evolution.md +1 -1
  145. package/docs/exit-codes-and-output.md +4 -1
  146. package/docs/extensions-and-sharing.md +6 -2
  147. package/docs/fleet-demo-runbook.md +2 -2
  148. package/docs/fleet-dispatch.md +228 -16
  149. package/docs/git-commit-provenance.md +2 -2
  150. package/docs/glossary.md +22 -2
  151. package/docs/installation-and-lifecycle.md +2 -2
  152. package/docs/middleware-and-components.md +2 -1
  153. package/docs/model-catalog.md +1 -1
  154. package/docs/observability.md +56 -9
  155. package/docs/proactive-memory.md +1 -1
  156. package/docs/prompt-envelope-and-tools.md +4 -2
  157. package/docs/provider-adapter-cookbook.md +1 -1
  158. package/docs/release-cut-checklist.md +83 -65
  159. package/docs/resource-library.md +59 -0
  160. package/docs/safety-model.md +2 -2
  161. package/docs/scientific-validation.md +3 -3
  162. package/docs/session-lifecycle.md +37 -1
  163. package/docs/skills-marketplace.md +16 -3
  164. package/docs/tool-usage.md +14 -7
  165. package/docs/trace-store.md +1 -1
  166. package/docs/troubleshooting.md +1 -1
  167. package/docs/tui-design.md +1 -1
  168. package/docs/worker-dispatch-mechanics.md +3 -3
  169. package/package.json +1 -2
  170. package/src/cli/argv.ts +5 -0
  171. package/src/cli/configure.ts +107 -23
  172. package/src/cli/doctor.ts +5 -1
  173. package/src/cli/evidence.ts +30 -25
  174. package/src/cli/fleet-commands.ts +37 -0
  175. package/src/cli/fleet-graph.ts +102 -0
  176. package/src/cli/fleet-new.ts +36 -0
  177. package/src/cli/fleet-preflight.ts +111 -0
  178. package/src/cli/fleet-validate.ts +30 -0
  179. package/src/cli/fleet.ts +173 -335
  180. package/src/cli/index.ts +3 -1
  181. package/src/cli/library.ts +190 -0
  182. package/src/cli/share.ts +13 -1
  183. package/src/cli/shared.ts +1 -0
  184. package/src/cli/targets.ts +4 -1
  185. package/src/cli/usage.ts +111 -19
  186. package/src/cli/validate-model.ts +60 -5
  187. package/src/core/bus-events.ts +29 -0
  188. package/src/core/commit-attribution.ts +4 -4
  189. package/src/core/config.ts +130 -0
  190. package/src/core/defaults.ts +81 -0
  191. package/src/core/path-boundary.ts +100 -0
  192. package/src/domains/agents/builtins/architect.md +1 -0
  193. package/src/domains/agents/builtins/oracle.md +33 -0
  194. package/src/domains/agents/catalog.ts +13 -1
  195. package/src/domains/agents/extension.ts +2 -11
  196. package/src/domains/agents/fleet-contract.ts +304 -24
  197. package/src/domains/agents/index.ts +14 -0
  198. package/src/domains/agents/recipe.ts +7 -1
  199. package/src/domains/agents/registry.ts +73 -5
  200. package/src/domains/agents/result-contract.ts +360 -15
  201. package/src/domains/agents/write-boundary.ts +15 -50
  202. package/src/domains/config/classify.ts +4 -0
  203. package/src/domains/context/project-rules.ts +51 -1
  204. package/src/domains/dispatch/active-route-planner.ts +14 -0
  205. package/src/domains/dispatch/assignment-reconcile.ts +22 -5
  206. package/src/domains/dispatch/assignment-store.ts +151 -14
  207. package/src/domains/dispatch/backoff.ts +2 -1
  208. package/src/domains/dispatch/capability-match.ts +1 -0
  209. package/src/domains/dispatch/checkout-writer-lease.ts +175 -0
  210. package/src/domains/dispatch/contract.ts +48 -0
  211. package/src/domains/dispatch/delegation-plan.ts +164 -0
  212. package/src/domains/dispatch/execution-plan.ts +76 -5
  213. package/src/domains/dispatch/execution-role.ts +12 -2
  214. package/src/domains/dispatch/execution-scheduler.ts +183 -67
  215. package/src/domains/dispatch/extension.ts +412 -74
  216. package/src/domains/dispatch/fleet-gate.ts +14 -0
  217. package/src/domains/dispatch/fleet-plan.ts +63 -3
  218. package/src/domains/dispatch/fleet-run.ts +791 -0
  219. package/src/domains/dispatch/gate-role-prompts.ts +47 -0
  220. package/src/domains/dispatch/host-verification.ts +178 -0
  221. package/src/domains/dispatch/index.ts +41 -1
  222. package/src/domains/dispatch/intent-requirements.ts +40 -0
  223. package/src/domains/dispatch/intent.ts +235 -0
  224. package/src/domains/dispatch/path-scope.ts +370 -0
  225. package/src/domains/dispatch/receipt-integrity.ts +9 -4
  226. package/src/domains/dispatch/state.ts +36 -3
  227. package/src/domains/dispatch/types.ts +64 -12
  228. package/src/domains/dispatch/validation.ts +69 -6
  229. package/src/domains/dispatch/write-boundary-enforcer.ts +45 -0
  230. package/src/domains/dispatch/write-boundary.ts +201 -22
  231. package/src/domains/eval/metrics/evidence.ts +79 -2
  232. package/src/domains/eval/runners/clio-run.ts +12 -2
  233. package/src/domains/evidence/build.ts +69 -11
  234. package/src/domains/evidence/index.ts +21 -0
  235. package/src/domains/evidence/provenance.ts +46 -11
  236. package/src/domains/evidence/trust-projection.ts +274 -0
  237. package/src/domains/evidence/trust-status.ts +155 -18
  238. package/src/domains/evidence/types.ts +4 -0
  239. package/src/domains/extensions/discovery.ts +88 -1
  240. package/src/domains/extensions/resources.ts +20 -8
  241. package/src/domains/extensions/state.ts +6 -2
  242. package/src/domains/extensions/types.ts +4 -1
  243. package/src/domains/lifecycle/doctor.ts +140 -1
  244. package/src/domains/middleware/index.ts +15 -0
  245. package/src/domains/middleware/watchdog.ts +281 -0
  246. package/src/domains/observability/contract.ts +3 -1
  247. package/src/domains/observability/cost.ts +12 -1
  248. package/src/domains/observability/extension.ts +2 -2
  249. package/src/domains/observability/index.ts +10 -0
  250. package/src/domains/observability/out-of-turn-usage.ts +223 -0
  251. package/src/domains/prompts/contract.ts +3 -5
  252. package/src/domains/providers/extension.ts +30 -2
  253. package/src/domains/resources/common-loader.ts +3 -0
  254. package/src/domains/resources/index.ts +20 -0
  255. package/src/domains/resources/library.ts +326 -0
  256. package/src/domains/resources/prompts/loader.ts +119 -14
  257. package/src/domains/resources/skills/marketplace.ts +37 -12
  258. package/src/domains/safety/policy-engine.ts +5 -5
  259. package/src/domains/safety/run-effects.ts +64 -1
  260. package/src/domains/safety/scope.ts +7 -12
  261. package/src/domains/session/handoff.ts +629 -0
  262. package/src/domains/share/archive.ts +67 -2
  263. package/src/engine/acp/server.ts +4 -1
  264. package/src/engine/prompt-templates.ts +18 -1
  265. package/src/engine/worker-runtime.ts +6 -3
  266. package/src/entry/orchestrator.ts +37 -0
  267. package/src/interactive/bus-notices.ts +26 -0
  268. package/src/interactive/chat-loop.ts +235 -1
  269. package/src/interactive/chat-renderer.ts +22 -0
  270. package/src/interactive/cost-overlay.ts +31 -3
  271. package/src/interactive/council-dispatch.ts +30 -0
  272. package/src/interactive/council-grid.ts +213 -0
  273. package/src/interactive/council.ts +99 -0
  274. package/src/interactive/dispatch-board.ts +311 -17
  275. package/src/interactive/fleet-run-preview.ts +307 -0
  276. package/src/interactive/footer/notifications.ts +219 -0
  277. package/src/interactive/handoff-round.ts +56 -0
  278. package/src/interactive/interactive-application.ts +43 -1
  279. package/src/interactive/interactive-event-projection.ts +23 -1
  280. package/src/interactive/interactive-slash-runtime.ts +52 -2
  281. package/src/interactive/interactive-subscriptions.ts +14 -2
  282. package/src/interactive/oracle.ts +179 -0
  283. package/src/interactive/overlay-ask-user-lifecycle.ts +6 -0
  284. package/src/interactive/overlay-general-openers.ts +190 -1
  285. package/src/interactive/overlay-key-routing.ts +17 -1
  286. package/src/interactive/overlay-lifecycle.ts +41 -1
  287. package/src/interactive/overlay-permission-lifecycle.ts +10 -0
  288. package/src/interactive/overlay-resource-openers.ts +11 -3
  289. package/src/interactive/overlay-session-lifecycle.ts +234 -2
  290. package/src/interactive/overlays/fleet-run-approval.ts +208 -0
  291. package/src/interactive/overlays/handoff-review.ts +185 -0
  292. package/src/interactive/overlays/library-install-confirm.ts +151 -0
  293. package/src/interactive/overlays/list-overlay.ts +168 -2
  294. package/src/interactive/overlays/settings.ts +221 -30
  295. package/src/interactive/overlays/side-question.ts +139 -0
  296. package/src/interactive/overlays/skills-hub.ts +401 -15
  297. package/src/interactive/side-question.ts +171 -0
  298. package/src/interactive/slash-commands.ts +439 -7
  299. package/src/interactive/slash-spec.ts +19 -6
  300. package/src/interactive/theme/tokens.ts +30 -0
  301. package/src/interactive/turn-middleware.ts +15 -1
  302. package/src/interactive/view/artifacts.ts +42 -9
  303. package/src/interactive/view/view-overlay.ts +15 -3
  304. package/src/interactive/watchdog-run.ts +75 -0
  305. package/src/interactive/worker-receipts.ts +14 -2
  306. package/src/interactive/worker-share.ts +56 -1
  307. package/src/interactive/worker-stream.ts +15 -0
  308. package/src/tools/bootstrap.ts +3 -0
  309. package/src/tools/compete-worktrees.ts +13 -79
  310. package/src/tools/dispatch-admission.ts +251 -18
  311. package/src/tools/dispatch-arguments.ts +84 -1
  312. package/src/tools/dispatch-plan.ts +165 -6
  313. package/src/tools/dispatch-runner.ts +364 -23
  314. package/src/tools/dispatch-types.ts +20 -1
  315. package/src/tools/dispatch.ts +72 -2
  316. package/src/tools/monitor.ts +29 -0
  317. package/src/tools/profiles.ts +18 -4
  318. package/src/tools/task-worktree.ts +238 -0
  319. package/src/tools/verify/authoring.ts +61 -1
  320. package/src/tools/verify/scripts.ts +62 -0
  321. package/src/tools/worker-evidence.ts +21 -14
  322. package/src/worker/spec-contract.ts +3 -1
  323. package/dist/chunk-HC4CLZ2Y.js +0 -68
@@ -2,16 +2,32 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
2
2
  import {
3
3
  clampTimerDelayMs
4
4
  } from "./chunk-FQ4SKYE4.js";
5
- import {
6
- clioStateDir
7
- } from "./chunk-BNAZZHFG.js";
8
5
  import {
9
6
  AI_AGENT_NAME
10
7
  } from "./chunk-6EJMN2Y3.js";
8
+ import {
9
+ clioStateDir
10
+ } from "./chunk-BNAZZHFG.js";
11
11
  import {
12
12
  init_esm_shims
13
13
  } from "./chunk-3R73A4XB.js";
14
14
 
15
+ // src/core/git-commit-attribution.ts
16
+ init_esm_shims();
17
+ import { execFileSync } from "node:child_process";
18
+ import {
19
+ accessSync,
20
+ chmodSync,
21
+ existsSync,
22
+ constants as fsConstants,
23
+ mkdirSync,
24
+ readFileSync,
25
+ renameSync,
26
+ rmSync,
27
+ writeFileSync
28
+ } from "node:fs";
29
+ import { join, resolve } from "node:path";
30
+
15
31
  // src/core/commit-attribution.ts
16
32
  init_esm_shims();
17
33
  var CLIO_COMMIT_IDENTITY = "Clio Coder <clio-coder@iowarp.ai>";
@@ -32,7 +48,7 @@ var KNOWN_CLIO_TRAILERS = new Set(
32
48
  Object.values(CLIO_COMMIT_TRAILERS).map((line) => normalizedTrailer(line)).filter((line) => line !== null)
33
49
  );
34
50
  function isClioTrailer(key) {
35
- return KNOWN_CLIO_TRAILERS.has(key) || key.startsWith("clio-evidence:receipt-v15/sha256:");
51
+ return KNOWN_CLIO_TRAILERS.has(key) || key.startsWith("clio-evidence:receipt-v20/sha256:");
36
52
  }
37
53
  function trailerBlockStart(lines) {
38
54
  if (lines.length < 2) return null;
@@ -51,10 +67,10 @@ function trailerBlockStart(lines) {
51
67
  return sawTrailer ? first : null;
52
68
  }
53
69
  function receiptTrailer(receipt) {
54
- if (receipt?.version !== 15 || receipt.algorithm !== "sha256" || receipt.integrityValid !== true || receipt.directlyRelevant !== true || !SHA256.test(receipt.digest)) {
70
+ if (receipt?.version !== 20 || receipt.algorithm !== "sha256" || receipt.integrityValid !== true || receipt.directlyRelevant !== true || !SHA256.test(receipt.digest)) {
55
71
  return null;
56
72
  }
57
- return `Clio-Evidence: receipt-v15/sha256:${receipt.digest}`;
73
+ return `Clio-Evidence: receipt-v20/sha256:${receipt.digest}`;
58
74
  }
59
75
  function attributeCommitMessage(originalMessage, evidence, enabled = true) {
60
76
  if (!enabled) return originalMessage;
@@ -96,20 +112,6 @@ function attributeCommitMessage(originalMessage, evidence, enabled = true) {
96
112
  }
97
113
 
98
114
  // src/core/git-commit-attribution.ts
99
- init_esm_shims();
100
- import { execFileSync } from "node:child_process";
101
- import {
102
- accessSync,
103
- chmodSync,
104
- existsSync,
105
- constants as fsConstants,
106
- mkdirSync,
107
- readFileSync,
108
- renameSync,
109
- rmSync,
110
- writeFileSync
111
- } from "node:fs";
112
- import { join, resolve } from "node:path";
113
115
  var CLIO_GIT_COMMITS_ENABLED_ENV = "CLIO_CODER_GIT_COMMITS_ENABLED";
114
116
  var ASSISTED_ENV = "CLIO_CODER_COMMIT_ASSISTED";
115
117
  var AUTHORED_ENV = "CLIO_CODER_COMMIT_AUTHORED";
@@ -565,4 +567,4 @@ export {
565
567
  runCommandVector,
566
568
  combineSafeOutput
567
569
  };
568
- //# sourceMappingURL=chunk-VEZEGCGW.js.map
570
+ //# sourceMappingURL=chunk-B5CSFE7B.js.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  enabledExtensionResourceRoots
4
- } from "./chunk-ZWLZP4ZT.js";
4
+ } from "./chunk-DYIM5TJT.js";
5
5
  import {
6
6
  require_dist
7
7
  } from "./chunk-APJ265NV.js";
@@ -29,6 +29,7 @@ function defaultScopedResourceRoots(kind, cwd) {
29
29
  return [
30
30
  ...enabledExtensionResourceRoots(kind, cwd).map((root) => ({
31
31
  path: root.path,
32
+ rootPath: root.rootPath,
32
33
  scope: "package",
33
34
  source: root.source,
34
35
  precedence: COMPAT_RESOURCE_PRECEDENCE.extension
@@ -119,4 +120,4 @@ export {
119
120
  splitYamlFrontmatter,
120
121
  stringField
121
122
  };
122
- //# sourceMappingURL=chunk-2SFS6XQE.js.map
123
+ //# sourceMappingURL=chunk-DGSYXYMX.js.map
@@ -0,0 +1,21 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ init_esm_shims
4
+ } from "./chunk-3R73A4XB.js";
5
+
6
+ // src/domains/config/agent-namespace.ts
7
+ init_esm_shims();
8
+ function assertAgentIdNamespace(nativeRecipes, acpDelegates) {
9
+ const native = new Set(nativeRecipes.map((recipe) => recipe.id));
10
+ const collision = acpDelegates.find((delegate) => native.has(delegate.id));
11
+ if (collision !== void 0) {
12
+ throw new Error(
13
+ `agent id collision: native recipe '${collision.id}' and ACP delegation agent '${collision.id}' share one namespace`
14
+ );
15
+ }
16
+ }
17
+
18
+ export {
19
+ assertAgentIdNamespace
20
+ };
21
+ //# sourceMappingURL=chunk-DR52UMZW.js.map
@@ -16,7 +16,7 @@ import {
16
16
  // src/domains/extensions/discovery.ts
17
17
  init_esm_shims();
18
18
  var import_yaml = __toESM(require_dist(), 1);
19
- import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
19
+ import { existsSync, lstatSync, readdirSync, readFileSync, realpathSync, statSync } from "node:fs";
20
20
  import path from "node:path";
21
21
  var MANIFEST_NAMES = ["clio-coder-extension.yaml", "clio-coder-extension.yml", "clio-coder-extension.json"];
22
22
  function isRecord(value) {
@@ -44,12 +44,85 @@ function normalizeResources(value) {
44
44
  const out = {};
45
45
  const skills = trimString(value.skills);
46
46
  const prompts = trimString(value.prompts);
47
+ const agents = trimString(value.agents);
48
+ const fleets = trimString(value.fleets);
47
49
  const themes = trimString(value.themes);
48
50
  if (skills) out.skills = skills;
49
51
  if (prompts) out.prompts = prompts;
52
+ if (agents) out.agents = agents;
53
+ if (fleets) out.fleets = fleets;
50
54
  if (themes) out.themes = themes;
51
55
  return out;
52
56
  }
57
+ function contained(root, candidate) {
58
+ const relative = path.relative(root, candidate);
59
+ return relative === "" || !relative.startsWith(`..${path.sep}`) && relative !== ".." && !path.isAbsolute(relative);
60
+ }
61
+ function validateResourceTree(root, resourcePath, kind, diagnostics) {
62
+ if (path.isAbsolute(resourcePath)) {
63
+ diagnostics.push({ type: "error", message: `resources.${kind} must be relative`, path: resourcePath });
64
+ return;
65
+ }
66
+ const resolvedRoot = path.resolve(root);
67
+ const resolved = path.resolve(resolvedRoot, resourcePath);
68
+ if (!contained(resolvedRoot, resolved) || resolved === resolvedRoot) {
69
+ diagnostics.push({ type: "error", message: `resources.${kind} escapes the extension root`, path: resourcePath });
70
+ return;
71
+ }
72
+ let canonicalRoot;
73
+ let canonicalResource;
74
+ try {
75
+ canonicalRoot = realpathSync(resolvedRoot);
76
+ canonicalResource = realpathSync(resolved);
77
+ if (!lstatSync(resolved).isDirectory()) {
78
+ diagnostics.push({ type: "error", message: `resources.${kind} is not a directory`, path: resolved });
79
+ return;
80
+ }
81
+ } catch (error) {
82
+ diagnostics.push({
83
+ type: "error",
84
+ message: `resources.${kind} cannot be resolved: ${error instanceof Error ? error.message : String(error)}`,
85
+ path: resolved
86
+ });
87
+ return;
88
+ }
89
+ if (!contained(canonicalRoot, canonicalResource)) {
90
+ diagnostics.push({ type: "error", message: `resources.${kind} escapes through a symbolic link`, path: resolved });
91
+ return;
92
+ }
93
+ const pending = [resolved];
94
+ while (pending.length > 0) {
95
+ const directory = pending.pop();
96
+ if (!directory) continue;
97
+ for (const entry of readdirSync(directory, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
98
+ const candidate = path.join(directory, entry.name);
99
+ if (entry.isSymbolicLink()) {
100
+ try {
101
+ if (!contained(canonicalRoot, realpathSync(candidate))) {
102
+ diagnostics.push({
103
+ type: "error",
104
+ message: `resources.${kind} contains an escaping symbolic link`,
105
+ path: candidate
106
+ });
107
+ }
108
+ } catch (error) {
109
+ diagnostics.push({
110
+ type: "error",
111
+ message: `resources.${kind} contains an unresolved symbolic link: ${error instanceof Error ? error.message : String(error)}`,
112
+ path: candidate
113
+ });
114
+ }
115
+ } else if (entry.isDirectory()) {
116
+ pending.push(candidate);
117
+ }
118
+ }
119
+ }
120
+ }
121
+ function validateResourceRoots(root, resources, diagnostics) {
122
+ for (const [kind, resourcePath] of Object.entries(resources)) {
123
+ if (resourcePath) validateResourceTree(root, resourcePath, kind, diagnostics);
124
+ }
125
+ }
53
126
  function stringArray(value) {
54
127
  if (!Array.isArray(value)) return void 0;
55
128
  const out = value.map((entry) => trimString(entry)).filter((entry) => entry !== void 0);
@@ -115,6 +188,7 @@ function loadManifestFromRoot(root) {
115
188
  }
116
189
  try {
117
190
  const parsed = parseExtensionManifest(readJsonOrYaml(manifestPath), manifestPath);
191
+ if (parsed.manifest) validateResourceRoots(root, parsed.manifest.resources, parsed.diagnostics);
118
192
  return {
119
193
  path: root,
120
194
  manifestPath,
@@ -284,7 +358,7 @@ function installExtension(sourcePath, options = {}) {
284
358
  const cwd = options.cwd ?? process.cwd();
285
359
  const source = path2.resolve(sourcePath);
286
360
  const candidate = loadManifestFromRoot(source);
287
- if (!candidate.manifest) return { diagnostics: candidate.diagnostics };
361
+ if (!candidate.manifest || !candidate.valid) return { diagnostics: candidate.diagnostics };
288
362
  const targetRoot = path2.join(extensionBaseDir(scope, cwd), candidate.manifest.id);
289
363
  if (existsSync2(targetRoot)) {
290
364
  if (!options.force) {
@@ -307,7 +381,11 @@ function installExtension(sourcePath, options = {}) {
307
381
  rmSync(backupRoot, { recursive: true, force: true });
308
382
  cpSync(source, stagingRoot, {
309
383
  recursive: true,
310
- filter: (src) => path2.basename(src) !== "state.json"
384
+ // `state.json` beside the installed extension directories belongs to
385
+ // Clio's extension manager. An extension may legitimately ship nested
386
+ // resources with the same basename (for example a project-state JSON
387
+ // template), so exclude only a bookkeeping file at the package root.
388
+ filter: (src) => path2.relative(source, src) !== "state.json"
311
389
  });
312
390
  if (existsSync2(targetRoot)) {
313
391
  renameSync(targetRoot, backupRoot);
@@ -379,14 +457,26 @@ init_esm_shims();
379
457
 
380
458
  // src/domains/extensions/resources.ts
381
459
  init_esm_shims();
382
- import { statSync as statSync2 } from "node:fs";
460
+ import { lstatSync as lstatSync2, realpathSync as realpathSync2 } from "node:fs";
383
461
  import path3 from "node:path";
384
462
  function extensionResourcePath(rootPath, resourcePath) {
385
463
  const root = path3.resolve(rootPath);
386
464
  const full = path3.resolve(root, resourcePath);
387
465
  const relative = path3.relative(root, full);
388
- if (relative === "" || !relative.startsWith("..") && !path3.isAbsolute(relative)) return full;
389
- return null;
466
+ if (relative === "" || relative === ".." || relative.startsWith(`..${path3.sep}`) || path3.isAbsolute(relative))
467
+ return null;
468
+ try {
469
+ const rootReal = realpathSync2(root);
470
+ const fullReal = realpathSync2(full);
471
+ const canonicalRelative = path3.relative(rootReal, fullReal);
472
+ if (canonicalRelative === ".." || canonicalRelative.startsWith(`..${path3.sep}`) || path3.isAbsolute(canonicalRelative)) {
473
+ return null;
474
+ }
475
+ if (!lstatSync2(full).isDirectory()) return null;
476
+ return full;
477
+ } catch {
478
+ return null;
479
+ }
390
480
  }
391
481
  function enabledExtensionResourceRoots(kind, cwd = process.cwd()) {
392
482
  const roots = [];
@@ -396,15 +486,11 @@ function enabledExtensionResourceRoots(kind, cwd = process.cwd()) {
396
486
  if (!rel) continue;
397
487
  const full = extensionResourcePath(entry.rootPath, rel);
398
488
  if (!full) continue;
399
- try {
400
- if (!statSync2(full).isDirectory()) continue;
401
- } catch {
402
- continue;
403
- }
404
489
  roots.push({
405
490
  id: entry.id,
406
491
  scope: entry.scope,
407
492
  path: full,
493
+ rootPath: entry.rootPath,
408
494
  source: `extension:${entry.scope}:${entry.id}`
409
495
  });
410
496
  }
@@ -474,4 +560,4 @@ export {
474
560
  enabledExtensionResourceRoots,
475
561
  ExtensionsDomainModule
476
562
  };
477
- //# sourceMappingURL=chunk-ZWLZP4ZT.js.map
563
+ //# sourceMappingURL=chunk-DYIM5TJT.js.map