@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,5 +1,6 @@
|
|
|
1
1
|
import { type Static, Type } from "typebox";
|
|
2
2
|
import type { FleetSettings } from "../core/defaults.js";
|
|
3
|
+
import { RESULT_SUMMARY_MAX_BYTES_CEILING } from "../domains/agents/result-contract.js";
|
|
3
4
|
import { DISPATCH_BRIEFING_MAX_BYTES } from "../domains/dispatch/validation.js";
|
|
4
5
|
import { StringEnum } from "../engine/ai.js";
|
|
5
6
|
import { TOOL_PROFILE_NAMES } from "./profiles.js";
|
|
@@ -18,7 +19,7 @@ import { TOOL_PROFILE_NAMES } from "./profiles.js";
|
|
|
18
19
|
export interface DispatchSchemaComposition {
|
|
19
20
|
/** `roster`, `members`, `synthesis`, `rounds`: a council needs a configured roster to name. */
|
|
20
21
|
council: boolean;
|
|
21
|
-
/** `candidates`, `judge`, `apply_winner`:
|
|
22
|
+
/** `candidates`, `judge`, `apply_winner`: distinct executions may share one fleet route. */
|
|
22
23
|
compete: boolean;
|
|
23
24
|
/** `routing.posture`, `minimumQuality`, `locality`, `failover`: they act only once adaptive routing is activated. */
|
|
24
25
|
adaptiveRouting: boolean;
|
|
@@ -30,28 +31,15 @@ export const FULL_DISPATCH_SCHEMA_COMPOSITION: DispatchSchemaComposition = Objec
|
|
|
30
31
|
adaptiveRouting: true,
|
|
31
32
|
});
|
|
32
33
|
|
|
33
|
-
type FleetShape = Pick<FleetSettings, "
|
|
34
|
-
|
|
35
|
-
/** Distinct target/model routes the fleet can dispatch to: the default plus every profile and roster member. */
|
|
36
|
-
function distinctFleetRoutes(fleet: FleetShape): number {
|
|
37
|
-
const routes = new Set<string>();
|
|
38
|
-
const add = (target: string | null | undefined, model: string | null | undefined): void => {
|
|
39
|
-
if (!target) return;
|
|
40
|
-
routes.add(`${target}${model ?? ""}`);
|
|
41
|
-
};
|
|
42
|
-
add(fleet.default.target, fleet.default.model);
|
|
43
|
-
for (const profile of Object.values(fleet.profiles)) add(profile.target, profile.model);
|
|
44
|
-
for (const roster of Object.values(fleet.rosters)) {
|
|
45
|
-
for (const member of roster.members) add(member.target, member.model);
|
|
46
|
-
}
|
|
47
|
-
return routes.size;
|
|
48
|
-
}
|
|
34
|
+
type FleetShape = Pick<FleetSettings, "rosters" | "adaptiveRouting">;
|
|
49
35
|
|
|
50
36
|
export function dispatchSchemaCompositionFor(fleet: FleetShape): DispatchSchemaComposition {
|
|
51
37
|
const routing = fleet.adaptiveRouting;
|
|
52
38
|
return {
|
|
53
39
|
council: Object.keys(fleet.rosters).length > 0,
|
|
54
|
-
|
|
40
|
+
// The runner isolates candidate executions and dispatches a separate judge;
|
|
41
|
+
// route diversity is not required. Normal admission still validates routes.
|
|
42
|
+
compete: true,
|
|
55
43
|
adaptiveRouting: routing.roles.length > 0 || routing.postures.length > 0 || routing.agentRoles.length > 0,
|
|
56
44
|
};
|
|
57
45
|
}
|
|
@@ -85,7 +73,7 @@ const DispatchBudgetSchema = Type.Object(
|
|
|
85
73
|
{
|
|
86
74
|
additionalProperties: false,
|
|
87
75
|
description:
|
|
88
|
-
"
|
|
76
|
+
"Advisory tool-call estimate; choose appropriate counts even above recipe recommendations. retryRevision sets a retry/revision estimate. Crossing estimates does not stop work.",
|
|
89
77
|
},
|
|
90
78
|
);
|
|
91
79
|
|
|
@@ -124,7 +112,7 @@ const DispatchIntentSchema = Type.Object(
|
|
|
124
112
|
{
|
|
125
113
|
additionalProperties: false,
|
|
126
114
|
description:
|
|
127
|
-
"Repository-relative paths and outputs. Declare it on every dispatch: it selects the project rules that apply and pins worker context, where omitting it falls back to path tokens scraped from the task text. verification entries are declared check ids from package scripts or .clio-coder/verifiers.yaml. Per-task intent
|
|
115
|
+
"Repository-relative paths and outputs. Declare it on every dispatch: it selects the project rules that apply and pins worker context, where omitting it falls back to path tokens scraped from the task text. verification entries are declared check ids from package scripts or .clio-coder/verifiers.yaml. Per-task intent fields override inherited top-level fields within its scope. For disjoint parallel writes, set each task's write_roots to only its assigned outputs; expected_outputs alone does not narrow write access.",
|
|
128
116
|
},
|
|
129
117
|
);
|
|
130
118
|
|
|
@@ -193,7 +181,12 @@ export function buildDispatchParameters(composition: DispatchSchemaComposition =
|
|
|
193
181
|
briefing: Type.Optional(
|
|
194
182
|
Type.String({ description: `Per-task parent context, max ${DISPATCH_BRIEFING_MAX_BYTES} UTF-8 bytes.` }),
|
|
195
183
|
),
|
|
196
|
-
agent: Type.Optional(
|
|
184
|
+
agent: Type.Optional(
|
|
185
|
+
Type.String({
|
|
186
|
+
description:
|
|
187
|
+
"Recipe id for this task: set scout/documenter explicitly in a mixed pipeline; names in task text do not select recipes, and omission inherits the batch/default recipe.",
|
|
188
|
+
}),
|
|
189
|
+
),
|
|
197
190
|
budget: Type.Optional(BudgetRef),
|
|
198
191
|
target: Type.Optional(Type.String()),
|
|
199
192
|
model: Type.Optional(Type.String()),
|
|
@@ -201,6 +194,13 @@ export function buildDispatchParameters(composition: DispatchSchemaComposition =
|
|
|
201
194
|
worktree: Type.Optional(Type.Literal(true, { description: "Run this writer in an isolated git worktree." })),
|
|
202
195
|
intent: Type.Optional(IntentRef),
|
|
203
196
|
gate: Type.Optional(Type.String({ description: "One declared check id, shorthand for intent.verification." })),
|
|
197
|
+
result_summary_max_bytes: Type.Optional(
|
|
198
|
+
Type.Integer({
|
|
199
|
+
minimum: 1,
|
|
200
|
+
maximum: RESULT_SUMMARY_MAX_BYTES_CEILING,
|
|
201
|
+
description: "This task's inline summary allowance; mutation-report workers (coder, documenter) only.",
|
|
202
|
+
}),
|
|
203
|
+
),
|
|
204
204
|
}),
|
|
205
205
|
]),
|
|
206
206
|
{ description: "Batch of assignments; one string or object is wrapped." },
|
|
@@ -284,8 +284,8 @@ export function buildDispatchParameters(composition: DispatchSchemaComposition =
|
|
|
284
284
|
agent: Type.Optional(
|
|
285
285
|
Type.String({
|
|
286
286
|
description: composition.council
|
|
287
|
-
? "Default recipe id for
|
|
288
|
-
: "Default recipe id for
|
|
287
|
+
? "Default recipe id for tasks without their own agent, or auto (default coder; researcher for council)."
|
|
288
|
+
: "Default recipe id for tasks without their own agent, or auto (default coder).",
|
|
289
289
|
}),
|
|
290
290
|
),
|
|
291
291
|
briefing: Type.Optional(
|
|
@@ -332,6 +332,13 @@ export function buildDispatchParameters(composition: DispatchSchemaComposition =
|
|
|
332
332
|
cwd: Type.Optional(Type.String({ description: "Default worker working directory." })),
|
|
333
333
|
timeout_ms: Type.Optional(Type.Number({ description: "Abort the dispatch after this many ms." })),
|
|
334
334
|
max_output_bytes: Type.Optional(Type.Number({ description: "Max summary bytes returned." })),
|
|
335
|
+
result_summary_max_bytes: Type.Optional(
|
|
336
|
+
Type.Integer({
|
|
337
|
+
minimum: 1,
|
|
338
|
+
maximum: RESULT_SUMMARY_MAX_BYTES_CEILING,
|
|
339
|
+
description: `UTF-8 byte allowance for a mutation-report worker's inline summary (coder, documenter), default 16384. A batch default applies to mutation-report steps only; other steps ignore it. Storage bound, not the returned preview (max_output_bytes).`,
|
|
340
|
+
}),
|
|
341
|
+
),
|
|
335
342
|
},
|
|
336
343
|
{ $defs: DISPATCH_DEFS },
|
|
337
344
|
);
|
|
@@ -11,14 +11,11 @@ import type {
|
|
|
11
11
|
} from "../domains/dispatch/contract.js";
|
|
12
12
|
import { type ExecutionPlan, requireAgentSteps } from "../domains/dispatch/execution-plan.js";
|
|
13
13
|
import { verifyReceiptIntegrity } from "../domains/dispatch/receipt-integrity.js";
|
|
14
|
-
import { sameRouteIdentity } from "../domains/dispatch/route-decision.js";
|
|
15
14
|
import type { RoutingIntent } from "../domains/dispatch/routing-intent.js";
|
|
16
15
|
import { compileScoutTransition, type ScoutAgentBinding } from "../domains/dispatch/scout-transition.js";
|
|
17
16
|
import type { RunEnvelope, RunReceipt } from "../domains/dispatch/types.js";
|
|
18
17
|
import type { ResolvedDispatchPlanArtifact } from "./dispatch-plan.js";
|
|
19
18
|
|
|
20
|
-
const MAX_SCOUT_PLAN_DEADLINE_MS = 3_600_000;
|
|
21
|
-
|
|
22
19
|
export interface ScoutContinuationRef {
|
|
23
20
|
runId: string;
|
|
24
21
|
receiptDigest: string;
|
|
@@ -132,8 +129,8 @@ export function prepareScoutContinuation(input: {
|
|
|
132
129
|
: {
|
|
133
130
|
...sourceIntent,
|
|
134
131
|
posture: sourceIntent.posture === "manual" ? "balanced" : sourceIntent.posture,
|
|
135
|
-
maxCostUsd:
|
|
136
|
-
deadlineMs:
|
|
132
|
+
maxCostUsd: sourceIntent.maxCostUsd,
|
|
133
|
+
deadlineMs: sourceIntent.deadlineMs,
|
|
137
134
|
requiredCapabilities: [...sourceIntent.requiredCapabilities],
|
|
138
135
|
failover: "approved",
|
|
139
136
|
};
|
|
@@ -164,11 +161,7 @@ export function prepareScoutContinuation(input: {
|
|
|
164
161
|
routingIntent,
|
|
165
162
|
});
|
|
166
163
|
}
|
|
167
|
-
const
|
|
168
|
-
const effectiveCostCeiling =
|
|
169
|
-
input.authorization === "full-auto-policy" && priorCostCeiling !== null
|
|
170
|
-
? Math.min(input.costCeilingUsd, priorCostCeiling)
|
|
171
|
-
: input.costCeilingUsd;
|
|
164
|
+
const explicitCostCeiling = input.source.receipt.routingIntent.maxCostUsd;
|
|
172
165
|
const bindings: ScoutAgentBinding[] = proposals.map(({ subtask, agentSpec }) => ({
|
|
173
166
|
subtaskId: subtask.id,
|
|
174
167
|
spec: agentSpec,
|
|
@@ -192,35 +185,8 @@ export function prepareScoutContinuation(input: {
|
|
|
192
185
|
throw new Error("dispatch: full-auto policy does not grant every requested Scout authority");
|
|
193
186
|
}
|
|
194
187
|
const plan = transition.plan;
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
const selected = proposal.decision.candidateEvaluations.find((entry) =>
|
|
198
|
-
sameRouteIdentity(entry.candidate, proposal.decision.selected),
|
|
199
|
-
);
|
|
200
|
-
if (selected === undefined || selected.rejection !== null) {
|
|
201
|
-
throw new Error(`dispatch: Scout step '${proposal.subtask.id}' has no admissible latency estimate`);
|
|
202
|
-
}
|
|
203
|
-
return [proposal.subtask.id, selected.estimate.p95EndToEndMs] as const;
|
|
204
|
-
}),
|
|
205
|
-
);
|
|
206
|
-
const predictedDeadlineMs = Math.ceil(
|
|
207
|
-
plan.waves.reduce(
|
|
208
|
-
(total, wave) => total + Math.max(...wave.map((stepId) => p95ByStep.get(stepId) ?? Number.POSITIVE_INFINITY)),
|
|
209
|
-
0,
|
|
210
|
-
),
|
|
211
|
-
);
|
|
212
|
-
if (
|
|
213
|
-
!Number.isFinite(predictedDeadlineMs) ||
|
|
214
|
-
predictedDeadlineMs < 1 ||
|
|
215
|
-
predictedDeadlineMs > MAX_SCOUT_PLAN_DEADLINE_MS
|
|
216
|
-
) {
|
|
217
|
-
throw new Error("dispatch: Scout continuation exceeds the finite whole-plan deadline ceiling");
|
|
218
|
-
}
|
|
219
|
-
const priorDeadlineMs = input.source.receipt.routingIntent.deadlineMs;
|
|
220
|
-
if (input.authorization === "full-auto-policy" && priorDeadlineMs !== null && predictedDeadlineMs > priorDeadlineMs) {
|
|
221
|
-
throw new Error("dispatch: full-auto Scout continuation exceeds the previously granted deadline");
|
|
222
|
-
}
|
|
223
|
-
const deadlineMs = Math.max(priorDeadlineMs ?? 0, predictedDeadlineMs);
|
|
188
|
+
// Route estimates are advisory. Only a caller-supplied deadline grants stop authority.
|
|
189
|
+
const deadlineMs = input.source.receipt.routingIntent.deadlineMs;
|
|
224
190
|
const requests: DispatchRequest[] = [];
|
|
225
191
|
const resolutions: DispatchPlanTaskResolution[] = [];
|
|
226
192
|
const tasks = requireAgentSteps(plan.steps).map((step, index): ResolvedDispatchPlanArtifact["tasks"][number] => {
|
|
@@ -241,7 +207,7 @@ export function prepareScoutContinuation(input: {
|
|
|
241
207
|
cwd: input.source.envelope.cwd,
|
|
242
208
|
requestOrigin: "user",
|
|
243
209
|
agentSelection: selection,
|
|
244
|
-
routingIntent: { ...proposal.routingIntent, maxCostUsd:
|
|
210
|
+
routingIntent: { ...proposal.routingIntent, maxCostUsd: explicitCostCeiling, deadlineMs, failover: "none" },
|
|
245
211
|
failover: "none",
|
|
246
212
|
});
|
|
247
213
|
resolutions.push(proposal.resolution);
|
|
@@ -253,7 +219,7 @@ export function prepareScoutContinuation(input: {
|
|
|
253
219
|
node: proposal.resolution.node.id,
|
|
254
220
|
nodeKind: proposal.resolution.node.kind,
|
|
255
221
|
...(proposal.resolution.node.host === undefined ? {} : { nodeHost: proposal.resolution.node.host }),
|
|
256
|
-
routingIntent: { ...proposal.routingIntent, maxCostUsd:
|
|
222
|
+
routingIntent: { ...proposal.routingIntent, maxCostUsd: explicitCostCeiling, deadlineMs, failover: "none" },
|
|
257
223
|
failover: "none",
|
|
258
224
|
routeApproval: null,
|
|
259
225
|
agentSelection: selection,
|
|
@@ -269,8 +235,8 @@ export function prepareScoutContinuation(input: {
|
|
|
269
235
|
};
|
|
270
236
|
});
|
|
271
237
|
const aggregateCost = resolutions.reduce((sum, resolution) => sum + resolution.costUpperBoundUsd, 0);
|
|
272
|
-
if (!Number.isFinite(aggregateCost) || aggregateCost >
|
|
273
|
-
throw new Error("dispatch: Scout continuation exceeds the
|
|
238
|
+
if (!Number.isFinite(aggregateCost) || (explicitCostCeiling !== null && aggregateCost > explicitCostCeiling)) {
|
|
239
|
+
throw new Error("dispatch: Scout continuation exceeds the explicit routing cost ceiling");
|
|
274
240
|
}
|
|
275
241
|
return {
|
|
276
242
|
artifact: {
|
|
@@ -285,7 +251,7 @@ export function prepareScoutContinuation(input: {
|
|
|
285
251
|
maxWorkers: plan.maxWorkers,
|
|
286
252
|
onFailure: plan.onFailure,
|
|
287
253
|
tasks,
|
|
288
|
-
costCeilingUsd:
|
|
254
|
+
costCeilingUsd: input.costCeilingUsd,
|
|
289
255
|
deadlineMs,
|
|
290
256
|
},
|
|
291
257
|
requests,
|
|
@@ -186,8 +186,7 @@ export async function runScoutContinuationPlan<T, S>(input: {
|
|
|
186
186
|
): Promise<{ receipt: RunReceipt; summary: S }>;
|
|
187
187
|
complete(receipt: RunReceipt, summary: S): { value: T; integrityValid: boolean };
|
|
188
188
|
}): Promise<{ runs: T[]; skipped: ReadonlyArray<string> }> {
|
|
189
|
-
|
|
190
|
-
const assignmentDeadlineAt = Date.now() + input.artifact.deadlineMs;
|
|
189
|
+
const assignmentDeadlineAt = input.artifact.deadlineMs === null ? undefined : Date.now() + input.artifact.deadlineMs;
|
|
191
190
|
const completedByStep = new Map<string, T>();
|
|
192
191
|
const byStep = new Map(
|
|
193
192
|
input.artifact.tasks.map((task, index) => [task.stepId, { task, request: input.requests[index] }]),
|
|
@@ -234,7 +233,7 @@ export async function runScoutContinuationPlan<T, S>(input: {
|
|
|
234
233
|
...bound.request,
|
|
235
234
|
predecessorHandoffs: handoffs,
|
|
236
235
|
reservation,
|
|
237
|
-
assignmentDeadlineAt,
|
|
236
|
+
...(assignmentDeadlineAt === undefined ? {} : { assignmentDeadlineAt }),
|
|
238
237
|
...(ledger !== undefined ? { ledger } : {}),
|
|
239
238
|
};
|
|
240
239
|
const handle = await input.dispatch.dispatch(request);
|
|
@@ -3,6 +3,7 @@ import type { AgentSpec } from "../domains/agents/spec.js";
|
|
|
3
3
|
import type { DispatchContract, DispatchRequest } from "../domains/dispatch/contract.js";
|
|
4
4
|
import type { AgentRoleFactsResolver } from "../domains/dispatch/execution-role.js";
|
|
5
5
|
import type { AutonomyLevel } from "../domains/safety/autonomy.js";
|
|
6
|
+
import type { DecisionLedgerEntry } from "../domains/session/entries.js";
|
|
6
7
|
import type {
|
|
7
8
|
CandidateWorktree,
|
|
8
9
|
CompeteGroupOwnership,
|
|
@@ -108,4 +109,9 @@ export interface DispatchToolDeps {
|
|
|
108
109
|
getWorkerRosters?: () => Readonly<Record<string, { members: ReadonlyArray<DispatchCouncilMember> }>>;
|
|
109
110
|
/** Which optional schema blocks this session advertises; absent means every block. */
|
|
110
111
|
getSchemaComposition?: () => DispatchSchemaComposition;
|
|
112
|
+
/**
|
|
113
|
+
* Live decision board snapshot. Every request the tool builds carries the
|
|
114
|
+
* active decisions' refs, sealed here and never from model arguments.
|
|
115
|
+
*/
|
|
116
|
+
getDecisionBoard?: () => ReadonlyArray<DecisionLedgerEntry>;
|
|
111
117
|
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Type } from "typebox";
|
|
2
|
+
import { assertSafeId } from "../core/safe-id.js";
|
|
3
|
+
import { ToolNames } from "../core/tool-names.js";
|
|
4
|
+
import { clioDataDir, clioStateDir } from "../core/xdg.js";
|
|
5
|
+
import { StringEnum } from "../engine/ai.js";
|
|
6
|
+
import type { ToolResult, ToolSpec } from "./registry.js";
|
|
7
|
+
import { truncateUtf8 } from "./truncate-utf8.js";
|
|
8
|
+
|
|
9
|
+
export const EVIDENCE_TOOL_MAX_BYTES = 16_384;
|
|
10
|
+
|
|
11
|
+
/** Keep truncated results valid JSON and never hide an unbounded copy in details. */
|
|
12
|
+
function boundedResult(value: unknown): ToolResult {
|
|
13
|
+
const serialized = JSON.stringify(value, null, 2);
|
|
14
|
+
if (Buffer.byteLength(serialized, "utf8") <= EVIDENCE_TOOL_MAX_BYTES) {
|
|
15
|
+
return { kind: "ok", output: serialized, details: { truncated: false } };
|
|
16
|
+
}
|
|
17
|
+
const hint = "Inspect one run to narrow the output; this preview is incomplete JSON text.";
|
|
18
|
+
let preview = truncateUtf8(serialized, EVIDENCE_TOOL_MAX_BYTES, "");
|
|
19
|
+
let output = JSON.stringify({ truncated: true, hint, preview });
|
|
20
|
+
while (Buffer.byteLength(output, "utf8") > EVIDENCE_TOOL_MAX_BYTES) {
|
|
21
|
+
const excess = Buffer.byteLength(output, "utf8") - EVIDENCE_TOOL_MAX_BYTES;
|
|
22
|
+
preview = truncateUtf8(preview, Math.max(0, Buffer.byteLength(preview, "utf8") - excess), "");
|
|
23
|
+
output = JSON.stringify({ truncated: true, hint, preview });
|
|
24
|
+
}
|
|
25
|
+
return { kind: "ok", output, details: { truncated: true } };
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const evidenceTool: ToolSpec = {
|
|
29
|
+
name: ToolNames.Evidence,
|
|
30
|
+
description:
|
|
31
|
+
"Read canonical evidence as JSON. List recent bundles, inspect a bundle's overview, trust axes and tier, gate decisions, and findings, or build/read evidence for a run.",
|
|
32
|
+
parameters: Type.Object({
|
|
33
|
+
mode: StringEnum(["list", "inspect", "run"]),
|
|
34
|
+
id: Type.Optional(Type.String({ description: "Evidence bundle id for inspect." })),
|
|
35
|
+
runId: Type.Optional(Type.String({ description: "Run id for run." })),
|
|
36
|
+
}),
|
|
37
|
+
baseActionClass: "read",
|
|
38
|
+
// Run mode may materialize a derived bundle in Clio's data directory.
|
|
39
|
+
executionMode: "sequential",
|
|
40
|
+
async run(args): Promise<ToolResult> {
|
|
41
|
+
const mode = args.mode;
|
|
42
|
+
if (mode !== "list" && mode !== "inspect" && mode !== "run") {
|
|
43
|
+
return { kind: "error", message: "evidence: mode must be list, inspect, or run" };
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const dataDir = clioDataDir();
|
|
47
|
+
if (mode === "list") {
|
|
48
|
+
const { evidenceInventorySnapshot } = await import("../domains/evidence/inventory.js");
|
|
49
|
+
return boundedResult(await evidenceInventorySnapshot(Date.now, dataDir));
|
|
50
|
+
}
|
|
51
|
+
const id = mode === "inspect" ? args.id : args.runId;
|
|
52
|
+
if (typeof id !== "string" || id.length === 0) {
|
|
53
|
+
return { kind: "error", message: `evidence: ${mode} requires ${mode === "inspect" ? "id" : "runId"}` };
|
|
54
|
+
}
|
|
55
|
+
assertSafeId(id, mode === "inspect" ? "evidence" : "run");
|
|
56
|
+
const { buildEvidence, EvidenceNotFoundError, inspectEvidence, loadEvidenceGateDecisions } = await import(
|
|
57
|
+
"../domains/evidence/index.js"
|
|
58
|
+
);
|
|
59
|
+
const { evidenceDetailSnapshot } = await import("../domains/evidence/detail.js");
|
|
60
|
+
let evidenceId = mode === "run" ? `run-${id}` : id;
|
|
61
|
+
let inspected: Awaited<ReturnType<typeof inspectEvidence>>;
|
|
62
|
+
try {
|
|
63
|
+
inspected = await inspectEvidence(dataDir, evidenceId);
|
|
64
|
+
} catch (error) {
|
|
65
|
+
if (mode !== "run" || !(error instanceof EvidenceNotFoundError)) throw error;
|
|
66
|
+
try {
|
|
67
|
+
evidenceId = (await buildEvidence({ dataDir, stateDir: clioStateDir(), runId: id })).evidenceId;
|
|
68
|
+
} catch (buildError) {
|
|
69
|
+
if (
|
|
70
|
+
buildError instanceof Error &&
|
|
71
|
+
(buildError.message === "run ledger not found" || buildError.message === `run not found: ${id}`)
|
|
72
|
+
)
|
|
73
|
+
throw new EvidenceNotFoundError(evidenceId);
|
|
74
|
+
throw buildError;
|
|
75
|
+
}
|
|
76
|
+
inspected = await inspectEvidence(dataDir, evidenceId);
|
|
77
|
+
}
|
|
78
|
+
return boundedResult({
|
|
79
|
+
...inspected,
|
|
80
|
+
...(await evidenceDetailSnapshot(evidenceId, Date.now, dataDir)),
|
|
81
|
+
gateDecisions: await loadEvidenceGateDecisions(dataDir, evidenceId),
|
|
82
|
+
});
|
|
83
|
+
} catch (error) {
|
|
84
|
+
const absent = error instanceof Error && error.name === "EvidenceNotFoundError";
|
|
85
|
+
return {
|
|
86
|
+
kind: "error",
|
|
87
|
+
message: truncateUtf8(
|
|
88
|
+
`evidence: ${error instanceof Error ? error.message : String(error)}`,
|
|
89
|
+
EVIDENCE_TOOL_MAX_BYTES - 3,
|
|
90
|
+
"...",
|
|
91
|
+
),
|
|
92
|
+
details: { code: absent ? "artifact_absent" : "evidence_error", artifactAbsent: absent },
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
};
|
package/src/tools/find.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { resolveFdBinary } from "./executables.js";
|
|
|
8
8
|
import { compileGlobRegex, fallbackIgnoredDirs, fdIgnoreArgs, normalizeGlobInput } from "./ignore-policy.js";
|
|
9
9
|
import {
|
|
10
10
|
commitObservationReservation,
|
|
11
|
+
createObservationPathFilter,
|
|
11
12
|
finalizeObservation,
|
|
12
13
|
OBSERVE_SELF_CAPS,
|
|
13
14
|
type ObservationReservation,
|
|
@@ -148,6 +149,7 @@ function orderByMtime(paths: string[], searchPath: string, limit: number, candid
|
|
|
148
149
|
}
|
|
149
150
|
|
|
150
151
|
function renderFindResult(input: {
|
|
152
|
+
withheldPaths: number;
|
|
151
153
|
ordered: OrderedPaths;
|
|
152
154
|
collected: number;
|
|
153
155
|
collectLimit: number;
|
|
@@ -160,11 +162,13 @@ function renderFindResult(input: {
|
|
|
160
162
|
if (ordered.paths.length === 0) {
|
|
161
163
|
return finalizeObservation({
|
|
162
164
|
tool: ToolNames.Find,
|
|
165
|
+
withheldPaths: input.withheldPaths,
|
|
163
166
|
unit: "paths",
|
|
164
|
-
output: "No files found matching pattern",
|
|
167
|
+
output: "No visible files found matching pattern",
|
|
165
168
|
shownCount: 0,
|
|
166
|
-
totalCount: 0,
|
|
167
|
-
truncated:
|
|
169
|
+
totalCount: collected >= collectLimit ? null : 0,
|
|
170
|
+
truncated: collected >= collectLimit,
|
|
171
|
+
...(collected >= collectLimit ? { next: `limit=${limit * 2}` } : {}),
|
|
168
172
|
reservation,
|
|
169
173
|
...(options ? { options } : {}),
|
|
170
174
|
});
|
|
@@ -191,6 +195,7 @@ function renderFindResult(input: {
|
|
|
191
195
|
}
|
|
192
196
|
return finalizeObservation({
|
|
193
197
|
tool: ToolNames.Find,
|
|
198
|
+
withheldPaths: input.withheldPaths,
|
|
194
199
|
unit: "paths",
|
|
195
200
|
output: truncation.content,
|
|
196
201
|
// Offload only when the byte cap cut collected paths; a bare result
|
|
@@ -269,13 +274,17 @@ export const findTool: ToolSpec = {
|
|
|
269
274
|
}
|
|
270
275
|
}
|
|
271
276
|
|
|
277
|
+
const collectedCount = collectedPaths.length;
|
|
278
|
+
const pathFilter = createObservationPathFilter(process.cwd(), options?.allowsObservationPath);
|
|
279
|
+
collectedPaths = collectedPaths.filter((entry) => pathFilter.allows(join(searchPath, entry)));
|
|
272
280
|
const ordered: OrderedPaths =
|
|
273
281
|
order === "mtime"
|
|
274
282
|
? orderByMtime(collectedPaths, searchPath, limit, collectLimit)
|
|
275
283
|
: { paths: collectedPaths.slice(0, limit), candidateCapHit: false, candidateCap: null };
|
|
276
284
|
return renderFindResult({
|
|
285
|
+
withheldPaths: pathFilter.withheldPaths,
|
|
277
286
|
ordered,
|
|
278
|
-
collected:
|
|
287
|
+
collected: collectedCount,
|
|
279
288
|
collectLimit,
|
|
280
289
|
limit,
|
|
281
290
|
order,
|
package/src/tools/grep.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { resolveRgBinary } from "./executables.js";
|
|
|
7
7
|
import { compileGlobRegex, fallbackIgnoredDirs, normalizeGlobInput, rgIgnoreArgs } from "./ignore-policy.js";
|
|
8
8
|
import {
|
|
9
9
|
commitObservationReservation,
|
|
10
|
+
createObservationPathFilter,
|
|
10
11
|
finalizeObservation,
|
|
11
12
|
OBSERVE_SELF_CAPS,
|
|
12
13
|
type ObservationReservation,
|
|
@@ -67,6 +68,7 @@ interface RenderedLine {
|
|
|
67
68
|
}
|
|
68
69
|
|
|
69
70
|
interface GrepRenderInput {
|
|
71
|
+
withheldPaths: number;
|
|
70
72
|
mode: GrepMode;
|
|
71
73
|
lines: RenderedLine[];
|
|
72
74
|
matchCount: number;
|
|
@@ -90,6 +92,7 @@ function renderGrepResult(input: GrepRenderInput): ToolResult {
|
|
|
90
92
|
if (lines.length === 0) {
|
|
91
93
|
return finalizeObservation({
|
|
92
94
|
tool: ToolNames.Grep,
|
|
95
|
+
withheldPaths: input.withheldPaths,
|
|
93
96
|
unit: MODE_UNITS[mode],
|
|
94
97
|
output: NO_MATCH_OUTPUT,
|
|
95
98
|
shownCount: 0,
|
|
@@ -120,6 +123,7 @@ function renderGrepResult(input: GrepRenderInput): ToolResult {
|
|
|
120
123
|
}
|
|
121
124
|
return finalizeObservation({
|
|
122
125
|
tool: ToolNames.Grep,
|
|
126
|
+
withheldPaths: input.withheldPaths,
|
|
123
127
|
unit: MODE_UNITS[mode],
|
|
124
128
|
output,
|
|
125
129
|
// Offload only when the byte cap cut collected content; a bare match
|
|
@@ -139,6 +143,7 @@ function sanitizeMatchText(text: string): string {
|
|
|
139
143
|
}
|
|
140
144
|
|
|
141
145
|
interface RgSearchInput {
|
|
146
|
+
pathFilter: ReturnType<typeof createObservationPathFilter>;
|
|
142
147
|
rgPath: string;
|
|
143
148
|
mode: GrepMode;
|
|
144
149
|
pattern: string;
|
|
@@ -195,6 +200,7 @@ async function runRipgrep(input: RgSearchInput): Promise<ToolResult> {
|
|
|
195
200
|
const lineNumber = data?.line_number;
|
|
196
201
|
const lineText = (data?.lines as { text?: unknown } | undefined)?.text;
|
|
197
202
|
if (typeof filePath !== "string" || typeof lineNumber !== "number" || typeof lineText !== "string") return;
|
|
203
|
+
if (!input.pathFilter.allows(filePath)) return;
|
|
198
204
|
const { text, wasTruncated } = truncateLine(sanitizeMatchText(lineText));
|
|
199
205
|
if (wasTruncated) linesTruncated = true;
|
|
200
206
|
const isMatch = type === "match";
|
|
@@ -214,6 +220,8 @@ async function runRipgrep(input: RgSearchInput): Promise<ToolResult> {
|
|
|
214
220
|
const onListLine = (line: string, stop: () => void): void => {
|
|
215
221
|
const trimmed = line.replace(/\r$/, "");
|
|
216
222
|
if (trimmed.length === 0) return;
|
|
223
|
+
const filePath = input.mode === "count" ? trimmed.slice(0, trimmed.lastIndexOf(":")) : trimmed;
|
|
224
|
+
if (!input.pathFilter.allows(filePath)) return;
|
|
217
225
|
let text: string;
|
|
218
226
|
if (input.mode === "count") {
|
|
219
227
|
const sep = trimmed.lastIndexOf(":");
|
|
@@ -245,6 +253,7 @@ async function runRipgrep(input: RgSearchInput): Promise<ToolResult> {
|
|
|
245
253
|
return { kind: "error", message: `grep: ${result.stderr.trim() || `ripgrep exited with code ${result.exitCode}`}` };
|
|
246
254
|
}
|
|
247
255
|
return renderGrepResult({
|
|
256
|
+
withheldPaths: input.pathFilter.withheldPaths,
|
|
248
257
|
mode: input.mode,
|
|
249
258
|
lines: rendered,
|
|
250
259
|
matchCount,
|
|
@@ -279,6 +288,7 @@ function looksBinary(buffer: Buffer): boolean {
|
|
|
279
288
|
}
|
|
280
289
|
|
|
281
290
|
interface FallbackSearchInput {
|
|
291
|
+
pathFilter: ReturnType<typeof createObservationPathFilter>;
|
|
282
292
|
mode: GrepMode;
|
|
283
293
|
pattern: string;
|
|
284
294
|
searchPath: string;
|
|
@@ -328,7 +338,7 @@ function fallbackGrep(input: FallbackSearchInput): ToolResult {
|
|
|
328
338
|
};
|
|
329
339
|
|
|
330
340
|
const searchFile = (filePath: string): void => {
|
|
331
|
-
if (limitHit) return;
|
|
341
|
+
if (limitHit || !input.pathFilter.allows(filePath)) return;
|
|
332
342
|
let buffer: Buffer;
|
|
333
343
|
try {
|
|
334
344
|
const stat = statSync(filePath);
|
|
@@ -403,6 +413,7 @@ function fallbackGrep(input: FallbackSearchInput): ToolResult {
|
|
|
403
413
|
else searchFile(input.searchPath);
|
|
404
414
|
if (signal?.aborted) return { kind: "error", message: "grep: operation aborted" };
|
|
405
415
|
return renderGrepResult({
|
|
416
|
+
withheldPaths: input.pathFilter.withheldPaths,
|
|
406
417
|
mode: input.mode,
|
|
407
418
|
lines: rendered,
|
|
408
419
|
matchCount,
|
|
@@ -463,6 +474,7 @@ export const grepTool: ToolSpec = {
|
|
|
463
474
|
});
|
|
464
475
|
}
|
|
465
476
|
const shared = {
|
|
477
|
+
pathFilter: createObservationPathFilter(process.cwd(), options?.allowsObservationPath),
|
|
466
478
|
mode,
|
|
467
479
|
pattern,
|
|
468
480
|
searchPath,
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Type } from "typebox";
|
|
2
|
+
import { ToolNames } from "../core/tool-names.js";
|
|
3
|
+
import { StringEnum } from "../engine/ai.js";
|
|
4
|
+
import type { ToolResult, ToolSpec } from "./registry.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The typed limitation signal the finish contract reads. Calling the tool
|
|
8
|
+
* records a `limitation` tool_call and tool_result pair in the session ledger,
|
|
9
|
+
* and that successful receipt is what `assessFinishContract` accepts in place
|
|
10
|
+
* of validation evidence. The tool is pure: it touches no filesystem and runs
|
|
11
|
+
* no shell, so the receipt itself is its whole effect.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
export const LIMITATION_REASONS = ["no-runner", "blocked", "out-of-scope", "environment", "other"] as const;
|
|
15
|
+
|
|
16
|
+
export type LimitationReason = (typeof LIMITATION_REASONS)[number];
|
|
17
|
+
|
|
18
|
+
export interface LimitationRecord {
|
|
19
|
+
scope: string;
|
|
20
|
+
reason: LimitationReason;
|
|
21
|
+
paths: string[];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function isLimitationReason(value: unknown): value is LimitationReason {
|
|
25
|
+
return typeof value === "string" && (LIMITATION_REASONS as ReadonlyArray<string>).includes(value);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function trimString(value: unknown): string | null {
|
|
29
|
+
if (typeof value !== "string") return null;
|
|
30
|
+
const trimmed = value.trim();
|
|
31
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function normalizePaths(value: unknown): string[] | null {
|
|
35
|
+
if (value === undefined || value === null) return [];
|
|
36
|
+
if (!Array.isArray(value)) return null;
|
|
37
|
+
const paths: string[] = [];
|
|
38
|
+
for (const item of value) {
|
|
39
|
+
const path = trimString(item);
|
|
40
|
+
if (path === null) return null;
|
|
41
|
+
if (!paths.includes(path)) paths.push(path);
|
|
42
|
+
}
|
|
43
|
+
return paths;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export const limitationTool: ToolSpec = {
|
|
47
|
+
name: ToolNames.Limitation,
|
|
48
|
+
description:
|
|
49
|
+
"Record what this turn could not verify and why. Call it once, before your final reply, when you changed files but could not run validation; the receipt stands in for validation evidence at the finish gate.",
|
|
50
|
+
parameters: Type.Object({
|
|
51
|
+
scope: Type.String({ description: "What could not be verified, in one sentence." }),
|
|
52
|
+
reason: StringEnum(LIMITATION_REASONS, {
|
|
53
|
+
description:
|
|
54
|
+
"no-runner: no test or build runner is available; blocked: a safety gate or denial stopped the check; out-of-scope: verification was excluded by the task; environment: the environment cannot run the check; other.",
|
|
55
|
+
}),
|
|
56
|
+
paths: Type.Optional(Type.Array(Type.String(), { description: "Repository-relative paths left unverified." })),
|
|
57
|
+
}),
|
|
58
|
+
baseActionClass: "read",
|
|
59
|
+
executionMode: "parallel",
|
|
60
|
+
async run(args): Promise<ToolResult> {
|
|
61
|
+
const scope = trimString(args.scope);
|
|
62
|
+
if (scope === null) return { kind: "error", message: "limitation: scope is required" };
|
|
63
|
+
if (!isLimitationReason(args.reason)) {
|
|
64
|
+
return { kind: "error", message: `limitation: reason must be one of ${LIMITATION_REASONS.join(", ")}` };
|
|
65
|
+
}
|
|
66
|
+
const paths = normalizePaths(args.paths);
|
|
67
|
+
if (paths === null) return { kind: "error", message: "limitation: paths must be an array of non-empty strings" };
|
|
68
|
+
const limitation: LimitationRecord = { scope, reason: args.reason, paths };
|
|
69
|
+
const pathSuffix = paths.length > 0 ? ` paths=${paths.join(",")}` : "";
|
|
70
|
+
return {
|
|
71
|
+
kind: "ok",
|
|
72
|
+
output: `limitation recorded: ${scope} (reason=${limitation.reason}${pathSuffix})\n`,
|
|
73
|
+
details: { limitation },
|
|
74
|
+
};
|
|
75
|
+
},
|
|
76
|
+
};
|
package/src/tools/ls.ts
CHANGED
|
@@ -3,6 +3,7 @@ import path from "node:path";
|
|
|
3
3
|
import { Type } from "typebox";
|
|
4
4
|
import { ToolNames } from "../core/tool-names.js";
|
|
5
5
|
import {
|
|
6
|
+
createObservationPathFilter,
|
|
6
7
|
finalizeObservation,
|
|
7
8
|
OBSERVE_SELF_CAPS,
|
|
8
9
|
observationBudgetExhausted,
|
|
@@ -53,7 +54,10 @@ export const lsTool: ToolSpec = {
|
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
try {
|
|
56
|
-
const
|
|
57
|
+
const pathFilter = createObservationPathFilter(process.cwd(), options?.allowsObservationPath);
|
|
58
|
+
const entries = readdirSync(root)
|
|
59
|
+
.filter((entry) => pathFilter.allows(path.join(root, entry)))
|
|
60
|
+
.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));
|
|
57
61
|
const outputEntries: string[] = [];
|
|
58
62
|
let entryLimitReached = false;
|
|
59
63
|
for (const entry of entries) {
|
|
@@ -72,6 +76,7 @@ export const lsTool: ToolSpec = {
|
|
|
72
76
|
if (outputEntries.length === 0) {
|
|
73
77
|
return finalizeObservation({
|
|
74
78
|
tool: ToolNames.Ls,
|
|
79
|
+
withheldPaths: pathFilter.withheldPaths,
|
|
75
80
|
unit: "entries",
|
|
76
81
|
output: "(empty directory)",
|
|
77
82
|
shownCount: 0,
|
|
@@ -90,6 +95,7 @@ export const lsTool: ToolSpec = {
|
|
|
90
95
|
const truncated = entryLimitReached || truncation.truncated;
|
|
91
96
|
return finalizeObservation({
|
|
92
97
|
tool: ToolNames.Ls,
|
|
98
|
+
withheldPaths: pathFilter.withheldPaths,
|
|
93
99
|
unit: "entries",
|
|
94
100
|
output: truncation.content,
|
|
95
101
|
// Offload only when the byte cap cut collected entries; a bare
|