@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,3 +1,6 @@
|
|
|
1
|
+
import type { TranscriptDetailPolicy } from "../transcript-detail.js";
|
|
2
|
+
import { transcriptDetail } from "../transcript-detail.js";
|
|
3
|
+
import { previewBudget, previewRows } from "./preview.js";
|
|
1
4
|
/**
|
|
2
5
|
* Structured renderer for tool-execution chat segments (Slice A of the
|
|
3
6
|
* pi-coding-agent parity work). pi-coding-agent renders every tool call as
|
|
@@ -12,6 +15,7 @@
|
|
|
12
15
|
* two surfaces stay byte-identical.
|
|
13
16
|
*/
|
|
14
17
|
|
|
18
|
+
import { trustStateWord } from "../../domains/evidence/trust-projection.js";
|
|
15
19
|
import { sanitizeCallTargetText } from "../../domains/safety/call-target.js";
|
|
16
20
|
import { redactSecretString, redactToolArgs } from "../../domains/safety/redaction.js";
|
|
17
21
|
import { formatSize } from "../../engine/truncate.js";
|
|
@@ -47,10 +51,7 @@ const ARG_PREVIEW_LIMIT = 60;
|
|
|
47
51
|
const WEB_FETCH_ARG_PREVIEW_LIMIT = 140;
|
|
48
52
|
const FULL_RESULT_PREVIEW_LIMIT = 60_000;
|
|
49
53
|
const FULL_RESULT_ROW_LIMIT = 120;
|
|
50
|
-
const STREAMING_RESULT_ROW_LIMIT = 20;
|
|
51
54
|
const ARGS_BODY_LINE_LIMIT = 24;
|
|
52
|
-
/** Rows of mutation diff a folded edit/write row keeps visible before it defers to the body. */
|
|
53
|
-
const FOLDED_DIFF_ROW_LIMIT = 24;
|
|
54
55
|
const STATUS_OK_GLYPH = GLYPH.ok;
|
|
55
56
|
const STATUS_ERROR_GLYPH = GLYPH.error;
|
|
56
57
|
|
|
@@ -110,6 +111,8 @@ export interface ToolBodyRenderOptions {
|
|
|
110
111
|
unbounded?: boolean;
|
|
111
112
|
/** Live rows color mutation diffs; replay and export deliberately use plain text. */
|
|
112
113
|
diffStyle?: "color" | "plain";
|
|
114
|
+
detail?: TranscriptDetailPolicy;
|
|
115
|
+
terminalRows?: number;
|
|
113
116
|
}
|
|
114
117
|
|
|
115
118
|
/** Row cap for a tool body: unbounded lifts both the row and char limits. */
|
|
@@ -320,7 +323,22 @@ function outcomeSummary(finished: ToolExecutionFinished): string | null {
|
|
|
320
323
|
if (finished.toolName === "dispatch") {
|
|
321
324
|
const receipts = numberField(details, "receiptCount");
|
|
322
325
|
const failed = numberField(details, "failedCount") ?? 0;
|
|
323
|
-
if (receipts !== null)
|
|
326
|
+
if (receipts !== null) {
|
|
327
|
+
const runs = Array.isArray(details?.runs) ? details.runs.slice(0, receipts) : [];
|
|
328
|
+
const qualityCounts = new Map<string, number>();
|
|
329
|
+
for (const run of runs) {
|
|
330
|
+
const trust = isPlainObject(run) && isPlainObject(run.trust) ? run.trust : null;
|
|
331
|
+
const axes = isPlainObject(trust?.axes) ? trust.axes : null;
|
|
332
|
+
const word = trustStateWord("validationGrounding", stringField(axes, "validationGrounding") ?? "unknown");
|
|
333
|
+
qualityCounts.set(word, (qualityCounts.get(word) ?? 0) + 1);
|
|
334
|
+
}
|
|
335
|
+
if (runs.length < receipts) {
|
|
336
|
+
const unknown = trustStateWord("validationGrounding", "unknown");
|
|
337
|
+
qualityCounts.set(unknown, (qualityCounts.get(unknown) ?? 0) + receipts - runs.length);
|
|
338
|
+
}
|
|
339
|
+
const quality = [...qualityCounts].map(([word, count]) => `${count} ${word}`).join(", ");
|
|
340
|
+
return `${receipts} task${receipts === 1 ? "" : "s"} -> ${receipts - failed} execution ok${failed > 0 ? `, ${failed} execution failed` : ""}${quality ? `; quality: ${quality}` : ""}`;
|
|
341
|
+
}
|
|
324
342
|
return null;
|
|
325
343
|
}
|
|
326
344
|
if (finished.toolName === "tasks") {
|
|
@@ -1094,30 +1112,6 @@ function renderResultBlock(
|
|
|
1094
1112
|
return renderOutputRows(resultText(unwrapped, resultCharLimit(opts)), width, isError, resultRowLimit(opts));
|
|
1095
1113
|
}
|
|
1096
1114
|
|
|
1097
|
-
/**
|
|
1098
|
-
* Header-only render for a tool call that has not yet finished. Used by the
|
|
1099
|
-
* live chat panel from streamed argument formation through execution. The
|
|
1100
|
-
* lifecycle tail distinguishes a forming call, a ready call, and a running
|
|
1101
|
-
* call without inventing execution time before Pi starts the tool.
|
|
1102
|
-
*/
|
|
1103
|
-
export function renderToolCallHeader(call: ToolExecutionStart, width: number): string[] {
|
|
1104
|
-
return wrap(
|
|
1105
|
-
headerLine(call.toolName, call.args, call.phase ?? "running", {
|
|
1106
|
-
elapsedMs: call.elapsedMs,
|
|
1107
|
-
}),
|
|
1108
|
-
width,
|
|
1109
|
-
);
|
|
1110
|
-
}
|
|
1111
|
-
|
|
1112
|
-
/** Running-only footer used when an operator pauses live output; execution continues. */
|
|
1113
|
-
export function renderToolRunningStatus(call: ToolExecutionStart, width: number): string[] {
|
|
1114
|
-
const elapsed = optionalCompactMs(call.elapsedMs);
|
|
1115
|
-
return [
|
|
1116
|
-
...renderToolCallHeader(call, width),
|
|
1117
|
-
...indentAndWrap(dim(elapsed ? `live output paused · ${elapsed}` : "live output paused"), width, false),
|
|
1118
|
-
];
|
|
1119
|
-
}
|
|
1120
|
-
|
|
1121
1115
|
function sublineStatus(call: ToolExecutionStart | ToolExecutionFinished): HeaderStatus {
|
|
1122
1116
|
// Discriminate on `result` rather than `isError`: only `ToolExecutionFinished`
|
|
1123
1117
|
// carries a `result` field, so a `ToolExecutionStart` with a stray
|
|
@@ -1127,59 +1121,8 @@ function sublineStatus(call: ToolExecutionStart | ToolExecutionFinished): Header
|
|
|
1127
1121
|
return call.isError ? "error" : "ok";
|
|
1128
1122
|
}
|
|
1129
1123
|
|
|
1130
|
-
/**
|
|
1131
|
-
|
|
1132
|
-
* ▸ <body><status>
|
|
1133
|
-
* `status` is "" for in-flight, " ✓" green for success, " ✗" red for error.
|
|
1134
|
-
* Output is width-wrapped via wrapTextWithAnsi.
|
|
1135
|
-
*
|
|
1136
|
-
* When `expandKey` is supplied AND the call has finished, a dim ` (<key>)`
|
|
1137
|
-
* discoverability hint rides at the very end of the atomic status tail so users
|
|
1138
|
-
* see how to expand the collapsed block. Composing the full line (facts, status
|
|
1139
|
-
* glyph, duration, offload, and hint) before wrapping keeps the status glyph
|
|
1140
|
-
* and duration together on one row. The hint is suppressed for in-flight calls
|
|
1141
|
-
* (still running, no useful body to expand yet) and when `expandKey` is
|
|
1142
|
-
* empty/undefined (no key bound, hint would be misleading). The renderer never
|
|
1143
|
-
* imports the keybindings manager directly; the caller resolves the key string
|
|
1144
|
-
* and passes it in to keep this module pure.
|
|
1145
|
-
*/
|
|
1146
|
-
export interface ToolSublineRenderOptions {
|
|
1147
|
-
/** Live rows color the folded mutation diff; replay and export request plain rows. */
|
|
1148
|
-
diffStyle?: "color" | "plain";
|
|
1149
|
-
/**
|
|
1150
|
-
* Whether the folded row carries the extras its tool's presentation asks
|
|
1151
|
-
* for (today the bounded mutation diff). The bare subline level drops them;
|
|
1152
|
-
* the failure excerpt is not one of them and always rides the row.
|
|
1153
|
-
*/
|
|
1154
|
-
foldedExtras?: "per-tool" | "none";
|
|
1155
|
-
}
|
|
1156
|
-
|
|
1157
|
-
/**
|
|
1158
|
-
* The bounded diff a folded mutation row keeps under itself, when the tool's
|
|
1159
|
-
* presentation asks for one and the result carries one. A folded `edit` that
|
|
1160
|
-
* hid its change told the operator nothing they could act on.
|
|
1161
|
-
*/
|
|
1162
|
-
function foldedDiffRows(finished: ToolExecutionFinished, width: number, opts: ToolSublineRenderOptions): string[] {
|
|
1163
|
-
if (opts.foldedExtras === "none") return [];
|
|
1164
|
-
if (finished.isError || isNonExecutedOutcome(finished.outcome)) return [];
|
|
1165
|
-
const presentation =
|
|
1166
|
-
toolResultPresentationPolicy(finished.result) ?? toolPresentationPolicy(finished.toolName, finished.args);
|
|
1167
|
-
if (!presentation.showDiffWhenFolded) return [];
|
|
1168
|
-
const diff = resultDiff(finished.result);
|
|
1169
|
-
if (diff === null) return [];
|
|
1170
|
-
return truncateRowsMiddle(
|
|
1171
|
-
renderMutationDiffBlock(diff, width, opts.diffStyle !== "plain"),
|
|
1172
|
-
FOLDED_DIFF_ROW_LIMIT,
|
|
1173
|
-
false,
|
|
1174
|
-
);
|
|
1175
|
-
}
|
|
1176
|
-
|
|
1177
|
-
export function renderToolSubline(
|
|
1178
|
-
call: ToolExecutionStart | ToolExecutionFinished,
|
|
1179
|
-
width: number,
|
|
1180
|
-
expandKey?: string,
|
|
1181
|
-
opts: ToolSublineRenderOptions = {},
|
|
1182
|
-
): string[] {
|
|
1124
|
+
/** Stable action identity, outcome, and captured-result metadata. */
|
|
1125
|
+
export function renderToolSubline(call: ToolExecutionStart | ToolExecutionFinished, width: number): string[] {
|
|
1183
1126
|
const status = sublineStatus(call);
|
|
1184
1127
|
const meta: StatusMeta =
|
|
1185
1128
|
"result" in call
|
|
@@ -1192,11 +1135,7 @@ export function renderToolSubline(
|
|
|
1192
1135
|
: { elapsedMs: call.elapsedMs };
|
|
1193
1136
|
const parts = sublineParts(call, status, meta);
|
|
1194
1137
|
const excerpt = "result" in call ? failureExcerpt(call, width) : "";
|
|
1195
|
-
|
|
1196
|
-
const tail = showHint ? `${parts.tail}${dim(` (${expandKey})`)}` : parts.tail;
|
|
1197
|
-
const lines = wrapSublineWithTail(`${parts.lead}${excerpt}`, tail, width);
|
|
1198
|
-
if ("result" in call) lines.push(...foldedDiffRows(call, width, opts));
|
|
1199
|
-
return lines;
|
|
1138
|
+
return wrapSublineWithTail(`${parts.lead}${excerpt}`, parts.tail, width);
|
|
1200
1139
|
}
|
|
1201
1140
|
|
|
1202
1141
|
/**
|
|
@@ -1284,6 +1223,7 @@ export function renderToolResultOnly(
|
|
|
1284
1223
|
width: number,
|
|
1285
1224
|
opts: ToolBodyRenderOptions = {},
|
|
1286
1225
|
): string[] {
|
|
1226
|
+
if (!opts.unbounded && opts.detail) return renderToolPreview(finished, width, opts.detail, opts);
|
|
1287
1227
|
const status: HeaderStatus = finished.isError ? "error" : "ok";
|
|
1288
1228
|
const statusMeta: StatusMeta = {
|
|
1289
1229
|
durationMs: finished.durationMs,
|
|
@@ -1299,50 +1239,6 @@ export function renderToolResultOnly(
|
|
|
1299
1239
|
return out;
|
|
1300
1240
|
}
|
|
1301
1241
|
|
|
1302
|
-
/**
|
|
1303
|
-
* Streaming render for an in-flight tool call whose expanded block should
|
|
1304
|
-
* surface the latest partial output. Used by the chat panel between
|
|
1305
|
-
* `tool_execution_start` and `tool_execution_end` when the user has expanded
|
|
1306
|
-
* the tool segment. The header carries the running lifecycle tail, secondary
|
|
1307
|
-
* arguments remain visible, and the latest cumulative Pi result renders under
|
|
1308
|
-
* a labeled live-output rail capped at the streaming row limit. An empty result renders
|
|
1309
|
-
* `(no output yet)` so the user can distinguish a slow start from a stalled
|
|
1310
|
-
* call.
|
|
1311
|
-
*/
|
|
1312
|
-
export function renderToolStreamingExecution(
|
|
1313
|
-
call: ToolExecutionStart,
|
|
1314
|
-
width: number,
|
|
1315
|
-
partialResult: unknown,
|
|
1316
|
-
): string[] {
|
|
1317
|
-
const out: string[] = [];
|
|
1318
|
-
out.push(...renderToolCallHeader({ ...call, phase: "running" }, width));
|
|
1319
|
-
out.push(...renderArgsBody(call.toolName, call.args, width, false));
|
|
1320
|
-
const partial: ToolExecutionFinished = {
|
|
1321
|
-
toolCallId: call.toolCallId,
|
|
1322
|
-
toolName: call.toolName,
|
|
1323
|
-
args: call.args,
|
|
1324
|
-
result: partialResult,
|
|
1325
|
-
isError: false,
|
|
1326
|
-
};
|
|
1327
|
-
out.push(...renderOutputMeta(partial, width, false, "live output"));
|
|
1328
|
-
const partialOutput = unwrapResultEnvelope(partialResult);
|
|
1329
|
-
if (isEmptyResult(partialOutput)) {
|
|
1330
|
-
out.push(...indentAndWrap(dim("(no output yet)"), width, false));
|
|
1331
|
-
} else {
|
|
1332
|
-
if (call.toolName === "bash") {
|
|
1333
|
-
const bashArgs = asBashArgs(redactToolArgs(call.args));
|
|
1334
|
-
if (bashArgs !== null) {
|
|
1335
|
-
const commandLine = `${cyanBold("$")} ${highlightBashCommand(stripShellWrapperForDisplay(bashArgs.command))}`;
|
|
1336
|
-
out.push(...indentAndWrap(commandLine, width, false));
|
|
1337
|
-
}
|
|
1338
|
-
}
|
|
1339
|
-
out.push(
|
|
1340
|
-
...renderOutputRows(resultText(partialOutput, FULL_RESULT_PREVIEW_LIMIT), width, false, STREAMING_RESULT_ROW_LIMIT),
|
|
1341
|
-
);
|
|
1342
|
-
}
|
|
1343
|
-
return out;
|
|
1344
|
-
}
|
|
1345
|
-
|
|
1346
1242
|
/** Display-only lifecycle for operator-issued `!` and `!!` bash commands. */
|
|
1347
1243
|
export interface BashTranscriptExecution {
|
|
1348
1244
|
command: string;
|
|
@@ -1356,13 +1252,6 @@ export interface BashTranscriptExecution {
|
|
|
1356
1252
|
fullOutputPath?: string | undefined;
|
|
1357
1253
|
excludeFromContext?: boolean | undefined;
|
|
1358
1254
|
error?: string | undefined;
|
|
1359
|
-
/**
|
|
1360
|
-
* Whether the block draws its one-line row instead of the full body. The
|
|
1361
|
-
* caller resolves this from the transcript detail policy and the operator's
|
|
1362
|
-
* override, the same way the panel resolves a model bash call. Omitted means
|
|
1363
|
-
* folded.
|
|
1364
|
-
*/
|
|
1365
|
-
folded?: boolean | undefined;
|
|
1366
1255
|
}
|
|
1367
1256
|
|
|
1368
1257
|
/**
|
|
@@ -1373,7 +1262,7 @@ export interface BashTranscriptExecution {
|
|
|
1373
1262
|
export function renderBashTranscriptExecution(
|
|
1374
1263
|
execution: BashTranscriptExecution,
|
|
1375
1264
|
width: number,
|
|
1376
|
-
|
|
1265
|
+
_expandKey?: string,
|
|
1377
1266
|
bodyOptions: ToolBodyRenderOptions = {},
|
|
1378
1267
|
): string[] {
|
|
1379
1268
|
const shownBytes = Buffer.byteLength(execution.output, "utf8");
|
|
@@ -1393,30 +1282,12 @@ export function renderBashTranscriptExecution(
|
|
|
1393
1282
|
content: [{ type: "text", text: execution.output }],
|
|
1394
1283
|
details,
|
|
1395
1284
|
};
|
|
1396
|
-
const folded = execution.folded !== false;
|
|
1397
1285
|
if (execution.running) {
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
{
|
|
1401
|
-
toolCallId: "local-bash",
|
|
1402
|
-
toolName: "bash",
|
|
1403
|
-
args,
|
|
1404
|
-
elapsedMs: execution.elapsedMs,
|
|
1405
|
-
phase: "running",
|
|
1406
|
-
},
|
|
1407
|
-
width,
|
|
1408
|
-
);
|
|
1409
|
-
}
|
|
1410
|
-
return renderToolStreamingExecution(
|
|
1411
|
-
{
|
|
1412
|
-
toolCallId: "local-bash",
|
|
1413
|
-
toolName: "bash",
|
|
1414
|
-
args,
|
|
1415
|
-
elapsedMs: execution.elapsedMs,
|
|
1416
|
-
phase: "running",
|
|
1417
|
-
},
|
|
1286
|
+
return renderToolPreview(
|
|
1287
|
+
{ toolCallId: "local-bash", toolName: "bash", args, phase: "running", elapsedMs: execution.elapsedMs },
|
|
1418
1288
|
width,
|
|
1419
|
-
|
|
1289
|
+
bodyOptions.detail ?? transcriptDetail(),
|
|
1290
|
+
{ ...bodyOptions, operator: true, partialResult: result },
|
|
1420
1291
|
);
|
|
1421
1292
|
}
|
|
1422
1293
|
const message = execution.error?.trim();
|
|
@@ -1438,5 +1309,57 @@ export function renderBashTranscriptExecution(
|
|
|
1438
1309
|
...(execution.fullOutputPath !== undefined ? { offloadPath: execution.fullOutputPath } : {}),
|
|
1439
1310
|
},
|
|
1440
1311
|
};
|
|
1441
|
-
return
|
|
1312
|
+
return bodyOptions.unbounded
|
|
1313
|
+
? renderToolExecution(finished, width, bodyOptions)
|
|
1314
|
+
: renderToolPreview(finished, width, bodyOptions.detail ?? transcriptDetail(), { ...bodyOptions, operator: true });
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
/** One action identity plus a bounded result; arguments and full output belong in /view. */
|
|
1318
|
+
export function renderToolPreview(
|
|
1319
|
+
call: ToolExecutionStart | ToolExecutionFinished,
|
|
1320
|
+
width: number,
|
|
1321
|
+
detail: TranscriptDetailPolicy,
|
|
1322
|
+
options: ToolBodyRenderOptions & { terminalRows?: number; partialResult?: unknown; operator?: boolean } = {},
|
|
1323
|
+
): string[] {
|
|
1324
|
+
const finished = "result" in call ? call : undefined;
|
|
1325
|
+
const failure = finished?.isError === true || finished?.outcome !== undefined;
|
|
1326
|
+
const limit = previewBudget(
|
|
1327
|
+
failure
|
|
1328
|
+
? detail.errorRows
|
|
1329
|
+
: options.operator
|
|
1330
|
+
? detail.operatorBashRows
|
|
1331
|
+
: call.toolName === "bash"
|
|
1332
|
+
? detail.bashRows
|
|
1333
|
+
: detail.resultRows,
|
|
1334
|
+
options.terminalRows,
|
|
1335
|
+
);
|
|
1336
|
+
const rows = renderToolSubline(call, width);
|
|
1337
|
+
const result = finished?.result ?? options.partialResult;
|
|
1338
|
+
const diff = finished && !failure ? resultDiff(result) : null;
|
|
1339
|
+
if (diff !== null && detail.diffRows > 0) {
|
|
1340
|
+
rows.push(
|
|
1341
|
+
...previewRows(
|
|
1342
|
+
renderMutationDiffBlock(redactSecretString(diff), width, options.diffStyle !== "plain"),
|
|
1343
|
+
previewBudget(detail.diffRows, options.terminalRows),
|
|
1344
|
+
width,
|
|
1345
|
+
),
|
|
1346
|
+
);
|
|
1347
|
+
} else if (limit > 0 && result !== undefined) {
|
|
1348
|
+
const text = resultText(unwrapResultEnvelope(result), Number.POSITIVE_INFINITY);
|
|
1349
|
+
const body = indentAndWrap(redactSecretString(text), width, failure);
|
|
1350
|
+
rows.push(...previewRows(body, limit, width, call.toolName === "bash" || !finished));
|
|
1351
|
+
}
|
|
1352
|
+
return rows;
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
/** Only ordinary successful observations can lose their individual metadata rows. */
|
|
1356
|
+
export function canGroupObservation(call: ToolExecutionFinished): boolean {
|
|
1357
|
+
return (
|
|
1358
|
+
["read", "grep", "find", "ls"].includes(call.toolName) &&
|
|
1359
|
+
!call.isError &&
|
|
1360
|
+
!call.outcome &&
|
|
1361
|
+
!call.evictedReason &&
|
|
1362
|
+
!isTruncatedResult(call) &&
|
|
1363
|
+
offloadPathOf(call) === null
|
|
1364
|
+
);
|
|
1442
1365
|
}
|
|
@@ -1,27 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* a delegated ACP peer differ only in what the header can name about their
|
|
7
|
-
* route, so the body, the tool line, and the receipt footer are identical and
|
|
8
|
-
* an operator learns one grammar. The origin glyph is the only thing that says
|
|
9
|
-
* who asked, which is the same rule the board and the footer chip follow.
|
|
10
|
-
*
|
|
11
|
-
* ◇ coder · node-a/example-coder-model · run 2mkas6s
|
|
12
|
-
* │ Hello! I'm the coder worker.
|
|
13
|
-
* │ ⚙ read · artifact
|
|
14
|
-
* └ ✓ ok · 4.8k tok · 9.6s · contract pass
|
|
15
|
-
*
|
|
16
|
-
* Folded (the default for a run the model asked for) is one row shaped like a tool subline,
|
|
17
|
-
* so a fan-out of five scouts costs five rows until the operator opens one:
|
|
18
|
-
*
|
|
19
|
-
* ◆ scout · node-b/example-scout-model · run 3nc18jo ✓ · 41s (Ctrl+O)
|
|
20
|
-
*
|
|
21
|
-
* Pure: no I/O, no module-level mutable state beyond the shared theme handle.
|
|
22
|
-
*/
|
|
1
|
+
import { redactSecretString } from "../../domains/safety/redaction.js";
|
|
2
|
+
import type { TranscriptDetailPolicy } from "../transcript-detail.js";
|
|
3
|
+
import { transcriptDetail } from "../transcript-detail.js";
|
|
4
|
+
import { previewBudget, previewRows } from "./preview.js";
|
|
5
|
+
/** Bounded worker summaries share the main transcript's output style. */
|
|
23
6
|
|
|
24
7
|
import { parseJsonObjectPayload } from "../../core/json-payload.js";
|
|
8
|
+
import { trustStateWord } from "../../domains/evidence/trust-projection.js";
|
|
25
9
|
import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../../engine/tui.js";
|
|
26
10
|
import { formatFooterTokens } from "../footer-panel.js";
|
|
27
11
|
import { type ClioToken, clioTheme, fitUnits, formatCompactMs, GLYPH } from "../theme/index.js";
|
|
@@ -45,10 +29,8 @@ const SEPARATOR = " · ";
|
|
|
45
29
|
const BODY_LINE_LIMIT = 80;
|
|
46
30
|
|
|
47
31
|
export interface WorkerEntryRenderOptions {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
/** Key hint appended to a folded header, e.g. "Ctrl+O". Omitted when unknown. */
|
|
51
|
-
expandKey?: string | undefined;
|
|
32
|
+
detail?: TranscriptDetailPolicy;
|
|
33
|
+
terminalRows?: number;
|
|
52
34
|
/** Render the full body without the line cap; `/export` sets this. */
|
|
53
35
|
unbounded?: boolean;
|
|
54
36
|
}
|
|
@@ -80,14 +62,14 @@ function headerLine(entry: WorkerEntryState, width: number): string {
|
|
|
80
62
|
}
|
|
81
63
|
|
|
82
64
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
65
|
+
* Execution outcome, explicitly named on successful folded and expanded rows
|
|
66
|
+
* so the separate quality line cannot be mistaken for process status.
|
|
85
67
|
* Abandoned names itself rather than falling through to its `stalled`
|
|
86
68
|
* outcome code, so it reads as a ledger-side finding instead of the ordinary
|
|
87
69
|
* heartbeat-timeout `stalled` a sealed receipt reports.
|
|
88
70
|
*/
|
|
89
71
|
function outcomeUnit(receipt: WorkerReceiptSummary, word: boolean): string {
|
|
90
|
-
if (receipt.outcome === "succeeded") return theme.fg("success",
|
|
72
|
+
if (receipt.outcome === "succeeded") return theme.fg("success", `${GLYPH.ok} execution ok`);
|
|
91
73
|
if (receipt.outcome === "canceled") return theme.fg("dim", `${GLYPH.cancelled} canceled`);
|
|
92
74
|
if (receipt.abandonedDetail !== undefined) return theme.fg("error", word ? `${GLYPH.error} abandoned` : GLYPH.error);
|
|
93
75
|
return theme.fg("error", `${GLYPH.error} ${receipt.outcomeCode ?? receipt.outcome}`);
|
|
@@ -389,16 +371,19 @@ function footerLine(entry: WorkerEntryState, width: number): string {
|
|
|
389
371
|
* renders only when the caller resolved a key binding for it, so a rebound or
|
|
390
372
|
* unbound key never advertises a wrong chord.
|
|
391
373
|
*/
|
|
392
|
-
function
|
|
374
|
+
function actionLine(entry: WorkerEntryState, width: number): string {
|
|
393
375
|
const identity = `${originGlyph(entry)} ${identityUnits(entry).join(dim(SEPARATOR))}`;
|
|
394
376
|
const status =
|
|
395
377
|
isPending(entry) || entry.receipt === undefined ? pendingUnit(entry) : outcomeUnit(entry.receipt, false);
|
|
396
378
|
const elapsed =
|
|
397
379
|
entry.receipt?.durationMs === undefined ? "" : dim(`${SEPARATOR}${formatCompactMs(entry.receipt.durationMs)}`);
|
|
398
|
-
const
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
380
|
+
const full = ` ${status}${elapsed}`;
|
|
381
|
+
let tail = visibleWidth(identity) + visibleWidth(full) <= width ? full : ` ${status}`;
|
|
382
|
+
// Reserve one identity cell. The optional hint yields before execution
|
|
383
|
+
// status when the suffix alone would exhaust the header's width.
|
|
384
|
+
if (visibleWidth(tail) >= width) tail = ` ${status}`;
|
|
385
|
+
const header = `${truncateToWidth(identity, Math.max(1, width - visibleWidth(tail)), GLYPH.ellipsis, false)}${tail}`;
|
|
386
|
+
return truncateToWidth(header, width, GLYPH.ellipsis, false);
|
|
402
387
|
}
|
|
403
388
|
|
|
404
389
|
export function renderWorkerEntryLines(
|
|
@@ -407,14 +392,60 @@ export function renderWorkerEntryLines(
|
|
|
407
392
|
options: WorkerEntryRenderOptions,
|
|
408
393
|
): string[] {
|
|
409
394
|
const safeWidth = Math.max(1, Math.floor(width));
|
|
410
|
-
|
|
411
|
-
|
|
395
|
+
const quality = isPending(entry)
|
|
396
|
+
? []
|
|
397
|
+
: railLines(
|
|
398
|
+
`quality: ${trustStateWord("validationGrounding", entry.receipt?.trust?.validationGrounding.state ?? "unknown")}`,
|
|
399
|
+
"muted",
|
|
400
|
+
safeWidth,
|
|
401
|
+
);
|
|
402
|
+
const detail = options.detail ?? transcriptDetail();
|
|
403
|
+
if (options.unbounded) {
|
|
404
|
+
const tools = toolLine(entry, safeWidth);
|
|
405
|
+
return [
|
|
406
|
+
headerLine(entry, safeWidth),
|
|
407
|
+
...bodyLines(entry, safeWidth, true),
|
|
408
|
+
...attemptLines(entry, safeWidth),
|
|
409
|
+
...(tools ? [tools] : []),
|
|
410
|
+
...failureLines(entry, safeWidth),
|
|
411
|
+
footerLine(entry, safeWidth),
|
|
412
|
+
...quality,
|
|
413
|
+
].map(redactSecretString);
|
|
414
|
+
}
|
|
415
|
+
const budget = (limit: number) => previewBudget(limit, options.terminalRows);
|
|
416
|
+
const summary = bodySourceLines(entry).flatMap((line) => railLines(redactSecretString(line), "muted", safeWidth));
|
|
417
|
+
const actions = entry.progress
|
|
418
|
+
? [...entry.progress.recentActions]
|
|
419
|
+
.reverse()
|
|
420
|
+
.concat(entry.progress.currentAction ? [entry.progress.currentAction] : [])
|
|
421
|
+
: [];
|
|
422
|
+
const trail = actions.flatMap((action) =>
|
|
423
|
+
railLines(
|
|
424
|
+
`${GLYPH.phaseTool} ${action.descriptor ? `${action.descriptor.verb} ${action.descriptor.object}` : action.tool}`,
|
|
425
|
+
"muted",
|
|
426
|
+
safeWidth,
|
|
427
|
+
),
|
|
428
|
+
);
|
|
429
|
+
const tools = detail.workerActivity && trail.length === 0 ? toolLine(entry, safeWidth) : null;
|
|
430
|
+
const failure = previewRows(failureLines(entry, safeWidth), budget(detail.errorRows), safeWidth);
|
|
431
|
+
const presented = presentedContractAnswer(entry)?.footer;
|
|
412
432
|
return [
|
|
413
|
-
|
|
414
|
-
...
|
|
415
|
-
...attemptLines(entry, safeWidth),
|
|
416
|
-
...(tools
|
|
417
|
-
...
|
|
418
|
-
|
|
419
|
-
|
|
433
|
+
actionLine(entry, safeWidth),
|
|
434
|
+
...(detail.workerRows > 0 ? previewRows(summary, budget(detail.workerRows), safeWidth, entry.pending) : []),
|
|
435
|
+
...previewRows(attemptLines(entry, safeWidth), budget(detail.errorRows), safeWidth, true),
|
|
436
|
+
...(tools ? [tools] : []),
|
|
437
|
+
...(detail.workerActivity ? previewRows(trail, budget(4), safeWidth, true) : []),
|
|
438
|
+
...failure,
|
|
439
|
+
...(presented ? railLines(presented, "muted", safeWidth) : []),
|
|
440
|
+
...(entry.receipt?.abandonedDetail ? railLines(entry.receipt.abandonedDetail, "warning", safeWidth) : []),
|
|
441
|
+
...(entry.receipt?.receiptUnavailable ? railLines("receipt unavailable", "warning", safeWidth) : []),
|
|
442
|
+
...(entry.droppedLines
|
|
443
|
+
? railLines(
|
|
444
|
+
`… ${entry.droppedLines} earlier lines unavailable here · /view dispatch:${entry.runId}`,
|
|
445
|
+
"muted",
|
|
446
|
+
safeWidth,
|
|
447
|
+
)
|
|
448
|
+
: []),
|
|
449
|
+
...quality,
|
|
450
|
+
].map(redactSecretString);
|
|
420
451
|
}
|
|
@@ -154,12 +154,7 @@ function completionGrammar(command: string, args: CommandArgsSpec): CommandArgsS
|
|
|
154
154
|
? {
|
|
155
155
|
positionals: spec.positionals.map((pos) => {
|
|
156
156
|
const completionSlot = COMPLETION_SLOT_MANIFEST[`${path}:pos:${pos.name}`];
|
|
157
|
-
const values =
|
|
158
|
-
command === "output" && pos.name === "verbosity"
|
|
159
|
-
? (["minimal", "default", "verbose"] as const)
|
|
160
|
-
: command === "settings" && pos.name === "area"
|
|
161
|
-
? SETTINGS_AREA_IDS
|
|
162
|
-
: undefined;
|
|
157
|
+
const values = command === "settings" && pos.name === "area" ? SETTINGS_AREA_IDS : undefined;
|
|
163
158
|
return { ...pos, ...(completionSlot ? { completionSlot } : {}), ...(values ? { values } : {}) };
|
|
164
159
|
}),
|
|
165
160
|
}
|
|
@@ -30,8 +30,11 @@ import type {
|
|
|
30
30
|
ResourceList,
|
|
31
31
|
} from "../domains/resources/index.js";
|
|
32
32
|
import { parseSkillCommand, SKILL_SURFACE_CLEAR_ARG } from "../domains/resources/index.js";
|
|
33
|
+
import { activeDecisionRefs } from "../domains/session/decision-board.js";
|
|
34
|
+
import type { DecisionLedgerEntry } from "../domains/session/entries.js";
|
|
33
35
|
import type { ShareImportPlan } from "../domains/share/index.js";
|
|
34
36
|
import type { UserTaskAcceptance } from "../domains/user-tasks/acceptance.js";
|
|
37
|
+
import { formatUserTaskHandoff } from "../domains/user-tasks/handoff.js";
|
|
35
38
|
import type { UserTask } from "../domains/user-tasks/store.js";
|
|
36
39
|
import type { ExtensionReloadOutcome } from "../entry/extension-reload.js";
|
|
37
40
|
import { isToolProfileName, TOOL_PROFILE_NAMES, type ToolProfileName } from "../tools/profiles.js";
|
|
@@ -171,8 +174,6 @@ type SlashCommandVariant =
|
|
|
171
174
|
| { kind: "files-usage"; reason: string }
|
|
172
175
|
| { kind: "thinking-set"; level: string }
|
|
173
176
|
| { kind: "thinking-picker" }
|
|
174
|
-
| { kind: "output-set"; verbosity: string }
|
|
175
|
-
| { kind: "output-picker" }
|
|
176
177
|
| { kind: "model" }
|
|
177
178
|
| { kind: "model-set"; pattern: string }
|
|
178
179
|
| { kind: "settings"; area?: SettingsAreaId; group?: string }
|
|
@@ -204,11 +205,6 @@ export type SetThinkingLevelResult =
|
|
|
204
205
|
| { status: "unsupported"; level: string; supported: ReadonlyArray<string> }
|
|
205
206
|
| { status: "unavailable" };
|
|
206
207
|
|
|
207
|
-
export type SetOutputVerbosityResult =
|
|
208
|
-
| { status: "applied"; verbosity: string }
|
|
209
|
-
| { status: "unsupported"; verbosity: string; supported: ReadonlyArray<string> }
|
|
210
|
-
| { status: "unavailable" };
|
|
211
|
-
|
|
212
208
|
/**
|
|
213
209
|
* What one admitted dispatch-tool call reports back to `/council`. The council
|
|
214
210
|
* itself is watched on the board and in the transcript, so success is silent;
|
|
@@ -246,6 +242,8 @@ export interface RunCommandOptions {
|
|
|
246
242
|
|
|
247
243
|
export interface HandleRunDeps {
|
|
248
244
|
dispatch: DispatchContract;
|
|
245
|
+
/** Live session board, snapshotted before operator run admission. */
|
|
246
|
+
getDecisionBoard?: () => ReadonlyArray<DecisionLedgerEntry>;
|
|
249
247
|
/** Strict recipe facts the run's execution role is derived from. */
|
|
250
248
|
getAgentRoleFacts?: AgentRoleFactsResolver;
|
|
251
249
|
io: RunIo;
|
|
@@ -341,6 +339,7 @@ export async function handleRun(
|
|
|
341
339
|
deps: HandleRunDeps,
|
|
342
340
|
options: RunCommandOptions = {},
|
|
343
341
|
): Promise<void> {
|
|
342
|
+
const decisionRefs = activeDecisionRefs(deps.getDecisionBoard?.() ?? []);
|
|
344
343
|
if (options.target && options.workerProfile) {
|
|
345
344
|
deps.notice(
|
|
346
345
|
"warn",
|
|
@@ -363,6 +362,7 @@ export async function handleRun(
|
|
|
363
362
|
...(deps.getAgentRoleFacts ? { resolveFacts: deps.getAgentRoleFacts } : {}),
|
|
364
363
|
}),
|
|
365
364
|
requestOrigin: "user",
|
|
365
|
+
...(decisionRefs.length > 0 ? { decisionRefs } : {}),
|
|
366
366
|
...(options.workerProfile ? { workerProfile: options.workerProfile } : {}),
|
|
367
367
|
...(options.workerRuntime ? { workerRuntime: options.workerRuntime } : {}),
|
|
368
368
|
...(options.target ? { target: options.target } : {}),
|
|
@@ -562,6 +562,7 @@ export interface SlashCommandContext {
|
|
|
562
562
|
io: RunIo;
|
|
563
563
|
notice: (level: NoticeLevel, text: string) => void;
|
|
564
564
|
dispatch: DispatchContract;
|
|
565
|
+
getDecisionBoard?: HandleRunDeps["getDecisionBoard"];
|
|
565
566
|
bus: SafeEventBus;
|
|
566
567
|
/** Strict recipe facts used to keep interactive /run role-equivalent with the CLI. */
|
|
567
568
|
getAgentRoleFacts?: AgentRoleFactsResolver;
|
|
@@ -720,8 +721,6 @@ export interface SlashCommandContext {
|
|
|
720
721
|
thinkingLevelChoices?: () => ReadonlyArray<{ value: string; label: string }>;
|
|
721
722
|
openThinkingPicker?: () => void;
|
|
722
723
|
/** Apply a transcript verbosity named on the command line; refused values are reported by the caller. */
|
|
723
|
-
setOutputVerbosity?: (verbosity: string) => SetOutputVerbosityResult;
|
|
724
|
-
openOutputPicker?: () => void;
|
|
725
724
|
openModel: () => void;
|
|
726
725
|
/** Live providers contract used by `/model <pattern>` to resolve directly. */
|
|
727
726
|
providers: ProvidersContract;
|
|
@@ -791,13 +790,6 @@ function formatReceiptVerificationBlock(runId: string, result: SlashReceiptVerif
|
|
|
791
790
|
return lines.join("\n");
|
|
792
791
|
}
|
|
793
792
|
|
|
794
|
-
/** The one operator-authored turn used by slash and overlay handoff paths. */
|
|
795
|
-
export function formatUserTaskHandoff(task: Pick<UserTask, "id" | "title" | "note" | "acceptance">): string {
|
|
796
|
-
const note = task.note ? ` ${task.note}.` : "";
|
|
797
|
-
const acceptance = task.acceptance ? ` Acceptance: ${JSON.stringify(task.acceptance)}.` : "";
|
|
798
|
-
return `Operator task ${task.id}: ${task.title}.${note}${acceptance} Pick it up with tasks action="pick" id="${task.id}" and work it when appropriate.`;
|
|
799
|
-
}
|
|
800
|
-
|
|
801
793
|
/** The verb a command performs, in the order /help lists the groups. */
|
|
802
794
|
export const SLASH_COMMAND_GROUPS = ["Work", "Inspect", "Configure", "Session"] as const;
|
|
803
795
|
export type SlashCommandGroup = (typeof SLASH_COMMAND_GROUPS)[number];
|
|
@@ -1183,6 +1175,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
|
|
|
1183
1175
|
task,
|
|
1184
1176
|
{
|
|
1185
1177
|
dispatch: ctx.dispatch,
|
|
1178
|
+
...(ctx.getDecisionBoard ? { getDecisionBoard: ctx.getDecisionBoard } : {}),
|
|
1186
1179
|
...(ctx.getAgentRoleFacts ? { getAgentRoleFacts: ctx.getAgentRoleFacts } : {}),
|
|
1187
1180
|
io: ctx.io,
|
|
1188
1181
|
notice: ctx.notice,
|
|
@@ -1915,35 +1908,6 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
|
|
|
1915
1908
|
ctx.render();
|
|
1916
1909
|
},
|
|
1917
1910
|
},
|
|
1918
|
-
{
|
|
1919
|
-
name: "output",
|
|
1920
|
-
description: "Set transcript detail to minimal, default, or verbose",
|
|
1921
|
-
group: "Configure",
|
|
1922
|
-
kinds: ["output-set", "output-picker"],
|
|
1923
|
-
args: { positionals: [{ name: "verbosity", required: false }] },
|
|
1924
|
-
fromArgs(parsed) {
|
|
1925
|
-
if (parsed.error) return { kind: "usage-error", command: "output", reason: parsed.error };
|
|
1926
|
-
const verbosity = parsed.positionals[0];
|
|
1927
|
-
return verbosity ? { kind: "output-set", verbosity } : { kind: "output-picker" };
|
|
1928
|
-
},
|
|
1929
|
-
handle(command, ctx) {
|
|
1930
|
-
if (command.kind === "output-picker") {
|
|
1931
|
-
if (ctx.openOutputPicker) ctx.openOutputPicker();
|
|
1932
|
-
else ctx.notice("error", "output picker is not wired in this session");
|
|
1933
|
-
return;
|
|
1934
|
-
}
|
|
1935
|
-
if (command.kind !== "output-set") return;
|
|
1936
|
-
const result = ctx.setOutputVerbosity?.(command.verbosity) ?? { status: "unavailable" as const };
|
|
1937
|
-
if (result.status === "applied") {
|
|
1938
|
-
ctx.notice("success", `output detail: ${result.verbosity}`);
|
|
1939
|
-
} else if (result.status === "unsupported") {
|
|
1940
|
-
ctx.notice("error", `output detail "${result.verbosity}" is not one of ${result.supported.join(", ")}`);
|
|
1941
|
-
} else {
|
|
1942
|
-
ctx.notice("error", "output detail cannot be set right now");
|
|
1943
|
-
}
|
|
1944
|
-
ctx.render();
|
|
1945
|
-
},
|
|
1946
|
-
},
|
|
1947
1911
|
{
|
|
1948
1912
|
name: "model",
|
|
1949
1913
|
description: "Open model selector or set a model",
|
|
@@ -2197,6 +2161,13 @@ function reloadExtensionsCommand(ctx: SlashCommandContext): void {
|
|
|
2197
2161
|
export function parseSlashCommand(input: string): SlashCommand {
|
|
2198
2162
|
const trimmed = input.trim();
|
|
2199
2163
|
if (trimmed.length === 0) return { kind: "empty" };
|
|
2164
|
+
if (/^\/output(?:\s|$)/u.test(trimmed)) {
|
|
2165
|
+
return {
|
|
2166
|
+
kind: "usage-error",
|
|
2167
|
+
command: "output",
|
|
2168
|
+
reason: "Use Alt+O to cycle Output style, or /settings interface to save a default. Use /view for full details",
|
|
2169
|
+
};
|
|
2170
|
+
}
|
|
2200
2171
|
if (trimmed.startsWith(COMMAND_ESCAPE)) return { kind: "unknown", text: trimmed.slice(1) };
|
|
2201
2172
|
for (const entry of BUILTIN_SLASH_COMMANDS) {
|
|
2202
2173
|
const match = entry.match ? entry.match(trimmed) : matchFromSpec(entry, trimmed);
|
|
@@ -2284,7 +2255,6 @@ const COMMAND_ORDER = [
|
|
|
2284
2255
|
"help",
|
|
2285
2256
|
"model",
|
|
2286
2257
|
"thinking",
|
|
2287
|
-
"output",
|
|
2288
2258
|
"settings",
|
|
2289
2259
|
"new",
|
|
2290
2260
|
"resume",
|