@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,602 @@
1
+ /**
2
+ * The Library: one full-screen browser over every recipe and package this
3
+ * machine can see.
4
+ *
5
+ * Five categories, two modes and one selected scope. Browse lists install
6
+ * targets, Installed lists what actually exists here, and the selected scope is
7
+ * the copy every management key acts on. All three are drawn on a status row
8
+ * that survives a narrow terminal, because they decide what the next keystroke
9
+ * does and an operator should never have to remember them.
10
+ *
11
+ * The browser reads and reviews. It never writes: every managed change goes
12
+ * through a plan the operator sees first, and the outcome that comes back
13
+ * separates the write, the resources and the session refresh.
14
+ */
15
+
16
+ import type { LibraryImportPlan } from "../../domains/interop/index.js";
17
+ import { applyLibraryImport, planLibraryImport, releaseLibraryImport } from "../../domains/interop/index.js";
18
+ import type { PluginScope } from "../../domains/plugins/types.js";
19
+ import type {
20
+ LibraryCopyInspection,
21
+ LibraryEntryKind,
22
+ LibraryInventory,
23
+ LibraryInventoryOptions,
24
+ } from "../../domains/resources/index.js";
25
+ import { inspectLibraryCopy, libraryImportOutcome, readLibraryInventory } from "../../domains/resources/index.js";
26
+ import type { OverlayHandle, TUI } from "../../engine/tui.js";
27
+ import type { NoticeLevel } from "../command-output.js";
28
+ import type { LibraryLifecyclePlan, LibraryLifecyclePort, LibraryOperation } from "./library-lifecycle.js";
29
+ import {
30
+ buildLibraryRows,
31
+ type LibraryMode,
32
+ type LibraryRowActions,
33
+ type LibraryRowSet,
34
+ type LibraryRowSubject,
35
+ type LibraryView,
36
+ libraryRowActions,
37
+ libraryStatusLine,
38
+ libraryUseInvocation,
39
+ selectForCategory,
40
+ } from "./library-model.js";
41
+ import { openLibraryImportOverlay, openLibraryReviewOverlay } from "./library-review.js";
42
+ import { isLibraryTab, LIBRARY_TABS } from "./library-tabs.js";
43
+ import { type ListOverlayHandle, type ListOverlayItem, type ListOverlayTab, openListOverlay } from "./list-overlay.js";
44
+
45
+ export { isLibraryTab, LIBRARY_TABS };
46
+
47
+ export const LIBRARY_TITLE = "Library";
48
+
49
+ /** @internal exported for contract tests */
50
+ export const LIBRARY_EMPTY_BROWSE =
51
+ "No packages of this kind in the index. Register one with clio-coder library register <path>, or press o to import from another local agent.";
52
+ /** @internal exported for contract tests */
53
+ export const LIBRARY_EMPTY_INSTALLED =
54
+ "Nothing of this kind is installed or loaded here. Press b for Browse to see what can be installed.";
55
+
56
+ export interface LibraryOverlayDeps {
57
+ /** The package lifecycle. Plans are reviewed before anything is written. */
58
+ lifecycle: LibraryLifecyclePort;
59
+ setEditorText: (text: string) => void;
60
+ notice: (level: NoticeLevel, text: string) => void;
61
+ onClose: () => void;
62
+ /** Category the browser opens on. */
63
+ initialTab?: LibraryEntryKind;
64
+ initialMode?: LibraryMode;
65
+ initialScope?: PluginScope;
66
+ /** A package ref or resource key to select on open, from `/library inspect <ref>`. */
67
+ focus?: string;
68
+ /** An operation to review immediately on the focused row, from `/library install <ref>`. */
69
+ intent?: LibraryOperation;
70
+ /** A path or URL to import, from `/library import <path-or-url>`. */
71
+ importSource?: string;
72
+ cwd?: string;
73
+ /** Opens the `/fleet run` approval preview for an installed fleet. */
74
+ openFleetRun?: (name: string) => void;
75
+ /** Opens the local-agent discovery and adoption surface. Never called on open. */
76
+ openImport?: () => void;
77
+ /** Injectable for tests; defaults to the shared inventory read. */
78
+ readInventory?: (options: LibraryInventoryOptions) => LibraryInventory;
79
+ /** Injectable for tests; defaults to the shared explicit copy inspection. */
80
+ inspectCopy?: (ref: string, options: { cwd?: string; scope?: PluginScope }) => LibraryCopyInspection;
81
+ /** Injectable for tests; defaults to the framed review overlay. */
82
+ openReview?: typeof openLibraryReviewOverlay;
83
+ /** Injectable for tests; defaults to the live terminal width. */
84
+ columns?: () => number;
85
+ /** Injectable for tests; defaults to the framed import review. */
86
+ openImportReview?: typeof openLibraryImportOverlay;
87
+ /** Injectable for tests; defaults to the shared full-screen list overlay. */
88
+ openList?: typeof openListOverlay;
89
+ /** Injectable for tests; defaults to `planLibraryImport`. */
90
+ planImport?: typeof planLibraryImport;
91
+ /** Injectable for tests; defaults to `applyLibraryImport`. */
92
+ applyImport?: typeof applyLibraryImport;
93
+ /**
94
+ * Injectable for tests; defaults to one microtask, so the host has assigned
95
+ * this overlay's handle before an opening intent puts another one on screen.
96
+ */
97
+ scheduleInitial?: (run: () => void) => void;
98
+ }
99
+
100
+ /** The typed reference a management key sends to the lifecycle, or why it cannot. */
101
+ function requestRefFor(subject: LibraryRowSubject): { ref: string; reason?: string } {
102
+ if (subject.kind === "package" || subject.kind === "hint") return { ref: subject.record.ref };
103
+ if (subject.kind === "copy") return { ref: subject.copy.ref };
104
+ if (subject.kind === "member") return { ref: subject.owner.ref };
105
+ if (subject.kind === "recipe")
106
+ return subject.resource.owner
107
+ ? { ref: subject.resource.owner.ref }
108
+ : {
109
+ ref: "",
110
+ reason:
111
+ subject.resource.source.class === "core"
112
+ ? `${subject.resource.name} is a core recipe and has no package to manage.`
113
+ : `${subject.resource.name} was found directly in a resource root, so there is no package to manage.`,
114
+ };
115
+ return { ref: "", reason: "This row is a notice, not a package." };
116
+ }
117
+
118
+ export function openLibraryOverlay(tui: TUI, deps: LibraryOverlayDeps): OverlayHandle {
119
+ const cwd = deps.cwd ?? process.cwd();
120
+ const read = deps.readInventory ?? readLibraryInventory;
121
+ const inspect = deps.inspectCopy ?? inspectLibraryCopy;
122
+ const openReview = deps.openReview ?? openLibraryReviewOverlay;
123
+ const columns = deps.columns ?? (() => (typeof process.stdout.columns === "number" ? process.stdout.columns : 100));
124
+
125
+ const view: LibraryView = {
126
+ category: deps.initialTab ?? "plugin",
127
+ mode: deps.initialMode ?? "browse",
128
+ scope: deps.initialScope ?? "user",
129
+ };
130
+
131
+ let closed = false;
132
+ let busy = false;
133
+ /**
134
+ * The review on screen and how to abandon it.
135
+ *
136
+ * A browser that closes while a plan is open would otherwise leave a staged
137
+ * source on disk and a modal with nothing routing keys to it. Holding the
138
+ * child here is what lets `hide()` release the one and close the other.
139
+ */
140
+ let child: { hide: () => void; release: () => void } | null = null;
141
+ /** The row whose install was refused for missing requirements; a second `i` includes them. */
142
+ let pendingWithRequirements: string | null = null;
143
+
144
+ /**
145
+ * One inventory read per rebuild, shared by all five tabs.
146
+ *
147
+ * The loaders enumerate their roots for collision precedence whichever kind
148
+ * is asked for, so reading once and projecting per category costs one pass
149
+ * instead of five.
150
+ */
151
+ let inventoryCache: LibraryInventory | null = null;
152
+ let inspectionCache: { ref: string; scope?: PluginScope; inspection: LibraryCopyInspection } | null = null;
153
+ let failure: string | undefined;
154
+ const inventory = (): LibraryInventory => {
155
+ if (inventoryCache) return inventoryCache;
156
+ try {
157
+ inventoryCache = read({ cwd });
158
+ failure = undefined;
159
+ } catch (error) {
160
+ failure = `Library read failed: ${error instanceof Error ? error.message : String(error)}`;
161
+ inventoryCache = {
162
+ version: 1,
163
+ generatedAt: new Date().toISOString(),
164
+ cwd,
165
+ audience: "operator",
166
+ packages: [],
167
+ copies: [],
168
+ resources: [],
169
+ diagnostics: [],
170
+ truncated: { packages: false, copies: false, resources: false },
171
+ };
172
+ }
173
+ return inventoryCache;
174
+ };
175
+ const invalidate = (): void => {
176
+ inventoryCache = null;
177
+ inspectionCache = null;
178
+ };
179
+
180
+ const inspection = (): LibraryCopyInspection | undefined => {
181
+ const member = view.member;
182
+ if (!member) return undefined;
183
+ if (inspectionCache && inspectionCache.ref === member.ref && inspectionCache.scope === member.scope)
184
+ return inspectionCache.inspection;
185
+ try {
186
+ const result = inspect(member.ref, { cwd, ...(member.scope ? { scope: member.scope } : {}) });
187
+ inspectionCache = { ref: member.ref, ...(member.scope ? { scope: member.scope } : {}), inspection: result };
188
+ return result;
189
+ } catch (error) {
190
+ failure = `${member.ref}: ${error instanceof Error ? error.message : String(error)}`;
191
+ view.member = undefined;
192
+ return undefined;
193
+ }
194
+ };
195
+
196
+ /** Rows for one category, and the subjects behind them, rebuilt on demand. */
197
+ let rowSet: LibraryRowSet = { items: [], subjects: new Map(), notices: 0, truncated: false };
198
+ const rowsFor = (category: LibraryEntryKind): ListOverlayItem[] => {
199
+ const scoped: LibraryView = { ...view, category };
200
+ const set = buildLibraryRows({
201
+ inventory: selectForCategory(inventory(), scoped),
202
+ view: scoped,
203
+ ...(scoped.category === view.category && view.member ? { inspection: inspection() } : {}),
204
+ ...(failure ? { failure } : {}),
205
+ });
206
+ if (category === view.category) rowSet = set;
207
+ return set.items;
208
+ };
209
+
210
+ const tabs: ListOverlayTab[] = LIBRARY_TABS.map((tab) => ({
211
+ id: tab.id,
212
+ label: tab.label,
213
+ items: () => rowsFor(tab.id),
214
+ }));
215
+
216
+ // eslint-disable-next-line prefer-const -- the action closures need the handle they are opened from.
217
+ let handle: ListOverlayHandle;
218
+
219
+ const selected = (item: ListOverlayItem | undefined): LibraryRowSubject | undefined =>
220
+ item ? rowSet.subjects.get(item.id) : undefined;
221
+
222
+ const redraw = (keepSelection?: string): void => {
223
+ if (closed) return;
224
+ invalidate();
225
+ handle.refreshTabs();
226
+ if (keepSelection) handle.selectById(keepSelection);
227
+ };
228
+
229
+ /**
230
+ * Review one managed change and, only if the operator accepts it, apply it.
231
+ *
232
+ * Nothing here writes. The plan is built, the browser steps aside so the
233
+ * review owns the screen, and the two exits are exact: cancel releases the
234
+ * staged source and writes nothing, and an applied plan comes back with the
235
+ * outcome the list is then redrawn against.
236
+ */
237
+ const manage = (operation: LibraryOperation, item: ListOverlayItem | undefined): void => {
238
+ if (busy) return;
239
+ const subject = selected(item);
240
+ if (!subject) {
241
+ deps.notice("warn", "Select a row first; b, s, o and R work without one.");
242
+ return;
243
+ }
244
+ const actions = libraryRowActions(subject, view);
245
+ const allowed: Record<LibraryOperation, boolean> = {
246
+ install: actions.install,
247
+ update: actions.update,
248
+ enable: actions.enable,
249
+ disable: actions.enable,
250
+ remove: actions.remove,
251
+ };
252
+ const { ref, reason } = requestRefFor(subject);
253
+ if (!ref || !allowed[operation]) {
254
+ deps.notice("warn", reason ?? actions.reasons[0] ?? `${operation} is not available on this row.`);
255
+ return;
256
+ }
257
+ const withRequirements = operation === "install" && pendingWithRequirements === ref;
258
+ let plan: LibraryLifecyclePlan;
259
+ try {
260
+ plan = deps.lifecycle.plan({
261
+ operation,
262
+ ref,
263
+ scope: view.scope,
264
+ cwd,
265
+ ...(withRequirements ? { withRequirements: true } : {}),
266
+ });
267
+ } catch (error) {
268
+ deps.notice("error", `${ref}: ${error instanceof Error ? error.message : String(error)}`);
269
+ return;
270
+ }
271
+ const missing = plan.steps.flatMap((step) => step.dependencies.missing);
272
+ if (operation === "install" && !plan.applicable && missing.length > 0 && !withRequirements) {
273
+ deps.lifecycle.release(plan);
274
+ pendingWithRequirements = ref;
275
+ deps.notice("error", `${ref} needs ${missing.join(", ")}; press i again to review them with it.`);
276
+ return;
277
+ }
278
+ pendingWithRequirements = null;
279
+ busy = true;
280
+ const selectionId = item?.id;
281
+ const restore = (): void => {
282
+ busy = false;
283
+ if (closed) return;
284
+ handle.setHidden(false);
285
+ handle.focus();
286
+ };
287
+ handle.setHidden(true);
288
+ child = { hide: () => review.hide(), release: () => deps.lifecycle.release(plan) };
289
+ const review = openReview(tui, {
290
+ plan,
291
+ columns: columns(),
292
+ commit: (accepted) => deps.lifecycle.apply(accepted),
293
+ retryRefresh: () => deps.lifecycle.retryRefresh(cwd),
294
+ onCancel: () => {
295
+ child = null;
296
+ deps.lifecycle.release(plan);
297
+ restore();
298
+ deps.notice("info", `${ref}: cancelled; nothing was written.`);
299
+ review.hide();
300
+ },
301
+ onDone: (result) => {
302
+ child = null;
303
+ restore();
304
+ const level: NoticeLevel = result.failed > 0 ? "error" : result.committed > 0 ? "success" : "info";
305
+ deps.notice(
306
+ level,
307
+ `${ref}: ${result.committed} committed, ${result.failed} failed, ${result.unattempted} unattempted; session refresh ${result.refresh.status}.`,
308
+ );
309
+ // A partial batch still redraws: the writes that landed are real.
310
+ if (result.committed > 0) redraw(selectionId);
311
+ review.hide();
312
+ },
313
+ });
314
+ };
315
+
316
+ /**
317
+ * Review the exact source `/library import` named.
318
+ *
319
+ * The source the operator typed is the source that gets planned. Local-agent
320
+ * discovery is a different way in, reached with `o`, and it never stands in
321
+ * for a path or URL that was given explicitly.
322
+ */
323
+ const importSource = (source: string): void => {
324
+ if (busy) return;
325
+ let plan: LibraryImportPlan;
326
+ try {
327
+ plan = (deps.planImport ?? planLibraryImport)(source, { cwd, scope: view.scope });
328
+ } catch (error) {
329
+ deps.notice("error", `import ${source}: ${error instanceof Error ? error.message : String(error)}`);
330
+ return;
331
+ }
332
+ busy = true;
333
+ const restore = (): void => {
334
+ busy = false;
335
+ if (closed) return;
336
+ handle.setHidden(false);
337
+ handle.focus();
338
+ };
339
+ handle.setHidden(true);
340
+ child = { hide: () => review.hide(), release: () => releaseLibraryImport(plan) };
341
+ const review = (deps.openImportReview ?? openLibraryImportOverlay)(tui, {
342
+ plan,
343
+ columns: columns(),
344
+ commit: (accepted) => (deps.applyImport ?? applyLibraryImport)(accepted, true),
345
+ outcome: (accepted, result) => {
346
+ const outcome = libraryImportOutcome(accepted, result);
347
+ const committed = outcome.status === "committed";
348
+ return {
349
+ planId: accepted.reviewFingerprint,
350
+ dryRun: false,
351
+ outcomes: [outcome],
352
+ committed: committed ? 1 : 0,
353
+ failed: outcome.status === "failed" ? 1 : 0,
354
+ unattempted: outcome.status === "unattempted" ? 1 : 0,
355
+ refresh: committed
356
+ ? deps.lifecycle.retryRefresh(cwd)
357
+ : { status: "not-applicable", reason: "nothing was imported" },
358
+ };
359
+ },
360
+ retryRefresh: () => deps.lifecycle.retryRefresh(cwd),
361
+ onCancel: () => {
362
+ child = null;
363
+ // The staged copy of the vendor tree is released here. Cancel means the
364
+ // reviewed bytes leave no trace, not merely that nothing was installed.
365
+ releaseLibraryImport(plan);
366
+ restore();
367
+ deps.notice("info", `import ${source}: cancelled; nothing was written.`);
368
+ review.hide();
369
+ },
370
+ onDone: (result) => {
371
+ // Apply released the staged source itself, whether it installed or refused.
372
+ child = null;
373
+ restore();
374
+ deps.notice(
375
+ result.failed > 0 ? "error" : "success",
376
+ `import ${source}: ${result.committed} committed, ${result.failed} failed; session refresh ${result.refresh.status}.`,
377
+ );
378
+ if (result.committed > 0) redraw();
379
+ review.hide();
380
+ },
381
+ });
382
+ };
383
+
384
+ /** Fill the composer, or open the surface a fleet's use actually leads to. */
385
+ const use = (item: ListOverlayItem | undefined): void => {
386
+ const subject = selected(item);
387
+ if (!subject) return;
388
+ if (subject.kind !== "recipe") {
389
+ deps.notice("info", "Only a loaded recipe has a use action; press Enter to open a package's members.");
390
+ return;
391
+ }
392
+ const actions = libraryRowActions(subject, view);
393
+ if (!actions.use) {
394
+ deps.notice("warn", actions.reasons[0] ?? `${subject.resource.name} is not usable in this state.`);
395
+ return;
396
+ }
397
+ if (subject.resource.kind === "fleet") {
398
+ deps.openFleetRun?.(subject.resource.name);
399
+ return;
400
+ }
401
+ const invocation = libraryUseInvocation(subject.resource.kind, subject.resource.name);
402
+ if (!invocation) return;
403
+ deps.setEditorText(invocation);
404
+ deps.onClose();
405
+ };
406
+
407
+ /** Enter: open what this row contains. A package opens its members, never its own tab. */
408
+ const open = (item: ListOverlayItem): void => {
409
+ const subject = selected(item);
410
+ if (!subject) return;
411
+ if (subject.kind === "package") {
412
+ const here = subject.record.copies.find((copy) => copy.scope === view.scope) ?? subject.record.copies[0];
413
+ if (!here) {
414
+ handle.toggleDetail();
415
+ deps.notice(
416
+ "info",
417
+ `${subject.record.ref} is not installed here; its catalog hints describe what it says it contains.`,
418
+ );
419
+ return;
420
+ }
421
+ view.member = { ref: subject.record.ref, scope: here.scope };
422
+ } else if (subject.kind === "copy") {
423
+ view.member = { ref: subject.copy.ref, scope: subject.copy.scope };
424
+ } else {
425
+ handle.toggleDetail();
426
+ return;
427
+ }
428
+ inspectionCache = null;
429
+ handle.refreshTabs();
430
+ };
431
+
432
+ const status = (width: number): string =>
433
+ libraryStatusLine(view, { rows: rowSet.items.length, notices: rowSet.notices, truncated: rowSet.truncated }, width);
434
+
435
+ /**
436
+ * The keys the selected row actually offers.
437
+ *
438
+ * A footer is a promise. An available package that is not installed here has
439
+ * nothing to remove, and advertising `r` on it while hiding `i` told the
440
+ * operator the opposite of the truth. Each entry below is present only when
441
+ * the row under the cursor would accept that key; the reasons for the absent
442
+ * ones are in the detail pane.
443
+ */
444
+ const hints = (selected: ListOverlayItem | undefined): Array<{ key: string; verb: string }> => {
445
+ const subject = selected ? rowSet.subjects.get(selected.id) : undefined;
446
+ if (!subject || subject.kind === "notice") return [];
447
+ const actions = libraryRowActions(subject, view);
448
+ const entries: Array<{ key: string; verb: string }> = [];
449
+ if (actions.use) entries.push({ key: "v", verb: "use" });
450
+ if (actions.open) entries.push({ key: "Enter", verb: "members" });
451
+ if (actions.install) entries.push({ key: "i", verb: "install" });
452
+ if (actions.enable)
453
+ entries.push({
454
+ key: "e",
455
+ verb:
456
+ subject.kind === "copy" && !subject.copy.enabled
457
+ ? "enable"
458
+ : subject.kind === "member" && !subject.owner.enabled
459
+ ? "enable"
460
+ : "disable",
461
+ });
462
+ if (actions.update) entries.push({ key: "u", verb: "update" });
463
+ if (actions.remove) entries.push({ key: "r", verb: "remove" });
464
+ return entries;
465
+ };
466
+
467
+ handle = (deps.openList ?? openListOverlay)(tui, {
468
+ markerId: "library",
469
+ title: LIBRARY_TITLE,
470
+ items: [],
471
+ tabs,
472
+ // Always explicit: the list defaults to its first tab, which is Skills, while
473
+ // this view's category defaults to Plugins. Letting those disagree drew one
474
+ // tab's rows under another tab's name and pointed every action at the wrong
475
+ // category.
476
+ activeTabId: view.category,
477
+ onTabChange: (tabId) => {
478
+ if (isLibraryTab(tabId)) view.category = tabId;
479
+ view.member = undefined;
480
+ pendingWithRequirements = null;
481
+ inspectionCache = null;
482
+ },
483
+ filterable: true,
484
+ explicitSearch: true,
485
+ fullScreen: true,
486
+ layout: "split",
487
+ emptyMessage: () => (view.mode === "browse" ? LIBRARY_EMPTY_BROWSE : LIBRARY_EMPTY_INSTALLED),
488
+ status,
489
+ onBack: {
490
+ active: () => view.member !== undefined,
491
+ back: () => {
492
+ view.member = undefined;
493
+ inspectionCache = null;
494
+ handle.refreshTabs();
495
+ },
496
+ },
497
+ globalHints: [
498
+ { key: "b", verb: "browse/installed", short: "view", critical: true },
499
+ { key: "s", verb: "user/project", short: "scope", critical: true },
500
+ { key: "o", verb: "import" },
501
+ { key: "R", verb: "refresh" },
502
+ ],
503
+ globalActions: {
504
+ b: () => {
505
+ view.mode = view.mode === "browse" ? "installed" : "browse";
506
+ view.member = undefined;
507
+ redraw();
508
+ },
509
+ s: () => {
510
+ view.scope = view.scope === "user" ? "project" : "user";
511
+ deps.notice("info", `Library actions now select ${view.scope} scope.`);
512
+ redraw();
513
+ },
514
+ o: () => {
515
+ if (!deps.openImport) {
516
+ deps.notice("warn", "Import is unavailable in this session.");
517
+ return;
518
+ }
519
+ deps.notice("info", "Import reviews another local agent's resources before anything is written.");
520
+ deps.openImport();
521
+ },
522
+ R: () => {
523
+ redraw();
524
+ deps.notice("info", "Library re-read from disk.");
525
+ },
526
+ },
527
+ hints,
528
+ onSelect: open,
529
+ actions: {
530
+ v: use,
531
+ i: (item) => manage("install", item),
532
+ u: (item) => manage("update", item),
533
+ r: (item) => manage("remove", item),
534
+ e: (item) => {
535
+ const subject = selected(item);
536
+ const enabled =
537
+ subject?.kind === "copy"
538
+ ? subject.copy.enabled
539
+ : subject?.kind === "member"
540
+ ? subject.owner.enabled
541
+ : subject?.kind === "recipe"
542
+ ? true
543
+ : undefined;
544
+ manage(enabled === false ? "enable" : "disable", item);
545
+ },
546
+ },
547
+ onClose: deps.onClose,
548
+ });
549
+
550
+ /**
551
+ * What `/library <verb> <ref>` asked for, run after the caller has this
552
+ * handle.
553
+ *
554
+ * A review opened during construction would be assigned to the host's
555
+ * overlay slot and then immediately overwritten by the browser's own handle,
556
+ * which is how a modal ends up on screen with nothing routing keys to it.
557
+ * Deferring one turn keeps the two assignments in order.
558
+ */
559
+ const start = (): void => {
560
+ if (closed) return;
561
+ if (deps.importSource) {
562
+ importSource(deps.importSource);
563
+ return;
564
+ }
565
+ if (!deps.focus) return;
566
+ const target = [...rowSet.subjects.entries()].find(([id, subject]) => {
567
+ if (subject.kind === "recipe") return subject.resource.key === deps.focus || subject.resource.name === deps.focus;
568
+ if (subject.kind === "package") return subject.record.ref === deps.focus || subject.record.name === deps.focus;
569
+ if (subject.kind === "copy") return subject.copy.ref === deps.focus || subject.copy.name === deps.focus;
570
+ return id === deps.focus;
571
+ });
572
+ if (!target) {
573
+ deps.notice(
574
+ "warn",
575
+ `${deps.focus} is not in this category. Use the arrow keys for another category, / to search, or a typed kind:name reference.`,
576
+ );
577
+ return;
578
+ }
579
+ handle.selectById(target[0]);
580
+ if (deps.intent) manage(deps.intent, { id: target[0], label: "" });
581
+ };
582
+ (deps.scheduleInitial ?? queueMicrotask)(start);
583
+
584
+ return {
585
+ ...handle,
586
+ hide(): void {
587
+ closed = true;
588
+ // A pending review dies with the browser that opened it, and its staged
589
+ // source is released rather than left behind in the temp tree.
590
+ const pending = child;
591
+ child = null;
592
+ if (pending) {
593
+ pending.release();
594
+ pending.hide();
595
+ }
596
+ handle.hide();
597
+ },
598
+ };
599
+ }
600
+
601
+ /** @internal exported for contract tests */
602
+ export type { LibraryRowActions };