@iowarp/clio-coder 0.4.4 → 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 +92 -2
- package/CONTRIBUTING.md +25 -15
- package/README.md +340 -27
- package/dist/{acp-WNAYYF4F.js → acp-H3CU2HBQ.js} +25 -24
- package/dist/{agents-3OKXHLOI.js → agents-IXQQZ7BD.js} +77 -77
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-VKNNMGPU.js → auth-R7KYF7N3.js} +38 -38
- package/dist/builtins-CRFDQUVP.js +22 -0
- package/dist/{chunk-TQAHXW6Y.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-JCI2ROMZ.js → chunk-3T4DXWP6.js} +7 -7
- package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
- package/dist/{chunk-6Q3CYFD3.js → chunk-4SVIVOMC.js} +184 -33
- package/dist/{chunk-W54I7H25.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-I2DWJ4GM.js → chunk-5DDOTTG4.js} +54 -42
- package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
- package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
- package/dist/{chunk-3ODX73FK.js → chunk-5VTJP36Q.js} +4 -4
- package/dist/{chunk-54X7T7DK.js → chunk-5ZMXGW7P.js} +79 -7
- package/dist/chunk-5ZSZEYJK.js +119 -0
- package/dist/{chunk-IXIY2H4R.js → chunk-633EXGZA.js} +5 -5
- package/dist/{chunk-CUSRQKPU.js → chunk-6CDNRHWH.js} +299 -89
- package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
- package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
- package/dist/{chunk-JEIYHLOR.js → chunk-6SYEGZI3.js} +12 -12
- package/dist/{chunk-DQOVN6KV.js → chunk-6YA46L5A.js} +4 -4
- package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
- package/dist/{chunk-6PAZTBPA.js → chunk-7HBHHVCK.js} +15 -6
- package/dist/{chunk-25QBEXRS.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-3UUXNFEX.js → chunk-7YJWEF2L.js} +61 -34
- 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-I5FWO7L5.js → chunk-B6UM3OZC.js} +2 -2
- package/dist/{chunk-2CU2H6KE.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-QZWQA4DE.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-YNFKXPEC.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-XULDXHTN.js → chunk-DRD2A54W.js} +102 -50
- 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-FEAXX7B6.js → chunk-EHCPSZJF.js} +4 -4
- package/dist/{chunk-4NSRCOYP.js → chunk-EHOSNVVM.js} +3 -2
- package/dist/{chunk-7UGL4MB5.js → chunk-EQEJJ53P.js} +10 -10
- package/dist/{chunk-GWZNEVM2.js → chunk-EWD5P3GK.js} +9 -9
- package/dist/{chunk-6UINWWS6.js → chunk-F34AR6O3.js} +14 -14
- package/dist/{chunk-GHS5EBTQ.js → chunk-FKIOX6DS.js} +29 -20
- package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
- package/dist/{chunk-Y55JBDO5.js → chunk-FSTIBAGM.js} +38 -23
- 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-TOIVGRUX.js → chunk-GJ24ODAX.js} +5 -5
- package/dist/{chunk-QUFRYSWI.js → chunk-GNQRWTMY.js} +129 -48
- package/dist/{chunk-5ICU3EUH.js → chunk-GVYWZNRK.js} +5 -5
- package/dist/{chunk-GX5WYQO4.js → chunk-GXCCHKN6.js} +6 -6
- package/dist/{chunk-K6T2ZAMZ.js → chunk-HGSLRG33.js} +6 -6
- package/dist/{chunk-26QSH3EJ.js → chunk-HHVJNVUJ.js} +5 -5
- package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
- package/dist/{chunk-JT2RFCC5.js → chunk-HR3HPQ76.js} +5 -5
- package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
- package/dist/{chunk-ELWDPP3Y.js → chunk-I7VLWRK2.js} +8 -8
- package/dist/{chunk-6OSVSQL5.js → chunk-ICO4TQ2F.js} +7 -5
- package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
- package/dist/{chunk-72YIHOZQ.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-AUPNRN7C.js → chunk-K2HL3GBL.js} +4 -4
- package/dist/{chunk-2ASED4PZ.js → chunk-K6RDB7IA.js} +26 -26
- package/dist/{chunk-FFUPXJC4.js → chunk-KDWLXVMN.js} +23 -24
- package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
- package/dist/{chunk-6QOTUPRG.js → chunk-KF6GFW6O.js} +66 -18
- 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-3UNOLWNZ.js → chunk-KTFSFCVN.js} +20 -9
- package/dist/{chunk-57XXR6DR.js → chunk-KYKNBD4Y.js} +24 -23
- package/dist/{chunk-IRXAATOX.js → chunk-L4N3DWNW.js} +3 -3
- package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
- package/dist/{chunk-U6TMQNSI.js → chunk-LTR5QCLS.js} +4 -4
- package/dist/chunk-LUL5Z66S.js +221 -0
- package/dist/{chunk-ELZVTCGV.js → chunk-LVFANMOH.js} +151 -327
- 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-NXYCB2VD.js → chunk-M6TAYK66.js} +6 -6
- package/dist/{chunk-NEKRRTYW.js → chunk-MC3JSVR6.js} +2 -2
- package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
- package/dist/{chunk-DXKJURES.js → chunk-MDU3C27C.js} +10 -7
- package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
- package/dist/{chunk-3GY4F45V.js → chunk-NC4KV7EL.js} +6 -6
- package/dist/{chunk-LLXSDWXS.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-RZDWV63N.js → chunk-NY6IWDVU.js} +6 -6
- package/dist/{chunk-XXYSBZIQ.js → chunk-O2RQ7LCK.js} +4 -4
- package/dist/{chunk-4BJ5BYCE.js → chunk-O3VV6IVK.js} +2 -2
- package/dist/{chunk-W6GROXXM.js → chunk-O5F25NIE.js} +2 -2
- package/dist/{chunk-NXIMQY5W.js → chunk-ODUTYZIU.js} +5 -5
- package/dist/{chunk-LTIKRKFL.js → chunk-ONRTXOZY.js} +4 -4
- package/dist/{chunk-KFV5L5SK.js → chunk-OQM5IVJY.js} +118 -232
- 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-RXTN6AKH.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-2DSOYNFC.js → chunk-R6MAYTMS.js} +7 -7
- package/dist/{chunk-JQLNNIKT.js → chunk-R6MICQYU.js} +6 -6
- package/dist/{chunk-NAI6ZFCY.js → chunk-RLTT5GVY.js} +122 -11
- package/dist/{chunk-DT3LWJOB.js → chunk-RXIOCVBZ.js} +24 -6
- package/dist/{chunk-N56KALIC.js → chunk-S32UQ5GL.js} +61 -34
- package/dist/{chunk-UEPWCCTY.js → chunk-SBZX6ARC.js} +12 -12
- package/dist/chunk-SD7SHNDW.js +15 -0
- package/dist/{chunk-NRO2BJRH.js → chunk-SDWNDICN.js} +10235 -4015
- 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-OMQNJVKW.js → chunk-SRZOW5L2.js} +43 -13
- package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
- package/dist/{chunk-V76WTFTW.js → chunk-T52TPHYC.js} +6 -6
- package/dist/{chunk-I7XBWTYH.js → chunk-T53XI6I7.js} +5 -5
- package/dist/{chunk-2ZSONWVL.js → chunk-T7FDXNRU.js} +13 -13
- package/dist/{chunk-JSD46VO2.js → chunk-TEG3RYVZ.js} +43 -36
- package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
- package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
- package/dist/{chunk-75W7L2E2.js → chunk-TZ7MFRG4.js} +1041 -162
- package/dist/{chunk-36CT5VVL.js → chunk-U2JOLB7O.js} +126 -77
- package/dist/{chunk-LL4KHSZI.js → chunk-U2MSJ57E.js} +2 -2
- package/dist/{chunk-FTMGRKEF.js → chunk-U44YYLVV.js} +4 -4
- package/dist/{chunk-YECAMM3D.js → chunk-U7H5WRG5.js} +5 -5
- package/dist/{chunk-RQCKCSRL.js → chunk-U7VQ4NI4.js} +22 -22
- package/dist/{chunk-5TUB6SLS.js → chunk-UFYNOQK4.js} +7 -7
- package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
- package/dist/{chunk-USR47QNF.js → chunk-UL36QJX6.js} +14 -14
- package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
- package/dist/{chunk-RAY4OVGZ.js → chunk-URBGEOH3.js} +5 -5
- package/dist/chunk-USZA7GWL.js +341 -0
- package/dist/{chunk-YD5GIKET.js → chunk-UTUNT5QL.js} +48 -579
- package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
- package/dist/{chunk-23L32XTI.js → chunk-UXAC2FX4.js} +68 -39
- package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
- package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
- package/dist/{chunk-EXLD33WO.js → chunk-VLPTKCKT.js} +24 -9
- 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-S6PYF2XF.js → chunk-WFKDPU7U.js} +4 -4
- package/dist/{chunk-BJVFZO5U.js → chunk-WJIMKGD6.js} +7 -7
- package/dist/{chunk-5636DCO5.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-4M6Z5QVF.js → chunk-XXBQKW32.js} +11 -11
- package/dist/{chunk-OEJSLEPW.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-Q4WO54TA.js → chunk-ZMZQEBKI.js} +14 -14
- 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 +44 -44
- package/dist/clio-5I2IBFYL.js +26 -0
- package/dist/{code-nav-IJR2DBPR.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-2TGAI2RC.js → components-TNIKXCBH.js} +13 -13
- package/dist/{config-IUA6OYNS.js → config-Y2JDJ3JJ.js} +210 -124
- package/dist/configure-SML6UBZ5.js +55 -0
- package/dist/{context-4MPR7WKB.js → context-P5YSEO55.js} +125 -121
- package/dist/{context-2DKHWH2T.js → context-QQ53HSGJ.js} +91 -62
- package/dist/{context-BOYF5EJM.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-3I3FYX6Y.js → context-working-set-CNLSQN5K.js} +31 -31
- package/dist/detail-5572VLBO.js +114 -0
- package/dist/{dispatch-runner-RJ5I2F2O.js → dispatch-runner-FRHD6P2O.js} +191 -116
- package/dist/{docs-SPOV3BAN.js → docs-BL7ROUFN.js} +4 -4
- package/dist/{doctor-DKICC2SN.js → doctor-N3LCM2LG.js} +58 -58
- package/dist/{eval-OQOQUDHK.js → eval-BUU3ZOUZ.js} +473 -168
- package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
- package/dist/evidence-DTGEN456.js +224 -0
- package/dist/{evidence-4DQ25GUQ.js → evidence-SQ5DNFEN.js} +110 -94
- package/dist/{evolve-GSS52E5J.js → evolve-IJNUFZDS.js} +107 -91
- package/dist/{extensions-G7MFLYHT.js → extensions-YVRHX6ZI.js} +16 -16
- package/dist/{fleet-Q37YHHAQ.js → fleet-ZNNVSYFO.js} +147 -147
- package/dist/{fleet-commands-G7E4N7SM.js → fleet-commands-5YE7NPJL.js} +27 -26
- package/dist/{fleet-decisions-O7M6QBA2.js → fleet-decisions-3SBSCTCW.js} +16 -15
- package/dist/{fleet-graph-TOUBW6OW.js → fleet-graph-6HHPWF5T.js} +39 -38
- package/dist/{fleet-inspect-SW33JJNI.js → fleet-inspect-JEYMGCGC.js} +107 -91
- package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
- package/dist/{fleet-preflight-CV2655TW.js → fleet-preflight-QRSHIIDE.js} +10 -9
- package/dist/{fleet-validate-KESZX2YH.js → fleet-validate-4PM4GDDL.js} +46 -42
- package/dist/{fleet-verify-UQPMTVE3.js → fleet-verify-NJDTHTO3.js} +105 -89
- package/dist/fleet-view-UP2BWQQY.js +117 -0
- package/dist/{init-PXEXQSBF.js → init-S3GZQ5ZF.js} +123 -123
- package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
- package/dist/{interop-ZG5T62U3.js → interop-YOTGXFJM.js} +25 -25
- package/dist/inventory-K2OZ36YJ.js +117 -0
- package/dist/{library-B2W4N74O.js → library-GJI6W6OK.js} +45 -44
- package/dist/{memory-YCANYS5A.js → memory-OQOXQGYD.js} +107 -93
- package/dist/{models-GERTU3YI.js → models-3IK2Y5WE.js} +63 -62
- package/dist/{monitor-CPNIUULB.js → monitor-FTJLTKCQ.js} +136 -107
- package/dist/{orchestrator-J4BSH4WQ.js → orchestrator-N47O7SFD.js} +1159 -697
- package/dist/{panes-BOHAEGYC.js → panes-7BTYH3XQ.js} +8 -8
- package/dist/{panes-NXSLDQZ2.js → panes-WPOMEMRH.js} +22 -22
- package/dist/{paths-VSUWNC22.js → paths-J3KN7UAO.js} +12 -12
- package/dist/preload-65U34NG6.js +115 -0
- package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
- package/dist/{reset-TNWTB5LU.js → reset-MUVQDLNL.js} +20 -20
- package/dist/{resources-4PXNMD5G.js → resources-LM76COAO.js} +41 -40
- package/dist/{run-D6XJ34CN.js → run-3VFZQ33N.js} +162 -156
- package/dist/{share-2NWMJJEE.js → share-4JUB4BL7.js} +43 -42
- package/dist/{skills-KR7WON5G.js → skills-S36AAJHU.js} +47 -46
- package/dist/{skills-eval-O2ZNOLDS.js → skills-eval-G6T57L7M.js} +127 -107
- package/dist/{skills-inventory-ZZOUBK7O.js → skills-inventory-WLM46PJH.js} +41 -40
- package/dist/slash-commands-GBARG3Y7.js +91 -0
- package/dist/{steer-XA25PSCS.js → steer-S7D7IKPU.js} +7 -7
- package/dist/{support-7EMVWYG2.js → support-5VAEC32W.js} +14 -14
- package/dist/{targets-OMH2XCSN.js → targets-N5REUETU.js} +145 -94
- package/dist/tasks-6BVY5YZF.js +36 -0
- package/dist/{terminal-lease-C2J3JYRE.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-HALS6BLF.js → uninstall-FXYMFFRT.js} +17 -17
- package/dist/{upgrade-MS72RJEP.js → upgrade-4HD5HAIV.js} +40 -39
- package/dist/{usage-NHG6MCJM.js → usage-4GWM2WWP.js} +136 -105
- package/dist/{verifiers-7AUNVXDY.js → verifiers-GSKWKWVG.js} +28 -27
- package/dist/verify-3AS3ULCY.js +30 -0
- package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
- package/dist/{web-fetch-V4FKSDAV.js → web-fetch-MQN4FH3X.js} +169 -18
- package/dist/wiki-generate-7BV7XWIY.js +614 -0
- package/dist/{with-panes-BDQEWBRT.js → with-panes-OFTNAR4Y.js} +34 -20
- package/dist/worker/entry.js +99 -88
- package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
- package/docs/README.md +7 -6
- package/docs/architecture/acp.md +10 -0
- package/docs/architecture/architecture.md +5 -5
- 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/evidence-and-memory.md +10 -0
- package/docs/architecture/pi-boundary.md +37 -7
- package/docs/architecture/prompt-envelope-and-tools.md +7 -7
- package/docs/architecture/session-lifecycle.md +4 -4
- package/docs/architecture/worker-dispatch-mechanics.md +4 -0
- package/docs/guide/commands-and-modes.md +49 -36
- package/docs/guide/configuration-and-targets.md +7 -2
- package/docs/guide/configuration-reference.md +13 -3
- package/docs/guide/environment-variables.md +6 -2
- 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 +9 -2
- package/docs/process/development-pipeline.md +10 -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/release-cut-checklist.md +6 -6
- package/evals/README.md +4 -0
- package/evals/behavioral-corpus-grader.mjs +147 -14
- 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/registry.yaml +1 -1
- package/skills/skill-marketplace.json +1 -1
- 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/context-map.ts +75 -14
- package/src/cli/context.ts +46 -17
- package/src/cli/eval.ts +17 -3
- package/src/cli/modes/print.ts +32 -4
- package/src/cli/run.ts +16 -14
- package/src/cli/skills-eval.ts +10 -8
- package/src/cli/steer-channel.ts +31 -18
- package/src/cli/targets.ts +83 -31
- package/src/cli/tasks.ts +10 -1
- package/src/cli/upgrade.ts +9 -6
- package/src/cli/usage.ts +24 -0
- package/src/cli/wiki-generate.ts +239 -96
- package/src/core/bash-exec.ts +43 -15
- package/src/core/bus-events.ts +15 -0
- 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/incomplete-installation.ts +3 -1
- package/src/core/settings-layers.ts +21 -5
- package/src/core/termination.ts +26 -9
- package/src/core/untrusted-content.ts +16 -0
- package/src/core/workspace-trust.ts +179 -0
- package/src/domains/agents/builtins/coder.md +4 -2
- package/src/domains/agents/builtins/context-bootstrap.md +3 -1
- package/src/domains/agents/builtins/documenter.md +7 -4
- package/src/domains/agents/builtins/researcher.md +1 -0
- package/src/domains/agents/builtins/scout.md +7 -1
- 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 +72 -10
- 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 +9 -57
- package/src/domains/context/wiki/assemble.ts +14 -10
- package/src/domains/context/wiki/evidence.ts +209 -0
- package/src/domains/context/wiki/generate.ts +201 -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 +42 -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 +6 -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/contract.ts +10 -2
- 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 +2 -0
- package/src/domains/dispatch/extension.ts +190 -105
- package/src/domains/dispatch/fleet-run.ts +20 -0
- package/src/domains/dispatch/gate-role-prompts.ts +4 -2
- package/src/domains/dispatch/parallel-writers.ts +34 -0
- package/src/domains/dispatch/reservation-store.ts +8 -34
- 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/types.ts +4 -3
- 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 +5 -1
- 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 +4 -2
- 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/rules.ts +5 -1
- 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/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/contract.ts +2 -2
- package/src/domains/observability/projection.ts +30 -9
- 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 +10 -0
- package/src/domains/prompts/fragments/operating/delegation.md +5 -0
- package/src/domains/prompts/fragments/wiki/page.md +28 -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/runtime-resolution.ts +11 -9
- package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
- package/src/domains/resources/skills/promotion.ts +8 -1
- package/src/domains/safety/action-classifier.ts +9 -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 +11 -0
- package/src/domains/safety/extension.ts +11 -2
- package/src/domains/safety/policy-engine.ts +189 -32
- package/src/domains/safety/project-policy.ts +7 -2
- package/src/domains/safety/workspace-trust.ts +43 -0
- 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 +43 -33
- package/src/domains/session/entries.ts +169 -4
- package/src/domains/session/prompt-manifest.ts +47 -8
- package/src/domains/session/task-board.ts +21 -3
- package/src/domains/user-tasks/handoff.ts +16 -0
- package/src/engine/acp/adapter.ts +44 -12
- package/src/engine/acp/server.ts +1 -0
- package/src/engine/acp/transport.ts +2 -1
- package/src/engine/acp/types.ts +6 -1
- package/src/engine/antigravity/subprocess-runtime.ts +20 -4
- package/src/engine/api-registry.ts +19 -2
- 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/env-api-keys.ts +2 -1
- package/src/engine/external-subprocess.ts +14 -3
- 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 +53 -15
- 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 +17 -2
- package/src/interactive/editor-submit.ts +13 -0
- package/src/interactive/interactive-application.ts +8 -2
- package/src/interactive/interactive-event-projection.ts +7 -1
- package/src/interactive/interactive-presentation.ts +15 -7
- package/src/interactive/interactive-slash-runtime.ts +2 -0
- package/src/interactive/layout.ts +2 -1
- package/src/interactive/model-session-replay.ts +2 -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/message-picker.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-commands.ts +9 -7
- 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/watch-pane.ts +18 -4
- package/src/interactive/worker-stream.ts +7 -7
- package/src/tools/agent-tools.ts +6 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +9 -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 +34 -0
- package/src/tools/context/index.ts +32 -7
- package/src/tools/context/surface.ts +15 -4
- package/src/tools/decide.ts +1 -1
- package/src/tools/dispatch-admission.ts +12 -1
- package/src/tools/dispatch-arguments.ts +38 -1
- package/src/tools/dispatch-plan.ts +7 -7
- package/src/tools/dispatch-runner.ts +48 -32
- 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/find.ts +13 -4
- package/src/tools/grep.ts +13 -1
- 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/read.ts +112 -15
- package/src/tools/registry.ts +54 -17
- package/src/tools/result-shaping.ts +110 -2
- package/src/tools/tasks.ts +33 -7
- package/src/tools/verify/frontend.ts +67 -30
- package/src/tools/verify/numeric.ts +6 -1
- 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-WGALA46I.js +0 -22
- package/dist/chunk-2WZ546HR.js +0 -792
- package/dist/chunk-5PSMVOLM.js +0 -56
- package/dist/chunk-EL24TAU4.js +0 -1560
- package/dist/chunk-IZXGRF7P.js +0 -4048
- package/dist/chunk-JVCV3ICN.js +0 -47
- package/dist/chunk-MNJGS2IN.js +0 -33
- package/dist/chunk-O5CVSAG5.js +0 -122
- package/dist/chunk-ODGTEFFI.js +0 -50
- package/dist/chunk-OQE5J4C6.js +0 -73
- package/dist/chunk-UUVG37B4.js +0 -244
- package/dist/chunk-V6HJFQZE.js +0 -228
- package/dist/clio-QLICPCF5.js +0 -25
- package/dist/configure-VEPX4NMX.js +0 -55
- package/dist/context-clear-S4ZJCQUX.js +0 -182
- package/dist/detail-A7JAVSIG.js +0 -98
- package/dist/evidence-4F5USFKH.js +0 -208
- package/dist/fleet-view-MN2VG4MR.js +0 -101
- package/dist/inventory-C26CFDRR.js +0 -101
- package/dist/preload-P6DGH2PZ.js +0 -13
- package/dist/slash-commands-ZXPJD64J.js +0 -92
- package/dist/tasks-IPAGMEIX.js +0 -36
- package/dist/tools-EFFEAIDP.js +0 -28
- package/dist/verify-FWYGPKMR.js +0 -29
- package/dist/wiki-generate-743CIGJW.js +0 -476
|
@@ -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,21 +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
219
|
// Clio's own secret store and user skills, by absolute path.
|
|
208
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
|
-
:
|
|
213
|
-
|
|
214
|
-
readOnlyPaths: clioSkillsRootPaths(),
|
|
215
|
-
});
|
|
222
|
+
const expandedDefaults = mergePathPolicyInputs(mergePathPolicyInputs(pathPolicyInput, OPERATOR_PATH_POLICY), {
|
|
223
|
+
zeroAccessPaths: clioCredentialStorePaths(),
|
|
224
|
+
readOnlyPaths: [...clioSkillsRootPaths(), path.join(clioConfigDir(), "settings.yaml"), workspaceTrustDirectory()],
|
|
225
|
+
});
|
|
216
226
|
const pathPolicy = compilePathPolicy(expandedDefaults, projectPolicyRoot);
|
|
217
227
|
// Bash-read scanning tests argument tokens against zero-access entries only:
|
|
218
228
|
// read-only paths stay readable from bash by design, secrets do not.
|
|
@@ -317,6 +327,31 @@ export function createSafetyPolicyEngine(options: SafetyPolicyEngineOptions = {}
|
|
|
317
327
|
// Editing active instructions is an operator privilege at every autonomy
|
|
318
328
|
// level, in both the coordinator and the shared worker safety contract.
|
|
319
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
|
+
}
|
|
320
355
|
const skillReason =
|
|
321
356
|
mutationCommand !== null && invokesClioSkillMutation(mutationCommand)
|
|
322
357
|
? "skill installation and updates require the operator CLI or an explicit operator install choice; draft outside active skill roots"
|
|
@@ -421,8 +456,39 @@ export function createSafetyPolicyEngine(options: SafetyPolicyEngineOptions = {}
|
|
|
421
456
|
return posture === "confirmed" ? allowDecision(base, input) : askDecision(base, input);
|
|
422
457
|
}
|
|
423
458
|
|
|
424
|
-
|
|
425
|
-
|
|
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
|
+
}
|
|
426
492
|
if (bash.kind === "block") return blockDecision(base, bash);
|
|
427
493
|
if (bash.kind === "ask") return askDecision(base, bash);
|
|
428
494
|
return allowDecision(base, bash);
|
|
@@ -438,22 +504,9 @@ export function createSafetyPolicyEngine(options: SafetyPolicyEngineOptions = {}
|
|
|
438
504
|
};
|
|
439
505
|
if (hit?.match.ruleId !== undefined) allowInput.ruleId = hit.match.ruleId;
|
|
440
506
|
if (hit?.match !== undefined) allowInput.match = hit.match;
|
|
441
|
-
//
|
|
442
|
-
//
|
|
443
|
-
|
|
444
|
-
// project-catalog check runs whatever argv the workspace file declares,
|
|
445
|
-
// so it is unrecognized: auto-edit parks it for one confirmation that
|
|
446
|
-
// shows the argv, full-auto runs it, and the damage-control match and
|
|
447
|
-
// zero-access scan above have already seen the declared vector.
|
|
448
|
-
if (classification.actionClass === "execute") {
|
|
449
|
-
allowInput.execRecognition = catalogCheck === null ? "recognized" : "unrecognized";
|
|
450
|
-
if (catalogCheck !== null) {
|
|
451
|
-
allowInput.reasons = [
|
|
452
|
-
...allowInput.reasons,
|
|
453
|
-
`project verifier '${catalogCheck.id}' runs declared argv: ${catalogCommand ?? ""}`,
|
|
454
|
-
];
|
|
455
|
-
}
|
|
456
|
-
}
|
|
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";
|
|
457
510
|
return allowDecision(base, allowInput);
|
|
458
511
|
},
|
|
459
512
|
metadata() {
|
|
@@ -466,6 +519,8 @@ export function createSafetyPolicyEngine(options: SafetyPolicyEngineOptions = {}
|
|
|
466
519
|
projectPolicyHash: projectPolicy.hash,
|
|
467
520
|
projectPolicyValid: projectPolicy.valid,
|
|
468
521
|
projectPolicyErrors: [...projectPolicy.errors, ...pathPolicy.diagnostics],
|
|
522
|
+
disableDefaultPathPolicy: projectPolicy.disableDefaultPathPolicy,
|
|
523
|
+
workspaceTrustVerdict: projectPolicy.trustVerdict ?? "trusted",
|
|
469
524
|
cwd,
|
|
470
525
|
};
|
|
471
526
|
},
|
|
@@ -613,12 +668,27 @@ function pathPolicyTargets(call: ClassifierCall): Array<{ operation: PathPolicyO
|
|
|
613
668
|
* admission seam decides whether it runs, asks, or is denied.
|
|
614
669
|
*/
|
|
615
670
|
function evaluateBashPolicy(
|
|
616
|
-
|
|
671
|
+
input: string | ReadonlyArray<string>,
|
|
617
672
|
callCwd: string,
|
|
618
673
|
workspaceRoot: string,
|
|
619
674
|
posture: string | undefined,
|
|
620
675
|
policy: LoadedProjectSafetyPolicy,
|
|
621
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(" ");
|
|
622
692
|
if (command.trim().length === 0) {
|
|
623
693
|
return {
|
|
624
694
|
kind: "block",
|
|
@@ -628,6 +698,21 @@ function evaluateBashPolicy(
|
|
|
628
698
|
policySource: "builtin-command-allowlist",
|
|
629
699
|
};
|
|
630
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
|
+
}
|
|
631
716
|
const projectMatch = matchingProjectCommand(policy, command, callCwd);
|
|
632
717
|
if (projectMatch) {
|
|
633
718
|
const base: Omit<
|
|
@@ -680,15 +765,34 @@ function evaluateBashPolicy(
|
|
|
680
765
|
execRecognition: "unrecognized",
|
|
681
766
|
};
|
|
682
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
|
+
}
|
|
683
781
|
const chain = recognizeCommandChain(recognitionCommand, callCwd, workspaceRoot, policy);
|
|
684
782
|
if (chain !== null) {
|
|
685
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
|
+
}
|
|
686
790
|
if (chain.requiresConfirmation && posture !== "confirmed") {
|
|
687
791
|
return {
|
|
688
792
|
kind: "ask",
|
|
689
793
|
ruleId: "bash-recognized-chain",
|
|
690
794
|
reasonCode: "bash-recognized-chain",
|
|
691
|
-
reasons: [...chainReasons, "project policy requires confirmation for one step"],
|
|
795
|
+
reasons: [...chainReasons, "repository code or project policy requires confirmation for one step"],
|
|
692
796
|
policySource: "builtin-command-allowlist",
|
|
693
797
|
execRecognition: "recognized",
|
|
694
798
|
};
|
|
@@ -709,6 +813,23 @@ function evaluateBashPolicy(
|
|
|
709
813
|
// the full string, so a destructive verb behind an operator was caught before
|
|
710
814
|
// this point.
|
|
711
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
|
+
}
|
|
712
833
|
return {
|
|
713
834
|
kind: "allow",
|
|
714
835
|
ruleId: "bash-shell-operators",
|
|
@@ -925,6 +1046,11 @@ function recognizeCommandChain(
|
|
|
925
1046
|
if (projectMatch.requireConfirmation) requiresConfirmation = true;
|
|
926
1047
|
continue;
|
|
927
1048
|
}
|
|
1049
|
+
if (PROJECT_SCRIPT_COMMANDS.some((entry) => entry.re.test(rendered))) {
|
|
1050
|
+
ruleIds.push("project-script-confirm");
|
|
1051
|
+
requiresConfirmation = true;
|
|
1052
|
+
continue;
|
|
1053
|
+
}
|
|
928
1054
|
const builtin = BUILTIN_ALLOWLIST.find((entry) => entry.re.test(rendered));
|
|
929
1055
|
if (builtin === undefined) return null;
|
|
930
1056
|
ruleIds.push(builtin.id);
|
|
@@ -1024,9 +1150,9 @@ function damageControlScan(call: ClassifierCall): string {
|
|
|
1024
1150
|
* declare. The catalog is an argv vector the operator authored, but the file
|
|
1025
1151
|
* sits in the workspace, so the engine reads it fresh on every verify call and
|
|
1026
1152
|
* treats the declared argv exactly like a bash command string: it is what the
|
|
1027
|
-
* damage-control rules and the zero-access read guard scan
|
|
1028
|
-
*
|
|
1029
|
-
* 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.
|
|
1030
1156
|
*/
|
|
1031
1157
|
function resolveVerifyCatalogCheck(call: ClassifierCall, workspaceRoot: string): DeclaredCheck | null {
|
|
1032
1158
|
if (call.tool !== ToolNames.Verify) return null;
|
|
@@ -1077,3 +1203,34 @@ function packPayload(rules: ReadonlyArray<DamageControlRule>): Array<Record<stri
|
|
|
1077
1203
|
...(rule.ask !== undefined ? { ask: rule.ask } : {}),
|
|
1078
1204
|
}));
|
|
1079
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 {
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Shared trust API for safety callers; core owns persistence so settings can gate before domain startup. */
|
|
2
|
+
export {
|
|
3
|
+
captureProjectSurface,
|
|
4
|
+
type ProjectSurfaceSnapshot,
|
|
5
|
+
type ProjectTrustSurface,
|
|
6
|
+
projectSurfaceTrust,
|
|
7
|
+
projectSurfaceTrustNotice,
|
|
8
|
+
recordProjectSurfaceTrust,
|
|
9
|
+
revokeProjectSurfaceTrust,
|
|
10
|
+
type WorkspaceTrustVerdict,
|
|
11
|
+
workspaceTrustDirectory,
|
|
12
|
+
} from "../../core/workspace-trust.js";
|
|
13
|
+
|
|
14
|
+
import { projectSurfaceTrust, safetySurfaceTrustHash } from "../../core/workspace-trust.js";
|
|
15
|
+
import type { LoadedProjectSafetyPolicy } from "./project-policy.js";
|
|
16
|
+
|
|
17
|
+
/** Keep discovered provenance visible while withholding unapproved project authority. */
|
|
18
|
+
export function gateProjectSafetyPolicy(
|
|
19
|
+
workspaceRoot: string,
|
|
20
|
+
policy: LoadedProjectSafetyPolicy,
|
|
21
|
+
): LoadedProjectSafetyPolicy {
|
|
22
|
+
if (policy.path === null) return policy;
|
|
23
|
+
const trustVerdict =
|
|
24
|
+
policy.hash === null
|
|
25
|
+
? "untrusted"
|
|
26
|
+
: projectSurfaceTrust(workspaceRoot, "safety", safetySurfaceTrustHash(policy.path, policy.hash));
|
|
27
|
+
if (trustVerdict === "trusted") return { ...policy, trustVerdict };
|
|
28
|
+
return {
|
|
29
|
+
...policy,
|
|
30
|
+
trustVerdict,
|
|
31
|
+
// This is the admitted empty policy, whose execution defaults are valid.
|
|
32
|
+
// Unapproved parse failures retain diagnostics below but cannot acquire the
|
|
33
|
+
// authority to block execution. An approved malformed policy stays invalid.
|
|
34
|
+
valid: true,
|
|
35
|
+
commands: [],
|
|
36
|
+
pathPolicy: {},
|
|
37
|
+
disableDefaultPathPolicy: false,
|
|
38
|
+
errors: [
|
|
39
|
+
...policy.errors,
|
|
40
|
+
`${policy.path} is ${trustVerdict}; project safety ignored. Review with clio-coder config trust safety.`,
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
}
|