@iowarp/clio-coder 0.4.6 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (657) hide show
  1. package/.claude-plugin/marketplace.json +283 -0
  2. package/CHANGELOG.md +50 -0
  3. package/CONTRIBUTING.md +102 -29
  4. package/NOTICE +8 -0
  5. package/README.md +37 -5
  6. package/dist/{acp-UVEVWSDL.js → acp-W3Y3TRHD.js} +12 -12
  7. package/dist/{agents-VWY37DTK.js → agents-J4ICNLQ3.js} +52 -52
  8. package/dist/assets/codewiki.json +1 -1
  9. package/dist/assets/tui-notices/get-east-asian-width-LICENSE +9 -0
  10. package/dist/assets/tui-notices/marked-LICENSE +44 -0
  11. package/dist/assets/tui-notices/pi-tui-LICENSE +21 -0
  12. package/dist/{auth-PCV2XQDV.js → auth-X2UJUMOC.js} +24 -24
  13. package/dist/{builtins-PD652MTK.js → builtins-XLXWWSRF.js} +6 -6
  14. package/dist/{chunk-DZK63TZJ.js → chunk-24S3DN22.js} +336 -612
  15. package/dist/{chunk-NTK3WTHM.js → chunk-24TOGHPO.js} +2 -2
  16. package/dist/{chunk-M6TAYK66.js → chunk-2O2LVQQK.js} +11 -4
  17. package/dist/{chunk-OQM5IVJY.js → chunk-34XHRVKG.js} +3 -3
  18. package/dist/{chunk-LY4N4TTL.js → chunk-3LXJOICS.js} +2 -2
  19. package/dist/{chunk-3BJGMT2D.js → chunk-3XE4NRLF.js} +1 -1
  20. package/dist/{chunk-N2OKBREN.js → chunk-4MFBBY2Z.js} +3 -3
  21. package/dist/{chunk-5VTJP36Q.js → chunk-4N2RZ4TO.js} +2 -2
  22. package/dist/{chunk-WNGF5AJX.js → chunk-4QKAITQT.js} +3 -3
  23. package/dist/chunk-4UHVS5T7.js +207 -0
  24. package/dist/{chunk-GLYBJ4RQ.js → chunk-5AJPUR72.js} +6 -6
  25. package/dist/{chunk-5CY4Q6QI.js → chunk-5EQO5NWP.js} +105 -3
  26. package/dist/{chunk-6HAO6X5B.js → chunk-65BGHOUR.js} +8 -5
  27. package/dist/{chunk-6VRRJT7L.js → chunk-6CA2BHOR.js} +2 -2
  28. package/dist/{chunk-HL26ADLH.js → chunk-6CB2IL4N.js} +2 -1
  29. package/dist/{chunk-E7RF4KBO.js → chunk-6LRLOJHQ.js} +3 -3
  30. package/dist/{chunk-HXHFDHB6.js → chunk-6TAATXXH.js} +6 -6
  31. package/dist/{chunk-P6M7RKMI.js → chunk-6YHPAAZR.js} +3 -3
  32. package/dist/{chunk-5QRX7SLS.js → chunk-7EEGBKV4.js} +7 -7
  33. package/dist/{chunk-BS4GAMUB.js → chunk-A67NR5AT.js} +2 -2
  34. package/dist/{chunk-WJIMKGD6.js → chunk-BAU36233.js} +8 -8
  35. package/dist/{chunk-PZN2LQY6.js → chunk-BO4XV5VX.js} +4 -4
  36. package/dist/{chunk-I2K2NCZQ.js → chunk-BQQ5MXUC.js} +6 -6
  37. package/dist/{chunk-X3BI7HTV.js → chunk-C3G5PNUO.js} +21 -21
  38. package/dist/{chunk-SRZOW5L2.js → chunk-C6GEXX4L.js} +1 -1
  39. package/dist/{chunk-6RYDAVQT.js → chunk-CE64C5K5.js} +219 -64
  40. package/dist/chunk-CP3HIR5H.js +2119 -0
  41. package/dist/{chunk-BBV5TKE6.js → chunk-CPXGJI2A.js} +2 -2
  42. package/dist/{chunk-IGLVVNEG.js → chunk-CULVKYTK.js} +4 -4
  43. package/dist/{chunk-DXLUVUD4.js → chunk-D2T66PDV.js} +5 -5
  44. package/dist/{chunk-NF3BK5WR.js → chunk-DACXIVVF.js} +5 -5
  45. package/dist/{chunk-IKRWLEDA.js → chunk-DLIYANB7.js} +20 -15
  46. package/dist/{chunk-RGZNQ5CT.js → chunk-DO7M3LSX.js} +9 -9
  47. package/dist/{chunk-2QPI3TR3.js → chunk-DVJL77SO.js} +2 -2
  48. package/dist/{chunk-ODUTYZIU.js → chunk-EUEXGXXR.js} +5 -5
  49. package/dist/{chunk-WKUYQBCG.js → chunk-EUZRMP4Y.js} +18 -16
  50. package/dist/{chunk-JMPL7NUB.js → chunk-G4LGUTOE.js} +4 -4
  51. package/dist/{chunk-CBSKDFWL.js → chunk-GEVQNST4.js} +2 -2
  52. package/dist/{chunk-NNWJYUNO.js → chunk-GFQ7P2UF.js} +7 -7
  53. package/dist/{chunk-SXQKNKRA.js → chunk-GI5RRMAH.js} +14 -14
  54. package/dist/{chunk-HPTJF6DG.js → chunk-GVZFCJHE.js} +336 -83
  55. package/dist/{chunk-ACCKVSHU.js → chunk-GXIWHXDB.js} +3 -3
  56. package/dist/{chunk-LUL5Z66S.js → chunk-HOX4YZ2K.js} +6 -5
  57. package/dist/chunk-HRAKUPIH.js +57 -0
  58. package/dist/{chunk-F5Z7EWMN.js → chunk-IJMW64DX.js} +50 -50
  59. package/dist/{chunk-QNWRHOMF.js → chunk-IMOD2YPV.js} +16 -9
  60. package/dist/{chunk-HZ2T2YED.js → chunk-IQCNVLO6.js} +28 -8
  61. package/dist/{chunk-HZFBVU5X.js → chunk-ISNCCX42.js} +8 -8
  62. package/dist/{chunk-7JSSKXG2.js → chunk-IZYTT3CD.js} +7 -3
  63. package/dist/chunk-KKEYGFX4.js +915 -0
  64. package/dist/{chunk-HHVJNVUJ.js → chunk-KS7ETA3P.js} +2 -2
  65. package/dist/{chunk-BLTEAUCB.js → chunk-L3Z5ANCV.js} +7 -7
  66. package/dist/{chunk-4VMV6OS6.js → chunk-LBFQMYS3.js} +2 -2
  67. package/dist/{chunk-URBGEOH3.js → chunk-M6Z2V6YU.js} +5 -5
  68. package/dist/{chunk-BT7HGDOX.js → chunk-MBJO5VNZ.js} +12 -12
  69. package/dist/chunk-MNQN3X6Y.js +595 -0
  70. package/dist/{chunk-3QKXHCGS.js → chunk-MZHXENL7.js} +5 -5
  71. package/dist/chunk-MZNWZUJM.js +1801 -0
  72. package/dist/{chunk-7YJWEF2L.js → chunk-N37QC5FV.js} +5 -5
  73. package/dist/{chunk-TJFDL26W.js → chunk-NCCQ6DVS.js} +7 -7
  74. package/dist/{chunk-P5JMBPDJ.js → chunk-NO7J45X6.js} +162 -47
  75. package/dist/chunk-OH3YYA3B.js +15 -0
  76. package/dist/{chunk-22PQ4TX4.js → chunk-P4DL2LM5.js} +16 -77
  77. package/dist/{chunk-LIN2K3EL.js → chunk-PFLOULP3.js} +4 -4
  78. package/dist/{chunk-QXFBABFJ.js → chunk-QKWL7SYE.js} +11 -11
  79. package/dist/chunk-RFCKPS2V.js +26 -0
  80. package/dist/{chunk-ZS43Y2FT.js → chunk-RTLNFZMD.js} +12 -4
  81. package/dist/{chunk-U7H5WRG5.js → chunk-RXFPB32E.js} +8 -6
  82. package/dist/{chunk-Q7NNUHQV.js → chunk-SEDI5K5B.js} +16 -16
  83. package/dist/{chunk-WV6TDAPN.js → chunk-SELG4SUR.js} +7 -7
  84. package/dist/{chunk-3WBALRQH.js → chunk-SER7RRAE.js} +27 -832
  85. package/dist/{chunk-K2HL3GBL.js → chunk-T4TY5GG3.js} +165 -15
  86. package/dist/chunk-T7QQBNLH.js +691 -0
  87. package/dist/{chunk-6OII3LOK.js → chunk-TLTGZTXI.js} +3 -3
  88. package/dist/chunk-TZ6UVP2H.js +637 -0
  89. package/dist/{chunk-3JLFK5MW.js → chunk-TZHN5ITX.js} +13 -41
  90. package/dist/{chunk-VANN3GDP.js → chunk-U3TPUXOQ.js} +399 -234
  91. package/dist/{chunk-VHMX7SXF.js → chunk-UA3W4FGC.js} +6 -6
  92. package/dist/{chunk-3O2ZAUGQ.js → chunk-UA6W4XFJ.js} +2 -2
  93. package/dist/chunk-UWD3JD5X.js +709 -0
  94. package/dist/chunk-V4ZKOKRB.js +13433 -0
  95. package/dist/{chunk-NC4KV7EL.js → chunk-VCRVEDUC.js} +5 -5
  96. package/dist/{chunk-4DU2TVI4.js → chunk-VMATUZB6.js} +12 -10
  97. package/dist/{chunk-J2FYEQ5L.js → chunk-VTYHHQ57.js} +2 -2
  98. package/dist/chunk-WB7POC6M.js +891 -0
  99. package/dist/{chunk-3HQVBIKD.js → chunk-WBVKKTUT.js} +2 -2
  100. package/dist/{chunk-EHOSNVVM.js → chunk-WLHX3MM5.js} +6 -2
  101. package/dist/{chunk-24T2YZ7A.js → chunk-WN552PKN.js} +553 -298
  102. package/dist/{chunk-4U4TKZFR.js → chunk-WT5TRMO4.js} +51 -26
  103. package/dist/{chunk-XWMSPJYN.js → chunk-WURGVOZJ.js} +56 -12
  104. package/dist/{chunk-7WUZEB2M.js → chunk-XR3XJN2M.js} +2 -2
  105. package/dist/chunk-XW2UZICE.js +372 -0
  106. package/dist/{chunk-2AKYFREM.js → chunk-XZ6UFQ52.js} +11 -11
  107. package/dist/chunk-Y3JU5RPK.js +8 -0
  108. package/dist/chunk-YKRJTYNP.js +1143 -0
  109. package/dist/{chunk-PWWSIB2A.js → chunk-ZGIGW4ZG.js} +5 -5
  110. package/dist/cli/index.js +34 -36
  111. package/dist/{clio-QQCMTUZE.js → clio-L2P7S2R2.js} +9 -9
  112. package/dist/{code-nav-GUPM6766.js → code-nav-B5LNX4KU.js} +25 -25
  113. package/dist/{components-TNIKXCBH.js → components-63MMQKUT.js} +6 -6
  114. package/dist/{config-IIM7YOD3.js → config-YXARKGTX.js} +70 -67
  115. package/dist/{configure-4ZM5HWJX.js → configure-LMVQJ46J.js} +47 -35
  116. package/dist/{context-OL5P3HEP.js → context-7HJEWTTP.js} +87 -44
  117. package/dist/{context-44BZLJ3J.js → context-XSZKKFBW.js} +14 -14
  118. package/dist/{context-AIDVQKMW.js → context-YG2LZDYZ.js} +60 -58
  119. package/dist/{context-clear-OQV76MYP.js → context-clear-AC5NXHM2.js} +57 -55
  120. package/dist/{context-index-HP2JFUWA.js → context-index-KKTPRV5G.js} +3 -3
  121. package/dist/{context-map-INTXD54D.js → context-map-T7ROR5D5.js} +4 -4
  122. package/dist/{context-working-set-ZUW3EGLS.js → context-working-set-F4Q4J3NS.js} +12 -10
  123. package/dist/{detail-UXPWRANG.js → detail-H73BEF2N.js} +58 -56
  124. package/dist/{dispatch-runner-P3ZW6G77.js → dispatch-runner-3RY5FSJC.js} +74 -72
  125. package/dist/{doctor-JJVGPZWT.js → doctor-EQYJOGUG.js} +44 -30
  126. package/dist/{eval-V2RTN3UH.js → eval-4P7O6CCE.js} +109 -46
  127. package/dist/{evidence-35PYWGSO.js → evidence-D6GUSYJW.js} +57 -55
  128. package/dist/{evidence-CIGGKI6J.js → evidence-O76QF7TZ.js} +62 -59
  129. package/dist/{evolve-33SM3NJP.js → evolve-H47BCETS.js} +58 -56
  130. package/dist/{extensions-YVRHX6ZI.js → extensions-NNL3ZOCU.js} +98 -20
  131. package/dist/{fleet-LFO7SIPC.js → fleet-KMNS6NOM.js} +106 -99
  132. package/dist/{fleet-commands-RLK72GU3.js → fleet-commands-DOWSYCBX.js} +14 -14
  133. package/dist/{fleet-decisions-3SBSCTCW.js → fleet-decisions-S3PTZV2D.js} +9 -9
  134. package/dist/{fleet-graph-JZIBCGMW.js → fleet-graph-F2DE2TME.js} +26 -24
  135. package/dist/{fleet-inspect-2L5YGGZJ.js → fleet-inspect-EN2Q6IVB.js} +60 -57
  136. package/dist/{fleet-preflight-QRSHIIDE.js → fleet-preflight-FRLETDD3.js} +3 -3
  137. package/dist/{fleet-validate-LIAVKDUU.js → fleet-validate-B2XDLS57.js} +28 -29
  138. package/dist/{fleet-verify-JIK3OQZR.js → fleet-verify-4JKUWGJ7.js} +57 -55
  139. package/dist/{fleet-view-IWHYGQKK.js → fleet-view-BHJFW26B.js} +60 -57
  140. package/dist/{init-NJEDOTQW.js → init-XAT5N5YM.js} +79 -74
  141. package/dist/interop-FVECHFKG.js +246 -0
  142. package/dist/{inventory-74UL7UHU.js → inventory-7KFQGLCV.js} +60 -57
  143. package/dist/library-NY2XOT75.js +492 -0
  144. package/dist/library-QAPAO23R.js +306 -0
  145. package/dist/library-import-5Y6MAS3R.js +183 -0
  146. package/dist/library-inventory-JT6HWITQ.js +56 -0
  147. package/dist/library-validation-EQUH25DC.js +42 -0
  148. package/dist/{memory-I76I5VUH.js → memory-DYVTTCP6.js} +58 -56
  149. package/dist/{models-D4YDIQZQ.js → models-MASFJ6Y2.js} +48 -36
  150. package/dist/{monitor-NKVD55HX.js → monitor-YMP4NXJJ.js} +64 -61
  151. package/dist/{orchestrator-I6OATVPK.js → orchestrator-AFQRRTEI.js} +3685 -1841
  152. package/dist/{panes-7BTYH3XQ.js → panes-D3Y2KFG5.js} +4 -4
  153. package/dist/{panes-WPOMEMRH.js → panes-NICTHQCV.js} +7 -7
  154. package/dist/{paths-J3KN7UAO.js → paths-PSFAUIGO.js} +5 -5
  155. package/dist/{preload-EJAWJEIO.js → preload-5Q7VXRFJ.js} +57 -55
  156. package/dist/{reset-4XMQKDNZ.js → reset-7NKZK7JN.js} +9 -9
  157. package/dist/{resources-TVYVXK3Q.js → resources-NILSIZAT.js} +94 -38
  158. package/dist/{run-OWQNNSJU.js → run-BPZGEBZV.js} +121 -105
  159. package/dist/{share-NPZZMUXG.js → share-EZ6ERBMH.js} +31 -28
  160. package/dist/skills-BTVVNYVM.js +100 -0
  161. package/dist/{skills-eval-J5TCKSJA.js → skills-eval-UY34MNK7.js} +110 -72
  162. package/dist/{skills-inventory-7II4DM57.js → skills-inventory-JDHSIA7I.js} +30 -25
  163. package/dist/{slash-commands-MDSDSWYF.js → slash-commands-K4FNQ2AT.js} +49 -46
  164. package/dist/{steer-S7D7IKPU.js → steer-2B3EQGFH.js} +4 -4
  165. package/dist/{support-5VAEC32W.js → support-L2SOL3IE.js} +7 -7
  166. package/dist/{targets-KILZEOCE.js → targets-44VKGFLN.js} +64 -58
  167. package/dist/{tasks-R6P6OV22.js → tasks-3KODKFU7.js} +12 -12
  168. package/dist/{terminal-lease-LZCG2KN3.js → terminal-lease-LXA7MMPO.js} +32 -19
  169. package/dist/{tools-6OCQ6SVB.js → tools-3UB7TEVR.js} +7 -7
  170. package/dist/{trace-JHLXWUMN.js → trace-TAMIU4OJ.js} +5 -4
  171. package/dist/{tui-primitives-RCY2HN7G.js → tui-primitives-A6MUW32V.js} +3 -2
  172. package/dist/{uninstall-FXYMFFRT.js → uninstall-QYVRPEM4.js} +9 -9
  173. package/dist/{upgrade-D2OZH6IQ.js → upgrade-7PMKM2JH.js} +15 -16
  174. package/dist/{usage-PIASNUS4.js → usage-6EQV7EQK.js} +70 -67
  175. package/dist/{verifiers-LTHUY2PX.js → verifiers-JLITWSHU.js} +15 -15
  176. package/dist/{verify-HYF7KBVE.js → verify-T7NAEVIG.js} +13 -13
  177. package/dist/{web-fetch-MQN4FH3X.js → web-fetch-W4TNW4Q7.js} +4 -4
  178. package/dist/{wiki-generate-RK7JQ5NP.js → wiki-generate-T2TJQJUA.js} +81 -76
  179. package/dist/{with-panes-OFTNAR4Y.js → with-panes-CHFC7HGI.js} +4 -4
  180. package/dist/worker/entry.js +283 -76
  181. package/docs/README.md +43 -0
  182. package/docs/architecture/architecture.md +8 -7
  183. package/docs/architecture/artifact-versions.md +3 -3
  184. package/docs/architecture/context-engine.md +35 -1
  185. package/docs/architecture/library.md +32 -0
  186. package/docs/architecture/middleware-and-components.md +1 -1
  187. package/docs/architecture/model-catalog.md +21 -1
  188. package/docs/architecture/pi-boundary.md +18 -0
  189. package/docs/architecture/prompt-envelope-and-tools.md +5 -5
  190. package/docs/architecture/safety-model.md +21 -2
  191. package/docs/architecture/session-lifecycle.md +12 -1
  192. package/docs/architecture/tui-design.md +108 -9
  193. package/docs/architecture/worker-context.md +106 -0
  194. package/docs/guide/authoring-plugins.md +160 -0
  195. package/docs/guide/built-in-agents.md +5 -5
  196. package/docs/guide/commands-and-modes.md +161 -56
  197. package/docs/guide/configuration-and-targets.md +1 -1
  198. package/docs/guide/configuration-reference.md +27 -34
  199. package/docs/guide/environment-variables.md +2 -2
  200. package/docs/guide/exit-codes-and-output.md +1 -1
  201. package/docs/guide/extensions-and-sharing.md +93 -53
  202. package/docs/guide/fleet-dispatch.md +31 -4
  203. package/docs/guide/glossary.md +1 -1
  204. package/docs/guide/harness-extensions.md +291 -0
  205. package/docs/guide/installation-and-lifecycle.md +9 -9
  206. package/docs/guide/interop.md +243 -0
  207. package/docs/guide/panes-and-files.md +3 -3
  208. package/docs/guide/plugins.md +80 -0
  209. package/docs/guide/resource-library.md +111 -45
  210. package/docs/guide/skills-marketplace.md +35 -72
  211. package/docs/guide/tool-usage.md +19 -7
  212. package/docs/guide/troubleshooting.md +1 -1
  213. package/docs/process/development-pipeline.md +14 -14
  214. package/docs/process/documentation-coverage.md +28 -1
  215. package/docs/process/documentation-guide.md +15 -7
  216. package/docs/process/eval-runner.md +8 -3
  217. package/docs/process/performance-methodology.md +1 -1
  218. package/docs/process/release-cut-checklist.md +4 -0
  219. package/docs/process/scientific-validation.md +23 -0
  220. package/evals/scalar-decision-machinery.ts +1 -1
  221. package/examples/extensions/README.md +67 -0
  222. package/examples/extensions/lab-status/clio-coder-extension.json +14 -0
  223. package/examples/extensions/lab-status/extension.mjs +68 -0
  224. package/examples/extensions/lab-status/jobs.synthetic.json +9 -0
  225. package/examples/extensions/measurements/clio-coder-extension.json +28 -0
  226. package/examples/extensions/measurements/summarize.cjs +23 -0
  227. package/library/README.md +109 -0
  228. package/library/_authoring/templates/agent/README.md +28 -0
  229. package/library/_authoring/templates/agent/agents/benchmark-scout.md +30 -0
  230. package/library/_authoring/templates/agent/plugin.json +23 -0
  231. package/library/_authoring/templates/fleet/README.md +29 -0
  232. package/library/_authoring/templates/fleet/fleets/pipeline-review.md +31 -0
  233. package/library/_authoring/templates/fleet/plugin.json +23 -0
  234. package/library/_authoring/templates/plugin/README.md +37 -0
  235. package/library/_authoring/templates/plugin/agents/data-curator.md +31 -0
  236. package/library/_authoring/templates/plugin/assets/curation-guide.md +22 -0
  237. package/library/_authoring/templates/plugin/plugin.json +42 -0
  238. package/library/_authoring/templates/plugin/prompts/inspect-dataset.md +15 -0
  239. package/library/_authoring/templates/plugin/skills/dataset-curation/SKILL.md +36 -0
  240. package/library/_authoring/templates/plugin/skills/dataset-curation/evals.md +17 -0
  241. package/library/_authoring/templates/prompt/README.md +28 -0
  242. package/library/_authoring/templates/prompt/plugin.json +23 -0
  243. package/library/_authoring/templates/prompt/prompts/paper-summary.md +26 -0
  244. package/library/_authoring/templates/skill/README.md +24 -0
  245. package/library/_authoring/templates/skill/SKILL.md +39 -0
  246. package/library/_authoring/templates/skill/evals.md +30 -0
  247. package/library/_authoring/templates/skill/plugin.json +23 -0
  248. package/library/agents/README.md +7 -0
  249. package/library/fleets/README.md +7 -0
  250. package/library/plugins/materio/README.md +137 -0
  251. package/library/plugins/materio/ai.iowarp.clio/agents/materio-lab-definer.md +208 -0
  252. package/library/plugins/materio/ai.iowarp.clio/agents/materio-literature-reviewer.md +308 -0
  253. package/library/plugins/materio/ai.iowarp.clio/agents/materio-research-explorer.md +249 -0
  254. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-executor.md +416 -0
  255. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-verifier.md +60 -0
  256. package/library/plugins/materio/ai.iowarp.clio/agents/materio-workflow-planner.md +238 -0
  257. package/library/plugins/materio/ai.iowarp.clio/fleets/materio-execute-task.md +50 -0
  258. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/add-task.md +66 -0
  259. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/archive-task.md +65 -0
  260. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/checkpoint.md +26 -0
  261. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-research-tasks.md +230 -0
  262. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-virtual-lab.md +181 -0
  263. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/execute-task.md +292 -0
  264. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/help.md +129 -0
  265. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/identify-research.md +206 -0
  266. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/literature-review.md +201 -0
  267. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/pause-research.md +12 -0
  268. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/progress.md +105 -0
  269. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/remove-task.md +63 -0
  270. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/resume-research.md +64 -0
  271. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/settings.md +16 -0
  272. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/status.md +92 -0
  273. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/upload-data.md +104 -0
  274. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/wtfp.md +145 -0
  275. package/library/plugins/materio/ai.iowarp.clio/references/execution.md +56 -0
  276. package/library/plugins/materio/ai.iowarp.portability/provenance.json +9 -0
  277. package/library/plugins/materio/assets/actions/add-task.md +86 -0
  278. package/library/plugins/materio/assets/actions/archive-task.md +84 -0
  279. package/library/plugins/materio/assets/actions/checkpoint.md +47 -0
  280. package/library/plugins/materio/assets/actions/define-research-tasks.md +228 -0
  281. package/library/plugins/materio/assets/actions/define-virtual-lab.md +179 -0
  282. package/library/plugins/materio/assets/actions/execute-task.md +290 -0
  283. package/library/plugins/materio/assets/actions/help.md +140 -0
  284. package/library/plugins/materio/assets/actions/identify-research.md +204 -0
  285. package/library/plugins/materio/assets/actions/literature-review.md +199 -0
  286. package/library/plugins/materio/assets/actions/pause-research.md +34 -0
  287. package/library/plugins/materio/assets/actions/progress.md +125 -0
  288. package/library/plugins/materio/assets/actions/remove-task.md +82 -0
  289. package/library/plugins/materio/assets/actions/resume-research.md +84 -0
  290. package/library/plugins/materio/assets/actions/settings.md +38 -0
  291. package/library/plugins/materio/assets/actions/status.md +112 -0
  292. package/library/plugins/materio/assets/actions/upload-data.md +123 -0
  293. package/library/plugins/materio/assets/actions/wtfp.md +179 -0
  294. package/library/plugins/materio/assets/references/research-domains.md +134 -0
  295. package/library/plugins/materio/assets/references/research-policy.md +77 -0
  296. package/library/plugins/materio/assets/references/traditional-workflows.md +146 -0
  297. package/library/plugins/materio/assets/scripts/check_physics.py +271 -0
  298. package/library/plugins/materio/assets/scripts/check_scripts.py +248 -0
  299. package/library/plugins/materio/assets/scripts/project_plugin.py +165 -0
  300. package/library/plugins/materio/assets/scripts/research_state.py +400 -0
  301. package/library/plugins/materio/assets/scripts/verify_citations.py +616 -0
  302. package/library/plugins/materio/assets/templates/RESEARCH.md +39 -0
  303. package/library/plugins/materio/assets/templates/VIRTUAL-LAB.md +120 -0
  304. package/library/plugins/materio/assets/templates/WORKFLOW.md +42 -0
  305. package/library/plugins/materio/assets/templates/config.json +5 -0
  306. package/library/plugins/materio/evals/scripts.yaml +29 -0
  307. package/library/plugins/materio/plugin.json +530 -0
  308. package/library/plugins/materio/skills/materio-lab-definer/SKILL.md +74 -0
  309. package/library/plugins/materio/skills/materio-literature-reviewer/SKILL.md +64 -0
  310. package/library/plugins/materio/skills/materio-research-explorer/SKILL.md +74 -0
  311. package/library/plugins/materio/skills/materio-task-executor/SKILL.md +214 -0
  312. package/library/plugins/materio/skills/materio-task-verifier/SKILL.md +46 -0
  313. package/library/plugins/materio/skills/materio-workflow-planner/SKILL.md +79 -0
  314. package/library/plugins/materio/tests/test_check_physics.py +139 -0
  315. package/library/plugins/materio/tests/test_check_scripts.py +140 -0
  316. package/library/plugins/materio/tests/test_research_state.py +291 -0
  317. package/library/plugins/materio/tests/test_verify_citations.py +337 -0
  318. package/library/prompts/README.md +7 -0
  319. package/library/registry.yaml +921 -0
  320. package/library/skills/README.md +120 -0
  321. package/{skills → library/skills}/coding/ast-grep/SKILL.md +1 -1
  322. package/{skills → library/skills}/coding/ast-grep/evals.md +1 -1
  323. package/library/skills/coding/ast-grep/plugin.json +23 -0
  324. package/{skills → library/skills}/coding/coding-standards/SKILL.md +1 -1
  325. package/{skills → library/skills}/coding/coding-standards/evals.md +1 -1
  326. package/library/skills/coding/coding-standards/plugin.json +23 -0
  327. package/{skills → library/skills}/coding/prototype/SKILL.md +1 -1
  328. package/{skills → library/skills}/coding/prototype/evals.md +1 -1
  329. package/library/skills/coding/prototype/plugin.json +23 -0
  330. package/{skills → library/skills}/coding/tdd/SKILL.md +1 -1
  331. package/{skills → library/skills}/coding/tdd/evals.md +1 -1
  332. package/library/skills/coding/tdd/plugin.json +23 -0
  333. package/{skills → library/skills}/context/context-handoff/SKILL.md +1 -1
  334. package/{skills → library/skills}/context/context-handoff/evals.md +1 -1
  335. package/library/skills/context/context-handoff/plugin.json +23 -0
  336. package/{skills → library/skills}/context/context-prime/SKILL.md +1 -1
  337. package/{skills → library/skills}/context/context-prime/evals.md +1 -1
  338. package/library/skills/context/context-prime/plugin.json +23 -0
  339. package/{skills → library/skills}/git/branch-closeout/SKILL.md +1 -1
  340. package/library/skills/git/branch-closeout/plugin.json +23 -0
  341. package/{skills → library/skills}/git/file-ticket/SKILL.md +1 -1
  342. package/library/skills/git/file-ticket/plugin.json +23 -0
  343. package/{skills → library/skills}/git/fix-issue/SKILL.md +1 -1
  344. package/library/skills/git/fix-issue/plugin.json +23 -0
  345. package/{skills → library/skills}/git/resolve-merge-conflicts/SKILL.md +1 -1
  346. package/{skills → library/skills}/git/resolve-merge-conflicts/evals.md +1 -1
  347. package/library/skills/git/resolve-merge-conflicts/plugin.json +23 -0
  348. package/{skills → library/skills}/git/ship/SKILL.md +1 -1
  349. package/library/skills/git/ship/plugin.json +23 -0
  350. package/{skills → library/skills}/git/worktree-create/SKILL.md +1 -1
  351. package/library/skills/git/worktree-create/plugin.json +23 -0
  352. package/{skills → library/skills}/git/worktree-merge/SKILL.md +1 -1
  353. package/library/skills/git/worktree-merge/plugin.json +23 -0
  354. package/{skills → library/skills}/meta/clio-coder-dev/SKILL.md +1 -1
  355. package/{skills → library/skills}/meta/clio-coder-dev/evals.md +1 -1
  356. package/library/skills/meta/clio-coder-dev/plugin.json +23 -0
  357. package/{skills → library/skills}/meta/clio-coder-test/SKILL.md +1 -1
  358. package/{skills → library/skills}/meta/clio-coder-test/evals.md +1 -1
  359. package/library/skills/meta/clio-coder-test/plugin.json +23 -0
  360. package/{skills → library/skills}/meta/credentials/SKILL.md +1 -1
  361. package/{skills → library/skills}/meta/credentials/evals.md +1 -1
  362. package/library/skills/meta/credentials/plugin.json +23 -0
  363. package/library/skills/meta/find-skills/SKILL.md +85 -0
  364. package/library/skills/meta/find-skills/evals.md +65 -0
  365. package/library/skills/meta/find-skills/plugin.json +23 -0
  366. package/{skills → library/skills}/meta/herdr/SKILL.md +1 -1
  367. package/{skills → library/skills}/meta/herdr/evals.md +1 -1
  368. package/library/skills/meta/herdr/plugin.json +23 -0
  369. package/{skills → library/skills}/meta/skill-craft/SKILL.md +23 -9
  370. package/{skills → library/skills}/meta/skill-craft/evals.md +11 -3
  371. package/library/skills/meta/skill-craft/plugin.json +23 -0
  372. package/{skills → library/skills}/planning/archify/SKILL.md +13 -13
  373. package/library/skills/planning/archify/plugin.json +23 -0
  374. package/{skills → library/skills}/planning/architecture/SKILL.md +1 -1
  375. package/{skills → library/skills}/planning/architecture/evals.md +1 -1
  376. package/library/skills/planning/architecture/plugin.json +23 -0
  377. package/{skills → library/skills}/planning/backlog/SKILL.md +1 -1
  378. package/{skills → library/skills}/planning/backlog/evals.md +1 -1
  379. package/library/skills/planning/backlog/plugin.json +23 -0
  380. package/{skills → library/skills}/planning/prd/SKILL.md +1 -1
  381. package/{skills → library/skills}/planning/prd/evals.md +1 -1
  382. package/library/skills/planning/prd/plugin.json +23 -0
  383. package/{skills → library/skills}/planning/product-intent/SKILL.md +1 -1
  384. package/{skills → library/skills}/planning/product-intent/evals.md +1 -1
  385. package/library/skills/planning/product-intent/plugin.json +23 -0
  386. package/{skills → library/skills}/planning/tech-spec/SKILL.md +1 -1
  387. package/{skills → library/skills}/planning/tech-spec/evals.md +1 -1
  388. package/library/skills/planning/tech-spec/plugin.json +23 -0
  389. package/{skills → library/skills}/registry.yaml +7 -7
  390. package/{skills → library/skills}/remote.yaml +1 -1
  391. package/{skills → library/skills}/research/arxiv-literature/SKILL.md +1 -1
  392. package/{skills → library/skills}/research/arxiv-literature/evals.md +1 -1
  393. package/library/skills/research/arxiv-literature/plugin.json +23 -0
  394. package/{skills → library/skills}/research/experiment-protocol/SKILL.md +1 -1
  395. package/{skills → library/skills}/research/experiment-protocol/evals.md +1 -1
  396. package/library/skills/research/experiment-protocol/plugin.json +23 -0
  397. package/{skills → library/skills}/research/scientific-debugging/SKILL.md +1 -1
  398. package/{skills → library/skills}/research/scientific-debugging/evals.md +1 -1
  399. package/library/skills/research/scientific-debugging/plugin.json +23 -0
  400. package/{skills → library/skills}/research/scientific-modernization/SKILL.md +1 -1
  401. package/{skills → library/skills}/research/scientific-modernization/evals.md +1 -1
  402. package/library/skills/research/scientific-modernization/plugin.json +23 -0
  403. package/{skills → library/skills}/skill-marketplace.json +37 -37
  404. package/{skills → library/skills}/workflow/cut-it/SKILL.md +1 -1
  405. package/{skills → library/skills}/workflow/cut-it/evals.md +1 -1
  406. package/library/skills/workflow/cut-it/plugin.json +23 -0
  407. package/{skills → library/skills}/workflow/design-council/SKILL.md +1 -1
  408. package/{skills → library/skills}/workflow/design-council/evals.md +1 -1
  409. package/library/skills/workflow/design-council/plugin.json +23 -0
  410. package/{skills → library/skills}/workflow/grill-me/SKILL.md +1 -1
  411. package/{skills → library/skills}/workflow/grill-me/evals.md +1 -1
  412. package/library/skills/workflow/grill-me/plugin.json +23 -0
  413. package/{skills → library/skills}/workflow/workflow-distiller/SKILL.md +14 -11
  414. package/{skills → library/skills}/workflow/workflow-distiller/evals.md +14 -6
  415. package/library/skills/workflow/workflow-distiller/plugin.json +23 -0
  416. package/package.json +12 -5
  417. package/src/cli/agents.ts +1 -1
  418. package/src/cli/config-inspect.ts +1 -1
  419. package/src/cli/configure.ts +2 -2
  420. package/src/cli/eval.ts +40 -6
  421. package/src/cli/extensions.ts +74 -8
  422. package/src/cli/fleet-preflight.ts +2 -0
  423. package/src/cli/fleet.ts +2 -0
  424. package/src/cli/index.ts +1 -3
  425. package/src/cli/interop-inspect.ts +61 -33
  426. package/src/cli/interop.ts +79 -9
  427. package/src/cli/library-import.ts +139 -0
  428. package/src/cli/library.ts +418 -120
  429. package/src/cli/run.ts +26 -9
  430. package/src/cli/skills-eval.ts +43 -6
  431. package/src/cli/skills-inventory.ts +6 -2
  432. package/src/cli/skills.ts +44 -491
  433. package/src/core/bus-events.ts +5 -0
  434. package/src/core/defaults.ts +1 -1
  435. package/src/core/recent-models.ts +2 -2
  436. package/src/core/session-routing.ts +3 -3
  437. package/src/core/state-file-lock.ts +1 -1
  438. package/src/core/tool-names.ts +5 -0
  439. package/src/domains/agents/extension.ts +42 -6
  440. package/src/domains/agents/fleet-commands.ts +92 -1
  441. package/src/domains/agents/fleet-contract.ts +87 -19
  442. package/src/domains/agents/recipe.ts +5 -4
  443. package/src/domains/agents/registry.ts +80 -24
  444. package/src/domains/config/keybindings.ts +155 -95
  445. package/src/domains/context/worker/contract.ts +91 -0
  446. package/src/domains/context/worker/pressure.ts +120 -0
  447. package/src/domains/context/worker/recall.ts +62 -0
  448. package/src/domains/context/worker/select.ts +164 -0
  449. package/src/domains/context/worker/snapshot.ts +35 -0
  450. package/src/domains/context/worker/store.ts +16 -0
  451. package/src/domains/context/working-set/replay/synthetic.ts +2 -1
  452. package/src/domains/dispatch/active-route-planner.ts +2 -0
  453. package/src/domains/dispatch/backoff.ts +1 -0
  454. package/src/domains/dispatch/code-step.ts +12 -2
  455. package/src/domains/dispatch/contract.ts +3 -0
  456. package/src/domains/dispatch/execution-plan.ts +2 -0
  457. package/src/domains/dispatch/extension.ts +109 -27
  458. package/src/domains/dispatch/fleet-plan.ts +10 -0
  459. package/src/domains/dispatch/fleet-run.ts +1 -0
  460. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  461. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  462. package/src/domains/dispatch/state.ts +1 -0
  463. package/src/domains/dispatch/types.ts +5 -0
  464. package/src/domains/dispatch/validation.ts +12 -0
  465. package/src/domains/dispatch/workspace-checkpoint.ts +1 -1
  466. package/src/domains/evidence/failure-attribution.ts +1 -0
  467. package/src/domains/evidence/trust-status.ts +22 -3
  468. package/src/domains/extensions/command-schema.ts +145 -0
  469. package/src/domains/extensions/command-tools.ts +15 -0
  470. package/src/domains/extensions/compatibility.ts +7 -0
  471. package/src/domains/extensions/contract.ts +0 -4
  472. package/src/domains/extensions/discovery.ts +69 -205
  473. package/src/domains/extensions/extension.ts +0 -4
  474. package/src/domains/extensions/index.ts +1 -5
  475. package/src/domains/extensions/manager.ts +1 -6
  476. package/src/domains/extensions/operator-commands.ts +29 -0
  477. package/src/domains/extensions/operator-runtime.ts +483 -0
  478. package/src/domains/extensions/public-api.ts +53 -0
  479. package/src/domains/extensions/runtime-child.mjs +114 -0
  480. package/src/domains/extensions/runtime-process.ts +306 -0
  481. package/src/domains/extensions/runtime-schema.ts +146 -0
  482. package/src/domains/extensions/{resources.ts → snapshot-access.ts} +1 -17
  483. package/src/domains/extensions/snapshot.ts +4 -32
  484. package/src/domains/extensions/state.ts +5 -83
  485. package/src/domains/extensions/types.ts +33 -34
  486. package/src/domains/interop/adopt.ts +546 -0
  487. package/src/domains/interop/detect.ts +50 -12
  488. package/src/domains/interop/foreign.ts +554 -0
  489. package/src/domains/interop/import.ts +277 -0
  490. package/src/domains/interop/index.ts +24 -0
  491. package/src/domains/interop/install.ts +6 -0
  492. package/src/domains/interop/inventory.ts +351 -0
  493. package/src/domains/interop/projection.ts +360 -0
  494. package/src/domains/interop/registry.ts +106 -3
  495. package/src/domains/interop/types.ts +51 -0
  496. package/src/domains/lifecycle/migrations/index.ts +0 -2
  497. package/src/domains/lifecycle/naming-resources.ts +1 -1
  498. package/src/domains/middleware/marketplace-offer.ts +1 -1
  499. package/src/domains/mux/contract.ts +1 -1
  500. package/src/domains/plugins/catalog.ts +204 -0
  501. package/src/domains/plugins/contract.ts +24 -0
  502. package/src/domains/plugins/discovery.ts +316 -0
  503. package/src/domains/plugins/extension.ts +40 -0
  504. package/src/domains/plugins/index.ts +77 -0
  505. package/src/domains/plugins/integrity.ts +6 -0
  506. package/src/domains/plugins/manifest.ts +3 -0
  507. package/src/domains/plugins/resources.ts +102 -0
  508. package/src/domains/plugins/state.ts +753 -0
  509. package/src/domains/plugins/types.ts +217 -0
  510. package/src/domains/prompts/extension.ts +9 -2
  511. package/src/domains/prompts/fragments/operating/skills.md +10 -10
  512. package/src/domains/resources/common-loader.ts +9 -6
  513. package/src/domains/resources/index.ts +67 -0
  514. package/src/domains/resources/library-actions.ts +836 -0
  515. package/src/domains/resources/library-evals.ts +38 -0
  516. package/src/domains/resources/library-inventory.ts +1048 -0
  517. package/src/domains/resources/library-types.ts +50 -0
  518. package/src/domains/resources/library-validation.ts +634 -0
  519. package/src/domains/resources/library.ts +437 -156
  520. package/src/domains/resources/package-references.ts +66 -0
  521. package/src/domains/resources/prompts/loader.ts +75 -41
  522. package/src/domains/resources/skills/install.ts +2 -2
  523. package/src/domains/resources/skills/loader.ts +77 -22
  524. package/src/domains/resources/skills/marketplace.ts +48 -57
  525. package/src/domains/resources/skills/promotion.ts +2 -2
  526. package/src/domains/resources/skills/provenance-pin.ts +17 -4
  527. package/src/domains/safety/action-classifier.ts +2 -2
  528. package/src/domains/safety/default-path-policy.ts +3 -1
  529. package/src/domains/safety/policy-engine.ts +1 -1
  530. package/src/domains/safety/protected-artifacts.ts +21 -5
  531. package/src/domains/safety/skill-authority.ts +5 -2
  532. package/src/domains/share/archive.ts +1 -1
  533. package/src/engine/apis/openai-completions.ts +52 -2
  534. package/src/engine/notices/pi-tui-LICENSE +21 -0
  535. package/src/engine/tui.ts +3 -0
  536. package/src/engine/worker-runtime.ts +58 -14
  537. package/src/engine/worker-tools.ts +5 -0
  538. package/src/entry/orchestrator.ts +26 -5
  539. package/src/entry/plugin-reload.ts +18 -0
  540. package/src/interactive/application-controller.ts +67 -21
  541. package/src/interactive/chat-loop.ts +32 -5
  542. package/src/interactive/chat-panel.ts +5 -1
  543. package/src/interactive/clio-editor.ts +53 -21
  544. package/src/interactive/command-output.ts +56 -1
  545. package/src/interactive/editor-submit.ts +65 -28
  546. package/src/interactive/fleet-run-preview.ts +2 -0
  547. package/src/interactive/follow-up-queue-panel.ts +3 -3
  548. package/src/interactive/footer/dashboard.ts +4 -1
  549. package/src/interactive/footer/notifications.ts +2 -2
  550. package/src/interactive/footer/widgets.ts +2 -2
  551. package/src/interactive/interactive-application.ts +209 -21
  552. package/src/interactive/interactive-input-runtime.ts +254 -7
  553. package/src/interactive/interactive-presentation.ts +41 -12
  554. package/src/interactive/interactive-slash-runtime.ts +37 -8
  555. package/src/interactive/keybinding-manager.ts +156 -79
  556. package/src/interactive/keyboard-owner.ts +37 -0
  557. package/src/interactive/leader-key.ts +49 -102
  558. package/src/interactive/leader-menu.ts +45 -0
  559. package/src/interactive/overlay-ask-user-lifecycle.ts +9 -1
  560. package/src/interactive/overlay-frame.ts +15 -0
  561. package/src/interactive/overlay-key-routing.ts +46 -47
  562. package/src/interactive/overlay-lifecycle.ts +30 -15
  563. package/src/interactive/overlay-resource-openers.ts +56 -46
  564. package/src/interactive/overlays/ask-user.ts +630 -556
  565. package/src/interactive/overlays/extension-panel.ts +70 -0
  566. package/src/interactive/overlays/extensions.ts +28 -5
  567. package/src/interactive/overlays/fleet-run-approval.ts +7 -3
  568. package/src/interactive/overlays/help-reference.ts +89 -40
  569. package/src/interactive/overlays/interop.ts +122 -3
  570. package/src/interactive/overlays/keybinding-detail.ts +2 -2
  571. package/src/interactive/overlays/library-lifecycle.ts +90 -0
  572. package/src/interactive/overlays/library-model.ts +574 -0
  573. package/src/interactive/overlays/library-review.ts +557 -0
  574. package/src/interactive/overlays/library-tabs.ts +3 -15
  575. package/src/interactive/overlays/library.ts +602 -0
  576. package/src/interactive/overlays/list-overlay.ts +218 -39
  577. package/src/interactive/overlays/model-selector.ts +28 -25
  578. package/src/interactive/overlays/session-selector.ts +9 -3
  579. package/src/interactive/overlays/settings.ts +25 -18
  580. package/src/interactive/overlays/tree-selector.ts +16 -11
  581. package/src/interactive/permission-hint.ts +13 -0
  582. package/src/interactive/permission-overlay.ts +77 -28
  583. package/src/interactive/prompt-source-label.ts +21 -0
  584. package/src/interactive/renderers/reference-card.ts +35 -0
  585. package/src/interactive/renderers/worker-entry.ts +35 -3
  586. package/src/interactive/slash-autocomplete.ts +99 -1
  587. package/src/interactive/slash-commands.ts +390 -67
  588. package/src/interactive/slash-spec.ts +0 -1
  589. package/src/interactive/terminal-lease.ts +44 -12
  590. package/src/interactive/turn-queues.ts +8 -7
  591. package/src/interactive/turn-runtime.ts +1 -1
  592. package/src/interactive/view/view-overlay.ts +19 -14
  593. package/src/interactive/welcome-dashboard.ts +525 -408
  594. package/src/tools/bootstrap.ts +8 -0
  595. package/src/tools/builtin-tool-catalog.ts +7 -2
  596. package/src/tools/context/index.ts +58 -5
  597. package/src/tools/context/library.ts +465 -0
  598. package/src/tools/context/surface.ts +20 -6
  599. package/src/tools/core-bootstrap.ts +3 -0
  600. package/src/tools/dispatch-admission.ts +24 -1
  601. package/src/tools/dispatch-arguments.ts +8 -0
  602. package/src/tools/dispatch-plan.ts +32 -0
  603. package/src/tools/dispatch-schema.ts +31 -1
  604. package/src/tools/dispatch-types.ts +3 -0
  605. package/src/tools/dispatch.ts +1 -1
  606. package/src/tools/harness-extensions.ts +169 -0
  607. package/src/tools/observation.ts +4 -0
  608. package/src/tools/policy.ts +7 -1
  609. package/src/tools/registry.ts +19 -1
  610. package/src/tools/worker-evidence.ts +5 -0
  611. package/src/worker/context-seed.ts +192 -0
  612. package/src/worker/entry.ts +1 -0
  613. package/src/worker/spec-contract.ts +8 -1
  614. package/dist/chunk-3UW3KU4A.js +0 -21
  615. package/dist/chunk-536HXRFE.js +0 -1257
  616. package/dist/chunk-B3MOMLJ4.js +0 -433
  617. package/dist/chunk-CXQ37WJH.js +0 -45
  618. package/dist/chunk-KTFSFCVN.js +0 -46
  619. package/dist/chunk-QCOV5DFY.js +0 -911
  620. package/dist/chunk-QRFXEO6Y.js +0 -17
  621. package/dist/chunk-VAHLPXPY.js +0 -399
  622. package/dist/interop-RVCAYECG.js +0 -115
  623. package/dist/library-CTKZA7K3.js +0 -226
  624. package/dist/skills-OXFEAWMT.js +0 -510
  625. package/skills/README.md +0 -418
  626. package/skills/meta/find-skills/SKILL.md +0 -78
  627. package/skills/meta/find-skills/evals.md +0 -47
  628. package/src/domains/extensions/resource-path.ts +0 -27
  629. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +0 -27
  630. package/src/interactive/overlays/agents.ts +0 -70
  631. package/src/interactive/overlays/library-install-confirm.ts +0 -152
  632. package/src/interactive/overlays/prompts.ts +0 -89
  633. package/src/interactive/overlays/skills-hub.ts +0 -615
  634. /package/{skills → library/skills}/coding/ast-grep/references/rule_reference.md +0 -0
  635. /package/{skills → library/skills}/coding/prototype/references/LOGIC.md +0 -0
  636. /package/{skills → library/skills}/coding/prototype/references/UI.md +0 -0
  637. /package/{skills → library/skills}/coding/tdd/references/mocking.md +0 -0
  638. /package/{skills → library/skills}/coding/tdd/references/tests.md +0 -0
  639. /package/{skills → library/skills}/context/context-handoff/scripts/new-handoff.sh +0 -0
  640. /package/{skills → library/skills}/git/branch-closeout/evals.md +0 -0
  641. /package/{skills → library/skills}/git/branch-closeout/references/closeout-checklist.md +0 -0
  642. /package/{skills → library/skills}/git/file-ticket/assets/issue-template.md +0 -0
  643. /package/{skills → library/skills}/git/file-ticket/evals.md +0 -0
  644. /package/{skills → library/skills}/git/file-ticket/references/issue-discovery.md +0 -0
  645. /package/{skills → library/skills}/git/fix-issue/evals.md +0 -0
  646. /package/{skills → library/skills}/git/fix-issue/references/diagnosis-and-rca.md +0 -0
  647. /package/{skills → library/skills}/git/resolve-merge-conflicts/references/conflict-matrix.md +0 -0
  648. /package/{skills → library/skills}/git/ship/assets/pr-template.md +0 -0
  649. /package/{skills → library/skills}/git/ship/evals.md +0 -0
  650. /package/{skills → library/skills}/git/ship/references/remote-and-branch-policy.md +0 -0
  651. /package/{skills → library/skills}/git/worktree-create/evals.md +0 -0
  652. /package/{skills → library/skills}/git/worktree-create/references/worktree-setup.md +0 -0
  653. /package/{skills → library/skills}/git/worktree-merge/evals.md +0 -0
  654. /package/{skills → library/skills}/git/worktree-merge/references/merge-strategies.md +0 -0
  655. /package/{skills → library/skills}/meta/clio-coder-test/references/harness.md +0 -0
  656. /package/{skills → library/skills}/meta/clio-coder-test/references/test-map.md +0 -0
  657. /package/{skills → library/skills}/planning/archify/evals.md +0 -0
@@ -12,34 +12,70 @@ export function createAgentsBundle(_context: DomainContext): DomainBundle<Agents
12
12
  let specs: ReadonlyArray<AgentSpec> = [];
13
13
  let diagnostics: ReadonlyArray<AgentRecipeDiagnostic> = [];
14
14
  let revision = 0;
15
+ let rediscoveryPending = false;
16
+ let attemptedRecipes: ReadonlyArray<AgentRecipe> | null = null;
15
17
 
16
18
  function discover(): void {
19
+ attemptedRecipes = null;
17
20
  const nextDiagnostics: AgentRecipeDiagnostic[] = [];
18
21
  const merged = discoverAgentRecipes(process.cwd(), nextDiagnostics);
22
+ attemptedRecipes = merged;
19
23
  const config = _context.getContract<ConfigContract>("config");
20
24
  assertAgentIdNamespace(merged, config?.get()?.integrations.externalAgents?.entries ?? []);
21
25
  recipes = merged;
22
26
  specs = recipes.map(normalizeAgentSpec);
23
27
  diagnostics = nextDiagnostics;
24
28
  revision += 1;
29
+ rediscoveryPending = false;
25
30
  }
26
31
 
27
32
  let unsubscribeExtensionsReload: (() => void) | null = null;
28
33
  const extension: DomainExtension = {
29
34
  async start() {
30
35
  discover();
31
- // Recipes are cached at start; extension agent roots come from the
32
- // committed extension generation, so a changed generation rediscovers.
33
- unsubscribeExtensionsReload = _context.bus.on(BusChannels.ExtensionsReloaded, (payload: unknown) => {
34
- if ((payload as { changed?: unknown } | undefined)?.changed !== true) return;
36
+ // Recipes are cached at start; plugin agent roots come from the
37
+ // committed plugin generation, so a changed generation rediscovers.
38
+ const onResourceReload = (payload: unknown) => {
39
+ if (!rediscoveryPending && (payload as { changed?: unknown } | undefined)?.changed !== true) return;
35
40
  try {
36
41
  discover();
37
42
  } catch (error) {
43
+ // Snapshot admission may already have revoked packages. Never retain
44
+ // their cached authority when namespace or filesystem discovery fails.
45
+ rediscoveryPending = true;
46
+ recipes = attemptedRecipes ?? recipes.filter((recipe) => recipe.source === "builtin");
47
+ let conflictingIds = new Set<string>();
48
+ try {
49
+ const config = _context.getContract<ConfigContract>("config");
50
+ conflictingIds = new Set((config?.get()?.integrations.externalAgents?.entries ?? []).map((agent) => agent.id));
51
+ } catch {
52
+ // If even current operator configuration is unreadable, no custom
53
+ // cached recipe has a trustworthy namespace admission decision.
54
+ recipes = recipes.filter((recipe) => recipe.source === "builtin");
55
+ }
56
+ recipes = recipes.filter((recipe) => recipe.source !== "plugin" && !conflictingIds.has(recipe.id));
57
+ specs = recipes.map(normalizeAgentSpec);
58
+ diagnostics = [
59
+ ...diagnostics,
60
+ {
61
+ source: "project" as const,
62
+ filepath: process.cwd(),
63
+ message: `recipe reload failed; package recipes withdrawn until retry: ${error instanceof Error ? error.message : String(error)}`,
64
+ },
65
+ ].slice(-100);
66
+ revision += 1;
38
67
  process.stderr.write(
39
- `[clio-coder:agents] rediscovery after extension reload failed: ${error instanceof Error ? error.message : String(error)}\n`,
68
+ `[clio-coder:agents] rediscovery after resource reload failed: ${error instanceof Error ? error.message : String(error)}\n`,
40
69
  );
41
70
  }
42
- });
71
+ };
72
+ const unsubscribe = [
73
+ _context.bus.on(BusChannels.ExtensionsReloaded, onResourceReload),
74
+ _context.bus.on(BusChannels.PluginsReloaded, onResourceReload),
75
+ ];
76
+ unsubscribeExtensionsReload = () => {
77
+ for (const stop of unsubscribe) stop();
78
+ };
43
79
  },
44
80
  async stop() {
45
81
  unsubscribeExtensionsReload?.();
@@ -38,7 +38,14 @@ export const FLEET_COMMAND_DEFAULT_TIMEOUT_MS = 600_000;
38
38
  */
39
39
  export const FLEET_COMMAND_BASE_ENV: ReadonlyArray<string> = ["PATH", "HOME", "LANG", "LC_ALL", "TZ", "TMPDIR"];
40
40
 
41
+ export interface FleetCommandArgumentSlot {
42
+ name: string;
43
+ maxLength: number;
44
+ }
45
+
41
46
  export interface FleetCommand {
47
+ /** Operator-owned required positional data slots; omission forbids appended args. */
48
+ argumentSlots?: ReadonlyArray<FleetCommandArgumentSlot>;
42
49
  id: string;
43
50
  /** argv list, never a shell string: no quoting bugs and no shell injection. */
44
51
  argv: ReadonlyArray<string>;
@@ -59,6 +66,18 @@ export interface FleetCommandRegistry {
59
66
  const CommandSchema = Type.Object(
60
67
  {
61
68
  argv: Type.Array(Type.String({ minLength: 1 }), { minItems: 1 }),
69
+ argumentSlots: Type.Optional(
70
+ Type.Array(
71
+ Type.Object(
72
+ {
73
+ name: Type.String({ pattern: "^[A-Za-z][A-Za-z0-9_-]{0,63}$" }),
74
+ maxLength: Type.Integer({ minimum: 1, maximum: 8192 }),
75
+ },
76
+ { additionalProperties: false },
77
+ ),
78
+ { minItems: 1, maxItems: 64 },
79
+ ),
80
+ ),
62
81
  cwd: Type.Optional(Type.String({ minLength: 1 })),
63
82
  timeoutMs: Type.Optional(
64
83
  Type.Integer({ minimum: FLEET_COMMAND_MIN_TIMEOUT_MS, maximum: FLEET_COMMAND_MAX_TIMEOUT_MS }),
@@ -114,7 +133,17 @@ export function parseFleetCommands(raw: string, sourcePath: string): FleetComman
114
133
  if (schemaError !== null) throw new Error(`fleet commands ${sourcePath}: ${schemaError}`);
115
134
  const registry = parsed as {
116
135
  version: 1;
117
- commands: Record<string, { argv: string[]; cwd?: string; timeoutMs?: number; env?: string[]; description?: string }>;
136
+ commands: Record<
137
+ string,
138
+ {
139
+ argv: string[];
140
+ argumentSlots?: FleetCommandArgumentSlot[];
141
+ cwd?: string;
142
+ timeoutMs?: number;
143
+ env?: string[];
144
+ description?: string;
145
+ }
146
+ >;
118
147
  };
119
148
  const commands = new Map<string, FleetCommand>();
120
149
  for (const [id, entry] of Object.entries(registry.commands)) {
@@ -130,9 +159,16 @@ export function parseFleetCommands(raw: string, sourcePath: string): FleetComman
130
159
  throw new Error(`fleet commands ${sourcePath}: command '${id}' env name '${name}' is not a variable name`);
131
160
  }
132
161
  }
162
+ if (entry.argumentSlots)
163
+ validateFleetCommandArgs(
164
+ { id, argv: entry.argv, cwd: "", timeoutMs: 1000, env: [], description: "", argumentSlots: entry.argumentSlots },
165
+ entry.argumentSlots.map(() => "{{slot}}"),
166
+ { allowTemplates: true },
167
+ );
133
168
  commands.set(id, {
134
169
  id,
135
170
  argv: [...entry.argv],
171
+ ...(entry.argumentSlots ? { argumentSlots: entry.argumentSlots.map((slot) => ({ ...slot })) } : {}),
136
172
  cwd: entry.cwd === undefined ? "" : checkCwd(id, entry.cwd, sourcePath),
137
173
  timeoutMs: entry.timeoutMs ?? FLEET_COMMAND_DEFAULT_TIMEOUT_MS,
138
174
  env: [...(entry.env ?? [])],
@@ -152,3 +188,58 @@ export function loadFleetCommands(cwd: string): FleetCommandRegistry | null {
152
188
  if (!existsSync(path)) return null;
153
189
  return parseFleetCommands(readFileSync(path, "utf8"), path);
154
190
  }
191
+
192
+ /** Bind authored code-step arguments before plan admission; each stays one argv token. */
193
+ export function resolveFleetCommandArgs(
194
+ args: ReadonlyArray<string>,
195
+ vars: Readonly<Record<string, string>> = {},
196
+ ): string[] {
197
+ if (args.length > 64) throw new Error("fleet code args: at most 64 arguments are allowed");
198
+ return args.map((token) => {
199
+ const match = /^\{\{\s*([A-Za-z_][A-Za-z0-9_-]*)\s*\}\}$/u.exec(token);
200
+ if (!match && token.includes("{{")) throw new Error("fleet code args: placeholders must occupy a whole argument");
201
+ const value = match ? vars[match[1] ?? ""] : token;
202
+ if (value === undefined) throw new Error(`fleet code args: missing variable ${match?.[1]} (pass --var name=value)`);
203
+ if (value.includes("\0") || value.length > 8192)
204
+ throw new Error("fleet code args: invalid NUL or oversized argument");
205
+ return value;
206
+ });
207
+ }
208
+
209
+ /** Enforce operator-declared data slots; contracts cannot append flags or executable code. */
210
+ export function validateFleetCommandArgs(
211
+ command: FleetCommand,
212
+ args: ReadonlyArray<string>,
213
+ options: { allowTemplates?: boolean } = {},
214
+ ): void {
215
+ const slots = command.argumentSlots ?? [];
216
+ if (
217
+ slots.length > 64 ||
218
+ new Set(slots.map((slot) => slot.name)).size !== slots.length ||
219
+ slots.some(
220
+ (slot) =>
221
+ !/^[A-Za-z][A-Za-z0-9_-]{0,63}$/u.test(slot.name) ||
222
+ !Number.isInteger(slot.maxLength) ||
223
+ slot.maxLength < 1 ||
224
+ slot.maxLength > 8192,
225
+ )
226
+ ) {
227
+ throw new Error(`fleet command '${command.id}': invalid argumentSlots declaration`);
228
+ }
229
+ if (args.length !== slots.length) {
230
+ throw new Error(
231
+ `fleet command '${command.id}': expected ${slots.length} declared argument slots, got ${args.length}; the operator must declare argumentSlots in commands.yaml`,
232
+ );
233
+ }
234
+ for (let index = 0; index < slots.length; index++) {
235
+ const slot = slots[index];
236
+ const value = args[index];
237
+ if (!slot || typeof value !== "string") throw new Error(`fleet command '${command.id}': invalid argument`);
238
+ if (options.allowTemplates && /^\{\{\s*([A-Za-z_][A-Za-z0-9_-]*)\s*\}\}$/u.test(value)) continue;
239
+ if (value.length === 0 || value.length > slot.maxLength || value.includes("\0") || value.startsWith("-")) {
240
+ throw new Error(
241
+ `fleet command '${command.id}': argument '${slot.name}' must be nonempty data of at most ${slot.maxLength} characters, without NUL or a leading dash; fixed flags belong in argv`,
242
+ );
243
+ }
244
+ }
245
+ }
@@ -1,3 +1,5 @@
1
+ import { enabledPluginResourceRoots } from "../plugins/index.js";
2
+ import { resolvePackagePathReference, resolvePackageReferences } from "../resources/package-references.js";
1
3
  /**
2
4
  * Repo-owned fleet contracts (Symphony P5: work policy lives in the repo,
3
5
  * versioned and strictly validated).
@@ -16,8 +18,12 @@ import { Type } from "typebox";
16
18
  import { Value } from "typebox/value";
17
19
  import { resolvePackageRoot } from "../../core/package-root.js";
18
20
  import { clioConfigDir } from "../../core/xdg.js";
19
- import { enabledExtensionResourceRoots } from "../extensions/index.js";
20
- import { type FleetCommandRegistry, loadFleetCommands } from "./fleet-commands.js";
21
+ import {
22
+ type FleetCommandRegistry,
23
+ loadFleetCommands,
24
+ resolveFleetCommandArgs,
25
+ validateFleetCommandArgs,
26
+ } from "./fleet-commands.js";
21
27
  import { parseFrontmatter } from "./frontmatter.js";
22
28
  import { normalizeWriteBoundary, WRITE_BOUNDARY_MAX_ENTRIES } from "./write-boundary.js";
23
29
 
@@ -111,6 +117,7 @@ export interface FleetContractCodeStep {
111
117
  kind: "code";
112
118
  id: string;
113
119
  command: string;
120
+ args?: ReadonlyArray<string>;
114
121
  scope: FleetStepScope;
115
122
  dependencies: ReadonlyArray<string>;
116
123
  commitFrom?: ReadonlyArray<string>;
@@ -119,7 +126,13 @@ export interface FleetContractCodeStep {
119
126
 
120
127
  /** The verification half of a loop: the question that decides continuation. */
121
128
  export type FleetContractLoopCheck =
122
- | { kind: "code"; command: string; scope: FleetStepScope; writes?: ReadonlyArray<string> }
129
+ | {
130
+ kind: "code";
131
+ command: string;
132
+ args?: ReadonlyArray<string>;
133
+ scope: FleetStepScope;
134
+ writes?: ReadonlyArray<string>;
135
+ }
123
136
  | {
124
137
  kind: "agent";
125
138
  agent: string;
@@ -199,7 +212,7 @@ export interface FleetContract {
199
212
  path: string;
200
213
  }
201
214
 
202
- export type FleetContractSource = "builtin" | "extension" | "user" | "project";
215
+ export type FleetContractSource = "builtin" | "plugin" | "user" | "project";
203
216
 
204
217
  export interface FleetContractListing {
205
218
  name: string;
@@ -291,6 +304,7 @@ function codeStepSchema(version: FleetContractVersion) {
291
304
  kind: Type.Literal("code"),
292
305
  id: Type.String({ minLength: 1 }),
293
306
  command: Type.String({ minLength: 1 }),
307
+ args: Type.Optional(Type.Array(Type.String({ maxLength: 8192, pattern: "^[^\\u0000]*$" }), { maxItems: 64 })),
294
308
  scope: FleetScopeSchema,
295
309
  dependencies: Type.Array(Type.String({ minLength: 1 })),
296
310
  ...(version >= 3 ? { commitFrom: Type.Optional(Type.Array(Type.String({ minLength: 1 }), { minItems: 1 })) } : {}),
@@ -313,6 +327,7 @@ function loopStepSchema(version: FleetContractVersion) {
313
327
  {
314
328
  kind: Type.Literal("code"),
315
329
  command: Type.String({ minLength: 1 }),
330
+ args: Type.Optional(Type.Array(Type.String({ maxLength: 8192, pattern: "^[^\\u0000]*$" }), { maxItems: 64 })),
316
331
  scope: FleetScopeSchema,
317
332
  ...writesSchema(version),
318
333
  },
@@ -412,12 +427,14 @@ type RawStep = {
412
427
  id: string;
413
428
  agent?: string;
414
429
  command?: string;
430
+ args?: string[];
415
431
  commitFrom?: string[];
416
432
  writes?: string[];
417
433
  maxAttempts?: number;
418
434
  check?: {
419
435
  kind: "code" | "agent" | "gate";
420
436
  command?: string;
437
+ args?: string[];
421
438
  agent?: string;
422
439
  gate?: string;
423
440
  scope: FleetStepScope;
@@ -488,7 +505,13 @@ function normalizeStep(step: RawStep): FleetContractStep {
488
505
  dependencies: [...step.dependencies],
489
506
  check:
490
507
  check.kind === "code"
491
- ? { kind: "code", command: check.command ?? "", scope: check.scope, ...normalizedWrites(check.writes) }
508
+ ? {
509
+ kind: "code",
510
+ command: check.command ?? "",
511
+ ...(check.args ? { args: [...check.args] } : {}),
512
+ scope: check.scope,
513
+ ...normalizedWrites(check.writes),
514
+ }
492
515
  : check.kind === "gate"
493
516
  ? { kind: "gate", gate: check.gate ?? "" }
494
517
  : {
@@ -512,6 +535,7 @@ function normalizeStep(step: RawStep): FleetContractStep {
512
535
  kind: "code",
513
536
  id: step.id,
514
537
  command: step.command ?? "",
538
+ ...(step.args ? { args: [...step.args] } : {}),
515
539
  scope: step.scope,
516
540
  dependencies: [...step.dependencies],
517
541
  ...(step.commitFrom !== undefined ? { commitFrom: [...step.commitFrom] } : {}),
@@ -901,13 +925,20 @@ export function fleetLoopSteps(contract: FleetContract): FleetContractLoopStep[]
901
925
  * check is a code step in every way that matters to the registry, so it is
902
926
  * bound to a real command by the same validation.
903
927
  */
904
- export function fleetCodeSteps(contract: FleetContract): Array<{ id: string; command: string }> {
905
- const steps: Array<{ id: string; command: string }> = [];
928
+ export function fleetCodeSteps(
929
+ contract: FleetContract,
930
+ ): Array<{ id: string; command: string; args?: ReadonlyArray<string> }> {
931
+ const steps: Array<{ id: string; command: string; args?: ReadonlyArray<string> }> = [];
906
932
  for (const step of contract.steps) {
907
- if (step.kind === "code") steps.push({ id: step.id, command: step.command });
933
+ if (step.kind === "code")
934
+ steps.push({ id: step.id, command: step.command, ...(step.args ? { args: step.args } : {}) });
908
935
  else if (step.kind === "gate") steps.push({ id: step.id, command: step.run });
909
936
  else if (step.kind === "loop" && step.check.kind === "code") {
910
- steps.push({ id: fleetLoopCheckStepId(step.id, 1), command: step.check.command });
937
+ steps.push({
938
+ id: fleetLoopCheckStepId(step.id, 1),
939
+ command: step.check.command,
940
+ ...(step.check.args ? { args: step.check.args } : {}),
941
+ });
911
942
  }
912
943
  }
913
944
  return steps;
@@ -945,19 +976,26 @@ export class FleetCommandRegistryMissingError extends Error {
945
976
  * failure mode this whole mechanism exists to prevent: a green test phase that
946
977
  * never ran a test.
947
978
  */
948
- export function validateFleetCommands(contract: FleetContract, registry: FleetCommandRegistry | null): void {
979
+ export function validateFleetCommands(
980
+ contract: FleetContract,
981
+ registry: FleetCommandRegistry | null,
982
+ vars?: Readonly<Record<string, string>>,
983
+ ): void {
949
984
  const codeSteps = fleetCodeSteps(contract);
950
985
  if (codeSteps.length === 0) return;
951
986
  if (registry === null) {
952
987
  throw new FleetCommandRegistryMissingError(contract.path, [...new Set(codeSteps.map((step) => step.command))].sort());
953
988
  }
954
989
  for (const step of codeSteps) {
955
- if (!registry.commands.has(step.command)) {
990
+ const command = registry.commands.get(step.command);
991
+ if (!command) {
956
992
  const known = [...registry.commands.keys()].sort().join(", ");
957
993
  throw new Error(
958
994
  `fleet contract ${contract.path}: step '${step.id}' names unknown command '${step.command}' (registered: ${known || "none"})`,
959
995
  );
960
996
  }
997
+ const args = vars === undefined ? (step.args ?? []) : resolveFleetCommandArgs(step.args ?? [], vars);
998
+ validateFleetCommandArgs(command, args, { allowTemplates: vars === undefined });
961
999
  }
962
1000
  }
963
1001
 
@@ -971,21 +1009,48 @@ function builtinFleetsDir(): string {
971
1009
  return join(resolvePackageRoot(), "src", "domains", "agents", "fleets");
972
1010
  }
973
1011
 
974
- function fleetSources(cwd: string): ReadonlyArray<{ dir: string; source: FleetContractSource }> {
1012
+ export function resolveFleetReferences(
1013
+ contract: FleetContract,
1014
+ source: { source: FleetContractSource; rootPath?: string },
1015
+ ): FleetContract {
1016
+ if (!source.rootPath) return contract;
1017
+ const context = { rootPath: source.rootPath, plugin: source.source === "plugin" };
1018
+ // Authored text is resolved after schema parsing; paths cannot inject YAML keys.
1019
+ return {
1020
+ ...contract,
1021
+ body: resolvePackageReferences(contract.body, context),
1022
+ steps: contract.steps.map((step) => {
1023
+ if (step.kind === "code" && step.args)
1024
+ return { ...step, args: step.args.map((arg) => resolvePackagePathReference(arg, context)) };
1025
+ if (step.kind === "loop" && step.check.kind === "code" && step.check.args)
1026
+ return {
1027
+ ...step,
1028
+ check: { ...step.check, args: step.check.args.map((arg) => resolvePackagePathReference(arg, context)) },
1029
+ };
1030
+ return step;
1031
+ }),
1032
+ };
1033
+ }
1034
+
1035
+ function fleetSources(cwd: string): ReadonlyArray<{ dir: string; source: FleetContractSource; rootPath?: string }> {
975
1036
  return [
976
1037
  { dir: builtinFleetsDir(), source: "builtin" },
977
- ...enabledExtensionResourceRoots("fleets", cwd)
1038
+ ...enabledPluginResourceRoots("fleets", cwd)
978
1039
  .sort((left, right) => left.source.localeCompare(right.source))
979
- .map((root) => ({ dir: root.path, source: "extension" as const })),
1040
+ .map((root) => ({ dir: root.path, rootPath: root.rootPath, source: "plugin" as const })),
980
1041
  { dir: join(clioConfigDir(), "fleets"), source: "user" },
981
1042
  { dir: fleetsDir(cwd), source: "project" },
982
1043
  ];
983
1044
  }
984
1045
 
985
- function fleetContractPath(cwd: string, name: string): { path: string; source: FleetContractSource } | null {
1046
+ function fleetContractPath(
1047
+ cwd: string,
1048
+ name: string,
1049
+ ): { path: string; source: FleetContractSource; rootPath?: string } | null {
986
1050
  for (const source of [...fleetSources(cwd)].reverse()) {
987
1051
  const candidate = join(source.dir, `${name}.md`);
988
- if (existsSync(candidate)) return { path: candidate, source: source.source };
1052
+ if (existsSync(candidate))
1053
+ return { path: candidate, source: source.source, ...(source.rootPath ? { rootPath: source.rootPath } : {}) };
989
1054
  }
990
1055
  return null;
991
1056
  }
@@ -995,7 +1060,7 @@ export function loadFleetContract(cwd: string, name: string): FleetContract {
995
1060
  if (located === null) {
996
1061
  throw new Error(`fleet contract not found: ${join(fleetsDir(cwd), `${name}.md`)} (and no builtin named '${name}')`);
997
1062
  }
998
- const contract = parseFleetContract(readFileSync(located.path, "utf8"), located.path);
1063
+ const contract = resolveFleetReferences(parseFleetContract(readFileSync(located.path, "utf8"), located.path), located);
999
1064
  validateFleetCommands(contract, loadFleetCommands(cwd));
1000
1065
  return contract;
1001
1066
  }
@@ -1027,12 +1092,15 @@ export function listFleetContracts(cwd: string): FleetContractListing[] {
1027
1092
  }
1028
1093
  const listings = new Map<string, FleetContractListing>();
1029
1094
  const sources = fleetSources(cwd);
1030
- for (const { dir, source } of sources) {
1095
+ for (const { dir, source, rootPath } of sources) {
1031
1096
  for (const file of listDirectory(dir)) {
1032
1097
  const path = join(dir, file);
1033
1098
  const name = basename(file, ".md");
1034
1099
  try {
1035
- const contract = parseFleetContract(readFileSync(path, "utf8"), path);
1100
+ const contract = resolveFleetReferences(parseFleetContract(readFileSync(path, "utf8"), path), {
1101
+ source,
1102
+ ...(rootPath ? { rootPath } : {}),
1103
+ });
1036
1104
  if (registryError !== null && fleetCodeSteps(contract).length > 0) throw new Error(registryError);
1037
1105
  validateFleetCommands(contract, registry);
1038
1106
  listings.set(name, { name, path, source, contract, error: null, needsCommands: null });
@@ -131,20 +131,21 @@ export interface AgentRecipe {
131
131
  resultContract: ResultContract;
132
132
  product?: AgentProduct;
133
133
  tags: ReadonlyArray<string>;
134
- source: "builtin" | "extension" | "user" | "project";
134
+ source: "builtin" | "plugin" | "user" | "project";
135
135
  filepath: string;
136
136
  /** Persona prompt body. */
137
137
  body: string;
138
138
  }
139
139
 
140
140
  export interface RecipeSource {
141
+ rootPath?: string;
141
142
  dir: string;
142
143
  source: AgentRecipe["source"];
143
- /** Project root whose extension and skill resources are being discovered. */
144
+ /** Project root whose package and skill resources are being discovered. */
144
145
  cwd?: string;
145
- /** Stable provenance used to correlate resources from one extension. */
146
+ /** Stable provenance used to correlate resources from one package. */
146
147
  origin?: string;
147
- /** The declaring extension's skill root; extension agents may bind only here. */
148
+ /** The declaring package's skill root; package agents may bind only here. */
148
149
  skillRoot?: string;
149
150
  }
150
151
 
@@ -1,8 +1,10 @@
1
1
  import { existsSync, readdirSync, readFileSync, realpathSync } from "node:fs";
2
2
  import path from "node:path";
3
+ import { readSettings } from "../../core/config.js";
3
4
  import { resolvePackageRoot } from "../../core/package-root.js";
4
5
  import { clioConfigDir } from "../../core/xdg.js";
5
- import { enabledExtensionResourceRoots } from "../extensions/index.js";
6
+ import { enabledPluginResourceRoots } from "../plugins/index.js";
7
+ import { resolvePackageReferences } from "../resources/package-references.js";
6
8
  import { loadSkills } from "../resources/skills/loader.js";
7
9
  import { parseFrontmatter } from "./frontmatter.js";
8
10
  import { type AgentRecipe, type RecipeSource, recipeIdFromPath } from "./recipe.js";
@@ -15,6 +17,25 @@ export interface AgentRecipeDiagnostic {
15
17
  source: RecipeSource["source"];
16
18
  filepath: string;
17
19
  message: string;
20
+ /**
21
+ * Why a file is not in the catalog. `quarantine` is a parse/policy failure;
22
+ * `ignored` is a reserved or protected id; `overridden` lost same-id
23
+ * precedence to a later source. Absent on records from before this field.
24
+ */
25
+ kind?: "quarantine" | "ignored" | "overridden";
26
+ /** Recipe id when it was parsed; quarantined files may not have one. */
27
+ id?: string;
28
+ /** Source that won, for `overridden`. */
29
+ by?: RecipeSource["source"];
30
+ /** Parsed audience of an ignored/overridden recipe, so listings can keep hiding internal ones. */
31
+ audience?: AgentRecipe["audience"];
32
+ }
33
+
34
+ /** Diagnostics are a bounded inspection aid, never a second catalog. */
35
+ const MAX_AGENT_RECIPE_DIAGNOSTICS = 256;
36
+
37
+ function recordDiagnostic(diagnostics: AgentRecipeDiagnostic[], diagnostic: AgentRecipeDiagnostic): void {
38
+ if (diagnostics.length < MAX_AGENT_RECIPE_DIAGNOSTICS) diagnostics.push(diagnostic);
18
39
  }
19
40
 
20
41
  function resolveBoundSkills(recipe: AgentRecipe, source: RecipeSource): AgentRecipe {
@@ -22,31 +43,35 @@ function resolveBoundSkills(recipe: AgentRecipe, source: RecipeSource): AgentRec
22
43
  // Builtins may bind a package-owned skill. Custom recipes deliberately use
23
44
  // only the operator's discovered skill roots; a recipe cannot smuggle an
24
45
  // arbitrary filesystem path into worker context through a skill name.
25
- const packageSkills = path.resolve(source.dir, "..", "..", "..", "..", "skills");
26
- if (source.source === "extension" && source.skillRoot === undefined) {
27
- throw new Error(`agent recipe: ${recipe.filepath}: extension declares bound skills but no skills resource root`);
46
+ const packageSkills = path.resolve(source.dir, "..", "..", "..", "..", "library", "skills");
47
+ if (source.source === "plugin" && source.skillRoot === undefined) {
48
+ throw new Error(
49
+ `agent recipe: ${recipe.filepath}: ${source.source} declares bound skills but no skills resource root`,
50
+ );
28
51
  }
29
52
  const skills =
30
- source.source === "extension"
53
+ source.source === "plugin"
31
54
  ? loadSkills({
32
55
  cwd: source.cwd ?? process.cwd(),
56
+ trustProjectCompatRoots: readSettings().integrations.projectResources.trustProjectImports,
33
57
  disableDiscovery: true,
34
58
  explicitSkillPaths: source.skillRoot === undefined ? [] : [source.skillRoot],
35
59
  })
36
60
  : loadSkills({
37
61
  cwd: source.cwd ?? process.cwd(),
62
+ trustProjectCompatRoots: readSettings().integrations.projectResources.trustProjectImports,
38
63
  ...(source.source === "builtin" && existsSync(packageSkills) ? { explicitSkillPaths: [packageSkills] } : {}),
39
64
  });
40
- if (source.source === "extension" && source.skillRoot !== undefined) {
65
+ if (source.source === "plugin" && source.skillRoot !== undefined) {
41
66
  const canonicalRoot = realpathSync(source.skillRoot);
42
67
  for (const skill of skills.items) {
43
68
  const relative = path.relative(canonicalRoot, realpathSync(skill.filePath));
44
69
  if (relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
45
- throw new Error(`agent recipe: ${recipe.filepath}: bound skill escapes its extension: ${skill.filePath}`);
70
+ throw new Error(`agent recipe: ${recipe.filepath}: bound skill escapes its ${source.source}: ${skill.filePath}`);
46
71
  }
47
72
  }
48
73
  }
49
- const byName = new Map(skills.items.map((skill) => [skill.name, skill.filePath]));
74
+ const byName = new Map(skills.items.filter((skill) => skill.trusted).map((skill) => [skill.name, skill.filePath]));
50
75
  const missing = recipe.skills.filter((skill) => !byName.has(skill));
51
76
  if (missing.length > 0) {
52
77
  throw new Error(`agent recipe: ${recipe.filepath}: bound skill(s) unavailable: ${missing.join(", ")}`);
@@ -83,7 +108,11 @@ export function loadRecipesFromDir(
83
108
  try {
84
109
  const id = recipeIdFromPath(filepath, source.dir);
85
110
  const raw = readFileSync(filepath, "utf8");
86
- const { frontmatter, body } = parseFrontmatter(raw, filepath);
111
+ const { frontmatter, body: rawBody } = parseFrontmatter(raw, filepath);
112
+ const body = resolvePackageReferences(rawBody, {
113
+ ...(source.rootPath ? { rootPath: source.rootPath } : {}),
114
+ plugin: source.source === "plugin",
115
+ });
87
116
  const parsedRecipe = parseAgentRecipeSchema({ id, source: source.source, filepath, body, frontmatter });
88
117
  const recipe = resolveBoundSkills(parsedRecipe, source);
89
118
  // Policy validation runs before a recipe enters any catalog, prompt, or
@@ -93,7 +122,7 @@ export function loadRecipesFromDir(
93
122
  } catch (error) {
94
123
  if (source.source === "builtin") throw error;
95
124
  const message = error instanceof Error ? error.message : String(error);
96
- diagnostics.push({ source: source.source, filepath, message });
125
+ recordDiagnostic(diagnostics, { kind: "quarantine", source: source.source, filepath, message });
97
126
  process.stderr.write(`[clio-coder:agents] quarantine path=${filepath} source=${source.source} reason=${message}\n`);
98
127
  }
99
128
  }
@@ -102,7 +131,21 @@ export function loadRecipesFromDir(
102
131
  return recipes;
103
132
  }
104
133
 
105
- function mergeRecipes(...sources: ReadonlyArray<ReadonlyArray<AgentRecipe>>): ReadonlyArray<AgentRecipe> {
134
+ function mergeRecipes(
135
+ diagnostics: AgentRecipeDiagnostic[],
136
+ ...sources: ReadonlyArray<ReadonlyArray<AgentRecipe>>
137
+ ): ReadonlyArray<AgentRecipe> {
138
+ const ignored = (recipe: AgentRecipe, reason: string): void => {
139
+ process.stderr.write(`[clio-coder:agents] ignore id=${recipe.id} by=${recipe.source} reason=${reason}\n`);
140
+ recordDiagnostic(diagnostics, {
141
+ kind: "ignored",
142
+ id: recipe.id,
143
+ source: recipe.source,
144
+ audience: recipe.audience,
145
+ filepath: recipe.filepath,
146
+ message: `agent recipe ${recipe.id} from ${recipe.source} ignored: ${reason}`,
147
+ });
148
+ };
106
149
  const byId = new Map<string, AgentRecipe>();
107
150
  const builtinById = new Map<string, AgentRecipe>();
108
151
  for (const group of sources) {
@@ -113,23 +156,35 @@ function mergeRecipes(...sources: ReadonlyArray<ReadonlyArray<AgentRecipe>>): Re
113
156
  for (const group of sources) {
114
157
  for (const recipe of group) {
115
158
  if (recipe.source !== "builtin" && RESERVED_CUSTOM_AGENT_IDS.has(recipe.id)) {
116
- process.stderr.write(`[clio-coder:agents] ignore id=${recipe.id} by=${recipe.source} reason=reserved-agent-id\n`);
159
+ ignored(recipe, "reserved-agent-id");
117
160
  continue;
118
161
  }
119
162
  const builtin = builtinById.get(recipe.id);
120
- if (recipe.source === "extension" && builtin) {
121
- process.stderr.write(`[clio-coder:agents] ignore override id=${recipe.id} by=extension reason=reserved-builtin\n`);
163
+ if (recipe.source === "plugin" && builtin) {
164
+ ignored(recipe, "reserved-builtin");
122
165
  continue;
123
166
  }
124
167
  if (recipe.source === "user" && builtin && isShadowAgent(normalizeAgentSpec(builtin))) {
125
- process.stderr.write(`[clio-coder:agents] ignore override id=${recipe.id} by=user reason=reserved-shadow\n`);
168
+ ignored(recipe, "reserved-shadow");
126
169
  continue;
127
170
  }
128
171
  if (recipe.source === "project" && builtin) {
129
- process.stderr.write(`[clio-coder:agents] ignore override id=${recipe.id} by=project reason=reserved-builtin\n`);
172
+ ignored(recipe, "reserved-builtin");
130
173
  continue;
131
174
  }
132
- if (byId.has(recipe.id)) process.stderr.write(`[clio-coder:agents] override id=${recipe.id} by=${recipe.source}\n`);
175
+ const previous = byId.get(recipe.id);
176
+ if (previous) {
177
+ process.stderr.write(`[clio-coder:agents] override id=${recipe.id} by=${recipe.source}\n`);
178
+ recordDiagnostic(diagnostics, {
179
+ kind: "overridden",
180
+ id: previous.id,
181
+ source: previous.source,
182
+ audience: previous.audience,
183
+ by: recipe.source,
184
+ filepath: previous.filepath,
185
+ message: `agent recipe ${previous.id} from ${previous.source} overridden by ${recipe.source}`,
186
+ });
187
+ }
133
188
  byId.set(recipe.id, recipe);
134
189
  }
135
190
  }
@@ -138,9 +193,9 @@ function mergeRecipes(...sources: ReadonlyArray<ReadonlyArray<AgentRecipe>>): Re
138
193
 
139
194
  /**
140
195
  * Discover the one native-agent catalog used by listing, fleet admission, and
141
- * dispatch. Extension recipes occupy the same precedence slot as extension
142
- * fleets: after builtins and before operator/user and project recipes. Their
143
- * skill bindings remain constrained to the declaring extension's skill root.
196
+ * dispatch. Plugin recipes occupy the same precedence slot as plugin fleets:
197
+ * after builtins and before operator/user and project recipes. Their skill
198
+ * bindings remain constrained to the declaring plugin's skill root.
144
199
  */
145
200
  export function discoverAgentRecipes(
146
201
  cwd = process.cwd(),
@@ -154,15 +209,16 @@ export function discoverAgentRecipes(
154
209
  },
155
210
  diagnostics,
156
211
  );
157
- const skillRoots = new Map(enabledExtensionResourceRoots("skills", cwd).map((root) => [root.source, root.path]));
158
- const extensionRecipes = enabledExtensionResourceRoots("agents", cwd)
212
+ const skillRoots = new Map(enabledPluginResourceRoots("skills", cwd).map((root) => [root.source, root.path]));
213
+ const pluginRecipes = enabledPluginResourceRoots("agents", cwd)
159
214
  .sort((left, right) => left.source.localeCompare(right.source))
160
215
  .map((root) => {
161
216
  const skillRoot = skillRoots.get(root.source);
162
217
  return loadRecipesFromDir(
163
218
  {
164
219
  dir: root.path,
165
- source: "extension",
220
+ source: "plugin",
221
+ rootPath: root.rootPath,
166
222
  cwd,
167
223
  origin: root.source,
168
224
  ...(skillRoot === undefined ? {} : { skillRoot }),
@@ -175,5 +231,5 @@ export function discoverAgentRecipes(
175
231
  { dir: path.join(cwd, ".clio-coder", "agents"), source: "project", cwd },
176
232
  diagnostics,
177
233
  );
178
- return mergeRecipes(builtin, ...extensionRecipes, user, project);
234
+ return mergeRecipes(diagnostics, builtin, ...pluginRecipes, user, project);
179
235
  }