@iowarp/clio-coder 0.4.3 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +153 -0
- package/CONTRIBUTING.md +25 -15
- package/README.md +340 -27
- package/dist/{acp-H2NGRPWO.js → acp-H3CU2HBQ.js} +25 -25
- package/dist/{agents-TL5LLUQP.js → agents-IXQQZ7BD.js} +77 -75
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-E5SW4HMS.js → auth-R7KYF7N3.js} +38 -39
- package/dist/builtins-CRFDQUVP.js +22 -0
- package/dist/{chunk-7DRAWPTZ.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-5TSRNF4G.js → chunk-3T4DXWP6.js} +170 -12
- package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
- package/dist/{chunk-XIVNBFZS.js → chunk-4SVIVOMC.js} +208 -39
- package/dist/{chunk-NMJXSHBJ.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-5DDOTTG4.js +402 -0
- package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
- package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
- package/dist/{chunk-PUVDKJ2Y.js → chunk-5VTJP36Q.js} +5 -7
- package/dist/{chunk-JGRC33J2.js → chunk-5ZMXGW7P.js} +90 -9
- package/dist/chunk-5ZSZEYJK.js +119 -0
- package/dist/chunk-633EXGZA.js +44 -0
- package/dist/{chunk-IWT4SF4R.js → chunk-6CDNRHWH.js} +361 -89
- package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
- package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
- package/dist/{chunk-INY6HTFL.js → chunk-6SYEGZI3.js} +12 -12
- package/dist/{chunk-SKHCAU7K.js → chunk-6YA46L5A.js} +5 -4
- package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
- package/dist/{chunk-L47TF46W.js → chunk-7HBHHVCK.js} +24 -3
- package/dist/{chunk-DWUOQKRU.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-6PTFB5VS.js → chunk-7YJWEF2L.js} +59 -28
- 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-B6UM3OZC.js +15 -0
- package/dist/{chunk-MCEPRMZW.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-42FMPA75.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-WCXUNS7U.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-2UG5F4C5.js → chunk-DRD2A54W.js} +116 -52
- 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-IJNZMHLA.js → chunk-EHCPSZJF.js} +4 -4
- package/dist/{chunk-K6BSR66V.js → chunk-EHOSNVVM.js} +6 -2
- package/dist/{chunk-RRNP2ANY.js → chunk-EQEJJ53P.js} +10 -10
- package/dist/{chunk-GWZNEVM2.js → chunk-EWD5P3GK.js} +9 -9
- package/dist/{chunk-JKKCYP3C.js → chunk-F34AR6O3.js} +21 -15
- package/dist/{chunk-GHS5EBTQ.js → chunk-FKIOX6DS.js} +29 -20
- package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
- package/dist/{chunk-MWUZBSAQ.js → chunk-FSTIBAGM.js} +358 -63
- 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-JSC3U7TI.js → chunk-GJ24ODAX.js} +5 -5
- package/dist/{chunk-B4VEBZKF.js → chunk-GNQRWTMY.js} +139 -52
- package/dist/{chunk-5ICU3EUH.js → chunk-GVYWZNRK.js} +5 -5
- package/dist/chunk-GXCCHKN6.js +59 -0
- package/dist/{chunk-V2ANDPVT.js → chunk-HGSLRG33.js} +170 -8
- package/dist/{chunk-LLDJM5XK.js → chunk-HHVJNVUJ.js} +6 -6
- package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
- package/dist/{chunk-VA5FNYMT.js → chunk-HR3HPQ76.js} +42 -5
- package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
- package/dist/{chunk-OML5D5V5.js → chunk-I7VLWRK2.js} +8 -8
- package/dist/{chunk-VW6DOEDG.js → chunk-ICO4TQ2F.js} +16 -5
- package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
- package/dist/{chunk-WBKFA554.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-EKCHAPYA.js → chunk-K2HL3GBL.js} +4 -4
- package/dist/{chunk-N2Z7HLVY.js → chunk-K6RDB7IA.js} +28 -28
- package/dist/{chunk-TM6LQDI3.js → chunk-KDWLXVMN.js} +85 -335
- package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
- package/dist/{chunk-RSJ25QSL.js → chunk-KF6GFW6O.js} +217 -50
- 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-IUE3Y34X.js → chunk-KTFSFCVN.js} +20 -9
- package/dist/{chunk-7E7I3WLS.js → chunk-KYKNBD4Y.js} +36 -34
- package/dist/chunk-L4N3DWNW.js +539 -0
- package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
- package/dist/{chunk-JIEGK6UF.js → chunk-LTR5QCLS.js} +51 -7
- package/dist/chunk-LUL5Z66S.js +221 -0
- package/dist/chunk-LVFANMOH.js +466 -0
- 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-I7ZPNEJM.js → chunk-M6TAYK66.js} +8 -8
- package/dist/{chunk-NEKRRTYW.js → chunk-MC3JSVR6.js} +2 -2
- package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
- package/dist/chunk-MDU3C27C.js +674 -0
- package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
- package/dist/{chunk-4UVU7BJ5.js → chunk-NC4KV7EL.js} +6 -6
- package/dist/{chunk-JEQ3XTHC.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-UPZU6GE4.js → chunk-NY6IWDVU.js} +6 -6
- package/dist/chunk-O2RQ7LCK.js +283 -0
- package/dist/{chunk-4BJ5BYCE.js → chunk-O3VV6IVK.js} +2 -2
- package/dist/{chunk-W6GROXXM.js → chunk-O5F25NIE.js} +2 -2
- package/dist/{chunk-WRBAGUNF.js → chunk-ODUTYZIU.js} +5 -5
- package/dist/{chunk-E3TPLWFX.js → chunk-ONRTXOZY.js} +4 -4
- package/dist/{chunk-B4OAX3SI.js → chunk-OQM5IVJY.js} +118 -225
- 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-64I3JVYM.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-R6MAYTMS.js +108 -0
- package/dist/{chunk-MUW2BDDH.js → chunk-R6MICQYU.js} +6 -6
- package/dist/{chunk-JDAY6FIL.js → chunk-RLTT5GVY.js} +132 -17
- package/dist/{chunk-ZWPRK62N.js → chunk-RXIOCVBZ.js} +24 -6
- package/dist/{chunk-NIQJ66N4.js → chunk-S32UQ5GL.js} +62 -35
- package/dist/{chunk-AX2THNSA.js → chunk-SBZX6ARC.js} +12 -12
- package/dist/{chunk-TXOTCRLG.js → chunk-SD7SHNDW.js} +2 -2
- package/dist/{chunk-AF4YM7Z4.js → chunk-SDWNDICN.js} +10284 -3756
- 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-KKOJXO6R.js → chunk-SRZOW5L2.js} +46 -14
- package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
- package/dist/chunk-T52TPHYC.js +318 -0
- package/dist/{chunk-I7XBWTYH.js → chunk-T53XI6I7.js} +5 -5
- package/dist/{chunk-LDJG7DW3.js → chunk-T7FDXNRU.js} +13 -13
- package/dist/{chunk-XPWWI35G.js → chunk-TEG3RYVZ.js} +59 -41
- package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
- package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
- package/dist/{chunk-PAJQJ7BS.js → chunk-TZ7MFRG4.js} +1263 -835
- package/dist/{chunk-GI7YYQ3F.js → chunk-U2JOLB7O.js} +415 -83
- package/dist/{chunk-LL4KHSZI.js → chunk-U2MSJ57E.js} +2 -2
- package/dist/{chunk-FTMGRKEF.js → chunk-U44YYLVV.js} +4 -4
- package/dist/{chunk-CE5AX47J.js → chunk-U7H5WRG5.js} +5 -5
- package/dist/{chunk-G76U63X4.js → chunk-U7VQ4NI4.js} +22 -22
- package/dist/{chunk-7ZYNNDKC.js → chunk-UFYNOQK4.js} +7 -7
- package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
- package/dist/{chunk-QWGDJJYJ.js → chunk-UL36QJX6.js} +14 -14
- package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
- package/dist/{chunk-HEQY7ZFI.js → chunk-URBGEOH3.js} +5 -5
- package/dist/chunk-USZA7GWL.js +341 -0
- package/dist/{chunk-W6RRQCPQ.js → chunk-UTUNT5QL.js} +48 -579
- package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
- package/dist/{chunk-F5JHEYZM.js → chunk-UXAC2FX4.js} +73 -41
- package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
- package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
- package/dist/chunk-VLPTKCKT.js +396 -0
- 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-2UH2KFUP.js → chunk-WFKDPU7U.js} +4 -4
- package/dist/{chunk-ZDN3Y73Y.js → chunk-WJIMKGD6.js} +9 -51
- package/dist/{chunk-YQWYVTMC.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-2APPQIER.js → chunk-XXBQKW32.js} +11 -11
- package/dist/{chunk-2VIKGWFZ.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-54CBCGIR.js → chunk-ZMZQEBKI.js} +136 -81
- 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 +45 -44
- package/dist/clio-5I2IBFYL.js +26 -0
- package/dist/{code-nav-MDZNQS33.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-UCUQ4QXW.js → components-TNIKXCBH.js} +13 -14
- package/dist/{config-SVM5P5YI.js → config-Y2JDJ3JJ.js} +210 -119
- package/dist/configure-SML6UBZ5.js +55 -0
- package/dist/{context-2OHRKS42.js → context-P5YSEO55.js} +125 -115
- package/dist/{context-VNCR7KAG.js → context-QQ53HSGJ.js} +91 -62
- package/dist/{context-E3VC7RX5.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-VDS25HXZ.js → context-working-set-CNLSQN5K.js} +31 -31
- package/dist/detail-5572VLBO.js +114 -0
- package/dist/{dispatch-runner-5AHT53RF.js → dispatch-runner-FRHD6P2O.js} +214 -126
- package/dist/{docs-PD3EXDKU.js → docs-BL7ROUFN.js} +5 -7
- package/dist/{doctor-WNNVO6FY.js → doctor-N3LCM2LG.js} +89 -66
- package/dist/{eval-7G7SGAYO.js → eval-BUU3ZOUZ.js} +493 -197
- package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
- package/dist/evidence-DTGEN456.js +224 -0
- package/dist/{evidence-VD6736FQ.js → evidence-SQ5DNFEN.js} +114 -195
- package/dist/{evolve-AL3NGVRL.js → evolve-IJNUFZDS.js} +107 -88
- package/dist/{extensions-MOVJ32NM.js → extensions-YVRHX6ZI.js} +16 -17
- package/dist/{fleet-QZHUMAGI.js → fleet-ZNNVSYFO.js} +147 -141
- package/dist/{fleet-commands-BAYT5FJZ.js → fleet-commands-5YE7NPJL.js} +27 -23
- package/dist/{fleet-decisions-IREVMRU4.js → fleet-decisions-3SBSCTCW.js} +16 -15
- package/dist/{fleet-graph-YCTT3HTI.js → fleet-graph-6HHPWF5T.js} +39 -38
- package/dist/{fleet-inspect-QVJTDAVB.js → fleet-inspect-JEYMGCGC.js} +107 -87
- package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
- package/dist/{fleet-preflight-25QAFPK4.js → fleet-preflight-QRSHIIDE.js} +10 -10
- package/dist/{fleet-validate-5O57AAJ7.js → fleet-validate-4PM4GDDL.js} +46 -42
- package/dist/{fleet-verify-CPH2W2T6.js → fleet-verify-NJDTHTO3.js} +105 -85
- package/dist/fleet-view-UP2BWQQY.js +117 -0
- package/dist/{init-J477LKZH.js → init-S3GZQ5ZF.js} +123 -117
- package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
- package/dist/{interop-3FCM6XLG.js → interop-YOTGXFJM.js} +25 -26
- package/dist/inventory-K2OZ36YJ.js +117 -0
- package/dist/{library-QUQEIUG6.js → library-GJI6W6OK.js} +45 -45
- package/dist/{memory-SGGSEP65.js → memory-OQOXQGYD.js} +107 -90
- package/dist/{models-HEKUAXXK.js → models-3IK2Y5WE.js} +64 -65
- package/dist/{monitor-HKU57TYQ.js → monitor-FTJLTKCQ.js} +136 -101
- package/dist/{orchestrator-VDFAEFAI.js → orchestrator-N47O7SFD.js} +1442 -1671
- package/dist/{panes-DN2SSFOH.js → panes-7BTYH3XQ.js} +8 -8
- package/dist/{panes-TALGNPZT.js → panes-WPOMEMRH.js} +22 -23
- package/dist/{paths-NBMFAIEZ.js → paths-J3KN7UAO.js} +12 -13
- package/dist/preload-65U34NG6.js +115 -0
- package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
- package/dist/{reset-EAJFFJVB.js → reset-MUVQDLNL.js} +20 -21
- package/dist/{resources-OVKSEFVE.js → resources-LM76COAO.js} +41 -40
- package/dist/{run-7DP7ZF2J.js → run-3VFZQ33N.js} +168 -166
- package/dist/{share-WML67FT3.js → share-4JUB4BL7.js} +43 -43
- package/dist/{skills-SG662R2K.js → skills-S36AAJHU.js} +47 -47
- package/dist/{skills-eval-VVZEUU46.js → skills-eval-G6T57L7M.js} +127 -104
- package/dist/{skills-inventory-I2E23GET.js → skills-inventory-WLM46PJH.js} +41 -40
- package/dist/slash-commands-GBARG3Y7.js +91 -0
- package/dist/{steer-2LQOMCPB.js → steer-S7D7IKPU.js} +7 -7
- package/dist/{support-CC2UJBJ6.js → support-5VAEC32W.js} +14 -14
- package/dist/{targets-4QC3HIEW.js → targets-N5REUETU.js} +147 -98
- package/dist/tasks-6BVY5YZF.js +36 -0
- package/dist/{terminal-lease-TUHIJ6Y2.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-5PEVOE5B.js → uninstall-FXYMFFRT.js} +19 -20
- package/dist/{upgrade-M4WXY6KN.js → upgrade-4HD5HAIV.js} +49 -45
- package/dist/{usage-N7ZNVLEM.js → usage-4GWM2WWP.js} +143 -103
- package/dist/{verifiers-DJTP4XX6.js → verifiers-GSKWKWVG.js} +162 -28
- package/dist/verify-3AS3ULCY.js +30 -0
- package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
- package/dist/{web-fetch-MPARV2K7.js → web-fetch-MQN4FH3X.js} +169 -18
- package/dist/wiki-generate-7BV7XWIY.js +614 -0
- package/dist/{with-panes-4GCGSL7J.js → with-panes-OFTNAR4Y.js} +34 -20
- package/dist/worker/entry.js +99 -85
- package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
- package/docs/README.md +10 -8
- package/docs/architecture/acp.md +27 -0
- package/docs/architecture/architecture.md +5 -5
- package/docs/architecture/artifact-versions.md +1 -1
- 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/dispatch-typed-intent.md +1 -1
- package/docs/architecture/evidence-and-memory.md +11 -1
- package/docs/architecture/observability.md +7 -1
- package/docs/architecture/pi-boundary.md +37 -7
- package/docs/architecture/prompt-envelope-and-tools.md +22 -12
- package/docs/architecture/safety-model.md +10 -17
- package/docs/architecture/session-lifecycle.md +4 -4
- package/docs/architecture/tui-design.md +1 -1
- package/docs/architecture/worker-dispatch-mechanics.md +4 -0
- package/docs/guide/built-in-agents.md +8 -8
- package/docs/guide/commands-and-modes.md +66 -38
- package/docs/guide/configuration-and-targets.md +10 -3
- package/docs/guide/configuration-reference.md +23 -8
- package/docs/guide/environment-variables.md +8 -4
- 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 +87 -5
- package/docs/history/config-knobs-audit.md +2 -2
- package/docs/process/development-pipeline.md +15 -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/git-commit-provenance.md +15 -0
- package/docs/process/release-cut-checklist.md +207 -0
- package/docs/process/scientific-validation.md +18 -17
- package/evals/README.md +4 -0
- package/evals/behavioral-corpus-grader.mjs +147 -14
- package/evals/behavioral-machinery-support.ts +1 -0
- package/evals/behavioral-machinery.yaml +1 -1
- 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/coding/coding-standards/SKILL.md +14 -4
- package/skills/context/context-handoff/SKILL.md +3 -3
- package/skills/context/context-prime/SKILL.md +3 -3
- package/skills/planning/architecture/SKILL.md +5 -5
- package/skills/planning/backlog/SKILL.md +4 -4
- package/skills/planning/prd/SKILL.md +4 -3
- package/skills/planning/product-intent/SKILL.md +8 -8
- package/skills/planning/tech-spec/SKILL.md +4 -4
- package/skills/registry.yaml +33 -33
- package/skills/research/arxiv-literature/SKILL.md +3 -3
- package/skills/research/experiment-protocol/SKILL.md +3 -3
- package/skills/research/scientific-debugging/SKILL.md +3 -2
- package/skills/research/scientific-modernization/SKILL.md +3 -3
- package/skills/skill-marketplace.json +17 -17
- package/skills/workflow/cut-it/SKILL.md +3 -4
- package/skills/workflow/design-council/SKILL.md +5 -10
- package/skills/workflow/grill-me/SKILL.md +14 -15
- package/skills/workflow/workflow-distiller/SKILL.md +4 -4
- package/src/cli/args.ts +0 -8
- 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/configure.ts +2 -1
- package/src/cli/context-map.ts +75 -14
- package/src/cli/context.ts +46 -17
- package/src/cli/doctor-state-size.ts +1 -12
- package/src/cli/doctor-validation-contract.ts +28 -0
- package/src/cli/doctor.ts +5 -0
- package/src/cli/eval.ts +17 -3
- package/src/cli/evidence-detail.ts +1 -75
- package/src/cli/evidence-inventory.ts +1 -167
- package/src/cli/index.ts +2 -0
- package/src/cli/modes/print.ts +32 -4
- package/src/cli/run.ts +16 -16
- package/src/cli/skills-eval.ts +10 -8
- package/src/cli/steer-channel.ts +31 -18
- package/src/cli/targets.ts +84 -32
- package/src/cli/tasks.ts +93 -0
- package/src/cli/upgrade.ts +19 -11
- package/src/cli/usage.ts +30 -0
- package/src/cli/verifiers.ts +147 -1
- package/src/cli/wiki-generate.ts +240 -96
- package/src/core/bash-exec.ts +43 -15
- package/src/core/bus-events.ts +15 -0
- package/src/core/commit-attribution.ts +41 -1
- 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/git-commit-attribution.ts +46 -3
- package/src/core/incomplete-installation.ts +3 -1
- package/src/core/run-overrides.ts +0 -5
- package/src/core/settings-layers.ts +21 -5
- package/src/core/skill-activation.ts +3 -0
- package/src/core/termination.ts +26 -9
- package/src/core/tool-names.ts +5 -2
- package/src/core/untrusted-content.ts +16 -0
- package/src/core/workspace-trust.ts +179 -0
- package/src/domains/agents/builtins/architect.md +1 -1
- package/src/domains/agents/builtins/coder.md +5 -3
- package/src/domains/agents/builtins/context-bootstrap.md +3 -1
- package/src/domains/agents/builtins/documenter.md +8 -5
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/provenance.md +7 -7
- package/src/domains/agents/builtins/researcher.md +1 -0
- package/src/domains/agents/builtins/scout.md +7 -1
- package/src/domains/agents/builtins/tester.md +1 -1
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +4 -3
- 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 +97 -11
- 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 +12 -57
- package/src/domains/context/wiki/assemble.ts +14 -10
- package/src/domains/context/wiki/evidence.ts +209 -0
- package/src/domains/context/wiki/frontmatter.ts +5 -2
- package/src/domains/context/wiki/generate.ts +207 -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 +85 -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 +10 -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/code-step.ts +11 -4
- package/src/domains/dispatch/contract.ts +41 -9
- 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 +4 -0
- package/src/domains/dispatch/extension.ts +240 -132
- package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
- package/src/domains/dispatch/fleet-run.ts +21 -0
- package/src/domains/dispatch/gate-role-prompts.ts +4 -2
- package/src/domains/dispatch/host-verification.ts +114 -13
- package/src/domains/dispatch/intent.ts +28 -18
- package/src/domains/dispatch/orphan-recovery.ts +2 -0
- package/src/domains/dispatch/parallel-writers.ts +34 -0
- package/src/domains/dispatch/receipt-integrity.ts +4 -0
- package/src/domains/dispatch/reservation-store.ts +13 -37
- 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/state.ts +15 -2
- package/src/domains/dispatch/types.ts +21 -5
- 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 +17 -10
- package/src/domains/eval/runners/context-index.ts +2 -7
- package/src/domains/eval/runners/context-init.ts +3 -6
- package/src/domains/eval/runners/external-command.ts +29 -11
- 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 +106 -17
- package/src/domains/evidence/detail.ts +69 -0
- package/src/domains/evidence/eval.ts +13 -1
- package/src/domains/evidence/finish-contract-map.ts +5 -1
- package/src/domains/evidence/inventory.ts +167 -0
- package/src/domains/evidence/store.ts +16 -0
- package/src/domains/evidence/types.ts +12 -0
- package/src/domains/extensions/resources.ts +7 -0
- 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/marketplace-offer.ts +20 -1
- package/src/domains/middleware/rules.ts +5 -1
- package/src/domains/middleware/runtime.ts +7 -3
- 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/detect.ts +3 -6
- 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/accountability.ts +15 -1
- package/src/domains/observability/contract.ts +54 -9
- package/src/domains/observability/evidence-index.ts +10 -0
- package/src/domains/observability/extension.ts +9 -5
- package/src/domains/observability/projection.ts +423 -53
- package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
- 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 +12 -0
- package/src/domains/prompts/fragments/operating/delegation.md +5 -0
- package/src/domains/prompts/fragments/wiki/page.md +36 -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/model-discovery.ts +1 -4
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +16 -14
- package/src/domains/providers/runtime-resolution.ts +11 -9
- package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
- package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
- package/src/domains/providers/support.ts +1 -1
- package/src/domains/providers/types/runtime-descriptor.ts +1 -1
- package/src/domains/resources/skills/promotion.ts +8 -1
- package/src/domains/safety/action-classifier.ts +16 -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 +13 -0
- package/src/domains/safety/extension.ts +11 -2
- package/src/domains/safety/finish-contract-registration.ts +29 -14
- package/src/domains/safety/finish-contract.ts +252 -40
- package/src/domains/safety/index.ts +20 -1
- package/src/domains/safety/policy-engine.ts +211 -34
- package/src/domains/safety/project-policy.ts +7 -2
- package/src/domains/safety/rigor.ts +53 -39
- package/src/domains/safety/validation-contract.ts +388 -0
- package/src/domains/safety/workspace-trust.ts +43 -0
- package/src/domains/session/archive-readers.ts +10 -1
- 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 +137 -28
- package/src/domains/session/entries.ts +213 -11
- package/src/domains/session/extension.ts +4 -4
- package/src/domains/session/handoff.ts +2 -1
- package/src/domains/session/manager.ts +2 -3
- package/src/domains/session/prompt-manifest.ts +47 -8
- package/src/domains/session/task-board.ts +32 -1
- package/src/domains/session/tree/fork.ts +1 -2
- package/src/domains/session/tree/navigator.ts +1 -1
- package/src/domains/user-tasks/acceptance.ts +56 -0
- package/src/domains/user-tasks/active-acceptance.ts +40 -0
- package/src/domains/user-tasks/handoff.ts +16 -0
- package/src/domains/user-tasks/store.ts +34 -3
- package/src/engine/acp/adapter.ts +60 -10
- package/src/engine/acp/server.ts +22 -4
- package/src/engine/acp/transport.ts +55 -9
- package/src/engine/acp/types.ts +9 -0
- package/src/engine/antigravity/subprocess-runtime.ts +20 -4
- package/src/engine/api-registry.ts +19 -2
- package/src/engine/apis/ollama-native.ts +15 -0
- 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/claude/subprocess-runtime.ts +107 -60
- package/src/engine/env-api-keys.ts +2 -1
- package/src/engine/external-subprocess.ts +26 -7
- 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 +64 -17
- 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 +58 -714
- package/src/interactive/editor-submit.ts +13 -0
- package/src/interactive/fleet-run-preview.ts +2 -1
- package/src/interactive/interactive-application.ts +11 -4
- package/src/interactive/interactive-event-projection.ts +7 -1
- package/src/interactive/interactive-presentation.ts +63 -12
- package/src/interactive/interactive-slash-runtime.ts +4 -1
- package/src/interactive/layout.ts +2 -1
- package/src/interactive/model-session-replay.ts +2 -2
- package/src/interactive/oracle.ts +5 -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/fleet-run-approval.ts +3 -2
- package/src/interactive/overlays/message-picker.ts +3 -3
- package/src/interactive/overlays/settings.ts +2 -2
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/renderers/branch-summary.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-autocomplete.ts +4 -6
- package/src/interactive/slash-commands.ts +31 -43
- package/src/interactive/slash-spec.ts +28 -0
- 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/view/artifacts.ts +2 -0
- package/src/interactive/watch-pane.ts +18 -4
- package/src/interactive/worker-stream.ts +14 -10
- package/src/tools/agent-tools.ts +6 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +40 -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 +41 -1
- package/src/tools/context/index.ts +32 -7
- package/src/tools/context/surface.ts +15 -4
- package/src/tools/core-bootstrap.ts +16 -0
- package/src/tools/decide.ts +136 -0
- package/src/tools/dispatch-admission.ts +33 -1
- package/src/tools/dispatch-arguments.ts +38 -1
- package/src/tools/dispatch-plan.ts +12 -9
- package/src/tools/dispatch-runner.ts +63 -33
- 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/dispatch-types.ts +6 -0
- package/src/tools/evidence.ts +96 -0
- package/src/tools/find.ts +13 -4
- package/src/tools/grep.ts +13 -1
- package/src/tools/limitation.ts +76 -0
- 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/policy.ts +9 -0
- package/src/tools/presentation.ts +3 -0
- package/src/tools/read.ts +112 -15
- package/src/tools/registry.ts +55 -18
- package/src/tools/result-shaping.ts +127 -7
- package/src/tools/task-worktree.ts +13 -3
- package/src/tools/tasks.ts +40 -5
- package/src/tools/verify/authoring.ts +170 -83
- package/src/tools/verify/catalog.ts +122 -5
- package/src/tools/verify/frontend.ts +67 -30
- package/src/tools/verify/index.ts +2 -1
- package/src/tools/verify/numeric.ts +303 -0
- package/src/tools/verify/perf.ts +143 -0
- package/src/tools/verify/scripts.ts +229 -2
- 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-IA7V7FUC.js +0 -22
- package/dist/chunk-2WZ546HR.js +0 -792
- package/dist/chunk-5PSMVOLM.js +0 -56
- package/dist/chunk-7DICMOS6.js +0 -313
- package/dist/chunk-BEPZRGGU.js +0 -1560
- package/dist/chunk-JVCV3ICN.js +0 -47
- package/dist/chunk-KK4JZPBQ.js +0 -3982
- package/dist/chunk-MNJGS2IN.js +0 -33
- package/dist/chunk-NDINPTJ4.js +0 -641
- package/dist/chunk-O5CVSAG5.js +0 -122
- package/dist/chunk-OQE5J4C6.js +0 -73
- package/dist/chunk-RVG5JXAL.js +0 -41
- package/dist/chunk-T56WDKA5.js +0 -183
- package/dist/chunk-UUVG37B4.js +0 -244
- package/dist/chunk-VPKWYKEY.js +0 -169
- package/dist/chunk-Y3CBHOR6.js +0 -228
- package/dist/clio-CMMK4KRR.js +0 -25
- package/dist/configure-LE3IK2TJ.js +0 -56
- package/dist/context-clear-BW4O37TG.js +0 -176
- package/dist/fleet-view-SWBR3VGQ.js +0 -97
- package/dist/preload-P6DGH2PZ.js +0 -13
- package/dist/slash-commands-S7MBJDQK.js +0 -83
- package/dist/tools-TFGJICCU.js +0 -29
- package/dist/verify-RWE4PPEK.js +0 -27
- package/dist/wiki-generate-C7IQOXSP.js +0 -469
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* everything reports the same columns.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import { existsSync
|
|
14
|
+
import { existsSync } from "node:fs";
|
|
15
15
|
import { basename, join } from "node:path";
|
|
16
16
|
import type { ClioSettings } from "../core/config.js";
|
|
17
17
|
import { resolvePackageRoot } from "../core/package-root.js";
|
|
@@ -32,8 +32,9 @@ import {
|
|
|
32
32
|
readHookSources,
|
|
33
33
|
readPersistedHookReceipts,
|
|
34
34
|
} from "../domains/middleware/index.js";
|
|
35
|
-
import {
|
|
35
|
+
import { selectProjectPreload } from "../domains/prompts/preload.js";
|
|
36
36
|
import { defaultScopedResourceRoots } from "../domains/resources/common-loader.js";
|
|
37
|
+
import { createSafetyPolicyEngine } from "../domains/safety/policy-engine.js";
|
|
37
38
|
import { ceilChars } from "../domains/session/context-accounting.js";
|
|
38
39
|
import { capturedHookSourcesFor } from "../entry/extension-hook-sources.js";
|
|
39
40
|
|
|
@@ -120,9 +121,9 @@ function inspectClioMd(cwd: string, graph: CustomizationGraph): void {
|
|
|
120
121
|
if (loaded.files.length === 0) return;
|
|
121
122
|
try {
|
|
122
123
|
const promptContext = renderPromptContext(cwd);
|
|
123
|
-
const preload =
|
|
124
|
-
for (const [index, file] of
|
|
125
|
-
const text =
|
|
124
|
+
const preload = selectProjectPreload(promptContext, null).classification;
|
|
125
|
+
for (const [index, file] of promptContext.handbookSources.entries()) {
|
|
126
|
+
const text = file.source;
|
|
126
127
|
graph.entries.push({
|
|
127
128
|
category: "clio-md",
|
|
128
129
|
id: basename(file.path),
|
|
@@ -130,15 +131,19 @@ function inspectClioMd(cwd: string, graph: CustomizationGraph): void {
|
|
|
130
131
|
sourcePath: file.path,
|
|
131
132
|
hash: shortHash(text),
|
|
132
133
|
trust: "trusted",
|
|
133
|
-
precedence:
|
|
134
|
+
precedence: promptContext.handbookSources.length === 1 ? "single" : "layer",
|
|
134
135
|
reloadClass: "next-turn",
|
|
135
136
|
contextCostTokens: ceilChars(text.length),
|
|
136
137
|
detail: {
|
|
137
138
|
layer: index + 1,
|
|
138
|
-
layers:
|
|
139
|
+
layers: promptContext.handbookSources.length,
|
|
139
140
|
preload: preload.label,
|
|
140
141
|
preloadChars: preload.chars,
|
|
141
142
|
preloadLines: preload.lines,
|
|
143
|
+
preloadIncludedChars: preload.includedChars ?? 0,
|
|
144
|
+
preloadIncludedLines: preload.includedLines ?? 0,
|
|
145
|
+
preloadSourceIncludedChars: preload.sources?.[index]?.includedChars ?? 0,
|
|
146
|
+
preloadSourceHash: preload.sources?.[index]?.contentHash ?? "",
|
|
142
147
|
...(preload.nearLimit ? { preloadNearLimit: true } : {}),
|
|
143
148
|
},
|
|
144
149
|
});
|
|
@@ -367,6 +372,18 @@ function inspectResourceRoots(cwd: string, graph: CustomizationGraph): void {
|
|
|
367
372
|
function inspectSafetyAndMemory(cwd: string, graph: CustomizationGraph): void {
|
|
368
373
|
try {
|
|
369
374
|
const layered = readLayeredSettings(cwd);
|
|
375
|
+
const metadata = createSafetyPolicyEngine({ cwd }).metadata();
|
|
376
|
+
graph.entries.push({
|
|
377
|
+
category: "safety",
|
|
378
|
+
id: "safety.policy",
|
|
379
|
+
scope: "effective",
|
|
380
|
+
reloadClass: "next-turn",
|
|
381
|
+
trust: metadata.workspaceTrustVerdict === "trusted" ? "trusted" : "untrusted",
|
|
382
|
+
precedence: "single",
|
|
383
|
+
...(metadata.projectPolicyPath === null ? {} : { sourcePath: metadata.projectPolicyPath }),
|
|
384
|
+
detail: { ...metadata },
|
|
385
|
+
});
|
|
386
|
+
|
|
370
387
|
graph.entries.push({
|
|
371
388
|
category: "safety",
|
|
372
389
|
id: "safety.autonomy",
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import {
|
|
2
|
+
captureProjectSurface,
|
|
3
|
+
type ProjectTrustSurface,
|
|
4
|
+
recordProjectSurfaceTrust,
|
|
5
|
+
revokeProjectSurfaceTrust,
|
|
6
|
+
} from "../core/workspace-trust.js";
|
|
7
|
+
import { printError } from "./shared.js";
|
|
8
|
+
|
|
9
|
+
const SURFACES: ReadonlyArray<ProjectTrustSurface> = ["safety", "hooks", "settings"];
|
|
10
|
+
|
|
11
|
+
/** Review is read-only. Approval names the digest the operator reviewed, so edits cannot borrow stale consent. */
|
|
12
|
+
export function runConfigTrustCommand(args: ReadonlyArray<string>, cwd = process.cwd()): number {
|
|
13
|
+
const surface = args[0] as ProjectTrustSurface | undefined;
|
|
14
|
+
if (surface === undefined || !SURFACES.includes(surface)) {
|
|
15
|
+
printError("usage: clio-coder config trust safety|hooks|settings [--json | --hash SHA256 | --revoke]");
|
|
16
|
+
return 2;
|
|
17
|
+
}
|
|
18
|
+
const rest = args.slice(1);
|
|
19
|
+
const preview = rest.length === 0 || (rest.length === 1 && rest[0] === "--json");
|
|
20
|
+
const revoke = rest.length === 1 && rest[0] === "--revoke";
|
|
21
|
+
const approve = rest.length === 2 && rest[0] === "--hash" && /^[a-f0-9]{64}$/.test(rest[1] ?? "");
|
|
22
|
+
if (!preview && !revoke && !approve) {
|
|
23
|
+
printError("trust expects --json, --revoke, or --hash followed by the full reviewed SHA-256 digest");
|
|
24
|
+
return 2;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
if (revoke) {
|
|
28
|
+
revokeProjectSurfaceTrust(cwd, surface);
|
|
29
|
+
process.stdout.write(
|
|
30
|
+
`Project ${surface} trust revoked. Restart to reload settings and safety; project hooks stop before their next execution.\n`,
|
|
31
|
+
);
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
const snapshot = captureProjectSurface(cwd, surface);
|
|
35
|
+
if (preview) {
|
|
36
|
+
// JSON escapes terminal control sequences in repository-controlled text.
|
|
37
|
+
process.stdout.write(`${JSON.stringify(snapshot, null, 2)}\n`);
|
|
38
|
+
if (rest[0] !== "--json" && snapshot.contentHash !== null && snapshot.files.some((file) => file.text !== null)) {
|
|
39
|
+
process.stdout.write(
|
|
40
|
+
`Review the captured files above. Approve exactly these bytes with:\nclio-coder config trust ${surface} --hash ${snapshot.contentHash}\n`,
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
if (snapshot.contentHash === null || !snapshot.files.some((file) => file.text !== null)) {
|
|
46
|
+
printError(`no readable project ${surface} files to approve`);
|
|
47
|
+
return 1;
|
|
48
|
+
}
|
|
49
|
+
if (snapshot.contentHash !== rest[1]) {
|
|
50
|
+
printError(`project ${surface} changed since review; inspect it again before approving`);
|
|
51
|
+
return 1;
|
|
52
|
+
}
|
|
53
|
+
recordProjectSurfaceTrust(snapshot.workspaceRoot, surface, snapshot.contentHash);
|
|
54
|
+
process.stdout.write(
|
|
55
|
+
`Project ${surface} approved for ${snapshot.workspaceRoot} at ${snapshot.contentHash}. Restart to reload settings and safety; reload extensions to register newly approved hooks.\n`,
|
|
56
|
+
);
|
|
57
|
+
return 0;
|
|
58
|
+
} catch (error) {
|
|
59
|
+
printError(error instanceof Error ? error.message : String(error));
|
|
60
|
+
return 1;
|
|
61
|
+
}
|
|
62
|
+
}
|
package/src/cli/config.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { buildCustomizationGraph, type CustomizationEntry } from "./config-inspect.js";
|
|
2
|
+
import { runConfigTrustCommand } from "./config-trust.js";
|
|
2
3
|
import { printError } from "./shared.js";
|
|
3
4
|
|
|
4
5
|
const HELP = `clio-coder config inspect [--json]
|
|
6
|
+
clio-coder config trust safety|hooks|settings [--json | --hash SHA256 | --revoke]
|
|
5
7
|
|
|
6
8
|
Print the effective-customization graph: what settings, context files, rules,
|
|
7
9
|
skills, prompts, agents, fleets, extensions, safety, memory, hooks, and the operator
|
|
@@ -10,6 +12,10 @@ context cost. Read-only; nothing is created.
|
|
|
10
12
|
|
|
11
13
|
This is the "why is Clio behaving this way" surface. Parse the --json form in
|
|
12
14
|
scripts instead of the table.
|
|
15
|
+
|
|
16
|
+
Trust previews show the captured project files and their digest. Approve only
|
|
17
|
+
the reviewed digest with --hash, or remove a surface's approval with --revoke.
|
|
18
|
+
Settings and safety reload on restart; project hooks also check trust before execution.
|
|
13
19
|
`;
|
|
14
20
|
|
|
15
21
|
function renderText(cwd: string): string {
|
|
@@ -37,6 +43,7 @@ function renderText(cwd: string): string {
|
|
|
37
43
|
const precedence = entry.precedence ? `, ${entry.precedence}` : "";
|
|
38
44
|
out.push(` ${entry.id} [${entry.scope}${precedence}, reload:${entry.reloadClass}${hash}${cost}]`);
|
|
39
45
|
if (entry.sourcePath) out.push(` from ${entry.sourcePath}`);
|
|
46
|
+
if (entry.id === "safety.policy" && entry.detail !== undefined) out.push(` ${JSON.stringify(entry.detail)}`);
|
|
40
47
|
}
|
|
41
48
|
out.push("");
|
|
42
49
|
}
|
|
@@ -56,6 +63,7 @@ export function runConfigCommand(args: ReadonlyArray<string> = []): number {
|
|
|
56
63
|
}
|
|
57
64
|
const positional = args.filter((arg) => !arg.startsWith("-"));
|
|
58
65
|
const sub = positional[0] ?? "inspect";
|
|
66
|
+
if (sub === "trust") return runConfigTrustCommand(args.slice(1));
|
|
59
67
|
if (sub !== "inspect") {
|
|
60
68
|
printError(`unknown config subcommand: ${sub}`);
|
|
61
69
|
process.stderr.write(HELP);
|
package/src/cli/configure.ts
CHANGED
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
type WorkerPermissionMode,
|
|
21
21
|
} from "../core/defaults.js";
|
|
22
22
|
import { initializeClioHome } from "../core/init.js";
|
|
23
|
+
import { warnLegacyNaming } from "../core/naming-compat.js";
|
|
23
24
|
import { resolveClioDirs } from "../core/xdg.js";
|
|
24
25
|
import { getVersionInfo } from "../domains/lifecycle/version.js";
|
|
25
26
|
import { openAuthStorage, targetRequiresAuth } from "../domains/providers/auth/index.js";
|
|
@@ -2113,7 +2114,7 @@ export async function runConfigureCommand(
|
|
|
2113
2114
|
return 2;
|
|
2114
2115
|
}
|
|
2115
2116
|
if (runtimeId === "lmstudio-native" && runtime.id === "lmstudio") {
|
|
2116
|
-
|
|
2117
|
+
warnLegacyNaming(runtimeId, runtime.id);
|
|
2117
2118
|
}
|
|
2118
2119
|
}
|
|
2119
2120
|
const hasTargetSetupFlag =
|
package/src/cli/context-map.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { execFileSync } from "node:child_process";
|
|
2
|
-
import {
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
4
|
import path from "node:path";
|
|
4
5
|
import { CLIO_ARTIFACT_DIR } from "../core/artifact-paths.js";
|
|
5
|
-
import {
|
|
6
|
+
import { type CodewikiCoordinatedResult, coordinateCodewikiWrite } from "../domains/context/codewiki/coordinator.js";
|
|
7
|
+
import type { Codewiki } from "../domains/context/codewiki/schema.js";
|
|
6
8
|
import { buildArchitectureSeed, serializeArchitectureSeed } from "../domains/context/wiki/map-seed.js";
|
|
7
9
|
|
|
8
10
|
const HELP = `Usage:
|
|
@@ -11,7 +13,8 @@ const HELP = `Usage:
|
|
|
11
13
|
Write an archify architecture seed for the current repository from the codewiki
|
|
12
14
|
index, without model calls. The seed is the starting spec for the archify skill:
|
|
13
15
|
components are the largest directory areas, connections are collapsed import
|
|
14
|
-
edges
|
|
16
|
+
edges. The index is reconciled with current files before mapping; sources are
|
|
17
|
+
pinned only when clean Git evidence matches those files.
|
|
15
18
|
|
|
16
19
|
Options:
|
|
17
20
|
--out <path> where to write the seed (default: ${CLIO_ARTIFACT_DIR}/maps/<repo>.architecture.json)
|
|
@@ -28,21 +31,53 @@ function gitValue(cwd: string, args: string[]): string | null {
|
|
|
28
31
|
const out = execFileSync("git", args, { cwd, timeout: 5000, stdio: ["ignore", "pipe", "ignore"] })
|
|
29
32
|
.toString("utf8")
|
|
30
33
|
.trim();
|
|
31
|
-
return out
|
|
34
|
+
return out;
|
|
32
35
|
} catch {
|
|
33
36
|
return null;
|
|
34
37
|
}
|
|
35
38
|
}
|
|
36
39
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
type SourceState = "clean" | "dirty" | "unknown";
|
|
41
|
+
|
|
42
|
+
/** A successful empty status means clean; unavailable Git evidence never does. */
|
|
43
|
+
function repositoryFacts(
|
|
44
|
+
cwd: string,
|
|
45
|
+
codewiki: Codewiki,
|
|
46
|
+
indexedHead: string | null,
|
|
47
|
+
): { sourceState: SourceState; repository?: { url: string; revision: string } } {
|
|
40
48
|
const revision = gitValue(cwd, ["rev-parse", "--verify", "HEAD"]);
|
|
41
|
-
|
|
49
|
+
const status = gitValue(cwd, ["status", "--porcelain", "--untracked-files=normal"]);
|
|
50
|
+
if (!revision || status === null) return { sourceState: "unknown" };
|
|
51
|
+
if (status !== "" || revision !== indexedHead) return { sourceState: "dirty" };
|
|
52
|
+
// Source paths in the seed are workspace-relative. A nested workspace has
|
|
53
|
+
// no proven repository-relative path mapping, so cannot supply citations.
|
|
54
|
+
if (gitValue(cwd, ["rev-parse", "--show-prefix"]) !== "") return { sourceState: "unknown" };
|
|
55
|
+
const tree = gitValue(cwd, ["ls-tree", "-r", "-z", revision]);
|
|
56
|
+
if (tree === null) return { sourceState: "unknown" };
|
|
57
|
+
const blobs = new Map<string, string>();
|
|
58
|
+
for (const entry of tree.split("\0")) {
|
|
59
|
+
const match = /^100[0-7]{3} blob ([a-f0-9]{40})\t([\s\S]+)$/.exec(entry);
|
|
60
|
+
if (match) blobs.set(match[2] as string, match[1] as string);
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
for (const file of codewiki.files) {
|
|
64
|
+
const contents = readFileSync(path.join(cwd, file.path));
|
|
65
|
+
// Verify both parser input identity and immutable Git blob identity.
|
|
66
|
+
// This also catches ignored/untracked inputs and assume-unchanged files
|
|
67
|
+
// that a successful `git status` alone cannot certify.
|
|
68
|
+
const indexedHash = createHash("sha256").update(contents.toString("utf8")).digest("hex").slice(0, 16);
|
|
69
|
+
const blob = createHash("sha1").update(`blob ${contents.length}\0`).update(contents).digest("hex");
|
|
70
|
+
if (indexedHash !== file.hash || blobs.get(file.path) !== blob) return { sourceState: "dirty" };
|
|
71
|
+
}
|
|
72
|
+
} catch {
|
|
73
|
+
return { sourceState: "unknown" };
|
|
74
|
+
}
|
|
75
|
+
const remote = gitValue(cwd, ["remote", "get-url", "origin"]);
|
|
76
|
+
if (!remote) return { sourceState: "clean" };
|
|
42
77
|
let url = remote.endsWith(".git") ? remote.slice(0, -4) : remote;
|
|
43
78
|
const ssh = /^git@([^:]+):(.+)$/.exec(url);
|
|
44
79
|
if (ssh) url = `https://${ssh[1]}/${ssh[2]}`;
|
|
45
|
-
return { url, revision };
|
|
80
|
+
return { sourceState: "clean", repository: { url, revision } };
|
|
46
81
|
}
|
|
47
82
|
|
|
48
83
|
export async function runContextMapCommand(args: string[]): Promise<number> {
|
|
@@ -72,16 +107,40 @@ export async function runContextMapCommand(args: string[]): Promise<number> {
|
|
|
72
107
|
return 2;
|
|
73
108
|
}
|
|
74
109
|
const cwd = process.cwd();
|
|
75
|
-
|
|
76
|
-
|
|
110
|
+
let reconciled: CodewikiCoordinatedResult | null;
|
|
111
|
+
try {
|
|
112
|
+
reconciled = await coordinateCodewikiWrite(
|
|
113
|
+
cwd,
|
|
114
|
+
(current, workspace) =>
|
|
115
|
+
current
|
|
116
|
+
? {
|
|
117
|
+
kind: "ensure",
|
|
118
|
+
cwd: workspace,
|
|
119
|
+
current,
|
|
120
|
+
language: current.language,
|
|
121
|
+
// Map evidence must reconcile actual inputs, even if a state file
|
|
122
|
+
// happens to carry a matching fingerprint from another operation.
|
|
123
|
+
previous: null,
|
|
124
|
+
}
|
|
125
|
+
: null,
|
|
126
|
+
{ requireExisting: true },
|
|
127
|
+
);
|
|
128
|
+
} catch (error) {
|
|
129
|
+
process.stderr.write(
|
|
130
|
+
`clio-coder context map: index refresh failed: ${error instanceof Error ? error.message : String(error)}\n`,
|
|
131
|
+
);
|
|
132
|
+
return 1;
|
|
133
|
+
}
|
|
134
|
+
if (!reconciled) {
|
|
77
135
|
process.stderr.write(
|
|
78
136
|
"clio-coder context map: no codewiki index in .clio-coder/codewiki.json; run `clio-coder context index` first\n",
|
|
79
137
|
);
|
|
80
138
|
return 1;
|
|
81
139
|
}
|
|
82
|
-
const
|
|
140
|
+
const facts = repositoryFacts(cwd, reconciled.codewiki, reconciled.worker.fingerprint.gitHead);
|
|
141
|
+
const seed = buildArchitectureSeed(reconciled.codewiki, {
|
|
83
142
|
title: path.basename(cwd),
|
|
84
|
-
repository:
|
|
143
|
+
repository: facts.repository,
|
|
85
144
|
});
|
|
86
145
|
const target = out ? path.resolve(cwd, out) : defaultMapSeedPath(cwd);
|
|
87
146
|
mkdirSync(path.dirname(target), { recursive: true });
|
|
@@ -91,6 +150,8 @@ export async function runContextMapCommand(args: string[]): Promise<number> {
|
|
|
91
150
|
components: seed.components.length,
|
|
92
151
|
connections: seed.connections.length,
|
|
93
152
|
repository: seed.meta.repository ?? null,
|
|
153
|
+
index: "reconciled",
|
|
154
|
+
sourceState: facts.sourceState,
|
|
94
155
|
};
|
|
95
156
|
if (json) {
|
|
96
157
|
process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
|
|
@@ -102,7 +163,7 @@ export async function runContextMapCommand(args: string[]): Promise<number> {
|
|
|
102
163
|
` ${payload.components} components, ${payload.connections} connections${
|
|
103
164
|
payload.repository
|
|
104
165
|
? `, sources pinned at ${payload.repository.revision.slice(0, 12)}`
|
|
105
|
-
:
|
|
166
|
+
: `; no source citations (source state: ${payload.sourceState}; requires verified clean files and a GitHub origin at a full revision)`
|
|
106
167
|
}`,
|
|
107
168
|
payload.repository
|
|
108
169
|
? " next: validate and deliver it with the archify skill, passing --repo-root ."
|
package/src/cli/context.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { join, resolve } from "node:path";
|
|
2
2
|
import type { BootstrapProgressEvent } from "../domains/context/index.js";
|
|
3
3
|
import type { BootstrapGenerationState } from "../domains/context/state.js";
|
|
4
|
+
import type { RunWikiGenerateResult } from "../domains/context/wiki/generate.js";
|
|
5
|
+
import type { WikiMeta } from "../domains/context/wiki/meta.js";
|
|
6
|
+
import { MAX_PAGE_ATTEMPTS } from "../domains/context/wiki/plan-store.js";
|
|
4
7
|
|
|
5
8
|
const HELP = `Usage:
|
|
6
9
|
clio-coder context
|
|
7
10
|
clio-coder context init [--yes] [--preview|--heuristic] [--adopt] [--propose|--apply|--rewrite]
|
|
8
11
|
clio-coder context refresh [--wiki]
|
|
9
|
-
clio-coder context wiki [--update] [--status] [--depth auto|simple|medium|detailed]
|
|
12
|
+
clio-coder context wiki [--update|--retry-pending] [--status] [--depth auto|simple|medium|detailed]
|
|
10
13
|
[--target <id>] [--model <id>] [--thinking off|low|medium|high]
|
|
11
14
|
clio-coder context reset [--all] [--yes]
|
|
12
15
|
clio-coder context index [--json]
|
|
@@ -32,6 +35,36 @@ function printWikiProgress(event: BootstrapProgressEvent): void {
|
|
|
32
35
|
process.stderr.write(`clio-coder context wiki: ${event.message}${detail}\n`);
|
|
33
36
|
}
|
|
34
37
|
|
|
38
|
+
function wikiRecoveryLines(meta: WikiMeta | null): string[] {
|
|
39
|
+
const pending = meta?.plan?.pages.filter((page) => page.status !== "written") ?? [];
|
|
40
|
+
if (pending.length === 0) return [];
|
|
41
|
+
const exhausted = pending.filter((page) => page.attempts >= MAX_PAGE_ATTEMPTS).length;
|
|
42
|
+
const failures = pending.filter((page) => page.lastFailure);
|
|
43
|
+
return [
|
|
44
|
+
`pending: ${pending.length} page(s)${exhausted > 0 ? `; ${exhausted} exhausted ordinary writer attempts` : ""}`,
|
|
45
|
+
...failures.slice(0, 8).map((page) => `${page.path}: ${page.lastFailure?.phase}: ${page.lastFailure?.detail}`),
|
|
46
|
+
...(failures.length > 8 ? [`${failures.length - 8} more page failures retained in wiki metadata`] : []),
|
|
47
|
+
"Run `clio-coder context wiki --retry-pending` to retry pending pages once, including exhausted pages, without replanning.",
|
|
48
|
+
];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function printWikiOutcome(prefix: string, result: RunWikiGenerateResult, meta: WikiMeta | null): void {
|
|
52
|
+
const pending = result.pending ?? meta?.plan?.pages.filter((page) => page.status !== "written").length ?? 0;
|
|
53
|
+
const complete = meta?.plan
|
|
54
|
+
? meta.plan.pages.filter((page) => page.status === "written").length
|
|
55
|
+
: (meta?.generation?.pagesWritten ?? Math.max(0, result.pages - pending));
|
|
56
|
+
const published = `${result.pages} published page${result.pages === 1 ? "" : "s"}`;
|
|
57
|
+
const progress = `${complete} complete, ${pending} pending`;
|
|
58
|
+
const outcome = pending > 0 ? "incomplete" : result.status === "noop" ? "unchanged" : "generated";
|
|
59
|
+
process.stdout.write(`${prefix}: ${outcome} (${published}; ${progress})\n`);
|
|
60
|
+
if (pending > 0) {
|
|
61
|
+
const recovery = wikiRecoveryLines(meta);
|
|
62
|
+
process.stdout.write(
|
|
63
|
+
`${recovery.length > 0 ? recovery.join("\n") : "Run `clio-coder context wiki --update` to continue pending pages."}\n`,
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
35
68
|
function compactMetric(value: number, suffix: string): string {
|
|
36
69
|
if (value < 1000) return `${value}${suffix}`;
|
|
37
70
|
return `${(value / 1000).toFixed(1)}k${suffix}`;
|
|
@@ -82,10 +115,7 @@ async function printContextStatus(): Promise<number> {
|
|
|
82
115
|
: "ok";
|
|
83
116
|
|
|
84
117
|
const prompt = context.renderPromptContext(cwd);
|
|
85
|
-
const preloadClass = preload.
|
|
86
|
-
hasClioMd: prompt.clioMd !== null,
|
|
87
|
-
text: prompt.text,
|
|
88
|
-
});
|
|
118
|
+
const preloadClass = preload.selectProjectPreload(prompt, null).classification;
|
|
89
119
|
|
|
90
120
|
const codewiki = context.readCodewiki(cwd);
|
|
91
121
|
const codewikiCount = codewiki ? context.codewikiEntries(codewiki).length : 0;
|
|
@@ -134,7 +164,7 @@ async function runRefreshCommand(args: string[]): Promise<number> {
|
|
|
134
164
|
return 2;
|
|
135
165
|
}
|
|
136
166
|
try {
|
|
137
|
-
const { runContextRefresh } = await import("../domains/context/index.js");
|
|
167
|
+
const { runContextRefresh, readWikiMeta } = await import("../domains/context/index.js");
|
|
138
168
|
const wikiEntry = updateWiki ? await import("./wiki-generate.js") : null;
|
|
139
169
|
const result = await runContextRefresh({
|
|
140
170
|
cwd: process.cwd(),
|
|
@@ -155,11 +185,7 @@ async function runRefreshCommand(args: string[]): Promise<number> {
|
|
|
155
185
|
);
|
|
156
186
|
return 1;
|
|
157
187
|
}
|
|
158
|
-
process.
|
|
159
|
-
result.wiki.status === "noop"
|
|
160
|
-
? `clio-coder context refresh: wiki unchanged (${result.wiki.pages} page${result.wiki.pages === 1 ? "" : "s"})\n`
|
|
161
|
-
: `clio-coder context refresh: wiki updated (${result.wiki.pages} page${result.wiki.pages === 1 ? "" : "s"})\n`,
|
|
162
|
-
);
|
|
188
|
+
printWikiOutcome("clio-coder context refresh: wiki", result.wiki, readWikiMeta(process.cwd()));
|
|
163
189
|
}
|
|
164
190
|
return 0;
|
|
165
191
|
} catch (err) {
|
|
@@ -189,10 +215,11 @@ async function runWikiStatusCommand(): Promise<number> {
|
|
|
189
215
|
`depth: ${depth} (requested ${requestedDepth}; ${sourceFiles} source files; ` +
|
|
190
216
|
`${pagesWritten}/${pagesPlanned} planned pages written)`,
|
|
191
217
|
);
|
|
192
|
-
if (pagesWritten < pagesPlanned) {
|
|
218
|
+
if (pagesWritten < pagesPlanned && !meta.plan) {
|
|
193
219
|
lines.push(`pending: ${pagesPlanned - pagesWritten} page(s); run \`clio-coder context wiki --update\` to finish`);
|
|
194
220
|
}
|
|
195
221
|
}
|
|
222
|
+
lines.push(...wikiRecoveryLines(meta));
|
|
196
223
|
if (currentHead !== meta.gitHead) {
|
|
197
224
|
lines.push(`staleness: gitHead differs from current HEAD (${currentHead ?? "none"})`);
|
|
198
225
|
}
|
|
@@ -215,6 +242,7 @@ function isThinkingLevel(value: unknown): value is WikiCliThinking {
|
|
|
215
242
|
|
|
216
243
|
async function runWikiCommand(args: string[]): Promise<number> {
|
|
217
244
|
let forceUpdate = false;
|
|
245
|
+
let retryPending = false;
|
|
218
246
|
let status = false;
|
|
219
247
|
let depth: WikiCliDepth = "auto";
|
|
220
248
|
let target: string | undefined;
|
|
@@ -230,6 +258,10 @@ async function runWikiCommand(args: string[]): Promise<number> {
|
|
|
230
258
|
forceUpdate = true;
|
|
231
259
|
continue;
|
|
232
260
|
}
|
|
261
|
+
if (arg === "--retry-pending") {
|
|
262
|
+
retryPending = true;
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
233
265
|
if (arg === "--status") {
|
|
234
266
|
status = true;
|
|
235
267
|
continue;
|
|
@@ -277,6 +309,7 @@ async function runWikiCommand(args: string[]): Promise<number> {
|
|
|
277
309
|
const result = await context.runWikiGenerate({
|
|
278
310
|
cwd: process.cwd(),
|
|
279
311
|
...(forceUpdate ? { mode: "update" as const } : {}),
|
|
312
|
+
...(retryPending ? { retryPending: true } : {}),
|
|
280
313
|
depth,
|
|
281
314
|
model: await resolveDocumenterModelId(route),
|
|
282
315
|
generate: modelWikiGenerate({ route }),
|
|
@@ -286,11 +319,7 @@ async function runWikiCommand(args: string[]): Promise<number> {
|
|
|
286
319
|
process.stderr.write(`clio-coder context wiki failed: ${(result.problems ?? ["unknown failure"]).join("; ")}\n`);
|
|
287
320
|
return 1;
|
|
288
321
|
}
|
|
289
|
-
process.
|
|
290
|
-
result.status === "noop"
|
|
291
|
-
? `clio-coder context wiki: unchanged (${result.pages} page${result.pages === 1 ? "" : "s"})\n`
|
|
292
|
-
: `clio-coder context wiki: generated ${result.pages} page${result.pages === 1 ? "" : "s"}\n`,
|
|
293
|
-
);
|
|
322
|
+
printWikiOutcome("clio-coder context wiki", result, context.readWikiMeta(process.cwd()));
|
|
294
323
|
return 0;
|
|
295
324
|
} catch (err) {
|
|
296
325
|
process.stderr.write(`clio-coder context wiki failed: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
@@ -2,6 +2,7 @@ import { lstatSync, readdirSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { resolveClioDirs } from "../core/xdg.js";
|
|
4
4
|
import type { DoctorFinding } from "../domains/lifecycle/doctor.js";
|
|
5
|
+
import { formatBytes } from "./lifecycle-presenter.js";
|
|
5
6
|
|
|
6
7
|
interface MeasuredEntry {
|
|
7
8
|
bytes: number;
|
|
@@ -68,15 +69,3 @@ function measureEntry(path: string): MeasuredEntry {
|
|
|
68
69
|
}
|
|
69
70
|
return { bytes, error: null };
|
|
70
71
|
}
|
|
71
|
-
|
|
72
|
-
function formatBytes(bytes: number): string {
|
|
73
|
-
if (bytes < 1024) return `${bytes} B`;
|
|
74
|
-
const units = ["KiB", "MiB", "GiB", "TiB"];
|
|
75
|
-
let value = bytes;
|
|
76
|
-
let unit = -1;
|
|
77
|
-
do {
|
|
78
|
-
value /= 1024;
|
|
79
|
-
unit += 1;
|
|
80
|
-
} while (value >= 1024 && unit < units.length - 1);
|
|
81
|
-
return `${value.toFixed(value >= 10 ? 1 : 2)} ${units[unit]}`;
|
|
82
|
-
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { DoctorFinding } from "../domains/lifecycle/doctor.js";
|
|
2
|
+
import { describeValidationContract, loadValidationContract } from "../domains/safety/validation-contract.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* One row for the workspace's scientific validation contract: absent, parsed
|
|
6
|
+
* (and so raising the rigor default to high), Markdown-only advisory, or
|
|
7
|
+
* invalid with the parse fault. Reads the workspace root only; creates nothing.
|
|
8
|
+
*/
|
|
9
|
+
export function validationContractFinding(workspaceRoot = process.cwd()): DoctorFinding {
|
|
10
|
+
const name = "validation contract";
|
|
11
|
+
const loaded = loadValidationContract(workspaceRoot);
|
|
12
|
+
if (!loaded.ok) {
|
|
13
|
+
return { ok: false, name, detail: `invalid: ${describeValidationContract(loaded)}; rigor default stays normal` };
|
|
14
|
+
}
|
|
15
|
+
if (loaded.contract === null) {
|
|
16
|
+
if ("advisory" in loaded) {
|
|
17
|
+
return { ok: true, name, level: "warn", detail: `markdown-only: ${describeValidationContract(loaded)}` };
|
|
18
|
+
}
|
|
19
|
+
return { ok: true, name, detail: "none at the workspace root; rigor default normal" };
|
|
20
|
+
}
|
|
21
|
+
const artifacts = loaded.contract.artifacts?.length ?? 0;
|
|
22
|
+
const validators = loaded.contract.validators?.length ?? 0;
|
|
23
|
+
return {
|
|
24
|
+
ok: true,
|
|
25
|
+
name,
|
|
26
|
+
detail: `valid: ${loaded.path} (version ${loaded.contract.version}, ${artifacts} artifact(s), ${validators} validator(s)); rigor default high`,
|
|
27
|
+
};
|
|
28
|
+
}
|
package/src/cli/doctor.ts
CHANGED
|
@@ -12,6 +12,7 @@ import { namingFootprintFindings } from "./doctor-naming.js";
|
|
|
12
12
|
import { panesFindings } from "./doctor-panes.js";
|
|
13
13
|
import { stateStorageFinding } from "./doctor-state-size.js";
|
|
14
14
|
import { toolchainFindings } from "./doctor-toolchain.js";
|
|
15
|
+
import { validationContractFinding } from "./doctor-validation-contract.js";
|
|
15
16
|
import { printError } from "./shared.js";
|
|
16
17
|
|
|
17
18
|
const HELP = `clio-coder doctor [--fix] [--json]
|
|
@@ -72,6 +73,9 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
|
|
|
72
73
|
// has already agreed not to build on an untouched home.
|
|
73
74
|
const paneChecks = untouched ? [] : await panesFindings();
|
|
74
75
|
const namingChecks = namingFootprintFindings({ fix, yaziEnabled: filesEnabled });
|
|
76
|
+
// The validation contract lives in the workspace, not the home, so it is
|
|
77
|
+
// checked on every run: a broken contract is why rigor stayed normal.
|
|
78
|
+
const contractChecks = [validationContractFinding()];
|
|
75
79
|
const all = [
|
|
76
80
|
...findings,
|
|
77
81
|
...storageChecks,
|
|
@@ -82,6 +86,7 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
|
|
|
82
86
|
...toolChecks,
|
|
83
87
|
...paneChecks,
|
|
84
88
|
...namingChecks,
|
|
89
|
+
...contractChecks,
|
|
85
90
|
];
|
|
86
91
|
const ok = all.every((f) => f.ok);
|
|
87
92
|
if (json) {
|
package/src/cli/eval.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
1
2
|
import { resolve } from "node:path";
|
|
2
3
|
import { InvalidIdError } from "../core/safe-id.js";
|
|
4
|
+
import { shellQuote } from "../core/shell-quote.js";
|
|
3
5
|
import { clioDataDir } from "../core/xdg.js";
|
|
4
|
-
import { loadEvalArtifactV4, writeEvalArtifactV4 } from "../domains/eval/artifacts/store.js";
|
|
6
|
+
import { loadEvalArtifactV4, parseEvalArtifactV4, writeEvalArtifactV4 } from "../domains/eval/artifacts/store.js";
|
|
5
7
|
import { compareEvalArtifactsV4 } from "../domains/eval/compare/compare.js";
|
|
6
8
|
import { evaluateGate, renderGateFailure, renderInformationalBudget } from "../domains/eval/compare/gates.js";
|
|
7
9
|
import { loadThresholds } from "../domains/eval/compare/thresholds.js";
|
|
@@ -50,6 +52,7 @@ interface ParsedEvalArgs {
|
|
|
50
52
|
out?: string;
|
|
51
53
|
clioEntry?: string;
|
|
52
54
|
evalId?: string;
|
|
55
|
+
artifact?: string;
|
|
53
56
|
format: EvalReportFormat;
|
|
54
57
|
compareIds: string[];
|
|
55
58
|
metric?: string;
|
|
@@ -133,6 +136,11 @@ function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
|
|
|
133
136
|
throw new Error(`unknown eval run argument: ${arg}`);
|
|
134
137
|
}
|
|
135
138
|
if (parsed.command === "report") {
|
|
139
|
+
if (arg === "--artifact") {
|
|
140
|
+
parsed.artifact = requiredValue(args, index, "--artifact");
|
|
141
|
+
index += 1;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
136
144
|
if (arg === "--format") {
|
|
137
145
|
parsed.format = reportFormat(requiredValue(args, index, "--format"));
|
|
138
146
|
index += 1;
|
|
@@ -189,7 +197,9 @@ function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
|
|
|
189
197
|
if (parsed.command === "run" && (parsed.suite === undefined) === (parsed.taskFile === undefined)) {
|
|
190
198
|
throw new Error("run requires exactly one of --suite or --task-file");
|
|
191
199
|
}
|
|
192
|
-
if (parsed.command === "report" && parsed.evalId === undefined)
|
|
200
|
+
if (parsed.command === "report" && (parsed.evalId === undefined) === (parsed.artifact === undefined)) {
|
|
201
|
+
throw new Error("report requires exactly one of an eval id or --artifact <path>");
|
|
202
|
+
}
|
|
193
203
|
if (parsed.command === "compare" && parsed.compareIds.length !== 2) {
|
|
194
204
|
throw new Error("compare requires <baselineEvalId> <candidateEvalId>");
|
|
195
205
|
}
|
|
@@ -259,6 +269,7 @@ async function runEvalRun(parsed: ParsedEvalArgs): Promise<number> {
|
|
|
259
269
|
);
|
|
260
270
|
const artifactPath = await writeEvalArtifactV4(clioDataDir(), artifact, parsed.out);
|
|
261
271
|
process.stdout.write(`${renderEvalTextReportV4(artifact)}artifact: ${artifactPath}\n`);
|
|
272
|
+
process.stdout.write(`report: clio-coder eval report --artifact ${shellQuote(resolve(artifactPath))} --format md\n`);
|
|
262
273
|
// A suite that declares thresholds is gated by them here, on the artifact
|
|
263
274
|
// it just produced. Declaring a gate that only a later `eval gate`
|
|
264
275
|
// invocation enforces means the run that broke it still exited zero.
|
|
@@ -280,7 +291,10 @@ async function runEvalRun(parsed: ParsedEvalArgs): Promise<number> {
|
|
|
280
291
|
async function runEvalReportCommand(parsed: ParsedEvalArgs): Promise<number> {
|
|
281
292
|
try {
|
|
282
293
|
const dataDir = clioDataDir();
|
|
283
|
-
const artifact =
|
|
294
|
+
const artifact =
|
|
295
|
+
parsed.artifact === undefined
|
|
296
|
+
? await loadEvalArtifactV4(dataDir, parsed.evalId ?? "")
|
|
297
|
+
: parseEvalArtifactV4(JSON.parse(await readFile(parsed.artifact, "utf8")) as unknown, parsed.artifact);
|
|
284
298
|
process.stdout.write(renderArtifactReport(artifact, parsed.format, dataDir));
|
|
285
299
|
return 0;
|
|
286
300
|
} catch (error) {
|