@qwen-code/qwen-code 0.19.3 → 0.19.4-nightly.20260702.46814e4f1

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 (308) hide show
  1. package/bundled/loop/SKILL.md +22 -3
  2. package/bundled/loop/SKILL.test.ts +20 -0
  3. package/bundled/loop/autonomous-loop.test.ts +59 -0
  4. package/bundled/loop/autonomous-loop.ts +102 -0
  5. package/bundled/loop/loop-task-file.test.ts +1064 -0
  6. package/bundled/loop/loop-task-file.ts +404 -0
  7. package/bundled/loop/loop-tick-resolver.test.ts +906 -0
  8. package/bundled/loop/loop-tick-resolver.ts +416 -0
  9. package/bundled/qc-helper/SKILL.md +12 -5
  10. package/bundled/qc-helper/docs/configuration/auth.md +1 -1
  11. package/bundled/qc-helper/docs/configuration/settings.md +62 -32
  12. package/bundled/qc-helper/docs/features/approval-mode.md +3 -0
  13. package/bundled/qc-helper/docs/features/auto-mode.md +40 -0
  14. package/bundled/qc-helper/docs/features/channels/overview.md +81 -18
  15. package/bundled/qc-helper/docs/features/channels/plugins.md +1 -1
  16. package/bundled/qc-helper/docs/features/code-review.md +17 -61
  17. package/bundled/qc-helper/docs/features/commands.md +42 -40
  18. package/bundled/qc-helper/docs/features/headless.md +19 -18
  19. package/bundled/qc-helper/docs/features/hooks.md +6 -1
  20. package/bundled/qc-helper/docs/features/mcp.md +3 -1
  21. package/bundled/qc-helper/docs/features/memory.md +1 -1
  22. package/bundled/qc-helper/docs/features/scheduled-tasks.md +10 -0
  23. package/bundled/qc-helper/docs/features/status-line.md +3 -3
  24. package/bundled/qc-helper/docs/ide-integration/ide-integration.md +4 -4
  25. package/bundled/qc-helper/docs/qwen-serve.md +53 -0
  26. package/bundled/qc-helper/docs/support/troubleshooting.md +11 -0
  27. package/bundled/review/DESIGN.md +21 -26
  28. package/bundled/review/SKILL.md +45 -129
  29. package/chunks/MaxSizedBox-GHGRQ2OS.js +69 -0
  30. package/chunks/{StandaloneSessionPicker-Z52JTYST.js → StandaloneSessionPicker-G7YTTM27.js} +49 -42
  31. package/chunks/{acpAgent-7RZUOWOM.js → acpAgent-SDOILBSU.js} +1325 -365
  32. package/chunks/{agent-4FG7WTHJ.js → agent-NTSXGV4L.js} +31 -25
  33. package/chunks/agent-headless-WYURMSAB.js +62 -0
  34. package/chunks/{anthropicContentGenerator-PFITVL7Y.js → anthropicContentGenerator-WL3LJOUB.js} +110 -31
  35. package/chunks/{artifact-tool-D2X7G3C3.js → artifact-tool-W76WC2JX.js} +3 -3
  36. package/chunks/{askUserQuestion-UGETICJQ.js → askUserQuestion-J3P6TH3V.js} +2 -2
  37. package/chunks/bridge-AMOL4W4P.js +73 -0
  38. package/chunks/{ca-IUFWESZL.js → ca-HCMB2I54.js} +10 -9
  39. package/chunks/channel-worker-supervisor-C3IB63V7.js +659 -0
  40. package/chunks/{chunk-STUWFKGD.js → chunk-26JIREA5.js} +466 -543
  41. package/chunks/{chunk-SLNKLLEO.js → chunk-2MRV62AU.js} +37 -8
  42. package/chunks/{chunk-ODLIHNOY.js → chunk-2U4HUMOL.js} +1 -1
  43. package/chunks/{chunk-CKQA6AWF.js → chunk-4D73HUOP.js} +1 -1
  44. package/chunks/{chunk-M2U5NM24.js → chunk-54YZOP7P.js} +309 -72
  45. package/chunks/{chunk-J7FA27RO.js → chunk-5LKL3PAU.js} +3 -3
  46. package/chunks/chunk-5P5XGNYH.js +93 -0
  47. package/chunks/{chunk-UFLGERMB.js → chunk-6JE32BRB.js} +178 -124
  48. package/chunks/{chunk-FKAVULLM.js → chunk-75AVTQJ2.js} +74 -10
  49. package/chunks/{chunk-I2LYBGNI.js → chunk-7IOMIYOE.js} +1 -1
  50. package/chunks/{chunk-4LUZAKMK.js → chunk-7KXAGQJ2.js} +1 -1
  51. package/chunks/{chunk-BXSHL2SF.js → chunk-7LUOQJ3D.js} +1 -1
  52. package/chunks/{chunk-YAINVQ3Q.js → chunk-A5OPLHFM.js} +18693 -17055
  53. package/chunks/chunk-AHNXYU4O.js +24 -0
  54. package/chunks/{chunk-UX4SGCGN.js → chunk-AVQDCKNF.js} +96 -22
  55. package/chunks/{chunk-HYCC3XM3.js → chunk-B236XPGF.js} +1 -1
  56. package/chunks/chunk-B6SZLQAZ.js +3523 -0
  57. package/chunks/{chunk-5DWXLGOM.js → chunk-BJBWRCSK.js} +1 -1
  58. package/chunks/chunk-BPFJQGY7.js +193 -0
  59. package/chunks/{chunk-SKQZZVAV.js → chunk-BZHLWC6T.js} +2 -2
  60. package/chunks/{chunk-U3KSMM7G.js → chunk-D5KISTLW.js} +339 -383
  61. package/chunks/{chunk-GT2FGICD.js → chunk-DE7YXUR7.js} +1 -1
  62. package/chunks/{chunk-BUUQ5HPX.js → chunk-DG573EOO.js} +1 -1
  63. package/chunks/{chunk-VVLOGDB6.js → chunk-DX3TKXNT.js} +2 -2
  64. package/chunks/chunk-E5A7LHNN.js +51 -0
  65. package/chunks/{chunk-3PJXIDKI.js → chunk-E6US47KI.js} +3 -27
  66. package/chunks/{chunk-QBZ22PQX.js → chunk-EWALXUAD.js} +3 -1
  67. package/chunks/{chunk-PDE7CSDS.js → chunk-FXKI7OW6.js} +2 -2
  68. package/chunks/{chunk-F3ZYSEY6.js → chunk-FY4TT4L4.js} +3 -3
  69. package/chunks/{chunk-QLDPRILK.js → chunk-G7OQ3RFJ.js} +3 -3
  70. package/chunks/{chunk-R2BXK7SX.js → chunk-GHOTR7HL.js} +6 -1
  71. package/chunks/{chunk-KMGMKW5Q.js → chunk-GLPV75ES.js} +9 -3
  72. package/chunks/{chunk-LD2XBG6Z.js → chunk-GO6LNQXT.js} +1 -39
  73. package/chunks/{chunk-CNLEDYE3.js → chunk-H6TNLOLM.js} +5 -5
  74. package/chunks/{chunk-JVHEVCAU.js → chunk-HLW4EGKR.js} +31 -6
  75. package/chunks/{chunk-I4H7PRWQ.js → chunk-HTWHAN44.js} +1 -1
  76. package/chunks/{chunk-QE6KJYLT.js → chunk-IPYE5BIS.js} +123 -25
  77. package/chunks/{chunk-EJYJYJZ2.js → chunk-IRJWHZWU.js} +3 -70
  78. package/chunks/{chunk-EDMZZFDU.js → chunk-J3YPTTNL.js} +930 -798
  79. package/chunks/{chunk-GGBIN5K7.js → chunk-JGAJMIJZ.js} +1 -1
  80. package/chunks/{chunk-N4EJFBN5.js → chunk-JVLP5US5.js} +427 -263
  81. package/chunks/{chunk-R5OP2ATH.js → chunk-JZG7VB6C.js} +11 -11
  82. package/chunks/{chunk-QI7GOGJR.js → chunk-KKQWC6WS.js} +1 -1
  83. package/chunks/{chunk-ADCIHOQZ.js → chunk-KX5QZRW2.js} +142 -30
  84. package/chunks/{chunk-SBBN4BWR.js → chunk-L7OJ3ZO3.js} +1 -1
  85. package/chunks/{chunk-NDOC6M5S.js → chunk-L7QPM2YD.js} +2 -2
  86. package/chunks/{chunk-BVSVIN45.js → chunk-LKWAVAB5.js} +3 -3
  87. package/chunks/{chunk-T4T2FNV4.js → chunk-LOW52WYZ.js} +2 -2
  88. package/chunks/{chunk-4QK3O43S.js → chunk-LU7BIVWC.js} +4 -4
  89. package/chunks/{chunk-ZP6UKOPB.js → chunk-LWGLBVWA.js} +1 -1
  90. package/chunks/{chunk-L7OKCI7T.js → chunk-M7BLWURA.js} +15 -1
  91. package/chunks/{chunk-PR32FRT6.js → chunk-MIM62IXS.js} +3 -3
  92. package/chunks/{chunk-RD6YJJJ6.js → chunk-MOUXUCXQ.js} +1 -1
  93. package/chunks/{chunk-VBZ452JT.js → chunk-MSNGFH6L.js} +494 -114
  94. package/chunks/{chunk-BX5YO7UW.js → chunk-MTNTVOJR.js} +542 -370
  95. package/chunks/chunk-MX2YXRER.js +44 -0
  96. package/chunks/chunk-NIOPRZNN.js +27 -0
  97. package/chunks/{chunk-SMYQZVZ3.js → chunk-NOGSPTLJ.js} +1 -1
  98. package/chunks/{chunk-DDMOU62Q.js → chunk-NPQWQYU6.js} +1 -1
  99. package/chunks/{chunk-MNF6S5PR.js → chunk-P5THQV6A.js} +4 -4
  100. package/chunks/{chunk-6V4NZFUS.js → chunk-PCYOT4PK.js} +5 -5
  101. package/chunks/{chunk-CF6BB3LT.js → chunk-PPFWEV7G.js} +10 -1
  102. package/chunks/{chunk-FXKVLFFY.js → chunk-PSFDB5FZ.js} +3 -3
  103. package/chunks/{chunk-XJYUPHRC.js → chunk-QOMAHFYI.js} +3 -3
  104. package/chunks/{chunk-J37FGIOA.js → chunk-QXPI7FEC.js} +38 -4
  105. package/chunks/{chunk-RRFZXMYP.js → chunk-QZDBHNMV.js} +691 -164
  106. package/chunks/{chunk-S7AKE7HL.js → chunk-R6RI2HIC.js} +63 -9
  107. package/chunks/{chunk-HZT4UCFB.js → chunk-RB7S52NJ.js} +4 -4
  108. package/chunks/{chunk-J33ZR6OJ.js → chunk-RK22ACPP.js} +16 -16
  109. package/chunks/chunk-RM3PGSGL.js +66 -0
  110. package/chunks/chunk-RNBYOUGV.js +42 -0
  111. package/chunks/chunk-S6RLAIUR.js +23 -0
  112. package/chunks/{chunk-3TV3HUWZ.js → chunk-SCYK2YLI.js} +81 -30
  113. package/chunks/{chunk-HPZTOP4I.js → chunk-SEKRT4SD.js} +133 -23
  114. package/chunks/chunk-SEZC2725.js +36 -0
  115. package/chunks/chunk-SIUQ3YYX.js +78 -0
  116. package/chunks/{chunk-O2VBQ3Y2.js → chunk-SJBIFVD2.js} +2 -2
  117. package/chunks/chunk-SYCJMSIJ.js +82 -0
  118. package/chunks/{chunk-JE5FVRPC.js → chunk-T22H4V4R.js} +48 -23
  119. package/chunks/{chunk-3227DZO4.js → chunk-T42ACHFI.js} +1 -1
  120. package/chunks/{chunk-UO5GVXQE.js → chunk-TENOUWY2.js} +3 -3
  121. package/chunks/{chunk-JOLIREYR.js → chunk-TOAUDIS7.js} +1 -1
  122. package/chunks/{chunk-QNKBEJO2.js → chunk-UA6XBZT7.js} +2776 -1289
  123. package/chunks/{chunk-O75BHFQW.js → chunk-UQTYK5SS.js} +2 -2
  124. package/chunks/{chunk-Y6YMRS3U.js → chunk-UY2TCIZS.js} +17 -3
  125. package/chunks/{chunk-FNJ7BDPH.js → chunk-UY7ZAYTY.js} +10 -7
  126. package/chunks/{chunk-UYT3MWEB.js → chunk-UYHWM24C.js} +30 -2
  127. package/chunks/{chunk-SMXULRAN.js → chunk-VXGPYF7U.js} +1 -1
  128. package/chunks/{chunk-BTLJ2MF5.js → chunk-W7CG5HPC.js} +3 -3
  129. package/chunks/{chunk-JJXWTVSK.js → chunk-XHZKDN7M.js} +34 -1
  130. package/chunks/{chunk-K5XU6E4T.js → chunk-XKSCTXPK.js} +2 -2
  131. package/chunks/chunk-Y4LITCRB.js +367 -0
  132. package/chunks/chunk-YHTNWGRR.js +239 -0
  133. package/chunks/{chunk-BKXBARJZ.js → chunk-YPCPZSZB.js} +1 -1
  134. package/chunks/{chunk-QWFNTRH4.js → chunk-YSM24SCE.js} +1 -1
  135. package/chunks/chunk-YTFBURQD.js +313 -0
  136. package/chunks/{chunk-NL4C3H6C.js → chunk-YXK4GPYO.js} +1 -1
  137. package/chunks/{chunk-RYLJU2DY.js → chunk-ZN5T4BHI.js} +1 -1
  138. package/chunks/{computer-use-JGB36FDW.js → computer-use-MTSVPLPY.js} +34 -28
  139. package/chunks/contextCommand-VGJ3BPTK.js +67 -0
  140. package/chunks/{cron-create-SKEY55RG.js → cron-create-6YTCOX6P.js} +4 -4
  141. package/chunks/{cron-delete-I3NAT32Z.js → cron-delete-E3NIFSUK.js} +4 -4
  142. package/chunks/{cron-list-6XRRL6TH.js → cron-list-Q64MNQNE.js} +4 -4
  143. package/chunks/daemon-EEB2RYOL.js +8453 -0
  144. package/chunks/daemon-status-provider-H5SNMK42.js +71 -0
  145. package/chunks/{de-EOW5PVHF.js → de-PLLFDERI.js} +10 -9
  146. package/chunks/{dist-NHEYYB2B.js → dist-ADMIQGHI.js} +2 -2
  147. package/chunks/{dist-J37VXPLD.js → dist-BCQ7INM7.js} +40 -15
  148. package/chunks/{dist-663NZ6MI.js → dist-KNZFCY5F.js} +116 -11
  149. package/chunks/{dist-LB6OGPVM.js → dist-LHUWC3K6.js} +26 -5
  150. package/chunks/{dist-PQPZ5Q4N.js → dist-WBBZ76JZ.js} +20 -9
  151. package/chunks/{earlyInputCapture-44RISVVJ.js → earlyInputCapture-U4ZIQSQU.js} +32 -26
  152. package/chunks/{edit-NN6GM5DT.js → edit-SYIQ2KBI.js} +41 -38
  153. package/chunks/{en-HPWEJBTR.js → en-M4EBUBNU.js} +32 -10
  154. package/chunks/{enter-worktree-PB3O2C7D.js → enter-worktree-HPPOO244.js} +31 -25
  155. package/chunks/{enterPlanMode-YQFNNSUA.js → enterPlanMode-56YYO52U.js} +41 -25
  156. package/chunks/{errors-LS7XU5DZ.js → errors-EO4SXCFP.js} +33 -27
  157. package/chunks/{exit-worktree-E2FTNSBK.js → exit-worktree-UDM7E6XH.js} +31 -25
  158. package/chunks/{exitPlanMode-GLYK2BUB.js → exitPlanMode-M6P3AWLJ.js} +149 -33
  159. package/chunks/{fast-path-WQ6M7LI7.js → fast-path-42P4QYWI.js} +33 -14
  160. package/chunks/{fast-path-settings-OAGU3X5H.js → fast-path-settings-UQLRFDQP.js} +2 -2
  161. package/chunks/{fr-BN5NKSAC.js → fr-MBMNQSQ6.js} +10 -9
  162. package/chunks/{gemini-2YFLVA2M.js → gemini-NRLXS5J7.js} +84 -70
  163. package/chunks/{geminiContentGenerator-XV6SV6CD.js → geminiContentGenerator-DLJPYYPA.js} +41 -5
  164. package/chunks/{glob-2H6CDDMK.js → glob-JPY3F74Y.js} +31 -25
  165. package/chunks/{grep-VXIUXM3C.js → grep-HW23YES5.js} +31 -25
  166. package/chunks/initializer-HWOZTC4A.js +67 -0
  167. package/chunks/{ja-7DEUB2TS.js → ja-HFV5QCHR.js} +10 -9
  168. package/chunks/{keychain-token-storage-YLMDLKXT.js → keychain-token-storage-GPAKRDKQ.js} +2 -2
  169. package/chunks/list-OZGAGRDG.js +71 -0
  170. package/chunks/loadedSettingsAdapter-RUTZVVIA.js +66 -0
  171. package/chunks/{loop-wakeup-CITGGQHA.js → loop-wakeup-G2EHBRGR.js} +5 -5
  172. package/chunks/{ls-R5WP4BGZ.js → ls-IDHUVSAG.js} +4 -4
  173. package/chunks/{lsp-GSICJMMW.js → lsp-FSRYXGFT.js} +2 -2
  174. package/chunks/{monitor-HKLRS2HQ.js → monitor-QVWEIXU3.js} +33 -26
  175. package/chunks/nonInteractiveCli-RV2WYPML.js +109 -0
  176. package/chunks/{notebook-edit-Y6SKSGTT.js → notebook-edit-B26W3FFH.js} +37 -34
  177. package/chunks/{openaiContentGenerator-J7G2FYJT.js → openaiContentGenerator-6TH7AZGQ.js} +15 -13
  178. package/chunks/pidfile-KW2QQJZI.js +73 -0
  179. package/chunks/{pt-TNZRNLQB.js → pt-2THT3YHA.js} +10 -9
  180. package/chunks/{qwenContentGenerator-5XIEM5GV.js → qwenContentGenerator-5IQAC7RN.js} +33 -27
  181. package/chunks/{qwenOAuth2-AG3PFFLZ.js → qwenOAuth2-LWLA6MQG.js} +5 -4
  182. package/chunks/{read-file-J7D552ZJ.js → read-file-CWFAHOI2.js} +11 -10
  183. package/chunks/{read-mcp-resource-DQQW7H7T.js → read-mcp-resource-PIJF24RO.js} +2 -2
  184. package/chunks/ripGrep-FTZGDKY4.js +60 -0
  185. package/chunks/{ru-NIAUBKCN.js → ru-Z67YJHBG.js} +10 -9
  186. package/chunks/{run-qwen-serve-SGEEVMXD.js → run-qwen-serve-FN2SW5ZI.js} +545 -97
  187. package/chunks/{scheduler-7CQI3S4Q.js → scheduler-BMS23O3I.js} +31 -25
  188. package/chunks/{send-message-EE4TWKVU.js → send-message-33PYFMCT.js} +20 -4
  189. package/chunks/serve-PXFYKL65.js +71 -0
  190. package/chunks/{server-4QMUWXPW.js → server-BRKALJ4F.js} +4132 -1175
  191. package/chunks/{session-NRO7UFOY.js → session-AQMISBP4.js} +205 -64
  192. package/chunks/{settings-SGWRDQSC.js → settings-JCPVUZMB.js} +35 -29
  193. package/chunks/{shell-62ANGIHL.js → shell-POHCRVN2.js} +31 -25
  194. package/chunks/{skill-VWAQAWW6.js → skill-QPEVHS6H.js} +13 -12
  195. package/chunks/spawnChannel-V3QT62TE.js +69 -0
  196. package/chunks/{src-KUV5J5Q2.js → src-IZSP7L6Y.js} +127 -32
  197. package/chunks/{startInteractiveUI-6EYJN3JV.js → startInteractiveUI-63KATISO.js} +16762 -16075
  198. package/chunks/{syntheticOutput-T5YHQ6S2.js → syntheticOutput-YOSWIHDJ.js} +3 -3
  199. package/chunks/{task-create-BLY7RHXX.js → task-create-NHS2NGB3.js} +9 -7
  200. package/chunks/{task-list-3QUYNVYR.js → task-list-5UIB564R.js} +7 -6
  201. package/chunks/{task-stop-U4RATK2V.js → task-stop-HGXZ2VZ3.js} +2 -2
  202. package/chunks/{task-update-U54O7KJX.js → task-update-IYYWUILG.js} +40 -7
  203. package/chunks/{team-create-LPOGCPM7.js → team-create-E5O2F3CA.js} +31 -25
  204. package/chunks/{team-delete-LKBYPASD.js → team-delete-FEKJCU4P.js} +7 -6
  205. package/chunks/team-plan-approval-2TU4YROB.js +202 -0
  206. package/chunks/theme-manager-37KOGPJL.js +64 -0
  207. package/chunks/{todoWrite-OYXKTVYN.js → todoWrite-TKMVZ2HT.js} +4 -4
  208. package/chunks/{tool-search-YPUFJ3ZQ.js → tool-search-4ZTGNSFI.js} +38 -11
  209. package/chunks/{trustedFolders-5B24TMEA.js → trustedFolders-RJ5WXJ6L.js} +32 -26
  210. package/chunks/{validateNonInterActiveAuth-BTDTYOVT.js → validateNonInterActiveAuth-ZWMHZAOK.js} +66 -55
  211. package/chunks/{web-fetch-EEB5LZYU.js → web-fetch-J4PIW36Q.js} +5 -4
  212. package/chunks/{workflow-LAWIW5LI.js → workflow-6PG2PC5M.js} +68 -39
  213. package/chunks/workspace-providers-status-4QIZN2W4.js +68 -0
  214. package/chunks/workspace-service-CYMCOEIO.js +78 -0
  215. package/chunks/{write-file-PCV226DJ.js → write-file-R354LGQF.js} +41 -40
  216. package/chunks/{zh-5EUYXASN.js → zh-SLZNSSZB.js} +32 -10
  217. package/chunks/{zh-TW-TR3XYGE5.js → zh-TW-P53C2SL5.js} +32 -10
  218. package/cli.js +6 -6
  219. package/locales/ca.js +15 -13
  220. package/locales/de.js +15 -13
  221. package/locales/en.js +52 -15
  222. package/locales/fr.js +15 -14
  223. package/locales/ja.js +15 -14
  224. package/locales/pt.js +15 -13
  225. package/locales/ru.js +15 -13
  226. package/locales/zh-TW.js +50 -14
  227. package/locales/zh.js +50 -14
  228. package/node_modules/@qwen-code/audio-capture/package.json +1 -1
  229. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  230. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  231. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  232. package/package.json +15 -6
  233. package/patches/chrome-devtools-mcp+1.4.0.patch +31 -0
  234. package/postinstall.js +50 -0
  235. package/web-shell/assets/{arc-DA7r8Ueo.js → arc-Bd3048nX.js} +1 -1
  236. package/web-shell/assets/{architectureDiagram-3BPJPVTR-ZDUxPtZ2.js → architectureDiagram-3BPJPVTR-DyzbzABx.js} +1 -1
  237. package/web-shell/assets/{blockDiagram-GPEHLZMM-vrtOf1kJ.js → blockDiagram-GPEHLZMM-CTjxm9Sy.js} +1 -1
  238. package/web-shell/assets/{c4Diagram-AAUBKEIU-BHFjzIi4.js → c4Diagram-AAUBKEIU-DSOFWNU6.js} +1 -1
  239. package/web-shell/assets/channel-oVoup_Ci.js +1 -0
  240. package/web-shell/assets/{chunk-2J33WTMH-mdeQVz59.js → chunk-2J33WTMH-D_PFdjo2.js} +1 -1
  241. package/web-shell/assets/{chunk-4BX2VUAB-BkKMlwBX.js → chunk-4BX2VUAB-52eG6wOT.js} +1 -1
  242. package/web-shell/assets/{chunk-55IACEB6-B7bnXNfu.js → chunk-55IACEB6-CGTZfKkC.js} +1 -1
  243. package/web-shell/assets/{chunk-727SXJPM-DGz8Mm6i.js → chunk-727SXJPM-CZ-qfRUm.js} +1 -1
  244. package/web-shell/assets/{chunk-AQP2D5EJ-BQAydUNk.js → chunk-AQP2D5EJ-B2dSDcqM.js} +1 -1
  245. package/web-shell/assets/{chunk-FMBD7UC4-GHr2LN_p.js → chunk-FMBD7UC4-Cfy3tyA0.js} +1 -1
  246. package/web-shell/assets/{chunk-ND2GUHAM-7R91lnUx.js → chunk-ND2GUHAM-CApNUpUq.js} +1 -1
  247. package/web-shell/assets/{chunk-QZHKN3VN-aTJD3lSQ.js → chunk-QZHKN3VN-CVBG8kgg.js} +1 -1
  248. package/web-shell/assets/classDiagram-4FO5ZUOK-B8WsaT2G.js +1 -0
  249. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B8WsaT2G.js +1 -0
  250. package/web-shell/assets/{cose-bilkent-S5V4N54A-BTf8t1RL.js → cose-bilkent-S5V4N54A-URd77-_-.js} +1 -1
  251. package/web-shell/assets/{dagre-BM42HDAG-_sgp3WuA.js → dagre-BM42HDAG-C07H4G9-.js} +1 -1
  252. package/web-shell/assets/{diagram-2AECGRRQ-CROtRy1w.js → diagram-2AECGRRQ-CYbpXrSn.js} +1 -1
  253. package/web-shell/assets/{diagram-5GNKFQAL-BqGRzwSc.js → diagram-5GNKFQAL-SI8s6fjX.js} +1 -1
  254. package/web-shell/assets/{diagram-KO2AKTUF-CMrcEtA7.js → diagram-KO2AKTUF-mBkC4RTW.js} +1 -1
  255. package/web-shell/assets/{diagram-LMA3HP47-BRydGNW5.js → diagram-LMA3HP47-CyBPDzWJ.js} +1 -1
  256. package/web-shell/assets/{diagram-OG6HWLK6-D0ilgNjV.js → diagram-OG6HWLK6-DwK7kBCu.js} +1 -1
  257. package/web-shell/assets/{erDiagram-TEJ5UH35-2lnQeJUM.js → erDiagram-TEJ5UH35-Ds1StEUd.js} +1 -1
  258. package/web-shell/assets/{flowDiagram-I6XJVG4X-C_ZMdQiC.js → flowDiagram-I6XJVG4X-BDC4-jHO.js} +1 -1
  259. package/web-shell/assets/{ganttDiagram-6RSMTGT7-Dw9V_Ny0.js → ganttDiagram-6RSMTGT7-CV2aHQqf.js} +1 -1
  260. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-HDXI-F1B.js → gitGraphDiagram-PVQCEYII-B8RcuV_L.js} +1 -1
  261. package/web-shell/assets/index-B5WZ0qP1.js +717 -0
  262. package/web-shell/assets/index-CYE1IMd1.css +5 -0
  263. package/web-shell/assets/{infoDiagram-5YYISTIA-CuB8Ebua.js → infoDiagram-5YYISTIA-DUPoTf50.js} +1 -1
  264. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-D_tyhVwh.js → ishikawaDiagram-YF4QCWOH-FDYOx9rf.js} +1 -1
  265. package/web-shell/assets/{journeyDiagram-JHISSGLW-CgCwJQNU.js → journeyDiagram-JHISSGLW-C5_ohMRp.js} +1 -1
  266. package/web-shell/assets/{kanban-definition-UN3LZRKU-PZUtcbPx.js → kanban-definition-UN3LZRKU-Bn4UnOMG.js} +1 -1
  267. package/web-shell/assets/{linear-CZqRdJIU.js → linear-Bl0pKQtY.js} +1 -1
  268. package/web-shell/assets/{mermaid.core-CPW_4UEF.js → mermaid.core-sevQFoji.js} +72 -72
  269. package/web-shell/assets/{mindmap-definition-RKZ34NQL-D_Y75ID7.js → mindmap-definition-RKZ34NQL-DSH4JZF9.js} +1 -1
  270. package/web-shell/assets/{pieDiagram-4H26LBE5-Q4dTyLeF.js → pieDiagram-4H26LBE5-acWvdQTD.js} +1 -1
  271. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-ckw329Ft.js → quadrantDiagram-W4KKPZXB-DlggX4Sm.js} +1 -1
  272. package/web-shell/assets/{requirementDiagram-4Y6WPE33-DbVDm4It.js → requirementDiagram-4Y6WPE33--mMqwmV8.js} +1 -1
  273. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-CHuZ_ecH.js → sankeyDiagram-5OEKKPKP-BtV9tZ77.js} +1 -1
  274. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DU2YSpq-.js → sequenceDiagram-3UESZ5HK-iDQzPFlj.js} +1 -1
  275. package/web-shell/assets/{stateDiagram-AJRCARHV-CA9PEBUo.js → stateDiagram-AJRCARHV-CsCyQLZ3.js} +1 -1
  276. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CPapECG9.js +1 -0
  277. package/web-shell/assets/{timeline-definition-PNZ67QCA-Bhlo4WVc.js → timeline-definition-PNZ67QCA-Dl0rnKvr.js} +1 -1
  278. package/web-shell/assets/{vennDiagram-CIIHVFJN-6xtPLsyl.js → vennDiagram-CIIHVFJN-qF7nTZzA.js} +1 -1
  279. package/web-shell/assets/{wardley-L42UT6IY-3eozmXPf.js → wardley-L42UT6IY-fWoK9i7F.js} +1 -1
  280. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BOn6hKss.js → wardleyDiagram-YWT4CUSO-pHGfkMnc.js} +1 -1
  281. package/web-shell/assets/{xychartDiagram-2RQKCTM6-BsP4-I_y.js → xychartDiagram-2RQKCTM6-3Doc4Trz.js} +1 -1
  282. package/web-shell/index.html +18 -2
  283. package/chunks/MaxSizedBox-QNF3EIGU.js +0 -63
  284. package/chunks/agent-headless-RQ5BTX3G.js +0 -56
  285. package/chunks/bridge-JL2PMCIW.js +0 -66
  286. package/chunks/chunk-5GOVVXEV.js +0 -73
  287. package/chunks/chunk-BC3C4F3Q.js +0 -40
  288. package/chunks/chunk-BW4KCQFD.js +0 -1103
  289. package/chunks/chunk-RKIZXJMB.js +0 -13
  290. package/chunks/contextCommand-WYU6OQ2F.js +0 -61
  291. package/chunks/daemon-status-provider-HH2EC5FI.js +0 -65
  292. package/chunks/headlessSafetyWarnings-TBE35GJ4.js +0 -55
  293. package/chunks/initializer-2Y7SLOKV.js +0 -61
  294. package/chunks/list-ZAFHZ7OS.js +0 -65
  295. package/chunks/loadedSettingsAdapter-6KJXD6M3.js +0 -60
  296. package/chunks/nonInteractiveCli-5W4GIZQM.js +0 -96
  297. package/chunks/ripGrep-IEIFIWP4.js +0 -54
  298. package/chunks/serve-V6GVZR6U.js +0 -65
  299. package/chunks/spawnChannel-3VHW5EPY.js +0 -63
  300. package/chunks/theme-manager-LYLGAERF.js +0 -58
  301. package/chunks/workspace-providers-status-PIAFVYHA.js +0 -62
  302. package/chunks/workspace-service-YAIOD4HG.js +0 -71
  303. package/web-shell/assets/channel-iRo68q4Q.js +0 -1
  304. package/web-shell/assets/classDiagram-4FO5ZUOK-iHF24a8X.js +0 -1
  305. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-iHF24a8X.js +0 -1
  306. package/web-shell/assets/index-CHmzAWys.css +0 -5
  307. package/web-shell/assets/index-w6GTOHh1.js +0 -713
  308. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-t1LRI0oY.js +0 -1
@@ -0,0 +1,71 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ createDaemonStatusProvider
5
+ } from "./chunk-RB7S52NJ.js";
6
+ import "./chunk-P5THQV6A.js";
7
+ import "./chunk-KHDZHZMH.js";
8
+ import "./chunk-DE7YXUR7.js";
9
+ import "./chunk-MSNGFH6L.js";
10
+ import "./chunk-EWALXUAD.js";
11
+ import "./chunk-ALX6BUYW.js";
12
+ import "./chunk-PSFDB5FZ.js";
13
+ import "./chunk-P7M4GA57.js";
14
+ import "./chunk-T22H4V4R.js";
15
+ import "./chunk-SEZC2725.js";
16
+ import "./chunk-M7BLWURA.js";
17
+ import "./chunk-UFC57OYT.js";
18
+ import "./chunk-A5OPLHFM.js";
19
+ import "./chunk-5P5XGNYH.js";
20
+ import "./chunk-K5PGHDBN.js";
21
+ import "./chunk-SKAZWEV5.js";
22
+ import "./chunk-QOMAHFYI.js";
23
+ import "./chunk-G7OQ3RFJ.js";
24
+ import "./chunk-LKWAVAB5.js";
25
+ import "./chunk-L7OJ3ZO3.js";
26
+ import "./chunk-R6RI2HIC.js";
27
+ import "./chunk-2MPVVENX.js";
28
+ import "./chunk-ZTQ26VBE.js";
29
+ import "./chunk-SJBIFVD2.js";
30
+ import "./chunk-MLZQVCF3.js";
31
+ import "./chunk-LQ7TMOCE.js";
32
+ import "./chunk-E5A7LHNN.js";
33
+ import "./chunk-BPFJQGY7.js";
34
+ import "./chunk-GO6LNQXT.js";
35
+ import "./chunk-B236XPGF.js";
36
+ import "./chunk-YXK4GPYO.js";
37
+ import "./chunk-TOAUDIS7.js";
38
+ import "./chunk-NPQWQYU6.js";
39
+ import "./chunk-UA6XBZT7.js";
40
+ import "./chunk-E6US47KI.js";
41
+ import "./chunk-UWCTAVOD.js";
42
+ import "./chunk-OFEVLU4C.js";
43
+ import "./chunk-OMX7CUOE.js";
44
+ import "./chunk-MOUXUCXQ.js";
45
+ import "./chunk-BZHLWC6T.js";
46
+ import "./chunk-DG573EOO.js";
47
+ import "./chunk-MTNTVOJR.js";
48
+ import "./chunk-TENOUWY2.js";
49
+ import "./chunk-GLPV75ES.js";
50
+ import "./chunk-22IFUCVR.js";
51
+ import "./chunk-T42ACHFI.js";
52
+ import "./chunk-SIUQ3YYX.js";
53
+ import "./chunk-YTFBURQD.js";
54
+ import "./chunk-YPCPZSZB.js";
55
+ import "./chunk-IRJWHZWU.js";
56
+ import "./chunk-SYCJMSIJ.js";
57
+ import "./chunk-55ZMG67I.js";
58
+ import "./chunk-H6BD2ELD.js";
59
+ import "./chunk-5IFG2VC4.js";
60
+ import "./chunk-64WXLC72.js";
61
+ import "./chunk-D5KISTLW.js";
62
+ import "./chunk-AVQDCKNF.js";
63
+ import "./chunk-ZERZSAZL.js";
64
+ import "./chunk-QN5NZ3UQ.js";
65
+ import "./chunk-BR4QREVK.js";
66
+ import "./chunk-Z2Z3GUXZ.js";
67
+ import "./chunk-A4BMJM77.js";
68
+ import "./chunk-J2S4EL5Y.js";
69
+ export {
70
+ createDaemonStatusProvider
71
+ };
@@ -196,18 +196,18 @@ var de_default = {
196
196
  "Open in editor": "Im Editor \xF6ffnen",
197
197
  "Edit tools": "Werkzeuge bearbeiten",
198
198
  "Edit color": "Farbe bearbeiten",
199
- "\u274C Error:": "\u274C Fehler:",
199
+ "\u2717 Error:": "\u2717 Fehler:",
200
200
  'Are you sure you want to delete agent "{{name}}"?': 'Sind Sie sicher, dass Sie den Agenten "{{name}}" l\xF6schen m\xF6chten?',
201
201
  // ============================================================================
202
202
  // Agents - Creation Wizard
203
203
  // ============================================================================
204
204
  "Project Level (.qwen/agents/)": "Projektebene (.qwen/agents/)",
205
205
  "User Level (~/.qwen/agents/)": "Benutzerebene (~/.qwen/agents/)",
206
- "\u2705 Subagent Created Successfully!": "\u2705 Unteragent erfolgreich erstellt!",
206
+ "\u2713 Subagent Created Successfully!": "\u2713 Unteragent erfolgreich erstellt!",
207
207
  'Subagent "{{name}}" has been saved to {{level}} level.': 'Unteragent "{{name}}" wurde auf {{level}}-Ebene gespeichert.',
208
208
  "Name: ": "Name: ",
209
209
  "Location: ": "Speicherort: ",
210
- "\u274C Error saving subagent:": "\u274C Fehler beim Speichern des Unteragenten:",
210
+ "\u2717 Error saving subagent:": "\u2717 Fehler beim Speichern des Unteragenten:",
211
211
  "Warnings:": "Warnungen:",
212
212
  'Name "{{name}}" already exists at {{level}} level - will overwrite existing subagent': 'Name "{{name}}" existiert bereits auf {{level}}-Ebene - bestehender Unteragent wird \xFCberschrieben',
213
213
  'Name "{{name}}" exists at user level - project level will take precedence': 'Name "{{name}}" existiert auf Benutzerebene - Projektebene hat Vorrang',
@@ -846,8 +846,8 @@ var de_default = {
846
846
  "Choose how to proceed with your session:": "W\xE4hlen Sie, wie Sie mit Ihrer Sitzung fortfahren m\xF6chten:",
847
847
  "Start new chat session": "Neue Chat-Sitzung starten",
848
848
  "Continue previous conversation": "Vorheriges Gespr\xE4ch fortsetzen",
849
- "\u{1F44B} Welcome back! (Last updated: {{timeAgo}})": "\u{1F44B} Willkommen zur\xFCck! (Zuletzt aktualisiert: {{timeAgo}})",
850
- "\u{1F3AF} Overall Goal:": "\u{1F3AF} Gesamtziel:",
849
+ "Welcome back! (Last updated: {{timeAgo}})": "Willkommen zur\xFCck! (Zuletzt aktualisiert: {{timeAgo}})",
850
+ "Overall Goal:": "Gesamtziel:",
851
851
  "Connect a Provider": "Anbieter verbinden",
852
852
  "You must connect a provider to proceed. Press Ctrl+C again to exit.": "Sie m\xFCssen einen Anbieter verbinden, um fortzufahren. Dr\xFCcken Sie erneut Ctrl+C zum Beenden.",
853
853
  "Terms of Services and Privacy Notice": "Nutzungsbedingungen und Datenschutzhinweis",
@@ -974,7 +974,7 @@ var de_default = {
974
974
  // MCP Status
975
975
  // ============================================================================
976
976
  "No MCP servers configured.": "Keine MCP servers konfiguriert.",
977
- "\u23F3 MCP servers are starting up ({{count}} initializing)...": "\u23F3 MCP servers werden gestartet ({{count}} werden initialisiert)...",
977
+ "\u25CC MCP servers are starting up ({{count}} initializing)...": "\u25CC MCP servers werden gestartet ({{count}} werden initialisiert)...",
978
978
  "Note: First startup may take longer. Tool availability will update automatically.": "Hinweis: Der erste Start kann l\xE4nger dauern. Werkzeugverf\xFCgbarkeit wird automatisch aktualisiert.",
979
979
  "Configured MCP servers:": "Konfigurierte MCP servers:",
980
980
  Ready: "Bereit",
@@ -993,7 +993,7 @@ var de_default = {
993
993
  "Tools:": "Werkzeuge:",
994
994
  "Parameters:": "Parameter:",
995
995
  Blocked: "Blockiert",
996
- "\u{1F4A1} Tips:": "\u{1F4A1} Tipps:",
996
+ "\u2605 Tips:": "\u2605 Tipps:",
997
997
  Use: "Verwenden",
998
998
  "to show server and tool descriptions": "um Server- und Werkzeugbeschreibungen anzuzeigen",
999
999
  "to show tool parameter schemas": "um tool parameter schemas anzuzeigen",
@@ -1363,7 +1363,7 @@ var de_default = {
1363
1363
  "Enter your Coding Plan API key: ": "Geben Sie Ihren Coding Plan API Key ein: ",
1364
1364
  "Select authentication method:": "Authentifizierungsmethode ausw\xE4hlen:",
1365
1365
  "\n=== Authentication Status ===\n": "\n=== Authentifizierungsstatus ===\n",
1366
- "\u26A0\uFE0F No authentication method configured.\n": "\u26A0\uFE0F Keine Authentifizierungsmethode konfiguriert.\n",
1366
+ "\u26A0 No authentication method configured.\n": "\u26A0 Keine Authentifizierungsmethode konfiguriert.\n",
1367
1367
  "Run one of the following commands to get started:\n": "F\xFChren Sie einen der folgenden Befehle aus, um zu beginnen:\n",
1368
1368
  " qwen auth qwen-oauth - Authenticate with Qwen OAuth (discontinued)": " qwen auth qwen-oauth - Mit Qwen OAuth authentifizieren (eingestellt)",
1369
1369
  "Or simply run:": "Oder einfach ausf\xFChren:",
@@ -1378,7 +1378,7 @@ var de_default = {
1378
1378
  " Current Model: {{model}}": " Aktuelles Modell: {{model}}",
1379
1379
  " Config Version: {{version}}": " Konfigurationsversion: {{version}}",
1380
1380
  " Status: API key configured\n": " Status: API Key konfiguriert\n",
1381
- "\u26A0\uFE0F Authentication Method: Alibaba Cloud Coding Plan (Incomplete)": "\u26A0\uFE0F Authentifizierungsmethode: Alibaba Cloud Coding Plan (Unvollst\xE4ndig)",
1381
+ "\u26A0 Authentication Method: Alibaba Cloud Coding Plan (Incomplete)": "\u26A0 Authentifizierungsmethode: Alibaba Cloud Coding Plan (Unvollst\xE4ndig)",
1382
1382
  " Issue: API key not found in environment or settings\n": " Problem: API Key nicht in Umgebung oder Einstellungen gefunden\n",
1383
1383
  " Run `qwen auth coding-plan` to re-configure.\n": " F\xFChren Sie `qwen auth coding-plan` aus, um neu zu konfigurieren.\n",
1384
1384
  "\u2713 Authentication Method: {{type}}": "\u2713 Authentifizierungsmethode: {{type}}",
@@ -1391,6 +1391,7 @@ var de_default = {
1391
1391
  "Hide tool output and thinking for a cleaner view (toggle with Ctrl+O).": "Tool-Ausgabe und Denkprozess ausblenden f\xFCr eine \xFCbersichtlichere Ansicht (mit Ctrl+O umschalten).",
1392
1392
  "Press Ctrl+O to show full tool output": "Ctrl+O f\xFCr vollst\xE4ndige Tool-Ausgabe dr\xFCcken",
1393
1393
  "Switch to plan mode or exit plan mode": "In den Plan-Modus wechseln oder den Plan-Modus verlassen",
1394
+ "Set how hard reasoning-capable models think ({{tiers}}); mapped and clamped per provider.": "Legt fest, wie intensiv schlussfolgerungsf\xE4hige Modelle denken ({{tiers}}); je nach Anbieter zugeordnet und begrenzt.",
1394
1395
  "Exited plan mode. Previous approval mode restored.": "Plan-Modus verlassen. Vorheriger Genehmigungsmodus wiederhergestellt.",
1395
1396
  "Enabled plan mode. The agent will analyze and plan without executing tools.": "Plan-Modus aktiviert. Der Agent analysiert und plant, ohne Werkzeuge auszuf\xFChren.",
1396
1397
  'Already in plan mode. Use "/plan exit" to exit plan mode.': 'Bereits im Plan-Modus. Verwenden Sie "/plan exit", um den Plan-Modus zu verlassen.',
@@ -11,10 +11,10 @@ import {
11
11
  sendMessage,
12
12
  sendTyping,
13
13
  uploadToCdn
14
- } from "./chunk-CKQA6AWF.js";
14
+ } from "./chunk-4D73HUOP.js";
15
15
  import {
16
16
  ChannelBase
17
- } from "./chunk-BW4KCQFD.js";
17
+ } from "./chunk-B6SZLQAZ.js";
18
18
  import "./chunk-UFC57OYT.js";
19
19
  import "./chunk-K5PGHDBN.js";
20
20
  import {
@@ -2,14 +2,15 @@
2
2
  "use strict";
3
3
  import {
4
4
  ChannelBase
5
- } from "./chunk-BW4KCQFD.js";
5
+ } from "./chunk-B6SZLQAZ.js";
6
6
  import "./chunk-UFC57OYT.js";
7
7
  import "./chunk-K5PGHDBN.js";
8
8
  import {
9
9
  require_abort_controller,
10
10
  require_lib
11
- } from "./chunk-RYLJU2DY.js";
12
- import "./chunk-EJYJYJZ2.js";
11
+ } from "./chunk-ZN5T4BHI.js";
12
+ import "./chunk-IRJWHZWU.js";
13
+ import "./chunk-SYCJMSIJ.js";
13
14
  import {
14
15
  require_dist
15
16
  } from "./chunk-ZERZSAZL.js";
@@ -9679,24 +9680,39 @@ var TelegramChannel = class extends ChannelBase {
9679
9680
  bot;
9680
9681
  botId = 0;
9681
9682
  botUsername = "";
9683
+ hasConnectedOnce = false;
9684
+ signalHandlersRegistered = false;
9682
9685
  constructor(name, config, bridge, options) {
9683
9686
  super(name, config, bridge, options);
9684
- const botConfig = this.proxy ? {
9685
- client: {
9686
- baseFetchConfig: { agent: new import_https_proxy_agent.HttpsProxyAgent(this.proxy) }
9687
- }
9688
- } : void 0;
9689
- this.bot = new import_grammy.Bot(config.token, botConfig);
9687
+ this.bot = this.createBot();
9690
9688
  this.registerCommand("start", async (envelope) => {
9691
9689
  await this.sendMessage(envelope.chatId, TELEGRAM_START_MESSAGE);
9692
9690
  return true;
9693
9691
  });
9694
9692
  this.registerCancelCommand();
9695
9693
  }
9694
+ supportsProactiveSend() {
9695
+ return true;
9696
+ }
9697
+ supportsProactiveTarget(target) {
9698
+ return target.threadId === void 0 || /^\d+$/u.test(target.threadId);
9699
+ }
9700
+ createBot() {
9701
+ const botConfig = this.proxy ? {
9702
+ client: {
9703
+ baseFetchConfig: { agent: new import_https_proxy_agent.HttpsProxyAgent(this.proxy) }
9704
+ }
9705
+ } : void 0;
9706
+ return new import_grammy.Bot(this.config.token, botConfig);
9707
+ }
9696
9708
  getFileUrl(filePath) {
9697
9709
  return `https://api.telegram.org/file/bot${this.bot.token}/${filePath}`;
9698
9710
  }
9699
9711
  async connect() {
9712
+ if (this.hasConnectedOnce) {
9713
+ this.bot = this.createBot();
9714
+ }
9715
+ this.hasConnectedOnce = true;
9700
9716
  const botInfo = await this.bot.api.getMe();
9701
9717
  this.botId = botInfo.id;
9702
9718
  this.botUsername = botInfo.username ?? "";
@@ -9820,8 +9836,11 @@ var TelegramChannel = class extends ChannelBase {
9820
9836
  process.stderr.write(`[Telegram:${this.name}] Bot launch error: ${err}
9821
9837
  `);
9822
9838
  });
9823
- process.once("SIGINT", () => this.bot.stop());
9824
- process.once("SIGTERM", () => this.bot.stop());
9839
+ if (!this.signalHandlersRegistered) {
9840
+ process.once("SIGINT", () => this.bot.stop());
9841
+ process.once("SIGTERM", () => this.bot.stop());
9842
+ this.signalHandlersRegistered = true;
9843
+ }
9825
9844
  }
9826
9845
  async registerBotCommands() {
9827
9846
  try {
@@ -9850,15 +9869,20 @@ var TelegramChannel = class extends ChannelBase {
9850
9869
  }
9851
9870
  }
9852
9871
  async sendMessage(chatId, text) {
9872
+ await this.sendTelegramMessage(chatId, text);
9873
+ }
9874
+ async pushProactive(target, text) {
9875
+ await this.sendTelegramMessage(target.chatId, text, target.threadId);
9876
+ }
9877
+ async sendTelegramMessage(chatId, text, threadId) {
9853
9878
  const html = telegramFormat(text);
9854
9879
  const chunks = splitHtmlForTelegram(html);
9880
+ const options = threadId === void 0 ? { parse_mode: "HTML" } : { parse_mode: "HTML", message_thread_id: Number(threadId) };
9855
9881
  for (const chunk of chunks) {
9856
9882
  try {
9857
- await this.bot.api.sendMessage(chatId, chunk, {
9858
- parse_mode: "HTML"
9859
- });
9883
+ await this.bot.api.sendMessage(chatId, chunk, options);
9860
9884
  } catch {
9861
- await this.bot.api.sendMessage(chatId, chunk.replace(/<[^>]*>/g, ""));
9885
+ await this.bot.api.sendMessage(chatId, chunk.replace(/<[^>]*>/g, ""), threadId === void 0 ? void 0 : { message_thread_id: Number(threadId) });
9862
9886
  }
9863
9887
  }
9864
9888
  }
@@ -9896,6 +9920,7 @@ var TelegramChannel = class extends ChannelBase {
9896
9920
  senderId: String(msg.from.id),
9897
9921
  senderName: msg.from.first_name + (msg.from.last_name ? ` ${msg.from.last_name}` : ""),
9898
9922
  chatId: String(msg.chat.id),
9923
+ threadId: typeof msg.message_thread_id === "number" ? String(msg.message_thread_id) : void 0,
9899
9924
  text: cleanText,
9900
9925
  isGroup,
9901
9926
  isMentioned,
@@ -4,11 +4,13 @@ import {
4
4
  require_follow_redirects,
5
5
  require_form_data,
6
6
  require_proxy_from_env
7
- } from "./chunk-J37FGIOA.js";
8
- import {
9
- ChannelBase
10
- } from "./chunk-BW4KCQFD.js";
7
+ } from "./chunk-QXPI7FEC.js";
11
8
  import "./chunk-7RYW5LQV.js";
9
+ import {
10
+ ChannelBase,
11
+ sanitizeLogText,
12
+ sanitizeSenderName
13
+ } from "./chunk-B6SZLQAZ.js";
12
14
  import "./chunk-UFC57OYT.js";
13
15
  import "./chunk-K5PGHDBN.js";
14
16
  import "./chunk-UWCTAVOD.js";
@@ -36,6 +38,7 @@ import { mkdirSync, writeFileSync } from "node:fs";
36
38
  import { randomUUID } from "node:crypto";
37
39
  import { basename, join } from "node:path";
38
40
  import { tmpdir } from "node:os";
41
+ import { Buffer as Buffer2 } from "node:buffer";
39
42
 
40
43
  // node_modules/dingtalk-stream-sdk-nodejs/dist/index.mjs
41
44
  init_esbuild_shims();
@@ -4485,7 +4488,7 @@ var ACK_REACTION_NAME = "\u{1F440}";
4485
4488
  var ACK_EMOTION_ID = "2659900";
4486
4489
  var ACK_EMOTION_BG_ID = "im_bg_1";
4487
4490
  var EMOTION_API = "https://api.dingtalk.com/v1.0/robot/emotion";
4488
- var DingtalkChannel = class extends ChannelBase {
4491
+ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
4489
4492
  static {
4490
4493
  __name(this, "DingtalkChannel");
4491
4494
  }
@@ -4503,6 +4506,86 @@ var DingtalkChannel = class extends ChannelBase {
4503
4506
  clientId: config.clientId,
4504
4507
  clientSecret: config.clientSecret
4505
4508
  });
4509
+ this.installStructuredDownstreamHandler();
4510
+ }
4511
+ installStructuredDownstreamHandler() {
4512
+ const client = this.client;
4513
+ client.debug = false;
4514
+ client.onDownStream = (raw) => {
4515
+ this.onDownStream(raw, client);
4516
+ };
4517
+ }
4518
+ onDownStream(raw, client) {
4519
+ const decoded = this.decodeDownStream(raw);
4520
+ let msg;
4521
+ try {
4522
+ const parsed = JSON.parse(decoded.text);
4523
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
4524
+ process.stderr.write(`[DingTalk:${this.name}] downstream parsed to non-object, ignoring.
4525
+ `);
4526
+ return;
4527
+ }
4528
+ msg = parsed;
4529
+ } catch (err) {
4530
+ process.stderr.write(`[DingTalk:${this.name}] Failed to parse downstream: ${sanitizeLogText(String(err), 200)}
4531
+ `);
4532
+ return;
4533
+ }
4534
+ const headers = msg.headers && typeof msg.headers === "object" ? msg.headers : {};
4535
+ const type = typeof msg.type === "string" ? msg.type : "";
4536
+ const topic = typeof headers["topic"] === "string" ? headers["topic"] : "";
4537
+ const messageId = typeof headers["messageId"] === "string" ? headers["messageId"] : "";
4538
+ process.stderr.write(`[DingTalk:${this.name}] downstream type=${sanitizeLogText(type, 40)} topic=${sanitizeLogText(topic, 80)} messageId=${sanitizeLogText(messageId, 80)} bytes=${decoded.bytes}
4539
+ `);
4540
+ if ((type === "CALLBACK" || type === "EVENT") && (!topic || !messageId)) {
4541
+ process.stderr.write(`[DingTalk:${this.name}] Ignoring downstream with invalid routing headers.
4542
+ `);
4543
+ return;
4544
+ }
4545
+ const normalizedMsg = {
4546
+ ...msg,
4547
+ headers: { ...headers, topic, messageId }
4548
+ };
4549
+ switch (type) {
4550
+ case "SYSTEM":
4551
+ this.callDownStreamHandler(client, "onSystem", normalizedMsg);
4552
+ break;
4553
+ case "EVENT":
4554
+ this.callDownStreamHandler(client, "onEvent", normalizedMsg);
4555
+ break;
4556
+ case "CALLBACK":
4557
+ this.callDownStreamHandler(client, "onCallback", normalizedMsg);
4558
+ break;
4559
+ default:
4560
+ process.stderr.write(`[DingTalk:${this.name}] Ignoring downstream type ${sanitizeLogText(type || "unknown", 40)}.
4561
+ `);
4562
+ }
4563
+ }
4564
+ callDownStreamHandler(client, method, msg) {
4565
+ try {
4566
+ client[method](msg);
4567
+ } catch (err) {
4568
+ process.stderr.write(`[DingTalk:${this.name}] ${method} failed: ${sanitizeLogText(String(err), 200)}
4569
+ `);
4570
+ }
4571
+ }
4572
+ decodeDownStream(raw) {
4573
+ if (typeof raw === "string") {
4574
+ return { text: raw, bytes: Buffer2.byteLength(raw) };
4575
+ }
4576
+ if (Buffer2.isBuffer(raw)) {
4577
+ return { text: raw.toString("utf8"), bytes: raw.length };
4578
+ }
4579
+ if (raw instanceof Uint8Array) {
4580
+ return { text: Buffer2.from(raw).toString("utf8"), bytes: raw.byteLength };
4581
+ }
4582
+ if (raw instanceof ArrayBuffer) {
4583
+ return {
4584
+ text: Buffer2.from(raw).toString("utf8"),
4585
+ bytes: raw.byteLength
4586
+ };
4587
+ }
4588
+ return { text: String(raw), bytes: Buffer2.byteLength(String(raw)) };
4506
4589
  }
4507
4590
  async connect() {
4508
4591
  this.client.registerCallbackListener(TOPIC_ROBOT, (msg) => {
@@ -4524,6 +4607,14 @@ var DingtalkChannel = class extends ChannelBase {
4524
4607
  process.stderr.write(`[DingTalk:${this.name}] Connected via stream.
4525
4608
  `);
4526
4609
  }
4610
+ /**
4611
+ * A group message with no conversationId can't be routed to a stable shared
4612
+ * session (chatId would fall back to the expiring sessionWebhook), so it is
4613
+ * dropped on ingestion. Exposed for testing the drop rule.
4614
+ */
4615
+ static isUnroutableGroupMessage(isGroup, conversationId) {
4616
+ return isGroup && !conversationId;
4617
+ }
4527
4618
  async sendMessage(chatId, text) {
4528
4619
  const webhook = this.webhooks.get(chatId);
4529
4620
  if (!webhook) {
@@ -4798,7 +4889,9 @@ var DingtalkChannel = class extends ChannelBase {
4798
4889
  onMessage(downstream) {
4799
4890
  try {
4800
4891
  const data = typeof downstream.data === "string" ? JSON.parse(downstream.data) : downstream.data;
4801
- const msgId = data.msgId || downstream.headers.messageId;
4892
+ const dataMsgId = typeof data.msgId === "string" ? data.msgId : void 0;
4893
+ const headerMsgId = typeof downstream.headers.messageId === "string" ? downstream.headers.messageId : void 0;
4894
+ const msgId = dataMsgId || headerMsgId;
4802
4895
  if (msgId && this.seenMessages.has(msgId)) {
4803
4896
  return;
4804
4897
  }
@@ -4806,17 +4899,27 @@ var DingtalkChannel = class extends ChannelBase {
4806
4899
  this.seenMessages.set(msgId, Date.now());
4807
4900
  }
4808
4901
  const isGroup = data.conversationType === "2";
4809
- const sessionWebhook = data.sessionWebhook;
4810
- const conversationId = data.conversationId;
4902
+ const sessionWebhook = typeof data.sessionWebhook === "string" ? data.sessionWebhook : void 0;
4903
+ const conversationId = typeof data.conversationId === "string" ? data.conversationId : void 0;
4904
+ const isMentioned = Boolean(data.isInAtList);
4905
+ const senderNick = typeof data.senderNick === "string" ? data.senderNick : void 0;
4906
+ const senderStaffId = typeof data.senderStaffId === "string" ? data.senderStaffId : void 0;
4907
+ const senderIdValue = typeof data.senderId === "string" ? data.senderId : void 0;
4811
4908
  if (!sessionWebhook) {
4812
4909
  process.stderr.write(`[DingTalk:${this.name}] No sessionWebhook in message, skipping.
4910
+ `);
4911
+ return;
4912
+ }
4913
+ if (_DingtalkChannel.isUnroutableGroupMessage(isGroup, conversationId)) {
4914
+ process.stderr.write(`[DingTalk:${this.name}] Group message has no conversationId, skipping (msgId=${msgId || "unknown"}, sender=${sanitizeSenderName(senderNick || senderStaffId || "unknown")})
4813
4915
  `);
4814
4916
  return;
4815
4917
  }
4816
4918
  if (conversationId) {
4817
4919
  this.webhooks.set(conversationId, sessionWebhook);
4818
4920
  }
4819
- const isMentioned = Boolean(data.isInAtList);
4921
+ process.stderr.write(`[DingTalk:${this.name}] message msgId=${sanitizeLogText(msgId || "unknown", 80)} conversationId=${sanitizeLogText(conversationId || "", 120)} isGroup=${isGroup} isMentioned=${isMentioned} senderNick=${sanitizeLogText(senderNick || "", 80)} senderStaffId=${sanitizeLogText(senderStaffId || "", 80)} senderId=${sanitizeLogText(senderIdValue || "", 80)}
4922
+ `);
4820
4923
  const content = this.extractContent(data);
4821
4924
  let cleanText = content.text;
4822
4925
  if (isMentioned) {
@@ -4825,10 +4928,12 @@ var DingtalkChannel = class extends ChannelBase {
4825
4928
  const quoted = this.extractQuotedContext(data);
4826
4929
  const chatId = conversationId || sessionWebhook;
4827
4930
  const envelopeText = isMentioned ? cleanText : cleanText || content.text;
4931
+ const senderId = senderStaffId || senderIdValue || "";
4932
+ const senderName = senderNick || senderId || "Unknown";
4828
4933
  const envelope = {
4829
4934
  channelName: this.name,
4830
- senderId: data.senderStaffId || data.senderId || "",
4831
- senderName: data.senderNick || "Unknown",
4935
+ senderId,
4936
+ senderName,
4832
4937
  chatId,
4833
4938
  text: envelopeText,
4834
4939
  isGroup,
@@ -4,19 +4,19 @@ import {
4
4
  require_follow_redirects,
5
5
  require_form_data,
6
6
  require_proxy_from_env
7
- } from "./chunk-J37FGIOA.js";
8
- import {
9
- ChannelBase
10
- } from "./chunk-BW4KCQFD.js";
7
+ } from "./chunk-QXPI7FEC.js";
11
8
  import {
12
9
  require_lib
13
10
  } from "./chunk-3HX5LZ6R.js";
14
11
  import "./chunk-7RYW5LQV.js";
12
+ import {
13
+ ChannelBase
14
+ } from "./chunk-B6SZLQAZ.js";
15
15
  import "./chunk-UFC57OYT.js";
16
16
  import "./chunk-K5PGHDBN.js";
17
17
  import {
18
18
  require_minimal2 as require_minimal
19
- } from "./chunk-3PJXIDKI.js";
19
+ } from "./chunk-E6US47KI.js";
20
20
  import "./chunk-UWCTAVOD.js";
21
21
  import {
22
22
  require_extension,
@@ -92802,6 +92802,9 @@ var FeishuChannel = class extends ChannelBase {
92802
92802
  this.collapsible = feishuCfg["collapsible"] || false;
92803
92803
  this.collapsibleThreshold = feishuCfg["collapsibleThreshold"] || 500;
92804
92804
  }
92805
+ supportsProactiveSend() {
92806
+ return true;
92807
+ }
92805
92808
  /** Build the event handler map shared between WebSocket and webhook modes. */
92806
92809
  buildHandlerMap() {
92807
92810
  return {
@@ -93165,10 +93168,19 @@ var FeishuChannel = class extends ChannelBase {
93165
93168
  }
93166
93169
  }
93167
93170
  async sendMessage(chatId, text) {
93171
+ await this.sendMessageInternal(chatId, text, false);
93172
+ }
93173
+ async pushProactive(target, text) {
93174
+ await this.sendMessageInternal(target.chatId, text, true);
93175
+ }
93176
+ async sendMessageInternal(chatId, text, throwOnFailure) {
93168
93177
  const token = await this.getTenantAccessToken();
93169
93178
  if (!token) {
93170
93179
  process.stderr.write(`[Feishu:${this.name}] Cannot send: no access token.
93171
93180
  `);
93181
+ if (throwOnFailure) {
93182
+ throw new Error("Feishu sendMessage failed: no access token");
93183
+ }
93172
93184
  return;
93173
93185
  }
93174
93186
  const chunks = splitChunks(text);
@@ -93201,10 +93213,19 @@ var FeishuChannel = class extends ChannelBase {
93201
93213
  const detail = await resp.text().catch(() => "");
93202
93214
  process.stderr.write(`[Feishu:${this.name}] sendMessage failed: HTTP ${resp.status} ${detail}
93203
93215
  `);
93216
+ if (throwOnFailure) {
93217
+ throw new Error(`Feishu sendMessage failed: HTTP ${resp.status}`);
93218
+ }
93204
93219
  }
93205
93220
  } catch (err) {
93221
+ if (throwOnFailure && err instanceof Error && err.message.startsWith("Feishu sendMessage failed:")) {
93222
+ throw err;
93223
+ }
93206
93224
  process.stderr.write(`[Feishu:${this.name}] sendMessage error: ${err}
93207
93225
  `);
93226
+ if (throwOnFailure) {
93227
+ throw err;
93228
+ }
93208
93229
  }
93209
93230
  }
93210
93231
  }
@@ -3,8 +3,11 @@
3
3
  import {
4
4
  ChannelBase,
5
5
  SessionRouter,
6
- getGlobalQwenDir
7
- } from "./chunk-BW4KCQFD.js";
6
+ getGlobalQwenDir,
7
+ sanitizeLogText,
8
+ sanitizePromptText,
9
+ sanitizeSenderName
10
+ } from "./chunk-B6SZLQAZ.js";
8
11
  import "./chunk-UFC57OYT.js";
9
12
  import "./chunk-K5PGHDBN.js";
10
13
  import {
@@ -1483,7 +1486,11 @@ var QQChannel = class extends ChannelBase {
1483
1486
  const sessionsPath = join2(stateDir, `${safeName}-sessions.json`);
1484
1487
  const hasExternalRouter = Boolean(options?.router);
1485
1488
  const router = options?.router ?? new SessionRouter(bridge, config.cwd, config.sessionScope, sessionsPath);
1486
- super(name, config, bridge, { ...options, router });
1489
+ super(name, config, bridge, {
1490
+ ...options,
1491
+ router,
1492
+ registerBridgeEvents: options?.registerBridgeEvents ?? !hasExternalRouter
1493
+ });
1487
1494
  this.qqConfig = config;
1488
1495
  this.qqStatePath = join2(stateDir, `${safeName}-state.json`);
1489
1496
  this.globalSessionsPath = hasExternalRouter ? join2(stateDir, "sessions.json") : sessionsPath;
@@ -1696,15 +1703,16 @@ var QQChannel = class extends ChannelBase {
1696
1703
  }
1697
1704
  }
1698
1705
  /**
1699
- * Workaround for SessionRouter.restoreSessions() storing undefined sessionIds
1700
- * when ACP bridge.loadSession() fails to return a session_id.
1706
+ * Compatibility repair for legacy restored session state where older router
1707
+ * code could keep an empty session id after bridge.loadSession() failed to
1708
+ * return a session_id.
1701
1709
  *
1702
1710
  * **Fragile**: accesses SessionRouter's private `toSession`/`toTarget`/`toCwd`
1703
1711
  * maps via type coercion. If SessionRouter internals change, this breaks
1704
1712
  * silently. The only signal will be cross-server conversations failing to
1705
1713
  * restore after daemon restart — no crash, no log.
1706
1714
  *
1707
- * If upstream SessionRouter adds a public fix for this, remove this method.
1715
+ * Keep this while old persisted files may still exist.
1708
1716
  */
1709
1717
  fixRestoredSessions() {
1710
1718
  try {
@@ -2095,11 +2103,13 @@ var QQChannel = class extends ChannelBase {
2095
2103
  if (!cleanText)
2096
2104
  return;
2097
2105
  const isSlash = cleanText.startsWith("/");
2106
+ const safeName = sanitizeSenderName(senderName);
2098
2107
  if (isSlash) {
2099
- process.stderr.write(`[QQ:${this.name}] Slash cmd from ${senderName} (${chatId}): ${cleanText}
2108
+ const loggedCmd = sanitizeLogText(cleanText, 80);
2109
+ process.stderr.write(`[QQ:${this.name}] Slash cmd from ${safeName} (${chatId}): ${loggedCmd}
2100
2110
  `);
2101
2111
  }
2102
- const text = isSlash ? cleanText : `[${senderName}]: ${cleanText}`;
2112
+ const text = isSlash ? cleanText : `[${safeName}]: ${sanitizePromptText(cleanText)}`;
2103
2113
  this.handleInbound({
2104
2114
  channelName: this.name,
2105
2115
  senderId: event.author.user_openid || event.author.id,
@@ -2111,7 +2121,8 @@ var QQChannel = class extends ChannelBase {
2111
2121
  isMentioned: true,
2112
2122
  // QQ Bot only receives group messages when explicitly @mentioned, so
2113
2123
  // every group message is semantically a reply to the bot.
2114
- isReplyToBot: true
2124
+ isReplyToBot: true,
2125
+ ...isSlash ? {} : { alreadyPrefixed: true }
2115
2126
  }).catch((e) => process.stderr.write(`[QQ:${this.name}] Group handler error: ${e}
2116
2127
  `));
2117
2128
  }