@qwen-code/qwen-code 0.20.2-jobbench-no-todo-write.0 → 0.21.0

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 (370) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +5 -0
  2. package/bundled/qc-helper/docs/features/sub-agents.md +23 -5
  3. package/bundled/qc-helper/docs/integration-github-action.md +9 -9
  4. package/bundled/review/SKILL.md +7 -3
  5. package/chunks/MaxSizedBox-5DPPWPGT.js +85 -0
  6. package/chunks/{StandaloneSessionPicker-WBRBHD2M.js → StandaloneSessionPicker-BIRMPLRD.js} +66 -58
  7. package/chunks/{acp-startup-profiler-N3RHHXJ3.js → acp-startup-profiler-RV3IV562.js} +2 -2
  8. package/chunks/{acpAgent-BBQZ33CA.js → acpAgent-6J2U72PQ.js} +706 -182
  9. package/chunks/agent-6ODUANDO.js +81 -0
  10. package/chunks/agent-headless-7BYQTMHW.js +75 -0
  11. package/chunks/{anthropicContentGenerator-HGWAHO24.js → anthropicContentGenerator-75BKLTSP.js} +117 -43
  12. package/chunks/{artifact-tool-56T5IMBP.js → artifact-tool-Y5T7GG7F.js} +3 -3
  13. package/chunks/{askUserQuestion-E25OBIC2.js → askUserQuestion-2H6747FR.js} +3 -3
  14. package/chunks/bridge-ZUB64FAE.js +90 -0
  15. package/chunks/{build-SSCNEHZZ.js → build-RV63TIRH.js} +2 -3
  16. package/chunks/{ca-N6VVUFVB.js → ca-25EDXPFZ.js} +2 -0
  17. package/chunks/{channel-worker-group-LFBT7K64.js → channel-worker-group-2ZD7TVAT.js} +7 -6
  18. package/chunks/{channel-worker-manager-3RUPERG2.js → channel-worker-manager-4OA4BCGB.js} +189 -29
  19. package/chunks/{channel-worker-supervisor-A3KVATD3.js → channel-worker-supervisor-V7KCFJTS.js} +6 -5
  20. package/chunks/{chunk-TYQMGACW.js → chunk-22C7BQ6D.js} +508 -10967
  21. package/chunks/chunk-2JZBVYTU.js +452 -0
  22. package/chunks/{chunk-H2XVO6NE.js → chunk-2MIN6GRR.js} +1 -1
  23. package/chunks/{chunk-B2HSPMD4.js → chunk-2NH6DYI4.js} +12 -12
  24. package/chunks/chunk-2SCDWPXI.js +246 -0
  25. package/chunks/{chunk-JK26TQON.js → chunk-2X55UKQE.js} +3 -3
  26. package/chunks/{chunk-7VUQQBR7.js → chunk-3QMGYBFN.js} +2 -65
  27. package/chunks/{chunk-UMCULC5M.js → chunk-3RN6GBKS.js} +1 -1
  28. package/chunks/{chunk-QR6U5QPP.js → chunk-3SJ43L4W.js} +4 -0
  29. package/chunks/chunk-46UV252V.js +128 -0
  30. package/chunks/{chunk-GPMVHZP4.js → chunk-4WIZGAH3.js} +7 -7
  31. package/chunks/{chunk-CI3GWKGJ.js → chunk-55DJUCI2.js} +87 -29
  32. package/chunks/{chunk-QNLNLENL.js → chunk-5I2IWRSH.js} +2 -2
  33. package/chunks/{chunk-D7WXIW7H.js → chunk-5NBDS5S6.js} +145 -5
  34. package/chunks/{chunk-E4IMU4Y5.js → chunk-63P4EL5V.js} +1 -1
  35. package/chunks/chunk-6FGBXPWM.js +293 -0
  36. package/chunks/{chunk-NEEB7UEN.js → chunk-6GMVPFB2.js} +153 -72
  37. package/chunks/{chunk-KWK7UE6L.js → chunk-6OUGMXDC.js} +6 -6
  38. package/chunks/{chunk-QRUIS3DN.js → chunk-6PEXNQTX.js} +22 -1
  39. package/chunks/{chunk-77OZOGPT.js → chunk-7JURR4JT.js} +1 -1
  40. package/chunks/{chunk-4MWNZNJ4.js → chunk-7MVVZO4N.js} +4 -4
  41. package/chunks/{chunk-6ZBPS62S.js → chunk-7ZCNENPP.js} +1 -1
  42. package/chunks/{chunk-6X4GWOPW.js → chunk-A5L3JMUA.js} +1 -1
  43. package/chunks/{chunk-B3I77W5J.js → chunk-ACY3A37B.js} +3 -3
  44. package/chunks/chunk-AMDSOFFV.js +10860 -0
  45. package/chunks/{chunk-RV4C2ZFG.js → chunk-BIQWWWJN.js} +1 -1
  46. package/chunks/{chunk-ZHERRXZJ.js → chunk-BJX6ZSUK.js} +4 -4
  47. package/chunks/chunk-BK2UNYWD.js +29 -0
  48. package/chunks/{chunk-7TLUW4ZE.js → chunk-BKHWX6I2.js} +3 -3
  49. package/chunks/chunk-BPJSQIJX.js +100 -0
  50. package/chunks/{chunk-M7WBGLYP.js → chunk-BULDBTYC.js} +2 -0
  51. package/chunks/{chunk-H4A4A2SY.js → chunk-CIKQ7KKO.js} +4625 -8645
  52. package/chunks/{chunk-QZJY47IE.js → chunk-D3UEZIQH.js} +7 -5
  53. package/chunks/chunk-DHHOYAPR.js +1462 -0
  54. package/chunks/{chunk-LESHKUWF.js → chunk-DLWL3Z7A.js} +5 -3
  55. package/chunks/{chunk-XHATNRQA.js → chunk-DP3IHZGG.js} +0 -2
  56. package/chunks/chunk-E5TUC6CA.js +479 -0
  57. package/chunks/{chunk-6NRFYMKG.js → chunk-EBJQ6AXW.js} +11 -10
  58. package/chunks/{chunk-HABKX6LY.js → chunk-EPDRMGT4.js} +164 -17
  59. package/chunks/{chunk-P2BQZ7H7.js → chunk-ETSW4KLJ.js} +2 -2
  60. package/chunks/{chunk-KHOVYUHX.js → chunk-FNQ6T3CV.js} +20 -3
  61. package/chunks/{chunk-64EG42HV.js → chunk-FQK6JAFG.js} +72 -23
  62. package/chunks/{chunk-L6U47G5P.js → chunk-FSITMZJH.js} +8 -8
  63. package/chunks/{chunk-6RLROE6G.js → chunk-GLWP3FDB.js} +80 -15
  64. package/chunks/{chunk-CXIOPXRR.js → chunk-GSN55ZRI.js} +5 -5
  65. package/chunks/{chunk-LVA5OHQO.js → chunk-H4SBPHSA.js} +3 -3
  66. package/chunks/chunk-H5FFA6TH.js +902 -0
  67. package/chunks/{chunk-TDKQP3M6.js → chunk-HIJQF5B5.js} +1 -1
  68. package/chunks/{chunk-NXE6SQIV.js → chunk-IJTOWOD7.js} +14 -3
  69. package/chunks/chunk-IKCX4CCL.js +469 -0
  70. package/chunks/{chunk-7SSWNGEJ.js → chunk-IKYJHJNF.js} +3 -3
  71. package/chunks/{chunk-64XKYOXK.js → chunk-IO3IX5Q4.js} +1 -1
  72. package/chunks/{chunk-RS7MT2QG.js → chunk-IPUUTYMV.js} +2 -4
  73. package/chunks/{chunk-XU457J4V.js → chunk-IRH27ZC2.js} +2 -2
  74. package/chunks/{chunk-SVIMKSEI.js → chunk-J24WCGIN.js} +4 -4
  75. package/chunks/{chunk-4LVZNIDO.js → chunk-J56UI34H.js} +4 -13
  76. package/chunks/{chunk-TJTKSVIV.js → chunk-JLU636DO.js} +5 -1
  77. package/chunks/{chunk-7PIL2BYF.js → chunk-JVPM2ULZ.js} +6 -6
  78. package/chunks/{chunk-KBB5O3JO.js → chunk-JXJFVC6E.js} +37 -18
  79. package/chunks/chunk-JZA3JUDJ.js +82 -0
  80. package/chunks/{chunk-45PO6ZIS.js → chunk-K36B6G2O.js} +5 -5
  81. package/chunks/{chunk-GPSKDNEE.js → chunk-K4XWPEWB.js} +4 -4
  82. package/chunks/{chunk-K7EUPLIP.js → chunk-KIM5GUMA.js} +654 -117
  83. package/chunks/{chunk-42W5BDEY.js → chunk-KMQ33DO4.js} +7 -5
  84. package/chunks/{chunk-E2UVIFI2.js → chunk-KRXPRVGL.js} +0 -1
  85. package/chunks/{chunk-WHGVTP7Q.js → chunk-L26JL52R.js} +3 -3
  86. package/chunks/{chunk-7Z6JQEL6.js → chunk-L5UHQJTJ.js} +1 -1
  87. package/chunks/{chunk-26CBI4DC.js → chunk-LB6DUZ26.js} +259 -67
  88. package/chunks/chunk-LEH5C7FV.js +232 -0
  89. package/chunks/{chunk-UTGFTJ2H.js → chunk-LH2BYDQ5.js} +6 -4
  90. package/chunks/{chunk-QKTHJXCS.js → chunk-LK7CHLVP.js} +79 -2
  91. package/chunks/{chunk-V7WNRZL7.js → chunk-LKEJ26GS.js} +11 -11
  92. package/chunks/{chunk-6VPLV3L3.js → chunk-LQIW3YFY.js} +227 -41
  93. package/chunks/chunk-LS77BEZP.js +405 -0
  94. package/chunks/{chunk-5WDRI7US.js → chunk-M4FMGVY4.js} +3 -3
  95. package/chunks/{chunk-57FIIFJN.js → chunk-M5JM7OSF.js} +1 -1
  96. package/chunks/{chunk-7362QS5B.js → chunk-MB4MZHMJ.js} +80 -37
  97. package/chunks/{chunk-4K56OJFJ.js → chunk-MUP3T3AD.js} +1 -1
  98. package/chunks/{chunk-CJQ3FZ2G.js → chunk-MVSUYZDT.js} +4 -4
  99. package/chunks/{chunk-6FZYKBKV.js → chunk-MZAXJAUM.js} +1 -1
  100. package/chunks/{chunk-32L4D2O2.js → chunk-NH6KE4JX.js} +3 -3
  101. package/chunks/chunk-NIBLUX3Y.js +934 -0
  102. package/chunks/{chunk-OQB4EXO4.js → chunk-NL7LTRLR.js} +1 -1
  103. package/chunks/{chunk-6S5HSCOI.js → chunk-OFDOK3VM.js} +5 -5
  104. package/chunks/{chunk-LIZRAKPB.js → chunk-OHNBB4XR.js} +1 -1
  105. package/chunks/{chunk-MDZTPSXO.js → chunk-OKY7HXPG.js} +2 -2
  106. package/chunks/{chunk-NHDKSOEY.js → chunk-P3QQPMQA.js} +5 -5
  107. package/chunks/{chunk-4SCOLXTD.js → chunk-PC6JANNU.js} +5 -5
  108. package/chunks/{chunk-IWALV67J.js → chunk-PHOF65IG.js} +4300 -1284
  109. package/chunks/{chunk-OQ5SYCPE.js → chunk-PJIZUQVC.js} +2 -2
  110. package/chunks/{chunk-5DTTYNB7.js → chunk-PQNHRFJC.js} +16 -3
  111. package/chunks/{chunk-YM3SZTH4.js → chunk-PR75REBZ.js} +18 -1
  112. package/chunks/{chunk-5XORMWA2.js → chunk-PSOO6YXD.js} +18 -15
  113. package/chunks/{chunk-X6N25LXS.js → chunk-PWTZEM3C.js} +2 -2
  114. package/chunks/{chunk-GSX6P2JW.js → chunk-PWVFN2LF.js} +1 -1
  115. package/chunks/{chunk-AHX6AKPD.js → chunk-Q4M4MDQ4.js} +2 -2
  116. package/chunks/{chunk-3EHJ44GG.js → chunk-QAF7NMK7.js} +1 -1
  117. package/chunks/{chunk-WSYKDFYR.js → chunk-R5AFZNQW.js} +5 -5
  118. package/chunks/{chunk-63DJBU32.js → chunk-RF3EXIHJ.js} +39 -18
  119. package/chunks/{chunk-4K7VDKAD.js → chunk-RHLZR4E5.js} +1 -1
  120. package/chunks/{chunk-SXPSOMQ4.js → chunk-RIBKPMRP.js} +220 -141
  121. package/chunks/{chunk-RVLZCXEE.js → chunk-RWTEFFPU.js} +82 -3
  122. package/chunks/{chunk-ZUTM4LHM.js → chunk-RZIX2G32.js} +1 -1
  123. package/chunks/{chunk-ZKBNRL6O.js → chunk-SQCQ4KO2.js} +336 -404
  124. package/chunks/{chunk-THJNPLI4.js → chunk-TARRHLLG.js} +1 -0
  125. package/chunks/{chunk-RHYFF54J.js → chunk-TEHGS6UP.js} +50 -21
  126. package/chunks/{chunk-ACQJPDDS.js → chunk-TGILQ3YH.js} +8 -8
  127. package/chunks/{chunk-Q2YKNMLS.js → chunk-TOFQCPDC.js} +43 -10
  128. package/chunks/{chunk-ACZIBDYD.js → chunk-TPRQ7RZH.js} +587 -176
  129. package/chunks/{chunk-T4TZQJ7W.js → chunk-TWPJO254.js} +5 -16
  130. package/chunks/{chunk-7MWABCXU.js → chunk-U7M2DMGW.js} +3 -3
  131. package/chunks/{chunk-KQQ757OQ.js → chunk-UDX5OBWR.js} +41 -9
  132. package/chunks/{chunk-SRPZG4ER.js → chunk-USTWD7QV.js} +6 -4
  133. package/chunks/{chunk-NPQDJGKU.js → chunk-UUUTRMI2.js} +1 -1
  134. package/chunks/chunk-UW5EOVUN.js +249 -0
  135. package/chunks/{chunk-6IL7KRLE.js → chunk-VAK25FTU.js} +1 -1
  136. package/chunks/{chunk-TDDFEPBX.js → chunk-VIA5XA4U.js} +5 -2
  137. package/chunks/{chunk-3BJDQVE6.js → chunk-VRYUBFMC.js} +1 -1
  138. package/chunks/{chunk-PLQODS7F.js → chunk-VULLI6WQ.js} +172 -6
  139. package/chunks/{chunk-GN45XAAU.js → chunk-WCXCRJYB.js} +1 -1
  140. package/chunks/{chunk-2LI23QA6.js → chunk-X5XDDSSH.js} +1 -1
  141. package/chunks/{chunk-O32RMIMO.js → chunk-Y34KJKDC.js} +1 -1
  142. package/chunks/{chunk-7ZD5EKXE.js → chunk-YBL3QUDD.js} +2 -2
  143. package/chunks/{chunk-H4AR2JQF.js → chunk-YH6G52F2.js} +3 -3
  144. package/chunks/{chunk-3G3UUMRS.js → chunk-YPE6A4GC.js} +2 -2
  145. package/chunks/{chunk-3F2JUWCH.js → chunk-YX324OPW.js} +1 -1
  146. package/chunks/{chunk-CGIDQG6J.js → chunk-Z2BC6UJ5.js} +3 -3
  147. package/chunks/{chunk-QLJUC7TG.js → chunk-ZD6UTE4A.js} +1 -1
  148. package/chunks/{chunk-ZPWJZHJ2.js → chunk-ZFDTEDCF.js} +6 -6
  149. package/chunks/chunk-ZJHVAS7M.js +289 -0
  150. package/chunks/{chunk-XAGLQITN.js → chunk-ZNAUOR2I.js} +15 -12
  151. package/chunks/{chunk-T2L47JJK.js → chunk-ZOIFNCKL.js} +4 -4
  152. package/chunks/{computer-use-RZ3UUWYW.js → computer-use-SOQ4E3VX.js} +43 -34
  153. package/chunks/{config-utils-SQUBZEQM.js → config-utils-7V7GGIW6.js} +3 -3
  154. package/chunks/contextCommand-JLHYA34Z.js +80 -0
  155. package/chunks/{create-sub-session-AZ77LBL3.js → create-sub-session-IWW2IZ2T.js} +3 -3
  156. package/chunks/{create-sub-session-EQG73FT6.js → create-sub-session-QRJLW5BV.js} +43 -34
  157. package/chunks/{cron-create-KTWJM7QT.js → cron-create-YIID5XAW.js} +6 -6
  158. package/chunks/{cron-delete-2P3I5ULL.js → cron-delete-ZVHYCEP2.js} +5 -5
  159. package/chunks/{cron-list-PXDPGEDQ.js → cron-list-XEGS463Q.js} +5 -5
  160. package/chunks/{daemon-RAPSDJH7.js → daemon-YO6433NF.js} +350 -53
  161. package/chunks/daemon-status-provider-2233Q37D.js +89 -0
  162. package/chunks/{de-4IBXM7CN.js → de-HGRCYDEJ.js} +1 -0
  163. package/chunks/{dist-UIFWIFRO.js → dist-46NQKLTW.js} +2 -2
  164. package/chunks/{dist-XRYV6TJP.js → dist-AIKFMUKK.js} +50 -4
  165. package/chunks/{dist-XBJVSWS2.js → dist-BBLXMS3N.js} +14 -2
  166. package/chunks/{dist-OMW6WDEO.js → dist-F6IBUDR4.js} +40 -9
  167. package/chunks/{dist-PJLG2XYX.js → dist-WEAHOXDM.js} +1 -1
  168. package/chunks/{dist-OAV7LJGJ.js → dist-YFNEUWSE.js} +26 -2
  169. package/chunks/earlyInputCapture-A7NDU3PF.js +82 -0
  170. package/chunks/{edit-XRSKQPHQ.js → edit-OBDSQURM.js} +43 -34
  171. package/chunks/{en-USMCCJAJ.js → en-MTWBNGDO.js} +15 -0
  172. package/chunks/{enter-worktree-WAHCWE6I.js → enter-worktree-U6MRPQ2P.js} +43 -34
  173. package/chunks/{enterPlanMode-QIOYLDCF.js → enterPlanMode-BC5QUZZ2.js} +43 -34
  174. package/chunks/{environment-T3FXCDJI.js → environment-W5UFC2CH.js} +46 -37
  175. package/chunks/errors-M7CLORXH.js +88 -0
  176. package/chunks/{exit-worktree-RHVTLX6T.js → exit-worktree-DGNYMECB.js} +43 -34
  177. package/chunks/{exitPlanMode-UATOE2GQ.js → exitPlanMode-GXTBWQAR.js} +43 -34
  178. package/chunks/{fast-path-J3RHOYSZ.js → fast-path-JJZFJANL.js} +6 -6
  179. package/chunks/{fast-path-settings-XB3CPUJT.js → fast-path-settings-WQJU2LAT.js} +2 -2
  180. package/chunks/{fr-WVHEBDDB.js → fr-45RLL55O.js} +1 -0
  181. package/chunks/{gemini-P72OGOH6.js → gemini-QS36EBZV.js} +133 -102
  182. package/chunks/{geminiContentGenerator-F6EG5FXF.js → geminiContentGenerator-AG4KB6CV.js} +14 -8
  183. package/chunks/{getMachineId-bsd-QFVLPUPT.js → getMachineId-bsd-V7W3GODC.js} +1 -1
  184. package/chunks/{getMachineId-darwin-DGMQQE2E.js → getMachineId-darwin-TDO75DQP.js} +1 -1
  185. package/chunks/{getMachineId-linux-R4Z6CSWC.js → getMachineId-linux-TF43WQT2.js} +1 -1
  186. package/chunks/{getMachineId-unsupported-Z3SBVBUV.js → getMachineId-unsupported-ZGUO3TXT.js} +1 -1
  187. package/chunks/{getMachineId-win-SCK5UFDT.js → getMachineId-win-ECFYZZFQ.js} +1 -1
  188. package/chunks/{glob-WHASQZRX.js → glob-V7R3PSK3.js} +43 -34
  189. package/chunks/{grep-LS7AADJ3.js → grep-QYPSK7OP.js} +43 -34
  190. package/chunks/handleAutoUpdate-6DBEZYPV.js +81 -0
  191. package/chunks/{i18n-IMVASWIF.js → i18n-VUJJZIMU.js} +44 -35
  192. package/chunks/image-gen-Z3VPGKRC.js +240 -0
  193. package/chunks/initializer-UWAK5U5O.js +86 -0
  194. package/chunks/installationInfo-6O2YAA52.js +80 -0
  195. package/chunks/{ja-KY4ROZTE.js → ja-B7DF7DFG.js} +1 -0
  196. package/chunks/{keychain-token-storage-6ACJDYIB.js → keychain-token-storage-MDTG3WRM.js} +3 -3
  197. package/chunks/{kittyProtocolDetector-HCNNKJTI.js → kittyProtocolDetector-MBRTDRBK.js} +5 -3
  198. package/chunks/list-GB4ESM3T.js +89 -0
  199. package/chunks/list-agents-5KJJHR6I.js +80 -0
  200. package/chunks/loadedSettingsAdapter-OT6JVQ7U.js +83 -0
  201. package/chunks/loggingContentGenerator-HS3S5H3Q.js +1077 -0
  202. package/chunks/{loop-wakeup-RNMRVA66.js → loop-wakeup-FXKNNYSY.js} +7 -7
  203. package/chunks/{ls-J2ZI5XYK.js → ls-NTK6VOQJ.js} +5 -5
  204. package/chunks/{lsp-UMS3NUB5.js → lsp-2JI24STP.js} +3 -3
  205. package/chunks/{managed-npm-update-L6UY7OM7.js → managed-npm-update-JYEMMXA3.js} +94 -37
  206. package/chunks/mcp-6DBDJPFU.js +83 -0
  207. package/chunks/{monitor-DXYFB5QD.js → monitor-R3ODH5U6.js} +45 -35
  208. package/chunks/node-UUDY34IG.js +305 -0
  209. package/chunks/nonInteractiveCli-MOYCYBBU.js +141 -0
  210. package/chunks/{notebook-edit-KGD7YJEA.js → notebook-edit-BNOK452R.js} +43 -34
  211. package/chunks/{openaiContentGenerator-C74A2XAU.js → openaiContentGenerator-WMCU3O2H.js} +27 -17
  212. package/chunks/pidfile-TFRZZZIO.js +86 -0
  213. package/chunks/{processUtils-GUT5B4R6.js → processUtils-RT7UNCC2.js} +2 -2
  214. package/chunks/{pt-OK455PLH.js → pt-22Q3FP73.js} +1 -0
  215. package/chunks/{qwenContentGenerator-PT46FQPA.js → qwenContentGenerator-HHCRK4SX.js} +56 -41
  216. package/chunks/{qwenOAuth2-S7DZHUUU.js → qwenOAuth2-OWLB5AKH.js} +14 -27
  217. package/chunks/read-file-APMO3PSX.js +31 -0
  218. package/chunks/{read-mcp-resource-F6HYMDUY.js → read-mcp-resource-4DKQWGHD.js} +3 -3
  219. package/chunks/{record-artifact-7GCFLDD7.js → record-artifact-RQKFYO5B.js} +3 -3
  220. package/chunks/resumeHistoryUtils-6KRYEAWZ.js +91 -0
  221. package/chunks/ripGrep-BEJDEDXW.js +73 -0
  222. package/chunks/{ru-7SPDGMGD.js → ru-FZCNZHDC.js} +1 -0
  223. package/chunks/{run-qwen-serve-QO4PT5NV.js → run-qwen-serve-FU6HEM4J.js} +276 -62
  224. package/chunks/{runtime-EOTXBUM6.js → runtime-XXRRTNP6.js} +55 -44
  225. package/chunks/{scheduler-MAIQ2PHR.js → scheduler-G2ZS2Z7E.js} +43 -34
  226. package/chunks/{sdk-exporters-grpc-ETLH47EP.js → sdk-exporters-grpc-AK3LGHNO.js} +3 -3
  227. package/chunks/{sdk-exporters-http-T3POX73F.js → sdk-exporters-http-FYBSUCPD.js} +6 -6
  228. package/chunks/{sdk-impl-NSLPDH6I.js → sdk-impl-GMVPB7NB.js} +6 -6
  229. package/chunks/{send-message-PYIJ2PZL.js → send-message-Q6OOR6BR.js} +46 -9
  230. package/chunks/serve-7BSTXJ4T.js +89 -0
  231. package/chunks/{server-CBCC3XQC.js → server-4UMH7OIZ.js} +2348 -396
  232. package/chunks/{session-RQUEFQDL.js → session-K3O3Q2SV.js} +107 -88
  233. package/chunks/{settings-QHXCJDSR.js → settings-CR2EWTBA.js} +53 -44
  234. package/chunks/shell-HH3PF3A2.js +83 -0
  235. package/chunks/{skill-WHSGTGKP.js → skill-I3SDA4MB.js} +17 -15
  236. package/chunks/spawnChannel-RWNDBXGA.js +82 -0
  237. package/chunks/{src-F3HKX47D.js → src-GE4TTTML.js} +290 -171
  238. package/chunks/{standalone-update-BKLONSVI.js → standalone-update-Q6WFRZZQ.js} +45 -36
  239. package/chunks/{startInteractiveUI-TNJ37X5W.js → startInteractiveUI-SLZGHRPH.js} +736 -298
  240. package/chunks/{syntheticOutput-H7RTI5KL.js → syntheticOutput-I3757IWH.js} +4 -4
  241. package/chunks/{task-create-7474AJJD.js → task-create-N7WQSGYA.js} +10 -10
  242. package/chunks/{task-list-633HGOIB.js → task-list-FOPULZEP.js} +7 -7
  243. package/chunks/{task-stop-MNUGHPIA.js → task-stop-H6RHXFVQ.js} +4 -4
  244. package/chunks/{task-update-66GQB5LI.js → task-update-M57TFZJT.js} +10 -10
  245. package/chunks/{team-create-LUHJ7ZCC.js → team-create-YJALH5D2.js} +44 -35
  246. package/chunks/{team-delete-BB3CG3QF.js → team-delete-QE2UXJL7.js} +7 -7
  247. package/chunks/{team-plan-approval-X3DYRL6L.js → team-plan-approval-34QFYKGN.js} +43 -34
  248. package/chunks/theme-manager-SWRILQHI.js +77 -0
  249. package/chunks/todoWrite-VQ7FKOHL.js +358 -0
  250. package/chunks/{tool-search-BAWOETUY.js → tool-search-NF7GB6LE.js} +16 -16
  251. package/chunks/total-session-admission-DLHHHLD3.js +84 -0
  252. package/chunks/{tree-sitter-FS4VPMZA.js → tree-sitter-4D7QS7F6.js} +1 -1
  253. package/chunks/{tree-sitter-bash-6B46JJCV.js → tree-sitter-bash-VEJGF5XF.js} +1 -1
  254. package/chunks/{trustedFolders-4UEOIKOF.js → trustedFolders-KHXHY6PY.js} +44 -35
  255. package/chunks/{update-relaunch-WDWABT5P.js → update-relaunch-WBUZJC5O.js} +5 -5
  256. package/chunks/updateCheck-RKL6M5XN.js +92 -0
  257. package/chunks/useAutoAcceptIndicator-CFQ5BUJL.js +93 -0
  258. package/chunks/{validateNonInterActiveAuth-OKUE3JLF.js → validateNonInterActiveAuth-3R223G3R.js} +91 -81
  259. package/chunks/{version-GMUULLWB.js → version-HS7YSFHV.js} +1 -1
  260. package/chunks/{web-fetch-JBWTMPFN.js → web-fetch-NKCSG7ZE.js} +18 -16
  261. package/chunks/{web-search-27COJHJT.js → web-search-S62WAP4S.js} +13 -27
  262. package/chunks/{workflow-5L37J7YF.js → workflow-QAGU5RU4.js} +44 -35
  263. package/chunks/workspace-providers-status-QSVZUETE.js +86 -0
  264. package/chunks/{workspace-registration-store-TYPYXIP6.js → workspace-registration-store-24JMHDGF.js} +2 -2
  265. package/chunks/workspace-registry-UT4RBNBM.js +88 -0
  266. package/chunks/workspace-service-JFWRUS4V.js +98 -0
  267. package/chunks/workspace-skills-status-ZBBKJOI2.js +85 -0
  268. package/chunks/write-file-VHIXW5M7.js +73 -0
  269. package/chunks/{zh-WY5DWYZD.js → zh-LUIGBD55.js} +15 -0
  270. package/chunks/{zh-TW-BM47YBFH.js → zh-TW-F5KG2IYD.js} +15 -0
  271. package/cli-entry.js +10 -1
  272. package/cli.js +13 -13
  273. package/locales/ca.js +2 -0
  274. package/locales/de.js +1 -0
  275. package/locales/en.js +25 -0
  276. package/locales/fr.js +1 -0
  277. package/locales/ja.js +1 -0
  278. package/locales/pt.js +1 -0
  279. package/locales/ru.js +1 -0
  280. package/locales/zh-TW.js +23 -0
  281. package/locales/zh.js +23 -0
  282. package/package.json +3 -3
  283. package/web-shell/assets/{arc-BWFm0SI0.js → arc-DcbWnB9T.js} +1 -1
  284. package/web-shell/assets/{architectureDiagram-3BPJPVTR-CZ_yL-DQ.js → architectureDiagram-3BPJPVTR-kMMF5sud.js} +1 -1
  285. package/web-shell/assets/{blockDiagram-GPEHLZMM-B9F9mJvG.js → blockDiagram-GPEHLZMM-Htl9vTJS.js} +1 -1
  286. package/web-shell/assets/{c4Diagram-AAUBKEIU-BUdwJW5f.js → c4Diagram-AAUBKEIU-BnZnm0mQ.js} +1 -1
  287. package/web-shell/assets/channel-Cq7YKtfC.js +1 -0
  288. package/web-shell/assets/{chunk-2J33WTMH-w4cF-qlF.js → chunk-2J33WTMH-DziB7kDG.js} +1 -1
  289. package/web-shell/assets/{chunk-4BX2VUAB-BXwURxHJ.js → chunk-4BX2VUAB-CmkD8daw.js} +1 -1
  290. package/web-shell/assets/{chunk-55IACEB6-Gem3LalC.js → chunk-55IACEB6-CHAd9A_U.js} +1 -1
  291. package/web-shell/assets/{chunk-727SXJPM-A3ddVojI.js → chunk-727SXJPM-Dqaam3fE.js} +1 -1
  292. package/web-shell/assets/{chunk-AQP2D5EJ-CjHZ5L_R.js → chunk-AQP2D5EJ-D_-saBYM.js} +1 -1
  293. package/web-shell/assets/{chunk-FMBD7UC4-CKgdgcpv.js → chunk-FMBD7UC4-B9r_veWD.js} +1 -1
  294. package/web-shell/assets/{chunk-ND2GUHAM-Cn2Dykjb.js → chunk-ND2GUHAM-B3EaCSpL.js} +1 -1
  295. package/web-shell/assets/{chunk-QZHKN3VN--0SyraC5.js → chunk-QZHKN3VN-CYq8x9mn.js} +1 -1
  296. package/web-shell/assets/classDiagram-4FO5ZUOK-CQ9aC1Tg.js +1 -0
  297. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CQ9aC1Tg.js +1 -0
  298. package/web-shell/assets/{cose-bilkent-S5V4N54A-CphhAity.js → cose-bilkent-S5V4N54A-D0ng4uiB.js} +1 -1
  299. package/web-shell/assets/{dagre-BM42HDAG-DU--jiKp.js → dagre-BM42HDAG-DCZollQv.js} +1 -1
  300. package/web-shell/assets/{diagram-2AECGRRQ-BzvuZw1Y.js → diagram-2AECGRRQ-Dfk2pWS0.js} +1 -1
  301. package/web-shell/assets/{diagram-5GNKFQAL-D84-49Y0.js → diagram-5GNKFQAL-kX38ltWR.js} +1 -1
  302. package/web-shell/assets/{diagram-KO2AKTUF-DQTq-3_3.js → diagram-KO2AKTUF-CJz2vsXh.js} +1 -1
  303. package/web-shell/assets/{diagram-LMA3HP47-8FTrshzN.js → diagram-LMA3HP47-BvMLZm_7.js} +1 -1
  304. package/web-shell/assets/{diagram-OG6HWLK6-BCjpDBCm.js → diagram-OG6HWLK6-l7kfStkO.js} +1 -1
  305. package/web-shell/assets/{erDiagram-TEJ5UH35-BtRObkmg.js → erDiagram-TEJ5UH35-BSVa8GGT.js} +1 -1
  306. package/web-shell/assets/{flowDiagram-I6XJVG4X-DTrW6oxy.js → flowDiagram-I6XJVG4X-CoawKIXH.js} +1 -1
  307. package/web-shell/assets/{ganttDiagram-6RSMTGT7-BgPNSW6j.js → ganttDiagram-6RSMTGT7-DFUDH0zF.js} +1 -1
  308. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BTclNgGV.js → gitGraphDiagram-PVQCEYII-Y2pvpT4e.js} +1 -1
  309. package/web-shell/assets/{index-CxA7AqY6.js → index-D0GX0zZf.js} +1 -1
  310. package/web-shell/assets/index-D9haPt0X.css +5 -0
  311. package/web-shell/assets/index-ckX9Pq5k.js +1230 -0
  312. package/web-shell/assets/{infoDiagram-5YYISTIA-DCE4AJt2.js → infoDiagram-5YYISTIA-CU8_zLiX.js} +1 -1
  313. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-C8iE6q4Y.js → ishikawaDiagram-YF4QCWOH-AVQiV0DU.js} +1 -1
  314. package/web-shell/assets/{journeyDiagram-JHISSGLW-C_dxdyEc.js → journeyDiagram-JHISSGLW-DQ0VSKa3.js} +1 -1
  315. package/web-shell/assets/{kanban-definition-UN3LZRKU-Dw3n1u3w.js → kanban-definition-UN3LZRKU-BqnWqsE_.js} +1 -1
  316. package/web-shell/assets/{linear-C2BF2zJ9.js → linear-BkoihsaA.js} +1 -1
  317. package/web-shell/assets/{mermaid.core-CGTQU3MA.js → mermaid.core-5RJs-31j.js} +5 -5
  318. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BVFZm9ZC.js → mindmap-definition-RKZ34NQL-D33Bxnpd.js} +1 -1
  319. package/web-shell/assets/{pieDiagram-4H26LBE5-Cc-TNN3n.js → pieDiagram-4H26LBE5-BuEAw3BH.js} +1 -1
  320. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CgW3Rzsi.js → quadrantDiagram-W4KKPZXB-Kox_usEq.js} +1 -1
  321. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BAaj0Y3B.js → requirementDiagram-4Y6WPE33-CNjeUif0.js} +1 -1
  322. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-XJWmekxS.js → sankeyDiagram-5OEKKPKP-BCd2OL_U.js} +1 -1
  323. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CtRc_0wf.js → sequenceDiagram-3UESZ5HK-CF2ZTsz0.js} +1 -1
  324. package/web-shell/assets/{stateDiagram-AJRCARHV-WCnvMGy5.js → stateDiagram-AJRCARHV-qenSzHtm.js} +1 -1
  325. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-B7W4zlCr.js +1 -0
  326. package/web-shell/assets/{timeline-definition-PNZ67QCA-C9cRx49L.js → timeline-definition-PNZ67QCA-B5DyWdgs.js} +1 -1
  327. package/web-shell/assets/{vennDiagram-CIIHVFJN-BvXOCEt-.js → vennDiagram-CIIHVFJN-DqP4I_o_.js} +1 -1
  328. package/web-shell/assets/{wardley-L42UT6IY-ByafGtzu.js → wardley-L42UT6IY-CJe2e4mg.js} +1 -1
  329. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-CozAnw8x.js → wardleyDiagram-YWT4CUSO-BMDSw-Rr.js} +1 -1
  330. package/web-shell/assets/{xychartDiagram-2RQKCTM6-Camu9Qvq.js → xychartDiagram-2RQKCTM6-BTVZYkxD.js} +1 -1
  331. package/web-shell/index.html +17 -13
  332. package/chunks/MaxSizedBox-HNWBEL5H.js +0 -77
  333. package/chunks/agent-KTMY6SF3.js +0 -72
  334. package/chunks/agent-headless-HJ56ZZOW.js +0 -66
  335. package/chunks/bridge-AMC5AD7W.js +0 -80
  336. package/chunks/chunk-CBOQ3HY7.js +0 -2019
  337. package/chunks/chunk-UHGNAWHK.js +0 -6928
  338. package/chunks/contextCommand-PW4GINQU.js +0 -71
  339. package/chunks/daemon-status-provider-3IWTBWQ3.js +0 -79
  340. package/chunks/earlyInputCapture-TYNI3B6E.js +0 -73
  341. package/chunks/errors-QAWTJTAW.js +0 -79
  342. package/chunks/handleAutoUpdate-V5A3JHOG.js +0 -72
  343. package/chunks/initializer-JJLF5JCJ.js +0 -77
  344. package/chunks/installationInfo-LAWMHQAG.js +0 -71
  345. package/chunks/list-L2ECB6UM.js +0 -80
  346. package/chunks/loadedSettingsAdapter-RLMZ4Z3E.js +0 -74
  347. package/chunks/mcp-E4O7Z6FO.js +0 -74
  348. package/chunks/nonInteractiveCli-GU2UKULE.js +0 -131
  349. package/chunks/pidfile-IWQWZNZV.js +0 -77
  350. package/chunks/read-file-ZOCXW4AD.js +0 -31
  351. package/chunks/resumeHistoryUtils-TJWRDE2L.js +0 -83
  352. package/chunks/ripGrep-OFKAW2VE.js +0 -64
  353. package/chunks/serve-UB4CF67Q.js +0 -80
  354. package/chunks/shell-RPK7EAOC.js +0 -74
  355. package/chunks/spawnChannel-IUP3ZNMT.js +0 -73
  356. package/chunks/theme-manager-ALL7F4CJ.js +0 -68
  357. package/chunks/total-session-admission-PLONPNXI.js +0 -74
  358. package/chunks/updateCheck-PVROE4GR.js +0 -87
  359. package/chunks/useAutoAcceptIndicator-6BNLNN5S.js +0 -85
  360. package/chunks/workspace-providers-status-2U3IF4TX.js +0 -77
  361. package/chunks/workspace-registry-DLQDDDIF.js +0 -78
  362. package/chunks/workspace-service-7K3LF4QX.js +0 -89
  363. package/chunks/workspace-skills-status-4DOZ3DBS.js +0 -76
  364. package/chunks/write-file-PTPXDKZ3.js +0 -64
  365. package/web-shell/assets/channel-DiLlxxIf.js +0 -1
  366. package/web-shell/assets/classDiagram-4FO5ZUOK-CkylTdM4.js +0 -1
  367. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CkylTdM4.js +0 -1
  368. package/web-shell/assets/index-CGtQqOIa.css +0 -5
  369. package/web-shell/assets/index-TtM0hVjU.js +0 -1207
  370. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-D1gzH2Ue.js +0 -1
@@ -5,14 +5,14 @@ import {
5
5
  enableMouseEvents,
6
6
  useKeypress,
7
7
  useKeypressContext
8
- } from "./chunk-6VPLV3L3.js";
8
+ } from "./chunk-LQIW3YFY.js";
9
9
  import {
10
10
  formatSupportedModes,
11
11
  getCommandDisplayName,
12
12
  getCommandSourceBadge,
13
13
  getCommandSourceGroup,
14
14
  getCommandSubcommandNames
15
- } from "./chunk-ZUTM4LHM.js";
15
+ } from "./chunk-RZIX2G32.js";
16
16
  import {
17
17
  calculateAverageLatency,
18
18
  calculateCacheHitRate,
@@ -22,16 +22,14 @@ import {
22
22
  computeSessionStats,
23
23
  getSystemInfoFields,
24
24
  levelLabel
25
- } from "./chunk-7MWABCXU.js";
26
- import {
27
- wrapForMultiplexer
28
- } from "./chunk-4LVZNIDO.js";
25
+ } from "./chunk-U7M2DMGW.js";
29
26
  import {
30
27
  MINIMUM_MAX_HEIGHT,
31
28
  MaxSizedBox
32
- } from "./chunk-64EG42HV.js";
29
+ } from "./chunk-FQK6JAFG.js";
33
30
  import {
34
31
  CompactToolGroupDisplay,
32
+ ICON,
35
33
  SCREEN_READER_MODEL_PREFIX,
36
34
  SCREEN_READER_USER_PREFIX,
37
35
  SHELL_COMMAND_NAME,
@@ -44,10 +42,10 @@ import {
44
42
  estimateCompactToolGroupHeight,
45
43
  isCollapsibleTool,
46
44
  wrapAnsi
47
- } from "./chunk-KBB5O3JO.js";
45
+ } from "./chunk-JXJFVC6E.js";
48
46
  import {
49
47
  theme
50
- } from "./chunk-6IL7KRLE.js";
48
+ } from "./chunk-VAK25FTU.js";
51
49
  import {
52
50
  require_jsx_runtime
53
51
  } from "./chunk-SV5PQVQE.js";
@@ -59,17 +57,17 @@ import {
59
57
  use_is_screen_reader_enabled_default,
60
58
  use_stdin_default,
61
59
  use_stdout_default
62
- } from "./chunk-NEEB7UEN.js";
63
- import {
64
- require_react
65
- } from "./chunk-5QWWOFGG.js";
60
+ } from "./chunk-6GMVPFB2.js";
66
61
  import {
67
62
  relaunchApp
68
- } from "./chunk-O32RMIMO.js";
63
+ } from "./chunk-Y34KJKDC.js";
69
64
  import {
70
65
  resolveColor,
71
66
  themeManager
72
- } from "./chunk-7Z6JQEL6.js";
67
+ } from "./chunk-L5UHQJTJ.js";
68
+ import {
69
+ require_react
70
+ } from "./chunk-5QWWOFGG.js";
73
71
  import {
74
72
  cpLen,
75
73
  cpSlice,
@@ -83,37 +81,37 @@ import {
83
81
  toCodePoints,
84
82
  truncateToWidth,
85
83
  wrapToVisualLines
86
- } from "./chunk-RS7MT2QG.js";
84
+ } from "./chunk-IPUUTYMV.js";
87
85
  import {
88
86
  stringWidth
89
- } from "./chunk-H2XVO6NE.js";
87
+ } from "./chunk-2MIN6GRR.js";
90
88
  import {
91
89
  isTerminalGoalStatusKind
92
90
  } from "./chunk-QTERJVPZ.js";
93
- import {
94
- formatDuration,
95
- formatMemoryUsage,
96
- formatRelativeTime,
97
- formatTokenCount
98
- } from "./chunk-E5Z2AVNV.js";
99
91
  import {
100
92
  require_has_flag,
101
93
  require_source
102
94
  } from "./chunk-57OAHC2Y.js";
103
95
  import {
104
96
  createLoadedSettingsAdapter
105
- } from "./chunk-64XKYOXK.js";
97
+ } from "./chunk-IO3IX5Q4.js";
98
+ import {
99
+ formatDuration,
100
+ formatMemoryUsage,
101
+ formatRelativeTime,
102
+ formatTokenCount
103
+ } from "./chunk-E5Z2AVNV.js";
106
104
  import {
107
105
  getPersistScopeForModelSelection
108
- } from "./chunk-RHYFF54J.js";
106
+ } from "./chunk-TEHGS6UP.js";
109
107
  import {
110
108
  getCurrentLanguage,
111
109
  localizeToolDisplayName,
112
110
  t
113
- } from "./chunk-V7WNRZL7.js";
111
+ } from "./chunk-LKEJ26GS.js";
114
112
  import {
115
113
  isWorkspaceTrusted
116
- } from "./chunk-CGIDQG6J.js";
114
+ } from "./chunk-Z2BC6UJ5.js";
117
115
  import {
118
116
  ALL_PROVIDERS,
119
117
  IdeClient,
@@ -135,27 +133,32 @@ import {
135
133
  resolveBaseUrl,
136
134
  resolveMetadataKey,
137
135
  resolveOwnsModel
138
- } from "./chunk-IWALV67J.js";
136
+ } from "./chunk-PHOF65IG.js";
139
137
  import {
140
138
  stripAnsi
141
- } from "./chunk-T4TZQJ7W.js";
139
+ } from "./chunk-TWPJO254.js";
140
+ import {
141
+ sanitizeForOsc,
142
+ supportsHyperlinks,
143
+ wrapForMultiplexer
144
+ } from "./chunk-EPDRMGT4.js";
142
145
  import {
143
146
  MAIN_SOURCE,
144
147
  formatVisionBridgeNoticeDisplay,
145
148
  getMCPServerStatus,
146
149
  isVisionBridgeNoticeDisplay,
147
150
  uiTelemetryService
148
- } from "./chunk-H4A4A2SY.js";
151
+ } from "./chunk-CIKQ7KKO.js";
149
152
  import {
150
153
  ToolDisplayNames,
151
154
  ToolNames,
152
155
  ToolNamesMigration
153
- } from "./chunk-YM3SZTH4.js";
156
+ } from "./chunk-PR75REBZ.js";
154
157
  import {
155
158
  createDebugLogger,
156
159
  escapePath,
157
160
  unescapePath
158
- } from "./chunk-OQB4EXO4.js";
161
+ } from "./chunk-NL7LTRLR.js";
159
162
  import {
160
163
  init_esbuild_shims
161
164
  } from "./chunk-5O2XNYP6.js";
@@ -366,7 +369,7 @@ var require_supports_hyperlinks = __commonJS({
366
369
  init_esbuild_shims();
367
370
  var supportsColor = require_supports_color();
368
371
  var hasFlag = require_has_flag();
369
- function parseVersion2(versionString) {
372
+ function parseVersion(versionString) {
370
373
  if (/^\d{3,4}$/.test(versionString)) {
371
374
  const m = /(\d{1,2})(\d{2})/.exec(versionString);
372
375
  return {
@@ -382,7 +385,7 @@ var require_supports_hyperlinks = __commonJS({
382
385
  patch: versions[2]
383
386
  };
384
387
  }
385
- __name(parseVersion2, "parseVersion");
388
+ __name(parseVersion, "parseVersion");
386
389
  function supportsHyperlink(stream) {
387
390
  const { env } = process;
388
391
  if ("FORCE_HYPERLINK" in env) {
@@ -413,7 +416,7 @@ var require_supports_hyperlinks = __commonJS({
413
416
  return false;
414
417
  }
415
418
  if ("TERM_PROGRAM" in env) {
416
- const version = parseVersion2(env.TERM_PROGRAM_VERSION);
419
+ const version = parseVersion(env.TERM_PROGRAM_VERSION);
417
420
  switch (env.TERM_PROGRAM) {
418
421
  case "iTerm.app":
419
422
  if (version.major === 3) {
@@ -430,7 +433,7 @@ var require_supports_hyperlinks = __commonJS({
430
433
  if (env.VTE_VERSION === "0.50.0") {
431
434
  return false;
432
435
  }
433
- const version = parseVersion2(env.VTE_VERSION);
436
+ const version = parseVersion(env.VTE_VERSION);
434
437
  return version.major > 0 || version.minor >= 50;
435
438
  }
436
439
  return false;
@@ -2646,14 +2649,15 @@ __name(useTerminalSize, "useTerminalSize");
2646
2649
 
2647
2650
  // packages/cli/src/ui/components/SessionPreview.tsx
2648
2651
  init_esbuild_shims();
2649
- var import_react41 = __toESM(require_react(), 1);
2652
+ var import_react42 = __toESM(require_react(), 1);
2650
2653
 
2651
2654
  // packages/cli/src/ui/components/HistoryItemDisplay.tsx
2652
2655
  init_esbuild_shims();
2653
- var import_react40 = __toESM(require_react(), 1);
2656
+ var import_react41 = __toESM(require_react(), 1);
2654
2657
 
2655
2658
  // packages/cli/src/ui/components/messages/ConversationMessages.tsx
2656
2659
  init_esbuild_shims();
2660
+ var import_react13 = __toESM(require_react(), 1);
2657
2661
 
2658
2662
  // packages/cli/src/ui/utils/MarkdownDisplay.tsx
2659
2663
  init_esbuild_shims();
@@ -2827,7 +2831,7 @@ function colorizeCode(code, language, availableHeight, maxWidth, options = {}) {
2827
2831
  lowlight
2828
2832
  );
2829
2833
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Box_default, { children: [
2830
- showLineNumbers && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text, { color: activeTheme.colors.Gray, children: `${String(
2834
+ showLineNumbers && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text, { color: activeTheme.colors.Gray, selectable: false, children: `${String(
2831
2835
  index + firstLineNumber + hiddenLinesCount
2832
2836
  ).padStart(padWidth, " ")} ` }),
2833
2837
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text, { color: activeTheme.defaultColor, wrap: "wrap", children: contentToRender })
@@ -2849,7 +2853,7 @@ function colorizeCode(code, language, availableHeight, maxWidth, options = {}) {
2849
2853
  maxWidth,
2850
2854
  overflowDirection: "top",
2851
2855
  children: lines.map((line, index) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Box_default, { children: [
2852
- showLineNumbers && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text, { color: activeTheme.defaultColor, children: `${String(index + firstLineNumber).padStart(padWidth, " ")} ` }),
2856
+ showLineNumbers && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text, { color: activeTheme.defaultColor, selectable: false, children: `${String(index + firstLineNumber).padStart(padWidth, " ")} ` }),
2853
2857
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text, { color: activeTheme.colors.Gray, children: line })
2854
2858
  ] }, index))
2855
2859
  }
@@ -3250,20 +3254,6 @@ __name(renderInlineLatex, "renderInlineLatex");
3250
3254
 
3251
3255
  // packages/cli/src/ui/utils/osc8.ts
3252
3256
  init_esbuild_shims();
3253
- function sanitizeForOsc(s) {
3254
- return s.replace(
3255
- // eslint-disable-next-line no-control-regex
3256
- /[\x00-\x1f\x7f\x80-\x9f\u200e\u200f\u202a-\u202e\u2066-\u2069\u2028\u2029]/g,
3257
- ""
3258
- );
3259
- }
3260
- __name(sanitizeForOsc, "sanitizeForOsc");
3261
- function osc8Hyperlink(url, label = url) {
3262
- const safeUrl = sanitizeForOsc(url);
3263
- const safeLabel = sanitizeForOsc(label);
3264
- return wrapForMultiplexer(`\x1B]8;;${safeUrl}\x07${safeLabel}\x1B]8;;\x07`);
3265
- }
3266
- __name(osc8Hyperlink, "osc8Hyperlink");
3267
3257
  function osc8Open(url) {
3268
3258
  return wrapForMultiplexer(`\x1B]8;;${sanitizeForOsc(url)}\x07`);
3269
3259
  }
@@ -3287,93 +3277,6 @@ function isSafeOscScheme(url) {
3287
3277
  return SAFE_OSC8_SCHEMES.has(match[1].toLowerCase());
3288
3278
  }
3289
3279
  __name(isSafeOscScheme, "isSafeOscScheme");
3290
- function shouldForceHyperlinks(value) {
3291
- if (value.length === 0) return true;
3292
- const trimmed = value.trim();
3293
- if (!/^[+-]?\d+$/.test(trimmed)) return false;
3294
- return Number(trimmed) !== 0;
3295
- }
3296
- __name(shouldForceHyperlinks, "shouldForceHyperlinks");
3297
- function parseVersion(versionString) {
3298
- if (!versionString) return { major: 0, minor: 0, patch: 0 };
3299
- if (/^\d{3,4}$/.test(versionString)) {
3300
- const m = /(\d{1,2})(\d{2})/.exec(versionString);
3301
- return { major: 0, minor: parseInt(m[1], 10), patch: parseInt(m[2], 10) };
3302
- }
3303
- const parts = versionString.split(".").map((n) => parseInt(n, 10) || 0);
3304
- return { major: parts[0] ?? 0, minor: parts[1] ?? 0, patch: parts[2] ?? 0 };
3305
- }
3306
- __name(parseVersion, "parseVersion");
3307
- function supportsHyperlinks(stream = process.stdout) {
3308
- const env = process.env;
3309
- if (env["QWEN_DISABLE_HYPERLINKS"] === "1") return false;
3310
- if (env["NO_COLOR"] !== void 0 && env["NO_COLOR"] !== "") return false;
3311
- if (env["FORCE_COLOR"] === "0" || env["FORCE_COLOR"] === "false") {
3312
- return false;
3313
- }
3314
- if (!stream || !stream.isTTY) return false;
3315
- const force = env["FORCE_HYPERLINK"];
3316
- if (force !== void 0) {
3317
- return shouldForceHyperlinks(force);
3318
- }
3319
- if (env["CI"]) return false;
3320
- if (env["TEAMCITY_VERSION"]) return false;
3321
- if (env["TMUX"] || env["STY"]) return false;
3322
- if (env["WT_SESSION"]) return true;
3323
- if (env["KITTY_WINDOW_ID"] || env["TERM"] === "xterm-kitty") return true;
3324
- if (env["DOMTERM"]) return true;
3325
- if (env["GHOSTTY_RESOURCES_DIR"] || env["TERM"] === "xterm-ghostty") {
3326
- return true;
3327
- }
3328
- if (env["KONSOLE_VERSION"]) {
3329
- const konsoleVersion = parseInt(env["KONSOLE_VERSION"], 10);
3330
- if (Number.isFinite(konsoleVersion) && konsoleVersion >= 210400) {
3331
- return true;
3332
- }
3333
- }
3334
- if (env["TERM"] === "alacritty" || env["ALACRITTY_LOG"] !== void 0 || env["ALACRITTY_WINDOW_ID"] !== void 0 || env["ALACRITTY_SOCKET"] !== void 0) {
3335
- return true;
3336
- }
3337
- if (env["TERMINAL_EMULATOR"] === "JetBrains-JediTerm") return true;
3338
- if (env["TERM_PROGRAM"]) {
3339
- const version = parseVersion(env["TERM_PROGRAM_VERSION"]);
3340
- switch (env["TERM_PROGRAM"]) {
3341
- case "iTerm.app":
3342
- if (version.major === 3) return version.minor >= 1;
3343
- return version.major > 3;
3344
- case "WezTerm":
3345
- return version.major >= 20200620;
3346
- case "vscode":
3347
- return version.major > 1 || version.major === 1 && version.minor >= 72;
3348
- case "ghostty":
3349
- return true;
3350
- case "mintty":
3351
- if (!env["TERM_PROGRAM_VERSION"]) return false;
3352
- return version.major > 3 || version.major === 3 && version.minor >= 3;
3353
- // Warp (TERM_PROGRAM=WarpTerminal) does NOT yet support OSC 8 — its
3354
- // rendering engine ignores the envelope and prints visible garbage,
3355
- // so we deliberately fall through to the legacy `label (url)` path.
3356
- // Re-enable when Warp ships OSC 8 support.
3357
- //
3358
- // Hyper exposes OSC 8 in recent versions but plugin chains have a
3359
- // history of breaking escape passthrough — gate on FORCE_HYPERLINK
3360
- // so users who know their setup works can opt in explicitly.
3361
- default:
3362
- break;
3363
- }
3364
- }
3365
- if (env["VTE_VERSION"]) {
3366
- const version = parseVersion(env["VTE_VERSION"]);
3367
- if (version.major === 0 && version.minor === 50 && version.patch === 0) {
3368
- return false;
3369
- }
3370
- if (version.major > 0 || version.minor >= 50) return true;
3371
- return false;
3372
- }
3373
- if (process.platform === "win32") return false;
3374
- return false;
3375
- }
3376
- __name(supportsHyperlinks, "supportsHyperlinks");
3377
3280
  function trimTrailingUrlPunctuation(url) {
3378
3281
  let openParen = 0;
3379
3282
  let openBracket = 0;
@@ -7092,8 +6995,8 @@ var RenderListItemInternal = /* @__PURE__ */ __name(({
7092
6995
  const isTaskItem = taskMatch !== null && renderVisualBlocks;
7093
6996
  const isTaskChecked = taskMatch?.[1]?.toLowerCase() === "x";
7094
6997
  const effectiveItemText = isTaskItem ? taskMatch[2] : itemText;
7095
- const prefix = isTaskItem ? `${isTaskChecked ? "\u2713" : "\u25CB"} ` : type === "ol" ? `${marker}. ` : `${marker} `;
7096
- const prefixWidth = prefix.length;
6998
+ const prefix = isTaskItem ? `${isTaskChecked ? "\u2713" : ICON.CIRCLE_EMPTY} ` : type === "ol" ? `${marker}. ` : `${marker} `;
6999
+ const prefixWidth = stringWidth(prefix);
7097
7000
  const indentation = leadingWhitespace.length;
7098
7001
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
7099
7002
  Box_default,
@@ -7155,11 +7058,23 @@ function getArenaStatusLabel(status) {
7155
7058
  case "failed" /* FAILED */:
7156
7059
  return { icon: "\u2717", text: "Failed", color: theme.status.error };
7157
7060
  case "running" /* RUNNING */:
7158
- return { icon: "\u25CB", text: "Running", color: theme.text.secondary };
7061
+ return {
7062
+ icon: ICON.CIRCLE_EMPTY,
7063
+ text: "Running",
7064
+ color: theme.text.secondary
7065
+ };
7159
7066
  case "initializing" /* INITIALIZING */:
7160
- return { icon: "\u25CB", text: "Initializing", color: theme.text.secondary };
7067
+ return {
7068
+ icon: ICON.CIRCLE_EMPTY,
7069
+ text: "Initializing",
7070
+ color: theme.text.secondary
7071
+ };
7161
7072
  default:
7162
- return { icon: "\u25CB", text: status, color: theme.text.secondary };
7073
+ return {
7074
+ icon: ICON.CIRCLE_EMPTY,
7075
+ text: status,
7076
+ color: theme.text.secondary
7077
+ };
7163
7078
  }
7164
7079
  }
7165
7080
  __name(getArenaStatusLabel, "getArenaStatusLabel");
@@ -7192,8 +7107,8 @@ __name(formatDuration2, "formatDuration");
7192
7107
 
7193
7108
  // packages/cli/src/ui/components/messages/ConversationMessages.tsx
7194
7109
  var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
7195
- var THINKING_ICON = "\u2234 ";
7196
- var THINKING_ICON_PENDING = "\u2235 ";
7110
+ var THINKING_ICON = `${ICON.THEREFORE} `;
7111
+ var THINKING_ICON_PENDING = `${ICON.BECAUSE} `;
7197
7112
  var toggleKeyHint = process.platform === "darwin" ? "option+t" : "alt+t";
7198
7113
  function getPrefixWidth(prefix) {
7199
7114
  return stringWidth(prefix) + 1;
@@ -7217,7 +7132,7 @@ var PrefixedTextMessage = /* @__PURE__ */ __name(({
7217
7132
  marginTop,
7218
7133
  alignSelf,
7219
7134
  children: [
7220
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box_default, { width: prefixWidth, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: prefixColor, "aria-label": ariaLabel, children: prefix }) }),
7135
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box_default, { width: prefixWidth, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: prefixColor, "aria-label": ariaLabel, children: prefix }) }),
7221
7136
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { wrap: "wrap", color: textColor, children: text }) })
7222
7137
  ]
7223
7138
  }
@@ -7236,7 +7151,7 @@ var PrefixedMarkdownMessage = /* @__PURE__ */ __name(({
7236
7151
  }) => {
7237
7152
  const prefixWidth = getPrefixWidth(prefix);
7238
7153
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Box_default, { flexDirection: "row", children: [
7239
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box_default, { width: prefixWidth, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: prefixColor, "aria-label": ariaLabel, children: prefix }) }),
7154
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box_default, { width: prefixWidth, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: prefixColor, "aria-label": ariaLabel, children: prefix }) }),
7240
7155
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box_default, { flexGrow: 1, flexDirection: "column", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
7241
7156
  MarkdownDisplay,
7242
7157
  {
@@ -7310,7 +7225,7 @@ var AssistantMessage = /* @__PURE__ */ __name(({
7310
7225
  PrefixedMarkdownMessage,
7311
7226
  {
7312
7227
  text,
7313
- prefix: "\u25C6",
7228
+ prefix: ICON.DIAMOND,
7314
7229
  prefixColor: theme.text.accent,
7315
7230
  ariaLabel: SCREEN_READER_MODEL_PREFIX,
7316
7231
  isPending,
@@ -7332,7 +7247,7 @@ var AssistantMessageContent = /* @__PURE__ */ __name(({
7332
7247
  isPending,
7333
7248
  availableTerminalHeight,
7334
7249
  contentWidth,
7335
- basePrefix: "\u25C6",
7250
+ basePrefix: ICON.DIAMOND,
7336
7251
  sourceCopyIndexOffsets
7337
7252
  }
7338
7253
  ), "AssistantMessageContent");
@@ -7348,21 +7263,25 @@ function tailVisualLines(text, width, maxLines) {
7348
7263
  }
7349
7264
  }
7350
7265
  const lines = wrapToVisualLines(text.slice(sliceStart), width);
7351
- return lines.slice(-maxLines).join("\n");
7266
+ return lines.slice(-maxLines);
7352
7267
  }
7353
7268
  __name(tailVisualLines, "tailVisualLines");
7354
7269
  var ThinkBody = /* @__PURE__ */ __name(({ text, isPending, expanded, availableTerminalHeight, contentWidth }) => {
7270
+ const maxSeenLinesRef = (0, import_react13.useRef)(0);
7271
+ const prevTextLenRef = (0, import_react13.useRef)(0);
7272
+ if (!isPending || text.length < prevTextLenRef.current) {
7273
+ maxSeenLinesRef.current = 0;
7274
+ }
7275
+ prevTextLenRef.current = text.length;
7355
7276
  if (!isPending && !expanded) return null;
7356
7277
  if (isPending && !expanded) {
7357
7278
  const innerWidth = Math.max(contentWidth - 2, 20);
7358
- const maxLines = availableTerminalHeight != null ? Math.max(
7359
- 1,
7360
- Math.min(
7361
- MAX_STREAMING_THINKING_VISUAL_LINES,
7362
- Math.floor(availableTerminalHeight / 3)
7363
- )
7364
- ) : MAX_STREAMING_THINKING_VISUAL_LINES;
7365
- const display = tailVisualLines(text, innerWidth, maxLines);
7279
+ const maxLines = MAX_STREAMING_THINKING_VISUAL_LINES;
7280
+ const lines = tailVisualLines(text, innerWidth, maxLines);
7281
+ const target = Math.max(lines.length, maxSeenLinesRef.current);
7282
+ maxSeenLinesRef.current = target;
7283
+ const padded = lines.length < target ? [...new Array(target - lines.length).fill(""), ...lines] : lines;
7284
+ const display = padded.join("\n");
7366
7285
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box_default, { paddingLeft: 2, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { dimColor: true, wrap: "truncate", children: display }) });
7367
7286
  }
7368
7287
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box_default, { paddingLeft: 2, flexDirection: "column", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
@@ -7436,11 +7355,11 @@ var ThinkMessageContent = /* @__PURE__ */ __name(({
7436
7355
 
7437
7356
  // packages/cli/src/ui/components/messages/ToolGroupMessage.tsx
7438
7357
  init_esbuild_shims();
7439
- var import_react26 = __toESM(require_react(), 1);
7358
+ var import_react27 = __toESM(require_react(), 1);
7440
7359
 
7441
7360
  // packages/cli/src/ui/components/messages/ToolMessage.tsx
7442
7361
  init_esbuild_shims();
7443
- var import_react24 = __toESM(require_react(), 1);
7362
+ var import_react25 = __toESM(require_react(), 1);
7444
7363
 
7445
7364
  // packages/cli/src/ui/components/messages/DiffRenderer.tsx
7446
7365
  init_esbuild_shims();
@@ -7648,6 +7567,7 @@ var renderDiffContent = /* @__PURE__ */ __name((parsedLines, filename, tabWidth
7648
7567
  showLineNumbers && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
7649
7568
  Text,
7650
7569
  {
7570
+ selectable: false,
7651
7571
  color: theme.text.secondary,
7652
7572
  backgroundColor: line.type === "add" ? theme.background.diff.added : line.type === "del" ? theme.background.diff.removed : void 0,
7653
7573
  children: [
@@ -7814,9 +7734,9 @@ var Colors = {
7814
7734
  // packages/cli/src/ui/components/TodoDisplay.tsx
7815
7735
  var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
7816
7736
  var STATUS_ICONS = {
7817
- pending: "\u25CB",
7818
- in_progress: "\u25D0",
7819
- completed: "\u25CF"
7737
+ pending: ICON.CIRCLE_EMPTY,
7738
+ in_progress: ICON.CIRCLE_LEFT_HALF,
7739
+ completed: ICON.CIRCLE_FILLED
7820
7740
  };
7821
7741
  var TodoDisplay = /* @__PURE__ */ __name(({ todos }) => {
7822
7742
  if (!todos || todos.length === 0) {
@@ -7837,7 +7757,7 @@ var TodoItemRow = /* @__PURE__ */ __name(({ todo }) => {
7837
7757
 
7838
7758
  // packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx
7839
7759
  init_esbuild_shims();
7840
- var import_react22 = __toESM(require_react(), 1);
7760
+ var import_react23 = __toESM(require_react(), 1);
7841
7761
  import { promises as fs3 } from "node:fs";
7842
7762
  import * as os3 from "node:os";
7843
7763
  import * as path2 from "node:path";
@@ -7847,11 +7767,11 @@ init_esbuild_shims();
7847
7767
 
7848
7768
  // packages/cli/src/ui/components/shared/BaseSelectionList.tsx
7849
7769
  init_esbuild_shims();
7850
- var import_react16 = __toESM(require_react(), 1);
7770
+ var import_react17 = __toESM(require_react(), 1);
7851
7771
 
7852
7772
  // packages/cli/src/ui/hooks/useSelectionList.ts
7853
7773
  init_esbuild_shims();
7854
- var import_react13 = __toESM(require_react(), 1);
7774
+ var import_react14 = __toESM(require_react(), 1);
7855
7775
 
7856
7776
  // packages/cli/src/ui/keyMatchers.ts
7857
7777
  init_esbuild_shims();
@@ -7877,6 +7797,8 @@ var Command = /* @__PURE__ */ ((Command2) => {
7877
7797
  Command2["ACCEPT_SUGGESTION"] = "acceptSuggestion";
7878
7798
  Command2["COMPLETION_UP"] = "completionUp";
7879
7799
  Command2["COMPLETION_DOWN"] = "completionDown";
7800
+ Command2["COMPLETION_TAB_LEFT"] = "completionTabLeft";
7801
+ Command2["COMPLETION_TAB_RIGHT"] = "completionTabRight";
7880
7802
  Command2["SUBMIT"] = "submit";
7881
7803
  Command2["QUEUE_MESSAGE"] = "queueMessage";
7882
7804
  Command2["NEWLINE"] = "newline";
@@ -7964,6 +7886,17 @@ var defaultKeyBindings = {
7964
7886
  { key: "down", shift: false },
7965
7887
  { key: "n", ctrl: true }
7966
7888
  ],
7889
+ // Completion category tab switching (for the tabbed @ completion UI).
7890
+ // Bound to Ctrl+arrows rather than plain arrows so the bare arrow keys keep
7891
+ // moving the caret in the editable input buffer (plain arrows only switch
7892
+ // tabs in modal dialogs, which have no text buffer). Alt/Option+arrows still
7893
+ // perform word movement.
7894
+ ["completionTabLeft" /* COMPLETION_TAB_LEFT */]: [
7895
+ { key: "left", shift: false, ctrl: true, command: false }
7896
+ ],
7897
+ ["completionTabRight" /* COMPLETION_TAB_RIGHT */]: [
7898
+ { key: "right", shift: false, ctrl: true, command: false }
7899
+ ],
7967
7900
  // Text input
7968
7901
  // Must also exclude shift to allow shift+enter for newline
7969
7902
  ["submit" /* SUBMIT */]: [
@@ -8203,19 +8136,19 @@ function useSelectionList({
8203
8136
  showNumbers = false,
8204
8137
  disableVimNav = false
8205
8138
  }) {
8206
- const [state, dispatch] = (0, import_react13.useReducer)(selectionListReducer, {
8139
+ const [state, dispatch] = (0, import_react14.useReducer)(selectionListReducer, {
8207
8140
  activeIndex: computeInitialIndex(initialIndex, items),
8208
8141
  initialIndex,
8209
8142
  pendingHighlight: false,
8210
8143
  pendingSelect: false,
8211
8144
  items
8212
8145
  });
8213
- const numberInputRef = (0, import_react13.useRef)("");
8214
- const numberInputTimer = (0, import_react13.useRef)(null);
8215
- (0, import_react13.useEffect)(() => {
8146
+ const numberInputRef = (0, import_react14.useRef)("");
8147
+ const numberInputTimer = (0, import_react14.useRef)(null);
8148
+ (0, import_react14.useEffect)(() => {
8216
8149
  dispatch({ type: "INITIALIZE", payload: { initialIndex, items } });
8217
8150
  }, [initialIndex, items]);
8218
- (0, import_react13.useEffect)(() => {
8151
+ (0, import_react14.useEffect)(() => {
8219
8152
  let needsClear = false;
8220
8153
  if (state.pendingHighlight && items[state.activeIndex]) {
8221
8154
  onHighlight?.(items[state.activeIndex].value);
@@ -8239,7 +8172,7 @@ function useSelectionList({
8239
8172
  onHighlight,
8240
8173
  onSelect
8241
8174
  ]);
8242
- (0, import_react13.useEffect)(
8175
+ (0, import_react14.useEffect)(
8243
8176
  () => () => {
8244
8177
  if (numberInputTimer.current) {
8245
8178
  clearTimeout(numberInputTimer.current);
@@ -8335,11 +8268,11 @@ __name(useSelectionList, "useSelectionList");
8335
8268
 
8336
8269
  // packages/cli/src/ui/components/shared/RowMouseController.tsx
8337
8270
  init_esbuild_shims();
8338
- var import_react15 = __toESM(require_react(), 1);
8271
+ var import_react16 = __toESM(require_react(), 1);
8339
8272
 
8340
8273
  // packages/cli/src/ui/hooks/useMouseEvents.ts
8341
8274
  init_esbuild_shims();
8342
- var import_react14 = __toESM(require_react(), 1);
8275
+ var import_react15 = __toESM(require_react(), 1);
8343
8276
  var mouseModeRefs = /* @__PURE__ */ new Map();
8344
8277
  function effectiveTracking(entry) {
8345
8278
  if (entry.any > 0) return "any";
@@ -8391,23 +8324,23 @@ function useMouseEvents(handler, { isActive, tracking = "button", bypassVpGate =
8391
8324
  const { isRawModeSupported } = use_stdin_default();
8392
8325
  const { stdout } = use_stdout_default();
8393
8326
  const { subscribeMouse, unsubscribeMouse } = useKeypressContext();
8394
- const settings = (0, import_react14.useContext)(SettingsContext);
8327
+ const settings = (0, import_react15.useContext)(SettingsContext);
8395
8328
  const isVpMode = settings?.merged.ui?.useTerminalBuffer ?? false;
8396
8329
  const vpGateOpen = isVpMode || bypassVpGate;
8397
- const handlerRef = (0, import_react14.useRef)(handler);
8330
+ const handlerRef = (0, import_react15.useRef)(handler);
8398
8331
  handlerRef.current = handler;
8399
8332
  const enabled = isActive && isRawModeSupported && vpGateOpen && Boolean(stdout.isTTY);
8400
- (0, import_react14.useEffect)(() => {
8333
+ (0, import_react15.useEffect)(() => {
8401
8334
  if (!enabled) return;
8402
8335
  acquireMouseMode(stdout, tracking);
8403
8336
  return () => {
8404
8337
  releaseMouseMode(stdout, tracking);
8405
8338
  };
8406
8339
  }, [enabled, stdout, tracking]);
8407
- const mouseCallback = (0, import_react14.useCallback)((event) => {
8340
+ const mouseCallback = (0, import_react15.useCallback)((event) => {
8408
8341
  handlerRef.current(event);
8409
8342
  }, []);
8410
- (0, import_react14.useEffect)(() => {
8343
+ (0, import_react15.useEffect)(() => {
8411
8344
  if (!enabled) return;
8412
8345
  subscribeMouse(mouseCallback);
8413
8346
  return () => unsubscribeMouse(mouseCallback);
@@ -8488,7 +8421,7 @@ function RowMouseController({
8488
8421
  onSelectIndex
8489
8422
  }) {
8490
8423
  const { rows: terminalHeight } = useTerminalSize();
8491
- const resolveIndex = (0, import_react15.useCallback)(
8424
+ const resolveIndex = (0, import_react16.useCallback)(
8492
8425
  (event) => {
8493
8426
  const container = containerRef.current;
8494
8427
  if (!container) return null;
@@ -8515,7 +8448,7 @@ function RowMouseController({
8515
8448
  },
8516
8449
  [containerRef, itemRefs, scrollOffset, terminalHeight]
8517
8450
  );
8518
- const handleMouse = (0, import_react15.useCallback)(
8451
+ const handleMouse = (0, import_react16.useCallback)(
8519
8452
  (event) => {
8520
8453
  if (event.name !== "move" && event.name !== "left-press") return;
8521
8454
  const index = resolveIndex(event);
@@ -8562,10 +8495,10 @@ function BaseSelectionList({
8562
8495
  isFocused,
8563
8496
  showNumbers
8564
8497
  });
8565
- const [scrollOffset, setScrollOffset] = (0, import_react16.useState)(
8498
+ const [scrollOffset, setScrollOffset] = (0, import_react17.useState)(
8566
8499
  () => getScrollOffsetForIndex(activeIndex, items.length, maxItemsToShow)
8567
8500
  );
8568
- (0, import_react16.useEffect)(() => {
8501
+ (0, import_react17.useEffect)(() => {
8569
8502
  const newScrollOffset = getScrollOffsetForIndex(
8570
8503
  activeIndex,
8571
8504
  items.length,
@@ -8577,10 +8510,10 @@ function BaseSelectionList({
8577
8510
  setScrollOffset(newScrollOffset);
8578
8511
  }
8579
8512
  }, [activeIndex, items.length, scrollOffset, maxItemsToShow]);
8580
- const settings = (0, import_react16.useContext)(SettingsContext);
8513
+ const settings = (0, import_react17.useContext)(SettingsContext);
8581
8514
  const mouseEnabled = !!settings?.merged.ui?.useTerminalBuffer;
8582
- const containerRef = (0, import_react16.useRef)(null);
8583
- const itemRefs = (0, import_react16.useRef)([]);
8515
+ const containerRef = (0, import_react17.useRef)(null);
8516
+ const itemRefs = (0, import_react17.useRef)([]);
8584
8517
  const visibleItems = items.slice(scrollOffset, scrollOffset + maxItemsToShow);
8585
8518
  const numberColumnWidth = String(items.length).length;
8586
8519
  return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Box_default, { ref: containerRef, flexDirection: "column", gap: itemGap, children: [
@@ -8710,7 +8643,7 @@ __name(RadioButtonSelect, "RadioButtonSelect");
8710
8643
 
8711
8644
  // packages/cli/src/ui/hooks/useLaunchEditor.ts
8712
8645
  init_esbuild_shims();
8713
- var import_react17 = __toESM(require_react(), 1);
8646
+ var import_react18 = __toESM(require_react(), 1);
8714
8647
  import { spawnSync as spawnSync2 } from "child_process";
8715
8648
  function getEditorCommand(preferredEditor) {
8716
8649
  if (preferredEditor) {
@@ -8736,7 +8669,7 @@ __name(getEditorCommand, "getEditorCommand");
8736
8669
  function useLaunchEditor() {
8737
8670
  const settings = useSettings();
8738
8671
  const { stdin, setRawMode } = use_stdin_default();
8739
- const launchEditor = (0, import_react17.useCallback)(
8672
+ const launchEditor = (0, import_react18.useCallback)(
8740
8673
  async (filePath) => {
8741
8674
  const preferredEditor = settings.merged.general?.preferredEditor;
8742
8675
  const editor = getEditorCommand(preferredEditor);
@@ -8773,14 +8706,14 @@ __name(useLaunchEditor, "useLaunchEditor");
8773
8706
 
8774
8707
  // packages/cli/src/ui/components/messages/AskUserQuestionDialog.tsx
8775
8708
  init_esbuild_shims();
8776
- var import_react21 = __toESM(require_react(), 1);
8709
+ var import_react22 = __toESM(require_react(), 1);
8777
8710
 
8778
8711
  // packages/cli/src/ui/components/shared/TextInput.tsx
8779
8712
  init_esbuild_shims();
8780
8713
 
8781
8714
  // packages/cli/src/ui/components/shared/text-buffer.ts
8782
8715
  init_esbuild_shims();
8783
- var import_react18 = __toESM(require_react(), 1);
8716
+ var import_react19 = __toESM(require_react(), 1);
8784
8717
  import { spawnSync as spawnSync3 } from "node:child_process";
8785
8718
  import fs2 from "node:fs";
8786
8719
  import os2 from "node:os";
@@ -10838,7 +10771,7 @@ function useTextBuffer({
10838
10771
  shellModeActive = false,
10839
10772
  preferredEditor
10840
10773
  }) {
10841
- const initialState = (0, import_react18.useMemo)(() => {
10774
+ const initialState = (0, import_react19.useMemo)(() => {
10842
10775
  const lines2 = initialText.split("\n");
10843
10776
  const [initialCursorRow, initialCursorCol] = calculateInitialCursorPosition(
10844
10777
  lines2.length === 0 ? [""] : lines2,
@@ -10862,9 +10795,9 @@ function useTextBuffer({
10862
10795
  visualLayout: visualLayout2
10863
10796
  };
10864
10797
  }, [initialText, initialCursorOffset, viewport.width, viewport.height]);
10865
- const stateRef = (0, import_react18.useRef)(initialState);
10866
- const [state, setState] = (0, import_react18.useState)(initialState);
10867
- const dispatch = (0, import_react18.useCallback)((action) => {
10798
+ const stateRef = (0, import_react19.useRef)(initialState);
10799
+ const [state, setState] = (0, import_react19.useState)(initialState);
10800
+ const dispatch = (0, import_react19.useCallback)((action) => {
10868
10801
  stateRef.current = textBufferReducer(stateRef.current, action);
10869
10802
  setState(stateRef.current);
10870
10803
  }, []);
@@ -10876,25 +10809,25 @@ function useTextBuffer({
10876
10809
  selectionAnchor,
10877
10810
  visualLayout
10878
10811
  } = state;
10879
- const text = (0, import_react18.useMemo)(() => lines.join("\n"), [lines]);
10880
- const visualCursor = (0, import_react18.useMemo)(
10812
+ const text = (0, import_react19.useMemo)(() => lines.join("\n"), [lines]);
10813
+ const visualCursor = (0, import_react19.useMemo)(
10881
10814
  () => calculateVisualCursorFromLayout(visualLayout, [cursorRow, cursorCol]),
10882
10815
  [visualLayout, cursorRow, cursorCol]
10883
10816
  );
10884
10817
  const { visualLines, visualToLogicalMap } = visualLayout;
10885
- const [visualScrollRow, setVisualScrollRow] = (0, import_react18.useState)(0);
10886
- (0, import_react18.useEffect)(() => {
10818
+ const [visualScrollRow, setVisualScrollRow] = (0, import_react19.useState)(0);
10819
+ (0, import_react19.useEffect)(() => {
10887
10820
  if (onChange) {
10888
10821
  onChange(text);
10889
10822
  }
10890
10823
  }, [text, onChange]);
10891
- (0, import_react18.useEffect)(() => {
10824
+ (0, import_react19.useEffect)(() => {
10892
10825
  dispatch({
10893
10826
  type: "set_viewport",
10894
10827
  payload: { width: viewport.width, height: viewport.height }
10895
10828
  });
10896
10829
  }, [dispatch, viewport.width, viewport.height]);
10897
- (0, import_react18.useEffect)(() => {
10830
+ (0, import_react19.useEffect)(() => {
10898
10831
  const { height } = viewport;
10899
10832
  const totalVisualLines = visualLines.length;
10900
10833
  const maxScrollStart = Math.max(0, totalVisualLines - height);
@@ -10909,7 +10842,7 @@ function useTextBuffer({
10909
10842
  setVisualScrollRow(newVisualScrollRow);
10910
10843
  }
10911
10844
  }, [visualCursor, visualScrollRow, viewport, visualLines.length]);
10912
- const insert = (0, import_react18.useCallback)(
10845
+ const insert = (0, import_react19.useCallback)(
10913
10846
  (ch, { paste = false } = {}) => {
10914
10847
  if (paste && /[\n\r]/.test(ch) && !shellModeActive) {
10915
10848
  const validPaths = tryExtractFilePaths(ch, isValidPath);
@@ -10948,202 +10881,202 @@ function useTextBuffer({
10948
10881
  },
10949
10882
  [dispatch, isValidPath, shellModeActive]
10950
10883
  );
10951
- const newline = (0, import_react18.useCallback)(() => {
10884
+ const newline = (0, import_react19.useCallback)(() => {
10952
10885
  dispatch({ type: "insert", payload: "\n" });
10953
10886
  }, [dispatch]);
10954
- const backspace = (0, import_react18.useCallback)(() => {
10887
+ const backspace = (0, import_react19.useCallback)(() => {
10955
10888
  dispatch({ type: "backspace" });
10956
10889
  }, [dispatch]);
10957
- const del = (0, import_react18.useCallback)(() => {
10890
+ const del = (0, import_react19.useCallback)(() => {
10958
10891
  dispatch({ type: "delete" });
10959
10892
  }, [dispatch]);
10960
- const move = (0, import_react18.useCallback)(
10893
+ const move = (0, import_react19.useCallback)(
10961
10894
  (dir) => {
10962
10895
  dispatch({ type: "move", payload: { dir } });
10963
10896
  },
10964
10897
  [dispatch]
10965
10898
  );
10966
- const undo = (0, import_react18.useCallback)(() => {
10899
+ const undo = (0, import_react19.useCallback)(() => {
10967
10900
  dispatch({ type: "undo" });
10968
10901
  }, [dispatch]);
10969
- const redo = (0, import_react18.useCallback)(() => {
10902
+ const redo = (0, import_react19.useCallback)(() => {
10970
10903
  dispatch({ type: "redo" });
10971
10904
  }, [dispatch]);
10972
- const setText = (0, import_react18.useCallback)(
10905
+ const setText = (0, import_react19.useCallback)(
10973
10906
  (newText) => {
10974
10907
  dispatch({ type: "set_text", payload: newText });
10975
10908
  },
10976
10909
  [dispatch]
10977
10910
  );
10978
- const deleteWordLeft = (0, import_react18.useCallback)(() => {
10911
+ const deleteWordLeft = (0, import_react19.useCallback)(() => {
10979
10912
  dispatch({ type: "delete_word_left" });
10980
10913
  }, [dispatch]);
10981
- const deleteWordRight = (0, import_react18.useCallback)(() => {
10914
+ const deleteWordRight = (0, import_react19.useCallback)(() => {
10982
10915
  dispatch({ type: "delete_word_right" });
10983
10916
  }, [dispatch]);
10984
- const killLineRight = (0, import_react18.useCallback)(() => {
10917
+ const killLineRight = (0, import_react19.useCallback)(() => {
10985
10918
  dispatch({ type: "kill_line_right" });
10986
10919
  }, [dispatch]);
10987
- const killLineLeft = (0, import_react18.useCallback)(() => {
10920
+ const killLineLeft = (0, import_react19.useCallback)(() => {
10988
10921
  dispatch({ type: "kill_line_left" });
10989
10922
  }, [dispatch]);
10990
- const vimDeleteWordForward = (0, import_react18.useCallback)(
10923
+ const vimDeleteWordForward = (0, import_react19.useCallback)(
10991
10924
  (count) => {
10992
10925
  dispatch({ type: "vim_delete_word_forward", payload: { count } });
10993
10926
  },
10994
10927
  [dispatch]
10995
10928
  );
10996
- const vimDeleteWordBackward = (0, import_react18.useCallback)(
10929
+ const vimDeleteWordBackward = (0, import_react19.useCallback)(
10997
10930
  (count) => {
10998
10931
  dispatch({ type: "vim_delete_word_backward", payload: { count } });
10999
10932
  },
11000
10933
  [dispatch]
11001
10934
  );
11002
- const vimDeleteWordEnd = (0, import_react18.useCallback)(
10935
+ const vimDeleteWordEnd = (0, import_react19.useCallback)(
11003
10936
  (count) => {
11004
10937
  dispatch({ type: "vim_delete_word_end", payload: { count } });
11005
10938
  },
11006
10939
  [dispatch]
11007
10940
  );
11008
- const vimChangeWordForward = (0, import_react18.useCallback)(
10941
+ const vimChangeWordForward = (0, import_react19.useCallback)(
11009
10942
  (count) => {
11010
10943
  dispatch({ type: "vim_change_word_forward", payload: { count } });
11011
10944
  },
11012
10945
  [dispatch]
11013
10946
  );
11014
- const vimChangeWordBackward = (0, import_react18.useCallback)(
10947
+ const vimChangeWordBackward = (0, import_react19.useCallback)(
11015
10948
  (count) => {
11016
10949
  dispatch({ type: "vim_change_word_backward", payload: { count } });
11017
10950
  },
11018
10951
  [dispatch]
11019
10952
  );
11020
- const vimChangeWordEnd = (0, import_react18.useCallback)(
10953
+ const vimChangeWordEnd = (0, import_react19.useCallback)(
11021
10954
  (count) => {
11022
10955
  dispatch({ type: "vim_change_word_end", payload: { count } });
11023
10956
  },
11024
10957
  [dispatch]
11025
10958
  );
11026
- const vimDeleteLine = (0, import_react18.useCallback)(
10959
+ const vimDeleteLine = (0, import_react19.useCallback)(
11027
10960
  (count) => {
11028
10961
  dispatch({ type: "vim_delete_line", payload: { count } });
11029
10962
  },
11030
10963
  [dispatch]
11031
10964
  );
11032
- const vimChangeLine = (0, import_react18.useCallback)(
10965
+ const vimChangeLine = (0, import_react19.useCallback)(
11033
10966
  (count) => {
11034
10967
  dispatch({ type: "vim_change_line", payload: { count } });
11035
10968
  },
11036
10969
  [dispatch]
11037
10970
  );
11038
- const vimDeleteToEndOfLine = (0, import_react18.useCallback)(() => {
10971
+ const vimDeleteToEndOfLine = (0, import_react19.useCallback)(() => {
11039
10972
  dispatch({ type: "vim_delete_to_end_of_line" });
11040
10973
  }, [dispatch]);
11041
- const vimChangeToEndOfLine = (0, import_react18.useCallback)(() => {
10974
+ const vimChangeToEndOfLine = (0, import_react19.useCallback)(() => {
11042
10975
  dispatch({ type: "vim_change_to_end_of_line" });
11043
10976
  }, [dispatch]);
11044
- const vimChangeMovement = (0, import_react18.useCallback)(
10977
+ const vimChangeMovement = (0, import_react19.useCallback)(
11045
10978
  (movement, count) => {
11046
10979
  dispatch({ type: "vim_change_movement", payload: { movement, count } });
11047
10980
  },
11048
10981
  [dispatch]
11049
10982
  );
11050
- const vimDeleteMovement = (0, import_react18.useCallback)(
10983
+ const vimDeleteMovement = (0, import_react19.useCallback)(
11051
10984
  (movement, count) => {
11052
10985
  dispatch({ type: "vim_delete_movement", payload: { movement, count } });
11053
10986
  },
11054
10987
  [dispatch]
11055
10988
  );
11056
- const vimMoveLeft = (0, import_react18.useCallback)(
10989
+ const vimMoveLeft = (0, import_react19.useCallback)(
11057
10990
  (count) => {
11058
10991
  dispatch({ type: "vim_move_left", payload: { count } });
11059
10992
  },
11060
10993
  [dispatch]
11061
10994
  );
11062
- const vimMoveRight = (0, import_react18.useCallback)(
10995
+ const vimMoveRight = (0, import_react19.useCallback)(
11063
10996
  (count) => {
11064
10997
  dispatch({ type: "vim_move_right", payload: { count } });
11065
10998
  },
11066
10999
  [dispatch]
11067
11000
  );
11068
- const vimMoveUp = (0, import_react18.useCallback)(
11001
+ const vimMoveUp = (0, import_react19.useCallback)(
11069
11002
  (count) => {
11070
11003
  dispatch({ type: "vim_move_up", payload: { count } });
11071
11004
  },
11072
11005
  [dispatch]
11073
11006
  );
11074
- const vimMoveDown = (0, import_react18.useCallback)(
11007
+ const vimMoveDown = (0, import_react19.useCallback)(
11075
11008
  (count) => {
11076
11009
  dispatch({ type: "vim_move_down", payload: { count } });
11077
11010
  },
11078
11011
  [dispatch]
11079
11012
  );
11080
- const vimMoveWordForward = (0, import_react18.useCallback)(
11013
+ const vimMoveWordForward = (0, import_react19.useCallback)(
11081
11014
  (count) => {
11082
11015
  dispatch({ type: "vim_move_word_forward", payload: { count } });
11083
11016
  },
11084
11017
  [dispatch]
11085
11018
  );
11086
- const vimMoveWordBackward = (0, import_react18.useCallback)(
11019
+ const vimMoveWordBackward = (0, import_react19.useCallback)(
11087
11020
  (count) => {
11088
11021
  dispatch({ type: "vim_move_word_backward", payload: { count } });
11089
11022
  },
11090
11023
  [dispatch]
11091
11024
  );
11092
- const vimMoveWordEnd = (0, import_react18.useCallback)(
11025
+ const vimMoveWordEnd = (0, import_react19.useCallback)(
11093
11026
  (count) => {
11094
11027
  dispatch({ type: "vim_move_word_end", payload: { count } });
11095
11028
  },
11096
11029
  [dispatch]
11097
11030
  );
11098
- const vimDeleteChar = (0, import_react18.useCallback)(
11031
+ const vimDeleteChar = (0, import_react19.useCallback)(
11099
11032
  (count) => {
11100
11033
  dispatch({ type: "vim_delete_char", payload: { count } });
11101
11034
  },
11102
11035
  [dispatch]
11103
11036
  );
11104
- const vimInsertAtCursor = (0, import_react18.useCallback)(() => {
11037
+ const vimInsertAtCursor = (0, import_react19.useCallback)(() => {
11105
11038
  dispatch({ type: "vim_insert_at_cursor" });
11106
11039
  }, [dispatch]);
11107
- const vimAppendAtCursor = (0, import_react18.useCallback)(() => {
11040
+ const vimAppendAtCursor = (0, import_react19.useCallback)(() => {
11108
11041
  dispatch({ type: "vim_append_at_cursor" });
11109
11042
  }, [dispatch]);
11110
- const vimOpenLineBelow = (0, import_react18.useCallback)(() => {
11043
+ const vimOpenLineBelow = (0, import_react19.useCallback)(() => {
11111
11044
  dispatch({ type: "vim_open_line_below" });
11112
11045
  }, [dispatch]);
11113
- const vimOpenLineAbove = (0, import_react18.useCallback)(() => {
11046
+ const vimOpenLineAbove = (0, import_react19.useCallback)(() => {
11114
11047
  dispatch({ type: "vim_open_line_above" });
11115
11048
  }, [dispatch]);
11116
- const vimAppendAtLineEnd = (0, import_react18.useCallback)(() => {
11049
+ const vimAppendAtLineEnd = (0, import_react19.useCallback)(() => {
11117
11050
  dispatch({ type: "vim_append_at_line_end" });
11118
11051
  }, [dispatch]);
11119
- const vimInsertAtLineStart = (0, import_react18.useCallback)(() => {
11052
+ const vimInsertAtLineStart = (0, import_react19.useCallback)(() => {
11120
11053
  dispatch({ type: "vim_insert_at_line_start" });
11121
11054
  }, [dispatch]);
11122
- const vimMoveToLineStart = (0, import_react18.useCallback)(() => {
11055
+ const vimMoveToLineStart = (0, import_react19.useCallback)(() => {
11123
11056
  dispatch({ type: "vim_move_to_line_start" });
11124
11057
  }, [dispatch]);
11125
- const vimMoveToLineEnd = (0, import_react18.useCallback)(() => {
11058
+ const vimMoveToLineEnd = (0, import_react19.useCallback)(() => {
11126
11059
  dispatch({ type: "vim_move_to_line_end" });
11127
11060
  }, [dispatch]);
11128
- const vimMoveToFirstNonWhitespace = (0, import_react18.useCallback)(() => {
11061
+ const vimMoveToFirstNonWhitespace = (0, import_react19.useCallback)(() => {
11129
11062
  dispatch({ type: "vim_move_to_first_nonwhitespace" });
11130
11063
  }, [dispatch]);
11131
- const vimMoveToFirstLine = (0, import_react18.useCallback)(() => {
11064
+ const vimMoveToFirstLine = (0, import_react19.useCallback)(() => {
11132
11065
  dispatch({ type: "vim_move_to_first_line" });
11133
11066
  }, [dispatch]);
11134
- const vimMoveToLastLine = (0, import_react18.useCallback)(() => {
11067
+ const vimMoveToLastLine = (0, import_react19.useCallback)(() => {
11135
11068
  dispatch({ type: "vim_move_to_last_line" });
11136
11069
  }, [dispatch]);
11137
- const vimMoveToLine = (0, import_react18.useCallback)(
11070
+ const vimMoveToLine = (0, import_react19.useCallback)(
11138
11071
  (lineNumber) => {
11139
11072
  dispatch({ type: "vim_move_to_line", payload: { lineNumber } });
11140
11073
  },
11141
11074
  [dispatch]
11142
11075
  );
11143
- const vimEscapeInsertMode = (0, import_react18.useCallback)(() => {
11076
+ const vimEscapeInsertMode = (0, import_react19.useCallback)(() => {
11144
11077
  dispatch({ type: "vim_escape_insert_mode" });
11145
11078
  }, [dispatch]);
11146
- const openInExternalEditor = (0, import_react18.useCallback)(
11079
+ const openInExternalEditor = (0, import_react19.useCallback)(
11147
11080
  async (opts = {}) => {
11148
11081
  let tmpDir;
11149
11082
  let filePath;
@@ -11261,7 +11194,7 @@ function useTextBuffer({
11261
11194
  },
11262
11195
  [dispatch, stdin, setRawMode, preferredEditor]
11263
11196
  );
11264
- const handleInput = (0, import_react18.useCallback)(
11197
+ const handleInput = (0, import_react19.useCallback)(
11265
11198
  (key) => {
11266
11199
  const { sequence: input } = key;
11267
11200
  if (key.paste) {
@@ -11312,11 +11245,11 @@ function useTextBuffer({
11312
11245
  redo
11313
11246
  ]
11314
11247
  );
11315
- const renderedVisualLines = (0, import_react18.useMemo)(
11248
+ const renderedVisualLines = (0, import_react19.useMemo)(
11316
11249
  () => visualLines.slice(visualScrollRow, visualScrollRow + viewport.height),
11317
11250
  [visualLines, visualScrollRow, viewport.height]
11318
11251
  );
11319
- const replaceRange = (0, import_react18.useCallback)(
11252
+ const replaceRange = (0, import_react19.useCallback)(
11320
11253
  (startRow, startCol, endRow, endCol, text2) => {
11321
11254
  dispatch({
11322
11255
  type: "replace_range",
@@ -11325,7 +11258,7 @@ function useTextBuffer({
11325
11258
  },
11326
11259
  [dispatch]
11327
11260
  );
11328
- const replaceRangeByOffset = (0, import_react18.useCallback)(
11261
+ const replaceRangeByOffset = (0, import_react19.useCallback)(
11329
11262
  (startOffset, endOffset, replacementText) => {
11330
11263
  const currentText = stateRef.current.lines.join("\n");
11331
11264
  const [startRow, startCol] = offsetToLogicalPos(currentText, startOffset);
@@ -11334,13 +11267,13 @@ function useTextBuffer({
11334
11267
  },
11335
11268
  [replaceRange]
11336
11269
  );
11337
- const moveToOffset = (0, import_react18.useCallback)(
11270
+ const moveToOffset = (0, import_react19.useCallback)(
11338
11271
  (offset) => {
11339
11272
  dispatch({ type: "move_to_offset", payload: { offset } });
11340
11273
  },
11341
11274
  [dispatch]
11342
11275
  );
11343
- const returnValue = (0, import_react18.useMemo)(
11276
+ const returnValue = (0, import_react19.useMemo)(
11344
11277
  () => ({
11345
11278
  get lines() {
11346
11279
  return stateRef.current.lines;
@@ -11476,11 +11409,11 @@ __name(useTextBuffer, "useTextBuffer");
11476
11409
 
11477
11410
  // packages/cli/src/ui/hooks/usePreferredEditor.ts
11478
11411
  init_esbuild_shims();
11479
- var import_react19 = __toESM(require_react(), 1);
11412
+ var import_react20 = __toESM(require_react(), 1);
11480
11413
  var debugLogger5 = createDebugLogger("PREFERRED_EDITOR");
11481
11414
  function usePreferredEditor() {
11482
11415
  const settings = useSettings();
11483
- return (0, import_react19.useMemo)(() => {
11416
+ return (0, import_react20.useMemo)(() => {
11484
11417
  const raw = settings.merged.general?.preferredEditor ?? "";
11485
11418
  if (raw && !isValidEditorType(raw)) {
11486
11419
  debugLogger5.warn(
@@ -11500,7 +11433,7 @@ function usePreferredEditor() {
11500
11433
  __name(usePreferredEditor, "usePreferredEditor");
11501
11434
 
11502
11435
  // packages/cli/src/ui/components/shared/TextInput.tsx
11503
- var import_react20 = __toESM(require_react(), 1);
11436
+ var import_react21 = __toESM(require_react(), 1);
11504
11437
 
11505
11438
  // packages/cli/src/ui/utils/software-cursor.ts
11506
11439
  init_esbuild_shims();
@@ -11598,12 +11531,12 @@ function TextInput({
11598
11531
  ellipsizeOverflow = false
11599
11532
  }) {
11600
11533
  const allowMultiline = height > 1;
11601
- const [cursorVisible, setCursorVisible] = (0, import_react20.useState)(isActive);
11602
- const onChangeRef = (0, import_react20.useRef)(onChange);
11603
- (0, import_react20.useEffect)(() => {
11534
+ const [cursorVisible, setCursorVisible] = (0, import_react21.useState)(isActive);
11535
+ const onChangeRef = (0, import_react21.useRef)(onChange);
11536
+ (0, import_react21.useEffect)(() => {
11604
11537
  onChangeRef.current = onChange;
11605
11538
  }, [onChange]);
11606
- const stableOnChange = (0, import_react20.useCallback)((text) => {
11539
+ const stableOnChange = (0, import_react21.useCallback)((text) => {
11607
11540
  onChangeRef.current?.(text);
11608
11541
  }, []);
11609
11542
  const preferredEditor = usePreferredEditor();
@@ -11618,7 +11551,7 @@ function TextInput({
11618
11551
  onChange: stableOnChange,
11619
11552
  preferredEditor
11620
11553
  });
11621
- (0, import_react20.useEffect)(() => {
11554
+ (0, import_react21.useEffect)(() => {
11622
11555
  if (!isActive) {
11623
11556
  setCursorVisible(false);
11624
11557
  return;
@@ -11751,13 +11684,13 @@ var AskUserQuestionDialog = /* @__PURE__ */ __name(({
11751
11684
  availableWidth,
11752
11685
  onConfirm
11753
11686
  }) => {
11754
- const [currentQuestionIndex, setCurrentQuestionIndex] = (0, import_react21.useState)(0);
11755
- const [selectedOptions, setSelectedOptions] = (0, import_react21.useState)({});
11756
- const [customInputValues, setCustomInputValues] = (0, import_react21.useState)({});
11757
- const customInputValuesRef = (0, import_react21.useRef)({});
11758
- const [selectedIndex, setSelectedIndex] = (0, import_react21.useState)(0);
11759
- const [multiSelectedOptions, setMultiSelectedOptions] = (0, import_react21.useState)({});
11760
- const [customInputChecked, setCustomInputChecked] = (0, import_react21.useState)({});
11687
+ const [currentQuestionIndex, setCurrentQuestionIndex] = (0, import_react22.useState)(0);
11688
+ const [selectedOptions, setSelectedOptions] = (0, import_react22.useState)({});
11689
+ const [customInputValues, setCustomInputValues] = (0, import_react22.useState)({});
11690
+ const customInputValuesRef = (0, import_react22.useRef)({});
11691
+ const [selectedIndex, setSelectedIndex] = (0, import_react22.useState)(0);
11692
+ const [multiSelectedOptions, setMultiSelectedOptions] = (0, import_react22.useState)({});
11693
+ const [customInputChecked, setCustomInputChecked] = (0, import_react22.useState)({});
11761
11694
  const hasMultipleQuestions = confirmationDetails.questions.length > 1;
11762
11695
  const totalTabs = hasMultipleQuestions ? confirmationDetails.questions.length + 1 : confirmationDetails.questions.length;
11763
11696
  const isSubmitTab = hasMultipleQuestions && currentQuestionIndex === totalTabs - 1;
@@ -12151,9 +12084,9 @@ var ToolConfirmationMessage = /* @__PURE__ */ __name(({
12151
12084
  const autoModeFallback = confirmationDetails.autoModeFallback;
12152
12085
  const settings = useSettings();
12153
12086
  const preferredEditor = settings.merged.general?.preferredEditor;
12154
- const [ideClient, setIdeClient] = (0, import_react22.useState)(null);
12155
- const [isDiffingEnabled, setIsDiffingEnabled] = (0, import_react22.useState)(false);
12156
- (0, import_react22.useEffect)(() => {
12087
+ const [ideClient, setIdeClient] = (0, import_react23.useState)(null);
12088
+ const [isDiffingEnabled, setIsDiffingEnabled] = (0, import_react23.useState)(false);
12089
+ (0, import_react23.useEffect)(() => {
12157
12090
  let isMounted = true;
12158
12091
  if (config.getIdeMode()) {
12159
12092
  const getIdeClient = /* @__PURE__ */ __name(async () => {
@@ -12183,7 +12116,7 @@ var ToolConfirmationMessage = /* @__PURE__ */ __name(({
12183
12116
  }, "handleConfirm");
12184
12117
  const isTrustedFolder = config.isTrustedFolder();
12185
12118
  const launchEditor = useLaunchEditor();
12186
- const [planViewError, setPlanViewError] = (0, import_react22.useState)(null);
12119
+ const [planViewError, setPlanViewError] = (0, import_react23.useState)(null);
12187
12120
  const openFullPlanInEditor = /* @__PURE__ */ __name(() => {
12188
12121
  if (confirmationDetails.type !== "plan") return;
12189
12122
  setPlanViewError(null);
@@ -12671,7 +12604,7 @@ var PlanSummaryDisplay = /* @__PURE__ */ __name(({
12671
12604
 
12672
12605
  // packages/cli/src/ui/components/ShellInputPrompt.tsx
12673
12606
  init_esbuild_shims();
12674
- var import_react23 = __toESM(require_react(), 1);
12607
+ var import_react24 = __toESM(require_react(), 1);
12675
12608
 
12676
12609
  // packages/cli/src/ui/hooks/keyToAnsi.ts
12677
12610
  init_esbuild_shims();
@@ -12734,7 +12667,7 @@ var ShellInputPrompt = /* @__PURE__ */ __name(({
12734
12667
  activeShellPtyId,
12735
12668
  focus = true
12736
12669
  }) => {
12737
- const handleShellInputSubmit = (0, import_react23.useCallback)(
12670
+ const handleShellInputSubmit = (0, import_react24.useCallback)(
12738
12671
  (input) => {
12739
12672
  if (activeShellPtyId) {
12740
12673
  ShellExecutionService.writeToPty(activeShellPtyId, input);
@@ -12742,7 +12675,7 @@ var ShellInputPrompt = /* @__PURE__ */ __name(({
12742
12675
  },
12743
12676
  [activeShellPtyId]
12744
12677
  );
12745
- const handleInput = (0, import_react23.useCallback)(
12678
+ const handleInput = (0, import_react24.useCallback)(
12746
12679
  (key) => {
12747
12680
  if (!focus || !activeShellPtyId) {
12748
12681
  return;
@@ -12801,42 +12734,43 @@ function sliceTextForMaxHeight(text, maxHeight, maxWidth) {
12801
12734
  let visualLineCount = 0;
12802
12735
  let currentLine = "";
12803
12736
  let currentLineWidth = 0;
12804
- const appendVisibleLine = /* @__PURE__ */ __name((line) => {
12737
+ const appendVisibleLine = /* @__PURE__ */ __name((line, breakAfter) => {
12805
12738
  visualLineCount += 1;
12806
- visibleLines.push(line);
12739
+ visibleLines.push({ text: line, breakAfter });
12807
12740
  if (visibleLines.length > visibleContentHeight) {
12808
12741
  visibleLines.shift();
12809
12742
  }
12810
12743
  }, "appendVisibleLine");
12811
- const flushCurrentLine = /* @__PURE__ */ __name(() => {
12812
- appendVisibleLine(currentLine);
12744
+ const flushCurrentLine = /* @__PURE__ */ __name((breakAfter) => {
12745
+ appendVisibleLine(currentLine, breakAfter);
12813
12746
  currentLine = "";
12814
12747
  currentLineWidth = 0;
12815
12748
  }, "flushCurrentLine");
12816
12749
  for (const char of toCodePoints(text)) {
12817
12750
  if (char === "\n") {
12818
- flushCurrentLine();
12751
+ flushCurrentLine({ kind: "hard", joiner: "\n" });
12819
12752
  continue;
12820
12753
  }
12821
12754
  const charWidth = Math.max(getCachedStringWidth(char), 1);
12822
12755
  if (currentLineWidth > 0 && currentLineWidth + charWidth > visualWidth) {
12823
- flushCurrentLine();
12756
+ flushCurrentLine({ kind: "soft", joiner: "" });
12824
12757
  }
12825
12758
  currentLine += char;
12826
12759
  currentLineWidth += charWidth;
12827
12760
  }
12828
- flushCurrentLine();
12761
+ flushCurrentLine(null);
12829
12762
  if (visualLineCount <= targetMaxHeight) {
12830
12763
  return { text, hiddenLinesCount: 0 };
12831
12764
  }
12832
12765
  const hiddenLinesCount = visualLineCount - visibleContentHeight;
12833
12766
  return {
12834
- text: visibleLines.join("\n"),
12835
- hiddenLinesCount
12767
+ text: visibleLines.map((line) => line.text).join("\n"),
12768
+ hiddenLinesCount,
12769
+ sourceBoundaries: visibleLines.slice(0, -1).map((line) => line.breakAfter ?? { kind: "hard", joiner: "\n" })
12836
12770
  };
12837
12771
  }
12838
12772
  __name(sliceTextForMaxHeight, "sliceTextForMaxHeight");
12839
- var useResultDisplayRenderer = /* @__PURE__ */ __name((resultDisplay) => import_react24.default.useMemo(() => {
12773
+ var useResultDisplayRenderer = /* @__PURE__ */ __name((resultDisplay) => import_react25.default.useMemo(() => {
12840
12774
  if (!resultDisplay) {
12841
12775
  return { type: "none" };
12842
12776
  }
@@ -12908,7 +12842,7 @@ var SubagentApprovalContext = /* @__PURE__ */ __name(({ data }) => {
12908
12842
  const priorCalls = priorApprovalCalls(data);
12909
12843
  if (priorCalls.length === 0) return null;
12910
12844
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Box_default, { flexDirection: "column", children: priorCalls.map((call) => {
12911
- const glyph = call.status === "failed" ? "\u2716" : call.status === "success" ? "\u2714" : "\u25CB";
12845
+ const glyph = call.status === "failed" ? "\u2716" : call.status === "success" ? "\u2714" : ICON.CIRCLE_EMPTY;
12912
12846
  const displayName = localizeToolDisplayName(
12913
12847
  TOOL_DISPLAY_BY_NAME[call.name] ?? call.name
12914
12848
  );
@@ -13032,6 +12966,7 @@ var StringResultRenderer = /* @__PURE__ */ __name(({ data, renderAsMarkdown, ava
13032
12966
  maxHeight: availableHeight,
13033
12967
  maxWidth: childWidth,
13034
12968
  additionalHiddenLinesCount: sliced.hiddenLinesCount,
12969
+ sourceBoundaries: sliced.sourceBoundaries,
13035
12970
  children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Text, { wrap: "wrap", color: theme.text.primary, children: sliced.text }) })
13036
12971
  }
13037
12972
  );
@@ -13077,21 +13012,21 @@ var ToolMessage = /* @__PURE__ */ __name(({
13077
13012
  }) => {
13078
13013
  const settings = useSettings();
13079
13014
  const isThisShellFocused = (name === SHELL_COMMAND_NAME || name === SHELL_NAME) && status === "Executing" /* Executing */ && ptyId === activeShellPtyId && embeddedShellFocused;
13080
- const [lastUpdateTime, setLastUpdateTime] = import_react24.default.useState(null);
13081
- const [userHasFocused, setUserHasFocused] = import_react24.default.useState(false);
13082
- const [showFocusHint, setShowFocusHint] = import_react24.default.useState(false);
13083
- import_react24.default.useEffect(() => {
13015
+ const [lastUpdateTime, setLastUpdateTime] = import_react25.default.useState(null);
13016
+ const [userHasFocused, setUserHasFocused] = import_react25.default.useState(false);
13017
+ const [showFocusHint, setShowFocusHint] = import_react25.default.useState(false);
13018
+ import_react25.default.useEffect(() => {
13084
13019
  if (resultDisplay) {
13085
13020
  setLastUpdateTime(/* @__PURE__ */ new Date());
13086
13021
  }
13087
13022
  }, [resultDisplay]);
13088
- const shellTimeoutMs = import_react24.default.useMemo(() => {
13023
+ const shellTimeoutMs = import_react25.default.useMemo(() => {
13089
13024
  if (typeof resultDisplay === "object" && resultDisplay !== null && "ansiOutput" in resultDisplay) {
13090
13025
  return resultDisplay.timeoutMs;
13091
13026
  }
13092
13027
  return void 0;
13093
13028
  }, [resultDisplay]);
13094
- import_react24.default.useEffect(() => {
13029
+ import_react25.default.useEffect(() => {
13095
13030
  if (!lastUpdateTime) {
13096
13031
  return;
13097
13032
  }
@@ -13100,7 +13035,7 @@ var ToolMessage = /* @__PURE__ */ __name(({
13100
13035
  }, 5e3);
13101
13036
  return () => clearTimeout(timer);
13102
13037
  }, [lastUpdateTime]);
13103
- import_react24.default.useEffect(() => {
13038
+ import_react25.default.useEffect(() => {
13104
13039
  if (isThisShellFocused) {
13105
13040
  setUserHasFocused(true);
13106
13041
  }
@@ -13123,7 +13058,7 @@ var ToolMessage = /* @__PURE__ */ __name(({
13123
13058
  renderOutputAsMarkdown = false;
13124
13059
  }
13125
13060
  const usingDetailedDisplay = fullDetail && isCollapsibleTool(name) && typeof detailedDisplay === "string" && detailedDisplay.length > 0;
13126
- const sanitizedDetailedDisplay = import_react24.default.useMemo(
13061
+ const sanitizedDetailedDisplay = import_react25.default.useMemo(
13127
13062
  () => usingDetailedDisplay && typeof detailedDisplay === "string" ? sanitizeTerminalText(detailedDisplay) : detailedDisplay,
13128
13063
  [detailedDisplay, usingDetailedDisplay]
13129
13064
  );
@@ -13139,7 +13074,7 @@ var ToolMessage = /* @__PURE__ */ __name(({
13139
13074
  effectiveResultDisplay
13140
13075
  );
13141
13076
  const shouldCollapseResult = !forceShowResult && status === "Success" /* Success */ && isCollapsibleTool(name) && (effectiveDisplayRenderer.type === "string" || effectiveDisplayRenderer.type === "ansi");
13142
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(Box_default, { paddingX: 1, paddingY: 0, flexDirection: "column", children: [
13077
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(Box_default, { paddingY: 0, flexDirection: "column", children: [
13143
13078
  /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(Box_default, { minHeight: 1, children: [
13144
13079
  /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ToolStatusIndicator, { status, name }),
13145
13080
  /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
@@ -13242,7 +13177,7 @@ var ToolInfo = /* @__PURE__ */ __name(({
13242
13177
  status,
13243
13178
  emphasis
13244
13179
  }) => {
13245
- const nameColor = import_react24.default.useMemo(() => {
13180
+ const nameColor = import_react25.default.useMemo(() => {
13246
13181
  switch (emphasis) {
13247
13182
  case "high":
13248
13183
  return theme.text.primary;
@@ -13269,7 +13204,7 @@ var TrailingIndicator = /* @__PURE__ */ __name(() => /* @__PURE__ */ (0, import_
13269
13204
 
13270
13205
  // packages/cli/src/ui/components/messages/InlineParallelAgentsDisplay.tsx
13271
13206
  init_esbuild_shims();
13272
- var import_react25 = __toESM(require_react(), 1);
13207
+ var import_react26 = __toESM(require_react(), 1);
13273
13208
  var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1);
13274
13209
  function deriveAgentId(toolCall, resultDisplay) {
13275
13210
  return `${resultDisplay.subagentName}-${toolCall.callId}`;
@@ -13293,7 +13228,7 @@ function statusGlyph(status) {
13293
13228
  switch (status) {
13294
13229
  case "running":
13295
13230
  case "background":
13296
- return { glyph: "\u25CB", color: theme.status.warning };
13231
+ return { glyph: ICON.CIRCLE_EMPTY, color: theme.status.warning };
13297
13232
  case "completed":
13298
13233
  return { glyph: "\u2714", color: theme.status.success };
13299
13234
  case "failed":
@@ -13330,8 +13265,8 @@ function truncateMiddle(input, max) {
13330
13265
  }
13331
13266
  __name(truncateMiddle, "truncateMiddle");
13332
13267
  var InlineParallelAgentsDisplay = /* @__PURE__ */ __name(({ toolCalls, contentWidth, totalAgentCount, availableTerminalHeight }) => {
13333
- const config = (0, import_react25.useContext)(ConfigContext);
13334
- const agentEntries = (0, import_react25.useMemo)(() => {
13268
+ const config = (0, import_react26.useContext)(ConfigContext);
13269
+ const agentEntries = (0, import_react26.useMemo)(() => {
13335
13270
  const out = [];
13336
13271
  for (const tc of toolCalls) {
13337
13272
  if (isAgentResult(tc.resultDisplay)) {
@@ -13340,19 +13275,19 @@ var InlineParallelAgentsDisplay = /* @__PURE__ */ __name(({ toolCalls, contentWi
13340
13275
  }
13341
13276
  return out;
13342
13277
  }, [toolCalls]);
13343
- const [now, setNow] = (0, import_react25.useState)(() => Date.now());
13344
- const hasLiveAgent = (0, import_react25.useMemo)(
13278
+ const [now, setNow] = (0, import_react26.useState)(() => Date.now());
13279
+ const hasLiveAgent = (0, import_react26.useMemo)(
13345
13280
  () => agentEntries.some(
13346
13281
  (e) => e.result.status === "running" || e.result.status === "background"
13347
13282
  ),
13348
13283
  [agentEntries]
13349
13284
  );
13350
- (0, import_react25.useEffect)(() => {
13285
+ (0, import_react26.useEffect)(() => {
13351
13286
  if (!hasLiveAgent) return;
13352
13287
  const id = setInterval(() => setNow(Date.now()), 1e3);
13353
13288
  return () => clearInterval(id);
13354
13289
  }, [hasLiveAgent]);
13355
- const rows = (0, import_react25.useMemo)(() => {
13290
+ const rows = (0, import_react26.useMemo)(() => {
13356
13291
  const registry = config?.getBackgroundTaskRegistry();
13357
13292
  void now;
13358
13293
  return agentEntries.map(({ toolCall, result }) => {
@@ -13472,27 +13407,27 @@ var ToolGroupMessage = /* @__PURE__ */ __name(({
13472
13407
  const isEmbeddedShellFocused = embeddedShellFocused && toolCalls.some(
13473
13408
  (t2) => t2.ptyId === activeShellPtyId && t2.status === "Executing" /* Executing */
13474
13409
  );
13475
- const toolAwaitingApproval = (0, import_react26.useMemo)(
13410
+ const toolAwaitingApproval = (0, import_react27.useMemo)(
13476
13411
  () => toolCalls.find((tc) => tc.status === "Confirming" /* Confirming */),
13477
13412
  [toolCalls]
13478
13413
  );
13479
- const isMemoryOnlyGroup = (0, import_react26.useMemo)(
13414
+ const isMemoryOnlyGroup = (0, import_react27.useMemo)(
13480
13415
  () => toolCalls.length > 0 && toolCalls.every((t2) => t2.isMemoryOp != null),
13481
13416
  [toolCalls]
13482
13417
  );
13483
- const inlineToolCalls = (0, import_react26.useMemo)(
13418
+ const inlineToolCalls = (0, import_react27.useMemo)(
13484
13419
  () => isPending ? toolCalls.filter(
13485
13420
  (tool) => !isPanelOwnedSubagentTool(tool) || isAgentWithPendingConfirmation(tool.resultDisplay)
13486
13421
  ) : toolCalls,
13487
13422
  [isPending, toolCalls]
13488
13423
  );
13489
- const subagentsAwaitingApproval = (0, import_react26.useMemo)(
13424
+ const subagentsAwaitingApproval = (0, import_react27.useMemo)(
13490
13425
  () => toolCalls.filter(
13491
13426
  (tc) => isAgentWithPendingConfirmation(tc.resultDisplay)
13492
13427
  ),
13493
13428
  [toolCalls]
13494
13429
  );
13495
- const focusedSubagentRef = (0, import_react26.useRef)(null);
13430
+ const focusedSubagentRef = (0, import_react27.useRef)(null);
13496
13431
  const stillPending = subagentsAwaitingApproval.some(
13497
13432
  (tc) => tc.callId === focusedSubagentRef.current
13498
13433
  );
@@ -13500,7 +13435,7 @@ var ToolGroupMessage = /* @__PURE__ */ __name(({
13500
13435
  focusedSubagentRef.current = subagentsAwaitingApproval[0]?.callId ?? null;
13501
13436
  }
13502
13437
  const focusedSubagentCallId = focusedSubagentRef.current;
13503
- const runningSubagentCallId = (0, import_react26.useMemo)(
13438
+ const runningSubagentCallId = (0, import_react27.useMemo)(
13504
13439
  () => toolCalls.find((tc) => isRunningAgent(tc.resultDisplay))?.callId ?? null,
13505
13440
  [toolCalls]
13506
13441
  );
@@ -13529,14 +13464,14 @@ var ToolGroupMessage = /* @__PURE__ */ __name(({
13529
13464
  const writeCount = memoryWriteCount ?? 0;
13530
13465
  return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(Box_default, { flexDirection: "column", width: contentWidth, children: [
13531
13466
  readCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Box_default, { paddingLeft: 1, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(Text, { dimColor: true, children: [
13532
- "\u25CF ",
13467
+ ICON.CIRCLE_FILLED + " ",
13533
13468
  "Recalled ",
13534
13469
  readCount,
13535
13470
  " ",
13536
13471
  readCount === 1 ? "memory" : "memories"
13537
13472
  ] }) }),
13538
13473
  writeCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Box_default, { paddingLeft: 1, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(Text, { dimColor: true, children: [
13539
- "\u25CF ",
13474
+ ICON.CIRCLE_FILLED + " ",
13540
13475
  "Wrote ",
13541
13476
  writeCount,
13542
13477
  " ",
@@ -13554,7 +13489,7 @@ var ToolGroupMessage = /* @__PURE__ */ __name(({
13554
13489
  );
13555
13490
  const hasMemoryBadge = !isMemoryOnlyGroup && ((memoryWriteCount ?? 0) > 0 || (memoryReadCount ?? 0) > 0);
13556
13491
  const memoryBadge = hasMemoryBadge ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Box_default, { paddingLeft: 1, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(Text, { dimColor: true, children: [
13557
- "\u25CF ",
13492
+ ICON.CIRCLE_FILLED + " ",
13558
13493
  [
13559
13494
  (memoryReadCount ?? 0) > 0 && `Recalled ${memoryReadCount} ${memoryReadCount === 1 ? "memory" : "memories"}`,
13560
13495
  (memoryWriteCount ?? 0) > 0 && `Wrote ${memoryWriteCount} ${memoryWriteCount === 1 ? "memory" : "memories"}`
@@ -13581,7 +13516,7 @@ var ToolGroupMessage = /* @__PURE__ */ __name(({
13581
13516
  /* marginBottom */
13582
13517
  1 + collapsibleSummaryHeight + memoryBadgeHeight
13583
13518
  );
13584
- const innerWidth = contentWidth - 2;
13519
+ const confirmationInnerWidth = contentWidth - 2;
13585
13520
  let countToolCallsWithResults = 0;
13586
13521
  for (const tool of nonCollapsibleTools) {
13587
13522
  if (tool.resultDisplay !== void 0 && tool.resultDisplay !== "") {
@@ -13613,7 +13548,7 @@ var ToolGroupMessage = /* @__PURE__ */ __name(({
13613
13548
  {
13614
13549
  ...tool,
13615
13550
  availableTerminalHeight: availableTerminalHeightPerToolMessage,
13616
- contentWidth: innerWidth,
13551
+ contentWidth,
13617
13552
  emphasis: isConfirming ? "high" : toolAwaitingApproval ? "low" : "medium",
13618
13553
  activeShellPtyId,
13619
13554
  embeddedShellFocused,
@@ -13631,7 +13566,7 @@ var ToolGroupMessage = /* @__PURE__ */ __name(({
13631
13566
  config,
13632
13567
  isFocused,
13633
13568
  availableTerminalHeight: availableTerminalHeightPerToolMessage,
13634
- contentWidth: innerWidth
13569
+ contentWidth: confirmationInnerWidth
13635
13570
  }
13636
13571
  )
13637
13572
  ] }, tool.callId);
@@ -13680,8 +13615,8 @@ function CompressionMessage({
13680
13615
  }, "getCompressionText");
13681
13616
  const text = getCompressionText();
13682
13617
  return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(Box_default, { flexDirection: "row", children: [
13683
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Box_default, { marginRight: 1, children: isPending ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(build_default, { type: "dots" }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Text, { color: theme.text.accent, children: "\u25C6" }) }),
13684
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
13618
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Box_default, { width: 2, flexShrink: 0, children: isPending ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(build_default, { type: "dots" }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Text, { color: theme.text.accent, children: ICON.DIAMOND }) }),
13619
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
13685
13620
  Text,
13686
13621
  {
13687
13622
  color: compression.isPending ? theme.text.accent : theme.status.success,
@@ -13723,8 +13658,8 @@ var SummaryMessage = /* @__PURE__ */ __name(({ summary }) => {
13723
13658
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Text, { color: Colors.AccentGreen, children: "\u2713" });
13724
13659
  }, "getIcon");
13725
13660
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Box_default, { flexDirection: "row", children: [
13726
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Box_default, { marginRight: 1, children: getIcon() }),
13727
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
13661
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Box_default, { width: 2, flexShrink: 0, children: getIcon() }),
13662
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
13728
13663
  Text,
13729
13664
  {
13730
13665
  color: summary.isPending ? Colors.AccentPurple : Colors.AccentGreen,
@@ -13739,7 +13674,7 @@ init_esbuild_shims();
13739
13674
 
13740
13675
  // node_modules/ink-link/dist/index.js
13741
13676
  init_esbuild_shims();
13742
- var import_react27 = __toESM(require_react(), 1);
13677
+ var import_react28 = __toESM(require_react(), 1);
13743
13678
  var import_prop_types = __toESM(require_prop_types(), 1);
13744
13679
 
13745
13680
  // node_modules/ink-link/node_modules/terminal-link/index.js
@@ -13887,10 +13822,10 @@ terminalLink.stderr.isSupported = import_supports_hyperlinks.default.stderr;
13887
13822
  // node_modules/ink-link/dist/index.js
13888
13823
  var Link = /* @__PURE__ */ __name(({ children, url, fallback = true }) => (
13889
13824
  // eslint-disable-line react/function-component-definition
13890
- import_react27.default.createElement(
13825
+ import_react28.default.createElement(
13891
13826
  Transform,
13892
13827
  { transform: /* @__PURE__ */ __name((children2) => terminalLink(children2, url, { fallback }), "transform") },
13893
- import_react27.default.createElement(Text, null, children)
13828
+ import_react28.default.createElement(Text, null, children)
13894
13829
  )
13895
13830
  ), "Link");
13896
13831
  Link.propTypes = {
@@ -13937,7 +13872,7 @@ var InfoMessage = /* @__PURE__ */ __name(({
13937
13872
  StatusMessage,
13938
13873
  {
13939
13874
  text,
13940
- prefix: "\u25CF",
13875
+ prefix: ICON.CIRCLE_FILLED,
13941
13876
  prefixColor: theme.text.primary,
13942
13877
  textColor: theme.text.primary,
13943
13878
  footer: linkUrl && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(dist_default, { url: linkUrl, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Text, { color: theme.text.link, underline: true, children: linkText ?? linkUrl }) })
@@ -13956,7 +13891,7 @@ var WarningMessage = /* @__PURE__ */ __name(({ text }) => /* @__PURE__ */ (0, im
13956
13891
  StatusMessage,
13957
13892
  {
13958
13893
  text,
13959
- prefix: "\u25B3",
13894
+ prefix: ICON.TRIANGLE,
13960
13895
  prefixColor: theme.status.warning,
13961
13896
  textColor: theme.status.warning
13962
13897
  }
@@ -13991,13 +13926,13 @@ var VisionNoticeMessage = /* @__PURE__ */ __name(({ text }) => /* @__PURE__ */ (
13991
13926
  StatusMessage,
13992
13927
  {
13993
13928
  text,
13994
- prefix: "\u25CE",
13929
+ prefix: ICON.BULLSEYE,
13995
13930
  prefixColor: theme.text.secondary,
13996
13931
  textColor: theme.text.secondary
13997
13932
  }
13998
13933
  ), "VisionNoticeMessage");
13999
13934
  var AwayRecapMessage = /* @__PURE__ */ __name(({ text }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Box_default, { flexDirection: "row", children: [
14000
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Box_default, { width: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Text, { color: theme.text.secondary, children: "\u203B" }) }),
13935
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Box_default, { width: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Text, { color: theme.text.secondary, children: ICON.REFERENCE }) }),
14001
13936
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Text, { wrap: "wrap", children: [
14002
13937
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Text, { color: theme.text.secondary, bold: true, children: [
14003
13938
  "recap:",
@@ -14044,7 +13979,7 @@ init_esbuild_shims();
14044
13979
 
14045
13980
  // node_modules/ink-gradient/dist/index.js
14046
13981
  init_esbuild_shims();
14047
- var import_react28 = __toESM(require_react(), 1);
13982
+ var import_react29 = __toESM(require_react(), 1);
14048
13983
  var import_prop_types2 = __toESM(require_prop_types(), 1);
14049
13984
  var import_gradient_string = __toESM(require_gradient_string(), 1);
14050
13985
  var Gradient = /* @__PURE__ */ __name((props) => {
@@ -14060,7 +13995,7 @@ var Gradient = /* @__PURE__ */ __name((props) => {
14060
13995
  throw new Error("Either `name` or `colors` prop must be provided");
14061
13996
  }
14062
13997
  const applyGradient = /* @__PURE__ */ __name((text) => gradient.multiline(stripAnsi(text)), "applyGradient");
14063
- return import_react28.default.createElement(Transform, { transform: applyGradient }, props.children);
13998
+ return import_react29.default.createElement(Transform, { transform: applyGradient }, props.children);
14064
13999
  }, "Gradient");
14065
14000
  Gradient.propTypes = {
14066
14001
  children: import_prop_types2.default.oneOfType([
@@ -14860,7 +14795,7 @@ var SessionSummaryDisplay = /* @__PURE__ */ __name(({
14860
14795
 
14861
14796
  // packages/cli/src/ui/components/Help.tsx
14862
14797
  init_esbuild_shims();
14863
- var import_react29 = __toESM(require_react(), 1);
14798
+ var import_react30 = __toESM(require_react(), 1);
14864
14799
  var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1);
14865
14800
  var DEFAULT_WIDTH = 100;
14866
14801
  var KEY_COL_WIDTH = 20;
@@ -14881,7 +14816,7 @@ var Help = /* @__PURE__ */ __name(({
14881
14816
  }) => {
14882
14817
  const safeWidth = Math.max(72, width);
14883
14818
  const bodyWidth = safeWidth - 6;
14884
- const handleTabChange = (0, import_react29.useCallback)(
14819
+ const handleTabChange = (0, import_react30.useCallback)(
14885
14820
  (direction) => {
14886
14821
  const currentIndex = TAB_DEFS.findIndex((tab) => tab.tab === activeTab);
14887
14822
  const nextIndex = (currentIndex + direction + TAB_DEFS.length) % TAB_DEFS.length;
@@ -15019,20 +14954,20 @@ var ShortcutRow = /* @__PURE__ */ __name(({ shortcutKey, desc, width }) => /* @_
15019
14954
  /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text, { color: theme.text.primary, wrap: "truncate", children: truncateText2(desc, width - KEY_COL_WIDTH - 1) })
15020
14955
  ] }), "ShortcutRow");
15021
14956
  var CommandsHelp = /* @__PURE__ */ __name(({ commands, width, customOnly, isInteractive }) => {
15022
- const groups = (0, import_react29.useMemo)(
14957
+ const groups = (0, import_react30.useMemo)(
15023
14958
  () => groupCommands(commands, customOnly),
15024
14959
  [commands, customOnly]
15025
14960
  );
15026
- const lines = (0, import_react29.useMemo)(
14961
+ const lines = (0, import_react30.useMemo)(
15027
14962
  () => renderCommandLines(groups, width),
15028
14963
  [groups, width]
15029
14964
  );
15030
14965
  const maxScroll = Math.max(0, lines.length - COMMAND_LIST_VISIBLE_LINES);
15031
- const [scrollOffset, setScrollOffset] = (0, import_react29.useState)(0);
15032
- (0, import_react29.useEffect)(() => {
14966
+ const [scrollOffset, setScrollOffset] = (0, import_react30.useState)(0);
14967
+ (0, import_react30.useEffect)(() => {
15033
14968
  setScrollOffset(0);
15034
14969
  }, [customOnly, commands]);
15035
- (0, import_react29.useEffect)(() => {
14970
+ (0, import_react30.useEffect)(() => {
15036
14971
  setScrollOffset((offset) => Math.min(offset, maxScroll));
15037
14972
  }, [maxScroll]);
15038
14973
  useKeypress(
@@ -15220,26 +15155,26 @@ init_esbuild_shims();
15220
15155
 
15221
15156
  // packages/cli/src/ui/contexts/UIStateContext.tsx
15222
15157
  init_esbuild_shims();
15223
- var import_react36 = __toESM(require_react(), 1);
15158
+ var import_react37 = __toESM(require_react(), 1);
15224
15159
 
15225
15160
  // packages/cli/src/ui/hooks/useHistoryManager.ts
15226
15161
  init_esbuild_shims();
15227
- var import_react30 = __toESM(require_react(), 1);
15162
+ var import_react31 = __toESM(require_react(), 1);
15228
15163
  import process2 from "node:process";
15229
15164
  var debugLogger6 = createDebugLogger("HISTORY_MANAGER");
15230
15165
  var UI_COMPACT_CLEARED_MESSAGE = "[Old tool result content cleared]";
15231
15166
  var UI_COMPACT_KEEP_RECENT = 20;
15232
15167
  function useHistory() {
15233
- const [history, setHistory] = (0, import_react30.useState)([]);
15234
- const messageIdCounterRef = (0, import_react30.useRef)(0);
15235
- const getNextMessageId = (0, import_react30.useCallback)((baseTimestamp) => {
15168
+ const [history, setHistory] = (0, import_react31.useState)([]);
15169
+ const messageIdCounterRef = (0, import_react31.useRef)(0);
15170
+ const getNextMessageId = (0, import_react31.useCallback)((baseTimestamp) => {
15236
15171
  messageIdCounterRef.current += 1;
15237
15172
  return baseTimestamp + messageIdCounterRef.current;
15238
15173
  }, []);
15239
- const loadHistory = (0, import_react30.useCallback)((newHistory) => {
15174
+ const loadHistory = (0, import_react31.useCallback)((newHistory) => {
15240
15175
  setHistory(newHistory);
15241
15176
  }, []);
15242
- const addItem = (0, import_react30.useCallback)(
15177
+ const addItem = (0, import_react31.useCallback)(
15243
15178
  (itemData, baseTimestamp) => {
15244
15179
  const id = getNextMessageId(baseTimestamp);
15245
15180
  const newItem = { ...itemData, id };
@@ -15263,7 +15198,7 @@ function useHistory() {
15263
15198
  },
15264
15199
  [getNextMessageId]
15265
15200
  );
15266
- const updateItem = (0, import_react30.useCallback)(
15201
+ const updateItem = (0, import_react31.useCallback)(
15267
15202
  (id, updates) => {
15268
15203
  setHistory((prevHistory) => {
15269
15204
  let updated = false;
@@ -15286,7 +15221,7 @@ function useHistory() {
15286
15221
  },
15287
15222
  []
15288
15223
  );
15289
- const clearItems = (0, import_react30.useCallback)(() => {
15224
+ const clearItems = (0, import_react31.useCallback)(() => {
15290
15225
  if (debugLogger6.isEnabled()) {
15291
15226
  debugLogger6.debug(
15292
15227
  `[CLEAR_HISTORY] Clearing history, memory before=${(process2.memoryUsage().heapUsed / 1024 / 1024).toFixed(1)}MB`
@@ -15295,13 +15230,13 @@ function useHistory() {
15295
15230
  setHistory([]);
15296
15231
  messageIdCounterRef.current = 0;
15297
15232
  }, []);
15298
- const truncateToItem = (0, import_react30.useCallback)((itemId) => {
15233
+ const truncateToItem = (0, import_react31.useCallback)((itemId) => {
15299
15234
  setHistory((prev) => {
15300
15235
  const index = prev.findIndex((h) => h.id === itemId);
15301
15236
  return index === -1 ? prev : prev.slice(0, index);
15302
15237
  });
15303
15238
  }, []);
15304
- const compactOldItems = (0, import_react30.useCallback)(() => {
15239
+ const compactOldItems = (0, import_react31.useCallback)(() => {
15305
15240
  setHistory((prev) => {
15306
15241
  if (prev.length === 0) return prev;
15307
15242
  let thoughtRemoved = 0;
@@ -15369,7 +15304,7 @@ function useHistory() {
15369
15304
  return thoughtRemoved > 0 || toolGroupsCompacted > 0 ? next : prev;
15370
15305
  });
15371
15306
  }, []);
15372
- return (0, import_react30.useMemo)(
15307
+ return (0, import_react31.useMemo)(
15373
15308
  () => ({
15374
15309
  history,
15375
15310
  addItem,
@@ -15394,7 +15329,7 @@ __name(useHistory, "useHistory");
15394
15329
 
15395
15330
  // packages/cli/src/ui/contexts/UIActionsContext.tsx
15396
15331
  init_esbuild_shims();
15397
- var import_react33 = __toESM(require_react(), 1);
15332
+ var import_react34 = __toESM(require_react(), 1);
15398
15333
 
15399
15334
  // packages/cli/src/ui/IdeIntegrationNudge.tsx
15400
15335
  init_esbuild_shims();
@@ -15536,7 +15471,7 @@ __name(CommandFormatMigrationNudge, "CommandFormatMigrationNudge");
15536
15471
 
15537
15472
  // packages/cli/src/ui/components/FolderTrustDialog.tsx
15538
15473
  init_esbuild_shims();
15539
- var import_react31 = __toESM(require_react(), 1);
15474
+ var import_react32 = __toESM(require_react(), 1);
15540
15475
  import * as process3 from "node:process";
15541
15476
  import * as path3 from "node:path";
15542
15477
  var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1);
@@ -15544,7 +15479,7 @@ var FolderTrustDialog = /* @__PURE__ */ __name(({
15544
15479
  onSelect,
15545
15480
  isRestarting
15546
15481
  }) => {
15547
- (0, import_react31.useEffect)(() => {
15482
+ (0, import_react32.useEffect)(() => {
15548
15483
  const doRelaunch = /* @__PURE__ */ __name(async () => {
15549
15484
  if (isRestarting) {
15550
15485
  setTimeout(async () => {
@@ -15672,16 +15607,16 @@ var MCPServerApprovalDialog = /* @__PURE__ */ __name(({ serverName, summary, sou
15672
15607
 
15673
15608
  // packages/cli/src/ui/hooks/useArenaCommand.ts
15674
15609
  init_esbuild_shims();
15675
- var import_react32 = __toESM(require_react(), 1);
15610
+ var import_react33 = __toESM(require_react(), 1);
15676
15611
  function useArenaCommand() {
15677
- const [activeArenaDialog, setActiveArenaDialog] = (0, import_react32.useState)(null);
15678
- const openArenaDialog = (0, import_react32.useCallback)(
15612
+ const [activeArenaDialog, setActiveArenaDialog] = (0, import_react33.useState)(null);
15613
+ const openArenaDialog = (0, import_react33.useCallback)(
15679
15614
  (type) => {
15680
15615
  setActiveArenaDialog(type);
15681
15616
  },
15682
15617
  []
15683
15618
  );
15684
- const closeArenaDialog = (0, import_react32.useCallback)(() => {
15619
+ const closeArenaDialog = (0, import_react33.useCallback)(() => {
15685
15620
  setActiveArenaDialog(null);
15686
15621
  }, []);
15687
15622
  return {
@@ -15693,9 +15628,9 @@ function useArenaCommand() {
15693
15628
  __name(useArenaCommand, "useArenaCommand");
15694
15629
 
15695
15630
  // packages/cli/src/ui/contexts/UIActionsContext.tsx
15696
- var UIActionsContext = (0, import_react33.createContext)(null);
15631
+ var UIActionsContext = (0, import_react34.createContext)(null);
15697
15632
  var useUIActions = /* @__PURE__ */ __name(() => {
15698
- const context = (0, import_react33.useContext)(UIActionsContext);
15633
+ const context = (0, import_react34.useContext)(UIActionsContext);
15699
15634
  if (!context) {
15700
15635
  throw new Error("useUIActions must be used within a UIActionsProvider");
15701
15636
  }
@@ -15704,16 +15639,16 @@ var useUIActions = /* @__PURE__ */ __name(() => {
15704
15639
 
15705
15640
  // packages/cli/src/ui/hooks/useIdeTrustListener.ts
15706
15641
  init_esbuild_shims();
15707
- var import_react34 = __toESM(require_react(), 1);
15642
+ var import_react35 = __toESM(require_react(), 1);
15708
15643
  function useIdeTrustListener() {
15709
15644
  const settings = useSettings();
15710
- const [connectionStatus, setConnectionStatus] = (0, import_react34.useState)(
15645
+ const [connectionStatus, setConnectionStatus] = (0, import_react35.useState)(
15711
15646
  "disconnected" /* Disconnected */
15712
15647
  );
15713
- const previousTrust = (0, import_react34.useRef)(void 0);
15714
- const [restartReason, setRestartReason] = (0, import_react34.useState)("NONE");
15715
- const [needsRestart, setNeedsRestart] = (0, import_react34.useState)(false);
15716
- const subscribe2 = (0, import_react34.useCallback)((onStoreChange) => {
15648
+ const previousTrust = (0, import_react35.useRef)(void 0);
15649
+ const [restartReason, setRestartReason] = (0, import_react35.useState)("NONE");
15650
+ const [needsRestart, setNeedsRestart] = (0, import_react35.useState)(false);
15651
+ const subscribe2 = (0, import_react35.useCallback)((onStoreChange) => {
15717
15652
  const handleStatusChange = /* @__PURE__ */ __name((state) => {
15718
15653
  setConnectionStatus(state.status);
15719
15654
  setRestartReason("CONNECTION_CHANGE");
@@ -15743,8 +15678,8 @@ function useIdeTrustListener() {
15743
15678
  }
15744
15679
  return ideContextStore.get()?.workspaceState?.isTrusted;
15745
15680
  }, "getSnapshot");
15746
- const isIdeTrusted = (0, import_react34.useSyncExternalStore)(subscribe2, getSnapshot);
15747
- (0, import_react34.useEffect)(() => {
15681
+ const isIdeTrusted = (0, import_react35.useSyncExternalStore)(subscribe2, getSnapshot);
15682
+ (0, import_react35.useEffect)(() => {
15748
15683
  const currentTrust = isWorkspaceTrusted(settings.merged).isTrusted;
15749
15684
  if (previousTrust.current !== void 0 && previousTrust.current !== currentTrust) {
15750
15685
  setNeedsRestart(true);
@@ -15757,7 +15692,7 @@ __name(useIdeTrustListener, "useIdeTrustListener");
15757
15692
 
15758
15693
  // packages/cli/src/ui/hooks/useProviderUpdates.ts
15759
15694
  init_esbuild_shims();
15760
- var import_react35 = __toESM(require_react(), 1);
15695
+ var import_react36 = __toESM(require_react(), 1);
15761
15696
  function getProviderMetadata(settings, metadataKey) {
15762
15697
  const mergedSettings = settings.merged;
15763
15698
  const ns = mergedSettings[PROVIDER_METADATA_NS];
@@ -15856,9 +15791,9 @@ function findAllPendingUpdates(settings, currentModel) {
15856
15791
  }
15857
15792
  __name(findAllPendingUpdates, "findAllPendingUpdates");
15858
15793
  function useProviderUpdates(settings, config, addItem) {
15859
- const [updateRequest, setUpdateRequest] = (0, import_react35.useState)();
15860
- const migrated = (0, import_react35.useRef)(false);
15861
- const executeUpdate = (0, import_react35.useCallback)(
15794
+ const [updateRequest, setUpdateRequest] = (0, import_react36.useState)();
15795
+ const migrated = (0, import_react36.useRef)(false);
15796
+ const executeUpdate = (0, import_react36.useCallback)(
15862
15797
  async (providerCfg, baseUrl) => {
15863
15798
  try {
15864
15799
  const resolved = resolveBaseUrl(providerCfg, baseUrl);
@@ -15945,7 +15880,7 @@ function useProviderUpdates(settings, config, addItem) {
15945
15880
  },
15946
15881
  [settings, config, addItem]
15947
15882
  );
15948
- const checkForUpdates = (0, import_react35.useCallback)(() => {
15883
+ const checkForUpdates = (0, import_react36.useCallback)(() => {
15949
15884
  if (!migrated.current) {
15950
15885
  migrated.current = true;
15951
15886
  migrateProviderMetadata(settings);
@@ -15978,10 +15913,10 @@ function useProviderUpdates(settings, config, addItem) {
15978
15913
  }, "onConfirm")
15979
15914
  });
15980
15915
  }, [settings, config, executeUpdate]);
15981
- (0, import_react35.useEffect)(() => {
15916
+ (0, import_react36.useEffect)(() => {
15982
15917
  checkForUpdates();
15983
15918
  }, [checkForUpdates]);
15984
- const dismissProviderUpdate = (0, import_react35.useCallback)(() => {
15919
+ const dismissProviderUpdate = (0, import_react36.useCallback)(() => {
15985
15920
  setUpdateRequest(void 0);
15986
15921
  }, []);
15987
15922
  return {
@@ -15992,9 +15927,9 @@ function useProviderUpdates(settings, config, addItem) {
15992
15927
  __name(useProviderUpdates, "useProviderUpdates");
15993
15928
 
15994
15929
  // packages/cli/src/ui/contexts/UIStateContext.tsx
15995
- var UIStateContext = (0, import_react36.createContext)(null);
15930
+ var UIStateContext = (0, import_react37.createContext)(null);
15996
15931
  var useUIState = /* @__PURE__ */ __name(() => {
15997
- const context = (0, import_react36.useContext)(UIStateContext);
15932
+ const context = (0, import_react37.useContext)(UIStateContext);
15998
15933
  if (!context) {
15999
15934
  throw new Error("useUIState must be used within a UIStateProvider");
16000
15935
  }
@@ -17186,7 +17121,7 @@ var InsightProgressMessage = /* @__PURE__ */ __name(({
17186
17121
 
17187
17122
  // packages/cli/src/ui/components/messages/BtwMessage.tsx
17188
17123
  init_esbuild_shims();
17189
- var import_react37 = __toESM(require_react(), 1);
17124
+ var import_react38 = __toESM(require_react(), 1);
17190
17125
  var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1);
17191
17126
  var BTW_SELF_CHROME = 4;
17192
17127
  function normalizeCodeFences(text) {
@@ -17234,7 +17169,7 @@ var BtwMessageInternal = /* @__PURE__ */ __name(({
17234
17169
  }
17235
17170
  );
17236
17171
  }, "BtwMessageInternal");
17237
- var BtwMessage = import_react37.default.memo(BtwMessageInternal);
17172
+ var BtwMessage = import_react38.default.memo(BtwMessageInternal);
17238
17173
 
17239
17174
  // packages/cli/src/ui/components/messages/MemorySavedMessage.tsx
17240
17175
  init_esbuild_shims();
@@ -17246,7 +17181,7 @@ var MemorySavedMessage = /* @__PURE__ */ __name(({
17246
17181
  const n = item.writtenCount;
17247
17182
  const label = n === 1 ? "memory" : "memories";
17248
17183
  return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(Box_default, { flexDirection: "row", children: [
17249
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Box_default, { minWidth: 2, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Text, { dimColor: true, children: "\u25CF" }) }),
17184
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Box_default, { width: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Text, { dimColor: true, children: ICON.CIRCLE_FILLED }) }),
17250
17185
  /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(Text, { dimColor: true, children: [
17251
17186
  verb,
17252
17187
  " ",
@@ -17363,7 +17298,7 @@ __name(padRight, "padRight");
17363
17298
 
17364
17299
  // packages/cli/src/ui/components/messages/GoalStatusMessage.tsx
17365
17300
  init_esbuild_shims();
17366
- var import_react38 = __toESM(require_react(), 1);
17301
+ var import_react39 = __toESM(require_react(), 1);
17367
17302
  var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1);
17368
17303
  var pluralTurns = /* @__PURE__ */ __name((n) => n === 1 ? "turn" : "turns", "pluralTurns");
17369
17304
  function assertNeverGoalStatusKind(kind) {
@@ -17380,7 +17315,7 @@ var GoalStatusMessageInternal = /* @__PURE__ */ __name(({
17380
17315
  if (kind === "checking") {
17381
17316
  const reason = lastReason?.trim();
17382
17317
  return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Box_default, { flexDirection: "row", children: [
17383
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Box_default, { width: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Text, { color: theme.text.secondary, children: "\u25CB" }) }),
17318
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Box_default, { width: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Text, { color: theme.text.secondary, children: ICON.CIRCLE_EMPTY }) }),
17384
17319
  /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Box_default, { flexGrow: 1, flexDirection: "column", children: [
17385
17320
  /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Text, { color: theme.text.secondary, children: [
17386
17321
  "Goal check",
@@ -17403,7 +17338,7 @@ var GoalStatusMessageInternal = /* @__PURE__ */ __name(({
17403
17338
  switch (kind) {
17404
17339
  case "set":
17405
17340
  return {
17406
- prefix: "\u25CE",
17341
+ prefix: ICON.BULLSEYE,
17407
17342
  prefixColor: theme.text.accent,
17408
17343
  title: "Goal set"
17409
17344
  };
@@ -17415,7 +17350,7 @@ var GoalStatusMessageInternal = /* @__PURE__ */ __name(({
17415
17350
  };
17416
17351
  case "cleared":
17417
17352
  return {
17418
- prefix: "\u25CB",
17353
+ prefix: ICON.CIRCLE_EMPTY,
17419
17354
  prefixColor: theme.text.secondary,
17420
17355
  title: "Goal cleared"
17421
17356
  };
@@ -17464,19 +17399,19 @@ var GoalStatusMessageInternal = /* @__PURE__ */ __name(({
17464
17399
  ] })
17465
17400
  ] });
17466
17401
  }, "GoalStatusMessageInternal");
17467
- var GoalStatusMessage = import_react38.default.memo(GoalStatusMessageInternal);
17402
+ var GoalStatusMessage = import_react39.default.memo(GoalStatusMessageInternal);
17468
17403
 
17469
17404
  // packages/cli/src/ui/contexts/ThoughtExpandedContext.tsx
17470
17405
  init_esbuild_shims();
17471
- var import_react39 = __toESM(require_react(), 1);
17406
+ var import_react40 = __toESM(require_react(), 1);
17472
17407
  var EMPTY_IDS = /* @__PURE__ */ new Set();
17473
- var ThoughtExpandedContext = (0, import_react39.createContext)({
17408
+ var ThoughtExpandedContext = (0, import_react40.createContext)({
17474
17409
  allExpanded: false,
17475
17410
  expandedHeadIds: EMPTY_IDS,
17476
17411
  toggle: /* @__PURE__ */ __name(() => {
17477
17412
  }, "toggle")
17478
17413
  });
17479
- var useThoughtExpanded = /* @__PURE__ */ __name(() => (0, import_react39.useContext)(ThoughtExpandedContext), "useThoughtExpanded");
17414
+ var useThoughtExpanded = /* @__PURE__ */ __name(() => (0, import_react40.useContext)(ThoughtExpandedContext), "useThoughtExpanded");
17480
17415
  var ThoughtExpandedProvider = ThoughtExpandedContext.Provider;
17481
17416
 
17482
17417
  // packages/cli/src/ui/components/HistoryItemDisplay.tsx
@@ -17490,14 +17425,14 @@ var ClickableThinkMessage = /* @__PURE__ */ __name(({
17490
17425
  durationMs,
17491
17426
  onToggle
17492
17427
  }) => {
17493
- const ref = (0, import_react40.useRef)(null);
17494
- const pressRef = (0, import_react40.useRef)(null);
17428
+ const ref = (0, import_react41.useRef)(null);
17429
+ const pressRef = (0, import_react41.useRef)(null);
17495
17430
  const { rows: terminalHeight } = useTerminalSize();
17496
17431
  const settings = useSettings();
17497
17432
  const clickable = !!settings.merged.ui?.useTerminalBuffer;
17498
17433
  const isActive = !isPending;
17499
17434
  useMouseEvents(
17500
- (0, import_react40.useCallback)(
17435
+ (0, import_react41.useCallback)(
17501
17436
  (event) => {
17502
17437
  if (!ref.current) return;
17503
17438
  if (event.name === "move") {
@@ -17600,7 +17535,7 @@ var HistoryItemDisplayComponent = /* @__PURE__ */ __name(({
17600
17535
  const resolvedThoughtExpanded = fullDetail || (thoughtExpanded ?? (allExpanded || expandedHeadIds.has(thoughtGroupHeadId)));
17601
17536
  const settings = useSettings();
17602
17537
  const showTimestamps = settings.merged.output?.showTimestamps === true;
17603
- const itemForDisplay = (0, import_react40.useMemo)(() => escapeAnsiCtrlCodes(item), [item]);
17538
+ const itemForDisplay = (0, import_react41.useMemo)(() => escapeAnsiCtrlCodes(item), [item]);
17604
17539
  const contentWidth = terminalWidth - 4;
17605
17540
  const boxWidth = mainAreaWidth || contentWidth;
17606
17541
  return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
@@ -17712,10 +17647,10 @@ var HistoryItemDisplayComponent = /* @__PURE__ */ __name(({
17712
17647
  fullDetail
17713
17648
  }
17714
17649
  ),
17715
- itemForDisplay.type === "tool_use_summary" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Box_default, { paddingLeft: 1, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Text, { dimColor: true, children: [
17716
- "\u25CF ",
17717
- itemForDisplay.summary
17718
- ] }) }),
17650
+ itemForDisplay.type === "tool_use_summary" && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Box_default, { flexDirection: "row", children: [
17651
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Box_default, { width: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Text, { dimColor: true, children: ICON.CIRCLE_FILLED }) }),
17652
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Text, { dimColor: true, children: itemForDisplay.summary })
17653
+ ] }),
17719
17654
  itemForDisplay.type === "compression" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CompressionMessage, { compression: itemForDisplay.compression }),
17720
17655
  itemForDisplay.type === "summary" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(SummaryMessage, { summary: itemForDisplay.summary }),
17721
17656
  itemForDisplay.type === "extensions_list" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ExtensionsList, {}),
@@ -17804,7 +17739,7 @@ Original prompt: ${sanitizeSensitiveText(itemForDisplay.originalPrompt)}` }) }),
17804
17739
  itemForDisplay.id
17805
17740
  );
17806
17741
  }, "HistoryItemDisplayComponent");
17807
- var HistoryItemDisplay = (0, import_react40.memo)(HistoryItemDisplayComponent);
17742
+ var HistoryItemDisplay = (0, import_react41.memo)(HistoryItemDisplayComponent);
17808
17743
  HistoryItemDisplay.displayName = "HistoryItemDisplay";
17809
17744
 
17810
17745
  // packages/cli/src/ui/components/SessionPreview.tsx
@@ -17821,9 +17756,9 @@ function SessionPreview(props) {
17821
17756
  onResume
17822
17757
  } = props;
17823
17758
  const { columns } = useTerminalSize();
17824
- const [data, setData] = (0, import_react41.useState)(null);
17825
- const [error, setError] = (0, import_react41.useState)(null);
17826
- (0, import_react41.useEffect)(() => {
17759
+ const [data, setData] = (0, import_react42.useState)(null);
17760
+ const [error, setError] = (0, import_react42.useState)(null);
17761
+ (0, import_react42.useEffect)(() => {
17827
17762
  let cancelled = false;
17828
17763
  setData(null);
17829
17764
  setError(null);
@@ -17842,11 +17777,11 @@ function SessionPreview(props) {
17842
17777
  cancelled = true;
17843
17778
  };
17844
17779
  }, [sessionService, sessionId]);
17845
- const items = (0, import_react41.useMemo)(() => {
17780
+ const items = (0, import_react42.useMemo)(() => {
17846
17781
  if (!data) return [];
17847
17782
  return buildResumedHistoryItems(data, null);
17848
17783
  }, [data]);
17849
- const computedMessageCount = (0, import_react41.useMemo)(() => {
17784
+ const computedMessageCount = (0, import_react42.useMemo)(() => {
17850
17785
  if (!data) return void 0;
17851
17786
  const seen = /* @__PURE__ */ new Set();
17852
17787
  for (const msg of data.conversation.messages) {
@@ -18164,9 +18099,6 @@ export {
18164
18099
  loadLowlight,
18165
18100
  colorizeCode,
18166
18101
  fitPendingSlice,
18167
- sanitizeForOsc,
18168
- osc8Hyperlink,
18169
- supportsHyperlinks,
18170
18102
  TerminalOutputProvider,
18171
18103
  useTerminalOutput,
18172
18104
  RenderModeProvider,