@qwen-code/qwen-code 0.21.7 → 0.21.8

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 (314) hide show
  1. package/README.md +2 -0
  2. package/bundled/qc-helper/docs/configuration/settings.md +43 -30
  3. package/bundled/qc-helper/docs/features/channels/dingtalk.md +40 -2
  4. package/bundled/qc-helper/docs/features/channels/feishu.md +13 -2
  5. package/bundled/qc-helper/docs/features/channels/github.md +13 -11
  6. package/bundled/qc-helper/docs/features/channels/gitlab.md +13 -11
  7. package/bundled/qc-helper/docs/features/channels/overview.md +49 -31
  8. package/bundled/qc-helper/docs/features/channels/plugins.md +2 -2
  9. package/bundled/qc-helper/docs/features/channels/qqbot.md +4 -2
  10. package/bundled/qc-helper/docs/features/channels/telegram.md +4 -2
  11. package/bundled/qc-helper/docs/features/channels/wecom.md +1 -1
  12. package/bundled/qc-helper/docs/features/code-review.md +4 -0
  13. package/bundled/qc-helper/docs/features/commands.md +1 -1
  14. package/bundled/qc-helper/docs/features/hooks.md +52 -0
  15. package/bundled/qc-helper/docs/integration-jetbrains.md +1 -0
  16. package/bundled/qc-helper/docs/qwen-serve.md +4 -1
  17. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +50 -36
  18. package/bundled/review/SKILL.md +28 -5
  19. package/chunks/{MaxSizedBox-ANWZBPTS.js → MaxSizedBox-7PM6BGJ5.js} +26 -22
  20. package/chunks/{StandaloneSessionPicker-XKS3VU3A.js → StandaloneSessionPicker-3UQHM7GV.js} +44 -40
  21. package/chunks/{acp-startup-profiler-ORIQ2CCQ.js → acp-startup-profiler-B5BYAMYQ.js} +2 -2
  22. package/chunks/{acpAgent-KUAZ3GCZ.js → acpAgent-5UWLFV6V.js} +534 -262
  23. package/chunks/{agent-T6PTGX5R.js → agent-624T2BLO.js} +26 -22
  24. package/chunks/{agent-headless-PR7YCB7S.js → agent-headless-2EE5J2KX.js} +26 -22
  25. package/chunks/{artifact-tool-U4VOZIK5.js → artifact-tool-N652YE4L.js} +1 -1
  26. package/chunks/{askUserQuestion-XOBQLPFA.js → askUserQuestion-ONW74PKJ.js} +1 -1
  27. package/chunks/{bridge-NU6YEEHK.js → bridge-JENKGFFP.js} +29 -25
  28. package/chunks/{ca-NYKNH222.js → ca-ZLKAB4K3.js} +6 -0
  29. package/chunks/{channel-management-service-FSQ7SHYI.js → channel-management-service-DDWUPHMU.js} +19 -10
  30. package/chunks/{channel-settings-store-35VQVUVV.js → channel-settings-store-SA6JZSPH.js} +34 -30
  31. package/chunks/{channel-worker-group-JWQK224X.js → channel-worker-group-E67EN3RV.js} +5 -5
  32. package/chunks/{channel-worker-manager-77E3OXRQ.js → channel-worker-manager-SW4C45CF.js} +5 -5
  33. package/chunks/{channel-worker-supervisor-62YWUGP2.js → channel-worker-supervisor-5SRD24FG.js} +3 -3
  34. package/chunks/{chunk-CJXIIILK.js → chunk-2FRY5CRX.js} +1 -1
  35. package/chunks/{chunk-ZJ3VGYHK.js → chunk-2ILAOM2I.js} +34 -17
  36. package/chunks/{chunk-6XJMFJ4D.js → chunk-2M4K4KYS.js} +177 -120
  37. package/chunks/{chunk-CNIID3TV.js → chunk-2UUMVNYT.js} +1 -1
  38. package/chunks/{chunk-22NBYCPD.js → chunk-3P2LV43B.js} +1 -1
  39. package/chunks/{chunk-2U3WZGZG.js → chunk-3PY4LPJF.js} +19 -131
  40. package/chunks/{chunk-SPMY6CX6.js → chunk-3SE7J4DR.js} +3 -3
  41. package/chunks/{chunk-6UWFTUQL.js → chunk-3WNQOYHQ.js} +66 -22
  42. package/chunks/{chunk-KXSDEOFU.js → chunk-4ALIARFY.js} +1 -1
  43. package/chunks/{chunk-D3UEZIQH.js → chunk-4DU3NCHG.js} +48 -55
  44. package/chunks/{chunk-BGG4MBYD.js → chunk-4PYCZH2V.js} +4 -187
  45. package/chunks/{chunk-H2UQ2M5Z.js → chunk-4WU6NY7F.js} +96 -22
  46. package/chunks/{chunk-TLV2IMHR.js → chunk-5ZGR6RKJ.js} +3 -3
  47. package/chunks/{chunk-3K7FH2KQ.js → chunk-67N6HB5H.js} +1310 -171
  48. package/chunks/{chunk-EORNAQDT.js → chunk-6TR7CFXH.js} +1 -1
  49. package/chunks/{chunk-NG2R4N5O.js → chunk-6ZRFAKXK.js} +1 -1
  50. package/chunks/{chunk-P2AJ7FTI.js → chunk-757GB46F.js} +1 -1
  51. package/chunks/{chunk-72LNFGUY.js → chunk-77QVBFCU.js} +3 -3
  52. package/chunks/{chunk-OH2VKQXH.js → chunk-7DVT4LVV.js} +37 -30
  53. package/chunks/{chunk-KKJJB5X6.js → chunk-7VUERJHS.js} +1503 -815
  54. package/chunks/{chunk-VOARQPTA.js → chunk-B52AWKBB.js} +65 -21
  55. package/chunks/{chunk-Y4EWSQF7.js → chunk-BF224XHL.js} +2 -2
  56. package/chunks/{chunk-PJOBIWUG.js → chunk-BF52U4XJ.js} +1 -1
  57. package/chunks/{chunk-55LYDVPU.js → chunk-C5VWPTGT.js} +1 -1
  58. package/chunks/{chunk-W7U4ESW2.js → chunk-CG3WBKJK.js} +1 -1
  59. package/chunks/chunk-COBO5EBO.js +135 -0
  60. package/chunks/chunk-CPG6P4GG.js +82 -0
  61. package/chunks/{chunk-DIEFUBV6.js → chunk-DIWZNWZT.js} +205 -35
  62. package/chunks/{chunk-AE77C5ZU.js → chunk-DQSDACD2.js} +1 -1
  63. package/chunks/{chunk-P3LEG54R.js → chunk-DX5W5AON.js} +2 -2
  64. package/chunks/{chunk-EUQTXRKZ.js → chunk-E4ZBKMSF.js} +5 -5
  65. package/chunks/{chunk-FPM27XN4.js → chunk-EIVICVHM.js} +4 -4
  66. package/chunks/{chunk-YHEEE624.js → chunk-EN2TKTFH.js} +1 -1
  67. package/chunks/chunk-F6WFNA7U.js +22 -0
  68. package/chunks/{chunk-FZBZSYKU.js → chunk-FN6YXJOP.js} +1 -1
  69. package/chunks/{chunk-KR4ZSC7K.js → chunk-FWBXMANW.js} +3 -3
  70. package/chunks/{chunk-LA7YLSR6.js → chunk-FYAXKJK7.js} +327 -67
  71. package/chunks/{chunk-CSZEXZBE.js → chunk-GBDINRIL.js} +3 -3
  72. package/chunks/{chunk-SCI7K3GM.js → chunk-GOEVOFQI.js} +19 -10
  73. package/chunks/{chunk-LEMXGVEP.js → chunk-GQCEQPYQ.js} +3 -3
  74. package/chunks/{chunk-Y7E5LNLO.js → chunk-GXSNGY5M.js} +1027 -876
  75. package/chunks/{chunk-6XU3PH66.js → chunk-HA3SAB64.js} +22 -69
  76. package/chunks/{chunk-Y4NGLFGJ.js → chunk-HUWENAHO.js} +1 -1
  77. package/chunks/{chunk-3ULCB3NE.js → chunk-HV76SFIA.js} +1 -1
  78. package/chunks/{chunk-CB2464BK.js → chunk-HWX5HPUG.js} +14 -4
  79. package/chunks/{chunk-LZC3B5N2.js → chunk-IA7TGCN2.js} +2 -2
  80. package/chunks/{chunk-RERATVSK.js → chunk-IBYULW65.js} +6 -6
  81. package/chunks/{chunk-HYRDKNUY.js → chunk-IUQ52YJK.js} +1 -1
  82. package/chunks/{chunk-TDXGKHDN.js → chunk-IYES5WOT.js} +2 -2
  83. package/chunks/{chunk-RGSBTHSU.js → chunk-KAQCJO6Y.js} +131 -4
  84. package/chunks/{chunk-VWOVHOTT.js → chunk-KJZ26VBX.js} +1 -1
  85. package/chunks/{chunk-6GONZVLS.js → chunk-KKDVZLGL.js} +1 -1
  86. package/chunks/{chunk-MKVZE4ZJ.js → chunk-KTJFU7RT.js} +3 -2
  87. package/chunks/{chunk-R574ATRM.js → chunk-M2PNLYGY.js} +41 -0
  88. package/chunks/{chunk-6EOI4HOK.js → chunk-M3STHEMM.js} +12 -17
  89. package/chunks/chunk-NGYI5EF5.js +244 -0
  90. package/chunks/{chunk-ALGGS7UH.js → chunk-NPQ5ZKRP.js} +82 -1
  91. package/chunks/{chunk-HQB2KUAN.js → chunk-NPUXXRJI.js} +1 -1
  92. package/chunks/{chunk-QETYKPMG.js → chunk-NVRDQFCX.js} +1 -1
  93. package/chunks/{chunk-PQBHU2IA.js → chunk-OHKJVAKG.js} +10 -10
  94. package/chunks/{chunk-CYR3HI5X.js → chunk-OQTXYMKW.js} +2 -2
  95. package/chunks/{chunk-DBOFL3LQ.js → chunk-PG62DFWD.js} +10 -10
  96. package/chunks/{chunk-2VSTGY6M.js → chunk-PJRW65JO.js} +1 -1
  97. package/chunks/{chunk-33ACCIIY.js → chunk-PLFATELK.js} +1 -1
  98. package/chunks/{chunk-IC4Z6LX6.js → chunk-PYQADEFD.js} +5 -0
  99. package/chunks/{chunk-MAJS7AT4.js → chunk-QGHSP65Z.js} +2 -2
  100. package/chunks/{chunk-OHJLEW5J.js → chunk-QQWD7LZV.js} +4 -4
  101. package/chunks/{chunk-ZXU5UHMI.js → chunk-QXVSWG66.js} +2 -2
  102. package/chunks/{chunk-E33LOKRA.js → chunk-RPWVIXDB.js} +18 -1
  103. package/chunks/{chunk-TYKC75AX.js → chunk-S3Y3GBFD.js} +1 -1
  104. package/chunks/{chunk-7UFKAV7Y.js → chunk-S6HYI3MF.js} +2 -2
  105. package/chunks/chunk-SAH4BD2J.js +92 -0
  106. package/chunks/{chunk-OMKQH5C5.js → chunk-SNRT2TJJ.js} +6 -23
  107. package/chunks/chunk-SR7RZ4MS.js +202 -0
  108. package/chunks/{chunk-CXE7E23H.js → chunk-TE3ZAJE7.js} +45 -17
  109. package/chunks/{chunk-S7CV4KO6.js → chunk-TKSZJ5BV.js} +3 -3
  110. package/chunks/{chunk-3NB7TSE2.js → chunk-U5SLIG7E.js} +1 -1
  111. package/chunks/chunk-UA5H3DS2.js +203 -0
  112. package/chunks/{chunk-24ER7UV4.js → chunk-UFALT4LK.js} +1 -1
  113. package/chunks/{chunk-YJQCUTT2.js → chunk-VWMUDKLC.js} +3 -3
  114. package/chunks/{chunk-RMH5OWLD.js → chunk-VXZ5HAOV.js} +1 -1
  115. package/chunks/{chunk-BVWVWGLE.js → chunk-WAUGQKUU.js} +4 -64
  116. package/chunks/{chunk-SHZYHGQH.js → chunk-WG6542MA.js} +1 -1
  117. package/chunks/{chunk-5KH532V7.js → chunk-WV5J6Q6N.js} +1 -1
  118. package/chunks/{chunk-RNVQB725.js → chunk-XHD7CRP2.js} +2 -2
  119. package/chunks/{chunk-W4B7UBUS.js → chunk-XZKQT2B2.js} +5 -5
  120. package/chunks/{chunk-6HVUFDS2.js → chunk-Y4TETC74.js} +22 -13
  121. package/chunks/{chunk-RZHU3ILK.js → chunk-YEF7XEO2.js} +4 -4
  122. package/chunks/{chunk-RUL4S3K3.js → chunk-YHJFF7KH.js} +146 -45
  123. package/chunks/{chunk-23RZCH76.js → chunk-YOM7DEGB.js} +3 -3
  124. package/chunks/{chunk-OFI7IGST.js → chunk-ZCLLJARV.js} +9 -9
  125. package/chunks/{chunk-GSS34377.js → chunk-ZHA242R4.js} +2 -2
  126. package/chunks/{chunk-TRLYP7OF.js → chunk-ZPLALRXZ.js} +17 -9
  127. package/chunks/{chunk-WUC6ZFXO.js → chunk-ZWBUH5UP.js} +1 -1
  128. package/chunks/{computer-use-KEAPATUY.js → computer-use-ESQYJ3JY.js} +26 -22
  129. package/chunks/{config-utils-K7SCOWHD.js → config-utils-XQHBJP7G.js} +4 -4
  130. package/chunks/{contextCommand-ZJA6A5K5.js → contextCommand-CX3YF4ZE.js} +28 -24
  131. package/chunks/{core-runtime-QMJPWHCI.js → core-runtime-DIAU7JMG.js} +30 -26
  132. package/chunks/{create-sub-session-DJE6XICH.js → create-sub-session-HDPD6HOA.js} +26 -22
  133. package/chunks/{create-sub-session-E4PBYXV5.js → create-sub-session-QIDZUOPU.js} +1 -1
  134. package/chunks/{cron-create-GRBWYMIJ.js → cron-create-VONA5JYY.js} +1 -1
  135. package/chunks/{cron-delete-4CMKBR2M.js → cron-delete-5JXSP2MI.js} +1 -1
  136. package/chunks/{cron-list-W7K4ASOA.js → cron-list-KE4F2CIR.js} +1 -1
  137. package/chunks/{daemon-SCTQMM7Z.js → daemon-VZBGJUNL.js} +30 -0
  138. package/chunks/{daemon-status-provider-FSWDPE2G.js → daemon-status-provider-H6O4UQ4F.js} +33 -29
  139. package/chunks/{daemon-trust-policy-P5L5VFAY.js → daemon-trust-policy-BNUXG6MT.js} +33 -29
  140. package/chunks/{daemon-trust-policy-monitor-73JYN6ET.js → daemon-trust-policy-monitor-E4EQ7GF4.js} +33 -29
  141. package/chunks/{de-VL76CPLV.js → de-LIW4XVLN.js} +5 -0
  142. package/chunks/{deferred-core-runtime-BWRCCFTE.js → deferred-core-runtime-CBMSHPAU.js} +26 -22
  143. package/chunks/{display-image-O2XFPQTC.js → display-image-NQRSIBXM.js} +2 -2
  144. package/chunks/{dist-DPPHJAVL.js → dist-EEEQGCZA.js} +918 -142
  145. package/chunks/{dist-K4WWQBHS.js → dist-HIACTZEK.js} +55 -15
  146. package/chunks/{dist-3BMEUGTG.js → dist-IRL7WA5Z.js} +1 -1
  147. package/chunks/{dist-HVBMEYWK.js → dist-KVISB2O2.js} +1 -1
  148. package/chunks/{dist-KS4O2NKE.js → dist-MBF3I5MX.js} +14 -8
  149. package/chunks/{dist-SFQ34F4M.js → dist-MKX5OSFF.js} +5 -4
  150. package/chunks/{dist-7JGAAQSC.js → dist-RCH3I7SS.js} +2 -2
  151. package/chunks/{dist-C5U4LJKW.js → dist-TUSWNE2I.js} +5 -4
  152. package/chunks/{earlyInputCapture-L5ST23A6.js → earlyInputCapture-UIOP7OIN.js} +26 -22
  153. package/chunks/{edit-LHHRFNFK.js → edit-ITMZYFKA.js} +26 -22
  154. package/chunks/{en-IRJ2WN5T.js → en-SY5GTIGX.js} +6 -0
  155. package/chunks/{enter-worktree-6NXCRZPF.js → enter-worktree-S4PL5UV6.js} +26 -22
  156. package/chunks/{enterPlanMode-ZVQT4U7D.js → enterPlanMode-YV52NNJT.js} +26 -22
  157. package/chunks/{environment-GJ2HWJOS.js → environment-NGOWPRZV.js} +30 -26
  158. package/chunks/{errors-6RLH3XXC.js → errors-BU26DTDX.js} +28 -24
  159. package/chunks/{exit-worktree-I2YLUHHY.js → exit-worktree-XRM6LH5F.js} +26 -22
  160. package/chunks/{exitPlanMode-7CCWKO7I.js → exitPlanMode-ZLI5F7KR.js} +26 -22
  161. package/chunks/{fast-path-DVFD4HQD.js → fast-path-UJWORIED.js} +23 -3
  162. package/chunks/{fast-path-settings-WQJU2LAT.js → fast-path-settings-37WQD5B2.js} +6 -3
  163. package/chunks/{fr-GK3HQYVB.js → fr-RQFO7U4P.js} +5 -0
  164. package/chunks/{gemini-7FWGOYD4.js → gemini-ZSKNDUMU.js} +77 -65
  165. package/chunks/{geminiContentGenerator-V2WVLIXU.js → geminiContentGenerator-YGEXOEKD.js} +1 -1
  166. package/chunks/{glob-3N6GGI75.js → glob-7KZG44BR.js} +26 -22
  167. package/chunks/{goal-tools-APOW6UXL.js → goal-tools-PXWN5VK3.js} +4 -2
  168. package/chunks/{grep-V43ILZVX.js → grep-6ZFC7RJ5.js} +26 -22
  169. package/chunks/{handleAutoUpdate-A5WFVWIA.js → handleAutoUpdate-KSEL3TQS.js} +30 -26
  170. package/chunks/{i18n-PLVQ4FBZ.js → i18n-ZIUXBW5V.js} +27 -23
  171. package/chunks/{image-gen-7C6IK6DC.js → image-gen-AUIZJJNK.js} +7 -5
  172. package/chunks/{initializer-CVAIKZYL.js → initializer-7AHY3N6Q.js} +33 -29
  173. package/chunks/{installationInfo-J6QDHNTK.js → installationInfo-VGBXMYLY.js} +27 -23
  174. package/chunks/{ja-3FA46IKD.js → ja-KOZKHJHZ.js} +5 -0
  175. package/chunks/{list-ZZ4OUUWV.js → list-PSFKQHLB.js} +36 -32
  176. package/chunks/{list-agents-KFFIIS2G.js → list-agents-Z4WABFDZ.js} +1 -1
  177. package/chunks/{loadedSettingsAdapter-QRYRJSWL.js → loadedSettingsAdapter-FTMRCTOF.js} +33 -29
  178. package/chunks/{loggingContentGenerator-OJCO75HM.js → loggingContentGenerator-MZAN52UV.js} +7 -5
  179. package/chunks/{loop-wakeup-TLMJPMMP.js → loop-wakeup-UZ5RL5Y2.js} +2 -2
  180. package/chunks/{ls-UVVE2XGE.js → ls-TVHDGIES.js} +1 -1
  181. package/chunks/{lsp-QMEA2VLB.js → lsp-CVN6OQPI.js} +1 -1
  182. package/chunks/{managed-npm-update-PCOSCP2N.js → managed-npm-update-O4NHK45X.js} +27 -23
  183. package/chunks/{mcp-M3WKKWKY.js → mcp-6CFP2AYQ.js} +33 -29
  184. package/chunks/{monitor-GN24FH6C.js → monitor-DAKD6OU4.js} +26 -22
  185. package/chunks/{nonInteractiveCli-KPTU3VSQ.js → nonInteractiveCli-RC7VIUZL.js} +66 -60
  186. package/chunks/{notebook-edit-4YM65BBO.js → notebook-edit-474DPMRL.js} +34 -22
  187. package/chunks/{openaiContentGenerator-EDQT6GTV.js → openaiContentGenerator-2NFY2MWO.js} +19 -9
  188. package/chunks/{pidfile-JOIIRN2C.js → pidfile-KBFVDNQP.js} +26 -22
  189. package/chunks/{process-registry-2CHQBXH5.js → process-registry-PMJOA5CO.js} +15 -0
  190. package/chunks/{processUtils-5SV4MX3Q.js → processUtils-6GRYH4Y3.js} +2 -2
  191. package/chunks/{pt-3AOBKPIJ.js → pt-U6AOCTMF.js} +5 -0
  192. package/chunks/{qwenContentGenerator-ODRJSUGR.js → qwenContentGenerator-KAHU6IZY.js} +33 -28
  193. package/chunks/{qwenOAuth2-NESCMZ47.js → qwenOAuth2-RRQTCP4W.js} +7 -5
  194. package/chunks/{read-file-HPSODLPK.js → read-file-3M6WXDXP.js} +6 -4
  195. package/chunks/{read-mcp-resource-2TNSJTC3.js → read-mcp-resource-PZ4ZF6YL.js} +1 -1
  196. package/chunks/{record-artifact-RAON52FC.js → record-artifact-P4HFMS7X.js} +2 -2
  197. package/chunks/{resumeHistoryUtils-TXCOFFMQ.js → resumeHistoryUtils-D6TAY3HX.js} +30 -26
  198. package/chunks/{ripGrep-ZKQGTQAO.js → ripGrep-PLPENT3E.js} +26 -22
  199. package/chunks/{ru-VJRAMC4W.js → ru-CMX4UMYP.js} +5 -0
  200. package/chunks/{run-qwen-serve-ZPKPKECF.js → run-qwen-serve-ZAFIJKJC.js} +168 -54
  201. package/chunks/{runtime-2FLNNM36.js → runtime-ZED7CYOZ.js} +38 -34
  202. package/chunks/{scheduler-365PJHNR.js → scheduler-MD3AL2W5.js} +26 -22
  203. package/chunks/{send-message-ZM7MRUGP.js → send-message-CAMSLG2L.js} +4 -3
  204. package/chunks/{serve-QD2RNLKJ.js → serve-E3VUDRZN.js} +33 -29
  205. package/chunks/{server-XLJVLTYM.js → server-OWMEMAKR.js} +450 -231
  206. package/chunks/{session-3VTUHH4Q.js → session-HZ57QK7K.js} +158 -97
  207. package/chunks/{settings-KULVPCQC.js → settings-V7BR3RKP.js} +32 -28
  208. package/chunks/{shell-3SWW22MH.js → shell-23OMNMW6.js} +26 -22
  209. package/chunks/{skill-KDHWYS7W.js → skill-6HBDYZRS.js} +7 -5
  210. package/chunks/{skill-settings-NMY4JEJC.js → skill-settings-HWJLTU7M.js} +32 -28
  211. package/chunks/{spawnChannel-ZKS4Q5OU.js → spawnChannel-N6KKUW5B.js} +27 -23
  212. package/chunks/{standalone-update-7CXPGAQ4.js → standalone-update-QGIKHATD.js} +28 -24
  213. package/chunks/{startInteractiveUI-2QQLEKM6.js → startInteractiveUI-GX2CRL42.js} +365 -155
  214. package/chunks/{syntheticOutput-ZLCUTKO2.js → syntheticOutput-PEBJQYJV.js} +2 -2
  215. package/chunks/{task-create-CQP5UEA3.js → task-create-5NWCQSJF.js} +5 -4
  216. package/chunks/{task-list-XLEZOJXP.js → task-list-53265TRZ.js} +1 -1
  217. package/chunks/{task-stop-7ZQM5CFF.js → task-stop-FPCOIRYX.js} +1 -1
  218. package/chunks/{task-update-JA75U2SN.js → task-update-5HN577LS.js} +5 -4
  219. package/chunks/{team-create-2WTNGAOX.js → team-create-CFFKU7KL.js} +26 -22
  220. package/chunks/{team-delete-MHY3UZGY.js → team-delete-MMQB4OSC.js} +1 -1
  221. package/chunks/{team-plan-approval-LZTYLEG4.js → team-plan-approval-6EFOKR6A.js} +26 -22
  222. package/chunks/{terminal-image-renderer-R5HHAFJN.js → terminal-image-renderer-TLDNACQY.js} +28 -24
  223. package/chunks/{theme-manager-PAUCSJFF.js → theme-manager-5LJ3H7VO.js} +26 -22
  224. package/chunks/{todoWrite-UPVOHYGD.js → todoWrite-JGV6VLOX.js} +1 -1
  225. package/chunks/{tool-search-2BFCGLI6.js → tool-search-UJV3A24H.js} +9 -6
  226. package/chunks/{total-session-admission-MK4SINFK.js → total-session-admission-D63QYXGO.js} +29 -25
  227. package/chunks/{trustedFolders-TJ5S26N7.js → trustedFolders-KZCOB53W.js} +30 -24
  228. package/chunks/{update-relaunch-N7AYLARF.js → update-relaunch-IFILM3SA.js} +5 -5
  229. package/chunks/{updateCheck-QRZ3DVT5.js → updateCheck-YZ2CRCFC.js} +29 -25
  230. package/chunks/{useAutoAcceptIndicator-DBJ7Y5AF.js → useAutoAcceptIndicator-AXEVNA3Q.js} +35 -31
  231. package/chunks/{validateNonInterActiveAuth-6ZQWUDS3.js → validateNonInterActiveAuth-3WTOJFWA.js} +61 -57
  232. package/chunks/{version-AJQGQWXC.js → version-GXK7OHZY.js} +1 -1
  233. package/chunks/{web-fetch-QWJYRXFL.js → web-fetch-ILB4GAVR.js} +12 -8
  234. package/chunks/{web-search-2AOXJGHU.js → web-search-HKRPGPZZ.js} +8 -6
  235. package/chunks/{workflow-ERH3SJG2.js → workflow-FXIPRQQA.js} +750 -147
  236. package/chunks/{workspace-providers-status-HZ474RA4.js → workspace-providers-status-NYHC7HSR.js} +35 -31
  237. package/chunks/{workspace-registration-store-6EUP4JXG.js → workspace-registration-store-AKEB7OMW.js} +1 -1
  238. package/chunks/{workspace-registry-R4APRRNC.js → workspace-registry-CDAS5TVZ.js} +29 -25
  239. package/chunks/{workspace-service-HFIFDMU7.js → workspace-service-PAMUKMAV.js} +36 -32
  240. package/chunks/{workspace-skills-status-HAHEIHGK.js → workspace-skills-status-YQSHCCMS.js} +33 -29
  241. package/chunks/{workspace-trust-reconciler-65GTAGDK.js → workspace-trust-reconciler-RPTXOIY2.js} +36 -32
  242. package/chunks/{write-file-B34CDELV.js → write-file-CGS57TS4.js} +26 -22
  243. package/chunks/{zh-ARWDLDLR.js → zh-AGL2FVBI.js} +6 -0
  244. package/chunks/{zh-TW-Y4RGI3P7.js → zh-TW-KI66MHQY.js} +6 -0
  245. package/chunks/{zoom-image-HPRBZHSS.js → zoom-image-E7D72GYV.js} +6 -4
  246. package/cli.js +13 -13
  247. package/locales/ca.js +10 -0
  248. package/locales/de.js +9 -0
  249. package/locales/en.js +10 -0
  250. package/locales/fr.js +9 -0
  251. package/locales/ja.js +9 -0
  252. package/locales/pt.js +9 -0
  253. package/locales/ru.js +9 -0
  254. package/locales/zh-TW.js +10 -0
  255. package/locales/zh.js +10 -0
  256. package/package.json +3 -3
  257. package/web-shell/assets/{arc-Ip-FFDJ0.js → arc-DybZaz32.js} +1 -1
  258. package/web-shell/assets/{architectureDiagram-3BPJPVTR-CChqgwIb.js → architectureDiagram-3BPJPVTR-jN3qBd19.js} +1 -1
  259. package/web-shell/assets/{blockDiagram-GPEHLZMM-BHN-Tfss.js → blockDiagram-GPEHLZMM-Ct5DZPrj.js} +1 -1
  260. package/web-shell/assets/{c4Diagram-AAUBKEIU-BhyjzDjN.js → c4Diagram-AAUBKEIU-CUAFMlUG.js} +1 -1
  261. package/web-shell/assets/channel-BMwLrwLW.js +1 -0
  262. package/web-shell/assets/{chunk-2J33WTMH-BB9eyHrx.js → chunk-2J33WTMH-CuV8n90B.js} +1 -1
  263. package/web-shell/assets/{chunk-4BX2VUAB-BeV7ce_J.js → chunk-4BX2VUAB-BUzl_kls.js} +1 -1
  264. package/web-shell/assets/{chunk-55IACEB6-DO7kXDiV.js → chunk-55IACEB6-BnDBLX6A.js} +1 -1
  265. package/web-shell/assets/{chunk-727SXJPM-B27MPznD.js → chunk-727SXJPM-B83uTOjm.js} +1 -1
  266. package/web-shell/assets/{chunk-AQP2D5EJ-DHIjqjD_.js → chunk-AQP2D5EJ-DM3HLgpT.js} +1 -1
  267. package/web-shell/assets/{chunk-FMBD7UC4-DabMqyN2.js → chunk-FMBD7UC4-CSQ5hgyb.js} +1 -1
  268. package/web-shell/assets/{chunk-ND2GUHAM-Dw7Nnnxc.js → chunk-ND2GUHAM-BWOF4SxX.js} +1 -1
  269. package/web-shell/assets/{chunk-QZHKN3VN-DdaZew1Q.js → chunk-QZHKN3VN-BsOH9LMi.js} +1 -1
  270. package/web-shell/assets/classDiagram-4FO5ZUOK-BGDv98jY.js +1 -0
  271. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BGDv98jY.js +1 -0
  272. package/web-shell/assets/{cose-bilkent-S5V4N54A-CgBpCYH5.js → cose-bilkent-S5V4N54A-IENqH2iJ.js} +1 -1
  273. package/web-shell/assets/{dagre-BM42HDAG-BB4IU8G0.js → dagre-BM42HDAG--dyzDTGo.js} +1 -1
  274. package/web-shell/assets/{diagram-2AECGRRQ-BcUTHU37.js → diagram-2AECGRRQ-BE7Dcqof.js} +1 -1
  275. package/web-shell/assets/{diagram-5GNKFQAL-B6Lyihyv.js → diagram-5GNKFQAL-Cr8-5OTj.js} +1 -1
  276. package/web-shell/assets/{diagram-KO2AKTUF-CRIJOjpG.js → diagram-KO2AKTUF-Bzey3uAY.js} +1 -1
  277. package/web-shell/assets/{diagram-LMA3HP47-DdNiwWWT.js → diagram-LMA3HP47-sErl28Xb.js} +1 -1
  278. package/web-shell/assets/{diagram-OG6HWLK6-Dz4b32Do.js → diagram-OG6HWLK6-Dq30ATIo.js} +1 -1
  279. package/web-shell/assets/{erDiagram-TEJ5UH35-D-8NGw77.js → erDiagram-TEJ5UH35-BkCoEfVW.js} +1 -1
  280. package/web-shell/assets/{flowDiagram-I6XJVG4X-Dun26LyM.js → flowDiagram-I6XJVG4X-DHwO0rrI.js} +1 -1
  281. package/web-shell/assets/{ganttDiagram-6RSMTGT7-F10Hu1Gc.js → ganttDiagram-6RSMTGT7-s7vAPxWq.js} +1 -1
  282. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-Bf8Ez6-D.js → gitGraphDiagram-PVQCEYII-CQxhwPOU.js} +1 -1
  283. package/web-shell/assets/index-Bckpjr-I.css +5 -0
  284. package/web-shell/assets/{index-BXqw-nGq.js → index-CF4wApWp.js} +1 -1
  285. package/web-shell/assets/index-DwEr9HEW.js +1768 -0
  286. package/web-shell/assets/{infoDiagram-5YYISTIA-DVgTMLvj.js → infoDiagram-5YYISTIA-BnFrD0bq.js} +1 -1
  287. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-uT-KepvK.js → ishikawaDiagram-YF4QCWOH-Bf9zK5NK.js} +1 -1
  288. package/web-shell/assets/{journeyDiagram-JHISSGLW-Vg_XadQf.js → journeyDiagram-JHISSGLW-CyGAhsxi.js} +1 -1
  289. package/web-shell/assets/{kanban-definition-UN3LZRKU-Dyv1ESBE.js → kanban-definition-UN3LZRKU-CbsK5akB.js} +1 -1
  290. package/web-shell/assets/{linear-BMIepYX3.js → linear-cQsF4P8D.js} +1 -1
  291. package/web-shell/assets/{mermaid.core-zA8pJ9ag.js → mermaid.core-Z4HVqrKY.js} +5 -5
  292. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BCW_BZ_5.js → mindmap-definition-RKZ34NQL-CYnrBo_f.js} +1 -1
  293. package/web-shell/assets/{pieDiagram-4H26LBE5-DseNEGp2.js → pieDiagram-4H26LBE5-CBzOfhrs.js} +1 -1
  294. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-6Z7wr1Fi.js → quadrantDiagram-W4KKPZXB-D4LK1Ebn.js} +1 -1
  295. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CVOlCRPf.js → requirementDiagram-4Y6WPE33-Bzti2Lcj.js} +1 -1
  296. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-CGhgrUJZ.js → sankeyDiagram-5OEKKPKP-yTBw5Z2s.js} +1 -1
  297. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-dlqmpLuQ.js → sequenceDiagram-3UESZ5HK-D07UVRiZ.js} +1 -1
  298. package/web-shell/assets/{stateDiagram-AJRCARHV-B9EW10Xb.js → stateDiagram-AJRCARHV-UE_lHsTn.js} +1 -1
  299. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DC6xgXjX.js +1 -0
  300. package/web-shell/assets/{timeline-definition-PNZ67QCA-BBRh0mgZ.js → timeline-definition-PNZ67QCA-DRvYdiTs.js} +1 -1
  301. package/web-shell/assets/{vennDiagram-CIIHVFJN-B8Gs-REP.js → vennDiagram-CIIHVFJN-CQLIXs0u.js} +1 -1
  302. package/web-shell/assets/{wardley-L42UT6IY-D_y80Ur7.js → wardley-L42UT6IY-JZz_Xqse.js} +1 -1
  303. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-D-CNfHJ-.js → wardleyDiagram-YWT4CUSO--i7BiJwB.js} +1 -1
  304. package/web-shell/assets/{xychartDiagram-2RQKCTM6-DQ5CvELo.js → xychartDiagram-2RQKCTM6-Bkc-bW0S.js} +1 -1
  305. package/web-shell/index.html +2 -2
  306. package/chunks/chunk-6PEXNQTX.js +0 -68
  307. package/chunks/chunk-IUFV6FYU.js +0 -81
  308. package/web-shell/assets/channel-Cu8qd6OB.js +0 -1
  309. package/web-shell/assets/classDiagram-4FO5ZUOK-BI3KrXhq.js +0 -1
  310. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BI3KrXhq.js +0 -1
  311. package/web-shell/assets/index-QQlUCJGg.css +0 -5
  312. package/web-shell/assets/index-hcgjV7vS.js +0 -1768
  313. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CJTZJJ5X.js +0 -1
  314. package/chunks/{anthropicContentGenerator-DTMVEL5M.js → anthropicContentGenerator-SSFE2753.js} +9 -9
@@ -6,13 +6,13 @@ import {
6
6
  import {
7
7
  TUI_CHAT_RECORDING_FAILURE_MESSAGE,
8
8
  reportChatRecordingFailureToAdapter
9
- } from "./chunk-3NB7TSE2.js";
9
+ } from "./chunk-U5SLIG7E.js";
10
10
  import {
11
11
  StreamJsonOutputAdapter
12
- } from "./chunk-72LNFGUY.js";
12
+ } from "./chunk-77QVBFCU.js";
13
13
  import {
14
14
  startPostRenderPrefetches
15
- } from "./chunk-OFI7IGST.js";
15
+ } from "./chunk-ZCLLJARV.js";
16
16
  import {
17
17
  AboutBox,
18
18
  BaseSelectionList,
@@ -90,7 +90,7 @@ import {
90
90
  useUIActions,
91
91
  useUIState,
92
92
  useVirtualViewport
93
- } from "./chunk-6UWFTUQL.js";
93
+ } from "./chunk-3WNQOYHQ.js";
94
94
  import {
95
95
  GeminiRespondingSpinner,
96
96
  GeminiSpinner,
@@ -106,19 +106,19 @@ import {
106
106
  shouldDisplayGoalStateCause,
107
107
  useStreamingContext,
108
108
  waitForGoalRuntime
109
- } from "./chunk-OH2VKQXH.js";
109
+ } from "./chunk-7DVT4LVV.js";
110
110
  import {
111
111
  stopAndGetCapturedInput
112
112
  } from "./chunk-TZEZYNYD.js";
113
113
  import {
114
114
  useAutoAcceptIndicator
115
- } from "./chunk-23RZCH76.js";
115
+ } from "./chunk-YOM7DEGB.js";
116
116
  import {
117
117
  KeypressProvider,
118
118
  useFocus,
119
119
  useKeypress,
120
120
  useKeypressContext
121
- } from "./chunk-MAJS7AT4.js";
121
+ } from "./chunk-QGHSP65Z.js";
122
122
  import {
123
123
  classifyApiError,
124
124
  fireSessionDeleteHook
@@ -134,7 +134,7 @@ import {
134
134
  matchMcpServerPrefix,
135
135
  resolveAtCommandQuery,
136
136
  sanitizeDisplayText
137
- } from "./chunk-KR4ZSC7K.js";
137
+ } from "./chunk-FWBXMANW.js";
138
138
  import {
139
139
  BuiltinCommandLoader,
140
140
  BundledSkillLoader,
@@ -175,22 +175,23 @@ import {
175
175
  resetBackgroundStateForSessionSwitch,
176
176
  serializeUserPromptExpansionPrompt,
177
177
  supportsMatchers
178
- } from "./chunk-RUL4S3K3.js";
178
+ } from "./chunk-YHJFF7KH.js";
179
179
  import {
180
180
  EXTENSION_RELOAD_FAILED_REASON,
181
181
  ExtensionRefreshState,
182
182
  appEvents,
183
183
  cleanupReviewWorktreeLeases,
184
+ isValidSessionId,
184
185
  loadHierarchicalGeminiMemory
185
- } from "./chunk-KKJJB5X6.js";
186
+ } from "./chunk-7VUERJHS.js";
186
187
  import {
187
188
  getCommandDisplayName,
188
189
  getCommandSourceBadge
189
- } from "./chunk-QETYKPMG.js";
190
+ } from "./chunk-NVRDQFCX.js";
190
191
  import {
191
192
  computeSessionStats,
192
193
  levelLabel
193
- } from "./chunk-RNVQB725.js";
194
+ } from "./chunk-XHD7CRP2.js";
194
195
  import {
195
196
  disableKittyProtocol,
196
197
  isKittyProtocolEnabled,
@@ -209,10 +210,10 @@ import {
209
210
  oscKittyNotify,
210
211
  saveClipboardImage,
211
212
  writeOsc52
212
- } from "./chunk-YHEEE624.js";
213
- import "./chunk-SCI7K3GM.js";
213
+ } from "./chunk-EN2TKTFH.js";
214
+ import "./chunk-GOEVOFQI.js";
214
215
  import "./chunk-4WGODMVR.js";
215
- import "./chunk-TLV2IMHR.js";
216
+ import "./chunk-5ZGR6RKJ.js";
216
217
  import "./chunk-KW7NOTN6.js";
217
218
  import {
218
219
  MaxSizedBox,
@@ -242,40 +243,40 @@ import {
242
243
  import {
243
244
  require_react
244
245
  } from "./chunk-5QWWOFGG.js";
245
- import "./chunk-Y4EWSQF7.js";
246
- import "./chunk-7UFKAV7Y.js";
246
+ import "./chunk-BF224XHL.js";
247
+ import "./chunk-S6HYI3MF.js";
247
248
  import {
248
249
  MAX_INLINE_IMAGES_PER_ITEM,
249
250
  collectInlineImages,
250
251
  getInlineImageData
251
- } from "./chunk-2VSTGY6M.js";
252
+ } from "./chunk-PJRW65JO.js";
252
253
  import {
253
254
  relaunchApp
254
- } from "./chunk-HQB2KUAN.js";
255
+ } from "./chunk-NPUXXRJI.js";
255
256
  import {
256
257
  setUpdateHandler
257
- } from "./chunk-LEMXGVEP.js";
258
- import "./chunk-GSS34377.js";
258
+ } from "./chunk-GQCEQPYQ.js";
259
+ import "./chunk-ZHA242R4.js";
259
260
  import "./chunk-YAF2MQZ6.js";
260
261
  import {
261
262
  AUTO_THEME_NAME,
262
263
  DEFAULT_THEME,
263
264
  themeManager
264
265
  } from "./chunk-CTJLZLB5.js";
265
- import "./chunk-CB2464BK.js";
266
+ import "./chunk-HWX5HPUG.js";
266
267
  import "./chunk-6H67XLET.js";
267
- import "./chunk-FPM27XN4.js";
268
+ import "./chunk-EIVICVHM.js";
268
269
  import {
269
270
  getErrorMessage as getErrorMessage2
270
- } from "./chunk-TDXGKHDN.js";
271
+ } from "./chunk-IYES5WOT.js";
271
272
  import {
272
273
  openQwenAsrRealtimeStream,
273
274
  openVoiceStream,
274
275
  openVoiceStreamWithRetry
275
276
  } from "./chunk-Q3JQ7OSU.js";
276
- import "./chunk-6XJMFJ4D.js";
277
+ import "./chunk-2M4K4KYS.js";
277
278
  import "./chunk-OWMAZHIX.js";
278
- import "./chunk-KXSDEOFU.js";
279
+ import "./chunk-4ALIARFY.js";
279
280
  import {
280
281
  cpLen,
281
282
  cpSlice,
@@ -300,36 +301,36 @@ import "./chunk-RXFQM6FQ.js";
300
301
  import "./chunk-HGCQ5SE7.js";
301
302
  import {
302
303
  isInlineModelOverrideAllowed
303
- } from "./chunk-CSZEXZBE.js";
304
+ } from "./chunk-GBDINRIL.js";
304
305
  import {
305
306
  assertVoiceBaseUrlNetworkAllowed,
306
307
  isKeytermEcho,
307
308
  isStreamingVoiceModel,
308
309
  resolveVoiceStreamConfig,
309
310
  transcribeVoiceAudio
310
- } from "./chunk-AE77C5ZU.js";
311
+ } from "./chunk-DQSDACD2.js";
311
312
  import {
312
313
  formatUnsupportedVoiceModelMessage,
313
314
  isSelectableVoiceModel
314
- } from "./chunk-55LYDVPU.js";
315
+ } from "./chunk-C5VWPTGT.js";
315
316
  import "./chunk-AOHJKPKL.js";
316
317
  import {
317
318
  computeWorkspaceSkillListUpdates,
318
319
  resolveSkillSettings,
319
320
  skillSettingStrings
320
321
  } from "./chunk-Z4X5MTRT.js";
321
- import "./chunk-EUQTXRKZ.js";
322
+ import "./chunk-E4ZBKMSF.js";
322
323
  import {
323
324
  requestConsentInteractive,
324
325
  requestConsentOrFail
325
- } from "./chunk-OHJLEW5J.js";
326
+ } from "./chunk-QQWD7LZV.js";
326
327
  import "./chunk-57OAHC2Y.js";
327
328
  import {
328
329
  createLoadedSettingsAdapter
329
- } from "./chunk-5KH532V7.js";
330
+ } from "./chunk-WV5J6Q6N.js";
330
331
  import {
331
332
  getExtendedSystemInfo
332
- } from "./chunk-SPMY6CX6.js";
333
+ } from "./chunk-3SE7J4DR.js";
333
334
  import {
334
335
  formatDuration,
335
336
  formatRelativeTime,
@@ -337,26 +338,26 @@ import {
337
338
  } from "./chunk-3SH53ANB.js";
338
339
  import "./chunk-MZSJ43WV.js";
339
340
  import "./chunk-XCGIMOLN.js";
340
- import "./chunk-ZXU5UHMI.js";
341
- import "./chunk-VWOVHOTT.js";
342
- import "./chunk-IUFV6FYU.js";
341
+ import "./chunk-QXVSWG66.js";
342
+ import "./chunk-KJZ26VBX.js";
343
+ import "./chunk-NGYI5EF5.js";
343
344
  import "./chunk-V6WHFGST.js";
344
345
  import "./chunk-DP3IHZGG.js";
345
346
  import "./chunk-6PLDPT2C.js";
346
347
  import "./chunk-FYJ7W2PI.js";
347
348
  import "./chunk-YP5KH5Y7.js";
348
- import "./chunk-24ER7UV4.js";
349
+ import "./chunk-UFALT4LK.js";
349
350
  import "./chunk-ALMR3E6Q.js";
350
351
  import "./chunk-HIBNSEJE.js";
351
352
  import "./chunk-BKHCW2BI.js";
352
353
  import "./chunk-M5GB774H.js";
353
354
  import "./chunk-UVX4Y6IN.js";
354
- import "./chunk-WUC6ZFXO.js";
355
- import "./chunk-DIEFUBV6.js";
355
+ import "./chunk-ZWBUH5UP.js";
356
+ import "./chunk-DIWZNWZT.js";
356
357
  import "./chunk-UDXSXLER.js";
357
358
  import {
358
359
  loadMcpApprovals
359
- } from "./chunk-6HVUFDS2.js";
360
+ } from "./chunk-Y4TETC74.js";
360
361
  import {
361
362
  CORRUPTED_SUFFIX,
362
363
  SettingScope,
@@ -379,7 +380,7 @@ import {
379
380
  settingExistsInScope,
380
381
  validateSettingValue,
381
382
  writeOutputLanguageAndRegisterPath
382
- } from "./chunk-PQBHU2IA.js";
383
+ } from "./chunk-OHKJVAKG.js";
383
384
  import "./chunk-RKUWKYED.js";
384
385
  import "./chunk-GOXKNSDZ.js";
385
386
  import "./chunk-IDS7MSUP.js";
@@ -388,21 +389,21 @@ import {
388
389
  localizeToolDisplayName,
389
390
  t,
390
391
  ta
391
- } from "./chunk-DBOFL3LQ.js";
392
- import "./chunk-VOARQPTA.js";
393
- import "./chunk-6PEXNQTX.js";
394
- import "./chunk-HYRDKNUY.js";
392
+ } from "./chunk-PG62DFWD.js";
393
+ import "./chunk-B52AWKBB.js";
394
+ import "./chunk-UA5H3DS2.js";
395
+ import "./chunk-IUQ52YJK.js";
395
396
  import {
396
397
  getCliVersion
397
- } from "./chunk-FZBZSYKU.js";
398
+ } from "./chunk-FN6YXJOP.js";
398
399
  import "./chunk-VJNBRRZG.js";
399
400
  import {
400
401
  isWorkspaceTrusted,
401
402
  loadTrustedFolders
402
- } from "./chunk-6XU3PH66.js";
403
+ } from "./chunk-HA3SAB64.js";
403
404
  import {
404
405
  require_strip_json_comments
405
- } from "./chunk-ALGGS7UH.js";
406
+ } from "./chunk-NPQ5ZKRP.js";
406
407
  import "./chunk-MR3PXB6E.js";
407
408
  import "./chunk-XFSFZCM5.js";
408
409
  import "./chunk-URK542T4.js";
@@ -452,6 +453,7 @@ import {
452
453
  createInstructionsLoadedCallback,
453
454
  customProvider,
454
455
  detectAutonomousSentinel,
456
+ didWriteProjectContextFile,
455
457
  fetchGitDiff,
456
458
  fetchGitDiffHunks,
457
459
  finalizeToolResponses,
@@ -474,14 +476,17 @@ import {
474
476
  getWelcomeBackState,
475
477
  glob,
476
478
  ideContextStore,
479
+ isActiveWorkflowStatus,
477
480
  isBinary,
478
481
  isEditorAvailable,
479
482
  isExtensionCommittedWithWarningsError,
480
483
  isGatedMcpScope,
481
484
  isSessionRuntimeActive,
482
485
  isSettledStatus,
486
+ isSignalTermination,
483
487
  isSuccessStatus,
484
488
  isTerminalStatus,
489
+ isTerminalWorkflowStatus,
485
490
  loadUsageHistory,
486
491
  markDuplicateProviderToolCallResponseSent,
487
492
  matchesAnyServerPattern,
@@ -495,6 +500,7 @@ import {
495
500
  readWorktreeSessionMarker,
496
501
  redactUrlCredentials,
497
502
  refreshMemoryAfterManagedWrite,
503
+ refreshMemoryInstruction,
498
504
  resolveBaseUrl,
499
505
  resolveBranchName,
500
506
  resolveMetadataKey,
@@ -508,23 +514,23 @@ import {
508
514
  validateWorkflowName,
509
515
  watchRepoBranch,
510
516
  writeRuntimeStatus
511
- } from "./chunk-Y7E5LNLO.js";
517
+ } from "./chunk-GXSNGY5M.js";
512
518
  import "./chunk-GOFAQQZA.js";
513
519
  import "./chunk-5M6IDOMF.js";
514
520
  import "./chunk-TWPJO254.js";
515
521
  import "./chunk-H6XPXXMH.js";
516
- import "./chunk-CNIID3TV.js";
522
+ import "./chunk-2UUMVNYT.js";
517
523
  import "./chunk-MVUQRLOH.js";
518
524
  import "./chunk-XCWO3SMQ.js";
519
525
  import "./chunk-7MH4J33A.js";
520
526
  import "./chunk-6PVPNMXU.js";
521
527
  import {
522
528
  resolveModelId
523
- } from "./chunk-RMH5OWLD.js";
529
+ } from "./chunk-VXZ5HAOV.js";
524
530
  import "./chunk-IRH27ZC2.js";
525
531
  import "./chunk-QHWCP53L.js";
526
532
  import "./chunk-GNPNYXJB.js";
527
- import "./chunk-Y4NGLFGJ.js";
533
+ import "./chunk-HUWENAHO.js";
528
534
  import {
529
535
  promptIdContext
530
536
  } from "./chunk-O6GEWCJA.js";
@@ -537,36 +543,44 @@ import {
537
543
  HOOKS_CONFIG_FIELDS
538
544
  } from "./chunk-GM463R2B.js";
539
545
  import "./chunk-SEZ556DZ.js";
540
- import "./chunk-CJXIIILK.js";
546
+ import "./chunk-2FRY5CRX.js";
541
547
  import {
542
548
  elapsedActiveTime,
543
549
  goalRequiresExactPermit
544
- } from "./chunk-3K7FH2KQ.js";
550
+ } from "./chunk-67N6HB5H.js";
551
+ import {
552
+ APPROVAL_MODES
553
+ } from "./chunk-WAUGQKUU.js";
554
+ import "./chunk-PLFATELK.js";
555
+ import "./chunk-L4N6TIP7.js";
556
+ import "./chunk-SAH4BD2J.js";
545
557
  import {
546
- APPROVAL_MODES,
547
558
  runOutsideAgentContext
548
- } from "./chunk-BVWVWGLE.js";
559
+ } from "./chunk-CPG6P4GG.js";
549
560
  import "./chunk-S6LOFUVP.js";
561
+ import "./chunk-2J3OJGTL.js";
550
562
  import {
551
563
  getStartupContextLength,
552
564
  isSystemReminderContent
553
- } from "./chunk-LZC3B5N2.js";
565
+ } from "./chunk-IA7TGCN2.js";
554
566
  import "./chunk-K623ENWT.js";
555
567
  import "./chunk-AQ37AY7B.js";
556
568
  import {
557
569
  isPathWithinRoot
558
570
  } from "./chunk-EQL65XGA.js";
559
- import "./chunk-IIJEYBNH.js";
560
571
  import {
561
572
  osc8Hyperlink,
562
573
  qwenOAuth2Events,
563
574
  sanitizeForOsc,
564
575
  supportsHyperlinks,
565
576
  wrapForMultiplexer
566
- } from "./chunk-22NBYCPD.js";
577
+ } from "./chunk-3P2LV43B.js";
567
578
  import "./chunk-NAVJD2PQ.js";
568
- import "./chunk-3ULCB3NE.js";
569
- import "./chunk-BGG4MBYD.js";
579
+ import "./chunk-HV76SFIA.js";
580
+ import "./chunk-4PYCZH2V.js";
581
+ import "./chunk-P3QQPMQA.js";
582
+ import "./chunk-SR7RZ4MS.js";
583
+ import "./chunk-M6HMMKVG.js";
570
584
  import {
571
585
  REASONING_EFFORT_TIERS
572
586
  } from "./chunk-DGEIYUC3.js";
@@ -575,13 +589,8 @@ import {
575
589
  isSupportedImageMimeType
576
590
  } from "./chunk-MPHPFVKK.js";
577
591
  import "./chunk-AXMWHKXA.js";
578
- import "./chunk-DJ2GSRLV.js";
579
- import "./chunk-33ACCIIY.js";
580
- import "./chunk-L4N6TIP7.js";
581
- import "./chunk-2J3OJGTL.js";
582
- import "./chunk-P3QQPMQA.js";
583
- import "./chunk-M6HMMKVG.js";
584
592
  import "./chunk-GLCZKT5V.js";
593
+ import "./chunk-DJ2GSRLV.js";
585
594
  import "./chunk-EI3HZX6C.js";
586
595
  import {
587
596
  ApiCancelEvent,
@@ -619,11 +628,10 @@ import {
619
628
  recordSkillInvocation,
620
629
  removeMCPServerStatus,
621
630
  removeMCPStatusChangeListener,
622
- runSideQuery,
623
631
  runVisionBridge,
624
632
  shouldRunVisionBridge,
625
633
  splitImageParts
626
- } from "./chunk-2U3WZGZG.js";
634
+ } from "./chunk-3PY4LPJF.js";
627
635
  import "./chunk-WOJZWRAZ.js";
628
636
  import "./chunk-VGC4I5JJ.js";
629
637
  import {
@@ -633,14 +641,18 @@ import {
633
641
  getUserAutoMemoryRoot,
634
642
  isAnyAutoMemPath
635
643
  } from "./chunk-FVKHVJZQ.js";
636
- import "./chunk-NG2R4N5O.js";
644
+ import {
645
+ runSideQuery
646
+ } from "./chunk-COBO5EBO.js";
647
+ import "./chunk-6ZRFAKXK.js";
637
648
  import {
638
649
  ToolNames,
639
650
  isShellProgressData
640
- } from "./chunk-IC4Z6LX6.js";
651
+ } from "./chunk-PYQADEFD.js";
652
+ import "./chunk-M3STHEMM.js";
641
653
  import {
642
654
  MAINLINE_CODER_MODEL
643
- } from "./chunk-6EOI4HOK.js";
655
+ } from "./chunk-F6WFNA7U.js";
644
656
  import "./chunk-46UV252V.js";
645
657
  import {
646
658
  DEFAULT_TOKEN_LIMIT
@@ -666,7 +678,7 @@ import {
666
678
  tildeifyPath
667
679
  } from "./chunk-OIVKILPI.js";
668
680
  import "./chunk-VOQXFAY5.js";
669
- import "./chunk-PJOBIWUG.js";
681
+ import "./chunk-BF52U4XJ.js";
670
682
  import {
671
683
  finalizeStartupProfile,
672
684
  profileCheckpoint
@@ -675,11 +687,12 @@ import "./chunk-Q7YDKOGY.js";
675
687
  import {
676
688
  registerCleanup,
677
689
  runExitCleanup
678
- } from "./chunk-EORNAQDT.js";
690
+ } from "./chunk-6TR7CFXH.js";
679
691
  import {
680
692
  clearScreen,
681
693
  writeStderrLine,
682
- writeStderrLineSafe
694
+ writeStderrLineSafe,
695
+ writeStdoutLine
683
696
  } from "./chunk-KGJGEEVR.js";
684
697
  import "./chunk-75DOP5OR.js";
685
698
  import "./chunk-DMTGGOSA.js";
@@ -701,6 +714,7 @@ import {
701
714
 
702
715
  // packages/cli/src/ui/startInteractiveUI.tsx
703
716
  init_esbuild_shims();
717
+ import { stat as stat2 } from "node:fs/promises";
704
718
  import { basename as basename4 } from "node:path";
705
719
  var import_react163 = __toESM(require_react(), 1);
706
720
 
@@ -1081,8 +1095,8 @@ var RemoteInputWatcher = class {
1081
1095
  }
1082
1096
  startWatching() {
1083
1097
  try {
1084
- const stat2 = statSync(this.filePath);
1085
- this.bytesRead = stat2.size;
1098
+ const stat3 = statSync(this.filePath);
1099
+ this.bytesRead = stat3.size;
1086
1100
  this.consumedPrefixHash = this.hashFilePrefix(this.bytesRead);
1087
1101
  } catch {
1088
1102
  this.bytesRead = 0;
@@ -1107,8 +1121,8 @@ var RemoteInputWatcher = class {
1107
1121
  if (!this.active || this.reading) return Promise.resolve();
1108
1122
  let currentSize;
1109
1123
  try {
1110
- const stat2 = statSync(this.filePath);
1111
- currentSize = stat2.size;
1124
+ const stat3 = statSync(this.filePath);
1125
+ currentSize = stat3.size;
1112
1126
  } catch {
1113
1127
  return Promise.resolve();
1114
1128
  }
@@ -1692,19 +1706,19 @@ function readArtFile(absolutePath) {
1692
1706
  }
1693
1707
  const flags = typeof fs.constants.O_NOFOLLOW === "number" ? fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW : fs.constants.O_RDONLY;
1694
1708
  fd = fs.openSync(absolutePath, flags);
1695
- const stat2 = fs.fstatSync(fd);
1696
- if (!stat2.isFile()) {
1709
+ const stat3 = fs.fstatSync(fd);
1710
+ if (!stat3.isFile()) {
1697
1711
  debugLogger3.warn(
1698
1712
  `Ignoring ui.customAsciiArt: ${absolutePath} is not a regular file.`
1699
1713
  );
1700
1714
  return void 0;
1701
1715
  }
1702
- const size = Math.min(stat2.size, MAX_FILE_BYTES);
1716
+ const size = Math.min(stat3.size, MAX_FILE_BYTES);
1703
1717
  const buffer = Buffer.alloc(size);
1704
1718
  fs.readSync(fd, buffer, 0, size, 0);
1705
- if (stat2.size > MAX_FILE_BYTES) {
1719
+ if (stat3.size > MAX_FILE_BYTES) {
1706
1720
  debugLogger3.warn(
1707
- `Truncated ui.customAsciiArt at ${absolutePath}: file is ${stat2.size} bytes, capped at ${MAX_FILE_BYTES}.`
1721
+ `Truncated ui.customAsciiArt at ${absolutePath}: file is ${stat3.size} bytes, capped at ${MAX_FILE_BYTES}.`
1708
1722
  );
1709
1723
  }
1710
1724
  return buffer.toString("utf8");
@@ -2507,6 +2521,14 @@ function findLastLE(arr, target) {
2507
2521
  return upperBound(arr, target) - 1;
2508
2522
  }
2509
2523
  __name(findLastLE, "findLastLE");
2524
+ function firstIndexOfOffsetRun(offsets, index) {
2525
+ let i = index;
2526
+ while (i > 0 && offsets[i - 1] === offsets[i]) {
2527
+ i--;
2528
+ }
2529
+ return i;
2530
+ }
2531
+ __name(firstIndexOfOffsetRun, "firstIndexOfOffsetRun");
2510
2532
  var VirtualizedListItem = (0, import_react10.memo)(
2511
2533
  ({
2512
2534
  content,
@@ -2523,10 +2545,11 @@ var VirtualizedListItem = (0, import_react10.memo)(
2523
2545
  const onHeightChangeRef = (0, import_react10.useRef)(onHeightChange);
2524
2546
  onHeightChangeRef.current = onHeightChange;
2525
2547
  (0, import_react10.useLayoutEffect)(() => {
2526
- if (hasMeasured && height > 0) {
2527
- onHeightChangeRef.current(itemKey, height);
2548
+ const measuredHeight = itemRef.current?.yogaNode?.getComputedHeight() ?? height;
2549
+ if (hasMeasured) {
2550
+ onHeightChangeRef.current(itemKey, measuredHeight);
2528
2551
  }
2529
- }, [itemKey, height, hasMeasured]);
2552
+ }, [itemKey, height, hasMeasured, content]);
2530
2553
  return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box_default, { width: "100%", flexDirection: "column", flexShrink: 0, ref: itemRef, children: shouldBeStatic ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
2531
2554
  StaticRender,
2532
2555
  {
@@ -2582,12 +2605,28 @@ function VirtualizedList(props, ref) {
2582
2605
  const containerHeight = props.containerHeight ?? measuredContainerHeight;
2583
2606
  const containerWidth = measuredContainerWidth;
2584
2607
  const [heights, setHeights] = (0, import_react10.useState)({});
2608
+ const measureAtFullHeight = props.measureAtFullHeight === true;
2609
+ const [fullHeightMeasurementPending, setFullHeightMeasurementPending] = (0, import_react10.useState)(measureAtFullHeight);
2610
+ const [previousMeasurementInputs, setPreviousMeasurementInputs] = (0, import_react10.useState)({
2611
+ enabled: measureAtFullHeight,
2612
+ data,
2613
+ renderItem
2614
+ });
2615
+ if (previousMeasurementInputs.enabled !== measureAtFullHeight || measureAtFullHeight && (previousMeasurementInputs.data !== data || previousMeasurementInputs.renderItem !== renderItem)) {
2616
+ setPreviousMeasurementInputs({
2617
+ enabled: measureAtFullHeight,
2618
+ data,
2619
+ renderItem
2620
+ });
2621
+ setFullHeightMeasurementPending(measureAtFullHeight);
2622
+ }
2585
2623
  const isInitialScrollSet = (0, import_react10.useRef)(false);
2586
2624
  const onHeightChange = (0, import_react10.useCallback)((key, height) => {
2587
2625
  setHeights((prev) => {
2588
2626
  if (prev[key] === height) return prev;
2589
2627
  return { ...prev, [key]: height };
2590
2628
  });
2629
+ setFullHeightMeasurementPending(false);
2591
2630
  }, []);
2592
2631
  (0, import_react10.useLayoutEffect)(() => {
2593
2632
  setHeights((prev) => {
@@ -2627,10 +2666,11 @@ function VirtualizedList(props, ref) {
2627
2666
  const scrollableContainerHeight = containerHeight;
2628
2667
  const getAnchorForScrollTop = (0, import_react10.useCallback)(
2629
2668
  (scrollTop2, offsets2) => {
2630
- const index = findLastLE(offsets2, scrollTop2);
2631
- if (index === -1) {
2669
+ const found = findLastLE(offsets2, scrollTop2);
2670
+ if (found === -1) {
2632
2671
  return { index: 0, offset: 0 };
2633
2672
  }
2673
+ const index = firstIndexOfOffsetRun(offsets2, found);
2634
2674
  return { index, offset: scrollTop2 - offsets2[index] };
2635
2675
  },
2636
2676
  []
@@ -2638,7 +2678,7 @@ function VirtualizedList(props, ref) {
2638
2678
  const [prevTargetScrollIndex, setPrevTargetScrollIndex] = (0, import_react10.useState)(
2639
2679
  props.targetScrollIndex
2640
2680
  );
2641
- const prevOffsetsLength = (0, import_react10.useRef)(offsets.length);
2681
+ const prevOffsetsLength = (0, import_react10.useRef)(1);
2642
2682
  const target = props.targetScrollIndex;
2643
2683
  if (target !== void 0 && offsets.length > 1) {
2644
2684
  const targetChanged = target !== prevTargetScrollIndex;
@@ -2650,8 +2690,12 @@ function VirtualizedList(props, ref) {
2650
2690
  if (isStickingToBottom) {
2651
2691
  setIsStickingToBottom(false);
2652
2692
  }
2653
- if (scrollAnchor.index !== target || scrollAnchor.offset !== 0) {
2654
- setScrollAnchor({ index: target, offset: 0 });
2693
+ const anchoredIndex = firstIndexOfOffsetRun(
2694
+ offsets,
2695
+ Math.max(0, Math.min(data.length - 1, target))
2696
+ );
2697
+ if (scrollAnchor.index !== anchoredIndex || scrollAnchor.offset !== 0) {
2698
+ setScrollAnchor({ index: anchoredIndex, offset: 0 });
2655
2699
  }
2656
2700
  }
2657
2701
  }
@@ -2771,11 +2815,19 @@ function VirtualizedList(props, ref) {
2771
2815
  heights,
2772
2816
  props.targetScrollIndex
2773
2817
  ]);
2774
- const startIndex = Math.max(0, findLastLE(offsets, actualScrollTop) - 1);
2818
+ const maxScroll = Math.max(0, totalHeight - scrollableContainerHeight);
2819
+ const clampedScrollTop = Math.min(
2820
+ Math.max(0, isStickingToBottom ? maxScroll : actualScrollTop),
2821
+ maxScroll
2822
+ );
2823
+ const startIndex = firstIndexOfOffsetRun(
2824
+ offsets,
2825
+ Math.max(0, findLastLE(offsets, clampedScrollTop) - 1)
2826
+ );
2775
2827
  const viewHeightForEndIndex = scrollableContainerHeight > 0 ? scrollableContainerHeight : 50;
2776
2828
  const endIndexOffsetRaw = upperBound(
2777
2829
  offsets,
2778
- actualScrollTop + viewHeightForEndIndex
2830
+ clampedScrollTop + viewHeightForEndIndex
2779
2831
  );
2780
2832
  const endIndex = endIndexOffsetRaw >= offsets.length ? data.length - 1 : Math.min(data.length - 1, endIndexOffsetRaw);
2781
2833
  const topSpacerHeight = renderStatic === true ? 0 : offsets[startIndex] ?? 0;
@@ -2839,11 +2891,6 @@ function VirtualizedList(props, ref) {
2839
2891
  onHeightChange
2840
2892
  ]);
2841
2893
  const { getScrollTop, setPendingScrollTop } = useBatchedScroll(scrollTop);
2842
- const maxScroll = Math.max(0, totalHeight - scrollableContainerHeight);
2843
- const clampedScrollTop = Math.min(
2844
- Math.max(0, isStickingToBottom ? maxScroll : actualScrollTop),
2845
- maxScroll
2846
- );
2847
2894
  const getScrollbarGeometry = (0, import_react10.useCallback)(() => {
2848
2895
  const shouldShowScrollbar = (props.showScrollbar ?? true) && maxScroll > 0;
2849
2896
  if (!shouldShowScrollbar || !rootRef.current || scrollableContainerHeight <= 0) {
@@ -3065,7 +3112,7 @@ function VirtualizedList(props, ref) {
3065
3112
  maxScroll,
3066
3113
  scrollbarThumbActive
3067
3114
  ]);
3068
- const rootHeight = props.containerHeight !== void 0 ? Math.min(props.containerHeight, totalHeight) : "100%";
3115
+ const rootHeight = props.containerHeight !== void 0 ? fullHeightMeasurementPending ? props.containerHeight : Math.min(props.containerHeight, totalHeight) : "100%";
3069
3116
  return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Box_default, { ref: rootRef, width: "100%", height: rootHeight, flexDirection: "row", children: [
3070
3117
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
3071
3118
  Box_default,
@@ -3863,17 +3910,19 @@ var MainContent = /* @__PURE__ */ __name(() => {
3863
3910
  const pendingStateRef = (0, import_react14.useRef)({
3864
3911
  activePtyId: uiState.activePtyId,
3865
3912
  embeddedShellFocused: uiState.embeddedShellFocused,
3866
- isEditorDialogOpen: uiState.isEditorDialogOpen,
3867
- constrainHeight: uiState.constrainHeight,
3868
- availableTerminalHeight
3913
+ isEditorDialogOpen: uiState.isEditorDialogOpen
3869
3914
  });
3870
3915
  pendingStateRef.current = {
3871
3916
  activePtyId: uiState.activePtyId,
3872
3917
  embeddedShellFocused: uiState.embeddedShellFocused,
3873
- isEditorDialogOpen: uiState.isEditorDialogOpen,
3874
- constrainHeight: uiState.constrainHeight,
3875
- availableTerminalHeight
3918
+ isEditorDialogOpen: uiState.isEditorDialogOpen
3876
3919
  };
3920
+ const pendingAvailableTerminalHeight = pendingHistoryItems.length > 0 && uiState.constrainHeight ? availableTerminalHeight : void 0;
3921
+ const hasPendingPlainTextConfirmation = pendingHistoryItems.some(
3922
+ (item) => item.type === "tool_group" && item.tools.some(
3923
+ (tool) => tool.status === "Confirming" /* Confirming */ && tool.confirmationDetails?.type === "info" && tool.confirmationDetails.renderPromptAsPlainText === true
3924
+ )
3925
+ );
3877
3926
  const pendingSourceCopyOffsetsRef = (0, import_react14.useRef)(pendingSourceCopyOffsetsByIndex);
3878
3927
  pendingSourceCopyOffsetsRef.current = pendingSourceCopyOffsetsByIndex;
3879
3928
  const renderVirtualItem = (0, import_react14.useCallback)(
@@ -3894,7 +3943,7 @@ var MainContent = /* @__PURE__ */ __name(() => {
3894
3943
  {
3895
3944
  terminalWidth,
3896
3945
  mainAreaWidth,
3897
- availableTerminalHeight: ps.constrainHeight ? ps.availableTerminalHeight : void 0,
3946
+ availableTerminalHeight: pendingAvailableTerminalHeight,
3898
3947
  item: { ...item, id: 0 },
3899
3948
  isPending: true,
3900
3949
  isFocused: !ps.isEditorDialogOpen,
@@ -3929,7 +3978,8 @@ var MainContent = /* @__PURE__ */ __name(() => {
3929
3978
  staticAreaMaxItemHeight,
3930
3979
  uiState.slashCommands,
3931
3980
  sourceCopyOffsetsByHistoryItem,
3932
- fullDetail
3981
+ fullDetail,
3982
+ pendingAvailableTerminalHeight
3933
3983
  ]
3934
3984
  );
3935
3985
  if (useVirtualScroll) {
@@ -3950,6 +4000,7 @@ var MainContent = /* @__PURE__ */ __name(() => {
3950
4000
  initialScrollIndex: allVirtualItems.length <= 1 ? 0 : SCROLL_TO_ITEM_END,
3951
4001
  isStaticItem: virtualIsStaticItem,
3952
4002
  containerHeight: scrollContainerHeight,
4003
+ measureAtFullHeight: hasPendingPlainTextConfirmation,
3953
4004
  showScrollbar
3954
4005
  }
3955
4006
  ),
@@ -10159,7 +10210,7 @@ function TrustDialog({
10159
10210
  "Current Level: ",
10160
10211
  /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Text, { bold: true, children: currentTrustLevel || "Not Set" })
10161
10212
  ] }),
10162
- isInheritedTrustFromParent && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Text, { color: theme.text.secondary, children: "Note: This folder behaves as a trusted folder because one of the parent folders is trusted. It will remain trusted even if you set a different trust level here. To change this, you need to modify the trust setting in the parent folder." }),
10213
+ isInheritedTrustFromParent && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Text, { color: theme.text.secondary, children: "Note: This folder currently inherits trust from a parent folder. A more-specific trust rule here can override that decision." }),
10163
10214
  isInheritedTrustFromIde && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Text, { color: theme.text.secondary, children: "Note: This folder behaves as a trusted folder because the connected IDE workspace is trusted. It will remain trusted even if you set a different trust level here." })
10164
10215
  ] }),
10165
10216
  /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
@@ -22866,8 +22917,8 @@ __name(statusGlyph, "statusGlyph");
22866
22917
  // packages/cli/src/ui/hooks/useBackgroundTaskView.ts
22867
22918
  var MAX_RETAINED_TERMINAL_DREAMS = 3;
22868
22919
  function compareActiveThenTerminal(a, b) {
22869
- const aActive = a.status === "running" || a.status === "paused";
22870
- const bActive = b.status === "running" || b.status === "paused";
22920
+ const aActive = a.status === "running" || a.status === "pausing" || a.status === "paused";
22921
+ const bActive = b.status === "running" || b.status === "pausing" || b.status === "paused";
22871
22922
  if (aActive !== bActive) return aActive ? -1 : 1;
22872
22923
  if (aActive) return b.startTime - a.startTime;
22873
22924
  return (b.endTime ?? b.startTime) - (a.endTime ?? a.startTime);
@@ -23007,6 +23058,7 @@ var DEFAULT_ACTIONS = {
23007
23058
  cancelSelected: noop,
23008
23059
  resumeSelected: /* @__PURE__ */ __name(async () => {
23009
23060
  }, "resumeSelected"),
23061
+ toggleSelectedWorkflowPause: /* @__PURE__ */ __name(() => null, "toggleSelectedWorkflowPause"),
23010
23062
  setPillFocused: noop,
23011
23063
  setLivePanelFocused: noop,
23012
23064
  setLivePanelSelectedIndex: noop,
@@ -23124,6 +23176,18 @@ function BackgroundTaskViewProvider({
23124
23176
  }
23125
23177
  await config.resumeBackgroundAgent(target.agentId);
23126
23178
  }, [config, entries, selectedIndex]);
23179
+ const toggleSelectedWorkflowPause = (0, import_react75.useCallback)(() => {
23180
+ if (!config) return null;
23181
+ const target = entries[selectedIndex];
23182
+ if (!target || target.kind !== "workflow" || !target.isBackgrounded) {
23183
+ return null;
23184
+ }
23185
+ const registry = config.getWorkflowRunRegistry();
23186
+ if (target.status === "running") return registry.pause(target.runId);
23187
+ if (target.status === "paused") return registry.resume(target.runId);
23188
+ if (target.status === "pausing") return registry.pause(target.runId);
23189
+ return null;
23190
+ }, [config, entries, selectedIndex]);
23127
23191
  const state = (0, import_react75.useMemo)(
23128
23192
  () => ({
23129
23193
  entries,
@@ -23155,6 +23219,7 @@ function BackgroundTaskViewProvider({
23155
23219
  exitDetail,
23156
23220
  cancelSelected,
23157
23221
  resumeSelected,
23222
+ toggleSelectedWorkflowPause,
23158
23223
  setPillFocused,
23159
23224
  setLivePanelFocused,
23160
23225
  setLivePanelSelectedIndex,
@@ -23170,6 +23235,7 @@ function BackgroundTaskViewProvider({
23170
23235
  exitDetail,
23171
23236
  cancelSelected,
23172
23237
  resumeSelected,
23238
+ toggleSelectedWorkflowPause,
23173
23239
  setPillFocused,
23174
23240
  setLivePanelFocused,
23175
23241
  setLivePanelSelectedIndex,
@@ -23343,6 +23409,8 @@ function statusVerb(status) {
23343
23409
  switch (status) {
23344
23410
  case "running":
23345
23411
  return t("Running");
23412
+ case "pausing":
23413
+ return t("Pausing");
23346
23414
  case "paused":
23347
23415
  return t("Paused");
23348
23416
  case "completed":
@@ -23385,8 +23453,14 @@ function formatDreamRowLabel(entry) {
23385
23453
  });
23386
23454
  }
23387
23455
  __name(formatDreamRowLabel, "formatDreamRowLabel");
23388
- function terminalStatusPresentation(status) {
23456
+ function statusPresentation(status) {
23389
23457
  switch (status) {
23458
+ case "pausing":
23459
+ return {
23460
+ icon: "\u2026",
23461
+ color: theme.status.warning,
23462
+ labelColor: theme.status.warningDim
23463
+ };
23390
23464
  case "paused":
23391
23465
  return {
23392
23466
  icon: "\u23F8",
@@ -23415,7 +23489,23 @@ function terminalStatusPresentation(status) {
23415
23489
  return null;
23416
23490
  }
23417
23491
  }
23418
- __name(terminalStatusPresentation, "terminalStatusPresentation");
23492
+ __name(statusPresentation, "statusPresentation");
23493
+ function isStoppableEntry(entry) {
23494
+ return entry.status === "running" || entry.kind === "workflow" && isActiveWorkflowStatus(entry.status);
23495
+ }
23496
+ __name(isStoppableEntry, "isStoppableEntry");
23497
+ function workflowPauseHint(entry) {
23498
+ if (entry?.kind !== "workflow" || !entry.isBackgrounded) return void 0;
23499
+ switch (entry.status) {
23500
+ case "running":
23501
+ return "p pause (cooperative)";
23502
+ case "paused":
23503
+ return "p resume (cooperative)";
23504
+ default:
23505
+ return void 0;
23506
+ }
23507
+ }
23508
+ __name(workflowPauseHint, "workflowPauseHint");
23419
23509
  var FOREGROUND_ROW_PREFIX = "[blocking]";
23420
23510
  var SHELL_ROW_PREFIX = "[shell]";
23421
23511
  function rowLabel(entry, userBlocking) {
@@ -23528,8 +23618,8 @@ var ListBody = /* @__PURE__ */ __name(({ entries, selectedIndex, maxRows }) => {
23528
23618
  visible.map((entry, visibleIdx) => {
23529
23619
  const idx = windowStart + visibleIdx;
23530
23620
  const isSelected = idx === selectedIndex;
23531
- const terminal = terminalStatusPresentation(entry.status);
23532
- const labelColor = isSelected ? theme.text.accent : terminal ? terminal.labelColor : theme.text.primary;
23621
+ const presentation2 = statusPresentation(entry.status);
23622
+ const labelColor = isSelected ? theme.text.accent : presentation2 ? presentation2.labelColor : theme.text.primary;
23533
23623
  const treePrefix = entry.kind === "agent" ? treeRowPrefix(entry, treeInfo.get(entry.agentId)) : "";
23534
23624
  return /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(Box_default, { flexDirection: "row", paddingX: 1, children: [
23535
23625
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: isSelected ? theme.text.accent : void 0, children: isSelected ? "> " : " " }),
@@ -23603,7 +23693,7 @@ var DetailBody = /* @__PURE__ */ __name(({ entry, maxHeight, maxWidth }) => {
23603
23693
  }, "DetailBody");
23604
23694
  var DreamDetailBody = /* @__PURE__ */ __name(({ entry, maxHeight, maxWidth }) => {
23605
23695
  const title = t("Dream");
23606
- const terminal = terminalStatusPresentation(entry.status);
23696
+ const presentation2 = statusPresentation(entry.status);
23607
23697
  const dimSubtitleParts = [elapsedFor(entry)];
23608
23698
  if (entry.sessionCount !== void 0) {
23609
23699
  dimSubtitleParts.push(formatSessionCount(entry.sessionCount));
@@ -23625,7 +23715,7 @@ var DreamDetailBody = /* @__PURE__ */ __name(({ entry, maxHeight, maxWidth }) =>
23625
23715
  children: [
23626
23716
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { bold: true, color: theme.text.accent, children: title }) }),
23627
23717
  /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(Box_default, { children: [
23628
- terminal && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: terminal.color, children: `${terminal.icon} ${statusVerb(entry.status)} \xB7 ` }),
23718
+ presentation2 && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: presentation2.color, children: `${presentation2.icon} ${statusVerb(entry.status)} \xB7 ` }),
23629
23719
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: theme.text.secondary, children: dimSubtitleParts.join(" \xB7 ") })
23630
23720
  ] }),
23631
23721
  entry.sessionCount !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(import_react77.Fragment, { children: [
@@ -23682,7 +23772,7 @@ var AgentDetailBody = /* @__PURE__ */ __name(({ entry, maxHeight, maxWidth }) =>
23682
23772
  const title = escapeAnsiCtrlCodes(
23683
23773
  `${entry.subagentType ?? "Agent"} \u203A ${buildBackgroundEntryLabel(entry, { includePrefix: false })}`
23684
23774
  );
23685
- const terminal = terminalStatusPresentation(entry.status);
23775
+ const presentation2 = statusPresentation(entry.status);
23686
23776
  const dimSubtitleParts = [elapsedFor(entry)];
23687
23777
  if (entry.stats?.outputTokens) {
23688
23778
  dimSubtitleParts.push(
@@ -23754,7 +23844,7 @@ var AgentDetailBody = /* @__PURE__ */ __name(({ entry, maxHeight, maxWidth }) =>
23754
23844
  children: [
23755
23845
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { bold: true, color: theme.text.accent, children: title }) }),
23756
23846
  /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(Box_default, { children: [
23757
- terminal && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: terminal.color, children: `${terminal.icon} ${statusVerb(entry.status)} \xB7 ` }),
23847
+ presentation2 && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: presentation2.color, children: `${presentation2.icon} ${statusVerb(entry.status)} \xB7 ` }),
23758
23848
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: theme.text.secondary, children: dimSubtitleParts.join(" \xB7 ") })
23759
23849
  ] }),
23760
23850
  parentLine !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(import_react77.Fragment, { children: [
@@ -23831,7 +23921,7 @@ var AgentDetailBody = /* @__PURE__ */ __name(({ entry, maxHeight, maxWidth }) =>
23831
23921
  }, "AgentDetailBody");
23832
23922
  var ShellDetailBody = /* @__PURE__ */ __name(({ entry, maxHeight, maxWidth }) => {
23833
23923
  const title = `${t("Shell")} \u203A ${entry.command}`;
23834
- const terminal = terminalStatusPresentation(entry.status);
23924
+ const presentation2 = statusPresentation(entry.status);
23835
23925
  const dimSubtitleParts = [elapsedFor(entry)];
23836
23926
  if (entry.pid !== void 0) {
23837
23927
  dimSubtitleParts.push(t("pid {{pid}}", { pid: String(entry.pid) }));
@@ -23851,7 +23941,7 @@ var ShellDetailBody = /* @__PURE__ */ __name(({ entry, maxHeight, maxWidth }) =>
23851
23941
  children: [
23852
23942
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { bold: true, color: theme.text.accent, children: title }) }),
23853
23943
  /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(Box_default, { children: [
23854
- terminal && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: terminal.color, children: `${terminal.icon} ${statusVerb(entry.status)} \xB7 ` }),
23944
+ presentation2 && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: presentation2.color, children: `${presentation2.icon} ${statusVerb(entry.status)} \xB7 ` }),
23855
23945
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: theme.text.secondary, children: dimSubtitleParts.join(" \xB7 ") })
23856
23946
  ] }),
23857
23947
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, {}),
@@ -23871,7 +23961,7 @@ var ShellDetailBody = /* @__PURE__ */ __name(({ entry, maxHeight, maxWidth }) =>
23871
23961
  }, "ShellDetailBody");
23872
23962
  var MonitorDetailBody = /* @__PURE__ */ __name(({ entry, maxHeight, maxWidth }) => {
23873
23963
  const title = `${t("Monitor")} \u203A ${entry.description}`;
23874
- const terminal = terminalStatusPresentation(entry.status);
23964
+ const presentation2 = statusPresentation(entry.status);
23875
23965
  const dimSubtitleParts = [elapsedFor(entry)];
23876
23966
  if (entry.pid !== void 0) {
23877
23967
  dimSubtitleParts.push(t("pid {{pid}}", { pid: String(entry.pid) }));
@@ -23899,7 +23989,7 @@ var MonitorDetailBody = /* @__PURE__ */ __name(({ entry, maxHeight, maxWidth })
23899
23989
  children: [
23900
23990
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { bold: true, color: theme.text.accent, children: title }) }),
23901
23991
  /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(Box_default, { children: [
23902
- terminal && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: terminal.color, children: `${terminal.icon} ${statusVerb(entry.status)} \xB7 ` }),
23992
+ presentation2 && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: presentation2.color, children: `${presentation2.icon} ${statusVerb(entry.status)} \xB7 ` }),
23903
23993
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: theme.text.secondary, children: dimSubtitleParts.join(" \xB7 ") })
23904
23994
  ] }),
23905
23995
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, {}),
@@ -23918,7 +24008,7 @@ var MAX_VISIBLE_PHASES = 20;
23918
24008
  var MAX_VISIBLE_LOG_LINES = 10;
23919
24009
  var WorkflowDetailBody = /* @__PURE__ */ __name(({ entry, maxHeight, maxWidth }) => {
23920
24010
  const title = `${t("Workflow")} \u203A ${entry.meta?.name ?? entry.runId}`;
23921
- const terminal = terminalStatusPresentation(entry.status);
24011
+ const presentation2 = statusPresentation(entry.status);
23922
24012
  const dimSubtitleParts = [elapsedFor(entry)];
23923
24013
  if (entry.agentsDispatched > 0) {
23924
24014
  dimSubtitleParts.push(
@@ -23950,19 +24040,27 @@ var WorkflowDetailBody = /* @__PURE__ */ __name(({ entry, maxHeight, maxWidth })
23950
24040
  children: [
23951
24041
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { bold: true, color: theme.text.accent, children: title }) }),
23952
24042
  /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(Box_default, { children: [
23953
- terminal && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: terminal.color, children: `${terminal.icon} ${statusVerb(entry.status)} \xB7 ` }),
24043
+ presentation2 && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: presentation2.color, children: `${presentation2.icon} ${statusVerb(entry.status)} \xB7 ` }),
23954
24044
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: theme.text.secondary, children: dimSubtitleParts.join(" \xB7 ") })
23955
24045
  ] }),
23956
24046
  entry.meta?.description && /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(import_react77.Fragment, { children: [
23957
24047
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, {}),
23958
24048
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { wrap: "wrap", children: entry.meta.description }) })
23959
24049
  ] }),
24050
+ (entry.status === "pausing" || entry.status === "paused") && /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(import_react77.Fragment, { children: [
24051
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, {}),
24052
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: theme.status.warning, children: entry.status === "pausing" ? t(
24053
+ "Pause is cooperative; in-flight work may finish before the workflow is paused. An agent call waiting on a tool approval keeps the run in this state and still counts against the active-time limit until the approval is answered."
24054
+ ) : t(
24055
+ "Paused: no new agents will start; script code between agent calls keeps running. Press p to resume. /clear, /branch, and switching sessions cancel paused runs."
24056
+ ) }) })
24057
+ ] }),
23960
24058
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, {}),
23961
24059
  /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { bold: true, dimColor: true, children: t("Phases") }) }),
23962
24060
  entry.phases.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { dimColor: true, children: t("(no phase recorded yet)") }) }) : /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(import_react77.Fragment, { children: [
23963
24061
  phaseOverflow > 0 && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { dimColor: true, children: `+${phaseOverflow} ${t("more above")}` }) }),
23964
24062
  visiblePhases.map((phaseTitle, i) => {
23965
- const isCurrent = entry.status === "running" && i === visiblePhases.length - 1 && entry.currentPhase === phaseTitle;
24063
+ const isCurrent = isActiveWorkflowStatus(entry.status) && i === visiblePhases.length - 1 && entry.currentPhase === phaseTitle;
23966
24064
  const marker = isCurrent ? "\u25B8" : "\xB7";
23967
24065
  const phaseTokens = entry.perPhaseTokens.get(phaseTitle) ?? 0;
23968
24066
  const tokenChip = phaseTokens > 0 ? ` \xB7 ${formatTokenCount(phaseTokens)}t` : "";
@@ -24000,7 +24098,9 @@ var BackgroundTasksDialog = /* @__PURE__ */ __name(({
24000
24098
  enterDetail,
24001
24099
  exitDetail,
24002
24100
  cancelSelected,
24003
- resumeSelected
24101
+ resumeSelected,
24102
+ toggleSelectedWorkflowPause,
24103
+ setSelectedIndex
24004
24104
  } = useBackgroundTaskViewActions();
24005
24105
  const config = useConfig();
24006
24106
  const detailContentHeight = Math.max(10, availableTerminalHeight - 6);
@@ -24012,6 +24112,21 @@ var BackgroundTasksDialog = /* @__PURE__ */ __name(({
24012
24112
  (0, import_react77.useEffect)(() => {
24013
24113
  if (!isDetailMode) setSaveActive(false);
24014
24114
  }, [isDetailMode]);
24115
+ const [pauseRejected, setPauseRejected] = (0, import_react77.useState)(null);
24116
+ (0, import_react77.useEffect)(() => {
24117
+ if (!pauseRejected) return;
24118
+ const timer = setTimeout(() => setPauseRejected(null), 3e3);
24119
+ return () => clearTimeout(timer);
24120
+ }, [pauseRejected]);
24121
+ const toggleWorkflowPauseWithFeedback = (0, import_react77.useCallback)(() => {
24122
+ const target = entries[selectedIndex];
24123
+ const verdict = toggleSelectedWorkflowPause();
24124
+ if (verdict === false && target) {
24125
+ setPauseRejected({ entryKey: entryId(target) });
24126
+ } else if (verdict === true) {
24127
+ setPauseRejected(null);
24128
+ }
24129
+ }, [entries, selectedIndex, toggleSelectedWorkflowPause]);
24015
24130
  const selectedEntry = (0, import_react77.useMemo)(() => {
24016
24131
  const fromSnapshot = entries[selectedIndex] ?? null;
24017
24132
  if (!fromSnapshot) return fromSnapshot;
@@ -24081,12 +24196,19 @@ var BackgroundTasksDialog = /* @__PURE__ */ __name(({
24081
24196
  selectedAgentIdForActivity
24082
24197
  ]);
24083
24198
  const selectedStatus = selectedEntry?.status;
24199
+ const selectedShouldTick = selectedEntry?.kind === "workflow" ? isActiveWorkflowStatus(selectedEntry.status) : selectedStatus === "running";
24084
24200
  (0, import_react77.useEffect)(() => {
24085
- if (!dialogOpen || !isDetailMode || !selectedEntryId || selectedStatus !== "running")
24201
+ if (!dialogOpen || !isDetailMode || !selectedEntryId || !selectedShouldTick)
24086
24202
  return;
24087
24203
  const id = setInterval(() => setActivityTick((n) => n + 1), 1e3);
24088
24204
  return () => clearInterval(id);
24089
- }, [dialogOpen, dialogMode, isDetailMode, selectedEntryId, selectedStatus]);
24205
+ }, [
24206
+ dialogOpen,
24207
+ dialogMode,
24208
+ isDetailMode,
24209
+ selectedEntryId,
24210
+ selectedShouldTick
24211
+ ]);
24090
24212
  const initialDetailStatusRef = (0, import_react77.useRef)(null);
24091
24213
  (0, import_react77.useEffect)(() => {
24092
24214
  if (!dialogOpen || !isDetailMode) {
@@ -24095,11 +24217,25 @@ var BackgroundTasksDialog = /* @__PURE__ */ __name(({
24095
24217
  }
24096
24218
  if (!selectedEntryId) {
24097
24219
  initialDetailStatusRef.current = null;
24220
+ setPendingCancelEntryId(null);
24098
24221
  exitDetail();
24099
24222
  return;
24100
24223
  }
24101
24224
  const seen = initialDetailStatusRef.current;
24102
- if (!seen || seen.entryId !== selectedEntryId) {
24225
+ if (seen && seen.entryId !== selectedEntryId) {
24226
+ const driftedIndex = entries.findIndex(
24227
+ (candidate) => entryId(candidate) === seen.entryId
24228
+ );
24229
+ if (driftedIndex >= 0) {
24230
+ setSelectedIndex(driftedIndex);
24231
+ return;
24232
+ }
24233
+ initialDetailStatusRef.current = null;
24234
+ setPendingCancelEntryId(null);
24235
+ exitDetail();
24236
+ return;
24237
+ }
24238
+ if (!seen) {
24103
24239
  if (selectedStatus) {
24104
24240
  initialDetailStatusRef.current = {
24105
24241
  entryId: selectedEntryId,
@@ -24108,7 +24244,10 @@ var BackgroundTasksDialog = /* @__PURE__ */ __name(({
24108
24244
  }
24109
24245
  return;
24110
24246
  }
24111
- if (seen.status === "running" && selectedStatus && selectedStatus !== "running") {
24247
+ const seenWasActive = seen.status === "running" || seen.status === "pausing" || seen.status === "paused";
24248
+ const selectedIsTerminal = selectedStatus === "completed" || selectedStatus === "failed" || selectedStatus === "cancelled";
24249
+ if (seenWasActive && selectedIsTerminal) {
24250
+ setPendingCancelEntryId(null);
24112
24251
  exitDetail();
24113
24252
  }
24114
24253
  }, [
@@ -24117,11 +24256,13 @@ var BackgroundTasksDialog = /* @__PURE__ */ __name(({
24117
24256
  isDetailMode,
24118
24257
  selectedEntryId,
24119
24258
  selectedStatus,
24120
- exitDetail
24259
+ exitDetail,
24260
+ entries,
24261
+ setSelectedIndex
24121
24262
  ]);
24122
24263
  const handleCancelKey = /* @__PURE__ */ __name(() => {
24123
24264
  if (!selectedEntry) return;
24124
- const isCancelable = selectedEntry.status === "running";
24265
+ const isCancelable = isStoppableEntry(selectedEntry);
24125
24266
  const isAbandonable = selectedEntry.kind === "agent" && selectedEntry.status === "paused";
24126
24267
  if (!isCancelable && !isAbandonable) return;
24127
24268
  const entryKey = entryId(selectedEntry);
@@ -24178,13 +24319,17 @@ var BackgroundTasksDialog = /* @__PURE__ */ __name(({
24178
24319
  void resumeSelected();
24179
24320
  return;
24180
24321
  }
24322
+ if (key.sequence === "p" && !key.ctrl && !key.meta) {
24323
+ toggleWorkflowPauseWithFeedback();
24324
+ return;
24325
+ }
24181
24326
  if (key.sequence === "x" && !key.ctrl && !key.meta) {
24182
24327
  handleCancelKey();
24183
24328
  return;
24184
24329
  }
24185
24330
  return;
24186
24331
  }
24187
- if (key.sequence === "s" && !key.ctrl && !key.meta && config && selectedEntry?.kind === "workflow" && selectedEntry.status !== "running" && !!selectedEntry.script) {
24332
+ if (key.sequence === "s" && !key.ctrl && !key.meta && config && selectedEntry?.kind === "workflow" && isTerminalWorkflowStatus(selectedEntry.status) && !!selectedEntry.script) {
24188
24333
  setSaveActive(true);
24189
24334
  return;
24190
24335
  }
@@ -24205,6 +24350,10 @@ var BackgroundTasksDialog = /* @__PURE__ */ __name(({
24205
24350
  void resumeSelected();
24206
24351
  return;
24207
24352
  }
24353
+ if (key.sequence === "p" && !key.ctrl && !key.meta) {
24354
+ toggleWorkflowPauseWithFeedback();
24355
+ return;
24356
+ }
24208
24357
  if (key.sequence === "x" && !key.ctrl && !key.meta) {
24209
24358
  handleCancelKey();
24210
24359
  return;
@@ -24214,8 +24363,9 @@ var BackgroundTasksDialog = /* @__PURE__ */ __name(({
24214
24363
  );
24215
24364
  if (!dialogOpen) return null;
24216
24365
  const selectedEntryAllowsResume = selectedEntry?.kind === "agent" && selectedEntry.status === "paused" && !selectedEntry.resumeBlockedReason;
24217
- const workflowSaveTarget = config && selectedEntry?.kind === "workflow" && selectedEntry.status !== "running" && selectedEntry.script ? selectedEntry : null;
24366
+ const workflowSaveTarget = config && selectedEntry?.kind === "workflow" && isTerminalWorkflowStatus(selectedEntry.status) && selectedEntry.script ? selectedEntry : null;
24218
24367
  const selectedEntryKey = selectedEntry ? entryId(selectedEntry) : null;
24368
+ const selectedWorkflowPauseHint = workflowPauseHint(selectedEntry);
24219
24369
  const showCancelConfirmHint = pendingCancelEntryId !== null && pendingCancelEntryId === selectedEntryKey;
24220
24370
  const hints = [];
24221
24371
  if (approvalActive) {
@@ -24230,7 +24380,10 @@ var BackgroundTasksDialog = /* @__PURE__ */ __name(({
24230
24380
  );
24231
24381
  } else if (dialogMode === "list") {
24232
24382
  hints.push("\u2191/\u2193 select", "Enter view");
24233
- if (selectedEntry?.status === "running") hints.push("x stop");
24383
+ if (selectedEntry && isStoppableEntry(selectedEntry)) {
24384
+ hints.push("x stop");
24385
+ }
24386
+ if (selectedWorkflowPauseHint) hints.push(selectedWorkflowPauseHint);
24234
24387
  if (selectedEntryAllowsResume) hints.push("r resume");
24235
24388
  if (selectedEntry?.kind === "agent" && selectedEntry.status === "paused") {
24236
24389
  hints.push("x abandon");
@@ -24238,7 +24391,10 @@ var BackgroundTasksDialog = /* @__PURE__ */ __name(({
24238
24391
  hints.push("\u2190/Esc close");
24239
24392
  } else {
24240
24393
  hints.push("\u2190 back", "Esc close");
24241
- if (selectedEntry?.status === "running") hints.push("x stop");
24394
+ if (selectedEntry && isStoppableEntry(selectedEntry)) {
24395
+ hints.push("x stop");
24396
+ }
24397
+ if (selectedWorkflowPauseHint) hints.push(selectedWorkflowPauseHint);
24242
24398
  if (selectedEntryAllowsResume) hints.push("r resume");
24243
24399
  if (selectedEntry?.kind === "agent" && selectedEntry.status === "paused") {
24244
24400
  hints.push("x abandon");
@@ -24298,7 +24454,9 @@ var BackgroundTasksDialog = /* @__PURE__ */ __name(({
24298
24454
  isActive: saveActive,
24299
24455
  onClose: () => setSaveActive(false)
24300
24456
  }
24301
- ) : /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, { marginTop: 1, paddingX: 1, children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: theme.text.secondary, children: hints.join(" \xB7 ") }) })
24457
+ ) : /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Box_default, { marginTop: 1, paddingX: 1, children: pauseRejected && pauseRejected.entryKey === selectedEntryKey ? /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: theme.status.warning, children: t(
24458
+ "Pause/resume was rejected; the workflow state changed. Try again."
24459
+ ) }) : /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Text, { color: theme.text.secondary, children: hints.join(" \xB7 ") }) })
24302
24460
  ]
24303
24461
  }
24304
24462
  );
@@ -25160,7 +25318,7 @@ function SuggestionsDisplay({
25160
25318
  {
25161
25319
  ...mode === "slash" || suggestion.description ? { width: labelColumnWidth, flexShrink: 0 } : { flexShrink: 1 },
25162
25320
  children: /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(Box_default, { children: [
25163
- labelElement,
25321
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Box_default, { flexShrink: 0, children: labelElement }),
25164
25322
  suggestion.argumentHint && /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(Text, { color: theme.text.secondary, children: [
25165
25323
  " ",
25166
25324
  suggestion.argumentHint
@@ -29927,7 +30085,7 @@ ${currentText}`);
29927
30085
  resetEscapeState();
29928
30086
  return true;
29929
30087
  }
29930
- if (!isAttachmentMode && uiState.messageQueue.length > 0) {
30088
+ if (!isAttachmentMode && uiState.messageQueue.length > 0 && uiState.streamingState !== "responding" /* Responding */) {
29931
30089
  if (popQueueIntoInput()) {
29932
30090
  resetEscapeState();
29933
30091
  return true;
@@ -30731,9 +30889,11 @@ function hasPendingApproval(entries) {
30731
30889
  __name(hasPendingApproval, "hasPendingApproval");
30732
30890
  function getPillLabel(entries) {
30733
30891
  if (entries.length === 0) return "";
30734
- const running = entries.filter((e) => e.status === "running");
30735
- if (running.length > 0) {
30736
- return groupAndFormat(running);
30892
+ const live = entries.filter(
30893
+ (e) => e.status === "running" || e.kind === "workflow" && (e.status === "pausing" || e.status === "paused")
30894
+ );
30895
+ if (live.length > 0) {
30896
+ return groupAndFormat(live);
30737
30897
  }
30738
30898
  const pausedAgents = entries.filter(
30739
30899
  (e) => e.kind === "agent" && e.status === "paused"
@@ -30781,9 +30941,9 @@ var BackgroundTasksPill = /* @__PURE__ */ __name(() => {
30781
30941
  const label = getPillLabel(entries);
30782
30942
  const needsApproval = hasPendingApproval(entries);
30783
30943
  return /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)(import_jsx_runtime112.Fragment, { children: [
30784
- /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(Text, { color: theme.text.secondary, children: " \xB7 " }),
30785
- /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(Text, { inverse: pillFocused, children: label }),
30786
- needsApproval && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(Text, { color: theme.status.warning, children: ` \u26A0 ${t("needs approval")}` })
30944
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(Text, { color: theme.text.secondary, wrap: "truncate", children: " \xB7 " }),
30945
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(Text, { inverse: pillFocused, wrap: "truncate", children: label }),
30946
+ needsApproval && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(Text, { color: theme.status.warning, wrap: "truncate", children: ` \u26A0 ${t("needs approval")}` })
30787
30947
  ] });
30788
30948
  }, "BackgroundTasksPill");
30789
30949
 
@@ -30843,8 +31003,8 @@ var MCPHealthPill = /* @__PURE__ */ __name(() => {
30843
31003
  const label = getPillLabel2(snapshot);
30844
31004
  if (!label) return null;
30845
31005
  return /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)(import_jsx_runtime113.Fragment, { children: [
30846
- /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(Text, { color: theme.text.secondary, children: " \xB7 " }),
30847
- /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(Text, { color: theme.status.warning, children: label })
31006
+ /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(Text, { color: theme.text.secondary, wrap: "truncate", children: " \xB7 " }),
31007
+ /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(Text, { color: theme.status.warning, wrap: "truncate", children: label })
30848
31008
  ] });
30849
31009
  }, "MCPHealthPill");
30850
31010
 
@@ -31620,7 +31780,10 @@ var Footer = /* @__PURE__ */ __name(() => {
31620
31780
  /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { wrap: "truncate", children: leftBottomContent }),
31621
31781
  /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(BackgroundTasksPill, {}),
31622
31782
  /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(MCPHealthPill, {}),
31623
- !uiState.isSkillReviewDialogOpen && (uiState.skillReviewPending?.skills.length ?? 0) > 0 && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.status.warning, children: ` \u26A0 ${t("{{count}} skill(s) pending review", {
31783
+ uiState.messageQueue.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.text.secondary, wrap: "truncate", children: ` \u23F3 ${t("{{count}} queued", {
31784
+ count: String(uiState.messageQueue.length)
31785
+ })}` }),
31786
+ !uiState.isSkillReviewDialogOpen && (uiState.skillReviewPending?.skills.length ?? 0) > 0 && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.status.warning, wrap: "truncate", children: ` \u26A0 ${t("{{count}} skill(s) pending review", {
31624
31787
  count: String(uiState.skillReviewPending.skills.length)
31625
31788
  })}` })
31626
31789
  ] })
@@ -35023,6 +35186,7 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
35023
35186
  const combinedContent = [];
35024
35187
  let firstModelOverride;
35025
35188
  const onCompleteCallbacks = [];
35189
+ let refreshContextFilesOnWrite = false;
35026
35190
  for (const skill of stackedResult.skills) {
35027
35191
  if (!skill.action) continue;
35028
35192
  const skillContext = {
@@ -35037,6 +35201,9 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
35037
35201
  if (skillResult?.type === "submit_prompt") {
35038
35202
  combinedContent.push(skillResult.content);
35039
35203
  firstModelOverride ??= skillResult.modelOverride;
35204
+ refreshContextFilesOnWrite ||= Boolean(
35205
+ skillResult.refreshContextFilesOnWrite
35206
+ );
35040
35207
  if (skillResult.onComplete) {
35041
35208
  onCompleteCallbacks.push(skillResult.onComplete);
35042
35209
  }
@@ -35077,6 +35244,7 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
35077
35244
  type: "submit_prompt",
35078
35245
  content: mergedContent,
35079
35246
  ...firstModelOverride ? { modelOverride: firstModelOverride } : {},
35247
+ ...refreshContextFilesOnWrite ? { refreshContextFilesOnWrite: true } : {},
35080
35248
  ...onCompleteCallbacks.length ? {
35081
35249
  onComplete: /* @__PURE__ */ __name(async () => {
35082
35250
  for (const cb of onCompleteCallbacks) await cb();
@@ -35374,7 +35542,8 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
35374
35542
  type: "submit_prompt",
35375
35543
  content,
35376
35544
  onComplete: result.onComplete,
35377
- modelOverride: result.modelOverride
35545
+ modelOverride: result.modelOverride,
35546
+ refreshContextFilesOnWrite: result.refreshContextFilesOnWrite
35378
35547
  };
35379
35548
  }
35380
35549
  case "confirm_shell_commands": {
@@ -35858,7 +36027,7 @@ ${finalOutput}`;
35858
36027
  finalStatus = "Canceled" /* Canceled */;
35859
36028
  finalOutput = `Command was cancelled.
35860
36029
  ${finalOutput}`;
35861
- } else if (result2.signal) {
36030
+ } else if (isSignalTermination(result2.signal)) {
35862
36031
  finalStatus = "Error" /* Error */;
35863
36032
  finalOutput = `Command terminated by signal: ${result2.signal}.
35864
36033
  ${finalOutput}`;
@@ -36828,6 +36997,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
36828
36997
  );
36829
36998
  const processedMemoryToolsRef = (0, import_react135.useRef)(/* @__PURE__ */ new Set());
36830
36999
  const submitPromptOnCompleteRef = (0, import_react135.useRef)(null);
37000
+ const refreshContextFilesOnWriteRef = (0, import_react135.useRef)(false);
36831
37001
  const modelOverrideRef = (0, import_react135.useRef)(void 0);
36832
37002
  const inlineModelOverrideActiveRef = (0, import_react135.useRef)(false);
36833
37003
  const canUseToolResultFullTurnModel = (0, import_react135.useCallback)((model) => {
@@ -37183,6 +37353,9 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37183
37353
  case "submit_prompt": {
37184
37354
  localQueryToSendToGemini = slashCommandResult.content;
37185
37355
  submitPromptOnCompleteRef.current = slashCommandResult.onComplete ?? null;
37356
+ refreshContextFilesOnWriteRef.current = Boolean(
37357
+ slashCommandResult.refreshContextFilesOnWrite
37358
+ );
37186
37359
  if (slashCommandResult.modelOverride) {
37187
37360
  if (isInlineModelOverrideAllowed(
37188
37361
  config,
@@ -38553,6 +38726,9 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38553
38726
  duplicateProviderToolCallResponseIdsRef.current.clear();
38554
38727
  pendingDuplicateToolResponsesRef.current = [];
38555
38728
  immediateDuplicateToolResponsesRef.current = null;
38729
+ if (submitType !== "retry" /* Retry */ && submitType !== "notification" /* Notification */ && submitType !== "goal" /* Goal */) {
38730
+ refreshContextFilesOnWriteRef.current = false;
38731
+ }
38556
38732
  }
38557
38733
  const userMessageTimestamp = Date.now();
38558
38734
  if (submitType === "retry" /* Retry */) {
@@ -39170,15 +39346,35 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39170
39346
  "runtime"
39171
39347
  );
39172
39348
  }
39173
- const didRefreshManagedMemory = await refreshMemoryAfterManagedWrite(
39174
- config,
39175
- completedAndReadyToSubmitTools.map((toolCall) => ({
39349
+ const memoryWriteCandidates = completedAndReadyToSubmitTools.map(
39350
+ (toolCall) => ({
39176
39351
  toolName: toolCall.request.name,
39177
39352
  args: toolCall.request.args,
39178
39353
  status: toolCall.status
39179
- })),
39354
+ })
39355
+ );
39356
+ const didRefreshManagedMemory = await refreshMemoryAfterManagedWrite(
39357
+ config,
39358
+ memoryWriteCandidates,
39180
39359
  { logContext: "interactive memory tool batch" }
39181
39360
  );
39361
+ if (refreshContextFilesOnWriteRef.current) {
39362
+ const matchedContextFileWrite = didWriteProjectContextFile(
39363
+ memoryWriteCandidates,
39364
+ config.getProjectRoot()
39365
+ );
39366
+ debugLogger36.debug(
39367
+ `Checked marked context-file memory tool batch; matched=${matchedContextFileWrite}`
39368
+ );
39369
+ if (matchedContextFileWrite) {
39370
+ debugLogger36.debug(
39371
+ "Refreshing memory after context-file memory write"
39372
+ );
39373
+ await refreshMemoryInstruction(config, {
39374
+ logContext: "interactive context-file memory tool batch"
39375
+ });
39376
+ }
39377
+ }
39182
39378
  if (newSuccessfulMemorySaves.length > 0) {
39183
39379
  if (!didRefreshManagedMemory) {
39184
39380
  void performMemoryRefresh().catch((err) => {
@@ -46774,6 +46970,20 @@ ${error.stack ?? ""}`
46774
46970
  Rendering error${loggedHint}: ${sanitizeTerminalText(renderError.message)}`
46775
46971
  );
46776
46972
  }
46973
+ try {
46974
+ if (process.stdout.isTTY && config.getChatRecordingService()) {
46975
+ const sessionId = config.getSessionId();
46976
+ const sessionFile = config.getTranscriptPath();
46977
+ if (isValidSessionId(sessionId) && (await stat2(sessionFile)).size > 0) {
46978
+ writeStdoutLine(
46979
+ `
46980
+ ${t("To continue this session, run")}
46981
+ qwen --resume ${sessionId}`
46982
+ );
46983
+ }
46984
+ }
46985
+ } catch {
46986
+ }
46777
46987
  });
46778
46988
  }
46779
46989
  __name(startInteractiveUI, "startInteractiveUI");