@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
@@ -37,7 +37,7 @@ export interface OpenSideQuestionOverlayOptions {
37
37
  const SIDE_QUESTION_OVERLAY_MIN_WIDTH = 44;
38
38
  const SIDE_QUESTION_OVERLAY_MAX_WIDTH = 100;
39
39
 
40
- export function sideQuestionOverlayWidth(columns: number): number {
40
+ function sideQuestionOverlayWidth(columns: number): number {
41
41
  return Math.max(SIDE_QUESTION_OVERLAY_MIN_WIDTH, Math.min(SIDE_QUESTION_OVERLAY_MAX_WIDTH, columns - 4));
42
42
  }
43
43
 
@@ -46,7 +46,7 @@ export function sideQuestionOverlayWidth(columns: number): number {
46
46
  * the question in dim above a rule, then the answer, then one status line that
47
47
  * says whether the round is still running, cancelled, or failed.
48
48
  */
49
- export function formatSideQuestionBody(
49
+ function formatSideQuestionBody(
50
50
  question: string,
51
51
  phase: SideQuestionOverlayPhase,
52
52
  width: number,
@@ -113,7 +113,7 @@ interface LibraryTabContext {
113
113
  * approval preview instead, so this returns null for one and the caller routes
114
114
  * it there.
115
115
  */
116
- export function libraryUseInvocation(entry: Pick<LibraryEntry, "kind" | "name">): string | null {
116
+ function libraryUseInvocation(entry: Pick<LibraryEntry, "kind" | "name">): string | null {
117
117
  if (entry.kind === "fleet") return null;
118
118
  if (entry.kind === "agent") return `/run ${entry.name} `;
119
119
  if (entry.kind === "prompt") return `/${entry.name} `;
@@ -148,7 +148,7 @@ function skillBody(content: string): string {
148
148
  }
149
149
 
150
150
  /** @internal exported for contract tests */
151
- export function buildInstalledItems(list: ResourceList<Skill>): ListOverlayItem[] {
151
+ function buildInstalledItems(list: ResourceList<Skill>): ListOverlayItem[] {
152
152
  return list.items.map((skill) => {
153
153
  const theme = clioTheme();
154
154
  const flagged = list.diagnostics.some((diag) => diagnosticTouchesSkill(diag.path, skill));
@@ -182,7 +182,7 @@ export function buildInstalledItems(list: ResourceList<Skill>): ListOverlayItem[
182
182
  }
183
183
 
184
184
  /** @internal exported for contract tests */
185
- export function buildMarketplaceItems(
185
+ function buildMarketplaceItems(
186
186
  skills: ReadonlyArray<MarketplaceSkill>,
187
187
  installed: ReadonlySet<string>,
188
188
  ): ListOverlayItem[] {
@@ -215,7 +215,7 @@ export function buildMarketplaceItems(
215
215
  }
216
216
 
217
217
  /** @internal exported for contract tests */
218
- export function buildDiagnosticItems(
218
+ function buildDiagnosticItems(
219
219
  list: ResourceList<Skill>,
220
220
  marketplaceDiagnostics: ReadonlyArray<string> = [],
221
221
  ): ListOverlayItem[] {
@@ -252,7 +252,7 @@ export function buildDiagnosticItems(
252
252
  }
253
253
 
254
254
  /** @internal exported for contract tests */
255
- export function libraryRowId(entry: Pick<LibraryEntry, "kind" | "name">): string {
255
+ function libraryRowId(entry: Pick<LibraryEntry, "kind" | "name">): string {
256
256
  return `${LIBRARY_ROW_PREFIX}${libraryEntryRef(entry)}`;
257
257
  }
258
258
 
@@ -267,7 +267,7 @@ export function libraryRowId(entry: Pick<LibraryEntry, "kind" | "name">): string
267
267
  *
268
268
  * @internal exported for contract tests
269
269
  */
270
- export function buildLibraryItems(kind: LibraryEntryKind, context: LibraryTabContext): ListOverlayItem[] {
270
+ function buildLibraryItems(kind: LibraryEntryKind, context: LibraryTabContext): ListOverlayItem[] {
271
271
  const theme = clioTheme();
272
272
  return context.discovery.entries
273
273
  .filter((entry) => entry.kind === kind)
@@ -318,7 +318,7 @@ export function buildLibraryItems(kind: LibraryEntryKind, context: LibraryTabCon
318
318
  *
319
319
  * @internal exported for contract tests
320
320
  */
321
- export function buildLibraryDiagnosticItems(discovery: LibraryDiscoveryResult): ListOverlayItem[] {
321
+ function buildLibraryDiagnosticItems(discovery: LibraryDiscoveryResult): ListOverlayItem[] {
322
322
  const theme = clioTheme();
323
323
  return discovery.diagnostics
324
324
  .filter((message) => message !== MARKETPLACE_UNCONFIGURED)
@@ -360,7 +360,7 @@ export interface LibraryInstallRunner {
360
360
  *
361
361
  * @internal exported for contract tests
362
362
  */
363
- export async function runLibraryInstall(
363
+ async function runLibraryInstall(
364
364
  entry: LibraryEntry,
365
365
  runner: LibraryInstallRunner,
366
366
  options: { withRequirements: boolean },
@@ -100,7 +100,7 @@ function fallbackPreview(node: TreeSnapshotNode): string {
100
100
  * of turns and the discarded branch had no route back. Returns null for a
101
101
  * session that was not forked.
102
102
  */
103
- export function forkParentLine(snapshot: TreeSnapshot, theme: ClioTheme): string | null {
103
+ function forkParentLine(snapshot: TreeSnapshot, theme: ClioTheme): string | null {
104
104
  const parentSessionId = snapshot.meta.parentSessionId;
105
105
  if (typeof parentSessionId !== "string" || parentSessionId.length === 0) return null;
106
106
  const parentTurnId = snapshot.meta.parentTurnId;
@@ -155,7 +155,7 @@ function flattenTreeSnapshot(snapshot: TreeSnapshot): TreeRow[] {
155
155
  const ROW_PREVIEW_BUDGET = 55;
156
156
 
157
157
  /** @internal */
158
- export function formatTreeRow(row: TreeRow, opts: { showTimestamps: boolean; width: number }): string {
158
+ function formatTreeRow(row: TreeRow, opts: { showTimestamps: boolean; width: number }): string {
159
159
  const theme = clioTheme();
160
160
  const indent = " ".repeat(row.depth);
161
161
  // The active tip is where the next message lands; it gets its own glyph so
@@ -27,6 +27,7 @@ import type { MuxContract, MuxPaneRecord } from "../domains/mux/index.js";
27
27
  import {
28
28
  PANES_PRESETS,
29
29
  type PanesCloseResult,
30
+ type PanesFilesResult,
30
31
  type PanesInventoryEntry,
31
32
  type PanesOpenResult,
32
33
  type PanesOperations,
@@ -35,6 +36,8 @@ import {
35
36
  type PanesWatchController,
36
37
  type PanesYaziController,
37
38
  type PanesYaziStatus,
39
+ type PanesZoomResult,
40
+ resolvePanesPresetId,
38
41
  } from "../domains/mux/operations.js";
39
42
  import { resolveBinary } from "../tools/executables.js";
40
43
  import { type PaneWatchSource, paneWatchDecision } from "./pane-policy.js";
@@ -53,7 +56,28 @@ export interface PanesRuntimeDeps {
53
56
  newestJournalRunId?: () => string | null;
54
57
  }
55
58
 
56
- const UNAVAILABLE = "the pane layer is not available in this session";
59
+ /**
60
+ * Why there is no pane layer, in the operator's terms. Detection already
61
+ * knows (no `HERDR_ENV`, no socket, a refused rung); repeating that reason
62
+ * beside the refusal is what turns "unavailable" into a next step, and the
63
+ * `--with-panes` hint covers the session that never asked for panes.
64
+ */
65
+ function unavailableReason(mux: MuxContract): string {
66
+ const reason = mux.detection().reason;
67
+ return `the pane layer is not available in this session: ${reason}. Start Clio inside a herdr session with \`clio-coder --with-panes\` to get panes`;
68
+ }
69
+
70
+ /** Fuzzy operator addressing shared by `close` and `zoom`: id, label, purpose; newest first. */
71
+ function matchOwnedPane(owned: ReadonlyArray<MuxPaneRecord>, target: string): MuxPaneRecord | null {
72
+ const needle = target.trim().toLowerCase();
73
+ const newestFirst = [...owned].reverse();
74
+ return (
75
+ newestFirst.find((record) => record.ref.paneId.toLowerCase() === needle) ??
76
+ newestFirst.find((record) => record.label.toLowerCase().includes(needle)) ??
77
+ newestFirst.find((record) => record.purpose === needle) ??
78
+ null
79
+ );
80
+ }
57
81
 
58
82
  function inventory(records: ReadonlyArray<MuxPaneRecord>): ReadonlyArray<PanesInventoryEntry> {
59
83
  return records.map((record) => ({
@@ -65,6 +89,27 @@ function inventory(records: ReadonlyArray<MuxPaneRecord>): ReadonlyArray<PanesIn
65
89
  }));
66
90
  }
67
91
 
92
+ /**
93
+ * The sentence `/quit` prints about the panes it did not close, or null when
94
+ * there are none.
95
+ *
96
+ * Policy (#272): docks close with the session and utility panes stay. A dock
97
+ * is a Clio surface (the files pane, the workers watch pane), so it goes the
98
+ * way a native application's windows go. A pane opened with `/panes open
99
+ * shell|logs|<argv>` is a terminal the operator may be typing in, and killing
100
+ * it on quit is the one thing a pane host must never do behind the operator's
101
+ * back. The next session does not adopt it either, so without this line the
102
+ * pane simply sat there with nothing naming it. Computed before the mux
103
+ * domain stops, because shutdown forgets its registry.
104
+ */
105
+ export function describePanesLeftBehind(mux: Pick<MuxContract, "list" | "docks">): string | null {
106
+ const dockIds = new Set(mux.docks().map((dock) => dock.paneId));
107
+ const left = mux.list().filter((record) => !dockIds.has(record.ref.paneId));
108
+ if (left.length === 0) return null;
109
+ const named = left.map((record) => `${record.label} (${record.ref.paneId})`).join(", ");
110
+ return `Clio left ${left.length} ${left.length === 1 ? "pane" : "panes"} open in herdr: ${named}. Utility panes stay when a session ends; the docks closed with it. Next time run \`/panes close all\` before \`/quit\` to take them with you, or close ${left.length === 1 ? "it" : "them"} now with \`herdr pane close <paneId>\`.`;
111
+ }
112
+
68
113
  export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
69
114
  const probe = deps.resolveBinaryPath ?? resolveBinary;
70
115
  const journalRoot = deps.journalRoot ?? runEventJournalRoot;
@@ -130,7 +175,7 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
130
175
  };
131
176
 
132
177
  const show = async (target: string, source: PaneWatchSource): Promise<PanesShowResult> => {
133
- if (!deps.mux.available()) return { status: "unavailable", reason: UNAVAILABLE };
178
+ if (!deps.mux.available()) return { status: "unavailable", reason: unavailableReason(deps.mux) };
134
179
  const match = matchRun(target);
135
180
  if (match === null) {
136
181
  // The candidate list is what turns a miss into a next step: it names
@@ -151,10 +196,62 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
151
196
  return { status: "watching", runId: match.runId, agentId: match.agentId, opened: watched.opened };
152
197
  };
153
198
 
199
+ /**
200
+ * The files pane's open half, shared by `/files`, `/panes open files`, the
201
+ * keybinding, and the model tool. The settings gate and the missing-engine
202
+ * message live here so every door says the same thing.
203
+ */
204
+ const openFiles = async (once: boolean): Promise<Exclude<PanesFilesResult, { status: "closed" }>> => {
205
+ const preset = PANES_PRESETS[0];
206
+ if (!deps.getSettings().interface.panes.files.enabled) {
207
+ return { status: "refused", reason: "the files pane is disabled by interface.panes.files.enabled" };
208
+ }
209
+ if (!yaziController) {
210
+ return { status: "unavailable", reason: "the files pane return path is not ready" };
211
+ }
212
+ const pendingId = beginPendingOpen(preset.id);
213
+ try {
214
+ const result = await yaziController.open(once ? { once: true } : undefined);
215
+ if (result.status === "opened") {
216
+ return { status: "opened", paneId: result.paneId, existing: result.existing };
217
+ }
218
+ if (result.status === "missing-binary") {
219
+ return {
220
+ status: "missing-binary",
221
+ binary: result.binary,
222
+ installHint: preset.installHint,
223
+ // The engine's own resolution sentence, prefixed with the surface it
224
+ // serves: an operator who typed `/files` should not have to know the
225
+ // name of the program to read the answer.
226
+ detail: `the files pane engine is not available: ${result.detail}`,
227
+ };
228
+ }
229
+ return {
230
+ status: result.status === "profile-error" ? "refused" : "unavailable",
231
+ reason: result.reason,
232
+ };
233
+ } finally {
234
+ pendingOpens.delete(pendingId);
235
+ }
236
+ };
237
+
154
238
  return {
239
+ async files(action): Promise<PanesFilesResult> {
240
+ if (action === "close") {
241
+ await yaziController?.close();
242
+ return { status: "closed" };
243
+ }
244
+ if (action === "toggle" && yaziController?.isOpen()) {
245
+ await yaziController.close();
246
+ return { status: "closed" };
247
+ }
248
+ return openFiles(action === "pick");
249
+ },
250
+
155
251
  status(): PanesStatus {
156
252
  const detection = deps.mux.detection();
157
- const panes = deps.getSettings().panes;
253
+ const settings = deps.getSettings();
254
+ const panes = settings.interface.panes;
158
255
  return {
159
256
  mode: deps.mux.mode,
160
257
  available: deps.mux.available(),
@@ -164,10 +261,16 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
164
261
  settings: {
165
262
  enabled: panes.enabled,
166
263
  notifications: panes.notifications,
167
- journal: panes.journal,
168
- yazi: { ...panes.yazi },
264
+ layout: panes.layout,
265
+ journal: settings.fleet.history.journal,
266
+ yazi: { ...panes.files },
169
267
  },
170
268
  yazi: yaziController?.status() ?? closedYaziStatus(),
269
+ docks: deps.mux.docks().map((dock) => ({
270
+ slot: dock.slot,
271
+ paneId: dock.paneId,
272
+ targetShare: dock.targetShare,
273
+ })),
171
274
  panes: [...inventory(deps.mux.list()), ...pendingOpens.values()],
172
275
  };
173
276
  },
@@ -181,41 +284,31 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
181
284
  async open(request: { preset?: string; argv?: ReadonlyArray<string>; once?: boolean }): Promise<PanesOpenResult> {
182
285
  const cwd = deps.getCwd();
183
286
  if (request.preset !== undefined) {
184
- const preset = PANES_PRESETS.find((entry) => entry.id === request.preset);
287
+ const presetId = resolvePanesPresetId(request.preset);
288
+ const preset = presetId === null ? undefined : PANES_PRESETS.find((entry) => entry.id === presetId);
185
289
  if (!preset) {
186
290
  return { status: "refused", reason: `unknown preset: ${request.preset}` };
187
291
  }
188
- if (preset.id === "yazi") {
189
- if (!deps.getSettings().panes.yazi.enabled) {
190
- return { status: "refused", reason: "the files pane is disabled by panes.yazi.enabled" };
191
- }
192
- if (!yaziController) {
193
- return { status: "unavailable", reason: "the files-pane return path is not ready" };
292
+ if (preset.id === "files") {
293
+ const result = await openFiles(request.once === true);
294
+ if (result.status === "opened") {
295
+ return { status: "opened", label: preset.id, paneId: result.paneId, existing: result.existing };
194
296
  }
195
- const pendingId = beginPendingOpen(preset.id);
196
- try {
197
- const result = await yaziController.open(request.once ? { once: true } : undefined);
198
- if (result.status === "opened") {
199
- return { status: "opened", label: preset.id, paneId: result.paneId };
200
- }
201
- if (result.status === "missing-binary") {
202
- return {
203
- status: "missing-binary",
204
- preset: preset.id,
205
- binary: result.binary,
206
- installHint: preset.installHint,
207
- detail: result.detail,
208
- };
209
- }
210
- return {
211
- status: result.status === "profile-error" ? "refused" : "unavailable",
212
- reason: result.reason,
213
- };
214
- } finally {
215
- pendingOpens.delete(pendingId);
297
+ if (result.status === "missing-binary") {
298
+ return { ...result, preset: preset.id };
216
299
  }
300
+ return result;
301
+ }
302
+ if (!deps.mux.available()) return { status: "unavailable", reason: unavailableReason(deps.mux) };
303
+ // One pane per preset. A second `/panes open shell` is a request to
304
+ // see the shell that is already there, not to split the screen again;
305
+ // the pane host is asked for focus so the operator lands in it.
306
+ const live = deps.mux.list().find((record) => record.purpose === "utility" && record.label === preset.id);
307
+ if (live) {
308
+ await deps.mux.unzoomSelf();
309
+ await deps.mux.focusPane(live.ref.paneId);
310
+ return { status: "opened", label: preset.id, paneId: live.ref.paneId, existing: true };
217
311
  }
218
- if (!deps.mux.available()) return { status: "unavailable", reason: UNAVAILABLE };
219
312
  const binaryPath = probe(preset.binary);
220
313
  if (binaryPath === null) {
221
314
  return {
@@ -228,7 +321,10 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
228
321
  }
229
322
  const argv = presetArgv(preset.id, binaryPath);
230
323
  if (argv === null) {
231
- return { status: "refused", reason: `preset ${preset.id} has nothing to show yet` };
324
+ return {
325
+ status: "refused",
326
+ reason: `no dispatched run has written a journal under ${journalRoot()} yet; the logs pane follows the newest run once one starts`,
327
+ };
232
328
  }
233
329
  const pendingId = beginPendingOpen(preset.id);
234
330
  try {
@@ -239,7 +335,7 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
239
335
  pendingOpens.delete(pendingId);
240
336
  }
241
337
  }
242
- if (!deps.mux.available()) return { status: "unavailable", reason: UNAVAILABLE };
338
+ if (!deps.mux.available()) return { status: "unavailable", reason: unavailableReason(deps.mux) };
243
339
  const argv = request.argv ?? [];
244
340
  if (argv.length === 0) return { status: "refused", reason: "nothing to run" };
245
341
  const label = argv[0] ?? "pane";
@@ -253,8 +349,19 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
253
349
  }
254
350
  },
255
351
 
352
+ async zoom(target: string): Promise<PanesZoomResult> {
353
+ if (!deps.mux.available()) return { status: "unavailable", reason: unavailableReason(deps.mux) };
354
+ const match = matchOwnedPane(deps.mux.list(), target.trim().length === 0 ? "watch" : target);
355
+ if (!match) return { status: "not-found", target: target.trim().length === 0 ? "watch" : target };
356
+ const changed = await deps.mux.zoomPane(match.ref.paneId, "toggle");
357
+ if (!changed) {
358
+ return { status: "unavailable", reason: "the pane host does not support zoom (protocol below pane.zoom)" };
359
+ }
360
+ return { status: "zoomed", paneId: match.ref.paneId, label: match.label };
361
+ },
362
+
256
363
  async close(target: string): Promise<PanesCloseResult> {
257
- if (!deps.mux.available()) return { status: "unavailable", reason: UNAVAILABLE };
364
+ if (!deps.mux.available()) return { status: "unavailable", reason: unavailableReason(deps.mux) };
258
365
  const owned = deps.mux.list();
259
366
  if (target === "all") {
260
367
  const labels: string[] = [];
@@ -264,12 +371,7 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
264
371
  }
265
372
  return { status: "closed", closed: labels.length, labels };
266
373
  }
267
- const needle = target.trim().toLowerCase();
268
- const newestFirst = [...owned].reverse();
269
- const match =
270
- newestFirst.find((record) => record.ref.paneId.toLowerCase() === needle) ??
271
- newestFirst.find((record) => record.label.toLowerCase().includes(needle)) ??
272
- newestFirst.find((record) => record.purpose === needle);
374
+ const match = matchOwnedPane(owned, target);
273
375
  if (!match) return { status: "not-found", target };
274
376
  const closed = await deps.mux.closePane(match.ref.paneId);
275
377
  return closed ? { status: "closed", closed: 1, labels: [match.label] } : { status: "not-found", target };
@@ -203,7 +203,7 @@ function wrapArtifactLine(value: string, max: number): string[] {
203
203
  return lines;
204
204
  }
205
205
 
206
- export function permissionDecisionPresentation(view: ApprovalRequestView): DecisionPresentation {
206
+ function permissionDecisionPresentation(view: ApprovalRequestView): DecisionPresentation {
207
207
  return classifyDecisionPresentation(
208
208
  decisionFactsForPermission({
209
209
  tool: view.tool,
@@ -307,7 +307,7 @@ function permissionInspectionLines(
307
307
  * 80-column one saw the command being authorized end mid-argument, both with
308
308
  * nothing marking the cut.
309
309
  */
310
- export function permissionOverlayLines(view: ApprovalRequestView, width: number): string[] {
310
+ function permissionOverlayLines(view: ApprovalRequestView, width: number): string[] {
311
311
  const content = Math.max(8, Math.floor(width));
312
312
  const presentation = permissionDecisionPresentation(view);
313
313
  // The parked call is awaiting a decision, not blocked: the raw rejection
@@ -0,0 +1,88 @@
1
+ import type { SessionPromptInputs } from "../domains/prompts/compiler.js";
2
+ import { canonicalJson, sha256 } from "../domains/prompts/hash.js";
3
+ import type { ContextWindowSource } from "../domains/providers/index.js";
4
+ import type { AutonomyLevel } from "../domains/safety/autonomy.js";
5
+
6
+ /** The exact schema bytes pi attaches to a provider request for one tool. */
7
+ export interface AttachedToolSchema {
8
+ name: string;
9
+ description: string;
10
+ parameters: unknown;
11
+ }
12
+
13
+ /**
14
+ * Project the live agent tools onto the schema fields sent to the provider.
15
+ * Array order is preserved because providers serialize the attached tools in
16
+ * that order, so reordering them changes prompt-prefix bytes too.
17
+ */
18
+ export function attachedToolSchemasFromState(tools: ReadonlyArray<unknown>): AttachedToolSchema[] {
19
+ const schemas: AttachedToolSchema[] = [];
20
+ for (const tool of tools) {
21
+ if (!tool || typeof tool !== "object" || Array.isArray(tool)) continue;
22
+ const record = tool as Record<string, unknown>;
23
+ schemas.push({
24
+ name: typeof record.name === "string" ? record.name : "",
25
+ description: typeof record.description === "string" ? record.description : "",
26
+ parameters: record.parameters ?? null,
27
+ });
28
+ }
29
+ return schemas;
30
+ }
31
+
32
+ /**
33
+ * Serialize the exact ordered schema sequence attached to a provider request.
34
+ *
35
+ * `canonicalJson` is deliberately not used here: provider JSON preserves tool
36
+ * array order and nested object insertion order, so canonicalizing parameters
37
+ * can alias two byte-distinct request prefixes. Standard `JSON.stringify`
38
+ * matches the request serialization boundary and throws for unsupported
39
+ * values such as circular references and bigint.
40
+ */
41
+ export function attachedToolSchemaBytes(schemas: ReadonlyArray<AttachedToolSchema>): string {
42
+ try {
43
+ const bytes = JSON.stringify(schemas);
44
+ if (bytes === undefined) throw new Error("JSON.stringify returned undefined");
45
+ return bytes;
46
+ } catch (err) {
47
+ const reason = err instanceof Error ? err.message : String(err);
48
+ throw new Error(`attached tool schemas are not JSON-serializable: ${reason}`, { cause: err });
49
+ }
50
+ }
51
+
52
+ export interface MainPromptCacheIdentityInput {
53
+ targetId: string;
54
+ runtimeId: string;
55
+ wireModelId: string;
56
+ autonomy: AutonomyLevel;
57
+ sessionId: string;
58
+ cwd: string;
59
+ workingContextPaths: ReadonlyArray<string>;
60
+ contextWindowSource: ContextWindowSource | null;
61
+ promptInputEpoch: string;
62
+ sessionInputs: SessionPromptInputs;
63
+ attachedToolSchemas: ReadonlyArray<AttachedToolSchema>;
64
+ }
65
+
66
+ /**
67
+ * Canonical identity for the interactive session-prompt compile cache.
68
+ * Config hot reload explicitly invalidates compiler-owned fragments and
69
+ * rosters; this identity covers every live/caller input resolved per turn.
70
+ */
71
+ export function mainPromptCacheIdentity(input: MainPromptCacheIdentityInput): string {
72
+ return sha256(
73
+ canonicalJson({
74
+ version: 2,
75
+ targetId: input.targetId,
76
+ runtimeId: input.runtimeId,
77
+ wireModelId: input.wireModelId,
78
+ autonomy: input.autonomy,
79
+ sessionId: input.sessionId,
80
+ cwd: input.cwd,
81
+ workingContextPaths: [...input.workingContextPaths].sort((a, b) => a.localeCompare(b)),
82
+ contextWindowSource: input.contextWindowSource,
83
+ promptInputEpoch: input.promptInputEpoch,
84
+ sessionInputs: input.sessionInputs,
85
+ attachedToolSchemaBytes: attachedToolSchemaBytes(input.attachedToolSchemas),
86
+ }),
87
+ );
88
+ }
@@ -1,13 +1,21 @@
1
1
  import type { RetryStatusPayload } from "../chat-loop.js";
2
2
  import { styleTaggedNotice } from "./notice.js";
3
3
 
4
- function shorten(value: string, limit: number): string {
5
- if (value.length <= limit) return value;
6
- return `${value.slice(0, Math.max(0, limit - 3))}...`;
4
+ const RETRY_ERROR_MAX_CHARS = 2_000;
5
+ const RETRY_ERROR_TRUNCATION_MARKER = "… [retry error truncated]";
6
+
7
+ function boundedRetryError(value: string): string {
8
+ const characters = Array.from(value);
9
+ if (characters.length <= RETRY_ERROR_MAX_CHARS) return value;
10
+ return `${characters.slice(0, RETRY_ERROR_MAX_CHARS).join("").trimEnd()}${RETRY_ERROR_TRUNCATION_MARKER}`;
7
11
  }
8
12
 
9
13
  function rawRetryStatus(status: RetryStatusPayload): string {
10
- const suffix = status.errorMessage ? `: ${shorten(status.errorMessage, 120)}` : "";
14
+ // Both live and replay renderers wrap this notice to their terminal width, so
15
+ // ordinary errors keep their complete remedy. Raw provider failures can also
16
+ // be an HTML proxy page, though; keep a generous ceiling so one retry does not
17
+ // turn that page into hundreds of transcript rows.
18
+ const suffix = status.errorMessage ? `: ${boundedRetryError(status.errorMessage)}` : "";
11
19
  if (status.phase === "waiting") {
12
20
  return `[retry] attempt ${status.attempt}/${status.maxAttempts} in ${status.seconds ?? 0}s${suffix}`;
13
21
  }
@@ -426,7 +426,7 @@ function ledgerTail(finished: ToolExecutionFinished): { facts: string; offload:
426
426
  if (details?.timedOut === true) parts.push("timed out");
427
427
  if (details?.outputCapped === true) parts.push("output capped");
428
428
  }
429
- if (finished.excludeFromContext === true) parts.push("excluded from context");
429
+ if (finished.excludeFromContext === true) parts.push("not sent to model");
430
430
  if (finished.evictedReason !== undefined) parts.push("evicted", finished.evictedReason);
431
431
  const offloadPath = executed ? offloadPathOf(finished) : null;
432
432
  return {
@@ -994,7 +994,7 @@ function toolUsageFact(result: unknown): string | null {
994
994
  function outputFacts(finished: ToolExecutionFinished): string[] {
995
995
  const parts: string[] = [];
996
996
  if (isNonExecutedOutcome(finished.outcome)) {
997
- if (finished.excludeFromContext === true) parts.push("excluded from context");
997
+ if (finished.excludeFromContext === true) parts.push("not sent to model");
998
998
  return parts;
999
999
  }
1000
1000
  const exitCode = structuredExitCode(finished) ?? (finished.toolName === "bash" && !finished.isError ? "0" : null);
@@ -1024,7 +1024,7 @@ function outputFacts(finished: ToolExecutionFinished): string[] {
1024
1024
  if (added.length > 0) parts.push(`added ${added.join(", ")}`);
1025
1025
  }
1026
1026
  if (isPlainObject(finished.result) && finished.result.terminate === true) parts.push("terminal result");
1027
- if (finished.excludeFromContext === true) parts.push("excluded from context");
1027
+ if (finished.excludeFromContext === true) parts.push("not sent to model");
1028
1028
  if (finished.evictedReason !== undefined) parts.push("evicted", finished.evictedReason);
1029
1029
  return parts;
1030
1030
  }
@@ -1379,7 +1379,7 @@ export function renderBashTranscriptExecution(
1379
1379
  const shownBytes = Buffer.byteLength(execution.output, "utf8");
1380
1380
  const totalBytes = execution.totalBytes ?? shownBytes;
1381
1381
  const args: Record<string, unknown> = { command: execution.command };
1382
- if (execution.excludeFromContext === true) args.context = "excluded from model context";
1382
+ if (execution.excludeFromContext === true) args.context = "not sent to model";
1383
1383
  const details = {
1384
1384
  resultSize: {
1385
1385
  bytes: totalBytes,
@@ -7,7 +7,7 @@ import { buildModelReplayAgentMessagesFromTurns } from "./model-session-replay.j
7
7
 
8
8
  type SessionOwner = Pick<SessionContract, "create" | "current">;
9
9
  type SessionChat = Pick<ChatLoop, "resetForSession">;
10
- type RoutingSettings = Pick<ClioSettings, "orchestrator">;
10
+ type RoutingSettings = Pick<ClioSettings, "chat">;
11
11
 
12
12
  export interface SessionTranscriptDeps {
13
13
  session?: SessionOwner;
@@ -74,8 +74,8 @@ export function createSessionTranscript(deps: SessionTranscriptDeps): SessionTra
74
74
  const input: { cwd: string; target?: string; model?: string } = {
75
75
  cwd: deps.getCwd?.() ?? process.cwd(),
76
76
  };
77
- if (settings?.orchestrator.target) input.target = settings.orchestrator.target;
78
- if (settings?.orchestrator.model) input.model = settings.orchestrator.model;
77
+ if (settings?.chat.target) input.target = settings.chat.target;
78
+ if (settings?.chat.model) input.model = settings.chat.model;
79
79
  deps.session.create(input);
80
80
  };
81
81