@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.
- package/CHANGELOG.md +92 -2
- package/CONTRIBUTING.md +25 -15
- package/README.md +340 -27
- package/dist/{acp-WNAYYF4F.js → acp-H3CU2HBQ.js} +25 -24
- package/dist/{agents-3OKXHLOI.js → agents-IXQQZ7BD.js} +77 -77
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-VKNNMGPU.js → auth-R7KYF7N3.js} +38 -38
- package/dist/builtins-CRFDQUVP.js +22 -0
- package/dist/{chunk-TQAHXW6Y.js → chunk-22PQ4TX4.js} +4 -4
- package/dist/{chunk-NEDJ26B5.js → chunk-2GPGAE5W.js} +6 -51
- package/dist/{chunk-IKCO5N3L.js → chunk-2QPI3TR3.js} +3 -3
- package/dist/{chunk-HRQMFLJP.js → chunk-32KJPXAM.js} +6 -6
- package/dist/{chunk-65DEGPJ6.js → chunk-3A3CUMKA.js} +6 -4
- package/dist/{chunk-JCI2ROMZ.js → chunk-3T4DXWP6.js} +7 -7
- package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
- package/dist/{chunk-6Q3CYFD3.js → chunk-4SVIVOMC.js} +184 -33
- package/dist/{chunk-W54I7H25.js → chunk-5A6XR3RJ.js} +44 -19
- package/dist/{chunk-YPC6ZR5L.js → chunk-5CMARGPF.js} +119 -5
- package/dist/{chunk-KXDSS5WJ.js → chunk-5CY4Q6QI.js} +4 -4
- package/dist/{chunk-I2DWJ4GM.js → chunk-5DDOTTG4.js} +54 -42
- package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
- package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
- package/dist/{chunk-3ODX73FK.js → chunk-5VTJP36Q.js} +4 -4
- package/dist/{chunk-54X7T7DK.js → chunk-5ZMXGW7P.js} +79 -7
- package/dist/chunk-5ZSZEYJK.js +119 -0
- package/dist/{chunk-IXIY2H4R.js → chunk-633EXGZA.js} +5 -5
- package/dist/{chunk-CUSRQKPU.js → chunk-6CDNRHWH.js} +299 -89
- package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
- package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
- package/dist/{chunk-JEIYHLOR.js → chunk-6SYEGZI3.js} +12 -12
- package/dist/{chunk-DQOVN6KV.js → chunk-6YA46L5A.js} +4 -4
- package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
- package/dist/{chunk-6PAZTBPA.js → chunk-7HBHHVCK.js} +15 -6
- package/dist/{chunk-25QBEXRS.js → chunk-7TKWWPD7.js} +5 -4
- package/dist/{chunk-2VTFPG5O.js → chunk-7WLRF2U5.js} +2 -2
- package/dist/chunk-7WUZEB2M.js +165 -0
- package/dist/{chunk-3UUXNFEX.js → chunk-7YJWEF2L.js} +61 -34
- package/dist/{chunk-3EBYEESD.js → chunk-A46ILRS2.js} +5 -5
- package/dist/{chunk-UOIZ7DA4.js → chunk-AP7HDJOP.js} +2 -2
- package/dist/{chunk-APJ265NV.js → chunk-B5GGDIHT.js} +146 -146
- package/dist/{chunk-PMZVFWSR.js → chunk-B5ZTR6KZ.js} +2 -2
- package/dist/{chunk-I5FWO7L5.js → chunk-B6UM3OZC.js} +2 -2
- package/dist/{chunk-2CU2H6KE.js → chunk-BBV5TKE6.js} +5 -5
- package/dist/{chunk-4O6MANBS.js → chunk-BS4GAMUB.js} +14 -10
- package/dist/{chunk-S66XZJOF.js → chunk-C27U2TYG.js} +2 -2
- package/dist/{chunk-QZWQA4DE.js → chunk-CBSKDFWL.js} +3 -3
- package/dist/{chunk-2LEAKD4C.js → chunk-CKK25WN3.js} +3 -3
- package/dist/{chunk-BYP5D4HI.js → chunk-CTTI7G3T.js} +2 -2
- package/dist/{chunk-XAKHZX5N.js → chunk-CVDAFGPW.js} +4 -4
- package/dist/{chunk-RKKLTLYB.js → chunk-CXQ37WJH.js} +3 -3
- package/dist/{chunk-GTUD2WMY.js → chunk-DBREN25X.js} +44 -9
- package/dist/{chunk-YNFKXPEC.js → chunk-DIMRLNIC.js} +35 -66
- package/dist/{chunk-NDDGJUXD.js → chunk-DNCE23JJ.js} +2 -2
- package/dist/{chunk-HVDIIIQW.js → chunk-DNHVRBH4.js} +3 -3
- package/dist/{chunk-XULDXHTN.js → chunk-DRD2A54W.js} +102 -50
- package/dist/{chunk-D7E7WCDF.js → chunk-DVNAPPXU.js} +2 -2
- package/dist/{chunk-YXLYO42X.js → chunk-DXVMLM3Z.js} +3 -2
- package/dist/{chunk-5MEZN6CB.js → chunk-DZK63TZJ.js} +6 -6
- package/dist/{chunk-IGLP3ODT.js → chunk-E3BQTQUP.js} +15 -15
- package/dist/{chunk-IWHMRKLL.js → chunk-E3LEPLQ2.js} +2 -2
- package/dist/{chunk-3R73A4XB.js → chunk-ECBHH7LU.js} +3 -3
- package/dist/chunk-ECOMVOHP.js +139 -0
- package/dist/chunk-EFSEIZE6.js +56 -0
- package/dist/{chunk-FEAXX7B6.js → chunk-EHCPSZJF.js} +4 -4
- package/dist/{chunk-4NSRCOYP.js → chunk-EHOSNVVM.js} +3 -2
- package/dist/{chunk-7UGL4MB5.js → chunk-EQEJJ53P.js} +10 -10
- package/dist/{chunk-GWZNEVM2.js → chunk-EWD5P3GK.js} +9 -9
- package/dist/{chunk-6UINWWS6.js → chunk-F34AR6O3.js} +14 -14
- package/dist/{chunk-GHS5EBTQ.js → chunk-FKIOX6DS.js} +29 -20
- package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
- package/dist/{chunk-Y55JBDO5.js → chunk-FSTIBAGM.js} +38 -23
- package/dist/{chunk-ZTJUVLTU.js → chunk-FXFVDPWY.js} +2 -2
- package/dist/{chunk-XPLRXC72.js → chunk-GD55RTIW.js} +3 -3
- package/dist/{chunk-5B2AEOW5.js → chunk-GH5ZR6JP.js} +472 -472
- package/dist/{chunk-TOIVGRUX.js → chunk-GJ24ODAX.js} +5 -5
- package/dist/{chunk-QUFRYSWI.js → chunk-GNQRWTMY.js} +129 -48
- package/dist/{chunk-5ICU3EUH.js → chunk-GVYWZNRK.js} +5 -5
- package/dist/{chunk-GX5WYQO4.js → chunk-GXCCHKN6.js} +6 -6
- package/dist/{chunk-K6T2ZAMZ.js → chunk-HGSLRG33.js} +6 -6
- package/dist/{chunk-26QSH3EJ.js → chunk-HHVJNVUJ.js} +5 -5
- package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
- package/dist/{chunk-JT2RFCC5.js → chunk-HR3HPQ76.js} +5 -5
- package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
- package/dist/{chunk-ELWDPP3Y.js → chunk-I7VLWRK2.js} +8 -8
- package/dist/{chunk-6OSVSQL5.js → chunk-ICO4TQ2F.js} +7 -5
- package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
- package/dist/{chunk-72YIHOZQ.js → chunk-ILJ7DWGE.js} +9 -9
- package/dist/{chunk-2JH2WHGE.js → chunk-J2FYEQ5L.js} +4 -4
- package/dist/{chunk-BMS5RKQY.js → chunk-JABWPKFY.js} +3 -3
- package/dist/{chunk-QDC3K2U3.js → chunk-K2BLQC5E.js} +3 -3
- package/dist/{chunk-AUPNRN7C.js → chunk-K2HL3GBL.js} +4 -4
- package/dist/{chunk-2ASED4PZ.js → chunk-K6RDB7IA.js} +26 -26
- package/dist/{chunk-FFUPXJC4.js → chunk-KDWLXVMN.js} +23 -24
- package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
- package/dist/{chunk-6QOTUPRG.js → chunk-KF6GFW6O.js} +66 -18
- package/dist/{chunk-BTK3SSSK.js → chunk-KMF54VH3.js} +2 -2
- package/dist/chunk-KPRLAMP4.js +32 -0
- package/dist/{chunk-ECH6PKUQ.js → chunk-KQ6IDQIB.js} +2 -2
- package/dist/{chunk-3UNOLWNZ.js → chunk-KTFSFCVN.js} +20 -9
- package/dist/{chunk-57XXR6DR.js → chunk-KYKNBD4Y.js} +24 -23
- package/dist/{chunk-IRXAATOX.js → chunk-L4N3DWNW.js} +3 -3
- package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
- package/dist/{chunk-U6TMQNSI.js → chunk-LTR5QCLS.js} +4 -4
- package/dist/chunk-LUL5Z66S.js +221 -0
- package/dist/{chunk-ELZVTCGV.js → chunk-LVFANMOH.js} +151 -327
- package/dist/{chunk-H7IXIC72.js → chunk-LY4N4TTL.js} +17 -3
- package/dist/{chunk-VKPAQYEB.js → chunk-LZBMXNLP.js} +5 -5
- package/dist/{chunk-UL3WSD3F.js → chunk-M4KFUXS7.js} +2 -2
- package/dist/{chunk-NXYCB2VD.js → chunk-M6TAYK66.js} +6 -6
- package/dist/{chunk-NEKRRTYW.js → chunk-MC3JSVR6.js} +2 -2
- package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
- package/dist/{chunk-DXKJURES.js → chunk-MDU3C27C.js} +10 -7
- package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
- package/dist/{chunk-3GY4F45V.js → chunk-NC4KV7EL.js} +6 -6
- package/dist/{chunk-LLXSDWXS.js → chunk-NF3BK5WR.js} +5 -5
- package/dist/chunk-NTK3WTHM.js +141 -0
- package/dist/{chunk-GYV6VZOC.js → chunk-NTTS3O53.js} +2 -2
- package/dist/{chunk-RZDWV63N.js → chunk-NY6IWDVU.js} +6 -6
- package/dist/{chunk-XXYSBZIQ.js → chunk-O2RQ7LCK.js} +4 -4
- package/dist/{chunk-4BJ5BYCE.js → chunk-O3VV6IVK.js} +2 -2
- package/dist/{chunk-W6GROXXM.js → chunk-O5F25NIE.js} +2 -2
- package/dist/{chunk-NXIMQY5W.js → chunk-ODUTYZIU.js} +5 -5
- package/dist/{chunk-LTIKRKFL.js → chunk-ONRTXOZY.js} +4 -4
- package/dist/{chunk-KFV5L5SK.js → chunk-OQM5IVJY.js} +118 -232
- package/dist/{chunk-XRZT5WY5.js → chunk-P5SC4DLJ.js} +4 -4
- package/dist/{chunk-R6Q67RJH.js → chunk-PECBKCDK.js} +34 -6
- package/dist/{chunk-33YXPOE3.js → chunk-PPEZJWUG.js} +2 -2
- package/dist/{chunk-RXTN6AKH.js → chunk-PWWSIB2A.js} +5 -5
- package/dist/{chunk-2STGEDFV.js → chunk-QEQISF75.js} +2 -2
- package/dist/{chunk-3DPEIQKN.js → chunk-QH3ZTUOA.js} +2 -2
- package/dist/{chunk-YAKGTXEV.js → chunk-QRFXEO6Y.js} +2 -2
- package/dist/{chunk-35MSIRKH.js → chunk-QUIJZSDW.js} +2 -2
- package/dist/{chunk-HHV2GANA.js → chunk-R2P2U3ZS.js} +2 -2
- package/dist/{chunk-2DSOYNFC.js → chunk-R6MAYTMS.js} +7 -7
- package/dist/{chunk-JQLNNIKT.js → chunk-R6MICQYU.js} +6 -6
- package/dist/{chunk-NAI6ZFCY.js → chunk-RLTT5GVY.js} +122 -11
- package/dist/{chunk-DT3LWJOB.js → chunk-RXIOCVBZ.js} +24 -6
- package/dist/{chunk-N56KALIC.js → chunk-S32UQ5GL.js} +61 -34
- package/dist/{chunk-UEPWCCTY.js → chunk-SBZX6ARC.js} +12 -12
- package/dist/chunk-SD7SHNDW.js +15 -0
- package/dist/{chunk-NRO2BJRH.js → chunk-SDWNDICN.js} +10235 -4015
- package/dist/{chunk-UXCU4E3T.js → chunk-SE4ZKILO.js} +6 -6
- package/dist/chunk-SL2RDHKO.js +19 -0
- package/dist/{chunk-NUGM5KR6.js → chunk-SRCEQKQS.js} +2 -2
- package/dist/{chunk-OMQNJVKW.js → chunk-SRZOW5L2.js} +43 -13
- package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
- package/dist/{chunk-V76WTFTW.js → chunk-T52TPHYC.js} +6 -6
- package/dist/{chunk-I7XBWTYH.js → chunk-T53XI6I7.js} +5 -5
- package/dist/{chunk-2ZSONWVL.js → chunk-T7FDXNRU.js} +13 -13
- package/dist/{chunk-JSD46VO2.js → chunk-TEG3RYVZ.js} +43 -36
- package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
- package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
- package/dist/{chunk-75W7L2E2.js → chunk-TZ7MFRG4.js} +1041 -162
- package/dist/{chunk-36CT5VVL.js → chunk-U2JOLB7O.js} +126 -77
- package/dist/{chunk-LL4KHSZI.js → chunk-U2MSJ57E.js} +2 -2
- package/dist/{chunk-FTMGRKEF.js → chunk-U44YYLVV.js} +4 -4
- package/dist/{chunk-YECAMM3D.js → chunk-U7H5WRG5.js} +5 -5
- package/dist/{chunk-RQCKCSRL.js → chunk-U7VQ4NI4.js} +22 -22
- package/dist/{chunk-5TUB6SLS.js → chunk-UFYNOQK4.js} +7 -7
- package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
- package/dist/{chunk-USR47QNF.js → chunk-UL36QJX6.js} +14 -14
- package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
- package/dist/{chunk-RAY4OVGZ.js → chunk-URBGEOH3.js} +5 -5
- package/dist/chunk-USZA7GWL.js +341 -0
- package/dist/{chunk-YD5GIKET.js → chunk-UTUNT5QL.js} +48 -579
- package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
- package/dist/{chunk-23L32XTI.js → chunk-UXAC2FX4.js} +68 -39
- package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
- package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
- package/dist/{chunk-EXLD33WO.js → chunk-VLPTKCKT.js} +24 -9
- package/dist/{chunk-336NSSKI.js → chunk-VNBICSS2.js} +2 -2
- package/dist/{chunk-VAVR4IJY.js → chunk-VQD7NH7Z.js} +3 -3
- package/dist/{chunk-LBMZMYH2.js → chunk-W2RJEH6Q.js} +3 -3
- package/dist/{chunk-7CR24IG7.js → chunk-WDV62RKY.js} +2 -2
- package/dist/{chunk-S6PYF2XF.js → chunk-WFKDPU7U.js} +4 -4
- package/dist/{chunk-BJVFZO5U.js → chunk-WJIMKGD6.js} +7 -7
- package/dist/{chunk-5636DCO5.js → chunk-WLMSOT73.js} +59 -12
- package/dist/{chunk-MXHC5QYU.js → chunk-WTQGRBHV.js} +5 -144
- package/dist/chunk-WXA2CFJO.js +23 -0
- package/dist/{chunk-QSNYB6ZV.js → chunk-XCUDZQLX.js} +3 -3
- package/dist/{chunk-4M6Z5QVF.js → chunk-XXBQKW32.js} +11 -11
- package/dist/{chunk-OEJSLEPW.js → chunk-YEJIG7LN.js} +332 -332
- package/dist/chunk-YGDMBK7O.js +567 -0
- package/dist/{chunk-4WR7VSYB.js → chunk-YYB3MC65.js} +23 -9
- package/dist/{chunk-2IR2NMPA.js → chunk-ZIDFQJRB.js} +2 -2
- package/dist/{chunk-Q4WO54TA.js → chunk-ZMZQEBKI.js} +14 -14
- package/dist/{chunk-6EJMN2Y3.js → chunk-ZTNFYMIO.js} +2 -2
- package/dist/{chunk-WEPFGWHJ.js → chunk-ZZFWWYLX.js} +2 -2
- package/dist/cli/index.js +44 -44
- package/dist/clio-5I2IBFYL.js +26 -0
- package/dist/{code-nav-IJR2DBPR.js → code-nav-YXIAEZVS.js} +48 -32
- package/dist/codewiki/build-worker.js +76 -29
- package/dist/{compile-cache-OQAVB7Y5.js → compile-cache-WJEPUZEJ.js} +4 -4
- package/dist/{components-2TGAI2RC.js → components-TNIKXCBH.js} +13 -13
- package/dist/{config-IUA6OYNS.js → config-Y2JDJ3JJ.js} +210 -124
- package/dist/configure-SML6UBZ5.js +55 -0
- package/dist/{context-4MPR7WKB.js → context-P5YSEO55.js} +125 -121
- package/dist/{context-2DKHWH2T.js → context-QQ53HSGJ.js} +91 -62
- package/dist/{context-BOYF5EJM.js → context-S2EEC3EJ.js} +62 -31
- package/dist/context-clear-TMEQCOTH.js +183 -0
- package/dist/{context-index-HNG3MOME.js → context-index-HP2JFUWA.js} +13 -11
- package/dist/{context-map-COB37XXN.js → context-map-INTXD54D.js} +71 -21
- package/dist/{context-working-set-3I3FYX6Y.js → context-working-set-CNLSQN5K.js} +31 -31
- package/dist/detail-5572VLBO.js +114 -0
- package/dist/{dispatch-runner-RJ5I2F2O.js → dispatch-runner-FRHD6P2O.js} +191 -116
- package/dist/{docs-SPOV3BAN.js → docs-BL7ROUFN.js} +4 -4
- package/dist/{doctor-DKICC2SN.js → doctor-N3LCM2LG.js} +58 -58
- package/dist/{eval-OQOQUDHK.js → eval-BUU3ZOUZ.js} +473 -168
- package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
- package/dist/evidence-DTGEN456.js +224 -0
- package/dist/{evidence-4DQ25GUQ.js → evidence-SQ5DNFEN.js} +110 -94
- package/dist/{evolve-GSS52E5J.js → evolve-IJNUFZDS.js} +107 -91
- package/dist/{extensions-G7MFLYHT.js → extensions-YVRHX6ZI.js} +16 -16
- package/dist/{fleet-Q37YHHAQ.js → fleet-ZNNVSYFO.js} +147 -147
- package/dist/{fleet-commands-G7E4N7SM.js → fleet-commands-5YE7NPJL.js} +27 -26
- package/dist/{fleet-decisions-O7M6QBA2.js → fleet-decisions-3SBSCTCW.js} +16 -15
- package/dist/{fleet-graph-TOUBW6OW.js → fleet-graph-6HHPWF5T.js} +39 -38
- package/dist/{fleet-inspect-SW33JJNI.js → fleet-inspect-JEYMGCGC.js} +107 -91
- package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
- package/dist/{fleet-preflight-CV2655TW.js → fleet-preflight-QRSHIIDE.js} +10 -9
- package/dist/{fleet-validate-KESZX2YH.js → fleet-validate-4PM4GDDL.js} +46 -42
- package/dist/{fleet-verify-UQPMTVE3.js → fleet-verify-NJDTHTO3.js} +105 -89
- package/dist/fleet-view-UP2BWQQY.js +117 -0
- package/dist/{init-PXEXQSBF.js → init-S3GZQ5ZF.js} +123 -123
- package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
- package/dist/{interop-ZG5T62U3.js → interop-YOTGXFJM.js} +25 -25
- package/dist/inventory-K2OZ36YJ.js +117 -0
- package/dist/{library-B2W4N74O.js → library-GJI6W6OK.js} +45 -44
- package/dist/{memory-YCANYS5A.js → memory-OQOXQGYD.js} +107 -93
- package/dist/{models-GERTU3YI.js → models-3IK2Y5WE.js} +63 -62
- package/dist/{monitor-CPNIUULB.js → monitor-FTJLTKCQ.js} +136 -107
- package/dist/{orchestrator-J4BSH4WQ.js → orchestrator-N47O7SFD.js} +1159 -697
- package/dist/{panes-BOHAEGYC.js → panes-7BTYH3XQ.js} +8 -8
- package/dist/{panes-NXSLDQZ2.js → panes-WPOMEMRH.js} +22 -22
- package/dist/{paths-VSUWNC22.js → paths-J3KN7UAO.js} +12 -12
- package/dist/preload-65U34NG6.js +115 -0
- package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
- package/dist/{reset-TNWTB5LU.js → reset-MUVQDLNL.js} +20 -20
- package/dist/{resources-4PXNMD5G.js → resources-LM76COAO.js} +41 -40
- package/dist/{run-D6XJ34CN.js → run-3VFZQ33N.js} +162 -156
- package/dist/{share-2NWMJJEE.js → share-4JUB4BL7.js} +43 -42
- package/dist/{skills-KR7WON5G.js → skills-S36AAJHU.js} +47 -46
- package/dist/{skills-eval-O2ZNOLDS.js → skills-eval-G6T57L7M.js} +127 -107
- package/dist/{skills-inventory-ZZOUBK7O.js → skills-inventory-WLM46PJH.js} +41 -40
- package/dist/slash-commands-GBARG3Y7.js +91 -0
- package/dist/{steer-XA25PSCS.js → steer-S7D7IKPU.js} +7 -7
- package/dist/{support-7EMVWYG2.js → support-5VAEC32W.js} +14 -14
- package/dist/{targets-OMH2XCSN.js → targets-N5REUETU.js} +145 -94
- package/dist/tasks-6BVY5YZF.js +36 -0
- package/dist/{terminal-lease-C2J3JYRE.js → terminal-lease-57UEOJKS.js} +12 -11
- package/dist/tools-6OCQ6SVB.js +28 -0
- package/dist/{trace-FXMXUZUF.js → trace-JHLXWUMN.js} +18 -17
- package/dist/{tree-sitter-HGKH6LG4.js → tree-sitter-AQUUOSYM.js} +6 -6
- package/dist/{tui-primitives-K5PASC3O.js → tui-primitives-RCY2HN7G.js} +3 -3
- package/dist/{uninstall-HALS6BLF.js → uninstall-FXYMFFRT.js} +17 -17
- package/dist/{upgrade-MS72RJEP.js → upgrade-4HD5HAIV.js} +40 -39
- package/dist/{usage-NHG6MCJM.js → usage-4GWM2WWP.js} +136 -105
- package/dist/{verifiers-7AUNVXDY.js → verifiers-GSKWKWVG.js} +28 -27
- package/dist/verify-3AS3ULCY.js +30 -0
- package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
- package/dist/{web-fetch-V4FKSDAV.js → web-fetch-MQN4FH3X.js} +169 -18
- package/dist/wiki-generate-7BV7XWIY.js +614 -0
- package/dist/{with-panes-BDQEWBRT.js → with-panes-OFTNAR4Y.js} +34 -20
- package/dist/worker/entry.js +99 -88
- package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
- package/docs/README.md +7 -6
- package/docs/architecture/acp.md +10 -0
- package/docs/architecture/architecture.md +5 -5
- package/docs/architecture/context-engine.md +44 -59
- package/docs/architecture/context-working-set.md +7 -9
- package/docs/architecture/dispatch-architecture-rationale.md +1 -1
- package/docs/architecture/evidence-and-memory.md +10 -0
- package/docs/architecture/pi-boundary.md +37 -7
- package/docs/architecture/prompt-envelope-and-tools.md +7 -7
- package/docs/architecture/session-lifecycle.md +4 -4
- package/docs/architecture/worker-dispatch-mechanics.md +4 -0
- package/docs/guide/commands-and-modes.md +49 -36
- package/docs/guide/configuration-and-targets.md +7 -2
- package/docs/guide/configuration-reference.md +13 -3
- package/docs/guide/environment-variables.md +6 -2
- package/docs/guide/fleet-dispatch.md +12 -0
- package/docs/guide/installation-and-lifecycle.md +35 -9
- package/docs/guide/proactive-memory.md +1 -1
- package/docs/guide/skills-marketplace.md +11 -3
- package/docs/guide/tool-usage.md +9 -2
- package/docs/process/development-pipeline.md +10 -10
- package/docs/process/documentation-guide.md +2 -2
- package/docs/process/eval-runner.md +15 -0
- package/docs/process/evals-internal.md +1 -1
- package/docs/process/release-cut-checklist.md +6 -6
- package/evals/README.md +4 -0
- package/evals/behavioral-corpus-grader.mjs +147 -14
- package/evals/behavioral-model-negative-control.yaml +1 -0
- package/evals/behavioral-model.yaml +266 -1
- package/evals/fixtures/docs-retrieval.json +102 -0
- package/evals/fixtures/scalar-decision.json +17 -0
- package/evals/fixtures/scout-citation-pipeline.json +55 -0
- package/evals/fixtures/source-explanation.json +74 -0
- package/evals/fixtures/tool-arguments.json +18 -0
- package/evals/fixtures/tool-surface/read.txt +4 -0
- package/evals/fixtures/tool-surface/subdir/keep.txt +1 -0
- package/evals/no-edit-memory-grader.mjs +149 -0
- package/evals/scalar-decision-grader.py +41 -0
- package/evals/scalar-decision-machinery.ts +145 -0
- package/evals/source-explanation-grader.mjs +118 -0
- package/evals/tool-surface-grader.mjs +53 -0
- package/evals/tool-surface-model.yaml +274 -0
- package/package.json +14 -14
- package/skills/README.md +6 -6
- package/skills/registry.yaml +1 -1
- package/skills/skill-marketplace.json +1 -1
- package/src/cli/bootstrap-generate.ts +6 -0
- package/src/cli/config-inspect.ts +24 -7
- package/src/cli/config-trust.ts +62 -0
- package/src/cli/config.ts +8 -0
- package/src/cli/context-map.ts +75 -14
- package/src/cli/context.ts +46 -17
- package/src/cli/eval.ts +17 -3
- package/src/cli/modes/print.ts +32 -4
- package/src/cli/run.ts +16 -14
- package/src/cli/skills-eval.ts +10 -8
- package/src/cli/steer-channel.ts +31 -18
- package/src/cli/targets.ts +83 -31
- package/src/cli/tasks.ts +10 -1
- package/src/cli/upgrade.ts +9 -6
- package/src/cli/usage.ts +24 -0
- package/src/cli/wiki-generate.ts +239 -96
- package/src/core/bash-exec.ts +43 -15
- package/src/core/bus-events.ts +15 -0
- package/src/core/config.ts +33 -14
- package/src/core/defaults.ts +5 -4
- package/src/core/file-references.ts +11 -1
- package/src/core/incomplete-installation.ts +3 -1
- package/src/core/settings-layers.ts +21 -5
- package/src/core/termination.ts +26 -9
- package/src/core/untrusted-content.ts +16 -0
- package/src/core/workspace-trust.ts +179 -0
- package/src/domains/agents/builtins/coder.md +4 -2
- package/src/domains/agents/builtins/context-bootstrap.md +3 -1
- package/src/domains/agents/builtins/documenter.md +7 -4
- package/src/domains/agents/builtins/researcher.md +1 -0
- package/src/domains/agents/builtins/scout.md +7 -1
- package/src/domains/agents/result-contract.ts +199 -26
- package/src/domains/context/bootstrap-prompt.ts +11 -9
- package/src/domains/context/bootstrap.ts +74 -39
- package/src/domains/context/clio-md.ts +88 -26
- package/src/domains/context/codewiki/build-operation.ts +121 -0
- package/src/domains/context/codewiki/build-worker-protocol.ts +37 -3
- package/src/domains/context/codewiki/build-worker.ts +3 -35
- package/src/domains/context/codewiki/coordinator.ts +36 -6
- package/src/domains/context/codewiki/indexer.ts +59 -19
- package/src/domains/context/contract.ts +6 -2
- package/src/domains/context/extension.ts +72 -10
- package/src/domains/context/fingerprint.ts +39 -34
- package/src/domains/context/index.ts +7 -1
- package/src/domains/context/prompt-context.ts +55 -14
- package/src/domains/context/refresh.ts +9 -57
- package/src/domains/context/wiki/assemble.ts +14 -10
- package/src/domains/context/wiki/evidence.ts +209 -0
- package/src/domains/context/wiki/generate.ts +201 -67
- package/src/domains/context/wiki/meta.ts +10 -2
- package/src/domains/context/wiki/plan-store.ts +70 -14
- package/src/domains/context/wiki/plan.ts +71 -14
- package/src/domains/context/wiki/prompts.ts +42 -1
- package/src/domains/context/wiki/source-content.ts +106 -0
- package/src/domains/context/wiki/staleness.ts +33 -22
- package/src/domains/context/working-set/contract.ts +8 -2
- package/src/domains/context/working-set/engine.ts +17 -4
- package/src/domains/context/working-set/fold.ts +15 -2
- package/src/domains/context/working-set/marker.ts +2 -1
- package/src/domains/context/working-set/project.ts +18 -7
- package/src/domains/context/working-set/recall.ts +82 -56
- package/src/domains/dispatch/active-route-planner.ts +6 -3
- package/src/domains/dispatch/admission-queue.ts +19 -7
- package/src/domains/dispatch/admission.ts +3 -3
- package/src/domains/dispatch/budget-envelope.ts +47 -82
- package/src/domains/dispatch/capacity-lease.ts +57 -19
- package/src/domains/dispatch/contract.ts +10 -2
- package/src/domains/dispatch/event-pump.ts +28 -7
- package/src/domains/dispatch/execution-role.ts +49 -2
- package/src/domains/dispatch/execution-scheduler.ts +2 -0
- package/src/domains/dispatch/extension.ts +190 -105
- package/src/domains/dispatch/fleet-run.ts +20 -0
- package/src/domains/dispatch/gate-role-prompts.ts +4 -2
- package/src/domains/dispatch/parallel-writers.ts +34 -0
- package/src/domains/dispatch/reservation-store.ts +8 -34
- package/src/domains/dispatch/route-approval.ts +3 -3
- package/src/domains/dispatch/route-observer.ts +4 -2
- package/src/domains/dispatch/route-quality.ts +6 -1
- package/src/domains/dispatch/types.ts +4 -3
- package/src/domains/dispatch/worker-spawn.ts +58 -21
- package/src/domains/dispatch/workspace-checkpoint.ts +57 -0
- package/src/domains/eval/compare/behavioral.ts +81 -14
- package/src/domains/eval/compare/compare.ts +15 -5
- package/src/domains/eval/compare/envelope.ts +12 -5
- package/src/domains/eval/metrics/context.ts +24 -1
- package/src/domains/eval/metrics/tracked.ts +4 -28
- package/src/domains/eval/reports/comparison.ts +9 -9
- package/src/domains/eval/runners/clio-run.ts +5 -1
- package/src/domains/eval/schema/suite.ts +2 -0
- package/src/domains/eval/schema/validate.ts +1 -0
- package/src/domains/eval/suites/run.ts +189 -13
- package/src/domains/eval/verifiers/integrity.ts +39 -0
- package/src/domains/eval/verifiers/patch.ts +58 -2
- package/src/domains/eval/workspaces/temp-copy.ts +3 -0
- package/src/domains/evidence/build.ts +4 -2
- package/src/domains/interop/registry.ts +2 -2
- package/src/domains/middleware/hooks-io.ts +45 -26
- package/src/domains/middleware/hooks.ts +6 -0
- package/src/domains/middleware/injection-screen.ts +23 -0
- package/src/domains/middleware/rules.ts +5 -1
- package/src/domains/middleware/stalled-turn.ts +18 -3
- package/src/domains/middleware/task-board-reminder.ts +4 -2
- package/src/domains/middleware/task-nudge.ts +4 -1
- package/src/domains/mux/contract.ts +34 -1
- package/src/domains/mux/dock-controller.ts +8 -1
- package/src/domains/mux/index.ts +1 -0
- package/src/domains/mux/socket-client.ts +13 -3
- package/src/domains/observability/contract.ts +2 -2
- package/src/domains/observability/projection.ts +30 -9
- package/src/domains/prompts/compiler.ts +10 -2
- package/src/domains/prompts/contract.ts +7 -4
- package/src/domains/prompts/extension.ts +28 -64
- package/src/domains/prompts/fragments/identity/clio.md +23 -0
- package/src/domains/prompts/fragments/operating/contract.md +10 -0
- package/src/domains/prompts/fragments/operating/delegation.md +5 -0
- package/src/domains/prompts/fragments/wiki/page.md +28 -15
- package/src/domains/prompts/fragments/wiki/plan.md +4 -4
- package/src/domains/prompts/preload-prefix.ts +31 -0
- package/src/domains/prompts/preload.ts +135 -61
- package/src/domains/providers/auth/backend-file.ts +15 -11
- package/src/domains/providers/auth/storage.ts +3 -5
- package/src/domains/providers/catalog.ts +18 -3
- package/src/domains/providers/runtime-resolution.ts +11 -9
- package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
- package/src/domains/resources/skills/promotion.ts +8 -1
- package/src/domains/safety/action-classifier.ts +9 -0
- package/src/domains/safety/autonomy.ts +10 -1
- package/src/domains/safety/contract.ts +5 -1
- package/src/domains/safety/default-path-policy.ts +11 -0
- package/src/domains/safety/extension.ts +11 -2
- package/src/domains/safety/policy-engine.ts +189 -32
- package/src/domains/safety/project-policy.ts +7 -2
- package/src/domains/safety/workspace-trust.ts +43 -0
- package/src/domains/session/compaction/compact.ts +384 -21
- package/src/domains/session/compaction/cut-point.ts +42 -5
- package/src/domains/session/compaction/tokens.ts +9 -1
- package/src/domains/session/decision-board.ts +43 -33
- package/src/domains/session/entries.ts +169 -4
- package/src/domains/session/prompt-manifest.ts +47 -8
- package/src/domains/session/task-board.ts +21 -3
- package/src/domains/user-tasks/handoff.ts +16 -0
- package/src/engine/acp/adapter.ts +44 -12
- package/src/engine/acp/server.ts +1 -0
- package/src/engine/acp/transport.ts +2 -1
- package/src/engine/acp/types.ts +6 -1
- package/src/engine/antigravity/subprocess-runtime.ts +20 -4
- package/src/engine/api-registry.ts +19 -2
- package/src/engine/apis/openai-completions.ts +13 -6
- package/src/engine/apis/output-budget.ts +26 -10
- package/src/engine/claude/sdk-runtime.ts +4 -3
- package/src/engine/env-api-keys.ts +2 -1
- package/src/engine/external-subprocess.ts +14 -3
- package/src/engine/loop-guard.ts +19 -2
- package/src/engine/provider-diagnostics.ts +129 -0
- package/src/engine/provider-payload.ts +3 -1
- package/src/engine/worker-runtime.ts +13 -2
- package/src/engine/worker-tools.ts +5 -1
- package/src/entry/extension-reload.ts +1 -0
- package/src/entry/orchestrator.ts +53 -15
- package/src/interactive/chat-loop-messages.ts +12 -4
- package/src/interactive/chat-loop.ts +115 -45
- package/src/interactive/chat-renderer.ts +60 -0
- package/src/interactive/context-recall-command.ts +2 -1
- package/src/interactive/dispatch-board.ts +17 -2
- package/src/interactive/editor-submit.ts +13 -0
- package/src/interactive/interactive-application.ts +8 -2
- package/src/interactive/interactive-event-projection.ts +7 -1
- package/src/interactive/interactive-presentation.ts +15 -7
- package/src/interactive/interactive-slash-runtime.ts +2 -0
- package/src/interactive/layout.ts +2 -1
- package/src/interactive/model-session-replay.ts +2 -2
- package/src/interactive/overlay-frame.ts +1 -0
- package/src/interactive/overlay-general-openers.ts +3 -1
- package/src/interactive/overlay-session-lifecycle.ts +6 -0
- package/src/interactive/overlays/ask-user.ts +1 -0
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/renderers/tool-execution.ts +17 -1
- package/src/interactive/renderers/worker-entry.ts +25 -10
- package/src/interactive/slash-commands.ts +9 -7
- package/src/interactive/turn-context.ts +221 -53
- package/src/interactive/turn-middleware.ts +3 -1
- package/src/interactive/turn-persistence.ts +3 -0
- package/src/interactive/turn-runtime.ts +11 -2
- package/src/interactive/turn-state.ts +10 -9
- package/src/interactive/watch-pane.ts +18 -4
- package/src/interactive/worker-stream.ts +7 -7
- package/src/tools/agent-tools.ts +6 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +9 -2
- package/src/tools/codewiki/code-nav.ts +4 -10
- package/src/tools/compete-judge-task.ts +71 -0
- package/src/tools/compete-worktrees.ts +34 -0
- package/src/tools/context/index.ts +32 -7
- package/src/tools/context/surface.ts +15 -4
- package/src/tools/decide.ts +1 -1
- package/src/tools/dispatch-admission.ts +12 -1
- package/src/tools/dispatch-arguments.ts +38 -1
- package/src/tools/dispatch-plan.ts +7 -7
- package/src/tools/dispatch-runner.ts +48 -32
- package/src/tools/dispatch-schema.ts +30 -23
- package/src/tools/dispatch-scout-admission.ts +10 -44
- package/src/tools/dispatch-scout.ts +2 -3
- package/src/tools/find.ts +13 -4
- package/src/tools/grep.ts +13 -1
- package/src/tools/ls.ts +7 -1
- package/src/tools/monitor.ts +26 -11
- package/src/tools/network-policy.ts +11 -24
- package/src/tools/observation.ts +39 -2
- package/src/tools/read.ts +112 -15
- package/src/tools/registry.ts +54 -17
- package/src/tools/result-shaping.ts +110 -2
- package/src/tools/tasks.ts +33 -7
- package/src/tools/verify/frontend.ts +67 -30
- package/src/tools/verify/numeric.ts +6 -1
- package/src/tools/web-fetch-network.ts +179 -0
- package/src/tools/web-fetch-surface.ts +2 -1
- package/src/tools/web-fetch.ts +15 -13
- package/src/tools/worker-evidence.ts +27 -0
- package/src/worker/spec-contract.ts +12 -8
- package/dist/builtins-WGALA46I.js +0 -22
- package/dist/chunk-2WZ546HR.js +0 -792
- package/dist/chunk-5PSMVOLM.js +0 -56
- package/dist/chunk-EL24TAU4.js +0 -1560
- package/dist/chunk-IZXGRF7P.js +0 -4048
- package/dist/chunk-JVCV3ICN.js +0 -47
- package/dist/chunk-MNJGS2IN.js +0 -33
- package/dist/chunk-O5CVSAG5.js +0 -122
- package/dist/chunk-ODGTEFFI.js +0 -50
- package/dist/chunk-OQE5J4C6.js +0 -73
- package/dist/chunk-UUVG37B4.js +0 -244
- package/dist/chunk-V6HJFQZE.js +0 -228
- package/dist/clio-QLICPCF5.js +0 -25
- package/dist/configure-VEPX4NMX.js +0 -55
- package/dist/context-clear-S4ZJCQUX.js +0 -182
- package/dist/detail-A7JAVSIG.js +0 -98
- package/dist/evidence-4F5USFKH.js +0 -208
- package/dist/fleet-view-MN2VG4MR.js +0 -101
- package/dist/inventory-C26CFDRR.js +0 -101
- package/dist/preload-P6DGH2PZ.js +0 -13
- package/dist/slash-commands-ZXPJD64J.js +0 -92
- package/dist/tasks-IPAGMEIX.js +0 -36
- package/dist/tools-EFFEAIDP.js +0 -28
- package/dist/verify-FWYGPKMR.js +0 -29
- 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 {
|
|
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
|
|
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
|
-
|
|
29
|
-
|
|
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.
|
|
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:
|
|
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)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
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
|
-
|
|
100
|
+
addSupport(`<wiki>${pages.length} pages at .clio-coder/wiki (start: quickstart.md)${suffix}</wiki>`);
|
|
67
101
|
}
|
|
68
|
-
return {
|
|
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 {
|
|
6
|
-
import {
|
|
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
|
|
18
|
-
*
|
|
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
|
|
39
|
-
*
|
|
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 = "
|
|
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 =
|
|
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
|
-
|
|
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,
|
|
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({
|
|
293
|
-
|
|
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
|
+
}
|