@iowarp/clio-coder 0.4.5 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (700) hide show
  1. package/.claude-plugin/marketplace.json +283 -0
  2. package/CHANGELOG.md +74 -0
  3. package/CONTRIBUTING.md +116 -38
  4. package/NOTICE +24 -0
  5. package/README.md +341 -682
  6. package/dist/{acp-H3CU2HBQ.js → acp-W3Y3TRHD.js} +12 -12
  7. package/dist/{agents-IXQQZ7BD.js → agents-J4ICNLQ3.js} +57 -56
  8. package/dist/assets/codewiki.json +1 -1
  9. package/dist/assets/tui-notices/get-east-asian-width-LICENSE +9 -0
  10. package/dist/assets/tui-notices/marked-LICENSE +44 -0
  11. package/dist/assets/tui-notices/pi-tui-LICENSE +21 -0
  12. package/dist/{auth-R7KYF7N3.js → auth-X2UJUMOC.js} +25 -25
  13. package/dist/{builtins-CRFDQUVP.js → builtins-XLXWWSRF.js} +6 -6
  14. package/dist/{chunk-DZK63TZJ.js → chunk-24S3DN22.js} +336 -612
  15. package/dist/{chunk-NTK3WTHM.js → chunk-24TOGHPO.js} +2 -2
  16. package/dist/{chunk-M6TAYK66.js → chunk-2O2LVQQK.js} +11 -4
  17. package/dist/{chunk-OQM5IVJY.js → chunk-34XHRVKG.js} +3 -3
  18. package/dist/{chunk-LY4N4TTL.js → chunk-3LXJOICS.js} +2 -2
  19. package/dist/{chunk-SE4ZKILO.js → chunk-3XE4NRLF.js} +30 -9
  20. package/dist/{chunk-YYB3MC65.js → chunk-4MFBBY2Z.js} +3 -3
  21. package/dist/{chunk-5VTJP36Q.js → chunk-4N2RZ4TO.js} +2 -2
  22. package/dist/{chunk-FKIOX6DS.js → chunk-4QKAITQT.js} +10 -5
  23. package/dist/chunk-4UHVS5T7.js +207 -0
  24. package/dist/{chunk-VLPTKCKT.js → chunk-5AJPUR72.js} +6 -6
  25. package/dist/{chunk-5CY4Q6QI.js → chunk-5EQO5NWP.js} +105 -3
  26. package/dist/{chunk-RXIOCVBZ.js → chunk-65BGHOUR.js} +8 -5
  27. package/dist/{chunk-T53XI6I7.js → chunk-6CA2BHOR.js} +2 -2
  28. package/dist/{chunk-HL26ADLH.js → chunk-6CB2IL4N.js} +2 -1
  29. package/dist/{chunk-HR3HPQ76.js → chunk-6LRLOJHQ.js} +3 -3
  30. package/dist/{chunk-HXHFDHB6.js → chunk-6TAATXXH.js} +6 -6
  31. package/dist/{chunk-WFKDPU7U.js → chunk-6YHPAAZR.js} +3 -3
  32. package/dist/{chunk-ZMZQEBKI.js → chunk-7EEGBKV4.js} +11 -11
  33. package/dist/{chunk-BS4GAMUB.js → chunk-A67NR5AT.js} +2 -2
  34. package/dist/{chunk-WJIMKGD6.js → chunk-BAU36233.js} +8 -8
  35. package/dist/{chunk-MDU3C27C.js → chunk-BO4XV5VX.js} +8 -8
  36. package/dist/{chunk-KF6GFW6O.js → chunk-BQQ5MXUC.js} +11 -11
  37. package/dist/{chunk-K6RDB7IA.js → chunk-C3G5PNUO.js} +23 -23
  38. package/dist/{chunk-SRZOW5L2.js → chunk-C6GEXX4L.js} +1 -1
  39. package/dist/{chunk-U2JOLB7O.js → chunk-CE64C5K5.js} +227 -72
  40. package/dist/chunk-CP3HIR5H.js +2119 -0
  41. package/dist/{chunk-BBV5TKE6.js → chunk-CPXGJI2A.js} +2 -2
  42. package/dist/{chunk-5DDOTTG4.js → chunk-CULVKYTK.js} +5 -5
  43. package/dist/{chunk-F34AR6O3.js → chunk-D2T66PDV.js} +6 -6
  44. package/dist/{chunk-NF3BK5WR.js → chunk-DACXIVVF.js} +5 -5
  45. package/dist/{chunk-4SVIVOMC.js → chunk-DLIYANB7.js} +20 -15
  46. package/dist/{chunk-E3BQTQUP.js → chunk-DO7M3LSX.js} +9 -9
  47. package/dist/{chunk-2QPI3TR3.js → chunk-DVJL77SO.js} +2 -2
  48. package/dist/chunk-EM2WNQS2.js +93 -0
  49. package/dist/{chunk-ODUTYZIU.js → chunk-EUEXGXXR.js} +5 -5
  50. package/dist/{chunk-UL36QJX6.js → chunk-EUZRMP4Y.js} +18 -16
  51. package/dist/{chunk-R6MAYTMS.js → chunk-G4LGUTOE.js} +4 -4
  52. package/dist/{chunk-CBSKDFWL.js → chunk-GEVQNST4.js} +2 -2
  53. package/dist/{chunk-XXBQKW32.js → chunk-GFQ7P2UF.js} +7 -7
  54. package/dist/{chunk-SBZX6ARC.js → chunk-GI5RRMAH.js} +14 -14
  55. package/dist/{chunk-KDWLXVMN.js → chunk-GVZFCJHE.js} +343 -113
  56. package/dist/{chunk-633EXGZA.js → chunk-GXIWHXDB.js} +3 -3
  57. package/dist/{chunk-LUL5Z66S.js → chunk-HOX4YZ2K.js} +6 -5
  58. package/dist/chunk-HRAKUPIH.js +57 -0
  59. package/dist/{chunk-KYKNBD4Y.js → chunk-IJMW64DX.js} +978 -258
  60. package/dist/{chunk-DIMRLNIC.js → chunk-IMOD2YPV.js} +16 -9
  61. package/dist/{chunk-6CDNRHWH.js → chunk-IQCNVLO6.js} +28 -8
  62. package/dist/{chunk-UTUNT5QL.js → chunk-ISNCCX42.js} +9 -9
  63. package/dist/{chunk-RLTT5GVY.js → chunk-IZYTT3CD.js} +9 -5
  64. package/dist/{chunk-5ZMXGW7P.js → chunk-KAFMW7WM.js} +4 -85
  65. package/dist/chunk-KKEYGFX4.js +915 -0
  66. package/dist/{chunk-HHVJNVUJ.js → chunk-KS7ETA3P.js} +2 -2
  67. package/dist/{chunk-UXAC2FX4.js → chunk-L3Z5ANCV.js} +7 -7
  68. package/dist/{chunk-EHCPSZJF.js → chunk-LBFQMYS3.js} +2 -2
  69. package/dist/{chunk-QEQISF75.js → chunk-LK2FN5JY.js} +1 -1
  70. package/dist/{chunk-URBGEOH3.js → chunk-M6Z2V6YU.js} +5 -5
  71. package/dist/{chunk-DRD2A54W.js → chunk-MBJO5VNZ.js} +18 -18
  72. package/dist/chunk-MNQN3X6Y.js +595 -0
  73. package/dist/{chunk-GXCCHKN6.js → chunk-MZHXENL7.js} +7 -7
  74. package/dist/chunk-MZNWZUJM.js +1801 -0
  75. package/dist/{chunk-7YJWEF2L.js → chunk-N37QC5FV.js} +5 -5
  76. package/dist/{chunk-WLMSOT73.js → chunk-NCCQ6DVS.js} +7 -7
  77. package/dist/{chunk-TZ7MFRG4.js → chunk-NO7J45X6.js} +170 -53
  78. package/dist/chunk-OH3YYA3B.js +15 -0
  79. package/dist/{chunk-22PQ4TX4.js → chunk-P4DL2LM5.js} +16 -77
  80. package/dist/{chunk-R6MICQYU.js → chunk-PFLOULP3.js} +4 -4
  81. package/dist/{chunk-MC3JSVR6.js → chunk-QJMRYTCX.js} +7 -7
  82. package/dist/{chunk-ILJ7DWGE.js → chunk-QKWL7SYE.js} +12 -12
  83. package/dist/chunk-R2CT5YDO.js +66 -0
  84. package/dist/chunk-RFCKPS2V.js +26 -0
  85. package/dist/{chunk-ONRTXOZY.js → chunk-RTLNFZMD.js} +12 -4
  86. package/dist/{chunk-U7H5WRG5.js → chunk-RXFPB32E.js} +8 -6
  87. package/dist/{chunk-S32UQ5GL.js → chunk-SEDI5K5B.js} +18 -18
  88. package/dist/{chunk-ICO4TQ2F.js → chunk-SELG4SUR.js} +41 -25
  89. package/dist/{chunk-YEJIG7LN.js → chunk-SER7RRAE.js} +27 -832
  90. package/dist/{chunk-K2HL3GBL.js → chunk-T4TY5GG3.js} +165 -15
  91. package/dist/chunk-T7QQBNLH.js +691 -0
  92. package/dist/{chunk-HGSLRG33.js → chunk-TLTGZTXI.js} +3 -3
  93. package/dist/chunk-TZ6UVP2H.js +637 -0
  94. package/dist/{chunk-EWD5P3GK.js → chunk-TZHN5ITX.js} +13 -41
  95. package/dist/{chunk-7TKWWPD7.js → chunk-U3TPUXOQ.js} +398 -253
  96. package/dist/{chunk-GNQRWTMY.js → chunk-UA3W4FGC.js} +6 -6
  97. package/dist/{chunk-O2RQ7LCK.js → chunk-UA6W4XFJ.js} +2 -2
  98. package/dist/chunk-UWD3JD5X.js +709 -0
  99. package/dist/chunk-V4ZKOKRB.js +13433 -0
  100. package/dist/{chunk-NC4KV7EL.js → chunk-VCRVEDUC.js} +5 -5
  101. package/dist/{chunk-I7VLWRK2.js → chunk-VMATUZB6.js} +12 -10
  102. package/dist/{chunk-J2FYEQ5L.js → chunk-VTYHHQ57.js} +2 -2
  103. package/dist/chunk-WB7POC6M.js +891 -0
  104. package/dist/{chunk-GVYWZNRK.js → chunk-WBVKKTUT.js} +2 -2
  105. package/dist/{chunk-EHOSNVVM.js → chunk-WLHX3MM5.js} +6 -2
  106. package/dist/{chunk-SDWNDICN.js → chunk-WN552PKN.js} +573 -316
  107. package/dist/{chunk-TEG3RYVZ.js → chunk-WT5TRMO4.js} +51 -26
  108. package/dist/{chunk-NY6IWDVU.js → chunk-WURGVOZJ.js} +56 -12
  109. package/dist/{chunk-7WUZEB2M.js → chunk-XR3XJN2M.js} +2 -2
  110. package/dist/chunk-XW2UZICE.js +372 -0
  111. package/dist/{chunk-FSTIBAGM.js → chunk-XZ6UFQ52.js} +11 -11
  112. package/dist/chunk-Y3JU5RPK.js +8 -0
  113. package/dist/chunk-YKRJTYNP.js +1143 -0
  114. package/dist/{chunk-7HBHHVCK.js → chunk-YPRSNUTC.js} +2 -2
  115. package/dist/{chunk-PWWSIB2A.js → chunk-ZGIGW4ZG.js} +5 -5
  116. package/dist/cli/index.js +34 -36
  117. package/dist/{clio-5I2IBFYL.js → clio-L2P7S2R2.js} +9 -9
  118. package/dist/{code-nav-YXIAEZVS.js → code-nav-B5LNX4KU.js} +25 -25
  119. package/dist/{components-TNIKXCBH.js → components-63MMQKUT.js} +6 -6
  120. package/dist/{config-Y2JDJ3JJ.js → config-YXARKGTX.js} +81 -77
  121. package/dist/configure-LMVQJ46J.js +85 -0
  122. package/dist/{context-QQ53HSGJ.js → context-7HJEWTTP.js} +92 -48
  123. package/dist/{context-S2EEC3EJ.js → context-XSZKKFBW.js} +14 -14
  124. package/dist/{context-P5YSEO55.js → context-YG2LZDYZ.js} +67 -64
  125. package/dist/{context-clear-TMEQCOTH.js → context-clear-AC5NXHM2.js} +64 -61
  126. package/dist/{context-index-HP2JFUWA.js → context-index-KKTPRV5G.js} +3 -3
  127. package/dist/{context-map-INTXD54D.js → context-map-T7ROR5D5.js} +4 -4
  128. package/dist/{context-working-set-CNLSQN5K.js → context-working-set-F4Q4J3NS.js} +15 -12
  129. package/dist/{detail-5572VLBO.js → detail-H73BEF2N.js} +65 -62
  130. package/dist/{dispatch-runner-FRHD6P2O.js → dispatch-runner-3RY5FSJC.js} +83 -80
  131. package/dist/{doctor-N3LCM2LG.js → doctor-EQYJOGUG.js} +47 -32
  132. package/dist/{eval-BUU3ZOUZ.js → eval-4P7O6CCE.js} +114 -50
  133. package/dist/{evidence-DTGEN456.js → evidence-D6GUSYJW.js} +64 -61
  134. package/dist/{evidence-SQ5DNFEN.js → evidence-O76QF7TZ.js} +69 -65
  135. package/dist/{evolve-IJNUFZDS.js → evolve-H47BCETS.js} +65 -62
  136. package/dist/{extensions-YVRHX6ZI.js → extensions-NNL3ZOCU.js} +98 -20
  137. package/dist/{fleet-ZNNVSYFO.js → fleet-KMNS6NOM.js} +115 -107
  138. package/dist/{fleet-commands-5YE7NPJL.js → fleet-commands-DOWSYCBX.js} +15 -15
  139. package/dist/{fleet-decisions-3SBSCTCW.js → fleet-decisions-S3PTZV2D.js} +9 -9
  140. package/dist/{fleet-graph-6HHPWF5T.js → fleet-graph-F2DE2TME.js} +26 -24
  141. package/dist/{fleet-inspect-JEYMGCGC.js → fleet-inspect-EN2Q6IVB.js} +67 -63
  142. package/dist/{fleet-preflight-QRSHIIDE.js → fleet-preflight-FRLETDD3.js} +3 -3
  143. package/dist/{fleet-validate-4PM4GDDL.js → fleet-validate-B2XDLS57.js} +28 -29
  144. package/dist/{fleet-verify-NJDTHTO3.js → fleet-verify-4JKUWGJ7.js} +64 -61
  145. package/dist/{fleet-view-UP2BWQQY.js → fleet-view-BHJFW26B.js} +67 -63
  146. package/dist/{init-S3GZQ5ZF.js → init-XAT5N5YM.js} +86 -80
  147. package/dist/interop-FVECHFKG.js +246 -0
  148. package/dist/{inventory-K2OZ36YJ.js → inventory-7KFQGLCV.js} +67 -63
  149. package/dist/library-NY2XOT75.js +492 -0
  150. package/dist/library-QAPAO23R.js +306 -0
  151. package/dist/library-import-5Y6MAS3R.js +183 -0
  152. package/dist/library-inventory-JT6HWITQ.js +56 -0
  153. package/dist/library-validation-EQUH25DC.js +42 -0
  154. package/dist/{memory-OQOXQGYD.js → memory-DYVTTCP6.js} +65 -62
  155. package/dist/{models-3IK2Y5WE.js → models-MASFJ6Y2.js} +51 -38
  156. package/dist/{monitor-FTJLTKCQ.js → monitor-YMP4NXJJ.js} +73 -69
  157. package/dist/{orchestrator-N47O7SFD.js → orchestrator-AFQRRTEI.js} +4255 -2845
  158. package/dist/{panes-7BTYH3XQ.js → panes-D3Y2KFG5.js} +4 -4
  159. package/dist/{panes-WPOMEMRH.js → panes-NICTHQCV.js} +7 -7
  160. package/dist/{paths-J3KN7UAO.js → paths-PSFAUIGO.js} +5 -5
  161. package/dist/{preload-65U34NG6.js → preload-5Q7VXRFJ.js} +64 -61
  162. package/dist/{reset-MUVQDLNL.js → reset-7NKZK7JN.js} +11 -9
  163. package/dist/{resources-LM76COAO.js → resources-NILSIZAT.js} +94 -38
  164. package/dist/{run-3VFZQ33N.js → run-BPZGEBZV.js} +131 -114
  165. package/dist/{share-4JUB4BL7.js → share-EZ6ERBMH.js} +31 -28
  166. package/dist/skills-BTVVNYVM.js +100 -0
  167. package/dist/{skills-eval-G6T57L7M.js → skills-eval-UY34MNK7.js} +117 -78
  168. package/dist/{skills-inventory-WLM46PJH.js → skills-inventory-JDHSIA7I.js} +30 -25
  169. package/dist/{slash-commands-GBARG3Y7.js → slash-commands-K4FNQ2AT.js} +53 -49
  170. package/dist/{steer-S7D7IKPU.js → steer-2B3EQGFH.js} +4 -4
  171. package/dist/{support-5VAEC32W.js → support-L2SOL3IE.js} +7 -7
  172. package/dist/{targets-N5REUETU.js → targets-44VKGFLN.js} +69 -47
  173. package/dist/{tasks-6BVY5YZF.js → tasks-3KODKFU7.js} +14 -14
  174. package/dist/{terminal-lease-57UEOJKS.js → terminal-lease-LXA7MMPO.js} +32 -19
  175. package/dist/{tools-6OCQ6SVB.js → tools-3UB7TEVR.js} +7 -7
  176. package/dist/{trace-JHLXWUMN.js → trace-TAMIU4OJ.js} +5 -4
  177. package/dist/{tui-primitives-RCY2HN7G.js → tui-primitives-A6MUW32V.js} +3 -2
  178. package/dist/{uninstall-FXYMFFRT.js → uninstall-QYVRPEM4.js} +9 -9
  179. package/dist/{upgrade-4HD5HAIV.js → upgrade-7PMKM2JH.js} +17 -18
  180. package/dist/{usage-4GWM2WWP.js → usage-6EQV7EQK.js} +77 -73
  181. package/dist/{verifiers-GSKWKWVG.js → verifiers-JLITWSHU.js} +16 -16
  182. package/dist/{verify-3AS3ULCY.js → verify-T7NAEVIG.js} +13 -13
  183. package/dist/{web-fetch-MQN4FH3X.js → web-fetch-W4TNW4Q7.js} +4 -4
  184. package/dist/{wiki-generate-7BV7XWIY.js → wiki-generate-T2TJQJUA.js} +90 -84
  185. package/dist/{with-panes-OFTNAR4Y.js → with-panes-CHFC7HGI.js} +4 -4
  186. package/dist/worker/entry.js +297 -88
  187. package/docs/README.md +43 -0
  188. package/docs/architecture/architecture.md +8 -7
  189. package/docs/architecture/artifact-versions.md +3 -3
  190. package/docs/architecture/context-engine.md +36 -2
  191. package/docs/architecture/library.md +32 -0
  192. package/docs/architecture/middleware-and-components.md +1 -1
  193. package/docs/architecture/model-catalog.md +21 -1
  194. package/docs/architecture/pi-boundary.md +18 -0
  195. package/docs/architecture/prompt-envelope-and-tools.md +5 -5
  196. package/docs/architecture/safety-model.md +21 -2
  197. package/docs/architecture/session-lifecycle.md +12 -1
  198. package/docs/architecture/tui-design.md +153 -39
  199. package/docs/architecture/worker-context.md +106 -0
  200. package/docs/guide/authoring-plugins.md +160 -0
  201. package/docs/guide/built-in-agents.md +5 -5
  202. package/docs/guide/commands-and-modes.md +186 -80
  203. package/docs/guide/configuration-and-targets.md +123 -28
  204. package/docs/guide/configuration-reference.md +36 -38
  205. package/docs/guide/environment-variables.md +2 -2
  206. package/docs/guide/exit-codes-and-output.md +1 -1
  207. package/docs/guide/extensions-and-sharing.md +93 -53
  208. package/docs/guide/fleet-dispatch.md +32 -10
  209. package/docs/guide/glossary.md +2 -2
  210. package/docs/guide/harness-extensions.md +291 -0
  211. package/docs/guide/installation-and-lifecycle.md +53 -20
  212. package/docs/guide/interop.md +243 -0
  213. package/docs/guide/panes-and-files.md +3 -3
  214. package/docs/guide/plugins.md +80 -0
  215. package/docs/guide/resource-library.md +111 -45
  216. package/docs/guide/skills-marketplace.md +35 -72
  217. package/docs/guide/tool-usage.md +19 -7
  218. package/docs/guide/troubleshooting.md +1 -1
  219. package/docs/process/development-pipeline.md +15 -15
  220. package/docs/process/documentation-coverage.md +29 -2
  221. package/docs/process/documentation-guide.md +15 -7
  222. package/docs/process/eval-runner.md +8 -3
  223. package/docs/process/performance-methodology.md +1 -1
  224. package/docs/process/release-cut-checklist.md +22 -6
  225. package/docs/process/scientific-validation.md +23 -0
  226. package/evals/scalar-decision-machinery.ts +1 -1
  227. package/examples/extensions/README.md +67 -0
  228. package/examples/extensions/lab-status/clio-coder-extension.json +14 -0
  229. package/examples/extensions/lab-status/extension.mjs +68 -0
  230. package/examples/extensions/lab-status/jobs.synthetic.json +9 -0
  231. package/examples/extensions/measurements/clio-coder-extension.json +28 -0
  232. package/examples/extensions/measurements/summarize.cjs +23 -0
  233. package/library/README.md +109 -0
  234. package/library/_authoring/templates/agent/README.md +28 -0
  235. package/library/_authoring/templates/agent/agents/benchmark-scout.md +30 -0
  236. package/library/_authoring/templates/agent/plugin.json +23 -0
  237. package/library/_authoring/templates/fleet/README.md +29 -0
  238. package/library/_authoring/templates/fleet/fleets/pipeline-review.md +31 -0
  239. package/library/_authoring/templates/fleet/plugin.json +23 -0
  240. package/library/_authoring/templates/plugin/README.md +37 -0
  241. package/library/_authoring/templates/plugin/agents/data-curator.md +31 -0
  242. package/library/_authoring/templates/plugin/assets/curation-guide.md +22 -0
  243. package/library/_authoring/templates/plugin/plugin.json +42 -0
  244. package/library/_authoring/templates/plugin/prompts/inspect-dataset.md +15 -0
  245. package/library/_authoring/templates/plugin/skills/dataset-curation/SKILL.md +36 -0
  246. package/library/_authoring/templates/plugin/skills/dataset-curation/evals.md +17 -0
  247. package/library/_authoring/templates/prompt/README.md +28 -0
  248. package/library/_authoring/templates/prompt/plugin.json +23 -0
  249. package/library/_authoring/templates/prompt/prompts/paper-summary.md +26 -0
  250. package/library/_authoring/templates/skill/README.md +24 -0
  251. package/library/_authoring/templates/skill/SKILL.md +39 -0
  252. package/library/_authoring/templates/skill/evals.md +30 -0
  253. package/library/_authoring/templates/skill/plugin.json +23 -0
  254. package/library/agents/README.md +7 -0
  255. package/library/fleets/README.md +7 -0
  256. package/library/plugins/materio/README.md +137 -0
  257. package/library/plugins/materio/ai.iowarp.clio/agents/materio-lab-definer.md +208 -0
  258. package/library/plugins/materio/ai.iowarp.clio/agents/materio-literature-reviewer.md +308 -0
  259. package/library/plugins/materio/ai.iowarp.clio/agents/materio-research-explorer.md +249 -0
  260. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-executor.md +416 -0
  261. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-verifier.md +60 -0
  262. package/library/plugins/materio/ai.iowarp.clio/agents/materio-workflow-planner.md +238 -0
  263. package/library/plugins/materio/ai.iowarp.clio/fleets/materio-execute-task.md +50 -0
  264. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/add-task.md +66 -0
  265. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/archive-task.md +65 -0
  266. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/checkpoint.md +26 -0
  267. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-research-tasks.md +230 -0
  268. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-virtual-lab.md +181 -0
  269. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/execute-task.md +292 -0
  270. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/help.md +129 -0
  271. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/identify-research.md +206 -0
  272. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/literature-review.md +201 -0
  273. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/pause-research.md +12 -0
  274. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/progress.md +105 -0
  275. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/remove-task.md +63 -0
  276. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/resume-research.md +64 -0
  277. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/settings.md +16 -0
  278. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/status.md +92 -0
  279. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/upload-data.md +104 -0
  280. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/wtfp.md +145 -0
  281. package/library/plugins/materio/ai.iowarp.clio/references/execution.md +56 -0
  282. package/library/plugins/materio/ai.iowarp.portability/provenance.json +9 -0
  283. package/library/plugins/materio/assets/actions/add-task.md +86 -0
  284. package/library/plugins/materio/assets/actions/archive-task.md +84 -0
  285. package/library/plugins/materio/assets/actions/checkpoint.md +47 -0
  286. package/library/plugins/materio/assets/actions/define-research-tasks.md +228 -0
  287. package/library/plugins/materio/assets/actions/define-virtual-lab.md +179 -0
  288. package/library/plugins/materio/assets/actions/execute-task.md +290 -0
  289. package/library/plugins/materio/assets/actions/help.md +140 -0
  290. package/library/plugins/materio/assets/actions/identify-research.md +204 -0
  291. package/library/plugins/materio/assets/actions/literature-review.md +199 -0
  292. package/library/plugins/materio/assets/actions/pause-research.md +34 -0
  293. package/library/plugins/materio/assets/actions/progress.md +125 -0
  294. package/library/plugins/materio/assets/actions/remove-task.md +82 -0
  295. package/library/plugins/materio/assets/actions/resume-research.md +84 -0
  296. package/library/plugins/materio/assets/actions/settings.md +38 -0
  297. package/library/plugins/materio/assets/actions/status.md +112 -0
  298. package/library/plugins/materio/assets/actions/upload-data.md +123 -0
  299. package/library/plugins/materio/assets/actions/wtfp.md +179 -0
  300. package/library/plugins/materio/assets/references/research-domains.md +134 -0
  301. package/library/plugins/materio/assets/references/research-policy.md +77 -0
  302. package/library/plugins/materio/assets/references/traditional-workflows.md +146 -0
  303. package/library/plugins/materio/assets/scripts/check_physics.py +271 -0
  304. package/library/plugins/materio/assets/scripts/check_scripts.py +248 -0
  305. package/library/plugins/materio/assets/scripts/project_plugin.py +165 -0
  306. package/library/plugins/materio/assets/scripts/research_state.py +400 -0
  307. package/library/plugins/materio/assets/scripts/verify_citations.py +616 -0
  308. package/library/plugins/materio/assets/templates/RESEARCH.md +39 -0
  309. package/library/plugins/materio/assets/templates/VIRTUAL-LAB.md +120 -0
  310. package/library/plugins/materio/assets/templates/WORKFLOW.md +42 -0
  311. package/library/plugins/materio/assets/templates/config.json +5 -0
  312. package/library/plugins/materio/evals/scripts.yaml +29 -0
  313. package/library/plugins/materio/plugin.json +530 -0
  314. package/library/plugins/materio/skills/materio-lab-definer/SKILL.md +74 -0
  315. package/library/plugins/materio/skills/materio-literature-reviewer/SKILL.md +64 -0
  316. package/library/plugins/materio/skills/materio-research-explorer/SKILL.md +74 -0
  317. package/library/plugins/materio/skills/materio-task-executor/SKILL.md +214 -0
  318. package/library/plugins/materio/skills/materio-task-verifier/SKILL.md +46 -0
  319. package/library/plugins/materio/skills/materio-workflow-planner/SKILL.md +79 -0
  320. package/library/plugins/materio/tests/test_check_physics.py +139 -0
  321. package/library/plugins/materio/tests/test_check_scripts.py +140 -0
  322. package/library/plugins/materio/tests/test_research_state.py +291 -0
  323. package/library/plugins/materio/tests/test_verify_citations.py +337 -0
  324. package/library/prompts/README.md +7 -0
  325. package/library/registry.yaml +921 -0
  326. package/library/skills/README.md +120 -0
  327. package/{skills → library/skills}/coding/ast-grep/SKILL.md +1 -1
  328. package/{skills → library/skills}/coding/ast-grep/evals.md +1 -1
  329. package/library/skills/coding/ast-grep/plugin.json +23 -0
  330. package/{skills → library/skills}/coding/coding-standards/SKILL.md +1 -1
  331. package/{skills → library/skills}/coding/coding-standards/evals.md +1 -1
  332. package/library/skills/coding/coding-standards/plugin.json +23 -0
  333. package/{skills → library/skills}/coding/prototype/SKILL.md +1 -1
  334. package/{skills → library/skills}/coding/prototype/evals.md +1 -1
  335. package/library/skills/coding/prototype/plugin.json +23 -0
  336. package/{skills → library/skills}/coding/tdd/SKILL.md +1 -1
  337. package/{skills → library/skills}/coding/tdd/evals.md +1 -1
  338. package/library/skills/coding/tdd/plugin.json +23 -0
  339. package/{skills → library/skills}/context/context-handoff/SKILL.md +1 -1
  340. package/{skills → library/skills}/context/context-handoff/evals.md +1 -1
  341. package/library/skills/context/context-handoff/plugin.json +23 -0
  342. package/{skills → library/skills}/context/context-prime/SKILL.md +1 -1
  343. package/{skills → library/skills}/context/context-prime/evals.md +1 -1
  344. package/library/skills/context/context-prime/plugin.json +23 -0
  345. package/{skills → library/skills}/git/branch-closeout/SKILL.md +1 -1
  346. package/library/skills/git/branch-closeout/plugin.json +23 -0
  347. package/{skills → library/skills}/git/file-ticket/SKILL.md +1 -1
  348. package/library/skills/git/file-ticket/plugin.json +23 -0
  349. package/{skills → library/skills}/git/fix-issue/SKILL.md +1 -1
  350. package/library/skills/git/fix-issue/plugin.json +23 -0
  351. package/{skills → library/skills}/git/resolve-merge-conflicts/SKILL.md +1 -1
  352. package/{skills → library/skills}/git/resolve-merge-conflicts/evals.md +1 -1
  353. package/library/skills/git/resolve-merge-conflicts/plugin.json +23 -0
  354. package/{skills → library/skills}/git/ship/SKILL.md +1 -1
  355. package/library/skills/git/ship/plugin.json +23 -0
  356. package/{skills → library/skills}/git/worktree-create/SKILL.md +1 -1
  357. package/library/skills/git/worktree-create/plugin.json +23 -0
  358. package/{skills → library/skills}/git/worktree-merge/SKILL.md +1 -1
  359. package/library/skills/git/worktree-merge/plugin.json +23 -0
  360. package/{skills → library/skills}/meta/clio-coder-dev/SKILL.md +1 -1
  361. package/{skills → library/skills}/meta/clio-coder-dev/evals.md +1 -1
  362. package/library/skills/meta/clio-coder-dev/plugin.json +23 -0
  363. package/{skills → library/skills}/meta/clio-coder-test/SKILL.md +1 -1
  364. package/{skills → library/skills}/meta/clio-coder-test/evals.md +1 -1
  365. package/library/skills/meta/clio-coder-test/plugin.json +23 -0
  366. package/{skills → library/skills}/meta/credentials/SKILL.md +1 -1
  367. package/{skills → library/skills}/meta/credentials/evals.md +1 -1
  368. package/library/skills/meta/credentials/plugin.json +23 -0
  369. package/library/skills/meta/find-skills/SKILL.md +85 -0
  370. package/library/skills/meta/find-skills/evals.md +65 -0
  371. package/library/skills/meta/find-skills/plugin.json +23 -0
  372. package/{skills → library/skills}/meta/herdr/SKILL.md +1 -1
  373. package/{skills → library/skills}/meta/herdr/evals.md +1 -1
  374. package/library/skills/meta/herdr/plugin.json +23 -0
  375. package/{skills → library/skills}/meta/skill-craft/SKILL.md +23 -9
  376. package/{skills → library/skills}/meta/skill-craft/evals.md +11 -3
  377. package/library/skills/meta/skill-craft/plugin.json +23 -0
  378. package/{skills → library/skills}/planning/archify/SKILL.md +13 -13
  379. package/library/skills/planning/archify/plugin.json +23 -0
  380. package/{skills → library/skills}/planning/architecture/SKILL.md +1 -1
  381. package/{skills → library/skills}/planning/architecture/evals.md +1 -1
  382. package/library/skills/planning/architecture/plugin.json +23 -0
  383. package/{skills → library/skills}/planning/backlog/SKILL.md +1 -1
  384. package/{skills → library/skills}/planning/backlog/evals.md +1 -1
  385. package/library/skills/planning/backlog/plugin.json +23 -0
  386. package/{skills → library/skills}/planning/prd/SKILL.md +1 -1
  387. package/{skills → library/skills}/planning/prd/evals.md +1 -1
  388. package/library/skills/planning/prd/plugin.json +23 -0
  389. package/{skills → library/skills}/planning/product-intent/SKILL.md +1 -1
  390. package/{skills → library/skills}/planning/product-intent/evals.md +1 -1
  391. package/library/skills/planning/product-intent/plugin.json +23 -0
  392. package/{skills → library/skills}/planning/tech-spec/SKILL.md +1 -1
  393. package/{skills → library/skills}/planning/tech-spec/evals.md +1 -1
  394. package/library/skills/planning/tech-spec/plugin.json +23 -0
  395. package/{skills → library/skills}/registry.yaml +7 -7
  396. package/{skills → library/skills}/remote.yaml +1 -1
  397. package/{skills → library/skills}/research/arxiv-literature/SKILL.md +1 -1
  398. package/{skills → library/skills}/research/arxiv-literature/evals.md +1 -1
  399. package/library/skills/research/arxiv-literature/plugin.json +23 -0
  400. package/{skills → library/skills}/research/experiment-protocol/SKILL.md +1 -1
  401. package/{skills → library/skills}/research/experiment-protocol/evals.md +1 -1
  402. package/library/skills/research/experiment-protocol/plugin.json +23 -0
  403. package/{skills → library/skills}/research/scientific-debugging/SKILL.md +1 -1
  404. package/{skills → library/skills}/research/scientific-debugging/evals.md +1 -1
  405. package/library/skills/research/scientific-debugging/plugin.json +23 -0
  406. package/{skills → library/skills}/research/scientific-modernization/SKILL.md +1 -1
  407. package/{skills → library/skills}/research/scientific-modernization/evals.md +1 -1
  408. package/library/skills/research/scientific-modernization/plugin.json +23 -0
  409. package/{skills → library/skills}/skill-marketplace.json +37 -37
  410. package/{skills → library/skills}/workflow/cut-it/SKILL.md +1 -1
  411. package/{skills → library/skills}/workflow/cut-it/evals.md +1 -1
  412. package/library/skills/workflow/cut-it/plugin.json +23 -0
  413. package/{skills → library/skills}/workflow/design-council/SKILL.md +1 -1
  414. package/{skills → library/skills}/workflow/design-council/evals.md +1 -1
  415. package/library/skills/workflow/design-council/plugin.json +23 -0
  416. package/{skills → library/skills}/workflow/grill-me/SKILL.md +1 -1
  417. package/{skills → library/skills}/workflow/grill-me/evals.md +1 -1
  418. package/library/skills/workflow/grill-me/plugin.json +23 -0
  419. package/{skills → library/skills}/workflow/workflow-distiller/SKILL.md +14 -11
  420. package/{skills → library/skills}/workflow/workflow-distiller/evals.md +14 -6
  421. package/library/skills/workflow/workflow-distiller/plugin.json +23 -0
  422. package/package.json +12 -5
  423. package/src/cli/agents.ts +1 -1
  424. package/src/cli/ask.ts +10 -10
  425. package/src/cli/config-inspect.ts +1 -1
  426. package/src/cli/configure-editor.ts +51 -0
  427. package/src/cli/configure-interop.ts +1 -1
  428. package/src/cli/configure-oauth.ts +1 -1
  429. package/src/cli/configure-onboarding.ts +232 -96
  430. package/src/cli/configure-prompts.ts +76 -0
  431. package/src/cli/configure-quick.ts +274 -0
  432. package/src/cli/configure-target.ts +14 -2
  433. package/src/cli/configure.ts +415 -176
  434. package/src/cli/eval.ts +40 -6
  435. package/src/cli/extensions.ts +74 -8
  436. package/src/cli/fleet-preflight.ts +2 -0
  437. package/src/cli/fleet.ts +2 -0
  438. package/src/cli/index.ts +1 -3
  439. package/src/cli/interop-inspect.ts +61 -33
  440. package/src/cli/interop.ts +79 -9
  441. package/src/cli/library-import.ts +139 -0
  442. package/src/cli/library.ts +418 -120
  443. package/src/cli/oauth-manual-input.ts +1 -1
  444. package/src/cli/reset.ts +2 -0
  445. package/src/cli/run.ts +26 -9
  446. package/src/cli/select.ts +35 -4
  447. package/src/cli/skills-eval.ts +43 -6
  448. package/src/cli/skills-inventory.ts +6 -2
  449. package/src/cli/skills.ts +44 -491
  450. package/src/cli/upgrade.ts +2 -2
  451. package/src/core/bus-events.ts +5 -0
  452. package/src/core/config.ts +6 -1
  453. package/src/core/defaults.ts +34 -12
  454. package/src/{interactive → core}/external-editor.ts +4 -4
  455. package/src/core/recent-models.ts +2 -2
  456. package/src/core/session-routing.ts +3 -3
  457. package/src/core/state-file-lock.ts +1 -1
  458. package/src/core/tool-names.ts +5 -0
  459. package/src/domains/agents/extension.ts +42 -6
  460. package/src/domains/agents/fleet-commands.ts +92 -1
  461. package/src/domains/agents/fleet-contract.ts +87 -19
  462. package/src/domains/agents/recipe.ts +5 -4
  463. package/src/domains/agents/registry.ts +80 -24
  464. package/src/domains/config/classify.ts +1 -1
  465. package/src/domains/config/keybindings.ts +156 -124
  466. package/src/domains/context/worker/contract.ts +91 -0
  467. package/src/domains/context/worker/pressure.ts +120 -0
  468. package/src/domains/context/worker/recall.ts +62 -0
  469. package/src/domains/context/worker/select.ts +164 -0
  470. package/src/domains/context/worker/snapshot.ts +35 -0
  471. package/src/domains/context/worker/store.ts +16 -0
  472. package/src/domains/context/working-set/replay/synthetic.ts +2 -1
  473. package/src/domains/dispatch/active-route-planner.ts +2 -0
  474. package/src/domains/dispatch/backoff.ts +1 -0
  475. package/src/domains/dispatch/code-step.ts +12 -2
  476. package/src/domains/dispatch/contract.ts +3 -0
  477. package/src/domains/dispatch/execution-plan.ts +2 -0
  478. package/src/domains/dispatch/extension.ts +109 -27
  479. package/src/domains/dispatch/fleet-plan.ts +10 -0
  480. package/src/domains/dispatch/fleet-run.ts +1 -0
  481. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  482. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  483. package/src/domains/dispatch/state.ts +1 -0
  484. package/src/domains/dispatch/types.ts +5 -0
  485. package/src/domains/dispatch/validation.ts +12 -0
  486. package/src/domains/dispatch/workspace-checkpoint.ts +1 -1
  487. package/src/domains/evidence/failure-attribution.ts +1 -0
  488. package/src/domains/evidence/trust-status.ts +22 -3
  489. package/src/domains/extensions/command-schema.ts +145 -0
  490. package/src/domains/extensions/command-tools.ts +15 -0
  491. package/src/domains/extensions/compatibility.ts +7 -0
  492. package/src/domains/extensions/contract.ts +0 -4
  493. package/src/domains/extensions/discovery.ts +69 -205
  494. package/src/domains/extensions/extension.ts +0 -4
  495. package/src/domains/extensions/index.ts +1 -5
  496. package/src/domains/extensions/manager.ts +1 -6
  497. package/src/domains/extensions/operator-commands.ts +29 -0
  498. package/src/domains/extensions/operator-runtime.ts +483 -0
  499. package/src/domains/extensions/public-api.ts +53 -0
  500. package/src/domains/extensions/runtime-child.mjs +114 -0
  501. package/src/domains/extensions/runtime-process.ts +306 -0
  502. package/src/domains/extensions/runtime-schema.ts +146 -0
  503. package/src/domains/extensions/{resources.ts → snapshot-access.ts} +1 -17
  504. package/src/domains/extensions/snapshot.ts +4 -32
  505. package/src/domains/extensions/state.ts +5 -83
  506. package/src/domains/extensions/types.ts +33 -34
  507. package/src/domains/interop/adopt.ts +546 -0
  508. package/src/domains/interop/detect.ts +50 -12
  509. package/src/domains/interop/foreign.ts +554 -0
  510. package/src/domains/interop/import.ts +277 -0
  511. package/src/domains/interop/index.ts +24 -0
  512. package/src/domains/interop/install.ts +6 -0
  513. package/src/domains/interop/inventory.ts +351 -0
  514. package/src/domains/interop/projection.ts +360 -0
  515. package/src/domains/interop/registry.ts +106 -3
  516. package/src/domains/interop/types.ts +51 -0
  517. package/src/domains/lifecycle/migrations/index.ts +0 -2
  518. package/src/domains/lifecycle/naming-resources.ts +1 -1
  519. package/src/domains/middleware/marketplace-offer.ts +1 -1
  520. package/src/domains/mux/contract.ts +1 -1
  521. package/src/domains/plugins/catalog.ts +204 -0
  522. package/src/domains/plugins/contract.ts +24 -0
  523. package/src/domains/plugins/discovery.ts +316 -0
  524. package/src/domains/plugins/extension.ts +40 -0
  525. package/src/domains/plugins/index.ts +77 -0
  526. package/src/domains/plugins/integrity.ts +6 -0
  527. package/src/domains/plugins/manifest.ts +3 -0
  528. package/src/domains/plugins/resources.ts +102 -0
  529. package/src/domains/plugins/state.ts +753 -0
  530. package/src/domains/plugins/types.ts +217 -0
  531. package/src/domains/prompts/extension.ts +9 -2
  532. package/src/domains/prompts/fragments/operating/skills.md +10 -10
  533. package/src/domains/providers/probe/fingerprint.ts +13 -6
  534. package/src/domains/providers/probe/reasoning.ts +2 -0
  535. package/src/domains/providers/runtimes/common/probe-helpers.ts +23 -7
  536. package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +7 -2
  537. package/src/domains/providers/runtimes/protocol/openai-compat.ts +10 -4
  538. package/src/domains/resources/common-loader.ts +9 -6
  539. package/src/domains/resources/index.ts +67 -0
  540. package/src/domains/resources/library-actions.ts +836 -0
  541. package/src/domains/resources/library-evals.ts +38 -0
  542. package/src/domains/resources/library-inventory.ts +1048 -0
  543. package/src/domains/resources/library-types.ts +50 -0
  544. package/src/domains/resources/library-validation.ts +634 -0
  545. package/src/domains/resources/library.ts +437 -156
  546. package/src/domains/resources/package-references.ts +66 -0
  547. package/src/domains/resources/prompts/loader.ts +75 -41
  548. package/src/domains/resources/skills/install.ts +2 -2
  549. package/src/domains/resources/skills/loader.ts +77 -22
  550. package/src/domains/resources/skills/marketplace.ts +48 -57
  551. package/src/domains/resources/skills/promotion.ts +2 -2
  552. package/src/domains/resources/skills/provenance-pin.ts +17 -4
  553. package/src/domains/safety/action-classifier.ts +2 -2
  554. package/src/domains/safety/default-path-policy.ts +3 -1
  555. package/src/domains/safety/policy-engine.ts +1 -1
  556. package/src/domains/safety/protected-artifacts.ts +21 -5
  557. package/src/domains/safety/skill-authority.ts +5 -2
  558. package/src/domains/share/archive.ts +1 -1
  559. package/src/engine/apis/openai-completions.ts +52 -2
  560. package/src/engine/notices/pi-tui-LICENSE +21 -0
  561. package/src/engine/tui.ts +3 -0
  562. package/src/engine/worker-runtime.ts +58 -14
  563. package/src/engine/worker-tools.ts +5 -0
  564. package/src/entry/orchestrator.ts +26 -5
  565. package/src/entry/plugin-reload.ts +18 -0
  566. package/src/interactive/application-controller.ts +68 -52
  567. package/src/interactive/chat-loop.ts +32 -5
  568. package/src/interactive/chat-panel.ts +168 -638
  569. package/src/interactive/chat-renderer.ts +13 -30
  570. package/src/interactive/clio-editor.ts +53 -21
  571. package/src/interactive/command-output.ts +56 -1
  572. package/src/interactive/dispatch-board.ts +1 -3
  573. package/src/interactive/editor-submit.ts +73 -59
  574. package/src/interactive/fleet-run-preview.ts +2 -0
  575. package/src/interactive/follow-up-queue-panel.ts +3 -3
  576. package/src/interactive/footer/dashboard.ts +12 -4
  577. package/src/interactive/footer/notifications.ts +2 -2
  578. package/src/interactive/footer/widgets.ts +52 -93
  579. package/src/interactive/interactive-application.ts +225 -63
  580. package/src/interactive/interactive-event-projection.ts +2 -44
  581. package/src/interactive/interactive-input-runtime.ts +257 -35
  582. package/src/interactive/interactive-presentation.ts +71 -21
  583. package/src/interactive/interactive-slash-runtime.ts +40 -48
  584. package/src/interactive/keybinding-manager.ts +156 -79
  585. package/src/interactive/keyboard-owner.ts +37 -0
  586. package/src/interactive/layout.ts +29 -4
  587. package/src/interactive/leader-key.ts +49 -102
  588. package/src/interactive/leader-menu.ts +45 -0
  589. package/src/interactive/overlay-ask-user-lifecycle.ts +9 -1
  590. package/src/interactive/overlay-frame.ts +15 -0
  591. package/src/interactive/overlay-general-openers.ts +2 -0
  592. package/src/interactive/overlay-key-routing.ts +46 -47
  593. package/src/interactive/overlay-lifecycle.ts +31 -15
  594. package/src/interactive/overlay-resource-openers.ts +56 -46
  595. package/src/interactive/overlay-session-lifecycle.ts +1 -1
  596. package/src/interactive/overlays/ask-user.ts +630 -556
  597. package/src/interactive/overlays/extension-panel.ts +70 -0
  598. package/src/interactive/overlays/extensions.ts +28 -5
  599. package/src/interactive/overlays/fleet-run-approval.ts +7 -3
  600. package/src/interactive/overlays/help-reference.ts +89 -40
  601. package/src/interactive/overlays/interop.ts +122 -3
  602. package/src/interactive/overlays/keybinding-detail.ts +2 -2
  603. package/src/interactive/overlays/library-lifecycle.ts +90 -0
  604. package/src/interactive/overlays/library-model.ts +574 -0
  605. package/src/interactive/overlays/library-review.ts +557 -0
  606. package/src/interactive/overlays/library-tabs.ts +3 -15
  607. package/src/interactive/overlays/library.ts +602 -0
  608. package/src/interactive/overlays/list-overlay.ts +218 -39
  609. package/src/interactive/overlays/model-selector.ts +28 -25
  610. package/src/interactive/overlays/session-selector.ts +9 -3
  611. package/src/interactive/overlays/settings.ts +34 -26
  612. package/src/interactive/overlays/tree-selector.ts +16 -11
  613. package/src/interactive/permission-hint.ts +13 -0
  614. package/src/interactive/permission-overlay.ts +77 -28
  615. package/src/interactive/prompt-source-label.ts +21 -0
  616. package/src/interactive/renderers/preview.ts +16 -0
  617. package/src/interactive/renderers/reference-card.ts +35 -0
  618. package/src/interactive/renderers/tool-execution.ts +67 -160
  619. package/src/interactive/renderers/worker-entry.ts +90 -42
  620. package/src/interactive/slash-autocomplete.ts +100 -7
  621. package/src/interactive/slash-commands.ts +396 -105
  622. package/src/interactive/slash-spec.ts +0 -1
  623. package/src/interactive/status/controller.ts +0 -5
  624. package/src/interactive/status/state-machine.ts +44 -26
  625. package/src/interactive/status/types.ts +3 -0
  626. package/src/interactive/status/verbs.ts +13 -12
  627. package/src/interactive/terminal-lease.ts +44 -12
  628. package/src/interactive/transcript-detail.ts +50 -112
  629. package/src/interactive/turn-queues.ts +8 -7
  630. package/src/interactive/turn-runtime.ts +1 -1
  631. package/src/interactive/view/artifacts.ts +4 -0
  632. package/src/interactive/view/view-overlay.ts +58 -43
  633. package/src/interactive/welcome-dashboard.ts +525 -408
  634. package/src/tools/bootstrap.ts +8 -0
  635. package/src/tools/builtin-tool-catalog.ts +7 -2
  636. package/src/tools/context/index.ts +58 -5
  637. package/src/tools/context/library.ts +465 -0
  638. package/src/tools/context/surface.ts +20 -6
  639. package/src/tools/core-bootstrap.ts +3 -0
  640. package/src/tools/dispatch-admission.ts +24 -1
  641. package/src/tools/dispatch-arguments.ts +8 -0
  642. package/src/tools/dispatch-plan.ts +32 -0
  643. package/src/tools/dispatch-schema.ts +31 -1
  644. package/src/tools/dispatch-types.ts +3 -0
  645. package/src/tools/dispatch.ts +1 -1
  646. package/src/tools/harness-extensions.ts +169 -0
  647. package/src/tools/observation.ts +4 -0
  648. package/src/tools/policy.ts +7 -1
  649. package/src/tools/presentation.ts +1 -1
  650. package/src/tools/registry.ts +20 -2
  651. package/src/tools/verify/numeric.ts +4 -4
  652. package/src/tools/worker-evidence.ts +5 -0
  653. package/src/worker/context-seed.ts +192 -0
  654. package/src/worker/entry.ts +1 -0
  655. package/src/worker/spec-contract.ts +8 -1
  656. package/dist/chunk-3UW3KU4A.js +0 -21
  657. package/dist/chunk-6SYEGZI3.js +0 -433
  658. package/dist/chunk-CXQ37WJH.js +0 -45
  659. package/dist/chunk-EQEJJ53P.js +0 -399
  660. package/dist/chunk-KTFSFCVN.js +0 -46
  661. package/dist/chunk-QRFXEO6Y.js +0 -17
  662. package/dist/chunk-T7FDXNRU.js +0 -1257
  663. package/dist/chunk-U7VQ4NI4.js +0 -911
  664. package/dist/configure-SML6UBZ5.js +0 -55
  665. package/dist/interop-YOTGXFJM.js +0 -115
  666. package/dist/library-GJI6W6OK.js +0 -226
  667. package/dist/skills-S36AAJHU.js +0 -510
  668. package/skills/README.md +0 -418
  669. package/skills/meta/find-skills/SKILL.md +0 -78
  670. package/skills/meta/find-skills/evals.md +0 -47
  671. package/src/domains/extensions/resource-path.ts +0 -27
  672. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +0 -27
  673. package/src/interactive/overlays/agents.ts +0 -70
  674. package/src/interactive/overlays/library-install-confirm.ts +0 -152
  675. package/src/interactive/overlays/prompts.ts +0 -89
  676. package/src/interactive/overlays/skills-hub.ts +0 -615
  677. /package/{skills → library/skills}/coding/ast-grep/references/rule_reference.md +0 -0
  678. /package/{skills → library/skills}/coding/prototype/references/LOGIC.md +0 -0
  679. /package/{skills → library/skills}/coding/prototype/references/UI.md +0 -0
  680. /package/{skills → library/skills}/coding/tdd/references/mocking.md +0 -0
  681. /package/{skills → library/skills}/coding/tdd/references/tests.md +0 -0
  682. /package/{skills → library/skills}/context/context-handoff/scripts/new-handoff.sh +0 -0
  683. /package/{skills → library/skills}/git/branch-closeout/evals.md +0 -0
  684. /package/{skills → library/skills}/git/branch-closeout/references/closeout-checklist.md +0 -0
  685. /package/{skills → library/skills}/git/file-ticket/assets/issue-template.md +0 -0
  686. /package/{skills → library/skills}/git/file-ticket/evals.md +0 -0
  687. /package/{skills → library/skills}/git/file-ticket/references/issue-discovery.md +0 -0
  688. /package/{skills → library/skills}/git/fix-issue/evals.md +0 -0
  689. /package/{skills → library/skills}/git/fix-issue/references/diagnosis-and-rca.md +0 -0
  690. /package/{skills → library/skills}/git/resolve-merge-conflicts/references/conflict-matrix.md +0 -0
  691. /package/{skills → library/skills}/git/ship/assets/pr-template.md +0 -0
  692. /package/{skills → library/skills}/git/ship/evals.md +0 -0
  693. /package/{skills → library/skills}/git/ship/references/remote-and-branch-policy.md +0 -0
  694. /package/{skills → library/skills}/git/worktree-create/evals.md +0 -0
  695. /package/{skills → library/skills}/git/worktree-create/references/worktree-setup.md +0 -0
  696. /package/{skills → library/skills}/git/worktree-merge/evals.md +0 -0
  697. /package/{skills → library/skills}/git/worktree-merge/references/merge-strategies.md +0 -0
  698. /package/{skills → library/skills}/meta/clio-coder-test/references/harness.md +0 -0
  699. /package/{skills → library/skills}/meta/clio-coder-test/references/test-map.md +0 -0
  700. /package/{skills → library/skills}/planning/archify/evals.md +0 -0
@@ -12,6 +12,9 @@ import type { RunReceipt } from "../domains/dispatch/types.js";
12
12
  import type { JobThinkingLevel } from "../domains/dispatch/validation.js";
13
13
  import type { ReceiptIntegrityOutcome } from "../domains/evidence/trust-status.js";
14
14
  import type { InstalledExtension } from "../domains/extensions/index.js";
15
+ import { isExtensionCommandToken } from "../domains/extensions/operator-commands.js";
16
+ import type { OperatorExtensionRuntime } from "../domains/extensions/operator-runtime.js";
17
+ import type { ExtensionOutput } from "../domains/extensions/public-api.js";
15
18
  import type { InteropAgentId, InteropProposal, InteropReport } from "../domains/interop/index.js";
16
19
  import {
17
20
  PANES_PRESET_IDS,
@@ -30,6 +33,7 @@ import type {
30
33
  ResourceList,
31
34
  } from "../domains/resources/index.js";
32
35
  import { parseSkillCommand, SKILL_SURFACE_CLEAR_ARG } from "../domains/resources/index.js";
36
+ import { isLibraryKind } from "../domains/resources/library-types.js";
33
37
  import { activeDecisionRefs } from "../domains/session/decision-board.js";
34
38
  import type { DecisionLedgerEntry } from "../domains/session/entries.js";
35
39
  import type { ShareImportPlan } from "../domains/share/index.js";
@@ -56,7 +60,7 @@ import {
56
60
  type OracleDigestSources,
57
61
  packOracleDigest,
58
62
  } from "./oracle.js";
59
- import { isLibraryTab, LIBRARY_TABS } from "./overlays/library-tabs.js";
63
+ import { promptSourceLabel } from "./prompt-source-label.js";
60
64
  import type { CommandArgsSpec, CommandPositionalSpec, ParsedArgs } from "./slash-spec.js";
61
65
  import { matchFromSpec, usageLine } from "./slash-spec.js";
62
66
  import {
@@ -85,9 +89,9 @@ import type { WorkerEntryState } from "./worker-stream.js";
85
89
  * `../engine/tui.js`. Those modules share one bundle chunk with the instant
86
90
  * shell's Stage 0 closure, and a second, disjoint reacher makes esbuild split
87
91
  * it, which is a startup-latency regression rather than a style problem. The
88
- * parse-time data tables the registry needs live in leaves for that reason:
89
- * `./overlays/library-tabs.js` and `COUNCIL_SYNTHESIS_LABEL` in
90
- * `./council.js`. Import from those, not from overlays that re-export them.
92
+ * parse-time data tables the registry needs live in leaves for that reason,
93
+ * such as `COUNCIL_SYNTHESIS_LABEL` in `./council.js`. Import from those,
94
+ * not from overlays that re-export them.
91
95
  *
92
96
  * Boundaries rule6 in `tests/boundaries/check-boundaries.ts` refuses a violation
93
97
  * at lint time; `tests/contracts/instant-shell-import-graph.test.ts` is the
@@ -112,6 +116,24 @@ export const SETTINGS_AREA_IDS = [
112
116
  ] as const;
113
117
  export type SettingsAreaId = (typeof SETTINGS_AREA_IDS)[number];
114
118
 
119
+ /** What `/library <verb> <ref>` asks the browser to review once it is open. */
120
+ export type LibraryBrowseIntent = "install" | "update" | "enable" | "disable" | "remove";
121
+
122
+ /**
123
+ * How a command opens the Library.
124
+ *
125
+ * A reference is a selection, never a write. `/library install <ref>` opens the
126
+ * browser on that row with its review armed, so the operator reads the plan
127
+ * that command produced before any of it lands.
128
+ */
129
+ export interface LibraryBrowseRequest {
130
+ tab?: LibraryEntryKind;
131
+ focus?: string;
132
+ intent?: LibraryBrowseIntent;
133
+ importSource?: string;
134
+ scope?: "user" | "project";
135
+ }
136
+
115
137
  type SlashCommandVariant =
116
138
  | { kind: "quit" }
117
139
  | { kind: "help"; query?: string }
@@ -120,8 +142,20 @@ type SlashCommandVariant =
120
142
  | { kind: "context-refresh" }
121
143
  /** `ref` is the turnId an `[evicted ...]` marker names. */
122
144
  | { kind: "context-recall"; ref: string }
123
- | { kind: "skill-selector" }
124
- | { kind: "resources"; family?: "skills" | "prompts" | "extensions"; tab?: LibraryEntryKind; action?: "reload" }
145
+ | {
146
+ kind: "resources";
147
+ family?: "extensions" | "plugins";
148
+ tab?: LibraryEntryKind;
149
+ action?: "reload";
150
+ /** A package ref or resource key the browser selects on open. */
151
+ focus?: string;
152
+ /** An operation to review on that row. Nothing is written before the review. */
153
+ intent?: LibraryBrowseIntent;
154
+ /** A path or URL `/library import` asks the import surface to review. */
155
+ importSource?: string;
156
+ /** Explicit `--user`/`--project`; absent leaves the browser's own selection. */
157
+ scope?: "user" | "project";
158
+ }
125
159
  | { kind: "skill-invocation"; text: string }
126
160
  /** `/skill off`: drop the tool surface an activated skill armed for the session. */
127
161
  | { kind: "skill-surface-clear" }
@@ -174,8 +208,6 @@ type SlashCommandVariant =
174
208
  | { kind: "files-usage"; reason: string }
175
209
  | { kind: "thinking-set"; level: string }
176
210
  | { kind: "thinking-picker" }
177
- | { kind: "output-set"; verbosity: string }
178
- | { kind: "output-picker" }
179
211
  | { kind: "model" }
180
212
  | { kind: "model-set"; pattern: string }
181
213
  | { kind: "settings"; area?: SettingsAreaId; group?: string }
@@ -191,7 +223,12 @@ type SlashCommandVariant =
191
223
  | { kind: "usage-error"; command: string; reason: string }
192
224
  | { kind: "empty" };
193
225
 
194
- export type SlashCommand = SlashCommandVariant;
226
+ export type SlashCommand =
227
+ | SlashCommandVariant
228
+ | { kind: "background" }
229
+ | { kind: "editor"; text: string }
230
+ | { kind: "interrupt"; text: string }
231
+ | { kind: "notifications-dismiss"; all: boolean };
195
232
 
196
233
  export type SlashCommandKind = SlashCommand["kind"];
197
234
 
@@ -207,11 +244,6 @@ export type SetThinkingLevelResult =
207
244
  | { status: "unsupported"; level: string; supported: ReadonlyArray<string> }
208
245
  | { status: "unavailable" };
209
246
 
210
- export type SetOutputVerbosityResult =
211
- | { status: "applied"; verbosity: string }
212
- | { status: "unsupported"; verbosity: string; supported: ReadonlyArray<string> }
213
- | { status: "unavailable" };
214
-
215
247
  /**
216
248
  * What one admitted dispatch-tool call reports back to `/council`. The council
217
249
  * itself is watched on the board and in the transcript, so success is silent;
@@ -560,12 +592,31 @@ function shareWorkerRun(runId: string | undefined, ctx: SlashCommandContext): vo
560
592
  ctx.submitOperatorNote(note);
561
593
  }
562
594
 
595
+ /** What the transcript shows for a display-only prompt template. */
596
+ export interface PromptReferenceCard {
597
+ /** Command name as typed, without the slash: `materio:help`. */
598
+ command: string;
599
+ /** Where the template came from, in operator words: `plugin materio`. */
600
+ source: string;
601
+ /** The body to show, already reduced to its reference block. */
602
+ text: string;
603
+ }
604
+
563
605
  /**
564
606
  * Runtime dependencies every slash-command handler may need. Every field is
565
607
  * injected at startInteractive construction time; handlers never reach into
566
608
  * the TUI, chat loop, or overlay module graph directly.
567
609
  */
568
610
  export interface SlashCommandContext {
611
+ keyboardActions?: {
612
+ background(): void;
613
+ editor(text: string): boolean;
614
+ interrupt(text: string): void;
615
+ dismiss(all: boolean): void;
616
+ outputLabel(): string;
617
+ };
618
+ operatorExtensions?: OperatorExtensionRuntime;
619
+ showExtensionOutput?: (invocation: string, output: ExtensionOutput) => void;
569
620
  io: RunIo;
570
621
  notice: (level: NoticeLevel, text: string) => void;
571
622
  dispatch: DispatchContract;
@@ -579,6 +630,12 @@ export interface SlashCommandContext {
579
630
  * the request above it. Transcript-only; the line never enters model context.
580
631
  */
581
632
  echoOperatorCommand?: (text: string) => void;
633
+ /**
634
+ * Render a display-only prompt template as an operator card in the
635
+ * transcript. Transcript-only, like the echo: the host that has no chat
636
+ * panel leaves it unset and the card falls back to `io.stdout`.
637
+ */
638
+ showReference?: (card: PromptReferenceCard) => void;
582
639
  /**
583
640
  * Put operator-authored text into the session the way typed text enters it:
584
641
  * a user turn, persisted in the ledger, visible in the transcript. Used only
@@ -606,7 +663,7 @@ export interface SlashCommandContext {
606
663
  * until the host wires a session.
607
664
  */
608
665
  runContextRecall?: (ref: string) => void;
609
- openSkillsHub?: (tab?: LibraryEntryKind) => void;
666
+ openSkillsHub?: (request?: LibraryBrowseRequest) => void;
610
667
  /**
611
668
  * `/skill off`: drop the tool surface an activated skill armed for the
612
669
  * session. Returns the names that were armed. Absent on a host with no
@@ -622,12 +679,13 @@ export interface SlashCommandContext {
622
679
  expandPromptTemplate?: (text: string) => PromptTemplateExpansion;
623
680
  listExtensions?: () => ReadonlyArray<InstalledExtension>;
624
681
  /**
625
- * `/resources extensions reload`: build, validate, and commit the next
682
+ * `/extensions reload`: build, validate, and commit the next
626
683
  * extension generation together with its user hooks, or report why it was
627
684
  * refused. Absent on a host without the reload coordinator, in which case
628
685
  * the command says so instead of pretending.
629
686
  */
630
687
  reloadExtensions?: () => ExtensionReloadOutcome;
688
+ reloadPlugins?: () => { generation: number };
631
689
  /** Detection report, pending proposals, and the two consent actions `/interop` drives. */
632
690
  interop?: {
633
691
  report: () => InteropReport | null;
@@ -728,8 +786,6 @@ export interface SlashCommandContext {
728
786
  thinkingLevelChoices?: () => ReadonlyArray<{ value: string; label: string }>;
729
787
  openThinkingPicker?: () => void;
730
788
  /** Apply a transcript verbosity named on the command line; refused values are reported by the caller. */
731
- setOutputVerbosity?: (verbosity: string) => SetOutputVerbosityResult;
732
- openOutputPicker?: () => void;
733
789
  openModel: () => void;
734
790
  /** Live providers contract used by `/model <pattern>` to resolve directly. */
735
791
  providers: ProvidersContract;
@@ -746,8 +802,6 @@ export interface SlashCommandContext {
746
802
  openTree: () => void;
747
803
  openMessagePicker: () => void;
748
804
  openHelp: (query?: string) => void;
749
- openAgents: () => void;
750
- openPrompts: () => void;
751
805
  openExtensions: () => void;
752
806
  openInterop?: () => void;
753
807
  setEditorText?: (text: string) => void;
@@ -818,7 +872,7 @@ export interface BuiltinSlashCommand {
818
872
  match?(trimmed: string): SlashCommand | null;
819
873
  fromArgs?(parsed: ParsedArgs, trimmed: string): SlashCommand;
820
874
  /** Execute `command` against `ctx`. Called only for kinds declared in `kinds`. */
821
- handle(command: SlashCommand, ctx: SlashCommandContext): void;
875
+ handle(command: SlashCommand, ctx: SlashCommandContext): void | "rejected";
822
876
  }
823
877
 
824
878
  const RUN_THINKING_LEVELS: ReadonlyArray<JobThinkingLevel> = THINKING_LEVELS;
@@ -896,6 +950,85 @@ function formatPanesStatus(status: PanesStatus): ReadonlyArray<string> {
896
950
  }
897
951
 
898
952
  export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
953
+ {
954
+ name: "background",
955
+ description: "Detach the newest eligible attached dispatch",
956
+ group: "Work",
957
+ kinds: ["background"],
958
+ args: {},
959
+ fromArgs: fromArgsOrUsage("background", { kind: "background" }),
960
+ handle(_command, ctx) {
961
+ if (!ctx.keyboardActions) {
962
+ ctx.notice("warn", "Background action requires an interactive session");
963
+ return "rejected";
964
+ }
965
+ ctx.keyboardActions.background();
966
+ },
967
+ },
968
+ {
969
+ name: "editor",
970
+ description: "Edit explicit text (or an empty buffer) externally",
971
+ group: "Work",
972
+ kinds: ["editor"],
973
+ args: { positionals: [{ name: "text", required: false, rest: true }] },
974
+ match(text) {
975
+ const match = /^\/editor(?:\s+([\s\S]*))?$/u.exec(text);
976
+ return match ? { kind: "editor", text: match[1] ?? "" } : null;
977
+ },
978
+ handle(command, ctx) {
979
+ if (command.kind !== "editor") return;
980
+ if (!ctx.keyboardActions) {
981
+ ctx.notice("warn", "External editing requires an interactive session");
982
+ return "rejected";
983
+ }
984
+ if (!ctx.keyboardActions.editor(command.text)) return "rejected";
985
+ },
986
+ },
987
+ {
988
+ name: "interrupt",
989
+ description: "Interrupt the active run and send this text",
990
+ group: "Work",
991
+ kinds: ["interrupt"],
992
+ args: { positionals: [{ name: "text", required: true, rest: true }] },
993
+ match(text) {
994
+ const match = /^\/interrupt(?:\s+([\s\S]*))?$/u.exec(text);
995
+ return match
996
+ ? match[1]?.trim()
997
+ ? { kind: "interrupt", text: match[1] }
998
+ : { kind: "usage-error", command: "interrupt", reason: "Text is required" }
999
+ : null;
1000
+ },
1001
+ handle(command, ctx) {
1002
+ if (command.kind !== "interrupt") return;
1003
+ if (!ctx.keyboardActions) {
1004
+ ctx.notice("warn", "Interrupt requires an interactive session");
1005
+ return "rejected";
1006
+ }
1007
+ ctx.keyboardActions.interrupt(command.text);
1008
+ },
1009
+ },
1010
+ {
1011
+ name: "notifications",
1012
+ description: "Dismiss the oldest notification or explicitly dismiss all",
1013
+ group: "Inspect",
1014
+ kinds: ["notifications-dismiss"],
1015
+ args: { subcommands: { dismiss: { positionals: [{ name: "all", required: false }] } } },
1016
+ match(text) {
1017
+ if (!/^\/notifications(?:\s|$)/u.test(text)) return null;
1018
+ const match = /^\/notifications\s+dismiss(?:\s+(all))?$/u.exec(text);
1019
+ return match
1020
+ ? { kind: "notifications-dismiss", all: match[1] === "all" }
1021
+ : { kind: "usage-error", command: "notifications", reason: "Use /notifications dismiss [all]" };
1022
+ },
1023
+ handle(command, ctx) {
1024
+ if (command.kind !== "notifications-dismiss") return;
1025
+ if (!ctx.keyboardActions) {
1026
+ ctx.notice("warn", "Notifications require an interactive session");
1027
+ return "rejected";
1028
+ }
1029
+ ctx.keyboardActions.dismiss(command.all);
1030
+ },
1031
+ },
899
1032
  {
900
1033
  name: "quit",
901
1034
  description: "Exit Clio Coder",
@@ -924,18 +1057,22 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
924
1057
  },
925
1058
  {
926
1059
  name: "skill",
927
- description: "Open the Skills Hub, invoke a skill, or `off` to drop an active skill's tool surface",
1060
+ description: "Invoke a skill, or use `off` to clear its tool surface",
928
1061
  group: "Work",
929
- kinds: ["skill-selector", "skill-invocation", "skill-surface-clear"],
1062
+ kinds: ["skill-invocation", "skill-surface-clear"],
930
1063
  args: {
931
1064
  positionals: [
932
- { name: "name", required: false },
1065
+ { name: "name", required: true },
933
1066
  { name: "task", required: false, rest: true },
934
1067
  ],
935
1068
  },
936
1069
  match(trimmed) {
937
1070
  if (trimmed === "/skill") {
938
- return { kind: "skill-selector" };
1071
+ return {
1072
+ kind: "usage-error",
1073
+ command: "skill",
1074
+ reason: "Choose /skills to browse, /skill <name> to invoke, or /skill off to clear the active tool surface",
1075
+ };
939
1076
  }
940
1077
  const command = parseSkillCommand(trimmed);
941
1078
  if (!command) return null;
@@ -948,9 +1085,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
948
1085
  return { kind: "skill-invocation", text: trimmed };
949
1086
  },
950
1087
  handle(command, ctx) {
951
- if (command.kind === "skill-selector") {
952
- ctx.openSkillsHub?.();
953
- } else if (command.kind === "skill-invocation") {
1088
+ if (command.kind === "skill-invocation") {
954
1089
  ctx.submitChat(command.text);
955
1090
  } else if (command.kind === "skill-surface-clear") {
956
1091
  const cleared = ctx.clearSkillSurface?.() ?? [];
@@ -962,50 +1097,153 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
962
1097
  },
963
1098
  },
964
1099
  {
965
- name: "resources",
966
- description: "Browse skills, prompts, libraries, and extensions",
1100
+ name: "library",
1101
+ description: "Open the full-screen recipe library, review a package operation, or reload installed recipes",
967
1102
  group: "Inspect",
968
1103
  kinds: ["resources"],
969
1104
  subcommandDescriptions: {
970
- skills: "Browse installed skills",
971
- prompts: "Browse prompt templates",
972
- library: "Browse resource libraries",
973
- extensions: "Browse installed extensions; `reload` commits a new extension generation",
1105
+ inspect: "Open the Library on one package or recipe",
1106
+ install: "Review installing one package, then apply it",
1107
+ remove: "Review removing one package, then apply it",
1108
+ import: "Review a plugin source from a path or URL",
1109
+ reload: "Refresh installed recipe resources in this session",
974
1110
  },
975
1111
  args: {
976
1112
  subcommands: {
977
- skills: {},
978
- prompts: {},
979
- library: { positionals: [{ name: "kind", required: false }] },
980
- extensions: { positionals: [{ name: "action", required: false, values: ["reload"] }] },
1113
+ inspect: {
1114
+ positionals: [{ name: "ref", required: true }],
1115
+ flags: [{ name: "--user" }, { name: "--project" }],
1116
+ },
1117
+ install: {
1118
+ positionals: [{ name: "ref", required: true }],
1119
+ flags: [{ name: "--user" }, { name: "--project" }],
1120
+ },
1121
+ remove: {
1122
+ positionals: [{ name: "ref", required: true }],
1123
+ flags: [{ name: "--user" }, { name: "--project" }],
1124
+ },
1125
+ import: {
1126
+ positionals: [{ name: "path-or-url", required: true }],
1127
+ flags: [{ name: "--user" }, { name: "--project" }],
1128
+ },
1129
+ reload: {},
981
1130
  },
982
1131
  },
983
1132
  fromArgs(parsed) {
984
- if (parsed.error) return { kind: "usage-error", command: "resources", reason: parsed.error };
985
- if (parsed.subcommand === undefined || parsed.subcommand === "skills")
986
- return { kind: "resources", family: "skills" };
987
- if (parsed.subcommand === "prompts") return { kind: "resources", family: "prompts" };
988
- if (parsed.subcommand === "extensions") {
989
- const action = parsed.positionals[0];
990
- if (action === undefined) return { kind: "resources", family: "extensions" };
991
- if (action === "reload") return { kind: "resources", family: "extensions", action: "reload" };
992
- return { kind: "usage-error", command: "resources", reason: `Unknown action: ${action} (one of reload)` };
993
- }
994
- const tab = parsed.positionals[0];
995
- if (tab === undefined) return { kind: "resources" };
996
- if (!isLibraryTab(tab)) {
997
- const known = LIBRARY_TABS.map((entry) => entry.id).join(", ");
998
- return { kind: "usage-error", command: "resources", reason: `Unknown kind: ${tab} (one of ${known})` };
999
- }
1000
- return { kind: "resources", tab };
1133
+ if (parsed.error) return { kind: "usage-error", command: "library", reason: parsed.error };
1134
+ if (parsed.flags.has("--user") && parsed.flags.has("--project"))
1135
+ return { kind: "usage-error", command: "library", reason: "Choose one destination: --user or --project" };
1136
+ const scope = parsed.flags.has("--project")
1137
+ ? ("project" as const)
1138
+ : parsed.flags.has("--user")
1139
+ ? ("user" as const)
1140
+ : undefined;
1141
+ const subcommand = parsed.subcommand;
1142
+ if (subcommand === "reload") return { kind: "resources", family: "plugins", action: "reload" };
1143
+ if (subcommand === "import") {
1144
+ const source = parsed.rest ?? parsed.positionals[0];
1145
+ if (!source)
1146
+ return {
1147
+ kind: "usage-error",
1148
+ command: "library",
1149
+ reason: "/library import needs a directory path or a source URL to review",
1150
+ };
1151
+ return { kind: "resources", tab: "plugin", importSource: source, ...(scope ? { scope } : {}) };
1152
+ }
1153
+ if (subcommand === "inspect" || subcommand === "install" || subcommand === "remove") {
1154
+ const ref = parsed.positionals[0];
1155
+ if (!ref)
1156
+ return {
1157
+ kind: "usage-error",
1158
+ command: "library",
1159
+ reason: `/library ${subcommand} needs a kind:name reference, such as plugin:materio, or a recipe name`,
1160
+ };
1161
+ const prefix = ref.split(":", 1)[0] ?? "";
1162
+ return {
1163
+ kind: "resources",
1164
+ tab: isLibraryKind(prefix) && ref.includes(":") ? prefix : "plugin",
1165
+ focus: ref,
1166
+ ...(subcommand === "inspect" ? {} : { intent: subcommand as LibraryBrowseIntent }),
1167
+ ...(scope ? { scope } : {}),
1168
+ };
1169
+ }
1170
+ if (parsed.error || parsed.positionals.length > 0)
1171
+ return {
1172
+ kind: "usage-error",
1173
+ command: "library",
1174
+ reason:
1175
+ "Use /library to browse, /library inspect|install|remove <ref>, /library import <path-or-url>, or /library reload; /skills, /agents and /prompts open the same browser on their category",
1176
+ };
1177
+ return { kind: "resources", tab: "plugin" };
1001
1178
  },
1002
1179
  handle(command, ctx) {
1003
1180
  if (command.kind !== "resources") return;
1004
- if (command.family === "prompts") ctx.openPrompts();
1005
- else if (command.family === "extensions") {
1181
+ if (command.family === "plugins") {
1182
+ if (!ctx.reloadPlugins)
1183
+ ctx.notice("warn", "library: reload is unavailable in this session; restart to refresh resources");
1184
+ else {
1185
+ try {
1186
+ const snapshot = ctx.reloadPlugins();
1187
+ ctx.notice("success", `library: generation ${snapshot.generation} committed`);
1188
+ } catch (error) {
1189
+ ctx.notice("error", `library: reload failed: ${error instanceof Error ? error.message : String(error)}`);
1190
+ }
1191
+ }
1192
+ return;
1193
+ }
1194
+ if (command.family === "extensions") {
1006
1195
  if (command.action === "reload") reloadExtensionsCommand(ctx);
1007
1196
  else ctx.openExtensions();
1008
- } else ctx.openSkillsHub?.(command.tab);
1197
+ return;
1198
+ }
1199
+ ctx.openSkillsHub?.({
1200
+ ...(command.tab ? { tab: command.tab } : {}),
1201
+ ...(command.focus ? { focus: command.focus } : {}),
1202
+ ...(command.intent ? { intent: command.intent } : {}),
1203
+ ...(command.importSource ? { importSource: command.importSource } : {}),
1204
+ ...(command.scope ? { scope: command.scope } : {}),
1205
+ });
1206
+ },
1207
+ },
1208
+ {
1209
+ name: "skills",
1210
+ description: "Open the Library on Skills",
1211
+ group: "Inspect",
1212
+ kinds: [],
1213
+ args: {},
1214
+ fromArgs: fromArgsOrUsage("skills", { kind: "resources", tab: "skill" }),
1215
+ handle(_command, ctx) {
1216
+ ctx.openSkillsHub?.({ tab: "skill" });
1217
+ },
1218
+ },
1219
+ {
1220
+ name: "prompts",
1221
+ description: "Open the Library on Prompts",
1222
+ group: "Inspect",
1223
+ kinds: [],
1224
+ args: {},
1225
+ fromArgs: fromArgsOrUsage("prompts", { kind: "resources", tab: "prompt" }),
1226
+ handle(_command, ctx) {
1227
+ ctx.openSkillsHub?.({ tab: "prompt" });
1228
+ },
1229
+ },
1230
+ {
1231
+ name: "extensions",
1232
+ description: "Inspect harness extensions or reload their commands, hooks and operator UI",
1233
+ group: "Inspect",
1234
+ // Harness navigation uses the shared overlay dispatcher, independently of recipe reload.
1235
+ kinds: [],
1236
+ args: { positionals: [{ name: "action", required: false, values: ["reload"] }] },
1237
+ fromArgs(parsed) {
1238
+ if (parsed.error) return { kind: "usage-error", command: "extensions", reason: parsed.error };
1239
+ if (parsed.positionals[0] && parsed.positionals[0] !== "reload")
1240
+ return { kind: "usage-error", command: "extensions", reason: "extensions accepts only reload" };
1241
+ return { kind: "resources", family: "extensions", ...(parsed.positionals[0] ? { action: "reload" as const } : {}) };
1242
+ },
1243
+ handle(command, ctx) {
1244
+ if (command.kind !== "resources" || command.family !== "extensions") return;
1245
+ if (command.action === "reload") reloadExtensionsCommand(ctx);
1246
+ else ctx.openExtensions();
1009
1247
  },
1010
1248
  },
1011
1249
  {
@@ -1347,23 +1585,36 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1347
1585
  },
1348
1586
  },
1349
1587
  {
1350
- name: "agents",
1351
- description: "List agents or connect a detected external agent",
1588
+ name: "interop",
1589
+ description: "Inspect coding agents and adopt safe resources",
1352
1590
  group: "Inspect",
1353
1591
  kinds: ["agents"],
1354
- subcommandDescriptions: {
1355
- list: "List native and external agents",
1356
- connect: "Review detected external-agent proposals",
1592
+ args: {},
1593
+ fromArgs(parsed) {
1594
+ if (parsed.error) return { kind: "usage-error", command: "interop", reason: parsed.error };
1595
+ return { kind: "agents", connect: true };
1596
+ },
1597
+ handle(_command, ctx) {
1598
+ ctx.openInterop?.();
1357
1599
  },
1358
- args: { subcommands: { list: {}, connect: {} } },
1600
+ },
1601
+ {
1602
+ name: "agents",
1603
+ description: "Open the Library on Agents",
1604
+ group: "Inspect",
1605
+ kinds: [],
1606
+ args: {},
1359
1607
  fromArgs(parsed) {
1360
- if (parsed.error) return { kind: "usage-error", command: "agents", reason: parsed.error };
1361
- return { kind: "agents", ...(parsed.subcommand === "connect" ? { connect: true } : {}) };
1608
+ if (parsed.error)
1609
+ return {
1610
+ kind: "usage-error",
1611
+ command: "agents",
1612
+ reason: "Use /agents to browse recipes, or /interop to inspect another local agent's resources",
1613
+ };
1614
+ return { kind: "resources", tab: "agent" };
1362
1615
  },
1363
- handle(command, ctx) {
1364
- if (command.kind !== "agents") return;
1365
- if (command.connect) ctx.openInterop?.();
1366
- else ctx.openAgents();
1616
+ handle(_command, ctx) {
1617
+ ctx.openSkillsHub?.({ tab: "agent" });
1367
1618
  },
1368
1619
  },
1369
1620
  {
@@ -1917,35 +2168,6 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1917
2168
  ctx.render();
1918
2169
  },
1919
2170
  },
1920
- {
1921
- name: "output",
1922
- description: "Set transcript detail to minimal, default, or verbose",
1923
- group: "Configure",
1924
- kinds: ["output-set", "output-picker"],
1925
- args: { positionals: [{ name: "verbosity", required: false }] },
1926
- fromArgs(parsed) {
1927
- if (parsed.error) return { kind: "usage-error", command: "output", reason: parsed.error };
1928
- const verbosity = parsed.positionals[0];
1929
- return verbosity ? { kind: "output-set", verbosity } : { kind: "output-picker" };
1930
- },
1931
- handle(command, ctx) {
1932
- if (command.kind === "output-picker") {
1933
- if (ctx.openOutputPicker) ctx.openOutputPicker();
1934
- else ctx.notice("error", "output picker is not wired in this session");
1935
- return;
1936
- }
1937
- if (command.kind !== "output-set") return;
1938
- const result = ctx.setOutputVerbosity?.(command.verbosity) ?? { status: "unavailable" as const };
1939
- if (result.status === "applied") {
1940
- ctx.notice("success", `output detail: ${result.verbosity}`);
1941
- } else if (result.status === "unsupported") {
1942
- ctx.notice("error", `output detail "${result.verbosity}" is not one of ${result.supported.join(", ")}`);
1943
- } else {
1944
- ctx.notice("error", "output detail cannot be set right now");
1945
- }
1946
- ctx.render();
1947
- },
1948
- },
1949
2171
  {
1950
2172
  name: "model",
1951
2173
  description: "Open model selector or set a model",
@@ -2185,6 +2407,12 @@ export function formatExtensionReloadNotice(outcome: ExtensionReloadOutcome): [N
2185
2407
  }
2186
2408
 
2187
2409
  function reloadExtensionsCommand(ctx: SlashCommandContext): void {
2410
+ if (ctx.operatorExtensions) {
2411
+ void ctx.operatorExtensions.reload().then((result) => {
2412
+ if (result.status === "deferred") ctx.notice("info", result.message);
2413
+ });
2414
+ return;
2415
+ }
2188
2416
  if (!ctx.reloadExtensions) {
2189
2417
  ctx.notice("warn", "extensions: reload is unavailable in this session; restart to pick up installed changes");
2190
2418
  return;
@@ -2199,6 +2427,22 @@ function reloadExtensionsCommand(ctx: SlashCommandContext): void {
2199
2427
  export function parseSlashCommand(input: string): SlashCommand {
2200
2428
  const trimmed = input.trim();
2201
2429
  if (trimmed.length === 0) return { kind: "empty" };
2430
+ const retiredLibrary = /^\/(resources|plugins)(?:\s|$)/u.exec(trimmed);
2431
+ if (retiredLibrary) {
2432
+ return {
2433
+ kind: "usage-error",
2434
+ command: retiredLibrary[1] ?? "library",
2435
+ reason: "Use /library to browse and manage recipes; use /extensions for harness extensions",
2436
+ };
2437
+ }
2438
+ if (/^\/output(?:\s|$)/u.test(trimmed)) {
2439
+ return {
2440
+ kind: "usage-error",
2441
+ command: "output",
2442
+ reason:
2443
+ "Use /help for the effective Output cycle keys, or /settings interface to save a default. Use /view for full details",
2444
+ };
2445
+ }
2202
2446
  if (trimmed.startsWith(COMMAND_ESCAPE)) return { kind: "unknown", text: trimmed.slice(1) };
2203
2447
  for (const entry of BUILTIN_SLASH_COMMANDS) {
2204
2448
  const match = entry.match ? entry.match(trimmed) : matchFromSpec(entry, trimmed);
@@ -2206,7 +2450,8 @@ export function parseSlashCommand(input: string): SlashCommand {
2206
2450
  }
2207
2451
  if (trimmed.startsWith("/")) {
2208
2452
  const token = trimmed.slice(1).split(/\s+/u)[0] ?? "";
2209
- if (COMMAND_SHAPED_TOKEN.test(token)) return { kind: "unknown-command", token, text: trimmed };
2453
+ if (COMMAND_SHAPED_TOKEN.test(token) || isExtensionCommandToken(token))
2454
+ return { kind: "unknown-command", token, text: trimmed };
2210
2455
  }
2211
2456
  return { kind: "unknown", text: trimmed };
2212
2457
  }
@@ -2234,9 +2479,49 @@ export function dispatchSlashCommand(command: SlashCommand, ctx: SlashCommandCon
2234
2479
  ctx.submitChat(command.text);
2235
2480
  return "accepted";
2236
2481
  }
2482
+ // A display-only template is answered here, for the operator, and the
2483
+ // model is never told it was asked: no turn, no session entry, no tokens.
2484
+ if (expansion?.expanded === false && expansion.display) {
2485
+ const { template, text } = expansion.display;
2486
+ const card: PromptReferenceCard = {
2487
+ command: template.name,
2488
+ source: promptSourceLabel(template.sourceInfo),
2489
+ text,
2490
+ };
2491
+ if (ctx.showReference) ctx.showReference(card);
2492
+ else ctx.io.stdout(`/${card.command} (${card.source})\n${card.text}\n`);
2493
+ ctx.render();
2494
+ return "accepted";
2495
+ }
2237
2496
  // A template that exists and refused is not a typo. Its reason reaches the
2238
2497
  // operator and nothing reaches the model.
2239
2498
  const refusal = expansion?.expanded === false ? expansion.refusal : undefined;
2499
+ if (!refusal && isExtensionCommandToken(command.token) && ctx.operatorExtensions) {
2500
+ const runtime = ctx.operatorExtensions;
2501
+ const promptNames = ctx.listPrompts().items.map((prompt) => prompt.name);
2502
+ const row = runtime.commands(promptNames).find((row) => row.invocation === command.token);
2503
+ if (!row?.available) {
2504
+ ctx.notice("error", row?.reason ?? `/${command.token} is not an available extension command`);
2505
+ ctx.render();
2506
+ return "rejected";
2507
+ }
2508
+ const args = command.text.slice(command.token.length + 1).trim();
2509
+ const runLocal = ctx.runLocalOperation ?? ((operation: () => Promise<void>) => void operation());
2510
+ runLocal(async () => {
2511
+ try {
2512
+ const output = await runtime.invoke(
2513
+ command.token,
2514
+ args,
2515
+ ctx.listPrompts().items.map((prompt) => prompt.name),
2516
+ );
2517
+ if (ctx.showExtensionOutput) ctx.showExtensionOutput(command.token, output);
2518
+ else ctx.io.stdout(`${output.text}\n`);
2519
+ } catch (error) {
2520
+ ctx.notice("error", `${command.token}: ${error instanceof Error ? error.message : String(error)}`);
2521
+ }
2522
+ });
2523
+ return "accepted";
2524
+ }
2240
2525
  ctx.notice("error", refusal ? refusal.message : `/${command.token} is not a command. Type /help for the list.`);
2241
2526
  ctx.render();
2242
2527
  return "rejected";
@@ -2244,14 +2529,17 @@ export function dispatchSlashCommand(command: SlashCommand, ctx: SlashCommandCon
2244
2529
  if (command.kind === "usage-error") {
2245
2530
  const entry = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === command.command);
2246
2531
  const usage = entry ? ` ${usageNotice(entry)}` : "";
2247
- ctx.notice("error", `${command.reason}.${usage}`);
2532
+ const reason =
2533
+ command.command === "output" && ctx.keyboardActions
2534
+ ? `Use ${ctx.keyboardActions.outputLabel()} to cycle Output style, or /settings interface to save a default`
2535
+ : command.reason;
2536
+ ctx.notice("error", `${reason}.${usage}`);
2248
2537
  ctx.render();
2249
2538
  return "rejected";
2250
2539
  }
2251
2540
  const entry = HANDLER_BY_KIND.get(command.kind);
2252
2541
  if (!entry) return "rejected";
2253
- entry.handle(command, ctx);
2254
- return "accepted";
2542
+ return entry.handle(command, ctx) === "rejected" ? "rejected" : "accepted";
2255
2543
  }
2256
2544
 
2257
2545
  export interface CommandReferenceEntry {
@@ -2275,6 +2563,7 @@ const COMMAND_ORDER = [
2275
2563
  "share",
2276
2564
  "skill",
2277
2565
  "agents",
2566
+ "interop",
2278
2567
  "tasks",
2279
2568
  "context",
2280
2569
  "memory",
@@ -2282,11 +2571,13 @@ const COMMAND_ORDER = [
2282
2571
  "panes",
2283
2572
  "cost",
2284
2573
  "decisions",
2285
- "resources",
2574
+ "library",
2575
+ "skills",
2576
+ "prompts",
2577
+ "extensions",
2286
2578
  "help",
2287
2579
  "model",
2288
2580
  "thinking",
2289
- "output",
2290
2581
  "settings",
2291
2582
  "new",
2292
2583
  "resume",