@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
@@ -16,12 +16,13 @@ import { previewBudget, previewRows } from "./preview.js";
16
16
  */
17
17
 
18
18
  import { trustStateWord } from "../../domains/evidence/trust-projection.js";
19
- import { sanitizeCallTargetText } from "../../domains/safety/call-target.js";
19
+ import { sanitizeCallTargetText, sanitizeMultilineDisplayText } from "../../domains/safety/call-target.js";
20
20
  import { redactSecretString, redactToolArgs } from "../../domains/safety/redaction.js";
21
21
  import { formatSize } from "../../engine/truncate.js";
22
22
  import { visibleWidth, wrapTextWithAnsi } from "../../engine/tui.js";
23
23
  import { classifyResourceRead, toolPresentationPolicy } from "../../tools/presentation.js";
24
24
  import { toolResultPresentationPolicy, toolResultPresentationText } from "../../tools/result-disposition.js";
25
+ import { effectiveToolCall } from "../../tools/surface.js";
25
26
  import { mutationFactsLine } from "../mutation-preview.js";
26
27
  import type { ApprovalRequestView } from "../permission-overlay.js";
27
28
  import { clioTheme, formatCompactMs, GLYPH } from "../theme/index.js";
@@ -214,11 +215,16 @@ const PRIMARY_ARG_FIELD: Record<string, string> = {
214
215
  bash: "command",
215
216
  grep: "pattern",
216
217
  find: "pattern",
218
+ web_read: "url",
217
219
  web_fetch: "url",
218
220
  git: "op",
219
221
  verify: "check",
222
+ run_script: "script",
220
223
  code_nav: "query",
221
224
  context: "scope",
225
+ clio_docs: "query",
226
+ clio_library: "query",
227
+ data: "path",
222
228
  artifact: "kind",
223
229
  monitor: "run_id",
224
230
  steer: "run_id",
@@ -252,10 +258,31 @@ function summarizeWebFetchArgs(args: unknown): string {
252
258
  return truncate(jsonStringifySafe(Object.keys(compact).length > 0 ? compact : args), WEB_FETCH_ARG_PREVIEW_LIMIT);
253
259
  }
254
260
 
261
+ /**
262
+ * A gateway call reads as the capability it reached: `find` and `describe`
263
+ * name what was asked, `call` renders the capability's own summary so a row
264
+ * says `git status` rather than an opaque gateway argument dump.
265
+ */
266
+ function summarizeGatewayArgs(args: unknown): string {
267
+ if (!isPlainObject(args)) return truncate(jsonStringifySafe(redactToolArgs(args)), ARG_PREVIEW_LIMIT);
268
+ const op = typeof args.op === "string" ? args.op : "";
269
+ if (op === "find") {
270
+ const query = readStringField(args, "query");
271
+ return truncate(query === null || query.length === 0 ? "find" : `find ${query}`, ARG_PREVIEW_LIMIT);
272
+ }
273
+ const capability = readStringField(args, "capability") ?? "";
274
+ if (op === "describe") return truncate(`describe ${capability}`.trim(), ARG_PREVIEW_LIMIT);
275
+ const effective = effectiveToolCall("gateway", args);
276
+ if (!effective.viaGateway) return truncate(jsonStringifySafe(redactToolArgs(args)), ARG_PREVIEW_LIMIT);
277
+ const inner = summarizeArgs(effective.toolName, effective.args);
278
+ return truncate(inner.length > 0 ? `${effective.toolName} ${inner}` : effective.toolName, ARG_PREVIEW_LIMIT);
279
+ }
280
+
255
281
  function summarizeArgs(toolName: string, args: unknown): string {
256
282
  if (isEmptyArgs(args)) return "";
257
283
  const safeArgs = redactToolArgs(args);
258
- if (toolName === "web_fetch") return summarizeWebFetchArgs(safeArgs);
284
+ if (toolName === "web_fetch" || toolName === "web_read") return summarizeWebFetchArgs(safeArgs);
285
+ if (toolName === "gateway") return summarizeGatewayArgs(args);
259
286
  const primary = capturedPrimaryArg(toolName, args);
260
287
  if (primary !== null) return truncate(displayArg(toolName, primary), ARG_PREVIEW_LIMIT);
261
288
  return truncate(jsonStringifySafe(safeArgs), ARG_PREVIEW_LIMIT);
@@ -589,7 +616,12 @@ function buildFieldSublineBody(
589
616
  ): string | null {
590
617
  const value = readStringField(args, key);
591
618
  if (value === null) return null;
592
- const preview = truncate(key === "command" ? stripShellWrapperForDisplay(value) : value, ARG_PREVIEW_LIMIT);
619
+ // One array element is one terminal row to the diff renderer. A multi-line
620
+ // command or an escape sequence inside this row shifted every row below it.
621
+ const preview = truncate(
622
+ sanitizeCallTargetText(key === "command" ? stripShellWrapperForDisplay(value) : value),
623
+ ARG_PREVIEW_LIMIT,
624
+ );
593
625
  if (options.wrapInBackticks) return `${lead}\`${preview}\``;
594
626
  return `${lead}${preview}`;
595
627
  }
@@ -635,9 +667,32 @@ const SUBLINE_BODY_BUILDERS: Readonly<Record<string, (args: unknown) => string |
635
667
  bash: (args) => buildFieldSublineBody(args, "command", "running ", { wrapInBackticks: true }),
636
668
  grep: (args) => buildFieldSublineBody(args, "pattern", "searching for ", { wrapInBackticks: true }),
637
669
  find: (args) => buildFieldSublineBody(args, "pattern", "finding ", { wrapInBackticks: true }),
670
+ web_read: (args) => buildFieldSublineBody(args, "url", "reading "),
638
671
  web_fetch: (args) => buildFieldSublineBody(args, "url", "fetching "),
639
672
  git: (args) => buildFieldSublineBody(args, "op", "git "),
640
673
  verify: (args) => buildFieldSublineBody(args, "check", "verifying "),
674
+ run_script: (args) => buildFieldSublineBody(args, "script", "running ", { wrapInBackticks: true }),
675
+ data: (args) => {
676
+ const op = readStringField(args, "op") ?? "inspecting";
677
+ const path = readStringField(args, "path");
678
+ return path === null ? op : `${op} ${path}`;
679
+ },
680
+ gateway: (args) => {
681
+ if (!isPlainObject(args)) return null;
682
+ const op = typeof args.op === "string" ? args.op : "";
683
+ if (op === "find") {
684
+ const query = readStringField(args, "query");
685
+ return query === null || query.length === 0 ? "finding capabilities" : `finding capabilities \`${query}\``;
686
+ }
687
+ if (op === "describe") {
688
+ const capability = readStringField(args, "capability");
689
+ return capability === null ? "describing a capability" : `describing ${capability}`;
690
+ }
691
+ const effective = effectiveToolCall("gateway", args);
692
+ if (!effective.viaGateway) return null;
693
+ const inner = SUBLINE_BODY_BUILDERS[effective.toolName]?.(effective.args);
694
+ return inner !== null && inner !== undefined ? `${inner} (via gateway)` : `calling ${effective.toolName}`;
695
+ },
641
696
  code_nav: (args) => {
642
697
  const mode = readStringField(args, "mode");
643
698
  const query = readStringField(args, "query")?.trim() ?? "";
@@ -715,9 +770,9 @@ function buildSublineBody(
715
770
  }
716
771
  return SUBLINE_BODY_BUILDERS[toolName]?.(args) ?? buildGenericToolBody(toolName, args);
717
772
  }
718
- if (toolName === "web_fetch") {
773
+ if (toolName === "web_fetch" || toolName === "web_read") {
719
774
  const meta = status === undefined ? null : webFetchMeta(result);
720
- const body = SUBLINE_BODY_BUILDERS.web_fetch?.(args) ?? buildGenericToolBody(toolName, args);
775
+ const body = SUBLINE_BODY_BUILDERS[toolName]?.(args) ?? buildGenericToolBody(toolName, args);
721
776
  return `${body}${meta ? dim(` · ${meta}`) : ""}`;
722
777
  }
723
778
  if (toolName === "bash") {
@@ -909,9 +964,14 @@ function isEmptyResult(result: unknown): boolean {
909
964
  return false;
910
965
  }
911
966
 
967
+ /**
968
+ * Tool output is untrusted terminal input. Cursor movement, backspaces and
969
+ * carriage returns inside a row break the diff renderer's one-row-per-line
970
+ * accounting, so everything but the line structure is neutralized here.
971
+ */
912
972
  function resultText(result: unknown, limit = FULL_RESULT_PREVIEW_LIMIT): string {
913
- if (typeof result === "string") return truncate(result, limit);
914
- return truncate(jsonStringifySafe(result), limit);
973
+ const text = typeof result === "string" ? result : jsonStringifySafe(result);
974
+ return truncate(sanitizeMultilineDisplayText(text).text, limit);
915
975
  }
916
976
 
917
977
  function truncateRowsMiddle(rows: ReadonlyArray<string>, rowLimit: number, isError: boolean): string[] {
@@ -0,0 +1,198 @@
1
+ import { sanitizeMultilineDisplayText } from "../../domains/safety/call-target.js";
2
+ import { redactSecretString } from "../../domains/safety/redaction.js";
3
+ import { GLYPH } from "../theme/index.js";
4
+
5
+ /** Sanitize complete source text before splitting, so OSC payloads cannot cross rows. */
6
+ export function safeWorkerAnswerText(text: string): string {
7
+ const normalized = text
8
+ .replaceAll(String.fromCharCode(0x9d), "\u001b]")
9
+ .replaceAll(String.fromCharCode(0x9b), "\u001b[")
10
+ .replaceAll(String.fromCharCode(0x9c), "\u001b\\");
11
+ return redactSecretString(sanitizeMultilineDisplayText(normalized).text).replace(/[\p{Cf}\u0080-\u009f]/gu, "");
12
+ }
13
+
14
+ const isStringArray = (value: unknown): value is string[] =>
15
+ Array.isArray(value) && value.every((entry) => typeof entry === "string");
16
+
17
+ function reportString(value: unknown): string | null {
18
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
19
+ }
20
+
21
+ export interface PresentedContractAnswer {
22
+ lines: string[];
23
+ footer?: string;
24
+ }
25
+
26
+ function debuggerReport(value: Record<string, unknown>): PresentedContractAnswer | null {
27
+ const diagnosis = reportString(value.diagnosis);
28
+ const reproduction = value.reproduction;
29
+ if (
30
+ diagnosis === null ||
31
+ (reproduction !== "reproduced" && reproduction !== "not-reproduced" && reproduction !== "unknown") ||
32
+ !isStringArray(value.evidence)
33
+ ) {
34
+ return null;
35
+ }
36
+ return {
37
+ lines: [
38
+ diagnosis,
39
+ ...(value.evidence.length === 0 ? ["Evidence: none"] : ["Evidence:", ...value.evidence.map((item) => `- ${item}`)]),
40
+ ],
41
+ footer: `reproduction ${reproduction}`,
42
+ };
43
+ }
44
+
45
+ function verifierReport(value: Record<string, unknown>): PresentedContractAnswer | null {
46
+ if ((value.verdict !== "pass" && value.verdict !== "fail") || !Array.isArray(value.checks)) return null;
47
+ const lines: string[] = [];
48
+ for (const raw of value.checks) {
49
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
50
+ const check = raw as Record<string, unknown>;
51
+ const name = reportString(check.name);
52
+ const evidence = reportString(check.evidence);
53
+ if (name === null || evidence === null || typeof check.passed !== "boolean") return null;
54
+ lines.push(`${check.passed ? GLYPH.ok : GLYPH.error} ${name}: ${evidence}`);
55
+ }
56
+ return { lines: lines.length === 0 ? ["No checks reported."] : lines, footer: `verdict ${value.verdict}` };
57
+ }
58
+
59
+ function researchReport(value: Record<string, unknown>): PresentedContractAnswer | null {
60
+ if ((value.source !== "local" && value.source !== "external") || !Array.isArray(value.findings)) return null;
61
+ const lines: string[] = [];
62
+ for (const raw of value.findings) {
63
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
64
+ const finding = raw as Record<string, unknown>;
65
+ const claim = reportString(finding.claim);
66
+ const evidence = reportString(finding.evidence);
67
+ if (claim === null || evidence === null) return null;
68
+ lines.push(`- ${claim}`, ` citation: ${evidence}`);
69
+ }
70
+ return { lines: lines.length === 0 ? ["No findings reported."] : lines, footer: `source ${value.source}` };
71
+ }
72
+
73
+ function worldKnowledgeReport(value: Record<string, unknown>): PresentedContractAnswer | null {
74
+ if (
75
+ (value.discovery !== "performed" &&
76
+ value.discovery !== "caller-supplied-only" &&
77
+ value.discovery !== "unavailable") ||
78
+ !Array.isArray(value.facts) ||
79
+ !isStringArray(value.synthesis) ||
80
+ !isStringArray(value.uncertainties) ||
81
+ !isStringArray(value.followUpVerification)
82
+ ) {
83
+ return null;
84
+ }
85
+ const lines: string[] = [];
86
+ for (const raw of value.facts) {
87
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
88
+ const fact = raw as Record<string, unknown>;
89
+ const claim = reportString(fact.claim);
90
+ const evidence = reportString(fact.evidence);
91
+ if (claim === null || evidence === null || !isStringArray(fact.sources)) return null;
92
+ lines.push(`- ${claim}`, ` support: ${evidence}`);
93
+ if (fact.sources.length > 0) lines.push(` sources: ${fact.sources.join(", ")}`);
94
+ }
95
+ if (value.synthesis.length > 0) lines.push("Synthesis:", ...value.synthesis.map((item) => `- ${item}`));
96
+ if (value.uncertainties.length > 0) lines.push("Uncertainties:", ...value.uncertainties.map((item) => `- ${item}`));
97
+ if (value.followUpVerification.length > 0) {
98
+ lines.push("Verify next:", ...value.followUpVerification.map((item) => `- ${item}`));
99
+ }
100
+ return {
101
+ lines: lines.length === 0 ? ["No findings reported."] : lines,
102
+ footer: `discovery ${value.discovery}; uncertainties ${value.uncertainties.length}; follow-up ${value.followUpVerification.length}`,
103
+ };
104
+ }
105
+
106
+ function scoutReport(value: Record<string, unknown>): PresentedContractAnswer | null {
107
+ if (!Array.isArray(value.findings) || typeof value.needsSplit !== "boolean") return null;
108
+ const lines: string[] = [];
109
+ for (const raw of value.findings) {
110
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
111
+ const finding = raw as Record<string, unknown>;
112
+ const claim = reportString(finding.claim);
113
+ if (claim === null) return null;
114
+ const path = reportString(finding.path);
115
+ const line = typeof finding.line === "number" && Number.isSafeInteger(finding.line) ? finding.line : null;
116
+ lines.push(path !== null && line !== null ? `- ${claim} — ${path}:${line}` : `- ${claim} (ungrounded lead)`);
117
+ }
118
+ if (value.needsSplit) {
119
+ if (!Array.isArray(value.proposedSubtasks)) return null;
120
+ lines.push("Split recommended:");
121
+ for (const raw of value.proposedSubtasks) {
122
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
123
+ const subtask = raw as Record<string, unknown>;
124
+ const task = reportString(subtask.task);
125
+ const id = reportString(subtask.id);
126
+ if (task === null || id === null) return null;
127
+ lines.push(`- ${id}: ${task}`);
128
+ }
129
+ }
130
+ return {
131
+ lines: lines.length === 0 ? ["No findings reported."] : lines,
132
+ footer: value.needsSplit ? "split needed" : "no split needed",
133
+ };
134
+ }
135
+
136
+ function isObject(value: unknown): value is Record<string, unknown> {
137
+ return typeof value === "object" && value !== null && !Array.isArray(value);
138
+ }
139
+
140
+ /** Only a whole object, optionally enclosed by one whole code fence, is a preview payload. */
141
+ export function exactWorkerAnswerObject(text: string): Record<string, unknown> | null {
142
+ const trimmed = text.trim();
143
+ const fenced = /^```[A-Za-z0-9_-]*[^\S\r\n]*\r?\n([\s\S]*?)\r?\n```$/u.exec(trimmed);
144
+ const source = fenced?.[1] ?? trimmed;
145
+ try {
146
+ const value: unknown = JSON.parse(source);
147
+ return isObject(value) ? value : null;
148
+ } catch {
149
+ return null;
150
+ }
151
+ }
152
+
153
+ /** Receipt identity and conformance are facts supplied by the caller, never inferred here. */
154
+ export function presentWorkerContractAnswer(
155
+ text: string,
156
+ contract: { kind: string; conformance: string } | undefined,
157
+ complete: boolean,
158
+ settled: boolean,
159
+ ): PresentedContractAnswer | null {
160
+ if (!settled || !complete || contract?.conformance !== "pass") return null;
161
+ const value = exactWorkerAnswerObject(text);
162
+ if (value === null) return null;
163
+ // Match complete JSON strings before numbers, so escaped property names
164
+ // and digits inside strings cannot bypass or confuse the token check.
165
+ // Conservatively keep raw Scout source if any number cannot round-trip.
166
+ if (contract.kind === "scout-report") {
167
+ for (const match of text.matchAll(/"(?:[^"\\]|\\[\s\S])*"|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/gu)) {
168
+ const token = match[0];
169
+ if (token.startsWith('"')) continue;
170
+ if (!Number.isSafeInteger(Number(token)) || String(Number(token)) !== token) return null;
171
+ }
172
+ }
173
+ let answer: PresentedContractAnswer | null;
174
+ switch (contract.kind) {
175
+ case "debugger-report":
176
+ answer = debuggerReport(value);
177
+ break;
178
+ case "verifier-report":
179
+ answer = verifierReport(value);
180
+ break;
181
+ case "research-report":
182
+ answer = researchReport(value);
183
+ break;
184
+ case "world-knowledge-report":
185
+ answer = worldKnowledgeReport(value);
186
+ break;
187
+ case "scout-report":
188
+ answer = scoutReport(value);
189
+ break;
190
+ default:
191
+ return null;
192
+ }
193
+ if (answer === null) return null;
194
+ return {
195
+ lines: answer.lines.map(safeWorkerAnswerText),
196
+ ...(answer.footer ? { footer: safeWorkerAnswerText(answer.footer) } : {}),
197
+ };
198
+ }
@@ -2,19 +2,21 @@ import { redactSecretString } from "../../domains/safety/redaction.js";
2
2
  import type { TranscriptDetailPolicy } from "../transcript-detail.js";
3
3
  import { transcriptDetail } from "../transcript-detail.js";
4
4
  import { previewBudget, previewRows } from "./preview.js";
5
+ import {
6
+ exactWorkerAnswerObject,
7
+ type PresentedContractAnswer,
8
+ presentWorkerContractAnswer,
9
+ safeWorkerAnswerText,
10
+ } from "./worker-answer.js";
11
+
5
12
  /** Bounded worker summaries share the main transcript's output style. */
6
13
 
7
- import { parseJsonObjectPayload } from "../../core/json-payload.js";
8
14
  import { trustStateWord } from "../../domains/evidence/trust-projection.js";
15
+ import { retiredIntegrityVersionOf } from "../../domains/evidence/trust-status.js";
9
16
  import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../../engine/tui.js";
10
17
  import { formatFooterTokens } from "../footer-panel.js";
11
18
  import { type ClioToken, clioTheme, fitUnits, formatCompactMs, GLYPH } from "../theme/index.js";
12
- import {
13
- type WorkerEntryState,
14
- type WorkerPresentedResultContract,
15
- type WorkerReceiptSummary,
16
- workerAskedByModel,
17
- } from "../worker-stream.js";
19
+ import { type WorkerEntryState, type WorkerReceiptSummary, workerAskedByModel } from "../worker-stream.js";
18
20
 
19
21
  const theme = clioTheme();
20
22
  const dim = (text: string): string => theme.fg("dim", text);
@@ -88,7 +90,11 @@ const CHECKPOINT_PREFIX = /^\s*(?:needs_input\b|task_blocked\b|##\s*CHECKPOINT R
88
90
  const CHECKPOINT_PREVIEW_ROWS = 16;
89
91
 
90
92
  export function workerNeedsInput(entry: Pick<WorkerEntryState, "text" | "receipt">): boolean {
91
- return entry.receipt !== undefined && entry.receipt.stillRunning !== true && CHECKPOINT_PREFIX.test(entry.text);
93
+ return (
94
+ entry.receipt !== undefined &&
95
+ entry.receipt.stillRunning !== true &&
96
+ CHECKPOINT_PREFIX.test(entry.text.trim().replace(/^```[A-Za-z0-9_-]*[^\S\r\n]*\r?\n/u, ""))
97
+ );
92
98
  }
93
99
 
94
100
  function needsInputUnit(): string {
@@ -144,152 +150,21 @@ function railLines(text: string, token: ClioToken, width: number): string[] {
144
150
  return wrapTextWithAnsi(text, contentWidth).map((row) => `${dim(RAIL)}${theme.fg(token, row)}`);
145
151
  }
146
152
 
147
- /** A worker's terminal JSON payload, using the same tolerant reader as its result contract. */
148
- function structuredAnswer(text: string): Record<string, unknown> | null {
149
- const parsed = parseJsonObjectPayload(text);
150
- return parsed.ok ? parsed.value : null;
153
+ function presentedContractAnswer(entry: WorkerEntryState): PresentedContractAnswer | null {
154
+ if (entry.receipt?.trust?.artifactIntegrity.state !== "verified") return null;
155
+ const kind = entry.receipt?.contractKind;
156
+ const conformance = entry.receipt?.contract;
157
+ return presentWorkerContractAnswer(
158
+ entry.text,
159
+ kind && conformance ? { kind, conformance } : undefined,
160
+ entry.droppedLines === 0 && (entry.progress?.droppedBytes ?? 0) === 0,
161
+ !entry.pending && !isPending(entry),
162
+ );
151
163
  }
152
164
 
153
165
  const isStringArray = (value: unknown): value is string[] =>
154
166
  Array.isArray(value) && value.every((entry) => typeof entry === "string");
155
167
 
156
- function reportString(value: unknown): string | null {
157
- return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
158
- }
159
-
160
- interface PresentedContractAnswer {
161
- lines: string[];
162
- footer?: string;
163
- }
164
-
165
- function debuggerReport(value: Record<string, unknown>): PresentedContractAnswer | null {
166
- const diagnosis = reportString(value.diagnosis);
167
- const reproduction = value.reproduction;
168
- if (
169
- diagnosis === null ||
170
- (reproduction !== "reproduced" && reproduction !== "not-reproduced" && reproduction !== "unknown") ||
171
- !isStringArray(value.evidence)
172
- ) {
173
- return null;
174
- }
175
- return {
176
- lines: [
177
- diagnosis,
178
- ...(value.evidence.length === 0 ? ["Evidence: none"] : ["Evidence:", ...value.evidence.map((item) => `- ${item}`)]),
179
- ],
180
- footer: `reproduction ${reproduction}`,
181
- };
182
- }
183
-
184
- function verifierReport(value: Record<string, unknown>): PresentedContractAnswer | null {
185
- if ((value.verdict !== "pass" && value.verdict !== "fail") || !Array.isArray(value.checks)) return null;
186
- const lines: string[] = [];
187
- for (const raw of value.checks) {
188
- if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
189
- const check = raw as Record<string, unknown>;
190
- const name = reportString(check.name);
191
- const evidence = reportString(check.evidence);
192
- if (name === null || evidence === null || typeof check.passed !== "boolean") return null;
193
- lines.push(`${check.passed ? GLYPH.ok : GLYPH.error} ${name}: ${evidence}`);
194
- }
195
- return { lines: lines.length === 0 ? ["No checks reported."] : lines, footer: `verdict ${value.verdict}` };
196
- }
197
-
198
- function researchReport(value: Record<string, unknown>): PresentedContractAnswer | null {
199
- if ((value.source !== "local" && value.source !== "external") || !Array.isArray(value.findings)) return null;
200
- const lines: string[] = [];
201
- for (const raw of value.findings) {
202
- if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
203
- const finding = raw as Record<string, unknown>;
204
- const claim = reportString(finding.claim);
205
- const evidence = reportString(finding.evidence);
206
- if (claim === null || evidence === null) return null;
207
- lines.push(`- ${claim}`, ` citation: ${evidence}`);
208
- }
209
- return { lines: lines.length === 0 ? ["No findings reported."] : lines, footer: `source ${value.source}` };
210
- }
211
-
212
- function worldKnowledgeReport(value: Record<string, unknown>): PresentedContractAnswer | null {
213
- if (
214
- (value.discovery !== "performed" &&
215
- value.discovery !== "caller-supplied-only" &&
216
- value.discovery !== "unavailable") ||
217
- !Array.isArray(value.facts) ||
218
- !isStringArray(value.synthesis) ||
219
- !isStringArray(value.uncertainties) ||
220
- !isStringArray(value.followUpVerification)
221
- ) {
222
- return null;
223
- }
224
- const lines: string[] = [];
225
- for (const raw of value.facts) {
226
- if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
227
- const fact = raw as Record<string, unknown>;
228
- const claim = reportString(fact.claim);
229
- const evidence = reportString(fact.evidence);
230
- if (claim === null || evidence === null || !isStringArray(fact.sources)) return null;
231
- lines.push(`- ${claim}`, ` support: ${evidence}`);
232
- if (fact.sources.length > 0) lines.push(` sources: ${fact.sources.join(", ")}`);
233
- }
234
- if (value.synthesis.length > 0) lines.push("Synthesis:", ...value.synthesis.map((item) => `- ${item}`));
235
- if (value.uncertainties.length > 0) lines.push("Uncertainties:", ...value.uncertainties.map((item) => `- ${item}`));
236
- if (value.followUpVerification.length > 0) {
237
- lines.push("Verify next:", ...value.followUpVerification.map((item) => `- ${item}`));
238
- }
239
- return { lines: lines.length === 0 ? ["No findings reported."] : lines, footer: `discovery ${value.discovery}` };
240
- }
241
-
242
- function scoutReport(value: Record<string, unknown>): PresentedContractAnswer | null {
243
- if (!Array.isArray(value.findings) || typeof value.needsSplit !== "boolean") return null;
244
- const lines: string[] = [];
245
- for (const raw of value.findings) {
246
- if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
247
- const finding = raw as Record<string, unknown>;
248
- const claim = reportString(finding.claim);
249
- if (claim === null) return null;
250
- const path = reportString(finding.path);
251
- const line = typeof finding.line === "number" && Number.isSafeInteger(finding.line) ? finding.line : null;
252
- lines.push(path !== null && line !== null ? `- ${claim} — ${path}:${line}` : `- ${claim} (ungrounded lead)`);
253
- }
254
- if (value.needsSplit) {
255
- if (!Array.isArray(value.proposedSubtasks)) return null;
256
- lines.push("Split recommended:");
257
- for (const raw of value.proposedSubtasks) {
258
- if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
259
- const subtask = raw as Record<string, unknown>;
260
- const task = reportString(subtask.task);
261
- const id = reportString(subtask.id);
262
- if (task === null || id === null) return null;
263
- lines.push(`- ${id}: ${task}`);
264
- }
265
- }
266
- return {
267
- lines: lines.length === 0 ? ["No findings reported."] : lines,
268
- footer: value.needsSplit ? "split needed" : "no split needed",
269
- };
270
- }
271
-
272
- function presentedContractAnswer(entry: WorkerEntryState): PresentedContractAnswer | null {
273
- if (entry.receipt?.contract !== "pass" || entry.receipt.contractKind === undefined || entry.droppedLines !== 0) {
274
- return null;
275
- }
276
- const value = structuredAnswer(entry.text);
277
- if (value === null) return null;
278
- const kind: WorkerPresentedResultContract = entry.receipt.contractKind;
279
- switch (kind) {
280
- case "debugger-report":
281
- return debuggerReport(value);
282
- case "verifier-report":
283
- return verifierReport(value);
284
- case "research-report":
285
- return researchReport(value);
286
- case "world-knowledge-report":
287
- return worldKnowledgeReport(value);
288
- case "scout-report":
289
- return scoutReport(value);
290
- }
291
- }
292
-
293
168
  /**
294
169
  * A mutation report as prose: the paths it changed, each validation with its
295
170
  * verdict and evidence, then the summary and commit line. Null when the object
@@ -317,16 +192,23 @@ function mutationReportLines(value: Record<string, unknown>): string[] | null {
317
192
 
318
193
  /**
319
194
  * The body's source lines. A structured answer (a result-contract JSON object)
320
- * never reaches the rail raw: a mutation report reads as prose, and any other
321
- * object is pretty-printed so its keys line up instead of wrapping mid-string.
195
+ * uses its receipt identity for a readable preview. Unknown objects retain
196
+ * their original numeric source tokens instead of being parsed and reserialized.
322
197
  * Truncated text is not one object and passes through as the prose it is.
323
198
  */
324
199
  function bodySourceLines(entry: WorkerEntryState): string[] {
325
- const structured = entry.droppedLines === 0 ? structuredAnswer(entry.text) : null;
326
- if (structured === null) return entry.text.split("\n");
200
+ if (
201
+ entry.pending ||
202
+ entry.receipt?.trust?.artifactIntegrity.state !== "verified" ||
203
+ entry.droppedLines !== 0 ||
204
+ (entry.progress?.droppedBytes ?? 0) !== 0
205
+ )
206
+ return safeWorkerAnswerText(entry.text).split("\n");
207
+ const structured = entry.droppedLines === 0 ? exactWorkerAnswerObject(entry.text) : null;
208
+ if (structured === null) return safeWorkerAnswerText(entry.text).split("\n");
327
209
  const presented = presentedContractAnswer(entry);
328
210
  if (presented !== null) return presented.lines;
329
- return mutationReportLines(structured) ?? JSON.stringify(structured, null, 2).split("\n");
211
+ return mutationReportLines(structured)?.map(safeWorkerAnswerText) ?? safeWorkerAnswerText(entry.text).split("\n");
330
212
  }
331
213
 
332
214
  function bodyLines(entry: WorkerEntryState, width: number, unbounded: boolean): string[] {
@@ -334,7 +216,7 @@ function bodyLines(entry: WorkerEntryState, width: number, unbounded: boolean):
334
216
  // its first token) gets no rail at all rather than one blank rail row.
335
217
  if (entry.text.length === 0) return [];
336
218
  const contentWidth = Math.max(1, width - RAIL_WIDTH);
337
- const source = bodySourceLines(entry);
219
+ const source = unbounded ? safeWorkerAnswerText(entry.text).split("\n") : bodySourceLines(entry);
338
220
  const capped = unbounded || source.length <= BODY_LINE_LIMIT ? source : source.slice(0, BODY_LINE_LIMIT);
339
221
  const hiddenLines = entry.droppedLines + (source.length - capped.length);
340
222
  const out: string[] = [];
@@ -417,6 +299,15 @@ export function renderWorkerEntryLines(
417
299
  options: WorkerEntryRenderOptions,
418
300
  ): string[] {
419
301
  const safeWidth = Math.max(1, Math.floor(width));
302
+ const integrity = entry.receipt?.trust;
303
+ const provenance =
304
+ isPending(entry) || integrity?.artifactIntegrity.state === "verified"
305
+ ? []
306
+ : railLines(
307
+ `receipt: ${integrity ? (retiredIntegrityVersionOf(integrity.artifactIntegrity) !== null ? "seal retired" : trustStateWord("artifactIntegrity", integrity.artifactIntegrity.state)) : "integrity unavailable"}; raw output, not admitted as evidence`,
308
+ "warning",
309
+ safeWidth,
310
+ );
420
311
  const quality = isPending(entry)
421
312
  ? []
422
313
  : railLines(
@@ -434,6 +325,7 @@ export function renderWorkerEntryLines(
434
325
  ...(tools ? [tools] : []),
435
326
  ...failureLines(entry, safeWidth),
436
327
  footerLine(entry, safeWidth),
328
+ ...provenance,
437
329
  ...quality,
438
330
  ].map(redactSecretString);
439
331
  }
@@ -446,14 +338,15 @@ export function renderWorkerEntryLines(
446
338
  const summary = bodySourceLines(entry).flatMap((line) =>
447
339
  railLines(redactSecretString(line), needsInput ? "warning" : "muted", safeWidth),
448
340
  );
449
- const actions = entry.progress
450
- ? [...entry.progress.recentActions]
451
- .reverse()
452
- .concat(entry.progress.currentAction ? [entry.progress.currentAction] : [])
453
- : [];
454
- const trail = actions.flatMap((action) =>
341
+ // Current work leads the bounded preview; completed calls remain explicitly historical.
342
+ const current = isPending(entry) ? entry.progress?.currentAction : null;
343
+ const actions = [
344
+ ...(current ? [{ action: current, label: "now" }] : []),
345
+ ...(entry.progress?.recentActions ?? []).map((action) => ({ action, label: "last" })),
346
+ ];
347
+ const trail = actions.flatMap(({ action, label }) =>
455
348
  railLines(
456
- `${GLYPH.phaseTool} ${action.descriptor ? `${action.descriptor.verb} ${action.descriptor.object}` : action.tool}`,
349
+ `${GLYPH.phaseTool} ${label}: ${action.descriptor ? `${action.descriptor.verb} ${action.descriptor.object}` : action.tool}`,
457
350
  "muted",
458
351
  safeWidth,
459
352
  ),
@@ -466,7 +359,7 @@ export function renderWorkerEntryLines(
466
359
  ...(detail.workerRows > 0 || needsInput ? previewRows(summary, summaryRows, safeWidth, entry.pending) : []),
467
360
  ...previewRows(attemptLines(entry, safeWidth), budget(detail.errorRows), safeWidth, true),
468
361
  ...(tools ? [tools] : []),
469
- ...(detail.workerActivity ? previewRows(trail, budget(4), safeWidth, true) : []),
362
+ ...(detail.workerActivity ? previewRows(trail, budget(4), safeWidth) : []),
470
363
  ...failure,
471
364
  ...(presented ? railLines(presented, "muted", safeWidth) : []),
472
365
  ...(entry.receipt?.abandonedDetail ? railLines(entry.receipt.abandonedDetail, "warning", safeWidth) : []),
@@ -478,6 +371,7 @@ export function renderWorkerEntryLines(
478
371
  safeWidth,
479
372
  )
480
373
  : []),
374
+ ...provenance,
481
375
  ...quality,
482
376
  ].map(redactSecretString);
483
377
  }
@@ -35,6 +35,7 @@ export interface SessionUsageSink {
35
35
  output: number;
36
36
  cacheRead: number;
37
37
  cacheWrite: number;
38
+ cacheWrite1h?: number;
38
39
  reasoningTokens: number;
39
40
  totalTokens: number;
40
41
  apiCalls?: number;
@@ -86,6 +87,7 @@ export function reseedSessionUsageFromLedger(
86
87
  output: call.output,
87
88
  cacheRead: call.cacheRead,
88
89
  cacheWrite: call.cacheWrite,
90
+ ...(call.cacheWrite1h === undefined ? {} : { cacheWrite1h: call.cacheWrite1h }),
89
91
  reasoningTokens: call.reasoningTokens,
90
92
  totalTokens: call.totalTokens,
91
93
  apiCalls: call.apiCalls ?? 1,
@@ -41,6 +41,7 @@ export interface SideQuestionUsage {
41
41
  output: number;
42
42
  cacheRead: number;
43
43
  cacheWrite: number;
44
+ cacheWrite1h?: number;
44
45
  reasoning: number;
45
46
  totalTokens: number;
46
47
  costUsd: number;
@@ -117,6 +118,7 @@ export function sideQuestionUsage(raw: unknown): SideQuestionUsage | null {
117
118
  output,
118
119
  cacheRead,
119
120
  cacheWrite,
121
+ ...(usage.cacheWrite1h === undefined ? {} : { cacheWrite1h: positive(usage.cacheWrite1h) }),
120
122
  reasoning: positive(usage.reasoning),
121
123
  totalTokens,
122
124
  costUsd: positive(usage.cost?.total),