@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
@@ -0,0 +1,557 @@
1
+ /**
2
+ * The Library's review and outcome surface.
3
+ *
4
+ * One overlay covers both halves of a managed change, because they are the same
5
+ * question asked twice: what would this do, and then what did it actually do.
6
+ * Nothing is written before the operator accepts the reviewed plan, and the
7
+ * outcome separates the three facts that a single "done" would have blurred:
8
+ * what the writer committed, what the resources now admit, and whether the
9
+ * session refreshed.
10
+ *
11
+ * The bodies are pure functions of the plan and the result, so the wording is
12
+ * testable without a terminal.
13
+ */
14
+
15
+ import type { LibraryImportApplyResult, LibraryImportPlan } from "../../domains/interop/index.js";
16
+ import type {
17
+ LibraryApplyResult,
18
+ LibraryLifecyclePlan,
19
+ LibraryPlanStep,
20
+ LibraryRefreshResult,
21
+ LibraryStepOutcome,
22
+ } from "../../domains/resources/index.js";
23
+ import {
24
+ type Component,
25
+ isKeyRelease,
26
+ matchesKey,
27
+ type OverlayHandle,
28
+ type TUI,
29
+ wrapTextWithAnsi,
30
+ } from "../../engine/tui.js";
31
+ import { buildResponsiveHint, FocusBox, showClioOverlayFrame } from "../overlay-frame.js";
32
+ import { clioTheme, rule } from "../theme/index.js";
33
+
34
+ const MIN_WIDTH = 48;
35
+ const MAX_WIDTH = 110;
36
+
37
+ function libraryReviewWidth(columns: number): number {
38
+ return Math.max(MIN_WIDTH, Math.min(MAX_WIDTH, columns - 4));
39
+ }
40
+
41
+ function wrap(text: string, width: number): string[] {
42
+ return wrapTextWithAnsi(text, Math.max(1, Math.floor(width)));
43
+ }
44
+
45
+ function stepHeadline(step: LibraryPlanStep): string {
46
+ return `${step.operation} ${step.identity.ref} in ${step.identity.scope} scope`;
47
+ }
48
+
49
+ /**
50
+ * The reviewed plan, in the order the questions matter: what changes, what it
51
+ * depends on, what depends on it, what becomes effective afterwards, and how a
52
+ * changed tree is recovered.
53
+ *
54
+ * `detail` adds the destination path and the source digest. They are the facts
55
+ * an operator verifies against `library install --dry-run`, and they are also
56
+ * the two longest lines on the screen, so they expand rather than crowd out the
57
+ * dependency story.
58
+ */
59
+ export function formatLibraryPlanReview(
60
+ plan: LibraryLifecyclePlan,
61
+ width: number,
62
+ options: { detail?: boolean } = {},
63
+ ): string[] {
64
+ const theme = clioTheme();
65
+ const rows: string[] = [];
66
+ const target = plan.steps.at(-1);
67
+ rows.push(
68
+ ...wrap(theme.fg("accent", target ? stepHeadline(target) : `${plan.request.operation} ${plan.request.ref}`), width),
69
+ );
70
+ if (plan.steps.length > 1)
71
+ rows.push(...wrap(theme.fg("dim", `${plan.steps.length} steps, requirements first`), width));
72
+ rows.push(rule(theme, width));
73
+
74
+ for (const step of plan.steps) {
75
+ rows.push(...wrap(theme.fg("muted", stepHeadline(step)), width));
76
+ if (step.refusal) rows.push(...wrap(theme.fg("error", `refused: ${step.refusal}`), width));
77
+ if (step.content && !step.content.valid)
78
+ rows.push(...wrap(theme.fg("warning", `content invalid: ${step.content.diagnostics.join("; ")}`), width));
79
+ if (step.content?.resources.length)
80
+ rows.push(
81
+ ...wrap(
82
+ theme.fg(
83
+ "dim",
84
+ `projects ${step.content.resources.map((item) => `${item.kind}:${item.name}${item.valid ? "" : " (invalid)"}`).join(", ")}`,
85
+ ),
86
+ width,
87
+ ),
88
+ );
89
+ if (step.dependencies.missing.length)
90
+ rows.push(...wrap(theme.fg("warning", `missing requirements: ${step.dependencies.missing.join(", ")}`), width));
91
+ if (step.dependencies.inactive.length)
92
+ rows.push(...wrap(theme.fg("warning", `inactive requirements: ${step.dependencies.inactive.join(", ")}`), width));
93
+ for (const dependent of step.dependents.newlyBroken)
94
+ rows.push(
95
+ ...wrap(
96
+ theme.fg("error", `would break ${dependent.ref} (${dependent.scope}): needs ${dependent.missing.join(", ")}`),
97
+ width,
98
+ ),
99
+ );
100
+ for (const dependent of step.dependents.preexisting)
101
+ rows.push(
102
+ ...wrap(
103
+ theme.fg("dim", `already broken ${dependent.ref} (${dependent.scope}): needs ${dependent.missing.join(", ")}`),
104
+ width,
105
+ ),
106
+ );
107
+ if (step.effectiveAfter)
108
+ rows.push(
109
+ ...wrap(
110
+ theme.fg(
111
+ "info",
112
+ `effective afterwards: ${step.effectiveAfter.scope} copy, ${step.effectiveAfter.loadable ? "loadable" : "not loadable"} (${step.effectiveAfter.state})`,
113
+ ),
114
+ width,
115
+ ),
116
+ );
117
+ rows.push(...wrap(theme.fg("dim", step.fallbackNote), width));
118
+ rows.push(...wrap(theme.fg("dim", step.recovery), width));
119
+ if (options.detail) {
120
+ rows.push(...wrap(theme.fg("dim", `destination ${step.destination}`), width));
121
+ if (step.source)
122
+ rows.push(
123
+ ...wrap(theme.fg("dim", `source ${step.source.sourceUrl}`), width),
124
+ ...wrap(theme.fg("dim", ` sha256 ${step.source.sha256}`), width),
125
+ );
126
+ }
127
+ }
128
+
129
+ rows.push(rule(theme, width));
130
+ for (const diagnostic of plan.diagnostics) rows.push(...wrap(theme.fg("warning", diagnostic), width));
131
+ rows.push(
132
+ ...wrap(
133
+ theme.fg(
134
+ "dim",
135
+ plan.applicable
136
+ ? "Verification after the change reads the copy back from disk and reports which resources the loaders actually admit. Enter applies it; Esc writes nothing and releases the staged source."
137
+ : "This plan cannot be applied as reviewed. Esc writes nothing and releases the staged source.",
138
+ ),
139
+ width,
140
+ ),
141
+ );
142
+ rows.push(...wrap(theme.fg("dim", options.detail ? "d hides paths and digests" : "d shows paths and digests"), width));
143
+ return rows;
144
+ }
145
+
146
+ function refreshLine(refresh: LibraryRefreshResult): string {
147
+ const theme = clioTheme();
148
+ if (refresh.status === "refreshed")
149
+ return theme.fg(
150
+ "success",
151
+ `session resources refreshed (generation ${refresh.generation}${refresh.changed ? ", changed" : ", unchanged"})`,
152
+ );
153
+ if (refresh.status === "failed")
154
+ return theme.fg("error", `session refresh failed: ${refresh.error}; press R to retry`);
155
+ return theme.fg("dim", `session refresh not applicable: ${refresh.reason}`);
156
+ }
157
+
158
+ /**
159
+ * When the resource evidence was read, said explicitly.
160
+ *
161
+ * Verification reads the copy back from disk as soon as the writer returns,
162
+ * which is before the session refreshes. Those are different moments and an
163
+ * unlabelled list of resources blurred them: after a failed refresh the disk
164
+ * can be correct while this session still serves the previous generation, and
165
+ * an operator reading "available" deserves to know which of the two it means.
166
+ */
167
+ function evidenceLabel(evidence: "pre-refresh" | "post-refresh", refresh: LibraryRefreshResult): string {
168
+ if (evidence === "post-refresh") return "resources verified after the session refresh";
169
+ if (refresh.status === "refreshed")
170
+ return "resource evidence from before refresh; session refreshed, reopen the Library for current admission";
171
+ if (refresh.status === "failed")
172
+ return "resource evidence from before refresh; current session admission is unverified because refresh failed";
173
+ return "resource evidence from before refresh; no session refresh applied";
174
+ }
175
+
176
+ function outcomeLines(outcome: LibraryStepOutcome, width: number, refresh: LibraryRefreshResult): string[] {
177
+ const theme = clioTheme();
178
+ const token = outcome.status === "committed" ? "success" : outcome.status === "failed" ? "error" : ("dim" as const);
179
+ const rows = wrap(
180
+ theme.fg(token, `${outcome.status}: ${outcome.operation} ${outcome.identity.ref} (${outcome.identity.scope})`),
181
+ width,
182
+ );
183
+ if (outcome.error) {
184
+ rows.push(...wrap(theme.fg("error", `${outcome.error.code}: ${outcome.error.message}`), width));
185
+ if (outcome.error.changed)
186
+ rows.push(
187
+ ...wrap(
188
+ theme.fg(
189
+ "dim",
190
+ `changed fact ${outcome.error.changed.fact}: reviewed ${JSON.stringify(outcome.error.changed.expected)}, observed ${JSON.stringify(outcome.error.changed.observed)}`,
191
+ ),
192
+ width,
193
+ ),
194
+ );
195
+ rows.push(...wrap(theme.fg("info", outcome.error.next), width));
196
+ }
197
+ const verification = outcome.verification;
198
+ if (verification) {
199
+ rows.push(...wrap(theme.fg("dim", `disk: tree ${verification.tree}, record ${verification.record}`), width));
200
+ rows.push(
201
+ ...wrap(
202
+ theme.fg(
203
+ "dim",
204
+ `${evidenceLabel(verification.evidence, refresh)}: ${
205
+ verification.resources.length === 0
206
+ ? "none admitted"
207
+ : verification.resources
208
+ .map(
209
+ (item) =>
210
+ `${item.kind}:${item.name} ${item.available ? "available" : `unavailable (${item.reason ?? "no reason recorded"})`}`,
211
+ )
212
+ .join(", ")
213
+ }`,
214
+ ),
215
+ width,
216
+ ),
217
+ );
218
+ rows.push(
219
+ ...wrap(
220
+ theme.fg(
221
+ "dim",
222
+ verification.effective
223
+ ? `effective copy: ${verification.effective.scope}, ${verification.effective.loadable ? "loadable" : "not loadable"}`
224
+ : "effective copy: none remains",
225
+ ),
226
+ width,
227
+ ),
228
+ );
229
+ }
230
+ if (outcome.recovery?.packageBackup)
231
+ rows.push(...wrap(theme.fg("info", `recovered content: ${outcome.recovery.packageBackup}`), width));
232
+ if (outcome.recovery?.stateBackup)
233
+ rows.push(...wrap(theme.fg("dim", `state backup: ${outcome.recovery.stateBackup}`), width));
234
+ for (const diagnostic of outcome.diagnostics) rows.push(...wrap(theme.fg("dim", diagnostic), width));
235
+ return rows;
236
+ }
237
+
238
+ /**
239
+ * What actually happened.
240
+ *
241
+ * The three counts lead, because a batch that committed two of three writes is
242
+ * a different situation from one that committed none, and the older single
243
+ * "installed" line could describe both. Disk state, resource admission and
244
+ * session refresh are then separate lines: a package can be on disk with one
245
+ * resource still unavailable, and that is not a failed write.
246
+ */
247
+ export function formatLibraryOutcome(result: LibraryApplyResult, width: number): string[] {
248
+ const theme = clioTheme();
249
+ const rows = wrap(
250
+ theme.fg(
251
+ result.failed > 0 ? "error" : "success",
252
+ `${result.committed} committed · ${result.failed} failed · ${result.unattempted} unattempted`,
253
+ ),
254
+ width,
255
+ );
256
+ rows.push(rule(theme, width));
257
+ for (const outcome of result.outcomes) rows.push(...outcomeLines(outcome, width, result.refresh));
258
+ rows.push(rule(theme, width));
259
+ rows.push(...wrap(refreshLine(result.refresh), width));
260
+ if (result.unattempted > 0)
261
+ rows.push(
262
+ ...wrap(
263
+ theme.fg(
264
+ "dim",
265
+ "Unattempted steps were never started; the committed ones stand. Review a fresh plan for the rest.",
266
+ ),
267
+ width,
268
+ ),
269
+ );
270
+ rows.push(
271
+ ...wrap(theme.fg("dim", "R retries the session refresh only; it never repeats a write. Esc closes."), width),
272
+ );
273
+ return rows;
274
+ }
275
+
276
+ /**
277
+ * The reviewed foreign import, before anything is written.
278
+ *
279
+ * An import is the one operation whose losses matter as much as its writes, so
280
+ * the projected resources, the unsupported host features and the omitted files
281
+ * are all on this screen. A plan that would install something while silently
282
+ * dropping a companion the instructions need is the failure this wording
283
+ * exists to prevent.
284
+ */
285
+ function formatLibraryImportReview(
286
+ plan: LibraryImportPlan,
287
+ width: number,
288
+ options: { detail?: boolean } = {},
289
+ ): string[] {
290
+ const theme = clioTheme();
291
+ const rows = wrap(
292
+ theme.fg(
293
+ plan.action === "install" ? "accent" : "error",
294
+ `${plan.action === "install" ? "import" : "blocked"} ${plan.id ?? plan.source.input} into ${plan.scope} scope`,
295
+ ),
296
+ width,
297
+ );
298
+ rows.push(rule(theme, width));
299
+ rows.push(...wrap(theme.fg("muted", `source: ${plan.source.input} (${plan.source.transport})`), width));
300
+ if (plan.format) rows.push(...wrap(theme.fg("dim", `format: ${plan.format}`), width));
301
+ if (plan.version) rows.push(...wrap(theme.fg("dim", `version: ${plan.version}`), width));
302
+ if (plan.destination) rows.push(...wrap(theme.fg("dim", `destination: ${plan.destination}`), width));
303
+ rows.push(
304
+ ...wrap(
305
+ theme.fg(
306
+ "info",
307
+ `projects ${plan.outcomes.length} resource${plan.outcomes.length === 1 ? "" : "s"}${
308
+ plan.outcomes.length > 0
309
+ ? `: ${plan.outcomes.map((outcome) => `${outcome.kind}:${outcome.name} (${outcome.status})`).join(", ")}`
310
+ : ""
311
+ }`,
312
+ ),
313
+ width,
314
+ ),
315
+ );
316
+ for (const item of plan.unsupported)
317
+ rows.push(...wrap(theme.fg("warning", `unsupported host feature, not imported: ${item}`), width));
318
+ for (const item of plan.omitted) rows.push(...wrap(theme.fg("warning", `omitted file: ${item}`), width));
319
+ if (plan.requirements.length)
320
+ rows.push(...wrap(theme.fg("warning", `requires installed packages: ${plan.requirements.join(", ")}`), width));
321
+ for (const reason of plan.reasons)
322
+ rows.push(...wrap(theme.fg(plan.action === "install" ? "dim" : "error", reason), width));
323
+ rows.push(rule(theme, width));
324
+ rows.push(
325
+ ...wrap(
326
+ theme.fg(
327
+ "dim",
328
+ "Imported content stays foreign: it keeps its original provenance and needs the project-import trust gate before the model may use it. The vendor's own directory is never modified.",
329
+ ),
330
+ width,
331
+ ),
332
+ );
333
+ if (options.detail) {
334
+ rows.push(...wrap(theme.fg("dim", `review fingerprint ${plan.reviewFingerprint}`), width));
335
+ if (plan.digest) rows.push(...wrap(theme.fg("dim", `projected digest ${plan.digest}`), width));
336
+ rows.push(...wrap(theme.fg("dim", `source root ${plan.source.root}`), width));
337
+ }
338
+ rows.push(
339
+ ...wrap(
340
+ theme.fg(
341
+ "dim",
342
+ plan.action === "install"
343
+ ? "Enter imports exactly this projection; Esc writes nothing."
344
+ : "This source cannot be imported as reviewed. Esc writes nothing.",
345
+ ),
346
+ width,
347
+ ),
348
+ );
349
+ rows.push(...wrap(theme.fg("dim", options.detail ? "d hides paths and digests" : "d shows paths and digests"), width));
350
+ return rows;
351
+ }
352
+
353
+ /** One scrollable body that shows a reviewed plan, then the outcome that replaced it. */
354
+ class LibraryReviewBody implements Component {
355
+ private scroll = 0;
356
+ private maxScroll = 0;
357
+ private rows = 12;
358
+ detail = false;
359
+ outcome: (() => string[]) | null = null;
360
+
361
+ constructor(private readonly review: (width: number, detail: boolean) => string[]) {}
362
+
363
+ scrollBy(delta: number): void {
364
+ this.scroll = Math.max(0, Math.min(this.maxScroll, this.scroll + delta * this.rows));
365
+ }
366
+
367
+ reset(): void {
368
+ this.scroll = 0;
369
+ }
370
+
371
+ render(width: number): string[] {
372
+ const body = this.outcome ? this.outcome() : this.review(width, this.detail);
373
+ this.rows = Math.max(4, (process.stdout.rows || 30) - 10);
374
+ this.maxScroll = Math.max(0, body.length - this.rows);
375
+ this.scroll = Math.min(this.scroll, this.maxScroll);
376
+ const shown = body.slice(this.scroll, this.scroll + this.rows);
377
+ if (this.maxScroll) shown.push(`(${this.scroll + 1}-${this.scroll + shown.length}/${body.length}) PgUp/PgDn`);
378
+ return shown;
379
+ }
380
+
381
+ invalidate(): void {}
382
+ }
383
+
384
+ interface ReviewOverlaySpec {
385
+ title: string;
386
+ verb: string;
387
+ columns: number;
388
+ applicable: boolean;
389
+ review: (width: number, detail: boolean) => string[];
390
+ /** Apply, and return the body the outcome half renders. Called only after Enter. */
391
+ commit: () => (width: number) => string[];
392
+ /** Refresh only; returns the replacement outcome body. Never repeats a write. */
393
+ retryRefresh: () => (width: number) => string[];
394
+ onCancel: () => void;
395
+ onDone: () => void;
396
+ }
397
+
398
+ function openReviewOverlay(tui: TUI, spec: ReviewOverlaySpec): OverlayHandle {
399
+ let settled = false;
400
+ let width = libraryReviewWidth(spec.columns);
401
+ const body = new LibraryReviewBody(spec.review);
402
+
403
+ const cancel = (): void => {
404
+ if (settled) return;
405
+ settled = true;
406
+ spec.onCancel();
407
+ };
408
+
409
+ const focus = new FocusBox(body, {
410
+ // Keys are matched by name rather than by raw bytes: under the kitty
411
+ // keyboard protocol Esc arrives as CSI 27 u, and a byte comparison left
412
+ // this overlay unanswerable.
413
+ onInput: (data: string): void => {
414
+ if (isKeyRelease(data)) return;
415
+ if (body.outcome) {
416
+ if (data === "R") {
417
+ // Refresh only. The writes already committed and are never repeated.
418
+ const next = spec.retryRefresh();
419
+ body.outcome = () => next(width);
420
+ tui.requestRender();
421
+ return;
422
+ }
423
+ if (matchesKey(data, "escape") || matchesKey(data, "enter")) {
424
+ settled = true;
425
+ spec.onDone();
426
+ return;
427
+ }
428
+ } else {
429
+ if (matchesKey(data, "enter")) {
430
+ if (!spec.applicable) return;
431
+ settled = true;
432
+ const outcome = spec.commit();
433
+ body.outcome = () => outcome(width);
434
+ body.reset();
435
+ tui.requestRender();
436
+ return;
437
+ }
438
+ if (matchesKey(data, "escape")) {
439
+ cancel();
440
+ return;
441
+ }
442
+ if (data === "d") {
443
+ body.detail = !body.detail;
444
+ tui.requestRender();
445
+ return;
446
+ }
447
+ }
448
+ if (matchesKey(data, "pageDown") || matchesKey(data, "down")) body.scrollBy(1);
449
+ else if (matchesKey(data, "pageUp") || matchesKey(data, "up")) body.scrollBy(-1);
450
+ tui.requestRender();
451
+ },
452
+ });
453
+
454
+ const handle = showClioOverlayFrame(tui, focus, {
455
+ anchor: "center",
456
+ width,
457
+ markerId: "library-review",
458
+ title: () => (body.outcome ? "Library outcome" : spec.title),
459
+ footerHint: (innerWidth: number) => {
460
+ width = innerWidth;
461
+ return body.outcome
462
+ ? buildResponsiveHint([{ key: "R", verb: "retry refresh" }], { key: "Esc", verb: "close" })(innerWidth)
463
+ : buildResponsiveHint(
464
+ [...(spec.applicable ? [{ key: "Enter", verb: spec.verb }] : []), { key: "d", verb: "paths" }],
465
+ { key: "Esc", verb: "cancel" },
466
+ )(innerWidth);
467
+ },
468
+ });
469
+
470
+ return {
471
+ ...handle,
472
+ hide(): void {
473
+ cancel();
474
+ handle.hide();
475
+ },
476
+ };
477
+ }
478
+
479
+ export interface OpenLibraryReviewOptions {
480
+ plan: LibraryLifecyclePlan;
481
+ columns: number;
482
+ /** Apply the reviewed plan. Called only after the operator accepts. */
483
+ commit: (plan: LibraryLifecyclePlan) => LibraryApplyResult;
484
+ /** Refresh only, for a failed or skipped session refresh. */
485
+ retryRefresh: () => LibraryRefreshResult;
486
+ /** Cancel before commit: nothing was written; the caller releases the staged source. */
487
+ onCancel: () => void;
488
+ /** Closed after an outcome was shown; carries what happened so the list can redraw. */
489
+ onDone: (result: LibraryApplyResult) => void;
490
+ }
491
+
492
+ export function openLibraryReviewOverlay(tui: TUI, options: OpenLibraryReviewOptions): OverlayHandle {
493
+ let applied: LibraryApplyResult | null = null;
494
+ return openReviewOverlay(tui, {
495
+ title: `Library ${options.plan.request.operation}`,
496
+ verb: options.plan.request.operation,
497
+ columns: options.columns,
498
+ applicable: options.plan.applicable,
499
+ review: (width, detail) => formatLibraryPlanReview(options.plan, width, { detail }),
500
+ commit: () => {
501
+ applied = options.commit(options.plan);
502
+ return (width) => formatLibraryOutcome(applied as LibraryApplyResult, width);
503
+ },
504
+ retryRefresh: () => {
505
+ const refresh = options.retryRefresh();
506
+ applied = applied ? { ...applied, refresh } : applied;
507
+ return (width) => formatLibraryOutcome(applied as LibraryApplyResult, width);
508
+ },
509
+ onCancel: options.onCancel,
510
+ onDone: () => {
511
+ if (applied) options.onDone(applied);
512
+ },
513
+ });
514
+ }
515
+
516
+ export interface OpenLibraryImportOptions {
517
+ plan: LibraryImportPlan;
518
+ columns: number;
519
+ /** Apply the reviewed import. Called only after the operator accepts. */
520
+ commit: (plan: LibraryImportPlan) => LibraryImportApplyResult;
521
+ /** Project the applied import into the shared outcome shape. */
522
+ outcome: (plan: LibraryImportPlan, result: LibraryImportApplyResult) => LibraryApplyResult;
523
+ retryRefresh: () => LibraryRefreshResult;
524
+ onCancel: () => void;
525
+ onDone: (result: LibraryApplyResult) => void;
526
+ }
527
+
528
+ /**
529
+ * Review one explicit import, then show it in the same outcome widget.
530
+ *
531
+ * `/library import <path-or-url>` names a source, and that exact source is what
532
+ * gets planned and reported. The local-agent discovery surface is a separate
533
+ * way in, not a substitute for the one the operator typed.
534
+ */
535
+ export function openLibraryImportOverlay(tui: TUI, options: OpenLibraryImportOptions): OverlayHandle {
536
+ let applied: LibraryApplyResult | null = null;
537
+ return openReviewOverlay(tui, {
538
+ title: "Library import",
539
+ verb: "import",
540
+ columns: options.columns,
541
+ applicable: options.plan.action === "install",
542
+ review: (width, detail) => formatLibraryImportReview(options.plan, width, { detail }),
543
+ commit: () => {
544
+ applied = options.outcome(options.plan, options.commit(options.plan));
545
+ return (width) => formatLibraryOutcome(applied as LibraryApplyResult, width);
546
+ },
547
+ retryRefresh: () => {
548
+ const refresh = options.retryRefresh();
549
+ applied = applied ? { ...applied, refresh } : applied;
550
+ return (width) => formatLibraryOutcome(applied as LibraryApplyResult, width);
551
+ },
552
+ onCancel: options.onCancel,
553
+ onDone: () => {
554
+ if (applied) options.onDone(applied);
555
+ },
556
+ });
557
+ }
@@ -1,26 +1,14 @@
1
- /**
2
- * The Skills Hub's tab table.
3
- *
4
- * It sits in its own module rather than inside `skills-hub.ts` because the slash
5
- * registry parses `/library <kind>` against it, and the registry has to stay off
6
- * the render module graph. Pulling the whole hub overlay in for four ids made
7
- * `src/cli/run.ts` a second, disjoint reacher of the interactive theme and
8
- * `src/engine/tui.ts`, which splits the merged chunk the Stage 0 instant shell
9
- * depends on. See `tests/contracts/instant-shell-import-graph.test.ts`.
10
- *
11
- * Pure data plus its membership test: no rendering, no overlay state.
12
- * `skills-hub.ts` re-exports both symbols, so every existing importer keeps the
13
- * path it had.
14
- */
1
+ /** Pure library tab metadata; keep this outside the render graph. */
15
2
 
16
3
  import type { LibraryEntryKind } from "../../domains/resources/index.js";
17
4
 
18
- /** The hub's tabs, in the order ←/→ walks them. `skill` is the original view. */
5
+ /** Library kinds in keyboard traversal order. */
19
6
  export const LIBRARY_TABS: ReadonlyArray<{ id: LibraryEntryKind; label: string }> = [
20
7
  { id: "skill", label: "Skills" },
21
8
  { id: "agent", label: "Agents" },
22
9
  { id: "prompt", label: "Prompts" },
23
10
  { id: "fleet", label: "Fleets" },
11
+ { id: "plugin", label: "Plugins" },
24
12
  ];
25
13
 
26
14
  export function isLibraryTab(value: string): value is LibraryEntryKind {