@iowarp/clio-coder 0.4.7 → 0.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (675) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +111 -0
  3. package/CONTRIBUTING.md +83 -74
  4. package/README.md +69 -47
  5. package/dist/{acp-W3Y3TRHD.js → acp-ZWZCPS2A.js} +15 -15
  6. package/dist/{agents-J4ICNLQ3.js → agents-LYSOWZUE.js} +61 -59
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/assets/web-notices/@hono__node-server-LICENSE +21 -0
  9. package/dist/assets/web-notices/hono-LICENSE +21 -0
  10. package/dist/{auth-X2UJUMOC.js → auth-WBQGKWQ5.js} +27 -27
  11. package/dist/background-BUMOBAQN.js +37 -0
  12. package/dist/{builtins-XLXWWSRF.js → builtins-ODRJOEDI.js} +7 -7
  13. package/dist/{chunk-C3G5PNUO.js → chunk-2DRRZ57Q.js} +36 -27
  14. package/dist/chunk-2JBZYUPY.js +105 -0
  15. package/dist/chunk-2KUBKL63.js +336 -0
  16. package/dist/chunk-2VBWFXYE.js +198 -0
  17. package/dist/{chunk-XZ6UFQ52.js → chunk-2X2R3UTH.js} +25 -15
  18. package/dist/{chunk-M6Z2V6YU.js → chunk-37LW32LZ.js} +5 -5
  19. package/dist/{chunk-6LRLOJHQ.js → chunk-3AND2EFU.js} +11 -62
  20. package/dist/{chunk-FQOOGXBH.js → chunk-3RDHGNU7.js} +101 -33
  21. package/dist/{chunk-D2T66PDV.js → chunk-3SUDBGEI.js} +41 -208
  22. package/dist/{chunk-5AJPUR72.js → chunk-3TQN67I2.js} +9 -9
  23. package/dist/{chunk-LBFQMYS3.js → chunk-3U4BL2EV.js} +5 -3
  24. package/dist/{chunk-UFYNOQK4.js → chunk-3UQADNG2.js} +7 -7
  25. package/dist/{chunk-V4ZKOKRB.js → chunk-434LRQ6Z.js} +61 -53
  26. package/dist/{chunk-NO7J45X6.js → chunk-4ATBOFRP.js} +713 -218
  27. package/dist/{chunk-ECOMVOHP.js → chunk-4DNL43EZ.js} +3 -3
  28. package/dist/{chunk-WT5TRMO4.js → chunk-4HFJKRGZ.js} +255 -82
  29. package/dist/{chunk-5A6XR3RJ.js → chunk-555E2WVV.js} +16 -2
  30. package/dist/{chunk-WURGVOZJ.js → chunk-5RTEFNBP.js} +18 -14
  31. package/dist/{config-YXARKGTX.js → chunk-64XJW7NT.js} +24 -268
  32. package/dist/{chunk-24S3DN22.js → chunk-6TKOFFGE.js} +4 -4
  33. package/dist/{chunk-YKRJTYNP.js → chunk-6UJ7RDI7.js} +4 -4
  34. package/dist/{chunk-MZNWZUJM.js → chunk-7FBCRWVT.js} +288 -288
  35. package/dist/{chunk-UA6W4XFJ.js → chunk-7JSOSVLP.js} +2 -2
  36. package/dist/chunk-7N3OLLSL.js +637 -0
  37. package/dist/{chunk-KKEYGFX4.js → chunk-7QQRPB2E.js} +11 -11
  38. package/dist/{chunk-N37QC5FV.js → chunk-A6DULIMH.js} +21 -9
  39. package/dist/{fleet-decisions-S3PTZV2D.js → chunk-AB3QXXBC.js} +5 -41
  40. package/dist/chunk-ACCECAH4.js +49 -0
  41. package/dist/{chunk-CP3HIR5H.js → chunk-AM6CEP2K.js} +20 -19
  42. package/dist/chunk-AUHVBIDW.js +19 -0
  43. package/dist/{chunk-BQQ5MXUC.js → chunk-AY4XE6GN.js} +19 -13
  44. package/dist/{chunk-ISNCCX42.js → chunk-BBA2TAWV.js} +10 -9
  45. package/dist/chunk-BFPHMSK7.js +169 -0
  46. package/dist/{chunk-LVFANMOH.js → chunk-BHJMMCXS.js} +4 -4
  47. package/dist/{chunk-DO7M3LSX.js → chunk-BMNVVKEW.js} +40 -93
  48. package/dist/{chunk-VTYHHQ57.js → chunk-CTGZCEI6.js} +2 -2
  49. package/dist/{chunk-RTLNFZMD.js → chunk-DIAJYJYG.js} +3 -3
  50. package/dist/chunk-EHZRAB4U.js +63 -0
  51. package/dist/{chunk-KS7ETA3P.js → chunk-EM2DIQAJ.js} +3 -3
  52. package/dist/{chunk-MNQN3X6Y.js → chunk-ETF4ROKH.js} +5 -5
  53. package/dist/{chunk-WN552PKN.js → chunk-F2YM3JY4.js} +744 -1134
  54. package/dist/{chunk-7EEGBKV4.js → chunk-FEBQWHJT.js} +24 -19
  55. package/dist/{chunk-4QKAITQT.js → chunk-FPS4R2RN.js} +74 -10
  56. package/dist/chunk-G5R53COU.js +68 -0
  57. package/dist/chunk-GHXGMFQ5.js +40 -0
  58. package/dist/{chunk-GFQ7P2UF.js → chunk-GJDRMBDI.js} +10 -10
  59. package/dist/{chunk-LZBMXNLP.js → chunk-GM4TY6VN.js} +43 -6
  60. package/dist/{chunk-NCCQ6DVS.js → chunk-GREYLTZ5.js} +8 -8
  61. package/dist/{chunk-HOX4YZ2K.js → chunk-H2WSCZZT.js} +19 -3
  62. package/dist/{chunk-3LXJOICS.js → chunk-H6IUCY6Q.js} +2 -2
  63. package/dist/{chunk-BO4XV5VX.js → chunk-H72DCH3E.js} +95 -206
  64. package/dist/{chunk-SEDI5K5B.js → chunk-H7TXJR23.js} +20 -20
  65. package/dist/chunk-HBJQQTKM.js +40 -0
  66. package/dist/chunk-HCVKSGNZ.js +990 -0
  67. package/dist/chunk-HVCAY2FH.js +67 -0
  68. package/dist/{chunk-34XHRVKG.js → chunk-I47EJPYL.js} +3 -3
  69. package/dist/{chunk-4N2RZ4TO.js → chunk-IALGWTLO.js} +3 -3
  70. package/dist/{chunk-IQCNVLO6.js → chunk-IALZJE37.js} +10 -7
  71. package/dist/{chunk-DLIYANB7.js → chunk-IC7JXLOM.js} +16 -11
  72. package/dist/{chunk-G4LGUTOE.js → chunk-IOSVTTCD.js} +5 -5
  73. package/dist/{chunk-DBREN25X.js → chunk-IPTPMLA6.js} +8 -3
  74. package/dist/{chunk-V552WL53.js → chunk-IZZI3SKQ.js} +3 -67
  75. package/dist/{chunk-TN5FW4XY.js → chunk-JIYWMQZ5.js} +12 -9
  76. package/dist/{chunk-T7QQBNLH.js → chunk-JKU34ACI.js} +10 -8
  77. package/dist/chunk-JOBN2YQQ.js +176 -0
  78. package/dist/chunk-JOL2QRLE.js +152 -0
  79. package/dist/{chunk-GXIWHXDB.js → chunk-JTR3VSV3.js} +3 -3
  80. package/dist/{chunk-T334FW2H.js → chunk-JU6MAMRJ.js} +7 -7
  81. package/dist/chunk-JURMQWVJ.js +15 -0
  82. package/dist/{chunk-CULVKYTK.js → chunk-K3XN4LZ4.js} +5 -5
  83. package/dist/{chunk-3T4DXWP6.js → chunk-KIVFXGBM.js} +27 -7
  84. package/dist/chunk-KKRXONXG.js +43 -0
  85. package/dist/{chunk-YPRSNUTC.js → chunk-KOAHT3N2.js} +2 -2
  86. package/dist/chunk-KP5BPXR3.js +73 -0
  87. package/dist/{chunk-UA3W4FGC.js → chunk-KRJQG47M.js} +6 -6
  88. package/dist/{chunk-GI5RRMAH.js → chunk-KW6OJ7IY.js} +19 -21
  89. package/dist/{chunk-A46ILRS2.js → chunk-L3NBWLSN.js} +4 -4
  90. package/dist/{chunk-MZHXENL7.js → chunk-L4RUTLRL.js} +8 -8
  91. package/dist/{chunk-P5SC4DLJ.js → chunk-LGTVWPRN.js} +2 -2
  92. package/dist/{chunk-65BGHOUR.js → chunk-LSQW6KZO.js} +5 -5
  93. package/dist/{chunk-TZHN5ITX.js → chunk-LWJYOHT3.js} +8 -8
  94. package/dist/{chunk-U3TPUXOQ.js → chunk-M6YLF66Z.js} +74 -40
  95. package/dist/chunk-MJ4QEJVT.js +185 -0
  96. package/dist/{chunk-T4TY5GG3.js → chunk-MO65K5CH.js} +5 -5
  97. package/dist/{chunk-TZ6UVP2H.js → chunk-MTOZEQHL.js} +8 -8
  98. package/dist/chunk-MZDPF35R.js +45 -0
  99. package/dist/{chunk-P4DL2LM5.js → chunk-MZKYVIWW.js} +8 -119
  100. package/dist/{chunk-KAFMW7WM.js → chunk-NBPA5QM6.js} +2 -2
  101. package/dist/{chunk-EUEXGXXR.js → chunk-NMBEW4PP.js} +5 -5
  102. package/dist/{chunk-SELG4SUR.js → chunk-NPLLK3HO.js} +72 -89
  103. package/dist/{chunk-VCRVEDUC.js → chunk-NSYGPIVW.js} +5 -5
  104. package/dist/{context-7HJEWTTP.js → chunk-NXTV5OI5.js} +36 -90
  105. package/dist/{chunk-IMOD2YPV.js → chunk-NYDG4QP4.js} +9 -19
  106. package/dist/{chunk-6CA2BHOR.js → chunk-OA2GDACN.js} +5 -5
  107. package/dist/{chunk-A67NR5AT.js → chunk-PJI57EC6.js} +14 -11
  108. package/dist/{chunk-IJMW64DX.js → chunk-PJJBUGMR.js} +50 -50
  109. package/dist/{chunk-CPXGJI2A.js → chunk-PNJE7JPS.js} +20 -5
  110. package/dist/chunk-PP23PZEV.js +1347 -0
  111. package/dist/chunk-PPIFDSBK.js +409 -0
  112. package/dist/{chunk-T52TPHYC.js → chunk-PTFISXQO.js} +8 -7
  113. package/dist/{chunk-C6GEXX4L.js → chunk-QB33Z5S7.js} +5 -5
  114. package/dist/{chunk-VMATUZB6.js → chunk-QGNII5VC.js} +10 -10
  115. package/dist/{chunk-TLTGZTXI.js → chunk-QI72X67S.js} +104 -27
  116. package/dist/chunk-QKHZZFKH.js +98 -0
  117. package/dist/{chunk-PFLOULP3.js → chunk-RDKX2PME.js} +4 -4
  118. package/dist/{chunk-B5ZTR6KZ.js → chunk-RL7LJYN4.js} +1 -1
  119. package/dist/chunk-RPMNIFRY.js +65 -0
  120. package/dist/{chunk-L3Z5ANCV.js → chunk-RQROVOV3.js} +13 -11
  121. package/dist/{chunk-6YHPAAZR.js → chunk-S34A7BSP.js} +3 -3
  122. package/dist/{chunk-5ZSZEYJK.js → chunk-SJETVJHX.js} +2 -2
  123. package/dist/{chunk-77CZRFTE.js → chunk-SJMNU4ZS.js} +2 -2
  124. package/dist/chunk-SLLG2G44.js +85 -0
  125. package/dist/{chunk-GVZFCJHE.js → chunk-SQAZN2V3.js} +48 -22
  126. package/dist/{chunk-2O2LVQQK.js → chunk-SQBT46OF.js} +2 -2
  127. package/dist/{chunk-ZGIGW4ZG.js → chunk-TCUOGIL2.js} +5 -5
  128. package/dist/{chunk-DACXIVVF.js → chunk-TIWPKCVO.js} +5 -5
  129. package/dist/{chunk-5CMARGPF.js → chunk-UIU7MGZ3.js} +11 -2
  130. package/dist/chunk-USBBEKHW.js +177 -0
  131. package/dist/{chunk-WLHX3MM5.js → chunk-V4XJWDHR.js} +21 -11
  132. package/dist/{chunk-MBJO5VNZ.js → chunk-VPWGADBG.js} +33 -33
  133. package/dist/{chunk-UUQ5G6EZ.js → chunk-VWFCAK34.js} +6 -6
  134. package/dist/{chunk-6CB2IL4N.js → chunk-W5RM7YAH.js} +1 -1
  135. package/dist/{chunk-4MFBBY2Z.js → chunk-W72LLZAV.js} +3 -3
  136. package/dist/{chunk-4UHVS5T7.js → chunk-WGRDABW7.js} +8 -8
  137. package/dist/{chunk-XR3XJN2M.js → chunk-WWRV5RJI.js} +4 -4
  138. package/dist/{chunk-24TOGHPO.js → chunk-X6FLVUM5.js} +4 -4
  139. package/dist/{chunk-6YA46L5A.js → chunk-XFLSL7BT.js} +2 -2
  140. package/dist/{chunk-QKWL7SYE.js → chunk-XJZEDCNT.js} +50 -39
  141. package/dist/{chunk-UWD3JD5X.js → chunk-XLLEL3K7.js} +10 -10
  142. package/dist/{chunk-2GPGAE5W.js → chunk-XNIZBOFV.js} +15 -1
  143. package/dist/chunk-XNZWWDC3.js +686 -0
  144. package/dist/{chunk-WBVKKTUT.js → chunk-XRECG65F.js} +2 -2
  145. package/dist/chunk-XTQ7MEJG.js +457 -0
  146. package/dist/{chunk-GEVQNST4.js → chunk-XZWSP67B.js} +2 -2
  147. package/dist/{chunk-WB7POC6M.js → chunk-Y3M2T5RO.js} +6 -6
  148. package/dist/{chunk-RXFPB32E.js → chunk-YJCCMYYT.js} +2 -2
  149. package/dist/{chunk-EUZRMP4Y.js → chunk-YPQOPFP7.js} +20 -20
  150. package/dist/{chunk-USZA7GWL.js → chunk-YQ3GFEUY.js} +2 -2
  151. package/dist/{chunk-BAU36233.js → chunk-YQYINEJI.js} +9 -9
  152. package/dist/{chunk-CE64C5K5.js → chunk-ZF6CV4WZ.js} +1356 -235
  153. package/dist/{chunk-3XE4NRLF.js → chunk-ZKJU55MX.js} +4 -2
  154. package/dist/{chunk-IZYTT3CD.js → chunk-ZKQ63XZ5.js} +16 -39
  155. package/dist/{chunk-6TAATXXH.js → chunk-ZKVMDNAN.js} +7 -7
  156. package/dist/chunk-ZST3FRCV.js +132 -0
  157. package/dist/cli/index.js +50 -38
  158. package/dist/{clio-L2P7S2R2.js → clio-JUDCLNHC.js} +11 -11
  159. package/dist/clio-context-tools-FT672MNZ.js +136 -0
  160. package/dist/{code-nav-B5LNX4KU.js → code-nav-7OVCTP2Z.js} +39 -37
  161. package/dist/{components-63MMQKUT.js → components-OZXZMDWU.js} +11 -11
  162. package/dist/config-P3ZQVF63.js +275 -0
  163. package/dist/config-graph-GKAOBAS5.js +160 -0
  164. package/dist/{configure-LMVQJ46J.js → configure-25LRYZJG.js} +56 -55
  165. package/dist/context-72VQV7JX.js +73 -0
  166. package/dist/{context-YG2LZDYZ.js → context-COWRWXP3.js} +89 -83
  167. package/dist/{context-XSZKKFBW.js → context-WB3D474G.js} +16 -16
  168. package/dist/{context-clear-AC5NXHM2.js → context-clear-Y4LYMWC6.js} +88 -82
  169. package/dist/{context-index-KKTPRV5G.js → context-index-W6A4V7OC.js} +4 -4
  170. package/dist/{context-map-T7ROR5D5.js → context-map-DKL3QT6D.js} +3 -3
  171. package/dist/{context-working-set-F4Q4J3NS.js → context-working-set-TMZYVC7A.js} +27 -25
  172. package/dist/data-tool-KMBWKKWR.js +2987 -0
  173. package/dist/{detail-H73BEF2N.js → detail-4GLROGY5.js} +89 -83
  174. package/dist/{dispatch-runner-3RY5FSJC.js → dispatch-runner-TR3LBP5P.js} +113 -107
  175. package/dist/docs-ZK777W2G.js +101 -0
  176. package/dist/{doctor-EQYJOGUG.js → doctor-WC4OV2OB.js} +76 -73
  177. package/dist/{eval-4P7O6CCE.js → eval-FUNWJNUJ.js} +88 -73
  178. package/dist/{eval-inventory-QOYZERXJ.js → eval-inventory-CX24K2JT.js} +5 -60
  179. package/dist/evals-L73EBHSU.js +104 -0
  180. package/dist/{evidence-O76QF7TZ.js → evidence-AVJ2RTHX.js} +99 -93
  181. package/dist/{evidence-D6GUSYJW.js → evidence-P4NZOAK7.js} +88 -82
  182. package/dist/evidence-Y55WKYHH.js +246 -0
  183. package/dist/{evolve-H47BCETS.js → evolve-MAWKRYWF.js} +93 -87
  184. package/dist/{extensions-NNL3ZOCU.js → extensions-PYQH3H47.js} +14 -13
  185. package/dist/fleet-M4H2QBWT.js +268 -0
  186. package/dist/{fleet-KMNS6NOM.js → fleet-ULBXXRDR.js} +146 -138
  187. package/dist/{fleet-commands-DOWSYCBX.js → fleet-commands-7NNC4JZU.js} +18 -17
  188. package/dist/fleet-decisions-EHEY7KPU.js +52 -0
  189. package/dist/{fleet-graph-F2DE2TME.js → fleet-graph-LQ2AHZT3.js} +24 -24
  190. package/dist/{fleet-inspect-EN2Q6IVB.js → fleet-inspect-5IGBIIYZ.js} +98 -258
  191. package/dist/{fleet-preflight-FRLETDD3.js → fleet-preflight-UTTNOKMG.js} +9 -4
  192. package/dist/{fleet-validate-B2XDLS57.js → fleet-validate-YGILJKA6.js} +29 -29
  193. package/dist/{fleet-verify-4JKUWGJ7.js → fleet-verify-AUWTCDKR.js} +88 -82
  194. package/dist/{fleet-view-BHJFW26B.js → fleet-view-TGUFCY5A.js} +90 -84
  195. package/dist/{init-XAT5N5YM.js → init-GFN2Z7NF.js} +111 -104
  196. package/dist/install-6PIF6F6W.js +19 -0
  197. package/dist/{interop-FVECHFKG.js → interop-EF5JUWWK.js} +29 -29
  198. package/dist/{inventory-7KFQGLCV.js → inventory-I6VJDDYF.js} +90 -84
  199. package/dist/library-3J5IO2OJ.js +75 -0
  200. package/dist/{library-QAPAO23R.js → library-IJTOFTDS.js} +20 -19
  201. package/dist/{library-NY2XOT75.js → library-Z3KZSHPE.js} +35 -35
  202. package/dist/{library-import-5Y6MAS3R.js → library-import-IMKFLDHX.js} +29 -29
  203. package/dist/{library-inventory-JT6HWITQ.js → library-inventory-CQP5D6GU.js} +21 -21
  204. package/dist/{library-validation-EQUH25DC.js → library-validation-33UTX7AI.js} +19 -19
  205. package/dist/mcp-5FWZKUS6.js +26 -0
  206. package/dist/{memory-DYVTTCP6.js → memory-36CWN67Y.js} +93 -87
  207. package/dist/{models-MASFJ6Y2.js → models-KQ6PQJJQ.js} +57 -56
  208. package/dist/{monitor-YMP4NXJJ.js → monitor-XX6ZD6KC.js} +98 -91
  209. package/dist/{orchestrator-AFQRRTEI.js → orchestrator-SK6HDAOP.js} +1537 -832
  210. package/dist/{panes-NICTHQCV.js → panes-L27QRXUH.js} +14 -14
  211. package/dist/{panes-D3Y2KFG5.js → panes-LXZIWNOZ.js} +4 -4
  212. package/dist/{paths-PSFAUIGO.js → paths-7DJDU4P4.js} +6 -6
  213. package/dist/{preload-5Q7VXRFJ.js → preload-K2TDYI4Y.js} +88 -82
  214. package/dist/{reset-7NKZK7JN.js → reset-73VU3XNT.js} +13 -13
  215. package/dist/{resources-NILSIZAT.js → resources-3BYJYVYL.js} +24 -24
  216. package/dist/{run-BPZGEBZV.js → run-AR7PY6GW.js} +144 -136
  217. package/dist/run-script-H2KUDIII.js +41 -0
  218. package/dist/settings-3VMBMWID.js +72 -0
  219. package/dist/{share-EZ6ERBMH.js → share-HVWH4FPF.js} +30 -30
  220. package/dist/{skills-BTVVNYVM.js → skills-5TYEY75Q.js} +30 -30
  221. package/dist/{skills-eval-UY34MNK7.js → skills-eval-CK3MD63Z.js} +114 -103
  222. package/dist/{skills-inventory-JDHSIA7I.js → skills-inventory-KSFYG3I6.js} +24 -24
  223. package/dist/{slash-commands-K4FNQ2AT.js → slash-commands-DMVHML7P.js} +60 -57
  224. package/dist/{steer-2B3EQGFH.js → steer-XCD6V3EW.js} +4 -4
  225. package/dist/{support-L2SOL3IE.js → support-JAZL6VBR.js} +7 -7
  226. package/dist/system-3TDQRMZZ.js +116 -0
  227. package/dist/{targets-44VKGFLN.js → targets-EZKHAYRN.js} +74 -72
  228. package/dist/{tasks-3KODKFU7.js → tasks-SNEFHWYW.js} +18 -18
  229. package/dist/{terminal-lease-LXA7MMPO.js → terminal-lease-BNLFA4OF.js} +8 -7
  230. package/dist/{tools-3UB7TEVR.js → tools-7IM6BDCE.js} +12 -12
  231. package/dist/{trace-TAMIU4OJ.js → trace-C3MBGD4S.js} +16 -65
  232. package/dist/{tui-primitives-A6MUW32V.js → tui-primitives-36BY2774.js} +2 -2
  233. package/dist/{uninstall-QYVRPEM4.js → uninstall-WWLOSZ42.js} +35 -10
  234. package/dist/{upgrade-7PMKM2JH.js → upgrade-ETK2JNSJ.js} +42 -51
  235. package/dist/{usage-6EQV7EQK.js → usage-S2HOB7BZ.js} +112 -102
  236. package/dist/{verifiers-JLITWSHU.js → verifiers-QDTEVH7R.js} +26 -24
  237. package/dist/{verify-T7NAEVIG.js → verify-SUKUK6XM.js} +16 -15
  238. package/dist/web/client/THIRD_PARTY_LICENSES.md +1809 -0
  239. package/dist/web/client/assets/abnfDiagram-VCTEODGH-BznNOe_I.js +1 -0
  240. package/dist/web/client/assets/arc-Pry-7G1_.js +1 -0
  241. package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +1 -0
  242. package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +36 -0
  243. package/dist/web/client/assets/array-BifhSqXX.js +1 -0
  244. package/dist/web/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
  245. package/dist/web/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
  246. package/dist/web/client/assets/blockDiagram-I7D4REHJ-prINbpbM.js +129 -0
  247. package/dist/web/client/assets/c4Diagram-7LVT6UL2-DkVRKtyU.js +38 -0
  248. package/dist/web/client/assets/channel-c4EeUUqA.js +1 -0
  249. package/dist/web/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  250. package/dist/web/client/assets/chunk-4HAMMTFA-CV0Z1ApC.js +62 -0
  251. package/dist/web/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  252. package/dist/web/client/assets/chunk-75Z2AOVW-D34Nohxq.js +2 -0
  253. package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +125 -0
  254. package/dist/web/client/assets/chunk-F27PBJKO-CmRojxkG.js +1 -0
  255. package/dist/web/client/assets/chunk-FOHPRMQF-CoA4358r.js +161 -0
  256. package/dist/web/client/assets/chunk-GMAD6QVW-ClYZmc73.js +72 -0
  257. package/dist/web/client/assets/chunk-GVQU2GXP-B2BiHFt-.js +1 -0
  258. package/dist/web/client/assets/chunk-IMKFNOWR-BGApZ8nP.js +231 -0
  259. package/dist/web/client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  260. package/dist/web/client/assets/chunk-L3NEJ4N5-DIzCgpkY.js +1 -0
  261. package/dist/web/client/assets/chunk-OSK3NFVY-BPT-yePv.js +10 -0
  262. package/dist/web/client/assets/chunk-P2QGCYS3-BC1WTc2t.js +1 -0
  263. package/dist/web/client/assets/chunk-POPQ4Y6H-BSjzBmZU.js +1 -0
  264. package/dist/web/client/assets/chunk-PWAF6VOD-BIjLs86Z.js +1 -0
  265. package/dist/web/client/assets/chunk-SHT3W25Y-CduDz2cm.js +168 -0
  266. package/dist/web/client/assets/chunk-SVP7TREG-XUn4pPAP.js +88 -0
  267. package/dist/web/client/assets/chunk-TICWLB2K-DcBy2DKy.js +206 -0
  268. package/dist/web/client/assets/chunk-XXDRQBXY-DqAYeljN.js +1 -0
  269. package/dist/web/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  270. package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +1 -0
  271. package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +1 -0
  272. package/dist/web/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
  273. package/dist/web/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
  274. package/dist/web/client/assets/cose-bilkent-JH36ORCC-CVh1icwb.js +1 -0
  275. package/dist/web/client/assets/cynefin-OW5HDTMX-BecPbyM6.js +1 -0
  276. package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-BzMzFwyT.js +62 -0
  277. package/dist/web/client/assets/cytoscape.esm-c2aL46s-.js +321 -0
  278. package/dist/web/client/assets/dagre-C-rnJpZF.js +1 -0
  279. package/dist/web/client/assets/dagre-GXQ25YYZ-CAWJmRMG.js +4 -0
  280. package/dist/web/client/assets/defaultLocale-BFoDCU3G.js +1 -0
  281. package/dist/web/client/assets/diagram-S7CK7UJ4--lp0ALmn.js +30 -0
  282. package/dist/web/client/assets/diagram-UQ7AKVKN-gKUnsjcj.js +41 -0
  283. package/dist/web/client/assets/diagram-VSXAHHWV-BoN5D1Gh.js +3 -0
  284. package/dist/web/client/assets/diagram-VX7I27RA-BMtuswQ6.js +24 -0
  285. package/dist/web/client/assets/diagram-Z3DM3KII-DtU8LXrA.js +24 -0
  286. package/dist/web/client/assets/dist-v5Q1xZ2K.js +1 -0
  287. package/dist/web/client/assets/ebnfDiagram-PWID7BFC-DDcnv9BH.js +1 -0
  288. package/dist/web/client/assets/erDiagram-RLTQ6QDP-DvRb4iDL.js +99 -0
  289. package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +1 -0
  290. package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +1 -0
  291. package/dist/web/client/assets/framework-YGoR34M4.js +9 -0
  292. package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +292 -0
  293. package/dist/web/client/assets/gitGraph-4MIJSDKK-DjD_AAMj.js +1 -0
  294. package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CDyN9n2u.js +106 -0
  295. package/dist/web/client/assets/graphlib-DS17s2tU.js +1 -0
  296. package/dist/web/client/assets/index-CVcy0FAn.js +75 -0
  297. package/dist/web/client/assets/index-Dsi52apB.css +1 -0
  298. package/dist/web/client/assets/info-A6RAGUB7-C_XK8Hq0.js +1 -0
  299. package/dist/web/client/assets/infoDiagram-27XIBGKW-DIe4tJ1i.js +2 -0
  300. package/dist/web/client/assets/init-C-OQMol4.js +1 -0
  301. package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-CVl5unKI.js +70 -0
  302. package/dist/web/client/assets/journeyDiagram-3NMN7TZE-CPEB1Vt8.js +139 -0
  303. package/dist/web/client/assets/kanban-definition-UXKFOSKX-j-9WXjYQ.js +89 -0
  304. package/dist/web/client/assets/katex-ZlcWpGUi.js +257 -0
  305. package/dist/web/client/assets/line-BIDAcEtX.js +1 -0
  306. package/dist/web/client/assets/linear-SzVmGSw4.js +1 -0
  307. package/dist/web/client/assets/mermaid-parser.core-Ux4vssh0.js +7 -0
  308. package/dist/web/client/assets/mermaid.core-CDuwVKeh.js +44 -0
  309. package/dist/web/client/assets/mindmap-definition-YA3MSWOX-5MlQEeQ6.js +96 -0
  310. package/dist/web/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
  311. package/dist/web/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
  312. package/dist/web/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
  313. package/dist/web/client/assets/ordinal-BDEzSJ7C.js +1 -0
  314. package/dist/web/client/assets/packet-AYTQ26CC-DRO66c9Q.js +1 -0
  315. package/dist/web/client/assets/path-fybaL0A-.js +1 -0
  316. package/dist/web/client/assets/pegDiagram-XKGWAZYB-BakZnSjM.js +1 -0
  317. package/dist/web/client/assets/pie-WAS4IAKB-BEzcmhz8.js +1 -0
  318. package/dist/web/client/assets/pieDiagram-E7YTZNPT-DpmqgoPt.js +39 -0
  319. package/dist/web/client/assets/prism-bash-D6zCJ74D.js +1 -0
  320. package/dist/web/client/assets/prism-c-04YixN25.js +1 -0
  321. package/dist/web/client/assets/prism-clike-DapgWyxx.js +1 -0
  322. package/dist/web/client/assets/prism-core-BtsZdCS6.js +1 -0
  323. package/dist/web/client/assets/prism-cpp-C-lJbC-6.js +1 -0
  324. package/dist/web/client/assets/prism-css-CPgOzxXp.js +1 -0
  325. package/dist/web/client/assets/prism-diff-BF8m0_mq.js +3 -0
  326. package/dist/web/client/assets/prism-docker-DkT6yOFj.js +1 -0
  327. package/dist/web/client/assets/prism-fortran-Be5x3y1V.js +1 -0
  328. package/dist/web/client/assets/prism-go-C_8qAH5n.js +1 -0
  329. package/dist/web/client/assets/prism-ini-BESK3y0r.js +1 -0
  330. package/dist/web/client/assets/prism-javascript-BnO-swvr.js +1 -0
  331. package/dist/web/client/assets/prism-json-Dp_-W-Hv.js +1 -0
  332. package/dist/web/client/assets/prism-jsx-D-D0NWtC.js +1 -0
  333. package/dist/web/client/assets/prism-julia-DIjOgiAV.js +1 -0
  334. package/dist/web/client/assets/prism-latex-DNMbqcH_.js +1 -0
  335. package/dist/web/client/assets/prism-makefile-CRKWLQ8l.js +1 -0
  336. package/dist/web/client/assets/prism-markdown-C0FPJ1Iz.js +1 -0
  337. package/dist/web/client/assets/prism-markup-Cp04rIa1.js +1 -0
  338. package/dist/web/client/assets/prism-matlab-D-nk08al.js +1 -0
  339. package/dist/web/client/assets/prism-python-CfiSVtM6.js +1 -0
  340. package/dist/web/client/assets/prism-r-QmNGR8LX.js +1 -0
  341. package/dist/web/client/assets/prism-rust-Bu9N8X3N.js +1 -0
  342. package/dist/web/client/assets/prism-shell-session-Be4UuYoM.js +1 -0
  343. package/dist/web/client/assets/prism-sql-CYhVDMEE.js +1 -0
  344. package/dist/web/client/assets/prism-toml-DKb54GAT.js +1 -0
  345. package/dist/web/client/assets/prism-tsx-p6J2Kc_4.js +1 -0
  346. package/dist/web/client/assets/prism-typescript-BMqONzxf.js +1 -0
  347. package/dist/web/client/assets/prism-yaml-C0JHu8gr.js +1 -0
  348. package/dist/web/client/assets/purify.es-ChwZkWde.js +3 -0
  349. package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-DuMPwwV2.js +7 -0
  350. package/dist/web/client/assets/radar-RG4KPBEZ-Djm3oXl5.js +1 -0
  351. package/dist/web/client/assets/railroad-74A4TZTK-Cpvkwsao.js +1 -0
  352. package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +1 -0
  353. package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +1 -0
  354. package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +1 -0
  355. package/dist/web/client/assets/railroadDiagram-O6MQD6OU-CgMS4B6R.js +1 -0
  356. package/dist/web/client/assets/requirementDiagram-BXWQKSXE-CX5eoNdN.js +84 -0
  357. package/dist/web/client/assets/rolldown-runtime-hePW80VL.js +1 -0
  358. package/dist/web/client/assets/rough.esm-Dy-Kn_BL.js +1 -0
  359. package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-CODBX2N3.js +40 -0
  360. package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-eUhhF8OR.js +162 -0
  361. package/dist/web/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
  362. package/dist/web/client/assets/src-B6xuSHsQ.js +1 -0
  363. package/dist/web/client/assets/stateDiagram-D77RDMKH-vR6l0NC2.js +1 -0
  364. package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +1 -0
  365. package/dist/web/client/assets/swimlanes-42K2YHIH-v9Tw_zX7.js +1 -0
  366. package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +8 -0
  367. package/dist/web/client/assets/timeline-definition-24CTP7MA-DxianbhU.js +120 -0
  368. package/dist/web/client/assets/treeView-Q6P3EWNA-DLxnZb9R.js +1 -0
  369. package/dist/web/client/assets/treemap-WGGIJYW6-I7UnZ6xJ.js +1 -0
  370. package/dist/web/client/assets/vennDiagram-4TSXK5OY-Ar7M8Mrj.js +34 -0
  371. package/dist/web/client/assets/wardley-WFR3VGLG-B8ZSHeDu.js +1 -0
  372. package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-Qks2FmIn.js +78 -0
  373. package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BBBjRtiE.js +7 -0
  374. package/dist/web/client/clio-coder-logo.webp +0 -0
  375. package/dist/web/client/icon-192.png +0 -0
  376. package/dist/web/client/icon-512.png +0 -0
  377. package/dist/web/client/index.html +6 -0
  378. package/dist/web/client/manifest.webmanifest +15 -0
  379. package/dist/web/client/offline.css +55 -0
  380. package/dist/web/client/offline.html +5 -0
  381. package/dist/web/client/offline.js +27 -0
  382. package/dist/web/client/sw.js +34 -0
  383. package/dist/web/ops-worker.js +37 -0
  384. package/dist/web/reads-worker.js +1726 -0
  385. package/dist/web/server.js +8499 -0
  386. package/dist/web-EMGUGGEI.js +13 -0
  387. package/dist/{web-fetch-W4TNW4Q7.js → web-fetch-6BRRVQON.js} +22 -5
  388. package/dist/{wiki-generate-T2TJQJUA.js → wiki-generate-XHSJTDOP.js} +120 -113
  389. package/dist/{with-panes-CHFC7HGI.js → with-panes-Z6BTEHMZ.js} +12 -12
  390. package/dist/worker/entry.js +113 -99
  391. package/docs/README.md +28 -27
  392. package/docs/architecture/acp.md +5 -9
  393. package/docs/architecture/alcf-provider.md +0 -3
  394. package/docs/architecture/architecture.md +0 -3
  395. package/docs/architecture/artifact-placement.md +12 -4
  396. package/docs/architecture/artifact-versions.md +0 -3
  397. package/docs/architecture/capacity-and-scheduling.md +0 -3
  398. package/docs/architecture/context-engine.md +0 -3
  399. package/docs/architecture/context-working-set.md +0 -3
  400. package/docs/architecture/dispatch-architecture-rationale.md +0 -3
  401. package/docs/architecture/dispatch-typed-intent.md +0 -3
  402. package/docs/architecture/evidence-and-memory.md +0 -3
  403. package/docs/architecture/library.md +1 -3
  404. package/docs/architecture/middleware-and-components.md +0 -3
  405. package/docs/architecture/model-catalog.md +1 -4
  406. package/docs/architecture/observability.md +0 -3
  407. package/docs/architecture/pi-boundary.md +6 -9
  408. package/docs/architecture/prompt-envelope-and-tools.md +37 -30
  409. package/docs/architecture/provider-adapter-cookbook.md +1 -4
  410. package/docs/architecture/safety-model.md +19 -9
  411. package/docs/architecture/session-lifecycle.md +10 -7
  412. package/docs/architecture/time-conventions.md +0 -3
  413. package/docs/architecture/trace-store.md +28 -20
  414. package/docs/architecture/tui-design.md +38 -18
  415. package/docs/architecture/worker-context.md +1 -3
  416. package/docs/architecture/worker-dispatch-mechanics.md +1 -4
  417. package/docs/guide/authoring-plugins.md +1 -3
  418. package/docs/guide/built-in-agents.md +0 -3
  419. package/docs/guide/commands-and-modes.md +41 -25
  420. package/docs/guide/configuration-and-targets.md +204 -9
  421. package/docs/guide/configuration-reference.md +125 -17
  422. package/docs/guide/environment-variables.md +2 -8
  423. package/docs/guide/exit-codes-and-output.md +0 -3
  424. package/docs/guide/extensions-and-sharing.md +0 -3
  425. package/docs/guide/fleet-dispatch.md +3 -5
  426. package/docs/guide/glossary.md +1 -4
  427. package/docs/guide/harness-extensions.md +0 -2
  428. package/docs/guide/installation-and-lifecycle.md +3 -6
  429. package/docs/guide/interop.md +0 -2
  430. package/docs/guide/panes-and-files.md +0 -3
  431. package/docs/guide/plugins.md +0 -3
  432. package/docs/guide/proactive-memory.md +0 -3
  433. package/docs/guide/resource-library.md +1 -3
  434. package/docs/guide/skills-marketplace.md +0 -2
  435. package/docs/guide/tool-usage.md +166 -67
  436. package/docs/guide/troubleshooting.md +1 -4
  437. package/docs/history/config-knobs-audit.md +0 -3
  438. package/docs/history/release-cut-checklist.md +0 -3
  439. package/docs/process/development-pipeline.md +0 -3
  440. package/docs/process/documentation-coverage.md +3 -3
  441. package/docs/process/documentation-guide.md +16 -22
  442. package/docs/process/eval-runner.md +0 -3
  443. package/docs/process/evals-internal.md +0 -3
  444. package/docs/process/evolution.md +0 -3
  445. package/docs/process/fleet-demo-runbook.md +6 -9
  446. package/docs/process/git-commit-provenance.md +0 -3
  447. package/docs/process/performance-methodology.md +1 -4
  448. package/docs/process/release-cut-checklist.md +114 -221
  449. package/docs/process/scientific-validation.md +23 -6
  450. package/docs/process/tool-audit-v0.4.9.md +357 -0
  451. package/library/registry.yaml +2 -2
  452. package/library/skills/meta/clio-coder-test/SKILL.md +25 -15
  453. package/library/skills/meta/clio-coder-test/evals.md +16 -2
  454. package/library/skills/meta/clio-coder-test/plugin.json +1 -1
  455. package/library/skills/meta/clio-coder-test/references/test-map.md +19 -18
  456. package/library/skills/registry.yaml +2 -2
  457. package/library/skills/skill-marketplace.json +1 -1
  458. package/package.json +13 -11
  459. package/src/cli/argv.ts +31 -0
  460. package/src/cli/clio.ts +17 -13
  461. package/src/cli/config.ts +4 -0
  462. package/src/cli/docs.ts +65 -328
  463. package/src/cli/doctor-panes.ts +1 -1
  464. package/src/cli/doctor.ts +3 -1
  465. package/src/cli/index.ts +17 -2
  466. package/src/cli/mcp.ts +106 -0
  467. package/src/cli/skills-eval.ts +8 -2
  468. package/src/cli/trace.ts +4 -65
  469. package/src/cli/uninstall.ts +26 -0
  470. package/src/cli/upgrade.ts +34 -38
  471. package/src/cli/usage.ts +3 -0
  472. package/src/cli/verifiers.ts +1 -1
  473. package/src/cli/web.ts +79 -0
  474. package/src/core/bash-exec.ts +27 -4
  475. package/src/core/bus-events.ts +3 -4
  476. package/src/core/config.ts +73 -1
  477. package/src/core/defaults.ts +10 -1
  478. package/src/core/domain-loader.ts +37 -28
  479. package/src/core/event-bus.ts +1 -1
  480. package/src/core/run-records.ts +438 -0
  481. package/src/core/safe-exec.ts +506 -56
  482. package/src/core/skill-activation.ts +5 -3
  483. package/src/core/termination.ts +16 -12
  484. package/src/core/tool-names.ts +33 -12
  485. package/src/domains/agents/contract.ts +1 -1
  486. package/src/domains/agents/extension.ts +18 -10
  487. package/src/domains/config/extension.ts +5 -4
  488. package/src/domains/context/clio-md.ts +1 -1
  489. package/src/domains/context/worker/pressure.ts +6 -2
  490. package/src/domains/context/working-set/path-index.ts +7 -2
  491. package/src/domains/dispatch/code-step.ts +7 -2
  492. package/src/domains/dispatch/contract.ts +7 -0
  493. package/src/domains/dispatch/execution-role.ts +3 -3
  494. package/src/domains/dispatch/execution-scheduler.ts +204 -79
  495. package/src/domains/dispatch/extension.ts +206 -26
  496. package/src/domains/dispatch/fleet-preflight.ts +18 -3
  497. package/src/domains/dispatch/fleet-run.ts +1 -0
  498. package/src/domains/dispatch/gate-decisions.ts +3 -3
  499. package/src/domains/dispatch/heartbeat.ts +1 -1
  500. package/src/domains/dispatch/host-verification.ts +16 -14
  501. package/src/domains/dispatch/index.ts +1 -0
  502. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  503. package/src/domains/dispatch/receipt-findings.ts +3 -4
  504. package/src/domains/dispatch/receipt-integrity.ts +3 -0
  505. package/src/domains/dispatch/reservation-store.ts +7 -9
  506. package/src/domains/dispatch/route-facts.ts +1 -1
  507. package/src/domains/dispatch/state.ts +4 -5
  508. package/src/domains/dispatch/types.ts +3 -1
  509. package/src/domains/eval/metrics/tracked.ts +22 -2
  510. package/src/domains/evidence/build.ts +35 -7
  511. package/src/domains/extensions/operator-runtime.ts +3 -1
  512. package/src/domains/gateway/mcp/client.ts +923 -0
  513. package/src/domains/gateway/mcp/config.ts +456 -0
  514. package/src/domains/gateway/mcp/index.ts +88 -0
  515. package/src/domains/gateway/mcp/protocol.ts +273 -0
  516. package/src/domains/gateway/mcp/trust.ts +263 -0
  517. package/src/domains/lifecycle/doctor.ts +17 -3
  518. package/src/domains/middleware/hooks.ts +2 -2
  519. package/src/domains/mux/contract.ts +5 -9
  520. package/src/domains/mux/detect.ts +1 -1
  521. package/src/domains/mux/extension.ts +1 -1
  522. package/src/domains/mux/protocol.ts +5 -7
  523. package/src/domains/mux/socket-client.ts +3 -3
  524. package/src/domains/observability/accountability.ts +2 -2
  525. package/src/domains/observability/background-memory-usage.ts +3 -0
  526. package/src/domains/observability/compaction-usage.ts +2 -0
  527. package/src/domains/observability/contract.ts +7 -3
  528. package/src/domains/observability/cost.ts +5 -0
  529. package/src/domains/observability/evidence-index.ts +2 -2
  530. package/src/domains/observability/extension.ts +1 -0
  531. package/src/domains/observability/out-of-turn-usage.ts +2 -0
  532. package/src/domains/observability/projection.ts +10 -0
  533. package/src/domains/observability/trace-store.ts +65 -5
  534. package/src/domains/prompts/compiler.ts +41 -23
  535. package/src/domains/prompts/extension.ts +4 -17
  536. package/src/domains/prompts/fragments/identity/docs-routing.md +2 -2
  537. package/src/domains/prompts/fragments/operating/skills.md +12 -10
  538. package/src/domains/providers/cache-deployment.ts +147 -0
  539. package/src/domains/providers/catalog.ts +12 -7
  540. package/src/domains/providers/extension.ts +27 -5
  541. package/src/domains/providers/index.ts +6 -1
  542. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +42 -10
  543. package/src/domains/providers/plugins.ts +3 -13
  544. package/src/domains/providers/probe/http.ts +44 -59
  545. package/src/domains/providers/probe/reasoning.ts +2 -0
  546. package/src/domains/providers/runtimes/common/local-synth.ts +4 -0
  547. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +20 -31
  548. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +9 -4
  549. package/src/domains/providers/types/target-descriptor.ts +17 -0
  550. package/src/domains/safety/action-classifier.ts +17 -1
  551. package/src/domains/safety/call-target.ts +14 -0
  552. package/src/domains/safety/contract.ts +1 -1
  553. package/src/domains/safety/finish-contract.ts +9 -3
  554. package/src/domains/safety/loop-detector.ts +1 -1
  555. package/src/domains/safety/policy-engine.ts +7 -0
  556. package/src/domains/safety/protected-artifacts.ts +3 -4
  557. package/src/domains/safety/rejection-feedback.ts +1 -1
  558. package/src/domains/safety/scope.ts +2 -3
  559. package/src/domains/safety/validation-contract.ts +3 -2
  560. package/src/domains/scheduling/budget.ts +5 -3
  561. package/src/domains/scheduling/contract.ts +2 -1
  562. package/src/domains/scheduling/extension.ts +3 -3
  563. package/src/domains/session/compaction/branch-summary.ts +1 -1
  564. package/src/domains/session/compaction/compact.ts +29 -3
  565. package/src/domains/session/compaction/cut-point.ts +1 -1
  566. package/src/domains/session/compaction/tokens.ts +5 -10
  567. package/src/domains/session/contract.ts +1 -1
  568. package/src/domains/session/cwd-fallback.ts +2 -2
  569. package/src/domains/session/entries.ts +1 -0
  570. package/src/domains/session/handoff.ts +5 -1
  571. package/src/domains/session/history.ts +6 -0
  572. package/src/domains/session/manager.ts +14 -7
  573. package/src/domains/session/retry.ts +2 -1
  574. package/src/domains/session/session-artifacts.ts +12 -7
  575. package/src/domains/session/task-board.ts +2 -3
  576. package/src/domains/session/usage.ts +6 -7
  577. package/src/engine/acp/server.ts +11 -0
  578. package/src/engine/ai.ts +2 -0
  579. package/src/engine/apis/openai-completions.ts +17 -4
  580. package/src/engine/loop-guard.ts +7 -0
  581. package/src/engine/prewarm.ts +232 -0
  582. package/src/engine/provider-diagnostics.ts +6 -1
  583. package/src/engine/provider-error-body.ts +65 -0
  584. package/src/engine/session.ts +118 -29
  585. package/src/engine/worker-runtime.ts +3 -0
  586. package/src/entry/boot-options.ts +2 -0
  587. package/src/entry/orchestrator.ts +38 -18
  588. package/src/interactive/chat-loop-messages.ts +3 -0
  589. package/src/interactive/chat-loop-policy.ts +1 -0
  590. package/src/interactive/chat-loop.ts +10 -12
  591. package/src/interactive/chat-panel.ts +23 -9
  592. package/src/interactive/chat-renderer.ts +33 -11
  593. package/src/interactive/clio-editor.ts +13 -5
  594. package/src/interactive/dispatch-board.ts +70 -30
  595. package/src/interactive/editor-submit.ts +30 -25
  596. package/src/interactive/footer/widgets.ts +12 -9
  597. package/src/interactive/interactive-presentation.ts +2 -3
  598. package/src/interactive/mux-bridge.ts +3 -7
  599. package/src/interactive/overlay-general-openers.ts +14 -7
  600. package/src/interactive/overlays/cwd-fallback.ts +1 -1
  601. package/src/interactive/overlays/library-model.ts +114 -35
  602. package/src/interactive/overlays/library.ts +52 -5
  603. package/src/interactive/overlays/list-overlay.ts +4 -1
  604. package/src/interactive/overlays/session-selector.ts +28 -23
  605. package/src/interactive/overlays/settings.ts +20 -1
  606. package/src/interactive/overlays/tree-selector.ts +47 -10
  607. package/src/interactive/panes-runtime.ts +1 -1
  608. package/src/interactive/prewarm.ts +11 -197
  609. package/src/interactive/renderers/compaction-summary.ts +1 -1
  610. package/src/interactive/renderers/provider-error.ts +118 -0
  611. package/src/interactive/renderers/retry-status.ts +59 -23
  612. package/src/interactive/renderers/tool-execution.ts +67 -7
  613. package/src/interactive/renderers/worker-answer.ts +198 -0
  614. package/src/interactive/renderers/worker-entry.ts +57 -163
  615. package/src/interactive/session-usage-reseed.ts +2 -0
  616. package/src/interactive/side-question.ts +2 -0
  617. package/src/interactive/slash-commands.ts +26 -1
  618. package/src/interactive/slash-spec.ts +2 -2
  619. package/src/interactive/theme/labels.ts +66 -30
  620. package/src/interactive/turn-context.ts +1 -0
  621. package/src/interactive/turn-persistence.ts +9 -1
  622. package/src/interactive/turn-prewarm.ts +126 -19
  623. package/src/interactive/turn-recovery.ts +2 -1
  624. package/src/interactive/turn-runtime.ts +36 -5
  625. package/src/interactive/view/artifacts.ts +3 -2
  626. package/src/interactive/view/view-overlay.ts +96 -20
  627. package/src/tools/agent-tools.ts +21 -7
  628. package/src/tools/artifact.ts +16 -8
  629. package/src/tools/bash.ts +90 -11
  630. package/src/tools/bootstrap.ts +42 -4
  631. package/src/tools/builtin-tool-catalog.ts +80 -11
  632. package/src/tools/context/index.ts +27 -31
  633. package/src/tools/context/library.ts +3 -1
  634. package/src/tools/context/surface.ts +12 -26
  635. package/src/tools/core-bootstrap.ts +72 -1
  636. package/src/tools/data/csv.ts +1189 -0
  637. package/src/tools/data/index.ts +308 -0
  638. package/src/tools/data/json.ts +1799 -0
  639. package/src/tools/data/jsonl.ts +561 -0
  640. package/src/tools/data/shared.ts +452 -0
  641. package/src/tools/edit-diff.ts +0 -7
  642. package/src/tools/edit.ts +115 -18
  643. package/src/tools/file-mutation-queue.ts +114 -4
  644. package/src/tools/find.ts +108 -29
  645. package/src/tools/gateway/caps.ts +11 -0
  646. package/src/tools/gateway/clio-context-surface.ts +41 -0
  647. package/src/tools/gateway/clio-context-tools.ts +77 -0
  648. package/src/tools/gateway/data-surface.ts +138 -0
  649. package/src/tools/gateway/data-tool.ts +201 -0
  650. package/src/tools/gateway/index.ts +342 -0
  651. package/src/tools/gateway/mcp-capabilities.ts +469 -0
  652. package/src/tools/grep.ts +88 -33
  653. package/src/tools/harness-extensions.ts +3 -0
  654. package/src/tools/ignore-policy.ts +7 -5
  655. package/src/tools/ls.ts +111 -20
  656. package/src/tools/policy.ts +35 -13
  657. package/src/tools/presentation.ts +6 -0
  658. package/src/tools/read.ts +634 -156
  659. package/src/tools/registry.ts +106 -8
  660. package/src/tools/run-script.ts +997 -0
  661. package/src/tools/spawn-hygiene.ts +157 -5
  662. package/src/tools/surface.ts +163 -0
  663. package/src/tools/verify/authoring.ts +8 -3
  664. package/src/tools/verify/catalog.ts +14 -1
  665. package/src/tools/verify/numeric.ts +367 -59
  666. package/src/tools/verify/perf.ts +171 -9
  667. package/src/tools/verify/scripts.ts +178 -26
  668. package/src/tools/web-fetch-surface.ts +22 -0
  669. package/src/tools/web-fetch.ts +26 -1
  670. package/src/tools/write.ts +45 -19
  671. package/src/worker/spec-contract.ts +27 -0
  672. package/dist/chunk-B6UM3OZC.js +0 -15
  673. package/dist/chunk-GJ24ODAX.js +0 -196
  674. package/dist/chunk-HRAKUPIH.js +0 -57
  675. package/dist/docs-BL7ROUFN.js +0 -292
@@ -1,20 +1,44 @@
1
1
  # Tool Usage Reference
2
2
 
3
- > **Visual blueprint:** The source checkout includes the complete
4
- > [Tool Usage Reference visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/tool_usage_blueprint.html).
5
-
6
- This is the deep usage reference behind the deliberately terse tool descriptions in the prompt envelope. Toolkit v2 keeps rich guidance out of tool descriptions and puts it here, where `context(scope="docs", query=...)` retrieves it section by section. Each tool below has its own self-contained `##` section covering the argument surface, defaults, truncation and continuation behavior, and concrete calls. Source of truth is `src/tools/`.
3
+ This is the deep usage reference behind the deliberately terse tool descriptions in the prompt envelope. Toolkit v2 keeps rich guidance out of tool descriptions and puts it here, where `gateway(op="call", capability="clio_docs", args={query: ...})` retrieves it section by section. Each tool below has its own self-contained `##` section covering the argument surface, defaults, truncation and continuation behavior, and concrete calls. Source of truth is `src/tools/`.
7
4
 
8
5
  In the current source tree, `src/tools/agent-tools.ts` serves as the single agent-tool adapter across both orchestrator and worker runtimes. Both surfaces resolve their executable tools through the exact same `effectiveToolNames` narrowing, ensuring that attested tool schemas never drift from the tools available at runtime. Tools are keyed strictly by the `ToolName` union with no alias table. Argument leniency for weak-model callers is provided exclusively by per-tool `prepareArguments` normalizers declared on `ToolSpec`.
9
6
 
7
+ ## gateway: discover and call secondary capabilities
8
+
9
+ One direct tool exposes `op="find"|"describe"|"call"`, optional `query`, `capability`, and `args`. Source: `src/tools/gateway/index.ts`. `find` filters names and descriptions case-insensitively and returns at most 300 capability rows within a 32 KiB observation allowance, with `name`, `kind` (`builtin`, `extension`, `mcp`), description, and action class. `describe` returns the full description, wire parameter schema, and authority notes. `call` validates `args` and invokes the capability through the registry under its own authority. Direct tools cannot be called through the gateway.
10
+
11
+ | Placement | Capabilities |
12
+ | --- | --- |
13
+ | Direct | read, write, edit, bash, grep, find, ls, context, code_nav, verify, run_script, gateway |
14
+ | Direct, subject to dependency wiring | dispatch, monitor, steer, tasks, ledger, panes, limitation, decide, ask_user |
15
+ | Gateway | artifact, web_read, web_fetch, git, evidence, credential_present, clio_docs, clio_library, data |
16
+ | Gateway, when installed or trusted | `extension_<id>__<name>`, `mcp_<id>__<tool>` |
17
+
18
+ Placement is defined by `src/tools/surface.ts`. The gateway does not grant additional permission. Inner admission preserves safety policy, skill restrictions, approvals, action class, cancellation, result shaping, and evidence. The outer call is counted once; `details.capability` lets ledger consumers recover the underlying tool. A gateway artifact preserves its terminal result and completes the turn. Native workers whose recipe names a gateway capability attach and attest `gateway`, while the admitted capability list still limits find, describe, and call. Worker registries do not receive an MCP source in this release.
19
+
20
+ Trusted local stdio MCP servers connect lazily. `find` discovers trusted servers; `describe` or `call` connects only the owning server. Untrusted project servers are listed with the `clio-coder mcp trust <id>` or `/mcp trust <id>` remedy and are never launched. Cancelling discovery closes the shared connection, fails other waiters, and does not restart it silently during that session. See [MCP configuration](configuration-reference.md#local-stdio-mcp-configuration-and-trust).
21
+
22
+ When server IDs contain `__`, the longest declared server prefix owns the capability name, regardless of discovery order or trust status. For servers `a` and `a__b`, `mcp_a__b__echo` belongs to `a__b`; server `a` cannot register its own `b__echo` tool under that name and reports it as unregistrable. Rename the conflicting server or tool to expose both.
23
+
24
+ MCP call results require a content array, an optional boolean `isError`, and an optional object `structuredContent`; malformed envelopes fail as protocol errors. One MCP call result is bounded to 16 KiB (16,384 bytes) in the model context envelope; larger results are stored as external artifacts and replaced with a preview and pointer.
25
+
26
+ Results with an empty content array and structured content render that object as bounded JSON text for the model, with truncation reported explicitly. Numeric source tokens are preserved, including large integers, long decimals, overflowing exponents, and negative zero. Evidence retains normalized `structuredContentJson` with those tokens under the incoming-line cap; in the JSON-safe `structuredContent` object, numbers that do not round-trip through JavaScript use `{"$literal":"<source token>"}`. Whitespace and object-key formatting are normalized; this is not a byte-for-byte wire archive.
27
+
28
+ ```text
29
+ gateway(op="find", query="data")
30
+ gateway(op="describe", capability="data")
31
+ gateway(op="call", capability="data", args={op: "inspect", path: "results.csv"})
32
+ ```
33
+
10
34
  ## Observation envelope: truncation notices, offload, next hints, and the turn budget
11
35
 
12
- The six envelope-backed OBSERVE tools (read, grep, find, ls, code_nav,
13
- context) share one result envelope, implemented in `src/tools/observation.ts`.
36
+ The envelope-backed OBSERVE tools (`read`, `grep`, `find`, `ls`, `code_nav`,
37
+ `context`, `clio_docs`, `clio_library`, and `data`) and `gateway` find listings share one result envelope, implemented in `src/tools/observation.ts`.
14
38
  The OBSERVE policy plane also contains `credential_present`, whose deliberately
15
39
  minimal result does not use that envelope.
16
40
 
17
- Per-call byte caps: read 50KB (`safety.limits.readBytesPerCall`), grep 16KB for mode=content and 8KB for mode=files/count, find 8KB, ls 8KB, code_nav 16KB, context 16KB for scope=docs and scope=library, and 50KB for scope=skills/workspace.
41
+ Per-call byte caps: read 50KB (`safety.limits.readBytesPerCall`), grep 16KB for mode=content and 8KB for mode=files/count, find 8KB, ls 8KB, code_nav 16KB, `clio_docs` and `clio_library` 16KB, `context` 50KB for skills/workspace, `data` 32KiB, and `gateway` find 32KiB.
18
42
 
19
43
  Truncated text results append exactly one notice line:
20
44
 
@@ -26,9 +50,9 @@ Segments that do not apply are omitted. `<total>` renders as `N+` when the searc
26
50
 
27
51
  Offload: when the byte cap cut content that was already collected, the complete rendering is written to `<clio-coder state dir>/scratch/<sessionId>/<sha256 of the captured text>.txt` and the notice's `full:` segment names the path. Read it with `read` using offset/limit. Tools offload only when the byte cap cut collected content; a bare item-limit truncation continues via `next` and does not offload. `read` never offloads, because the source file is directly re-addressable via `offset`.
28
52
 
29
- JSON-format results (code_nav, context scope=docs/workspace) never get an appended notice. An oversize JSON payload is replaced whole by the parseable stub `{"error":"result exceeded <cap>","offloadPath":"...","next":"..."}` so the model never receives JSON cut mid-document. Empty results are also valid JSON with empty arrays and `next` populated.
53
+ JSON-format results (including code_nav, context workspace, clio_docs, data, and gateway find) never get an appended notice. An oversize JSON payload is replaced whole by the parseable stub `{"error":"result exceeded <cap>","offloadPath":"...","next":"..."}` so the model never receives JSON cut mid-document. Empty results are also valid JSON with empty arrays and `next` populated.
30
54
 
31
- Turn budget: all six OBSERVE tools draw from one shared pool of 192KB per turn (`safety.limits.observationBytesPerTurn`, keyed on `sessionId:turnId`). When the remaining pool shrinks a call below its self cap, a note is appended naming the bytes already used. When the pool is exhausted, the call short-circuits with `[observation budget exhausted for this turn before <tool> ...]` instead of paying for a search whose output cannot be returned. Use narrower arguments or continue in a follow-up turn.
55
+ Turn budget: all envelope-backed tools draw from one shared pool of 192KB per turn (`safety.limits.observationBytesPerTurn`, keyed on `sessionId:turnId`). When the remaining pool shrinks a call below its self cap, a note is appended naming the bytes already used. When the pool is exhausted, the call short-circuits with `[observation budget exhausted for this turn before <tool> ...]` instead of paying for a search whose output cannot be returned. Use narrower arguments or continue in a follow-up turn.
32
56
 
33
57
  ## read: page through a file with offset, limit, and tail
34
58
 
@@ -40,10 +64,11 @@ Arguments:
40
64
  - `offset` (optional). 1-indexed start line; default 1.
41
65
  - `limit` (optional). Max lines to return.
42
66
  - `tail` (optional). Return the last N lines (jump to EOF). Overrides offset/limit.
67
+ - `line_numbers` (optional boolean). Prefix text with source line numbers; default false.
43
68
 
44
- Each call is capped at 2000 lines or `safety.limits.readBytesPerCall`, whichever hits first; the per-turn observation budget can shrink it further. Files larger than 20MB error outright; use grep/find to locate the relevant region instead. A missing file errors with a hint to locate it via code_nav, find, or ls.
69
+ Each call is capped at 2000 lines or `safety.limits.readBytesPerCall`, whichever hits first; the per-turn observation budget can shrink it further. Text files of any size are read through bounded windows. Exact line counting stops at a 32 MiB file-size budget; larger files report an unknown total (`N+`). Images retain a 20 MB (20000000 bytes) ceiling and require model vision support. NUL bytes and invalid UTF-8 in the inspected bytes are refused with zero-based byte offsets instead of being decoded as text. A bounded read does not validate unread regions. A missing file errors with a hint to locate it via code_nav, find, or ls.
45
70
 
46
- Continuation: a truncated result's notice carries `next: offset=<first unshown line>`. read does not offload; the file itself is the continuation source. If a single line exceeds the byte cap, the result is that line's UTF-8 prefix plus an explanatory note suggesting grep with a narrower pattern or edit with exact surrounding text. An `offset` beyond EOF errors with the file's total line count.
71
+ Continuation: a truncated result's notice carries `next: offset=<first unshown line>`. read does not offload; the file itself is the continuation source. If a single line exceeds the byte cap, the result is that line's UTF-8 prefix plus an explanatory note suggesting grep with a narrower pattern or edit with exact surrounding text. An `offset` beyond EOF reports the observed end. When the total is unknown, tail continuation can widen to `tail=2N`; with a known total it can use an exact offset/limit window. `tail` with `line_numbers=true` is refused above the line-count budget because absolute line numbers are unknown. `details.file` records bytes and mtime, and `details.fileChange` reports observed identity changes during reading. A file identity is an observation, not a snapshot or lock against external writers.
47
72
 
48
73
  Reach for read when you know the path and need contents. Use grep first to find where something lives, then read the cited region with offset/limit instead of paging a large file from the top. Use `tail` for logs and build output where the interesting lines are at the end.
49
74
 
@@ -62,9 +87,13 @@ Arguments:
62
87
  - `path` (required).
63
88
  - `edits` (required). Array of `{oldText, newText}` objects. Each `oldText` must match exactly one region of the original file, and regions must not overlap.
64
89
 
65
- Matching runs a cascade: exact substring match first, then a fuzzy match that normalizes Unicode punctuation, non-breaking spaces, and trailing whitespace, then an indentation-relaxed match that compares lines with leading whitespace stripped and re-applies the file's actual indentation to `newText`. If `oldText` matches more than once the call errors and asks for more surrounding context; if it matches nowhere the call errors telling you the text must match exactly including whitespace and newlines; if the result would be byte-identical the call errors with "No changes made".
90
+ For files at most 1 MiB, matching runs a cascade: exact substring match first, then a fuzzy match that normalizes Unicode punctuation, non-breaking spaces, and trailing whitespace, then an indentation-relaxed match that compares lines with leading whitespace stripped and re-applies the file's actual indentation to `newText`. If `oldText` matches more than once the call errors and asks for more surrounding context; if it matches nowhere the call errors telling you the text must match exactly including whitespace and newlines; if the result would be byte-identical the call errors with "No changes made".
66
91
 
67
- The file's BOM and CRLF/LF line endings are preserved: content is normalized to LF for matching and the original ending restored on write. Same-file mutations from edit and write are serialized through a mutation queue. Success returns `edited <path>: N replacement(s)` plus a one-line validation nudge (rerun the failing test or verify; navigation tools do not validate edits), with `details = {diff, firstChangedLine, paths}`.
92
+ Files above 1 MiB require exact matching and do not use fuzzy or indentation fallback. The editor refuses NUL and invalid UTF-8 with zero-based byte offsets, mixed LF/CRLF endings, and bare CR endings. It preserves a BOM and uniform LF or CRLF. It still holds the source and replacement in memory; it is not a streaming transformation.
93
+
94
+ Edit and write serialize same-target mutations and publish atomically through a temporary file in the real target directory, file fsync, and rename. Symlink paths retain their link and update the real target; existing mode bits are preserved. Directories are refused. Ownership, ACLs, extended attributes, and old timestamps are not copied. External writers are not locked: the last rename wins, and an earlier read is not an edit precondition. Failure before rename leaves the target unpublished; a directory-fsync failure after rename reports successful publication with a durability warning. Shared-filesystem durability depends on its rename/fsync guarantees.
95
+
96
+ Success returns replacement counts and a validation nudge with `details.paths`, `details.file = {before: {bytes, mtimeMs} | null, after: {bytes, mtimeMs}}`, and a diff with `firstChangedLine` when eligible. If either version exceeds 1 MiB, diff construction is skipped with an explicit notice.
68
97
 
69
98
  Argument tolerance: `edits` sent as a JSON string is parsed, and a legacy top-level `{oldText, newText}` pair is folded into `edits`.
70
99
 
@@ -87,9 +116,9 @@ Arguments:
87
116
  - `path` (required).
88
117
  - `content` (required). The full file contents.
89
118
 
90
- Success reports the byte count written. If the previous content ended with a newline and the new content does not, the result appends a note so the dropped trailing newline is visible. Writes to the same path are serialized with edit through the file mutation queue.
119
+ Success reports the byte count written. If the previous content ended with a newline and the new content does not, the result appends a note so the dropped trailing newline is visible. Writes use the same atomic publisher, symlink-target behavior, mode preservation, mutation queue, external-writer limitations, and `details.file` before/after identities as edit. A diff is generated only when both versions are at most 1 MiB; otherwise the result names the skipped diff. Reading the previous content for comparison is bounded to 1 MiB plus one overflow byte.
91
120
 
92
- Use write for new files or full regeneration. Use edit for surgical changes to an existing file; write replaces everything and produces no diff.
121
+ Use write for new files or full regeneration. Use edit for surgical changes to an existing file; write replaces everything, with a bounded diff when eligible.
93
122
 
94
123
  ```text
95
124
  write(path="src/tools/new-tool.ts", content="import { Type } from \"typebox\";\n...")
@@ -113,7 +142,7 @@ The default `bounded` policy keeps a tail-biased model excerpt under the 16KB re
113
142
 
114
143
  Presentation is independent from model context. The operator-facing display remains folded and tail-biased under every policy. When the display or selected context omits captured content, the terminal result writes one per-session scratch artifact and names it in the result. Live updates use the selected policy, remain bounded, and never write per-update artifacts. Every terminal result records requested and applied context modes, captured/displayed/context bytes, truncation or downgrade state, and any offload path. Exit code, signal, timeout, abort, and output-cap facts survive every policy. Scratch retrieval may contain the raw retained output; the deterministic `summary` projection is the redacted surface.
115
144
 
116
- A command producing more than 16MB of combined output is stopped with an error. UTF-8 decoding spans process chunks, and a code point split by the hard byte cap is discarded rather than replaced with an invalid character. Raw NUL bytes are removed from model context under every policy, which leaves multi-byte code points and ANSI escape sequences whole; the operator presentation and the scratch artifact keep the captured bytes, and the result still records the omission and its retrieval path. A timeout, abort, output cap, or nonzero exit preserves captured diagnostics and appends a status line such as `bash: command timed out after <ms>ms` or `bash: command failed (exit N)` before canonical shaping.
145
+ A command producing more than 16 MiB of combined stdout/stderr is stopped with an error. The cap result distinguishes raw observed bytes from retained bytes and states where the partial output went: inline, a named offload, or explicitly discarded bytes when retention was cut or failed. Observed bytes count data received through settlement, not hypothetical output from an uninterrupted command. The diagnostic survives summary and metadata-only dispositions. Use `run_script` for disk-streamed output beyond this cap. UTF-8 decoding spans process chunks, and a code point split by the hard byte cap is discarded rather than replaced with an invalid character. Raw NUL bytes are removed from model context under every policy, which leaves multi-byte code points and ANSI escape sequences whole; the operator presentation and the scratch artifact keep the captured bytes, and the result still records the omission and its retrieval path. A timeout, abort, output cap, or nonzero exit preserves captured diagnostics and appends a status line such as `bash: command timed out after <ms>ms` or `bash: command failed (exit N)` before canonical shaping.
117
146
 
118
147
  Reach for bash for builds, git, package managers, and anything without a dedicated tool. Prefer the dedicated tools over their shell equivalents: grep/find/read/ls get envelope truncation, exact continuation hints, and the shared ignore policy that `cat`, shell `grep`, and shell `find` do not. Prefer `verify` over bash for declared package scripts and project-catalog entries, since verify produces typed evidence.
119
148
 
@@ -125,6 +154,61 @@ bash(command="npm run test", timeout_ms=600000, output_policy="summary")
125
154
  bash(command="make artifact", output_policy="metadata-only")
126
155
  ```
127
156
 
157
+ ## run_script: stream a scientific processing step to disk
158
+
159
+ Runs one workspace script on the existing safe-exec substrate, with separate stdout/stderr logs and a provenance manifest. Sources: `src/tools/run-script.ts`, `src/core/run-records.ts`, `src/core/safe-exec.ts`. Execute class; sequential. Its `safetyCall` projects the interpreter vector and cwd to Bash admission, so the interpreter allowlist does not bypass execution policy or create a sandbox.
160
+
161
+ Arguments:
162
+
163
+ - `interpreter` (required). A PATH-resolved name: `python3`, `python`, `node`, `bash`, `sh`, `Rscript`, `julia`, `perl`, `ruby`, or `octave`. Interpreter paths are refused.
164
+ - `script` (required). A regular file inside the workspace; canonical path containment rejects symlink escapes.
165
+ - `args` and `interpreter_args` (optional string arrays). At most 64 entries each, 4096 UTF-8 bytes per entry, without NUL. Interpreter arguments precede the script. Omission supplies `-u` for Python and no flags for the other interpreters; explicit `[]` suppresses that default.
166
+ - `cwd` (optional). Workspace-relative working directory, default root; canonical containment applies.
167
+ - `timeout_ms` (optional). Default 600000. Must be a positive integer; values above 21600000 clamp to that six-hour maximum. Zero, negatives, and fractions are refused.
168
+ - `inputs` and `outputs` (optional). Up to 64 workspace-relative declared references each. These are provenance only and do not restrict what the process can read or write.
169
+ - `env` (optional string map). Up to 32 declared keys matching `[A-Z_][A-Z0-9_]*`, each value at most 4096 bytes. The child receives the safe-exec environment plus these entries. The manifest records declared keys and secret-shaped `redactedKeys`, never environment values. Arguments and script output remain literal records; do not put secrets there expecting environment redaction.
170
+
171
+ Logs stream to `.clio-coder/runs/<runId>/stdout.log` and `stderr.log`, avoiding Bash's 16 MiB in-memory output ceiling. Disk usage is not capped by the bounded model view. Progress is throttled to 250 ms with 2 KiB tails per stream; terminal tails retain 8 KiB each. `run.json` records script identity, resolved interpreter, exact argv, cwd, timeout, timing, environment keys, input identities, and outputs marked `created`, `modified`, `unchanged`, or `absent`. Hashing regular files is bounded at 64 MiB; `sha256: null` carries `hashOmitted: too-large|cancelled|unreadable`. No dependency installation or automatic retry occurs.
172
+
173
+ Terminal outcomes are `succeeded`, `failed`, `timed-out`, `aborted`, `spawn-failed`, `cleanup-incomplete`, and `pipe-drain-incomplete`. Every unsuccessful outcome returns an error with retained logs and observed partial outputs. `exitCode` is effective execution status; `leaderExit` preserves the actual leader code/signal (or null if not observed). Cleanup or drain failure turns leader code 0 into effective code 1. Cancellation after the leader exited can retain `exitCode=0` with `aborted=true`; inspect the outcome and flags as well as the code. Neither a leader's zero exit nor a declared output's existence establishes a valid scientific result; run `verify` separately.
174
+
175
+ On POSIX the runner cleans the original process group after leader exit as well as on timeout/cancellation: TERM, a 3000 ms grace, KILL, then at most 1000 ms to observe group disappearance. `cleanup.incomplete` means members survived that bound. Independently, a 1000 ms deadline after leader exit bounds pipe draining; `pipeDrainIncomplete` means logs may be incomplete even when the original group is gone. Cancellation remains active until settlement. Escaped processes are not contained or signalled, and outputs may still change. A probe or signal returning ESRCH permanently closes group ownership; later timers and cancellation cannot reopen it. The residual probe-to-signal PGID-reuse race is accepted, not eliminated. Windows uses direct-child cleanup rather than claiming POSIX process-group containment.
176
+
177
+ After a run, retention keeps the newest 100 completed records, preserves active runs, and considers manifest-less directories orphaned after 24 hours. Metadata reads are bounded and nonregular entries are explicitly skipped. See [run record placement](../architecture/artifact-placement.md#script-run-records-and-retention).
178
+
179
+ ```text
180
+ run_script(interpreter="python3", script="scripts/analyze.py", args=["inputs.csv", "out/stats.json"], inputs=["inputs.csv"], outputs=["out/stats.json"], timeout_ms=600000)
181
+ verify(check="compare-stats")
182
+ ```
183
+
184
+ ## data: inspect structured files through the gateway
185
+
186
+ Read-only `inspect`, `select`, and `validate` for CSV, TSV, JSON, and JSONL. Sources: `src/tools/gateway/data-tool.ts`, `src/tools/data/`. Required arguments are `op` and `path`; `format` can select `csv|tsv|json|jsonl` explicitly. Inspection never rewrites a file or installs a parser.
187
+
188
+ | Argument | Meaning |
189
+ | --- | --- |
190
+ | `delimiter`, `header` | CSV/TSV delimiter override and header `auto` (default), true, or false. Delimiter detection considers comma, tab, semicolon, and pipe. |
191
+ | `sample_rows` | Inspection preview, default 10, maximum 1000. |
192
+ | `max_rows` | Inspection/validation scan bound, default 100000; null requests a whole-file scan. |
193
+ | `offset`, `limit` | Selection window, zero-based offset, default 50 results, maximum 1000. |
194
+ | `columns` | CSV/TSV projection by header names or zero-based indices. |
195
+ | `pointer` | JSON RFC 6901 pointer; empty string selects the document. |
196
+
197
+ Inspection reports schema/types, dimensions or counts, and a bounded sample. Selection returns rows, records, or a JSON value. Validation reports format validity only for the portion actually scanned; a bounded partial verdict is not whole-file validation. `rowCount: null` means the scan stopped early. JSON syntax faults carry location diagnostics; duplicate-key reporting and bounded tracking are explicit rather than silently certifying uniqueness.
198
+
199
+ Every result reports `view = {exact, sampled, converted}`. `sampled=true` identifies a scan that stopped before EOF. `exact=false, sampled=false` means the scan completed but a selected value was cut to budget, with `$summary` or `$truncated` markers. Inspection samples are previews: a cut sample does not invalidate exact full-scan counts. `converted` stays false for these readers. Format validation proves neither physical meaning nor a transformation's correctness.
200
+
201
+ CSV values remain source strings. Empty cells and sentinels (`NA`, `N/A`, `NaN`, `null`, `NULL`, `None`, `-`) are counted separately and never silently converted to zero or null. Numeric issues are `unsafe-integer`, `excess-digits`, `inexact`, `overflow`, `underflow`, or `oversized-literal`. JSON numbers that cannot be represented honestly use `$literal` and `precision` instead of rounded values. Source ordering and explicit missing-value tokens are retained; units receive no inferred conversion. Numeric extrema with precision issues are labelled approximate.
202
+
203
+ Readers stream with bounded captures. CSV fields are limited to 1048576 characters and records to 16777216; JSONL lines to 1048576 characters; JSON nesting to 1024. JSON captures bound keys, strings, duplicate tracking, and precision samples, with omissions reported. The gateway data result uses a 32 KiB observation cap and the shared turn budget; an oversize JSON rendering uses the envelope's parseable offload stub. Binary/NUL content, invalid UTF-8 (with byte offset), invalid syntax, unsupported formats, absent pointers, and unknown columns produce actionable failures. HDF5, NetCDF, and Parquet require `run_script` with an operator-provided library. Publish transformed data through an explicit script or atomic file mutation, then validate the output's schema, precision, missing values, and scientific invariants.
204
+
205
+ ```text
206
+ gateway(op="call", capability="data", args={op: "inspect", path: "results.csv", max_rows: null})
207
+ gateway(op="call", capability="data", args={op: "select", path: "results.csv", columns: ["time", "mass"], offset: 100, limit: 20})
208
+ gateway(op="call", capability="data", args={op: "select", path: "results.json", pointer: "/runs/0"})
209
+ gateway(op="call", capability="data", args={op: "validate", path: "results.jsonl", max_rows: null})
210
+ ```
211
+
128
212
  ## grep: search file contents with ripgrep
129
213
 
130
214
  Content search over a directory or single file, backed by ripgrep with a bounded pure-Node fallback when rg is not on PATH. Source: `src/tools/grep.ts`.
@@ -141,13 +225,13 @@ Arguments:
141
225
  - `limit` (optional). Max matches; default 100.
142
226
  - `include_ignored` (optional boolean).
143
227
 
144
- Visibility follows the shared ignore policy (`src/tools/ignore-policy.ts`): `.gitignore` is honored natively, `.clio-coder`/`.fallow`/`.git` are always excluded, and a fixed generated-dirs list (`node_modules`, `dist`, `build`, `coverage`, `target`, `.venv`, `.next`, `.cache`, `.pytest_cache`, `.turbo`) is force-excluded even when a project forgot to gitignore it. `include_ignored=true` lifts the gitignore and generated layers together; the clio-internal layer always stands. Pointing `path` directly inside an excluded directory searches it. grep and find answer visibility from the same policy, so `grep mode=files` and `find` never disagree about which paths exist.
228
+ Visibility follows the shared ignore policy (`src/tools/ignore-policy.ts`): `.gitignore` is honored natively, `.clio-coder`/`.fallow`/`.git` are always excluded, and a fixed generated-dirs list (`node_modules`, `dist`, `build`, `coverage`, `target`, `.venv`, `.next`, `.cache`, `.pytest_cache`, `.turbo`) is force-excluded even when a project forgot to gitignore it. `include_ignored=true` lifts the gitignore and generated layers together; the clio-internal layer always stands. Pointing `path` directly inside an excluded directory searches it. Native rg/fd honor `.gitignore`; the pure-Node fallbacks use only the generated-directory and internal exclusions and do not parse `.gitignore`. Their results disclose this difference, so native and fallback visibility need not agree.
145
229
 
146
- Rendering: match lines print as `path:line: text`, context lines as `path-line- text`. Lines longer than 500 characters are cut with a note suggesting read for the full line. No matches returns `No matches found`.
230
+ Rendering: match lines print as `path:line: text`, context lines as `path-line- text`. Lines longer than 500 characters are cut with a note suggesting read for the full line. A complete empty search reports no matches; an incomplete empty search says so explicitly.
147
231
 
148
- Truncation: hitting the match limit gives `next: limit=<2x>` with the total rendered as `N+`. Hitting the byte cap (16KB content, 8KB files/count) offloads the full rendering and, in content mode, suggests `next: mode=files`. Searches are killed after 30 seconds with a hint to narrow the pattern, path, or glob.
232
+ Truncation: hitting the match limit gives `next: limit=<2x>` with the total rendered as `N+`. Hitting the byte cap (16KB content, 8KB files/count) offloads the full rendering and, in content mode, suggests `next: mode=files`. At 30 seconds the search stops and returns collected matches with an incompleteness notice. Narrow the pattern, path, or glob to continue.
149
233
 
150
- The fallback searcher (rg absent) skips files over 20MB and binary files, walks the same ignored-dir set, and stops at the match limit.
234
+ Native and fallback results include `details.search = {complete, reason?, skipped: {count, samples, unknown?}}`. Reasons are `timeout`, `errors`, `limit`, or `cancelled`. Counts describe observed skips, samples are bounded and protected-path filtered, and `unknown=true` means diagnostic coverage could not be determined. Recoverable native errors retain matches; invalid patterns still error. The asynchronous fallback counts unreadable, oversized (over 20 MB (20000000 bytes)), and binary skips and yields during traversal.
151
235
 
152
236
  Reach for grep to find where something lives; use mode=files to map breadth cheaply before reading, and mode=count to size a rename or sweep.
153
237
 
@@ -174,7 +258,7 @@ Results are relative to the search directory, with a `/` suffix on directories.
174
258
 
175
259
  `order="mtime"` never walks the whole tree: it collects a bounded candidate set of `max(4 * limit, 2000)` paths, stats only those, sorts newest first, and slices to `limit`. `details.candidates = {cap, collected, capHit, note?}` records the bound; when the cap was hit the ordering is approximate and `next: order=path` is suggested.
176
260
 
177
- Truncation: hitting the result limit gives `next: limit=<2x>` with the total rendered as `N+`; the 8KB byte cap offloads the full path list. No matches returns `No files found matching pattern`. Searches are killed after 30 seconds.
261
+ Truncation: hitting the result limit gives `next: limit=<2x>` with the total rendered as `N+`; the 8KB byte cap offloads the full path list. A complete empty result says `No visible files found matching pattern`; incomplete searches say `Search incomplete`. Searches stop after 30 seconds and retain partial results with the same `details.search` contract as grep. Native fd keeps its own glob ranges and smart-case semantics; fallback glob matching is not a promise of complete fd parity. Neither traversal follows symlinked directories. Fallback traversal counts those skips; native fd reports `details.symlinkDirectories.counted=false` and a rendered notice because it does not count them.
178
262
 
179
263
  Reach for find when you know the file's name or shape; use `order="mtime"` with a small limit to answer "what changed recently". When you know contents but not names, use `grep mode=files` instead.
180
264
 
@@ -194,7 +278,7 @@ Arguments:
194
278
  - `path` (optional). Default `.`.
195
279
  - `limit` (optional). Max entries; default 500.
196
280
 
197
- Entries are sorted alphabetically case-insensitively, directories carry a `/` suffix, and dotfiles are included. ls reads the directory raw and applies no ignore policy, so `node_modules/` and `.git/` appear if present. Entries that vanish or cannot be statted mid-scan are skipped. An empty directory returns `(empty directory)`.
281
+ Entries are sorted alphabetically case-insensitively, directories carry a `/` suffix, and dotfiles are included. ls reads the directory raw and applies no ignore policy, so `node_modules/` and `.git/` appear if present. Symlinks render as `name@ -> target`, or `name@ (broken)` for broken links. Entries that cannot be inspected remain visible with an error marker, and `details.skipped` counts failures with bounded samples. Asynchronous enumeration retains only the requested alphabetical prefix in an O(limit) heap and stats selected entries; `details.selection` reports that bounded selection. Case-insensitive ties preserve enumeration order. Finding the alphabetical prefix still requires enumerating the directory. An empty directory returns `(empty directory)`.
198
282
 
199
283
  Truncation: hitting the entry limit gives `next: limit=<2x>`; the 8KB byte cap offloads the full listing. Reach for ls to orient in one directory; use find for recursive matching.
200
284
 
@@ -226,8 +310,8 @@ Returns a JSON presence summary mapping containing:
226
310
  - `fileMissing`: True if the file path was specified but does not exist.
227
311
 
228
312
  ```text
229
- credential_present(name="OPENAI_API_KEY")
230
- credential_present(name="MY_SECRET_KEY", source="file", file=".env")
313
+ gateway(op="call", capability="credential_present", args={name: "OPENAI_API_KEY"})
314
+ gateway(op="call", capability="credential_present", args={name: "MY_SECRET_KEY", source: "file", file: ".env"})
231
315
  ```
232
316
 
233
317
  ## dispatch: run bounded tasks on fleet agents
@@ -342,9 +426,16 @@ checks:
342
426
  tags: [scientific, performance]
343
427
  ```
344
428
 
345
- Every check has a `kind`, absent or `command` by default. A version 1 file still loads and every check there is `kind: command`; the kind fields require `version: 2`. `kind: command` reads the exit code. `kind: numeric-compare` runs the command, parses its stdout as a JSON object of `string -> number | number[]`, and judges it against `reference` (a repository-relative JSON file of the same shape) under `tolerance`, which names at least one of `relative`, `absolute`, or `ulp`; a value passes only when every named tolerance holds, a key missing on either side fails with the key named, arrays compare elementwise and fail on length mismatch, and `NaN` or infinity fails. `kind: perf-budget` runs the command and judges the wall time the harness measured against either `budget: {wallTimeMs, tolerance?: {relative}}` or `baseline`, a repository-relative JSON `{wallTimeMs}` that `clio-coder verifiers baseline <id>` records from one clean run, with an optional `tolerance: {relative}` of headroom over it. Exactly one of `budget` and `baseline` is present. A command that exits non-zero, times out, or is aborted fails before any judgement. Both kinds record a structured `report` on the `verify` result details and on the host-verification check of a dispatch receipt (per-key worst deviation and the failed tolerance, or measured time, effective budget, and ratio); a failing judgement is a check failure, not a new evidence category.
429
+ Every check has a `kind`, absent or `command` by default. A version 1 file still loads and every check there is `kind: command`; the kind fields require `version: 2`. `kind: command` reads the exit code. `kind: numeric-compare` runs the command, parses its stdout as a JSON object of `string -> number | number[]`, and judges it against `reference` (a repository-relative JSON file of the same shape) under `tolerance`, which names at least one of `relative`, `absolute`, or `ulp`; a value uses `tolerance.combine: all|any` (default `all`) to require all named bounds or at least one. Missing keys and array-length mismatches fail independently of combination. `tolerance.nonFinite: fail|match` defaults to `fail`; `match` accepts NaN paired with NaN and same-signed infinities. `ulp` must be an integer at most `Number.MAX_SAFE_INTEGER` (9007199254740991). This is a conjunction/disjunction of individual bounds, not an additive absolute-plus-relative formula. `kind: perf-budget` runs the command and judges the wall time the harness measured against either `budget: {wallTimeMs, tolerance?: {relative}}` or `baseline`, a repository-relative versioned JSON baseline that `clio-coder verifiers baseline <id>` records from one clean run, with an optional `tolerance: {relative}` of headroom over it. Exactly one of `budget` and `baseline` is present. A command that exits non-zero, times out, or is aborted fails before any judgement. Both kinds record a structured `report` on the `verify` result details and on the host-verification check of a dispatch receipt (per-key worst deviation and the failed tolerance, or measured time, effective budget, and ratio); a failing judgement is a check failure, not a new evidence category.
346
430
 
347
- Version 2 keeps version 1's strictness. Every root and check field shown above is required, unknown fields fail, and duplicate IDs fail. A project ID uses lowercase letters, digits, `.`, `_`, `:`, or `-`, begins with a letter or digit, and is at most 64 UTF-8 bytes. `frontend` is reserved. Descriptions are trimmed single-line text capped at 512 bytes. `command` is a nonempty argv array with at most 64 entries and 4096 bytes per entry. A shell command string is invalid, and explicit shell executables such as `sh`, `bash`, `pwsh`, and `cmd` are rejected. `cwd` is a repository-relative existing directory capped at 512 bytes; absolute paths, `..` escapes, and symbolic-link escapes fail. `timeoutMs` is a positive integer capped at 900000. A check may carry at most 16 distinct lowercase tags of at most 32 bytes each. The whole file is capped at 262144 bytes and may contain at most 128 checks. YAML aliases are disabled.
431
+
432
+ Judged command capture and numeric reference reads have a 32 MiB ceiling. Output-cap, execution, timeout, or abort failures prevent judgement; partial JSON never earns a pass. Reports record effective `combine`, `nonFinite`, and a readable `rule`; numeric provenance includes `reference` (source, path when supplied, SHA-256, bytes) and `actual` (SHA-256, bytes of the extracted payload). Non-finite report numbers serialize as `"NaN"`, `"Infinity"`, or `"-Infinity"`, never JSON null. These report spellings do not extend the input JSON grammar. Relative deviation against zero is zero for equality and undefined for a nonzero actual, so an absolute bound with `combine: any` can admit near-zero values.
433
+
434
+ Each declared check carries `judgement = {execution, validation, scientificValidity}`. Execution reports `succeeded`, `failed`, `timed-out`, `aborted`, or `output-capped`; validation is `passed`, `failed`, `exit-code` (ordinary command checks), or `not-run`. `scientificValidity` remains `"not established by this check"`. A tolerance pass does not establish the physical validity of a model.
435
+
436
+ New performance baselines are version 2 and record `wallTimeMs`, `check`, `recordedAt`, and `environment` (`hostname`, `platform`, `arch`, `cpuModel`, `cpuCount`, `totalMemoryBytes`, `nodeVersion`). Version 1 still loads without an environment. Reports retain baseline path/hash/bytes and compare baseline/current environments in `environment.differing`; differences are informational and do not change the declared time-budget verdict.
437
+
438
+ Version 2 keeps version 1's strictness. The root version/checks and core check fields (`id`, `description`, `command`, `cwd`, `timeoutMs`, `tags`) are required; kind-specific fields follow the contracts above. Unknown fields and duplicate IDs fail. A project ID uses lowercase letters, digits, `.`, `_`, `:`, or `-`, begins with a letter or digit, and is at most 64 UTF-8 bytes. `frontend` is reserved. Descriptions are trimmed single-line text capped at 512 bytes. `command` is a nonempty argv array with at most 64 entries and 4096 bytes per entry. A shell command string is invalid, and explicit shell executables such as `sh`, `bash`, `pwsh`, and `cmd` are rejected. `cwd` is a repository-relative existing directory capped at 512 bytes; absolute paths, `..` escapes, and symbolic-link escapes fail. `timeoutMs` is a positive integer capped at 900000. A check may carry at most 16 distinct lowercase tags of at most 32 bytes each. The whole file is capped at 262144 bytes and may contain at most 128 checks. YAML aliases are disabled.
348
439
 
349
440
  Provider IDs share one namespace. If a catalog ID collides with a discovered package script, listing and execution fail and identify both source files. Catalog parsing also fails closed before any package or project check runs.
350
441
 
@@ -422,48 +513,48 @@ Commands map directly to git subprocess execution:
422
513
  - `op="log"` runs `git log --oneline -n <limit>` listing recent commit shas and subjects.
423
514
 
424
515
  ```text
425
- git(op="status")
426
- git(op="diff", stat=true)
427
- git(op="diff", path="src/tools/safe-exec.ts")
428
- git(op="log", limit=10)
516
+ gateway(op="call", capability="git", args={op: "status"})
517
+ gateway(op="call", capability="git", args={op: "diff", stat: true})
518
+ gateway(op="call", capability="git", args={op: "diff", path: "src/tools/safe-exec.ts"})
519
+ gateway(op="call", capability="git", args={op: "log", limit: 10})
429
520
  ```
430
521
 
431
- ## context: workspace snapshot, docs retrieval, skills, and the library catalog
522
+ ## context: workspace, skill activation, and recall
432
523
 
433
- One OBSERVE entry point for material about the working environment rather than the tree itself. Sources: `src/tools/context/index.ts`, `src/tools/context/docs-engine.ts`, `src/tools/context/library.ts`.
524
+ Direct OBSERVE retrieval of the working environment. Source: `src/tools/context/index.ts`.
434
525
 
435
- Arguments:
526
+ Arguments are `scope` (`workspace`, `skills`, or `recall`), `name` and `include_tree` for skills, and `ref`, `offset`, and `limit` for recall. `query` can narrow recall. Workspace returns the cached session git/project snapshot and requires a bound session. Skills list or activate installed skills; read-only and suggest activation require an explicit operator request, and recipe-bound workers can load only their declared skills. Recall retrieves evicted observations without changing the eviction marker. Workspace and skills use a 50KB cap.
527
+
528
+ ```text
529
+ context(scope="workspace")
530
+ context(scope="skills", name="context-prime", include_tree=true)
531
+ context(scope="recall", ref="<turnId>", offset=0)
532
+ ```
436
533
 
437
- - `scope` (required). `workspace`, `docs`, `skills`, `library`, or `recall`.
438
- - `query` (scope=docs). Question or terms; omit to list the corpus (files plus doc/section counts) instead of searching. At scope=library, name, owner, or description terms.
439
- - `limit` (scope=docs). Max sections; default 5, max 12. At scope=library, max rows; default 20, max 50.
440
- - `name` (scope=skills). Skill to load; omit to list.
441
- - `kind` (scope=library). One of `skill`, `agent`, `prompt`, `fleet`, or `plugin`.
442
- - `ref` (scope=library). An exact `kind:name` package reference, a resource key, or a bare runtime name.
443
- - `offset` (scope=library, scope=recall). Zero-based; follow the reported `nextOffset`.
444
- - `include_tree` (scope=skills, boolean). List up to 50 files under the skill's base_dir.
534
+ ## clio_docs: retrieve bundled documentation through the gateway
445
535
 
446
- `scope="workspace"` returns the session's git/project snapshot as JSON, probing and caching it on first call. When model-visible skills are installed, the payload carries a one-line `skills` pointer (count plus the suggest protocol) so orientation surfaces the catalog; the pointer never includes catalog entries and never changes the load gate. It requires a bound session; worker registries without one get a clean error. 50KB cap.
536
+ Source: `src/tools/gateway/clio-context-tools.ts` and `src/tools/context/docs-engine.ts`. Arguments: `query` (omit for the corpus), `limit` (default 5, max 12).
447
537
 
448
- `scope="docs"` runs deterministic, offline retrieval over Clio's recursively
538
+ `clio_docs` runs deterministic, offline retrieval over Clio's recursively
449
539
  bundled Markdown tree under `docs/` plus README.md, CHANGELOG.md, and
450
540
  CLIO-CODER.md, indexed as heading-delimited sections with light stemming, Clio
451
541
  vocabulary aliases, phrase boosts, and BM25-style body scoring. The JSON payload carries `corpus`, the expanded `terms`, and ranked `results` with `file`, `heading`, `breadcrumb`, `anchor`, `lines`, `snippet`, `score`, `coverage`, `matchedTerms`, and `signals`, plus an `omitted` count. Follow the `followUp` guidance: read the cited file and line range when you need the full section. Empty results are still valid JSON with `next` populated (the closest vocabulary expansion, or `query=overview`). 16KB cap; an oversize payload is replaced by the parseable JSON stub. The old `docs_search` `file` filter was dropped in the consolidation. Omitting `query` returns the corpus listing (the file set plus doc and section counts, the same `corpus` shape a search carries) so the model can pick a term without wasting a round on a `requires query` error.
452
542
 
453
- `scope="skills"` with no `name` lists installed skills with descriptions. A matching suggestion uses `Suggested skill: /skill <name>` and continues the task without activating a skill. At `read-only` and `suggest`, loading requires an explicit operator request; at `auto-edit` and `full-auto`, policy permits activation of installed skills without that request. Recipe-bound workers may load only their declared skills. Installation, availability, and activation are separate: even `full-auto` requires a bound operator acceptance for a marketplace installation. A pending request's task text is surfaced with the body. Marketplace-installed skills are drift-checked against their pinned hash; a mismatch annotates the result with a `skill_drift` warning but never blocks. 50KB cap; a truncated body offloads in full.
543
+ ```text
544
+ gateway(op="call", capability="clio_docs", args={query: "dispatch receipts evidence", limit: 8})
545
+ ```
546
+
547
+ ## clio_library: inspect the recipe catalog through the gateway
548
+
549
+ Source: `src/tools/gateway/clio-context-tools.ts` and `src/tools/context/library.ts`. Arguments: `query`, `kind` (`skill`, `agent`, `prompt`, `fleet`, `plugin`), `ref`, `limit` (default 20, max 50), and zero-based `offset`.
454
550
 
455
- `scope="library"` is the read-only recipe catalog, backed by the same bounded inventory `clio-coder library recipes --json` reads, and it activates, installs, registers and pins nothing. Rows are tagged and never mixed up with one another. A `resource` row is a recipe that actually loaded: its runtime name (skill frontmatter name, agent recipe id, prompt path with colons, fleet contract name), owning package or `core`/`user`/`project`/`compat` source class, scope, origin evidence, format, and the invocation that works. A `hint` row is a catalog claim about one member of a package: it names the owning package, that owner's installed copy states, and the member's own state (`not-installed` when the owner is not installed, `unknown` when the owner is installed and the member did not turn up), and it never carries an invocation because nothing loaded it. A `package` row is the install target itself with its version, origin, installed copies, and bounded `provides` hints; a package with no hints reports its contents as unknown until inspection rather than empty.
551
+ `clio_library` is the read-only recipe catalog, backed by the same bounded inventory `clio-coder library recipes --json` reads, and it activates, installs, registers and pins nothing. Rows are tagged and never mixed up with one another. A `resource` row is a recipe that actually loaded: its runtime name (skill frontmatter name, agent recipe id, prompt path with colons, fleet contract name), owning package or `core`/`user`/`project`/`compat` source class, scope, origin evidence, format, and the invocation that works. A `hint` row is a catalog claim about one member of a package: it names the owning package, that owner's installed copy states, and the member's own state (`not-installed` when the owner is not installed, `unknown` when the owner is installed and the member did not turn up), and it never carries an invocation because nothing loaded it. A `package` row is the install target itself with its version, origin, installed copies, and bounded `provides` hints; a package with no hints reports its contents as unknown until inspection rather than empty.
456
552
 
457
553
  The model view is the model audience: internal and shadow agents, untrusted, invalid, shadowed and manual-only resources are not listed. `kind="plugin"` returns plugin-kind install targets only; any recipe kind returns the loaded resources of that kind plus the installable owners that provide it, so an Agents or Prompts query finds the owning bundle before it is installed and without fetching its source. `ref` may match one exact resource key, several same-named records across kinds (the payload says so and each row carries its `key`), or a package, which opens that package's members. A run started with `--no-skills` lists no skill rows, because nothing in it can load one. Instruction bodies and absolute recipe paths are never returned. 16KB cap: the page is fitted to the remaining budget before it is rendered, so `limit` is an upper bound and `nextOffset` carries the remainder; `total` counts what the inventory returned and is flagged `totalIsLowerBound` when the inventory hit its own record cap. Worker registries have no library projection of their own and get a clean unavailable error.
458
554
 
459
555
  ```text
460
- context(scope="workspace")
461
- context(scope="docs", query="dispatch receipts evidence", limit=8)
462
- context(scope="skills")
463
- context(scope="skills", name="context-prime", include_tree=true)
464
- context(scope="library", kind="agent", query="materials")
465
- context(scope="library", ref="plugin:materio")
466
- context(scope="library", limit=20, offset=20)
556
+ gateway(op="call", capability="clio_library", args={kind: "agent", query: "materials"})
557
+ gateway(op="call", capability="clio_library", args={ref: "plugin:materio"})
467
558
  ```
468
559
 
469
560
  ## code_nav: navigate the codewiki index
@@ -501,7 +592,7 @@ code_nav(mode="entries")
501
592
  code_nav(mode="wiki")
502
593
  ```
503
594
 
504
- ## web_fetch: fetch http(s) URLs and convert HTML to markdown
595
+ ## web_read and web_fetch: read web pages or make full HTTP requests
505
596
 
506
597
  Fetches content from an http(s) URL. HTML content is automatically cleaned and converted to readable Markdown. Source: `src/tools/web-fetch.ts`. Read class; parallel.
507
598
 
@@ -523,9 +614,15 @@ Specialized behaviors:
523
614
  - **Binary formats**: Non-text, binary, or unsupported content types are rejected.
524
615
 
525
616
  ```text
526
- web_fetch(url="https://arxiv.org/abs/2303.17564")
527
- web_fetch(url="https://github.com/iowarp/clio-coder/tree/main/docs")
528
- web_fetch(url="https://example.com", format="raw")
617
+ gateway(op="call", capability="web_fetch", args={url: "https://arxiv.org/abs/2303.17564"})
618
+ gateway(op="call", capability="web_fetch", args={url: "https://github.com/iowarp/clio-coder/tree/main/docs"})
619
+ gateway(op="call", capability="web_fetch", args={url: "https://example.com", format: "raw"})
620
+ ```
621
+
622
+ `web_read` is the gateway GET-only projection with `url`, `timeout_ms`, `max_bytes`, and `format`; it accepts no method, headers, or body and is read class. Use `web_fetch` for full requests, including authentication headers; non-GET methods or a body retain outward-action classification. Both share the existing fetcher, private-network policy, binary refusal, and read cap.
623
+
624
+ ```text
625
+ gateway(op="call", capability="web_read", args={url: "https://example.com"})
529
626
  ```
530
627
 
531
628
  ## monitor: inspect dispatched runs
@@ -584,14 +681,16 @@ Declares and tracks the agent's own working plan. Source: `src/tools/tasks.ts`.
584
681
 
585
682
  Arguments:
586
683
 
587
- - `action` (required). `plan`, `add`, `start`, `done`, `block`, `drop`, or `list`.
684
+ - `action` (required). `plan`, `add`, `pick`, `start`, `done`, `block`, `drop`, or `list`.
588
685
  - `title` (required for `plan`). The board title.
589
686
  - `tasks` (required for `plan` and `add`). Task titles as an array of strings.
590
- - `id` (required for `start`, `done`, `block`, `drop`). A task id like `t2`.
591
- - `note` (optional). Evidence of completion on `done`; the reason on `block` (required there) and `drop`.
687
+ - `id` (required for `pick`, `start`, `done`, `block`, `drop`). A task id like `t2`, or an operator task id like `u2` for pick.
688
+ - `note` (required for `done` and `block`). Evidence of completion on done, a blocking reason on block, or an optional reason on drop.
592
689
 
593
690
  `action="plan"` declares a titled board and replaces any prior board; tasks get sequential ids `t1..tN` and start pending. `start` marks one task active and parks any other active task back to pending, so the board always names exactly one current focus. `done` completes a task; its `note` is recorded on the session ledger as passed validation evidence, so a completed task carries its receipt rather than a bare status flip. `block` requires a reason and is the honest state for work waiting on the operator; blocked tasks never trigger the turn-end nudge. `drop` cancels a task; ids are never reused. Every action returns the whole rendered board, so the current state always sits in the latest tool result.
594
691
 
692
+ `pick` links a selected operator task to the session board. Calls can reconcile the Clio-owned operator inbox, and linked done updates its durable status. A self-authored plan is not operator authorization.
693
+
595
694
  Every mutation persists a full-snapshot `taskLedger` entry in the session ledger: the board replays from the JSONL alone, survives `/resume` and `/fork`, costs nothing at compaction, and feeds the footer tasks row plus the `/tasks` overlay. When a tool-calling turn settles while pending or active tasks remain, the `nudge.open-tasks` middleware carries the turn onward once with the open-task list; record the honest state (`done` with evidence, `block` with a reason, or `drop`) instead of stopping with a stale board.
596
695
 
597
696
  Dispatched runs link to the live board through the ledger's `activeRunIds` field: the orchestrator attaches a run when its worker process goes live and detaches it when the run finalizes, so a snapshot records which fleet runs were serving the board. The linkage is process-live, so a refold after `/resume` or `/fork` restores it empty (the runs ended with the process that dispatched them). Claude SDK/CLI workers map their `TodoWrite` calls onto this tool, so a Claude worker's todo list lands on the same board rather than writing a separate artifact.
@@ -676,9 +775,9 @@ Arguments:
676
775
  `list` returns the bounded newest-first inventory: provenance, tags, totals, and a worst-run trust verdict per bundle. `inspect` returns the bundle overview, the per-run trust axes and verdict, the gate decisions, and the findings. `run` resolves `run-<runId>` and builds the bundle when it is absent; a run with no ledger row is reported absent with `artifactAbsent: true` in the details. Results are capped at 16KB, and a truncated result stays valid JSON with a `preview`. Provenance requires this tool and Verifier may use it.
677
776
 
678
777
  ```text
679
- evidence(mode="list")
680
- evidence(mode="inspect", id="run-r-42")
681
- evidence(mode="run", runId="r-42")
778
+ gateway(op="call", capability="evidence", args={mode: "list"})
779
+ gateway(op="call", capability="evidence", args={mode: "inspect", id: "run-r-42"})
780
+ gateway(op="call", capability="evidence", args={mode: "run", runId: "r-42"})
682
781
  ```
683
782
 
684
783
  ## limitation: record what a turn could not verify
@@ -746,7 +845,7 @@ ask_user(action="complete", summary="Operator selected SQLite.", decisions=[{key
746
845
 
747
846
  ## artifact: plans, reviews, and reports
748
847
 
749
- Terminal document writers behind one surface. Source: `src/tools/artifact.ts`.
848
+ Terminal document writers reached through `gateway(op="call", capability="artifact", args={...})`. Atomic publication uses the same publisher as write and reports any post-publication durability warning. Source: `src/tools/artifact.ts`.
750
849
 
751
850
  Arguments:
752
851
 
@@ -755,14 +854,14 @@ Arguments:
755
854
  - `title` (optional). Document title.
756
855
  - `path` (optional). Override the default path under `.clio-coder/artifacts/`.
757
856
 
758
- `kind=plan|review|report` writes a Markdown document to `.clio-coder/artifacts/PLAN.md`, `REVIEW.md`, or `REPORT.md` by default, so a turn nobody asked a file from never litters the working tree; `path` may override the destination but must stay inside the workspace. See [artifact-placement.md](../architecture/artifact-placement.md) for the full contract. When `content` does not already start with `#`, a non-empty `title` is prepended as an H1. These kinds are TERMINAL: writing the artifact completes the turn and the harness skips the follow-up model call, so the artifact body itself is the answer. Put everything the reader needs in `content`; there is no closing message after the write.
857
+ `kind=plan|review|report` writes a Markdown document to `.clio-coder/artifacts/PLAN.md`, `REVIEW.md`, or `REPORT.md` by default, so a turn nobody asked a file from never litters the working tree; `path` may override the destination but must stay inside the workspace. See [artifact-placement.md](../architecture/artifact-placement.md) for the full contract. When `content` does not already start with `#`, a non-empty `title` is prepended as an H1. The gateway preserves `terminate`, `details.kind`, and `details.paths`. These kinds are TERMINAL: writing the artifact completes the turn and the harness skips the follow-up model call, so the artifact body itself is the answer. Put everything the reader needs in `content`; there is no closing message after the write.
759
858
 
760
859
  Skills are not artifacts. A skill is a `SKILL.md` folder, and the active skill trees (`.clio-coder/skills/`, `.clio-coder/plugins/`, `.clio-coder/extensions/`, and their user-scope counterparts) are operator-owned: model-side writes and deletes there are refused, reads are not. Draft a skill somewhere else in the workspace, check it with `clio-coder library validate <path>`, and leave installation to the operator through `clio-coder library install` or `/library`. The `skill-craft` shipped skill documents the format and craft rules.
761
860
 
762
861
  ```text
763
- artifact(kind="plan", content="# Migration plan\n\n## Step 1 ...")
764
- artifact(kind="report", title="Benchmark results", path="docs/reports/bench.md", content="...")
765
- artifact(kind="review", content="# Review: toolkit-v2\n\n## Findings ...")
862
+ gateway(op="call", capability="artifact", args={kind: "plan", content: "# Migration plan\n\n## Step 1 ..."})
863
+ gateway(op="call", capability="artifact", args={kind: "report", title: "Benchmark results", path: "docs/reports/bench.md", content: "..."})
864
+ gateway(op="call", capability="artifact", args={kind: "review", content: "# Review: toolkit-v2\n\n## Findings ..."})
766
865
  ```
767
866
 
768
867
  ## Headless declared verifier commands
@@ -1,8 +1,5 @@
1
1
  # Troubleshooting & Error Remediation
2
2
 
3
- > **Visual blueprint:** The source checkout includes the complete
4
- > [Troubleshooting & Error Remediation visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/troubleshooting_blueprint.html).
5
-
6
3
  This guide provides concrete, actionable remediation procedures for
7
4
  operational errors, permission denials, target connection failures, and system
8
5
  diagnostics in the current source tree.
@@ -122,7 +119,7 @@ of the same records, for the case where nobody armed the trace first.
122
119
 
123
120
  When encountering unexpected system behavior:
124
121
 
125
- 1. **System Health Check**: Run `clio-coder doctor` (or `clio-coder doctor --fix` to auto-repair state directory permissions and configuration defaults).
122
+ 1. **System Health Check**: Run `clio-coder doctor` (or `clio-coder doctor --fix` to repair directory structure, credential permissions, and record fleet preflight results).
126
123
  2. **Target Connectivity Probe**: Run `clio-coder targets --probe` to verify authentication and reachability for all configured LLM providers.
127
124
  3. **Trace Store Inspection**: Run `clio-coder trace runs` and `clio-coder trace tail <runId>` to inspect event logs, durations, and tool outputs.
128
125
  4. **Receipt Validation**: Run `clio-coder evidence inspect <evidenceId>` or `/view verify <runId>` to check cryptographic integrity and execution telemetry. Build the evidence id first with `clio-coder evidence build --run <runId>`.
@@ -1,8 +1,5 @@
1
1
  # Config Knobs Audit (Historical Appendix)
2
2
 
3
- > **Visual blueprint:** The source checkout includes the complete
4
- > [Config Knobs Audit (Historical Appendix) visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/config_knobs_audit_blueprint.html).
5
-
6
3
  > [!IMPORTANT]
7
4
  > This document is a historical record of the point-in-time configuration knob audit conducted on 2026-07-03.
8
5
  > It details the pre-consolidation state of the codebase before the `v0.2.9` release.
@@ -1,8 +1,5 @@
1
1
  # v0.4.1 Release-Cut Checklist
2
2
 
3
- > **Visual blueprint:** The source checkout includes the complete
4
- > [v0.4.1 Release-Cut Checklist visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/release_cut_checklist_blueprint.html).
5
-
6
3
  > [!IMPORTANT]
7
4
  > Historical release record. v0.4.1 has been published, and this checklist is
8
5
  > retained to explain how that release was cut. It is not the procedure for
@@ -1,8 +1,5 @@
1
1
  # Development Pipeline
2
2
 
3
- > **Visual blueprint:** The source checkout includes the complete
4
- > [Development Pipeline visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/development_pipeline_blueprint.html).
5
-
6
3
  How a change to Clio Coder moves from "we noticed something" to a published
7
4
  release. This is the process the maintainers follow and the process Clio
8
5
  herself follows when dogfooding: every stage is a marketplace skill, so any
@@ -1,14 +1,14 @@
1
1
  # Documentation coverage and source-alignment audit
2
2
 
3
- > **Visual blueprint:** The source checkout includes the complete
4
- > [Documentation coverage and source-alignment audit visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/documentation_coverage_blueprint.html).
5
-
6
3
  This is the page-level audit for Clio Coder 0.4.2. The source comparison is
7
4
  pinned to commit `ff56ea3e`. A disagreement means that a current factual claim,
8
5
  default, identifier, path, schema, or command differs from the implementation at
9
6
  that commit. Historical records are evaluated as dated evidence and are not
10
7
  treated as current operator guidance.
11
8
 
9
+ The HTML coverage below is historical. The current application renders the
10
+ Markdown source directly; the parallel HTML tree has been retired.
11
+
12
12
  ## Headline
13
13
 
14
14
  - Markdown pages audited: **51**.