@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
@@ -21,7 +21,7 @@ import { BusChannels, type DispatchCompletedPayload, type DispatchRunIdentity }
21
21
  import { DEFAULT_SETTINGS, type DelegationToolGovernance } from "../../core/defaults.js";
22
22
  import type { DomainBundle, DomainContext, DomainExtension } from "../../core/domain-loader.js";
23
23
  import { gatewayRoutingObservationFromRecord } from "../../core/gateway-routing.js";
24
- import { GUARDRAIL_DEFAULTS } from "../../core/guardrails.js";
24
+ import { GUARDRAIL_DEFAULTS, resolveGuardrail } from "../../core/guardrails.js";
25
25
  import { readClioVersion, readPiMonoVersion } from "../../core/package-root.js";
26
26
  import { canonicalizeExistingPath } from "../../core/path-canonical.js";
27
27
  import { protectedResidencyModels } from "../../core/residency-protection.js";
@@ -46,6 +46,7 @@ import { WORKER_RUNTIME_MEDIATES_CLIO_DISPATCH } from "../../engine/worker-runti
46
46
  import { toolPromptHintsForNames } from "../../tools/builtin-tool-catalog.js";
47
47
  import { networkToolsDisabled } from "../../tools/network-policy.js";
48
48
  import { applyToolProfile, assertToolProfileEnforceable, type ToolProfileName } from "../../tools/profiles.js";
49
+ import { withGatewayForCapabilities } from "../../tools/surface.js";
49
50
  import {
50
51
  applyTaskWorktree,
51
52
  cleanupTaskWorktree,
@@ -325,7 +326,10 @@ interface RunTokenMeter {
325
326
  outputTokens: number;
326
327
  cacheReadTokens: number;
327
328
  cacheWriteTokens: number;
329
+ cacheWrite1hTokens?: number;
328
330
  reasoningTokens: number;
331
+ /** Native calls are priced individually by the SDK, including cache TTLs and context tiers. */
332
+ costUsd?: number;
329
333
  }
330
334
 
331
335
  interface ActiveRun {
@@ -458,6 +462,7 @@ function sealRouteDecision(draft: RunReceiptDraft, decision: RouteDecisionV1): R
458
462
  export const UNKNOWN_PRICING_ADMISSION_ESTIMATE_USD = 1;
459
463
 
460
464
  function calculateUsageCostUsd(meter: RunTokenMeter, pricing: EffectivePricing["rates"]): number {
465
+ if (meter.costUsd !== undefined) return meter.costUsd;
461
466
  if (pricing === null) return 0;
462
467
  return (
463
468
  (meter.inputTokens * pricing.input +
@@ -468,6 +473,39 @@ function calculateUsageCostUsd(meter: RunTokenMeter, pricing: EffectivePricing["
468
473
  );
469
474
  }
470
475
 
476
+ function accumulateNativeUsage(
477
+ meter: RunTokenMeter,
478
+ usage: Record<string, unknown>,
479
+ pricing: EffectivePricing["rates"],
480
+ ): void {
481
+ const count = (value: unknown): number =>
482
+ typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : 0;
483
+ const call: RunTokenMeter = {
484
+ inputTokens: count(usage.input),
485
+ outputTokens: count(usage.output),
486
+ cacheReadTokens: count(usage.cacheRead),
487
+ cacheWriteTokens: count(usage.cacheWrite),
488
+ reasoningTokens: extractReasoningTokenCount(usage),
489
+ };
490
+ const reported = isRecord(usage.cost) ? usage.cost.total : undefined;
491
+ // An SDK total is already priced with per-call tiers, service tier
492
+ // and cache-write lifetime. Never reprice it from an aggregate token count.
493
+ // Retain the target-rate fallback only for workers that omit calculated
494
+ // cost. Zero remains zero; its provenance still comes from the target.
495
+ const callCost =
496
+ typeof reported === "number" && Number.isFinite(reported) && reported >= 0
497
+ ? reported
498
+ : calculateUsageCostUsd(call, pricing);
499
+ meter.costUsd = (meter.costUsd ?? 0) + callCost;
500
+ meter.inputTokens += call.inputTokens;
501
+ meter.outputTokens += call.outputTokens;
502
+ meter.cacheReadTokens += call.cacheReadTokens;
503
+ meter.cacheWriteTokens += call.cacheWriteTokens;
504
+ if (typeof usage.cacheWrite1h === "number" && usage.cacheWrite1h >= 0 && usage.cacheWrite1h <= call.cacheWriteTokens)
505
+ meter.cacheWrite1hTokens = (meter.cacheWrite1hTokens ?? 0) + usage.cacheWrite1h;
506
+ meter.reasoningTokens += call.reasoningTokens;
507
+ }
508
+
471
509
  /**
472
510
  * Output-token figure the admission estimate prices a route against. Settings
473
511
  * always carry `defaults.maxTokens`; the fallback covers the callers that
@@ -1655,12 +1693,19 @@ function effectiveToolNames(
1655
1693
  (tool): tool is ToolName =>
1656
1694
  (isBuiltinToolName(tool) || harnessTools.has(tool)) &&
1657
1695
  tool !== ToolNames.AskUser &&
1658
- !(networkStripped && tool === ToolNames.WebFetch) &&
1696
+ !(networkStripped && (tool === ToolNames.WebFetch || tool === ToolNames.WebRead)) &&
1659
1697
  !denied.has(tool) &&
1660
1698
  !(writeConfined && WRITE_ROOT_REFUSED_TOOLS.has(tool)) &&
1661
1699
  (target.runtime.id !== "claude-sdk" || isClaudeCanonicalTool(tool)),
1662
1700
  );
1663
- return [...new Set(names)].sort();
1701
+ // A native worker reaches a gateway-placed capability (git, web_fetch, an
1702
+ // extension command) through the attached `gateway` tool, so the admitted
1703
+ // list gains `gateway` whenever it names one. The worker's own narrowing
1704
+ // (tools/agent-tools.ts effectiveToolNames) applies the same rule, which is
1705
+ // what keeps the approved tool signature equal to the attested one.
1706
+ const mediated = target.runtime.kind === "http" && target.runtime.id !== "claude-sdk";
1707
+ const surface = mediated ? withGatewayForCapabilities(names) : [...new Set(names)];
1708
+ return surface.sort();
1664
1709
  }
1665
1710
 
1666
1711
  /**
@@ -1679,13 +1724,23 @@ function assertPostRuntimeToolCompatibility(
1679
1724
  spec: ReturnType<typeof normalizeAgentSpec>,
1680
1725
  effectiveTools: ReadonlyArray<ToolName>,
1681
1726
  target: ResolvedTarget,
1727
+ writeConfined: boolean,
1682
1728
  ): void {
1683
1729
  const compatibility = resolveAgentToolCompatibility(spec, effectiveTools, {
1684
1730
  mediatesDispatch: WORKER_RUNTIME_MEDIATES_CLIO_DISPATCH,
1685
1731
  });
1686
1732
  if (compatibility.compatible) return;
1733
+ // Name the narrowing that removed the tool: blaming the runtime sends the
1734
+ // caller to another model when its own write roots caused the refusal.
1735
+ const confined = writeConfined
1736
+ ? compatibility.missingRequired.filter((tool) => WRITE_ROOT_REFUSED_TOOLS.has(tool))
1737
+ : [];
1738
+ const cause =
1739
+ confined.length > 0
1740
+ ? `; declared write roots remove ${confined.join(", ")}, so omit write roots (use autonomy: "read-only" or worktree: true) for this agent`
1741
+ : "";
1687
1742
  throw new Error(
1688
- `dispatch: admission denied: agent '${agentId}' is incompatible with runtime '${target.runtime.id}' after tool narrowing; missing required tools: ${compatibility.missingRequired.join(", ")}`,
1743
+ `dispatch: admission denied: agent '${agentId}' is incompatible with runtime '${target.runtime.id}' after tool narrowing; missing required tools: ${compatibility.missingRequired.join(", ")}${cause}`,
1689
1744
  );
1690
1745
  }
1691
1746
 
@@ -2838,11 +2893,30 @@ export function createDispatchBundle(
2838
2893
  rootRunId: string;
2839
2894
  terminalCandidate: RunReceipt;
2840
2895
  timer: ReturnType<typeof setTimeout>;
2896
+ settleCanceled: () => void;
2841
2897
  }
2842
2898
  const retryQueue = new Map<string, RetryQueueEntry>();
2843
2899
  const retryBackoff = new Map<string, BackoffState>();
2844
2900
  const retryReasons = new Map<string, string>();
2845
2901
  const assignmentRootsByAttempt = new Map<string, string>();
2902
+ // Fleet lineage is shared ancestry, not control ownership. Keep each
2903
+ // member's retry chain distinct without changing persisted lineage.
2904
+ const controlRootsByAttempt = new Map<string, string>();
2905
+ const controlAttempts = new Map<string, { lineage: RunLineage; reservation: DispatchRequest["reservation"] }>();
2906
+ const canceledControlRoots = new Set<string>();
2907
+ const memberWork = new Map<string, Set<Promise<unknown>>>();
2908
+ function trackMemberWork(runId: string, operation: Promise<unknown>): void {
2909
+ const root = controlRootsByAttempt.get(runId) ?? runId;
2910
+ const work = memberWork.get(root) ?? new Set<Promise<unknown>>();
2911
+ memberWork.set(root, work);
2912
+ work.add(operation);
2913
+ const settled = (): void => {
2914
+ work.delete(operation);
2915
+ if (work.size === 0) memberWork.delete(root);
2916
+ };
2917
+ operation.then(settled, settled);
2918
+ }
2919
+
2846
2920
  const assignments = new AssignmentRegistry({
2847
2921
  onStreamError: (error) => reportDispatchDiagnostic("assignment event stream", error),
2848
2922
  });
@@ -2874,6 +2948,20 @@ export function createDispatchBundle(
2874
2948
  function lineageFor(req: DispatchRequest, runId: string): RunLineage {
2875
2949
  const lineage = req.lineage ? { ...req.lineage } : { parentRunId: null, rootRunId: runId, attempt: 0, depth: 0 };
2876
2950
  assignmentRootsByAttempt.set(runId, lineage.rootRunId);
2951
+ const parent = lineage.parentRunId === null ? undefined : controlAttempts.get(lineage.parentRunId);
2952
+ // Repair ordinals and fleet ancestry do not establish a retry. Only a
2953
+ // known consecutive attempt of the same reservation member can do so.
2954
+ const continuesParent =
2955
+ parent !== undefined &&
2956
+ parent.lineage.rootRunId === lineage.rootRunId &&
2957
+ parent.lineage.depth === lineage.depth &&
2958
+ parent.lineage.attempt + 1 === lineage.attempt &&
2959
+ parent.reservation?.ownerId === req.reservation?.ownerId &&
2960
+ parent.reservation?.memberId === req.reservation?.memberId;
2961
+ const priorControl =
2962
+ continuesParent && lineage.parentRunId !== null ? controlRootsByAttempt.get(lineage.parentRunId) : undefined;
2963
+ controlRootsByAttempt.set(runId, priorControl ?? runId);
2964
+ controlAttempts.set(runId, { lineage, reservation: req.reservation });
2877
2965
  return lineage;
2878
2966
  }
2879
2967
 
@@ -2940,7 +3028,8 @@ export function createDispatchBundle(
2940
3028
 
2941
3029
  /** A reserved plan member owns its retry chain independently of the shared fleet root assignment. */
2942
3030
  function retryChainIsLive(run: ActiveRun): boolean {
2943
- if (run.aborted) return false;
3031
+ if (run.aborted || canceledControlRoots.has(controlRootsByAttempt.get(run.runId) ?? run.lineage.rootRunId))
3032
+ return false;
2944
3033
  const reservation = run.req.reservation;
2945
3034
  if (reservation === undefined) return assignments.get(run.lineage.rootRunId)?.status === "running";
2946
3035
  try {
@@ -3024,9 +3113,18 @@ export function createDispatchBundle(
3024
3113
  const attempt = run.lineage.attempt + 1;
3025
3114
  const reason = detail !== null ? `${outcome}: ${detail}` : outcome;
3026
3115
  const dueAt = now() + delayMs;
3116
+ let settleCanceled!: () => void;
3117
+ let rejectContinuation!: (error: unknown) => void;
3118
+ const continuation = new Promise<void>((resolve, reject) => {
3119
+ settleCanceled = resolve;
3120
+ rejectContinuation = reject;
3121
+ });
3122
+ trackMemberWork(run.runId, continuation);
3027
3123
  const timer = setTimeout(() => {
3028
3124
  retryQueue.delete(run.runId);
3029
- void executeRetry(run, attempt, reason, decision);
3125
+ // Ownership starts at scheduling, covering admission before a handle
3126
+ // exists and terminal receipt work after the handle arrives.
3127
+ executeRetry(run, attempt, reason, decision).then(settleCanceled, rejectContinuation);
3030
3128
  }, delayMs);
3031
3129
  retryQueue.set(run.runId, {
3032
3130
  runId: run.runId,
@@ -3039,6 +3137,7 @@ export function createDispatchBundle(
3039
3137
  rootRunId,
3040
3138
  terminalCandidate: receipt,
3041
3139
  timer,
3140
+ settleCanceled,
3042
3141
  });
3043
3142
  context.bus.emit(BusChannels.DispatchProgress, {
3044
3143
  runId: run.runId,
@@ -3139,6 +3238,7 @@ export function createDispatchBundle(
3139
3238
  // the worktree it created). A retry shares the assignment lineage but
3140
3239
  // must receive its own ledger/run identity.
3141
3240
  delete retryReq.runIdHint;
3241
+ let terminal: Promise<RunReceipt> | undefined;
3142
3242
  const reasonKey = retryReasonKey(run.lineage.rootRunId, attempt);
3143
3243
  retryReasons.set(reasonKey, reason);
3144
3244
  try {
@@ -3204,6 +3304,10 @@ export function createDispatchBundle(
3204
3304
  if (decision.excludedRouteParts.includes("runtime")) delete retryReq.workerRuntime;
3205
3305
  }
3206
3306
  const handle = await dispatch(retryReq, undefined, run.hostRun === undefined ? undefined : { hostRun: run.hostRun });
3307
+ // Cancellation can arrive while retry admission is awaiting a handle.
3308
+ if (canceledControlRoots.has(controlRootsByAttempt.get(run.runId) ?? run.lineage.rootRunId)) {
3309
+ contract.abort(handle.runId);
3310
+ }
3207
3311
  // The assignment folds every attempt into one stream with a reset marker.
3208
3312
  const marker: AssignmentAttemptStartEvent = {
3209
3313
  type: "attempt_start",
@@ -3225,6 +3329,7 @@ export function createDispatchBundle(
3225
3329
  runtimeKind: run.runtimeKind,
3226
3330
  event: marker,
3227
3331
  });
3332
+ terminal = handle.finalPromise;
3228
3333
  handle.finalPromise.catch((error) => {
3229
3334
  assignments.reject(asAssignmentId(run.lineage.rootRunId), error);
3230
3335
  reportDispatchDiagnostic(`finalize retry run ${handle.runId}`, error);
@@ -3257,6 +3362,7 @@ export function createDispatchBundle(
3257
3362
  outcomeDetail: denial,
3258
3363
  });
3259
3364
  }
3365
+ await terminal;
3260
3366
  }
3261
3367
 
3262
3368
  function requireLedger(): Ledger {
@@ -3647,7 +3753,7 @@ export function createDispatchBundle(
3647
3753
  ),
3648
3754
  req,
3649
3755
  );
3650
- assertPostRuntimeToolCompatibility(req.agentId, spec, effectiveTools, target);
3756
+ assertPostRuntimeToolCompatibility(req.agentId, spec, effectiveTools, target, pathScope.writeBoundaries.length > 0);
3651
3757
  const effectiveAdmission: DispatchAdmissionStage = {
3652
3758
  ...admission,
3653
3759
  allowedTools: effectiveTools,
@@ -3952,7 +4058,13 @@ export function createDispatchBundle(
3952
4058
  }
3953
4059
  timing.workerSpawnedAt = new Date(now()).toISOString();
3954
4060
 
3955
- const tokenMeter = { inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0, reasoningTokens: 0 };
4061
+ const tokenMeter: RunTokenMeter = {
4062
+ inputTokens: 0,
4063
+ outputTokens: 0,
4064
+ cacheReadTokens: 0,
4065
+ cacheWriteTokens: 0,
4066
+ reasoningTokens: 0,
4067
+ };
3956
4068
  const safetyDecisionCounts = { allowed: 0, blocked: 0, permissionRequested: 0 };
3957
4069
  const blockedAttempts: SafetyBlockedAttempt[] = [];
3958
4070
  const toolStats = new Map<string, ToolCallStat>();
@@ -4341,6 +4453,7 @@ export function createDispatchBundle(
4341
4453
  outputTokenCount: tokenMeter.outputTokens,
4342
4454
  cacheReadTokenCount: tokenMeter.cacheReadTokens,
4343
4455
  cacheWriteTokenCount: tokenMeter.cacheWriteTokens,
4456
+ ...(tokenMeter.cacheWrite1hTokens === undefined ? {} : { cacheWrite1hTokenCount: tokenMeter.cacheWrite1hTokens }),
4344
4457
  reasoningTokenCount: tokenMeter.reasoningTokens,
4345
4458
  ...(upstreamResponses.length > 0 ? { upstreamResponses: [...upstreamResponses] } : {}),
4346
4459
  ...(capturedOutput !== undefined ? { output: capturedOutput } : {}),
@@ -4427,6 +4540,7 @@ export function createDispatchBundle(
4427
4540
  outputTokenCount: receipt.outputTokenCount ?? 0,
4428
4541
  cacheReadTokenCount: receipt.cacheReadTokenCount ?? 0,
4429
4542
  cacheWriteTokenCount: receipt.cacheWriteTokenCount ?? 0,
4543
+ ...(receipt.cacheWrite1hTokenCount === undefined ? {} : { cacheWrite1hTokenCount: receipt.cacheWrite1hTokenCount }),
4430
4544
  reasoningTokenCount: receipt.reasoningTokenCount ?? 0,
4431
4545
  staticShellHash: receipt.staticShellHash ?? null,
4432
4546
  sessionShellHash: receipt.sessionShellHash ?? null,
@@ -4552,6 +4666,9 @@ export function createDispatchBundle(
4552
4666
  dynamicHash: receiptDraft.dynamicHash ?? null,
4553
4667
  cacheReadTokenCount: receiptDraft.cacheReadTokenCount ?? 0,
4554
4668
  cacheWriteTokenCount: receiptDraft.cacheWriteTokenCount ?? 0,
4669
+ ...(receiptDraft.cacheWrite1hTokenCount === undefined
4670
+ ? {}
4671
+ : { cacheWrite1hTokenCount: receiptDraft.cacheWrite1hTokenCount }),
4555
4672
  reasoningTokenCount: receiptDraft.reasoningTokenCount ?? 0,
4556
4673
  heartbeatAt: heartbeatIso(acp.heartbeatAt),
4557
4674
  };
@@ -4838,7 +4955,13 @@ export function createDispatchBundle(
4838
4955
  throw error;
4839
4956
  }
4840
4957
  })();
4841
- const tokenMeter = { inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0, reasoningTokens: 0 };
4958
+ const tokenMeter: RunTokenMeter = {
4959
+ inputTokens: 0,
4960
+ outputTokens: 0,
4961
+ cacheReadTokens: 0,
4962
+ cacheWriteTokens: 0,
4963
+ reasoningTokens: 0,
4964
+ };
4842
4965
  const safetyDecisionCounts = { allowed: 0, blocked: 0, permissionRequested: 0 };
4843
4966
  const escalationCounts = { requested: 0, approved: 0, denied: 0, timedOut: 0 };
4844
4967
  const blockedAttempts: SafetyBlockedAttempt[] = [];
@@ -5118,11 +5241,7 @@ export function createDispatchBundle(
5118
5241
  }
5119
5242
  if (event.type === "message_end" && event.message?.role === "assistant" && isRecord(event.message.usage)) {
5120
5243
  const u = event.message.usage;
5121
- tokenMeter.inputTokens += typeof u.input === "number" ? u.input : 0;
5122
- tokenMeter.outputTokens += typeof u.output === "number" ? u.output : 0;
5123
- tokenMeter.cacheReadTokens += typeof u.cacheRead === "number" ? u.cacheRead : 0;
5124
- tokenMeter.cacheWriteTokens += typeof u.cacheWrite === "number" ? u.cacheWrite : 0;
5125
- tokenMeter.reasoningTokens += extractReasoningTokenCount(u);
5244
+ accumulateNativeUsage(tokenMeter, u, lifecycle.target.effectivePricing.rates);
5126
5245
  const requestedModelId = readStringOrNull(event.message.model);
5127
5246
  const responseModelIdObservation = responseModelIdObservationFromRecord(event.message, "not-observed");
5128
5247
  const differingResponseModelId = readStringOrNull(event.message.responseModel);
@@ -5552,11 +5671,15 @@ export function createDispatchBundle(
5552
5671
  outputTokenCount: tokenMeter.outputTokens,
5553
5672
  cacheReadTokenCount: tokenMeter.cacheReadTokens,
5554
5673
  cacheWriteTokenCount: tokenMeter.cacheWriteTokens,
5674
+ ...(tokenMeter.cacheWrite1hTokens === undefined ? {} : { cacheWrite1hTokenCount: tokenMeter.cacheWrite1hTokens }),
5555
5675
  reasoningTokenCount: tokenMeter.reasoningTokens,
5556
5676
  ...(upstreamResponses.length > 0 ? { upstreamResponses: [...upstreamResponses] } : {}),
5557
5677
  ...(capturedOutput !== undefined ? { output: capturedOutput } : {}),
5558
5678
  costUsd,
5559
- costProvenance: lifecycle.target.effectivePricing.provenance,
5679
+ costProvenance:
5680
+ lifecycle.target.effectivePricing.provenance === "unknown" && costUsd > 0
5681
+ ? "estimated"
5682
+ : lifecycle.target.effectivePricing.provenance,
5560
5683
  compiledPromptHash: lifecycle.compiledPromptHash,
5561
5684
  staticCompositionHash: lifecycle.staticCompositionHash,
5562
5685
  staticShellHash: lifecycle.staticCompositionHash,
@@ -5646,6 +5769,7 @@ export function createDispatchBundle(
5646
5769
  outputTokenCount: receipt.outputTokenCount ?? 0,
5647
5770
  cacheReadTokenCount: receipt.cacheReadTokenCount ?? 0,
5648
5771
  cacheWriteTokenCount: receipt.cacheWriteTokenCount ?? 0,
5772
+ ...(receipt.cacheWrite1hTokenCount === undefined ? {} : { cacheWrite1hTokenCount: receipt.cacheWrite1hTokenCount }),
5649
5773
  reasoningTokenCount: receipt.reasoningTokenCount ?? 0,
5650
5774
  staticShellHash: receipt.staticShellHash ?? null,
5651
5775
  sessionShellHash: receipt.sessionShellHash ?? null,
@@ -5769,6 +5893,7 @@ export function createDispatchBundle(
5769
5893
  cwd: lifecycle.cwd,
5770
5894
  networkAllowed:
5771
5895
  lifecycle.admission.allowedTools.includes(ToolNames.WebFetch) ||
5896
+ lifecycle.admission.allowedTools.includes(ToolNames.WebRead) ||
5772
5897
  lifecycle.target.runtime.externalAgentLoop?.network === "externally-governed-unobserved",
5773
5898
  observedRunEffects,
5774
5899
  filesystem: nodeResultContractFilesystem(),
@@ -5891,6 +6016,9 @@ export function createDispatchBundle(
5891
6016
  ...(receiptDraft.cacheReadTokenCount !== undefined
5892
6017
  ? { cacheReadTokenCount: receiptDraft.cacheReadTokenCount }
5893
6018
  : {}),
6019
+ ...(receiptDraft.cacheWrite1hTokenCount === undefined
6020
+ ? {}
6021
+ : { cacheWrite1hTokenCount: receiptDraft.cacheWrite1hTokenCount }),
5894
6022
  ...(receiptDraft.cacheWriteTokenCount !== undefined
5895
6023
  ? { cacheWriteTokenCount: receiptDraft.cacheWriteTokenCount }
5896
6024
  : {}),
@@ -6110,7 +6238,11 @@ export function createDispatchBundle(
6110
6238
  }
6111
6239
  // Requests carrying lineage are internal attempts (retry or nested
6112
6240
  // orchestration) and retain the per-attempt handle contract.
6113
- if (req.lineage) return { ...handle, finalPromise: handle.finalPromise.finally(() => writerLease?.release()) };
6241
+ if (req.lineage) {
6242
+ const finalPromise = handle.finalPromise.finally(() => writerLease?.release());
6243
+ trackMemberWork(handle.runId, finalPromise);
6244
+ return { ...handle, finalPromise };
6245
+ }
6114
6246
 
6115
6247
  const assignment = assignments.open(handle.runId, assignmentPolicyFor(handle.effectiveRequest));
6116
6248
  persistAssignment(registerAssignment(assignment.id), `${assignment.id}:open`);
@@ -6212,7 +6344,13 @@ export function createDispatchBundle(
6212
6344
  ),
6213
6345
  req,
6214
6346
  );
6215
- assertPostRuntimeToolCompatibility(req.agentId, agentSpec, effectiveTools, target);
6347
+ assertPostRuntimeToolCompatibility(
6348
+ req.agentId,
6349
+ agentSpec,
6350
+ effectiveTools,
6351
+ target,
6352
+ pathScope.writeBoundaries.length > 0,
6353
+ );
6216
6354
  assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.fleet.permissions.mode ?? "deny");
6217
6355
  assertResponseSchemaEnforceable(target.runtime, target.modelCapabilities, req.responseSchema, effectiveTools.length);
6218
6356
  assertWriteRootsEnforceable(target.runtime, pathScope.writeBoundaries);
@@ -6672,7 +6810,11 @@ export function createDispatchBundle(
6672
6810
  // No in-memory executor survives a process restart, so every active
6673
6811
  // side-store lease from an earlier bundle is orphaned and must expire.
6674
6812
  cleanupDispatchReservations({ startup: true, nowMs: now() });
6675
- ledger = openLedger();
6813
+ ledger = openLedger({
6814
+ get maxRuns() {
6815
+ return getEffectiveSettings()?.fleet?.history?.maxRuns ?? resolveGuardrail("maxDispatchRuns");
6816
+ },
6817
+ });
6676
6818
  // Symphony P10: restart recovery from durable artifacts. Adopt
6677
6819
  // receipts whose ledger rows were lost to a crash between
6678
6820
  // recordReceipt() and persist(); quarantine tampered ones.
@@ -6802,6 +6944,7 @@ export function createDispatchBundle(
6802
6944
  const meter = run.meter;
6803
6945
  const totalTokens = meter.inputTokens + meter.outputTokens + meter.cacheReadTokens + meter.cacheWriteTokens;
6804
6946
  const costUsd = calculateUsageCostUsd(meter, run.pricing);
6947
+ const costProvenance = run.costProvenance === "unknown" && costUsd > 0 ? "estimated" : run.costProvenance;
6805
6948
  const startedMs = Date.parse(run.startedAt);
6806
6949
  const elapsedMs = Number.isFinite(startedMs) ? Math.max(0, tickNow - startedMs) : 0;
6807
6950
  const timing = deriveRunPhaseDurations(run.timing, run.startedAt, new Date(tickNow).toISOString());
@@ -6819,14 +6962,14 @@ export function createDispatchBundle(
6819
6962
  timing,
6820
6963
  tokens: { input: meter.inputTokens, output: meter.outputTokens, total: totalTokens },
6821
6964
  costUsd,
6822
- costProvenance: run.costProvenance,
6965
+ costProvenance,
6823
6966
  node: run.node !== null ? { ...run.node } : null,
6824
6967
  });
6825
6968
  totals.inputTokens += meter.inputTokens;
6826
6969
  totals.outputTokens += meter.outputTokens;
6827
6970
  totals.totalTokens += totalTokens;
6828
6971
  totals.costUsd += costUsd;
6829
- costAmounts.push({ usd: costUsd, provenance: run.costProvenance });
6972
+ costAmounts.push({ usd: costUsd, provenance: costProvenance });
6830
6973
  totals.runtimeSeconds += elapsedMs / 1000;
6831
6974
  }
6832
6975
  const retrying = [...retryQueue.values()].map((entry) => ({
@@ -6864,6 +7007,7 @@ export function createDispatchBundle(
6864
7007
  function settleQueuedAssignmentsForShutdown(): void {
6865
7008
  for (const [finishedRunId, entry] of retryQueue) {
6866
7009
  clearTimeout(entry.timer);
7010
+ entry.settleCanceled();
6867
7011
  if (assignments.get(entry.rootRunId)?.status === "running") {
6868
7012
  settleAssignmentDurably(asAssignmentId(entry.rootRunId), entry.terminalCandidate, "canceled");
6869
7013
  }
@@ -6909,11 +7053,28 @@ export function createDispatchBundle(
6909
7053
  return stored?.assignmentId ?? ledger?.get(id)?.lineage?.rootRunId ?? id;
6910
7054
  }
6911
7055
 
7056
+ function controlRootFor(id: string): string {
7057
+ const exact = controlRootsByAttempt.get(id);
7058
+ if (exact !== undefined) return exact;
7059
+ const roots = new Set<string>();
7060
+ for (const [attempt, root] of assignmentRootsByAttempt) {
7061
+ if (root === id) roots.add(controlRootsByAttempt.get(attempt) ?? root);
7062
+ }
7063
+ if (roots.size > 1) {
7064
+ throw new Error(`dispatch: '${id}' names multiple fleet members; use a concrete member or assignment id`);
7065
+ }
7066
+ return roots.values().next().value ?? assignmentRootFor(id);
7067
+ }
7068
+
6912
7069
  function currentAssignmentRun(id: string): ActiveRun | null {
6913
- const rootRunId = assignmentRootFor(id);
7070
+ // An exact live attempt is authoritative even if a sibling has a higher
7071
+ // attempt ordinal. Completed IDs may follow only their own retry chain.
7072
+ const exact = active.get(id);
7073
+ if (exact !== undefined) return exact;
7074
+ const rootRunId = controlRootFor(id);
6914
7075
  let current: ActiveRun | null = null;
6915
7076
  for (const run of active.values()) {
6916
- if (run.lineage.rootRunId !== rootRunId) continue;
7077
+ if ((controlRootsByAttempt.get(run.runId) ?? run.lineage.rootRunId) !== rootRunId) continue;
6917
7078
  if (current === null || run.lineage.attempt > current.lineage.attempt) current = run;
6918
7079
  }
6919
7080
  return current;
@@ -6967,8 +7128,25 @@ export function createDispatchBundle(
6967
7128
  await Promise.allSettled([...assignmentWrites]);
6968
7129
  },
6969
7130
  },
7131
+ async drainMember(runId) {
7132
+ const root = controlRootFor(runId);
7133
+ const errors: unknown[] = [];
7134
+ while (true) {
7135
+ const pending = [...(memberWork.get(root) ?? [])];
7136
+ const live = currentAssignmentRun(runId);
7137
+ if (live !== null) pending.push(live.finalPromise);
7138
+ if (pending.length === 0) break;
7139
+ for (const result of await Promise.allSettled(pending)) {
7140
+ if (result.status === "rejected" && !errors.includes(result.reason)) errors.push(result.reason);
7141
+ }
7142
+ }
7143
+ if (errors.length === 1) throw errors[0];
7144
+ if (errors.length > 1) throw new AggregateError(errors, "dispatch member drain failed", { cause: errors[0] });
7145
+ },
6970
7146
  abort(runId, reason) {
6971
- const rootRunId = assignmentRootFor(runId);
7147
+ const rootRunId = controlRootFor(runId);
7148
+ const run = currentAssignmentRun(runId);
7149
+ canceledControlRoots.add(rootRunId);
6972
7150
  const queued = pendingCapacity.get(rootRunId);
6973
7151
  if (queued !== undefined && capacityAdmission.cancel(rootRunId)) {
6974
7152
  persistAssignment(cancelStoredAssignment(rootRunId), `${rootRunId}:cancel-queued`);
@@ -6986,10 +7164,13 @@ export function createDispatchBundle(
6986
7164
  persistAssignment(cancelStoredAssignment(rootRunId), `${rootRunId}:cancel`);
6987
7165
  }
6988
7166
  for (const [finishedRunId, retry] of retryQueue) {
6989
- if (retry.rootRunId !== rootRunId) continue;
7167
+ if ((controlRootsByAttempt.get(finishedRunId) ?? retry.rootRunId) !== rootRunId) continue;
6990
7168
  clearTimeout(retry.timer);
7169
+ retry.settleCanceled();
6991
7170
  retryQueue.delete(finishedRunId);
6992
- settleAssignmentDurably(asAssignmentId(rootRunId), retry.terminalCandidate, "canceled");
7171
+ if (retry.rootRunId === rootRunId) {
7172
+ settleAssignmentDurably(asAssignmentId(rootRunId), retry.terminalCandidate, "canceled");
7173
+ }
6993
7174
  context.bus.emit(BusChannels.RunAborted, {
6994
7175
  source: "dispatch_abort",
6995
7176
  runId: finishedRunId,
@@ -7004,7 +7185,6 @@ export function createDispatchBundle(
7004
7185
  event: { type: "retry_canceled", attempt: retry.attempt },
7005
7186
  });
7006
7187
  }
7007
- const run = currentAssignmentRun(rootRunId);
7008
7188
  if (!run) return;
7009
7189
  emitRunAborted(run, "dispatch_abort");
7010
7190
  run.aborted = true;
@@ -18,6 +18,7 @@ import { performance } from "node:perf_hooks";
18
18
  import { readClioVersion } from "../../core/package-root.js";
19
19
  import { shellQuote } from "../../core/shell-quote.js";
20
20
  import { clioStateDir } from "../../core/xdg.js";
21
+ import { atomicWrite } from "../../engine/session.js";
21
22
  import {
22
23
  evaluateRouteFacts,
23
24
  type FactState,
@@ -91,6 +92,20 @@ export function readFleetPreflightRecords(): FleetPreflightRecord[] {
91
92
  }
92
93
  }
93
94
 
95
+ /**
96
+ * Upsert records keyed by (nodeId, projectRoot). Only `clio-coder doctor --fix`
97
+ * writes: plain doctor stays observation-only, and dispatch admission fails
98
+ * closed on a node that has no stored passing record.
99
+ */
100
+ export function recordFleetPreflight(records: ReadonlyArray<FleetPreflightRecord>): void {
101
+ const merged = new Map<string, FleetPreflightRecord>();
102
+ for (const record of [...readFleetPreflightRecords(), ...records]) {
103
+ merged.set(`${record.nodeId}\0${record.projectRoot}`, record);
104
+ }
105
+ const file: FleetPreflightStoreFile = { version: 2, records: [...merged.values()] };
106
+ atomicWrite(storePath(), JSON.stringify(file, null, 2));
107
+ }
108
+
94
109
  export interface FleetPreflightVerdict {
95
110
  ok: boolean;
96
111
  reason: string | null;
@@ -110,19 +125,19 @@ export function fleetPreflightVerdict(
110
125
  if (!record) {
111
126
  return {
112
127
  ok: false,
113
- reason: `node '${node.id}' has not passed the fleet preflight for ${projectRoot}; run 'clio-coder doctor'`,
128
+ reason: `node '${node.id}' has not passed the fleet preflight for ${projectRoot}; run 'clio-coder doctor --fix'`,
114
129
  };
115
130
  }
116
131
  if (record.host !== node.host) {
117
132
  return {
118
133
  ok: false,
119
- reason: `node '${node.id}' preflight was recorded for host '${record.host}' but the node now points at '${node.host}'; run 'clio-coder doctor'`,
134
+ reason: `node '${node.id}' preflight was recorded for host '${record.host}' but the node now points at '${node.host}'; run 'clio-coder doctor --fix'`,
120
135
  };
121
136
  }
122
137
  if (record.localVersion !== readClioVersion()) {
123
138
  return {
124
139
  ok: false,
125
- reason: `node '${node.id}' preflight predates a local clio-coder upgrade (${record.localVersion} -> ${readClioVersion()}); run 'clio-coder doctor'`,
140
+ reason: `node '${node.id}' preflight predates a local clio-coder upgrade (${record.localVersion} -> ${readClioVersion()}); run 'clio-coder doctor --fix'`,
126
141
  };
127
142
  }
128
143
  if (!record.ok) {
@@ -788,6 +788,7 @@ export async function executeFleetRun(input: ExecuteFleetRunInput): Promise<Flee
788
788
  beginWriteBoundary: (window, stepIds) => boundaryEnforcer.begin(window, stepIds),
789
789
  verifyWriteBoundary: (window, stepIds) => boundaryEnforcer.verify(window, stepIds),
790
790
  cancel: (assignmentId) => dispatch.abort(assignmentId),
791
+ drainMember: (assignmentId) => dispatch.drainMember?.(assignmentId) ?? Promise.resolve(),
791
792
  release: (ownerId) => {
792
793
  if (ownerId === NO_WORKER_RESERVATION) return;
793
794
  dispatch.reservations?.release(ownerId);
@@ -75,7 +75,7 @@ export interface GateDecisionArtifact {
75
75
  * prose line. Two schemas exist because the two topologies ask different
76
76
  * questions:
77
77
  *
78
- * - Review asks "does this work pass?", which is exactly the Slice 2
78
+ * - Review asks "does this work pass?", which is exactly the
79
79
  * `verifier-report` contract. There is deliberately no `revise` verdict:
80
80
  * whether a failure is worth another cycle is the coordinator's bounded
81
81
  * continuation policy, not a decision the reviewed model gets to author.
@@ -96,7 +96,7 @@ export interface CompeteGateResult {
96
96
 
97
97
  export type GateResultParse<T> = { ok: true; result: T } | { ok: false; reason: string };
98
98
 
99
- /** Parse a reviewer answer under the Slice 2 Verifier contract. */
99
+ /** Parse a reviewer answer under the verifier-report contract. */
100
100
  function parseReviewGateResult(output: string): GateResultParse<ReviewGateResult> {
101
101
  const result = parseVerifierResult(output);
102
102
  return result === null
@@ -128,7 +128,7 @@ export interface ReviewGateDecision {
128
128
  /**
129
129
  * Apply the coordinator's review policy to one reviewer answer.
130
130
  *
131
- * The reviewer answers pass or fail under its Slice 2 contract and nothing
131
+ * The reviewer answers pass or fail under its verifier-report contract and nothing
132
132
  * else. `revise` is this function's bounded continuation decision: a failure
133
133
  * with cycles left earns another builder attempt, the same failure at the bound
134
134
  * is simply the terminal fail, and an answer that does not satisfy the contract
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Pure heartbeat watchdog classifier (Phase 6 slice 3).
2
+ * Pure heartbeat watchdog classifier.
3
3
  *
4
4
  * Maps a last-seen monotonic stamp to one of three states. The dispatch domain
5
5
  * drives this on each scheduler tick; the orchestrator uses `stale` to surface