@qwen-code/qwen-code 0.23.2 → 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 (396) 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/model-providers.md +66 -28
  5. package/bundled/qc-helper/docs/configuration/settings.md +5 -3
  6. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  7. package/bundled/qc-helper/docs/features/channels/dingtalk.md +0 -20
  8. package/bundled/qc-helper/docs/features/channels/dws.md +7 -1
  9. package/bundled/qc-helper/docs/features/channels/overview.md +5 -6
  10. package/bundled/qc-helper/docs/features/commands.md +57 -9
  11. package/bundled/qc-helper/docs/features/computer-use.md +1 -1
  12. package/bundled/qc-helper/docs/features/cross-session-protocol.md +320 -0
  13. package/bundled/qc-helper/docs/features/goals.md +3 -3
  14. package/bundled/qc-helper/docs/features/hooks.md +14 -13
  15. package/bundled/qc-helper/docs/qwen-serve.md +23 -6
  16. package/bundled/review/SKILL.md +82 -79
  17. package/bundled/review/references/posting.md +31 -14
  18. package/chunks/{MaxSizedBox-4C3BKKKY.js → MaxSizedBox-UZW24XUX.js} +61 -54
  19. package/chunks/{StandaloneSessionPicker-TXVF65YW.js → StandaloneSessionPicker-IDK7NAZL.js} +83 -76
  20. package/chunks/{acp-startup-profiler-KEU6VAYR.js → acp-startup-profiler-ARO4II44.js} +2 -2
  21. package/chunks/acp-subagent-executor-7TLJGISS.js +919 -0
  22. package/chunks/{acpAgent-H5XBKGB4.js → acpAgent-YRCNNIIU.js} +707 -209
  23. package/chunks/{agent-T5LEFJIU.js → agent-SGU5EE7U.js} +45 -39
  24. package/chunks/{agent-headless-VZKSRH36.js → agent-headless-JVYBLNLT.js} +45 -39
  25. package/chunks/{anthropicContentGenerator-PRJWWVYJ.js → anthropicContentGenerator-SGIR5IKF.js} +68 -36
  26. package/chunks/{artifact-tool-G5LHNECG.js → artifact-tool-PMYZCYNH.js} +2 -2
  27. package/chunks/{askUserQuestion-I5W5S3D6.js → askUserQuestion-4M4YYIB4.js} +2 -2
  28. package/chunks/{bridge-AOX5IY44.js → bridge-YF6NYRPZ.js} +66 -59
  29. package/chunks/{ca-KC2AISNS.js → ca-MX3WCEEG.js} +1 -1
  30. package/chunks/{channel-management-service-MWQGHPAS.js → channel-management-service-E4HTMU7T.js} +9 -9
  31. package/chunks/{channel-settings-store-XZCGDGHW.js → channel-settings-store-FZ5VKHQD.js} +72 -65
  32. package/chunks/{channel-worker-group-SQ5FRWOH.js → channel-worker-group-X6WH4XWF.js} +9 -9
  33. package/chunks/{channel-worker-manager-TU4ZNWOE.js → channel-worker-manager-SICFJDPJ.js} +19 -10
  34. package/chunks/{channel-worker-supervisor-EMITFMCP.js → channel-worker-supervisor-HSFAKML6.js} +6 -6
  35. package/chunks/{chunk-CLKE4IY3.js → chunk-2SZH22YO.js} +1 -1
  36. package/chunks/{chunk-F2NYVASI.js → chunk-34ZYDM3F.js} +14 -12
  37. package/chunks/{chunk-HIXUUCGY.js → chunk-36HCNKDS.js} +1 -1
  38. package/chunks/{chunk-VBLAI2HA.js → chunk-3FPYT6QC.js} +0 -31
  39. package/chunks/{chunk-QB3KS3N3.js → chunk-3I7W2POO.js} +1 -1
  40. package/chunks/{chunk-TOOOLHVS.js → chunk-3VPFA6L2.js} +3 -3
  41. package/chunks/chunk-532WHF4F.js +127 -0
  42. package/chunks/{chunk-J3TJH52D.js → chunk-5FFAUU4T.js} +1 -1
  43. package/chunks/{chunk-OXR34GCD.js → chunk-5FKZ7KFQ.js} +1851 -34
  44. package/chunks/{chunk-QQK4L3UU.js → chunk-5GLDOLNQ.js} +131 -26
  45. package/chunks/{chunk-TODNHE76.js → chunk-5ZJ3KK5J.js} +5 -5
  46. package/chunks/{chunk-ZN5TKAVR.js → chunk-6EDWSKN4.js} +3 -3
  47. package/chunks/{chunk-5OZUKLL7.js → chunk-6EOMQPTS.js} +4 -4
  48. package/chunks/{chunk-JYGIJA4W.js → chunk-6NONRGYX.js} +1 -1
  49. package/chunks/{chunk-TRQNRP2H.js → chunk-6UK77U7D.js} +46 -3
  50. package/chunks/{chunk-4JNHNVAZ.js → chunk-72BGC7RT.js} +4 -4
  51. package/chunks/{chunk-CRZBDVP2.js → chunk-74JEYK2C.js} +10 -10
  52. package/chunks/{chunk-RM244SCQ.js → chunk-7XM6KEVW.js} +1 -1
  53. package/chunks/{chunk-CALNF3Z3.js → chunk-7XVQNDFB.js} +1 -1
  54. package/chunks/{chunk-G37O7YO6.js → chunk-7ZKDPTYO.js} +2 -2
  55. package/chunks/{chunk-WXPPUPHM.js → chunk-7ZVIGDZF.js} +1 -1
  56. package/chunks/{chunk-2WC3Y7YY.js → chunk-AEY27Z35.js} +401 -23
  57. package/chunks/{chunk-LEAOJ43M.js → chunk-ATH66AEU.js} +62 -59
  58. package/chunks/{chunk-7NDZKE2M.js → chunk-AW2SIT3B.js} +3 -3
  59. package/chunks/{chunk-R3JIDRUL.js → chunk-AWMJRE5N.js} +4 -4
  60. package/chunks/chunk-AYEJOTIU.js +43 -0
  61. package/chunks/{chunk-VJJXG73H.js → chunk-B2TGBZXY.js} +16 -1
  62. package/chunks/{chunk-XDNFODER.js → chunk-B6BDT4RX.js} +1 -1
  63. package/chunks/{chunk-3OAXF3UK.js → chunk-BHR6IN2X.js} +3080 -933
  64. package/chunks/{chunk-FGHPZGOP.js → chunk-BI3WSRQE.js} +39 -55
  65. package/chunks/{chunk-QHLHE2OT.js → chunk-BQOP3K76.js} +1 -1
  66. package/chunks/{chunk-4WMGYG3F.js → chunk-BTWGOKHU.js} +2 -2
  67. package/chunks/{process-registry-OAEG6WGC.js → chunk-BYUAT5OC.js} +1 -0
  68. package/chunks/{chunk-WDVV3LRM.js → chunk-C4NLHK7X.js} +34 -129
  69. package/chunks/{chunk-NOO4QFXM.js → chunk-C75BXMPM.js} +1 -3
  70. package/chunks/chunk-CAAMI77K.js +937 -0
  71. package/chunks/chunk-CF5KXZZX.js +150 -0
  72. package/chunks/{chunk-SOA4HKRJ.js → chunk-CGKEUUYG.js} +2 -2
  73. package/chunks/{chunk-TGNNLRC3.js → chunk-CJ3DHN5I.js} +1 -0
  74. package/chunks/{chunk-AUTUFD5X.js → chunk-CSHX5ZC4.js} +1 -1
  75. package/chunks/{chunk-UYDQYDW2.js → chunk-CUK6F5UF.js} +1 -1
  76. package/chunks/{chunk-CALTQWTZ.js → chunk-DLH7YIX6.js} +2 -2
  77. package/chunks/{chunk-CMWU6P4D.js → chunk-DMX7RF6E.js} +1 -1
  78. package/chunks/{chunk-TRWQQBVH.js → chunk-DTNV6UZY.js} +1 -1
  79. package/chunks/{chunk-GSFV5RQW.js → chunk-E4UEO3XM.js} +3 -2
  80. package/chunks/{chunk-KFECPHLV.js → chunk-E5GQNSJY.js} +3 -3
  81. package/chunks/chunk-ELRMZTPF.js +374 -0
  82. package/chunks/chunk-ERU3SDXT.js +27 -0
  83. package/chunks/{chunk-O2FEO2CB.js → chunk-EUURTIV6.js} +18 -2
  84. package/chunks/{chunk-4HOEU2OR.js → chunk-EWJTAP3Y.js} +1 -19
  85. package/chunks/{chunk-GOEVQADN.js → chunk-F2RKL5I2.js} +287 -169
  86. package/chunks/{chunk-ELD3OBPU.js → chunk-F45SKYIQ.js} +3 -3
  87. package/chunks/{chunk-7PD7ZMX5.js → chunk-FCQJLMA2.js} +98 -5
  88. package/chunks/{chunk-G3ZUMSFS.js → chunk-FGRDUDCI.js} +6 -6
  89. package/chunks/{chunk-7SVM3RP2.js → chunk-FGV2QEAO.js} +4 -6
  90. package/chunks/{chunk-4VY3ITHR.js → chunk-FN3JNDRU.js} +3 -3
  91. package/chunks/{chunk-GOKAOSCN.js → chunk-FRVV5SSD.js} +2 -2
  92. package/chunks/{chunk-ULZECEIP.js → chunk-FYZ5NZ3V.js} +2 -20
  93. package/chunks/{chunk-ALMR3E6Q.js → chunk-GDWE23OR.js} +3 -3
  94. package/chunks/{chunk-RNAJVXUG.js → chunk-GP47UR3M.js} +6 -6
  95. package/chunks/{chunk-LNYV4GXX.js → chunk-GSKX53AN.js} +0 -139
  96. package/chunks/{chunk-6G4V7SE4.js → chunk-HG46TTAG.js} +1 -1
  97. package/chunks/{chunk-FETY36NQ.js → chunk-HGEUHUEV.js} +1 -1
  98. package/chunks/{chunk-WDN64MVT.js → chunk-HL2DQG3Y.js} +83 -17
  99. package/chunks/{chunk-E6TI726I.js → chunk-HUXPEUFL.js} +1 -1
  100. package/chunks/{chunk-5DQ4YTIZ.js → chunk-HZTXKVSV.js} +1 -1
  101. package/chunks/{chunk-LYT2OU7D.js → chunk-IAEXTMED.js} +1 -1
  102. package/chunks/{chunk-IRGDIDGJ.js → chunk-IFHJIEMN.js} +26 -19
  103. package/chunks/{chunk-IW6RQPQB.js → chunk-IJOS26LH.js} +1 -3
  104. package/chunks/{chunk-ORFIYTI2.js → chunk-IK2MWJP5.js} +1 -1
  105. package/chunks/{chunk-XSOXPG2L.js → chunk-IOUBOANU.js} +36 -7
  106. package/chunks/{chunk-KA5HR3G2.js → chunk-IUVIBDKU.js} +2 -2
  107. package/chunks/{chunk-U6REWGVR.js → chunk-J2RNOJRV.js} +2 -2
  108. package/chunks/{chunk-PDN7FJZV.js → chunk-J5PYQVD2.js} +2 -2
  109. package/chunks/{chunk-DAI65CMX.js → chunk-JDEW3V5B.js} +1 -1
  110. package/chunks/{chunk-67XTVRVB.js → chunk-JEMDIKGQ.js} +7 -7
  111. package/chunks/chunk-JL6APGBX.js +43 -0
  112. package/chunks/{chunk-PFKGV6PO.js → chunk-JOMCZWX7.js} +9 -15
  113. package/chunks/{chunk-HJ5UJQQL.js → chunk-JV5YASQA.js} +1822 -1335
  114. package/chunks/{chunk-N6S3NUYJ.js → chunk-JXNIF2O5.js} +1 -1
  115. package/chunks/chunk-K2OJUPOE.js +78 -0
  116. package/chunks/{chunk-QFJZAY7W.js → chunk-KFGPNCCY.js} +4 -4
  117. package/chunks/{chunk-NX7ZTXFF.js → chunk-KHIBLKNK.js} +1 -1
  118. package/chunks/{chunk-A7EFXK7P.js → chunk-KVBNJ4K2.js} +5 -5
  119. package/chunks/{chunk-CWVZBIZJ.js → chunk-KZ2CU2LH.js} +1 -1
  120. package/chunks/{chunk-IWABUX6T.js → chunk-L2KF7HUE.js} +6 -6
  121. package/chunks/{chunk-4ALNJDHL.js → chunk-L3DTX6U4.js} +3 -1
  122. package/chunks/{chunk-22GORRNY.js → chunk-LAP7X6EC.js} +1 -1
  123. package/chunks/{chunk-DARWOZY6.js → chunk-LEGNDA46.js} +1 -1
  124. package/chunks/{chunk-WXFCI3O5.js → chunk-LG5Y4OWO.js} +2 -2
  125. package/chunks/{chunk-3LPJ776W.js → chunk-LILGKQ4B.js} +10 -7
  126. package/chunks/{chunk-WK7P62DV.js → chunk-LIR7YS2O.js} +6 -6
  127. package/chunks/{chunk-X7LFJF5D.js → chunk-LK2WUCDQ.js} +36 -84
  128. package/chunks/{chunk-46MMBZHI.js → chunk-LY2GK2PR.js} +4 -4
  129. package/chunks/{chunk-NPKCVSXX.js → chunk-MOS5OAOG.js} +10 -8
  130. package/chunks/chunk-MXOALJIL.js +691 -0
  131. package/chunks/chunk-NUQ4GK5I.js +315 -0
  132. package/chunks/{chunk-J3VZF2AL.js → chunk-NUQVB25K.js} +2 -2
  133. package/chunks/{chunk-GNY7B3CA.js → chunk-NVIBH7WS.js} +1 -1
  134. package/chunks/{chunk-KCF2436G.js → chunk-O3MKRN2I.js} +4 -4
  135. package/chunks/{chunk-MV5DTLJV.js → chunk-ONGZNOIP.js} +1 -1
  136. package/chunks/{chunk-WBU2PIZ5.js → chunk-OOLSYRZ7.js} +16 -16
  137. package/chunks/{chunk-QTB4VP4K.js → chunk-PIGUW2U2.js} +149 -12
  138. package/chunks/{chunk-QAZ2MGYT.js → chunk-PLLIWEM3.js} +2 -2
  139. package/chunks/{chunk-WXD7INFV.js → chunk-PMS4FVLY.js} +8 -8
  140. package/chunks/{chunk-NB3NDQQK.js → chunk-Q2XLNLAV.js} +1 -1
  141. package/chunks/{chunk-4I3WFI3U.js → chunk-Q6HXLBZF.js} +12 -12
  142. package/chunks/{chunk-CCBTNJB4.js → chunk-QPWZX4ZV.js} +27 -27
  143. package/chunks/{chunk-JO77FGNZ.js → chunk-RJZTX2OF.js} +19 -7
  144. package/chunks/{chunk-PQEISIKS.js → chunk-SAH4BD2J.js} +0 -67
  145. package/chunks/{chunk-IR6JKBAP.js → chunk-SAWPURIU.js} +2 -2
  146. package/chunks/{chunk-LWX4WDFF.js → chunk-SNZWDV67.js} +43 -15
  147. package/chunks/{chunk-YLOHCA6I.js → chunk-SXEE6PND.js} +2 -2
  148. package/chunks/{chunk-G5VOXCRX.js → chunk-T4JVQR7Z.js} +2 -2
  149. package/chunks/{chunk-6RZX2HIH.js → chunk-TBEXLLAO.js} +2 -2
  150. package/chunks/{chunk-YQGW3M6Z.js → chunk-TP2DUOB6.js} +8 -8
  151. package/chunks/{chunk-MWIO7MF6.js → chunk-TP6FYVQT.js} +2 -0
  152. package/chunks/{chunk-HRPFBHW7.js → chunk-TPKQIA7G.js} +1 -0
  153. package/chunks/{chunk-B25JYXZE.js → chunk-TWC3FHUI.js} +4 -4
  154. package/chunks/{chunk-H3Q3RSKZ.js → chunk-U7O65WKL.js} +1 -1
  155. package/chunks/{chunk-LUNC5KCL.js → chunk-UBEYS536.js} +7 -7
  156. package/chunks/{chunk-R457KFV7.js → chunk-UGS62IR2.js} +3 -3
  157. package/chunks/{chunk-S5QR6CB5.js → chunk-UKMWZ5NS.js} +108 -887
  158. package/chunks/{chunk-7LTCFO6T.js → chunk-VHKOULAI.js} +6 -5
  159. package/chunks/{chunk-FAJPLSYF.js → chunk-VID4BW52.js} +90 -86
  160. package/chunks/{chunk-2BMXHB6N.js → chunk-VLZOU6UH.js} +7 -7
  161. package/chunks/{chunk-ZP5XDLSA.js → chunk-VTBPMLRO.js} +12 -12
  162. package/chunks/{chunk-QTNCGZHQ.js → chunk-VX63RJXE.js} +9 -0
  163. package/chunks/{chunk-7VEYUF3N.js → chunk-W5ZQMAEM.js} +1 -1
  164. package/chunks/{chunk-XQ4RDO5B.js → chunk-WBCPROWX.js} +1 -1
  165. package/chunks/{chunk-AO2VMS72.js → chunk-WS7MOFK6.js} +3 -3
  166. package/chunks/{chunk-FV4DM2M4.js → chunk-WXFK4MH7.js} +32 -12
  167. package/chunks/{chunk-APXIW2TF.js → chunk-WY4N6KS7.js} +4 -4
  168. package/chunks/{chunk-KEPC5BOL.js → chunk-XDQUDARC.js} +10 -13
  169. package/chunks/{chunk-2EKVPSIJ.js → chunk-Y2MYW47X.js} +1 -1
  170. package/chunks/{chunk-5BH2AIEY.js → chunk-YIU5PEAT.js} +2 -2
  171. package/chunks/{chunk-PSPAM24S.js → chunk-YKK2XXHF.js} +4 -0
  172. package/chunks/{chunk-HZ2HUXX7.js → chunk-YS2ZJSOA.js} +29 -12
  173. package/chunks/{chunk-OFVAS4AR.js → chunk-ZGQIIGNQ.js} +2 -2
  174. package/chunks/{chunk-HNLMYDQE.js → chunk-ZHECLGA6.js} +2 -4
  175. package/chunks/{chunk-XBVNNDPK.js → chunk-ZHKTKHMO.js} +8 -1
  176. package/chunks/{chunk-OWCFKIFQ.js → chunk-ZKYR7QS4.js} +1 -1
  177. package/chunks/{chunk-YZTGGCEE.js → chunk-ZKZHSB5W.js} +1 -1
  178. package/chunks/{chunk-ERXNTINK.js → chunk-ZT6EPPBY.js} +1 -1
  179. package/chunks/{chunk-565U2ANU.js → chunk-ZTTC7T4X.js} +1 -1
  180. package/chunks/{chunk-BK7D2JR6.js → chunk-ZUQVZTWG.js} +3 -3
  181. package/chunks/{chunk-7OCIQNKX.js → chunk-ZW2EUO2A.js} +1 -1
  182. package/chunks/{config-utils-GPLIABL2.js → config-utils-S5LFS4RN.js} +65 -58
  183. package/chunks/{contextCommand-NCUQUDBY.js → contextCommand-XXKZMMSQ.js} +62 -55
  184. package/chunks/{core-runtime-WKYKWVYU.js → core-runtime-YGUA42AZ.js} +64 -57
  185. package/chunks/{create-sub-session-PPLXB3JJ.js → create-sub-session-SEK6KCYR.js} +62 -55
  186. package/chunks/{create-sub-session-TGIX63YU.js → create-sub-session-TIGCFGCS.js} +2 -2
  187. package/chunks/{cron-create-GTPVMJCF.js → cron-create-AKWX67FO.js} +1 -1
  188. package/chunks/{cron-delete-ZBK27Z4K.js → cron-delete-XPB6IYZJ.js} +1 -1
  189. package/chunks/{cron-list-KTFKFDKC.js → cron-list-XBKO4WU5.js} +1 -1
  190. package/chunks/{daemon-2CKIAO3I.js → daemon-G5TYKZD6.js} +2 -2
  191. package/chunks/{daemon-git-worktree-guard-73ZWOLKL.js → daemon-git-worktree-guard-3AWINPPX.js} +63 -56
  192. package/chunks/{daemon-status-provider-OK7VONJG.js → daemon-status-provider-RTKHKUFJ.js} +71 -64
  193. package/chunks/{daemon-trust-policy-CAUCREG2.js → daemon-trust-policy-6YQOC7B6.js} +67 -60
  194. package/chunks/{daemon-trust-policy-monitor-3Y36OOEQ.js → daemon-trust-policy-monitor-EN5L23GS.js} +67 -60
  195. package/chunks/{de-UU2YTO37.js → de-OOLZAU2U.js} +1 -1
  196. package/chunks/{deferred-core-runtime-Q7WFWYD3.js → deferred-core-runtime-JPLQRVZO.js} +60 -53
  197. package/chunks/{display-image-CTNHJRZC.js → display-image-NAH3AZ63.js} +3 -3
  198. package/chunks/{dist-6YDUH3BB.js → dist-3BJVSJ7D.js} +10 -631
  199. package/chunks/{dist-F6JLAJLE.js → dist-65Q3TRLH.js} +16 -36
  200. package/chunks/{dist-Y5KC3IHW.js → dist-HX2LG76F.js} +233 -34
  201. package/chunks/{dist-BNQVF565.js → dist-J7PDFK53.js} +12 -31
  202. package/chunks/{dist-NP7QKLVG.js → dist-JCXKXRH6.js} +3 -6
  203. package/chunks/{dist-UFTFGI6I.js → dist-LHGMHIDK.js} +2 -6
  204. package/chunks/{dist-XLV33CLY.js → dist-QPTIRE3U.js} +4 -12
  205. package/chunks/{dist-ZDNJK74R.js → dist-SBK33YLC.js} +3 -34
  206. package/chunks/{dist-F34J4FZX.js → dist-WMFHZG3R.js} +2 -5
  207. package/chunks/{edit-YJD6IETK.js → edit-QXJZIWRQ.js} +48 -42
  208. package/chunks/{en-YJNRUQG4.js → en-7BZ2OZKH.js} +2 -1
  209. package/chunks/{enter-worktree-YFTKHXHZ.js → enter-worktree-54L5QJ3N.js} +4 -4
  210. package/chunks/{enterPlanMode-EFPVTWIH.js → enterPlanMode-2ITCVQ5N.js} +45 -39
  211. package/chunks/{environment-HP3AXFTB.js → environment-URPO5ORZ.js} +63 -56
  212. package/chunks/{errors-22ON46G7.js → errors-TDUYLEKI.js} +62 -55
  213. package/chunks/{exit-worktree-NF2XEMES.js → exit-worktree-EORJDKDS.js} +4 -4
  214. package/chunks/{exitPlanMode-MOQUNCBH.js → exitPlanMode-RA7KMUEW.js} +45 -39
  215. package/chunks/{fast-path-2X7BPMXX.js → fast-path-Q2JYP64P.js} +6 -6
  216. package/chunks/{fast-path-settings-SATXY3PD.js → fast-path-settings-GTHZLVSS.js} +2 -2
  217. package/chunks/{fr-HKNWVXRJ.js → fr-JJWM2HUS.js} +1 -1
  218. package/chunks/{glob-Y7ACIB3P.js → glob-VHSV4BKE.js} +48 -42
  219. package/chunks/{goal-tools-DABMICUC.js → goal-tools-5FIE56CK.js} +51 -41
  220. package/chunks/{grep-BLHF2S5D.js → grep-3PKFKLCA.js} +2 -2
  221. package/chunks/{handleAutoUpdate-MCAMHYDI.js → handleAutoUpdate-7FZFLKNZ.js} +63 -56
  222. package/chunks/{i18n-C3GDCALP.js → i18n-NTFQDWKR.js} +61 -54
  223. package/chunks/{image-gen-XP4NNIYG.js → image-gen-TF3IQWSH.js} +7 -6
  224. package/chunks/{initializer-4URDQL2G.js → initializer-LB3T635H.js} +67 -60
  225. package/chunks/{installationInfo-LBOL6SBV.js → installationInfo-KRO433ZG.js} +60 -53
  226. package/chunks/{ja-GJS5RZGU.js → ja-L67TXFDJ.js} +1 -1
  227. package/chunks/{list-JOGBAC2R.js → list-NEP3WPZ7.js} +70 -63
  228. package/chunks/{list-agents-2CXPGJUE.js → list-agents-QLDXS5OD.js} +17 -7
  229. package/chunks/{llm-2KPNSAVY.js → llm-AZEJEIAD.js} +130 -123
  230. package/chunks/{llm-content-generator-GR3FOHLB.js → llm-content-generator-KWXFHBR3.js} +6 -5
  231. package/chunks/{loadedSettingsAdapter-DVKROEJD.js → loadedSettingsAdapter-NZORJLSD.js} +67 -60
  232. package/chunks/{loggingContentGenerator-P4K6K5W4.js → loggingContentGenerator-NGHVU6AK.js} +67 -60
  233. package/chunks/{loop-wakeup-HL6XOWI4.js → loop-wakeup-HHMYIC7Z.js} +2 -2
  234. package/chunks/{ls-YV7RKLKY.js → ls-N7ABR6HI.js} +4 -4
  235. package/chunks/{lsp-NO3AMRZT.js → lsp-LTOFWG5P.js} +1 -1
  236. package/chunks/{managed-npm-update-VWBKHNIN.js → managed-npm-update-3LHNBEAG.js} +60 -53
  237. package/chunks/{mcp-6YYNSYLK.js → mcp-4SWJKDX7.js} +67 -60
  238. package/chunks/{monitor-A255TNZR.js → monitor-V5EFBZC7.js} +47 -41
  239. package/chunks/{nonInteractiveCli-LXGIKQAT.js → nonInteractiveCli-5UFUBUAT.js} +114 -107
  240. package/chunks/{notebook-edit-5UYHS2DM.js → notebook-edit-ATV46KWD.js} +46 -40
  241. package/chunks/openai-WX26N5OJ.js +47 -0
  242. package/chunks/{openaiContentGenerator-A6MAMEO5.js → openaiContentGenerator-BKTO5QJK.js} +31 -25
  243. package/chunks/openaiResponsesContentGenerator-RTCAJ5V5.js +1658 -0
  244. package/chunks/{pidfile-B7DZC4TP.js → pidfile-JAIOWPI3.js} +60 -53
  245. package/chunks/process-registry-X6ZCASEN.js +10 -0
  246. package/chunks/{processUtils-BPZ2MCZS.js → processUtils-TCQH3LVD.js} +2 -2
  247. package/chunks/{prompt-terminal-ledger-FYYTAOXS.js → prompt-terminal-ledger-BYXHEUHX.js} +61 -54
  248. package/chunks/{pt-FXMYXEUV.js → pt-77SBDL4B.js} +1 -1
  249. package/chunks/{qwenContentGenerator-4IOJFD4S.js → qwenContentGenerator-K5TJK75P.js} +58 -50
  250. package/chunks/{qwenOAuth2-KX6LVYQ3.js → qwenOAuth2-NOXRK323.js} +6 -5
  251. package/chunks/{read-file-A4H4O3VQ.js → read-file-DL7GNZD5.js} +11 -9
  252. package/chunks/{read-mcp-resource-D3N75DGF.js → read-mcp-resource-B37WANAQ.js} +1 -1
  253. package/chunks/{record-artifact-Q5CRGJTP.js → record-artifact-OAXWXZ5D.js} +2 -2
  254. package/chunks/record-source-D7R7X3GT.js +22 -0
  255. package/chunks/{report-findings-TJ34R7QK.js → report-findings-AR3VC6EQ.js} +3 -3
  256. package/chunks/{request-shutdown-LRKMTBAD.js → request-shutdown-IKNWTX5M.js} +5 -5
  257. package/chunks/{resumeHistoryUtils-YQQ43E4N.js → resumeHistoryUtils-OYKXZ4YO.js} +66 -59
  258. package/chunks/{ripGrep-W32NWFTA.js → ripGrep-EOUMIU4K.js} +15 -13
  259. package/chunks/{ru-RMHURE5U.js → ru-UYWHKWF2.js} +1 -1
  260. package/chunks/{run-qwen-serve-WBSWWIRV.js → run-qwen-serve-PPTGWC5B.js} +305 -138
  261. package/chunks/{runtime-VRVBX2E5.js → runtime-5RO22P2N.js} +73 -66
  262. package/chunks/{scheduled-tasks-D65KJDA3.js → scheduled-tasks-YGERFWLZ.js} +68 -61
  263. package/chunks/{scheduler-M2YPN7Z7.js → scheduler-S6WU6M3C.js} +62 -55
  264. package/chunks/{sdk-exporters-grpc-MXTVSE3C.js → sdk-exporters-grpc-Y2ZUQDUQ.js} +2 -2
  265. package/chunks/{sdk-exporters-http-7R2ARBPV.js → sdk-exporters-http-VWTF4W6K.js} +3 -3
  266. package/chunks/{sdk-impl-YOLO7LV4.js → sdk-impl-G6FVTBQZ.js} +9 -9
  267. package/chunks/{send-message-76BKWKFZ.js → send-message-TWOGWCBG.js} +12 -9
  268. package/chunks/{serve-BE3H2P6P.js → serve-HT4WOCWS.js} +68 -61
  269. package/chunks/{server-FLY5JERG.js → server-SWXVPRCS.js} +2947 -523
  270. package/chunks/{session-JVN62R5K.js → session-6DSFUOMO.js} +122 -115
  271. package/chunks/{session-attachments-root-7ACGLHXA.js → session-attachments-root-SOZCTQWW.js} +60 -53
  272. package/chunks/{session-pr-refresh-TQS57SDK.js → session-pr-refresh-F7XUBQBH.js} +68 -61
  273. package/chunks/{settings-D44YMZFT.js → settings-SWQH36PO.js} +72 -65
  274. package/chunks/{shell-3VE6I4V5.js → shell-XUQL6EYV.js} +45 -39
  275. package/chunks/{skill-FHEGRRZU.js → skill-HNRDD54C.js} +33 -23
  276. package/chunks/{skill-settings-VHEJMBFL.js → skill-settings-JU72PCII.js} +66 -59
  277. package/chunks/{spawnChannel-T6MX2ZDN.js → spawnChannel-7ZVM3GBU.js} +63 -56
  278. package/chunks/{standalone-update-QUGHFMCS.js → standalone-update-64JQY2LX.js} +62 -55
  279. package/chunks/{start-opentui-ui-IHIIZ2LE.js → start-opentui-ui-RSLBXESU.js} +183 -161
  280. package/chunks/{startInteractiveUI-LR7K2ARZ.js → startInteractiveUI-ZDPHD7XE.js} +553 -1123
  281. package/chunks/{syntheticOutput-D2P5V6RG.js → syntheticOutput-F6F27JMK.js} +2 -2
  282. package/chunks/{task-create-MWXJFRRM.js → task-create-Y623TBHB.js} +8 -8
  283. package/chunks/{task-list-EYO3FE57.js → task-list-FCPEEGWL.js} +1 -1
  284. package/chunks/{task-stop-BFSKRTGV.js → task-stop-QTKZXLPH.js} +1 -1
  285. package/chunks/{task-update-2JJJRHMT.js → task-update-YLSXF25N.js} +8 -8
  286. package/chunks/{team-create-GY3VFY47.js → team-create-U52VYSNO.js} +47 -41
  287. package/chunks/{team-delete-IQZ6XGFI.js → team-delete-S7TLHZCF.js} +1 -1
  288. package/chunks/{team-plan-approval-BQPGZOT5.js → team-plan-approval-IQ4ADQIK.js} +45 -39
  289. package/chunks/{terminal-image-renderer-YNYW5CQG.js → terminal-image-renderer-ZEMF7LB2.js} +62 -55
  290. package/chunks/{theme-manager-U6CIK3GM.js → theme-manager-DK2S2SOX.js} +60 -53
  291. package/chunks/{todoWrite-5ERKFWAK.js → todoWrite-5QI2H2FW.js} +4 -4
  292. package/chunks/{tool-search-XI3QWD5I.js → tool-search-6U4OQG7K.js} +21 -15
  293. package/chunks/{total-session-admission-3SNSJJ32.js → total-session-admission-BOARHBZU.js} +66 -59
  294. package/chunks/{trustedFolders-OVAQKNV5.js → trustedFolders-GKQZXZSV.js} +61 -54
  295. package/chunks/{update-relaunch-XV5O74E3.js → update-relaunch-GLACF7PX.js} +5 -5
  296. package/chunks/{updateCheck-CHUYWD6L.js → updateCheck-NLBSZB4Q.js} +62 -55
  297. package/chunks/{useAutoAcceptIndicator-VKSVIXZC.js → useAutoAcceptIndicator-3X3BYU7H.js} +70 -63
  298. package/chunks/{validateNonInterActiveAuth-ZNUTD3E5.js → validateNonInterActiveAuth-NE3JLOIR.js} +111 -104
  299. package/chunks/{version-EK7VAGSI.js → version-6H5YAT4N.js} +1 -1
  300. package/chunks/{web-fetch-24KZO763.js → web-fetch-RWSO7TTN.js} +15 -13
  301. package/chunks/{web-search-CRNXKZ2X.js → web-search-DADI3LV5.js} +388 -327
  302. package/chunks/{web-shell-static-BFDESDD4.js → web-shell-static-CCN4JZEE.js} +1 -1
  303. package/chunks/workflow-LPGCZCIT.js +1224 -0
  304. package/chunks/{workspace-providers-status-MAM42IZS.js → workspace-providers-status-QBRBEFTO.js} +71 -64
  305. package/chunks/{workspace-registration-store-HKLJEDQX.js → workspace-registration-store-WUKTMJPW.js} +3 -1
  306. package/chunks/{workspace-registry-7RDDOBLN.js → workspace-registry-CJV7KVGF.js} +66 -59
  307. package/chunks/{workspace-runtime-coordinator-LEPDPXJO.js → workspace-runtime-coordinator-7LYMFMFF.js} +69 -60
  308. package/chunks/{workspace-service-5IFDCNN3.js → workspace-service-HWXZSA4J.js} +73 -66
  309. package/chunks/{workspace-skills-status-FJ3HNH4H.js → workspace-skills-status-D6QXUWCC.js} +68 -61
  310. package/chunks/{workspace-trust-reconciler-PQFHIWLR.js → workspace-trust-reconciler-VZX7G7CZ.js} +73 -66
  311. package/chunks/{write-file-ERG67ZFX.js → write-file-KKHV26YV.js} +47 -41
  312. package/chunks/{zh-VBFCRQBL.js → zh-J2GLI64H.js} +2 -1
  313. package/chunks/{zh-TW-N2TBF2F2.js → zh-TW-TBAICUJQ.js} +2 -1
  314. package/chunks/{zoom-image-WQYEC3SR.js → zoom-image-OG7X7KAA.js} +12 -10
  315. package/cli.js +14 -14
  316. package/export-transcript-document.css +1 -0
  317. package/export-transcript-document.js +164 -165
  318. package/locales/ca.js +2 -2
  319. package/locales/de.js +2 -2
  320. package/locales/en.js +3 -2
  321. package/locales/fr.js +2 -2
  322. package/locales/ja.js +2 -2
  323. package/locales/pt.js +2 -2
  324. package/locales/ru.js +2 -2
  325. package/locales/zh-TW.js +3 -2
  326. package/locales/zh.js +3 -2
  327. package/package.json +5 -4
  328. package/web-shell/assets/{abnfDiagram-VCTEODGH-BRLgQbnT.js → abnfDiagram-VCTEODGH-NT0lTLRG.js} +1 -1
  329. package/web-shell/assets/{arc-qAF9_XsR.js → arc-DDqnIMMx.js} +1 -1
  330. package/web-shell/assets/{architectureDiagram-5GKGNRK7-BorUttEz.js → architectureDiagram-5GKGNRK7-DfYghE3W.js} +1 -1
  331. package/web-shell/assets/{blockDiagram-NRAW4CY4-Bj0qZVxu.js → blockDiagram-NRAW4CY4-DlqJIx5c.js} +1 -1
  332. package/web-shell/assets/{c4Diagram-UCG6FXSJ-BTqJis32.js → c4Diagram-UCG6FXSJ-CinqLGU4.js} +1 -1
  333. package/web-shell/assets/channel-BHGoSkEv.js +1 -0
  334. package/web-shell/assets/{chunk-2Q5K7J3B-RrQ5X8m-.js → chunk-2Q5K7J3B-CsjJX5M7.js} +1 -1
  335. package/web-shell/assets/{chunk-5VM5RSS4-uUjDl8wO.js → chunk-5VM5RSS4-CaVb2tdH.js} +1 -1
  336. package/web-shell/assets/{chunk-F27PBJKO-C3JhpyzI.js → chunk-F27PBJKO-CRyErlzW.js} +1 -1
  337. package/web-shell/assets/{chunk-G27WJ6UU-C8ZNFs7F.js → chunk-G27WJ6UU-7I79DZCf.js} +1 -1
  338. package/web-shell/assets/{chunk-JWPE2WC7-DNpXtEOs.js → chunk-JWPE2WC7-Dz4cac5F.js} +1 -1
  339. package/web-shell/assets/{chunk-LCL6LL3I-DagA2ZLw.js → chunk-LCL6LL3I-Ls24Derb.js} +1 -1
  340. package/web-shell/assets/{chunk-POPQ4Y6H-R23uH7Xm.js → chunk-POPQ4Y6H-JzYe4qx7.js} +1 -1
  341. package/web-shell/assets/{chunk-SVP7TREG-Qz9RN_BR.js → chunk-SVP7TREG-BxDwesA-.js} +1 -1
  342. package/web-shell/assets/{chunk-XXDRQBXY-jYb1_hni.js → chunk-XXDRQBXY-CW4hjgWc.js} +1 -1
  343. package/web-shell/assets/classDiagram-DTDB5LWJ-E47Xnn15.js +1 -0
  344. package/web-shell/assets/classDiagram-v2-JRS7N3AN-E47Xnn15.js +1 -0
  345. package/web-shell/assets/{cose-bilkent-JH36ORCC-Cv2OunpE.js → cose-bilkent-JH36ORCC-DxikE9iF.js} +1 -1
  346. package/web-shell/assets/{cynefin-OW5HDTMX-LH42KFJx.js → cynefin-OW5HDTMX-CvVsIkVN.js} +1 -1
  347. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-Dha4_OoR.js → cynefinDiagram-5FMLGOSQ-CDHkk3wq.js} +1 -1
  348. package/web-shell/assets/{dagre-3AP2YEHR-Br5lnUKD.js → dagre-3AP2YEHR-BgLdkVLT.js} +1 -1
  349. package/web-shell/assets/{diagram-S7CK7UJ4-dpKq2bBX.js → diagram-S7CK7UJ4-DP43cGhe.js} +1 -1
  350. package/web-shell/assets/{diagram-UQ7AKVKN-BAgHWpXr.js → diagram-UQ7AKVKN-BWrZYhoT.js} +1 -1
  351. package/web-shell/assets/{diagram-VSXAHHWV-GRRzpyE2.js → diagram-VSXAHHWV-B80wjH_n.js} +1 -1
  352. package/web-shell/assets/{diagram-VX7I27RA-BNFiaYpG.js → diagram-VX7I27RA-DPpKmDsY.js} +1 -1
  353. package/web-shell/assets/{diagram-Z3DM3KII-BisZzB_h.js → diagram-Z3DM3KII-kaEBNbNU.js} +1 -1
  354. package/web-shell/assets/{ebnfDiagram-PWID7BFC-B1xbwycf.js → ebnfDiagram-PWID7BFC-1-qbEZvk.js} +1 -1
  355. package/web-shell/assets/{erDiagram-SSCWMZ5O-CQMzbGE5.js → erDiagram-SSCWMZ5O-CrK2gMkV.js} +1 -1
  356. package/web-shell/assets/{flowDiagram-A5DVABFB-CZ_Zondl.js → flowDiagram-A5DVABFB-Dic2xofW.js} +1 -1
  357. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BTh2ShxS.js → ganttDiagram-EL5Y4UJY-DJko8vT7.js} +1 -1
  358. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-oHOB-Uxt.js → gitGraphDiagram-WWUBYQGX-DxsQ-bHT.js} +1 -1
  359. package/web-shell/assets/index-DY8CxdBr.js +2173 -0
  360. package/web-shell/assets/index-eBxK3rs2.css +36 -0
  361. package/web-shell/assets/{index-DWoFMu5x.js → index-t7VBrUeD.js} +1 -1
  362. package/web-shell/assets/{infoDiagram-RXCK75RN-C0QpudbG.js → infoDiagram-RXCK75RN-DcRUJbNi.js} +1 -1
  363. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-a6B741uT.js → ishikawaDiagram-5VMMS53U-CUPw-2_e.js} +1 -1
  364. package/web-shell/assets/{journeyDiagram-EYS64GPL-Dbht9ICp.js → journeyDiagram-EYS64GPL-yOHhZxkW.js} +1 -1
  365. package/web-shell/assets/{kanban-definition-3QL26DDD-D4OFR8-h.js → kanban-definition-3QL26DDD-CFUGBbqz.js} +1 -1
  366. package/web-shell/assets/{layout-Dvdh5jRH.js → layout-BoilNfBU.js} +1 -1
  367. package/web-shell/assets/{linear-Dvc6KIW2.js → linear-DOuHaPrl.js} +1 -1
  368. package/web-shell/assets/{mermaid.core-CB36RfIb.js → mermaid.core-1G1fXWda.js} +6 -6
  369. package/web-shell/assets/{mindmap-definition-FBJOCRG2-Fmqo1CjP.js → mindmap-definition-FBJOCRG2-B8BhkrOX.js} +1 -1
  370. package/web-shell/assets/{pegDiagram-XKGWAZYB-CCxYBoA4.js → pegDiagram-XKGWAZYB-CipC5K1D.js} +1 -1
  371. package/web-shell/assets/{pieDiagram-E7YTZNPT-BVHKQFzt.js → pieDiagram-E7YTZNPT-CHBDFDUJ.js} +1 -1
  372. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-l95IznwR.js → quadrantDiagram-AXDQQJYC-_iiBkoZO.js} +1 -1
  373. package/web-shell/assets/{railroadDiagram-O6MQD6OU-BlLdRdXp.js → railroadDiagram-O6MQD6OU-Cx1peHDi.js} +1 -1
  374. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BkDLBR5w.js → requirementDiagram-EFPCY7ZU-CBRiPbdQ.js} +1 -1
  375. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-jAIqRp65.js → sankeyDiagram-P5KCCOFB-TT6GcHaZ.js} +1 -1
  376. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-f-soZYPr.js → sequenceDiagram-WJ2MYXX4-CWP42PNb.js} +1 -1
  377. package/web-shell/assets/{sizeCapture-X5ZJPWSS-BzOuAfB2.js → sizeCapture-X5ZJPWSS-Bp94roEG.js} +1 -1
  378. package/web-shell/assets/{stateDiagram-HBIQ2CUA-BPLSs12r.js → stateDiagram-HBIQ2CUA-0ftrzTAy.js} +1 -1
  379. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-PgAST0dK.js +1 -0
  380. package/web-shell/assets/{swimlanes-XN3QIQJK-D-9E_RIR.js → swimlanes-XN3QIQJK-D-FsenYJ.js} +1 -1
  381. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-BcWcB5bj.js +8 -0
  382. package/web-shell/assets/{timeline-definition-24CTP7MA-CT56K-gV.js → timeline-definition-24CTP7MA-Ctvrj28y.js} +1 -1
  383. package/web-shell/assets/{vennDiagram-4TSXK5OY-B-vi4IyO.js → vennDiagram-4TSXK5OY-5DZncjOt.js} +1 -1
  384. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-C9O7Ju98.js → wardleyDiagram-VM6X3IG4-jZjYwPY7.js} +1 -1
  385. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-6d8w3jg2.js → xychartDiagram-S5SC5T6Z-Ci6Q2C2_.js} +1 -1
  386. package/web-shell/index.html +29 -5
  387. package/chunks/chunk-V7RNNPGC.js +0 -44
  388. package/chunks/workflow-HD5NYMW5.js +0 -2907
  389. package/web-shell/assets/channel-COIuCrVH.js +0 -1
  390. package/web-shell/assets/classDiagram-DTDB5LWJ-DoX6OYqu.js +0 -1
  391. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DoX6OYqu.js +0 -1
  392. package/web-shell/assets/index-CI1ysIEv.js +0 -2154
  393. package/web-shell/assets/index-CpxXGH-8.css +0 -36
  394. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-IRul-LaT.js +0 -1
  395. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6lgKepA.js +0 -8
  396. /package/chunks/{chunk-JA5CBKRP.js → chunk-7NXSVSFB.js} +0 -0
@@ -2,15 +2,14 @@
2
2
  "use strict";
3
3
  import {
4
4
  ChannelBase,
5
- isTerminalTaskLifecycleType,
6
- startsWithMessagePrefix
7
- } from "./chunk-WDVV3LRM.js";
8
- import "./chunk-IW6RQPQB.js";
5
+ isTerminalTaskLifecycleType
6
+ } from "./chunk-C4NLHK7X.js";
7
+ import "./chunk-IJOS26LH.js";
8
+ import "./chunk-CQ35AJ4Z.js";
9
9
  import {
10
10
  require_abort_controller,
11
11
  require_lib
12
12
  } from "./chunk-DI35ZN7T.js";
13
- import "./chunk-CQ35AJ4Z.js";
14
13
  import "./chunk-5WV5S2GT.js";
15
14
  import "./chunk-XWRJCPHC.js";
16
15
  import {
@@ -9725,14 +9724,14 @@ var TelegramChannel = class extends ChannelBase {
9725
9724
  this.bot.on("message:text", async (ctx) => {
9726
9725
  const msg = ctx.message;
9727
9726
  const text = msg.text;
9728
- const envelope = this.buildEnvelope(msg, text, msg.entities, true);
9727
+ const envelope = this.buildEnvelope(msg, text, msg.entities);
9729
9728
  this.handleInbound(envelope).catch((err) => {
9730
9729
  this.reportInboundError(envelope, err, () => ctx.reply("Sorry, something went wrong processing your message."));
9731
9730
  });
9732
9731
  });
9733
9732
  this.bot.on("message:photo", async (ctx) => {
9734
9733
  const msg = ctx.message;
9735
- const envelope = this.buildEnvelope(msg, msg.caption || "(image)", msg.caption_entities, false, !msg.caption);
9734
+ const envelope = this.buildEnvelope(msg, msg.caption || "(image)", msg.caption_entities, !msg.caption);
9736
9735
  const photo = msg.photo[msg.photo.length - 1];
9737
9736
  if (!photo)
9738
9737
  return;
@@ -9762,7 +9761,7 @@ var TelegramChannel = class extends ChannelBase {
9762
9761
  const msg = ctx.message;
9763
9762
  const doc = msg.document;
9764
9763
  const fileName = doc.file_name || `file_${Date.now()}`;
9765
- const envelope = this.buildEnvelope(msg, msg.caption || `(file: ${fileName})`, msg.caption_entities, false, !msg.caption);
9764
+ const envelope = this.buildEnvelope(msg, msg.caption || `(file: ${fileName})`, msg.caption_entities, !msg.caption);
9766
9765
  this.prepareThenHandleInbound(envelope, async () => {
9767
9766
  try {
9768
9767
  const file = await ctx.api.getFile(doc.file_id);
@@ -9775,9 +9774,7 @@ var TelegramChannel = class extends ChannelBase {
9775
9774
  mkdirSync(dir, { recursive: true });
9776
9775
  const filePath = join(dir, basename(fileName) || `file_${Date.now()}`);
9777
9776
  writeFileSync(filePath, buf);
9778
- if (!this.configuredMessagePrefix() || !msg.caption) {
9779
- envelope.text = msg.caption || "";
9780
- }
9777
+ envelope.text = msg.caption || "";
9781
9778
  envelope.attachments = [
9782
9779
  {
9783
9780
  type: "file",
@@ -9789,7 +9786,7 @@ var TelegramChannel = class extends ChannelBase {
9789
9786
  } catch (err) {
9790
9787
  process.stderr.write(`[Telegram:${this.name}] Failed to download document: ${err instanceof Error ? err.message : err}
9791
9788
  `);
9792
- const promptText = this.configuredMessagePrefix() && msg.caption ? envelope.text : msg.caption || "";
9789
+ const promptText = msg.caption || "";
9793
9790
  envelope.text = `${promptText}
9794
9791
 
9795
9792
  (User sent a file "${fileName}" but download failed)`;
@@ -9806,7 +9803,6 @@ var TelegramChannel = class extends ChannelBase {
9806
9803
  msg,
9807
9804
  msg.caption || "(voice message)",
9808
9805
  msg.caption_entities,
9809
- false,
9810
9806
  // Standard Telegram clients cannot caption a voice message, so
9811
9807
  // this is effectively always synthetic.
9812
9808
  !msg.caption
@@ -9823,9 +9819,7 @@ var TelegramChannel = class extends ChannelBase {
9823
9819
  mkdirSync(dir, { recursive: true });
9824
9820
  const filePath = join(dir, fileName);
9825
9821
  writeFileSync(filePath, buf);
9826
- if (!this.configuredMessagePrefix() || !msg.caption) {
9827
- envelope.text = msg.caption || "";
9828
- }
9822
+ envelope.text = msg.caption || "";
9829
9823
  envelope.attachments = [
9830
9824
  {
9831
9825
  type: "audio",
@@ -9837,7 +9831,7 @@ var TelegramChannel = class extends ChannelBase {
9837
9831
  } catch (err) {
9838
9832
  process.stderr.write(`[Telegram:${this.name}] Failed to download voice message: ${err instanceof Error ? err.message : err}
9839
9833
  `);
9840
- const promptText = this.configuredMessagePrefix() && msg.caption ? envelope.text : msg.caption || "";
9834
+ const promptText = msg.caption || "";
9841
9835
  envelope.text = `${promptText}
9842
9836
 
9843
9837
  (User sent a voice message but download failed)`;
@@ -9865,14 +9859,13 @@ var TelegramChannel = class extends ChannelBase {
9865
9859
  }
9866
9860
  }
9867
9861
  startMessage() {
9868
- const prefix = this.configuredMessagePrefix();
9869
9862
  return [
9870
9863
  "Qwen Code Telegram bot",
9871
9864
  "",
9872
- prefix ? `Start each message with ${prefix} to chat with Qwen Code.` : "Send any message to chat with Qwen Code.",
9873
- `Use ${this.prefixedCommand("/new")} to start a fresh conversation.`,
9874
- `Use ${this.prefixedCommand("/cancel")} to stop a running request.`,
9875
- `Use ${this.prefixedCommand("/help")} to see available commands.`
9865
+ "Send any message to chat with Qwen Code.",
9866
+ "Use /new to start a fresh conversation.",
9867
+ "Use /cancel to stop a running request.",
9868
+ "Use /help to see available commands."
9876
9869
  ].join("\n");
9877
9870
  }
9878
9871
  /** Per-chat typing interval — repeats every 4s since Telegram expires it after 5s. */
@@ -9984,7 +9977,7 @@ var TelegramChannel = class extends ChannelBase {
9984
9977
  this.activeTypingSessions.clear();
9985
9978
  this.bot.stop();
9986
9979
  }
9987
- buildEnvelope(msg, text, entities, allowRegisteredCommandBypass = false, syntheticText = false) {
9980
+ buildEnvelope(msg, text, entities, syntheticText = false) {
9988
9981
  const isGroup = msg.chat.type === "group" || msg.chat.type === "supergroup";
9989
9982
  const isMentioned = entities?.some((e) => {
9990
9983
  if (!this.botUsername)
@@ -10006,18 +9999,6 @@ var TelegramChannel = class extends ChannelBase {
10006
9999
  cleanText = text.replace(new RegExp(`@${this.botUsername}`, "gi"), "").trim();
10007
10000
  }
10008
10001
  const referencedText = msg.reply_to_message?.text || void 0;
10009
- const configuredPrefix = this.configuredMessagePrefix();
10010
- const bypassMessagePrefix = allowRegisteredCommandBypass && !(configuredPrefix && startsWithMessagePrefix(text.trim(), configuredPrefix)) && (entities?.some((entity) => {
10011
- if (entity.type !== "bot_command" || entity.offset !== 0)
10012
- return false;
10013
- const value = text.slice(0, entity.length).toLowerCase();
10014
- const command = value.slice(1).split("@", 1)[0];
10015
- const atIndex = value.indexOf("@", 1);
10016
- if (atIndex !== -1 && value.slice(atIndex + 1) !== this.botUsername.toLowerCase()) {
10017
- return false;
10018
- }
10019
- return TELEGRAM_BOT_COMMANDS.some((registered) => registered.command === command);
10020
- }) ?? false);
10021
10002
  return {
10022
10003
  channelName: this.name,
10023
10004
  senderId: String(msg.from.id),
@@ -10027,7 +10008,6 @@ var TelegramChannel = class extends ChannelBase {
10027
10008
  threadId: typeof msg.message_thread_id === "number" ? String(msg.message_thread_id) : void 0,
10028
10009
  text: cleanText,
10029
10010
  ...syntheticText ? { syntheticText: true } : {},
10030
- ...bypassMessagePrefix ? { bypassMessagePrefix: true } : {},
10031
10011
  isGroup,
10032
10012
  isMentioned,
10033
10013
  isReplyToBot,
@@ -4,10 +4,9 @@ import {
4
4
  PollingChannelBase,
5
5
  isTerminalTaskLifecycleType,
6
6
  sanitizeLogText,
7
- stripMessagePrefix,
8
7
  truncateCodePoints
9
- } from "./chunk-WDVV3LRM.js";
10
- import "./chunk-IW6RQPQB.js";
8
+ } from "./chunk-C4NLHK7X.js";
9
+ import "./chunk-IJOS26LH.js";
11
10
  import "./chunk-CQ35AJ4Z.js";
12
11
  import {
13
12
  init_esbuild_shims
@@ -32,6 +31,7 @@ import { execFile } from "node:child_process";
32
31
  init_esbuild_shims();
33
32
  import process from "node:process";
34
33
  var SAFE_KEYS = /* @__PURE__ */ new Set([
34
+ "AONE_SANDBOX_ID",
35
35
  "APPDATA",
36
36
  "COMSPEC",
37
37
  "HOME",
@@ -1091,6 +1091,13 @@ var NOTIFICATION_HISTORY_OVERLAP_MS = 5e3;
1091
1091
  var NOTIFICATION_POLL_INTERVAL_MS = 5e3;
1092
1092
  var TODO_POLL_INTERVAL_MS = 3e4;
1093
1093
  var TODO_CHAT_PREFIX = "todo:";
1094
+ var IM_DELIVERY_RETRY_BASE_MS = 5e3;
1095
+ var IM_DELIVERY_RETRY_MAX_MS = 5 * 6e4;
1096
+ var IM_DELIVERY_MAX_ATTEMPTS = 16;
1097
+ var IM_DELIVERY_MAX_LOCAL_DEFERRALS = 32;
1098
+ var MAX_PENDING_IM_DELIVERIES = 100;
1099
+ var MAX_IM_DELIVERY_CONTENT_CHARS = 12e3;
1100
+ var IM_DELIVERY_TRUNCATION_NOTICE = "\n\n[Response truncated for DWS delivery.]";
1094
1101
  function configuredString(value, field) {
1095
1102
  if (value === void 0 || value === null || value === "")
1096
1103
  return void 0;
@@ -1220,6 +1227,19 @@ function isPendingMessage(value) {
1220
1227
  ].every((item) => typeof item === "string") && (message.referencedText === void 0 || typeof message.referencedText === "string") && (message.eventTime === void 0 || Number.isSafeInteger(message.eventTime) && message.eventTime >= 0);
1221
1228
  }
1222
1229
  __name(isPendingMessage, "isPendingMessage");
1230
+ function isPersistedImDelivery(value) {
1231
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
1232
+ return false;
1233
+ }
1234
+ const delivery = value;
1235
+ return [
1236
+ delivery.conversationId,
1237
+ delivery.messageId,
1238
+ delivery.senderId,
1239
+ delivery.idempotencyKey
1240
+ ].every((item) => typeof item === "string" && Boolean(item)) && typeof delivery.content === "string" && (delivery.directTarget === void 0 || delivery.directTarget.kind === "direct" && typeof delivery.directTarget.openDingTalkId === "string" && Boolean(delivery.directTarget.openDingTalkId)) && (delivery.isGroup === void 0 || typeof delivery.isGroup === "boolean") && Number.isSafeInteger(delivery.attempts) && delivery.attempts >= 0 && (delivery.localDeferrals === void 0 || Number.isSafeInteger(delivery.localDeferrals) && delivery.localDeferrals >= 0) && Number.isSafeInteger(delivery.nextRetryAt) && delivery.nextRetryAt >= 0;
1241
+ }
1242
+ __name(isPersistedImDelivery, "isPersistedImDelivery");
1223
1243
  function isPersistedInboundFailure(value) {
1224
1244
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
1225
1245
  return false;
@@ -1266,6 +1286,17 @@ function stableUuid(value) {
1266
1286
  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-5${hex.slice(13, 16)}-8${hex.slice(17, 20)}-${hex.slice(20)}`;
1267
1287
  }
1268
1288
  __name(stableUuid, "stableUuid");
1289
+ function imDeliveryLogContext(delivery) {
1290
+ return `conversationId=${sanitizeLogText(delivery?.conversationId ?? "", 120)} messageId=${sanitizeLogText(delivery?.messageId ?? "", 120)}`;
1291
+ }
1292
+ __name(imDeliveryLogContext, "imDeliveryLogContext");
1293
+ function boundedImDeliveryContent(content) {
1294
+ if (Array.from(content).length <= MAX_IM_DELIVERY_CONTENT_CHARS) {
1295
+ return content;
1296
+ }
1297
+ return `${truncateCodePoints(content, MAX_IM_DELIVERY_CONTENT_CHARS - Array.from(IM_DELIVERY_TRUNCATION_NOTICE).length)}${IM_DELIVERY_TRUNCATION_NOTICE}`;
1298
+ }
1299
+ __name(boundedImDeliveryContent, "boundedImDeliveryContent");
1269
1300
  function isNoReply(text) {
1270
1301
  const trimmed = text.trim();
1271
1302
  const fenced = trimmed.match(/^```[^\n]*\n([\s\S]*?)\n```$/u) ?? trimmed.match(/^```([^`\n]*)```$/u);
@@ -1345,7 +1376,6 @@ var DwsChannel = class extends PollingChannelBase {
1345
1376
  userInstructions;
1346
1377
  client;
1347
1378
  imStates;
1348
- dwsMessagePrefix;
1349
1379
  startReactionName;
1350
1380
  endReactionName;
1351
1381
  watchTodos;
@@ -1361,6 +1391,8 @@ var DwsChannel = class extends PollingChannelBase {
1361
1391
  // live or followup traffic, whose queue entries outlive their turn.
1362
1392
  replayDispatches = /* @__PURE__ */ new Map();
1363
1393
  attemptedPendingMessages = /* @__PURE__ */ new Set();
1394
+ activeImDeliveries = /* @__PURE__ */ new Set();
1395
+ imResponseKinds = /* @__PURE__ */ new Map();
1364
1396
  conversationTails = /* @__PURE__ */ new Map();
1365
1397
  messageStartResolvers = /* @__PURE__ */ new Map();
1366
1398
  processingMessageGenerations = /* @__PURE__ */ new Map();
@@ -1375,7 +1407,6 @@ var DwsChannel = class extends PollingChannelBase {
1375
1407
  notificationWatermarkPulledBack = false;
1376
1408
  constructor(name, config, bridge, options, client) {
1377
1409
  const profile = configuredString(config.profile, "profile");
1378
- const messagePrefix = configuredString(config.messagePrefix, "messagePrefix");
1379
1410
  const startReactionName = configuredString(config.startReaction, "startReaction") ?? DEFAULT_START_REACTION;
1380
1411
  const endReactionName = configuredString(config.endReaction, "endReaction");
1381
1412
  const watchTodos = configuredBoolean(config.watchTodos, "watchTodos");
@@ -1406,7 +1437,6 @@ var DwsChannel = class extends PollingChannelBase {
1406
1437
  }));
1407
1438
  this.startReactionName = startReactionName;
1408
1439
  this.endReactionName = endReactionName;
1409
- this.dwsMessagePrefix = messagePrefix;
1410
1440
  this.watchTodos = watchTodos;
1411
1441
  }
1412
1442
  createInitialCursor() {
@@ -1419,6 +1449,7 @@ var DwsChannel = class extends PollingChannelBase {
1419
1449
  mentionCheckpoint: void 0,
1420
1450
  pendingDocumentNotifications: [],
1421
1451
  pendingMessages: [],
1452
+ pendingImDeliveries: [],
1422
1453
  processedMessages: [],
1423
1454
  imTargets: [],
1424
1455
  todosInitialized: false,
@@ -1431,7 +1462,7 @@ var DwsChannel = class extends PollingChannelBase {
1431
1462
  return null;
1432
1463
  }
1433
1464
  const cursor = parsed;
1434
- if (cursor.version !== 1 || cursor.selfProfile !== void 0 && (typeof cursor.selfProfile !== "string" || !cursor.selfProfile.trim()) || cursor.selfSenderIds !== void 0 && (!Array.isArray(cursor.selfSenderIds) || !cursor.selfSenderIds.every((item) => typeof item === "string" && Boolean(item.trim()))) || cursor.documentIds !== void 0 && (!Array.isArray(cursor.documentIds) || !cursor.documentIds.every((item) => typeof item === "string" && /^[\p{L}\p{N}_~-]+$/u.test(item))) || cursor.notificationWatermark !== void 0 && (typeof cursor.notificationWatermark !== "number" || !Number.isSafeInteger(cursor.notificationWatermark) || cursor.notificationWatermark < 0) || cursor.mentionWatermark !== void 0 && (typeof cursor.mentionWatermark !== "number" || !Number.isSafeInteger(cursor.mentionWatermark) || cursor.mentionWatermark < 0) || cursor.notificationCheckpoint !== void 0 && !isNotificationCheckpoint(cursor.notificationCheckpoint) || cursor.mentionCheckpoint !== void 0 && !isNotificationCheckpoint(cursor.mentionCheckpoint) || cursor.pendingDocumentNotifications !== void 0 && (!Array.isArray(cursor.pendingDocumentNotifications) || !cursor.pendingDocumentNotifications.every(isPendingDocumentNotification)) || cursor.pendingMessages !== void 0 && (!Array.isArray(cursor.pendingMessages) || !cursor.pendingMessages.every(isPendingMessage)) || !Array.isArray(cursor.processedMessages) || !cursor.processedMessages.every((item) => typeof item === "string") || !Array.isArray(cursor.imTargets) || !cursor.imTargets.every(isPersistedTarget) || cursor.todosInitialized !== void 0 && typeof cursor.todosInitialized !== "boolean" || cursor.todoTasks !== void 0 && (!Array.isArray(cursor.todoTasks) || !cursor.todoTasks.every(isPersistedTodoState)) || cursor.pairingNotifications !== void 0 && (!Array.isArray(cursor.pairingNotifications) || !cursor.pairingNotifications.every((item) => typeof item === "string" && Boolean(item))) || cursor.inboundFailures !== void 0 && (!Array.isArray(cursor.inboundFailures) || !cursor.inboundFailures.every(isPersistedInboundFailure))) {
1465
+ if (cursor.version !== 1 || cursor.selfProfile !== void 0 && (typeof cursor.selfProfile !== "string" || !cursor.selfProfile.trim()) || cursor.selfSenderIds !== void 0 && (!Array.isArray(cursor.selfSenderIds) || !cursor.selfSenderIds.every((item) => typeof item === "string" && Boolean(item.trim()))) || cursor.documentIds !== void 0 && (!Array.isArray(cursor.documentIds) || !cursor.documentIds.every((item) => typeof item === "string" && /^[\p{L}\p{N}_~-]+$/u.test(item))) || cursor.notificationWatermark !== void 0 && (typeof cursor.notificationWatermark !== "number" || !Number.isSafeInteger(cursor.notificationWatermark) || cursor.notificationWatermark < 0) || cursor.mentionWatermark !== void 0 && (typeof cursor.mentionWatermark !== "number" || !Number.isSafeInteger(cursor.mentionWatermark) || cursor.mentionWatermark < 0) || cursor.notificationCheckpoint !== void 0 && !isNotificationCheckpoint(cursor.notificationCheckpoint) || cursor.mentionCheckpoint !== void 0 && !isNotificationCheckpoint(cursor.mentionCheckpoint) || cursor.pendingDocumentNotifications !== void 0 && (!Array.isArray(cursor.pendingDocumentNotifications) || !cursor.pendingDocumentNotifications.every(isPendingDocumentNotification)) || cursor.pendingMessages !== void 0 && (!Array.isArray(cursor.pendingMessages) || !cursor.pendingMessages.every(isPendingMessage)) || cursor.pendingImDeliveries !== void 0 && (!Array.isArray(cursor.pendingImDeliveries) || !cursor.pendingImDeliveries.every(isPersistedImDelivery)) || !Array.isArray(cursor.processedMessages) || !cursor.processedMessages.every((item) => typeof item === "string") || !Array.isArray(cursor.imTargets) || !cursor.imTargets.every(isPersistedTarget) || cursor.todosInitialized !== void 0 && typeof cursor.todosInitialized !== "boolean" || cursor.todoTasks !== void 0 && (!Array.isArray(cursor.todoTasks) || !cursor.todoTasks.every(isPersistedTodoState)) || cursor.pairingNotifications !== void 0 && (!Array.isArray(cursor.pairingNotifications) || !cursor.pairingNotifications.every((item) => typeof item === "string" && Boolean(item))) || cursor.inboundFailures !== void 0 && (!Array.isArray(cursor.inboundFailures) || !cursor.inboundFailures.every(isPersistedInboundFailure))) {
1435
1466
  return null;
1436
1467
  }
1437
1468
  return {
@@ -1445,6 +1476,7 @@ var DwsChannel = class extends PollingChannelBase {
1445
1476
  mentionCheckpoint: cursor.mentionCheckpoint,
1446
1477
  pendingDocumentNotifications: (cursor.pendingDocumentNotifications ?? []).slice(-MAX_PROCESSED_ITEMS),
1447
1478
  pendingMessages: (cursor.pendingMessages ?? []).slice(),
1479
+ pendingImDeliveries: (cursor.pendingImDeliveries ?? []).slice(-MAX_PENDING_IM_DELIVERIES),
1448
1480
  processedMessages: cursor.processedMessages.slice(-MAX_PROCESSED_ITEMS),
1449
1481
  imTargets: cursor.imTargets.slice(-MAX_IM_TARGETS),
1450
1482
  todosInitialized: cursor.todosInitialized ?? false,
@@ -1484,6 +1516,7 @@ var DwsChannel = class extends PollingChannelBase {
1484
1516
  this.cursor.documentIds = [];
1485
1517
  this.cursor.pendingDocumentNotifications = [];
1486
1518
  this.cursor.pendingMessages = [];
1519
+ this.cursor.pendingImDeliveries = [];
1487
1520
  this.cursor.imTargets = [];
1488
1521
  this.cursor.processedMessages = [];
1489
1522
  this.cursor.pairingNotifications = [];
@@ -1753,11 +1786,187 @@ Ask the bot operator to approve you with:
1753
1786
  return;
1754
1787
  }
1755
1788
  const idempotencyKey = stableUuid(`${this.name}\0${chatId}\0${messageId}\0${text}`);
1756
- if (this.findImTarget(chatId)?.kind === "direct") {
1757
- await this.sendImText(chatId, this.formatAttributedText(text, label), idempotencyKey);
1789
+ const target = this.findImTarget(chatId);
1790
+ const isGroup = this.imResponseKinds.get(`${chatId}\0${messageId}`) ?? target?.kind !== "direct";
1791
+ const delivery = {
1792
+ conversationId: chatId,
1793
+ messageId,
1794
+ senderId,
1795
+ content: boundedImDeliveryContent(this.formatAttributedText(text, label)),
1796
+ idempotencyKey,
1797
+ ...target?.kind === "direct" ? { directTarget: target } : {},
1798
+ isGroup,
1799
+ attempts: 0,
1800
+ nextRetryAt: 0
1801
+ };
1802
+ const pending = this.rememberImDelivery(delivery);
1803
+ void this.attemptImDelivery(pending).catch((error) => {
1804
+ this.deferImDelivery(pending, error);
1805
+ });
1806
+ }
1807
+ rememberImDelivery(delivery) {
1808
+ const existing = (this.cursor.pendingImDeliveries ?? []).find(({ idempotencyKey }) => idempotencyKey === delivery.idempotencyKey);
1809
+ if (existing)
1810
+ return existing;
1811
+ const pending = this.cursor.pendingImDeliveries ?? [];
1812
+ while (pending.length >= MAX_PENDING_IM_DELIVERIES) {
1813
+ const dropped = pending.shift();
1814
+ process2.stderr.write(`[Channel:${this.name}] DWS IM delivery queue is full; dropping the oldest undelivered reply ${imDeliveryLogContext(dropped)} key=${sanitizeLogText(dropped?.idempotencyKey ?? "", 64)}
1815
+ `);
1816
+ }
1817
+ pending.push(delivery);
1818
+ this.cursor.pendingImDeliveries = pending;
1819
+ try {
1820
+ this.saveCursor();
1821
+ } catch (error) {
1822
+ process2.stderr.write(`[Channel:${this.name}] DWS IM delivery pre-send checkpoint failed; keeping the entry in memory and delivering anyway with the same idempotency key: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
1823
+ `);
1824
+ }
1825
+ return delivery;
1826
+ }
1827
+ async attemptImDelivery(delivery) {
1828
+ if (delivery.nextRetryAt > Date.now() || this.activeImDeliveries.has(delivery.idempotencyKey) || !(this.cursor.pendingImDeliveries ?? []).includes(delivery)) {
1829
+ return;
1830
+ }
1831
+ if (!this.connected) {
1832
+ this.deferImDelivery(delivery, new Error("channel disconnected"), "local");
1833
+ return;
1834
+ }
1835
+ const authorization = this.imDeliveryAuthorization(delivery);
1836
+ if (authorization === "unknown") {
1837
+ this.deferImDelivery(delivery, new Error("stored pairing approval could not be confirmed"), "local");
1758
1838
  return;
1759
1839
  }
1760
- await this.client.replyToImMessage(chatId, messageId, senderId, this.formatAttributedText(text, label), idempotencyKey);
1840
+ if (authorization === "denied") {
1841
+ this.cursor.pendingImDeliveries = (this.cursor.pendingImDeliveries ?? []).filter((pending) => pending !== delivery);
1842
+ process2.stderr.write(`[Channel:${this.name}] dropping a completed DWS IM reply after a definitive authorization denial: ${imDeliveryLogContext(delivery)}
1843
+ `);
1844
+ try {
1845
+ this.saveCursor();
1846
+ } catch (error) {
1847
+ process2.stderr.write(`[Channel:${this.name}] failed to checkpoint a revoked DWS IM delivery ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
1848
+ `);
1849
+ }
1850
+ return;
1851
+ }
1852
+ this.activeImDeliveries.add(delivery.idempotencyKey);
1853
+ try {
1854
+ try {
1855
+ if (delivery.directTarget) {
1856
+ await this.client.sendImMessage(delivery.directTarget, delivery.content, delivery.idempotencyKey);
1857
+ } else {
1858
+ await this.client.replyToImMessage(delivery.conversationId, delivery.messageId, delivery.senderId, delivery.content, delivery.idempotencyKey);
1859
+ }
1860
+ } catch (error) {
1861
+ if (!(error instanceof DwsCommandError))
1862
+ throw error;
1863
+ this.deferImDelivery(delivery, error);
1864
+ return;
1865
+ }
1866
+ const pending = this.cursor.pendingImDeliveries ?? [];
1867
+ if (!pending.includes(delivery))
1868
+ return;
1869
+ this.cursor.pendingImDeliveries = pending.filter(({ idempotencyKey }) => idempotencyKey !== delivery.idempotencyKey);
1870
+ try {
1871
+ this.saveCursor();
1872
+ } catch (error) {
1873
+ this.cursor.pendingImDeliveries.push(delivery);
1874
+ const delay = this.scheduleImDeliveryRetry(delivery);
1875
+ if (delay === void 0) {
1876
+ process2.stderr.write(`[Channel:${this.name}] abandoning a completed DWS IM reply because its success checkpoint repeatedly failed; ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
1877
+ `);
1878
+ } else {
1879
+ process2.stderr.write(`[Channel:${this.name}] DWS IM delivery succeeded but its checkpoint failed; retrying with the same idempotency key in ${delay}ms; ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
1880
+ `);
1881
+ }
1882
+ }
1883
+ } finally {
1884
+ this.activeImDeliveries.delete(delivery.idempotencyKey);
1885
+ }
1886
+ }
1887
+ imDeliveryAuthorization(delivery) {
1888
+ const isGroup = delivery.isGroup ?? delivery.directTarget === void 0;
1889
+ const envelope = {
1890
+ channelName: this.name,
1891
+ senderId: delivery.senderId,
1892
+ senderName: delivery.senderId,
1893
+ chatId: delivery.conversationId,
1894
+ text: "",
1895
+ isGroup,
1896
+ isMentioned: true,
1897
+ isReplyToBot: true
1898
+ };
1899
+ const groupAllowed = this.groupGate.check(envelope, {
1900
+ createPairingRequest: false
1901
+ }).allowed;
1902
+ if (!groupAllowed) {
1903
+ return this.config.groupPolicy === "pairing" ? "unknown" : "denied";
1904
+ }
1905
+ if (!this.dmGate.check(envelope).allowed)
1906
+ return "denied";
1907
+ if (isGroup && this.config.groupPolicy === "pairing")
1908
+ return "allowed";
1909
+ if (this.gate.isAllowed(delivery.senderId))
1910
+ return "allowed";
1911
+ return this.config.senderPolicy === "pairing" ? "unknown" : "denied";
1912
+ }
1913
+ deferImDelivery(delivery, error, retryKind = "delivery") {
1914
+ if (!(this.cursor.pendingImDeliveries ?? []).includes(delivery))
1915
+ return;
1916
+ const delay = this.scheduleImDeliveryRetry(delivery, retryKind);
1917
+ try {
1918
+ this.saveCursor();
1919
+ } catch (saveError) {
1920
+ process2.stderr.write(`[Channel:${this.name}] DWS IM delivery retry checkpoint failed: ${sanitizeLogText(saveError instanceof Error ? saveError.message : String(saveError), 300)}
1921
+ `);
1922
+ }
1923
+ if (delay === void 0) {
1924
+ if (retryKind === "local") {
1925
+ process2.stderr.write(`[Channel:${this.name}] abandoning a completed DWS IM reply after ${delivery.localDeferrals} consecutive local deferrals without reaching transport; ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
1926
+ `);
1927
+ return;
1928
+ }
1929
+ process2.stderr.write(`[Channel:${this.name}] abandoning a completed DWS IM reply after ${delivery.attempts} failed delivery attempts; ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
1930
+ `);
1931
+ return;
1932
+ }
1933
+ if (retryKind === "local") {
1934
+ process2.stderr.write(`[Channel:${this.name}] DWS IM delivery is locally deferred; retrying the pre-send check in ${delay}ms without consuming the delivery-attempt budget; ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
1935
+ `);
1936
+ return;
1937
+ }
1938
+ process2.stderr.write(`[Channel:${this.name}] DWS IM delivery failed; retrying delivery only in ${delay}ms without rerunning the originating task; ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
1939
+ `);
1940
+ }
1941
+ scheduleImDeliveryRetry(delivery, retryKind = "delivery") {
1942
+ const retryCount = retryKind === "local" ? delivery.localDeferrals = (delivery.localDeferrals ?? 0) + 1 : delivery.attempts += 1;
1943
+ if (retryKind === "delivery")
1944
+ delivery.localDeferrals = 0;
1945
+ const maxRetries = retryKind === "local" ? IM_DELIVERY_MAX_LOCAL_DEFERRALS : IM_DELIVERY_MAX_ATTEMPTS;
1946
+ if (retryCount >= maxRetries) {
1947
+ this.cursor.pendingImDeliveries = (this.cursor.pendingImDeliveries ?? []).filter((pending) => pending !== delivery);
1948
+ return void 0;
1949
+ }
1950
+ const delay = Math.min(IM_DELIVERY_RETRY_BASE_MS * 2 ** Math.min(retryCount - 1, 16), IM_DELIVERY_RETRY_MAX_MS);
1951
+ delivery.nextRetryAt = Date.now() + delay;
1952
+ return delay;
1953
+ }
1954
+ async replayPendingImDeliveries(signal) {
1955
+ let attempts = 0;
1956
+ for (const delivery of [...this.cursor.pendingImDeliveries ?? []]) {
1957
+ if (signal.aborted || !this.connected)
1958
+ return;
1959
+ if (delivery.nextRetryAt > Date.now())
1960
+ continue;
1961
+ if (attempts >= MAX_REPLAY_CONVERSATIONS)
1962
+ return;
1963
+ attempts += 1;
1964
+ try {
1965
+ await this.attemptImDelivery(delivery);
1966
+ } catch (error) {
1967
+ this.deferImDelivery(delivery, error);
1968
+ }
1969
+ }
1761
1970
  }
1762
1971
  async pushProactive(target, text, sourceLabel2) {
1763
1972
  if (isNoReply(text))
@@ -1852,6 +2061,9 @@ Ask the bot operator to approve you with:
1852
2061
  process2.stderr.write(`[Channel:${this.name}] failed to poll DWS direct-message history: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
1853
2062
  `);
1854
2063
  }
2064
+ await this.replayPendingImDeliveries(signal);
2065
+ if (signal.aborted || !this.connected)
2066
+ return;
1855
2067
  this.saveCursor();
1856
2068
  if (this.watchTodos && (this.lastTodoPollAt === 0 || endTime - this.lastTodoPollAt >= this.todoPollInterval)) {
1857
2069
  try {
@@ -1937,7 +2149,6 @@ Ask the bot operator to approve you with:
1937
2149
  text: `Process this DingTalk todo:
1938
2150
  ${truncateCodePoints(title, MAX_COMMENT_CHARS)}`,
1939
2151
  displayText: title,
1940
- bypassMessagePrefix: true,
1941
2152
  isGroup: true,
1942
2153
  isMentioned: true,
1943
2154
  isReplyToBot: false,
@@ -2110,12 +2321,9 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2110
2321
  }
2111
2322
  if (this.shouldFilterImMessage(source, message)) {
2112
2323
  if (source.kind === "group" || source.kind === "group-all") {
2113
- const text = stripMessagePrefix(message.content.trim(), this.dwsMessagePrefix);
2114
- if (!this.dwsMessagePrefix || text) {
2115
- const envelope = this.createImEnvelope(source, message, text);
2116
- if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required" && !this.queuedMessages.has(key) && !this.cursor.processedMessages.includes(key) && !this.hasPendingMessage(key)) {
2117
- this.recordPendingGroupHistory(envelope);
2118
- }
2324
+ const envelope = this.createImEnvelope(source, message);
2325
+ if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required" && !this.queuedMessages.has(key) && !this.cursor.processedMessages.includes(key) && !this.hasPendingMessage(key)) {
2326
+ this.recordPendingGroupHistory(envelope);
2119
2327
  }
2120
2328
  }
2121
2329
  this.removePersistedPendingMessageForSource(key, source);
@@ -2288,14 +2496,7 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2288
2496
  }
2289
2497
  }
2290
2498
  async processImMessage(source, message, key) {
2291
- const rawText = source.kind === "at" && this.requiresMention(message.conversationId) ? message.content.replace(/^\s*@[^\s\p{Cf}]+\s+(?=\/[a-zA-Z0-9_:-]+(?:\s|$))(?![\s\S]*(?<![A-Za-z0-9_])@)/u, "").trim() : message.content.trim();
2292
- const providerDocumentNotification = source.kind === "direct" ? parseDocumentMentionNotification(rawText) : void 0;
2293
- const text = providerDocumentNotification ? rawText : stripMessagePrefix(rawText, this.dwsMessagePrefix);
2294
- if (this.dwsMessagePrefix && !text) {
2295
- this.markProcessedMessage(key);
2296
- this.saveCursor();
2297
- return;
2298
- }
2499
+ const text = source.kind === "at" && this.requiresMention(message.conversationId) ? message.content.replace(/^\s*@[^\s\p{Cf}]+\s+(?=\/[a-zA-Z0-9_:-]+(?:\s|$))(?![\s\S]*(?<![A-Za-z0-9_])@)/u, "").trim() : message.content.trim();
2299
2500
  const target = source.kind === "direct" ? { kind: "direct", openDingTalkId: message.senderId } : { kind: "group", conversationId: message.conversationId };
2300
2501
  this.rememberImTarget(message.conversationId, target);
2301
2502
  if (!text) {
@@ -2303,13 +2504,14 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2303
2504
  this.saveCursor();
2304
2505
  return;
2305
2506
  }
2306
- const documentNotification = providerDocumentNotification ?? (source.kind === "direct" ? parseDocumentMentionNotification(text) : void 0);
2507
+ const documentNotification = source.kind === "direct" ? parseDocumentMentionNotification(text) : void 0;
2307
2508
  if (documentNotification) {
2308
2509
  await this.processDocumentNotification(message, key, documentNotification);
2309
2510
  return;
2310
2511
  }
2311
2512
  const envelope = this.createImEnvelope(source, message, text);
2312
2513
  this.rememberInboundReactionTarget(message.conversationId, message.messageId);
2514
+ this.imResponseKinds.set(key, source.kind !== "direct");
2313
2515
  try {
2314
2516
  await this.handleInbound(envelope);
2315
2517
  } catch (error) {
@@ -2321,6 +2523,8 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2321
2523
  throw error;
2322
2524
  }
2323
2525
  return;
2526
+ } finally {
2527
+ this.imResponseKinds.delete(key);
2324
2528
  }
2325
2529
  this.clearInboundFailure(key);
2326
2530
  this.removePendingMessage(key);
@@ -2336,7 +2540,6 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2336
2540
  chatName: message.conversationId,
2337
2541
  messageId: message.messageId,
2338
2542
  text,
2339
- bypassMessagePrefix: true,
2340
2543
  ...message.referencedText ? { referencedText: message.referencedText } : {},
2341
2544
  isGroup: source.kind !== "direct",
2342
2545
  isMentioned: source.kind === "at",
@@ -2513,7 +2716,6 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2513
2716
  threadId: notification.commentKey,
2514
2717
  messageId: message.messageId,
2515
2718
  text: truncateCodePoints(notification.request, MAX_COMMENT_CHARS),
2516
- bypassMessagePrefix: true,
2517
2719
  isGroup: true,
2518
2720
  isMentioned: true,
2519
2721
  isReplyToBot: false,
@@ -2576,12 +2778,9 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
2576
2778
  continue;
2577
2779
  if (this.shouldFilterImMessage(pending.source, pending.message)) {
2578
2780
  if (pending.source.kind === "group" || pending.source.kind === "group-all") {
2579
- const text = stripMessagePrefix(pending.message.content.trim(), this.dwsMessagePrefix);
2580
- if (!this.dwsMessagePrefix || text) {
2581
- const envelope = this.createImEnvelope(pending.source, pending.message, text);
2582
- if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required") {
2583
- this.recordPendingGroupHistory(envelope);
2584
- }
2781
+ const envelope = this.createImEnvelope(pending.source, pending.message);
2782
+ if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required") {
2783
+ this.recordPendingGroupHistory(envelope);
2585
2784
  }
2586
2785
  }
2587
2786
  this.removePersistedPendingMessageForSource(key, pending.source);