@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.
Files changed (282) hide show
  1. package/bundled/qc-helper/docs/configuration/auth.md +1 -1
  2. package/bundled/qc-helper/docs/configuration/model-providers.md +19 -15
  3. package/bundled/qc-helper/docs/features/channels/dingtalk.md +1 -1
  4. package/bundled/qc-helper/docs/features/channels/github.md +1 -9
  5. package/bundled/qc-helper/docs/features/channels/overview.md +26 -51
  6. package/bundled/qc-helper/docs/features/channels/qqbot.md +1 -2
  7. package/bundled/qc-helper/docs/features/commands.md +48 -9
  8. package/bundled/qc-helper/docs/features/goals.md +2 -0
  9. package/bundled/qc-helper/docs/features/sub-agents.md +8 -0
  10. package/bundled/qc-helper/docs/qwen-serve.md +62 -48
  11. package/chunks/{MaxSizedBox-ZZJT3PJF.js → MaxSizedBox-4C3BKKKY.js} +17 -16
  12. package/chunks/{StandaloneSessionPicker-DIOSZTMX.js → StandaloneSessionPicker-TXVF65YW.js} +32 -31
  13. package/chunks/{acpAgent-62JUP5A7.js → acpAgent-H5XBKGB4.js} +301 -166
  14. package/chunks/{agent-NLPEQQDZ.js → agent-T5LEFJIU.js} +10 -10
  15. package/chunks/{agent-headless-Y2GR5F2Q.js → agent-headless-VZKSRH36.js} +10 -10
  16. package/chunks/{anthropicContentGenerator-I7LQZH26.js → anthropicContentGenerator-PRJWWVYJ.js} +2 -2
  17. package/chunks/{artifact-tool-P52OKKEF.js → artifact-tool-G5LHNECG.js} +1 -1
  18. package/chunks/{bridge-Q66BD62H.js → bridge-AOX5IY44.js} +18 -17
  19. package/chunks/{channel-management-service-TRTLQTSV.js → channel-management-service-MWQGHPAS.js} +4 -4
  20. package/chunks/{channel-settings-store-R5STFWUW.js → channel-settings-store-XZCGDGHW.js} +26 -25
  21. package/chunks/{channel-worker-group-PIYPVCTF.js → channel-worker-group-SQ5FRWOH.js} +5 -5
  22. package/chunks/{channel-worker-manager-FQHEDTD2.js → channel-worker-manager-TU4ZNWOE.js} +5 -5
  23. package/chunks/{channel-worker-supervisor-XJPZZ3VK.js → channel-worker-supervisor-EMITFMCP.js} +4 -4
  24. package/chunks/{chunk-3SH53ANB.js → chunk-22GORRNY.js} +12 -0
  25. package/chunks/{chunk-7L35FKPF.js → chunk-2BMXHB6N.js} +2 -2
  26. package/chunks/chunk-2WC3Y7YY.js +1033 -0
  27. package/chunks/{chunk-WZ4YULVF.js → chunk-3OAXF3UK.js} +210 -80
  28. package/chunks/{chunk-W673V2H3.js → chunk-46MMBZHI.js} +3 -3
  29. package/chunks/{chunk-6GRDHIVI.js → chunk-4I3WFI3U.js} +4 -4
  30. package/chunks/{chunk-QXXBW2G4.js → chunk-4JNHNVAZ.js} +3 -3
  31. package/chunks/{chunk-R2266LQ5.js → chunk-4WMGYG3F.js} +2 -2
  32. package/chunks/{chunk-Y6ZWXM44.js → chunk-5BH2AIEY.js} +1 -1
  33. package/chunks/{chunk-EA4NFWVG.js → chunk-5OZUKLL7.js} +3 -3
  34. package/chunks/{chunk-RX3FYFCN.js → chunk-67XTVRVB.js} +1 -1
  35. package/chunks/{chunk-MA5OUNN6.js → chunk-6G4V7SE4.js} +1 -1
  36. package/chunks/{chunk-B54PFQS5.js → chunk-7CLLH5TI.js} +1 -1
  37. package/chunks/{chunk-7GZCCHJL.js → chunk-7LTCFO6T.js} +3 -3
  38. package/chunks/{chunk-33MLFMCL.js → chunk-7NDZKE2M.js} +2 -2
  39. package/chunks/{chunk-5WC2ECUK.js → chunk-7PD7ZMX5.js} +17 -4
  40. package/chunks/{chunk-ZUNWKOAP.js → chunk-7SVM3RP2.js} +4 -24
  41. package/chunks/{chunk-5GD7LYOH.js → chunk-A7EFXK7P.js} +1 -1
  42. package/chunks/{chunk-RDV4NLI3.js → chunk-AO2VMS72.js} +2 -2
  43. package/chunks/{chunk-XAXTQURR.js → chunk-APXIW2TF.js} +3 -3
  44. package/chunks/{chunk-3BTHHXXE.js → chunk-AUTUFD5X.js} +1 -1
  45. package/chunks/{chunk-VH764G6B.js → chunk-B25JYXZE.js} +2 -2
  46. package/chunks/{chunk-MMMA36MN.js → chunk-BK7D2JR6.js} +3 -3
  47. package/chunks/{chunk-RPFJJ33Z.js → chunk-CALTQWTZ.js} +1 -1
  48. package/chunks/{chunk-EUXF6URV.js → chunk-CCBTNJB4.js} +16 -18
  49. package/chunks/{chunk-BF3RUIVP.js → chunk-CH2YDT6X.js} +36 -38
  50. package/chunks/{chunk-L6ZME3W7.js → chunk-CMWU6P4D.js} +1 -1
  51. package/chunks/{chunk-QJAFSFYA.js → chunk-CWVZBIZJ.js} +1 -1
  52. package/chunks/{chunk-JDPBJIKI.js → chunk-DAI65CMX.js} +1 -1
  53. package/chunks/{chunk-GM44O6F7.js → chunk-DARWOZY6.js} +1 -1
  54. package/chunks/{chunk-J4ECGDA3.js → chunk-ELD3OBPU.js} +3 -3
  55. package/chunks/{chunk-ZELCTN6Y.js → chunk-F23YN37B.js} +10 -0
  56. package/chunks/{chunk-OIPUQE3S.js → chunk-F2NYVASI.js} +14 -1
  57. package/chunks/{chunk-ODBNTMZW.js → chunk-FAJPLSYF.js} +36 -29
  58. package/chunks/{chunk-GXIHBIHC.js → chunk-FGHPZGOP.js} +29 -24
  59. package/chunks/{chunk-TK4XHPKW.js → chunk-G37O7YO6.js} +2 -2
  60. package/chunks/{chunk-4JKLPTV6.js → chunk-G3ZUMSFS.js} +12 -5
  61. package/chunks/{chunk-743XE7N7.js → chunk-G5VOXCRX.js} +1 -1
  62. package/chunks/{chunk-BL6B2QS2.js → chunk-GOEVQADN.js} +618 -1122
  63. package/chunks/{chunk-XI7RST4D.js → chunk-GOKAOSCN.js} +1 -1
  64. package/chunks/{chunk-FDOGGKAA.js → chunk-GSFV5RQW.js} +2 -0
  65. package/chunks/{chunk-43CI6YWJ.js → chunk-HJ5UJQQL.js} +1384 -1245
  66. package/chunks/{chunk-LUVXLLMS.js → chunk-IR6JKBAP.js} +1 -1
  67. package/chunks/{chunk-CPJRFFPH.js → chunk-IRGDIDGJ.js} +558 -158
  68. package/chunks/{chunk-DCPRCDSR.js → chunk-IWABUX6T.js} +1 -1
  69. package/chunks/{chunk-DTB5BXRG.js → chunk-JO77FGNZ.js} +16 -15
  70. package/chunks/{chunk-45ROPFQY.js → chunk-JYGIJA4W.js} +1 -1
  71. package/chunks/{chunk-M6YLOETP.js → chunk-KCF2436G.js} +1 -1
  72. package/chunks/{chunk-CABDNUJ4.js → chunk-KEPC5BOL.js} +5 -5
  73. package/chunks/{chunk-RN6V5HKE.js → chunk-KFECPHLV.js} +3 -3
  74. package/chunks/{chunk-WIRYFL2L.js → chunk-LEAOJ43M.js} +17 -15
  75. package/chunks/{chunk-IUJLW6ZI.js → chunk-LUNC5KCL.js} +3 -3
  76. package/chunks/{chunk-WZS3X663.js → chunk-LWX4WDFF.js} +2 -5
  77. package/chunks/{chunk-ISPBBKJN.js → chunk-MV5DTLJV.js} +7 -2
  78. package/chunks/chunk-NFXXBWSE.js +463 -0
  79. package/chunks/{chunk-PQSCGZT2.js → chunk-NPKCVSXX.js} +26 -2
  80. package/chunks/{chunk-7RXOEUFF.js → chunk-NX7ZTXFF.js} +1 -1
  81. package/chunks/{chunk-G5QLLD53.js → chunk-OXR34GCD.js} +14 -2
  82. package/chunks/{chunk-VHPG7BH6.js → chunk-PDN7FJZV.js} +1 -1
  83. package/chunks/{chunk-UHUT4IDM.js → chunk-PFKGV6PO.js} +9 -9
  84. package/chunks/{chunk-NFIDVZND.js → chunk-QB3KS3N3.js} +2 -21
  85. package/chunks/{chunk-QLM7D7W3.js → chunk-QFJZAY7W.js} +7 -7
  86. package/chunks/{chunk-NVS4Z6GT.js → chunk-QHLHE2OT.js} +1 -1
  87. package/chunks/{chunk-B44JBZBB.js → chunk-QQK4L3UU.js} +1 -1
  88. package/chunks/{chunk-63ACHB2H.js → chunk-QTB4VP4K.js} +50 -18
  89. package/chunks/{chunk-4BLTSTF6.js → chunk-R3JIDRUL.js} +4 -4
  90. package/chunks/{chunk-VEQBVJYH.js → chunk-R457KFV7.js} +3 -3
  91. package/chunks/{chunk-CG2PDIGD.js → chunk-RM244SCQ.js} +1 -1
  92. package/chunks/{chunk-W7PXLIZJ.js → chunk-RNAJVXUG.js} +5 -5
  93. package/chunks/{chunk-VF6D6EGV.js → chunk-S5QR6CB5.js} +52 -6
  94. package/chunks/{chunk-IRKQ4YYX.js → chunk-SVWWF5TZ.js} +29 -1
  95. package/chunks/{chunk-5HBA2Z7V.js → chunk-TGNNLRC3.js} +2 -3
  96. package/chunks/{chunk-ORREXWOM.js → chunk-TODNHE76.js} +3 -3
  97. package/chunks/{chunk-W3ONSAYO.js → chunk-TOOOLHVS.js} +2 -2
  98. package/chunks/{chunk-EHTKOO6W.js → chunk-TRQNRP2H.js} +2 -2
  99. package/chunks/{chunk-PQWM4SX2.js → chunk-U6REWGVR.js} +2 -2
  100. package/chunks/{chunk-UXDVUFKU.js → chunk-ULZECEIP.js} +2 -2
  101. package/chunks/{chunk-6YEOCHSE.js → chunk-VBLAI2HA.js} +101 -0
  102. package/chunks/{chunk-M73KHGNR.js → chunk-VJJXG73H.js} +404 -226
  103. package/chunks/{chunk-Q2F43WTJ.js → chunk-WBU2PIZ5.js} +23 -6
  104. package/chunks/{chunk-UULHYZ4W.js → chunk-WDN64MVT.js} +74 -15
  105. package/chunks/{chunk-XVTCSVBK.js → chunk-WDVV3LRM.js} +193 -169
  106. package/chunks/{chunk-LBKYQ33T.js → chunk-WK7P62DV.js} +16 -10
  107. package/chunks/{chunk-ULY4ISY2.js → chunk-WXD7INFV.js} +19 -4
  108. package/chunks/{chunk-ZIPYCXQP.js → chunk-WXPPUPHM.js} +1 -1
  109. package/chunks/{chunk-5Z4FCEPY.js → chunk-X7LFJF5D.js} +600 -46
  110. package/chunks/{chunk-YHDGABDC.js → chunk-XKBFYTCD.js} +1 -1
  111. package/chunks/{chunk-MWEF5MUK.js → chunk-XSOXPG2L.js} +8 -8
  112. package/chunks/{chunk-5VZFJTL2.js → chunk-YLOHCA6I.js} +2 -2
  113. package/chunks/{chunk-LN3WBOKU.js → chunk-YQGW3M6Z.js} +2 -2
  114. package/chunks/{chunk-2OR32P5M.js → chunk-ZN5TKAVR.js} +125 -10
  115. package/chunks/{chunk-XBLG564H.js → chunk-ZP5XDLSA.js} +10 -10
  116. package/chunks/{config-utils-37FHWPTP.js → config-utils-GPLIABL2.js} +21 -20
  117. package/chunks/{contextCommand-R4JUBV5N.js → contextCommand-NCUQUDBY.js} +18 -17
  118. package/chunks/{core-runtime-6U4OXU5C.js → core-runtime-WKYKWVYU.js} +23 -21
  119. package/chunks/{create-sub-session-LLUYAGZN.js → create-sub-session-PPLXB3JJ.js} +17 -16
  120. package/chunks/{daemon-UI6SQSBV.js → daemon-2CKIAO3I.js} +2 -2
  121. package/chunks/{daemon-git-worktree-guard-O2UTNFJC.js → daemon-git-worktree-guard-73ZWOLKL.js} +17 -16
  122. package/chunks/{daemon-status-provider-7GMAKSTX.js → daemon-status-provider-OK7VONJG.js} +22 -21
  123. package/chunks/{daemon-trust-policy-VNP76VMO.js → daemon-trust-policy-CAUCREG2.js} +22 -21
  124. package/chunks/{daemon-trust-policy-monitor-TD5O3BZA.js → daemon-trust-policy-monitor-3Y36OOEQ.js} +22 -21
  125. package/chunks/{deferred-core-runtime-NJM63YJS.js → deferred-core-runtime-Q7WFWYD3.js} +17 -16
  126. package/chunks/{dist-STAGIFNB.js → dist-6YDUH3BB.js} +388 -102
  127. package/chunks/{dist-XJ25G6OH.js → dist-BNQVF565.js} +2 -8
  128. package/chunks/{dist-NQ2636VT.js → dist-F34J4FZX.js} +1 -1
  129. package/chunks/{dist-OR2ZQTXZ.js → dist-F6JLAJLE.js} +1 -1
  130. package/chunks/{dist-WZTUKIDR.js → dist-NP7QKLVG.js} +2 -2
  131. package/chunks/{dist-M4CBX53H.js → dist-UFTFGI6I.js} +1 -1
  132. package/chunks/{dist-5I4HLUTO.js → dist-XLV33CLY.js} +1 -2
  133. package/chunks/{dist-24TCWK5H.js → dist-Y5KC3IHW.js} +1 -2
  134. package/chunks/{dist-FDISN4AK.js → dist-ZDNJK74R.js} +3 -7
  135. package/chunks/{edit-GL7OA6RV.js → edit-YJD6IETK.js} +10 -10
  136. package/chunks/{enterPlanMode-VC4BCSZE.js → enterPlanMode-EFPVTWIH.js} +10 -10
  137. package/chunks/{environment-BI6IBAZJ.js → environment-HP3AXFTB.js} +19 -18
  138. package/chunks/{errors-D6G2ZM2R.js → errors-22ON46G7.js} +19 -18
  139. package/chunks/{exitPlanMode-DX446CA6.js → exitPlanMode-MOQUNCBH.js} +10 -10
  140. package/chunks/{fast-path-MAYDLJIP.js → fast-path-2X7BPMXX.js} +3 -3
  141. package/chunks/{glob-TVKRFY36.js → glob-Y7ACIB3P.js} +10 -10
  142. package/chunks/{goal-tools-CA6YANRN.js → goal-tools-DABMICUC.js} +10 -10
  143. package/chunks/{handleAutoUpdate-AW4ZAHON.js → handleAutoUpdate-MCAMHYDI.js} +19 -18
  144. package/chunks/{i18n-IH5CRAY7.js → i18n-C3GDCALP.js} +17 -16
  145. package/chunks/{initializer-UBR37ZNM.js → initializer-4URDQL2G.js} +22 -21
  146. package/chunks/{installationInfo-Y52756EC.js → installationInfo-LBOL6SBV.js} +17 -16
  147. package/chunks/{list-7V5JDZPO.js → list-JOGBAC2R.js} +25 -24
  148. package/chunks/{list-agents-I5TRH3J7.js → list-agents-2CXPGJUE.js} +3 -3
  149. package/chunks/{llm-QDB6JVF5.js → llm-2KPNSAVY.js} +65 -59
  150. package/chunks/{llm-content-generator-EO6MZCEO.js → llm-content-generator-GR3FOHLB.js} +2 -2
  151. package/chunks/{loadedSettingsAdapter-I3YQKMC4.js → loadedSettingsAdapter-DVKROEJD.js} +22 -21
  152. package/chunks/{loggingContentGenerator-MNXYUGDG.js → loggingContentGenerator-P4K6K5W4.js} +12 -12
  153. package/chunks/{managed-npm-update-EA3EXPTO.js → managed-npm-update-VWBKHNIN.js} +17 -16
  154. package/chunks/{mcp-QTAJ544Y.js → mcp-6YYNSYLK.js} +22 -21
  155. package/chunks/{monitor-6FQKQOTP.js → monitor-A255TNZR.js} +10 -10
  156. package/chunks/{nonInteractiveCli-MRCTZL5X.js → nonInteractiveCli-LXGIKQAT.js} +55 -54
  157. package/chunks/{notebook-edit-BQQCKI7K.js → notebook-edit-5UYHS2DM.js} +10 -10
  158. package/chunks/{open-with-auth-D6JD6LDS.js → open-with-auth-6MVIHMXB.js} +1 -1
  159. package/chunks/{openaiContentGenerator-TTSKXNVH.js → openaiContentGenerator-A6MAMEO5.js} +7 -7
  160. package/chunks/{pidfile-KPIS6RIT.js → pidfile-B7DZC4TP.js} +20 -17
  161. package/chunks/{processUtils-ZCASPKK4.js → processUtils-BPZ2MCZS.js} +2 -2
  162. package/chunks/{prompt-terminal-ledger-D6HM6TV7.js → prompt-terminal-ledger-FYYTAOXS.js} +18 -17
  163. package/chunks/{qwenContentGenerator-GGZEFLBD.js → qwenContentGenerator-4IOJFD4S.js} +13 -13
  164. package/chunks/{read-file-VE5GDFLP.js → read-file-A4H4O3VQ.js} +2 -2
  165. package/chunks/{resumeHistoryUtils-HSSGMYDC.js → resumeHistoryUtils-YQQ43E4N.js} +19 -18
  166. package/chunks/{ripGrep-SEJE7AA6.js → ripGrep-W32NWFTA.js} +3 -3
  167. package/chunks/{run-qwen-serve-OJYVH7N6.js → run-qwen-serve-WBSWWIRV.js} +216 -64
  168. package/chunks/{runtime-KGMQQFJD.js → runtime-VRVBX2E5.js} +29 -26
  169. package/chunks/{scheduled-tasks-7H5HWHYD.js → scheduled-tasks-D65KJDA3.js} +20 -19
  170. package/chunks/{scheduler-BE42AKDG.js → scheduler-M2YPN7Z7.js} +19 -18
  171. package/chunks/{send-message-AWKUDJBH.js → send-message-76BKWKFZ.js} +3 -3
  172. package/chunks/{serve-KZVKYMSL.js → serve-BE3H2P6P.js} +22 -21
  173. package/chunks/{server-PJRALPJQ.js → server-FLY5JERG.js} +84 -148
  174. package/chunks/{session-IHITXU2S.js → session-JVN62R5K.js} +85 -57
  175. package/chunks/{session-attachments-root-GQ2TUI3Y.js → session-attachments-root-7ACGLHXA.js} +17 -16
  176. package/chunks/{session-pr-refresh-H43LULTE.js → session-pr-refresh-TQS57SDK.js} +19 -18
  177. package/chunks/{settings-RKEQQDFC.js → settings-D44YMZFT.js} +21 -20
  178. package/chunks/{shell-6PJ444U5.js → shell-3VE6I4V5.js} +10 -10
  179. package/chunks/{skill-Q3UP7B5V.js → skill-FHEGRRZU.js} +2 -2
  180. package/chunks/{skill-settings-LZR5YRRW.js → skill-settings-VHEJMBFL.js} +21 -20
  181. package/chunks/{spawnChannel-WM3DT2BF.js → spawnChannel-T6MX2ZDN.js} +17 -16
  182. package/chunks/{standalone-update-E5474IBI.js → standalone-update-QUGHFMCS.js} +18 -17
  183. package/chunks/{start-opentui-ui-WLWZNQ2I.js → start-opentui-ui-IHIIZ2LE.js} +438 -203
  184. package/chunks/{startInteractiveUI-FBQSGWGO.js → startInteractiveUI-LR7K2ARZ.js} +1171 -1234
  185. package/chunks/{task-create-PMAFST2T.js → task-create-MWXJFRRM.js} +3 -3
  186. package/chunks/{task-list-R2HSY2NC.js → task-list-EYO3FE57.js} +2 -2
  187. package/chunks/{task-update-JYC57USF.js → task-update-2JJJRHMT.js} +3 -3
  188. package/chunks/{team-create-VIGUFUT4.js → team-create-GY3VFY47.js} +10 -10
  189. package/chunks/{team-delete-CBHVBTPB.js → team-delete-IQZ6XGFI.js} +2 -2
  190. package/chunks/{team-plan-approval-HQVZA3MD.js → team-plan-approval-BQPGZOT5.js} +10 -10
  191. package/chunks/{terminal-image-renderer-LUKNCOVM.js → terminal-image-renderer-YNYW5CQG.js} +17 -16
  192. package/chunks/{theme-manager-LOENKYLY.js → theme-manager-U6CIK3GM.js} +17 -16
  193. package/chunks/{tool-search-ZIFAQCE2.js → tool-search-XI3QWD5I.js} +2 -2
  194. package/chunks/{total-session-admission-FUUJH3QH.js → total-session-admission-3SNSJJ32.js} +18 -17
  195. package/chunks/{trustedFolders-C76KYROP.js → trustedFolders-OVAQKNV5.js} +18 -17
  196. package/chunks/{update-relaunch-4G2SRXKX.js → update-relaunch-XV5O74E3.js} +5 -5
  197. package/chunks/{updateCheck-EIZIO7HI.js → updateCheck-CHUYWD6L.js} +17 -16
  198. package/chunks/{useAutoAcceptIndicator-EAA6KSY4.js → useAutoAcceptIndicator-VKSVIXZC.js} +23 -22
  199. package/chunks/{validateNonInterActiveAuth-BRX22QCN.js → validateNonInterActiveAuth-ZNUTD3E5.js} +53 -52
  200. package/chunks/{version-E56RU7PR.js → version-EK7VAGSI.js} +3 -1
  201. package/chunks/{web-fetch-AAUCD7RM.js → web-fetch-24KZO763.js} +2 -2
  202. package/chunks/{web-search-HFUQF44Q.js → web-search-CRNXKZ2X.js} +184 -7
  203. package/chunks/{web-shell-static-POZHGGXE.js → web-shell-static-BFDESDD4.js} +5 -4
  204. package/chunks/{workflow-3MABM53N.js → workflow-HD5NYMW5.js} +201 -65
  205. package/chunks/{workspace-providers-status-2FRLBZ5I.js → workspace-providers-status-MAM42IZS.js} +24 -23
  206. package/chunks/{workspace-registration-store-YL7HLYYI.js → workspace-registration-store-HKLJEDQX.js} +1 -2
  207. package/chunks/{workspace-registry-BNRP2ELW.js → workspace-registry-7RDDOBLN.js} +18 -17
  208. package/chunks/{workspace-runtime-coordinator-WKGF7VHS.js → workspace-runtime-coordinator-LEPDPXJO.js} +18 -17
  209. package/chunks/{workspace-service-4MYO72MM.js → workspace-service-5IFDCNN3.js} +23 -22
  210. package/chunks/{workspace-skills-status-SU66TJLZ.js → workspace-skills-status-FJ3HNH4H.js} +22 -21
  211. package/chunks/{workspace-trust-reconciler-D5QT7WQB.js → workspace-trust-reconciler-PQFHIWLR.js} +23 -22
  212. package/chunks/{write-file-NVPQE2AZ.js → write-file-ERG67ZFX.js} +11 -11
  213. package/chunks/{zoom-image-RJHC66WG.js → zoom-image-WQYEC3SR.js} +2 -2
  214. package/cli.js +12 -12
  215. package/export-transcript-document.js +82 -82
  216. package/package.json +4 -4
  217. package/web-shell/assets/{abnfDiagram-VCTEODGH-DHc6plZn.js → abnfDiagram-VCTEODGH-BRLgQbnT.js} +1 -1
  218. package/web-shell/assets/{arc-BQ9m8TDV.js → arc-qAF9_XsR.js} +1 -1
  219. package/web-shell/assets/{architectureDiagram-5GKGNRK7-D5ap3oVB.js → architectureDiagram-5GKGNRK7-BorUttEz.js} +1 -1
  220. package/web-shell/assets/{blockDiagram-NRAW4CY4-BIbnyNph.js → blockDiagram-NRAW4CY4-Bj0qZVxu.js} +1 -1
  221. package/web-shell/assets/{c4Diagram-UCG6FXSJ-BRsdx_iG.js → c4Diagram-UCG6FXSJ-BTqJis32.js} +1 -1
  222. package/web-shell/assets/channel-COIuCrVH.js +1 -0
  223. package/web-shell/assets/{chunk-2Q5K7J3B-3lf1fNlx.js → chunk-2Q5K7J3B-RrQ5X8m-.js} +1 -1
  224. package/web-shell/assets/{chunk-5VM5RSS4-DP8VNRc4.js → chunk-5VM5RSS4-uUjDl8wO.js} +1 -1
  225. package/web-shell/assets/{chunk-F27PBJKO-DrohDmZ6.js → chunk-F27PBJKO-C3JhpyzI.js} +1 -1
  226. package/web-shell/assets/{chunk-G27WJ6UU-UZ2QhSx6.js → chunk-G27WJ6UU-C8ZNFs7F.js} +1 -1
  227. package/web-shell/assets/{chunk-JWPE2WC7-BIMHVcZK.js → chunk-JWPE2WC7-DNpXtEOs.js} +1 -1
  228. package/web-shell/assets/{chunk-LCL6LL3I-izRxdSDd.js → chunk-LCL6LL3I-DagA2ZLw.js} +1 -1
  229. package/web-shell/assets/{chunk-POPQ4Y6H-CXADD4PP.js → chunk-POPQ4Y6H-R23uH7Xm.js} +1 -1
  230. package/web-shell/assets/{chunk-SVP7TREG-B96d8Y_1.js → chunk-SVP7TREG-Qz9RN_BR.js} +1 -1
  231. package/web-shell/assets/{chunk-XXDRQBXY-CF2sVQpv.js → chunk-XXDRQBXY-jYb1_hni.js} +1 -1
  232. package/web-shell/assets/classDiagram-DTDB5LWJ-DoX6OYqu.js +1 -0
  233. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DoX6OYqu.js +1 -0
  234. package/web-shell/assets/{cose-bilkent-JH36ORCC-CT6tXVAS.js → cose-bilkent-JH36ORCC-Cv2OunpE.js} +1 -1
  235. package/web-shell/assets/{cynefin-OW5HDTMX-X1NS4vtV.js → cynefin-OW5HDTMX-LH42KFJx.js} +1 -1
  236. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-DNsKNOT4.js → cynefinDiagram-5FMLGOSQ-Dha4_OoR.js} +1 -1
  237. package/web-shell/assets/{dagre-3AP2YEHR-9-AHKqsb.js → dagre-3AP2YEHR-Br5lnUKD.js} +1 -1
  238. package/web-shell/assets/{diagram-S7CK7UJ4-Bjgms7j6.js → diagram-S7CK7UJ4-dpKq2bBX.js} +1 -1
  239. package/web-shell/assets/{diagram-UQ7AKVKN-h6bCprbE.js → diagram-UQ7AKVKN-BAgHWpXr.js} +1 -1
  240. package/web-shell/assets/{diagram-VSXAHHWV-4SbQXVLt.js → diagram-VSXAHHWV-GRRzpyE2.js} +1 -1
  241. package/web-shell/assets/{diagram-VX7I27RA-B5gPCzzB.js → diagram-VX7I27RA-BNFiaYpG.js} +1 -1
  242. package/web-shell/assets/{diagram-Z3DM3KII-DFJXIA3A.js → diagram-Z3DM3KII-BisZzB_h.js} +1 -1
  243. package/web-shell/assets/{ebnfDiagram-PWID7BFC-FwyaU7VY.js → ebnfDiagram-PWID7BFC-B1xbwycf.js} +1 -1
  244. package/web-shell/assets/{erDiagram-SSCWMZ5O-8vJQh2te.js → erDiagram-SSCWMZ5O-CQMzbGE5.js} +1 -1
  245. package/web-shell/assets/{flowDiagram-A5DVABFB-BzA_1gMN.js → flowDiagram-A5DVABFB-CZ_Zondl.js} +1 -1
  246. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-Co-ABbVX.js → ganttDiagram-EL5Y4UJY-BTh2ShxS.js} +1 -1
  247. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-DW_FcyrX.js → gitGraphDiagram-WWUBYQGX-oHOB-Uxt.js} +1 -1
  248. package/web-shell/assets/{index-Bu-rZoJ-.js → index-CI1ysIEv.js} +478 -474
  249. package/web-shell/assets/index-CpxXGH-8.css +36 -0
  250. package/web-shell/assets/{index-BbMXfhNG.js → index-DWoFMu5x.js} +1 -1
  251. package/web-shell/assets/{infoDiagram-RXCK75RN-BEgfhUFN.js → infoDiagram-RXCK75RN-C0QpudbG.js} +1 -1
  252. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-DCsMxQmc.js → ishikawaDiagram-5VMMS53U-a6B741uT.js} +1 -1
  253. package/web-shell/assets/{journeyDiagram-EYS64GPL-DyIEYoHz.js → journeyDiagram-EYS64GPL-Dbht9ICp.js} +1 -1
  254. package/web-shell/assets/{kanban-definition-3QL26DDD-CkxjqCNr.js → kanban-definition-3QL26DDD-D4OFR8-h.js} +1 -1
  255. package/web-shell/assets/{layout-BEWc0Al9.js → layout-Dvdh5jRH.js} +1 -1
  256. package/web-shell/assets/{linear-CNuNxirL.js → linear-Dvc6KIW2.js} +1 -1
  257. package/web-shell/assets/{mermaid.core-DZBre674.js → mermaid.core-CB36RfIb.js} +6 -6
  258. package/web-shell/assets/{mindmap-definition-FBJOCRG2-CpafFz_F.js → mindmap-definition-FBJOCRG2-Fmqo1CjP.js} +1 -1
  259. package/web-shell/assets/{pegDiagram-XKGWAZYB-DfZqk_dq.js → pegDiagram-XKGWAZYB-CCxYBoA4.js} +1 -1
  260. package/web-shell/assets/{pieDiagram-E7YTZNPT-S0UWXlgC.js → pieDiagram-E7YTZNPT-BVHKQFzt.js} +1 -1
  261. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-dd37_Ohj.js → quadrantDiagram-AXDQQJYC-l95IznwR.js} +1 -1
  262. package/web-shell/assets/{railroadDiagram-O6MQD6OU-CH8NJZ7u.js → railroadDiagram-O6MQD6OU-BlLdRdXp.js} +1 -1
  263. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-CFdqWYih.js → requirementDiagram-EFPCY7ZU-BkDLBR5w.js} +1 -1
  264. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CsddcEGD.js → sankeyDiagram-P5KCCOFB-jAIqRp65.js} +1 -1
  265. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-BZ270mGw.js → sequenceDiagram-WJ2MYXX4-f-soZYPr.js} +1 -1
  266. package/web-shell/assets/{sizeCapture-X5ZJPWSS-CGaS4DBV.js → sizeCapture-X5ZJPWSS-BzOuAfB2.js} +1 -1
  267. package/web-shell/assets/{stateDiagram-HBIQ2CUA-COpIzMu6.js → stateDiagram-HBIQ2CUA-BPLSs12r.js} +1 -1
  268. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-IRul-LaT.js +1 -0
  269. package/web-shell/assets/{swimlanes-XN3QIQJK-CMF889m3.js → swimlanes-XN3QIQJK-D-9E_RIR.js} +1 -1
  270. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6lgKepA.js +8 -0
  271. package/web-shell/assets/{timeline-definition-24CTP7MA-BelnxYz5.js → timeline-definition-24CTP7MA-CT56K-gV.js} +1 -1
  272. package/web-shell/assets/{vennDiagram-4TSXK5OY-CU-NRqIB.js → vennDiagram-4TSXK5OY-B-vi4IyO.js} +1 -1
  273. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CDNKqWh-.js → wardleyDiagram-VM6X3IG4-C9O7Ju98.js} +1 -1
  274. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-CLqguL5D.js → xychartDiagram-S5SC5T6Z-6d8w3jg2.js} +1 -1
  275. package/web-shell/index.html +2 -2
  276. package/chunks/chunk-X35VIWWJ.js +0 -276
  277. package/web-shell/assets/channel-uMMdTrYk.js +0 -1
  278. package/web-shell/assets/classDiagram-DTDB5LWJ-DcY-26Ig.js +0 -1
  279. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DcY-26Ig.js +0 -1
  280. package/web-shell/assets/index-CsPwZ1ut.css +0 -36
  281. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-D6qEVAji.js +0 -1
  282. 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-4BLTSTF6.js";
8
+ } from "./chunk-R3JIDRUL.js";
9
9
  import {
10
10
  ICON,
11
11
  SHELL_COMMAND_NAME
12
- } from "./chunk-ULY4ISY2.js";
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-NVS4Z6GT.js";
35
+ } from "./chunk-QHLHE2OT.js";
32
36
  import {
33
37
  SettingScope,
34
38
  settingExistsInScope
35
- } from "./chunk-Q2F43WTJ.js";
39
+ } from "./chunk-WBU2PIZ5.js";
36
40
  import {
37
- t
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-BL6B2QS2.js";
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
- } from "./chunk-43CI6YWJ.js";
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-OIPUQE3S.js";
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((resolve) => {
452
+ this.shutdownPromise = new Promise((resolve2) => {
439
453
  if (this.stream.closed || this.stream.destroyed) {
440
- resolve();
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
- resolve();
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
- resolve();
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((resolve) => {
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
- resolve();
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/shellCommandProcessor.ts
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, import_react4.useState)(null);
1058
- const handleShellCommand = (0, import_react4.useCallback)(
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 (resolve) => {
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
- resolve();
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((resolve) => {
1289
- executeCommand(resolve);
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 import_react5 = __toESM(require_react(), 1);
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, import_react5.useState)(INITIAL_FOLLOWUP_STATE);
1315
- const onAcceptRef = (0, import_react5.useRef)(onAccept);
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, import_react5.useRef)(config);
1461
+ const configRef = (0, import_react6.useRef)(config);
1318
1462
  configRef.current = config;
1319
- const firstKeystrokeAtRef = (0, import_react5.useRef)(0);
1320
- const prevShownAtRef = (0, import_react5.useRef)(0);
1321
- const wasFocusedWhenShownRef = (0, import_react5.useRef)(true);
1322
- (0, import_react5.useEffect)(() => {
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, import_react5.useCallback)(() => {
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, import_react5.useCallback)(
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, import_react5.useMemo)(
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, import_react5.useEffect)(() => {
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, import_react5.useMemo)(
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 import_react6 = __toESM(require_react(), 1);
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, import_react6.useState)(null);
1640
- const [visibleSteps, setVisibleSteps] = (0, import_react6.useState)([]);
1641
- const [stepIndex, setStepIndex] = (0, import_react6.useState)(0);
1642
- const [protocol, setProtocol] = (0, import_react6.useState)("openai" /* USE_OPENAI */);
1643
- const [baseUrl, setBaseUrl] = (0, import_react6.useState)("");
1644
- const [baseUrlPlaceholder, setBaseUrlPlaceholder] = (0, import_react6.useState)("");
1645
- const [baseUrlOptionIndex, setBaseUrlOptionIndex] = (0, import_react6.useState)(0);
1646
- const [baseUrlError, setBaseUrlError] = (0, import_react6.useState)(null);
1647
- const [apiKey, setApiKey] = (0, import_react6.useState)("");
1648
- const [apiKeyError, setApiKeyError] = (0, import_react6.useState)(null);
1649
- const [modelIds, setModelIds] = (0, import_react6.useState)("");
1650
- const [modelIdsError, setModelIdsError] = (0, import_react6.useState)(null);
1651
- const [thinkingEnabled, setThinkingEnabled] = (0, import_react6.useState)(false);
1652
- const [modalityEnabled, setModalityEnabled] = (0, import_react6.useState)(false);
1653
- const [modalityImage, setModalityImage] = (0, import_react6.useState)(true);
1654
- const [modalityVideo, setModalityVideo] = (0, import_react6.useState)(true);
1655
- const [modalityAudio, setModalityAudio] = (0, import_react6.useState)(false);
1656
- const [modalityPdf, setModalityPdf] = (0, import_react6.useState)(false);
1657
- const [contextWindowSize, setContextWindowSize] = (0, import_react6.useState)("");
1658
- const [focusedConfigIndex, setFocusedConfigIndex] = (0, import_react6.useState)(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, import_react6.useCallback)(
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, import_react6.useCallback)(() => {
2087
+ const reset = (0, import_react8.useCallback)(() => {
1698
2088
  setProvider(null);
1699
2089
  setVisibleSteps([]);
1700
2090
  setStepIndex(0);
1701
2091
  }, []);
1702
- const goBack = (0, import_react6.useCallback)(() => {
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, import_react6.useCallback)(() => {
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, import_react6.useCallback)(
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, import_react6.useCallback)(
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, import_react6.useCallback)(() => {
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, import_react6.useCallback)((value) => {
2139
+ const changeBaseUrl = (0, import_react8.useCallback)((value) => {
1750
2140
  setBaseUrl(value);
1751
2141
  setBaseUrlError(null);
1752
2142
  }, []);
1753
- const changeApiKey = (0, import_react6.useCallback)((value) => {
2143
+ const changeApiKey = (0, import_react8.useCallback)((value) => {
1754
2144
  setApiKey(value);
1755
2145
  setApiKeyError(null);
1756
2146
  }, []);
1757
- const buildCurrentInputs = (0, import_react6.useCallback)(
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, import_react6.useCallback)(
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, import_react6.useCallback)(
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, import_react6.useCallback)(
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, import_react6.useCallback)((value) => {
2197
+ const changeModelIds = (0, import_react8.useCallback)((value) => {
1808
2198
  setModelIds(value);
1809
2199
  setModelIdsError(null);
1810
2200
  }, []);
1811
- const clearModelIdsError = (0, import_react6.useCallback)(() => {
2201
+ const clearModelIdsError = (0, import_react8.useCallback)(() => {
1812
2202
  setModelIdsError(null);
1813
2203
  }, []);
1814
- const submitModelIds = (0, import_react6.useCallback)(
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, import_react6.useCallback)(() => {
2219
+ const moveAdvancedFocusUp = (0, import_react8.useCallback)(() => {
1830
2220
  setFocusedConfigIndex((v) => v <= 0 ? advancedOptionCount - 1 : v - 1);
1831
2221
  }, [advancedOptionCount]);
1832
- const moveAdvancedFocusDown = (0, import_react6.useCallback)(() => {
2222
+ const moveAdvancedFocusDown = (0, import_react8.useCallback)(() => {
1833
2223
  setFocusedConfigIndex((v) => v >= advancedOptionCount - 1 ? 0 : v + 1);
1834
2224
  }, [advancedOptionCount]);
1835
- const toggleFocusedAdvancedOption = (0, import_react6.useCallback)(() => {
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, import_react6.useCallback)(() => {
2249
+ const submitAdvancedConfig = (0, import_react8.useCallback)(() => {
1860
2250
  goNext();
1861
2251
  }, [goNext]);
1862
- const changeContextWindowSize = (0, import_react6.useCallback)((value) => {
2252
+ const changeContextWindowSize = (0, import_react8.useCallback)((value) => {
1863
2253
  setContextWindowSize(value.replace(/[^0-9]/g, ""));
1864
2254
  }, []);
1865
- const submit = (0, import_react6.useCallback)(() => {
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, import_react6.useCallback)(() => {
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