@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
@@ -1,190 +1,488 @@
1
+ import { existsSync, statSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { pluginLocalPath } from "../domains/plugins/catalog.js";
4
+ import {
5
+ listInstalledPlugins,
6
+ type PluginScope,
7
+ readPluginManifest,
8
+ reloadPluginResources,
9
+ } from "../domains/plugins/index.js";
1
10
  import {
2
- classifyLibraryRequirements,
3
11
  confirmLibraryRemote,
4
- discoverLibrary,
5
- installLibraryPlan,
6
- type LibraryEntry,
7
- type LibraryEntryKind,
12
+ libraryEntryDrift,
8
13
  libraryEntryRef,
9
- libraryInstallPath,
14
+ libraryWorkspace,
15
+ pinLibraryEntry,
10
16
  planLibraryInstall,
17
+ registerLibraryPackage,
18
+ releaseLibraryPlan,
19
+ resolveInstalledLibraryEntry,
20
+ resolveLibraryPackage,
11
21
  syncLibrary,
12
- } from "../domains/resources/index.js";
22
+ } from "../domains/resources/library.js";
23
+ import {
24
+ applyLibraryLifecycle,
25
+ type LibraryApplyResult,
26
+ type LibraryLifecyclePlan,
27
+ type LibraryOperation,
28
+ planLibraryLifecycle,
29
+ } from "../domains/resources/library-actions.js";
30
+ import {
31
+ inspectLibraryCopy,
32
+ type LibraryOrigin,
33
+ type LibraryResourceSourceClass,
34
+ readLibraryInventory,
35
+ } from "../domains/resources/library-inventory.js";
36
+ import { isLibraryKind, isLibraryResourceKind, type LibraryEntryKind } from "../domains/resources/library-types.js";
13
37
  import { printError, printOk } from "./shared.js";
14
38
 
15
- const KINDS = new Set<LibraryEntryKind>(["skill", "agent", "prompt", "fleet"]);
16
39
  const HELP = `clio-coder library <command>
17
40
 
41
+ One library of packages: plugin, skill, agent, prompt, fleet.
42
+
18
43
  Commands:
19
- clio-coder library list [--kind <kind>] [--json]
20
- clio-coder library search <query> [--kind <kind>] [--json]
21
- clio-coder library add <ref> [--from <catalog|path>] [--with-requirements] [--yes] [--json]
22
- clio-coder library use <kind> <name>
44
+ clio-coder library list [--kind <kind>] [--user|--project] [--json]
45
+ clio-coder library search [query] [--kind <kind>] [--json]
46
+ clio-coder library recipes [query] [--kind skill|agent|prompt|fleet] [--source core|package|user|project|compat] [--all] [--json]
47
+ clio-coder library register <path> [--user|--project] [--force] [--json]
48
+ clio-coder library inspect <path|kind:name|name> [--user|--project] [--json]
49
+ clio-coder library install <path|kind:name|name> [--user|--project] [--force] [--with-requirements] [--dry-run] [--json]
50
+ clio-coder library import <path|github-tree-url> [--user|--project] [--format claude|codex] [--dry-run] [--json] [--yes]
51
+ clio-coder library update <kind:name|name> [--user|--project] [--force] [--dry-run] [--json]
52
+ clio-coder library enable <kind:name|name> [--user|--project] [--dry-run] [--json]
53
+ clio-coder library disable <kind:name|name> [--user|--project] [--dry-run] [--json]
54
+ clio-coder library remove <kind:name|name> [--user|--project] [--dry-run] [--json]
55
+ clio-coder library pin <kind:name|name> [--user|--project] [--json]
56
+ clio-coder library drift [kind:name|name] [--user|--project] [--json]
57
+ clio-coder library reload [--json]
58
+ clio-coder library skills [--all] [--json]
59
+ clio-coder library inventory --json
60
+ clio-coder library validate <package-path|SKILL.md> [--json]
23
61
  clio-coder library sync
24
62
  clio-coder library push
25
63
  clio-coder library remote confirm <url>
64
+
65
+ Install and register default to user scope. Other mutations select the project
66
+ copy when present; an explicit scope selects exactly that copy. List includes
67
+ both scopes and all installed states. --from <index.yaml> selects an index.
68
+ Every mutation builds one reviewed plan, rechecks it inside the package lock,
69
+ refuses to break enabled dependents, and reports per-package outcomes with disk,
70
+ recipe-admission and host-refresh facts separately; --dry-run prints the plan
71
+ and writes nothing. A CLI never refreshes a running session.
72
+ Import reviews a portable, Claude Code or Codex plugin from a path or GitHub
73
+ tree URL, normalizes supported recipes into a foreign-trust package, and never
74
+ activates hooks, MCP, LSP or scripts.
75
+ List and search are package-oriented; --kind and a query also match the
76
+ recipes a bundle provides, returning the owning package as the install target.
77
+ Recipes is the versioned, body-free read of actual discovered recipes across
78
+ core, installed packages and loose user/project files, with owner, origin,
79
+ availability and invocation; --all adds internal diagnostic agents. Nothing in
80
+ these reads fetches a remote source or activates a recipe.
81
+ Skills lists discovered runtime skills, including unmanaged local files.
82
+ Inventory is the fixed, body-free skill read for GUI hosts.
83
+ Package evals run with clio-coder eval run --package <kind:name> --eval <name>.
26
84
  `;
85
+ /** One short operator label per origin; details stay in the JSON record. */
86
+ function originLabel(origin: LibraryOrigin): string {
87
+ switch (origin.kind) {
88
+ case "bundled":
89
+ return "bundled";
90
+ case "remote":
91
+ return `remote ${origin.url}`;
92
+ case "local":
93
+ return origin.host ? `local (${origin.host}) ${origin.path}` : `local ${origin.path}`;
94
+ case "imported":
95
+ return `imported from ${origin.agent}${origin.marketplace ? ` (${origin.marketplace})` : ""} ${origin.path}`;
96
+ case "core":
97
+ return "core";
98
+ default:
99
+ return origin.detail ? `unknown: ${origin.detail}` : "unknown";
100
+ }
101
+ }
27
102
 
28
103
  interface Parsed {
29
104
  command?: string;
30
105
  positional: string[];
106
+ scope?: PluginScope;
31
107
  kind?: LibraryEntryKind;
108
+ source?: LibraryResourceSourceClass;
32
109
  from?: string;
110
+ all: boolean;
111
+ force: boolean;
33
112
  json: boolean;
34
- yes: boolean;
35
- withRequirements: boolean;
36
113
  help: boolean;
114
+ dryRun: boolean;
115
+ withRequirements: boolean;
37
116
  }
38
-
39
- function parse(argv: ReadonlyArray<string>): Parsed {
40
- const out: Parsed = { positional: [], json: false, yes: false, withRequirements: false, help: false };
41
- for (let i = 0; i < argv.length; i += 1) {
42
- const arg = argv[i];
117
+ function parse(args: ReadonlyArray<string>): Parsed {
118
+ const out: Parsed = {
119
+ positional: [],
120
+ all: false,
121
+ force: false,
122
+ json: false,
123
+ help: false,
124
+ dryRun: false,
125
+ withRequirements: false,
126
+ };
127
+ for (let i = 0; i < args.length; i++) {
128
+ const arg = args[i];
43
129
  if (!arg) continue;
44
- if (!out.command && !arg.startsWith("-")) {
45
- out.command = arg;
46
- continue;
47
- }
48
- if (arg === "--json") out.json = true;
49
- else if (arg === "--yes") out.yes = true;
50
- else if (arg === "--with-requirements") out.withRequirements = true;
130
+ if (!out.command && !arg.startsWith("-")) out.command = arg;
51
131
  else if (arg === "--help" || arg === "-h") out.help = true;
132
+ else if (arg === "--json") out.json = true;
133
+ else if (arg === "--all") out.all = true;
134
+ else if (arg === "--force" || arg === "-f") out.force = true;
135
+ else if (arg === "--dry-run") out.dryRun = true;
136
+ else if (arg === "--with-requirements") out.withRequirements = true;
52
137
  else if (arg === "--kind") {
53
- const value = argv[++i];
54
- if (!value || !KINDS.has(value as LibraryEntryKind))
55
- throw new Error("--kind requires skill, agent, prompt, or fleet");
56
- out.kind = value as LibraryEntryKind;
138
+ const value = args[++i];
139
+ if (!isLibraryKind(value)) throw new Error("--kind requires plugin, skill, agent, prompt, or fleet");
140
+ out.kind = value;
141
+ } else if (arg === "--source") {
142
+ const value = args[++i];
143
+ if (!value || !["core", "package", "user", "project", "compat"].includes(value))
144
+ throw new Error("--source requires core, package, user, project, or compat");
145
+ out.source = value as LibraryResourceSourceClass;
57
146
  } else if (arg === "--from") {
58
- const value = argv[++i];
59
- if (!value) throw new Error("--from requires a value");
147
+ const value = args[++i];
148
+ if (!value || value.startsWith("-")) throw new Error("--from requires an index path");
60
149
  out.from = value;
150
+ } else if (arg === "--user" || arg === "--project") {
151
+ const scope = arg === "--user" ? "user" : "project";
152
+ if (out.scope && out.scope !== scope) throw new Error("--user and --project are mutually exclusive");
153
+ out.scope = scope;
61
154
  } else if (arg.startsWith("-")) throw new Error(`unknown flag: ${arg}`);
62
155
  else out.positional.push(arg);
63
156
  }
64
157
  return out;
65
158
  }
159
+ const LIFECYCLE: ReadonlyArray<LibraryOperation> = ["install", "update", "enable", "disable", "remove"];
66
160
 
67
- function selectEntry(entries: ReadonlyArray<LibraryEntry>, ref: string): LibraryEntry {
68
- const matches = ref.includes(":")
69
- ? entries.filter((entry) => libraryEntryRef(entry) === ref)
70
- : entries.filter((entry) => entry.name === ref);
71
- if (matches.length === 0) throw new Error(`library entry not found: ${ref}`);
72
- if (matches.length > 1)
73
- throw new Error(`library entry is ambiguous; use a typed reference: ${matches.map(libraryEntryRef).join(", ")}`);
74
- return matches[0] as LibraryEntry;
161
+ function verb(operation: LibraryOperation): string {
162
+ return operation === "install" ? "installed" : operation === "update" ? "updated" : `${operation}d`;
75
163
  }
76
164
 
77
- function filtered(entries: ReadonlyArray<LibraryEntry>, kind?: LibraryEntryKind): LibraryEntry[] {
78
- return entries.filter((entry) => kind === undefined || entry.kind === kind);
165
+ /** Existing JSON fields stay where old callers expect them; plan and apply are additive. */
166
+ function lifecycleJson(
167
+ operation: LibraryOperation,
168
+ plan: LibraryLifecyclePlan,
169
+ apply: LibraryApplyResult,
170
+ ok: boolean,
171
+ ) {
172
+ const target = plan.steps.at(-1);
173
+ const last = apply.outcomes.at(-1);
174
+ const failure = apply.outcomes.find((item) => item.status === "failed" && item.error);
175
+ const base = { ok, ...(failure ? { error: failure.error?.message } : {}), plan, apply };
176
+ if (operation === "install" || operation === "update")
177
+ return {
178
+ ...base,
179
+ confirmed: !apply.dryRun && ok,
180
+ writes: plan.steps.map((step) => ({
181
+ ref: step.identity.ref,
182
+ path: step.destination,
183
+ ...(step.source ? { sha256: step.source.sha256, sourceUrl: step.source.sourceUrl } : {}),
184
+ })),
185
+ results: apply.outcomes
186
+ .filter((item) => item.status === "committed")
187
+ .map((item) => (item.recovery ? { recovery: item.recovery } : {})),
188
+ ...(last?.recovery ? { recovery: last.recovery } : {}),
189
+ id: target?.identity.name,
190
+ path: target?.destination,
191
+ ...(target?.source ? { sha256: target.source.sha256 } : {}),
192
+ };
193
+ if (operation === "remove")
194
+ return {
195
+ ...base,
196
+ ...(last?.status === "committed" ? { removed: last.identity.ref } : {}),
197
+ ...(last?.recovery ? { recovery: last.recovery } : {}),
198
+ };
199
+ const plugin =
200
+ last?.status === "committed"
201
+ ? listInstalledPlugins(plan.cwd, { scope: last.identity.scope, all: true }).find(
202
+ (item) => item.id === last.identity.name,
203
+ )
204
+ : undefined;
205
+ return { ...base, ...(plugin ? { plugin } : {}), diagnostics: last?.diagnostics ?? [] };
79
206
  }
80
207
 
81
- export async function runLibraryCommand(argv: ReadonlyArray<string>): Promise<number> {
208
+ export async function runLibraryCommand(
209
+ args: ReadonlyArray<string>,
210
+ discoveryOptions: { catalog?: string } = {},
211
+ ): Promise<number> {
212
+ if (args[0] === "inventory") return (await import("./skills-inventory.js")).runSkillsInventory(args.slice(1));
213
+ if (args[0] === "import") return (await import("./library-import.js")).runLibraryImport(args.slice(1));
82
214
  let parsed: Parsed;
83
215
  try {
84
- parsed = parse(argv);
216
+ parsed = parse(args);
85
217
  } catch (error) {
86
- printError(error instanceof Error ? error.message : String(error));
218
+ printError(String(error));
87
219
  return 2;
88
220
  }
89
- if (!parsed.command || parsed.help) {
221
+ if (parsed.help || !parsed.command) {
90
222
  process.stdout.write(HELP);
91
223
  return parsed.help ? 0 : 2;
92
224
  }
225
+ const options = {
226
+ cwd: process.cwd(),
227
+ ...(parsed.scope ? { scope: parsed.scope } : {}),
228
+ ...discoveryOptions,
229
+ ...(parsed.from ? { catalog: parsed.from } : {}),
230
+ };
231
+ const emit = (value: unknown): void => {
232
+ process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
233
+ };
93
234
  try {
94
- if (parsed.command === "list" || parsed.command === "search") {
95
- const discovery = discoverLibrary();
96
- const query = parsed.command === "search" ? parsed.positional.join(" ").trim().toLowerCase() : "";
97
- if (parsed.command === "search" && !query) throw new Error("library search requires a query");
98
- const entries = filtered(discovery.entries, parsed.kind).filter(
99
- (entry) => !query || entry.name.toLowerCase().includes(query) || entry.description.toLowerCase().includes(query),
100
- );
101
- if (parsed.json)
102
- process.stdout.write(`${JSON.stringify({ entries, diagnostics: discovery.diagnostics }, null, 2)}\n`);
103
- else
104
- for (const entry of entries) process.stdout.write(`${libraryEntryRef(entry).padEnd(28)} ${entry.description}\n`);
105
- return 0;
235
+ if (parsed.dryRun && !LIFECYCLE.includes(parsed.command as LibraryOperation))
236
+ throw new Error("--dry-run is supported only for library install, update, enable, disable and remove");
237
+ if (parsed.command === "skills") {
238
+ if (parsed.positional.length) throw new Error("library skills takes no arguments");
239
+ return (await import("./skills.js")).runSkillsRead([
240
+ "list",
241
+ ...(parsed.all ? ["--all"] : []),
242
+ ...(parsed.json ? ["--json"] : []),
243
+ ]);
106
244
  }
107
- if (parsed.command === "add") {
108
- const ref = parsed.positional[0];
109
- if (!ref || parsed.positional.length !== 1) throw new Error("library add requires one reference");
110
- const catalog = parsed.from && parsed.from !== "catalog" ? parsed.from : undefined;
111
- const discovery = discoverLibrary(catalog ? { catalog } : {});
112
- let entry: LibraryEntry;
113
- try {
114
- entry = selectEntry(discovery.entries, ref);
115
- } catch (error) {
116
- const refusal = ref.includes(":")
117
- ? discovery.refusals[ref]
118
- : Object.entries(discovery.refusals).find(([key]) => key.endsWith(`:${ref}`))?.[1];
119
- if (refusal) throw new Error(refusal);
120
- throw error;
121
- }
122
- const requirements = classifyLibraryRequirements(entry, discovery.entries);
123
- if (requirements.unsatisfied.length > 0 && !parsed.withRequirements) {
124
- const refs = requirements.unsatisfied.map(libraryEntryRef);
125
- if (parsed.json)
245
+ if (parsed.command === "recipes") {
246
+ if (parsed.kind && !isLibraryResourceKind(parsed.kind))
247
+ throw new Error("library recipes --kind requires skill, agent, prompt, or fleet");
248
+ const inventory = readLibraryInventory({
249
+ cwd: options.cwd,
250
+ include: { packages: false, copies: false },
251
+ ...(parsed.kind ? { kinds: [parsed.kind] } : {}),
252
+ ...(parsed.source ? { sources: [parsed.source] } : {}),
253
+ ...(parsed.positional.length ? { query: parsed.positional.join(" ") } : {}),
254
+ all: parsed.all,
255
+ });
256
+ if (parsed.json) {
257
+ const { packages: _packages, copies: _copies, ...rest } = inventory;
258
+ emit(rest);
259
+ } else {
260
+ for (const resource of inventory.resources) {
261
+ const owner = resource.owner ? `${resource.owner.ref}@${resource.owner.scope}` : resource.source.class;
126
262
  process.stdout.write(
127
- `${JSON.stringify({ ok: false, entry: libraryEntryRef(entry), satisfiedRequirements: requirements.satisfied.map(libraryEntryRef), unresolvedRequirements: refs }, null, 2)}\n`,
128
- );
129
- else
130
- process.stderr.write(
131
- `satisfied requirements: ${requirements.satisfied.length > 0 ? requirements.satisfied.map(libraryEntryRef).join(", ") : "none"}\nunresolved requirements: ${refs.join(", ")}\npass --with-requirements to install them in dependency order\n`,
263
+ `${resource.kind}\t${resource.name}\t${owner}\t${originLabel(resource.origin)}\t${resource.availability}\t${resource.invocation ?? ""}\n`,
132
264
  );
133
- return 1;
265
+ }
266
+ if (inventory.truncated.resources) process.stderr.write("recipe list truncated; narrow with --kind or a query\n");
267
+ for (const diagnostic of inventory.diagnostics) process.stderr.write(`${diagnostic}\n`);
134
268
  }
135
- const plans = [...(parsed.withRequirements ? requirements.unsatisfied : []), entry].map(planLibraryInstall);
136
- if (parsed.json)
137
- process.stdout.write(
138
- `${JSON.stringify({ ok: true, confirmed: parsed.yes, satisfiedRequirements: requirements.satisfied.map(libraryEntryRef), writes: plans.map((plan) => ({ ref: libraryEntryRef(plan.entry), path: plan.path, sha256: plan.sha256 })) }, null, 2)}\n`,
139
- );
269
+ return 0;
270
+ }
271
+ if (parsed.command === "list" || parsed.command === "search") {
272
+ if (parsed.command === "list" && parsed.positional.length) throw new Error("library list takes no arguments");
273
+ if (parsed.source) throw new Error("--source applies to library recipes");
274
+ const discovery = libraryWorkspace(options);
275
+ const query = parsed.positional.join(" ");
276
+ const inventory = readLibraryInventory({
277
+ cwd: options.cwd,
278
+ ...(options.catalog ? { catalog: options.catalog } : {}),
279
+ include: { resources: false },
280
+ ...(parsed.kind ? { kinds: [parsed.kind] } : {}),
281
+ ...(query ? { query } : {}),
282
+ });
283
+ const selected = new Map(inventory.packages.map((record) => [record.ref, record]));
284
+ const entries = discovery.entries.flatMap((entry) => {
285
+ const record = selected.get(libraryEntryRef(entry));
286
+ return record
287
+ ? [
288
+ {
289
+ ...entry,
290
+ provenance: record.origin,
291
+ ...(record.format ? { format: record.format } : {}),
292
+ ...(record.provides ? { provides: record.provides } : {}),
293
+ },
294
+ ]
295
+ : [];
296
+ });
297
+ if (parsed.json) emit({ entries, diagnostics: discovery.diagnostics });
140
298
  else {
141
- process.stdout.write("library add plan:\n");
142
- process.stdout.write(
143
- ` satisfied requirements: ${requirements.satisfied.length > 0 ? requirements.satisfied.map(libraryEntryRef).join(", ") : "none"}\n`,
144
- );
145
- for (const plan of plans)
146
- process.stdout.write(` ${libraryEntryRef(plan.entry)} -> ${plan.path} sha256 ${plan.sha256}\n`);
299
+ for (const entry of entries) {
300
+ const states =
301
+ entry.installed
302
+ .map(
303
+ (item) =>
304
+ `${item.scope}:${item.loadable ? "loadable" : !item.enabled ? "disabled" : !item.effective ? "shadowed" : "unloadable"}`,
305
+ )
306
+ .join(", ") || "available";
307
+ process.stdout.write(
308
+ `${libraryEntryRef(entry)}\t${entry.version ?? ""}\t${states}\t${originLabel(entry.provenance)}\t${entry.description}\n`,
309
+ );
310
+ }
311
+ for (const diagnostic of discovery.diagnostics) process.stderr.write(`${diagnostic}\n`);
147
312
  }
148
- if (!parsed.yes) return 0;
149
- for (const plan of plans) installLibraryPlan(plan);
150
- if (!parsed.json) printOk(`installed ${plans.length} library entry or entries`);
151
313
  return 0;
152
314
  }
153
- if (parsed.command === "use") {
154
- const kind = parsed.positional[0] as LibraryEntryKind | undefined;
155
- const name = parsed.positional[1];
156
- if (!kind || !KINDS.has(kind) || !name || parsed.positional.length !== 2)
157
- throw new Error("library use requires a kind and name");
158
- // A skill is loaded by the operator from the Skills Hub, never by a CLI
159
- // verb, so the honest answer names where it lives and how to load it.
160
- const output =
161
- kind === "fleet"
162
- ? `clio-coder fleet run ${name}`
163
- : kind === "agent"
164
- ? `/run ${name}`
165
- : kind === "skill"
166
- ? `${libraryInstallPath({ kind, name })}\nload it from /skill in the TUI, or ask the model to call context(scope="skills")`
167
- : name;
168
- process.stdout.write(`${output}\n`);
315
+ if (parsed.command === "reload") {
316
+ if (parsed.positional.length) throw new Error("library reload takes no arguments");
317
+ const snapshot = reloadPluginResources(options.cwd);
318
+ if (parsed.json) emit(snapshot);
319
+ else printOk("library refreshed for this process; use /library reload in an active session");
320
+ return 0;
321
+ }
322
+ if (parsed.command === "sync" || parsed.command === "push") {
323
+ if (parsed.positional.length) throw new Error(`library ${parsed.command} takes no arguments`);
324
+ await syncLibrary(parsed.command);
325
+ printOk(`library ${parsed.command} complete`);
169
326
  return 0;
170
327
  }
171
328
  if (parsed.command === "remote") {
172
- if (parsed.positional[0] !== "confirm" || !parsed.positional[1] || parsed.positional.length !== 2)
329
+ if (parsed.positional.length !== 2 || parsed.positional[0] !== "confirm")
173
330
  throw new Error("library remote confirm requires a URL");
174
- confirmLibraryRemote(parsed.positional[1]);
331
+ confirmLibraryRemote(parsed.positional[1] as string);
175
332
  printOk("confirmed library remote");
176
333
  return 0;
177
334
  }
178
- if (parsed.command === "sync" || parsed.command === "push") {
179
- await syncLibrary(parsed.command);
180
- printOk(`library ${parsed.command} complete`);
335
+ const ref = parsed.positional[0];
336
+ if (parsed.command === "drift" && !ref) {
337
+ const results = listInstalledPlugins(options.cwd, { ...options, all: true }).map((item) => ({
338
+ id: item.id,
339
+ kind: item.kind ?? "plugin",
340
+ scope: item.scope,
341
+ ...libraryEntryDrift({ kind: item.kind ?? "plugin", name: item.id }, { ...options, scope: item.scope }),
342
+ }));
343
+ emit({ results });
344
+ return results.some((item) => item.status !== "clean") ? 1 : 0;
345
+ }
346
+ if (!ref || parsed.positional.length !== 1)
347
+ throw new Error(`library ${parsed.command} requires one path or package reference`);
348
+ if (parsed.command === "register") {
349
+ const entry = registerLibraryPackage(ref, { ...options, force: parsed.force });
350
+ emit({ ok: true, entry });
181
351
  return 0;
182
352
  }
353
+ if (parsed.command === "validate") {
354
+ const local = pluginLocalPath(ref);
355
+ if (local.endsWith("SKILL.md"))
356
+ return (await import("./skills.js")).runSkillsRead(["validate", local, ...(parsed.json ? ["--json"] : [])]);
357
+ const packageRoot = existsSync(local) && statSync(local).isFile() ? path.dirname(local) : local;
358
+ const { validateLibraryPackage } = await import("../domains/resources/library-validation.js");
359
+ const result = validateLibraryPackage(packageRoot, options);
360
+ if (parsed.json) emit(result);
361
+ else {
362
+ const name = result.manifest?.name ?? path.basename(packageRoot);
363
+ if (result.valid) {
364
+ const count = result.validation.resources.length;
365
+ printOk(`package ${name} is valid (${count} resource${count === 1 ? "" : "s"} checked)`);
366
+ } else {
367
+ if (!result.manifestValid) {
368
+ printError(`package ${name} manifest is invalid`);
369
+ for (const diag of result.diagnostics) {
370
+ process.stderr.write(` [manifest] ${diag.message}${diag.path ? ` (${diag.path})` : ""}\n`);
371
+ }
372
+ }
373
+ if (!result.validation.contentValid) {
374
+ printError(`package ${name} authored content is invalid`);
375
+ for (const diag of result.validation.diagnostics) {
376
+ process.stderr.write(` [${diag.code}] ${diag.message}${diag.path ? ` (${diag.path})` : ""}\n`);
377
+ }
378
+ }
379
+ }
380
+ }
381
+ return result.valid ? 0 : 1;
382
+ }
383
+ if (parsed.command === "inspect") {
384
+ const local = pluginLocalPath(ref);
385
+ if (existsSync(local)) {
386
+ const candidate = readPluginManifest(local);
387
+ emit(candidate);
388
+ return candidate.valid ? 0 : 1;
389
+ }
390
+ // Precedence is a cross-scope fact: list both scopes first, then narrow
391
+ // to the requested scope, so a user copy shadowed by a project copy never
392
+ // reads as effective.
393
+ const copies = listInstalledPlugins(options.cwd, { all: true })
394
+ .filter((item) => !parsed.scope || item.scope === parsed.scope)
395
+ .filter((item) => (ref.includes(":") ? `${item.kind ?? "plugin"}:${item.id}` === ref : item.id === ref))
396
+ .sort((a, b) => Number(b.scope === "project") - Number(a.scope === "project"));
397
+ const installed = copies[0];
398
+ if (installed) {
399
+ // Existing fields stay as they are; `library` is the additive deeper read.
400
+ emit({ ...installed, library: inspectLibraryCopy(ref, { ...options, scope: installed.scope }) });
401
+ return installed.valid ? 0 : 1;
402
+ }
403
+ const entry = resolveLibraryPackage(ref, options);
404
+ const record = readLibraryInventory({
405
+ cwd: options.cwd,
406
+ ...(options.catalog ? { catalog: options.catalog } : {}),
407
+ include: { resources: false, copies: false },
408
+ ref: libraryEntryRef(entry),
409
+ }).packages[0];
410
+ const plan = planLibraryInstall(entry, options);
411
+ try {
412
+ const candidate = readPluginManifest(plan.sourceRoot as string);
413
+ emit({
414
+ ...candidate,
415
+ ...(record
416
+ ? {
417
+ library: {
418
+ origin: record.origin,
419
+ ...(record.format ? { format: record.format } : {}),
420
+ ...(record.provides ? { provides: record.provides } : {}),
421
+ },
422
+ }
423
+ : {}),
424
+ });
425
+ return candidate.valid ? 0 : 1;
426
+ } finally {
427
+ releaseLibraryPlan(plan);
428
+ }
429
+ }
430
+ if (LIFECYCLE.includes(parsed.command as LibraryOperation)) {
431
+ const operation = parsed.command as LibraryOperation;
432
+ const plan = planLibraryLifecycle({
433
+ operation,
434
+ ref,
435
+ cwd: options.cwd,
436
+ ...(parsed.scope ? { scope: parsed.scope } : {}),
437
+ ...(options.catalog ? { catalog: options.catalog } : {}),
438
+ force: parsed.force,
439
+ withRequirements: parsed.withRequirements,
440
+ });
441
+ const apply = applyLibraryLifecycle(plan, { dryRun: parsed.dryRun });
442
+ const ok = apply.failed === 0 && (apply.dryRun || plan.applicable);
443
+ if (parsed.json) emit(lifecycleJson(operation, plan, apply, ok));
444
+ else {
445
+ for (const outcome of apply.outcomes) {
446
+ const step = plan.steps.find(
447
+ (item) => item.identity.ref === outcome.identity.ref && item.identity.scope === outcome.identity.scope,
448
+ );
449
+ const where = `${outcome.identity.ref} (${outcome.identity.scope})`;
450
+ if (outcome.status === "committed")
451
+ printOk(
452
+ `${verb(operation)} ${where}${step?.source ? ` at ${step.destination} (sha256 ${step.source.sha256})` : ""}${
453
+ outcome.recovery?.packageBackup ? `; recovery ${outcome.recovery.packageBackup}` : ""
454
+ }${outcome.error ? `; verification: ${outcome.error.message}` : ""}`,
455
+ );
456
+ else if (outcome.status === "unattempted")
457
+ process.stdout.write(
458
+ `${parsed.dryRun ? "planned" : "unattempted"} ${operation} ${where}${step?.refusal ? `: ${step.refusal}` : ""}\n`,
459
+ );
460
+ else
461
+ printError(`${operation} ${where} failed: ${outcome.error?.message ?? "unknown"}; ${outcome.error?.next ?? ""}`);
462
+ }
463
+ if (apply.committed)
464
+ process.stderr.write(
465
+ `refresh: ${apply.refresh.status}${"reason" in apply.refresh ? ` (${apply.refresh.reason})` : ""}\n`,
466
+ );
467
+ }
468
+ return ok ? 0 : 1;
469
+ }
470
+ const entry = resolveInstalledLibraryEntry(ref, options);
471
+ const scoped = { ...options, scope: entry.scope };
472
+ if (parsed.command === "pin") {
473
+ emit({ id: entry.name, ...pinLibraryEntry(entry, scoped) });
474
+ return 0;
475
+ }
476
+ if (parsed.command === "drift") {
477
+ const result = libraryEntryDrift(entry, scoped);
478
+ emit(result);
479
+ return result.status === "clean" ? 0 : 1;
480
+ }
183
481
  throw new Error(`unknown library command: ${parsed.command}`);
184
482
  } catch (error) {
185
483
  const message = error instanceof Error ? error.message : String(error);
186
- printError(message);
187
- if (parsed.json) process.stdout.write(`${JSON.stringify({ ok: false, error: message }, null, 2)}\n`);
484
+ if (parsed.json) emit({ ok: false, error: message });
485
+ else printError(message);
188
486
  return 1;
189
487
  }
190
488
  }
@@ -6,7 +6,7 @@ export interface DelayedManualCodeInput {
6
6
  }
7
7
 
8
8
  export function createDelayedManualCodeInput(
9
- rl: ReadlineInterface,
9
+ rl: Pick<ReadlineInterface, "question">,
10
10
  prompt: string,
11
11
  options?: { delayMs?: number },
12
12
  ): DelayedManualCodeInput {
package/src/cli/reset.ts CHANGED
@@ -372,6 +372,8 @@ export async function runResetCommand(argv: ReadonlyArray<string>): Promise<numb
372
372
  presenter.finish();
373
373
  return 1;
374
374
  }
375
+ if (args.config || args.all) presenter.commandAdvice("Set up a model again:", "clio-coder configure");
376
+ else if (args.auth) presenter.commandAdvice("Reconnect your providers:", "clio-coder configure --section targets");
375
377
 
376
378
  presenter.done("Done");
377
379
  return 0;