@iowarp/clio-coder 0.4.4 → 0.4.6
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 +116 -2
- package/CONTRIBUTING.md +39 -24
- package/NOTICE +16 -0
- package/README.md +343 -403
- package/dist/{acp-WNAYYF4F.js → acp-UVEVWSDL.js} +25 -24
- package/dist/{agents-3OKXHLOI.js → agents-VWY37DTK.js} +78 -77
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-VKNNMGPU.js → auth-PCV2XQDV.js} +38 -38
- package/dist/builtins-PD652MTK.js +22 -0
- package/dist/{chunk-TQAHXW6Y.js → chunk-22PQ4TX4.js} +4 -4
- package/dist/{chunk-NRO2BJRH.js → chunk-24T2YZ7A.js} +10686 -4464
- package/dist/{chunk-Y55JBDO5.js → chunk-2AKYFREM.js} +38 -23
- 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-UXCU4E3T.js → chunk-3BJGMT2D.js} +35 -14
- package/dist/{chunk-5ICU3EUH.js → chunk-3HQVBIKD.js} +5 -5
- package/dist/{chunk-GWZNEVM2.js → chunk-3JLFK5MW.js} +9 -9
- package/dist/{chunk-XXYSBZIQ.js → chunk-3O2ZAUGQ.js} +4 -4
- package/dist/{chunk-GX5WYQO4.js → chunk-3QKXHCGS.js} +8 -8
- package/dist/{chunk-JCI2ROMZ.js → chunk-3T4DXWP6.js} +7 -7
- package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
- package/dist/{chunk-OEJSLEPW.js → chunk-3WBALRQH.js} +337 -337
- package/dist/{chunk-ELWDPP3Y.js → chunk-4DU2TVI4.js} +8 -8
- package/dist/{chunk-JSD46VO2.js → chunk-4U4TKZFR.js} +43 -36
- package/dist/{chunk-FEAXX7B6.js → chunk-4VMV6OS6.js} +4 -4
- package/dist/{chunk-2ZSONWVL.js → chunk-536HXRFE.js} +13 -13
- 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-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
- package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
- package/dist/{chunk-Q4WO54TA.js → chunk-5QRX7SLS.js} +11 -11
- package/dist/{chunk-3ODX73FK.js → chunk-5VTJP36Q.js} +4 -4
- package/dist/chunk-5ZSZEYJK.js +119 -0
- package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
- package/dist/{chunk-DT3LWJOB.js → chunk-6HAO6X5B.js} +24 -6
- package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
- package/dist/{chunk-K6T2ZAMZ.js → chunk-6OII3LOK.js} +6 -6
- package/dist/{chunk-36CT5VVL.js → chunk-6RYDAVQT.js} +138 -89
- package/dist/{chunk-I7XBWTYH.js → chunk-6VRRJT7L.js} +5 -5
- package/dist/{chunk-DQOVN6KV.js → chunk-6YA46L5A.js} +4 -4
- package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
- package/dist/{chunk-NAI6ZFCY.js → chunk-7JSSKXG2.js} +122 -11
- 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-IXIY2H4R.js → chunk-ACCKVSHU.js} +5 -5
- package/dist/{chunk-UOIZ7DA4.js → chunk-AP7HDJOP.js} +2 -2
- package/dist/{chunk-JEIYHLOR.js → chunk-B3MOMLJ4.js} +12 -12
- 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-23L32XTI.js → chunk-BLTEAUCB.js} +68 -39
- package/dist/{chunk-4O6MANBS.js → chunk-BS4GAMUB.js} +14 -10
- package/dist/{chunk-XULDXHTN.js → chunk-BT7HGDOX.js} +105 -53
- 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-NDDGJUXD.js → chunk-DNCE23JJ.js} +2 -2
- package/dist/{chunk-HVDIIIQW.js → chunk-DNHVRBH4.js} +3 -3
- package/dist/{chunk-D7E7WCDF.js → chunk-DVNAPPXU.js} +2 -2
- package/dist/{chunk-6UINWWS6.js → chunk-DXLUVUD4.js} +16 -16
- package/dist/{chunk-YXLYO42X.js → chunk-DXVMLM3Z.js} +3 -2
- package/dist/{chunk-5MEZN6CB.js → chunk-DZK63TZJ.js} +6 -6
- package/dist/{chunk-IWHMRKLL.js → chunk-E3LEPLQ2.js} +2 -2
- package/dist/{chunk-JT2RFCC5.js → chunk-E7RF4KBO.js} +5 -5
- 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-4NSRCOYP.js → chunk-EHOSNVVM.js} +3 -2
- package/dist/chunk-EM2WNQS2.js +93 -0
- package/dist/{chunk-57XXR6DR.js → chunk-F5Z7EWMN.js} +967 -246
- package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
- 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-EXLD33WO.js → chunk-GLYBJ4RQ.js} +24 -9
- package/dist/{chunk-26QSH3EJ.js → chunk-HHVJNVUJ.js} +5 -5
- package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
- package/dist/{chunk-FFUPXJC4.js → chunk-HPTJF6DG.js} +32 -56
- package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
- package/dist/{chunk-CUSRQKPU.js → chunk-HZ2T2YED.js} +299 -89
- package/dist/{chunk-YD5GIKET.js → chunk-HZFBVU5X.js} +49 -580
- package/dist/{chunk-6QOTUPRG.js → chunk-I2K2NCZQ.js} +65 -17
- package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
- package/dist/{chunk-I2DWJ4GM.js → chunk-IGLVVNEG.js} +54 -42
- package/dist/{chunk-6Q3CYFD3.js → chunk-IKRWLEDA.js} +186 -35
- package/dist/{chunk-2JH2WHGE.js → chunk-J2FYEQ5L.js} +4 -4
- package/dist/{chunk-BMS5RKQY.js → chunk-JABWPKFY.js} +3 -3
- package/dist/{chunk-2DSOYNFC.js → chunk-JMPL7NUB.js} +7 -7
- package/dist/{chunk-QDC3K2U3.js → chunk-K2BLQC5E.js} +3 -3
- package/dist/{chunk-AUPNRN7C.js → chunk-K2HL3GBL.js} +4 -4
- package/dist/{chunk-54X7T7DK.js → chunk-KAFMW7WM.js} +72 -81
- package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
- 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-IRXAATOX.js → chunk-L4N3DWNW.js} +3 -3
- package/dist/{chunk-JQLNNIKT.js → chunk-LIN2K3EL.js} +6 -6
- package/dist/{chunk-2STGEDFV.js → chunk-LK2FN5JY.js} +2 -2
- 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-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
- package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
- package/dist/{chunk-4WR7VSYB.js → chunk-N2OKBREN.js} +23 -9
- package/dist/{chunk-3GY4F45V.js → chunk-NC4KV7EL.js} +6 -6
- package/dist/{chunk-LLXSDWXS.js → chunk-NF3BK5WR.js} +5 -5
- package/dist/{chunk-4M6Z5QVF.js → chunk-NNWJYUNO.js} +11 -11
- package/dist/chunk-NTK3WTHM.js +141 -0
- package/dist/{chunk-GYV6VZOC.js → chunk-NTTS3O53.js} +2 -2
- 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-KFV5L5SK.js → chunk-OQM5IVJY.js} +118 -232
- package/dist/{chunk-75W7L2E2.js → chunk-P5JMBPDJ.js} +1052 -171
- package/dist/{chunk-XRZT5WY5.js → chunk-P5SC4DLJ.js} +4 -4
- package/dist/{chunk-S6PYF2XF.js → chunk-P6M7RKMI.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-DXKJURES.js → chunk-PZN2LQY6.js} +14 -11
- package/dist/{chunk-N56KALIC.js → chunk-Q7NNUHQV.js} +62 -35
- package/dist/{chunk-RQCKCSRL.js → chunk-QCOV5DFY.js} +22 -22
- package/dist/{chunk-3DPEIQKN.js → chunk-QH3ZTUOA.js} +2 -2
- package/dist/{chunk-NEKRRTYW.js → chunk-QJMRYTCX.js} +8 -8
- package/dist/{chunk-YNFKXPEC.js → chunk-QNWRHOMF.js} +35 -66
- package/dist/{chunk-YAKGTXEV.js → chunk-QRFXEO6Y.js} +2 -2
- package/dist/{chunk-35MSIRKH.js → chunk-QUIJZSDW.js} +2 -2
- package/dist/{chunk-72YIHOZQ.js → chunk-QXFBABFJ.js} +10 -10
- package/dist/chunk-R2CT5YDO.js +66 -0
- package/dist/{chunk-HHV2GANA.js → chunk-R2P2U3ZS.js} +2 -2
- package/dist/{chunk-IGLP3ODT.js → chunk-RGZNQ5CT.js} +15 -15
- package/dist/chunk-SD7SHNDW.js +15 -0
- 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-UEPWCCTY.js → chunk-SXQKNKRA.js} +12 -12
- package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
- package/dist/{chunk-V76WTFTW.js → chunk-T52TPHYC.js} +6 -6
- package/dist/{chunk-5636DCO5.js → chunk-TJFDL26W.js} +59 -12
- package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
- package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
- 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-5TUB6SLS.js → chunk-UFYNOQK4.js} +7 -7
- package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
- 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-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
- package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
- package/dist/{chunk-7UGL4MB5.js → chunk-VAHLPXPY.js} +10 -10
- package/dist/{chunk-25QBEXRS.js → chunk-VANN3GDP.js} +7 -26
- package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
- package/dist/{chunk-QUFRYSWI.js → chunk-VHMX7SXF.js} +129 -48
- 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-BJVFZO5U.js → chunk-WJIMKGD6.js} +7 -7
- package/dist/{chunk-USR47QNF.js → chunk-WKUYQBCG.js} +14 -14
- package/dist/{chunk-GHS5EBTQ.js → chunk-WNGF5AJX.js} +36 -22
- package/dist/{chunk-MXHC5QYU.js → chunk-WTQGRBHV.js} +5 -144
- package/dist/{chunk-6OSVSQL5.js → chunk-WV6TDAPN.js} +41 -23
- package/dist/chunk-WXA2CFJO.js +23 -0
- package/dist/{chunk-2ASED4PZ.js → chunk-X3BI7HTV.js} +26 -26
- package/dist/{chunk-QSNYB6ZV.js → chunk-XCUDZQLX.js} +3 -3
- package/dist/{chunk-RZDWV63N.js → chunk-XWMSPJYN.js} +6 -6
- package/dist/chunk-YGDMBK7O.js +567 -0
- package/dist/{chunk-6PAZTBPA.js → chunk-YPRSNUTC.js} +15 -6
- package/dist/{chunk-2IR2NMPA.js → chunk-ZIDFQJRB.js} +2 -2
- package/dist/{chunk-LTIKRKFL.js → chunk-ZS43Y2FT.js} +4 -4
- 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-QQCMTUZE.js +26 -0
- package/dist/{code-nav-IJR2DBPR.js → code-nav-GUPM6766.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-IIM7YOD3.js} +211 -124
- package/dist/configure-4ZM5HWJX.js +73 -0
- package/dist/{context-BOYF5EJM.js → context-44BZLJ3J.js} +62 -31
- package/dist/{context-4MPR7WKB.js → context-AIDVQKMW.js} +126 -121
- package/dist/{context-2DKHWH2T.js → context-OL5P3HEP.js} +92 -62
- package/dist/context-clear-OQV76MYP.js +184 -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-ZUW3EGLS.js} +32 -31
- package/dist/detail-UXPWRANG.js +115 -0
- package/dist/{dispatch-runner-RJ5I2F2O.js → dispatch-runner-P3ZW6G77.js} +192 -116
- package/dist/{docs-SPOV3BAN.js → docs-BL7ROUFN.js} +4 -4
- package/dist/{doctor-DKICC2SN.js → doctor-JJVGPZWT.js} +59 -58
- package/dist/{eval-OQOQUDHK.js → eval-V2RTN3UH.js} +476 -170
- package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
- package/dist/evidence-35PYWGSO.js +225 -0
- package/dist/{evidence-4DQ25GUQ.js → evidence-CIGGKI6J.js} +111 -94
- package/dist/{evolve-GSS52E5J.js → evolve-33SM3NJP.js} +108 -91
- package/dist/{extensions-G7MFLYHT.js → extensions-YVRHX6ZI.js} +16 -16
- package/dist/{fleet-Q37YHHAQ.js → fleet-LFO7SIPC.js} +147 -146
- package/dist/{fleet-commands-G7E4N7SM.js → fleet-commands-RLK72GU3.js} +27 -26
- package/dist/{fleet-decisions-O7M6QBA2.js → fleet-decisions-3SBSCTCW.js} +16 -15
- package/dist/{fleet-graph-TOUBW6OW.js → fleet-graph-JZIBCGMW.js} +39 -38
- package/dist/{fleet-inspect-SW33JJNI.js → fleet-inspect-2L5YGGZJ.js} +108 -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-LIAVKDUU.js} +46 -42
- package/dist/{fleet-verify-UQPMTVE3.js → fleet-verify-JIK3OQZR.js} +106 -89
- package/dist/fleet-view-IWHYGQKK.js +118 -0
- package/dist/{init-PXEXQSBF.js → init-NJEDOTQW.js} +124 -123
- package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
- package/dist/{interop-ZG5T62U3.js → interop-RVCAYECG.js} +25 -25
- package/dist/inventory-74UL7UHU.js +118 -0
- package/dist/{library-B2W4N74O.js → library-CTKZA7K3.js} +45 -44
- package/dist/{memory-YCANYS5A.js → memory-I76I5VUH.js} +108 -93
- package/dist/{models-GERTU3YI.js → models-D4YDIQZQ.js} +64 -62
- package/dist/{monitor-CPNIUULB.js → monitor-NKVD55HX.js} +137 -107
- package/dist/{orchestrator-J4BSH4WQ.js → orchestrator-I6OATVPK.js} +1715 -1687
- 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-EJAWJEIO.js +116 -0
- package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
- package/dist/{reset-TNWTB5LU.js → reset-4XMQKDNZ.js} +22 -20
- package/dist/{resources-4PXNMD5G.js → resources-TVYVXK3Q.js} +41 -40
- package/dist/{run-D6XJ34CN.js → run-OWQNNSJU.js} +164 -157
- package/dist/{share-2NWMJJEE.js → share-NPZZMUXG.js} +43 -42
- package/dist/{skills-KR7WON5G.js → skills-OXFEAWMT.js} +47 -46
- package/dist/{skills-eval-O2ZNOLDS.js → skills-eval-J5TCKSJA.js} +128 -107
- package/dist/{skills-inventory-ZZOUBK7O.js → skills-inventory-7II4DM57.js} +41 -40
- package/dist/slash-commands-MDSDSWYF.js +92 -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-KILZEOCE.js} +161 -94
- package/dist/tasks-R6P6OV22.js +36 -0
- package/dist/{terminal-lease-C2J3JYRE.js → terminal-lease-LZCG2KN3.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-D2OZH6IQ.js} +42 -41
- package/dist/{usage-NHG6MCJM.js → usage-PIASNUS4.js} +137 -105
- package/dist/{verifiers-7AUNVXDY.js → verifiers-LTHUY2PX.js} +28 -27
- package/dist/verify-HYF7KBVE.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-RK7JQ5NP.js +615 -0
- package/dist/{with-panes-BDQEWBRT.js → with-panes-OFTNAR4Y.js} +34 -20
- package/dist/worker/entry.js +108 -95
- 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 +45 -60
- 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/tui-design.md +45 -30
- package/docs/architecture/worker-dispatch-mechanics.md +4 -0
- package/docs/guide/commands-and-modes.md +75 -61
- package/docs/guide/configuration-and-targets.md +126 -26
- package/docs/guide/configuration-reference.md +22 -7
- package/docs/guide/environment-variables.md +6 -2
- package/docs/guide/fleet-dispatch.md +13 -6
- package/docs/guide/glossary.md +1 -1
- package/docs/guide/installation-and-lifecycle.md +79 -20
- 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 +11 -11
- package/docs/process/documentation-coverage.md +1 -1
- 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 +24 -12
- 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/ask.ts +10 -10
- 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-editor.ts +51 -0
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure-oauth.ts +1 -1
- package/src/cli/configure-onboarding.ts +232 -96
- package/src/cli/configure-prompts.ts +76 -0
- package/src/cli/configure-quick.ts +274 -0
- package/src/cli/configure-target.ts +14 -2
- package/src/cli/configure.ts +413 -174
- 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/oauth-manual-input.ts +1 -1
- package/src/cli/reset.ts +2 -0
- package/src/cli/run.ts +16 -14
- package/src/cli/select.ts +35 -4
- 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 +11 -8
- 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 +39 -15
- package/src/core/defaults.ts +38 -15
- package/src/{interactive → core}/external-editor.ts +4 -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/config/classify.ts +1 -1
- package/src/domains/config/keybindings.ts +3 -31
- 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/probe/fingerprint.ts +13 -6
- package/src/domains/providers/probe/reasoning.ts +2 -0
- package/src/domains/providers/runtime-resolution.ts +11 -9
- package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +23 -7
- package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +7 -2
- package/src/domains/providers/runtimes/protocol/openai-compat.ts +10 -4
- 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/application-controller.ts +1 -31
- package/src/interactive/chat-loop-messages.ts +12 -4
- package/src/interactive/chat-loop.ts +115 -45
- package/src/interactive/chat-panel.ts +163 -637
- package/src/interactive/chat-renderer.ts +73 -30
- package/src/interactive/context-recall-command.ts +2 -1
- package/src/interactive/dispatch-board.ts +18 -5
- package/src/interactive/editor-submit.ts +21 -31
- package/src/interactive/footer/dashboard.ts +8 -3
- package/src/interactive/footer/widgets.ts +50 -91
- package/src/interactive/interactive-application.ts +24 -44
- package/src/interactive/interactive-event-projection.ts +9 -45
- package/src/interactive/interactive-input-runtime.ts +3 -28
- package/src/interactive/interactive-presentation.ts +45 -16
- package/src/interactive/interactive-slash-runtime.ts +5 -40
- package/src/interactive/layout.ts +31 -5
- package/src/interactive/model-session-replay.ts +2 -2
- package/src/interactive/overlay-frame.ts +1 -0
- package/src/interactive/overlay-general-openers.ts +5 -1
- package/src/interactive/overlay-lifecycle.ts +1 -0
- package/src/interactive/overlay-session-lifecycle.ts +7 -1
- package/src/interactive/overlays/ask-user.ts +1 -0
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/settings.ts +9 -8
- package/src/interactive/renderers/preview.ts +16 -0
- package/src/interactive/renderers/tool-execution.ts +84 -161
- package/src/interactive/renderers/worker-entry.ts +74 -43
- package/src/interactive/slash-autocomplete.ts +1 -6
- package/src/interactive/slash-commands.ts +16 -46
- package/src/interactive/status/controller.ts +0 -5
- package/src/interactive/status/state-machine.ts +44 -26
- package/src/interactive/status/types.ts +3 -0
- package/src/interactive/status/verbs.ts +13 -12
- package/src/interactive/transcript-detail.ts +50 -112
- 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 +4 -0
- package/src/interactive/view/view-overlay.ts +44 -34
- 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/presentation.ts +1 -1
- package/src/tools/read.ts +112 -15
- package/src/tools/registry.ts +55 -18
- 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 +10 -5
- 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
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
import { existsSync } from "node:fs";
|
|
17
|
-
import { ToolNames } from "../core/tool-names.js";
|
|
18
17
|
import { foldWorkingSet } from "../domains/context/working-set/fold.js";
|
|
19
18
|
import { compactionCut } from "../domains/context/working-set/visible.js";
|
|
19
|
+
import { captureSkillContext } from "../domains/session/compaction/compact.js";
|
|
20
20
|
import type {
|
|
21
21
|
BashExecutionEntry,
|
|
22
22
|
BranchSummaryEntry,
|
|
@@ -25,12 +25,14 @@ import type {
|
|
|
25
25
|
FileEntryEntry,
|
|
26
26
|
MessageEntry,
|
|
27
27
|
ModelChangeEntry,
|
|
28
|
+
PreservedSkillContext,
|
|
28
29
|
ProtectedArtifactEntry,
|
|
29
30
|
SessionEntry,
|
|
30
31
|
SessionInfoEntry,
|
|
31
32
|
ThinkingLevelChangeEntry,
|
|
32
33
|
WorkerRunEntry,
|
|
33
34
|
} from "../domains/session/entries.js";
|
|
35
|
+
import { latestSkillContextState, verifiedSkillContextCheckpoint } from "../domains/session/entries.js";
|
|
34
36
|
import {
|
|
35
37
|
HANDOFF_NOTE_CUSTOM_TYPE,
|
|
36
38
|
HANDOFF_SEED_CUSTOM_TYPE,
|
|
@@ -49,7 +51,6 @@ import {
|
|
|
49
51
|
} from "../engine/messages.js";
|
|
50
52
|
import { wrapTextWithAnsi } from "../engine/tui.js";
|
|
51
53
|
import type { AgentMessage } from "../engine/types.js";
|
|
52
|
-
import { toolPresentationPolicy } from "../tools/presentation.js";
|
|
53
54
|
import { toolResultPresentationText } from "../tools/result-disposition.js";
|
|
54
55
|
import type { ChatLoopEvent, RetryStatusPayload } from "./chat-loop.js";
|
|
55
56
|
import { isSelfExplainingAbort, toolResultSummary } from "./chat-loop-messages.js";
|
|
@@ -66,7 +67,7 @@ import {
|
|
|
66
67
|
type StreamPacer,
|
|
67
68
|
type StreamPacerSlice,
|
|
68
69
|
} from "./stream-pacer.js";
|
|
69
|
-
import
|
|
70
|
+
import type { TranscriptDetailPolicy } from "./transcript-detail.js";
|
|
70
71
|
import { readWorkerReceiptFactsForReplay } from "./worker-receipts.js";
|
|
71
72
|
import { workerEntriesFromRunEntries } from "./worker-replay.js";
|
|
72
73
|
import type { WorkerReceiptReader } from "./worker-stream.js";
|
|
@@ -334,6 +335,8 @@ export function createCoalescingChatRenderer(deps: CreateCoalescingChatRendererD
|
|
|
334
335
|
* Options for the rehydrate helper used by /resume and /fork.
|
|
335
336
|
*/
|
|
336
337
|
export interface RehydrateChatPanelOptions {
|
|
338
|
+
/** Unprojected ledger for verifying historical skill receipts after eviction projection. */
|
|
339
|
+
skillContextEntries?: ReadonlyArray<SessionEntry>;
|
|
337
340
|
/**
|
|
338
341
|
* Select the active branch ancestry without truncating later sidecars.
|
|
339
342
|
* Live compaction replay uses this so a summary appended after the current
|
|
@@ -451,6 +454,7 @@ function richMessageFromEntry(entry: MessageEntry, maxTextChars?: number): Agent
|
|
|
451
454
|
"responseModelIdObservation",
|
|
452
455
|
"responseModel",
|
|
453
456
|
"responseId",
|
|
457
|
+
"providerThinkingLevel",
|
|
454
458
|
"gatewayRouting",
|
|
455
459
|
"diagnostics",
|
|
456
460
|
"contextUsageInvalidated",
|
|
@@ -798,25 +802,24 @@ function appendReplayLine(chatPanel: ChatPanel, text: string): void {
|
|
|
798
802
|
function renderBashExecutionEntry(
|
|
799
803
|
entry: BashExecutionEntry,
|
|
800
804
|
width: number,
|
|
801
|
-
|
|
805
|
+
detail: TranscriptDetailPolicy,
|
|
802
806
|
unbounded: boolean,
|
|
803
807
|
): string[] {
|
|
804
808
|
const normalizedOutput = entry.output.replace(/\r\n/g, "\n").replace(/\r/g, "\n").replace(/\s+$/g, "");
|
|
805
809
|
return renderBashTranscriptExecution(
|
|
806
810
|
{
|
|
807
811
|
command: entry.command,
|
|
808
|
-
output:
|
|
812
|
+
output: normalizedOutput,
|
|
809
813
|
running: false,
|
|
810
814
|
exitCode: entry.exitCode,
|
|
811
815
|
cancelled: entry.cancelled,
|
|
812
816
|
truncated: entry.truncated,
|
|
813
817
|
fullOutputPath: entry.fullOutputPath,
|
|
814
818
|
excludeFromContext: entry.excludeFromContext,
|
|
815
|
-
folded,
|
|
816
819
|
},
|
|
817
820
|
width,
|
|
818
821
|
undefined,
|
|
819
|
-
{ unbounded, diffStyle: "plain" },
|
|
822
|
+
{ unbounded, diffStyle: "plain", detail },
|
|
820
823
|
);
|
|
821
824
|
}
|
|
822
825
|
|
|
@@ -1068,6 +1071,15 @@ function appendContextMessage(
|
|
|
1068
1071
|
out.push(makeTextMessage(role, truncateReplayText(trimmed), timestamp));
|
|
1069
1072
|
}
|
|
1070
1073
|
|
|
1074
|
+
const UNVERIFIED_SKILL_CHECKPOINT_TEXT =
|
|
1075
|
+
"Preserved skill instructions on this checkpoint failed integrity verification and were not replayed. If a skill still applies, ask the operator to run /skill <name> again.";
|
|
1076
|
+
|
|
1077
|
+
/** Selected but unverifiable: name the skill and the exact ledger ref instead of dropping it. */
|
|
1078
|
+
function unverifiedSkillContextText(skill: PreservedSkillContext): string {
|
|
1079
|
+
const activation = skill.activation;
|
|
1080
|
+
return `Preserved skill instructions for ${activation.name} (source=${activation.source} hash=${activation.hash} path=${activation.filePath}) could not be re-verified against this session's ledger and were not replayed. If the skill still applies, recall the original load with context(scope="recall", ref="${skill.resultRef}") or ask the operator to run /skill ${activation.name} again.`;
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1071
1083
|
function skillActivationContextText(entry: Extract<SessionEntry, { kind: "skillActivation" }>): string {
|
|
1072
1084
|
const activation = entry.activation;
|
|
1073
1085
|
const turn = activation.turnId ? ` turn=${activation.turnId}` : "";
|
|
@@ -1080,6 +1092,16 @@ export function buildReplayAgentMessagesFromTurns(
|
|
|
1080
1092
|
): AgentMessage[] {
|
|
1081
1093
|
const out = createOrderedReplaySink();
|
|
1082
1094
|
const seenToolCalls = new Set<string>();
|
|
1095
|
+
const activeEntries = truncateAtTurn(
|
|
1096
|
+
filterEntriesToActivePath(turns, options.activeLeafTurnId ?? options.uptoTurnId),
|
|
1097
|
+
options.uptoTurnId,
|
|
1098
|
+
);
|
|
1099
|
+
const skillState = latestSkillContextState(activeEntries);
|
|
1100
|
+
const evidence = truncateAtTurn(
|
|
1101
|
+
filterEntriesToActivePath(options.skillContextEntries ?? turns, options.activeLeafTurnId ?? options.uptoTurnId),
|
|
1102
|
+
options.uptoTurnId,
|
|
1103
|
+
);
|
|
1104
|
+
const verified = captureSkillContext(evidence, skillState);
|
|
1083
1105
|
for (const entry of selectReplayEntries(turns, options)) {
|
|
1084
1106
|
switch (entry.kind) {
|
|
1085
1107
|
case "message": {
|
|
@@ -1113,8 +1135,43 @@ export function buildReplayAgentMessagesFromTurns(
|
|
|
1113
1135
|
break;
|
|
1114
1136
|
case "compactionSummary":
|
|
1115
1137
|
appendContextMessage(out, "user", compactionContextText(entry), entry.timestamp);
|
|
1138
|
+
if (entry.userContext)
|
|
1139
|
+
out.push(
|
|
1140
|
+
makeTextMessage("user", `Active user instructions (verbatim):\n${entry.userContext.text}`, entry.timestamp),
|
|
1141
|
+
);
|
|
1142
|
+
if (entry.skillContext !== undefined) {
|
|
1143
|
+
const retainedSkills = entry.skillContext.skills.length;
|
|
1144
|
+
if (!verifiedSkillContextCheckpoint(entry.skillContext)) {
|
|
1145
|
+
// The raw pairs behind a tampered checkpoint are already outside the
|
|
1146
|
+
// replay window. Say so rather than dropping the skill without a trace.
|
|
1147
|
+
if (retainedSkills > 0) {
|
|
1148
|
+
out.push(makeTextMessage("user", UNVERIFIED_SKILL_CHECKPOINT_TEXT, entry.timestamp));
|
|
1149
|
+
}
|
|
1150
|
+
break;
|
|
1151
|
+
}
|
|
1152
|
+
for (const skill of entry.skillContext.skills) {
|
|
1153
|
+
// An explicit later state that no longer names this activation is a
|
|
1154
|
+
// deliberate off or replacement; it leaves no trace, by design.
|
|
1155
|
+
if (skillState && !skillState.unknown && !skillState.activationRefs.includes(skill.activationRef)) continue;
|
|
1156
|
+
const receipt = verified?.skills.find((candidate) => candidate.activationRef === skill.activationRef);
|
|
1157
|
+
if (!receipt || JSON.stringify(receipt) !== JSON.stringify(skill)) {
|
|
1158
|
+
// Still selected, but its original receipt cannot be re-verified
|
|
1159
|
+
// (masked, rewritten, or unknown state). Never inject unverified
|
|
1160
|
+
// bytes, and never lose the skill silently either.
|
|
1161
|
+
out.push(makeTextMessage("user", unverifiedSkillContextText(skill), entry.timestamp));
|
|
1162
|
+
continue;
|
|
1163
|
+
}
|
|
1164
|
+
// This is historical instruction context, not a generated summary or a tool result.
|
|
1165
|
+
// Keep the exact captured blocks outside summary replay's text cap.
|
|
1166
|
+
out.push(makeTextMessage("user", `Preserved skill request (verbatim):\n${skill.requestText}`, entry.timestamp));
|
|
1167
|
+
out.push(makeTextMessage("user", `Verified loaded skill: ${JSON.stringify(skill.activation)}`, entry.timestamp));
|
|
1168
|
+
for (const block of skill.content) out.push(makeTextMessage("user", block.text, entry.timestamp));
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1116
1171
|
break;
|
|
1117
1172
|
case "skillActivation":
|
|
1173
|
+
if (entry.activation.runId !== undefined || (skillState && !skillState.activationRefs.includes(entry.turnId)))
|
|
1174
|
+
break;
|
|
1118
1175
|
appendContextMessage(out, "user", skillActivationContextText(entry), entry.timestamp);
|
|
1119
1176
|
break;
|
|
1120
1177
|
// The one custom entry that becomes a model message. `/handoff` seeds a
|
|
@@ -1199,16 +1256,16 @@ export function rehydrateChatPanelFromTurns(
|
|
|
1199
1256
|
case "message": {
|
|
1200
1257
|
if (entry.role === "user") {
|
|
1201
1258
|
runAssistantMessages = [];
|
|
1202
|
-
const text =
|
|
1259
|
+
const text = replayedUserText(entry);
|
|
1203
1260
|
if (text.length > 0) chatPanel.appendUser(text);
|
|
1204
1261
|
break;
|
|
1205
1262
|
}
|
|
1206
1263
|
if (entry.role === "assistant") {
|
|
1207
1264
|
const text = chatMessageText(entry);
|
|
1208
1265
|
const failure = messageFailure(entry);
|
|
1209
|
-
const richMessage = richMessageFromEntry(entry,
|
|
1266
|
+
const richMessage = richMessageFromEntry(entry, Number.POSITIVE_INFINITY);
|
|
1210
1267
|
if (richMessage || text.length > 0 || failure) {
|
|
1211
|
-
const message = richMessage ?? makeTextMessage("assistant",
|
|
1268
|
+
const message = richMessage ?? makeTextMessage("assistant", text, entry.timestamp);
|
|
1212
1269
|
if (failure) {
|
|
1213
1270
|
(message as { stopReason?: string; errorMessage?: string }).stopReason = failure.stopReason;
|
|
1214
1271
|
(message as { stopReason?: string; errorMessage?: string }).errorMessage = failure.errorMessage;
|
|
@@ -1243,7 +1300,7 @@ export function rehydrateChatPanelFromTurns(
|
|
|
1243
1300
|
type: "tool_execution_end",
|
|
1244
1301
|
toolCallId: fallbackId,
|
|
1245
1302
|
toolName: result.name,
|
|
1246
|
-
result: displayReplayToolResult(result.result,
|
|
1303
|
+
result: displayReplayToolResult(result.result, true),
|
|
1247
1304
|
isError: result.isError,
|
|
1248
1305
|
...(result.durationMs !== undefined ? { durationMs: result.durationMs } : {}),
|
|
1249
1306
|
...(resultSummary !== undefined ? { resultSummary } : {}),
|
|
@@ -1252,12 +1309,12 @@ export function rehydrateChatPanelFromTurns(
|
|
|
1252
1309
|
...(evictedReason !== undefined ? { evictedReason } : {}),
|
|
1253
1310
|
} as ChatLoopEvent);
|
|
1254
1311
|
} else {
|
|
1255
|
-
chatPanel.appendReplayBlock((width) =>
|
|
1312
|
+
chatPanel.appendReplayBlock((width, detail, unbounded) =>
|
|
1256
1313
|
renderToolResultOnly(
|
|
1257
1314
|
{
|
|
1258
1315
|
toolCallId: result.id ?? "",
|
|
1259
1316
|
toolName: result.name,
|
|
1260
|
-
result: displayReplayToolResult(result.result,
|
|
1317
|
+
result: displayReplayToolResult(result.result, true),
|
|
1261
1318
|
isError: result.isError,
|
|
1262
1319
|
...(result.durationMs !== undefined ? { durationMs: result.durationMs } : {}),
|
|
1263
1320
|
...(resultSummary !== undefined ? { resultSummary } : {}),
|
|
@@ -1266,7 +1323,7 @@ export function rehydrateChatPanelFromTurns(
|
|
|
1266
1323
|
...(evictedReason !== undefined ? { evictedReason } : {}),
|
|
1267
1324
|
},
|
|
1268
1325
|
width,
|
|
1269
|
-
{ unbounded: options.unboundedToolBodies === true },
|
|
1326
|
+
{ unbounded: unbounded || options.unboundedToolBodies === true, detail },
|
|
1270
1327
|
),
|
|
1271
1328
|
);
|
|
1272
1329
|
}
|
|
@@ -1285,21 +1342,8 @@ export function rehydrateChatPanelFromTurns(
|
|
|
1285
1342
|
break;
|
|
1286
1343
|
}
|
|
1287
1344
|
case "bashExecution": {
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
const policyFold = (detail: TranscriptDetailPolicy) => policyToolFold(detail, presentation);
|
|
1291
|
-
const unbounded = options.unboundedToolBodies === true;
|
|
1292
|
-
chatPanel.appendReplayBlock(
|
|
1293
|
-
(width, detail) =>
|
|
1294
|
-
renderBashExecutionEntry(entry, width, resolveFold(fold, policyFold(detail)) === "folded", unbounded),
|
|
1295
|
-
undefined,
|
|
1296
|
-
{
|
|
1297
|
-
policyFold,
|
|
1298
|
-
fold: () => fold,
|
|
1299
|
-
setFold: (next: FoldOverride) => {
|
|
1300
|
-
fold = next;
|
|
1301
|
-
},
|
|
1302
|
-
},
|
|
1345
|
+
chatPanel.appendReplayBlock((width, detail, unbounded) =>
|
|
1346
|
+
renderBashExecutionEntry(entry, width, detail, unbounded || options.unboundedToolBodies === true),
|
|
1303
1347
|
);
|
|
1304
1348
|
break;
|
|
1305
1349
|
}
|
|
@@ -1367,5 +1411,4 @@ export function rehydrateChatPanelFromTurns(
|
|
|
1367
1411
|
// whatever the operator had opened or folded before the switch belonged to
|
|
1368
1412
|
// the transcript they left. /export reaches the same policy with a verbose
|
|
1369
1413
|
// panel, so nothing here is terminal-only.
|
|
1370
|
-
chatPanel.clearFoldOverrides();
|
|
1371
1414
|
}
|
|
@@ -65,6 +65,7 @@ function headlineFor(ref: string, tokens: number, state: EvictedState | undefine
|
|
|
65
65
|
if (state !== undefined) {
|
|
66
66
|
parts.push(state.by === undefined ? `evicted: ${state.reason}` : `evicted: ${state.reason} by ${state.by}`);
|
|
67
67
|
}
|
|
68
|
+
if (state === undefined) parts.push("summarized");
|
|
68
69
|
parts.push(`${formatTokens(tokens)} tokens`);
|
|
69
70
|
if (offloadPath !== undefined) parts.push(`offload: ${offloadPath}`);
|
|
70
71
|
return `[/context recall] ${parts.join(" · ")}`;
|
|
@@ -85,7 +86,7 @@ export function runOperatorRecall(ref: string, deps: OperatorRecallDeps): Operat
|
|
|
85
86
|
// A ref that resolves to nothing is usually a typo or a stale marker; the
|
|
86
87
|
// shared message ends with the refs the operator could have typed instead.
|
|
87
88
|
if (!resolved.ok)
|
|
88
|
-
return { ok: false, message: `[/context recall] ${recallErrorMessage(resolved.error, entries, view)}` };
|
|
89
|
+
return { ok: false, message: `[/context recall] ${recallErrorMessage(resolved.error, entries, view, leaf)}` };
|
|
89
90
|
const { result } = resolved;
|
|
90
91
|
const fields = buildRecallFields(result, { trigger: "operator" });
|
|
91
92
|
try {
|
|
@@ -8,7 +8,11 @@ import {
|
|
|
8
8
|
} from "../domains/dispatch/budget-envelope.js";
|
|
9
9
|
import { type DispatchRequestOrigin, type RunKind, runKindSupportsLiveSteering } from "../domains/dispatch/types.js";
|
|
10
10
|
import { describeWriteBoundaryAttributionDowngrade } from "../domains/dispatch/write-boundary.js";
|
|
11
|
-
import
|
|
11
|
+
import {
|
|
12
|
+
type TrustSummaryProjection,
|
|
13
|
+
type TrustVerdict,
|
|
14
|
+
trustStateWord,
|
|
15
|
+
} from "../domains/evidence/trust-projection.js";
|
|
12
16
|
import type { ObservabilityContract, ObservabilityRunSummary } from "../domains/observability/contract.js";
|
|
13
17
|
import {
|
|
14
18
|
COST_NOT_MEASURED,
|
|
@@ -242,9 +246,7 @@ export interface DispatchOriginPresentation {
|
|
|
242
246
|
* surface; a board row sits under the fleet summary, which already owns the
|
|
243
247
|
* quadrant's single orange, so here the filled glyph carries origin by shape.
|
|
244
248
|
*/
|
|
245
|
-
|
|
246
|
-
row: Pick<DispatchBoardRow, "requestOrigin">,
|
|
247
|
-
): DispatchOriginPresentation | null {
|
|
249
|
+
function dispatchOriginPresentation(row: Pick<DispatchBoardRow, "requestOrigin">): DispatchOriginPresentation | null {
|
|
248
250
|
if (row.requestOrigin === "user") return { glyph: GLYPH.workerHuman, token: "accent" };
|
|
249
251
|
if (row.requestOrigin === "agent") return { glyph: GLYPH.workerAgent, token: "muted" };
|
|
250
252
|
if (row.requestOrigin === "internal") return { glyph: GLYPH.workerInternal, token: "dim" };
|
|
@@ -774,7 +776,18 @@ function renderTaskIslandRow(row: DispatchBoardRow, width: number): string[] {
|
|
|
774
776
|
? ` ${theme.fg("muted", truncateToWidth(row.taskSummary, Math.max(1, width - 2), "…", false))}`
|
|
775
777
|
: null;
|
|
776
778
|
|
|
777
|
-
|
|
779
|
+
const quality = isTerminalStatus(row.status)
|
|
780
|
+
? wrapTextWithAnsi(
|
|
781
|
+
` quality: ${trustStateWord("validationGrounding", row.trust?.axes.validationGrounding ?? "unknown")}`,
|
|
782
|
+
width,
|
|
783
|
+
)
|
|
784
|
+
: [];
|
|
785
|
+
return [
|
|
786
|
+
padAnsi(line1, width),
|
|
787
|
+
...quality.map((line) => padAnsi(theme.fg("muted", line), width)),
|
|
788
|
+
...(task ? [padAnsi(task, width)] : []),
|
|
789
|
+
padAnsi(telemetry, width),
|
|
790
|
+
];
|
|
778
791
|
}
|
|
779
792
|
|
|
780
793
|
/**
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { combineBashOutput, runBashCommand } from "../core/bash-exec.js";
|
|
2
|
+
import { type ExternalEditResult, editTextExternally, resolveExternalEditor } from "../core/external-editor.js";
|
|
2
3
|
import type { PendingSkillRequest } from "../core/skill-activation.js";
|
|
3
|
-
import { ToolNames } from "../core/tool-names.js";
|
|
4
4
|
import type { DispatchContract } from "../domains/dispatch/contract.js";
|
|
5
5
|
import type { SessionContract, SessionEntry } from "../domains/session/index.js";
|
|
6
|
-
import { toolPresentationPolicy } from "../tools/presentation.js";
|
|
7
6
|
import type { ChatLoop } from "./chat-loop.js";
|
|
8
7
|
import type { ChatPanel } from "./chat-panel.js";
|
|
9
8
|
import { bashExecutionEntryInput, parseEditorBashCommand, unguardPastedEditorOperator } from "./editor-bash.js";
|
|
@@ -13,18 +12,12 @@ import {
|
|
|
13
12
|
type RunningDispatchRef,
|
|
14
13
|
resolveSteerTarget,
|
|
15
14
|
} from "./editor-steer.js";
|
|
16
|
-
import { type ExternalEditResult, editTextExternally, resolveExternalEditor } from "./external-editor.js";
|
|
17
15
|
import { type BashTranscriptExecution, renderBashTranscriptExecution } from "./renderers/tool-execution.js";
|
|
18
16
|
import { parseSlashCommand, type RunIo, type SlashCommand, type SlashCommandDispatchResult } from "./slash-commands.js";
|
|
19
|
-
import {
|
|
20
|
-
type FoldOverride,
|
|
21
|
-
policyRunningToolFold,
|
|
22
|
-
policyToolFold,
|
|
23
|
-
resolveFold,
|
|
24
|
-
type TranscriptDetailPolicy,
|
|
25
|
-
} from "./transcript-detail.js";
|
|
26
17
|
|
|
27
18
|
const EDITOR_BASH_TIMEOUT_MS = 300_000;
|
|
19
|
+
/** Existing bash TERM-to-KILL grace (5s), plus settlement and session append. */
|
|
20
|
+
export const EDITOR_BASH_SHUTDOWN_MS = 6000;
|
|
28
21
|
|
|
29
22
|
/**
|
|
30
23
|
* Command shapes whose text is put back in the editor after the parser rejects
|
|
@@ -84,6 +77,7 @@ export interface EditorSubmitSessionTranscript {
|
|
|
84
77
|
}
|
|
85
78
|
|
|
86
79
|
export interface EditorSubmitDeps {
|
|
80
|
+
onLocalBashRunning?: (running: boolean) => void;
|
|
87
81
|
editor: EditorSubmitEditor;
|
|
88
82
|
ui: EditorSubmitUi;
|
|
89
83
|
io: RunIo;
|
|
@@ -125,18 +119,22 @@ export interface EditorSubmitController {
|
|
|
125
119
|
restoreQueuedFollowUpsToEditor(): void;
|
|
126
120
|
hasActiveEditorBash(): boolean;
|
|
127
121
|
cancelActiveEditorBash(): boolean;
|
|
122
|
+
/** Stop shell admission, cancel the owned command, and await its persisted result. */
|
|
123
|
+
shutdownEditorBash(): Promise<void>;
|
|
128
124
|
}
|
|
129
125
|
|
|
130
126
|
type EditorSteerSubmission = "unhandled" | "accepted" | "rejected";
|
|
131
127
|
|
|
132
128
|
/** Owns editor submission and the one local bash process attached to it. */
|
|
133
129
|
export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubmitController {
|
|
130
|
+
let shuttingDown = false;
|
|
134
131
|
let activeEditorBash: AbortController | null = null;
|
|
135
132
|
let activeEditorBashSettlement: Promise<void> | null = null;
|
|
136
133
|
|
|
137
134
|
const runEditorBash = (text: string): boolean => {
|
|
138
135
|
const parsed = parseEditorBashCommand(text);
|
|
139
136
|
if (!parsed) return false;
|
|
137
|
+
if (shuttingDown) return true;
|
|
140
138
|
if (deps.chat.isStreaming()) {
|
|
141
139
|
deps.io.stderr("[bash] response in progress. Press Esc to cancel the active run before running a local command.\n");
|
|
142
140
|
return true;
|
|
@@ -165,35 +163,19 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
165
163
|
totalBytes: 0,
|
|
166
164
|
excludeFromContext: parsed.excludeFromContext,
|
|
167
165
|
};
|
|
168
|
-
// The operator's bash row follows the same rule as a model bash call: the
|
|
169
|
-
// transcript detail policy (through bash's presentation once settled)
|
|
170
|
-
// unless the operator overrode this one block with the expand key.
|
|
171
|
-
let fold: FoldOverride;
|
|
172
|
-
const bashPresentation = toolPresentationPolicy(ToolNames.Bash, undefined);
|
|
173
|
-
const policyFold = (detail: TranscriptDetailPolicy) =>
|
|
174
|
-
execution.running ? policyRunningToolFold(detail) : policyToolFold(detail, bashPresentation);
|
|
175
166
|
deps.chatPanel.appendReplayBlock(
|
|
176
|
-
(width, detail) =>
|
|
167
|
+
(width, detail, unbounded) =>
|
|
177
168
|
renderBashTranscriptExecution(
|
|
178
|
-
{
|
|
179
|
-
...execution,
|
|
180
|
-
folded: resolveFold(fold, policyFold(detail)) === "folded",
|
|
181
|
-
...(execution.running ? { elapsedMs: Math.max(0, performance.now() - startedAt) } : {}),
|
|
182
|
-
},
|
|
169
|
+
{ ...execution, ...(execution.running ? { elapsedMs: Math.max(0, performance.now() - startedAt) } : {}) },
|
|
183
170
|
width,
|
|
171
|
+
undefined,
|
|
172
|
+
{ detail, ...(unbounded ? { unbounded } : {}) },
|
|
184
173
|
),
|
|
185
174
|
() => execution.running,
|
|
186
|
-
{
|
|
187
|
-
policyFold,
|
|
188
|
-
fold: () => fold,
|
|
189
|
-
setFold: (next: FoldOverride) => {
|
|
190
|
-
fold = next;
|
|
191
|
-
deps.ui.requestRender();
|
|
192
|
-
},
|
|
193
|
-
},
|
|
194
175
|
);
|
|
195
176
|
deps.ui.requestRender();
|
|
196
177
|
|
|
178
|
+
deps.onLocalBashRunning?.(true);
|
|
197
179
|
let settlement!: Promise<void>;
|
|
198
180
|
settlement = (async () => {
|
|
199
181
|
try {
|
|
@@ -243,6 +225,7 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
243
225
|
execution.error = msg;
|
|
244
226
|
deps.io.stderr(`[bash] ${msg}\n`);
|
|
245
227
|
} finally {
|
|
228
|
+
deps.onLocalBashRunning?.(false);
|
|
246
229
|
if (activeEditorBash === abort) activeEditorBash = null;
|
|
247
230
|
if (activeEditorBashSettlement === settlement) activeEditorBashSettlement = null;
|
|
248
231
|
deps.ui.requestRender();
|
|
@@ -394,12 +377,14 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
394
377
|
const literalText = unguardPastedEditorOperator(text);
|
|
395
378
|
const trimmed = literalText.trim();
|
|
396
379
|
if (trimmed.length === 0) return;
|
|
380
|
+
if (shuttingDown) throw new Error("editor is shutting down");
|
|
397
381
|
signal?.throwIfAborted();
|
|
398
382
|
deps.collapseLaunchpadBeforeSubmit?.();
|
|
399
383
|
if (parseEditorBashCommand(text)) {
|
|
400
384
|
while (deps.chat.isStreaming()) await awaitWithAbort(deps.chat.whenSettled(), signal);
|
|
401
385
|
while (activeEditorBashSettlement) await awaitWithAbort(activeEditorBashSettlement, signal);
|
|
402
386
|
signal?.throwIfAborted();
|
|
387
|
+
if (shuttingDown) throw new Error("editor is shutting down");
|
|
403
388
|
deps.editor.addToHistory(literalText);
|
|
404
389
|
runEditorBash(text);
|
|
405
390
|
deps.ui.requestRender();
|
|
@@ -529,6 +514,11 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
529
514
|
interruptFromEditor,
|
|
530
515
|
restoreQueuedFollowUpsToEditor,
|
|
531
516
|
hasActiveEditorBash: () => activeEditorBash !== null,
|
|
517
|
+
shutdownEditorBash: async () => {
|
|
518
|
+
shuttingDown = true;
|
|
519
|
+
activeEditorBash?.abort();
|
|
520
|
+
await activeEditorBashSettlement;
|
|
521
|
+
},
|
|
532
522
|
cancelActiveEditorBash: () => {
|
|
533
523
|
if (!activeEditorBash) return false;
|
|
534
524
|
activeEditorBash.abort();
|
|
@@ -139,7 +139,12 @@ function statusText(status: AgentStatus | undefined, now: number, width: number,
|
|
|
139
139
|
if (!status || status.phase === "idle") return null;
|
|
140
140
|
const verb = resolveFooterVerb(status, now, width);
|
|
141
141
|
if (!verb) return status.phase.replace(/_/g, " ");
|
|
142
|
-
return status.phase === "ended"
|
|
142
|
+
return status.phase === "ended" ||
|
|
143
|
+
status.phase === "tool_blocked" ||
|
|
144
|
+
status.phase === "stuck" ||
|
|
145
|
+
status.tool?.toolName === "ask_user"
|
|
146
|
+
? verb.text
|
|
147
|
+
: `${spinnerFrame(frame)} ${verb.text}`;
|
|
143
148
|
}
|
|
144
149
|
|
|
145
150
|
/** Null before anything has been priced, so the footer shows no cost field at all. */
|
|
@@ -172,7 +177,7 @@ function renderFooterCompactLines(state: FooterDashboardRenderState, width: numb
|
|
|
172
177
|
state.throughput,
|
|
173
178
|
state.sessionTokens,
|
|
174
179
|
state.sessionCost,
|
|
175
|
-
state.session.
|
|
180
|
+
state.session.outputStyle,
|
|
176
181
|
state.session.leaderArmed ?? false,
|
|
177
182
|
state.session.shutdownArmed ?? false,
|
|
178
183
|
),
|
|
@@ -434,7 +439,7 @@ export function buildFooterDashboard(deps: FooterDashboardDeps): FooterDashboard
|
|
|
434
439
|
capabilities,
|
|
435
440
|
safety,
|
|
436
441
|
toolProfile,
|
|
437
|
-
|
|
442
|
+
outputStyle: settings?.interface.outputDetail ?? "standard",
|
|
438
443
|
leaderArmed: deps.getLeaderArmed?.() ?? false,
|
|
439
444
|
shutdownArmed: deps.getShutdownArmed?.() ?? false,
|
|
440
445
|
memoryIntervention: taskMemory
|