@iowarp/clio-coder 0.4.6 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (657) hide show
  1. package/.claude-plugin/marketplace.json +283 -0
  2. package/CHANGELOG.md +50 -0
  3. package/CONTRIBUTING.md +102 -29
  4. package/NOTICE +8 -0
  5. package/README.md +37 -5
  6. package/dist/{acp-UVEVWSDL.js → acp-W3Y3TRHD.js} +12 -12
  7. package/dist/{agents-VWY37DTK.js → agents-J4ICNLQ3.js} +52 -52
  8. package/dist/assets/codewiki.json +1 -1
  9. package/dist/assets/tui-notices/get-east-asian-width-LICENSE +9 -0
  10. package/dist/assets/tui-notices/marked-LICENSE +44 -0
  11. package/dist/assets/tui-notices/pi-tui-LICENSE +21 -0
  12. package/dist/{auth-PCV2XQDV.js → auth-X2UJUMOC.js} +24 -24
  13. package/dist/{builtins-PD652MTK.js → builtins-XLXWWSRF.js} +6 -6
  14. package/dist/{chunk-DZK63TZJ.js → chunk-24S3DN22.js} +336 -612
  15. package/dist/{chunk-NTK3WTHM.js → chunk-24TOGHPO.js} +2 -2
  16. package/dist/{chunk-M6TAYK66.js → chunk-2O2LVQQK.js} +11 -4
  17. package/dist/{chunk-OQM5IVJY.js → chunk-34XHRVKG.js} +3 -3
  18. package/dist/{chunk-LY4N4TTL.js → chunk-3LXJOICS.js} +2 -2
  19. package/dist/{chunk-3BJGMT2D.js → chunk-3XE4NRLF.js} +1 -1
  20. package/dist/{chunk-N2OKBREN.js → chunk-4MFBBY2Z.js} +3 -3
  21. package/dist/{chunk-5VTJP36Q.js → chunk-4N2RZ4TO.js} +2 -2
  22. package/dist/{chunk-WNGF5AJX.js → chunk-4QKAITQT.js} +3 -3
  23. package/dist/chunk-4UHVS5T7.js +207 -0
  24. package/dist/{chunk-GLYBJ4RQ.js → chunk-5AJPUR72.js} +6 -6
  25. package/dist/{chunk-5CY4Q6QI.js → chunk-5EQO5NWP.js} +105 -3
  26. package/dist/{chunk-6HAO6X5B.js → chunk-65BGHOUR.js} +8 -5
  27. package/dist/{chunk-6VRRJT7L.js → chunk-6CA2BHOR.js} +2 -2
  28. package/dist/{chunk-HL26ADLH.js → chunk-6CB2IL4N.js} +2 -1
  29. package/dist/{chunk-E7RF4KBO.js → chunk-6LRLOJHQ.js} +3 -3
  30. package/dist/{chunk-HXHFDHB6.js → chunk-6TAATXXH.js} +6 -6
  31. package/dist/{chunk-P6M7RKMI.js → chunk-6YHPAAZR.js} +3 -3
  32. package/dist/{chunk-5QRX7SLS.js → chunk-7EEGBKV4.js} +7 -7
  33. package/dist/{chunk-BS4GAMUB.js → chunk-A67NR5AT.js} +2 -2
  34. package/dist/{chunk-WJIMKGD6.js → chunk-BAU36233.js} +8 -8
  35. package/dist/{chunk-PZN2LQY6.js → chunk-BO4XV5VX.js} +4 -4
  36. package/dist/{chunk-I2K2NCZQ.js → chunk-BQQ5MXUC.js} +6 -6
  37. package/dist/{chunk-X3BI7HTV.js → chunk-C3G5PNUO.js} +21 -21
  38. package/dist/{chunk-SRZOW5L2.js → chunk-C6GEXX4L.js} +1 -1
  39. package/dist/{chunk-6RYDAVQT.js → chunk-CE64C5K5.js} +219 -64
  40. package/dist/chunk-CP3HIR5H.js +2119 -0
  41. package/dist/{chunk-BBV5TKE6.js → chunk-CPXGJI2A.js} +2 -2
  42. package/dist/{chunk-IGLVVNEG.js → chunk-CULVKYTK.js} +4 -4
  43. package/dist/{chunk-DXLUVUD4.js → chunk-D2T66PDV.js} +5 -5
  44. package/dist/{chunk-NF3BK5WR.js → chunk-DACXIVVF.js} +5 -5
  45. package/dist/{chunk-IKRWLEDA.js → chunk-DLIYANB7.js} +20 -15
  46. package/dist/{chunk-RGZNQ5CT.js → chunk-DO7M3LSX.js} +9 -9
  47. package/dist/{chunk-2QPI3TR3.js → chunk-DVJL77SO.js} +2 -2
  48. package/dist/{chunk-ODUTYZIU.js → chunk-EUEXGXXR.js} +5 -5
  49. package/dist/{chunk-WKUYQBCG.js → chunk-EUZRMP4Y.js} +18 -16
  50. package/dist/{chunk-JMPL7NUB.js → chunk-G4LGUTOE.js} +4 -4
  51. package/dist/{chunk-CBSKDFWL.js → chunk-GEVQNST4.js} +2 -2
  52. package/dist/{chunk-NNWJYUNO.js → chunk-GFQ7P2UF.js} +7 -7
  53. package/dist/{chunk-SXQKNKRA.js → chunk-GI5RRMAH.js} +14 -14
  54. package/dist/{chunk-HPTJF6DG.js → chunk-GVZFCJHE.js} +336 -83
  55. package/dist/{chunk-ACCKVSHU.js → chunk-GXIWHXDB.js} +3 -3
  56. package/dist/{chunk-LUL5Z66S.js → chunk-HOX4YZ2K.js} +6 -5
  57. package/dist/chunk-HRAKUPIH.js +57 -0
  58. package/dist/{chunk-F5Z7EWMN.js → chunk-IJMW64DX.js} +50 -50
  59. package/dist/{chunk-QNWRHOMF.js → chunk-IMOD2YPV.js} +16 -9
  60. package/dist/{chunk-HZ2T2YED.js → chunk-IQCNVLO6.js} +28 -8
  61. package/dist/{chunk-HZFBVU5X.js → chunk-ISNCCX42.js} +8 -8
  62. package/dist/{chunk-7JSSKXG2.js → chunk-IZYTT3CD.js} +7 -3
  63. package/dist/chunk-KKEYGFX4.js +915 -0
  64. package/dist/{chunk-HHVJNVUJ.js → chunk-KS7ETA3P.js} +2 -2
  65. package/dist/{chunk-BLTEAUCB.js → chunk-L3Z5ANCV.js} +7 -7
  66. package/dist/{chunk-4VMV6OS6.js → chunk-LBFQMYS3.js} +2 -2
  67. package/dist/{chunk-URBGEOH3.js → chunk-M6Z2V6YU.js} +5 -5
  68. package/dist/{chunk-BT7HGDOX.js → chunk-MBJO5VNZ.js} +12 -12
  69. package/dist/chunk-MNQN3X6Y.js +595 -0
  70. package/dist/{chunk-3QKXHCGS.js → chunk-MZHXENL7.js} +5 -5
  71. package/dist/chunk-MZNWZUJM.js +1801 -0
  72. package/dist/{chunk-7YJWEF2L.js → chunk-N37QC5FV.js} +5 -5
  73. package/dist/{chunk-TJFDL26W.js → chunk-NCCQ6DVS.js} +7 -7
  74. package/dist/{chunk-P5JMBPDJ.js → chunk-NO7J45X6.js} +162 -47
  75. package/dist/chunk-OH3YYA3B.js +15 -0
  76. package/dist/{chunk-22PQ4TX4.js → chunk-P4DL2LM5.js} +16 -77
  77. package/dist/{chunk-LIN2K3EL.js → chunk-PFLOULP3.js} +4 -4
  78. package/dist/{chunk-QXFBABFJ.js → chunk-QKWL7SYE.js} +11 -11
  79. package/dist/chunk-RFCKPS2V.js +26 -0
  80. package/dist/{chunk-ZS43Y2FT.js → chunk-RTLNFZMD.js} +12 -4
  81. package/dist/{chunk-U7H5WRG5.js → chunk-RXFPB32E.js} +8 -6
  82. package/dist/{chunk-Q7NNUHQV.js → chunk-SEDI5K5B.js} +16 -16
  83. package/dist/{chunk-WV6TDAPN.js → chunk-SELG4SUR.js} +7 -7
  84. package/dist/{chunk-3WBALRQH.js → chunk-SER7RRAE.js} +27 -832
  85. package/dist/{chunk-K2HL3GBL.js → chunk-T4TY5GG3.js} +165 -15
  86. package/dist/chunk-T7QQBNLH.js +691 -0
  87. package/dist/{chunk-6OII3LOK.js → chunk-TLTGZTXI.js} +3 -3
  88. package/dist/chunk-TZ6UVP2H.js +637 -0
  89. package/dist/{chunk-3JLFK5MW.js → chunk-TZHN5ITX.js} +13 -41
  90. package/dist/{chunk-VANN3GDP.js → chunk-U3TPUXOQ.js} +399 -234
  91. package/dist/{chunk-VHMX7SXF.js → chunk-UA3W4FGC.js} +6 -6
  92. package/dist/{chunk-3O2ZAUGQ.js → chunk-UA6W4XFJ.js} +2 -2
  93. package/dist/chunk-UWD3JD5X.js +709 -0
  94. package/dist/chunk-V4ZKOKRB.js +13433 -0
  95. package/dist/{chunk-NC4KV7EL.js → chunk-VCRVEDUC.js} +5 -5
  96. package/dist/{chunk-4DU2TVI4.js → chunk-VMATUZB6.js} +12 -10
  97. package/dist/{chunk-J2FYEQ5L.js → chunk-VTYHHQ57.js} +2 -2
  98. package/dist/chunk-WB7POC6M.js +891 -0
  99. package/dist/{chunk-3HQVBIKD.js → chunk-WBVKKTUT.js} +2 -2
  100. package/dist/{chunk-EHOSNVVM.js → chunk-WLHX3MM5.js} +6 -2
  101. package/dist/{chunk-24T2YZ7A.js → chunk-WN552PKN.js} +553 -298
  102. package/dist/{chunk-4U4TKZFR.js → chunk-WT5TRMO4.js} +51 -26
  103. package/dist/{chunk-XWMSPJYN.js → chunk-WURGVOZJ.js} +56 -12
  104. package/dist/{chunk-7WUZEB2M.js → chunk-XR3XJN2M.js} +2 -2
  105. package/dist/chunk-XW2UZICE.js +372 -0
  106. package/dist/{chunk-2AKYFREM.js → chunk-XZ6UFQ52.js} +11 -11
  107. package/dist/chunk-Y3JU5RPK.js +8 -0
  108. package/dist/chunk-YKRJTYNP.js +1143 -0
  109. package/dist/{chunk-PWWSIB2A.js → chunk-ZGIGW4ZG.js} +5 -5
  110. package/dist/cli/index.js +34 -36
  111. package/dist/{clio-QQCMTUZE.js → clio-L2P7S2R2.js} +9 -9
  112. package/dist/{code-nav-GUPM6766.js → code-nav-B5LNX4KU.js} +25 -25
  113. package/dist/{components-TNIKXCBH.js → components-63MMQKUT.js} +6 -6
  114. package/dist/{config-IIM7YOD3.js → config-YXARKGTX.js} +70 -67
  115. package/dist/{configure-4ZM5HWJX.js → configure-LMVQJ46J.js} +47 -35
  116. package/dist/{context-OL5P3HEP.js → context-7HJEWTTP.js} +87 -44
  117. package/dist/{context-44BZLJ3J.js → context-XSZKKFBW.js} +14 -14
  118. package/dist/{context-AIDVQKMW.js → context-YG2LZDYZ.js} +60 -58
  119. package/dist/{context-clear-OQV76MYP.js → context-clear-AC5NXHM2.js} +57 -55
  120. package/dist/{context-index-HP2JFUWA.js → context-index-KKTPRV5G.js} +3 -3
  121. package/dist/{context-map-INTXD54D.js → context-map-T7ROR5D5.js} +4 -4
  122. package/dist/{context-working-set-ZUW3EGLS.js → context-working-set-F4Q4J3NS.js} +12 -10
  123. package/dist/{detail-UXPWRANG.js → detail-H73BEF2N.js} +58 -56
  124. package/dist/{dispatch-runner-P3ZW6G77.js → dispatch-runner-3RY5FSJC.js} +74 -72
  125. package/dist/{doctor-JJVGPZWT.js → doctor-EQYJOGUG.js} +44 -30
  126. package/dist/{eval-V2RTN3UH.js → eval-4P7O6CCE.js} +109 -46
  127. package/dist/{evidence-35PYWGSO.js → evidence-D6GUSYJW.js} +57 -55
  128. package/dist/{evidence-CIGGKI6J.js → evidence-O76QF7TZ.js} +62 -59
  129. package/dist/{evolve-33SM3NJP.js → evolve-H47BCETS.js} +58 -56
  130. package/dist/{extensions-YVRHX6ZI.js → extensions-NNL3ZOCU.js} +98 -20
  131. package/dist/{fleet-LFO7SIPC.js → fleet-KMNS6NOM.js} +106 -99
  132. package/dist/{fleet-commands-RLK72GU3.js → fleet-commands-DOWSYCBX.js} +14 -14
  133. package/dist/{fleet-decisions-3SBSCTCW.js → fleet-decisions-S3PTZV2D.js} +9 -9
  134. package/dist/{fleet-graph-JZIBCGMW.js → fleet-graph-F2DE2TME.js} +26 -24
  135. package/dist/{fleet-inspect-2L5YGGZJ.js → fleet-inspect-EN2Q6IVB.js} +60 -57
  136. package/dist/{fleet-preflight-QRSHIIDE.js → fleet-preflight-FRLETDD3.js} +3 -3
  137. package/dist/{fleet-validate-LIAVKDUU.js → fleet-validate-B2XDLS57.js} +28 -29
  138. package/dist/{fleet-verify-JIK3OQZR.js → fleet-verify-4JKUWGJ7.js} +57 -55
  139. package/dist/{fleet-view-IWHYGQKK.js → fleet-view-BHJFW26B.js} +60 -57
  140. package/dist/{init-NJEDOTQW.js → init-XAT5N5YM.js} +79 -74
  141. package/dist/interop-FVECHFKG.js +246 -0
  142. package/dist/{inventory-74UL7UHU.js → inventory-7KFQGLCV.js} +60 -57
  143. package/dist/library-NY2XOT75.js +492 -0
  144. package/dist/library-QAPAO23R.js +306 -0
  145. package/dist/library-import-5Y6MAS3R.js +183 -0
  146. package/dist/library-inventory-JT6HWITQ.js +56 -0
  147. package/dist/library-validation-EQUH25DC.js +42 -0
  148. package/dist/{memory-I76I5VUH.js → memory-DYVTTCP6.js} +58 -56
  149. package/dist/{models-D4YDIQZQ.js → models-MASFJ6Y2.js} +48 -36
  150. package/dist/{monitor-NKVD55HX.js → monitor-YMP4NXJJ.js} +64 -61
  151. package/dist/{orchestrator-I6OATVPK.js → orchestrator-AFQRRTEI.js} +3685 -1841
  152. package/dist/{panes-7BTYH3XQ.js → panes-D3Y2KFG5.js} +4 -4
  153. package/dist/{panes-WPOMEMRH.js → panes-NICTHQCV.js} +7 -7
  154. package/dist/{paths-J3KN7UAO.js → paths-PSFAUIGO.js} +5 -5
  155. package/dist/{preload-EJAWJEIO.js → preload-5Q7VXRFJ.js} +57 -55
  156. package/dist/{reset-4XMQKDNZ.js → reset-7NKZK7JN.js} +9 -9
  157. package/dist/{resources-TVYVXK3Q.js → resources-NILSIZAT.js} +94 -38
  158. package/dist/{run-OWQNNSJU.js → run-BPZGEBZV.js} +121 -105
  159. package/dist/{share-NPZZMUXG.js → share-EZ6ERBMH.js} +31 -28
  160. package/dist/skills-BTVVNYVM.js +100 -0
  161. package/dist/{skills-eval-J5TCKSJA.js → skills-eval-UY34MNK7.js} +110 -72
  162. package/dist/{skills-inventory-7II4DM57.js → skills-inventory-JDHSIA7I.js} +30 -25
  163. package/dist/{slash-commands-MDSDSWYF.js → slash-commands-K4FNQ2AT.js} +49 -46
  164. package/dist/{steer-S7D7IKPU.js → steer-2B3EQGFH.js} +4 -4
  165. package/dist/{support-5VAEC32W.js → support-L2SOL3IE.js} +7 -7
  166. package/dist/{targets-KILZEOCE.js → targets-44VKGFLN.js} +64 -58
  167. package/dist/{tasks-R6P6OV22.js → tasks-3KODKFU7.js} +12 -12
  168. package/dist/{terminal-lease-LZCG2KN3.js → terminal-lease-LXA7MMPO.js} +32 -19
  169. package/dist/{tools-6OCQ6SVB.js → tools-3UB7TEVR.js} +7 -7
  170. package/dist/{trace-JHLXWUMN.js → trace-TAMIU4OJ.js} +5 -4
  171. package/dist/{tui-primitives-RCY2HN7G.js → tui-primitives-A6MUW32V.js} +3 -2
  172. package/dist/{uninstall-FXYMFFRT.js → uninstall-QYVRPEM4.js} +9 -9
  173. package/dist/{upgrade-D2OZH6IQ.js → upgrade-7PMKM2JH.js} +15 -16
  174. package/dist/{usage-PIASNUS4.js → usage-6EQV7EQK.js} +70 -67
  175. package/dist/{verifiers-LTHUY2PX.js → verifiers-JLITWSHU.js} +15 -15
  176. package/dist/{verify-HYF7KBVE.js → verify-T7NAEVIG.js} +13 -13
  177. package/dist/{web-fetch-MQN4FH3X.js → web-fetch-W4TNW4Q7.js} +4 -4
  178. package/dist/{wiki-generate-RK7JQ5NP.js → wiki-generate-T2TJQJUA.js} +81 -76
  179. package/dist/{with-panes-OFTNAR4Y.js → with-panes-CHFC7HGI.js} +4 -4
  180. package/dist/worker/entry.js +283 -76
  181. package/docs/README.md +43 -0
  182. package/docs/architecture/architecture.md +8 -7
  183. package/docs/architecture/artifact-versions.md +3 -3
  184. package/docs/architecture/context-engine.md +35 -1
  185. package/docs/architecture/library.md +32 -0
  186. package/docs/architecture/middleware-and-components.md +1 -1
  187. package/docs/architecture/model-catalog.md +21 -1
  188. package/docs/architecture/pi-boundary.md +18 -0
  189. package/docs/architecture/prompt-envelope-and-tools.md +5 -5
  190. package/docs/architecture/safety-model.md +21 -2
  191. package/docs/architecture/session-lifecycle.md +12 -1
  192. package/docs/architecture/tui-design.md +108 -9
  193. package/docs/architecture/worker-context.md +106 -0
  194. package/docs/guide/authoring-plugins.md +160 -0
  195. package/docs/guide/built-in-agents.md +5 -5
  196. package/docs/guide/commands-and-modes.md +161 -56
  197. package/docs/guide/configuration-and-targets.md +1 -1
  198. package/docs/guide/configuration-reference.md +27 -34
  199. package/docs/guide/environment-variables.md +2 -2
  200. package/docs/guide/exit-codes-and-output.md +1 -1
  201. package/docs/guide/extensions-and-sharing.md +93 -53
  202. package/docs/guide/fleet-dispatch.md +31 -4
  203. package/docs/guide/glossary.md +1 -1
  204. package/docs/guide/harness-extensions.md +291 -0
  205. package/docs/guide/installation-and-lifecycle.md +9 -9
  206. package/docs/guide/interop.md +243 -0
  207. package/docs/guide/panes-and-files.md +3 -3
  208. package/docs/guide/plugins.md +80 -0
  209. package/docs/guide/resource-library.md +111 -45
  210. package/docs/guide/skills-marketplace.md +35 -72
  211. package/docs/guide/tool-usage.md +19 -7
  212. package/docs/guide/troubleshooting.md +1 -1
  213. package/docs/process/development-pipeline.md +14 -14
  214. package/docs/process/documentation-coverage.md +28 -1
  215. package/docs/process/documentation-guide.md +15 -7
  216. package/docs/process/eval-runner.md +8 -3
  217. package/docs/process/performance-methodology.md +1 -1
  218. package/docs/process/release-cut-checklist.md +4 -0
  219. package/docs/process/scientific-validation.md +23 -0
  220. package/evals/scalar-decision-machinery.ts +1 -1
  221. package/examples/extensions/README.md +67 -0
  222. package/examples/extensions/lab-status/clio-coder-extension.json +14 -0
  223. package/examples/extensions/lab-status/extension.mjs +68 -0
  224. package/examples/extensions/lab-status/jobs.synthetic.json +9 -0
  225. package/examples/extensions/measurements/clio-coder-extension.json +28 -0
  226. package/examples/extensions/measurements/summarize.cjs +23 -0
  227. package/library/README.md +109 -0
  228. package/library/_authoring/templates/agent/README.md +28 -0
  229. package/library/_authoring/templates/agent/agents/benchmark-scout.md +30 -0
  230. package/library/_authoring/templates/agent/plugin.json +23 -0
  231. package/library/_authoring/templates/fleet/README.md +29 -0
  232. package/library/_authoring/templates/fleet/fleets/pipeline-review.md +31 -0
  233. package/library/_authoring/templates/fleet/plugin.json +23 -0
  234. package/library/_authoring/templates/plugin/README.md +37 -0
  235. package/library/_authoring/templates/plugin/agents/data-curator.md +31 -0
  236. package/library/_authoring/templates/plugin/assets/curation-guide.md +22 -0
  237. package/library/_authoring/templates/plugin/plugin.json +42 -0
  238. package/library/_authoring/templates/plugin/prompts/inspect-dataset.md +15 -0
  239. package/library/_authoring/templates/plugin/skills/dataset-curation/SKILL.md +36 -0
  240. package/library/_authoring/templates/plugin/skills/dataset-curation/evals.md +17 -0
  241. package/library/_authoring/templates/prompt/README.md +28 -0
  242. package/library/_authoring/templates/prompt/plugin.json +23 -0
  243. package/library/_authoring/templates/prompt/prompts/paper-summary.md +26 -0
  244. package/library/_authoring/templates/skill/README.md +24 -0
  245. package/library/_authoring/templates/skill/SKILL.md +39 -0
  246. package/library/_authoring/templates/skill/evals.md +30 -0
  247. package/library/_authoring/templates/skill/plugin.json +23 -0
  248. package/library/agents/README.md +7 -0
  249. package/library/fleets/README.md +7 -0
  250. package/library/plugins/materio/README.md +137 -0
  251. package/library/plugins/materio/ai.iowarp.clio/agents/materio-lab-definer.md +208 -0
  252. package/library/plugins/materio/ai.iowarp.clio/agents/materio-literature-reviewer.md +308 -0
  253. package/library/plugins/materio/ai.iowarp.clio/agents/materio-research-explorer.md +249 -0
  254. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-executor.md +416 -0
  255. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-verifier.md +60 -0
  256. package/library/plugins/materio/ai.iowarp.clio/agents/materio-workflow-planner.md +238 -0
  257. package/library/plugins/materio/ai.iowarp.clio/fleets/materio-execute-task.md +50 -0
  258. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/add-task.md +66 -0
  259. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/archive-task.md +65 -0
  260. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/checkpoint.md +26 -0
  261. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-research-tasks.md +230 -0
  262. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-virtual-lab.md +181 -0
  263. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/execute-task.md +292 -0
  264. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/help.md +129 -0
  265. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/identify-research.md +206 -0
  266. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/literature-review.md +201 -0
  267. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/pause-research.md +12 -0
  268. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/progress.md +105 -0
  269. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/remove-task.md +63 -0
  270. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/resume-research.md +64 -0
  271. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/settings.md +16 -0
  272. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/status.md +92 -0
  273. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/upload-data.md +104 -0
  274. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/wtfp.md +145 -0
  275. package/library/plugins/materio/ai.iowarp.clio/references/execution.md +56 -0
  276. package/library/plugins/materio/ai.iowarp.portability/provenance.json +9 -0
  277. package/library/plugins/materio/assets/actions/add-task.md +86 -0
  278. package/library/plugins/materio/assets/actions/archive-task.md +84 -0
  279. package/library/plugins/materio/assets/actions/checkpoint.md +47 -0
  280. package/library/plugins/materio/assets/actions/define-research-tasks.md +228 -0
  281. package/library/plugins/materio/assets/actions/define-virtual-lab.md +179 -0
  282. package/library/plugins/materio/assets/actions/execute-task.md +290 -0
  283. package/library/plugins/materio/assets/actions/help.md +140 -0
  284. package/library/plugins/materio/assets/actions/identify-research.md +204 -0
  285. package/library/plugins/materio/assets/actions/literature-review.md +199 -0
  286. package/library/plugins/materio/assets/actions/pause-research.md +34 -0
  287. package/library/plugins/materio/assets/actions/progress.md +125 -0
  288. package/library/plugins/materio/assets/actions/remove-task.md +82 -0
  289. package/library/plugins/materio/assets/actions/resume-research.md +84 -0
  290. package/library/plugins/materio/assets/actions/settings.md +38 -0
  291. package/library/plugins/materio/assets/actions/status.md +112 -0
  292. package/library/plugins/materio/assets/actions/upload-data.md +123 -0
  293. package/library/plugins/materio/assets/actions/wtfp.md +179 -0
  294. package/library/plugins/materio/assets/references/research-domains.md +134 -0
  295. package/library/plugins/materio/assets/references/research-policy.md +77 -0
  296. package/library/plugins/materio/assets/references/traditional-workflows.md +146 -0
  297. package/library/plugins/materio/assets/scripts/check_physics.py +271 -0
  298. package/library/plugins/materio/assets/scripts/check_scripts.py +248 -0
  299. package/library/plugins/materio/assets/scripts/project_plugin.py +165 -0
  300. package/library/plugins/materio/assets/scripts/research_state.py +400 -0
  301. package/library/plugins/materio/assets/scripts/verify_citations.py +616 -0
  302. package/library/plugins/materio/assets/templates/RESEARCH.md +39 -0
  303. package/library/plugins/materio/assets/templates/VIRTUAL-LAB.md +120 -0
  304. package/library/plugins/materio/assets/templates/WORKFLOW.md +42 -0
  305. package/library/plugins/materio/assets/templates/config.json +5 -0
  306. package/library/plugins/materio/evals/scripts.yaml +29 -0
  307. package/library/plugins/materio/plugin.json +530 -0
  308. package/library/plugins/materio/skills/materio-lab-definer/SKILL.md +74 -0
  309. package/library/plugins/materio/skills/materio-literature-reviewer/SKILL.md +64 -0
  310. package/library/plugins/materio/skills/materio-research-explorer/SKILL.md +74 -0
  311. package/library/plugins/materio/skills/materio-task-executor/SKILL.md +214 -0
  312. package/library/plugins/materio/skills/materio-task-verifier/SKILL.md +46 -0
  313. package/library/plugins/materio/skills/materio-workflow-planner/SKILL.md +79 -0
  314. package/library/plugins/materio/tests/test_check_physics.py +139 -0
  315. package/library/plugins/materio/tests/test_check_scripts.py +140 -0
  316. package/library/plugins/materio/tests/test_research_state.py +291 -0
  317. package/library/plugins/materio/tests/test_verify_citations.py +337 -0
  318. package/library/prompts/README.md +7 -0
  319. package/library/registry.yaml +921 -0
  320. package/library/skills/README.md +120 -0
  321. package/{skills → library/skills}/coding/ast-grep/SKILL.md +1 -1
  322. package/{skills → library/skills}/coding/ast-grep/evals.md +1 -1
  323. package/library/skills/coding/ast-grep/plugin.json +23 -0
  324. package/{skills → library/skills}/coding/coding-standards/SKILL.md +1 -1
  325. package/{skills → library/skills}/coding/coding-standards/evals.md +1 -1
  326. package/library/skills/coding/coding-standards/plugin.json +23 -0
  327. package/{skills → library/skills}/coding/prototype/SKILL.md +1 -1
  328. package/{skills → library/skills}/coding/prototype/evals.md +1 -1
  329. package/library/skills/coding/prototype/plugin.json +23 -0
  330. package/{skills → library/skills}/coding/tdd/SKILL.md +1 -1
  331. package/{skills → library/skills}/coding/tdd/evals.md +1 -1
  332. package/library/skills/coding/tdd/plugin.json +23 -0
  333. package/{skills → library/skills}/context/context-handoff/SKILL.md +1 -1
  334. package/{skills → library/skills}/context/context-handoff/evals.md +1 -1
  335. package/library/skills/context/context-handoff/plugin.json +23 -0
  336. package/{skills → library/skills}/context/context-prime/SKILL.md +1 -1
  337. package/{skills → library/skills}/context/context-prime/evals.md +1 -1
  338. package/library/skills/context/context-prime/plugin.json +23 -0
  339. package/{skills → library/skills}/git/branch-closeout/SKILL.md +1 -1
  340. package/library/skills/git/branch-closeout/plugin.json +23 -0
  341. package/{skills → library/skills}/git/file-ticket/SKILL.md +1 -1
  342. package/library/skills/git/file-ticket/plugin.json +23 -0
  343. package/{skills → library/skills}/git/fix-issue/SKILL.md +1 -1
  344. package/library/skills/git/fix-issue/plugin.json +23 -0
  345. package/{skills → library/skills}/git/resolve-merge-conflicts/SKILL.md +1 -1
  346. package/{skills → library/skills}/git/resolve-merge-conflicts/evals.md +1 -1
  347. package/library/skills/git/resolve-merge-conflicts/plugin.json +23 -0
  348. package/{skills → library/skills}/git/ship/SKILL.md +1 -1
  349. package/library/skills/git/ship/plugin.json +23 -0
  350. package/{skills → library/skills}/git/worktree-create/SKILL.md +1 -1
  351. package/library/skills/git/worktree-create/plugin.json +23 -0
  352. package/{skills → library/skills}/git/worktree-merge/SKILL.md +1 -1
  353. package/library/skills/git/worktree-merge/plugin.json +23 -0
  354. package/{skills → library/skills}/meta/clio-coder-dev/SKILL.md +1 -1
  355. package/{skills → library/skills}/meta/clio-coder-dev/evals.md +1 -1
  356. package/library/skills/meta/clio-coder-dev/plugin.json +23 -0
  357. package/{skills → library/skills}/meta/clio-coder-test/SKILL.md +1 -1
  358. package/{skills → library/skills}/meta/clio-coder-test/evals.md +1 -1
  359. package/library/skills/meta/clio-coder-test/plugin.json +23 -0
  360. package/{skills → library/skills}/meta/credentials/SKILL.md +1 -1
  361. package/{skills → library/skills}/meta/credentials/evals.md +1 -1
  362. package/library/skills/meta/credentials/plugin.json +23 -0
  363. package/library/skills/meta/find-skills/SKILL.md +85 -0
  364. package/library/skills/meta/find-skills/evals.md +65 -0
  365. package/library/skills/meta/find-skills/plugin.json +23 -0
  366. package/{skills → library/skills}/meta/herdr/SKILL.md +1 -1
  367. package/{skills → library/skills}/meta/herdr/evals.md +1 -1
  368. package/library/skills/meta/herdr/plugin.json +23 -0
  369. package/{skills → library/skills}/meta/skill-craft/SKILL.md +23 -9
  370. package/{skills → library/skills}/meta/skill-craft/evals.md +11 -3
  371. package/library/skills/meta/skill-craft/plugin.json +23 -0
  372. package/{skills → library/skills}/planning/archify/SKILL.md +13 -13
  373. package/library/skills/planning/archify/plugin.json +23 -0
  374. package/{skills → library/skills}/planning/architecture/SKILL.md +1 -1
  375. package/{skills → library/skills}/planning/architecture/evals.md +1 -1
  376. package/library/skills/planning/architecture/plugin.json +23 -0
  377. package/{skills → library/skills}/planning/backlog/SKILL.md +1 -1
  378. package/{skills → library/skills}/planning/backlog/evals.md +1 -1
  379. package/library/skills/planning/backlog/plugin.json +23 -0
  380. package/{skills → library/skills}/planning/prd/SKILL.md +1 -1
  381. package/{skills → library/skills}/planning/prd/evals.md +1 -1
  382. package/library/skills/planning/prd/plugin.json +23 -0
  383. package/{skills → library/skills}/planning/product-intent/SKILL.md +1 -1
  384. package/{skills → library/skills}/planning/product-intent/evals.md +1 -1
  385. package/library/skills/planning/product-intent/plugin.json +23 -0
  386. package/{skills → library/skills}/planning/tech-spec/SKILL.md +1 -1
  387. package/{skills → library/skills}/planning/tech-spec/evals.md +1 -1
  388. package/library/skills/planning/tech-spec/plugin.json +23 -0
  389. package/{skills → library/skills}/registry.yaml +7 -7
  390. package/{skills → library/skills}/remote.yaml +1 -1
  391. package/{skills → library/skills}/research/arxiv-literature/SKILL.md +1 -1
  392. package/{skills → library/skills}/research/arxiv-literature/evals.md +1 -1
  393. package/library/skills/research/arxiv-literature/plugin.json +23 -0
  394. package/{skills → library/skills}/research/experiment-protocol/SKILL.md +1 -1
  395. package/{skills → library/skills}/research/experiment-protocol/evals.md +1 -1
  396. package/library/skills/research/experiment-protocol/plugin.json +23 -0
  397. package/{skills → library/skills}/research/scientific-debugging/SKILL.md +1 -1
  398. package/{skills → library/skills}/research/scientific-debugging/evals.md +1 -1
  399. package/library/skills/research/scientific-debugging/plugin.json +23 -0
  400. package/{skills → library/skills}/research/scientific-modernization/SKILL.md +1 -1
  401. package/{skills → library/skills}/research/scientific-modernization/evals.md +1 -1
  402. package/library/skills/research/scientific-modernization/plugin.json +23 -0
  403. package/{skills → library/skills}/skill-marketplace.json +37 -37
  404. package/{skills → library/skills}/workflow/cut-it/SKILL.md +1 -1
  405. package/{skills → library/skills}/workflow/cut-it/evals.md +1 -1
  406. package/library/skills/workflow/cut-it/plugin.json +23 -0
  407. package/{skills → library/skills}/workflow/design-council/SKILL.md +1 -1
  408. package/{skills → library/skills}/workflow/design-council/evals.md +1 -1
  409. package/library/skills/workflow/design-council/plugin.json +23 -0
  410. package/{skills → library/skills}/workflow/grill-me/SKILL.md +1 -1
  411. package/{skills → library/skills}/workflow/grill-me/evals.md +1 -1
  412. package/library/skills/workflow/grill-me/plugin.json +23 -0
  413. package/{skills → library/skills}/workflow/workflow-distiller/SKILL.md +14 -11
  414. package/{skills → library/skills}/workflow/workflow-distiller/evals.md +14 -6
  415. package/library/skills/workflow/workflow-distiller/plugin.json +23 -0
  416. package/package.json +12 -5
  417. package/src/cli/agents.ts +1 -1
  418. package/src/cli/config-inspect.ts +1 -1
  419. package/src/cli/configure.ts +2 -2
  420. package/src/cli/eval.ts +40 -6
  421. package/src/cli/extensions.ts +74 -8
  422. package/src/cli/fleet-preflight.ts +2 -0
  423. package/src/cli/fleet.ts +2 -0
  424. package/src/cli/index.ts +1 -3
  425. package/src/cli/interop-inspect.ts +61 -33
  426. package/src/cli/interop.ts +79 -9
  427. package/src/cli/library-import.ts +139 -0
  428. package/src/cli/library.ts +418 -120
  429. package/src/cli/run.ts +26 -9
  430. package/src/cli/skills-eval.ts +43 -6
  431. package/src/cli/skills-inventory.ts +6 -2
  432. package/src/cli/skills.ts +44 -491
  433. package/src/core/bus-events.ts +5 -0
  434. package/src/core/defaults.ts +1 -1
  435. package/src/core/recent-models.ts +2 -2
  436. package/src/core/session-routing.ts +3 -3
  437. package/src/core/state-file-lock.ts +1 -1
  438. package/src/core/tool-names.ts +5 -0
  439. package/src/domains/agents/extension.ts +42 -6
  440. package/src/domains/agents/fleet-commands.ts +92 -1
  441. package/src/domains/agents/fleet-contract.ts +87 -19
  442. package/src/domains/agents/recipe.ts +5 -4
  443. package/src/domains/agents/registry.ts +80 -24
  444. package/src/domains/config/keybindings.ts +155 -95
  445. package/src/domains/context/worker/contract.ts +91 -0
  446. package/src/domains/context/worker/pressure.ts +120 -0
  447. package/src/domains/context/worker/recall.ts +62 -0
  448. package/src/domains/context/worker/select.ts +164 -0
  449. package/src/domains/context/worker/snapshot.ts +35 -0
  450. package/src/domains/context/worker/store.ts +16 -0
  451. package/src/domains/context/working-set/replay/synthetic.ts +2 -1
  452. package/src/domains/dispatch/active-route-planner.ts +2 -0
  453. package/src/domains/dispatch/backoff.ts +1 -0
  454. package/src/domains/dispatch/code-step.ts +12 -2
  455. package/src/domains/dispatch/contract.ts +3 -0
  456. package/src/domains/dispatch/execution-plan.ts +2 -0
  457. package/src/domains/dispatch/extension.ts +109 -27
  458. package/src/domains/dispatch/fleet-plan.ts +10 -0
  459. package/src/domains/dispatch/fleet-run.ts +1 -0
  460. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  461. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  462. package/src/domains/dispatch/state.ts +1 -0
  463. package/src/domains/dispatch/types.ts +5 -0
  464. package/src/domains/dispatch/validation.ts +12 -0
  465. package/src/domains/dispatch/workspace-checkpoint.ts +1 -1
  466. package/src/domains/evidence/failure-attribution.ts +1 -0
  467. package/src/domains/evidence/trust-status.ts +22 -3
  468. package/src/domains/extensions/command-schema.ts +145 -0
  469. package/src/domains/extensions/command-tools.ts +15 -0
  470. package/src/domains/extensions/compatibility.ts +7 -0
  471. package/src/domains/extensions/contract.ts +0 -4
  472. package/src/domains/extensions/discovery.ts +69 -205
  473. package/src/domains/extensions/extension.ts +0 -4
  474. package/src/domains/extensions/index.ts +1 -5
  475. package/src/domains/extensions/manager.ts +1 -6
  476. package/src/domains/extensions/operator-commands.ts +29 -0
  477. package/src/domains/extensions/operator-runtime.ts +483 -0
  478. package/src/domains/extensions/public-api.ts +53 -0
  479. package/src/domains/extensions/runtime-child.mjs +114 -0
  480. package/src/domains/extensions/runtime-process.ts +306 -0
  481. package/src/domains/extensions/runtime-schema.ts +146 -0
  482. package/src/domains/extensions/{resources.ts → snapshot-access.ts} +1 -17
  483. package/src/domains/extensions/snapshot.ts +4 -32
  484. package/src/domains/extensions/state.ts +5 -83
  485. package/src/domains/extensions/types.ts +33 -34
  486. package/src/domains/interop/adopt.ts +546 -0
  487. package/src/domains/interop/detect.ts +50 -12
  488. package/src/domains/interop/foreign.ts +554 -0
  489. package/src/domains/interop/import.ts +277 -0
  490. package/src/domains/interop/index.ts +24 -0
  491. package/src/domains/interop/install.ts +6 -0
  492. package/src/domains/interop/inventory.ts +351 -0
  493. package/src/domains/interop/projection.ts +360 -0
  494. package/src/domains/interop/registry.ts +106 -3
  495. package/src/domains/interop/types.ts +51 -0
  496. package/src/domains/lifecycle/migrations/index.ts +0 -2
  497. package/src/domains/lifecycle/naming-resources.ts +1 -1
  498. package/src/domains/middleware/marketplace-offer.ts +1 -1
  499. package/src/domains/mux/contract.ts +1 -1
  500. package/src/domains/plugins/catalog.ts +204 -0
  501. package/src/domains/plugins/contract.ts +24 -0
  502. package/src/domains/plugins/discovery.ts +316 -0
  503. package/src/domains/plugins/extension.ts +40 -0
  504. package/src/domains/plugins/index.ts +77 -0
  505. package/src/domains/plugins/integrity.ts +6 -0
  506. package/src/domains/plugins/manifest.ts +3 -0
  507. package/src/domains/plugins/resources.ts +102 -0
  508. package/src/domains/plugins/state.ts +753 -0
  509. package/src/domains/plugins/types.ts +217 -0
  510. package/src/domains/prompts/extension.ts +9 -2
  511. package/src/domains/prompts/fragments/operating/skills.md +10 -10
  512. package/src/domains/resources/common-loader.ts +9 -6
  513. package/src/domains/resources/index.ts +67 -0
  514. package/src/domains/resources/library-actions.ts +836 -0
  515. package/src/domains/resources/library-evals.ts +38 -0
  516. package/src/domains/resources/library-inventory.ts +1048 -0
  517. package/src/domains/resources/library-types.ts +50 -0
  518. package/src/domains/resources/library-validation.ts +634 -0
  519. package/src/domains/resources/library.ts +437 -156
  520. package/src/domains/resources/package-references.ts +66 -0
  521. package/src/domains/resources/prompts/loader.ts +75 -41
  522. package/src/domains/resources/skills/install.ts +2 -2
  523. package/src/domains/resources/skills/loader.ts +77 -22
  524. package/src/domains/resources/skills/marketplace.ts +48 -57
  525. package/src/domains/resources/skills/promotion.ts +2 -2
  526. package/src/domains/resources/skills/provenance-pin.ts +17 -4
  527. package/src/domains/safety/action-classifier.ts +2 -2
  528. package/src/domains/safety/default-path-policy.ts +3 -1
  529. package/src/domains/safety/policy-engine.ts +1 -1
  530. package/src/domains/safety/protected-artifacts.ts +21 -5
  531. package/src/domains/safety/skill-authority.ts +5 -2
  532. package/src/domains/share/archive.ts +1 -1
  533. package/src/engine/apis/openai-completions.ts +52 -2
  534. package/src/engine/notices/pi-tui-LICENSE +21 -0
  535. package/src/engine/tui.ts +3 -0
  536. package/src/engine/worker-runtime.ts +58 -14
  537. package/src/engine/worker-tools.ts +5 -0
  538. package/src/entry/orchestrator.ts +26 -5
  539. package/src/entry/plugin-reload.ts +18 -0
  540. package/src/interactive/application-controller.ts +67 -21
  541. package/src/interactive/chat-loop.ts +32 -5
  542. package/src/interactive/chat-panel.ts +5 -1
  543. package/src/interactive/clio-editor.ts +53 -21
  544. package/src/interactive/command-output.ts +56 -1
  545. package/src/interactive/editor-submit.ts +65 -28
  546. package/src/interactive/fleet-run-preview.ts +2 -0
  547. package/src/interactive/follow-up-queue-panel.ts +3 -3
  548. package/src/interactive/footer/dashboard.ts +4 -1
  549. package/src/interactive/footer/notifications.ts +2 -2
  550. package/src/interactive/footer/widgets.ts +2 -2
  551. package/src/interactive/interactive-application.ts +209 -21
  552. package/src/interactive/interactive-input-runtime.ts +254 -7
  553. package/src/interactive/interactive-presentation.ts +41 -12
  554. package/src/interactive/interactive-slash-runtime.ts +37 -8
  555. package/src/interactive/keybinding-manager.ts +156 -79
  556. package/src/interactive/keyboard-owner.ts +37 -0
  557. package/src/interactive/leader-key.ts +49 -102
  558. package/src/interactive/leader-menu.ts +45 -0
  559. package/src/interactive/overlay-ask-user-lifecycle.ts +9 -1
  560. package/src/interactive/overlay-frame.ts +15 -0
  561. package/src/interactive/overlay-key-routing.ts +46 -47
  562. package/src/interactive/overlay-lifecycle.ts +30 -15
  563. package/src/interactive/overlay-resource-openers.ts +56 -46
  564. package/src/interactive/overlays/ask-user.ts +630 -556
  565. package/src/interactive/overlays/extension-panel.ts +70 -0
  566. package/src/interactive/overlays/extensions.ts +28 -5
  567. package/src/interactive/overlays/fleet-run-approval.ts +7 -3
  568. package/src/interactive/overlays/help-reference.ts +89 -40
  569. package/src/interactive/overlays/interop.ts +122 -3
  570. package/src/interactive/overlays/keybinding-detail.ts +2 -2
  571. package/src/interactive/overlays/library-lifecycle.ts +90 -0
  572. package/src/interactive/overlays/library-model.ts +574 -0
  573. package/src/interactive/overlays/library-review.ts +557 -0
  574. package/src/interactive/overlays/library-tabs.ts +3 -15
  575. package/src/interactive/overlays/library.ts +602 -0
  576. package/src/interactive/overlays/list-overlay.ts +218 -39
  577. package/src/interactive/overlays/model-selector.ts +28 -25
  578. package/src/interactive/overlays/session-selector.ts +9 -3
  579. package/src/interactive/overlays/settings.ts +25 -18
  580. package/src/interactive/overlays/tree-selector.ts +16 -11
  581. package/src/interactive/permission-hint.ts +13 -0
  582. package/src/interactive/permission-overlay.ts +77 -28
  583. package/src/interactive/prompt-source-label.ts +21 -0
  584. package/src/interactive/renderers/reference-card.ts +35 -0
  585. package/src/interactive/renderers/worker-entry.ts +35 -3
  586. package/src/interactive/slash-autocomplete.ts +99 -1
  587. package/src/interactive/slash-commands.ts +390 -67
  588. package/src/interactive/slash-spec.ts +0 -1
  589. package/src/interactive/terminal-lease.ts +44 -12
  590. package/src/interactive/turn-queues.ts +8 -7
  591. package/src/interactive/turn-runtime.ts +1 -1
  592. package/src/interactive/view/view-overlay.ts +19 -14
  593. package/src/interactive/welcome-dashboard.ts +525 -408
  594. package/src/tools/bootstrap.ts +8 -0
  595. package/src/tools/builtin-tool-catalog.ts +7 -2
  596. package/src/tools/context/index.ts +58 -5
  597. package/src/tools/context/library.ts +465 -0
  598. package/src/tools/context/surface.ts +20 -6
  599. package/src/tools/core-bootstrap.ts +3 -0
  600. package/src/tools/dispatch-admission.ts +24 -1
  601. package/src/tools/dispatch-arguments.ts +8 -0
  602. package/src/tools/dispatch-plan.ts +32 -0
  603. package/src/tools/dispatch-schema.ts +31 -1
  604. package/src/tools/dispatch-types.ts +3 -0
  605. package/src/tools/dispatch.ts +1 -1
  606. package/src/tools/harness-extensions.ts +169 -0
  607. package/src/tools/observation.ts +4 -0
  608. package/src/tools/policy.ts +7 -1
  609. package/src/tools/registry.ts +19 -1
  610. package/src/tools/worker-evidence.ts +5 -0
  611. package/src/worker/context-seed.ts +192 -0
  612. package/src/worker/entry.ts +1 -0
  613. package/src/worker/spec-contract.ts +8 -1
  614. package/dist/chunk-3UW3KU4A.js +0 -21
  615. package/dist/chunk-536HXRFE.js +0 -1257
  616. package/dist/chunk-B3MOMLJ4.js +0 -433
  617. package/dist/chunk-CXQ37WJH.js +0 -45
  618. package/dist/chunk-KTFSFCVN.js +0 -46
  619. package/dist/chunk-QCOV5DFY.js +0 -911
  620. package/dist/chunk-QRFXEO6Y.js +0 -17
  621. package/dist/chunk-VAHLPXPY.js +0 -399
  622. package/dist/interop-RVCAYECG.js +0 -115
  623. package/dist/library-CTKZA7K3.js +0 -226
  624. package/dist/skills-OXFEAWMT.js +0 -510
  625. package/skills/README.md +0 -418
  626. package/skills/meta/find-skills/SKILL.md +0 -78
  627. package/skills/meta/find-skills/evals.md +0 -47
  628. package/src/domains/extensions/resource-path.ts +0 -27
  629. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +0 -27
  630. package/src/interactive/overlays/agents.ts +0 -70
  631. package/src/interactive/overlays/library-install-confirm.ts +0 -152
  632. package/src/interactive/overlays/prompts.ts +0 -89
  633. package/src/interactive/overlays/skills-hub.ts +0 -615
  634. /package/{skills → library/skills}/coding/ast-grep/references/rule_reference.md +0 -0
  635. /package/{skills → library/skills}/coding/prototype/references/LOGIC.md +0 -0
  636. /package/{skills → library/skills}/coding/prototype/references/UI.md +0 -0
  637. /package/{skills → library/skills}/coding/tdd/references/mocking.md +0 -0
  638. /package/{skills → library/skills}/coding/tdd/references/tests.md +0 -0
  639. /package/{skills → library/skills}/context/context-handoff/scripts/new-handoff.sh +0 -0
  640. /package/{skills → library/skills}/git/branch-closeout/evals.md +0 -0
  641. /package/{skills → library/skills}/git/branch-closeout/references/closeout-checklist.md +0 -0
  642. /package/{skills → library/skills}/git/file-ticket/assets/issue-template.md +0 -0
  643. /package/{skills → library/skills}/git/file-ticket/evals.md +0 -0
  644. /package/{skills → library/skills}/git/file-ticket/references/issue-discovery.md +0 -0
  645. /package/{skills → library/skills}/git/fix-issue/evals.md +0 -0
  646. /package/{skills → library/skills}/git/fix-issue/references/diagnosis-and-rca.md +0 -0
  647. /package/{skills → library/skills}/git/resolve-merge-conflicts/references/conflict-matrix.md +0 -0
  648. /package/{skills → library/skills}/git/ship/assets/pr-template.md +0 -0
  649. /package/{skills → library/skills}/git/ship/evals.md +0 -0
  650. /package/{skills → library/skills}/git/ship/references/remote-and-branch-policy.md +0 -0
  651. /package/{skills → library/skills}/git/worktree-create/evals.md +0 -0
  652. /package/{skills → library/skills}/git/worktree-create/references/worktree-setup.md +0 -0
  653. /package/{skills → library/skills}/git/worktree-merge/evals.md +0 -0
  654. /package/{skills → library/skills}/git/worktree-merge/references/merge-strategies.md +0 -0
  655. /package/{skills → library/skills}/meta/clio-coder-test/references/harness.md +0 -0
  656. /package/{skills → library/skills}/meta/clio-coder-test/references/test-map.md +0 -0
  657. /package/{skills → library/skills}/planning/archify/evals.md +0 -0
package/src/cli/agents.ts CHANGED
@@ -9,7 +9,7 @@ import { printError } from "./shared.js";
9
9
 
10
10
  const HELP = `clio-coder agents [--json] [--all]
11
11
 
12
- List user-facing agent specs from built-in, extension, user, and project recipes.
12
+ List user-facing agent specs from built-in, plugin, user, and project recipes.
13
13
 
14
14
  Flags:
15
15
  --json emit specs as JSON instead of the formatted table
@@ -52,7 +52,7 @@ export type CustomizationCategory =
52
52
  | "safety"
53
53
  | "memory";
54
54
 
55
- /** `reload` means an explicit `/resources extensions reload` (or a restart) publishes the change. */
55
+ /** `reload` means an explicit `/extensions reload` (or a restart) publishes the change. */
56
56
  export type ReloadClass = "hot" | "next-turn" | "reload" | "restart" | "n/a";
57
57
 
58
58
  export interface CustomizationEntry {
@@ -1372,7 +1372,7 @@ const SECTIONS: ReadonlyArray<SectionSpec> = [
1372
1372
  ["Chat thinking", settings.chat.thinkingLevel],
1373
1373
  ["Fleet thinking", settings.fleet.default.thinkingLevel],
1374
1374
  ["Favorites", listOr(settings.chat.modelPicker.favorites)],
1375
- ["Cycle set (Alt+J/K)", listOr(settings.chat.modelPicker.cycleSet)],
1375
+ ["Model cycle set", listOr(settings.chat.modelPicker.cycleSet)],
1376
1376
  ];
1377
1377
  },
1378
1378
  actions: [
@@ -1437,7 +1437,7 @@ const SECTIONS: ReadonlyArray<SectionSpec> = [
1437
1437
  },
1438
1438
  {
1439
1439
  label: "Cycle set",
1440
- hint: "comma-separated, Alt+J/K walks it",
1440
+ hint: "comma-separated models for the scoped cycle actions",
1441
1441
  run: async (io) => {
1442
1442
  await askList(io, "Cycle set", readSettings().chat.modelPicker.cycleSet, (values) => {
1443
1443
  updateSettings((draft) => {
package/src/cli/eval.ts CHANGED
@@ -18,11 +18,15 @@ import { EvalSuiteFileError, loadEvalSuiteFile, loadV1TaskFileAsSuite } from "..
18
18
  import { resolveSuiteForRun } from "../domains/eval/suites/resolve.js";
19
19
  import { runEvalSuiteV2 } from "../domains/eval/suites/run.js";
20
20
  import { EvalTaskFileError } from "../domains/eval/task-file.js";
21
+ import { resolveLibraryEval } from "../domains/resources/library-evals.js";
21
22
  import { printError } from "./shared.js";
22
23
 
23
24
  const HELP = `clio-coder eval <command>
24
25
 
25
26
  Commands:
27
+ clio-coder eval skill <name|path> [--scenario <id>] [--json]
28
+ clio-coder eval validate --package <path|kind:name> [--eval <name>] [--user|--project]
29
+ clio-coder eval run --package <path|kind:name> [--eval <name>] [--user|--project] [--out <path>]
26
30
  clio-coder eval validate --suite <suite.yaml>
27
31
  clio-coder eval run --suite <suite.yaml> [--trials <n>] [--target <id>] [--model <id>] [--out <path>] [--clio-coder-entry <path>]
28
32
  clio-coder eval run --task-file <tasks.yaml> [--repeat <n>] [--out <path>] [--clio-coder-entry <path>]
@@ -60,6 +64,9 @@ interface ParsedEvalArgs {
60
64
  baseline?: string;
61
65
  thresholds?: string;
62
66
  help: boolean;
67
+ package?: string;
68
+ packageEval?: string;
69
+ packageScope?: "user" | "project";
63
70
  }
64
71
 
65
72
  function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
@@ -84,6 +91,21 @@ function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
84
91
  }
85
92
  throw new Error(`unknown eval command: ${arg}`);
86
93
  }
94
+ if (parsed.command === "validate" || parsed.command === "run") {
95
+ if (arg === "--package" || arg === "--eval") {
96
+ const value = requiredValue(args, index++, arg);
97
+ if (arg === "--package") parsed.package = value;
98
+ else parsed.packageEval = value;
99
+ continue;
100
+ }
101
+ if (arg === "--user" || arg === "--project") {
102
+ const scope = arg === "--user" ? "user" : "project";
103
+ if (parsed.packageScope && parsed.packageScope !== scope)
104
+ throw new Error("--user and --project are mutually exclusive");
105
+ parsed.packageScope = scope;
106
+ continue;
107
+ }
108
+ }
87
109
  if (parsed.command === "validate") {
88
110
  if (arg === "--suite") {
89
111
  parsed.suite = requiredValue(args, index, "--suite");
@@ -193,9 +215,12 @@ function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
193
215
  }
194
216
  if (parsed.help) return parsed;
195
217
  if (parsed.command === undefined) throw new Error("eval requires a command");
196
- if (parsed.command === "validate" && parsed.suite === undefined) throw new Error("validate requires --suite <path>");
197
- if (parsed.command === "run" && (parsed.suite === undefined) === (parsed.taskFile === undefined)) {
198
- throw new Error("run requires exactly one of --suite or --task-file");
218
+ if (!parsed.package && (parsed.packageEval || parsed.packageScope))
219
+ throw new Error("--eval and scope flags require --package");
220
+ if (parsed.command === "validate" && [parsed.suite, parsed.package].filter(Boolean).length !== 1)
221
+ throw new Error("validate requires exactly one of --suite or --package");
222
+ if (parsed.command === "run" && [parsed.suite, parsed.taskFile, parsed.package].filter(Boolean).length !== 1) {
223
+ throw new Error("run requires exactly one of --suite, --task-file, or --package");
199
224
  }
200
225
  if (parsed.command === "report" && (parsed.evalId === undefined) === (parsed.artifact === undefined)) {
201
226
  throw new Error("report requires exactly one of an eval id or --artifact <path>");
@@ -210,6 +235,7 @@ function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
210
235
  }
211
236
 
212
237
  export async function runEvalCommand(args: ReadonlyArray<string>): Promise<number> {
238
+ if (args[0] === "skill") return (await import("./skills-eval.js")).runSkillEvalCli(args.slice(1));
213
239
  // Routed before the shared parser so the fixed read stays exactly fixed: no
214
240
  // eval flag can reach it, and no flag it does not name can be spent on it.
215
241
  if (args[0] === "inventory") {
@@ -239,7 +265,10 @@ export async function runEvalCommand(args: ReadonlyArray<string>): Promise<numbe
239
265
 
240
266
  async function runEvalValidate(parsed: ParsedEvalArgs): Promise<number> {
241
267
  try {
242
- const loaded = await loadEvalSuiteFile(parsed.suite ?? "");
268
+ const declared = parsed.package
269
+ ? resolveLibraryEval(parsed.package, parsed.packageEval, parsed.packageScope ? { scope: parsed.packageScope } : {})
270
+ : undefined;
271
+ const loaded = await loadEvalSuiteFile(declared?.path ?? parsed.suite ?? "");
243
272
  process.stdout.write(`valid suite: ${loaded.suite.suite.id}\n`);
244
273
  return 0;
245
274
  } catch (error) {
@@ -249,10 +278,15 @@ async function runEvalValidate(parsed: ParsedEvalArgs): Promise<number> {
249
278
 
250
279
  async function runEvalRun(parsed: ParsedEvalArgs): Promise<number> {
251
280
  try {
281
+ const declared = parsed.package
282
+ ? resolveLibraryEval(parsed.package, parsed.packageEval, parsed.packageScope ? { scope: parsed.packageScope } : {})
283
+ : undefined;
284
+ const suitePath = declared?.path ?? parsed.suite;
252
285
  const loaded =
253
- parsed.suite !== undefined
254
- ? await loadEvalSuiteFile(parsed.suite)
286
+ suitePath !== undefined
287
+ ? await loadEvalSuiteFile(suitePath)
255
288
  : await loadV1TaskFileAsSuite(parsed.taskFile ?? "", parsed.trials ?? parsed.repeat);
289
+ if (declared) loaded.suite.suite.provenance = { ...loaded.suite.suite.provenance, library: declared.provenance };
256
290
  const resolveOptions: { target?: string; model?: string } = {};
257
291
  if (parsed.target !== undefined) resolveOptions.target = parsed.target;
258
292
  if (parsed.model !== undefined) resolveOptions.model = parsed.model;
@@ -10,6 +10,7 @@ import {
10
10
  listInstalledExtensions,
11
11
  removeExtension,
12
12
  } from "../domains/extensions/index.js";
13
+ import { extensionInvocation, OperatorExtensionRuntime } from "../domains/extensions/operator-runtime.js";
13
14
  import { formatColumns, printError, printOk } from "./shared.js";
14
15
 
15
16
  const HELP = `clio-coder extensions <command>
@@ -19,6 +20,7 @@ Manage Clio extension packages.
19
20
  Commands:
20
21
  clio-coder extensions list [--all] [--json] [--user|--project]
21
22
  clio-coder extensions discover <path> [--json]
23
+ clio-coder extensions run <id> <command> [--json] -- [arguments]
22
24
  clio-coder extensions install <path> [--user|--project] [--force] [--json]
23
25
  clio-coder extensions enable <id> [--user|--project] [--json]
24
26
  clio-coder extensions disable <id> [--user|--project] [--json]
@@ -37,7 +39,16 @@ interface Parsed {
37
39
 
38
40
  function parse(argv: ReadonlyArray<string>): Parsed {
39
41
  const out: Parsed = { positional: [], json: false, all: false, force: false, help: false };
42
+ let argumentsOnly = false;
40
43
  for (const arg of argv) {
44
+ if (argumentsOnly) {
45
+ out.positional.push(arg);
46
+ continue;
47
+ }
48
+ if (arg === "--") {
49
+ argumentsOnly = true;
50
+ continue;
51
+ }
41
52
  if (!out.command && !arg.startsWith("-")) {
42
53
  out.command = arg;
43
54
  continue;
@@ -85,9 +96,9 @@ function printDiagnostics(diagnostics: ReadonlyArray<ExtensionDiagnostic>): void
85
96
  }
86
97
  }
87
98
 
88
- function resourceSummary(extension: InstalledExtension): string {
89
- const resources = Object.entries(extension.resources).map(([key, value]) => `${key}:${value}`);
90
- return resources.length > 0 ? resources.join(",") : "-";
99
+ function toolSummary(extension: InstalledExtension): string {
100
+ const tools = extension.capabilities?.tools.map((tool) => tool.name) ?? [];
101
+ return tools.length > 0 ? tools.join(",") : "-";
91
102
  }
92
103
 
93
104
  function stateLabel(extension: InstalledExtension): string {
@@ -95,7 +106,7 @@ function stateLabel(extension: InstalledExtension): string {
95
106
  if (!extension.compatible) return "incompatible";
96
107
  if (!extension.enabled) return "disabled";
97
108
  if (!extension.effective) return `shadowed:${extension.overriddenBy ?? "higher"}`;
98
- return extension.loadable ? "active" : "inactive";
109
+ return extension.loadable ? "eligible" : "inactive";
99
110
  }
100
111
 
101
112
  function printList(items: ReadonlyArray<InstalledExtension>): void {
@@ -105,20 +116,20 @@ function printList(items: ReadonlyArray<InstalledExtension>): void {
105
116
  }
106
117
  process.stdout.write(
107
118
  `${formatColumns([
108
- ["id", "scope", "state", "version", "resources", "description"],
119
+ ["id", "scope", "state", "version", "tools", "description"],
109
120
  ...items.map((extension) => [
110
121
  extension.id,
111
122
  extension.scope,
112
123
  stateLabel(extension),
113
124
  extension.version,
114
- resourceSummary(extension),
125
+ toolSummary(extension),
115
126
  extension.description,
116
127
  ]),
117
128
  ])}\n`,
118
129
  );
119
130
  }
120
131
 
121
- export function runExtensionsCommand(argv: ReadonlyArray<string>): number {
132
+ export function runExtensionsCommand(argv: ReadonlyArray<string>): number | Promise<number> {
122
133
  let parsed: Parsed;
123
134
  try {
124
135
  parsed = parse(argv);
@@ -142,6 +153,8 @@ export function runExtensionsCommand(argv: ReadonlyArray<string>): number {
142
153
  }
143
154
  const scopeOptions = { ...(parsed.scope ? { scope: parsed.scope } : {}) };
144
155
  switch (parsed.command) {
156
+ case "run":
157
+ return runOperatorCommand(parsed);
145
158
  case "list": {
146
159
  const items = listInstalledExtensions(process.cwd(), { ...scopeOptions, all: parsed.all });
147
160
  if (parsed.json) process.stdout.write(`${JSON.stringify({ extensions: items }, null, 2)}\n`);
@@ -178,7 +191,13 @@ export function runExtensionsCommand(argv: ReadonlyArray<string>): number {
178
191
  if (parsed.json) process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
179
192
  else {
180
193
  printDiagnostics(result.diagnostics);
181
- if (result.extension) printOk(`installed ${result.extension.id} (${result.extension.scope})`);
194
+ if (result.extension) {
195
+ printOk(`installed ${result.extension.id} (${result.extension.scope})`);
196
+ if (result.extension.runtime)
197
+ process.stderr.write(
198
+ "Operator runtime code starts on the next interactive startup/reload or explicit extensions run. Install only code you trust; it runs with your user account authority.\n",
199
+ );
200
+ }
182
201
  }
183
202
  return hasErrors(result.diagnostics) ? 1 : 0;
184
203
  }
@@ -217,3 +236,50 @@ export function runExtensionsCommand(argv: ReadonlyArray<string>): number {
217
236
  return 2;
218
237
  }
219
238
  }
239
+
240
+ async function runOperatorCommand(parsed: Parsed): Promise<number> {
241
+ const [id, command, ...args] = parsed.positional;
242
+ if (!id || !command || parsed.scope || parsed.force || parsed.all) {
243
+ process.stderr.write("usage: clio-coder extensions run <id> <command> [--json] -- [arguments]\n");
244
+ return 2;
245
+ }
246
+ const selected = listInstalledExtensions(process.cwd(), { all: true }).find(
247
+ (entry) => entry.id === id && entry.loadable,
248
+ );
249
+ if (!selected?.runtime?.commands.some((entry) => entry.name === command)) {
250
+ printError(`extension ${id} has no eligible operator command '${command}'`);
251
+ return 1;
252
+ }
253
+ const runtime = new OperatorExtensionRuntime({
254
+ context: () => ({ workspace: process.cwd(), sessionId: null, mode: "headless" }),
255
+ isIdle: () => true,
256
+ onlyId: id,
257
+ });
258
+ const controller = new AbortController();
259
+ const cancel = (): void => {
260
+ controller.abort();
261
+ void runtime.dispose();
262
+ };
263
+ process.once("SIGINT", cancel);
264
+ process.once("SIGTERM", cancel);
265
+ try {
266
+ const reload = await runtime.reload("startup");
267
+ if (reload.status !== "committed") throw new Error(reload.message);
268
+ const provenance = runtime.entries().find((entry) => entry.id === id && entry.state === "ready")?.provenance;
269
+ const output = await runtime.invoke(extensionInvocation(id, command), args.join(" "), [], controller.signal);
270
+ if (!provenance) throw new Error("extension result has no activated provenance");
271
+ if (parsed.json)
272
+ process.stdout.write(
273
+ `${JSON.stringify({ extensionId: id, command, generation: reload.generation, provenance, output })}\n`,
274
+ );
275
+ else process.stdout.write(`${output.text}\n`);
276
+ return 0;
277
+ } catch (error) {
278
+ printError(error instanceof Error ? error.message : String(error));
279
+ return 1;
280
+ } finally {
281
+ process.off("SIGINT", cancel);
282
+ process.off("SIGTERM", cancel);
283
+ await runtime.dispose();
284
+ }
285
+ }
@@ -54,6 +54,8 @@ export function inspectFleet(name: string, vars?: Readonly<Record<string, string
54
54
  }
55
55
  }
56
56
  const plan = compileFleetExecutionPlan({
57
+ commands,
58
+ ...(vars ? { vars } : {}),
57
59
  contract,
58
60
  task: prompt,
59
61
  resolveAgent(context) {
package/src/cli/fleet.ts CHANGED
@@ -393,6 +393,8 @@ async function runFleet(args: ReadonlyArray<string>): Promise<number> {
393
393
  let plan: ExecutionPlan;
394
394
  try {
395
395
  plan = compileFleetExecutionPlan({
396
+ commands,
397
+ ...(vars ? { vars } : {}),
396
398
  contract,
397
399
  task: prompt,
398
400
  resolveAgent(context) {
package/src/cli/index.ts CHANGED
@@ -69,8 +69,7 @@ Usage:
69
69
  clio-coder usage report cross-session usage facts and opportunities (experimental)
70
70
  clio-coder trace query or view the durable dispatch trace mirror
71
71
  clio-coder extensions install, list, enable, disable, or remove extension packages
72
- clio-coder skills list, inspect, validate, or install skills
73
- clio-coder library list, search, add, or sync agents, prompts, fleets, and skills from catalogs
72
+ clio-coder library register, install, update, import, inspect, and manage packages of every kind
74
73
  clio-coder tasks list, add, hand, finish, or drop project operator tasks
75
74
  clio-coder verifiers discover, inspect, author, validate, edit, or dry-run project checks
76
75
  clio-coder tools list|status|install|remove <id> pinned external programs Clio can drive
@@ -258,7 +257,6 @@ const COMMAND_HANDLERS = new Map<string, CommandHandler>([
258
257
  ["extensions", extensionsCommand],
259
258
  ["ext", extensionsCommand],
260
259
  ["fleet", async (subArgs) => (await import("./fleet.js")).runFleetCommand(subArgs)],
261
- ["skills", async (subArgs) => (await import("./skills.js")).runSkillsCommand(subArgs)],
262
260
  ["library", async (subArgs) => (await import("./library.js")).runLibraryCommand(subArgs)],
263
261
  ["tasks", async (subArgs) => (await import("./tasks.js")).runTasksCommand(subArgs)],
264
262
  ["verifiers", async (subArgs) => (await import("./verifiers.js")).runVerifiersCommand(subArgs)],
@@ -1,23 +1,3 @@
1
- /**
2
- * Fixed machine-readable projection of detected external coding agents.
3
- *
4
- * `configure --interop` is an interactive review that writes delegation peers
5
- * into settings, so it is not a transport a GUI host can invoke. This command
6
- * takes no identifier or flag beyond `--json`, decides nothing, and writes
7
- * nothing.
8
- *
9
- * It also runs no foreign executable. Detection can probe `<bin> --version`,
10
- * and this read deliberately does not: a GUI refresh must not become "execute
11
- * every coding agent installed on this machine". The version still crosses,
12
- * because a non-probing detection keeps the last version the harness observed
13
- * for the same binary, so what the operator sees is a recorded fact rather than
14
- * a fresh execution.
15
- *
16
- * Resolved binary paths and the agent's home directory are native filesystem
17
- * facts and stay on the host. Whether a directory exists crosses; where it is
18
- * does not.
19
- */
20
-
21
1
  import { readSettings } from "../core/config.js";
22
2
  import {
23
3
  detectInteropAgents,
@@ -30,10 +10,26 @@ import {
30
10
  export type InteropDecisionState = "accepted" | "declined";
31
11
 
32
12
  export interface InteropInspectAgent {
13
+ readonly inventory: {
14
+ status: string;
15
+ diagnosticCount: number;
16
+ listing: "unknown";
17
+ counts: Record<string, number>;
18
+ items: ReadonlyArray<{
19
+ kind: string;
20
+ name: string;
21
+ scope: string;
22
+ version?: string;
23
+ marketplace?: string;
24
+ installation?: string;
25
+ enabled?: boolean;
26
+ adoption: string;
27
+ }>;
28
+ } | null;
33
29
  readonly id: InteropAgentId;
34
30
  readonly label: string;
35
31
  readonly presence: InteropPresence;
36
- /** The last version the harness observed for this binary, never probed here. */
32
+ /** The bounded version probe result, or last observed version. */
37
33
  readonly version: string | null;
38
34
  /** Whether the agent owns a directory under the operator's home. The path stays host-side. */
39
35
  readonly hasUserDirectory: boolean;
@@ -65,22 +61,15 @@ export interface InteropInspectSnapshot {
65
61
  readonly detectedAt: string;
66
62
  /**
67
63
  * How many agent kinds the registry knows, so an empty list reads as "none
68
- * detected" rather than "nothing to detect". Detection drops a kind with no
69
- * binary, no directory, and no artifacts, so the list is never padded.
64
+ * detected" rather than "nothing to detect". Explicit inspection includes all five inventory-enabled hosts, including absent
65
+ * binaries; lightweight bootstrap detection still drops empty kinds.
70
66
  */
71
67
  readonly knownKinds: number;
72
68
  readonly agents: readonly InteropInspectAgent[];
73
69
  }
74
70
 
75
- /**
76
- * Skill and artifact counts are deliberately absent.
77
- *
78
- * Detection populates them only from sources the resources and context domains
79
- * have already loaded, and this command loads neither. Reporting the structural
80
- * zero that would result would state a fact this read did not establish.
81
- */
82
71
  async function interopInspectSnapshot(now: () => number = Date.now): Promise<InteropInspectSnapshot> {
83
- const report = await detectInteropAgents({ cwd: process.cwd(), probeVersion: false });
72
+ const report = await detectInteropAgents({ cwd: process.cwd(), probeVersion: true, inventory: true });
84
73
  const settings = readSettings();
85
74
  const configured = new Set(settings.integrations.externalAgents.entries.map((agent) => agent.id));
86
75
  const agents: InteropInspectAgent[] = [];
@@ -92,6 +81,27 @@ async function interopInspectSnapshot(now: () => number = Date.now): Promise<Int
92
81
  const decisionStale = decision !== null && record.decidedFingerprint !== record.fingerprint;
93
82
  const isConfigured = configured.has(kind.id);
94
83
  agents.push({
84
+ inventory: record.inventory
85
+ ? {
86
+ status: record.inventory.status,
87
+ diagnosticCount: record.inventory.diagnostics.length,
88
+ listing: record.inventory.listing,
89
+ counts: record.inventory.items.reduce<Record<string, number>>((counts, item) => {
90
+ counts[item.kind] = (counts[item.kind] ?? 0) + 1;
91
+ return counts;
92
+ }, {}),
93
+ items: record.inventory.items.map(({ kind, name, scope, version, marketplace, installation, enabled }) => ({
94
+ kind,
95
+ name,
96
+ scope,
97
+ ...(version ? { version } : {}),
98
+ ...(marketplace ? { marketplace } : {}),
99
+ ...(installation ? { installation } : {}),
100
+ ...(enabled !== undefined ? { enabled } : {}),
101
+ adoption: ["hook", "mcp", "executable", "output-style"].includes(kind) ? "not adoptable" : "review required",
102
+ })),
103
+ }
104
+ : null,
95
105
  id: kind.id,
96
106
  label: kind.label,
97
107
  presence: record.presence,
@@ -119,10 +129,28 @@ async function interopInspectSnapshot(now: () => number = Date.now): Promise<Int
119
129
  }
120
130
 
121
131
  export async function runInteropInspect(args: ReadonlyArray<string>): Promise<number> {
122
- if (args.length !== 1 || args[0] !== "--json") {
132
+ if (args.length > 1 || (args.length === 1 && args[0] !== "--json")) {
123
133
  process.stderr.write("clio-coder interop inspect: usage: clio-coder interop inspect --json\n");
124
134
  return 2;
125
135
  }
126
- process.stdout.write(`${JSON.stringify(await interopInspectSnapshot(), null, 2)}\n`);
136
+ const snapshot = await interopInspectSnapshot();
137
+ if (args[0] === "--json") process.stdout.write(`${JSON.stringify(snapshot, null, 2)}\n`);
138
+ else
139
+ for (const agent of snapshot.agents) {
140
+ process.stdout.write(
141
+ `${agent.label}: ${agent.presence}; version ${agent.version ?? "unknown"}; ${agent.configured ? "connected" : "not connected"}; adapter ${agent.adapter ?? "unsupported"}\n`,
142
+ );
143
+ process.stdout.write(
144
+ ` Inventory ${agent.inventory?.status ?? "unknown"}: ${
145
+ Object.entries(agent.inventory?.counts ?? {})
146
+ .map(([kind, count]) => `${count} ${kind}`)
147
+ .join(", ") || "none found"
148
+ }\n`,
149
+ );
150
+ for (const item of agent.inventory?.items ?? [])
151
+ process.stdout.write(
152
+ ` ${item.scope} ${item.kind} ${item.name}${item.version ? ` @ ${item.version}` : ""}${item.marketplace ? ` (${item.marketplace})` : ""}; ${item.adoption}\n`,
153
+ );
154
+ }
127
155
  return 0;
128
156
  }
@@ -1,11 +1,15 @@
1
- /**
2
- * `clio-coder interop`, the read half of external coding agent detection.
3
- *
4
- * Reviewing and wiring a detected agent as a delegation peer is an interactive
5
- * mutation and stays on `configure --interop`. This command family carries the
6
- * read only, and its one subcommand is the fixed projection a GUI host may run.
7
- */
1
+ /** Discover coding agents and review safe resource adoption without model calls. */
8
2
 
3
+ import { createInterface } from "node:readline/promises";
4
+ import {
5
+ type AdoptionKind,
6
+ applyInteropAdoption,
7
+ detectInteropAgents,
8
+ type InteropAgentId,
9
+ interopAgentKind,
10
+ planInteropAdoption,
11
+ renderInteropAdoptionPlan,
12
+ } from "../domains/interop/index.js";
9
13
  import { runInteropInspect } from "./interop-inspect.js";
10
14
  import { printError } from "./shared.js";
11
15
 
@@ -14,10 +18,13 @@ const HELP = `clio-coder interop <subcommand>
14
18
  Detected external coding agents and how far each one is wired.
15
19
 
16
20
  Subcommands:
17
- inspect --json emit the detected agent inventory with no native paths
21
+ inspect [--json] show host inventory and connection state
22
+ adopt <host> [--kind skill|agent|prompt|plugin] [--project|--user]
23
+ [--yes] [--dry-run]
24
+ review and adopt safe resources
18
25
 
19
26
  Notes:
20
- inspect writes nothing and runs no foreign executable. Wiring a detected agent
27
+ inspect changes no host or project files and starts no agent session. Wiring a detected agent
21
28
  as a delegation peer is an explicit review: run \`clio-coder configure --interop\`.
22
29
  `;
23
30
 
@@ -27,8 +34,71 @@ export async function runInteropCommand(args: ReadonlyArray<string>): Promise<nu
27
34
  process.stdout.write(HELP);
28
35
  return sub === undefined ? 2 : 0;
29
36
  }
37
+ if (sub === "adopt") return await runAdopt(args.slice(1));
30
38
  if (sub === "inspect") return await runInteropInspect(args.slice(1));
31
39
  printError(`unknown interop command: ${sub}`);
32
40
  process.stdout.write(HELP);
33
41
  return 2;
34
42
  }
43
+
44
+ async function runAdopt(args: ReadonlyArray<string>): Promise<number> {
45
+ const host = args[0] === "claude" ? "claude-code" : args[0] === "agy" ? "antigravity" : args[0];
46
+ const kind = host ? interopAgentKind(host as InteropAgentId) : undefined;
47
+ if (!kind?.inventory) {
48
+ printError("adopt requires a host: claude-code, codex, antigravity, copilot, opencode");
49
+ return 2;
50
+ }
51
+ let filter: AdoptionKind | undefined;
52
+ let scope: "user" | "project" | undefined;
53
+ let yes = false;
54
+ let dryRun = false;
55
+ for (let i = 1; i < args.length; i++) {
56
+ const arg = args[i];
57
+ if (arg === "--kind") {
58
+ const next = args[++i];
59
+ if (!next || !["skill", "agent", "prompt", "plugin"].includes(next)) {
60
+ printError("invalid adoption kind");
61
+ return 2;
62
+ }
63
+ filter = next as AdoptionKind;
64
+ } else if (arg === "--project" || arg === "--user") {
65
+ if (scope) {
66
+ printError("choose one destination scope");
67
+ return 2;
68
+ }
69
+ scope = arg === "--project" ? "project" : "user";
70
+ } else if (arg === "--yes") yes = true;
71
+ else if (arg === "--dry-run") dryRun = true;
72
+ else {
73
+ printError(`unknown adopt option: ${arg}`);
74
+ return 2;
75
+ }
76
+ }
77
+ const report = await detectInteropAgents({ inventory: true });
78
+ const inventory = report.agents.find((agent) => agent.kind === kind.id)?.inventory;
79
+ if (!inventory) {
80
+ printError("inventory is unknown");
81
+ return 1;
82
+ }
83
+ const plan = planInteropAdoption({
84
+ host: kind.id,
85
+ inventory,
86
+ ...(scope ? { scope } : {}),
87
+ ...(filter ? { kind: filter } : {}),
88
+ });
89
+ process.stdout.write(`${renderInteropAdoptionPlan(plan)}\n`);
90
+ for (const diagnostic of inventory.diagnostics) process.stdout.write(`Unknown: ${diagnostic}\n`);
91
+ if (dryRun || !plan.entries.some((entry) => entry.action === "install")) return 0;
92
+ if (!yes && process.stdin.isTTY && process.stdout.isTTY) {
93
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
94
+ try {
95
+ yes = (await rl.question("Install this plan? [y/N] ")).trim().toLowerCase() === "y";
96
+ } finally {
97
+ rl.close();
98
+ }
99
+ }
100
+ const result = applyInteropAdoption(plan, yes);
101
+ for (const id of result.installed) process.stdout.write(`Installed ${id}\n`);
102
+ for (const diagnostic of result.diagnostics) process.stderr.write(`${diagnostic}\n`);
103
+ return result.diagnostics.length > 0 ? 1 : 0;
104
+ }