@qwen-code/qwen-code 0.23.5-dev.codemode-responses.20260915.af4da34719 → 0.23.5-preview.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 (377) hide show
  1. package/bundled/computer-use/SKILL.md +24 -3
  2. package/bundled/qc-helper/docs/configuration/model-providers.md +43 -0
  3. package/bundled/qc-helper/docs/configuration/settings.md +10 -9
  4. package/bundled/qc-helper/docs/extension/agent-plugins.md +1 -0
  5. package/bundled/qc-helper/docs/extension/introduction.md +49 -0
  6. package/bundled/qc-helper/docs/features/channels/dingtalk.md +39 -4
  7. package/bundled/qc-helper/docs/features/channels/overview.md +12 -0
  8. package/bundled/qc-helper/docs/features/commands.md +57 -52
  9. package/bundled/qc-helper/docs/features/computer-use.md +1 -1
  10. package/bundled/qc-helper/docs/features/goals.md +8 -0
  11. package/bundled/qc-helper/docs/features/hooks.md +16 -0
  12. package/bundled/qc-helper/docs/qwen-serve.md +3 -1
  13. package/bundled/workflow-authoring/SKILL.md +48 -22
  14. package/chunks/{MaxSizedBox-3K65WFGY.js → MaxSizedBox-FCF6M53W.js} +40 -43
  15. package/chunks/{StandaloneSessionPicker-JKM33JPY.js → StandaloneSessionPicker-V635V72I.js} +60 -63
  16. package/chunks/{acp-startup-profiler-RUQNTNU5.js → acp-startup-profiler-MOOU37VM.js} +2 -2
  17. package/chunks/{acp-subagent-executor-KIZBB2CL.js → acp-subagent-executor-TND6W2O5.js} +46 -47
  18. package/chunks/{acpAgent-SHI4L5EV.js → acpAgent-3DPWZTNC.js} +954 -322
  19. package/chunks/{agent-AJXNVRX2.js → agent-KIHGINKN.js} +27 -30
  20. package/chunks/{agent-headless-2JPJKYHK.js → agent-headless-EJ4QOUSM.js} +27 -30
  21. package/chunks/{anthropicContentGenerator-H5YPXIDE.js → anthropicContentGenerator-4FGOM5LK.js} +46 -64
  22. package/chunks/{artifact-tool-MFGORTWZ.js → artifact-tool-MUTNH4NI.js} +1 -1
  23. package/chunks/{askUserQuestion-WS4GUT7C.js → askUserQuestion-AKIRLVB5.js} +1 -1
  24. package/chunks/bareMode-QWKZPLPX.js +14 -0
  25. package/chunks/{bridge-KZYSMV4N.js → bridge-MUX5YJZT.js} +46 -49
  26. package/chunks/{ca-GZ4FDJU2.js → ca-WC3A5B3Q.js} +12 -1
  27. package/chunks/{channel-management-service-AFVIT4VH.js → channel-management-service-RRILWSXX.js} +4 -4
  28. package/chunks/{channel-settings-store-IJG52IDV.js → channel-settings-store-7CBIRZER.js} +51 -54
  29. package/chunks/{channel-worker-group-JR6JOELM.js → channel-worker-group-3DUJFZJR.js} +8 -8
  30. package/chunks/{channel-worker-manager-AVKJEZFL.js → channel-worker-manager-E5UW2VLA.js} +8 -8
  31. package/chunks/{channel-worker-supervisor-OOYY7BAQ.js → channel-worker-supervisor-VN33GSEC.js} +5 -5
  32. package/chunks/{chunk-2YMRRI2C.js → chunk-2C5TR6HN.js} +82 -9
  33. package/chunks/{chunk-YDFOHRS5.js → chunk-2GP6BQ2J.js} +1 -1
  34. package/chunks/{chunk-JATZTB7X.js → chunk-347O2YZJ.js} +158 -290
  35. package/chunks/{chunk-RYREFZFH.js → chunk-36NRLIR6.js} +10 -8
  36. package/chunks/{chunk-AXZMWAJV.js → chunk-36SDZ2Q4.js} +8 -0
  37. package/chunks/{chunk-QR4Q425T.js → chunk-3BZI5GDP.js} +1 -1
  38. package/chunks/{chunk-IP6NRULS.js → chunk-3HTUE6ZR.js} +3 -3
  39. package/chunks/{chunk-B2VSRPS6.js → chunk-3LLEB5CU.js} +2 -2
  40. package/chunks/{chunk-L2XNHRDL.js → chunk-3UGMLA4V.js} +10 -8
  41. package/chunks/{chunk-66N6C4EH.js → chunk-3WILPKTJ.js} +2 -2
  42. package/chunks/{chunk-SROLVJFY.js → chunk-3WWPEFMX.js} +1 -1
  43. package/chunks/{chunk-ZKIAGIGH.js → chunk-3XBUCOWS.js} +1 -1
  44. package/chunks/{chunk-737SVOO7.js → chunk-43Y26NPF.js} +3 -3
  45. package/chunks/{chunk-INGBUYL6.js → chunk-4FLUQWJ4.js} +1 -1
  46. package/chunks/{chunk-BTBJEB27.js → chunk-4JFLRHNE.js} +1 -1
  47. package/chunks/{chunk-MJHLKWGJ.js → chunk-4QPVZA5J.js} +70 -23
  48. package/chunks/{chunk-XX5HQLCZ.js → chunk-6OTF7TTE.js} +32 -1
  49. package/chunks/{chunk-4Y2I3CI3.js → chunk-6USYH3EU.js} +99 -6
  50. package/chunks/{chunk-Q3TFRP5G.js → chunk-7D4CV7JH.js} +102 -9
  51. package/chunks/{chunk-EWJTAP3Y.js → chunk-7O5PYQ3M.js} +20 -1
  52. package/chunks/chunk-ADN5KESB.js +28 -0
  53. package/chunks/chunk-AKRSSKUT.js +229 -0
  54. package/chunks/{chunk-IOXJX7XE.js → chunk-AQP3H22J.js} +1 -1
  55. package/chunks/{chunk-YP7QCE7X.js → chunk-AUX2FL5T.js} +24 -7
  56. package/chunks/{chunk-YGFJ6BRT.js → chunk-AZCTY64Z.js} +1 -1
  57. package/chunks/{chunk-5CDDYYNI.js → chunk-B5TJK7B3.js} +1 -1
  58. package/chunks/{chunk-7MKB7L25.js → chunk-B6RMK4ED.js} +4 -4
  59. package/chunks/{chunk-YH24ZJ65.js → chunk-BHG3H6OZ.js} +1 -1
  60. package/chunks/{chunk-BRPYJQDD.js → chunk-BHVF3R6B.js} +7 -5
  61. package/chunks/{chunk-HFJSQ4GL.js → chunk-BTICBRPL.js} +1 -1
  62. package/chunks/{chunk-KZCK5JUN.js → chunk-C3T6HPNM.js} +1 -1
  63. package/chunks/{chunk-UB2MATP5.js → chunk-CDDP4ONL.js} +164 -27
  64. package/chunks/{chunk-OL3TNHFM.js → chunk-CQPM66MG.js} +4 -4
  65. package/chunks/{chunk-WKVZES7O.js → chunk-CXONOVBN.js} +1 -1
  66. package/chunks/{chunk-6IHJLXNF.js → chunk-CXY6BICQ.js} +501 -479
  67. package/chunks/{chunk-I5QPDANL.js → chunk-D3KVGQUV.js} +1 -1
  68. package/chunks/{chunk-LMJSPC55.js → chunk-D7JMO2GP.js} +3 -7
  69. package/chunks/{chunk-CXXAZ2LZ.js → chunk-DC4ZNGH4.js} +1 -1
  70. package/chunks/{chunk-FMLBBXHB.js → chunk-DRAX5YAI.js} +2 -2
  71. package/chunks/{chunk-DOTF2PF2.js → chunk-DRD6VBNH.js} +1 -1
  72. package/chunks/chunk-DX6JTDMR.js +105 -0
  73. package/chunks/{chunk-HJAJ6MR6.js → chunk-E2VSBAFA.js} +53 -11
  74. package/chunks/{chunk-G7ZYRFHS.js → chunk-EIBECN2J.js} +3 -3
  75. package/chunks/{chunk-LWWRJRCD.js → chunk-ESBYWATJ.js} +1 -1
  76. package/chunks/{chunk-2PLQ3CXJ.js → chunk-FASYATAZ.js} +5 -7
  77. package/chunks/{chunk-3ADU34IF.js → chunk-FBY32737.js} +4 -4
  78. package/chunks/{chunk-SIDVJZWH.js → chunk-FCPJXKDG.js} +10 -7
  79. package/chunks/{chunk-5GXJBU7K.js → chunk-FEDFZBGR.js} +3 -3
  80. package/chunks/{chunk-CALVKIIG.js → chunk-FIJODK52.js} +3 -3
  81. package/chunks/{chunk-ZTVYMZBD.js → chunk-FX6PZBOV.js} +3 -3
  82. package/chunks/{chunk-L6DIANLD.js → chunk-G45B3INR.js} +1 -1
  83. package/chunks/{chunk-TATT2THJ.js → chunk-GI7SLDOI.js} +2 -2
  84. package/chunks/chunk-GJKP6XOB.js +1092 -0
  85. package/chunks/{chunk-I6YJZGHS.js → chunk-GSAOVDTH.js} +9 -9
  86. package/chunks/{chunk-7MIOAF77.js → chunk-H6L4NEAT.js} +1 -1
  87. package/chunks/{chunk-MJGJF6G6.js → chunk-HNFKYKHH.js} +103 -22
  88. package/chunks/{chunk-PN6D5LWJ.js → chunk-HX4WXX3H.js} +301 -138
  89. package/chunks/{chunk-HG46TTAG.js → chunk-HXUI5D4H.js} +1 -1
  90. package/chunks/{chunk-JF2CFBDK.js → chunk-HYHSMTRA.js} +4 -4
  91. package/chunks/{chunk-4DZMYFZA.js → chunk-IKBEIDOH.js} +14 -14
  92. package/chunks/{chunk-QEENIXYB.js → chunk-INN5ORKX.js} +1 -1
  93. package/chunks/{chunk-GNV2SFO7.js → chunk-IVFTLUZD.js} +26 -1
  94. package/chunks/{chunk-L2NII7PZ.js → chunk-IXO2OCIP.js} +2 -2
  95. package/chunks/{chunk-6MAHSVMB.js → chunk-K4XMAIRX.js} +30 -33
  96. package/chunks/{chunk-AYMSNIYL.js → chunk-KAYC5FBN.js} +5269 -2785
  97. package/chunks/chunk-KEM7MWS7.js +3541 -0
  98. package/chunks/{chunk-ADQUK6WA.js → chunk-KVC7HZWK.js} +1 -1
  99. package/chunks/{chunk-Z35OSDIT.js → chunk-KVQ3QL4K.js} +3 -3
  100. package/chunks/{chunk-7U5G6JXI.js → chunk-KWYTSSTJ.js} +105 -6
  101. package/chunks/{chunk-PZRAE65J.js → chunk-L2A5VBDL.js} +3019 -2352
  102. package/chunks/{chunk-WD6YQI5M.js → chunk-L3SNMEDW.js} +1 -1
  103. package/chunks/{chunk-BYUAT5OC.js → chunk-L7TJUPNR.js} +19 -3
  104. package/chunks/{chunk-ABNX6E6K.js → chunk-LFKXIOGC.js} +1 -1
  105. package/chunks/{chunk-NFQOOITE.js → chunk-LO2UWNO5.js} +2 -2
  106. package/chunks/{chunk-LWUTZKDU.js → chunk-M22WLKLI.js} +5 -5
  107. package/chunks/{chunk-54B2LTKP.js → chunk-M23GFJ5B.js} +24 -5
  108. package/chunks/{chunk-VGY2RGXL.js → chunk-M4U2LTD2.js} +1 -1
  109. package/chunks/{chunk-ZNI3YJHS.js → chunk-MFDKHGTD.js} +1 -1
  110. package/chunks/{chunk-R7OO56VZ.js → chunk-MMRGG6R4.js} +1 -1
  111. package/chunks/{chunk-E6IR653O.js → chunk-MO4XID7S.js} +1 -1
  112. package/chunks/{chunk-FZQQMVLB.js → chunk-NKTMUPHJ.js} +3 -6
  113. package/chunks/{chunk-V77DTVCM.js → chunk-NQ272MQG.js} +1 -1
  114. package/chunks/{chunk-TDFLM7BE.js → chunk-OALXNGUA.js} +6 -6
  115. package/chunks/{chunk-FBDHP23D.js → chunk-OSG23MR3.js} +1 -1
  116. package/chunks/{chunk-NJ2OFVUX.js → chunk-P42KMMU6.js} +860 -1
  117. package/chunks/{chunk-Y33TCKXL.js → chunk-PF7GAP6K.js} +60 -58
  118. package/chunks/{chunk-MQRLLBMQ.js → chunk-PPJSG2PU.js} +2 -2
  119. package/chunks/{chunk-EPVEPTI3.js → chunk-PZRXWQUA.js} +753 -18
  120. package/chunks/{chunk-OLN7QX4P.js → chunk-Q54O3EIA.js} +30 -28
  121. package/chunks/{chunk-DQH3EVAD.js → chunk-QGEISOJ2.js} +4 -4
  122. package/chunks/{chunk-3M4O2AY3.js → chunk-QHSOINX6.js} +2 -2
  123. package/chunks/{chunk-HIQEL7EM.js → chunk-QIPLWW6Q.js} +1 -1
  124. package/chunks/chunk-QMENOK5T.js +1246 -0
  125. package/chunks/chunk-QT6Z2IBF.js +347 -0
  126. package/chunks/{chunk-TBSCTWKF.js → chunk-RN6A53UJ.js} +25 -0
  127. package/chunks/{chunk-65BKWMMH.js → chunk-RRI764F7.js} +21 -19
  128. package/chunks/{chunk-YI2YCNSP.js → chunk-SENYKRII.js} +1 -1
  129. package/chunks/chunk-SFHX5G2S.js +2796 -0
  130. package/chunks/chunk-SK3RZOPS.js +34 -0
  131. package/chunks/{chunk-MD6KXINN.js → chunk-SOLRBF7L.js} +13 -9
  132. package/chunks/{chunk-6BCN3VOY.js → chunk-SSWTA7CH.js} +12 -12
  133. package/chunks/{chunk-IAS753HG.js → chunk-SYMXYRM5.js} +11 -2
  134. package/chunks/{chunk-FGROOEKM.js → chunk-TDKUXSJO.js} +34 -6
  135. package/chunks/{chunk-ZJ7JQUGY.js → chunk-TKF4JINY.js} +1 -1
  136. package/chunks/{chunk-RVK37FWG.js → chunk-TPY6HW55.js} +4 -4
  137. package/chunks/{chunk-EDB556X7.js → chunk-TRZ22SG5.js} +1 -1
  138. package/chunks/{chunk-7LG4MUUD.js → chunk-TXTCM3TC.js} +4 -4
  139. package/chunks/{chunk-5ODRE7E5.js → chunk-U4AASWUQ.js} +28 -12
  140. package/chunks/{chunk-WPMRT4AR.js → chunk-UQGRJTDK.js} +2 -2
  141. package/chunks/{chunk-JBS56C7O.js → chunk-UZSB57EV.js} +6 -8
  142. package/chunks/{chunk-S4M6BDNE.js → chunk-V4JJAVHQ.js} +2 -2
  143. package/chunks/chunk-VEXUA6DX.js +1026 -0
  144. package/chunks/{chunk-ME4JBHSB.js → chunk-VQDWCQOE.js} +2 -0
  145. package/chunks/{chunk-3XXDCC5C.js → chunk-VU3XMZ5I.js} +23 -4
  146. package/chunks/{chunk-RD2HAF25.js → chunk-WL36KHUQ.js} +6 -6
  147. package/chunks/{chunk-WYRSEVBQ.js → chunk-WNQIJTOP.js} +8 -8
  148. package/chunks/{chunk-GTBXQ5W2.js → chunk-WSJI6ODG.js} +99 -30
  149. package/chunks/{chunk-VN5G33G7.js → chunk-WZWTY7SG.js} +6 -6
  150. package/chunks/{chunk-EKMJR7M3.js → chunk-X7AYIXC7.js} +1 -1
  151. package/chunks/{chunk-IBRQG2MP.js → chunk-XAJZFGD2.js} +11 -11
  152. package/chunks/{chunk-VRQZESKP.js → chunk-XICCGDWF.js} +2 -2
  153. package/chunks/{chunk-OZ2KDR2L.js → chunk-Y2KJC55Y.js} +12 -7
  154. package/chunks/{chunk-2S2WIGCM.js → chunk-Y4NNIGYO.js} +1 -1
  155. package/chunks/{chunk-J7LBAKDH.js → chunk-YL3UJML3.js} +7 -7
  156. package/chunks/{chunk-GSS4SZNG.js → chunk-YP2K3WOS.js} +40 -56
  157. package/chunks/{chunk-ZZUXUBEB.js → chunk-YQQ2U7AS.js} +8 -5
  158. package/chunks/{chunk-FAWTMDX7.js → chunk-YXHY6BKS.js} +15 -0
  159. package/chunks/{chunk-VIV2I3R7.js → chunk-YZXSDPOQ.js} +140 -39
  160. package/chunks/{chunk-KZ63S3HX.js → chunk-ZFHKUQZ4.js} +3 -3
  161. package/chunks/{chunk-B6KSTADQ.js → chunk-ZMYKNKET.js} +6 -6
  162. package/chunks/{codex-subagent-executor-6M7TD3MF.js → codex-subagent-executor-AEAIQZDC.js} +48 -49
  163. package/chunks/{config-utils-TB4QERW7.js → config-utils-KX2YS725.js} +43 -46
  164. package/chunks/{contextCommand-BFQMDECM.js → contextCommand-RV6Y5LNJ.js} +41 -44
  165. package/chunks/{core-runtime-Z2QJJMHR.js → core-runtime-ZI4RTOJQ.js} +45 -48
  166. package/chunks/{create-sub-session-GE4U3D7C.js → create-sub-session-BBWFQARJ.js} +46 -48
  167. package/chunks/{daemon-NJB4PWZ7.js → daemon-INCM4VBX.js} +3 -1
  168. package/chunks/{daemon-git-worktree-guard-IPA22S72.js → daemon-git-worktree-guard-KECEMV6A.js} +39 -42
  169. package/chunks/{daemon-status-provider-2U5WPCCB.js → daemon-status-provider-NULJNAEV.js} +53 -56
  170. package/chunks/{daemon-trust-policy-GEIGMVDQ.js → daemon-trust-policy-S4KWGPV3.js} +47 -50
  171. package/chunks/{daemon-trust-policy-monitor-JETBW5FX.js → daemon-trust-policy-monitor-546N5ZVL.js} +47 -50
  172. package/chunks/{de-VGY3VNBU.js → de-6AVKPTXQ.js} +11 -0
  173. package/chunks/{deferred-core-runtime-LANRK77C.js → deferred-core-runtime-T23ZT443.js} +39 -42
  174. package/chunks/{dist-NIOJXMGY.js → dist-4P3ZJYGI.js} +1 -1
  175. package/chunks/{dist-VDLSBCLM.js → dist-7MGRENQ5.js} +1 -1
  176. package/chunks/{dist-SE4J6Z4O.js → dist-BNW423XT.js} +326 -77
  177. package/chunks/{dist-TFGETXFN.js → dist-CESMUYGN.js} +4 -4
  178. package/chunks/{dist-MPUZZOG5.js → dist-DBBOFWSC.js} +1 -1
  179. package/chunks/{dist-T6DDPDLQ.js → dist-G5UMXIGF.js} +1 -1
  180. package/chunks/{dist-PA7WPFVE.js → dist-UXVNLQHG.js} +3 -3
  181. package/chunks/{dist-GUB7QRYA.js → dist-VA4LREAQ.js} +2 -2
  182. package/chunks/{dist-2QYIVNS6.js → dist-XDRTR4QP.js} +1 -1
  183. package/chunks/{edit-QC63PJOZ.js → edit-CMSQB7NP.js} +27 -30
  184. package/chunks/{en-E5ZO5TZW.js → en-56QLKXS2.js} +23 -1
  185. package/chunks/{enter-worktree-CAARFWBI.js → enter-worktree-DA6A4XC5.js} +3 -3
  186. package/chunks/{enterPlanMode-5TMWDRXD.js → enterPlanMode-UDPMNESD.js} +27 -30
  187. package/chunks/{environment-TNQVM5B3.js → environment-TSQJUTPV.js} +42 -45
  188. package/chunks/{errors-KWDDLG7P.js → errors-RIVYJS6T.js} +41 -44
  189. package/chunks/{exit-worktree-JXGGUOBP.js → exit-worktree-4H6Z2VQI.js} +3 -3
  190. package/chunks/{exitPlanMode-CLEWPZIE.js → exitPlanMode-BYBBFN2T.js} +27 -30
  191. package/chunks/{fast-path-PMRLQT7J.js → fast-path-F2CYDDZ4.js} +4 -4
  192. package/chunks/{fast-path-settings-XDYX7X5Z.js → fast-path-settings-N2VGRGDJ.js} +2 -2
  193. package/chunks/{fr-UAZJJH5N.js → fr-EBUDHJL3.js} +11 -0
  194. package/chunks/{glob-3AK4KKCE.js → glob-Z2JMJKKN.js} +27 -30
  195. package/chunks/{goal-tools-FD6OCE6Q.js → goal-tools-HXVVLGCV.js} +27 -30
  196. package/chunks/{handleAutoUpdate-QUNNMMY6.js → handleAutoUpdate-FZP45KOR.js} +43 -46
  197. package/chunks/{i18n-DVN326VM.js → i18n-OTB62AKW.js} +40 -43
  198. package/chunks/{image-gen-5G2TQ3DY.js → image-gen-HIAZCB5T.js} +6 -7
  199. package/chunks/{initializer-JHEJBPVJ.js → initializer-4JXZEC4B.js} +47 -50
  200. package/chunks/{installationInfo-DYOI4I5U.js → installationInfo-2IJV5QKC.js} +39 -42
  201. package/chunks/{ja-2RITCMAJ.js → ja-NCDT4CGV.js} +11 -0
  202. package/chunks/{list-MW74DDMO.js → list-KQSQ4A5G.js} +50 -53
  203. package/chunks/{llm-HUDP76IA.js → llm-LSUBOJAR.js} +154 -974
  204. package/chunks/{llm-content-generator-KYD6ZEM6.js → llm-content-generator-MLIONRXE.js} +17 -12
  205. package/chunks/{loadedSettingsAdapter-RRAZOPRB.js → loadedSettingsAdapter-TZTTNRHI.js} +47 -50
  206. package/chunks/{loggingContentGenerator-MHE6Z2OZ.js → loggingContentGenerator-TUPEXFMM.js} +31 -34
  207. package/chunks/{loop-wakeup-VG6CGBQA.js → loop-wakeup-ZBVRI6VH.js} +1 -1
  208. package/chunks/{managed-npm-update-3G3O3T3R.js → managed-npm-update-WEA5XMFZ.js} +40 -43
  209. package/chunks/{mcp-JGLBFJQB.js → mcp-TFDTUPIA.js} +47 -50
  210. package/chunks/{model-configuration-EGWMLK4P.js → model-configuration-ZCAKKIOF.js} +48 -51
  211. package/chunks/{modelConfigUtils-H4WFGWQD.js → modelConfigUtils-J3ZPW7ZK.js} +41 -44
  212. package/chunks/{monitor-62V72TGX.js → monitor-CI7YE7MT.js} +29 -32
  213. package/chunks/{nonInteractiveCli-GYKHG7RX.js → nonInteractiveCli-GPT3TVOK.js} +96 -98
  214. package/chunks/{notebook-edit-HOJLHP3F.js → notebook-edit-3WCVRNGL.js} +27 -30
  215. package/chunks/{openaiContentGenerator-ZAJTUWVO.js → openaiContentGenerator-OGILGUZE.js} +12 -17
  216. package/chunks/{openaiResponsesContentGenerator-AWRYZLJU.js → openaiResponsesContentGenerator-NXOXUPFM.js} +45 -13
  217. package/chunks/{pidfile-CS7LHAN5.js → pidfile-GBTBIGHF.js} +39 -42
  218. package/chunks/{process-registry-X6ZCASEN.js → process-registry-7LAPI3ZB.js} +1 -1
  219. package/chunks/{processUtils-OWQU3JQM.js → processUtils-O4II3RYH.js} +2 -2
  220. package/chunks/{prompt-terminal-ledger-76P527XD.js → prompt-terminal-ledger-ILIXZI3E.js} +40 -43
  221. package/chunks/{pt-5ZF7ZQUV.js → pt-FYYFWYUC.js} +11 -0
  222. package/chunks/{qwenContentGenerator-QZCQ3UTX.js → qwenContentGenerator-I4LRYADV.js} +33 -36
  223. package/chunks/{qwenOAuth2-WIEUEFEY.js → qwenOAuth2-3J66TOT5.js} +6 -7
  224. package/chunks/{read-file-KR5BES2E.js → read-file-G4XKW2CS.js} +5 -9
  225. package/chunks/{record-artifact-PXMNP7GZ.js → record-artifact-L3CFJOMA.js} +2 -2
  226. package/chunks/{report-findings-W6GR7SYZ.js → report-findings-LY5HQY4K.js} +3 -3
  227. package/chunks/{resumeHistoryUtils-36NM5S3D.js → resumeHistoryUtils-YPJU4XFE.js} +44 -47
  228. package/chunks/{ripGrep-QGFIVODS.js → ripGrep-AAKMALLM.js} +7 -11
  229. package/chunks/{ru-7BNZFQKG.js → ru-RHEB3RNS.js} +11 -0
  230. package/chunks/{run-qwen-serve-UFEOUIDD.js → run-qwen-serve-ZVEKGS7Y.js} +177 -98
  231. package/chunks/{runtime-7LTR2C7Q.js → runtime-SJCRYNPA.js} +52 -55
  232. package/chunks/safe-mode-KLGUG54M.js +11 -0
  233. package/chunks/sandbox-UIXL423Z.js +146 -0
  234. package/chunks/sandboxConfig-CY343YNJ.js +114 -0
  235. package/chunks/{scheduled-tasks-MV22T3JO.js → scheduled-tasks-5UGBEVNZ.js} +50 -53
  236. package/chunks/{scheduler-HSNQ53ML.js → scheduler-GCZYLZ2P.js} +41 -44
  237. package/chunks/{sdk-exporters-http-3R2TRQHE.js → sdk-exporters-http-DR4G663K.js} +1 -1
  238. package/chunks/{sdk-impl-4WF3VZ2F.js → sdk-impl-SJR26MQF.js} +3 -3
  239. package/chunks/{send-message-UMJKN27Q.js → send-message-DN76MXDX.js} +6 -6
  240. package/chunks/{serve-LDD4FEJQ.js → serve-2XXQLVK2.js} +48 -51
  241. package/chunks/{server-IKTZFW3E.js → server-UHMKPCAZ.js} +408 -211
  242. package/chunks/{session-T77EXOOI.js → session-ZLUK7E4P.js} +108 -108
  243. package/chunks/{session-attachments-root-FBASBVAO.js → session-attachments-root-DHQM5IEZ.js} +39 -42
  244. package/chunks/{session-pr-refresh-2BHKIMIN.js → session-pr-refresh-3OMTQWCZ.js} +48 -51
  245. package/chunks/{settings-TJNUFBGG.js → settings-P4DHIIUP.js} +50 -53
  246. package/chunks/{shell-HDI5VPGD.js → shell-IMFUVQQ5.js} +27 -30
  247. package/chunks/{skill-VTA6FNDX.js → skill-NB5RJGZW.js} +7 -11
  248. package/chunks/{skill-settings-K4LSGCKA.js → skill-settings-IXG5CTQO.js} +47 -50
  249. package/chunks/{spawnChannel-YSGSPD5D.js → spawnChannel-Q3YALTCJ.js} +44 -45
  250. package/chunks/{standalone-update-O5LYCCMB.js → standalone-update-H5OJ7MM7.js} +41 -44
  251. package/chunks/{start-opentui-ui-CS6HKYCE.js → start-opentui-ui-JKAIWGF7.js} +733 -386
  252. package/chunks/{startInteractiveUI-IVP5HEDD.js → startInteractiveUI-YRPOT6GH.js} +370 -337
  253. package/chunks/task-create-75HVPEAH.js +1 -1
  254. package/chunks/{team-create-DW4KE2PR.js → team-create-2XTBYRJF.js} +31 -34
  255. package/chunks/{team-plan-approval-33UL4JDG.js → team-plan-approval-CFNWW7ZQ.js} +27 -30
  256. package/chunks/{terminal-image-renderer-4FK76L22.js → terminal-image-renderer-UDPJPGPQ.js} +39 -42
  257. package/chunks/{theme-manager-UQ3EKEJ4.js → theme-manager-SK57EKMO.js} +39 -42
  258. package/chunks/{tool-search-QUOG6M6M.js → tool-search-ZHTJU2MV.js} +5 -9
  259. package/chunks/{total-session-admission-QRWPWSK5.js → total-session-admission-UUZBDQCG.js} +47 -50
  260. package/chunks/{tree-sitter-ALGO6NDO.js → tree-sitter-4D7QS7F6.js} +1 -1
  261. package/chunks/{tree-sitter-bash-H6YH7EBF.js → tree-sitter-bash-VEJGF5XF.js} +1 -1
  262. package/chunks/{trustedFolders-HESP75BK.js → trustedFolders-4LDBLNTS.js} +40 -43
  263. package/chunks/{update-relaunch-YROJ7A26.js → update-relaunch-LI7GRP36.js} +5 -5
  264. package/chunks/{updateCheck-CUKTRHID.js → updateCheck-PKSSORPO.js} +43 -46
  265. package/chunks/{useAutoAcceptIndicator-BQGSRBHX.js → useAutoAcceptIndicator-I32UEQPI.js} +50 -53
  266. package/chunks/{validateNonInterActiveAuth-UM5U2ZZI.js → validateNonInterActiveAuth-YFPCYYNL.js} +93 -95
  267. package/chunks/{version-A6G2KO4K.js → version-4MTL4JVU.js} +1 -1
  268. package/chunks/{web-fetch-A3RMCVQY.js → web-fetch-O6RG6ISB.js} +9 -13
  269. package/chunks/{web-search-3XGJ773E.js → web-search-JHAXVEMD.js} +9 -14
  270. package/chunks/{web-shell-static-T7UGLVE4.js → web-shell-static-FFWCUUZS.js} +8 -4
  271. package/chunks/{workflow-4TWAFNIB.js → workflow-O7L6VDYU.js} +396 -113
  272. package/chunks/{workspace-providers-status-GNTJ4OIZ.js → workspace-providers-status-WRX6CJM4.js} +53 -56
  273. package/chunks/{workspace-registration-store-D3K34O63.js → workspace-registration-store-7G4E7YPY.js} +1 -1
  274. package/chunks/{workspace-registry-ZE5ZSWNF.js → workspace-registry-SXIMGT4D.js} +47 -50
  275. package/chunks/{workspace-runtime-coordinator-DEXM2635.js → workspace-runtime-coordinator-7DOEHXYT.js} +47 -50
  276. package/chunks/{workspace-service-OGYORPWD.js → workspace-service-HDXOZMYC.js} +53 -56
  277. package/chunks/{workspace-skills-status-4W4H3BGJ.js → workspace-skills-status-VN4L37CA.js} +50 -53
  278. package/chunks/{workspace-trust-reconciler-BHR7S7UJ.js → workspace-trust-reconciler-XEBW5FUL.js} +57 -60
  279. package/chunks/{write-file-EP5AEO5E.js → write-file-LKX4ETIO.js} +29 -32
  280. package/chunks/{zh-V2EYTYJP.js → zh-F76MZTL3.js} +23 -1
  281. package/chunks/{zh-TW-7PRVUGLW.js → zh-TW-S3YTQ4DS.js} +23 -1
  282. package/chunks/{zoom-image-DDEGWG3R.js → zoom-image-RDPRTP4B.js} +5 -9
  283. package/cli.js +19 -15
  284. package/export-transcript-document.css +1 -1
  285. package/export-transcript-document.js +151 -150
  286. package/locales/ca.js +19 -2
  287. package/locales/de.js +18 -0
  288. package/locales/en.js +33 -2
  289. package/locales/fr.js +18 -0
  290. package/locales/ja.js +18 -0
  291. package/locales/pt.js +18 -0
  292. package/locales/ru.js +18 -0
  293. package/locales/zh-TW.js +33 -2
  294. package/locales/zh.js +33 -2
  295. package/package.json +3 -3
  296. package/web-shell/assets/{abnfDiagram-VCTEODGH-BtpzKw3A.js → abnfDiagram-VCTEODGH-RxykUDmi.js} +1 -1
  297. package/web-shell/assets/{arc-CQiVKZJP.js → arc-CZpgGCJC.js} +1 -1
  298. package/web-shell/assets/{architectureDiagram-5GKGNRK7-ekIPBb2d.js → architectureDiagram-5GKGNRK7-BHSMzNDT.js} +1 -1
  299. package/web-shell/assets/{blockDiagram-NRAW4CY4-BrRWkWri.js → blockDiagram-NRAW4CY4-Bn4mF9SZ.js} +1 -1
  300. package/web-shell/assets/{c4Diagram-UCG6FXSJ-qYS8CYZ3.js → c4Diagram-UCG6FXSJ-CBM-Bj6t.js} +1 -1
  301. package/web-shell/assets/channel-DFYs_LlK.js +1 -0
  302. package/web-shell/assets/{chunk-2Q5K7J3B-ZasyyEZm.js → chunk-2Q5K7J3B-D5Fin58O.js} +1 -1
  303. package/web-shell/assets/{chunk-5VM5RSS4-C_IzCGeA.js → chunk-5VM5RSS4-CY05weF7.js} +1 -1
  304. package/web-shell/assets/{chunk-F27PBJKO-C25NZOyD.js → chunk-F27PBJKO-3neZnj5Y.js} +1 -1
  305. package/web-shell/assets/{chunk-G27WJ6UU-XPOHNSGX.js → chunk-G27WJ6UU-Cd7EU4BE.js} +1 -1
  306. package/web-shell/assets/{chunk-JWPE2WC7-BQBh0Xni.js → chunk-JWPE2WC7-DwK1mqFw.js} +1 -1
  307. package/web-shell/assets/{chunk-LCL6LL3I-CoShjpX7.js → chunk-LCL6LL3I-Sl7vY22C.js} +1 -1
  308. package/web-shell/assets/{chunk-POPQ4Y6H-BwRmCDSz.js → chunk-POPQ4Y6H-BXNzpbVg.js} +1 -1
  309. package/web-shell/assets/{chunk-SVP7TREG-DSzE5-Mw.js → chunk-SVP7TREG-DjjButcp.js} +1 -1
  310. package/web-shell/assets/{chunk-XXDRQBXY-BQSQv30h.js → chunk-XXDRQBXY-DNOiCjOJ.js} +1 -1
  311. package/web-shell/assets/classDiagram-DTDB5LWJ-DnGrKXoM.js +1 -0
  312. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DnGrKXoM.js +1 -0
  313. package/web-shell/assets/{cose-bilkent-JH36ORCC-XVUVTHVo.js → cose-bilkent-JH36ORCC-BUnker7a.js} +1 -1
  314. package/web-shell/assets/{cynefin-OW5HDTMX-CrsKx4lQ.js → cynefin-OW5HDTMX-DcUgdWE5.js} +1 -1
  315. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-BPeZEuHw.js → cynefinDiagram-5FMLGOSQ-CvDKsZsL.js} +1 -1
  316. package/web-shell/assets/{dagre-3AP2YEHR-D31cQ2Qs.js → dagre-3AP2YEHR-jpCmUbr1.js} +1 -1
  317. package/web-shell/assets/{diagram-S7CK7UJ4-zyiG097Q.js → diagram-S7CK7UJ4-DBe_bKE5.js} +1 -1
  318. package/web-shell/assets/{diagram-UQ7AKVKN-Br3vtfsy.js → diagram-UQ7AKVKN-oXvPpDgs.js} +1 -1
  319. package/web-shell/assets/{diagram-VSXAHHWV-Bxkhjx4u.js → diagram-VSXAHHWV-BD7-_SGh.js} +1 -1
  320. package/web-shell/assets/{diagram-VX7I27RA-BQH8QiDk.js → diagram-VX7I27RA-DOJL0wub.js} +1 -1
  321. package/web-shell/assets/{diagram-Z3DM3KII-B_aQ1cw0.js → diagram-Z3DM3KII-DRIiodDD.js} +1 -1
  322. package/web-shell/assets/{ebnfDiagram-PWID7BFC-B9N7BRQE.js → ebnfDiagram-PWID7BFC-Db31Ulmb.js} +1 -1
  323. package/web-shell/assets/{erDiagram-SSCWMZ5O-Cx6Hb1Re.js → erDiagram-SSCWMZ5O-CVHhwI2_.js} +1 -1
  324. package/web-shell/assets/{flowDiagram-A5DVABFB-DTuLP7GU.js → flowDiagram-A5DVABFB-DWOFy1FK.js} +1 -1
  325. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-DYS3d-sL.js → ganttDiagram-EL5Y4UJY-C0sxQtPd.js} +1 -1
  326. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-Cp0EGx04.js → gitGraphDiagram-WWUBYQGX-CNituBYC.js} +1 -1
  327. package/web-shell/assets/index-B15NlwB8.js +2213 -0
  328. package/web-shell/assets/index-BSrS0tQ6.css +36 -0
  329. package/web-shell/assets/{index-45-LkPDB.js → index-gm9tLk7h.js} +1 -1
  330. package/web-shell/assets/{infoDiagram-RXCK75RN-9--kukiT.js → infoDiagram-RXCK75RN-CxhJYtIR.js} +1 -1
  331. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-CGBdsDLD.js → ishikawaDiagram-5VMMS53U-By2mchUy.js} +1 -1
  332. package/web-shell/assets/{journeyDiagram-EYS64GPL-DeXhcscd.js → journeyDiagram-EYS64GPL-CVH-OweI.js} +1 -1
  333. package/web-shell/assets/{kanban-definition-3QL26DDD-CFdvsU3b.js → kanban-definition-3QL26DDD-Cc9dQXLy.js} +1 -1
  334. package/web-shell/assets/knowledge-Dg9788h4.svg +1 -0
  335. package/web-shell/assets/{layout-DAnwQ3KB.js → layout-C_60ysHw.js} +1 -1
  336. package/web-shell/assets/{linear-CTo7v7Nh.js → linear-BvAVfqwu.js} +1 -1
  337. package/web-shell/assets/{mermaid.core-jggSxF1i.js → mermaid.core-C3CoBKAc.js} +6 -6
  338. package/web-shell/assets/{mindmap-definition-FBJOCRG2-DzIepvlJ.js → mindmap-definition-FBJOCRG2-Cuu8Q8LM.js} +1 -1
  339. package/web-shell/assets/{pegDiagram-XKGWAZYB-BFGS9GJv.js → pegDiagram-XKGWAZYB-DmAeyDO2.js} +1 -1
  340. package/web-shell/assets/{pieDiagram-E7YTZNPT-B2UUcNIT.js → pieDiagram-E7YTZNPT-B7vbB_xv.js} +1 -1
  341. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-BgM6htrX.js → quadrantDiagram-AXDQQJYC-BqOBkRR7.js} +1 -1
  342. package/web-shell/assets/{railroadDiagram-O6MQD6OU-Dk9cS7N-.js → railroadDiagram-O6MQD6OU-sI06lZIu.js} +1 -1
  343. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-C9oRg7xi.js → requirementDiagram-EFPCY7ZU-Bg13d10S.js} +1 -1
  344. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-B-_c7GzI.js → sankeyDiagram-P5KCCOFB-WFOzZHrR.js} +1 -1
  345. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-R0M-347u.js → sequenceDiagram-WJ2MYXX4-CCdRbA4E.js} +1 -1
  346. package/web-shell/assets/{sizeCapture-X5ZJPWSS-Df0f8UAW.js → sizeCapture-X5ZJPWSS-BH5F3bGg.js} +1 -1
  347. package/web-shell/assets/{stateDiagram-HBIQ2CUA-CsUEfAA-.js → stateDiagram-HBIQ2CUA-NwS2X3QB.js} +1 -1
  348. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-1aU2JZXO.js +1 -0
  349. package/web-shell/assets/{swimlanes-XN3QIQJK-9OGHVSrx.js → swimlanes-XN3QIQJK-Bm38pM28.js} +1 -1
  350. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Dp-u6kQG.js +8 -0
  351. package/web-shell/assets/{timeline-definition-24CTP7MA-DAfGqS2B.js → timeline-definition-24CTP7MA-Do-agLSo.js} +1 -1
  352. package/web-shell/assets/{vennDiagram-4TSXK5OY-CKATpwHi.js → vennDiagram-4TSXK5OY-aggLfZzl.js} +1 -1
  353. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CQHdhTrm.js → wardleyDiagram-VM6X3IG4-D5JR3mXX.js} +1 -1
  354. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-5k9NLqlY.js → xychartDiagram-S5SC5T6Z-DhtLDuXs.js} +1 -1
  355. package/web-shell/index.html +2 -2
  356. package/chunks/chunk-7MIBD3LG.js +0 -137
  357. package/chunks/chunk-ARDHE6MM.js +0 -235
  358. package/chunks/chunk-C75BXMPM.js +0 -169
  359. package/chunks/chunk-ERU3SDXT.js +0 -27
  360. package/chunks/chunk-FPGTNKCP.js +0 -251
  361. package/chunks/chunk-JL6APGBX.js +0 -43
  362. package/chunks/chunk-L5OBTAXN.js +0 -137
  363. package/chunks/chunk-MZ3W3F44.js +0 -4172
  364. package/chunks/chunk-OIDF7L67.js +0 -514
  365. package/chunks/chunk-VSXX6VUI.js +0 -2812
  366. package/chunks/chunk-ZFYACOVD.js +0 -1416
  367. package/web-shell/assets/channel-DSQQnOZj.js +0 -1
  368. package/web-shell/assets/classDiagram-DTDB5LWJ-V94ta08R.js +0 -1
  369. package/web-shell/assets/classDiagram-v2-JRS7N3AN-V94ta08R.js +0 -1
  370. package/web-shell/assets/index-H8um-iEl.js +0 -2207
  371. package/web-shell/assets/index-n6N-2a3v.css +0 -36
  372. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-CnSuTPJ2.js +0 -1
  373. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Bb7TcWQw.js +0 -8
  374. package/chunks/{chunk-QZW6WRB7.js → chunk-5NUKK2DT.js} +2 -2
  375. package/chunks/{chunk-JS73NNWF.js → chunk-FUSEMYFX.js} +0 -0
  376. package/chunks/{chunk-SVWWF5TZ.js → chunk-WVURIAEE.js} +3 -3
  377. package/chunks/{task-update-RI7QNVDP.js → task-update-3LSYQDRW.js} +4 -4
@@ -8,7 +8,9 @@ import {
8
8
  addShellCommandToLlmHistory,
9
9
  computeWindowTitle,
10
10
  editorSettingsManager,
11
+ extensionComponentsSummary,
11
12
  fmtTokens,
13
+ formatSourceLabel,
12
14
  getScopeItems,
13
15
  getScopeMessageForSetting,
14
16
  getSeriesColors,
@@ -28,46 +30,15 @@ import {
28
30
  useProviderSetupFlow,
29
31
  useTimer,
30
32
  writeTerminalTitle
31
- } from "./chunk-GTBXQ5W2.js";
32
- import "./chunk-YDFOHRS5.js";
33
- import "./chunk-JF2CFBDK.js";
33
+ } from "./chunk-WSJI6ODG.js";
34
+ import "./chunk-2GP6BQ2J.js";
35
+ import "./chunk-HYHSMTRA.js";
34
36
  import {
35
37
  startPostRenderPrefetches
36
- } from "./chunk-4DZMYFZA.js";
37
- import {
38
- STATUS_LINE_PRESET_ITEMS,
39
- SessionStatsProvider,
40
- TOOL_DISPLAY_BY_NAME,
41
- TOOL_SUCCESS_RATE_HIGH,
42
- TOOL_SUCCESS_RATE_MEDIUM,
43
- flattenModelsBySource,
44
- formatDuration as formatDuration2,
45
- formatTokenCount as formatTokenCount2,
46
- getArenaStatusLabel,
47
- getStatusColor,
48
- keyMatchers,
49
- useSessionStats
50
- } from "./chunk-TDFLM7BE.js";
51
- import {
52
- ICON,
53
- SPINNER_FRAMES,
54
- SPINNER_INTERVAL_MS,
55
- TOOL_STATUS,
56
- applyCollapsePolicyAndSummary,
57
- buildResumedHistoryItems,
58
- coalesceFindingsHistoryItems,
59
- isFindingsListDisplay,
60
- shouldDisplayGoalStateCause,
61
- waitForGoalRuntime,
62
- wrapAnsi
63
- } from "./chunk-RYREFZFH.js";
64
- import {
65
- stopAndGetCapturedInput
66
- } from "./chunk-EWNKP4V4.js";
38
+ } from "./chunk-IKBEIDOH.js";
67
39
  import {
68
40
  emitAutoModeEntryNotices
69
- } from "./chunk-S4M6BDNE.js";
70
- import "./chunk-LWUTZKDU.js";
41
+ } from "./chunk-V4JJAVHQ.js";
71
42
  import {
72
43
  fireSessionDeleteHook
73
44
  } from "./chunk-L34XSHIZ.js";
@@ -76,12 +47,13 @@ import {
76
47
  handleAtCommand,
77
48
  normalizeDescription,
78
49
  sanitizeDisplayText
79
- } from "./chunk-WYRSEVBQ.js";
50
+ } from "./chunk-WNQIJTOP.js";
80
51
  import {
81
52
  BuiltinCommandLoader,
82
53
  BundledSkillLoader,
83
54
  CONTEXT_FILES_ANNOUNCEMENT_PREFIX,
84
55
  CommandService,
56
+ DISPLAY_HOOK_EVENTS,
85
57
  FileCommandLoader,
86
58
  MAX_STACKED_SKILLS,
87
59
  McpPromptLoader,
@@ -95,6 +67,7 @@ import {
95
67
  findMidInputSlashCommand,
96
68
  formatApprovalModeName,
97
69
  formatUserPromptExpansionBlockedMessage,
70
+ getHookShortDescription,
98
71
  hasBlockingBackgroundWork,
99
72
  hasSlashCommandPathSeparator,
100
73
  isAtCommand,
@@ -105,17 +78,36 @@ import {
105
78
  isStackedSkillCompletableCommand,
106
79
  isValidStackedSkillPrefix,
107
80
  loadSessionOutputStyles,
81
+ normalizeMatcher,
108
82
  parseSlashCommand,
109
83
  parseStackedSlashCommands,
110
84
  recordAutoSkillCommandUsage,
111
85
  refreshExtensionContentRuntime,
112
86
  resetBackgroundStateForSessionSwitch,
113
- serializeUserPromptExpansionPrompt
114
- } from "./chunk-PN6D5LWJ.js";
87
+ serializeUserPromptExpansionPrompt,
88
+ supportsMatchers
89
+ } from "./chunk-HX4WXX3H.js";
115
90
  import {
116
91
  EXTENSION_RELOAD_FAILED_REASON,
117
92
  ExtensionRefreshState
118
- } from "./chunk-6IHJLXNF.js";
93
+ } from "./chunk-CXY6BICQ.js";
94
+ import "./chunk-NYX53SV4.js";
95
+ import "./chunk-TPY6HW55.js";
96
+ import {
97
+ STATUS_LINE_PRESET_ITEMS,
98
+ SessionStatsProvider,
99
+ TOOL_DISPLAY_BY_NAME,
100
+ TOOL_SUCCESS_RATE_HIGH,
101
+ TOOL_SUCCESS_RATE_MEDIUM,
102
+ flattenModelsBySource,
103
+ formatDuration as formatDuration2,
104
+ formatTokenCount as formatTokenCount2,
105
+ getArenaStatusLabel,
106
+ getStatusColor,
107
+ keyMatchers,
108
+ useSessionStats
109
+ } from "./chunk-OALXNGUA.js";
110
+ import "./chunk-M22WLKLI.js";
119
111
  import {
120
112
  calculateCost,
121
113
  computeSessionStats,
@@ -128,31 +120,37 @@ import {
128
120
  getSystemInfoFields,
129
121
  levelLabel,
130
122
  redactProxy
131
- } from "./chunk-OZ2KDR2L.js";
132
- import {
133
- contextUsageLabel,
134
- formatDuration,
135
- formatPercentageUsed,
136
- formatTokenCount
137
- } from "./chunk-YGFJ6BRT.js";
138
- import "./chunk-NYX53SV4.js";
123
+ } from "./chunk-Y2KJC55Y.js";
139
124
  import {
140
125
  CTRL_EXIT_PROMPT_DURATION_MS,
141
126
  cleanupOldClipboardImages,
142
127
  clipboardHasImage,
143
128
  saveClipboardImage
144
- } from "./chunk-FBDHP23D.js";
145
- import "./chunk-RVK37FWG.js";
129
+ } from "./chunk-OSG23MR3.js";
146
130
  import "./chunk-4WGODMVR.js";
147
- import "./chunk-KW7NOTN6.js";
131
+ import {
132
+ ICON,
133
+ SPINNER_FRAMES,
134
+ SPINNER_INTERVAL_MS,
135
+ TOOL_STATUS,
136
+ applyCollapsePolicyAndSummary,
137
+ buildResumedHistoryItems,
138
+ coalesceFindingsHistoryItems,
139
+ isFindingsListDisplay,
140
+ shouldDisplayGoalStateCause,
141
+ waitForGoalRuntime,
142
+ wrapAnsi
143
+ } from "./chunk-36NRLIR6.js";
144
+ import {
145
+ contextUsageLabel,
146
+ formatDuration,
147
+ formatPercentageUsed,
148
+ formatTokenCount
149
+ } from "./chunk-AZCTY64Z.js";
148
150
  import "./chunk-4LIPOIXS.js";
149
151
  import {
150
152
  require_jsx_runtime
151
153
  } from "./chunk-SV5PQVQE.js";
152
- import {
153
- AUTO_THEME_NAME,
154
- themeManager
155
- } from "./chunk-2XRE4KE4.js";
156
154
  import {
157
155
  require_constants,
158
156
  require_react_reconciler
@@ -160,25 +158,33 @@ import {
160
158
  import {
161
159
  require_react
162
160
  } from "./chunk-5QWWOFGG.js";
163
- import "./chunk-5CDDYYNI.js";
161
+ import {
162
+ stopAndGetCapturedInput
163
+ } from "./chunk-EWNKP4V4.js";
164
164
  import "./chunk-C4HBZQNH.js";
165
165
  import {
166
166
  setUpdateHandler
167
- } from "./chunk-TATT2THJ.js";
167
+ } from "./chunk-GI7SLDOI.js";
168
168
  import "./chunk-EKTCKZV5.js";
169
- import "./chunk-WPMRT4AR.js";
169
+ import {
170
+ AUTO_THEME_NAME,
171
+ themeManager
172
+ } from "./chunk-2XRE4KE4.js";
173
+ import "./chunk-KW7NOTN6.js";
174
+ import "./chunk-FBY32737.js";
175
+ import {
176
+ getErrorMessage as getErrorMessage2
177
+ } from "./chunk-B6RMK4ED.js";
178
+ import "./chunk-QT6Z2IBF.js";
179
+ import "./chunk-UQGRJTDK.js";
170
180
  import "./chunk-YAF2MQZ6.js";
181
+ import "./chunk-B5TJK7B3.js";
171
182
  import "./chunk-24FVUD5P.js";
172
- import "./chunk-B6KSTADQ.js";
183
+ import "./chunk-ZMYKNKET.js";
173
184
  import "./chunk-6H67XLET.js";
174
- import "./chunk-3ADU34IF.js";
175
- import {
176
- getErrorMessage as getErrorMessage2
177
- } from "./chunk-7MKB7L25.js";
178
- import "./chunk-MJGJF6G6.js";
185
+ import "./chunk-HNFKYKHH.js";
179
186
  import "./chunk-M3JGHRMQ.js";
180
187
  import "./chunk-VFFQAOPR.js";
181
- import "./chunk-2S2WIGCM.js";
182
188
  import {
183
189
  cpLen,
184
190
  escapeAnsiCtrlCodes,
@@ -190,63 +196,64 @@ import {
190
196
  toCodePoints,
191
197
  truncateToWidth
192
198
  } from "./chunk-47ECGEJC.js";
199
+ import "./chunk-Y4NNIGYO.js";
193
200
  import "./chunk-2MIN6GRR.js";
194
201
  import "./chunk-QHTIBUWB.js";
195
202
  import "./chunk-TXASDT2M.js";
196
203
  import "./chunk-PB7JBAHF.js";
197
204
  import "./chunk-DMEUXLSS.js";
198
205
  import "./chunk-4VQBQLIZ.js";
206
+ import "./chunk-7D4CV7JH.js";
199
207
  import {
200
208
  isValidSessionId
201
209
  } from "./chunk-ZEZKIS2K.js";
202
210
  import {
203
211
  formatUnsupportedVoiceModelMessage,
204
212
  isSelectableVoiceModel
205
- } from "./chunk-ADQUK6WA.js";
213
+ } from "./chunk-KVC7HZWK.js";
206
214
  import "./chunk-Y53DG2HA.js";
215
+ import {
216
+ getExtendedSystemInfo
217
+ } from "./chunk-FX6PZBOV.js";
218
+ import "./chunk-3LLEB5CU.js";
207
219
  import {
208
220
  getReasoningEffortsForConfig
209
- } from "./chunk-MJHLKWGJ.js";
210
- import "./chunk-LMJSPC55.js";
211
- import "./chunk-Q3TFRP5G.js";
221
+ } from "./chunk-4QPVZA5J.js";
222
+ import "./chunk-UZSB57EV.js";
223
+ import "./chunk-4FLUQWJ4.js";
224
+ import "./chunk-D7JMO2GP.js";
225
+ import "./chunk-WZWTY7SG.js";
226
+ import "./chunk-E2VSBAFA.js";
227
+ import "./chunk-57OAHC2Y.js";
228
+ import "./chunk-SYMXYRM5.js";
229
+ import "./chunk-U4AASWUQ.js";
230
+ import "./chunk-LFKXIOGC.js";
212
231
  import {
213
232
  createLoadedSettingsAdapter
214
- } from "./chunk-CALVKIIG.js";
215
- import {
216
- getExtendedSystemInfo
217
- } from "./chunk-ZTVYMZBD.js";
218
- import "./chunk-B2VSRPS6.js";
219
- import "./chunk-7U5G6JXI.js";
233
+ } from "./chunk-FIJODK52.js";
234
+ import "./chunk-KWYTSSTJ.js";
220
235
  import "./chunk-WCCLLK7X.js";
221
236
  import "./chunk-LYD3T3H7.js";
222
- import "./chunk-JBS56C7O.js";
223
- import "./chunk-INGBUYL6.js";
224
- import "./chunk-VN5G33G7.js";
225
- import "./chunk-HJAJ6MR6.js";
226
- import "./chunk-57OAHC2Y.js";
227
- import "./chunk-IAS753HG.js";
228
- import "./chunk-5ODRE7E5.js";
229
- import "./chunk-ABNX6E6K.js";
230
237
  import "./chunk-V6WHFGST.js";
231
- import "./chunk-TBSCTWKF.js";
238
+ import "./chunk-RN6A53UJ.js";
232
239
  import "./chunk-6PLDPT2C.js";
233
240
  import "./chunk-FYJ7W2PI.js";
234
241
  import "./chunk-STUJ7IMZ.js";
242
+ import "./chunk-L3SNMEDW.js";
235
243
  import "./chunk-GYTKQYDB.js";
236
- import "./chunk-WD6YQI5M.js";
237
244
  import "./chunk-GDWE23OR.js";
238
- import "./chunk-RKFGE7JH.js";
239
245
  import "./chunk-CJ3DHN5I.js";
246
+ import "./chunk-RKFGE7JH.js";
240
247
  import "./chunk-UDG5EZJI.js";
241
- import "./chunk-3VUENPWF.js";
242
248
  import "./chunk-M5GB774H.js";
249
+ import "./chunk-3VUENPWF.js";
243
250
  import "./chunk-NFXXBWSE.js";
244
- import "./chunk-LWWRJRCD.js";
245
- import "./chunk-EPVEPTI3.js";
251
+ import "./chunk-ESBYWATJ.js";
252
+ import "./chunk-PZRXWQUA.js";
246
253
  import "./chunk-IJOS26LH.js";
247
254
  import {
248
255
  loadMcpApprovals
249
- } from "./chunk-RD2HAF25.js";
256
+ } from "./chunk-WL36KHUQ.js";
250
257
  import {
251
258
  getDefaultValue,
252
259
  getDialogSettingKeys,
@@ -263,31 +270,23 @@ import {
263
270
  saveModifiedSettings,
264
271
  setPendingSettingValueAny,
265
272
  validateSettingValue
266
- } from "./chunk-65BKWMMH.js";
273
+ } from "./chunk-RRI764F7.js";
274
+ import "./chunk-RKUWKYED.js";
267
275
  import {
268
276
  TOGGLE_TYPES,
269
277
  isNumericSettingType
270
- } from "./chunk-YP7QCE7X.js";
271
- import "./chunk-RKUWKYED.js";
278
+ } from "./chunk-AUX2FL5T.js";
279
+ import "./chunk-BW4333PP.js";
280
+ import "./chunk-IDS7MSUP.js";
272
281
  import {
273
282
  t
274
- } from "./chunk-I6YJZGHS.js";
283
+ } from "./chunk-GSAOVDTH.js";
275
284
  import "./chunk-5EJZE3FP.js";
276
- import "./chunk-FZQQMVLB.js";
285
+ import "./chunk-NKTMUPHJ.js";
286
+ import "./chunk-6OTF7TTE.js";
277
287
  import "./chunk-2AUM35J5.js";
278
288
  import "./chunk-SFL6U7U7.js";
279
- import "./chunk-BW4333PP.js";
280
- import "./chunk-IDS7MSUP.js";
281
- import "./chunk-XX5HQLCZ.js";
282
- import "./chunk-XFSFZCM5.js";
283
- import "./chunk-2EAZ43JQ.js";
284
- import "./chunk-NF5J2WFA.js";
285
- import {
286
- formatVersionLabel,
287
- getCliVersion
288
- } from "./chunk-IOXJX7XE.js";
289
- import "./chunk-W3N5XAZ6.js";
290
- import "./chunk-V77DTVCM.js";
289
+ import "./chunk-NQ272MQG.js";
291
290
  import "./chunk-NPQ5ZKRP.js";
292
291
  import "./chunk-MR3PXB6E.js";
293
292
  import {
@@ -295,35 +294,32 @@ import {
295
294
  Fzf,
296
295
  buildSessionRecoveryPlan,
297
296
  generatePromptSuggestion
298
- } from "./chunk-JATZTB7X.js";
297
+ } from "./chunk-347O2YZJ.js";
299
298
  import "./chunk-GELRJXE2.js";
300
299
  import "./chunk-32CM56LO.js";
300
+ import "./chunk-XFSFZCM5.js";
301
+ import "./chunk-2EAZ43JQ.js";
302
+ import "./chunk-NF5J2WFA.js";
303
+ import {
304
+ formatVersionLabel,
305
+ getCliVersion
306
+ } from "./chunk-AQP3H22J.js";
307
+ import "./chunk-W3N5XAZ6.js";
301
308
  import "./chunk-6WXVEDT2.js";
302
309
  import "./chunk-LJZSMWOH.js";
303
- import {
304
- ALIBABA_PROVIDERS,
305
- THIRD_PARTY_PROVIDERS,
306
- applyProviderInstallPlan,
307
- buildInstallPlan,
308
- customProvider,
309
- findExistingProviderModels,
310
- findProviderByCredentials,
311
- findProviderById,
312
- getDefaultModelIds,
313
- resolveMetadataKey
314
- } from "./chunk-VSXX6VUI.js";
315
- import "./chunk-7LG4MUUD.js";
316
- import "./chunk-EKMJR7M3.js";
317
- import "./chunk-EDB556X7.js";
318
- import "./chunk-QR4Q425T.js";
319
- import "./chunk-L2NII7PZ.js";
310
+ import "./chunk-VEXUA6DX.js";
311
+ import "./chunk-TXTCM3TC.js";
312
+ import "./chunk-X7AYIXC7.js";
313
+ import "./chunk-TRZ22SG5.js";
314
+ import "./chunk-3BZI5GDP.js";
315
+ import "./chunk-ZPJWUGCS.js";
316
+ import "./chunk-YM6KUQ2S.js";
317
+ import "./chunk-IXO2OCIP.js";
320
318
  import "./chunk-DJXSOEFB.js";
319
+ import "./chunk-SFHX5G2S.js";
321
320
  import "./chunk-5VQR2DD7.js";
322
321
  import "./chunk-BUQN5LTI.js";
323
- import "./chunk-ZPJWUGCS.js";
324
- import "./chunk-YM6KUQ2S.js";
325
- import "./chunk-MZ3W3F44.js";
326
- import "./chunk-NFQOOITE.js";
322
+ import "./chunk-LO2UWNO5.js";
327
323
  import {
328
324
  CoreToolScheduler,
329
325
  DISPLAY_MODE,
@@ -334,6 +330,7 @@ import {
334
330
  SessionService,
335
331
  ShellExecutionService,
336
332
  allowEditorTypeInSandbox,
333
+ buildHooksListing,
337
334
  buildHumanReadableRuleLabel,
338
335
  checkForExtensionUpdate,
339
336
  checkHasEditorType,
@@ -341,10 +338,10 @@ import {
341
338
  computeUniqueBranchTitle,
342
339
  didWriteProjectContextFile,
343
340
  getExtensionDisplayName,
344
- goalCheckpointHealthLine,
345
341
  initParser,
346
342
  isEditorAvailable,
347
343
  isGatedMcpScope,
344
+ isLegacyMillisecondHookTimeout,
348
345
  isSettledStatus,
349
346
  isSignalTermination,
350
347
  isSuccessStatus,
@@ -354,33 +351,39 @@ import {
354
351
  parseRule,
355
352
  parseVisionModelSetting,
356
353
  refreshMemoryInstruction
357
- } from "./chunk-AYMSNIYL.js";
354
+ } from "./chunk-KAYC5FBN.js";
358
355
  import "./chunk-GOFAQQZA.js";
356
+ import "./chunk-65I7S4Z3.js";
359
357
  import "./chunk-HEOH7JZY.js";
360
358
  import "./chunk-TWPJO254.js";
361
359
  import "./chunk-CQ35AJ4Z.js";
362
- import "./chunk-65I7S4Z3.js";
360
+ import "./chunk-IVFTLUZD.js";
363
361
  import "./chunk-7CLLH5TI.js";
364
362
  import "./chunk-WK6DEH3Q.js";
365
363
  import "./chunk-6PVPNMXU.js";
366
364
  import {
367
- isImageGenerationCapable,
368
365
  resolveModelId
369
- } from "./chunk-ZFYACOVD.js";
370
- import "./chunk-ME4JBHSB.js";
371
- import "./chunk-GNV2SFO7.js";
366
+ } from "./chunk-DX6JTDMR.js";
367
+ import "./chunk-VQDWCQOE.js";
372
368
  import "./chunk-5EZRLTLQ.js";
373
369
  import "./chunk-QHWCP53L.js";
374
370
  import "./chunk-3LMDSCLU.js";
371
+ import "./chunk-QJNDUTOL.js";
375
372
  import "./chunk-O6GEWCJA.js";
376
373
  import {
377
374
  writeRuntimeStatus
378
- } from "./chunk-WKVZES7O.js";
379
- import "./chunk-NJ2OFVUX.js";
380
- import "./chunk-HFJSQ4GL.js";
381
- import "./chunk-QJNDUTOL.js";
375
+ } from "./chunk-CXONOVBN.js";
376
+ import {
377
+ registerSession
378
+ } from "./chunk-OWUAZXXN.js";
379
+ import "./chunk-CH2YDT6X.js";
380
+ import {
381
+ goalCheckpointHealthLine
382
+ } from "./chunk-P42KMMU6.js";
383
+ import "./chunk-BTICBRPL.js";
382
384
  import "./chunk-V545KI73.js";
383
- import "./chunk-MQRLLBMQ.js";
385
+ import "./chunk-ADN5KESB.js";
386
+ import "./chunk-PPJSG2PU.js";
384
387
  import "./chunk-ELRMZTPF.js";
385
388
  import "./chunk-U6H3XTFA.js";
386
389
  import {
@@ -390,23 +393,20 @@ import {
390
393
  formatMemoryUsage
391
394
  } from "./chunk-CHEIIBT3.js";
392
395
  import "./chunk-AEWCOE64.js";
393
- import {
394
- registerSession
395
- } from "./chunk-OWUAZXXN.js";
396
- import "./chunk-CH2YDT6X.js";
397
396
  import {
398
397
  APPROVAL_MODES
399
398
  } from "./chunk-JX6XHPTX.js";
400
399
  import "./chunk-ZSTCM3MX.js";
400
+ import "./chunk-SK3RZOPS.js";
401
401
  import "./chunk-MLXTMF7H.js";
402
- import "./chunk-AXZMWAJV.js";
402
+ import "./chunk-36SDZ2Q4.js";
403
403
  import {
404
404
  NO_EXEC_CONFIG
405
405
  } from "./chunk-NXUZFW3G.js";
406
406
  import {
407
407
  clampInlineMediaPart
408
408
  } from "./chunk-WFNEY5G7.js";
409
- import "./chunk-GSS4SZNG.js";
409
+ import "./chunk-YP2K3WOS.js";
410
410
  import "./chunk-BW2SMO6L.js";
411
411
  import "./chunk-S6LOFUVP.js";
412
412
  import "./chunk-VVI7MK3V.js";
@@ -417,20 +417,31 @@ import {
417
417
  } from "./chunk-IZ2U57NY.js";
418
418
  import "./chunk-Z72PLR74.js";
419
419
  import "./chunk-NUQ4GK5I.js";
420
- import "./chunk-CXXAZ2LZ.js";
420
+ import "./chunk-DC4ZNGH4.js";
421
421
  import "./chunk-NAVJD2PQ.js";
422
- import "./chunk-66N6C4EH.js";
423
- import "./chunk-FMLBBXHB.js";
422
+ import "./chunk-3WILPKTJ.js";
423
+ import "./chunk-DRAX5YAI.js";
424
424
  import "./chunk-VNOVK4I7.js";
425
425
  import "./chunk-S7UQ3V2H.js";
426
- import "./chunk-JL6APGBX.js";
427
426
  import "./chunk-DJ2GSRLV.js";
428
- import "./chunk-ZKIAGIGH.js";
429
- import "./chunk-VGY2RGXL.js";
430
- import "./chunk-C75BXMPM.js";
427
+ import "./chunk-3XBUCOWS.js";
428
+ import "./chunk-M4U2LTD2.js";
431
429
  import "./chunk-KFFCDLKV.js";
432
430
  import "./chunk-KP2FHIFR.js";
433
- import "./chunk-L6DIANLD.js";
431
+ import {
432
+ ALIBABA_PROVIDERS,
433
+ THIRD_PARTY_PROVIDERS,
434
+ applyProviderInstallPlan,
435
+ buildInstallPlan,
436
+ customProvider,
437
+ findExistingProviderModels,
438
+ findProviderByCredentials,
439
+ findProviderById,
440
+ getDefaultModelIds,
441
+ isImageGenerationCapable,
442
+ resolveMetadataKey
443
+ } from "./chunk-KEM7MWS7.js";
444
+ import "./chunk-G45B3INR.js";
434
445
  import {
435
446
  AuthEvent,
436
447
  ModelSlashCommandEvent,
@@ -454,34 +465,30 @@ import {
454
465
  shouldRunVisionBridge,
455
466
  splitImageParts,
456
467
  uiTelemetryService
457
- } from "./chunk-UB2MATP5.js";
468
+ } from "./chunk-CDDP4ONL.js";
458
469
  import "./chunk-5ETULJLP.js";
459
- import "./chunk-7MIBD3LG.js";
460
470
  import "./chunk-VGC4I5JJ.js";
461
471
  import {
462
472
  getAllGeminiMdFilenames,
463
473
  getUnsupportedImageFormatWarning,
464
474
  isSupportedImageMimeType
465
- } from "./chunk-QZW6WRB7.js";
475
+ } from "./chunk-5NUKK2DT.js";
466
476
  import "./chunk-EDIDYZBT.js";
467
477
  import "./chunk-HD7O6WLV.js";
468
478
  import "./chunk-CFMZLE3L.js";
469
479
  import "./chunk-WZAD4ZNJ.js";
480
+ import "./chunk-TIGXX4PA.js";
481
+ import "./chunk-XFFRI3WM.js";
470
482
  import {
471
483
  REASONING_EFFORT_TIERS,
472
484
  applyReasoningEffort
473
- } from "./chunk-ARDHE6MM.js";
474
- import "./chunk-FPGTNKCP.js";
475
- import "./chunk-TIGXX4PA.js";
476
- import "./chunk-OIDF7L67.js";
477
- import "./chunk-XFFRI3WM.js";
478
- import "./chunk-ERU3SDXT.js";
479
- import "./chunk-EWJTAP3Y.js";
485
+ } from "./chunk-GJKP6XOB.js";
486
+ import "./chunk-7O5PYQ3M.js";
480
487
  import "./chunk-HHJLM3WQ.js";
481
488
  import {
482
489
  isBinary,
483
490
  redactUrlCredentials
484
- } from "./chunk-4Y2I3CI3.js";
491
+ } from "./chunk-6USYH3EU.js";
485
492
  import "./chunk-74TONY4F.js";
486
493
  import "./chunk-SYROIHU7.js";
487
494
  import {
@@ -498,16 +505,16 @@ import {
498
505
  tildeifyPath
499
506
  } from "./chunk-ZAFYHRVY.js";
500
507
  import "./chunk-TBWQLLFO.js";
501
- import "./chunk-HIQEL7EM.js";
508
+ import "./chunk-QIPLWW6Q.js";
502
509
  import "./chunk-BSIOCNDK.js";
510
+ import {
511
+ registerCleanup,
512
+ runExitCleanup
513
+ } from "./chunk-H6L4NEAT.js";
503
514
  import {
504
515
  profileCheckpoint
505
516
  } from "./chunk-QILD6R27.js";
506
517
  import "./chunk-JVEGA3MM.js";
507
- import {
508
- registerCleanup,
509
- runExitCleanup
510
- } from "./chunk-7MIOAF77.js";
511
518
  import {
512
519
  writeStderrLine,
513
520
  writeStdoutLine
@@ -555,7 +562,7 @@ var require_jsx_dev_runtime = __commonJS({
555
562
 
556
563
  // packages/cli/src/ui/opentui/start-opentui-ui.tsx
557
564
  init_esbuild_shims();
558
- var import_react59 = __toESM(require_react(), 1);
565
+ var import_react61 = __toESM(require_react(), 1);
559
566
  import { stat as stat2 } from "node:fs/promises";
560
567
  import { basename as basename3 } from "node:path";
561
568
 
@@ -41075,7 +41082,7 @@ __name(useUpdateNoticeFlush, "useUpdateNoticeFlush");
41075
41082
 
41076
41083
  // packages/cli/src/ui/opentui/opentui-app-shell.tsx
41077
41084
  init_esbuild_shims();
41078
- var import_react54 = __toESM(require_react(), 1);
41085
+ var import_react56 = __toESM(require_react(), 1);
41079
41086
 
41080
41087
  // packages/cli/src/ui/opentui/live-session.ts
41081
41088
  init_esbuild_shims();
@@ -45487,7 +45494,7 @@ var OpenTuiErrorBoundary = class extends import_react18.Component {
45487
45494
 
45488
45495
  // packages/cli/src/ui/opentui/opentui-dialog-mount.tsx
45489
45496
  init_esbuild_shims();
45490
- var import_react44 = __toESM(require_react(), 1);
45497
+ var import_react46 = __toESM(require_react(), 1);
45491
45498
 
45492
45499
  // packages/cli/src/ui/opentui/help-overlay.tsx
45493
45500
  init_esbuild_shims();
@@ -47088,25 +47095,6 @@ function buildExtensionRows(config) {
47088
47095
  }));
47089
47096
  }
47090
47097
  __name(buildExtensionRows, "buildExtensionRows");
47091
- function extensionComponentsSummary(extension) {
47092
- const parts = [];
47093
- const mcpCount = extension.mcpServers ? Object.keys(extension.mcpServers).length : 0;
47094
- if (mcpCount) parts.push(t("{{count}} MCP", { count: String(mcpCount) }));
47095
- if (extension.skills?.length)
47096
- parts.push(
47097
- t("{{count}} Skills", { count: String(extension.skills.length) })
47098
- );
47099
- if (extension.commands?.length)
47100
- parts.push(
47101
- t("{{count}} Commands", { count: String(extension.commands.length) })
47102
- );
47103
- if (extension.agents?.length)
47104
- parts.push(
47105
- t("{{count}} Agents", { count: String(extension.agents.length) })
47106
- );
47107
- return parts.length ? parts.join(" \xB7 ") : t("None");
47108
- }
47109
- __name(extensionComponentsSummary, "extensionComponentsSummary");
47110
47098
  var extensionUnavailable = /* @__PURE__ */ __name(() => ({
47111
47099
  message: t("Extensions are not available in this environment."),
47112
47100
  changed: false,
@@ -51010,15 +50998,6 @@ function readHooksEnabled(config, settings) {
51010
50998
  return config?.getDisableAllHooks ? !config.getDisableAllHooks() : !(settings.merged.disableAllHooks ?? false);
51011
50999
  }
51012
51000
  __name(readHooksEnabled, "readHooksEnabled");
51013
- function OpenTuiHooksDialog({ config, settings, onClose }) {
51014
- useEsc(onClose);
51015
- const enabled = readHooksEnabled(config, settings);
51016
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Shell, { title: "Hooks", onClose, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("box", { flexDirection: "column", marginTop: 1, children: [
51017
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Row2, { label: "Hooks enabled:", value: enabled ? "yes" : "no" }),
51018
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.dim, children: "Lifecycle hooks run around tool/session events." })
51019
- ] }) });
51020
- }
51021
- __name(OpenTuiHooksDialog, "OpenTuiHooksDialog");
51022
51001
  function OpenTuiRewindDialog({ onClose }) {
51023
51002
  useEsc(onClose);
51024
51003
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Shell, { title: "Rewind", onClose, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("box", { flexDirection: "column", marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.dim, children: "Checkpoints let you rewind the conversation to an earlier turn." }) }) });
@@ -52814,17 +52793,379 @@ function OpenTuiOutputStyleDialog(props) {
52814
52793
  }
52815
52794
  __name(OpenTuiOutputStyleDialog, "OpenTuiOutputStyleDialog");
52816
52795
 
52796
+ // packages/cli/src/ui/opentui/dialogs-hooks.tsx
52797
+ init_esbuild_shims();
52798
+ var import_react44 = __toESM(require_react(), 1);
52799
+ var MAX_ROWS = 12;
52800
+ var DETAIL_LABEL_WIDTH = 18;
52801
+ function summarizeHookEvents(rows) {
52802
+ return DISPLAY_HOOK_EVENTS.map((event) => ({
52803
+ event,
52804
+ count: rows.filter((row) => row.eventName === event).length,
52805
+ description: getHookShortDescription(event)
52806
+ }));
52807
+ }
52808
+ __name(summarizeHookEvents, "summarizeHookEvents");
52809
+ function summarizeHookMatchers(rows, event) {
52810
+ const counts = /* @__PURE__ */ new Map();
52811
+ for (const row of rows) {
52812
+ if (row.eventName !== event) continue;
52813
+ const matcher = normalizeMatcher(row.matcher);
52814
+ counts.set(matcher, (counts.get(matcher) ?? 0) + 1);
52815
+ }
52816
+ return [...counts].map(([matcher, count]) => ({ matcher, count }));
52817
+ }
52818
+ __name(summarizeHookMatchers, "summarizeHookMatchers");
52819
+ function selectHookRows(rows, event, matcher) {
52820
+ return rows.filter(
52821
+ (row) => row.eventName === event && (matcher === void 0 || normalizeMatcher(row.matcher) === matcher)
52822
+ );
52823
+ }
52824
+ __name(selectHookRows, "selectHookRows");
52825
+ function openHookEvent(event) {
52826
+ return supportsMatchers(event) ? { step: "matchers", event } : { step: "handlers", event };
52827
+ }
52828
+ __name(openHookEvent, "openHookEvent");
52829
+ function previousHooksDialogView(view) {
52830
+ switch (view.step) {
52831
+ case "events":
52832
+ return void 0;
52833
+ case "matchers":
52834
+ return { step: "events" };
52835
+ case "handlers":
52836
+ return view.matcher === void 0 ? { step: "events" } : { step: "matchers", event: view.event };
52837
+ case "detail":
52838
+ return { step: "handlers", event: view.event, matcher: view.matcher };
52839
+ default: {
52840
+ const exhaustive = view;
52841
+ void exhaustive;
52842
+ return void 0;
52843
+ }
52844
+ }
52845
+ }
52846
+ __name(previousHooksDialogView, "previousHooksDialogView");
52847
+ function hooksBannerText(listing) {
52848
+ if (listing.safeMode) {
52849
+ return t("Safe mode is on, so no hooks run in this session.");
52850
+ }
52851
+ if (listing.bareMode) {
52852
+ return t("Bare mode is on, so no hooks run in this session.");
52853
+ }
52854
+ if (listing.allDisabled) {
52855
+ return t("All hooks are disabled by the disableAllHooks setting.");
52856
+ }
52857
+ return void 0;
52858
+ }
52859
+ __name(hooksBannerText, "hooksBannerText");
52860
+ function formatHookTimeout(row) {
52861
+ const timeout = row.timeout;
52862
+ if (typeof timeout !== "number") return String(timeout);
52863
+ if (row.hookType === "function" /* Function */) return `${timeout} ms`;
52864
+ if (row.hookType === "command" /* Command */ && isLegacyMillisecondHookTimeout(timeout)) {
52865
+ return `${timeout} ms`;
52866
+ }
52867
+ return `${timeout} s`;
52868
+ }
52869
+ __name(formatHookTimeout, "formatHookTimeout");
52870
+ function literalLabel(hookType) {
52871
+ switch (hookType) {
52872
+ case "http" /* Http */:
52873
+ return t("URL:");
52874
+ case "prompt" /* Prompt */:
52875
+ return t("Prompt:");
52876
+ default:
52877
+ return t("Command:");
52878
+ }
52879
+ }
52880
+ __name(literalLabel, "literalLabel");
52881
+ function hookDetailFields(row) {
52882
+ const fields = [[t("Event:"), row.eventName]];
52883
+ if (supportsMatchers(row.eventName)) {
52884
+ fields.push([t("Matcher:"), normalizeMatcher(row.matcher)]);
52885
+ }
52886
+ fields.push([t("Type:"), row.hookType]);
52887
+ fields.push([t("Source:"), formatSourceLabel(row.source)]);
52888
+ fields.push([t("Status:"), row.enabled ? t("enabled") : t("disabled")]);
52889
+ if (row.name) fields.push([t("Name:"), row.name]);
52890
+ if (row.description) fields.push([t("Desc:"), row.description]);
52891
+ if (row.commandText !== void 0) {
52892
+ fields.push([literalLabel(row.hookType), row.commandText]);
52893
+ }
52894
+ if (row.timeout !== void 0) {
52895
+ fields.push([t("Timeout:"), formatHookTimeout(row)]);
52896
+ }
52897
+ if (row.statusMessage) {
52898
+ fields.push([t("Status message:"), row.statusMessage]);
52899
+ }
52900
+ if (row.condition) fields.push([t("Condition:"), row.condition]);
52901
+ const options = [
52902
+ row.runsInBackground ? t("runs in background") : void 0,
52903
+ row.runsOnce ? t("runs once") : void 0,
52904
+ row.sequential ? t("sequential") : void 0
52905
+ ].filter((option) => option !== void 0);
52906
+ if (options.length > 0) fields.push([t("Options:"), options.join(", ")]);
52907
+ if (row.skillRoot) fields.push([t("Skill:"), row.skillRoot]);
52908
+ return fields;
52909
+ }
52910
+ __name(hookDetailFields, "hookDetailFields");
52911
+ function hookCountLabel(count) {
52912
+ return count === 1 ? t("{{count}} hook", { count: String(count) }) : t("{{count}} hooks", { count: String(count) });
52913
+ }
52914
+ __name(hookCountLabel, "hookCountLabel");
52915
+ function emptyListing(settings) {
52916
+ return {
52917
+ rows: [],
52918
+ allDisabled: !readHooksEnabled(void 0, settings),
52919
+ safeMode: false,
52920
+ bareMode: false
52921
+ };
52922
+ }
52923
+ __name(emptyListing, "emptyListing");
52924
+ function OpenTuiHooksDialog({
52925
+ config,
52926
+ settings,
52927
+ onClose,
52928
+ notice
52929
+ }) {
52930
+ const listing = (0, import_react44.useMemo)(
52931
+ () => config ? buildHooksListing(config) : emptyListing(settings),
52932
+ [config, settings]
52933
+ );
52934
+ const [view, setView] = (0, import_react44.useState)({ step: "events" });
52935
+ const events = (0, import_react44.useMemo)(
52936
+ () => summarizeHookEvents(listing.rows),
52937
+ [listing.rows]
52938
+ );
52939
+ const eventItems = (0, import_react44.useMemo)(
52940
+ () => events.map((summary) => ({ key: summary.event, value: summary.event })),
52941
+ [events]
52942
+ );
52943
+ const matcherEvent = view.step === "matchers" ? view.event : void 0;
52944
+ const matchers = (0, import_react44.useMemo)(
52945
+ () => matcherEvent === void 0 ? [] : summarizeHookMatchers(listing.rows, matcherEvent),
52946
+ [listing.rows, matcherEvent]
52947
+ );
52948
+ const matcherItems = (0, import_react44.useMemo)(
52949
+ () => matchers.map((group) => ({ key: group.matcher, value: group.matcher })),
52950
+ [matchers]
52951
+ );
52952
+ const handlerEvent = view.step === "handlers" || view.step === "detail" ? view.event : void 0;
52953
+ const handlerMatcher = view.step === "handlers" || view.step === "detail" ? view.matcher : void 0;
52954
+ const handlerRows = (0, import_react44.useMemo)(
52955
+ () => handlerEvent === void 0 ? [] : selectHookRows(listing.rows, handlerEvent, handlerMatcher),
52956
+ [listing.rows, handlerEvent, handlerMatcher]
52957
+ );
52958
+ const handlerItems = (0, import_react44.useMemo)(
52959
+ () => handlerRows.map((_2, index) => ({ key: String(index), value: index })),
52960
+ [handlerRows]
52961
+ );
52962
+ const eventSelect = useDialogSelect({
52963
+ items: eventItems,
52964
+ focused: view.step === "events",
52965
+ maxItemsToShow: MAX_ROWS,
52966
+ onSelect: /* @__PURE__ */ __name((event) => setView(openHookEvent(event)), "onSelect")
52967
+ });
52968
+ const matcherSelect = useDialogSelect({
52969
+ items: matcherItems,
52970
+ focused: view.step === "matchers",
52971
+ resyncKey: `matchers:${matcherEvent ?? ""}`,
52972
+ maxItemsToShow: MAX_ROWS,
52973
+ onSelect: /* @__PURE__ */ __name((matcher) => {
52974
+ if (matcherEvent !== void 0) {
52975
+ setView({ step: "handlers", event: matcherEvent, matcher });
52976
+ }
52977
+ }, "onSelect")
52978
+ });
52979
+ const handlerSelect = useDialogSelect({
52980
+ items: handlerItems,
52981
+ focused: view.step === "handlers",
52982
+ resyncKey: `handlers:${handlerEvent ?? ""}:${handlerMatcher ?? ""}`,
52983
+ maxItemsToShow: MAX_ROWS,
52984
+ onSelect: /* @__PURE__ */ __name((index) => {
52985
+ if (handlerEvent !== void 0) {
52986
+ setView({
52987
+ step: "detail",
52988
+ event: handlerEvent,
52989
+ matcher: handlerMatcher,
52990
+ index
52991
+ });
52992
+ }
52993
+ }, "onSelect")
52994
+ });
52995
+ useKeyboard((key) => {
52996
+ if (toOriginalKey(key).name !== "escape") return;
52997
+ const previous = previousHooksDialogView(view);
52998
+ if (previous) {
52999
+ setView(previous);
53000
+ } else {
53001
+ onClose();
53002
+ }
53003
+ });
53004
+ const total = listing.rows.length;
53005
+ const countText = total === 1 ? t("{{count}} hook configured", { count: String(total) }) : t("{{count}} hooks configured", { count: String(total) });
53006
+ const banner = hooksBannerText(listing);
53007
+ const wheel = /* @__PURE__ */ __name((select, length) => (direction) => select.highlightIndex(
53008
+ Math.max(
53009
+ 0,
53010
+ Math.min(
53011
+ length - 1,
53012
+ select.activeIndex + (direction === "down" ? 1 : -1)
53013
+ )
53014
+ )
53015
+ ), "wheel");
53016
+ const renderEvents = /* @__PURE__ */ __name(() => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("box", { flexDirection: "column", children: [
53017
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.dim, children: t(
53018
+ "This menu is read-only. To add or modify hooks, edit settings.json directly or ask Qwen Code."
53019
+ ) }),
53020
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("box", { marginTop: 1, flexDirection: "column", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
53021
+ DialogSelect,
53022
+ {
53023
+ items: eventItems,
53024
+ activeIndex: eventSelect.activeIndex,
53025
+ scrollOffset: eventSelect.scrollOffset,
53026
+ maxItemsToShow: MAX_ROWS,
53027
+ showScrollArrows: true,
53028
+ focused: view.step === "events",
53029
+ onHover: eventSelect.highlightIndex,
53030
+ onWheel: wheel(eventSelect, eventItems.length),
53031
+ onSelectIndex: eventSelect.selectIndex,
53032
+ renderLabel: (item, context) => {
53033
+ const summary = events.find((entry) => entry.event === item.value);
53034
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("box", { flexDirection: "row", children: [
53035
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: context.titleColor, children: item.value }),
53036
+ summary && summary.count > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.green, children: ` (${summary.count})` }) : null,
53037
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.dim, children: ` ${summary?.description ?? ""}` })
53038
+ ] });
53039
+ }
53040
+ }
53041
+ ) })
53042
+ ] }), "renderEvents");
53043
+ const renderEmpty = /* @__PURE__ */ __name((message) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("box", { flexDirection: "column", children: [
53044
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.dim, children: message }),
53045
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.dim, children: t("To add hooks, edit settings.json directly or ask Qwen.") })
53046
+ ] }), "renderEmpty");
53047
+ const renderMatchers = /* @__PURE__ */ __name((event) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("box", { flexDirection: "column", children: [
53048
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.text, children: `${event} - ${t("Matchers")}` }),
53049
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("box", { marginTop: 1, flexDirection: "column", children: matcherItems.length === 0 ? renderEmpty(t("No hooks configured for this event.")) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
53050
+ DialogSelect,
53051
+ {
53052
+ items: matcherItems,
53053
+ activeIndex: matcherSelect.activeIndex,
53054
+ scrollOffset: matcherSelect.scrollOffset,
53055
+ maxItemsToShow: MAX_ROWS,
53056
+ focused: view.step === "matchers",
53057
+ onHover: matcherSelect.highlightIndex,
53058
+ onWheel: wheel(matcherSelect, matcherItems.length),
53059
+ onSelectIndex: matcherSelect.selectIndex,
53060
+ renderLabel: (item, context) => {
53061
+ const group = matchers.find(
53062
+ (entry) => entry.matcher === item.value
53063
+ );
53064
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("box", { flexDirection: "row", children: [
53065
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: context.titleColor, children: item.value }),
53066
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.dim, children: ` \xB7 ${hookCountLabel(group?.count ?? 0)}` })
53067
+ ] });
53068
+ }
53069
+ }
53070
+ ) })
53071
+ ] }), "renderMatchers");
53072
+ const renderHandlers = /* @__PURE__ */ __name((event, matcher) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("box", { flexDirection: "column", children: [
53073
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.text, children: matcher === void 0 ? event : `${event} - ${t("Matcher:")} ${matcher}` }),
53074
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.dim, children: getHookShortDescription(event) }),
53075
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("box", { marginTop: 1, flexDirection: "column", children: handlerItems.length === 0 ? renderEmpty(
53076
+ matcher === void 0 ? t("No hooks configured for this event.") : t("No hooks configured for this matcher.")
53077
+ ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
53078
+ DialogSelect,
53079
+ {
53080
+ items: handlerItems,
53081
+ activeIndex: handlerSelect.activeIndex,
53082
+ scrollOffset: handlerSelect.scrollOffset,
53083
+ maxItemsToShow: MAX_ROWS,
53084
+ focused: view.step === "handlers",
53085
+ onHover: handlerSelect.highlightIndex,
53086
+ onWheel: wheel(handlerSelect, handlerItems.length),
53087
+ onSelectIndex: handlerSelect.selectIndex,
53088
+ renderLabel: (item, context) => {
53089
+ const row = handlerRows[item.value];
53090
+ if (!row) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: context.titleColor, children: "" });
53091
+ const type = row.runsInBackground ? `${row.hookType} async` : row.hookType;
53092
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("box", { flexDirection: "row", children: [
53093
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: context.titleColor, children: `[${type}] ${row.displayText}` }),
53094
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
53095
+ "text",
53096
+ {
53097
+ fg: C2.dim,
53098
+ children: ` \xB7 ${formatSourceLabel(row.source)}`
53099
+ }
53100
+ ),
53101
+ row.enabled ? null : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.yellow, children: ` ${t("disabled")}` })
53102
+ ] });
53103
+ }
53104
+ }
53105
+ ) })
53106
+ ] }), "renderHandlers");
53107
+ const renderDetail = /* @__PURE__ */ __name((row) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("box", { flexDirection: "column", children: [
53108
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.text, attributes: 1, children: t("Hook details") }),
53109
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("box", { marginTop: 1, flexDirection: "column", children: hookDetailFields(row).map(([label, value]) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("box", { flexDirection: "row", children: [
53110
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("box", { width: DETAIL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.dim, children: label }) }),
53111
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("box", { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.text, children: value }) })
53112
+ ] }, label)) }),
53113
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("box", { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.dim, children: t(
53114
+ "To modify or remove this hook, edit settings.json directly or ask Qwen to help."
53115
+ ) }) })
53116
+ ] }), "renderDetail");
53117
+ let body;
53118
+ let footer;
53119
+ switch (view.step) {
53120
+ case "events":
53121
+ body = renderEvents();
53122
+ footer = t("Enter to select \xB7 Esc to cancel");
53123
+ break;
53124
+ case "matchers":
53125
+ body = renderMatchers(view.event);
53126
+ footer = t("Enter to select \xB7 Esc to go back");
53127
+ break;
53128
+ case "handlers":
53129
+ body = renderHandlers(view.event, view.matcher);
53130
+ footer = t("Enter to select \xB7 Esc to go back");
53131
+ break;
53132
+ case "detail": {
53133
+ const row = handlerRows[view.index];
53134
+ body = row ? renderDetail(row) : renderHandlers(view.event, view.matcher);
53135
+ footer = t("Esc to go back");
53136
+ break;
53137
+ }
53138
+ default: {
53139
+ const exhaustive = view;
53140
+ void exhaustive;
53141
+ body = null;
53142
+ footer = "";
53143
+ }
53144
+ }
53145
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DialogFrame, { children: [
53146
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("box", { flexDirection: "row", children: [
53147
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.accent, attributes: 1, children: t("Hooks") }),
53148
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.dim, children: ` \xB7 ${countText}` })
53149
+ ] }),
53150
+ notice ? notice.split("\n").map((line, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.dim, children: line }, `notice-${index}`)) : null,
53151
+ banner ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("box", { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.yellow, children: banner }) }) : null,
53152
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("box", { marginTop: 1, flexDirection: "column", children: body }),
53153
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FooterHint, { text: footer })
53154
+ ] });
53155
+ }
53156
+ __name(OpenTuiHooksDialog, "OpenTuiHooksDialog");
53157
+
52817
53158
  // packages/cli/src/ui/opentui/opentui-dialog-mount.tsx
52818
53159
  function OpenTuiDialogMount(props) {
52819
53160
  const { request, host, config, settings, commands, onClose, notify } = props;
52820
53161
  const isHelp = request.dialog === "help";
52821
53162
  const dimensions = useTerminalDimensions();
52822
- const [permissions, setPermissions] = (0, import_react44.useState)(
53163
+ const [permissions, setPermissions] = (0, import_react46.useState)(
52823
53164
  () => request.dialog === "permissions" ? buildPermissionsData(config) : null
52824
53165
  );
52825
53166
  const reloadPermissions = /* @__PURE__ */ __name(() => setPermissions(buildPermissionsData(config)), "reloadPermissions");
52826
- const [mcpServers, setMcpServers] = (0, import_react44.useState)([]);
52827
- (0, import_react44.useEffect)(() => {
53167
+ const [mcpServers, setMcpServers] = (0, import_react46.useState)([]);
53168
+ (0, import_react46.useEffect)(() => {
52828
53169
  if (request.dialog !== "mcp") return;
52829
53170
  let alive = true;
52830
53171
  const initial = buildMcpServers(config);
@@ -52848,14 +53189,14 @@ function OpenTuiDialogMount(props) {
52848
53189
  }
52849
53190
  );
52850
53191
  }, "runMcpAction");
52851
- const [extRows, setExtRows] = (0, import_react44.useState)(
53192
+ const [extRows, setExtRows] = (0, import_react46.useState)(
52852
53193
  () => request.dialog === "extensions_manage" ? buildExtensionRows(config) : []
52853
53194
  );
52854
- const [extBusy, setExtBusy] = (0, import_react44.useState)(false);
52855
- const [extStatus, setExtStatus] = (0, import_react44.useState)(
53195
+ const [extBusy, setExtBusy] = (0, import_react46.useState)(false);
53196
+ const [extStatus, setExtStatus] = (0, import_react46.useState)(
52856
53197
  null
52857
53198
  );
52858
- const [extDiscoverFilter, setExtDiscoverFilter] = (0, import_react44.useState)(
53199
+ const [extDiscoverFilter, setExtDiscoverFilter] = (0, import_react46.useState)(
52859
53200
  null
52860
53201
  );
52861
53202
  const reloadExtensions = /* @__PURE__ */ __name(() => setExtRows(buildExtensionRows(config)), "reloadExtensions");
@@ -52908,16 +53249,16 @@ function OpenTuiDialogMount(props) {
52908
53249
  }
52909
53250
  }
52910
53251
  }, "runExtensionAction");
52911
- const [modelError, setModelError] = (0, import_react44.useState)(null);
52912
- const modelSelectionCommittedRef = (0, import_react44.useRef)(false);
52913
- const modelCloseLatchRef = (0, import_react44.useRef)(false);
52914
- const modelSelectionInFlightRef = (0, import_react44.useRef)(false);
52915
- const [helpTab, setHelpTab] = (0, import_react44.useState)("general");
52916
- const [helpScroll, setHelpScroll] = (0, import_react44.useState)(0);
53252
+ const [modelError, setModelError] = (0, import_react46.useState)(null);
53253
+ const modelSelectionCommittedRef = (0, import_react46.useRef)(false);
53254
+ const modelCloseLatchRef = (0, import_react46.useRef)(false);
53255
+ const modelSelectionInFlightRef = (0, import_react46.useRef)(false);
53256
+ const [helpTab, setHelpTab] = (0, import_react46.useState)("general");
53257
+ const [helpScroll, setHelpScroll] = (0, import_react46.useState)(0);
52917
53258
  const dialogWidth = dialogAreaWidth(dimensions.width);
52918
53259
  const helpBodyRows = computeHelpBodyRows(dimensions.height);
52919
53260
  const helpWindowRows = helpCommandWindowRows(helpBodyRows);
52920
- const helpMaxScroll = (0, import_react44.useMemo)(() => {
53261
+ const helpMaxScroll = (0, import_react46.useMemo)(() => {
52921
53262
  if (helpTab === "general") return 0;
52922
53263
  const lines = helpTab === "custom-commands" ? buildHelpCustomCommandLines(commands, dialogWidth) : buildHelpCommandsLines(commands, dialogWidth);
52923
53264
  return helpScrollMax(lines, helpWindowRows);
@@ -53150,6 +53491,12 @@ function OpenTuiDialogMount(props) {
53150
53491
  {
53151
53492
  config,
53152
53493
  settings,
53494
+ notice: config?.getHookSystem() ? [
53495
+ t("Reopen this menu to reload hook definitions."),
53496
+ t(
53497
+ "Hook controls and HTTP security settings require a restart."
53498
+ )
53499
+ ].join("\n") : void 0,
53153
53500
  onClose
53154
53501
  }
53155
53502
  );
@@ -53273,7 +53620,7 @@ __name(OpenTuiDialogMount, "OpenTuiDialogMount");
53273
53620
 
53274
53621
  // packages/cli/src/ui/opentui/input-prompt.tsx
53275
53622
  init_esbuild_shims();
53276
- var import_react46 = __toESM(require_react(), 1);
53623
+ var import_react48 = __toESM(require_react(), 1);
53277
53624
  import path6 from "node:path";
53278
53625
 
53279
53626
  // packages/cli/src/ui/opentui/input-history.ts
@@ -53422,8 +53769,8 @@ function OpenTuiInputPrompt(props) {
53422
53769
  } = props;
53423
53770
  const { width } = useTerminalDimensions();
53424
53771
  const renderer = useRenderer();
53425
- const editorRef = (0, import_react46.useRef)(null);
53426
- (0, import_react46.useEffect)(() => {
53772
+ const editorRef = (0, import_react48.useRef)(null);
53773
+ (0, import_react48.useEffect)(() => {
53427
53774
  if (!props.composerHandle) return;
53428
53775
  props.composerHandle.current = {
53429
53776
  getText: /* @__PURE__ */ __name(() => editorRef.current?.plainText ?? "", "getText"),
@@ -53435,36 +53782,36 @@ function OpenTuiInputPrompt(props) {
53435
53782
  if (props.composerHandle) props.composerHandle.current = null;
53436
53783
  };
53437
53784
  }, [props.composerHandle]);
53438
- const userMessagesRef = (0, import_react46.useRef)(userMessages);
53785
+ const userMessagesRef = (0, import_react48.useRef)(userMessages);
53439
53786
  userMessagesRef.current = userMessages;
53440
- const recentSlashCommandsRef = (0, import_react46.useRef)(recentSlashCommands);
53787
+ const recentSlashCommandsRef = (0, import_react48.useRef)(recentSlashCommands);
53441
53788
  recentSlashCommandsRef.current = recentSlashCommands;
53442
- const historyRef = (0, import_react46.useRef)(null);
53789
+ const historyRef = (0, import_react48.useRef)(null);
53443
53790
  if (!historyRef.current) {
53444
53791
  historyRef.current = new InputHistory(() => userMessagesRef.current);
53445
53792
  }
53446
- const escapeRef = (0, import_react46.useRef)(null);
53793
+ const escapeRef = (0, import_react48.useRef)(null);
53447
53794
  if (!escapeRef.current) {
53448
53795
  escapeRef.current = new EscapeClearModel();
53449
53796
  }
53450
- const [textVersion, setTextVersion] = (0, import_react46.useState)(0);
53451
- const [suggestions, setSuggestions] = (0, import_react46.useState)([]);
53452
- const [activeIndex, setActiveIndex] = (0, import_react46.useState)(0);
53453
- const [loadingSuggestions, setLoadingSuggestions] = (0, import_react46.useState)(false);
53454
- const [escapeArmed, setEscapeArmed] = (0, import_react46.useState)(false);
53455
- const [attachments, setAttachments] = (0, import_react46.useState)([]);
53456
- const completionModeRef = (0, import_react46.useRef)("IDLE" /* IDLE */);
53457
- const historyRestoredTextRef = (0, import_react46.useRef)(null);
53458
- const dismissedUntilChangeRef = (0, import_react46.useRef)(null);
53459
- const fileSearchRef = (0, import_react46.useRef)(null);
53460
- const fileSearchReadyRef = (0, import_react46.useRef)(null);
53461
- const atSearchSeqRef = (0, import_react46.useRef)(0);
53462
- const commandsRef = (0, import_react46.useRef)([]);
53463
- const slashRangeRef = (0, import_react46.useRef)(null);
53464
- const slashSearchSeqRef = (0, import_react46.useRef)(0);
53465
- const suggestionNavigatedRef = (0, import_react46.useRef)(false);
53466
- const pendingPastesRef = (0, import_react46.useRef)(/* @__PURE__ */ new Map());
53467
- const activePlaceholderIdsRef = (0, import_react46.useRef)(/* @__PURE__ */ new Map());
53797
+ const [textVersion, setTextVersion] = (0, import_react48.useState)(0);
53798
+ const [suggestions, setSuggestions] = (0, import_react48.useState)([]);
53799
+ const [activeIndex, setActiveIndex] = (0, import_react48.useState)(0);
53800
+ const [loadingSuggestions, setLoadingSuggestions] = (0, import_react48.useState)(false);
53801
+ const [escapeArmed, setEscapeArmed] = (0, import_react48.useState)(false);
53802
+ const [attachments, setAttachments] = (0, import_react48.useState)([]);
53803
+ const completionModeRef = (0, import_react48.useRef)("IDLE" /* IDLE */);
53804
+ const historyRestoredTextRef = (0, import_react48.useRef)(null);
53805
+ const dismissedUntilChangeRef = (0, import_react48.useRef)(null);
53806
+ const fileSearchRef = (0, import_react48.useRef)(null);
53807
+ const fileSearchReadyRef = (0, import_react48.useRef)(null);
53808
+ const atSearchSeqRef = (0, import_react48.useRef)(0);
53809
+ const commandsRef = (0, import_react48.useRef)([]);
53810
+ const slashRangeRef = (0, import_react48.useRef)(null);
53811
+ const slashSearchSeqRef = (0, import_react48.useRef)(0);
53812
+ const suggestionNavigatedRef = (0, import_react48.useRef)(false);
53813
+ const pendingPastesRef = (0, import_react48.useRef)(/* @__PURE__ */ new Map());
53814
+ const activePlaceholderIdsRef = (0, import_react48.useRef)(/* @__PURE__ */ new Map());
53468
53815
  const {
53469
53816
  state: followupState,
53470
53817
  accept: acceptFollowup,
@@ -53481,13 +53828,13 @@ function OpenTuiInputPrompt(props) {
53481
53828
  setTextVersion((v3) => v3 + 1);
53482
53829
  }, "onAccept")
53483
53830
  });
53484
- (0, import_react46.useEffect)(() => {
53831
+ (0, import_react48.useEffect)(() => {
53485
53832
  setFollowupSuggestion(promptSuggestion ?? null);
53486
53833
  }, [setFollowupSuggestion, promptSuggestion]);
53487
53834
  const availableSuggestion = followupState.isVisible || promptSuggestion ? followupState.suggestion ?? promptSuggestion ?? null : null;
53488
53835
  const chrome = shellModeActive ? { prefix: "!", color: C2.accent } : promptChrome(approvalMode);
53489
53836
  const borderColor = chrome.color ?? C2.accent;
53490
- (0, import_react46.useEffect)(() => {
53837
+ (0, import_react48.useEffect)(() => {
53491
53838
  let cancelled = false;
53492
53839
  loadInteractiveCommands(config ?? null).then((commands) => {
53493
53840
  if (!cancelled) commandsRef.current = commands;
@@ -53498,7 +53845,7 @@ function OpenTuiInputPrompt(props) {
53498
53845
  };
53499
53846
  }, [config]);
53500
53847
  const projectRoot = config?.getTargetDir() ?? process.cwd();
53501
- const ensureFileSearch = (0, import_react46.useCallback)(() => {
53848
+ const ensureFileSearch = (0, import_react48.useCallback)(() => {
53502
53849
  if (fileSearchReadyRef.current) return fileSearchReadyRef.current;
53503
53850
  const searcher = FileSearchFactory.create({
53504
53851
  projectRoot,
@@ -53518,7 +53865,7 @@ function OpenTuiInputPrompt(props) {
53518
53865
  });
53519
53866
  return fileSearchReadyRef.current;
53520
53867
  }, [config, projectRoot]);
53521
- (0, import_react46.useEffect)(
53868
+ (0, import_react48.useEffect)(
53522
53869
  () => () => {
53523
53870
  void fileSearchRef.current?.dispose?.();
53524
53871
  fileSearchRef.current = null;
@@ -53526,7 +53873,7 @@ function OpenTuiInputPrompt(props) {
53526
53873
  },
53527
53874
  []
53528
53875
  );
53529
- const currentCompletionTarget = (0, import_react46.useCallback)(() => {
53876
+ const currentCompletionTarget = (0, import_react48.useCallback)(() => {
53530
53877
  const el = editorRef.current;
53531
53878
  if (!el) return null;
53532
53879
  const text = el.plainText;
@@ -53541,7 +53888,7 @@ function OpenTuiInputPrompt(props) {
53541
53888
  commandsRef.current
53542
53889
  );
53543
53890
  }, []);
53544
- const refreshCompletion = (0, import_react46.useCallback)(() => {
53891
+ const refreshCompletion = (0, import_react48.useCallback)(() => {
53545
53892
  const el = editorRef.current;
53546
53893
  if (!el) return;
53547
53894
  const text = el.plainText;
@@ -53616,7 +53963,7 @@ function OpenTuiInputPrompt(props) {
53616
53963
  }
53617
53964
  });
53618
53965
  }, [ensureFileSearch, config, currentCompletionTarget]);
53619
- (0, import_react46.useEffect)(() => {
53966
+ (0, import_react48.useEffect)(() => {
53620
53967
  const el = editorRef.current;
53621
53968
  if (!el || textVersion === 0) return;
53622
53969
  if (historyRestoredTextRef.current !== null && el.plainText !== historyRestoredTextRef.current) {
@@ -53624,10 +53971,10 @@ function OpenTuiInputPrompt(props) {
53624
53971
  }
53625
53972
  refreshCompletion();
53626
53973
  }, [textVersion, refreshCompletion]);
53627
- (0, import_react46.useEffect)(() => {
53974
+ (0, import_react48.useEffect)(() => {
53628
53975
  refreshCompletion();
53629
53976
  }, [recentSlashCommands, refreshCompletion]);
53630
- const applyTextToEditor = (0, import_react46.useCallback)((line, cursorCol) => {
53977
+ const applyTextToEditor = (0, import_react48.useCallback)((line, cursorCol) => {
53631
53978
  const el = editorRef.current;
53632
53979
  if (!el) return;
53633
53980
  const cursor = el.logicalCursor;
@@ -53641,7 +53988,7 @@ function OpenTuiInputPrompt(props) {
53641
53988
  }
53642
53989
  setTextVersion((v3) => v3 + 1);
53643
53990
  }, []);
53644
- const acceptSuggestion = (0, import_react46.useCallback)(
53991
+ const acceptSuggestion = (0, import_react48.useCallback)(
53645
53992
  (index, viaEnter) => {
53646
53993
  const el = editorRef.current;
53647
53994
  const suggestion = suggestions[index];
@@ -53698,7 +54045,7 @@ function OpenTuiInputPrompt(props) {
53698
54045
  onPromptSuggestionDismiss
53699
54046
  ]
53700
54047
  );
53701
- const handleClipboardImage = (0, import_react46.useCallback)(async () => {
54048
+ const handleClipboardImage = (0, import_react48.useCallback)(async () => {
53702
54049
  try {
53703
54050
  if (!await clipboardHasImage()) return;
53704
54051
  const imagePath = await saveClipboardImage(Storage.getGlobalTempDir());
@@ -53716,7 +54063,7 @@ function OpenTuiInputPrompt(props) {
53716
54063
  } catch {
53717
54064
  }
53718
54065
  }, []);
53719
- (0, import_react46.useLayoutEffect)(() => {
54066
+ (0, import_react48.useLayoutEffect)(() => {
53720
54067
  const onRawInput = /* @__PURE__ */ __name((sequence) => {
53721
54068
  if (!focus) return false;
53722
54069
  if (isDeleteWordBackwardSequence(sequence)) {
@@ -53767,7 +54114,7 @@ function OpenTuiInputPrompt(props) {
53767
54114
  renderer.addInputHandler(onRawInput);
53768
54115
  return () => renderer.removeInputHandler(onRawInput);
53769
54116
  }, [renderer, focus]);
53770
- (0, import_react46.useLayoutEffect)(() => {
54117
+ (0, import_react48.useLayoutEffect)(() => {
53771
54118
  const onPaste = /* @__PURE__ */ __name((event) => {
53772
54119
  if (!focus) return;
53773
54120
  const el = editorRef.current;
@@ -54047,11 +54394,11 @@ ${current}` : popped);
54047
54394
  return;
54048
54395
  }
54049
54396
  });
54050
- (0, import_react46.useEffect)(() => {
54397
+ (0, import_react48.useEffect)(() => {
54051
54398
  const el = editorRef.current;
54052
54399
  if (el) el.textColor = C2.text;
54053
54400
  }, []);
54054
- (0, import_react46.useEffect)(() => {
54401
+ (0, import_react48.useEffect)(() => {
54055
54402
  const el = editorRef.current;
54056
54403
  if (el) {
54057
54404
  el.keyBindings = [
@@ -54070,7 +54417,7 @@ ${current}` : popped);
54070
54417
  activeIndex
54071
54418
  );
54072
54419
  const showDropdown = loadingSuggestions || suggestions.length > 0 && visible.length > 0;
54073
- (0, import_react46.useEffect)(() => {
54420
+ (0, import_react48.useEffect)(() => {
54074
54421
  onSuggestionsVisibilityChange?.(showDropdown);
54075
54422
  }, [showDropdown, onSuggestionsVisibilityChange]);
54076
54423
  const fullLabelWidth = /* @__PURE__ */ __name((s) => [s.label ?? s.value, s.argumentHint, s.sourceBadge].filter(Boolean).join(" ").length, "fullLabelWidth");
@@ -54195,7 +54542,7 @@ __name(OpenTuiInputPrompt, "OpenTuiInputPrompt");
54195
54542
 
54196
54543
  // packages/cli/src/ui/opentui/opentui-header.tsx
54197
54544
  init_esbuild_shims();
54198
- var import_react48 = __toESM(require_react(), 1);
54545
+ var import_react50 = __toESM(require_react(), 1);
54199
54546
  var LOGO_GRADIENT = ["#4796E4", "#847ACE", "#C3677F"];
54200
54547
  function lerpHex(a, b3, t3) {
54201
54548
  const pa = [1, 3, 5].map((i) => parseInt(a.slice(i, i + 2), 16));
@@ -54319,7 +54666,7 @@ __name(buildBanner, "buildBanner");
54319
54666
  function OpenTuiBanner({ config, settings }) {
54320
54667
  const { width } = useTerminalDimensions();
54321
54668
  const showBanner = !config.getScreenReader() && !settings.merged.ui?.hideBanner;
54322
- const banner = (0, import_react48.useMemo)(
54669
+ const banner = (0, import_react50.useMemo)(
54323
54670
  () => showBanner ? buildBanner(config, settings, width) : null,
54324
54671
  [showBanner, config, settings, width]
54325
54672
  );
@@ -54329,11 +54676,11 @@ __name(OpenTuiBanner, "OpenTuiBanner");
54329
54676
 
54330
54677
  // packages/cli/src/ui/opentui/opentui-footer.tsx
54331
54678
  init_esbuild_shims();
54332
- var import_react50 = __toESM(require_react(), 1);
54679
+ var import_react52 = __toESM(require_react(), 1);
54333
54680
  import nodePath2 from "node:path";
54334
54681
  function Spinner() {
54335
- const [frame, setFrame] = (0, import_react50.useState)(0);
54336
- (0, import_react50.useEffect)(() => {
54682
+ const [frame, setFrame] = (0, import_react52.useState)(0);
54683
+ (0, import_react52.useEffect)(() => {
54337
54684
  const spin = setInterval(() => setFrame((f2) => f2 + 1), SPINNER_INTERVAL_MS);
54338
54685
  return () => clearInterval(spin);
54339
54686
  }, []);
@@ -54348,7 +54695,7 @@ function OpenTuiLoadingIndicator({
54348
54695
  const { width } = useTerminalDimensions();
54349
54696
  const phrase = usePhraseCycler(streaming, false);
54350
54697
  const elapsedTime = useTimer(streaming, 0);
54351
- const fallbackRef = (0, import_react50.useRef)(0);
54698
+ const fallbackRef = (0, import_react52.useRef)(0);
54352
54699
  const animatedChars = useAnimationFrame(
54353
54700
  streamingCharsRef ?? fallbackRef,
54354
54701
  streamingCharsRef && streaming ? 100 : null
@@ -54434,7 +54781,7 @@ __name(OpenTuiFooter, "OpenTuiFooter");
54434
54781
 
54435
54782
  // packages/cli/src/ui/opentui/dialogs-confirm.tsx
54436
54783
  init_esbuild_shims();
54437
- var import_react52 = __toESM(require_react(), 1);
54784
+ var import_react54 = __toESM(require_react(), 1);
54438
54785
 
54439
54786
  // packages/cli/src/ui/opentui/diff-render.ts
54440
54787
  init_esbuild_shims();
@@ -54650,7 +54997,7 @@ function buildConfirmationPrompt(details, isTrustedFolder) {
54650
54997
  }
54651
54998
  __name(buildConfirmationPrompt, "buildConfirmationPrompt");
54652
54999
  function DiffBody({ fileDiff }) {
54653
- const lines = (0, import_react52.useMemo)(() => renderDiffBody(fileDiff), [fileDiff]);
55000
+ const lines = (0, import_react54.useMemo)(() => renderDiffBody(fileDiff), [fileDiff]);
54654
55001
  const window = tailWindow(lines, MAX_BODY_ROWS);
54655
55002
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("box", { flexDirection: "column", children: [
54656
55003
  window.hiddenCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -54665,14 +55012,14 @@ function DiffBody({ fileDiff }) {
54665
55012
  }
54666
55013
  __name(DiffBody, "DiffBody");
54667
55014
  function TextBody({ text }) {
54668
- const [expanded, setExpanded] = (0, import_react52.useState)(false);
55015
+ const [expanded, setExpanded] = (0, import_react54.useState)(false);
54669
55016
  const { width, height } = useTerminalDimensions();
54670
- const rows = (0, import_react52.useMemo)(() => sanitizeTerminalText(text).split("\n"), [text]);
54671
- const window = (0, import_react52.useMemo)(
55017
+ const rows = (0, import_react54.useMemo)(() => sanitizeTerminalText(text).split("\n"), [text]);
55018
+ const window = (0, import_react54.useMemo)(
54672
55019
  () => headWindowPhysical(rows, width, MAX_BODY_ROWS),
54673
55020
  [rows, width]
54674
55021
  );
54675
- const expandedWindow = (0, import_react52.useMemo)(
55022
+ const expandedWindow = (0, import_react54.useMemo)(
54676
55023
  () => tailWindowPhysical(
54677
55024
  rows,
54678
55025
  width,
@@ -54752,7 +55099,7 @@ function ConfirmationBody({
54752
55099
  }
54753
55100
  __name(ConfirmationBody, "ConfirmationBody");
54754
55101
  function OutcomeSelect(props) {
54755
- const items = (0, import_react52.useMemo)(
55102
+ const items = (0, import_react54.useMemo)(
54756
55103
  () => props.options.map((option, index) => ({
54757
55104
  key: `${option.value}-${index}`,
54758
55105
  value: option.value,
@@ -54783,8 +55130,8 @@ __name(OutcomeSelect, "OutcomeSelect");
54783
55130
  function OpenTuiToolConfirmation(props) {
54784
55131
  const { call, config, onSettled } = props;
54785
55132
  const details = call.confirmationDetails;
54786
- const settledRef = (0, import_react52.useRef)(false);
54787
- const settle = (0, import_react52.useCallback)(
55133
+ const settledRef = (0, import_react54.useRef)(false);
55134
+ const settle = (0, import_react54.useCallback)(
54788
55135
  (outcome, payload) => {
54789
55136
  if (settledRef.current) return;
54790
55137
  settledRef.current = true;
@@ -54839,12 +55186,12 @@ function OpenTuiToolConfirmation(props) {
54839
55186
  __name(OpenTuiToolConfirmation, "OpenTuiToolConfirmation");
54840
55187
  function AskUserQuestionFlow(props) {
54841
55188
  const { details, onAnswered } = props;
54842
- const [index, setIndex] = (0, import_react52.useState)(0);
54843
- const [answers, setAnswers] = (0, import_react52.useState)({});
54844
- const [selected, setSelected] = (0, import_react52.useState)(/* @__PURE__ */ new Set());
55189
+ const [index, setIndex] = (0, import_react54.useState)(0);
55190
+ const [answers, setAnswers] = (0, import_react54.useState)({});
55191
+ const [selected, setSelected] = (0, import_react54.useState)(/* @__PURE__ */ new Set());
54845
55192
  const question = details.questions[index];
54846
55193
  const isMulti = question?.multiSelect === true;
54847
- const commitQuestion = (0, import_react52.useCallback)(
55194
+ const commitQuestion = (0, import_react54.useCallback)(
54848
55195
  (value) => {
54849
55196
  if (value === void 0) return;
54850
55197
  const nextAnswers = { ...answers, [index]: value };
@@ -54862,7 +55209,7 @@ function AskUserQuestionFlow(props) {
54862
55209
  },
54863
55210
  [answers, index, details.questions.length, onAnswered]
54864
55211
  );
54865
- const items = (0, import_react52.useMemo)(
55212
+ const items = (0, import_react54.useMemo)(
54866
55213
  () => (question?.options ?? []).map((option, i) => ({
54867
55214
  key: `${option.label}-${i}`,
54868
55215
  value: option.label
@@ -54897,7 +55244,7 @@ function AskUserQuestionFlow(props) {
54897
55244
  commitQuestion([...selected].join(", "));
54898
55245
  }
54899
55246
  });
54900
- (0, import_react52.useEffect)(() => {
55247
+ (0, import_react54.useEffect)(() => {
54901
55248
  if (details.questions.length === 0 || !question?.options?.length) {
54902
55249
  onAnswered(null);
54903
55250
  }
@@ -54940,7 +55287,7 @@ function AskUserQuestionFlow(props) {
54940
55287
  __name(AskUserQuestionFlow, "AskUserQuestionFlow");
54941
55288
  function OpenTuiShellConfirmation(props) {
54942
55289
  const { commands, onResolve } = props;
54943
- const options = (0, import_react52.useMemo)(
55290
+ const options = (0, import_react54.useMemo)(
54944
55291
  () => [
54945
55292
  {
54946
55293
  label: t("Yes, allow once"),
@@ -54987,7 +55334,7 @@ function OpenTuiShellConfirmation(props) {
54987
55334
  __name(OpenTuiShellConfirmation, "OpenTuiShellConfirmation");
54988
55335
  function OpenTuiActionConfirmation(props) {
54989
55336
  const { prompt, onResolve } = props;
54990
- const options = (0, import_react52.useMemo)(
55337
+ const options = (0, import_react54.useMemo)(
54991
55338
  () => [
54992
55339
  { key: "yes", value: true },
54993
55340
  { key: "no", value: false }
@@ -55125,31 +55472,31 @@ function OpenTuiApp(props) {
55125
55472
  onPromptSuggestionDismiss,
55126
55473
  onPromptSuggestionAbort
55127
55474
  } = props;
55128
- const [dialog, setDialog] = (0, import_react54.useState)(
55475
+ const [dialog, setDialog] = (0, import_react56.useState)(
55129
55476
  props.initialDialog ?? null
55130
55477
  );
55131
- const [noticeText, setNoticeText] = (0, import_react54.useState)(null);
55132
- const [commandList, setCommandList] = (0, import_react54.useState)(
55478
+ const [noticeText, setNoticeText] = (0, import_react56.useState)(null);
55479
+ const [commandList, setCommandList] = (0, import_react56.useState)(
55133
55480
  commands ?? []
55134
55481
  );
55135
- const notify = (0, import_react54.useCallback)((text) => setNoticeText(text), []);
55136
- const [shellModeActive, setShellModeActive] = (0, import_react54.useState)(false);
55137
- const shellControllersRef = (0, import_react54.useRef)(/* @__PURE__ */ new Set());
55482
+ const notify = (0, import_react56.useCallback)((text) => setNoticeText(text), []);
55483
+ const [shellModeActive, setShellModeActive] = (0, import_react56.useState)(false);
55484
+ const shellControllersRef = (0, import_react56.useRef)(/* @__PURE__ */ new Set());
55138
55485
  const { width: terminalWidth, height: terminalHeight } = useTerminalDimensions();
55139
- const toggleShellMode = (0, import_react54.useCallback)(
55486
+ const toggleShellMode = (0, import_react56.useCallback)(
55140
55487
  () => setShellModeActive((active) => !active),
55141
55488
  []
55142
55489
  );
55143
- const [showSuggestions, setShowSuggestions] = (0, import_react54.useState)(false);
55144
- const onSuggestionsVisibilityChange = (0, import_react54.useCallback)(
55490
+ const [showSuggestions, setShowSuggestions] = (0, import_react56.useState)(false);
55491
+ const onSuggestionsVisibilityChange = (0, import_react56.useCallback)(
55145
55492
  (visible) => setShowSuggestions(visible),
55146
55493
  []
55147
55494
  );
55148
- const [currentApprovalMode, setCurrentApprovalMode] = (0, import_react54.useState)(approvalMode);
55149
- (0, import_react54.useEffect)(() => {
55495
+ const [currentApprovalMode, setCurrentApprovalMode] = (0, import_react56.useState)(approvalMode);
55496
+ (0, import_react56.useEffect)(() => {
55150
55497
  setCurrentApprovalMode(approvalMode);
55151
55498
  }, [approvalMode]);
55152
- const addInfoItem = (0, import_react54.useCallback)(
55499
+ const addInfoItem = (0, import_react56.useCallback)(
55153
55500
  (item) => {
55154
55501
  if (item.type === "info" /* INFO */) {
55155
55502
  onTranscriptEvent?.({ type: "info", text: item.text });
@@ -55157,7 +55504,7 @@ function OpenTuiApp(props) {
55157
55504
  },
55158
55505
  [onTranscriptEvent]
55159
55506
  );
55160
- const adoptApprovalMode = (0, import_react54.useCallback)(
55507
+ const adoptApprovalMode = (0, import_react56.useCallback)(
55161
55508
  (next) => {
55162
55509
  setCurrentApprovalMode(next);
55163
55510
  if (next === "auto" /* AUTO */ && currentApprovalMode !== "auto" /* AUTO */) {
@@ -55178,7 +55525,7 @@ function OpenTuiApp(props) {
55178
55525
  onToolCallSettled
55179
55526
  ]
55180
55527
  );
55181
- const cycleApprovalMode = (0, import_react54.useCallback)(() => {
55528
+ const cycleApprovalMode = (0, import_react56.useCallback)(() => {
55182
55529
  const next = nextApprovalMode(config.getApprovalMode());
55183
55530
  try {
55184
55531
  config.setApprovalMode(next);
@@ -55194,12 +55541,12 @@ function OpenTuiApp(props) {
55194
55541
  key.preventDefault();
55195
55542
  cycleApprovalMode();
55196
55543
  });
55197
- (0, import_react54.useEffect)(() => {
55544
+ (0, import_react56.useEffect)(() => {
55198
55545
  if (approvalMode === "auto" /* AUTO */) {
55199
55546
  emitAutoModeEntryNotices({ config, settings, addItem: addInfoItem });
55200
55547
  }
55201
55548
  }, []);
55202
- const runShellCommand = (0, import_react54.useCallback)(
55549
+ const runShellCommand = (0, import_react56.useCallback)(
55203
55550
  (command) => {
55204
55551
  const emit = props.onTranscriptEvent;
55205
55552
  if (!emit) return;
@@ -55230,7 +55577,7 @@ function OpenTuiApp(props) {
55230
55577
  },
55231
55578
  [config, props.onTranscriptEvent, terminalWidth, terminalHeight]
55232
55579
  );
55233
- (0, import_react54.useEffect)(
55580
+ (0, import_react56.useEffect)(
55234
55581
  () => () => {
55235
55582
  for (const controller of shellControllersRef.current) {
55236
55583
  controller.abort();
@@ -55238,7 +55585,7 @@ function OpenTuiApp(props) {
55238
55585
  },
55239
55586
  []
55240
55587
  );
55241
- const handleSelectSetting = (0, import_react54.useCallback)((name) => {
55588
+ const handleSelectSetting = (0, import_react56.useCallback)((name) => {
55242
55589
  if (name === "ui.theme") setDialog({ dialog: "theme" });
55243
55590
  else if (name === "general.preferredEditor")
55244
55591
  setDialog({ dialog: "editor" });
@@ -55247,15 +55594,15 @@ function OpenTuiApp(props) {
55247
55594
  setDialog({ dialog: "model", mode: "vision" });
55248
55595
  else setDialog(null);
55249
55596
  }, []);
55250
- const fillComposer = (0, import_react54.useCallback)(
55597
+ const fillComposer = (0, import_react56.useCallback)(
55251
55598
  (text) => {
55252
55599
  injectCapturedInput(() => props.composerHandle?.current ?? null, text);
55253
55600
  },
55254
55601
  [props.composerHandle]
55255
55602
  );
55256
- const [modals, setModals] = (0, import_react54.useState)([]);
55257
- const modalSeq = (0, import_react54.useRef)(0);
55258
- const confirmations = (0, import_react54.useMemo)(
55603
+ const [modals, setModals] = (0, import_react56.useState)([]);
55604
+ const modalSeq = (0, import_react56.useRef)(0);
55605
+ const confirmations = (0, import_react56.useMemo)(
55259
55606
  () => ({
55260
55607
  presentShell: /* @__PURE__ */ __name((commandsToRun) => new Promise((resolve4) => {
55261
55608
  modalSeq.current += 1;
@@ -55280,14 +55627,14 @@ function OpenTuiApp(props) {
55280
55627
  []
55281
55628
  );
55282
55629
  const activeModal = modals[0] ?? null;
55283
- const closeShellModal = (0, import_react54.useCallback)(
55630
+ const closeShellModal = (0, import_react56.useCallback)(
55284
55631
  (modal, resolution) => {
55285
55632
  setModals((prev) => prev.filter((m3) => m3.id !== modal.id));
55286
55633
  modal.resolve(resolution);
55287
55634
  },
55288
55635
  []
55289
55636
  );
55290
- const closeActionModal = (0, import_react54.useCallback)(
55637
+ const closeActionModal = (0, import_react56.useCallback)(
55291
55638
  (modal, confirmed) => {
55292
55639
  setModals((prev) => prev.filter((m3) => m3.id !== modal.id));
55293
55640
  modal.resolve(confirmed);
@@ -55296,8 +55643,8 @@ function OpenTuiApp(props) {
55296
55643
  );
55297
55644
  const activeToolCall = waitingToolCalls?.[0] ?? null;
55298
55645
  const mcpApproval = useMcpApproval(config);
55299
- const contextFilesAnnouncedRef = (0, import_react54.useRef)(false);
55300
- const transcript = (0, import_react54.useMemo)(() => {
55646
+ const contextFilesAnnouncedRef = (0, import_react56.useRef)(false);
55647
+ const transcript = (0, import_react56.useMemo)(() => {
55301
55648
  const reset = /* @__PURE__ */ __name((events) => {
55302
55649
  contextFilesAnnouncedRef.current = false;
55303
55650
  onTranscriptReset?.(events);
@@ -55310,7 +55657,7 @@ function OpenTuiApp(props) {
55310
55657
  append: /* @__PURE__ */ __name((event) => onTranscriptEvent?.(event), "append")
55311
55658
  };
55312
55659
  }, [onTranscriptReset, onTranscriptEvent]);
55313
- const host = (0, import_react54.useMemo)(
55660
+ const host = (0, import_react56.useMemo)(
55314
55661
  () => new OpenTuiAppHost({
55315
55662
  config,
55316
55663
  settings,
@@ -55339,27 +55686,27 @@ function OpenTuiApp(props) {
55339
55686
  getSessionStats
55340
55687
  ]
55341
55688
  );
55342
- (0, import_react54.useSyncExternalStore)(
55343
- (0, import_react54.useCallback)((cb) => host.subscribe(cb), [host]),
55344
- (0, import_react54.useCallback)(() => host.getVersion(), [host])
55689
+ (0, import_react56.useSyncExternalStore)(
55690
+ (0, import_react56.useCallback)((cb) => host.subscribe(cb), [host]),
55691
+ (0, import_react56.useCallback)(() => host.getVersion(), [host])
55345
55692
  );
55346
- (0, import_react54.useEffect)(() => {
55693
+ (0, import_react56.useEffect)(() => {
55347
55694
  host.setStreaming(!!streaming);
55348
55695
  }, [host, streaming]);
55349
- const gateway = (0, import_react54.useMemo)(() => new OpenTuiSlashGateway(), []);
55350
- const reloadRef = (0, import_react54.useRef)(null);
55351
- const deferredCommandsRef = (0, import_react54.useRef)([]);
55352
- const [deferredRevision, setDeferredRevision] = (0, import_react54.useState)(0);
55353
- const drainingRef = (0, import_react54.useRef)(false);
55354
- const streamingRef = (0, import_react54.useRef)(streaming);
55355
- (0, import_react54.useEffect)(() => {
55696
+ const gateway = (0, import_react56.useMemo)(() => new OpenTuiSlashGateway(), []);
55697
+ const reloadRef = (0, import_react56.useRef)(null);
55698
+ const deferredCommandsRef = (0, import_react56.useRef)([]);
55699
+ const [deferredRevision, setDeferredRevision] = (0, import_react56.useState)(0);
55700
+ const drainingRef = (0, import_react56.useRef)(false);
55701
+ const streamingRef = (0, import_react56.useRef)(streaming);
55702
+ (0, import_react56.useEffect)(() => {
55356
55703
  streamingRef.current = streaming;
55357
55704
  }, [streaming]);
55358
- const dialogRef = (0, import_react54.useRef)(dialog);
55359
- (0, import_react54.useEffect)(() => {
55705
+ const dialogRef = (0, import_react56.useRef)(dialog);
55706
+ (0, import_react56.useEffect)(() => {
55360
55707
  dialogRef.current = dialog;
55361
55708
  }, [dialog]);
55362
- (0, import_react54.useEffect)(() => {
55709
+ (0, import_react56.useEffect)(() => {
55363
55710
  const dispatcher = new OpenTuiSlashDispatcher(
55364
55711
  host,
55365
55712
  { config, settings, logger, extensionRefreshState },
@@ -55394,7 +55741,7 @@ function OpenTuiApp(props) {
55394
55741
  commands,
55395
55742
  extensionRefreshState
55396
55743
  ]);
55397
- const applyOutcome = (0, import_react54.useCallback)(
55744
+ const applyOutcome = (0, import_react56.useCallback)(
55398
55745
  (outcome) => {
55399
55746
  switch (outcome.kind) {
55400
55747
  case "handled":
@@ -55432,7 +55779,7 @@ function OpenTuiApp(props) {
55432
55779
  },
55433
55780
  [onSubmitPrompt, onQuit, onInterrupt, onPopQueue, notify]
55434
55781
  );
55435
- const onSubmit = (0, import_react54.useCallback)(
55782
+ const onSubmit = (0, import_react56.useCallback)(
55436
55783
  async (text, imagePaths) => {
55437
55784
  setNoticeText(null);
55438
55785
  const submission = normalizeQuitSubmission(text);
@@ -55506,7 +55853,7 @@ function OpenTuiApp(props) {
55506
55853
  addInfoItem
55507
55854
  ]
55508
55855
  );
55509
- (0, import_react54.useEffect)(() => {
55856
+ (0, import_react56.useEffect)(() => {
55510
55857
  if (isExitInProgress()) return;
55511
55858
  if (streaming || dialog || shellControllersRef.current.size > 0 || deferredCommandsRef.current.length === 0) {
55512
55859
  return;
@@ -55573,7 +55920,7 @@ function OpenTuiApp(props) {
55573
55920
  onSubmitPrompt,
55574
55921
  runShellCommand
55575
55922
  ]);
55576
- const userMessages = (0, import_react54.useMemo)(
55923
+ const userMessages = (0, import_react56.useMemo)(
55577
55924
  () => host.getHistory().filter((item) => item.type === "user").map((item) => item.text ?? ""),
55578
55925
  // eslint-disable-next-line react-hooks/exhaustive-deps
55579
55926
  [host, host.getVersion()]
@@ -55713,7 +56060,7 @@ __name(OpenTuiApp, "OpenTuiApp");
55713
56060
 
55714
56061
  // packages/cli/src/ui/opentui/followup-generation.ts
55715
56062
  init_esbuild_shims();
55716
- var import_react56 = __toESM(require_react(), 1);
56063
+ var import_react58 = __toESM(require_react(), 1);
55717
56064
  function useFollowupSuggestionGeneration({
55718
56065
  config,
55719
56066
  settings,
@@ -55721,12 +56068,12 @@ function useFollowupSuggestionGeneration({
55721
56068
  items,
55722
56069
  waitingCalls
55723
56070
  }) {
55724
- const [promptSuggestion, setPromptSuggestion] = (0, import_react56.useState)(null);
55725
- const abortRef = (0, import_react56.useRef)(null);
55726
- const streamingRef = (0, import_react56.useRef)(streaming);
56071
+ const [promptSuggestion, setPromptSuggestion] = (0, import_react58.useState)(null);
56072
+ const abortRef = (0, import_react58.useRef)(null);
56073
+ const streamingRef = (0, import_react58.useRef)(streaming);
55727
56074
  const followupEnabled = settings.merged.ui?.enableFollowupSuggestions !== false;
55728
56075
  const cacheSharingEnabled = settings.merged.ui?.enableCacheSharing !== false;
55729
- (0, import_react56.useEffect)(() => {
56076
+ (0, import_react58.useEffect)(() => {
55730
56077
  const wasStreaming = streamingRef.current;
55731
56078
  if (!followupEnabled || wasStreaming !== streaming) {
55732
56079
  abortRef.current?.abort();
@@ -55763,7 +56110,7 @@ function useFollowupSuggestionGeneration({
55763
56110
  items,
55764
56111
  waitingCalls
55765
56112
  ]);
55766
- (0, import_react56.useEffect)(
56113
+ (0, import_react58.useEffect)(
55767
56114
  () => () => {
55768
56115
  abortRef.current?.abort();
55769
56116
  },
@@ -55915,7 +56262,7 @@ var OpenTuiRuntime = class _OpenTuiRuntime {
55915
56262
 
55916
56263
  // packages/cli/src/ui/opentui/transcript-view.tsx
55917
56264
  init_esbuild_shims();
55918
- var import_react57 = __toESM(require_react(), 1);
56265
+ var import_react59 = __toESM(require_react(), 1);
55919
56266
 
55920
56267
  // packages/cli/src/ui/opentui/live-session-model.ts
55921
56268
  init_esbuild_shims();
@@ -57148,7 +57495,7 @@ function ThinkingRow({
57148
57495
  item,
57149
57496
  allExpanded
57150
57497
  }) {
57151
- const [clickedOpen, setClickedOpen] = (0, import_react57.useState)(false);
57498
+ const [clickedOpen, setClickedOpen] = (0, import_react59.useState)(false);
57152
57499
  const expanded = allExpanded || clickedOpen;
57153
57500
  const meta = thinkingMeta(item.done, expanded, false, item.durationMs);
57154
57501
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
@@ -57300,8 +57647,8 @@ function RetryRows({
57300
57647
  delayMs,
57301
57648
  startedAt
57302
57649
  }) {
57303
- const [now, setNow] = (0, import_react57.useState)(() => Date.now());
57304
- (0, import_react57.useEffect)(() => {
57650
+ const [now, setNow] = (0, import_react59.useState)(() => Date.now());
57651
+ (0, import_react59.useEffect)(() => {
57305
57652
  const timer = setInterval(() => setNow(Date.now()), 1e3);
57306
57653
  return () => clearInterval(timer);
57307
57654
  }, []);
@@ -57546,7 +57893,7 @@ __name(ArenaSessionRow, "ArenaSessionRow");
57546
57893
 
57547
57894
  // packages/cli/src/ui/opentui/live-turn.ts
57548
57895
  init_esbuild_shims();
57549
- var import_react58 = __toESM(require_react(), 1);
57896
+ var import_react60 = __toESM(require_react(), 1);
57550
57897
  import { readFileSync } from "node:fs";
57551
57898
  var IMAGE_MIME_BY_EXTENSION = {
57552
57899
  bmp: "image/bmp",
@@ -57586,51 +57933,51 @@ function foldBatch(events) {
57586
57933
  __name(foldBatch, "foldBatch");
57587
57934
  function useOpenTuiLiveTurn(options) {
57588
57935
  const { config } = options;
57589
- const [items, setItems] = (0, import_react58.useState)([]);
57590
- const [streaming, setStreaming] = (0, import_react58.useState)(false);
57591
- const [waitingCalls, setWaitingCalls] = (0, import_react58.useState)(
57936
+ const [items, setItems] = (0, import_react60.useState)([]);
57937
+ const [streaming, setStreaming] = (0, import_react60.useState)(false);
57938
+ const [waitingCalls, setWaitingCalls] = (0, import_react60.useState)(
57592
57939
  []
57593
57940
  );
57594
- const queueRef = (0, import_react58.useRef)([]);
57595
- const [queueLength, setQueueLength] = (0, import_react58.useState)(0);
57596
- const abortRef = (0, import_react58.useRef)(null);
57597
- const streamingRef = (0, import_react58.useRef)(false);
57598
- const streamingCharsRef = (0, import_react58.useRef)(0);
57599
- const receivingRef = (0, import_react58.useRef)(false);
57600
- const [isReceivingContent, setIsReceivingContent] = (0, import_react58.useState)(false);
57601
- const turnSeqRef = (0, import_react58.useRef)(0);
57602
- const waitingCallsRef = (0, import_react58.useRef)([]);
57941
+ const queueRef = (0, import_react60.useRef)([]);
57942
+ const [queueLength, setQueueLength] = (0, import_react60.useState)(0);
57943
+ const abortRef = (0, import_react60.useRef)(null);
57944
+ const streamingRef = (0, import_react60.useRef)(false);
57945
+ const streamingCharsRef = (0, import_react60.useRef)(0);
57946
+ const receivingRef = (0, import_react60.useRef)(false);
57947
+ const [isReceivingContent, setIsReceivingContent] = (0, import_react60.useState)(false);
57948
+ const turnSeqRef = (0, import_react60.useRef)(0);
57949
+ const waitingCallsRef = (0, import_react60.useRef)([]);
57603
57950
  waitingCallsRef.current = waitingCalls;
57604
- const setBusy = (0, import_react58.useCallback)((busy) => {
57951
+ const setBusy = (0, import_react60.useCallback)((busy) => {
57605
57952
  if (streamingRef.current === busy) return;
57606
57953
  streamingRef.current = busy;
57607
57954
  setStreaming(busy);
57608
57955
  }, []);
57609
- const setReceiving = (0, import_react58.useCallback)((receiving) => {
57956
+ const setReceiving = (0, import_react60.useCallback)((receiving) => {
57610
57957
  if (receivingRef.current === receiving) return;
57611
57958
  receivingRef.current = receiving;
57612
57959
  setIsReceivingContent(receiving);
57613
57960
  }, []);
57614
- const apply = (0, import_react58.useCallback)((ev) => {
57961
+ const apply = (0, import_react60.useCallback)((ev) => {
57615
57962
  setItems((prev) => foldLiveEvent(prev, ev));
57616
57963
  }, []);
57617
- const pushQueue = (0, import_react58.useCallback)((text) => {
57964
+ const pushQueue = (0, import_react60.useCallback)((text) => {
57618
57965
  queueRef.current.push(text);
57619
57966
  setQueueLength(queueRef.current.length);
57620
57967
  }, []);
57621
- const drainQueue = (0, import_react58.useCallback)(() => {
57968
+ const drainQueue = (0, import_react60.useCallback)(() => {
57622
57969
  const drained = queueRef.current;
57623
57970
  queueRef.current = [];
57624
57971
  setQueueLength(0);
57625
57972
  return drained;
57626
57973
  }, []);
57627
- const restoreQueue = (0, import_react58.useCallback)((texts) => {
57974
+ const restoreQueue = (0, import_react60.useCallback)((texts) => {
57628
57975
  const restored = texts.map((text) => text.trim()).filter(Boolean);
57629
57976
  if (restored.length === 0) return;
57630
57977
  queueRef.current = [...restored, ...queueRef.current];
57631
57978
  setQueueLength(queueRef.current.length);
57632
57979
  }, []);
57633
- const runTurn = (0, import_react58.useCallback)(
57980
+ const runTurn = (0, import_react60.useCallback)(
57634
57981
  async (prompt, promptId, turnOptions) => {
57635
57982
  const seq = ++turnSeqRef.current;
57636
57983
  const abort = new AbortController();
@@ -57706,7 +58053,7 @@ function useOpenTuiLiveTurn(options) {
57706
58053
  },
57707
58054
  [config, apply, drainQueue, restoreQueue, setBusy, setReceiving]
57708
58055
  );
57709
- const submit = (0, import_react58.useCallback)(
58056
+ const submit = (0, import_react60.useCallback)(
57710
58057
  (content, imagePaths, options2) => {
57711
58058
  const text = typeof content === "string" ? content : collectText(normalizeParts(content));
57712
58059
  if (streamingRef.current) {
@@ -57730,10 +58077,10 @@ function useOpenTuiLiveTurn(options) {
57730
58077
  },
57731
58078
  [config, apply, pushQueue, runTurn]
57732
58079
  );
57733
- const interrupt = (0, import_react58.useCallback)(() => {
58080
+ const interrupt = (0, import_react60.useCallback)(() => {
57734
58081
  abortRef.current?.abort();
57735
58082
  }, []);
57736
- const resetTranscript = (0, import_react58.useCallback)(
58083
+ const resetTranscript = (0, import_react60.useCallback)(
57737
58084
  (events) => {
57738
58085
  turnSeqRef.current += 1;
57739
58086
  const abort = abortRef.current;
@@ -57752,14 +58099,14 @@ function useOpenTuiLiveTurn(options) {
57752
58099
  },
57753
58100
  [setBusy]
57754
58101
  );
57755
- const settleWaitingCall = (0, import_react58.useCallback)((callId) => {
58102
+ const settleWaitingCall = (0, import_react60.useCallback)((callId) => {
57756
58103
  setWaitingCalls((prev) => prev.filter((c2) => c2.callId !== callId));
57757
58104
  }, []);
57758
- const popQueue = (0, import_react58.useCallback)(() => {
58105
+ const popQueue = (0, import_react60.useCallback)(() => {
57759
58106
  if (queueRef.current.length === 0) return null;
57760
58107
  return drainQueue().join("\n\n");
57761
58108
  }, [drainQueue]);
57762
- (0, import_react58.useEffect)(() => () => abortRef.current?.abort(), []);
58109
+ (0, import_react60.useEffect)(() => () => abortRef.current?.abort(), []);
57763
58110
  return {
57764
58111
  items,
57765
58112
  streaming,
@@ -57851,29 +58198,29 @@ function OpenTuiEntryApp({
57851
58198
  items: live.items,
57852
58199
  waitingCalls: live.waitingCalls
57853
58200
  });
57854
- const statsRef = (0, import_react59.useRef)(stats);
57855
- (0, import_react59.useEffect)(() => {
58201
+ const statsRef = (0, import_react61.useRef)(stats);
58202
+ (0, import_react61.useEffect)(() => {
57856
58203
  statsRef.current = stats;
57857
58204
  }, [stats]);
57858
- const getSessionStats = (0, import_react59.useCallback)(() => statsRef.current, []);
57859
- const composerHandle = (0, import_react59.useRef)(null);
57860
- (0, import_react59.useEffect)(
58205
+ const getSessionStats = (0, import_react61.useCallback)(() => statsRef.current, []);
58206
+ const composerHandle = (0, import_react61.useRef)(null);
58207
+ (0, import_react61.useEffect)(
57861
58208
  () => armCapturedInputInjection(() => composerHandle.current, capturedText),
57862
58209
  [capturedText]
57863
58210
  );
57864
- (0, import_react59.useEffect)(() => {
58211
+ (0, import_react61.useEffect)(() => {
57865
58212
  const resumeEvents = resumeEventsFromConfig(config);
57866
58213
  if (resumeEvents) resetTranscript(resumeEvents);
57867
58214
  for (const warning of startupWarnings) {
57868
58215
  applyEvent({ type: "warning", text: warning });
57869
58216
  }
57870
58217
  }, []);
57871
- const [updateNotice, setUpdateNotice] = (0, import_react59.useState)(null);
57872
- const isIdleRef = (0, import_react59.useRef)(true);
57873
- (0, import_react59.useEffect)(() => {
58218
+ const [updateNotice, setUpdateNotice] = (0, import_react61.useState)(null);
58219
+ const isIdleRef = (0, import_react61.useRef)(true);
58220
+ (0, import_react61.useEffect)(() => {
57874
58221
  isIdleRef.current = !live.streaming;
57875
58222
  }, [live.streaming]);
57876
- const addUpdateItem = (0, import_react59.useCallback)(
58223
+ const addUpdateItem = (0, import_react61.useCallback)(
57877
58224
  (item) => {
57878
58225
  if (item.type === "info" /* INFO */) {
57879
58226
  applyEvent({ type: "info", text: item.text });
@@ -57885,25 +58232,25 @@ function OpenTuiEntryApp({
57885
58232
  },
57886
58233
  [applyEvent]
57887
58234
  );
57888
- const setUpdateInfo = (0, import_react59.useCallback)((info) => {
58235
+ const setUpdateInfo = (0, import_react61.useCallback)((info) => {
57889
58236
  setUpdateNotice(info?.message ?? null);
57890
58237
  }, []);
57891
58238
  useUpdateNoticeFlush(addUpdateItem, setUpdateInfo, isIdleRef, live.streaming);
57892
- const [exitHint, setExitHint] = (0, import_react59.useState)(null);
57893
- const exitGuard = (0, import_react59.useMemo)(
58239
+ const [exitHint, setExitHint] = (0, import_react61.useState)(null);
58240
+ const exitGuard = (0, import_react61.useMemo)(
57894
58241
  () => createExitGuard({ onWindowExpired: /* @__PURE__ */ __name(() => setExitHint(null), "onWindowExpired") }),
57895
58242
  []
57896
58243
  );
57897
- (0, import_react59.useEffect)(() => () => exitGuard.dispose(), [exitGuard]);
57898
- const streamingRef = (0, import_react59.useRef)(live.streaming);
57899
- (0, import_react59.useEffect)(() => {
58244
+ (0, import_react61.useEffect)(() => () => exitGuard.dispose(), [exitGuard]);
58245
+ const streamingRef = (0, import_react61.useRef)(live.streaming);
58246
+ (0, import_react61.useEffect)(() => {
57900
58247
  streamingRef.current = live.streaming;
57901
58248
  }, [live.streaming]);
57902
- const waitingCallsRef = (0, import_react59.useRef)(live.waitingCalls);
57903
- (0, import_react59.useEffect)(() => {
58249
+ const waitingCallsRef = (0, import_react61.useRef)(live.waitingCalls);
58250
+ (0, import_react61.useEffect)(() => {
57904
58251
  waitingCallsRef.current = live.waitingCalls;
57905
58252
  }, [live.waitingCalls]);
57906
- const [thoughtsExpanded, setThoughtsExpanded] = (0, import_react59.useState)(false);
58253
+ const [thoughtsExpanded, setThoughtsExpanded] = (0, import_react61.useState)(false);
57907
58254
  useKeyboard((key) => {
57908
58255
  if (!matchesCommand("toggleThinkingExpanded" /* TOGGLE_THINKING_EXPANDED */, key)) return;
57909
58256
  key.preventDefault();
@@ -57929,7 +58276,7 @@ function OpenTuiEntryApp({
57929
58276
  setExitHint(exitGuardHint(guardKey));
57930
58277
  }
57931
58278
  });
57932
- const renderMain = (0, import_react59.useCallback)(
58279
+ const renderMain = (0, import_react61.useCallback)(
57933
58280
  () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("box", { flexDirection: "column", flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
57934
58281
  OpenTuiTranscriptView,
57935
58282
  {
@@ -57941,7 +58288,7 @@ function OpenTuiEntryApp({
57941
58288
  ) }),
57942
58289
  [live.items, width, height, thoughtsExpanded]
57943
58290
  );
57944
- const handleRenderError = (0, import_react59.useCallback)(
58291
+ const handleRenderError = (0, import_react61.useCallback)(
57945
58292
  (error) => {
57946
58293
  debugLogger4.error(
57947
58294
  `[FATAL_RENDER_ERROR] ${error.message}
@@ -57953,15 +58300,15 @@ ${error.stack ?? ""}`
57953
58300
  },
57954
58301
  [config]
57955
58302
  );
57956
- const handleStartNewSession = (0, import_react59.useCallback)(
58303
+ const handleStartNewSession = (0, import_react61.useCallback)(
57957
58304
  (sessionId) => startNewSession(sessionId),
57958
58305
  [startNewSession]
57959
58306
  );
57960
- const handleSubmitPrompt = (0, import_react59.useCallback)(
58307
+ const handleSubmitPrompt = (0, import_react61.useCallback)(
57961
58308
  (content, imagePaths, options) => submit(content, imagePaths, options),
57962
58309
  [submit]
57963
58310
  );
57964
- const handleQuit = (0, import_react59.useCallback)(() => {
58311
+ const handleQuit = (0, import_react61.useCallback)(() => {
57965
58312
  void exitSession(config, 0);
57966
58313
  }, [config]);
57967
58314
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -58038,7 +58385,7 @@ async function startOpenTuiUI(config, settings, startupWarnings, workspaceRoot =
58038
58385
  // children must sit in the props object: the provider declares it as a
58039
58386
  // required prop, which createElement's rest-children overloads can't fill.
58040
58387
  // eslint-disable-next-line react/no-children-prop
58041
- (0, import_react59.createElement)(SessionStatsProvider, {
58388
+ (0, import_react61.createElement)(SessionStatsProvider, {
58042
58389
  sessionId: config.getSessionId(),
58043
58390
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
58044
58391
  OpenTuiEntryApp,