@iowarp/clio-coder 0.4.5 → 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 (700) hide show
  1. package/.claude-plugin/marketplace.json +283 -0
  2. package/CHANGELOG.md +74 -0
  3. package/CONTRIBUTING.md +116 -38
  4. package/NOTICE +24 -0
  5. package/README.md +341 -682
  6. package/dist/{acp-H3CU2HBQ.js → acp-W3Y3TRHD.js} +12 -12
  7. package/dist/{agents-IXQQZ7BD.js → agents-J4ICNLQ3.js} +57 -56
  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-R7KYF7N3.js → auth-X2UJUMOC.js} +25 -25
  13. package/dist/{builtins-CRFDQUVP.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-SE4ZKILO.js → chunk-3XE4NRLF.js} +30 -9
  20. package/dist/{chunk-YYB3MC65.js → chunk-4MFBBY2Z.js} +3 -3
  21. package/dist/{chunk-5VTJP36Q.js → chunk-4N2RZ4TO.js} +2 -2
  22. package/dist/{chunk-FKIOX6DS.js → chunk-4QKAITQT.js} +10 -5
  23. package/dist/chunk-4UHVS5T7.js +207 -0
  24. package/dist/{chunk-VLPTKCKT.js → chunk-5AJPUR72.js} +6 -6
  25. package/dist/{chunk-5CY4Q6QI.js → chunk-5EQO5NWP.js} +105 -3
  26. package/dist/{chunk-RXIOCVBZ.js → chunk-65BGHOUR.js} +8 -5
  27. package/dist/{chunk-T53XI6I7.js → chunk-6CA2BHOR.js} +2 -2
  28. package/dist/{chunk-HL26ADLH.js → chunk-6CB2IL4N.js} +2 -1
  29. package/dist/{chunk-HR3HPQ76.js → chunk-6LRLOJHQ.js} +3 -3
  30. package/dist/{chunk-HXHFDHB6.js → chunk-6TAATXXH.js} +6 -6
  31. package/dist/{chunk-WFKDPU7U.js → chunk-6YHPAAZR.js} +3 -3
  32. package/dist/{chunk-ZMZQEBKI.js → chunk-7EEGBKV4.js} +11 -11
  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-MDU3C27C.js → chunk-BO4XV5VX.js} +8 -8
  36. package/dist/{chunk-KF6GFW6O.js → chunk-BQQ5MXUC.js} +11 -11
  37. package/dist/{chunk-K6RDB7IA.js → chunk-C3G5PNUO.js} +23 -23
  38. package/dist/{chunk-SRZOW5L2.js → chunk-C6GEXX4L.js} +1 -1
  39. package/dist/{chunk-U2JOLB7O.js → chunk-CE64C5K5.js} +227 -72
  40. package/dist/chunk-CP3HIR5H.js +2119 -0
  41. package/dist/{chunk-BBV5TKE6.js → chunk-CPXGJI2A.js} +2 -2
  42. package/dist/{chunk-5DDOTTG4.js → chunk-CULVKYTK.js} +5 -5
  43. package/dist/{chunk-F34AR6O3.js → chunk-D2T66PDV.js} +6 -6
  44. package/dist/{chunk-NF3BK5WR.js → chunk-DACXIVVF.js} +5 -5
  45. package/dist/{chunk-4SVIVOMC.js → chunk-DLIYANB7.js} +20 -15
  46. package/dist/{chunk-E3BQTQUP.js → chunk-DO7M3LSX.js} +9 -9
  47. package/dist/{chunk-2QPI3TR3.js → chunk-DVJL77SO.js} +2 -2
  48. package/dist/chunk-EM2WNQS2.js +93 -0
  49. package/dist/{chunk-ODUTYZIU.js → chunk-EUEXGXXR.js} +5 -5
  50. package/dist/{chunk-UL36QJX6.js → chunk-EUZRMP4Y.js} +18 -16
  51. package/dist/{chunk-R6MAYTMS.js → chunk-G4LGUTOE.js} +4 -4
  52. package/dist/{chunk-CBSKDFWL.js → chunk-GEVQNST4.js} +2 -2
  53. package/dist/{chunk-XXBQKW32.js → chunk-GFQ7P2UF.js} +7 -7
  54. package/dist/{chunk-SBZX6ARC.js → chunk-GI5RRMAH.js} +14 -14
  55. package/dist/{chunk-KDWLXVMN.js → chunk-GVZFCJHE.js} +343 -113
  56. package/dist/{chunk-633EXGZA.js → chunk-GXIWHXDB.js} +3 -3
  57. package/dist/{chunk-LUL5Z66S.js → chunk-HOX4YZ2K.js} +6 -5
  58. package/dist/chunk-HRAKUPIH.js +57 -0
  59. package/dist/{chunk-KYKNBD4Y.js → chunk-IJMW64DX.js} +978 -258
  60. package/dist/{chunk-DIMRLNIC.js → chunk-IMOD2YPV.js} +16 -9
  61. package/dist/{chunk-6CDNRHWH.js → chunk-IQCNVLO6.js} +28 -8
  62. package/dist/{chunk-UTUNT5QL.js → chunk-ISNCCX42.js} +9 -9
  63. package/dist/{chunk-RLTT5GVY.js → chunk-IZYTT3CD.js} +9 -5
  64. package/dist/{chunk-5ZMXGW7P.js → chunk-KAFMW7WM.js} +4 -85
  65. package/dist/chunk-KKEYGFX4.js +915 -0
  66. package/dist/{chunk-HHVJNVUJ.js → chunk-KS7ETA3P.js} +2 -2
  67. package/dist/{chunk-UXAC2FX4.js → chunk-L3Z5ANCV.js} +7 -7
  68. package/dist/{chunk-EHCPSZJF.js → chunk-LBFQMYS3.js} +2 -2
  69. package/dist/{chunk-QEQISF75.js → chunk-LK2FN5JY.js} +1 -1
  70. package/dist/{chunk-URBGEOH3.js → chunk-M6Z2V6YU.js} +5 -5
  71. package/dist/{chunk-DRD2A54W.js → chunk-MBJO5VNZ.js} +18 -18
  72. package/dist/chunk-MNQN3X6Y.js +595 -0
  73. package/dist/{chunk-GXCCHKN6.js → chunk-MZHXENL7.js} +7 -7
  74. package/dist/chunk-MZNWZUJM.js +1801 -0
  75. package/dist/{chunk-7YJWEF2L.js → chunk-N37QC5FV.js} +5 -5
  76. package/dist/{chunk-WLMSOT73.js → chunk-NCCQ6DVS.js} +7 -7
  77. package/dist/{chunk-TZ7MFRG4.js → chunk-NO7J45X6.js} +170 -53
  78. package/dist/chunk-OH3YYA3B.js +15 -0
  79. package/dist/{chunk-22PQ4TX4.js → chunk-P4DL2LM5.js} +16 -77
  80. package/dist/{chunk-R6MICQYU.js → chunk-PFLOULP3.js} +4 -4
  81. package/dist/{chunk-MC3JSVR6.js → chunk-QJMRYTCX.js} +7 -7
  82. package/dist/{chunk-ILJ7DWGE.js → chunk-QKWL7SYE.js} +12 -12
  83. package/dist/chunk-R2CT5YDO.js +66 -0
  84. package/dist/chunk-RFCKPS2V.js +26 -0
  85. package/dist/{chunk-ONRTXOZY.js → chunk-RTLNFZMD.js} +12 -4
  86. package/dist/{chunk-U7H5WRG5.js → chunk-RXFPB32E.js} +8 -6
  87. package/dist/{chunk-S32UQ5GL.js → chunk-SEDI5K5B.js} +18 -18
  88. package/dist/{chunk-ICO4TQ2F.js → chunk-SELG4SUR.js} +41 -25
  89. package/dist/{chunk-YEJIG7LN.js → chunk-SER7RRAE.js} +27 -832
  90. package/dist/{chunk-K2HL3GBL.js → chunk-T4TY5GG3.js} +165 -15
  91. package/dist/chunk-T7QQBNLH.js +691 -0
  92. package/dist/{chunk-HGSLRG33.js → chunk-TLTGZTXI.js} +3 -3
  93. package/dist/chunk-TZ6UVP2H.js +637 -0
  94. package/dist/{chunk-EWD5P3GK.js → chunk-TZHN5ITX.js} +13 -41
  95. package/dist/{chunk-7TKWWPD7.js → chunk-U3TPUXOQ.js} +398 -253
  96. package/dist/{chunk-GNQRWTMY.js → chunk-UA3W4FGC.js} +6 -6
  97. package/dist/{chunk-O2RQ7LCK.js → chunk-UA6W4XFJ.js} +2 -2
  98. package/dist/chunk-UWD3JD5X.js +709 -0
  99. package/dist/chunk-V4ZKOKRB.js +13433 -0
  100. package/dist/{chunk-NC4KV7EL.js → chunk-VCRVEDUC.js} +5 -5
  101. package/dist/{chunk-I7VLWRK2.js → chunk-VMATUZB6.js} +12 -10
  102. package/dist/{chunk-J2FYEQ5L.js → chunk-VTYHHQ57.js} +2 -2
  103. package/dist/chunk-WB7POC6M.js +891 -0
  104. package/dist/{chunk-GVYWZNRK.js → chunk-WBVKKTUT.js} +2 -2
  105. package/dist/{chunk-EHOSNVVM.js → chunk-WLHX3MM5.js} +6 -2
  106. package/dist/{chunk-SDWNDICN.js → chunk-WN552PKN.js} +573 -316
  107. package/dist/{chunk-TEG3RYVZ.js → chunk-WT5TRMO4.js} +51 -26
  108. package/dist/{chunk-NY6IWDVU.js → chunk-WURGVOZJ.js} +56 -12
  109. package/dist/{chunk-7WUZEB2M.js → chunk-XR3XJN2M.js} +2 -2
  110. package/dist/chunk-XW2UZICE.js +372 -0
  111. package/dist/{chunk-FSTIBAGM.js → chunk-XZ6UFQ52.js} +11 -11
  112. package/dist/chunk-Y3JU5RPK.js +8 -0
  113. package/dist/chunk-YKRJTYNP.js +1143 -0
  114. package/dist/{chunk-7HBHHVCK.js → chunk-YPRSNUTC.js} +2 -2
  115. package/dist/{chunk-PWWSIB2A.js → chunk-ZGIGW4ZG.js} +5 -5
  116. package/dist/cli/index.js +34 -36
  117. package/dist/{clio-5I2IBFYL.js → clio-L2P7S2R2.js} +9 -9
  118. package/dist/{code-nav-YXIAEZVS.js → code-nav-B5LNX4KU.js} +25 -25
  119. package/dist/{components-TNIKXCBH.js → components-63MMQKUT.js} +6 -6
  120. package/dist/{config-Y2JDJ3JJ.js → config-YXARKGTX.js} +81 -77
  121. package/dist/configure-LMVQJ46J.js +85 -0
  122. package/dist/{context-QQ53HSGJ.js → context-7HJEWTTP.js} +92 -48
  123. package/dist/{context-S2EEC3EJ.js → context-XSZKKFBW.js} +14 -14
  124. package/dist/{context-P5YSEO55.js → context-YG2LZDYZ.js} +67 -64
  125. package/dist/{context-clear-TMEQCOTH.js → context-clear-AC5NXHM2.js} +64 -61
  126. package/dist/{context-index-HP2JFUWA.js → context-index-KKTPRV5G.js} +3 -3
  127. package/dist/{context-map-INTXD54D.js → context-map-T7ROR5D5.js} +4 -4
  128. package/dist/{context-working-set-CNLSQN5K.js → context-working-set-F4Q4J3NS.js} +15 -12
  129. package/dist/{detail-5572VLBO.js → detail-H73BEF2N.js} +65 -62
  130. package/dist/{dispatch-runner-FRHD6P2O.js → dispatch-runner-3RY5FSJC.js} +83 -80
  131. package/dist/{doctor-N3LCM2LG.js → doctor-EQYJOGUG.js} +47 -32
  132. package/dist/{eval-BUU3ZOUZ.js → eval-4P7O6CCE.js} +114 -50
  133. package/dist/{evidence-DTGEN456.js → evidence-D6GUSYJW.js} +64 -61
  134. package/dist/{evidence-SQ5DNFEN.js → evidence-O76QF7TZ.js} +69 -65
  135. package/dist/{evolve-IJNUFZDS.js → evolve-H47BCETS.js} +65 -62
  136. package/dist/{extensions-YVRHX6ZI.js → extensions-NNL3ZOCU.js} +98 -20
  137. package/dist/{fleet-ZNNVSYFO.js → fleet-KMNS6NOM.js} +115 -107
  138. package/dist/{fleet-commands-5YE7NPJL.js → fleet-commands-DOWSYCBX.js} +15 -15
  139. package/dist/{fleet-decisions-3SBSCTCW.js → fleet-decisions-S3PTZV2D.js} +9 -9
  140. package/dist/{fleet-graph-6HHPWF5T.js → fleet-graph-F2DE2TME.js} +26 -24
  141. package/dist/{fleet-inspect-JEYMGCGC.js → fleet-inspect-EN2Q6IVB.js} +67 -63
  142. package/dist/{fleet-preflight-QRSHIIDE.js → fleet-preflight-FRLETDD3.js} +3 -3
  143. package/dist/{fleet-validate-4PM4GDDL.js → fleet-validate-B2XDLS57.js} +28 -29
  144. package/dist/{fleet-verify-NJDTHTO3.js → fleet-verify-4JKUWGJ7.js} +64 -61
  145. package/dist/{fleet-view-UP2BWQQY.js → fleet-view-BHJFW26B.js} +67 -63
  146. package/dist/{init-S3GZQ5ZF.js → init-XAT5N5YM.js} +86 -80
  147. package/dist/interop-FVECHFKG.js +246 -0
  148. package/dist/{inventory-K2OZ36YJ.js → inventory-7KFQGLCV.js} +67 -63
  149. package/dist/library-NY2XOT75.js +492 -0
  150. package/dist/library-QAPAO23R.js +306 -0
  151. package/dist/library-import-5Y6MAS3R.js +183 -0
  152. package/dist/library-inventory-JT6HWITQ.js +56 -0
  153. package/dist/library-validation-EQUH25DC.js +42 -0
  154. package/dist/{memory-OQOXQGYD.js → memory-DYVTTCP6.js} +65 -62
  155. package/dist/{models-3IK2Y5WE.js → models-MASFJ6Y2.js} +51 -38
  156. package/dist/{monitor-FTJLTKCQ.js → monitor-YMP4NXJJ.js} +73 -69
  157. package/dist/{orchestrator-N47O7SFD.js → orchestrator-AFQRRTEI.js} +4255 -2845
  158. package/dist/{panes-7BTYH3XQ.js → panes-D3Y2KFG5.js} +4 -4
  159. package/dist/{panes-WPOMEMRH.js → panes-NICTHQCV.js} +7 -7
  160. package/dist/{paths-J3KN7UAO.js → paths-PSFAUIGO.js} +5 -5
  161. package/dist/{preload-65U34NG6.js → preload-5Q7VXRFJ.js} +64 -61
  162. package/dist/{reset-MUVQDLNL.js → reset-7NKZK7JN.js} +11 -9
  163. package/dist/{resources-LM76COAO.js → resources-NILSIZAT.js} +94 -38
  164. package/dist/{run-3VFZQ33N.js → run-BPZGEBZV.js} +131 -114
  165. package/dist/{share-4JUB4BL7.js → share-EZ6ERBMH.js} +31 -28
  166. package/dist/skills-BTVVNYVM.js +100 -0
  167. package/dist/{skills-eval-G6T57L7M.js → skills-eval-UY34MNK7.js} +117 -78
  168. package/dist/{skills-inventory-WLM46PJH.js → skills-inventory-JDHSIA7I.js} +30 -25
  169. package/dist/{slash-commands-GBARG3Y7.js → slash-commands-K4FNQ2AT.js} +53 -49
  170. package/dist/{steer-S7D7IKPU.js → steer-2B3EQGFH.js} +4 -4
  171. package/dist/{support-5VAEC32W.js → support-L2SOL3IE.js} +7 -7
  172. package/dist/{targets-N5REUETU.js → targets-44VKGFLN.js} +69 -47
  173. package/dist/{tasks-6BVY5YZF.js → tasks-3KODKFU7.js} +14 -14
  174. package/dist/{terminal-lease-57UEOJKS.js → terminal-lease-LXA7MMPO.js} +32 -19
  175. package/dist/{tools-6OCQ6SVB.js → tools-3UB7TEVR.js} +7 -7
  176. package/dist/{trace-JHLXWUMN.js → trace-TAMIU4OJ.js} +5 -4
  177. package/dist/{tui-primitives-RCY2HN7G.js → tui-primitives-A6MUW32V.js} +3 -2
  178. package/dist/{uninstall-FXYMFFRT.js → uninstall-QYVRPEM4.js} +9 -9
  179. package/dist/{upgrade-4HD5HAIV.js → upgrade-7PMKM2JH.js} +17 -18
  180. package/dist/{usage-4GWM2WWP.js → usage-6EQV7EQK.js} +77 -73
  181. package/dist/{verifiers-GSKWKWVG.js → verifiers-JLITWSHU.js} +16 -16
  182. package/dist/{verify-3AS3ULCY.js → verify-T7NAEVIG.js} +13 -13
  183. package/dist/{web-fetch-MQN4FH3X.js → web-fetch-W4TNW4Q7.js} +4 -4
  184. package/dist/{wiki-generate-7BV7XWIY.js → wiki-generate-T2TJQJUA.js} +90 -84
  185. package/dist/{with-panes-OFTNAR4Y.js → with-panes-CHFC7HGI.js} +4 -4
  186. package/dist/worker/entry.js +297 -88
  187. package/docs/README.md +43 -0
  188. package/docs/architecture/architecture.md +8 -7
  189. package/docs/architecture/artifact-versions.md +3 -3
  190. package/docs/architecture/context-engine.md +36 -2
  191. package/docs/architecture/library.md +32 -0
  192. package/docs/architecture/middleware-and-components.md +1 -1
  193. package/docs/architecture/model-catalog.md +21 -1
  194. package/docs/architecture/pi-boundary.md +18 -0
  195. package/docs/architecture/prompt-envelope-and-tools.md +5 -5
  196. package/docs/architecture/safety-model.md +21 -2
  197. package/docs/architecture/session-lifecycle.md +12 -1
  198. package/docs/architecture/tui-design.md +153 -39
  199. package/docs/architecture/worker-context.md +106 -0
  200. package/docs/guide/authoring-plugins.md +160 -0
  201. package/docs/guide/built-in-agents.md +5 -5
  202. package/docs/guide/commands-and-modes.md +186 -80
  203. package/docs/guide/configuration-and-targets.md +123 -28
  204. package/docs/guide/configuration-reference.md +36 -38
  205. package/docs/guide/environment-variables.md +2 -2
  206. package/docs/guide/exit-codes-and-output.md +1 -1
  207. package/docs/guide/extensions-and-sharing.md +93 -53
  208. package/docs/guide/fleet-dispatch.md +32 -10
  209. package/docs/guide/glossary.md +2 -2
  210. package/docs/guide/harness-extensions.md +291 -0
  211. package/docs/guide/installation-and-lifecycle.md +53 -20
  212. package/docs/guide/interop.md +243 -0
  213. package/docs/guide/panes-and-files.md +3 -3
  214. package/docs/guide/plugins.md +80 -0
  215. package/docs/guide/resource-library.md +111 -45
  216. package/docs/guide/skills-marketplace.md +35 -72
  217. package/docs/guide/tool-usage.md +19 -7
  218. package/docs/guide/troubleshooting.md +1 -1
  219. package/docs/process/development-pipeline.md +15 -15
  220. package/docs/process/documentation-coverage.md +29 -2
  221. package/docs/process/documentation-guide.md +15 -7
  222. package/docs/process/eval-runner.md +8 -3
  223. package/docs/process/performance-methodology.md +1 -1
  224. package/docs/process/release-cut-checklist.md +22 -6
  225. package/docs/process/scientific-validation.md +23 -0
  226. package/evals/scalar-decision-machinery.ts +1 -1
  227. package/examples/extensions/README.md +67 -0
  228. package/examples/extensions/lab-status/clio-coder-extension.json +14 -0
  229. package/examples/extensions/lab-status/extension.mjs +68 -0
  230. package/examples/extensions/lab-status/jobs.synthetic.json +9 -0
  231. package/examples/extensions/measurements/clio-coder-extension.json +28 -0
  232. package/examples/extensions/measurements/summarize.cjs +23 -0
  233. package/library/README.md +109 -0
  234. package/library/_authoring/templates/agent/README.md +28 -0
  235. package/library/_authoring/templates/agent/agents/benchmark-scout.md +30 -0
  236. package/library/_authoring/templates/agent/plugin.json +23 -0
  237. package/library/_authoring/templates/fleet/README.md +29 -0
  238. package/library/_authoring/templates/fleet/fleets/pipeline-review.md +31 -0
  239. package/library/_authoring/templates/fleet/plugin.json +23 -0
  240. package/library/_authoring/templates/plugin/README.md +37 -0
  241. package/library/_authoring/templates/plugin/agents/data-curator.md +31 -0
  242. package/library/_authoring/templates/plugin/assets/curation-guide.md +22 -0
  243. package/library/_authoring/templates/plugin/plugin.json +42 -0
  244. package/library/_authoring/templates/plugin/prompts/inspect-dataset.md +15 -0
  245. package/library/_authoring/templates/plugin/skills/dataset-curation/SKILL.md +36 -0
  246. package/library/_authoring/templates/plugin/skills/dataset-curation/evals.md +17 -0
  247. package/library/_authoring/templates/prompt/README.md +28 -0
  248. package/library/_authoring/templates/prompt/plugin.json +23 -0
  249. package/library/_authoring/templates/prompt/prompts/paper-summary.md +26 -0
  250. package/library/_authoring/templates/skill/README.md +24 -0
  251. package/library/_authoring/templates/skill/SKILL.md +39 -0
  252. package/library/_authoring/templates/skill/evals.md +30 -0
  253. package/library/_authoring/templates/skill/plugin.json +23 -0
  254. package/library/agents/README.md +7 -0
  255. package/library/fleets/README.md +7 -0
  256. package/library/plugins/materio/README.md +137 -0
  257. package/library/plugins/materio/ai.iowarp.clio/agents/materio-lab-definer.md +208 -0
  258. package/library/plugins/materio/ai.iowarp.clio/agents/materio-literature-reviewer.md +308 -0
  259. package/library/plugins/materio/ai.iowarp.clio/agents/materio-research-explorer.md +249 -0
  260. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-executor.md +416 -0
  261. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-verifier.md +60 -0
  262. package/library/plugins/materio/ai.iowarp.clio/agents/materio-workflow-planner.md +238 -0
  263. package/library/plugins/materio/ai.iowarp.clio/fleets/materio-execute-task.md +50 -0
  264. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/add-task.md +66 -0
  265. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/archive-task.md +65 -0
  266. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/checkpoint.md +26 -0
  267. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-research-tasks.md +230 -0
  268. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-virtual-lab.md +181 -0
  269. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/execute-task.md +292 -0
  270. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/help.md +129 -0
  271. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/identify-research.md +206 -0
  272. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/literature-review.md +201 -0
  273. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/pause-research.md +12 -0
  274. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/progress.md +105 -0
  275. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/remove-task.md +63 -0
  276. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/resume-research.md +64 -0
  277. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/settings.md +16 -0
  278. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/status.md +92 -0
  279. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/upload-data.md +104 -0
  280. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/wtfp.md +145 -0
  281. package/library/plugins/materio/ai.iowarp.clio/references/execution.md +56 -0
  282. package/library/plugins/materio/ai.iowarp.portability/provenance.json +9 -0
  283. package/library/plugins/materio/assets/actions/add-task.md +86 -0
  284. package/library/plugins/materio/assets/actions/archive-task.md +84 -0
  285. package/library/plugins/materio/assets/actions/checkpoint.md +47 -0
  286. package/library/plugins/materio/assets/actions/define-research-tasks.md +228 -0
  287. package/library/plugins/materio/assets/actions/define-virtual-lab.md +179 -0
  288. package/library/plugins/materio/assets/actions/execute-task.md +290 -0
  289. package/library/plugins/materio/assets/actions/help.md +140 -0
  290. package/library/plugins/materio/assets/actions/identify-research.md +204 -0
  291. package/library/plugins/materio/assets/actions/literature-review.md +199 -0
  292. package/library/plugins/materio/assets/actions/pause-research.md +34 -0
  293. package/library/plugins/materio/assets/actions/progress.md +125 -0
  294. package/library/plugins/materio/assets/actions/remove-task.md +82 -0
  295. package/library/plugins/materio/assets/actions/resume-research.md +84 -0
  296. package/library/plugins/materio/assets/actions/settings.md +38 -0
  297. package/library/plugins/materio/assets/actions/status.md +112 -0
  298. package/library/plugins/materio/assets/actions/upload-data.md +123 -0
  299. package/library/plugins/materio/assets/actions/wtfp.md +179 -0
  300. package/library/plugins/materio/assets/references/research-domains.md +134 -0
  301. package/library/plugins/materio/assets/references/research-policy.md +77 -0
  302. package/library/plugins/materio/assets/references/traditional-workflows.md +146 -0
  303. package/library/plugins/materio/assets/scripts/check_physics.py +271 -0
  304. package/library/plugins/materio/assets/scripts/check_scripts.py +248 -0
  305. package/library/plugins/materio/assets/scripts/project_plugin.py +165 -0
  306. package/library/plugins/materio/assets/scripts/research_state.py +400 -0
  307. package/library/plugins/materio/assets/scripts/verify_citations.py +616 -0
  308. package/library/plugins/materio/assets/templates/RESEARCH.md +39 -0
  309. package/library/plugins/materio/assets/templates/VIRTUAL-LAB.md +120 -0
  310. package/library/plugins/materio/assets/templates/WORKFLOW.md +42 -0
  311. package/library/plugins/materio/assets/templates/config.json +5 -0
  312. package/library/plugins/materio/evals/scripts.yaml +29 -0
  313. package/library/plugins/materio/plugin.json +530 -0
  314. package/library/plugins/materio/skills/materio-lab-definer/SKILL.md +74 -0
  315. package/library/plugins/materio/skills/materio-literature-reviewer/SKILL.md +64 -0
  316. package/library/plugins/materio/skills/materio-research-explorer/SKILL.md +74 -0
  317. package/library/plugins/materio/skills/materio-task-executor/SKILL.md +214 -0
  318. package/library/plugins/materio/skills/materio-task-verifier/SKILL.md +46 -0
  319. package/library/plugins/materio/skills/materio-workflow-planner/SKILL.md +79 -0
  320. package/library/plugins/materio/tests/test_check_physics.py +139 -0
  321. package/library/plugins/materio/tests/test_check_scripts.py +140 -0
  322. package/library/plugins/materio/tests/test_research_state.py +291 -0
  323. package/library/plugins/materio/tests/test_verify_citations.py +337 -0
  324. package/library/prompts/README.md +7 -0
  325. package/library/registry.yaml +921 -0
  326. package/library/skills/README.md +120 -0
  327. package/{skills → library/skills}/coding/ast-grep/SKILL.md +1 -1
  328. package/{skills → library/skills}/coding/ast-grep/evals.md +1 -1
  329. package/library/skills/coding/ast-grep/plugin.json +23 -0
  330. package/{skills → library/skills}/coding/coding-standards/SKILL.md +1 -1
  331. package/{skills → library/skills}/coding/coding-standards/evals.md +1 -1
  332. package/library/skills/coding/coding-standards/plugin.json +23 -0
  333. package/{skills → library/skills}/coding/prototype/SKILL.md +1 -1
  334. package/{skills → library/skills}/coding/prototype/evals.md +1 -1
  335. package/library/skills/coding/prototype/plugin.json +23 -0
  336. package/{skills → library/skills}/coding/tdd/SKILL.md +1 -1
  337. package/{skills → library/skills}/coding/tdd/evals.md +1 -1
  338. package/library/skills/coding/tdd/plugin.json +23 -0
  339. package/{skills → library/skills}/context/context-handoff/SKILL.md +1 -1
  340. package/{skills → library/skills}/context/context-handoff/evals.md +1 -1
  341. package/library/skills/context/context-handoff/plugin.json +23 -0
  342. package/{skills → library/skills}/context/context-prime/SKILL.md +1 -1
  343. package/{skills → library/skills}/context/context-prime/evals.md +1 -1
  344. package/library/skills/context/context-prime/plugin.json +23 -0
  345. package/{skills → library/skills}/git/branch-closeout/SKILL.md +1 -1
  346. package/library/skills/git/branch-closeout/plugin.json +23 -0
  347. package/{skills → library/skills}/git/file-ticket/SKILL.md +1 -1
  348. package/library/skills/git/file-ticket/plugin.json +23 -0
  349. package/{skills → library/skills}/git/fix-issue/SKILL.md +1 -1
  350. package/library/skills/git/fix-issue/plugin.json +23 -0
  351. package/{skills → library/skills}/git/resolve-merge-conflicts/SKILL.md +1 -1
  352. package/{skills → library/skills}/git/resolve-merge-conflicts/evals.md +1 -1
  353. package/library/skills/git/resolve-merge-conflicts/plugin.json +23 -0
  354. package/{skills → library/skills}/git/ship/SKILL.md +1 -1
  355. package/library/skills/git/ship/plugin.json +23 -0
  356. package/{skills → library/skills}/git/worktree-create/SKILL.md +1 -1
  357. package/library/skills/git/worktree-create/plugin.json +23 -0
  358. package/{skills → library/skills}/git/worktree-merge/SKILL.md +1 -1
  359. package/library/skills/git/worktree-merge/plugin.json +23 -0
  360. package/{skills → library/skills}/meta/clio-coder-dev/SKILL.md +1 -1
  361. package/{skills → library/skills}/meta/clio-coder-dev/evals.md +1 -1
  362. package/library/skills/meta/clio-coder-dev/plugin.json +23 -0
  363. package/{skills → library/skills}/meta/clio-coder-test/SKILL.md +1 -1
  364. package/{skills → library/skills}/meta/clio-coder-test/evals.md +1 -1
  365. package/library/skills/meta/clio-coder-test/plugin.json +23 -0
  366. package/{skills → library/skills}/meta/credentials/SKILL.md +1 -1
  367. package/{skills → library/skills}/meta/credentials/evals.md +1 -1
  368. package/library/skills/meta/credentials/plugin.json +23 -0
  369. package/library/skills/meta/find-skills/SKILL.md +85 -0
  370. package/library/skills/meta/find-skills/evals.md +65 -0
  371. package/library/skills/meta/find-skills/plugin.json +23 -0
  372. package/{skills → library/skills}/meta/herdr/SKILL.md +1 -1
  373. package/{skills → library/skills}/meta/herdr/evals.md +1 -1
  374. package/library/skills/meta/herdr/plugin.json +23 -0
  375. package/{skills → library/skills}/meta/skill-craft/SKILL.md +23 -9
  376. package/{skills → library/skills}/meta/skill-craft/evals.md +11 -3
  377. package/library/skills/meta/skill-craft/plugin.json +23 -0
  378. package/{skills → library/skills}/planning/archify/SKILL.md +13 -13
  379. package/library/skills/planning/archify/plugin.json +23 -0
  380. package/{skills → library/skills}/planning/architecture/SKILL.md +1 -1
  381. package/{skills → library/skills}/planning/architecture/evals.md +1 -1
  382. package/library/skills/planning/architecture/plugin.json +23 -0
  383. package/{skills → library/skills}/planning/backlog/SKILL.md +1 -1
  384. package/{skills → library/skills}/planning/backlog/evals.md +1 -1
  385. package/library/skills/planning/backlog/plugin.json +23 -0
  386. package/{skills → library/skills}/planning/prd/SKILL.md +1 -1
  387. package/{skills → library/skills}/planning/prd/evals.md +1 -1
  388. package/library/skills/planning/prd/plugin.json +23 -0
  389. package/{skills → library/skills}/planning/product-intent/SKILL.md +1 -1
  390. package/{skills → library/skills}/planning/product-intent/evals.md +1 -1
  391. package/library/skills/planning/product-intent/plugin.json +23 -0
  392. package/{skills → library/skills}/planning/tech-spec/SKILL.md +1 -1
  393. package/{skills → library/skills}/planning/tech-spec/evals.md +1 -1
  394. package/library/skills/planning/tech-spec/plugin.json +23 -0
  395. package/{skills → library/skills}/registry.yaml +7 -7
  396. package/{skills → library/skills}/remote.yaml +1 -1
  397. package/{skills → library/skills}/research/arxiv-literature/SKILL.md +1 -1
  398. package/{skills → library/skills}/research/arxiv-literature/evals.md +1 -1
  399. package/library/skills/research/arxiv-literature/plugin.json +23 -0
  400. package/{skills → library/skills}/research/experiment-protocol/SKILL.md +1 -1
  401. package/{skills → library/skills}/research/experiment-protocol/evals.md +1 -1
  402. package/library/skills/research/experiment-protocol/plugin.json +23 -0
  403. package/{skills → library/skills}/research/scientific-debugging/SKILL.md +1 -1
  404. package/{skills → library/skills}/research/scientific-debugging/evals.md +1 -1
  405. package/library/skills/research/scientific-debugging/plugin.json +23 -0
  406. package/{skills → library/skills}/research/scientific-modernization/SKILL.md +1 -1
  407. package/{skills → library/skills}/research/scientific-modernization/evals.md +1 -1
  408. package/library/skills/research/scientific-modernization/plugin.json +23 -0
  409. package/{skills → library/skills}/skill-marketplace.json +37 -37
  410. package/{skills → library/skills}/workflow/cut-it/SKILL.md +1 -1
  411. package/{skills → library/skills}/workflow/cut-it/evals.md +1 -1
  412. package/library/skills/workflow/cut-it/plugin.json +23 -0
  413. package/{skills → library/skills}/workflow/design-council/SKILL.md +1 -1
  414. package/{skills → library/skills}/workflow/design-council/evals.md +1 -1
  415. package/library/skills/workflow/design-council/plugin.json +23 -0
  416. package/{skills → library/skills}/workflow/grill-me/SKILL.md +1 -1
  417. package/{skills → library/skills}/workflow/grill-me/evals.md +1 -1
  418. package/library/skills/workflow/grill-me/plugin.json +23 -0
  419. package/{skills → library/skills}/workflow/workflow-distiller/SKILL.md +14 -11
  420. package/{skills → library/skills}/workflow/workflow-distiller/evals.md +14 -6
  421. package/library/skills/workflow/workflow-distiller/plugin.json +23 -0
  422. package/package.json +12 -5
  423. package/src/cli/agents.ts +1 -1
  424. package/src/cli/ask.ts +10 -10
  425. package/src/cli/config-inspect.ts +1 -1
  426. package/src/cli/configure-editor.ts +51 -0
  427. package/src/cli/configure-interop.ts +1 -1
  428. package/src/cli/configure-oauth.ts +1 -1
  429. package/src/cli/configure-onboarding.ts +232 -96
  430. package/src/cli/configure-prompts.ts +76 -0
  431. package/src/cli/configure-quick.ts +274 -0
  432. package/src/cli/configure-target.ts +14 -2
  433. package/src/cli/configure.ts +415 -176
  434. package/src/cli/eval.ts +40 -6
  435. package/src/cli/extensions.ts +74 -8
  436. package/src/cli/fleet-preflight.ts +2 -0
  437. package/src/cli/fleet.ts +2 -0
  438. package/src/cli/index.ts +1 -3
  439. package/src/cli/interop-inspect.ts +61 -33
  440. package/src/cli/interop.ts +79 -9
  441. package/src/cli/library-import.ts +139 -0
  442. package/src/cli/library.ts +418 -120
  443. package/src/cli/oauth-manual-input.ts +1 -1
  444. package/src/cli/reset.ts +2 -0
  445. package/src/cli/run.ts +26 -9
  446. package/src/cli/select.ts +35 -4
  447. package/src/cli/skills-eval.ts +43 -6
  448. package/src/cli/skills-inventory.ts +6 -2
  449. package/src/cli/skills.ts +44 -491
  450. package/src/cli/upgrade.ts +2 -2
  451. package/src/core/bus-events.ts +5 -0
  452. package/src/core/config.ts +6 -1
  453. package/src/core/defaults.ts +34 -12
  454. package/src/{interactive → core}/external-editor.ts +4 -4
  455. package/src/core/recent-models.ts +2 -2
  456. package/src/core/session-routing.ts +3 -3
  457. package/src/core/state-file-lock.ts +1 -1
  458. package/src/core/tool-names.ts +5 -0
  459. package/src/domains/agents/extension.ts +42 -6
  460. package/src/domains/agents/fleet-commands.ts +92 -1
  461. package/src/domains/agents/fleet-contract.ts +87 -19
  462. package/src/domains/agents/recipe.ts +5 -4
  463. package/src/domains/agents/registry.ts +80 -24
  464. package/src/domains/config/classify.ts +1 -1
  465. package/src/domains/config/keybindings.ts +156 -124
  466. package/src/domains/context/worker/contract.ts +91 -0
  467. package/src/domains/context/worker/pressure.ts +120 -0
  468. package/src/domains/context/worker/recall.ts +62 -0
  469. package/src/domains/context/worker/select.ts +164 -0
  470. package/src/domains/context/worker/snapshot.ts +35 -0
  471. package/src/domains/context/worker/store.ts +16 -0
  472. package/src/domains/context/working-set/replay/synthetic.ts +2 -1
  473. package/src/domains/dispatch/active-route-planner.ts +2 -0
  474. package/src/domains/dispatch/backoff.ts +1 -0
  475. package/src/domains/dispatch/code-step.ts +12 -2
  476. package/src/domains/dispatch/contract.ts +3 -0
  477. package/src/domains/dispatch/execution-plan.ts +2 -0
  478. package/src/domains/dispatch/extension.ts +109 -27
  479. package/src/domains/dispatch/fleet-plan.ts +10 -0
  480. package/src/domains/dispatch/fleet-run.ts +1 -0
  481. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  482. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  483. package/src/domains/dispatch/state.ts +1 -0
  484. package/src/domains/dispatch/types.ts +5 -0
  485. package/src/domains/dispatch/validation.ts +12 -0
  486. package/src/domains/dispatch/workspace-checkpoint.ts +1 -1
  487. package/src/domains/evidence/failure-attribution.ts +1 -0
  488. package/src/domains/evidence/trust-status.ts +22 -3
  489. package/src/domains/extensions/command-schema.ts +145 -0
  490. package/src/domains/extensions/command-tools.ts +15 -0
  491. package/src/domains/extensions/compatibility.ts +7 -0
  492. package/src/domains/extensions/contract.ts +0 -4
  493. package/src/domains/extensions/discovery.ts +69 -205
  494. package/src/domains/extensions/extension.ts +0 -4
  495. package/src/domains/extensions/index.ts +1 -5
  496. package/src/domains/extensions/manager.ts +1 -6
  497. package/src/domains/extensions/operator-commands.ts +29 -0
  498. package/src/domains/extensions/operator-runtime.ts +483 -0
  499. package/src/domains/extensions/public-api.ts +53 -0
  500. package/src/domains/extensions/runtime-child.mjs +114 -0
  501. package/src/domains/extensions/runtime-process.ts +306 -0
  502. package/src/domains/extensions/runtime-schema.ts +146 -0
  503. package/src/domains/extensions/{resources.ts → snapshot-access.ts} +1 -17
  504. package/src/domains/extensions/snapshot.ts +4 -32
  505. package/src/domains/extensions/state.ts +5 -83
  506. package/src/domains/extensions/types.ts +33 -34
  507. package/src/domains/interop/adopt.ts +546 -0
  508. package/src/domains/interop/detect.ts +50 -12
  509. package/src/domains/interop/foreign.ts +554 -0
  510. package/src/domains/interop/import.ts +277 -0
  511. package/src/domains/interop/index.ts +24 -0
  512. package/src/domains/interop/install.ts +6 -0
  513. package/src/domains/interop/inventory.ts +351 -0
  514. package/src/domains/interop/projection.ts +360 -0
  515. package/src/domains/interop/registry.ts +106 -3
  516. package/src/domains/interop/types.ts +51 -0
  517. package/src/domains/lifecycle/migrations/index.ts +0 -2
  518. package/src/domains/lifecycle/naming-resources.ts +1 -1
  519. package/src/domains/middleware/marketplace-offer.ts +1 -1
  520. package/src/domains/mux/contract.ts +1 -1
  521. package/src/domains/plugins/catalog.ts +204 -0
  522. package/src/domains/plugins/contract.ts +24 -0
  523. package/src/domains/plugins/discovery.ts +316 -0
  524. package/src/domains/plugins/extension.ts +40 -0
  525. package/src/domains/plugins/index.ts +77 -0
  526. package/src/domains/plugins/integrity.ts +6 -0
  527. package/src/domains/plugins/manifest.ts +3 -0
  528. package/src/domains/plugins/resources.ts +102 -0
  529. package/src/domains/plugins/state.ts +753 -0
  530. package/src/domains/plugins/types.ts +217 -0
  531. package/src/domains/prompts/extension.ts +9 -2
  532. package/src/domains/prompts/fragments/operating/skills.md +10 -10
  533. package/src/domains/providers/probe/fingerprint.ts +13 -6
  534. package/src/domains/providers/probe/reasoning.ts +2 -0
  535. package/src/domains/providers/runtimes/common/probe-helpers.ts +23 -7
  536. package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +7 -2
  537. package/src/domains/providers/runtimes/protocol/openai-compat.ts +10 -4
  538. package/src/domains/resources/common-loader.ts +9 -6
  539. package/src/domains/resources/index.ts +67 -0
  540. package/src/domains/resources/library-actions.ts +836 -0
  541. package/src/domains/resources/library-evals.ts +38 -0
  542. package/src/domains/resources/library-inventory.ts +1048 -0
  543. package/src/domains/resources/library-types.ts +50 -0
  544. package/src/domains/resources/library-validation.ts +634 -0
  545. package/src/domains/resources/library.ts +437 -156
  546. package/src/domains/resources/package-references.ts +66 -0
  547. package/src/domains/resources/prompts/loader.ts +75 -41
  548. package/src/domains/resources/skills/install.ts +2 -2
  549. package/src/domains/resources/skills/loader.ts +77 -22
  550. package/src/domains/resources/skills/marketplace.ts +48 -57
  551. package/src/domains/resources/skills/promotion.ts +2 -2
  552. package/src/domains/resources/skills/provenance-pin.ts +17 -4
  553. package/src/domains/safety/action-classifier.ts +2 -2
  554. package/src/domains/safety/default-path-policy.ts +3 -1
  555. package/src/domains/safety/policy-engine.ts +1 -1
  556. package/src/domains/safety/protected-artifacts.ts +21 -5
  557. package/src/domains/safety/skill-authority.ts +5 -2
  558. package/src/domains/share/archive.ts +1 -1
  559. package/src/engine/apis/openai-completions.ts +52 -2
  560. package/src/engine/notices/pi-tui-LICENSE +21 -0
  561. package/src/engine/tui.ts +3 -0
  562. package/src/engine/worker-runtime.ts +58 -14
  563. package/src/engine/worker-tools.ts +5 -0
  564. package/src/entry/orchestrator.ts +26 -5
  565. package/src/entry/plugin-reload.ts +18 -0
  566. package/src/interactive/application-controller.ts +68 -52
  567. package/src/interactive/chat-loop.ts +32 -5
  568. package/src/interactive/chat-panel.ts +168 -638
  569. package/src/interactive/chat-renderer.ts +13 -30
  570. package/src/interactive/clio-editor.ts +53 -21
  571. package/src/interactive/command-output.ts +56 -1
  572. package/src/interactive/dispatch-board.ts +1 -3
  573. package/src/interactive/editor-submit.ts +73 -59
  574. package/src/interactive/fleet-run-preview.ts +2 -0
  575. package/src/interactive/follow-up-queue-panel.ts +3 -3
  576. package/src/interactive/footer/dashboard.ts +12 -4
  577. package/src/interactive/footer/notifications.ts +2 -2
  578. package/src/interactive/footer/widgets.ts +52 -93
  579. package/src/interactive/interactive-application.ts +225 -63
  580. package/src/interactive/interactive-event-projection.ts +2 -44
  581. package/src/interactive/interactive-input-runtime.ts +257 -35
  582. package/src/interactive/interactive-presentation.ts +71 -21
  583. package/src/interactive/interactive-slash-runtime.ts +40 -48
  584. package/src/interactive/keybinding-manager.ts +156 -79
  585. package/src/interactive/keyboard-owner.ts +37 -0
  586. package/src/interactive/layout.ts +29 -4
  587. package/src/interactive/leader-key.ts +49 -102
  588. package/src/interactive/leader-menu.ts +45 -0
  589. package/src/interactive/overlay-ask-user-lifecycle.ts +9 -1
  590. package/src/interactive/overlay-frame.ts +15 -0
  591. package/src/interactive/overlay-general-openers.ts +2 -0
  592. package/src/interactive/overlay-key-routing.ts +46 -47
  593. package/src/interactive/overlay-lifecycle.ts +31 -15
  594. package/src/interactive/overlay-resource-openers.ts +56 -46
  595. package/src/interactive/overlay-session-lifecycle.ts +1 -1
  596. package/src/interactive/overlays/ask-user.ts +630 -556
  597. package/src/interactive/overlays/extension-panel.ts +70 -0
  598. package/src/interactive/overlays/extensions.ts +28 -5
  599. package/src/interactive/overlays/fleet-run-approval.ts +7 -3
  600. package/src/interactive/overlays/help-reference.ts +89 -40
  601. package/src/interactive/overlays/interop.ts +122 -3
  602. package/src/interactive/overlays/keybinding-detail.ts +2 -2
  603. package/src/interactive/overlays/library-lifecycle.ts +90 -0
  604. package/src/interactive/overlays/library-model.ts +574 -0
  605. package/src/interactive/overlays/library-review.ts +557 -0
  606. package/src/interactive/overlays/library-tabs.ts +3 -15
  607. package/src/interactive/overlays/library.ts +602 -0
  608. package/src/interactive/overlays/list-overlay.ts +218 -39
  609. package/src/interactive/overlays/model-selector.ts +28 -25
  610. package/src/interactive/overlays/session-selector.ts +9 -3
  611. package/src/interactive/overlays/settings.ts +34 -26
  612. package/src/interactive/overlays/tree-selector.ts +16 -11
  613. package/src/interactive/permission-hint.ts +13 -0
  614. package/src/interactive/permission-overlay.ts +77 -28
  615. package/src/interactive/prompt-source-label.ts +21 -0
  616. package/src/interactive/renderers/preview.ts +16 -0
  617. package/src/interactive/renderers/reference-card.ts +35 -0
  618. package/src/interactive/renderers/tool-execution.ts +67 -160
  619. package/src/interactive/renderers/worker-entry.ts +90 -42
  620. package/src/interactive/slash-autocomplete.ts +100 -7
  621. package/src/interactive/slash-commands.ts +396 -105
  622. package/src/interactive/slash-spec.ts +0 -1
  623. package/src/interactive/status/controller.ts +0 -5
  624. package/src/interactive/status/state-machine.ts +44 -26
  625. package/src/interactive/status/types.ts +3 -0
  626. package/src/interactive/status/verbs.ts +13 -12
  627. package/src/interactive/terminal-lease.ts +44 -12
  628. package/src/interactive/transcript-detail.ts +50 -112
  629. package/src/interactive/turn-queues.ts +8 -7
  630. package/src/interactive/turn-runtime.ts +1 -1
  631. package/src/interactive/view/artifacts.ts +4 -0
  632. package/src/interactive/view/view-overlay.ts +58 -43
  633. package/src/interactive/welcome-dashboard.ts +525 -408
  634. package/src/tools/bootstrap.ts +8 -0
  635. package/src/tools/builtin-tool-catalog.ts +7 -2
  636. package/src/tools/context/index.ts +58 -5
  637. package/src/tools/context/library.ts +465 -0
  638. package/src/tools/context/surface.ts +20 -6
  639. package/src/tools/core-bootstrap.ts +3 -0
  640. package/src/tools/dispatch-admission.ts +24 -1
  641. package/src/tools/dispatch-arguments.ts +8 -0
  642. package/src/tools/dispatch-plan.ts +32 -0
  643. package/src/tools/dispatch-schema.ts +31 -1
  644. package/src/tools/dispatch-types.ts +3 -0
  645. package/src/tools/dispatch.ts +1 -1
  646. package/src/tools/harness-extensions.ts +169 -0
  647. package/src/tools/observation.ts +4 -0
  648. package/src/tools/policy.ts +7 -1
  649. package/src/tools/presentation.ts +1 -1
  650. package/src/tools/registry.ts +20 -2
  651. package/src/tools/verify/numeric.ts +4 -4
  652. package/src/tools/worker-evidence.ts +5 -0
  653. package/src/worker/context-seed.ts +192 -0
  654. package/src/worker/entry.ts +1 -0
  655. package/src/worker/spec-contract.ts +8 -1
  656. package/dist/chunk-3UW3KU4A.js +0 -21
  657. package/dist/chunk-6SYEGZI3.js +0 -433
  658. package/dist/chunk-CXQ37WJH.js +0 -45
  659. package/dist/chunk-EQEJJ53P.js +0 -399
  660. package/dist/chunk-KTFSFCVN.js +0 -46
  661. package/dist/chunk-QRFXEO6Y.js +0 -17
  662. package/dist/chunk-T7FDXNRU.js +0 -1257
  663. package/dist/chunk-U7VQ4NI4.js +0 -911
  664. package/dist/configure-SML6UBZ5.js +0 -55
  665. package/dist/interop-YOTGXFJM.js +0 -115
  666. package/dist/library-GJI6W6OK.js +0 -226
  667. package/dist/skills-S36AAJHU.js +0 -510
  668. package/skills/README.md +0 -418
  669. package/skills/meta/find-skills/SKILL.md +0 -78
  670. package/skills/meta/find-skills/evals.md +0 -47
  671. package/src/domains/extensions/resource-path.ts +0 -27
  672. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +0 -27
  673. package/src/interactive/overlays/agents.ts +0 -70
  674. package/src/interactive/overlays/library-install-confirm.ts +0 -152
  675. package/src/interactive/overlays/prompts.ts +0 -89
  676. package/src/interactive/overlays/skills-hub.ts +0 -615
  677. /package/{skills → library/skills}/coding/ast-grep/references/rule_reference.md +0 -0
  678. /package/{skills → library/skills}/coding/prototype/references/LOGIC.md +0 -0
  679. /package/{skills → library/skills}/coding/prototype/references/UI.md +0 -0
  680. /package/{skills → library/skills}/coding/tdd/references/mocking.md +0 -0
  681. /package/{skills → library/skills}/coding/tdd/references/tests.md +0 -0
  682. /package/{skills → library/skills}/context/context-handoff/scripts/new-handoff.sh +0 -0
  683. /package/{skills → library/skills}/git/branch-closeout/evals.md +0 -0
  684. /package/{skills → library/skills}/git/branch-closeout/references/closeout-checklist.md +0 -0
  685. /package/{skills → library/skills}/git/file-ticket/assets/issue-template.md +0 -0
  686. /package/{skills → library/skills}/git/file-ticket/evals.md +0 -0
  687. /package/{skills → library/skills}/git/file-ticket/references/issue-discovery.md +0 -0
  688. /package/{skills → library/skills}/git/fix-issue/evals.md +0 -0
  689. /package/{skills → library/skills}/git/fix-issue/references/diagnosis-and-rca.md +0 -0
  690. /package/{skills → library/skills}/git/resolve-merge-conflicts/references/conflict-matrix.md +0 -0
  691. /package/{skills → library/skills}/git/ship/assets/pr-template.md +0 -0
  692. /package/{skills → library/skills}/git/ship/evals.md +0 -0
  693. /package/{skills → library/skills}/git/ship/references/remote-and-branch-policy.md +0 -0
  694. /package/{skills → library/skills}/git/worktree-create/evals.md +0 -0
  695. /package/{skills → library/skills}/git/worktree-create/references/worktree-setup.md +0 -0
  696. /package/{skills → library/skills}/git/worktree-merge/evals.md +0 -0
  697. /package/{skills → library/skills}/git/worktree-merge/references/merge-strategies.md +0 -0
  698. /package/{skills → library/skills}/meta/clio-coder-test/references/harness.md +0 -0
  699. /package/{skills → library/skills}/meta/clio-coder-test/references/test-map.md +0 -0
  700. /package/{skills → library/skills}/planning/archify/evals.md +0 -0
package/src/cli/skills.ts CHANGED
@@ -1,495 +1,48 @@
1
1
  import { resolve } from "node:path";
2
- import {
3
- discoverMarketplaceSkills,
4
- installSkill,
5
- loadSkills,
6
- type MarketplaceSkill,
7
- modelVisibleSkills,
8
- type ResourceDiagnostic,
9
- resolveMarketplaceShaping,
10
- type Skill,
11
- type SkillUpdateReport,
12
- skillCatalogValidity,
13
- updateSkills,
14
- } from "../domains/resources/index.js";
15
- import { formatColumns, printError, printOk } from "./shared.js";
16
-
17
- const HELP = `clio-coder skills <command>
18
-
19
- Manage local Clio and Agent Skills-compatible skills.
20
-
21
- Commands:
22
- clio-coder skills list [--json] [--all]
23
- clio-coder skills inventory --json
24
- clio-coder skills search <query> [--json]
25
- clio-coder skills inspect <name> [--json]
26
- clio-coder skills validate [path] [--json]
27
- clio-coder skills install <name|path|github-url>... [--user|--project] [--name <name>] [--force]
28
- clio-coder skills install --category <category> [--user|--project] [--force]
29
- clio-coder skills update <name> | --all [--force]
30
- clio-coder skills sync [--force]
31
- clio-coder skills eval <name|path> [--scenario <id>] [--target <id>] [--workspace <path>] [--timeout <seconds>] [--trust-fixtures] [--allow-network] [--json]
32
-
33
- inventory is the fixed machine-readable read a GUI host may run. Unlike a bare
34
- list it reports every installed skill, not only the ones the model may load, and
35
- says which are which; it carries no body, path, hash, or install URL.
36
-
37
- search covers installed skills plus the local marketplace: CLIO_CODER_SKILL_CATALOG_DIR,
38
- a repo skills/ catalog, or the catalog and skill-marketplace.json index the
39
- installed clio-coder package carries. Installing from the shipped catalog copies
40
- local files and needs no network.
41
-
42
- install resolves a bare name through that marketplace; a path or GitHub URL
43
- installs directly, and an existing local path always wins over a same-named
44
- marketplace entry. Several sources install in one command, and --category
45
- installs every marketplace skill in one catalog group (git, research, ...).
46
-
47
- eval (experimental) executes the skill's evals.md RED-GREEN scenarios: per
48
- scenario a baseline headless run without the skill, a treatment run with it,
49
- and a judge run scoring each Expected bullet from the transcripts. Exit is 1
50
- when a treatment bullet fails and 3 when a scenario was never measured (a
51
- truncated or unparseable judge response scores no bullet, which is not a skill
52
- failure). Every arm runs hermetic: the network tool plane is stripped from the
53
- child runs unless you pass --allow-network. The baseline and treatment arms run
54
- at autonomy full-auto in per-run disposable workspaces, because a headless run
55
- has no operator to approve anything and a gated arm measures the harness rather
56
- than the skill. --scenario takes a full id as written
57
- in evals.md, whose prefix is per-skill (S1, but also D2 in clio-dev, T3 in
58
- clio-test, F1 in find-skills, H2 in context-handoff), or a bare number that
59
- selects that scenario whatever its prefix. --json emits one JSONL row per
60
- (scenario, bullet) with schema: "experimental". --workspace copies an existing
61
- checkout into a throwaway seed; the source checkout is not mutated. Fixture
62
- commands declared in evals.md are real shell run in that seed; they only execute
63
- with --trust-fixtures, after you have reviewed the evals.md.
64
- `;
65
-
66
- type SkillInstallScope = "user" | "project";
67
-
68
- interface Parsed {
69
- command?: string;
70
- positional: string[];
71
- json: boolean;
72
- all: boolean;
73
- help: boolean;
74
- force: boolean;
75
- name?: string;
76
- category?: string;
77
- scope?: SkillInstallScope;
78
- scenario?: string;
79
- target?: string;
80
- workspace?: string;
81
- timeoutSeconds?: number;
82
- trustFixtures: boolean;
83
- allowNetwork: boolean;
84
- }
85
-
86
- function parse(argv: ReadonlyArray<string>): Parsed {
87
- const out: Parsed = {
88
- positional: [],
89
- json: false,
90
- all: false,
91
- help: false,
92
- force: false,
93
- trustFixtures: false,
94
- allowNetwork: false,
95
- };
96
- for (let i = 0; i < argv.length; i++) {
97
- const arg = argv[i];
98
- if (arg === undefined) continue;
99
- if (!out.command && !arg.startsWith("-")) {
100
- out.command = arg;
101
- continue;
102
- }
103
- switch (arg) {
104
- case "--json":
105
- out.json = true;
106
- break;
107
- case "--all":
108
- out.all = true;
109
- break;
110
- case "--force":
111
- out.force = true;
112
- break;
113
- case "--trust-fixtures":
114
- out.trustFixtures = true;
115
- break;
116
- case "--allow-network":
117
- out.allowNetwork = true;
118
- break;
119
- case "--name": {
120
- const value = argv[i + 1];
121
- if (!value || value.startsWith("-")) throw new Error("--name requires a value");
122
- out.name = value;
123
- i++;
124
- break;
125
- }
126
- case "--category": {
127
- const value = argv[i + 1];
128
- if (!value || value.startsWith("-")) throw new Error("--category requires a value");
129
- out.category = value;
130
- i++;
131
- break;
132
- }
133
- case "--scenario": {
134
- const value = argv[i + 1];
135
- if (!value || value.startsWith("-")) throw new Error("--scenario requires a value");
136
- out.scenario = value;
137
- i++;
138
- break;
139
- }
140
- case "--target": {
141
- const value = argv[i + 1];
142
- if (!value || value.startsWith("-")) throw new Error("--target requires a value");
143
- out.target = value;
144
- i++;
145
- break;
146
- }
147
- case "--workspace": {
148
- const value = argv[i + 1];
149
- if (!value || value.startsWith("-")) throw new Error("--workspace requires a value");
150
- out.workspace = value;
151
- i++;
152
- break;
153
- }
154
- case "--timeout": {
155
- const value = argv[i + 1];
156
- const seconds = value === undefined ? Number.NaN : Number.parseInt(value, 10);
157
- if (!Number.isInteger(seconds) || seconds <= 0) throw new Error("--timeout requires a positive integer");
158
- out.timeoutSeconds = seconds;
159
- i++;
160
- break;
161
- }
162
- case "--user":
163
- if (out.scope && out.scope !== "user") throw new Error("--user and --project are mutually exclusive");
164
- out.scope = "user";
165
- break;
166
- case "--project":
167
- if (out.scope && out.scope !== "project") throw new Error("--user and --project are mutually exclusive");
168
- out.scope = "project";
169
- break;
170
- case "--help":
171
- case "-h":
172
- out.help = true;
173
- break;
174
- default:
175
- if (arg.startsWith("-")) throw new Error(`unknown flag: ${arg}`);
176
- out.positional.push(arg);
177
- }
178
- }
179
- return out;
180
- }
181
-
182
- function printUpdateReports(reports: ReadonlyArray<SkillUpdateReport>): number {
183
- if (reports.length === 0) {
184
- process.stdout.write("skills: nothing to update (no installed skills with source-url provenance)\n");
185
- return 0;
186
- }
187
- for (const report of reports) {
188
- const detail = report.detail ? ` (${report.detail})` : "";
189
- process.stdout.write(`${report.name}: ${report.status}${detail}\n`);
190
- }
191
- return reports.some((report) => report.status === "error") ? 1 : 0;
192
- }
193
-
194
- function printDiagnostics(diagnostics: ReadonlyArray<ResourceDiagnostic>): void {
195
- for (const diag of diagnostics) {
196
- const detail = diag.path ? `${diag.message}: ${diag.path}` : diag.message;
197
- if (diag.type === "error") printError(detail);
198
- else process.stderr.write(`warning: ${detail}\n`);
199
- }
200
- }
201
-
202
- function skillRows(skills: ReadonlyArray<Skill>): string[][] {
203
- return skills.map((skill) => [
204
- skill.name,
205
- skill.scope,
206
- skill.source,
207
- skill.trusted ? "trusted" : "untrusted",
208
- skill.disableModelInvocation ? "manual" : "model",
209
- skill.hash.slice(0, 12),
210
- // Blank for the ordinary operator-installed case; a worker install is
211
- // the anomaly worth a column, so it is the only value that ever prints.
212
- skill.provenance?.installedBy ?? "",
213
- skill.description,
214
- ]);
215
- }
216
-
217
- function printList(skills: ReadonlyArray<Skill>): void {
218
- if (skills.length === 0) {
219
- process.stdout.write("skills: none\n");
220
- return;
221
- }
222
- process.stdout.write(
223
- formatColumns([["name", "scope", "source", "trust", "invoke", "hash", "by", "description"], ...skillRows(skills)]),
224
- );
225
- }
226
-
227
- function printInspect(skill: Skill): void {
228
- process.stdout.write(`name: ${skill.name}\n`);
229
- process.stdout.write(`description: ${skill.description}\n`);
230
- process.stdout.write(`path: ${skill.filePath}\n`);
231
- process.stdout.write(`baseDir: ${skill.baseDir}\n`);
232
- process.stdout.write(`scope: ${skill.scope}\n`);
233
- process.stdout.write(`source: ${skill.source}\n`);
234
- process.stdout.write(`trusted: ${skill.trusted}\n`);
235
- process.stdout.write(`disableModelInvocation: ${skill.disableModelInvocation}\n`);
236
- process.stdout.write(`hash: ${skill.hash}\n`);
237
- if (skill.provenance?.installedBy) {
238
- process.stdout.write(`installed-by: ${skill.provenance.installedBy}\n`);
239
- }
240
- if (skill.diagnostics.length > 0) {
241
- process.stdout.write("diagnostics:\n");
242
- for (const diag of skill.diagnostics) process.stdout.write(` ${diag.type}: ${diag.message}\n`);
243
- }
244
- }
245
-
246
- function formatMarketplaceOrigin(skill: MarketplaceSkill): string {
247
- const parts = [skill.origin === "catalog" ? "catalog" : "index"];
248
- if (skill.version) parts.push(`v${skill.version}`);
249
- if (skill.audit) parts.push(`audit: ${skill.audit}`);
250
- return parts.join(", ");
251
- }
252
-
253
- function validationLoad(pathArg: string | undefined): ReturnType<typeof loadSkills> {
254
- if (!pathArg) return loadSkills({ cwd: process.cwd() });
255
- return loadSkills({ disableDiscovery: true, explicitSkillPaths: [resolve(pathArg)] });
256
- }
257
-
258
- export async function runSkillsCommand(argv: ReadonlyArray<string>): Promise<number> {
259
- // Routed before the shared parser so the fixed read stays exactly fixed: no
260
- // skills flag can reach it, and no flag it does not name can be spent on it.
261
- if (argv[0] === "inventory") {
262
- const { runSkillsInventory } = await import("./skills-inventory.js");
263
- return runSkillsInventory(argv.slice(1));
264
- }
265
- let parsed: Parsed;
266
- try {
267
- parsed = parse(argv);
268
- } catch (error) {
269
- printError(error instanceof Error ? error.message : String(error));
270
- process.stderr.write(HELP);
2
+ import { readSettings } from "../core/config.js";
3
+ import { loadSkills, modelVisibleSkills, skillCatalogValidity } from "../domains/resources/index.js";
4
+ import { formatColumns } from "./shared.js";
5
+
6
+ /** Runtime discovery is a read surface of the library; package mutations live in library.ts. */
7
+ export function runSkillsRead(args: ReadonlyArray<string>): number {
8
+ const command = args[0];
9
+ const positional = args.slice(1).filter((arg) => !arg.startsWith("-"));
10
+ const json = args.includes("--json");
11
+ if (
12
+ (command !== "list" && command !== "validate") ||
13
+ args.slice(1).some((arg) => arg.startsWith("-") && arg !== "--json" && arg !== "--all") ||
14
+ positional.length > (command === "list" ? 0 : 1)
15
+ ) {
16
+ process.stderr.write("usage: clio-coder library skills [--all] [--json], or library validate <SKILL.md> [--json]\n");
271
17
  return 2;
272
18
  }
273
- if (parsed.help) {
274
- process.stdout.write(HELP);
275
- return 0;
276
- }
277
- // A bare `clio-coder skills` is a missing required argument, which the
278
- // exit-code contract puts at 2 with the usage on stderr. See the same note in
279
- // extensions.ts.
280
- if (!parsed.command) {
281
- process.stderr.write(HELP);
282
- return 2;
283
- }
284
- switch (parsed.command) {
285
- case "list": {
286
- const list = loadSkills({ cwd: process.cwd() });
287
- const skills = parsed.all ? list.items : modelVisibleSkills(list.items);
288
- if (parsed.json) process.stdout.write(`${JSON.stringify({ skills, diagnostics: list.diagnostics }, null, 2)}\n`);
289
- else {
290
- printList(skills);
291
- printDiagnostics(list.diagnostics);
292
- }
293
- return list.diagnostics.some((diag) => diag.type === "error") ? 1 : 0;
294
- }
295
- case "search": {
296
- const query = parsed.positional.join(" ").trim().toLowerCase();
297
- if (query.length === 0) {
298
- process.stderr.write("usage: clio-coder skills search <query> [--json]\n");
299
- return 2;
300
- }
301
- const list = loadSkills({ cwd: process.cwd() });
302
- const discovery = discoverMarketplaceSkills({ cwd: process.cwd() });
303
- const installedNames = new Set(list.items.map((skill) => skill.name));
304
- const matchesQuery = (name: string, description: string): boolean =>
305
- name.toLowerCase().includes(query) || description.toLowerCase().includes(query);
306
- const installed = list.items.filter((skill) => matchesQuery(skill.name, skill.description));
307
- // A catalog group name is the other thing an operator types here, and
308
- // `install --category git` treats it as a real field: without this,
309
- // `search git` answered with the skills whose prose mentions git and
310
- // omitted every member of skills/git/.
311
- const marketplace = discovery.skills.filter(
312
- (skill) =>
313
- !installedNames.has(skill.name) &&
314
- (matchesQuery(skill.name, skill.description) || skill.category?.toLowerCase() === query),
315
- );
316
- // Search must report anything that made the result incomplete: loader
317
- // diagnostics (like list) plus marketplace discovery diagnostics, so a
318
- // broken index looks different from a skill that does not exist.
319
- const exitCode = list.diagnostics.some((diag) => diag.type === "error") ? 1 : 0;
320
- if (parsed.json) {
321
- process.stdout.write(
322
- `${JSON.stringify(
323
- { query, installed, marketplace, diagnostics: list.diagnostics, marketplaceDiagnostics: discovery.diagnostics },
324
- null,
325
- 2,
326
- )}\n`,
327
- );
328
- return exitCode;
329
- }
330
- if (installed.length > 0) {
331
- process.stdout.write("installed:\n");
332
- for (const skill of installed) {
333
- process.stdout.write(` ${skill.name.padEnd(24)} ${skill.description} (${skill.scope}/${skill.source})\n`);
334
- }
335
- }
336
- if (marketplace.length > 0) {
337
- process.stdout.write("marketplace (clio-coder skills install <name>):\n");
338
- for (const skill of marketplace) {
339
- process.stdout.write(` ${skill.name.padEnd(24)} ${skill.description} (${formatMarketplaceOrigin(skill)})\n`);
340
- }
341
- }
342
- if (installed.length === 0 && marketplace.length === 0) {
343
- process.stdout.write(`skills: no matches for "${query}"\n`);
344
- }
345
- printDiagnostics(list.diagnostics);
346
- for (const message of discovery.diagnostics) process.stderr.write(`warning: ${message}\n`);
347
- return exitCode;
348
- }
349
- case "inspect": {
350
- const name = parsed.positional[0];
351
- if (!name || parsed.positional.length !== 1) {
352
- process.stderr.write("usage: clio-coder skills inspect <name> [--json]\n");
353
- return 2;
354
- }
355
- const list = loadSkills({ cwd: process.cwd() });
356
- const skill = list.items.find((entry) => entry.name === name);
357
- if (!skill) {
358
- // inspect reads an installed skill's loaded record, which a marketplace
359
- // entry does not have yet. Saying "unknown skill" about a name `search`
360
- // just listed denies the skill exists; name the state and the one
361
- // command that changes it.
362
- const available = discoverMarketplaceSkills({ cwd: process.cwd() }).skills.some((entry) => entry.name === name);
363
- printError(
364
- available
365
- ? `skill not installed: ${name} (available in the marketplace; install it with: clio-coder skills install ${name})`
366
- : `unknown skill: ${name}`,
367
- );
368
- return 1;
369
- }
370
- if (parsed.json) process.stdout.write(`${JSON.stringify({ skill }, null, 2)}\n`);
371
- else printInspect(skill);
372
- return 0;
373
- }
374
- case "validate": {
375
- const pathArg = parsed.positional[0];
376
- if (parsed.positional.length > 1) {
377
- process.stderr.write("usage: clio-coder skills validate [path] [--json]\n");
378
- return 2;
379
- }
380
- const list = validationLoad(pathArg);
381
- // The rule itself lives in the loader, because `skills inspect --json`
382
- // reports the same verdict to a GUI host and a verdict that drifts
383
- // between the terminal and the browser is worse than no verdict.
384
- const { ok } = skillCatalogValidity(list);
385
- if (parsed.json) {
386
- process.stdout.write(`${JSON.stringify({ ok, skills: list.items, diagnostics: list.diagnostics }, null, 2)}\n`);
387
- } else {
388
- printDiagnostics(list.diagnostics);
389
- process.stdout.write(`${ok ? "valid" : "invalid"}: ${list.items.length} skill(s)\n`);
390
- }
391
- return ok ? 0 : 1;
392
- }
393
- case "install": {
394
- let sources = parsed.positional;
395
- if (parsed.category !== undefined) {
396
- if (sources.length > 0) {
397
- process.stderr.write("--category installs a whole catalog group; do not also name skills\n");
398
- return 2;
399
- }
400
- const grouped = discoverMarketplaceSkills().skills.filter((skill) => skill.category === parsed.category);
401
- if (grouped.length === 0) {
402
- printError(`no marketplace skills in category "${parsed.category}"`);
403
- return 1;
404
- }
405
- sources = grouped.map((skill) => skill.name);
406
- }
407
- if (sources.length === 0) {
408
- process.stderr.write(
409
- "usage: clio-coder skills install <name|path|github-url>... [--user|--project] [--name <name>] [--force]\n" +
410
- " clio-coder skills install --category <category> [--user|--project] [--force]\n",
411
- );
412
- return 2;
413
- }
414
- // --name renames the destination directory, which can only mean one
415
- // thing for one source; silently applying it to a list would install
416
- // every skill over the same directory.
417
- if (parsed.name !== undefined && sources.length !== 1) {
418
- process.stderr.write("--name applies to a single skill; install them one at a time to rename\n");
419
- return 2;
420
- }
421
- let failed = 0;
422
- for (const source of sources) {
423
- try {
424
- const result = installSkill({
425
- source,
426
- scope: parsed.scope ?? "project",
427
- force: parsed.force,
428
- ...(parsed.name ? { name: parsed.name } : {}),
429
- });
430
- printOk(`installed ${result.scope} skill ${result.name} at ${result.path}`);
431
- for (const warning of result.warnings) process.stderr.write(`warning: ${warning}\n`);
432
- } catch (err) {
433
- failed += 1;
434
- printError(err instanceof Error ? err.message : String(err));
435
- }
436
- }
437
- if (failed === sources.length) return 1;
438
- process.stdout.write("audit is set to unknown; review the skill and set audit: pass yourself\n");
439
- return failed > 0 ? 1 : 0;
440
- }
441
- case "update": {
442
- const name = parsed.positional[0];
443
- if ((!name && !parsed.all) || parsed.positional.length > 1) {
444
- process.stderr.write("usage: clio-coder skills update <name> | --all [--force]\n");
445
- return 2;
446
- }
447
- try {
448
- const reports = updateSkills({
449
- ...(name ? { name } : { all: true }),
450
- force: parsed.force,
451
- resolveShaping: resolveMarketplaceShaping(),
452
- });
453
- return printUpdateReports(reports);
454
- } catch (err) {
455
- printError(err instanceof Error ? err.message : String(err));
456
- return 1;
457
- }
458
- }
459
- case "sync": {
460
- try {
461
- return printUpdateReports(
462
- updateSkills({ all: true, force: parsed.force, resolveShaping: resolveMarketplaceShaping() }),
463
- );
464
- } catch (err) {
465
- printError(err instanceof Error ? err.message : String(err));
466
- return 1;
467
- }
468
- }
469
- case "eval": {
470
- const name = parsed.positional[0];
471
- if (!name || parsed.positional.length !== 1) {
472
- process.stderr.write(
473
- "usage: clio-coder skills eval <name|path> [--scenario <id>] [--target <id>] [--workspace <path>] [--timeout <seconds>] [--trust-fixtures] [--allow-network] [--json]\n",
474
- );
475
- return 2;
476
- }
477
- // Dynamic import keeps the eval lane (evidence + eval domains) out of
478
- // the chunk that clio-coder skills list/search load.
479
- const { runSkillsEvalCommand } = await import("./skills-eval.js");
480
- return runSkillsEvalCommand(name, {
481
- json: parsed.json,
482
- trustFixtures: parsed.trustFixtures,
483
- allowNetwork: parsed.allowNetwork,
484
- ...(parsed.scenario !== undefined ? { scenario: parsed.scenario } : {}),
485
- ...(parsed.target !== undefined ? { target: parsed.target } : {}),
486
- ...(parsed.workspace !== undefined ? { workspace: parsed.workspace } : {}),
487
- ...(parsed.timeoutSeconds !== undefined ? { timeoutSeconds: parsed.timeoutSeconds } : {}),
488
- });
489
- }
490
- default:
491
- printError(`unknown skills command: ${parsed.command}`);
492
- process.stderr.write(HELP);
493
- return 2;
494
- }
19
+ const list = loadSkills(
20
+ command === "validate" && positional[0]
21
+ ? { disableDiscovery: true, explicitSkillPaths: [resolve(positional[0])] }
22
+ : { cwd: process.cwd(), trustProjectCompatRoots: readSettings().integrations.projectResources.trustProjectImports },
23
+ );
24
+ const skills = command === "validate" || args.includes("--all") ? list.items : modelVisibleSkills(list.items);
25
+ const valid =
26
+ command === "validate" ? skillCatalogValidity(list).ok : !list.diagnostics.some((diag) => diag.type === "error");
27
+ if (json)
28
+ process.stdout.write(
29
+ `${JSON.stringify({ ...(command === "validate" ? { ok: valid } : {}), skills, diagnostics: list.diagnostics }, null, 2)}\n`,
30
+ );
31
+ else {
32
+ process.stdout.write(
33
+ formatColumns([
34
+ ["name", "scope", "source", "trust", "invoke", "description"],
35
+ ...skills.map((skill) => [
36
+ skill.name,
37
+ skill.scope,
38
+ skill.source,
39
+ skill.trusted ? "trusted" : "untrusted",
40
+ skill.disableModelInvocation ? "manual" : "model",
41
+ skill.description,
42
+ ]),
43
+ ]),
44
+ );
45
+ for (const diagnostic of list.diagnostics) process.stderr.write(`${diagnostic.type}: ${diagnostic.message}\n`);
46
+ }
47
+ return valid ? 0 : 1;
495
48
  }
@@ -1,6 +1,6 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import { initializeClioHome } from "../core/init.js";
3
- import { clioStateDir } from "../core/xdg.js";
3
+ import { resolveClioDirs } from "../core/xdg.js";
4
4
  import { detectInstallMethod } from "../domains/lifecycle/install-method.js";
5
5
  import { listMigrations, readMigrationManifest, runPending } from "../domains/lifecycle/migrations/index.js";
6
6
  import { readStateInfo } from "../domains/lifecycle/state.js";
@@ -185,7 +185,7 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
185
185
  presenter.header("Upgrade", "upgrade");
186
186
 
187
187
  const before = getVersionInfo().clio;
188
- const stateDir = clioStateDir();
188
+ const stateDir = resolveClioDirs().state;
189
189
  const method = detectInstallMethod();
190
190
  const methodLabel = method === "source" ? "source checkout" : opts.postInstall ? "package install" : "npm global";
191
191
  presenter.setMethod(methodLabel);
@@ -64,6 +64,7 @@ export const BusChannels = {
64
64
  CompactionEnd: "compaction.end",
65
65
  MiddlewareHookFailed: "middleware.hookFailed",
66
66
  ExtensionsReloaded: "extensions.reloaded",
67
+ PluginsReloaded: "plugins.reloaded",
67
68
  ExtensionsLoadIssue: "extensions.loadIssue",
68
69
  ContextActivity: "context.activity",
69
70
  ContextSourcesChanged: "context.sourcesChanged",
@@ -726,6 +727,9 @@ export interface ExtensionsReloadedPayload {
726
727
  digest: string;
727
728
  }
728
729
 
730
+ /** Data-only plugin generation publication, independent of extension hook generations. */
731
+ export type PluginsReloadedPayload = ExtensionsReloadedPayload;
732
+
729
733
  /** Operator diagnostics for skipped extension or project-hook configuration. */
730
734
  export interface ExtensionsLoadIssuePayload {
731
735
  message: string;
@@ -859,6 +863,7 @@ export type BusPayloadMap = {
859
863
  [BusChannels.CompactionEnd]: CompactionPayload;
860
864
  [BusChannels.MiddlewareHookFailed]: MiddlewareHookFailedPayload;
861
865
  [BusChannels.ExtensionsReloaded]: ExtensionsReloadedPayload;
866
+ [BusChannels.PluginsReloaded]: PluginsReloadedPayload;
862
867
  [BusChannels.ExtensionsLoadIssue]: ExtensionsLoadIssuePayload;
863
868
  [BusChannels.ContextActivity]: ContextActivityPayload;
864
869
  [BusChannels.ContextSourcesChanged]: ContextSourcesChangedPayload;
@@ -21,6 +21,7 @@ import {
21
21
  ACTIVE_ROUTING_ROLES,
22
22
  COUNCIL_MEMBER_LABEL_PATTERN,
23
23
  DEFAULT_SETTINGS,
24
+ normalizeOutputStyle,
24
25
  THEME_NAMED_COLORS,
25
26
  THINKING_LEVELS,
26
27
  type ThinkingLevel,
@@ -1745,8 +1746,12 @@ export function validateSettings(raw: unknown): SettingsValidationResult {
1745
1746
  const parsed = expectBoolean(issues, `interface.${key}`, ui[key]);
1746
1747
  if (parsed !== undefined) (settings.interface as unknown as Record<string, unknown>)[key] = parsed;
1747
1748
  }
1749
+ if ("outputDetail" in ui) {
1750
+ const style = normalizeOutputStyle(ui.outputDetail);
1751
+ if (style) settings.interface.outputDetail = style;
1752
+ else issues.add("interface.outputDetail", "expected compact, standard, or detailed");
1753
+ }
1748
1754
  for (const [key, allowed] of [
1749
- ["outputDetail", ["minimal", "default", "verbose"]],
1750
1755
  ["smoothStreaming", ["off", "auto", "on"]],
1751
1756
  ["mode", ["regular", "fullscreen"]],
1752
1757
  ["fullscreenScrollbar", ["hidden", "auto", "always"]],