@qwen-code/qwen-code 0.23.2-preview.0 → 0.23.3-nightly.20260910.c46cb85cf2

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 (409) hide show
  1. package/README.md +35 -15
  2. package/bundled/computer-use/SKILL.md +1 -1
  3. package/bundled/goal-draft/SKILL.md +2 -2
  4. package/bundled/qc-helper/docs/configuration/auth.md +1 -1
  5. package/bundled/qc-helper/docs/configuration/model-providers.md +76 -34
  6. package/bundled/qc-helper/docs/configuration/settings.md +5 -3
  7. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  8. package/bundled/qc-helper/docs/features/channels/dingtalk.md +1 -21
  9. package/bundled/qc-helper/docs/features/channels/dws.md +7 -1
  10. package/bundled/qc-helper/docs/features/channels/github.md +1 -9
  11. package/bundled/qc-helper/docs/features/channels/overview.md +30 -56
  12. package/bundled/qc-helper/docs/features/channels/qqbot.md +1 -2
  13. package/bundled/qc-helper/docs/features/commands.md +105 -18
  14. package/bundled/qc-helper/docs/features/computer-use.md +1 -1
  15. package/bundled/qc-helper/docs/features/cross-session-protocol.md +320 -0
  16. package/bundled/qc-helper/docs/features/goals.md +5 -3
  17. package/bundled/qc-helper/docs/features/hooks.md +14 -13
  18. package/bundled/qc-helper/docs/features/sub-agents.md +8 -0
  19. package/bundled/qc-helper/docs/qwen-serve.md +84 -53
  20. package/bundled/review/SKILL.md +82 -79
  21. package/bundled/review/references/posting.md +31 -14
  22. package/chunks/{MaxSizedBox-ZZJT3PJF.js → MaxSizedBox-UZW24XUX.js} +63 -55
  23. package/chunks/{StandaloneSessionPicker-DIOSZTMX.js → StandaloneSessionPicker-IDK7NAZL.js} +85 -77
  24. package/chunks/{acp-startup-profiler-KEU6VAYR.js → acp-startup-profiler-ARO4II44.js} +2 -2
  25. package/chunks/acp-subagent-executor-7TLJGISS.js +919 -0
  26. package/chunks/{acpAgent-62JUP5A7.js → acpAgent-YRCNNIIU.js} +939 -306
  27. package/chunks/{agent-NLPEQQDZ.js → agent-SGU5EE7U.js} +47 -41
  28. package/chunks/{agent-headless-Y2GR5F2Q.js → agent-headless-JVYBLNLT.js} +47 -41
  29. package/chunks/{anthropicContentGenerator-I7LQZH26.js → anthropicContentGenerator-SGIR5IKF.js} +68 -36
  30. package/chunks/{artifact-tool-P52OKKEF.js → artifact-tool-PMYZCYNH.js} +2 -2
  31. package/chunks/{askUserQuestion-I5W5S3D6.js → askUserQuestion-4M4YYIB4.js} +2 -2
  32. package/chunks/{bridge-Q66BD62H.js → bridge-YF6NYRPZ.js} +68 -60
  33. package/chunks/{ca-KC2AISNS.js → ca-MX3WCEEG.js} +1 -1
  34. package/chunks/{channel-management-service-TRTLQTSV.js → channel-management-service-E4HTMU7T.js} +9 -9
  35. package/chunks/{channel-settings-store-R5STFWUW.js → channel-settings-store-FZ5VKHQD.js} +74 -66
  36. package/chunks/{channel-worker-group-PIYPVCTF.js → channel-worker-group-X6WH4XWF.js} +9 -9
  37. package/chunks/{channel-worker-manager-FQHEDTD2.js → channel-worker-manager-SICFJDPJ.js} +19 -10
  38. package/chunks/{channel-worker-supervisor-XJPZZ3VK.js → channel-worker-supervisor-HSFAKML6.js} +6 -6
  39. package/chunks/{chunk-CLKE4IY3.js → chunk-2SZH22YO.js} +1 -1
  40. package/chunks/{chunk-OIPUQE3S.js → chunk-34ZYDM3F.js} +27 -12
  41. package/chunks/{chunk-HIXUUCGY.js → chunk-36HCNKDS.js} +1 -1
  42. package/chunks/{chunk-6YEOCHSE.js → chunk-3FPYT6QC.js} +101 -31
  43. package/chunks/{chunk-NFIDVZND.js → chunk-3I7W2POO.js} +3 -22
  44. package/chunks/{chunk-W3ONSAYO.js → chunk-3VPFA6L2.js} +3 -3
  45. package/chunks/chunk-532WHF4F.js +127 -0
  46. package/chunks/{chunk-J3TJH52D.js → chunk-5FFAUU4T.js} +1 -1
  47. package/chunks/{chunk-G5QLLD53.js → chunk-5FKZ7KFQ.js} +1864 -35
  48. package/chunks/{chunk-B44JBZBB.js → chunk-5GLDOLNQ.js} +132 -27
  49. package/chunks/{chunk-ORREXWOM.js → chunk-5ZJ3KK5J.js} +5 -5
  50. package/chunks/{chunk-2OR32P5M.js → chunk-6EDWSKN4.js} +125 -10
  51. package/chunks/{chunk-EA4NFWVG.js → chunk-6EOMQPTS.js} +4 -4
  52. package/chunks/{chunk-45ROPFQY.js → chunk-6NONRGYX.js} +1 -1
  53. package/chunks/{chunk-EHTKOO6W.js → chunk-6UK77U7D.js} +46 -3
  54. package/chunks/{chunk-QXXBW2G4.js → chunk-72BGC7RT.js} +4 -4
  55. package/chunks/{chunk-CRZBDVP2.js → chunk-74JEYK2C.js} +10 -10
  56. package/chunks/{chunk-B54PFQS5.js → chunk-7CLLH5TI.js} +1 -1
  57. package/chunks/{chunk-CG2PDIGD.js → chunk-7XM6KEVW.js} +1 -1
  58. package/chunks/{chunk-CALNF3Z3.js → chunk-7XVQNDFB.js} +1 -1
  59. package/chunks/{chunk-TK4XHPKW.js → chunk-7ZKDPTYO.js} +2 -2
  60. package/chunks/{chunk-ZIPYCXQP.js → chunk-7ZVIGDZF.js} +1 -1
  61. package/chunks/chunk-AEY27Z35.js +1411 -0
  62. package/chunks/{chunk-WIRYFL2L.js → chunk-ATH66AEU.js} +64 -59
  63. package/chunks/{chunk-33MLFMCL.js → chunk-AW2SIT3B.js} +3 -3
  64. package/chunks/{chunk-4BLTSTF6.js → chunk-AWMJRE5N.js} +4 -4
  65. package/chunks/chunk-AYEJOTIU.js +43 -0
  66. package/chunks/{chunk-M73KHGNR.js → chunk-B2TGBZXY.js} +420 -227
  67. package/chunks/{chunk-XDNFODER.js → chunk-B6BDT4RX.js} +1 -1
  68. package/chunks/{chunk-WZ4YULVF.js → chunk-BHR6IN2X.js} +3251 -974
  69. package/chunks/{chunk-GXIHBIHC.js → chunk-BI3WSRQE.js} +61 -72
  70. package/chunks/{chunk-NVS4Z6GT.js → chunk-BQOP3K76.js} +1 -1
  71. package/chunks/{chunk-R2266LQ5.js → chunk-BTWGOKHU.js} +2 -2
  72. package/chunks/{process-registry-OAEG6WGC.js → chunk-BYUAT5OC.js} +1 -0
  73. package/chunks/{chunk-XVTCSVBK.js → chunk-C4NLHK7X.js} +227 -298
  74. package/chunks/{chunk-NOO4QFXM.js → chunk-C75BXMPM.js} +1 -3
  75. package/chunks/chunk-CAAMI77K.js +937 -0
  76. package/chunks/chunk-CF5KXZZX.js +150 -0
  77. package/chunks/{chunk-SOA4HKRJ.js → chunk-CGKEUUYG.js} +2 -2
  78. package/chunks/{chunk-BF3RUIVP.js → chunk-CH2YDT6X.js} +36 -38
  79. package/chunks/{chunk-5HBA2Z7V.js → chunk-CJ3DHN5I.js} +3 -3
  80. package/chunks/{chunk-3BTHHXXE.js → chunk-CSHX5ZC4.js} +1 -1
  81. package/chunks/{chunk-UYDQYDW2.js → chunk-CUK6F5UF.js} +1 -1
  82. package/chunks/{chunk-RPFJJ33Z.js → chunk-DLH7YIX6.js} +3 -3
  83. package/chunks/{chunk-L6ZME3W7.js → chunk-DMX7RF6E.js} +1 -1
  84. package/chunks/{chunk-TRWQQBVH.js → chunk-DTNV6UZY.js} +1 -1
  85. package/chunks/{chunk-FDOGGKAA.js → chunk-E4UEO3XM.js} +5 -2
  86. package/chunks/{chunk-RN6V5HKE.js → chunk-E5GQNSJY.js} +3 -3
  87. package/chunks/chunk-ELRMZTPF.js +374 -0
  88. package/chunks/chunk-ERU3SDXT.js +27 -0
  89. package/chunks/{chunk-O2FEO2CB.js → chunk-EUURTIV6.js} +18 -2
  90. package/chunks/{chunk-4HOEU2OR.js → chunk-EWJTAP3Y.js} +1 -19
  91. package/chunks/{chunk-ZELCTN6Y.js → chunk-F23YN37B.js} +10 -0
  92. package/chunks/{chunk-BL6B2QS2.js → chunk-F2RKL5I2.js} +809 -1195
  93. package/chunks/{chunk-J4ECGDA3.js → chunk-F45SKYIQ.js} +3 -3
  94. package/chunks/{chunk-5WC2ECUK.js → chunk-FCQJLMA2.js} +114 -8
  95. package/chunks/{chunk-4JKLPTV6.js → chunk-FGRDUDCI.js} +13 -6
  96. package/chunks/{chunk-ZUNWKOAP.js → chunk-FGV2QEAO.js} +5 -27
  97. package/chunks/{chunk-4VY3ITHR.js → chunk-FN3JNDRU.js} +3 -3
  98. package/chunks/{chunk-XI7RST4D.js → chunk-FRVV5SSD.js} +2 -2
  99. package/chunks/{chunk-UXDVUFKU.js → chunk-FYZ5NZ3V.js} +2 -20
  100. package/chunks/{chunk-ALMR3E6Q.js → chunk-GDWE23OR.js} +3 -3
  101. package/chunks/{chunk-W7PXLIZJ.js → chunk-GP47UR3M.js} +6 -6
  102. package/chunks/{chunk-LNYV4GXX.js → chunk-GSKX53AN.js} +0 -139
  103. package/chunks/{chunk-MA5OUNN6.js → chunk-HG46TTAG.js} +1 -1
  104. package/chunks/{chunk-FETY36NQ.js → chunk-HGEUHUEV.js} +1 -1
  105. package/chunks/{chunk-UULHYZ4W.js → chunk-HL2DQG3Y.js} +148 -23
  106. package/chunks/{chunk-E6TI726I.js → chunk-HUXPEUFL.js} +1 -1
  107. package/chunks/{chunk-5DQ4YTIZ.js → chunk-HZTXKVSV.js} +1 -1
  108. package/chunks/{chunk-LYT2OU7D.js → chunk-IAEXTMED.js} +1 -1
  109. package/chunks/{chunk-CPJRFFPH.js → chunk-IFHJIEMN.js} +576 -169
  110. package/chunks/{chunk-IW6RQPQB.js → chunk-IJOS26LH.js} +1 -3
  111. package/chunks/{chunk-ORFIYTI2.js → chunk-IK2MWJP5.js} +1 -1
  112. package/chunks/{chunk-MWEF5MUK.js → chunk-IOUBOANU.js} +42 -13
  113. package/chunks/{chunk-KA5HR3G2.js → chunk-IUVIBDKU.js} +2 -2
  114. package/chunks/{chunk-PQWM4SX2.js → chunk-J2RNOJRV.js} +2 -2
  115. package/chunks/{chunk-VHPG7BH6.js → chunk-J5PYQVD2.js} +2 -2
  116. package/chunks/{chunk-JDPBJIKI.js → chunk-JDEW3V5B.js} +1 -1
  117. package/chunks/{chunk-RX3FYFCN.js → chunk-JEMDIKGQ.js} +7 -7
  118. package/chunks/chunk-JL6APGBX.js +43 -0
  119. package/chunks/{chunk-UHUT4IDM.js → chunk-JOMCZWX7.js} +9 -15
  120. package/chunks/{chunk-43CI6YWJ.js → chunk-JV5YASQA.js} +2777 -2151
  121. package/chunks/{chunk-N6S3NUYJ.js → chunk-JXNIF2O5.js} +1 -1
  122. package/chunks/chunk-K2OJUPOE.js +78 -0
  123. package/chunks/{chunk-QLM7D7W3.js → chunk-KFGPNCCY.js} +8 -8
  124. package/chunks/{chunk-7RXOEUFF.js → chunk-KHIBLKNK.js} +1 -1
  125. package/chunks/{chunk-5GD7LYOH.js → chunk-KVBNJ4K2.js} +5 -5
  126. package/chunks/{chunk-QJAFSFYA.js → chunk-KZ2CU2LH.js} +1 -1
  127. package/chunks/{chunk-DCPRCDSR.js → chunk-L2KF7HUE.js} +6 -6
  128. package/chunks/{chunk-4ALNJDHL.js → chunk-L3DTX6U4.js} +3 -1
  129. package/chunks/{chunk-3SH53ANB.js → chunk-LAP7X6EC.js} +12 -0
  130. package/chunks/{chunk-GM44O6F7.js → chunk-LEGNDA46.js} +1 -1
  131. package/chunks/{chunk-WXFCI3O5.js → chunk-LG5Y4OWO.js} +2 -2
  132. package/chunks/{chunk-3LPJ776W.js → chunk-LILGKQ4B.js} +10 -7
  133. package/chunks/{chunk-LBKYQ33T.js → chunk-LIR7YS2O.js} +18 -12
  134. package/chunks/{chunk-5Z4FCEPY.js → chunk-LK2WUCDQ.js} +625 -119
  135. package/chunks/{chunk-W673V2H3.js → chunk-LY2GK2PR.js} +4 -4
  136. package/chunks/{chunk-PQSCGZT2.js → chunk-MOS5OAOG.js} +36 -10
  137. package/chunks/chunk-MXOALJIL.js +691 -0
  138. package/chunks/chunk-NFXXBWSE.js +463 -0
  139. package/chunks/chunk-NUQ4GK5I.js +315 -0
  140. package/chunks/{chunk-J3VZF2AL.js → chunk-NUQVB25K.js} +2 -2
  141. package/chunks/{chunk-GNY7B3CA.js → chunk-NVIBH7WS.js} +1 -1
  142. package/chunks/{chunk-M6YLOETP.js → chunk-O3MKRN2I.js} +4 -4
  143. package/chunks/{chunk-ISPBBKJN.js → chunk-ONGZNOIP.js} +7 -2
  144. package/chunks/{chunk-Q2F43WTJ.js → chunk-OOLSYRZ7.js} +36 -19
  145. package/chunks/{chunk-63ACHB2H.js → chunk-PIGUW2U2.js} +197 -28
  146. package/chunks/{chunk-QAZ2MGYT.js → chunk-PLLIWEM3.js} +2 -2
  147. package/chunks/{chunk-ULY4ISY2.js → chunk-PMS4FVLY.js} +23 -8
  148. package/chunks/{chunk-NB3NDQQK.js → chunk-Q2XLNLAV.js} +1 -1
  149. package/chunks/{chunk-6GRDHIVI.js → chunk-Q6HXLBZF.js} +12 -12
  150. package/chunks/{chunk-EUXF6URV.js → chunk-QPWZX4ZV.js} +32 -34
  151. package/chunks/{chunk-DTB5BXRG.js → chunk-RJZTX2OF.js} +30 -17
  152. package/chunks/{chunk-PQEISIKS.js → chunk-SAH4BD2J.js} +0 -67
  153. package/chunks/{chunk-LUVXLLMS.js → chunk-SAWPURIU.js} +2 -2
  154. package/chunks/{chunk-WZS3X663.js → chunk-SNZWDV67.js} +43 -18
  155. package/chunks/{chunk-IRKQ4YYX.js → chunk-SVWWF5TZ.js} +29 -1
  156. package/chunks/{chunk-5VZFJTL2.js → chunk-SXEE6PND.js} +2 -2
  157. package/chunks/{chunk-743XE7N7.js → chunk-T4JVQR7Z.js} +2 -2
  158. package/chunks/{chunk-6RZX2HIH.js → chunk-TBEXLLAO.js} +2 -2
  159. package/chunks/{chunk-LN3WBOKU.js → chunk-TP2DUOB6.js} +8 -8
  160. package/chunks/{chunk-MWIO7MF6.js → chunk-TP6FYVQT.js} +2 -0
  161. package/chunks/{chunk-HRPFBHW7.js → chunk-TPKQIA7G.js} +1 -0
  162. package/chunks/{chunk-VH764G6B.js → chunk-TWC3FHUI.js} +4 -4
  163. package/chunks/{chunk-H3Q3RSKZ.js → chunk-U7O65WKL.js} +1 -1
  164. package/chunks/{chunk-IUJLW6ZI.js → chunk-UBEYS536.js} +7 -7
  165. package/chunks/{chunk-VEQBVJYH.js → chunk-UGS62IR2.js} +3 -3
  166. package/chunks/{chunk-VF6D6EGV.js → chunk-UKMWZ5NS.js} +109 -842
  167. package/chunks/{chunk-7GZCCHJL.js → chunk-VHKOULAI.js} +6 -5
  168. package/chunks/{chunk-ODBNTMZW.js → chunk-VID4BW52.js} +97 -86
  169. package/chunks/{chunk-7L35FKPF.js → chunk-VLZOU6UH.js} +7 -7
  170. package/chunks/{chunk-XBLG564H.js → chunk-VTBPMLRO.js} +12 -12
  171. package/chunks/{chunk-QTNCGZHQ.js → chunk-VX63RJXE.js} +9 -0
  172. package/chunks/{chunk-7VEYUF3N.js → chunk-W5ZQMAEM.js} +1 -1
  173. package/chunks/{chunk-XQ4RDO5B.js → chunk-WBCPROWX.js} +1 -1
  174. package/chunks/{chunk-RDV4NLI3.js → chunk-WS7MOFK6.js} +3 -3
  175. package/chunks/{chunk-FV4DM2M4.js → chunk-WXFK4MH7.js} +32 -12
  176. package/chunks/{chunk-XAXTQURR.js → chunk-WY4N6KS7.js} +4 -4
  177. package/chunks/{chunk-CABDNUJ4.js → chunk-XDQUDARC.js} +11 -14
  178. package/chunks/{chunk-YHDGABDC.js → chunk-XKBFYTCD.js} +1 -1
  179. package/chunks/{chunk-2EKVPSIJ.js → chunk-Y2MYW47X.js} +1 -1
  180. package/chunks/{chunk-Y6ZWXM44.js → chunk-YIU5PEAT.js} +2 -2
  181. package/chunks/{chunk-PSPAM24S.js → chunk-YKK2XXHF.js} +4 -0
  182. package/chunks/{chunk-HZ2HUXX7.js → chunk-YS2ZJSOA.js} +29 -12
  183. package/chunks/{chunk-OFVAS4AR.js → chunk-ZGQIIGNQ.js} +2 -2
  184. package/chunks/{chunk-HNLMYDQE.js → chunk-ZHECLGA6.js} +2 -4
  185. package/chunks/{chunk-XBVNNDPK.js → chunk-ZHKTKHMO.js} +8 -1
  186. package/chunks/{chunk-OWCFKIFQ.js → chunk-ZKYR7QS4.js} +1 -1
  187. package/chunks/{chunk-YZTGGCEE.js → chunk-ZKZHSB5W.js} +1 -1
  188. package/chunks/{chunk-ERXNTINK.js → chunk-ZT6EPPBY.js} +1 -1
  189. package/chunks/{chunk-565U2ANU.js → chunk-ZTTC7T4X.js} +1 -1
  190. package/chunks/{chunk-MMMA36MN.js → chunk-ZUQVZTWG.js} +3 -3
  191. package/chunks/{chunk-7OCIQNKX.js → chunk-ZW2EUO2A.js} +1 -1
  192. package/chunks/{config-utils-37FHWPTP.js → config-utils-S5LFS4RN.js} +67 -59
  193. package/chunks/{contextCommand-R4JUBV5N.js → contextCommand-XXKZMMSQ.js} +64 -56
  194. package/chunks/{core-runtime-6U4OXU5C.js → core-runtime-YGUA42AZ.js} +68 -59
  195. package/chunks/{create-sub-session-LLUYAGZN.js → create-sub-session-SEK6KCYR.js} +64 -56
  196. package/chunks/{create-sub-session-TGIX63YU.js → create-sub-session-TIGCFGCS.js} +2 -2
  197. package/chunks/{cron-create-GTPVMJCF.js → cron-create-AKWX67FO.js} +1 -1
  198. package/chunks/{cron-delete-ZBK27Z4K.js → cron-delete-XPB6IYZJ.js} +1 -1
  199. package/chunks/{cron-list-KTFKFDKC.js → cron-list-XBKO4WU5.js} +1 -1
  200. package/chunks/{daemon-UI6SQSBV.js → daemon-G5TYKZD6.js} +2 -2
  201. package/chunks/{daemon-git-worktree-guard-O2UTNFJC.js → daemon-git-worktree-guard-3AWINPPX.js} +65 -57
  202. package/chunks/{daemon-status-provider-7GMAKSTX.js → daemon-status-provider-RTKHKUFJ.js} +73 -65
  203. package/chunks/{daemon-trust-policy-VNP76VMO.js → daemon-trust-policy-6YQOC7B6.js} +69 -61
  204. package/chunks/{daemon-trust-policy-monitor-TD5O3BZA.js → daemon-trust-policy-monitor-EN5L23GS.js} +69 -61
  205. package/chunks/{de-UU2YTO37.js → de-OOLZAU2U.js} +1 -1
  206. package/chunks/{deferred-core-runtime-NJM63YJS.js → deferred-core-runtime-JPLQRVZO.js} +62 -54
  207. package/chunks/{display-image-CTNHJRZC.js → display-image-NAH3AZ63.js} +3 -3
  208. package/chunks/{dist-STAGIFNB.js → dist-3BJVSJ7D.js} +389 -724
  209. package/chunks/{dist-OR2ZQTXZ.js → dist-65Q3TRLH.js} +16 -36
  210. package/chunks/{dist-24TCWK5H.js → dist-HX2LG76F.js} +233 -35
  211. package/chunks/{dist-XJ25G6OH.js → dist-J7PDFK53.js} +13 -38
  212. package/chunks/{dist-WZTUKIDR.js → dist-JCXKXRH6.js} +3 -6
  213. package/chunks/{dist-M4CBX53H.js → dist-LHGMHIDK.js} +2 -6
  214. package/chunks/{dist-5I4HLUTO.js → dist-QPTIRE3U.js} +4 -13
  215. package/chunks/{dist-FDISN4AK.js → dist-SBK33YLC.js} +5 -40
  216. package/chunks/{dist-NQ2636VT.js → dist-WMFHZG3R.js} +2 -5
  217. package/chunks/{edit-GL7OA6RV.js → edit-QXJZIWRQ.js} +50 -44
  218. package/chunks/{en-YJNRUQG4.js → en-7BZ2OZKH.js} +2 -1
  219. package/chunks/{enter-worktree-YFTKHXHZ.js → enter-worktree-54L5QJ3N.js} +4 -4
  220. package/chunks/{enterPlanMode-VC4BCSZE.js → enterPlanMode-2ITCVQ5N.js} +47 -41
  221. package/chunks/{environment-BI6IBAZJ.js → environment-URPO5ORZ.js} +65 -57
  222. package/chunks/{errors-D6G2ZM2R.js → errors-TDUYLEKI.js} +64 -56
  223. package/chunks/{exit-worktree-NF2XEMES.js → exit-worktree-EORJDKDS.js} +4 -4
  224. package/chunks/{exitPlanMode-DX446CA6.js → exitPlanMode-RA7KMUEW.js} +47 -41
  225. package/chunks/{fast-path-MAYDLJIP.js → fast-path-Q2JYP64P.js} +7 -7
  226. package/chunks/{fast-path-settings-SATXY3PD.js → fast-path-settings-GTHZLVSS.js} +2 -2
  227. package/chunks/{fr-HKNWVXRJ.js → fr-JJWM2HUS.js} +1 -1
  228. package/chunks/{glob-TVKRFY36.js → glob-VHSV4BKE.js} +50 -44
  229. package/chunks/{goal-tools-CA6YANRN.js → goal-tools-5FIE56CK.js} +53 -43
  230. package/chunks/{grep-BLHF2S5D.js → grep-3PKFKLCA.js} +2 -2
  231. package/chunks/{handleAutoUpdate-AW4ZAHON.js → handleAutoUpdate-7FZFLKNZ.js} +65 -57
  232. package/chunks/{i18n-IH5CRAY7.js → i18n-NTFQDWKR.js} +63 -55
  233. package/chunks/{image-gen-XP4NNIYG.js → image-gen-TF3IQWSH.js} +7 -6
  234. package/chunks/{initializer-UBR37ZNM.js → initializer-LB3T635H.js} +69 -61
  235. package/chunks/{installationInfo-Y52756EC.js → installationInfo-KRO433ZG.js} +62 -54
  236. package/chunks/{ja-GJS5RZGU.js → ja-L67TXFDJ.js} +1 -1
  237. package/chunks/{list-7V5JDZPO.js → list-NEP3WPZ7.js} +72 -64
  238. package/chunks/{list-agents-I5TRH3J7.js → list-agents-QLDXS5OD.js} +18 -8
  239. package/chunks/{llm-QDB6JVF5.js → llm-AZEJEIAD.js} +141 -128
  240. package/chunks/{llm-content-generator-EO6MZCEO.js → llm-content-generator-KWXFHBR3.js} +6 -5
  241. package/chunks/{loadedSettingsAdapter-I3YQKMC4.js → loadedSettingsAdapter-NZORJLSD.js} +69 -61
  242. package/chunks/{loggingContentGenerator-MNXYUGDG.js → loggingContentGenerator-NGHVU6AK.js} +69 -62
  243. package/chunks/{loop-wakeup-HL6XOWI4.js → loop-wakeup-HHMYIC7Z.js} +2 -2
  244. package/chunks/{ls-YV7RKLKY.js → ls-N7ABR6HI.js} +4 -4
  245. package/chunks/{lsp-NO3AMRZT.js → lsp-LTOFWG5P.js} +1 -1
  246. package/chunks/{managed-npm-update-EA3EXPTO.js → managed-npm-update-3LHNBEAG.js} +62 -54
  247. package/chunks/{mcp-QTAJ544Y.js → mcp-4SWJKDX7.js} +69 -61
  248. package/chunks/{monitor-6FQKQOTP.js → monitor-V5EFBZC7.js} +49 -43
  249. package/chunks/{nonInteractiveCli-MRCTZL5X.js → nonInteractiveCli-5UFUBUAT.js} +117 -109
  250. package/chunks/{notebook-edit-BQQCKI7K.js → notebook-edit-ATV46KWD.js} +48 -42
  251. package/chunks/{open-with-auth-D6JD6LDS.js → open-with-auth-6MVIHMXB.js} +1 -1
  252. package/chunks/openai-WX26N5OJ.js +47 -0
  253. package/chunks/{openaiContentGenerator-TTSKXNVH.js → openaiContentGenerator-BKTO5QJK.js} +31 -25
  254. package/chunks/openaiResponsesContentGenerator-RTCAJ5V5.js +1658 -0
  255. package/chunks/{pidfile-KPIS6RIT.js → pidfile-JAIOWPI3.js} +65 -55
  256. package/chunks/process-registry-X6ZCASEN.js +10 -0
  257. package/chunks/{processUtils-ZCASPKK4.js → processUtils-TCQH3LVD.js} +2 -2
  258. package/chunks/{prompt-terminal-ledger-D6HM6TV7.js → prompt-terminal-ledger-BYXHEUHX.js} +63 -55
  259. package/chunks/{pt-FXMYXEUV.js → pt-77SBDL4B.js} +1 -1
  260. package/chunks/{qwenContentGenerator-GGZEFLBD.js → qwenContentGenerator-K5TJK75P.js} +60 -52
  261. package/chunks/{qwenOAuth2-KX6LVYQ3.js → qwenOAuth2-NOXRK323.js} +6 -5
  262. package/chunks/{read-file-VE5GDFLP.js → read-file-DL7GNZD5.js} +11 -9
  263. package/chunks/{read-mcp-resource-D3N75DGF.js → read-mcp-resource-B37WANAQ.js} +1 -1
  264. package/chunks/{record-artifact-Q5CRGJTP.js → record-artifact-OAXWXZ5D.js} +2 -2
  265. package/chunks/record-source-D7R7X3GT.js +22 -0
  266. package/chunks/{report-findings-TJ34R7QK.js → report-findings-AR3VC6EQ.js} +3 -3
  267. package/chunks/{request-shutdown-LRKMTBAD.js → request-shutdown-IKNWTX5M.js} +5 -5
  268. package/chunks/{resumeHistoryUtils-HSSGMYDC.js → resumeHistoryUtils-OYKXZ4YO.js} +68 -60
  269. package/chunks/{ripGrep-SEJE7AA6.js → ripGrep-EOUMIU4K.js} +15 -13
  270. package/chunks/{ru-RMHURE5U.js → ru-UYWHKWF2.js} +1 -1
  271. package/chunks/{run-qwen-serve-OJYVH7N6.js → run-qwen-serve-PPTGWC5B.js} +471 -152
  272. package/chunks/{runtime-KGMQQFJD.js → runtime-5RO22P2N.js} +77 -67
  273. package/chunks/{scheduled-tasks-7H5HWHYD.js → scheduled-tasks-YGERFWLZ.js} +70 -62
  274. package/chunks/{scheduler-BE42AKDG.js → scheduler-S6WU6M3C.js} +64 -56
  275. package/chunks/{sdk-exporters-grpc-MXTVSE3C.js → sdk-exporters-grpc-Y2ZUQDUQ.js} +2 -2
  276. package/chunks/{sdk-exporters-http-7R2ARBPV.js → sdk-exporters-http-VWTF4W6K.js} +3 -3
  277. package/chunks/{sdk-impl-YOLO7LV4.js → sdk-impl-G6FVTBQZ.js} +9 -9
  278. package/chunks/{send-message-AWKUDJBH.js → send-message-TWOGWCBG.js} +13 -10
  279. package/chunks/{serve-KZVKYMSL.js → serve-HT4WOCWS.js} +70 -62
  280. package/chunks/{server-PJRALPJQ.js → server-SWXVPRCS.js} +2977 -617
  281. package/chunks/{session-IHITXU2S.js → session-6DSFUOMO.js} +154 -119
  282. package/chunks/{session-attachments-root-GQ2TUI3Y.js → session-attachments-root-SOZCTQWW.js} +62 -54
  283. package/chunks/{session-pr-refresh-H43LULTE.js → session-pr-refresh-F7XUBQBH.js} +70 -62
  284. package/chunks/{settings-RKEQQDFC.js → settings-SWQH36PO.js} +74 -66
  285. package/chunks/{shell-6PJ444U5.js → shell-XUQL6EYV.js} +47 -41
  286. package/chunks/{skill-Q3UP7B5V.js → skill-HNRDD54C.js} +33 -23
  287. package/chunks/{skill-settings-LZR5YRRW.js → skill-settings-JU72PCII.js} +68 -60
  288. package/chunks/{spawnChannel-WM3DT2BF.js → spawnChannel-7ZVM3GBU.js} +65 -57
  289. package/chunks/{standalone-update-E5474IBI.js → standalone-update-64JQY2LX.js} +64 -56
  290. package/chunks/{start-opentui-ui-WLWZNQ2I.js → start-opentui-ui-RSLBXESU.js} +554 -297
  291. package/chunks/{startInteractiveUI-FBQSGWGO.js → startInteractiveUI-ZDPHD7XE.js} +1282 -1915
  292. package/chunks/{syntheticOutput-D2P5V6RG.js → syntheticOutput-F6F27JMK.js} +2 -2
  293. package/chunks/{task-create-PMAFST2T.js → task-create-Y623TBHB.js} +10 -10
  294. package/chunks/{task-list-R2HSY2NC.js → task-list-FCPEEGWL.js} +3 -3
  295. package/chunks/{task-stop-BFSKRTGV.js → task-stop-QTKZXLPH.js} +1 -1
  296. package/chunks/{task-update-JYC57USF.js → task-update-YLSXF25N.js} +10 -10
  297. package/chunks/{team-create-VIGUFUT4.js → team-create-U52VYSNO.js} +49 -43
  298. package/chunks/{team-delete-CBHVBTPB.js → team-delete-S7TLHZCF.js} +3 -3
  299. package/chunks/{team-plan-approval-HQVZA3MD.js → team-plan-approval-IQ4ADQIK.js} +47 -41
  300. package/chunks/{terminal-image-renderer-LUKNCOVM.js → terminal-image-renderer-ZEMF7LB2.js} +64 -56
  301. package/chunks/{theme-manager-LOENKYLY.js → theme-manager-DK2S2SOX.js} +62 -54
  302. package/chunks/{todoWrite-5ERKFWAK.js → todoWrite-5QI2H2FW.js} +4 -4
  303. package/chunks/{tool-search-ZIFAQCE2.js → tool-search-6U4OQG7K.js} +21 -15
  304. package/chunks/{total-session-admission-FUUJH3QH.js → total-session-admission-BOARHBZU.js} +68 -60
  305. package/chunks/{trustedFolders-C76KYROP.js → trustedFolders-GKQZXZSV.js} +63 -55
  306. package/chunks/{update-relaunch-4G2SRXKX.js → update-relaunch-GLACF7PX.js} +5 -5
  307. package/chunks/{updateCheck-EIZIO7HI.js → updateCheck-NLBSZB4Q.js} +64 -56
  308. package/chunks/{useAutoAcceptIndicator-EAA6KSY4.js → useAutoAcceptIndicator-3X3BYU7H.js} +72 -64
  309. package/chunks/{validateNonInterActiveAuth-BRX22QCN.js → validateNonInterActiveAuth-NE3JLOIR.js} +114 -106
  310. package/chunks/{version-E56RU7PR.js → version-6H5YAT4N.js} +3 -1
  311. package/chunks/{web-fetch-AAUCD7RM.js → web-fetch-RWSO7TTN.js} +15 -13
  312. package/chunks/{web-search-HFUQF44Q.js → web-search-DADI3LV5.js} +560 -322
  313. package/chunks/{web-shell-static-POZHGGXE.js → web-shell-static-CCN4JZEE.js} +5 -4
  314. package/chunks/workflow-LPGCZCIT.js +1224 -0
  315. package/chunks/workspace-providers-status-QBRBEFTO.js +127 -0
  316. package/chunks/{workspace-registration-store-YL7HLYYI.js → workspace-registration-store-WUKTMJPW.js} +3 -2
  317. package/chunks/{workspace-registry-BNRP2ELW.js → workspace-registry-CJV7KVGF.js} +68 -60
  318. package/chunks/{workspace-runtime-coordinator-WKGF7VHS.js → workspace-runtime-coordinator-7LYMFMFF.js} +71 -61
  319. package/chunks/{workspace-service-4MYO72MM.js → workspace-service-HWXZSA4J.js} +75 -67
  320. package/chunks/{workspace-skills-status-SU66TJLZ.js → workspace-skills-status-D6QXUWCC.js} +70 -62
  321. package/chunks/{workspace-trust-reconciler-D5QT7WQB.js → workspace-trust-reconciler-VZX7G7CZ.js} +75 -67
  322. package/chunks/{write-file-NVPQE2AZ.js → write-file-KKHV26YV.js} +49 -43
  323. package/chunks/{zh-VBFCRQBL.js → zh-J2GLI64H.js} +2 -1
  324. package/chunks/{zh-TW-N2TBF2F2.js → zh-TW-TBAICUJQ.js} +2 -1
  325. package/chunks/{zoom-image-RJHC66WG.js → zoom-image-OG7X7KAA.js} +12 -10
  326. package/cli.js +14 -14
  327. package/export-transcript-document.css +1 -0
  328. package/export-transcript-document.js +164 -165
  329. package/locales/ca.js +2 -2
  330. package/locales/de.js +2 -2
  331. package/locales/en.js +3 -2
  332. package/locales/fr.js +2 -2
  333. package/locales/ja.js +2 -2
  334. package/locales/pt.js +2 -2
  335. package/locales/ru.js +2 -2
  336. package/locales/zh-TW.js +3 -2
  337. package/locales/zh.js +3 -2
  338. package/package.json +6 -5
  339. package/web-shell/assets/{abnfDiagram-VCTEODGH-DHc6plZn.js → abnfDiagram-VCTEODGH-NT0lTLRG.js} +1 -1
  340. package/web-shell/assets/{arc-BQ9m8TDV.js → arc-DDqnIMMx.js} +1 -1
  341. package/web-shell/assets/{architectureDiagram-5GKGNRK7-D5ap3oVB.js → architectureDiagram-5GKGNRK7-DfYghE3W.js} +1 -1
  342. package/web-shell/assets/{blockDiagram-NRAW4CY4-BIbnyNph.js → blockDiagram-NRAW4CY4-DlqJIx5c.js} +1 -1
  343. package/web-shell/assets/{c4Diagram-UCG6FXSJ-BRsdx_iG.js → c4Diagram-UCG6FXSJ-CinqLGU4.js} +1 -1
  344. package/web-shell/assets/channel-BHGoSkEv.js +1 -0
  345. package/web-shell/assets/{chunk-2Q5K7J3B-3lf1fNlx.js → chunk-2Q5K7J3B-CsjJX5M7.js} +1 -1
  346. package/web-shell/assets/{chunk-5VM5RSS4-DP8VNRc4.js → chunk-5VM5RSS4-CaVb2tdH.js} +1 -1
  347. package/web-shell/assets/{chunk-F27PBJKO-DrohDmZ6.js → chunk-F27PBJKO-CRyErlzW.js} +1 -1
  348. package/web-shell/assets/{chunk-G27WJ6UU-UZ2QhSx6.js → chunk-G27WJ6UU-7I79DZCf.js} +1 -1
  349. package/web-shell/assets/{chunk-JWPE2WC7-BIMHVcZK.js → chunk-JWPE2WC7-Dz4cac5F.js} +1 -1
  350. package/web-shell/assets/{chunk-LCL6LL3I-izRxdSDd.js → chunk-LCL6LL3I-Ls24Derb.js} +1 -1
  351. package/web-shell/assets/{chunk-POPQ4Y6H-CXADD4PP.js → chunk-POPQ4Y6H-JzYe4qx7.js} +1 -1
  352. package/web-shell/assets/{chunk-SVP7TREG-B96d8Y_1.js → chunk-SVP7TREG-BxDwesA-.js} +1 -1
  353. package/web-shell/assets/{chunk-XXDRQBXY-CF2sVQpv.js → chunk-XXDRQBXY-CW4hjgWc.js} +1 -1
  354. package/web-shell/assets/classDiagram-DTDB5LWJ-E47Xnn15.js +1 -0
  355. package/web-shell/assets/classDiagram-v2-JRS7N3AN-E47Xnn15.js +1 -0
  356. package/web-shell/assets/{cose-bilkent-JH36ORCC-CT6tXVAS.js → cose-bilkent-JH36ORCC-DxikE9iF.js} +1 -1
  357. package/web-shell/assets/{cynefin-OW5HDTMX-X1NS4vtV.js → cynefin-OW5HDTMX-CvVsIkVN.js} +1 -1
  358. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-DNsKNOT4.js → cynefinDiagram-5FMLGOSQ-CDHkk3wq.js} +1 -1
  359. package/web-shell/assets/{dagre-3AP2YEHR-9-AHKqsb.js → dagre-3AP2YEHR-BgLdkVLT.js} +1 -1
  360. package/web-shell/assets/{diagram-S7CK7UJ4-Bjgms7j6.js → diagram-S7CK7UJ4-DP43cGhe.js} +1 -1
  361. package/web-shell/assets/{diagram-UQ7AKVKN-h6bCprbE.js → diagram-UQ7AKVKN-BWrZYhoT.js} +1 -1
  362. package/web-shell/assets/{diagram-VSXAHHWV-4SbQXVLt.js → diagram-VSXAHHWV-B80wjH_n.js} +1 -1
  363. package/web-shell/assets/{diagram-VX7I27RA-B5gPCzzB.js → diagram-VX7I27RA-DPpKmDsY.js} +1 -1
  364. package/web-shell/assets/{diagram-Z3DM3KII-DFJXIA3A.js → diagram-Z3DM3KII-kaEBNbNU.js} +1 -1
  365. package/web-shell/assets/{ebnfDiagram-PWID7BFC-FwyaU7VY.js → ebnfDiagram-PWID7BFC-1-qbEZvk.js} +1 -1
  366. package/web-shell/assets/{erDiagram-SSCWMZ5O-8vJQh2te.js → erDiagram-SSCWMZ5O-CrK2gMkV.js} +1 -1
  367. package/web-shell/assets/{flowDiagram-A5DVABFB-BzA_1gMN.js → flowDiagram-A5DVABFB-Dic2xofW.js} +1 -1
  368. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-Co-ABbVX.js → ganttDiagram-EL5Y4UJY-DJko8vT7.js} +1 -1
  369. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-DW_FcyrX.js → gitGraphDiagram-WWUBYQGX-DxsQ-bHT.js} +1 -1
  370. package/web-shell/assets/index-DY8CxdBr.js +2173 -0
  371. package/web-shell/assets/index-eBxK3rs2.css +36 -0
  372. package/web-shell/assets/{index-BbMXfhNG.js → index-t7VBrUeD.js} +1 -1
  373. package/web-shell/assets/{infoDiagram-RXCK75RN-BEgfhUFN.js → infoDiagram-RXCK75RN-DcRUJbNi.js} +1 -1
  374. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-DCsMxQmc.js → ishikawaDiagram-5VMMS53U-CUPw-2_e.js} +1 -1
  375. package/web-shell/assets/{journeyDiagram-EYS64GPL-DyIEYoHz.js → journeyDiagram-EYS64GPL-yOHhZxkW.js} +1 -1
  376. package/web-shell/assets/{kanban-definition-3QL26DDD-CkxjqCNr.js → kanban-definition-3QL26DDD-CFUGBbqz.js} +1 -1
  377. package/web-shell/assets/{layout-BEWc0Al9.js → layout-BoilNfBU.js} +1 -1
  378. package/web-shell/assets/{linear-CNuNxirL.js → linear-DOuHaPrl.js} +1 -1
  379. package/web-shell/assets/{mermaid.core-DZBre674.js → mermaid.core-1G1fXWda.js} +6 -6
  380. package/web-shell/assets/{mindmap-definition-FBJOCRG2-CpafFz_F.js → mindmap-definition-FBJOCRG2-B8BhkrOX.js} +1 -1
  381. package/web-shell/assets/{pegDiagram-XKGWAZYB-DfZqk_dq.js → pegDiagram-XKGWAZYB-CipC5K1D.js} +1 -1
  382. package/web-shell/assets/{pieDiagram-E7YTZNPT-S0UWXlgC.js → pieDiagram-E7YTZNPT-CHBDFDUJ.js} +1 -1
  383. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-dd37_Ohj.js → quadrantDiagram-AXDQQJYC-_iiBkoZO.js} +1 -1
  384. package/web-shell/assets/{railroadDiagram-O6MQD6OU-CH8NJZ7u.js → railroadDiagram-O6MQD6OU-Cx1peHDi.js} +1 -1
  385. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-CFdqWYih.js → requirementDiagram-EFPCY7ZU-CBRiPbdQ.js} +1 -1
  386. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CsddcEGD.js → sankeyDiagram-P5KCCOFB-TT6GcHaZ.js} +1 -1
  387. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-BZ270mGw.js → sequenceDiagram-WJ2MYXX4-CWP42PNb.js} +1 -1
  388. package/web-shell/assets/{sizeCapture-X5ZJPWSS-CGaS4DBV.js → sizeCapture-X5ZJPWSS-Bp94roEG.js} +1 -1
  389. package/web-shell/assets/{stateDiagram-HBIQ2CUA-COpIzMu6.js → stateDiagram-HBIQ2CUA-0ftrzTAy.js} +1 -1
  390. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-PgAST0dK.js +1 -0
  391. package/web-shell/assets/{swimlanes-XN3QIQJK-CMF889m3.js → swimlanes-XN3QIQJK-D-FsenYJ.js} +1 -1
  392. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-BcWcB5bj.js +8 -0
  393. package/web-shell/assets/{timeline-definition-24CTP7MA-BelnxYz5.js → timeline-definition-24CTP7MA-Ctvrj28y.js} +1 -1
  394. package/web-shell/assets/{vennDiagram-4TSXK5OY-CU-NRqIB.js → vennDiagram-4TSXK5OY-5DZncjOt.js} +1 -1
  395. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CDNKqWh-.js → wardleyDiagram-VM6X3IG4-jZjYwPY7.js} +1 -1
  396. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-CLqguL5D.js → xychartDiagram-S5SC5T6Z-Ci6Q2C2_.js} +1 -1
  397. package/web-shell/index.html +29 -5
  398. package/chunks/chunk-V7RNNPGC.js +0 -44
  399. package/chunks/chunk-X35VIWWJ.js +0 -276
  400. package/chunks/workflow-3MABM53N.js +0 -2771
  401. package/chunks/workspace-providers-status-2FRLBZ5I.js +0 -119
  402. package/web-shell/assets/channel-uMMdTrYk.js +0 -1
  403. package/web-shell/assets/classDiagram-DTDB5LWJ-DcY-26Ig.js +0 -1
  404. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DcY-26Ig.js +0 -1
  405. package/web-shell/assets/index-Bu-rZoJ-.js +0 -2150
  406. package/web-shell/assets/index-CsPwZ1ut.css +0 -36
  407. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-D6qEVAji.js +0 -1
  408. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-mem5Jj4m.js +0 -8
  409. /package/chunks/{chunk-JA5CBKRP.js → chunk-7NXSVSFB.js} +0 -0
@@ -4,7 +4,7 @@ import {
4
4
  ClientSideConnection,
5
5
  PROTOCOL_VERSION,
6
6
  ndJsonStream
7
- } from "./chunk-IW6RQPQB.js";
7
+ } from "./chunk-IJOS26LH.js";
8
8
  import {
9
9
  init_esbuild_shims
10
10
  } from "./chunk-5O2XNYP6.js";
@@ -1245,118 +1245,6 @@ init_esbuild_shims();
1245
1245
  import { basename as basename3, join as join5 } from "node:path";
1246
1246
  import { randomUUID as randomUUID3 } from "node:crypto";
1247
1247
 
1248
- // packages/channels/base/dist/BlockStreamer.js
1249
- init_esbuild_shims();
1250
- var BlockStreamer = class {
1251
- static {
1252
- __name(this, "BlockStreamer");
1253
- }
1254
- buffer = "";
1255
- idleTimer = null;
1256
- sending = Promise.resolve();
1257
- opts;
1258
- /** Number of blocks emitted so far. */
1259
- blockCount = 0;
1260
- constructor(opts) {
1261
- this.opts = opts;
1262
- }
1263
- /** Feed a new text chunk from the agent stream. */
1264
- push(chunk) {
1265
- this.buffer += chunk;
1266
- this.clearIdleTimer();
1267
- this.checkEmit();
1268
- if (this.buffer.length > 0 && this.opts.idleMs > 0) {
1269
- this.idleTimer = setTimeout(() => this.onIdle(), this.opts.idleMs);
1270
- }
1271
- }
1272
- /** Flush all remaining buffered text. Awaits all pending sends. */
1273
- async flush() {
1274
- this.clearIdleTimer();
1275
- if (this.buffer.length > 0) {
1276
- this.emitBlock(this.buffer);
1277
- this.buffer = "";
1278
- }
1279
- await this.sending;
1280
- }
1281
- /** Drop buffered text and cancel future idle emission. */
1282
- stop() {
1283
- this.clearIdleTimer();
1284
- this.buffer = "";
1285
- }
1286
- /** Await already-queued sends without emitting the buffered text. */
1287
- async drain() {
1288
- await this.sending;
1289
- }
1290
- // ---------------------------------------------------------------------------
1291
- // Internal
1292
- // ---------------------------------------------------------------------------
1293
- checkEmit() {
1294
- while (this.buffer.length >= this.opts.maxChars) {
1295
- const bp = this.findBreakPoint(this.buffer, this.opts.maxChars);
1296
- this.emitBlock(this.buffer.slice(0, bp));
1297
- this.buffer = this.buffer.slice(bp);
1298
- }
1299
- if (this.buffer.length >= this.opts.minChars) {
1300
- const bp = this.findBlockBoundary(this.buffer);
1301
- if (bp > 0) {
1302
- this.emitBlock(this.buffer.slice(0, bp));
1303
- this.buffer = this.buffer.slice(bp);
1304
- }
1305
- }
1306
- }
1307
- onIdle() {
1308
- this.idleTimer = null;
1309
- if (this.buffer.length >= this.opts.minChars) {
1310
- this.emitBlock(this.buffer);
1311
- this.buffer = "";
1312
- }
1313
- }
1314
- emitBlock(text) {
1315
- const trimmed = text.trim();
1316
- if (!trimmed)
1317
- return;
1318
- const block = /\n[^\S\n]*$/.test(text) ? `${trimmed}
1319
- ` : trimmed;
1320
- this.blockCount++;
1321
- this.sending = this.sending.then(() => this.opts.send(block)).catch(() => {
1322
- });
1323
- }
1324
- /**
1325
- * Find the last paragraph boundary (\n\n) in the buffer.
1326
- * Returns the position after the boundary, or -1 if no suitable boundary
1327
- * exists at or after minChars.
1328
- */
1329
- findBlockBoundary(text) {
1330
- const last = text.lastIndexOf("\n\n");
1331
- if (last < 0 || last < this.opts.minChars)
1332
- return -1;
1333
- return last + 2;
1334
- }
1335
- /**
1336
- * Find the best break point at or before maxPos.
1337
- * Prefers paragraph break > newline > space > maxPos.
1338
- */
1339
- findBreakPoint(text, maxPos) {
1340
- const sub = text.slice(0, maxPos);
1341
- const para = sub.lastIndexOf("\n\n");
1342
- if (para > 0)
1343
- return para + 2;
1344
- const nl = sub.lastIndexOf("\n");
1345
- if (nl > 0)
1346
- return nl + 1;
1347
- const sp = sub.lastIndexOf(" ");
1348
- if (sp > 0)
1349
- return sp + 1;
1350
- return maxPos;
1351
- }
1352
- clearIdleTimer() {
1353
- if (this.idleTimer !== null) {
1354
- clearTimeout(this.idleTimer);
1355
- this.idleTimer = null;
1356
- }
1357
- }
1358
- };
1359
-
1360
1248
  // packages/channels/base/dist/ChannelProactiveDeliveryError.js
1361
1249
  init_esbuild_shims();
1362
1250
  var CHANNEL_PROACTIVE_DELIVERY_ERROR_CODE = "channel_proactive_delivery_error";
@@ -3931,71 +3819,6 @@ function truncateError(message) {
3931
3819
  }
3932
3820
  __name(truncateError, "truncateError");
3933
3821
 
3934
- // packages/channels/base/dist/message-prefix.js
3935
- init_esbuild_shims();
3936
- function startsWithMessagePrefix(text, prefix) {
3937
- return text.startsWith(prefix) && (text.length === prefix.length || /\s/u.test(text.charAt(prefix.length)));
3938
- }
3939
- __name(startsWithMessagePrefix, "startsWithMessagePrefix");
3940
- function stripMessagePrefix(text, prefix) {
3941
- if (!prefix)
3942
- return text;
3943
- let candidate = text.trim();
3944
- while (!startsWithMessagePrefix(candidate, prefix) && (candidate.startsWith("@") || candidate.startsWith("<@"))) {
3945
- const mention = candidate.match(/^(?:@[^@\s]+|<@[^>]{1,64}>)\s+/u)?.[0];
3946
- if (!mention)
3947
- return void 0;
3948
- candidate = candidate.slice(mention.length);
3949
- }
3950
- if (!startsWithMessagePrefix(candidate, prefix))
3951
- return void 0;
3952
- const suffix = candidate.slice(prefix.length);
3953
- if (!/^\s+\S[\s\S]*$/u.test(suffix))
3954
- return void 0;
3955
- return suffix.trim();
3956
- }
3957
- __name(stripMessagePrefix, "stripMessagePrefix");
3958
- function locateDisplayText(envelope, displayText) {
3959
- const offset = envelope.displayTextOffset;
3960
- if (offset !== void 0 && envelope.text.startsWith(displayText, offset)) {
3961
- return offset;
3962
- }
3963
- if (offset === void 0 && envelope.text.endsWith(displayText)) {
3964
- return envelope.text.length - displayText.length;
3965
- }
3966
- const first = envelope.text.indexOf(displayText);
3967
- if (first === -1)
3968
- return -1;
3969
- return envelope.text.indexOf(displayText, first + 1) === -1 ? first : "ambiguous";
3970
- }
3971
- __name(locateDisplayText, "locateDisplayText");
3972
- function applyMessagePrefix(envelope, prefix) {
3973
- if (!prefix || envelope.bypassMessagePrefix || envelope.syntheticText) {
3974
- return true;
3975
- }
3976
- const displayText = envelope.displayText;
3977
- const prefixText = envelope.messagePrefixText;
3978
- const sourceText = prefixText ?? displayText ?? envelope.text;
3979
- const stripped = stripMessagePrefix(sourceText, prefix);
3980
- if (stripped === void 0)
3981
- return false;
3982
- if (displayText === void 0) {
3983
- if (prefixText !== void 0)
3984
- envelope.messagePrefixText = stripped;
3985
- envelope.text = stripped;
3986
- return true;
3987
- }
3988
- const at = locateDisplayText(envelope, displayText);
3989
- if (at === "ambiguous" || at === -1)
3990
- return false;
3991
- if (prefixText !== void 0)
3992
- envelope.messagePrefixText = stripped;
3993
- envelope.displayText = stripped;
3994
- envelope.text = envelope.text.slice(0, at) + stripped + envelope.text.slice(at + displayText.length);
3995
- return true;
3996
- }
3997
- __name(applyMessagePrefix, "applyMessagePrefix");
3998
-
3999
3822
  // packages/channels/base/dist/ChannelWebhookTask.js
4000
3823
  init_esbuild_shims();
4001
3824
  var MAX_WEBHOOK_PROMPT_CHARS = 8500;
@@ -4330,6 +4153,45 @@ function isRecord2(value) {
4330
4153
  return value !== null && typeof value === "object" && !Array.isArray(value);
4331
4154
  }
4332
4155
  __name(isRecord2, "isRecord");
4156
+ var PERMISSION_COPY = {
4157
+ en: {
4158
+ toolUse: "Tool use",
4159
+ allowOnce: "Allow once",
4160
+ allowAlwaysProject: "always allow for this project",
4161
+ allowAlwaysUser: "always allow for this user",
4162
+ allowAlways: "always allow",
4163
+ deny: "Deny",
4164
+ required: "Permission required to run a tool",
4165
+ request: "Request:",
4166
+ tool: "Tool:",
4167
+ action: "Action:",
4168
+ parameters: "Parameters:",
4169
+ replyWith: "Reply with:"
4170
+ },
4171
+ zh: {
4172
+ toolUse: "\u5DE5\u5177\u8C03\u7528",
4173
+ allowOnce: "\u4EC5\u5141\u8BB8\u672C\u6B21",
4174
+ allowAlwaysProject: "\u59CB\u7EC8\u5141\u8BB8\u6B64\u9879\u76EE",
4175
+ allowAlwaysUser: "\u59CB\u7EC8\u5141\u8BB8\u6B64\u7528\u6237",
4176
+ allowAlways: "\u59CB\u7EC8\u5141\u8BB8",
4177
+ deny: "\u62D2\u7EDD",
4178
+ required: "\u8FD0\u884C\u5DE5\u5177\u9700\u8981\u6388\u6743",
4179
+ request: "\u8BF7\u6C42\uFF1A",
4180
+ tool: "\u5DE5\u5177\uFF1A",
4181
+ action: "\u64CD\u4F5C\uFF1A",
4182
+ parameters: "\u53C2\u6570\uFF1A",
4183
+ replyWith: "\u56DE\u590D\u4EE5\u4E0B\u547D\u4EE4\uFF1A"
4184
+ }
4185
+ };
4186
+ function localizedScopedAlwaysLabel(label, stockLabel, localizedLabel) {
4187
+ if (label === stockLabel)
4188
+ return localizedLabel;
4189
+ const scopeSeparator = ": ";
4190
+ if (!label.startsWith(stockLabel + scopeSeparator))
4191
+ return void 0;
4192
+ return `${localizedLabel}\uFF1A${label.slice(stockLabel.length + scopeSeparator.length)}`;
4193
+ }
4194
+ __name(localizedScopedAlwaysLabel, "localizedScopedAlwaysLabel");
4333
4195
  var COMMAND_TOKEN_CHARS = "a-zA-Z0-9_:-";
4334
4196
  var PARSE_COMMAND_RE = new RegExp(`^\\/([${COMMAND_TOKEN_CHARS}]+)(?:@\\S+)?\\s*(.*)`, "s");
4335
4197
  var COMMAND_TOKEN_RE = new RegExp(`^[${COMMAND_TOKEN_CHARS}]+(?:@\\S+)?$`);
@@ -4373,6 +4235,7 @@ var ChannelBase = class {
4373
4235
  proxy;
4374
4236
  /** Adapter-owned persistent state directory, when supplied by the runtime. */
4375
4237
  stateDir;
4238
+ locale;
4376
4239
  channelMemory;
4377
4240
  memoryIntentClassifier;
4378
4241
  channelMemoryRecallObserver;
@@ -4386,9 +4249,6 @@ var ChannelBase = class {
4386
4249
  observedContacts;
4387
4250
  namedSessions;
4388
4251
  observedContactEnvelopes = /* @__PURE__ */ new WeakSet();
4389
- messagePrefix;
4390
- messagePrefixCheckedEnvelopes = /* @__PURE__ */ new WeakSet();
4391
- messagePrefixRejectedEnvelopes = /* @__PURE__ */ new WeakSet();
4392
4252
  instructedSessions = /* @__PURE__ */ new Set();
4393
4253
  unattendedMemorySessions = /* @__PURE__ */ new Set();
4394
4254
  channelMemoryReads = /* @__PURE__ */ new Map();
@@ -4524,7 +4384,7 @@ var ChannelBase = class {
4524
4384
  async handleBtw(envelope, sessionId, question, sourceLabel) {
4525
4385
  const target = this.router.getTarget(sessionId);
4526
4386
  if (!target || target.channelName !== this.name) {
4527
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Could not resolve the current task for ${this.prefixedCommand("/btw")}.`, sourceLabel);
4387
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Could not resolve the current task for /btw.`, sourceLabel);
4528
4388
  return;
4529
4389
  }
4530
4390
  const running = this.activeBtw.get(sessionId);
@@ -4706,6 +4566,10 @@ No answer is available from the current conversation context.`;
4706
4566
  if (presentation && await presentation) {
4707
4567
  return;
4708
4568
  }
4569
+ const permissionPresentation = this.tryPresentPermission(pending);
4570
+ if (permissionPresentation && await permissionPresentation) {
4571
+ return;
4572
+ }
4709
4573
  const text = this.formatPermissionRequest(pending);
4710
4574
  if (target.threadId !== void 0 && this.supportsProactiveSend() && this.supportsProactiveTarget(target)) {
4711
4575
  await this.pushProactive(target, text, pending.sourceLabel);
@@ -4786,6 +4650,103 @@ No answer is available from the current conversation context.`;
4786
4650
  }
4787
4651
  })();
4788
4652
  }
4653
+ tryPresentPermission(pending) {
4654
+ const active = this.activePrompts.get(pending.sessionId);
4655
+ const toolCall = pending.request.toolCall;
4656
+ const meta = isRecord2(toolCall["_meta"]) ? toolCall["_meta"] : void 0;
4657
+ const isUserQuestion = meta?.["qwenInteractionKind"] === "user_question" || meta?.["toolName"] === "ask_user_question" || toolCall["kind"] === "ask_user_question";
4658
+ const decisions = this.permissionPresentationDecisions(pending);
4659
+ if (!active || active.loopPrompt || !active.owner || isUserQuestion || !decisions) {
4660
+ return void 0;
4661
+ }
4662
+ const precedingSegment = this.closeOutputSegment(pending.sessionId, active, pending.target);
4663
+ let respondInvoked = false;
4664
+ const context = {
4665
+ requestId: pending.requestId,
4666
+ sessionId: pending.sessionId,
4667
+ runId: active.runId,
4668
+ owner: active.owner,
4669
+ target: pending.target,
4670
+ ...precedingSegment ? { precedingSegmentId: precedingSegment.segmentId } : {},
4671
+ title: this.permissionTitle(pending.request.toolCall),
4672
+ decisions,
4673
+ onSettled: /* @__PURE__ */ __name((listener) => {
4674
+ if (pending.settled) {
4675
+ listener(pending.settled);
4676
+ return () => {
4677
+ };
4678
+ }
4679
+ pending.settlementListeners.add(listener);
4680
+ return () => {
4681
+ pending.settlementListeners.delete(listener);
4682
+ };
4683
+ }, "onSettled"),
4684
+ respond: /* @__PURE__ */ __name((decision) => {
4685
+ const response = this.permissionPresentationResponse(pending, decision);
4686
+ if (!response)
4687
+ return Promise.resolve(false);
4688
+ respondInvoked = true;
4689
+ return this.respondToUserInput(pending, response);
4690
+ }, "respond")
4691
+ };
4692
+ pending.permissionPresented = true;
4693
+ return (async () => {
4694
+ try {
4695
+ if (precedingSegment) {
4696
+ await this.notifyOutputSegmentEnd(pending.target.chatId, pending.sessionId, precedingSegment, "input_requested");
4697
+ }
4698
+ if (this.pendingPermissions.get(pending.requestId) !== pending) {
4699
+ return true;
4700
+ }
4701
+ const result = await this.presentPermissionRequest(context);
4702
+ if (this.pendingPermissions.get(pending.requestId) !== pending) {
4703
+ return true;
4704
+ }
4705
+ if (result.kind === "presented" || result.kind === "handled" && respondInvoked) {
4706
+ return true;
4707
+ }
4708
+ pending.permissionPresented = false;
4709
+ return false;
4710
+ } catch (err) {
4711
+ process.stderr.write(`[${this.name}] permission presentation failed for request ${sanitizeLogText(pending.requestId, 128)}: ${this.lifecycleError(err)}
4712
+ `);
4713
+ if (this.pendingPermissions.get(pending.requestId) !== pending) {
4714
+ return true;
4715
+ }
4716
+ pending.permissionPresented = false;
4717
+ return false;
4718
+ }
4719
+ })();
4720
+ }
4721
+ permissionPresentationDecisions(pending) {
4722
+ const allowOnce = this.approvalOption(pending);
4723
+ if (!allowOnce)
4724
+ return void 0;
4725
+ const copy = PERMISSION_COPY[this.locale];
4726
+ const allowAlways = this.approvalAlwaysOption(pending);
4727
+ return [
4728
+ {
4729
+ kind: "allow_once",
4730
+ label: sanitizeQuotedText(this.permissionOptionLabel(allowOnce, copy.allowOnce), 80)
4731
+ },
4732
+ ...allowAlways ? [
4733
+ {
4734
+ kind: "allow_always",
4735
+ label: sanitizeQuotedText(allowAlways.label, 80)
4736
+ }
4737
+ ] : [],
4738
+ {
4739
+ kind: "deny",
4740
+ label: sanitizeQuotedText(this.permissionOptionLabel(this.denialOption(pending), copy.deny), 80)
4741
+ }
4742
+ ];
4743
+ }
4744
+ permissionPresentationResponse(pending, decision) {
4745
+ if (decision === "deny")
4746
+ return this.denialResponse(pending);
4747
+ const optionId = decision === "allow_once" ? this.approvalOptionId(pending) : this.approvalAlwaysOption(pending)?.optionId;
4748
+ return optionId ? { outcome: { outcome: "selected", optionId } } : void 0;
4749
+ }
4789
4750
  normalizeUserQuestions(pending) {
4790
4751
  const toolCall = pending.request.toolCall;
4791
4752
  const meta = isRecord2(toolCall["_meta"]) ? toolCall["_meta"] : void 0;
@@ -4830,7 +4791,8 @@ No answer is available from the current conversation context.`;
4830
4791
  }
4831
4792
  async respondToUserInput(pending, response) {
4832
4793
  if (pending.responsePromise) {
4833
- return pending.responsePromise;
4794
+ await pending.responsePromise;
4795
+ return false;
4834
4796
  }
4835
4797
  if (this.pendingPermissions.get(pending.requestId) !== pending || !this.bridge.respondToPermission) {
4836
4798
  return false;
@@ -4876,13 +4838,10 @@ No answer is available from the current conversation context.`;
4876
4838
  this.removePendingPermission(event.requestId, this.userInputSettlementReason(pending, event.outcome));
4877
4839
  }
4878
4840
  constructor(name, config, bridge, options) {
4879
- if (config.messagePrefix !== void 0 && typeof config.messagePrefix !== "string") {
4880
- throw new Error(`Channel "${name}" field "messagePrefix" must be a string.`);
4881
- }
4882
4841
  this.name = name;
4883
4842
  this.config = config;
4884
- this.messagePrefix = config.messagePrefix?.trim() || void 0;
4885
4843
  this.bridge = bridge;
4844
+ this.locale = options?.locale ?? "en";
4886
4845
  this.proxy = options?.proxy;
4887
4846
  this.stateDir = options?.stateDir;
4888
4847
  this.identity = Object.freeze(this.resolveIdentity(name, config));
@@ -4945,6 +4904,9 @@ No answer is available from the current conversation context.`;
4945
4904
  async presentUserInputRequest(_context) {
4946
4905
  return { kind: "unsupported" };
4947
4906
  }
4907
+ async presentPermissionRequest(_context) {
4908
+ return { kind: "unsupported" };
4909
+ }
4948
4910
  emitTaskLifecycle(event) {
4949
4911
  try {
4950
4912
  const result = this.onTaskLifecycle(event);
@@ -5837,7 +5799,6 @@ ${promptText}` : promptText;
5837
5799
  return false;
5838
5800
  }
5839
5801
  active.cancelled = true;
5840
- this.stopActiveStreaming(active, sessionId, reason);
5841
5802
  this.dropCollectBuffer(sessionId);
5842
5803
  this.removePendingPermissionsForSession(sessionId, "run_cancelled");
5843
5804
  this.emitTaskCancellation(active, sessionId, reason);
@@ -6144,44 +6105,39 @@ ${promptText}` : promptText;
6144
6105
  return { kind: "found", pending: matching[0] };
6145
6106
  }
6146
6107
  canEnvelopeAnswerPendingPermission(envelope, pending) {
6147
- return pending.target.chatId === envelope.chatId && pending.target.threadId === envelope.threadId && (!pending.userInputPresented || pending.target.senderId === envelope.senderId) && (this.isSharedSessionTarget(pending.target) || pending.target.senderId === envelope.senderId);
6108
+ return pending.target.chatId === envelope.chatId && pending.target.threadId === envelope.threadId && (!pending.userInputPresented && !pending.permissionPresented || pending.target.senderId === envelope.senderId) && (this.isSharedSessionTarget(pending.target) || pending.target.senderId === envelope.senderId);
6148
6109
  }
6149
6110
  formatPermissionRequest(pending) {
6150
6111
  const { toolCall } = pending.request;
6112
+ const copy = PERMISSION_COPY[this.locale];
6151
6113
  const parameters = this.permissionParameterSummary(toolCall);
6152
- const approveLabel = this.permissionOptionLabel(this.approvalOption(pending), "allow once");
6114
+ const approveLabel = this.permissionOptionLabel(this.approvalOption(pending), copy.allowOnce.toLocaleLowerCase(this.locale));
6153
6115
  const alwaysOption = this.approvalAlwaysOption(pending);
6154
- const denyLabel = this.permissionOptionLabel(this.denialOption(pending), "deny");
6116
+ const denyLabel = this.permissionOptionLabel(this.denialOption(pending), copy.deny.toLocaleLowerCase(this.locale));
6155
6117
  const requestSuffix = pending.taskName ? ` ${pending.requestId}` : "";
6156
6118
  const replyPadding = pending.taskName ? { approve: " ", always: " ", deny: " " } : { approve: " ", always: " ", deny: " " };
6157
6119
  const replies = [
6158
- `${this.prefixedCommand(`/approve${requestSuffix}`)}${replyPadding.approve}${approveLabel}`,
6120
+ `/approve${requestSuffix}${replyPadding.approve}${approveLabel}`,
6159
6121
  ...alwaysOption ? [
6160
- `${this.prefixedCommand(`/approve-always${requestSuffix}`)}${replyPadding.always}${alwaysOption.label}`
6122
+ `/approve-always${requestSuffix}${replyPadding.always}${alwaysOption.label}`
6161
6123
  ] : [],
6162
- `${this.prefixedCommand(`/deny${requestSuffix}`)}${replyPadding.deny}${denyLabel}`
6124
+ `/deny${requestSuffix}${replyPadding.deny}${denyLabel}`
6163
6125
  ];
6164
6126
  return [
6165
- "Permission required to run a tool",
6166
- ...pending.taskName ? [`Request: ${pending.requestId}`] : [],
6127
+ copy.required,
6128
+ ...pending.taskName ? [`${copy.request} ${pending.requestId}`] : [],
6167
6129
  "",
6168
- `Tool: ${this.permissionToolName(toolCall)}`,
6169
- `Action: ${this.permissionTitle(toolCall)}`,
6170
- ...parameters ? [`Parameters: ${parameters}`] : [],
6130
+ `${copy.tool} ${this.permissionToolName(toolCall)}`,
6131
+ `${copy.action} ${this.permissionTitle(toolCall)}`,
6132
+ ...parameters ? [`${copy.parameters} ${parameters}`] : [],
6171
6133
  "",
6172
- "Reply with:",
6134
+ copy.replyWith,
6173
6135
  ...replies
6174
6136
  ].join("\n");
6175
6137
  }
6176
- prefixedCommand(command) {
6177
- return this.messagePrefix ? `${this.messagePrefix} ${command}` : command;
6178
- }
6179
- configuredMessagePrefix() {
6180
- return this.messagePrefix;
6181
- }
6182
6138
  permissionTitle(toolCall) {
6183
6139
  const rawTitle = typeof toolCall.title === "string" ? toolCall.title : void 0;
6184
- return sanitizeQuotedText(rawTitle || "", 160).trim() || "Tool use";
6140
+ return sanitizeQuotedText(rawTitle || "", 160).trim() || PERMISSION_COPY[this.locale].toolUse;
6185
6141
  }
6186
6142
  permissionToolName(toolCall) {
6187
6143
  const rawToolCall = toolCall;
@@ -6221,7 +6177,31 @@ ${promptText}` : promptText;
6221
6177
  permissionOptionLabel(option, fallback) {
6222
6178
  const rawLabel = typeof option?.name === "string" ? option.name : "";
6223
6179
  const label = sanitizeQuotedText(rawLabel, 160).trim();
6224
- return label || fallback;
6180
+ if (!label)
6181
+ return fallback;
6182
+ return this.localizedPermissionOptionLabel(option, label) ?? label;
6183
+ }
6184
+ localizedPermissionOptionLabel(option, label) {
6185
+ if (this.locale !== "zh")
6186
+ return void 0;
6187
+ const copy = PERMISSION_COPY[this.locale];
6188
+ if (option?.kind === "allow_always") {
6189
+ if (option.optionId === "proceed_always_project") {
6190
+ return localizedScopedAlwaysLabel(label, "Always Allow in project", copy.allowAlwaysProject);
6191
+ }
6192
+ if (option.optionId === "proceed_always_user") {
6193
+ return localizedScopedAlwaysLabel(label, "Always Allow for user", copy.allowAlwaysUser);
6194
+ }
6195
+ if (option.optionId === "proceed_always" && label === "Allow All Edits") {
6196
+ return copy.allowAlways;
6197
+ }
6198
+ return void 0;
6199
+ }
6200
+ if (label === "Allow" || label === "Allow once")
6201
+ return copy.allowOnce;
6202
+ if (label === "Deny" || label === "Reject")
6203
+ return copy.deny;
6204
+ return void 0;
6225
6205
  }
6226
6206
  approvalOption(pending) {
6227
6207
  const options = pending.request.options;
@@ -6245,13 +6225,14 @@ ${promptText}` : promptText;
6245
6225
  return options.find((option) => option.optionId === `proceed_always_${scope}`);
6246
6226
  }
6247
6227
  approvalAlwaysLabel(option) {
6228
+ const copy = PERMISSION_COPY[this.locale];
6248
6229
  if (option.optionId === "proceed_always_project") {
6249
- return "always allow for this project";
6230
+ return copy.allowAlwaysProject;
6250
6231
  }
6251
6232
  if (option.optionId === "proceed_always_user") {
6252
- return "always allow for this user";
6233
+ return copy.allowAlwaysUser;
6253
6234
  }
6254
- return "always allow";
6235
+ return copy.allowAlways;
6255
6236
  }
6256
6237
  denialResponse(pending) {
6257
6238
  const option = this.denialOption(pending);
@@ -6287,7 +6268,7 @@ ${promptText}` : promptText;
6287
6268
  const task = pending2?.taskName ? `Task ${pending2.taskName} \u2014 ` : "";
6288
6269
  return `- ${task}${sanitizeQuotedText(id, 128)}${title}`;
6289
6270
  }).join("\n");
6290
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Multiple permission requests are pending for this chat. Reply with ${this.prefixedCommand(`/${decision} <request-id>`)}.
6271
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Multiple permission requests are pending for this chat. Reply with /${decision} <request-id>.
6291
6272
  ${requestList}`);
6292
6273
  return true;
6293
6274
  }
@@ -6301,7 +6282,7 @@ ${requestList}`);
6301
6282
  return true;
6302
6283
  }
6303
6284
  if (pending.userInputPresented && decision !== "deny") {
6304
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Submit this question through its interactive card, or use ${this.prefixedCommand("/deny [request-id]")} to cancel it.`, pending.sourceLabel);
6285
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Submit this question through its interactive card, or use /deny [request-id] to cancel it.`, pending.sourceLabel);
6305
6286
  return true;
6306
6287
  }
6307
6288
  const response = (() => {
@@ -6317,7 +6298,7 @@ ${requestList}`);
6317
6298
  }
6318
6299
  let accepted;
6319
6300
  try {
6320
- accepted = pending.userInputPresented ? await this.respondToUserInput(pending, response) : await this.bridge.respondToPermission(pending.requestId, response);
6301
+ accepted = pending.userInputPresented || pending.permissionPresented ? await this.respondToUserInput(pending, response) : await this.bridge.respondToPermission(pending.requestId, response);
6321
6302
  } catch (err) {
6322
6303
  this.removePendingPermission(pending.requestId);
6323
6304
  process.stderr.write(`[${this.name}] permission response failed for request ${sanitizeLogText(pending.requestId, 128)}: ${this.lifecycleError(err)}
@@ -6468,7 +6449,7 @@ ${requestList}`);
6468
6449
  if (safeTaskName !== void 0 && failedTaskName === await this.selectedTaskName(envelope)) {
6469
6450
  return `${subject} ${problem}. Its files were not changed. ${interrupted ? "Clear the task again to finish the reset." : "Clear the task to restart it in the same worktree, or close it."}`;
6470
6451
  }
6471
- const remedy = safeTaskName === void 0 ? "select this task first or close it" : `select this task first or close it with ${this.prefixedCommand(`/session close ${safeTaskName}`)}`;
6452
+ const remedy = safeTaskName === void 0 ? "select this task first or close it" : `select this task first or close it with /session close ${safeTaskName}`;
6472
6453
  return `${subject} ${problem}. Its files were not changed. Clearing now would reset the selected task instead, so ${remedy}.`;
6473
6454
  }
6474
6455
  async selectedTaskName(envelope) {
@@ -6495,7 +6476,7 @@ ${requestList}`);
6495
6476
  return false;
6496
6477
  const normalized = args.trim().toLowerCase();
6497
6478
  if (normalized !== "" && normalized !== "all") {
6498
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: ${this.prefixedCommand("/sessions [all]")}`);
6479
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /sessions [all]`);
6499
6480
  return true;
6500
6481
  }
6501
6482
  try {
@@ -6526,7 +6507,7 @@ ${requestList}`);
6526
6507
  if (parts.length > 0)
6527
6508
  break;
6528
6509
  const current = await namedSessions.current(owner);
6529
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, current ? `Current task: ${current.name} (${current.isolation})` : `No task is currently selected. Use ${this.prefixedCommand("/session new <name>")} or ${this.prefixedCommand("/session use <name>")}.`);
6510
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, current ? `Current task: ${current.name} (${current.isolation})` : `No task is currently selected. Use /session new <name> or /session use <name>.`);
6530
6511
  return true;
6531
6512
  }
6532
6513
  case "new": {
@@ -6585,7 +6566,7 @@ ${requestList}`);
6585
6566
  await this.sendNamedSessionError(envelope, error);
6586
6567
  return true;
6587
6568
  }
6588
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: ${this.prefixedCommand("/session current")} | ${this.prefixedCommand("/session new <name> [--worktree]")} | ${this.prefixedCommand("/session use <name>")} | ${this.prefixedCommand("/session close <name>")} | ${this.prefixedCommand("/session cancel [<name>]")}`);
6569
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /session current | /session new <name> [--worktree] | /session use <name> | /session close <name> | /session cancel [<name>]`);
6589
6570
  return true;
6590
6571
  }
6591
6572
  /** Register shared slash commands. Called from constructor. */
@@ -6678,7 +6659,7 @@ ${requestList}`);
6678
6659
  return true;
6679
6660
  }
6680
6661
  if (this.isSharedSession(envelope) && args.toLowerCase() !== "confirm") {
6681
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `This clears the shared session for everyone who shares it. Re-send with "confirm" (e.g. ${this.prefixedCommand("/clear confirm")}) to proceed.`);
6662
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `This clears the shared session for everyone who shares it. Re-send with "confirm" (e.g. /clear confirm) to proceed.`);
6682
6663
  return true;
6683
6664
  }
6684
6665
  await doClear(envelope);
@@ -6719,19 +6700,19 @@ ${requestList}`);
6719
6700
  this.registerCommand("help", async (envelope) => {
6720
6701
  const lines = [
6721
6702
  "Commands:",
6722
- `${this.prefixedCommand("/help")} \u2014 Show this help`,
6723
- this.isSharedSession(envelope) ? `${this.prefixedCommand("/clear confirm")} \u2014 Clear the shared session (aliases: ${this.prefixedCommand("/reset")}, ${this.prefixedCommand("/new")})` : `${this.prefixedCommand("/clear")} \u2014 Clear your session (aliases: ${this.prefixedCommand("/reset")}, ${this.prefixedCommand("/new")})`,
6724
- `${this.prefixedCommand("/who")} \u2014 Show current session & workspace`,
6725
- `${this.prefixedCommand("/status")} \u2014 Show session info`,
6726
- `${this.prefixedCommand("/approve [request-id]")} \u2014 Approve a pending permission request`,
6727
- `${this.prefixedCommand("/approve-always [request-id]")} \u2014 Always approve a pending permission request`,
6728
- `${this.prefixedCommand("/deny [request-id]")} \u2014 Deny a pending permission request`,
6703
+ `/help \u2014 Show this help`,
6704
+ this.isSharedSession(envelope) ? `/clear confirm \u2014 Clear the shared session (aliases: /reset, /new)` : `/clear \u2014 Clear your session (aliases: /reset, /new)`,
6705
+ `/who \u2014 Show current session & workspace`,
6706
+ `/status \u2014 Show session info`,
6707
+ `/approve [request-id] \u2014 Approve a pending permission request`,
6708
+ `/approve-always [request-id] \u2014 Always approve a pending permission request`,
6709
+ `/deny [request-id] \u2014 Deny a pending permission request`,
6729
6710
  ...this.bridge.btw ? [
6730
- `${this.prefixedCommand("/btw <question>")} \u2014 Ask a side question without interrupting the current task`
6711
+ `/btw <question> \u2014 Ask a side question without interrupting the current task`
6731
6712
  ] : [],
6732
6713
  ...this.namedSessions ? [
6733
- `${this.prefixedCommand("/sessions [all]")} \u2014 List your named tasks`,
6734
- `${this.prefixedCommand("/session current|new|use|close|cancel")} \u2014 Manage your named tasks`
6714
+ `/sessions [all] \u2014 List your named tasks`,
6715
+ `/session current|new|use|close|cancel \u2014 Manage your named tasks`
6735
6716
  ] : []
6736
6717
  ];
6737
6718
  const sharedCmds = /* @__PURE__ */ new Set([
@@ -6754,7 +6735,7 @@ ${requestList}`);
6754
6735
  const platformCmds = [...this.commands.keys()].filter((c) => !sharedCmds.has(c));
6755
6736
  if (platformCmds.length > 0) {
6756
6737
  for (const cmd of platformCmds) {
6757
- lines.push(this.prefixedCommand(`/${cmd}`));
6738
+ lines.push(`/${cmd}`);
6758
6739
  }
6759
6740
  }
6760
6741
  const sessionId = await this.currentSessionId(envelope);
@@ -6765,10 +6746,10 @@ ${requestList}`);
6765
6746
  if (agentCommands.length > 0) {
6766
6747
  lines.push("", "Agent commands (forwarded to Qwen Code):");
6767
6748
  for (const cmd of agentCommands) {
6768
- lines.push(`${this.prefixedCommand(`/${cmd.name}`)} \u2014 ${cmd.description}`);
6749
+ lines.push(`/${cmd.name} \u2014 ${cmd.description}`);
6769
6750
  }
6770
6751
  }
6771
- lines.push("", this.messagePrefix ? `Start each message with ${this.messagePrefix} to chat with the agent.` : "Send any text to chat with the agent.");
6752
+ lines.push("", "Send any text to chat with the agent.");
6772
6753
  await this.sendThreadMessage(envelope.chatId, envelope.threadId, lines.join("\n"));
6773
6754
  return true;
6774
6755
  });
@@ -6813,7 +6794,7 @@ ${requestList}`);
6813
6794
  case "cancel":
6814
6795
  return this.handleLoopCancel(envelope, rest[0]);
6815
6796
  default:
6816
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: ${this.prefixedCommand('/loop add "<cron>" <prompt>')} | ${this.prefixedCommand("/loop list")} | ${this.prefixedCommand("/loop inspect <id>")} | ${this.prefixedCommand("/loop cancel <id>")}`);
6797
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /loop add "<cron>" <prompt> | /loop list | /loop inspect <id> | /loop cancel <id>`);
6817
6798
  return true;
6818
6799
  }
6819
6800
  }
@@ -6830,7 +6811,7 @@ ${requestList}`);
6830
6811
  }
6831
6812
  const parsed = parseLoopAddArgs(args);
6832
6813
  if (!parsed) {
6833
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: ${this.prefixedCommand('/loop add "<cron>" <prompt>')}`);
6814
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /loop add "<cron>" <prompt>`);
6834
6815
  return true;
6835
6816
  }
6836
6817
  try {
@@ -6984,7 +6965,7 @@ ${requestList}`);
6984
6965
  if (!this.loopController)
6985
6966
  return true;
6986
6967
  if (!id) {
6987
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: ${this.prefixedCommand("/loop inspect <id>")}`);
6968
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /loop inspect <id>`);
6988
6969
  return true;
6989
6970
  }
6990
6971
  const jobs = await this.loopController.listForTarget(this.name, this.loopTargetFromEnvelope(envelope));
@@ -7044,7 +7025,7 @@ ${requestList}`);
7044
7025
  if (!this.loopController)
7045
7026
  return true;
7046
7027
  if (!id) {
7047
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: ${this.prefixedCommand("/loop cancel <id>")}`);
7028
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /loop cancel <id>`);
7048
7029
  return true;
7049
7030
  }
7050
7031
  const jobs = await this.loopController.listForTarget(this.name, this.loopTargetFromEnvelope(envelope));
@@ -7629,17 +7610,8 @@ ${sanitizePromptText(entry.text).trim()}` : `No channel memory entry ${intent.id
7629
7610
  const active = this.activePrompts.get(sessionId);
7630
7611
  return active?.senderName || active?.senderId || target.senderId || "agent";
7631
7612
  }
7632
- stopActiveStreaming(active, sessionId, reason) {
7633
- try {
7634
- active.stopStreaming?.();
7635
- } catch (err) {
7636
- process.stderr.write(`[${this.name}] stopStreaming threw during ${reason} for session ${sessionId}: ${err instanceof Error ? err.message : err}
7637
- `);
7638
- }
7639
- }
7640
7613
  /**
7641
- * Cancel the active turn and wait (bounded) for it to wind down. Stops the
7642
- * BlockStreamer so buffered text can't leak via the idle timer, then fires a
7614
+ * Cancel the active turn and wait (bounded) for it to wind down. Fires a
7643
7615
  * best-effort cancelSession (NOT awaited — a wedged child/daemon can leave the
7644
7616
  * request pending forever). Returns true if active.done settled first, false
7645
7617
  * if the CLEAR_CANCEL_TIMEOUT_MS bound won (the turn never wound down). Used by
@@ -7650,7 +7622,6 @@ ${sanitizePromptText(entry.text).trim()}` : `No channel memory entry ${intent.id
7650
7622
  */
7651
7623
  async cancelAndAwaitActive(active, sessionId) {
7652
7624
  active.cancelled = true;
7653
- this.stopActiveStreaming(active, sessionId, "cancel");
7654
7625
  void this.bridge.cancelSession(sessionId).catch((err) => {
7655
7626
  process.stderr.write(`[${this.name}] cancelSession failed for session=${sessionId} (clear/await): ${err instanceof Error ? err.message : err}
7656
7627
  `);
@@ -7853,18 +7824,6 @@ ${CURRENT_MESSAGE_MARKER}
7853
7824
  ${promptText}`;
7854
7825
  }
7855
7826
  preflightInbound(envelope, options = {}) {
7856
- if (this.messagePrefixRejectedEnvelopes.has(envelope))
7857
- return false;
7858
- if (!this.messagePrefixCheckedEnvelopes.has(envelope)) {
7859
- this.messagePrefixCheckedEnvelopes.add(envelope);
7860
- if (!applyMessagePrefix(envelope, this.messagePrefix)) {
7861
- this.messagePrefixRejectedEnvelopes.add(envelope);
7862
- if (!(envelope.isGroup && !envelope.isMentioned && !envelope.isReplyToBot)) {
7863
- this.logPreflightRejected("message_prefix_mismatch");
7864
- }
7865
- return false;
7866
- }
7867
- }
7868
7827
  const groupResult = this.groupGate.check(envelope, {
7869
7828
  createPairingRequest: !options.deferPairingRequests
7870
7829
  });
@@ -7920,9 +7879,6 @@ ${promptText}`;
7920
7879
  process.stderr.write(`[Channel:${this.name}] preflight rejected reason=${sanitizeLogText(reason, 80)}
7921
7880
  `);
7922
7881
  }
7923
- wasMessagePrefixRejected(envelope) {
7924
- return this.messagePrefixRejectedEnvelopes.has(envelope);
7925
- }
7926
7882
  logDebugPayload(platform, payload) {
7927
7883
  if (!isDebugPayloadEnabled(this.name))
7928
7884
  return;
@@ -8146,12 +8102,12 @@ ${text}`;
8146
8102
  }
8147
8103
  if (parsed.command === "btw" && this.bridge.btw) {
8148
8104
  if (!this.isAuthorizedForSharedSession(envelope)) {
8149
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Only authorized members can use ${this.prefixedCommand("/btw")} in this shared session.`);
8105
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Only authorized members can use /btw in this shared session.`);
8150
8106
  return;
8151
8107
  }
8152
8108
  btwQuestion = parsed.args.trim();
8153
8109
  if (!btwQuestion) {
8154
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: ${this.prefixedCommand("/btw <question>")}`);
8110
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /btw <question>`);
8155
8111
  return;
8156
8112
  }
8157
8113
  if (btwQuestion.length > CHANNEL_BTW_MAX_INPUT_LENGTH) {
@@ -8159,7 +8115,7 @@ ${text}`;
8159
8115
  return;
8160
8116
  }
8161
8117
  if (envelope.imageBase64 || envelope.attachments?.length) {
8162
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `${this.prefixedCommand("/btw")} supports text-only questions.`);
8118
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `/btw supports text-only questions.`);
8163
8119
  return;
8164
8120
  }
8165
8121
  }
@@ -8217,7 +8173,7 @@ ${text}`;
8217
8173
  return;
8218
8174
  }
8219
8175
  if (!sessionId) {
8220
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `No task is currently selected. Use ${this.prefixedCommand("/session new <name>")} or ${this.prefixedCommand("/session use <name>")}.`);
8176
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `No task is currently selected. Use /session new <name> or /session use <name>.`);
8221
8177
  return;
8222
8178
  }
8223
8179
  } else {
@@ -8225,7 +8181,7 @@ ${text}`;
8225
8181
  }
8226
8182
  const sourceLabel = this.namedSessions ? this.sourceLabelForTurn(sessionId, envelope) : void 0;
8227
8183
  if (this.namedSessions && !sourceLabel) {
8228
- await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Could not identify the selected task. Use ${this.prefixedCommand("/sessions")}, select it again, and retry.`);
8184
+ await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Could not identify the selected task. Use /sessions, select it again, and retry.`);
8229
8185
  return;
8230
8186
  }
8231
8187
  if (btwQuestion !== void 0) {
@@ -8340,7 +8296,6 @@ ${promptText}`;
8340
8296
  if (firstCancellation) {
8341
8297
  process.stderr.write(`[${this.name}] steer: cancelled active turn for ${envelope.senderId} in session ${sessionId}
8342
8298
  `);
8343
- this.stopActiveStreaming(active, sessionId, "steer");
8344
8299
  void this.bridge.cancelSession(sessionId).catch((err) => {
8345
8300
  process.stderr.write(`[${this.name}] cancelSession failed for session=${sessionId} (steer): ${err instanceof Error ? err.message : err}
8346
8301
  `);
@@ -8375,7 +8330,6 @@ ${promptText}`;
8375
8330
  }
8376
8331
  const prev = this.sessionQueues.get(sessionId) ?? Promise.resolve();
8377
8332
  const generation = namedTurn?.generation ?? this.sessionGenerations.get(sessionId) ?? 0;
8378
- const useBlockStreaming = this.config.blockStreaming === "on";
8379
8333
  if (namedTurn) {
8380
8334
  namedTurn.claimed = true;
8381
8335
  } else {
@@ -8478,18 +8432,9 @@ ${promptToSend}`;
8478
8432
  process.stderr.write(`[${this.name}] onPromptStart threw for session ${sessionId}: ${this.lifecycleError(err)}
8479
8433
  `);
8480
8434
  }
8481
- const streamer = useBlockStreaming ? new BlockStreamer({
8482
- minChars: this.config.blockStreamingChunk?.minChars ?? 400,
8483
- maxChars: this.config.blockStreamingChunk?.maxChars ?? 1e3,
8484
- idleMs: this.config.blockStreamingCoalesce?.idleMs ?? 1500,
8485
- send: /* @__PURE__ */ __name((text) => this.sendResponseMessage(envelope.chatId, text, sessionId, sourceLabel), "send")
8486
- }) : null;
8487
- promptState.stopStreaming = () => streamer?.stop();
8488
8435
  const heldChunks = [];
8489
- let hasStreamedText = false;
8490
8436
  const releaseHeldChunks = /* @__PURE__ */ __name(() => {
8491
8437
  for (const held of heldChunks.splice(0)) {
8492
- hasStreamedText = true;
8493
8438
  const segment = this.ensureOutputSegment(sessionId, promptState);
8494
8439
  this.emitTaskLifecycle({
8495
8440
  ...this.lifecycleBase(envelope.chatId, sessionId, envelope.messageId),
@@ -8497,7 +8442,6 @@ ${promptToSend}`;
8497
8442
  chunk: held
8498
8443
  });
8499
8444
  this.onResponseChunk(envelope.chatId, held, sessionId, segment);
8500
- streamer?.push(held);
8501
8445
  }
8502
8446
  }, "releaseHeldChunks");
8503
8447
  const onChunk = /* @__PURE__ */ __name((sid, chunk) => {
@@ -8514,10 +8458,8 @@ ${promptToSend}`;
8514
8458
  return;
8515
8459
  }
8516
8460
  heldChunks.length = 0;
8517
- hasStreamedText = false;
8518
8461
  const segment = this.closeOutputSegment(sessionId, promptState);
8519
8462
  void this.notifyOutputSegmentEnd(envelope.chatId, sessionId, segment, "response_boundary");
8520
- streamer?.stop();
8521
8463
  }, "onResponseBoundary");
8522
8464
  await this.waitForBridgeRecovery();
8523
8465
  const promptBridge = this.bridge;
@@ -8536,17 +8478,10 @@ ${promptToSend}`;
8536
8478
  }
8537
8479
  if (!promptState.cancelled && response) {
8538
8480
  promptState.deliveryStarted = true;
8539
- if (streamer) {
8540
- if (!hasStreamedText) {
8541
- streamer.push(response);
8542
- }
8543
- await streamer.flush();
8544
- } else {
8545
- const segment = this.ensureOutputSegment(sessionId, promptState);
8546
- await this.onResponseComplete(envelope.chatId, response, sessionId, segment);
8547
- if (segment && promptState.activeSegmentId === segment.segmentId) {
8548
- promptState.activeSegmentId = void 0;
8549
- }
8481
+ const segment = this.ensureOutputSegment(sessionId, promptState);
8482
+ await this.onResponseComplete(envelope.chatId, response, sessionId, segment);
8483
+ if (segment && promptState.activeSegmentId === segment.segmentId) {
8484
+ promptState.activeSegmentId = void 0;
8550
8485
  }
8551
8486
  }
8552
8487
  if (!promptState.deliveryStarted) {
@@ -8591,10 +8526,6 @@ ${promptToSend}`;
8591
8526
  } finally {
8592
8527
  promptBridge.off("textChunk", onChunk);
8593
8528
  promptBridge.off("responseBoundary", onResponseBoundary);
8594
- if (streamer) {
8595
- streamer.stop();
8596
- await streamer.drain();
8597
- }
8598
8529
  const stillCurrent = this.activePrompts.get(sessionId) === promptState;
8599
8530
  if (!promptState.clearEvicted) {
8600
8531
  try {
@@ -9906,8 +9837,6 @@ export {
9906
9837
  sanitizeLogText,
9907
9838
  SessionRouter,
9908
9839
  ChannelLoopScheduler,
9909
- startsWithMessagePrefix,
9910
- stripMessagePrefix,
9911
9840
  ChannelBase,
9912
9841
  PollingChannelBase,
9913
9842
  CHANNEL_PROMPT_META_KEY,