@qwen-code/qwen-code 0.22.3 → 0.23.0

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 (497) hide show
  1. package/README.md +30 -0
  2. package/bundled/computer-use/SKILL.md +116 -180
  3. package/bundled/goal-draft/SKILL.md +5 -1
  4. package/bundled/qc-helper/docs/common-workflow.md +32 -0
  5. package/bundled/qc-helper/docs/configuration/auth.md +6 -6
  6. package/bundled/qc-helper/docs/configuration/model-providers.md +8 -2
  7. package/bundled/qc-helper/docs/configuration/settings.md +63 -58
  8. package/bundled/qc-helper/docs/extension/introduction.md +1 -1
  9. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  10. package/bundled/qc-helper/docs/features/approval-mode.md +3 -0
  11. package/bundled/qc-helper/docs/features/auto-mode.md +34 -17
  12. package/bundled/qc-helper/docs/features/channels/dingtalk.md +4 -2
  13. package/bundled/qc-helper/docs/features/channels/dws.md +6 -2
  14. package/bundled/qc-helper/docs/features/channels/overview.md +5 -2
  15. package/bundled/qc-helper/docs/features/code-review.md +2 -2
  16. package/bundled/qc-helper/docs/features/commands.md +79 -1
  17. package/bundled/qc-helper/docs/features/computer-use.md +2 -2
  18. package/bundled/qc-helper/docs/features/goals.md +9 -3
  19. package/bundled/qc-helper/docs/features/headless.md +16 -1
  20. package/bundled/qc-helper/docs/features/hooks.md +8 -3
  21. package/bundled/qc-helper/docs/features/memory.md +1 -0
  22. package/bundled/qc-helper/docs/features/output-styles.md +38 -0
  23. package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +17 -7
  24. package/bundled/qc-helper/docs/qwen-serve.md +74 -55
  25. package/bundled/review/SKILL.md +16 -7
  26. package/bundled/review/references/posting.md +3 -3
  27. package/chunks/MaxSizedBox-B3D7545A.js +111 -0
  28. package/chunks/{StandaloneSessionPicker-2FJAOLGG.js → StandaloneSessionPicker-QUMO4LLQ.js} +88 -86
  29. package/chunks/{acp-startup-profiler-GNYAL6LI.js → acp-startup-profiler-M4X5F3VK.js} +2 -2
  30. package/chunks/{acpAgent-2ZMIJAFV.js → acpAgent-2GTFCIEP.js} +2041 -444
  31. package/chunks/{agent-X5WX3L2I.js → agent-XKF5SZWU.js} +46 -46
  32. package/chunks/agent-headless-OC2IB55D.js +85 -0
  33. package/chunks/{anthropicContentGenerator-YVTB6QX7.js → anthropicContentGenerator-L76MR5OR.js} +53 -20
  34. package/chunks/{artifact-tool-XSMPHZBT.js → artifact-tool-MYCL2QCS.js} +3 -4
  35. package/chunks/{askUserQuestion-4SWJY65V.js → askUserQuestion-THQZMG44.js} +45 -7
  36. package/chunks/bridge-IHSBI2YJ.js +118 -0
  37. package/chunks/{build-INBK7IXX.js → build-63BIOYWK.js} +1 -1
  38. package/chunks/{ca-7HPYOYSZ.js → ca-BNU7YNDE.js} +3 -0
  39. package/chunks/{channel-management-service-HQ6KDS7C.js → channel-management-service-4MTCEGJB.js} +4 -4
  40. package/chunks/channel-settings-store-BVKWAI2T.js +121 -0
  41. package/chunks/{channel-worker-group-6NA6BBZV.js → channel-worker-group-47F4ISUZ.js} +7 -7
  42. package/chunks/{channel-worker-manager-NEZ2J6RK.js → channel-worker-manager-I5Y44GYR.js} +51 -10
  43. package/chunks/{channel-worker-supervisor-FKU7DIHJ.js → channel-worker-supervisor-6VCLUXFE.js} +4 -4
  44. package/chunks/{chunk-PPKZ7JOE.js → chunk-22UH7VTP.js} +1 -1
  45. package/chunks/chunk-24FVUD5P.js +49 -0
  46. package/chunks/{chunk-MZCJWS5Y.js → chunk-2M3EWQNG.js} +20 -0
  47. package/chunks/{chunk-7T52W4SW.js → chunk-32LU3APX.js} +1 -1
  48. package/chunks/{chunk-42IDLQWS.js → chunk-373DQUVA.js} +48 -13
  49. package/chunks/{chunk-MSBO7X2W.js → chunk-37JFWFCD.js} +1 -1
  50. package/chunks/{chunk-3JXM2CVW.js → chunk-3AKCBZVW.js} +3 -3
  51. package/chunks/{chunk-TVC6HQ2U.js → chunk-3JQZVCBI.js} +2 -2
  52. package/chunks/{chunk-2LNNVAUV.js → chunk-3L724BJ5.js} +246 -15
  53. package/chunks/{chunk-E7REAOTN.js → chunk-47ECGEJC.js} +4 -0
  54. package/chunks/{chunk-WNPDGUJO.js → chunk-47RYEQW5.js} +2 -3
  55. package/chunks/{chunk-TZBSGJ6C.js → chunk-4BGDFKQE.js} +7 -7
  56. package/chunks/{chunk-PZ66FRIC.js → chunk-4F7GQGXB.js} +11772 -4773
  57. package/chunks/{chunk-DMLVSW7L.js → chunk-4HVH57J3.js} +713 -9
  58. package/chunks/{chunk-CMHFCLBU.js → chunk-4LIFGNI4.js} +1 -1
  59. package/chunks/{chunk-3SZC4VP4.js → chunk-4M24B5J5.js} +88 -49
  60. package/chunks/{chunk-BOWFGCEU.js → chunk-4PSDSCW3.js} +3 -3
  61. package/chunks/chunk-4UANMABT.js +1026 -0
  62. package/chunks/{chunk-M3QRM3DE.js → chunk-54C6PIGT.js} +5 -5
  63. package/chunks/{chunk-HP5LR5HL.js → chunk-5EIOJGCR.js} +4 -4
  64. package/chunks/{chunk-64REQJJ2.js → chunk-5H5S4UY5.js} +3 -3
  65. package/chunks/chunk-5IENVM7Z.js +35 -0
  66. package/chunks/{chunk-I6LYRJPB.js → chunk-5Q5RC2WE.js} +2 -2
  67. package/chunks/{chunk-WGY3AVGM.js → chunk-5RTTI4GE.js} +79 -5
  68. package/chunks/{chunk-KID24ZFN.js → chunk-64QH2UC6.js} +13 -1
  69. package/chunks/{chunk-MF7HCQWZ.js → chunk-65HWLGA7.js} +3 -3
  70. package/chunks/{chunk-OU5APVWO.js → chunk-6A2D4QSO.js} +13 -7
  71. package/chunks/chunk-6HUXPLB5.js +110 -0
  72. package/chunks/{chunk-VQUGEVGR.js → chunk-7IKXTGZT.js} +1 -1
  73. package/chunks/{chunk-UTLCH2FK.js → chunk-7JMGTOH7.js} +437 -136
  74. package/chunks/{chunk-7LOELM2I.js → chunk-7RB56BRJ.js} +3 -3
  75. package/chunks/{chunk-NIFYWDYN.js → chunk-7TBU7PU2.js} +1 -1
  76. package/chunks/{chunk-V2NDP3I4.js → chunk-7XL4WRXM.js} +2 -2
  77. package/chunks/chunk-ADJD4LZF.js +210 -0
  78. package/chunks/{chunk-T7KMERIX.js → chunk-ADYN7P2Y.js} +2 -2
  79. package/chunks/{chunk-TPI7O7HR.js → chunk-AHYTURFB.js} +1 -1
  80. package/chunks/{chunk-LUEHOUHM.js → chunk-AI35S34R.js} +3 -3
  81. package/chunks/{chunk-CIZCL2MW.js → chunk-ALUYNJPM.js} +1486 -2172
  82. package/chunks/{chunk-ABS25QER.js → chunk-ANVG3BVV.js} +1 -1
  83. package/chunks/{chunk-6ZPDLGHN.js → chunk-AZJLY2XZ.js} +5 -5
  84. package/chunks/{chunk-A3LWD5MK.js → chunk-BA4WJC4L.js} +1 -1
  85. package/chunks/{chunk-W3JH33JE.js → chunk-BFY33IB4.js} +18 -10
  86. package/chunks/{chunk-N4X7G4J2.js → chunk-BHTYRHJF.js} +1 -1
  87. package/chunks/{chunk-TEBDFQBZ.js → chunk-BJXCYUGM.js} +11 -6
  88. package/chunks/{chunk-7VMIMAVB.js → chunk-C2VWOXHS.js} +8 -8
  89. package/chunks/{chunk-XHF7WQ6B.js → chunk-C4TIXFDZ.js} +16 -5
  90. package/chunks/chunk-CHEIIBT3.js +40 -0
  91. package/chunks/chunk-CVX63TFJ.js +348 -0
  92. package/chunks/{chunk-RXFQM6FQ.js → chunk-DMEUXLSS.js} +16 -1
  93. package/chunks/{chunk-EKSCLBBF.js → chunk-DQCKVAF5.js} +23 -5
  94. package/chunks/{chunk-734C6JGI.js → chunk-DSX7KQPM.js} +5195 -666
  95. package/chunks/{chunk-4CMJKUND.js → chunk-DTVQSSNM.js} +67 -2
  96. package/chunks/{chunk-BKWNKLZB.js → chunk-DYTW3QVG.js} +24 -9
  97. package/chunks/{chunk-C2X7KY45.js → chunk-E4JNFXNI.js} +3 -3
  98. package/chunks/{chunk-UHQFIS7N.js → chunk-EAHOJF6V.js} +28 -4
  99. package/chunks/{chunk-YLSQLSH7.js → chunk-EBDGRBZX.js} +24 -16
  100. package/chunks/{chunk-DJBQCO2E.js → chunk-EFTPIZIC.js} +412 -3
  101. package/chunks/{chunk-6DIGWMGT.js → chunk-EIJT2PQ6.js} +2 -2
  102. package/chunks/{chunk-4TT3IVGA.js → chunk-EIY7SUPZ.js} +1 -1
  103. package/chunks/{chunk-XQFT3QUF.js → chunk-ENYUKMFK.js} +1 -1
  104. package/chunks/{chunk-ZWJDJ6RU.js → chunk-EVFDRBUM.js} +157 -153
  105. package/chunks/{chunk-4VPCTGH6.js → chunk-EWRW2WQC.js} +15 -9
  106. package/chunks/{chunk-VBCPNIQD.js → chunk-F33GFWPR.js} +47 -184
  107. package/chunks/{chunk-ERFDKH32.js → chunk-F47DITLZ.js} +19 -8
  108. package/chunks/{chunk-73RM4POK.js → chunk-F7NF2IOE.js} +7 -7
  109. package/chunks/{chunk-EB6QRGHM.js → chunk-FD5SJOWT.js} +10 -7
  110. package/chunks/{chunk-SS5SDCD3.js → chunk-FRICLXCZ.js} +7 -7
  111. package/chunks/{chunk-NU7RKEZR.js → chunk-FUO5V5KI.js} +14 -7
  112. package/chunks/{chunk-G6FECKTJ.js → chunk-G5PBOQWI.js} +9 -6
  113. package/chunks/{chunk-CAJTKR6W.js → chunk-G7HBEEX7.js} +15 -9
  114. package/chunks/{chunk-4QHPPXK2.js → chunk-GB4UKWY5.js} +2 -2
  115. package/chunks/{chunk-QYMAKPY5.js → chunk-GH2S4GD5.js} +350 -12
  116. package/chunks/{chunk-LHBUKJG2.js → chunk-GXUTFQXK.js} +28 -25
  117. package/chunks/{chunk-KJO2LBUK.js → chunk-H43PSPYS.js} +5 -5
  118. package/chunks/{chunk-XSG6G3G6.js → chunk-HJBHMANB.js} +12 -14
  119. package/chunks/chunk-HRPFBHW7.js +336 -0
  120. package/chunks/{chunk-6PJOTWAN.js → chunk-HT5S5TRQ.js} +1 -1
  121. package/chunks/{chunk-HCOBAG2L.js → chunk-HWVUSYSN.js} +3 -8
  122. package/chunks/{chunk-2OUD5T67.js → chunk-I2TMJPCV.js} +213 -185
  123. package/chunks/{chunk-CLWO3B77.js → chunk-I4NRYS6A.js} +11 -11
  124. package/chunks/{chunk-V7EESTJV.js → chunk-I5N4EAS6.js} +1 -1
  125. package/chunks/{chunk-K5KXUXWC.js → chunk-IG4W5SJR.js} +3 -3
  126. package/chunks/{chunk-FROAFEFB.js → chunk-IPATA3T2.js} +3 -3
  127. package/chunks/{chunk-NKLP3DCK.js → chunk-IQAFKVXS.js} +1 -1
  128. package/chunks/{chunk-AYHQZBJ4.js → chunk-IRKQ4YYX.js} +3 -3
  129. package/chunks/{chunk-J3NNHTV6.js → chunk-J5TTWBZK.js} +6 -0
  130. package/chunks/{chunk-QFCDF5PL.js → chunk-JHN7UIDW.js} +1 -1
  131. package/chunks/{chunk-AVNATYLY.js → chunk-JJKNYRFY.js} +1 -1
  132. package/chunks/{chunk-CQH5KTKC.js → chunk-JR42V4UY.js} +1 -1
  133. package/chunks/chunk-JS73NNWF.js +30 -0
  134. package/chunks/{chunk-NV55WWD6.js → chunk-JUARRUMA.js} +802 -2011
  135. package/chunks/chunk-JX6XHPTX.js +26 -0
  136. package/chunks/{chunk-5JTIYALA.js → chunk-JZWOCUZ3.js} +1 -1
  137. package/chunks/{chunk-P2G476QN.js → chunk-KEVYJSI4.js} +13 -13
  138. package/chunks/{chunk-B466ZSHZ.js → chunk-KFN2IZYR.js} +3 -3
  139. package/chunks/{chunk-JWALNCLT.js → chunk-KGV55H53.js} +1 -1
  140. package/chunks/{chunk-23RFD54N.js → chunk-KHP66DFN.js} +1 -1
  141. package/chunks/{chunk-2SXSLSQE.js → chunk-KM3XVTMO.js} +12 -6
  142. package/chunks/{chunk-GPGU4S2N.js → chunk-KMU3ZHH4.js} +3 -3
  143. package/chunks/chunk-KOGW3YWJ.js +2054 -0
  144. package/chunks/{chunk-NMOD2FXQ.js → chunk-L26ONV2Y.js} +8 -8
  145. package/chunks/chunk-L34XSHIZ.js +28 -0
  146. package/chunks/{chunk-SEONHUS3.js → chunk-LAUEEBDL.js} +2 -0
  147. package/chunks/{chunk-3WK3QDNV.js → chunk-LB3WQQJK.js} +2 -2
  148. package/chunks/{chunk-URE3QBBB.js → chunk-LEPCWS5A.js} +3 -3
  149. package/chunks/{chunk-36GSQ3MM.js → chunk-LHBNR6EU.js} +2 -2
  150. package/chunks/{chunk-V4264FEG.js → chunk-LKODFJRD.js} +1 -1
  151. package/chunks/{chunk-PADPMMYM.js → chunk-LOBDDFYK.js} +5 -29
  152. package/chunks/{chunk-BXDAPVQU.js → chunk-LU77UT4D.js} +28 -4
  153. package/chunks/{chunk-RFIDDFAL.js → chunk-M4KFODIP.js} +1 -1
  154. package/chunks/{chunk-CFJY4DGX.js → chunk-M4LBBSVP.js} +4 -2
  155. package/chunks/{chunk-KYWTPLBJ.js → chunk-MOF6VZN2.js} +2 -2
  156. package/chunks/{chunk-DJPASAUV.js → chunk-MP6YZ4RK.js} +4829 -3638
  157. package/chunks/{chunk-T26EAKDL.js → chunk-N2TNM3QB.js} +2 -6
  158. package/chunks/{chunk-2TNL5KPM.js → chunk-N4QWUPDM.js} +7 -0
  159. package/chunks/{chunk-7S226YTK.js → chunk-NFIDVZND.js} +11 -1
  160. package/chunks/{chunk-ZEYFMJQA.js → chunk-NQ4L2CMD.js} +83 -18
  161. package/chunks/{chunk-ZZUKP7HV.js → chunk-NRL5CUZT.js} +1 -1
  162. package/chunks/{chunk-WXEA74YB.js → chunk-NSUKQ4DN.js} +9 -3
  163. package/chunks/chunk-NUHOLAQ6.js +59 -0
  164. package/chunks/{chunk-DJEZ55D4.js → chunk-NVVJTUSL.js} +336 -140
  165. package/chunks/{chunk-3XKLXHGK.js → chunk-NXKOVOM5.js} +9 -9
  166. package/chunks/{chunk-5Q372OFJ.js → chunk-O4KNCAX4.js} +57 -10
  167. package/chunks/{chunk-GOXKNSDZ.js → chunk-O5CD7T4T.js} +40 -9
  168. package/chunks/{chunk-XIQ5HQ2F.js → chunk-OBTWL6ZW.js} +1 -1
  169. package/chunks/{chunk-PDQGMSZK.js → chunk-ODZF64DM.js} +1 -1
  170. package/chunks/{chunk-5MK45KZ3.js → chunk-OHOO527W.js} +1 -1
  171. package/chunks/{chunk-36LGBEM6.js → chunk-OHU2H5CS.js} +1 -1
  172. package/chunks/{chunk-JB4JIVTJ.js → chunk-OKTNXDVO.js} +1 -1
  173. package/chunks/{chunk-CETB5XY4.js → chunk-ORFIYTI2.js} +1 -1
  174. package/chunks/{chunk-7E7UCJHS.js → chunk-OSHQMOBS.js} +18 -17
  175. package/chunks/chunk-OSSTATJF.js +1310 -0
  176. package/chunks/chunk-P6UIF2OW.js +400 -0
  177. package/chunks/{chunk-U54AYGEC.js → chunk-PB7JBAHF.js} +15 -49
  178. package/chunks/{chunk-Y5S7LBOZ.js → chunk-PCRBLMIN.js} +17 -3
  179. package/chunks/{chunk-WAOIHTJS.js → chunk-PDAKFU7M.js} +1 -1
  180. package/chunks/{chunk-YTDVNSUQ.js → chunk-QAK5475D.js} +1 -1
  181. package/chunks/{chunk-ST5MDGH3.js → chunk-QI27MKNQ.js} +27 -19
  182. package/chunks/{chunk-MK2GIB46.js → chunk-QJGYU5PG.js} +1 -1
  183. package/chunks/{chunk-SMPR7SPO.js → chunk-QJNDUTOL.js} +45 -239
  184. package/chunks/{chunk-MQM5PJML.js → chunk-QJVZLILI.js} +1 -1
  185. package/chunks/{chunk-B5PHIJGI.js → chunk-QKDNS6FU.js} +2 -2
  186. package/chunks/{chunk-ZU4UDIWX.js → chunk-QQD2GART.js} +15 -9
  187. package/chunks/{chunk-62GQFYID.js → chunk-RAFQIHN2.js} +3 -3
  188. package/chunks/{chunk-MO3FC2WT.js → chunk-RJUVTJEZ.js} +1 -1
  189. package/chunks/{chunk-M6FOJXW3.js → chunk-RKW36UWC.js} +1 -1
  190. package/chunks/{chunk-GBJBJ4HX.js → chunk-RM4WT2XB.js} +4 -26
  191. package/chunks/{chunk-VGIFXISB.js → chunk-RN3YGDCA.js} +7 -5
  192. package/chunks/{chunk-DYXFD5RO.js → chunk-S2T7H5MI.js} +1 -1
  193. package/chunks/{chunk-FTF2YIZ5.js → chunk-S6H3ELPG.js} +1 -1
  194. package/chunks/{chunk-4NDLQAY2.js → chunk-SI7WDR3U.js} +524 -16
  195. package/chunks/{chunk-2YOHKHYR.js → chunk-SRF4KTAG.js} +6 -6
  196. package/chunks/{chunk-ZZMSC3RG.js → chunk-STCVJXQB.js} +24 -24
  197. package/chunks/{chunk-ST5V3ZOC.js → chunk-SULZPKTA.js} +3 -3
  198. package/chunks/{chunk-6X7EU5TI.js → chunk-SX2QIMJV.js} +9 -7
  199. package/chunks/{chunk-V5J4J5TP.js → chunk-TJYRTS4S.js} +2 -20
  200. package/chunks/{chunk-C3PEFRKD.js → chunk-TMKTOTMQ.js} +5 -5
  201. package/chunks/{chunk-ISKH4QX3.js → chunk-TQHPVKO6.js} +4 -4
  202. package/chunks/{chunk-HVC3PNVC.js → chunk-TSZSGQ3N.js} +1 -1
  203. package/chunks/{chunk-ICURCKIU.js → chunk-U4DJ5XB3.js} +594 -91
  204. package/chunks/{chunk-TTX2JUE6.js → chunk-U6D2PPMN.js} +1 -1
  205. package/chunks/{chunk-GVIVASYK.js → chunk-UAKRDON5.js} +4 -4
  206. package/chunks/{chunk-D5LUXLUH.js → chunk-UJ4DUYIH.js} +18 -4
  207. package/chunks/{chunk-VTHREBQM.js → chunk-UKYXYWI2.js} +2 -2
  208. package/chunks/{chunk-ZYMLPEZQ.js → chunk-UM2FFKXN.js} +3 -3
  209. package/chunks/{chunk-2OBKDPZZ.js → chunk-UPFRILIL.js} +2 -2
  210. package/chunks/{chunk-2HYKTO7V.js → chunk-UUASLXHW.js} +55 -6
  211. package/chunks/chunk-V5U2NZNJ.js +29 -0
  212. package/chunks/{chunk-P5Y23G2L.js → chunk-V7RNNPGC.js} +1 -18
  213. package/chunks/{chunk-Q2MSPKIJ.js → chunk-VBWD6C27.js} +1 -1
  214. package/chunks/chunk-VGHZT6JR.js +51 -0
  215. package/chunks/{chunk-MPNBVAEU.js → chunk-VNAYZAFX.js} +4 -4
  216. package/chunks/chunk-VPSIC437.js +780 -0
  217. package/chunks/{chunk-AIAOIFY4.js → chunk-VWTSRH6C.js} +92 -17
  218. package/chunks/{chunk-4K7KNVWH.js → chunk-VYIUNFEA.js} +3 -3
  219. package/chunks/{chunk-EQSBPBZ3.js → chunk-WP4AX3XD.js} +5 -7
  220. package/chunks/{chunk-BFPESSTR.js → chunk-XEAAO654.js} +1 -1
  221. package/chunks/{chunk-RU7BK6B3.js → chunk-XLXAZLDR.js} +3 -3
  222. package/chunks/{chunk-EFWRMA2I.js → chunk-YPWZTR7F.js} +3 -3
  223. package/chunks/{chunk-XF63PKEN.js → chunk-ZDFQGHZH.js} +1 -1
  224. package/chunks/{chunk-OZ6KS6KW.js → chunk-ZGCKTAL5.js} +6 -1
  225. package/chunks/chunk-ZHO2CW6D.js +205 -0
  226. package/chunks/chunk-ZJ2LM2SI.js +198 -0
  227. package/chunks/{chunk-AYFA7MZV.js → chunk-ZKFTS3OV.js} +6 -6
  228. package/chunks/{chunk-HMJ2P3SV.js → chunk-ZL4HFSL6.js} +91 -29
  229. package/chunks/{chunk-DJECZIJX.js → chunk-ZTPGUFQV.js} +30 -8
  230. package/chunks/{chunk-7EQQR46F.js → chunk-ZVP4PWBU.js} +1 -1
  231. package/chunks/chunk-bdqvmfwv-ZTSOWAFE.js +17446 -0
  232. package/chunks/config-utils-LVSYDLHZ.js +114 -0
  233. package/chunks/contextCommand-TZD7UAJK.js +107 -0
  234. package/chunks/{core-runtime-AXB6SK5D.js → core-runtime-B4UKKIAQ.js} +63 -62
  235. package/chunks/{create-sub-session-23ITIELI.js → create-sub-session-LUPWEUHR.js} +3 -3
  236. package/chunks/{create-sub-session-4QNE64MR.js → create-sub-session-NJ24B4US.js} +94 -66
  237. package/chunks/{cron-create-KJ4IY6PP.js → cron-create-CRSPET3H.js} +4 -4
  238. package/chunks/{cron-delete-MBLQCAYY.js → cron-delete-DB77SZTU.js} +4 -4
  239. package/chunks/{cron-list-DWH2PQ47.js → cron-list-U2JNYWV6.js} +4 -4
  240. package/chunks/{daemon-3GNHB3M2.js → daemon-RKDGBFLK.js} +613 -102
  241. package/chunks/{daemon-git-worktree-guard-IVAJJWYK.js → daemon-git-worktree-guard-O2HPOBAB.js} +62 -61
  242. package/chunks/daemon-status-provider-GRRVCJFW.js +117 -0
  243. package/chunks/daemon-trust-policy-YJL442BK.js +113 -0
  244. package/chunks/{daemon-trust-policy-monitor-KGGROSIV.js → daemon-trust-policy-monitor-JL7F4Y4Q.js} +68 -67
  245. package/chunks/{de-X6HLSIFE.js → de-T4BLOKEC.js} +3 -0
  246. package/chunks/deferred-core-runtime-S32AYVZI.js +115 -0
  247. package/chunks/{devtools-JCG4K2NZ.js → devtools-VDRJYPZF.js} +1 -1
  248. package/chunks/{discovery-X2NV535U.js → discovery-TUM3ZQ6U.js} +2 -2
  249. package/chunks/{display-image-BE7I6ZB6.js → display-image-73C7XNRK.js} +5 -5
  250. package/chunks/{dist-LVZCXVPF.js → dist-62OZ7QXB.js} +44 -26
  251. package/chunks/{dist-GFN5DCBX.js → dist-EDHQIBYD.js} +152 -63
  252. package/chunks/{dist-N6W6E753.js → dist-GT64AAUR.js} +135 -26
  253. package/chunks/{dist-6BPYWHVD.js → dist-JVXT4VUJ.js} +14 -7
  254. package/chunks/{dist-4WXLCBDR.js → dist-L6URO6CK.js} +12 -5
  255. package/chunks/{dist-5VXFRTWU.js → dist-LXFYIJNG.js} +866 -172
  256. package/chunks/{dist-SWQMYP2Q.js → dist-PDGNRVPY.js} +27 -8
  257. package/chunks/{dist-NSV4NBPK.js → dist-QAF5DO3Y.js} +380 -83
  258. package/chunks/{dist-HZNT6GQS.js → dist-ZCJLKQSP.js} +28 -14
  259. package/chunks/earlyInputCapture-BBPCIVZG.js +108 -0
  260. package/chunks/{edit-LEQLAGPZ.js → edit-SUGXY63Y.js} +47 -47
  261. package/chunks/{en-YLXBXM4Z.js → en-2RATMNX7.js} +5 -0
  262. package/chunks/{enter-worktree-35QCAAFP.js → enter-worktree-B6USKSIK.js} +7 -7
  263. package/chunks/{enterPlanMode-ONQN3WHE.js → enterPlanMode-MDX4RVVL.js} +48 -48
  264. package/chunks/{environment-UANTR7A4.js → environment-VN6RXDVN.js} +63 -62
  265. package/chunks/errors-UEY36PIT.js +114 -0
  266. package/chunks/{exit-worktree-XQD6D543.js → exit-worktree-DLQ73SJH.js} +10 -8
  267. package/chunks/exitPlanMode-EPHIEDAA.js +83 -0
  268. package/chunks/{fast-path-WUL7UZ6H.js → fast-path-Y73R42LV.js} +8 -7
  269. package/chunks/{fast-path-settings-XH426LUU.js → fast-path-settings-MFUR3IWK.js} +3 -3
  270. package/chunks/{fr-FTZWF462.js → fr-BGHGYX6A.js} +3 -0
  271. package/chunks/{glob-Y54QUWDY.js → glob-DMGH7EZN.js} +47 -47
  272. package/chunks/goal-tools-3RF3PXCL.js +99 -0
  273. package/chunks/{grep-5GPICQBU.js → grep-AJVLCVXC.js} +9 -7
  274. package/chunks/handleAutoUpdate-HVWQT2AU.js +110 -0
  275. package/chunks/i18n-5OR7NTRZ.js +125 -0
  276. package/chunks/{image-gen-J6FDGUZP.js → image-gen-VOIDOHOB.js} +8 -8
  277. package/chunks/initializer-JE5RQSOE.js +114 -0
  278. package/chunks/installationInfo-KO3CCSCK.js +108 -0
  279. package/chunks/{ja-2GL5FKYJ.js → ja-G3FTD5XE.js} +3 -0
  280. package/chunks/{keychain-token-storage-37XPR34V.js → keychain-token-storage-REZVMJA6.js} +2 -2
  281. package/chunks/list-3IORSFIY.js +117 -0
  282. package/chunks/list-agents-SBMONIUK.js +128 -0
  283. package/chunks/{llm-NSAVK5V3.js → llm-K26SUDVK.js} +223 -140
  284. package/chunks/{llm-content-generator-AY2QKXHE.js → llm-content-generator-TT6EAUD4.js} +11 -12
  285. package/chunks/loadedSettingsAdapter-KLLFZF3M.js +111 -0
  286. package/chunks/{loggingContentGenerator-DSFQHXIF.js → loggingContentGenerator-EYQBA4M4.js} +66 -65
  287. package/chunks/{loop-wakeup-XJFONSQ7.js → loop-wakeup-QA6SHCZT.js} +5 -5
  288. package/chunks/{ls-3VAT2J7A.js → ls-HEJNCEYO.js} +4 -4
  289. package/chunks/{lsp-5W7IRUBH.js → lsp-WOQKNZP6.js} +2 -2
  290. package/chunks/{managed-npm-update-TSWENTK5.js → managed-npm-update-HIJTODQT.js} +61 -60
  291. package/chunks/mcp-A2UEHETW.js +111 -0
  292. package/chunks/{monitor-RW4GWJHB.js → monitor-DKNZQAB2.js} +46 -46
  293. package/chunks/{node-QKLNSZMX.js → node-UETAYMMO.js} +3 -3
  294. package/chunks/nonInteractiveCli-YA47F2F4.js +190 -0
  295. package/chunks/{notebook-edit-CQNYS5OR.js → notebook-edit-MGHTRL2D.js} +47 -47
  296. package/chunks/{open-with-auth-YN3QZHVM.js → open-with-auth-D6JD6LDS.js} +3 -3
  297. package/chunks/{openaiContentGenerator-J6QIF7EX.js → openaiContentGenerator-ZJIEQ3ZJ.js} +26 -28
  298. package/chunks/pidfile-ETHAZNMY.js +112 -0
  299. package/chunks/{processUtils-GPHNANKZ.js → processUtils-UY3SAJJZ.js} +2 -2
  300. package/chunks/prompt-terminal-ledger-GZ747VYE.js +106 -0
  301. package/chunks/{pt-XN2YWJVM.js → pt-D73IFYT7.js} +3 -0
  302. package/chunks/{qwenContentGenerator-WWDXPYQI.js → qwenContentGenerator-VI4KATRY.js} +58 -58
  303. package/chunks/{qwenOAuth2-OF5WRBQT.js → qwenOAuth2-7AOCKSOQ.js} +7 -7
  304. package/chunks/{read-file-FQUQHC6N.js → read-file-P7F4P7LV.js} +11 -13
  305. package/chunks/{read-mcp-resource-XD257PGJ.js → read-mcp-resource-GLAGB6R7.js} +2 -2
  306. package/chunks/{record-artifact-VW23GS4F.js → record-artifact-SWVR7NSU.js} +4 -4
  307. package/chunks/renderer-selection-M4UN63VJ.js +99 -0
  308. package/chunks/{report-findings-AO5VYFLR.js → report-findings-AL5YW3KI.js} +5 -5
  309. package/chunks/{request-shutdown-BCLA3JV2.js → request-shutdown-5YK4IZ54.js} +8 -7
  310. package/chunks/resumeHistoryUtils-DPZKFW24.js +119 -0
  311. package/chunks/ripGrep-C7LJKUPZ.js +37 -0
  312. package/chunks/{ru-OLTMFJEW.js → ru-QMISLKRH.js} +3 -0
  313. package/chunks/{run-qwen-serve-5X6IDZER.js → run-qwen-serve-OGTEEUR2.js} +589 -251
  314. package/chunks/{runtime-HK27GMPF.js → runtime-LNBLEMZS.js} +73 -72
  315. package/chunks/scheduled-tasks-FLDYZQOF.js +128 -0
  316. package/chunks/{scheduler-WD4MHMO5.js → scheduler-73YXGUGW.js} +62 -61
  317. package/chunks/{sdk-exporters-grpc-G5IT4XS4.js → sdk-exporters-grpc-MXTVSE3C.js} +2 -2
  318. package/chunks/{sdk-exporters-http-TTU2CHBU.js → sdk-exporters-http-3JO5TJNU.js} +4 -4
  319. package/chunks/{sdk-impl-UUMVYMAL.js → sdk-impl-HZAUUTHJ.js} +6 -6
  320. package/chunks/{send-message-AJ4OCUBV.js → send-message-JC7NJTY6.js} +166 -35
  321. package/chunks/serve-3UR2H4CV.js +119 -0
  322. package/chunks/{server-GO2N5DH7.js → server-AOYZVVOM.js} +2904 -860
  323. package/chunks/{session-IFNHTUBT.js → session-UAWFNFGI.js} +119 -114
  324. package/chunks/session-attachments-root-ZCGXQQTR.js +104 -0
  325. package/chunks/{session-pr-refresh-I3UBWMVP.js → session-pr-refresh-CT2INROL.js} +157 -88
  326. package/chunks/{settings-L6N54CU6.js → settings-BHRGDASJ.js} +67 -66
  327. package/chunks/{shell-4Y5LLW6N.js → shell-YHOGC7TO.js} +46 -46
  328. package/chunks/{skill-YOWTRAKQ.js → skill-ZGBKNCHQ.js} +131 -97
  329. package/chunks/skill-settings-AKSP665O.js +119 -0
  330. package/chunks/spawnChannel-N25MBB6F.js +112 -0
  331. package/chunks/standalone-update-XGPWJDRN.js +119 -0
  332. package/chunks/start-opentui-ui-FZ4USOU7.js +55342 -0
  333. package/chunks/{startInteractiveUI-XDFSHBZD.js → startInteractiveUI-E2WQJUOA.js} +3509 -4706
  334. package/chunks/{syntheticOutput-ML43GEFN.js → syntheticOutput-HJNZSEHN.js} +3 -3
  335. package/chunks/{task-create-QN4LYRSE.js → task-create-6RSD54S5.js} +12 -12
  336. package/chunks/{task-list-JPLGK45U.js → task-list-IQSACPOM.js} +34 -11
  337. package/chunks/{task-stop-CXEH5L2D.js → task-stop-HE2LRQNW.js} +2 -2
  338. package/chunks/{task-update-IWEOJFV2.js → task-update-XAJ2NYOA.js} +13 -14
  339. package/chunks/{team-create-OOPXCDBA.js → team-create-SOKMYSQU.js} +54 -55
  340. package/chunks/{team-delete-RZVVSGCY.js → team-delete-NGNNKGMG.js} +25 -8
  341. package/chunks/{team-plan-approval-DSX5EWAT.js → team-plan-approval-U7ZWXYAY.js} +46 -46
  342. package/chunks/terminal-image-renderer-KKM4OBLO.js +117 -0
  343. package/chunks/theme-manager-GQHF3A7T.js +103 -0
  344. package/chunks/{todoWrite-WDJNQEMW.js → todoWrite-5UTVUXHA.js} +39 -9
  345. package/chunks/{tool-search-J5Q6U7DN.js → tool-search-IAI2RVWT.js} +21 -19
  346. package/chunks/total-session-admission-G4CGCSTG.js +113 -0
  347. package/chunks/trustedFolders-D2I3FDPB.js +123 -0
  348. package/chunks/{update-relaunch-SIKHLHVR.js → update-relaunch-5RWKZAL3.js} +5 -5
  349. package/chunks/updateCheck-ZXOQDFEI.js +119 -0
  350. package/chunks/useAutoAcceptIndicator-6EK4QGAH.js +121 -0
  351. package/chunks/{validateNonInterActiveAuth-JUDQP6V4.js → validateNonInterActiveAuth-QPFEKATS.js} +113 -109
  352. package/chunks/{version-C63GDDWN.js → version-JKNG7YDH.js} +1 -1
  353. package/chunks/{web-fetch-FOQZMNSC.js → web-fetch-X3AHIIHW.js} +16 -19
  354. package/chunks/{web-search-PUJTBFUC.js → web-search-K2FMOGS5.js} +10 -11
  355. package/chunks/{web-shell-static-HNB4FDOE.js → web-shell-static-POZHGGXE.js} +5 -4
  356. package/chunks/{workflow-Y5IPINVH.js → workflow-TOLPAK5G.js} +213 -119
  357. package/chunks/workspace-providers-status-PCJK3RC7.js +115 -0
  358. package/chunks/{workspace-registration-store-SMJWI2AI.js → workspace-registration-store-KQWVVW4Y.js} +2 -1
  359. package/chunks/workspace-registry-YNIOB6HJ.js +122 -0
  360. package/chunks/workspace-runtime-coordinator-WG2RNEN7.js +123 -0
  361. package/chunks/workspace-service-G4ZNBOFH.js +127 -0
  362. package/chunks/workspace-skills-status-FMTPPMWC.js +114 -0
  363. package/chunks/{workspace-trust-reconciler-PLIDLJZX.js → workspace-trust-reconciler-IBDFQBQS.js} +76 -77
  364. package/chunks/wrapper-JH3IFHT2.js +35 -0
  365. package/chunks/write-file-YTLFY2S5.js +88 -0
  366. package/chunks/{zh-UNY63FR3.js → zh-25DF7OGK.js} +5 -0
  367. package/chunks/{zh-TW-RPTMRTHG.js → zh-TW-5EDMZVGK.js} +5 -0
  368. package/chunks/{zoom-image-LYQD7BQA.js → zoom-image-IFXSN74N.js} +11 -13
  369. package/cli.js +131 -90
  370. package/locales/ca.js +6 -0
  371. package/locales/de.js +6 -0
  372. package/locales/en.js +9 -0
  373. package/locales/fr.js +6 -0
  374. package/locales/ja.js +6 -0
  375. package/locales/pt.js +6 -0
  376. package/locales/ru.js +6 -0
  377. package/locales/zh-TW.js +9 -0
  378. package/locales/zh.js +9 -0
  379. package/package.json +3 -3
  380. package/web-shell/assets/{abnfDiagram-VCTEODGH-TRCMSA_6.js → abnfDiagram-VCTEODGH-Cxf7xE_Z.js} +1 -1
  381. package/web-shell/assets/{arc-D9Uls5b3.js → arc-ESi1eNkE.js} +1 -1
  382. package/web-shell/assets/{architectureDiagram-5GKGNRK7-Bwb8jPXg.js → architectureDiagram-5GKGNRK7-D9l7-bDo.js} +1 -1
  383. package/web-shell/assets/{blockDiagram-NRAW4CY4-DHj71TSX.js → blockDiagram-NRAW4CY4-Bc8DEasw.js} +1 -1
  384. package/web-shell/assets/{c4Diagram-UCG6FXSJ-uKBBdbyr.js → c4Diagram-UCG6FXSJ-Dimb2Hmh.js} +1 -1
  385. package/web-shell/assets/channel-B7ohGDil.js +1 -0
  386. package/web-shell/assets/{chunk-2Q5K7J3B-BZd0Phrl.js → chunk-2Q5K7J3B-jVDmOpAQ.js} +1 -1
  387. package/web-shell/assets/{chunk-5VM5RSS4-7KNeNBqN.js → chunk-5VM5RSS4-DbG_SwdB.js} +1 -1
  388. package/web-shell/assets/{chunk-F27PBJKO-BeboS7Fi.js → chunk-F27PBJKO-QEc4cY1v.js} +1 -1
  389. package/web-shell/assets/{chunk-G27WJ6UU-RV3JONoj.js → chunk-G27WJ6UU-iJ36lQ3X.js} +1 -1
  390. package/web-shell/assets/{chunk-JWPE2WC7-Yw9FCFsP.js → chunk-JWPE2WC7-DuArnVtF.js} +1 -1
  391. package/web-shell/assets/{chunk-LCL6LL3I-GIMnydDe.js → chunk-LCL6LL3I-DxOf1zwL.js} +1 -1
  392. package/web-shell/assets/{chunk-POPQ4Y6H-Cfrux7bL.js → chunk-POPQ4Y6H-lVLu9Ild.js} +1 -1
  393. package/web-shell/assets/{chunk-SVP7TREG-BlvIN0CO.js → chunk-SVP7TREG-C6XYlIer.js} +1 -1
  394. package/web-shell/assets/{chunk-XXDRQBXY-DMs7Rr4t.js → chunk-XXDRQBXY-CiG2j2Ji.js} +1 -1
  395. package/web-shell/assets/classDiagram-DTDB5LWJ-DdFpqpfD.js +1 -0
  396. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DdFpqpfD.js +1 -0
  397. package/web-shell/assets/{cose-bilkent-JH36ORCC-DNGqTNwI.js → cose-bilkent-JH36ORCC-DGVHMMVm.js} +1 -1
  398. package/web-shell/assets/{cynefin-OW5HDTMX-CojMpaoH.js → cynefin-OW5HDTMX-D6cgpCnH.js} +1 -1
  399. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-DF07YXGo.js → cynefinDiagram-5FMLGOSQ-BKv4Z-UX.js} +1 -1
  400. package/web-shell/assets/{dagre-3AP2YEHR-17-4WtCH.js → dagre-3AP2YEHR-B4ABMIG-.js} +1 -1
  401. package/web-shell/assets/{diagram-S7CK7UJ4-G3Wuyz9m.js → diagram-S7CK7UJ4-DgCkp_Lm.js} +1 -1
  402. package/web-shell/assets/{diagram-UQ7AKVKN-nyWIKZ8P.js → diagram-UQ7AKVKN-FG0FNokz.js} +1 -1
  403. package/web-shell/assets/{diagram-VSXAHHWV-tKHhmYSC.js → diagram-VSXAHHWV-JgkP9qg-.js} +1 -1
  404. package/web-shell/assets/{diagram-VX7I27RA-CpDf1hYk.js → diagram-VX7I27RA-ADh2x83l.js} +1 -1
  405. package/web-shell/assets/{diagram-Z3DM3KII-Cah2IFXG.js → diagram-Z3DM3KII-yXqoYF1J.js} +1 -1
  406. package/web-shell/assets/{ebnfDiagram-PWID7BFC-DNaCkgxy.js → ebnfDiagram-PWID7BFC-Duk83Ek_.js} +1 -1
  407. package/web-shell/assets/{erDiagram-SSCWMZ5O-CAdRgcf1.js → erDiagram-SSCWMZ5O-DMdvxySG.js} +1 -1
  408. package/web-shell/assets/{flowDiagram-A5DVABFB-CMUJAShL.js → flowDiagram-A5DVABFB-DHjVgSji.js} +1 -1
  409. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-o-_MUNey.js → ganttDiagram-EL5Y4UJY-DMM9DkCE.js} +1 -1
  410. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-_aG-2Z7O.js → gitGraphDiagram-WWUBYQGX-t_ug9vO8.js} +1 -1
  411. package/web-shell/assets/index-BGZRqbRo.css +36 -0
  412. package/web-shell/assets/index-DRri_6_x.js +2067 -0
  413. package/web-shell/assets/{index-BK_NKxiJ.js → index-zqvnpGHv.js} +1 -1
  414. package/web-shell/assets/{infoDiagram-RXCK75RN-qJPeZbGP.js → infoDiagram-RXCK75RN-eT1fANNm.js} +1 -1
  415. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-7Om4vNo1.js → ishikawaDiagram-5VMMS53U-k3evzZNn.js} +1 -1
  416. package/web-shell/assets/{journeyDiagram-EYS64GPL-BNtXqmBW.js → journeyDiagram-EYS64GPL-CGim3EAi.js} +1 -1
  417. package/web-shell/assets/{kanban-definition-3QL26DDD-COgFec8P.js → kanban-definition-3QL26DDD-WHfJo-22.js} +1 -1
  418. package/web-shell/assets/{layout-B9n81PC9.js → layout-DkqIaFlJ.js} +1 -1
  419. package/web-shell/assets/{linear-Bb6nXZQq.js → linear-Bdkd3mCz.js} +1 -1
  420. package/web-shell/assets/{mermaid.core-Cgrm3JVT.js → mermaid.core-CGw0LkT_.js} +6 -6
  421. package/web-shell/assets/{mindmap-definition-FBJOCRG2-TKwLTjnG.js → mindmap-definition-FBJOCRG2-C9V4rBvo.js} +1 -1
  422. package/web-shell/assets/{pegDiagram-XKGWAZYB-BJPuvlpi.js → pegDiagram-XKGWAZYB-CwoI2T5G.js} +1 -1
  423. package/web-shell/assets/{pieDiagram-E7YTZNPT-D01VkNsW.js → pieDiagram-E7YTZNPT-DaTmBmPG.js} +1 -1
  424. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-C4hHsiv-.js → quadrantDiagram-AXDQQJYC-plh6MyGI.js} +1 -1
  425. package/web-shell/assets/{railroadDiagram-O6MQD6OU-CuEO4xK2.js → railroadDiagram-O6MQD6OU-D_b-S0iK.js} +1 -1
  426. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-D5J_vIo5.js → requirementDiagram-EFPCY7ZU-zUzTN7VE.js} +1 -1
  427. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-DQKY223V.js → sankeyDiagram-P5KCCOFB-m6AhoD0l.js} +1 -1
  428. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-D27YV_cm.js → sequenceDiagram-WJ2MYXX4-Cwhzsine.js} +1 -1
  429. package/web-shell/assets/{sizeCapture-X5ZJPWSS-TJg8UcwV.js → sizeCapture-X5ZJPWSS-CcZuKIae.js} +1 -1
  430. package/web-shell/assets/{stateDiagram-HBIQ2CUA-CmnPzUIx.js → stateDiagram-HBIQ2CUA-CFoiJwD_.js} +1 -1
  431. package/web-shell/assets/stateDiagram-v2-4QOOHH4V--H8HdEmk.js +1 -0
  432. package/web-shell/assets/{swimlanes-XN3QIQJK-ByeP3_Nu.js → swimlanes-XN3QIQJK-CgS9hcaV.js} +1 -1
  433. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-ShE9OIgf.js +8 -0
  434. package/web-shell/assets/{timeline-definition-24CTP7MA-BsFA5juR.js → timeline-definition-24CTP7MA-Dzzc05t9.js} +1 -1
  435. package/web-shell/assets/{vennDiagram-4TSXK5OY-DREP2ECo.js → vennDiagram-4TSXK5OY-DemK0f7Y.js} +1 -1
  436. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-iyd9lKi2.js → wardleyDiagram-VM6X3IG4-CquLxtMr.js} +1 -1
  437. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-CVr1_j9q.js → xychartDiagram-S5SC5T6Z-BTBKTM5g.js} +1 -1
  438. package/web-shell/index.html +196 -2
  439. package/chunks/MaxSizedBox-X42SXBJH.js +0 -110
  440. package/chunks/agent-headless-IZM25LJA.js +0 -85
  441. package/chunks/bridge-ME6QXZNA.js +0 -119
  442. package/chunks/channel-settings-store-PEOI7XCG.js +0 -120
  443. package/chunks/chunk-7J6OTNGO.js +0 -424
  444. package/chunks/chunk-BWORX6FA.js +0 -135
  445. package/chunks/chunk-CPBF7KYF.js +0 -51
  446. package/chunks/chunk-H72BQNM3.js +0 -645
  447. package/chunks/chunk-JHYH6PYQ.js +0 -3096
  448. package/chunks/chunk-SS4MRMKE.js +0 -3525
  449. package/chunks/chunk-T4EFG2P5.js +0 -113
  450. package/chunks/chunk-XZA32HII.js +0 -19
  451. package/chunks/chunk-ZYNTSXWK.js +0 -32
  452. package/chunks/config-utils-R6M3TA34.js +0 -113
  453. package/chunks/contextCommand-ZCAP23J6.js +0 -106
  454. package/chunks/daemon-status-provider-K3SJ5C2U.js +0 -117
  455. package/chunks/daemon-trust-policy-DOR3YG62.js +0 -112
  456. package/chunks/deferred-core-runtime-WOYLUQQ7.js +0 -114
  457. package/chunks/earlyInputCapture-OHBEVO4K.js +0 -107
  458. package/chunks/errors-WAK6KFBC.js +0 -113
  459. package/chunks/exitPlanMode-UEYBG6P5.js +0 -83
  460. package/chunks/goal-tools-PTD3MBA7.js +0 -411
  461. package/chunks/handleAutoUpdate-FP3NWNSG.js +0 -109
  462. package/chunks/i18n-INIU5X7A.js +0 -124
  463. package/chunks/initializer-TYODV6GE.js +0 -113
  464. package/chunks/installationInfo-AAPKYDSZ.js +0 -107
  465. package/chunks/list-TUODDN6J.js +0 -116
  466. package/chunks/list-agents-DI3YFTDT.js +0 -80
  467. package/chunks/loadedSettingsAdapter-KJCLZ3C4.js +0 -110
  468. package/chunks/mcp-MWSAPFOL.js +0 -110
  469. package/chunks/nonInteractiveCli-JXKL343Q.js +0 -185
  470. package/chunks/pidfile-QOIQZFT2.js +0 -111
  471. package/chunks/prompt-terminal-ledger-FOMFTYOM.js +0 -105
  472. package/chunks/resumeHistoryUtils-NSGF3UCB.js +0 -118
  473. package/chunks/ripGrep-4CAT6SKV.js +0 -39
  474. package/chunks/scheduled-tasks-MN2ZZ5P6.js +0 -127
  475. package/chunks/serve-2XCHPPGG.js +0 -118
  476. package/chunks/skill-settings-ZL4JY5UE.js +0 -118
  477. package/chunks/spawnChannel-ZST6XJVJ.js +0 -112
  478. package/chunks/standalone-update-THVU3OKY.js +0 -118
  479. package/chunks/terminal-image-renderer-KS25G33E.js +0 -114
  480. package/chunks/theme-manager-YMZNG45F.js +0 -102
  481. package/chunks/total-session-admission-PVN64JVV.js +0 -114
  482. package/chunks/trustedFolders-FATSC4YI.js +0 -122
  483. package/chunks/updateCheck-D3YG2WCD.js +0 -118
  484. package/chunks/useAutoAcceptIndicator-ILINOSAS.js +0 -120
  485. package/chunks/workspace-providers-status-IJ4VHFMB.js +0 -114
  486. package/chunks/workspace-registry-BTGZIMPK.js +0 -123
  487. package/chunks/workspace-service-SIN67ITC.js +0 -126
  488. package/chunks/workspace-skills-status-F3RKCUIX.js +0 -113
  489. package/chunks/write-file-PAIGB33C.js +0 -88
  490. package/web-shell/assets/channel-CXjVLaBa.js +0 -1
  491. package/web-shell/assets/classDiagram-DTDB5LWJ-DANEijO3.js +0 -1
  492. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DANEijO3.js +0 -1
  493. package/web-shell/assets/index-Ci-z4zWY.js +0 -1913
  494. package/web-shell/assets/index-LDlXZRHA.css +0 -36
  495. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DNKPyrDc.js +0 -1
  496. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-ZL1HPC6w.js +0 -8
  497. /package/chunks/{chunk-FOGQO4FG.js → chunk-JA5CBKRP.js} +0 -0
@@ -5,7 +5,7 @@ import {
5
5
  isTerminalTaskLifecycleType,
6
6
  sanitizeLogText,
7
7
  truncateCodePoints
8
- } from "./chunk-ICURCKIU.js";
8
+ } from "./chunk-U4DJ5XB3.js";
9
9
  import "./chunk-IW6RQPQB.js";
10
10
  import "./chunk-CQ35AJ4Z.js";
11
11
  import {
@@ -765,7 +765,27 @@ var DwsClient = class {
765
765
  if (source.kind === "group") {
766
766
  args.push("--group", source.conversationId);
767
767
  }
768
- return this.eventStarter(this.executable, args, async (line) => onMessage(parseDwsImEvent(line)), onError);
768
+ return this.eventStarter(this.executable, args, (line) => {
769
+ const message = parseDwsImEvent(line);
770
+ const result = onMessage(message);
771
+ if (!result || !("admitted" in result))
772
+ return result;
773
+ if (source.kind !== "direct")
774
+ return result.completed;
775
+ const reportError = /* @__PURE__ */ __name((error) => {
776
+ try {
777
+ onError(error instanceof Error ? error : new Error(String(error)));
778
+ } catch {
779
+ return;
780
+ }
781
+ }, "reportError");
782
+ const admissionSucceeded = result.admitted.then(() => true, () => false);
783
+ void result.completed.catch(async (error) => {
784
+ if (await admissionSucceeded)
785
+ reportError(error);
786
+ });
787
+ return result.admitted;
788
+ }, onError);
769
789
  }
770
790
  async sendImMessage(target, content, idempotencyKey) {
771
791
  const targetArgs = target.kind === "group" ? ["--group", target.conversationId] : ["--open-dingtalk-id", target.openDingTalkId];
@@ -1056,6 +1076,7 @@ var MAX_DOCUMENT_CONTEXT_CHARS = 12e3;
1056
1076
  var MAX_TODO_CONTEXT_CHARS = 12e3;
1057
1077
  var MAX_COMMENT_CHARS = 4e3;
1058
1078
  var MAX_PROCESSED_ITEMS = 5e3;
1079
+ var MAX_DIRECT_REPLAY_DISPATCHES = 16;
1059
1080
  var MAX_INBOUND_ATTEMPTS = 5;
1060
1081
  var MAX_IM_TARGETS = 1e3;
1061
1082
  var MAX_TODO_STATES = 1e3;
@@ -1065,7 +1086,7 @@ var EVENT_RESTART_DELAY_MS = 2e3;
1065
1086
  var EVENT_RESTART_MAX_DELAY_MS = 5 * 6e4;
1066
1087
  var NO_REPLY_SENTINEL = "[NO_REPLY]";
1067
1088
  var NO_REPLY_SENTINEL_PATTERN = /^\[NO_REPLY\][.!]?$/i;
1068
- var ACK_REACTION_NAME = "\u6697\u4E2D\u89C2\u5BDF";
1089
+ var DEFAULT_START_REACTION = "\u{1F914}";
1069
1090
  var MAX_INBOUND_REACTION_TARGETS = 1e3;
1070
1091
  var NOTIFICATION_HISTORY_OVERLAP_MS = 5e3;
1071
1092
  var NOTIFICATION_POLL_INTERVAL_MS = 5e3;
@@ -1317,12 +1338,23 @@ var DwsChannel = class extends PollingChannelBase {
1317
1338
  userInstructions;
1318
1339
  client;
1319
1340
  imStates;
1341
+ startReactionName;
1342
+ endReactionName;
1320
1343
  watchTodos;
1321
1344
  inboundReactionTargets = /* @__PURE__ */ new Map();
1322
- activeReactionKeys = /* @__PURE__ */ new Set();
1345
+ activeReactions = /* @__PURE__ */ new Map();
1323
1346
  sessionReactionKeys = /* @__PURE__ */ new Map();
1347
+ reactionOperations = /* @__PURE__ */ new Map();
1348
+ endReactionKeys = /* @__PURE__ */ new Set();
1324
1349
  notifiedSenderPairingNotifications = /* @__PURE__ */ new Set();
1325
1350
  processingMessages = /* @__PURE__ */ new Map();
1351
+ queuedDirectMessages = /* @__PURE__ */ new Map();
1352
+ // Replay-started direct dispatches only. The cap must not be consumed by
1353
+ // live or followup traffic, whose queue entries outlive their turn.
1354
+ replayDirectDispatches = /* @__PURE__ */ new Map();
1355
+ directConversationTails = /* @__PURE__ */ new Map();
1356
+ directMessageStartResolvers = /* @__PURE__ */ new Map();
1357
+ pendingMessageCapacityWaiters = /* @__PURE__ */ new Set();
1326
1358
  pollAbortController = new AbortController();
1327
1359
  lifecycleGeneration = 0;
1328
1360
  connectionStartedAt = 0;
@@ -1331,6 +1363,8 @@ var DwsChannel = class extends PollingChannelBase {
1331
1363
  notificationWatermarkPulledBack = false;
1332
1364
  constructor(name, config, bridge, options, client) {
1333
1365
  const profile = configuredString(config.profile, "profile");
1366
+ const startReactionName = configuredString(config.startReaction, "startReaction") ?? DEFAULT_START_REACTION;
1367
+ const endReactionName = configuredString(config.endReaction, "endReaction");
1334
1368
  const watchTodos = configuredBoolean(config.watchTodos, "watchTodos");
1335
1369
  if (profile?.includes(",")) {
1336
1370
  throw new Error("DWS channel profile must select exactly one login profile.");
@@ -1358,6 +1392,8 @@ var DwsChannel = class extends PollingChannelBase {
1358
1392
  source,
1359
1393
  restartAttempts: 0
1360
1394
  }));
1395
+ this.startReactionName = startReactionName;
1396
+ this.endReactionName = endReactionName;
1361
1397
  this.watchTodos = watchTodos;
1362
1398
  }
1363
1399
  createInitialCursor() {
@@ -1497,15 +1533,19 @@ var DwsChannel = class extends PollingChannelBase {
1497
1533
  this.pollAbortController.abort();
1498
1534
  this.lastTodoPollAt = 0;
1499
1535
  this.todoTargets.clear();
1500
- for (const reactions of this.sessionReactionKeys.values()) {
1501
- for (const [key, { conversationId, messageId }] of reactions) {
1502
- if (!this.activeReactionKeys.delete(key))
1503
- continue;
1504
- void this.client.removeImReaction(conversationId, messageId, ACK_REACTION_NAME).catch((error) => this.logReactionFailure("disconnect reaction removal", error));
1505
- }
1536
+ for (const key of [...this.activeReactions.keys()]) {
1537
+ this.cleanupReaction(key, "disconnect reaction removal");
1506
1538
  }
1507
- this.activeReactionKeys.clear();
1508
1539
  this.sessionReactionKeys.clear();
1540
+ this.queuedDirectMessages.clear();
1541
+ this.replayDirectDispatches.clear();
1542
+ for (const resolve of this.directMessageStartResolvers.values())
1543
+ resolve();
1544
+ this.directMessageStartResolvers.clear();
1545
+ this.directConversationTails.clear();
1546
+ for (const resolve of this.pendingMessageCapacityWaiters)
1547
+ resolve();
1548
+ this.pendingMessageCapacityWaiters.clear();
1509
1549
  this.stopPollLoop();
1510
1550
  for (const state of this.imStates) {
1511
1551
  if (state.retryTimer)
@@ -1601,7 +1641,7 @@ Ask the bot operator to approve you with:
1601
1641
  }
1602
1642
  await this.client.sendImMessage(target, text, idempotencyKey);
1603
1643
  }
1604
- async sendThreadMessage(chatId, threadId, text) {
1644
+ async sendThreadMessage(chatId, threadId, text, sourceLabel2) {
1605
1645
  if (!this.connected) {
1606
1646
  throw new Error(`[Channel:${this.name}] DWS channel is disconnected.`);
1607
1647
  }
@@ -1610,21 +1650,23 @@ Ask the bot operator to approve you with:
1610
1650
  if (threadId !== taskId) {
1611
1651
  throw new Error(`[Channel:${this.name}] DWS todo delivery requires its taskId thread.`);
1612
1652
  }
1613
- await this.client.addTodoComment(taskId, text);
1653
+ await this.client.addTodoComment(taskId, this.formatMarkdownAttributedText(text, sourceLabel2));
1614
1654
  return;
1615
1655
  }
1616
1656
  if (!this.documentSet.has(chatId)) {
1617
- await this.sendMessage(chatId, text);
1657
+ await this.sendMessage(chatId, this.formatAttributedText(text, sourceLabel2));
1618
1658
  return;
1619
1659
  }
1620
1660
  if (!threadId) {
1621
1661
  throw new Error(`[Channel:${this.name}] DWS document delivery requires a commentKey.`);
1622
1662
  }
1623
- await this.client.replyToComment(chatId, threadId, text);
1663
+ await this.client.replyToComment(chatId, threadId, this.formatMarkdownAttributedText(text, sourceLabel2));
1624
1664
  }
1625
- async sendResponseMessage(chatId, text, sessionId) {
1665
+ async sendResponseMessage(chatId, text, sessionId, sourceLabel2) {
1626
1666
  if (isNoReply(text))
1627
1667
  return;
1668
+ const label = sourceLabel2 ?? this.getResponseSourceLabel(sessionId);
1669
+ const markdown = this.formatMarkdownAttributedText(text, label);
1628
1670
  const threadId = this.getResponseThreadId(sessionId);
1629
1671
  const taskId = this.todoTargets.get(chatId) ?? (threadId && todoChatId(threadId) === chatId ? threadId : void 0);
1630
1672
  if (taskId) {
@@ -1632,7 +1674,7 @@ Ask the bot operator to approve you with:
1632
1674
  throw new Error(`[Channel:${this.name}] DWS channel is disconnected.`);
1633
1675
  }
1634
1676
  try {
1635
- await this.client.addTodoComment(taskId, text);
1677
+ await this.client.addTodoComment(taskId, markdown);
1636
1678
  } catch (error) {
1637
1679
  if (!(error instanceof DwsCommandError) || error.outcome !== "unknown") {
1638
1680
  throw error;
@@ -1650,7 +1692,7 @@ Ask the bot operator to approve you with:
1650
1692
  throw new Error(`[Channel:${this.name}] DWS document delivery requires a commentKey.`);
1651
1693
  }
1652
1694
  try {
1653
- await this.client.replyToComment(chatId, threadId, text);
1695
+ await this.client.replyToComment(chatId, threadId, markdown);
1654
1696
  } catch (error) {
1655
1697
  if (!(error instanceof DwsCommandError) || error.outcome !== "unknown") {
1656
1698
  throw error;
@@ -1663,15 +1705,20 @@ Ask the bot operator to approve you with:
1663
1705
  const messageId = this.getResponseMessageId(sessionId);
1664
1706
  const senderId = this.getResponseSenderId(sessionId);
1665
1707
  if (!messageId || !senderId) {
1666
- await this.sendMessage(chatId, text);
1708
+ await this.sendMessage(chatId, this.formatAttributedText(text, label));
1667
1709
  return;
1668
1710
  }
1669
1711
  const idempotencyKey = stableUuid(`${this.name}\0${chatId}\0${messageId}\0${text}`);
1670
1712
  if (this.findImTarget(chatId)?.kind === "direct") {
1671
- await this.sendImText(chatId, text, idempotencyKey);
1713
+ await this.sendImText(chatId, this.formatAttributedText(text, label), idempotencyKey);
1672
1714
  return;
1673
1715
  }
1674
- await this.client.replyToImMessage(chatId, messageId, senderId, text, idempotencyKey);
1716
+ await this.client.replyToImMessage(chatId, messageId, senderId, this.formatAttributedText(text, label), idempotencyKey);
1717
+ }
1718
+ async pushProactive(target, text, sourceLabel2) {
1719
+ if (isNoReply(text))
1720
+ return;
1721
+ await super.pushProactive(target, text, sourceLabel2);
1675
1722
  }
1676
1723
  async pollOnce() {
1677
1724
  const signal = this.pollAbortController.signal;
@@ -1695,7 +1742,7 @@ Ask the bot operator to approve you with:
1695
1742
  for (const message of mentions.messages) {
1696
1743
  if (signal.aborted || !this.connected)
1697
1744
  return;
1698
- await this.handleImMessage({ kind: "at" }, message, true);
1745
+ await this.receiveImMessage({ kind: "at" }, message, true);
1699
1746
  }
1700
1747
  if (mentions.nextCursor) {
1701
1748
  this.cursor.mentionCheckpoint = {
@@ -1730,15 +1777,10 @@ Ask the bot operator to approve you with:
1730
1777
  }
1731
1778
  if (this.hasPendingMessage(key))
1732
1779
  continue;
1733
- try {
1734
- await this.handleImMessage({ kind: "direct" }, message, true);
1735
- } catch (error) {
1736
- if (!this.hasPendingMessage(key))
1737
- throw error;
1738
- process2.stderr.write(`[Channel:${this.name}] direct-message dispatch failed mid-window; the message is parked for retry: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
1739
- `);
1740
- }
1780
+ await this.receiveDirectMessage(message, true).admitted;
1741
1781
  }
1782
+ if (signal.aborted || !this.connected)
1783
+ return;
1742
1784
  if (this.notificationWatermarkPulledBack) {
1743
1785
  this.cursor.notificationCheckpoint = void 0;
1744
1786
  } else if (page.nextCursor) {
@@ -1885,7 +1927,7 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
1885
1927
  const subscription = await this.client.subscribeToIm(state.source, (message) => {
1886
1928
  state.lastError = void 0;
1887
1929
  state.restartAttempts = 0;
1888
- return this.handleImMessage(state.source, message);
1930
+ return state.source.kind === "direct" ? this.receiveDirectMessage(message) : this.receiveImMessage(state.source, message);
1889
1931
  }, (error) => {
1890
1932
  if (error instanceof DwsEventProcessError)
1891
1933
  state.lastError = error;
@@ -1975,35 +2017,120 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
1975
2017
  process2.stderr.write(`[Channel:${this.name}] DWS ${sanitizeLogText(sourceLabel(source), 120)} stream error: ${sanitizeLogText(error.message, 300)}
1976
2018
  `);
1977
2019
  }
1978
- async handleImMessage(source, message, fromHistory = false) {
2020
+ async receiveImMessage(source, message, fromHistory = false) {
1979
2021
  if (!this.connected)
1980
2022
  return;
1981
- if (this.isSelfMessage(message)) {
2023
+ if (this.markSelfMessageProcessed(message))
2024
+ return;
2025
+ if (this.isStaleLiveMessage(message, fromHistory) && message.eventTime !== void 0) {
1982
2026
  this.markProcessedMessage(messageKey(message));
1983
2027
  this.saveCursor();
1984
2028
  return;
1985
2029
  }
1986
- if (!fromHistory && message.eventTime !== void 0 && message.eventTime < this.connectionStartedAt - 5e3) {
1987
- if (source.kind !== "direct") {
1988
- this.markProcessedMessage(messageKey(message));
1989
- this.saveCursor();
1990
- return;
1991
- }
2030
+ if (source.kind === "group-all" && (this.config.groups[message.conversationId]?.requireMention ?? this.config.groups["*"]?.requireMention ?? true)) {
2031
+ return;
2032
+ }
2033
+ if ((source.kind === "group" || source.kind === "group-all") && this.config.groupPolicy === "pairing" && !this.groupGate.isGroupApproved(message.conversationId)) {
2034
+ return;
2035
+ }
2036
+ await this.dispatchImMessage(source, message, messageKey(message));
2037
+ }
2038
+ receiveDirectMessage(message, fromHistory = false, reportFailure = fromHistory) {
2039
+ const admission = this.admitReceivedDirectMessage(message, fromHistory, reportFailure);
2040
+ const completed = admission.then(({ completion }) => completion);
2041
+ void completed.catch(() => void 0);
2042
+ return {
2043
+ admitted: admission.then(() => void 0),
2044
+ completed
2045
+ };
2046
+ }
2047
+ async admitReceivedDirectMessage(message, fromHistory, reportFailure) {
2048
+ if (!this.connected)
2049
+ return { completion: Promise.resolve() };
2050
+ const key = messageKey(message);
2051
+ if (this.markSelfMessageProcessed(message)) {
2052
+ return { completion: Promise.resolve() };
2053
+ }
2054
+ if (this.isStaleLiveMessage(message, fromHistory) && message.eventTime !== void 0) {
1992
2055
  this.cursor.notificationWatermark = Math.min(this.cursor.notificationWatermark ?? this.connectionStartedAt, message.eventTime);
1993
2056
  this.notificationWatermarkPulledBack = true;
1994
2057
  this.cursor.notificationCheckpoint = void 0;
1995
2058
  process2.stderr.write(`[Channel:${this.name}] parked a stale direct message for history polling and pulled the watermark back to ${message.eventTime}: ${sanitizeLogText(message.messageId, 120)}
1996
2059
  `);
1997
2060
  this.saveCursor();
1998
- return;
2061
+ return { completion: Promise.resolve() };
1999
2062
  }
2000
- if (source.kind === "group-all" && (this.config.groups[message.conversationId]?.requireMention ?? this.config.groups["*"]?.requireMention ?? true)) {
2001
- return;
2063
+ return this.admitDirectMessage({ kind: "direct" }, message, key, reportFailure);
2064
+ }
2065
+ markSelfMessageProcessed(message) {
2066
+ if (!this.isSelfMessage(message))
2067
+ return false;
2068
+ this.markProcessedMessage(messageKey(message));
2069
+ this.saveCursor();
2070
+ return true;
2071
+ }
2072
+ isStaleLiveMessage(message, fromHistory) {
2073
+ return !fromHistory && message.eventTime !== void 0 && message.eventTime < this.connectionStartedAt - 5e3;
2074
+ }
2075
+ async admitDirectMessage(source, message, key, reportFailure) {
2076
+ if (this.cursor.processedMessages.includes(key)) {
2077
+ this.removePersistedPendingMessage(key);
2078
+ return { completion: Promise.resolve() };
2002
2079
  }
2003
- if ((source.kind === "group" || source.kind === "group-all") && this.config.groupPolicy === "pairing" && !this.groupGate.isGroupApproved(message.conversationId)) {
2004
- return;
2080
+ if (!this.hasPendingMessage(key)) {
2081
+ if (!await this.rememberPendingMessage(source, message)) {
2082
+ return { completion: Promise.resolve() };
2083
+ }
2005
2084
  }
2006
- const key = messageKey(message);
2085
+ return {
2086
+ completion: this.scheduleDirectMessage(source, message, key, reportFailure)
2087
+ };
2088
+ }
2089
+ scheduleDirectMessage(source, message, key, reportFailure) {
2090
+ const queued = this.queuedDirectMessages.get(key);
2091
+ if (queued)
2092
+ return queued;
2093
+ if (this.cursor.processedMessages.includes(key)) {
2094
+ this.removePersistedPendingMessage(key);
2095
+ return Promise.resolve();
2096
+ }
2097
+ const generation = this.lifecycleGeneration;
2098
+ const dispatch = /* @__PURE__ */ __name(async () => {
2099
+ try {
2100
+ if (!this.connected || generation !== this.lifecycleGeneration)
2101
+ return;
2102
+ await this.dispatchImMessage(source, message, key);
2103
+ } finally {
2104
+ if (this.queuedDirectMessages.get(key) === task) {
2105
+ this.queuedDirectMessages.delete(key);
2106
+ }
2107
+ }
2108
+ }, "dispatch");
2109
+ let resolveStarted;
2110
+ const started = new Promise((resolve) => {
2111
+ resolveStarted = resolve;
2112
+ });
2113
+ const previous = this.directConversationTails.get(message.conversationId);
2114
+ const predecessor = reportFailure || this.config.dispatchMode === "followup" ? previous?.completed : previous?.started;
2115
+ const task = predecessor ? predecessor.catch(() => void 0).then(dispatch) : Promise.resolve().then(dispatch);
2116
+ const tail = { started, completed: task };
2117
+ this.queuedDirectMessages.set(key, task);
2118
+ this.directMessageStartResolvers.set(key, resolveStarted);
2119
+ this.directConversationTails.set(message.conversationId, tail);
2120
+ void task.finally(() => {
2121
+ this.releaseDirectMessageStart(message.conversationId, message.messageId);
2122
+ if (this.directConversationTails.get(message.conversationId) === tail) {
2123
+ this.directConversationTails.delete(message.conversationId);
2124
+ }
2125
+ }).catch(() => void 0);
2126
+ if (reportFailure) {
2127
+ void task.catch((error) => {
2128
+ this.logImError(source, error instanceof Error ? error : new Error(String(error)));
2129
+ });
2130
+ }
2131
+ return task;
2132
+ }
2133
+ async dispatchImMessage(source, message, key) {
2007
2134
  let waitedOnInFlight = false;
2008
2135
  let inFlightError;
2009
2136
  while (true) {
@@ -2021,6 +2148,9 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2021
2148
  this.processingMessages.set(key, task);
2022
2149
  try {
2023
2150
  await task;
2151
+ if (this.cursor.processedMessages.includes(key) && this.hasPendingMessage(key)) {
2152
+ this.removePersistedPendingMessage(key);
2153
+ }
2024
2154
  } finally {
2025
2155
  if (this.processingMessages.get(key) === task) {
2026
2156
  this.processingMessages.delete(key);
@@ -2065,7 +2195,7 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2065
2195
  await this.handleInbound(envelope);
2066
2196
  } catch (error) {
2067
2197
  if (source.kind !== "at") {
2068
- this.rememberPendingMessage(source, message);
2198
+ await this.rememberFailedMessage(source, message);
2069
2199
  }
2070
2200
  if (this.recordInboundFailure(key, error, () => {
2071
2201
  this.markProcessedMessage(key);
@@ -2121,24 +2251,63 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2121
2251
  return;
2122
2252
  this.cursor.inboundFailures = failures.filter((failure) => failure.key !== key);
2123
2253
  }
2124
- rememberPendingMessage(source, message) {
2254
+ async rememberPendingMessage(source, message) {
2125
2255
  const key = messageKey(message);
2126
2256
  if (this.hasPendingMessage(key))
2127
- return;
2257
+ return true;
2258
+ if (!this.connected)
2259
+ return false;
2260
+ if ((this.cursor.pendingMessages?.length ?? 0) >= MAX_PROCESSED_ITEMS) {
2261
+ throw new Error("DWS pending-message capacity is exhausted; retry later.");
2262
+ }
2263
+ if (this.hasPendingMessage(key))
2264
+ return true;
2128
2265
  const pending = this.cursor.pendingMessages ?? [];
2129
- while (pending.length >= MAX_PROCESSED_ITEMS) {
2130
- const dropped = pending.shift();
2131
- if (!dropped)
2132
- break;
2133
- this.clearInboundFailure(messageKey(dropped.message));
2134
- process2.stderr.write(`[Channel:${this.name}] dropping the oldest pending DWS message because the retry queue reached ${MAX_PROCESSED_ITEMS}.
2135
- `);
2266
+ pending.push({ source, message });
2267
+ this.cursor.pendingMessages = pending;
2268
+ try {
2269
+ this.saveCursor();
2270
+ } catch (error) {
2271
+ this.removePendingMessage(key);
2272
+ throw error;
2136
2273
  }
2274
+ return true;
2275
+ }
2276
+ async rememberFailedMessage(source, message) {
2277
+ const key = messageKey(message);
2278
+ if (this.hasPendingMessage(key))
2279
+ return;
2280
+ const generation = this.lifecycleGeneration;
2281
+ while (this.connected && generation === this.lifecycleGeneration && (this.cursor.pendingMessages?.length ?? 0) >= MAX_PROCESSED_ITEMS) {
2282
+ await new Promise((resolve) => {
2283
+ this.pendingMessageCapacityWaiters.add(resolve);
2284
+ });
2285
+ }
2286
+ if (this.hasPendingMessage(key))
2287
+ return;
2288
+ const pending = this.cursor.pendingMessages ?? [];
2137
2289
  pending.push({ source, message });
2138
2290
  this.cursor.pendingMessages = pending;
2291
+ try {
2292
+ this.saveCursor();
2293
+ } catch {
2294
+ return;
2295
+ }
2296
+ }
2297
+ removePersistedPendingMessage(key) {
2298
+ if (this.removePendingMessage(key))
2299
+ this.saveCursor();
2139
2300
  }
2140
2301
  removePendingMessage(key) {
2141
- this.cursor.pendingMessages = (this.cursor.pendingMessages ?? []).filter((pending) => messageKey(pending.message) !== key);
2302
+ const pending = this.cursor.pendingMessages ?? [];
2303
+ const remaining = pending.filter((item) => messageKey(item.message) !== key);
2304
+ this.cursor.pendingMessages = remaining;
2305
+ if (remaining.length === pending.length)
2306
+ return false;
2307
+ for (const resolve of this.pendingMessageCapacityWaiters)
2308
+ resolve();
2309
+ this.pendingMessageCapacityWaiters.clear();
2310
+ return true;
2142
2311
  }
2143
2312
  async processDocumentNotification(message, key, notification) {
2144
2313
  const notificationKey = documentNotificationKey(notification);
@@ -2150,12 +2319,15 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
2150
2319
  const inFlight = this.processingMessages.get(notificationKey);
2151
2320
  if (inFlight) {
2152
2321
  await inFlight;
2153
- if (this.cursor.processedMessages.includes(notificationKey) || this.hasPendingDocumentNotification(notificationKey) && !this.gate.isAllowed(message.senderId)) {
2322
+ if (this.cursor.processedMessages.includes(notificationKey) || this.hasPendingDocumentNotification(notificationKey, message.senderId) && !this.gate.isAllowed(message.senderId)) {
2154
2323
  this.markProcessedMessage(key);
2155
- } else {
2156
- this.rememberPendingDocumentNotification(message, notification);
2324
+ this.saveCursor();
2325
+ return;
2157
2326
  }
2158
- this.saveCursor();
2327
+ if (this.processingMessages.get(notificationKey) === inFlight) {
2328
+ this.processingMessages.delete(notificationKey);
2329
+ }
2330
+ await this.processDocumentNotification(message, key, notification);
2159
2331
  return;
2160
2332
  }
2161
2333
  const task = (async () => {
@@ -2230,8 +2402,23 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
2230
2402
  if (signal.aborted || !this.connected)
2231
2403
  return;
2232
2404
  const key = messageKey(pending.message);
2405
+ if (pending.source.kind === "direct") {
2406
+ if (this.queuedDirectMessages.has(key))
2407
+ continue;
2408
+ if (this.replayDirectDispatches.size >= MAX_DIRECT_REPLAY_DISPATCHES) {
2409
+ continue;
2410
+ }
2411
+ const dispatched = this.scheduleDirectMessage(pending.source, pending.message, key, true);
2412
+ this.replayDirectDispatches.set(key, dispatched);
2413
+ void dispatched.finally(() => {
2414
+ if (this.replayDirectDispatches.get(key) === dispatched) {
2415
+ this.replayDirectDispatches.delete(key);
2416
+ }
2417
+ }).catch(() => void 0);
2418
+ continue;
2419
+ }
2233
2420
  try {
2234
- await this.handleImMessage(pending.source, pending.message, true);
2421
+ await this.receiveImMessage(pending.source, pending.message, true);
2235
2422
  this.removePendingMessage(key);
2236
2423
  this.saveCursor();
2237
2424
  } catch (error) {
@@ -2280,8 +2467,8 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
2280
2467
  hasPendingMessage(key) {
2281
2468
  return (this.cursor.pendingMessages ?? []).some((pending) => messageKey(pending.message) === key);
2282
2469
  }
2283
- hasPendingDocumentNotification(notificationKey) {
2284
- return (this.cursor.pendingDocumentNotifications ?? []).some((pending) => documentNotificationKey(pending) === notificationKey);
2470
+ hasPendingDocumentNotification(notificationKey, senderId) {
2471
+ return (this.cursor.pendingDocumentNotifications ?? []).some((pending) => documentNotificationKey(pending) === notificationKey && (senderId === void 0 || pending.senderId === senderId));
2285
2472
  }
2286
2473
  rememberPendingDocumentNotification(message, notification) {
2287
2474
  const key = documentNotificationKey(notification);
@@ -2323,6 +2510,14 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
2323
2510
  reactionKey(conversationId, messageId) {
2324
2511
  return `${conversationId}\0${messageId}`;
2325
2512
  }
2513
+ releaseDirectMessageStart(conversationId, messageId) {
2514
+ const key = `${conversationId}\0${messageId}`;
2515
+ const resolve = this.directMessageStartResolvers.get(key);
2516
+ if (!resolve)
2517
+ return;
2518
+ this.directMessageStartResolvers.delete(key);
2519
+ resolve();
2520
+ }
2326
2521
  rememberInboundReactionTarget(chatId, messageId, conversationId = chatId) {
2327
2522
  const key = this.reactionKey(chatId, messageId);
2328
2523
  this.inboundReactionTargets.delete(key);
@@ -2345,6 +2540,47 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
2345
2540
  if (reactions.size === 0)
2346
2541
  this.sessionReactionKeys.delete(sessionId);
2347
2542
  }
2543
+ releaseActiveReaction(key) {
2544
+ const reaction = this.activeReactions.get(key);
2545
+ if (!reaction)
2546
+ return void 0;
2547
+ this.activeReactions.delete(key);
2548
+ this.untrackSessionReaction(reaction.sessionId, key);
2549
+ return reaction;
2550
+ }
2551
+ enqueueReactionOperation(key, operation) {
2552
+ const previous = this.reactionOperations.get(key) ?? Promise.resolve();
2553
+ const next = previous.catch(() => void 0).then(() => operation(() => this.reactionOperations.get(key) === next)).catch((error) => this.logReactionFailure("reaction transition", error)).finally(() => {
2554
+ if (this.reactionOperations.get(key) === next) {
2555
+ this.reactionOperations.delete(key);
2556
+ }
2557
+ });
2558
+ this.reactionOperations.set(key, next);
2559
+ }
2560
+ rememberEndReaction(key) {
2561
+ this.endReactionKeys.delete(key);
2562
+ this.endReactionKeys.add(key);
2563
+ if (this.endReactionKeys.size > MAX_INBOUND_REACTION_TARGETS) {
2564
+ const oldest = this.endReactionKeys.values().next().value;
2565
+ if (oldest !== void 0)
2566
+ this.endReactionKeys.delete(oldest);
2567
+ }
2568
+ }
2569
+ async removeStartedReaction(reaction, action) {
2570
+ if (!reaction.added)
2571
+ return;
2572
+ try {
2573
+ await this.client.removeImReaction(reaction.target.conversationId, reaction.target.messageId, this.startReactionName);
2574
+ } catch (error) {
2575
+ this.logReactionFailure(action, error);
2576
+ }
2577
+ }
2578
+ cleanupReaction(key, action) {
2579
+ const reaction = this.releaseActiveReaction(key);
2580
+ if (!reaction)
2581
+ return;
2582
+ this.enqueueReactionOperation(key, () => this.removeStartedReaction(reaction, action));
2583
+ }
2348
2584
  startReaction(conversationId, messageId, sessionId) {
2349
2585
  if (!messageId)
2350
2586
  return;
@@ -2352,54 +2588,97 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
2352
2588
  if (!target)
2353
2589
  return;
2354
2590
  const key = this.reactionKey(target.conversationId, target.messageId);
2355
- if (this.activeReactionKeys.has(key))
2591
+ if (this.activeReactions.has(key))
2356
2592
  return;
2357
- this.activeReactionKeys.add(key);
2358
2593
  let reactions = this.sessionReactionKeys.get(sessionId);
2359
2594
  if (!reactions) {
2360
- reactions = /* @__PURE__ */ new Map();
2595
+ reactions = /* @__PURE__ */ new Set();
2361
2596
  this.sessionReactionKeys.set(sessionId, reactions);
2362
2597
  }
2363
- reactions.set(key, target);
2364
- void this.client.addImReaction(target.conversationId, target.messageId, ACK_REACTION_NAME).then(() => {
2365
- if (!this.activeReactionKeys.has(key)) {
2366
- void this.client.removeImReaction(target.conversationId, target.messageId, ACK_REACTION_NAME).catch((error) => this.logReactionFailure("late reaction removal", error));
2598
+ reactions.add(key);
2599
+ const reaction = {
2600
+ target,
2601
+ sessionId,
2602
+ added: false
2603
+ };
2604
+ this.activeReactions.set(key, reaction);
2605
+ this.enqueueReactionOperation(key, async () => {
2606
+ if (this.activeReactions.get(key) !== reaction)
2607
+ return;
2608
+ if (this.endReactionName && this.endReactionKeys.has(key)) {
2609
+ try {
2610
+ await this.client.removeImReaction(target.conversationId, target.messageId, this.endReactionName);
2611
+ this.endReactionKeys.delete(key);
2612
+ if (this.endReactionName === this.startReactionName) {
2613
+ reaction.added = false;
2614
+ }
2615
+ } catch (error) {
2616
+ this.logReactionFailure("previous end reaction removal", error);
2617
+ }
2618
+ }
2619
+ if (this.activeReactions.get(key) !== reaction)
2620
+ return;
2621
+ if (reaction.added)
2622
+ return;
2623
+ try {
2624
+ await this.client.addImReaction(target.conversationId, target.messageId, this.startReactionName);
2625
+ reaction.added = true;
2626
+ } catch (error) {
2627
+ this.logReactionFailure("start reaction add", error);
2367
2628
  }
2368
- }).catch((error) => {
2369
- this.activeReactionKeys.delete(key);
2370
- this.untrackSessionReaction(sessionId, key);
2371
- this.logReactionFailure("reaction add", error);
2372
2629
  });
2373
2630
  }
2374
- stopReaction(conversationId, messageId, sessionId) {
2631
+ finishReaction(conversationId, messageId, sessionId) {
2375
2632
  if (!messageId)
2376
2633
  return;
2377
2634
  const target = this.inboundReactionTargets.get(this.reactionKey(conversationId, messageId));
2378
2635
  if (!target)
2379
2636
  return;
2380
2637
  const key = this.reactionKey(target.conversationId, target.messageId);
2381
- this.untrackSessionReaction(sessionId, key);
2382
- if (!this.activeReactionKeys.delete(key))
2638
+ const active = this.activeReactions.get(key);
2639
+ if (!active || active.sessionId !== sessionId)
2383
2640
  return;
2384
- void this.client.removeImReaction(target.conversationId, target.messageId, ACK_REACTION_NAME).catch((error) => this.logReactionFailure("reaction removal", error));
2641
+ const reaction = this.releaseActiveReaction(key);
2642
+ if (!reaction)
2643
+ return;
2644
+ const generation = this.lifecycleGeneration;
2645
+ this.enqueueReactionOperation(key, async (isLatest) => {
2646
+ const replacement = this.activeReactions.get(key);
2647
+ if (replacement) {
2648
+ if (reaction.added)
2649
+ replacement.added = true;
2650
+ return;
2651
+ }
2652
+ await this.removeStartedReaction(reaction, "start reaction removal");
2653
+ if (!isLatest() || this.activeReactions.has(key) || !this.endReactionName || this.endReactionKeys.has(key) || !this.connected || generation !== this.lifecycleGeneration) {
2654
+ return;
2655
+ }
2656
+ try {
2657
+ await this.client.addImReaction(reaction.target.conversationId, reaction.target.messageId, this.endReactionName);
2658
+ this.rememberEndReaction(key);
2659
+ } catch (error) {
2660
+ this.logReactionFailure("end reaction add", error);
2661
+ }
2662
+ });
2385
2663
  }
2386
2664
  onTaskLifecycle(event) {
2387
2665
  if (event.type === "started") {
2666
+ if (event.messageId) {
2667
+ this.releaseDirectMessageStart(event.chatId, event.messageId);
2668
+ }
2388
2669
  this.startReaction(event.chatId, event.messageId, event.sessionId);
2389
2670
  return;
2390
2671
  }
2391
2672
  if (isTerminalTaskLifecycleType(event.type)) {
2392
- this.stopReaction(event.chatId, event.messageId, event.sessionId);
2673
+ this.finishReaction(event.chatId, event.messageId, event.sessionId);
2393
2674
  }
2394
2675
  }
2395
2676
  onSessionDied(sessionId) {
2396
2677
  const reactions = this.sessionReactionKeys.get(sessionId);
2397
2678
  if (reactions) {
2398
2679
  this.sessionReactionKeys.delete(sessionId);
2399
- for (const [key, { messageId, conversationId }] of reactions) {
2400
- if (!this.activeReactionKeys.delete(key))
2401
- continue;
2402
- void this.client.removeImReaction(conversationId, messageId, ACK_REACTION_NAME).catch((error) => this.logReactionFailure("session-death reaction removal", error));
2680
+ for (const key of reactions) {
2681
+ this.cleanupReaction(key, "session-death reaction removal");
2403
2682
  }
2404
2683
  }
2405
2684
  super.onSessionDied(sessionId);
@@ -2496,6 +2775,19 @@ var plugin = {
2496
2775
  label: "Watch Native Todos",
2497
2776
  kind: "boolean",
2498
2777
  description: "Poll pending todos assigned to this DWS account and run newly assigned or changed tasks"
2778
+ },
2779
+ {
2780
+ key: "startReaction",
2781
+ label: "Start Reaction",
2782
+ kind: "string",
2783
+ default: DEFAULT_START_REACTION,
2784
+ description: `DingTalk reaction emoji or name added while a task is running. Leave empty to use ${DEFAULT_START_REACTION}`
2785
+ },
2786
+ {
2787
+ key: "endReaction",
2788
+ label: "End Reaction",
2789
+ kind: "string",
2790
+ description: "DingTalk reaction emoji or name added after a task ends. Leave empty to disable it"
2499
2791
  }
2500
2792
  ],
2501
2793
  validateConfig: /* @__PURE__ */ __name((config) => {
@@ -2508,6 +2800,11 @@ var plugin = {
2508
2800
  if (config["watchTodos"] !== void 0 && typeof config["watchTodos"] !== "boolean") {
2509
2801
  return "DWS watchTodos must be a boolean.";
2510
2802
  }
2803
+ for (const field of ["startReaction", "endReaction"]) {
2804
+ if (config[field] !== void 0 && typeof config[field] !== "string") {
2805
+ return `DWS ${field} must be a string.`;
2806
+ }
2807
+ }
2511
2808
  return void 0;
2512
2809
  }, "validateConfig")
2513
2810
  },