@qwen-code/qwen-code 0.23.2-preview.0 → 0.23.2
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/bundled/qc-helper/docs/configuration/auth.md +1 -1
- package/bundled/qc-helper/docs/configuration/model-providers.md +19 -15
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +1 -1
- package/bundled/qc-helper/docs/features/channels/github.md +1 -9
- package/bundled/qc-helper/docs/features/channels/overview.md +26 -51
- package/bundled/qc-helper/docs/features/channels/qqbot.md +1 -2
- package/bundled/qc-helper/docs/features/commands.md +48 -9
- package/bundled/qc-helper/docs/features/goals.md +2 -0
- package/bundled/qc-helper/docs/features/sub-agents.md +8 -0
- package/bundled/qc-helper/docs/qwen-serve.md +62 -48
- package/chunks/{MaxSizedBox-ZZJT3PJF.js → MaxSizedBox-4C3BKKKY.js} +17 -16
- package/chunks/{StandaloneSessionPicker-DIOSZTMX.js → StandaloneSessionPicker-TXVF65YW.js} +32 -31
- package/chunks/{acpAgent-62JUP5A7.js → acpAgent-H5XBKGB4.js} +301 -166
- package/chunks/{agent-NLPEQQDZ.js → agent-T5LEFJIU.js} +10 -10
- package/chunks/{agent-headless-Y2GR5F2Q.js → agent-headless-VZKSRH36.js} +10 -10
- package/chunks/{anthropicContentGenerator-I7LQZH26.js → anthropicContentGenerator-PRJWWVYJ.js} +2 -2
- package/chunks/{artifact-tool-P52OKKEF.js → artifact-tool-G5LHNECG.js} +1 -1
- package/chunks/{bridge-Q66BD62H.js → bridge-AOX5IY44.js} +18 -17
- package/chunks/{channel-management-service-TRTLQTSV.js → channel-management-service-MWQGHPAS.js} +4 -4
- package/chunks/{channel-settings-store-R5STFWUW.js → channel-settings-store-XZCGDGHW.js} +26 -25
- package/chunks/{channel-worker-group-PIYPVCTF.js → channel-worker-group-SQ5FRWOH.js} +5 -5
- package/chunks/{channel-worker-manager-FQHEDTD2.js → channel-worker-manager-TU4ZNWOE.js} +5 -5
- package/chunks/{channel-worker-supervisor-XJPZZ3VK.js → channel-worker-supervisor-EMITFMCP.js} +4 -4
- package/chunks/{chunk-3SH53ANB.js → chunk-22GORRNY.js} +12 -0
- package/chunks/{chunk-7L35FKPF.js → chunk-2BMXHB6N.js} +2 -2
- package/chunks/chunk-2WC3Y7YY.js +1033 -0
- package/chunks/{chunk-WZ4YULVF.js → chunk-3OAXF3UK.js} +210 -80
- package/chunks/{chunk-W673V2H3.js → chunk-46MMBZHI.js} +3 -3
- package/chunks/{chunk-6GRDHIVI.js → chunk-4I3WFI3U.js} +4 -4
- package/chunks/{chunk-QXXBW2G4.js → chunk-4JNHNVAZ.js} +3 -3
- package/chunks/{chunk-R2266LQ5.js → chunk-4WMGYG3F.js} +2 -2
- package/chunks/{chunk-Y6ZWXM44.js → chunk-5BH2AIEY.js} +1 -1
- package/chunks/{chunk-EA4NFWVG.js → chunk-5OZUKLL7.js} +3 -3
- package/chunks/{chunk-RX3FYFCN.js → chunk-67XTVRVB.js} +1 -1
- package/chunks/{chunk-MA5OUNN6.js → chunk-6G4V7SE4.js} +1 -1
- package/chunks/{chunk-B54PFQS5.js → chunk-7CLLH5TI.js} +1 -1
- package/chunks/{chunk-7GZCCHJL.js → chunk-7LTCFO6T.js} +3 -3
- package/chunks/{chunk-33MLFMCL.js → chunk-7NDZKE2M.js} +2 -2
- package/chunks/{chunk-5WC2ECUK.js → chunk-7PD7ZMX5.js} +17 -4
- package/chunks/{chunk-ZUNWKOAP.js → chunk-7SVM3RP2.js} +4 -24
- package/chunks/{chunk-5GD7LYOH.js → chunk-A7EFXK7P.js} +1 -1
- package/chunks/{chunk-RDV4NLI3.js → chunk-AO2VMS72.js} +2 -2
- package/chunks/{chunk-XAXTQURR.js → chunk-APXIW2TF.js} +3 -3
- package/chunks/{chunk-3BTHHXXE.js → chunk-AUTUFD5X.js} +1 -1
- package/chunks/{chunk-VH764G6B.js → chunk-B25JYXZE.js} +2 -2
- package/chunks/{chunk-MMMA36MN.js → chunk-BK7D2JR6.js} +3 -3
- package/chunks/{chunk-RPFJJ33Z.js → chunk-CALTQWTZ.js} +1 -1
- package/chunks/{chunk-EUXF6URV.js → chunk-CCBTNJB4.js} +16 -18
- package/chunks/{chunk-BF3RUIVP.js → chunk-CH2YDT6X.js} +36 -38
- package/chunks/{chunk-L6ZME3W7.js → chunk-CMWU6P4D.js} +1 -1
- package/chunks/{chunk-QJAFSFYA.js → chunk-CWVZBIZJ.js} +1 -1
- package/chunks/{chunk-JDPBJIKI.js → chunk-DAI65CMX.js} +1 -1
- package/chunks/{chunk-GM44O6F7.js → chunk-DARWOZY6.js} +1 -1
- package/chunks/{chunk-J4ECGDA3.js → chunk-ELD3OBPU.js} +3 -3
- package/chunks/{chunk-ZELCTN6Y.js → chunk-F23YN37B.js} +10 -0
- package/chunks/{chunk-OIPUQE3S.js → chunk-F2NYVASI.js} +14 -1
- package/chunks/{chunk-ODBNTMZW.js → chunk-FAJPLSYF.js} +36 -29
- package/chunks/{chunk-GXIHBIHC.js → chunk-FGHPZGOP.js} +29 -24
- package/chunks/{chunk-TK4XHPKW.js → chunk-G37O7YO6.js} +2 -2
- package/chunks/{chunk-4JKLPTV6.js → chunk-G3ZUMSFS.js} +12 -5
- package/chunks/{chunk-743XE7N7.js → chunk-G5VOXCRX.js} +1 -1
- package/chunks/{chunk-BL6B2QS2.js → chunk-GOEVQADN.js} +618 -1122
- package/chunks/{chunk-XI7RST4D.js → chunk-GOKAOSCN.js} +1 -1
- package/chunks/{chunk-FDOGGKAA.js → chunk-GSFV5RQW.js} +2 -0
- package/chunks/{chunk-43CI6YWJ.js → chunk-HJ5UJQQL.js} +1384 -1245
- package/chunks/{chunk-LUVXLLMS.js → chunk-IR6JKBAP.js} +1 -1
- package/chunks/{chunk-CPJRFFPH.js → chunk-IRGDIDGJ.js} +558 -158
- package/chunks/{chunk-DCPRCDSR.js → chunk-IWABUX6T.js} +1 -1
- package/chunks/{chunk-DTB5BXRG.js → chunk-JO77FGNZ.js} +16 -15
- package/chunks/{chunk-45ROPFQY.js → chunk-JYGIJA4W.js} +1 -1
- package/chunks/{chunk-M6YLOETP.js → chunk-KCF2436G.js} +1 -1
- package/chunks/{chunk-CABDNUJ4.js → chunk-KEPC5BOL.js} +5 -5
- package/chunks/{chunk-RN6V5HKE.js → chunk-KFECPHLV.js} +3 -3
- package/chunks/{chunk-WIRYFL2L.js → chunk-LEAOJ43M.js} +17 -15
- package/chunks/{chunk-IUJLW6ZI.js → chunk-LUNC5KCL.js} +3 -3
- package/chunks/{chunk-WZS3X663.js → chunk-LWX4WDFF.js} +2 -5
- package/chunks/{chunk-ISPBBKJN.js → chunk-MV5DTLJV.js} +7 -2
- package/chunks/chunk-NFXXBWSE.js +463 -0
- package/chunks/{chunk-PQSCGZT2.js → chunk-NPKCVSXX.js} +26 -2
- package/chunks/{chunk-7RXOEUFF.js → chunk-NX7ZTXFF.js} +1 -1
- package/chunks/{chunk-G5QLLD53.js → chunk-OXR34GCD.js} +14 -2
- package/chunks/{chunk-VHPG7BH6.js → chunk-PDN7FJZV.js} +1 -1
- package/chunks/{chunk-UHUT4IDM.js → chunk-PFKGV6PO.js} +9 -9
- package/chunks/{chunk-NFIDVZND.js → chunk-QB3KS3N3.js} +2 -21
- package/chunks/{chunk-QLM7D7W3.js → chunk-QFJZAY7W.js} +7 -7
- package/chunks/{chunk-NVS4Z6GT.js → chunk-QHLHE2OT.js} +1 -1
- package/chunks/{chunk-B44JBZBB.js → chunk-QQK4L3UU.js} +1 -1
- package/chunks/{chunk-63ACHB2H.js → chunk-QTB4VP4K.js} +50 -18
- package/chunks/{chunk-4BLTSTF6.js → chunk-R3JIDRUL.js} +4 -4
- package/chunks/{chunk-VEQBVJYH.js → chunk-R457KFV7.js} +3 -3
- package/chunks/{chunk-CG2PDIGD.js → chunk-RM244SCQ.js} +1 -1
- package/chunks/{chunk-W7PXLIZJ.js → chunk-RNAJVXUG.js} +5 -5
- package/chunks/{chunk-VF6D6EGV.js → chunk-S5QR6CB5.js} +52 -6
- package/chunks/{chunk-IRKQ4YYX.js → chunk-SVWWF5TZ.js} +29 -1
- package/chunks/{chunk-5HBA2Z7V.js → chunk-TGNNLRC3.js} +2 -3
- package/chunks/{chunk-ORREXWOM.js → chunk-TODNHE76.js} +3 -3
- package/chunks/{chunk-W3ONSAYO.js → chunk-TOOOLHVS.js} +2 -2
- package/chunks/{chunk-EHTKOO6W.js → chunk-TRQNRP2H.js} +2 -2
- package/chunks/{chunk-PQWM4SX2.js → chunk-U6REWGVR.js} +2 -2
- package/chunks/{chunk-UXDVUFKU.js → chunk-ULZECEIP.js} +2 -2
- package/chunks/{chunk-6YEOCHSE.js → chunk-VBLAI2HA.js} +101 -0
- package/chunks/{chunk-M73KHGNR.js → chunk-VJJXG73H.js} +404 -226
- package/chunks/{chunk-Q2F43WTJ.js → chunk-WBU2PIZ5.js} +23 -6
- package/chunks/{chunk-UULHYZ4W.js → chunk-WDN64MVT.js} +74 -15
- package/chunks/{chunk-XVTCSVBK.js → chunk-WDVV3LRM.js} +193 -169
- package/chunks/{chunk-LBKYQ33T.js → chunk-WK7P62DV.js} +16 -10
- package/chunks/{chunk-ULY4ISY2.js → chunk-WXD7INFV.js} +19 -4
- package/chunks/{chunk-ZIPYCXQP.js → chunk-WXPPUPHM.js} +1 -1
- package/chunks/{chunk-5Z4FCEPY.js → chunk-X7LFJF5D.js} +600 -46
- package/chunks/{chunk-YHDGABDC.js → chunk-XKBFYTCD.js} +1 -1
- package/chunks/{chunk-MWEF5MUK.js → chunk-XSOXPG2L.js} +8 -8
- package/chunks/{chunk-5VZFJTL2.js → chunk-YLOHCA6I.js} +2 -2
- package/chunks/{chunk-LN3WBOKU.js → chunk-YQGW3M6Z.js} +2 -2
- package/chunks/{chunk-2OR32P5M.js → chunk-ZN5TKAVR.js} +125 -10
- package/chunks/{chunk-XBLG564H.js → chunk-ZP5XDLSA.js} +10 -10
- package/chunks/{config-utils-37FHWPTP.js → config-utils-GPLIABL2.js} +21 -20
- package/chunks/{contextCommand-R4JUBV5N.js → contextCommand-NCUQUDBY.js} +18 -17
- package/chunks/{core-runtime-6U4OXU5C.js → core-runtime-WKYKWVYU.js} +23 -21
- package/chunks/{create-sub-session-LLUYAGZN.js → create-sub-session-PPLXB3JJ.js} +17 -16
- package/chunks/{daemon-UI6SQSBV.js → daemon-2CKIAO3I.js} +2 -2
- package/chunks/{daemon-git-worktree-guard-O2UTNFJC.js → daemon-git-worktree-guard-73ZWOLKL.js} +17 -16
- package/chunks/{daemon-status-provider-7GMAKSTX.js → daemon-status-provider-OK7VONJG.js} +22 -21
- package/chunks/{daemon-trust-policy-VNP76VMO.js → daemon-trust-policy-CAUCREG2.js} +22 -21
- package/chunks/{daemon-trust-policy-monitor-TD5O3BZA.js → daemon-trust-policy-monitor-3Y36OOEQ.js} +22 -21
- package/chunks/{deferred-core-runtime-NJM63YJS.js → deferred-core-runtime-Q7WFWYD3.js} +17 -16
- package/chunks/{dist-STAGIFNB.js → dist-6YDUH3BB.js} +388 -102
- package/chunks/{dist-XJ25G6OH.js → dist-BNQVF565.js} +2 -8
- package/chunks/{dist-NQ2636VT.js → dist-F34J4FZX.js} +1 -1
- package/chunks/{dist-OR2ZQTXZ.js → dist-F6JLAJLE.js} +1 -1
- package/chunks/{dist-WZTUKIDR.js → dist-NP7QKLVG.js} +2 -2
- package/chunks/{dist-M4CBX53H.js → dist-UFTFGI6I.js} +1 -1
- package/chunks/{dist-5I4HLUTO.js → dist-XLV33CLY.js} +1 -2
- package/chunks/{dist-24TCWK5H.js → dist-Y5KC3IHW.js} +1 -2
- package/chunks/{dist-FDISN4AK.js → dist-ZDNJK74R.js} +3 -7
- package/chunks/{edit-GL7OA6RV.js → edit-YJD6IETK.js} +10 -10
- package/chunks/{enterPlanMode-VC4BCSZE.js → enterPlanMode-EFPVTWIH.js} +10 -10
- package/chunks/{environment-BI6IBAZJ.js → environment-HP3AXFTB.js} +19 -18
- package/chunks/{errors-D6G2ZM2R.js → errors-22ON46G7.js} +19 -18
- package/chunks/{exitPlanMode-DX446CA6.js → exitPlanMode-MOQUNCBH.js} +10 -10
- package/chunks/{fast-path-MAYDLJIP.js → fast-path-2X7BPMXX.js} +3 -3
- package/chunks/{glob-TVKRFY36.js → glob-Y7ACIB3P.js} +10 -10
- package/chunks/{goal-tools-CA6YANRN.js → goal-tools-DABMICUC.js} +10 -10
- package/chunks/{handleAutoUpdate-AW4ZAHON.js → handleAutoUpdate-MCAMHYDI.js} +19 -18
- package/chunks/{i18n-IH5CRAY7.js → i18n-C3GDCALP.js} +17 -16
- package/chunks/{initializer-UBR37ZNM.js → initializer-4URDQL2G.js} +22 -21
- package/chunks/{installationInfo-Y52756EC.js → installationInfo-LBOL6SBV.js} +17 -16
- package/chunks/{list-7V5JDZPO.js → list-JOGBAC2R.js} +25 -24
- package/chunks/{list-agents-I5TRH3J7.js → list-agents-2CXPGJUE.js} +3 -3
- package/chunks/{llm-QDB6JVF5.js → llm-2KPNSAVY.js} +65 -59
- package/chunks/{llm-content-generator-EO6MZCEO.js → llm-content-generator-GR3FOHLB.js} +2 -2
- package/chunks/{loadedSettingsAdapter-I3YQKMC4.js → loadedSettingsAdapter-DVKROEJD.js} +22 -21
- package/chunks/{loggingContentGenerator-MNXYUGDG.js → loggingContentGenerator-P4K6K5W4.js} +12 -12
- package/chunks/{managed-npm-update-EA3EXPTO.js → managed-npm-update-VWBKHNIN.js} +17 -16
- package/chunks/{mcp-QTAJ544Y.js → mcp-6YYNSYLK.js} +22 -21
- package/chunks/{monitor-6FQKQOTP.js → monitor-A255TNZR.js} +10 -10
- package/chunks/{nonInteractiveCli-MRCTZL5X.js → nonInteractiveCli-LXGIKQAT.js} +55 -54
- package/chunks/{notebook-edit-BQQCKI7K.js → notebook-edit-5UYHS2DM.js} +10 -10
- package/chunks/{open-with-auth-D6JD6LDS.js → open-with-auth-6MVIHMXB.js} +1 -1
- package/chunks/{openaiContentGenerator-TTSKXNVH.js → openaiContentGenerator-A6MAMEO5.js} +7 -7
- package/chunks/{pidfile-KPIS6RIT.js → pidfile-B7DZC4TP.js} +20 -17
- package/chunks/{processUtils-ZCASPKK4.js → processUtils-BPZ2MCZS.js} +2 -2
- package/chunks/{prompt-terminal-ledger-D6HM6TV7.js → prompt-terminal-ledger-FYYTAOXS.js} +18 -17
- package/chunks/{qwenContentGenerator-GGZEFLBD.js → qwenContentGenerator-4IOJFD4S.js} +13 -13
- package/chunks/{read-file-VE5GDFLP.js → read-file-A4H4O3VQ.js} +2 -2
- package/chunks/{resumeHistoryUtils-HSSGMYDC.js → resumeHistoryUtils-YQQ43E4N.js} +19 -18
- package/chunks/{ripGrep-SEJE7AA6.js → ripGrep-W32NWFTA.js} +3 -3
- package/chunks/{run-qwen-serve-OJYVH7N6.js → run-qwen-serve-WBSWWIRV.js} +216 -64
- package/chunks/{runtime-KGMQQFJD.js → runtime-VRVBX2E5.js} +29 -26
- package/chunks/{scheduled-tasks-7H5HWHYD.js → scheduled-tasks-D65KJDA3.js} +20 -19
- package/chunks/{scheduler-BE42AKDG.js → scheduler-M2YPN7Z7.js} +19 -18
- package/chunks/{send-message-AWKUDJBH.js → send-message-76BKWKFZ.js} +3 -3
- package/chunks/{serve-KZVKYMSL.js → serve-BE3H2P6P.js} +22 -21
- package/chunks/{server-PJRALPJQ.js → server-FLY5JERG.js} +84 -148
- package/chunks/{session-IHITXU2S.js → session-JVN62R5K.js} +85 -57
- package/chunks/{session-attachments-root-GQ2TUI3Y.js → session-attachments-root-7ACGLHXA.js} +17 -16
- package/chunks/{session-pr-refresh-H43LULTE.js → session-pr-refresh-TQS57SDK.js} +19 -18
- package/chunks/{settings-RKEQQDFC.js → settings-D44YMZFT.js} +21 -20
- package/chunks/{shell-6PJ444U5.js → shell-3VE6I4V5.js} +10 -10
- package/chunks/{skill-Q3UP7B5V.js → skill-FHEGRRZU.js} +2 -2
- package/chunks/{skill-settings-LZR5YRRW.js → skill-settings-VHEJMBFL.js} +21 -20
- package/chunks/{spawnChannel-WM3DT2BF.js → spawnChannel-T6MX2ZDN.js} +17 -16
- package/chunks/{standalone-update-E5474IBI.js → standalone-update-QUGHFMCS.js} +18 -17
- package/chunks/{start-opentui-ui-WLWZNQ2I.js → start-opentui-ui-IHIIZ2LE.js} +438 -203
- package/chunks/{startInteractiveUI-FBQSGWGO.js → startInteractiveUI-LR7K2ARZ.js} +1171 -1234
- package/chunks/{task-create-PMAFST2T.js → task-create-MWXJFRRM.js} +3 -3
- package/chunks/{task-list-R2HSY2NC.js → task-list-EYO3FE57.js} +2 -2
- package/chunks/{task-update-JYC57USF.js → task-update-2JJJRHMT.js} +3 -3
- package/chunks/{team-create-VIGUFUT4.js → team-create-GY3VFY47.js} +10 -10
- package/chunks/{team-delete-CBHVBTPB.js → team-delete-IQZ6XGFI.js} +2 -2
- package/chunks/{team-plan-approval-HQVZA3MD.js → team-plan-approval-BQPGZOT5.js} +10 -10
- package/chunks/{terminal-image-renderer-LUKNCOVM.js → terminal-image-renderer-YNYW5CQG.js} +17 -16
- package/chunks/{theme-manager-LOENKYLY.js → theme-manager-U6CIK3GM.js} +17 -16
- package/chunks/{tool-search-ZIFAQCE2.js → tool-search-XI3QWD5I.js} +2 -2
- package/chunks/{total-session-admission-FUUJH3QH.js → total-session-admission-3SNSJJ32.js} +18 -17
- package/chunks/{trustedFolders-C76KYROP.js → trustedFolders-OVAQKNV5.js} +18 -17
- package/chunks/{update-relaunch-4G2SRXKX.js → update-relaunch-XV5O74E3.js} +5 -5
- package/chunks/{updateCheck-EIZIO7HI.js → updateCheck-CHUYWD6L.js} +17 -16
- package/chunks/{useAutoAcceptIndicator-EAA6KSY4.js → useAutoAcceptIndicator-VKSVIXZC.js} +23 -22
- package/chunks/{validateNonInterActiveAuth-BRX22QCN.js → validateNonInterActiveAuth-ZNUTD3E5.js} +53 -52
- package/chunks/{version-E56RU7PR.js → version-EK7VAGSI.js} +3 -1
- package/chunks/{web-fetch-AAUCD7RM.js → web-fetch-24KZO763.js} +2 -2
- package/chunks/{web-search-HFUQF44Q.js → web-search-CRNXKZ2X.js} +184 -7
- package/chunks/{web-shell-static-POZHGGXE.js → web-shell-static-BFDESDD4.js} +5 -4
- package/chunks/{workflow-3MABM53N.js → workflow-HD5NYMW5.js} +201 -65
- package/chunks/{workspace-providers-status-2FRLBZ5I.js → workspace-providers-status-MAM42IZS.js} +24 -23
- package/chunks/{workspace-registration-store-YL7HLYYI.js → workspace-registration-store-HKLJEDQX.js} +1 -2
- package/chunks/{workspace-registry-BNRP2ELW.js → workspace-registry-7RDDOBLN.js} +18 -17
- package/chunks/{workspace-runtime-coordinator-WKGF7VHS.js → workspace-runtime-coordinator-LEPDPXJO.js} +18 -17
- package/chunks/{workspace-service-4MYO72MM.js → workspace-service-5IFDCNN3.js} +23 -22
- package/chunks/{workspace-skills-status-SU66TJLZ.js → workspace-skills-status-FJ3HNH4H.js} +22 -21
- package/chunks/{workspace-trust-reconciler-D5QT7WQB.js → workspace-trust-reconciler-PQFHIWLR.js} +23 -22
- package/chunks/{write-file-NVPQE2AZ.js → write-file-ERG67ZFX.js} +11 -11
- package/chunks/{zoom-image-RJHC66WG.js → zoom-image-WQYEC3SR.js} +2 -2
- package/cli.js +12 -12
- package/export-transcript-document.js +82 -82
- package/package.json +4 -4
- package/web-shell/assets/{abnfDiagram-VCTEODGH-DHc6plZn.js → abnfDiagram-VCTEODGH-BRLgQbnT.js} +1 -1
- package/web-shell/assets/{arc-BQ9m8TDV.js → arc-qAF9_XsR.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-D5ap3oVB.js → architectureDiagram-5GKGNRK7-BorUttEz.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-BIbnyNph.js → blockDiagram-NRAW4CY4-Bj0qZVxu.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BRsdx_iG.js → c4Diagram-UCG6FXSJ-BTqJis32.js} +1 -1
- package/web-shell/assets/channel-COIuCrVH.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-3lf1fNlx.js → chunk-2Q5K7J3B-RrQ5X8m-.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-DP8VNRc4.js → chunk-5VM5RSS4-uUjDl8wO.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-DrohDmZ6.js → chunk-F27PBJKO-C3JhpyzI.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-UZ2QhSx6.js → chunk-G27WJ6UU-C8ZNFs7F.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-BIMHVcZK.js → chunk-JWPE2WC7-DNpXtEOs.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-izRxdSDd.js → chunk-LCL6LL3I-DagA2ZLw.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-CXADD4PP.js → chunk-POPQ4Y6H-R23uH7Xm.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-B96d8Y_1.js → chunk-SVP7TREG-Qz9RN_BR.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-CF2sVQpv.js → chunk-XXDRQBXY-jYb1_hni.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DoX6OYqu.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DoX6OYqu.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-CT6tXVAS.js → cose-bilkent-JH36ORCC-Cv2OunpE.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-X1NS4vtV.js → cynefin-OW5HDTMX-LH42KFJx.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-DNsKNOT4.js → cynefinDiagram-5FMLGOSQ-Dha4_OoR.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-9-AHKqsb.js → dagre-3AP2YEHR-Br5lnUKD.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-Bjgms7j6.js → diagram-S7CK7UJ4-dpKq2bBX.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-h6bCprbE.js → diagram-UQ7AKVKN-BAgHWpXr.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-4SbQXVLt.js → diagram-VSXAHHWV-GRRzpyE2.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-B5gPCzzB.js → diagram-VX7I27RA-BNFiaYpG.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-DFJXIA3A.js → diagram-Z3DM3KII-BisZzB_h.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-FwyaU7VY.js → ebnfDiagram-PWID7BFC-B1xbwycf.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-8vJQh2te.js → erDiagram-SSCWMZ5O-CQMzbGE5.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-BzA_1gMN.js → flowDiagram-A5DVABFB-CZ_Zondl.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-Co-ABbVX.js → ganttDiagram-EL5Y4UJY-BTh2ShxS.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-DW_FcyrX.js → gitGraphDiagram-WWUBYQGX-oHOB-Uxt.js} +1 -1
- package/web-shell/assets/{index-Bu-rZoJ-.js → index-CI1ysIEv.js} +478 -474
- package/web-shell/assets/index-CpxXGH-8.css +36 -0
- package/web-shell/assets/{index-BbMXfhNG.js → index-DWoFMu5x.js} +1 -1
- package/web-shell/assets/{infoDiagram-RXCK75RN-BEgfhUFN.js → infoDiagram-RXCK75RN-C0QpudbG.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-DCsMxQmc.js → ishikawaDiagram-5VMMS53U-a6B741uT.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-DyIEYoHz.js → journeyDiagram-EYS64GPL-Dbht9ICp.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-CkxjqCNr.js → kanban-definition-3QL26DDD-D4OFR8-h.js} +1 -1
- package/web-shell/assets/{layout-BEWc0Al9.js → layout-Dvdh5jRH.js} +1 -1
- package/web-shell/assets/{linear-CNuNxirL.js → linear-Dvc6KIW2.js} +1 -1
- package/web-shell/assets/{mermaid.core-DZBre674.js → mermaid.core-CB36RfIb.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-CpafFz_F.js → mindmap-definition-FBJOCRG2-Fmqo1CjP.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-DfZqk_dq.js → pegDiagram-XKGWAZYB-CCxYBoA4.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-S0UWXlgC.js → pieDiagram-E7YTZNPT-BVHKQFzt.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-dd37_Ohj.js → quadrantDiagram-AXDQQJYC-l95IznwR.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-CH8NJZ7u.js → railroadDiagram-O6MQD6OU-BlLdRdXp.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-CFdqWYih.js → requirementDiagram-EFPCY7ZU-BkDLBR5w.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CsddcEGD.js → sankeyDiagram-P5KCCOFB-jAIqRp65.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-BZ270mGw.js → sequenceDiagram-WJ2MYXX4-f-soZYPr.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-CGaS4DBV.js → sizeCapture-X5ZJPWSS-BzOuAfB2.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-COpIzMu6.js → stateDiagram-HBIQ2CUA-BPLSs12r.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-IRul-LaT.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-CMF889m3.js → swimlanes-XN3QIQJK-D-9E_RIR.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6lgKepA.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-BelnxYz5.js → timeline-definition-24CTP7MA-CT56K-gV.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-CU-NRqIB.js → vennDiagram-4TSXK5OY-B-vi4IyO.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CDNKqWh-.js → wardleyDiagram-VM6X3IG4-C9O7Ju98.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-CLqguL5D.js → xychartDiagram-S5SC5T6Z-6d8w3jg2.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-X35VIWWJ.js +0 -276
- package/web-shell/assets/channel-uMMdTrYk.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DcY-26Ig.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DcY-26Ig.js +0 -1
- package/web-shell/assets/index-CsPwZ1ut.css +0 -36
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-D6qEVAji.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-mem5Jj4m.js +0 -8
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
} from "./chunk-CALNF3Z3.js";
|
|
6
6
|
import {
|
|
7
7
|
StreamJsonOutputAdapter
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-R3JIDRUL.js";
|
|
9
9
|
import {
|
|
10
10
|
ICON,
|
|
11
11
|
SHELL_COMMAND_NAME
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-WXD7INFV.js";
|
|
13
13
|
import {
|
|
14
14
|
theme
|
|
15
15
|
} from "./chunk-4LIPOIXS.js";
|
|
@@ -26,38 +26,52 @@ import {
|
|
|
26
26
|
import {
|
|
27
27
|
require_react
|
|
28
28
|
} from "./chunk-5QWWOFGG.js";
|
|
29
|
+
import {
|
|
30
|
+
getCachedStringWidth,
|
|
31
|
+
toCodePoints
|
|
32
|
+
} from "./chunk-47ECGEJC.js";
|
|
29
33
|
import {
|
|
30
34
|
createLoadedSettingsAdapter
|
|
31
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-QHLHE2OT.js";
|
|
32
36
|
import {
|
|
33
37
|
SettingScope,
|
|
34
38
|
settingExistsInScope
|
|
35
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-WBU2PIZ5.js";
|
|
36
40
|
import {
|
|
37
|
-
|
|
41
|
+
getCurrentLanguage,
|
|
42
|
+
t,
|
|
43
|
+
ta
|
|
38
44
|
} from "./chunk-CRZBDVP2.js";
|
|
39
45
|
import {
|
|
40
46
|
INITIAL_FOLLOWUP_STATE,
|
|
41
47
|
Logger,
|
|
42
48
|
applyProviderInstallPlan,
|
|
49
|
+
createFollowupController
|
|
50
|
+
} from "./chunk-GOEVQADN.js";
|
|
51
|
+
import {
|
|
43
52
|
buildInstallPlan,
|
|
44
|
-
createFollowupController,
|
|
45
53
|
getDefaultBaseUrlForProtocol,
|
|
46
54
|
getDefaultModelIds,
|
|
47
55
|
resolveBaseUrl,
|
|
48
56
|
shouldShowStep
|
|
49
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-2WC3Y7YY.js";
|
|
50
58
|
import {
|
|
51
59
|
qwenOAuth2Events,
|
|
52
60
|
sanitizeForOsc
|
|
53
61
|
} from "./chunk-XDNFODER.js";
|
|
54
62
|
import {
|
|
55
63
|
ShellExecutionService,
|
|
64
|
+
TERMINAL_CSI_REGEX,
|
|
65
|
+
TERMINAL_OSC_REGEX,
|
|
66
|
+
TERMINAL_SHIFT_DCS_REGEX,
|
|
56
67
|
allowEditorTypeInSandbox,
|
|
57
68
|
checkHasEditorType,
|
|
58
69
|
compactToolResultDisplayForHistory,
|
|
59
|
-
isSignalTermination
|
|
60
|
-
|
|
70
|
+
isSignalTermination,
|
|
71
|
+
resolveBranchName,
|
|
72
|
+
stripTerminalControlSequences,
|
|
73
|
+
watchRepoBranch
|
|
74
|
+
} from "./chunk-HJ5UJQQL.js";
|
|
61
75
|
import {
|
|
62
76
|
formatMemoryUsage
|
|
63
77
|
} from "./chunk-CHEIIBT3.js";
|
|
@@ -66,7 +80,7 @@ import {
|
|
|
66
80
|
PromptSuggestionEvent,
|
|
67
81
|
logAuth,
|
|
68
82
|
logPromptSuggestion
|
|
69
|
-
} from "./chunk-
|
|
83
|
+
} from "./chunk-F2NYVASI.js";
|
|
70
84
|
import {
|
|
71
85
|
isBinary
|
|
72
86
|
} from "./chunk-7VEYUF3N.js";
|
|
@@ -435,9 +449,9 @@ var DualOutputBridge = class {
|
|
|
435
449
|
}
|
|
436
450
|
}
|
|
437
451
|
this.active = false;
|
|
438
|
-
this.shutdownPromise = new Promise((
|
|
452
|
+
this.shutdownPromise = new Promise((resolve2) => {
|
|
439
453
|
if (this.stream.closed || this.stream.destroyed) {
|
|
440
|
-
|
|
454
|
+
resolve2();
|
|
441
455
|
return;
|
|
442
456
|
}
|
|
443
457
|
const cleanup = /* @__PURE__ */ __name(() => {
|
|
@@ -446,7 +460,7 @@ var DualOutputBridge = class {
|
|
|
446
460
|
}, "cleanup");
|
|
447
461
|
const onClose = /* @__PURE__ */ __name(() => {
|
|
448
462
|
cleanup();
|
|
449
|
-
|
|
463
|
+
resolve2();
|
|
450
464
|
}, "onClose");
|
|
451
465
|
const onError = /* @__PURE__ */ __name((err) => {
|
|
452
466
|
debugLogger.debug("DualOutput: stream error during shutdown:", err);
|
|
@@ -458,7 +472,7 @@ var DualOutputBridge = class {
|
|
|
458
472
|
} catch (err) {
|
|
459
473
|
cleanup();
|
|
460
474
|
debugLogger.debug("DualOutput: stream end error during shutdown:", err);
|
|
461
|
-
|
|
475
|
+
resolve2();
|
|
462
476
|
}
|
|
463
477
|
});
|
|
464
478
|
return this.shutdownPromise;
|
|
@@ -613,7 +627,7 @@ var RemoteInputWatcher = class {
|
|
|
613
627
|
debugLogger2.warn(`RemoteInput: failed to parse line: ${trimmed}`);
|
|
614
628
|
}
|
|
615
629
|
});
|
|
616
|
-
return new Promise((
|
|
630
|
+
return new Promise((resolve2) => {
|
|
617
631
|
rl.on("close", () => {
|
|
618
632
|
this.bytesRead = consumeUntil;
|
|
619
633
|
if (nextConsumedPrefixHash !== null) {
|
|
@@ -621,7 +635,7 @@ var RemoteInputWatcher = class {
|
|
|
621
635
|
}
|
|
622
636
|
this.reading = false;
|
|
623
637
|
this.processQueue();
|
|
624
|
-
|
|
638
|
+
resolve2();
|
|
625
639
|
});
|
|
626
640
|
});
|
|
627
641
|
}
|
|
@@ -1019,9 +1033,61 @@ var useAuthCommand = /* @__PURE__ */ __name((settings, config, addItem, onAuthCh
|
|
|
1019
1033
|
};
|
|
1020
1034
|
}, "useAuthCommand");
|
|
1021
1035
|
|
|
1022
|
-
// packages/cli/src/ui/hooks/
|
|
1036
|
+
// packages/cli/src/ui/hooks/useGitBranchName.ts
|
|
1023
1037
|
init_esbuild_shims();
|
|
1024
1038
|
var import_react4 = __toESM(require_react(), 1);
|
|
1039
|
+
var BRANCH_POLL_INTERVAL_MS = 5e3;
|
|
1040
|
+
function useGitBranchName(cwd) {
|
|
1041
|
+
const [branchName, setBranchName] = (0, import_react4.useState)(void 0);
|
|
1042
|
+
const branchNameRef = (0, import_react4.useRef)(branchName);
|
|
1043
|
+
branchNameRef.current = branchName;
|
|
1044
|
+
(0, import_react4.useEffect)(() => {
|
|
1045
|
+
let cancelled = false;
|
|
1046
|
+
let dispose;
|
|
1047
|
+
let pollTimer;
|
|
1048
|
+
let refreshGeneration = 0;
|
|
1049
|
+
const refresh = /* @__PURE__ */ __name(async () => {
|
|
1050
|
+
const generation = ++refreshGeneration;
|
|
1051
|
+
const name = await resolveBranchName(cwd);
|
|
1052
|
+
if (!cancelled && generation === refreshGeneration && name !== branchNameRef.current) {
|
|
1053
|
+
setBranchName(name);
|
|
1054
|
+
}
|
|
1055
|
+
}, "refresh");
|
|
1056
|
+
const init = /* @__PURE__ */ __name(async () => {
|
|
1057
|
+
await refresh();
|
|
1058
|
+
if (cancelled) return;
|
|
1059
|
+
const disposer = await watchRepoBranch(cwd, () => {
|
|
1060
|
+
void refresh().catch(() => {
|
|
1061
|
+
});
|
|
1062
|
+
});
|
|
1063
|
+
if (cancelled) {
|
|
1064
|
+
disposer();
|
|
1065
|
+
} else {
|
|
1066
|
+
dispose = disposer;
|
|
1067
|
+
}
|
|
1068
|
+
if (!cancelled) {
|
|
1069
|
+
pollTimer = setInterval(() => {
|
|
1070
|
+
void refresh().catch(() => {
|
|
1071
|
+
});
|
|
1072
|
+
}, BRANCH_POLL_INTERVAL_MS);
|
|
1073
|
+
pollTimer.unref?.();
|
|
1074
|
+
}
|
|
1075
|
+
}, "init");
|
|
1076
|
+
void init().catch(() => {
|
|
1077
|
+
});
|
|
1078
|
+
return () => {
|
|
1079
|
+
cancelled = true;
|
|
1080
|
+
dispose?.();
|
|
1081
|
+
if (pollTimer) clearInterval(pollTimer);
|
|
1082
|
+
};
|
|
1083
|
+
}, [cwd]);
|
|
1084
|
+
return branchName;
|
|
1085
|
+
}
|
|
1086
|
+
__name(useGitBranchName, "useGitBranchName");
|
|
1087
|
+
|
|
1088
|
+
// packages/cli/src/ui/hooks/shellCommandProcessor.ts
|
|
1089
|
+
init_esbuild_shims();
|
|
1090
|
+
var import_react5 = __toESM(require_react(), 1);
|
|
1025
1091
|
import crypto from "node:crypto";
|
|
1026
1092
|
import path from "node:path";
|
|
1027
1093
|
import os from "node:os";
|
|
@@ -1054,8 +1120,8 @@ ${modelContent}
|
|
|
1054
1120
|
}
|
|
1055
1121
|
__name(addShellCommandToLlmHistory, "addShellCommandToLlmHistory");
|
|
1056
1122
|
var useShellCommandProcessor = /* @__PURE__ */ __name((addItemToHistory, setPendingHistoryItem, onExec, onDebugMessage, config, llmClient, setShellInputFocused, terminalWidth, terminalHeight) => {
|
|
1057
|
-
const [activeShellPtyId, setActiveShellPtyId] = (0,
|
|
1058
|
-
const handleShellCommand = (0,
|
|
1123
|
+
const [activeShellPtyId, setActiveShellPtyId] = (0, import_react5.useState)(null);
|
|
1124
|
+
const handleShellCommand = (0, import_react5.useCallback)(
|
|
1059
1125
|
(rawQuery, abortSignal) => {
|
|
1060
1126
|
if (typeof rawQuery !== "string" || rawQuery.trim() === "") {
|
|
1061
1127
|
return false;
|
|
@@ -1084,7 +1150,7 @@ var useShellCommandProcessor = /* @__PURE__ */ __name((addItemToHistory, setPend
|
|
|
1084
1150
|
commandToExecute = `{ ${command}
|
|
1085
1151
|
}; __code=$?; pwd > "${pwdFilePath}"; exit $__code`;
|
|
1086
1152
|
}
|
|
1087
|
-
const executeCommand = /* @__PURE__ */ __name(async (
|
|
1153
|
+
const executeCommand = /* @__PURE__ */ __name(async (resolve2) => {
|
|
1088
1154
|
let lastUpdateTime = Date.now();
|
|
1089
1155
|
let cumulativeStdout = "";
|
|
1090
1156
|
let isBinaryStream = false;
|
|
@@ -1117,7 +1183,7 @@ var useShellCommandProcessor = /* @__PURE__ */ __name((addItemToHistory, setPend
|
|
|
1117
1183
|
}
|
|
1118
1184
|
setActiveShellPtyId(null);
|
|
1119
1185
|
setShellInputFocused(false);
|
|
1120
|
-
|
|
1186
|
+
resolve2();
|
|
1121
1187
|
}, "cleanupShellCommand");
|
|
1122
1188
|
try {
|
|
1123
1189
|
const activeTheme = themeManager.getActiveTheme();
|
|
@@ -1285,8 +1351,8 @@ ${finalOutput}`;
|
|
|
1285
1351
|
cleanupShellCommand();
|
|
1286
1352
|
}
|
|
1287
1353
|
}, "executeCommand");
|
|
1288
|
-
const execPromise = new Promise((
|
|
1289
|
-
executeCommand(
|
|
1354
|
+
const execPromise = new Promise((resolve2) => {
|
|
1355
|
+
executeCommand(resolve2);
|
|
1290
1356
|
});
|
|
1291
1357
|
onExec(execPromise);
|
|
1292
1358
|
return true;
|
|
@@ -1306,20 +1372,98 @@ ${finalOutput}`;
|
|
|
1306
1372
|
return { handleShellCommand, activeShellPtyId };
|
|
1307
1373
|
}, "useShellCommandProcessor");
|
|
1308
1374
|
|
|
1375
|
+
// packages/cli/src/ui/components/stats-helpers.tsx
|
|
1376
|
+
init_esbuild_shims();
|
|
1377
|
+
var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
|
|
1378
|
+
var TAB_DEFS = [
|
|
1379
|
+
{ tab: "session", label: /* @__PURE__ */ __name(() => t("Session"), "label") },
|
|
1380
|
+
{ tab: "activity", label: /* @__PURE__ */ __name(() => t("Activity"), "label") },
|
|
1381
|
+
{ tab: "efficiency", label: /* @__PURE__ */ __name(() => t("Efficiency"), "label") }
|
|
1382
|
+
];
|
|
1383
|
+
var RANGE_CYCLE = ["all", "month", "week", "today"];
|
|
1384
|
+
function getHeatmapColors() {
|
|
1385
|
+
return {
|
|
1386
|
+
0: "#161b22",
|
|
1387
|
+
1: "#0e4429",
|
|
1388
|
+
2: "#006d32",
|
|
1389
|
+
3: "#26a641",
|
|
1390
|
+
4: "#39d353"
|
|
1391
|
+
};
|
|
1392
|
+
}
|
|
1393
|
+
__name(getHeatmapColors, "getHeatmapColors");
|
|
1394
|
+
function getSeriesColors() {
|
|
1395
|
+
return [
|
|
1396
|
+
theme.text.link,
|
|
1397
|
+
theme.status.error,
|
|
1398
|
+
theme.text.accent,
|
|
1399
|
+
theme.status.success,
|
|
1400
|
+
theme.status.warning,
|
|
1401
|
+
theme.text.code
|
|
1402
|
+
];
|
|
1403
|
+
}
|
|
1404
|
+
__name(getSeriesColors, "getSeriesColors");
|
|
1405
|
+
function getRangeLabel(range) {
|
|
1406
|
+
const labels = {
|
|
1407
|
+
today: t("Today"),
|
|
1408
|
+
all: t("All time"),
|
|
1409
|
+
week: t("Last 7 days"),
|
|
1410
|
+
month: t("Last 30 days")
|
|
1411
|
+
};
|
|
1412
|
+
return labels[range] ?? range;
|
|
1413
|
+
}
|
|
1414
|
+
__name(getRangeLabel, "getRangeLabel");
|
|
1415
|
+
function fmtTokens(n) {
|
|
1416
|
+
if (n >= 1e6) return `${(n / 1e6).toFixed(1)}m`;
|
|
1417
|
+
if (n >= 1e3) return `${(n / 1e3).toFixed(1)}k`;
|
|
1418
|
+
return `${n}`;
|
|
1419
|
+
}
|
|
1420
|
+
__name(fmtTokens, "fmtTokens");
|
|
1421
|
+
function fmtDurationShort(ms) {
|
|
1422
|
+
const totalMinutes = Math.floor(ms / 6e4);
|
|
1423
|
+
const days = Math.floor(totalMinutes / 1440);
|
|
1424
|
+
const hours = Math.floor(totalMinutes % 1440 / 60);
|
|
1425
|
+
const minutes = totalMinutes % 60;
|
|
1426
|
+
const d = t("d");
|
|
1427
|
+
const h = t("h");
|
|
1428
|
+
const m = t("m");
|
|
1429
|
+
if (days > 0) return `${days}${d} ${hours}${h} ${minutes}${m}`;
|
|
1430
|
+
if (hours > 0) return `${hours}${h} ${minutes}${m}`;
|
|
1431
|
+
return `${minutes}${m}`;
|
|
1432
|
+
}
|
|
1433
|
+
__name(fmtDurationShort, "fmtDurationShort");
|
|
1434
|
+
function fmtSuccessBar(rate) {
|
|
1435
|
+
const filled = Math.max(0, Math.min(10, Math.round(rate / 10)));
|
|
1436
|
+
return "\u2588".repeat(filled) + "\u2591".repeat(10 - filled);
|
|
1437
|
+
}
|
|
1438
|
+
__name(fmtSuccessBar, "fmtSuccessBar");
|
|
1439
|
+
function getSuccessColor(rate) {
|
|
1440
|
+
if (rate >= 95) return theme.status.success;
|
|
1441
|
+
if (rate >= 80) return theme.status.warning;
|
|
1442
|
+
return theme.status.error;
|
|
1443
|
+
}
|
|
1444
|
+
__name(getSuccessColor, "getSuccessColor");
|
|
1445
|
+
function getCacheColor(rate) {
|
|
1446
|
+
if (rate >= 85) return theme.status.success;
|
|
1447
|
+
if (rate >= 70) return theme.status.warning;
|
|
1448
|
+
return theme.status.error;
|
|
1449
|
+
}
|
|
1450
|
+
__name(getCacheColor, "getCacheColor");
|
|
1451
|
+
var TableRow = /* @__PURE__ */ __name(({ cells }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Box_default, { children: cells.map((cell, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Box_default, { width: cell.width, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Text, { color: cell.color, bold: cell.bold, children: cell.text }) }, i)) }), "TableRow");
|
|
1452
|
+
|
|
1309
1453
|
// packages/cli/src/ui/hooks/useFollowupSuggestions.tsx
|
|
1310
1454
|
init_esbuild_shims();
|
|
1311
|
-
var
|
|
1455
|
+
var import_react6 = __toESM(require_react(), 1);
|
|
1312
1456
|
function useFollowupSuggestionsCLI(options = {}) {
|
|
1313
1457
|
const { enabled = true, onAccept, config, isFocused = true } = options;
|
|
1314
|
-
const [state, setState] = (0,
|
|
1315
|
-
const onAcceptRef = (0,
|
|
1458
|
+
const [state, setState] = (0, import_react6.useState)(INITIAL_FOLLOWUP_STATE);
|
|
1459
|
+
const onAcceptRef = (0, import_react6.useRef)(onAccept);
|
|
1316
1460
|
onAcceptRef.current = onAccept;
|
|
1317
|
-
const configRef = (0,
|
|
1461
|
+
const configRef = (0, import_react6.useRef)(config);
|
|
1318
1462
|
configRef.current = config;
|
|
1319
|
-
const firstKeystrokeAtRef = (0,
|
|
1320
|
-
const prevShownAtRef = (0,
|
|
1321
|
-
const wasFocusedWhenShownRef = (0,
|
|
1322
|
-
(0,
|
|
1463
|
+
const firstKeystrokeAtRef = (0, import_react6.useRef)(0);
|
|
1464
|
+
const prevShownAtRef = (0, import_react6.useRef)(0);
|
|
1465
|
+
const wasFocusedWhenShownRef = (0, import_react6.useRef)(true);
|
|
1466
|
+
(0, import_react6.useEffect)(() => {
|
|
1323
1467
|
if (state.shownAt > 0 && state.shownAt !== prevShownAtRef.current) {
|
|
1324
1468
|
prevShownAtRef.current = state.shownAt;
|
|
1325
1469
|
wasFocusedWhenShownRef.current = isFocused;
|
|
@@ -1328,12 +1472,12 @@ function useFollowupSuggestionsCLI(options = {}) {
|
|
|
1328
1472
|
prevShownAtRef.current = 0;
|
|
1329
1473
|
}
|
|
1330
1474
|
}, [state.shownAt, isFocused]);
|
|
1331
|
-
const recordKeystroke = (0,
|
|
1475
|
+
const recordKeystroke = (0, import_react6.useCallback)(() => {
|
|
1332
1476
|
if (firstKeystrokeAtRef.current === 0 && state.isVisible) {
|
|
1333
1477
|
firstKeystrokeAtRef.current = Date.now();
|
|
1334
1478
|
}
|
|
1335
1479
|
}, [state.isVisible]);
|
|
1336
|
-
const onOutcome = (0,
|
|
1480
|
+
const onOutcome = (0, import_react6.useCallback)(
|
|
1337
1481
|
(params) => {
|
|
1338
1482
|
const cfg = configRef.current;
|
|
1339
1483
|
if (!cfg) return;
|
|
@@ -1358,7 +1502,7 @@ function useFollowupSuggestionsCLI(options = {}) {
|
|
|
1358
1502
|
},
|
|
1359
1503
|
[]
|
|
1360
1504
|
);
|
|
1361
|
-
const controller = (0,
|
|
1505
|
+
const controller = (0, import_react6.useMemo)(
|
|
1362
1506
|
() => createFollowupController({
|
|
1363
1507
|
enabled,
|
|
1364
1508
|
onStateChange: setState,
|
|
@@ -1367,13 +1511,13 @@ function useFollowupSuggestionsCLI(options = {}) {
|
|
|
1367
1511
|
}),
|
|
1368
1512
|
[enabled, onOutcome]
|
|
1369
1513
|
);
|
|
1370
|
-
(0,
|
|
1514
|
+
(0, import_react6.useEffect)(() => {
|
|
1371
1515
|
if (!enabled) {
|
|
1372
1516
|
controller.clear();
|
|
1373
1517
|
}
|
|
1374
1518
|
return () => controller.cleanup();
|
|
1375
1519
|
}, [controller, enabled]);
|
|
1376
|
-
return (0,
|
|
1520
|
+
return (0, import_react6.useMemo)(
|
|
1377
1521
|
() => ({
|
|
1378
1522
|
state,
|
|
1379
1523
|
setSuggestion: controller.setSuggestion,
|
|
@@ -1387,6 +1531,330 @@ function useFollowupSuggestionsCLI(options = {}) {
|
|
|
1387
1531
|
}
|
|
1388
1532
|
__name(useFollowupSuggestionsCLI, "useFollowupSuggestionsCLI");
|
|
1389
1533
|
|
|
1534
|
+
// packages/cli/src/ui/components/AsciiArt.ts
|
|
1535
|
+
init_esbuild_shims();
|
|
1536
|
+
var shortAsciiLogo = `
|
|
1537
|
+
\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584 \u2584\u2584
|
|
1538
|
+
\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551
|
|
1539
|
+
\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551
|
|
1540
|
+
\u2588\u2588\u2551\u2584\u2584 \u2588\u2588\u2551\u2588\u2588\u2551\u2588\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551
|
|
1541
|
+
\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u255A\u2588\u2588\u2588\u2554\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551
|
|
1542
|
+
\u255A\u2550\u2550\u2580\u2580\u2550\u255D \u255A\u2550\u2550\u255D\u255A\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D
|
|
1543
|
+
`;
|
|
1544
|
+
|
|
1545
|
+
// packages/cli/src/ui/utils/customBanner.ts
|
|
1546
|
+
init_esbuild_shims();
|
|
1547
|
+
import * as fs2 from "node:fs";
|
|
1548
|
+
import * as path2 from "node:path";
|
|
1549
|
+
var debugLogger4 = createDebugLogger("BANNER");
|
|
1550
|
+
var MAX_FILE_BYTES = 64 * 1024;
|
|
1551
|
+
var MAX_ART_LINES = 200;
|
|
1552
|
+
var MAX_ART_COLS = 200;
|
|
1553
|
+
var MAX_TITLE_LENGTH = 80;
|
|
1554
|
+
var MAX_SUBTITLE_LENGTH = 160;
|
|
1555
|
+
function resolveCustomBanner(settings) {
|
|
1556
|
+
const ui = settings.merged.ui;
|
|
1557
|
+
const cache = /* @__PURE__ */ new Map();
|
|
1558
|
+
const title = sanitizeTitle(ui?.customBannerTitle);
|
|
1559
|
+
const subtitle = sanitizeSubtitle(ui?.customBannerSubtitle);
|
|
1560
|
+
const scoped = collectScopedTiers(settings);
|
|
1561
|
+
return {
|
|
1562
|
+
asciiArt: {
|
|
1563
|
+
small: scoped.small && resolveTier(scoped.small.source, scoped.small.dir, cache),
|
|
1564
|
+
large: scoped.large && resolveTier(scoped.large.source, scoped.large.dir, cache)
|
|
1565
|
+
},
|
|
1566
|
+
title,
|
|
1567
|
+
subtitle
|
|
1568
|
+
};
|
|
1569
|
+
}
|
|
1570
|
+
__name(resolveCustomBanner, "resolveCustomBanner");
|
|
1571
|
+
function collectScopedTiers(settings) {
|
|
1572
|
+
const order = [
|
|
1573
|
+
settings.system,
|
|
1574
|
+
...settings.isTrusted ? [settings.workspace] : [],
|
|
1575
|
+
settings.user,
|
|
1576
|
+
settings.systemDefaults
|
|
1577
|
+
];
|
|
1578
|
+
let small;
|
|
1579
|
+
let large;
|
|
1580
|
+
for (const file of order) {
|
|
1581
|
+
if (small && large) break;
|
|
1582
|
+
const raw = file.settings.ui?.customAsciiArt;
|
|
1583
|
+
if (raw === void 0 || raw === null) continue;
|
|
1584
|
+
const tiers = normalizeTiers(raw);
|
|
1585
|
+
if (!tiers) continue;
|
|
1586
|
+
const dir = file.path ? path2.dirname(file.path) : "";
|
|
1587
|
+
const considerTier = /* @__PURE__ */ __name((tier, label) => {
|
|
1588
|
+
if (tier === void 0) return void 0;
|
|
1589
|
+
const isPathSource = typeof tier === "object";
|
|
1590
|
+
if (isPathSource && !dir) {
|
|
1591
|
+
debugLogger4.warn(
|
|
1592
|
+
`Ignoring ui.customAsciiArt.${label}: {path} entry has no owning settings file directory to resolve against.`
|
|
1593
|
+
);
|
|
1594
|
+
return void 0;
|
|
1595
|
+
}
|
|
1596
|
+
return { source: tier, dir };
|
|
1597
|
+
}, "considerTier");
|
|
1598
|
+
if (!small) {
|
|
1599
|
+
const next = considerTier(tiers.small, "small");
|
|
1600
|
+
if (next) small = next;
|
|
1601
|
+
}
|
|
1602
|
+
if (!large) {
|
|
1603
|
+
const next = considerTier(tiers.large, "large");
|
|
1604
|
+
if (next) large = next;
|
|
1605
|
+
}
|
|
1606
|
+
}
|
|
1607
|
+
return { small, large };
|
|
1608
|
+
}
|
|
1609
|
+
__name(collectScopedTiers, "collectScopedTiers");
|
|
1610
|
+
function normalizeTiers(value) {
|
|
1611
|
+
if (typeof value === "string") {
|
|
1612
|
+
return { small: value, large: value };
|
|
1613
|
+
}
|
|
1614
|
+
if (!value || typeof value !== "object") {
|
|
1615
|
+
debugLogger4.warn(
|
|
1616
|
+
"Ignoring ui.customAsciiArt: expected a string, {path}, or {small,large} object."
|
|
1617
|
+
);
|
|
1618
|
+
return void 0;
|
|
1619
|
+
}
|
|
1620
|
+
const hasPath = "path" in value && typeof value.path === "string";
|
|
1621
|
+
const hasTierKeys = "small" in value || "large" in value;
|
|
1622
|
+
if (hasPath && hasTierKeys) {
|
|
1623
|
+
debugLogger4.warn(
|
|
1624
|
+
"Ignoring ui.customAsciiArt: object combines `path` with `small` / `large`. Use one shape or the other."
|
|
1625
|
+
);
|
|
1626
|
+
return void 0;
|
|
1627
|
+
}
|
|
1628
|
+
if (hasPath) {
|
|
1629
|
+
return { small: value, large: value };
|
|
1630
|
+
}
|
|
1631
|
+
if (hasTierKeys) {
|
|
1632
|
+
const tiered = value;
|
|
1633
|
+
return {
|
|
1634
|
+
small: validateSource(tiered.small),
|
|
1635
|
+
large: validateSource(tiered.large)
|
|
1636
|
+
};
|
|
1637
|
+
}
|
|
1638
|
+
debugLogger4.warn(
|
|
1639
|
+
"Ignoring ui.customAsciiArt: expected a string, {path}, or {small,large} object."
|
|
1640
|
+
);
|
|
1641
|
+
return void 0;
|
|
1642
|
+
}
|
|
1643
|
+
__name(normalizeTiers, "normalizeTiers");
|
|
1644
|
+
function validateSource(source) {
|
|
1645
|
+
if (source === void 0 || source === null) return void 0;
|
|
1646
|
+
if (typeof source === "string") return source;
|
|
1647
|
+
if (typeof source === "object" && "path" in source && typeof source.path === "string") {
|
|
1648
|
+
return { path: source.path };
|
|
1649
|
+
}
|
|
1650
|
+
debugLogger4.warn(
|
|
1651
|
+
"Ignoring ui.customAsciiArt tier: expected a string or {path} object."
|
|
1652
|
+
);
|
|
1653
|
+
return void 0;
|
|
1654
|
+
}
|
|
1655
|
+
__name(validateSource, "validateSource");
|
|
1656
|
+
function resolveTier(source, ownerDir, cache) {
|
|
1657
|
+
if (source === void 0) return void 0;
|
|
1658
|
+
if (typeof source === "string") {
|
|
1659
|
+
const trimmed = source.trim();
|
|
1660
|
+
if (!trimmed) return void 0;
|
|
1661
|
+
const key = `inline:${source}`;
|
|
1662
|
+
return memo(cache, key, () => sanitizeArt(source));
|
|
1663
|
+
}
|
|
1664
|
+
const resolvedPath = path2.isAbsolute(source.path) ? source.path : path2.resolve(ownerDir, source.path);
|
|
1665
|
+
return memo(cache, `path:${resolvedPath}`, () => {
|
|
1666
|
+
const raw = readArtFile(resolvedPath);
|
|
1667
|
+
if (raw === void 0) return void 0;
|
|
1668
|
+
return sanitizeArt(raw);
|
|
1669
|
+
});
|
|
1670
|
+
}
|
|
1671
|
+
__name(resolveTier, "resolveTier");
|
|
1672
|
+
function memo(cache, key, compute) {
|
|
1673
|
+
const hit = cache.get(key);
|
|
1674
|
+
if (hit) return hit.value;
|
|
1675
|
+
const value = compute();
|
|
1676
|
+
cache.set(key, { value });
|
|
1677
|
+
return value;
|
|
1678
|
+
}
|
|
1679
|
+
__name(memo, "memo");
|
|
1680
|
+
function readArtFile(absolutePath) {
|
|
1681
|
+
let fd;
|
|
1682
|
+
try {
|
|
1683
|
+
let preOpenStat;
|
|
1684
|
+
try {
|
|
1685
|
+
preOpenStat = fs2.lstatSync(absolutePath);
|
|
1686
|
+
} catch (err) {
|
|
1687
|
+
debugLogger4.warn(
|
|
1688
|
+
`Failed to stat ui.customAsciiArt at ${absolutePath}: ${err.message}`
|
|
1689
|
+
);
|
|
1690
|
+
return void 0;
|
|
1691
|
+
}
|
|
1692
|
+
if (!preOpenStat.isFile()) {
|
|
1693
|
+
debugLogger4.warn(
|
|
1694
|
+
`Ignoring ui.customAsciiArt: ${absolutePath} is not a regular file.`
|
|
1695
|
+
);
|
|
1696
|
+
return void 0;
|
|
1697
|
+
}
|
|
1698
|
+
const flags = typeof fs2.constants.O_NOFOLLOW === "number" ? fs2.constants.O_RDONLY | fs2.constants.O_NOFOLLOW : fs2.constants.O_RDONLY;
|
|
1699
|
+
fd = fs2.openSync(absolutePath, flags);
|
|
1700
|
+
const stat = fs2.fstatSync(fd);
|
|
1701
|
+
if (!stat.isFile()) {
|
|
1702
|
+
debugLogger4.warn(
|
|
1703
|
+
`Ignoring ui.customAsciiArt: ${absolutePath} is not a regular file.`
|
|
1704
|
+
);
|
|
1705
|
+
return void 0;
|
|
1706
|
+
}
|
|
1707
|
+
const size = Math.min(stat.size, MAX_FILE_BYTES);
|
|
1708
|
+
const buffer = Buffer.alloc(size);
|
|
1709
|
+
fs2.readSync(fd, buffer, 0, size, 0);
|
|
1710
|
+
if (stat.size > MAX_FILE_BYTES) {
|
|
1711
|
+
debugLogger4.warn(
|
|
1712
|
+
`Truncated ui.customAsciiArt at ${absolutePath}: file is ${stat.size} bytes, capped at ${MAX_FILE_BYTES}.`
|
|
1713
|
+
);
|
|
1714
|
+
}
|
|
1715
|
+
return buffer.toString("utf8");
|
|
1716
|
+
} catch (err) {
|
|
1717
|
+
debugLogger4.warn(
|
|
1718
|
+
`Failed to read ui.customAsciiArt at ${absolutePath}: ${err.message}`
|
|
1719
|
+
);
|
|
1720
|
+
return void 0;
|
|
1721
|
+
} finally {
|
|
1722
|
+
if (fd !== void 0) {
|
|
1723
|
+
try {
|
|
1724
|
+
fs2.closeSync(fd);
|
|
1725
|
+
} catch {
|
|
1726
|
+
}
|
|
1727
|
+
}
|
|
1728
|
+
}
|
|
1729
|
+
}
|
|
1730
|
+
__name(readArtFile, "readArtFile");
|
|
1731
|
+
function sanitizeArt(input) {
|
|
1732
|
+
let s = input.replace(/\r\n?/g, "\n");
|
|
1733
|
+
s = s.replace(TERMINAL_OSC_REGEX, " ").replace(TERMINAL_CSI_REGEX, " ").replace(TERMINAL_SHIFT_DCS_REGEX, " ");
|
|
1734
|
+
s = s.replace(/[\x00-\x08\x0b-\x1f\x7f-\x9f]/g, " ");
|
|
1735
|
+
const rawLines = s.split("\n");
|
|
1736
|
+
const truncatedRows = rawLines.length > MAX_ART_LINES;
|
|
1737
|
+
const limitedLines = truncatedRows ? rawLines.slice(0, MAX_ART_LINES) : rawLines;
|
|
1738
|
+
let truncatedCols = false;
|
|
1739
|
+
const cappedLines = limitedLines.map((line) => {
|
|
1740
|
+
const detabbed = line.replace(/\t/g, " ");
|
|
1741
|
+
const trimmed = detabbed.replace(/\s+$/u, "");
|
|
1742
|
+
if (getCachedStringWidth(trimmed) <= MAX_ART_COLS) {
|
|
1743
|
+
return trimmed;
|
|
1744
|
+
}
|
|
1745
|
+
truncatedCols = true;
|
|
1746
|
+
const codePoints = toCodePoints(trimmed);
|
|
1747
|
+
let kept = "";
|
|
1748
|
+
for (const cp of codePoints) {
|
|
1749
|
+
if (getCachedStringWidth(kept + cp) > MAX_ART_COLS) break;
|
|
1750
|
+
kept += cp;
|
|
1751
|
+
}
|
|
1752
|
+
return kept;
|
|
1753
|
+
});
|
|
1754
|
+
while (cappedLines.length > 0 && cappedLines[cappedLines.length - 1] === "") {
|
|
1755
|
+
cappedLines.pop();
|
|
1756
|
+
}
|
|
1757
|
+
if (cappedLines.length === 0) return "";
|
|
1758
|
+
if (truncatedRows) {
|
|
1759
|
+
debugLogger4.warn(`Truncated ui.customAsciiArt to ${MAX_ART_LINES} lines.`);
|
|
1760
|
+
}
|
|
1761
|
+
if (truncatedCols) {
|
|
1762
|
+
debugLogger4.warn(
|
|
1763
|
+
`Truncated ui.customAsciiArt to ${MAX_ART_COLS} columns per line.`
|
|
1764
|
+
);
|
|
1765
|
+
}
|
|
1766
|
+
return cappedLines.join("\n");
|
|
1767
|
+
}
|
|
1768
|
+
__name(sanitizeArt, "sanitizeArt");
|
|
1769
|
+
function sanitizeTitle(raw) {
|
|
1770
|
+
return sanitizeSingleLine(raw, MAX_TITLE_LENGTH, "ui.customBannerTitle");
|
|
1771
|
+
}
|
|
1772
|
+
__name(sanitizeTitle, "sanitizeTitle");
|
|
1773
|
+
function sanitizeSubtitle(raw) {
|
|
1774
|
+
return sanitizeSingleLine(
|
|
1775
|
+
raw,
|
|
1776
|
+
MAX_SUBTITLE_LENGTH,
|
|
1777
|
+
"ui.customBannerSubtitle"
|
|
1778
|
+
);
|
|
1779
|
+
}
|
|
1780
|
+
__name(sanitizeSubtitle, "sanitizeSubtitle");
|
|
1781
|
+
function sanitizeSingleLine(raw, maxLength, fieldLabel) {
|
|
1782
|
+
if (typeof raw !== "string") return void 0;
|
|
1783
|
+
let t2 = stripTerminalControlSequences(raw).replace(/\s+/g, " ").trim();
|
|
1784
|
+
if (!t2) return void 0;
|
|
1785
|
+
if (t2.length > maxLength) {
|
|
1786
|
+
debugLogger4.warn(`Truncated ${fieldLabel} to ${maxLength} characters.`);
|
|
1787
|
+
t2 = t2.slice(0, maxLength);
|
|
1788
|
+
}
|
|
1789
|
+
return t2;
|
|
1790
|
+
}
|
|
1791
|
+
__name(sanitizeSingleLine, "sanitizeSingleLine");
|
|
1792
|
+
function pickAsciiArtTier(small, large, availableWidth, logoGap, minInfoPanelWidth, measureWidth) {
|
|
1793
|
+
for (const candidate of [large, small]) {
|
|
1794
|
+
if (!candidate) continue;
|
|
1795
|
+
const w = measureWidth(candidate);
|
|
1796
|
+
if (availableWidth >= w + logoGap + minInfoPanelWidth) {
|
|
1797
|
+
return candidate;
|
|
1798
|
+
}
|
|
1799
|
+
}
|
|
1800
|
+
return void 0;
|
|
1801
|
+
}
|
|
1802
|
+
__name(pickAsciiArtTier, "pickAsciiArtTier");
|
|
1803
|
+
|
|
1804
|
+
// packages/cli/src/ui/hooks/usePhraseCycler.ts
|
|
1805
|
+
init_esbuild_shims();
|
|
1806
|
+
var import_react7 = __toESM(require_react(), 1);
|
|
1807
|
+
var WITTY_LOADING_PHRASES = ["I'm Feeling Lucky"];
|
|
1808
|
+
var PHRASE_CHANGE_INTERVAL_MS = 15e3;
|
|
1809
|
+
var usePhraseCycler = /* @__PURE__ */ __name((isActive, isWaiting, customPhrases) => {
|
|
1810
|
+
const currentLanguage = getCurrentLanguage();
|
|
1811
|
+
const loadingPhrases = (0, import_react7.useMemo)(() => {
|
|
1812
|
+
if (customPhrases && customPhrases.length > 0) {
|
|
1813
|
+
return customPhrases;
|
|
1814
|
+
}
|
|
1815
|
+
const translatedPhrases = ta("WITTY_LOADING_PHRASES");
|
|
1816
|
+
return translatedPhrases.length > 0 ? translatedPhrases : WITTY_LOADING_PHRASES;
|
|
1817
|
+
}, [customPhrases, currentLanguage]);
|
|
1818
|
+
const [currentLoadingPhrase, setCurrentLoadingPhrase] = (0, import_react7.useState)(
|
|
1819
|
+
loadingPhrases[0]
|
|
1820
|
+
);
|
|
1821
|
+
const phraseIntervalRef = (0, import_react7.useRef)(null);
|
|
1822
|
+
(0, import_react7.useEffect)(() => {
|
|
1823
|
+
if (isWaiting) {
|
|
1824
|
+
setCurrentLoadingPhrase(t("Waiting for user confirmation..."));
|
|
1825
|
+
if (phraseIntervalRef.current) {
|
|
1826
|
+
clearInterval(phraseIntervalRef.current);
|
|
1827
|
+
phraseIntervalRef.current = null;
|
|
1828
|
+
}
|
|
1829
|
+
} else if (isActive) {
|
|
1830
|
+
if (phraseIntervalRef.current) {
|
|
1831
|
+
clearInterval(phraseIntervalRef.current);
|
|
1832
|
+
}
|
|
1833
|
+
const initialRandomIndex = Math.floor(
|
|
1834
|
+
Math.random() * loadingPhrases.length
|
|
1835
|
+
);
|
|
1836
|
+
setCurrentLoadingPhrase(loadingPhrases[initialRandomIndex]);
|
|
1837
|
+
phraseIntervalRef.current = setInterval(() => {
|
|
1838
|
+
const randomIndex = Math.floor(Math.random() * loadingPhrases.length);
|
|
1839
|
+
setCurrentLoadingPhrase(loadingPhrases[randomIndex]);
|
|
1840
|
+
}, PHRASE_CHANGE_INTERVAL_MS);
|
|
1841
|
+
} else {
|
|
1842
|
+
if (phraseIntervalRef.current) {
|
|
1843
|
+
clearInterval(phraseIntervalRef.current);
|
|
1844
|
+
phraseIntervalRef.current = null;
|
|
1845
|
+
}
|
|
1846
|
+
setCurrentLoadingPhrase(loadingPhrases[0]);
|
|
1847
|
+
}
|
|
1848
|
+
return () => {
|
|
1849
|
+
if (phraseIntervalRef.current) {
|
|
1850
|
+
clearInterval(phraseIntervalRef.current);
|
|
1851
|
+
phraseIntervalRef.current = null;
|
|
1852
|
+
}
|
|
1853
|
+
};
|
|
1854
|
+
}, [isActive, isWaiting, loadingPhrases]);
|
|
1855
|
+
return currentLoadingPhrase;
|
|
1856
|
+
}, "usePhraseCycler");
|
|
1857
|
+
|
|
1390
1858
|
// packages/cli/src/ui/components/mcp/utils.ts
|
|
1391
1859
|
init_esbuild_shims();
|
|
1392
1860
|
|
|
@@ -1539,87 +2007,9 @@ function getScopeMessageForSetting(settingKey, selectedScope, settings) {
|
|
|
1539
2007
|
}
|
|
1540
2008
|
__name(getScopeMessageForSetting, "getScopeMessageForSetting");
|
|
1541
2009
|
|
|
1542
|
-
// packages/cli/src/ui/components/stats-helpers.tsx
|
|
1543
|
-
init_esbuild_shims();
|
|
1544
|
-
var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
|
|
1545
|
-
var TAB_DEFS = [
|
|
1546
|
-
{ tab: "session", label: /* @__PURE__ */ __name(() => t("Session"), "label") },
|
|
1547
|
-
{ tab: "activity", label: /* @__PURE__ */ __name(() => t("Activity"), "label") },
|
|
1548
|
-
{ tab: "efficiency", label: /* @__PURE__ */ __name(() => t("Efficiency"), "label") }
|
|
1549
|
-
];
|
|
1550
|
-
var RANGE_CYCLE = ["all", "month", "week", "today"];
|
|
1551
|
-
function getHeatmapColors() {
|
|
1552
|
-
return {
|
|
1553
|
-
0: "#161b22",
|
|
1554
|
-
1: "#0e4429",
|
|
1555
|
-
2: "#006d32",
|
|
1556
|
-
3: "#26a641",
|
|
1557
|
-
4: "#39d353"
|
|
1558
|
-
};
|
|
1559
|
-
}
|
|
1560
|
-
__name(getHeatmapColors, "getHeatmapColors");
|
|
1561
|
-
function getSeriesColors() {
|
|
1562
|
-
return [
|
|
1563
|
-
theme.text.link,
|
|
1564
|
-
theme.status.error,
|
|
1565
|
-
theme.text.accent,
|
|
1566
|
-
theme.status.success,
|
|
1567
|
-
theme.status.warning,
|
|
1568
|
-
theme.text.code
|
|
1569
|
-
];
|
|
1570
|
-
}
|
|
1571
|
-
__name(getSeriesColors, "getSeriesColors");
|
|
1572
|
-
function getRangeLabel(range) {
|
|
1573
|
-
const labels = {
|
|
1574
|
-
today: t("Today"),
|
|
1575
|
-
all: t("All time"),
|
|
1576
|
-
week: t("Last 7 days"),
|
|
1577
|
-
month: t("Last 30 days")
|
|
1578
|
-
};
|
|
1579
|
-
return labels[range] ?? range;
|
|
1580
|
-
}
|
|
1581
|
-
__name(getRangeLabel, "getRangeLabel");
|
|
1582
|
-
function fmtTokens(n) {
|
|
1583
|
-
if (n >= 1e6) return `${(n / 1e6).toFixed(1)}m`;
|
|
1584
|
-
if (n >= 1e3) return `${(n / 1e3).toFixed(1)}k`;
|
|
1585
|
-
return `${n}`;
|
|
1586
|
-
}
|
|
1587
|
-
__name(fmtTokens, "fmtTokens");
|
|
1588
|
-
function fmtDurationShort(ms) {
|
|
1589
|
-
const totalMinutes = Math.floor(ms / 6e4);
|
|
1590
|
-
const days = Math.floor(totalMinutes / 1440);
|
|
1591
|
-
const hours = Math.floor(totalMinutes % 1440 / 60);
|
|
1592
|
-
const minutes = totalMinutes % 60;
|
|
1593
|
-
const d = t("d");
|
|
1594
|
-
const h = t("h");
|
|
1595
|
-
const m = t("m");
|
|
1596
|
-
if (days > 0) return `${days}${d} ${hours}${h} ${minutes}${m}`;
|
|
1597
|
-
if (hours > 0) return `${hours}${h} ${minutes}${m}`;
|
|
1598
|
-
return `${minutes}${m}`;
|
|
1599
|
-
}
|
|
1600
|
-
__name(fmtDurationShort, "fmtDurationShort");
|
|
1601
|
-
function fmtSuccessBar(rate) {
|
|
1602
|
-
const filled = Math.max(0, Math.min(10, Math.round(rate / 10)));
|
|
1603
|
-
return "\u2588".repeat(filled) + "\u2591".repeat(10 - filled);
|
|
1604
|
-
}
|
|
1605
|
-
__name(fmtSuccessBar, "fmtSuccessBar");
|
|
1606
|
-
function getSuccessColor(rate) {
|
|
1607
|
-
if (rate >= 95) return theme.status.success;
|
|
1608
|
-
if (rate >= 80) return theme.status.warning;
|
|
1609
|
-
return theme.status.error;
|
|
1610
|
-
}
|
|
1611
|
-
__name(getSuccessColor, "getSuccessColor");
|
|
1612
|
-
function getCacheColor(rate) {
|
|
1613
|
-
if (rate >= 85) return theme.status.success;
|
|
1614
|
-
if (rate >= 70) return theme.status.warning;
|
|
1615
|
-
return theme.status.error;
|
|
1616
|
-
}
|
|
1617
|
-
__name(getCacheColor, "getCacheColor");
|
|
1618
|
-
var TableRow = /* @__PURE__ */ __name(({ cells }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Box_default, { children: cells.map((cell, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Box_default, { width: cell.width, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Text, { color: cell.color, bold: cell.bold, children: cell.text }) }, i)) }), "TableRow");
|
|
1619
|
-
|
|
1620
2010
|
// packages/cli/src/ui/auth/useProviderSetupFlow.ts
|
|
1621
2011
|
init_esbuild_shims();
|
|
1622
|
-
var
|
|
2012
|
+
var import_react8 = __toESM(require_react(), 1);
|
|
1623
2013
|
var STEP_ORDER = [
|
|
1624
2014
|
"protocol",
|
|
1625
2015
|
"baseUrl",
|
|
@@ -1636,28 +2026,28 @@ function getVisibleSteps(config) {
|
|
|
1636
2026
|
}
|
|
1637
2027
|
__name(getVisibleSteps, "getVisibleSteps");
|
|
1638
2028
|
function useProviderSetupFlow(onSubmit) {
|
|
1639
|
-
const [provider, setProvider] = (0,
|
|
1640
|
-
const [visibleSteps, setVisibleSteps] = (0,
|
|
1641
|
-
const [stepIndex, setStepIndex] = (0,
|
|
1642
|
-
const [protocol, setProtocol] = (0,
|
|
1643
|
-
const [baseUrl, setBaseUrl] = (0,
|
|
1644
|
-
const [baseUrlPlaceholder, setBaseUrlPlaceholder] = (0,
|
|
1645
|
-
const [baseUrlOptionIndex, setBaseUrlOptionIndex] = (0,
|
|
1646
|
-
const [baseUrlError, setBaseUrlError] = (0,
|
|
1647
|
-
const [apiKey, setApiKey] = (0,
|
|
1648
|
-
const [apiKeyError, setApiKeyError] = (0,
|
|
1649
|
-
const [modelIds, setModelIds] = (0,
|
|
1650
|
-
const [modelIdsError, setModelIdsError] = (0,
|
|
1651
|
-
const [thinkingEnabled, setThinkingEnabled] = (0,
|
|
1652
|
-
const [modalityEnabled, setModalityEnabled] = (0,
|
|
1653
|
-
const [modalityImage, setModalityImage] = (0,
|
|
1654
|
-
const [modalityVideo, setModalityVideo] = (0,
|
|
1655
|
-
const [modalityAudio, setModalityAudio] = (0,
|
|
1656
|
-
const [modalityPdf, setModalityPdf] = (0,
|
|
1657
|
-
const [contextWindowSize, setContextWindowSize] = (0,
|
|
1658
|
-
const [focusedConfigIndex, setFocusedConfigIndex] = (0,
|
|
2029
|
+
const [provider, setProvider] = (0, import_react8.useState)(null);
|
|
2030
|
+
const [visibleSteps, setVisibleSteps] = (0, import_react8.useState)([]);
|
|
2031
|
+
const [stepIndex, setStepIndex] = (0, import_react8.useState)(0);
|
|
2032
|
+
const [protocol, setProtocol] = (0, import_react8.useState)("openai" /* USE_OPENAI */);
|
|
2033
|
+
const [baseUrl, setBaseUrl] = (0, import_react8.useState)("");
|
|
2034
|
+
const [baseUrlPlaceholder, setBaseUrlPlaceholder] = (0, import_react8.useState)("");
|
|
2035
|
+
const [baseUrlOptionIndex, setBaseUrlOptionIndex] = (0, import_react8.useState)(0);
|
|
2036
|
+
const [baseUrlError, setBaseUrlError] = (0, import_react8.useState)(null);
|
|
2037
|
+
const [apiKey, setApiKey] = (0, import_react8.useState)("");
|
|
2038
|
+
const [apiKeyError, setApiKeyError] = (0, import_react8.useState)(null);
|
|
2039
|
+
const [modelIds, setModelIds] = (0, import_react8.useState)("");
|
|
2040
|
+
const [modelIdsError, setModelIdsError] = (0, import_react8.useState)(null);
|
|
2041
|
+
const [thinkingEnabled, setThinkingEnabled] = (0, import_react8.useState)(false);
|
|
2042
|
+
const [modalityEnabled, setModalityEnabled] = (0, import_react8.useState)(false);
|
|
2043
|
+
const [modalityImage, setModalityImage] = (0, import_react8.useState)(true);
|
|
2044
|
+
const [modalityVideo, setModalityVideo] = (0, import_react8.useState)(true);
|
|
2045
|
+
const [modalityAudio, setModalityAudio] = (0, import_react8.useState)(false);
|
|
2046
|
+
const [modalityPdf, setModalityPdf] = (0, import_react8.useState)(false);
|
|
2047
|
+
const [contextWindowSize, setContextWindowSize] = (0, import_react8.useState)("");
|
|
2048
|
+
const [focusedConfigIndex, setFocusedConfigIndex] = (0, import_react8.useState)(0);
|
|
1659
2049
|
const currentStep = visibleSteps[stepIndex] ?? null;
|
|
1660
|
-
const start = (0,
|
|
2050
|
+
const start = (0, import_react8.useCallback)(
|
|
1661
2051
|
(config, initialProtocol, existingEnv, existingModelIds) => {
|
|
1662
2052
|
setProvider(config);
|
|
1663
2053
|
const steps = getVisibleSteps(config);
|
|
@@ -1694,12 +2084,12 @@ function useProviderSetupFlow(onSubmit) {
|
|
|
1694
2084
|
},
|
|
1695
2085
|
[]
|
|
1696
2086
|
);
|
|
1697
|
-
const reset = (0,
|
|
2087
|
+
const reset = (0, import_react8.useCallback)(() => {
|
|
1698
2088
|
setProvider(null);
|
|
1699
2089
|
setVisibleSteps([]);
|
|
1700
2090
|
setStepIndex(0);
|
|
1701
2091
|
}, []);
|
|
1702
|
-
const goBack = (0,
|
|
2092
|
+
const goBack = (0, import_react8.useCallback)(() => {
|
|
1703
2093
|
if (stepIndex > 0) {
|
|
1704
2094
|
setStepIndex((i) => i - 1);
|
|
1705
2095
|
return true;
|
|
@@ -1707,10 +2097,10 @@ function useProviderSetupFlow(onSubmit) {
|
|
|
1707
2097
|
reset();
|
|
1708
2098
|
return false;
|
|
1709
2099
|
}, [stepIndex, reset]);
|
|
1710
|
-
const goNext = (0,
|
|
2100
|
+
const goNext = (0, import_react8.useCallback)(() => {
|
|
1711
2101
|
setStepIndex((i) => Math.min(i + 1, visibleSteps.length - 1));
|
|
1712
2102
|
}, [visibleSteps]);
|
|
1713
|
-
const selectProtocol = (0,
|
|
2103
|
+
const selectProtocol = (0, import_react8.useCallback)(
|
|
1714
2104
|
(selectedProtocol) => {
|
|
1715
2105
|
setProtocol(selectedProtocol);
|
|
1716
2106
|
setBaseUrl("");
|
|
@@ -1721,7 +2111,7 @@ function useProviderSetupFlow(onSubmit) {
|
|
|
1721
2111
|
},
|
|
1722
2112
|
[goNext]
|
|
1723
2113
|
);
|
|
1724
|
-
const selectBaseUrl = (0,
|
|
2114
|
+
const selectBaseUrl = (0, import_react8.useCallback)(
|
|
1725
2115
|
(selectedUrl) => {
|
|
1726
2116
|
setBaseUrl(selectedUrl);
|
|
1727
2117
|
setBaseUrlError(null);
|
|
@@ -1729,7 +2119,7 @@ function useProviderSetupFlow(onSubmit) {
|
|
|
1729
2119
|
},
|
|
1730
2120
|
[goNext]
|
|
1731
2121
|
);
|
|
1732
|
-
const submitBaseUrl = (0,
|
|
2122
|
+
const submitBaseUrl = (0, import_react8.useCallback)(() => {
|
|
1733
2123
|
const effective = baseUrl.trim() || baseUrlPlaceholder.trim();
|
|
1734
2124
|
if (!effective) {
|
|
1735
2125
|
setBaseUrlError(t("Base URL cannot be empty."));
|
|
@@ -1746,15 +2136,15 @@ function useProviderSetupFlow(onSubmit) {
|
|
|
1746
2136
|
goNext();
|
|
1747
2137
|
return true;
|
|
1748
2138
|
}, [baseUrl, baseUrlPlaceholder, goNext]);
|
|
1749
|
-
const changeBaseUrl = (0,
|
|
2139
|
+
const changeBaseUrl = (0, import_react8.useCallback)((value) => {
|
|
1750
2140
|
setBaseUrl(value);
|
|
1751
2141
|
setBaseUrlError(null);
|
|
1752
2142
|
}, []);
|
|
1753
|
-
const changeApiKey = (0,
|
|
2143
|
+
const changeApiKey = (0, import_react8.useCallback)((value) => {
|
|
1754
2144
|
setApiKey(value);
|
|
1755
2145
|
setApiKeyError(null);
|
|
1756
2146
|
}, []);
|
|
1757
|
-
const buildCurrentInputs = (0,
|
|
2147
|
+
const buildCurrentInputs = (0, import_react8.useCallback)(
|
|
1758
2148
|
(overrides) => ({
|
|
1759
2149
|
protocol: provider?.protocolOptions ? protocol : void 0,
|
|
1760
2150
|
baseUrl: baseUrl.trim(),
|
|
@@ -1764,7 +2154,7 @@ function useProviderSetupFlow(onSubmit) {
|
|
|
1764
2154
|
}),
|
|
1765
2155
|
[provider, protocol, baseUrl, apiKey, modelIds]
|
|
1766
2156
|
);
|
|
1767
|
-
const submitOrNext = (0,
|
|
2157
|
+
const submitOrNext = (0, import_react8.useCallback)(
|
|
1768
2158
|
(overrides) => {
|
|
1769
2159
|
if (stepIndex >= visibleSteps.length - 1) {
|
|
1770
2160
|
if (provider) void onSubmit(provider, buildCurrentInputs(overrides));
|
|
@@ -1774,7 +2164,7 @@ function useProviderSetupFlow(onSubmit) {
|
|
|
1774
2164
|
},
|
|
1775
2165
|
[stepIndex, visibleSteps, provider, onSubmit, buildCurrentInputs, goNext]
|
|
1776
2166
|
);
|
|
1777
|
-
const submitApiKey = (0,
|
|
2167
|
+
const submitApiKey = (0, import_react8.useCallback)(
|
|
1778
2168
|
(keyOverride) => {
|
|
1779
2169
|
const trimmed = (keyOverride ?? apiKey).trim();
|
|
1780
2170
|
if (!trimmed) {
|
|
@@ -1795,7 +2185,7 @@ function useProviderSetupFlow(onSubmit) {
|
|
|
1795
2185
|
},
|
|
1796
2186
|
[apiKey, provider, baseUrl, submitOrNext]
|
|
1797
2187
|
);
|
|
1798
|
-
const highlightBaseUrl = (0,
|
|
2188
|
+
const highlightBaseUrl = (0, import_react8.useCallback)(
|
|
1799
2189
|
(url) => {
|
|
1800
2190
|
if (provider && Array.isArray(provider.baseUrl)) {
|
|
1801
2191
|
const idx = provider.baseUrl.findIndex((o) => o.url === url);
|
|
@@ -1804,14 +2194,14 @@ function useProviderSetupFlow(onSubmit) {
|
|
|
1804
2194
|
},
|
|
1805
2195
|
[provider]
|
|
1806
2196
|
);
|
|
1807
|
-
const changeModelIds = (0,
|
|
2197
|
+
const changeModelIds = (0, import_react8.useCallback)((value) => {
|
|
1808
2198
|
setModelIds(value);
|
|
1809
2199
|
setModelIdsError(null);
|
|
1810
2200
|
}, []);
|
|
1811
|
-
const clearModelIdsError = (0,
|
|
2201
|
+
const clearModelIdsError = (0, import_react8.useCallback)(() => {
|
|
1812
2202
|
setModelIdsError(null);
|
|
1813
2203
|
}, []);
|
|
1814
|
-
const submitModelIds = (0,
|
|
2204
|
+
const submitModelIds = (0, import_react8.useCallback)(
|
|
1815
2205
|
(overrides) => {
|
|
1816
2206
|
const normalized = overrides?.modelIds ?? normalizeModelIds(modelIds);
|
|
1817
2207
|
if (normalized.length === 0) {
|
|
@@ -1826,13 +2216,13 @@ function useProviderSetupFlow(onSubmit) {
|
|
|
1826
2216
|
[modelIds, submitOrNext]
|
|
1827
2217
|
);
|
|
1828
2218
|
const advancedOptionCount = modalityEnabled ? 7 : 3;
|
|
1829
|
-
const moveAdvancedFocusUp = (0,
|
|
2219
|
+
const moveAdvancedFocusUp = (0, import_react8.useCallback)(() => {
|
|
1830
2220
|
setFocusedConfigIndex((v) => v <= 0 ? advancedOptionCount - 1 : v - 1);
|
|
1831
2221
|
}, [advancedOptionCount]);
|
|
1832
|
-
const moveAdvancedFocusDown = (0,
|
|
2222
|
+
const moveAdvancedFocusDown = (0, import_react8.useCallback)(() => {
|
|
1833
2223
|
setFocusedConfigIndex((v) => v >= advancedOptionCount - 1 ? 0 : v + 1);
|
|
1834
2224
|
}, [advancedOptionCount]);
|
|
1835
|
-
const toggleFocusedAdvancedOption = (0,
|
|
2225
|
+
const toggleFocusedAdvancedOption = (0, import_react8.useCallback)(() => {
|
|
1836
2226
|
switch (focusedConfigIndex) {
|
|
1837
2227
|
case 0:
|
|
1838
2228
|
setThinkingEnabled((v) => !v);
|
|
@@ -1856,13 +2246,13 @@ function useProviderSetupFlow(onSubmit) {
|
|
|
1856
2246
|
break;
|
|
1857
2247
|
}
|
|
1858
2248
|
}, [focusedConfigIndex]);
|
|
1859
|
-
const submitAdvancedConfig = (0,
|
|
2249
|
+
const submitAdvancedConfig = (0, import_react8.useCallback)(() => {
|
|
1860
2250
|
goNext();
|
|
1861
2251
|
}, [goNext]);
|
|
1862
|
-
const changeContextWindowSize = (0,
|
|
2252
|
+
const changeContextWindowSize = (0, import_react8.useCallback)((value) => {
|
|
1863
2253
|
setContextWindowSize(value.replace(/[^0-9]/g, ""));
|
|
1864
2254
|
}, []);
|
|
1865
|
-
const submit = (0,
|
|
2255
|
+
const submit = (0, import_react8.useCallback)(() => {
|
|
1866
2256
|
if (!provider) return;
|
|
1867
2257
|
const multimodal = modalityEnabled ? {
|
|
1868
2258
|
image: modalityImage || void 0,
|
|
@@ -1890,7 +2280,7 @@ function useProviderSetupFlow(onSubmit) {
|
|
|
1890
2280
|
onSubmit,
|
|
1891
2281
|
buildCurrentInputs
|
|
1892
2282
|
]);
|
|
1893
|
-
const getPreviewJson = (0,
|
|
2283
|
+
const getPreviewJson = (0, import_react8.useCallback)(() => {
|
|
1894
2284
|
if (!provider) return "";
|
|
1895
2285
|
const envKey = typeof provider.envKey === "function" ? provider.envKey(protocol, baseUrl.trim()) : provider.envKey;
|
|
1896
2286
|
const normalizedIds = normalizeModelIds(modelIds);
|
|
@@ -2075,6 +2465,11 @@ export {
|
|
|
2075
2465
|
EDITOR_DISPLAY_NAMES,
|
|
2076
2466
|
editorSettingsManager,
|
|
2077
2467
|
useFollowupSuggestionsCLI,
|
|
2468
|
+
shortAsciiLogo,
|
|
2469
|
+
resolveCustomBanner,
|
|
2470
|
+
pickAsciiArtTier,
|
|
2471
|
+
usePhraseCycler,
|
|
2472
|
+
useGitBranchName,
|
|
2078
2473
|
DualOutputBridge,
|
|
2079
2474
|
RemoteInputWatcher
|
|
2080
2475
|
};
|
|
@@ -2102,6 +2497,11 @@ export {
|
|
|
2102
2497
|
*
|
|
2103
2498
|
* Thin React wrapper around the framework-agnostic controller from core.
|
|
2104
2499
|
*/
|
|
2500
|
+
/**
|
|
2501
|
+
* @license
|
|
2502
|
+
* Copyright 2025 Qwen Code
|
|
2503
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
2504
|
+
*/
|
|
2105
2505
|
/**
|
|
2106
2506
|
* @license
|
|
2107
2507
|
* Copyright 2026 Qwen Team
|