@iowarp/clio-coder 0.4.8 → 0.4.9
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 +82 -0
- package/README.md +7 -6
- package/dist/{acp-JWPQZM2D.js → acp-ZWZCPS2A.js} +13 -13
- package/dist/{agents-4GCDIRVX.js → agents-LYSOWZUE.js} +53 -52
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-SYAKTDQE.js → auth-WBQGKWQ5.js} +27 -27
- package/dist/{background-OW67WMYR.js → background-BUMOBAQN.js} +4 -4
- package/dist/{builtins-TKS63VNV.js → builtins-ODRJOEDI.js} +7 -7
- package/dist/{chunk-JLBVCROW.js → chunk-2DRRZ57Q.js} +33 -24
- package/dist/chunk-2JBZYUPY.js +105 -0
- package/dist/chunk-2KUBKL63.js +336 -0
- package/dist/{chunk-K45LHSCI.js → chunk-2VBWFXYE.js} +7 -3
- package/dist/{chunk-XTLJDC2X.js → chunk-2X2R3UTH.js} +23 -18
- package/dist/{chunk-5HULHKT2.js → chunk-37LW32LZ.js} +5 -5
- package/dist/{chunk-W7KNI3F5.js → chunk-3AND2EFU.js} +5 -5
- package/dist/{chunk-36XSBPXL.js → chunk-3RDHGNU7.js} +95 -27
- package/dist/{chunk-BIY22UUK.js → chunk-3SUDBGEI.js} +11 -10
- package/dist/{chunk-3IQOZRQ6.js → chunk-3TQN67I2.js} +7 -7
- package/dist/{chunk-KWJXCL2X.js → chunk-3U4BL2EV.js} +3 -3
- package/dist/{chunk-RBES4TCZ.js → chunk-3UQADNG2.js} +3 -3
- package/dist/{chunk-V4ZKOKRB.js → chunk-434LRQ6Z.js} +61 -53
- package/dist/{chunk-MWMW53WW.js → chunk-4ATBOFRP.js} +649 -193
- package/dist/{chunk-QGIC5SX5.js → chunk-4DNL43EZ.js} +3 -3
- package/dist/{chunk-GVU4CXPJ.js → chunk-4HFJKRGZ.js} +113 -54
- package/dist/{chunk-5A6XR3RJ.js → chunk-555E2WVV.js} +16 -2
- package/dist/{chunk-LZDLYSUN.js → chunk-5RTEFNBP.js} +3 -3
- package/dist/{chunk-HMGAKB7E.js → chunk-64XJW7NT.js} +15 -15
- package/dist/{chunk-EXKUF426.js → chunk-7FBCRWVT.js} +280 -280
- package/dist/{chunk-K3W6BF5C.js → chunk-7JSOSVLP.js} +2 -2
- package/dist/{chunk-WFTSK7N3.js → chunk-7N3OLLSL.js} +4 -4
- package/dist/{chunk-JRA6OBHY.js → chunk-A6DULIMH.js} +17 -5
- package/dist/{chunk-R5NRX5N4.js → chunk-AB3QXXBC.js} +2 -2
- package/dist/chunk-ACCECAH4.js +49 -0
- package/dist/{chunk-GJBJHJNY.js → chunk-AM6CEP2K.js} +5 -5
- package/dist/{chunk-MUXNDNMZ.js → chunk-AY4XE6GN.js} +19 -13
- package/dist/{chunk-MATCRH3M.js → chunk-BBA2TAWV.js} +9 -9
- package/dist/{chunk-PMUUAABD.js → chunk-BMNVVKEW.js} +9 -9
- package/dist/{chunk-TOPICHGR.js → chunk-CTGZCEI6.js} +2 -2
- package/dist/{chunk-L75H5B3B.js → chunk-DIAJYJYG.js} +2 -2
- package/dist/{chunk-JIMWEYWO.js → chunk-EHZRAB4U.js} +2 -2
- package/dist/{chunk-YXANQGCX.js → chunk-EM2DIQAJ.js} +6 -6
- package/dist/{chunk-JCVIL6TY.js → chunk-ETF4ROKH.js} +4 -4
- package/dist/{chunk-5W4FRA5Q.js → chunk-F2YM3JY4.js} +483 -253
- package/dist/{chunk-YGIV24MF.js → chunk-FEBQWHJT.js} +21 -16
- package/dist/{chunk-PGEFOTJB.js → chunk-FPS4R2RN.js} +5 -4
- package/dist/{chunk-XC5POIL4.js → chunk-G5R53COU.js} +1 -1
- package/dist/chunk-GHXGMFQ5.js +40 -0
- package/dist/{chunk-QLKCCC2J.js → chunk-GJDRMBDI.js} +14 -14
- package/dist/{chunk-2ZWLMA3T.js → chunk-GREYLTZ5.js} +7 -7
- package/dist/{chunk-YXFKLMX2.js → chunk-H2WSCZZT.js} +22 -6
- package/dist/{chunk-FNVPQQYT.js → chunk-H6IUCY6Q.js} +2 -2
- package/dist/{chunk-5C2OQHLR.js → chunk-H72DCH3E.js} +92 -203
- package/dist/{chunk-JYKUMHCQ.js → chunk-H7TXJR23.js} +21 -21
- package/dist/chunk-HBJQQTKM.js +40 -0
- package/dist/chunk-HCVKSGNZ.js +990 -0
- package/dist/{chunk-ARRUMZ7X.js → chunk-I47EJPYL.js} +3 -3
- package/dist/{chunk-YKIIWURD.js → chunk-IALGWTLO.js} +3 -3
- package/dist/{chunk-FB3KTE2J.js → chunk-IALZJE37.js} +4 -4
- package/dist/{chunk-RAUOKUZV.js → chunk-IC7JXLOM.js} +15 -10
- package/dist/{chunk-LLCGGVSW.js → chunk-IOSVTTCD.js} +7 -7
- package/dist/{chunk-DBREN25X.js → chunk-IPTPMLA6.js} +8 -3
- package/dist/{chunk-V552WL53.js → chunk-IZZI3SKQ.js} +3 -67
- package/dist/{chunk-UDAK6GR2.js → chunk-JIYWMQZ5.js} +2 -2
- package/dist/{chunk-O3HSB2YL.js → chunk-JKU34ACI.js} +2 -2
- package/dist/{chunk-6X7VOCDY.js → chunk-JTR3VSV3.js} +3 -3
- package/dist/{chunk-O2QJDRWP.js → chunk-JU6MAMRJ.js} +4 -4
- package/dist/chunk-JURMQWVJ.js +15 -0
- package/dist/{chunk-STC6CWUZ.js → chunk-K3XN4LZ4.js} +5 -5
- package/dist/{chunk-ATB3Q7YO.js → chunk-KIVFXGBM.js} +27 -2
- package/dist/{chunk-WJWNZXRM.js → chunk-KOAHT3N2.js} +2 -2
- package/dist/chunk-KP5BPXR3.js +73 -0
- package/dist/{chunk-K53E2PTW.js → chunk-KRJQG47M.js} +3 -3
- package/dist/{chunk-IILXVWJY.js → chunk-KW6OJ7IY.js} +19 -21
- package/dist/{chunk-A46ILRS2.js → chunk-L3NBWLSN.js} +4 -4
- package/dist/{chunk-2U2U5POA.js → chunk-L4RUTLRL.js} +5 -5
- package/dist/{chunk-QYSAZMSH.js → chunk-LGTVWPRN.js} +2 -2
- package/dist/{chunk-KGP3UQGJ.js → chunk-LSQW6KZO.js} +5 -5
- package/dist/{chunk-P4JS3MH5.js → chunk-LWJYOHT3.js} +8 -8
- package/dist/{chunk-U3TPUXOQ.js → chunk-M6YLF66Z.js} +74 -40
- package/dist/{chunk-5D2FNBMG.js → chunk-MJ4QEJVT.js} +2 -2
- package/dist/{chunk-RM3XJX7P.js → chunk-MO65K5CH.js} +5 -5
- package/dist/{chunk-H5DPSUBB.js → chunk-MTOZEQHL.js} +3 -3
- package/dist/{chunk-6R5MBXBJ.js → chunk-NBPA5QM6.js} +2 -2
- package/dist/{chunk-H77XBUBM.js → chunk-NMBEW4PP.js} +3 -3
- package/dist/{chunk-QWUSS2QP.js → chunk-NPLLK3HO.js} +67 -87
- package/dist/{chunk-K5UJD6MM.js → chunk-NSYGPIVW.js} +5 -5
- package/dist/{context-EZZPT2ZV.js → chunk-NXTV5OI5.js} +30 -84
- package/dist/{chunk-F7Y6QTPL.js → chunk-NYDG4QP4.js} +4 -4
- package/dist/{chunk-PFZJMXIY.js → chunk-OA2GDACN.js} +2 -2
- package/dist/{chunk-Q32C6AWI.js → chunk-PJI57EC6.js} +4 -4
- package/dist/{chunk-EFXMQYI6.js → chunk-PJJBUGMR.js} +52 -52
- package/dist/{chunk-ICYIUNO4.js → chunk-PNJE7JPS.js} +18 -3
- package/dist/chunk-PP23PZEV.js +1347 -0
- package/dist/chunk-PPIFDSBK.js +409 -0
- package/dist/{chunk-RFULVPBX.js → chunk-PTFISXQO.js} +6 -5
- package/dist/{chunk-JV25I7ID.js → chunk-QB33Z5S7.js} +5 -5
- package/dist/{chunk-D55WO5J7.js → chunk-QGNII5VC.js} +8 -8
- package/dist/{chunk-RKFNU5UA.js → chunk-QI72X67S.js} +104 -27
- package/dist/chunk-QKHZZFKH.js +98 -0
- package/dist/{chunk-5UG6EZI3.js → chunk-RDKX2PME.js} +4 -4
- package/dist/{chunk-B5ZTR6KZ.js → chunk-RL7LJYN4.js} +1 -1
- package/dist/{chunk-BE4I3UJ2.js → chunk-RQROVOV3.js} +15 -13
- package/dist/{chunk-TEHVMHOK.js → chunk-S34A7BSP.js} +3 -3
- package/dist/{chunk-4P6M2TTE.js → chunk-SJETVJHX.js} +2 -2
- package/dist/{chunk-OPC4DQD6.js → chunk-SJMNU4ZS.js} +2 -2
- package/dist/{chunk-2JSCCEKO.js → chunk-SLLG2G44.js} +2 -2
- package/dist/{chunk-EPYATQMG.js → chunk-SQAZN2V3.js} +42 -16
- package/dist/{chunk-E2NSPYLC.js → chunk-SQBT46OF.js} +5 -5
- package/dist/{chunk-WTZVSMQZ.js → chunk-TCUOGIL2.js} +5 -5
- package/dist/{chunk-RRZFRIJP.js → chunk-TIWPKCVO.js} +5 -5
- package/dist/{chunk-QLAGXTTV.js → chunk-UIU7MGZ3.js} +5 -1
- package/dist/{chunk-WLHX3MM5.js → chunk-V4XJWDHR.js} +21 -11
- package/dist/{chunk-PJ5H5B7A.js → chunk-VPWGADBG.js} +18 -18
- package/dist/{chunk-GEYX2NZ5.js → chunk-VWFCAK34.js} +6 -6
- package/dist/{chunk-44U2OUSM.js → chunk-W72LLZAV.js} +2 -2
- package/dist/{chunk-ORRNGQDV.js → chunk-WGRDABW7.js} +4 -4
- package/dist/{chunk-RNLAPBJL.js → chunk-XFLSL7BT.js} +2 -2
- package/dist/{chunk-2SXGG2IV.js → chunk-XJZEDCNT.js} +6 -6
- package/dist/{chunk-UB33F3YW.js → chunk-XLLEL3K7.js} +5 -5
- package/dist/{chunk-2GPGAE5W.js → chunk-XNIZBOFV.js} +15 -1
- package/dist/{chunk-WS4FOGLY.js → chunk-XNZWWDC3.js} +2 -2
- package/dist/{chunk-P7GTE4FX.js → chunk-XRECG65F.js} +2 -2
- package/dist/chunk-XTQ7MEJG.js +457 -0
- package/dist/{chunk-GEVQNST4.js → chunk-XZWSP67B.js} +2 -2
- package/dist/{chunk-OEMFEL26.js → chunk-Y3M2T5RO.js} +3 -3
- package/dist/{chunk-HP7KJ5O2.js → chunk-YPQOPFP7.js} +6 -6
- package/dist/{chunk-MEHBW2SP.js → chunk-YQYINEJI.js} +6 -6
- package/dist/{chunk-RXI7K4J5.js → chunk-ZF6CV4WZ.js} +1338 -217
- package/dist/{chunk-3XE4NRLF.js → chunk-ZKJU55MX.js} +4 -2
- package/dist/{chunk-526ABLHD.js → chunk-ZKQ63XZ5.js} +12 -35
- package/dist/{chunk-PAQVETLA.js → chunk-ZKVMDNAN.js} +5 -5
- package/dist/cli/index.js +47 -37
- package/dist/{clio-BPBAPZGA.js → clio-JUDCLNHC.js} +7 -7
- package/dist/clio-context-tools-FT672MNZ.js +136 -0
- package/dist/{code-nav-KBQ3RIFK.js → code-nav-7OVCTP2Z.js} +28 -26
- package/dist/{components-6DKAXWFN.js → components-OZXZMDWU.js} +5 -5
- package/dist/{config-FWL5JK2H.js → config-P3ZQVF63.js} +80 -75
- package/dist/{config-graph-ACDB26L2.js → config-graph-GKAOBAS5.js} +74 -70
- package/dist/{configure-ZIZ4YV62.js → configure-25LRYZJG.js} +45 -44
- package/dist/context-72VQV7JX.js +73 -0
- package/dist/{context-VIL5MFRH.js → context-COWRWXP3.js} +74 -70
- package/dist/{context-Z3GOBHDK.js → context-WB3D474G.js} +12 -12
- package/dist/{context-clear-ZPB3L7MN.js → context-clear-Y4LYMWC6.js} +70 -66
- package/dist/{context-working-set-2GLBVF7L.js → context-working-set-TMZYVC7A.js} +15 -14
- package/dist/data-tool-KMBWKKWR.js +2987 -0
- package/dist/{detail-VSBWYSGZ.js → detail-4GLROGY5.js} +71 -67
- package/dist/{dispatch-runner-EEEHGKX4.js → dispatch-runner-TR3LBP5P.js} +92 -88
- package/dist/{docs-VMMWFVHL.js → docs-ZK777W2G.js} +3 -3
- package/dist/{doctor-V5L4IQGP.js → doctor-WC4OV2OB.js} +61 -59
- package/dist/{eval-VJYJ2BV3.js → eval-FUNWJNUJ.js} +45 -45
- package/dist/{evals-J2H5V6DD.js → evals-L73EBHSU.js} +4 -4
- package/dist/{evidence-Y35YSXH6.js → evidence-AVJ2RTHX.js} +80 -76
- package/dist/{evidence-POWAEBEW.js → evidence-P4NZOAK7.js} +70 -66
- package/dist/{evidence-XCCCLS36.js → evidence-Y55WKYHH.js} +79 -75
- package/dist/{evolve-GPG72VB6.js → evolve-MAWKRYWF.js} +75 -71
- package/dist/{extensions-YIZ7W3DA.js → extensions-PYQH3H47.js} +8 -8
- package/dist/{fleet-2MDCQ2VK.js → fleet-M4H2QBWT.js} +84 -80
- package/dist/{fleet-W2AF3TOJ.js → fleet-ULBXXRDR.js} +123 -119
- package/dist/{fleet-commands-WS56G26H.js → fleet-commands-7NNC4JZU.js} +17 -16
- package/dist/{fleet-decisions-MYGZ3JW7.js → fleet-decisions-EHEY7KPU.js} +9 -9
- package/dist/{fleet-graph-ELTBXBAV.js → fleet-graph-LQ2AHZT3.js} +15 -15
- package/dist/{fleet-inspect-45IK73L4.js → fleet-inspect-5IGBIIYZ.js} +76 -72
- package/dist/{fleet-preflight-T5NCZKHE.js → fleet-preflight-UTTNOKMG.js} +7 -2
- package/dist/{fleet-validate-VG4JBLA4.js → fleet-validate-YGILJKA6.js} +20 -20
- package/dist/{fleet-verify-VTSABAYO.js → fleet-verify-AUWTCDKR.js} +70 -66
- package/dist/{fleet-view-XC7WMKSS.js → fleet-view-TGUFCY5A.js} +73 -69
- package/dist/{init-VTJNNTIP.js → init-GFN2Z7NF.js} +94 -90
- package/dist/{interop-IU6BNA7C.js → interop-EF5JUWWK.js} +21 -21
- package/dist/{inventory-QPQUTUUZ.js → inventory-I6VJDDYF.js} +73 -69
- package/dist/{library-Q3NWL5CM.js → library-3J5IO2OJ.js} +13 -13
- package/dist/{library-LF7DLU6S.js → library-IJTOFTDS.js} +16 -15
- package/dist/{library-HUTAS57T.js → library-Z3KZSHPE.js} +27 -27
- package/dist/{library-import-PPW4YUC5.js → library-import-IMKFLDHX.js} +21 -21
- package/dist/{library-inventory-DIRVFRZU.js → library-inventory-CQP5D6GU.js} +13 -13
- package/dist/{library-validation-XHUZ3INE.js → library-validation-33UTX7AI.js} +11 -11
- package/dist/mcp-5FWZKUS6.js +26 -0
- package/dist/{memory-Z2LSKNV6.js → memory-36CWN67Y.js} +75 -71
- package/dist/{models-3FTREYPY.js → models-KQ6PQJJQ.js} +49 -49
- package/dist/{monitor-HF2MQRB3.js → monitor-XX6ZD6KC.js} +83 -79
- package/dist/{orchestrator-UYPA6W4S.js → orchestrator-SK6HDAOP.js} +1337 -772
- package/dist/{panes-736XB73K.js → panes-L27QRXUH.js} +12 -12
- package/dist/{panes-C4P3PIWT.js → panes-LXZIWNOZ.js} +4 -4
- package/dist/{paths-JQ4QYIYB.js → paths-7DJDU4P4.js} +5 -5
- package/dist/{preload-XSLRYH3Y.js → preload-K2TDYI4Y.js} +70 -66
- package/dist/{reset-V7QSPZYE.js → reset-73VU3XNT.js} +10 -10
- package/dist/{resources-OJGDFHYT.js → resources-3BYJYVYL.js} +16 -16
- package/dist/{run-T354SMDW.js → run-AR7PY6GW.js} +132 -128
- package/dist/run-script-H2KUDIII.js +41 -0
- package/dist/{settings-MWZXO6RV.js → settings-3VMBMWID.js} +4 -4
- package/dist/{share-Y5ZKJPND.js → share-HVWH4FPF.js} +21 -21
- package/dist/{skills-4GLZC4LN.js → skills-5TYEY75Q.js} +22 -22
- package/dist/{skills-eval-L5T7GODM.js → skills-eval-CK3MD63Z.js} +96 -87
- package/dist/{skills-inventory-LASKXEZI.js → skills-inventory-KSFYG3I6.js} +16 -16
- package/dist/{slash-commands-OIMRU36D.js → slash-commands-DMVHML7P.js} +47 -44
- package/dist/{steer-KMAM2Y2C.js → steer-XCD6V3EW.js} +4 -4
- package/dist/{support-AWC3XKPX.js → support-JAZL6VBR.js} +7 -7
- package/dist/{system-CD75NYBU.js → system-3TDQRMZZ.js} +26 -26
- package/dist/{targets-VSZX2J2S.js → targets-EZKHAYRN.js} +66 -65
- package/dist/{tasks-AN567LYH.js → tasks-SNEFHWYW.js} +12 -12
- package/dist/{terminal-lease-6KTWNHVY.js → terminal-lease-BNLFA4OF.js} +8 -7
- package/dist/{tools-AGRK3V5J.js → tools-7IM6BDCE.js} +12 -12
- package/dist/{trace-P4MQZD33.js → trace-C3MBGD4S.js} +8 -8
- package/dist/{tui-primitives-A6MUW32V.js → tui-primitives-36BY2774.js} +2 -2
- package/dist/{uninstall-BRUTEPIC.js → uninstall-WWLOSZ42.js} +10 -10
- package/dist/{upgrade-SBCGHQGJ.js → upgrade-ETK2JNSJ.js} +37 -47
- package/dist/{usage-BIDVTO6V.js → usage-S2HOB7BZ.js} +93 -89
- package/dist/{verifiers-LTGCAMXS.js → verifiers-QDTEVH7R.js} +24 -22
- package/dist/{verify-OZU4LLNP.js → verify-SUKUK6XM.js} +15 -14
- package/dist/web/client/assets/{abnfDiagram-VCTEODGH-C5wfoHm3.js → abnfDiagram-VCTEODGH-BznNOe_I.js} +1 -1
- package/dist/web/client/assets/{arc-oH91sfLl.js → arc-Pry-7G1_.js} +1 -1
- package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +1 -0
- package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +36 -0
- package/dist/web/client/assets/{blockDiagram-I7D4REHJ-wi0_CYHL.js → blockDiagram-I7D4REHJ-prINbpbM.js} +1 -1
- package/dist/web/client/assets/{c4Diagram-7LVT6UL2-DV7NYc2W.js → c4Diagram-7LVT6UL2-DkVRKtyU.js} +1 -1
- package/dist/web/client/assets/channel-c4EeUUqA.js +1 -0
- package/dist/web/client/assets/{chunk-4HAMMTFA-Bhsegh3F.js → chunk-4HAMMTFA-CV0Z1ApC.js} +1 -1
- package/dist/web/client/assets/{chunk-75Z2AOVW-RQCckcQG.js → chunk-75Z2AOVW-D34Nohxq.js} +1 -1
- package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +125 -0
- package/dist/web/client/assets/{chunk-F27PBJKO-BcNqv2x1.js → chunk-F27PBJKO-CmRojxkG.js} +1 -1
- package/dist/web/client/assets/{chunk-GMAD6QVW-Bq8JWiZT.js → chunk-GMAD6QVW-ClYZmc73.js} +1 -1
- package/dist/web/client/assets/{chunk-GVQU2GXP-DbchrAeJ.js → chunk-GVQU2GXP-B2BiHFt-.js} +1 -1
- package/dist/web/client/assets/{chunk-IMKFNOWR-DrpvjocK.js → chunk-IMKFNOWR-BGApZ8nP.js} +1 -1
- package/dist/web/client/assets/{chunk-L3NEJ4N5-DHLmTnCe.js → chunk-L3NEJ4N5-DIzCgpkY.js} +1 -1
- package/dist/web/client/assets/{chunk-OSK3NFVY-CsRbtN9n.js → chunk-OSK3NFVY-BPT-yePv.js} +1 -1
- package/dist/web/client/assets/{chunk-P2QGCYS3-aqPbxoMh.js → chunk-P2QGCYS3-BC1WTc2t.js} +1 -1
- package/dist/web/client/assets/{chunk-POPQ4Y6H-Dl5vw0h0.js → chunk-POPQ4Y6H-BSjzBmZU.js} +1 -1
- package/dist/web/client/assets/{chunk-PWAF6VOD-D7OBRSdO.js → chunk-PWAF6VOD-BIjLs86Z.js} +1 -1
- package/dist/web/client/assets/{chunk-SHT3W25Y-CdKCIwuB.js → chunk-SHT3W25Y-CduDz2cm.js} +1 -1
- package/dist/web/client/assets/{chunk-SVP7TREG-B94Nu_1-.js → chunk-SVP7TREG-XUn4pPAP.js} +1 -1
- package/dist/web/client/assets/{chunk-TICWLB2K-jjRQI_hk.js → chunk-TICWLB2K-DcBy2DKy.js} +1 -1
- package/dist/web/client/assets/{chunk-XXDRQBXY-azkbKE37.js → chunk-XXDRQBXY-DqAYeljN.js} +1 -1
- package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +1 -0
- package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +1 -0
- package/dist/web/client/assets/cose-bilkent-JH36ORCC-CVh1icwb.js +1 -0
- package/dist/web/client/assets/{cynefin-OW5HDTMX--i9RDU5f.js → cynefin-OW5HDTMX-BecPbyM6.js} +1 -1
- package/dist/web/client/assets/{cynefinDiagram-5FMLGOSQ-cRcvyBdp.js → cynefinDiagram-5FMLGOSQ-BzMzFwyT.js} +1 -1
- package/dist/web/client/assets/{dagre-GXQ25YYZ-C9mZmAPe.js → dagre-GXQ25YYZ-CAWJmRMG.js} +1 -1
- package/dist/web/client/assets/{diagram-S7CK7UJ4-Oj_zlLDY.js → diagram-S7CK7UJ4--lp0ALmn.js} +1 -1
- package/dist/web/client/assets/{diagram-UQ7AKVKN-BWKbbfcR.js → diagram-UQ7AKVKN-gKUnsjcj.js} +1 -1
- package/dist/web/client/assets/{diagram-VSXAHHWV-C3N3f7DO.js → diagram-VSXAHHWV-BoN5D1Gh.js} +1 -1
- package/dist/web/client/assets/{diagram-VX7I27RA-CtDKDAWe.js → diagram-VX7I27RA-BMtuswQ6.js} +1 -1
- package/dist/web/client/assets/{diagram-Z3DM3KII-B8bkBRCz.js → diagram-Z3DM3KII-DtU8LXrA.js} +1 -1
- package/dist/web/client/assets/dist-v5Q1xZ2K.js +1 -0
- package/dist/web/client/assets/{ebnfDiagram-PWID7BFC-CskW-Whx.js → ebnfDiagram-PWID7BFC-DDcnv9BH.js} +1 -1
- package/dist/web/client/assets/{erDiagram-RLTQ6QDP-C-83cgCW.js → erDiagram-RLTQ6QDP-DvRb4iDL.js} +1 -1
- package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +1 -0
- package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +1 -0
- package/dist/web/client/assets/framework-YGoR34M4.js +9 -0
- package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +292 -0
- package/dist/web/client/assets/{gitGraph-4MIJSDKK-B40cQtBE.js → gitGraph-4MIJSDKK-DjD_AAMj.js} +1 -1
- package/dist/web/client/assets/{gitGraphDiagram-WWUBYQGX-CH-7P7Di.js → gitGraphDiagram-WWUBYQGX-CDyN9n2u.js} +1 -1
- package/dist/web/client/assets/index-CVcy0FAn.js +75 -0
- package/dist/web/client/assets/{info-A6RAGUB7-eCCE9D_Q.js → info-A6RAGUB7-C_XK8Hq0.js} +1 -1
- package/dist/web/client/assets/{infoDiagram-27XIBGKW-DRnvqMjM.js → infoDiagram-27XIBGKW-DIe4tJ1i.js} +1 -1
- package/dist/web/client/assets/{ishikawaDiagram-5VMMS53U-DBA_55wp.js → ishikawaDiagram-5VMMS53U-CVl5unKI.js} +1 -1
- package/dist/web/client/assets/{journeyDiagram-3NMN7TZE-C-ewpNl7.js → journeyDiagram-3NMN7TZE-CPEB1Vt8.js} +1 -1
- package/dist/web/client/assets/{kanban-definition-UXKFOSKX-B1taGsu0.js → kanban-definition-UXKFOSKX-j-9WXjYQ.js} +1 -1
- package/dist/web/client/assets/{line-lZ0kyxDI.js → line-BIDAcEtX.js} +1 -1
- package/dist/web/client/assets/{linear-DIc8FgZj.js → linear-SzVmGSw4.js} +1 -1
- package/dist/web/client/assets/{mermaid-parser.core-SXolxpXw.js → mermaid-parser.core-Ux4vssh0.js} +3 -3
- package/dist/web/client/assets/{mermaid.core-DXgQtkNg.js → mermaid.core-CDuwVKeh.js} +4 -4
- package/dist/web/client/assets/{mindmap-definition-YA3MSWOX-DXJas9K7.js → mindmap-definition-YA3MSWOX-5MlQEeQ6.js} +1 -1
- package/dist/web/client/assets/{packet-AYTQ26CC-OqVl_07o.js → packet-AYTQ26CC-DRO66c9Q.js} +1 -1
- package/dist/web/client/assets/{pegDiagram-XKGWAZYB-CPE_zdfN.js → pegDiagram-XKGWAZYB-BakZnSjM.js} +1 -1
- package/dist/web/client/assets/{pie-WAS4IAKB-DAxnMBLe.js → pie-WAS4IAKB-BEzcmhz8.js} +1 -1
- package/dist/web/client/assets/{pieDiagram-E7YTZNPT-Uwjpufxv.js → pieDiagram-E7YTZNPT-DpmqgoPt.js} +1 -1
- package/dist/web/client/assets/prism-core-BtsZdCS6.js +1 -0
- package/dist/web/client/assets/{quadrantDiagram-AXDQQJYC-Bjs4yjgs.js → quadrantDiagram-AXDQQJYC-DuMPwwV2.js} +1 -1
- package/dist/web/client/assets/{radar-RG4KPBEZ-CuCKjHM3.js → radar-RG4KPBEZ-Djm3oXl5.js} +1 -1
- package/dist/web/client/assets/{railroad-74A4TZTK-CnQK-Cc1.js → railroad-74A4TZTK-Cpvkwsao.js} +1 -1
- package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +1 -0
- package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +1 -0
- package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +1 -0
- package/dist/web/client/assets/{railroadDiagram-O6MQD6OU-BDDIPNLL.js → railroadDiagram-O6MQD6OU-CgMS4B6R.js} +1 -1
- package/dist/web/client/assets/{requirementDiagram-BXWQKSXE-B5Ydyxc1.js → requirementDiagram-BXWQKSXE-CX5eoNdN.js} +1 -1
- package/dist/web/client/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/dist/web/client/assets/{sankeyDiagram-P5KCCOFB-Bw2Qym75.js → sankeyDiagram-P5KCCOFB-CODBX2N3.js} +1 -1
- package/dist/web/client/assets/{sequenceDiagram-WJ2MYXX4-BZf36nO0.js → sequenceDiagram-WJ2MYXX4-eUhhF8OR.js} +1 -1
- package/dist/web/client/assets/src-B6xuSHsQ.js +1 -0
- package/dist/web/client/assets/{stateDiagram-D77RDMKH-DnH6JRkp.js → stateDiagram-D77RDMKH-vR6l0NC2.js} +1 -1
- package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +1 -0
- package/dist/web/client/assets/{swimlanes-42K2YHIH-D9PZmtZg.js → swimlanes-42K2YHIH-v9Tw_zX7.js} +1 -1
- package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +8 -0
- package/dist/web/client/assets/{timeline-definition-24CTP7MA-CrkZZBo7.js → timeline-definition-24CTP7MA-DxianbhU.js} +1 -1
- package/dist/web/client/assets/{treeView-Q6P3EWNA-C9zDShoC.js → treeView-Q6P3EWNA-DLxnZb9R.js} +1 -1
- package/dist/web/client/assets/{treemap-WGGIJYW6-B-plj9yK.js → treemap-WGGIJYW6-I7UnZ6xJ.js} +1 -1
- package/dist/web/client/assets/{vennDiagram-4TSXK5OY-VeOdaphN.js → vennDiagram-4TSXK5OY-Ar7M8Mrj.js} +1 -1
- package/dist/web/client/assets/{wardley-WFR3VGLG-Wl1P_m6L.js → wardley-WFR3VGLG-B8ZSHeDu.js} +1 -1
- package/dist/web/client/assets/{wardleyDiagram-VM6X3IG4-B85-R9t2.js → wardleyDiagram-VM6X3IG4-Qks2FmIn.js} +1 -1
- package/dist/web/client/assets/{xychartDiagram-S5SC5T6Z-BrD8OW8m.js → xychartDiagram-S5SC5T6Z-BBBjRtiE.js} +1 -1
- package/dist/web/client/index.html +3 -1
- package/dist/web/reads-worker.js +17 -17
- package/dist/web/server.js +25 -25
- package/dist/{web-EU6ATJWA.js → web-EMGUGGEI.js} +3 -3
- package/dist/{web-fetch-U22Q7HV4.js → web-fetch-6BRRVQON.js} +22 -5
- package/dist/{wiki-generate-LZRLFG6I.js → wiki-generate-XHSJTDOP.js} +104 -100
- package/dist/{with-panes-X5CZOGML.js → with-panes-Z6BTEHMZ.js} +11 -11
- package/dist/worker/entry.js +101 -87
- package/docs/README.md +1 -1
- package/docs/architecture/artifact-placement.md +12 -1
- package/docs/architecture/library.md +1 -1
- package/docs/architecture/prompt-envelope-and-tools.md +37 -27
- package/docs/architecture/safety-model.md +19 -6
- package/docs/architecture/session-lifecycle.md +10 -4
- package/docs/architecture/tui-design.md +37 -14
- package/docs/guide/commands-and-modes.md +39 -19
- package/docs/guide/configuration-and-targets.md +7 -5
- package/docs/guide/configuration-reference.md +116 -13
- package/docs/guide/environment-variables.md +2 -5
- package/docs/guide/fleet-dispatch.md +3 -2
- package/docs/guide/glossary.md +1 -1
- package/docs/guide/installation-and-lifecycle.md +2 -2
- package/docs/guide/resource-library.md +1 -1
- package/docs/guide/tool-usage.md +166 -64
- package/docs/guide/troubleshooting.md +1 -1
- package/docs/process/documentation-guide.md +1 -0
- package/docs/process/fleet-demo-runbook.md +6 -6
- package/docs/process/scientific-validation.md +22 -2
- package/docs/process/tool-audit-v0.4.9.md +357 -0
- package/package.json +1 -1
- package/src/cli/argv.ts +31 -0
- package/src/cli/clio.ts +17 -13
- package/src/cli/config.ts +4 -0
- package/src/cli/doctor-panes.ts +1 -1
- package/src/cli/doctor.ts +3 -1
- package/src/cli/index.ts +14 -1
- package/src/cli/mcp.ts +106 -0
- package/src/cli/skills-eval.ts +8 -2
- package/src/cli/upgrade.ts +34 -38
- package/src/cli/verifiers.ts +1 -1
- package/src/core/bash-exec.ts +27 -4
- package/src/core/config.ts +2 -1
- package/src/core/defaults.ts +10 -1
- package/src/core/event-bus.ts +1 -1
- package/src/core/run-records.ts +438 -0
- package/src/core/safe-exec.ts +506 -56
- package/src/core/skill-activation.ts +5 -3
- package/src/core/termination.ts +3 -3
- package/src/core/tool-names.ts +33 -12
- package/src/domains/context/clio-md.ts +1 -1
- package/src/domains/context/worker/pressure.ts +6 -2
- package/src/domains/context/working-set/path-index.ts +7 -2
- package/src/domains/dispatch/code-step.ts +7 -2
- package/src/domains/dispatch/contract.ts +7 -0
- package/src/domains/dispatch/execution-role.ts +3 -3
- package/src/domains/dispatch/execution-scheduler.ts +204 -79
- package/src/domains/dispatch/extension.ts +131 -14
- package/src/domains/dispatch/fleet-preflight.ts +18 -3
- package/src/domains/dispatch/fleet-run.ts +1 -0
- package/src/domains/dispatch/gate-decisions.ts +3 -3
- package/src/domains/dispatch/heartbeat.ts +1 -1
- package/src/domains/dispatch/host-verification.ts +16 -14
- package/src/domains/dispatch/receipt-findings.ts +3 -4
- package/src/domains/dispatch/reservation-store.ts +7 -9
- package/src/domains/dispatch/route-facts.ts +1 -1
- package/src/domains/dispatch/state.ts +3 -3
- package/src/domains/dispatch/types.ts +1 -1
- package/src/domains/evidence/build.ts +35 -7
- package/src/domains/gateway/mcp/client.ts +923 -0
- package/src/domains/gateway/mcp/config.ts +456 -0
- package/src/domains/gateway/mcp/index.ts +88 -0
- package/src/domains/gateway/mcp/protocol.ts +273 -0
- package/src/domains/gateway/mcp/trust.ts +263 -0
- package/src/domains/lifecycle/doctor.ts +17 -3
- package/src/domains/mux/contract.ts +5 -9
- package/src/domains/mux/detect.ts +1 -1
- package/src/domains/mux/extension.ts +1 -1
- package/src/domains/mux/protocol.ts +5 -7
- package/src/domains/mux/socket-client.ts +3 -3
- package/src/domains/observability/accountability.ts +2 -2
- package/src/domains/observability/contract.ts +7 -3
- package/src/domains/observability/evidence-index.ts +2 -2
- package/src/domains/observability/projection.ts +10 -0
- package/src/domains/prompts/compiler.ts +41 -23
- package/src/domains/prompts/fragments/identity/docs-routing.md +2 -2
- package/src/domains/prompts/fragments/operating/skills.md +12 -10
- package/src/domains/providers/index.ts +5 -1
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +42 -10
- package/src/domains/providers/probe/http.ts +44 -59
- package/src/domains/providers/probe/reasoning.ts +2 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +20 -31
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +9 -4
- package/src/domains/safety/action-classifier.ts +17 -1
- package/src/domains/safety/call-target.ts +14 -0
- package/src/domains/safety/contract.ts +1 -1
- package/src/domains/safety/finish-contract.ts +9 -3
- package/src/domains/safety/loop-detector.ts +1 -1
- package/src/domains/safety/policy-engine.ts +7 -0
- package/src/domains/safety/protected-artifacts.ts +3 -4
- package/src/domains/safety/rejection-feedback.ts +1 -1
- package/src/domains/safety/scope.ts +2 -3
- package/src/domains/safety/validation-contract.ts +3 -2
- package/src/domains/scheduling/budget.ts +5 -3
- package/src/domains/scheduling/contract.ts +2 -1
- package/src/domains/scheduling/extension.ts +3 -3
- package/src/domains/session/compaction/branch-summary.ts +1 -1
- package/src/domains/session/compaction/compact.ts +25 -2
- package/src/domains/session/compaction/cut-point.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +5 -10
- package/src/domains/session/contract.ts +1 -1
- package/src/domains/session/cwd-fallback.ts +2 -2
- package/src/domains/session/handoff.ts +5 -1
- package/src/domains/session/history.ts +6 -0
- package/src/domains/session/manager.ts +14 -7
- package/src/domains/session/retry.ts +2 -1
- package/src/domains/session/session-artifacts.ts +12 -7
- package/src/domains/session/task-board.ts +2 -3
- package/src/engine/apis/openai-completions.ts +8 -0
- package/src/engine/loop-guard.ts +7 -0
- package/src/engine/provider-error-body.ts +65 -0
- package/src/engine/session.ts +118 -29
- package/src/engine/worker-runtime.ts +3 -0
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +18 -2
- package/src/interactive/chat-loop-policy.ts +1 -0
- package/src/interactive/chat-loop.ts +8 -4
- package/src/interactive/chat-panel.ts +23 -9
- package/src/interactive/chat-renderer.ts +33 -11
- package/src/interactive/clio-editor.ts +13 -5
- package/src/interactive/dispatch-board.ts +70 -30
- package/src/interactive/editor-submit.ts +30 -25
- package/src/interactive/footer/widgets.ts +12 -9
- package/src/interactive/interactive-presentation.ts +2 -3
- package/src/interactive/mux-bridge.ts +3 -7
- package/src/interactive/overlay-general-openers.ts +14 -7
- package/src/interactive/overlays/cwd-fallback.ts +1 -1
- package/src/interactive/overlays/library-model.ts +114 -35
- package/src/interactive/overlays/library.ts +52 -5
- package/src/interactive/overlays/list-overlay.ts +4 -1
- package/src/interactive/overlays/session-selector.ts +28 -23
- package/src/interactive/overlays/settings.ts +20 -1
- package/src/interactive/overlays/tree-selector.ts +47 -10
- package/src/interactive/panes-runtime.ts +1 -1
- package/src/interactive/renderers/compaction-summary.ts +1 -1
- package/src/interactive/renderers/provider-error.ts +118 -0
- package/src/interactive/renderers/retry-status.ts +59 -23
- package/src/interactive/renderers/tool-execution.ts +67 -7
- package/src/interactive/renderers/worker-answer.ts +198 -0
- package/src/interactive/renderers/worker-entry.ts +57 -163
- package/src/interactive/slash-commands.ts +26 -1
- package/src/interactive/slash-spec.ts +2 -2
- package/src/interactive/theme/labels.ts +66 -30
- package/src/interactive/turn-persistence.ts +6 -1
- package/src/interactive/turn-recovery.ts +2 -1
- package/src/interactive/turn-runtime.ts +22 -5
- package/src/interactive/view/artifacts.ts +3 -2
- package/src/interactive/view/view-overlay.ts +96 -20
- package/src/tools/agent-tools.ts +21 -7
- package/src/tools/artifact.ts +16 -8
- package/src/tools/bash.ts +90 -11
- package/src/tools/bootstrap.ts +42 -4
- package/src/tools/builtin-tool-catalog.ts +72 -7
- package/src/tools/context/index.ts +27 -31
- package/src/tools/context/library.ts +3 -1
- package/src/tools/context/surface.ts +12 -26
- package/src/tools/core-bootstrap.ts +72 -1
- package/src/tools/data/csv.ts +1189 -0
- package/src/tools/data/index.ts +308 -0
- package/src/tools/data/json.ts +1799 -0
- package/src/tools/data/jsonl.ts +561 -0
- package/src/tools/data/shared.ts +452 -0
- package/src/tools/edit-diff.ts +0 -7
- package/src/tools/edit.ts +115 -18
- package/src/tools/file-mutation-queue.ts +114 -4
- package/src/tools/find.ts +108 -29
- package/src/tools/gateway/caps.ts +11 -0
- package/src/tools/gateway/clio-context-surface.ts +41 -0
- package/src/tools/gateway/clio-context-tools.ts +77 -0
- package/src/tools/gateway/data-surface.ts +138 -0
- package/src/tools/gateway/data-tool.ts +201 -0
- package/src/tools/gateway/index.ts +342 -0
- package/src/tools/gateway/mcp-capabilities.ts +469 -0
- package/src/tools/grep.ts +88 -33
- package/src/tools/harness-extensions.ts +3 -0
- package/src/tools/ignore-policy.ts +7 -5
- package/src/tools/ls.ts +111 -20
- package/src/tools/policy.ts +35 -13
- package/src/tools/presentation.ts +6 -0
- package/src/tools/read.ts +634 -156
- package/src/tools/registry.ts +94 -6
- package/src/tools/run-script.ts +997 -0
- package/src/tools/spawn-hygiene.ts +157 -5
- package/src/tools/surface.ts +163 -0
- package/src/tools/verify/authoring.ts +8 -3
- package/src/tools/verify/catalog.ts +14 -1
- package/src/tools/verify/numeric.ts +367 -59
- package/src/tools/verify/perf.ts +171 -9
- package/src/tools/verify/scripts.ts +178 -26
- package/src/tools/web-fetch-surface.ts +22 -0
- package/src/tools/web-fetch.ts +26 -1
- package/src/tools/write.ts +45 -19
- package/dist/chunk-B6UM3OZC.js +0 -15
- package/dist/chunk-GJ24ODAX.js +0 -196
- package/dist/chunk-LZCCBLRC.js +0 -57
- package/dist/web/client/assets/architecture-7GRP2DOG-EGozsYEO.js +0 -1
- package/dist/web/client/assets/architectureDiagram-5GKGNRK7-z9FokbJl.js +0 -36
- package/dist/web/client/assets/channel-CiUWbHN9.js +0 -1
- package/dist/web/client/assets/chunk-DU6HZSFF-C5USiOAy.js +0 -125
- package/dist/web/client/assets/classDiagram-ZZMXUADV-CMODalmo.js +0 -1
- package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-CMODalmo.js +0 -1
- package/dist/web/client/assets/cose-bilkent-JH36ORCC-RbQL23qS.js +0 -1
- package/dist/web/client/assets/dist-D0_q-A2b.js +0 -1
- package/dist/web/client/assets/eventmodeling-NTZA5JFV-DjVq8wKU.js +0 -1
- package/dist/web/client/assets/flowDiagram-HODETNUW-BUiCBGXt.js +0 -1
- package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-B2lb8lvF.js +0 -292
- package/dist/web/client/assets/index-FSIC94pi.js +0 -83
- package/dist/web/client/assets/prism-core-BngLtbUd.js +0 -1
- package/dist/web/client/assets/railroad-abnf-HS5TGJTU-BcW01NZG.js +0 -1
- package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-B7YCEDDd.js +0 -1
- package/dist/web/client/assets/railroad-peg-WCYAUIDC-DjNZbSTZ.js +0 -1
- package/dist/web/client/assets/src-yeptRXpt.js +0 -1
- package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-C7QtHeK4.js +0 -1
- package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-CBZlPFky.js +0 -8
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
1
2
|
import type { SessionContract } from "../../domains/session/contract.js";
|
|
2
3
|
import type { TreeSnapshot, TreeSnapshotNode } from "../../domains/session/tree/navigator.js";
|
|
3
4
|
import {
|
|
@@ -21,17 +22,19 @@ const VISIBLE_ROWS = 16;
|
|
|
21
22
|
* /tree navigator overlay. Behaviors:
|
|
22
23
|
* - One row per node, indented two spaces per branch level (not per message)
|
|
23
24
|
* - Shift+T toggles operator-local timestamps on/off
|
|
25
|
+
* - `p` filters to nodes whose session cwd matches the current cwd
|
|
26
|
+
* - `s` cycles between tree order and most recent first
|
|
24
27
|
* - `e` enters label edit submode (Enter commits, Esc cancels)
|
|
25
28
|
* - Enter on a row switches the active append point to that turn id
|
|
26
29
|
* - Esc closes the overlay
|
|
27
30
|
*
|
|
28
|
-
* Cwd-toggle (`p`) and sort-order (`s`) are not implemented.
|
|
29
|
-
*
|
|
30
31
|
* The overlay queries `session.tree()` on open and after any mutation so
|
|
31
32
|
* label edits are reflected without a close/reopen cycle.
|
|
32
33
|
*/
|
|
33
34
|
export interface OpenTreeOverlayDeps {
|
|
34
|
-
session: SessionContract
|
|
35
|
+
session: Pick<SessionContract, "tree" | "editLabel">;
|
|
36
|
+
/** The current workspace directory. Defaults to the process cwd. */
|
|
37
|
+
cwd?: string;
|
|
35
38
|
onSwitchTurn: (turnId: string) => void;
|
|
36
39
|
onClose: () => void;
|
|
37
40
|
}
|
|
@@ -204,6 +207,8 @@ export class TreeOverlayView implements Component {
|
|
|
204
207
|
private highlight = 0;
|
|
205
208
|
private scrollTop = 0;
|
|
206
209
|
private showTimestamps = false;
|
|
210
|
+
private currentCwdOnly = false;
|
|
211
|
+
private sortOrder: "tree" | "recent" = "tree";
|
|
207
212
|
private submode: Submode = "browse";
|
|
208
213
|
private labelBuffer = "";
|
|
209
214
|
private readonly labelInput = new Input();
|
|
@@ -221,7 +226,8 @@ export class TreeOverlayView implements Component {
|
|
|
221
226
|
initial: TreeSnapshot | null,
|
|
222
227
|
) {
|
|
223
228
|
this.snapshot = initial;
|
|
224
|
-
this.rows =
|
|
229
|
+
this.rows = [];
|
|
230
|
+
this.rebuildRows();
|
|
225
231
|
}
|
|
226
232
|
|
|
227
233
|
private invalidateLayout(): void {
|
|
@@ -242,15 +248,27 @@ export class TreeOverlayView implements Component {
|
|
|
242
248
|
return this.rows[this.highlight] ?? null;
|
|
243
249
|
}
|
|
244
250
|
|
|
251
|
+
private rebuildRows(): void {
|
|
252
|
+
const selectedId = this.currentRow()?.node.id;
|
|
253
|
+
const snapshot = this.snapshot;
|
|
254
|
+
const matchesCwd = snapshot?.meta.cwd && resolve(snapshot.meta.cwd) === resolve(this.deps.cwd ?? process.cwd());
|
|
255
|
+
this.rows = snapshot && (!this.currentCwdOnly || matchesCwd) ? flattenTreeSnapshot(snapshot) : [];
|
|
256
|
+
if (this.sortOrder === "recent") {
|
|
257
|
+
this.rows.sort((a, b) => Date.parse(b.node.at) - Date.parse(a.node.at));
|
|
258
|
+
this.rows = this.rows.map((row) => ({ ...row, depth: 0 }));
|
|
259
|
+
}
|
|
260
|
+
const selectedIndex = this.rows.findIndex((row) => row.node.id === selectedId);
|
|
261
|
+
this.highlight = selectedIndex < 0 ? 0 : selectedIndex;
|
|
262
|
+
this.invalidateLayout();
|
|
263
|
+
}
|
|
264
|
+
|
|
245
265
|
private refresh(): void {
|
|
246
266
|
try {
|
|
247
267
|
this.snapshot = this.deps.session.tree();
|
|
248
|
-
this.rows = flattenTreeSnapshot(this.snapshot);
|
|
249
268
|
} catch {
|
|
250
269
|
this.snapshot = null;
|
|
251
|
-
this.rows = [];
|
|
252
270
|
}
|
|
253
|
-
this.
|
|
271
|
+
this.rebuildRows();
|
|
254
272
|
}
|
|
255
273
|
|
|
256
274
|
render(width: number): string[] {
|
|
@@ -262,7 +280,14 @@ export class TreeOverlayView implements Component {
|
|
|
262
280
|
if (this.rows.length === 0) {
|
|
263
281
|
// The overlay navigates the CURRENT session's turn tree; an empty
|
|
264
282
|
// tree means no turns yet, not a missing session list.
|
|
265
|
-
lines.push(
|
|
283
|
+
lines.push(
|
|
284
|
+
theme.fg(
|
|
285
|
+
"muted",
|
|
286
|
+
this.currentCwdOnly && this.snapshot && Object.keys(this.snapshot.nodesById).length > 0
|
|
287
|
+
? "(no turns match the current cwd; press p to show all)"
|
|
288
|
+
: "(no turns in this session yet)",
|
|
289
|
+
),
|
|
290
|
+
);
|
|
266
291
|
} else {
|
|
267
292
|
const end = Math.min(this.rows.length, this.scrollTop + VISIBLE_ROWS);
|
|
268
293
|
for (let i = this.scrollTop; i < end; i++) {
|
|
@@ -303,6 +328,8 @@ export class TreeOverlayView implements Component {
|
|
|
303
328
|
{ key: "↑↓", verb: "move" },
|
|
304
329
|
{ key: "Enter", verb: "switch" },
|
|
305
330
|
{ key: "e", verb: "label" },
|
|
331
|
+
{ key: "p", verb: `cwd:${this.currentCwdOnly ? "current" : "all"}` },
|
|
332
|
+
{ key: "s", verb: this.sortOrder },
|
|
306
333
|
{ key: "Shift+T", verb: `ts:${tsLabel}` },
|
|
307
334
|
]);
|
|
308
335
|
}
|
|
@@ -328,7 +355,17 @@ export class TreeOverlayView implements Component {
|
|
|
328
355
|
this.deps.onClose();
|
|
329
356
|
return;
|
|
330
357
|
}
|
|
331
|
-
|
|
358
|
+
if (data === "p") {
|
|
359
|
+
this.currentCwdOnly = !this.currentCwdOnly;
|
|
360
|
+
this.rebuildRows();
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
if (data === "s") {
|
|
364
|
+
this.sortOrder = this.sortOrder === "tree" ? "recent" : "tree";
|
|
365
|
+
this.rebuildRows();
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
// Filtering and sorting remain available when the visible list is empty.
|
|
332
369
|
if (this.rows.length === 0) return;
|
|
333
370
|
// Arrows: CSI A/B for up/down.
|
|
334
371
|
if (matchesKey(data, "up")) {
|
|
@@ -406,7 +443,7 @@ export class TreeOverlayView implements Component {
|
|
|
406
443
|
}
|
|
407
444
|
}
|
|
408
445
|
|
|
409
|
-
function loadInitialSnapshot(session:
|
|
446
|
+
function loadInitialSnapshot(session: OpenTreeOverlayDeps["session"]): TreeSnapshot | null {
|
|
410
447
|
try {
|
|
411
448
|
return session.tree();
|
|
412
449
|
} catch {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* ladder *before* the pane is split: `openUtilityPane` delivers its command by
|
|
7
7
|
* sending `exec <argv>` into the pane's shell, so a binary that is not there
|
|
8
8
|
* kills the pane the instant it appears, and the operator sees a flicker
|
|
9
|
-
* instead of an install hint
|
|
9
|
+
* instead of an install hint. Every
|
|
10
10
|
* mutation is scoped to panes Clio created, because the contract's registry
|
|
11
11
|
* refuses anything else.
|
|
12
12
|
*
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { stripVTControlCharacters } from "node:util";
|
|
2
|
+
import { redactSecretsText } from "../../domains/evidence/redact.js";
|
|
3
|
+
import { redactSecretString } from "../../domains/safety/redaction.js";
|
|
4
|
+
|
|
5
|
+
const SCAN_LIMIT = 8_192;
|
|
6
|
+
const DISPLAY_LIMIT = 600;
|
|
7
|
+
const ROUTE_ADVICE_TAIL = 1_024;
|
|
8
|
+
|
|
9
|
+
/** Discard incomplete control sequences at the scan boundary, including their payload. */
|
|
10
|
+
function terminalSafePrefix(value: string, limit: number): string {
|
|
11
|
+
const end = Math.min(value.length, limit);
|
|
12
|
+
const parts: string[] = [];
|
|
13
|
+
let start = 0;
|
|
14
|
+
let i = 0;
|
|
15
|
+
while (i < end) {
|
|
16
|
+
const code = value.charCodeAt(i);
|
|
17
|
+
if (code !== 27 && !(code >= 0x80 && code <= 0x9f)) {
|
|
18
|
+
i++;
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
parts.push(value.slice(start, i));
|
|
22
|
+
const introducer = code === 27 ? value.charCodeAt(++i) : code;
|
|
23
|
+
i++;
|
|
24
|
+
if (introducer === 91 || introducer === 0x9b) {
|
|
25
|
+
while (i < end) {
|
|
26
|
+
const next = value.charCodeAt(i++);
|
|
27
|
+
if (next >= 0x40 && next <= 0x7e) break;
|
|
28
|
+
}
|
|
29
|
+
} else if ([93, 80, 88, 94, 95, 0x9d, 0x90, 0x98, 0x9e, 0x9f].includes(introducer)) {
|
|
30
|
+
while (i < end) {
|
|
31
|
+
const next = value.charCodeAt(i++);
|
|
32
|
+
if (next === 7 || next === 0x9c) break;
|
|
33
|
+
if (next === 27 && i < end && value.charCodeAt(i) === 92) {
|
|
34
|
+
i++;
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
start = i;
|
|
40
|
+
}
|
|
41
|
+
parts.push(value.slice(start, end));
|
|
42
|
+
return stripVTControlCharacters(parts.join(""));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Available evidence is sanitized and redacted only when explicitly inspected. */
|
|
46
|
+
export function providerErrorEvidence(value: string, scanLimit = value.length): string {
|
|
47
|
+
return redactSecretsText(
|
|
48
|
+
redactSecretString(terminalSafePrefix(value, scanLimit)).replace(
|
|
49
|
+
/(\b(?:authorization["']?\s*[:=]\s*["']?\s*)?(?:Bearer|Basic)\s+)[^\s"'<>]+/gi,
|
|
50
|
+
"$1[redacted]",
|
|
51
|
+
),
|
|
52
|
+
{ count: 0 },
|
|
53
|
+
).replace(/[\p{Cc}\p{Cf}]/gu, (char) => (char === "\n" || char === "\t" ? char : " "));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** A bounded projection; never use this to replace a persisted diagnostic. */
|
|
57
|
+
export function presentProviderError(value: string): string {
|
|
58
|
+
const available = providerErrorEvidence(value, SCAN_LIMIT);
|
|
59
|
+
// Preserve the actual Clio wrapper suffix; never infer a retry policy from
|
|
60
|
+
// provider error codes. A restored body can push this advice past the scan
|
|
61
|
+
// window, so a long diagnostic is matched on its bounded tail instead.
|
|
62
|
+
const beyondScan = value.length > SCAN_LIMIT;
|
|
63
|
+
const routeParts = (beyondScan ? providerErrorEvidence(value.slice(-ROUTE_ADVICE_TAIL)) : available).match(
|
|
64
|
+
/\n\n((LiteLLM route [^\n]+ failed\.) (Clio did not retry or substitute another model); (select a different route with \/model, then resend\.))$/,
|
|
65
|
+
);
|
|
66
|
+
const routeAdvice = routeParts?.[1];
|
|
67
|
+
const sample =
|
|
68
|
+
routeAdvice && !beyondScan ? available.slice(0, available.length - routeAdvice.length).trimEnd() : available;
|
|
69
|
+
let summary = sample;
|
|
70
|
+
const jsonStart = sample.indexOf("{");
|
|
71
|
+
const html = /<!doctype\s+html|<html\b/i.test(sample);
|
|
72
|
+
if (html) {
|
|
73
|
+
const title = sample.match(/<title[^>]*>([^<]*)<\/title>/i)?.[1];
|
|
74
|
+
const prefix = sample.slice(0, sample.indexOf("<")).trim();
|
|
75
|
+
summary = [
|
|
76
|
+
prefix,
|
|
77
|
+
title,
|
|
78
|
+
routeAdvice ? "" : "Provider returned an HTML error page. Check the provider or gateway endpoint.",
|
|
79
|
+
]
|
|
80
|
+
.filter(Boolean)
|
|
81
|
+
.join("; ");
|
|
82
|
+
} else if (jsonStart >= 0) {
|
|
83
|
+
// Decode only quoted diagnostic strings, never parse and round numeric
|
|
84
|
+
// source facts. The scan and every allocation are bounded by SCAN_LIMIT.
|
|
85
|
+
const fields = [...sample.matchAll(/"(?:message|detail|type|code)"\s*:\s*"((?:[^"\\]|\\.)*)/g)].map((match) => {
|
|
86
|
+
const quoted = match[1];
|
|
87
|
+
if (quoted === undefined) return "";
|
|
88
|
+
try {
|
|
89
|
+
// A bounded prefix of an unfinished quoted field is still useful
|
|
90
|
+
// prose. The matcher excludes a dangling escape at the boundary.
|
|
91
|
+
const decoded: unknown = JSON.parse(`"${quoted}"`);
|
|
92
|
+
return typeof decoded === "string" ? providerErrorEvidence(decoded) : "";
|
|
93
|
+
} catch {
|
|
94
|
+
return "";
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
if (fields.some(Boolean))
|
|
98
|
+
summary = [sample.slice(0, jsonStart).trim(), ...new Set(fields)].filter(Boolean).join("; ");
|
|
99
|
+
}
|
|
100
|
+
const status =
|
|
101
|
+
sample.match(/\b(?:HTTP(?:\/\d(?:\.\d)?)?\s*|status(?:_code)?["']?\s*[:=]\s*)([45]\d\d)\b/i)?.[1] ??
|
|
102
|
+
sample.match(/"(?:status|status_?code)"\s*:\s*([45]\d{2})(?=\s*[,}])/i)?.[1] ??
|
|
103
|
+
sample.match(/"error"\s*:\s*\{[^{}]*?"code"\s*:\s*([45]\d{2})(?=\s*[,}])/i)?.[1];
|
|
104
|
+
if (status && !summary.includes(status)) summary = `HTTP ${status}; ${summary}`;
|
|
105
|
+
summary = summary.replace(/\s+/g, " ").trim();
|
|
106
|
+
if (routeAdvice) {
|
|
107
|
+
// Keep route recovery ahead of long body detail so row clipping cannot
|
|
108
|
+
// spend the entire primary preview on the provider payload.
|
|
109
|
+
const prefix = summary.slice(0, 60);
|
|
110
|
+
const identity = routeParts?.[2];
|
|
111
|
+
const policy = routeParts?.[3];
|
|
112
|
+
const remedy = routeParts?.[4];
|
|
113
|
+
const advice = identity && policy && remedy ? `${remedy} ${policy}. ${identity}` : routeAdvice;
|
|
114
|
+
summary = `${prefix}${summary.length > 60 ? " ..." : ""}; ${advice}`;
|
|
115
|
+
}
|
|
116
|
+
const shortened = summary.length > DISPLAY_LIMIT || value.length > SCAN_LIMIT || summary !== sample.trim();
|
|
117
|
+
return `${summary.slice(0, DISPLAY_LIMIT)}${shortened ? " ... [available diagnostic: /view transcript]" : ""}`;
|
|
118
|
+
}
|
|
@@ -1,32 +1,30 @@
|
|
|
1
|
+
import { truncateToWidth, wrapTextWithAnsi } from "../../engine/tui.js";
|
|
1
2
|
import type { RetryStatusPayload } from "../chat-loop.js";
|
|
3
|
+
import { clioTheme } from "../theme/index.js";
|
|
4
|
+
import type { TranscriptDetailPolicy } from "../transcript-detail.js";
|
|
2
5
|
import { styleTaggedNotice } from "./notice.js";
|
|
6
|
+
import { previewBudget, previewRows } from "./preview.js";
|
|
7
|
+
import { presentProviderError, providerErrorEvidence } from "./provider-error.js";
|
|
3
8
|
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
return `${characters.slice(0, RETRY_ERROR_MAX_CHARS).join("").trimEnd()}${RETRY_ERROR_TRUNCATION_MARKER}`;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function rawRetryStatus(status: RetryStatusPayload): string {
|
|
14
|
-
// Both live and replay renderers wrap this notice to their terminal width, so
|
|
15
|
-
// ordinary errors keep their complete remedy. Raw provider failures can also
|
|
16
|
-
// be an HTML proxy page, though; keep a generous ceiling so one retry does not
|
|
17
|
-
// turn that page into hundreds of transcript rows.
|
|
18
|
-
const suffix = status.errorMessage ? `: ${boundedRetryError(status.errorMessage)}` : "";
|
|
9
|
+
function rawRetryStatus(status: RetryStatusPayload, unbounded: boolean): string {
|
|
10
|
+
const showError = unbounded || (status.phase !== "waiting" && status.phase !== "retrying");
|
|
11
|
+
const suffix =
|
|
12
|
+
showError && status.errorMessage
|
|
13
|
+
? `: ${unbounded ? providerErrorEvidence(status.errorMessage) : presentProviderError(status.errorMessage)}`
|
|
14
|
+
: "";
|
|
19
15
|
if (status.phase === "waiting") {
|
|
20
|
-
return `[retry]
|
|
16
|
+
return `[retry] provider retry ${status.attempt}/${status.maxAttempts} in ${status.seconds ?? 0}s${suffix}`;
|
|
21
17
|
}
|
|
22
18
|
if (status.phase === "scheduled") {
|
|
23
19
|
const seconds = Math.ceil((status.delayMs ?? 0) / 1000);
|
|
24
|
-
return `[retry]
|
|
20
|
+
return `[retry] provider retry ${status.attempt}/${status.maxAttempts} scheduled in ${seconds}s${suffix}`;
|
|
25
21
|
}
|
|
26
|
-
if (status.phase === "retrying")
|
|
27
|
-
|
|
28
|
-
if (status.phase === "
|
|
29
|
-
|
|
22
|
+
if (status.phase === "retrying")
|
|
23
|
+
return `[retry] provider retry ${status.attempt}/${status.maxAttempts} running${suffix}`;
|
|
24
|
+
if (status.phase === "cancelled")
|
|
25
|
+
return `[retry] provider retry cancelled (${status.attempt}/${status.maxAttempts})${suffix}`;
|
|
26
|
+
if (status.phase === "exhausted") return `[retry] provider retry exhausted (${status.attempt})${suffix}`;
|
|
27
|
+
return `[retry] provider retry recovered after ${status.attempt} attempt(s)`;
|
|
30
28
|
}
|
|
31
29
|
|
|
32
30
|
/**
|
|
@@ -34,6 +32,44 @@ function rawRetryStatus(status: RetryStatusPayload): string {
|
|
|
34
32
|
* renders in warning and the body in muted via the shared notice styler, so the
|
|
35
33
|
* live retry line and the replayed one read identically.
|
|
36
34
|
*/
|
|
37
|
-
export function formatRetryStatus(status: RetryStatusPayload): string {
|
|
38
|
-
return styleTaggedNotice(rawRetryStatus(status));
|
|
35
|
+
export function formatRetryStatus(status: RetryStatusPayload, unbounded = false): string {
|
|
36
|
+
return styleTaggedNotice(rawRetryStatus(status, unbounded));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Reserve diagnosis space even when a short terminal permits only two rows. */
|
|
40
|
+
export function renderRetryStatus(
|
|
41
|
+
status: RetryStatusPayload,
|
|
42
|
+
width: number,
|
|
43
|
+
detail: TranscriptDetailPolicy,
|
|
44
|
+
unbounded = false,
|
|
45
|
+
terminalRows = 40,
|
|
46
|
+
): string[] {
|
|
47
|
+
if (unbounded) return wrapTextWithAnsi(formatRetryStatus(status, true), width);
|
|
48
|
+
const limit = previewBudget(detail.errorRows, terminalRows);
|
|
49
|
+
const { errorMessage, ...heading } = status;
|
|
50
|
+
if (!errorMessage || status.phase === "waiting" || status.phase === "retrying" || status.phase === "recovered") {
|
|
51
|
+
return previewRows(wrapTextWithAnsi(formatRetryStatus(heading), width), limit, width);
|
|
52
|
+
}
|
|
53
|
+
// One heading row leaves room for the failure itself, not just a View hint.
|
|
54
|
+
const headingRow = truncateToWidth(formatRetryStatus(heading), width);
|
|
55
|
+
const diagnosis = presentProviderError(errorMessage);
|
|
56
|
+
const rows = wrapTextWithAnsi(diagnosis, width);
|
|
57
|
+
if (limit === 2 && rows.length > 1) {
|
|
58
|
+
const hint = " /view";
|
|
59
|
+
return [
|
|
60
|
+
headingRow,
|
|
61
|
+
clioTheme().fg(
|
|
62
|
+
"muted",
|
|
63
|
+
truncateToWidth(`${truncateToWidth(diagnosis, Math.max(1, width - hint.length))}${hint}`, width),
|
|
64
|
+
),
|
|
65
|
+
];
|
|
66
|
+
}
|
|
67
|
+
return [
|
|
68
|
+
headingRow,
|
|
69
|
+
...previewRows(
|
|
70
|
+
rows.map((row) => clioTheme().fg("muted", row)),
|
|
71
|
+
limit - 1,
|
|
72
|
+
width,
|
|
73
|
+
),
|
|
74
|
+
];
|
|
39
75
|
}
|
|
@@ -16,12 +16,13 @@ import { previewBudget, previewRows } from "./preview.js";
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import { trustStateWord } from "../../domains/evidence/trust-projection.js";
|
|
19
|
-
import { sanitizeCallTargetText } from "../../domains/safety/call-target.js";
|
|
19
|
+
import { sanitizeCallTargetText, sanitizeMultilineDisplayText } from "../../domains/safety/call-target.js";
|
|
20
20
|
import { redactSecretString, redactToolArgs } from "../../domains/safety/redaction.js";
|
|
21
21
|
import { formatSize } from "../../engine/truncate.js";
|
|
22
22
|
import { visibleWidth, wrapTextWithAnsi } from "../../engine/tui.js";
|
|
23
23
|
import { classifyResourceRead, toolPresentationPolicy } from "../../tools/presentation.js";
|
|
24
24
|
import { toolResultPresentationPolicy, toolResultPresentationText } from "../../tools/result-disposition.js";
|
|
25
|
+
import { effectiveToolCall } from "../../tools/surface.js";
|
|
25
26
|
import { mutationFactsLine } from "../mutation-preview.js";
|
|
26
27
|
import type { ApprovalRequestView } from "../permission-overlay.js";
|
|
27
28
|
import { clioTheme, formatCompactMs, GLYPH } from "../theme/index.js";
|
|
@@ -214,11 +215,16 @@ const PRIMARY_ARG_FIELD: Record<string, string> = {
|
|
|
214
215
|
bash: "command",
|
|
215
216
|
grep: "pattern",
|
|
216
217
|
find: "pattern",
|
|
218
|
+
web_read: "url",
|
|
217
219
|
web_fetch: "url",
|
|
218
220
|
git: "op",
|
|
219
221
|
verify: "check",
|
|
222
|
+
run_script: "script",
|
|
220
223
|
code_nav: "query",
|
|
221
224
|
context: "scope",
|
|
225
|
+
clio_docs: "query",
|
|
226
|
+
clio_library: "query",
|
|
227
|
+
data: "path",
|
|
222
228
|
artifact: "kind",
|
|
223
229
|
monitor: "run_id",
|
|
224
230
|
steer: "run_id",
|
|
@@ -252,10 +258,31 @@ function summarizeWebFetchArgs(args: unknown): string {
|
|
|
252
258
|
return truncate(jsonStringifySafe(Object.keys(compact).length > 0 ? compact : args), WEB_FETCH_ARG_PREVIEW_LIMIT);
|
|
253
259
|
}
|
|
254
260
|
|
|
261
|
+
/**
|
|
262
|
+
* A gateway call reads as the capability it reached: `find` and `describe`
|
|
263
|
+
* name what was asked, `call` renders the capability's own summary so a row
|
|
264
|
+
* says `git status` rather than an opaque gateway argument dump.
|
|
265
|
+
*/
|
|
266
|
+
function summarizeGatewayArgs(args: unknown): string {
|
|
267
|
+
if (!isPlainObject(args)) return truncate(jsonStringifySafe(redactToolArgs(args)), ARG_PREVIEW_LIMIT);
|
|
268
|
+
const op = typeof args.op === "string" ? args.op : "";
|
|
269
|
+
if (op === "find") {
|
|
270
|
+
const query = readStringField(args, "query");
|
|
271
|
+
return truncate(query === null || query.length === 0 ? "find" : `find ${query}`, ARG_PREVIEW_LIMIT);
|
|
272
|
+
}
|
|
273
|
+
const capability = readStringField(args, "capability") ?? "";
|
|
274
|
+
if (op === "describe") return truncate(`describe ${capability}`.trim(), ARG_PREVIEW_LIMIT);
|
|
275
|
+
const effective = effectiveToolCall("gateway", args);
|
|
276
|
+
if (!effective.viaGateway) return truncate(jsonStringifySafe(redactToolArgs(args)), ARG_PREVIEW_LIMIT);
|
|
277
|
+
const inner = summarizeArgs(effective.toolName, effective.args);
|
|
278
|
+
return truncate(inner.length > 0 ? `${effective.toolName} ${inner}` : effective.toolName, ARG_PREVIEW_LIMIT);
|
|
279
|
+
}
|
|
280
|
+
|
|
255
281
|
function summarizeArgs(toolName: string, args: unknown): string {
|
|
256
282
|
if (isEmptyArgs(args)) return "";
|
|
257
283
|
const safeArgs = redactToolArgs(args);
|
|
258
|
-
if (toolName === "web_fetch") return summarizeWebFetchArgs(safeArgs);
|
|
284
|
+
if (toolName === "web_fetch" || toolName === "web_read") return summarizeWebFetchArgs(safeArgs);
|
|
285
|
+
if (toolName === "gateway") return summarizeGatewayArgs(args);
|
|
259
286
|
const primary = capturedPrimaryArg(toolName, args);
|
|
260
287
|
if (primary !== null) return truncate(displayArg(toolName, primary), ARG_PREVIEW_LIMIT);
|
|
261
288
|
return truncate(jsonStringifySafe(safeArgs), ARG_PREVIEW_LIMIT);
|
|
@@ -589,7 +616,12 @@ function buildFieldSublineBody(
|
|
|
589
616
|
): string | null {
|
|
590
617
|
const value = readStringField(args, key);
|
|
591
618
|
if (value === null) return null;
|
|
592
|
-
|
|
619
|
+
// One array element is one terminal row to the diff renderer. A multi-line
|
|
620
|
+
// command or an escape sequence inside this row shifted every row below it.
|
|
621
|
+
const preview = truncate(
|
|
622
|
+
sanitizeCallTargetText(key === "command" ? stripShellWrapperForDisplay(value) : value),
|
|
623
|
+
ARG_PREVIEW_LIMIT,
|
|
624
|
+
);
|
|
593
625
|
if (options.wrapInBackticks) return `${lead}\`${preview}\``;
|
|
594
626
|
return `${lead}${preview}`;
|
|
595
627
|
}
|
|
@@ -635,9 +667,32 @@ const SUBLINE_BODY_BUILDERS: Readonly<Record<string, (args: unknown) => string |
|
|
|
635
667
|
bash: (args) => buildFieldSublineBody(args, "command", "running ", { wrapInBackticks: true }),
|
|
636
668
|
grep: (args) => buildFieldSublineBody(args, "pattern", "searching for ", { wrapInBackticks: true }),
|
|
637
669
|
find: (args) => buildFieldSublineBody(args, "pattern", "finding ", { wrapInBackticks: true }),
|
|
670
|
+
web_read: (args) => buildFieldSublineBody(args, "url", "reading "),
|
|
638
671
|
web_fetch: (args) => buildFieldSublineBody(args, "url", "fetching "),
|
|
639
672
|
git: (args) => buildFieldSublineBody(args, "op", "git "),
|
|
640
673
|
verify: (args) => buildFieldSublineBody(args, "check", "verifying "),
|
|
674
|
+
run_script: (args) => buildFieldSublineBody(args, "script", "running ", { wrapInBackticks: true }),
|
|
675
|
+
data: (args) => {
|
|
676
|
+
const op = readStringField(args, "op") ?? "inspecting";
|
|
677
|
+
const path = readStringField(args, "path");
|
|
678
|
+
return path === null ? op : `${op} ${path}`;
|
|
679
|
+
},
|
|
680
|
+
gateway: (args) => {
|
|
681
|
+
if (!isPlainObject(args)) return null;
|
|
682
|
+
const op = typeof args.op === "string" ? args.op : "";
|
|
683
|
+
if (op === "find") {
|
|
684
|
+
const query = readStringField(args, "query");
|
|
685
|
+
return query === null || query.length === 0 ? "finding capabilities" : `finding capabilities \`${query}\``;
|
|
686
|
+
}
|
|
687
|
+
if (op === "describe") {
|
|
688
|
+
const capability = readStringField(args, "capability");
|
|
689
|
+
return capability === null ? "describing a capability" : `describing ${capability}`;
|
|
690
|
+
}
|
|
691
|
+
const effective = effectiveToolCall("gateway", args);
|
|
692
|
+
if (!effective.viaGateway) return null;
|
|
693
|
+
const inner = SUBLINE_BODY_BUILDERS[effective.toolName]?.(effective.args);
|
|
694
|
+
return inner !== null && inner !== undefined ? `${inner} (via gateway)` : `calling ${effective.toolName}`;
|
|
695
|
+
},
|
|
641
696
|
code_nav: (args) => {
|
|
642
697
|
const mode = readStringField(args, "mode");
|
|
643
698
|
const query = readStringField(args, "query")?.trim() ?? "";
|
|
@@ -715,9 +770,9 @@ function buildSublineBody(
|
|
|
715
770
|
}
|
|
716
771
|
return SUBLINE_BODY_BUILDERS[toolName]?.(args) ?? buildGenericToolBody(toolName, args);
|
|
717
772
|
}
|
|
718
|
-
if (toolName === "web_fetch") {
|
|
773
|
+
if (toolName === "web_fetch" || toolName === "web_read") {
|
|
719
774
|
const meta = status === undefined ? null : webFetchMeta(result);
|
|
720
|
-
const body = SUBLINE_BODY_BUILDERS
|
|
775
|
+
const body = SUBLINE_BODY_BUILDERS[toolName]?.(args) ?? buildGenericToolBody(toolName, args);
|
|
721
776
|
return `${body}${meta ? dim(` · ${meta}`) : ""}`;
|
|
722
777
|
}
|
|
723
778
|
if (toolName === "bash") {
|
|
@@ -909,9 +964,14 @@ function isEmptyResult(result: unknown): boolean {
|
|
|
909
964
|
return false;
|
|
910
965
|
}
|
|
911
966
|
|
|
967
|
+
/**
|
|
968
|
+
* Tool output is untrusted terminal input. Cursor movement, backspaces and
|
|
969
|
+
* carriage returns inside a row break the diff renderer's one-row-per-line
|
|
970
|
+
* accounting, so everything but the line structure is neutralized here.
|
|
971
|
+
*/
|
|
912
972
|
function resultText(result: unknown, limit = FULL_RESULT_PREVIEW_LIMIT): string {
|
|
913
|
-
|
|
914
|
-
return truncate(
|
|
973
|
+
const text = typeof result === "string" ? result : jsonStringifySafe(result);
|
|
974
|
+
return truncate(sanitizeMultilineDisplayText(text).text, limit);
|
|
915
975
|
}
|
|
916
976
|
|
|
917
977
|
function truncateRowsMiddle(rows: ReadonlyArray<string>, rowLimit: number, isError: boolean): string[] {
|