@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,3 +1,4 @@
1
+ import type { WorkerRecall } from "../domains/context/worker/recall.js";
1
2
  /**
2
3
  * Worker-subprocess tool construction.
3
4
  *
@@ -29,6 +30,7 @@ import {
29
30
  import { CONFIRMED_SCOPE, isSubset, READONLY_SCOPE, WORKSPACE_SCOPE } from "../domains/safety/scope.js";
30
31
  import { effectiveToolNames } from "../tools/agent-tools.js";
31
32
  import { assertRegisteredBuiltinTools, registerCoreTools } from "../tools/core-bootstrap.js";
33
+ import { registerHarnessExtensionTools } from "../tools/harness-extensions.js";
32
34
  import type { ToolProfileName } from "../tools/profiles.js";
33
35
  import { createRegistry, type RegistryDeps, type ToolRegistry } from "../tools/registry.js";
34
36
  import { type AgentLedgerPort, toolSignatureOf } from "../worker/protocol.js";
@@ -139,6 +141,7 @@ export function createWorkerToolRegistry(
139
141
  autonomy?: AutonomyLevel,
140
142
  onMiddlewareEffects?: RegistryDeps["onMiddlewareEffects"],
141
143
  agentLedger?: AgentLedgerPort,
144
+ workerRecall?: WorkerRecall,
142
145
  ): ToolRegistry {
143
146
  // A worker always gets a middleware contract, even without a snapshot from
144
147
  // the orchestrator, because the loop guard rides on it as a before_tool
@@ -163,6 +166,7 @@ export function createWorkerToolRegistry(
163
166
  // is what keeps that true now that the session registry omits the tool.
164
167
  const registration = registerCoreTools(registry, {
165
168
  includeLedgerTools: true,
169
+ ...(workerRecall ? { workerRecall } : {}),
166
170
  ...(agentLedger ? { agentLedger } : {}),
167
171
  // A worker cannot install a skill or reach the operator who could, so
168
172
  // its skill listing carries installed (or bound) skills only; the
@@ -177,6 +181,7 @@ export function createWorkerToolRegistry(
177
181
  }),
178
182
  });
179
183
  assertRegisteredBuiltinTools(registry, registration, false);
184
+ registerHarnessExtensionTools(registry);
180
185
  return registry;
181
186
  }
182
187
 
@@ -108,6 +108,7 @@ import type { BackgroundMemoryUsageSink } from "../domains/observability/backgro
108
108
  import { recordFailedCompactionCalls } from "../domains/observability/compaction-usage.js";
109
109
  import type { ObservabilityContract } from "../domains/observability/index.js";
110
110
  import { ObservabilityDomainModule } from "../domains/observability/index.js";
111
+ import { PluginsDomainModule } from "../domains/plugins/index.js";
111
112
  import type { PromptsContract } from "../domains/prompts/contract.js";
112
113
  import { createPromptsDomainModule } from "../domains/prompts/index.js";
113
114
  import type { ProvidersContract, TargetDescriptor, ThinkingLevel } from "../domains/providers/index.js";
@@ -199,6 +200,7 @@ import type { BootOptions } from "./boot-options.js";
199
200
  import { readCompactionSystemPrompt } from "./compaction-prompt.js";
200
201
  import { createExtensionReloadCoordinator } from "./extension-reload.js";
201
202
  import { resolvePanesEnablement } from "./panes-activation.js";
203
+ import { reloadPluginResourcesAndNotify } from "./plugin-reload.js";
202
204
  import { bindTaskMemoryLifecycle, captureTaskMemoryUsage } from "./task-memory-lifecycle.js";
203
205
 
204
206
  export type { BootOptions, HeadlessSamplingOverrides } from "./boot-options.js";
@@ -1005,7 +1007,7 @@ function estimateTokensAfterCompaction(entries: ReadonlyArray<SessionEntry>, res
1005
1007
  }
1006
1008
 
1007
1009
  /**
1008
- * Alt+J / Alt+K step the orchestrator through the `scope` list of target
1010
+ * Scoped model cycle actions step the orchestrator through the `scope` list of target
1009
1011
  * ids or target/model refs. Absent scope is a no-op so unconfigured users
1010
1012
  * feel nothing.
1011
1013
  */
@@ -1140,6 +1142,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1140
1142
  [
1141
1143
  options.startupSettings ? createConfigDomainModule(options.startupSettings) : ConfigDomainModule,
1142
1144
  ExtensionsDomainModule,
1145
+ PluginsDomainModule,
1143
1146
  InteropDomainModule,
1144
1147
  createResourcesDomainModule({
1145
1148
  reservedPromptNames: new Set(BUILTIN_SLASH_COMMANDS.map((entry) => entry.name)),
@@ -1535,6 +1538,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1535
1538
  // keep evaluating after the guards and before the assessors below.
1536
1539
  const hookReceiptLog = createHookReceiptLog({ persistPath: join(clioStateDir(), "hook-receipts.json") });
1537
1540
  let bootHookNotices = true;
1541
+ const reloadPlugins = () =>
1542
+ reloadPluginResourcesAndNotify(process.cwd(), (event) => bus.emit(BusChannels.PluginsReloaded, event));
1538
1543
  const extensionReload = createExtensionReloadCoordinator({
1539
1544
  extensions,
1540
1545
  middleware,
@@ -1545,7 +1550,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1545
1550
  else if (bootHookNotices) initialNotices.push(line);
1546
1551
  else bus.emit(BusChannels.ExtensionsLoadIssue, { message: line });
1547
1552
  },
1548
- onCommitted: (event) => bus.emit(BusChannels.ExtensionsReloaded, event),
1553
+ onCommitted: (event) => {
1554
+ reloadPlugins();
1555
+ bus.emit(BusChannels.ExtensionsReloaded, event);
1556
+ },
1549
1557
  });
1550
1558
  extensionReload.applyBoot();
1551
1559
  bootHookNotices = false;
@@ -1593,7 +1601,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1593
1601
  listInstalledSkillNames: () => resources.skills(process.cwd()).items.map((skill) => skill.name),
1594
1602
  listMarketplaceEntries: () => discoverMarketplaceSkills({ cwd: process.cwd() }).skills,
1595
1603
  installEntry: (entry, scope) => {
1596
- const installed = installSkill({ source: entry.sourceUrl, scope, name: entry.name, cwd: process.cwd() });
1604
+ const installed = installSkill({ source: `skill:${entry.name}`, scope, name: entry.name, cwd: process.cwd() });
1597
1605
  return { path: installed.path, sourceUrl: installed.sourceUrl, installedHash: installed.installedHash };
1598
1606
  },
1599
1607
  }),
@@ -1718,6 +1726,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1718
1726
  })
1719
1727
  : null;
1720
1728
  registerAllTools(toolRegistry, {
1729
+ captureWorkerContext: () => chat.captureWorkerContext?.() ?? null,
1721
1730
  ...(session
1722
1731
  ? {
1723
1732
  session,
@@ -1803,7 +1812,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1803
1812
  const getCurrentSettings = (): ClioSettings => {
1804
1813
  // Recents live in the data dir (core/recent-models.ts), never in
1805
1814
  // settings.yaml; consumers that need them call listRecentModels
1806
- // directly, so an Alt+L pick in another session does not churn the
1815
+ // directly, so an Alt+M pick in another session does not churn the
1807
1816
  // config watcher here.
1808
1817
  const base = config?.get();
1809
1818
  // No config domain (unit tests, degraded boot): readSettings() returns a
@@ -2000,7 +2009,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
2000
2009
  bumpSessionState();
2001
2010
  persistSavedMutation((saved) => setAtPath(saved, id, value));
2002
2011
  };
2003
- /** Alt+J / Alt+K: step this session's orchestrator through the scope list. */
2012
+ /** Scoped model cycle actions: step this session's orchestrator through the scope list. */
2004
2013
  const cycleScopedSession = (direction: "forward" | "backward"): boolean => {
2005
2014
  const next = advanceScopedTarget(getCurrentSettings(), direction);
2006
2015
  if (!next) return false;
@@ -2323,6 +2332,14 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
2323
2332
  await termination.shutdown(1);
2324
2333
  return { exitCode: 1, bootTimeMs: timer.snapshot().totalMs };
2325
2334
  }
2335
+ // A display-only template that reached boot (the CLI preflight answers
2336
+ // most of them earlier) is printed for the operator and the run ends;
2337
+ // its body was never model text.
2338
+ if (promptExpansion?.expanded === false && promptExpansion.display) {
2339
+ process.stdout.write(`${promptExpansion.display.text}\n`);
2340
+ await termination.shutdown(0);
2341
+ return { exitCode: 0, bootTimeMs: timer.snapshot().totalMs };
2342
+ }
2326
2343
  const fileExpansion = await expandInlineFileReferencesAsync(
2327
2344
  promptExpansion?.expanded ? promptExpansion.text : parsedSkillRequest.text,
2328
2345
  {
@@ -2382,6 +2399,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
2382
2399
  ...(resources ? { resources } : {}),
2383
2400
  ...(extensions ? { extensions } : {}),
2384
2401
  reloadExtensions: () => extensionReload.reload(),
2402
+ reloadPlugins,
2385
2403
  ...(interop ? { interop } : {}),
2386
2404
  ...(share ? { share } : {}),
2387
2405
  ...(mux ? { mux } : {}),
@@ -2435,6 +2453,9 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
2435
2453
  getSettings: getCurrentSettings,
2436
2454
  getFleetNodes: () => result.getContract<SchedulingContract>("scheduling")?.fleet?.list() ?? [],
2437
2455
  onBackgroundDispatch: () => dispatchBackground.backgroundNewest(),
2456
+ // A boot-time resume opens onto an existing conversation, so the welcome
2457
+ // header starts collapsed rather than offering fresh-start onboarding.
2458
+ ...(resumedSessionAtBoot ? { startsResumed: true } : {}),
2438
2459
  ...(session ? { getSessionId: () => session.current()?.id ?? null } : {}),
2439
2460
  ...(contextDomain
2440
2461
  ? {
@@ -0,0 +1,18 @@
1
+ import type { PluginsReloadedPayload } from "../core/bus-events.js";
2
+ import { type PluginSnapshot, pluginSnapshotFor, reloadPluginResources } from "../domains/plugins/index.js";
3
+
4
+ /** Publish data-only plugin resources before asking session caches to refresh. */
5
+ export function reloadPluginResourcesAndNotify(
6
+ cwd: string,
7
+ notify: (event: PluginsReloadedPayload) => void,
8
+ ): PluginSnapshot {
9
+ const previous = pluginSnapshotFor(cwd);
10
+ const next = reloadPluginResources(cwd);
11
+ notify({
12
+ generation: next.generation,
13
+ previousGeneration: previous.generation,
14
+ changed: previous.generation === 0 || previous.digest !== next.digest,
15
+ digest: next.digest,
16
+ });
17
+ return next;
18
+ }
@@ -1,21 +1,17 @@
1
1
  import type { ClioKeybinding } from "../domains/config/keybindings.js";
2
- import { isKeyRelease, matchesKey } from "../engine/tui.js";
2
+ import { isKeyRelease, isKeyRepeat, matchesKey } from "../engine/tui.js";
3
3
  import type { LeaderKeyController } from "./leader-key.js";
4
4
  import { isEscapeKey, type OverlayState, overlayOwnsInput } from "./overlay-lifecycle.js";
5
5
 
6
6
  export const APPLICATION_DOUBLE_TAP_MS = 500;
7
7
 
8
- const CLOSED_ACTION_ORDER = [
8
+ export const CLOSED_ACTION_ORDER = [
9
+ "clio-coder.output.cycle",
9
10
  "clio-coder.notifications.dismiss",
10
- "clio-coder.tool.expand",
11
- "clio-coder.tool.expandAll",
12
- "clio-coder.tool.liveOutput",
13
11
  "clio-coder.editor.external",
14
12
  "clio-coder.message.followUp",
15
13
  "clio-coder.message.interrupt",
16
14
  "clio-coder.message.dequeue",
17
- "clio-coder.thinking.expand",
18
- "clio-coder.thinking.expandAll",
19
15
  ] as const satisfies ReadonlyArray<ClioKeybinding>;
20
16
 
21
17
  export const GLOBAL_ACTION_ORDER = [
@@ -28,6 +24,7 @@ export const GLOBAL_ACTION_ORDER = [
28
24
  "clio-coder.decisions.open",
29
25
  "clio-coder.dispatch.background",
30
26
  "clio-coder.model.select",
27
+ "clio-coder.library.toggle",
31
28
  // Backward stays ahead of forward so prefix-overlapping user bindings keep
32
29
  // the same more-specific-first behavior as the original input listener.
33
30
  "clio-coder.model.cycleBackward",
@@ -35,7 +32,13 @@ export const GLOBAL_ACTION_ORDER = [
35
32
  "clio-coder.exit",
36
33
  ] as const satisfies ReadonlyArray<ClioKeybinding>;
37
34
 
38
- export type CtrlCAction = "cancel-stream" | "close-overlay" | "clear-editor" | "arm-shutdown" | "shutdown";
35
+ export type CtrlCAction =
36
+ | "cancel-stream"
37
+ | "close-overlay"
38
+ | "clear-editor"
39
+ | "arm-shutdown"
40
+ | "shutdown"
41
+ | "protect-queue";
39
42
 
40
43
  export interface CtrlCActionState {
41
44
  overlayState: OverlayState;
@@ -43,13 +46,15 @@ export interface CtrlCActionState {
43
46
  editorText: string;
44
47
  lastCtrlCAt: number;
45
48
  now: number;
49
+ hasQueuedMessages?: boolean;
46
50
  }
47
51
 
48
52
  function resolveApplicationCtrlCAction(state: CtrlCActionState): CtrlCAction {
49
53
  if (state.overlayState !== "closed") return "close-overlay";
50
- if (state.lastCtrlCAt > 0 && state.now - state.lastCtrlCAt <= APPLICATION_DOUBLE_TAP_MS) return "shutdown";
51
54
  if (state.streaming) return "cancel-stream";
52
55
  if (state.editorText.length > 0) return "clear-editor";
56
+ if (state.hasQueuedMessages) return "protect-queue";
57
+ if (state.lastCtrlCAt > 0 && state.now - state.lastCtrlCAt <= APPLICATION_DOUBLE_TAP_MS) return "shutdown";
53
58
  return "arm-shutdown";
54
59
  }
55
60
 
@@ -82,6 +87,15 @@ export interface ApplicationControllerDeps {
82
87
  intervals: ApplicationIntervalCoordinator;
83
88
  intervalsToClear: ReadonlyArray<ApplicationIntervalHandle>;
84
89
  leaderKeys: LeaderKeyController;
90
+ isSearchFocused?: () => boolean;
91
+ closeSearch?: () => void;
92
+ forwardFocusedInput?: (data: string) => void;
93
+ cancelFocusedOwner?: () => void;
94
+ isAutocompleteVisible?: () => boolean;
95
+ matchesRepeatableInput?: (data: string) => boolean;
96
+ routeComposerKey?: (data: string) => boolean;
97
+ hasQueuedMessages?: () => boolean;
98
+ explainProtectedExit?: () => void;
85
99
  getOverlayState: () => OverlayState;
86
100
  routeOverlayKey: (data: string) => boolean;
87
101
  /** Let pi-tui's focused Editor own dedicated prompt-history actions before app bindings. */
@@ -108,10 +122,6 @@ export interface ApplicationControllerDeps {
108
122
  listNotifications: () => ReadonlyArray<{ id: string }>;
109
123
  dismissNotification: (id: string) => void;
110
124
  dismissAllNotifications: () => void;
111
- toggleLastToolExpanded: () => boolean;
112
- toggleAllToolsExpanded: () => boolean;
113
- toggleLastThinking: () => boolean;
114
- toggleAllThinking: () => boolean;
115
125
  shutdownDisposers: ReadonlyArray<() => void>;
116
126
  /** Settle the last presentation mutation into an accepted/drained frame. */
117
127
  beforeStopUi?: () => Promise<void>;
@@ -144,9 +154,7 @@ export interface ApplicationController {
144
154
  run: Promise<number>;
145
155
  handleInput(data: string): ApplicationInputResult;
146
156
  handleCtrlC(): void;
147
- dismissNotifications(): void;
148
- toggleToolExpansion(): void;
149
- toggleThinkingExpansion(): void;
157
+ dismissNotifications(all?: boolean): void;
150
158
  shutdown(): Promise<void>;
151
159
  }
152
160
 
@@ -162,11 +170,6 @@ export function createApplicationController(deps: ApplicationControllerDeps): Ap
162
170
  const keepAlive = deps.intervals.setInterval(() => {}, 1 << 30);
163
171
  let shuttingDown = false;
164
172
  let lastCtrlCAt = 0;
165
- let lastNotificationDismissAt = 0;
166
- let lastToolExpandAt = 0;
167
- let lastThinkingExpandAt = 0;
168
-
169
- const isDoubleTap = (lastAt: number, now: number): boolean => lastAt > 0 && now - lastAt <= APPLICATION_DOUBLE_TAP_MS;
170
173
 
171
174
  let shutdownArmed = false;
172
175
  let armedIndicator: ApplicationIntervalHandle | null = null;
@@ -285,12 +288,31 @@ export function createApplicationController(deps: ApplicationControllerDeps): Ap
285
288
  };
286
289
 
287
290
  const handleCtrlC = (): void => {
291
+ deps.leaderKeys.reset();
292
+ if (deps.isSearchFocused?.()) {
293
+ deps.closeSearch?.();
294
+ lastCtrlCAt = 0;
295
+ setShutdownArmed(false);
296
+ return;
297
+ }
298
+ if (deps.getOverlayState() !== "closed" && deps.cancelFocusedOwner) {
299
+ deps.cancelFocusedOwner();
300
+ lastCtrlCAt = 0;
301
+ setShutdownArmed(false);
302
+ return;
303
+ }
304
+ if (deps.getOverlayState() === "closed" && deps.cancelActiveEditorBash()) {
305
+ lastCtrlCAt = 0;
306
+ setShutdownArmed(false);
307
+ return;
308
+ }
288
309
  const action = resolveApplicationCtrlCAction({
289
310
  overlayState: deps.getOverlayState(),
290
311
  streaming: deps.isStreaming(),
291
312
  editorText: deps.getEditorText(),
292
313
  lastCtrlCAt,
293
314
  now: deps.clock.now(),
315
+ hasQueuedMessages: deps.hasQueuedMessages?.() ?? false,
294
316
  });
295
317
  if (action === "shutdown") {
296
318
  lastCtrlCAt = 0;
@@ -329,16 +351,19 @@ export function createApplicationController(deps: ApplicationControllerDeps): Ap
329
351
  deps.requestRender();
330
352
  return;
331
353
  }
354
+ if (action === "protect-queue") {
355
+ lastCtrlCAt = 0;
356
+ setShutdownArmed(false);
357
+ deps.explainProtectedExit?.();
358
+ return;
359
+ }
332
360
  // arm-shutdown. The one branch that used to fall off the end of this
333
361
  // function with nothing to show for the press.
334
362
  setShutdownArmed(true);
335
363
  };
336
364
 
337
- const dismissNotifications = (): void => {
338
- const now = deps.clock.now();
339
- const doubleTap = isDoubleTap(lastNotificationDismissAt, now);
340
- lastNotificationDismissAt = now;
341
- if (doubleTap) {
365
+ const dismissNotifications = (all = false): void => {
366
+ if (all) {
342
367
  deps.dismissAllNotifications();
343
368
  return;
344
369
  }
@@ -346,36 +371,28 @@ export function createApplicationController(deps: ApplicationControllerDeps): Ap
346
371
  if (first) deps.dismissNotification(first.id);
347
372
  };
348
373
 
349
- const toggleToolExpansion = (): void => {
350
- const now = deps.clock.now();
351
- const doubleTap = isDoubleTap(lastToolExpandAt, now);
352
- lastToolExpandAt = now;
353
- const changed = doubleTap ? deps.toggleAllToolsExpanded() : deps.toggleLastToolExpanded();
354
- if (changed) deps.requestRender();
355
- };
356
-
357
- const toggleThinkingExpansion = (): void => {
358
- const now = deps.clock.now();
359
- const doubleTap = isDoubleTap(lastThinkingExpandAt, now);
360
- lastThinkingExpandAt = now;
361
- const changed = doubleTap ? deps.toggleAllThinking() : deps.toggleLastThinking();
362
- if (changed) deps.requestRender();
363
- };
364
-
365
374
  const handleInput = (data: string): ApplicationInputResult => {
366
- const initialOverlayState = deps.getOverlayState();
367
- if (overlayOwnsInput(initialOverlayState) && deps.leaderKeys.isPending()) deps.leaderKeys.reset();
368
- if (!overlayOwnsInput(initialOverlayState) && deps.leaderKeys.isPending() && deps.leaderKeys.route(data)) {
375
+ if (isKeyRelease(data)) return { consume: true };
376
+ if (isKeyRepeat(data) && !(deps.matchesRepeatableInput?.(data) ?? false)) return { consume: true };
377
+ if (matchesKey(data, "ctrl+c")) {
378
+ handleCtrlC();
369
379
  return { consume: true };
370
380
  }
371
-
372
- if (matchesKey(data, "ctrl+c") && !isKeyRelease(data)) {
373
- handleCtrlC();
381
+ if (deps.leaderKeys.isPending() && deps.leaderKeys.route(data)) return { consume: true };
382
+ if (deps.leaderKeys.route(data)) return { consume: true };
383
+ if (deps.isSearchFocused?.()) {
384
+ deps.forwardFocusedInput?.(data);
374
385
  return { consume: true };
375
386
  }
376
387
  if (deps.routeOverlayKey(data)) return { consume: true };
377
- if (overlayOwnsInput(deps.getOverlayState())) return undefined;
378
- if (deps.getOverlayState() === "closed" && deps.leaderKeys.route(data)) return { consume: true };
388
+ if (overlayOwnsInput(deps.getOverlayState())) {
389
+ if (deps.forwardFocusedInput) {
390
+ deps.forwardFocusedInput(data);
391
+ return { consume: true };
392
+ }
393
+ return undefined;
394
+ }
395
+ if (isEscapeKey(data) && deps.isAutocompleteVisible?.()) return undefined;
379
396
  if (isEscapeKey(data) && deps.cancelActiveEditorBash()) return { consume: true };
380
397
  if (isEscapeKey(data) && deps.isStreaming()) {
381
398
  deps.cancelActiveRun();
@@ -397,6 +414,7 @@ export function createApplicationController(deps: ApplicationControllerDeps): Ap
397
414
  if (!deps.matchesAction(data, id)) continue;
398
415
  return deps.dispatchAction(id) ? { consume: true } : undefined;
399
416
  }
417
+ if (deps.routeComposerKey?.(data)) return { consume: true };
400
418
  return undefined;
401
419
  };
402
420
 
@@ -427,8 +445,6 @@ export function createApplicationController(deps: ApplicationControllerDeps): Ap
427
445
  handleInput,
428
446
  handleCtrlC,
429
447
  dismissNotifications,
430
- toggleToolExpansion,
431
- toggleThinkingExpansion,
432
448
  shutdown,
433
449
  };
434
450
  }
@@ -1,3 +1,5 @@
1
+ import type { WorkerContextSnapshot } from "../domains/context/worker/contract.js";
2
+ import { captureWorkerContext } from "../domains/context/worker/snapshot.js";
1
3
  /**
2
4
  * The chat loop: one turn's state machine.
3
5
  *
@@ -129,6 +131,7 @@ export interface QueueUpdateEvent {
129
131
  * same beat. Enqueue time shows the text only in the steering-queue panel.
130
132
  */
131
133
  export interface QueuedUserTurnEvent {
134
+ display?: { text: string; note: string };
132
135
  type: "queued_user_turn";
133
136
  text: string;
134
137
  /** `interrupt` marks a message that cancelled the run and was submitted as a fresh prompt. */
@@ -198,6 +201,8 @@ export type ChatLoopEvent =
198
201
  | ToolApprovalStateEvent;
199
202
 
200
203
  export interface ChatSubmitOptions {
204
+ /** Presentation only; never part of the model message or persisted text. */
205
+ display?: { text: string; note: string };
201
206
  /** Host-owned run identity, scoped to this submit and its internal continuations. */
202
207
  hostRun?: ToolInvokeOptions["hostRun"];
203
208
  images?: ReadonlyArray<ImageContent>;
@@ -315,6 +320,7 @@ export interface ChatLoop {
315
320
  cancel(options?: ChatCancelOptions): void;
316
321
  onEvent(handler: (event: ChatLoopEvent) => void): () => void;
317
322
  getSessionId(): string | null;
323
+ captureWorkerContext?(): WorkerContextSnapshot | null;
318
324
  lastRunSnapshot?(): ChatLoopRunSnapshot | null;
319
325
  isStreaming(): boolean;
320
326
  /**
@@ -751,7 +757,7 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
751
757
  const queues = createTurnQueues({
752
758
  state,
753
759
  emitQueueUpdateEvent: (messages) => emit({ type: "queue_update", messages }),
754
- emitQueuedUserTurn: (entry) => emit({ type: "queued_user_turn", text: entry.text, kind: entry.kind }),
760
+ emitQueuedUserTurn: (entry) => emit({ type: "queued_user_turn", ...entry }),
755
761
  emitNotice,
756
762
  // The loop's own resubmits (stranded steers, continuation requests) run
757
763
  // from submit's finally and bypass the admission gate: an interrupt that
@@ -863,6 +869,11 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
863
869
  if (payload.changed) context.invalidateSessionPromptCache();
864
870
  }) ?? null;
865
871
 
872
+ const unsubscribePluginsReload =
873
+ deps.bus?.on(BusChannels.PluginsReloaded, () => {
874
+ context.invalidateSessionPromptCache();
875
+ }) ?? null;
876
+
866
877
  const unsubscribeSynthesisLock =
867
878
  deps.bus?.on(BusChannels.LoopBlocked, (payload) => {
868
879
  const disposition = (payload as { disposition?: unknown } | null)?.disposition;
@@ -1097,13 +1108,13 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
1097
1108
  // Enter while streaming means "correct it now": the engine
1098
1109
  // steering queue drains after every tool batch, so the text
1099
1110
  // lands as a user message before the next model turn.
1100
- // alt+enter (queueFollowUp) keeps the after-this-run intent.
1111
+ // Ctrl+Q (queueFollowUp) keeps the after-this-run intent.
1101
1112
  if (isWorkerShareNote(trimmed)) state.turnSharedWorkerNote = true;
1102
1113
  // The queue carries the submitted bytes, not the trimmed copy the
1103
1114
  // guard above reads: a steer is a model-facing turn and the
1104
1115
  // payload contract applies to it too (issue #244).
1105
- if (mode === "end-of-turn") queues.queueFollowUp(text);
1106
- else queues.steer(text);
1116
+ if (mode === "end-of-turn") queues.queueFollowUp(text, options.display);
1117
+ else queues.steer(text, options.display);
1107
1118
  return;
1108
1119
  }
1109
1120
  emitNotice("[Clio Coder] response already in progress. Press Esc to cancel the active run.");
@@ -1287,7 +1298,13 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
1287
1298
  // An interrupt was submitted while a run was active, so no caller drew
1288
1299
  // it in the transcript; render it here, after the cancel notice and the
1289
1300
  // cancelled run's leftovers, which is the order the ledger has.
1290
- if (interrupted) emit({ type: "queued_user_turn", text, kind: "interrupt" });
1301
+ if (interrupted)
1302
+ emit({
1303
+ type: "queued_user_turn",
1304
+ text,
1305
+ kind: "interrupt",
1306
+ ...(options.display ? { display: options.display } : {}),
1307
+ });
1291
1308
  context.logPromptCompileIfPending();
1292
1309
  const previousThinkingLevel = previousRunSnapshot?.runtimeResolution?.effectiveThinkingLevel;
1293
1310
  if (
@@ -1484,6 +1501,15 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
1484
1501
  };
1485
1502
  },
1486
1503
 
1504
+ captureWorkerContext(): WorkerContextSnapshot | null {
1505
+ const meta = deps.session?.current();
1506
+ if (!meta) return null;
1507
+ return captureWorkerContext(
1508
+ { sessionId: meta.id, leafTurnId: state.lastTurnId, cwd: meta.cwd },
1509
+ state.runtime?.agent.state.messages ?? state.replayedContextMessages,
1510
+ );
1511
+ },
1512
+
1487
1513
  getSessionId(): string | null {
1488
1514
  return deps.session?.current()?.id ?? null;
1489
1515
  },
@@ -1547,6 +1573,7 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
1547
1573
  dispose(): void {
1548
1574
  unsubscribeConfigReload?.();
1549
1575
  unsubscribeExtensionsReload?.();
1576
+ unsubscribePluginsReload?.();
1550
1577
  unsubscribeSynthesisLock?.();
1551
1578
  unsubscribePrewarmCompaction();
1552
1579
  prewarm.dispose();