@qwen-code/qwen-code 0.23.2 → 0.23.3-nightly.20260911.aaa6a32aae

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 (419) hide show
  1. package/README.md +35 -15
  2. package/bundled/computer-use/SKILL.md +1 -1
  3. package/bundled/goal-draft/SKILL.md +10 -10
  4. package/bundled/qc-helper/docs/configuration/model-providers.md +66 -28
  5. package/bundled/qc-helper/docs/configuration/settings.md +8 -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 +62 -9
  11. package/bundled/qc-helper/docs/features/computer-use.md +1 -1
  12. package/bundled/qc-helper/docs/features/cross-session-protocol.md +338 -0
  13. package/bundled/qc-helper/docs/features/goals.md +22 -18
  14. package/bundled/qc-helper/docs/features/hooks.md +28 -22
  15. package/bundled/qc-helper/docs/features/sub-agents.md +27 -0
  16. package/bundled/qc-helper/docs/qwen-serve.md +23 -6
  17. package/bundled/review/SKILL.md +93 -80
  18. package/bundled/review/references/persistence.md +2 -0
  19. package/bundled/review/references/posting.md +31 -14
  20. package/bundled/workflow-authoring/SKILL.md +410 -0
  21. package/bundled/workflow-creator/SKILL.md +1 -1
  22. package/chunks/{MaxSizedBox-4C3BKKKY.js → MaxSizedBox-7C5XTBZI.js} +64 -53
  23. package/chunks/{StandaloneSessionPicker-TXVF65YW.js → StandaloneSessionPicker-IGTT3ZRX.js} +88 -76
  24. package/chunks/{acp-startup-profiler-KEU6VAYR.js → acp-startup-profiler-RUQNTNU5.js} +2 -2
  25. package/chunks/acp-subagent-executor-IUHVNVVO.js +140 -0
  26. package/chunks/{acpAgent-H5XBKGB4.js → acpAgent-W43WM2K4.js} +957 -243
  27. package/chunks/{agent-T5LEFJIU.js → agent-2XMXC5JW.js} +48 -38
  28. package/chunks/{agent-headless-VZKSRH36.js → agent-headless-2HHBVCP6.js} +48 -38
  29. package/chunks/{anthropicContentGenerator-PRJWWVYJ.js → anthropicContentGenerator-7RI3MPIW.js} +69 -36
  30. package/chunks/{artifact-tool-G5LHNECG.js → artifact-tool-HHVHCPNG.js} +59 -109
  31. package/chunks/{askUserQuestion-I5W5S3D6.js → askUserQuestion-RFMXTD3B.js} +2 -2
  32. package/chunks/{bridge-AOX5IY44.js → bridge-ID6N4IH5.js} +69 -58
  33. package/chunks/{ca-KC2AISNS.js → ca-MX3WCEEG.js} +1 -1
  34. package/chunks/{channel-management-service-MWQGHPAS.js → channel-management-service-ASCXI7FR.js} +6 -6
  35. package/chunks/{channel-settings-store-XZCGDGHW.js → channel-settings-store-TPJFQAZY.js} +76 -65
  36. package/chunks/{channel-worker-group-SQ5FRWOH.js → channel-worker-group-JR6JOELM.js} +9 -9
  37. package/chunks/{channel-worker-manager-TU4ZNWOE.js → channel-worker-manager-AVKJEZFL.js} +19 -10
  38. package/chunks/{channel-worker-supervisor-EMITFMCP.js → channel-worker-supervisor-OOYY7BAQ.js} +7 -7
  39. package/chunks/{chunk-4WMGYG3F.js → chunk-22FWWGSM.js} +2 -2
  40. package/chunks/{chunk-LWX4WDFF.js → chunk-2S5RIGZJ.js} +43 -15
  41. package/chunks/{chunk-CLKE4IY3.js → chunk-2SZH22YO.js} +1 -1
  42. package/chunks/{chunk-HJ5UJQQL.js → chunk-2UKKQGRA.js} +3639 -1804
  43. package/chunks/{chunk-MWIO7MF6.js → chunk-2WSLXP3W.js} +4 -0
  44. package/chunks/{chunk-HNLMYDQE.js → chunk-33LYAC4R.js} +10 -6
  45. package/chunks/{chunk-VBLAI2HA.js → chunk-3FPYT6QC.js} +0 -31
  46. package/chunks/{chunk-F53KKZUD.js → chunk-3LMDSCLU.js} +158 -10
  47. package/chunks/{chunk-WXFCI3O5.js → chunk-3MAUPOZ4.js} +2 -2
  48. package/chunks/{chunk-CRZBDVP2.js → chunk-432JQKIO.js} +10 -10
  49. package/chunks/{chunk-IRGDIDGJ.js → chunk-43RQ552L.js} +364 -84
  50. package/chunks/{chunk-PFKGV6PO.js → chunk-465USTVK.js} +9 -15
  51. package/chunks/{chunk-WG7BL3FY.js → chunk-473RJLIH.js} +1 -1
  52. package/chunks/{chunk-J3VZF2AL.js → chunk-4O2AXZXU.js} +2 -2
  53. package/chunks/{chunk-N6S3NUYJ.js → chunk-55VOWZ4C.js} +1 -1
  54. package/chunks/{chunk-OWCFKIFQ.js → chunk-5CZMWDJI.js} +2 -2
  55. package/chunks/{chunk-7NDZKE2M.js → chunk-5MUIHID6.js} +5 -5
  56. package/chunks/{chunk-RM244SCQ.js → chunk-5Z74GE4N.js} +1 -1
  57. package/chunks/{chunk-G5VOXCRX.js → chunk-6375QMAO.js} +2 -2
  58. package/chunks/{chunk-3LPJ776W.js → chunk-63GQZKXL.js} +164 -31
  59. package/chunks/{chunk-O2FEO2CB.js → chunk-6GDELAVL.js} +18 -2
  60. package/chunks/{chunk-7PD7ZMX5.js → chunk-6HI2I3OM.js} +168 -6
  61. package/chunks/{chunk-CALNF3Z3.js → chunk-7C57HCOR.js} +1 -1
  62. package/chunks/{chunk-UYDQYDW2.js → chunk-7IBS746B.js} +1 -1
  63. package/chunks/{chunk-AUTUFD5X.js → chunk-ABNX6E6K.js} +1 -1
  64. package/chunks/chunk-ACHCT36C.js +28 -0
  65. package/chunks/{chunk-2WC3Y7YY.js → chunk-AEY27Z35.js} +401 -23
  66. package/chunks/{chunk-AO2VMS72.js → chunk-AQFRRH73.js} +3 -3
  67. package/chunks/{chunk-PDN7FJZV.js → chunk-ASWEMQIZ.js} +4 -4
  68. package/chunks/chunk-AYEJOTIU.js +43 -0
  69. package/chunks/{chunk-QFJZAY7W.js → chunk-BKFRA4F5.js} +5 -5
  70. package/chunks/{chunk-KCF2436G.js → chunk-BNLW5N6U.js} +4 -4
  71. package/chunks/{chunk-GOKAOSCN.js → chunk-BRFOZEPA.js} +2 -2
  72. package/chunks/{process-registry-OAEG6WGC.js → chunk-BYUAT5OC.js} +1 -0
  73. package/chunks/chunk-C5CECJ46.js +340 -0
  74. package/chunks/{chunk-NOO4QFXM.js → chunk-C75BXMPM.js} +1 -3
  75. package/chunks/chunk-CAAMI77K.js +937 -0
  76. package/chunks/{chunk-QTB4VP4K.js → chunk-CBGHRAWM.js} +304 -23
  77. package/chunks/chunk-CF5KXZZX.js +150 -0
  78. package/chunks/chunk-CFMZLE3L.js +75 -0
  79. package/chunks/{chunk-TGNNLRC3.js → chunk-CJ3DHN5I.js} +1 -0
  80. package/chunks/{chunk-ERXNTINK.js → chunk-CQZJYGRX.js} +1 -1
  81. package/chunks/{chunk-WBU2PIZ5.js → chunk-CSDKDHWV.js} +23 -16
  82. package/chunks/{chunk-2EKVPSIJ.js → chunk-D754KKNZ.js} +9 -2
  83. package/chunks/{chunk-E6TI726I.js → chunk-DGC7BKEZ.js} +1 -1
  84. package/chunks/{chunk-7SVM3RP2.js → chunk-DMMOQWRF.js} +4 -6
  85. package/chunks/{chunk-J3TJH52D.js → chunk-DOTF2PF2.js} +1 -1
  86. package/chunks/{chunk-2BMXHB6N.js → chunk-DWBNQR53.js} +7 -7
  87. package/chunks/{chunk-ZN5TKAVR.js → chunk-E5LTUWKZ.js} +3 -3
  88. package/chunks/chunk-EGW3ZP6Y.js +32 -0
  89. package/chunks/chunk-ELRMZTPF.js +374 -0
  90. package/chunks/{chunk-RNAJVXUG.js → chunk-ENAUXRPG.js} +6 -6
  91. package/chunks/{chunk-WXD7INFV.js → chunk-EO4U2X47.js} +10 -8
  92. package/chunks/{chunk-WDVV3LRM.js → chunk-EPVEPTI3.js} +45 -152
  93. package/chunks/chunk-ERU3SDXT.js +27 -0
  94. package/chunks/{chunk-4HOEU2OR.js → chunk-EWJTAP3Y.js} +1 -19
  95. package/chunks/{chunk-GSFV5RQW.js → chunk-EYN3G5XD.js} +328 -4
  96. package/chunks/{chunk-QB3KS3N3.js → chunk-FGROOEKM.js} +5 -40
  97. package/chunks/{chunk-TOOOLHVS.js → chunk-FH5AVEWJ.js} +3 -3
  98. package/chunks/{chunk-DAI65CMX.js → chunk-FJZWRNEW.js} +1 -1
  99. package/chunks/{chunk-GNY7B3CA.js → chunk-FUQK5ZNL.js} +1 -1
  100. package/chunks/{chunk-GOEVQADN.js → chunk-GDIPPCW6.js} +330 -175
  101. package/chunks/{chunk-ALMR3E6Q.js → chunk-GDWE23OR.js} +3 -3
  102. package/chunks/{chunk-LNYV4GXX.js → chunk-GSKX53AN.js} +0 -139
  103. package/chunks/{chunk-ELD3OBPU.js → chunk-GWOVD63C.js} +3 -3
  104. package/chunks/{chunk-IWABUX6T.js → chunk-GX5FF2IE.js} +6 -6
  105. package/chunks/{chunk-22GORRNY.js → chunk-GZMNHAYC.js} +1 -1
  106. package/chunks/{chunk-YZTGGCEE.js → chunk-H3TFIFX3.js} +1 -1
  107. package/chunks/{chunk-6G4V7SE4.js → chunk-HG46TTAG.js} +1 -1
  108. package/chunks/{chunk-FETY36NQ.js → chunk-HGEUHUEV.js} +1 -1
  109. package/chunks/{chunk-KEPC5BOL.js → chunk-IBRQG2MP.js} +12 -15
  110. package/chunks/{chunk-OXR34GCD.js → chunk-IILWL3KY.js} +2054 -146
  111. package/chunks/{chunk-IW6RQPQB.js → chunk-IJOS26LH.js} +1 -3
  112. package/chunks/{chunk-ORFIYTI2.js → chunk-IK2MWJP5.js} +1 -1
  113. package/chunks/{chunk-CMWU6P4D.js → chunk-IRJRB3OD.js} +1 -1
  114. package/chunks/{chunk-QHLHE2OT.js → chunk-IUN5ZMFY.js} +1 -1
  115. package/chunks/{chunk-LYT2OU7D.js → chunk-IXXV6BVB.js} +172 -6
  116. package/chunks/{chunk-R3JIDRUL.js → chunk-J6H4JP25.js} +4 -4
  117. package/chunks/{chunk-NB3NDQQK.js → chunk-J6SBP5G2.js} +1 -1
  118. package/chunks/{chunk-TRQNRP2H.js → chunk-J7LBAKDH.js} +46 -3
  119. package/chunks/{chunk-67XTVRVB.js → chunk-JJFHISXU.js} +30 -25
  120. package/chunks/chunk-JL6APGBX.js +43 -0
  121. package/chunks/{chunk-NX7ZTXFF.js → chunk-JSKEW4E7.js} +2 -1
  122. package/chunks/{chunk-BK7D2JR6.js → chunk-JVTXAA35.js} +3 -3
  123. package/chunks/chunk-K2OJUPOE.js +78 -0
  124. package/chunks/{chunk-G3ZUMSFS.js → chunk-K3U6VB3O.js} +6 -6
  125. package/chunks/{chunk-4I3WFI3U.js → chunk-K4KWLF7Q.js} +12 -12
  126. package/chunks/{chunk-WXPPUPHM.js → chunk-KWFFJ6AK.js} +1 -1
  127. package/chunks/{chunk-46MMBZHI.js → chunk-KZYOFJ6V.js} +4 -4
  128. package/chunks/{chunk-ULZECEIP.js → chunk-LDQHA6L4.js} +2 -20
  129. package/chunks/{chunk-7LTCFO6T.js → chunk-LQBAFO5D.js} +6 -5
  130. package/chunks/{chunk-SOA4HKRJ.js → chunk-LT2XFADM.js} +2 -2
  131. package/chunks/{chunk-JYGIJA4W.js → chunk-LWWRJRCD.js} +1 -1
  132. package/chunks/{chunk-YQGW3M6Z.js → chunk-MFQWRBFB.js} +5 -5
  133. package/chunks/{chunk-TODNHE76.js → chunk-MUFGTWQH.js} +5 -5
  134. package/chunks/{chunk-5DQ4YTIZ.js → chunk-MV5XRRML.js} +3 -3
  135. package/chunks/{chunk-IR6JKBAP.js → chunk-NOUK63IR.js} +2 -2
  136. package/chunks/{chunk-XQ4RDO5B.js → chunk-NV77SEX3.js} +1 -1
  137. package/chunks/{chunk-OFVAS4AR.js → chunk-NWDPOFJI.js} +2 -2
  138. package/chunks/chunk-NY6OPAPS.js +820 -0
  139. package/chunks/{chunk-WDN64MVT.js → chunk-O5VX66FB.js} +127 -18
  140. package/chunks/{chunk-MV5DTLJV.js → chunk-OHCR4O3U.js} +1 -1
  141. package/chunks/{chunk-LEAOJ43M.js → chunk-OKOPKQ2X.js} +1310 -2107
  142. package/chunks/{chunk-B25JYXZE.js → chunk-ONLJBOI2.js} +971 -17
  143. package/chunks/{chunk-QQK4L3UU.js → chunk-OWUAZXXN.js} +132 -26
  144. package/chunks/{chunk-R457KFV7.js → chunk-P42IUOAO.js} +3 -3
  145. package/chunks/{chunk-LUNC5KCL.js → chunk-PRELUGCQ.js} +214 -39
  146. package/chunks/{chunk-5OZUKLL7.js → chunk-QSMQKTXV.js} +4 -4
  147. package/chunks/{chunk-FAJPLSYF.js → chunk-QTQYLQ5A.js} +85 -81
  148. package/chunks/{chunk-CALTQWTZ.js → chunk-QVZDV4ZS.js} +2 -2
  149. package/chunks/{chunk-J6MB5ZHZ.js → chunk-QZW6WRB7.js} +2 -1
  150. package/chunks/{chunk-KFECPHLV.js → chunk-RBWAGV73.js} +3 -3
  151. package/chunks/{chunk-4VY3ITHR.js → chunk-RF5RQRTD.js} +3 -3
  152. package/chunks/{chunk-HIXUUCGY.js → chunk-RPMXMR6U.js} +2 -2
  153. package/chunks/{chunk-3OAXF3UK.js → chunk-RRQEZBL2.js} +3756 -1343
  154. package/chunks/{chunk-4ALNJDHL.js → chunk-RSGEAWFJ.js} +19 -1
  155. package/chunks/{chunk-5BH2AIEY.js → chunk-RUE62UH6.js} +2 -2
  156. package/chunks/{chunk-PQEISIKS.js → chunk-SAH4BD2J.js} +0 -67
  157. package/chunks/{chunk-A7EFXK7P.js → chunk-SAOJHRWY.js} +2 -2
  158. package/chunks/{chunk-JO77FGNZ.js → chunk-SDUIETBG.js} +19 -7
  159. package/chunks/{chunk-6RZX2HIH.js → chunk-TBEXLLAO.js} +2 -2
  160. package/chunks/{chunk-PSPAM24S.js → chunk-TBSCTWKF.js} +6 -0
  161. package/chunks/{chunk-HRPFBHW7.js → chunk-TPKQIA7G.js} +1 -0
  162. package/chunks/{chunk-XDNFODER.js → chunk-TUIW5LLK.js} +1 -1
  163. package/chunks/{chunk-APXIW2TF.js → chunk-TVV5FA3G.js} +4 -4
  164. package/chunks/chunk-U6H3XTFA.js +95 -0
  165. package/chunks/{chunk-S5QR6CB5.js → chunk-UKMWZ5NS.js} +108 -887
  166. package/chunks/{chunk-U6REWGVR.js → chunk-VG2BRSEK.js} +2 -2
  167. package/chunks/chunk-VGBOJH2D.js +127 -0
  168. package/chunks/chunk-VGY2RGXL.js +100 -0
  169. package/chunks/{chunk-ZP5XDLSA.js → chunk-VLWG3EHY.js} +12 -12
  170. package/chunks/{chunk-4JNHNVAZ.js → chunk-W547PYQ7.js} +9 -4
  171. package/chunks/{chunk-7VEYUF3N.js → chunk-W5ZQMAEM.js} +1 -1
  172. package/chunks/{chunk-QAZ2MGYT.js → chunk-W7JJLUSB.js} +2 -2
  173. package/chunks/{chunk-CCBTNJB4.js → chunk-W7Q7XDQI.js} +39 -27
  174. package/chunks/{chunk-DARWOZY6.js → chunk-WD6YQI5M.js} +1 -1
  175. package/chunks/{chunk-F2NYVASI.js → chunk-WXAWG3JS.js} +30 -13
  176. package/chunks/{chunk-NPKCVSXX.js → chunk-XB5JRCAM.js} +11 -9
  177. package/chunks/{chunk-XSOXPG2L.js → chunk-XE46RQFI.js} +136 -8
  178. package/chunks/{chunk-QTNCGZHQ.js → chunk-XX5HQLCZ.js} +16 -0
  179. package/chunks/{chunk-2Z3T52OC.js → chunk-Y5TM7SBV.js} +7 -2
  180. package/chunks/chunk-YC6XOB5N.js +691 -0
  181. package/chunks/{chunk-CWVZBIZJ.js → chunk-YDW4ERSS.js} +1 -1
  182. package/chunks/{chunk-TRWQQBVH.js → chunk-YGCTOXUT.js} +10 -24
  183. package/chunks/{chunk-WK7P62DV.js → chunk-YKC67ZEF.js} +6 -6
  184. package/chunks/{chunk-KA5HR3G2.js → chunk-YKM6MITI.js} +5 -5
  185. package/chunks/{chunk-X7LFJF5D.js → chunk-YM6KUQ2S.js} +36 -84
  186. package/chunks/{chunk-HZ2HUXX7.js → chunk-YS2ZJSOA.js} +29 -12
  187. package/chunks/{chunk-G37O7YO6.js → chunk-ZAWM6KRF.js} +3 -3
  188. package/chunks/{chunk-H3Q3RSKZ.js → chunk-ZFIWHBJ3.js} +1 -1
  189. package/chunks/{chunk-XBVNNDPK.js → chunk-ZHKTKHMO.js} +8 -1
  190. package/chunks/{chunk-YLOHCA6I.js → chunk-ZKWO4CF4.js} +2 -2
  191. package/chunks/{chunk-VJJXG73H.js → chunk-ZMQL5BL5.js} +21 -6
  192. package/chunks/{chunk-FGHPZGOP.js → chunk-ZMUYBOYB.js} +39 -55
  193. package/chunks/{chunk-FV4DM2M4.js → chunk-ZNI3YJHS.js} +26 -6
  194. package/chunks/{chunk-565U2ANU.js → chunk-ZTTC7T4X.js} +1 -1
  195. package/chunks/{chunk-7OCIQNKX.js → chunk-ZW2EUO2A.js} +1 -1
  196. package/chunks/codex-subagent-executor-26XOHVKH.js +585 -0
  197. package/chunks/{config-utils-GPLIABL2.js → config-utils-JUG3MOYN.js} +68 -57
  198. package/chunks/{contextCommand-NCUQUDBY.js → contextCommand-6K3POZFA.js} +65 -54
  199. package/chunks/{core-runtime-WKYKWVYU.js → core-runtime-XQFZLA2V.js} +66 -55
  200. package/chunks/{create-sub-session-TGIX63YU.js → create-sub-session-4UJ6RM6W.js} +5 -2
  201. package/chunks/{create-sub-session-PPLXB3JJ.js → create-sub-session-T4IYIOC7.js} +178 -91
  202. package/chunks/{cron-create-GTPVMJCF.js → cron-create-6466RWSO.js} +2 -2
  203. package/chunks/{cron-delete-ZBK27Z4K.js → cron-delete-W4QUWHOA.js} +2 -2
  204. package/chunks/{cron-list-KTFKFDKC.js → cron-list-Q5LJ5PZE.js} +2 -2
  205. package/chunks/{daemon-2CKIAO3I.js → daemon-PHPJUXDZ.js} +4 -2
  206. package/chunks/{daemon-git-worktree-guard-73ZWOLKL.js → daemon-git-worktree-guard-5WEMZ64U.js} +65 -54
  207. package/chunks/{daemon-status-provider-OK7VONJG.js → daemon-status-provider-GMD7QD4T.js} +74 -63
  208. package/chunks/{daemon-trust-policy-CAUCREG2.js → daemon-trust-policy-IPBZES2Z.js} +71 -60
  209. package/chunks/{daemon-trust-policy-monitor-3Y36OOEQ.js → daemon-trust-policy-monitor-MHYEN7X7.js} +71 -60
  210. package/chunks/{de-UU2YTO37.js → de-OOLZAU2U.js} +1 -1
  211. package/chunks/{deferred-core-runtime-Q7WFWYD3.js → deferred-core-runtime-CY43FZNZ.js} +63 -52
  212. package/chunks/{discovery-XP4RMDUM.js → discovery-5KUEPR65.js} +2 -2
  213. package/chunks/{display-image-CTNHJRZC.js → display-image-6AZIHP3J.js} +3 -3
  214. package/chunks/{dist-F34J4FZX.js → dist-2QYIVNS6.js} +2 -5
  215. package/chunks/{dist-6YDUH3BB.js → dist-GIMQXYLI.js} +10 -631
  216. package/chunks/{dist-NP7QKLVG.js → dist-GUB7QRYA.js} +3 -6
  217. package/chunks/{dist-Y5KC3IHW.js → dist-L45UB6DG.js} +233 -35
  218. package/chunks/{dist-XLV33CLY.js → dist-MPUZZOG5.js} +5 -18
  219. package/chunks/{dist-ZDNJK74R.js → dist-PA7WPFVE.js} +6 -37
  220. package/chunks/{dist-F6JLAJLE.js → dist-T6DDPDLQ.js} +16 -36
  221. package/chunks/{dist-BNQVF565.js → dist-TFGETXFN.js} +14 -37
  222. package/chunks/{dist-UFTFGI6I.js → dist-VDLSBCLM.js} +2 -6
  223. package/chunks/{edit-YJD6IETK.js → edit-6NUP5IPX.js} +48 -38
  224. package/chunks/{en-YJNRUQG4.js → en-ZSZW3PZX.js} +4 -1
  225. package/chunks/{enter-worktree-YFTKHXHZ.js → enter-worktree-EETDMJRF.js} +5 -5
  226. package/chunks/{enterPlanMode-EFPVTWIH.js → enterPlanMode-AZHYHEII.js} +48 -38
  227. package/chunks/{environment-HP3AXFTB.js → environment-ON6GIQ4F.js} +66 -55
  228. package/chunks/{errors-22ON46G7.js → errors-DQE63SCC.js} +65 -54
  229. package/chunks/exec-66WQIVYU.js +505 -0
  230. package/chunks/{exit-worktree-NF2XEMES.js → exit-worktree-DIPJ6S55.js} +5 -5
  231. package/chunks/{exitPlanMode-MOQUNCBH.js → exitPlanMode-NHBV6LAI.js} +48 -38
  232. package/chunks/{fast-path-2X7BPMXX.js → fast-path-EPJSUZZC.js} +7 -7
  233. package/chunks/{fast-path-settings-SATXY3PD.js → fast-path-settings-XDYX7X5Z.js} +2 -2
  234. package/chunks/{fr-HKNWVXRJ.js → fr-JJWM2HUS.js} +1 -1
  235. package/chunks/{glob-Y7ACIB3P.js → glob-MNEXQ2NV.js} +51 -41
  236. package/chunks/{goal-tools-DABMICUC.js → goal-tools-D2A4QBCJ.js} +54 -40
  237. package/chunks/{grep-BLHF2S5D.js → grep-EFWPV3MM.js} +2 -2
  238. package/chunks/{handleAutoUpdate-MCAMHYDI.js → handleAutoUpdate-2RY3OQA6.js} +67 -56
  239. package/chunks/{i18n-C3GDCALP.js → i18n-HTHDB3I7.js} +64 -53
  240. package/chunks/{image-gen-XP4NNIYG.js → image-gen-2PHED3P4.js} +8 -6
  241. package/chunks/{initializer-4URDQL2G.js → initializer-JEVLJCQA.js} +71 -60
  242. package/chunks/{installationInfo-LBOL6SBV.js → installationInfo-ITRB6J4L.js} +63 -52
  243. package/chunks/{ja-GJS5RZGU.js → ja-L67TXFDJ.js} +1 -1
  244. package/chunks/list-KOUIMHT5.js +133 -0
  245. package/chunks/{list-agents-2CXPGJUE.js → list-agents-IY4NEWLP.js} +17 -7
  246. package/chunks/{llm-2KPNSAVY.js → llm-F7WHGESY.js} +132 -120
  247. package/chunks/{llm-content-generator-GR3FOHLB.js → llm-content-generator-NYQ2NAVA.js} +6 -5
  248. package/chunks/{loadedSettingsAdapter-DVKROEJD.js → loadedSettingsAdapter-HZUAX5CX.js} +71 -60
  249. package/chunks/{loggingContentGenerator-P4K6K5W4.js → loggingContentGenerator-WMNU7C5J.js} +70 -59
  250. package/chunks/{loop-wakeup-HL6XOWI4.js → loop-wakeup-ANX25YW2.js} +3 -3
  251. package/chunks/{ls-YV7RKLKY.js → ls-4XCMJNZF.js} +4 -4
  252. package/chunks/{lsp-NO3AMRZT.js → lsp-K5E2Y64R.js} +1 -1
  253. package/chunks/{managed-npm-update-VWBKHNIN.js → managed-npm-update-EJJB65QI.js} +63 -52
  254. package/chunks/mcp-I73R6HS3.js +127 -0
  255. package/chunks/{monitor-A255TNZR.js → monitor-T56GJNA4.js} +50 -40
  256. package/chunks/{nonInteractiveCli-LXGIKQAT.js → nonInteractiveCli-CKHHJ423.js} +120 -109
  257. package/chunks/{notebook-edit-5UYHS2DM.js → notebook-edit-W5TU3EZ3.js} +48 -38
  258. package/chunks/openai-WX26N5OJ.js +47 -0
  259. package/chunks/{openaiContentGenerator-A6MAMEO5.js → openaiContentGenerator-TH6YAWAH.js} +33 -25
  260. package/chunks/openaiResponsesContentGenerator-EWLWQPKS.js +1738 -0
  261. package/chunks/{pidfile-B7DZC4TP.js → pidfile-RCC6TCEM.js} +63 -52
  262. package/chunks/process-registry-X6ZCASEN.js +10 -0
  263. package/chunks/{processUtils-BPZ2MCZS.js → processUtils-DQDQBRMC.js} +2 -2
  264. package/chunks/{prompt-terminal-ledger-FYYTAOXS.js → prompt-terminal-ledger-2LXWAGWU.js} +64 -53
  265. package/chunks/{pt-FXMYXEUV.js → pt-77SBDL4B.js} +1 -1
  266. package/chunks/{qwenContentGenerator-4IOJFD4S.js → qwenContentGenerator-LG65Z2YV.js} +61 -49
  267. package/chunks/{qwenOAuth2-KX6LVYQ3.js → qwenOAuth2-PJ63CCFD.js} +7 -5
  268. package/chunks/{read-file-A4H4O3VQ.js → read-file-72HMRUT4.js} +12 -9
  269. package/chunks/{read-mcp-resource-D3N75DGF.js → read-mcp-resource-NPF44YSC.js} +1 -1
  270. package/chunks/{record-artifact-Q5CRGJTP.js → record-artifact-MDXCCW2J.js} +3 -3
  271. package/chunks/record-source-VJLKDGGR.js +22 -0
  272. package/chunks/{report-findings-TJ34R7QK.js → report-findings-CZTYMZTC.js} +4 -4
  273. package/chunks/{request-shutdown-LRKMTBAD.js → request-shutdown-KOZHPVZU.js} +5 -5
  274. package/chunks/{resumeHistoryUtils-YQQ43E4N.js → resumeHistoryUtils-S2Q3M3EH.js} +69 -58
  275. package/chunks/{ripGrep-W32NWFTA.js → ripGrep-B2I3L5CO.js} +17 -13
  276. package/chunks/{ru-RMHURE5U.js → ru-UYWHKWF2.js} +1 -1
  277. package/chunks/{run-qwen-serve-WBSWWIRV.js → run-qwen-serve-AOPYFCVP.js} +305 -132
  278. package/chunks/{runtime-VRVBX2E5.js → runtime-TZMHKZAP.js} +77 -66
  279. package/chunks/{scheduled-tasks-D65KJDA3.js → scheduled-tasks-7RL6ZOYT.js} +72 -60
  280. package/chunks/{scheduler-M2YPN7Z7.js → scheduler-D6RLOFNU.js} +65 -54
  281. package/chunks/{sdk-exporters-grpc-MXTVSE3C.js → sdk-exporters-grpc-Y2ZUQDUQ.js} +2 -2
  282. package/chunks/{sdk-exporters-http-7R2ARBPV.js → sdk-exporters-http-VWTF4W6K.js} +3 -3
  283. package/chunks/{sdk-impl-YOLO7LV4.js → sdk-impl-G6FVTBQZ.js} +9 -9
  284. package/chunks/{send-message-76BKWKFZ.js → send-message-MMZVSS7P.js} +12 -9
  285. package/chunks/{serve-BE3H2P6P.js → serve-HWWDYI37.js} +72 -61
  286. package/chunks/{server-FLY5JERG.js → server-MD2X5U5L.js} +3156 -564
  287. package/chunks/{session-JVN62R5K.js → session-AFUMFNN7.js} +124 -113
  288. package/chunks/{session-attachments-root-7ACGLHXA.js → session-attachments-root-QPN3YWTY.js} +63 -52
  289. package/chunks/{session-pr-refresh-TQS57SDK.js → session-pr-refresh-4Y2ANMJX.js} +72 -60
  290. package/chunks/{settings-D44YMZFT.js → settings-QQRQ2LR7.js} +74 -63
  291. package/chunks/{shell-3VE6I4V5.js → shell-NUYUYMVI.js} +48 -38
  292. package/chunks/{skill-FHEGRRZU.js → skill-KHLDVOXW.js} +68 -30
  293. package/chunks/{skill-settings-VHEJMBFL.js → skill-settings-INLEGDEZ.js} +70 -59
  294. package/chunks/{spawnChannel-T6MX2ZDN.js → spawnChannel-KBGZHW2G.js} +67 -56
  295. package/chunks/{standalone-update-QUGHFMCS.js → standalone-update-3QP5NDVJ.js} +65 -54
  296. package/chunks/{start-opentui-ui-IHIIZ2LE.js → start-opentui-ui-VBT3XDWN.js} +2682 -2153
  297. package/chunks/{startInteractiveUI-LR7K2ARZ.js → startInteractiveUI-AZHKCHMR.js} +1562 -2317
  298. package/chunks/{syntheticOutput-D2P5V6RG.js → syntheticOutput-KRASPDE3.js} +2 -2
  299. package/chunks/{task-create-MWXJFRRM.js → task-create-TNXNT7ZD.js} +8 -8
  300. package/chunks/{task-list-EYO3FE57.js → task-list-FHNIJDKT.js} +1 -1
  301. package/chunks/{task-stop-BFSKRTGV.js → task-stop-MG4ZMTEI.js} +1 -1
  302. package/chunks/{task-update-2JJJRHMT.js → task-update-4HU62CJT.js} +8 -8
  303. package/chunks/{team-create-GY3VFY47.js → team-create-K5DNSJXR.js} +50 -40
  304. package/chunks/{team-delete-IQZ6XGFI.js → team-delete-2T44GUNN.js} +1 -1
  305. package/chunks/{team-plan-approval-BQPGZOT5.js → team-plan-approval-2ZNAQT2A.js} +48 -38
  306. package/chunks/{terminal-image-renderer-YNYW5CQG.js → terminal-image-renderer-23CW4A6Q.js} +65 -54
  307. package/chunks/{theme-manager-U6CIK3GM.js → theme-manager-G2333AMH.js} +63 -52
  308. package/chunks/{todoWrite-5ERKFWAK.js → todoWrite-BO2GR5MN.js} +4 -4
  309. package/chunks/{tool-search-XI3QWD5I.js → tool-search-MKQCKXN5.js} +22 -15
  310. package/chunks/{total-session-admission-3SNSJJ32.js → total-session-admission-ENKTM2KX.js} +69 -58
  311. package/chunks/{trustedFolders-OVAQKNV5.js → trustedFolders-2ETDL7OD.js} +64 -53
  312. package/chunks/{update-relaunch-XV5O74E3.js → update-relaunch-FMVNN5KA.js} +5 -5
  313. package/chunks/{updateCheck-CHUYWD6L.js → updateCheck-KWRV5KLJ.js} +66 -55
  314. package/chunks/{useAutoAcceptIndicator-VKSVIXZC.js → useAutoAcceptIndicator-7AUXAIQF.js} +73 -62
  315. package/chunks/{validateNonInterActiveAuth-ZNUTD3E5.js → validateNonInterActiveAuth-NETKLLDV.js} +117 -106
  316. package/chunks/{version-EK7VAGSI.js → version-DACNN2ZM.js} +1 -1
  317. package/chunks/{web-fetch-24KZO763.js → web-fetch-CIVCRET4.js} +16 -12
  318. package/chunks/{web-search-CRNXKZ2X.js → web-search-GOHZRGMM.js} +389 -327
  319. package/chunks/{web-shell-static-BFDESDD4.js → web-shell-static-T7UGLVE4.js} +2 -7
  320. package/chunks/workflow-IL2FOALZ.js +1324 -0
  321. package/chunks/workspace-providers-status-YGXL6N5U.js +131 -0
  322. package/chunks/{workspace-registration-store-HKLJEDQX.js → workspace-registration-store-E4IAOFFZ.js} +3 -1
  323. package/chunks/{workspace-registry-7RDDOBLN.js → workspace-registry-KX6BIBYK.js} +69 -58
  324. package/chunks/{workspace-runtime-coordinator-LEPDPXJO.js → workspace-runtime-coordinator-2KYYGDDR.js} +72 -59
  325. package/chunks/{workspace-service-5IFDCNN3.js → workspace-service-5Q6LWBYR.js} +76 -65
  326. package/chunks/{workspace-skills-status-FJ3HNH4H.js → workspace-skills-status-PJZTFPVV.js} +72 -61
  327. package/chunks/{workspace-trust-reconciler-PQFHIWLR.js → workspace-trust-reconciler-HS6PWNEA.js} +77 -66
  328. package/chunks/{write-file-ERG67ZFX.js → write-file-JB3DRM7O.js} +50 -40
  329. package/chunks/{zh-VBFCRQBL.js → zh-7UJA4ICT.js} +4 -1
  330. package/chunks/{zh-TW-N2TBF2F2.js → zh-TW-RV24PWUI.js} +4 -1
  331. package/chunks/{zoom-image-WQYEC3SR.js → zoom-image-AVHQFOOQ.js} +12 -9
  332. package/cli.js +16 -16
  333. package/codeModeHost.js +4425 -0
  334. package/export-transcript-document.css +1 -0
  335. package/export-transcript-document.js +164 -165
  336. package/locales/ca.js +2 -2
  337. package/locales/de.js +2 -2
  338. package/locales/en.js +5 -2
  339. package/locales/fr.js +2 -2
  340. package/locales/ja.js +2 -2
  341. package/locales/pt.js +2 -2
  342. package/locales/ru.js +2 -2
  343. package/locales/zh-TW.js +5 -2
  344. package/locales/zh.js +5 -2
  345. package/package.json +6 -4
  346. package/web-shell/assets/{abnfDiagram-VCTEODGH-BRLgQbnT.js → abnfDiagram-VCTEODGH-BH2nK5Z_.js} +1 -1
  347. package/web-shell/assets/{arc-qAF9_XsR.js → arc-CUUQ6krv.js} +1 -1
  348. package/web-shell/assets/{architectureDiagram-5GKGNRK7-BorUttEz.js → architectureDiagram-5GKGNRK7-CJjiRuGx.js} +1 -1
  349. package/web-shell/assets/{blockDiagram-NRAW4CY4-Bj0qZVxu.js → blockDiagram-NRAW4CY4-GCDyU9ZX.js} +1 -1
  350. package/web-shell/assets/{c4Diagram-UCG6FXSJ-BTqJis32.js → c4Diagram-UCG6FXSJ-C68MiN6h.js} +1 -1
  351. package/web-shell/assets/channel-DauVlmdF.js +1 -0
  352. package/web-shell/assets/{chunk-2Q5K7J3B-RrQ5X8m-.js → chunk-2Q5K7J3B-_8B6frXZ.js} +1 -1
  353. package/web-shell/assets/{chunk-5VM5RSS4-uUjDl8wO.js → chunk-5VM5RSS4-CroSinX7.js} +1 -1
  354. package/web-shell/assets/{chunk-F27PBJKO-C3JhpyzI.js → chunk-F27PBJKO-CGn4Z0Fx.js} +1 -1
  355. package/web-shell/assets/{chunk-G27WJ6UU-C8ZNFs7F.js → chunk-G27WJ6UU-BI5nLQcf.js} +1 -1
  356. package/web-shell/assets/{chunk-JWPE2WC7-DNpXtEOs.js → chunk-JWPE2WC7-CYJH0FuH.js} +1 -1
  357. package/web-shell/assets/{chunk-LCL6LL3I-DagA2ZLw.js → chunk-LCL6LL3I-DjWZUqA1.js} +1 -1
  358. package/web-shell/assets/{chunk-POPQ4Y6H-R23uH7Xm.js → chunk-POPQ4Y6H-DcTkIHm8.js} +1 -1
  359. package/web-shell/assets/{chunk-SVP7TREG-Qz9RN_BR.js → chunk-SVP7TREG-E8sZT5uK.js} +1 -1
  360. package/web-shell/assets/{chunk-XXDRQBXY-jYb1_hni.js → chunk-XXDRQBXY-CurjPKw_.js} +1 -1
  361. package/web-shell/assets/classDiagram-DTDB5LWJ-BuIh7bj1.js +1 -0
  362. package/web-shell/assets/classDiagram-v2-JRS7N3AN-BuIh7bj1.js +1 -0
  363. package/web-shell/assets/{cose-bilkent-JH36ORCC-Cv2OunpE.js → cose-bilkent-JH36ORCC-CJEnNhth.js} +1 -1
  364. package/web-shell/assets/{cynefin-OW5HDTMX-LH42KFJx.js → cynefin-OW5HDTMX-jwEkm0yw.js} +1 -1
  365. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-Dha4_OoR.js → cynefinDiagram-5FMLGOSQ-B-OVQ6AO.js} +1 -1
  366. package/web-shell/assets/{dagre-3AP2YEHR-Br5lnUKD.js → dagre-3AP2YEHR-CKKK9WNR.js} +1 -1
  367. package/web-shell/assets/{diagram-S7CK7UJ4-dpKq2bBX.js → diagram-S7CK7UJ4-D486veFQ.js} +1 -1
  368. package/web-shell/assets/{diagram-UQ7AKVKN-BAgHWpXr.js → diagram-UQ7AKVKN-C3GujqHv.js} +1 -1
  369. package/web-shell/assets/{diagram-VSXAHHWV-GRRzpyE2.js → diagram-VSXAHHWV-BrOTDwuU.js} +1 -1
  370. package/web-shell/assets/{diagram-VX7I27RA-BNFiaYpG.js → diagram-VX7I27RA-C4D9kWE3.js} +1 -1
  371. package/web-shell/assets/{diagram-Z3DM3KII-BisZzB_h.js → diagram-Z3DM3KII-7rAManT0.js} +1 -1
  372. package/web-shell/assets/{ebnfDiagram-PWID7BFC-B1xbwycf.js → ebnfDiagram-PWID7BFC-CqVzKOdr.js} +1 -1
  373. package/web-shell/assets/{erDiagram-SSCWMZ5O-CQMzbGE5.js → erDiagram-SSCWMZ5O-D2s08fc_.js} +1 -1
  374. package/web-shell/assets/{flowDiagram-A5DVABFB-CZ_Zondl.js → flowDiagram-A5DVABFB-CrKtBxB2.js} +1 -1
  375. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BTh2ShxS.js → ganttDiagram-EL5Y4UJY-CD1CKdlt.js} +1 -1
  376. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-oHOB-Uxt.js → gitGraphDiagram-WWUBYQGX-CHDXdVNn.js} +1 -1
  377. package/web-shell/assets/index-D8tzgUOC.css +36 -0
  378. package/web-shell/assets/{index-DWoFMu5x.js → index-DWz95m74.js} +1 -1
  379. package/web-shell/assets/index-cDFf68Wd.js +2204 -0
  380. package/web-shell/assets/{infoDiagram-RXCK75RN-C0QpudbG.js → infoDiagram-RXCK75RN-Cr1oLCwe.js} +1 -1
  381. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-a6B741uT.js → ishikawaDiagram-5VMMS53U--RghV1mm.js} +1 -1
  382. package/web-shell/assets/{journeyDiagram-EYS64GPL-Dbht9ICp.js → journeyDiagram-EYS64GPL-MN1ZkGW8.js} +1 -1
  383. package/web-shell/assets/{kanban-definition-3QL26DDD-D4OFR8-h.js → kanban-definition-3QL26DDD-DL05VTn0.js} +1 -1
  384. package/web-shell/assets/{layout-Dvdh5jRH.js → layout-D_TvQzvn.js} +1 -1
  385. package/web-shell/assets/{linear-Dvc6KIW2.js → linear-B_0OH6XF.js} +1 -1
  386. package/web-shell/assets/{mermaid.core-CB36RfIb.js → mermaid.core-B9Nklh9I.js} +6 -6
  387. package/web-shell/assets/{mindmap-definition-FBJOCRG2-Fmqo1CjP.js → mindmap-definition-FBJOCRG2-CevIQ0LR.js} +1 -1
  388. package/web-shell/assets/{pegDiagram-XKGWAZYB-CCxYBoA4.js → pegDiagram-XKGWAZYB-DQ8PIv0d.js} +1 -1
  389. package/web-shell/assets/{pieDiagram-E7YTZNPT-BVHKQFzt.js → pieDiagram-E7YTZNPT-BVTV1pPe.js} +1 -1
  390. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-l95IznwR.js → quadrantDiagram-AXDQQJYC-DHN6nhpe.js} +1 -1
  391. package/web-shell/assets/qwen-code-notification-BRVagufF.png +0 -0
  392. package/web-shell/assets/{railroadDiagram-O6MQD6OU-BlLdRdXp.js → railroadDiagram-O6MQD6OU-8HOyX0u-.js} +1 -1
  393. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BkDLBR5w.js → requirementDiagram-EFPCY7ZU-9W4_14i8.js} +1 -1
  394. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-jAIqRp65.js → sankeyDiagram-P5KCCOFB-DSUBB2XP.js} +1 -1
  395. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-f-soZYPr.js → sequenceDiagram-WJ2MYXX4-DD3jH6Jn.js} +1 -1
  396. package/web-shell/assets/{sizeCapture-X5ZJPWSS-BzOuAfB2.js → sizeCapture-X5ZJPWSS-RAFTU3Cz.js} +1 -1
  397. package/web-shell/assets/{stateDiagram-HBIQ2CUA-BPLSs12r.js → stateDiagram-HBIQ2CUA-Drk-oZ2x.js} +1 -1
  398. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-QzYteVIm.js +1 -0
  399. package/web-shell/assets/{swimlanes-XN3QIQJK-D-9E_RIR.js → swimlanes-XN3QIQJK-Cy2nlOGx.js} +1 -1
  400. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-xTr-HG26.js +8 -0
  401. package/web-shell/assets/{timeline-definition-24CTP7MA-CT56K-gV.js → timeline-definition-24CTP7MA-B7outYof.js} +1 -1
  402. package/web-shell/assets/{vennDiagram-4TSXK5OY-B-vi4IyO.js → vennDiagram-4TSXK5OY-Di_u1Ic6.js} +1 -1
  403. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-C9O7Ju98.js → wardleyDiagram-VM6X3IG4-DYocuCAM.js} +1 -1
  404. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-6d8w3jg2.js → xychartDiagram-S5SC5T6Z-AADDse54.js} +1 -1
  405. package/web-shell/index.html +29 -5
  406. package/chunks/chunk-V7RNNPGC.js +0 -44
  407. package/chunks/list-JOGBAC2R.js +0 -122
  408. package/chunks/mcp-6YYNSYLK.js +0 -116
  409. package/chunks/workflow-HD5NYMW5.js +0 -2907
  410. package/chunks/workspace-providers-status-MAM42IZS.js +0 -120
  411. package/web-shell/assets/channel-COIuCrVH.js +0 -1
  412. package/web-shell/assets/classDiagram-DTDB5LWJ-DoX6OYqu.js +0 -1
  413. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DoX6OYqu.js +0 -1
  414. package/web-shell/assets/index-CI1ysIEv.js +0 -2154
  415. package/web-shell/assets/index-CpxXGH-8.css +0 -36
  416. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-IRul-LaT.js +0 -1
  417. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6lgKepA.js +0 -8
  418. package/chunks/{chunk-JA5CBKRP.js → chunk-7NXSVSFB.js} +0 -0
  419. package/chunks/{open-with-auth-6MVIHMXB.js → open-with-auth-XFCCJOO6.js} +3 -3
@@ -11,12 +11,12 @@ import {
11
11
  sendMessage,
12
12
  sendTyping,
13
13
  uploadToCdn
14
- } from "./chunk-JYGIJA4W.js";
14
+ } from "./chunk-LWWRJRCD.js";
15
15
  import {
16
16
  ChannelBase,
17
17
  isTerminalTaskLifecycleType
18
- } from "./chunk-WDVV3LRM.js";
19
- import "./chunk-IW6RQPQB.js";
18
+ } from "./chunk-EPVEPTI3.js";
19
+ import "./chunk-IJOS26LH.js";
20
20
  import "./chunk-CQ35AJ4Z.js";
21
21
  import {
22
22
  init_esbuild_shims
@@ -483,9 +483,6 @@ var WeixinChannel = class extends ChannelBase {
483
483
  senderName: msg.fromUserId,
484
484
  chatId: msg.fromUserId,
485
485
  text: msg.text,
486
- // A caption-less image or file carries only the placeholder above,
487
- // which no user action can prefix -- gating it on `messagePrefix`
488
- // would drop every WeChat media message.
489
486
  ...msg.syntheticText ? { syntheticText: true } : {},
490
487
  isGroup: false,
491
488
  isMentioned: false,
@@ -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-EPVEPTI3.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 {
@@ -1936,8 +2148,6 @@ Ask the bot operator to approve you with:
1936
2148
  messageId: `todo-${fingerprint}`,
1937
2149
  text: `Process this DingTalk todo:
1938
2150
  ${truncateCodePoints(title, MAX_COMMENT_CHARS)}`,
1939
- displayText: title,
1940
- bypassMessagePrefix: true,
1941
2151
  isGroup: true,
1942
2152
  isMentioned: true,
1943
2153
  isReplyToBot: false,
@@ -2110,12 +2320,9 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2110
2320
  }
2111
2321
  if (this.shouldFilterImMessage(source, message)) {
2112
2322
  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
- }
2323
+ const envelope = this.createImEnvelope(source, message);
2324
+ if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required" && !this.queuedMessages.has(key) && !this.cursor.processedMessages.includes(key) && !this.hasPendingMessage(key)) {
2325
+ this.recordPendingGroupHistory(envelope);
2119
2326
  }
2120
2327
  }
2121
2328
  this.removePersistedPendingMessageForSource(key, source);
@@ -2288,14 +2495,7 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2288
2495
  }
2289
2496
  }
2290
2497
  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
- }
2498
+ 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
2499
  const target = source.kind === "direct" ? { kind: "direct", openDingTalkId: message.senderId } : { kind: "group", conversationId: message.conversationId };
2300
2500
  this.rememberImTarget(message.conversationId, target);
2301
2501
  if (!text) {
@@ -2303,13 +2503,14 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2303
2503
  this.saveCursor();
2304
2504
  return;
2305
2505
  }
2306
- const documentNotification = providerDocumentNotification ?? (source.kind === "direct" ? parseDocumentMentionNotification(text) : void 0);
2506
+ const documentNotification = source.kind === "direct" ? parseDocumentMentionNotification(text) : void 0;
2307
2507
  if (documentNotification) {
2308
2508
  await this.processDocumentNotification(message, key, documentNotification);
2309
2509
  return;
2310
2510
  }
2311
2511
  const envelope = this.createImEnvelope(source, message, text);
2312
2512
  this.rememberInboundReactionTarget(message.conversationId, message.messageId);
2513
+ this.imResponseKinds.set(key, source.kind !== "direct");
2313
2514
  try {
2314
2515
  await this.handleInbound(envelope);
2315
2516
  } catch (error) {
@@ -2321,6 +2522,8 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2321
2522
  throw error;
2322
2523
  }
2323
2524
  return;
2525
+ } finally {
2526
+ this.imResponseKinds.delete(key);
2324
2527
  }
2325
2528
  this.clearInboundFailure(key);
2326
2529
  this.removePendingMessage(key);
@@ -2336,7 +2539,6 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2336
2539
  chatName: message.conversationId,
2337
2540
  messageId: message.messageId,
2338
2541
  text,
2339
- bypassMessagePrefix: true,
2340
2542
  ...message.referencedText ? { referencedText: message.referencedText } : {},
2341
2543
  isGroup: source.kind !== "direct",
2342
2544
  isMentioned: source.kind === "at",
@@ -2513,7 +2715,6 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2513
2715
  threadId: notification.commentKey,
2514
2716
  messageId: message.messageId,
2515
2717
  text: truncateCodePoints(notification.request, MAX_COMMENT_CHARS),
2516
- bypassMessagePrefix: true,
2517
2718
  isGroup: true,
2518
2719
  isMentioned: true,
2519
2720
  isReplyToBot: false,
@@ -2576,12 +2777,9 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
2576
2777
  continue;
2577
2778
  if (this.shouldFilterImMessage(pending.source, pending.message)) {
2578
2779
  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
- }
2780
+ const envelope = this.createImEnvelope(pending.source, pending.message);
2781
+ if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required") {
2782
+ this.recordPendingGroupHistory(envelope);
2585
2783
  }
2586
2784
  }
2587
2785
  this.removePersistedPendingMessageForSource(key, pending.source);
@@ -5,12 +5,9 @@ import {
5
5
  getGlobalQwenDir,
6
6
  getWorkspaceScopeDirName,
7
7
  sanitizeDisplayText,
8
- sanitizeLogText,
9
- sanitizePromptText,
10
- stripMessagePrefix,
11
- truncateCodePoints
12
- } from "./chunk-WDVV3LRM.js";
13
- import "./chunk-IW6RQPQB.js";
8
+ sanitizeLogText
9
+ } from "./chunk-EPVEPTI3.js";
10
+ import "./chunk-IJOS26LH.js";
14
11
  import "./chunk-CQ35AJ4Z.js";
15
12
  import {
16
13
  require_dist
@@ -3920,7 +3917,7 @@ function isInboundEnvelope(value) {
3920
3917
  if (value === null || typeof value !== "object")
3921
3918
  return false;
3922
3919
  const envelope = value;
3923
- return typeof envelope.channelName === "string" && typeof envelope.senderId === "string" && typeof envelope.senderName === "string" && typeof envelope.chatId === "string" && typeof envelope.text === "string" && typeof envelope.isGroup === "boolean" && typeof envelope.isMentioned === "boolean" && typeof envelope.isReplyToBot === "boolean" && (envelope.chatName === void 0 || typeof envelope.chatName === "string") && (envelope.threadId === void 0 || typeof envelope.threadId === "string") && (envelope.messageId === void 0 || typeof envelope.messageId === "string") && (envelope.referencedText === void 0 || typeof envelope.referencedText === "string") && isOptionalStringArray(envelope.mentionedMemberIds) && (envelope.imageBase64 === void 0 || typeof envelope.imageBase64 === "string") && (envelope.imageMimeType === void 0 || typeof envelope.imageMimeType === "string") && (envelope.attachments === void 0 || Array.isArray(envelope.attachments)) && (envelope.metadata === void 0 || typeof envelope.metadata === "string") && (envelope.bypassMessagePrefix === void 0 || envelope.bypassMessagePrefix === true) && (envelope.alreadyPrefixed === void 0 || envelope.alreadyPrefixed === true);
3920
+ return typeof envelope.channelName === "string" && typeof envelope.senderId === "string" && typeof envelope.senderName === "string" && typeof envelope.chatId === "string" && typeof envelope.text === "string" && typeof envelope.isGroup === "boolean" && typeof envelope.isMentioned === "boolean" && typeof envelope.isReplyToBot === "boolean" && (envelope.chatName === void 0 || typeof envelope.chatName === "string") && (envelope.threadId === void 0 || typeof envelope.threadId === "string") && (envelope.messageId === void 0 || typeof envelope.messageId === "string") && (envelope.referencedText === void 0 || typeof envelope.referencedText === "string") && isOptionalStringArray(envelope.mentionedMemberIds) && (envelope.imageBase64 === void 0 || typeof envelope.imageBase64 === "string") && (envelope.imageMimeType === void 0 || typeof envelope.imageMimeType === "string") && (envelope.attachments === void 0 || Array.isArray(envelope.attachments)) && (envelope.metadata === void 0 || typeof envelope.metadata === "string") && (envelope.alreadyPrefixed === void 0 || envelope.alreadyPrefixed === true);
3924
3921
  }
3925
3922
  __name(isInboundEnvelope, "isInboundEnvelope");
3926
3923
  function isInboundTaskRecord(value) {
@@ -4611,7 +4608,6 @@ var GithubChannel = class extends PollingChannelBase {
4611
4608
  return;
4612
4609
  const meta = reason === "review_requested" ? await this.fetchPrMeta(ctx) : await this.fetchIssueMeta(ctx);
4613
4610
  const title = meta.title || ctx.subjectTitle;
4614
- const displayTitle = truncateCodePoints(sanitizePromptText(title), 500);
4615
4611
  const details = reason === "review_requested" ? `Author: ${meta.user?.login || "unknown"} | State: ${meta.state || "unknown"} | Draft: ${meta.draft ? "true" : "false"} | Branch: ${meta.head?.ref || "unknown"} \u2192 ${meta.base?.ref || "unknown"}` : `Author: ${meta.user?.login || "unknown"} | State: ${meta.state || "unknown"}`;
4616
4612
  const envelope = {
4617
4613
  channelName: this.name,
@@ -4623,8 +4619,6 @@ var GithubChannel = class extends PollingChannelBase {
4623
4619
  // acknowledgements only target real comment messages.
4624
4620
  messageId: `event-${trigger.id}`,
4625
4621
  text: reason === "review_requested" ? "Return a formal review summary with verified actionable findings, or a concise no-blocker result." : "Triage this issue and respond with the next action.",
4626
- displayText: reason === "review_requested" ? `Review requested: ${displayTitle}` : `Issue assigned: ${displayTitle}`,
4627
- bypassMessagePrefix: true,
4628
4622
  isGroup: true,
4629
4623
  isMentioned: true,
4630
4624
  isReplyToBot: false,
@@ -4652,12 +4646,7 @@ ${details}`
4652
4646
  for (const comment of newComments) {
4653
4647
  this.recordDispatchedComment(comment.node_id || String(comment.id));
4654
4648
  }
4655
- const messagePrefix = this.configuredMessagePrefix();
4656
- const comments = newComments.flatMap((comment) => {
4657
- const rawBody = comment.body || "";
4658
- const body = messagePrefix ? stripMessagePrefix(this.botUsername ? stripBotMention(rawBody, this.botUsername) : rawBody, messagePrefix) : rawBody.trim();
4659
- return body === void 0 ? [] : [{ comment, body }];
4660
- }).slice(-MAX_AGGREGATE_COMMENTS);
4649
+ const comments = newComments.map((comment) => ({ comment, body: (comment.body || "").trim() })).slice(-MAX_AGGREGATE_COMMENTS);
4661
4650
  if (comments.length === 0)
4662
4651
  return;
4663
4652
  const first = comments[0].comment;
@@ -4671,8 +4660,6 @@ ${details}`
4671
4660
  messageId: String(first.id),
4672
4661
  text: `Review these new comments and output exactly ${NO_REPLY_SENTINEL} if no public reply is needed:
4673
4662
  ${summary}`,
4674
- displayText: summary,
4675
- bypassMessagePrefix: true,
4676
4663
  isGroup: true,
4677
4664
  isMentioned: true,
4678
4665
  isReplyToBot: false,
@@ -1,12 +1,12 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
- import {
4
- require_lib
5
- } from "./chunk-ZL4HFSL6.js";
6
3
  import {
7
4
  require_axios,
8
5
  require_ws
9
6
  } from "./chunk-JJKNYRFY.js";
7
+ import {
8
+ require_lib
9
+ } from "./chunk-ZL4HFSL6.js";
10
10
  import "./chunk-OBTWL6ZW.js";
11
11
  import "./chunk-K6KS3LTN.js";
12
12
  import "./chunk-OSHQMOBS.js";
@@ -15,10 +15,9 @@ import {
15
15
  ChannelProactiveDeliveryError,
16
16
  isChannelProactiveDeliveryError,
17
17
  isTerminalTaskLifecycleType,
18
- sanitizeSenderName,
19
- startsWithMessagePrefix
20
- } from "./chunk-WDVV3LRM.js";
21
- import "./chunk-IW6RQPQB.js";
18
+ sanitizeSenderName
19
+ } from "./chunk-EPVEPTI3.js";
20
+ import "./chunk-IJOS26LH.js";
22
21
  import "./chunk-CQ35AJ4Z.js";
23
22
  import {
24
23
  require_index_minimal
@@ -102065,25 +102064,6 @@ var FEISHU_STATUS_STRINGS = [
102065
102064
  ];
102066
102065
  var escapeRegExp = /* @__PURE__ */ __name((value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "escapeRegExp");
102067
102066
  var escapeFeishuMarkdown = /* @__PURE__ */ __name((value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replace(/([\\`*_[\]{}()#+.!|>~-])/gu, "\\$1"), "escapeFeishuMarkdown");
102068
- function stripLeadingMentionNames(text, names, prefix) {
102069
- let rest = text.trimStart();
102070
- const tokens = [
102071
- ...new Set(names.filter(Boolean).map((name) => `@${name}`))
102072
- ].sort((a, b) => b.length - a.length);
102073
- let consumed = true;
102074
- while (consumed && !(prefix && startsWithMessagePrefix(rest, prefix))) {
102075
- consumed = false;
102076
- for (const token of tokens) {
102077
- if (!rest.startsWith(token))
102078
- continue;
102079
- rest = rest.slice(token.length).trimStart();
102080
- consumed = true;
102081
- break;
102082
- }
102083
- }
102084
- return rest;
102085
- }
102086
- __name(stripLeadingMentionNames, "stripLeadingMentionNames");
102087
102067
  var FEISHU_STATUS_LABELS = `(?:${FEISHU_STATUS_STRINGS.map(escapeRegExp).join("|")})`;
102088
102068
  var FEISHU_STATUS_BLOCK_RE = new RegExp(`(?:^|\\n)---\\n\\*${FEISHU_STATUS_LABELS}\\*(?=\\n|$)`, "g");
102089
102069
  var FEISHU_SOURCE_LABEL_LINE_RE = /^\\\[(?:[A-Za-z0-9](?:[A-Za-z0-9]|\\[_-]){0,31}|[^\r\n]+ · [A-Za-z0-9](?:[A-Za-z0-9]|\\[_-]){0,31})\\\](?:\n\n?)?/u;
@@ -103750,7 +103730,6 @@ ${contentPart}` : prefix : contentPart;
103750
103730
  const content = this.extractContent(msg.message_type, msg.content);
103751
103731
  let isMentioned = false;
103752
103732
  let cleanText = content.text;
103753
- const mentionNames = [...content.mentionNames ?? []];
103754
103733
  if (msg.mentions && msg.mentions.length > 0) {
103755
103734
  const mentionReplacements = /* @__PURE__ */ new Map();
103756
103735
  for (const mention of msg.mentions) {
@@ -103760,8 +103739,6 @@ ${contentPart}` : prefix : contentPart;
103760
103739
  isMentioned = true;
103761
103740
  }
103762
103741
  mentionReplacements.set(mention.key, isBotMention ? "" : `@${mention.name}`);
103763
- if (!isBotMention && mention.name)
103764
- mentionNames.push(mention.name);
103765
103742
  }
103766
103743
  const mentionKeys = [...mentionReplacements.keys()].sort((a, b) => b.length - a.length);
103767
103744
  if (mentionKeys.length > 0) {
@@ -103774,7 +103751,6 @@ ${contentPart}` : prefix : contentPart;
103774
103751
  this.msgToSenderId.delete(msgId);
103775
103752
  return;
103776
103753
  }
103777
- const messagePrefixText = stripLeadingMentionNames(cleanText, mentionNames, this.configuredMessagePrefix());
103778
103754
  const envelope = {
103779
103755
  channelName: this.name,
103780
103756
  senderId,
@@ -103782,11 +103758,7 @@ ${contentPart}` : prefix : contentPart;
103782
103758
  chatId,
103783
103759
  ...chatName ? { chatName } : {},
103784
103760
  text: cleanText,
103785
- // A media message carries only an adapter-synthesized placeholder,
103786
- // which no user action can prefix -- gating it would drop every
103787
- // image, file, audio and video with the prefix configured.
103788
103761
  ...!content.userAuthoredText ? { syntheticText: true } : {},
103789
- messagePrefixText: messagePrefixText.trim(),
103790
103762
  messageId: msgId,
103791
103763
  threadId: msg.root_id || void 0,
103792
103764
  isGroup,
@@ -103926,7 +103898,6 @@ ${envelope.text}`;
103926
103898
  };
103927
103899
  case "post": {
103928
103900
  const lines = [];
103929
- const mentionNames = [];
103930
103901
  const post = content;
103931
103902
  const firstVal = Object.values(post)[0];
103932
103903
  const langPost = typeof firstVal === "object" && firstVal !== null ? firstVal : post;
@@ -103945,7 +103916,6 @@ ${envelope.text}`;
103945
103916
  const userName = node["user_name"];
103946
103917
  if (typeof userName === "string" && userName) {
103947
103918
  parts.push(`@${userName}`);
103948
- mentionNames.push(userName);
103949
103919
  }
103950
103920
  }
103951
103921
  }
@@ -103954,7 +103924,6 @@ ${envelope.text}`;
103954
103924
  }
103955
103925
  return {
103956
103926
  text: lines.join("\n").trim() || "",
103957
- mentionNames,
103958
103927
  userAuthoredText: true
103959
103928
  };
103960
103929
  }