@qwen-code/qwen-code 0.23.2 → 0.23.3-nightly.20260911.aaa6a32aae

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 (419) hide show
  1. package/README.md +35 -15
  2. package/bundled/computer-use/SKILL.md +1 -1
  3. package/bundled/goal-draft/SKILL.md +10 -10
  4. package/bundled/qc-helper/docs/configuration/model-providers.md +66 -28
  5. package/bundled/qc-helper/docs/configuration/settings.md +8 -3
  6. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  7. package/bundled/qc-helper/docs/features/channels/dingtalk.md +0 -20
  8. package/bundled/qc-helper/docs/features/channels/dws.md +7 -1
  9. package/bundled/qc-helper/docs/features/channels/overview.md +5 -6
  10. package/bundled/qc-helper/docs/features/commands.md +62 -9
  11. package/bundled/qc-helper/docs/features/computer-use.md +1 -1
  12. package/bundled/qc-helper/docs/features/cross-session-protocol.md +338 -0
  13. package/bundled/qc-helper/docs/features/goals.md +22 -18
  14. package/bundled/qc-helper/docs/features/hooks.md +28 -22
  15. package/bundled/qc-helper/docs/features/sub-agents.md +27 -0
  16. package/bundled/qc-helper/docs/qwen-serve.md +23 -6
  17. package/bundled/review/SKILL.md +93 -80
  18. package/bundled/review/references/persistence.md +2 -0
  19. package/bundled/review/references/posting.md +31 -14
  20. package/bundled/workflow-authoring/SKILL.md +410 -0
  21. package/bundled/workflow-creator/SKILL.md +1 -1
  22. package/chunks/{MaxSizedBox-4C3BKKKY.js → MaxSizedBox-7C5XTBZI.js} +64 -53
  23. package/chunks/{StandaloneSessionPicker-TXVF65YW.js → StandaloneSessionPicker-IGTT3ZRX.js} +88 -76
  24. package/chunks/{acp-startup-profiler-KEU6VAYR.js → acp-startup-profiler-RUQNTNU5.js} +2 -2
  25. package/chunks/acp-subagent-executor-IUHVNVVO.js +140 -0
  26. package/chunks/{acpAgent-H5XBKGB4.js → acpAgent-W43WM2K4.js} +957 -243
  27. package/chunks/{agent-T5LEFJIU.js → agent-2XMXC5JW.js} +48 -38
  28. package/chunks/{agent-headless-VZKSRH36.js → agent-headless-2HHBVCP6.js} +48 -38
  29. package/chunks/{anthropicContentGenerator-PRJWWVYJ.js → anthropicContentGenerator-7RI3MPIW.js} +69 -36
  30. package/chunks/{artifact-tool-G5LHNECG.js → artifact-tool-HHVHCPNG.js} +59 -109
  31. package/chunks/{askUserQuestion-I5W5S3D6.js → askUserQuestion-RFMXTD3B.js} +2 -2
  32. package/chunks/{bridge-AOX5IY44.js → bridge-ID6N4IH5.js} +69 -58
  33. package/chunks/{ca-KC2AISNS.js → ca-MX3WCEEG.js} +1 -1
  34. package/chunks/{channel-management-service-MWQGHPAS.js → channel-management-service-ASCXI7FR.js} +6 -6
  35. package/chunks/{channel-settings-store-XZCGDGHW.js → channel-settings-store-TPJFQAZY.js} +76 -65
  36. package/chunks/{channel-worker-group-SQ5FRWOH.js → channel-worker-group-JR6JOELM.js} +9 -9
  37. package/chunks/{channel-worker-manager-TU4ZNWOE.js → channel-worker-manager-AVKJEZFL.js} +19 -10
  38. package/chunks/{channel-worker-supervisor-EMITFMCP.js → channel-worker-supervisor-OOYY7BAQ.js} +7 -7
  39. package/chunks/{chunk-4WMGYG3F.js → chunk-22FWWGSM.js} +2 -2
  40. package/chunks/{chunk-LWX4WDFF.js → chunk-2S5RIGZJ.js} +43 -15
  41. package/chunks/{chunk-CLKE4IY3.js → chunk-2SZH22YO.js} +1 -1
  42. package/chunks/{chunk-HJ5UJQQL.js → chunk-2UKKQGRA.js} +3639 -1804
  43. package/chunks/{chunk-MWIO7MF6.js → chunk-2WSLXP3W.js} +4 -0
  44. package/chunks/{chunk-HNLMYDQE.js → chunk-33LYAC4R.js} +10 -6
  45. package/chunks/{chunk-VBLAI2HA.js → chunk-3FPYT6QC.js} +0 -31
  46. package/chunks/{chunk-F53KKZUD.js → chunk-3LMDSCLU.js} +158 -10
  47. package/chunks/{chunk-WXFCI3O5.js → chunk-3MAUPOZ4.js} +2 -2
  48. package/chunks/{chunk-CRZBDVP2.js → chunk-432JQKIO.js} +10 -10
  49. package/chunks/{chunk-IRGDIDGJ.js → chunk-43RQ552L.js} +364 -84
  50. package/chunks/{chunk-PFKGV6PO.js → chunk-465USTVK.js} +9 -15
  51. package/chunks/{chunk-WG7BL3FY.js → chunk-473RJLIH.js} +1 -1
  52. package/chunks/{chunk-J3VZF2AL.js → chunk-4O2AXZXU.js} +2 -2
  53. package/chunks/{chunk-N6S3NUYJ.js → chunk-55VOWZ4C.js} +1 -1
  54. package/chunks/{chunk-OWCFKIFQ.js → chunk-5CZMWDJI.js} +2 -2
  55. package/chunks/{chunk-7NDZKE2M.js → chunk-5MUIHID6.js} +5 -5
  56. package/chunks/{chunk-RM244SCQ.js → chunk-5Z74GE4N.js} +1 -1
  57. package/chunks/{chunk-G5VOXCRX.js → chunk-6375QMAO.js} +2 -2
  58. package/chunks/{chunk-3LPJ776W.js → chunk-63GQZKXL.js} +164 -31
  59. package/chunks/{chunk-O2FEO2CB.js → chunk-6GDELAVL.js} +18 -2
  60. package/chunks/{chunk-7PD7ZMX5.js → chunk-6HI2I3OM.js} +168 -6
  61. package/chunks/{chunk-CALNF3Z3.js → chunk-7C57HCOR.js} +1 -1
  62. package/chunks/{chunk-UYDQYDW2.js → chunk-7IBS746B.js} +1 -1
  63. package/chunks/{chunk-AUTUFD5X.js → chunk-ABNX6E6K.js} +1 -1
  64. package/chunks/chunk-ACHCT36C.js +28 -0
  65. package/chunks/{chunk-2WC3Y7YY.js → chunk-AEY27Z35.js} +401 -23
  66. package/chunks/{chunk-AO2VMS72.js → chunk-AQFRRH73.js} +3 -3
  67. package/chunks/{chunk-PDN7FJZV.js → chunk-ASWEMQIZ.js} +4 -4
  68. package/chunks/chunk-AYEJOTIU.js +43 -0
  69. package/chunks/{chunk-QFJZAY7W.js → chunk-BKFRA4F5.js} +5 -5
  70. package/chunks/{chunk-KCF2436G.js → chunk-BNLW5N6U.js} +4 -4
  71. package/chunks/{chunk-GOKAOSCN.js → chunk-BRFOZEPA.js} +2 -2
  72. package/chunks/{process-registry-OAEG6WGC.js → chunk-BYUAT5OC.js} +1 -0
  73. package/chunks/chunk-C5CECJ46.js +340 -0
  74. package/chunks/{chunk-NOO4QFXM.js → chunk-C75BXMPM.js} +1 -3
  75. package/chunks/chunk-CAAMI77K.js +937 -0
  76. package/chunks/{chunk-QTB4VP4K.js → chunk-CBGHRAWM.js} +304 -23
  77. package/chunks/chunk-CF5KXZZX.js +150 -0
  78. package/chunks/chunk-CFMZLE3L.js +75 -0
  79. package/chunks/{chunk-TGNNLRC3.js → chunk-CJ3DHN5I.js} +1 -0
  80. package/chunks/{chunk-ERXNTINK.js → chunk-CQZJYGRX.js} +1 -1
  81. package/chunks/{chunk-WBU2PIZ5.js → chunk-CSDKDHWV.js} +23 -16
  82. package/chunks/{chunk-2EKVPSIJ.js → chunk-D754KKNZ.js} +9 -2
  83. package/chunks/{chunk-E6TI726I.js → chunk-DGC7BKEZ.js} +1 -1
  84. package/chunks/{chunk-7SVM3RP2.js → chunk-DMMOQWRF.js} +4 -6
  85. package/chunks/{chunk-J3TJH52D.js → chunk-DOTF2PF2.js} +1 -1
  86. package/chunks/{chunk-2BMXHB6N.js → chunk-DWBNQR53.js} +7 -7
  87. package/chunks/{chunk-ZN5TKAVR.js → chunk-E5LTUWKZ.js} +3 -3
  88. package/chunks/chunk-EGW3ZP6Y.js +32 -0
  89. package/chunks/chunk-ELRMZTPF.js +374 -0
  90. package/chunks/{chunk-RNAJVXUG.js → chunk-ENAUXRPG.js} +6 -6
  91. package/chunks/{chunk-WXD7INFV.js → chunk-EO4U2X47.js} +10 -8
  92. package/chunks/{chunk-WDVV3LRM.js → chunk-EPVEPTI3.js} +45 -152
  93. package/chunks/chunk-ERU3SDXT.js +27 -0
  94. package/chunks/{chunk-4HOEU2OR.js → chunk-EWJTAP3Y.js} +1 -19
  95. package/chunks/{chunk-GSFV5RQW.js → chunk-EYN3G5XD.js} +328 -4
  96. package/chunks/{chunk-QB3KS3N3.js → chunk-FGROOEKM.js} +5 -40
  97. package/chunks/{chunk-TOOOLHVS.js → chunk-FH5AVEWJ.js} +3 -3
  98. package/chunks/{chunk-DAI65CMX.js → chunk-FJZWRNEW.js} +1 -1
  99. package/chunks/{chunk-GNY7B3CA.js → chunk-FUQK5ZNL.js} +1 -1
  100. package/chunks/{chunk-GOEVQADN.js → chunk-GDIPPCW6.js} +330 -175
  101. package/chunks/{chunk-ALMR3E6Q.js → chunk-GDWE23OR.js} +3 -3
  102. package/chunks/{chunk-LNYV4GXX.js → chunk-GSKX53AN.js} +0 -139
  103. package/chunks/{chunk-ELD3OBPU.js → chunk-GWOVD63C.js} +3 -3
  104. package/chunks/{chunk-IWABUX6T.js → chunk-GX5FF2IE.js} +6 -6
  105. package/chunks/{chunk-22GORRNY.js → chunk-GZMNHAYC.js} +1 -1
  106. package/chunks/{chunk-YZTGGCEE.js → chunk-H3TFIFX3.js} +1 -1
  107. package/chunks/{chunk-6G4V7SE4.js → chunk-HG46TTAG.js} +1 -1
  108. package/chunks/{chunk-FETY36NQ.js → chunk-HGEUHUEV.js} +1 -1
  109. package/chunks/{chunk-KEPC5BOL.js → chunk-IBRQG2MP.js} +12 -15
  110. package/chunks/{chunk-OXR34GCD.js → chunk-IILWL3KY.js} +2054 -146
  111. package/chunks/{chunk-IW6RQPQB.js → chunk-IJOS26LH.js} +1 -3
  112. package/chunks/{chunk-ORFIYTI2.js → chunk-IK2MWJP5.js} +1 -1
  113. package/chunks/{chunk-CMWU6P4D.js → chunk-IRJRB3OD.js} +1 -1
  114. package/chunks/{chunk-QHLHE2OT.js → chunk-IUN5ZMFY.js} +1 -1
  115. package/chunks/{chunk-LYT2OU7D.js → chunk-IXXV6BVB.js} +172 -6
  116. package/chunks/{chunk-R3JIDRUL.js → chunk-J6H4JP25.js} +4 -4
  117. package/chunks/{chunk-NB3NDQQK.js → chunk-J6SBP5G2.js} +1 -1
  118. package/chunks/{chunk-TRQNRP2H.js → chunk-J7LBAKDH.js} +46 -3
  119. package/chunks/{chunk-67XTVRVB.js → chunk-JJFHISXU.js} +30 -25
  120. package/chunks/chunk-JL6APGBX.js +43 -0
  121. package/chunks/{chunk-NX7ZTXFF.js → chunk-JSKEW4E7.js} +2 -1
  122. package/chunks/{chunk-BK7D2JR6.js → chunk-JVTXAA35.js} +3 -3
  123. package/chunks/chunk-K2OJUPOE.js +78 -0
  124. package/chunks/{chunk-G3ZUMSFS.js → chunk-K3U6VB3O.js} +6 -6
  125. package/chunks/{chunk-4I3WFI3U.js → chunk-K4KWLF7Q.js} +12 -12
  126. package/chunks/{chunk-WXPPUPHM.js → chunk-KWFFJ6AK.js} +1 -1
  127. package/chunks/{chunk-46MMBZHI.js → chunk-KZYOFJ6V.js} +4 -4
  128. package/chunks/{chunk-ULZECEIP.js → chunk-LDQHA6L4.js} +2 -20
  129. package/chunks/{chunk-7LTCFO6T.js → chunk-LQBAFO5D.js} +6 -5
  130. package/chunks/{chunk-SOA4HKRJ.js → chunk-LT2XFADM.js} +2 -2
  131. package/chunks/{chunk-JYGIJA4W.js → chunk-LWWRJRCD.js} +1 -1
  132. package/chunks/{chunk-YQGW3M6Z.js → chunk-MFQWRBFB.js} +5 -5
  133. package/chunks/{chunk-TODNHE76.js → chunk-MUFGTWQH.js} +5 -5
  134. package/chunks/{chunk-5DQ4YTIZ.js → chunk-MV5XRRML.js} +3 -3
  135. package/chunks/{chunk-IR6JKBAP.js → chunk-NOUK63IR.js} +2 -2
  136. package/chunks/{chunk-XQ4RDO5B.js → chunk-NV77SEX3.js} +1 -1
  137. package/chunks/{chunk-OFVAS4AR.js → chunk-NWDPOFJI.js} +2 -2
  138. package/chunks/chunk-NY6OPAPS.js +820 -0
  139. package/chunks/{chunk-WDN64MVT.js → chunk-O5VX66FB.js} +127 -18
  140. package/chunks/{chunk-MV5DTLJV.js → chunk-OHCR4O3U.js} +1 -1
  141. package/chunks/{chunk-LEAOJ43M.js → chunk-OKOPKQ2X.js} +1310 -2107
  142. package/chunks/{chunk-B25JYXZE.js → chunk-ONLJBOI2.js} +971 -17
  143. package/chunks/{chunk-QQK4L3UU.js → chunk-OWUAZXXN.js} +132 -26
  144. package/chunks/{chunk-R457KFV7.js → chunk-P42IUOAO.js} +3 -3
  145. package/chunks/{chunk-LUNC5KCL.js → chunk-PRELUGCQ.js} +214 -39
  146. package/chunks/{chunk-5OZUKLL7.js → chunk-QSMQKTXV.js} +4 -4
  147. package/chunks/{chunk-FAJPLSYF.js → chunk-QTQYLQ5A.js} +85 -81
  148. package/chunks/{chunk-CALTQWTZ.js → chunk-QVZDV4ZS.js} +2 -2
  149. package/chunks/{chunk-J6MB5ZHZ.js → chunk-QZW6WRB7.js} +2 -1
  150. package/chunks/{chunk-KFECPHLV.js → chunk-RBWAGV73.js} +3 -3
  151. package/chunks/{chunk-4VY3ITHR.js → chunk-RF5RQRTD.js} +3 -3
  152. package/chunks/{chunk-HIXUUCGY.js → chunk-RPMXMR6U.js} +2 -2
  153. package/chunks/{chunk-3OAXF3UK.js → chunk-RRQEZBL2.js} +3756 -1343
  154. package/chunks/{chunk-4ALNJDHL.js → chunk-RSGEAWFJ.js} +19 -1
  155. package/chunks/{chunk-5BH2AIEY.js → chunk-RUE62UH6.js} +2 -2
  156. package/chunks/{chunk-PQEISIKS.js → chunk-SAH4BD2J.js} +0 -67
  157. package/chunks/{chunk-A7EFXK7P.js → chunk-SAOJHRWY.js} +2 -2
  158. package/chunks/{chunk-JO77FGNZ.js → chunk-SDUIETBG.js} +19 -7
  159. package/chunks/{chunk-6RZX2HIH.js → chunk-TBEXLLAO.js} +2 -2
  160. package/chunks/{chunk-PSPAM24S.js → chunk-TBSCTWKF.js} +6 -0
  161. package/chunks/{chunk-HRPFBHW7.js → chunk-TPKQIA7G.js} +1 -0
  162. package/chunks/{chunk-XDNFODER.js → chunk-TUIW5LLK.js} +1 -1
  163. package/chunks/{chunk-APXIW2TF.js → chunk-TVV5FA3G.js} +4 -4
  164. package/chunks/chunk-U6H3XTFA.js +95 -0
  165. package/chunks/{chunk-S5QR6CB5.js → chunk-UKMWZ5NS.js} +108 -887
  166. package/chunks/{chunk-U6REWGVR.js → chunk-VG2BRSEK.js} +2 -2
  167. package/chunks/chunk-VGBOJH2D.js +127 -0
  168. package/chunks/chunk-VGY2RGXL.js +100 -0
  169. package/chunks/{chunk-ZP5XDLSA.js → chunk-VLWG3EHY.js} +12 -12
  170. package/chunks/{chunk-4JNHNVAZ.js → chunk-W547PYQ7.js} +9 -4
  171. package/chunks/{chunk-7VEYUF3N.js → chunk-W5ZQMAEM.js} +1 -1
  172. package/chunks/{chunk-QAZ2MGYT.js → chunk-W7JJLUSB.js} +2 -2
  173. package/chunks/{chunk-CCBTNJB4.js → chunk-W7Q7XDQI.js} +39 -27
  174. package/chunks/{chunk-DARWOZY6.js → chunk-WD6YQI5M.js} +1 -1
  175. package/chunks/{chunk-F2NYVASI.js → chunk-WXAWG3JS.js} +30 -13
  176. package/chunks/{chunk-NPKCVSXX.js → chunk-XB5JRCAM.js} +11 -9
  177. package/chunks/{chunk-XSOXPG2L.js → chunk-XE46RQFI.js} +136 -8
  178. package/chunks/{chunk-QTNCGZHQ.js → chunk-XX5HQLCZ.js} +16 -0
  179. package/chunks/{chunk-2Z3T52OC.js → chunk-Y5TM7SBV.js} +7 -2
  180. package/chunks/chunk-YC6XOB5N.js +691 -0
  181. package/chunks/{chunk-CWVZBIZJ.js → chunk-YDW4ERSS.js} +1 -1
  182. package/chunks/{chunk-TRWQQBVH.js → chunk-YGCTOXUT.js} +10 -24
  183. package/chunks/{chunk-WK7P62DV.js → chunk-YKC67ZEF.js} +6 -6
  184. package/chunks/{chunk-KA5HR3G2.js → chunk-YKM6MITI.js} +5 -5
  185. package/chunks/{chunk-X7LFJF5D.js → chunk-YM6KUQ2S.js} +36 -84
  186. package/chunks/{chunk-HZ2HUXX7.js → chunk-YS2ZJSOA.js} +29 -12
  187. package/chunks/{chunk-G37O7YO6.js → chunk-ZAWM6KRF.js} +3 -3
  188. package/chunks/{chunk-H3Q3RSKZ.js → chunk-ZFIWHBJ3.js} +1 -1
  189. package/chunks/{chunk-XBVNNDPK.js → chunk-ZHKTKHMO.js} +8 -1
  190. package/chunks/{chunk-YLOHCA6I.js → chunk-ZKWO4CF4.js} +2 -2
  191. package/chunks/{chunk-VJJXG73H.js → chunk-ZMQL5BL5.js} +21 -6
  192. package/chunks/{chunk-FGHPZGOP.js → chunk-ZMUYBOYB.js} +39 -55
  193. package/chunks/{chunk-FV4DM2M4.js → chunk-ZNI3YJHS.js} +26 -6
  194. package/chunks/{chunk-565U2ANU.js → chunk-ZTTC7T4X.js} +1 -1
  195. package/chunks/{chunk-7OCIQNKX.js → chunk-ZW2EUO2A.js} +1 -1
  196. package/chunks/codex-subagent-executor-26XOHVKH.js +585 -0
  197. package/chunks/{config-utils-GPLIABL2.js → config-utils-JUG3MOYN.js} +68 -57
  198. package/chunks/{contextCommand-NCUQUDBY.js → contextCommand-6K3POZFA.js} +65 -54
  199. package/chunks/{core-runtime-WKYKWVYU.js → core-runtime-XQFZLA2V.js} +66 -55
  200. package/chunks/{create-sub-session-TGIX63YU.js → create-sub-session-4UJ6RM6W.js} +5 -2
  201. package/chunks/{create-sub-session-PPLXB3JJ.js → create-sub-session-T4IYIOC7.js} +178 -91
  202. package/chunks/{cron-create-GTPVMJCF.js → cron-create-6466RWSO.js} +2 -2
  203. package/chunks/{cron-delete-ZBK27Z4K.js → cron-delete-W4QUWHOA.js} +2 -2
  204. package/chunks/{cron-list-KTFKFDKC.js → cron-list-Q5LJ5PZE.js} +2 -2
  205. package/chunks/{daemon-2CKIAO3I.js → daemon-PHPJUXDZ.js} +4 -2
  206. package/chunks/{daemon-git-worktree-guard-73ZWOLKL.js → daemon-git-worktree-guard-5WEMZ64U.js} +65 -54
  207. package/chunks/{daemon-status-provider-OK7VONJG.js → daemon-status-provider-GMD7QD4T.js} +74 -63
  208. package/chunks/{daemon-trust-policy-CAUCREG2.js → daemon-trust-policy-IPBZES2Z.js} +71 -60
  209. package/chunks/{daemon-trust-policy-monitor-3Y36OOEQ.js → daemon-trust-policy-monitor-MHYEN7X7.js} +71 -60
  210. package/chunks/{de-UU2YTO37.js → de-OOLZAU2U.js} +1 -1
  211. package/chunks/{deferred-core-runtime-Q7WFWYD3.js → deferred-core-runtime-CY43FZNZ.js} +63 -52
  212. package/chunks/{discovery-XP4RMDUM.js → discovery-5KUEPR65.js} +2 -2
  213. package/chunks/{display-image-CTNHJRZC.js → display-image-6AZIHP3J.js} +3 -3
  214. package/chunks/{dist-F34J4FZX.js → dist-2QYIVNS6.js} +2 -5
  215. package/chunks/{dist-6YDUH3BB.js → dist-GIMQXYLI.js} +10 -631
  216. package/chunks/{dist-NP7QKLVG.js → dist-GUB7QRYA.js} +3 -6
  217. package/chunks/{dist-Y5KC3IHW.js → dist-L45UB6DG.js} +233 -35
  218. package/chunks/{dist-XLV33CLY.js → dist-MPUZZOG5.js} +5 -18
  219. package/chunks/{dist-ZDNJK74R.js → dist-PA7WPFVE.js} +6 -37
  220. package/chunks/{dist-F6JLAJLE.js → dist-T6DDPDLQ.js} +16 -36
  221. package/chunks/{dist-BNQVF565.js → dist-TFGETXFN.js} +14 -37
  222. package/chunks/{dist-UFTFGI6I.js → dist-VDLSBCLM.js} +2 -6
  223. package/chunks/{edit-YJD6IETK.js → edit-6NUP5IPX.js} +48 -38
  224. package/chunks/{en-YJNRUQG4.js → en-ZSZW3PZX.js} +4 -1
  225. package/chunks/{enter-worktree-YFTKHXHZ.js → enter-worktree-EETDMJRF.js} +5 -5
  226. package/chunks/{enterPlanMode-EFPVTWIH.js → enterPlanMode-AZHYHEII.js} +48 -38
  227. package/chunks/{environment-HP3AXFTB.js → environment-ON6GIQ4F.js} +66 -55
  228. package/chunks/{errors-22ON46G7.js → errors-DQE63SCC.js} +65 -54
  229. package/chunks/exec-66WQIVYU.js +505 -0
  230. package/chunks/{exit-worktree-NF2XEMES.js → exit-worktree-DIPJ6S55.js} +5 -5
  231. package/chunks/{exitPlanMode-MOQUNCBH.js → exitPlanMode-NHBV6LAI.js} +48 -38
  232. package/chunks/{fast-path-2X7BPMXX.js → fast-path-EPJSUZZC.js} +7 -7
  233. package/chunks/{fast-path-settings-SATXY3PD.js → fast-path-settings-XDYX7X5Z.js} +2 -2
  234. package/chunks/{fr-HKNWVXRJ.js → fr-JJWM2HUS.js} +1 -1
  235. package/chunks/{glob-Y7ACIB3P.js → glob-MNEXQ2NV.js} +51 -41
  236. package/chunks/{goal-tools-DABMICUC.js → goal-tools-D2A4QBCJ.js} +54 -40
  237. package/chunks/{grep-BLHF2S5D.js → grep-EFWPV3MM.js} +2 -2
  238. package/chunks/{handleAutoUpdate-MCAMHYDI.js → handleAutoUpdate-2RY3OQA6.js} +67 -56
  239. package/chunks/{i18n-C3GDCALP.js → i18n-HTHDB3I7.js} +64 -53
  240. package/chunks/{image-gen-XP4NNIYG.js → image-gen-2PHED3P4.js} +8 -6
  241. package/chunks/{initializer-4URDQL2G.js → initializer-JEVLJCQA.js} +71 -60
  242. package/chunks/{installationInfo-LBOL6SBV.js → installationInfo-ITRB6J4L.js} +63 -52
  243. package/chunks/{ja-GJS5RZGU.js → ja-L67TXFDJ.js} +1 -1
  244. package/chunks/list-KOUIMHT5.js +133 -0
  245. package/chunks/{list-agents-2CXPGJUE.js → list-agents-IY4NEWLP.js} +17 -7
  246. package/chunks/{llm-2KPNSAVY.js → llm-F7WHGESY.js} +132 -120
  247. package/chunks/{llm-content-generator-GR3FOHLB.js → llm-content-generator-NYQ2NAVA.js} +6 -5
  248. package/chunks/{loadedSettingsAdapter-DVKROEJD.js → loadedSettingsAdapter-HZUAX5CX.js} +71 -60
  249. package/chunks/{loggingContentGenerator-P4K6K5W4.js → loggingContentGenerator-WMNU7C5J.js} +70 -59
  250. package/chunks/{loop-wakeup-HL6XOWI4.js → loop-wakeup-ANX25YW2.js} +3 -3
  251. package/chunks/{ls-YV7RKLKY.js → ls-4XCMJNZF.js} +4 -4
  252. package/chunks/{lsp-NO3AMRZT.js → lsp-K5E2Y64R.js} +1 -1
  253. package/chunks/{managed-npm-update-VWBKHNIN.js → managed-npm-update-EJJB65QI.js} +63 -52
  254. package/chunks/mcp-I73R6HS3.js +127 -0
  255. package/chunks/{monitor-A255TNZR.js → monitor-T56GJNA4.js} +50 -40
  256. package/chunks/{nonInteractiveCli-LXGIKQAT.js → nonInteractiveCli-CKHHJ423.js} +120 -109
  257. package/chunks/{notebook-edit-5UYHS2DM.js → notebook-edit-W5TU3EZ3.js} +48 -38
  258. package/chunks/openai-WX26N5OJ.js +47 -0
  259. package/chunks/{openaiContentGenerator-A6MAMEO5.js → openaiContentGenerator-TH6YAWAH.js} +33 -25
  260. package/chunks/openaiResponsesContentGenerator-EWLWQPKS.js +1738 -0
  261. package/chunks/{pidfile-B7DZC4TP.js → pidfile-RCC6TCEM.js} +63 -52
  262. package/chunks/process-registry-X6ZCASEN.js +10 -0
  263. package/chunks/{processUtils-BPZ2MCZS.js → processUtils-DQDQBRMC.js} +2 -2
  264. package/chunks/{prompt-terminal-ledger-FYYTAOXS.js → prompt-terminal-ledger-2LXWAGWU.js} +64 -53
  265. package/chunks/{pt-FXMYXEUV.js → pt-77SBDL4B.js} +1 -1
  266. package/chunks/{qwenContentGenerator-4IOJFD4S.js → qwenContentGenerator-LG65Z2YV.js} +61 -49
  267. package/chunks/{qwenOAuth2-KX6LVYQ3.js → qwenOAuth2-PJ63CCFD.js} +7 -5
  268. package/chunks/{read-file-A4H4O3VQ.js → read-file-72HMRUT4.js} +12 -9
  269. package/chunks/{read-mcp-resource-D3N75DGF.js → read-mcp-resource-NPF44YSC.js} +1 -1
  270. package/chunks/{record-artifact-Q5CRGJTP.js → record-artifact-MDXCCW2J.js} +3 -3
  271. package/chunks/record-source-VJLKDGGR.js +22 -0
  272. package/chunks/{report-findings-TJ34R7QK.js → report-findings-CZTYMZTC.js} +4 -4
  273. package/chunks/{request-shutdown-LRKMTBAD.js → request-shutdown-KOZHPVZU.js} +5 -5
  274. package/chunks/{resumeHistoryUtils-YQQ43E4N.js → resumeHistoryUtils-S2Q3M3EH.js} +69 -58
  275. package/chunks/{ripGrep-W32NWFTA.js → ripGrep-B2I3L5CO.js} +17 -13
  276. package/chunks/{ru-RMHURE5U.js → ru-UYWHKWF2.js} +1 -1
  277. package/chunks/{run-qwen-serve-WBSWWIRV.js → run-qwen-serve-AOPYFCVP.js} +305 -132
  278. package/chunks/{runtime-VRVBX2E5.js → runtime-TZMHKZAP.js} +77 -66
  279. package/chunks/{scheduled-tasks-D65KJDA3.js → scheduled-tasks-7RL6ZOYT.js} +72 -60
  280. package/chunks/{scheduler-M2YPN7Z7.js → scheduler-D6RLOFNU.js} +65 -54
  281. package/chunks/{sdk-exporters-grpc-MXTVSE3C.js → sdk-exporters-grpc-Y2ZUQDUQ.js} +2 -2
  282. package/chunks/{sdk-exporters-http-7R2ARBPV.js → sdk-exporters-http-VWTF4W6K.js} +3 -3
  283. package/chunks/{sdk-impl-YOLO7LV4.js → sdk-impl-G6FVTBQZ.js} +9 -9
  284. package/chunks/{send-message-76BKWKFZ.js → send-message-MMZVSS7P.js} +12 -9
  285. package/chunks/{serve-BE3H2P6P.js → serve-HWWDYI37.js} +72 -61
  286. package/chunks/{server-FLY5JERG.js → server-MD2X5U5L.js} +3156 -564
  287. package/chunks/{session-JVN62R5K.js → session-AFUMFNN7.js} +124 -113
  288. package/chunks/{session-attachments-root-7ACGLHXA.js → session-attachments-root-QPN3YWTY.js} +63 -52
  289. package/chunks/{session-pr-refresh-TQS57SDK.js → session-pr-refresh-4Y2ANMJX.js} +72 -60
  290. package/chunks/{settings-D44YMZFT.js → settings-QQRQ2LR7.js} +74 -63
  291. package/chunks/{shell-3VE6I4V5.js → shell-NUYUYMVI.js} +48 -38
  292. package/chunks/{skill-FHEGRRZU.js → skill-KHLDVOXW.js} +68 -30
  293. package/chunks/{skill-settings-VHEJMBFL.js → skill-settings-INLEGDEZ.js} +70 -59
  294. package/chunks/{spawnChannel-T6MX2ZDN.js → spawnChannel-KBGZHW2G.js} +67 -56
  295. package/chunks/{standalone-update-QUGHFMCS.js → standalone-update-3QP5NDVJ.js} +65 -54
  296. package/chunks/{start-opentui-ui-IHIIZ2LE.js → start-opentui-ui-VBT3XDWN.js} +2682 -2153
  297. package/chunks/{startInteractiveUI-LR7K2ARZ.js → startInteractiveUI-AZHKCHMR.js} +1562 -2317
  298. package/chunks/{syntheticOutput-D2P5V6RG.js → syntheticOutput-KRASPDE3.js} +2 -2
  299. package/chunks/{task-create-MWXJFRRM.js → task-create-TNXNT7ZD.js} +8 -8
  300. package/chunks/{task-list-EYO3FE57.js → task-list-FHNIJDKT.js} +1 -1
  301. package/chunks/{task-stop-BFSKRTGV.js → task-stop-MG4ZMTEI.js} +1 -1
  302. package/chunks/{task-update-2JJJRHMT.js → task-update-4HU62CJT.js} +8 -8
  303. package/chunks/{team-create-GY3VFY47.js → team-create-K5DNSJXR.js} +50 -40
  304. package/chunks/{team-delete-IQZ6XGFI.js → team-delete-2T44GUNN.js} +1 -1
  305. package/chunks/{team-plan-approval-BQPGZOT5.js → team-plan-approval-2ZNAQT2A.js} +48 -38
  306. package/chunks/{terminal-image-renderer-YNYW5CQG.js → terminal-image-renderer-23CW4A6Q.js} +65 -54
  307. package/chunks/{theme-manager-U6CIK3GM.js → theme-manager-G2333AMH.js} +63 -52
  308. package/chunks/{todoWrite-5ERKFWAK.js → todoWrite-BO2GR5MN.js} +4 -4
  309. package/chunks/{tool-search-XI3QWD5I.js → tool-search-MKQCKXN5.js} +22 -15
  310. package/chunks/{total-session-admission-3SNSJJ32.js → total-session-admission-ENKTM2KX.js} +69 -58
  311. package/chunks/{trustedFolders-OVAQKNV5.js → trustedFolders-2ETDL7OD.js} +64 -53
  312. package/chunks/{update-relaunch-XV5O74E3.js → update-relaunch-FMVNN5KA.js} +5 -5
  313. package/chunks/{updateCheck-CHUYWD6L.js → updateCheck-KWRV5KLJ.js} +66 -55
  314. package/chunks/{useAutoAcceptIndicator-VKSVIXZC.js → useAutoAcceptIndicator-7AUXAIQF.js} +73 -62
  315. package/chunks/{validateNonInterActiveAuth-ZNUTD3E5.js → validateNonInterActiveAuth-NETKLLDV.js} +117 -106
  316. package/chunks/{version-EK7VAGSI.js → version-DACNN2ZM.js} +1 -1
  317. package/chunks/{web-fetch-24KZO763.js → web-fetch-CIVCRET4.js} +16 -12
  318. package/chunks/{web-search-CRNXKZ2X.js → web-search-GOHZRGMM.js} +389 -327
  319. package/chunks/{web-shell-static-BFDESDD4.js → web-shell-static-T7UGLVE4.js} +2 -7
  320. package/chunks/workflow-IL2FOALZ.js +1324 -0
  321. package/chunks/workspace-providers-status-YGXL6N5U.js +131 -0
  322. package/chunks/{workspace-registration-store-HKLJEDQX.js → workspace-registration-store-E4IAOFFZ.js} +3 -1
  323. package/chunks/{workspace-registry-7RDDOBLN.js → workspace-registry-KX6BIBYK.js} +69 -58
  324. package/chunks/{workspace-runtime-coordinator-LEPDPXJO.js → workspace-runtime-coordinator-2KYYGDDR.js} +72 -59
  325. package/chunks/{workspace-service-5IFDCNN3.js → workspace-service-5Q6LWBYR.js} +76 -65
  326. package/chunks/{workspace-skills-status-FJ3HNH4H.js → workspace-skills-status-PJZTFPVV.js} +72 -61
  327. package/chunks/{workspace-trust-reconciler-PQFHIWLR.js → workspace-trust-reconciler-HS6PWNEA.js} +77 -66
  328. package/chunks/{write-file-ERG67ZFX.js → write-file-JB3DRM7O.js} +50 -40
  329. package/chunks/{zh-VBFCRQBL.js → zh-7UJA4ICT.js} +4 -1
  330. package/chunks/{zh-TW-N2TBF2F2.js → zh-TW-RV24PWUI.js} +4 -1
  331. package/chunks/{zoom-image-WQYEC3SR.js → zoom-image-AVHQFOOQ.js} +12 -9
  332. package/cli.js +16 -16
  333. package/codeModeHost.js +4425 -0
  334. package/export-transcript-document.css +1 -0
  335. package/export-transcript-document.js +164 -165
  336. package/locales/ca.js +2 -2
  337. package/locales/de.js +2 -2
  338. package/locales/en.js +5 -2
  339. package/locales/fr.js +2 -2
  340. package/locales/ja.js +2 -2
  341. package/locales/pt.js +2 -2
  342. package/locales/ru.js +2 -2
  343. package/locales/zh-TW.js +5 -2
  344. package/locales/zh.js +5 -2
  345. package/package.json +6 -4
  346. package/web-shell/assets/{abnfDiagram-VCTEODGH-BRLgQbnT.js → abnfDiagram-VCTEODGH-BH2nK5Z_.js} +1 -1
  347. package/web-shell/assets/{arc-qAF9_XsR.js → arc-CUUQ6krv.js} +1 -1
  348. package/web-shell/assets/{architectureDiagram-5GKGNRK7-BorUttEz.js → architectureDiagram-5GKGNRK7-CJjiRuGx.js} +1 -1
  349. package/web-shell/assets/{blockDiagram-NRAW4CY4-Bj0qZVxu.js → blockDiagram-NRAW4CY4-GCDyU9ZX.js} +1 -1
  350. package/web-shell/assets/{c4Diagram-UCG6FXSJ-BTqJis32.js → c4Diagram-UCG6FXSJ-C68MiN6h.js} +1 -1
  351. package/web-shell/assets/channel-DauVlmdF.js +1 -0
  352. package/web-shell/assets/{chunk-2Q5K7J3B-RrQ5X8m-.js → chunk-2Q5K7J3B-_8B6frXZ.js} +1 -1
  353. package/web-shell/assets/{chunk-5VM5RSS4-uUjDl8wO.js → chunk-5VM5RSS4-CroSinX7.js} +1 -1
  354. package/web-shell/assets/{chunk-F27PBJKO-C3JhpyzI.js → chunk-F27PBJKO-CGn4Z0Fx.js} +1 -1
  355. package/web-shell/assets/{chunk-G27WJ6UU-C8ZNFs7F.js → chunk-G27WJ6UU-BI5nLQcf.js} +1 -1
  356. package/web-shell/assets/{chunk-JWPE2WC7-DNpXtEOs.js → chunk-JWPE2WC7-CYJH0FuH.js} +1 -1
  357. package/web-shell/assets/{chunk-LCL6LL3I-DagA2ZLw.js → chunk-LCL6LL3I-DjWZUqA1.js} +1 -1
  358. package/web-shell/assets/{chunk-POPQ4Y6H-R23uH7Xm.js → chunk-POPQ4Y6H-DcTkIHm8.js} +1 -1
  359. package/web-shell/assets/{chunk-SVP7TREG-Qz9RN_BR.js → chunk-SVP7TREG-E8sZT5uK.js} +1 -1
  360. package/web-shell/assets/{chunk-XXDRQBXY-jYb1_hni.js → chunk-XXDRQBXY-CurjPKw_.js} +1 -1
  361. package/web-shell/assets/classDiagram-DTDB5LWJ-BuIh7bj1.js +1 -0
  362. package/web-shell/assets/classDiagram-v2-JRS7N3AN-BuIh7bj1.js +1 -0
  363. package/web-shell/assets/{cose-bilkent-JH36ORCC-Cv2OunpE.js → cose-bilkent-JH36ORCC-CJEnNhth.js} +1 -1
  364. package/web-shell/assets/{cynefin-OW5HDTMX-LH42KFJx.js → cynefin-OW5HDTMX-jwEkm0yw.js} +1 -1
  365. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-Dha4_OoR.js → cynefinDiagram-5FMLGOSQ-B-OVQ6AO.js} +1 -1
  366. package/web-shell/assets/{dagre-3AP2YEHR-Br5lnUKD.js → dagre-3AP2YEHR-CKKK9WNR.js} +1 -1
  367. package/web-shell/assets/{diagram-S7CK7UJ4-dpKq2bBX.js → diagram-S7CK7UJ4-D486veFQ.js} +1 -1
  368. package/web-shell/assets/{diagram-UQ7AKVKN-BAgHWpXr.js → diagram-UQ7AKVKN-C3GujqHv.js} +1 -1
  369. package/web-shell/assets/{diagram-VSXAHHWV-GRRzpyE2.js → diagram-VSXAHHWV-BrOTDwuU.js} +1 -1
  370. package/web-shell/assets/{diagram-VX7I27RA-BNFiaYpG.js → diagram-VX7I27RA-C4D9kWE3.js} +1 -1
  371. package/web-shell/assets/{diagram-Z3DM3KII-BisZzB_h.js → diagram-Z3DM3KII-7rAManT0.js} +1 -1
  372. package/web-shell/assets/{ebnfDiagram-PWID7BFC-B1xbwycf.js → ebnfDiagram-PWID7BFC-CqVzKOdr.js} +1 -1
  373. package/web-shell/assets/{erDiagram-SSCWMZ5O-CQMzbGE5.js → erDiagram-SSCWMZ5O-D2s08fc_.js} +1 -1
  374. package/web-shell/assets/{flowDiagram-A5DVABFB-CZ_Zondl.js → flowDiagram-A5DVABFB-CrKtBxB2.js} +1 -1
  375. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BTh2ShxS.js → ganttDiagram-EL5Y4UJY-CD1CKdlt.js} +1 -1
  376. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-oHOB-Uxt.js → gitGraphDiagram-WWUBYQGX-CHDXdVNn.js} +1 -1
  377. package/web-shell/assets/index-D8tzgUOC.css +36 -0
  378. package/web-shell/assets/{index-DWoFMu5x.js → index-DWz95m74.js} +1 -1
  379. package/web-shell/assets/index-cDFf68Wd.js +2204 -0
  380. package/web-shell/assets/{infoDiagram-RXCK75RN-C0QpudbG.js → infoDiagram-RXCK75RN-Cr1oLCwe.js} +1 -1
  381. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-a6B741uT.js → ishikawaDiagram-5VMMS53U--RghV1mm.js} +1 -1
  382. package/web-shell/assets/{journeyDiagram-EYS64GPL-Dbht9ICp.js → journeyDiagram-EYS64GPL-MN1ZkGW8.js} +1 -1
  383. package/web-shell/assets/{kanban-definition-3QL26DDD-D4OFR8-h.js → kanban-definition-3QL26DDD-DL05VTn0.js} +1 -1
  384. package/web-shell/assets/{layout-Dvdh5jRH.js → layout-D_TvQzvn.js} +1 -1
  385. package/web-shell/assets/{linear-Dvc6KIW2.js → linear-B_0OH6XF.js} +1 -1
  386. package/web-shell/assets/{mermaid.core-CB36RfIb.js → mermaid.core-B9Nklh9I.js} +6 -6
  387. package/web-shell/assets/{mindmap-definition-FBJOCRG2-Fmqo1CjP.js → mindmap-definition-FBJOCRG2-CevIQ0LR.js} +1 -1
  388. package/web-shell/assets/{pegDiagram-XKGWAZYB-CCxYBoA4.js → pegDiagram-XKGWAZYB-DQ8PIv0d.js} +1 -1
  389. package/web-shell/assets/{pieDiagram-E7YTZNPT-BVHKQFzt.js → pieDiagram-E7YTZNPT-BVTV1pPe.js} +1 -1
  390. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-l95IznwR.js → quadrantDiagram-AXDQQJYC-DHN6nhpe.js} +1 -1
  391. package/web-shell/assets/qwen-code-notification-BRVagufF.png +0 -0
  392. package/web-shell/assets/{railroadDiagram-O6MQD6OU-BlLdRdXp.js → railroadDiagram-O6MQD6OU-8HOyX0u-.js} +1 -1
  393. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BkDLBR5w.js → requirementDiagram-EFPCY7ZU-9W4_14i8.js} +1 -1
  394. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-jAIqRp65.js → sankeyDiagram-P5KCCOFB-DSUBB2XP.js} +1 -1
  395. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-f-soZYPr.js → sequenceDiagram-WJ2MYXX4-DD3jH6Jn.js} +1 -1
  396. package/web-shell/assets/{sizeCapture-X5ZJPWSS-BzOuAfB2.js → sizeCapture-X5ZJPWSS-RAFTU3Cz.js} +1 -1
  397. package/web-shell/assets/{stateDiagram-HBIQ2CUA-BPLSs12r.js → stateDiagram-HBIQ2CUA-Drk-oZ2x.js} +1 -1
  398. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-QzYteVIm.js +1 -0
  399. package/web-shell/assets/{swimlanes-XN3QIQJK-D-9E_RIR.js → swimlanes-XN3QIQJK-Cy2nlOGx.js} +1 -1
  400. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-xTr-HG26.js +8 -0
  401. package/web-shell/assets/{timeline-definition-24CTP7MA-CT56K-gV.js → timeline-definition-24CTP7MA-B7outYof.js} +1 -1
  402. package/web-shell/assets/{vennDiagram-4TSXK5OY-B-vi4IyO.js → vennDiagram-4TSXK5OY-Di_u1Ic6.js} +1 -1
  403. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-C9O7Ju98.js → wardleyDiagram-VM6X3IG4-DYocuCAM.js} +1 -1
  404. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-6d8w3jg2.js → xychartDiagram-S5SC5T6Z-AADDse54.js} +1 -1
  405. package/web-shell/index.html +29 -5
  406. package/chunks/chunk-V7RNNPGC.js +0 -44
  407. package/chunks/list-JOGBAC2R.js +0 -122
  408. package/chunks/mcp-6YYNSYLK.js +0 -116
  409. package/chunks/workflow-HD5NYMW5.js +0 -2907
  410. package/chunks/workspace-providers-status-MAM42IZS.js +0 -120
  411. package/web-shell/assets/channel-COIuCrVH.js +0 -1
  412. package/web-shell/assets/classDiagram-DTDB5LWJ-DoX6OYqu.js +0 -1
  413. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DoX6OYqu.js +0 -1
  414. package/web-shell/assets/index-CI1ysIEv.js +0 -2154
  415. package/web-shell/assets/index-CpxXGH-8.css +0 -36
  416. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-IRul-LaT.js +0 -1
  417. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6lgKepA.js +0 -8
  418. package/chunks/{chunk-JA5CBKRP.js → chunk-7NXSVSFB.js} +0 -0
  419. package/chunks/{open-with-auth-6MVIHMXB.js → open-with-auth-XFCCJOO6.js} +3 -3
@@ -1,29 +1,44 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
+ import {
4
+ disableMouseEvents,
5
+ enableMouseEvents,
6
+ useKeypress,
7
+ useKeypressContext
8
+ } from "./chunk-SAOJHRWY.js";
3
9
  import {
4
10
  ICON
5
- } from "./chunk-WXD7INFV.js";
11
+ } from "./chunk-EO4U2X47.js";
6
12
  import {
7
13
  theme
8
14
  } from "./chunk-4LIPOIXS.js";
9
15
  import {
10
16
  require_jsx_runtime
11
17
  } from "./chunk-SV5PQVQE.js";
18
+ import {
19
+ Box_default,
20
+ Text,
21
+ use_stdin_default,
22
+ use_stdout_default
23
+ } from "./chunk-O4KNCAX4.js";
12
24
  import {
13
25
  require_react
14
26
  } from "./chunk-5QWWOFGG.js";
15
27
  import {
16
28
  sanitizeForOsc,
17
29
  wrapForMultiplexer
18
- } from "./chunk-XDNFODER.js";
30
+ } from "./chunk-TUIW5LLK.js";
19
31
  import {
20
32
  MAIN_SOURCE,
21
33
  uiTelemetryService
22
- } from "./chunk-F2NYVASI.js";
34
+ } from "./chunk-WXAWG3JS.js";
23
35
  import {
24
36
  ToolDisplayNames,
25
37
  ToolNames
26
- } from "./chunk-MWIO7MF6.js";
38
+ } from "./chunk-2WSLXP3W.js";
39
+ import {
40
+ createDebugLogger
41
+ } from "./chunk-ZAFYHRVY.js";
27
42
  import {
28
43
  init_esbuild_shims
29
44
  } from "./chunk-5O2XNYP6.js";
@@ -32,9 +47,23 @@ import {
32
47
  __toESM
33
48
  } from "./chunk-J2S4EL5Y.js";
34
49
 
35
- // packages/cli/src/ui/contexts/SessionContext.tsx
50
+ // packages/cli/src/ui/contexts/SettingsContext.tsx
36
51
  init_esbuild_shims();
37
52
  var import_react = __toESM(require_react(), 1);
53
+ var SettingsContext = import_react.default.createContext(
54
+ void 0
55
+ );
56
+ var useSettings = /* @__PURE__ */ __name(() => {
57
+ const context = (0, import_react.useContext)(SettingsContext);
58
+ if (context === void 0) {
59
+ throw new Error("useSettings must be used within a SettingsProvider");
60
+ }
61
+ return context;
62
+ }, "useSettings");
63
+
64
+ // packages/cli/src/ui/contexts/SessionContext.tsx
65
+ init_esbuild_shims();
66
+ var import_react2 = __toESM(require_react(), 1);
38
67
  var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
39
68
  var EMPTY_SKILL_METRICS = {
40
69
  totalCalls: 0,
@@ -231,7 +260,7 @@ function getMetricsForDisplay(sessionId) {
231
260
  );
232
261
  }
233
262
  __name(getMetricsForDisplay, "getMetricsForDisplay");
234
- var SessionStatsContext = (0, import_react.createContext)(
263
+ var SessionStatsContext = (0, import_react2.createContext)(
235
264
  void 0
236
265
  );
237
266
  var createDefaultStats = /* @__PURE__ */ __name((sessionId = "") => ({
@@ -242,10 +271,10 @@ var createDefaultStats = /* @__PURE__ */ __name((sessionId = "") => ({
242
271
  promptCount: 0
243
272
  }), "createDefaultStats");
244
273
  var SessionStatsProvider = /* @__PURE__ */ __name(({ sessionId, children }) => {
245
- const [stats, setStats] = (0, import_react.useState)(
274
+ const [stats, setStats] = (0, import_react2.useState)(
246
275
  () => createDefaultStats(sessionId ?? "")
247
276
  );
248
- (0, import_react.useEffect)(() => {
277
+ (0, import_react2.useEffect)(() => {
249
278
  const handleUpdate = /* @__PURE__ */ __name(({
250
279
  metrics,
251
280
  lastPromptTokenCount
@@ -271,29 +300,29 @@ var SessionStatsProvider = /* @__PURE__ */ __name(({ sessionId, children }) => {
271
300
  uiTelemetryService.off("update", handleUpdate);
272
301
  };
273
302
  }, []);
274
- const startNewSession = (0, import_react.useCallback)((sessionId2) => {
303
+ const startNewSession = (0, import_react2.useCallback)((sessionId2) => {
275
304
  setStats(() => ({
276
305
  ...createDefaultStats(sessionId2),
277
306
  lastPromptTokenCount: uiTelemetryService.getLastPromptTokenCount()
278
307
  }));
279
308
  }, []);
280
- const startNewPrompt = (0, import_react.useCallback)(() => {
309
+ const startNewPrompt = (0, import_react2.useCallback)(() => {
281
310
  setStats((prevState) => ({
282
311
  ...prevState,
283
312
  promptCount: prevState.promptCount + 1
284
313
  }));
285
314
  }, []);
286
- const getPromptCount = (0, import_react.useCallback)(
315
+ const getPromptCount = (0, import_react2.useCallback)(
287
316
  () => stats.promptCount,
288
317
  [stats.promptCount]
289
318
  );
290
- const seedPromptCount = (0, import_react.useCallback)((count) => {
319
+ const seedPromptCount = (0, import_react2.useCallback)((count) => {
291
320
  setStats((prevState) => ({
292
321
  ...prevState,
293
322
  promptCount: Math.max(prevState.promptCount, count)
294
323
  }));
295
324
  }, []);
296
- const value = (0, import_react.useMemo)(
325
+ const value = (0, import_react2.useMemo)(
297
326
  () => ({
298
327
  stats,
299
328
  startNewSession,
@@ -306,7 +335,7 @@ var SessionStatsProvider = /* @__PURE__ */ __name(({ sessionId, children }) => {
306
335
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SessionStatsContext.Provider, { value, children });
307
336
  }, "SessionStatsProvider");
308
337
  var useSessionStats = /* @__PURE__ */ __name(() => {
309
- const context = (0, import_react.useContext)(SessionStatsContext);
338
+ const context = (0, import_react2.useContext)(SessionStatsContext);
310
339
  if (context === void 0) {
311
340
  throw new Error(
312
341
  "useSessionStats must be used within a SessionStatsProvider"
@@ -315,6 +344,50 @@ var useSessionStats = /* @__PURE__ */ __name(() => {
315
344
  return context;
316
345
  }, "useSessionStats");
317
346
 
347
+ // packages/cli/src/ui/hooks/useTerminalSize.ts
348
+ init_esbuild_shims();
349
+ var import_react3 = __toESM(require_react(), 1);
350
+ function getTerminalSize() {
351
+ return {
352
+ columns: process.stdout.columns || 80,
353
+ rows: process.stdout.rows || 24
354
+ };
355
+ }
356
+ __name(getTerminalSize, "getTerminalSize");
357
+ var currentSize = getTerminalSize();
358
+ var subscribers = /* @__PURE__ */ new Set();
359
+ function handleResize() {
360
+ currentSize = getTerminalSize();
361
+ for (const notify of subscribers) {
362
+ notify(currentSize);
363
+ }
364
+ }
365
+ __name(handleResize, "handleResize");
366
+ function subscribe(callback) {
367
+ if (subscribers.size === 0) {
368
+ currentSize = getTerminalSize();
369
+ process.stdout.on("resize", handleResize);
370
+ }
371
+ subscribers.add(callback);
372
+ return () => {
373
+ subscribers.delete(callback);
374
+ if (subscribers.size === 0) {
375
+ process.stdout.off("resize", handleResize);
376
+ }
377
+ };
378
+ }
379
+ __name(subscribe, "subscribe");
380
+ function useTerminalSize() {
381
+ const [size, setSize] = (0, import_react3.useState)(getTerminalSize);
382
+ (0, import_react3.useEffect)(() => {
383
+ const unsubscribe = subscribe(setSize);
384
+ setSize(currentSize);
385
+ return unsubscribe;
386
+ }, []);
387
+ return size;
388
+ }
389
+ __name(useTerminalSize, "useTerminalSize");
390
+
318
391
  // packages/cli/src/ui/utils/osc8.ts
319
392
  init_esbuild_shims();
320
393
  function osc8Open(url) {
@@ -487,9 +560,6 @@ function formatDuration(ms) {
487
560
  }
488
561
  __name(formatDuration, "formatDuration");
489
562
 
490
- // packages/cli/src/ui/keyMatchers.ts
491
- init_esbuild_shims();
492
-
493
563
  // packages/cli/src/config/keyBindings.ts
494
564
  init_esbuild_shims();
495
565
  var Command = /* @__PURE__ */ ((Command2) => {
@@ -688,6 +758,7 @@ var defaultKeyBindings = {
688
758
  };
689
759
 
690
760
  // packages/cli/src/ui/keyMatchers.ts
761
+ init_esbuild_shims();
691
762
  function matchKeyBinding(keyBinding, key) {
692
763
  let keyMatches = false;
693
764
  if (keyBinding.key !== void 0) {
@@ -733,6 +804,781 @@ function createKeyMatchers(config = defaultKeyBindings) {
733
804
  __name(createKeyMatchers, "createKeyMatchers");
734
805
  var keyMatchers = createKeyMatchers(defaultKeyBindings);
735
806
 
807
+ // packages/cli/src/ui/contexts/VirtualViewportContext.tsx
808
+ init_esbuild_shims();
809
+ var import_react4 = __toESM(require_react(), 1);
810
+ var VirtualViewportContext = (0, import_react4.createContext)(
811
+ void 0
812
+ );
813
+ function useVirtualViewport(fallback) {
814
+ return (0, import_react4.useContext)(VirtualViewportContext) ?? fallback ?? false;
815
+ }
816
+ __name(useVirtualViewport, "useVirtualViewport");
817
+
818
+ // packages/cli/src/ui/context-menu/ContextMenuContext.tsx
819
+ init_esbuild_shims();
820
+ var import_react5 = __toESM(require_react(), 1);
821
+ var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1);
822
+ var ContextMenuContext = (0, import_react5.createContext)({
823
+ menu: null,
824
+ selectedIndex: 0,
825
+ openMenu: /* @__PURE__ */ __name(() => {
826
+ }, "openMenu"),
827
+ closeMenu: /* @__PURE__ */ __name(() => {
828
+ }, "closeMenu"),
829
+ setSelectedIndex: /* @__PURE__ */ __name(() => {
830
+ }, "setSelectedIndex"),
831
+ executeIndex: /* @__PURE__ */ __name(() => {
832
+ }, "executeIndex")
833
+ });
834
+ var ContextMenuProvider = /* @__PURE__ */ __name(({ children, onMenuChange }) => {
835
+ const [menu, setMenu] = (0, import_react5.useState)(null);
836
+ const [selectedIndex, setSelectedIndexState] = (0, import_react5.useState)(0);
837
+ const menuRef = (0, import_react5.useRef)(null);
838
+ menuRef.current = menu;
839
+ const openMenu = (0, import_react5.useCallback)(
840
+ (items, position) => {
841
+ if (items.length === 0) return;
842
+ setMenu({ items, position });
843
+ setSelectedIndexState(0);
844
+ },
845
+ []
846
+ );
847
+ const closeMenu = (0, import_react5.useCallback)(() => {
848
+ menuRef.current = null;
849
+ setMenu(null);
850
+ }, []);
851
+ (0, import_react5.useEffect)(() => {
852
+ onMenuChange?.(menu !== null);
853
+ }, [menu, onMenuChange]);
854
+ const setSelectedIndex = (0, import_react5.useCallback)((index) => {
855
+ setSelectedIndexState(index);
856
+ }, []);
857
+ const executeIndex = (0, import_react5.useCallback)((index) => {
858
+ const current = menuRef.current;
859
+ menuRef.current = null;
860
+ setMenu(null);
861
+ current?.items[index]?.onSelect();
862
+ }, []);
863
+ const value = (0, import_react5.useMemo)(
864
+ () => ({
865
+ menu,
866
+ selectedIndex,
867
+ openMenu,
868
+ closeMenu,
869
+ setSelectedIndex,
870
+ executeIndex
871
+ }),
872
+ [menu, selectedIndex, openMenu, closeMenu, setSelectedIndex, executeIndex]
873
+ );
874
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ContextMenuContext.Provider, { value, children });
875
+ }, "ContextMenuProvider");
876
+ function useContextMenu() {
877
+ return (0, import_react5.useContext)(ContextMenuContext);
878
+ }
879
+ __name(useContextMenu, "useContextMenu");
880
+ function contextMenuSize(items) {
881
+ const longest = items.reduce(
882
+ (max, item) => Math.max(max, item.label.length),
883
+ 0
884
+ );
885
+ return { width: longest + 4, height: items.length + 2 };
886
+ }
887
+ __name(contextMenuSize, "contextMenuSize");
888
+ function clampMenuPosition(desired, size, terminalColumns, terminalRows) {
889
+ return {
890
+ x: Math.max(0, Math.min(desired.x, terminalColumns - size.width)),
891
+ y: Math.max(0, Math.min(desired.y, terminalRows - size.height))
892
+ };
893
+ }
894
+ __name(clampMenuPosition, "clampMenuPosition");
895
+
896
+ // packages/cli/src/ui/hooks/use-mouse-tracking-enabled.ts
897
+ init_esbuild_shims();
898
+ var import_react6 = __toESM(require_react(), 1);
899
+ function useMouseTrackingEnabled() {
900
+ return (0, import_react6.useContext)(SettingsContext)?.merged.ui?.mouseTracking !== false;
901
+ }
902
+ __name(useMouseTrackingEnabled, "useMouseTrackingEnabled");
903
+
904
+ // packages/cli/src/ui/components/shared/RadioButtonSelect.tsx
905
+ init_esbuild_shims();
906
+
907
+ // packages/cli/src/ui/components/shared/BaseSelectionList.tsx
908
+ init_esbuild_shims();
909
+ var import_react10 = __toESM(require_react(), 1);
910
+
911
+ // packages/cli/src/ui/hooks/useSelectionList.ts
912
+ init_esbuild_shims();
913
+ var import_react7 = __toESM(require_react(), 1);
914
+ var debugLogger = createDebugLogger("SELECTION_LIST");
915
+ var NUMBER_INPUT_TIMEOUT_MS = 1e3;
916
+ var findNextValidIndex = /* @__PURE__ */ __name((currentIndex, direction, items) => {
917
+ const len = items.length;
918
+ if (len === 0) return currentIndex;
919
+ let nextIndex = currentIndex;
920
+ const step = direction === "down" ? 1 : -1;
921
+ for (let i = 0; i < len; i++) {
922
+ nextIndex = (nextIndex + step + len) % len;
923
+ if (!items[nextIndex]?.disabled) {
924
+ return nextIndex;
925
+ }
926
+ }
927
+ return currentIndex;
928
+ }, "findNextValidIndex");
929
+ var computeInitialIndex = /* @__PURE__ */ __name((initialIndex, items, initialKey) => {
930
+ if (items.length === 0) {
931
+ return 0;
932
+ }
933
+ if (initialKey !== void 0) {
934
+ for (let i = 0; i < items.length; i++) {
935
+ if (items[i].key === initialKey && !items[i].disabled) {
936
+ return i;
937
+ }
938
+ }
939
+ }
940
+ let targetIndex = initialIndex;
941
+ if (targetIndex < 0 || targetIndex >= items.length) {
942
+ targetIndex = 0;
943
+ }
944
+ if (items[targetIndex]?.disabled) {
945
+ const nextValid = findNextValidIndex(targetIndex, "down", items);
946
+ targetIndex = nextValid;
947
+ }
948
+ return targetIndex;
949
+ }, "computeInitialIndex");
950
+ var areItemsStructurallyEqual = /* @__PURE__ */ __name((a, b) => {
951
+ if (a === b) {
952
+ return true;
953
+ }
954
+ if (a.length !== b.length) {
955
+ return false;
956
+ }
957
+ for (let i = 0; i < a.length; i++) {
958
+ if (a[i]?.key !== b[i]?.key || a[i]?.disabled !== b[i]?.disabled) {
959
+ return false;
960
+ }
961
+ }
962
+ return true;
963
+ }, "areItemsStructurallyEqual");
964
+ function selectionListReducer(state, action) {
965
+ switch (action.type) {
966
+ case "SET_ACTIVE_INDEX": {
967
+ const { index, items } = action.payload;
968
+ if (index === state.activeIndex) {
969
+ return state;
970
+ }
971
+ if (index >= 0 && index < items.length) {
972
+ return { ...state, activeIndex: index, pendingHighlight: true };
973
+ }
974
+ return state;
975
+ }
976
+ case "MOVE_UP": {
977
+ const { items } = action.payload;
978
+ const newIndex = findNextValidIndex(state.activeIndex, "up", items);
979
+ if (newIndex !== state.activeIndex) {
980
+ return { ...state, activeIndex: newIndex, pendingHighlight: true };
981
+ }
982
+ return state;
983
+ }
984
+ case "MOVE_DOWN": {
985
+ const { items } = action.payload;
986
+ const newIndex = findNextValidIndex(state.activeIndex, "down", items);
987
+ if (newIndex !== state.activeIndex) {
988
+ return { ...state, activeIndex: newIndex, pendingHighlight: true };
989
+ }
990
+ return state;
991
+ }
992
+ case "SELECT_CURRENT": {
993
+ return { ...state, pendingSelect: true };
994
+ }
995
+ case "INITIALIZE": {
996
+ const { initialIndex, items } = action.payload;
997
+ const initialIndexChanged = initialIndex !== state.initialIndex;
998
+ const activeKey = !initialIndexChanged && state.activeIndex !== state.initialIndex ? state.items[state.activeIndex]?.key : void 0;
999
+ const targetIndex = computeInitialIndex(initialIndex, items, activeKey);
1000
+ const itemsStructurallyEqual = areItemsStructurallyEqual(
1001
+ items,
1002
+ state.items
1003
+ );
1004
+ if (!initialIndexChanged && targetIndex === state.activeIndex && itemsStructurallyEqual) {
1005
+ return state;
1006
+ }
1007
+ return {
1008
+ ...state,
1009
+ items: itemsStructurallyEqual ? state.items : items,
1010
+ activeIndex: targetIndex,
1011
+ initialIndex,
1012
+ pendingHighlight: false
1013
+ };
1014
+ }
1015
+ case "CLEAR_PENDING_FLAGS": {
1016
+ return {
1017
+ ...state,
1018
+ pendingHighlight: false,
1019
+ pendingSelect: false
1020
+ };
1021
+ }
1022
+ default: {
1023
+ const exhaustiveCheck = action;
1024
+ debugLogger.error(`Unknown selection list action: ${exhaustiveCheck}`);
1025
+ return state;
1026
+ }
1027
+ }
1028
+ }
1029
+ __name(selectionListReducer, "selectionListReducer");
1030
+ function useSelectionList({
1031
+ items,
1032
+ initialIndex = 0,
1033
+ onSelect,
1034
+ onHighlight,
1035
+ isFocused = true,
1036
+ showNumbers = false,
1037
+ disableVimNav = false
1038
+ }) {
1039
+ const [state, dispatch] = (0, import_react7.useReducer)(selectionListReducer, {
1040
+ activeIndex: computeInitialIndex(initialIndex, items),
1041
+ initialIndex,
1042
+ pendingHighlight: false,
1043
+ pendingSelect: false,
1044
+ items
1045
+ });
1046
+ const numberInputRef = (0, import_react7.useRef)("");
1047
+ const numberInputTimer = (0, import_react7.useRef)(null);
1048
+ (0, import_react7.useEffect)(() => {
1049
+ dispatch({ type: "INITIALIZE", payload: { initialIndex, items } });
1050
+ }, [initialIndex, items]);
1051
+ (0, import_react7.useEffect)(() => {
1052
+ let needsClear = false;
1053
+ if (state.pendingHighlight && items[state.activeIndex]) {
1054
+ onHighlight?.(items[state.activeIndex].value);
1055
+ needsClear = true;
1056
+ }
1057
+ if (state.pendingSelect && items[state.activeIndex]) {
1058
+ const currentItem = items[state.activeIndex];
1059
+ if (currentItem && !currentItem.disabled) {
1060
+ onSelect(currentItem.value);
1061
+ }
1062
+ needsClear = true;
1063
+ }
1064
+ if (needsClear) {
1065
+ dispatch({ type: "CLEAR_PENDING_FLAGS" });
1066
+ }
1067
+ }, [
1068
+ state.pendingHighlight,
1069
+ state.pendingSelect,
1070
+ state.activeIndex,
1071
+ items,
1072
+ onHighlight,
1073
+ onSelect
1074
+ ]);
1075
+ (0, import_react7.useEffect)(
1076
+ () => () => {
1077
+ if (numberInputTimer.current) {
1078
+ clearTimeout(numberInputTimer.current);
1079
+ }
1080
+ },
1081
+ []
1082
+ );
1083
+ useKeypress(
1084
+ (key) => {
1085
+ const { sequence, name } = key;
1086
+ const isNumeric = showNumbers && /^[0-9]$/.test(sequence);
1087
+ if (!isNumeric && numberInputTimer.current) {
1088
+ clearTimeout(numberInputTimer.current);
1089
+ numberInputRef.current = "";
1090
+ }
1091
+ if (keyMatchers["selectionUp" /* SELECTION_UP */](key)) {
1092
+ if (disableVimNav && key.name === "k" && !key.ctrl) {
1093
+ } else {
1094
+ dispatch({ type: "MOVE_UP", payload: { items } });
1095
+ return;
1096
+ }
1097
+ }
1098
+ if (keyMatchers["selectionDown" /* SELECTION_DOWN */](key)) {
1099
+ if (disableVimNav && key.name === "j" && !key.ctrl) {
1100
+ } else {
1101
+ dispatch({ type: "MOVE_DOWN", payload: { items } });
1102
+ return;
1103
+ }
1104
+ }
1105
+ if (name === "return") {
1106
+ dispatch({ type: "SELECT_CURRENT", payload: { items } });
1107
+ return;
1108
+ }
1109
+ if (isNumeric) {
1110
+ if (numberInputTimer.current) {
1111
+ clearTimeout(numberInputTimer.current);
1112
+ }
1113
+ const newNumberInput = numberInputRef.current + sequence;
1114
+ numberInputRef.current = newNumberInput;
1115
+ const targetIndex = Number.parseInt(newNumberInput, 10) - 1;
1116
+ if (newNumberInput === "0") {
1117
+ numberInputTimer.current = setTimeout(() => {
1118
+ numberInputRef.current = "";
1119
+ }, NUMBER_INPUT_TIMEOUT_MS);
1120
+ return;
1121
+ }
1122
+ if (targetIndex >= 0 && targetIndex < items.length) {
1123
+ dispatch({
1124
+ type: "SET_ACTIVE_INDEX",
1125
+ payload: { index: targetIndex, items }
1126
+ });
1127
+ const potentialNextNumber = Number.parseInt(newNumberInput + "0", 10);
1128
+ if (potentialNextNumber > items.length) {
1129
+ dispatch({
1130
+ type: "SELECT_CURRENT",
1131
+ payload: { items }
1132
+ });
1133
+ numberInputRef.current = "";
1134
+ } else {
1135
+ numberInputTimer.current = setTimeout(() => {
1136
+ dispatch({
1137
+ type: "SELECT_CURRENT",
1138
+ payload: { items }
1139
+ });
1140
+ numberInputRef.current = "";
1141
+ }, NUMBER_INPUT_TIMEOUT_MS);
1142
+ }
1143
+ } else {
1144
+ numberInputRef.current = "";
1145
+ }
1146
+ }
1147
+ },
1148
+ { isActive: !!(isFocused && items.length > 0) }
1149
+ );
1150
+ const setActiveIndex = /* @__PURE__ */ __name((index) => {
1151
+ dispatch({
1152
+ type: "SET_ACTIVE_INDEX",
1153
+ payload: { index, items }
1154
+ });
1155
+ }, "setActiveIndex");
1156
+ const selectIndex = /* @__PURE__ */ __name((index) => {
1157
+ if (items[index]?.disabled) return;
1158
+ dispatch({ type: "SET_ACTIVE_INDEX", payload: { index, items } });
1159
+ dispatch({ type: "SELECT_CURRENT", payload: { items } });
1160
+ }, "selectIndex");
1161
+ return {
1162
+ activeIndex: state.activeIndex,
1163
+ setActiveIndex,
1164
+ selectIndex
1165
+ };
1166
+ }
1167
+ __name(useSelectionList, "useSelectionList");
1168
+
1169
+ // packages/cli/src/ui/components/shared/RowMouseController.tsx
1170
+ init_esbuild_shims();
1171
+ var import_react9 = __toESM(require_react(), 1);
1172
+
1173
+ // packages/cli/src/ui/hooks/useMouseEvents.ts
1174
+ init_esbuild_shims();
1175
+ var import_react8 = __toESM(require_react(), 1);
1176
+ var mouseModeRefs = /* @__PURE__ */ new Map();
1177
+ function effectiveTracking(entry) {
1178
+ if (entry.any > 0) return "any";
1179
+ if (entry.button > 0) return "button";
1180
+ return null;
1181
+ }
1182
+ __name(effectiveTracking, "effectiveTracking");
1183
+ function reconcileMouseMode(stdout, entry) {
1184
+ const desired = effectiveTracking(entry);
1185
+ if (desired === entry.active) return;
1186
+ if (entry.active) disableMouseEvents(stdout, entry.active);
1187
+ if (desired) enableMouseEvents(stdout, desired);
1188
+ entry.active = desired;
1189
+ }
1190
+ __name(reconcileMouseMode, "reconcileMouseMode");
1191
+ var disableAllMouseModes = /* @__PURE__ */ __name(() => {
1192
+ for (const [stdout, entry] of mouseModeRefs) {
1193
+ if (entry.active) disableMouseEvents(stdout, entry.active);
1194
+ }
1195
+ mouseModeRefs.clear();
1196
+ }, "disableAllMouseModes");
1197
+ function acquireMouseMode(stdout, tracking) {
1198
+ let entry = mouseModeRefs.get(stdout);
1199
+ if (!entry) {
1200
+ if (mouseModeRefs.size === 0) {
1201
+ process.on("exit", disableAllMouseModes);
1202
+ }
1203
+ entry = { button: 0, any: 0, active: null };
1204
+ mouseModeRefs.set(stdout, entry);
1205
+ }
1206
+ entry[tracking] += 1;
1207
+ reconcileMouseMode(stdout, entry);
1208
+ }
1209
+ __name(acquireMouseMode, "acquireMouseMode");
1210
+ function releaseMouseMode(stdout, tracking) {
1211
+ const entry = mouseModeRefs.get(stdout);
1212
+ if (!entry) return;
1213
+ entry[tracking] = Math.max(0, entry[tracking] - 1);
1214
+ reconcileMouseMode(stdout, entry);
1215
+ if (entry.button === 0 && entry.any === 0) {
1216
+ mouseModeRefs.delete(stdout);
1217
+ if (mouseModeRefs.size === 0) {
1218
+ process.removeListener("exit", disableAllMouseModes);
1219
+ }
1220
+ }
1221
+ }
1222
+ __name(releaseMouseMode, "releaseMouseMode");
1223
+ function useMouseEvents(handler, { isActive, tracking = "button", bypassVpGate = false }) {
1224
+ const { isRawModeSupported } = use_stdin_default();
1225
+ const { stdout } = use_stdout_default();
1226
+ const { subscribeMouse, unsubscribeMouse } = useKeypressContext();
1227
+ const settings = (0, import_react8.useContext)(SettingsContext);
1228
+ const isVpMode = useVirtualViewport(settings?.merged.ui?.useTerminalBuffer);
1229
+ const vpGateOpen = isVpMode || bypassVpGate;
1230
+ const handlerRef = (0, import_react8.useRef)(handler);
1231
+ handlerRef.current = handler;
1232
+ const mouseTrackingEnabled = useMouseTrackingEnabled();
1233
+ const enabled = isActive && isRawModeSupported && vpGateOpen && mouseTrackingEnabled && Boolean(stdout.isTTY);
1234
+ const enabledRef = (0, import_react8.useRef)(enabled);
1235
+ enabledRef.current = enabled;
1236
+ (0, import_react8.useEffect)(() => {
1237
+ if (!enabled) return;
1238
+ acquireMouseMode(stdout, tracking);
1239
+ return () => {
1240
+ releaseMouseMode(stdout, tracking);
1241
+ };
1242
+ }, [enabled, stdout, tracking]);
1243
+ const mouseCallback = (0, import_react8.useCallback)((event) => {
1244
+ if (!enabledRef.current) return;
1245
+ handlerRef.current(event);
1246
+ }, []);
1247
+ (0, import_react8.useEffect)(() => {
1248
+ if (!enabled) return;
1249
+ subscribeMouse(mouseCallback);
1250
+ return () => unsubscribeMouse(mouseCallback);
1251
+ }, [enabled, subscribeMouse, unsubscribeMouse, mouseCallback]);
1252
+ }
1253
+ __name(useMouseEvents, "useMouseEvents");
1254
+
1255
+ // packages/cli/src/ui/utils/mouse-hit.ts
1256
+ init_esbuild_shims();
1257
+
1258
+ // packages/cli/src/ui/utils/measure-element-position.ts
1259
+ init_esbuild_shims();
1260
+
1261
+ // packages/cli/src/ui/utils/list-mouse.ts
1262
+ init_esbuild_shims();
1263
+ function frameAnchor(terminalHeight, frameHeight) {
1264
+ return Math.min(0, terminalHeight - frameHeight);
1265
+ }
1266
+ __name(frameAnchor, "frameAnchor");
1267
+ function terminalRowToLayoutRow(terminalRow1Based, anchor) {
1268
+ return terminalRow1Based - 1 - anchor;
1269
+ }
1270
+ __name(terminalRowToLayoutRow, "terminalRowToLayoutRow");
1271
+ function findItemAtLayoutRow(rects, layoutRow) {
1272
+ for (const rect of rects) {
1273
+ if (layoutRow >= rect.top && layoutRow < rect.top + rect.height) {
1274
+ return rect.index;
1275
+ }
1276
+ }
1277
+ return null;
1278
+ }
1279
+ __name(findItemAtLayoutRow, "findItemAtLayoutRow");
1280
+
1281
+ // packages/cli/src/ui/utils/measure-element-position.ts
1282
+ function measureElementPosition(node) {
1283
+ const { yogaNode } = node;
1284
+ if (!yogaNode) {
1285
+ return { x: 0, y: 0, width: 0, height: 0 };
1286
+ }
1287
+ let x = yogaNode.getComputedLeft();
1288
+ let y = yogaNode.getComputedTop();
1289
+ let current = node.parentNode;
1290
+ while (current) {
1291
+ if (current.yogaNode) {
1292
+ x += current.yogaNode.getComputedLeft();
1293
+ y += current.yogaNode.getComputedTop();
1294
+ }
1295
+ current = current.parentNode;
1296
+ }
1297
+ return {
1298
+ x,
1299
+ y,
1300
+ width: yogaNode.getComputedWidth(),
1301
+ height: yogaNode.getComputedHeight()
1302
+ };
1303
+ }
1304
+ __name(measureElementPosition, "measureElementPosition");
1305
+ function measureFrameHeight(node) {
1306
+ let root = node;
1307
+ let current = node;
1308
+ while (current) {
1309
+ root = current;
1310
+ current = current.parentNode;
1311
+ }
1312
+ return root.yogaNode?.getComputedHeight() ?? 0;
1313
+ }
1314
+ __name(measureFrameHeight, "measureFrameHeight");
1315
+ function layoutRowForEvent(node, terminalRow1Based, terminalHeight) {
1316
+ const anchor = frameAnchor(terminalHeight, measureFrameHeight(node));
1317
+ return terminalRowToLayoutRow(terminalRow1Based, anchor);
1318
+ }
1319
+ __name(layoutRowForEvent, "layoutRowForEvent");
1320
+
1321
+ // packages/cli/src/ui/utils/mouse-hit.ts
1322
+ function containsPoint(rect, point) {
1323
+ const containsRow = point.y >= rect.y && point.y < rect.y + rect.height;
1324
+ return containsRow && point.x >= rect.x && point.x < rect.x + rect.width;
1325
+ }
1326
+ __name(containsPoint, "containsPoint");
1327
+ function findElementAtMouseEvent(container, elements, event, terminalHeight, mode, indexOffset = 0) {
1328
+ if (!container) return null;
1329
+ const point = {
1330
+ x: event.col - 1,
1331
+ y: layoutRowForEvent(container, event.row, terminalHeight)
1332
+ };
1333
+ const containerRect = measureElementPosition(container);
1334
+ if (containerRect.width > 0 && (point.x < containerRect.x || point.x >= containerRect.x + containerRect.width)) {
1335
+ return null;
1336
+ }
1337
+ if (mode === "row") {
1338
+ const rects = [];
1339
+ for (let index = 0; index < elements.length; index++) {
1340
+ const element = elements[index];
1341
+ if (!element) continue;
1342
+ const rect = measureElementPosition(element);
1343
+ if (rect.height <= 0) continue;
1344
+ rects.push({
1345
+ index: indexOffset + index,
1346
+ top: rect.y,
1347
+ height: rect.height
1348
+ });
1349
+ }
1350
+ return findItemAtLayoutRow(rects, point.y);
1351
+ }
1352
+ for (let index = 0; index < elements.length; index++) {
1353
+ const element = elements[index];
1354
+ if (!element) continue;
1355
+ const rect = measureElementPosition(element);
1356
+ if (rect.height <= 0 || rect.width <= 0) continue;
1357
+ if (containsPoint(rect, point)) return index;
1358
+ }
1359
+ return null;
1360
+ }
1361
+ __name(findElementAtMouseEvent, "findElementAtMouseEvent");
1362
+
1363
+ // packages/cli/src/ui/components/shared/RowMouseController.tsx
1364
+ function RowMouseController({
1365
+ containerRef,
1366
+ itemRefs,
1367
+ scrollOffset,
1368
+ isDisabled,
1369
+ onHoverIndex,
1370
+ onSelectIndex
1371
+ }) {
1372
+ const { rows: terminalHeight } = useTerminalSize();
1373
+ const { menu: contextMenu } = useContextMenu();
1374
+ const resolveIndex = (0, import_react9.useCallback)(
1375
+ (event) => findElementAtMouseEvent(
1376
+ containerRef.current,
1377
+ itemRefs.current,
1378
+ event,
1379
+ terminalHeight,
1380
+ "row",
1381
+ scrollOffset
1382
+ ),
1383
+ [containerRef, itemRefs, scrollOffset, terminalHeight]
1384
+ );
1385
+ const handleMouse = (0, import_react9.useCallback)(
1386
+ (event) => {
1387
+ if (event.name !== "move" && event.name !== "left-press") return;
1388
+ const index = resolveIndex(event);
1389
+ if (index === null || isDisabled?.(index)) return;
1390
+ if (event.name === "move") {
1391
+ onHoverIndex(index);
1392
+ } else {
1393
+ onSelectIndex(index);
1394
+ }
1395
+ },
1396
+ [resolveIndex, isDisabled, onHoverIndex, onSelectIndex]
1397
+ );
1398
+ useMouseEvents(handleMouse, {
1399
+ isActive: contextMenu === null,
1400
+ tracking: "any"
1401
+ });
1402
+ return null;
1403
+ }
1404
+ __name(RowMouseController, "RowMouseController");
1405
+
1406
+ // packages/cli/src/ui/components/shared/BaseSelectionList.tsx
1407
+ var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1);
1408
+ function getScrollOffsetForIndex(activeIndex, itemCount, maxItemsToShow) {
1409
+ return Math.max(
1410
+ 0,
1411
+ Math.min(activeIndex - maxItemsToShow + 1, itemCount - maxItemsToShow)
1412
+ );
1413
+ }
1414
+ __name(getScrollOffsetForIndex, "getScrollOffsetForIndex");
1415
+ function BaseSelectionList({
1416
+ items,
1417
+ initialIndex = 0,
1418
+ onSelect,
1419
+ onHighlight,
1420
+ isFocused = true,
1421
+ showNumbers = true,
1422
+ showScrollArrows = false,
1423
+ maxItemsToShow = 10,
1424
+ itemGap = 0,
1425
+ renderItem
1426
+ }) {
1427
+ const { activeIndex, setActiveIndex, selectIndex } = useSelectionList({
1428
+ items,
1429
+ initialIndex,
1430
+ onSelect,
1431
+ onHighlight,
1432
+ isFocused,
1433
+ showNumbers
1434
+ });
1435
+ const [scrollOffset, setScrollOffset] = (0, import_react10.useState)(
1436
+ () => getScrollOffsetForIndex(activeIndex, items.length, maxItemsToShow)
1437
+ );
1438
+ (0, import_react10.useEffect)(() => {
1439
+ const newScrollOffset = getScrollOffsetForIndex(
1440
+ activeIndex,
1441
+ items.length,
1442
+ maxItemsToShow
1443
+ );
1444
+ if (activeIndex < scrollOffset) {
1445
+ setScrollOffset(activeIndex);
1446
+ } else if (activeIndex >= scrollOffset + maxItemsToShow) {
1447
+ setScrollOffset(newScrollOffset);
1448
+ }
1449
+ }, [activeIndex, items.length, scrollOffset, maxItemsToShow]);
1450
+ const settings = (0, import_react10.useContext)(SettingsContext);
1451
+ const mouseTrackingEnabled = useMouseTrackingEnabled();
1452
+ const mouseEnabled = useVirtualViewport(settings?.merged.ui?.useTerminalBuffer) && mouseTrackingEnabled;
1453
+ const containerRef = (0, import_react10.useRef)(null);
1454
+ const itemRefs = (0, import_react10.useRef)([]);
1455
+ const visibleItems = items.slice(scrollOffset, scrollOffset + maxItemsToShow);
1456
+ const numberColumnWidth = String(items.length).length;
1457
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Box_default, { ref: containerRef, flexDirection: "column", gap: itemGap, children: [
1458
+ mouseEnabled && isFocused && items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1459
+ RowMouseController,
1460
+ {
1461
+ containerRef,
1462
+ itemRefs,
1463
+ scrollOffset,
1464
+ isDisabled: (index) => !!items[index]?.disabled,
1465
+ onHoverIndex: setActiveIndex,
1466
+ onSelectIndex: selectIndex
1467
+ }
1468
+ ),
1469
+ showScrollArrows && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1470
+ Text,
1471
+ {
1472
+ color: scrollOffset > 0 ? theme.text.primary : theme.text.secondary,
1473
+ children: "\u25B2"
1474
+ }
1475
+ ),
1476
+ visibleItems.map((item, index) => {
1477
+ const itemIndex = scrollOffset + index;
1478
+ const isSelected = activeIndex === itemIndex;
1479
+ let titleColor = theme.text.primary;
1480
+ let numberColor = theme.text.primary;
1481
+ if (isSelected) {
1482
+ titleColor = theme.status.success;
1483
+ numberColor = theme.status.success;
1484
+ } else if (item.disabled) {
1485
+ titleColor = theme.text.secondary;
1486
+ numberColor = theme.text.secondary;
1487
+ }
1488
+ if (!isFocused && !item.disabled) {
1489
+ numberColor = theme.text.secondary;
1490
+ }
1491
+ if (!showNumbers) {
1492
+ numberColor = theme.text.secondary;
1493
+ }
1494
+ const itemNumberText = `${String(itemIndex + 1).padStart(
1495
+ numberColumnWidth
1496
+ )}.`;
1497
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1498
+ Box_default,
1499
+ {
1500
+ alignItems: "flex-start",
1501
+ ref: (node) => {
1502
+ itemRefs.current[index] = node;
1503
+ },
1504
+ children: [
1505
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Box_default, { minWidth: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1506
+ Text,
1507
+ {
1508
+ color: isSelected ? theme.status.success : theme.text.primary,
1509
+ "aria-hidden": true,
1510
+ children: isSelected ? "\u203A" : " "
1511
+ }
1512
+ ) }),
1513
+ showNumbers && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1514
+ Box_default,
1515
+ {
1516
+ marginRight: 1,
1517
+ flexShrink: 0,
1518
+ minWidth: itemNumberText.length,
1519
+ "aria-state": { checked: isSelected },
1520
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Text, { color: numberColor, children: itemNumberText })
1521
+ }
1522
+ ),
1523
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Box_default, { flexGrow: 1, children: renderItem(item, {
1524
+ isSelected,
1525
+ titleColor,
1526
+ numberColor
1527
+ }) })
1528
+ ]
1529
+ },
1530
+ item.key
1531
+ );
1532
+ }),
1533
+ showScrollArrows && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1534
+ Text,
1535
+ {
1536
+ color: scrollOffset + maxItemsToShow < items.length ? theme.text.primary : theme.text.secondary,
1537
+ children: "\u25BC"
1538
+ }
1539
+ )
1540
+ ] });
1541
+ }
1542
+ __name(BaseSelectionList, "BaseSelectionList");
1543
+
1544
+ // packages/cli/src/ui/components/shared/RadioButtonSelect.tsx
1545
+ var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1);
1546
+ function RadioButtonSelect({
1547
+ items,
1548
+ initialIndex = 0,
1549
+ onSelect,
1550
+ onHighlight,
1551
+ isFocused = true,
1552
+ showScrollArrows = false,
1553
+ maxItemsToShow = 10,
1554
+ showNumbers = true
1555
+ }) {
1556
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1557
+ BaseSelectionList,
1558
+ {
1559
+ items,
1560
+ initialIndex,
1561
+ onSelect,
1562
+ onHighlight,
1563
+ isFocused,
1564
+ showNumbers,
1565
+ showScrollArrows,
1566
+ maxItemsToShow,
1567
+ renderItem: (item, { titleColor }) => {
1568
+ if (item.themeNameDisplay && item.themeTypeDisplay) {
1569
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(Text, { color: titleColor, wrap: "truncate", children: [
1570
+ item.themeNameDisplay,
1571
+ " ",
1572
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Text, { color: theme.text.secondary, children: item.themeTypeDisplay })
1573
+ ] }, item.key);
1574
+ }
1575
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Text, { color: titleColor, wrap: "truncate", children: item.label });
1576
+ }
1577
+ }
1578
+ );
1579
+ }
1580
+ __name(RadioButtonSelect, "RadioButtonSelect");
1581
+
736
1582
  // packages/cli/src/ui/utils/tool-display-map.ts
737
1583
  init_esbuild_shims();
738
1584
  var TOOL_DISPLAY_BY_NAME = Object.fromEntries(
@@ -742,6 +1588,65 @@ var TOOL_DISPLAY_BY_NAME = Object.fromEntries(
742
1588
  ])
743
1589
  );
744
1590
 
1591
+ // packages/cli/src/ui/components/mcp/MCPServerApprovalDialog.tsx
1592
+ init_esbuild_shims();
1593
+ var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1);
1594
+ var MCPServerApprovalDialog = /* @__PURE__ */ __name(({ serverName, summary, source, pendingServers, remaining, onSelect }) => {
1595
+ useKeypress(
1596
+ (key) => {
1597
+ if (key.name === "escape") {
1598
+ onSelect("reject" /* REJECT */);
1599
+ }
1600
+ },
1601
+ { isActive: true }
1602
+ );
1603
+ const options = [
1604
+ {
1605
+ label: "Approve this server",
1606
+ value: "approve" /* APPROVE */,
1607
+ key: "approve"
1608
+ },
1609
+ {
1610
+ label: "Approve all pending servers in this workspace",
1611
+ value: "approve_all" /* APPROVE_ALL */,
1612
+ key: "approve_all"
1613
+ },
1614
+ {
1615
+ label: "Reject (esc)",
1616
+ value: "reject" /* REJECT */,
1617
+ key: "reject"
1618
+ }
1619
+ ];
1620
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Box_default, { flexDirection: "column", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1621
+ Box_default,
1622
+ {
1623
+ flexDirection: "column",
1624
+ borderStyle: "round",
1625
+ borderColor: theme.status.warning,
1626
+ padding: 1,
1627
+ width: "100%",
1628
+ marginLeft: 1,
1629
+ children: [
1630
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Box_default, { flexDirection: "column", marginBottom: 1, children: [
1631
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Text, { bold: true, color: theme.text.primary, children: `Untrusted MCP server in ${source}` }),
1632
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Text, { color: theme.text.primary, children: `This workspace declares an MCP server. Approving lets Qwen Code start it and run its tools. Approval is bound to this exact configuration \u2014 if ${source} changes, you will be asked again.` })
1633
+ ] }),
1634
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Box_default, { flexDirection: "column", marginBottom: 1, children: [
1635
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Text, { color: theme.text.primary, children: [
1636
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Text, { bold: true, children: serverName }),
1637
+ ` ${summary}`
1638
+ ] }),
1639
+ remaining > 0 && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Box_default, { flexDirection: "column", marginTop: 1, children: [
1640
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Text, { color: theme.text.secondary, children: "Approve all will trust these servers:" }),
1641
+ pendingServers.map((server) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Text, { color: theme.text.secondary, children: ` ${server.name} ${server.summary}` }, server.name))
1642
+ ] })
1643
+ ] }),
1644
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(RadioButtonSelect, { items: options, onSelect, isFocused: true })
1645
+ ]
1646
+ }
1647
+ ) });
1648
+ }, "MCPServerApprovalDialog");
1649
+
745
1650
  // packages/cli/src/ui/statusLinePresets.ts
746
1651
  init_esbuild_shims();
747
1652
  import nodePath from "node:path";
@@ -1131,6 +2036,9 @@ function sortSources(sources) {
1131
2036
  __name(sortSources, "sortSources");
1132
2037
 
1133
2038
  export {
2039
+ SettingsContext,
2040
+ useSettings,
2041
+ useTerminalSize,
1134
2042
  osc8Open,
1135
2043
  osc8Close,
1136
2044
  isSafeOscScheme,
@@ -1148,10 +2056,27 @@ export {
1148
2056
  getStatusColor,
1149
2057
  formatDuration,
1150
2058
  keyMatchers,
2059
+ useSelectionList,
2060
+ VirtualViewportContext,
2061
+ useVirtualViewport,
2062
+ useMouseTrackingEnabled,
2063
+ useMouseEvents,
2064
+ ContextMenuProvider,
2065
+ useContextMenu,
2066
+ contextMenuSize,
2067
+ clampMenuPosition,
2068
+ frameAnchor,
2069
+ measureElementPosition,
2070
+ layoutRowForEvent,
2071
+ findElementAtMouseEvent,
2072
+ RowMouseController,
2073
+ BaseSelectionList,
2074
+ RadioButtonSelect,
1151
2075
  TOOL_DISPLAY_BY_NAME,
1152
2076
  SessionStatsProvider,
1153
2077
  useSessionStats,
1154
2078
  flattenModelsBySource,
2079
+ MCPServerApprovalDialog,
1155
2080
  aggregateModelTokens,
1156
2081
  STATUS_LINE_PRESET_ITEMS,
1157
2082
  orderStatusLinePresetItems,
@@ -1171,6 +2096,35 @@ export {
1171
2096
  * Copyright 2025 Qwen
1172
2097
  * SPDX-License-Identifier: Apache-2.0
1173
2098
  */
2099
+ /**
2100
+ * @license
2101
+ * Copyright 2025 Qwen
2102
+ * SPDX-License-Identifier: Apache-2.0
2103
+ *
2104
+ * Inspired by gemini-cli's MouseContext (Google LLC, Apache-2.0): enable SGR
2105
+ * mouse mode while at least one subscriber is active, parse mouse sequences
2106
+ * out of the KeypressContext pipeline, call each handler, restore on cleanup.
2107
+ */
2108
+ /**
2109
+ * @license
2110
+ * Copyright 2025 Qwen
2111
+ * SPDX-License-Identifier: Apache-2.0
2112
+ *
2113
+ * Pure geometry helper for mapping a terminal mouse row onto a vertical list of
2114
+ * items. The DOM measurement (reading yoga layout via measureElementPosition)
2115
+ * lives in the component that owns the refs; this is pure arithmetic so it can
2116
+ * be unit-tested without a renderer.
2117
+ */
2118
+ /**
2119
+ * @license
2120
+ * Copyright 2025 Qwen Team
2121
+ * SPDX-License-Identifier: Apache-2.0
2122
+ *
2123
+ * Shim for ink PR #968 (vadimdemedes/ink#968): extends measureElement()
2124
+ * to return {x, y, width, height}. Once the upstream PR is merged and
2125
+ * ink is upgraded, replace usages with `measureElement` from 'ink'
2126
+ * and delete this file.
2127
+ */
1174
2128
  /**
1175
2129
  * @license
1176
2130
  * Copyright 2025 Qwen Team