@iowarp/clio-coder 0.4.4 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +92 -2
- package/CONTRIBUTING.md +25 -15
- package/README.md +340 -27
- package/dist/{acp-WNAYYF4F.js → acp-H3CU2HBQ.js} +25 -24
- package/dist/{agents-3OKXHLOI.js → agents-IXQQZ7BD.js} +77 -77
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-VKNNMGPU.js → auth-R7KYF7N3.js} +38 -38
- package/dist/builtins-CRFDQUVP.js +22 -0
- package/dist/{chunk-TQAHXW6Y.js → chunk-22PQ4TX4.js} +4 -4
- package/dist/{chunk-NEDJ26B5.js → chunk-2GPGAE5W.js} +6 -51
- package/dist/{chunk-IKCO5N3L.js → chunk-2QPI3TR3.js} +3 -3
- package/dist/{chunk-HRQMFLJP.js → chunk-32KJPXAM.js} +6 -6
- package/dist/{chunk-65DEGPJ6.js → chunk-3A3CUMKA.js} +6 -4
- package/dist/{chunk-JCI2ROMZ.js → chunk-3T4DXWP6.js} +7 -7
- package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
- package/dist/{chunk-6Q3CYFD3.js → chunk-4SVIVOMC.js} +184 -33
- package/dist/{chunk-W54I7H25.js → chunk-5A6XR3RJ.js} +44 -19
- package/dist/{chunk-YPC6ZR5L.js → chunk-5CMARGPF.js} +119 -5
- package/dist/{chunk-KXDSS5WJ.js → chunk-5CY4Q6QI.js} +4 -4
- package/dist/{chunk-I2DWJ4GM.js → chunk-5DDOTTG4.js} +54 -42
- package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
- package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
- package/dist/{chunk-3ODX73FK.js → chunk-5VTJP36Q.js} +4 -4
- package/dist/{chunk-54X7T7DK.js → chunk-5ZMXGW7P.js} +79 -7
- package/dist/chunk-5ZSZEYJK.js +119 -0
- package/dist/{chunk-IXIY2H4R.js → chunk-633EXGZA.js} +5 -5
- package/dist/{chunk-CUSRQKPU.js → chunk-6CDNRHWH.js} +299 -89
- package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
- package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
- package/dist/{chunk-JEIYHLOR.js → chunk-6SYEGZI3.js} +12 -12
- package/dist/{chunk-DQOVN6KV.js → chunk-6YA46L5A.js} +4 -4
- package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
- package/dist/{chunk-6PAZTBPA.js → chunk-7HBHHVCK.js} +15 -6
- package/dist/{chunk-25QBEXRS.js → chunk-7TKWWPD7.js} +5 -4
- package/dist/{chunk-2VTFPG5O.js → chunk-7WLRF2U5.js} +2 -2
- package/dist/chunk-7WUZEB2M.js +165 -0
- package/dist/{chunk-3UUXNFEX.js → chunk-7YJWEF2L.js} +61 -34
- package/dist/{chunk-3EBYEESD.js → chunk-A46ILRS2.js} +5 -5
- package/dist/{chunk-UOIZ7DA4.js → chunk-AP7HDJOP.js} +2 -2
- package/dist/{chunk-APJ265NV.js → chunk-B5GGDIHT.js} +146 -146
- package/dist/{chunk-PMZVFWSR.js → chunk-B5ZTR6KZ.js} +2 -2
- package/dist/{chunk-I5FWO7L5.js → chunk-B6UM3OZC.js} +2 -2
- package/dist/{chunk-2CU2H6KE.js → chunk-BBV5TKE6.js} +5 -5
- package/dist/{chunk-4O6MANBS.js → chunk-BS4GAMUB.js} +14 -10
- package/dist/{chunk-S66XZJOF.js → chunk-C27U2TYG.js} +2 -2
- package/dist/{chunk-QZWQA4DE.js → chunk-CBSKDFWL.js} +3 -3
- package/dist/{chunk-2LEAKD4C.js → chunk-CKK25WN3.js} +3 -3
- package/dist/{chunk-BYP5D4HI.js → chunk-CTTI7G3T.js} +2 -2
- package/dist/{chunk-XAKHZX5N.js → chunk-CVDAFGPW.js} +4 -4
- package/dist/{chunk-RKKLTLYB.js → chunk-CXQ37WJH.js} +3 -3
- package/dist/{chunk-GTUD2WMY.js → chunk-DBREN25X.js} +44 -9
- package/dist/{chunk-YNFKXPEC.js → chunk-DIMRLNIC.js} +35 -66
- package/dist/{chunk-NDDGJUXD.js → chunk-DNCE23JJ.js} +2 -2
- package/dist/{chunk-HVDIIIQW.js → chunk-DNHVRBH4.js} +3 -3
- package/dist/{chunk-XULDXHTN.js → chunk-DRD2A54W.js} +102 -50
- package/dist/{chunk-D7E7WCDF.js → chunk-DVNAPPXU.js} +2 -2
- package/dist/{chunk-YXLYO42X.js → chunk-DXVMLM3Z.js} +3 -2
- package/dist/{chunk-5MEZN6CB.js → chunk-DZK63TZJ.js} +6 -6
- package/dist/{chunk-IGLP3ODT.js → chunk-E3BQTQUP.js} +15 -15
- package/dist/{chunk-IWHMRKLL.js → chunk-E3LEPLQ2.js} +2 -2
- package/dist/{chunk-3R73A4XB.js → chunk-ECBHH7LU.js} +3 -3
- package/dist/chunk-ECOMVOHP.js +139 -0
- package/dist/chunk-EFSEIZE6.js +56 -0
- package/dist/{chunk-FEAXX7B6.js → chunk-EHCPSZJF.js} +4 -4
- package/dist/{chunk-4NSRCOYP.js → chunk-EHOSNVVM.js} +3 -2
- package/dist/{chunk-7UGL4MB5.js → chunk-EQEJJ53P.js} +10 -10
- package/dist/{chunk-GWZNEVM2.js → chunk-EWD5P3GK.js} +9 -9
- package/dist/{chunk-6UINWWS6.js → chunk-F34AR6O3.js} +14 -14
- package/dist/{chunk-GHS5EBTQ.js → chunk-FKIOX6DS.js} +29 -20
- package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
- package/dist/{chunk-Y55JBDO5.js → chunk-FSTIBAGM.js} +38 -23
- package/dist/{chunk-ZTJUVLTU.js → chunk-FXFVDPWY.js} +2 -2
- package/dist/{chunk-XPLRXC72.js → chunk-GD55RTIW.js} +3 -3
- package/dist/{chunk-5B2AEOW5.js → chunk-GH5ZR6JP.js} +472 -472
- package/dist/{chunk-TOIVGRUX.js → chunk-GJ24ODAX.js} +5 -5
- package/dist/{chunk-QUFRYSWI.js → chunk-GNQRWTMY.js} +129 -48
- package/dist/{chunk-5ICU3EUH.js → chunk-GVYWZNRK.js} +5 -5
- package/dist/{chunk-GX5WYQO4.js → chunk-GXCCHKN6.js} +6 -6
- package/dist/{chunk-K6T2ZAMZ.js → chunk-HGSLRG33.js} +6 -6
- package/dist/{chunk-26QSH3EJ.js → chunk-HHVJNVUJ.js} +5 -5
- package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
- package/dist/{chunk-JT2RFCC5.js → chunk-HR3HPQ76.js} +5 -5
- package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
- package/dist/{chunk-ELWDPP3Y.js → chunk-I7VLWRK2.js} +8 -8
- package/dist/{chunk-6OSVSQL5.js → chunk-ICO4TQ2F.js} +7 -5
- package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
- package/dist/{chunk-72YIHOZQ.js → chunk-ILJ7DWGE.js} +9 -9
- package/dist/{chunk-2JH2WHGE.js → chunk-J2FYEQ5L.js} +4 -4
- package/dist/{chunk-BMS5RKQY.js → chunk-JABWPKFY.js} +3 -3
- package/dist/{chunk-QDC3K2U3.js → chunk-K2BLQC5E.js} +3 -3
- package/dist/{chunk-AUPNRN7C.js → chunk-K2HL3GBL.js} +4 -4
- package/dist/{chunk-2ASED4PZ.js → chunk-K6RDB7IA.js} +26 -26
- package/dist/{chunk-FFUPXJC4.js → chunk-KDWLXVMN.js} +23 -24
- package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
- package/dist/{chunk-6QOTUPRG.js → chunk-KF6GFW6O.js} +66 -18
- package/dist/{chunk-BTK3SSSK.js → chunk-KMF54VH3.js} +2 -2
- package/dist/chunk-KPRLAMP4.js +32 -0
- package/dist/{chunk-ECH6PKUQ.js → chunk-KQ6IDQIB.js} +2 -2
- package/dist/{chunk-3UNOLWNZ.js → chunk-KTFSFCVN.js} +20 -9
- package/dist/{chunk-57XXR6DR.js → chunk-KYKNBD4Y.js} +24 -23
- package/dist/{chunk-IRXAATOX.js → chunk-L4N3DWNW.js} +3 -3
- package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
- package/dist/{chunk-U6TMQNSI.js → chunk-LTR5QCLS.js} +4 -4
- package/dist/chunk-LUL5Z66S.js +221 -0
- package/dist/{chunk-ELZVTCGV.js → chunk-LVFANMOH.js} +151 -327
- package/dist/{chunk-H7IXIC72.js → chunk-LY4N4TTL.js} +17 -3
- package/dist/{chunk-VKPAQYEB.js → chunk-LZBMXNLP.js} +5 -5
- package/dist/{chunk-UL3WSD3F.js → chunk-M4KFUXS7.js} +2 -2
- package/dist/{chunk-NXYCB2VD.js → chunk-M6TAYK66.js} +6 -6
- package/dist/{chunk-NEKRRTYW.js → chunk-MC3JSVR6.js} +2 -2
- package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
- package/dist/{chunk-DXKJURES.js → chunk-MDU3C27C.js} +10 -7
- package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
- package/dist/{chunk-3GY4F45V.js → chunk-NC4KV7EL.js} +6 -6
- package/dist/{chunk-LLXSDWXS.js → chunk-NF3BK5WR.js} +5 -5
- package/dist/chunk-NTK3WTHM.js +141 -0
- package/dist/{chunk-GYV6VZOC.js → chunk-NTTS3O53.js} +2 -2
- package/dist/{chunk-RZDWV63N.js → chunk-NY6IWDVU.js} +6 -6
- package/dist/{chunk-XXYSBZIQ.js → chunk-O2RQ7LCK.js} +4 -4
- package/dist/{chunk-4BJ5BYCE.js → chunk-O3VV6IVK.js} +2 -2
- package/dist/{chunk-W6GROXXM.js → chunk-O5F25NIE.js} +2 -2
- package/dist/{chunk-NXIMQY5W.js → chunk-ODUTYZIU.js} +5 -5
- package/dist/{chunk-LTIKRKFL.js → chunk-ONRTXOZY.js} +4 -4
- package/dist/{chunk-KFV5L5SK.js → chunk-OQM5IVJY.js} +118 -232
- package/dist/{chunk-XRZT5WY5.js → chunk-P5SC4DLJ.js} +4 -4
- package/dist/{chunk-R6Q67RJH.js → chunk-PECBKCDK.js} +34 -6
- package/dist/{chunk-33YXPOE3.js → chunk-PPEZJWUG.js} +2 -2
- package/dist/{chunk-RXTN6AKH.js → chunk-PWWSIB2A.js} +5 -5
- package/dist/{chunk-2STGEDFV.js → chunk-QEQISF75.js} +2 -2
- package/dist/{chunk-3DPEIQKN.js → chunk-QH3ZTUOA.js} +2 -2
- package/dist/{chunk-YAKGTXEV.js → chunk-QRFXEO6Y.js} +2 -2
- package/dist/{chunk-35MSIRKH.js → chunk-QUIJZSDW.js} +2 -2
- package/dist/{chunk-HHV2GANA.js → chunk-R2P2U3ZS.js} +2 -2
- package/dist/{chunk-2DSOYNFC.js → chunk-R6MAYTMS.js} +7 -7
- package/dist/{chunk-JQLNNIKT.js → chunk-R6MICQYU.js} +6 -6
- package/dist/{chunk-NAI6ZFCY.js → chunk-RLTT5GVY.js} +122 -11
- package/dist/{chunk-DT3LWJOB.js → chunk-RXIOCVBZ.js} +24 -6
- package/dist/{chunk-N56KALIC.js → chunk-S32UQ5GL.js} +61 -34
- package/dist/{chunk-UEPWCCTY.js → chunk-SBZX6ARC.js} +12 -12
- package/dist/chunk-SD7SHNDW.js +15 -0
- package/dist/{chunk-NRO2BJRH.js → chunk-SDWNDICN.js} +10235 -4015
- package/dist/{chunk-UXCU4E3T.js → chunk-SE4ZKILO.js} +6 -6
- package/dist/chunk-SL2RDHKO.js +19 -0
- package/dist/{chunk-NUGM5KR6.js → chunk-SRCEQKQS.js} +2 -2
- package/dist/{chunk-OMQNJVKW.js → chunk-SRZOW5L2.js} +43 -13
- package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
- package/dist/{chunk-V76WTFTW.js → chunk-T52TPHYC.js} +6 -6
- package/dist/{chunk-I7XBWTYH.js → chunk-T53XI6I7.js} +5 -5
- package/dist/{chunk-2ZSONWVL.js → chunk-T7FDXNRU.js} +13 -13
- package/dist/{chunk-JSD46VO2.js → chunk-TEG3RYVZ.js} +43 -36
- package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
- package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
- package/dist/{chunk-75W7L2E2.js → chunk-TZ7MFRG4.js} +1041 -162
- package/dist/{chunk-36CT5VVL.js → chunk-U2JOLB7O.js} +126 -77
- package/dist/{chunk-LL4KHSZI.js → chunk-U2MSJ57E.js} +2 -2
- package/dist/{chunk-FTMGRKEF.js → chunk-U44YYLVV.js} +4 -4
- package/dist/{chunk-YECAMM3D.js → chunk-U7H5WRG5.js} +5 -5
- package/dist/{chunk-RQCKCSRL.js → chunk-U7VQ4NI4.js} +22 -22
- package/dist/{chunk-5TUB6SLS.js → chunk-UFYNOQK4.js} +7 -7
- package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
- package/dist/{chunk-USR47QNF.js → chunk-UL36QJX6.js} +14 -14
- package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
- package/dist/{chunk-RAY4OVGZ.js → chunk-URBGEOH3.js} +5 -5
- package/dist/chunk-USZA7GWL.js +341 -0
- package/dist/{chunk-YD5GIKET.js → chunk-UTUNT5QL.js} +48 -579
- package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
- package/dist/{chunk-23L32XTI.js → chunk-UXAC2FX4.js} +68 -39
- package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
- package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
- package/dist/{chunk-EXLD33WO.js → chunk-VLPTKCKT.js} +24 -9
- package/dist/{chunk-336NSSKI.js → chunk-VNBICSS2.js} +2 -2
- package/dist/{chunk-VAVR4IJY.js → chunk-VQD7NH7Z.js} +3 -3
- package/dist/{chunk-LBMZMYH2.js → chunk-W2RJEH6Q.js} +3 -3
- package/dist/{chunk-7CR24IG7.js → chunk-WDV62RKY.js} +2 -2
- package/dist/{chunk-S6PYF2XF.js → chunk-WFKDPU7U.js} +4 -4
- package/dist/{chunk-BJVFZO5U.js → chunk-WJIMKGD6.js} +7 -7
- package/dist/{chunk-5636DCO5.js → chunk-WLMSOT73.js} +59 -12
- package/dist/{chunk-MXHC5QYU.js → chunk-WTQGRBHV.js} +5 -144
- package/dist/chunk-WXA2CFJO.js +23 -0
- package/dist/{chunk-QSNYB6ZV.js → chunk-XCUDZQLX.js} +3 -3
- package/dist/{chunk-4M6Z5QVF.js → chunk-XXBQKW32.js} +11 -11
- package/dist/{chunk-OEJSLEPW.js → chunk-YEJIG7LN.js} +332 -332
- package/dist/chunk-YGDMBK7O.js +567 -0
- package/dist/{chunk-4WR7VSYB.js → chunk-YYB3MC65.js} +23 -9
- package/dist/{chunk-2IR2NMPA.js → chunk-ZIDFQJRB.js} +2 -2
- package/dist/{chunk-Q4WO54TA.js → chunk-ZMZQEBKI.js} +14 -14
- package/dist/{chunk-6EJMN2Y3.js → chunk-ZTNFYMIO.js} +2 -2
- package/dist/{chunk-WEPFGWHJ.js → chunk-ZZFWWYLX.js} +2 -2
- package/dist/cli/index.js +44 -44
- package/dist/clio-5I2IBFYL.js +26 -0
- package/dist/{code-nav-IJR2DBPR.js → code-nav-YXIAEZVS.js} +48 -32
- package/dist/codewiki/build-worker.js +76 -29
- package/dist/{compile-cache-OQAVB7Y5.js → compile-cache-WJEPUZEJ.js} +4 -4
- package/dist/{components-2TGAI2RC.js → components-TNIKXCBH.js} +13 -13
- package/dist/{config-IUA6OYNS.js → config-Y2JDJ3JJ.js} +210 -124
- package/dist/configure-SML6UBZ5.js +55 -0
- package/dist/{context-4MPR7WKB.js → context-P5YSEO55.js} +125 -121
- package/dist/{context-2DKHWH2T.js → context-QQ53HSGJ.js} +91 -62
- package/dist/{context-BOYF5EJM.js → context-S2EEC3EJ.js} +62 -31
- package/dist/context-clear-TMEQCOTH.js +183 -0
- package/dist/{context-index-HNG3MOME.js → context-index-HP2JFUWA.js} +13 -11
- package/dist/{context-map-COB37XXN.js → context-map-INTXD54D.js} +71 -21
- package/dist/{context-working-set-3I3FYX6Y.js → context-working-set-CNLSQN5K.js} +31 -31
- package/dist/detail-5572VLBO.js +114 -0
- package/dist/{dispatch-runner-RJ5I2F2O.js → dispatch-runner-FRHD6P2O.js} +191 -116
- package/dist/{docs-SPOV3BAN.js → docs-BL7ROUFN.js} +4 -4
- package/dist/{doctor-DKICC2SN.js → doctor-N3LCM2LG.js} +58 -58
- package/dist/{eval-OQOQUDHK.js → eval-BUU3ZOUZ.js} +473 -168
- package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
- package/dist/evidence-DTGEN456.js +224 -0
- package/dist/{evidence-4DQ25GUQ.js → evidence-SQ5DNFEN.js} +110 -94
- package/dist/{evolve-GSS52E5J.js → evolve-IJNUFZDS.js} +107 -91
- package/dist/{extensions-G7MFLYHT.js → extensions-YVRHX6ZI.js} +16 -16
- package/dist/{fleet-Q37YHHAQ.js → fleet-ZNNVSYFO.js} +147 -147
- package/dist/{fleet-commands-G7E4N7SM.js → fleet-commands-5YE7NPJL.js} +27 -26
- package/dist/{fleet-decisions-O7M6QBA2.js → fleet-decisions-3SBSCTCW.js} +16 -15
- package/dist/{fleet-graph-TOUBW6OW.js → fleet-graph-6HHPWF5T.js} +39 -38
- package/dist/{fleet-inspect-SW33JJNI.js → fleet-inspect-JEYMGCGC.js} +107 -91
- package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
- package/dist/{fleet-preflight-CV2655TW.js → fleet-preflight-QRSHIIDE.js} +10 -9
- package/dist/{fleet-validate-KESZX2YH.js → fleet-validate-4PM4GDDL.js} +46 -42
- package/dist/{fleet-verify-UQPMTVE3.js → fleet-verify-NJDTHTO3.js} +105 -89
- package/dist/fleet-view-UP2BWQQY.js +117 -0
- package/dist/{init-PXEXQSBF.js → init-S3GZQ5ZF.js} +123 -123
- package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
- package/dist/{interop-ZG5T62U3.js → interop-YOTGXFJM.js} +25 -25
- package/dist/inventory-K2OZ36YJ.js +117 -0
- package/dist/{library-B2W4N74O.js → library-GJI6W6OK.js} +45 -44
- package/dist/{memory-YCANYS5A.js → memory-OQOXQGYD.js} +107 -93
- package/dist/{models-GERTU3YI.js → models-3IK2Y5WE.js} +63 -62
- package/dist/{monitor-CPNIUULB.js → monitor-FTJLTKCQ.js} +136 -107
- package/dist/{orchestrator-J4BSH4WQ.js → orchestrator-N47O7SFD.js} +1159 -697
- package/dist/{panes-BOHAEGYC.js → panes-7BTYH3XQ.js} +8 -8
- package/dist/{panes-NXSLDQZ2.js → panes-WPOMEMRH.js} +22 -22
- package/dist/{paths-VSUWNC22.js → paths-J3KN7UAO.js} +12 -12
- package/dist/preload-65U34NG6.js +115 -0
- package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
- package/dist/{reset-TNWTB5LU.js → reset-MUVQDLNL.js} +20 -20
- package/dist/{resources-4PXNMD5G.js → resources-LM76COAO.js} +41 -40
- package/dist/{run-D6XJ34CN.js → run-3VFZQ33N.js} +162 -156
- package/dist/{share-2NWMJJEE.js → share-4JUB4BL7.js} +43 -42
- package/dist/{skills-KR7WON5G.js → skills-S36AAJHU.js} +47 -46
- package/dist/{skills-eval-O2ZNOLDS.js → skills-eval-G6T57L7M.js} +127 -107
- package/dist/{skills-inventory-ZZOUBK7O.js → skills-inventory-WLM46PJH.js} +41 -40
- package/dist/slash-commands-GBARG3Y7.js +91 -0
- package/dist/{steer-XA25PSCS.js → steer-S7D7IKPU.js} +7 -7
- package/dist/{support-7EMVWYG2.js → support-5VAEC32W.js} +14 -14
- package/dist/{targets-OMH2XCSN.js → targets-N5REUETU.js} +145 -94
- package/dist/tasks-6BVY5YZF.js +36 -0
- package/dist/{terminal-lease-C2J3JYRE.js → terminal-lease-57UEOJKS.js} +12 -11
- package/dist/tools-6OCQ6SVB.js +28 -0
- package/dist/{trace-FXMXUZUF.js → trace-JHLXWUMN.js} +18 -17
- package/dist/{tree-sitter-HGKH6LG4.js → tree-sitter-AQUUOSYM.js} +6 -6
- package/dist/{tui-primitives-K5PASC3O.js → tui-primitives-RCY2HN7G.js} +3 -3
- package/dist/{uninstall-HALS6BLF.js → uninstall-FXYMFFRT.js} +17 -17
- package/dist/{upgrade-MS72RJEP.js → upgrade-4HD5HAIV.js} +40 -39
- package/dist/{usage-NHG6MCJM.js → usage-4GWM2WWP.js} +136 -105
- package/dist/{verifiers-7AUNVXDY.js → verifiers-GSKWKWVG.js} +28 -27
- package/dist/verify-3AS3ULCY.js +30 -0
- package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
- package/dist/{web-fetch-V4FKSDAV.js → web-fetch-MQN4FH3X.js} +169 -18
- package/dist/wiki-generate-7BV7XWIY.js +614 -0
- package/dist/{with-panes-BDQEWBRT.js → with-panes-OFTNAR4Y.js} +34 -20
- package/dist/worker/entry.js +99 -88
- package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
- package/docs/README.md +7 -6
- package/docs/architecture/acp.md +10 -0
- package/docs/architecture/architecture.md +5 -5
- package/docs/architecture/context-engine.md +44 -59
- package/docs/architecture/context-working-set.md +7 -9
- package/docs/architecture/dispatch-architecture-rationale.md +1 -1
- package/docs/architecture/evidence-and-memory.md +10 -0
- package/docs/architecture/pi-boundary.md +37 -7
- package/docs/architecture/prompt-envelope-and-tools.md +7 -7
- package/docs/architecture/session-lifecycle.md +4 -4
- package/docs/architecture/worker-dispatch-mechanics.md +4 -0
- package/docs/guide/commands-and-modes.md +49 -36
- package/docs/guide/configuration-and-targets.md +7 -2
- package/docs/guide/configuration-reference.md +13 -3
- package/docs/guide/environment-variables.md +6 -2
- package/docs/guide/fleet-dispatch.md +12 -0
- package/docs/guide/installation-and-lifecycle.md +35 -9
- package/docs/guide/proactive-memory.md +1 -1
- package/docs/guide/skills-marketplace.md +11 -3
- package/docs/guide/tool-usage.md +9 -2
- package/docs/process/development-pipeline.md +10 -10
- package/docs/process/documentation-guide.md +2 -2
- package/docs/process/eval-runner.md +15 -0
- package/docs/process/evals-internal.md +1 -1
- package/docs/process/release-cut-checklist.md +6 -6
- package/evals/README.md +4 -0
- package/evals/behavioral-corpus-grader.mjs +147 -14
- package/evals/behavioral-model-negative-control.yaml +1 -0
- package/evals/behavioral-model.yaml +266 -1
- package/evals/fixtures/docs-retrieval.json +102 -0
- package/evals/fixtures/scalar-decision.json +17 -0
- package/evals/fixtures/scout-citation-pipeline.json +55 -0
- package/evals/fixtures/source-explanation.json +74 -0
- package/evals/fixtures/tool-arguments.json +18 -0
- package/evals/fixtures/tool-surface/read.txt +4 -0
- package/evals/fixtures/tool-surface/subdir/keep.txt +1 -0
- package/evals/no-edit-memory-grader.mjs +149 -0
- package/evals/scalar-decision-grader.py +41 -0
- package/evals/scalar-decision-machinery.ts +145 -0
- package/evals/source-explanation-grader.mjs +118 -0
- package/evals/tool-surface-grader.mjs +53 -0
- package/evals/tool-surface-model.yaml +274 -0
- package/package.json +14 -14
- package/skills/README.md +6 -6
- package/skills/registry.yaml +1 -1
- package/skills/skill-marketplace.json +1 -1
- package/src/cli/bootstrap-generate.ts +6 -0
- package/src/cli/config-inspect.ts +24 -7
- package/src/cli/config-trust.ts +62 -0
- package/src/cli/config.ts +8 -0
- package/src/cli/context-map.ts +75 -14
- package/src/cli/context.ts +46 -17
- package/src/cli/eval.ts +17 -3
- package/src/cli/modes/print.ts +32 -4
- package/src/cli/run.ts +16 -14
- package/src/cli/skills-eval.ts +10 -8
- package/src/cli/steer-channel.ts +31 -18
- package/src/cli/targets.ts +83 -31
- package/src/cli/tasks.ts +10 -1
- package/src/cli/upgrade.ts +9 -6
- package/src/cli/usage.ts +24 -0
- package/src/cli/wiki-generate.ts +239 -96
- package/src/core/bash-exec.ts +43 -15
- package/src/core/bus-events.ts +15 -0
- package/src/core/config.ts +33 -14
- package/src/core/defaults.ts +5 -4
- package/src/core/file-references.ts +11 -1
- package/src/core/incomplete-installation.ts +3 -1
- package/src/core/settings-layers.ts +21 -5
- package/src/core/termination.ts +26 -9
- package/src/core/untrusted-content.ts +16 -0
- package/src/core/workspace-trust.ts +179 -0
- package/src/domains/agents/builtins/coder.md +4 -2
- package/src/domains/agents/builtins/context-bootstrap.md +3 -1
- package/src/domains/agents/builtins/documenter.md +7 -4
- package/src/domains/agents/builtins/researcher.md +1 -0
- package/src/domains/agents/builtins/scout.md +7 -1
- package/src/domains/agents/result-contract.ts +199 -26
- package/src/domains/context/bootstrap-prompt.ts +11 -9
- package/src/domains/context/bootstrap.ts +74 -39
- package/src/domains/context/clio-md.ts +88 -26
- package/src/domains/context/codewiki/build-operation.ts +121 -0
- package/src/domains/context/codewiki/build-worker-protocol.ts +37 -3
- package/src/domains/context/codewiki/build-worker.ts +3 -35
- package/src/domains/context/codewiki/coordinator.ts +36 -6
- package/src/domains/context/codewiki/indexer.ts +59 -19
- package/src/domains/context/contract.ts +6 -2
- package/src/domains/context/extension.ts +72 -10
- package/src/domains/context/fingerprint.ts +39 -34
- package/src/domains/context/index.ts +7 -1
- package/src/domains/context/prompt-context.ts +55 -14
- package/src/domains/context/refresh.ts +9 -57
- package/src/domains/context/wiki/assemble.ts +14 -10
- package/src/domains/context/wiki/evidence.ts +209 -0
- package/src/domains/context/wiki/generate.ts +201 -67
- package/src/domains/context/wiki/meta.ts +10 -2
- package/src/domains/context/wiki/plan-store.ts +70 -14
- package/src/domains/context/wiki/plan.ts +71 -14
- package/src/domains/context/wiki/prompts.ts +42 -1
- package/src/domains/context/wiki/source-content.ts +106 -0
- package/src/domains/context/wiki/staleness.ts +33 -22
- package/src/domains/context/working-set/contract.ts +8 -2
- package/src/domains/context/working-set/engine.ts +17 -4
- package/src/domains/context/working-set/fold.ts +15 -2
- package/src/domains/context/working-set/marker.ts +2 -1
- package/src/domains/context/working-set/project.ts +18 -7
- package/src/domains/context/working-set/recall.ts +82 -56
- package/src/domains/dispatch/active-route-planner.ts +6 -3
- package/src/domains/dispatch/admission-queue.ts +19 -7
- package/src/domains/dispatch/admission.ts +3 -3
- package/src/domains/dispatch/budget-envelope.ts +47 -82
- package/src/domains/dispatch/capacity-lease.ts +57 -19
- package/src/domains/dispatch/contract.ts +10 -2
- package/src/domains/dispatch/event-pump.ts +28 -7
- package/src/domains/dispatch/execution-role.ts +49 -2
- package/src/domains/dispatch/execution-scheduler.ts +2 -0
- package/src/domains/dispatch/extension.ts +190 -105
- package/src/domains/dispatch/fleet-run.ts +20 -0
- package/src/domains/dispatch/gate-role-prompts.ts +4 -2
- package/src/domains/dispatch/parallel-writers.ts +34 -0
- package/src/domains/dispatch/reservation-store.ts +8 -34
- package/src/domains/dispatch/route-approval.ts +3 -3
- package/src/domains/dispatch/route-observer.ts +4 -2
- package/src/domains/dispatch/route-quality.ts +6 -1
- package/src/domains/dispatch/types.ts +4 -3
- package/src/domains/dispatch/worker-spawn.ts +58 -21
- package/src/domains/dispatch/workspace-checkpoint.ts +57 -0
- package/src/domains/eval/compare/behavioral.ts +81 -14
- package/src/domains/eval/compare/compare.ts +15 -5
- package/src/domains/eval/compare/envelope.ts +12 -5
- package/src/domains/eval/metrics/context.ts +24 -1
- package/src/domains/eval/metrics/tracked.ts +4 -28
- package/src/domains/eval/reports/comparison.ts +9 -9
- package/src/domains/eval/runners/clio-run.ts +5 -1
- package/src/domains/eval/schema/suite.ts +2 -0
- package/src/domains/eval/schema/validate.ts +1 -0
- package/src/domains/eval/suites/run.ts +189 -13
- package/src/domains/eval/verifiers/integrity.ts +39 -0
- package/src/domains/eval/verifiers/patch.ts +58 -2
- package/src/domains/eval/workspaces/temp-copy.ts +3 -0
- package/src/domains/evidence/build.ts +4 -2
- package/src/domains/interop/registry.ts +2 -2
- package/src/domains/middleware/hooks-io.ts +45 -26
- package/src/domains/middleware/hooks.ts +6 -0
- package/src/domains/middleware/injection-screen.ts +23 -0
- package/src/domains/middleware/rules.ts +5 -1
- package/src/domains/middleware/stalled-turn.ts +18 -3
- package/src/domains/middleware/task-board-reminder.ts +4 -2
- package/src/domains/middleware/task-nudge.ts +4 -1
- package/src/domains/mux/contract.ts +34 -1
- package/src/domains/mux/dock-controller.ts +8 -1
- package/src/domains/mux/index.ts +1 -0
- package/src/domains/mux/socket-client.ts +13 -3
- package/src/domains/observability/contract.ts +2 -2
- package/src/domains/observability/projection.ts +30 -9
- package/src/domains/prompts/compiler.ts +10 -2
- package/src/domains/prompts/contract.ts +7 -4
- package/src/domains/prompts/extension.ts +28 -64
- package/src/domains/prompts/fragments/identity/clio.md +23 -0
- package/src/domains/prompts/fragments/operating/contract.md +10 -0
- package/src/domains/prompts/fragments/operating/delegation.md +5 -0
- package/src/domains/prompts/fragments/wiki/page.md +28 -15
- package/src/domains/prompts/fragments/wiki/plan.md +4 -4
- package/src/domains/prompts/preload-prefix.ts +31 -0
- package/src/domains/prompts/preload.ts +135 -61
- package/src/domains/providers/auth/backend-file.ts +15 -11
- package/src/domains/providers/auth/storage.ts +3 -5
- package/src/domains/providers/catalog.ts +18 -3
- package/src/domains/providers/runtime-resolution.ts +11 -9
- package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
- package/src/domains/resources/skills/promotion.ts +8 -1
- package/src/domains/safety/action-classifier.ts +9 -0
- package/src/domains/safety/autonomy.ts +10 -1
- package/src/domains/safety/contract.ts +5 -1
- package/src/domains/safety/default-path-policy.ts +11 -0
- package/src/domains/safety/extension.ts +11 -2
- package/src/domains/safety/policy-engine.ts +189 -32
- package/src/domains/safety/project-policy.ts +7 -2
- package/src/domains/safety/workspace-trust.ts +43 -0
- package/src/domains/session/compaction/compact.ts +384 -21
- package/src/domains/session/compaction/cut-point.ts +42 -5
- package/src/domains/session/compaction/tokens.ts +9 -1
- package/src/domains/session/decision-board.ts +43 -33
- package/src/domains/session/entries.ts +169 -4
- package/src/domains/session/prompt-manifest.ts +47 -8
- package/src/domains/session/task-board.ts +21 -3
- package/src/domains/user-tasks/handoff.ts +16 -0
- package/src/engine/acp/adapter.ts +44 -12
- package/src/engine/acp/server.ts +1 -0
- package/src/engine/acp/transport.ts +2 -1
- package/src/engine/acp/types.ts +6 -1
- package/src/engine/antigravity/subprocess-runtime.ts +20 -4
- package/src/engine/api-registry.ts +19 -2
- package/src/engine/apis/openai-completions.ts +13 -6
- package/src/engine/apis/output-budget.ts +26 -10
- package/src/engine/claude/sdk-runtime.ts +4 -3
- package/src/engine/env-api-keys.ts +2 -1
- package/src/engine/external-subprocess.ts +14 -3
- package/src/engine/loop-guard.ts +19 -2
- package/src/engine/provider-diagnostics.ts +129 -0
- package/src/engine/provider-payload.ts +3 -1
- package/src/engine/worker-runtime.ts +13 -2
- package/src/engine/worker-tools.ts +5 -1
- package/src/entry/extension-reload.ts +1 -0
- package/src/entry/orchestrator.ts +53 -15
- package/src/interactive/chat-loop-messages.ts +12 -4
- package/src/interactive/chat-loop.ts +115 -45
- package/src/interactive/chat-renderer.ts +60 -0
- package/src/interactive/context-recall-command.ts +2 -1
- package/src/interactive/dispatch-board.ts +17 -2
- package/src/interactive/editor-submit.ts +13 -0
- package/src/interactive/interactive-application.ts +8 -2
- package/src/interactive/interactive-event-projection.ts +7 -1
- package/src/interactive/interactive-presentation.ts +15 -7
- package/src/interactive/interactive-slash-runtime.ts +2 -0
- package/src/interactive/layout.ts +2 -1
- package/src/interactive/model-session-replay.ts +2 -2
- package/src/interactive/overlay-frame.ts +1 -0
- package/src/interactive/overlay-general-openers.ts +3 -1
- package/src/interactive/overlay-session-lifecycle.ts +6 -0
- package/src/interactive/overlays/ask-user.ts +1 -0
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/renderers/tool-execution.ts +17 -1
- package/src/interactive/renderers/worker-entry.ts +25 -10
- package/src/interactive/slash-commands.ts +9 -7
- package/src/interactive/turn-context.ts +221 -53
- package/src/interactive/turn-middleware.ts +3 -1
- package/src/interactive/turn-persistence.ts +3 -0
- package/src/interactive/turn-runtime.ts +11 -2
- package/src/interactive/turn-state.ts +10 -9
- package/src/interactive/watch-pane.ts +18 -4
- package/src/interactive/worker-stream.ts +7 -7
- package/src/tools/agent-tools.ts +6 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +9 -2
- package/src/tools/codewiki/code-nav.ts +4 -10
- package/src/tools/compete-judge-task.ts +71 -0
- package/src/tools/compete-worktrees.ts +34 -0
- package/src/tools/context/index.ts +32 -7
- package/src/tools/context/surface.ts +15 -4
- package/src/tools/decide.ts +1 -1
- package/src/tools/dispatch-admission.ts +12 -1
- package/src/tools/dispatch-arguments.ts +38 -1
- package/src/tools/dispatch-plan.ts +7 -7
- package/src/tools/dispatch-runner.ts +48 -32
- package/src/tools/dispatch-schema.ts +30 -23
- package/src/tools/dispatch-scout-admission.ts +10 -44
- package/src/tools/dispatch-scout.ts +2 -3
- package/src/tools/find.ts +13 -4
- package/src/tools/grep.ts +13 -1
- package/src/tools/ls.ts +7 -1
- package/src/tools/monitor.ts +26 -11
- package/src/tools/network-policy.ts +11 -24
- package/src/tools/observation.ts +39 -2
- package/src/tools/read.ts +112 -15
- package/src/tools/registry.ts +54 -17
- package/src/tools/result-shaping.ts +110 -2
- package/src/tools/tasks.ts +33 -7
- package/src/tools/verify/frontend.ts +67 -30
- package/src/tools/verify/numeric.ts +6 -1
- package/src/tools/web-fetch-network.ts +179 -0
- package/src/tools/web-fetch-surface.ts +2 -1
- package/src/tools/web-fetch.ts +15 -13
- package/src/tools/worker-evidence.ts +27 -0
- package/src/worker/spec-contract.ts +12 -8
- package/dist/builtins-WGALA46I.js +0 -22
- package/dist/chunk-2WZ546HR.js +0 -792
- package/dist/chunk-5PSMVOLM.js +0 -56
- package/dist/chunk-EL24TAU4.js +0 -1560
- package/dist/chunk-IZXGRF7P.js +0 -4048
- package/dist/chunk-JVCV3ICN.js +0 -47
- package/dist/chunk-MNJGS2IN.js +0 -33
- package/dist/chunk-O5CVSAG5.js +0 -122
- package/dist/chunk-ODGTEFFI.js +0 -50
- package/dist/chunk-OQE5J4C6.js +0 -73
- package/dist/chunk-UUVG37B4.js +0 -244
- package/dist/chunk-V6HJFQZE.js +0 -228
- package/dist/clio-QLICPCF5.js +0 -25
- package/dist/configure-VEPX4NMX.js +0 -55
- package/dist/context-clear-S4ZJCQUX.js +0 -182
- package/dist/detail-A7JAVSIG.js +0 -98
- package/dist/evidence-4F5USFKH.js +0 -208
- package/dist/fleet-view-MN2VG4MR.js +0 -101
- package/dist/inventory-C26CFDRR.js +0 -101
- package/dist/preload-P6DGH2PZ.js +0 -13
- package/dist/slash-commands-ZXPJD64J.js +0 -92
- package/dist/tasks-IPAGMEIX.js +0 -36
- package/dist/tools-EFFEAIDP.js +0 -28
- package/dist/verify-FWYGPKMR.js +0 -29
- package/dist/wiki-generate-743CIGJW.js +0 -476
|
@@ -3,7 +3,7 @@ import { existsSync, readFileSync } from "node:fs";
|
|
|
3
3
|
import { hostname } from "node:os";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { BIRTH_TOKEN_SOURCE_AVAILABLE, processAlive, processBirthToken } from "../../core/process-identity.js";
|
|
6
|
-
import { FILE_LOCK_ACQUIRE_TIMEOUT_MS, withStateFileLockSync } from "../../core/state-file-lock.js";
|
|
6
|
+
import { FILE_LOCK_ACQUIRE_TIMEOUT_MS, withStateFileLock, withStateFileLockSync } from "../../core/state-file-lock.js";
|
|
7
7
|
import { clioStateDir } from "../../core/xdg.js";
|
|
8
8
|
import { atomicWrite } from "../../engine/session.js";
|
|
9
9
|
import { endpointLabel, foregroundStreamUsage } from "../providers/endpoint-capacity.js";
|
|
@@ -187,7 +187,10 @@ const MEMBER_STATUSES = new Set(["held", "consumed", "released"]);
|
|
|
187
187
|
* rejected here as well: silently skipping an unreadable record would under-count
|
|
188
188
|
* capacity and admit past the cap.
|
|
189
189
|
*/
|
|
190
|
-
function heldReservationUsage(
|
|
190
|
+
function heldReservationUsage(
|
|
191
|
+
values: ReadonlyArray<unknown>,
|
|
192
|
+
transferring?: { ownerId: string; memberId: string },
|
|
193
|
+
): {
|
|
191
194
|
global: number;
|
|
192
195
|
nodes: Record<string, number>;
|
|
193
196
|
endpoints: Record<string, number>;
|
|
@@ -198,13 +201,24 @@ function heldReservationUsage(values: ReadonlyArray<unknown>): {
|
|
|
198
201
|
for (const value of values) {
|
|
199
202
|
if (typeof value !== "object" || value === null)
|
|
200
203
|
throw new Error("dispatch capacity store has invalid reservation records");
|
|
201
|
-
const record = value as { status?: unknown; members?: unknown };
|
|
204
|
+
const record = value as { ownerId?: unknown; status?: unknown; members?: unknown };
|
|
202
205
|
if (typeof record.status !== "string" || !RESERVATION_STATUSES.has(record.status) || !Array.isArray(record.members))
|
|
203
206
|
throw new Error("dispatch capacity store has invalid reservation records");
|
|
204
207
|
if (record.status !== "active") continue;
|
|
205
208
|
const byWave = new Map<number, number>();
|
|
206
209
|
const byNodeWave = new Map<string, Map<number, number>>();
|
|
207
210
|
const byEndpointWave = new Map<string, Map<number, number>>();
|
|
211
|
+
let transferringWave: number | undefined;
|
|
212
|
+
if (transferring !== undefined && record.ownerId === transferring.ownerId) {
|
|
213
|
+
const member = record.members.find(
|
|
214
|
+
(raw) => typeof raw === "object" && raw !== null && raw.memberId === transferring.memberId,
|
|
215
|
+
);
|
|
216
|
+
// Transfer validates and consumes the member under this same lock.
|
|
217
|
+
// A retry's existing lease also carries that validated identity.
|
|
218
|
+
if (member?.status !== "consumed" || !Number.isInteger(member.wave))
|
|
219
|
+
throw new Error("dispatch: capacity transfer requires a consumed reservation member");
|
|
220
|
+
transferringWave = member.wave;
|
|
221
|
+
}
|
|
208
222
|
for (const raw of record.members) {
|
|
209
223
|
if (typeof raw !== "object" || raw === null)
|
|
210
224
|
throw new Error("dispatch capacity store has invalid reservation records");
|
|
@@ -218,12 +232,16 @@ function heldReservationUsage(values: ReadonlyArray<unknown>): {
|
|
|
218
232
|
throw new Error("dispatch capacity store has invalid reservation records");
|
|
219
233
|
if (member.status !== "held") continue;
|
|
220
234
|
const wave = member.wave as number;
|
|
235
|
+
if (member.endpointKey !== undefined && typeof member.endpointKey !== "string")
|
|
236
|
+
throw new Error("dispatch capacity store has invalid reservation records");
|
|
237
|
+
// Waves reuse the owner's reserved slots. Only its same-wave peers
|
|
238
|
+
// compete with this lease; other waves stay held in durable state and
|
|
239
|
+
// still count at their full peak against every other owner.
|
|
240
|
+
if (transferringWave !== undefined && wave !== transferringWave) continue;
|
|
221
241
|
byWave.set(wave, (byWave.get(wave) ?? 0) + 1);
|
|
222
242
|
const nodeWaves = byNodeWave.get(member.nodeId) ?? new Map<number, number>();
|
|
223
243
|
nodeWaves.set(wave, (nodeWaves.get(wave) ?? 0) + 1);
|
|
224
244
|
byNodeWave.set(member.nodeId, nodeWaves);
|
|
225
|
-
if (member.endpointKey !== undefined && typeof member.endpointKey !== "string")
|
|
226
|
-
throw new Error("dispatch capacity store has invalid reservation records");
|
|
227
245
|
if (typeof member.endpointKey === "string") {
|
|
228
246
|
const endpointWaves = byEndpointWave.get(member.endpointKey) ?? new Map<number, number>();
|
|
229
247
|
endpointWaves.set(wave, (endpointWaves.get(wave) ?? 0) + 1);
|
|
@@ -288,8 +306,9 @@ function assertCapacity(
|
|
|
288
306
|
nodeId: string,
|
|
289
307
|
endpointKey: string | undefined,
|
|
290
308
|
limits: CapacityLimits,
|
|
309
|
+
transferring?: { ownerId: string; memberId: string },
|
|
291
310
|
): void {
|
|
292
|
-
const held = heldReservationUsage(file.reservations);
|
|
311
|
+
const held = heldReservationUsage(file.reservations, transferring);
|
|
293
312
|
const globalUsed = file.leases.length + held.global;
|
|
294
313
|
// The denial names the compliant next move, not just the gate. A model told
|
|
295
314
|
// only that it is full re-dispatches with a different agent; the work it is
|
|
@@ -350,7 +369,15 @@ export function acquireCapacityLease(input: {
|
|
|
350
369
|
if (existing) {
|
|
351
370
|
if (existing.nodeId !== input.nodeId || existing.endpointKey !== input.endpointKey) {
|
|
352
371
|
const without = { ...file, leases: file.leases.filter((lease) => lease !== existing) };
|
|
353
|
-
assertCapacity(
|
|
372
|
+
assertCapacity(
|
|
373
|
+
without,
|
|
374
|
+
input.nodeId,
|
|
375
|
+
input.endpointKey,
|
|
376
|
+
input.limits,
|
|
377
|
+
existing.reservationOwnerId !== null && existing.reservationMemberId !== null
|
|
378
|
+
? { ownerId: existing.reservationOwnerId, memberId: existing.reservationMemberId }
|
|
379
|
+
: undefined,
|
|
380
|
+
);
|
|
354
381
|
existing.nodeId = input.nodeId;
|
|
355
382
|
if (input.endpointKey === undefined) delete existing.endpointKey;
|
|
356
383
|
else existing.endpointKey = input.endpointKey;
|
|
@@ -361,7 +388,7 @@ export function acquireCapacityLease(input: {
|
|
|
361
388
|
return clone(existing);
|
|
362
389
|
}
|
|
363
390
|
input.onAcquiredUnderLock?.(file);
|
|
364
|
-
assertCapacity(file, input.nodeId, input.endpointKey, input.limits);
|
|
391
|
+
assertCapacity(file, input.nodeId, input.endpointKey, input.limits, input.reservation);
|
|
365
392
|
const token = input.processBirthToken ?? processBirthToken(input.ownerPid ?? process.pid);
|
|
366
393
|
if (!token) throw new Error("dispatch: cannot establish process birth token");
|
|
367
394
|
const at = new Date(nowMs).toISOString();
|
|
@@ -454,13 +481,34 @@ export function capacityDrain(nowMs = Date.now()): CapacityDrain | null {
|
|
|
454
481
|
return drain;
|
|
455
482
|
});
|
|
456
483
|
}
|
|
484
|
+
/** Synchronous usage read for admission planners whose host API cannot yield. */
|
|
457
485
|
export function capacityLeaseUsage(options?: { nowMs?: number; probe?: LeaseOwnerProbe }): {
|
|
458
486
|
global: number;
|
|
459
487
|
nodes: Readonly<Record<string, number>>;
|
|
460
488
|
endpoints: Readonly<Record<string, number>>;
|
|
461
489
|
endpointHolders: Readonly<Record<string, EndpointCapacityHolders>>;
|
|
462
490
|
} {
|
|
463
|
-
|
|
491
|
+
return withStateFileLockSync(capacityStateLockPath(), () => capacityLeaseUsageUnsafe(options));
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/** Fresh usage for async admission: wait for the same lock without blocking callbacks. */
|
|
495
|
+
export function capacityLeaseUsageAsync(options?: {
|
|
496
|
+
nowMs?: number;
|
|
497
|
+
probe?: LeaseOwnerProbe;
|
|
498
|
+
}): Promise<ReturnType<typeof capacityLeaseUsage>> {
|
|
499
|
+
return withStateFileLock(capacityStateLockPath(), () => capacityLeaseUsageUnsafe(options));
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/** The caller holds the capacity state lock for this read and any reclamation write. */
|
|
503
|
+
function capacityLeaseUsageUnsafe(options?: {
|
|
504
|
+
nowMs?: number;
|
|
505
|
+
probe?: LeaseOwnerProbe;
|
|
506
|
+
}): ReturnType<typeof capacityLeaseUsage> {
|
|
507
|
+
const file = readCapacityStateUnsafe();
|
|
508
|
+
const before = file.leases.length;
|
|
509
|
+
reclaim(file, options?.nowMs ?? Date.now(), options?.probe ?? defaultProbe);
|
|
510
|
+
if (before !== file.leases.length) writeCapacityStateUnsafe(file);
|
|
511
|
+
const leases = file.leases;
|
|
464
512
|
const nodes: Record<string, number> = {};
|
|
465
513
|
const foreground = foregroundStreamUsage();
|
|
466
514
|
const endpoints: Record<string, number> = { ...foreground };
|
|
@@ -524,13 +572,3 @@ export function createNodeLeaseUsageReader(options: {
|
|
|
524
572
|
return cache.nodes[nodeId] ?? 0;
|
|
525
573
|
};
|
|
526
574
|
}
|
|
527
|
-
|
|
528
|
-
function listCapacityLeases(options?: { nowMs?: number; probe?: LeaseOwnerProbe }): ReadonlyArray<CapacityLease> {
|
|
529
|
-
return withStateFileLockSync(capacityStateLockPath(), () => {
|
|
530
|
-
const file = readCapacityStateUnsafe();
|
|
531
|
-
const before = file.leases.length;
|
|
532
|
-
reclaim(file, options?.nowMs ?? Date.now(), options?.probe ?? defaultProbe);
|
|
533
|
-
if (before !== file.leases.length) writeCapacityStateUnsafe(file);
|
|
534
|
-
return file.leases.map(clone);
|
|
535
|
-
});
|
|
536
|
-
}
|
|
@@ -10,7 +10,7 @@ import type { AssignmentId, DispatchAssignment } from "./assignment.js";
|
|
|
10
10
|
import type { DurableAssignmentRecord } from "./assignment-store.js";
|
|
11
11
|
import type { DetachedBatchRecord, RegisterDetachedBatchInput } from "./batch-store.js";
|
|
12
12
|
import type { RunToolBudgetEnvelope } from "./budget-envelope.js";
|
|
13
|
-
import type { ExecutionRole } from "./execution-role.js";
|
|
13
|
+
import type { DispatchResultSummaryAllowance, ExecutionRole } from "./execution-role.js";
|
|
14
14
|
import type { DispatchReservationRecord, ReservationTopology } from "./reservation-store.js";
|
|
15
15
|
import type { ApprovedAssignmentRoute } from "./route-approval.js";
|
|
16
16
|
import type { RouteDecisionV1 } from "./route-decision.js";
|
|
@@ -34,6 +34,12 @@ export interface ResolvedVerificationCheck {
|
|
|
34
34
|
export interface DispatchRequest extends JobSpec {
|
|
35
35
|
/** Coordinator-owned result contract override for a fleet plan step. */
|
|
36
36
|
resultContractOverride?: ResultContract;
|
|
37
|
+
/**
|
|
38
|
+
* Caller's inline-summary allowance for a mutation-report worker, applied
|
|
39
|
+
* by `dispatchResultContract`. Parsed and range-checked at the tool
|
|
40
|
+
* boundary; never model-authored past that point.
|
|
41
|
+
*/
|
|
42
|
+
resultSummary?: DispatchResultSummaryAllowance;
|
|
37
43
|
/** Gate path whose post-run hash is sealed into this step's receipt. */
|
|
38
44
|
fleetGateReceipt?: { path: string };
|
|
39
45
|
/** Orchestrator-prepared task worktree state. Model arguments cannot author it. */
|
|
@@ -84,7 +90,7 @@ export interface DispatchRequest extends JobSpec {
|
|
|
84
90
|
* strips the ledger tool from this run's admitted surface.
|
|
85
91
|
*/
|
|
86
92
|
ledger?: { id: string; sequence: number };
|
|
87
|
-
/**
|
|
93
|
+
/** Explicit absolute root-assignment deadline, preserved through retries; absent for advisory estimates. */
|
|
88
94
|
assignmentDeadlineAt?: number;
|
|
89
95
|
/**
|
|
90
96
|
* Tool call the caller was executing when it built this request. Stamped by
|
|
@@ -112,6 +118,8 @@ export interface DispatchAdmissionObserver {
|
|
|
112
118
|
|
|
113
119
|
/** Invocation-owned admission bounds; never serialized into model-authored requests. */
|
|
114
120
|
export interface DispatchPreparationOptions {
|
|
121
|
+
/** Host ancestry for publication; kept separate from logical assignment/retry identity. */
|
|
122
|
+
hostRun?: { readonly runId: string; readonly lineage: Readonly<RunLineage> };
|
|
115
123
|
signal?: AbortSignal;
|
|
116
124
|
deadlineAt?: number;
|
|
117
125
|
}
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
import { truncateUtf8 } from "../../tools/truncate-utf8.js";
|
|
20
|
+
import { type ResultContract, resultContractOutputBytes } from "../agents/result-contract.js";
|
|
20
21
|
import type { RunReceiptOutput } from "./types.js";
|
|
21
22
|
|
|
22
23
|
/** Bounded replay capacity for the external consumer tee. */
|
|
@@ -137,15 +138,33 @@ export function startDispatchEventPump(
|
|
|
137
138
|
* Byte bound on the assistant output text sealed into a receipt. Large enough
|
|
138
139
|
* for a substantive final answer, small enough that receipts stay cheap to
|
|
139
140
|
* read and render; overflow is recorded explicitly via `truncated`/`bytes`.
|
|
141
|
+
* A run whose result contract implies a larger conforming result raises its
|
|
142
|
+
* own bound through `workerOutputCaptureBytes`; this is the floor.
|
|
140
143
|
*/
|
|
141
144
|
export const WORKER_OUTPUT_MAX_BYTES = 8192;
|
|
142
145
|
const WORKER_OUTPUT_TRUNCATION_MARKER = "\n[worker output truncated]";
|
|
143
146
|
|
|
147
|
+
/**
|
|
148
|
+
* The capture bound for one run. A mutation report with a 16 KB summary
|
|
149
|
+
* allowance cannot be sealed in 8 KB, and clipping it produced a receipt whose
|
|
150
|
+
* only readable fact was "result must be valid JSON" for a result that was
|
|
151
|
+
* valid (#350). The contract's own whole-result bound wins when it is larger;
|
|
152
|
+
* every other contract keeps the floor.
|
|
153
|
+
*/
|
|
154
|
+
export function workerOutputCaptureBytes(contract: ResultContract | null | undefined): number {
|
|
155
|
+
return Math.max(WORKER_OUTPUT_MAX_BYTES, resultContractOutputBytes(contract) ?? 0);
|
|
156
|
+
}
|
|
157
|
+
|
|
144
158
|
export interface WorkerOutputCapture {
|
|
145
159
|
observe(event: unknown): void;
|
|
146
160
|
snapshot(): RunReceiptOutput | undefined;
|
|
147
161
|
}
|
|
148
162
|
|
|
163
|
+
export interface WorkerOutputCaptureOptions {
|
|
164
|
+
/** Byte bound for the sealed text; defaults to WORKER_OUTPUT_MAX_BYTES. */
|
|
165
|
+
maxBytes?: number;
|
|
166
|
+
}
|
|
167
|
+
|
|
149
168
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
150
169
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
151
170
|
}
|
|
@@ -184,9 +203,9 @@ export function durableAssistantTextFromEvent(event: unknown): string {
|
|
|
184
203
|
return assistantTextFromContent(event.message.content);
|
|
185
204
|
}
|
|
186
205
|
|
|
187
|
-
function boundedOutput(state: RunReceiptOutput["state"], text: string): RunReceiptOutput {
|
|
206
|
+
function boundedOutput(state: RunReceiptOutput["state"], text: string, maxBytes: number): RunReceiptOutput {
|
|
188
207
|
const bytes = Buffer.byteLength(text, "utf8");
|
|
189
|
-
const bounded = truncateUtf8(text,
|
|
208
|
+
const bounded = truncateUtf8(text, maxBytes, WORKER_OUTPUT_TRUNCATION_MARKER);
|
|
190
209
|
return { state, text: bounded, bytes, truncated: bounded !== text };
|
|
191
210
|
}
|
|
192
211
|
|
|
@@ -199,9 +218,11 @@ function boundedOutput(state: RunReceiptOutput["state"], text: string): RunRecei
|
|
|
199
218
|
* partial and are discarded when their message completes. A run that ends
|
|
200
219
|
* with unflushed deltas (abort, stall, kill mid-message) therefore snapshots
|
|
201
220
|
* as `partial`, never as final. Accumulation is bounded in memory by the same
|
|
202
|
-
* byte cap the receipt uses; overflow only marks truncation.
|
|
221
|
+
* byte cap the receipt uses; overflow only marks truncation. The cap is the
|
|
222
|
+
* run's own (`workerOutputCaptureBytes`), never below the module floor.
|
|
203
223
|
*/
|
|
204
|
-
export function createWorkerOutputCapture(): WorkerOutputCapture {
|
|
224
|
+
export function createWorkerOutputCapture(options: WorkerOutputCaptureOptions = {}): WorkerOutputCapture {
|
|
225
|
+
const maxBytes = Math.max(WORKER_OUTPUT_MAX_BYTES, Math.floor(options.maxBytes ?? WORKER_OUTPUT_MAX_BYTES));
|
|
205
226
|
let finalText: string | null = null;
|
|
206
227
|
let partialText = "";
|
|
207
228
|
let partialBytes = 0;
|
|
@@ -229,14 +250,14 @@ export function createWorkerOutputCapture(): WorkerOutputCapture {
|
|
|
229
250
|
const delta = assistantEvent.delta;
|
|
230
251
|
if (typeof delta !== "string" || delta.length === 0) return;
|
|
231
252
|
partialBytes += Buffer.byteLength(delta, "utf8");
|
|
232
|
-
if (partialStored <
|
|
253
|
+
if (partialStored < maxBytes) {
|
|
233
254
|
partialText += delta;
|
|
234
255
|
partialStored += Buffer.byteLength(delta, "utf8");
|
|
235
256
|
}
|
|
236
257
|
},
|
|
237
258
|
snapshot(): RunReceiptOutput | undefined {
|
|
238
259
|
if (partialBytes > 0 && partialText.trim().length > 0) {
|
|
239
|
-
const bounded = truncateUtf8(partialText.trim(),
|
|
260
|
+
const bounded = truncateUtf8(partialText.trim(), maxBytes, WORKER_OUTPUT_TRUNCATION_MARKER);
|
|
240
261
|
return {
|
|
241
262
|
state: "partial",
|
|
242
263
|
text: bounded,
|
|
@@ -244,7 +265,7 @@ export function createWorkerOutputCapture(): WorkerOutputCapture {
|
|
|
244
265
|
truncated: bounded !== partialText.trim() || partialBytes > partialStored,
|
|
245
266
|
};
|
|
246
267
|
}
|
|
247
|
-
if (finalText !== null) return boundedOutput("final", finalText);
|
|
268
|
+
if (finalText !== null) return boundedOutput("final", finalText, maxBytes);
|
|
248
269
|
return undefined;
|
|
249
270
|
},
|
|
250
271
|
};
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* clock, no engine state.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import type
|
|
17
|
+
import { type ResultContract, withResultSummaryAllowance } from "../agents/result-contract.js";
|
|
18
18
|
import type { AgentCapabilityClass } from "../agents/spec.js";
|
|
19
19
|
|
|
20
20
|
/**
|
|
@@ -181,10 +181,57 @@ export function gateDeciderAgentId(requested: string | undefined): string {
|
|
|
181
181
|
* the recipe postcondition on the slot sealed a contract failure on every
|
|
182
182
|
* correct synthesis and burned the configured retries reproducing it.
|
|
183
183
|
*/
|
|
184
|
-
|
|
184
|
+
function appliesRecipeResultContract(gateRole: GateTopologyRole | undefined): boolean {
|
|
185
185
|
return gateRole !== "reviewer" && gateRole !== "judge" && gateRole !== "synthesis";
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
+
/** A caller's summary allowance for one dispatch, with where it was set. */
|
|
189
|
+
export interface DispatchResultSummaryAllowance {
|
|
190
|
+
maxBytes: number;
|
|
191
|
+
/**
|
|
192
|
+
* `task` is an explicit setting on this one assignment; `batch` is the
|
|
193
|
+
* shared default every member of a batch or pipeline inherits. Only the
|
|
194
|
+
* explicit form can be a caller error on a recipe with no summary field.
|
|
195
|
+
*/
|
|
196
|
+
scope: "task" | "batch";
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/** The request fields the applied result contract is resolved from. */
|
|
200
|
+
export interface DispatchResultContractRequest {
|
|
201
|
+
agentId: string;
|
|
202
|
+
gate?: { role?: GateTopologyRole } | undefined;
|
|
203
|
+
resultContractOverride?: ResultContract;
|
|
204
|
+
resultSummary?: DispatchResultSummaryAllowance;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* The one resolution of the contract a run is validated and sealed against.
|
|
209
|
+
* Every reader (the worker spec, the capture bound, the seal) calls this so
|
|
210
|
+
* the worker repairs against exactly the contract the receipt will name.
|
|
211
|
+
*
|
|
212
|
+
* Precedence: a gate role that answers its topology has no recipe contract at
|
|
213
|
+
* all; otherwise the coordinator's override, else the seated recipe's. A
|
|
214
|
+
* caller's summary allowance then applies to a mutation report only. A
|
|
215
|
+
* topology-owned override (ballot, plan, artifact) and a batch-level default
|
|
216
|
+
* inherited by a non-mutation step ignore it, because the allowance was never
|
|
217
|
+
* about that step. An explicit per-task allowance on a recipe with no summary
|
|
218
|
+
* field is a caller error and fails here, before any model boots.
|
|
219
|
+
*/
|
|
220
|
+
export function dispatchResultContract(
|
|
221
|
+
req: DispatchResultContractRequest,
|
|
222
|
+
recipe: { resultContract: ResultContract } | null | undefined,
|
|
223
|
+
): ResultContract | undefined {
|
|
224
|
+
if (!appliesRecipeResultContract(req.gate?.role)) return undefined;
|
|
225
|
+
const base = req.resultContractOverride ?? recipe?.resultContract;
|
|
226
|
+
const allowance = req.resultSummary;
|
|
227
|
+
if (allowance === undefined) return base;
|
|
228
|
+
if (base?.kind === "mutation-report") return withResultSummaryAllowance(base, allowance.maxBytes);
|
|
229
|
+
if (req.resultContractOverride !== undefined || allowance.scope === "batch") return base;
|
|
230
|
+
throw new Error(
|
|
231
|
+
`dispatch: result_summary_max_bytes applies only to a mutation-report result contract; agent '${req.agentId}' declares ${base === undefined ? "no result contract" : base.kind}`,
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
|
|
188
235
|
/** The route dimensions a gate correlation is measured across. */
|
|
189
236
|
export interface RouteCorrelationFacts {
|
|
190
237
|
agentId: string;
|
|
@@ -11,6 +11,8 @@ import {
|
|
|
11
11
|
} from "./execution-plan.js";
|
|
12
12
|
|
|
13
13
|
export interface ExecutionStepResult extends ExecutionHandoff {
|
|
14
|
+
/** Coordinator-owned immutable recovery reference captured before loop repair. */
|
|
15
|
+
workspaceCheckpoint?: string;
|
|
14
16
|
succeeded: boolean;
|
|
15
17
|
integrityValid: boolean;
|
|
16
18
|
/** Decision refs the step's sealed receipt was made under; absent for code steps and decision-free runs. */
|