@iowarp/clio-coder 0.4.0 → 0.4.2

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 (751) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/CONTRIBUTING.md +59 -36
  3. package/README.md +407 -375
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
  6. package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
  9. package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
  10. package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
  11. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  12. package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
  13. package/dist/chunk-2X4RYJTJ.js +39 -0
  14. package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
  15. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  16. package/dist/chunk-34BHNEE3.js +1846 -0
  17. package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
  18. package/dist/chunk-3EBYEESD.js +314 -0
  19. package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
  20. package/dist/chunk-3KIPBMUA.js +308 -0
  21. package/dist/chunk-3M6DQK6S.js +362 -0
  22. package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
  23. package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
  24. package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
  25. package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
  26. package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
  27. package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
  28. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  29. package/dist/chunk-77QIVUZB.js +1334 -0
  30. package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
  33. package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
  34. package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
  35. package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
  36. package/dist/chunk-BTK3SSSK.js +67 -0
  37. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  38. package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
  39. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  40. package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
  41. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  42. package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
  43. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  44. package/dist/chunk-D7E7WCDF.js +27 -0
  45. package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
  46. package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
  47. package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
  48. package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
  49. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  50. package/dist/chunk-F2I26BDK.js +66 -0
  51. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  52. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  53. package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
  54. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  55. package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
  56. package/dist/chunk-HJWWJ6IL.js +184 -0
  57. package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
  58. package/dist/chunk-HLAFFSEK.js +360 -0
  59. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  60. package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
  61. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  62. package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
  63. package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
  64. package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
  65. package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
  66. package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
  67. package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
  68. package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
  69. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  70. package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
  71. package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
  72. package/dist/chunk-KPXDY6QF.js +47 -0
  73. package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
  74. package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
  75. package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
  76. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  77. package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
  78. package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
  79. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  80. package/dist/chunk-NDDGJUXD.js +81 -0
  81. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  82. package/dist/chunk-NMJXSHBJ.js +283 -0
  83. package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
  84. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  85. package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
  86. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  87. package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
  88. package/dist/chunk-PJX3WQUQ.js +42 -0
  89. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  90. package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
  91. package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
  92. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  93. package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
  94. package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
  95. package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
  96. package/dist/chunk-SZAA6XDG.js +30 -0
  97. package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
  98. package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
  99. package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
  100. package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
  101. package/dist/chunk-UXCU4E3T.js +303 -0
  102. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  103. package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
  104. package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
  105. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  106. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  107. package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
  108. package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
  109. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  110. package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
  111. package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
  112. package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
  113. package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
  114. package/dist/chunk-XQRY4DTA.js +657 -0
  115. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  116. package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
  117. package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
  118. package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
  119. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  120. package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
  121. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  122. package/dist/cli/index.js +38 -37
  123. package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
  124. package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
  125. package/dist/codewiki/build-worker.js +1 -1
  126. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  127. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  128. package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
  129. package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
  130. package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
  131. package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
  132. package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
  133. package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
  134. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
  135. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
  136. package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
  137. package/dist/doctor-LHBD36VU.js +773 -0
  138. package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
  139. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
  140. package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
  141. package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
  142. package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
  143. package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
  144. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
  145. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
  146. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
  147. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
  148. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
  149. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
  150. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
  151. package/dist/fleet-view-TWHJKCN6.js +96 -0
  152. package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
  153. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  154. package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
  155. package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
  156. package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
  157. package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
  158. package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
  159. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
  160. package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
  161. package/dist/panes-IXKLOKA2.js +75 -0
  162. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  163. package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
  164. package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
  165. package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
  166. package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
  167. package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
  168. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
  169. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
  170. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
  171. package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
  172. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  173. package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
  174. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
  175. package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
  176. package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
  177. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  178. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  179. package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
  180. package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
  181. package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
  182. package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
  183. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
  184. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
  185. package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
  186. package/dist/worker/entry.js +83 -63
  187. package/docs/README.md +176 -81
  188. package/docs/{acp.md → architecture/acp.md} +36 -20
  189. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  190. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  191. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
  192. package/docs/architecture/artifact-versions.md +90 -0
  193. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  194. package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
  195. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  196. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  197. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  198. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  199. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  200. package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
  201. package/docs/{observability.md → architecture/observability.md} +26 -13
  202. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  203. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
  204. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
  205. package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
  206. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  207. package/docs/architecture/time-conventions.md +125 -0
  208. package/docs/{trace-store.md → architecture/trace-store.md} +26 -13
  209. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  210. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  211. package/docs/{built-in-agents.md → guide/built-in-agents.md} +70 -46
  212. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
  213. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
  214. package/docs/guide/configuration-reference.md +1158 -0
  215. package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
  216. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
  217. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  218. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
  219. package/docs/{glossary.md → guide/glossary.md} +14 -11
  220. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
  221. package/docs/guide/panes-and-files.md +290 -0
  222. package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
  223. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  224. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
  225. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  226. package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
  227. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
  228. package/docs/history/release-cut-checklist.md +207 -0
  229. package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
  230. package/docs/process/documentation-coverage.md +100 -0
  231. package/docs/process/documentation-guide.md +187 -0
  232. package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
  233. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  234. package/docs/{evolution.md → process/evolution.md} +2 -2
  235. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +17 -10
  236. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  237. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  238. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  239. package/evals/README.md +5 -0
  240. package/evals/behavioral-corpus-grader.mjs +103 -0
  241. package/evals/behavioral-machinery-baseline.json +2276 -0
  242. package/evals/behavioral-machinery-driver.ts +250 -0
  243. package/evals/behavioral-machinery-support.ts +253 -0
  244. package/evals/behavioral-machinery.yaml +614 -0
  245. package/evals/behavioral-model-negative-control.yaml +68 -0
  246. package/evals/behavioral-model.yaml +216 -0
  247. package/evals/fixtures/behavioral-facts.txt +3 -0
  248. package/evals/fixtures/behavioral-main.ts +7 -0
  249. package/evals/fixtures/decoy/note.txt +2 -0
  250. package/evals/fixtures/private/credentials.txt +1 -0
  251. package/evals/tracked-metrics-baseline.yaml +229 -0
  252. package/evals/tracked-metrics-grader.mjs +129 -0
  253. package/package.json +13 -21
  254. package/skills/README.md +51 -42
  255. package/skills/coding/ast-grep/SKILL.md +9 -3
  256. package/skills/coding/coding-standards/SKILL.md +9 -3
  257. package/skills/coding/prototype/SKILL.md +9 -3
  258. package/skills/coding/tdd/SKILL.md +9 -3
  259. package/skills/context/context-handoff/SKILL.md +13 -4
  260. package/skills/context/context-handoff/evals.md +3 -3
  261. package/skills/context/context-prime/SKILL.md +9 -3
  262. package/skills/context/context-prime/evals.md +2 -2
  263. package/skills/git/file-ticket/SKILL.md +10 -5
  264. package/skills/git/file-ticket/evals.md +2 -2
  265. package/skills/git/fix-issue/SKILL.md +12 -5
  266. package/skills/git/fix-issue/evals.md +4 -4
  267. package/skills/git/resolve-merge-conflicts/SKILL.md +9 -3
  268. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  269. package/skills/git/ship/SKILL.md +10 -4
  270. package/skills/git/ship/evals.md +4 -4
  271. package/skills/git/worktree-create/SKILL.md +8 -3
  272. package/skills/git/worktree-create/evals.md +6 -6
  273. package/skills/git/worktree-merge/SKILL.md +8 -3
  274. package/skills/git/worktree-merge/evals.md +6 -6
  275. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
  276. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
  277. package/skills/meta/clio-coder-test/SKILL.md +146 -0
  278. package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
  279. package/skills/meta/clio-coder-test/references/harness.md +102 -0
  280. package/skills/meta/clio-coder-test/references/test-map.md +96 -0
  281. package/skills/meta/credentials/SKILL.md +10 -3
  282. package/skills/meta/find-skills/SKILL.md +9 -3
  283. package/skills/meta/herdr/SKILL.md +9 -3
  284. package/skills/meta/skill-craft/SKILL.md +39 -16
  285. package/skills/planning/architecture/SKILL.md +9 -3
  286. package/skills/planning/backlog/SKILL.md +9 -3
  287. package/skills/planning/prd/SKILL.md +9 -3
  288. package/skills/planning/product-intent/SKILL.md +9 -3
  289. package/skills/planning/tech-spec/SKILL.md +9 -3
  290. package/skills/registry.yaml +66 -66
  291. package/skills/research/arxiv-literature/SKILL.md +9 -3
  292. package/skills/research/experiment-protocol/SKILL.md +10 -3
  293. package/skills/research/scientific-debugging/SKILL.md +10 -3
  294. package/skills/research/scientific-debugging/evals.md +2 -2
  295. package/skills/research/scientific-modernization/SKILL.md +10 -3
  296. package/skills/skill-marketplace.json +285 -66
  297. package/skills/workflow/cut-it/SKILL.md +11 -3
  298. package/skills/workflow/design-council/SKILL.md +12 -3
  299. package/skills/workflow/grill-me/SKILL.md +9 -3
  300. package/skills/workflow/workflow-distiller/SKILL.md +9 -3
  301. package/src/cli/acp.ts +2 -2
  302. package/src/cli/args.ts +2 -2
  303. package/src/cli/auth.ts +2 -2
  304. package/src/cli/bootstrap-generate.ts +6 -6
  305. package/src/cli/clio.ts +6 -1
  306. package/src/cli/config-inspect.ts +68 -15
  307. package/src/cli/configure-interop.ts +1 -1
  308. package/src/cli/configure.ts +27 -31
  309. package/src/cli/default-target.ts +1 -1
  310. package/src/cli/docs.ts +28 -20
  311. package/src/cli/doctor-naming.ts +323 -0
  312. package/src/cli/doctor-panes.ts +46 -14
  313. package/src/cli/doctor-toolchain.ts +31 -10
  314. package/src/cli/doctor.ts +15 -1
  315. package/src/cli/eval-inventory.ts +8 -8
  316. package/src/cli/eval.ts +1 -2
  317. package/src/cli/evidence-detail.ts +1 -1
  318. package/src/cli/evidence-inventory.ts +1 -1
  319. package/src/cli/extensions.ts +2 -1
  320. package/src/cli/fleet-decisions.ts +1 -1
  321. package/src/cli/fleet-inspect.ts +1 -1
  322. package/src/cli/fleet-preflight.ts +1 -1
  323. package/src/cli/fleet-verify.ts +1 -1
  324. package/src/cli/fleet-view.ts +40 -23
  325. package/src/cli/fleet.ts +9 -6
  326. package/src/cli/index.ts +2 -1
  327. package/src/cli/internal-dispatch.ts +3 -4
  328. package/src/cli/interop-inspect.ts +2 -2
  329. package/src/cli/models.ts +3 -3
  330. package/src/cli/modes/print.ts +1 -1
  331. package/src/cli/panes.ts +19 -5
  332. package/src/cli/reset.ts +1 -1
  333. package/src/cli/run.ts +13 -17
  334. package/src/cli/share.ts +6 -2
  335. package/src/cli/skills-eval.ts +14 -14
  336. package/src/cli/targets.ts +25 -30
  337. package/src/cli/trace-inspect.ts +1 -1
  338. package/src/cli/trace.ts +96 -4
  339. package/src/cli/uninstall.ts +2 -2
  340. package/src/cli/upgrade.ts +29 -34
  341. package/src/cli/usage.ts +2 -2
  342. package/src/cli/validate-model.ts +1 -1
  343. package/src/cli/verifiers-inspect.ts +1 -1
  344. package/src/cli/wiki-generate.ts +6 -6
  345. package/src/core/artifact-paths.ts +1 -1
  346. package/src/core/bash-exec.ts +132 -87
  347. package/src/core/boot-trace.ts +3 -3
  348. package/src/core/bus-events.ts +51 -6
  349. package/src/core/bus-trace.ts +2 -2
  350. package/src/core/compile-cache.ts +1 -1
  351. package/src/core/config.ts +1066 -886
  352. package/src/core/defaults.ts +326 -530
  353. package/src/core/dispatch-outcome.ts +16 -0
  354. package/src/core/domain-loader.ts +6 -4
  355. package/src/core/event-bus.ts +1 -1
  356. package/src/core/file-references.ts +78 -88
  357. package/src/core/git-commit-attribution.ts +3 -9
  358. package/src/core/guardrails.ts +33 -52
  359. package/src/core/naming-compat.ts +45 -0
  360. package/src/core/naming-events.ts +62 -0
  361. package/src/core/prompt-hint.ts +9 -0
  362. package/src/core/recent-models.ts +1 -7
  363. package/src/core/residency-protection.ts +4 -8
  364. package/src/core/resolve-config-value.ts +1 -1
  365. package/src/core/response-model-id.ts +0 -14
  366. package/src/core/session-routing.ts +84 -74
  367. package/src/core/skill-activation.ts +18 -0
  368. package/src/core/termination.ts +4 -4
  369. package/src/core/timers.ts +2 -12
  370. package/src/domains/agents/builtins/architect.md +2 -3
  371. package/src/domains/agents/builtins/coder.md +3 -2
  372. package/src/domains/agents/builtins/debugger.md +2 -2
  373. package/src/domains/agents/builtins/documenter.md +2 -2
  374. package/src/domains/agents/builtins/git-master.md +1 -1
  375. package/src/domains/agents/builtins/oracle.md +1 -1
  376. package/src/domains/agents/builtins/provenance.md +1 -1
  377. package/src/domains/agents/builtins/researcher.md +1 -1
  378. package/src/domains/agents/builtins/scout.md +1 -1
  379. package/src/domains/agents/builtins/tester.md +2 -2
  380. package/src/domains/agents/builtins/verifier.md +2 -2
  381. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  382. package/src/domains/agents/catalog.ts +14 -26
  383. package/src/domains/agents/contract.ts +2 -0
  384. package/src/domains/agents/extension.ts +26 -4
  385. package/src/domains/agents/registry.ts +7 -7
  386. package/src/domains/agents/result-contract.ts +1 -1
  387. package/src/domains/agents/spec.ts +0 -11
  388. package/src/domains/config/classify.ts +35 -47
  389. package/src/domains/config/extension.ts +5 -5
  390. package/src/domains/config/keybindings.ts +56 -47
  391. package/src/domains/config/watcher.ts +1 -1
  392. package/src/domains/context/codewiki/indexer.ts +1 -1
  393. package/src/domains/context/extension.ts +3 -6
  394. package/src/domains/context/prompt-context.ts +1 -1
  395. package/src/domains/context/wiki/assemble.ts +2 -2
  396. package/src/domains/context/working-set/path-index.ts +1 -0
  397. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  398. package/src/domains/context/working-set/replay/report.ts +1 -1
  399. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  400. package/src/domains/dispatch/active-route-planner.ts +2 -2
  401. package/src/domains/dispatch/agent-candidates.ts +1 -1
  402. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  403. package/src/domains/dispatch/agent-ledger.ts +1 -1
  404. package/src/domains/dispatch/assignment.ts +5 -5
  405. package/src/domains/dispatch/capability-match.ts +10 -0
  406. package/src/domains/dispatch/capacity-lease.ts +2 -5
  407. package/src/domains/dispatch/code-step.ts +1 -1
  408. package/src/domains/dispatch/contract.ts +2 -2
  409. package/src/domains/dispatch/extension.ts +169 -82
  410. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  411. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  412. package/src/domains/dispatch/fleet-run.ts +0 -7
  413. package/src/domains/dispatch/gate-decisions.ts +25 -14
  414. package/src/domains/dispatch/host-verification.ts +435 -39
  415. package/src/domains/dispatch/intent-requirements.ts +10 -0
  416. package/src/domains/dispatch/intent.ts +18 -1
  417. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  418. package/src/domains/dispatch/path-scope.ts +220 -70
  419. package/src/domains/dispatch/placement.ts +2 -2
  420. package/src/domains/dispatch/receipt-findings.ts +1 -1
  421. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  422. package/src/domains/dispatch/reservation-store.ts +0 -23
  423. package/src/domains/dispatch/route-decision.ts +1 -1
  424. package/src/domains/dispatch/route-history.ts +1 -1
  425. package/src/domains/dispatch/route-policy.ts +1 -1
  426. package/src/domains/dispatch/route-readiness.ts +0 -28
  427. package/src/domains/dispatch/run-event-journal.ts +9 -19
  428. package/src/domains/dispatch/state.ts +2 -3
  429. package/src/domains/dispatch/tool-stats.ts +1 -1
  430. package/src/domains/dispatch/transport.ts +47 -40
  431. package/src/domains/dispatch/types.ts +58 -6
  432. package/src/domains/dispatch/worker-protocol.ts +2 -2
  433. package/src/domains/eval/artifacts/store.ts +10 -4
  434. package/src/domains/eval/compare/thresholds.ts +0 -8
  435. package/src/domains/eval/execution-provenance.ts +1 -1
  436. package/src/domains/eval/metrics/token-stream.ts +0 -7
  437. package/src/domains/eval/report.ts +1 -1
  438. package/src/domains/eval/runner.ts +1 -1
  439. package/src/domains/eval/runners/clio-run.ts +7 -6
  440. package/src/domains/eval/runners/external-command.ts +4 -3
  441. package/src/domains/eval/schema/artifact.ts +1 -1
  442. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  443. package/src/domains/eval/schema/behavioral.ts +7 -6
  444. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  445. package/src/domains/eval/schema/naming.ts +10 -0
  446. package/src/domains/eval/schema/suite.ts +2 -2
  447. package/src/domains/eval/schema/validate.ts +9 -5
  448. package/src/domains/eval/schema/verdict.ts +4 -2
  449. package/src/domains/eval/store.ts +20 -3
  450. package/src/domains/eval/suites/run.ts +12 -6
  451. package/src/domains/eval/types.ts +1 -1
  452. package/src/domains/eval/workspaces/git.ts +1 -1
  453. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  454. package/src/domains/evidence/build.ts +13 -5
  455. package/src/domains/evidence/trust-status.ts +10 -1
  456. package/src/domains/extensions/contract.ts +15 -1
  457. package/src/domains/extensions/discovery.ts +238 -41
  458. package/src/domains/extensions/extension.ts +105 -6
  459. package/src/domains/extensions/index.ts +24 -0
  460. package/src/domains/extensions/integrity.ts +189 -0
  461. package/src/domains/extensions/manager.ts +17 -1
  462. package/src/domains/extensions/resource-path.ts +27 -0
  463. package/src/domains/extensions/resources.ts +18 -38
  464. package/src/domains/extensions/snapshot-store.ts +39 -0
  465. package/src/domains/extensions/snapshot.ts +180 -0
  466. package/src/domains/extensions/state.ts +385 -57
  467. package/src/domains/extensions/types.ts +118 -1
  468. package/src/domains/interop/consent.ts +7 -7
  469. package/src/domains/interop/extension.ts +1 -1
  470. package/src/domains/lifecycle/doctor.ts +27 -21
  471. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  472. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  473. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  474. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  475. package/src/domains/lifecycle/migrations/index.ts +22 -1
  476. package/src/domains/lifecycle/naming-history.ts +153 -0
  477. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  478. package/src/domains/lifecycle/naming-resources.ts +276 -0
  479. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  480. package/src/domains/lifecycle/naming-yazi.ts +86 -0
  481. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  482. package/src/domains/memory/task-memory-handoff.ts +6 -3
  483. package/src/domains/middleware/contract.ts +26 -0
  484. package/src/domains/middleware/extension.ts +24 -24
  485. package/src/domains/middleware/hook-receipts.ts +27 -4
  486. package/src/domains/middleware/hooks-io.ts +65 -32
  487. package/src/domains/middleware/hooks.ts +64 -0
  488. package/src/domains/middleware/index.ts +35 -4
  489. package/src/domains/middleware/marketplace-offer.ts +339 -0
  490. package/src/domains/middleware/registrations.ts +326 -0
  491. package/src/domains/middleware/runtime.ts +30 -2
  492. package/src/domains/middleware/snapshot.ts +20 -7
  493. package/src/domains/mux/contract.ts +195 -25
  494. package/src/domains/mux/detect.ts +23 -6
  495. package/src/domains/mux/dock-controller.ts +365 -0
  496. package/src/domains/mux/extension.ts +7 -1
  497. package/src/domains/mux/index.ts +21 -1
  498. package/src/domains/mux/operations.ts +72 -5
  499. package/src/domains/mux/protocol.ts +19 -6
  500. package/src/domains/mux/socket-client.ts +167 -19
  501. package/src/domains/mux/types.ts +49 -6
  502. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  503. package/src/domains/mux/yazi/event-stream.ts +6 -4
  504. package/src/domains/mux/yazi/profile.ts +1 -1
  505. package/src/domains/mux/yazi/session.ts +79 -7
  506. package/src/domains/mux/yazi/theme.ts +117 -17
  507. package/src/domains/observability/contract.ts +10 -11
  508. package/src/domains/observability/extension.ts +12 -4
  509. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  510. package/src/domains/observability/projection.ts +15 -91
  511. package/src/domains/observability/trace-store.ts +65 -19
  512. package/src/domains/prompts/compiler.ts +75 -55
  513. package/src/domains/prompts/contract.ts +15 -3
  514. package/src/domains/prompts/extension.ts +100 -12
  515. package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
  516. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  517. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  518. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  519. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  520. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  521. package/src/domains/prompts/fragments/operating/skills.md +11 -18
  522. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  523. package/src/domains/providers/extension.ts +5 -5
  524. package/src/domains/providers/index.ts +1 -1
  525. package/src/domains/providers/knowledge-base-path.ts +1 -1
  526. package/src/domains/providers/model-runtime-capabilities.ts +99 -23
  527. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  528. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +671 -106
  529. package/src/domains/providers/plugins.ts +1 -1
  530. package/src/domains/providers/resolver.ts +1 -1
  531. package/src/domains/providers/runtime-resolution.ts +31 -0
  532. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  533. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  534. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  535. package/src/domains/providers/runtimes/common/probe-helpers.ts +9 -4
  536. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  537. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  538. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  539. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  540. package/src/domains/providers/types/cost-provenance.ts +19 -0
  541. package/src/domains/providers/types/knowledge-base.ts +13 -0
  542. package/src/domains/providers/types/local-model-quirks.ts +87 -39
  543. package/src/domains/providers/types/target-descriptor.ts +3 -3
  544. package/src/domains/resources/extension.ts +1 -1
  545. package/src/domains/resources/library.ts +6 -6
  546. package/src/domains/resources/prompts/loader.ts +1 -1
  547. package/src/domains/resources/skills/content-hash.ts +7 -6
  548. package/src/domains/resources/skills/evals.ts +1 -1
  549. package/src/domains/resources/skills/install.ts +36 -12
  550. package/src/domains/resources/skills/loader.ts +41 -18
  551. package/src/domains/resources/skills/marketplace.ts +21 -2
  552. package/src/domains/resources/skills/promotion.ts +214 -0
  553. package/src/domains/safety/audit.ts +2 -2
  554. package/src/domains/safety/call-target.ts +1 -1
  555. package/src/domains/safety/finish-contract.ts +2 -1
  556. package/src/domains/safety/loop-detector.ts +7 -4
  557. package/src/domains/safety/run-effects.ts +1 -1
  558. package/src/domains/scheduling/extension.ts +4 -4
  559. package/src/domains/session/archive-readers.ts +9 -1
  560. package/src/domains/session/compaction/branch-summary.ts +4 -0
  561. package/src/domains/session/compaction/compact.ts +1 -1
  562. package/src/domains/session/compaction/tokens.ts +4 -0
  563. package/src/domains/session/context-accounting.ts +1 -1
  564. package/src/domains/session/decision-board.ts +1 -1
  565. package/src/domains/session/extension.ts +1 -1
  566. package/src/domains/session/handoff.ts +2 -2
  567. package/src/domains/session/prompt-manifest.ts +0 -5
  568. package/src/domains/session/protected-artifact-journal.ts +12 -6
  569. package/src/domains/session/retry.ts +1 -1
  570. package/src/domains/session/task-board.ts +10 -9
  571. package/src/domains/share/archive.ts +249 -43
  572. package/src/domains/toolchain/install.ts +1 -1
  573. package/src/engine/acp/adapter.ts +3 -3
  574. package/src/engine/acp/event-mapper.ts +3 -3
  575. package/src/engine/acp/server.ts +89 -35
  576. package/src/engine/acp/tool-mediator.ts +2 -2
  577. package/src/engine/acp/types.ts +1 -1
  578. package/src/engine/alcf-oauth.ts +5 -5
  579. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  580. package/src/engine/api-registry.ts +1 -1
  581. package/src/engine/apis/llamacpp-residency.ts +4 -23
  582. package/src/engine/apis/lmstudio.ts +4 -9
  583. package/src/engine/apis/ollama-native.ts +9 -9
  584. package/src/engine/apis/openai-completions.ts +30 -27
  585. package/src/engine/apis/output-budget.ts +8 -18
  586. package/src/engine/apis/residency.ts +10 -35
  587. package/src/engine/claude/sdk-module.ts +1 -12
  588. package/src/engine/claude/sdk-runtime.ts +6 -6
  589. package/src/engine/claude/subprocess-runtime.ts +1 -1
  590. package/src/engine/claude/tool-safety.ts +4 -4
  591. package/src/engine/gemma-channel-filter.ts +19 -0
  592. package/src/engine/loop-guard.ts +92 -17
  593. package/src/engine/session.ts +14 -7
  594. package/src/engine/tui-primitives.ts +1 -1
  595. package/src/engine/worker-events.ts +6 -6
  596. package/src/engine/worker-runtime.ts +54 -24
  597. package/src/engine/worker-tools.ts +3 -1
  598. package/src/entry/extension-hook-sources.ts +28 -0
  599. package/src/entry/extension-reload.ts +309 -0
  600. package/src/entry/orchestrator.ts +163 -120
  601. package/src/interactive/application-controller.ts +23 -22
  602. package/src/interactive/bus-notices.ts +10 -3
  603. package/src/interactive/chat-loop-messages.ts +3 -13
  604. package/src/interactive/chat-loop.ts +18 -9
  605. package/src/interactive/chat-panel.ts +37 -14
  606. package/src/interactive/chat-renderer.ts +71 -7
  607. package/src/interactive/clio-editor.ts +105 -1
  608. package/src/interactive/context-activity.ts +8 -6
  609. package/src/interactive/context-meter.ts +3 -6
  610. package/src/interactive/context-overlay.ts +1 -1
  611. package/src/interactive/cost-overlay.ts +1 -1
  612. package/src/interactive/council-grid.ts +2 -2
  613. package/src/interactive/dispatch-board.ts +36 -44
  614. package/src/interactive/editor-bash.ts +21 -0
  615. package/src/interactive/editor-steer.ts +9 -4
  616. package/src/interactive/editor-submit.ts +24 -18
  617. package/src/interactive/external-editor.ts +1 -1
  618. package/src/interactive/file-reference-completion.ts +360 -0
  619. package/src/interactive/footer/dashboard.ts +15 -17
  620. package/src/interactive/footer/notifications.ts +14 -8
  621. package/src/interactive/footer/widgets.ts +15 -44
  622. package/src/interactive/interactive-application.ts +116 -61
  623. package/src/interactive/interactive-event-projection.ts +1 -1
  624. package/src/interactive/interactive-input-runtime.ts +6 -2
  625. package/src/interactive/interactive-presentation.ts +22 -17
  626. package/src/interactive/interactive-shell.ts +2 -2
  627. package/src/interactive/interactive-slash-runtime.ts +65 -17
  628. package/src/interactive/interactive-subscriptions.ts +1 -1
  629. package/src/interactive/interactive-tickers.ts +1 -1
  630. package/src/interactive/keybinding-manager.ts +4 -4
  631. package/src/interactive/layout.ts +1 -1
  632. package/src/interactive/memory-overlay.ts +2 -2
  633. package/src/interactive/modal-marker.ts +2 -21
  634. package/src/interactive/mutation-preview.ts +1 -1
  635. package/src/interactive/overlay-frame.ts +4 -12
  636. package/src/interactive/overlay-general-openers.ts +6 -2
  637. package/src/interactive/overlay-key-routing.ts +7 -7
  638. package/src/interactive/overlay-lifecycle.ts +1 -1
  639. package/src/interactive/overlay-model-selectors.ts +3 -3
  640. package/src/interactive/overlays/agents.ts +2 -2
  641. package/src/interactive/overlays/ask-user.ts +25 -11
  642. package/src/interactive/overlays/context-reset.ts +28 -4
  643. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  644. package/src/interactive/overlays/decisions.ts +4 -2
  645. package/src/interactive/overlays/extensions.ts +9 -1
  646. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  647. package/src/interactive/overlays/handoff-review.ts +2 -2
  648. package/src/interactive/overlays/help-reference.ts +13 -0
  649. package/src/interactive/overlays/interop.ts +1 -1
  650. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  651. package/src/interactive/overlays/message-picker.ts +1 -1
  652. package/src/interactive/overlays/model-selector.ts +39 -31
  653. package/src/interactive/overlays/prompts.ts +10 -4
  654. package/src/interactive/overlays/session-selector.ts +2 -2
  655. package/src/interactive/overlays/settings.ts +360 -303
  656. package/src/interactive/overlays/side-question.ts +2 -2
  657. package/src/interactive/overlays/skills-hub.ts +8 -8
  658. package/src/interactive/overlays/tree-selector.ts +2 -2
  659. package/src/interactive/panes-runtime.ts +145 -43
  660. package/src/interactive/permission-overlay.ts +2 -2
  661. package/src/interactive/prompt-cache-identity.ts +88 -0
  662. package/src/interactive/renderers/retry-status.ts +12 -4
  663. package/src/interactive/renderers/tool-execution.ts +4 -4
  664. package/src/interactive/session-transcript.ts +3 -3
  665. package/src/interactive/slash-autocomplete.ts +454 -165
  666. package/src/interactive/slash-commands.ts +401 -190
  667. package/src/interactive/slash-spec.ts +160 -17
  668. package/src/interactive/status/controller.ts +2 -2
  669. package/src/interactive/stream-pacing-policy.ts +1 -24
  670. package/src/interactive/tasks-overlay.ts +20 -13
  671. package/src/interactive/terminal-lease.ts +6 -7
  672. package/src/interactive/turn-context.ts +41 -26
  673. package/src/interactive/turn-persistence.ts +2 -2
  674. package/src/interactive/turn-prewarm.ts +2 -2
  675. package/src/interactive/turn-runtime.ts +8 -8
  676. package/src/interactive/turn-state.ts +1 -1
  677. package/src/interactive/view/artifacts.ts +12 -9
  678. package/src/interactive/view/view-overlay.ts +13 -10
  679. package/src/interactive/watch-pane.ts +38 -10
  680. package/src/interactive/welcome-dashboard.ts +15 -15
  681. package/src/interactive/worker-progress.ts +4 -4
  682. package/src/interactive/worker-receipts.ts +1 -1
  683. package/src/interactive/worker-stream.ts +1 -4
  684. package/src/interactive/yazi-bridge.ts +72 -11
  685. package/src/tools/agent-tools.ts +30 -1
  686. package/src/tools/artifact.ts +2 -2
  687. package/src/tools/ask-user.ts +6 -6
  688. package/src/tools/bash.ts +2 -2
  689. package/src/tools/bootstrap.ts +4 -0
  690. package/src/tools/builtin-tool-catalog.ts +52 -22
  691. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  692. package/src/tools/codewiki/code-nav.ts +99 -13
  693. package/src/tools/compete-worktrees.ts +27 -17
  694. package/src/tools/context/docs-engine.ts +20 -7
  695. package/src/tools/context/index.ts +44 -13
  696. package/src/tools/core-bootstrap.ts +28 -6
  697. package/src/tools/credential-present.ts +1 -2
  698. package/src/tools/dispatch-admission.ts +4 -2
  699. package/src/tools/dispatch-arguments.ts +6 -2
  700. package/src/tools/dispatch-plan.ts +48 -15
  701. package/src/tools/dispatch-run-events.ts +13 -11
  702. package/src/tools/dispatch-runner.ts +11 -6
  703. package/src/tools/dispatch-schema.ts +338 -0
  704. package/src/tools/dispatch-types.ts +3 -0
  705. package/src/tools/dispatch.ts +9 -254
  706. package/src/tools/find.ts +1 -6
  707. package/src/tools/ledger.ts +3 -5
  708. package/src/tools/monitor-surface.ts +5 -13
  709. package/src/tools/monitor.ts +4 -4
  710. package/src/tools/observation.ts +4 -5
  711. package/src/tools/observers.ts +0 -33
  712. package/src/tools/panes-surface.ts +4 -11
  713. package/src/tools/panes.ts +4 -2
  714. package/src/tools/policy.ts +15 -2
  715. package/src/tools/read.ts +5 -6
  716. package/src/tools/registry.ts +30 -7
  717. package/src/tools/result-shaping.ts +18 -14
  718. package/src/tools/steer-surface.ts +1 -1
  719. package/src/tools/task-worktree.ts +28 -7
  720. package/src/tools/tasks.ts +1 -1
  721. package/src/tools/truncate.ts +6 -5
  722. package/src/tools/verify/authoring.ts +3 -6
  723. package/src/tools/verify/frontend.ts +1 -1
  724. package/src/tools/verify/surface.ts +6 -12
  725. package/src/tools/web-fetch-surface.ts +1 -3
  726. package/src/tools/web-fetch.ts +1 -1
  727. package/src/worker/entry.ts +4 -3
  728. package/src/worker/protocol.ts +16 -14
  729. package/src/worker/spec-contract.ts +2 -2
  730. package/src/worker/stdin-demux.ts +2 -2
  731. package/dist/chunk-36EJLSQQ.js +0 -814
  732. package/dist/chunk-GXNLGKAB.js +0 -571
  733. package/dist/chunk-K7VKOLQQ.js +0 -15
  734. package/dist/chunk-PMZCIOCJ.js +0 -25
  735. package/dist/chunk-SUCTJL45.js +0 -45
  736. package/dist/chunk-SUW5DORT.js +0 -819
  737. package/dist/chunk-TZ3SGWZZ.js +0 -48
  738. package/dist/chunk-UOV2BYIW.js +0 -107
  739. package/dist/chunk-VFA6GDY5.js +0 -1625
  740. package/dist/doctor-QOA5FNY5.js +0 -313
  741. package/dist/fleet-view-ZCON35AG.js +0 -102
  742. package/dist/panes-HMABYVO4.js +0 -58
  743. package/docs/artifact-versions.md +0 -67
  744. package/docs/documentation-coverage.md +0 -46
  745. package/docs/documentation-guide.md +0 -167
  746. package/docs/release-cut-checklist.md +0 -193
  747. package/docs/time-conventions.md +0 -101
  748. package/skills/meta/clio-test/SKILL.md +0 -133
  749. package/skills/meta/clio-test/references/harness.md +0 -126
  750. package/skills/meta/clio-test/references/test-map.md +0 -69
  751. package/src/engine/apis/degraded-inference.ts +0 -95
@@ -11,15 +11,55 @@ export interface CommandFlagSpec {
11
11
  values?: ReadonlyArray<string>;
12
12
  /** Usage placeholder, e.g. "profile" renders as `[--agent-profile <profile>]`. */
13
13
  valueName?: string;
14
+ /** Runtime completion source attached by name; providers are wired separately. */
15
+ completionSlot?: CompletionSlotName;
14
16
  }
15
17
 
16
18
  export interface CommandPositionalSpec {
17
19
  name: string; // e.g. "agent", "task"
18
20
  required: boolean;
21
+ /** Closed values in semantic/manifest order. */
22
+ values?: ReadonlyArray<string>;
19
23
  /** Greedy tail: consumes the rest of the line verbatim (task text, compact instructions). */
20
24
  rest?: boolean;
25
+ /** Runtime completion source attached by name; providers are wired separately. */
26
+ completionSlot?: CompletionSlotName;
21
27
  }
22
28
 
29
+ /**
30
+ * Stable grammar/provider seam. Slice 10 names every dynamic noun; slice 11
31
+ * supplies read-only implementations for these slots.
32
+ */
33
+ export const COMPLETION_SLOT_NAMES = [
34
+ "agents",
35
+ "agent-profiles",
36
+ "worker-runtimes",
37
+ "targets",
38
+ "models",
39
+ "capabilities",
40
+ "external-agents",
41
+ "rosters",
42
+ "shareable-runs",
43
+ "skills",
44
+ "fleet-contracts",
45
+ "fleet-vars",
46
+ "fleet-var-values",
47
+ "tasks",
48
+ "context-refs",
49
+ "receipts",
50
+ "pane-runs-agents",
51
+ "pane-presets",
52
+ "pane-targets",
53
+ "library-tabs",
54
+ "thinking-levels",
55
+ "settings-areas",
56
+ "settings-groups",
57
+ "help-queries",
58
+ "paths",
59
+ ] as const;
60
+
61
+ export type CompletionSlotName = (typeof COMPLETION_SLOT_NAMES)[number];
62
+
23
63
  export interface CommandArgsSpec {
24
64
  flags?: ReadonlyArray<CommandFlagSpec>;
25
65
  positionals?: ReadonlyArray<CommandPositionalSpec>;
@@ -299,16 +339,86 @@ export function parseArgs(spec: CommandArgsSpec, argsLine: string): ParsedArgs {
299
339
  }
300
340
 
301
341
  export interface ArgCompletion {
302
- /** Replacement for the trailing (possibly empty) token under the cursor. */
342
+ /** Canonical replacement for the token under the cursor. */
303
343
  token: string;
304
344
  /** Grammar hint rendered beside the suggestion, e.g. a flag's value placeholder. */
305
345
  hint?: string;
346
+ completionSlot?: CompletionSlotName;
347
+ description?: string;
348
+ disabledReason?: string;
349
+ /** A completion with another grammatical slot receives a space on Tab. */
350
+ hasNextSlot: boolean;
306
351
  }
307
352
 
308
353
  export interface ArgCompletionResult {
309
354
  completions: ArgCompletion[];
310
- /** Index in the argument text where the token under the cursor begins. */
355
+ /** Half-open replacement range in argumentText. Quotes are outside the range. */
311
356
  tokenStart: number;
357
+ tokenEnd: number;
358
+ quote?: '"' | "'";
359
+ /** Structured second-level list, rather than a flat top-level command row. */
360
+ submenu?: { parent: string; canGoBack: true };
361
+ }
362
+
363
+ interface CompletionToken {
364
+ value: string;
365
+ start: number;
366
+ end: number;
367
+ contentStart: number;
368
+ contentEnd: number;
369
+ quote?: '"' | "'";
370
+ }
371
+
372
+ /** Tokenize without losing source ranges; unterminated quotes intentionally run to EOL. */
373
+ function completionTokens(text: string): CompletionToken[] {
374
+ const tokens: CompletionToken[] = [];
375
+ let index = 0;
376
+ while (index < text.length) {
377
+ while (index < text.length && /\s/.test(text[index] ?? "")) index++;
378
+ if (index >= text.length) break;
379
+ const start = index;
380
+ let quote: '"' | "'" | undefined;
381
+ if (text[index] === '"' || text[index] === "'") {
382
+ quote = text[index] as '"' | "'";
383
+ index++;
384
+ }
385
+ const contentStart = index;
386
+ let value = "";
387
+ while (index < text.length) {
388
+ const char = text[index] ?? "";
389
+ if (quote) {
390
+ if (char === quote) break;
391
+ } else if (/\s/.test(char)) {
392
+ break;
393
+ } else if (char === '"' || char === "'") {
394
+ // Quotes embedded in a token group their contents but are not values.
395
+ const embedded = char;
396
+ index++;
397
+ while (index < text.length && text[index] !== embedded) value += text[index++] ?? "";
398
+ if (text[index] === embedded) index++;
399
+ continue;
400
+ }
401
+ value += char;
402
+ index++;
403
+ }
404
+ const contentEnd = index;
405
+ if (quote && text[index] === quote) index++;
406
+ tokens.push({ value, start, end: index, contentStart, contentEnd, ...(quote ? { quote } : {}) });
407
+ }
408
+ return tokens;
409
+ }
410
+
411
+ function tokenAtCursor(text: string, cursor: number): { current: CompletionToken; completed: CompletionToken[] } {
412
+ const safeCursor = Math.max(0, Math.min(cursor, text.length));
413
+ const tokens = completionTokens(text);
414
+ const containing = tokens.find((token) => safeCursor >= token.start && safeCursor <= token.end);
415
+ if (containing) {
416
+ return { current: containing, completed: tokens.filter((token) => token.end <= containing.start) };
417
+ }
418
+ return {
419
+ current: { value: "", start: safeCursor, end: safeCursor, contentStart: safeCursor, contentEnd: safeCursor },
420
+ completed: tokens.filter((token) => token.end <= safeCursor),
421
+ };
312
422
  }
313
423
 
314
424
  /**
@@ -352,10 +462,14 @@ function walkCompletedTokens(spec: CommandArgsSpec, tokens: ReadonlyArray<string
352
462
 
353
463
  function flagCompletions(spec: CommandArgsSpec, walk: CompletionWalk, current: string): ArgCompletion[] {
354
464
  const available = (spec.flags ?? []).filter((flag) => flag.repeatable === true || !walk.usedFlags.has(flag.name));
355
- const rows = available.filter((flag) => flag.name.startsWith(current)).map((flag) => ({ flag, name: flag.name }));
465
+ const lower = current.toLowerCase();
466
+ const rows = available
467
+ .filter((flag) => flag.name.toLowerCase().startsWith(lower))
468
+ .map((flag) => ({ flag, name: flag.name }));
356
469
  return rows.map(({ flag, name }) => ({
357
470
  token: name,
358
471
  ...(flag.takesValue ? { hint: `<${getFlagValuePlaceholder(flag)}>` } : {}),
472
+ hasNextSlot: flag.takesValue === true,
359
473
  }));
360
474
  }
361
475
 
@@ -367,27 +481,38 @@ function flagCompletions(spec: CommandArgsSpec, walk: CompletionWalk, current: s
367
481
  * null closes the suggestion list. The walk mirrors parseArgs so a completion
368
482
  * is always a token the parser would accept.
369
483
  */
370
- export function completeArgs(spec: CommandArgsSpec, argumentText: string): ArgCompletionResult | null {
371
- const trailing = argumentText.match(/\S*$/)?.[0] ?? "";
372
- const tokenStart = argumentText.length - trailing.length;
373
- const current = trailing;
374
- const completed = argumentText
375
- .slice(0, tokenStart)
376
- .split(/\s+/)
377
- .filter((token) => token.length > 0);
484
+ export function completeArgs(
485
+ spec: CommandArgsSpec,
486
+ argumentText: string,
487
+ cursor = argumentText.length,
488
+ ): ArgCompletionResult | null {
489
+ const { current: currentToken, completed: completedTokens } = tokenAtCursor(argumentText, cursor);
490
+ const current = currentToken.value.slice(0, Math.max(0, cursor - currentToken.contentStart));
491
+ const completed = completedTokens.map((token) => token.value);
492
+ const range = {
493
+ tokenStart: currentToken.contentStart,
494
+ tokenEnd: currentToken.contentEnd,
495
+ ...(currentToken.quote ? { quote: currentToken.quote } : {}),
496
+ };
378
497
 
379
498
  const completions: ArgCompletion[] = [];
380
499
  let active = spec;
381
500
  let walkTokens = completed;
501
+ let submenu: ArgCompletionResult["submenu"];
382
502
 
383
503
  if (spec.subcommands) {
384
504
  const first = completed[0];
385
505
  if (first === undefined) {
386
506
  for (const [name, subSpec] of Object.entries(spec.subcommands)) {
387
- if (!name.startsWith(current)) continue;
507
+ if (!name.toLowerCase().startsWith(current.toLowerCase())) continue;
388
508
  const hint = renderArgsSpec(subSpec);
389
- completions.push({ token: name, ...(hint.length > 0 ? { hint } : {}) });
509
+ completions.push({
510
+ token: name,
511
+ ...(hint.length > 0 ? { hint } : {}),
512
+ hasNextSlot: hint.length > 0,
513
+ });
390
514
  }
515
+ submenu = { parent: "", canGoBack: true };
391
516
  } else if (spec.subcommands[first]) {
392
517
  active = spec.subcommands[first];
393
518
  walkTokens = completed.slice(1);
@@ -397,25 +522,43 @@ export function completeArgs(spec: CommandArgsSpec, argumentText: string): ArgCo
397
522
  const walk = walkCompletedTokens(active, walkTokens);
398
523
 
399
524
  if (walk.restBegun) {
400
- return completions.length > 0 ? { completions, tokenStart } : null;
525
+ return completions.length > 0 ? { completions, ...range, ...(submenu ? { submenu } : {}) } : null;
401
526
  }
402
527
 
403
528
  if (walk.awaitingValue) {
404
529
  for (const value of walk.awaitingValue.values ?? []) {
405
- if (value.startsWith(current)) completions.push({ token: value });
530
+ if (value.toLowerCase().startsWith(current.toLowerCase())) completions.push({ token: value, hasNextSlot: true });
406
531
  }
407
- return completions.length > 0 ? { completions, tokenStart } : null;
532
+ if (walk.awaitingValue.completionSlot) {
533
+ completions.push({ token: current, completionSlot: walk.awaitingValue.completionSlot, hasNextSlot: true });
534
+ }
535
+ return completions.length > 0 ? { completions, ...range, ...(submenu ? { submenu } : {}) } : null;
408
536
  }
409
537
 
410
538
  const atRest = (active.positionals ?? [])[walk.positionalIndex]?.rest === true;
539
+ const positional = (active.positionals ?? [])[walk.positionalIndex];
540
+ for (const value of positional?.values ?? []) {
541
+ if (value.toLowerCase().startsWith(current.toLowerCase())) {
542
+ completions.push({ token: value, hasNextSlot: walk.positionalIndex + 1 < (active.positionals?.length ?? 0) });
543
+ }
544
+ }
545
+ if (positional?.completionSlot && !current.startsWith("-")) {
546
+ completions.push({
547
+ token: current,
548
+ completionSlot: positional.completionSlot,
549
+ hasNextSlot: walk.positionalIndex + 1 < (active.positionals?.length ?? 0),
550
+ });
551
+ }
411
552
  const flagsParseable = !atRest || active.parseFlagsBeforeRest === true;
412
553
  if (flagsParseable && (current.length === 0 || current.startsWith("-"))) {
413
554
  completions.push(...flagCompletions(active, walk, current));
414
555
  }
415
556
 
416
- return completions.length > 0 ? { completions, tokenStart } : null;
557
+ return completions.length > 0 ? { completions, ...range, ...(submenu ? { submenu } : {}) } : null;
417
558
  }
418
559
 
560
+ export type CompletionAcceptance = "accept" | "accept-remainder" | "submit" | "close" | "none" | "disabled";
561
+
419
562
  export function matchFromSpec(
420
563
  entry: {
421
564
  name: string;
@@ -92,8 +92,8 @@ export function createStatusController(deps: StatusControllerDeps): StatusContro
92
92
  const currentTarget = (): { targetId: string; modelId: string } => {
93
93
  const settings = deps.getSettings?.();
94
94
  return {
95
- targetId: settings?.orchestrator?.target ?? "",
96
- modelId: settings?.orchestrator?.model ?? "",
95
+ targetId: settings?.chat?.target ?? "",
96
+ modelId: settings?.chat?.model ?? "",
97
97
  };
98
98
  };
99
99
 
@@ -1,28 +1,6 @@
1
- import type { SmoothStreaming } from "../core/defaults.js";
2
-
3
- export const SMOOTH_STREAM_ENV = "CLIO_CODER_SMOOTH_STREAM";
4
-
5
- /**
6
- * One-process override precedence: a valid environment value wins, while an
7
- * invalid value can never accidentally enable animation. `0` is the immediate
8
- * escape hatch; `1` is accepted as the explicit `on` spelling.
9
- */
10
- export function resolveSmoothStreamingMode(
11
- configured: SmoothStreaming,
12
- env: NodeJS.ProcessEnv = process.env,
13
- ): SmoothStreaming {
14
- const raw = env[SMOOTH_STREAM_ENV]?.trim().toLowerCase();
15
- if (!raw) return configured;
16
- if (raw === "0" || raw === "off" || raw === "false") return "off";
17
- if (raw === "auto") return "auto";
18
- if (raw === "1" || raw === "on" || raw === "true") return "on";
19
- return "off";
20
- }
21
-
22
1
  export interface AutoPacingEnvironment {
23
2
  isTTY: boolean;
24
3
  term?: string;
25
- termProgram?: string;
26
4
  sshConnection?: string;
27
5
  sshTty?: string;
28
6
  tmux?: string;
@@ -39,7 +17,7 @@ export interface AutoPacingEnvironment {
39
17
  * accessibility markers always bypass pacing. Remote/multiplexed and already
40
18
  * saturated outputs keep the proven coalescer behavior.
41
19
  */
42
- export function autoPacingAllowed(environment: AutoPacingEnvironment): boolean {
20
+ function autoPacingAllowed(environment: AutoPacingEnvironment): boolean {
43
21
  if (!environment.isTTY || environment.backpressureObserved) return false;
44
22
  const term = environment.term?.trim().toLowerCase();
45
23
  if (!term || term === "dumb" || term === "unknown") return false;
@@ -53,7 +31,6 @@ export function processAutoPacingAllowed(backpressureObserved: boolean, env: Nod
53
31
  return autoPacingAllowed({
54
32
  isTTY: process.stdout.isTTY === true,
55
33
  ...(env.TERM === undefined ? {} : { term: env.TERM }),
56
- ...(env.TERM_PROGRAM === undefined ? {} : { termProgram: env.TERM_PROGRAM }),
57
34
  ...(env.SSH_CONNECTION === undefined ? {} : { sshConnection: env.SSH_CONNECTION }),
58
35
  ...(env.SSH_TTY === undefined ? {} : { sshTty: env.SSH_TTY }),
59
36
  ...(env.TMUX === undefined ? {} : { tmux: env.TMUX }),
@@ -14,6 +14,7 @@ import {
14
14
  type OverlayHandle,
15
15
  type TUI,
16
16
  truncateToWidth,
17
+ visibleWidth,
17
18
  wrapTextWithAnsi,
18
19
  } from "../engine/tui.js";
19
20
  import { buildHint, showClioOverlayFrame } from "./overlay-frame.js";
@@ -92,23 +93,31 @@ function taskRow(task: TaskBoardTask, width: number, selected?: boolean): string
92
93
  );
93
94
  }
94
95
 
95
- function taskReceiptRow(task: TaskBoardTask, width: number): string | null {
96
+ function wrapTaskProse(prefix: string, prose: string, width: number): string[] {
97
+ const prefixWidth = visibleWidth(prefix);
98
+ const proseWidth = Math.max(1, width - prefixWidth);
99
+ return wrapTextWithAnsi(prose, proseWidth).map((line, index) =>
100
+ fitContentLine(`${index === 0 ? prefix : " ".repeat(prefixWidth)}${line}`, width),
101
+ );
102
+ }
103
+
104
+ function taskReceiptRows(task: TaskBoardTask, width: number): string[] {
96
105
  const theme = clioTheme();
97
106
  if (task.status === "completed" && task.evidence) {
98
107
  // The evidence prose already carries any run id it mentions, so no derived
99
108
  // `evidence:<runId>` suffix is appended; it would repeat that id on one line.
100
- return fitContentLine(` ${dim("evidence")} ${muted(task.evidence)}`, width);
109
+ return wrapTaskProse(` ${dim("evidence")} `, muted(task.evidence), width);
101
110
  }
102
111
  if (task.status === "blocked" && task.reason) {
103
- return fitContentLine(` ${dim("blocked")} ${theme.fg("warning", task.reason)}`, width);
112
+ return wrapTaskProse(` ${dim("blocked")} `, theme.fg("warning", task.reason), width);
104
113
  }
105
114
  if (task.status === "cancelled" && task.reason) {
106
- return fitContentLine(` ${dim("dropped")} ${muted(task.reason)}`, width);
115
+ return wrapTaskProse(` ${dim("dropped")} `, muted(task.reason), width);
107
116
  }
108
- return null;
117
+ return [];
109
118
  }
110
119
 
111
- export function formatTasksOverlayBodyLines(
120
+ function formatTasksOverlayBodyLines(
112
121
  board: TaskBoardSnapshot | null,
113
122
  contentWidth = DEFAULT_CONTENT_WIDTH,
114
123
  selectedTaskId?: string | null,
@@ -151,8 +160,7 @@ export function formatTasksOverlayBodyLines(
151
160
  }
152
161
  for (const task of board.tasks) {
153
162
  lines.push(taskRow(task, width, selectedTaskId === undefined ? undefined : selectedTaskId === task.id));
154
- const receipt = taskReceiptRow(task, width);
155
- if (receipt) lines.push(receipt);
163
+ lines.push(...taskReceiptRows(task, width));
156
164
  }
157
165
  return lines;
158
166
  }
@@ -235,7 +243,7 @@ const USER_TASK_PRESENTATION: Record<UserTask["status"], { glyph: string; token:
235
243
  };
236
244
 
237
245
  /** Pure composite renderer; callers provide already-captured history/artifact/user snapshots. */
238
- export function formatCompositeTasksOverlayBodyLines(
246
+ function formatCompositeTasksOverlayBodyLines(
239
247
  state: CompositeTasksOverlayState,
240
248
  contentWidth = DEFAULT_CONTENT_WIDTH,
241
249
  ): string[] {
@@ -259,8 +267,7 @@ export function formatCompositeTasksOverlayBodyLines(
259
267
  width,
260
268
  ),
261
269
  );
262
- const receipt = taskReceiptRow(row.task, width);
263
- if (receipt) lines.push(receipt);
270
+ lines.push(...taskReceiptRows(row.task, width));
264
271
  }
265
272
 
266
273
  lines.push("", sectionHeading("Artifacts", width));
@@ -288,7 +295,7 @@ export function formatCompositeTasksOverlayBodyLines(
288
295
  width,
289
296
  ),
290
297
  );
291
- if (task.note) lines.push(fitContentLine(` ${dim("note")} ${muted(task.note)}`, width));
298
+ if (task.note) lines.push(...wrapTaskProse(` ${dim("note")} `, muted(task.note), width));
292
299
  }
293
300
  return lines;
294
301
  }
@@ -342,7 +349,7 @@ class TasksOverlayBody implements Component {
342
349
  body.push("", fitContentLine(clioTheme().fg("accent", "New operator task"), width));
343
350
  body.push(...this.addInput.render(Math.max(1, width)).map((line) => fitContentLine(line, width)));
344
351
  }
345
- if (this.status) body.push("", fitContentLine(clioTheme().fg("warning", this.status), width));
352
+ if (this.status) body.push("", ...wrapTextWithAnsi(clioTheme().fg("warning", this.status), Math.max(1, width)));
346
353
  return body;
347
354
  }
348
355
 
@@ -127,7 +127,7 @@ class BootSubmissionPanel implements Component {
127
127
  }
128
128
 
129
129
  function stageZeroRoot(
130
- mode: Readonly<ClioSettings>["terminal"]["tuiMode"],
130
+ mode: Readonly<ClioSettings>["interface"]["mode"],
131
131
  editor: ClioEditor,
132
132
  pending: Component,
133
133
  shutdownArmed: () => boolean,
@@ -179,9 +179,8 @@ export function createProcessTerminalLease(options: CreateProcessTerminalLeaseOp
179
179
  const keybindings = createKeybindingManager(settings);
180
180
  let editorChrome: EditorChrome = {
181
181
  getModelLabel: () =>
182
- [settings.orchestrator.target, settings.orchestrator.model].filter((part) => part && part.length > 0).join("·") ||
183
- "starting",
184
- getThinkingLabel: () => settings.orchestrator.thinkingLevel ?? "off",
182
+ [settings.chat.target, settings.chat.model].filter((part) => part && part.length > 0).join("·") || "starting",
183
+ getThinkingLabel: () => settings.chat.thinkingLevel ?? "off",
185
184
  getSubmitKeyLabel: () => keybindings.getKeys("tui.input.submit")[0] ?? "Enter",
186
185
  getNewlineKeyLabel: () => keybindings.getKeys("tui.input.newLine")[0] ?? "Shift+Enter",
187
186
  };
@@ -199,7 +198,7 @@ export function createProcessTerminalLease(options: CreateProcessTerminalLeaseOp
199
198
  const shell =
200
199
  options.testing?.shell ??
201
200
  createProcessInteractiveShell({
202
- tuiMode: settings.terminal.tuiMode,
201
+ tuiMode: settings.interface.mode,
203
202
  ...(options.onStage0Commit ? { onFirstFrameCommit: options.onStage0Commit } : {}),
204
203
  });
205
204
  const tui = shell.tui as TUI;
@@ -207,7 +206,7 @@ export function createProcessTerminalLease(options: CreateProcessTerminalLeaseOp
207
206
  editor.focused = true;
208
207
  const pendingPanel = new BootSubmissionPanel();
209
208
  let shutdownArmed = false;
210
- const stage0 = stageZeroRoot(settings.terminal.tuiMode, editor, pendingPanel, () => shutdownArmed);
209
+ const stage0 = stageZeroRoot(settings.interface.mode, editor, pendingPanel, () => shutdownArmed);
211
210
  const host = new RootHost(stage0);
212
211
 
213
212
  let state: TerminalLeaseState = "created";
@@ -288,7 +287,7 @@ export function createProcessTerminalLease(options: CreateProcessTerminalLeaseOp
288
287
  handleStage0CtrlC();
289
288
  return { consume: true };
290
289
  }
291
- if (keybindings.matches(data, "clio.exit") && editor.getText().length === 0) {
290
+ if (keybindings.matches(data, "clio-coder.exit") && editor.getText().length === 0) {
292
291
  requestShutdown();
293
292
  return { consume: true };
294
293
  }
@@ -81,7 +81,7 @@ import {
81
81
  type SessionPromptCompileRecord,
82
82
  } from "../domains/session/prompt-manifest.js";
83
83
  import type { AgentMessage, Usage } from "../engine/types.js";
84
- import type { ToolRegistry } from "../tools/registry.js";
84
+ import { resolveToolPromptHint, type ToolRegistry } from "../tools/registry.js";
85
85
  import {
86
86
  backendCacheVerdict,
87
87
  extractUserText,
@@ -90,6 +90,7 @@ import {
90
90
  toolNamesFromAgentState,
91
91
  } from "./chat-loop-messages.js";
92
92
  import { buildModelReplayAgentMessagesFromTurns } from "./model-session-replay.js";
93
+ import { attachedToolSchemasFromState, mainPromptCacheIdentity } from "./prompt-cache-identity.js";
93
94
  import { renderCompactionSummaryLine, renderEvictionSkipLine } from "./renderers/compaction-summary.js";
94
95
  import type { TurnMiddleware } from "./turn-middleware.js";
95
96
  import type { AgentRuntime, ChatTurnState } from "./turn-state.js";
@@ -270,8 +271,8 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
270
271
  // before the operator did.
271
272
  let lastPrewarm: PrewarmStats | null = null;
272
273
  // The session system prompt, compiled once per session. Recompiles happen
273
- // only on explicit events: the compile key (target, model, safety level,
274
- // session id) changes, or a config hot-reload invalidates the cache. A
274
+ // only when the canonical identity of every live compile input changes, or
275
+ // a config hot-reload invalidates compiler-owned inputs. A
275
276
  // recompile that changes the prompt text appends a "promptRecompiled"
276
277
  // ledger entry so a cold provider cache is always explainable.
277
278
  let sessionPrompt: CompiledSessionPrompt | null = null;
@@ -488,13 +489,13 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
488
489
 
489
490
  const resolveWindowWithoutRuntime = (): ContextWindowDetails | null => {
490
491
  const settings = deps.getSettings();
491
- const targetId = settings.orchestrator?.target?.trim();
492
- const wireModelId = settings.orchestrator?.model?.trim();
492
+ const targetId = settings.chat?.target?.trim();
493
+ const wireModelId = settings.chat?.model?.trim();
493
494
  if (!targetId || !wireModelId) return null;
494
495
  const resolved = resolveRuntimeTarget(deps.providers, {
495
496
  targetId,
496
497
  wireModelId,
497
- requestedThinkingLevel: settings.orchestrator?.thinkingLevel ?? "off",
498
+ requestedThinkingLevel: settings.chat?.thinkingLevel ?? "off",
498
499
  use: "orchestrator",
499
500
  requireTools: false,
500
501
  requireOutputBudget: true,
@@ -679,7 +680,7 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
679
680
  const activeAutoTurnId = force ? null : state.activeUserTurnId;
680
681
  if (activeAutoTurnId && emptyAutoCompactTurnId === activeAutoTurnId) return false;
681
682
  const settings = deps.getSettings();
682
- const cfg = settings.compaction;
683
+ const cfg = settings.context.compaction;
683
684
  const autoEnabled = cfg?.auto !== false;
684
685
  if (!force && !autoEnabled) return false;
685
686
  let preSummaryStageActed = false;
@@ -709,7 +710,7 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
709
710
  if (process.env.CLIO_CODER_LEGACY_MASK === "1") {
710
711
  let masked: ReturnType<typeof maskStaleObservations>;
711
712
  try {
712
- masked = maskStaleObservations(deps.readSessionEntries() ?? [], cfg?.excludeLastTurns ?? 6);
713
+ masked = maskStaleObservations(deps.readSessionEntries() ?? [], 6);
713
714
  } catch (error) {
714
715
  middleware.fireCompactionHook("mask_observations", trigger, estimate.tokens);
715
716
  deps.bus?.emit(BusChannels.CompactionBegin, { trigger, at: Date.now() });
@@ -1021,8 +1022,8 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
1021
1022
 
1022
1023
  /**
1023
1024
  * Ensure the session system prompt is compiled and applied to the live
1024
- * agent. Compiles only when the compile key (target, model, safety
1025
- * level, session id) changes or a config hot-reload invalidated the
1025
+ * agent. Compiles only when the canonical live-input identity changes
1026
+ * or a config hot-reload invalidated compiler-owned inputs in the
1026
1027
  * cache; every other submit reuses the cached prompt byte-for-byte. A
1027
1028
  * compile whose text differs from the previous prompt queues a
1028
1029
  * "promptRecompiled" ledger entry (written once the session exists).
@@ -1030,16 +1031,11 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
1030
1031
  async ensureSessionPrompt(agentRuntime: AgentRuntime): Promise<CompiledSessionPrompt | null> {
1031
1032
  if (!deps.prompts) return null;
1032
1033
  const settings = deps.getSettings();
1033
- const autonomy = settings.autonomy ?? "auto-edit";
1034
+ const autonomy = settings.safety.autonomy ?? "auto-edit";
1034
1035
  const sessionId = deps.session?.current()?.id ?? "";
1035
- const workingContextKey = [...sessionWorkingContextPaths].sort().join("\0");
1036
- const key = `${agentRuntime.targetId}|${agentRuntime.wireModelId}|${autonomy}|${sessionId}|${workingContextKey}`;
1037
- if (sessionPrompt && sessionPromptKey === key) {
1038
- lastSystemPromptReused = true;
1039
- return sessionPrompt;
1040
- }
1036
+ const cwd = process.cwd();
1041
1037
  const modelState = agentRuntime.agent.state.model as
1042
- | (typeof agentRuntime.agent.state.model & { clio?: { quirks?: LocalModelQuirks } })
1038
+ | (typeof agentRuntime.agent.state.model & { clioCoder?: { quirks?: LocalModelQuirks } })
1043
1039
  | undefined;
1044
1040
  // `Context window: N` is the window the backend will actually serve
1045
1041
  // this session, taken from the resolution the turn already ran rather
@@ -1057,13 +1053,14 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
1057
1053
  const contextWindow = typeof resolvedWindow === "number" && resolvedWindow > 0 ? resolvedWindow : null;
1058
1054
  const contextWindowSource: ContextWindowSource | null =
1059
1055
  contextWindow === null ? null : windowDetails.contextWindowSource;
1060
- const guidance = modelState?.clio?.quirks?.thinking?.guidance;
1056
+ const guidance = modelState?.clioCoder?.quirks?.thinking?.guidance;
1061
1057
  // Per-tool prompt hints come from registry metadata, derived once from
1062
1058
  // the frozen surface per compile. The compiler renders them sorted by
1063
1059
  // tool name, so the compiled text stays byte-stable for a given surface.
1064
1060
  const toolNames = toolNamesFromAgentState(agentRuntime.agent.state.tools);
1061
+ const attachedToolSchemas = attachedToolSchemasFromState(agentRuntime.agent.state.tools);
1065
1062
  const toolPromptHints = toolNames.flatMap((name) => {
1066
- const hint = deps.toolRegistry?.get(name as ToolName)?.metadata?.promptHint;
1063
+ const hint = resolveToolPromptHint(deps.toolRegistry?.get(name as ToolName)?.metadata?.promptHint, "session");
1067
1064
  return hint ? [{ tool: name, hint }] : [];
1068
1065
  });
1069
1066
  const sessionInputs: SessionPromptInputs = {
@@ -1085,11 +1082,29 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
1085
1082
  );
1086
1083
  }
1087
1084
  }
1085
+ const key = mainPromptCacheIdentity({
1086
+ targetId: agentRuntime.targetId,
1087
+ runtimeId: agentRuntime.runtimeId,
1088
+ wireModelId: agentRuntime.wireModelId,
1089
+ autonomy,
1090
+ sessionId,
1091
+ cwd,
1092
+ workingContextPaths: [...sessionWorkingContextPaths],
1093
+ contextWindowSource,
1094
+ promptInputEpoch: deps.prompts.inputEpoch(),
1095
+ sessionInputs,
1096
+ attachedToolSchemas,
1097
+ });
1098
+ if (sessionPrompt && sessionPromptKey === key) {
1099
+ lastSystemPromptReused = true;
1100
+ return sessionPrompt;
1101
+ }
1088
1102
  try {
1089
1103
  const result = await deps.prompts.compileSessionPrompt({
1104
+ sessionId,
1090
1105
  sessionInputs,
1091
1106
  autonomy,
1092
- cwd: process.cwd(),
1107
+ cwd,
1093
1108
  workingContextPaths: [...sessionWorkingContextPaths],
1094
1109
  });
1095
1110
  const previousHash = sessionPromptHash ?? lastRecordedPromptHash();
@@ -1175,7 +1190,7 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
1175
1190
  if (before.contextWindow <= 0 || before.tokens <= 0) return undefined;
1176
1191
 
1177
1192
  const settings = deps.getSettings();
1178
- const threshold = settings.compaction?.threshold ?? DEFAULT_COMPACTION_THRESHOLD;
1193
+ const threshold = settings.context.compaction?.threshold ?? DEFAULT_COMPACTION_THRESHOLD;
1179
1194
  const verdict = shouldCompact(before.tokens, threshold, before.contextWindow);
1180
1195
  let compacted = false;
1181
1196
  if (verdict.shouldCompact) {
@@ -1218,8 +1233,8 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
1218
1233
 
1219
1234
  contextLedger(): ContextLedger {
1220
1235
  const settings = deps.getSettings();
1221
- const compactionThreshold = settings.compaction?.threshold ?? null;
1222
- const compactionAuto = settings.compaction?.auto !== false;
1236
+ const compactionThreshold = settings.context.compaction?.threshold ?? null;
1237
+ const compactionAuto = settings.context.compaction?.auto !== false;
1223
1238
  // Without a runtime (before the first turn of this process, /resume
1224
1239
  // included) the window comes from the live resolution or the resumed
1225
1240
  // snapshot, and the token facts from the snapshot: the resumed
@@ -1231,8 +1246,8 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
1231
1246
  contextWindowSlots: state.runtime.runtimeResolution.contextWindowDetails.contextWindowSlots,
1232
1247
  }
1233
1248
  : windowWithoutRuntime();
1234
- const provider = state.runtime?.targetId ?? settings.orchestrator?.target ?? null;
1235
- const model = state.runtime?.wireModelId ?? settings.orchestrator?.model ?? null;
1249
+ const provider = state.runtime?.targetId ?? settings.chat?.target ?? null;
1250
+ const model = state.runtime?.wireModelId ?? settings.chat?.model ?? null;
1236
1251
  const liveToolCount = state.runtime?.agent.state.tools.length ?? 0;
1237
1252
 
1238
1253
  if (!currentContextSnapshot) {
@@ -296,8 +296,8 @@ export function createTurnPersistence(deps: TurnPersistenceDeps): TurnPersistenc
296
296
  if (!deps.session.current()) {
297
297
  const settings = deps.getSettings();
298
298
  const input: { cwd: string; target?: string; model?: string } = { cwd: process.cwd() };
299
- if (settings.orchestrator.target) input.target = settings.orchestrator.target;
300
- if (settings.orchestrator.model) input.model = settings.orchestrator.model;
299
+ if (settings.chat.target) input.target = settings.chat.target;
300
+ if (settings.chat.model) input.model = settings.chat.model;
301
301
  deps.session.create(input);
302
302
  }
303
303
  const userTurn = appendTurn(deps.session, {
@@ -151,7 +151,7 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
151
151
  const dispatchActive = (): boolean => dispatchesInFlight > 0 || deps.hasActiveDispatch();
152
152
 
153
153
  const admissionRefusal = (): PrewarmSkipReason | null => {
154
- if (deps.getSettings().prewarm?.enabled === false) return "disabled";
154
+ if (deps.getSettings().chat.prewarm === false) return "disabled";
155
155
  if (!deps.isLatencySurface()) return "surface";
156
156
  if (deps.state.streaming || deps.isTurnActive()) return "turn-active";
157
157
  // Fleet interaction. Without per-endpoint slot accounting a pre-warm cannot
@@ -165,7 +165,7 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
165
165
  // resolved runtime is checked again below, but asking here means a target
166
166
  // that was never eligible costs no capability probe, no agent, and no
167
167
  // notice from either.
168
- const targetId = deps.getSettings().orchestrator?.target?.trim();
168
+ const targetId = deps.getSettings().chat?.target?.trim();
169
169
  const runtimeId = targetId ? deps.providers.getTarget(targetId)?.runtime : undefined;
170
170
  if (runtimeId === undefined || deps.providers.getRuntime(runtimeId)?.tier !== "local-native") return "tier";
171
171
  return null;