@iowarp/clio-coder 0.4.7 → 0.4.9

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 (675) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +111 -0
  3. package/CONTRIBUTING.md +83 -74
  4. package/README.md +69 -47
  5. package/dist/{acp-W3Y3TRHD.js → acp-ZWZCPS2A.js} +15 -15
  6. package/dist/{agents-J4ICNLQ3.js → agents-LYSOWZUE.js} +61 -59
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/assets/web-notices/@hono__node-server-LICENSE +21 -0
  9. package/dist/assets/web-notices/hono-LICENSE +21 -0
  10. package/dist/{auth-X2UJUMOC.js → auth-WBQGKWQ5.js} +27 -27
  11. package/dist/background-BUMOBAQN.js +37 -0
  12. package/dist/{builtins-XLXWWSRF.js → builtins-ODRJOEDI.js} +7 -7
  13. package/dist/{chunk-C3G5PNUO.js → chunk-2DRRZ57Q.js} +36 -27
  14. package/dist/chunk-2JBZYUPY.js +105 -0
  15. package/dist/chunk-2KUBKL63.js +336 -0
  16. package/dist/chunk-2VBWFXYE.js +198 -0
  17. package/dist/{chunk-XZ6UFQ52.js → chunk-2X2R3UTH.js} +25 -15
  18. package/dist/{chunk-M6Z2V6YU.js → chunk-37LW32LZ.js} +5 -5
  19. package/dist/{chunk-6LRLOJHQ.js → chunk-3AND2EFU.js} +11 -62
  20. package/dist/{chunk-FQOOGXBH.js → chunk-3RDHGNU7.js} +101 -33
  21. package/dist/{chunk-D2T66PDV.js → chunk-3SUDBGEI.js} +41 -208
  22. package/dist/{chunk-5AJPUR72.js → chunk-3TQN67I2.js} +9 -9
  23. package/dist/{chunk-LBFQMYS3.js → chunk-3U4BL2EV.js} +5 -3
  24. package/dist/{chunk-UFYNOQK4.js → chunk-3UQADNG2.js} +7 -7
  25. package/dist/{chunk-V4ZKOKRB.js → chunk-434LRQ6Z.js} +61 -53
  26. package/dist/{chunk-NO7J45X6.js → chunk-4ATBOFRP.js} +713 -218
  27. package/dist/{chunk-ECOMVOHP.js → chunk-4DNL43EZ.js} +3 -3
  28. package/dist/{chunk-WT5TRMO4.js → chunk-4HFJKRGZ.js} +255 -82
  29. package/dist/{chunk-5A6XR3RJ.js → chunk-555E2WVV.js} +16 -2
  30. package/dist/{chunk-WURGVOZJ.js → chunk-5RTEFNBP.js} +18 -14
  31. package/dist/{config-YXARKGTX.js → chunk-64XJW7NT.js} +24 -268
  32. package/dist/{chunk-24S3DN22.js → chunk-6TKOFFGE.js} +4 -4
  33. package/dist/{chunk-YKRJTYNP.js → chunk-6UJ7RDI7.js} +4 -4
  34. package/dist/{chunk-MZNWZUJM.js → chunk-7FBCRWVT.js} +288 -288
  35. package/dist/{chunk-UA6W4XFJ.js → chunk-7JSOSVLP.js} +2 -2
  36. package/dist/chunk-7N3OLLSL.js +637 -0
  37. package/dist/{chunk-KKEYGFX4.js → chunk-7QQRPB2E.js} +11 -11
  38. package/dist/{chunk-N37QC5FV.js → chunk-A6DULIMH.js} +21 -9
  39. package/dist/{fleet-decisions-S3PTZV2D.js → chunk-AB3QXXBC.js} +5 -41
  40. package/dist/chunk-ACCECAH4.js +49 -0
  41. package/dist/{chunk-CP3HIR5H.js → chunk-AM6CEP2K.js} +20 -19
  42. package/dist/chunk-AUHVBIDW.js +19 -0
  43. package/dist/{chunk-BQQ5MXUC.js → chunk-AY4XE6GN.js} +19 -13
  44. package/dist/{chunk-ISNCCX42.js → chunk-BBA2TAWV.js} +10 -9
  45. package/dist/chunk-BFPHMSK7.js +169 -0
  46. package/dist/{chunk-LVFANMOH.js → chunk-BHJMMCXS.js} +4 -4
  47. package/dist/{chunk-DO7M3LSX.js → chunk-BMNVVKEW.js} +40 -93
  48. package/dist/{chunk-VTYHHQ57.js → chunk-CTGZCEI6.js} +2 -2
  49. package/dist/{chunk-RTLNFZMD.js → chunk-DIAJYJYG.js} +3 -3
  50. package/dist/chunk-EHZRAB4U.js +63 -0
  51. package/dist/{chunk-KS7ETA3P.js → chunk-EM2DIQAJ.js} +3 -3
  52. package/dist/{chunk-MNQN3X6Y.js → chunk-ETF4ROKH.js} +5 -5
  53. package/dist/{chunk-WN552PKN.js → chunk-F2YM3JY4.js} +744 -1134
  54. package/dist/{chunk-7EEGBKV4.js → chunk-FEBQWHJT.js} +24 -19
  55. package/dist/{chunk-4QKAITQT.js → chunk-FPS4R2RN.js} +74 -10
  56. package/dist/chunk-G5R53COU.js +68 -0
  57. package/dist/chunk-GHXGMFQ5.js +40 -0
  58. package/dist/{chunk-GFQ7P2UF.js → chunk-GJDRMBDI.js} +10 -10
  59. package/dist/{chunk-LZBMXNLP.js → chunk-GM4TY6VN.js} +43 -6
  60. package/dist/{chunk-NCCQ6DVS.js → chunk-GREYLTZ5.js} +8 -8
  61. package/dist/{chunk-HOX4YZ2K.js → chunk-H2WSCZZT.js} +19 -3
  62. package/dist/{chunk-3LXJOICS.js → chunk-H6IUCY6Q.js} +2 -2
  63. package/dist/{chunk-BO4XV5VX.js → chunk-H72DCH3E.js} +95 -206
  64. package/dist/{chunk-SEDI5K5B.js → chunk-H7TXJR23.js} +20 -20
  65. package/dist/chunk-HBJQQTKM.js +40 -0
  66. package/dist/chunk-HCVKSGNZ.js +990 -0
  67. package/dist/chunk-HVCAY2FH.js +67 -0
  68. package/dist/{chunk-34XHRVKG.js → chunk-I47EJPYL.js} +3 -3
  69. package/dist/{chunk-4N2RZ4TO.js → chunk-IALGWTLO.js} +3 -3
  70. package/dist/{chunk-IQCNVLO6.js → chunk-IALZJE37.js} +10 -7
  71. package/dist/{chunk-DLIYANB7.js → chunk-IC7JXLOM.js} +16 -11
  72. package/dist/{chunk-G4LGUTOE.js → chunk-IOSVTTCD.js} +5 -5
  73. package/dist/{chunk-DBREN25X.js → chunk-IPTPMLA6.js} +8 -3
  74. package/dist/{chunk-V552WL53.js → chunk-IZZI3SKQ.js} +3 -67
  75. package/dist/{chunk-TN5FW4XY.js → chunk-JIYWMQZ5.js} +12 -9
  76. package/dist/{chunk-T7QQBNLH.js → chunk-JKU34ACI.js} +10 -8
  77. package/dist/chunk-JOBN2YQQ.js +176 -0
  78. package/dist/chunk-JOL2QRLE.js +152 -0
  79. package/dist/{chunk-GXIWHXDB.js → chunk-JTR3VSV3.js} +3 -3
  80. package/dist/{chunk-T334FW2H.js → chunk-JU6MAMRJ.js} +7 -7
  81. package/dist/chunk-JURMQWVJ.js +15 -0
  82. package/dist/{chunk-CULVKYTK.js → chunk-K3XN4LZ4.js} +5 -5
  83. package/dist/{chunk-3T4DXWP6.js → chunk-KIVFXGBM.js} +27 -7
  84. package/dist/chunk-KKRXONXG.js +43 -0
  85. package/dist/{chunk-YPRSNUTC.js → chunk-KOAHT3N2.js} +2 -2
  86. package/dist/chunk-KP5BPXR3.js +73 -0
  87. package/dist/{chunk-UA3W4FGC.js → chunk-KRJQG47M.js} +6 -6
  88. package/dist/{chunk-GI5RRMAH.js → chunk-KW6OJ7IY.js} +19 -21
  89. package/dist/{chunk-A46ILRS2.js → chunk-L3NBWLSN.js} +4 -4
  90. package/dist/{chunk-MZHXENL7.js → chunk-L4RUTLRL.js} +8 -8
  91. package/dist/{chunk-P5SC4DLJ.js → chunk-LGTVWPRN.js} +2 -2
  92. package/dist/{chunk-65BGHOUR.js → chunk-LSQW6KZO.js} +5 -5
  93. package/dist/{chunk-TZHN5ITX.js → chunk-LWJYOHT3.js} +8 -8
  94. package/dist/{chunk-U3TPUXOQ.js → chunk-M6YLF66Z.js} +74 -40
  95. package/dist/chunk-MJ4QEJVT.js +185 -0
  96. package/dist/{chunk-T4TY5GG3.js → chunk-MO65K5CH.js} +5 -5
  97. package/dist/{chunk-TZ6UVP2H.js → chunk-MTOZEQHL.js} +8 -8
  98. package/dist/chunk-MZDPF35R.js +45 -0
  99. package/dist/{chunk-P4DL2LM5.js → chunk-MZKYVIWW.js} +8 -119
  100. package/dist/{chunk-KAFMW7WM.js → chunk-NBPA5QM6.js} +2 -2
  101. package/dist/{chunk-EUEXGXXR.js → chunk-NMBEW4PP.js} +5 -5
  102. package/dist/{chunk-SELG4SUR.js → chunk-NPLLK3HO.js} +72 -89
  103. package/dist/{chunk-VCRVEDUC.js → chunk-NSYGPIVW.js} +5 -5
  104. package/dist/{context-7HJEWTTP.js → chunk-NXTV5OI5.js} +36 -90
  105. package/dist/{chunk-IMOD2YPV.js → chunk-NYDG4QP4.js} +9 -19
  106. package/dist/{chunk-6CA2BHOR.js → chunk-OA2GDACN.js} +5 -5
  107. package/dist/{chunk-A67NR5AT.js → chunk-PJI57EC6.js} +14 -11
  108. package/dist/{chunk-IJMW64DX.js → chunk-PJJBUGMR.js} +50 -50
  109. package/dist/{chunk-CPXGJI2A.js → chunk-PNJE7JPS.js} +20 -5
  110. package/dist/chunk-PP23PZEV.js +1347 -0
  111. package/dist/chunk-PPIFDSBK.js +409 -0
  112. package/dist/{chunk-T52TPHYC.js → chunk-PTFISXQO.js} +8 -7
  113. package/dist/{chunk-C6GEXX4L.js → chunk-QB33Z5S7.js} +5 -5
  114. package/dist/{chunk-VMATUZB6.js → chunk-QGNII5VC.js} +10 -10
  115. package/dist/{chunk-TLTGZTXI.js → chunk-QI72X67S.js} +104 -27
  116. package/dist/chunk-QKHZZFKH.js +98 -0
  117. package/dist/{chunk-PFLOULP3.js → chunk-RDKX2PME.js} +4 -4
  118. package/dist/{chunk-B5ZTR6KZ.js → chunk-RL7LJYN4.js} +1 -1
  119. package/dist/chunk-RPMNIFRY.js +65 -0
  120. package/dist/{chunk-L3Z5ANCV.js → chunk-RQROVOV3.js} +13 -11
  121. package/dist/{chunk-6YHPAAZR.js → chunk-S34A7BSP.js} +3 -3
  122. package/dist/{chunk-5ZSZEYJK.js → chunk-SJETVJHX.js} +2 -2
  123. package/dist/{chunk-77CZRFTE.js → chunk-SJMNU4ZS.js} +2 -2
  124. package/dist/chunk-SLLG2G44.js +85 -0
  125. package/dist/{chunk-GVZFCJHE.js → chunk-SQAZN2V3.js} +48 -22
  126. package/dist/{chunk-2O2LVQQK.js → chunk-SQBT46OF.js} +2 -2
  127. package/dist/{chunk-ZGIGW4ZG.js → chunk-TCUOGIL2.js} +5 -5
  128. package/dist/{chunk-DACXIVVF.js → chunk-TIWPKCVO.js} +5 -5
  129. package/dist/{chunk-5CMARGPF.js → chunk-UIU7MGZ3.js} +11 -2
  130. package/dist/chunk-USBBEKHW.js +177 -0
  131. package/dist/{chunk-WLHX3MM5.js → chunk-V4XJWDHR.js} +21 -11
  132. package/dist/{chunk-MBJO5VNZ.js → chunk-VPWGADBG.js} +33 -33
  133. package/dist/{chunk-UUQ5G6EZ.js → chunk-VWFCAK34.js} +6 -6
  134. package/dist/{chunk-6CB2IL4N.js → chunk-W5RM7YAH.js} +1 -1
  135. package/dist/{chunk-4MFBBY2Z.js → chunk-W72LLZAV.js} +3 -3
  136. package/dist/{chunk-4UHVS5T7.js → chunk-WGRDABW7.js} +8 -8
  137. package/dist/{chunk-XR3XJN2M.js → chunk-WWRV5RJI.js} +4 -4
  138. package/dist/{chunk-24TOGHPO.js → chunk-X6FLVUM5.js} +4 -4
  139. package/dist/{chunk-6YA46L5A.js → chunk-XFLSL7BT.js} +2 -2
  140. package/dist/{chunk-QKWL7SYE.js → chunk-XJZEDCNT.js} +50 -39
  141. package/dist/{chunk-UWD3JD5X.js → chunk-XLLEL3K7.js} +10 -10
  142. package/dist/{chunk-2GPGAE5W.js → chunk-XNIZBOFV.js} +15 -1
  143. package/dist/chunk-XNZWWDC3.js +686 -0
  144. package/dist/{chunk-WBVKKTUT.js → chunk-XRECG65F.js} +2 -2
  145. package/dist/chunk-XTQ7MEJG.js +457 -0
  146. package/dist/{chunk-GEVQNST4.js → chunk-XZWSP67B.js} +2 -2
  147. package/dist/{chunk-WB7POC6M.js → chunk-Y3M2T5RO.js} +6 -6
  148. package/dist/{chunk-RXFPB32E.js → chunk-YJCCMYYT.js} +2 -2
  149. package/dist/{chunk-EUZRMP4Y.js → chunk-YPQOPFP7.js} +20 -20
  150. package/dist/{chunk-USZA7GWL.js → chunk-YQ3GFEUY.js} +2 -2
  151. package/dist/{chunk-BAU36233.js → chunk-YQYINEJI.js} +9 -9
  152. package/dist/{chunk-CE64C5K5.js → chunk-ZF6CV4WZ.js} +1356 -235
  153. package/dist/{chunk-3XE4NRLF.js → chunk-ZKJU55MX.js} +4 -2
  154. package/dist/{chunk-IZYTT3CD.js → chunk-ZKQ63XZ5.js} +16 -39
  155. package/dist/{chunk-6TAATXXH.js → chunk-ZKVMDNAN.js} +7 -7
  156. package/dist/chunk-ZST3FRCV.js +132 -0
  157. package/dist/cli/index.js +50 -38
  158. package/dist/{clio-L2P7S2R2.js → clio-JUDCLNHC.js} +11 -11
  159. package/dist/clio-context-tools-FT672MNZ.js +136 -0
  160. package/dist/{code-nav-B5LNX4KU.js → code-nav-7OVCTP2Z.js} +39 -37
  161. package/dist/{components-63MMQKUT.js → components-OZXZMDWU.js} +11 -11
  162. package/dist/config-P3ZQVF63.js +275 -0
  163. package/dist/config-graph-GKAOBAS5.js +160 -0
  164. package/dist/{configure-LMVQJ46J.js → configure-25LRYZJG.js} +56 -55
  165. package/dist/context-72VQV7JX.js +73 -0
  166. package/dist/{context-YG2LZDYZ.js → context-COWRWXP3.js} +89 -83
  167. package/dist/{context-XSZKKFBW.js → context-WB3D474G.js} +16 -16
  168. package/dist/{context-clear-AC5NXHM2.js → context-clear-Y4LYMWC6.js} +88 -82
  169. package/dist/{context-index-KKTPRV5G.js → context-index-W6A4V7OC.js} +4 -4
  170. package/dist/{context-map-T7ROR5D5.js → context-map-DKL3QT6D.js} +3 -3
  171. package/dist/{context-working-set-F4Q4J3NS.js → context-working-set-TMZYVC7A.js} +27 -25
  172. package/dist/data-tool-KMBWKKWR.js +2987 -0
  173. package/dist/{detail-H73BEF2N.js → detail-4GLROGY5.js} +89 -83
  174. package/dist/{dispatch-runner-3RY5FSJC.js → dispatch-runner-TR3LBP5P.js} +113 -107
  175. package/dist/docs-ZK777W2G.js +101 -0
  176. package/dist/{doctor-EQYJOGUG.js → doctor-WC4OV2OB.js} +76 -73
  177. package/dist/{eval-4P7O6CCE.js → eval-FUNWJNUJ.js} +88 -73
  178. package/dist/{eval-inventory-QOYZERXJ.js → eval-inventory-CX24K2JT.js} +5 -60
  179. package/dist/evals-L73EBHSU.js +104 -0
  180. package/dist/{evidence-O76QF7TZ.js → evidence-AVJ2RTHX.js} +99 -93
  181. package/dist/{evidence-D6GUSYJW.js → evidence-P4NZOAK7.js} +88 -82
  182. package/dist/evidence-Y55WKYHH.js +246 -0
  183. package/dist/{evolve-H47BCETS.js → evolve-MAWKRYWF.js} +93 -87
  184. package/dist/{extensions-NNL3ZOCU.js → extensions-PYQH3H47.js} +14 -13
  185. package/dist/fleet-M4H2QBWT.js +268 -0
  186. package/dist/{fleet-KMNS6NOM.js → fleet-ULBXXRDR.js} +146 -138
  187. package/dist/{fleet-commands-DOWSYCBX.js → fleet-commands-7NNC4JZU.js} +18 -17
  188. package/dist/fleet-decisions-EHEY7KPU.js +52 -0
  189. package/dist/{fleet-graph-F2DE2TME.js → fleet-graph-LQ2AHZT3.js} +24 -24
  190. package/dist/{fleet-inspect-EN2Q6IVB.js → fleet-inspect-5IGBIIYZ.js} +98 -258
  191. package/dist/{fleet-preflight-FRLETDD3.js → fleet-preflight-UTTNOKMG.js} +9 -4
  192. package/dist/{fleet-validate-B2XDLS57.js → fleet-validate-YGILJKA6.js} +29 -29
  193. package/dist/{fleet-verify-4JKUWGJ7.js → fleet-verify-AUWTCDKR.js} +88 -82
  194. package/dist/{fleet-view-BHJFW26B.js → fleet-view-TGUFCY5A.js} +90 -84
  195. package/dist/{init-XAT5N5YM.js → init-GFN2Z7NF.js} +111 -104
  196. package/dist/install-6PIF6F6W.js +19 -0
  197. package/dist/{interop-FVECHFKG.js → interop-EF5JUWWK.js} +29 -29
  198. package/dist/{inventory-7KFQGLCV.js → inventory-I6VJDDYF.js} +90 -84
  199. package/dist/library-3J5IO2OJ.js +75 -0
  200. package/dist/{library-QAPAO23R.js → library-IJTOFTDS.js} +20 -19
  201. package/dist/{library-NY2XOT75.js → library-Z3KZSHPE.js} +35 -35
  202. package/dist/{library-import-5Y6MAS3R.js → library-import-IMKFLDHX.js} +29 -29
  203. package/dist/{library-inventory-JT6HWITQ.js → library-inventory-CQP5D6GU.js} +21 -21
  204. package/dist/{library-validation-EQUH25DC.js → library-validation-33UTX7AI.js} +19 -19
  205. package/dist/mcp-5FWZKUS6.js +26 -0
  206. package/dist/{memory-DYVTTCP6.js → memory-36CWN67Y.js} +93 -87
  207. package/dist/{models-MASFJ6Y2.js → models-KQ6PQJJQ.js} +57 -56
  208. package/dist/{monitor-YMP4NXJJ.js → monitor-XX6ZD6KC.js} +98 -91
  209. package/dist/{orchestrator-AFQRRTEI.js → orchestrator-SK6HDAOP.js} +1537 -832
  210. package/dist/{panes-NICTHQCV.js → panes-L27QRXUH.js} +14 -14
  211. package/dist/{panes-D3Y2KFG5.js → panes-LXZIWNOZ.js} +4 -4
  212. package/dist/{paths-PSFAUIGO.js → paths-7DJDU4P4.js} +6 -6
  213. package/dist/{preload-5Q7VXRFJ.js → preload-K2TDYI4Y.js} +88 -82
  214. package/dist/{reset-7NKZK7JN.js → reset-73VU3XNT.js} +13 -13
  215. package/dist/{resources-NILSIZAT.js → resources-3BYJYVYL.js} +24 -24
  216. package/dist/{run-BPZGEBZV.js → run-AR7PY6GW.js} +144 -136
  217. package/dist/run-script-H2KUDIII.js +41 -0
  218. package/dist/settings-3VMBMWID.js +72 -0
  219. package/dist/{share-EZ6ERBMH.js → share-HVWH4FPF.js} +30 -30
  220. package/dist/{skills-BTVVNYVM.js → skills-5TYEY75Q.js} +30 -30
  221. package/dist/{skills-eval-UY34MNK7.js → skills-eval-CK3MD63Z.js} +114 -103
  222. package/dist/{skills-inventory-JDHSIA7I.js → skills-inventory-KSFYG3I6.js} +24 -24
  223. package/dist/{slash-commands-K4FNQ2AT.js → slash-commands-DMVHML7P.js} +60 -57
  224. package/dist/{steer-2B3EQGFH.js → steer-XCD6V3EW.js} +4 -4
  225. package/dist/{support-L2SOL3IE.js → support-JAZL6VBR.js} +7 -7
  226. package/dist/system-3TDQRMZZ.js +116 -0
  227. package/dist/{targets-44VKGFLN.js → targets-EZKHAYRN.js} +74 -72
  228. package/dist/{tasks-3KODKFU7.js → tasks-SNEFHWYW.js} +18 -18
  229. package/dist/{terminal-lease-LXA7MMPO.js → terminal-lease-BNLFA4OF.js} +8 -7
  230. package/dist/{tools-3UB7TEVR.js → tools-7IM6BDCE.js} +12 -12
  231. package/dist/{trace-TAMIU4OJ.js → trace-C3MBGD4S.js} +16 -65
  232. package/dist/{tui-primitives-A6MUW32V.js → tui-primitives-36BY2774.js} +2 -2
  233. package/dist/{uninstall-QYVRPEM4.js → uninstall-WWLOSZ42.js} +35 -10
  234. package/dist/{upgrade-7PMKM2JH.js → upgrade-ETK2JNSJ.js} +42 -51
  235. package/dist/{usage-6EQV7EQK.js → usage-S2HOB7BZ.js} +112 -102
  236. package/dist/{verifiers-JLITWSHU.js → verifiers-QDTEVH7R.js} +26 -24
  237. package/dist/{verify-T7NAEVIG.js → verify-SUKUK6XM.js} +16 -15
  238. package/dist/web/client/THIRD_PARTY_LICENSES.md +1809 -0
  239. package/dist/web/client/assets/abnfDiagram-VCTEODGH-BznNOe_I.js +1 -0
  240. package/dist/web/client/assets/arc-Pry-7G1_.js +1 -0
  241. package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +1 -0
  242. package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +36 -0
  243. package/dist/web/client/assets/array-BifhSqXX.js +1 -0
  244. package/dist/web/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
  245. package/dist/web/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
  246. package/dist/web/client/assets/blockDiagram-I7D4REHJ-prINbpbM.js +129 -0
  247. package/dist/web/client/assets/c4Diagram-7LVT6UL2-DkVRKtyU.js +38 -0
  248. package/dist/web/client/assets/channel-c4EeUUqA.js +1 -0
  249. package/dist/web/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  250. package/dist/web/client/assets/chunk-4HAMMTFA-CV0Z1ApC.js +62 -0
  251. package/dist/web/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  252. package/dist/web/client/assets/chunk-75Z2AOVW-D34Nohxq.js +2 -0
  253. package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +125 -0
  254. package/dist/web/client/assets/chunk-F27PBJKO-CmRojxkG.js +1 -0
  255. package/dist/web/client/assets/chunk-FOHPRMQF-CoA4358r.js +161 -0
  256. package/dist/web/client/assets/chunk-GMAD6QVW-ClYZmc73.js +72 -0
  257. package/dist/web/client/assets/chunk-GVQU2GXP-B2BiHFt-.js +1 -0
  258. package/dist/web/client/assets/chunk-IMKFNOWR-BGApZ8nP.js +231 -0
  259. package/dist/web/client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  260. package/dist/web/client/assets/chunk-L3NEJ4N5-DIzCgpkY.js +1 -0
  261. package/dist/web/client/assets/chunk-OSK3NFVY-BPT-yePv.js +10 -0
  262. package/dist/web/client/assets/chunk-P2QGCYS3-BC1WTc2t.js +1 -0
  263. package/dist/web/client/assets/chunk-POPQ4Y6H-BSjzBmZU.js +1 -0
  264. package/dist/web/client/assets/chunk-PWAF6VOD-BIjLs86Z.js +1 -0
  265. package/dist/web/client/assets/chunk-SHT3W25Y-CduDz2cm.js +168 -0
  266. package/dist/web/client/assets/chunk-SVP7TREG-XUn4pPAP.js +88 -0
  267. package/dist/web/client/assets/chunk-TICWLB2K-DcBy2DKy.js +206 -0
  268. package/dist/web/client/assets/chunk-XXDRQBXY-DqAYeljN.js +1 -0
  269. package/dist/web/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  270. package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +1 -0
  271. package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +1 -0
  272. package/dist/web/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
  273. package/dist/web/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
  274. package/dist/web/client/assets/cose-bilkent-JH36ORCC-CVh1icwb.js +1 -0
  275. package/dist/web/client/assets/cynefin-OW5HDTMX-BecPbyM6.js +1 -0
  276. package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-BzMzFwyT.js +62 -0
  277. package/dist/web/client/assets/cytoscape.esm-c2aL46s-.js +321 -0
  278. package/dist/web/client/assets/dagre-C-rnJpZF.js +1 -0
  279. package/dist/web/client/assets/dagre-GXQ25YYZ-CAWJmRMG.js +4 -0
  280. package/dist/web/client/assets/defaultLocale-BFoDCU3G.js +1 -0
  281. package/dist/web/client/assets/diagram-S7CK7UJ4--lp0ALmn.js +30 -0
  282. package/dist/web/client/assets/diagram-UQ7AKVKN-gKUnsjcj.js +41 -0
  283. package/dist/web/client/assets/diagram-VSXAHHWV-BoN5D1Gh.js +3 -0
  284. package/dist/web/client/assets/diagram-VX7I27RA-BMtuswQ6.js +24 -0
  285. package/dist/web/client/assets/diagram-Z3DM3KII-DtU8LXrA.js +24 -0
  286. package/dist/web/client/assets/dist-v5Q1xZ2K.js +1 -0
  287. package/dist/web/client/assets/ebnfDiagram-PWID7BFC-DDcnv9BH.js +1 -0
  288. package/dist/web/client/assets/erDiagram-RLTQ6QDP-DvRb4iDL.js +99 -0
  289. package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +1 -0
  290. package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +1 -0
  291. package/dist/web/client/assets/framework-YGoR34M4.js +9 -0
  292. package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +292 -0
  293. package/dist/web/client/assets/gitGraph-4MIJSDKK-DjD_AAMj.js +1 -0
  294. package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CDyN9n2u.js +106 -0
  295. package/dist/web/client/assets/graphlib-DS17s2tU.js +1 -0
  296. package/dist/web/client/assets/index-CVcy0FAn.js +75 -0
  297. package/dist/web/client/assets/index-Dsi52apB.css +1 -0
  298. package/dist/web/client/assets/info-A6RAGUB7-C_XK8Hq0.js +1 -0
  299. package/dist/web/client/assets/infoDiagram-27XIBGKW-DIe4tJ1i.js +2 -0
  300. package/dist/web/client/assets/init-C-OQMol4.js +1 -0
  301. package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-CVl5unKI.js +70 -0
  302. package/dist/web/client/assets/journeyDiagram-3NMN7TZE-CPEB1Vt8.js +139 -0
  303. package/dist/web/client/assets/kanban-definition-UXKFOSKX-j-9WXjYQ.js +89 -0
  304. package/dist/web/client/assets/katex-ZlcWpGUi.js +257 -0
  305. package/dist/web/client/assets/line-BIDAcEtX.js +1 -0
  306. package/dist/web/client/assets/linear-SzVmGSw4.js +1 -0
  307. package/dist/web/client/assets/mermaid-parser.core-Ux4vssh0.js +7 -0
  308. package/dist/web/client/assets/mermaid.core-CDuwVKeh.js +44 -0
  309. package/dist/web/client/assets/mindmap-definition-YA3MSWOX-5MlQEeQ6.js +96 -0
  310. package/dist/web/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
  311. package/dist/web/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
  312. package/dist/web/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
  313. package/dist/web/client/assets/ordinal-BDEzSJ7C.js +1 -0
  314. package/dist/web/client/assets/packet-AYTQ26CC-DRO66c9Q.js +1 -0
  315. package/dist/web/client/assets/path-fybaL0A-.js +1 -0
  316. package/dist/web/client/assets/pegDiagram-XKGWAZYB-BakZnSjM.js +1 -0
  317. package/dist/web/client/assets/pie-WAS4IAKB-BEzcmhz8.js +1 -0
  318. package/dist/web/client/assets/pieDiagram-E7YTZNPT-DpmqgoPt.js +39 -0
  319. package/dist/web/client/assets/prism-bash-D6zCJ74D.js +1 -0
  320. package/dist/web/client/assets/prism-c-04YixN25.js +1 -0
  321. package/dist/web/client/assets/prism-clike-DapgWyxx.js +1 -0
  322. package/dist/web/client/assets/prism-core-BtsZdCS6.js +1 -0
  323. package/dist/web/client/assets/prism-cpp-C-lJbC-6.js +1 -0
  324. package/dist/web/client/assets/prism-css-CPgOzxXp.js +1 -0
  325. package/dist/web/client/assets/prism-diff-BF8m0_mq.js +3 -0
  326. package/dist/web/client/assets/prism-docker-DkT6yOFj.js +1 -0
  327. package/dist/web/client/assets/prism-fortran-Be5x3y1V.js +1 -0
  328. package/dist/web/client/assets/prism-go-C_8qAH5n.js +1 -0
  329. package/dist/web/client/assets/prism-ini-BESK3y0r.js +1 -0
  330. package/dist/web/client/assets/prism-javascript-BnO-swvr.js +1 -0
  331. package/dist/web/client/assets/prism-json-Dp_-W-Hv.js +1 -0
  332. package/dist/web/client/assets/prism-jsx-D-D0NWtC.js +1 -0
  333. package/dist/web/client/assets/prism-julia-DIjOgiAV.js +1 -0
  334. package/dist/web/client/assets/prism-latex-DNMbqcH_.js +1 -0
  335. package/dist/web/client/assets/prism-makefile-CRKWLQ8l.js +1 -0
  336. package/dist/web/client/assets/prism-markdown-C0FPJ1Iz.js +1 -0
  337. package/dist/web/client/assets/prism-markup-Cp04rIa1.js +1 -0
  338. package/dist/web/client/assets/prism-matlab-D-nk08al.js +1 -0
  339. package/dist/web/client/assets/prism-python-CfiSVtM6.js +1 -0
  340. package/dist/web/client/assets/prism-r-QmNGR8LX.js +1 -0
  341. package/dist/web/client/assets/prism-rust-Bu9N8X3N.js +1 -0
  342. package/dist/web/client/assets/prism-shell-session-Be4UuYoM.js +1 -0
  343. package/dist/web/client/assets/prism-sql-CYhVDMEE.js +1 -0
  344. package/dist/web/client/assets/prism-toml-DKb54GAT.js +1 -0
  345. package/dist/web/client/assets/prism-tsx-p6J2Kc_4.js +1 -0
  346. package/dist/web/client/assets/prism-typescript-BMqONzxf.js +1 -0
  347. package/dist/web/client/assets/prism-yaml-C0JHu8gr.js +1 -0
  348. package/dist/web/client/assets/purify.es-ChwZkWde.js +3 -0
  349. package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-DuMPwwV2.js +7 -0
  350. package/dist/web/client/assets/radar-RG4KPBEZ-Djm3oXl5.js +1 -0
  351. package/dist/web/client/assets/railroad-74A4TZTK-Cpvkwsao.js +1 -0
  352. package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +1 -0
  353. package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +1 -0
  354. package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +1 -0
  355. package/dist/web/client/assets/railroadDiagram-O6MQD6OU-CgMS4B6R.js +1 -0
  356. package/dist/web/client/assets/requirementDiagram-BXWQKSXE-CX5eoNdN.js +84 -0
  357. package/dist/web/client/assets/rolldown-runtime-hePW80VL.js +1 -0
  358. package/dist/web/client/assets/rough.esm-Dy-Kn_BL.js +1 -0
  359. package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-CODBX2N3.js +40 -0
  360. package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-eUhhF8OR.js +162 -0
  361. package/dist/web/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
  362. package/dist/web/client/assets/src-B6xuSHsQ.js +1 -0
  363. package/dist/web/client/assets/stateDiagram-D77RDMKH-vR6l0NC2.js +1 -0
  364. package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +1 -0
  365. package/dist/web/client/assets/swimlanes-42K2YHIH-v9Tw_zX7.js +1 -0
  366. package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +8 -0
  367. package/dist/web/client/assets/timeline-definition-24CTP7MA-DxianbhU.js +120 -0
  368. package/dist/web/client/assets/treeView-Q6P3EWNA-DLxnZb9R.js +1 -0
  369. package/dist/web/client/assets/treemap-WGGIJYW6-I7UnZ6xJ.js +1 -0
  370. package/dist/web/client/assets/vennDiagram-4TSXK5OY-Ar7M8Mrj.js +34 -0
  371. package/dist/web/client/assets/wardley-WFR3VGLG-B8ZSHeDu.js +1 -0
  372. package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-Qks2FmIn.js +78 -0
  373. package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BBBjRtiE.js +7 -0
  374. package/dist/web/client/clio-coder-logo.webp +0 -0
  375. package/dist/web/client/icon-192.png +0 -0
  376. package/dist/web/client/icon-512.png +0 -0
  377. package/dist/web/client/index.html +6 -0
  378. package/dist/web/client/manifest.webmanifest +15 -0
  379. package/dist/web/client/offline.css +55 -0
  380. package/dist/web/client/offline.html +5 -0
  381. package/dist/web/client/offline.js +27 -0
  382. package/dist/web/client/sw.js +34 -0
  383. package/dist/web/ops-worker.js +37 -0
  384. package/dist/web/reads-worker.js +1726 -0
  385. package/dist/web/server.js +8499 -0
  386. package/dist/web-EMGUGGEI.js +13 -0
  387. package/dist/{web-fetch-W4TNW4Q7.js → web-fetch-6BRRVQON.js} +22 -5
  388. package/dist/{wiki-generate-T2TJQJUA.js → wiki-generate-XHSJTDOP.js} +120 -113
  389. package/dist/{with-panes-CHFC7HGI.js → with-panes-Z6BTEHMZ.js} +12 -12
  390. package/dist/worker/entry.js +113 -99
  391. package/docs/README.md +28 -27
  392. package/docs/architecture/acp.md +5 -9
  393. package/docs/architecture/alcf-provider.md +0 -3
  394. package/docs/architecture/architecture.md +0 -3
  395. package/docs/architecture/artifact-placement.md +12 -4
  396. package/docs/architecture/artifact-versions.md +0 -3
  397. package/docs/architecture/capacity-and-scheduling.md +0 -3
  398. package/docs/architecture/context-engine.md +0 -3
  399. package/docs/architecture/context-working-set.md +0 -3
  400. package/docs/architecture/dispatch-architecture-rationale.md +0 -3
  401. package/docs/architecture/dispatch-typed-intent.md +0 -3
  402. package/docs/architecture/evidence-and-memory.md +0 -3
  403. package/docs/architecture/library.md +1 -3
  404. package/docs/architecture/middleware-and-components.md +0 -3
  405. package/docs/architecture/model-catalog.md +1 -4
  406. package/docs/architecture/observability.md +0 -3
  407. package/docs/architecture/pi-boundary.md +6 -9
  408. package/docs/architecture/prompt-envelope-and-tools.md +37 -30
  409. package/docs/architecture/provider-adapter-cookbook.md +1 -4
  410. package/docs/architecture/safety-model.md +19 -9
  411. package/docs/architecture/session-lifecycle.md +10 -7
  412. package/docs/architecture/time-conventions.md +0 -3
  413. package/docs/architecture/trace-store.md +28 -20
  414. package/docs/architecture/tui-design.md +38 -18
  415. package/docs/architecture/worker-context.md +1 -3
  416. package/docs/architecture/worker-dispatch-mechanics.md +1 -4
  417. package/docs/guide/authoring-plugins.md +1 -3
  418. package/docs/guide/built-in-agents.md +0 -3
  419. package/docs/guide/commands-and-modes.md +41 -25
  420. package/docs/guide/configuration-and-targets.md +204 -9
  421. package/docs/guide/configuration-reference.md +125 -17
  422. package/docs/guide/environment-variables.md +2 -8
  423. package/docs/guide/exit-codes-and-output.md +0 -3
  424. package/docs/guide/extensions-and-sharing.md +0 -3
  425. package/docs/guide/fleet-dispatch.md +3 -5
  426. package/docs/guide/glossary.md +1 -4
  427. package/docs/guide/harness-extensions.md +0 -2
  428. package/docs/guide/installation-and-lifecycle.md +3 -6
  429. package/docs/guide/interop.md +0 -2
  430. package/docs/guide/panes-and-files.md +0 -3
  431. package/docs/guide/plugins.md +0 -3
  432. package/docs/guide/proactive-memory.md +0 -3
  433. package/docs/guide/resource-library.md +1 -3
  434. package/docs/guide/skills-marketplace.md +0 -2
  435. package/docs/guide/tool-usage.md +166 -67
  436. package/docs/guide/troubleshooting.md +1 -4
  437. package/docs/history/config-knobs-audit.md +0 -3
  438. package/docs/history/release-cut-checklist.md +0 -3
  439. package/docs/process/development-pipeline.md +0 -3
  440. package/docs/process/documentation-coverage.md +3 -3
  441. package/docs/process/documentation-guide.md +16 -22
  442. package/docs/process/eval-runner.md +0 -3
  443. package/docs/process/evals-internal.md +0 -3
  444. package/docs/process/evolution.md +0 -3
  445. package/docs/process/fleet-demo-runbook.md +6 -9
  446. package/docs/process/git-commit-provenance.md +0 -3
  447. package/docs/process/performance-methodology.md +1 -4
  448. package/docs/process/release-cut-checklist.md +114 -221
  449. package/docs/process/scientific-validation.md +23 -6
  450. package/docs/process/tool-audit-v0.4.9.md +357 -0
  451. package/library/registry.yaml +2 -2
  452. package/library/skills/meta/clio-coder-test/SKILL.md +25 -15
  453. package/library/skills/meta/clio-coder-test/evals.md +16 -2
  454. package/library/skills/meta/clio-coder-test/plugin.json +1 -1
  455. package/library/skills/meta/clio-coder-test/references/test-map.md +19 -18
  456. package/library/skills/registry.yaml +2 -2
  457. package/library/skills/skill-marketplace.json +1 -1
  458. package/package.json +13 -11
  459. package/src/cli/argv.ts +31 -0
  460. package/src/cli/clio.ts +17 -13
  461. package/src/cli/config.ts +4 -0
  462. package/src/cli/docs.ts +65 -328
  463. package/src/cli/doctor-panes.ts +1 -1
  464. package/src/cli/doctor.ts +3 -1
  465. package/src/cli/index.ts +17 -2
  466. package/src/cli/mcp.ts +106 -0
  467. package/src/cli/skills-eval.ts +8 -2
  468. package/src/cli/trace.ts +4 -65
  469. package/src/cli/uninstall.ts +26 -0
  470. package/src/cli/upgrade.ts +34 -38
  471. package/src/cli/usage.ts +3 -0
  472. package/src/cli/verifiers.ts +1 -1
  473. package/src/cli/web.ts +79 -0
  474. package/src/core/bash-exec.ts +27 -4
  475. package/src/core/bus-events.ts +3 -4
  476. package/src/core/config.ts +73 -1
  477. package/src/core/defaults.ts +10 -1
  478. package/src/core/domain-loader.ts +37 -28
  479. package/src/core/event-bus.ts +1 -1
  480. package/src/core/run-records.ts +438 -0
  481. package/src/core/safe-exec.ts +506 -56
  482. package/src/core/skill-activation.ts +5 -3
  483. package/src/core/termination.ts +16 -12
  484. package/src/core/tool-names.ts +33 -12
  485. package/src/domains/agents/contract.ts +1 -1
  486. package/src/domains/agents/extension.ts +18 -10
  487. package/src/domains/config/extension.ts +5 -4
  488. package/src/domains/context/clio-md.ts +1 -1
  489. package/src/domains/context/worker/pressure.ts +6 -2
  490. package/src/domains/context/working-set/path-index.ts +7 -2
  491. package/src/domains/dispatch/code-step.ts +7 -2
  492. package/src/domains/dispatch/contract.ts +7 -0
  493. package/src/domains/dispatch/execution-role.ts +3 -3
  494. package/src/domains/dispatch/execution-scheduler.ts +204 -79
  495. package/src/domains/dispatch/extension.ts +206 -26
  496. package/src/domains/dispatch/fleet-preflight.ts +18 -3
  497. package/src/domains/dispatch/fleet-run.ts +1 -0
  498. package/src/domains/dispatch/gate-decisions.ts +3 -3
  499. package/src/domains/dispatch/heartbeat.ts +1 -1
  500. package/src/domains/dispatch/host-verification.ts +16 -14
  501. package/src/domains/dispatch/index.ts +1 -0
  502. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  503. package/src/domains/dispatch/receipt-findings.ts +3 -4
  504. package/src/domains/dispatch/receipt-integrity.ts +3 -0
  505. package/src/domains/dispatch/reservation-store.ts +7 -9
  506. package/src/domains/dispatch/route-facts.ts +1 -1
  507. package/src/domains/dispatch/state.ts +4 -5
  508. package/src/domains/dispatch/types.ts +3 -1
  509. package/src/domains/eval/metrics/tracked.ts +22 -2
  510. package/src/domains/evidence/build.ts +35 -7
  511. package/src/domains/extensions/operator-runtime.ts +3 -1
  512. package/src/domains/gateway/mcp/client.ts +923 -0
  513. package/src/domains/gateway/mcp/config.ts +456 -0
  514. package/src/domains/gateway/mcp/index.ts +88 -0
  515. package/src/domains/gateway/mcp/protocol.ts +273 -0
  516. package/src/domains/gateway/mcp/trust.ts +263 -0
  517. package/src/domains/lifecycle/doctor.ts +17 -3
  518. package/src/domains/middleware/hooks.ts +2 -2
  519. package/src/domains/mux/contract.ts +5 -9
  520. package/src/domains/mux/detect.ts +1 -1
  521. package/src/domains/mux/extension.ts +1 -1
  522. package/src/domains/mux/protocol.ts +5 -7
  523. package/src/domains/mux/socket-client.ts +3 -3
  524. package/src/domains/observability/accountability.ts +2 -2
  525. package/src/domains/observability/background-memory-usage.ts +3 -0
  526. package/src/domains/observability/compaction-usage.ts +2 -0
  527. package/src/domains/observability/contract.ts +7 -3
  528. package/src/domains/observability/cost.ts +5 -0
  529. package/src/domains/observability/evidence-index.ts +2 -2
  530. package/src/domains/observability/extension.ts +1 -0
  531. package/src/domains/observability/out-of-turn-usage.ts +2 -0
  532. package/src/domains/observability/projection.ts +10 -0
  533. package/src/domains/observability/trace-store.ts +65 -5
  534. package/src/domains/prompts/compiler.ts +41 -23
  535. package/src/domains/prompts/extension.ts +4 -17
  536. package/src/domains/prompts/fragments/identity/docs-routing.md +2 -2
  537. package/src/domains/prompts/fragments/operating/skills.md +12 -10
  538. package/src/domains/providers/cache-deployment.ts +147 -0
  539. package/src/domains/providers/catalog.ts +12 -7
  540. package/src/domains/providers/extension.ts +27 -5
  541. package/src/domains/providers/index.ts +6 -1
  542. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +42 -10
  543. package/src/domains/providers/plugins.ts +3 -13
  544. package/src/domains/providers/probe/http.ts +44 -59
  545. package/src/domains/providers/probe/reasoning.ts +2 -0
  546. package/src/domains/providers/runtimes/common/local-synth.ts +4 -0
  547. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +20 -31
  548. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +9 -4
  549. package/src/domains/providers/types/target-descriptor.ts +17 -0
  550. package/src/domains/safety/action-classifier.ts +17 -1
  551. package/src/domains/safety/call-target.ts +14 -0
  552. package/src/domains/safety/contract.ts +1 -1
  553. package/src/domains/safety/finish-contract.ts +9 -3
  554. package/src/domains/safety/loop-detector.ts +1 -1
  555. package/src/domains/safety/policy-engine.ts +7 -0
  556. package/src/domains/safety/protected-artifacts.ts +3 -4
  557. package/src/domains/safety/rejection-feedback.ts +1 -1
  558. package/src/domains/safety/scope.ts +2 -3
  559. package/src/domains/safety/validation-contract.ts +3 -2
  560. package/src/domains/scheduling/budget.ts +5 -3
  561. package/src/domains/scheduling/contract.ts +2 -1
  562. package/src/domains/scheduling/extension.ts +3 -3
  563. package/src/domains/session/compaction/branch-summary.ts +1 -1
  564. package/src/domains/session/compaction/compact.ts +29 -3
  565. package/src/domains/session/compaction/cut-point.ts +1 -1
  566. package/src/domains/session/compaction/tokens.ts +5 -10
  567. package/src/domains/session/contract.ts +1 -1
  568. package/src/domains/session/cwd-fallback.ts +2 -2
  569. package/src/domains/session/entries.ts +1 -0
  570. package/src/domains/session/handoff.ts +5 -1
  571. package/src/domains/session/history.ts +6 -0
  572. package/src/domains/session/manager.ts +14 -7
  573. package/src/domains/session/retry.ts +2 -1
  574. package/src/domains/session/session-artifacts.ts +12 -7
  575. package/src/domains/session/task-board.ts +2 -3
  576. package/src/domains/session/usage.ts +6 -7
  577. package/src/engine/acp/server.ts +11 -0
  578. package/src/engine/ai.ts +2 -0
  579. package/src/engine/apis/openai-completions.ts +17 -4
  580. package/src/engine/loop-guard.ts +7 -0
  581. package/src/engine/prewarm.ts +232 -0
  582. package/src/engine/provider-diagnostics.ts +6 -1
  583. package/src/engine/provider-error-body.ts +65 -0
  584. package/src/engine/session.ts +118 -29
  585. package/src/engine/worker-runtime.ts +3 -0
  586. package/src/entry/boot-options.ts +2 -0
  587. package/src/entry/orchestrator.ts +38 -18
  588. package/src/interactive/chat-loop-messages.ts +3 -0
  589. package/src/interactive/chat-loop-policy.ts +1 -0
  590. package/src/interactive/chat-loop.ts +10 -12
  591. package/src/interactive/chat-panel.ts +23 -9
  592. package/src/interactive/chat-renderer.ts +33 -11
  593. package/src/interactive/clio-editor.ts +13 -5
  594. package/src/interactive/dispatch-board.ts +70 -30
  595. package/src/interactive/editor-submit.ts +30 -25
  596. package/src/interactive/footer/widgets.ts +12 -9
  597. package/src/interactive/interactive-presentation.ts +2 -3
  598. package/src/interactive/mux-bridge.ts +3 -7
  599. package/src/interactive/overlay-general-openers.ts +14 -7
  600. package/src/interactive/overlays/cwd-fallback.ts +1 -1
  601. package/src/interactive/overlays/library-model.ts +114 -35
  602. package/src/interactive/overlays/library.ts +52 -5
  603. package/src/interactive/overlays/list-overlay.ts +4 -1
  604. package/src/interactive/overlays/session-selector.ts +28 -23
  605. package/src/interactive/overlays/settings.ts +20 -1
  606. package/src/interactive/overlays/tree-selector.ts +47 -10
  607. package/src/interactive/panes-runtime.ts +1 -1
  608. package/src/interactive/prewarm.ts +11 -197
  609. package/src/interactive/renderers/compaction-summary.ts +1 -1
  610. package/src/interactive/renderers/provider-error.ts +118 -0
  611. package/src/interactive/renderers/retry-status.ts +59 -23
  612. package/src/interactive/renderers/tool-execution.ts +67 -7
  613. package/src/interactive/renderers/worker-answer.ts +198 -0
  614. package/src/interactive/renderers/worker-entry.ts +57 -163
  615. package/src/interactive/session-usage-reseed.ts +2 -0
  616. package/src/interactive/side-question.ts +2 -0
  617. package/src/interactive/slash-commands.ts +26 -1
  618. package/src/interactive/slash-spec.ts +2 -2
  619. package/src/interactive/theme/labels.ts +66 -30
  620. package/src/interactive/turn-context.ts +1 -0
  621. package/src/interactive/turn-persistence.ts +9 -1
  622. package/src/interactive/turn-prewarm.ts +126 -19
  623. package/src/interactive/turn-recovery.ts +2 -1
  624. package/src/interactive/turn-runtime.ts +36 -5
  625. package/src/interactive/view/artifacts.ts +3 -2
  626. package/src/interactive/view/view-overlay.ts +96 -20
  627. package/src/tools/agent-tools.ts +21 -7
  628. package/src/tools/artifact.ts +16 -8
  629. package/src/tools/bash.ts +90 -11
  630. package/src/tools/bootstrap.ts +42 -4
  631. package/src/tools/builtin-tool-catalog.ts +80 -11
  632. package/src/tools/context/index.ts +27 -31
  633. package/src/tools/context/library.ts +3 -1
  634. package/src/tools/context/surface.ts +12 -26
  635. package/src/tools/core-bootstrap.ts +72 -1
  636. package/src/tools/data/csv.ts +1189 -0
  637. package/src/tools/data/index.ts +308 -0
  638. package/src/tools/data/json.ts +1799 -0
  639. package/src/tools/data/jsonl.ts +561 -0
  640. package/src/tools/data/shared.ts +452 -0
  641. package/src/tools/edit-diff.ts +0 -7
  642. package/src/tools/edit.ts +115 -18
  643. package/src/tools/file-mutation-queue.ts +114 -4
  644. package/src/tools/find.ts +108 -29
  645. package/src/tools/gateway/caps.ts +11 -0
  646. package/src/tools/gateway/clio-context-surface.ts +41 -0
  647. package/src/tools/gateway/clio-context-tools.ts +77 -0
  648. package/src/tools/gateway/data-surface.ts +138 -0
  649. package/src/tools/gateway/data-tool.ts +201 -0
  650. package/src/tools/gateway/index.ts +342 -0
  651. package/src/tools/gateway/mcp-capabilities.ts +469 -0
  652. package/src/tools/grep.ts +88 -33
  653. package/src/tools/harness-extensions.ts +3 -0
  654. package/src/tools/ignore-policy.ts +7 -5
  655. package/src/tools/ls.ts +111 -20
  656. package/src/tools/policy.ts +35 -13
  657. package/src/tools/presentation.ts +6 -0
  658. package/src/tools/read.ts +634 -156
  659. package/src/tools/registry.ts +106 -8
  660. package/src/tools/run-script.ts +997 -0
  661. package/src/tools/spawn-hygiene.ts +157 -5
  662. package/src/tools/surface.ts +163 -0
  663. package/src/tools/verify/authoring.ts +8 -3
  664. package/src/tools/verify/catalog.ts +14 -1
  665. package/src/tools/verify/numeric.ts +367 -59
  666. package/src/tools/verify/perf.ts +171 -9
  667. package/src/tools/verify/scripts.ts +178 -26
  668. package/src/tools/web-fetch-surface.ts +22 -0
  669. package/src/tools/web-fetch.ts +26 -1
  670. package/src/tools/write.ts +45 -19
  671. package/src/worker/spec-contract.ts +27 -0
  672. package/dist/chunk-B6UM3OZC.js +0 -15
  673. package/dist/chunk-GJ24ODAX.js +0 -196
  674. package/dist/chunk-HRAKUPIH.js +0 -57
  675. package/dist/docs-BL7ROUFN.js +0 -292
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Clio session JSONL writer + reader (Phase 3 slice 1).
2
+ * Clio session JSONL writer + reader.
3
3
  *
4
4
  * On-disk layout under `clioStateDir()`:
5
5
  * sessions/<cwdHash>/<sessionId>/
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * Atomicity:
11
11
  * - Appends go to an O_APPEND fd held for the writer's lifetime; each line
12
- * is one write(2). fsync is debounced after appends and forced on
12
+ * uses complete byte writes. fsync is debounced after appends and forced on
13
13
  * checkpoint (`persistTree`) and `close`. A torn last line from a crash
14
14
  * is tolerated by the reader (skipped with a warning).
15
15
  * - `replaceEntries` rewrites current.jsonl via `writeJsonlFileAtomic`
@@ -28,6 +28,7 @@ import {
28
28
  constants as fsConstants,
29
29
  fstatSync,
30
30
  fsyncSync,
31
+ ftruncateSync,
31
32
  mkdirSync,
32
33
  openSync,
33
34
  readdirSync,
@@ -35,6 +36,7 @@ import {
35
36
  readSync,
36
37
  renameSync,
37
38
  statSync,
39
+ unlinkSync,
38
40
  writeSync,
39
41
  } from "node:fs";
40
42
  import { dirname, join, resolve } from "node:path";
@@ -197,6 +199,31 @@ function serializeJsonl(entries: ReadonlyArray<unknown>): string {
197
199
  return `${lines.join("\n")}\n`;
198
200
  }
199
201
 
202
+ /** Complete UTF-8 bytes even when write(2) makes only partial progress. */
203
+ function writeAll(fd: number, bytes: Buffer): void {
204
+ let offset = 0;
205
+ while (offset < bytes.length) {
206
+ const written = writeSync(fd, bytes, offset, bytes.length - offset);
207
+ if (written <= 0) throw new Error(`session JSONL write made no progress after ${offset} of ${bytes.length} bytes`);
208
+ offset += written;
209
+ }
210
+ }
211
+
212
+ /** Roll back a failed append so a retry cannot fuse onto its partial record. */
213
+ function appendAll(fd: number, bytes: Buffer): void {
214
+ const size = fstatSync(fd).size;
215
+ try {
216
+ writeAll(fd, bytes);
217
+ } catch (error) {
218
+ try {
219
+ ftruncateSync(fd, size);
220
+ } catch (rollbackError) {
221
+ throw new AggregateError([error, rollbackError], "session JSONL append and rollback failed; reopen to recover");
222
+ }
223
+ throw error;
224
+ }
225
+ }
226
+
200
227
  /**
201
228
  * Rewrite a JSONL file through `<target>.tmp` and rename over the target.
202
229
  * A crash or interruption before the rename leaves the original target
@@ -213,10 +240,21 @@ function writeJsonlFileAtomic(
213
240
  const tmp = `${targetPath}.tmp`;
214
241
  const fd = openSync(tmp, "w");
215
242
  try {
216
- writeSync(fd, body);
217
- fsyncSync(fd);
218
- } finally {
219
- closeSync(fd);
243
+ try {
244
+ writeAll(fd, Buffer.from(body, "utf8"));
245
+ fsyncSync(fd);
246
+ } finally {
247
+ closeSync(fd);
248
+ }
249
+ } catch (error) {
250
+ // A missing target can recover from .tmp, so an incomplete write
251
+ // must not leave a candidate that recovery could promote.
252
+ try {
253
+ unlinkSync(tmp);
254
+ } catch (cleanupError) {
255
+ throw new AggregateError([error, cleanupError], "session JSONL write and temporary cleanup failed");
256
+ }
257
+ throw error;
220
258
  }
221
259
  options.beforeRename?.(tmp, targetPath);
222
260
  renameSync(tmp, targetPath);
@@ -633,10 +671,7 @@ export function appendSessionFileEntry(targetPath: string, entry: unknown): void
633
671
  const line = Buffer.from(`${endsWithNewline(appendPath) ? "" : "\n"}${serialized}\n`, "utf8");
634
672
  const fd = openSync(appendPath, fsConstants.O_WRONLY | fsConstants.O_APPEND);
635
673
  try {
636
- const written = writeSync(fd, line);
637
- if (written !== line.length) {
638
- throw new Error(`short session JSONL append: wrote ${written} of ${line.length} bytes`);
639
- }
674
+ appendAll(fd, line);
640
675
  fsyncSync(fd);
641
676
  } finally {
642
677
  closeSync(fd);
@@ -655,6 +690,9 @@ function createWriter(
655
690
  let closed = false;
656
691
  let appendFd: number | null = null;
657
692
  let fsyncTimer: NodeJS.Timeout | null = null;
693
+ // Descriptor cleanup must not discard accepted bytes or rollback changes
694
+ // still owed to the next debounce, checkpoint, flush, or close.
695
+ let pendingFsync = false;
658
696
 
659
697
  // One-time normalization for resumes of pre-header files: rewrite once so
660
698
  // fd-appended lines land after a header. Disk and memory match from here on.
@@ -668,7 +706,10 @@ function createWriter(
668
706
  appendFd = openSync(paths.current, "a");
669
707
  // Terminating the fragment keeps the reader's torn-tail behavior:
670
708
  // it skips exactly one invalid line with a warning.
671
- if (tornTail) writeSync(appendFd, "\n");
709
+ if (tornTail) {
710
+ pendingFsync = true;
711
+ appendAll(appendFd, Buffer.from("\n"));
712
+ }
672
713
  return appendFd;
673
714
  }
674
715
 
@@ -676,28 +717,52 @@ function createWriter(
676
717
  if (fsyncTimer !== null) return;
677
718
  fsyncTimer = setTimeout(() => {
678
719
  fsyncTimer = null;
679
- if (appendFd === null) return;
680
720
  try {
681
- fsyncSync(appendFd);
721
+ flushPendingAppends();
682
722
  } catch {
683
- // A concurrent close already flushed and released the fd.
723
+ // Keep the obligation pending. Explicit flush/checkpoint/close
724
+ // retries and reports an error if storage is still unavailable.
684
725
  }
685
726
  }, APPEND_FSYNC_DEBOUNCE_MS);
686
727
  fsyncTimer.unref?.();
687
728
  }
688
729
 
730
+ function flushPendingAppends(): void {
731
+ if (appendFd !== null) {
732
+ fsyncSync(appendFd);
733
+ pendingFsync = false;
734
+ return;
735
+ }
736
+ if (!pendingFsync || stateRootRemoved()) return;
737
+ // Reopen without O_CREAT or tail normalization: flushing after a failed
738
+ // append must neither recreate removed state nor alter retained bytes.
739
+ const fd = openSync(paths.current, fsConstants.O_WRONLY | fsConstants.O_APPEND);
740
+ try {
741
+ fsyncSync(fd);
742
+ } catch (error) {
743
+ try {
744
+ closeSync(fd);
745
+ } catch (closeError) {
746
+ throw new AggregateError([error, closeError], "session JSONL flush and close failed");
747
+ }
748
+ throw error;
749
+ }
750
+ closeSync(fd);
751
+ pendingFsync = false;
752
+ }
753
+
689
754
  function closeAppendFd(opts: { flush: boolean }): void {
755
+ if (opts.flush) flushPendingAppends();
690
756
  if (fsyncTimer !== null) {
691
757
  clearTimeout(fsyncTimer);
692
758
  fsyncTimer = null;
693
759
  }
694
760
  if (appendFd === null) return;
695
- try {
696
- if (opts.flush) fsyncSync(appendFd);
697
- } finally {
698
- closeSync(appendFd);
699
- appendFd = null;
700
- }
761
+ const fd = appendFd;
762
+ // A failed close can already have released the OS descriptor. Never
763
+ // retain that ambiguous number for a later append or duplicate close.
764
+ appendFd = null;
765
+ closeSync(fd);
701
766
  }
702
767
 
703
768
  function appendLine(entry: unknown): void {
@@ -705,7 +770,21 @@ function createWriter(
705
770
  if (serialized === undefined) {
706
771
  throw new Error("session JSONL entry is not serializable");
707
772
  }
708
- writeSync(openAppendFd(), `${serialized}\n`);
773
+ try {
774
+ const fd = openAppendFd();
775
+ pendingFsync = true;
776
+ appendAll(fd, Buffer.from(`${serialized}\n`, "utf8"));
777
+ } catch (error) {
778
+ // Reopening rechecks the tail even if rollback itself failed.
779
+ try {
780
+ closeAppendFd({ flush: false });
781
+ } catch (closeError) {
782
+ throw new AggregateError([error, closeError], "session JSONL append and close failed");
783
+ } finally {
784
+ scheduleFsync();
785
+ }
786
+ throw error;
787
+ }
709
788
  scheduleFsync();
710
789
  }
711
790
 
@@ -747,7 +826,7 @@ function createWriter(
747
826
  },
748
827
  async persistTree(): Promise<void> {
749
828
  // Checkpoint: make appended lines durable alongside the tree.
750
- if (appendFd !== null) fsyncSync(appendFd);
829
+ flushPendingAppends();
751
830
  // `paths` was resolved at construction, but atomicWrite mkdirs the
752
831
  // session directory again, so an uninstall that has already removed the
753
832
  // state root would be undone here. Fsyncing the held fd first is safe
@@ -756,7 +835,7 @@ function createWriter(
756
835
  atomicWrite(paths.tree, JSON.stringify(tree, null, 2));
757
836
  },
758
837
  flushAppends(): void {
759
- if (appendFd !== null) fsyncSync(appendFd);
838
+ flushPendingAppends();
760
839
  },
761
840
  async close(): Promise<void> {
762
841
  if (closed) return;
@@ -827,7 +906,10 @@ export function openSession(id: string): ClioSessionReader {
827
906
  };
828
907
  }
829
908
 
830
- export function resumeSession(id: string): {
909
+ export function resumeSession(
910
+ id: string,
911
+ options: { sessionFormatVersion?: number } = {},
912
+ ): {
831
913
  meta: ClioSessionMeta;
832
914
  writer: ClioSessionWriter;
833
915
  tree: ReadonlyArray<SessionTreeNode>;
@@ -835,13 +917,20 @@ export function resumeSession(id: string): {
835
917
  const dir = findSessionDir(id);
836
918
  const metaPath = join(dir, "meta.json");
837
919
  const meta = readMetaFile(metaPath);
838
- // resume reopens an active session; clear endedAt if it was set by a prior close
839
- if (meta.endedAt !== null) {
840
- meta.endedAt = null;
841
- atomicWrite(metaPath, JSON.stringify(meta, null, 2));
842
- }
843
920
  const existingFileEntries = readSessionFileEntries(join(dir, "current.jsonl"));
844
921
  const existingTree = recoverTreeFromJsonl(readTreeFile(join(dir, "tree.json")), existingFileEntries);
845
922
  const writer = createWriter(meta, existingTree, existingFileEntries);
923
+ // Prepare headerless ledgers before publishing that a closed session has
924
+ // reopened. A failed normalization must preserve its prior ended state.
925
+ // Reopening and a migration restamp are one atomic publication: a refused
926
+ // resume can never leave the session marked open under its old version.
927
+ const restamp = options.sessionFormatVersion;
928
+ const restamped = restamp !== undefined && meta.sessionFormatVersion !== restamp;
929
+ if (meta.endedAt !== null || restamped) {
930
+ const reopened = { ...meta, endedAt: null, ...(restamped ? { sessionFormatVersion: restamp } : {}) };
931
+ atomicWrite(metaPath, JSON.stringify(reopened, null, 2));
932
+ meta.endedAt = null;
933
+ if (restamped) meta.sessionFormatVersion = restamp;
934
+ }
846
935
  return { meta, writer, tree: existingTree };
847
936
  }
@@ -621,6 +621,9 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
621
621
  correlationId: `worker-model-round-${workerModelRound}`,
622
622
  toolResultMaxBytes: workerSettings.context.toolResultMaxBytes,
623
623
  supportsImages: model.input.includes("image"),
624
+ // The admitted capability list, so the gateway calls only what the
625
+ // recipe declared: the same bound the attached schemas already honor.
626
+ allowedTools: input.allowedTools,
624
627
  ...(agentSkillPolicy ? { pendingSkillPolicy: agentSkillPolicy } : {}),
625
628
  }),
626
629
  });
@@ -28,6 +28,8 @@ export interface BootOptions {
28
28
  startupSettings?: Readonly<ClioSettings>;
29
29
  /** `--with-panes` / `--no-panes`. The flag beats `panes.enabled` in both directions. */
30
30
  panes?: "with" | "without";
31
+ /** Global `--autonomy <level>`: a one-session override for the interactive app; settings.yaml is untouched. */
32
+ autonomy?: AutonomyLevel;
31
33
  headless?: {
32
34
  prompt: string;
33
35
  images?: ReadonlyArray<ImageContent>;
@@ -36,7 +36,7 @@ import {
36
36
  import { getSharedBus } from "../core/shared-bus.js";
37
37
  import { isSkillActivation } from "../core/skill-activation.js";
38
38
  import { StartupTimer } from "../core/startup-timer.js";
39
- import { getTerminationCoordinator } from "../core/termination.js";
39
+ import { getTerminationCoordinator, resolveShutdownHookBudgetMs } from "../core/termination.js";
40
40
  import { captureProjectSurface, projectSurfaceTrustNotice } from "../core/workspace-trust.js";
41
41
  import { clioDataDir, clioStateDir } from "../core/xdg.js";
42
42
  import { renderAgentCatalogSectionsFromSpecs } from "../domains/agents/catalog.js";
@@ -120,6 +120,7 @@ import {
120
120
  isOrchestratorEligibleRuntime,
121
121
  normalizeCostProvenance,
122
122
  ProvidersDomainModule,
123
+ probeCapabilitiesForModel,
123
124
  refineRuntimeTargetWithModelHints,
124
125
  registerForegroundStream,
125
126
  resolveEndpointCapacities,
@@ -603,6 +604,17 @@ function agentRoleToolWarnings(providers: ProvidersContract, settings: Readonly<
603
604
  if (!status) continue;
604
605
  const capabilities = resolveModelCapabilities(status, wireModelId, providers.knowledgeBase);
605
606
  if (supportsAgentRoleTools(capabilities)) continue;
607
+ // A target that was never probed has reported nothing about this model:
608
+ // the flag is only the runtime's conservative floor. Dispatch admission
609
+ // probes the route itself before it refuses a worker.
610
+ const declared =
611
+ status.target.capabilities?.tools ?? providers.knowledgeBase?.lookup(wireModelId)?.entry.capabilities?.tools;
612
+ if (
613
+ declared === undefined &&
614
+ status.health.lastCheckAt === null &&
615
+ probeCapabilitiesForModel(status, wireModelId) === null
616
+ )
617
+ continue;
606
618
  warnings.push(
607
619
  `${role.label} model '${wireModelId}' on target '${targetId}' ${AGENT_ROLE_TOOLS_REQUIRED_REASON}. ` +
608
620
  `Pick another model, or state the correction in a model-catalog.d entry if the provider's flag is wrong.`,
@@ -1184,7 +1196,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1184
1196
  createDispatchDomainModule({
1185
1197
  getSettings: () => effectiveSettingsForDispatch?.(),
1186
1198
  getProtectedArtifactState: () => protectedArtifactStateForDispatch?.() ?? { artifacts: [] },
1187
- autonomyOverride: options.headless?.autonomy !== undefined,
1199
+ autonomyOverride: (options.headless?.autonomy ?? options.autonomy) !== undefined,
1188
1200
  // The domain owns the durable journal here, not the dispatch
1189
1201
  // tool's event registry: `/run`, a watchdog run, and a model
1190
1202
  // dispatch all have to leave the same transcript behind, and only
@@ -1203,8 +1215,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1203
1215
  await dispatch.drain();
1204
1216
  });
1205
1217
  }
1206
- termination.onPersist(async () => {
1207
- await result.stop();
1218
+ // The loader caps each domain separately. The outer hook must allow the
1219
+ // whole sequence to finish, including cleanup after a timed-out domain.
1220
+ termination.onPersist(() => result.stop(), {
1221
+ timeoutMs: Math.min(2 ** 31 - 1, (result.loaded.length + 1) * resolveShutdownHookBudgetMs()),
1208
1222
  });
1209
1223
 
1210
1224
  bus.emit(BusChannels.SessionStart, { at: Date.now() });
@@ -1373,12 +1387,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1373
1387
  // this boot projection below.
1374
1388
  configureRunEventJournal(resolvedSettings.fleet.history.journal);
1375
1389
 
1376
- // Guard registrations on the middleware contract, in order: loop guard,
1377
- // protected artifacts (last among guards so it absorbs protect_path effects
1378
- // from everything before it), dispatch dedup. Workers register their own
1379
- // loop guard and protected-artifacts instances inside their subprocess in
1380
- // worker-runtime.ts; the orchestrator instances carry the bus and the
1381
- // session persistence sink.
1390
+ // Register the loop and dispatch guards first. The protected-artifact guard
1391
+ // is constructed here but registered after user hooks below, so it can
1392
+ // absorb their protect_path effects. Workers register their own guards in
1393
+ // worker-runtime.ts; these instances carry the bus and session persistence.
1382
1394
  middleware.registerHook(
1383
1395
  createLoopGuardRegistration({
1384
1396
  safety,
@@ -1427,7 +1439,6 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1427
1439
  }
1428
1440
  return protectedArtifactsGuard.state();
1429
1441
  };
1430
- middleware.registerHook(protectedArtifactsGuard);
1431
1442
  middleware.registerHook(createDispatchDedupRegistration());
1432
1443
  // Observers run after the guards; they emit no effects and their sinks are
1433
1444
  // best-effort (session ledger, codewiki refresh).
@@ -1525,9 +1536,9 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1525
1536
  }
1526
1537
  // User-defined hooks: extensions and the project (.clio-coder/hooks.yaml,
1527
1538
  // .clio-coder/hooks.local.yaml) declare a conservative, receipted hook set on the
1528
- // same effect machinery. They register after the guards, so safety stays
1529
- // authoritative: a hook may add effects (including request block_tool) but
1530
- // cannot grant a permission safety would deny. Loading is best-effort.
1539
+ // same effect machinery. A hook may add effects (including request block_tool)
1540
+ // but cannot grant a permission safety would deny. The protected-artifact
1541
+ // guard follows them to consume protect_path before tool execution.
1531
1542
  // The coordinator is the only writer of the "user-hooks" owner and the only
1532
1543
  // caller of the extensions reload; it publishes the extension generation
1533
1544
  // and the hook registrations with two adjacent assignments on one stack
@@ -1535,7 +1546,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1535
1546
  // published here too (the extensions bundle publishes nothing at start),
1536
1547
  // so no consumer ever sees extension resources paired with hooks from a
1537
1548
  // different generation. The owner slot is anchored here, so user hooks
1538
- // keep evaluating after the guards and before the assessors below.
1549
+ // keep evaluating before the protection consumer and assessors below.
1539
1550
  const hookReceiptLog = createHookReceiptLog({ persistPath: join(clioStateDir(), "hook-receipts.json") });
1540
1551
  let bootHookNotices = true;
1541
1552
  const reloadPlugins = () =>
@@ -1556,6 +1567,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1556
1567
  },
1557
1568
  });
1558
1569
  extensionReload.applyBoot();
1570
+ middleware.registerHook(protectedArtifactsGuard);
1559
1571
  bootHookNotices = false;
1560
1572
  termination.onDrain(() => hookReceiptLog.flush());
1561
1573
  // Autonomy is hot-reloaded for interactive and headless admissions. ACP
@@ -1568,6 +1580,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1568
1580
  const resolveBaselineAutonomy = (): AutonomyLevel =>
1569
1581
  effectiveSettingsForDispatch?.().safety.autonomy ??
1570
1582
  options.headless?.autonomy ??
1583
+ options.autonomy ??
1571
1584
  (config?.get() ?? readSettings()).safety.autonomy ??
1572
1585
  "auto-edit";
1573
1586
  const resolveEffectiveAutonomy = (): AutonomyLevel => activeAcpSessionAutonomy ?? resolveBaselineAutonomy();
@@ -1726,6 +1739,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1726
1739
  })
1727
1740
  : null;
1728
1741
  registerAllTools(toolRegistry, {
1742
+ termination,
1729
1743
  captureWorkerContext: () => chat.captureWorkerContext?.() ?? null,
1730
1744
  ...(session
1731
1745
  ? {
@@ -1788,8 +1802,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1788
1802
  // flag was keyed by the bare word, which wrote a top-level `autonomy` key
1789
1803
  // nothing reads, so `run --autonomy full-auto` compiled and admitted at
1790
1804
  // whatever settings.yaml said.
1805
+ // The interactive `clio-coder --autonomy <level>` seeds the same override.
1806
+ const startupAutonomy = options.headless?.autonomy ?? options.autonomy;
1791
1807
  const sessionOverrides: SessionOverrides = new Map(
1792
- options.headless?.autonomy === undefined ? [] : [["safety.autonomy", options.headless.autonomy]],
1808
+ startupAutonomy === undefined ? [] : [["safety.autonomy", startupAutonomy]],
1793
1809
  );
1794
1810
  // The effective view is derived by deep-cloning the saved snapshot, and it
1795
1811
  // is read on the tool-admission hot path (every call resolves autonomy
@@ -1836,8 +1852,12 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1836
1852
  // The config bundle publishes saved values on reload; session-scoped
1837
1853
  // overrides must win, so re-derive every process-local projection from the
1838
1854
  // effective session view after it.
1839
- const unsubscribeSettingsProjectionSync = bus.on(BusChannels.ConfigHotReload, () => bumpSessionState());
1840
- termination.onDrain(() => unsubscribeSettingsProjectionSync());
1855
+ const unsubscribeSettingsProjectionSync = [BusChannels.ConfigHotReload, BusChannels.ConfigNextTurn].map((channel) =>
1856
+ bus.on(channel, () => bumpSessionState()),
1857
+ );
1858
+ termination.onDrain(() => {
1859
+ for (const unsubscribe of unsubscribeSettingsProjectionSync) unsubscribe();
1860
+ });
1841
1861
  const getTaskMemorySeedOffer = (): { source: string; count: number } | null => {
1842
1862
  return taskMemoryHandoffSeedOffer(process.cwd(), getCurrentSettings().context.memory.enabled);
1843
1863
  };
@@ -362,6 +362,7 @@ export interface RunUsageSummary {
362
362
  output: number;
363
363
  cacheRead: number;
364
364
  cacheWrite: number;
365
+ cacheWrite1h?: number;
365
366
  reasoning: number;
366
367
  apiCalls: number;
367
368
  hadReasoning: boolean;
@@ -407,6 +408,7 @@ export function sumRunUsage(messages: ReadonlyArray<AgentMessage>): RunUsageSumm
407
408
  output?: unknown;
408
409
  cacheRead?: unknown;
409
410
  cacheWrite?: unknown;
411
+ cacheWrite1h?: unknown;
410
412
  totalTokens?: unknown;
411
413
  cost?: { total?: unknown };
412
414
  };
@@ -432,6 +434,7 @@ export function sumRunUsage(messages: ReadonlyArray<AgentMessage>): RunUsageSumm
432
434
  summary.output += output;
433
435
  summary.cacheRead += cacheRead;
434
436
  summary.cacheWrite += cacheWrite;
437
+ if (typeof usage.cacheWrite1h === "number") summary.cacheWrite1h = (summary.cacheWrite1h ?? 0) + usage.cacheWrite1h;
435
438
  const reasoning = extractReasoningTokens(usage);
436
439
  if (reasoning !== null) {
437
440
  summary.reasoning += reasoning;
@@ -14,5 +14,6 @@ export function normalizeRetrySettings(raw: RawRetrySettings): RetrySettings {
14
14
  baseDelayMs: normalizeNonNegativeInteger(raw?.baseDelayMs, DEFAULT_RETRY_SETTINGS.baseDelayMs),
15
15
  maxDelayMs: normalizeNonNegativeInteger(raw?.maxDelayMs, DEFAULT_RETRY_SETTINGS.maxDelayMs),
16
16
  streamStallMs: normalizeNonNegativeInteger(raw?.streamStallMs, DEFAULT_RETRY_SETTINGS.streamStallMs),
17
+ firstTokenStallMs: normalizeNonNegativeInteger(raw?.firstTokenStallMs, DEFAULT_RETRY_SETTINGS.firstTokenStallMs),
17
18
  };
18
19
  }
@@ -345,8 +345,8 @@ export interface ChatLoop {
345
345
  * in-memory `state.messages` for a single bridge message carrying the
346
346
  * summary, and emit the standard summary notice. Used by `/context compact`
347
347
  * slash command so the next user turn ships only the bridge plus the new
348
- * text to the provider (slice 12.5b bug 4). Silent no-op when no session
349
- * or no compaction deps are wired; in both cases emits a user-visible
348
+ * text to the provider. When no session or compaction dependencies are
349
+ * wired, it skips compaction and emits a user-visible
350
350
  * notice so the `/context compact` handler does not have to mirror the logic.
351
351
  */
352
352
  compact(instructions?: string): Promise<void>;
@@ -686,10 +686,13 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
686
686
  (policy?.requests.length ?? 0) > 0)
687
687
  ) {
688
688
  const entries = filterEntriesToActivePath(deps.readSessionEntries?.() ?? [], state.lastTurnId ?? undefined);
689
+ // A loaded skill that declares no tool narrowing arms no surface, yet its
690
+ // instructions are in context. Record it from the loading policy: an
691
+ // unknown selection would block every later compaction of this session.
689
692
  const selection = next
690
693
  ? mainSkillContextState(entries, next)
691
- : (policy?.loadedSkillNames.size ?? 0) > 0
692
- ? null
694
+ : policy !== undefined && policy.loadedSkillNames.size > 0
695
+ ? mainSkillContextState(entries, policy)
693
696
  : { version: 1 as const, activationRefs: [] };
694
697
  const data = selection ?? { version: 1 as const, activationRefs: [], unknown: true as const };
695
698
  if (JSON.stringify(data) !== JSON.stringify(latestSkillContextState(entries))) {
@@ -862,13 +865,6 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
862
865
  deps.bus?.on(BusChannels.ConfigHotReload, () => {
863
866
  context.invalidateSessionPromptCache();
864
867
  }) ?? null;
865
- // A committed extension generation with new content can change the skill
866
- // and prompt inputs the session prompt compiles from; same invalidation.
867
- const unsubscribeExtensionsReload =
868
- deps.bus?.on(BusChannels.ExtensionsReloaded, (payload) => {
869
- if (payload.changed) context.invalidateSessionPromptCache();
870
- }) ?? null;
871
-
872
868
  const unsubscribePluginsReload =
873
869
  deps.bus?.on(BusChannels.PluginsReloaded, () => {
874
870
  context.invalidateSessionPromptCache();
@@ -981,6 +977,7 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
981
977
  output: usage.output,
982
978
  cacheRead: usage.cacheRead,
983
979
  cacheWrite: usage.cacheWrite,
980
+ ...(usage.cacheWrite1h === undefined ? {} : { cacheWrite1h: usage.cacheWrite1h }),
984
981
  reasoningTokens: usage.reasoning,
985
982
  totalTokens: usage.totalTokens,
986
983
  apiCalls: 1,
@@ -1004,6 +1001,7 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
1004
1001
  output: usage.output,
1005
1002
  cacheRead: usage.cacheRead,
1006
1003
  cacheWrite: usage.cacheWrite,
1004
+ ...(usage.cacheWrite1h === undefined ? {} : { cacheWrite1h: usage.cacheWrite1h }),
1007
1005
  reasoning: usage.reasoning,
1008
1006
  totalTokens: usage.totalTokens,
1009
1007
  costUsd: usage.costUsd,
@@ -1294,6 +1292,7 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
1294
1292
  images,
1295
1293
  options.requestContinuation === true,
1296
1294
  text,
1295
+ options.display?.text,
1297
1296
  );
1298
1297
  // An interrupt was submitted while a run was active, so no caller drew
1299
1298
  // it in the transcript; render it here, after the cancel notice and the
@@ -1572,7 +1571,6 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
1572
1571
 
1573
1572
  dispose(): void {
1574
1573
  unsubscribeConfigReload?.();
1575
- unsubscribeExtensionsReload?.();
1576
1574
  unsubscribePluginsReload?.();
1577
1575
  unsubscribeSynthesisLock?.();
1578
1576
  unsubscribePrewarmCompaction();
@@ -12,7 +12,8 @@ import { codeInk } from "./renderers/code-ink.js";
12
12
  import { createMermaidMarkdownTransform } from "./renderers/mermaid.js";
13
13
  import { styleTaggedNotice } from "./renderers/notice.js";
14
14
  import { previewBudget, previewRows } from "./renderers/preview.js";
15
- import { formatRetryStatus } from "./renderers/retry-status.js";
15
+ import { presentProviderError, providerErrorEvidence } from "./renderers/provider-error.js";
16
+ import { renderRetryStatus } from "./renderers/retry-status.js";
16
17
  import {
17
18
  canGroupObservation,
18
19
  renderToolAwaitingApproval,
@@ -223,7 +224,12 @@ type AssistantSegment = TextSegment | ToolSegment | ErrorSegment | ThinkingSegme
223
224
  * A caller-rendered block receives the frame's transcript detail policy so a
224
225
  * block such as the operator's `!` bash row follows the same preset as the panel. Blocks that ignore it are unaffected.
225
226
  */
226
- type ReplayBlockRenderer = (width: number, detail: TranscriptDetailPolicy, unbounded?: boolean) => string[];
227
+ type ReplayBlockRenderer = (
228
+ width: number,
229
+ detail: TranscriptDetailPolicy,
230
+ unbounded?: boolean,
231
+ terminalRows?: number,
232
+ ) => string[];
227
233
 
228
234
  type TranscriptEntry =
229
235
  | { role: "user"; text: string; status?: () => UserTurnStatus }
@@ -460,7 +466,7 @@ function scopeTerminalErrorAfterSuccessfulTool(
460
466
  const reason = terminalError.slice("[error] ".length);
461
467
  const timedOut = /\b(?:timed?\s*out|timeout)\b/i.test(reason);
462
468
  const modelFailure = timedOut
463
- ? "main model response timed out after successful tool result"
469
+ ? `main model response timed out after successful tool result: ${reason}`
464
470
  : `main model response failed after successful tool result: ${reason}`;
465
471
  const detachedDispatchSucceeded = successfulTools.some(
466
472
  (segment) =>
@@ -604,9 +610,9 @@ function renderTextSegmentLines(seg: TextSegment, width: number): string[] {
604
610
  * message text rather than plain markdown, so a failed turn is visibly a
605
611
  * failure. Each source line wraps to width and carries the error color.
606
612
  */
607
- function renderErrorSegmentLines(seg: ErrorSegment, width: number): string[] {
613
+ function renderErrorSegmentLines(seg: ErrorSegment, width: number, unbounded: boolean): string[] {
608
614
  const out: string[] = [];
609
- for (const line of seg.text.split("\n")) {
615
+ for (const line of (unbounded ? providerErrorEvidence(seg.text) : presentProviderError(seg.text)).split("\n")) {
610
616
  for (const wrapped of wrapTextWithAnsi(line, width)) {
611
617
  out.push(`${RED_CRIT}${wrapped}${RESET}`);
612
618
  }
@@ -813,7 +819,7 @@ function renderEntryLines(
813
819
  terminalRows: number,
814
820
  ): string[] {
815
821
  if (entry.role === "replayBlock") {
816
- return entry.renderBlock(width, detail);
822
+ return entry.renderBlock(width, detail, unboundedToolBodies, terminalRows);
817
823
  }
818
824
  if (entry.role === "user") {
819
825
  const contentWidth = Math.max(1, width - PROSE_GUTTER_WIDTH);
@@ -827,7 +833,7 @@ function renderEntryLines(
827
833
  return rendered;
828
834
  }
829
835
  if (entry.role === "retryStatus") {
830
- return wrapTextWithAnsi(formatRetryStatus(entry.status), width);
836
+ return renderRetryStatus(entry.status, width, detail, unboundedToolBodies, terminalRows);
831
837
  }
832
838
  if (entry.role === "worker") {
833
839
  return renderWorkerEntryLines(entry.state, width, { detail, terminalRows, unbounded: unboundedToolBodies });
@@ -888,8 +894,13 @@ function renderEntryLines(
888
894
  labeled = true;
889
895
  continue;
890
896
  }
891
- const rendered =
892
- seg.kind === "text" ? renderTextSegmentLines(seg, proseWidth) : renderErrorSegmentLines(seg, proseWidth);
897
+ let rendered =
898
+ seg.kind === "text"
899
+ ? renderTextSegmentLines(seg, proseWidth)
900
+ : renderErrorSegmentLines(seg, proseWidth, unboundedToolBodies);
901
+ if (seg.kind === "error" && !unboundedToolBodies) {
902
+ rendered = previewRows(rendered, previewBudget(detail.errorRows, terminalRows), proseWidth);
903
+ }
893
904
  if (rendered.length === 0) continue;
894
905
  const isSkillSuggestion = seg.kind === "text" && findSkillSuggestionLine(seg) !== null;
895
906
  if (!labeled && !isSkillSuggestion) {
@@ -1331,6 +1342,7 @@ export function createChatPanel(options: ChatPanelOptions = {}): ChatPanel {
1331
1342
  for (const entry of transcript) {
1332
1343
  if (entry.role === "assistant") {
1333
1344
  for (const seg of entry.segments) {
1345
+ if (seg.kind === "error") add("Provider or terminal error", () => providerErrorEvidence(seg.text).split("\n"));
1334
1346
  if (seg.kind === "thinking" && seg.text) add("Thinking · supplied reasoning", () => seg.text.split("\n"));
1335
1347
  if (seg.kind === "tool")
1336
1348
  add(`${seg.name} · ${seg.id}`, () =>
@@ -1350,6 +1362,8 @@ export function createChatPanel(options: ChatPanelOptions = {}): ChatPanel {
1350
1362
  ),
1351
1363
  );
1352
1364
  }
1365
+ } else if (entry.role === "retryStatus" && entry.status.errorMessage) {
1366
+ add("Provider retry diagnostic", () => providerErrorEvidence(entry.status.errorMessage ?? "").split("\n"));
1353
1367
  } else if (entry.role === "worker") {
1354
1368
  add(`${entry.state.agentId} · worker ${entry.state.runId}`, () =>
1355
1369
  renderWorkerEntryLines(entry.state, 120, { unbounded: true }),