@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
@@ -50,7 +50,6 @@ export const COMPLETION_SLOT_NAMES = [
50
50
  "pane-runs-agents",
51
51
  "pane-presets",
52
52
  "pane-targets",
53
- "library-tabs",
54
53
  "thinking-levels",
55
54
  "settings-areas",
56
55
  "settings-groups",
@@ -206,9 +206,6 @@ export function createStatusController(deps: StatusControllerDeps): StatusContro
206
206
  deps.bus.on(BusChannels.PermissionResolved, () => apply({ type: "overlay_pop", overlay: "tool_blocked" }, true)),
207
207
  deps.bus.on(BusChannels.CompactionBegin, () => apply({ type: "overlay_push", overlay: "compacting" }, true)),
208
208
  deps.bus.on(BusChannels.CompactionEnd, () => apply({ type: "overlay_pop", overlay: "compacting" }, true)),
209
- deps.bus.on(BusChannels.DispatchStarted, (payload) =>
210
- apply({ type: "overlay_push", overlay: "dispatching", data: payload }, true),
211
- ),
212
209
  deps.bus.on(BusChannels.DispatchProgress, (payload) => {
213
210
  if (!isWorkerStreamEvidence(payload)) return;
214
211
  const at = now();
@@ -216,8 +213,6 @@ export function createStatusController(deps: StatusControllerDeps): StatusContro
216
213
  lastDispatchProgressAt = at;
217
214
  apply({ type: "dispatch_progress" });
218
215
  }),
219
- deps.bus.on(BusChannels.DispatchCompleted, () => apply({ type: "overlay_pop", overlay: "dispatching" }, true)),
220
- deps.bus.on(BusChannels.DispatchFailed, () => apply({ type: "overlay_pop", overlay: "dispatching" }, true)),
221
216
  deps.bus.on(BusChannels.RunAborted, (payload) => {
222
217
  scheduleAbortCeiling();
223
218
  // Carry abort provenance into the summary; a dispatch drain and a
@@ -245,6 +245,7 @@ function activePhaseAfterStuck(prev: AgentStatus): StatusPhase {
245
245
  }
246
246
 
247
247
  function isAwaitingDispatch(prev: AgentStatus): boolean {
248
+ if (activePhaseAfterStuck(prev) === "tool_running" && prev.tool?.toolName === ToolNames.Dispatch) return true;
248
249
  if (prev.phase === "dispatching") return true;
249
250
  if (prev.activePhases?.has("dispatching")) return true;
250
251
  return (prev.overlayStack ?? []).some((frame) => frame.phase === "dispatching");
@@ -360,26 +361,9 @@ export function reduceStatus(prev: AgentStatus, event: StatusInputEvent, ctx: Re
360
361
  if (base === "preparing") return { ...next, phase: "waiting_model", resumePhase: undefined };
361
362
  return next;
362
363
  }
363
- case "message_start": {
364
- const next = refreshMeaningful(prev, ctx);
365
- const role = (event.message as { role?: unknown }).role;
366
- if (role === "assistant" && prev.phase === "tool_running") return { ...next, phase: "writing" };
367
- if (
368
- role === "assistant" &&
369
- (prev.phase === "preparing" || prev.phase === "waiting_model" || prev.phase === "thinking")
370
- )
371
- return { ...next, phase: "writing", resumePhase: undefined };
372
- return next;
373
- }
374
- case "message_update": {
375
- const base = activePhaseAfterStuck(prev);
376
- const next = refreshMeaningful({ ...prev, phase: base }, ctx);
377
- if (base === "preparing" || base === "waiting_model" || base === "thinking") {
378
- return { ...next, phase: "writing", resumePhase: undefined };
379
- }
380
- if (CORE_ACTIVE_PHASES.has(base)) return { ...next, resumePhase: undefined };
381
- return next;
382
- }
364
+ case "message_start":
365
+ case "message_update":
366
+ return refreshMeaningful(prev, ctx);
383
367
  case "tool_execution_update":
384
368
  return refreshMeaningful(prev, ctx);
385
369
  case "message_end":
@@ -390,10 +374,22 @@ export function reduceStatus(prev: AgentStatus, event: StatusInputEvent, ctx: Re
390
374
  runTally: foldMessageIntoRunTally(prev.runTally ?? emptyRunTally(), event.message),
391
375
  };
392
376
  case "tool_execution_end": {
393
- const next = refreshMeaningful(prev, ctx);
394
- if (prev.phase === "tool_running") return { ...next, phase: "preparing", tool: undefined, toolStartedAt: undefined };
377
+ const activeTools = (prev.activeTools ?? []).filter((tool) => tool.toolCallId !== event.toolCallId);
378
+ const next = { ...refreshMeaningful(prev, ctx), activeTools };
379
+ const remaining = activeTools.at(-1);
380
+ if (remaining && prev.phase === "tool_running")
381
+ return { ...next, tool: remaining, toolStartedAt: remaining.startedAt };
382
+ if (prev.phase === "tool_running")
383
+ return { ...next, phase: "preparing", tool: undefined, toolStartedAt: undefined, activeTools: [] };
395
384
  if (prev.phase === "stuck" && prev.resumePhase === "tool_running") {
396
- return { ...next, phase: "preparing", resumePhase: undefined, tool: undefined, toolStartedAt: undefined };
385
+ return {
386
+ ...next,
387
+ phase: "preparing",
388
+ resumePhase: undefined,
389
+ tool: undefined,
390
+ toolStartedAt: undefined,
391
+ activeTools: [],
392
+ };
397
393
  }
398
394
  // A blocked call's end can land while an overlay is still visible
399
395
  // (permission prompt not yet resolved, retry or dispatch in front).
@@ -422,7 +418,14 @@ export function reduceStatus(prev: AgentStatus, event: StatusInputEvent, ctx: Re
422
418
  // tool is done (its end never landed or was an admission block): the
423
419
  // model is generating, nothing is executing, so drop the tool display.
424
420
  if (base === "preparing" || base === "waiting_model" || base === "writing" || base === "tool_running") {
425
- return { ...next, phase: "thinking", resumePhase: undefined, tool: undefined, toolStartedAt: undefined };
421
+ return {
422
+ ...next,
423
+ phase: "thinking",
424
+ resumePhase: undefined,
425
+ tool: undefined,
426
+ toolStartedAt: undefined,
427
+ activeTools: [],
428
+ };
426
429
  }
427
430
  if (CORE_ACTIVE_PHASES.has(base)) return { ...next, resumePhase: undefined };
428
431
  return next;
@@ -433,19 +436,34 @@ export function reduceStatus(prev: AgentStatus, event: StatusInputEvent, ctx: Re
433
436
  // Streamed answer text while a tool still shows as running: same as
434
437
  // above, the model is writing, so the running-tool spinner must clear.
435
438
  if (base === "preparing" || base === "waiting_model" || base === "thinking" || base === "tool_running") {
436
- return { ...next, phase: "writing", resumePhase: undefined, tool: undefined, toolStartedAt: undefined };
439
+ return {
440
+ ...next,
441
+ phase: "writing",
442
+ resumePhase: undefined,
443
+ tool: undefined,
444
+ toolStartedAt: undefined,
445
+ activeTools: [],
446
+ };
437
447
  }
438
448
  if (CORE_ACTIVE_PHASES.has(base)) return { ...next, resumePhase: undefined };
439
449
  return next;
440
450
  }
441
451
  case "tool_execution_start": {
442
452
  const tool: ToolOverlay = {
453
+ toolCallId: event.toolCallId,
454
+ startedAt: ctx.now,
443
455
  toolName: event.toolName,
444
456
  toolPreview: compactPreview(event.args),
445
457
  };
446
458
  // Stamp this call's own start so the footer's running-tool timer counts
447
459
  // from here, not from turn start.
448
- return { ...refreshMeaningful(prev, ctx), phase: "tool_running", tool, toolStartedAt: ctx.now };
460
+ return {
461
+ ...refreshMeaningful(prev, ctx),
462
+ phase: "tool_running",
463
+ tool,
464
+ toolStartedAt: ctx.now,
465
+ activeTools: [...(prev.activeTools ?? []).filter((active) => active.toolCallId !== event.toolCallId), tool],
466
+ };
449
467
  }
450
468
  case "retry_status": {
451
469
  const phase = event.status.phase;
@@ -19,6 +19,8 @@ export interface RetryOverlay {
19
19
  }
20
20
 
21
21
  export interface ToolOverlay {
22
+ toolCallId?: string;
23
+ startedAt?: number;
22
24
  toolName: string;
23
25
  toolPreview: string;
24
26
  }
@@ -104,6 +106,7 @@ export interface AgentStatus {
104
106
  * phase leaves `tool_running`.
105
107
  */
106
108
  toolStartedAt?: number | undefined;
109
+ activeTools?: readonly ToolOverlay[];
107
110
  retry?: RetryOverlay | undefined;
108
111
  dispatch?: DispatchOverlay | undefined;
109
112
  /**
@@ -44,30 +44,31 @@ function coreVerb(status: AgentStatus): { text: string; toneHint: VerbRender["to
44
44
  case "idle":
45
45
  return null;
46
46
  case "preparing":
47
- return { text: tier >= 2 ? "still preparing harness" : "preparing harness", toneHint: "normal" };
47
+ return { text: "Preparing", toneHint: "normal" };
48
48
  case "waiting_model":
49
49
  return {
50
- text: tier >= 2 ? "still waiting on model" : status.localRuntime ? "waiting on local model" : "waiting on model",
50
+ text: tier >= 2 ? "Waiting for model" : status.localRuntime ? "Waiting for local model" : "Waiting for model",
51
51
  toneHint: "normal",
52
52
  };
53
53
  case "thinking":
54
- return { text: tier >= 2 ? "still receiving thinking" : "receiving thinking", toneHint: "normal" };
54
+ return { text: "Thinking", toneHint: "normal" };
55
55
  case "writing":
56
- return { text: "streaming response", toneHint: "normal" };
56
+ return { text: "Writing", toneHint: "normal" };
57
57
  case "tool_running": {
58
58
  const name = status.tool?.toolName ?? "tool";
59
- if (name === ToolNames.AskUser) return { text: "waiting for user input", toneHint: "normal" };
60
- return { text: tier >= 2 ? `still running tool: ${name}` : `running tool: ${name}`, toneHint: "normal" };
59
+ if (name === ToolNames.Dispatch) return { text: "Waiting for worker", toneHint: "normal" };
60
+ if (name === ToolNames.AskUser) return { text: "Needs input", toneHint: "normal" };
61
+ return { text: `Running ${name}`, toneHint: "normal" };
61
62
  }
62
63
  case "tool_blocked":
63
- return { text: "awaiting confirmation", toneHint: "warn" };
64
+ return { text: "Needs approval", toneHint: "warn" };
64
65
  case "retrying": {
65
66
  const retry = status.retry;
66
67
  const wait = retry && retry.waitMs > 0 ? ` · ${formatStatusElapsed(retry.waitMs)}` : "";
67
68
  return { text: `retrying ${retry?.attempt ?? 0}/${retry?.maxAttempts ?? 0}${wait}`, toneHint: "warn" };
68
69
  }
69
70
  case "compacting":
70
- return { text: "compacting context", toneHint: "normal" };
71
+ return { text: "Compacting context", toneHint: "normal" };
71
72
  case "dispatching": {
72
73
  const agent = status.dispatch?.agentName;
73
74
  if (tier >= 2)
@@ -75,7 +76,7 @@ function coreVerb(status: AgentStatus): { text: string; toneHint: VerbRender["to
75
76
  return { text: agent ? `dispatching agent: ${agent}` : "dispatching agent", toneHint: "normal" };
76
77
  }
77
78
  case "stuck":
78
- return { text: "stuck", toneHint: "error" };
79
+ return { text: "No output", toneHint: "error" };
79
80
  case "ended": {
80
81
  const stop = status.summary?.stopReason ?? "stop";
81
82
  const elapsed = status.summary ? ` · ${formatStatusElapsed(status.summary.elapsedMs)}` : "";
@@ -97,7 +98,7 @@ export function resolveFooterVerb(status: AgentStatus, now: number, terminalCols
97
98
  if (status.phase === "stuck") {
98
99
  const elapsed = elapsedSince(status, now);
99
100
  return {
100
- text: terminalCols < 60 ? "stuck" : `stuck · ${elapsed} · Esc to cancel`,
101
+ text: terminalCols < 60 ? "No output" : `No output · ${elapsed} · Esc to cancel`,
101
102
  toneHint: "error",
102
103
  };
103
104
  }
@@ -117,12 +118,12 @@ function inlineParts(
117
118
  terminalCols: number,
118
119
  ): { text: string; hint: string | null; toneHint: VerbRender["toneHint"] } | null {
119
120
  if (status.phase === "stuck")
120
- return { text: `Stuck for ${elapsedSince(status, now)}.`, hint: "Press Esc to cancel.", toneHint: "error" };
121
+ return { text: `No output for ${noProgressSince(status, now)}.`, hint: "Press Esc to cancel.", toneHint: "error" };
121
122
  const core = coreVerb(status);
122
123
  if (!core) return null;
123
124
  const text = core.text.replace(/^[a-z]/, (c) => c.toUpperCase());
124
125
  if (status.watchdogTier >= 3) {
125
- const hint = terminalCols < 50 ? null : `(no progress for ${noProgressSince(status, now)}; press Esc to cancel)`;
126
+ const hint = terminalCols < 50 ? null : `(no output for ${noProgressSince(status, now)}; press Esc to cancel)`;
126
127
  return { text, hint, toneHint: core.toneHint };
127
128
  }
128
129
  if (terminalCols < 50 || status.phase === "tool_blocked") return { text, hint: null, toneHint: core.toneHint };
@@ -10,11 +10,21 @@
10
10
 
11
11
  import type { ClioSettings } from "../core/config.js";
12
12
  import { getTerminationCoordinator } from "../core/termination.js";
13
- import { type Component, Container, matchesKey, ScrollView, Text, type TUI, VStack } from "../engine/tui.js";
13
+ import {
14
+ type Component,
15
+ Container,
16
+ isKeyRelease,
17
+ isKeyRepeat,
18
+ matchesKey,
19
+ ScrollView,
20
+ Text,
21
+ type TUI,
22
+ VStack,
23
+ } from "../engine/tui.js";
14
24
  import { ClioEditor, type EditorChrome } from "./clio-editor.js";
15
25
  import { createProcessInteractiveShell } from "./interactive-shell.js";
16
26
  import { type ClioKeybindingManager, createKeybindingManager } from "./keybinding-manager.js";
17
- import { clioTheme, GLYPH } from "./theme/index.js";
27
+ import { brandMark, clioTheme, GLYPH } from "./theme/index.js";
18
28
 
19
29
  export const INSTANT_SHELL_ENV = "CLIO_CODER_INSTANT_SHELL";
20
30
  const DOUBLE_TAP_MS = 500;
@@ -133,17 +143,25 @@ function stageZeroRoot(
133
143
  shutdownArmed: () => boolean,
134
144
  ): Component {
135
145
  const theme = clioTheme();
146
+ // The same wordmark the hydrated header paints, through the same helper, so
147
+ // the `>C_` does not change color at adoption. `brandMark` and the theme
148
+ // tokens are Stage-0-safe: pure string composition with no I/O and no import
149
+ // outside the theme leaf this module already depends on.
150
+ // Three lines, matching the hydrated header's footprint so adoption does not
151
+ // shift the editor down the screen. The third is deliberately blank: it costs
152
+ // nothing and asserts nothing, where any real fact here would need I/O the
153
+ // boot path must not do.
136
154
  const heading = new Text(
137
- `${theme.style("title", ">C_ Clio Coder", { bold: true })}\n${theme.fg("muted", "Hydrating session services…")}`,
155
+ `${brandMark(theme)} ${theme.style("title", "Clio Coder", { bold: true })}\n${theme.fg("muted", "Starting Clio · you can type now")}\n`,
138
156
  0,
139
157
  0,
140
158
  );
159
+ // Only the armed-exit warning lives here. The reassurance that typing works
160
+ // is already the second heading line, and printing it twice on a two-line
161
+ // screen was the loudest thing on it.
141
162
  const footer: Component = {
142
- render: () => [
143
- shutdownArmed()
144
- ? theme.fg("warning", "Ctrl+C again to exit · typed input will be recovered")
145
- : theme.fg("dim", "Warming up · typing and submit are ready"),
146
- ],
163
+ render: () =>
164
+ shutdownArmed() ? [theme.fg("warning", "Ctrl+C again to exit · typed input will be recovered")] : [""],
147
165
  invalidate: () => {},
148
166
  };
149
167
  if (mode === "fullscreen") {
@@ -182,7 +200,7 @@ export function createProcessTerminalLease(options: CreateProcessTerminalLeaseOp
182
200
  [settings.chat.target, settings.chat.model].filter((part) => part && part.length > 0).join("·") || "starting",
183
201
  getThinkingLabel: () => settings.chat.thinkingLevel ?? "off",
184
202
  getSubmitKeyLabel: () => keybindings.getKeys("tui.input.submit")[0] ?? "Enter",
185
- getNewlineKeyLabel: () => keybindings.getKeys("tui.input.newLine")[0] ?? "Shift+Enter",
203
+ getNewlineKeyLabel: () => keybindings.getKeys("tui.input.newLine")[0] ?? "Ctrl+J",
186
204
  };
187
205
  const editorChromeProxy: EditorChrome = {
188
206
  getModelLabel: () => editorChrome.getModelLabel(),
@@ -193,7 +211,7 @@ export function createProcessTerminalLease(options: CreateProcessTerminalLeaseOp
193
211
  getTurnPreparation: () => editorChrome.getTurnPreparation?.() ?? "idle",
194
212
  willEnterSteer: (text) => editorChrome.willEnterSteer?.(text) ?? false,
195
213
  getSubmitKeyLabel: () => editorChrome.getSubmitKeyLabel?.() ?? "Enter",
196
- getNewlineKeyLabel: () => editorChrome.getNewlineKeyLabel?.() ?? "Shift+Enter",
214
+ getNewlineKeyLabel: () => editorChrome.getNewlineKeyLabel?.() ?? "Ctrl+J",
197
215
  };
198
216
  const shell =
199
217
  options.testing?.shell ??
@@ -271,6 +289,12 @@ export function createProcessTerminalLease(options: CreateProcessTerminalLeaseOp
271
289
  tui.requestRender();
272
290
  return;
273
291
  }
292
+ if (submissions.length > 0) {
293
+ shutdownArmed = false;
294
+ lastCtrlCAt = 0;
295
+ tui.requestRender();
296
+ return;
297
+ }
274
298
  const pressedAt = now();
275
299
  if (lastCtrlCAt > 0 && pressedAt - lastCtrlCAt <= DOUBLE_TAP_MS) {
276
300
  lastCtrlCAt = 0;
@@ -283,11 +307,19 @@ export function createProcessTerminalLease(options: CreateProcessTerminalLeaseOp
283
307
  };
284
308
 
285
309
  inputDelegate = (data) => {
310
+ if (isKeyRelease(data)) return { consume: true };
311
+ if (
312
+ isKeyRepeat(data) &&
313
+ (matchesKey(data, "ctrl+c") ||
314
+ keybindings.matches(data, "clio-coder.exit") ||
315
+ keybindings.matches(data, "tui.input.submit"))
316
+ )
317
+ return { consume: true };
286
318
  if (matchesKey(data, "ctrl+c")) {
287
319
  handleStage0CtrlC();
288
320
  return { consume: true };
289
321
  }
290
- if (keybindings.matches(data, "clio-coder.exit") && editor.getText().length === 0) {
322
+ if (keybindings.matches(data, "clio-coder.exit") && editor.getText().length === 0 && submissions.length === 0) {
291
323
  requestShutdown();
292
324
  return { consume: true };
293
325
  }
@@ -302,7 +334,7 @@ export function createProcessTerminalLease(options: CreateProcessTerminalLeaseOp
302
334
  };
303
335
 
304
336
  const stableInput = (data: string) => inputDelegate(data);
305
- const removeStableInput = tui.addInputListener(stableInput);
337
+ const removeStableInput = tui.setApplicationInputPolicy(stableInput);
306
338
  const stableSignal = (): void => {
307
339
  if (applicationSignal) applicationSignal();
308
340
  else handleStage0CtrlC();
@@ -1,120 +1,58 @@
1
- /**
2
- * Transcript detail policy: the one place `/output minimal|default|verbose`
3
- * becomes a decision about how much of each foldable transcript block is open
4
- * before the operator touches it.
5
- *
6
- * The chat panel used to consult the verbosity string in four places, each
7
- * spelling the rule a little differently, and nothing else (running rows, live
8
- * tool output, worker cards in replay) consulted it at all. The panel now reads
9
- * this policy once per frame and threads it down; the verbosity string never
10
- * reaches a renderer.
11
- *
12
- * Operator toggles (`Alt+O`, `Alt+R`, expand-all, collapse-all) are overrides
13
- * layered on top of this policy, not fights with it: the effective state of a
14
- * block is `override ?? policy`, and `resolveFold` is that one rule.
15
- *
16
- * Pure module: no I/O, no UI imports.
17
- */
18
-
19
- import type { OutputVerbosity } from "../core/defaults.js";
20
- import type { ToolFoldDefault, ToolPresentationPolicy } from "../tools/presentation.js";
21
-
22
- /** A block's fold state. The same vocabulary serves tools, workers, thinking, and local bash. */
23
- export type Fold = ToolFoldDefault;
24
-
25
- /** An operator's explicit choice for one block, or none. */
26
- export type FoldOverride = Fold | undefined;
1
+ /** Presentation budgets for the same captured session. Detailed is still bounded. */
2
+ import type { OutputStyle } from "../core/defaults.js";
27
3
 
28
4
  export interface TranscriptDetailPolicy {
29
- /** Finished tool call body: folded subline, the tool's own default, or open. */
30
- toolBody: "folded" | "per-tool" | "expanded";
31
- /** In-flight tool call: one-line row with elapsed, or the header plus streaming body. */
32
- runningTool: "row" | "body";
33
- /** Reasoning stretch: bare marker, folded marker with live progress, or the open rail. */
34
- thinking: "marker" | "folded" | "rail";
35
- /** Worker block: folded card, the origin default, or open. */
36
- worker: "folded" | "origin" | "expanded";
37
- /** Settled turn receipt: none, `turn · in N · out M`, or the full receipt. */
5
+ style: OutputStyle;
6
+ reasoningRows: number;
7
+ resultRows: number;
8
+ bashRows: number;
9
+ operatorBashRows: number;
10
+ diffRows: number;
11
+ workerRows: number;
12
+ workerActivity: boolean;
13
+ errorRows: number;
38
14
  receipt: "none" | "compact" | "full";
39
- /** Failed tool under its folded row: the bounded excerpt, or the full body. */
40
- errors: "excerpt" | "body";
41
15
  }
42
16
 
43
- const MINIMAL: TranscriptDetailPolicy = {
44
- toolBody: "folded",
45
- runningTool: "row",
46
- thinking: "marker",
47
- worker: "folded",
48
- receipt: "none",
49
- errors: "excerpt",
50
- };
51
-
52
- const DEFAULT: TranscriptDetailPolicy = {
53
- toolBody: "per-tool",
54
- runningTool: "row",
55
- thinking: "folded",
56
- worker: "origin",
57
- receipt: "compact",
58
- errors: "excerpt",
17
+ const POLICIES: Record<OutputStyle, TranscriptDetailPolicy> = {
18
+ compact: {
19
+ style: "compact",
20
+ reasoningRows: 0,
21
+ resultRows: 0,
22
+ bashRows: 0,
23
+ operatorBashRows: 3,
24
+ diffRows: 0,
25
+ workerRows: 0,
26
+ workerActivity: false,
27
+ errorRows: 4,
28
+ receipt: "none",
29
+ },
30
+ standard: {
31
+ style: "standard",
32
+ reasoningRows: 3,
33
+ resultRows: 0,
34
+ bashRows: 0,
35
+ operatorBashRows: 6,
36
+ diffRows: 8,
37
+ workerRows: 3,
38
+ workerActivity: false,
39
+ errorRows: 4,
40
+ receipt: "compact",
41
+ },
42
+ detailed: {
43
+ style: "detailed",
44
+ reasoningRows: 12,
45
+ resultRows: 8,
46
+ bashRows: 12,
47
+ operatorBashRows: 12,
48
+ diffRows: 20,
49
+ workerRows: 8,
50
+ workerActivity: true,
51
+ errorRows: 12,
52
+ receipt: "full",
53
+ },
59
54
  };
60
55
 
61
- const VERBOSE: TranscriptDetailPolicy = {
62
- toolBody: "expanded",
63
- runningTool: "body",
64
- thinking: "rail",
65
- worker: "expanded",
66
- receipt: "full",
67
- errors: "body",
68
- };
69
-
70
- /**
71
- * Map a verbosity to the full policy table. An absent verbosity (a panel built
72
- * without settings) is the balanced default, so the literal never has to be
73
- * spelled by the caller.
74
- */
75
- export function transcriptDetail(verbosity: OutputVerbosity | undefined): TranscriptDetailPolicy {
76
- switch (verbosity) {
77
- case "minimal":
78
- return MINIMAL;
79
- case "verbose":
80
- return VERBOSE;
81
- default:
82
- return DEFAULT;
83
- }
84
- }
85
-
86
- /** Effective state of one block: the operator's override when set, else the policy's answer. */
87
- export function resolveFold(override: FoldOverride, policyFold: Fold): Fold {
88
- return override ?? policyFold;
89
- }
90
-
91
- /** The fold the policy gives a finished tool call, through the tool's own presentation when asked to. */
92
- export function policyToolFold(detail: TranscriptDetailPolicy, presentation: ToolPresentationPolicy): Fold {
93
- if (detail.toolBody === "per-tool") return presentation.foldDefault;
94
- return detail.toolBody;
95
- }
96
-
97
- /** The fold the policy gives an in-flight tool call. */
98
- export function policyRunningToolFold(detail: TranscriptDetailPolicy): Fold {
99
- return detail.runningTool === "body" ? "expanded" : "folded";
100
- }
101
-
102
- /** The fold the policy gives a reasoning stretch. */
103
- export function policyThinkingFold(detail: TranscriptDetailPolicy): Fold {
104
- return detail.thinking === "rail" ? "expanded" : "folded";
105
- }
106
-
107
- /**
108
- * The fold the policy gives a worker block. `askedByModel` is the origin rule
109
- * the caller already knows: a run the model asked for folds, the operator's own
110
- * run opens.
111
- */
112
- export function policyWorkerFold(detail: TranscriptDetailPolicy, askedByModel: boolean): Fold {
113
- if (detail.worker === "origin") return askedByModel ? "folded" : "expanded";
114
- return detail.worker;
115
- }
116
-
117
- /** The override that flips a block away from its current effective state. */
118
- export function toggledFold(effective: Fold): Fold {
119
- return effective === "expanded" ? "folded" : "expanded";
56
+ export function transcriptDetail(style: OutputStyle = "standard"): TranscriptDetailPolicy {
57
+ return POLICIES[style];
120
58
  }
@@ -25,6 +25,7 @@ export type SteeringMode = "interrupt" | "next-slot" | "end-of-turn";
25
25
  export const DEFAULT_STEERING_MODE: SteeringMode = "next-slot";
26
26
 
27
27
  export interface QueuedChatMessage {
28
+ display?: { text: string; note: string };
28
29
  text: string;
29
30
  kind: QueuedMessageKind;
30
31
  }
@@ -50,8 +51,8 @@ export interface TurnQueuesDeps {
50
51
  }
51
52
 
52
53
  export interface TurnQueues {
53
- steer(text: string): boolean;
54
- queueFollowUp(text: string): boolean;
54
+ steer(text: string, display?: QueuedChatMessage["display"]): boolean;
55
+ queueFollowUp(text: string, display?: QueuedChatMessage["display"]): boolean;
55
56
  queuedMessages(): QueuedMessagesSnapshot;
56
57
  /** Drain the mirror and both engine queues; returns the drained entries. */
57
58
  clearQueuedMirror(): QueuedChatMessage[];
@@ -69,7 +70,7 @@ export function createTurnQueues(deps: TurnQueuesDeps): TurnQueues {
69
70
  const { state } = deps;
70
71
  // UI mirror of both engine queues, in enqueue order. Entries leave when
71
72
  // the engine injects them into the transcript (message_end →
72
- // appendQueuedUserTurn), when alt+up restores them to the editor, or when
73
+ // appendQueuedUserTurn), when Alt+Q restores them to the editor, or when
73
74
  // a cancel clears the run.
74
75
  const queuedMirror: QueuedChatMessage[] = [];
75
76
  const persistedUserEchoes: string[] = [];
@@ -82,7 +83,7 @@ export function createTurnQueues(deps: TurnQueuesDeps): TurnQueues {
82
83
  // that a message is pending, exactly as pi-coding-agent's pending container
83
84
  // works. The former per-steer transcript notice duplicated the panel and
84
85
  // left a permanent line for a transient state.
85
- const enqueue = (text: string, kind: QueuedMessageKind): boolean => {
86
+ const enqueue = (text: string, kind: QueuedMessageKind, display?: QueuedChatMessage["display"]): boolean => {
86
87
  // The payload crosses to the model exactly as it was submitted; only the
87
88
  // emptiness test reads a trimmed copy. A queued turn that shortened its own
88
89
  // text here would land in the ledger disagreeing with the expansion that
@@ -93,7 +94,7 @@ export function createTurnQueues(deps: TurnQueuesDeps): TurnQueues {
93
94
  content: text,
94
95
  timestamp: Date.now(),
95
96
  } as AgentMessage;
96
- queuedMirror.push({ text, kind });
97
+ queuedMirror.push({ text, kind, ...(display ? { display } : {}) });
97
98
  if (kind === "steer") {
98
99
  state.runtime.agent.steer(message);
99
100
  } else {
@@ -104,8 +105,8 @@ export function createTurnQueues(deps: TurnQueuesDeps): TurnQueues {
104
105
  };
105
106
 
106
107
  return {
107
- steer: (text) => enqueue(text, "steer"),
108
- queueFollowUp: (text) => enqueue(text, "follow-up"),
108
+ steer: (text, display) => enqueue(text, "steer", display),
109
+ queueFollowUp: (text, display) => enqueue(text, "follow-up", display),
109
110
  queuedMessages(): QueuedMessagesSnapshot {
110
111
  return {
111
112
  steer: queuedMirror.filter((entry) => entry.kind === "steer").map((entry) => entry.text),
@@ -398,7 +398,7 @@ export function createTurnRuntime(deps: TurnRuntimeDeps): TurnRuntime {
398
398
  ) {
399
399
  // Same target+runtime+model. Settings may still have moved
400
400
  // thinkingLevel since the last call (the user invoked /thinking
401
- // or Alt+T); reconcile the clamped level so the next prompt
401
+ // or Shift+Tab); reconcile the clamped level so the next prompt
402
402
  // dispatches under the current intent without forcing a rebuild.
403
403
  ensureReasoningProbe(target);
404
404
  const runtimeResolution = refineRuntimeTargetWithModelHints(
@@ -44,6 +44,7 @@ import { clockLocal } from "../format-time.js";
44
44
  import { abbreviateModelId } from "../theme/index.js";
45
45
 
46
46
  export type ViewArtifactCategory =
47
+ | "transcript"
47
48
  | "accountability"
48
49
  | "evidence"
49
50
  | "receipt"
@@ -86,6 +87,7 @@ export interface ArtifactProvider {
86
87
  }
87
88
 
88
89
  export interface ArtifactProviderDeps {
90
+ readTranscript?: (() => ViewArtifact[]) | undefined;
89
91
  stateDir: string;
90
92
  dataDir?: string | undefined;
91
93
  dispatch?: Pick<DispatchContract, "listRuns" | "getRun"> | undefined;
@@ -94,6 +96,7 @@ export interface ArtifactProviderDeps {
94
96
  }
95
97
 
96
98
  export const VIEW_ARTIFACT_CATEGORIES: readonly ViewArtifactCategory[] = [
99
+ "transcript",
97
100
  "accountability",
98
101
  "evidence",
99
102
  "receipt",
@@ -1560,6 +1563,7 @@ export class SafetyAuditArtifactProvider implements ArtifactProvider {
1560
1563
 
1561
1564
  export function createDefaultArtifactProviders(deps: ArtifactProviderDeps): ArtifactProvider[] {
1562
1565
  return [
1566
+ { category: "transcript", list: async () => deps.readTranscript?.() ?? [] },
1563
1567
  new AccountabilityArtifactProvider(deps),
1564
1568
  new EvidenceArtifactProvider(deps),
1565
1569
  new ReceiptArtifactProvider(deps),