@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
package/src/cli/targets.ts
CHANGED
|
@@ -5,6 +5,8 @@ import {
|
|
|
5
5
|
readSettings,
|
|
6
6
|
removeFleetProfileFromSettings,
|
|
7
7
|
setFleetProfileInSettings,
|
|
8
|
+
type TargetSelectionRole,
|
|
9
|
+
type UseTargetOptions,
|
|
8
10
|
updateSettings,
|
|
9
11
|
useTargetInSettings,
|
|
10
12
|
} from "../core/config.js";
|
|
@@ -24,6 +26,7 @@ import { registerBuiltinRuntimes } from "../domains/providers/runtimes/builtins.
|
|
|
24
26
|
import type { CapabilityFlags } from "../domains/providers/types/capability-flags.js";
|
|
25
27
|
import type { RuntimeTier } from "../domains/providers/types/runtime-descriptor.js";
|
|
26
28
|
import { runConfigureCommand, runTargetRemove, runTargetRename } from "./configure.js";
|
|
29
|
+
import { resolveSupportedWireModels } from "./configure-target.js";
|
|
27
30
|
import { printError, printOk } from "./shared.js";
|
|
28
31
|
import { column, terminalColumns, truncate, wrapPlain } from "./text-layout.js";
|
|
29
32
|
|
|
@@ -259,7 +262,7 @@ function parseUseArgs(args: ReadonlyArray<string>): UseArgs | null {
|
|
|
259
262
|
return parsed;
|
|
260
263
|
}
|
|
261
264
|
|
|
262
|
-
function runUse(args: ReadonlyArray<string>): number {
|
|
265
|
+
async function runUse(args: ReadonlyArray<string>): Promise<number> {
|
|
263
266
|
if (wantsHelp(args)) return printUsage(USE_USAGE);
|
|
264
267
|
let parsed: UseArgs | null;
|
|
265
268
|
try {
|
|
@@ -281,42 +284,91 @@ function runUse(args: ReadonlyArray<string>): number {
|
|
|
281
284
|
}
|
|
282
285
|
const registry = getRuntimeRegistry();
|
|
283
286
|
if (registry.list().length === 0) registerBuiltinRuntimes(registry);
|
|
284
|
-
const
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
)
|
|
287
|
+
const options: UseTargetOptions = {
|
|
288
|
+
...(parsed.model !== undefined ? { model: parsed.model } : {}),
|
|
289
|
+
...(parsed.orchestratorModel !== undefined ? { orchestratorModel: parsed.orchestratorModel } : {}),
|
|
290
|
+
...(parsed.workerModel !== undefined ? { workerModel: parsed.workerModel } : {}),
|
|
291
|
+
...(parsed.workerTarget !== undefined ? { workerTargetId: parsed.workerTarget } : {}),
|
|
292
|
+
...(parsed.backgroundModel !== undefined ? { backgroundModel: parsed.backgroundModel } : {}),
|
|
293
|
+
};
|
|
294
|
+
const candidate = structuredClone(settings);
|
|
295
|
+
const selection = useTargetInSettings(candidate, target.id, options);
|
|
296
|
+
if (!selection) {
|
|
297
|
+
printError(`no target with id ${parsed.workerTarget}`);
|
|
289
298
|
return 1;
|
|
290
299
|
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
300
|
+
const labels: Record<TargetSelectionRole, string> = {
|
|
301
|
+
chat: "chat",
|
|
302
|
+
fleet: "fleet dispatch",
|
|
303
|
+
memory: "background memory",
|
|
304
|
+
};
|
|
305
|
+
const routes = { chat: candidate.chat, fleet: candidate.fleet.default, memory: candidate.context.memory };
|
|
306
|
+
const inventories = new Map<string, Awaited<ReturnType<typeof resolveSupportedWireModels>>>();
|
|
307
|
+
const checkedTargets = new Map<string, string>();
|
|
308
|
+
for (const role of selection.roles) {
|
|
309
|
+
const route = routes[role];
|
|
310
|
+
const selectedTarget = candidate.targets.find((entry) => entry.id === route.target);
|
|
311
|
+
if (!selectedTarget) throw new Error("selected target disappeared");
|
|
312
|
+
const runtime = registry.get(selectedTarget.runtime);
|
|
313
|
+
if (!runtime || !(role === "fleet" ? isDispatchEligibleRuntime(runtime) : isOrchestratorEligibleRuntime(runtime))) {
|
|
314
|
+
printError(
|
|
315
|
+
`cannot use target '${selectedTarget.id}' for ${labels[role]}: runtime '${selectedTarget.runtime}' is not eligible`,
|
|
316
|
+
);
|
|
317
|
+
return 1;
|
|
318
|
+
}
|
|
319
|
+
checkedTargets.set(selectedTarget.id, JSON.stringify(selectedTarget));
|
|
320
|
+
if (route.model === null) continue;
|
|
321
|
+
let inventory = inventories.get(selectedTarget.id);
|
|
322
|
+
if (!inventory) {
|
|
323
|
+
inventory = await resolveSupportedWireModels(runtime, selectedTarget, selectedTarget);
|
|
324
|
+
inventories.set(selectedTarget.id, inventory);
|
|
325
|
+
}
|
|
326
|
+
if (inventory.models.length > 0 && !inventory.models.includes(route.model)) {
|
|
327
|
+
printError(
|
|
328
|
+
`target '${selectedTarget.id}' does not list model '${route.model}' for ${labels[role]} (${inventory.source} inventory). Use an exact listed model id: ${inventory.models.slice(0, 10).join(", ")}`,
|
|
329
|
+
);
|
|
330
|
+
return 1;
|
|
331
|
+
}
|
|
332
|
+
if (inventory.models.length === 0) {
|
|
333
|
+
// Keep offline selection possible, but never imply that an unknown id was verified.
|
|
334
|
+
process.stderr.write(
|
|
335
|
+
`warning: could not verify model '${route.model}' for ${labels[role]}: target '${selectedTarget.id}' returned no model list; saving the id as written\n`,
|
|
336
|
+
);
|
|
337
|
+
} else if (inventory.source === "cache" || inventory.source === "legacy") {
|
|
338
|
+
process.stderr.write(
|
|
339
|
+
`warning: using ${inventory.source} model inventory for target '${selectedTarget.id}'; live availability was not verified\n`,
|
|
340
|
+
);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
// Re-read under the settings lock. A changed endpoint/default invalidates the
|
|
344
|
+
// checked inventory; unrelated concurrent role edits are preserved by the scoped mutation.
|
|
345
|
+
let changedRoles: TargetSelectionRole[] = [];
|
|
346
|
+
try {
|
|
347
|
+
updateSettings((fresh) => {
|
|
348
|
+
for (const [id, descriptor] of checkedTargets) {
|
|
349
|
+
if (JSON.stringify(fresh.targets.find((entry) => entry.id === id)) !== descriptor) {
|
|
350
|
+
throw new Error(`target '${id}' changed while checking models; retry targets use`);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
const applied = useTargetInSettings(fresh, target.id, options);
|
|
354
|
+
if (!applied) throw new Error("target changed while checking models; retry targets use");
|
|
355
|
+
changedRoles = applied.changedRoles;
|
|
356
|
+
});
|
|
357
|
+
} catch (error) {
|
|
358
|
+
printError(error instanceof Error ? error.message : String(error));
|
|
295
359
|
return 1;
|
|
296
360
|
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
const
|
|
300
|
-
|
|
301
|
-
|
|
361
|
+
const changedByTarget = new Map<string, string[]>();
|
|
362
|
+
for (const role of changedRoles) {
|
|
363
|
+
const id = routes[role].target as string;
|
|
364
|
+
const names = changedByTarget.get(id) ?? [];
|
|
365
|
+
names.push(labels[role]);
|
|
366
|
+
changedByTarget.set(id, names);
|
|
302
367
|
}
|
|
303
|
-
const backgroundModel = parsed.backgroundModel;
|
|
304
|
-
// Locked read-modify-write so a concurrent session's field-level
|
|
305
|
-
// write-through (Shift+Tab, Alt+L, …) cannot be lost between our read
|
|
306
|
-
// above and this save.
|
|
307
|
-
updateSettings((fresh) => {
|
|
308
|
-
useTargetInSettings(fresh, target.id, {
|
|
309
|
-
...(parsed.model !== undefined ? { model: parsed.model } : {}),
|
|
310
|
-
...(parsed.orchestratorModel !== undefined ? { orchestratorModel: parsed.orchestratorModel } : {}),
|
|
311
|
-
...(parsed.workerModel !== undefined ? { workerModel: parsed.workerModel } : {}),
|
|
312
|
-
workerTargetId: workerTarget.id,
|
|
313
|
-
...(backgroundModel !== undefined ? { backgroundModel } : {}),
|
|
314
|
-
});
|
|
315
|
-
});
|
|
316
|
-
const dispatchWhere = workerTarget === target ? "" : ` and ${workerTarget.id} for fleet dispatch`;
|
|
317
|
-
const chatWhere = workerTarget === target ? "for chat and fleet dispatch" : "for chat";
|
|
318
368
|
printOk(
|
|
319
|
-
|
|
369
|
+
changedRoles.length === 0
|
|
370
|
+
? "no role settings changed"
|
|
371
|
+
: `using ${[...changedByTarget].map(([id, names]) => `target ${id} for ${names.join(" and ")}`).join("; ")}`,
|
|
320
372
|
);
|
|
321
373
|
return 0;
|
|
322
374
|
}
|
|
@@ -1003,7 +1055,7 @@ function formatUrl(status: TargetStatus): string {
|
|
|
1003
1055
|
|
|
1004
1056
|
function formatAuth(providers: ProvidersContract, status: TargetStatus): string {
|
|
1005
1057
|
if (!status.runtime) return "-";
|
|
1006
|
-
if (status.runtime.externalAgentLoop !== undefined) return "operator session";
|
|
1058
|
+
if (status.runtime.externalAgentLoop !== undefined && status.runtime.auth !== "claude-cli") return "operator session";
|
|
1007
1059
|
if (status.runtime.auth !== "api-key" && status.runtime.auth !== "oauth") return status.runtime.auth;
|
|
1008
1060
|
const auth = providers.auth.statusForTarget(status.target, status.runtime);
|
|
1009
1061
|
if (!auth.available) return "disconnected";
|
package/src/cli/tasks.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { normalizeIntentExpectedOutputs, normalizeIntentVerification } from "../domains/dispatch/intent.js";
|
|
2
|
+
import type { UserTaskAcceptance } from "../domains/user-tasks/acceptance.js";
|
|
3
|
+
import { formatUserTaskHandoff } from "../domains/user-tasks/handoff.js";
|
|
4
|
+
import { createUserTasksStore } from "../domains/user-tasks/store.js";
|
|
5
|
+
import { packageDeclaredCheck } from "../tools/verify/catalog.js";
|
|
6
|
+
import { discoverDeclaredChecksAtRoot, discoverDeclaredProjectEntriesAtRoot } from "../tools/verify/scripts.js";
|
|
7
|
+
import { printError } from "./argv.js";
|
|
8
|
+
|
|
9
|
+
/** Operator flags use the same bounds and normalization as dispatch intent. */
|
|
10
|
+
export function acceptanceFromTaskFlags(
|
|
11
|
+
cwd: string,
|
|
12
|
+
expectedOutputs: string[],
|
|
13
|
+
verify: string[],
|
|
14
|
+
): UserTaskAcceptance | undefined {
|
|
15
|
+
if (expectedOutputs.length === 0 && verify.length === 0) return undefined;
|
|
16
|
+
const discovery = discoverDeclaredChecksAtRoot(cwd, undefined);
|
|
17
|
+
if (!discovery.ok) throw new Error(discovery.reason);
|
|
18
|
+
const checks = new Map(
|
|
19
|
+
discovery.sources.flatMap((source) => source.checks.map((check) => [check.id, check] as const)),
|
|
20
|
+
);
|
|
21
|
+
for (const entry of discoverDeclaredProjectEntriesAtRoot(cwd)) {
|
|
22
|
+
if (entry.kind === "package-script" && !checks.has(entry.id))
|
|
23
|
+
checks.set(entry.id, packageDeclaredCheck(entry.id, entry.path, ".", []));
|
|
24
|
+
}
|
|
25
|
+
const verification = verify.map((value) => {
|
|
26
|
+
const suffix = checks.has(value) ? null : /^(.*):([0-9]+)$/.exec(value);
|
|
27
|
+
const check = suffix?.[1] ?? value;
|
|
28
|
+
if (!checks.has(check))
|
|
29
|
+
throw new Error(
|
|
30
|
+
`Unknown verification check '${check}'. Known ids: ${[...checks.keys()].sort().join(", ") || "(none)"}`,
|
|
31
|
+
);
|
|
32
|
+
return { check, ...(suffix ? { timeout_ms: Number(suffix[2]) } : {}) };
|
|
33
|
+
});
|
|
34
|
+
const outputs = normalizeIntentExpectedOutputs(expectedOutputs);
|
|
35
|
+
if (!Array.isArray(outputs)) throw new Error(outputs.ok ? "invalid expected outputs" : outputs.message);
|
|
36
|
+
const normalized = normalizeIntentVerification(verification, checks);
|
|
37
|
+
if (!Array.isArray(normalized)) throw new Error(normalized.ok ? "invalid verification" : normalized.message);
|
|
38
|
+
return { expectedOutputs: outputs, verification: normalized };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const HELP = `Usage:
|
|
42
|
+
clio-coder tasks [list]
|
|
43
|
+
clio-coder tasks add [--expect <path>] [--verify <checkId>[:timeoutMs]] <text>
|
|
44
|
+
clio-coder tasks hand|done|drop <uN>
|
|
45
|
+
|
|
46
|
+
--expect and --verify are repeatable. Check ids must be declared in package.json or .clio-coder/verifiers.yaml.`;
|
|
47
|
+
|
|
48
|
+
export function runTasksCommand(args: string[]): number {
|
|
49
|
+
try {
|
|
50
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
51
|
+
console.log(HELP);
|
|
52
|
+
return 0;
|
|
53
|
+
}
|
|
54
|
+
const store = createUserTasksStore({ cwd: process.cwd() });
|
|
55
|
+
const [action = "list", ...rest] = args;
|
|
56
|
+
if (action === "add") {
|
|
57
|
+
const expected: string[] = [],
|
|
58
|
+
verify: string[] = [],
|
|
59
|
+
title: string[] = [];
|
|
60
|
+
for (let index = 0; index < rest.length; index++) {
|
|
61
|
+
const token = rest[index] ?? "";
|
|
62
|
+
if (token === "--") {
|
|
63
|
+
title.push(...rest.slice(index + 1));
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
if (token === "--expect" || token === "--verify") {
|
|
67
|
+
const value = rest[++index];
|
|
68
|
+
if (!value || value.startsWith("--")) throw new Error(`${token} requires a value`);
|
|
69
|
+
(token === "--expect" ? expected : verify).push(value);
|
|
70
|
+
} else if (token.startsWith("--")) throw new Error(`Unknown flag ${token}`);
|
|
71
|
+
else title.push(token);
|
|
72
|
+
}
|
|
73
|
+
const task = store.add(title.join(" "), undefined, acceptanceFromTaskFlags(process.cwd(), expected, verify));
|
|
74
|
+
console.log(`logged operator task ${task.id}: ${task.title}`);
|
|
75
|
+
} else if (action === "list" && rest.length === 0) {
|
|
76
|
+
console.log(JSON.stringify(store.snapshot(), null, 2));
|
|
77
|
+
} else if ((action === "hand" || action === "done" || action === "drop") && rest.length === 1) {
|
|
78
|
+
const task = store[action](rest[0] ?? "");
|
|
79
|
+
console.log(JSON.stringify(task, null, 2));
|
|
80
|
+
if (action === "hand") {
|
|
81
|
+
console.error(
|
|
82
|
+
"CLI hand records the inbox state only; it does not start a session or submit the interactive /tasks hand turn. " +
|
|
83
|
+
"Pass this pickup prompt to clio-coder run in the same project:\n" +
|
|
84
|
+
formatUserTaskHandoff(task),
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
} else throw new Error(HELP);
|
|
88
|
+
return 0;
|
|
89
|
+
} catch (error) {
|
|
90
|
+
printError(error instanceof Error ? error.message : String(error));
|
|
91
|
+
return 1;
|
|
92
|
+
}
|
|
93
|
+
}
|
package/src/cli/upgrade.ts
CHANGED
|
@@ -21,11 +21,12 @@ Flags:
|
|
|
21
21
|
--dry-run print planned actions without changing anything
|
|
22
22
|
--channel=<chan> npm dist-tag to install (latest|beta|dev). npm installs only.
|
|
23
23
|
--skip-migrations skip migrations after the install step
|
|
24
|
+
--post-install apply local checks after a package-manager update; skip reinstall
|
|
24
25
|
--json emit machine-readable JSON output
|
|
25
26
|
--help, -h show this message
|
|
26
27
|
`;
|
|
27
28
|
|
|
28
|
-
const SOURCE_UPGRADE_STEPS = ["git pull", "
|
|
29
|
+
const SOURCE_UPGRADE_STEPS = ["git pull", "pnpm run install:local", "hash -r"] as const;
|
|
29
30
|
/** One wording for the source-update advice. Three paths print it; they used to disagree. */
|
|
30
31
|
const SOURCE_UPGRADE_LEAD = "To update the checkout itself, run:";
|
|
31
32
|
|
|
@@ -85,15 +86,20 @@ function parseUpgradeArgs(argv: ReadonlyArray<string>): UpgradeOptions {
|
|
|
85
86
|
* the installed version is the newest one.
|
|
86
87
|
*/
|
|
87
88
|
type RegistryLookup =
|
|
88
|
-
| { asked: false; reason: "source checkout" | "network checks are disabled" }
|
|
89
|
+
| { asked: false; reason: "source checkout" | "network checks are disabled" | "post-install checks" }
|
|
89
90
|
| { asked: true; version: string | null };
|
|
90
91
|
|
|
92
|
+
function testSeam(name: string): string | undefined {
|
|
93
|
+
if (process.env.NODE_ENV !== "test") return undefined;
|
|
94
|
+
return process.env[name];
|
|
95
|
+
}
|
|
96
|
+
|
|
91
97
|
async function lookUpAvailableVersion(
|
|
92
98
|
channel: Channel,
|
|
93
99
|
method: "source" | "npm",
|
|
94
100
|
noNetwork: boolean,
|
|
95
101
|
): Promise<RegistryLookup> {
|
|
96
|
-
const seam =
|
|
102
|
+
const seam = testSeam("CLIO_CODER_TEST_UPGRADE_AVAILABLE");
|
|
97
103
|
// `unreachable` stands in for a registry that answered nothing, which is the
|
|
98
104
|
// only way to reach that branch without a network in the test.
|
|
99
105
|
if (seam) return { asked: true, version: seam === "unreachable" ? null : seam };
|
|
@@ -143,14 +149,14 @@ async function runChild(command: string, args: ReadonlyArray<string>, label: str
|
|
|
143
149
|
}
|
|
144
150
|
|
|
145
151
|
async function runNpmInstall(channel: Channel): Promise<void> {
|
|
146
|
-
if (
|
|
152
|
+
if (testSeam("CLIO_CODER_TEST_UPGRADE_FAIL") === "npm") {
|
|
147
153
|
throw new Error("npm ERR! 404 Not Found (mock failure)");
|
|
148
154
|
}
|
|
149
155
|
await runChild("npm", ["install", "-g", `@iowarp/clio-coder@${channel}`], "npm install");
|
|
150
156
|
}
|
|
151
157
|
|
|
152
158
|
async function runDoctorFixAfterInstall(): Promise<void> {
|
|
153
|
-
if (
|
|
159
|
+
if (testSeam("CLIO_CODER_TEST_UPGRADE_FAIL") === "doctor") {
|
|
154
160
|
throw new Error("mock doctor fix failure");
|
|
155
161
|
}
|
|
156
162
|
await runChild("clio-coder", ["doctor", "--fix"], "clio-coder doctor --fix");
|
|
@@ -181,11 +187,13 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
181
187
|
const before = getVersionInfo().clio;
|
|
182
188
|
const stateDir = clioStateDir();
|
|
183
189
|
const method = detectInstallMethod();
|
|
184
|
-
const methodLabel = method === "source" ? "source checkout" : "npm global";
|
|
190
|
+
const methodLabel = method === "source" ? "source checkout" : opts.postInstall ? "package install" : "npm global";
|
|
185
191
|
presenter.setMethod(methodLabel);
|
|
186
192
|
|
|
187
|
-
const noNetwork = Boolean(
|
|
188
|
-
const lookup =
|
|
193
|
+
const noNetwork = Boolean(testSeam("CLIO_CODER_TEST_UPGRADE_NO_NETWORK"));
|
|
194
|
+
const lookup: RegistryLookup = opts.postInstall
|
|
195
|
+
? { asked: false, reason: "post-install checks" }
|
|
196
|
+
: await lookUpAvailableVersion(opts.channel, method, noNetwork);
|
|
189
197
|
const availableVersion = lookup.asked ? lookup.version : null;
|
|
190
198
|
|
|
191
199
|
presenter.step(`Installation method: ${methodLabel}`);
|
|
@@ -196,7 +204,7 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
196
204
|
if (availableVersion !== null) presenter.step(`Available version: ${availableVersion}`);
|
|
197
205
|
else if (!lookup.asked) presenter.step(`Available version: not checked (${lookup.reason})`);
|
|
198
206
|
else presenter.step("Available version: unknown (the registry could not be reached)");
|
|
199
|
-
if (method === "npm") presenter.step(`Channel: ${opts.channel}`);
|
|
207
|
+
if (method === "npm" && !opts.postInstall) presenter.step(`Channel: ${opts.channel}`);
|
|
200
208
|
presenter.step(`State dir: ${shortenPath(stateDir)}`);
|
|
201
209
|
|
|
202
210
|
const migrations = listMigrations();
|
|
@@ -231,7 +239,7 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
231
239
|
|
|
232
240
|
if (opts.dryRun) {
|
|
233
241
|
if (method === "source") presenter.commandAdvice(SOURCE_UPGRADE_LEAD, SOURCE_UPGRADE_STEPS.join("\n"));
|
|
234
|
-
else presenter.note(`Would run: npm install -g @iowarp/clio-coder@${opts.channel}`);
|
|
242
|
+
else if (!opts.postInstall) presenter.note(`Would run: npm install -g @iowarp/clio-coder@${opts.channel}`);
|
|
235
243
|
if (opts.skipMigrations) presenter.note("Would skip migrations (--skip-migrations).");
|
|
236
244
|
else if (pendingMigrationIds.length === 0) presenter.note("No pending migrations.");
|
|
237
245
|
else {
|
|
@@ -285,7 +293,7 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
285
293
|
} else {
|
|
286
294
|
let result: Awaited<ReturnType<typeof runPending>>;
|
|
287
295
|
try {
|
|
288
|
-
if (
|
|
296
|
+
if (testSeam("CLIO_CODER_TEST_UPGRADE_FAIL") === "migration") {
|
|
289
297
|
throw new Error("mock migration failure in 2026-09-01-settings-v2");
|
|
290
298
|
}
|
|
291
299
|
result = await runPending(stateDir);
|
package/src/cli/usage.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from "../core/response-model-id.js";
|
|
9
9
|
import { clioDataDir, clioStateDir } from "../core/xdg.js";
|
|
10
10
|
import { loadMemoryRecordsSync, type MemoryRecord } from "../domains/memory/index.js";
|
|
11
|
+
import { summarizeEvidenceIndex } from "../domains/observability/accountability.js";
|
|
11
12
|
import { summarizeFailedCompactionUsage } from "../domains/observability/compaction-usage.js";
|
|
12
13
|
import { readEvidenceIndex } from "../domains/observability/evidence-index.js";
|
|
13
14
|
import { type OutOfTurnUsageRow, readOutOfTurnUsageRows } from "../domains/observability/out-of-turn-usage.js";
|
|
@@ -353,11 +354,15 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
353
354
|
diagnostics.malformedAuditRows = auditRows.errors.length;
|
|
354
355
|
const auditInWindow = auditRows.rows.filter((row) => row.ts !== null && inWindow(row.ts, windowStart, now));
|
|
355
356
|
const auditToolCalls = auditInWindow.filter((row) => row.auditKind === "tool_call");
|
|
357
|
+
const permissions = summarizePermissionDecisions(
|
|
358
|
+
auditInWindow.filter((row) => row.auditKind === "permission").map((row) => row.row),
|
|
359
|
+
);
|
|
356
360
|
const auditBlocked = auditToolCalls.filter((row) => {
|
|
357
361
|
const decision = typeof row.row.decision === "string" ? row.row.decision : "";
|
|
358
362
|
return decision === "blocked" || decision === "denied";
|
|
359
363
|
});
|
|
360
364
|
const evidenceRows = readEvidenceIndex(stateDir).filter((row) => inWindow(row.generatedAt, windowStart, now));
|
|
365
|
+
const accountability = summarizeEvidenceIndex(evidenceRows);
|
|
361
366
|
let memoryRecords: MemoryRecord[] = [];
|
|
362
367
|
try {
|
|
363
368
|
memoryRecords = loadMemoryRecordsSync(clioDataDir());
|
|
@@ -559,7 +564,10 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
559
564
|
else emit({ kind: "fact", fact: "session-store-missing", path: presence.sessionsPath });
|
|
560
565
|
if (presence.receiptsPresent) emit({ kind: "fact", fact: "dispatch-runs", value: receipts.length });
|
|
561
566
|
else emit({ kind: "fact", fact: "receipt-store-missing", path: presence.receiptsPath });
|
|
567
|
+
emit({ kind: "fact", fact: "unverified-successes", value: accountability.unverifiedSuccesses });
|
|
568
|
+
emit({ kind: "fact", fact: "ungrounded-claims", value: accountability.ungroundedClaims });
|
|
562
569
|
emit({ kind: "fact", fact: "audit-tool-calls", value: auditToolCalls.length, blocked: auditBlocked.length });
|
|
570
|
+
emit({ kind: "fact", fact: "permission-approval", ...permissions });
|
|
563
571
|
if (usageMeasurable) {
|
|
564
572
|
// The origin split is emitted only when something out of turn was
|
|
565
573
|
// recorded, so a report over an archive with no `/btw`, `/handoff`, or
|
|
@@ -652,6 +660,9 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
652
660
|
} else {
|
|
653
661
|
out(` receipt store missing at ${presence.receiptsPath}`);
|
|
654
662
|
}
|
|
663
|
+
out(
|
|
664
|
+
` permission decisions: ${permissions.requested} requested, ${permissions.granted} granted, ${permissions.denied} denied, ${permissions.expired} expired; approval rate ${permissions.approvalRate === null ? "n/a" : `${(permissions.approvalRate * 100).toFixed(1)}%`}`,
|
|
665
|
+
);
|
|
655
666
|
out(` audited tool calls in window: ${auditToolCalls.length} (${auditBlocked.length} blocked/denied)`);
|
|
656
667
|
if (usageMeasurable) {
|
|
657
668
|
out(
|
|
@@ -806,6 +817,8 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
806
817
|
),
|
|
807
818
|
);
|
|
808
819
|
}
|
|
820
|
+
out(` unverified successes: ${accountability.unverifiedSuccesses}`);
|
|
821
|
+
out(` ungrounded claims: ${accountability.ungroundedClaims}`);
|
|
809
822
|
if (tagCounts.size > 0) {
|
|
810
823
|
out("");
|
|
811
824
|
out(" failure tags (from evidence index)");
|
|
@@ -1122,3 +1135,20 @@ function numberOr0(value: unknown): number {
|
|
|
1122
1135
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
1123
1136
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1124
1137
|
}
|
|
1138
|
+
|
|
1139
|
+
/** Event-window approval rate. Resolutions can belong to requests outside the window. */
|
|
1140
|
+
export function summarizePermissionDecisions(rows: ReadonlyArray<Record<string, unknown>>): {
|
|
1141
|
+
requested: number;
|
|
1142
|
+
granted: number;
|
|
1143
|
+
denied: number;
|
|
1144
|
+
expired: number;
|
|
1145
|
+
approvalRate: number | null;
|
|
1146
|
+
} {
|
|
1147
|
+
const counts = { requested: 0, granted: 0, denied: 0, expired: 0 };
|
|
1148
|
+
for (const row of rows) {
|
|
1149
|
+
const status = row.status;
|
|
1150
|
+
if (status === "requested" || status === "granted" || status === "denied" || status === "expired")
|
|
1151
|
+
counts[status] += 1;
|
|
1152
|
+
}
|
|
1153
|
+
return { ...counts, approvalRate: counts.requested === 0 ? null : counts.granted / counts.requested };
|
|
1154
|
+
}
|
package/src/cli/verifiers.ts
CHANGED
|
@@ -6,8 +6,15 @@ import {
|
|
|
6
6
|
runVerifierAuthoringWorkflow,
|
|
7
7
|
type VerifierRevision,
|
|
8
8
|
} from "../tools/verify/authoring.js";
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
DECLARED_CHECK_KINDS,
|
|
11
|
+
type DeclaredCheckKind,
|
|
12
|
+
loadProjectVerifierCatalog,
|
|
13
|
+
PROJECT_VERIFIER_CATALOG_RELATIVE_PATH,
|
|
14
|
+
} from "../tools/verify/catalog.js";
|
|
10
15
|
import { verifyTool } from "../tools/verify/index.js";
|
|
16
|
+
import { normalizeNumericTolerance } from "../tools/verify/numeric.js";
|
|
17
|
+
import { recordPerfBaseline } from "../tools/verify/scripts.js";
|
|
11
18
|
import { printError, printOk } from "./argv.js";
|
|
12
19
|
import { runVerifiersInspect } from "./verifiers-inspect.js";
|
|
13
20
|
|
|
@@ -23,11 +30,22 @@ Usage:
|
|
|
23
30
|
clio-coder verifiers edit <id> [--description <text>] [--command <json-argv>] [fields] [--yes]
|
|
24
31
|
clio-coder verifiers rename <old> <new> [--yes]
|
|
25
32
|
clio-coder verifiers remove <id> [--yes]
|
|
33
|
+
clio-coder verifiers baseline <id>
|
|
26
34
|
|
|
27
35
|
Fields:
|
|
28
36
|
--cwd <path> repository-relative working directory (default .)
|
|
29
37
|
--timeout-ms <number> bounded timeout in milliseconds (default 120000)
|
|
30
38
|
--tags <a,b> comma-separated catalog tags
|
|
39
|
+
--kind <kind> command (default), numeric-compare, or perf-budget
|
|
40
|
+
--reference <path> numeric-compare: repository-relative reference JSON of string -> number | number[]
|
|
41
|
+
--tolerance <json> numeric-compare: {"relative"?,"absolute"?,"ulp"?}, at least one;
|
|
42
|
+
perf-budget with --baseline: {"relative"} headroom over the baseline
|
|
43
|
+
--budget-ms <number> perf-budget: wall-time bound in milliseconds
|
|
44
|
+
--budget-relative <r> perf-budget with --budget-ms: fractional headroom over the bound
|
|
45
|
+
--baseline <path> perf-budget: repository-relative baseline JSON written by 'verifiers baseline <id>'
|
|
46
|
+
|
|
47
|
+
baseline runs a perf-budget check once and records its wall time at the check's
|
|
48
|
+
baseline path; a failing or timed-out command records nothing.
|
|
31
49
|
|
|
32
50
|
Discovery and every preview are read-only. Mutating commands write only with
|
|
33
51
|
--yes after printing the exact argv, cwd, timeout, tags, source provenance, and
|
|
@@ -48,6 +66,12 @@ const VALUE_OPTIONS = new Set([
|
|
|
48
66
|
"--exclude",
|
|
49
67
|
"--rename",
|
|
50
68
|
"--dry-run",
|
|
69
|
+
"--kind",
|
|
70
|
+
"--reference",
|
|
71
|
+
"--tolerance",
|
|
72
|
+
"--budget-ms",
|
|
73
|
+
"--budget-relative",
|
|
74
|
+
"--baseline",
|
|
51
75
|
]);
|
|
52
76
|
|
|
53
77
|
interface ParsedAuthoringArgs {
|
|
@@ -124,6 +148,93 @@ function tags(value: string | undefined): string[] {
|
|
|
124
148
|
.filter((tag) => tag.length > 0);
|
|
125
149
|
}
|
|
126
150
|
|
|
151
|
+
type KindFields = Pick<Extract<VerifierRevision, { kind: "add" }>["check"], "kind" | "numeric" | "perf">;
|
|
152
|
+
|
|
153
|
+
function parseJsonObject(value: string, option: string): Record<string, unknown> | Error {
|
|
154
|
+
try {
|
|
155
|
+
const parsed = JSON.parse(value) as unknown;
|
|
156
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
157
|
+
return new Error(`${option} must be a JSON object`);
|
|
158
|
+
}
|
|
159
|
+
return parsed as Record<string, unknown>;
|
|
160
|
+
} catch (error) {
|
|
161
|
+
return new Error(`${option} must be valid JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* The kind and its parameters from the option set. Returns `{}` when no kind
|
|
167
|
+
* option was given so a plain command check keeps the version-1 shape, and an
|
|
168
|
+
* Error when the options disagree with the kind the way the catalog parser
|
|
169
|
+
* would refuse them, so the operator reads one message here instead of a
|
|
170
|
+
* rejected preview.
|
|
171
|
+
*/
|
|
172
|
+
function kindFieldsFromArgs(parsed: ParsedAuthoringArgs): KindFields | Error {
|
|
173
|
+
const kindValue = oneValue(parsed, "--kind") ?? "command";
|
|
174
|
+
if (!(DECLARED_CHECK_KINDS as ReadonlyArray<string>).includes(kindValue)) {
|
|
175
|
+
return new Error(`--kind must be one of ${DECLARED_CHECK_KINDS.join(", ")}`);
|
|
176
|
+
}
|
|
177
|
+
const kind = kindValue as DeclaredCheckKind;
|
|
178
|
+
const reference = oneValue(parsed, "--reference");
|
|
179
|
+
const toleranceValue = oneValue(parsed, "--tolerance");
|
|
180
|
+
const budgetMs = oneValue(parsed, "--budget-ms");
|
|
181
|
+
const budgetRelative = oneValue(parsed, "--budget-relative");
|
|
182
|
+
const baseline = oneValue(parsed, "--baseline");
|
|
183
|
+
if (kind === "command") {
|
|
184
|
+
const stray = [
|
|
185
|
+
["--reference", reference],
|
|
186
|
+
["--tolerance", toleranceValue],
|
|
187
|
+
["--budget-ms", budgetMs],
|
|
188
|
+
["--budget-relative", budgetRelative],
|
|
189
|
+
["--baseline", baseline],
|
|
190
|
+
].filter(([, value]) => value !== undefined);
|
|
191
|
+
if (stray.length > 0)
|
|
192
|
+
return new Error(`${stray.map(([name]) => name).join(", ")} require --kind numeric-compare or perf-budget`);
|
|
193
|
+
return {};
|
|
194
|
+
}
|
|
195
|
+
if (kind === "numeric-compare") {
|
|
196
|
+
if (budgetMs !== undefined || budgetRelative !== undefined || baseline !== undefined) {
|
|
197
|
+
return new Error("--budget-ms, --budget-relative, and --baseline belong to --kind perf-budget");
|
|
198
|
+
}
|
|
199
|
+
if (reference === undefined) return new Error("--reference is required for --kind numeric-compare");
|
|
200
|
+
if (toleranceValue === undefined) return new Error("--tolerance is required for --kind numeric-compare");
|
|
201
|
+
const toleranceJson = parseJsonObject(toleranceValue, "--tolerance");
|
|
202
|
+
if (toleranceJson instanceof Error) return toleranceJson;
|
|
203
|
+
const tolerance = normalizeNumericTolerance(toleranceJson);
|
|
204
|
+
if (tolerance instanceof Error) return new Error(`--tolerance ${tolerance.message}`);
|
|
205
|
+
return { kind, numeric: { reference, tolerance } };
|
|
206
|
+
}
|
|
207
|
+
if (reference !== undefined) return new Error("--reference belongs to --kind numeric-compare");
|
|
208
|
+
if ((budgetMs === undefined) === (baseline === undefined)) {
|
|
209
|
+
return new Error("--kind perf-budget requires exactly one of --budget-ms or --baseline");
|
|
210
|
+
}
|
|
211
|
+
if (budgetMs !== undefined) {
|
|
212
|
+
if (toleranceValue !== undefined) return new Error("use --budget-relative for headroom over --budget-ms");
|
|
213
|
+
const wallTimeMs = Number(budgetMs);
|
|
214
|
+
if (!Number.isFinite(wallTimeMs) || wallTimeMs <= 0) return new Error("--budget-ms must be a positive number");
|
|
215
|
+
const budget: NonNullable<KindFields["perf"]>["budget"] = { wallTimeMs };
|
|
216
|
+
if (budgetRelative !== undefined) {
|
|
217
|
+
const relative = Number(budgetRelative);
|
|
218
|
+
if (!Number.isFinite(relative) || relative < 0) return new Error("--budget-relative must be a non-negative number");
|
|
219
|
+
budget.tolerance = { relative };
|
|
220
|
+
}
|
|
221
|
+
return { kind, perf: { budget } };
|
|
222
|
+
}
|
|
223
|
+
if (budgetRelative !== undefined)
|
|
224
|
+
return new Error("--budget-relative belongs with --budget-ms; use --tolerance with --baseline");
|
|
225
|
+
const perf: NonNullable<KindFields["perf"]> = { baseline: baseline as string };
|
|
226
|
+
if (toleranceValue !== undefined) {
|
|
227
|
+
const toleranceJson = parseJsonObject(toleranceValue, "--tolerance");
|
|
228
|
+
if (toleranceJson instanceof Error) return toleranceJson;
|
|
229
|
+
const relative = toleranceJson.relative;
|
|
230
|
+
if (typeof relative !== "number" || !Number.isFinite(relative) || relative < 0) {
|
|
231
|
+
return new Error('--tolerance for a baseline must be {"relative": <non-negative number>}');
|
|
232
|
+
}
|
|
233
|
+
perf.tolerance = { relative };
|
|
234
|
+
}
|
|
235
|
+
return { kind, perf };
|
|
236
|
+
}
|
|
237
|
+
|
|
127
238
|
function requiredValue(parsed: ParsedAuthoringArgs, option: string): string | Error {
|
|
128
239
|
const value = oneValue(parsed, option);
|
|
129
240
|
return value === undefined || value.length === 0 ? new Error(`${option} is required`) : value;
|
|
@@ -151,6 +262,8 @@ function addRevision(parsed: ParsedAuthoringArgs): VerifierRevision | Error {
|
|
|
151
262
|
if (command instanceof Error) return command;
|
|
152
263
|
const timeoutMs = parseTimeout(oneValue(parsed, "--timeout-ms"));
|
|
153
264
|
if (timeoutMs instanceof Error) return timeoutMs;
|
|
265
|
+
const kindFields = kindFieldsFromArgs(parsed);
|
|
266
|
+
if (kindFields instanceof Error) return kindFields;
|
|
154
267
|
return {
|
|
155
268
|
kind: "add",
|
|
156
269
|
check: {
|
|
@@ -160,6 +273,7 @@ function addRevision(parsed: ParsedAuthoringArgs): VerifierRevision | Error {
|
|
|
160
273
|
cwd: oneValue(parsed, "--cwd") ?? ".",
|
|
161
274
|
timeoutMs,
|
|
162
275
|
tags: tags(oneValue(parsed, "--tags")),
|
|
276
|
+
...kindFields,
|
|
163
277
|
},
|
|
164
278
|
};
|
|
165
279
|
}
|
|
@@ -186,6 +300,13 @@ function editRevision(parsed: ParsedAuthoringArgs): VerifierRevision | Error {
|
|
|
186
300
|
}
|
|
187
301
|
const tagValue = oneValue(parsed, "--tags");
|
|
188
302
|
if (tagValue !== undefined) changes.tags = tags(tagValue);
|
|
303
|
+
if (oneValue(parsed, "--kind") !== undefined) {
|
|
304
|
+
const kindFields = kindFieldsFromArgs(parsed);
|
|
305
|
+
if (kindFields instanceof Error) return kindFields;
|
|
306
|
+
changes.kind = kindFields.kind ?? "command";
|
|
307
|
+
if (kindFields.numeric !== undefined) changes.numeric = kindFields.numeric;
|
|
308
|
+
if (kindFields.perf !== undefined) changes.perf = kindFields.perf;
|
|
309
|
+
}
|
|
189
310
|
if (Object.keys(changes).length === 0) return new Error("edit requires at least one changed field");
|
|
190
311
|
return { kind: "edit", id, changes };
|
|
191
312
|
}
|
|
@@ -260,6 +381,30 @@ async function executeWorkflow(
|
|
|
260
381
|
return code;
|
|
261
382
|
}
|
|
262
383
|
|
|
384
|
+
async function baselineCommand(id: string | undefined): Promise<number> {
|
|
385
|
+
if (id === undefined) {
|
|
386
|
+
printError("baseline requires a check ID");
|
|
387
|
+
return 2;
|
|
388
|
+
}
|
|
389
|
+
const loaded = loadProjectVerifierCatalog(process.cwd());
|
|
390
|
+
if (!loaded.ok) {
|
|
391
|
+
printError(`production catalog parser rejected ${loaded.reason}`);
|
|
392
|
+
return 1;
|
|
393
|
+
}
|
|
394
|
+
const check = loaded.source?.checks.find((candidate) => candidate.id === id);
|
|
395
|
+
if (check === undefined) {
|
|
396
|
+
printError(`no catalog check '${id}' in ${PROJECT_VERIFIER_CATALOG_RELATIVE_PATH}`);
|
|
397
|
+
return 1;
|
|
398
|
+
}
|
|
399
|
+
const recorded = await recordPerfBaseline(check);
|
|
400
|
+
if (!recorded.ok) {
|
|
401
|
+
printError(`baseline '${id}' not recorded: ${recorded.message}`);
|
|
402
|
+
return 1;
|
|
403
|
+
}
|
|
404
|
+
printOk(`recorded baseline for '${id}': ${Math.round(recorded.wallTimeMs)}ms at ${recorded.path}`);
|
|
405
|
+
return 0;
|
|
406
|
+
}
|
|
407
|
+
|
|
263
408
|
async function discoverCommand(): Promise<number> {
|
|
264
409
|
const discovery = discoverVerifierAuthoring();
|
|
265
410
|
if (!discovery.ok) {
|
|
@@ -304,6 +449,7 @@ export async function runVerifiersCommand(argv: string[]): Promise<number> {
|
|
|
304
449
|
const command = parsed.positional[0];
|
|
305
450
|
if (command === "discover") return discoverCommand();
|
|
306
451
|
if (command === "validate") return validateCommand();
|
|
452
|
+
if (command === "baseline") return baselineCommand(parsed.positional[1]);
|
|
307
453
|
if (command === "dry-run") {
|
|
308
454
|
const id = parsed.positional[1];
|
|
309
455
|
if (id === undefined) {
|