@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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
2
3
|
import path from "node:path";
|
|
3
4
|
import { artifactDefaultPath } from "../../core/artifact-paths.js";
|
|
4
5
|
import { pathBoundaryCovers, resolvePathBoundary } from "../../core/path-boundary.js";
|
|
@@ -8,7 +9,11 @@ import { clioConfigDir } from "../../core/xdg.js";
|
|
|
8
9
|
import { type DeclaredCheck, loadProjectVerifierCatalog } from "../../tools/verify/catalog.js";
|
|
9
10
|
import { type ActionClass, type Classification, type ClassifierCall, classify } from "./action-classifier.js";
|
|
10
11
|
import type { DamageControlMatch, DamageControlRule } from "./damage-control.js";
|
|
11
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
DEFAULT_DAMAGE_CONTROL_PATH_POLICY,
|
|
14
|
+
mergePathPolicyInputs,
|
|
15
|
+
OPERATOR_PATH_POLICY,
|
|
16
|
+
} from "./default-path-policy.js";
|
|
12
17
|
import {
|
|
13
18
|
type CompiledPathPolicy,
|
|
14
19
|
compilePathPolicy,
|
|
@@ -32,6 +37,8 @@ import { formatRejection, type RejectionMessage } from "./rejection-feedback.js"
|
|
|
32
37
|
import { getCachedDefaultRulePacks, type PackId, type RulePacks } from "./rule-pack-loader.js";
|
|
33
38
|
import { activeClioSkillRoots, skillMutationReason } from "./skill-authority.js";
|
|
34
39
|
|
|
40
|
+
import { gateProjectSafetyPolicy, workspaceTrustDirectory } from "./workspace-trust.js";
|
|
41
|
+
|
|
35
42
|
export type SafetyPolicySource =
|
|
36
43
|
| "damage-control:base"
|
|
37
44
|
| "project-policy"
|
|
@@ -79,6 +86,8 @@ export interface SafetyPolicyMetadata {
|
|
|
79
86
|
projectPolicyHash: string | null;
|
|
80
87
|
projectPolicyValid: boolean;
|
|
81
88
|
projectPolicyErrors: ReadonlyArray<string>;
|
|
89
|
+
disableDefaultPathPolicy?: boolean;
|
|
90
|
+
workspaceTrustVerdict?: "trusted" | "untrusted" | "changed";
|
|
82
91
|
cwd: string;
|
|
83
92
|
}
|
|
84
93
|
|
|
@@ -113,6 +122,9 @@ const BUILTIN_ALLOWLIST: ReadonlyArray<{ id: string; re: RegExp }> = [
|
|
|
113
122
|
{ id: "builtin:git-status", re: /^git\s+status(?:\s+--short|\s+--branch|\s+-sb)*$/ },
|
|
114
123
|
{ id: "builtin:git-diff", re: /^git\s+diff(?:\s+--cached|\s+--stat|\s+--name-only|\s+--\s+[\w./-]+)*$/ },
|
|
115
124
|
{ id: "builtin:git-log", re: /^git\s+log\s+--oneline(?:\s+-n\s+[1-9]\d{0,2})?(?:\s+--\s+[\w./-]+)?$/ },
|
|
125
|
+
];
|
|
126
|
+
|
|
127
|
+
const PROJECT_SCRIPT_COMMANDS: ReadonlyArray<{ id: string; re: RegExp }> = [
|
|
116
128
|
{ id: "builtin:npm-test", re: /^npm\s+(?:test|run\s+test)(?:\s+--\s+[\w=./:-]+(?:\s+[\w=./:-]+)*)?$/ },
|
|
117
129
|
{ id: "builtin:npm-lint", re: /^npm\s+run\s+lint(?:\s+--\s+[\w=./:-]+(?:\s+[\w=./:-]+)*)?$/ },
|
|
118
130
|
{ id: "builtin:npm-build", re: /^npm\s+run\s+build(?:\s+--\s+[\w=./:-]+(?:\s+[\w=./:-]+)*)?$/ },
|
|
@@ -198,18 +210,19 @@ export function createSafetyPolicyEngine(options: SafetyPolicyEngineOptions = {}
|
|
|
198
210
|
const writeRoots = (options.writeRoots ?? []).map((root) => resolvePathBoundary(writeRootCwd, root));
|
|
199
211
|
const skillRoots = activeClioSkillRoots(cwd);
|
|
200
212
|
const packs = options.rulePacks ?? getCachedDefaultRulePacks();
|
|
201
|
-
const projectPolicy = options.projectPolicy ?? loadProjectSafetyPolicy(cwd);
|
|
213
|
+
const projectPolicy = options.projectPolicy ?? gateProjectSafetyPolicy(cwd, loadProjectSafetyPolicy(cwd));
|
|
202
214
|
const projectPolicyRoot =
|
|
203
|
-
projectPolicy.path === null ? cwd : path.dirname(path.dirname(
|
|
215
|
+
projectPolicy.path === null ? cwd : path.dirname(path.dirname(path.resolve(projectPolicy.path)));
|
|
204
216
|
const pathPolicyInput = projectPolicy.disableDefaultPathPolicy
|
|
205
217
|
? projectPolicy.pathPolicy
|
|
206
218
|
: mergePathPolicyInputs(DEFAULT_DAMAGE_CONTROL_PATH_POLICY, projectPolicy.pathPolicy);
|
|
207
|
-
// Clio's own secret store, by absolute path.
|
|
208
|
-
//
|
|
219
|
+
// Clio's own secret store and user skills, by absolute path.
|
|
220
|
+
// Config directory expansion has to happen here because
|
|
209
221
|
// the list cannot call config helpers at module scope.
|
|
210
|
-
const expandedDefaults =
|
|
211
|
-
|
|
212
|
-
:
|
|
222
|
+
const expandedDefaults = mergePathPolicyInputs(mergePathPolicyInputs(pathPolicyInput, OPERATOR_PATH_POLICY), {
|
|
223
|
+
zeroAccessPaths: clioCredentialStorePaths(),
|
|
224
|
+
readOnlyPaths: [...clioSkillsRootPaths(), path.join(clioConfigDir(), "settings.yaml"), workspaceTrustDirectory()],
|
|
225
|
+
});
|
|
213
226
|
const pathPolicy = compilePathPolicy(expandedDefaults, projectPolicyRoot);
|
|
214
227
|
// Bash-read scanning tests argument tokens against zero-access entries only:
|
|
215
228
|
// read-only paths stay readable from bash by design, secrets do not.
|
|
@@ -314,6 +327,31 @@ export function createSafetyPolicyEngine(options: SafetyPolicyEngineOptions = {}
|
|
|
314
327
|
// Editing active instructions is an operator privilege at every autonomy
|
|
315
328
|
// level, in both the coordinator and the shared worker safety contract.
|
|
316
329
|
const mutationCommand = call.tool === ToolNames.Bash ? command : catalogCommand;
|
|
330
|
+
if (mutationCommand !== null && invokesTrustMutation(mutationCommand)) {
|
|
331
|
+
return blockDecision(base, {
|
|
332
|
+
reasonCode: "trust-authority",
|
|
333
|
+
ruleId: "trust-authority",
|
|
334
|
+
reasons: ["workspace trust grants require the operator CLI"],
|
|
335
|
+
policySource: "builtin-classifier",
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
// Reuse the canonical authority boundary scan for parent deletions,
|
|
339
|
+
// shell cwd changes and aliases that a literal path-policy lookup misses.
|
|
340
|
+
if (
|
|
341
|
+
skillMutationReason(
|
|
342
|
+
[path.join(clioConfigDir(), "settings.yaml"), workspaceTrustDirectory()],
|
|
343
|
+
pathPolicyTargets(catalogCommand === null ? call : { tool: ToolNames.Bash, args: { command: catalogCommand } }),
|
|
344
|
+
callCwd,
|
|
345
|
+
mutationCommand,
|
|
346
|
+
) !== null
|
|
347
|
+
) {
|
|
348
|
+
return blockDecision(base, {
|
|
349
|
+
reasonCode: "path-policy:readOnlyPaths",
|
|
350
|
+
ruleId: "path-policy:readOnlyPaths",
|
|
351
|
+
reasons: ["Clio settings and workspace trust records are operator-owned and cannot be mutated by tools"],
|
|
352
|
+
policySource: "builtin-classifier",
|
|
353
|
+
});
|
|
354
|
+
}
|
|
317
355
|
const skillReason =
|
|
318
356
|
mutationCommand !== null && invokesClioSkillMutation(mutationCommand)
|
|
319
357
|
? "skill installation and updates require the operator CLI or an explicit operator install choice; draft outside active skill roots"
|
|
@@ -418,8 +456,39 @@ export function createSafetyPolicyEngine(options: SafetyPolicyEngineOptions = {}
|
|
|
418
456
|
return posture === "confirmed" ? allowDecision(base, input) : askDecision(base, input);
|
|
419
457
|
}
|
|
420
458
|
|
|
421
|
-
|
|
422
|
-
|
|
459
|
+
const packageCommand =
|
|
460
|
+
call.tool === ToolNames.Verify &&
|
|
461
|
+
catalogCheck === null &&
|
|
462
|
+
typeof call.args?.check === "string" &&
|
|
463
|
+
call.args.check !== "frontend"
|
|
464
|
+
? `npm run ${call.args.check}`
|
|
465
|
+
: null;
|
|
466
|
+
if (
|
|
467
|
+
(call.tool === ToolNames.Bash || catalogCheck !== null || packageCommand !== null) &&
|
|
468
|
+
classification.actionClass === "execute"
|
|
469
|
+
) {
|
|
470
|
+
const bash = evaluateBashPolicy(
|
|
471
|
+
catalogCheck?.command ?? packageCommand ?? command ?? "",
|
|
472
|
+
catalogCheck === null ? callCwd : path.resolve(cwd, catalogCheck.cwd),
|
|
473
|
+
cwd,
|
|
474
|
+
posture,
|
|
475
|
+
projectPolicy,
|
|
476
|
+
);
|
|
477
|
+
if (
|
|
478
|
+
(catalogCheck !== null || packageCommand !== null) &&
|
|
479
|
+
bash.kind === "allow" &&
|
|
480
|
+
bash.execRecognition !== "recognized" &&
|
|
481
|
+
posture !== "confirmed"
|
|
482
|
+
) {
|
|
483
|
+
return askDecision(base, {
|
|
484
|
+
...bash,
|
|
485
|
+
reasonCode: "project-verifier-confirm",
|
|
486
|
+
reasons: [
|
|
487
|
+
...bash.reasons,
|
|
488
|
+
`Repository verifier requires confirmation or an approved safety declaration: ${catalogCommand ?? packageCommand}`,
|
|
489
|
+
],
|
|
490
|
+
});
|
|
491
|
+
}
|
|
423
492
|
if (bash.kind === "block") return blockDecision(base, bash);
|
|
424
493
|
if (bash.kind === "ask") return askDecision(base, bash);
|
|
425
494
|
return allowDecision(base, bash);
|
|
@@ -435,22 +504,9 @@ export function createSafetyPolicyEngine(options: SafetyPolicyEngineOptions = {}
|
|
|
435
504
|
};
|
|
436
505
|
if (hit?.match.ruleId !== undefined) allowInput.ruleId = hit.match.ruleId;
|
|
437
506
|
if (hit?.match !== undefined) allowInput.match = hit.match;
|
|
438
|
-
//
|
|
439
|
-
//
|
|
440
|
-
|
|
441
|
-
// project-catalog check runs whatever argv the workspace file declares,
|
|
442
|
-
// so it is unrecognized: auto-edit parks it for one confirmation that
|
|
443
|
-
// shows the argv, full-auto runs it, and the damage-control match and
|
|
444
|
-
// zero-access scan above have already seen the declared vector.
|
|
445
|
-
if (classification.actionClass === "execute") {
|
|
446
|
-
allowInput.execRecognition = catalogCheck === null ? "recognized" : "unrecognized";
|
|
447
|
-
if (catalogCheck !== null) {
|
|
448
|
-
allowInput.reasons = [
|
|
449
|
-
...allowInput.reasons,
|
|
450
|
-
`project verifier '${catalogCheck.id}' runs declared argv: ${catalogCommand ?? ""}`,
|
|
451
|
-
];
|
|
452
|
-
}
|
|
453
|
-
}
|
|
507
|
+
// Catalog argv already went through canonical command recognition above.
|
|
508
|
+
// Package scripts and the frontend validator retain their fixed typed surface.
|
|
509
|
+
if (classification.actionClass === "execute") allowInput.execRecognition = "recognized";
|
|
454
510
|
return allowDecision(base, allowInput);
|
|
455
511
|
},
|
|
456
512
|
metadata() {
|
|
@@ -463,6 +519,8 @@ export function createSafetyPolicyEngine(options: SafetyPolicyEngineOptions = {}
|
|
|
463
519
|
projectPolicyHash: projectPolicy.hash,
|
|
464
520
|
projectPolicyValid: projectPolicy.valid,
|
|
465
521
|
projectPolicyErrors: [...projectPolicy.errors, ...pathPolicy.diagnostics],
|
|
522
|
+
disableDefaultPathPolicy: projectPolicy.disableDefaultPathPolicy,
|
|
523
|
+
workspaceTrustVerdict: projectPolicy.trustVerdict ?? "trusted",
|
|
466
524
|
cwd,
|
|
467
525
|
};
|
|
468
526
|
},
|
|
@@ -478,6 +536,15 @@ function clioCredentialStorePaths(): string[] {
|
|
|
478
536
|
}
|
|
479
537
|
}
|
|
480
538
|
|
|
539
|
+
/** Absolute path of Clio's user skills, when resolvable. */
|
|
540
|
+
function clioSkillsRootPaths(): string[] {
|
|
541
|
+
try {
|
|
542
|
+
return [path.join(clioConfigDir(), "skills")];
|
|
543
|
+
} catch {
|
|
544
|
+
return [];
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
|
|
481
548
|
/**
|
|
482
549
|
* The exact safe presence form: `grep -q` or `grep -sq` (either flag order)
|
|
483
550
|
* with a `^NAME=`-shaped pattern and a single file argument. Exit code only;
|
|
@@ -601,12 +668,27 @@ function pathPolicyTargets(call: ClassifierCall): Array<{ operation: PathPolicyO
|
|
|
601
668
|
* admission seam decides whether it runs, asks, or is denied.
|
|
602
669
|
*/
|
|
603
670
|
function evaluateBashPolicy(
|
|
604
|
-
|
|
671
|
+
input: string | ReadonlyArray<string>,
|
|
605
672
|
callCwd: string,
|
|
606
673
|
workspaceRoot: string,
|
|
607
674
|
posture: string | undefined,
|
|
608
675
|
policy: LoadedProjectSafetyPolicy,
|
|
609
676
|
): Omit<SafetyPolicyDecision, "classification" | "tool" | "actionClass" | "cwd" | "posture" | "command"> {
|
|
677
|
+
// Catalog commands execute as argv, never as shell source. Only bare words
|
|
678
|
+
// have an unambiguous representation in the canonical command matcher.
|
|
679
|
+
// Keep whitespace, empty arguments, and shell syntax out of recognition;
|
|
680
|
+
// joining them would erase argument boundaries or invent a shell chain.
|
|
681
|
+
if (typeof input !== "string" && !input.every((arg) => /^[\w=./:-]+$/u.test(arg))) {
|
|
682
|
+
return {
|
|
683
|
+
kind: posture === "confirmed" ? "allow" : "ask",
|
|
684
|
+
ruleId: "verify-unrecognized-argv",
|
|
685
|
+
reasonCode: "verify-unrecognized-argv",
|
|
686
|
+
reasons: ["project verifier argv is outside the bare-word no-prompt command set"],
|
|
687
|
+
policySource: "builtin-command-allowlist",
|
|
688
|
+
execRecognition: "unrecognized",
|
|
689
|
+
};
|
|
690
|
+
}
|
|
691
|
+
const command = typeof input === "string" ? input : input.join(" ");
|
|
610
692
|
if (command.trim().length === 0) {
|
|
611
693
|
return {
|
|
612
694
|
kind: "block",
|
|
@@ -616,6 +698,21 @@ function evaluateBashPolicy(
|
|
|
616
698
|
policySource: "builtin-command-allowlist",
|
|
617
699
|
};
|
|
618
700
|
}
|
|
701
|
+
if (
|
|
702
|
+
typeof input === "string" &&
|
|
703
|
+
(/\$(?:[A-Za-z_{0-9@*#?!-])/.test(command) ||
|
|
704
|
+
/(?:^|[\s;&|])(?:python[\d.]*|node|ruby|perl|php|lua)\s+(?:[^\n]*?\s)?-[ce]\b/.test(command)) &&
|
|
705
|
+
posture !== "confirmed"
|
|
706
|
+
) {
|
|
707
|
+
return {
|
|
708
|
+
kind: "ask",
|
|
709
|
+
reasonCode: "bash-hidden-content",
|
|
710
|
+
ruleId: "bash-hidden-content",
|
|
711
|
+
reasons: ["shell variables or interpreter source hide paths from the safety scan and require one-shot confirmation"],
|
|
712
|
+
policySource: "builtin-command-allowlist",
|
|
713
|
+
execRecognition: "unrecognized",
|
|
714
|
+
};
|
|
715
|
+
}
|
|
619
716
|
const projectMatch = matchingProjectCommand(policy, command, callCwd);
|
|
620
717
|
if (projectMatch) {
|
|
621
718
|
const base: Omit<
|
|
@@ -668,15 +765,34 @@ function evaluateBashPolicy(
|
|
|
668
765
|
execRecognition: "unrecognized",
|
|
669
766
|
};
|
|
670
767
|
}
|
|
768
|
+
if (PROJECT_SCRIPT_COMMANDS.some((entry) => entry.re.test(recognitionCommand))) {
|
|
769
|
+
return {
|
|
770
|
+
kind: posture === "confirmed" ? "allow" : "ask",
|
|
771
|
+
reasonCode: "project-script-confirm",
|
|
772
|
+
ruleId: "project-script-confirm",
|
|
773
|
+
reasons: [
|
|
774
|
+
"Repository-authored code requires one-shot confirmation or an operator-approved safety command declaration.",
|
|
775
|
+
projectScriptPreview(recognitionCommand, callCwd),
|
|
776
|
+
],
|
|
777
|
+
policySource: "builtin-command-allowlist",
|
|
778
|
+
execRecognition: "unrecognized",
|
|
779
|
+
};
|
|
780
|
+
}
|
|
671
781
|
const chain = recognizeCommandChain(recognitionCommand, callCwd, workspaceRoot, policy);
|
|
672
782
|
if (chain !== null) {
|
|
673
783
|
const chainReasons = [`every step of the && chain is recognized: ${chain.ruleIds.join(", ")}`];
|
|
784
|
+
if (chain.requiresConfirmation) {
|
|
785
|
+
for (const segment of recognitionCommand.split("&&").map((part) => part.trim())) {
|
|
786
|
+
if (PROJECT_SCRIPT_COMMANDS.some((entry) => entry.re.test(segment)))
|
|
787
|
+
chainReasons.push(projectScriptPreview(segment, callCwd));
|
|
788
|
+
}
|
|
789
|
+
}
|
|
674
790
|
if (chain.requiresConfirmation && posture !== "confirmed") {
|
|
675
791
|
return {
|
|
676
792
|
kind: "ask",
|
|
677
793
|
ruleId: "bash-recognized-chain",
|
|
678
794
|
reasonCode: "bash-recognized-chain",
|
|
679
|
-
reasons: [...chainReasons, "project policy requires confirmation for one step"],
|
|
795
|
+
reasons: [...chainReasons, "repository code or project policy requires confirmation for one step"],
|
|
680
796
|
policySource: "builtin-command-allowlist",
|
|
681
797
|
execRecognition: "recognized",
|
|
682
798
|
};
|
|
@@ -697,6 +813,23 @@ function evaluateBashPolicy(
|
|
|
697
813
|
// the full string, so a destructive verb behind an operator was caught before
|
|
698
814
|
// this point.
|
|
699
815
|
if (hasSequencingOperators(command)) {
|
|
816
|
+
const scriptSegments = recognitionCommand
|
|
817
|
+
.split(/&&|\|\||[;|\n]/)
|
|
818
|
+
.map((part) => part.trim())
|
|
819
|
+
.filter((part) => PROJECT_SCRIPT_COMMANDS.some((entry) => entry.re.test(part)));
|
|
820
|
+
if (scriptSegments.length > 0 && posture !== "confirmed") {
|
|
821
|
+
return {
|
|
822
|
+
kind: "ask",
|
|
823
|
+
ruleId: "project-script-confirm",
|
|
824
|
+
reasonCode: "project-script-confirm",
|
|
825
|
+
reasons: [
|
|
826
|
+
"Repository scripts in compound commands require one-shot confirmation",
|
|
827
|
+
...scriptSegments.map((part) => projectScriptPreview(part, callCwd)),
|
|
828
|
+
],
|
|
829
|
+
policySource: "builtin-command-allowlist",
|
|
830
|
+
execRecognition: "unrecognized",
|
|
831
|
+
};
|
|
832
|
+
}
|
|
700
833
|
return {
|
|
701
834
|
kind: "allow",
|
|
702
835
|
ruleId: "bash-shell-operators",
|
|
@@ -913,6 +1046,11 @@ function recognizeCommandChain(
|
|
|
913
1046
|
if (projectMatch.requireConfirmation) requiresConfirmation = true;
|
|
914
1047
|
continue;
|
|
915
1048
|
}
|
|
1049
|
+
if (PROJECT_SCRIPT_COMMANDS.some((entry) => entry.re.test(rendered))) {
|
|
1050
|
+
ruleIds.push("project-script-confirm");
|
|
1051
|
+
requiresConfirmation = true;
|
|
1052
|
+
continue;
|
|
1053
|
+
}
|
|
916
1054
|
const builtin = BUILTIN_ALLOWLIST.find((entry) => entry.re.test(rendered));
|
|
917
1055
|
if (builtin === undefined) return null;
|
|
918
1056
|
ruleIds.push(builtin.id);
|
|
@@ -966,10 +1104,16 @@ function cwdArg(args: Record<string, unknown> | undefined, fallback: string): st
|
|
|
966
1104
|
}
|
|
967
1105
|
|
|
968
1106
|
/**
|
|
969
|
-
* Tools whose arguments
|
|
970
|
-
* Their damage-control scan is the destination path alone.
|
|
1107
|
+
* Tools whose arguments carry file contents or task prose, not command lines.
|
|
1108
|
+
* Their damage-control scan is the destination path alone, when present.
|
|
971
1109
|
*/
|
|
972
|
-
const CONTENT_BEARING_TOOLS: ReadonlySet<string> = new Set([
|
|
1110
|
+
const CONTENT_BEARING_TOOLS: ReadonlySet<string> = new Set([
|
|
1111
|
+
ToolNames.Write,
|
|
1112
|
+
ToolNames.Edit,
|
|
1113
|
+
ToolNames.Artifact,
|
|
1114
|
+
ToolNames.Dispatch,
|
|
1115
|
+
ToolNames.Tasks,
|
|
1116
|
+
]);
|
|
973
1117
|
|
|
974
1118
|
/**
|
|
975
1119
|
* The text damage-control rules are matched against.
|
|
@@ -991,6 +1135,8 @@ const CONTENT_BEARING_TOOLS: ReadonlySet<string> = new Set([ToolNames.Write, Too
|
|
|
991
1135
|
* full. Only the destination path is scanned for a mutation tool, which keeps
|
|
992
1136
|
* any path-shaped rule working; where the file may land is the write tool's own
|
|
993
1137
|
* gate in `writePathClass`.
|
|
1138
|
+
* Dispatch and task-board prose likewise does not execute; worker commands
|
|
1139
|
+
* are scanned when the worker calls an execute-class tool.
|
|
994
1140
|
*/
|
|
995
1141
|
function damageControlScan(call: ClassifierCall): string {
|
|
996
1142
|
if (!CONTENT_BEARING_TOOLS.has(call.tool)) return serializeArgs(call.args);
|
|
@@ -1004,9 +1150,9 @@ function damageControlScan(call: ClassifierCall): string {
|
|
|
1004
1150
|
* declare. The catalog is an argv vector the operator authored, but the file
|
|
1005
1151
|
* sits in the workspace, so the engine reads it fresh on every verify call and
|
|
1006
1152
|
* treats the declared argv exactly like a bash command string: it is what the
|
|
1007
|
-
* damage-control rules and the zero-access read guard scan
|
|
1008
|
-
*
|
|
1009
|
-
* fails closed in the tool itself.
|
|
1153
|
+
* damage-control rules and the zero-access read guard scan. Recognition uses
|
|
1154
|
+
* canonical command policy with argv boundaries preserved. An unreadable or
|
|
1155
|
+
* invalid catalog resolves to null here and fails closed in the tool itself.
|
|
1010
1156
|
*/
|
|
1011
1157
|
function resolveVerifyCatalogCheck(call: ClassifierCall, workspaceRoot: string): DeclaredCheck | null {
|
|
1012
1158
|
if (call.tool !== ToolNames.Verify) return null;
|
|
@@ -1057,3 +1203,34 @@ function packPayload(rules: ReadonlyArray<DamageControlRule>): Array<Record<stri
|
|
|
1057
1203
|
...(rule.ask !== undefined ? { ask: rule.ask } : {}),
|
|
1058
1204
|
}));
|
|
1059
1205
|
}
|
|
1206
|
+
|
|
1207
|
+
function invokesTrustMutation(command: string): boolean {
|
|
1208
|
+
// Wrappers, package launchers, quoted argv and source-tree CLI invocations
|
|
1209
|
+
// must not turn an operator-only grant into model authority.
|
|
1210
|
+
const words = scanShellLike(command)
|
|
1211
|
+
.filter((token) => !token.operator)
|
|
1212
|
+
.map((token) => token.value);
|
|
1213
|
+
return (
|
|
1214
|
+
words.some((word, index) => word === "config" && words[index + 1] === "trust") ||
|
|
1215
|
+
/\bconfig\s+trust\b/.test(inlineShellScript(command) ?? "")
|
|
1216
|
+
);
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
function projectScriptPreview(command: string, cwd: string): string {
|
|
1220
|
+
const match = /^npm\s+(?:run\s+)?([\w:-]+)/.exec(command);
|
|
1221
|
+
if (match) {
|
|
1222
|
+
try {
|
|
1223
|
+
const manifest = JSON.parse(readFileSync(path.join(cwd, "package.json"), "utf8")) as {
|
|
1224
|
+
scripts?: Record<string, unknown>;
|
|
1225
|
+
};
|
|
1226
|
+
const name = match[1] ?? "test";
|
|
1227
|
+
const scripts = [`pre${name}`, name, `post${name}`].flatMap((key) =>
|
|
1228
|
+
typeof manifest.scripts?.[key] === "string" ? [`${key}: ${manifest.scripts[key]}`] : [],
|
|
1229
|
+
);
|
|
1230
|
+
return `package.json scripts (repository data): ${scripts.join("; ") || "no script resolved"}`;
|
|
1231
|
+
} catch {
|
|
1232
|
+
return "package.json script body could not be resolved; repository code will execute.";
|
|
1233
|
+
}
|
|
1234
|
+
}
|
|
1235
|
+
return `Repository command: ${command}. Its test/build files and dependencies execute with the child process permissions.`;
|
|
1236
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { existsSync, readFileSync, realpathSync } from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { parse as parseYaml } from "yaml";
|
|
5
5
|
import type { ActionClass } from "./action-classifier.js";
|
|
@@ -29,6 +29,7 @@ export interface ProjectCommandPolicy {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
export interface LoadedProjectSafetyPolicy {
|
|
32
|
+
trustVerdict?: "trusted" | "untrusted" | "changed";
|
|
32
33
|
path: string | null;
|
|
33
34
|
hash: string | null;
|
|
34
35
|
valid: boolean;
|
|
@@ -80,7 +81,7 @@ function projectSafetyPolicyPath(cwd: string = process.cwd()): string | null {
|
|
|
80
81
|
}
|
|
81
82
|
|
|
82
83
|
export function loadProjectSafetyPolicy(cwd: string = process.cwd()): LoadedProjectSafetyPolicy {
|
|
83
|
-
|
|
84
|
+
let policyPath = projectSafetyPolicyPath(cwd);
|
|
84
85
|
if (policyPath === null) {
|
|
85
86
|
return {
|
|
86
87
|
path: null,
|
|
@@ -94,6 +95,10 @@ export function loadProjectSafetyPolicy(cwd: string = process.cwd()): LoadedProj
|
|
|
94
95
|
}
|
|
95
96
|
let raw: string;
|
|
96
97
|
try {
|
|
98
|
+
// Relative entries are interpreted against this source directory. Pin its
|
|
99
|
+
// canonical identity before reading; downstream trust and compilation use
|
|
100
|
+
// the captured path, not a symlink that may move after admission.
|
|
101
|
+
policyPath = realpathSync(policyPath);
|
|
97
102
|
raw = readFileSync(policyPath, "utf8");
|
|
98
103
|
} catch (err) {
|
|
99
104
|
return {
|
|
@@ -5,44 +5,71 @@
|
|
|
5
5
|
*
|
|
6
6
|
* - `normal`: the finish-contract advisory stays a soft `warn` reminder.
|
|
7
7
|
* - `high`: an unvalidated completion claim re-prompts the model to run
|
|
8
|
-
* validation or
|
|
8
|
+
* validation or record a limitation before the turn settles.
|
|
9
9
|
*
|
|
10
10
|
* Rigor resolves from a per-session / per-dispatch override (the `CLIO_CODER_RIGOR`
|
|
11
11
|
* env var today) layered over a repo-derived default. The repo-derived default
|
|
12
|
-
* is `high` when the workspace
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
12
|
+
* is `high` only when the workspace's scientific-validation contract parses
|
|
13
|
+
* under the version-1 schema in `validation-contract.ts`. A contract that
|
|
14
|
+
* fails to parse is diagnosed and leaves rigor at `normal`, and a Markdown
|
|
15
|
+
* `VALIDATION.md` is advisory prose that never raises rigor on its own. This
|
|
16
|
+
* keeps the evidence bar derived from what the repo actually declares rather
|
|
17
|
+
* than from a filename or a global toggle.
|
|
16
18
|
*/
|
|
17
19
|
|
|
18
|
-
import {
|
|
19
|
-
import path from "node:path";
|
|
20
|
+
import { describeValidationContract, loadValidationContract } from "./validation-contract.js";
|
|
20
21
|
|
|
21
22
|
export type Rigor = "normal" | "high";
|
|
22
23
|
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
path
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
/** Why rigor settled where it did, so a caller can print the reason. */
|
|
25
|
+
export type RigorSource = "override" | "validation-contract" | "invalid-contract" | "markdown-advisory" | "none";
|
|
26
|
+
|
|
27
|
+
export interface RigorResolution {
|
|
28
|
+
rigor: Rigor;
|
|
29
|
+
source: RigorSource;
|
|
30
|
+
/** Present when a contract was found but could not raise rigor: the parse fault or the Markdown advisory note. */
|
|
31
|
+
diagnostic?: string;
|
|
32
|
+
/** The repository-relative contract path, when one was found. */
|
|
33
|
+
contractPath?: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface RigorOptions {
|
|
37
|
+
cwd?: string;
|
|
38
|
+
override?: Rigor | null;
|
|
39
|
+
}
|
|
36
40
|
|
|
37
41
|
/**
|
|
38
|
-
* Resolve the effective rigor. An explicit override
|
|
39
|
-
* always wins; otherwise the repo-derived default keys
|
|
40
|
-
* validation contract at the workspace root.
|
|
42
|
+
* Resolve the effective rigor and the reason for it. An explicit override
|
|
43
|
+
* (`"high"` | `"normal"`) always wins; otherwise the repo-derived default keys
|
|
44
|
+
* off the parsed validation contract at the workspace root.
|
|
41
45
|
*/
|
|
42
|
-
export function
|
|
43
|
-
if (options.override === "high" || options.override === "normal")
|
|
46
|
+
export function rigorResolution(options: RigorOptions): RigorResolution {
|
|
47
|
+
if (options.override === "high" || options.override === "normal") {
|
|
48
|
+
return { rigor: options.override, source: "override" };
|
|
49
|
+
}
|
|
44
50
|
const cwd = options.cwd ?? process.cwd();
|
|
45
|
-
|
|
51
|
+
const loaded = loadValidationContract(cwd);
|
|
52
|
+
if (!loaded.ok) {
|
|
53
|
+
const resolution: RigorResolution = { rigor: "normal", source: "invalid-contract", contractPath: loaded.path };
|
|
54
|
+
const diagnostic = describeValidationContract(loaded);
|
|
55
|
+
if (diagnostic !== null) resolution.diagnostic = diagnostic;
|
|
56
|
+
return resolution;
|
|
57
|
+
}
|
|
58
|
+
if (loaded.contract !== null) {
|
|
59
|
+
return { rigor: "high", source: "validation-contract", contractPath: loaded.path };
|
|
60
|
+
}
|
|
61
|
+
if ("advisory" in loaded) {
|
|
62
|
+
const resolution: RigorResolution = { rigor: "normal", source: "markdown-advisory", contractPath: loaded.path };
|
|
63
|
+
const diagnostic = describeValidationContract(loaded);
|
|
64
|
+
if (diagnostic !== null) resolution.diagnostic = diagnostic;
|
|
65
|
+
return resolution;
|
|
66
|
+
}
|
|
67
|
+
return { rigor: "normal", source: "none" };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** The effective rigor alone; see {@link rigorResolution} for the reason. */
|
|
71
|
+
export function resolveRigor(options: RigorOptions): Rigor {
|
|
72
|
+
return rigorResolution(options).rigor;
|
|
46
73
|
}
|
|
47
74
|
|
|
48
75
|
/**
|
|
@@ -57,16 +84,3 @@ export function parseRigorOverride(value: string | null | undefined): Rigor | nu
|
|
|
57
84
|
if (normalized === "normal") return "normal";
|
|
58
85
|
return null;
|
|
59
86
|
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* True when the workspace declares a scientific-validation contract by the
|
|
63
|
-
* documented path convention. Pure and resilient: any filesystem error is
|
|
64
|
-
* swallowed and treated as "no contract".
|
|
65
|
-
*/
|
|
66
|
-
function hasValidationContract(cwd: string): boolean {
|
|
67
|
-
try {
|
|
68
|
-
return VALIDATION_CONTRACT_FILES.some((relative) => existsSync(path.join(cwd, relative)));
|
|
69
|
-
} catch {
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
}
|