@iowarp/clio-coder 0.4.3 → 0.4.5

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 (670) hide show
  1. package/CHANGELOG.md +153 -0
  2. package/CONTRIBUTING.md +25 -15
  3. package/README.md +340 -27
  4. package/dist/{acp-H2NGRPWO.js → acp-H3CU2HBQ.js} +25 -25
  5. package/dist/{agents-TL5LLUQP.js → agents-IXQQZ7BD.js} +77 -75
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-E5SW4HMS.js → auth-R7KYF7N3.js} +38 -39
  8. package/dist/builtins-CRFDQUVP.js +22 -0
  9. package/dist/{chunk-7DRAWPTZ.js → chunk-22PQ4TX4.js} +4 -4
  10. package/dist/{chunk-NEDJ26B5.js → chunk-2GPGAE5W.js} +6 -51
  11. package/dist/{chunk-IKCO5N3L.js → chunk-2QPI3TR3.js} +3 -3
  12. package/dist/{chunk-HRQMFLJP.js → chunk-32KJPXAM.js} +6 -6
  13. package/dist/{chunk-65DEGPJ6.js → chunk-3A3CUMKA.js} +6 -4
  14. package/dist/{chunk-5TSRNF4G.js → chunk-3T4DXWP6.js} +170 -12
  15. package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
  16. package/dist/{chunk-XIVNBFZS.js → chunk-4SVIVOMC.js} +208 -39
  17. package/dist/{chunk-NMJXSHBJ.js → chunk-5A6XR3RJ.js} +44 -19
  18. package/dist/{chunk-YPC6ZR5L.js → chunk-5CMARGPF.js} +119 -5
  19. package/dist/{chunk-KXDSS5WJ.js → chunk-5CY4Q6QI.js} +4 -4
  20. package/dist/chunk-5DDOTTG4.js +402 -0
  21. package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
  22. package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
  23. package/dist/{chunk-PUVDKJ2Y.js → chunk-5VTJP36Q.js} +5 -7
  24. package/dist/{chunk-JGRC33J2.js → chunk-5ZMXGW7P.js} +90 -9
  25. package/dist/chunk-5ZSZEYJK.js +119 -0
  26. package/dist/chunk-633EXGZA.js +44 -0
  27. package/dist/{chunk-IWT4SF4R.js → chunk-6CDNRHWH.js} +361 -89
  28. package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
  29. package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
  30. package/dist/{chunk-INY6HTFL.js → chunk-6SYEGZI3.js} +12 -12
  31. package/dist/{chunk-SKHCAU7K.js → chunk-6YA46L5A.js} +5 -4
  32. package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
  33. package/dist/{chunk-L47TF46W.js → chunk-7HBHHVCK.js} +24 -3
  34. package/dist/{chunk-DWUOQKRU.js → chunk-7TKWWPD7.js} +5 -4
  35. package/dist/{chunk-2VTFPG5O.js → chunk-7WLRF2U5.js} +2 -2
  36. package/dist/chunk-7WUZEB2M.js +165 -0
  37. package/dist/{chunk-6PTFB5VS.js → chunk-7YJWEF2L.js} +59 -28
  38. package/dist/{chunk-3EBYEESD.js → chunk-A46ILRS2.js} +5 -5
  39. package/dist/{chunk-UOIZ7DA4.js → chunk-AP7HDJOP.js} +2 -2
  40. package/dist/{chunk-APJ265NV.js → chunk-B5GGDIHT.js} +146 -146
  41. package/dist/{chunk-PMZVFWSR.js → chunk-B5ZTR6KZ.js} +2 -2
  42. package/dist/chunk-B6UM3OZC.js +15 -0
  43. package/dist/{chunk-MCEPRMZW.js → chunk-BBV5TKE6.js} +5 -5
  44. package/dist/{chunk-4O6MANBS.js → chunk-BS4GAMUB.js} +14 -10
  45. package/dist/{chunk-S66XZJOF.js → chunk-C27U2TYG.js} +2 -2
  46. package/dist/{chunk-42FMPA75.js → chunk-CBSKDFWL.js} +3 -3
  47. package/dist/{chunk-2LEAKD4C.js → chunk-CKK25WN3.js} +3 -3
  48. package/dist/{chunk-BYP5D4HI.js → chunk-CTTI7G3T.js} +2 -2
  49. package/dist/{chunk-XAKHZX5N.js → chunk-CVDAFGPW.js} +4 -4
  50. package/dist/{chunk-RKKLTLYB.js → chunk-CXQ37WJH.js} +3 -3
  51. package/dist/{chunk-GTUD2WMY.js → chunk-DBREN25X.js} +44 -9
  52. package/dist/{chunk-WCXUNS7U.js → chunk-DIMRLNIC.js} +35 -66
  53. package/dist/{chunk-NDDGJUXD.js → chunk-DNCE23JJ.js} +2 -2
  54. package/dist/{chunk-HVDIIIQW.js → chunk-DNHVRBH4.js} +3 -3
  55. package/dist/{chunk-2UG5F4C5.js → chunk-DRD2A54W.js} +116 -52
  56. package/dist/{chunk-D7E7WCDF.js → chunk-DVNAPPXU.js} +2 -2
  57. package/dist/{chunk-YXLYO42X.js → chunk-DXVMLM3Z.js} +3 -2
  58. package/dist/{chunk-5MEZN6CB.js → chunk-DZK63TZJ.js} +6 -6
  59. package/dist/{chunk-IGLP3ODT.js → chunk-E3BQTQUP.js} +15 -15
  60. package/dist/{chunk-IWHMRKLL.js → chunk-E3LEPLQ2.js} +2 -2
  61. package/dist/{chunk-3R73A4XB.js → chunk-ECBHH7LU.js} +3 -3
  62. package/dist/chunk-ECOMVOHP.js +139 -0
  63. package/dist/chunk-EFSEIZE6.js +56 -0
  64. package/dist/{chunk-IJNZMHLA.js → chunk-EHCPSZJF.js} +4 -4
  65. package/dist/{chunk-K6BSR66V.js → chunk-EHOSNVVM.js} +6 -2
  66. package/dist/{chunk-RRNP2ANY.js → chunk-EQEJJ53P.js} +10 -10
  67. package/dist/{chunk-GWZNEVM2.js → chunk-EWD5P3GK.js} +9 -9
  68. package/dist/{chunk-JKKCYP3C.js → chunk-F34AR6O3.js} +21 -15
  69. package/dist/{chunk-GHS5EBTQ.js → chunk-FKIOX6DS.js} +29 -20
  70. package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
  71. package/dist/{chunk-MWUZBSAQ.js → chunk-FSTIBAGM.js} +358 -63
  72. package/dist/{chunk-ZTJUVLTU.js → chunk-FXFVDPWY.js} +2 -2
  73. package/dist/{chunk-XPLRXC72.js → chunk-GD55RTIW.js} +3 -3
  74. package/dist/{chunk-5B2AEOW5.js → chunk-GH5ZR6JP.js} +472 -472
  75. package/dist/{chunk-JSC3U7TI.js → chunk-GJ24ODAX.js} +5 -5
  76. package/dist/{chunk-B4VEBZKF.js → chunk-GNQRWTMY.js} +139 -52
  77. package/dist/{chunk-5ICU3EUH.js → chunk-GVYWZNRK.js} +5 -5
  78. package/dist/chunk-GXCCHKN6.js +59 -0
  79. package/dist/{chunk-V2ANDPVT.js → chunk-HGSLRG33.js} +170 -8
  80. package/dist/{chunk-LLDJM5XK.js → chunk-HHVJNVUJ.js} +6 -6
  81. package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
  82. package/dist/{chunk-VA5FNYMT.js → chunk-HR3HPQ76.js} +42 -5
  83. package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
  84. package/dist/{chunk-OML5D5V5.js → chunk-I7VLWRK2.js} +8 -8
  85. package/dist/{chunk-VW6DOEDG.js → chunk-ICO4TQ2F.js} +16 -5
  86. package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
  87. package/dist/{chunk-WBKFA554.js → chunk-ILJ7DWGE.js} +9 -9
  88. package/dist/{chunk-2JH2WHGE.js → chunk-J2FYEQ5L.js} +4 -4
  89. package/dist/{chunk-BMS5RKQY.js → chunk-JABWPKFY.js} +3 -3
  90. package/dist/{chunk-QDC3K2U3.js → chunk-K2BLQC5E.js} +3 -3
  91. package/dist/{chunk-EKCHAPYA.js → chunk-K2HL3GBL.js} +4 -4
  92. package/dist/{chunk-N2Z7HLVY.js → chunk-K6RDB7IA.js} +28 -28
  93. package/dist/{chunk-TM6LQDI3.js → chunk-KDWLXVMN.js} +85 -335
  94. package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
  95. package/dist/{chunk-RSJ25QSL.js → chunk-KF6GFW6O.js} +217 -50
  96. package/dist/{chunk-BTK3SSSK.js → chunk-KMF54VH3.js} +2 -2
  97. package/dist/chunk-KPRLAMP4.js +32 -0
  98. package/dist/{chunk-ECH6PKUQ.js → chunk-KQ6IDQIB.js} +2 -2
  99. package/dist/{chunk-IUE3Y34X.js → chunk-KTFSFCVN.js} +20 -9
  100. package/dist/{chunk-7E7I3WLS.js → chunk-KYKNBD4Y.js} +36 -34
  101. package/dist/chunk-L4N3DWNW.js +539 -0
  102. package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
  103. package/dist/{chunk-JIEGK6UF.js → chunk-LTR5QCLS.js} +51 -7
  104. package/dist/chunk-LUL5Z66S.js +221 -0
  105. package/dist/chunk-LVFANMOH.js +466 -0
  106. package/dist/{chunk-H7IXIC72.js → chunk-LY4N4TTL.js} +17 -3
  107. package/dist/{chunk-VKPAQYEB.js → chunk-LZBMXNLP.js} +5 -5
  108. package/dist/{chunk-UL3WSD3F.js → chunk-M4KFUXS7.js} +2 -2
  109. package/dist/{chunk-I7ZPNEJM.js → chunk-M6TAYK66.js} +8 -8
  110. package/dist/{chunk-NEKRRTYW.js → chunk-MC3JSVR6.js} +2 -2
  111. package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
  112. package/dist/chunk-MDU3C27C.js +674 -0
  113. package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
  114. package/dist/{chunk-4UVU7BJ5.js → chunk-NC4KV7EL.js} +6 -6
  115. package/dist/{chunk-JEQ3XTHC.js → chunk-NF3BK5WR.js} +5 -5
  116. package/dist/chunk-NTK3WTHM.js +141 -0
  117. package/dist/{chunk-GYV6VZOC.js → chunk-NTTS3O53.js} +2 -2
  118. package/dist/{chunk-UPZU6GE4.js → chunk-NY6IWDVU.js} +6 -6
  119. package/dist/chunk-O2RQ7LCK.js +283 -0
  120. package/dist/{chunk-4BJ5BYCE.js → chunk-O3VV6IVK.js} +2 -2
  121. package/dist/{chunk-W6GROXXM.js → chunk-O5F25NIE.js} +2 -2
  122. package/dist/{chunk-WRBAGUNF.js → chunk-ODUTYZIU.js} +5 -5
  123. package/dist/{chunk-E3TPLWFX.js → chunk-ONRTXOZY.js} +4 -4
  124. package/dist/{chunk-B4OAX3SI.js → chunk-OQM5IVJY.js} +118 -225
  125. package/dist/{chunk-XRZT5WY5.js → chunk-P5SC4DLJ.js} +4 -4
  126. package/dist/{chunk-R6Q67RJH.js → chunk-PECBKCDK.js} +34 -6
  127. package/dist/{chunk-33YXPOE3.js → chunk-PPEZJWUG.js} +2 -2
  128. package/dist/{chunk-64I3JVYM.js → chunk-PWWSIB2A.js} +5 -5
  129. package/dist/{chunk-2STGEDFV.js → chunk-QEQISF75.js} +2 -2
  130. package/dist/{chunk-3DPEIQKN.js → chunk-QH3ZTUOA.js} +2 -2
  131. package/dist/{chunk-YAKGTXEV.js → chunk-QRFXEO6Y.js} +2 -2
  132. package/dist/{chunk-35MSIRKH.js → chunk-QUIJZSDW.js} +2 -2
  133. package/dist/{chunk-HHV2GANA.js → chunk-R2P2U3ZS.js} +2 -2
  134. package/dist/chunk-R6MAYTMS.js +108 -0
  135. package/dist/{chunk-MUW2BDDH.js → chunk-R6MICQYU.js} +6 -6
  136. package/dist/{chunk-JDAY6FIL.js → chunk-RLTT5GVY.js} +132 -17
  137. package/dist/{chunk-ZWPRK62N.js → chunk-RXIOCVBZ.js} +24 -6
  138. package/dist/{chunk-NIQJ66N4.js → chunk-S32UQ5GL.js} +62 -35
  139. package/dist/{chunk-AX2THNSA.js → chunk-SBZX6ARC.js} +12 -12
  140. package/dist/{chunk-TXOTCRLG.js → chunk-SD7SHNDW.js} +2 -2
  141. package/dist/{chunk-AF4YM7Z4.js → chunk-SDWNDICN.js} +10284 -3756
  142. package/dist/{chunk-UXCU4E3T.js → chunk-SE4ZKILO.js} +6 -6
  143. package/dist/chunk-SL2RDHKO.js +19 -0
  144. package/dist/{chunk-NUGM5KR6.js → chunk-SRCEQKQS.js} +2 -2
  145. package/dist/{chunk-KKOJXO6R.js → chunk-SRZOW5L2.js} +46 -14
  146. package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
  147. package/dist/chunk-T52TPHYC.js +318 -0
  148. package/dist/{chunk-I7XBWTYH.js → chunk-T53XI6I7.js} +5 -5
  149. package/dist/{chunk-LDJG7DW3.js → chunk-T7FDXNRU.js} +13 -13
  150. package/dist/{chunk-XPWWI35G.js → chunk-TEG3RYVZ.js} +59 -41
  151. package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
  152. package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
  153. package/dist/{chunk-PAJQJ7BS.js → chunk-TZ7MFRG4.js} +1263 -835
  154. package/dist/{chunk-GI7YYQ3F.js → chunk-U2JOLB7O.js} +415 -83
  155. package/dist/{chunk-LL4KHSZI.js → chunk-U2MSJ57E.js} +2 -2
  156. package/dist/{chunk-FTMGRKEF.js → chunk-U44YYLVV.js} +4 -4
  157. package/dist/{chunk-CE5AX47J.js → chunk-U7H5WRG5.js} +5 -5
  158. package/dist/{chunk-G76U63X4.js → chunk-U7VQ4NI4.js} +22 -22
  159. package/dist/{chunk-7ZYNNDKC.js → chunk-UFYNOQK4.js} +7 -7
  160. package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
  161. package/dist/{chunk-QWGDJJYJ.js → chunk-UL36QJX6.js} +14 -14
  162. package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
  163. package/dist/{chunk-HEQY7ZFI.js → chunk-URBGEOH3.js} +5 -5
  164. package/dist/chunk-USZA7GWL.js +341 -0
  165. package/dist/{chunk-W6RRQCPQ.js → chunk-UTUNT5QL.js} +48 -579
  166. package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
  167. package/dist/{chunk-F5JHEYZM.js → chunk-UXAC2FX4.js} +73 -41
  168. package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
  169. package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
  170. package/dist/chunk-VLPTKCKT.js +396 -0
  171. package/dist/{chunk-336NSSKI.js → chunk-VNBICSS2.js} +2 -2
  172. package/dist/{chunk-VAVR4IJY.js → chunk-VQD7NH7Z.js} +3 -3
  173. package/dist/{chunk-LBMZMYH2.js → chunk-W2RJEH6Q.js} +3 -3
  174. package/dist/{chunk-7CR24IG7.js → chunk-WDV62RKY.js} +2 -2
  175. package/dist/{chunk-2UH2KFUP.js → chunk-WFKDPU7U.js} +4 -4
  176. package/dist/{chunk-ZDN3Y73Y.js → chunk-WJIMKGD6.js} +9 -51
  177. package/dist/{chunk-YQWYVTMC.js → chunk-WLMSOT73.js} +59 -12
  178. package/dist/{chunk-MXHC5QYU.js → chunk-WTQGRBHV.js} +5 -144
  179. package/dist/chunk-WXA2CFJO.js +23 -0
  180. package/dist/{chunk-QSNYB6ZV.js → chunk-XCUDZQLX.js} +3 -3
  181. package/dist/{chunk-2APPQIER.js → chunk-XXBQKW32.js} +11 -11
  182. package/dist/{chunk-2VIKGWFZ.js → chunk-YEJIG7LN.js} +332 -332
  183. package/dist/chunk-YGDMBK7O.js +567 -0
  184. package/dist/{chunk-4WR7VSYB.js → chunk-YYB3MC65.js} +23 -9
  185. package/dist/{chunk-2IR2NMPA.js → chunk-ZIDFQJRB.js} +2 -2
  186. package/dist/{chunk-54CBCGIR.js → chunk-ZMZQEBKI.js} +136 -81
  187. package/dist/{chunk-6EJMN2Y3.js → chunk-ZTNFYMIO.js} +2 -2
  188. package/dist/{chunk-WEPFGWHJ.js → chunk-ZZFWWYLX.js} +2 -2
  189. package/dist/cli/index.js +45 -44
  190. package/dist/clio-5I2IBFYL.js +26 -0
  191. package/dist/{code-nav-MDZNQS33.js → code-nav-YXIAEZVS.js} +48 -32
  192. package/dist/codewiki/build-worker.js +76 -29
  193. package/dist/{compile-cache-OQAVB7Y5.js → compile-cache-WJEPUZEJ.js} +4 -4
  194. package/dist/{components-UCUQ4QXW.js → components-TNIKXCBH.js} +13 -14
  195. package/dist/{config-SVM5P5YI.js → config-Y2JDJ3JJ.js} +210 -119
  196. package/dist/configure-SML6UBZ5.js +55 -0
  197. package/dist/{context-2OHRKS42.js → context-P5YSEO55.js} +125 -115
  198. package/dist/{context-VNCR7KAG.js → context-QQ53HSGJ.js} +91 -62
  199. package/dist/{context-E3VC7RX5.js → context-S2EEC3EJ.js} +62 -31
  200. package/dist/context-clear-TMEQCOTH.js +183 -0
  201. package/dist/{context-index-HNG3MOME.js → context-index-HP2JFUWA.js} +13 -11
  202. package/dist/{context-map-COB37XXN.js → context-map-INTXD54D.js} +71 -21
  203. package/dist/{context-working-set-VDS25HXZ.js → context-working-set-CNLSQN5K.js} +31 -31
  204. package/dist/detail-5572VLBO.js +114 -0
  205. package/dist/{dispatch-runner-5AHT53RF.js → dispatch-runner-FRHD6P2O.js} +214 -126
  206. package/dist/{docs-PD3EXDKU.js → docs-BL7ROUFN.js} +5 -7
  207. package/dist/{doctor-WNNVO6FY.js → doctor-N3LCM2LG.js} +89 -66
  208. package/dist/{eval-7G7SGAYO.js → eval-BUU3ZOUZ.js} +493 -197
  209. package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
  210. package/dist/evidence-DTGEN456.js +224 -0
  211. package/dist/{evidence-VD6736FQ.js → evidence-SQ5DNFEN.js} +114 -195
  212. package/dist/{evolve-AL3NGVRL.js → evolve-IJNUFZDS.js} +107 -88
  213. package/dist/{extensions-MOVJ32NM.js → extensions-YVRHX6ZI.js} +16 -17
  214. package/dist/{fleet-QZHUMAGI.js → fleet-ZNNVSYFO.js} +147 -141
  215. package/dist/{fleet-commands-BAYT5FJZ.js → fleet-commands-5YE7NPJL.js} +27 -23
  216. package/dist/{fleet-decisions-IREVMRU4.js → fleet-decisions-3SBSCTCW.js} +16 -15
  217. package/dist/{fleet-graph-YCTT3HTI.js → fleet-graph-6HHPWF5T.js} +39 -38
  218. package/dist/{fleet-inspect-QVJTDAVB.js → fleet-inspect-JEYMGCGC.js} +107 -87
  219. package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
  220. package/dist/{fleet-preflight-25QAFPK4.js → fleet-preflight-QRSHIIDE.js} +10 -10
  221. package/dist/{fleet-validate-5O57AAJ7.js → fleet-validate-4PM4GDDL.js} +46 -42
  222. package/dist/{fleet-verify-CPH2W2T6.js → fleet-verify-NJDTHTO3.js} +105 -85
  223. package/dist/fleet-view-UP2BWQQY.js +117 -0
  224. package/dist/{init-J477LKZH.js → init-S3GZQ5ZF.js} +123 -117
  225. package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
  226. package/dist/{interop-3FCM6XLG.js → interop-YOTGXFJM.js} +25 -26
  227. package/dist/inventory-K2OZ36YJ.js +117 -0
  228. package/dist/{library-QUQEIUG6.js → library-GJI6W6OK.js} +45 -45
  229. package/dist/{memory-SGGSEP65.js → memory-OQOXQGYD.js} +107 -90
  230. package/dist/{models-HEKUAXXK.js → models-3IK2Y5WE.js} +64 -65
  231. package/dist/{monitor-HKU57TYQ.js → monitor-FTJLTKCQ.js} +136 -101
  232. package/dist/{orchestrator-VDFAEFAI.js → orchestrator-N47O7SFD.js} +1442 -1671
  233. package/dist/{panes-DN2SSFOH.js → panes-7BTYH3XQ.js} +8 -8
  234. package/dist/{panes-TALGNPZT.js → panes-WPOMEMRH.js} +22 -23
  235. package/dist/{paths-NBMFAIEZ.js → paths-J3KN7UAO.js} +12 -13
  236. package/dist/preload-65U34NG6.js +115 -0
  237. package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
  238. package/dist/{reset-EAJFFJVB.js → reset-MUVQDLNL.js} +20 -21
  239. package/dist/{resources-OVKSEFVE.js → resources-LM76COAO.js} +41 -40
  240. package/dist/{run-7DP7ZF2J.js → run-3VFZQ33N.js} +168 -166
  241. package/dist/{share-WML67FT3.js → share-4JUB4BL7.js} +43 -43
  242. package/dist/{skills-SG662R2K.js → skills-S36AAJHU.js} +47 -47
  243. package/dist/{skills-eval-VVZEUU46.js → skills-eval-G6T57L7M.js} +127 -104
  244. package/dist/{skills-inventory-I2E23GET.js → skills-inventory-WLM46PJH.js} +41 -40
  245. package/dist/slash-commands-GBARG3Y7.js +91 -0
  246. package/dist/{steer-2LQOMCPB.js → steer-S7D7IKPU.js} +7 -7
  247. package/dist/{support-CC2UJBJ6.js → support-5VAEC32W.js} +14 -14
  248. package/dist/{targets-4QC3HIEW.js → targets-N5REUETU.js} +147 -98
  249. package/dist/tasks-6BVY5YZF.js +36 -0
  250. package/dist/{terminal-lease-TUHIJ6Y2.js → terminal-lease-57UEOJKS.js} +12 -11
  251. package/dist/tools-6OCQ6SVB.js +28 -0
  252. package/dist/{trace-FXMXUZUF.js → trace-JHLXWUMN.js} +18 -17
  253. package/dist/{tree-sitter-HGKH6LG4.js → tree-sitter-AQUUOSYM.js} +6 -6
  254. package/dist/{tui-primitives-K5PASC3O.js → tui-primitives-RCY2HN7G.js} +3 -3
  255. package/dist/{uninstall-5PEVOE5B.js → uninstall-FXYMFFRT.js} +19 -20
  256. package/dist/{upgrade-M4WXY6KN.js → upgrade-4HD5HAIV.js} +49 -45
  257. package/dist/{usage-N7ZNVLEM.js → usage-4GWM2WWP.js} +143 -103
  258. package/dist/{verifiers-DJTP4XX6.js → verifiers-GSKWKWVG.js} +162 -28
  259. package/dist/verify-3AS3ULCY.js +30 -0
  260. package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
  261. package/dist/{web-fetch-MPARV2K7.js → web-fetch-MQN4FH3X.js} +169 -18
  262. package/dist/wiki-generate-7BV7XWIY.js +614 -0
  263. package/dist/{with-panes-4GCGSL7J.js → with-panes-OFTNAR4Y.js} +34 -20
  264. package/dist/worker/entry.js +99 -85
  265. package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
  266. package/docs/README.md +10 -8
  267. package/docs/architecture/acp.md +27 -0
  268. package/docs/architecture/architecture.md +5 -5
  269. package/docs/architecture/artifact-versions.md +1 -1
  270. package/docs/architecture/context-engine.md +44 -59
  271. package/docs/architecture/context-working-set.md +7 -9
  272. package/docs/architecture/dispatch-architecture-rationale.md +1 -1
  273. package/docs/architecture/dispatch-typed-intent.md +1 -1
  274. package/docs/architecture/evidence-and-memory.md +11 -1
  275. package/docs/architecture/observability.md +7 -1
  276. package/docs/architecture/pi-boundary.md +37 -7
  277. package/docs/architecture/prompt-envelope-and-tools.md +22 -12
  278. package/docs/architecture/safety-model.md +10 -17
  279. package/docs/architecture/session-lifecycle.md +4 -4
  280. package/docs/architecture/tui-design.md +1 -1
  281. package/docs/architecture/worker-dispatch-mechanics.md +4 -0
  282. package/docs/guide/built-in-agents.md +8 -8
  283. package/docs/guide/commands-and-modes.md +66 -38
  284. package/docs/guide/configuration-and-targets.md +10 -3
  285. package/docs/guide/configuration-reference.md +23 -8
  286. package/docs/guide/environment-variables.md +8 -4
  287. package/docs/guide/fleet-dispatch.md +12 -0
  288. package/docs/guide/installation-and-lifecycle.md +35 -9
  289. package/docs/guide/proactive-memory.md +1 -1
  290. package/docs/guide/skills-marketplace.md +11 -3
  291. package/docs/guide/tool-usage.md +87 -5
  292. package/docs/history/config-knobs-audit.md +2 -2
  293. package/docs/process/development-pipeline.md +15 -10
  294. package/docs/process/documentation-guide.md +2 -2
  295. package/docs/process/eval-runner.md +15 -0
  296. package/docs/process/evals-internal.md +1 -1
  297. package/docs/process/git-commit-provenance.md +15 -0
  298. package/docs/process/release-cut-checklist.md +207 -0
  299. package/docs/process/scientific-validation.md +18 -17
  300. package/evals/README.md +4 -0
  301. package/evals/behavioral-corpus-grader.mjs +147 -14
  302. package/evals/behavioral-machinery-support.ts +1 -0
  303. package/evals/behavioral-machinery.yaml +1 -1
  304. package/evals/behavioral-model-negative-control.yaml +1 -0
  305. package/evals/behavioral-model.yaml +266 -1
  306. package/evals/fixtures/docs-retrieval.json +102 -0
  307. package/evals/fixtures/scalar-decision.json +17 -0
  308. package/evals/fixtures/scout-citation-pipeline.json +55 -0
  309. package/evals/fixtures/source-explanation.json +74 -0
  310. package/evals/fixtures/tool-arguments.json +18 -0
  311. package/evals/fixtures/tool-surface/read.txt +4 -0
  312. package/evals/fixtures/tool-surface/subdir/keep.txt +1 -0
  313. package/evals/no-edit-memory-grader.mjs +149 -0
  314. package/evals/scalar-decision-grader.py +41 -0
  315. package/evals/scalar-decision-machinery.ts +145 -0
  316. package/evals/source-explanation-grader.mjs +118 -0
  317. package/evals/tool-surface-grader.mjs +53 -0
  318. package/evals/tool-surface-model.yaml +274 -0
  319. package/package.json +14 -14
  320. package/skills/README.md +6 -6
  321. package/skills/coding/coding-standards/SKILL.md +14 -4
  322. package/skills/context/context-handoff/SKILL.md +3 -3
  323. package/skills/context/context-prime/SKILL.md +3 -3
  324. package/skills/planning/architecture/SKILL.md +5 -5
  325. package/skills/planning/backlog/SKILL.md +4 -4
  326. package/skills/planning/prd/SKILL.md +4 -3
  327. package/skills/planning/product-intent/SKILL.md +8 -8
  328. package/skills/planning/tech-spec/SKILL.md +4 -4
  329. package/skills/registry.yaml +33 -33
  330. package/skills/research/arxiv-literature/SKILL.md +3 -3
  331. package/skills/research/experiment-protocol/SKILL.md +3 -3
  332. package/skills/research/scientific-debugging/SKILL.md +3 -2
  333. package/skills/research/scientific-modernization/SKILL.md +3 -3
  334. package/skills/skill-marketplace.json +17 -17
  335. package/skills/workflow/cut-it/SKILL.md +3 -4
  336. package/skills/workflow/design-council/SKILL.md +5 -10
  337. package/skills/workflow/grill-me/SKILL.md +14 -15
  338. package/skills/workflow/workflow-distiller/SKILL.md +4 -4
  339. package/src/cli/args.ts +0 -8
  340. package/src/cli/bootstrap-generate.ts +6 -0
  341. package/src/cli/config-inspect.ts +24 -7
  342. package/src/cli/config-trust.ts +62 -0
  343. package/src/cli/config.ts +8 -0
  344. package/src/cli/configure.ts +2 -1
  345. package/src/cli/context-map.ts +75 -14
  346. package/src/cli/context.ts +46 -17
  347. package/src/cli/doctor-state-size.ts +1 -12
  348. package/src/cli/doctor-validation-contract.ts +28 -0
  349. package/src/cli/doctor.ts +5 -0
  350. package/src/cli/eval.ts +17 -3
  351. package/src/cli/evidence-detail.ts +1 -75
  352. package/src/cli/evidence-inventory.ts +1 -167
  353. package/src/cli/index.ts +2 -0
  354. package/src/cli/modes/print.ts +32 -4
  355. package/src/cli/run.ts +16 -16
  356. package/src/cli/skills-eval.ts +10 -8
  357. package/src/cli/steer-channel.ts +31 -18
  358. package/src/cli/targets.ts +84 -32
  359. package/src/cli/tasks.ts +93 -0
  360. package/src/cli/upgrade.ts +19 -11
  361. package/src/cli/usage.ts +30 -0
  362. package/src/cli/verifiers.ts +147 -1
  363. package/src/cli/wiki-generate.ts +240 -96
  364. package/src/core/bash-exec.ts +43 -15
  365. package/src/core/bus-events.ts +15 -0
  366. package/src/core/commit-attribution.ts +41 -1
  367. package/src/core/config.ts +33 -14
  368. package/src/core/defaults.ts +5 -4
  369. package/src/core/file-references.ts +11 -1
  370. package/src/core/git-commit-attribution.ts +46 -3
  371. package/src/core/incomplete-installation.ts +3 -1
  372. package/src/core/run-overrides.ts +0 -5
  373. package/src/core/settings-layers.ts +21 -5
  374. package/src/core/skill-activation.ts +3 -0
  375. package/src/core/termination.ts +26 -9
  376. package/src/core/tool-names.ts +5 -2
  377. package/src/core/untrusted-content.ts +16 -0
  378. package/src/core/workspace-trust.ts +179 -0
  379. package/src/domains/agents/builtins/architect.md +1 -1
  380. package/src/domains/agents/builtins/coder.md +5 -3
  381. package/src/domains/agents/builtins/context-bootstrap.md +3 -1
  382. package/src/domains/agents/builtins/documenter.md +8 -5
  383. package/src/domains/agents/builtins/git-master.md +1 -1
  384. package/src/domains/agents/builtins/provenance.md +7 -7
  385. package/src/domains/agents/builtins/researcher.md +1 -0
  386. package/src/domains/agents/builtins/scout.md +7 -1
  387. package/src/domains/agents/builtins/tester.md +1 -1
  388. package/src/domains/agents/builtins/verifier.md +2 -2
  389. package/src/domains/agents/builtins/wiki-writer.md +4 -3
  390. package/src/domains/agents/result-contract.ts +199 -26
  391. package/src/domains/context/bootstrap-prompt.ts +11 -9
  392. package/src/domains/context/bootstrap.ts +74 -39
  393. package/src/domains/context/clio-md.ts +88 -26
  394. package/src/domains/context/codewiki/build-operation.ts +121 -0
  395. package/src/domains/context/codewiki/build-worker-protocol.ts +37 -3
  396. package/src/domains/context/codewiki/build-worker.ts +3 -35
  397. package/src/domains/context/codewiki/coordinator.ts +36 -6
  398. package/src/domains/context/codewiki/indexer.ts +59 -19
  399. package/src/domains/context/contract.ts +6 -2
  400. package/src/domains/context/extension.ts +97 -11
  401. package/src/domains/context/fingerprint.ts +39 -34
  402. package/src/domains/context/index.ts +7 -1
  403. package/src/domains/context/prompt-context.ts +55 -14
  404. package/src/domains/context/refresh.ts +12 -57
  405. package/src/domains/context/wiki/assemble.ts +14 -10
  406. package/src/domains/context/wiki/evidence.ts +209 -0
  407. package/src/domains/context/wiki/frontmatter.ts +5 -2
  408. package/src/domains/context/wiki/generate.ts +207 -67
  409. package/src/domains/context/wiki/meta.ts +10 -2
  410. package/src/domains/context/wiki/plan-store.ts +70 -14
  411. package/src/domains/context/wiki/plan.ts +71 -14
  412. package/src/domains/context/wiki/prompts.ts +85 -1
  413. package/src/domains/context/wiki/source-content.ts +106 -0
  414. package/src/domains/context/wiki/staleness.ts +33 -22
  415. package/src/domains/context/working-set/contract.ts +8 -2
  416. package/src/domains/context/working-set/engine.ts +17 -4
  417. package/src/domains/context/working-set/fold.ts +15 -2
  418. package/src/domains/context/working-set/marker.ts +2 -1
  419. package/src/domains/context/working-set/project.ts +18 -7
  420. package/src/domains/context/working-set/recall.ts +82 -56
  421. package/src/domains/dispatch/active-route-planner.ts +10 -3
  422. package/src/domains/dispatch/admission-queue.ts +19 -7
  423. package/src/domains/dispatch/admission.ts +3 -3
  424. package/src/domains/dispatch/budget-envelope.ts +47 -82
  425. package/src/domains/dispatch/capacity-lease.ts +57 -19
  426. package/src/domains/dispatch/code-step.ts +11 -4
  427. package/src/domains/dispatch/contract.ts +41 -9
  428. package/src/domains/dispatch/event-pump.ts +28 -7
  429. package/src/domains/dispatch/execution-role.ts +49 -2
  430. package/src/domains/dispatch/execution-scheduler.ts +4 -0
  431. package/src/domains/dispatch/extension.ts +240 -132
  432. package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
  433. package/src/domains/dispatch/fleet-run.ts +21 -0
  434. package/src/domains/dispatch/gate-role-prompts.ts +4 -2
  435. package/src/domains/dispatch/host-verification.ts +114 -13
  436. package/src/domains/dispatch/intent.ts +28 -18
  437. package/src/domains/dispatch/orphan-recovery.ts +2 -0
  438. package/src/domains/dispatch/parallel-writers.ts +34 -0
  439. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  440. package/src/domains/dispatch/reservation-store.ts +13 -37
  441. package/src/domains/dispatch/route-approval.ts +3 -3
  442. package/src/domains/dispatch/route-observer.ts +4 -2
  443. package/src/domains/dispatch/route-quality.ts +6 -1
  444. package/src/domains/dispatch/state.ts +15 -2
  445. package/src/domains/dispatch/types.ts +21 -5
  446. package/src/domains/dispatch/worker-spawn.ts +58 -21
  447. package/src/domains/dispatch/workspace-checkpoint.ts +57 -0
  448. package/src/domains/eval/compare/behavioral.ts +81 -14
  449. package/src/domains/eval/compare/compare.ts +15 -5
  450. package/src/domains/eval/compare/envelope.ts +12 -5
  451. package/src/domains/eval/metrics/context.ts +24 -1
  452. package/src/domains/eval/metrics/tracked.ts +4 -28
  453. package/src/domains/eval/reports/comparison.ts +9 -9
  454. package/src/domains/eval/runners/clio-run.ts +17 -10
  455. package/src/domains/eval/runners/context-index.ts +2 -7
  456. package/src/domains/eval/runners/context-init.ts +3 -6
  457. package/src/domains/eval/runners/external-command.ts +29 -11
  458. package/src/domains/eval/schema/suite.ts +2 -0
  459. package/src/domains/eval/schema/validate.ts +1 -0
  460. package/src/domains/eval/suites/run.ts +189 -13
  461. package/src/domains/eval/verifiers/integrity.ts +39 -0
  462. package/src/domains/eval/verifiers/patch.ts +58 -2
  463. package/src/domains/eval/workspaces/temp-copy.ts +3 -0
  464. package/src/domains/evidence/build.ts +106 -17
  465. package/src/domains/evidence/detail.ts +69 -0
  466. package/src/domains/evidence/eval.ts +13 -1
  467. package/src/domains/evidence/finish-contract-map.ts +5 -1
  468. package/src/domains/evidence/inventory.ts +167 -0
  469. package/src/domains/evidence/store.ts +16 -0
  470. package/src/domains/evidence/types.ts +12 -0
  471. package/src/domains/extensions/resources.ts +7 -0
  472. package/src/domains/interop/registry.ts +2 -2
  473. package/src/domains/middleware/hooks-io.ts +45 -26
  474. package/src/domains/middleware/hooks.ts +6 -0
  475. package/src/domains/middleware/injection-screen.ts +23 -0
  476. package/src/domains/middleware/marketplace-offer.ts +20 -1
  477. package/src/domains/middleware/rules.ts +5 -1
  478. package/src/domains/middleware/runtime.ts +7 -3
  479. package/src/domains/middleware/stalled-turn.ts +18 -3
  480. package/src/domains/middleware/task-board-reminder.ts +4 -2
  481. package/src/domains/middleware/task-nudge.ts +4 -1
  482. package/src/domains/mux/contract.ts +34 -1
  483. package/src/domains/mux/detect.ts +3 -6
  484. package/src/domains/mux/dock-controller.ts +8 -1
  485. package/src/domains/mux/index.ts +1 -0
  486. package/src/domains/mux/socket-client.ts +13 -3
  487. package/src/domains/observability/accountability.ts +15 -1
  488. package/src/domains/observability/contract.ts +54 -9
  489. package/src/domains/observability/evidence-index.ts +10 -0
  490. package/src/domains/observability/extension.ts +9 -5
  491. package/src/domains/observability/projection.ts +423 -53
  492. package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
  493. package/src/domains/prompts/compiler.ts +10 -2
  494. package/src/domains/prompts/contract.ts +7 -4
  495. package/src/domains/prompts/extension.ts +28 -64
  496. package/src/domains/prompts/fragments/identity/clio.md +23 -0
  497. package/src/domains/prompts/fragments/operating/contract.md +12 -0
  498. package/src/domains/prompts/fragments/operating/delegation.md +5 -0
  499. package/src/domains/prompts/fragments/wiki/page.md +36 -15
  500. package/src/domains/prompts/fragments/wiki/plan.md +4 -4
  501. package/src/domains/prompts/preload-prefix.ts +31 -0
  502. package/src/domains/prompts/preload.ts +135 -61
  503. package/src/domains/providers/auth/backend-file.ts +15 -11
  504. package/src/domains/providers/auth/storage.ts +3 -5
  505. package/src/domains/providers/catalog.ts +18 -3
  506. package/src/domains/providers/model-discovery.ts +1 -4
  507. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +16 -14
  508. package/src/domains/providers/runtime-resolution.ts +11 -9
  509. package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
  510. package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
  511. package/src/domains/providers/support.ts +1 -1
  512. package/src/domains/providers/types/runtime-descriptor.ts +1 -1
  513. package/src/domains/resources/skills/promotion.ts +8 -1
  514. package/src/domains/safety/action-classifier.ts +16 -0
  515. package/src/domains/safety/autonomy.ts +10 -1
  516. package/src/domains/safety/contract.ts +5 -1
  517. package/src/domains/safety/default-path-policy.ts +13 -0
  518. package/src/domains/safety/extension.ts +11 -2
  519. package/src/domains/safety/finish-contract-registration.ts +29 -14
  520. package/src/domains/safety/finish-contract.ts +252 -40
  521. package/src/domains/safety/index.ts +20 -1
  522. package/src/domains/safety/policy-engine.ts +211 -34
  523. package/src/domains/safety/project-policy.ts +7 -2
  524. package/src/domains/safety/rigor.ts +53 -39
  525. package/src/domains/safety/validation-contract.ts +388 -0
  526. package/src/domains/safety/workspace-trust.ts +43 -0
  527. package/src/domains/session/archive-readers.ts +10 -1
  528. package/src/domains/session/compaction/compact.ts +384 -21
  529. package/src/domains/session/compaction/cut-point.ts +42 -5
  530. package/src/domains/session/compaction/tokens.ts +9 -1
  531. package/src/domains/session/decision-board.ts +137 -28
  532. package/src/domains/session/entries.ts +213 -11
  533. package/src/domains/session/extension.ts +4 -4
  534. package/src/domains/session/handoff.ts +2 -1
  535. package/src/domains/session/manager.ts +2 -3
  536. package/src/domains/session/prompt-manifest.ts +47 -8
  537. package/src/domains/session/task-board.ts +32 -1
  538. package/src/domains/session/tree/fork.ts +1 -2
  539. package/src/domains/session/tree/navigator.ts +1 -1
  540. package/src/domains/user-tasks/acceptance.ts +56 -0
  541. package/src/domains/user-tasks/active-acceptance.ts +40 -0
  542. package/src/domains/user-tasks/handoff.ts +16 -0
  543. package/src/domains/user-tasks/store.ts +34 -3
  544. package/src/engine/acp/adapter.ts +60 -10
  545. package/src/engine/acp/server.ts +22 -4
  546. package/src/engine/acp/transport.ts +55 -9
  547. package/src/engine/acp/types.ts +9 -0
  548. package/src/engine/antigravity/subprocess-runtime.ts +20 -4
  549. package/src/engine/api-registry.ts +19 -2
  550. package/src/engine/apis/ollama-native.ts +15 -0
  551. package/src/engine/apis/openai-completions.ts +13 -6
  552. package/src/engine/apis/output-budget.ts +26 -10
  553. package/src/engine/claude/sdk-runtime.ts +4 -3
  554. package/src/engine/claude/subprocess-runtime.ts +107 -60
  555. package/src/engine/env-api-keys.ts +2 -1
  556. package/src/engine/external-subprocess.ts +26 -7
  557. package/src/engine/loop-guard.ts +19 -2
  558. package/src/engine/provider-diagnostics.ts +129 -0
  559. package/src/engine/provider-payload.ts +3 -1
  560. package/src/engine/worker-runtime.ts +13 -2
  561. package/src/engine/worker-tools.ts +5 -1
  562. package/src/entry/extension-reload.ts +1 -0
  563. package/src/entry/orchestrator.ts +64 -17
  564. package/src/interactive/chat-loop-messages.ts +12 -4
  565. package/src/interactive/chat-loop.ts +115 -45
  566. package/src/interactive/chat-renderer.ts +60 -0
  567. package/src/interactive/context-recall-command.ts +2 -1
  568. package/src/interactive/dispatch-board.ts +58 -714
  569. package/src/interactive/editor-submit.ts +13 -0
  570. package/src/interactive/fleet-run-preview.ts +2 -1
  571. package/src/interactive/interactive-application.ts +11 -4
  572. package/src/interactive/interactive-event-projection.ts +7 -1
  573. package/src/interactive/interactive-presentation.ts +63 -12
  574. package/src/interactive/interactive-slash-runtime.ts +4 -1
  575. package/src/interactive/layout.ts +2 -1
  576. package/src/interactive/model-session-replay.ts +2 -2
  577. package/src/interactive/oracle.ts +5 -2
  578. package/src/interactive/overlay-frame.ts +1 -0
  579. package/src/interactive/overlay-general-openers.ts +3 -1
  580. package/src/interactive/overlay-session-lifecycle.ts +6 -0
  581. package/src/interactive/overlays/ask-user.ts +1 -0
  582. package/src/interactive/overlays/fleet-run-approval.ts +3 -2
  583. package/src/interactive/overlays/message-picker.ts +3 -3
  584. package/src/interactive/overlays/settings.ts +2 -2
  585. package/src/interactive/overlays/tree-selector.ts +2 -2
  586. package/src/interactive/renderers/branch-summary.ts +1 -1
  587. package/src/interactive/renderers/tool-execution.ts +17 -1
  588. package/src/interactive/renderers/worker-entry.ts +25 -10
  589. package/src/interactive/slash-autocomplete.ts +4 -6
  590. package/src/interactive/slash-commands.ts +31 -43
  591. package/src/interactive/slash-spec.ts +28 -0
  592. package/src/interactive/turn-context.ts +221 -53
  593. package/src/interactive/turn-middleware.ts +3 -1
  594. package/src/interactive/turn-persistence.ts +3 -0
  595. package/src/interactive/turn-runtime.ts +11 -2
  596. package/src/interactive/turn-state.ts +10 -9
  597. package/src/interactive/view/artifacts.ts +2 -0
  598. package/src/interactive/watch-pane.ts +18 -4
  599. package/src/interactive/worker-stream.ts +14 -10
  600. package/src/tools/agent-tools.ts +6 -3
  601. package/src/tools/bash.ts +1 -1
  602. package/src/tools/bootstrap.ts +4 -0
  603. package/src/tools/builtin-tool-catalog.ts +40 -2
  604. package/src/tools/codewiki/code-nav.ts +4 -10
  605. package/src/tools/compete-judge-task.ts +71 -0
  606. package/src/tools/compete-worktrees.ts +41 -1
  607. package/src/tools/context/index.ts +32 -7
  608. package/src/tools/context/surface.ts +15 -4
  609. package/src/tools/core-bootstrap.ts +16 -0
  610. package/src/tools/decide.ts +136 -0
  611. package/src/tools/dispatch-admission.ts +33 -1
  612. package/src/tools/dispatch-arguments.ts +38 -1
  613. package/src/tools/dispatch-plan.ts +12 -9
  614. package/src/tools/dispatch-runner.ts +63 -33
  615. package/src/tools/dispatch-schema.ts +30 -23
  616. package/src/tools/dispatch-scout-admission.ts +10 -44
  617. package/src/tools/dispatch-scout.ts +2 -3
  618. package/src/tools/dispatch-types.ts +6 -0
  619. package/src/tools/evidence.ts +96 -0
  620. package/src/tools/find.ts +13 -4
  621. package/src/tools/grep.ts +13 -1
  622. package/src/tools/limitation.ts +76 -0
  623. package/src/tools/ls.ts +7 -1
  624. package/src/tools/monitor.ts +26 -11
  625. package/src/tools/network-policy.ts +11 -24
  626. package/src/tools/observation.ts +39 -2
  627. package/src/tools/policy.ts +9 -0
  628. package/src/tools/presentation.ts +3 -0
  629. package/src/tools/read.ts +112 -15
  630. package/src/tools/registry.ts +55 -18
  631. package/src/tools/result-shaping.ts +127 -7
  632. package/src/tools/task-worktree.ts +13 -3
  633. package/src/tools/tasks.ts +40 -5
  634. package/src/tools/verify/authoring.ts +170 -83
  635. package/src/tools/verify/catalog.ts +122 -5
  636. package/src/tools/verify/frontend.ts +67 -30
  637. package/src/tools/verify/index.ts +2 -1
  638. package/src/tools/verify/numeric.ts +303 -0
  639. package/src/tools/verify/perf.ts +143 -0
  640. package/src/tools/verify/scripts.ts +229 -2
  641. package/src/tools/web-fetch-network.ts +179 -0
  642. package/src/tools/web-fetch-surface.ts +2 -1
  643. package/src/tools/web-fetch.ts +15 -13
  644. package/src/tools/worker-evidence.ts +27 -0
  645. package/src/worker/spec-contract.ts +12 -8
  646. package/dist/builtins-IA7V7FUC.js +0 -22
  647. package/dist/chunk-2WZ546HR.js +0 -792
  648. package/dist/chunk-5PSMVOLM.js +0 -56
  649. package/dist/chunk-7DICMOS6.js +0 -313
  650. package/dist/chunk-BEPZRGGU.js +0 -1560
  651. package/dist/chunk-JVCV3ICN.js +0 -47
  652. package/dist/chunk-KK4JZPBQ.js +0 -3982
  653. package/dist/chunk-MNJGS2IN.js +0 -33
  654. package/dist/chunk-NDINPTJ4.js +0 -641
  655. package/dist/chunk-O5CVSAG5.js +0 -122
  656. package/dist/chunk-OQE5J4C6.js +0 -73
  657. package/dist/chunk-RVG5JXAL.js +0 -41
  658. package/dist/chunk-T56WDKA5.js +0 -183
  659. package/dist/chunk-UUVG37B4.js +0 -244
  660. package/dist/chunk-VPKWYKEY.js +0 -169
  661. package/dist/chunk-Y3CBHOR6.js +0 -228
  662. package/dist/clio-CMMK4KRR.js +0 -25
  663. package/dist/configure-LE3IK2TJ.js +0 -56
  664. package/dist/context-clear-BW4O37TG.js +0 -176
  665. package/dist/fleet-view-SWBR3VGQ.js +0 -97
  666. package/dist/preload-P6DGH2PZ.js +0 -13
  667. package/dist/slash-commands-S7MBJDQK.js +0 -83
  668. package/dist/tools-TFGJICCU.js +0 -29
  669. package/dist/verify-RWE4PPEK.js +0 -27
  670. package/dist/wiki-generate-C7IQOXSP.js +0 -469
@@ -11,7 +11,7 @@
11
11
  * everything reports the same columns.
12
12
  */
13
13
 
14
- import { existsSync, readFileSync } from "node:fs";
14
+ import { existsSync } from "node:fs";
15
15
  import { basename, join } from "node:path";
16
16
  import type { ClioSettings } from "../core/config.js";
17
17
  import { resolvePackageRoot } from "../core/package-root.js";
@@ -32,8 +32,9 @@ import {
32
32
  readHookSources,
33
33
  readPersistedHookReceipts,
34
34
  } from "../domains/middleware/index.js";
35
- import { classifyProjectPreload } from "../domains/prompts/preload.js";
35
+ import { selectProjectPreload } from "../domains/prompts/preload.js";
36
36
  import { defaultScopedResourceRoots } from "../domains/resources/common-loader.js";
37
+ import { createSafetyPolicyEngine } from "../domains/safety/policy-engine.js";
37
38
  import { ceilChars } from "../domains/session/context-accounting.js";
38
39
  import { capturedHookSourcesFor } from "../entry/extension-hook-sources.js";
39
40
 
@@ -120,9 +121,9 @@ function inspectClioMd(cwd: string, graph: CustomizationGraph): void {
120
121
  if (loaded.files.length === 0) return;
121
122
  try {
122
123
  const promptContext = renderPromptContext(cwd);
123
- const preload = classifyProjectPreload({ hasClioMd: promptContext.clioMd !== null, text: promptContext.text });
124
- for (const [index, file] of loaded.files.entries()) {
125
- const text = readFileSync(file.path, "utf8");
124
+ const preload = selectProjectPreload(promptContext, null).classification;
125
+ for (const [index, file] of promptContext.handbookSources.entries()) {
126
+ const text = file.source;
126
127
  graph.entries.push({
127
128
  category: "clio-md",
128
129
  id: basename(file.path),
@@ -130,15 +131,19 @@ function inspectClioMd(cwd: string, graph: CustomizationGraph): void {
130
131
  sourcePath: file.path,
131
132
  hash: shortHash(text),
132
133
  trust: "trusted",
133
- precedence: loaded.files.length === 1 ? "single" : "layer",
134
+ precedence: promptContext.handbookSources.length === 1 ? "single" : "layer",
134
135
  reloadClass: "next-turn",
135
136
  contextCostTokens: ceilChars(text.length),
136
137
  detail: {
137
138
  layer: index + 1,
138
- layers: loaded.files.length,
139
+ layers: promptContext.handbookSources.length,
139
140
  preload: preload.label,
140
141
  preloadChars: preload.chars,
141
142
  preloadLines: preload.lines,
143
+ preloadIncludedChars: preload.includedChars ?? 0,
144
+ preloadIncludedLines: preload.includedLines ?? 0,
145
+ preloadSourceIncludedChars: preload.sources?.[index]?.includedChars ?? 0,
146
+ preloadSourceHash: preload.sources?.[index]?.contentHash ?? "",
142
147
  ...(preload.nearLimit ? { preloadNearLimit: true } : {}),
143
148
  },
144
149
  });
@@ -367,6 +372,18 @@ function inspectResourceRoots(cwd: string, graph: CustomizationGraph): void {
367
372
  function inspectSafetyAndMemory(cwd: string, graph: CustomizationGraph): void {
368
373
  try {
369
374
  const layered = readLayeredSettings(cwd);
375
+ const metadata = createSafetyPolicyEngine({ cwd }).metadata();
376
+ graph.entries.push({
377
+ category: "safety",
378
+ id: "safety.policy",
379
+ scope: "effective",
380
+ reloadClass: "next-turn",
381
+ trust: metadata.workspaceTrustVerdict === "trusted" ? "trusted" : "untrusted",
382
+ precedence: "single",
383
+ ...(metadata.projectPolicyPath === null ? {} : { sourcePath: metadata.projectPolicyPath }),
384
+ detail: { ...metadata },
385
+ });
386
+
370
387
  graph.entries.push({
371
388
  category: "safety",
372
389
  id: "safety.autonomy",
@@ -0,0 +1,62 @@
1
+ import {
2
+ captureProjectSurface,
3
+ type ProjectTrustSurface,
4
+ recordProjectSurfaceTrust,
5
+ revokeProjectSurfaceTrust,
6
+ } from "../core/workspace-trust.js";
7
+ import { printError } from "./shared.js";
8
+
9
+ const SURFACES: ReadonlyArray<ProjectTrustSurface> = ["safety", "hooks", "settings"];
10
+
11
+ /** Review is read-only. Approval names the digest the operator reviewed, so edits cannot borrow stale consent. */
12
+ export function runConfigTrustCommand(args: ReadonlyArray<string>, cwd = process.cwd()): number {
13
+ const surface = args[0] as ProjectTrustSurface | undefined;
14
+ if (surface === undefined || !SURFACES.includes(surface)) {
15
+ printError("usage: clio-coder config trust safety|hooks|settings [--json | --hash SHA256 | --revoke]");
16
+ return 2;
17
+ }
18
+ const rest = args.slice(1);
19
+ const preview = rest.length === 0 || (rest.length === 1 && rest[0] === "--json");
20
+ const revoke = rest.length === 1 && rest[0] === "--revoke";
21
+ const approve = rest.length === 2 && rest[0] === "--hash" && /^[a-f0-9]{64}$/.test(rest[1] ?? "");
22
+ if (!preview && !revoke && !approve) {
23
+ printError("trust expects --json, --revoke, or --hash followed by the full reviewed SHA-256 digest");
24
+ return 2;
25
+ }
26
+ try {
27
+ if (revoke) {
28
+ revokeProjectSurfaceTrust(cwd, surface);
29
+ process.stdout.write(
30
+ `Project ${surface} trust revoked. Restart to reload settings and safety; project hooks stop before their next execution.\n`,
31
+ );
32
+ return 0;
33
+ }
34
+ const snapshot = captureProjectSurface(cwd, surface);
35
+ if (preview) {
36
+ // JSON escapes terminal control sequences in repository-controlled text.
37
+ process.stdout.write(`${JSON.stringify(snapshot, null, 2)}\n`);
38
+ if (rest[0] !== "--json" && snapshot.contentHash !== null && snapshot.files.some((file) => file.text !== null)) {
39
+ process.stdout.write(
40
+ `Review the captured files above. Approve exactly these bytes with:\nclio-coder config trust ${surface} --hash ${snapshot.contentHash}\n`,
41
+ );
42
+ }
43
+ return 0;
44
+ }
45
+ if (snapshot.contentHash === null || !snapshot.files.some((file) => file.text !== null)) {
46
+ printError(`no readable project ${surface} files to approve`);
47
+ return 1;
48
+ }
49
+ if (snapshot.contentHash !== rest[1]) {
50
+ printError(`project ${surface} changed since review; inspect it again before approving`);
51
+ return 1;
52
+ }
53
+ recordProjectSurfaceTrust(snapshot.workspaceRoot, surface, snapshot.contentHash);
54
+ process.stdout.write(
55
+ `Project ${surface} approved for ${snapshot.workspaceRoot} at ${snapshot.contentHash}. Restart to reload settings and safety; reload extensions to register newly approved hooks.\n`,
56
+ );
57
+ return 0;
58
+ } catch (error) {
59
+ printError(error instanceof Error ? error.message : String(error));
60
+ return 1;
61
+ }
62
+ }
package/src/cli/config.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import { buildCustomizationGraph, type CustomizationEntry } from "./config-inspect.js";
2
+ import { runConfigTrustCommand } from "./config-trust.js";
2
3
  import { printError } from "./shared.js";
3
4
 
4
5
  const HELP = `clio-coder config inspect [--json]
6
+ clio-coder config trust safety|hooks|settings [--json | --hash SHA256 | --revoke]
5
7
 
6
8
  Print the effective-customization graph: what settings, context files, rules,
7
9
  skills, prompts, agents, fleets, extensions, safety, memory, hooks, and the operator
@@ -10,6 +12,10 @@ context cost. Read-only; nothing is created.
10
12
 
11
13
  This is the "why is Clio behaving this way" surface. Parse the --json form in
12
14
  scripts instead of the table.
15
+
16
+ Trust previews show the captured project files and their digest. Approve only
17
+ the reviewed digest with --hash, or remove a surface's approval with --revoke.
18
+ Settings and safety reload on restart; project hooks also check trust before execution.
13
19
  `;
14
20
 
15
21
  function renderText(cwd: string): string {
@@ -37,6 +43,7 @@ function renderText(cwd: string): string {
37
43
  const precedence = entry.precedence ? `, ${entry.precedence}` : "";
38
44
  out.push(` ${entry.id} [${entry.scope}${precedence}, reload:${entry.reloadClass}${hash}${cost}]`);
39
45
  if (entry.sourcePath) out.push(` from ${entry.sourcePath}`);
46
+ if (entry.id === "safety.policy" && entry.detail !== undefined) out.push(` ${JSON.stringify(entry.detail)}`);
40
47
  }
41
48
  out.push("");
42
49
  }
@@ -56,6 +63,7 @@ export function runConfigCommand(args: ReadonlyArray<string> = []): number {
56
63
  }
57
64
  const positional = args.filter((arg) => !arg.startsWith("-"));
58
65
  const sub = positional[0] ?? "inspect";
66
+ if (sub === "trust") return runConfigTrustCommand(args.slice(1));
59
67
  if (sub !== "inspect") {
60
68
  printError(`unknown config subcommand: ${sub}`);
61
69
  process.stderr.write(HELP);
@@ -20,6 +20,7 @@ import {
20
20
  type WorkerPermissionMode,
21
21
  } from "../core/defaults.js";
22
22
  import { initializeClioHome } from "../core/init.js";
23
+ import { warnLegacyNaming } from "../core/naming-compat.js";
23
24
  import { resolveClioDirs } from "../core/xdg.js";
24
25
  import { getVersionInfo } from "../domains/lifecycle/version.js";
25
26
  import { openAuthStorage, targetRequiresAuth } from "../domains/providers/auth/index.js";
@@ -2113,7 +2114,7 @@ export async function runConfigureCommand(
2113
2114
  return 2;
2114
2115
  }
2115
2116
  if (runtimeId === "lmstudio-native" && runtime.id === "lmstudio") {
2116
- process.stderr.write("warning: runtime 'lmstudio-native' is deprecated; using 'lmstudio'\n");
2117
+ warnLegacyNaming(runtimeId, runtime.id);
2117
2118
  }
2118
2119
  }
2119
2120
  const hasTargetSetupFlag =
@@ -1,8 +1,10 @@
1
1
  import { execFileSync } from "node:child_process";
2
- import { mkdirSync, writeFileSync } from "node:fs";
2
+ import { createHash } from "node:crypto";
3
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
4
  import path from "node:path";
4
5
  import { CLIO_ARTIFACT_DIR } from "../core/artifact-paths.js";
5
- import { readCodewiki } from "../domains/context/codewiki/artifact.js";
6
+ import { type CodewikiCoordinatedResult, coordinateCodewikiWrite } from "../domains/context/codewiki/coordinator.js";
7
+ import type { Codewiki } from "../domains/context/codewiki/schema.js";
6
8
  import { buildArchitectureSeed, serializeArchitectureSeed } from "../domains/context/wiki/map-seed.js";
7
9
 
8
10
  const HELP = `Usage:
@@ -11,7 +13,8 @@ const HELP = `Usage:
11
13
  Write an archify architecture seed for the current repository from the codewiki
12
14
  index, without model calls. The seed is the starting spec for the archify skill:
13
15
  components are the largest directory areas, connections are collapsed import
14
- edges, and sources point at indexed files and lines.
16
+ edges. The index is reconciled with current files before mapping; sources are
17
+ pinned only when clean Git evidence matches those files.
15
18
 
16
19
  Options:
17
20
  --out <path> where to write the seed (default: ${CLIO_ARTIFACT_DIR}/maps/<repo>.architecture.json)
@@ -28,21 +31,53 @@ function gitValue(cwd: string, args: string[]): string | null {
28
31
  const out = execFileSync("git", args, { cwd, timeout: 5000, stdio: ["ignore", "pipe", "ignore"] })
29
32
  .toString("utf8")
30
33
  .trim();
31
- return out.length > 0 ? out : null;
34
+ return out;
32
35
  } catch {
33
36
  return null;
34
37
  }
35
38
  }
36
39
 
37
- /** The origin remote as an https URL and HEAD as a full sha, when git can say. */
38
- function repositoryFacts(cwd: string): { url: string; revision: string } | undefined {
39
- const remote = gitValue(cwd, ["remote", "get-url", "origin"]);
40
+ type SourceState = "clean" | "dirty" | "unknown";
41
+
42
+ /** A successful empty status means clean; unavailable Git evidence never does. */
43
+ function repositoryFacts(
44
+ cwd: string,
45
+ codewiki: Codewiki,
46
+ indexedHead: string | null,
47
+ ): { sourceState: SourceState; repository?: { url: string; revision: string } } {
40
48
  const revision = gitValue(cwd, ["rev-parse", "--verify", "HEAD"]);
41
- if (!remote || !revision) return undefined;
49
+ const status = gitValue(cwd, ["status", "--porcelain", "--untracked-files=normal"]);
50
+ if (!revision || status === null) return { sourceState: "unknown" };
51
+ if (status !== "" || revision !== indexedHead) return { sourceState: "dirty" };
52
+ // Source paths in the seed are workspace-relative. A nested workspace has
53
+ // no proven repository-relative path mapping, so cannot supply citations.
54
+ if (gitValue(cwd, ["rev-parse", "--show-prefix"]) !== "") return { sourceState: "unknown" };
55
+ const tree = gitValue(cwd, ["ls-tree", "-r", "-z", revision]);
56
+ if (tree === null) return { sourceState: "unknown" };
57
+ const blobs = new Map<string, string>();
58
+ for (const entry of tree.split("\0")) {
59
+ const match = /^100[0-7]{3} blob ([a-f0-9]{40})\t([\s\S]+)$/.exec(entry);
60
+ if (match) blobs.set(match[2] as string, match[1] as string);
61
+ }
62
+ try {
63
+ for (const file of codewiki.files) {
64
+ const contents = readFileSync(path.join(cwd, file.path));
65
+ // Verify both parser input identity and immutable Git blob identity.
66
+ // This also catches ignored/untracked inputs and assume-unchanged files
67
+ // that a successful `git status` alone cannot certify.
68
+ const indexedHash = createHash("sha256").update(contents.toString("utf8")).digest("hex").slice(0, 16);
69
+ const blob = createHash("sha1").update(`blob ${contents.length}\0`).update(contents).digest("hex");
70
+ if (indexedHash !== file.hash || blobs.get(file.path) !== blob) return { sourceState: "dirty" };
71
+ }
72
+ } catch {
73
+ return { sourceState: "unknown" };
74
+ }
75
+ const remote = gitValue(cwd, ["remote", "get-url", "origin"]);
76
+ if (!remote) return { sourceState: "clean" };
42
77
  let url = remote.endsWith(".git") ? remote.slice(0, -4) : remote;
43
78
  const ssh = /^git@([^:]+):(.+)$/.exec(url);
44
79
  if (ssh) url = `https://${ssh[1]}/${ssh[2]}`;
45
- return { url, revision };
80
+ return { sourceState: "clean", repository: { url, revision } };
46
81
  }
47
82
 
48
83
  export async function runContextMapCommand(args: string[]): Promise<number> {
@@ -72,16 +107,40 @@ export async function runContextMapCommand(args: string[]): Promise<number> {
72
107
  return 2;
73
108
  }
74
109
  const cwd = process.cwd();
75
- const codewiki = readCodewiki(cwd);
76
- if (!codewiki) {
110
+ let reconciled: CodewikiCoordinatedResult | null;
111
+ try {
112
+ reconciled = await coordinateCodewikiWrite(
113
+ cwd,
114
+ (current, workspace) =>
115
+ current
116
+ ? {
117
+ kind: "ensure",
118
+ cwd: workspace,
119
+ current,
120
+ language: current.language,
121
+ // Map evidence must reconcile actual inputs, even if a state file
122
+ // happens to carry a matching fingerprint from another operation.
123
+ previous: null,
124
+ }
125
+ : null,
126
+ { requireExisting: true },
127
+ );
128
+ } catch (error) {
129
+ process.stderr.write(
130
+ `clio-coder context map: index refresh failed: ${error instanceof Error ? error.message : String(error)}\n`,
131
+ );
132
+ return 1;
133
+ }
134
+ if (!reconciled) {
77
135
  process.stderr.write(
78
136
  "clio-coder context map: no codewiki index in .clio-coder/codewiki.json; run `clio-coder context index` first\n",
79
137
  );
80
138
  return 1;
81
139
  }
82
- const seed = buildArchitectureSeed(codewiki, {
140
+ const facts = repositoryFacts(cwd, reconciled.codewiki, reconciled.worker.fingerprint.gitHead);
141
+ const seed = buildArchitectureSeed(reconciled.codewiki, {
83
142
  title: path.basename(cwd),
84
- repository: repositoryFacts(cwd),
143
+ repository: facts.repository,
85
144
  });
86
145
  const target = out ? path.resolve(cwd, out) : defaultMapSeedPath(cwd);
87
146
  mkdirSync(path.dirname(target), { recursive: true });
@@ -91,6 +150,8 @@ export async function runContextMapCommand(args: string[]): Promise<number> {
91
150
  components: seed.components.length,
92
151
  connections: seed.connections.length,
93
152
  repository: seed.meta.repository ?? null,
153
+ index: "reconciled",
154
+ sourceState: facts.sourceState,
94
155
  };
95
156
  if (json) {
96
157
  process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
@@ -102,7 +163,7 @@ export async function runContextMapCommand(args: string[]): Promise<number> {
102
163
  ` ${payload.components} components, ${payload.connections} connections${
103
164
  payload.repository
104
165
  ? `, sources pinned at ${payload.repository.revision.slice(0, 12)}`
105
- : "; no GitHub origin at a full revision, so no source citations"
166
+ : `; no source citations (source state: ${payload.sourceState}; requires verified clean files and a GitHub origin at a full revision)`
106
167
  }`,
107
168
  payload.repository
108
169
  ? " next: validate and deliver it with the archify skill, passing --repo-root ."
@@ -1,12 +1,15 @@
1
1
  import { join, resolve } from "node:path";
2
2
  import type { BootstrapProgressEvent } from "../domains/context/index.js";
3
3
  import type { BootstrapGenerationState } from "../domains/context/state.js";
4
+ import type { RunWikiGenerateResult } from "../domains/context/wiki/generate.js";
5
+ import type { WikiMeta } from "../domains/context/wiki/meta.js";
6
+ import { MAX_PAGE_ATTEMPTS } from "../domains/context/wiki/plan-store.js";
4
7
 
5
8
  const HELP = `Usage:
6
9
  clio-coder context
7
10
  clio-coder context init [--yes] [--preview|--heuristic] [--adopt] [--propose|--apply|--rewrite]
8
11
  clio-coder context refresh [--wiki]
9
- clio-coder context wiki [--update] [--status] [--depth auto|simple|medium|detailed]
12
+ clio-coder context wiki [--update|--retry-pending] [--status] [--depth auto|simple|medium|detailed]
10
13
  [--target <id>] [--model <id>] [--thinking off|low|medium|high]
11
14
  clio-coder context reset [--all] [--yes]
12
15
  clio-coder context index [--json]
@@ -32,6 +35,36 @@ function printWikiProgress(event: BootstrapProgressEvent): void {
32
35
  process.stderr.write(`clio-coder context wiki: ${event.message}${detail}\n`);
33
36
  }
34
37
 
38
+ function wikiRecoveryLines(meta: WikiMeta | null): string[] {
39
+ const pending = meta?.plan?.pages.filter((page) => page.status !== "written") ?? [];
40
+ if (pending.length === 0) return [];
41
+ const exhausted = pending.filter((page) => page.attempts >= MAX_PAGE_ATTEMPTS).length;
42
+ const failures = pending.filter((page) => page.lastFailure);
43
+ return [
44
+ `pending: ${pending.length} page(s)${exhausted > 0 ? `; ${exhausted} exhausted ordinary writer attempts` : ""}`,
45
+ ...failures.slice(0, 8).map((page) => `${page.path}: ${page.lastFailure?.phase}: ${page.lastFailure?.detail}`),
46
+ ...(failures.length > 8 ? [`${failures.length - 8} more page failures retained in wiki metadata`] : []),
47
+ "Run `clio-coder context wiki --retry-pending` to retry pending pages once, including exhausted pages, without replanning.",
48
+ ];
49
+ }
50
+
51
+ function printWikiOutcome(prefix: string, result: RunWikiGenerateResult, meta: WikiMeta | null): void {
52
+ const pending = result.pending ?? meta?.plan?.pages.filter((page) => page.status !== "written").length ?? 0;
53
+ const complete = meta?.plan
54
+ ? meta.plan.pages.filter((page) => page.status === "written").length
55
+ : (meta?.generation?.pagesWritten ?? Math.max(0, result.pages - pending));
56
+ const published = `${result.pages} published page${result.pages === 1 ? "" : "s"}`;
57
+ const progress = `${complete} complete, ${pending} pending`;
58
+ const outcome = pending > 0 ? "incomplete" : result.status === "noop" ? "unchanged" : "generated";
59
+ process.stdout.write(`${prefix}: ${outcome} (${published}; ${progress})\n`);
60
+ if (pending > 0) {
61
+ const recovery = wikiRecoveryLines(meta);
62
+ process.stdout.write(
63
+ `${recovery.length > 0 ? recovery.join("\n") : "Run `clio-coder context wiki --update` to continue pending pages."}\n`,
64
+ );
65
+ }
66
+ }
67
+
35
68
  function compactMetric(value: number, suffix: string): string {
36
69
  if (value < 1000) return `${value}${suffix}`;
37
70
  return `${(value / 1000).toFixed(1)}k${suffix}`;
@@ -82,10 +115,7 @@ async function printContextStatus(): Promise<number> {
82
115
  : "ok";
83
116
 
84
117
  const prompt = context.renderPromptContext(cwd);
85
- const preloadClass = preload.classifyProjectPreload({
86
- hasClioMd: prompt.clioMd !== null,
87
- text: prompt.text,
88
- });
118
+ const preloadClass = preload.selectProjectPreload(prompt, null).classification;
89
119
 
90
120
  const codewiki = context.readCodewiki(cwd);
91
121
  const codewikiCount = codewiki ? context.codewikiEntries(codewiki).length : 0;
@@ -134,7 +164,7 @@ async function runRefreshCommand(args: string[]): Promise<number> {
134
164
  return 2;
135
165
  }
136
166
  try {
137
- const { runContextRefresh } = await import("../domains/context/index.js");
167
+ const { runContextRefresh, readWikiMeta } = await import("../domains/context/index.js");
138
168
  const wikiEntry = updateWiki ? await import("./wiki-generate.js") : null;
139
169
  const result = await runContextRefresh({
140
170
  cwd: process.cwd(),
@@ -155,11 +185,7 @@ async function runRefreshCommand(args: string[]): Promise<number> {
155
185
  );
156
186
  return 1;
157
187
  }
158
- process.stdout.write(
159
- result.wiki.status === "noop"
160
- ? `clio-coder context refresh: wiki unchanged (${result.wiki.pages} page${result.wiki.pages === 1 ? "" : "s"})\n`
161
- : `clio-coder context refresh: wiki updated (${result.wiki.pages} page${result.wiki.pages === 1 ? "" : "s"})\n`,
162
- );
188
+ printWikiOutcome("clio-coder context refresh: wiki", result.wiki, readWikiMeta(process.cwd()));
163
189
  }
164
190
  return 0;
165
191
  } catch (err) {
@@ -189,10 +215,11 @@ async function runWikiStatusCommand(): Promise<number> {
189
215
  `depth: ${depth} (requested ${requestedDepth}; ${sourceFiles} source files; ` +
190
216
  `${pagesWritten}/${pagesPlanned} planned pages written)`,
191
217
  );
192
- if (pagesWritten < pagesPlanned) {
218
+ if (pagesWritten < pagesPlanned && !meta.plan) {
193
219
  lines.push(`pending: ${pagesPlanned - pagesWritten} page(s); run \`clio-coder context wiki --update\` to finish`);
194
220
  }
195
221
  }
222
+ lines.push(...wikiRecoveryLines(meta));
196
223
  if (currentHead !== meta.gitHead) {
197
224
  lines.push(`staleness: gitHead differs from current HEAD (${currentHead ?? "none"})`);
198
225
  }
@@ -215,6 +242,7 @@ function isThinkingLevel(value: unknown): value is WikiCliThinking {
215
242
 
216
243
  async function runWikiCommand(args: string[]): Promise<number> {
217
244
  let forceUpdate = false;
245
+ let retryPending = false;
218
246
  let status = false;
219
247
  let depth: WikiCliDepth = "auto";
220
248
  let target: string | undefined;
@@ -230,6 +258,10 @@ async function runWikiCommand(args: string[]): Promise<number> {
230
258
  forceUpdate = true;
231
259
  continue;
232
260
  }
261
+ if (arg === "--retry-pending") {
262
+ retryPending = true;
263
+ continue;
264
+ }
233
265
  if (arg === "--status") {
234
266
  status = true;
235
267
  continue;
@@ -277,6 +309,7 @@ async function runWikiCommand(args: string[]): Promise<number> {
277
309
  const result = await context.runWikiGenerate({
278
310
  cwd: process.cwd(),
279
311
  ...(forceUpdate ? { mode: "update" as const } : {}),
312
+ ...(retryPending ? { retryPending: true } : {}),
280
313
  depth,
281
314
  model: await resolveDocumenterModelId(route),
282
315
  generate: modelWikiGenerate({ route }),
@@ -286,11 +319,7 @@ async function runWikiCommand(args: string[]): Promise<number> {
286
319
  process.stderr.write(`clio-coder context wiki failed: ${(result.problems ?? ["unknown failure"]).join("; ")}\n`);
287
320
  return 1;
288
321
  }
289
- process.stdout.write(
290
- result.status === "noop"
291
- ? `clio-coder context wiki: unchanged (${result.pages} page${result.pages === 1 ? "" : "s"})\n`
292
- : `clio-coder context wiki: generated ${result.pages} page${result.pages === 1 ? "" : "s"}\n`,
293
- );
322
+ printWikiOutcome("clio-coder context wiki", result, context.readWikiMeta(process.cwd()));
294
323
  return 0;
295
324
  } catch (err) {
296
325
  process.stderr.write(`clio-coder context wiki failed: ${err instanceof Error ? err.message : String(err)}\n`);
@@ -2,6 +2,7 @@ import { lstatSync, readdirSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { resolveClioDirs } from "../core/xdg.js";
4
4
  import type { DoctorFinding } from "../domains/lifecycle/doctor.js";
5
+ import { formatBytes } from "./lifecycle-presenter.js";
5
6
 
6
7
  interface MeasuredEntry {
7
8
  bytes: number;
@@ -68,15 +69,3 @@ function measureEntry(path: string): MeasuredEntry {
68
69
  }
69
70
  return { bytes, error: null };
70
71
  }
71
-
72
- function formatBytes(bytes: number): string {
73
- if (bytes < 1024) return `${bytes} B`;
74
- const units = ["KiB", "MiB", "GiB", "TiB"];
75
- let value = bytes;
76
- let unit = -1;
77
- do {
78
- value /= 1024;
79
- unit += 1;
80
- } while (value >= 1024 && unit < units.length - 1);
81
- return `${value.toFixed(value >= 10 ? 1 : 2)} ${units[unit]}`;
82
- }
@@ -0,0 +1,28 @@
1
+ import type { DoctorFinding } from "../domains/lifecycle/doctor.js";
2
+ import { describeValidationContract, loadValidationContract } from "../domains/safety/validation-contract.js";
3
+
4
+ /**
5
+ * One row for the workspace's scientific validation contract: absent, parsed
6
+ * (and so raising the rigor default to high), Markdown-only advisory, or
7
+ * invalid with the parse fault. Reads the workspace root only; creates nothing.
8
+ */
9
+ export function validationContractFinding(workspaceRoot = process.cwd()): DoctorFinding {
10
+ const name = "validation contract";
11
+ const loaded = loadValidationContract(workspaceRoot);
12
+ if (!loaded.ok) {
13
+ return { ok: false, name, detail: `invalid: ${describeValidationContract(loaded)}; rigor default stays normal` };
14
+ }
15
+ if (loaded.contract === null) {
16
+ if ("advisory" in loaded) {
17
+ return { ok: true, name, level: "warn", detail: `markdown-only: ${describeValidationContract(loaded)}` };
18
+ }
19
+ return { ok: true, name, detail: "none at the workspace root; rigor default normal" };
20
+ }
21
+ const artifacts = loaded.contract.artifacts?.length ?? 0;
22
+ const validators = loaded.contract.validators?.length ?? 0;
23
+ return {
24
+ ok: true,
25
+ name,
26
+ detail: `valid: ${loaded.path} (version ${loaded.contract.version}, ${artifacts} artifact(s), ${validators} validator(s)); rigor default high`,
27
+ };
28
+ }
package/src/cli/doctor.ts CHANGED
@@ -12,6 +12,7 @@ import { namingFootprintFindings } from "./doctor-naming.js";
12
12
  import { panesFindings } from "./doctor-panes.js";
13
13
  import { stateStorageFinding } from "./doctor-state-size.js";
14
14
  import { toolchainFindings } from "./doctor-toolchain.js";
15
+ import { validationContractFinding } from "./doctor-validation-contract.js";
15
16
  import { printError } from "./shared.js";
16
17
 
17
18
  const HELP = `clio-coder doctor [--fix] [--json]
@@ -72,6 +73,9 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
72
73
  // has already agreed not to build on an untouched home.
73
74
  const paneChecks = untouched ? [] : await panesFindings();
74
75
  const namingChecks = namingFootprintFindings({ fix, yaziEnabled: filesEnabled });
76
+ // The validation contract lives in the workspace, not the home, so it is
77
+ // checked on every run: a broken contract is why rigor stayed normal.
78
+ const contractChecks = [validationContractFinding()];
75
79
  const all = [
76
80
  ...findings,
77
81
  ...storageChecks,
@@ -82,6 +86,7 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
82
86
  ...toolChecks,
83
87
  ...paneChecks,
84
88
  ...namingChecks,
89
+ ...contractChecks,
85
90
  ];
86
91
  const ok = all.every((f) => f.ok);
87
92
  if (json) {
package/src/cli/eval.ts CHANGED
@@ -1,7 +1,9 @@
1
+ import { readFile } from "node:fs/promises";
1
2
  import { resolve } from "node:path";
2
3
  import { InvalidIdError } from "../core/safe-id.js";
4
+ import { shellQuote } from "../core/shell-quote.js";
3
5
  import { clioDataDir } from "../core/xdg.js";
4
- import { loadEvalArtifactV4, writeEvalArtifactV4 } from "../domains/eval/artifacts/store.js";
6
+ import { loadEvalArtifactV4, parseEvalArtifactV4, writeEvalArtifactV4 } from "../domains/eval/artifacts/store.js";
5
7
  import { compareEvalArtifactsV4 } from "../domains/eval/compare/compare.js";
6
8
  import { evaluateGate, renderGateFailure, renderInformationalBudget } from "../domains/eval/compare/gates.js";
7
9
  import { loadThresholds } from "../domains/eval/compare/thresholds.js";
@@ -50,6 +52,7 @@ interface ParsedEvalArgs {
50
52
  out?: string;
51
53
  clioEntry?: string;
52
54
  evalId?: string;
55
+ artifact?: string;
53
56
  format: EvalReportFormat;
54
57
  compareIds: string[];
55
58
  metric?: string;
@@ -133,6 +136,11 @@ function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
133
136
  throw new Error(`unknown eval run argument: ${arg}`);
134
137
  }
135
138
  if (parsed.command === "report") {
139
+ if (arg === "--artifact") {
140
+ parsed.artifact = requiredValue(args, index, "--artifact");
141
+ index += 1;
142
+ continue;
143
+ }
136
144
  if (arg === "--format") {
137
145
  parsed.format = reportFormat(requiredValue(args, index, "--format"));
138
146
  index += 1;
@@ -189,7 +197,9 @@ function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
189
197
  if (parsed.command === "run" && (parsed.suite === undefined) === (parsed.taskFile === undefined)) {
190
198
  throw new Error("run requires exactly one of --suite or --task-file");
191
199
  }
192
- if (parsed.command === "report" && parsed.evalId === undefined) throw new Error("report requires an eval id");
200
+ if (parsed.command === "report" && (parsed.evalId === undefined) === (parsed.artifact === undefined)) {
201
+ throw new Error("report requires exactly one of an eval id or --artifact <path>");
202
+ }
193
203
  if (parsed.command === "compare" && parsed.compareIds.length !== 2) {
194
204
  throw new Error("compare requires <baselineEvalId> <candidateEvalId>");
195
205
  }
@@ -259,6 +269,7 @@ async function runEvalRun(parsed: ParsedEvalArgs): Promise<number> {
259
269
  );
260
270
  const artifactPath = await writeEvalArtifactV4(clioDataDir(), artifact, parsed.out);
261
271
  process.stdout.write(`${renderEvalTextReportV4(artifact)}artifact: ${artifactPath}\n`);
272
+ process.stdout.write(`report: clio-coder eval report --artifact ${shellQuote(resolve(artifactPath))} --format md\n`);
262
273
  // A suite that declares thresholds is gated by them here, on the artifact
263
274
  // it just produced. Declaring a gate that only a later `eval gate`
264
275
  // invocation enforces means the run that broke it still exited zero.
@@ -280,7 +291,10 @@ async function runEvalRun(parsed: ParsedEvalArgs): Promise<number> {
280
291
  async function runEvalReportCommand(parsed: ParsedEvalArgs): Promise<number> {
281
292
  try {
282
293
  const dataDir = clioDataDir();
283
- const artifact = await loadEvalArtifactV4(dataDir, parsed.evalId ?? "");
294
+ const artifact =
295
+ parsed.artifact === undefined
296
+ ? await loadEvalArtifactV4(dataDir, parsed.evalId ?? "")
297
+ : parseEvalArtifactV4(JSON.parse(await readFile(parsed.artifact, "utf8")) as unknown, parsed.artifact);
284
298
  process.stdout.write(renderArtifactReport(artifact, parsed.format, dataDir));
285
299
  return 0;
286
300
  } catch (error) {