@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
|
@@ -118,6 +118,11 @@ export function createSafetyBundle(context: DomainContext): DomainBundle<SafetyC
|
|
|
118
118
|
let unsubscribeDispatchFailed: (() => void) | null = null;
|
|
119
119
|
const recordedRequestedPermissionIds = new Set<string>();
|
|
120
120
|
|
|
121
|
+
function activePolicyEngine(): SafetyPolicyEngine {
|
|
122
|
+
policyEngine ??= createSafetyPolicyEngine();
|
|
123
|
+
return policyEngine;
|
|
124
|
+
}
|
|
125
|
+
|
|
121
126
|
function writeAudit(rec: AuditRecord): void {
|
|
122
127
|
if (writer === null) return;
|
|
123
128
|
writer.write(rec);
|
|
@@ -274,7 +279,7 @@ export function createSafetyBundle(context: DomainContext): DomainBundle<SafetyC
|
|
|
274
279
|
return classifyCall(call);
|
|
275
280
|
},
|
|
276
281
|
evaluate(call, posture) {
|
|
277
|
-
const policy = (
|
|
282
|
+
const policy = activePolicyEngine().evaluate(call, posture);
|
|
278
283
|
const classification = policy.classification;
|
|
279
284
|
|
|
280
285
|
context.bus.emit(BusChannels.SafetyClassified, {
|
|
@@ -363,7 +368,11 @@ export function createSafetyBundle(context: DomainContext): DomainBundle<SafetyC
|
|
|
363
368
|
},
|
|
364
369
|
scopes: { readonly: READONLY_SCOPE, workspace: WORKSPACE_SCOPE, confirmed: CONFIRMED_SCOPE },
|
|
365
370
|
isSubset,
|
|
366
|
-
policy: {
|
|
371
|
+
policy: {
|
|
372
|
+
metadata: (posture) => activePolicyEngine().metadata(posture),
|
|
373
|
+
allowsObservationPath: (path) =>
|
|
374
|
+
activePolicyEngine().evaluate({ tool: "read", args: { path } }).reasonCode !== "path-policy:zeroAccessPaths",
|
|
375
|
+
},
|
|
367
376
|
audit: {
|
|
368
377
|
recordCount: () => recordCount,
|
|
369
378
|
recordToolCall: recordToolCallAudit,
|
|
@@ -4,16 +4,22 @@
|
|
|
4
4
|
* The chat-loop fires `turn_end` with the final assistant text and this
|
|
5
5
|
* registration emits an advisory `inject_reminder` (severity "warn") when the
|
|
6
6
|
* turn mutated workspace state but recorded no validation evidence and no
|
|
7
|
-
*
|
|
8
|
-
* the assistant's text. The chat-loop's generic effect application renders the
|
|
7
|
+
* `limitation` receipt. The trigger is the observed mutation, not the wording
|
|
8
|
+
* of the assistant's text, and the text never enters the assessment. The chat-loop's generic effect application renders the
|
|
9
9
|
* notice, persists the session entry, and flushes the reminder into the next
|
|
10
10
|
* model request. Every decision is also written to the audit ledger.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { VERIFICATION_SCRIPT_FAMILY_HINT } from "../../core/verification-scripts.js";
|
|
14
14
|
import type { MiddlewareEffect, MiddlewareHookInput, MiddlewareHookRegistration } from "../middleware/index.js";
|
|
15
|
+
import type { UserTaskAcceptance } from "../user-tasks/acceptance.js";
|
|
15
16
|
import type { CompletionContractAuditInput } from "./audit.js";
|
|
16
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
assessFinishContract,
|
|
19
|
+
DEFAULT_RECENT_ENTRY_LIMIT,
|
|
20
|
+
type FinishContractAssessment,
|
|
21
|
+
recentEntries,
|
|
22
|
+
} from "./finish-contract.js";
|
|
17
23
|
import type { Rigor } from "./rigor.js";
|
|
18
24
|
|
|
19
25
|
export const FINISH_CONTRACT_REGISTRATION_ID = "assessor.finish-contract";
|
|
@@ -21,15 +27,15 @@ export const FINISH_CONTRACT_REGISTRATION_ID = "assessor.finish-contract";
|
|
|
21
27
|
/**
|
|
22
28
|
* High-rigor re-prompt directive. Injected dynamically via effects (never added
|
|
23
29
|
* to the static system prompt) so the prompt prefix stays byte-stable. It tells
|
|
24
|
-
* the model to validate with a verification-family command or to
|
|
25
|
-
*
|
|
30
|
+
* the model to validate with a verification-family command or to record a
|
|
31
|
+
* `limitation` receipt before claiming done. The command hint mirrors the
|
|
26
32
|
* vocabulary `detectValidationCommand` and `isVerificationScriptName` accept.
|
|
27
33
|
*/
|
|
28
34
|
export const HIGH_RIGOR_REVALIDATION_MESSAGE =
|
|
29
35
|
`[Clio Coder] high-rigor finish gate: this completion claim has no validation evidence. ` +
|
|
30
36
|
`Before claiming done, run a verification command (the ${VERIFICATION_SCRIPT_FAMILY_HINT} family, ` +
|
|
31
|
-
`e.g. "npm run test", "npm run lint", "npm run build") or
|
|
32
|
-
`and
|
|
37
|
+
`e.g. "npm run test", "npm run lint", "npm run build") or call the limitation tool with the scope ` +
|
|
38
|
+
`and reason of what could not be verified. Do not end the turn until you have validated or recorded the limitation.`;
|
|
33
39
|
|
|
34
40
|
export interface CreateFinishContractRegistrationOptions {
|
|
35
41
|
/**
|
|
@@ -45,6 +51,7 @@ export interface CreateFinishContractRegistrationOptions {
|
|
|
45
51
|
* limitation instead of merely warning.
|
|
46
52
|
*/
|
|
47
53
|
resolveRigor?: () => Rigor;
|
|
54
|
+
readActiveAcceptance?: (window: ReadonlyArray<unknown>) => UserTaskAcceptance | undefined;
|
|
48
55
|
/**
|
|
49
56
|
* Record the contract's decision to the audit ledger. Optional; when wired
|
|
50
57
|
* (production passes the safety audit sink), every turn_end decision — each
|
|
@@ -59,7 +66,7 @@ export function createFinishContractRegistration(
|
|
|
59
66
|
): MiddlewareHookRegistration {
|
|
60
67
|
return {
|
|
61
68
|
id: FINISH_CONTRACT_REGISTRATION_ID,
|
|
62
|
-
description: "advise when a turn mutated files without validation evidence or
|
|
69
|
+
description: "advise when a turn mutated files without validation evidence or a limitation receipt",
|
|
63
70
|
hooks: ["turn_end"],
|
|
64
71
|
evaluate(input: MiddlewareHookInput, context): ReadonlyArray<MiddlewareEffect> {
|
|
65
72
|
if (input.hook !== "turn_end") return [];
|
|
@@ -70,8 +77,9 @@ export function createFinishContractRegistration(
|
|
|
70
77
|
// finalAssistantStopMessage.
|
|
71
78
|
const stopReason = input.metadata?.stopReason;
|
|
72
79
|
if (stopReason !== undefined && stopReason !== "stop") return [];
|
|
73
|
-
|
|
74
|
-
|
|
80
|
+
// An empty final text is not a completion claim. The assessor reads
|
|
81
|
+
// only ledger receipts, so the text is otherwise unused here.
|
|
82
|
+
if ((input.text?.trim() ?? "").length === 0) return [];
|
|
75
83
|
let entries: ReadonlyArray<unknown> | null;
|
|
76
84
|
try {
|
|
77
85
|
entries = options.readSessionEntries();
|
|
@@ -79,21 +87,28 @@ export function createFinishContractRegistration(
|
|
|
79
87
|
return [];
|
|
80
88
|
}
|
|
81
89
|
if (entries === null) return [];
|
|
90
|
+
const rigor = options.resolveRigor?.() ?? "normal";
|
|
91
|
+
const activeAcceptance =
|
|
92
|
+
rigor === "high"
|
|
93
|
+
? options.readActiveAcceptance?.(recentEntries(entries, input.turnId ?? null, DEFAULT_RECENT_ENTRY_LIMIT))
|
|
94
|
+
: undefined;
|
|
82
95
|
const assessment = assessFinishContract({
|
|
83
|
-
assistantText,
|
|
84
96
|
sessionEntries: entries,
|
|
97
|
+
workspaceRoot: process.cwd(),
|
|
98
|
+
rigor,
|
|
99
|
+
...(activeAcceptance ? { activeAcceptance } : {}),
|
|
85
100
|
assistantTurnId: input.turnId ?? null,
|
|
86
101
|
});
|
|
87
|
-
const rigor = options.resolveRigor?.() ?? "normal";
|
|
88
102
|
recordDecision(options, input.turnId ?? null, assessment, rigor);
|
|
89
103
|
if (assessment.kind !== "engage") return [];
|
|
90
104
|
if (rigor === "high") {
|
|
91
105
|
// Withhold the completion and force a re-prompt: a continuation
|
|
92
106
|
// request carries the turn onward, and the paired reminder gives
|
|
93
107
|
// the directive its own visible system-reminder line.
|
|
108
|
+
const message = activeAcceptance?.verification.length ? assessment.message : HIGH_RIGOR_REVALIDATION_MESSAGE;
|
|
94
109
|
return [
|
|
95
|
-
{ kind: "request_continuation", message
|
|
96
|
-
{ kind: "inject_reminder", message
|
|
110
|
+
{ kind: "request_continuation", message },
|
|
111
|
+
{ kind: "inject_reminder", message, severity: "warn" },
|
|
97
112
|
];
|
|
98
113
|
}
|
|
99
114
|
return [{ kind: "inject_reminder", message: assessment.message, severity: "warn" }];
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
1
2
|
import { ToolNames } from "../../core/tool-names.js";
|
|
2
3
|
import { isProjectVerifierCheckId, isVerificationScriptName } from "../../core/verification-scripts.js";
|
|
4
|
+
import { type DeclaredCheckSourceRef, PROJECT_VERIFIER_CATALOG_RELATIVE_PATH } from "../../tools/verify/catalog.js";
|
|
5
|
+
import type { UserTaskAcceptance } from "../user-tasks/acceptance.js";
|
|
3
6
|
import {
|
|
4
7
|
detectValidationCommand,
|
|
5
8
|
extractCommandDeleteTargets,
|
|
6
9
|
extractCommandWriteTargets,
|
|
7
10
|
toolMutationPaths,
|
|
8
11
|
} from "./protected-artifacts.js";
|
|
12
|
+
import type { Rigor } from "./rigor.js";
|
|
9
13
|
|
|
10
14
|
export const FINISH_CONTRACT_ADVISORY_MESSAGE =
|
|
11
|
-
"[Clio Coder] finish-contract advisory: you changed files this turn without recording validation evidence or
|
|
15
|
+
"[Clio Coder] finish-contract advisory: you changed files this turn without recording validation evidence or a limitation receipt. Run a verification command or call limitation with the scope and reason.";
|
|
12
16
|
|
|
13
17
|
/**
|
|
14
18
|
* The recent-window cap (entries since the last user message). Exported so a
|
|
@@ -17,11 +21,24 @@ export const FINISH_CONTRACT_ADVISORY_MESSAGE =
|
|
|
17
21
|
*/
|
|
18
22
|
export const DEFAULT_RECENT_ENTRY_LIMIT = 80;
|
|
19
23
|
|
|
20
|
-
export type FinishContractEvidenceKind =
|
|
24
|
+
export type FinishContractEvidenceKind =
|
|
25
|
+
| "validation_command"
|
|
26
|
+
| "protected_artifact"
|
|
27
|
+
| "dispatch_receipt"
|
|
28
|
+
| "limitation";
|
|
29
|
+
|
|
30
|
+
interface ValidationExecutionEvidence {
|
|
31
|
+
source?: DeclaredCheckSourceRef;
|
|
32
|
+
cwd?: string;
|
|
33
|
+
argv?: ReadonlyArray<string>;
|
|
34
|
+
durationMs?: number;
|
|
35
|
+
}
|
|
21
36
|
|
|
22
|
-
export interface FinishContractEvidence {
|
|
37
|
+
export interface FinishContractEvidence extends ValidationExecutionEvidence {
|
|
23
38
|
kind: FinishContractEvidenceKind;
|
|
24
39
|
summary: string;
|
|
40
|
+
check?: string;
|
|
41
|
+
paths?: ReadonlyArray<string>;
|
|
25
42
|
turnId?: string;
|
|
26
43
|
}
|
|
27
44
|
|
|
@@ -48,16 +65,22 @@ export type FinishContractAssessment =
|
|
|
48
65
|
};
|
|
49
66
|
|
|
50
67
|
export interface FinishContractInput {
|
|
51
|
-
assistantText: string;
|
|
52
68
|
sessionEntries?: ReadonlyArray<unknown>;
|
|
53
69
|
assistantTurnId?: string | null;
|
|
54
70
|
recentEntryLimit?: number;
|
|
71
|
+
rigor?: Rigor;
|
|
72
|
+
activeAcceptance?: UserTaskAcceptance;
|
|
73
|
+
/** Owning session workspace, supplied by the finish registration. */
|
|
74
|
+
workspaceRoot?: string;
|
|
55
75
|
}
|
|
56
76
|
|
|
57
77
|
interface ToolCallEvidenceCandidate {
|
|
58
78
|
turnId?: string;
|
|
59
79
|
toolCallId: string;
|
|
60
80
|
command: string;
|
|
81
|
+
check?: string;
|
|
82
|
+
paths?: string[];
|
|
83
|
+
execution?: ValidationExecutionEvidence;
|
|
61
84
|
}
|
|
62
85
|
|
|
63
86
|
interface MutationCandidate {
|
|
@@ -65,32 +88,26 @@ interface MutationCandidate {
|
|
|
65
88
|
paths: string[];
|
|
66
89
|
}
|
|
67
90
|
|
|
68
|
-
const LIMITATION_PATTERNS: ReadonlyArray<RegExp> = [
|
|
69
|
-
/\b(?:blocked by|blocker|blockers|unable to|not able to|could not|couldn't|cannot|can't)\b/i,
|
|
70
|
-
/\b(?:did not|didn't|have not|haven't|has not|hasn't|was not able|wasn't able)\b/i,
|
|
71
|
-
/\b(?:not complete|incomplete)\b/i,
|
|
72
|
-
/\b(?:not|un)(?:\s|-)?(?:validated|verified|tested)\b/i,
|
|
73
|
-
/^\s*Tests\s*:\s*(?:not run|not executed|not available|failed|blocked|skipped)\b/im,
|
|
74
|
-
/^\s*Known gaps?\s*:\s*(?!\s*(?:none|no\b|n\/a|not applicable)\b).+/im,
|
|
75
|
-
/\bremaining(?:\s+\w+){0,3}\s+(?:work|issue|issues|gap|gaps|blocker|blockers)\b/i,
|
|
76
|
-
];
|
|
77
|
-
|
|
78
91
|
/**
|
|
79
92
|
* Action-scoped completion contract. The engine keys off what the turn actually
|
|
80
93
|
* DID, not how the prompt was phrased: it engages only when the recent window
|
|
81
94
|
* mutated workspace state and then settled (turn_end) without recording
|
|
82
|
-
* validation evidence or
|
|
95
|
+
* validation evidence or a limitation receipt. The turn settling is itself
|
|
83
96
|
* the completion signal, so the model never has to type "done" to be gated, and
|
|
84
97
|
* a work request phrased as a question cannot bypass the gate.
|
|
85
98
|
*
|
|
86
99
|
* Decision order (pure function of ledger receipts):
|
|
87
100
|
* 1. no mutating receipt in the window -> ok/no_mutation
|
|
88
101
|
* 2. validation evidence present -> ok/validation_evidence
|
|
89
|
-
* 3.
|
|
102
|
+
* 3. successful `limitation` receipt present -> ok/explicit_limitation
|
|
90
103
|
* 4. otherwise -> engage/unvalidated_mutation
|
|
104
|
+
*
|
|
105
|
+
* The assistant's prose never enters the decision. A limitation counts only
|
|
106
|
+
* as a `limitation` tool_call paired with a non-error tool_result inside the
|
|
107
|
+
* same window the mutation scan uses, so a run cannot satisfy the contract by
|
|
108
|
+
* wording alone and a real limitation is never missed for its phrasing.
|
|
91
109
|
*/
|
|
92
110
|
export function assessFinishContract(input: FinishContractInput): FinishContractAssessment {
|
|
93
|
-
const assistantText = input.assistantText.trim();
|
|
94
111
|
const sessionEntries = input.sessionEntries ?? [];
|
|
95
112
|
const assistantTurnId = input.assistantTurnId ?? null;
|
|
96
113
|
const window = recentEntries(sessionEntries, assistantTurnId, input.recentEntryLimit ?? DEFAULT_RECENT_ENTRY_LIMIT);
|
|
@@ -100,13 +117,39 @@ export function assessFinishContract(input: FinishContractInput): FinishContract
|
|
|
100
117
|
return { kind: "ok", reason: "no_mutation", evidence: [], mutatedPaths };
|
|
101
118
|
}
|
|
102
119
|
|
|
103
|
-
const
|
|
120
|
+
const acceptanceChecks = new Set(input.activeAcceptance?.verification.map((item) => item.check) ?? []);
|
|
121
|
+
const evidence = collectValidationEvidence(window, acceptanceChecks, input.workspaceRoot);
|
|
122
|
+
const limitations = collectLimitationEvidence(window);
|
|
123
|
+
const required = input.rigor === "high" ? (input.activeAcceptance?.verification ?? []) : [];
|
|
124
|
+
if (required.length > 0) {
|
|
125
|
+
const passes = new Set(
|
|
126
|
+
required.filter((check) => evidence.some((item) => acceptanceCheckPassed(item, check, input.workspaceRoot))),
|
|
127
|
+
);
|
|
128
|
+
const limited = new Set(limitations.flatMap((item) => item.paths ?? []));
|
|
129
|
+
const missing = [
|
|
130
|
+
...new Set(required.filter((check) => !passes.has(check) && !limited.has(check.check)).map((item) => item.check)),
|
|
131
|
+
];
|
|
132
|
+
if (missing.length > 0)
|
|
133
|
+
return {
|
|
134
|
+
kind: "engage",
|
|
135
|
+
reason: "unvalidated_mutation",
|
|
136
|
+
message: `[Clio Coder] high-rigor finish gate: operator acceptance still requires passing validation for: ${missing.join(", ")}. Run each named check or include its exact id in limitation.paths.`,
|
|
137
|
+
evidence: [...evidence, ...limitations],
|
|
138
|
+
mutatedPaths,
|
|
139
|
+
};
|
|
140
|
+
return {
|
|
141
|
+
kind: "ok",
|
|
142
|
+
reason: passes.size === required.length ? "validation_evidence" : "explicit_limitation",
|
|
143
|
+
evidence: [...evidence, ...limitations],
|
|
144
|
+
mutatedPaths,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
104
147
|
if (evidence.length > 0) {
|
|
105
148
|
return { kind: "ok", reason: "validation_evidence", evidence, mutatedPaths };
|
|
106
149
|
}
|
|
107
150
|
|
|
108
|
-
if (
|
|
109
|
-
return { kind: "ok", reason: "explicit_limitation", evidence:
|
|
151
|
+
if (limitations.length > 0) {
|
|
152
|
+
return { kind: "ok", reason: "explicit_limitation", evidence: limitations, mutatedPaths };
|
|
110
153
|
}
|
|
111
154
|
|
|
112
155
|
return {
|
|
@@ -118,16 +161,80 @@ export function assessFinishContract(input: FinishContractInput): FinishContract
|
|
|
118
161
|
};
|
|
119
162
|
}
|
|
120
163
|
|
|
164
|
+
function acceptanceCheckPassed(
|
|
165
|
+
evidence: FinishContractEvidence,
|
|
166
|
+
required: UserTaskAcceptance["verification"][number],
|
|
167
|
+
workspaceRoot: string | undefined,
|
|
168
|
+
): boolean {
|
|
169
|
+
if (evidence.kind !== "validation_command" || evidence.check !== required.check || !workspaceRoot || !evidence.source)
|
|
170
|
+
return false;
|
|
171
|
+
if (evidence.durationMs !== undefined && evidence.durationMs > required.timeoutMs) return false;
|
|
172
|
+
const root = resolve(workspaceRoot);
|
|
173
|
+
if (evidence.source.kind === "project-catalog")
|
|
174
|
+
return evidence.source.path === resolve(root, PROJECT_VERIFIER_CATALOG_RELATIVE_PATH);
|
|
175
|
+
return (
|
|
176
|
+
evidence.source.path === resolve(root, "package.json") &&
|
|
177
|
+
evidence.cwd === root &&
|
|
178
|
+
validationCheckId(evidence.argv?.join(" ") ?? "") === required.check
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
|
|
121
182
|
/**
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
183
|
+
* Successful `limitation` receipts over the recent window. A receipt is a
|
|
184
|
+
* `limitation` tool_call whose tool_result in the same window is not an
|
|
185
|
+
* error, judged by the same `successfulToolResultId` rule the mutation and
|
|
186
|
+
* validation scans use. A call the tool rejected (bad reason, empty scope)
|
|
187
|
+
* leaves no receipt, so it cannot settle the contract.
|
|
126
188
|
*/
|
|
127
|
-
function
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
189
|
+
function collectLimitationEvidence(recent: ReadonlyArray<unknown>): FinishContractEvidence[] {
|
|
190
|
+
const evidence: FinishContractEvidence[] = [];
|
|
191
|
+
const calls = new Map<string, ToolCallEvidenceCandidate>();
|
|
192
|
+
const seen = new Set<string>();
|
|
193
|
+
|
|
194
|
+
for (const entry of recent) {
|
|
195
|
+
const call = limitationToolCall(entry);
|
|
196
|
+
if (call !== null) {
|
|
197
|
+
calls.set(call.toolCallId, call);
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
const resultId = successfulToolResultId(entry);
|
|
201
|
+
if (resultId === null) continue;
|
|
202
|
+
const candidate = calls.get(resultId);
|
|
203
|
+
if (candidate === undefined) continue;
|
|
204
|
+
const item: FinishContractEvidence = {
|
|
205
|
+
kind: "limitation",
|
|
206
|
+
summary: candidate.command,
|
|
207
|
+
...(candidate.paths ? { paths: candidate.paths } : {}),
|
|
208
|
+
};
|
|
209
|
+
if (candidate.turnId !== undefined) item.turnId = candidate.turnId;
|
|
210
|
+
pushEvidence(evidence, seen, item);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return evidence;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
function limitationToolCall(entry: unknown): ToolCallEvidenceCandidate | null {
|
|
217
|
+
const record = asRecord(entry);
|
|
218
|
+
if (record?.kind !== "message" || record.role !== "tool_call") return null;
|
|
219
|
+
const payload = asRecord(record.payload);
|
|
220
|
+
if (payload === null) return null;
|
|
221
|
+
const toolName = stringFromFirst(payload, ["name", "toolName", "tool"]);
|
|
222
|
+
if (toolName !== ToolNames.Limitation) return null;
|
|
223
|
+
const toolCallId = stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]) ?? turnIdOf(entry);
|
|
224
|
+
if (toolCallId === null) return null;
|
|
225
|
+
const args = asRecord(payload.args ?? payload.arguments ?? payload.input);
|
|
226
|
+
const scope = typeof args?.scope === "string" ? args.scope.trim() : "";
|
|
227
|
+
const reason = typeof args?.reason === "string" ? args.reason.trim() : "";
|
|
228
|
+
const candidate: ToolCallEvidenceCandidate = {
|
|
229
|
+
toolCallId,
|
|
230
|
+
paths: Array.isArray(args?.paths)
|
|
231
|
+
? args.paths.filter((item): item is string => typeof item === "string").map((item) => item.trim())
|
|
232
|
+
: [],
|
|
233
|
+
command: `limitation recorded: ${scope.length > 0 ? scope : "unspecified"} (reason=${reason.length > 0 ? reason : "unspecified"})`,
|
|
234
|
+
};
|
|
235
|
+
const turnId = turnIdOf(entry);
|
|
236
|
+
if (turnId !== null) candidate.turnId = turnId;
|
|
237
|
+
return candidate;
|
|
131
238
|
}
|
|
132
239
|
|
|
133
240
|
/**
|
|
@@ -226,7 +333,11 @@ function pushPath(paths: string[], seen: Set<string>, path: string): void {
|
|
|
226
333
|
* Inspection was removed because inspecting the repo is never a mutation, so it
|
|
227
334
|
* can no longer be on the path to engaging the contract.
|
|
228
335
|
*/
|
|
229
|
-
function collectValidationEvidence(
|
|
336
|
+
function collectValidationEvidence(
|
|
337
|
+
recent: ReadonlyArray<unknown>,
|
|
338
|
+
acceptanceChecks: ReadonlySet<string>,
|
|
339
|
+
workspaceRoot: string | undefined,
|
|
340
|
+
): FinishContractEvidence[] {
|
|
230
341
|
const evidence: FinishContractEvidence[] = [];
|
|
231
342
|
const toolCalls = new Map<string, ToolCallEvidenceCandidate>();
|
|
232
343
|
const dispatchCalls = new Map<string, ToolCallEvidenceCandidate>();
|
|
@@ -239,7 +350,7 @@ function collectValidationEvidence(recent: ReadonlyArray<unknown>): FinishContra
|
|
|
239
350
|
continue;
|
|
240
351
|
}
|
|
241
352
|
|
|
242
|
-
const call = bashValidationCall(entry);
|
|
353
|
+
const call = bashValidationCall(entry, acceptanceChecks, workspaceRoot);
|
|
243
354
|
if (call !== null) {
|
|
244
355
|
toolCalls.set(call.toolCallId, call);
|
|
245
356
|
continue;
|
|
@@ -267,19 +378,19 @@ function collectValidationEvidence(recent: ReadonlyArray<unknown>): FinishContra
|
|
|
267
378
|
}
|
|
268
379
|
const candidate = toolCalls.get(resultId);
|
|
269
380
|
if (candidate !== undefined) {
|
|
270
|
-
pushEvidence(evidence, seen, validationEvidence(candidate));
|
|
381
|
+
pushEvidence(evidence, seen, validationEvidence(candidate, entry));
|
|
271
382
|
}
|
|
272
383
|
continue;
|
|
273
384
|
}
|
|
274
385
|
|
|
275
|
-
const bashExecution = bashExecutionEvidence(entry);
|
|
386
|
+
const bashExecution = bashExecutionEvidence(entry, acceptanceChecks, workspaceRoot);
|
|
276
387
|
if (bashExecution !== null) pushEvidence(evidence, seen, bashExecution);
|
|
277
388
|
}
|
|
278
389
|
|
|
279
390
|
return evidence;
|
|
280
391
|
}
|
|
281
392
|
|
|
282
|
-
function recentEntries(
|
|
393
|
+
export function recentEntries(
|
|
283
394
|
entries: ReadonlyArray<unknown>,
|
|
284
395
|
assistantTurnId: string | null,
|
|
285
396
|
recentEntryLimit: number,
|
|
@@ -299,7 +410,11 @@ function recentEntries(
|
|
|
299
410
|
return entries.slice(startInclusive, endExclusive);
|
|
300
411
|
}
|
|
301
412
|
|
|
302
|
-
function bashValidationCall(
|
|
413
|
+
function bashValidationCall(
|
|
414
|
+
entry: unknown,
|
|
415
|
+
acceptanceChecks: ReadonlySet<string>,
|
|
416
|
+
workspaceRoot: string | undefined,
|
|
417
|
+
): ToolCallEvidenceCandidate | null {
|
|
303
418
|
const record = asRecord(entry);
|
|
304
419
|
if (record?.kind !== "message" || record.role !== "tool_call") return null;
|
|
305
420
|
const payload = asRecord(record.payload);
|
|
@@ -309,13 +424,15 @@ function bashValidationCall(entry: unknown): ToolCallEvidenceCandidate | null {
|
|
|
309
424
|
const args = asRecord(payload.args ?? payload.arguments ?? payload.input);
|
|
310
425
|
const command = typeof args?.command === "string" ? args.command : null;
|
|
311
426
|
if (command === null) return null;
|
|
312
|
-
const detected =
|
|
427
|
+
const detected = acceptanceValidationCommand(command, acceptanceChecks);
|
|
313
428
|
if (detected.kind !== "validation") return null;
|
|
314
429
|
const toolCallId = stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]) ?? turnIdOf(entry);
|
|
315
430
|
if (toolCallId === null) return null;
|
|
316
431
|
const candidate: ToolCallEvidenceCandidate = {
|
|
317
432
|
toolCallId,
|
|
318
433
|
command: detected.matched,
|
|
434
|
+
...validationCheckFields(detected.matched),
|
|
435
|
+
execution: packageCommandExecution(command, args?.cwd, workspaceRoot),
|
|
319
436
|
};
|
|
320
437
|
const turnId = turnIdOf(entry);
|
|
321
438
|
if (turnId !== null) candidate.turnId = turnId;
|
|
@@ -380,6 +497,7 @@ function validationToolCall(entry: unknown): ToolCallEvidenceCandidate | null {
|
|
|
380
497
|
const candidate: ToolCallEvidenceCandidate = {
|
|
381
498
|
toolCallId,
|
|
382
499
|
command: summary,
|
|
500
|
+
...validationCheckFields(summary),
|
|
383
501
|
};
|
|
384
502
|
const turnId = turnIdOf(entry);
|
|
385
503
|
if (turnId !== null) candidate.turnId = turnId;
|
|
@@ -414,7 +532,8 @@ function successfulToolResultId(entry: unknown): string | null {
|
|
|
414
532
|
if (payload.isError === true || payload.error === true) return null;
|
|
415
533
|
const result = asRecord(payload.result);
|
|
416
534
|
const details = asRecord(result?.details);
|
|
417
|
-
if (details?.kind === "error") return null;
|
|
535
|
+
if (result?.kind === "error" || details?.kind === "error") return null;
|
|
536
|
+
if (typeof details?.exitCode === "number" && details.exitCode !== 0) return null;
|
|
418
537
|
return stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]);
|
|
419
538
|
}
|
|
420
539
|
|
|
@@ -482,18 +601,24 @@ function dispatchReceiptAgentId(
|
|
|
482
601
|
return candidate?.command.match(/^agent=([^\s]+)/)?.[1] ?? "unknown";
|
|
483
602
|
}
|
|
484
603
|
|
|
485
|
-
function bashExecutionEvidence(
|
|
604
|
+
function bashExecutionEvidence(
|
|
605
|
+
entry: unknown,
|
|
606
|
+
acceptanceChecks: ReadonlySet<string>,
|
|
607
|
+
workspaceRoot: string | undefined,
|
|
608
|
+
): FinishContractEvidence | null {
|
|
486
609
|
const record = asRecord(entry);
|
|
487
610
|
if (record?.kind !== "bashExecution") return null;
|
|
488
611
|
if (typeof record.command !== "string") return null;
|
|
489
612
|
if (record.cancelled === true) return null;
|
|
490
613
|
if (record.exitCode !== 0) return null;
|
|
491
|
-
const detected =
|
|
614
|
+
const detected = acceptanceValidationCommand(record.command, acceptanceChecks);
|
|
492
615
|
if (detected.kind !== "validation") return null;
|
|
493
616
|
const contextMarker = record.excludeFromContext === true ? " [not sent to model]" : "";
|
|
494
617
|
const evidence: FinishContractEvidence = {
|
|
495
618
|
kind: "validation_command",
|
|
496
619
|
summary: `validation command passed: ${detected.matched}${contextMarker}`,
|
|
620
|
+
...validationCheckFields(detected.matched),
|
|
621
|
+
...packageCommandExecution(record.command, record.cwd, workspaceRoot),
|
|
497
622
|
};
|
|
498
623
|
const turnId = turnIdOf(entry);
|
|
499
624
|
if (turnId !== null) evidence.turnId = turnId;
|
|
@@ -515,17 +640,80 @@ function protectedArtifactEvidence(entry: unknown): FinishContractEvidence | nul
|
|
|
515
640
|
return evidence;
|
|
516
641
|
}
|
|
517
642
|
|
|
518
|
-
function validationEvidence(candidate: ToolCallEvidenceCandidate): FinishContractEvidence {
|
|
643
|
+
function validationEvidence(candidate: ToolCallEvidenceCandidate, entry: unknown): FinishContractEvidence {
|
|
519
644
|
const evidence: FinishContractEvidence = {
|
|
520
645
|
kind: "validation_command",
|
|
521
646
|
summary: `validation command passed: ${candidate.command}`,
|
|
647
|
+
...(candidate.check ? { check: candidate.check } : {}),
|
|
648
|
+
...(candidate.execution ?? declaredCheckExecution(entry, candidate.check)),
|
|
522
649
|
};
|
|
523
650
|
if (candidate.turnId !== undefined) evidence.turnId = candidate.turnId;
|
|
524
651
|
return evidence;
|
|
525
652
|
}
|
|
526
653
|
|
|
654
|
+
/** Preserve the verifier's execution facts only when they identify the declared check. */
|
|
655
|
+
function declaredCheckExecution(entry: unknown, check: string | undefined): ValidationExecutionEvidence {
|
|
656
|
+
const payload = asRecord(asRecord(entry)?.payload);
|
|
657
|
+
const details = asRecord(asRecord(payload?.result)?.details);
|
|
658
|
+
const source = asRecord(details?.source);
|
|
659
|
+
if (
|
|
660
|
+
!details ||
|
|
661
|
+
details.check !== check ||
|
|
662
|
+
details.exitCode !== 0 ||
|
|
663
|
+
details.aborted === true ||
|
|
664
|
+
details.timedOut === true ||
|
|
665
|
+
details.outputCapped === true ||
|
|
666
|
+
(source?.kind !== "package.json" && source?.kind !== "project-catalog") ||
|
|
667
|
+
typeof source.path !== "string" ||
|
|
668
|
+
typeof details.cwd !== "string" ||
|
|
669
|
+
!Array.isArray(details.argv) ||
|
|
670
|
+
!details.argv.every((arg): arg is string => typeof arg === "string")
|
|
671
|
+
)
|
|
672
|
+
return {};
|
|
673
|
+
if (source.kind === "project-catalog") {
|
|
674
|
+
const argv = details.argv;
|
|
675
|
+
if (
|
|
676
|
+
!Array.isArray(details.declaredCommand) ||
|
|
677
|
+
details.declaredCommand.length !== details.argv.length ||
|
|
678
|
+
!details.declaredCommand.every((arg, index) => arg === argv[index]) ||
|
|
679
|
+
typeof details.declaredCwd !== "string" ||
|
|
680
|
+
typeof details.declaredTimeoutMs !== "number" ||
|
|
681
|
+
typeof details.durationMs !== "number" ||
|
|
682
|
+
details.durationMs > details.declaredTimeoutMs ||
|
|
683
|
+
resolve(source.path, "../..", details.declaredCwd) !== details.cwd
|
|
684
|
+
)
|
|
685
|
+
return {};
|
|
686
|
+
}
|
|
687
|
+
return {
|
|
688
|
+
source: { kind: source.kind, path: source.path },
|
|
689
|
+
cwd: details.cwd,
|
|
690
|
+
argv: details.argv,
|
|
691
|
+
...(typeof details.durationMs === "number" ? { durationMs: details.durationMs } : {}),
|
|
692
|
+
};
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
/** Exact package commands retain their execution cwd; a matched substring proves no project identity. */
|
|
696
|
+
function packageCommandExecution(
|
|
697
|
+
command: string,
|
|
698
|
+
cwd: unknown,
|
|
699
|
+
workspaceRoot: string | undefined,
|
|
700
|
+
): ValidationExecutionEvidence {
|
|
701
|
+
if (
|
|
702
|
+
!workspaceRoot ||
|
|
703
|
+
!/^(?:npm|pnpm|yarn|bun) /u.test(command.trim()) ||
|
|
704
|
+
validationCheckId(command.trim()) === undefined
|
|
705
|
+
)
|
|
706
|
+
return {};
|
|
707
|
+
const executionCwd = resolve(workspaceRoot, typeof cwd === "string" ? cwd : ".");
|
|
708
|
+
return {
|
|
709
|
+
source: { kind: "package.json", path: resolve(executionCwd, "package.json") },
|
|
710
|
+
cwd: executionCwd,
|
|
711
|
+
argv: command.trim().split(/\s+/u),
|
|
712
|
+
};
|
|
713
|
+
}
|
|
714
|
+
|
|
527
715
|
function pushEvidence(evidence: FinishContractEvidence[], seen: Set<string>, item: FinishContractEvidence): void {
|
|
528
|
-
const key =
|
|
716
|
+
const key = JSON.stringify(item);
|
|
529
717
|
if (seen.has(key)) return;
|
|
530
718
|
seen.add(key);
|
|
531
719
|
evidence.push(item);
|
|
@@ -554,3 +742,27 @@ function stringFromFirst(record: Record<string, unknown>, keys: ReadonlyArray<st
|
|
|
554
742
|
function asRecord(value: unknown): Record<string, unknown> | null {
|
|
555
743
|
return value !== null && typeof value === "object" ? (value as Record<string, unknown>) : null;
|
|
556
744
|
}
|
|
745
|
+
|
|
746
|
+
/** Exact check ids, never substring matches against rendered evidence summaries. */
|
|
747
|
+
function validationCheckId(command: string): string | undefined {
|
|
748
|
+
return (
|
|
749
|
+
/^(?:npm|pnpm|yarn|bun) (?:run )?([a-z0-9][a-z0-9._:-]*)$/.exec(command)?.[1] ??
|
|
750
|
+
/^verify ([a-z0-9][a-z0-9._:-]*)$/.exec(command)?.[1]
|
|
751
|
+
);
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
function validationCheckFields(command: string): { check?: string } {
|
|
755
|
+
const check = validationCheckId(command);
|
|
756
|
+
return check ? { check } : {};
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
/** Additional package scripts are admitted only by the operator's typed acceptance. */
|
|
760
|
+
function acceptanceValidationCommand(
|
|
761
|
+
command: string,
|
|
762
|
+
checks: ReadonlySet<string>,
|
|
763
|
+
): ReturnType<typeof detectValidationCommand> {
|
|
764
|
+
const exact = command.trim();
|
|
765
|
+
const check = /^npm run ([a-z0-9][a-z0-9._:-]*)$/.exec(exact)?.[1];
|
|
766
|
+
if (check && checks.has(check)) return { kind: "validation", matched: exact };
|
|
767
|
+
return detectValidationCommand(command);
|
|
768
|
+
}
|
|
@@ -42,4 +42,23 @@ export {
|
|
|
42
42
|
type PathPolicyKind,
|
|
43
43
|
type PathPolicyOperation,
|
|
44
44
|
} from "./path-policy.js";
|
|
45
|
-
export {
|
|
45
|
+
export {
|
|
46
|
+
parseRigorOverride,
|
|
47
|
+
type Rigor,
|
|
48
|
+
type RigorResolution,
|
|
49
|
+
type RigorSource,
|
|
50
|
+
resolveRigor,
|
|
51
|
+
rigorResolution,
|
|
52
|
+
} from "./rigor.js";
|
|
53
|
+
export {
|
|
54
|
+
describeValidationContract,
|
|
55
|
+
loadValidationContract,
|
|
56
|
+
parseValidationContractText,
|
|
57
|
+
VALIDATION_CONTRACT_CAPS,
|
|
58
|
+
VALIDATION_CONTRACT_MARKDOWN_PATH,
|
|
59
|
+
VALIDATION_CONTRACT_YAML_PATHS,
|
|
60
|
+
type ValidationContract,
|
|
61
|
+
type ValidationContractArtifact,
|
|
62
|
+
type ValidationContractLoadResult,
|
|
63
|
+
type ValidationContractRuntime,
|
|
64
|
+
} from "./validation-contract.js";
|