@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
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { lstat, readFile } from "node:fs/promises";
|
|
3
|
+
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
4
|
+
|
|
5
|
+
export class EvalGraderIntegrityError extends Error {}
|
|
6
|
+
|
|
7
|
+
/** Explicit dependencies avoid guessing executable paths from arbitrary shell commands. */
|
|
8
|
+
export async function protectGraderFiles(cwd: string, files: readonly string[]): Promise<() => Promise<void>> {
|
|
9
|
+
const paths = files.map((file) => {
|
|
10
|
+
const path = resolve(cwd, file);
|
|
11
|
+
const rel = relative(cwd, path);
|
|
12
|
+
if (isAbsolute(file) || rel === ".." || rel.startsWith(`..${sep}`))
|
|
13
|
+
throw new EvalGraderIntegrityError(`grader dependency escapes workspace: ${file}`);
|
|
14
|
+
return path;
|
|
15
|
+
});
|
|
16
|
+
const fingerprint = async (path: string) => {
|
|
17
|
+
// Do not follow a replacement symlink to content chosen outside the fixture.
|
|
18
|
+
let current = path;
|
|
19
|
+
while (current !== resolve(cwd)) {
|
|
20
|
+
if ((await lstat(current)).isSymbolicLink())
|
|
21
|
+
throw new EvalGraderIntegrityError(`grader dependency is a symlink: ${path}`);
|
|
22
|
+
current = resolve(current, "..");
|
|
23
|
+
}
|
|
24
|
+
return createHash("sha256")
|
|
25
|
+
.update(await readFile(path))
|
|
26
|
+
.digest("hex");
|
|
27
|
+
};
|
|
28
|
+
const hashes = await Promise.all(paths.map(fingerprint));
|
|
29
|
+
return async () => {
|
|
30
|
+
for (const [index, path] of paths.entries()) {
|
|
31
|
+
try {
|
|
32
|
+
if ((await fingerprint(path)) === hashes[index]) continue;
|
|
33
|
+
} catch {
|
|
34
|
+
/* Missing, unreadable, and replaced dependencies all invalidate grading. */
|
|
35
|
+
}
|
|
36
|
+
throw new EvalGraderIntegrityError(`grader dependency changed during trial: ${relative(cwd, path)}`);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -1,4 +1,43 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { readdirSync, readFileSync, readlinkSync } from "node:fs";
|
|
4
|
+
import { join, resolve } from "node:path";
|
|
5
|
+
|
|
6
|
+
type FileBaseline = Map<string, { hash: string; bytes: number }>;
|
|
7
|
+
const baselines = new Map<string, FileBaseline>();
|
|
8
|
+
|
|
9
|
+
/** Held by the harness process so a runner cannot rewrite its own baseline. */
|
|
10
|
+
export function recordPatchBaseline(cwd: string): void {
|
|
11
|
+
baselines.set(resolve(cwd), snapshotFiles(cwd));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function forgetPatchBaseline(cwd: string): void {
|
|
15
|
+
baselines.delete(resolve(cwd));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function snapshotFiles(cwd: string): FileBaseline {
|
|
19
|
+
const files: FileBaseline = new Map();
|
|
20
|
+
function walk(dir: string, prefix: string): void {
|
|
21
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
22
|
+
if (entry.name === ".git") continue;
|
|
23
|
+
const path = join(dir, entry.name);
|
|
24
|
+
const relative = prefix + entry.name;
|
|
25
|
+
if (entry.isDirectory()) walk(path, `${relative}/`);
|
|
26
|
+
else if (entry.isFile() || entry.isSymbolicLink()) {
|
|
27
|
+
const bytes = entry.isSymbolicLink() ? Buffer.from(readlinkSync(path)) : readFileSync(path);
|
|
28
|
+
files.set(relative, {
|
|
29
|
+
hash: createHash("sha256")
|
|
30
|
+
.update(entry.isSymbolicLink() ? "link:" : "file:")
|
|
31
|
+
.update(bytes)
|
|
32
|
+
.digest("hex"),
|
|
33
|
+
bytes: bytes.length,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
walk(cwd, "");
|
|
39
|
+
return files;
|
|
40
|
+
}
|
|
2
41
|
|
|
3
42
|
export interface PatchMetrics {
|
|
4
43
|
bytes: number;
|
|
@@ -6,9 +45,26 @@ export interface PatchMetrics {
|
|
|
6
45
|
testFilesModified: number;
|
|
7
46
|
}
|
|
8
47
|
|
|
9
|
-
export function collectPatchMetrics(cwd: string): PatchMetrics {
|
|
48
|
+
export function collectPatchMetrics(cwd: string): PatchMetrics | null {
|
|
49
|
+
const baseline = baselines.get(resolve(cwd));
|
|
50
|
+
if (baseline !== undefined) {
|
|
51
|
+
const current = snapshotFiles(cwd);
|
|
52
|
+
const changed = [...new Set([...baseline.keys(), ...current.keys()])].filter(
|
|
53
|
+
(path) => baseline.get(path)?.hash !== current.get(path)?.hash,
|
|
54
|
+
);
|
|
55
|
+
return {
|
|
56
|
+
// For hash baselines this is changed file content bytes, including deleted
|
|
57
|
+
// content, rather than a textual Git diff (which cannot represent all files).
|
|
58
|
+
bytes: changed.reduce((sum, path) => sum + (current.get(path)?.bytes ?? baseline.get(path)?.bytes ?? 0), 0),
|
|
59
|
+
filesChanged: changed.length,
|
|
60
|
+
testFilesModified: changed.filter((file) => /(^|\/)(test|tests|spec|__tests__)(\/|$)|\.(test|spec)\./.test(file))
|
|
61
|
+
.length,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
10
65
|
const diff = spawnSync("git", ["diff", "--", "."], { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
|
|
11
|
-
|
|
66
|
+
if (diff.status !== 0 || typeof diff.stdout !== "string") return null;
|
|
67
|
+
const text = diff.stdout;
|
|
12
68
|
const files = text
|
|
13
69
|
.split(/\r?\n/)
|
|
14
70
|
.filter((line) => line.startsWith("diff --git "))
|
|
@@ -4,6 +4,7 @@ import { tmpdir } from "node:os";
|
|
|
4
4
|
import { relative, resolve } from "node:path";
|
|
5
5
|
import { promisify } from "node:util";
|
|
6
6
|
import type { EvalWorkspaceV2 } from "../schema/suite.js";
|
|
7
|
+
import { forgetPatchBaseline, recordPatchBaseline } from "../verifiers/patch.js";
|
|
7
8
|
import type { PreparedEvalWorkspace } from "./local.js";
|
|
8
9
|
|
|
9
10
|
const execFileAsync = promisify(execFile);
|
|
@@ -42,9 +43,11 @@ export async function prepareTempCopyWorkspace(
|
|
|
42
43
|
recursive: true,
|
|
43
44
|
filter: (path) => shouldCopy(relative(source, path), excludes, selection),
|
|
44
45
|
});
|
|
46
|
+
recordPatchBaseline(dest);
|
|
45
47
|
return {
|
|
46
48
|
dir: dest,
|
|
47
49
|
cleanup: async () => {
|
|
50
|
+
forgetPatchBaseline(dest);
|
|
48
51
|
await rm(dest, { recursive: true, force: true });
|
|
49
52
|
},
|
|
50
53
|
};
|
|
@@ -12,6 +12,8 @@ import type {
|
|
|
12
12
|
} from "../dispatch/index.js";
|
|
13
13
|
import { type ExecutionRole, isExecutionRole, readGateDecisionArtifactsForRunIds } from "../dispatch/index.js";
|
|
14
14
|
import { detectValidationCommand } from "../safety/protected-artifacts.js";
|
|
15
|
+
import { foldDecisionBoard } from "../session/decision-board.js";
|
|
16
|
+
import { type DecisionLedgerEntry, decisionRef } from "../session/entries.js";
|
|
15
17
|
import {
|
|
16
18
|
type AuditJsonRow,
|
|
17
19
|
type BashExecutionEntry,
|
|
@@ -23,6 +25,7 @@ import {
|
|
|
23
25
|
readSessionEntriesForId,
|
|
24
26
|
type SessionEntry,
|
|
25
27
|
} from "../session/index.js";
|
|
28
|
+
import { filterEntriesToActivePath } from "../session/tree/active-path.js";
|
|
26
29
|
import { attributeEvidenceFailure } from "./failure-attribution.js";
|
|
27
30
|
import { renderEvidenceFindingsMarkdown } from "./findings-markdown.js";
|
|
28
31
|
import { compareCodepoints as compareStrings } from "./ordering.js";
|
|
@@ -37,6 +40,7 @@ import {
|
|
|
37
40
|
type EvidenceAuditLinkedRow,
|
|
38
41
|
type EvidenceBuildResult,
|
|
39
42
|
type EvidenceCleanTraceRow,
|
|
43
|
+
type EvidenceDecision,
|
|
40
44
|
type EvidenceFinding,
|
|
41
45
|
type EvidenceGateDecisionsFile,
|
|
42
46
|
type EvidenceLinkConfidence,
|
|
@@ -94,6 +98,7 @@ interface LinkedSessionEntry {
|
|
|
94
98
|
}
|
|
95
99
|
|
|
96
100
|
interface SessionLinkResult {
|
|
101
|
+
decisionBoards: Map<string, DecisionLedgerEntry[]>;
|
|
97
102
|
entries: LinkedSessionEntry[];
|
|
98
103
|
attemptedSessionIds: string[];
|
|
99
104
|
missingSessionIds: string[];
|
|
@@ -163,7 +168,10 @@ export async function buildEvidence(options: BuildEvidenceOptions): Promise<Evid
|
|
|
163
168
|
gateDecisions: gateDecisions.decisions,
|
|
164
169
|
validationEvidence,
|
|
165
170
|
});
|
|
166
|
-
const
|
|
171
|
+
const decisionLinks = resolveReceiptDecisions(runSources, sessionLinks);
|
|
172
|
+
const rawFindings = buildFindings(runSources, trustStatusRaw, sessionLinks, auditLinks, protectedArtifactsRaw);
|
|
173
|
+
for (const row of decisionLinks.findings)
|
|
174
|
+
rawFindings.push({ ...row, id: `finding-${String(rawFindings.length + 1).padStart(3, "0")}` });
|
|
167
175
|
// Export-boundary redaction (cold path): secret-shaped values are scrubbed
|
|
168
176
|
// from everything the bundle serializes: envelopes, receipts (including
|
|
169
177
|
// delegation toolCallLog arguments), tool-event previews, audit rows,
|
|
@@ -171,6 +179,7 @@ export async function buildEvidence(options: BuildEvidenceOptions): Promise<Evid
|
|
|
171
179
|
// session files are untouched; the bundle is the boundary, and the
|
|
172
180
|
// overview's redactionCount keeps the bundle honest about its filtering.
|
|
173
181
|
const tally = createRedactionTally();
|
|
182
|
+
const findings = redactSecretsDeep(rawFindings, tally);
|
|
174
183
|
const redactedRunSources: EvidenceRunSource[] = runSources.map((item) => ({
|
|
175
184
|
...item,
|
|
176
185
|
envelope: redactSecretsDeep(item.envelope, tally),
|
|
@@ -187,18 +196,21 @@ export async function buildEvidence(options: BuildEvidenceOptions): Promise<Evid
|
|
|
187
196
|
};
|
|
188
197
|
const protectedArtifacts = redactSecretsDeep(protectedArtifactsRaw, tally);
|
|
189
198
|
const trustStatus = redactSecretsDeep(trustStatusRaw, tally);
|
|
190
|
-
const overview =
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
199
|
+
const overview: EvidenceOverview = {
|
|
200
|
+
...buildOverview(
|
|
201
|
+
evidenceId,
|
|
202
|
+
source,
|
|
203
|
+
redactedRunSources,
|
|
204
|
+
findings,
|
|
205
|
+
sessionLinks,
|
|
206
|
+
redactedAuditLinks,
|
|
207
|
+
redactedToolEvents,
|
|
208
|
+
protectedArtifacts,
|
|
209
|
+
),
|
|
210
|
+
decisions: redactSecretsDeep(decisionLinks.decisions, tally),
|
|
211
|
+
};
|
|
200
212
|
const transcript = redactSecretsText(
|
|
201
|
-
renderTranscript(overview, redactedRunSources, sessionLinks, trustStatusRaw),
|
|
213
|
+
renderTranscript(overview, redactedRunSources, sessionLinks, trustStatusRaw, findings),
|
|
202
214
|
tally,
|
|
203
215
|
);
|
|
204
216
|
const finalOverview: EvidenceOverview = { ...overview, redactionCount: tally.count };
|
|
@@ -215,7 +227,17 @@ export async function buildEvidence(options: BuildEvidenceOptions): Promise<Evid
|
|
|
215
227
|
protectedArtifacts,
|
|
216
228
|
transcript,
|
|
217
229
|
);
|
|
218
|
-
return {
|
|
230
|
+
return {
|
|
231
|
+
evidenceId,
|
|
232
|
+
directory,
|
|
233
|
+
overview: finalOverview,
|
|
234
|
+
findings,
|
|
235
|
+
trustStatus,
|
|
236
|
+
ungroundedClaims: runSources.reduce((total, source) => {
|
|
237
|
+
const grounding = authenticatedReceipt(source)?.validationGrounding;
|
|
238
|
+
return total + (grounding === undefined ? 0 : Math.max(0, grounding.claimed - grounding.grounded));
|
|
239
|
+
}, 0),
|
|
240
|
+
};
|
|
219
241
|
}
|
|
220
242
|
|
|
221
243
|
function buildOverview(
|
|
@@ -229,7 +251,10 @@ function buildOverview(
|
|
|
229
251
|
protectedArtifacts: EvidenceProtectedArtifactsFile,
|
|
230
252
|
): EvidenceOverview {
|
|
231
253
|
const envelopes = runSources.map((item) => item.envelope);
|
|
232
|
-
const receipts = runSources.flatMap((item) =>
|
|
254
|
+
const receipts = runSources.flatMap((item) => {
|
|
255
|
+
const receipt = authenticatedReceipt(item);
|
|
256
|
+
return receipt === null ? [] : [receipt];
|
|
257
|
+
});
|
|
233
258
|
const toolStats = receipts.flatMap((receipt) => receipt.toolStats);
|
|
234
259
|
const runIds = envelopes.map((envelope) => envelope.id).sort(compareStrings);
|
|
235
260
|
const sessionIds = uniqueStrings(
|
|
@@ -619,7 +644,7 @@ async function writeEvidenceFiles(
|
|
|
619
644
|
await writeJson(join(directory, "overview.json"), overview);
|
|
620
645
|
await writeFile(
|
|
621
646
|
join(directory, "transcript.md"),
|
|
622
|
-
transcript ?? renderTranscript(overview, runSources, sessionLinks, trustStatus),
|
|
647
|
+
transcript ?? renderTranscript(overview, runSources, sessionLinks, trustStatus, findings),
|
|
623
648
|
"utf8",
|
|
624
649
|
);
|
|
625
650
|
await writeJsonl(join(directory, "trace.raw.jsonl"), rawTraceRows(runSources));
|
|
@@ -736,6 +761,7 @@ async function linkSessionEntries(
|
|
|
736
761
|
const attemptedSessionIds = sourceSessionIds(source, runSources);
|
|
737
762
|
const windows = attributionWindows(ledger, runSources, attemptedSessionIds);
|
|
738
763
|
const result: SessionLinkResult = {
|
|
764
|
+
decisionBoards: new Map(),
|
|
739
765
|
entries: [],
|
|
740
766
|
attemptedSessionIds,
|
|
741
767
|
missingSessionIds: [],
|
|
@@ -748,6 +774,7 @@ async function linkSessionEntries(
|
|
|
748
774
|
continue;
|
|
749
775
|
}
|
|
750
776
|
result.readErrors.push(...read.errors);
|
|
777
|
+
result.decisionBoards.set(sessionId, foldDecisionBoard(filterEntriesToActivePath(read.entries, read.leafTurnId)));
|
|
751
778
|
for (const entry of read.entries) {
|
|
752
779
|
const link = linkSessionEntry(entry, windows);
|
|
753
780
|
if (source.kind === "run" && !linkCoversRun(link, source.runId)) continue;
|
|
@@ -1280,6 +1307,7 @@ function renderTranscript(
|
|
|
1280
1307
|
runSources: ReadonlyArray<EvidenceRunSource>,
|
|
1281
1308
|
sessionLinks: SessionLinkResult,
|
|
1282
1309
|
trustStatus: EvidenceTrustStatusFile,
|
|
1310
|
+
findings: ReadonlyArray<EvidenceFinding>,
|
|
1283
1311
|
): string {
|
|
1284
1312
|
const trustByRun = new Map(trustStatus.runs.map((entry) => [entry.runId, entry.status]));
|
|
1285
1313
|
const lines = [
|
|
@@ -1306,6 +1334,21 @@ function renderTranscript(
|
|
|
1306
1334
|
}
|
|
1307
1335
|
}
|
|
1308
1336
|
}
|
|
1337
|
+
const decisionFindings = findings.filter(
|
|
1338
|
+
(row) => row.tag === "context-provenance" && row.message.startsWith("Decision ref "),
|
|
1339
|
+
);
|
|
1340
|
+
if (decisionFindings.length > 0) {
|
|
1341
|
+
lines.push("", "## Decision provenance");
|
|
1342
|
+
for (const row of decisionFindings) lines.push(`- [${row.severity}] ${row.runId}: ${row.message}`);
|
|
1343
|
+
for (const decision of overview.decisions ?? []) {
|
|
1344
|
+
lines.push(
|
|
1345
|
+
`\n### ${decision.ref} (run ${decision.runId}, session ${decision.sessionId})`,
|
|
1346
|
+
"```json",
|
|
1347
|
+
JSON.stringify(decision.record, null, 2),
|
|
1348
|
+
"```",
|
|
1349
|
+
);
|
|
1350
|
+
}
|
|
1351
|
+
}
|
|
1309
1352
|
if (sessionLinks.entries.length > 0) {
|
|
1310
1353
|
lines.push("", "## Linked Session Transcript");
|
|
1311
1354
|
for (const linked of sessionLinks.entries) {
|
|
@@ -1430,11 +1473,13 @@ function renderSessionTranscriptEntry(linked: LinkedSessionEntry): string[] {
|
|
|
1430
1473
|
const label = decision.label === undefined ? "" : ` label=${previewUnknown(decision.label)}`;
|
|
1431
1474
|
const sourceQuestion =
|
|
1432
1475
|
decision.source_question === undefined ? "" : ` sourceQuestion=${previewUnknown(decision.source_question)}`;
|
|
1433
|
-
const
|
|
1476
|
+
const revisionSource = decision.revisionSource ?? "unknown";
|
|
1477
|
+
const revision =
|
|
1478
|
+
decision.revisedAt === undefined ? "" : ` revisedAt=${decision.revisedAt} revisionSource=${revisionSource}`;
|
|
1434
1479
|
const correction =
|
|
1435
1480
|
decision.correction === undefined
|
|
1436
1481
|
? ""
|
|
1437
|
-
: ` correctionSource
|
|
1482
|
+
: ` correctionSource=${revisionSource} correction=${previewUnknown(decision.correction)}`;
|
|
1438
1483
|
return ` decision key=${decision.key} status=${decision.status} decidedAt=${decision.decidedAt}${revision}${label}${sourceQuestion} value=${previewUnknown(decision.value)}${correction}`;
|
|
1439
1484
|
}),
|
|
1440
1485
|
];
|
|
@@ -1577,6 +1622,7 @@ function parseRunEnvelope(value: unknown, source: string): RunEnvelope {
|
|
|
1577
1622
|
// tampered. The validated reads below still gate the fields evidence uses.
|
|
1578
1623
|
return {
|
|
1579
1624
|
...(value as Partial<RunEnvelope>),
|
|
1625
|
+
version: 1,
|
|
1580
1626
|
id: readString(value, source, "id"),
|
|
1581
1627
|
agentId: readString(value, source, "agentId"),
|
|
1582
1628
|
executionRole: readExecutionRole(value, source),
|
|
@@ -1874,3 +1920,46 @@ function sanitizeEvidenceId(value: string): string {
|
|
|
1874
1920
|
const clean = value.replace(/[^A-Za-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
1875
1921
|
return clean.length === 0 ? "unknown" : clean;
|
|
1876
1922
|
}
|
|
1923
|
+
|
|
1924
|
+
/** Receipt refs authenticate the link, while the session ledger supplies the recorded argument. */
|
|
1925
|
+
function resolveReceiptDecisions(
|
|
1926
|
+
runSources: ReadonlyArray<EvidenceRunSource>,
|
|
1927
|
+
sessions: SessionLinkResult,
|
|
1928
|
+
): {
|
|
1929
|
+
decisions: EvidenceDecision[];
|
|
1930
|
+
findings: EvidenceFinding[];
|
|
1931
|
+
} {
|
|
1932
|
+
const decisions: EvidenceDecision[] = [];
|
|
1933
|
+
const findings: EvidenceFinding[] = [];
|
|
1934
|
+
for (const source of runSources) {
|
|
1935
|
+
const receipt = authenticatedReceipt(source);
|
|
1936
|
+
if (!receipt?.decisionRefs?.length) continue;
|
|
1937
|
+
const sessionId = receipt.sessionId;
|
|
1938
|
+
const board = sessionId === null ? [] : (sessions.decisionBoards.get(sessionId) ?? []);
|
|
1939
|
+
const records = new Map(
|
|
1940
|
+
board.flatMap((entry) =>
|
|
1941
|
+
entry.decisions.map(
|
|
1942
|
+
(record) =>
|
|
1943
|
+
[
|
|
1944
|
+
decisionRef(entry.interviewId, record.key),
|
|
1945
|
+
{ ...record, source: record.source ?? (entry.origin === "agent" ? ("agent" as const) : ("operator" as const)) },
|
|
1946
|
+
] as const,
|
|
1947
|
+
),
|
|
1948
|
+
),
|
|
1949
|
+
);
|
|
1950
|
+
for (const ref of new Set(receipt.decisionRefs)) {
|
|
1951
|
+
const record = records.get(ref);
|
|
1952
|
+
if (record && sessionId !== null) decisions.push({ runId: receipt.runId, sessionId, ref, record });
|
|
1953
|
+
findings.push(
|
|
1954
|
+
finding(
|
|
1955
|
+
findings.length,
|
|
1956
|
+
record ? "info" : "warn",
|
|
1957
|
+
"context-provenance",
|
|
1958
|
+
receipt.runId,
|
|
1959
|
+
`Decision ref ${ref} ${record ? "resolved" : "does not resolve"} on session ${sessionId ?? "(unlinked)"} active path`,
|
|
1960
|
+
),
|
|
1961
|
+
);
|
|
1962
|
+
}
|
|
1963
|
+
}
|
|
1964
|
+
return { decisions, findings };
|
|
1965
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fixed machine-readable projection of one evidence bundle's trust record.
|
|
3
|
+
*
|
|
4
|
+
* `evidence inspect <id>` prints an operator record that quotes the task text,
|
|
5
|
+
* the bundle's file list, and per-finding prose. This is the same bundle read
|
|
6
|
+
* down to the one thing a GUI can carry safely and usefully: which runs the
|
|
7
|
+
* bundle covers, what verdict each run earned, and which axis produced it.
|
|
8
|
+
*
|
|
9
|
+
* Every value here comes from a closed vocabulary. The axis names, the axis
|
|
10
|
+
* states, and the verdicts are all enumerations the harness owns, so there is
|
|
11
|
+
* no free-form text on this surface at all, which is what lets it answer the
|
|
12
|
+
* question the inventory raises without reopening the boundary the inventory
|
|
13
|
+
* closed.
|
|
14
|
+
*
|
|
15
|
+
* Unlike the other fixed reads this one takes an identifier, because an
|
|
16
|
+
* operator names the bundle. The GUI host may only pass back an id it served
|
|
17
|
+
* inside its current bounded window; see `apps/workbench/artifact-allowlist.ts`.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { clioDataDir } from "../../core/xdg.js";
|
|
21
|
+
import { inspectEvidence, TRUST_STATUS_AXES, type TrustStatusAxis, type TrustVerdict, trustVerdict } from "./index.js";
|
|
22
|
+
|
|
23
|
+
export const EVIDENCE_DETAIL_MAX_RUNS = 16;
|
|
24
|
+
|
|
25
|
+
export interface EvidenceDetailRun {
|
|
26
|
+
readonly runId: string;
|
|
27
|
+
readonly verdict: TrustVerdict;
|
|
28
|
+
/** Every axis, always all six, so an absent axis is stated rather than missing. */
|
|
29
|
+
readonly axes: Readonly<Record<TrustStatusAxis, string>>;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface EvidenceDetailSnapshot {
|
|
33
|
+
readonly version: 1;
|
|
34
|
+
readonly generatedAt: string;
|
|
35
|
+
readonly evidenceId: string;
|
|
36
|
+
readonly sourceKind: "run" | "session" | "eval";
|
|
37
|
+
/** False when the bundle predates the canonical trust projection. */
|
|
38
|
+
readonly canonical: boolean;
|
|
39
|
+
readonly runs: readonly EvidenceDetailRun[];
|
|
40
|
+
readonly runsTruncated: boolean;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export async function evidenceDetailSnapshot(
|
|
44
|
+
evidenceId: string,
|
|
45
|
+
now: () => number = Date.now,
|
|
46
|
+
dataDir: string = clioDataDir(),
|
|
47
|
+
): Promise<EvidenceDetailSnapshot> {
|
|
48
|
+
const inspected = await inspectEvidence(dataDir, evidenceId);
|
|
49
|
+
const all = inspected.trustStatus.runs;
|
|
50
|
+
const window = all.slice(0, EVIDENCE_DETAIL_MAX_RUNS);
|
|
51
|
+
return {
|
|
52
|
+
version: 1,
|
|
53
|
+
generatedAt: new Date(now()).toISOString(),
|
|
54
|
+
evidenceId: inspected.overview.evidenceId,
|
|
55
|
+
sourceKind: inspected.overview.source.kind,
|
|
56
|
+
canonical: inspected.trustStatus.projection === "canonical",
|
|
57
|
+
runs: window.map(
|
|
58
|
+
(run): EvidenceDetailRun => ({
|
|
59
|
+
runId: run.runId,
|
|
60
|
+
verdict: trustVerdict(run.status),
|
|
61
|
+
axes: Object.fromEntries(TRUST_STATUS_AXES.map((axis) => [axis, run.status[axis].state])) as Record<
|
|
62
|
+
TrustStatusAxis,
|
|
63
|
+
string
|
|
64
|
+
>,
|
|
65
|
+
}),
|
|
66
|
+
),
|
|
67
|
+
runsTruncated: all.length > window.length,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
@@ -9,6 +9,7 @@ import { renderEvidenceFindingsMarkdown } from "./findings-markdown.js";
|
|
|
9
9
|
import { compareCodepoints as compareStrings } from "./ordering.js";
|
|
10
10
|
import { buildEvidenceTrustStatusFile } from "./run-trust.js";
|
|
11
11
|
import { evidenceDirectory, findingsFile } from "./store.js";
|
|
12
|
+
import { inspectRunReceiptTrustStatus } from "./trust-status.js";
|
|
12
13
|
import {
|
|
13
14
|
EVIDENCE_VERSION,
|
|
14
15
|
type EvidenceAuditLinkedRow,
|
|
@@ -107,7 +108,18 @@ export async function buildEvalEvidence(options: BuildEvalEvidenceOptions): Prom
|
|
|
107
108
|
gateDecisions,
|
|
108
109
|
trustStatus,
|
|
109
110
|
);
|
|
110
|
-
return {
|
|
111
|
+
return {
|
|
112
|
+
evidenceId,
|
|
113
|
+
directory,
|
|
114
|
+
overview,
|
|
115
|
+
findings,
|
|
116
|
+
trustStatus,
|
|
117
|
+
ungroundedClaims: linkedRuns.runSources.reduce((total, source) => {
|
|
118
|
+
if (!inspectRunReceiptTrustStatus(source.receipt, source.envelope).integrity.ok) return total;
|
|
119
|
+
const grounding = source.receipt?.validationGrounding;
|
|
120
|
+
return total + (grounding === undefined ? 0 : Math.max(0, grounding.claimed - grounding.grounded));
|
|
121
|
+
}, 0),
|
|
122
|
+
};
|
|
111
123
|
}
|
|
112
124
|
|
|
113
125
|
export function evalEvidenceId(evalId: string): string {
|
|
@@ -7,7 +7,7 @@ import type { EvidenceTag } from "./types.js";
|
|
|
7
7
|
*
|
|
8
8
|
* The forensic layer (`evidence/build.ts`) speaks the canonical 23-tag
|
|
9
9
|
* `EVIDENCE_TAGS` vocabulary over durable artifacts. The live layer
|
|
10
|
-
* (`safety/finish-contract.ts`) speaks a
|
|
10
|
+
* (`safety/finish-contract.ts`) speaks a 4-kind in-loop vocabulary
|
|
11
11
|
* (`FinishContractEvidenceKind`) over the last ~80 session entries. They are
|
|
12
12
|
* the same accountability concept observed at two depths.
|
|
13
13
|
*
|
|
@@ -29,11 +29,15 @@ import type { EvidenceTag } from "./types.js";
|
|
|
29
29
|
* - dispatch_receipt: a passed dispatch receipt, whose forensic concerns are
|
|
30
30
|
* `receipt-integrity` (the receipt verifies) and `session-linked` (the run
|
|
31
31
|
* is linked to its session).
|
|
32
|
+
* - limitation: a successful `limitation` tool receipt, which the forensic
|
|
33
|
+
* layer records as the `completion-evidence` info row for a run that
|
|
34
|
+
* finished limited instead of evidenced.
|
|
32
35
|
*/
|
|
33
36
|
export const FINISH_CONTRACT_EVIDENCE_TAGS: Record<FinishContractEvidenceKind, readonly EvidenceTag[]> = {
|
|
34
37
|
validation_command: ["no-validation", "proxy-validation"],
|
|
35
38
|
protected_artifact: ["protected-artifact"],
|
|
36
39
|
dispatch_receipt: ["receipt-integrity", "session-linked"],
|
|
40
|
+
limitation: ["completion-evidence"],
|
|
37
41
|
} as const;
|
|
38
42
|
|
|
39
43
|
/** The canonical tags a single live finish-contract kind projects onto. */
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fixed machine-readable projection of recent evidence artifacts.
|
|
3
|
+
*
|
|
4
|
+
* `evidence list` is an operator table and `evidence inspect <id>` needs an id,
|
|
5
|
+
* so neither is a transport a GUI host can invoke blind. This command accepts
|
|
6
|
+
* no identifier, path, or limit, selects a bounded newest-first window itself,
|
|
7
|
+
* and emits provenance, tags, totals, and a trust verdict.
|
|
8
|
+
*
|
|
9
|
+
* An overview carries the working directories the runs executed in, the task
|
|
10
|
+
* text the operator typed, and the file names inside the bundle. None of that
|
|
11
|
+
* appears here. What does is the shape of the artifact and how far it can be
|
|
12
|
+
* trusted, which is what an operator picks a bundle by.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { clioDataDir } from "../../core/xdg.js";
|
|
16
|
+
import { truncateToWidth } from "../../engine/tui-primitives.js";
|
|
17
|
+
import { sanitizeCallTargetText } from "../safety/call-target.js";
|
|
18
|
+
import {
|
|
19
|
+
EVIDENCE_TAGS,
|
|
20
|
+
type EvidenceOverview,
|
|
21
|
+
type EvidenceTag,
|
|
22
|
+
listEvidenceOverviews,
|
|
23
|
+
loadEvidenceTrustStatus,
|
|
24
|
+
type TrustVerdict,
|
|
25
|
+
trustVerdict,
|
|
26
|
+
} from "./index.js";
|
|
27
|
+
|
|
28
|
+
export const EVIDENCE_INVENTORY_MAX_ARTIFACTS = 12;
|
|
29
|
+
export const EVIDENCE_INVENTORY_MAX_IDS = 8;
|
|
30
|
+
|
|
31
|
+
const IDENTITY_WIDTH = 128;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Worst verdict first.
|
|
35
|
+
*
|
|
36
|
+
* An artifact covering several runs is only as trustworthy as its weakest run,
|
|
37
|
+
* so the fold takes the worst rather than the newest or the most common. A
|
|
38
|
+
* `compromised` run inside an otherwise clean bundle is the fact the operator
|
|
39
|
+
* needs, and averaging it away would be the one summary worth not printing.
|
|
40
|
+
*/
|
|
41
|
+
const VERDICT_SEVERITY: ReadonlyArray<TrustVerdict> = ["compromised", "unverified", "unknown", "grounded", "reviewed"];
|
|
42
|
+
|
|
43
|
+
export interface EvidenceInventoryArtifact {
|
|
44
|
+
readonly evidenceId: string;
|
|
45
|
+
readonly sourceKind: "run" | "session" | "eval";
|
|
46
|
+
readonly generatedAt: string;
|
|
47
|
+
readonly startedAt: string | null;
|
|
48
|
+
readonly endedAt: string | null;
|
|
49
|
+
readonly runIds: readonly string[];
|
|
50
|
+
readonly runIdsTruncated: boolean;
|
|
51
|
+
readonly agentIds: readonly string[];
|
|
52
|
+
readonly statuses: readonly string[];
|
|
53
|
+
readonly tags: readonly EvidenceTag[];
|
|
54
|
+
readonly totals: Readonly<{
|
|
55
|
+
runs: number;
|
|
56
|
+
receipts: number;
|
|
57
|
+
toolCalls: number;
|
|
58
|
+
toolErrors: number;
|
|
59
|
+
blockedToolCalls: number;
|
|
60
|
+
protectedArtifacts: number;
|
|
61
|
+
tokens: number;
|
|
62
|
+
costUsd: number;
|
|
63
|
+
wallTimeMs: number;
|
|
64
|
+
}>;
|
|
65
|
+
/** Secret-shaped values the builder replaced across the bundle's exports. */
|
|
66
|
+
readonly redactionCount: number;
|
|
67
|
+
readonly trust: Readonly<{
|
|
68
|
+
verdict: TrustVerdict;
|
|
69
|
+
/** Runs whose canonical trust status the bundle actually recorded. */
|
|
70
|
+
runsCovered: number;
|
|
71
|
+
/** True when the bundle predates the canonical trust projection. */
|
|
72
|
+
historical: boolean;
|
|
73
|
+
}>;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface EvidenceInventorySnapshot {
|
|
77
|
+
readonly version: 1;
|
|
78
|
+
readonly generatedAt: string;
|
|
79
|
+
readonly artifacts: readonly EvidenceInventoryArtifact[];
|
|
80
|
+
readonly truncated: boolean;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function bounded(value: string, width: number): string {
|
|
84
|
+
const sanitized = sanitizeCallTargetText(value);
|
|
85
|
+
if (sanitized.length === 0) return "unavailable";
|
|
86
|
+
return sanitizeCallTargetText(truncateToWidth(sanitized, width, "…", false));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Distinct, sanitized, bounded, in first-seen order. */
|
|
90
|
+
function identities(values: ReadonlyArray<string>): string[] {
|
|
91
|
+
const seen: string[] = [];
|
|
92
|
+
for (const value of values) {
|
|
93
|
+
const text = bounded(value, IDENTITY_WIDTH);
|
|
94
|
+
if (!seen.includes(text)) seen.push(text);
|
|
95
|
+
if (seen.length >= EVIDENCE_INVENTORY_MAX_IDS) break;
|
|
96
|
+
}
|
|
97
|
+
return seen;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function tally(value: number | undefined): number {
|
|
101
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? Math.trunc(value) : 0;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function amount(value: number | undefined): number {
|
|
105
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : 0;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Newest generation first. An unparseable stamp sorts oldest rather than throwing. */
|
|
109
|
+
function byNewest(a: EvidenceOverview, b: EvidenceOverview): number {
|
|
110
|
+
return (Date.parse(b.generatedAt) || 0) - (Date.parse(a.generatedAt) || 0);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export async function evidenceInventorySnapshot(
|
|
114
|
+
now: () => number = Date.now,
|
|
115
|
+
dataDir: string = clioDataDir(),
|
|
116
|
+
): Promise<EvidenceInventorySnapshot> {
|
|
117
|
+
const all = (await listEvidenceOverviews(dataDir)).sort(byNewest);
|
|
118
|
+
const window = all.slice(0, EVIDENCE_INVENTORY_MAX_ARTIFACTS);
|
|
119
|
+
const artifacts: EvidenceInventoryArtifact[] = [];
|
|
120
|
+
for (const overview of window) {
|
|
121
|
+
// One unreadable trust file costs that artifact its verdict, never the
|
|
122
|
+
// whole inventory: the bundle itself is still the thing being listed.
|
|
123
|
+
let verdict: TrustVerdict = "unknown";
|
|
124
|
+
let runsCovered = 0;
|
|
125
|
+
let historical = true;
|
|
126
|
+
try {
|
|
127
|
+
const status = await loadEvidenceTrustStatus(dataDir, overview.evidenceId);
|
|
128
|
+
historical = status.projection !== "canonical";
|
|
129
|
+
runsCovered = status.runs.length;
|
|
130
|
+
const verdicts = status.runs.map((run) => trustVerdict(run.status));
|
|
131
|
+
verdict = VERDICT_SEVERITY.find((candidate) => verdicts.includes(candidate)) ?? "unknown";
|
|
132
|
+
} catch {
|
|
133
|
+
verdict = "unknown";
|
|
134
|
+
}
|
|
135
|
+
artifacts.push({
|
|
136
|
+
evidenceId: bounded(overview.evidenceId, IDENTITY_WIDTH),
|
|
137
|
+
sourceKind: overview.source.kind,
|
|
138
|
+
generatedAt: overview.generatedAt,
|
|
139
|
+
startedAt: overview.startedAt,
|
|
140
|
+
endedAt: overview.endedAt,
|
|
141
|
+
runIds: identities(overview.runIds),
|
|
142
|
+
runIdsTruncated: overview.runIds.length > EVIDENCE_INVENTORY_MAX_IDS,
|
|
143
|
+
agentIds: identities(overview.agentIds),
|
|
144
|
+
statuses: identities(overview.statuses),
|
|
145
|
+
tags: overview.tags.filter((tag) => EVIDENCE_TAGS.includes(tag)),
|
|
146
|
+
totals: {
|
|
147
|
+
runs: tally(overview.totals.runs),
|
|
148
|
+
receipts: tally(overview.totals.receipts),
|
|
149
|
+
toolCalls: tally(overview.totals.toolCalls),
|
|
150
|
+
toolErrors: tally(overview.totals.toolErrors),
|
|
151
|
+
blockedToolCalls: tally(overview.totals.blockedToolCalls),
|
|
152
|
+
protectedArtifacts: tally(overview.totals.protectedArtifacts),
|
|
153
|
+
tokens: tally(overview.totals.tokens),
|
|
154
|
+
costUsd: amount(overview.totals.costUsd),
|
|
155
|
+
wallTimeMs: tally(overview.totals.wallTimeMs),
|
|
156
|
+
},
|
|
157
|
+
redactionCount: tally(overview.redactionCount),
|
|
158
|
+
trust: { verdict, runsCovered, historical },
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
version: 1,
|
|
163
|
+
generatedAt: new Date(now()).toISOString(),
|
|
164
|
+
artifacts,
|
|
165
|
+
truncated: all.length > window.length,
|
|
166
|
+
};
|
|
167
|
+
}
|