@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
@@ -1,6 +1,13 @@
1
1
  import { getTerminationCoordinator } from "../core/termination.js";
2
- import type { ClioKeybinding } from "../domains/config/keybindings.js";
3
- import { isKeyRelease, type Keybinding } from "../engine/tui.js";
2
+ import { CLIO_APP_KEYBINDING_IDS, type ClioKeybinding } from "../domains/config/keybindings.js";
3
+ import {
4
+ decodePrintableKey,
5
+ isKeyRelease,
6
+ type Keybinding,
7
+ matchesKey,
8
+ type TUI,
9
+ TuiAltScreen,
10
+ } from "../engine/tui.js";
4
11
  import {
5
12
  type ApplicationClock,
6
13
  type ApplicationController,
@@ -10,7 +17,9 @@ import {
10
17
  type ApplicationSignalCoordinator,
11
18
  createApplicationController,
12
19
  } from "./application-controller.js";
20
+ import { focusedComponent, keyboardOwner } from "./keyboard-owner.js";
13
21
  import { createLeaderKeyController, type LeaderTarget } from "./leader-key.js";
22
+ import { createLeaderMenu } from "./leader-menu.js";
14
23
  import { type OverlayState, routeOverlayKey } from "./overlay-lifecycle.js";
15
24
  import type { RenderInputAction } from "./render-trace.js";
16
25
 
@@ -26,6 +35,7 @@ export interface InteractiveInputKeyActionDeps {
26
35
  openDecisions: () => void;
27
36
  backgroundDispatch: () => void;
28
37
  openModelSelector: () => void;
38
+ openLibrary: () => void;
29
39
  openTree: () => void;
30
40
  cycleScopedModelForward: () => void;
31
41
  cycleScopedModelBackward: () => void;
@@ -38,9 +48,17 @@ export interface InteractiveInputKeyActionDeps {
38
48
  }
39
49
 
40
50
  export interface InteractiveInputRuntimeDeps {
51
+ tui?: TUI;
52
+ hasQueuedMessages?: () => boolean;
53
+ explainProtectedExit?: () => void;
54
+ explainSearchUnavailable?: () => void;
55
+ explainThinkingUnavailable?: () => void;
41
56
  keybindings: {
42
57
  matches(data: string, id: Keybinding): boolean;
43
58
  leaderTargets(): ReadonlyArray<LeaderTarget>;
59
+ getKeys?(id: Keybinding): ReadonlyArray<string>;
60
+ getDescription?(id: Keybinding): string;
61
+ onReload?(listener: () => void): () => void;
44
62
  };
45
63
  dispatchAction: (id: ClioKeybinding, deps: InteractiveInputKeyActionDeps) => boolean;
46
64
  actions: {
@@ -64,10 +82,12 @@ export interface InteractiveInputRuntimeDeps {
64
82
  isInspectingMutation(): boolean;
65
83
  toggleMutationInspection(): void;
66
84
  scrollMutationInspection(delta: number): void;
85
+ togglePermissionTerms(): void;
67
86
  cancelAskUser(): void;
68
87
  toggleFooterDashboardState(): void;
69
88
  toggleDispatchBoardOverlay(): void;
70
89
  openModelOverlayState(): void;
90
+ openSkillsHubState(): void;
71
91
  openTreeOverlayState(): void;
72
92
  openTasksOverlayState(): void;
73
93
  openDecisionsOverlayState(): void;
@@ -89,7 +109,13 @@ export interface InteractiveInputRuntimeDeps {
89
109
  cancelActiveEditorBash: () => boolean;
90
110
  isStreaming: () => boolean;
91
111
  cancelActiveRun: () => void;
92
- editor: { getText(): string; setText(text: string): void; handleInput?(data: string): void };
112
+ editor: {
113
+ getText(): string;
114
+ setText(text: string): void;
115
+ handleInput?(data: string): void;
116
+ applyEdit?(operation: import("./overlay-key-routing.js").DraftEditOperation | "undo"): void;
117
+ isShowingAutocomplete?(): boolean;
118
+ };
93
119
  editorSubmit: {
94
120
  openExternalEditorForInput(): void;
95
121
  queueFollowUpFromEditor(): void;
@@ -138,6 +164,7 @@ export function createInteractiveInputRuntime(deps: InteractiveInputRuntimeDeps)
138
164
  cycleThinking: () => {
139
165
  const available = deps.actions.availableThinkingLevels();
140
166
  if (!(available.length === 1 && available[0] === "off")) deps.actions.onCycleThinking();
167
+ else deps.explainThinkingUnavailable?.();
141
168
  deps.refreshFooter();
142
169
  deps.requestRender();
143
170
  },
@@ -149,6 +176,7 @@ export function createInteractiveInputRuntime(deps: InteractiveInputRuntimeDeps)
149
176
  backgroundDispatch: deps.actions.backgroundActiveDispatch,
150
177
  toggleFilesPane: deps.actions.toggleFilesPane,
151
178
  openModelSelector: deps.overlay.openModelOverlayState,
179
+ openLibrary: deps.overlay.openSkillsHubState,
152
180
  openTree: deps.overlay.openTreeOverlayState,
153
181
  cycleScopedModelForward: () => {
154
182
  deps.actions.cycleScopedModelForward();
@@ -167,10 +195,98 @@ export function createInteractiveInputRuntime(deps: InteractiveInputRuntimeDeps)
167
195
  interruptWithMessage: deps.editorSubmit.interruptFromEditor,
168
196
  restoreQueuedFollowUps: deps.editorSubmit.restoreQueuedFollowUpsToEditor,
169
197
  });
198
+ const focused = () => (deps.tui ? focusedComponent(deps.tui) : null);
199
+ const search = () => (deps.tui instanceof TuiAltScreen && deps.tui.isSearchFocused ? deps.tui : null);
200
+ const owner = () => keyboardOwner(focused());
201
+ const ownerAction = (): ClioKeybinding | undefined =>
202
+ (
203
+ ({
204
+ "skills-hub": "clio-coder.library.toggle",
205
+ model: "clio-coder.model.select",
206
+ tree: "clio-coder.session.tree",
207
+ "dispatch-board": "clio-coder.dispatchBoard.toggle",
208
+ }) as Partial<Record<OverlayState, ClioKeybinding>>
209
+ )[deps.overlay.getState()];
210
+ const canToggleOwner = () => deps.overlay.getState() === "dispatch-board" || owner().keyboardScope === "browse";
211
+ const targets = (): ReadonlyArray<LeaderTarget> => {
212
+ const all = deps.keybindings.leaderTargets();
213
+ const filtered = search()
214
+ ? all.filter(({ id }) => id === "tui.editor.undo" || id === "tui.altScreen.search")
215
+ : deps.overlay.getState() === "closed"
216
+ ? all
217
+ : all.filter(
218
+ ({ id }) =>
219
+ (id === ownerAction() && canToggleOwner()) ||
220
+ (id === "tui.editor.undo" &&
221
+ (owner().keyboardScope === "edit" || deps.overlay.getState() === "permission-confirm")),
222
+ );
223
+ return filtered.map((entry) => ({
224
+ ...entry,
225
+ label: deps.keybindings.getDescription?.(entry.id) ?? entry.id,
226
+ ...(entry.id === "clio-coder.thinking.cycle" &&
227
+ deps.actions.availableThinkingLevels().every((level) => level === "off")
228
+ ? { disabledReason: "This model supports only off" }
229
+ : {}),
230
+ }));
231
+ };
232
+ const menu = deps.tui
233
+ ? createLeaderMenu(
234
+ deps.tui,
235
+ () => (search() ? "Transcript search" : overlayScopeLabel(deps.overlay.getState())),
236
+ (id) => deps.keybindings.getKeys?.(id).join(" / ") ?? "",
237
+ )
238
+ : undefined;
239
+ const dispatchLeader = (id: Keybinding): boolean => {
240
+ if (id === "tui.editor.undo") {
241
+ if (search()) search()?.undoSearchQuery();
242
+ else if (deps.overlay.getState() === "closed" || deps.overlay.getState() === "permission-confirm")
243
+ deps.editor.applyEdit?.("undo");
244
+ else owner().undoInput?.();
245
+ deps.requestRender();
246
+ return true;
247
+ }
248
+ if (id.startsWith("tui.altScreen.")) {
249
+ const tui = deps.tui;
250
+ if (!(tui instanceof TuiAltScreen)) {
251
+ deps.explainSearchUnavailable?.();
252
+ return true;
253
+ }
254
+ switch (id) {
255
+ case "tui.altScreen.search":
256
+ tui.toggleSearch();
257
+ break;
258
+ case "tui.altScreen.pageUp":
259
+ tui.scrollBy(-Math.max(1, tui.terminal.rows - 3));
260
+ break;
261
+ case "tui.altScreen.pageDown":
262
+ tui.scrollBy(Math.max(1, tui.terminal.rows - 3));
263
+ break;
264
+ case "tui.altScreen.top":
265
+ tui.scrollToTop();
266
+ break;
267
+ case "tui.altScreen.bottom":
268
+ tui.scrollToBottom();
269
+ break;
270
+ case "tui.altScreen.previousPrompt":
271
+ tui.scrollToPrompt(-1);
272
+ break;
273
+ case "tui.altScreen.nextPrompt":
274
+ tui.scrollToPrompt(1);
275
+ break;
276
+ }
277
+ return true;
278
+ }
279
+ if (deps.overlay.getState() !== "closed") {
280
+ if (id === ownerAction() && canToggleOwner()) deps.overlay.closeOverlay();
281
+ return true;
282
+ }
283
+ return deps.dispatchAction(id as ClioKeybinding, keyActionDeps());
284
+ };
170
285
  const leaderKeys = createLeaderKeyController({
171
286
  matchesLeader: (input) => deps.keybindings.matches(input, "clio-coder.leader"),
172
- leaderTargets: () => deps.keybindings.leaderTargets(),
173
- dispatchAction: (id) => deps.dispatchAction(id, keyActionDeps()),
287
+ leaderTargets: targets,
288
+ dispatchAction: dispatchLeader,
289
+ ...(menu ? { onMenuChange: menu } : {}),
174
290
  isRelease: isKeyRelease,
175
291
  onStateChange: (pending) => {
176
292
  deps.onLeaderStateChange?.(pending);
@@ -179,7 +295,101 @@ export function createInteractiveInputRuntime(deps: InteractiveInputRuntimeDeps)
179
295
  },
180
296
  });
181
297
 
298
+ const removeReload = deps.keybindings.onReload?.(() => leaderKeys.reset());
182
299
  controller = createApplicationController({
300
+ routeComposerKey: (data) => {
301
+ if (deps.keybindings.matches(data, "tui.altScreen.search") && !(deps.tui instanceof TuiAltScreen)) {
302
+ deps.explainSearchUnavailable?.();
303
+ return true;
304
+ }
305
+ return false;
306
+ },
307
+ isSearchFocused: () => search() !== null,
308
+ closeSearch: () => search()?.closeSearch(),
309
+ isAutocompleteVisible: () => deps.editor.isShowingAutocomplete?.() ?? false,
310
+ hasQueuedMessages: () => deps.hasQueuedMessages?.() ?? false,
311
+ explainProtectedExit: () => deps.explainProtectedExit?.(),
312
+ forwardFocusedInput: (data) => {
313
+ const active = search();
314
+ if (active) {
315
+ if (
316
+ deps.keybindings.matches(data, "tui.altScreen.search") ||
317
+ deps.keybindings.matches(data, "tui.altScreen.searchClose") ||
318
+ matchesKey(data, "escape")
319
+ )
320
+ active.closeSearch();
321
+ else if (deps.keybindings.matches(data, "tui.altScreen.searchNext")) active.navigateSearch(1);
322
+ else if (deps.keybindings.matches(data, "tui.altScreen.searchPrevious")) active.navigateSearch(-1);
323
+ else focused()?.handleInput?.(data);
324
+ } else focused()?.handleInput?.(data);
325
+ deps.requestRender();
326
+ },
327
+ cancelFocusedOwner: () => {
328
+ const state = deps.overlay.getState();
329
+ if (["permission-confirm", "cost", "context-view", "side-question", "dispatch-board", "auth"].includes(state))
330
+ deps.overlay.closeOverlay();
331
+ else if (focused()?.handleInput) {
332
+ focused()?.handleInput?.("\x1b");
333
+ deps.requestRender();
334
+ } else deps.overlay.closeOverlay();
335
+ },
336
+ matchesRepeatableInput: (data) => {
337
+ // Safety takes precedence over hostile user collisions.
338
+ if (CLIO_APP_KEYBINDING_IDS.some((id) => id !== "clio-coder.exit" && deps.keybindings.matches(data, id)))
339
+ return false;
340
+ if (deps.keybindings.matches(data, "clio-coder.exit"))
341
+ return matchesKey(data, "ctrl+d") && deps.editor.getText().length > 0 && deps.overlay.getState() === "closed";
342
+ if (
343
+ ["clio-coder.exit", "clio-coder.leader", "tui.input.submit", "tui.select.confirm", "tui.select.cancel"].some((id) =>
344
+ deps.keybindings.matches(data, id as Keybinding),
345
+ ) ||
346
+ matchesKey(data, "ctrl+c") ||
347
+ matchesKey(data, "escape")
348
+ )
349
+ return false;
350
+ const editable = deps.overlay.getState() === "closed" || search() !== null || owner().keyboardScope === "edit";
351
+ if (editable && (decodePrintableKey(data) !== undefined || deps.keybindings.matches(data, "tui.input.newLine")))
352
+ return true;
353
+ const navigation = ["up", "down", "left", "right", "home", "end", "pageUp", "pageDown"] as const;
354
+ if (navigation.some((key) => matchesKey(data, key))) return true;
355
+ if (
356
+ deps.overlay.getState() !== "closed" &&
357
+ ["tui.select.up", "tui.select.down"].some((id) => deps.keybindings.matches(data, id as Keybinding))
358
+ )
359
+ return true;
360
+ if (
361
+ deps.overlay.getState() === "closed" &&
362
+ ["pageUp", "pageDown", "top", "bottom", "previousPrompt", "nextPrompt"].some((name) =>
363
+ deps.keybindings.matches(data, `tui.altScreen.${name}` as Keybinding),
364
+ )
365
+ )
366
+ return true;
367
+ return (
368
+ (deps.overlay.getState() === "closed" ||
369
+ search() !== null ||
370
+ owner().keyboardScope === "edit" ||
371
+ deps.overlay.getState() === "permission-confirm") &&
372
+ [
373
+ "undo",
374
+ "yank",
375
+ "yankPop",
376
+ "cursorLeft",
377
+ "cursorRight",
378
+ "cursorWordLeft",
379
+ "cursorWordRight",
380
+ "cursorLineStart",
381
+ "cursorLineEnd",
382
+ "deleteCharBackward",
383
+ "deleteCharForward",
384
+ "deleteWordBackward",
385
+ "deleteWordForward",
386
+ "deleteToLineStart",
387
+ "deleteToLineEnd",
388
+ "historyPrevious",
389
+ "historyNext",
390
+ ].some((name) => deps.keybindings.matches(data, `tui.editor.${name}` as Keybinding))
391
+ );
392
+ },
183
393
  clock: deps.clock ?? { now: Date.now },
184
394
  signals: deps.signals ?? {
185
395
  takeInterruptOwnership: () => getTerminationCoordinator().releaseInterruptOwnership(),
@@ -206,8 +416,10 @@ export function createInteractiveInputRuntime(deps: InteractiveInputRuntimeDeps)
206
416
  isInspectingMutation: () => deps.overlay.isInspectingMutation(),
207
417
  toggleMutationInspection: () => deps.overlay.toggleMutationInspection(),
208
418
  scrollMutationInspection: (delta) => deps.overlay.scrollMutationInspection(delta),
209
- editDraft: (data) => {
210
- deps.editor.handleInput?.(data);
419
+ togglePermissionTerms: () => deps.overlay.togglePermissionTerms(),
420
+ canToggleOwner,
421
+ editDraft: (operation) => {
422
+ deps.editor.applyEdit?.(operation);
211
423
  deps.requestRender();
212
424
  },
213
425
  closeOverlay: () => deps.overlay.closeOverlay(),
@@ -259,6 +471,7 @@ export function createInteractiveInputRuntime(deps: InteractiveInputRuntimeDeps)
259
471
  shutdownDisposers: [
260
472
  () => deps.shutdown.stopTickers(),
261
473
  () => leaderKeys.dispose(),
474
+ () => removeReload?.(),
262
475
  () => deps.shutdown.disposeInteractiveTickers(),
263
476
  () => deps.shutdown.disposeBeforeStatus(),
264
477
  () => deps.shutdown.disposeProjectionPrimary(),
@@ -287,6 +500,7 @@ export function createInteractiveInputRuntime(deps: InteractiveInputRuntimeDeps)
287
500
  });
288
501
  deps.registerInputListener((data) => {
289
502
  deps.onInputIngress?.(classifyInputAction(data, deps), data);
503
+
290
504
  return controller.handleInput(data);
291
505
  });
292
506
  return controller;
@@ -309,3 +523,36 @@ function classifyInputAction(data: string, deps: InteractiveInputRuntimeDeps): R
309
523
  if (deps.overlay.getState() !== "closed") return "overlay";
310
524
  return "editor";
311
525
  }
526
+
527
+ /** Operator-facing scope names; overlay state IDs stay inside routing. */
528
+ function overlayScopeLabel(state: OverlayState): string {
529
+ const names: Record<OverlayState, string> = {
530
+ closed: "Composer",
531
+ "permission-confirm": "Permission",
532
+ "dispatch-board": "Workers",
533
+ auth: "Authentication",
534
+ cost: "Usage",
535
+ "context-view": "Context",
536
+ "context-reset": "Context reset",
537
+ tasks: "Tasks",
538
+ decisions: "Decisions",
539
+ memory: "Memory",
540
+ view: "View",
541
+ model: "Model",
542
+ "model-scope": "Model cycle set",
543
+ settings: "Settings",
544
+ resume: "Resume",
545
+ tree: "Session tree",
546
+ "message-picker": "Messages",
547
+ "cwd-fallback": "Working directory",
548
+ "ask-user": "Interview",
549
+ help: "Help",
550
+ extensions: "Extensions",
551
+ interop: "Interop",
552
+ "skills-hub": "Library",
553
+ "side-question": "Side question",
554
+ "handoff-review": "Handoff review",
555
+ "fleet-run-approval": "Run approval",
556
+ };
557
+ return names[state];
558
+ }
@@ -72,6 +72,8 @@ export interface InteractivePresentationFactories {
72
72
  }
73
73
 
74
74
  export interface InteractivePresentationDeps {
75
+ extensionCommands?: import("./slash-autocomplete.js").SlashAutocompleteOptions["extensionCommands"];
76
+ getExtensionStatus?: () => ReadonlyArray<string>;
75
77
  bus: SafeEventBus;
76
78
  providers: ProvidersContract;
77
79
  dispatch: Pick<DispatchContract, "snapshot">;
@@ -89,7 +91,7 @@ export interface InteractivePresentationDeps {
89
91
  /** Pending boot submissions remain visible until serial admission removes them. */
90
92
  bootPending?: Component;
91
93
  getSettings?: () => Readonly<ClioSettings>;
92
- resources?: Pick<ResourcesContract, "skills">;
94
+ resources?: Pick<ResourcesContract, "skills" | "prompts">;
93
95
  agents?: Pick<AgentsContract, "listSpecs">;
94
96
  session?: Pick<SessionContract, "current">;
95
97
  getSessionId?: () => string | null;
@@ -107,6 +109,12 @@ export interface InteractivePresentationDeps {
107
109
  /** Whether that prompt has a mutation to inspect, and whether it is open (issue #254). */
108
110
  getPermissionInspection?: () => import("./permission-hint.js").PermissionInspectionHint;
109
111
  getCwd?: () => string;
112
+ /**
113
+ * True when this process resumed an existing session at boot (`--continue`,
114
+ * `--session <id>`). The header opens collapsed rather than showing
115
+ * fresh-start onboarding above a conversation that already has history.
116
+ */
117
+ startsResumed?: boolean;
110
118
  resolveVisibleEventSequence?: (event: ChatLoopEvent) => number | null;
111
119
  resolveStreamIngress?: (
112
120
  event: ChatLoopEvent,
@@ -181,7 +189,7 @@ const DEFAULT_FACTORIES: InteractivePresentationFactories = {
181
189
  };
182
190
 
183
191
  /** Title-case a KeyId for compact chrome hints, preserving each caller's fallback. */
184
- function formatKeyLabel(keyId: string | undefined, fallback = "Alt+X"): string {
192
+ function formatKeyLabel(keyId: string | undefined, fallback = "unbound"): string {
185
193
  if (!keyId || keyId.length === 0) return fallback;
186
194
  return keyId
187
195
  .split("+")
@@ -220,19 +228,33 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
220
228
  const keybindings = deps.keybindings ?? factories.createKeybindings(settings);
221
229
  const { getExtensionStats, getLiveWorkspaceSnapshot, getWorkspaceSnapshot, refreshLiveWorkspaceGit } =
222
230
  deps.workspaceFacts;
231
+ /**
232
+ * The submit binding as the operator has it, or null when it is unbound or
233
+ * disabled. The header prints a key only when pressing it would actually
234
+ * submit, so a rebound or removed binding silently drops the hint instead of
235
+ * advertising a default that does nothing.
236
+ */
237
+ const effectiveSubmitKeyLabel = (): string | null => {
238
+ if (keybindings.isDisabled("tui.input.submit")) return null;
239
+ const key = keybindings.getKeys("tui.input.submit")[0];
240
+ return key === undefined || key.length === 0 ? null : formatKeyLabel(key, "");
241
+ };
223
242
 
224
243
  const banner = factories.createBanner({
225
244
  providers: deps.providers,
226
- observability: deps.observability,
227
- getContextUsage: () => deps.chat.contextUsage(),
228
245
  getWorkspaceSnapshot,
229
- getExtensionStats,
230
- // The repository probe runs off the render path now, so the frame that
231
- // shows its result has to be asked for when the probe lands.
246
+ // The authoritative project-context reader. It is synchronous on a cache
247
+ // miss, so the banner refreshes it off the frame rather than calling it
248
+ // during render; the frame that shows the result is asked for below.
249
+ ...(deps.getContextState ? { getContextState: deps.getContextState } : {}),
250
+ getSubmitKeyLabel: () => effectiveSubmitKeyLabel(),
232
251
  onFactsRefreshed: requestRender,
233
- ...(deps.getTaskMemoryStatus ? { getTaskMemoryStatus: deps.getTaskMemoryStatus } : {}),
234
252
  ...(deps.getSettings ? { getSettings: deps.getSettings } : {}),
235
253
  });
254
+ // A boot-time `--continue`/`--session` resume opens onto an existing
255
+ // conversation, so the launchpad's fresh-start onboarding would be a lie
256
+ // before the operator has typed anything.
257
+ if (deps.startsResumed === true) banner.collapseToSessionHeader();
236
258
  const renderTrace = getActiveRenderTrace();
237
259
  const chatPanel = factories.createChatPanel({
238
260
  getOutputStyle: () => deps.getSettings?.().interface.outputDetail ?? "standard",
@@ -241,8 +263,7 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
241
263
  });
242
264
  const followUpQueuePanel = factories.createFollowUpQueuePanel({
243
265
  getDequeueKey: () => {
244
- const first = keybindings.getKeys("clio-coder.message.dequeue")[0];
245
- return typeof first === "string" && first.length > 0 ? first : undefined;
266
+ return keybindings.actionLabel("clio-coder.message.dequeue");
246
267
  },
247
268
  });
248
269
  const statusController = factories.createStatusController({
@@ -397,6 +418,7 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
397
418
  : {}),
398
419
  getWorkspaceSnapshot: getLiveWorkspaceSnapshot,
399
420
  getExtensionStats,
421
+ ...(deps.getExtensionStatus ? { getExtensionStatus: deps.getExtensionStatus } : {}),
400
422
  getSessionInfo: () => {
401
423
  const meta = deps.session?.current();
402
424
  return {
@@ -407,7 +429,9 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
407
429
  },
408
430
  getLastTurnSummary: () => lastTurnSummary,
409
431
  getNotifications: () => notifications.list(),
410
- dismissKeyLabel: formatKeyLabel(keybindings.getKeys("clio-coder.notifications.dismiss")[0]),
432
+ get dismissKeyLabel() {
433
+ return keybindings.actionLabel("clio-coder.notifications.dismiss");
434
+ },
411
435
  };
412
436
  footer = factories.buildFooter(footerDeps);
413
437
  const unsubscribeObservability = deps.observability.subscribe((snapshot) => {
@@ -441,11 +465,13 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
441
465
  getTurnPreparation: () => deps.chat.turnPreparation().phase,
442
466
  willEnterSteer: (text) => willEnterSteerActiveWork(deps, text),
443
467
  getSubmitKeyLabel: () => formatKeyLabel(keybindings.getKeys("tui.input.submit")[0], "Enter"),
444
- getNewlineKeyLabel: () => formatKeyLabel(keybindings.getKeys("tui.input.newLine")[0], "Shift+Enter"),
468
+ getNewlineKeyLabel: () => formatKeyLabel(keybindings.getKeys("tui.input.newLine")[0], "Ctrl+J"),
445
469
  };
446
470
  const editor = deps.editor ?? factories.createEditor(deps.tui, editorChrome);
447
471
  editor.focused = true;
448
472
  const autocomplete: AutocompleteProvider = factories.createAutocomplete({
473
+ promptTemplates: () => deps.resources?.prompts(getCwd()).items ?? [],
474
+ ...(deps.extensionCommands ? { extensionCommands: deps.extensionCommands } : {}),
449
475
  completionSources: {
450
476
  agents: async () =>
451
477
  (deps.agents?.listSpecs() ?? []).filter(isUserVisibleAgent).map((agent) => ({
@@ -599,6 +625,9 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
599
625
  const disposeBeforeStatus = (): void => {
600
626
  if (beforeStatusDisposed) return;
601
627
  beforeStatusDisposed = true;
628
+ // Before the subscriptions go: a project-context refresh already in flight
629
+ // must not land afterwards and ask a torn-down presentation for a frame.
630
+ banner.dispose();
602
631
  footer.dispose();
603
632
  unsubscribeObservability();
604
633
  contextActivityStore.unsubscribe();
@@ -17,7 +17,7 @@ import {
17
17
  type ThinkingLevel,
18
18
  thinkingLevelChoiceLabel,
19
19
  } from "../domains/providers/index.js";
20
- import type { LibraryEntryKind, ResourcesContract } from "../domains/resources/index.js";
20
+ import type { ResourcesContract } from "../domains/resources/index.js";
21
21
  import { installSkill } from "../domains/resources/skills/marketplace.js";
22
22
  import { foldDecisionBoard } from "../domains/session/decision-board.js";
23
23
  import type { SessionContract, SessionEntry } from "../domains/session/index.js";
@@ -33,7 +33,7 @@ import type { ChatLoop } from "./chat-loop.js";
33
33
  import { type ChatPanel, createChatPanel } from "./chat-panel.js";
34
34
  import { rehydrateChatPanelFromTurns } from "./chat-renderer.js";
35
35
  import { runCompactWithNotice } from "./command-fallbacks.js";
36
- import { appendNotice, appendOperatorCommand } from "./command-output.js";
36
+ import { appendNotice, appendOperatorAside, appendOperatorCommand, appendReferenceCard } from "./command-output.js";
37
37
  import { runOperatorRecall } from "./context-recall-command.js";
38
38
  import { renderSessionHtml } from "./export-html/index.js";
39
39
  import { dateLocal } from "./format-time.js";
@@ -44,6 +44,7 @@ import {
44
44
  type CouncilDispatchOutcome,
45
45
  dispatchSlashCommand,
46
46
  type InitCommandOptions,
47
+ type LibraryBrowseRequest,
47
48
  parseSlashCommand,
48
49
  type RunIo,
49
50
  type SettingsAreaId,
@@ -61,6 +62,8 @@ export interface InteractiveSlashSubmitExpansion {
61
62
  images: ImageContent[];
62
63
  workingContextPaths: string[];
63
64
  pendingSkillRequests: PendingSkillRequest[];
65
+ /** The typed line and a template note to paint instead of `text`; see `InteractiveSubmitExpansion`. */
66
+ display?: { text: string; note: string };
64
67
  }
65
68
 
66
69
  type SlashChat = Pick<ChatLoop, "clearSkillSurface" | "getSessionId" | "isStreaming" | "submit">;
@@ -72,6 +75,9 @@ type SlashAgents = Pick<AgentsContract, "getSpec" | "listSpecs">;
72
75
  type SlashShare = Pick<ShareContract, "writeArchive" | "planImport" | "importArchive">;
73
76
 
74
77
  export interface InteractiveSlashRuntimeDeps {
78
+ keyboardActions?: SlashCommandContext["keyboardActions"];
79
+ operatorExtensions?: SlashCommandContext["operatorExtensions"];
80
+ showExtensionOutput?: SlashCommandContext["showExtensionOutput"];
75
81
  io: RunIo;
76
82
  bus: SafeEventBus;
77
83
  dispatch: DispatchContract;
@@ -82,6 +88,7 @@ export interface InteractiveSlashRuntimeDeps {
82
88
  resources?: SlashResources;
83
89
  extensions?: SlashExtensions;
84
90
  reloadExtensions?: SlashCommandContext["reloadExtensions"];
91
+ reloadPlugins?: SlashCommandContext["reloadPlugins"];
85
92
  interop?: SlashCommandContext["interop"];
86
93
  agents?: SlashAgents;
87
94
  share?: SlashShare;
@@ -119,7 +126,7 @@ export interface InteractiveSlashRuntimeDeps {
119
126
  session?: Pick<SessionContract, "tree" | "current" | "appendEntry">;
120
127
  expandSubmit: (text: string) => Promise<InteractiveSlashSubmitExpansion>;
121
128
  openAskUser: AskUserHandler;
122
- openSkillsHub: (tab?: LibraryEntryKind) => void;
129
+ openSkillsHub: (request?: LibraryBrowseRequest) => void;
123
130
  openCost: () => void;
124
131
  /** Run one `/btw` side question in its own overlay. */
125
132
  openSideQuestion: (question: string) => void;
@@ -155,8 +162,6 @@ export interface InteractiveSlashRuntimeDeps {
155
162
  openTree: () => void;
156
163
  openMessagePicker: () => void;
157
164
  openHelp: (query?: string) => void;
158
- openAgents: () => void;
159
- openPrompts: () => void;
160
165
  openExtensions: () => void;
161
166
  openInterop?: () => void;
162
167
  openContextReset: () => void;
@@ -260,13 +265,22 @@ export function createInteractiveSlashRuntime(deps: InteractiveSlashRuntimeDeps)
260
265
  // is in the ledger yet, and a refused preflight must not leave a row
261
266
  // that reads like a committed turn (issue #251).
262
267
  let rowStatus: UserTurnStatus = "pending";
263
- if (!willQueue) deps.chatPanel.appendUser(sub.text, () => rowStatus);
268
+ if (!willQueue) {
269
+ deps.chatPanel.appendUser(sub.display?.text ?? sub.text, () => rowStatus);
270
+ if (sub.display) {
271
+ appendOperatorAside(sub.display.note, {
272
+ appendReplayBlock: (renderBlock) => deps.chatPanel.appendReplayBlock(renderBlock),
273
+ requestRender: deps.requestRender,
274
+ });
275
+ }
276
+ }
264
277
  deps.requestRender();
265
278
  let acknowledgeAdmission = (): void => {};
266
279
  const admitted = new Promise<void>((resolve) => {
267
280
  acknowledgeAdmission = resolve;
268
281
  });
269
282
  const turn = deps.chat.submit(sub.text, {
283
+ ...(sub.display ? { display: sub.display } : {}),
270
284
  ...(sub.images.length > 0 ? { images: sub.images } : {}),
271
285
  ...(sub.workingContextPaths.length > 0 ? { workingContextPaths: sub.workingContextPaths } : {}),
272
286
  ...(sub.pendingSkillRequests.length > 0 ? { pendingSkillRequests: sub.pendingSkillRequests } : {}),
@@ -310,6 +324,13 @@ export function createInteractiveSlashRuntime(deps: InteractiveSlashRuntimeDeps)
310
324
  const admitChat = async (text: string, signal?: AbortSignal): Promise<void> => {
311
325
  try {
312
326
  signal?.throwIfAborted();
327
+ // submitChat can be called directly, bypassing command dispatch. Keep
328
+ // the reserved clear command ahead of skill lookup and installation.
329
+ const command = parseSlashCommand(text);
330
+ if (command.kind === "skill-surface-clear") {
331
+ dispatchSlashCommand(command, context);
332
+ return;
333
+ }
313
334
  const submitted = await deps.expandSubmit(text);
314
335
  signal?.throwIfAborted();
315
336
  const uninstalled = submitted.pendingSkillRequests.find((request) => !request.installed);
@@ -379,6 +400,12 @@ export function createInteractiveSlashRuntime(deps: InteractiveSlashRuntimeDeps)
379
400
  requestRender: deps.requestRender,
380
401
  });
381
402
  },
403
+ showReference: (card) => {
404
+ appendReferenceCard(card, {
405
+ appendReplayBlock: (renderBlock) => deps.chatPanel.appendReplayBlock(renderBlock),
406
+ requestRender: deps.requestRender,
407
+ });
408
+ },
382
409
  dispatch: deps.dispatch,
383
410
  ...(deps.getDecisionBoard ? { getDecisionBoard: deps.getDecisionBoard } : {}),
384
411
  bus: deps.bus,
@@ -393,6 +420,9 @@ export function createInteractiveSlashRuntime(deps: InteractiveSlashRuntimeDeps)
393
420
  openSkillsHub: deps.openSkillsHub,
394
421
  clearSkillSurface: () => deps.chat.clearSkillSurface(),
395
422
  listExtensions: () => deps.extensions?.list(cwd(), { all: true }) ?? [],
423
+ ...(deps.keyboardActions ? { keyboardActions: deps.keyboardActions } : {}),
424
+ ...(deps.operatorExtensions ? { operatorExtensions: deps.operatorExtensions } : {}),
425
+ ...(deps.showExtensionOutput ? { showExtensionOutput: deps.showExtensionOutput } : {}),
396
426
  listAgents: () => deps.agents?.listSpecs().filter((spec) => spec.audience !== "internal") ?? [],
397
427
  listDelegationAgents: () => deps.getSettings?.().integrations.externalAgents.entries ?? [],
398
428
  exportShareArchive: (outPath) => {
@@ -531,10 +561,9 @@ export function createInteractiveSlashRuntime(deps: InteractiveSlashRuntimeDeps)
531
561
  openTree: deps.openTree,
532
562
  openMessagePicker: deps.openMessagePicker,
533
563
  openHelp: deps.openHelp,
534
- openAgents: deps.openAgents,
535
- openPrompts: deps.openPrompts,
536
564
  openExtensions: deps.openExtensions,
537
565
  ...(deps.reloadExtensions ? { reloadExtensions: deps.reloadExtensions } : {}),
566
+ ...(deps.reloadPlugins ? { reloadPlugins: deps.reloadPlugins } : {}),
538
567
  ...(deps.openInterop ? { openInterop: deps.openInterop } : {}),
539
568
  ...(deps.interop ? { interop: deps.interop } : {}),
540
569
  setEditorText: (text) => {