@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
@@ -1,5 +1,6 @@
1
- import type { PermissionRequestedPayload } from "../core/bus-events.js";
1
+ import { BusChannels, type PermissionRequestedPayload } from "../core/bus-events.js";
2
2
  import type { ClioSettings } from "../core/config.js";
3
+ import { nextOutputStyle } from "../core/defaults.js";
3
4
  import type { SafeEventBus } from "../core/event-bus.js";
4
5
  import { expandInlineFileReferencesAsync } from "../core/file-references.js";
5
6
  import type { PendingSkillRequest } from "../core/skill-activation.js";
@@ -10,6 +11,7 @@ import type { ClioKeybinding } from "../domains/config/keybindings.js";
10
11
  import type { ContextState } from "../domains/context/index.js";
11
12
  import type { DispatchContract } from "../domains/dispatch/contract.js";
12
13
  import type { ExtensionsContract } from "../domains/extensions/index.js";
14
+ import { OperatorExtensionRuntime } from "../domains/extensions/operator-runtime.js";
13
15
  import type { InteropContract } from "../domains/interop/index.js";
14
16
  import type { TaskMemoryOperatorStatus } from "../domains/memory/index.js";
15
17
  import { openDetachedBatchViews } from "../domains/middleware/index.js";
@@ -67,7 +69,6 @@ import type { createYaziBridge, YaziBridge } from "./yazi-bridge.js";
67
69
 
68
70
  export {
69
71
  IDLE_LEADER_STATE,
70
- LEADER_TIMEOUT_MS,
71
72
  type LeaderKeyController,
72
73
  type LeaderKeyControllerDeps,
73
74
  type LeaderKeyRouteDeps,
@@ -124,8 +125,9 @@ export interface InteractiveDeps {
124
125
  initialNotices?: ReadonlyArray<string>;
125
126
  resources?: ResourcesContract;
126
127
  extensions?: ExtensionsContract;
127
- /** `/resources extensions reload` seam; the composition root supplies the coordinator. */
128
+ /** `/extensions reload` seam; the composition root supplies the coordinator. */
128
129
  reloadExtensions?: SlashCommandContext["reloadExtensions"];
130
+ reloadPlugins?: SlashCommandContext["reloadPlugins"];
129
131
  interop?: InteropContract;
130
132
  share?: ShareContract;
131
133
  /**
@@ -201,6 +203,12 @@ export interface InteractiveDeps {
201
203
  registerAskUserHandler?: (handler: AskUserHandler) => () => void;
202
204
  /** Live CLIO-CODER.md and memory state for the footer Context quadrant. */
203
205
  getContextState?: (cwd?: string) => ContextState;
206
+ /**
207
+ * True when this process resumed an existing session at boot (`--continue`,
208
+ * `--session <id>`). The welcome header opens collapsed so a conversation
209
+ * with history is not topped by fresh-start onboarding.
210
+ */
211
+ startsResumed?: boolean;
204
212
  /**
205
213
  * Persist a thinking level set by `/thinking <level>` or `/model <pattern>:<level>`.
206
214
  * Scope "session" leaves settings.yaml alone; omitted means the historical
@@ -272,9 +280,17 @@ export interface InteractiveSubmitExpansion {
272
280
  images: ImageContent[];
273
281
  workingContextPaths: string[];
274
282
  pendingSkillRequests: PendingSkillRequest[];
283
+ /**
284
+ * What the transcript paints as the operator's turn when `text` is a prompt
285
+ * template's body: the line they typed, and a note naming the template. The
286
+ * model still receives `text`; a `/wtfp:new-paper` body is several hundred
287
+ * lines the operator never wrote, and painting it as their message buried
288
+ * the command under it.
289
+ */
290
+ display?: { text: string; note: string };
275
291
  }
276
292
 
277
- async function expandInteractiveSubmitAsync(
293
+ export async function expandInteractiveSubmitAsync(
278
294
  text: string,
279
295
  resources: ResourcesContract | undefined,
280
296
  cwd = process.cwd(),
@@ -290,11 +306,18 @@ async function expandInteractiveSubmitAsync(
290
306
  includeImages: true,
291
307
  missing: "leave",
292
308
  });
309
+ const display = promptExpansion?.expanded
310
+ ? {
311
+ text: parsed.text.trim(),
312
+ note: `expanded prompt template ${promptExpansion.template.name} (${promptExpansion.text.split("\n").length} lines)`,
313
+ }
314
+ : undefined;
293
315
  return {
294
316
  text: fileExpansion.text,
295
317
  images: fileExpansion.images,
296
318
  workingContextPaths: fileExpansion.referencedPaths,
297
319
  pendingSkillRequests: parsed.pendingSkillRequests,
320
+ ...(display ? { display } : {}),
298
321
  };
299
322
  }
300
323
 
@@ -322,15 +345,12 @@ export interface KeyBindingDeps {
322
345
  openDecisions: () => void;
323
346
  backgroundDispatch: () => void;
324
347
  openModelSelector: () => void;
348
+ openLibrary: () => void;
325
349
  openTree: () => void;
326
350
  cycleScopedModelForward: () => void;
327
351
  cycleScopedModelBackward: () => void;
328
352
  dismissNotifications: () => void;
329
- toggleToolExpansion: () => void;
330
- toggleAllToolExpansion: () => void;
331
- toggleLiveToolOutput: () => void;
332
- toggleThinkingExpansion: () => void;
333
- toggleAllThinkingExpansion: () => void;
353
+ cycleOutputStyle: () => void;
334
354
  openExternalEditor: () => void;
335
355
  queueFollowUp: () => void;
336
356
  interruptWithMessage: () => void;
@@ -359,20 +379,14 @@ export function resolveCtrlCAction(deps: CtrlCActionDeps): CtrlCAction {
359
379
  return "arm-shutdown";
360
380
  }
361
381
 
362
- function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): boolean {
382
+ export function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): boolean {
363
383
  switch (id) {
384
+ case "clio-coder.output.cycle":
385
+ deps.cycleOutputStyle();
386
+ return true;
364
387
  case "clio-coder.notifications.dismiss":
365
388
  deps.dismissNotifications();
366
389
  return true;
367
- case "clio-coder.tool.expand":
368
- deps.toggleToolExpansion();
369
- return true;
370
- case "clio-coder.tool.expandAll":
371
- deps.toggleAllToolExpansion();
372
- return true;
373
- case "clio-coder.tool.liveOutput":
374
- deps.toggleLiveToolOutput();
375
- return true;
376
390
  case "clio-coder.editor.external":
377
391
  deps.openExternalEditor();
378
392
  return true;
@@ -385,12 +399,6 @@ function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): bo
385
399
  case "clio-coder.message.dequeue":
386
400
  deps.restoreQueuedFollowUps();
387
401
  return true;
388
- case "clio-coder.thinking.expand":
389
- deps.toggleThinkingExpansion();
390
- return true;
391
- case "clio-coder.thinking.expandAll":
392
- deps.toggleAllThinkingExpansion();
393
- return true;
394
402
  case "clio-coder.status.toggle":
395
403
  deps.toggleStatus();
396
404
  return true;
@@ -418,6 +426,9 @@ function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): bo
418
426
  case "clio-coder.model.select":
419
427
  deps.openModelSelector();
420
428
  return true;
429
+ case "clio-coder.library.toggle":
430
+ deps.openLibrary();
431
+ return true;
421
432
  case "clio-coder.model.cycleBackward":
422
433
  deps.cycleScopedModelBackward();
423
434
  return true;
@@ -445,6 +456,7 @@ export function routeInteractiveKey(data: string, deps: KeyBindingDeps): boolean
445
456
  "clio-coder.decisions.open",
446
457
  "clio-coder.dispatch.background",
447
458
  "clio-coder.model.select",
459
+ "clio-coder.library.toggle",
448
460
  // Match cycleBackward before cycleForward so a user rebind where one key
449
461
  // is a prefix of the other resolves to the more specific binding first.
450
462
  // The defaults (alt+k / alt+j) do not prefix-match each other.
@@ -551,9 +563,49 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
551
563
  * rail reads it through the optional chain before then as "no prompt".
552
564
  */
553
565
  let overlayLifecycle: OverlayLifecycleController;
566
+ let refreshOperatorUi = (): void => {};
567
+ let scheduleOperatorMaintenance = (): void => {};
568
+ let operatorTimer: ReturnType<typeof setTimeout> | undefined;
569
+ let operatorPanelValid: (() => boolean) | undefined;
570
+ const operatorExtensions = deps.extensions
571
+ ? new OperatorExtensionRuntime({
572
+ context: () => ({
573
+ workspace: process.cwd(),
574
+ sessionId: deps.session?.current()?.id ?? deps.getSessionId?.() ?? null,
575
+ mode: "interactive",
576
+ }),
577
+ isIdle: () =>
578
+ !deps.chat.isStreaming() &&
579
+ deps.chat.turnPreparation().phase === "idle" &&
580
+ (overlayLifecycle?.getState() ?? "closed") === "closed" &&
581
+ !editorSubmit?.hasActiveEditorBash(),
582
+ list: (cwd) => deps.extensions?.list(cwd, { all: true }) ?? [],
583
+ ...(deps.reloadExtensions ? { commitHooks: deps.reloadExtensions } : {}),
584
+ onChange: () => refreshOperatorUi(),
585
+ ...(deps.toolRegistry
586
+ ? {
587
+ frozenTools: deps.toolRegistry
588
+ .listAll()
589
+ .flatMap((tool) => (tool.sourceInfo?.extension ? [tool.sourceInfo.extension] : [])),
590
+ }
591
+ : {}),
592
+ onDiagnostic: (message) => notify("warning", message, "operator-extensions:observation"),
593
+ onReload: (result) => {
594
+ if (result.status !== "deferred")
595
+ notify(result.status === "rejected" ? "error" : "info", result.message, "operator-extensions:reload");
596
+ },
597
+ })
598
+ : undefined;
554
599
  const presentation = createInteractivePresentation({
555
600
  bus: deps.bus,
556
601
  getLeaderArmed: () => leaderArmed,
602
+ extensionCommands: () => operatorExtensions?.commands() ?? [],
603
+ getExtensionStatus: () =>
604
+ overlayLifecycle?.getState() === "permission-confirm"
605
+ ? []
606
+ : (operatorExtensions?.entries() ?? []).flatMap((entry) =>
607
+ entry.status ? [`${entry.id}: ${entry.status.text}`] : [],
608
+ ),
557
609
  getShutdownArmed: () => shutdownArmed,
558
610
  isAwaitingApproval: () => overlayLifecycle?.getState() === "permission-confirm",
559
611
  getPermissionInspection: () => {
@@ -592,6 +644,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
592
644
  ...(deps.getTaskMemoryStatus ? { getTaskMemoryStatus: deps.getTaskMemoryStatus } : {}),
593
645
  ...(deps.getTaskMemorySeedOffer ? { getTaskMemorySeedOffer: deps.getTaskMemorySeedOffer } : {}),
594
646
  ...(deps.getContextState ? { getContextState: deps.getContextState } : {}),
647
+ ...(deps.startsResumed === true ? { startsResumed: true } : {}),
595
648
  });
596
649
  const {
597
650
  keybindings,
@@ -636,6 +689,15 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
636
689
  : null;
637
690
  const detachYaziBridge = yaziBridge ? deps.attachYaziBridge?.(yaziBridge) : undefined;
638
691
  refreshPresentationFooter = () => footer.refresh();
692
+ refreshOperatorUi = () => {
693
+ scheduleOperatorMaintenance();
694
+ if (operatorPanelValid && !operatorPanelValid() && overlayLifecycle?.getState() === "extensions") {
695
+ operatorPanelValid = undefined;
696
+ overlayLifecycle.closeOverlay();
697
+ }
698
+ footer.refresh();
699
+ tui.requestRender();
700
+ };
639
701
  const agentProgress = createAgentProgress(terminal);
640
702
  // Desktop notifications are a protocol write on the terminal owner, issued
641
703
  // outside any render transaction, so the sequence carries frameId null and
@@ -671,12 +733,13 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
671
733
  recordToolStart: (toolName, toolCallId) => presentation.recordToolStart(toolCallId, toolName),
672
734
  recordToolEnd: (_toolName, toolCallId, isError, truncated) =>
673
735
  presentation.recordToolEnd({ toolCallId, isError, truncated }),
674
- setStatusLine: (line) => chatPanel.setStatusLine(line),
675
- setLiveReasoning: (view) => chatPanel.setLiveReasoning(view),
676
736
  setLastTurnSummary: (summary) => presentation.setLastTurnSummary(summary),
677
737
  startTerminalProgress: () => agentProgress.start(),
678
738
  stopTerminalProgress: () => agentProgress.stop(),
679
- onTurnEnded: () => desktopNotifications.turnEnded(),
739
+ onTurnEnded: () => {
740
+ desktopNotifications.turnEnded();
741
+ operatorExtensions?.observe({ event: "turn_end", reason: "completed" });
742
+ },
680
743
  refreshLiveWorkspaceGit,
681
744
  refreshFooter: () => footer.refresh(),
682
745
  requestRender: () => tui.requestRender(),
@@ -685,6 +748,9 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
685
748
  appendTranscriptNotice: (level, text) => appendNotice(level, text, busNoticeSink),
686
749
  refreshSettingsOverlay: () => overlayLifecycle.refreshSettingsOverlay(),
687
750
  onConfigHotReload: (settings) => {
751
+ keybindings.reload(settings.interface.keybindings ?? {});
752
+ footer.refresh();
753
+ tui.requestRender();
688
754
  const mode = settings.interface.smoothStreaming;
689
755
  const autoAllowed = processAutoPacingAllowed(shell.hasObservedBackpressure());
690
756
  chatRenderer.setSmoothStreamingMode(mode);
@@ -700,6 +766,30 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
700
766
  const toolRegistry = deps.toolRegistry;
701
767
  const interopSurface = interop ? interopOverlaySurface(interop, (level, text) => notify(level, text)) : null;
702
768
  const slashRuntime = createInteractiveSlashRuntime({
769
+ keyboardActions: {
770
+ background: () => backgroundActiveDispatch(),
771
+ editor: (text) => editorSubmit.openExternalEditorForInput(text),
772
+ interrupt: (text) => editorSubmit.interruptFromEditor(text),
773
+ dismiss: (all) => applicationController.dismissNotifications(all),
774
+ outputLabel: () => keybindings.actionLabel("clio-coder.output.cycle"),
775
+ },
776
+ ...(operatorExtensions ? { operatorExtensions } : {}),
777
+ showExtensionOutput: (invocation, output) => {
778
+ const generation = operatorExtensions?.activeGeneration;
779
+ const id = invocation.split(":")[1];
780
+ const valid = () =>
781
+ operatorExtensions
782
+ ?.entries()
783
+ .some((entry) => entry.id === id && entry.state === "ready" && entry.generation === generation) ?? false;
784
+ if (!valid()) return;
785
+ if (
786
+ output.panel &&
787
+ !deps.chat.isStreaming() &&
788
+ overlayLifecycle.openExtensionPanelState(id ?? invocation, output.panel, valid)
789
+ )
790
+ operatorPanelValid = valid;
791
+ else slashRuntime.context.showReference?.({ command: invocation, source: "operator extension", text: output.text });
792
+ },
703
793
  io,
704
794
  bus: deps.bus,
705
795
  dispatch: deps.dispatch,
@@ -710,13 +800,13 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
710
800
  chatPanel: {
711
801
  appendReplayBlock: (...args) => chatRenderer.mutate(() => chatPanel.appendReplayBlock(...args), "slash-output"),
712
802
  appendUser: (text, status) => chatRenderer.mutate(() => chatPanel.appendUser(text, status), "user-submit"),
713
- clearFoldOverrides: () => chatRenderer.mutate(() => chatPanel.clearFoldOverrides(), "output-detail"),
714
803
  },
715
804
  beforeSemanticSubmit: () => chatRenderer.flush(),
716
805
  settleVisibleFrame: (reason) => chatRenderer.flushAndCommit(reason),
717
806
  ...(deps.resources ? { resources: deps.resources } : {}),
718
807
  ...(deps.extensions ? { extensions: deps.extensions } : {}),
719
808
  ...(deps.reloadExtensions ? { reloadExtensions: deps.reloadExtensions } : {}),
809
+ ...(deps.reloadPlugins ? { reloadPlugins: deps.reloadPlugins } : {}),
720
810
  ...(interopSurface ? { interop: interopSurface } : {}),
721
811
  ...(deps.agents ? { agents: deps.agents } : {}),
722
812
  ...(deps.share ? { share: deps.share } : {}),
@@ -739,7 +829,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
739
829
  readStructuredEntries,
740
830
  expandSubmit: (text) => expandInteractiveSubmitAsync(text, deps.resources),
741
831
  openAskUser: (questions, options) => openAskUserOverlayState(questions, options),
742
- openSkillsHub: (tab) => openSkillsHubState(tab),
832
+ openSkillsHub: (request) => openSkillsHubState(request),
743
833
  openCost: () => openCostOverlayState(),
744
834
  openSideQuestion: (question) => openSideQuestionOverlayState(question),
745
835
  startHandoff: (goal) => startHandoffState(goal),
@@ -776,8 +866,6 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
776
866
  openTree: () => openTreeOverlayState(),
777
867
  openMessagePicker: () => openMessagePickerOverlayState(),
778
868
  openHelp: (query) => openHelpOverlayState(query),
779
- openAgents: () => openAgentsOverlayState(),
780
- openPrompts: () => openPromptsOverlayState(),
781
869
  openExtensions: () => openExtensionsOverlayState(),
782
870
  openInterop: () => openInteropOverlayState(),
783
871
  openContextReset: () => openContextResetOverlayState(),
@@ -788,6 +876,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
788
876
  });
789
877
 
790
878
  const editorSubmit = createEditorSubmitController({
879
+ onLocalBashRunning: presentation.setLocalBashRunning,
791
880
  editor,
792
881
  ui: tui,
793
882
  io,
@@ -833,6 +922,21 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
833
922
  interactiveSubscriptions.workers.reset();
834
923
  });
835
924
  };
925
+ /**
926
+ * The same reset, plus the header collapse that adopting an existing
927
+ * conversation implies. `/resume`, `/tree`, `/fork` and `/handoff` all rebuild
928
+ * the transcript from a session that already has turns, so the launchpad's
929
+ * fresh-start onboarding must not survive above it. `/new` deliberately calls
930
+ * the bare reset above and re-expands the launchpad instead.
931
+ *
932
+ * Collapsing here rather than at each overlay call site keeps one seam for
933
+ * all four paths; `collapseToSessionHeader` is idempotent, so a resume that is
934
+ * immediately submitted to cannot produce a second transition.
935
+ */
936
+ const adoptExistingConversation = (): void => {
937
+ presentation.collapseWelcomeDashboard();
938
+ resetTranscript();
939
+ };
836
940
  overlayLifecycle = createOverlayLifecycle({
837
941
  app: deps,
838
942
  tui,
@@ -845,7 +949,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
845
949
  dispatchBoard,
846
950
  setFleetRunPhase: (runId, phase) => dispatchBoardStore.setFleetPhase(runId, phase),
847
951
  chatPanel,
848
- resetTranscript,
952
+ resetTranscript: adoptExistingConversation,
849
953
  io,
850
954
  readStructuredEntries,
851
955
  announceTaskMemorySeedOffer,
@@ -886,9 +990,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
886
990
  openTreeOverlayState,
887
991
  openMessagePickerOverlayState,
888
992
  openHelpOverlayState,
889
- openAgentsOverlayState,
890
993
  openSkillsHubState,
891
- openPromptsOverlayState,
892
994
  openExtensionsOverlayState,
893
995
  openInteropOverlayState,
894
996
  toggleDispatchBoardOverlay,
@@ -905,13 +1007,14 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
905
1007
  const { cancelSelectedDispatch, steerSelectedDispatch } = dispatchSteering;
906
1008
 
907
1009
  const cancelActiveRun = (): void => {
1010
+ operatorExtensions?.cancel();
908
1011
  // Esc must not eat typed work: queued steers and follow-ups return to the
909
1012
  // editor before the abort, the same restore the reference implementation
910
1013
  // performs. cancel() then finds both queues already empty.
911
1014
  const restored = deps.chat.clearQueuedFollowUps();
912
1015
  if (restored.length > 0) {
913
- const current = editor.getText();
914
- editor.setText([restored.join("\n\n"), current].filter((part) => part.trim().length > 0).join("\n\n"));
1016
+ const current = editor.getExpandedText();
1017
+ editor.setLiteralText([restored.join("\n\n"), current].filter((part) => part.trim().length > 0).join("\n\n"));
915
1018
  }
916
1019
  chatRenderer.flush();
917
1020
  deps.chat.cancel();
@@ -936,19 +1039,19 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
936
1039
  tui.requestRender();
937
1040
  };
938
1041
  /**
939
- * Alt+J and Alt+K with nothing to step to. The help center documents both
1042
+ * Explicit model-cycle bindings with nothing to step to. The help center documents both
940
1043
  * keys, so a keypress that changes no pixel reads as a broken binding rather
941
- * than as an empty set; the set itself is chosen in `/scoped-models`.
1044
+ * than as an empty set; the set itself is chosen in `/settings chat model-picker`.
942
1045
  */
943
1046
  const announceEmptyScopedSet = (): void => {
944
1047
  notify(
945
1048
  "info",
946
- "scoped models: nothing to cycle to; run /scoped-models to choose the set Alt+J and Alt+K step through",
1049
+ "scoped models: nothing to cycle to; run /settings chat model-picker to choose the configured cycle set",
947
1050
  "scoped-models:empty",
948
1051
  );
949
1052
  };
950
1053
  /**
951
- * Alt+S / Ctrl+Alt+B. The dispatch tool owns the conversion and answers with
1054
+ * Ctrl+G s / /background. The dispatch tool owns the conversion and answers with
952
1055
  * the line to show, so the refusal a review-gated or compete call returns is
953
1056
  * rendered verbatim rather than restated here.
954
1057
  */
@@ -1061,10 +1164,53 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1061
1164
  });
1062
1165
 
1063
1166
  applicationController = createInteractiveInputRuntime({
1167
+ tui,
1168
+ hasQueuedMessages: () => {
1169
+ const queue = deps.chat.queuedMessages();
1170
+ return queue.steer.length + queue.followUp.length > 0;
1171
+ },
1172
+ explainProtectedExit: () =>
1173
+ notify(
1174
+ "info",
1175
+ `Work or queued messages remain. Cancel with Ctrl+C, recover with ${keybindings.actionLabel("clio-coder.message.dequeue")}, or use /quit.`,
1176
+ "keyboard:exit",
1177
+ ),
1178
+ explainThinkingUnavailable: () => notify("info", "This model supports only thinking off", "keyboard:thinking"),
1179
+ explainSearchUnavailable: () =>
1180
+ notify("info", "Clio transcript search requires fullscreen; use your terminal's Find", "keyboard:search"),
1064
1181
  keybindings,
1065
1182
  dispatchAction: dispatchInteractiveAction,
1066
1183
  actions: {
1067
- canExit: () => editor.getText().length === 0,
1184
+ canExit: () => {
1185
+ if (editor.getText().length > 0) return false;
1186
+ const queue = deps.chat.queuedMessages();
1187
+ if (
1188
+ deps.chat.isStreaming() ||
1189
+ deps.chat.turnPreparation().phase !== "idle" ||
1190
+ deps.dispatch.snapshot().running.length > 0 ||
1191
+ editorSubmit.hasActiveEditorBash() ||
1192
+ operatorExtensions?.busy ||
1193
+ queue.steer.length + queue.followUp.length > 0
1194
+ ) {
1195
+ notify(
1196
+ "info",
1197
+ `Work or queued messages remain. Cancel with Ctrl+C, recover with ${keybindings.actionLabel("clio-coder.message.dequeue")}, or use /quit.`,
1198
+ "keyboard:exit",
1199
+ );
1200
+ return false;
1201
+ }
1202
+ return true;
1203
+ },
1204
+ cycleOutputStyle: () => {
1205
+ const settings = deps.getSettings?.();
1206
+ if (!settings || !deps.commitSetting) return;
1207
+ presentation.changeOutputStyle(() => {
1208
+ const next = structuredClone(settings) as ClioSettings;
1209
+ next.interface.outputDetail = nextOutputStyle(next.interface.outputDetail);
1210
+ deps.commitSetting?.("interface.outputDetail", next, "session");
1211
+ });
1212
+ footer.refresh();
1213
+ },
1068
1214
  availableThinkingLevels: () => availableInteractiveThinkingLevels(deps),
1069
1215
  onCycleThinking: () => deps.onCycleThinking?.(),
1070
1216
  cycleScopedModelForward: () => {
@@ -1117,31 +1263,13 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1117
1263
  steerSelectedDispatch,
1118
1264
  cancelSelectedDispatch,
1119
1265
  cancelActiveEditorBash: () => editorSubmit.cancelActiveEditorBash(),
1120
- isStreaming: () => deps.chat.isStreaming() || deps.chat.turnPreparation().phase === "compacting",
1266
+ isStreaming: () =>
1267
+ deps.chat.isStreaming() || deps.chat.turnPreparation().phase !== "idle" || (operatorExtensions?.busy ?? false),
1121
1268
  cancelActiveRun,
1122
1269
  editor,
1123
1270
  editorSubmit,
1124
1271
  requestRender: () => tui.requestRender(),
1125
1272
  notifications,
1126
- chatPanel: {
1127
- toggleLastToolExpanded: () => chatPanel.toggleLastToolExpanded(),
1128
- toggleAllToolsExpanded: () => chatPanel.toggleAllToolsExpanded(),
1129
- toggleLiveToolOutput: () => chatPanel.toggleLiveToolOutput(),
1130
- toggleLastThinking: () => {
1131
- let changed = false;
1132
- chatRenderer.mutate(() => {
1133
- changed = chatPanel.toggleLastThinking();
1134
- }, "thinking-visibility");
1135
- return changed;
1136
- },
1137
- toggleAllThinking: () => {
1138
- let changed = false;
1139
- chatRenderer.mutate(() => {
1140
- changed = chatPanel.toggleAllThinking();
1141
- }, "thinking-visibility");
1142
- return changed;
1143
- },
1144
- },
1145
1273
  shutdown: {
1146
1274
  stopTickers: presentation.stopTickers,
1147
1275
  disposeInteractiveTickers: interactiveTickers.dispose,
@@ -1153,6 +1281,9 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1153
1281
  stopAgentProgress: agentProgress.stop,
1154
1282
  disposeChat: () => deps.chat.dispose(),
1155
1283
  disposeSubscriptions: () => {
1284
+ clearTimeout(operatorTimer);
1285
+ for (const unsubscribe of operatorSubscriptions) unsubscribe();
1286
+ void operatorExtensions?.dispose();
1156
1287
  detachYaziBridge?.();
1157
1288
  yaziBridge?.dispose();
1158
1289
  detachWatchPane?.();
@@ -1181,6 +1312,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1181
1312
  if (leftBehind !== null) process.stderr.write(`${leftBehind}\n`);
1182
1313
  try {
1183
1314
  if (dumpInputWedgeOnTerminate) process.off("SIGTERM", dumpInputWedgeOnTerminate);
1315
+ await operatorExtensions?.dispose();
1184
1316
  await deps.onShutdown();
1185
1317
  } finally {
1186
1318
  if (lease) await lease.close();
@@ -1189,7 +1321,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1189
1321
  },
1190
1322
  registerInputListener: (listener) => {
1191
1323
  if (lease) lease.registerApplicationInput(listener);
1192
- else tui.addInputListener(listener);
1324
+ else tui.setApplicationInputPolicy(listener);
1193
1325
  },
1194
1326
  ...(lease
1195
1327
  ? {
@@ -1206,6 +1338,36 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1206
1338
  : {}),
1207
1339
  });
1208
1340
 
1341
+ const operatorSubscriptions = operatorExtensions
1342
+ ? [
1343
+ BusChannels.SessionStart,
1344
+ BusChannels.SessionEnd,
1345
+ BusChannels.SessionParked,
1346
+ BusChannels.SessionResumed,
1347
+ BusChannels.SessionTurnSwitched,
1348
+ ].map((channel) => deps.bus.on(channel, () => operatorExtensions.invalidateContext()))
1349
+ : [];
1350
+ scheduleOperatorMaintenance = () => {
1351
+ clearTimeout(operatorTimer);
1352
+ const delay = operatorExtensions?.maintenanceDelayMs;
1353
+ if (delay === undefined || delay === null) return;
1354
+ operatorTimer = setTimeout(() => {
1355
+ operatorExtensions?.maintenance();
1356
+ scheduleOperatorMaintenance();
1357
+ }, delay);
1358
+ operatorTimer.unref();
1359
+ };
1360
+ queueMicrotask(() => {
1361
+ void operatorExtensions?.reload("startup");
1362
+ });
1363
+ getTerminationCoordinator().onDrain(
1364
+ async () => {
1365
+ clearTimeout(operatorTimer);
1366
+ for (const unsubscribe of operatorSubscriptions) unsubscribe();
1367
+ await operatorExtensions?.dispose();
1368
+ },
1369
+ { timeoutMs: 6500 },
1370
+ );
1209
1371
  if (lease) {
1210
1372
  const adopted = lease.adopt({
1211
1373
  root: presentation.root,
@@ -11,7 +11,6 @@ import {
11
11
  import type { ClioSettings } from "../core/config.js";
12
12
  import type { SafeEventBus } from "../core/event-bus.js";
13
13
  import { routingChangeNotices } from "../core/session-routing.js";
14
- import { visibleWidth } from "../engine/tui.js";
15
14
  import {
16
15
  budgetAlertNotice,
17
16
  middlewareHookFailedSessionNotice,
@@ -26,27 +25,11 @@ import {
26
25
  toolBudgetAuditReason,
27
26
  toolBudgetStopReason,
28
27
  } from "./loop-guard-interrupt.js";
29
- import {
30
- type AgentStatus,
31
- INLINE_STATUS_INDENT_COLS,
32
- type ReasoningUsageView,
33
- reasoningFromTally,
34
- resolveInlineVerb,
35
- type StatusPhase,
36
- spinnerFrame,
37
- type TurnSummary,
38
- type VerbRender,
39
- } from "./status/index.js";
28
+ import type { AgentStatus, TurnSummary } from "./status/index.js";
40
29
 
41
30
  export type InteractiveProjectionNoticeLevel = "info" | "success" | "warning" | "error";
42
31
  export type InteractiveTranscriptNoticeLevel = "info" | "success" | "warn" | "error";
43
32
 
44
- export interface InteractiveStatusLine {
45
- phase: StatusPhase;
46
- verb: string;
47
- toneHint: VerbRender["toneHint"];
48
- }
49
-
50
33
  export interface InteractiveEventProjectionDeps {
51
34
  bus: SafeEventBus;
52
35
  chat: {
@@ -69,12 +52,10 @@ export interface InteractiveEventProjectionDeps {
69
52
  resetAskUserCancellation: () => void;
70
53
  recordToolStart: (toolName: string, toolCallId: string) => void;
71
54
  recordToolEnd: (toolName: string, toolCallId: string, isError: boolean, truncated: boolean) => void;
72
- setStatusLine: (line: InteractiveStatusLine | null) => void;
73
55
  /**
74
56
  * Publish the live turn's reasoning projection to the transcript. Optional so
75
57
  * a host without a chat panel still gets every other projection.
76
58
  */
77
- setLiveReasoning?: (view: ReasoningUsageView | null) => void;
78
59
  setLastTurnSummary: (summary: TurnSummary) => void;
79
60
  startTerminalProgress: () => void;
80
61
  stopTerminalProgress: () => void;
@@ -126,8 +107,6 @@ function askUserInterviewClosedByToolResult(event: {
126
107
  * subscriptions.
127
108
  */
128
109
  export function createInteractiveEventProjection(deps: InteractiveEventProjectionDeps): InteractiveEventProjection {
129
- const now = deps.now ?? Date.now;
130
-
131
110
  for (const notice of deps.initialNotices ?? []) {
132
111
  const text = notice.trim();
133
112
  if (text.length === 0) continue;
@@ -187,30 +166,9 @@ export function createInteractiveEventProjection(deps: InteractiveEventProjectio
187
166
  }),
188
167
  );
189
168
 
190
- let statusInlineFrame = 0;
191
169
  primaryUnsubscribers.push(
192
170
  deps.status.subscribe((status) => {
193
- // One projection of the run tally reaches the transcript, so the live
194
- // line, the turn receipt, and the footer state the same number.
195
- deps.setLiveReasoning?.(
196
- status.phase === "idle" || status.phase === "ended" ? null : reasoningFromTally(status.runTally),
197
- );
198
- if (status.phase === "idle") {
199
- deps.setStatusLine(null);
200
- } else if (status.phase === "ended") {
201
- deps.setStatusLine(null);
202
- if (status.summary) deps.setLastTurnSummary(status.summary);
203
- } else {
204
- const cols = deps.getTerminalColumns();
205
- const frame = cols < 30 ? "" : `${spinnerFrame(statusInlineFrame)} `;
206
- const verb = resolveInlineVerb(status, now(), cols, INLINE_STATUS_INDENT_COLS + visibleWidth(frame));
207
- if (verb) {
208
- deps.setStatusLine({ phase: status.phase, verb: `${frame}${verb.text}`, toneHint: verb.toneHint });
209
- statusInlineFrame = (statusInlineFrame + 1) % 10;
210
- } else {
211
- deps.setStatusLine(null);
212
- }
213
- }
171
+ if (status.phase === "ended" && status.summary) deps.setLastTurnSummary(status.summary);
214
172
  deps.refreshFooter();
215
173
  deps.requestRender();
216
174
  }),