@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,4 +1,4 @@
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
3
  import { nextOutputStyle } from "../core/defaults.js";
4
4
  import type { SafeEventBus } from "../core/event-bus.js";
@@ -11,6 +11,7 @@ import type { ClioKeybinding } from "../domains/config/keybindings.js";
11
11
  import type { ContextState } from "../domains/context/index.js";
12
12
  import type { DispatchContract } from "../domains/dispatch/contract.js";
13
13
  import type { ExtensionsContract } from "../domains/extensions/index.js";
14
+ import { OperatorExtensionRuntime } from "../domains/extensions/operator-runtime.js";
14
15
  import type { InteropContract } from "../domains/interop/index.js";
15
16
  import type { TaskMemoryOperatorStatus } from "../domains/memory/index.js";
16
17
  import { openDetachedBatchViews } from "../domains/middleware/index.js";
@@ -68,7 +69,6 @@ import type { createYaziBridge, YaziBridge } from "./yazi-bridge.js";
68
69
 
69
70
  export {
70
71
  IDLE_LEADER_STATE,
71
- LEADER_TIMEOUT_MS,
72
72
  type LeaderKeyController,
73
73
  type LeaderKeyControllerDeps,
74
74
  type LeaderKeyRouteDeps,
@@ -125,8 +125,9 @@ export interface InteractiveDeps {
125
125
  initialNotices?: ReadonlyArray<string>;
126
126
  resources?: ResourcesContract;
127
127
  extensions?: ExtensionsContract;
128
- /** `/resources extensions reload` seam; the composition root supplies the coordinator. */
128
+ /** `/extensions reload` seam; the composition root supplies the coordinator. */
129
129
  reloadExtensions?: SlashCommandContext["reloadExtensions"];
130
+ reloadPlugins?: SlashCommandContext["reloadPlugins"];
130
131
  interop?: InteropContract;
131
132
  share?: ShareContract;
132
133
  /**
@@ -202,6 +203,12 @@ export interface InteractiveDeps {
202
203
  registerAskUserHandler?: (handler: AskUserHandler) => () => void;
203
204
  /** Live CLIO-CODER.md and memory state for the footer Context quadrant. */
204
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;
205
212
  /**
206
213
  * Persist a thinking level set by `/thinking <level>` or `/model <pattern>:<level>`.
207
214
  * Scope "session" leaves settings.yaml alone; omitted means the historical
@@ -273,9 +280,17 @@ export interface InteractiveSubmitExpansion {
273
280
  images: ImageContent[];
274
281
  workingContextPaths: string[];
275
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 };
276
291
  }
277
292
 
278
- async function expandInteractiveSubmitAsync(
293
+ export async function expandInteractiveSubmitAsync(
279
294
  text: string,
280
295
  resources: ResourcesContract | undefined,
281
296
  cwd = process.cwd(),
@@ -291,11 +306,18 @@ async function expandInteractiveSubmitAsync(
291
306
  includeImages: true,
292
307
  missing: "leave",
293
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;
294
315
  return {
295
316
  text: fileExpansion.text,
296
317
  images: fileExpansion.images,
297
318
  workingContextPaths: fileExpansion.referencedPaths,
298
319
  pendingSkillRequests: parsed.pendingSkillRequests,
320
+ ...(display ? { display } : {}),
299
321
  };
300
322
  }
301
323
 
@@ -323,6 +345,7 @@ export interface KeyBindingDeps {
323
345
  openDecisions: () => void;
324
346
  backgroundDispatch: () => void;
325
347
  openModelSelector: () => void;
348
+ openLibrary: () => void;
326
349
  openTree: () => void;
327
350
  cycleScopedModelForward: () => void;
328
351
  cycleScopedModelBackward: () => void;
@@ -356,7 +379,7 @@ export function resolveCtrlCAction(deps: CtrlCActionDeps): CtrlCAction {
356
379
  return "arm-shutdown";
357
380
  }
358
381
 
359
- function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): boolean {
382
+ export function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): boolean {
360
383
  switch (id) {
361
384
  case "clio-coder.output.cycle":
362
385
  deps.cycleOutputStyle();
@@ -403,6 +426,9 @@ function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): bo
403
426
  case "clio-coder.model.select":
404
427
  deps.openModelSelector();
405
428
  return true;
429
+ case "clio-coder.library.toggle":
430
+ deps.openLibrary();
431
+ return true;
406
432
  case "clio-coder.model.cycleBackward":
407
433
  deps.cycleScopedModelBackward();
408
434
  return true;
@@ -430,6 +456,7 @@ export function routeInteractiveKey(data: string, deps: KeyBindingDeps): boolean
430
456
  "clio-coder.decisions.open",
431
457
  "clio-coder.dispatch.background",
432
458
  "clio-coder.model.select",
459
+ "clio-coder.library.toggle",
433
460
  // Match cycleBackward before cycleForward so a user rebind where one key
434
461
  // is a prefix of the other resolves to the more specific binding first.
435
462
  // The defaults (alt+k / alt+j) do not prefix-match each other.
@@ -536,9 +563,49 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
536
563
  * rail reads it through the optional chain before then as "no prompt".
537
564
  */
538
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;
539
599
  const presentation = createInteractivePresentation({
540
600
  bus: deps.bus,
541
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
+ ),
542
609
  getShutdownArmed: () => shutdownArmed,
543
610
  isAwaitingApproval: () => overlayLifecycle?.getState() === "permission-confirm",
544
611
  getPermissionInspection: () => {
@@ -577,6 +644,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
577
644
  ...(deps.getTaskMemoryStatus ? { getTaskMemoryStatus: deps.getTaskMemoryStatus } : {}),
578
645
  ...(deps.getTaskMemorySeedOffer ? { getTaskMemorySeedOffer: deps.getTaskMemorySeedOffer } : {}),
579
646
  ...(deps.getContextState ? { getContextState: deps.getContextState } : {}),
647
+ ...(deps.startsResumed === true ? { startsResumed: true } : {}),
580
648
  });
581
649
  const {
582
650
  keybindings,
@@ -621,6 +689,15 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
621
689
  : null;
622
690
  const detachYaziBridge = yaziBridge ? deps.attachYaziBridge?.(yaziBridge) : undefined;
623
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
+ };
624
701
  const agentProgress = createAgentProgress(terminal);
625
702
  // Desktop notifications are a protocol write on the terminal owner, issued
626
703
  // outside any render transaction, so the sequence carries frameId null and
@@ -659,7 +736,10 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
659
736
  setLastTurnSummary: (summary) => presentation.setLastTurnSummary(summary),
660
737
  startTerminalProgress: () => agentProgress.start(),
661
738
  stopTerminalProgress: () => agentProgress.stop(),
662
- onTurnEnded: () => desktopNotifications.turnEnded(),
739
+ onTurnEnded: () => {
740
+ desktopNotifications.turnEnded();
741
+ operatorExtensions?.observe({ event: "turn_end", reason: "completed" });
742
+ },
663
743
  refreshLiveWorkspaceGit,
664
744
  refreshFooter: () => footer.refresh(),
665
745
  requestRender: () => tui.requestRender(),
@@ -668,6 +748,9 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
668
748
  appendTranscriptNotice: (level, text) => appendNotice(level, text, busNoticeSink),
669
749
  refreshSettingsOverlay: () => overlayLifecycle.refreshSettingsOverlay(),
670
750
  onConfigHotReload: (settings) => {
751
+ keybindings.reload(settings.interface.keybindings ?? {});
752
+ footer.refresh();
753
+ tui.requestRender();
671
754
  const mode = settings.interface.smoothStreaming;
672
755
  const autoAllowed = processAutoPacingAllowed(shell.hasObservedBackpressure());
673
756
  chatRenderer.setSmoothStreamingMode(mode);
@@ -683,6 +766,30 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
683
766
  const toolRegistry = deps.toolRegistry;
684
767
  const interopSurface = interop ? interopOverlaySurface(interop, (level, text) => notify(level, text)) : null;
685
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
+ },
686
793
  io,
687
794
  bus: deps.bus,
688
795
  dispatch: deps.dispatch,
@@ -699,6 +806,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
699
806
  ...(deps.resources ? { resources: deps.resources } : {}),
700
807
  ...(deps.extensions ? { extensions: deps.extensions } : {}),
701
808
  ...(deps.reloadExtensions ? { reloadExtensions: deps.reloadExtensions } : {}),
809
+ ...(deps.reloadPlugins ? { reloadPlugins: deps.reloadPlugins } : {}),
702
810
  ...(interopSurface ? { interop: interopSurface } : {}),
703
811
  ...(deps.agents ? { agents: deps.agents } : {}),
704
812
  ...(deps.share ? { share: deps.share } : {}),
@@ -721,7 +829,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
721
829
  readStructuredEntries,
722
830
  expandSubmit: (text) => expandInteractiveSubmitAsync(text, deps.resources),
723
831
  openAskUser: (questions, options) => openAskUserOverlayState(questions, options),
724
- openSkillsHub: (tab) => openSkillsHubState(tab),
832
+ openSkillsHub: (request) => openSkillsHubState(request),
725
833
  openCost: () => openCostOverlayState(),
726
834
  openSideQuestion: (question) => openSideQuestionOverlayState(question),
727
835
  startHandoff: (goal) => startHandoffState(goal),
@@ -758,8 +866,6 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
758
866
  openTree: () => openTreeOverlayState(),
759
867
  openMessagePicker: () => openMessagePickerOverlayState(),
760
868
  openHelp: (query) => openHelpOverlayState(query),
761
- openAgents: () => openAgentsOverlayState(),
762
- openPrompts: () => openPromptsOverlayState(),
763
869
  openExtensions: () => openExtensionsOverlayState(),
764
870
  openInterop: () => openInteropOverlayState(),
765
871
  openContextReset: () => openContextResetOverlayState(),
@@ -816,6 +922,21 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
816
922
  interactiveSubscriptions.workers.reset();
817
923
  });
818
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
+ };
819
940
  overlayLifecycle = createOverlayLifecycle({
820
941
  app: deps,
821
942
  tui,
@@ -828,7 +949,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
828
949
  dispatchBoard,
829
950
  setFleetRunPhase: (runId, phase) => dispatchBoardStore.setFleetPhase(runId, phase),
830
951
  chatPanel,
831
- resetTranscript,
952
+ resetTranscript: adoptExistingConversation,
832
953
  io,
833
954
  readStructuredEntries,
834
955
  announceTaskMemorySeedOffer,
@@ -869,9 +990,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
869
990
  openTreeOverlayState,
870
991
  openMessagePickerOverlayState,
871
992
  openHelpOverlayState,
872
- openAgentsOverlayState,
873
993
  openSkillsHubState,
874
- openPromptsOverlayState,
875
994
  openExtensionsOverlayState,
876
995
  openInteropOverlayState,
877
996
  toggleDispatchBoardOverlay,
@@ -888,13 +1007,14 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
888
1007
  const { cancelSelectedDispatch, steerSelectedDispatch } = dispatchSteering;
889
1008
 
890
1009
  const cancelActiveRun = (): void => {
1010
+ operatorExtensions?.cancel();
891
1011
  // Esc must not eat typed work: queued steers and follow-ups return to the
892
1012
  // editor before the abort, the same restore the reference implementation
893
1013
  // performs. cancel() then finds both queues already empty.
894
1014
  const restored = deps.chat.clearQueuedFollowUps();
895
1015
  if (restored.length > 0) {
896
- const current = editor.getText();
897
- 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"));
898
1018
  }
899
1019
  chatRenderer.flush();
900
1020
  deps.chat.cancel();
@@ -919,19 +1039,19 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
919
1039
  tui.requestRender();
920
1040
  };
921
1041
  /**
922
- * 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
923
1043
  * keys, so a keypress that changes no pixel reads as a broken binding rather
924
- * 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`.
925
1045
  */
926
1046
  const announceEmptyScopedSet = (): void => {
927
1047
  notify(
928
1048
  "info",
929
- "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",
930
1050
  "scoped-models:empty",
931
1051
  );
932
1052
  };
933
1053
  /**
934
- * 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
935
1055
  * the line to show, so the refusal a review-gated or compete call returns is
936
1056
  * rendered verbatim rather than restated here.
937
1057
  */
@@ -1044,10 +1164,43 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1044
1164
  });
1045
1165
 
1046
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"),
1047
1181
  keybindings,
1048
1182
  dispatchAction: dispatchInteractiveAction,
1049
1183
  actions: {
1050
- 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
+ },
1051
1204
  cycleOutputStyle: () => {
1052
1205
  const settings = deps.getSettings?.();
1053
1206
  if (!settings || !deps.commitSetting) return;
@@ -1110,7 +1263,8 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1110
1263
  steerSelectedDispatch,
1111
1264
  cancelSelectedDispatch,
1112
1265
  cancelActiveEditorBash: () => editorSubmit.cancelActiveEditorBash(),
1113
- isStreaming: () => deps.chat.isStreaming() || deps.chat.turnPreparation().phase === "compacting",
1266
+ isStreaming: () =>
1267
+ deps.chat.isStreaming() || deps.chat.turnPreparation().phase !== "idle" || (operatorExtensions?.busy ?? false),
1114
1268
  cancelActiveRun,
1115
1269
  editor,
1116
1270
  editorSubmit,
@@ -1127,6 +1281,9 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1127
1281
  stopAgentProgress: agentProgress.stop,
1128
1282
  disposeChat: () => deps.chat.dispose(),
1129
1283
  disposeSubscriptions: () => {
1284
+ clearTimeout(operatorTimer);
1285
+ for (const unsubscribe of operatorSubscriptions) unsubscribe();
1286
+ void operatorExtensions?.dispose();
1130
1287
  detachYaziBridge?.();
1131
1288
  yaziBridge?.dispose();
1132
1289
  detachWatchPane?.();
@@ -1155,6 +1312,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1155
1312
  if (leftBehind !== null) process.stderr.write(`${leftBehind}\n`);
1156
1313
  try {
1157
1314
  if (dumpInputWedgeOnTerminate) process.off("SIGTERM", dumpInputWedgeOnTerminate);
1315
+ await operatorExtensions?.dispose();
1158
1316
  await deps.onShutdown();
1159
1317
  } finally {
1160
1318
  if (lease) await lease.close();
@@ -1163,7 +1321,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1163
1321
  },
1164
1322
  registerInputListener: (listener) => {
1165
1323
  if (lease) lease.registerApplicationInput(listener);
1166
- else tui.addInputListener(listener);
1324
+ else tui.setApplicationInputPolicy(listener);
1167
1325
  },
1168
1326
  ...(lease
1169
1327
  ? {
@@ -1180,6 +1338,36 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1180
1338
  : {}),
1181
1339
  });
1182
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
+ );
1183
1371
  if (lease) {
1184
1372
  const adopted = lease.adopt({
1185
1373
  root: presentation.root,