@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
|
@@ -52,6 +52,7 @@ export interface LedgerOptions {
|
|
|
52
52
|
|
|
53
53
|
export type CreateRunInput = Omit<
|
|
54
54
|
RunEnvelope,
|
|
55
|
+
| "version"
|
|
55
56
|
| "id"
|
|
56
57
|
| "startedAt"
|
|
57
58
|
| "endedAt"
|
|
@@ -143,6 +144,10 @@ export function listFleetRuns(limit = MAX_FLEET_RUN_SCAN): FleetRunRecord[] {
|
|
|
143
144
|
return records.slice(0, Math.max(0, limit));
|
|
144
145
|
}
|
|
145
146
|
|
|
147
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
148
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
149
|
+
}
|
|
150
|
+
|
|
146
151
|
// `RunEnvelope.heartbeatAt` deliberately persists only the absolute wall-clock
|
|
147
152
|
// anchor used for operator display and crash recovery. The monotonic heartbeat
|
|
148
153
|
// stamp belongs to the live transport in this process; serializing it would
|
|
@@ -152,9 +157,16 @@ function readRuns(): RunEnvelope[] {
|
|
|
152
157
|
if (!existsSync(path)) return [];
|
|
153
158
|
const raw = readFileSync(path, "utf8").trim();
|
|
154
159
|
if (raw.length === 0) return [];
|
|
155
|
-
const parsed = JSON.parse(raw) as
|
|
160
|
+
const parsed = JSON.parse(raw) as unknown;
|
|
156
161
|
if (!Array.isArray(parsed)) return [];
|
|
157
|
-
|
|
162
|
+
const envelopes: RunEnvelope[] = [];
|
|
163
|
+
for (const entry of parsed) {
|
|
164
|
+
if (!isRecord(entry)) continue;
|
|
165
|
+
const version = entry.version === undefined ? 1 : entry.version;
|
|
166
|
+
if (version !== 1) continue;
|
|
167
|
+
envelopes.push({ ...(entry as unknown as RunEnvelope), version: 1 });
|
|
168
|
+
}
|
|
169
|
+
return envelopes;
|
|
158
170
|
}
|
|
159
171
|
|
|
160
172
|
function resolveMaxRuns(opt?: number | undefined): number {
|
|
@@ -241,6 +253,7 @@ export function openLedger(opts?: LedgerOptions): Ledger {
|
|
|
241
253
|
return {
|
|
242
254
|
create(input: CreateRunInput): RunEnvelope {
|
|
243
255
|
const envelope: RunEnvelope = {
|
|
256
|
+
version: 1,
|
|
244
257
|
id: input.id ?? newRunId(),
|
|
245
258
|
agentId: input.agentId,
|
|
246
259
|
executionRole: input.executionRole,
|
|
@@ -10,6 +10,7 @@ import type { GatewayRoutingObservation } from "../../core/gateway-routing.js";
|
|
|
10
10
|
import type { ResponseModelIdObservation } from "../../core/response-model-id.js";
|
|
11
11
|
import type { SkillActivation } from "../../core/skill-activation.js";
|
|
12
12
|
import type { ToolProfileName } from "../../tools/profiles.js";
|
|
13
|
+
import type { DeclaredCheckReport } from "../../tools/verify/scripts.js";
|
|
13
14
|
import type { AgentAudience } from "../agents/spec.js";
|
|
14
15
|
import type { EvidenceTag } from "../evidence/index.js";
|
|
15
16
|
import type { CostProvenance, RuntimeTargetSnapshot } from "../providers/index.js";
|
|
@@ -442,6 +443,7 @@ export interface RunReceiptFindingsSummary {
|
|
|
442
443
|
}
|
|
443
444
|
|
|
444
445
|
export interface RunEnvelope {
|
|
446
|
+
version: 1;
|
|
445
447
|
id: string;
|
|
446
448
|
agentId: string;
|
|
447
449
|
/** Semantic role this attempt's route statistics belong to. */
|
|
@@ -483,6 +485,8 @@ export interface RunEnvelope {
|
|
|
483
485
|
plan?: RunPlanProvenance;
|
|
484
486
|
/** Ad-hoc specialist provenance; present only when a persona override composed the stable prompt. */
|
|
485
487
|
personaOverride?: RunPersonaOverride;
|
|
488
|
+
/** Decision refs active on the parent decision board at dispatch; absent when the board was empty. */
|
|
489
|
+
decisionRefs?: ReadonlyArray<string>;
|
|
486
490
|
exitCode: number | null;
|
|
487
491
|
pid: number | null;
|
|
488
492
|
heartbeatAt: string | null;
|
|
@@ -663,9 +667,10 @@ export interface RunReceiptUpstreamResponse {
|
|
|
663
667
|
* `state: "final"` means the text is a completed assistant message (the last
|
|
664
668
|
* `message_end`); `state: "partial"` means mid-stream text from a message that
|
|
665
669
|
* never completed (abort, stall, kill) and must never be presented as final.
|
|
666
|
-
* `bytes` is the UTF-8 length of the full captured text before the
|
|
667
|
-
*
|
|
668
|
-
*
|
|
670
|
+
* `bytes` is the UTF-8 length of the full captured text before the run's
|
|
671
|
+
* capture bound (WORKER_OUTPUT_MAX_BYTES, or the larger bound a mutation-report
|
|
672
|
+
* contract's summary allowance implies); `truncated` records that the bound
|
|
673
|
+
* clipped `text`, so truncation is always explicit. Absent when no assistant text was
|
|
669
674
|
* captured. Covered by the receipt integrity digest like every other field.
|
|
670
675
|
*/
|
|
671
676
|
export interface RunReceiptOutput {
|
|
@@ -710,11 +715,14 @@ export interface RunHostVerificationCheck {
|
|
|
710
715
|
check: string;
|
|
711
716
|
argv: string[];
|
|
712
717
|
cwd: string;
|
|
718
|
+
/** For a numeric-compare or perf-budget check, 1 when the judgement failed even though the command exited 0. */
|
|
713
719
|
exitCode: number;
|
|
714
720
|
durationMs: number;
|
|
715
721
|
memo: boolean;
|
|
716
722
|
outputTail: string;
|
|
717
723
|
artifactPath?: string;
|
|
724
|
+
/** Structured verdict of a numeric-compare or perf-budget check; absent for a command check. Covered by the receipt digest through `hostVerification`. */
|
|
725
|
+
report?: DeclaredCheckReport;
|
|
718
726
|
/** Run that owns the evidence when it did not come from this run: a memo hit, or the batch member the shared check ran under. */
|
|
719
727
|
evidenceRunId?: string;
|
|
720
728
|
}
|
|
@@ -811,8 +819,14 @@ export interface RunReceipt {
|
|
|
811
819
|
node?: RunNodeIdentity;
|
|
812
820
|
/**
|
|
813
821
|
* Route and node identity attested by the worker process that executed the
|
|
814
|
-
* run.
|
|
815
|
-
*
|
|
822
|
+
* run. Every native and remote worker transport attests, so a receipt from
|
|
823
|
+
* the worker path carries this field. It is legitimately absent on receipts
|
|
824
|
+
* that no worker process produced: the print-mode main-agent receipt
|
|
825
|
+
* (src/cli/modes/print.ts), which runs in the orchestrator process, and ACP
|
|
826
|
+
* delegation receipts, whose external agent never sends an announce frame.
|
|
827
|
+
* The eval process invariants (src/domains/eval/metrics/invariants.ts) rely
|
|
828
|
+
* on that absence to skip the main-agent path when counting orphaned
|
|
829
|
+
* workers. Contract tests that stub the spawn also leave it absent.
|
|
816
830
|
*/
|
|
817
831
|
attestation?: RunReceiptAttestation;
|
|
818
832
|
/** Dead-node failover hops, oldest first; absent when the run was never rerouted. */
|
|
@@ -828,6 +842,8 @@ export interface RunReceipt {
|
|
|
828
842
|
fleetGate?: { path: string; pathHash: string };
|
|
829
843
|
/** Ad-hoc specialist provenance; present only when a persona override composed the stable prompt. */
|
|
830
844
|
personaOverride?: RunPersonaOverride;
|
|
845
|
+
/** Decision refs active on the parent decision board at dispatch; absent when the board was empty. */
|
|
846
|
+
decisionRefs?: ReadonlyArray<string>;
|
|
831
847
|
/** Effective project-context tier for this run; absent on receipts written before this field landed. */
|
|
832
848
|
projectContext?: RunProjectContextProvenance;
|
|
833
849
|
/**
|
|
@@ -465,27 +465,58 @@ export function spawnWorkerProcess(
|
|
|
465
465
|
},
|
|
466
466
|
};
|
|
467
467
|
|
|
468
|
-
|
|
469
|
-
|
|
468
|
+
let settled = false;
|
|
469
|
+
let abortStarted = false;
|
|
470
|
+
let killTimer: ReturnType<typeof setTimeout> | null = null;
|
|
471
|
+
let pendingClose: (() => void) | null = null;
|
|
472
|
+
|
|
473
|
+
// The leader may exit while a same-group descendant has closed all inherited
|
|
474
|
+
// pipes. Neither exit nor close proves that cancellation reached the group.
|
|
475
|
+
function hasOwnedProcesses(): boolean {
|
|
476
|
+
if (pid === null) return false;
|
|
477
|
+
if (process.platform !== "win32") {
|
|
470
478
|
try {
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
end();
|
|
476
|
-
if (sawSpawnError) {
|
|
477
|
-
resolve({ exitCode: null, signal: null, ...diagnostics() });
|
|
478
|
-
return;
|
|
479
|
+
process.kill(-pid, 0);
|
|
480
|
+
return true;
|
|
481
|
+
} catch (error) {
|
|
482
|
+
if ((error as NodeJS.ErrnoException).code === "EPERM") return true;
|
|
479
483
|
}
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
484
|
+
}
|
|
485
|
+
return isAlive();
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
const promise = new Promise<SpawnedWorkerResult>((resolve) => {
|
|
489
|
+
child.on("close", (code, signal) => {
|
|
490
|
+
const finish = (): void => {
|
|
491
|
+
if (settled) return;
|
|
492
|
+
settled = true;
|
|
493
|
+
try {
|
|
494
|
+
child.stdin?.end();
|
|
495
|
+
} catch {
|
|
496
|
+
// stdin may already be closed.
|
|
497
|
+
}
|
|
498
|
+
end();
|
|
499
|
+
if (sawSpawnError) {
|
|
500
|
+
resolve({ exitCode: null, signal: null, ...diagnostics() });
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
if (!announceAccepted && !announceFailed) {
|
|
504
|
+
announceFailed = true;
|
|
505
|
+
appendStderr("[worker] Missing worker attestation: peer exited before announcing its route identity\n");
|
|
506
|
+
}
|
|
507
|
+
if (announceFailed) {
|
|
508
|
+
resolve({ exitCode: code !== null && code !== 0 ? code : 1, signal: signal ?? null, ...diagnostics() });
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
resolve({ exitCode: code ?? 0, signal: signal ?? null, ...diagnostics() });
|
|
512
|
+
};
|
|
513
|
+
if (killTimer !== null && hasOwnedProcesses()) {
|
|
514
|
+
pendingClose = finish;
|
|
486
515
|
return;
|
|
487
516
|
}
|
|
488
|
-
|
|
517
|
+
if (killTimer !== null) clearTimeout(killTimer);
|
|
518
|
+
killTimer = null;
|
|
519
|
+
finish();
|
|
489
520
|
});
|
|
490
521
|
});
|
|
491
522
|
|
|
@@ -543,15 +574,17 @@ export function spawnWorkerProcess(
|
|
|
543
574
|
};
|
|
544
575
|
|
|
545
576
|
const abort = (): void => {
|
|
546
|
-
if (!
|
|
577
|
+
if (settled || abortStarted || !hasOwnedProcesses()) return;
|
|
578
|
+
abortStarted = true;
|
|
547
579
|
try {
|
|
548
580
|
child.stdin?.end();
|
|
549
581
|
} catch {
|
|
550
582
|
// process may already be closing
|
|
551
583
|
}
|
|
552
584
|
signalProcessGroup(child, "SIGTERM");
|
|
553
|
-
|
|
554
|
-
|
|
585
|
+
killTimer = setTimeout(() => {
|
|
586
|
+
killTimer = null;
|
|
587
|
+
if (hasOwnedProcesses()) {
|
|
555
588
|
signalProcessGroup(child, "SIGKILL");
|
|
556
589
|
try {
|
|
557
590
|
opts?.onForcedKill?.();
|
|
@@ -559,8 +592,12 @@ export function spawnWorkerProcess(
|
|
|
559
592
|
// fallback is best-effort; the local channel is already dead
|
|
560
593
|
}
|
|
561
594
|
}
|
|
595
|
+
const finish = pendingClose;
|
|
596
|
+
pendingClose = null;
|
|
597
|
+
finish?.();
|
|
562
598
|
}, shutdownGraceMs);
|
|
563
|
-
|
|
599
|
+
// Keep this timer referenced: callers await settlement before process exit,
|
|
600
|
+
// even when the leader and every inherited pipe have already closed.
|
|
564
601
|
};
|
|
565
602
|
|
|
566
603
|
return {
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { buildSafeToolEnv } from "../../core/safe-exec.js";
|
|
7
|
+
|
|
8
|
+
/** Stable recovery namespace; labels never enter Git's ref grammar unchecked. */
|
|
9
|
+
export function workspaceCheckpointRef(kind: "loop" | "compete", identity: string): string {
|
|
10
|
+
return `refs/clio-coder/${kind}/${createHash("sha256").update(identity).digest("hex")}`;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** Capture tracked and nonignored untracked state without modifying HEAD or the user's index.
|
|
14
|
+
* The immutable ref makes retries idempotent and keeps the object alive across GC. */
|
|
15
|
+
export function captureWorkspaceCheckpoint(cwd: string, ref: string, message: string): string {
|
|
16
|
+
if (!/^refs\/clio-coder\/(loop|compete)\/[a-f0-9]{64}$/.test(ref)) throw new Error("invalid workspace checkpoint ref");
|
|
17
|
+
const directory = mkdtempSync(join(tmpdir(), "clio-checkpoint-index-"));
|
|
18
|
+
const env = buildSafeToolEnv({
|
|
19
|
+
GIT_INDEX_FILE: join(directory, "index"),
|
|
20
|
+
GIT_AUTHOR_NAME: "Clio checkpoint",
|
|
21
|
+
GIT_AUTHOR_EMAIL: "checkpoint@clio.invalid",
|
|
22
|
+
GIT_COMMITTER_NAME: "Clio checkpoint",
|
|
23
|
+
GIT_COMMITTER_EMAIL: "checkpoint@clio.invalid",
|
|
24
|
+
});
|
|
25
|
+
const config = ["-c", "core.hooksPath=/dev/null", "-c", "core.fsmonitor=false"];
|
|
26
|
+
const git = (args: string[]) =>
|
|
27
|
+
execFileSync("git", ["-C", cwd, ...config, ...args], {
|
|
28
|
+
env,
|
|
29
|
+
encoding: "utf8",
|
|
30
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
31
|
+
timeout: 30000,
|
|
32
|
+
maxBuffer: 1024 * 1024,
|
|
33
|
+
}).trim();
|
|
34
|
+
try {
|
|
35
|
+
try {
|
|
36
|
+
git(["rev-parse", "--verify", ref]);
|
|
37
|
+
return ref;
|
|
38
|
+
} catch {
|
|
39
|
+
/* First capture owns this immutable reference. */
|
|
40
|
+
}
|
|
41
|
+
const head = git(["rev-parse", "HEAD"]);
|
|
42
|
+
// Automatic preservation must not run repository-configured filter commands.
|
|
43
|
+
// Names stay argv values; Git's ordinary text normalization still applies.
|
|
44
|
+
const filterKeys = git(["config", "--null", "--name-only", "--list"])
|
|
45
|
+
.split("\0")
|
|
46
|
+
.filter((key) => /^filter\..*\.(?:clean|process|required)$/.test(key));
|
|
47
|
+
for (const key of filterKeys) config.push("-c", `${key}=${key.endsWith(".required") ? "false" : ""}`);
|
|
48
|
+
git(["read-tree", head]);
|
|
49
|
+
git(["add", "-A", "--", "."]);
|
|
50
|
+
const tree = git(["write-tree"]);
|
|
51
|
+
const commit = git(["commit-tree", tree, "-p", head, "-m", message]);
|
|
52
|
+
git(["update-ref", ref, commit, ""]);
|
|
53
|
+
return ref;
|
|
54
|
+
} finally {
|
|
55
|
+
rmSync(directory, { recursive: true, force: true });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -31,7 +31,10 @@ export interface EvalBehaviorMetricDistributionV1 {
|
|
|
31
31
|
export interface EvalBehaviorMetricComparisonV1 {
|
|
32
32
|
scenarioId: string;
|
|
33
33
|
role: string;
|
|
34
|
+
/** Representative route retained for existing consumers; both sides are recorded below. */
|
|
34
35
|
target: { id: string; model: string | null };
|
|
36
|
+
baselineTargets: Array<{ id: string; model: string | null }>;
|
|
37
|
+
candidateTargets: Array<{ id: string; model: string | null }>;
|
|
35
38
|
metric: EvalBehaviorMetricNameV1;
|
|
36
39
|
family: EvalBehaviorMetricFamilyV1;
|
|
37
40
|
direction: "higher" | "lower";
|
|
@@ -40,6 +43,8 @@ export interface EvalBehaviorMetricComparisonV1 {
|
|
|
40
43
|
candidate: EvalBehaviorMetricDistributionV1;
|
|
41
44
|
change: EvalMetricChangeV1;
|
|
42
45
|
meanDelta: number | null;
|
|
46
|
+
/** Two standard errors of the difference; unresolved is not proof of equivalence. Safety stays exact. */
|
|
47
|
+
noiseBand: number;
|
|
43
48
|
varianceChange: EvalMetricChangeV1;
|
|
44
49
|
varianceDelta: number | null;
|
|
45
50
|
comparability: EvalEnvelopeComparabilityV1;
|
|
@@ -52,6 +57,8 @@ export interface EvalBehaviorHardGateV1 {
|
|
|
52
57
|
scenarioId: string;
|
|
53
58
|
role: string;
|
|
54
59
|
target: { id: string; model: string | null };
|
|
60
|
+
baselineTargets: Array<{ id: string; model: string | null }>;
|
|
61
|
+
candidateTargets: Array<{ id: string; model: string | null }>;
|
|
55
62
|
metric: EvalBehaviorMetricNameV1;
|
|
56
63
|
change: "regressed" | "incomparable";
|
|
57
64
|
}>;
|
|
@@ -61,6 +68,7 @@ interface BehaviorGroup {
|
|
|
61
68
|
scenarioId: string;
|
|
62
69
|
role: string;
|
|
63
70
|
target: { id: string; model: string | null };
|
|
71
|
+
targets: Array<{ id: string; model: string | null }>;
|
|
64
72
|
results: EvalArtifactResultV4[];
|
|
65
73
|
}
|
|
66
74
|
|
|
@@ -72,26 +80,47 @@ export function compareEvalBehaviorMetricsV1(
|
|
|
72
80
|
hardGate: EvalBehaviorHardGateV1;
|
|
73
81
|
envelopeMismatches: EvalEnvelopeMismatchV1[];
|
|
74
82
|
} {
|
|
75
|
-
const
|
|
76
|
-
const
|
|
83
|
+
const baselineDimensions = baseline.matrix.dimensions ?? ([] as EvalExecutionMatrixDimensionV1[]);
|
|
84
|
+
const candidateDimensions = candidate.matrix.dimensions ?? ([] as EvalExecutionMatrixDimensionV1[]);
|
|
85
|
+
const varying = new Set(baselineDimensions.filter((dimension) => candidateDimensions.includes(dimension)));
|
|
86
|
+
const baselineGroups = behaviorGroups(baseline, varying);
|
|
87
|
+
const candidateGroups = behaviorGroups(candidate, varying);
|
|
77
88
|
const keys = new Set([...baselineGroups.keys(), ...candidateGroups.keys()]);
|
|
78
89
|
const comparisons: EvalBehaviorMetricComparisonV1[] = [];
|
|
79
90
|
const envelopeMismatches: EvalEnvelopeMismatchV1[] = [];
|
|
80
|
-
const baselineDimensions = baseline.matrix.dimensions ?? ([] as EvalExecutionMatrixDimensionV1[]);
|
|
81
|
-
const candidateDimensions = candidate.matrix.dimensions ?? ([] as EvalExecutionMatrixDimensionV1[]);
|
|
82
91
|
for (const key of [...keys].sort((left, right) => left.localeCompare(right))) {
|
|
83
92
|
const baselineGroup = baselineGroups.get(key);
|
|
84
93
|
const candidateGroup = candidateGroups.get(key);
|
|
85
|
-
const
|
|
86
|
-
if (
|
|
87
|
-
const
|
|
94
|
+
const group = baselineGroup ?? candidateGroup;
|
|
95
|
+
if (group === undefined) continue;
|
|
96
|
+
const identity = {
|
|
97
|
+
scenarioId: group.scenarioId,
|
|
98
|
+
role: group.role,
|
|
99
|
+
target: { id: group.target.id, model: group.target.model },
|
|
100
|
+
};
|
|
101
|
+
const routes = {
|
|
102
|
+
baselineTargets: baselineGroup?.targets ?? [],
|
|
103
|
+
candidateTargets: candidateGroup?.targets ?? [],
|
|
104
|
+
};
|
|
105
|
+
let envelopeMismatch = compareEvalExecutionEnvelopesV1(
|
|
88
106
|
identity,
|
|
89
107
|
baselineGroup?.results ?? [],
|
|
90
108
|
candidateGroup?.results ?? [],
|
|
91
109
|
baselineDimensions,
|
|
92
110
|
candidateDimensions,
|
|
93
111
|
);
|
|
94
|
-
|
|
112
|
+
// Ignoring a dimension may align one route per side, but cannot choose between
|
|
113
|
+
// multiple routes or pool their trials into an apparently comparable distribution.
|
|
114
|
+
if (routes.baselineTargets.length > 1 || routes.candidateTargets.length > 1) {
|
|
115
|
+
envelopeMismatch = {
|
|
116
|
+
...identity,
|
|
117
|
+
fields: ["behavioralMetrics.ambiguousRouteGroup", ...(envelopeMismatch?.fields ?? [])],
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
if (envelopeMismatch !== null) {
|
|
121
|
+
envelopeMismatch = { ...envelopeMismatch, ...routes };
|
|
122
|
+
envelopeMismatches.push(envelopeMismatch);
|
|
123
|
+
}
|
|
95
124
|
const comparability: EvalEnvelopeComparabilityV1 = {
|
|
96
125
|
comparable: envelopeMismatch === null,
|
|
97
126
|
mismatchedFields: envelopeMismatch?.fields ?? [],
|
|
@@ -99,10 +128,13 @@ export function compareEvalBehaviorMetricsV1(
|
|
|
99
128
|
for (const definition of EVAL_BEHAVIOR_METRIC_DEFINITIONS_V1) {
|
|
100
129
|
const baselineDistribution = behaviorDistribution(baselineGroup?.results ?? [], definition);
|
|
101
130
|
const candidateDistribution = behaviorDistribution(candidateGroup?.results ?? [], definition);
|
|
131
|
+
const noiseBand =
|
|
132
|
+
definition.family === "safety" ? 0 : distributionNoiseBand(baselineDistribution, candidateDistribution);
|
|
102
133
|
comparisons.push({
|
|
103
134
|
scenarioId: identity.scenarioId,
|
|
104
135
|
role: identity.role,
|
|
105
136
|
target: identity.target,
|
|
137
|
+
...routes,
|
|
106
138
|
metric: definition.name,
|
|
107
139
|
family: definition.family,
|
|
108
140
|
direction: definition.direction,
|
|
@@ -111,9 +143,10 @@ export function compareEvalBehaviorMetricsV1(
|
|
|
111
143
|
candidate: candidateDistribution,
|
|
112
144
|
change:
|
|
113
145
|
envelopeMismatch === null
|
|
114
|
-
? classifyChange(baselineDistribution.mean, candidateDistribution.mean, definition.direction)
|
|
146
|
+
? classifyChange(baselineDistribution.mean, candidateDistribution.mean, definition.direction, noiseBand)
|
|
115
147
|
: "incomparable",
|
|
116
148
|
meanDelta: subtractNullable(candidateDistribution.mean, baselineDistribution.mean),
|
|
149
|
+
noiseBand,
|
|
117
150
|
varianceChange:
|
|
118
151
|
envelopeMismatch === null
|
|
119
152
|
? classifyChange(baselineDistribution.variance, candidateDistribution.variance, "lower")
|
|
@@ -132,6 +165,8 @@ export function compareEvalBehaviorMetricsV1(
|
|
|
132
165
|
scenarioId: comparison.scenarioId,
|
|
133
166
|
role: comparison.role,
|
|
134
167
|
target: comparison.target,
|
|
168
|
+
baselineTargets: comparison.baselineTargets,
|
|
169
|
+
candidateTargets: comparison.candidateTargets,
|
|
135
170
|
metric: comparison.metric,
|
|
136
171
|
change: comparison.change,
|
|
137
172
|
},
|
|
@@ -153,25 +188,33 @@ export function classifyChange(
|
|
|
153
188
|
baseline: number | null,
|
|
154
189
|
candidate: number | null,
|
|
155
190
|
direction: "higher" | "lower",
|
|
191
|
+
noiseBand = 0,
|
|
156
192
|
): EvalMetricChangeV1 {
|
|
157
193
|
if (baseline === null || candidate === null) return "incomparable";
|
|
158
|
-
if (baseline
|
|
194
|
+
if (Math.abs(candidate - baseline) <= noiseBand) return "unchanged";
|
|
159
195
|
if (direction === "higher") return candidate > baseline ? "improved" : "regressed";
|
|
160
196
|
return candidate < baseline ? "improved" : "regressed";
|
|
161
197
|
}
|
|
162
198
|
|
|
163
|
-
function behaviorGroups(
|
|
199
|
+
function behaviorGroups(
|
|
200
|
+
artifact: EvalArtifactV4,
|
|
201
|
+
varying: ReadonlySet<EvalExecutionMatrixDimensionV1>,
|
|
202
|
+
): Map<string, BehaviorGroup> {
|
|
164
203
|
const groups = new Map<string, BehaviorGroup>();
|
|
165
204
|
for (const result of artifact.results) {
|
|
166
205
|
const behavioral = result.behavioralMetrics;
|
|
167
206
|
if (behavioral === undefined) continue;
|
|
168
|
-
const key = groupKey(behavioral.scenarioId, behavioral.role, behavioral.target);
|
|
207
|
+
const key = groupKey(behavioral.scenarioId, behavioral.role, behavioral.target, varying);
|
|
169
208
|
const group = groups.get(key) ?? {
|
|
170
209
|
scenarioId: behavioral.scenarioId,
|
|
171
210
|
role: behavioral.role,
|
|
172
211
|
target: behavioral.target,
|
|
212
|
+
targets: [],
|
|
173
213
|
results: [],
|
|
174
214
|
};
|
|
215
|
+
if (!group.targets.some((target) => target.id === behavioral.target.id && target.model === behavioral.target.model)) {
|
|
216
|
+
group.targets.push(behavioral.target);
|
|
217
|
+
}
|
|
175
218
|
group.results.push(result);
|
|
176
219
|
groups.set(key, group);
|
|
177
220
|
}
|
|
@@ -215,10 +258,34 @@ function behaviorDistribution(
|
|
|
215
258
|
};
|
|
216
259
|
}
|
|
217
260
|
|
|
218
|
-
function groupKey(
|
|
219
|
-
|
|
261
|
+
function groupKey(
|
|
262
|
+
scenarioId: string,
|
|
263
|
+
role: string,
|
|
264
|
+
target: { id: string; model: string | null },
|
|
265
|
+
varying: ReadonlySet<EvalExecutionMatrixDimensionV1>,
|
|
266
|
+
): string {
|
|
267
|
+
return JSON.stringify([
|
|
268
|
+
scenarioId,
|
|
269
|
+
role,
|
|
270
|
+
varying.has("target") ? null : target.id,
|
|
271
|
+
varying.has("wireModel") ? null : target.model,
|
|
272
|
+
]);
|
|
220
273
|
}
|
|
221
274
|
|
|
222
275
|
function subtractNullable(left: number | null, right: number | null): number | null {
|
|
223
276
|
return left === null || right === null ? null : left - right;
|
|
224
277
|
}
|
|
278
|
+
|
|
279
|
+
function distributionNoiseBand(
|
|
280
|
+
baseline: EvalBehaviorMetricDistributionV1,
|
|
281
|
+
candidate: EvalBehaviorMetricDistributionV1,
|
|
282
|
+
): number {
|
|
283
|
+
// Missing coverage and single trials cannot establish empirical variation.
|
|
284
|
+
if (baseline.measured < 2 || candidate.measured < 2 || baseline.unmeasured > 0 || candidate.unmeasured > 0) return 0;
|
|
285
|
+
// Stored variance is population variance. Divide by n-1 to obtain the
|
|
286
|
+
// unbiased estimate of variance of each sample mean.
|
|
287
|
+
return (
|
|
288
|
+
2 *
|
|
289
|
+
Math.sqrt((baseline.variance ?? 0) / (baseline.measured - 1) + (candidate.variance ?? 0) / (candidate.measured - 1))
|
|
290
|
+
);
|
|
291
|
+
}
|
|
@@ -132,7 +132,7 @@ export function compareEvalArtifactsV4(
|
|
|
132
132
|
export function renderEvalComparisonV4(summary: EvalCompareV4Summary): string {
|
|
133
133
|
const envelopeFailures = summary.envelopeMismatches.map(
|
|
134
134
|
(mismatch) =>
|
|
135
|
-
` incomparable envelope: ${mismatch.scenarioId} ${mismatch.role} ${mismatch
|
|
135
|
+
` incomparable envelope: ${mismatch.scenarioId} ${mismatch.role} ${renderEvalComparisonRoutesV1(mismatch)} fields=${mismatch.fields.join(",")}`,
|
|
136
136
|
);
|
|
137
137
|
const affected = summary.affectedCorpusResults.map(
|
|
138
138
|
(result) =>
|
|
@@ -142,7 +142,7 @@ export function renderEvalComparisonV4(summary: EvalCompareV4Summary): string {
|
|
|
142
142
|
const roleReports = renderRollups("per-role baseline/candidate report", summary.roleReports);
|
|
143
143
|
const hardFailures = summary.hardGate.failures.map(
|
|
144
144
|
(failure) =>
|
|
145
|
-
` hard failure: ${failure.scenarioId} ${failure.role} ${failure
|
|
145
|
+
` hard failure: ${failure.scenarioId} ${failure.role} ${renderEvalComparisonRoutesV1(failure)} ${failure.metric} ${failure.change}`,
|
|
146
146
|
);
|
|
147
147
|
const tracked = summary.trackedMetrics.flatMap((row, index) => [
|
|
148
148
|
...(index === 0
|
|
@@ -172,14 +172,13 @@ export function renderEvalComparisonV4(summary: EvalCompareV4Summary): string {
|
|
|
172
172
|
...(index === 0
|
|
173
173
|
? [
|
|
174
174
|
"behavioral metrics:",
|
|
175
|
-
"scenario role
|
|
175
|
+
"scenario role baseline_target/model -> candidate_target/model family metric baseline_mean baseline_variance baseline_coverage candidate_mean candidate_variance candidate_coverage mean_delta variance_delta noise_band change variance_change comparability gate source",
|
|
176
176
|
]
|
|
177
177
|
: []),
|
|
178
178
|
[
|
|
179
179
|
row.scenarioId,
|
|
180
180
|
row.role,
|
|
181
|
-
row
|
|
182
|
-
row.target.model ?? "none",
|
|
181
|
+
renderEvalComparisonRoutesV1(row),
|
|
183
182
|
row.family,
|
|
184
183
|
row.metric,
|
|
185
184
|
formatMetric(row.baseline.mean),
|
|
@@ -190,6 +189,7 @@ export function renderEvalComparisonV4(summary: EvalCompareV4Summary): string {
|
|
|
190
189
|
`${row.candidate.measured}/${row.candidate.observations}`,
|
|
191
190
|
formatSignedMetric(row.meanDelta),
|
|
192
191
|
formatSignedMetric(row.varianceDelta),
|
|
192
|
+
formatMetric(row.noiseBand),
|
|
193
193
|
row.change,
|
|
194
194
|
row.varianceChange,
|
|
195
195
|
row.comparability.comparable ? "comparable" : `incomparable:${row.comparability.mismatchedFields.join(",")}`,
|
|
@@ -218,6 +218,16 @@ export function renderEvalComparisonV4(summary: EvalCompareV4Summary): string {
|
|
|
218
218
|
].join("\n");
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
+
export function renderEvalComparisonRoutesV1(identity: {
|
|
222
|
+
target: { id: string; model: string | null };
|
|
223
|
+
baselineTargets?: ReadonlyArray<{ id: string; model: string | null }>;
|
|
224
|
+
candidateTargets?: ReadonlyArray<{ id: string; model: string | null }>;
|
|
225
|
+
}): string {
|
|
226
|
+
const render = (targets: ReadonlyArray<{ id: string; model: string | null }>) =>
|
|
227
|
+
targets.map((target) => `${target.id}/${target.model ?? "none"}`).join(",") || "missing";
|
|
228
|
+
return `${render(identity.baselineTargets ?? [identity.target])} -> ${render(identity.candidateTargets ?? [identity.target])}`;
|
|
229
|
+
}
|
|
230
|
+
|
|
221
231
|
function behaviorRollups(
|
|
222
232
|
rows: ReadonlyArray<EvalBehaviorMetricComparisonV1>,
|
|
223
233
|
keyOf: (row: EvalBehaviorMetricComparisonV1) => string,
|
|
@@ -5,6 +5,8 @@ export interface EvalEnvelopeMismatchV1 {
|
|
|
5
5
|
scenarioId: string;
|
|
6
6
|
role: string;
|
|
7
7
|
target: { id: string; model: string | null };
|
|
8
|
+
baselineTargets?: Array<{ id: string; model: string | null }>;
|
|
9
|
+
candidateTargets?: Array<{ id: string; model: string | null }>;
|
|
8
10
|
fields: string[];
|
|
9
11
|
}
|
|
10
12
|
|
|
@@ -20,10 +22,15 @@ export function compareEvalExecutionEnvelopesV1(
|
|
|
20
22
|
baselineDimensions: ReadonlyArray<EvalExecutionMatrixDimensionV1>,
|
|
21
23
|
candidateDimensions: ReadonlyArray<EvalExecutionMatrixDimensionV1>,
|
|
22
24
|
): EvalEnvelopeMismatchV1 | null {
|
|
25
|
+
const mismatchIdentity = {
|
|
26
|
+
scenarioId: identity.scenarioId,
|
|
27
|
+
role: identity.role,
|
|
28
|
+
target: { id: identity.target.id, model: identity.target.model },
|
|
29
|
+
};
|
|
23
30
|
const leftDimensions = [...baselineDimensions].sort();
|
|
24
31
|
const rightDimensions = [...candidateDimensions].sort();
|
|
25
32
|
if (stableJson(leftDimensions) !== stableJson(rightDimensions)) {
|
|
26
|
-
return { ...
|
|
33
|
+
return { ...mismatchIdentity, fields: ["matrix.dimensions"] };
|
|
27
34
|
}
|
|
28
35
|
if (
|
|
29
36
|
(baseline.some((result) => result.executionEnvelope !== undefined) &&
|
|
@@ -31,22 +38,22 @@ export function compareEvalExecutionEnvelopesV1(
|
|
|
31
38
|
(candidate.some((result) => result.executionEnvelope !== undefined) &&
|
|
32
39
|
candidate.some((result) => result.executionEnvelope === undefined))
|
|
33
40
|
) {
|
|
34
|
-
return { ...
|
|
41
|
+
return { ...mismatchIdentity, fields: ["executionEnvelope.missingTrial"] };
|
|
35
42
|
}
|
|
36
43
|
const ignored = new Set(leftDimensions);
|
|
37
44
|
const baselineEnvelopes = uniqueEnvelopes(baseline, ignored);
|
|
38
45
|
const candidateEnvelopes = uniqueEnvelopes(candidate, ignored);
|
|
39
46
|
if (baselineEnvelopes.length === 0 && candidateEnvelopes.length === 0) return null;
|
|
40
47
|
if (baselineEnvelopes.length === 0 || candidateEnvelopes.length === 0) {
|
|
41
|
-
return { ...
|
|
48
|
+
return { ...mismatchIdentity, fields: ["executionEnvelope"] };
|
|
42
49
|
}
|
|
43
50
|
if (baselineEnvelopes.length > 1 || candidateEnvelopes.length > 1) {
|
|
44
|
-
return { ...
|
|
51
|
+
return { ...mismatchIdentity, fields: ["executionEnvelope.withinRunVariance"] };
|
|
45
52
|
}
|
|
46
53
|
const left = baselineEnvelopes[0];
|
|
47
54
|
const right = candidateEnvelopes[0];
|
|
48
55
|
if (left === undefined || right === undefined || stableJson(left) === stableJson(right)) return null;
|
|
49
|
-
return { ...
|
|
56
|
+
return { ...mismatchIdentity, fields: differingFields(left, right, ignored) };
|
|
50
57
|
}
|
|
51
58
|
|
|
52
59
|
function uniqueEnvelopes(
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
1
4
|
import { enumerateWorkspaceFiles } from "../../../core/workspace-files.js";
|
|
2
5
|
import { readCodewiki, structuralCodewikiHash } from "../../context/codewiki/artifact.js";
|
|
3
6
|
import { renderCodewikiDigest } from "../../context/codewiki/digest.js";
|
|
@@ -10,13 +13,31 @@ export function collectContextMetrics(cwd: string): Record<string, number | stri
|
|
|
10
13
|
const visiblePaths = new Set(enumerateWorkspaceFiles(cwd));
|
|
11
14
|
const artifactSourceFiles = codewiki.files.filter((file) => file.lang !== "config");
|
|
12
15
|
const indexedFiles = artifactSourceFiles.filter((file) => visiblePaths.has(file.path)).length;
|
|
13
|
-
|
|
16
|
+
let contentValidFiles = 0;
|
|
17
|
+
let missingFiles = 0;
|
|
18
|
+
for (const file of artifactSourceFiles) {
|
|
19
|
+
try {
|
|
20
|
+
// Match the indexer's UTF-8 source identity, including legacy records
|
|
21
|
+
// whose missing hash cannot establish content validity.
|
|
22
|
+
const hash = createHash("sha256")
|
|
23
|
+
.update(readFileSync(join(cwd, file.path), "utf8"))
|
|
24
|
+
.digest("hex")
|
|
25
|
+
.slice(0, 16);
|
|
26
|
+
if (visiblePaths.has(file.path) && file.hash === hash) contentValidFiles += 1;
|
|
27
|
+
} catch (error) {
|
|
28
|
+
const code = (error as NodeJS.ErrnoException).code;
|
|
29
|
+
if (code === "ENOENT" || code === "ENOTDIR") missingFiles += 1;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const staleFiles = artifactSourceFiles.length - contentValidFiles;
|
|
14
33
|
const sourceFiles = detectProjectProfile(cwd).sourceFiles;
|
|
15
34
|
const digest = renderCodewikiDigest(codewiki);
|
|
16
35
|
return {
|
|
17
36
|
"context.indexedFiles": indexedFiles,
|
|
18
37
|
"context.artifactFiles": artifactSourceFiles.length,
|
|
19
38
|
"context.staleFiles": staleFiles,
|
|
39
|
+
"context.contentValidFiles": contentValidFiles,
|
|
40
|
+
"context.missingFiles": missingFiles,
|
|
20
41
|
"context.coverage": sourceFiles === 0 ? (artifactSourceFiles.length === 0 ? 1 : 0) : indexedFiles / sourceFiles,
|
|
21
42
|
"context.structuralHash": structuralCodewikiHash(codewiki),
|
|
22
43
|
"context.digestTokens": Math.ceil(digest.length / 4),
|
|
@@ -26,6 +47,8 @@ export function collectContextMetrics(cwd: string): Record<string, number | stri
|
|
|
26
47
|
"context.indexedFiles": 0,
|
|
27
48
|
"context.artifactFiles": 0,
|
|
28
49
|
"context.staleFiles": 0,
|
|
50
|
+
"context.contentValidFiles": 0,
|
|
51
|
+
"context.missingFiles": 0,
|
|
29
52
|
"context.coverage": 0,
|
|
30
53
|
"context.structuralHash": null,
|
|
31
54
|
"context.digestTokens": 0,
|