@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
|
@@ -117,6 +117,15 @@ export function buildAgyArgs(input: WorkerRunInput, gateEnv: NodeJS.ProcessEnv =
|
|
|
117
117
|
"--disable-slash-commands",
|
|
118
118
|
];
|
|
119
119
|
if (input.wireModelId.trim().length > 0) args.push("--model", input.wireModelId.trim());
|
|
120
|
+
if (typeof input.sessionId === "string" && input.sessionId.length > 0) {
|
|
121
|
+
if (Buffer.byteLength(input.sessionId, "utf8") > MAX_CONVERSATION_ID_BYTES) {
|
|
122
|
+
throw new Error(`Antigravity sessionId exceeded ${MAX_CONVERSATION_ID_BYTES} bytes`);
|
|
123
|
+
}
|
|
124
|
+
if (/\p{Cc}/u.test(input.sessionId)) {
|
|
125
|
+
throw new Error("Antigravity sessionId must not contain control characters");
|
|
126
|
+
}
|
|
127
|
+
args.push("--conversation", input.sessionId);
|
|
128
|
+
}
|
|
120
129
|
return args;
|
|
121
130
|
}
|
|
122
131
|
|
|
@@ -245,7 +254,12 @@ function emitTextDelta(emit: WorkerEventEmit, state: StreamState, delta: string)
|
|
|
245
254
|
} as AgentEvent);
|
|
246
255
|
}
|
|
247
256
|
|
|
248
|
-
async function readStream(
|
|
257
|
+
async function readStream(
|
|
258
|
+
child: AntigravityChildProcess,
|
|
259
|
+
emit: WorkerEventEmit,
|
|
260
|
+
state: StreamState,
|
|
261
|
+
requestedConversationId: string | undefined,
|
|
262
|
+
): Promise<void> {
|
|
249
263
|
for await (const bounded of readBoundedLines(child.stdout, {
|
|
250
264
|
maxLineBytes: ANTIGRAVITY_MAX_STREAM_LINE_BYTES,
|
|
251
265
|
maxTotalBytes: ANTIGRAVITY_MAX_STREAM_BYTES,
|
|
@@ -272,6 +286,9 @@ async function readStream(child: AntigravityChildProcess, emit: WorkerEventEmit,
|
|
|
272
286
|
break;
|
|
273
287
|
}
|
|
274
288
|
state.initSeen = true;
|
|
289
|
+
if (requestedConversationId && event.conversationId !== requestedConversationId) {
|
|
290
|
+
protocolFailure(state, "requested conversation was not resumed");
|
|
291
|
+
}
|
|
275
292
|
state.conversationId = boundedConversationId(event.conversationId);
|
|
276
293
|
if (event.model?.trim()) state.model = event.model.trim();
|
|
277
294
|
break;
|
|
@@ -354,8 +371,7 @@ function buildAssistantMessage(input: {
|
|
|
354
371
|
stopReason: input.aborted ? "aborted" : succeeded ? "stop" : "error",
|
|
355
372
|
timestamp: Date.now(),
|
|
356
373
|
} as AgentMessage & { role: "assistant" };
|
|
357
|
-
// Opaque provider observation only
|
|
358
|
-
// resumable Clio session id.
|
|
374
|
+
// Opaque provider observation only; callers must explicitly request resume.
|
|
359
375
|
if (input.conversationId) message.responseId = input.conversationId;
|
|
360
376
|
if (input.diagnostic) message.errorMessage = boundedExternalDiagnostic(input.diagnostic);
|
|
361
377
|
return message;
|
|
@@ -414,7 +430,7 @@ export function startAntigravityWorkerRun(
|
|
|
414
430
|
emit({ type: "agent_start" } as AgentEvent);
|
|
415
431
|
try {
|
|
416
432
|
const stderrPromise = readStderr(child);
|
|
417
|
-
const stdoutPromise = readStream(child, emit, streamState).catch((cause) => {
|
|
433
|
+
const stdoutPromise = readStream(child, emit, streamState, input.sessionId).catch((cause) => {
|
|
418
434
|
streamError = boundedExternalDiagnostic(cause instanceof Error ? cause.message : String(cause));
|
|
419
435
|
terminator.terminate();
|
|
420
436
|
});
|
|
@@ -27,6 +27,7 @@ import "@earendil-works/pi-ai/providers/images/register-builtins";
|
|
|
27
27
|
|
|
28
28
|
import { getEngineEnvApiKey } from "./env-api-keys.js";
|
|
29
29
|
import { engineModels } from "./models.js";
|
|
30
|
+
import { instrumentProviderCall } from "./provider-diagnostics.js";
|
|
30
31
|
|
|
31
32
|
export interface EngineRegisteredApiProvider extends ProviderStreams {
|
|
32
33
|
api: Api;
|
|
@@ -134,7 +135,7 @@ function hasCloudflareAuth(options?: StreamOptions): boolean {
|
|
|
134
135
|
);
|
|
135
136
|
}
|
|
136
137
|
|
|
137
|
-
|
|
138
|
+
function dispatchEngineStream(
|
|
138
139
|
model: Model<Api>,
|
|
139
140
|
context: Context,
|
|
140
141
|
options?: StreamOptions,
|
|
@@ -151,7 +152,7 @@ export function engineStream(
|
|
|
151
152
|
return resolved(model.api).stream(model, context, withEnvApiKey(model, options));
|
|
152
153
|
}
|
|
153
154
|
|
|
154
|
-
|
|
155
|
+
function dispatchEngineStreamSimple(
|
|
155
156
|
model: Model<Api>,
|
|
156
157
|
context: Context,
|
|
157
158
|
options?: SimpleStreamOptions,
|
|
@@ -168,6 +169,22 @@ export function engineStreamSimple(
|
|
|
168
169
|
return resolved(model.api).streamSimple(model, context, withEnvApiKey(model, options));
|
|
169
170
|
}
|
|
170
171
|
|
|
172
|
+
export function engineStream(
|
|
173
|
+
model: Model<Api>,
|
|
174
|
+
context: Context,
|
|
175
|
+
options?: StreamOptions,
|
|
176
|
+
): AssistantMessageEventStream {
|
|
177
|
+
return instrumentProviderCall(model, options, (effective) => dispatchEngineStream(model, context, effective));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export function engineStreamSimple(
|
|
181
|
+
model: Model<Api>,
|
|
182
|
+
context: Context,
|
|
183
|
+
options?: SimpleStreamOptions,
|
|
184
|
+
): AssistantMessageEventStream {
|
|
185
|
+
return instrumentProviderCall(model, options, (effective) => dispatchEngineStreamSimple(model, context, effective));
|
|
186
|
+
}
|
|
187
|
+
|
|
171
188
|
export async function completeEngineSimple(
|
|
172
189
|
model: Model<Api>,
|
|
173
190
|
context: Context,
|
|
@@ -41,6 +41,7 @@ import { mergeSamplingOverride } from "./sampling-overrides.js";
|
|
|
41
41
|
import type { EngineApiProvider } from "./types.js";
|
|
42
42
|
|
|
43
43
|
const REASONING_CHARS_PER_TOKEN = 4;
|
|
44
|
+
const ownedModelsByTarget = new Map<string, Set<string>>();
|
|
44
45
|
|
|
45
46
|
interface ClioRuntimeMetadata {
|
|
46
47
|
clioCoder?: {
|
|
@@ -293,7 +294,10 @@ async function listResidentOllamaModels(client: OllamaEvictClient): Promise<Resi
|
|
|
293
294
|
* weights release.
|
|
294
295
|
*/
|
|
295
296
|
async function unloadOllamaModel(baseUrl: string, modelId: string, headers?: Record<string, string>): Promise<void> {
|
|
297
|
+
const owned = ownedModelsByTarget.get(residencyTargetKey("ollama-native", baseUrl));
|
|
298
|
+
if (!owned?.has(modelId)) return;
|
|
296
299
|
await ollamaEvictClient(baseUrl, headers).generate({ model: modelId, prompt: "", keep_alive: 0, stream: false });
|
|
300
|
+
owned.delete(modelId);
|
|
297
301
|
}
|
|
298
302
|
|
|
299
303
|
function mapStopReason(reason: string | undefined, hadToolCall: boolean): AssistantMessage["stopReason"] {
|
|
@@ -466,8 +470,19 @@ function runStream(
|
|
|
466
470
|
else emitText(segment.content);
|
|
467
471
|
}
|
|
468
472
|
};
|
|
473
|
+
let recordedOwnership = false;
|
|
469
474
|
for await (const chunk of iterator) {
|
|
470
475
|
const response = chunk as ChatResponse;
|
|
476
|
+
if (!recordedOwnership && model.baseUrl) {
|
|
477
|
+
const targetKey = residencyTargetKey("ollama-native", model.baseUrl);
|
|
478
|
+
let owned = ownedModelsByTarget.get(targetKey);
|
|
479
|
+
if (!owned) {
|
|
480
|
+
owned = new Set<string>();
|
|
481
|
+
ownedModelsByTarget.set(targetKey, owned);
|
|
482
|
+
}
|
|
483
|
+
owned.add(response.model || model.id);
|
|
484
|
+
recordedOwnership = true;
|
|
485
|
+
}
|
|
471
486
|
const msg = response.message;
|
|
472
487
|
if (msg?.thinking && msg.thinking.length > 0) {
|
|
473
488
|
emitThinking(msg.thinking);
|
|
@@ -297,13 +297,14 @@ function withLiteLLMRouteFailureAdvice(
|
|
|
297
297
|
(async () => {
|
|
298
298
|
try {
|
|
299
299
|
for await (const event of source) {
|
|
300
|
-
if (event.type === "error") {
|
|
300
|
+
if (event.type === "error" && event.reason !== "aborted" && event.error.stopReason !== "aborted") {
|
|
301
301
|
event.error.errorMessage = liteLLMRouteFailureMessage(event.error.errorMessage, metadata.targetId, model.id);
|
|
302
302
|
}
|
|
303
303
|
advised.push(event as AssistantMessageEvent);
|
|
304
304
|
}
|
|
305
305
|
advised.end();
|
|
306
306
|
} catch (err) {
|
|
307
|
+
if (err instanceof Error && err.name === "AbortError") throw err;
|
|
307
308
|
const message = err instanceof Error ? err.message : String(err);
|
|
308
309
|
throw new Error(liteLLMRouteFailureMessage(message, metadata.targetId, model.id));
|
|
309
310
|
}
|
|
@@ -922,11 +923,17 @@ function guardMalformedToolCalls(
|
|
|
922
923
|
(async () => {
|
|
923
924
|
try {
|
|
924
925
|
for await (const event of source) {
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
926
|
+
// The final stop reason distinguishes malformed output from a token
|
|
927
|
+
// limit. pi rejects every call in a length-truncated message (even
|
|
928
|
+
// salvage-parsed arguments) and continues with error tool results.
|
|
929
|
+
// Turning that into an error here aborts the worker before recovery.
|
|
930
|
+
if (event.type === "done" && event.message.stopReason !== "length") {
|
|
931
|
+
const malformed = event.message.content.find(
|
|
932
|
+
(block) => block.type === "toolCall" && requiredByTool.has(block.name) && hasEmptyArguments(block.arguments),
|
|
933
|
+
);
|
|
934
|
+
if (malformed?.type === "toolCall") {
|
|
935
|
+
const message = malformedToolArgsMessage(model, malformed.name, requiredByTool.get(malformed.name) ?? []);
|
|
936
|
+
const error = finalErrorFromPartial(event.message, message);
|
|
930
937
|
guarded.push({ type: "error", reason: "error", error });
|
|
931
938
|
guarded.end(error);
|
|
932
939
|
return;
|
|
@@ -32,18 +32,38 @@ export function setGlobalDefaultMaxOutputTokens(value: number): void {
|
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* Tokens a preflight context check should hold back for the response: the
|
|
35
|
-
* smaller of the model's advertised output limit and the
|
|
36
|
-
* budget
|
|
35
|
+
* smaller of the model's advertised output limit and the configured output
|
|
36
|
+
* budget, falling back to the product default when no budget is configured.
|
|
37
|
+
* The safety margin is deliberately not added here; at request time
|
|
37
38
|
* {@link remainingContextMaxTokens} subtracts it from the window and degrades
|
|
38
39
|
* the output budget gracefully, so a hard preflight reservation of
|
|
39
40
|
* limit + safety would compact earlier than the engine actually needs.
|
|
40
41
|
*/
|
|
41
|
-
export function resolveReservedOutputTokens(
|
|
42
|
+
export function resolveReservedOutputTokens(
|
|
43
|
+
maxOutputTokens?: number | null,
|
|
44
|
+
request?: { api: string; contextWindow: number; inputTokens: number },
|
|
45
|
+
): number {
|
|
46
|
+
const requested = globalDefaultMaxOutputTokens > 0 ? globalDefaultMaxOutputTokens : DEFAULT_MAX_OUTPUT_TOKENS;
|
|
42
47
|
const limit =
|
|
43
48
|
typeof maxOutputTokens === "number" && Number.isFinite(maxOutputTokens) && maxOutputTokens > 0
|
|
44
49
|
? maxOutputTokens
|
|
45
|
-
:
|
|
46
|
-
|
|
50
|
+
: Number.POSITIVE_INFINITY;
|
|
51
|
+
const ceiling = Math.min(limit, requested);
|
|
52
|
+
// These Clio transports already reduce the wire ceiling to remaining room.
|
|
53
|
+
// Preflight must use that same allocation, rather than demanding room for
|
|
54
|
+
// the entire configured maximum (which may equal the context window).
|
|
55
|
+
// Other transports retain their existing reservation contract.
|
|
56
|
+
return request && (request.api === "openai-completions" || request.api === "ollama-native")
|
|
57
|
+
? clampOutputToRemainingContext(ceiling, request.contextWindow, request.inputTokens)
|
|
58
|
+
: ceiling;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function clampOutputToRemainingContext(ceiling: number, contextWindow: number, inputTokens: number): number {
|
|
62
|
+
const available =
|
|
63
|
+
contextWindow > 0 && Number.isFinite(contextWindow)
|
|
64
|
+
? Math.max(1, contextWindow - inputTokens - CONTEXT_BUDGET_SAFETY_TOKENS)
|
|
65
|
+
: Number.POSITIVE_INFINITY;
|
|
66
|
+
return Math.min(ceiling, available);
|
|
47
67
|
}
|
|
48
68
|
|
|
49
69
|
export function estimateInputTokensFromContext(context: Context): number {
|
|
@@ -59,15 +79,11 @@ export function remainingContextMaxTokens(
|
|
|
59
79
|
options: Pick<StreamOptions, "maxTokens"> | undefined,
|
|
60
80
|
limits?: { contextWindow?: number; maxOutputTokens?: number },
|
|
61
81
|
): number {
|
|
62
|
-
const safety = CONTEXT_BUDGET_SAFETY_TOKENS;
|
|
63
82
|
const inputTokens = estimateInputTokensFromContext(context);
|
|
64
83
|
const configuredContextWindow = model.contextWindow > 0 ? model.contextWindow : Number.POSITIVE_INFINITY;
|
|
65
84
|
const loadedContextWindow =
|
|
66
85
|
limits?.contextWindow !== undefined && limits.contextWindow > 0 ? limits.contextWindow : Number.POSITIVE_INFINITY;
|
|
67
86
|
const contextWindow = Math.min(configuredContextWindow, loadedContextWindow);
|
|
68
|
-
const budget = Number.isFinite(contextWindow)
|
|
69
|
-
? Math.max(1, contextWindow - inputTokens - safety)
|
|
70
|
-
: Number.POSITIVE_INFINITY;
|
|
71
87
|
const modelLimit = model.maxTokens > 0 ? model.maxTokens : Number.POSITIVE_INFINITY;
|
|
72
88
|
// Precedence for the requested ceiling when the caller gave no explicit
|
|
73
89
|
// maxTokens: a more-specific tool-turn limit, then the global default, then
|
|
@@ -84,6 +100,6 @@ export function remainingContextMaxTokens(
|
|
|
84
100
|
? modelLimit
|
|
85
101
|
: DEFAULT_MAX_OUTPUT_TOKENS;
|
|
86
102
|
const requested = options?.maxTokens ?? defaultLimit;
|
|
87
|
-
const resolved = Math.min(requested, modelLimit,
|
|
103
|
+
const resolved = clampOutputToRemainingContext(Math.min(requested, modelLimit), contextWindow, inputTokens);
|
|
88
104
|
return Number.isFinite(resolved) ? resolved : DEFAULT_MAX_OUTPUT_TOKENS;
|
|
89
105
|
}
|
|
@@ -314,7 +314,7 @@ export interface ClaudeWorkerBudgetGate {
|
|
|
314
314
|
}
|
|
315
315
|
|
|
316
316
|
/** Canonical call counter shared by the SDK's PreToolUse/canUseTool mediation seam. */
|
|
317
|
-
function createClaudeWorkerBudgetGate(
|
|
317
|
+
export function createClaudeWorkerBudgetGate(
|
|
318
318
|
budget: WorkerBudget,
|
|
319
319
|
onBoundary: () => void,
|
|
320
320
|
onHardCap: () => void,
|
|
@@ -330,6 +330,7 @@ function createClaudeWorkerBudgetGate(
|
|
|
330
330
|
let admitted = 0;
|
|
331
331
|
let locked = false;
|
|
332
332
|
const phaseDecision = (canonicalToolName: string): { kind: "allow" } | { kind: "deny"; reason: string } => {
|
|
333
|
+
if (budget.mode === "advisory") return { kind: "allow" };
|
|
333
334
|
const reserveAdmits = isReserveAdmittedTool(canonicalToolName, deliveryTools);
|
|
334
335
|
if (locked || admitted >= budget.toolCalls) {
|
|
335
336
|
// Same rule the native guard applies: the soft budget ends discovery,
|
|
@@ -365,7 +366,7 @@ function createClaudeWorkerBudgetGate(
|
|
|
365
366
|
return {
|
|
366
367
|
attempt(canonicalToolName) {
|
|
367
368
|
attempts += 1;
|
|
368
|
-
if (attempts > budget.hardCap) {
|
|
369
|
+
if (budget.mode !== "advisory" && attempts > budget.hardCap) {
|
|
369
370
|
onHardCap();
|
|
370
371
|
return { kind: "deny", reason: `workerToolCallCap reached (${budget.hardCap}); abort run` };
|
|
371
372
|
}
|
|
@@ -381,7 +382,7 @@ function createClaudeWorkerBudgetGate(
|
|
|
381
382
|
// Locking here is what ends the work phase. A delivery-capable agent is
|
|
382
383
|
// not locked at its soft budget: it still owes the files it was
|
|
383
384
|
// dispatched to write, and hardCap in attempt() is its bound.
|
|
384
|
-
if (admitted >= budget.toolCalls && deliveryTools.length === 0) {
|
|
385
|
+
if (budget.mode !== "advisory" && admitted >= budget.toolCalls && deliveryTools.length === 0) {
|
|
385
386
|
locked = true;
|
|
386
387
|
onBoundary();
|
|
387
388
|
}
|
|
@@ -1,17 +1,30 @@
|
|
|
1
1
|
import { type ChildProcessByStdio, spawn } from "node:child_process";
|
|
2
|
-
import {
|
|
3
|
-
import type { Readable } from "node:stream";
|
|
2
|
+
import type { Readable, Writable } from "node:stream";
|
|
4
3
|
|
|
4
|
+
import { boundedExternalDiagnostic } from "../../core/external-diagnostic.js";
|
|
5
|
+
import { buildSafeToolEnv, resolveSafeCwd } from "../../core/safe-exec.js";
|
|
5
6
|
import type { AutonomyLevel } from "../../domains/safety/autonomy.js";
|
|
6
7
|
import { assertToolProfileEnforceable } from "../../tools/profiles.js";
|
|
7
|
-
import { readStderr, waitForClose } from "../external-subprocess.js";
|
|
8
|
+
import { createProcessTreeTerminator, readBoundedLines, readStderr, waitForClose } from "../external-subprocess.js";
|
|
8
9
|
import type { AgentEvent, AgentMessage, Usage } from "../types.js";
|
|
9
10
|
import type { WorkerEventEmit, WorkerRunHandle, WorkerRunInput, WorkerRunResult } from "../worker-runtime.js";
|
|
10
11
|
import { isClaudeCodeSessionId } from "./session-id.js";
|
|
11
12
|
|
|
12
13
|
const READ_ONLY_CLAUDE_TOOLS = ["Read", "Grep", "Glob", "LS", "WebFetch", "WebSearch"] as const;
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
/** Official CLI binary, resolved from the operator's PATH. */
|
|
16
|
+
const CLAUDE_BINARY = "claude";
|
|
17
|
+
export const CLAUDE_MAX_STREAM_LINE_BYTES = 1024 * 1024;
|
|
18
|
+
export const CLAUDE_MAX_STREAM_BYTES = 8 * 1024 * 1024;
|
|
19
|
+
|
|
20
|
+
type ClaudeChildProcess = ChildProcessByStdio<Writable, Readable, Readable>;
|
|
21
|
+
|
|
22
|
+
export interface ClaudeRuntimeDependencies {
|
|
23
|
+
binary?: string;
|
|
24
|
+
workspaceRoot?: string;
|
|
25
|
+
environment?: NodeJS.ProcessEnv;
|
|
26
|
+
killGraceMs?: number;
|
|
27
|
+
}
|
|
15
28
|
|
|
16
29
|
export interface ClaudeSubprocessPermissionConfig {
|
|
17
30
|
permissionMode: "plan" | "dontAsk" | "acceptEdits" | "default" | "bypassPermissions";
|
|
@@ -48,15 +61,20 @@ export function claudeSubprocessPermissionConfigForAutonomy(
|
|
|
48
61
|
return { permissionMode: "default", extraArgs: [], dangerousBypass: false };
|
|
49
62
|
}
|
|
50
63
|
|
|
51
|
-
function buildClaudeCodePrompt(input: WorkerRunInput): string {
|
|
64
|
+
export function buildClaudeCodePrompt(input: WorkerRunInput): string {
|
|
52
65
|
const parts = (input.dynamicPromptMessages ?? []).map((message) => message.body.trim()).filter(Boolean);
|
|
53
66
|
parts.push(input.task);
|
|
54
67
|
return parts.join("\n\n");
|
|
55
68
|
}
|
|
56
69
|
|
|
57
|
-
|
|
70
|
+
/**
|
|
71
|
+
* `claude -p` reads the user prompt from stdin when no positional prompt is
|
|
72
|
+
* given, so the prompt never appears in argv. The system prompt stays on
|
|
73
|
+
* `--append-system-prompt`: stdin carries only the user turn.
|
|
74
|
+
*/
|
|
75
|
+
export function buildClaudeCodeArgs(input: WorkerRunInput, gateEnv: NodeJS.ProcessEnv = process.env): string[] {
|
|
58
76
|
assertToolProfileEnforceable(input.toolProfile, "claude-code");
|
|
59
|
-
const permission = claudeSubprocessPermissionConfigForAutonomy(input.autonomy);
|
|
77
|
+
const permission = claudeSubprocessPermissionConfigForAutonomy(input.autonomy, gateEnv);
|
|
60
78
|
const args = [
|
|
61
79
|
"-p",
|
|
62
80
|
"--output-format",
|
|
@@ -71,7 +89,6 @@ function buildClaudeCodeArgs(input: WorkerRunInput): string[] {
|
|
|
71
89
|
const systemPrompt = input.systemPrompt.trim();
|
|
72
90
|
if (systemPrompt.length > 0) args.push("--append-system-prompt", systemPrompt);
|
|
73
91
|
if (isClaudeCodeSessionId(input.sessionId)) args.push("--session-id", input.sessionId.trim());
|
|
74
|
-
args.push(buildClaudeCodePrompt(input));
|
|
75
92
|
return args;
|
|
76
93
|
}
|
|
77
94
|
|
|
@@ -170,8 +187,11 @@ function buildAssistantMessage(input: {
|
|
|
170
187
|
exitCode: number;
|
|
171
188
|
aborted: boolean;
|
|
172
189
|
stderr: string;
|
|
190
|
+
transportError?: string;
|
|
173
191
|
}): AgentMessage & { role: "assistant" } {
|
|
174
|
-
const
|
|
192
|
+
const transportError = input.transportError ?? "";
|
|
193
|
+
const failed = input.exitCode !== 0 || transportError.length > 0;
|
|
194
|
+
const errorMessage = !failed ? "" : transportError || resultError(input.result, input.stderr);
|
|
175
195
|
const message: AgentMessage & { role: "assistant" } = {
|
|
176
196
|
role: "assistant",
|
|
177
197
|
content: [{ type: "text", text: input.text }],
|
|
@@ -179,12 +199,12 @@ function buildAssistantMessage(input: {
|
|
|
179
199
|
provider: "anthropic",
|
|
180
200
|
model: input.model,
|
|
181
201
|
usage: normalizeUsage(input.result?.usage, finite(input.result?.total_cost_usd)),
|
|
182
|
-
stopReason: input.aborted ? "aborted" :
|
|
202
|
+
stopReason: input.aborted ? "aborted" : failed ? "error" : "stop",
|
|
183
203
|
timestamp: Date.now(),
|
|
184
204
|
} as AgentMessage & { role: "assistant" };
|
|
185
205
|
if (typeof input.result?.request_id === "string") message.responseId = input.result.request_id;
|
|
186
206
|
if (typeof input.result?.model === "string") message.responseModel = input.result.model;
|
|
187
|
-
if (errorMessage.length > 0) message.errorMessage = errorMessage;
|
|
207
|
+
if (errorMessage.length > 0) message.errorMessage = boundedExternalDiagnostic(errorMessage);
|
|
188
208
|
return message;
|
|
189
209
|
}
|
|
190
210
|
|
|
@@ -224,9 +244,14 @@ async function readJsonLines(
|
|
|
224
244
|
emit: WorkerEventEmit,
|
|
225
245
|
state: { started: boolean; text: string; model: string; result: Record<string, unknown> | null },
|
|
226
246
|
): Promise<void> {
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
247
|
+
for await (const bounded of readBoundedLines(child.stdout, {
|
|
248
|
+
maxLineBytes: CLAUDE_MAX_STREAM_LINE_BYTES,
|
|
249
|
+
maxTotalBytes: CLAUDE_MAX_STREAM_BYTES,
|
|
250
|
+
})) {
|
|
251
|
+
if (bounded.kind === "oversized") {
|
|
252
|
+
throw new Error(`claude stream-json line exceeded ${CLAUDE_MAX_STREAM_LINE_BYTES} bytes`);
|
|
253
|
+
}
|
|
254
|
+
const trimmed = bounded.line.trim();
|
|
230
255
|
if (trimmed.length === 0) continue;
|
|
231
256
|
let parsed: unknown;
|
|
232
257
|
try {
|
|
@@ -250,12 +275,21 @@ async function readJsonLines(
|
|
|
250
275
|
}
|
|
251
276
|
}
|
|
252
277
|
|
|
253
|
-
export function startClaudeCodeWorkerRun(
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
278
|
+
export function startClaudeCodeWorkerRun(
|
|
279
|
+
input: WorkerRunInput,
|
|
280
|
+
emit: WorkerEventEmit,
|
|
281
|
+
dependencies: ClaudeRuntimeDependencies = {},
|
|
282
|
+
): WorkerRunHandle {
|
|
283
|
+
const sourceEnv = dependencies.environment ?? process.env;
|
|
284
|
+
const args = buildClaudeCodeArgs(input, sourceEnv);
|
|
285
|
+
const prompt = buildClaudeCodePrompt(input);
|
|
286
|
+
const workspaceRoot = dependencies.workspaceRoot ?? process.cwd();
|
|
287
|
+
const cwd = resolveSafeCwd(input.cwd, workspaceRoot);
|
|
288
|
+
const child: ClaudeChildProcess = spawn(dependencies.binary ?? CLAUDE_BINARY, args, {
|
|
289
|
+
cwd,
|
|
290
|
+
env: buildSafeToolEnv({}, sourceEnv),
|
|
291
|
+
detached: process.platform !== "win32",
|
|
292
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
259
293
|
});
|
|
260
294
|
const streamState = {
|
|
261
295
|
started: false,
|
|
@@ -264,53 +298,66 @@ export function startClaudeCodeWorkerRun(input: WorkerRunInput, emit: WorkerEven
|
|
|
264
298
|
result: null as Record<string, unknown> | null,
|
|
265
299
|
};
|
|
266
300
|
let aborted = false;
|
|
267
|
-
let
|
|
268
|
-
|
|
301
|
+
let settled = false;
|
|
302
|
+
let transportError = "";
|
|
303
|
+
const terminator = createProcessTreeTerminator(child, dependencies.killGraceMs ?? 1500);
|
|
269
304
|
const abort = (): void => {
|
|
305
|
+
if (settled) return;
|
|
270
306
|
aborted = true;
|
|
271
|
-
|
|
272
|
-
child.kill("SIGTERM");
|
|
273
|
-
killTimer = setTimeout(() => {
|
|
274
|
-
if (!child.killed) child.kill("SIGKILL");
|
|
275
|
-
}, 1500);
|
|
307
|
+
terminator.terminate();
|
|
276
308
|
};
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
309
|
+
const onAbort = (): void => abort();
|
|
310
|
+
if (input.signal?.aborted) abort();
|
|
311
|
+
else input.signal?.addEventListener("abort", onAbort, { once: true });
|
|
312
|
+
child.once("error", (cause) => {
|
|
313
|
+
transportError ||=
|
|
314
|
+
(cause as NodeJS.ErrnoException).code === "ENOENT"
|
|
315
|
+
? "Claude Code CLI (`claude`) is not installed or not on PATH."
|
|
316
|
+
: cause.message;
|
|
317
|
+
});
|
|
318
|
+
child.stdin.on("error", (cause) => {
|
|
319
|
+
if (!aborted) transportError ||= `could not send prompt to Claude Code CLI: ${cause.message}`;
|
|
320
|
+
});
|
|
321
|
+
child.stdin.end(prompt);
|
|
281
322
|
|
|
282
323
|
const promise = (async (): Promise<WorkerRunResult> => {
|
|
283
324
|
emit({ type: "agent_start" } as AgentEvent);
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
325
|
+
try {
|
|
326
|
+
const stderrPromise = readStderr(child);
|
|
327
|
+
const stdoutPromise = readJsonLines(child, emit, streamState).catch((cause) => {
|
|
328
|
+
transportError ||= cause instanceof Error ? cause.message : String(cause);
|
|
329
|
+
terminator.terminate();
|
|
330
|
+
});
|
|
331
|
+
const exitCode = await waitForClose(child);
|
|
332
|
+
await stdoutPromise;
|
|
333
|
+
const stderr = await stderrPromise.catch(() => "");
|
|
334
|
+
const finalText =
|
|
335
|
+
streamState.text ||
|
|
336
|
+
resultText(streamState.result) ||
|
|
337
|
+
(exitCode === 0 ? "" : resultError(streamState.result, stderr));
|
|
338
|
+
const finalMessage = buildAssistantMessage({
|
|
339
|
+
model: streamState.model,
|
|
340
|
+
text: finalText,
|
|
341
|
+
result: streamState.result,
|
|
342
|
+
exitCode,
|
|
343
|
+
aborted,
|
|
344
|
+
stderr,
|
|
345
|
+
transportError,
|
|
346
|
+
});
|
|
347
|
+
if (!streamState.started) emit({ type: "message_start", message: finalMessage } as AgentEvent);
|
|
348
|
+
emit({ type: "message_end", message: finalMessage } as AgentEvent);
|
|
349
|
+
const messages: AgentMessage[] = [finalMessage];
|
|
350
|
+
emit({ type: "agent_end", messages } as AgentEvent);
|
|
351
|
+
if (finalMessage.stopReason === "error" && finalMessage.errorMessage && !aborted) {
|
|
352
|
+
process.stderr.write(`[worker:claude-code] ${finalMessage.errorMessage}\n`);
|
|
353
|
+
}
|
|
354
|
+
return { messages, exitCode: finalMessage.stopReason === "stop" ? 0 : 1 };
|
|
355
|
+
} finally {
|
|
356
|
+
settled = true;
|
|
357
|
+
terminator.cleanup();
|
|
358
|
+
input.signal?.removeEventListener("abort", onAbort);
|
|
308
359
|
}
|
|
309
|
-
return { messages, exitCode: exitCode === 0 ? 0 : 1 };
|
|
310
360
|
})();
|
|
311
361
|
|
|
312
|
-
return {
|
|
313
|
-
promise,
|
|
314
|
-
abort,
|
|
315
|
-
};
|
|
362
|
+
return { promise, abort };
|
|
316
363
|
}
|
|
@@ -12,6 +12,7 @@ const ENV_KEYS: Readonly<Record<string, string>> = {
|
|
|
12
12
|
"ant-ling": "ANT_LING_API_KEY",
|
|
13
13
|
"qwen-token-plan": "QWEN_TOKEN_PLAN_API_KEY",
|
|
14
14
|
"qwen-token-plan-cn": "QWEN_TOKEN_PLAN_CN_API_KEY",
|
|
15
|
+
"qwen-token-plan-individual": "QWEN_TOKEN_PLAN_API_KEY",
|
|
15
16
|
openai: "OPENAI_API_KEY",
|
|
16
17
|
"azure-openai-responses": "AZURE_OPENAI_API_KEY",
|
|
17
18
|
nvidia: "NVIDIA_API_KEY",
|
|
@@ -59,7 +60,7 @@ function apiKeyEnvVars(provider: string): readonly string[] | undefined {
|
|
|
59
60
|
return name ? [name] : undefined;
|
|
60
61
|
}
|
|
61
62
|
|
|
62
|
-
/** Synchronous provider-key discovery pinned to pi-ai 0.
|
|
63
|
+
/** Synchronous provider-key discovery pinned to pi-ai 0.85's public behavior. */
|
|
63
64
|
export function findEngineEnvKeys(provider: string, env?: ProviderEnv): string[] | undefined {
|
|
64
65
|
const names = apiKeyEnvVars(provider);
|
|
65
66
|
if (!names) return undefined;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ChildProcessByStdio, spawn } from "node:child_process";
|
|
2
2
|
import type { Readable } from "node:stream";
|
|
3
3
|
|
|
4
4
|
import { boundedExternalDiagnostic } from "../core/external-diagnostic.js";
|
|
@@ -81,16 +81,18 @@ export interface ProcessTreeTerminator {
|
|
|
81
81
|
cleanup(): void;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
/** POSIX process
|
|
84
|
+
/** POSIX process groups or Windows taskkill trees, with a direct-child fallback. */
|
|
85
85
|
export function createProcessTreeTerminator(
|
|
86
86
|
child: { pid?: number | undefined; exitCode: number | null; kill(signal?: NodeJS.Signals): boolean },
|
|
87
87
|
graceMs = 1500,
|
|
88
|
+
options: { platform?: NodeJS.Platform; spawn?: typeof spawn } = {},
|
|
88
89
|
): ProcessTreeTerminator {
|
|
90
|
+
const platform = options.platform ?? process.platform;
|
|
91
|
+
const spawnKiller = options.spawn ?? spawn;
|
|
89
92
|
let sent = false;
|
|
90
93
|
let timer: ReturnType<typeof setTimeout> | null = null;
|
|
91
94
|
const signal = (name: NodeJS.Signals): void => {
|
|
92
|
-
if (child.
|
|
93
|
-
if (child.pid && process.platform !== "win32") {
|
|
95
|
+
if (child.pid && platform !== "win32") {
|
|
94
96
|
try {
|
|
95
97
|
process.kill(-child.pid, name);
|
|
96
98
|
return;
|
|
@@ -98,6 +100,15 @@ export function createProcessTreeTerminator(
|
|
|
98
100
|
// The child may not have established its group yet.
|
|
99
101
|
}
|
|
100
102
|
}
|
|
103
|
+
if (platform === "win32" && child.pid !== undefined && Number.isSafeInteger(child.pid) && child.pid > 0) {
|
|
104
|
+
const args = ["/PID", String(child.pid), "/T", ...(name === "SIGKILL" ? ["/F"] : [])];
|
|
105
|
+
const killer = spawnKiller("taskkill.exe", args, { stdio: "ignore", windowsHide: true });
|
|
106
|
+
killer.once("error", () => {
|
|
107
|
+
if (child.exitCode === null) child.kill(name);
|
|
108
|
+
});
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (child.exitCode !== null) return;
|
|
101
112
|
child.kill(name);
|
|
102
113
|
};
|
|
103
114
|
return {
|
|
@@ -105,11 +116,19 @@ export function createProcessTreeTerminator(
|
|
|
105
116
|
if (sent) return;
|
|
106
117
|
sent = true;
|
|
107
118
|
signal("SIGTERM");
|
|
108
|
-
timer = setTimeout(() =>
|
|
119
|
+
timer = setTimeout(() => {
|
|
120
|
+
timer = null;
|
|
121
|
+
signal("SIGKILL");
|
|
122
|
+
}, graceMs);
|
|
109
123
|
},
|
|
110
124
|
cleanup() {
|
|
111
|
-
if (timer)
|
|
112
|
-
|
|
125
|
+
if (timer) {
|
|
126
|
+
clearTimeout(timer);
|
|
127
|
+
timer = null;
|
|
128
|
+
// A closed leader can leave descendants with independent stdio.
|
|
129
|
+
// Finish the requested cancellation before releasing its escalation.
|
|
130
|
+
signal("SIGKILL");
|
|
131
|
+
}
|
|
113
132
|
},
|
|
114
133
|
};
|
|
115
134
|
}
|