@iowarp/clio-coder 0.4.4 → 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 (555) hide show
  1. package/CHANGELOG.md +92 -2
  2. package/CONTRIBUTING.md +25 -15
  3. package/README.md +340 -27
  4. package/dist/{acp-WNAYYF4F.js → acp-H3CU2HBQ.js} +25 -24
  5. package/dist/{agents-3OKXHLOI.js → agents-IXQQZ7BD.js} +77 -77
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-VKNNMGPU.js → auth-R7KYF7N3.js} +38 -38
  8. package/dist/builtins-CRFDQUVP.js +22 -0
  9. package/dist/{chunk-TQAHXW6Y.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-JCI2ROMZ.js → chunk-3T4DXWP6.js} +7 -7
  15. package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
  16. package/dist/{chunk-6Q3CYFD3.js → chunk-4SVIVOMC.js} +184 -33
  17. package/dist/{chunk-W54I7H25.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-I2DWJ4GM.js → chunk-5DDOTTG4.js} +54 -42
  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-3ODX73FK.js → chunk-5VTJP36Q.js} +4 -4
  24. package/dist/{chunk-54X7T7DK.js → chunk-5ZMXGW7P.js} +79 -7
  25. package/dist/chunk-5ZSZEYJK.js +119 -0
  26. package/dist/{chunk-IXIY2H4R.js → chunk-633EXGZA.js} +5 -5
  27. package/dist/{chunk-CUSRQKPU.js → chunk-6CDNRHWH.js} +299 -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-JEIYHLOR.js → chunk-6SYEGZI3.js} +12 -12
  31. package/dist/{chunk-DQOVN6KV.js → chunk-6YA46L5A.js} +4 -4
  32. package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
  33. package/dist/{chunk-6PAZTBPA.js → chunk-7HBHHVCK.js} +15 -6
  34. package/dist/{chunk-25QBEXRS.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-3UUXNFEX.js → chunk-7YJWEF2L.js} +61 -34
  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-I5FWO7L5.js → chunk-B6UM3OZC.js} +2 -2
  43. package/dist/{chunk-2CU2H6KE.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-QZWQA4DE.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-YNFKXPEC.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-XULDXHTN.js → chunk-DRD2A54W.js} +102 -50
  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-FEAXX7B6.js → chunk-EHCPSZJF.js} +4 -4
  65. package/dist/{chunk-4NSRCOYP.js → chunk-EHOSNVVM.js} +3 -2
  66. package/dist/{chunk-7UGL4MB5.js → chunk-EQEJJ53P.js} +10 -10
  67. package/dist/{chunk-GWZNEVM2.js → chunk-EWD5P3GK.js} +9 -9
  68. package/dist/{chunk-6UINWWS6.js → chunk-F34AR6O3.js} +14 -14
  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-Y55JBDO5.js → chunk-FSTIBAGM.js} +38 -23
  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-TOIVGRUX.js → chunk-GJ24ODAX.js} +5 -5
  76. package/dist/{chunk-QUFRYSWI.js → chunk-GNQRWTMY.js} +129 -48
  77. package/dist/{chunk-5ICU3EUH.js → chunk-GVYWZNRK.js} +5 -5
  78. package/dist/{chunk-GX5WYQO4.js → chunk-GXCCHKN6.js} +6 -6
  79. package/dist/{chunk-K6T2ZAMZ.js → chunk-HGSLRG33.js} +6 -6
  80. package/dist/{chunk-26QSH3EJ.js → chunk-HHVJNVUJ.js} +5 -5
  81. package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
  82. package/dist/{chunk-JT2RFCC5.js → chunk-HR3HPQ76.js} +5 -5
  83. package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
  84. package/dist/{chunk-ELWDPP3Y.js → chunk-I7VLWRK2.js} +8 -8
  85. package/dist/{chunk-6OSVSQL5.js → chunk-ICO4TQ2F.js} +7 -5
  86. package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
  87. package/dist/{chunk-72YIHOZQ.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-AUPNRN7C.js → chunk-K2HL3GBL.js} +4 -4
  92. package/dist/{chunk-2ASED4PZ.js → chunk-K6RDB7IA.js} +26 -26
  93. package/dist/{chunk-FFUPXJC4.js → chunk-KDWLXVMN.js} +23 -24
  94. package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
  95. package/dist/{chunk-6QOTUPRG.js → chunk-KF6GFW6O.js} +66 -18
  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-3UNOLWNZ.js → chunk-KTFSFCVN.js} +20 -9
  100. package/dist/{chunk-57XXR6DR.js → chunk-KYKNBD4Y.js} +24 -23
  101. package/dist/{chunk-IRXAATOX.js → chunk-L4N3DWNW.js} +3 -3
  102. package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
  103. package/dist/{chunk-U6TMQNSI.js → chunk-LTR5QCLS.js} +4 -4
  104. package/dist/chunk-LUL5Z66S.js +221 -0
  105. package/dist/{chunk-ELZVTCGV.js → chunk-LVFANMOH.js} +151 -327
  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-NXYCB2VD.js → chunk-M6TAYK66.js} +6 -6
  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-DXKJURES.js → chunk-MDU3C27C.js} +10 -7
  113. package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
  114. package/dist/{chunk-3GY4F45V.js → chunk-NC4KV7EL.js} +6 -6
  115. package/dist/{chunk-LLXSDWXS.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-RZDWV63N.js → chunk-NY6IWDVU.js} +6 -6
  119. package/dist/{chunk-XXYSBZIQ.js → chunk-O2RQ7LCK.js} +4 -4
  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-NXIMQY5W.js → chunk-ODUTYZIU.js} +5 -5
  123. package/dist/{chunk-LTIKRKFL.js → chunk-ONRTXOZY.js} +4 -4
  124. package/dist/{chunk-KFV5L5SK.js → chunk-OQM5IVJY.js} +118 -232
  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-RXTN6AKH.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-2DSOYNFC.js → chunk-R6MAYTMS.js} +7 -7
  135. package/dist/{chunk-JQLNNIKT.js → chunk-R6MICQYU.js} +6 -6
  136. package/dist/{chunk-NAI6ZFCY.js → chunk-RLTT5GVY.js} +122 -11
  137. package/dist/{chunk-DT3LWJOB.js → chunk-RXIOCVBZ.js} +24 -6
  138. package/dist/{chunk-N56KALIC.js → chunk-S32UQ5GL.js} +61 -34
  139. package/dist/{chunk-UEPWCCTY.js → chunk-SBZX6ARC.js} +12 -12
  140. package/dist/chunk-SD7SHNDW.js +15 -0
  141. package/dist/{chunk-NRO2BJRH.js → chunk-SDWNDICN.js} +10235 -4015
  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-OMQNJVKW.js → chunk-SRZOW5L2.js} +43 -13
  146. package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
  147. package/dist/{chunk-V76WTFTW.js → chunk-T52TPHYC.js} +6 -6
  148. package/dist/{chunk-I7XBWTYH.js → chunk-T53XI6I7.js} +5 -5
  149. package/dist/{chunk-2ZSONWVL.js → chunk-T7FDXNRU.js} +13 -13
  150. package/dist/{chunk-JSD46VO2.js → chunk-TEG3RYVZ.js} +43 -36
  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-75W7L2E2.js → chunk-TZ7MFRG4.js} +1041 -162
  154. package/dist/{chunk-36CT5VVL.js → chunk-U2JOLB7O.js} +126 -77
  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-YECAMM3D.js → chunk-U7H5WRG5.js} +5 -5
  158. package/dist/{chunk-RQCKCSRL.js → chunk-U7VQ4NI4.js} +22 -22
  159. package/dist/{chunk-5TUB6SLS.js → chunk-UFYNOQK4.js} +7 -7
  160. package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
  161. package/dist/{chunk-USR47QNF.js → chunk-UL36QJX6.js} +14 -14
  162. package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
  163. package/dist/{chunk-RAY4OVGZ.js → chunk-URBGEOH3.js} +5 -5
  164. package/dist/chunk-USZA7GWL.js +341 -0
  165. package/dist/{chunk-YD5GIKET.js → chunk-UTUNT5QL.js} +48 -579
  166. package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
  167. package/dist/{chunk-23L32XTI.js → chunk-UXAC2FX4.js} +68 -39
  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-EXLD33WO.js → chunk-VLPTKCKT.js} +24 -9
  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-S6PYF2XF.js → chunk-WFKDPU7U.js} +4 -4
  176. package/dist/{chunk-BJVFZO5U.js → chunk-WJIMKGD6.js} +7 -7
  177. package/dist/{chunk-5636DCO5.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-4M6Z5QVF.js → chunk-XXBQKW32.js} +11 -11
  182. package/dist/{chunk-OEJSLEPW.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-Q4WO54TA.js → chunk-ZMZQEBKI.js} +14 -14
  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 +44 -44
  190. package/dist/clio-5I2IBFYL.js +26 -0
  191. package/dist/{code-nav-IJR2DBPR.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-2TGAI2RC.js → components-TNIKXCBH.js} +13 -13
  195. package/dist/{config-IUA6OYNS.js → config-Y2JDJ3JJ.js} +210 -124
  196. package/dist/configure-SML6UBZ5.js +55 -0
  197. package/dist/{context-4MPR7WKB.js → context-P5YSEO55.js} +125 -121
  198. package/dist/{context-2DKHWH2T.js → context-QQ53HSGJ.js} +91 -62
  199. package/dist/{context-BOYF5EJM.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-3I3FYX6Y.js → context-working-set-CNLSQN5K.js} +31 -31
  204. package/dist/detail-5572VLBO.js +114 -0
  205. package/dist/{dispatch-runner-RJ5I2F2O.js → dispatch-runner-FRHD6P2O.js} +191 -116
  206. package/dist/{docs-SPOV3BAN.js → docs-BL7ROUFN.js} +4 -4
  207. package/dist/{doctor-DKICC2SN.js → doctor-N3LCM2LG.js} +58 -58
  208. package/dist/{eval-OQOQUDHK.js → eval-BUU3ZOUZ.js} +473 -168
  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-4DQ25GUQ.js → evidence-SQ5DNFEN.js} +110 -94
  212. package/dist/{evolve-GSS52E5J.js → evolve-IJNUFZDS.js} +107 -91
  213. package/dist/{extensions-G7MFLYHT.js → extensions-YVRHX6ZI.js} +16 -16
  214. package/dist/{fleet-Q37YHHAQ.js → fleet-ZNNVSYFO.js} +147 -147
  215. package/dist/{fleet-commands-G7E4N7SM.js → fleet-commands-5YE7NPJL.js} +27 -26
  216. package/dist/{fleet-decisions-O7M6QBA2.js → fleet-decisions-3SBSCTCW.js} +16 -15
  217. package/dist/{fleet-graph-TOUBW6OW.js → fleet-graph-6HHPWF5T.js} +39 -38
  218. package/dist/{fleet-inspect-SW33JJNI.js → fleet-inspect-JEYMGCGC.js} +107 -91
  219. package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
  220. package/dist/{fleet-preflight-CV2655TW.js → fleet-preflight-QRSHIIDE.js} +10 -9
  221. package/dist/{fleet-validate-KESZX2YH.js → fleet-validate-4PM4GDDL.js} +46 -42
  222. package/dist/{fleet-verify-UQPMTVE3.js → fleet-verify-NJDTHTO3.js} +105 -89
  223. package/dist/fleet-view-UP2BWQQY.js +117 -0
  224. package/dist/{init-PXEXQSBF.js → init-S3GZQ5ZF.js} +123 -123
  225. package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
  226. package/dist/{interop-ZG5T62U3.js → interop-YOTGXFJM.js} +25 -25
  227. package/dist/inventory-K2OZ36YJ.js +117 -0
  228. package/dist/{library-B2W4N74O.js → library-GJI6W6OK.js} +45 -44
  229. package/dist/{memory-YCANYS5A.js → memory-OQOXQGYD.js} +107 -93
  230. package/dist/{models-GERTU3YI.js → models-3IK2Y5WE.js} +63 -62
  231. package/dist/{monitor-CPNIUULB.js → monitor-FTJLTKCQ.js} +136 -107
  232. package/dist/{orchestrator-J4BSH4WQ.js → orchestrator-N47O7SFD.js} +1159 -697
  233. package/dist/{panes-BOHAEGYC.js → panes-7BTYH3XQ.js} +8 -8
  234. package/dist/{panes-NXSLDQZ2.js → panes-WPOMEMRH.js} +22 -22
  235. package/dist/{paths-VSUWNC22.js → paths-J3KN7UAO.js} +12 -12
  236. package/dist/preload-65U34NG6.js +115 -0
  237. package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
  238. package/dist/{reset-TNWTB5LU.js → reset-MUVQDLNL.js} +20 -20
  239. package/dist/{resources-4PXNMD5G.js → resources-LM76COAO.js} +41 -40
  240. package/dist/{run-D6XJ34CN.js → run-3VFZQ33N.js} +162 -156
  241. package/dist/{share-2NWMJJEE.js → share-4JUB4BL7.js} +43 -42
  242. package/dist/{skills-KR7WON5G.js → skills-S36AAJHU.js} +47 -46
  243. package/dist/{skills-eval-O2ZNOLDS.js → skills-eval-G6T57L7M.js} +127 -107
  244. package/dist/{skills-inventory-ZZOUBK7O.js → skills-inventory-WLM46PJH.js} +41 -40
  245. package/dist/slash-commands-GBARG3Y7.js +91 -0
  246. package/dist/{steer-XA25PSCS.js → steer-S7D7IKPU.js} +7 -7
  247. package/dist/{support-7EMVWYG2.js → support-5VAEC32W.js} +14 -14
  248. package/dist/{targets-OMH2XCSN.js → targets-N5REUETU.js} +145 -94
  249. package/dist/tasks-6BVY5YZF.js +36 -0
  250. package/dist/{terminal-lease-C2J3JYRE.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-HALS6BLF.js → uninstall-FXYMFFRT.js} +17 -17
  256. package/dist/{upgrade-MS72RJEP.js → upgrade-4HD5HAIV.js} +40 -39
  257. package/dist/{usage-NHG6MCJM.js → usage-4GWM2WWP.js} +136 -105
  258. package/dist/{verifiers-7AUNVXDY.js → verifiers-GSKWKWVG.js} +28 -27
  259. package/dist/verify-3AS3ULCY.js +30 -0
  260. package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
  261. package/dist/{web-fetch-V4FKSDAV.js → web-fetch-MQN4FH3X.js} +169 -18
  262. package/dist/wiki-generate-7BV7XWIY.js +614 -0
  263. package/dist/{with-panes-BDQEWBRT.js → with-panes-OFTNAR4Y.js} +34 -20
  264. package/dist/worker/entry.js +99 -88
  265. package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
  266. package/docs/README.md +7 -6
  267. package/docs/architecture/acp.md +10 -0
  268. package/docs/architecture/architecture.md +5 -5
  269. package/docs/architecture/context-engine.md +44 -59
  270. package/docs/architecture/context-working-set.md +7 -9
  271. package/docs/architecture/dispatch-architecture-rationale.md +1 -1
  272. package/docs/architecture/evidence-and-memory.md +10 -0
  273. package/docs/architecture/pi-boundary.md +37 -7
  274. package/docs/architecture/prompt-envelope-and-tools.md +7 -7
  275. package/docs/architecture/session-lifecycle.md +4 -4
  276. package/docs/architecture/worker-dispatch-mechanics.md +4 -0
  277. package/docs/guide/commands-and-modes.md +49 -36
  278. package/docs/guide/configuration-and-targets.md +7 -2
  279. package/docs/guide/configuration-reference.md +13 -3
  280. package/docs/guide/environment-variables.md +6 -2
  281. package/docs/guide/fleet-dispatch.md +12 -0
  282. package/docs/guide/installation-and-lifecycle.md +35 -9
  283. package/docs/guide/proactive-memory.md +1 -1
  284. package/docs/guide/skills-marketplace.md +11 -3
  285. package/docs/guide/tool-usage.md +9 -2
  286. package/docs/process/development-pipeline.md +10 -10
  287. package/docs/process/documentation-guide.md +2 -2
  288. package/docs/process/eval-runner.md +15 -0
  289. package/docs/process/evals-internal.md +1 -1
  290. package/docs/process/release-cut-checklist.md +6 -6
  291. package/evals/README.md +4 -0
  292. package/evals/behavioral-corpus-grader.mjs +147 -14
  293. package/evals/behavioral-model-negative-control.yaml +1 -0
  294. package/evals/behavioral-model.yaml +266 -1
  295. package/evals/fixtures/docs-retrieval.json +102 -0
  296. package/evals/fixtures/scalar-decision.json +17 -0
  297. package/evals/fixtures/scout-citation-pipeline.json +55 -0
  298. package/evals/fixtures/source-explanation.json +74 -0
  299. package/evals/fixtures/tool-arguments.json +18 -0
  300. package/evals/fixtures/tool-surface/read.txt +4 -0
  301. package/evals/fixtures/tool-surface/subdir/keep.txt +1 -0
  302. package/evals/no-edit-memory-grader.mjs +149 -0
  303. package/evals/scalar-decision-grader.py +41 -0
  304. package/evals/scalar-decision-machinery.ts +145 -0
  305. package/evals/source-explanation-grader.mjs +118 -0
  306. package/evals/tool-surface-grader.mjs +53 -0
  307. package/evals/tool-surface-model.yaml +274 -0
  308. package/package.json +14 -14
  309. package/skills/README.md +6 -6
  310. package/skills/registry.yaml +1 -1
  311. package/skills/skill-marketplace.json +1 -1
  312. package/src/cli/bootstrap-generate.ts +6 -0
  313. package/src/cli/config-inspect.ts +24 -7
  314. package/src/cli/config-trust.ts +62 -0
  315. package/src/cli/config.ts +8 -0
  316. package/src/cli/context-map.ts +75 -14
  317. package/src/cli/context.ts +46 -17
  318. package/src/cli/eval.ts +17 -3
  319. package/src/cli/modes/print.ts +32 -4
  320. package/src/cli/run.ts +16 -14
  321. package/src/cli/skills-eval.ts +10 -8
  322. package/src/cli/steer-channel.ts +31 -18
  323. package/src/cli/targets.ts +83 -31
  324. package/src/cli/tasks.ts +10 -1
  325. package/src/cli/upgrade.ts +9 -6
  326. package/src/cli/usage.ts +24 -0
  327. package/src/cli/wiki-generate.ts +239 -96
  328. package/src/core/bash-exec.ts +43 -15
  329. package/src/core/bus-events.ts +15 -0
  330. package/src/core/config.ts +33 -14
  331. package/src/core/defaults.ts +5 -4
  332. package/src/core/file-references.ts +11 -1
  333. package/src/core/incomplete-installation.ts +3 -1
  334. package/src/core/settings-layers.ts +21 -5
  335. package/src/core/termination.ts +26 -9
  336. package/src/core/untrusted-content.ts +16 -0
  337. package/src/core/workspace-trust.ts +179 -0
  338. package/src/domains/agents/builtins/coder.md +4 -2
  339. package/src/domains/agents/builtins/context-bootstrap.md +3 -1
  340. package/src/domains/agents/builtins/documenter.md +7 -4
  341. package/src/domains/agents/builtins/researcher.md +1 -0
  342. package/src/domains/agents/builtins/scout.md +7 -1
  343. package/src/domains/agents/result-contract.ts +199 -26
  344. package/src/domains/context/bootstrap-prompt.ts +11 -9
  345. package/src/domains/context/bootstrap.ts +74 -39
  346. package/src/domains/context/clio-md.ts +88 -26
  347. package/src/domains/context/codewiki/build-operation.ts +121 -0
  348. package/src/domains/context/codewiki/build-worker-protocol.ts +37 -3
  349. package/src/domains/context/codewiki/build-worker.ts +3 -35
  350. package/src/domains/context/codewiki/coordinator.ts +36 -6
  351. package/src/domains/context/codewiki/indexer.ts +59 -19
  352. package/src/domains/context/contract.ts +6 -2
  353. package/src/domains/context/extension.ts +72 -10
  354. package/src/domains/context/fingerprint.ts +39 -34
  355. package/src/domains/context/index.ts +7 -1
  356. package/src/domains/context/prompt-context.ts +55 -14
  357. package/src/domains/context/refresh.ts +9 -57
  358. package/src/domains/context/wiki/assemble.ts +14 -10
  359. package/src/domains/context/wiki/evidence.ts +209 -0
  360. package/src/domains/context/wiki/generate.ts +201 -67
  361. package/src/domains/context/wiki/meta.ts +10 -2
  362. package/src/domains/context/wiki/plan-store.ts +70 -14
  363. package/src/domains/context/wiki/plan.ts +71 -14
  364. package/src/domains/context/wiki/prompts.ts +42 -1
  365. package/src/domains/context/wiki/source-content.ts +106 -0
  366. package/src/domains/context/wiki/staleness.ts +33 -22
  367. package/src/domains/context/working-set/contract.ts +8 -2
  368. package/src/domains/context/working-set/engine.ts +17 -4
  369. package/src/domains/context/working-set/fold.ts +15 -2
  370. package/src/domains/context/working-set/marker.ts +2 -1
  371. package/src/domains/context/working-set/project.ts +18 -7
  372. package/src/domains/context/working-set/recall.ts +82 -56
  373. package/src/domains/dispatch/active-route-planner.ts +6 -3
  374. package/src/domains/dispatch/admission-queue.ts +19 -7
  375. package/src/domains/dispatch/admission.ts +3 -3
  376. package/src/domains/dispatch/budget-envelope.ts +47 -82
  377. package/src/domains/dispatch/capacity-lease.ts +57 -19
  378. package/src/domains/dispatch/contract.ts +10 -2
  379. package/src/domains/dispatch/event-pump.ts +28 -7
  380. package/src/domains/dispatch/execution-role.ts +49 -2
  381. package/src/domains/dispatch/execution-scheduler.ts +2 -0
  382. package/src/domains/dispatch/extension.ts +190 -105
  383. package/src/domains/dispatch/fleet-run.ts +20 -0
  384. package/src/domains/dispatch/gate-role-prompts.ts +4 -2
  385. package/src/domains/dispatch/parallel-writers.ts +34 -0
  386. package/src/domains/dispatch/reservation-store.ts +8 -34
  387. package/src/domains/dispatch/route-approval.ts +3 -3
  388. package/src/domains/dispatch/route-observer.ts +4 -2
  389. package/src/domains/dispatch/route-quality.ts +6 -1
  390. package/src/domains/dispatch/types.ts +4 -3
  391. package/src/domains/dispatch/worker-spawn.ts +58 -21
  392. package/src/domains/dispatch/workspace-checkpoint.ts +57 -0
  393. package/src/domains/eval/compare/behavioral.ts +81 -14
  394. package/src/domains/eval/compare/compare.ts +15 -5
  395. package/src/domains/eval/compare/envelope.ts +12 -5
  396. package/src/domains/eval/metrics/context.ts +24 -1
  397. package/src/domains/eval/metrics/tracked.ts +4 -28
  398. package/src/domains/eval/reports/comparison.ts +9 -9
  399. package/src/domains/eval/runners/clio-run.ts +5 -1
  400. package/src/domains/eval/schema/suite.ts +2 -0
  401. package/src/domains/eval/schema/validate.ts +1 -0
  402. package/src/domains/eval/suites/run.ts +189 -13
  403. package/src/domains/eval/verifiers/integrity.ts +39 -0
  404. package/src/domains/eval/verifiers/patch.ts +58 -2
  405. package/src/domains/eval/workspaces/temp-copy.ts +3 -0
  406. package/src/domains/evidence/build.ts +4 -2
  407. package/src/domains/interop/registry.ts +2 -2
  408. package/src/domains/middleware/hooks-io.ts +45 -26
  409. package/src/domains/middleware/hooks.ts +6 -0
  410. package/src/domains/middleware/injection-screen.ts +23 -0
  411. package/src/domains/middleware/rules.ts +5 -1
  412. package/src/domains/middleware/stalled-turn.ts +18 -3
  413. package/src/domains/middleware/task-board-reminder.ts +4 -2
  414. package/src/domains/middleware/task-nudge.ts +4 -1
  415. package/src/domains/mux/contract.ts +34 -1
  416. package/src/domains/mux/dock-controller.ts +8 -1
  417. package/src/domains/mux/index.ts +1 -0
  418. package/src/domains/mux/socket-client.ts +13 -3
  419. package/src/domains/observability/contract.ts +2 -2
  420. package/src/domains/observability/projection.ts +30 -9
  421. package/src/domains/prompts/compiler.ts +10 -2
  422. package/src/domains/prompts/contract.ts +7 -4
  423. package/src/domains/prompts/extension.ts +28 -64
  424. package/src/domains/prompts/fragments/identity/clio.md +23 -0
  425. package/src/domains/prompts/fragments/operating/contract.md +10 -0
  426. package/src/domains/prompts/fragments/operating/delegation.md +5 -0
  427. package/src/domains/prompts/fragments/wiki/page.md +28 -15
  428. package/src/domains/prompts/fragments/wiki/plan.md +4 -4
  429. package/src/domains/prompts/preload-prefix.ts +31 -0
  430. package/src/domains/prompts/preload.ts +135 -61
  431. package/src/domains/providers/auth/backend-file.ts +15 -11
  432. package/src/domains/providers/auth/storage.ts +3 -5
  433. package/src/domains/providers/catalog.ts +18 -3
  434. package/src/domains/providers/runtime-resolution.ts +11 -9
  435. package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
  436. package/src/domains/resources/skills/promotion.ts +8 -1
  437. package/src/domains/safety/action-classifier.ts +9 -0
  438. package/src/domains/safety/autonomy.ts +10 -1
  439. package/src/domains/safety/contract.ts +5 -1
  440. package/src/domains/safety/default-path-policy.ts +11 -0
  441. package/src/domains/safety/extension.ts +11 -2
  442. package/src/domains/safety/policy-engine.ts +189 -32
  443. package/src/domains/safety/project-policy.ts +7 -2
  444. package/src/domains/safety/workspace-trust.ts +43 -0
  445. package/src/domains/session/compaction/compact.ts +384 -21
  446. package/src/domains/session/compaction/cut-point.ts +42 -5
  447. package/src/domains/session/compaction/tokens.ts +9 -1
  448. package/src/domains/session/decision-board.ts +43 -33
  449. package/src/domains/session/entries.ts +169 -4
  450. package/src/domains/session/prompt-manifest.ts +47 -8
  451. package/src/domains/session/task-board.ts +21 -3
  452. package/src/domains/user-tasks/handoff.ts +16 -0
  453. package/src/engine/acp/adapter.ts +44 -12
  454. package/src/engine/acp/server.ts +1 -0
  455. package/src/engine/acp/transport.ts +2 -1
  456. package/src/engine/acp/types.ts +6 -1
  457. package/src/engine/antigravity/subprocess-runtime.ts +20 -4
  458. package/src/engine/api-registry.ts +19 -2
  459. package/src/engine/apis/openai-completions.ts +13 -6
  460. package/src/engine/apis/output-budget.ts +26 -10
  461. package/src/engine/claude/sdk-runtime.ts +4 -3
  462. package/src/engine/env-api-keys.ts +2 -1
  463. package/src/engine/external-subprocess.ts +14 -3
  464. package/src/engine/loop-guard.ts +19 -2
  465. package/src/engine/provider-diagnostics.ts +129 -0
  466. package/src/engine/provider-payload.ts +3 -1
  467. package/src/engine/worker-runtime.ts +13 -2
  468. package/src/engine/worker-tools.ts +5 -1
  469. package/src/entry/extension-reload.ts +1 -0
  470. package/src/entry/orchestrator.ts +53 -15
  471. package/src/interactive/chat-loop-messages.ts +12 -4
  472. package/src/interactive/chat-loop.ts +115 -45
  473. package/src/interactive/chat-renderer.ts +60 -0
  474. package/src/interactive/context-recall-command.ts +2 -1
  475. package/src/interactive/dispatch-board.ts +17 -2
  476. package/src/interactive/editor-submit.ts +13 -0
  477. package/src/interactive/interactive-application.ts +8 -2
  478. package/src/interactive/interactive-event-projection.ts +7 -1
  479. package/src/interactive/interactive-presentation.ts +15 -7
  480. package/src/interactive/interactive-slash-runtime.ts +2 -0
  481. package/src/interactive/layout.ts +2 -1
  482. package/src/interactive/model-session-replay.ts +2 -2
  483. package/src/interactive/overlay-frame.ts +1 -0
  484. package/src/interactive/overlay-general-openers.ts +3 -1
  485. package/src/interactive/overlay-session-lifecycle.ts +6 -0
  486. package/src/interactive/overlays/ask-user.ts +1 -0
  487. package/src/interactive/overlays/message-picker.ts +1 -1
  488. package/src/interactive/renderers/tool-execution.ts +17 -1
  489. package/src/interactive/renderers/worker-entry.ts +25 -10
  490. package/src/interactive/slash-commands.ts +9 -7
  491. package/src/interactive/turn-context.ts +221 -53
  492. package/src/interactive/turn-middleware.ts +3 -1
  493. package/src/interactive/turn-persistence.ts +3 -0
  494. package/src/interactive/turn-runtime.ts +11 -2
  495. package/src/interactive/turn-state.ts +10 -9
  496. package/src/interactive/watch-pane.ts +18 -4
  497. package/src/interactive/worker-stream.ts +7 -7
  498. package/src/tools/agent-tools.ts +6 -3
  499. package/src/tools/bash.ts +1 -1
  500. package/src/tools/builtin-tool-catalog.ts +9 -2
  501. package/src/tools/codewiki/code-nav.ts +4 -10
  502. package/src/tools/compete-judge-task.ts +71 -0
  503. package/src/tools/compete-worktrees.ts +34 -0
  504. package/src/tools/context/index.ts +32 -7
  505. package/src/tools/context/surface.ts +15 -4
  506. package/src/tools/decide.ts +1 -1
  507. package/src/tools/dispatch-admission.ts +12 -1
  508. package/src/tools/dispatch-arguments.ts +38 -1
  509. package/src/tools/dispatch-plan.ts +7 -7
  510. package/src/tools/dispatch-runner.ts +48 -32
  511. package/src/tools/dispatch-schema.ts +30 -23
  512. package/src/tools/dispatch-scout-admission.ts +10 -44
  513. package/src/tools/dispatch-scout.ts +2 -3
  514. package/src/tools/find.ts +13 -4
  515. package/src/tools/grep.ts +13 -1
  516. package/src/tools/ls.ts +7 -1
  517. package/src/tools/monitor.ts +26 -11
  518. package/src/tools/network-policy.ts +11 -24
  519. package/src/tools/observation.ts +39 -2
  520. package/src/tools/read.ts +112 -15
  521. package/src/tools/registry.ts +54 -17
  522. package/src/tools/result-shaping.ts +110 -2
  523. package/src/tools/tasks.ts +33 -7
  524. package/src/tools/verify/frontend.ts +67 -30
  525. package/src/tools/verify/numeric.ts +6 -1
  526. package/src/tools/web-fetch-network.ts +179 -0
  527. package/src/tools/web-fetch-surface.ts +2 -1
  528. package/src/tools/web-fetch.ts +15 -13
  529. package/src/tools/worker-evidence.ts +27 -0
  530. package/src/worker/spec-contract.ts +12 -8
  531. package/dist/builtins-WGALA46I.js +0 -22
  532. package/dist/chunk-2WZ546HR.js +0 -792
  533. package/dist/chunk-5PSMVOLM.js +0 -56
  534. package/dist/chunk-EL24TAU4.js +0 -1560
  535. package/dist/chunk-IZXGRF7P.js +0 -4048
  536. package/dist/chunk-JVCV3ICN.js +0 -47
  537. package/dist/chunk-MNJGS2IN.js +0 -33
  538. package/dist/chunk-O5CVSAG5.js +0 -122
  539. package/dist/chunk-ODGTEFFI.js +0 -50
  540. package/dist/chunk-OQE5J4C6.js +0 -73
  541. package/dist/chunk-UUVG37B4.js +0 -244
  542. package/dist/chunk-V6HJFQZE.js +0 -228
  543. package/dist/clio-QLICPCF5.js +0 -25
  544. package/dist/configure-VEPX4NMX.js +0 -55
  545. package/dist/context-clear-S4ZJCQUX.js +0 -182
  546. package/dist/detail-A7JAVSIG.js +0 -98
  547. package/dist/evidence-4F5USFKH.js +0 -208
  548. package/dist/fleet-view-MN2VG4MR.js +0 -101
  549. package/dist/inventory-C26CFDRR.js +0 -101
  550. package/dist/preload-P6DGH2PZ.js +0 -13
  551. package/dist/slash-commands-ZXPJD64J.js +0 -92
  552. package/dist/tasks-IPAGMEIX.js +0 -36
  553. package/dist/tools-EFFEAIDP.js +0 -28
  554. package/dist/verify-FWYGPKMR.js +0 -29
  555. package/dist/wiki-generate-743CIGJW.js +0 -476
@@ -1,3 +1,4 @@
1
+ import { statSync } from "node:fs";
1
2
  import { detectProjectType } from "../session/workspace/project-type.js";
2
3
  import {
3
4
  loadProjectClioMd,
@@ -5,7 +6,7 @@ import {
5
6
  renderProjectContextFragment,
6
7
  renderProjectTypeFragment,
7
8
  } from "./clio-md.js";
8
- import { readCodewiki } from "./codewiki/artifact.js";
9
+ import { codewikiPath } from "./codewiki/artifact.js";
9
10
  import type { ProjectPromptContext } from "./contract.js";
10
11
  import { computeFingerprintCached, isStale } from "./fingerprint.js";
11
12
  import { readClioState } from "./state.js";
@@ -14,7 +15,7 @@ import { wikiCompleteness, wikiStaleness } from "./wiki/staleness.js";
14
15
 
15
16
  /**
16
17
  * Render the project prompt context for `cwd`: the project-type marker, the
17
- * effective CLIO-CODER.md fragments when parseable handbooks exist, the codewiki availability
18
+ * effective CLIO-CODER.md fragments when readable nonempty handbooks exist, the codewiki availability
18
19
  * marker, and the Markdown wiki marker when a valid wiki exists. Shared by the
19
20
  * prompts extension (session compile),
20
21
  * context-init preload reporting, and `clio-coder config inspect`, so every surface
@@ -24,26 +25,59 @@ import { wikiCompleteness, wikiStaleness } from "./wiki/staleness.js";
24
25
  export const HANDBOOK_ABSENT_FRAGMENT =
25
26
  "<handbook>none: this workspace has no CLIO-CODER.md, so do not read one; learn the repository from its files, and the operator can run /context init to write a handbook</handbook>";
26
27
 
28
+ function codewikiArtifactPresent(cwd: string): boolean {
29
+ try {
30
+ return statSync(codewikiPath(cwd)).isFile();
31
+ } catch {
32
+ return false;
33
+ }
34
+ }
35
+
27
36
  export function renderPromptContext(cwd: string): ProjectPromptContext {
28
- const projectType = detectProjectType(cwd);
29
- const pieces = [renderProjectTypeFragment(projectType)];
37
+ // Detection enumerates the tree and reads every `.h` header to classify it,
38
+ // and this renders on session compile and on every bounded dispatch. An
39
+ // indexed project already recorded its type when init, refresh, or the
40
+ // session-start check stamped state; the marker reads that and detects only
41
+ // where nothing has been recorded yet.
42
+ const state = readClioState(cwd);
43
+ const projectType = state?.projectType ?? detectProjectType(cwd);
44
+ const supportFragments = [renderProjectTypeFragment(projectType)];
45
+ const pieces = [...supportFragments];
46
+ const addSupport = (fragment: string): void => {
47
+ pieces.push(fragment);
48
+ supportFragments.push(fragment);
49
+ };
30
50
  const warnings: string[] = [];
31
51
  const loadedClioMd = loadProjectClioMd(cwd);
32
52
  const clioMd: ParsedClioMd | null = loadedClioMd.value;
33
- for (const file of loadedClioMd.files) pieces.push(renderProjectContextFragment(file.value, file.path));
53
+ for (const file of loadedClioMd.files) pieces.push(renderProjectContextFragment(file.source, file.path));
34
54
  for (const issue of loadedClioMd.errors) {
35
- warnings.push(`clio-coder: malformed ${issue.path} ignored: ${issue.error}`);
55
+ warnings.push(`clio-coder: unavailable ${issue.path} ignored: ${issue.error}`);
36
56
  }
37
57
  // Said where the handbook would have been: a model that sees no project
38
58
  // context spends its first tool call reading CLIO-CODER.md and gets
39
59
  // ENOENT, while the operator's header already says it is missing (#191).
40
- if (loadedClioMd.files.length === 0 && loadedClioMd.errors.length === 0) pieces.push(HANDBOOK_ABSENT_FRAGMENT);
41
- const codewiki = readCodewiki(cwd);
42
- if (codewiki) {
43
- const state = readClioState(cwd);
44
- const stale = state ? isStale(state.fingerprint, computeFingerprintCached(cwd, codewiki)) : true;
60
+ if (loadedClioMd.files.length === 0 && loadedClioMd.errors.length === 0) addSupport(HANDBOOK_ABSENT_FRAGMENT);
61
+ // The marker states that an artifact is present and whether the recorded
62
+ // source fingerprint still matches the tree. It does not validate the
63
+ // artifact's contents: parsing the JSON here is main-thread work that grows
64
+ // with the index, on session compile and on every bounded dispatch, for a
65
+ // boolean. An unparseable artifact is still "available" in the sense the
66
+ // marker promises, because `code_nav` reads null for it and rebuilds from
67
+ // source under the lease before answering, and the session-start check does
68
+ // the same. The recorded fingerprint carries the line total the freshness
69
+ // check would otherwise have read off the artifact.
70
+ if (codewikiArtifactPresent(cwd)) {
71
+ let stale = true;
72
+ try {
73
+ if (state) {
74
+ stale = isStale(state.fingerprint, computeFingerprintCached(cwd, null, { artifactLoc: state.fingerprint.loc }));
75
+ }
76
+ } catch {
77
+ warnings.push("clio-coder: codewiki freshness unavailable; source could not be read; run /context refresh");
78
+ }
45
79
  const suffix = stale ? " (stale; run /context refresh)" : "";
46
- pieces.push(`<codewiki>available${suffix}; use code_nav</codewiki>`);
80
+ addSupport(`<codewiki>available${suffix}; use code_nav</codewiki>`);
47
81
  }
48
82
  // A wiki is advertised whenever one exists. There is no invalid-layout state
49
83
  // to gate on: every structural defect is repaired by the assembly pass before
@@ -63,7 +97,14 @@ export function renderPromptContext(cwd: string): ProjectPromptContext {
63
97
  }
64
98
  if (staleness.state === "stale") notes.push("stale");
65
99
  const suffix = notes.length > 0 ? ` (${notes.join("; ")}; run clio-coder context wiki --update)` : "";
66
- pieces.push(`<wiki>${pages.length} pages at .clio-coder/wiki (start: quickstart.md)${suffix}</wiki>`);
100
+ addSupport(`<wiki>${pages.length} pages at .clio-coder/wiki (start: quickstart.md)${suffix}</wiki>`);
67
101
  }
68
- return { text: pieces.join("\n\n"), clioMd, warnings, handbookFiles: loadedClioMd.files.map((file) => file.path) };
102
+ return {
103
+ text: pieces.join("\n\n"),
104
+ clioMd,
105
+ warnings,
106
+ handbookFiles: loadedClioMd.files.map((file) => file.path),
107
+ handbookSources: loadedClioMd.files.map(({ path, source }) => ({ path, source })),
108
+ supportFragments,
109
+ };
69
110
  }
@@ -1,9 +1,7 @@
1
- import { writeFileSync } from "node:fs";
2
- import { join } from "node:path";
3
1
  import type { DecisionLedgerEntry } from "../session/entries.js";
4
2
  import { detectProjectType } from "../session/workspace/project-type.js";
5
- import { type BootstrapIo, type BootstrapProgressSink, codewikiSections } from "./bootstrap.js";
6
- import { serializeClioMd, tryReadClioMd } from "./clio-md.js";
3
+ import type { BootstrapIo, BootstrapProgressSink } from "./bootstrap.js";
4
+ import { tryReadClioMd } from "./clio-md.js";
7
5
  import { coordinateCodewikiWrite } from "./codewiki/coordinator.js";
8
6
  import type { Codewiki } from "./codewiki/schema.js";
9
7
  import type { Fingerprint } from "./fingerprint.js";
@@ -14,8 +12,8 @@ import { wikiCompleteness, wikiStaleness } from "./wiki/staleness.js";
14
12
 
15
13
  /**
16
14
  * `/context refresh` and `clio-coder context refresh`: rebuild the codewiki index and
17
- * `.clio-coder` state, then re-derive the handbook sections the index owns. Authoring
18
- * handbook prose stays with `/context init`.
15
+ * `.clio-coder` state while preserving authored handbook bytes. Derived navigation
16
+ * stays in codewiki and the optional Markdown wiki.
19
17
  */
20
18
 
21
19
  export interface RunContextRefreshInput {
@@ -35,11 +33,11 @@ export interface RunContextRefreshInput {
35
33
  }
36
34
 
37
35
  /**
38
- * What refresh did to CLIO-CODER.md. "absent" covers no handbook and an unparseable
39
- * one alike: a missing or broken handbook is never an error here, because a
36
+ * What refresh found at CLIO-CODER.md. "absent" covers missing, empty, and unreadable
37
+ * files: an unavailable handbook is never an error here, because a
40
38
  * repository must stay fully usable without one.
41
39
  */
42
- export type ClioMdCuration = "updated" | "unchanged" | "absent";
40
+ export type ClioMdCuration = "unchanged" | "absent";
43
41
 
44
42
  export interface RunContextRefreshResult {
45
43
  action: "refreshed";
@@ -50,49 +48,6 @@ export interface RunContextRefreshResult {
50
48
  hint?: string;
51
49
  }
52
50
 
53
- /**
54
- * Re-derive the index-owned sections of an existing handbook against the codewiki
55
- * this run just built. Only sections whose title the index authors are replaced,
56
- * and only when they are already present, so a human's handbook is never grown a
57
- * section it did not ask for and never loses one it wrote. Best-effort by
58
- * construction: nothing here may turn a routine refresh into a failure.
59
- */
60
- function curateClioMd(cwd: string, codewiki: Codewiki): ClioMdCuration {
61
- try {
62
- const parsed = tryReadClioMd(cwd);
63
- if (!parsed?.ok) return "absent";
64
- const handbook = parsed.value;
65
- const fresh = new Map(codewikiSections(codewiki).map((section) => [section.title, section.body] as const));
66
- let changed = false;
67
- const sections = handbook.sections.map((section) => {
68
- const body = fresh.get(section.title);
69
- if (body === undefined || body === section.body) return section;
70
- changed = true;
71
- return { title: section.title, body };
72
- });
73
- // Rewrite only when an index-owned body actually moved. Serializing on every
74
- // refresh would silently reformat a hand-written handbook into the generator's
75
- // canonical rendering, which is a diff the author never asked for.
76
- if (!changed) return "unchanged";
77
- writeFileSync(
78
- join(cwd, "CLIO-CODER.md"),
79
- serializeClioMd({
80
- projectName: handbook.projectName,
81
- identity: handbook.identity,
82
- conventions: handbook.conventions,
83
- invariants: handbook.invariants,
84
- sections,
85
- ...(handbook.importedAgentContext ? { importedAgentContext: handbook.importedAgentContext } : {}),
86
- fingerprint: handbook.fingerprint,
87
- }),
88
- "utf8",
89
- );
90
- return "updated";
91
- } catch {
92
- return "absent";
93
- }
94
- }
95
-
96
51
  function indexedSourceFileCount(codewiki: Codewiki): number {
97
52
  return codewiki.files.filter((file) => file.lang !== "config").length;
98
53
  }
@@ -121,7 +76,7 @@ export async function runContextRefresh(input: RunContextRefreshInput = {}): Pro
121
76
  const coordinated = await coordinateCodewikiWrite(cwd, () => ({ kind: "build", cwd, language: projectType }), {
122
77
  afterCommit: (result, workspace) => {
123
78
  fingerprint = result.fingerprint;
124
- clioMd = curateClioMd(workspace, result.codewiki);
79
+ clioMd = tryReadClioMd(workspace)?.ok ? "unchanged" : "absent";
125
80
  input.onProgress?.({ phase: "state", status: "running", message: "writing state" });
126
81
  const latest = readClioState(workspace);
127
82
  writeClioState(workspace, {
@@ -165,10 +120,7 @@ export async function runContextRefresh(input: RunContextRefreshInput = {}): Pro
165
120
  }
166
121
 
167
122
  const committedClioMd = clioMd as ClioMdCuration;
168
- const handbookNote = committedClioMd === "updated" ? "; CLIO-CODER.md index sections updated" : "";
169
- input.io?.stdout(
170
- `clio-coder context refresh: codewiki rebuilt (${entries} source file${entries === 1 ? "" : "s"})${handbookNote}\n`,
171
- );
123
+ input.io?.stdout(`clio-coder context refresh: codewiki rebuilt (${entries} source file${entries === 1 ? "" : "s"})\n`);
172
124
  input.onProgress?.({ phase: "done", status: "completed", message: "context refreshed" });
173
125
  return {
174
126
  action: "refreshed",
@@ -15,7 +15,7 @@
15
15
  */
16
16
 
17
17
  import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
18
- import { basename, dirname, join, normalize, posix, relative } from "node:path";
18
+ import { basename, dirname, join, posix, relative } from "node:path";
19
19
  import { readWikiPage, renderWikiPage, resolveSourcePath, type WikiPageMetadata } from "./frontmatter.js";
20
20
  import {
21
21
  isGeneratedWikiFile,
@@ -289,15 +289,19 @@ export function pageSourceIndex(dir: string, sourceRoot: string): Map<string, st
289
289
  const index = new Map<string, string[]>();
290
290
  for (const relPath of wikiMarkdownFilesInDir(dir)) {
291
291
  if (isGeneratedWikiFile(relPath)) continue;
292
- const { metadata } = readWikiPage({ pagePath: relPath, content: readText(join(dir, relPath)), sourceRoot });
293
- index.set(relPath, [...metadata.sources, ...metadata.tests]);
292
+ const { metadata, unresolvedPaths } = readWikiPage({
293
+ pagePath: relPath,
294
+ content: readText(join(dir, relPath)),
295
+ sourceRoot,
296
+ });
297
+ index.set(relPath, [
298
+ ...new Set(
299
+ [...metadata.sources, ...metadata.tests, ...unresolvedPaths].map((cited) => {
300
+ const resolved = resolveSourcePath(sourceRoot, cited);
301
+ return resolved ? relative(sourceRoot, resolved).replace(/\\/g, "/") : cited;
302
+ }),
303
+ ),
304
+ ]);
294
305
  }
295
306
  return index;
296
307
  }
297
-
298
- /** Normalize a repository path for comparison against recorded page sources. */
299
- export function normalizeRepoPath(sourceRoot: string, candidate: string): string {
300
- const resolved = normalize(join(sourceRoot, candidate));
301
- const rel = relative(sourceRoot, resolved);
302
- return rel.split("\\").join("/");
303
- }
@@ -0,0 +1,209 @@
1
+ /** Mechanical publication checks; these do not prove a claim or that a writer read its source. */
2
+ import { accessSync, constants, readFileSync, realpathSync, statSync } from "node:fs";
3
+ import { basename, isAbsolute, relative, resolve } from "node:path";
4
+ import { parse } from "yaml";
5
+ import { readWikiPage, resolveSourcePath, stripFrontmatter } from "./frontmatter.js";
6
+
7
+ export interface WikiPageEvidenceInput {
8
+ pagePath: string;
9
+ content: string;
10
+ sourceRoot: string;
11
+ }
12
+
13
+ export interface WikiPageEvidenceResult {
14
+ ok: boolean;
15
+ /** At most eight actionable diagnostics, each bounded for the persisted retry reason. */
16
+ reasons: string[];
17
+ /** Canonical repository-relative evidence files, present only after successful validation. */
18
+ dependencies?: string[];
19
+ }
20
+
21
+ function within(root: string, path: string): boolean {
22
+ const rel = relative(root, path).replace(/\\/g, "/");
23
+ return rel !== ".." && !rel.startsWith("../") && !isAbsolute(rel);
24
+ }
25
+
26
+ /**
27
+ * Validate the original writer output BEFORE assembly repairs metadata. Existing
28
+ * frontmatter parsing supplies the references; no claims sidecar or prose schema
29
+ * is required. The supported body citation form is a backticked file path with
30
+ * optional :line[-end][:symbol] or #Lline[-Lend]. Markdown wiki links, commands,
31
+ * symbols and decision refs are not interpreted as source evidence.
32
+ */
33
+ export function validateWikiPageEvidence(input: WikiPageEvidenceInput): WikiPageEvidenceResult {
34
+ const reasons: string[] = [];
35
+ const fail = (reason: string): void => {
36
+ if (reasons.length < 8) reasons.push(reason.slice(0, 300));
37
+ };
38
+ if (Buffer.byteLength(input.content, "utf8") > 2 * 1024 * 1024) {
39
+ return { ok: false, reasons: ["Page exceeds the 2 MiB evidence-check limit; split or shorten it before retrying."] };
40
+ }
41
+ const { body, metadata } = readWikiPage({ pagePath: input.pagePath, content: input.content });
42
+ if (
43
+ body
44
+ .replace(/<!--[\s\S]*?-->/g, "")
45
+ .replace(/^\s*#.*$/gm, "")
46
+ .trim().length === 0
47
+ ) {
48
+ fail("Write a nonempty page body beyond headings and comments, grounded in current repository files.");
49
+ }
50
+ const { block } = stripFrontmatter(input.content);
51
+ if (block !== null) {
52
+ try {
53
+ const fields: unknown = parse(`\n${block}`, { schema: "core", uniqueKeys: true });
54
+ if (typeof fields !== "object" || fields === null || Array.isArray(fields)) {
55
+ fail("Repair the YAML frontmatter as a metadata mapping before retrying.");
56
+ } else {
57
+ for (const field of ["sources", "tests"] as const) {
58
+ const value = (fields as Record<string, unknown>)[field];
59
+ if (
60
+ value !== undefined &&
61
+ (!Array.isArray(value) || value.some((item) => typeof item !== "string" || !item.trim()))
62
+ ) {
63
+ fail(`Repair frontmatter ${field}: use a list of nonempty repository-relative file paths.`);
64
+ }
65
+ }
66
+ }
67
+ } catch {
68
+ fail("Repair invalid YAML frontmatter; source/test evidence cannot be checked until it parses.");
69
+ }
70
+ } else if (/^---\r?\n/.test(input.content)) {
71
+ fail("Close the YAML frontmatter with a standalone --- line before the page body.");
72
+ }
73
+
74
+ const declaredReferences = new Set([...metadata.sources, ...metadata.tests]);
75
+ const references = new Set(declaredReferences);
76
+ for (const reference of references) {
77
+ if (/[:#]/.test(reference))
78
+ fail(
79
+ `Use a plain file path in sources/tests: ${JSON.stringify(reference.slice(0, 160))}; put line/symbol citations in the body.`,
80
+ );
81
+ }
82
+ // Remove code fences: example programs and shell commands are not citations.
83
+ const prose = body.replace(/^\s*(`{3,}|~{3,})[^\n]*\n[\s\S]*?^\s*\1\s*$/gm, "");
84
+ for (const match of prose.matchAll(/`([^`\s]+)`/g)) {
85
+ const cited = match[1] ?? "";
86
+ // A filename extension distinguishes a file citation from a symbol or a
87
+ // recorded decision ref. Include extensionless conventional repo files.
88
+ const pathLike = cited.includes("/") && /\.[\w-]+(?=[:#]|$)/.test(cited);
89
+ const rootFile =
90
+ /^[^/:#]+\.(?:[cm]?[jt]sx?|py|rs|go|c|h|cpp|hpp|java|rb|sh|json|ya?ml|toml|md|txt|ini|cfg|xml|html|css|sql)(?=[:#]|$)/i.test(
91
+ cited,
92
+ );
93
+ if (
94
+ !/^[a-z][a-z\d+.-]*:\/\//i.test(cited) &&
95
+ (pathLike || rootFile || /^(?:Makefile|Dockerfile|LICENSE)(?=[:#]|$)/.test(cited))
96
+ ) {
97
+ references.add(cited);
98
+ }
99
+ }
100
+ if (references.size === 0)
101
+ fail("Cite at least one existing repository file in sources/tests or as a backticked source path.");
102
+ if (references.size > 512) {
103
+ fail("Page exceeds the 512-reference evidence-check limit; split or shorten it before retrying.");
104
+ return { ok: false, reasons };
105
+ }
106
+ let root: string;
107
+ try {
108
+ root = realpathSync(input.sourceRoot);
109
+ } catch {
110
+ fail("Repository root is unavailable; restore access and retry evidence validation.");
111
+ return { ok: false, reasons };
112
+ }
113
+ const dependencies = new Set<string>();
114
+ const declaredFilesByName = new Map<string, Set<string>>();
115
+ const linesByFile = new Map<string, number>();
116
+ let readBytes = 0;
117
+ for (const reference of references) {
118
+ const label = JSON.stringify(reference.slice(0, 160));
119
+ const match = /^([^:#]+)(?:(?::(\d+)(?:-(\d+))?)|(?:#L(\d+)(?:-L?(\d+))?))?(?::[A-Za-z_$][\w$.-]*)?$/.exec(reference);
120
+ if (!match) {
121
+ fail(`Repair citation ${label}: use path, path:line[-end], or path#Lline[-Lend].`);
122
+ continue;
123
+ }
124
+ const cited = match[1] ?? "";
125
+ try {
126
+ let source = resolveSourcePath(resolve(input.sourceRoot), cited);
127
+ if (source === null && !declaredReferences.has(reference) && !/[\\/]/.test(cited)) {
128
+ const declared = declaredFilesByName.get(cited);
129
+ if (declared?.size === 1) source = [...declared][0] ?? null;
130
+ }
131
+ if (source === null) {
132
+ fail(`Replace or remove unresolved repository reference ${label}; inspect the current file path.`);
133
+ continue;
134
+ }
135
+ const real = realpathSync(source);
136
+ const stat = statSync(real);
137
+ if (!within(root, real) || !stat.isFile()) {
138
+ fail(
139
+ `Replace ${label} with an existing file inside the repository; directories and escaping symlinks are not evidence.`,
140
+ );
141
+ continue;
142
+ }
143
+ accessSync(real, constants.R_OK);
144
+ // Declared references are checked first. Body shorthand can reuse only
145
+ // their verified files; frontmatter itself remains repository-relative.
146
+ if (declaredReferences.has(reference) && !/[:#]/.test(reference)) {
147
+ for (const name of [basename(cited), basename(real)]) {
148
+ const files = declaredFilesByName.get(name) ?? new Set<string>();
149
+ files.add(real);
150
+ declaredFilesByName.set(name, files);
151
+ }
152
+ }
153
+ dependencies.add(relative(root, real).split("\\").join("/"));
154
+ const startText = match[2] ?? match[4];
155
+ if (startText !== undefined) {
156
+ if (stat.size > 4 * 1024 * 1024) {
157
+ fail(`Cannot check lines in ${label}: file exceeds 4 MiB; cite the file and symbol without a line range.`);
158
+ continue;
159
+ }
160
+ let lines = linesByFile.get(real);
161
+ if (lines === undefined) {
162
+ if (readBytes + stat.size > 16 * 1024 * 1024) {
163
+ fail(
164
+ "Line citations exceed the 16 MiB total source-read limit; split the page or prefer file and symbol citations.",
165
+ );
166
+ continue;
167
+ }
168
+ readBytes += stat.size;
169
+ const text = readFileSync(real, "utf8");
170
+ lines = text.length === 0 ? 0 : text.split("\n").length - (text.endsWith("\n") ? 1 : 0);
171
+ linesByFile.set(real, lines);
172
+ }
173
+ const start = Number(startText);
174
+ const end = Number(match[3] ?? match[5] ?? startText);
175
+ if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start < 1 || end < start || end > lines) {
176
+ fail(
177
+ `Repair line range in ${label}: the current file has ${lines} lines; use an existing ordered range starting at 1.`,
178
+ );
179
+ }
180
+ }
181
+ } catch {
182
+ fail(`Cannot inspect ${label}; restore readable repository evidence or remove the unsupported reference.`);
183
+ }
184
+ }
185
+ return reasons.length === 0 ? { ok: true, reasons, dependencies: [...dependencies].sort() } : { ok: false, reasons };
186
+ }
187
+
188
+ /** Read a planned staging page with bounded IO before validating original evidence. */
189
+ export function inspectWikiPageEvidence(input: {
190
+ pagePath: string;
191
+ outputDir: string;
192
+ sourceRoot: string;
193
+ }): WikiPageEvidenceResult {
194
+ try {
195
+ const path = realpathSync(resolve(input.outputDir, input.pagePath));
196
+ const stat = statSync(path);
197
+ if (!within(realpathSync(input.outputDir), path) || !stat.isFile())
198
+ return { ok: false, reasons: ["planned page must be a regular file inside wiki staging"] };
199
+ if (stat.size > 2 * 1024 * 1024)
200
+ return { ok: false, reasons: ["page exceeds the 2 MiB evidence-check limit; split or shorten it"] };
201
+ return validateWikiPageEvidence({
202
+ pagePath: input.pagePath,
203
+ content: readFileSync(path, "utf8"),
204
+ sourceRoot: input.sourceRoot,
205
+ });
206
+ } catch {
207
+ return { ok: false, reasons: ["writer finished without a readable planned page file"] };
208
+ }
209
+ }