@iowarp/clio-coder 0.4.4 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +92 -2
- package/CONTRIBUTING.md +25 -15
- package/README.md +340 -27
- package/dist/{acp-WNAYYF4F.js → acp-H3CU2HBQ.js} +25 -24
- package/dist/{agents-3OKXHLOI.js → agents-IXQQZ7BD.js} +77 -77
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-VKNNMGPU.js → auth-R7KYF7N3.js} +38 -38
- package/dist/builtins-CRFDQUVP.js +22 -0
- package/dist/{chunk-TQAHXW6Y.js → chunk-22PQ4TX4.js} +4 -4
- package/dist/{chunk-NEDJ26B5.js → chunk-2GPGAE5W.js} +6 -51
- package/dist/{chunk-IKCO5N3L.js → chunk-2QPI3TR3.js} +3 -3
- package/dist/{chunk-HRQMFLJP.js → chunk-32KJPXAM.js} +6 -6
- package/dist/{chunk-65DEGPJ6.js → chunk-3A3CUMKA.js} +6 -4
- package/dist/{chunk-JCI2ROMZ.js → chunk-3T4DXWP6.js} +7 -7
- package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
- package/dist/{chunk-6Q3CYFD3.js → chunk-4SVIVOMC.js} +184 -33
- package/dist/{chunk-W54I7H25.js → chunk-5A6XR3RJ.js} +44 -19
- package/dist/{chunk-YPC6ZR5L.js → chunk-5CMARGPF.js} +119 -5
- package/dist/{chunk-KXDSS5WJ.js → chunk-5CY4Q6QI.js} +4 -4
- package/dist/{chunk-I2DWJ4GM.js → chunk-5DDOTTG4.js} +54 -42
- package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
- package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
- package/dist/{chunk-3ODX73FK.js → chunk-5VTJP36Q.js} +4 -4
- package/dist/{chunk-54X7T7DK.js → chunk-5ZMXGW7P.js} +79 -7
- package/dist/chunk-5ZSZEYJK.js +119 -0
- package/dist/{chunk-IXIY2H4R.js → chunk-633EXGZA.js} +5 -5
- package/dist/{chunk-CUSRQKPU.js → chunk-6CDNRHWH.js} +299 -89
- package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
- package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
- package/dist/{chunk-JEIYHLOR.js → chunk-6SYEGZI3.js} +12 -12
- package/dist/{chunk-DQOVN6KV.js → chunk-6YA46L5A.js} +4 -4
- package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
- package/dist/{chunk-6PAZTBPA.js → chunk-7HBHHVCK.js} +15 -6
- package/dist/{chunk-25QBEXRS.js → chunk-7TKWWPD7.js} +5 -4
- package/dist/{chunk-2VTFPG5O.js → chunk-7WLRF2U5.js} +2 -2
- package/dist/chunk-7WUZEB2M.js +165 -0
- package/dist/{chunk-3UUXNFEX.js → chunk-7YJWEF2L.js} +61 -34
- package/dist/{chunk-3EBYEESD.js → chunk-A46ILRS2.js} +5 -5
- package/dist/{chunk-UOIZ7DA4.js → chunk-AP7HDJOP.js} +2 -2
- package/dist/{chunk-APJ265NV.js → chunk-B5GGDIHT.js} +146 -146
- package/dist/{chunk-PMZVFWSR.js → chunk-B5ZTR6KZ.js} +2 -2
- package/dist/{chunk-I5FWO7L5.js → chunk-B6UM3OZC.js} +2 -2
- package/dist/{chunk-2CU2H6KE.js → chunk-BBV5TKE6.js} +5 -5
- package/dist/{chunk-4O6MANBS.js → chunk-BS4GAMUB.js} +14 -10
- package/dist/{chunk-S66XZJOF.js → chunk-C27U2TYG.js} +2 -2
- package/dist/{chunk-QZWQA4DE.js → chunk-CBSKDFWL.js} +3 -3
- package/dist/{chunk-2LEAKD4C.js → chunk-CKK25WN3.js} +3 -3
- package/dist/{chunk-BYP5D4HI.js → chunk-CTTI7G3T.js} +2 -2
- package/dist/{chunk-XAKHZX5N.js → chunk-CVDAFGPW.js} +4 -4
- package/dist/{chunk-RKKLTLYB.js → chunk-CXQ37WJH.js} +3 -3
- package/dist/{chunk-GTUD2WMY.js → chunk-DBREN25X.js} +44 -9
- package/dist/{chunk-YNFKXPEC.js → chunk-DIMRLNIC.js} +35 -66
- package/dist/{chunk-NDDGJUXD.js → chunk-DNCE23JJ.js} +2 -2
- package/dist/{chunk-HVDIIIQW.js → chunk-DNHVRBH4.js} +3 -3
- package/dist/{chunk-XULDXHTN.js → chunk-DRD2A54W.js} +102 -50
- package/dist/{chunk-D7E7WCDF.js → chunk-DVNAPPXU.js} +2 -2
- package/dist/{chunk-YXLYO42X.js → chunk-DXVMLM3Z.js} +3 -2
- package/dist/{chunk-5MEZN6CB.js → chunk-DZK63TZJ.js} +6 -6
- package/dist/{chunk-IGLP3ODT.js → chunk-E3BQTQUP.js} +15 -15
- package/dist/{chunk-IWHMRKLL.js → chunk-E3LEPLQ2.js} +2 -2
- package/dist/{chunk-3R73A4XB.js → chunk-ECBHH7LU.js} +3 -3
- package/dist/chunk-ECOMVOHP.js +139 -0
- package/dist/chunk-EFSEIZE6.js +56 -0
- package/dist/{chunk-FEAXX7B6.js → chunk-EHCPSZJF.js} +4 -4
- package/dist/{chunk-4NSRCOYP.js → chunk-EHOSNVVM.js} +3 -2
- package/dist/{chunk-7UGL4MB5.js → chunk-EQEJJ53P.js} +10 -10
- package/dist/{chunk-GWZNEVM2.js → chunk-EWD5P3GK.js} +9 -9
- package/dist/{chunk-6UINWWS6.js → chunk-F34AR6O3.js} +14 -14
- package/dist/{chunk-GHS5EBTQ.js → chunk-FKIOX6DS.js} +29 -20
- package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
- package/dist/{chunk-Y55JBDO5.js → chunk-FSTIBAGM.js} +38 -23
- package/dist/{chunk-ZTJUVLTU.js → chunk-FXFVDPWY.js} +2 -2
- package/dist/{chunk-XPLRXC72.js → chunk-GD55RTIW.js} +3 -3
- package/dist/{chunk-5B2AEOW5.js → chunk-GH5ZR6JP.js} +472 -472
- package/dist/{chunk-TOIVGRUX.js → chunk-GJ24ODAX.js} +5 -5
- package/dist/{chunk-QUFRYSWI.js → chunk-GNQRWTMY.js} +129 -48
- package/dist/{chunk-5ICU3EUH.js → chunk-GVYWZNRK.js} +5 -5
- package/dist/{chunk-GX5WYQO4.js → chunk-GXCCHKN6.js} +6 -6
- package/dist/{chunk-K6T2ZAMZ.js → chunk-HGSLRG33.js} +6 -6
- package/dist/{chunk-26QSH3EJ.js → chunk-HHVJNVUJ.js} +5 -5
- package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
- package/dist/{chunk-JT2RFCC5.js → chunk-HR3HPQ76.js} +5 -5
- package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
- package/dist/{chunk-ELWDPP3Y.js → chunk-I7VLWRK2.js} +8 -8
- package/dist/{chunk-6OSVSQL5.js → chunk-ICO4TQ2F.js} +7 -5
- package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
- package/dist/{chunk-72YIHOZQ.js → chunk-ILJ7DWGE.js} +9 -9
- package/dist/{chunk-2JH2WHGE.js → chunk-J2FYEQ5L.js} +4 -4
- package/dist/{chunk-BMS5RKQY.js → chunk-JABWPKFY.js} +3 -3
- package/dist/{chunk-QDC3K2U3.js → chunk-K2BLQC5E.js} +3 -3
- package/dist/{chunk-AUPNRN7C.js → chunk-K2HL3GBL.js} +4 -4
- package/dist/{chunk-2ASED4PZ.js → chunk-K6RDB7IA.js} +26 -26
- package/dist/{chunk-FFUPXJC4.js → chunk-KDWLXVMN.js} +23 -24
- package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
- package/dist/{chunk-6QOTUPRG.js → chunk-KF6GFW6O.js} +66 -18
- package/dist/{chunk-BTK3SSSK.js → chunk-KMF54VH3.js} +2 -2
- package/dist/chunk-KPRLAMP4.js +32 -0
- package/dist/{chunk-ECH6PKUQ.js → chunk-KQ6IDQIB.js} +2 -2
- package/dist/{chunk-3UNOLWNZ.js → chunk-KTFSFCVN.js} +20 -9
- package/dist/{chunk-57XXR6DR.js → chunk-KYKNBD4Y.js} +24 -23
- package/dist/{chunk-IRXAATOX.js → chunk-L4N3DWNW.js} +3 -3
- package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
- package/dist/{chunk-U6TMQNSI.js → chunk-LTR5QCLS.js} +4 -4
- package/dist/chunk-LUL5Z66S.js +221 -0
- package/dist/{chunk-ELZVTCGV.js → chunk-LVFANMOH.js} +151 -327
- package/dist/{chunk-H7IXIC72.js → chunk-LY4N4TTL.js} +17 -3
- package/dist/{chunk-VKPAQYEB.js → chunk-LZBMXNLP.js} +5 -5
- package/dist/{chunk-UL3WSD3F.js → chunk-M4KFUXS7.js} +2 -2
- package/dist/{chunk-NXYCB2VD.js → chunk-M6TAYK66.js} +6 -6
- package/dist/{chunk-NEKRRTYW.js → chunk-MC3JSVR6.js} +2 -2
- package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
- package/dist/{chunk-DXKJURES.js → chunk-MDU3C27C.js} +10 -7
- package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
- package/dist/{chunk-3GY4F45V.js → chunk-NC4KV7EL.js} +6 -6
- package/dist/{chunk-LLXSDWXS.js → chunk-NF3BK5WR.js} +5 -5
- package/dist/chunk-NTK3WTHM.js +141 -0
- package/dist/{chunk-GYV6VZOC.js → chunk-NTTS3O53.js} +2 -2
- package/dist/{chunk-RZDWV63N.js → chunk-NY6IWDVU.js} +6 -6
- package/dist/{chunk-XXYSBZIQ.js → chunk-O2RQ7LCK.js} +4 -4
- package/dist/{chunk-4BJ5BYCE.js → chunk-O3VV6IVK.js} +2 -2
- package/dist/{chunk-W6GROXXM.js → chunk-O5F25NIE.js} +2 -2
- package/dist/{chunk-NXIMQY5W.js → chunk-ODUTYZIU.js} +5 -5
- package/dist/{chunk-LTIKRKFL.js → chunk-ONRTXOZY.js} +4 -4
- package/dist/{chunk-KFV5L5SK.js → chunk-OQM5IVJY.js} +118 -232
- package/dist/{chunk-XRZT5WY5.js → chunk-P5SC4DLJ.js} +4 -4
- package/dist/{chunk-R6Q67RJH.js → chunk-PECBKCDK.js} +34 -6
- package/dist/{chunk-33YXPOE3.js → chunk-PPEZJWUG.js} +2 -2
- package/dist/{chunk-RXTN6AKH.js → chunk-PWWSIB2A.js} +5 -5
- package/dist/{chunk-2STGEDFV.js → chunk-QEQISF75.js} +2 -2
- package/dist/{chunk-3DPEIQKN.js → chunk-QH3ZTUOA.js} +2 -2
- package/dist/{chunk-YAKGTXEV.js → chunk-QRFXEO6Y.js} +2 -2
- package/dist/{chunk-35MSIRKH.js → chunk-QUIJZSDW.js} +2 -2
- package/dist/{chunk-HHV2GANA.js → chunk-R2P2U3ZS.js} +2 -2
- package/dist/{chunk-2DSOYNFC.js → chunk-R6MAYTMS.js} +7 -7
- package/dist/{chunk-JQLNNIKT.js → chunk-R6MICQYU.js} +6 -6
- package/dist/{chunk-NAI6ZFCY.js → chunk-RLTT5GVY.js} +122 -11
- package/dist/{chunk-DT3LWJOB.js → chunk-RXIOCVBZ.js} +24 -6
- package/dist/{chunk-N56KALIC.js → chunk-S32UQ5GL.js} +61 -34
- package/dist/{chunk-UEPWCCTY.js → chunk-SBZX6ARC.js} +12 -12
- package/dist/chunk-SD7SHNDW.js +15 -0
- package/dist/{chunk-NRO2BJRH.js → chunk-SDWNDICN.js} +10235 -4015
- package/dist/{chunk-UXCU4E3T.js → chunk-SE4ZKILO.js} +6 -6
- package/dist/chunk-SL2RDHKO.js +19 -0
- package/dist/{chunk-NUGM5KR6.js → chunk-SRCEQKQS.js} +2 -2
- package/dist/{chunk-OMQNJVKW.js → chunk-SRZOW5L2.js} +43 -13
- package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
- package/dist/{chunk-V76WTFTW.js → chunk-T52TPHYC.js} +6 -6
- package/dist/{chunk-I7XBWTYH.js → chunk-T53XI6I7.js} +5 -5
- package/dist/{chunk-2ZSONWVL.js → chunk-T7FDXNRU.js} +13 -13
- package/dist/{chunk-JSD46VO2.js → chunk-TEG3RYVZ.js} +43 -36
- package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
- package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
- package/dist/{chunk-75W7L2E2.js → chunk-TZ7MFRG4.js} +1041 -162
- package/dist/{chunk-36CT5VVL.js → chunk-U2JOLB7O.js} +126 -77
- package/dist/{chunk-LL4KHSZI.js → chunk-U2MSJ57E.js} +2 -2
- package/dist/{chunk-FTMGRKEF.js → chunk-U44YYLVV.js} +4 -4
- package/dist/{chunk-YECAMM3D.js → chunk-U7H5WRG5.js} +5 -5
- package/dist/{chunk-RQCKCSRL.js → chunk-U7VQ4NI4.js} +22 -22
- package/dist/{chunk-5TUB6SLS.js → chunk-UFYNOQK4.js} +7 -7
- package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
- package/dist/{chunk-USR47QNF.js → chunk-UL36QJX6.js} +14 -14
- package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
- package/dist/{chunk-RAY4OVGZ.js → chunk-URBGEOH3.js} +5 -5
- package/dist/chunk-USZA7GWL.js +341 -0
- package/dist/{chunk-YD5GIKET.js → chunk-UTUNT5QL.js} +48 -579
- package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
- package/dist/{chunk-23L32XTI.js → chunk-UXAC2FX4.js} +68 -39
- package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
- package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
- package/dist/{chunk-EXLD33WO.js → chunk-VLPTKCKT.js} +24 -9
- package/dist/{chunk-336NSSKI.js → chunk-VNBICSS2.js} +2 -2
- package/dist/{chunk-VAVR4IJY.js → chunk-VQD7NH7Z.js} +3 -3
- package/dist/{chunk-LBMZMYH2.js → chunk-W2RJEH6Q.js} +3 -3
- package/dist/{chunk-7CR24IG7.js → chunk-WDV62RKY.js} +2 -2
- package/dist/{chunk-S6PYF2XF.js → chunk-WFKDPU7U.js} +4 -4
- package/dist/{chunk-BJVFZO5U.js → chunk-WJIMKGD6.js} +7 -7
- package/dist/{chunk-5636DCO5.js → chunk-WLMSOT73.js} +59 -12
- package/dist/{chunk-MXHC5QYU.js → chunk-WTQGRBHV.js} +5 -144
- package/dist/chunk-WXA2CFJO.js +23 -0
- package/dist/{chunk-QSNYB6ZV.js → chunk-XCUDZQLX.js} +3 -3
- package/dist/{chunk-4M6Z5QVF.js → chunk-XXBQKW32.js} +11 -11
- package/dist/{chunk-OEJSLEPW.js → chunk-YEJIG7LN.js} +332 -332
- package/dist/chunk-YGDMBK7O.js +567 -0
- package/dist/{chunk-4WR7VSYB.js → chunk-YYB3MC65.js} +23 -9
- package/dist/{chunk-2IR2NMPA.js → chunk-ZIDFQJRB.js} +2 -2
- package/dist/{chunk-Q4WO54TA.js → chunk-ZMZQEBKI.js} +14 -14
- package/dist/{chunk-6EJMN2Y3.js → chunk-ZTNFYMIO.js} +2 -2
- package/dist/{chunk-WEPFGWHJ.js → chunk-ZZFWWYLX.js} +2 -2
- package/dist/cli/index.js +44 -44
- package/dist/clio-5I2IBFYL.js +26 -0
- package/dist/{code-nav-IJR2DBPR.js → code-nav-YXIAEZVS.js} +48 -32
- package/dist/codewiki/build-worker.js +76 -29
- package/dist/{compile-cache-OQAVB7Y5.js → compile-cache-WJEPUZEJ.js} +4 -4
- package/dist/{components-2TGAI2RC.js → components-TNIKXCBH.js} +13 -13
- package/dist/{config-IUA6OYNS.js → config-Y2JDJ3JJ.js} +210 -124
- package/dist/configure-SML6UBZ5.js +55 -0
- package/dist/{context-4MPR7WKB.js → context-P5YSEO55.js} +125 -121
- package/dist/{context-2DKHWH2T.js → context-QQ53HSGJ.js} +91 -62
- package/dist/{context-BOYF5EJM.js → context-S2EEC3EJ.js} +62 -31
- package/dist/context-clear-TMEQCOTH.js +183 -0
- package/dist/{context-index-HNG3MOME.js → context-index-HP2JFUWA.js} +13 -11
- package/dist/{context-map-COB37XXN.js → context-map-INTXD54D.js} +71 -21
- package/dist/{context-working-set-3I3FYX6Y.js → context-working-set-CNLSQN5K.js} +31 -31
- package/dist/detail-5572VLBO.js +114 -0
- package/dist/{dispatch-runner-RJ5I2F2O.js → dispatch-runner-FRHD6P2O.js} +191 -116
- package/dist/{docs-SPOV3BAN.js → docs-BL7ROUFN.js} +4 -4
- package/dist/{doctor-DKICC2SN.js → doctor-N3LCM2LG.js} +58 -58
- package/dist/{eval-OQOQUDHK.js → eval-BUU3ZOUZ.js} +473 -168
- package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
- package/dist/evidence-DTGEN456.js +224 -0
- package/dist/{evidence-4DQ25GUQ.js → evidence-SQ5DNFEN.js} +110 -94
- package/dist/{evolve-GSS52E5J.js → evolve-IJNUFZDS.js} +107 -91
- package/dist/{extensions-G7MFLYHT.js → extensions-YVRHX6ZI.js} +16 -16
- package/dist/{fleet-Q37YHHAQ.js → fleet-ZNNVSYFO.js} +147 -147
- package/dist/{fleet-commands-G7E4N7SM.js → fleet-commands-5YE7NPJL.js} +27 -26
- package/dist/{fleet-decisions-O7M6QBA2.js → fleet-decisions-3SBSCTCW.js} +16 -15
- package/dist/{fleet-graph-TOUBW6OW.js → fleet-graph-6HHPWF5T.js} +39 -38
- package/dist/{fleet-inspect-SW33JJNI.js → fleet-inspect-JEYMGCGC.js} +107 -91
- package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
- package/dist/{fleet-preflight-CV2655TW.js → fleet-preflight-QRSHIIDE.js} +10 -9
- package/dist/{fleet-validate-KESZX2YH.js → fleet-validate-4PM4GDDL.js} +46 -42
- package/dist/{fleet-verify-UQPMTVE3.js → fleet-verify-NJDTHTO3.js} +105 -89
- package/dist/fleet-view-UP2BWQQY.js +117 -0
- package/dist/{init-PXEXQSBF.js → init-S3GZQ5ZF.js} +123 -123
- package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
- package/dist/{interop-ZG5T62U3.js → interop-YOTGXFJM.js} +25 -25
- package/dist/inventory-K2OZ36YJ.js +117 -0
- package/dist/{library-B2W4N74O.js → library-GJI6W6OK.js} +45 -44
- package/dist/{memory-YCANYS5A.js → memory-OQOXQGYD.js} +107 -93
- package/dist/{models-GERTU3YI.js → models-3IK2Y5WE.js} +63 -62
- package/dist/{monitor-CPNIUULB.js → monitor-FTJLTKCQ.js} +136 -107
- package/dist/{orchestrator-J4BSH4WQ.js → orchestrator-N47O7SFD.js} +1159 -697
- package/dist/{panes-BOHAEGYC.js → panes-7BTYH3XQ.js} +8 -8
- package/dist/{panes-NXSLDQZ2.js → panes-WPOMEMRH.js} +22 -22
- package/dist/{paths-VSUWNC22.js → paths-J3KN7UAO.js} +12 -12
- package/dist/preload-65U34NG6.js +115 -0
- package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
- package/dist/{reset-TNWTB5LU.js → reset-MUVQDLNL.js} +20 -20
- package/dist/{resources-4PXNMD5G.js → resources-LM76COAO.js} +41 -40
- package/dist/{run-D6XJ34CN.js → run-3VFZQ33N.js} +162 -156
- package/dist/{share-2NWMJJEE.js → share-4JUB4BL7.js} +43 -42
- package/dist/{skills-KR7WON5G.js → skills-S36AAJHU.js} +47 -46
- package/dist/{skills-eval-O2ZNOLDS.js → skills-eval-G6T57L7M.js} +127 -107
- package/dist/{skills-inventory-ZZOUBK7O.js → skills-inventory-WLM46PJH.js} +41 -40
- package/dist/slash-commands-GBARG3Y7.js +91 -0
- package/dist/{steer-XA25PSCS.js → steer-S7D7IKPU.js} +7 -7
- package/dist/{support-7EMVWYG2.js → support-5VAEC32W.js} +14 -14
- package/dist/{targets-OMH2XCSN.js → targets-N5REUETU.js} +145 -94
- package/dist/tasks-6BVY5YZF.js +36 -0
- package/dist/{terminal-lease-C2J3JYRE.js → terminal-lease-57UEOJKS.js} +12 -11
- package/dist/tools-6OCQ6SVB.js +28 -0
- package/dist/{trace-FXMXUZUF.js → trace-JHLXWUMN.js} +18 -17
- package/dist/{tree-sitter-HGKH6LG4.js → tree-sitter-AQUUOSYM.js} +6 -6
- package/dist/{tui-primitives-K5PASC3O.js → tui-primitives-RCY2HN7G.js} +3 -3
- package/dist/{uninstall-HALS6BLF.js → uninstall-FXYMFFRT.js} +17 -17
- package/dist/{upgrade-MS72RJEP.js → upgrade-4HD5HAIV.js} +40 -39
- package/dist/{usage-NHG6MCJM.js → usage-4GWM2WWP.js} +136 -105
- package/dist/{verifiers-7AUNVXDY.js → verifiers-GSKWKWVG.js} +28 -27
- package/dist/verify-3AS3ULCY.js +30 -0
- package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
- package/dist/{web-fetch-V4FKSDAV.js → web-fetch-MQN4FH3X.js} +169 -18
- package/dist/wiki-generate-7BV7XWIY.js +614 -0
- package/dist/{with-panes-BDQEWBRT.js → with-panes-OFTNAR4Y.js} +34 -20
- package/dist/worker/entry.js +99 -88
- package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
- package/docs/README.md +7 -6
- package/docs/architecture/acp.md +10 -0
- package/docs/architecture/architecture.md +5 -5
- package/docs/architecture/context-engine.md +44 -59
- package/docs/architecture/context-working-set.md +7 -9
- package/docs/architecture/dispatch-architecture-rationale.md +1 -1
- package/docs/architecture/evidence-and-memory.md +10 -0
- package/docs/architecture/pi-boundary.md +37 -7
- package/docs/architecture/prompt-envelope-and-tools.md +7 -7
- package/docs/architecture/session-lifecycle.md +4 -4
- package/docs/architecture/worker-dispatch-mechanics.md +4 -0
- package/docs/guide/commands-and-modes.md +49 -36
- package/docs/guide/configuration-and-targets.md +7 -2
- package/docs/guide/configuration-reference.md +13 -3
- package/docs/guide/environment-variables.md +6 -2
- package/docs/guide/fleet-dispatch.md +12 -0
- package/docs/guide/installation-and-lifecycle.md +35 -9
- package/docs/guide/proactive-memory.md +1 -1
- package/docs/guide/skills-marketplace.md +11 -3
- package/docs/guide/tool-usage.md +9 -2
- package/docs/process/development-pipeline.md +10 -10
- package/docs/process/documentation-guide.md +2 -2
- package/docs/process/eval-runner.md +15 -0
- package/docs/process/evals-internal.md +1 -1
- package/docs/process/release-cut-checklist.md +6 -6
- package/evals/README.md +4 -0
- package/evals/behavioral-corpus-grader.mjs +147 -14
- package/evals/behavioral-model-negative-control.yaml +1 -0
- package/evals/behavioral-model.yaml +266 -1
- package/evals/fixtures/docs-retrieval.json +102 -0
- package/evals/fixtures/scalar-decision.json +17 -0
- package/evals/fixtures/scout-citation-pipeline.json +55 -0
- package/evals/fixtures/source-explanation.json +74 -0
- package/evals/fixtures/tool-arguments.json +18 -0
- package/evals/fixtures/tool-surface/read.txt +4 -0
- package/evals/fixtures/tool-surface/subdir/keep.txt +1 -0
- package/evals/no-edit-memory-grader.mjs +149 -0
- package/evals/scalar-decision-grader.py +41 -0
- package/evals/scalar-decision-machinery.ts +145 -0
- package/evals/source-explanation-grader.mjs +118 -0
- package/evals/tool-surface-grader.mjs +53 -0
- package/evals/tool-surface-model.yaml +274 -0
- package/package.json +14 -14
- package/skills/README.md +6 -6
- package/skills/registry.yaml +1 -1
- package/skills/skill-marketplace.json +1 -1
- package/src/cli/bootstrap-generate.ts +6 -0
- package/src/cli/config-inspect.ts +24 -7
- package/src/cli/config-trust.ts +62 -0
- package/src/cli/config.ts +8 -0
- package/src/cli/context-map.ts +75 -14
- package/src/cli/context.ts +46 -17
- package/src/cli/eval.ts +17 -3
- package/src/cli/modes/print.ts +32 -4
- package/src/cli/run.ts +16 -14
- package/src/cli/skills-eval.ts +10 -8
- package/src/cli/steer-channel.ts +31 -18
- package/src/cli/targets.ts +83 -31
- package/src/cli/tasks.ts +10 -1
- package/src/cli/upgrade.ts +9 -6
- package/src/cli/usage.ts +24 -0
- package/src/cli/wiki-generate.ts +239 -96
- package/src/core/bash-exec.ts +43 -15
- package/src/core/bus-events.ts +15 -0
- package/src/core/config.ts +33 -14
- package/src/core/defaults.ts +5 -4
- package/src/core/file-references.ts +11 -1
- package/src/core/incomplete-installation.ts +3 -1
- package/src/core/settings-layers.ts +21 -5
- package/src/core/termination.ts +26 -9
- package/src/core/untrusted-content.ts +16 -0
- package/src/core/workspace-trust.ts +179 -0
- package/src/domains/agents/builtins/coder.md +4 -2
- package/src/domains/agents/builtins/context-bootstrap.md +3 -1
- package/src/domains/agents/builtins/documenter.md +7 -4
- package/src/domains/agents/builtins/researcher.md +1 -0
- package/src/domains/agents/builtins/scout.md +7 -1
- package/src/domains/agents/result-contract.ts +199 -26
- package/src/domains/context/bootstrap-prompt.ts +11 -9
- package/src/domains/context/bootstrap.ts +74 -39
- package/src/domains/context/clio-md.ts +88 -26
- package/src/domains/context/codewiki/build-operation.ts +121 -0
- package/src/domains/context/codewiki/build-worker-protocol.ts +37 -3
- package/src/domains/context/codewiki/build-worker.ts +3 -35
- package/src/domains/context/codewiki/coordinator.ts +36 -6
- package/src/domains/context/codewiki/indexer.ts +59 -19
- package/src/domains/context/contract.ts +6 -2
- package/src/domains/context/extension.ts +72 -10
- package/src/domains/context/fingerprint.ts +39 -34
- package/src/domains/context/index.ts +7 -1
- package/src/domains/context/prompt-context.ts +55 -14
- package/src/domains/context/refresh.ts +9 -57
- package/src/domains/context/wiki/assemble.ts +14 -10
- package/src/domains/context/wiki/evidence.ts +209 -0
- package/src/domains/context/wiki/generate.ts +201 -67
- package/src/domains/context/wiki/meta.ts +10 -2
- package/src/domains/context/wiki/plan-store.ts +70 -14
- package/src/domains/context/wiki/plan.ts +71 -14
- package/src/domains/context/wiki/prompts.ts +42 -1
- package/src/domains/context/wiki/source-content.ts +106 -0
- package/src/domains/context/wiki/staleness.ts +33 -22
- package/src/domains/context/working-set/contract.ts +8 -2
- package/src/domains/context/working-set/engine.ts +17 -4
- package/src/domains/context/working-set/fold.ts +15 -2
- package/src/domains/context/working-set/marker.ts +2 -1
- package/src/domains/context/working-set/project.ts +18 -7
- package/src/domains/context/working-set/recall.ts +82 -56
- package/src/domains/dispatch/active-route-planner.ts +6 -3
- package/src/domains/dispatch/admission-queue.ts +19 -7
- package/src/domains/dispatch/admission.ts +3 -3
- package/src/domains/dispatch/budget-envelope.ts +47 -82
- package/src/domains/dispatch/capacity-lease.ts +57 -19
- package/src/domains/dispatch/contract.ts +10 -2
- package/src/domains/dispatch/event-pump.ts +28 -7
- package/src/domains/dispatch/execution-role.ts +49 -2
- package/src/domains/dispatch/execution-scheduler.ts +2 -0
- package/src/domains/dispatch/extension.ts +190 -105
- package/src/domains/dispatch/fleet-run.ts +20 -0
- package/src/domains/dispatch/gate-role-prompts.ts +4 -2
- package/src/domains/dispatch/parallel-writers.ts +34 -0
- package/src/domains/dispatch/reservation-store.ts +8 -34
- package/src/domains/dispatch/route-approval.ts +3 -3
- package/src/domains/dispatch/route-observer.ts +4 -2
- package/src/domains/dispatch/route-quality.ts +6 -1
- package/src/domains/dispatch/types.ts +4 -3
- package/src/domains/dispatch/worker-spawn.ts +58 -21
- package/src/domains/dispatch/workspace-checkpoint.ts +57 -0
- package/src/domains/eval/compare/behavioral.ts +81 -14
- package/src/domains/eval/compare/compare.ts +15 -5
- package/src/domains/eval/compare/envelope.ts +12 -5
- package/src/domains/eval/metrics/context.ts +24 -1
- package/src/domains/eval/metrics/tracked.ts +4 -28
- package/src/domains/eval/reports/comparison.ts +9 -9
- package/src/domains/eval/runners/clio-run.ts +5 -1
- package/src/domains/eval/schema/suite.ts +2 -0
- package/src/domains/eval/schema/validate.ts +1 -0
- package/src/domains/eval/suites/run.ts +189 -13
- package/src/domains/eval/verifiers/integrity.ts +39 -0
- package/src/domains/eval/verifiers/patch.ts +58 -2
- package/src/domains/eval/workspaces/temp-copy.ts +3 -0
- package/src/domains/evidence/build.ts +4 -2
- package/src/domains/interop/registry.ts +2 -2
- package/src/domains/middleware/hooks-io.ts +45 -26
- package/src/domains/middleware/hooks.ts +6 -0
- package/src/domains/middleware/injection-screen.ts +23 -0
- package/src/domains/middleware/rules.ts +5 -1
- package/src/domains/middleware/stalled-turn.ts +18 -3
- package/src/domains/middleware/task-board-reminder.ts +4 -2
- package/src/domains/middleware/task-nudge.ts +4 -1
- package/src/domains/mux/contract.ts +34 -1
- package/src/domains/mux/dock-controller.ts +8 -1
- package/src/domains/mux/index.ts +1 -0
- package/src/domains/mux/socket-client.ts +13 -3
- package/src/domains/observability/contract.ts +2 -2
- package/src/domains/observability/projection.ts +30 -9
- package/src/domains/prompts/compiler.ts +10 -2
- package/src/domains/prompts/contract.ts +7 -4
- package/src/domains/prompts/extension.ts +28 -64
- package/src/domains/prompts/fragments/identity/clio.md +23 -0
- package/src/domains/prompts/fragments/operating/contract.md +10 -0
- package/src/domains/prompts/fragments/operating/delegation.md +5 -0
- package/src/domains/prompts/fragments/wiki/page.md +28 -15
- package/src/domains/prompts/fragments/wiki/plan.md +4 -4
- package/src/domains/prompts/preload-prefix.ts +31 -0
- package/src/domains/prompts/preload.ts +135 -61
- package/src/domains/providers/auth/backend-file.ts +15 -11
- package/src/domains/providers/auth/storage.ts +3 -5
- package/src/domains/providers/catalog.ts +18 -3
- package/src/domains/providers/runtime-resolution.ts +11 -9
- package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
- package/src/domains/resources/skills/promotion.ts +8 -1
- package/src/domains/safety/action-classifier.ts +9 -0
- package/src/domains/safety/autonomy.ts +10 -1
- package/src/domains/safety/contract.ts +5 -1
- package/src/domains/safety/default-path-policy.ts +11 -0
- package/src/domains/safety/extension.ts +11 -2
- package/src/domains/safety/policy-engine.ts +189 -32
- package/src/domains/safety/project-policy.ts +7 -2
- package/src/domains/safety/workspace-trust.ts +43 -0
- package/src/domains/session/compaction/compact.ts +384 -21
- package/src/domains/session/compaction/cut-point.ts +42 -5
- package/src/domains/session/compaction/tokens.ts +9 -1
- package/src/domains/session/decision-board.ts +43 -33
- package/src/domains/session/entries.ts +169 -4
- package/src/domains/session/prompt-manifest.ts +47 -8
- package/src/domains/session/task-board.ts +21 -3
- package/src/domains/user-tasks/handoff.ts +16 -0
- package/src/engine/acp/adapter.ts +44 -12
- package/src/engine/acp/server.ts +1 -0
- package/src/engine/acp/transport.ts +2 -1
- package/src/engine/acp/types.ts +6 -1
- package/src/engine/antigravity/subprocess-runtime.ts +20 -4
- package/src/engine/api-registry.ts +19 -2
- package/src/engine/apis/openai-completions.ts +13 -6
- package/src/engine/apis/output-budget.ts +26 -10
- package/src/engine/claude/sdk-runtime.ts +4 -3
- package/src/engine/env-api-keys.ts +2 -1
- package/src/engine/external-subprocess.ts +14 -3
- package/src/engine/loop-guard.ts +19 -2
- package/src/engine/provider-diagnostics.ts +129 -0
- package/src/engine/provider-payload.ts +3 -1
- package/src/engine/worker-runtime.ts +13 -2
- package/src/engine/worker-tools.ts +5 -1
- package/src/entry/extension-reload.ts +1 -0
- package/src/entry/orchestrator.ts +53 -15
- package/src/interactive/chat-loop-messages.ts +12 -4
- package/src/interactive/chat-loop.ts +115 -45
- package/src/interactive/chat-renderer.ts +60 -0
- package/src/interactive/context-recall-command.ts +2 -1
- package/src/interactive/dispatch-board.ts +17 -2
- package/src/interactive/editor-submit.ts +13 -0
- package/src/interactive/interactive-application.ts +8 -2
- package/src/interactive/interactive-event-projection.ts +7 -1
- package/src/interactive/interactive-presentation.ts +15 -7
- package/src/interactive/interactive-slash-runtime.ts +2 -0
- package/src/interactive/layout.ts +2 -1
- package/src/interactive/model-session-replay.ts +2 -2
- package/src/interactive/overlay-frame.ts +1 -0
- package/src/interactive/overlay-general-openers.ts +3 -1
- package/src/interactive/overlay-session-lifecycle.ts +6 -0
- package/src/interactive/overlays/ask-user.ts +1 -0
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/renderers/tool-execution.ts +17 -1
- package/src/interactive/renderers/worker-entry.ts +25 -10
- package/src/interactive/slash-commands.ts +9 -7
- package/src/interactive/turn-context.ts +221 -53
- package/src/interactive/turn-middleware.ts +3 -1
- package/src/interactive/turn-persistence.ts +3 -0
- package/src/interactive/turn-runtime.ts +11 -2
- package/src/interactive/turn-state.ts +10 -9
- package/src/interactive/watch-pane.ts +18 -4
- package/src/interactive/worker-stream.ts +7 -7
- package/src/tools/agent-tools.ts +6 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +9 -2
- package/src/tools/codewiki/code-nav.ts +4 -10
- package/src/tools/compete-judge-task.ts +71 -0
- package/src/tools/compete-worktrees.ts +34 -0
- package/src/tools/context/index.ts +32 -7
- package/src/tools/context/surface.ts +15 -4
- package/src/tools/decide.ts +1 -1
- package/src/tools/dispatch-admission.ts +12 -1
- package/src/tools/dispatch-arguments.ts +38 -1
- package/src/tools/dispatch-plan.ts +7 -7
- package/src/tools/dispatch-runner.ts +48 -32
- package/src/tools/dispatch-schema.ts +30 -23
- package/src/tools/dispatch-scout-admission.ts +10 -44
- package/src/tools/dispatch-scout.ts +2 -3
- package/src/tools/find.ts +13 -4
- package/src/tools/grep.ts +13 -1
- package/src/tools/ls.ts +7 -1
- package/src/tools/monitor.ts +26 -11
- package/src/tools/network-policy.ts +11 -24
- package/src/tools/observation.ts +39 -2
- package/src/tools/read.ts +112 -15
- package/src/tools/registry.ts +54 -17
- package/src/tools/result-shaping.ts +110 -2
- package/src/tools/tasks.ts +33 -7
- package/src/tools/verify/frontend.ts +67 -30
- package/src/tools/verify/numeric.ts +6 -1
- package/src/tools/web-fetch-network.ts +179 -0
- package/src/tools/web-fetch-surface.ts +2 -1
- package/src/tools/web-fetch.ts +15 -13
- package/src/tools/worker-evidence.ts +27 -0
- package/src/worker/spec-contract.ts +12 -8
- package/dist/builtins-WGALA46I.js +0 -22
- package/dist/chunk-2WZ546HR.js +0 -792
- package/dist/chunk-5PSMVOLM.js +0 -56
- package/dist/chunk-EL24TAU4.js +0 -1560
- package/dist/chunk-IZXGRF7P.js +0 -4048
- package/dist/chunk-JVCV3ICN.js +0 -47
- package/dist/chunk-MNJGS2IN.js +0 -33
- package/dist/chunk-O5CVSAG5.js +0 -122
- package/dist/chunk-ODGTEFFI.js +0 -50
- package/dist/chunk-OQE5J4C6.js +0 -73
- package/dist/chunk-UUVG37B4.js +0 -244
- package/dist/chunk-V6HJFQZE.js +0 -228
- package/dist/clio-QLICPCF5.js +0 -25
- package/dist/configure-VEPX4NMX.js +0 -55
- package/dist/context-clear-S4ZJCQUX.js +0 -182
- package/dist/detail-A7JAVSIG.js +0 -98
- package/dist/evidence-4F5USFKH.js +0 -208
- package/dist/fleet-view-MN2VG4MR.js +0 -101
- package/dist/inventory-C26CFDRR.js +0 -101
- package/dist/preload-P6DGH2PZ.js +0 -13
- package/dist/slash-commands-ZXPJD64J.js +0 -92
- package/dist/tasks-IPAGMEIX.js +0 -36
- package/dist/tools-EFFEAIDP.js +0 -28
- package/dist/verify-FWYGPKMR.js +0 -29
- package/dist/wiki-generate-743CIGJW.js +0 -476
|
@@ -65,6 +65,7 @@ function headlineFor(ref: string, tokens: number, state: EvictedState | undefine
|
|
|
65
65
|
if (state !== undefined) {
|
|
66
66
|
parts.push(state.by === undefined ? `evicted: ${state.reason}` : `evicted: ${state.reason} by ${state.by}`);
|
|
67
67
|
}
|
|
68
|
+
if (state === undefined) parts.push("summarized");
|
|
68
69
|
parts.push(`${formatTokens(tokens)} tokens`);
|
|
69
70
|
if (offloadPath !== undefined) parts.push(`offload: ${offloadPath}`);
|
|
70
71
|
return `[/context recall] ${parts.join(" · ")}`;
|
|
@@ -85,7 +86,7 @@ export function runOperatorRecall(ref: string, deps: OperatorRecallDeps): Operat
|
|
|
85
86
|
// A ref that resolves to nothing is usually a typo or a stale marker; the
|
|
86
87
|
// shared message ends with the refs the operator could have typed instead.
|
|
87
88
|
if (!resolved.ok)
|
|
88
|
-
return { ok: false, message: `[/context recall] ${recallErrorMessage(resolved.error, entries, view)}` };
|
|
89
|
+
return { ok: false, message: `[/context recall] ${recallErrorMessage(resolved.error, entries, view, leaf)}` };
|
|
89
90
|
const { result } = resolved;
|
|
90
91
|
const fields = buildRecallFields(result, { trigger: "operator" });
|
|
91
92
|
try {
|
|
@@ -8,7 +8,11 @@ import {
|
|
|
8
8
|
} from "../domains/dispatch/budget-envelope.js";
|
|
9
9
|
import { type DispatchRequestOrigin, type RunKind, runKindSupportsLiveSteering } from "../domains/dispatch/types.js";
|
|
10
10
|
import { describeWriteBoundaryAttributionDowngrade } from "../domains/dispatch/write-boundary.js";
|
|
11
|
-
import
|
|
11
|
+
import {
|
|
12
|
+
type TrustSummaryProjection,
|
|
13
|
+
type TrustVerdict,
|
|
14
|
+
trustStateWord,
|
|
15
|
+
} from "../domains/evidence/trust-projection.js";
|
|
12
16
|
import type { ObservabilityContract, ObservabilityRunSummary } from "../domains/observability/contract.js";
|
|
13
17
|
import {
|
|
14
18
|
COST_NOT_MEASURED,
|
|
@@ -774,7 +778,18 @@ function renderTaskIslandRow(row: DispatchBoardRow, width: number): string[] {
|
|
|
774
778
|
? ` ${theme.fg("muted", truncateToWidth(row.taskSummary, Math.max(1, width - 2), "…", false))}`
|
|
775
779
|
: null;
|
|
776
780
|
|
|
777
|
-
|
|
781
|
+
const quality = isTerminalStatus(row.status)
|
|
782
|
+
? wrapTextWithAnsi(
|
|
783
|
+
` quality: ${trustStateWord("validationGrounding", row.trust?.axes.validationGrounding ?? "unknown")}`,
|
|
784
|
+
width,
|
|
785
|
+
)
|
|
786
|
+
: [];
|
|
787
|
+
return [
|
|
788
|
+
padAnsi(line1, width),
|
|
789
|
+
...quality.map((line) => padAnsi(theme.fg("muted", line), width)),
|
|
790
|
+
...(task ? [padAnsi(task, width)] : []),
|
|
791
|
+
padAnsi(telemetry, width),
|
|
792
|
+
];
|
|
778
793
|
}
|
|
779
794
|
|
|
780
795
|
/**
|
|
@@ -25,6 +25,8 @@ import {
|
|
|
25
25
|
} from "./transcript-detail.js";
|
|
26
26
|
|
|
27
27
|
const EDITOR_BASH_TIMEOUT_MS = 300_000;
|
|
28
|
+
/** Existing bash TERM-to-KILL grace (5s), plus settlement and session append. */
|
|
29
|
+
export const EDITOR_BASH_SHUTDOWN_MS = 6000;
|
|
28
30
|
|
|
29
31
|
/**
|
|
30
32
|
* Command shapes whose text is put back in the editor after the parser rejects
|
|
@@ -125,18 +127,22 @@ export interface EditorSubmitController {
|
|
|
125
127
|
restoreQueuedFollowUpsToEditor(): void;
|
|
126
128
|
hasActiveEditorBash(): boolean;
|
|
127
129
|
cancelActiveEditorBash(): boolean;
|
|
130
|
+
/** Stop shell admission, cancel the owned command, and await its persisted result. */
|
|
131
|
+
shutdownEditorBash(): Promise<void>;
|
|
128
132
|
}
|
|
129
133
|
|
|
130
134
|
type EditorSteerSubmission = "unhandled" | "accepted" | "rejected";
|
|
131
135
|
|
|
132
136
|
/** Owns editor submission and the one local bash process attached to it. */
|
|
133
137
|
export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubmitController {
|
|
138
|
+
let shuttingDown = false;
|
|
134
139
|
let activeEditorBash: AbortController | null = null;
|
|
135
140
|
let activeEditorBashSettlement: Promise<void> | null = null;
|
|
136
141
|
|
|
137
142
|
const runEditorBash = (text: string): boolean => {
|
|
138
143
|
const parsed = parseEditorBashCommand(text);
|
|
139
144
|
if (!parsed) return false;
|
|
145
|
+
if (shuttingDown) return true;
|
|
140
146
|
if (deps.chat.isStreaming()) {
|
|
141
147
|
deps.io.stderr("[bash] response in progress. Press Esc to cancel the active run before running a local command.\n");
|
|
142
148
|
return true;
|
|
@@ -394,12 +400,14 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
394
400
|
const literalText = unguardPastedEditorOperator(text);
|
|
395
401
|
const trimmed = literalText.trim();
|
|
396
402
|
if (trimmed.length === 0) return;
|
|
403
|
+
if (shuttingDown) throw new Error("editor is shutting down");
|
|
397
404
|
signal?.throwIfAborted();
|
|
398
405
|
deps.collapseLaunchpadBeforeSubmit?.();
|
|
399
406
|
if (parseEditorBashCommand(text)) {
|
|
400
407
|
while (deps.chat.isStreaming()) await awaitWithAbort(deps.chat.whenSettled(), signal);
|
|
401
408
|
while (activeEditorBashSettlement) await awaitWithAbort(activeEditorBashSettlement, signal);
|
|
402
409
|
signal?.throwIfAborted();
|
|
410
|
+
if (shuttingDown) throw new Error("editor is shutting down");
|
|
403
411
|
deps.editor.addToHistory(literalText);
|
|
404
412
|
runEditorBash(text);
|
|
405
413
|
deps.ui.requestRender();
|
|
@@ -529,6 +537,11 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
529
537
|
interruptFromEditor,
|
|
530
538
|
restoreQueuedFollowUpsToEditor,
|
|
531
539
|
hasActiveEditorBash: () => activeEditorBash !== null,
|
|
540
|
+
shutdownEditorBash: async () => {
|
|
541
|
+
shuttingDown = true;
|
|
542
|
+
activeEditorBash?.abort();
|
|
543
|
+
await activeEditorBashSettlement;
|
|
544
|
+
},
|
|
532
545
|
cancelActiveEditorBash: () => {
|
|
533
546
|
if (!activeEditorBash) return false;
|
|
534
547
|
activeEditorBash.abort();
|
|
@@ -3,6 +3,7 @@ import type { ClioSettings } from "../core/config.js";
|
|
|
3
3
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
4
4
|
import { expandInlineFileReferencesAsync } from "../core/file-references.js";
|
|
5
5
|
import type { PendingSkillRequest } from "../core/skill-activation.js";
|
|
6
|
+
import { getTerminationCoordinator } from "../core/termination.js";
|
|
6
7
|
import { clioStateDir } from "../core/xdg.js";
|
|
7
8
|
import type { AgentsContract } from "../domains/agents/contract.js";
|
|
8
9
|
import type { ClioKeybinding } from "../domains/config/keybindings.js";
|
|
@@ -33,7 +34,7 @@ import { emitCommandNotice } from "./command-fallbacks.js";
|
|
|
33
34
|
import { appendNotice } from "./command-output.js";
|
|
34
35
|
import { dispatchCouncilThroughRegistry } from "./council-dispatch.js";
|
|
35
36
|
import { createDispatchSteering } from "./dispatch-steering.js";
|
|
36
|
-
import { createEditorSubmitController } from "./editor-submit.js";
|
|
37
|
+
import { createEditorSubmitController, EDITOR_BASH_SHUTDOWN_MS } from "./editor-submit.js";
|
|
37
38
|
import { createInteractiveDesktopNotifications } from "./footer/notifications.js";
|
|
38
39
|
import { createInteractiveEventProjection } from "./interactive-event-projection.js";
|
|
39
40
|
import { createInteractiveInputRuntime } from "./interactive-input-runtime.js";
|
|
@@ -587,6 +588,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
587
588
|
...(deps.session ? { session: deps.session } : {}),
|
|
588
589
|
...(deps.getSessionId ? { getSessionId: deps.getSessionId } : {}),
|
|
589
590
|
...(deps.getTaskBoard ? { getTaskBoard: deps.getTaskBoard } : {}),
|
|
591
|
+
...(deps.userTasks ? { userTasks: deps.userTasks } : {}),
|
|
590
592
|
...(deps.getTaskMemoryStatus ? { getTaskMemoryStatus: deps.getTaskMemoryStatus } : {}),
|
|
591
593
|
...(deps.getTaskMemorySeedOffer ? { getTaskMemorySeedOffer: deps.getTaskMemorySeedOffer } : {}),
|
|
592
594
|
...(deps.getContextState ? { getContextState: deps.getContextState } : {}),
|
|
@@ -701,6 +703,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
701
703
|
io,
|
|
702
704
|
bus: deps.bus,
|
|
703
705
|
dispatch: deps.dispatch,
|
|
706
|
+
...(deps.getDecisionBoard ? { getDecisionBoard: deps.getDecisionBoard } : {}),
|
|
704
707
|
...(deps.session ? { session: deps.session } : {}),
|
|
705
708
|
providers: deps.providers,
|
|
706
709
|
chat: deps.chat,
|
|
@@ -804,6 +807,9 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
804
807
|
expandSubmit: (text) => expandInteractiveSubmitAsync(text, deps.resources),
|
|
805
808
|
notify,
|
|
806
809
|
});
|
|
810
|
+
// The lease drains the terminal; operator shell ownership outlives that
|
|
811
|
+
// surface and must settle before the session domain stops, on every exit.
|
|
812
|
+
getTerminationCoordinator().onDrain(() => editorSubmit.shutdownEditorBash(), { timeoutMs: EDITOR_BASH_SHUTDOWN_MS });
|
|
807
813
|
editor.onSubmit = editorSubmit.submitEditorText;
|
|
808
814
|
|
|
809
815
|
const interactiveTickers = createInteractiveTickers({
|
|
@@ -1111,7 +1117,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
1111
1117
|
steerSelectedDispatch,
|
|
1112
1118
|
cancelSelectedDispatch,
|
|
1113
1119
|
cancelActiveEditorBash: () => editorSubmit.cancelActiveEditorBash(),
|
|
1114
|
-
isStreaming: () => deps.chat.isStreaming(),
|
|
1120
|
+
isStreaming: () => deps.chat.isStreaming() || deps.chat.turnPreparation().phase === "compacting",
|
|
1115
1121
|
cancelActiveRun,
|
|
1116
1122
|
editor,
|
|
1117
1123
|
editorSubmit,
|
|
@@ -251,9 +251,10 @@ export function createInteractiveEventProjection(deps: InteractiveEventProjectio
|
|
|
251
251
|
typeof event.tokensBefore === "number" &&
|
|
252
252
|
typeof event.tokensAfter === "number"
|
|
253
253
|
) {
|
|
254
|
+
const outcome = event.tokensAfter < event.tokensBefore ? "Reclaimed context" : "Context updated";
|
|
254
255
|
deps.notify(
|
|
255
256
|
"info",
|
|
256
|
-
`[Compaction]
|
|
257
|
+
`[Compaction] ${outcome}: ${event.tokensBefore} -> ${event.tokensAfter} tokens (${event.stage})`,
|
|
257
258
|
"compaction-notice",
|
|
258
259
|
);
|
|
259
260
|
}
|
|
@@ -388,6 +389,11 @@ export function createInteractiveEventProjection(deps: InteractiveEventProjectio
|
|
|
388
389
|
|
|
389
390
|
const seenMiddlewareBudgetWarnings = new Set<string>();
|
|
390
391
|
remainingUnsubscribers.push(
|
|
392
|
+
deps.bus.on(BusChannels.ExtensionsLoadIssue, (payload) => {
|
|
393
|
+
if (typeof payload?.message !== "string" || payload.message.trim().length === 0) return;
|
|
394
|
+
deps.appendTranscriptNotice("warn", payload.message);
|
|
395
|
+
deps.requestRender();
|
|
396
|
+
}),
|
|
391
397
|
deps.bus.on(BusChannels.MiddlewareHookFailed, (payload) => {
|
|
392
398
|
const notice = middlewareHookFailedSessionNotice(payload, seenMiddlewareBudgetWarnings);
|
|
393
399
|
if (notice === null) return;
|
|
@@ -16,6 +16,7 @@ import { type ProvidersContract, resolveModelRuntimeCapabilitiesForProviders } f
|
|
|
16
16
|
import type { ResourcesContract } from "../domains/resources/index.js";
|
|
17
17
|
import { ceilChars, contentChars } from "../domains/session/context-accounting.js";
|
|
18
18
|
import type { SessionContract, TaskBoardSnapshot } from "../domains/session/index.js";
|
|
19
|
+
import type { UserTasksStore } from "../domains/user-tasks/store.js";
|
|
19
20
|
import type { Component, TUI } from "../engine/tui.js";
|
|
20
21
|
import type { ChatLoop, ChatLoopEvent } from "./chat-loop.js";
|
|
21
22
|
import { type ChatPanel, createChatPanel } from "./chat-panel.js";
|
|
@@ -93,6 +94,7 @@ export interface InteractivePresentationDeps {
|
|
|
93
94
|
session?: Pick<SessionContract, "current">;
|
|
94
95
|
getSessionId?: () => string | null;
|
|
95
96
|
getTaskBoard?: () => TaskBoardSnapshot | null;
|
|
97
|
+
userTasks?: Pick<UserTasksStore, "snapshot">;
|
|
96
98
|
getTaskMemoryStatus?: () => TaskMemoryOperatorStatus;
|
|
97
99
|
getTaskMemorySeedOffer?: () => { source: string; count: number } | null;
|
|
98
100
|
getContextState?: (cwd?: string) => ContextState;
|
|
@@ -471,13 +473,19 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
|
|
|
471
473
|
label: skill.name,
|
|
472
474
|
description: skill.description,
|
|
473
475
|
})),
|
|
474
|
-
tasks: async () =>
|
|
475
|
-
(deps.
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
476
|
+
tasks: async ({ subcommand }) =>
|
|
477
|
+
(deps.userTasks?.snapshot() ?? [])
|
|
478
|
+
.filter((task) =>
|
|
479
|
+
subcommand === "hand"
|
|
480
|
+
? task.status === "open"
|
|
481
|
+
: task.status === "open" || task.status === "handed" || task.status === "picked",
|
|
482
|
+
)
|
|
483
|
+
.map((task) => ({
|
|
484
|
+
id: task.id,
|
|
485
|
+
value: task.id,
|
|
486
|
+
label: task.title,
|
|
487
|
+
description: task.status,
|
|
488
|
+
})),
|
|
481
489
|
// Other slots remain empty when this presentation has no read-only catalog for them.
|
|
482
490
|
},
|
|
483
491
|
});
|
|
@@ -75,6 +75,7 @@ export interface InteractiveSlashRuntimeDeps {
|
|
|
75
75
|
io: RunIo;
|
|
76
76
|
bus: SafeEventBus;
|
|
77
77
|
dispatch: DispatchContract;
|
|
78
|
+
getDecisionBoard?: SlashCommandContext["getDecisionBoard"];
|
|
78
79
|
providers: ProvidersContract;
|
|
79
80
|
chat: SlashChat;
|
|
80
81
|
chatPanel: SlashChatPanel;
|
|
@@ -380,6 +381,7 @@ export function createInteractiveSlashRuntime(deps: InteractiveSlashRuntimeDeps)
|
|
|
380
381
|
});
|
|
381
382
|
},
|
|
382
383
|
dispatch: deps.dispatch,
|
|
384
|
+
...(deps.getDecisionBoard ? { getDecisionBoard: deps.getDecisionBoard } : {}),
|
|
383
385
|
bus: deps.bus,
|
|
384
386
|
...(deps.agents
|
|
385
387
|
? { getAgentRoleFacts: agentRoleFactsResolver((agentId: string) => deps.agents?.getSpec(agentId) ?? null) }
|
|
@@ -33,7 +33,8 @@ function buildFullscreenLayout(
|
|
|
33
33
|
primary: true,
|
|
34
34
|
overscroll: "chain",
|
|
35
35
|
scrollbar: options.fullscreenScrollbar ?? "auto",
|
|
36
|
-
|
|
36
|
+
scrollbarTrackStyle: (text) => theme.fg("frame", text),
|
|
37
|
+
scrollbarThumbStyle: () => theme.fg("frameStrong", GLYPH.barFull),
|
|
37
38
|
});
|
|
38
39
|
const dock = new VStack();
|
|
39
40
|
if (parts.pending) dock.addChild(parts.pending, { shrink: 1, minSize: 0 });
|
|
@@ -16,6 +16,6 @@ export function buildModelReplayAgentMessagesFromTurns(
|
|
|
16
16
|
options: RehydrateChatPanelOptions = {},
|
|
17
17
|
): AgentMessage[] {
|
|
18
18
|
const activeLeafTurnId = options.activeLeafTurnId ?? options.uptoTurnId;
|
|
19
|
-
const projected = projectWorkingSet(entries, foldWorkingSet(entries, activeLeafTurnId));
|
|
20
|
-
return buildReplayAgentMessagesFromTurns(projected, options);
|
|
19
|
+
const projected = projectWorkingSet(entries, foldWorkingSet(entries, activeLeafTurnId), activeLeafTurnId);
|
|
20
|
+
return buildReplayAgentMessagesFromTurns(projected, { ...options, skillContextEntries: entries });
|
|
21
21
|
}
|
|
@@ -527,6 +527,7 @@ export function showClioOverlayFrame(
|
|
|
527
527
|
unfocus: (unfocusOptions?: OverlayUnfocusOptions): void =>
|
|
528
528
|
unfocusOptions ? handle.unfocus(unfocusOptions) : handle.unfocus(),
|
|
529
529
|
isFocused: (): boolean => handle.isFocused(),
|
|
530
|
+
getBounds: () => handle.getBounds(),
|
|
530
531
|
};
|
|
531
532
|
}
|
|
532
533
|
|
|
@@ -19,6 +19,7 @@ import type { SessionMeta } from "../domains/session/index.js";
|
|
|
19
19
|
import { foldSessionArtifacts } from "../domains/session/session-artifacts.js";
|
|
20
20
|
import { foldSessionTaskHistory } from "../domains/session/task-board.js";
|
|
21
21
|
import { filterEntriesToActivePath } from "../domains/session/tree/active-path.js";
|
|
22
|
+
import { formatUserTaskHandoff } from "../domains/user-tasks/handoff.js";
|
|
22
23
|
import type { UserTasksStore } from "../domains/user-tasks/store.js";
|
|
23
24
|
import type { TUI } from "../engine/tui.js";
|
|
24
25
|
import { type OpenContextOverlayOptions, openContextOverlay } from "./context-overlay.js";
|
|
@@ -40,7 +41,7 @@ import {
|
|
|
40
41
|
import { formatDecisionCorrectionTurn, openDecisionsOverlay } from "./overlays/decisions.js";
|
|
41
42
|
import { openFleetRunApprovalOverlay } from "./overlays/fleet-run-approval.js";
|
|
42
43
|
import { openSideQuestionOverlay } from "./overlays/side-question.js";
|
|
43
|
-
import {
|
|
44
|
+
import type { ContextClearCommandOptions } from "./slash-commands.js";
|
|
44
45
|
import { openTasksOverlay } from "./tasks-overlay.js";
|
|
45
46
|
import { type ArtifactProviderDeps, createDefaultArtifactProviders } from "./view/artifacts.js";
|
|
46
47
|
import { openViewOverlay } from "./view/view-overlay.js";
|
|
@@ -487,6 +488,7 @@ export function createOverlayGeneralOpeners(deps: OverlayGeneralOpenersDeps): Ov
|
|
|
487
488
|
fleetRootId,
|
|
488
489
|
dispatch: deps.dispatch,
|
|
489
490
|
agents: { getSpec: (agentId) => agents.getSpec(agentId) },
|
|
491
|
+
...(deps.getDecisionBoard ? { getDecisionBoard: deps.getDecisionBoard } : {}),
|
|
490
492
|
attributionEnabled: deps.getSettings?.().integrations.git.commitAttribution ?? true,
|
|
491
493
|
vars: preview.vars,
|
|
492
494
|
onStepDispatched: (event) => {
|
|
@@ -304,6 +304,12 @@ export function createOverlaySessionLifecycle(deps: OverlaySessionLifecycleDeps)
|
|
|
304
304
|
}
|
|
305
305
|
deps.resetTranscript();
|
|
306
306
|
replayFork(forkedSessionId, parentTurnId, session);
|
|
307
|
+
emitCommandNotice(
|
|
308
|
+
deps.getSlashNotice(),
|
|
309
|
+
"info",
|
|
310
|
+
"fork",
|
|
311
|
+
"Conversation forked. Workspace files were not rewound; existing edits remain.",
|
|
312
|
+
);
|
|
307
313
|
} catch (error) {
|
|
308
314
|
deps.stderr(`[/fork] fork failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
309
315
|
}
|
|
@@ -1270,6 +1270,7 @@ export function openAskUserOverlay(tui: TUI, deps: OpenAskUserOverlayDeps): AskU
|
|
|
1270
1270
|
focus: () => handle?.focus(),
|
|
1271
1271
|
unfocus: (options) => (options ? handle?.unfocus(options) : handle?.unfocus()),
|
|
1272
1272
|
isFocused: () => handle?.isFocused() ?? false,
|
|
1273
|
+
getBounds: () => handle?.getBounds(),
|
|
1273
1274
|
ask: (questions, presentation) => view.begin(questions, presentation),
|
|
1274
1275
|
cancel: () => view.cancel(),
|
|
1275
1276
|
close,
|
|
@@ -150,7 +150,7 @@ export function openMessagePickerOverlay(tui: TUI, deps: OpenMessagePickerOverla
|
|
|
150
150
|
anchor: "center",
|
|
151
151
|
width: MESSAGE_PICKER_OVERLAY_WIDTH,
|
|
152
152
|
markerId: "message-picker",
|
|
153
|
-
title: "Fork",
|
|
153
|
+
title: "Fork conversation; workspace files stay unchanged",
|
|
154
154
|
footerHint: rows.length > 0 ? buildHint([{ key: "Enter", verb: "select" }]) : buildHint([]),
|
|
155
155
|
});
|
|
156
156
|
}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* two surfaces stay byte-identical.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
+
import { trustStateWord } from "../../domains/evidence/trust-projection.js";
|
|
15
16
|
import { sanitizeCallTargetText } from "../../domains/safety/call-target.js";
|
|
16
17
|
import { redactSecretString, redactToolArgs } from "../../domains/safety/redaction.js";
|
|
17
18
|
import { formatSize } from "../../engine/truncate.js";
|
|
@@ -320,7 +321,22 @@ function outcomeSummary(finished: ToolExecutionFinished): string | null {
|
|
|
320
321
|
if (finished.toolName === "dispatch") {
|
|
321
322
|
const receipts = numberField(details, "receiptCount");
|
|
322
323
|
const failed = numberField(details, "failedCount") ?? 0;
|
|
323
|
-
if (receipts !== null)
|
|
324
|
+
if (receipts !== null) {
|
|
325
|
+
const runs = Array.isArray(details?.runs) ? details.runs.slice(0, receipts) : [];
|
|
326
|
+
const qualityCounts = new Map<string, number>();
|
|
327
|
+
for (const run of runs) {
|
|
328
|
+
const trust = isPlainObject(run) && isPlainObject(run.trust) ? run.trust : null;
|
|
329
|
+
const axes = isPlainObject(trust?.axes) ? trust.axes : null;
|
|
330
|
+
const word = trustStateWord("validationGrounding", stringField(axes, "validationGrounding") ?? "unknown");
|
|
331
|
+
qualityCounts.set(word, (qualityCounts.get(word) ?? 0) + 1);
|
|
332
|
+
}
|
|
333
|
+
if (runs.length < receipts) {
|
|
334
|
+
const unknown = trustStateWord("validationGrounding", "unknown");
|
|
335
|
+
qualityCounts.set(unknown, (qualityCounts.get(unknown) ?? 0) + receipts - runs.length);
|
|
336
|
+
}
|
|
337
|
+
const quality = [...qualityCounts].map(([word, count]) => `${count} ${word}`).join(", ");
|
|
338
|
+
return `${receipts} task${receipts === 1 ? "" : "s"} -> ${receipts - failed} execution ok${failed > 0 ? `, ${failed} execution failed` : ""}${quality ? `; quality: ${quality}` : ""}`;
|
|
339
|
+
}
|
|
324
340
|
return null;
|
|
325
341
|
}
|
|
326
342
|
if (finished.toolName === "tasks") {
|
|
@@ -11,17 +11,20 @@
|
|
|
11
11
|
* ◇ coder · node-a/example-coder-model · run 2mkas6s
|
|
12
12
|
* │ Hello! I'm the coder worker.
|
|
13
13
|
* │ ⚙ read · artifact
|
|
14
|
-
* └ ✓ ok · 4.8k tok · 9.6s · contract pass
|
|
14
|
+
* └ ✓ execution ok · 4.8k tok · 9.6s · contract pass
|
|
15
|
+
* │ quality: grounded
|
|
15
16
|
*
|
|
16
|
-
* Folded (the default for a run the model asked for)
|
|
17
|
-
*
|
|
17
|
+
* Folded (the default for a run the model asked for) keeps identity and
|
|
18
|
+
* execution on a tool-style subline, followed by the settled quality fact:
|
|
18
19
|
*
|
|
19
|
-
* ◆ scout · node-b/example-scout-model · run 3nc18jo ✓ · 41s (Ctrl+O)
|
|
20
|
+
* ◆ scout · node-b/example-scout-model · run 3nc18jo ✓ execution ok · 41s (Ctrl+O)
|
|
21
|
+
* │ quality: validation failed
|
|
20
22
|
*
|
|
21
23
|
* Pure: no I/O, no module-level mutable state beyond the shared theme handle.
|
|
22
24
|
*/
|
|
23
25
|
|
|
24
26
|
import { parseJsonObjectPayload } from "../../core/json-payload.js";
|
|
27
|
+
import { trustStateWord } from "../../domains/evidence/trust-projection.js";
|
|
25
28
|
import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../../engine/tui.js";
|
|
26
29
|
import { formatFooterTokens } from "../footer-panel.js";
|
|
27
30
|
import { type ClioToken, clioTheme, fitUnits, formatCompactMs, GLYPH } from "../theme/index.js";
|
|
@@ -80,14 +83,14 @@ function headerLine(entry: WorkerEntryState, width: number): string {
|
|
|
80
83
|
}
|
|
81
84
|
|
|
82
85
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
86
|
+
* Execution outcome, explicitly named on successful folded and expanded rows
|
|
87
|
+
* so the separate quality line cannot be mistaken for process status.
|
|
85
88
|
* Abandoned names itself rather than falling through to its `stalled`
|
|
86
89
|
* outcome code, so it reads as a ledger-side finding instead of the ordinary
|
|
87
90
|
* heartbeat-timeout `stalled` a sealed receipt reports.
|
|
88
91
|
*/
|
|
89
92
|
function outcomeUnit(receipt: WorkerReceiptSummary, word: boolean): string {
|
|
90
|
-
if (receipt.outcome === "succeeded") return theme.fg("success",
|
|
93
|
+
if (receipt.outcome === "succeeded") return theme.fg("success", `${GLYPH.ok} execution ok`);
|
|
91
94
|
if (receipt.outcome === "canceled") return theme.fg("dim", `${GLYPH.cancelled} canceled`);
|
|
92
95
|
if (receipt.abandonedDetail !== undefined) return theme.fg("error", word ? `${GLYPH.error} abandoned` : GLYPH.error);
|
|
93
96
|
return theme.fg("error", `${GLYPH.error} ${receipt.outcomeCode ?? receipt.outcome}`);
|
|
@@ -397,8 +400,12 @@ function foldedLine(entry: WorkerEntryState, width: number, expandKey: string |
|
|
|
397
400
|
entry.receipt?.durationMs === undefined ? "" : dim(`${SEPARATOR}${formatCompactMs(entry.receipt.durationMs)}`);
|
|
398
401
|
const hint = expandKey === undefined || expandKey.length === 0 ? "" : dim(` (${expandKey})`);
|
|
399
402
|
const full = ` ${status}${elapsed}${hint}`;
|
|
400
|
-
|
|
401
|
-
|
|
403
|
+
let tail = visibleWidth(identity) + visibleWidth(full) <= width ? full : ` ${status}${hint}`;
|
|
404
|
+
// Reserve one identity cell. The optional hint yields before execution
|
|
405
|
+
// status when the suffix alone would exhaust the header's width.
|
|
406
|
+
if (visibleWidth(tail) >= width) tail = ` ${status}`;
|
|
407
|
+
const header = `${truncateToWidth(identity, Math.max(1, width - visibleWidth(tail)), GLYPH.ellipsis, false)}${tail}`;
|
|
408
|
+
return truncateToWidth(header, width, GLYPH.ellipsis, false);
|
|
402
409
|
}
|
|
403
410
|
|
|
404
411
|
export function renderWorkerEntryLines(
|
|
@@ -407,7 +414,14 @@ export function renderWorkerEntryLines(
|
|
|
407
414
|
options: WorkerEntryRenderOptions,
|
|
408
415
|
): string[] {
|
|
409
416
|
const safeWidth = Math.max(1, Math.floor(width));
|
|
410
|
-
|
|
417
|
+
const quality = isPending(entry)
|
|
418
|
+
? []
|
|
419
|
+
: railLines(
|
|
420
|
+
`quality: ${trustStateWord("validationGrounding", entry.receipt?.trust?.validationGrounding.state ?? "unknown")}`,
|
|
421
|
+
"muted",
|
|
422
|
+
safeWidth,
|
|
423
|
+
);
|
|
424
|
+
if (options.folded) return [foldedLine(entry, safeWidth, options.expandKey), ...quality];
|
|
411
425
|
const tools = toolLine(entry, safeWidth);
|
|
412
426
|
return [
|
|
413
427
|
headerLine(entry, safeWidth),
|
|
@@ -416,5 +430,6 @@ export function renderWorkerEntryLines(
|
|
|
416
430
|
...(tools === null ? [] : [tools]),
|
|
417
431
|
...failureLines(entry, safeWidth),
|
|
418
432
|
footerLine(entry, safeWidth),
|
|
433
|
+
...quality,
|
|
419
434
|
];
|
|
420
435
|
}
|
|
@@ -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";
|
|
@@ -246,6 +249,8 @@ export interface RunCommandOptions {
|
|
|
246
249
|
|
|
247
250
|
export interface HandleRunDeps {
|
|
248
251
|
dispatch: DispatchContract;
|
|
252
|
+
/** Live session board, snapshotted before operator run admission. */
|
|
253
|
+
getDecisionBoard?: () => ReadonlyArray<DecisionLedgerEntry>;
|
|
249
254
|
/** Strict recipe facts the run's execution role is derived from. */
|
|
250
255
|
getAgentRoleFacts?: AgentRoleFactsResolver;
|
|
251
256
|
io: RunIo;
|
|
@@ -341,6 +346,7 @@ export async function handleRun(
|
|
|
341
346
|
deps: HandleRunDeps,
|
|
342
347
|
options: RunCommandOptions = {},
|
|
343
348
|
): Promise<void> {
|
|
349
|
+
const decisionRefs = activeDecisionRefs(deps.getDecisionBoard?.() ?? []);
|
|
344
350
|
if (options.target && options.workerProfile) {
|
|
345
351
|
deps.notice(
|
|
346
352
|
"warn",
|
|
@@ -363,6 +369,7 @@ export async function handleRun(
|
|
|
363
369
|
...(deps.getAgentRoleFacts ? { resolveFacts: deps.getAgentRoleFacts } : {}),
|
|
364
370
|
}),
|
|
365
371
|
requestOrigin: "user",
|
|
372
|
+
...(decisionRefs.length > 0 ? { decisionRefs } : {}),
|
|
366
373
|
...(options.workerProfile ? { workerProfile: options.workerProfile } : {}),
|
|
367
374
|
...(options.workerRuntime ? { workerRuntime: options.workerRuntime } : {}),
|
|
368
375
|
...(options.target ? { target: options.target } : {}),
|
|
@@ -562,6 +569,7 @@ export interface SlashCommandContext {
|
|
|
562
569
|
io: RunIo;
|
|
563
570
|
notice: (level: NoticeLevel, text: string) => void;
|
|
564
571
|
dispatch: DispatchContract;
|
|
572
|
+
getDecisionBoard?: HandleRunDeps["getDecisionBoard"];
|
|
565
573
|
bus: SafeEventBus;
|
|
566
574
|
/** Strict recipe facts used to keep interactive /run role-equivalent with the CLI. */
|
|
567
575
|
getAgentRoleFacts?: AgentRoleFactsResolver;
|
|
@@ -791,13 +799,6 @@ function formatReceiptVerificationBlock(runId: string, result: SlashReceiptVerif
|
|
|
791
799
|
return lines.join("\n");
|
|
792
800
|
}
|
|
793
801
|
|
|
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
802
|
/** The verb a command performs, in the order /help lists the groups. */
|
|
802
803
|
export const SLASH_COMMAND_GROUPS = ["Work", "Inspect", "Configure", "Session"] as const;
|
|
803
804
|
export type SlashCommandGroup = (typeof SLASH_COMMAND_GROUPS)[number];
|
|
@@ -1183,6 +1184,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
|
|
|
1183
1184
|
task,
|
|
1184
1185
|
{
|
|
1185
1186
|
dispatch: ctx.dispatch,
|
|
1187
|
+
...(ctx.getDecisionBoard ? { getDecisionBoard: ctx.getDecisionBoard } : {}),
|
|
1186
1188
|
...(ctx.getAgentRoleFacts ? { getAgentRoleFacts: ctx.getAgentRoleFacts } : {}),
|
|
1187
1189
|
io: ctx.io,
|
|
1188
1190
|
notice: ctx.notice,
|