@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { OutputStyle } from "../../core/defaults.js";
|
|
2
2
|
import { ToolNames } from "../../core/tool-names.js";
|
|
3
3
|
import {
|
|
4
4
|
type CostAggregate,
|
|
@@ -14,7 +14,6 @@ import { CONTEXT_CATEGORY_TOKEN, contextCategorySwatch, renderContextMeterBar }
|
|
|
14
14
|
import {
|
|
15
15
|
agentDisplayLabel,
|
|
16
16
|
type DispatchBoardRow,
|
|
17
|
-
dispatchOriginPresentation,
|
|
18
17
|
dispatchRowPrefix,
|
|
19
18
|
dispatchStatusPresentation,
|
|
20
19
|
} from "../dispatch-board.js";
|
|
@@ -70,7 +69,7 @@ export interface SessionFacts {
|
|
|
70
69
|
safety: string | null;
|
|
71
70
|
toolProfile: string | null;
|
|
72
71
|
/** Active transcript detail mode, shown in the dashboard so visibility is never implicit. */
|
|
73
|
-
|
|
72
|
+
outputStyle?: OutputStyle | null;
|
|
74
73
|
/**
|
|
75
74
|
* Ctrl+G armed the portable leader and is waiting for the next key. Shown
|
|
76
75
|
* because the frame between the two keystrokes was otherwise identical to
|
|
@@ -391,7 +390,7 @@ export function compactSecondaryLine(
|
|
|
391
390
|
throughput: TokenThroughputSnapshot | null = null,
|
|
392
391
|
sessionTokens: UsageBreakdown | null = null,
|
|
393
392
|
sessionCost: CostAggregate | null = null,
|
|
394
|
-
|
|
393
|
+
outputStyle?: OutputStyle | null,
|
|
395
394
|
leaderArmed = false,
|
|
396
395
|
shutdownArmed = false,
|
|
397
396
|
): string {
|
|
@@ -427,15 +426,15 @@ export function compactSecondaryLine(
|
|
|
427
426
|
context.used ?? undefined,
|
|
428
427
|
maxRightWidth,
|
|
429
428
|
compactMetricChipLimit(safeWidth),
|
|
430
|
-
|
|
429
|
+
outputStyle,
|
|
431
430
|
leaderArmed,
|
|
432
431
|
shutdownArmed,
|
|
433
432
|
);
|
|
434
433
|
// At the smallest widths the context meter consumes the entire secondary
|
|
435
434
|
// row, so keep a compact mode marker on the left instead of silently hiding
|
|
436
435
|
// the active transcript setting.
|
|
437
|
-
if (
|
|
438
|
-
const marker =
|
|
436
|
+
if (outputStyle && outputStyle !== "standard" && visibleWidth(right) === 0) {
|
|
437
|
+
const marker = outputStyle === "compact" ? "C" : outputStyle === "detailed" ? "D" : "S";
|
|
439
438
|
left = `${left}${theme.fg("dim", ` out:${marker}`)}`;
|
|
440
439
|
}
|
|
441
440
|
return joinColumns(left, right, safeWidth);
|
|
@@ -541,8 +540,8 @@ export function sessionQuadrant(facts: SessionFacts, options: ExpandedQuadrantOp
|
|
|
541
540
|
kv("profile", facts.toolProfile),
|
|
542
541
|
kv(
|
|
543
542
|
"output",
|
|
544
|
-
facts.
|
|
545
|
-
facts.
|
|
543
|
+
facts.outputStyle && facts.outputStyle !== "standard" ? facts.outputStyle : null,
|
|
544
|
+
facts.outputStyle === "detailed" ? "accent" : "muted",
|
|
546
545
|
),
|
|
547
546
|
styledKv("memory", memoryValue),
|
|
548
547
|
]);
|
|
@@ -965,35 +964,41 @@ type HarnessPhasePresentation = {
|
|
|
965
964
|
|
|
966
965
|
function shortToolLabel(status: AgentStatus, width: number): string {
|
|
967
966
|
const name = status.tool?.toolName?.trim();
|
|
968
|
-
if (name === ToolNames.AskUser) return
|
|
969
|
-
if (
|
|
967
|
+
if (name === ToolNames.AskUser) return "Needs input";
|
|
968
|
+
if (name === ToolNames.Dispatch) return "Waiting for worker";
|
|
969
|
+
if (!name || width < 72) return "Running tool";
|
|
970
970
|
const nameWidth = width >= 100 ? 18 : 12;
|
|
971
971
|
// The pill label is never padded; truncate without pad so the tool name is
|
|
972
972
|
// followed by a single space before the badge, not a column of blanks.
|
|
973
|
-
return `
|
|
973
|
+
return `Running ${truncateToWidth(name, nameWidth, "…", false)}`;
|
|
974
974
|
}
|
|
975
975
|
|
|
976
976
|
function harnessPhasePresentation(status: AgentStatus, width: number, now: number): HarnessPhasePresentation {
|
|
977
977
|
const ultraNarrow = width < 48;
|
|
978
978
|
switch (status.phase) {
|
|
979
979
|
case "idle":
|
|
980
|
-
return { glyph: GLYPH.queued, label: "
|
|
980
|
+
return { glyph: GLYPH.queued, label: "Ready", token: "muted", live: false };
|
|
981
981
|
case "preparing":
|
|
982
|
-
return { glyph: GLYPH.phaseWaiting, label: "
|
|
982
|
+
return { glyph: GLYPH.phaseWaiting, label: "Preparing", token: "info", live: true };
|
|
983
983
|
case "waiting_model":
|
|
984
|
-
return { glyph: GLYPH.phaseWaiting, label: "
|
|
984
|
+
return { glyph: GLYPH.phaseWaiting, label: "Waiting for model", token: "info", live: true };
|
|
985
985
|
case "thinking":
|
|
986
|
-
return { glyph: GLYPH.phaseThinking, label: "
|
|
986
|
+
return { glyph: GLYPH.phaseThinking, label: "Thinking", token: "reason", live: true };
|
|
987
987
|
case "writing":
|
|
988
|
-
return { glyph: GLYPH.phaseWriting, label: "
|
|
988
|
+
return { glyph: GLYPH.phaseWriting, label: "Writing", token: "accent", live: true };
|
|
989
989
|
case "tool_running":
|
|
990
|
-
return {
|
|
990
|
+
return {
|
|
991
|
+
glyph: GLYPH.phaseTool,
|
|
992
|
+
label: shortToolLabel(status, width),
|
|
993
|
+
token: "accent",
|
|
994
|
+
live: status.tool?.toolName !== ToolNames.AskUser,
|
|
995
|
+
};
|
|
991
996
|
case "tool_blocked":
|
|
992
997
|
// Attention states hold a static glyph rather than spinning: the work
|
|
993
998
|
// has paused for a human, so the pill should not read as live progress.
|
|
994
999
|
// The phase fires only on PermissionRequested, so the pill names the
|
|
995
1000
|
// wait for confirmation; "blocked" would contradict the ask overlay.
|
|
996
|
-
return { glyph: GLYPH.phaseBlocked, label: "
|
|
1001
|
+
return { glyph: GLYPH.phaseBlocked, label: "Needs approval", token: "warning", live: false };
|
|
997
1002
|
case "retrying": {
|
|
998
1003
|
const attempt = status.retry?.attempt ?? 0;
|
|
999
1004
|
const maxAttempts = status.retry?.maxAttempts ?? 0;
|
|
@@ -1005,15 +1010,26 @@ function harnessPhasePresentation(status: AgentStatus, width: number, now: numbe
|
|
|
1005
1010
|
};
|
|
1006
1011
|
}
|
|
1007
1012
|
case "compacting":
|
|
1008
|
-
return { glyph: GLYPH.phaseCompact, label: "
|
|
1013
|
+
return { glyph: GLYPH.phaseCompact, label: "Compacting context", token: "reason", live: true };
|
|
1009
1014
|
case "dispatching":
|
|
1010
|
-
return { glyph: GLYPH.phaseDispatch, label: "
|
|
1015
|
+
return { glyph: GLYPH.phaseDispatch, label: "Waiting for worker", token: "action", live: true };
|
|
1011
1016
|
case "stuck": {
|
|
1012
|
-
const seconds = Math.max(0, Math.floor((now - status.
|
|
1013
|
-
return {
|
|
1017
|
+
const seconds = Math.max(0, Math.floor((now - status.lastMeaningfulAt) / 1000));
|
|
1018
|
+
return {
|
|
1019
|
+
glyph: GLYPH.warn,
|
|
1020
|
+
label: ultraNarrow ? "No output" : `No output · ${seconds}s`,
|
|
1021
|
+
token: "warning",
|
|
1022
|
+
live: false,
|
|
1023
|
+
};
|
|
1024
|
+
}
|
|
1025
|
+
case "ended": {
|
|
1026
|
+
const stop = status.summary?.stopReason;
|
|
1027
|
+
if (stop === "error") return { glyph: GLYPH.error, label: "Failed", token: "error", live: false };
|
|
1028
|
+
if (stop === "aborted" || stop === "cancelled")
|
|
1029
|
+
return { glyph: GLYPH.cancelled, label: "Cancelled", token: "muted", live: false };
|
|
1030
|
+
if (stop === "length") return { glyph: GLYPH.warn, label: "Output limit", token: "warning", live: false };
|
|
1031
|
+
return { glyph: GLYPH.ok, label: "Ready", token: "success", live: false };
|
|
1014
1032
|
}
|
|
1015
|
-
case "ended":
|
|
1016
|
-
return { glyph: GLYPH.ok, label: "done", token: "success", live: false };
|
|
1017
1033
|
}
|
|
1018
1034
|
}
|
|
1019
1035
|
|
|
@@ -1021,31 +1037,10 @@ function activeWorkerRows(rows: ReadonlyArray<DispatchBoardRow>): ReadonlyArray<
|
|
|
1021
1037
|
return rows.filter((row) => row.status === "running" || row.status === "stale" || row.status === "enqueued");
|
|
1022
1038
|
}
|
|
1023
1039
|
|
|
1024
|
-
/**
|
|
1025
|
-
* The live worker count, split by who asked once more than one kind is running:
|
|
1026
|
-
* `◇1 ◆3` says the operator has one run of their own alongside three the model
|
|
1027
|
-
* started, which `fleet 4` cannot. A single kind keeps the plain count, and so
|
|
1028
|
-
* does a set holding a run whose origin never reached the projection, because a
|
|
1029
|
-
* split that cannot name every active run would report a total that is short.
|
|
1030
|
-
*
|
|
1031
|
-
* The chip keeps one color. Its token says the fleet is busy; origin is carried
|
|
1032
|
-
* by glyph shape, which is the same pair the board rows and the transcript
|
|
1033
|
-
* blocks use.
|
|
1034
|
-
*/
|
|
1040
|
+
/** Background work stays a count beside the main phase. */
|
|
1035
1041
|
function activeWorkerChip(rows: ReadonlyArray<DispatchBoardRow>): string {
|
|
1036
|
-
const
|
|
1037
|
-
|
|
1038
|
-
for (const row of active) {
|
|
1039
|
-
const glyph = dispatchOriginPresentation(row)?.glyph;
|
|
1040
|
-
if (glyph === undefined) return `fleet ${active.length}`;
|
|
1041
|
-
counts.set(glyph, (counts.get(glyph) ?? 0) + 1);
|
|
1042
|
-
}
|
|
1043
|
-
if (counts.size < 2) return `fleet ${active.length}`;
|
|
1044
|
-
const order = [GLYPH.workerHuman, GLYPH.workerAgent, GLYPH.workerInternal];
|
|
1045
|
-
return order
|
|
1046
|
-
.filter((glyph) => counts.has(glyph))
|
|
1047
|
-
.map((glyph) => `${glyph}${counts.get(glyph)}`)
|
|
1048
|
-
.join(" ");
|
|
1042
|
+
const count = activeWorkerRows(rows).length;
|
|
1043
|
+
return `${count} worker${count === 1 ? "" : "s"}`;
|
|
1049
1044
|
}
|
|
1050
1045
|
|
|
1051
1046
|
function harnessBadge(
|
|
@@ -1066,8 +1061,8 @@ function harnessBadge(
|
|
|
1066
1061
|
return badgeText ? theme.fg("muted", badgeText) : "";
|
|
1067
1062
|
}
|
|
1068
1063
|
|
|
1069
|
-
function
|
|
1070
|
-
return verbosity
|
|
1064
|
+
function outputStyleLabel(verbosity: OutputStyle): string {
|
|
1065
|
+
return verbosity.charAt(0).toUpperCase() + verbosity.slice(1);
|
|
1071
1066
|
}
|
|
1072
1067
|
|
|
1073
1068
|
function buildHarnessStatePill(
|
|
@@ -1112,7 +1107,6 @@ const CHIP_RANK_SHUTDOWN = -2;
|
|
|
1112
1107
|
const CHIP_RANK_LEADER = -1;
|
|
1113
1108
|
const CHIP_RANK_TOTALS = 0;
|
|
1114
1109
|
const CHIP_RANK_DETAIL = 1;
|
|
1115
|
-
const CHIP_RANK_DEFERRED = 2;
|
|
1116
1110
|
|
|
1117
1111
|
interface RankedChip {
|
|
1118
1112
|
text: string;
|
|
@@ -1156,20 +1150,17 @@ function buildMetricStrip(
|
|
|
1156
1150
|
liveInputTokens: number | null | undefined,
|
|
1157
1151
|
maxWidth: number,
|
|
1158
1152
|
maxChipsCount = 6,
|
|
1159
|
-
|
|
1153
|
+
outputStyle?: OutputStyle | null,
|
|
1160
1154
|
leaderArmed = false,
|
|
1161
1155
|
shutdownArmed = false,
|
|
1162
1156
|
): string {
|
|
1163
1157
|
const safeMaxWidth = Math.max(0, Math.floor(maxWidth));
|
|
1164
1158
|
if (safeMaxWidth <= 0) return "";
|
|
1165
1159
|
const isStreaming = status.phase !== "idle" && status.phase !== "ended";
|
|
1166
|
-
const
|
|
1167
|
-
if (!isStreaming && !lastTurn && !meaningfulVerbosity && !leaderArmed && !shutdownArmed) return "";
|
|
1160
|
+
const style = outputStyle ?? "standard";
|
|
1168
1161
|
|
|
1169
1162
|
const candidates: Array<string | null> = [];
|
|
1170
|
-
|
|
1171
|
-
const deferred: Array<string | null> = [];
|
|
1172
|
-
if (isStreaming) {
|
|
1163
|
+
if (isStreaming && outputStyle === "detailed") {
|
|
1173
1164
|
const tps = finiteNonNegative(throughput?.tokensPerSecond);
|
|
1174
1165
|
const rounded = tps > 0 ? (tps >= 10 ? Math.round(tps) : Math.round(tps * 10) / 10) : null;
|
|
1175
1166
|
candidates.push(rounded !== null ? theme.fg("success", `${GLYPH.speed}${rounded}/s`) : null);
|
|
@@ -1186,39 +1177,7 @@ function buildMetricStrip(
|
|
|
1186
1177
|
finiteNonNegative(lastTurn?.inputTokens) ||
|
|
1187
1178
|
finiteNonNegative(sessionTokens?.input);
|
|
1188
1179
|
candidates.push(inputTokens > 0 ? theme.fg("muted", `${GLYPH.up}${formatFooterTokens(inputTokens)}`) : null);
|
|
1189
|
-
} else if (lastTurn) {
|
|
1190
|
-
const stop = stopReasonStyle(lastTurn.stopReason);
|
|
1191
|
-
candidates.push(theme.fg(stop.token, `${stop.glyph} ${formatCompactMs(lastTurn.elapsedMs)}`));
|
|
1192
|
-
candidates.push(
|
|
1193
|
-
theme.fg(
|
|
1194
|
-
"muted",
|
|
1195
|
-
`${GLYPH.up}${formatFooterTokens(lastTurn.inputTokens)} ${GLYPH.down}${formatFooterTokens(lastTurn.outputTokens)}`,
|
|
1196
|
-
),
|
|
1197
|
-
);
|
|
1198
|
-
candidates.push(reasoningChip(theme, lastTurn));
|
|
1199
|
-
// Held back so the session totals below outrank them. The chip list is cut
|
|
1200
|
-
// to `maxChipsCount` before it is measured, and with cache and tools ahead
|
|
1201
|
-
// of the totals an 80-column terminal spent the whole budget on per-turn
|
|
1202
|
-
// detail: the cost field disappeared from the footer at the exact moment
|
|
1203
|
-
// it acquired a value, while `/cost` on the same session read `cost
|
|
1204
|
-
// unknown`. Two surfaces, two answers, because of a slice.
|
|
1205
|
-
deferred.push(
|
|
1206
|
-
lastTurn.cacheReadTokens > 0 || lastTurn.cacheWriteTokens > 0
|
|
1207
|
-
? theme.fg(
|
|
1208
|
-
"dim",
|
|
1209
|
-
`cache ${formatFooterTokens(lastTurn.cacheReadTokens)}/${formatFooterTokens(lastTurn.cacheWriteTokens)}`,
|
|
1210
|
-
)
|
|
1211
|
-
: null,
|
|
1212
|
-
);
|
|
1213
|
-
if (lastTurn.toolCount > 0) {
|
|
1214
|
-
const label = `${lastTurn.toolCount} tool${lastTurn.toolCount === 1 ? "" : "s"}`;
|
|
1215
|
-
const errors = lastTurn.toolErrorCount > 0 ? theme.fg("error", ` ${lastTurn.toolErrorCount}${GLYPH.error}`) : "";
|
|
1216
|
-
deferred.push(`${theme.fg("muted", label)}${errors}`);
|
|
1217
|
-
} else {
|
|
1218
|
-
deferred.push(null);
|
|
1219
|
-
}
|
|
1220
1180
|
}
|
|
1221
|
-
if (meaningfulVerbosity) deferred.push(theme.fg("muted", `out ${outputVerbosityLabel(meaningfulVerbosity)}`));
|
|
1222
1181
|
|
|
1223
1182
|
const fallbackTotal = finiteNonNegative(sessionTokens?.input) + finiteNonNegative(sessionTokens?.output);
|
|
1224
1183
|
const cumulativeTotal = finiteNonNegative(sessionTokens?.totalTokens) || fallbackTotal;
|
|
@@ -1232,6 +1191,7 @@ function buildMetricStrip(
|
|
|
1232
1191
|
|
|
1233
1192
|
const chipLimit = Math.max(0, Math.floor(maxChipsCount));
|
|
1234
1193
|
const chips: RankedChip[] = [];
|
|
1194
|
+
pushChip(chips, theme.fg("muted", outputStyleLabel(style)), CHIP_RANK_LEADER);
|
|
1235
1195
|
// Ranked above every measurement: the strip is cut by dropping the
|
|
1236
1196
|
// lowest-ranked chip, and these two are the answer to "did that key
|
|
1237
1197
|
// register". The quit hint outranks the leader because its window is
|
|
@@ -1245,6 +1205,5 @@ function buildMetricStrip(
|
|
|
1245
1205
|
for (const chip of candidates) pushChip(chips, chip, CHIP_RANK_DETAIL);
|
|
1246
1206
|
pushChip(chips, totalChip, CHIP_RANK_TOTALS);
|
|
1247
1207
|
pushChip(chips, costChip, CHIP_RANK_DETAIL);
|
|
1248
|
-
for (const chip of deferred) pushChip(chips, chip, CHIP_RANK_DEFERRED);
|
|
1249
1208
|
return joinChips(theme, selectChips(theme, chips, chipLimit, safeMaxWidth));
|
|
1250
1209
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { PermissionRequestedPayload } from "../core/bus-events.js";
|
|
2
2
|
import type { ClioSettings } from "../core/config.js";
|
|
3
|
+
import { nextOutputStyle } from "../core/defaults.js";
|
|
3
4
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
4
5
|
import { expandInlineFileReferencesAsync } from "../core/file-references.js";
|
|
5
6
|
import type { PendingSkillRequest } from "../core/skill-activation.js";
|
|
7
|
+
import { getTerminationCoordinator } from "../core/termination.js";
|
|
6
8
|
import { clioStateDir } from "../core/xdg.js";
|
|
7
9
|
import type { AgentsContract } from "../domains/agents/contract.js";
|
|
8
10
|
import type { ClioKeybinding } from "../domains/config/keybindings.js";
|
|
@@ -33,7 +35,7 @@ import { emitCommandNotice } from "./command-fallbacks.js";
|
|
|
33
35
|
import { appendNotice } from "./command-output.js";
|
|
34
36
|
import { dispatchCouncilThroughRegistry } from "./council-dispatch.js";
|
|
35
37
|
import { createDispatchSteering } from "./dispatch-steering.js";
|
|
36
|
-
import { createEditorSubmitController } from "./editor-submit.js";
|
|
38
|
+
import { createEditorSubmitController, EDITOR_BASH_SHUTDOWN_MS } from "./editor-submit.js";
|
|
37
39
|
import { createInteractiveDesktopNotifications } from "./footer/notifications.js";
|
|
38
40
|
import { createInteractiveEventProjection } from "./interactive-event-projection.js";
|
|
39
41
|
import { createInteractiveInputRuntime } from "./interactive-input-runtime.js";
|
|
@@ -325,11 +327,7 @@ export interface KeyBindingDeps {
|
|
|
325
327
|
cycleScopedModelForward: () => void;
|
|
326
328
|
cycleScopedModelBackward: () => void;
|
|
327
329
|
dismissNotifications: () => void;
|
|
328
|
-
|
|
329
|
-
toggleAllToolExpansion: () => void;
|
|
330
|
-
toggleLiveToolOutput: () => void;
|
|
331
|
-
toggleThinkingExpansion: () => void;
|
|
332
|
-
toggleAllThinkingExpansion: () => void;
|
|
330
|
+
cycleOutputStyle: () => void;
|
|
333
331
|
openExternalEditor: () => void;
|
|
334
332
|
queueFollowUp: () => void;
|
|
335
333
|
interruptWithMessage: () => void;
|
|
@@ -360,18 +358,12 @@ export function resolveCtrlCAction(deps: CtrlCActionDeps): CtrlCAction {
|
|
|
360
358
|
|
|
361
359
|
function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): boolean {
|
|
362
360
|
switch (id) {
|
|
361
|
+
case "clio-coder.output.cycle":
|
|
362
|
+
deps.cycleOutputStyle();
|
|
363
|
+
return true;
|
|
363
364
|
case "clio-coder.notifications.dismiss":
|
|
364
365
|
deps.dismissNotifications();
|
|
365
366
|
return true;
|
|
366
|
-
case "clio-coder.tool.expand":
|
|
367
|
-
deps.toggleToolExpansion();
|
|
368
|
-
return true;
|
|
369
|
-
case "clio-coder.tool.expandAll":
|
|
370
|
-
deps.toggleAllToolExpansion();
|
|
371
|
-
return true;
|
|
372
|
-
case "clio-coder.tool.liveOutput":
|
|
373
|
-
deps.toggleLiveToolOutput();
|
|
374
|
-
return true;
|
|
375
367
|
case "clio-coder.editor.external":
|
|
376
368
|
deps.openExternalEditor();
|
|
377
369
|
return true;
|
|
@@ -384,12 +376,6 @@ function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): bo
|
|
|
384
376
|
case "clio-coder.message.dequeue":
|
|
385
377
|
deps.restoreQueuedFollowUps();
|
|
386
378
|
return true;
|
|
387
|
-
case "clio-coder.thinking.expand":
|
|
388
|
-
deps.toggleThinkingExpansion();
|
|
389
|
-
return true;
|
|
390
|
-
case "clio-coder.thinking.expandAll":
|
|
391
|
-
deps.toggleAllThinkingExpansion();
|
|
392
|
-
return true;
|
|
393
379
|
case "clio-coder.status.toggle":
|
|
394
380
|
deps.toggleStatus();
|
|
395
381
|
return true;
|
|
@@ -587,6 +573,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
587
573
|
...(deps.session ? { session: deps.session } : {}),
|
|
588
574
|
...(deps.getSessionId ? { getSessionId: deps.getSessionId } : {}),
|
|
589
575
|
...(deps.getTaskBoard ? { getTaskBoard: deps.getTaskBoard } : {}),
|
|
576
|
+
...(deps.userTasks ? { userTasks: deps.userTasks } : {}),
|
|
590
577
|
...(deps.getTaskMemoryStatus ? { getTaskMemoryStatus: deps.getTaskMemoryStatus } : {}),
|
|
591
578
|
...(deps.getTaskMemorySeedOffer ? { getTaskMemorySeedOffer: deps.getTaskMemorySeedOffer } : {}),
|
|
592
579
|
...(deps.getContextState ? { getContextState: deps.getContextState } : {}),
|
|
@@ -669,8 +656,6 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
669
656
|
recordToolStart: (toolName, toolCallId) => presentation.recordToolStart(toolCallId, toolName),
|
|
670
657
|
recordToolEnd: (_toolName, toolCallId, isError, truncated) =>
|
|
671
658
|
presentation.recordToolEnd({ toolCallId, isError, truncated }),
|
|
672
|
-
setStatusLine: (line) => chatPanel.setStatusLine(line),
|
|
673
|
-
setLiveReasoning: (view) => chatPanel.setLiveReasoning(view),
|
|
674
659
|
setLastTurnSummary: (summary) => presentation.setLastTurnSummary(summary),
|
|
675
660
|
startTerminalProgress: () => agentProgress.start(),
|
|
676
661
|
stopTerminalProgress: () => agentProgress.stop(),
|
|
@@ -701,13 +686,13 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
701
686
|
io,
|
|
702
687
|
bus: deps.bus,
|
|
703
688
|
dispatch: deps.dispatch,
|
|
689
|
+
...(deps.getDecisionBoard ? { getDecisionBoard: deps.getDecisionBoard } : {}),
|
|
704
690
|
...(deps.session ? { session: deps.session } : {}),
|
|
705
691
|
providers: deps.providers,
|
|
706
692
|
chat: deps.chat,
|
|
707
693
|
chatPanel: {
|
|
708
694
|
appendReplayBlock: (...args) => chatRenderer.mutate(() => chatPanel.appendReplayBlock(...args), "slash-output"),
|
|
709
695
|
appendUser: (text, status) => chatRenderer.mutate(() => chatPanel.appendUser(text, status), "user-submit"),
|
|
710
|
-
clearFoldOverrides: () => chatRenderer.mutate(() => chatPanel.clearFoldOverrides(), "output-detail"),
|
|
711
696
|
},
|
|
712
697
|
beforeSemanticSubmit: () => chatRenderer.flush(),
|
|
713
698
|
settleVisibleFrame: (reason) => chatRenderer.flushAndCommit(reason),
|
|
@@ -785,6 +770,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
785
770
|
});
|
|
786
771
|
|
|
787
772
|
const editorSubmit = createEditorSubmitController({
|
|
773
|
+
onLocalBashRunning: presentation.setLocalBashRunning,
|
|
788
774
|
editor,
|
|
789
775
|
ui: tui,
|
|
790
776
|
io,
|
|
@@ -804,6 +790,9 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
804
790
|
expandSubmit: (text) => expandInteractiveSubmitAsync(text, deps.resources),
|
|
805
791
|
notify,
|
|
806
792
|
});
|
|
793
|
+
// The lease drains the terminal; operator shell ownership outlives that
|
|
794
|
+
// surface and must settle before the session domain stops, on every exit.
|
|
795
|
+
getTerminationCoordinator().onDrain(() => editorSubmit.shutdownEditorBash(), { timeoutMs: EDITOR_BASH_SHUTDOWN_MS });
|
|
807
796
|
editor.onSubmit = editorSubmit.submitEditorText;
|
|
808
797
|
|
|
809
798
|
const interactiveTickers = createInteractiveTickers({
|
|
@@ -1059,6 +1048,16 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
1059
1048
|
dispatchAction: dispatchInteractiveAction,
|
|
1060
1049
|
actions: {
|
|
1061
1050
|
canExit: () => editor.getText().length === 0,
|
|
1051
|
+
cycleOutputStyle: () => {
|
|
1052
|
+
const settings = deps.getSettings?.();
|
|
1053
|
+
if (!settings || !deps.commitSetting) return;
|
|
1054
|
+
presentation.changeOutputStyle(() => {
|
|
1055
|
+
const next = structuredClone(settings) as ClioSettings;
|
|
1056
|
+
next.interface.outputDetail = nextOutputStyle(next.interface.outputDetail);
|
|
1057
|
+
deps.commitSetting?.("interface.outputDetail", next, "session");
|
|
1058
|
+
});
|
|
1059
|
+
footer.refresh();
|
|
1060
|
+
},
|
|
1062
1061
|
availableThinkingLevels: () => availableInteractiveThinkingLevels(deps),
|
|
1063
1062
|
onCycleThinking: () => deps.onCycleThinking?.(),
|
|
1064
1063
|
cycleScopedModelForward: () => {
|
|
@@ -1111,31 +1110,12 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
1111
1110
|
steerSelectedDispatch,
|
|
1112
1111
|
cancelSelectedDispatch,
|
|
1113
1112
|
cancelActiveEditorBash: () => editorSubmit.cancelActiveEditorBash(),
|
|
1114
|
-
isStreaming: () => deps.chat.isStreaming(),
|
|
1113
|
+
isStreaming: () => deps.chat.isStreaming() || deps.chat.turnPreparation().phase === "compacting",
|
|
1115
1114
|
cancelActiveRun,
|
|
1116
1115
|
editor,
|
|
1117
1116
|
editorSubmit,
|
|
1118
1117
|
requestRender: () => tui.requestRender(),
|
|
1119
1118
|
notifications,
|
|
1120
|
-
chatPanel: {
|
|
1121
|
-
toggleLastToolExpanded: () => chatPanel.toggleLastToolExpanded(),
|
|
1122
|
-
toggleAllToolsExpanded: () => chatPanel.toggleAllToolsExpanded(),
|
|
1123
|
-
toggleLiveToolOutput: () => chatPanel.toggleLiveToolOutput(),
|
|
1124
|
-
toggleLastThinking: () => {
|
|
1125
|
-
let changed = false;
|
|
1126
|
-
chatRenderer.mutate(() => {
|
|
1127
|
-
changed = chatPanel.toggleLastThinking();
|
|
1128
|
-
}, "thinking-visibility");
|
|
1129
|
-
return changed;
|
|
1130
|
-
},
|
|
1131
|
-
toggleAllThinking: () => {
|
|
1132
|
-
let changed = false;
|
|
1133
|
-
chatRenderer.mutate(() => {
|
|
1134
|
-
changed = chatPanel.toggleAllThinking();
|
|
1135
|
-
}, "thinking-visibility");
|
|
1136
|
-
return changed;
|
|
1137
|
-
},
|
|
1138
|
-
},
|
|
1139
1119
|
shutdown: {
|
|
1140
1120
|
stopTickers: presentation.stopTickers,
|
|
1141
1121
|
disposeInteractiveTickers: interactiveTickers.dispose,
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
import type { ClioSettings } from "../core/config.js";
|
|
12
12
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
13
13
|
import { routingChangeNotices } from "../core/session-routing.js";
|
|
14
|
-
import { visibleWidth } from "../engine/tui.js";
|
|
15
14
|
import {
|
|
16
15
|
budgetAlertNotice,
|
|
17
16
|
middlewareHookFailedSessionNotice,
|
|
@@ -26,27 +25,11 @@ import {
|
|
|
26
25
|
toolBudgetAuditReason,
|
|
27
26
|
toolBudgetStopReason,
|
|
28
27
|
} from "./loop-guard-interrupt.js";
|
|
29
|
-
import {
|
|
30
|
-
type AgentStatus,
|
|
31
|
-
INLINE_STATUS_INDENT_COLS,
|
|
32
|
-
type ReasoningUsageView,
|
|
33
|
-
reasoningFromTally,
|
|
34
|
-
resolveInlineVerb,
|
|
35
|
-
type StatusPhase,
|
|
36
|
-
spinnerFrame,
|
|
37
|
-
type TurnSummary,
|
|
38
|
-
type VerbRender,
|
|
39
|
-
} from "./status/index.js";
|
|
28
|
+
import type { AgentStatus, TurnSummary } from "./status/index.js";
|
|
40
29
|
|
|
41
30
|
export type InteractiveProjectionNoticeLevel = "info" | "success" | "warning" | "error";
|
|
42
31
|
export type InteractiveTranscriptNoticeLevel = "info" | "success" | "warn" | "error";
|
|
43
32
|
|
|
44
|
-
export interface InteractiveStatusLine {
|
|
45
|
-
phase: StatusPhase;
|
|
46
|
-
verb: string;
|
|
47
|
-
toneHint: VerbRender["toneHint"];
|
|
48
|
-
}
|
|
49
|
-
|
|
50
33
|
export interface InteractiveEventProjectionDeps {
|
|
51
34
|
bus: SafeEventBus;
|
|
52
35
|
chat: {
|
|
@@ -69,12 +52,10 @@ export interface InteractiveEventProjectionDeps {
|
|
|
69
52
|
resetAskUserCancellation: () => void;
|
|
70
53
|
recordToolStart: (toolName: string, toolCallId: string) => void;
|
|
71
54
|
recordToolEnd: (toolName: string, toolCallId: string, isError: boolean, truncated: boolean) => void;
|
|
72
|
-
setStatusLine: (line: InteractiveStatusLine | null) => void;
|
|
73
55
|
/**
|
|
74
56
|
* Publish the live turn's reasoning projection to the transcript. Optional so
|
|
75
57
|
* a host without a chat panel still gets every other projection.
|
|
76
58
|
*/
|
|
77
|
-
setLiveReasoning?: (view: ReasoningUsageView | null) => void;
|
|
78
59
|
setLastTurnSummary: (summary: TurnSummary) => void;
|
|
79
60
|
startTerminalProgress: () => void;
|
|
80
61
|
stopTerminalProgress: () => void;
|
|
@@ -126,8 +107,6 @@ function askUserInterviewClosedByToolResult(event: {
|
|
|
126
107
|
* subscriptions.
|
|
127
108
|
*/
|
|
128
109
|
export function createInteractiveEventProjection(deps: InteractiveEventProjectionDeps): InteractiveEventProjection {
|
|
129
|
-
const now = deps.now ?? Date.now;
|
|
130
|
-
|
|
131
110
|
for (const notice of deps.initialNotices ?? []) {
|
|
132
111
|
const text = notice.trim();
|
|
133
112
|
if (text.length === 0) continue;
|
|
@@ -187,30 +166,9 @@ export function createInteractiveEventProjection(deps: InteractiveEventProjectio
|
|
|
187
166
|
}),
|
|
188
167
|
);
|
|
189
168
|
|
|
190
|
-
let statusInlineFrame = 0;
|
|
191
169
|
primaryUnsubscribers.push(
|
|
192
170
|
deps.status.subscribe((status) => {
|
|
193
|
-
|
|
194
|
-
// line, the turn receipt, and the footer state the same number.
|
|
195
|
-
deps.setLiveReasoning?.(
|
|
196
|
-
status.phase === "idle" || status.phase === "ended" ? null : reasoningFromTally(status.runTally),
|
|
197
|
-
);
|
|
198
|
-
if (status.phase === "idle") {
|
|
199
|
-
deps.setStatusLine(null);
|
|
200
|
-
} else if (status.phase === "ended") {
|
|
201
|
-
deps.setStatusLine(null);
|
|
202
|
-
if (status.summary) deps.setLastTurnSummary(status.summary);
|
|
203
|
-
} else {
|
|
204
|
-
const cols = deps.getTerminalColumns();
|
|
205
|
-
const frame = cols < 30 ? "" : `${spinnerFrame(statusInlineFrame)} `;
|
|
206
|
-
const verb = resolveInlineVerb(status, now(), cols, INLINE_STATUS_INDENT_COLS + visibleWidth(frame));
|
|
207
|
-
if (verb) {
|
|
208
|
-
deps.setStatusLine({ phase: status.phase, verb: `${frame}${verb.text}`, toneHint: verb.toneHint });
|
|
209
|
-
statusInlineFrame = (statusInlineFrame + 1) % 10;
|
|
210
|
-
} else {
|
|
211
|
-
deps.setStatusLine(null);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
171
|
+
if (status.phase === "ended" && status.summary) deps.setLastTurnSummary(status.summary);
|
|
214
172
|
deps.refreshFooter();
|
|
215
173
|
deps.requestRender();
|
|
216
174
|
}),
|
|
@@ -251,9 +209,10 @@ export function createInteractiveEventProjection(deps: InteractiveEventProjectio
|
|
|
251
209
|
typeof event.tokensBefore === "number" &&
|
|
252
210
|
typeof event.tokensAfter === "number"
|
|
253
211
|
) {
|
|
212
|
+
const outcome = event.tokensAfter < event.tokensBefore ? "Reclaimed context" : "Context updated";
|
|
254
213
|
deps.notify(
|
|
255
214
|
"info",
|
|
256
|
-
`[Compaction]
|
|
215
|
+
`[Compaction] ${outcome}: ${event.tokensBefore} -> ${event.tokensAfter} tokens (${event.stage})`,
|
|
257
216
|
"compaction-notice",
|
|
258
217
|
);
|
|
259
218
|
}
|
|
@@ -388,6 +347,11 @@ export function createInteractiveEventProjection(deps: InteractiveEventProjectio
|
|
|
388
347
|
|
|
389
348
|
const seenMiddlewareBudgetWarnings = new Set<string>();
|
|
390
349
|
remainingUnsubscribers.push(
|
|
350
|
+
deps.bus.on(BusChannels.ExtensionsLoadIssue, (payload) => {
|
|
351
|
+
if (typeof payload?.message !== "string" || payload.message.trim().length === 0) return;
|
|
352
|
+
deps.appendTranscriptNotice("warn", payload.message);
|
|
353
|
+
deps.requestRender();
|
|
354
|
+
}),
|
|
391
355
|
deps.bus.on(BusChannels.MiddlewareHookFailed, (payload) => {
|
|
392
356
|
const notice = middlewareHookFailedSessionNotice(payload, seenMiddlewareBudgetWarnings);
|
|
393
357
|
if (notice === null) return;
|
|
@@ -30,11 +30,7 @@ export interface InteractiveInputKeyActionDeps {
|
|
|
30
30
|
cycleScopedModelForward: () => void;
|
|
31
31
|
cycleScopedModelBackward: () => void;
|
|
32
32
|
dismissNotifications: () => void;
|
|
33
|
-
|
|
34
|
-
toggleAllToolExpansion: () => void;
|
|
35
|
-
toggleLiveToolOutput: () => void;
|
|
36
|
-
toggleThinkingExpansion: () => void;
|
|
37
|
-
toggleAllThinkingExpansion: () => void;
|
|
33
|
+
cycleOutputStyle: () => void;
|
|
38
34
|
openExternalEditor: () => void;
|
|
39
35
|
queueFollowUp: () => void;
|
|
40
36
|
interruptWithMessage: () => void;
|
|
@@ -49,6 +45,7 @@ export interface InteractiveInputRuntimeDeps {
|
|
|
49
45
|
dispatchAction: (id: ClioKeybinding, deps: InteractiveInputKeyActionDeps) => boolean;
|
|
50
46
|
actions: {
|
|
51
47
|
canExit(): boolean;
|
|
48
|
+
cycleOutputStyle(): void;
|
|
52
49
|
availableThinkingLevels(): ReadonlyArray<string>;
|
|
53
50
|
onCycleThinking(): void;
|
|
54
51
|
cycleScopedModelForward(): void;
|
|
@@ -105,13 +102,6 @@ export interface InteractiveInputRuntimeDeps {
|
|
|
105
102
|
dismiss(id: string): void;
|
|
106
103
|
dismissAll(): void;
|
|
107
104
|
};
|
|
108
|
-
chatPanel: {
|
|
109
|
-
toggleLastToolExpanded(): boolean;
|
|
110
|
-
toggleAllToolsExpanded(): boolean;
|
|
111
|
-
toggleLiveToolOutput(): void;
|
|
112
|
-
toggleLastThinking(): boolean;
|
|
113
|
-
toggleAllThinking(): boolean;
|
|
114
|
-
};
|
|
115
105
|
shutdown: {
|
|
116
106
|
stopTickers(): void;
|
|
117
107
|
disposeInteractiveTickers(): void;
|
|
@@ -171,18 +161,7 @@ export function createInteractiveInputRuntime(deps: InteractiveInputRuntimeDeps)
|
|
|
171
161
|
deps.requestRender();
|
|
172
162
|
},
|
|
173
163
|
dismissNotifications: () => controller.dismissNotifications(),
|
|
174
|
-
|
|
175
|
-
toggleAllToolExpansion: () => {
|
|
176
|
-
if (deps.chatPanel.toggleAllToolsExpanded()) deps.requestRender();
|
|
177
|
-
},
|
|
178
|
-
toggleLiveToolOutput: () => {
|
|
179
|
-
deps.chatPanel.toggleLiveToolOutput();
|
|
180
|
-
deps.requestRender();
|
|
181
|
-
},
|
|
182
|
-
toggleThinkingExpansion: () => controller.toggleThinkingExpansion(),
|
|
183
|
-
toggleAllThinkingExpansion: () => {
|
|
184
|
-
if (deps.chatPanel.toggleAllThinking()) deps.requestRender();
|
|
185
|
-
},
|
|
164
|
+
cycleOutputStyle: deps.actions.cycleOutputStyle,
|
|
186
165
|
openExternalEditor: deps.editorSubmit.openExternalEditorForInput,
|
|
187
166
|
queueFollowUp: deps.editorSubmit.queueFollowUpFromEditor,
|
|
188
167
|
interruptWithMessage: deps.editorSubmit.interruptFromEditor,
|
|
@@ -277,10 +256,6 @@ export function createInteractiveInputRuntime(deps: InteractiveInputRuntimeDeps)
|
|
|
277
256
|
listNotifications: () => deps.notifications.list(),
|
|
278
257
|
dismissNotification: (id) => deps.notifications.dismiss(id),
|
|
279
258
|
dismissAllNotifications: () => deps.notifications.dismissAll(),
|
|
280
|
-
toggleLastToolExpanded: () => deps.chatPanel.toggleLastToolExpanded(),
|
|
281
|
-
toggleAllToolsExpanded: () => deps.chatPanel.toggleAllToolsExpanded(),
|
|
282
|
-
toggleLastThinking: () => deps.chatPanel.toggleLastThinking(),
|
|
283
|
-
toggleAllThinking: () => deps.chatPanel.toggleAllThinking(),
|
|
284
259
|
shutdownDisposers: [
|
|
285
260
|
() => deps.shutdown.stopTickers(),
|
|
286
261
|
() => leaderKeys.dispose(),
|