@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
|
@@ -13,13 +13,14 @@
|
|
|
13
13
|
* below the payload is ever mutated, so a deep clone of the body about to be
|
|
14
14
|
* replaced would only cost the pricing loop the body's size.
|
|
15
15
|
*
|
|
16
|
-
* Callers may pass raw ledger entries
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
16
|
+
* Callers may pass raw ledger entries. Eviction bodies follow the active-path
|
|
17
|
+
* view; usage anchors preceding an eviction or selected compaction checkpoint
|
|
18
|
+
* are invalidated in projection. Live callers pass their selected leaf so an
|
|
19
|
+
* abandoned branch checkpoint cannot invalidate the current prompt's usage.
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
22
|
import type { MessageEntry, SessionEntry } from "../../session/entries.js";
|
|
23
|
+
import { filterEntriesToActivePath } from "../../session/tree/active-path.js";
|
|
23
24
|
import type { EvictedState, WorkingSetView } from "./contract.js";
|
|
24
25
|
import { hasThinking, isRecord, toolResultPayload, withoutThinkingBlocks } from "./payload.js";
|
|
25
26
|
|
|
@@ -110,9 +111,19 @@ function eventIndex(entries: ReadonlyArray<SessionEntry>, lastEvictionTurnId: st
|
|
|
110
111
|
return index < 0 ? entries.length : index;
|
|
111
112
|
}
|
|
112
113
|
|
|
113
|
-
export function projectWorkingSet(
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
export function projectWorkingSet(
|
|
115
|
+
entries: ReadonlyArray<SessionEntry>,
|
|
116
|
+
view: WorkingSetView,
|
|
117
|
+
activeLeafTurnId?: string,
|
|
118
|
+
): SessionEntry[] {
|
|
119
|
+
// A checkpoint also replaces the prompt described by retained assistant
|
|
120
|
+
// usage. Invalidate that anchor only in projection; ledger cost stays exact.
|
|
121
|
+
const checkpoint = filterEntriesToActivePath(entries, activeLeafTurnId)
|
|
122
|
+
.reverse()
|
|
123
|
+
.find((entry) => entry.kind === "compactionSummary");
|
|
124
|
+
const compactionIndex = checkpoint ? entries.indexOf(checkpoint) : -1;
|
|
125
|
+
if (view.evicted.size === 0 && view.evictionEvents === 0 && compactionIndex < 0) return [...entries];
|
|
126
|
+
const cutoff = Math.max(compactionIndex, view.evictionEvents > 0 ? eventIndex(entries, view.lastEvictionTurnId) : -1);
|
|
116
127
|
const out: SessionEntry[] = [];
|
|
117
128
|
for (let index = 0; index < entries.length; index += 1) {
|
|
118
129
|
const entry = entries[index];
|
|
@@ -1,19 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* A `contextEviction` entry removes a tool-result body from the projection
|
|
5
|
-
* and leaves a marker naming the ref. Recall is the reverse move: given a ref
|
|
6
|
-
* on the active path whose key the fold still lists as evicted, hand back the
|
|
7
|
-
* original body byte-exact and describe the `contextRecall` entry the caller
|
|
8
|
-
* appends. The ref stays evicted in the fold: the body rides the recall tool
|
|
9
|
-
* result at the tail of the working set, so the marker and the prefix cache
|
|
10
|
-
* are untouched and a repeat recall is the churn signal. Pure over entries:
|
|
11
|
-
* nothing here reads the session, writes the ledger, or calls a model.
|
|
12
|
-
*
|
|
13
|
-
* The body is read through the same `payload.ts` readers the projection and
|
|
14
|
-
* the marker use, so what recall returns is exactly what the model saw before
|
|
15
|
-
* eviction. No truncation happens here; the observation envelope applies the
|
|
16
|
-
* per-turn caps.
|
|
1
|
+
/** Exact persisted tool-result recall and bounded discovery on the active path.
|
|
2
|
+
* Bodies return at the tail through the caller's observation envelope; the raw
|
|
3
|
+
* ledger, summary cut, and existing eviction markers remain unchanged.
|
|
17
4
|
*/
|
|
18
5
|
|
|
19
6
|
import { ceilChars } from "../../session/context-accounting.js";
|
|
@@ -29,7 +16,14 @@ import {
|
|
|
29
16
|
} from "./contract.js";
|
|
30
17
|
import { parseRefKey, refKey } from "./fold.js";
|
|
31
18
|
import { callPathsByToolCallId } from "./path-index.js";
|
|
32
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
hasLegacyCompactionMarker,
|
|
21
|
+
offloadPathOf,
|
|
22
|
+
primaryPathOf,
|
|
23
|
+
toolResultPayload,
|
|
24
|
+
toolResultText,
|
|
25
|
+
} from "./payload.js";
|
|
26
|
+
import { compactionCut } from "./visible.js";
|
|
33
27
|
|
|
34
28
|
export type RecallOutcome = { ok: true; result: RecallResult } | { ok: false; error: RecallError };
|
|
35
29
|
|
|
@@ -47,7 +41,7 @@ export function resolveRecall(
|
|
|
47
41
|
ref: string,
|
|
48
42
|
activeLeafTurnId?: string,
|
|
49
43
|
): RecallOutcome {
|
|
50
|
-
const parsed = parseRefKey(ref);
|
|
44
|
+
const parsed = parseRefKey(ref, view);
|
|
51
45
|
if (parsed === null) return { ok: false, error: { kind: "invalid_ref", ref } };
|
|
52
46
|
const key = refKey(parsed);
|
|
53
47
|
const active = filterEntriesToActivePath(entries, activeLeafTurnId);
|
|
@@ -55,11 +49,15 @@ export function resolveRecall(
|
|
|
55
49
|
if (entry === undefined) {
|
|
56
50
|
return { ok: false, error: { kind: "not_on_active_path", ref: key } };
|
|
57
51
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (isThinkingEntry(entry) || !view.evicted.has(key) || !isToolResultEntry(entry)) {
|
|
61
|
-
return { ok: false, error: { kind: "not_evicted", ref: key } };
|
|
52
|
+
if (!isToolResultEntry(entry) || hasLegacyCompactionMarker(entry.payload)) {
|
|
53
|
+
return { ok: false, error: { kind: "unavailable", ref: key } };
|
|
62
54
|
}
|
|
55
|
+
const state = view.evicted.has(key)
|
|
56
|
+
? "evicted"
|
|
57
|
+
: compactionCut(active).visible.some((candidate) => candidate.turnId === key)
|
|
58
|
+
? "visible"
|
|
59
|
+
: "summarized";
|
|
60
|
+
if (state === "visible") return { ok: false, error: { kind: "visible", ref: key } };
|
|
63
61
|
const payload = toolResultPayload(entry.payload);
|
|
64
62
|
const body = toolResultText(payload.result);
|
|
65
63
|
const offloadPath = offloadPathOf(payload);
|
|
@@ -67,6 +65,7 @@ export function resolveRecall(
|
|
|
67
65
|
ok: true,
|
|
68
66
|
result: {
|
|
69
67
|
ref: parsed,
|
|
68
|
+
state,
|
|
70
69
|
entry,
|
|
71
70
|
body,
|
|
72
71
|
tokens: ceilChars(body.length),
|
|
@@ -103,50 +102,73 @@ export function buildRecallFields(
|
|
|
103
102
|
};
|
|
104
103
|
}
|
|
105
104
|
|
|
106
|
-
|
|
107
|
-
|
|
105
|
+
export interface RecallDiscoveryOptions {
|
|
106
|
+
/** Case-insensitive terms matched against ref, tool name, and path. */
|
|
107
|
+
query?: string;
|
|
108
|
+
/** Default 8, maximum 12. */
|
|
109
|
+
limit?: number;
|
|
110
|
+
/** Zero-based position in matching active-path ledger order. */
|
|
111
|
+
offset?: number;
|
|
112
|
+
activeLeafTurnId?: string;
|
|
113
|
+
}
|
|
108
114
|
|
|
109
115
|
export interface RecallableRefListing {
|
|
110
|
-
/**
|
|
116
|
+
/** Bounded metadata rows; never result bodies or assistant thinking. */
|
|
111
117
|
refs: string[];
|
|
112
|
-
/** Recallable refs omitted after the bounded prefix. */
|
|
113
118
|
remaining: number;
|
|
119
|
+
total: number;
|
|
120
|
+
offset: number;
|
|
121
|
+
nextOffset?: number;
|
|
114
122
|
}
|
|
115
123
|
|
|
116
|
-
/**
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
const
|
|
124
|
+
/** Stable ledger-order pages for the same active path and query. */
|
|
125
|
+
export function recallableRefListing(
|
|
126
|
+
entries: ReadonlyArray<SessionEntry>,
|
|
127
|
+
view: WorkingSetView,
|
|
128
|
+
options: RecallDiscoveryOptions = {},
|
|
129
|
+
): RecallableRefListing {
|
|
130
|
+
const active = filterEntriesToActivePath(entries, options.activeLeafTurnId);
|
|
131
|
+
const visible = new Set(compactionCut(active).visible.map((entry) => entry.turnId));
|
|
132
|
+
const callPaths = callPathsByToolCallId(active);
|
|
133
|
+
const terms = (options.query ?? "").toLowerCase().split(/\s+/).filter(Boolean);
|
|
134
|
+
const limit =
|
|
135
|
+
typeof options.limit === "number" && Number.isFinite(options.limit)
|
|
136
|
+
? Math.max(1, Math.min(12, Math.floor(options.limit)))
|
|
137
|
+
: 8;
|
|
138
|
+
const offset =
|
|
139
|
+
typeof options.offset === "number" && Number.isSafeInteger(options.offset) ? Math.max(0, options.offset) : 0;
|
|
127
140
|
const refs: string[] = [];
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
if (entry
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
// what a ref was. Tool and path are what it needs to pick one.
|
|
141
|
+
let total = 0;
|
|
142
|
+
for (const entry of active) {
|
|
143
|
+
if (!isToolResultEntry(entry) || hasLegacyCompactionMarker(entry.payload)) continue;
|
|
144
|
+
const state = view.evicted.has(entry.turnId) ? "evicted" : visible.has(entry.turnId) ? "visible" : "summarized";
|
|
145
|
+
if (state === "visible") continue;
|
|
134
146
|
const payload = toolResultPayload(entry.payload);
|
|
135
147
|
const toolCallId = typeof payload.obj.toolCallId === "string" ? payload.obj.toolCallId : undefined;
|
|
136
148
|
const path = primaryPathOf(payload) ?? (toolCallId === undefined ? undefined : callPaths.get(toolCallId));
|
|
137
|
-
|
|
149
|
+
const alias = view.evicted.get(entry.turnId)?.alias;
|
|
150
|
+
const metadata = `${alias ?? ""} ${entry.turnId} ${payload.toolName} ${path ?? ""}`.toLowerCase();
|
|
151
|
+
if (!terms.every((term) => metadata.includes(term))) continue;
|
|
152
|
+
if (total >= offset && refs.length < limit) {
|
|
153
|
+
// Keep each row bounded even for unusual tool/path metadata.
|
|
154
|
+
const label = `${payload.toolName}${path === undefined ? "" : ` ${path}`}`.replace(/\s+/g, " ").slice(0, 240);
|
|
155
|
+
refs.push(`${alias ?? entry.turnId} (${label}) [${state}; ${entry.timestamp}]`);
|
|
156
|
+
}
|
|
157
|
+
total += 1;
|
|
138
158
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
remaining: Math.max(0, refs.length - MAX_LISTED_REFS),
|
|
142
|
-
};
|
|
159
|
+
const remaining = Math.max(0, total - offset - refs.length);
|
|
160
|
+
return { refs, remaining, total, offset, ...(remaining > 0 ? { nextOffset: offset + refs.length } : {}) };
|
|
143
161
|
}
|
|
144
162
|
|
|
145
|
-
function recallableRefMessage(
|
|
146
|
-
|
|
163
|
+
function recallableRefMessage(
|
|
164
|
+
entries: ReadonlyArray<SessionEntry>,
|
|
165
|
+
view: WorkingSetView,
|
|
166
|
+
activeLeafTurnId?: string,
|
|
167
|
+
): string {
|
|
168
|
+
const listing = recallableRefListing(entries, view, activeLeafTurnId === undefined ? {} : { activeLeafTurnId });
|
|
147
169
|
if (listing.refs.length === 0) return "No recallable refs on the active path.";
|
|
148
170
|
const more = listing.remaining > 0 ? `, and ${listing.remaining} more` : "";
|
|
149
|
-
return `Recallable refs on the active path: ${listing.refs.join(", ")}${more}.`;
|
|
171
|
+
return `Recallable refs on the active path: ${listing.refs.join(", ")}${more}. Discover all matches with context(scope="recall", limit=8, offset=0), omitting ref; query filters path/tool/ref terms. Follow nextOffset.`;
|
|
150
172
|
}
|
|
151
173
|
|
|
152
174
|
/**
|
|
@@ -159,19 +181,23 @@ export function recallErrorMessage(
|
|
|
159
181
|
error: RecallError,
|
|
160
182
|
entries: ReadonlyArray<SessionEntry> = [],
|
|
161
183
|
view: WorkingSetView = EMPTY_WORKING_SET_VIEW,
|
|
184
|
+
activeLeafTurnId?: string,
|
|
162
185
|
): string {
|
|
163
|
-
const
|
|
186
|
+
const active = filterEntriesToActivePath(entries, activeLeafTurnId);
|
|
187
|
+
const listing = ` ${recallableRefMessage(active, view, activeLeafTurnId)}`;
|
|
164
188
|
switch (error.kind) {
|
|
165
189
|
case "invalid_ref":
|
|
166
|
-
return `recall ref must be a single turnId without whitespace; got '${error.ref}'.`;
|
|
190
|
+
return `recall ref must be a single recall alias or turnId without whitespace; got '${error.ref}'.`;
|
|
167
191
|
case "not_on_active_path":
|
|
168
192
|
return `ref ${error.ref} is not on the active path of this session (unknown or on an abandoned branch).${listing}`;
|
|
169
|
-
case "
|
|
170
|
-
|
|
193
|
+
case "visible":
|
|
194
|
+
return `ref ${error.ref} is visible; its content is already in context.${listing}`;
|
|
195
|
+
case "unavailable": {
|
|
196
|
+
const entry = active.find((candidate) => candidate.turnId === error.ref);
|
|
171
197
|
if (entry !== undefined && isThinkingEntry(entry)) {
|
|
172
198
|
return `ref ${error.ref} is an assistant turn; thinking is not recallable.${listing}`;
|
|
173
199
|
}
|
|
174
|
-
return `ref ${error.ref}
|
|
200
|
+
return `ref ${error.ref} has no recallable original tool result (unsupported entry or legacy destructive compaction).${listing}`;
|
|
175
201
|
}
|
|
176
202
|
}
|
|
177
203
|
}
|
|
@@ -37,8 +37,12 @@ export function routeValidationProjection(
|
|
|
37
37
|
// Presentation-only parentage stamped by the calling tool, on the same
|
|
38
38
|
// terms: a model must not be able to author it.
|
|
39
39
|
parentToolCallId,
|
|
40
|
+
// Sealed from the parent decision board by the dispatch tool; a model
|
|
41
|
+
// must not be able to author which decisions a receipt claims.
|
|
42
|
+
decisionRefs,
|
|
40
43
|
resolvedVerification,
|
|
41
44
|
resultContractOverride,
|
|
45
|
+
resultSummary,
|
|
42
46
|
fleetGateReceipt,
|
|
43
47
|
taskWorktree,
|
|
44
48
|
runIdHint,
|
|
@@ -60,10 +64,12 @@ export function routeValidationProjection(
|
|
|
60
64
|
...(assignmentDeadlineAt !== undefined ? { assignmentDeadlineAt } : {}),
|
|
61
65
|
...(ledger !== undefined ? { ledger } : {}),
|
|
62
66
|
...(parentToolCallId !== undefined ? { parentToolCallId } : {}),
|
|
67
|
+
...(decisionRefs !== undefined ? { decisionRefs } : {}),
|
|
63
68
|
...(resolvedVerification !== undefined
|
|
64
69
|
? { resolvedVerification: resolvedVerification.map((check) => ({ ...check, argv: [...check.argv] })) }
|
|
65
70
|
: {}),
|
|
66
71
|
...(resultContractOverride !== undefined ? { resultContractOverride } : {}),
|
|
72
|
+
...(resultSummary !== undefined ? { resultSummary: { ...resultSummary } } : {}),
|
|
67
73
|
...(fleetGateReceipt !== undefined ? { fleetGateReceipt: { ...fleetGateReceipt } } : {}),
|
|
68
74
|
...(taskWorktree !== undefined ? { taskWorktree } : {}),
|
|
69
75
|
...(runIdHint !== undefined ? { runIdHint } : {}),
|
|
@@ -128,7 +134,7 @@ export function planActiveRoute(
|
|
|
128
134
|
version: 1,
|
|
129
135
|
decision,
|
|
130
136
|
totalCostUpperBoundUsd: perAttemptUpperBoundUsd * input.maxAttempts,
|
|
131
|
-
deadlineMs: input.request.routingIntent?.deadlineMs ??
|
|
137
|
+
deadlineMs: input.request.routingIntent?.deadlineMs ?? null,
|
|
132
138
|
maxAttempts: input.maxAttempts,
|
|
133
139
|
};
|
|
134
140
|
assertApprovedAssignmentRoute(approval);
|
|
@@ -159,8 +165,9 @@ export function consumeActiveRouteApproval<T>(
|
|
|
159
165
|
throw new Error("dispatch: active recovery requires a resolver-authenticated attempt decision");
|
|
160
166
|
}
|
|
161
167
|
const request = applyActiveRouteSelection(input.request, decision);
|
|
162
|
-
if (input.request.lineage === undefined) {
|
|
163
|
-
|
|
168
|
+
if (input.request.lineage === undefined && approval.deadlineMs !== null) {
|
|
169
|
+
const deadline = Date.parse(input.requestedAt) + approval.deadlineMs;
|
|
170
|
+
request.assignmentDeadlineAt = Math.min(request.assignmentDeadlineAt ?? deadline, deadline);
|
|
164
171
|
}
|
|
165
172
|
return { request, observation: input.observe(request, decision) };
|
|
166
173
|
}
|
|
@@ -5,7 +5,8 @@ export interface AdmissionQueueRequest<T> {
|
|
|
5
5
|
assignmentId: string;
|
|
6
6
|
priority: number;
|
|
7
7
|
queuedAt: number;
|
|
8
|
-
|
|
8
|
+
/** Explicit caller deadline; absent means wait until capacity, cancellation, or a fault. */
|
|
9
|
+
deadlineAt?: number;
|
|
9
10
|
planId: string | null;
|
|
10
11
|
planOrder: number | null;
|
|
11
12
|
value: T;
|
|
@@ -47,6 +48,7 @@ export interface AdmissionQueue<T> {
|
|
|
47
48
|
}
|
|
48
49
|
export function createAdmissionQueue<T>(options: {
|
|
49
50
|
maxSize: number;
|
|
51
|
+
/** Legacy planning estimate; never shortens an explicit deadline or stops a healthy wait. */
|
|
50
52
|
finiteCeilingMs: number;
|
|
51
53
|
/** Reserved concurrent peak for a plan, resolved when the plan is seen. */
|
|
52
54
|
reservedPlanPeak?: (planId: string) => number | undefined;
|
|
@@ -67,7 +69,7 @@ export function createAdmissionQueue<T>(options: {
|
|
|
67
69
|
request: AdmissionQueueRequest<T>;
|
|
68
70
|
resolve: (outcome: AdmissionQueueOutcome<T>) => void;
|
|
69
71
|
reject: (error: Error) => void;
|
|
70
|
-
timer: ReturnType<typeof setTimeout
|
|
72
|
+
timer: ReturnType<typeof setTimeout> | undefined;
|
|
71
73
|
}
|
|
72
74
|
>();
|
|
73
75
|
const remove = (requestId: string, state: "canceled" | "timed_out"): boolean => {
|
|
@@ -85,12 +87,22 @@ export function createAdmissionQueue<T>(options: {
|
|
|
85
87
|
return Promise.reject(new Error(`dispatch: admission queue full (${entries.size}/${options.maxSize})`));
|
|
86
88
|
if (entries.has(request.requestId))
|
|
87
89
|
return Promise.reject(new Error(`dispatch: duplicate queued request '${request.requestId}'`));
|
|
88
|
-
const effectiveDeadline =
|
|
89
|
-
if (!Number.isFinite(effectiveDeadline))
|
|
90
|
+
const effectiveDeadline = request.deadlineAt;
|
|
91
|
+
if (effectiveDeadline !== undefined && !Number.isFinite(effectiveDeadline))
|
|
90
92
|
return Promise.reject(new Error("dispatch: queued request requires a finite deadline"));
|
|
91
93
|
return new Promise((resolve, reject) => {
|
|
92
|
-
const bounded = { ...request
|
|
93
|
-
const
|
|
94
|
+
const bounded = { ...request };
|
|
95
|
+
const expire = (): void => {
|
|
96
|
+
const entry = entries.get(request.requestId);
|
|
97
|
+
if (!entry || effectiveDeadline === undefined) return;
|
|
98
|
+
const remaining = effectiveDeadline - now();
|
|
99
|
+
if (remaining <= 0) remove(request.requestId, "timed_out");
|
|
100
|
+
else entry.timer = setTimeout(expire, Math.min(2_147_483_647, remaining));
|
|
101
|
+
};
|
|
102
|
+
const timer =
|
|
103
|
+
effectiveDeadline === undefined
|
|
104
|
+
? undefined
|
|
105
|
+
: setTimeout(expire, Math.min(2_147_483_647, Math.max(0, effectiveDeadline - now())));
|
|
94
106
|
entries.set(request.requestId, { request: bounded, resolve, reject, timer });
|
|
95
107
|
});
|
|
96
108
|
},
|
|
@@ -107,7 +119,7 @@ export function createAdmissionQueue<T>(options: {
|
|
|
107
119
|
},
|
|
108
120
|
admitNext(nowMs = now(), canAdmit = () => true) {
|
|
109
121
|
for (const request of orderAdmissionRequests([...entries.values()].map((entry) => entry.request))) {
|
|
110
|
-
if (request.deadlineAt <= nowMs) {
|
|
122
|
+
if (request.deadlineAt !== undefined && request.deadlineAt <= nowMs) {
|
|
111
123
|
remove(request.requestId, "timed_out");
|
|
112
124
|
continue;
|
|
113
125
|
}
|
|
@@ -46,7 +46,7 @@ export interface CapacityAdmissionController {
|
|
|
46
46
|
assignmentId: string;
|
|
47
47
|
nodeId: string;
|
|
48
48
|
endpointKey?: string;
|
|
49
|
-
deadlineAt
|
|
49
|
+
deadlineAt?: number;
|
|
50
50
|
priority?: number;
|
|
51
51
|
planId?: string;
|
|
52
52
|
planOrder?: number;
|
|
@@ -283,7 +283,7 @@ export function createCapacityAdmissionController(options: {
|
|
|
283
283
|
assignmentId: input.assignmentId,
|
|
284
284
|
priority: input.priority ?? 0,
|
|
285
285
|
queuedAt,
|
|
286
|
-
deadlineAt: input.deadlineAt,
|
|
286
|
+
...(input.deadlineAt === undefined ? {} : { deadlineAt: input.deadlineAt }),
|
|
287
287
|
planId: input.planId ?? null,
|
|
288
288
|
planOrder: input.planOrder ?? null,
|
|
289
289
|
value: () =>
|
|
@@ -313,7 +313,7 @@ export function createCapacityAdmissionController(options: {
|
|
|
313
313
|
nodeId: input.nodeId,
|
|
314
314
|
...(input.endpointKey !== undefined ? { endpointKey: input.endpointKey } : {}),
|
|
315
315
|
waitedMs: now() - queuedAt,
|
|
316
|
-
overdueAtQueueMs: queuedAt - input.deadlineAt,
|
|
316
|
+
overdueAtQueueMs: input.deadlineAt === undefined ? 0 : queuedAt - input.deadlineAt,
|
|
317
317
|
queueDepth: queue.size(),
|
|
318
318
|
limits: options.limits(),
|
|
319
319
|
usage: options.usage?.() ?? capacityLeaseUsage({ nowMs: now() }),
|
|
@@ -7,7 +7,7 @@ export interface DispatchBudgetPhase {
|
|
|
7
7
|
readReserve: number;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
/** Typed invocation
|
|
10
|
+
/** Typed advisory invocation estimate. A later phase may use a different estimate. */
|
|
11
11
|
export interface DispatchBudgetRequest extends DispatchBudgetPhase {
|
|
12
12
|
retryRevision?: DispatchBudgetPhase;
|
|
13
13
|
}
|
|
@@ -31,8 +31,10 @@ export interface RunToolBudgetEnvelope {
|
|
|
31
31
|
enforcement:
|
|
32
32
|
| {
|
|
33
33
|
classification: "native-per-tool";
|
|
34
|
-
perTool: "enforced";
|
|
35
|
-
clioControls: ReadonlyArray<
|
|
34
|
+
perTool: "enforced" | "advisory";
|
|
35
|
+
clioControls: ReadonlyArray<
|
|
36
|
+
"tool-calls" | "read-reserve" | "synthesis" | "attempt-cap" | "tool-observation" | "cancellation"
|
|
37
|
+
>;
|
|
36
38
|
}
|
|
37
39
|
| {
|
|
38
40
|
classification: "external-one-shot";
|
|
@@ -50,6 +52,7 @@ export interface RunToolBudgetEnvelope {
|
|
|
50
52
|
reasons: ReadonlyArray<BudgetEnvelopeReason>;
|
|
51
53
|
}
|
|
52
54
|
|
|
55
|
+
const ADVISORY_CLIO_CONTROLS = ["tool-observation", "cancellation"] as const;
|
|
53
56
|
const NATIVE_CLIO_CONTROLS = ["tool-calls", "read-reserve", "synthesis", "attempt-cap"] as const;
|
|
54
57
|
const EXTERNAL_CLIO_CONTROLS = [
|
|
55
58
|
"single-launch",
|
|
@@ -129,63 +132,10 @@ function freezeEnvelope(envelope: RunToolBudgetEnvelope): RunToolBudgetEnvelope
|
|
|
129
132
|
return Object.freeze(envelope);
|
|
130
133
|
}
|
|
131
134
|
|
|
132
|
-
function phaseWithin(candidate: DispatchBudgetPhase, maximum: AgentBudgetPhase): boolean {
|
|
133
|
-
return candidate.toolCalls <= maximum.toolCalls && candidate.readReserve <= maximum.readReserve;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
135
|
function samePhase(left: DispatchBudgetPhase, right: AgentBudgetPhase): boolean {
|
|
137
136
|
return left.toolCalls === right.toolCalls && left.readReserve === right.readReserve;
|
|
138
137
|
}
|
|
139
138
|
|
|
140
|
-
function assertRequestAdmitted(input: { request: DispatchBudgetRequest; policy: AgentBudget; hardCap: number }): void {
|
|
141
|
-
const { request, policy, hardCap } = input;
|
|
142
|
-
const authoredMaximum = policy.maximum ?? policy;
|
|
143
|
-
if (policy.maximum === undefined && !samePhase(request, policy)) {
|
|
144
|
-
throw new BudgetAdmissionError(
|
|
145
|
-
"exact-recipe-policy",
|
|
146
|
-
`the recipe pins ${policy.toolCalls} tool calls with a read reserve of ${policy.readReserve}`,
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
if (!phaseWithin(request, authoredMaximum)) {
|
|
150
|
-
throw new BudgetAdmissionError(
|
|
151
|
-
"recipe-maximum",
|
|
152
|
-
`the requested phase ${request.toolCalls}/${request.readReserve} exceeds recipe maximum ${authoredMaximum.toolCalls}/${authoredMaximum.readReserve}`,
|
|
153
|
-
);
|
|
154
|
-
}
|
|
155
|
-
if (request.toolCalls > hardCap) {
|
|
156
|
-
throw new BudgetAdmissionError(
|
|
157
|
-
"global-cap",
|
|
158
|
-
`the requested ${request.toolCalls} tool calls exceed the operator cap of ${hardCap}`,
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
const ceiling = request.retryRevision;
|
|
162
|
-
if (ceiling === undefined) return;
|
|
163
|
-
if (ceiling.toolCalls < request.toolCalls || ceiling.readReserve < request.readReserve) {
|
|
164
|
-
throw new BudgetAdmissionError(
|
|
165
|
-
"ceiling-below-request",
|
|
166
|
-
`retryRevision ${ceiling.toolCalls}/${ceiling.readReserve} must not be smaller than the requested phase ${request.toolCalls}/${request.readReserve}`,
|
|
167
|
-
);
|
|
168
|
-
}
|
|
169
|
-
if (policy.maximum === undefined && !samePhase(ceiling, policy)) {
|
|
170
|
-
throw new BudgetAdmissionError(
|
|
171
|
-
"exact-recipe-policy",
|
|
172
|
-
`the recipe pins ${policy.toolCalls} tool calls with a read reserve of ${policy.readReserve}`,
|
|
173
|
-
);
|
|
174
|
-
}
|
|
175
|
-
if (!phaseWithin(ceiling, authoredMaximum)) {
|
|
176
|
-
throw new BudgetAdmissionError(
|
|
177
|
-
"recipe-maximum",
|
|
178
|
-
`retryRevision ${ceiling.toolCalls}/${ceiling.readReserve} exceeds recipe maximum ${authoredMaximum.toolCalls}/${authoredMaximum.readReserve}`,
|
|
179
|
-
);
|
|
180
|
-
}
|
|
181
|
-
if (ceiling.toolCalls > hardCap) {
|
|
182
|
-
throw new BudgetAdmissionError(
|
|
183
|
-
"global-cap",
|
|
184
|
-
`retryRevision ${ceiling.toolCalls} exceeds the operator cap of ${hardCap}`,
|
|
185
|
-
);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
139
|
export interface ResolveToolBudgetEnvelopeInput {
|
|
190
140
|
recipeId: string;
|
|
191
141
|
policy: AgentBudget;
|
|
@@ -202,10 +152,14 @@ export function resolveToolBudgetEnvelope(input: ResolveToolBudgetEnvelopeInput)
|
|
|
202
152
|
if (!Number.isSafeInteger(input.hardCap) || input.hardCap <= 0) {
|
|
203
153
|
throw new Error("dispatch: worker tool-call cap must be a positive safe integer");
|
|
204
154
|
}
|
|
205
|
-
if (input.request !== undefined)
|
|
206
|
-
assertRequestAdmitted({ request: input.request, policy: input.policy, hardCap: input.hardCap });
|
|
207
155
|
|
|
208
156
|
const request = input.request === undefined ? null : cloneDispatchBudgetRequest(input.request);
|
|
157
|
+
if (
|
|
158
|
+
request?.retryRevision &&
|
|
159
|
+
(request.retryRevision.toolCalls < request.toolCalls || request.retryRevision.readReserve < request.readReserve)
|
|
160
|
+
) {
|
|
161
|
+
throw new BudgetAdmissionError("ceiling-below-request", "retryRevision must not be smaller than the requested phase");
|
|
162
|
+
}
|
|
209
163
|
const base = request ?? input.policy;
|
|
210
164
|
const reasons: BudgetEnvelopeReason[] = [];
|
|
211
165
|
let selected: DispatchBudgetPhase = base;
|
|
@@ -216,15 +170,7 @@ export function resolveToolBudgetEnvelope(input: ResolveToolBudgetEnvelopeInput)
|
|
|
216
170
|
selected = ceiling;
|
|
217
171
|
reasons.push({
|
|
218
172
|
code: phaseKind === "retry" ? "retry-growth-authorized" : "revision-growth-authorized",
|
|
219
|
-
detail: `${phaseKind} phase grew from ${base.toolCalls}/${base.readReserve} to the
|
|
220
|
-
});
|
|
221
|
-
} else {
|
|
222
|
-
reasons.push({
|
|
223
|
-
code: phaseKind === "retry" ? "retry-growth-denied" : "revision-growth-denied",
|
|
224
|
-
detail:
|
|
225
|
-
ceiling === undefined
|
|
226
|
-
? `${phaseKind} phase retained ${base.toolCalls}/${base.readReserve} because the original request declared no ceiling`
|
|
227
|
-
: `${phaseKind} phase retained ${base.toolCalls}/${base.readReserve} because the declared ceiling did not authorize growth`,
|
|
173
|
+
detail: `${phaseKind} phase grew from ${base.toolCalls}/${base.readReserve} to the advisory estimate ${ceiling.toolCalls}/${ceiling.readReserve}`,
|
|
228
174
|
});
|
|
229
175
|
}
|
|
230
176
|
}
|
|
@@ -232,18 +178,11 @@ export function resolveToolBudgetEnvelope(input: ResolveToolBudgetEnvelopeInput)
|
|
|
232
178
|
if (revisionCeiling !== undefined && !samePhase(revisionCeiling, selected)) {
|
|
233
179
|
reasons.push({
|
|
234
180
|
code: "revision-growth-authorized",
|
|
235
|
-
detail: `a result-contract revision may grow from ${selected.toolCalls}/${selected.readReserve} to the
|
|
181
|
+
detail: `a result-contract revision may grow from ${selected.toolCalls}/${selected.readReserve} to the advisory estimate ${revisionCeiling.toolCalls}/${revisionCeiling.readReserve}`,
|
|
236
182
|
});
|
|
237
183
|
}
|
|
238
184
|
|
|
239
|
-
|
|
240
|
-
if (toolCalls > input.hardCap) {
|
|
241
|
-
reasons.push({
|
|
242
|
-
code: "global-cap-clamp",
|
|
243
|
-
detail: `tool calls were clamped from ${toolCalls} to the operator cap of ${input.hardCap}`,
|
|
244
|
-
});
|
|
245
|
-
toolCalls = input.hardCap;
|
|
246
|
-
}
|
|
185
|
+
const toolCalls = selected.toolCalls;
|
|
247
186
|
let readReserve = selected.readReserve;
|
|
248
187
|
if (!input.hasReadTool && readReserve > 0) {
|
|
249
188
|
reasons.push({
|
|
@@ -285,8 +224,8 @@ export function resolveToolBudgetEnvelope(input: ResolveToolBudgetEnvelopeInput)
|
|
|
285
224
|
}
|
|
286
225
|
: {
|
|
287
226
|
classification: "native-per-tool",
|
|
288
|
-
perTool: "
|
|
289
|
-
clioControls: [...
|
|
227
|
+
perTool: "advisory",
|
|
228
|
+
clioControls: [...ADVISORY_CLIO_CONTROLS],
|
|
290
229
|
},
|
|
291
230
|
policy: {
|
|
292
231
|
recipeId: input.recipeId,
|
|
@@ -300,6 +239,7 @@ export function resolveToolBudgetEnvelope(input: ResolveToolBudgetEnvelopeInput)
|
|
|
300
239
|
},
|
|
301
240
|
request,
|
|
302
241
|
effective: {
|
|
242
|
+
mode: "advisory",
|
|
303
243
|
toolCalls,
|
|
304
244
|
readReserve,
|
|
305
245
|
synthesis: input.policy.synthesis,
|
|
@@ -312,6 +252,8 @@ export function resolveToolBudgetEnvelope(input: ResolveToolBudgetEnvelopeInput)
|
|
|
312
252
|
|
|
313
253
|
export function formatBudgetPolicy(envelope: RunToolBudgetEnvelope): string {
|
|
314
254
|
const policy = envelope.policy;
|
|
255
|
+
if (envelope.effective.mode === "advisory")
|
|
256
|
+
return `${policy.recipeId} advisory default ${policy.default.toolCalls}/${policy.default.readReserve}, recommended max ${policy.maximum.toolCalls}/${policy.maximum.readReserve}`;
|
|
315
257
|
const range = policy.exact
|
|
316
258
|
? `exact ${policy.default.toolCalls}/${policy.default.readReserve}`
|
|
317
259
|
: `default ${policy.default.toolCalls}/${policy.default.readReserve}, max ${policy.maximum.toolCalls}/${policy.maximum.readReserve}`;
|
|
@@ -322,6 +264,8 @@ export function formatBudgetRequest(envelope: RunToolBudgetEnvelope): string {
|
|
|
322
264
|
const request = envelope.request;
|
|
323
265
|
if (request === null) return "recipe default";
|
|
324
266
|
const ceiling = request.retryRevision;
|
|
267
|
+
if (envelope.effective.mode === "advisory")
|
|
268
|
+
return `${request.toolCalls}/${request.readReserve} advisory${ceiling ? `, retry/revision estimate ${ceiling.toolCalls}/${ceiling.readReserve}` : ""}`;
|
|
325
269
|
return ceiling === undefined
|
|
326
270
|
? `${request.toolCalls}/${request.readReserve}, no retry/revision growth`
|
|
327
271
|
: `${request.toolCalls}/${request.readReserve}, retry/revision ceiling ${ceiling.toolCalls}/${ceiling.readReserve}`;
|
|
@@ -335,8 +279,10 @@ export function formatEffectiveBudget(envelope: RunToolBudgetEnvelope): string {
|
|
|
335
279
|
const enforcement =
|
|
336
280
|
envelope.enforcement.classification === "external-one-shot"
|
|
337
281
|
? "external one-shot; per-tool unobserved/not enforced"
|
|
338
|
-
:
|
|
339
|
-
|
|
282
|
+
: envelope.enforcement.perTool === "advisory"
|
|
283
|
+
? "native per-tool observed/advisory"
|
|
284
|
+
: "native per-tool enforced";
|
|
285
|
+
return `${budget.toolCalls}/${budget.readReserve}${revision}, ${budget.mode === "advisory" ? "advisory baseline" : "lifetime cap"} ${budget.hardCap}, synthesis=${budget.synthesis ? "on" : "off"}; ${enforcement}`;
|
|
340
286
|
}
|
|
341
287
|
|
|
342
288
|
export function formatBudgetReasons(envelope: RunToolBudgetEnvelope): string {
|
|
@@ -391,15 +337,17 @@ export function cloneRunToolBudgetEnvelope(value: unknown): RunToolBudgetEnvelop
|
|
|
391
337
|
) {
|
|
392
338
|
return undefined;
|
|
393
339
|
}
|
|
340
|
+
if (value.effective.mode !== undefined && value.effective.mode !== "advisory" && value.effective.mode !== "enforced")
|
|
341
|
+
return undefined;
|
|
394
342
|
if (
|
|
395
343
|
maximum.toolCalls < defaultPhase.toolCalls ||
|
|
396
344
|
maximum.readReserve < defaultPhase.readReserve ||
|
|
397
345
|
(value.policy.exact && !samePhase(maximum, defaultPhase)) ||
|
|
398
|
-
effectivePhase.toolCalls > value.effective.hardCap ||
|
|
346
|
+
(value.effective.mode !== "advisory" && effectivePhase.toolCalls > value.effective.hardCap) ||
|
|
399
347
|
value.effective.synthesis !== value.policy.default.synthesis ||
|
|
400
348
|
(revision !== undefined &&
|
|
401
349
|
(revision.toolCalls < effectivePhase.toolCalls ||
|
|
402
|
-
revision.toolCalls > value.effective.hardCap ||
|
|
350
|
+
(value.effective.mode !== "advisory" && revision.toolCalls > value.effective.hardCap) ||
|
|
403
351
|
(revision.toolCalls === effectivePhase.toolCalls && revision.readReserve <= effectivePhase.readReserve)))
|
|
404
352
|
) {
|
|
405
353
|
return undefined;
|
|
@@ -443,6 +391,17 @@ export function cloneRunToolBudgetEnvelope(value: unknown): RunToolBudgetEnvelop
|
|
|
443
391
|
clioControls: [...EXTERNAL_CLIO_CONTROLS],
|
|
444
392
|
};
|
|
445
393
|
}
|
|
394
|
+
if (
|
|
395
|
+
value.enforcement.classification === "native-per-tool" &&
|
|
396
|
+
value.enforcement.perTool === "advisory" &&
|
|
397
|
+
value.effective.mode === "advisory" &&
|
|
398
|
+
isExactStringArray(value.enforcement.clioControls, ADVISORY_CLIO_CONTROLS)
|
|
399
|
+
)
|
|
400
|
+
return {
|
|
401
|
+
classification: "native-per-tool" as const,
|
|
402
|
+
perTool: "advisory" as const,
|
|
403
|
+
clioControls: [...ADVISORY_CLIO_CONTROLS],
|
|
404
|
+
};
|
|
446
405
|
if (
|
|
447
406
|
value.enforcement.classification === "native-per-tool" &&
|
|
448
407
|
value.enforcement.perTool === "enforced" &&
|
|
@@ -457,6 +416,11 @@ export function cloneRunToolBudgetEnvelope(value: unknown): RunToolBudgetEnvelop
|
|
|
457
416
|
return null;
|
|
458
417
|
})();
|
|
459
418
|
if (enforcement === null) return undefined;
|
|
419
|
+
if (
|
|
420
|
+
enforcement.classification === "native-per-tool" &&
|
|
421
|
+
(enforcement.perTool === "advisory") !== (value.effective.mode === "advisory")
|
|
422
|
+
)
|
|
423
|
+
return undefined;
|
|
460
424
|
return freezeEnvelope({
|
|
461
425
|
version: 1,
|
|
462
426
|
enforcement,
|
|
@@ -468,6 +432,7 @@ export function cloneRunToolBudgetEnvelope(value: unknown): RunToolBudgetEnvelop
|
|
|
468
432
|
},
|
|
469
433
|
request,
|
|
470
434
|
effective: {
|
|
435
|
+
...(value.effective.mode === undefined ? {} : { mode: value.effective.mode as "advisory" | "enforced" }),
|
|
471
436
|
...effectivePhase,
|
|
472
437
|
synthesis: value.effective.synthesis,
|
|
473
438
|
hardCap: value.effective.hardCap,
|