@qwen-code/qwen-code 0.19.12-preview.0 → 0.19.12

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 (149) hide show
  1. package/bundled/qc-helper/docs/features/channels/overview.md +4 -2
  2. package/chunks/{MaxSizedBox-3KIWAU6Z.js → MaxSizedBox-QOXLJGAF.js} +4 -4
  3. package/chunks/{StandaloneSessionPicker-TF626NO7.js → StandaloneSessionPicker-FLV6CGYJ.js} +16 -16
  4. package/chunks/{acpAgent-JDVJXVBO.js → acpAgent-OB2CTF3P.js} +46 -46
  5. package/chunks/{agent-BONWC4VY.js → agent-CKSI7BTR.js} +4 -4
  6. package/chunks/{agent-headless-H7HKMGLZ.js → agent-headless-U36LIYTU.js} +4 -4
  7. package/chunks/{bridge-ATN2TLWJ.js → bridge-AIKTINJG.js} +7 -7
  8. package/chunks/{channel-worker-group-S3H5QHTI.js → channel-worker-group-NEUVTPB2.js} +4 -4
  9. package/chunks/{channel-worker-manager-ZJ4HTMO2.js → channel-worker-manager-7CQVOVWV.js} +4 -4
  10. package/chunks/{channel-worker-supervisor-JA6VZ5V5.js → channel-worker-supervisor-3BU2KNCZ.js} +3 -3
  11. package/chunks/{chunk-SMASS3CY.js → chunk-2476XGOU.js} +1 -1
  12. package/chunks/{chunk-QGONRHUS.js → chunk-2CCDMJM7.js} +1 -1
  13. package/chunks/{chunk-F2YCCUXI.js → chunk-3B6PSWHE.js} +3 -3
  14. package/chunks/{chunk-XACBIZJB.js → chunk-3ESL7JXA.js} +1 -1
  15. package/chunks/{chunk-DYUPBU7H.js → chunk-42VIHAYT.js} +1 -1
  16. package/chunks/{chunk-PTXVHS2O.js → chunk-4MPYGENG.js} +4 -4
  17. package/chunks/{chunk-IQRQVPGN.js → chunk-4SJJT466.js} +20 -20
  18. package/chunks/{chunk-WTHRMVKB.js → chunk-5N7M4XYN.js} +3 -3
  19. package/chunks/{chunk-ZFHHBRRA.js → chunk-5QSVANRT.js} +1 -1
  20. package/chunks/{chunk-TFV3XVAZ.js → chunk-64GC5EMF.js} +1 -1
  21. package/chunks/{chunk-JUNVFQVY.js → chunk-67Q33DQY.js} +4 -4
  22. package/chunks/{chunk-7KS72E2N.js → chunk-6ETOSWAO.js} +1 -1
  23. package/chunks/{chunk-ILQ42UG6.js → chunk-6IITZE7O.js} +5 -5
  24. package/chunks/{chunk-7O7WZH7N.js → chunk-APOFULHK.js} +1 -1
  25. package/chunks/{chunk-53UMEONK.js → chunk-BABX5XRO.js} +1 -1
  26. package/chunks/{chunk-MHEZV3OY.js → chunk-BKNPMEN6.js} +157 -58
  27. package/chunks/{chunk-66F4IJ4L.js → chunk-CHPQFLW6.js} +3 -3
  28. package/chunks/{chunk-YN2I5I42.js → chunk-CPU6I5YV.js} +4 -4
  29. package/chunks/{chunk-OZWJAFFE.js → chunk-DJ4VHAFJ.js} +3 -3
  30. package/chunks/{chunk-SNONG66P.js → chunk-DUR7BZYK.js} +7 -7
  31. package/chunks/{chunk-CHVH4DVN.js → chunk-EDFD7VOX.js} +1 -1
  32. package/chunks/{chunk-NJQPQ4IO.js → chunk-EFAXBOQO.js} +7 -7
  33. package/chunks/{chunk-BEFQGC6H.js → chunk-EISVEV45.js} +2 -2
  34. package/chunks/{chunk-NVUGS23Y.js → chunk-ETN2G32U.js} +4 -4
  35. package/chunks/{chunk-54KPEDM2.js → chunk-FUSMC3SZ.js} +3 -3
  36. package/chunks/{chunk-6TDA4EVC.js → chunk-GCY7QTCE.js} +708 -292
  37. package/chunks/{chunk-JCYMQU5F.js → chunk-GFYFLDEG.js} +2 -2
  38. package/chunks/{chunk-W4DFAUAO.js → chunk-GLH2NTPB.js} +1 -1
  39. package/chunks/{chunk-XFJU7SVP.js → chunk-GMUPIMHF.js} +1 -1
  40. package/chunks/{chunk-CXWUXRD5.js → chunk-GSPWDTYY.js} +10 -10
  41. package/chunks/{chunk-6WZZHJSZ.js → chunk-GW7BONBU.js} +3 -3
  42. package/chunks/{chunk-WACI4VES.js → chunk-GXFYV7MP.js} +4 -4
  43. package/chunks/{chunk-HQ7MDVBO.js → chunk-HD6EGS5K.js} +5 -5
  44. package/chunks/{chunk-2DZ7E27L.js → chunk-HVGJWOR6.js} +2 -2
  45. package/chunks/{chunk-7LMAKIWE.js → chunk-HZ4M2UQD.js} +1 -1
  46. package/chunks/{chunk-HVWPSGDY.js → chunk-I7RRHHYG.js} +1 -1
  47. package/chunks/{chunk-IKLWU6YS.js → chunk-KGWA7XYL.js} +4 -4
  48. package/chunks/{chunk-DULSE2SH.js → chunk-KMJOMWHE.js} +1 -1
  49. package/chunks/{chunk-R32BTEZY.js → chunk-KNGZ5EYL.js} +1 -1
  50. package/chunks/{chunk-4AGBO6RB.js → chunk-KRMARA3A.js} +2 -2
  51. package/chunks/{chunk-675SVDMD.js → chunk-LUJQUNKY.js} +9 -9
  52. package/chunks/{chunk-6QGZVKOO.js → chunk-MRE77ST5.js} +4 -4
  53. package/chunks/{chunk-LODZMRXC.js → chunk-N47VAEAJ.js} +10 -10
  54. package/chunks/{chunk-PSISZNIT.js → chunk-NALRQ3SG.js} +36 -28
  55. package/chunks/{chunk-K7P34F2J.js → chunk-NE6HHLL3.js} +1 -1
  56. package/chunks/{chunk-Z4ZCVYJ5.js → chunk-NPMVLWYL.js} +3 -3
  57. package/chunks/{chunk-4W55BHOC.js → chunk-OBSLEYCD.js} +1 -1
  58. package/chunks/{chunk-MCYZTKBV.js → chunk-OEHCAWUA.js} +2 -2
  59. package/chunks/{chunk-ZPVGEMVC.js → chunk-PK7COE5O.js} +1 -1
  60. package/chunks/{chunk-NGTQA57Y.js → chunk-PR5XQ73G.js} +1 -1
  61. package/chunks/{chunk-FEZXQXW2.js → chunk-PUKUUASO.js} +1 -1
  62. package/chunks/{chunk-LHEQDKAR.js → chunk-QIFTJDBY.js} +1 -1
  63. package/chunks/{chunk-LYFDJTXE.js → chunk-R3EDIMYZ.js} +1 -1
  64. package/chunks/{chunk-HZXU6YZW.js → chunk-RKUMFUFM.js} +4 -4
  65. package/chunks/{chunk-3PE7OY2G.js → chunk-TKASNYDS.js} +1 -1
  66. package/chunks/{chunk-EWPLL4OT.js → chunk-UCTCDLDS.js} +1 -1
  67. package/chunks/{chunk-LLIGYAQU.js → chunk-UZC5VPOJ.js} +2 -2
  68. package/chunks/{chunk-CMHJEUVB.js → chunk-VEFR4XJQ.js} +1 -1
  69. package/chunks/{chunk-AWOU24F6.js → chunk-VLHQMOZK.js} +3 -3
  70. package/chunks/{chunk-4OVECYBM.js → chunk-W4UN42YP.js} +4 -4
  71. package/chunks/{chunk-E655RDRL.js → chunk-W6CQPLWM.js} +1 -1
  72. package/chunks/{chunk-Y5UDBQYF.js → chunk-WIYV7CSF.js} +2 -2
  73. package/chunks/{chunk-7OZGMFHC.js → chunk-XSEWNUMZ.js} +5 -5
  74. package/chunks/{chunk-R4RIMOJL.js → chunk-ZGT623SG.js} +10 -10
  75. package/chunks/{chunk-NSZJQACR.js → chunk-ZSDFNE6Y.js} +1 -1
  76. package/chunks/{computer-use-UY4A72X7.js → computer-use-4PUGCUQK.js} +4 -4
  77. package/chunks/{config-utils-KWTRFP7D.js → config-utils-6PJUXHLI.js} +3 -3
  78. package/chunks/{contextCommand-3DZ2SVH6.js → contextCommand-C57KTWFV.js} +6 -6
  79. package/chunks/{create-sub-session-OT7WXLDO.js → create-sub-session-5Q42XR6I.js} +4 -4
  80. package/chunks/{daemon-status-provider-GTZOYSBO.js → daemon-status-provider-YPV3UXHT.js} +11 -11
  81. package/chunks/{dist-RZBJT5O2.js → dist-3DQNQJ6H.js} +1 -1
  82. package/chunks/{dist-HCUUS6IH.js → dist-IEQSDXS7.js} +2 -2
  83. package/chunks/{dist-Y54RURGT.js → dist-IGZMVS5R.js} +1 -1
  84. package/chunks/{dist-O2IP3G5D.js → dist-J2H4KTLB.js} +1 -1
  85. package/chunks/{dist-ZJHKKWUD.js → dist-NUXRQHC5.js} +1 -1
  86. package/chunks/{dist-YTPTCUAD.js → dist-XLE6ODMB.js} +1 -1
  87. package/chunks/{earlyInputCapture-GGWVGBZ7.js → earlyInputCapture-5VDWSYAM.js} +4 -4
  88. package/chunks/{edit-JN467GIR.js → edit-GORZTX2U.js} +5 -5
  89. package/chunks/{enter-worktree-MMO4VBQE.js → enter-worktree-LJB2AW4L.js} +4 -4
  90. package/chunks/{enterPlanMode-BRZOG4DB.js → enterPlanMode-LIIPP37T.js} +4 -4
  91. package/chunks/{environment-LOCDCWMZ.js → environment-HQ2UHJ35.js} +6 -6
  92. package/chunks/{errors-XXSL5HGG.js → errors-6JD5VMVQ.js} +6 -6
  93. package/chunks/{exit-worktree-UD7PI5H5.js → exit-worktree-IEP2WHOV.js} +4 -4
  94. package/chunks/{exitPlanMode-EIUETQI6.js → exitPlanMode-U5Z6XBLO.js} +4 -4
  95. package/chunks/{fast-path-ULGAEUVK.js → fast-path-HFKNMP23.js} +2 -2
  96. package/chunks/{gemini-KW3APZ4P.js → gemini-C2SCJH3N.js} +40 -40
  97. package/chunks/{geminiContentGenerator-4BQ5QHPR.js → geminiContentGenerator-ADZTXEKV.js} +1 -1
  98. package/chunks/{glob-FPKAMR6B.js → glob-GOAPGD6G.js} +4 -4
  99. package/chunks/{grep-MOGRCYB4.js → grep-HZLSTX7D.js} +4 -4
  100. package/chunks/{handleAutoUpdate-QUMRZZOS.js → handleAutoUpdate-UF74WGFE.js} +8 -8
  101. package/chunks/{i18n-F3W6YUYP.js → i18n-FMXIYUOC.js} +5 -5
  102. package/chunks/{initializer-KLU2KAIZ.js → initializer-ERDBM3DU.js} +9 -9
  103. package/chunks/{installationInfo-P3ZP2SIZ.js → installationInfo-LROMXYLX.js} +5 -5
  104. package/chunks/{list-4X6D5JD2.js → list-6JPJROU5.js} +12 -12
  105. package/chunks/{loadedSettingsAdapter-446B6WKA.js → loadedSettingsAdapter-QCWYUBBF.js} +9 -9
  106. package/chunks/{mcp-JYVOJZOD.js → mcp-3P3KWYWO.js} +9 -9
  107. package/chunks/{monitor-KY7YH7TL.js → monitor-LMYKCF6R.js} +4 -4
  108. package/chunks/{nonInteractiveCli-EK35TLVJ.js → nonInteractiveCli-YURFHZV5.js} +39 -39
  109. package/chunks/{notebook-edit-IHGW42QK.js → notebook-edit-IBEOVZ6A.js} +5 -5
  110. package/chunks/{openaiContentGenerator-FURUCKQJ.js → openaiContentGenerator-42PZKET5.js} +2 -2
  111. package/chunks/{pidfile-WKUVXDMR.js → pidfile-VTBDIGOH.js} +4 -4
  112. package/chunks/{processUtils-LHSRN76X.js → processUtils-L7ZKOGDG.js} +2 -2
  113. package/chunks/{qwenContentGenerator-NRLM7R36.js → qwenContentGenerator-VR2CNFGI.js} +5 -5
  114. package/chunks/{qwenOAuth2-5FNX3AWH.js → qwenOAuth2-6LS2T3Q6.js} +3 -3
  115. package/chunks/{read-file-VLEAEXFP.js → read-file-VSKOE22I.js} +1 -1
  116. package/chunks/{ripGrep-MT23EIDD.js → ripGrep-5V5FLW2A.js} +4 -4
  117. package/chunks/{run-qwen-serve-5HWOQFLI.js → run-qwen-serve-LSOPP4R2.js} +30 -30
  118. package/chunks/{runtime-6IVKJSLW.js → runtime-LT7R4CS5.js} +13 -13
  119. package/chunks/{scheduler-63GJG75U.js → scheduler-YOWQ7KZP.js} +4 -4
  120. package/chunks/{serve-3LL7RRDP.js → serve-VWLBXKGK.js} +9 -9
  121. package/chunks/{server-AA24QLPA.js → server-3RW3FYOH.js} +32 -32
  122. package/chunks/{session-LRVCFQQQ.js → session-ZONXFOBQ.js} +40 -40
  123. package/chunks/{settings-ZX3OKUT4.js → settings-JC3VC53L.js} +8 -8
  124. package/chunks/{shell-KR3IMYH6.js → shell-2NGEMAVM.js} +4 -4
  125. package/chunks/{skill-QLM2LSF7.js → skill-3U2T6H3E.js} +1 -1
  126. package/chunks/{spawnChannel-6WFOK3SA.js → spawnChannel-QEAUPARQ.js} +6 -6
  127. package/chunks/{src-ADLNIPHD.js → src-75ZPXO7B.js} +4 -4
  128. package/chunks/{standalone-update-C54OTJWJ.js → standalone-update-UUJWJWYY.js} +6 -6
  129. package/chunks/{startInteractiveUI-KFAOS6HC.js → startInteractiveUI-V7XISPQ6.js} +62 -54
  130. package/chunks/{team-create-Q5B5M7UD.js → team-create-R6AXDYPG.js} +4 -4
  131. package/chunks/{team-plan-approval-J55PXNY2.js → team-plan-approval-O2ZPPT64.js} +4 -4
  132. package/chunks/{theme-manager-QWTDRPHV.js → theme-manager-YIX2IC2D.js} +4 -4
  133. package/chunks/{tool-search-LSSKWZKH.js → tool-search-5IE2VO7X.js} +1 -1
  134. package/chunks/{total-session-admission-S6ATY5HY.js → total-session-admission-K6APQYEF.js} +7 -7
  135. package/chunks/{trustedFolders-CY4TUPDJ.js → trustedFolders-GPSSPVBF.js} +5 -5
  136. package/chunks/{update-relaunch-IOKOUV3K.js → update-relaunch-4BVAPX6Y.js} +5 -5
  137. package/chunks/{updateCheck-YNRFE4V7.js → updateCheck-AHTHWLAM.js} +6 -6
  138. package/chunks/{validateNonInterActiveAuth-OXTECS4B.js → validateNonInterActiveAuth-UKAPCWDM.js} +35 -35
  139. package/chunks/{version-2CZQQDL5.js → version-EXGWKKQE.js} +1 -1
  140. package/chunks/{web-fetch-7QTEGJI5.js → web-fetch-ZDNE6FF2.js} +2 -2
  141. package/chunks/{workflow-G3CZU256.js → workflow-G7U6OQWS.js} +5 -5
  142. package/chunks/{workspace-providers-status-UHQOIPAZ.js → workspace-providers-status-W6CEA6YM.js} +12 -12
  143. package/chunks/{workspace-registration-store-5WPCMX4F.js → workspace-registration-store-OGBMWCLC.js} +1 -1
  144. package/chunks/{workspace-registry-LAQCRQTH.js → workspace-registry-ZUWQM44P.js} +7 -7
  145. package/chunks/{workspace-service-6ZEUJY2Z.js → workspace-service-UXX5P7GU.js} +13 -13
  146. package/chunks/{workspace-skills-status-YG6OITSM.js → workspace-skills-status-635B5R7N.js} +10 -10
  147. package/chunks/{write-file-E7T3PU3B.js → write-file-DR3HN7IH.js} +5 -5
  148. package/cli.js +11 -11
  149. package/package.json +3 -3
@@ -50,6 +50,8 @@ init_esbuild_shims();
50
50
 
51
51
  // packages/channels/base/dist/paths.js
52
52
  init_esbuild_shims();
53
+ import * as crypto from "node:crypto";
54
+ import * as fs from "node:fs";
53
55
  import * as path from "node:path";
54
56
  import * as os from "node:os";
55
57
  function resolvePath(dir) {
@@ -58,10 +60,7 @@ function resolvePath(dir) {
58
60
  const relativeSegments = resolved === "~" ? [] : resolved.slice(2).split(/[/\\]+/).filter(Boolean);
59
61
  resolved = path.join(os.homedir(), ...relativeSegments);
60
62
  }
61
- if (!path.isAbsolute(resolved)) {
62
- resolved = path.resolve(resolved);
63
- }
64
- return resolved;
63
+ return path.resolve(resolved);
65
64
  }
66
65
  __name(resolvePath, "resolvePath");
67
66
  function getGlobalQwenDir() {
@@ -73,6 +72,22 @@ function getGlobalQwenDir() {
73
72
  return homeDir ? path.join(homeDir, ".qwen") : path.join(os.tmpdir(), ".qwen");
74
73
  }
75
74
  __name(getGlobalQwenDir, "getGlobalQwenDir");
75
+ function canonicalizeWorkspacePath(workspaceCwd) {
76
+ const resolved = resolvePath(workspaceCwd);
77
+ try {
78
+ return fs.realpathSync.native(resolved);
79
+ } catch {
80
+ return resolved;
81
+ }
82
+ }
83
+ __name(canonicalizeWorkspacePath, "canonicalizeWorkspacePath");
84
+ function getWorkspaceScopeDirName(workspaceCwd) {
85
+ const resolved = canonicalizeWorkspacePath(workspaceCwd);
86
+ const hash = crypto.createHash("sha256").update(resolved).digest("hex").slice(0, 12);
87
+ const base = path.basename(resolved).replace(/[^a-zA-Z0-9._-]/g, "_").slice(0, 32);
88
+ return base ? `${base}-${hash}` : hash;
89
+ }
90
+ __name(getWorkspaceScopeDirName, "getWorkspaceScopeDirName");
76
91
 
77
92
  // packages/channels/base/dist/AcpBridge.js
78
93
  init_esbuild_shims();
@@ -308,7 +323,7 @@ var AcpBridge = class extends EventEmitter {
308
323
  this.child = null;
309
324
  this.emit("disconnected", code, signal);
310
325
  });
311
- await new Promise((resolve2) => setTimeout(resolve2, 1e3));
326
+ await new Promise((resolve3) => setTimeout(resolve3, 1e3));
312
327
  if (!this.child || this.child.killed) {
313
328
  throw new Error("ACP process failed to start");
314
329
  }
@@ -493,7 +508,7 @@ var AcpBridge = class extends EventEmitter {
493
508
  requestPermission(request) {
494
509
  const requestId = `acp-permission-${randomUUID()}`;
495
510
  const sessionId = typeof request.sessionId === "string" && request.sessionId.length > 0 ? request.sessionId : request.toolCall.toolCallId;
496
- return new Promise((resolve2) => {
511
+ return new Promise((resolve3) => {
497
512
  const timeout = setTimeout(() => {
498
513
  const pending = this.pendingPermissions.get(requestId);
499
514
  if (!pending) {
@@ -512,7 +527,7 @@ var AcpBridge = class extends EventEmitter {
512
527
  });
513
528
  }, ACP_PERMISSION_RESPONSE_TIMEOUT_MS);
514
529
  timeout.unref?.();
515
- this.pendingPermissions.set(requestId, { sessionId, resolve: resolve2, timeout });
530
+ this.pendingPermissions.set(requestId, { sessionId, resolve: resolve3, timeout });
516
531
  this.emitResponseBoundary(sessionId);
517
532
  this.emit("permissionRequest", {
518
533
  requestId,
@@ -855,7 +870,7 @@ var DaemonChannelBridge = class extends EventEmitter2 {
855
870
  const result = await session.prompt({ prompt }, controller.signal);
856
871
  await Promise.race([
857
872
  turnBarrier,
858
- new Promise((resolve2) => setTimeout(resolve2, 0))
873
+ new Promise((resolve3) => setTimeout(resolve3, 0))
859
874
  ]);
860
875
  const textResult = chunks.join("") || slashCommandOutput;
861
876
  this.emit("promptComplete", {
@@ -1259,15 +1274,15 @@ var DaemonChannelBridge = class extends EventEmitter2 {
1259
1274
  this.emit("responseBoundary", sessionId);
1260
1275
  }
1261
1276
  createTurnBarrier(sessionId) {
1262
- return new Promise((resolve2) => {
1263
- this.turnBarriers.set(sessionId, resolve2);
1277
+ return new Promise((resolve3) => {
1278
+ this.turnBarriers.set(sessionId, resolve3);
1264
1279
  });
1265
1280
  }
1266
1281
  resolveTurnBarrier(sessionId) {
1267
- const resolve2 = this.turnBarriers.get(sessionId);
1268
- if (resolve2) {
1282
+ const resolve3 = this.turnBarriers.get(sessionId);
1283
+ if (resolve3) {
1269
1284
  this.turnBarriers.delete(sessionId);
1270
- resolve2();
1285
+ resolve3();
1271
1286
  }
1272
1287
  }
1273
1288
  clearTurnBarrier(sessionId) {
@@ -1388,7 +1403,7 @@ var BlockStreamer = class {
1388
1403
 
1389
1404
  // packages/channels/base/dist/ChannelBase.js
1390
1405
  init_esbuild_shims();
1391
- import { basename, join as join5 } from "node:path";
1406
+ import { basename as basename3, join as join5 } from "node:path";
1392
1407
 
1393
1408
  // packages/channels/base/dist/GroupGate.js
1394
1409
  init_esbuild_shims();
@@ -1750,8 +1765,8 @@ var SenderGate = class {
1750
1765
 
1751
1766
  // packages/channels/base/dist/PairingStore.js
1752
1767
  init_esbuild_shims();
1753
- import * as crypto from "node:crypto";
1754
- import * as fs from "node:fs";
1768
+ import * as crypto2 from "node:crypto";
1769
+ import * as fs2 from "node:fs";
1755
1770
  import * as path2 from "node:path";
1756
1771
  var SAFE_ALPHABET = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
1757
1772
  var CODE_LENGTH = 8;
@@ -1764,10 +1779,94 @@ var PairingStore = class {
1764
1779
  dir;
1765
1780
  pendingPath;
1766
1781
  allowlistPath;
1767
- constructor(channelName) {
1768
- this.dir = path2.join(getGlobalQwenDir(), "channels");
1769
- this.pendingPath = path2.join(this.dir, `${channelName}-pairing.json`);
1770
- this.allowlistPath = path2.join(this.dir, `${channelName}-allowlist.json`);
1782
+ migratedSentinelPath;
1783
+ /**
1784
+ * @param channelName Channel name the state is keyed by.
1785
+ * @param workspaceCwd Workspace working directory to scope the state to.
1786
+ * When provided, files live under
1787
+ * `<qwen-home>/channels/<workspace-scope>/` so two workspaces using the
1788
+ * same channel name never share pairing requests or allowlist entries
1789
+ * (see #7017 — sharing them is an authorization-boundary violation in
1790
+ * multi-workspace daemon deployments). Omitting it preserves the legacy
1791
+ * global layout (`<qwen-home>/channels/`).
1792
+ */
1793
+ constructor(channelName, workspaceCwd) {
1794
+ const channelsRoot = path2.join(getGlobalQwenDir(), "channels");
1795
+ this.dir = workspaceCwd ? path2.join(channelsRoot, getWorkspaceScopeDirName(workspaceCwd)) : channelsRoot;
1796
+ const safeChannelName = encodeURIComponent(channelName);
1797
+ this.pendingPath = path2.join(this.dir, `${safeChannelName}-pairing.json`);
1798
+ this.allowlistPath = path2.join(this.dir, `${safeChannelName}-allowlist.json`);
1799
+ this.migratedSentinelPath = path2.join(this.dir, `${safeChannelName}.migrated`);
1800
+ if (workspaceCwd) {
1801
+ this.migrateLegacyState(channelsRoot, channelName);
1802
+ }
1803
+ }
1804
+ /**
1805
+ * One-time grandfathering of pre-scoping state: the first time this
1806
+ * (workspace, channel) pair is constructed, copy the legacy GLOBAL files in
1807
+ * so senders that were already approved stay approved after upgrading.
1808
+ *
1809
+ * Gated by a per-channel sentinel file inside the scope directory — NOT by
1810
+ * the directory itself: one workspace can start several channels in turn,
1811
+ * and a directory-level gate would let only the first channel ever migrate.
1812
+ * The sentinel is written even when there was nothing to copy, so a legacy
1813
+ * file written later (e.g. by an older version still running concurrently)
1814
+ * is never absorbed into a scope that already went through this decision.
1815
+ *
1816
+ * Each file is copied independently and best-effort (an unreadable pairing
1817
+ * file must not block the allowlist, and vice versa), via a
1818
+ * uniquely-named temp file + atomic rename so a crash mid-copy cannot
1819
+ * leave a truncated scoped file behind the closed gate. A file the scoped
1820
+ * store already has is never overwritten.
1821
+ *
1822
+ * Copy, not move: another workspace upgrading later must be able to
1823
+ * grandfather the same baseline, and an older qwen version running
1824
+ * concurrently still reads the global files.
1825
+ *
1826
+ * Revocation therefore means REMOVING ENTRIES from the scoped allowlist
1827
+ * (and from the legacy global file, while it exists) — not deleting files.
1828
+ */
1829
+ migrateLegacyState(channelsRoot, channelName) {
1830
+ try {
1831
+ if (fs2.existsSync(this.migratedSentinelPath)) {
1832
+ return;
1833
+ }
1834
+ const legacyPairs = [
1835
+ [
1836
+ path2.join(channelsRoot, `${channelName}-pairing.json`),
1837
+ this.pendingPath
1838
+ ],
1839
+ [
1840
+ path2.join(channelsRoot, `${channelName}-allowlist.json`),
1841
+ this.allowlistPath
1842
+ ]
1843
+ ];
1844
+ this.ensureDir();
1845
+ let allSucceeded = true;
1846
+ for (const [legacyPath, scopedPath] of legacyPairs) {
1847
+ try {
1848
+ if (path2.dirname(path2.resolve(legacyPath)) !== channelsRoot) {
1849
+ continue;
1850
+ }
1851
+ if (fs2.existsSync(scopedPath) || !fs2.existsSync(legacyPath)) {
1852
+ continue;
1853
+ }
1854
+ const tmpPath = `${scopedPath}.${process.pid}.migrating`;
1855
+ fs2.copyFileSync(legacyPath, tmpPath);
1856
+ fs2.renameSync(tmpPath, scopedPath);
1857
+ } catch (err) {
1858
+ allSucceeded = false;
1859
+ process.stderr.write(`[PairingStore] legacy migration of ${path2.basename(legacyPath)} failed for channel "${channelName}": ${err?.message}; will retry on next start
1860
+ `);
1861
+ }
1862
+ }
1863
+ if (allSucceeded) {
1864
+ fs2.writeFileSync(this.migratedSentinelPath, "");
1865
+ }
1866
+ } catch (err) {
1867
+ process.stderr.write(`[PairingStore] legacy migration failed for channel "${channelName}": ${err?.message}; scoped store starts empty
1868
+ `);
1869
+ }
1771
1870
  }
1772
1871
  isApproved(senderId) {
1773
1872
  const list = this.readAllowlist();
@@ -1823,13 +1922,13 @@ var PairingStore = class {
1823
1922
  return this.readAllowlist();
1824
1923
  }
1825
1924
  ensureDir() {
1826
- if (!fs.existsSync(this.dir)) {
1827
- fs.mkdirSync(this.dir, { recursive: true });
1925
+ if (!fs2.existsSync(this.dir)) {
1926
+ fs2.mkdirSync(this.dir, { recursive: true });
1828
1927
  }
1829
1928
  }
1830
1929
  readPending() {
1831
1930
  try {
1832
- const data = fs.readFileSync(this.pendingPath, "utf-8");
1931
+ const data = fs2.readFileSync(this.pendingPath, "utf-8");
1833
1932
  return JSON.parse(data);
1834
1933
  } catch {
1835
1934
  return [];
@@ -1837,11 +1936,11 @@ var PairingStore = class {
1837
1936
  }
1838
1937
  writePending(requests) {
1839
1938
  this.ensureDir();
1840
- fs.writeFileSync(this.pendingPath, JSON.stringify(requests, null, 2));
1939
+ fs2.writeFileSync(this.pendingPath, JSON.stringify(requests, null, 2));
1841
1940
  }
1842
1941
  readAllowlist() {
1843
1942
  try {
1844
- const data = fs.readFileSync(this.allowlistPath, "utf-8");
1943
+ const data = fs2.readFileSync(this.allowlistPath, "utf-8");
1845
1944
  return JSON.parse(data);
1846
1945
  } catch {
1847
1946
  return [];
@@ -1849,13 +1948,13 @@ var PairingStore = class {
1849
1948
  }
1850
1949
  writeAllowlist(list) {
1851
1950
  this.ensureDir();
1852
- fs.writeFileSync(this.allowlistPath, JSON.stringify(list, null, 2));
1951
+ fs2.writeFileSync(this.allowlistPath, JSON.stringify(list, null, 2));
1853
1952
  }
1854
1953
  };
1855
1954
  function generateCode() {
1856
1955
  let code = "";
1857
1956
  for (let i = 0; i < CODE_LENGTH; i++) {
1858
- code += SAFE_ALPHABET[crypto.randomInt(SAFE_ALPHABET.length)];
1957
+ code += SAFE_ALPHABET[crypto2.randomInt(SAFE_ALPHABET.length)];
1859
1958
  }
1860
1959
  return code;
1861
1960
  }
@@ -1863,8 +1962,8 @@ __name(generateCode, "generateCode");
1863
1962
 
1864
1963
  // packages/channels/base/dist/SessionRouter.js
1865
1964
  init_esbuild_shims();
1866
- import { chmodSync as chmodSync2, existsSync as existsSync3, mkdirSync as mkdirSync3, readFileSync as readFileSync3, renameSync as renameSync2, rmSync, unlinkSync, writeFileSync as writeFileSync3 } from "node:fs";
1867
- import { dirname as dirname2, join as join4 } from "node:path";
1965
+ import { chmodSync as chmodSync2, existsSync as existsSync3, mkdirSync as mkdirSync3, readFileSync as readFileSync3, renameSync as renameSync3, rmSync, unlinkSync, writeFileSync as writeFileSync3 } from "node:fs";
1966
+ import { dirname as dirname3, join as join4 } from "node:path";
1868
1967
  import process2 from "node:process";
1869
1968
  var SessionRouter = class {
1870
1969
  static {
@@ -2345,7 +2444,7 @@ var SessionRouter = class {
2345
2444
  } catch (error) {
2346
2445
  const quarantinePath = `${persistPath}.corrupt-${Date.now()}`;
2347
2446
  try {
2348
- renameSync2(persistPath, quarantinePath);
2447
+ renameSync3(persistPath, quarantinePath);
2349
2448
  } catch {
2350
2449
  }
2351
2450
  process2.stderr.write(`[SessionRouter] Corrupted persist file at ${sanitizeLogText(persistPath, 1024)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 512)}
@@ -2355,7 +2454,7 @@ var SessionRouter = class {
2355
2454
  if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
2356
2455
  const quarantinePath = `${persistPath}.corrupt-${Date.now()}`;
2357
2456
  try {
2358
- renameSync2(persistPath, quarantinePath);
2457
+ renameSync3(persistPath, quarantinePath);
2359
2458
  } catch {
2360
2459
  }
2361
2460
  process2.stderr.write(`[SessionRouter] Invalid route store at ${sanitizeLogText(persistPath, 1024)}: expected an object
@@ -2396,7 +2495,7 @@ var SessionRouter = class {
2396
2495
  cwd: this.toCwd.get(sessionId) ?? this.defaultCwd
2397
2496
  };
2398
2497
  }
2399
- const dir = dirname2(this.persistPath);
2498
+ const dir = dirname3(this.persistPath);
2400
2499
  const tempPath = join4(dir, `${Date.now()}-${process2.pid}-${Math.random().toString(16).slice(2)}.tmp`);
2401
2500
  try {
2402
2501
  mkdirSync3(dir, { recursive: true, mode: 448 });
@@ -2408,7 +2507,7 @@ var SessionRouter = class {
2408
2507
  encoding: "utf-8",
2409
2508
  mode: 384
2410
2509
  });
2411
- renameSync2(tempPath, this.persistPath);
2510
+ renameSync3(tempPath, this.persistPath);
2412
2511
  try {
2413
2512
  chmodSync2(this.persistPath, 384);
2414
2513
  } catch {
@@ -2511,8 +2610,8 @@ var SessionRouter = class {
2511
2610
  createSessionReservation() {
2512
2611
  let resolveReservation;
2513
2612
  let rejectReservation;
2514
- const promise = new Promise((resolve2, reject) => {
2515
- resolveReservation = resolve2;
2613
+ const promise = new Promise((resolve3, reject) => {
2614
+ resolveReservation = resolve3;
2516
2615
  rejectReservation = reject;
2517
2616
  });
2518
2617
  return {
@@ -3310,7 +3409,7 @@ var ChannelBase = class {
3310
3409
  this.observedContacts = options?.observedContacts;
3311
3410
  this.groupGate = new GroupGate(config.groupPolicy, config.groups);
3312
3411
  this.dmGate = new DmGate(config.dmPolicy);
3313
- const pairingStore = config.senderPolicy === "pairing" ? new PairingStore(name) : void 0;
3412
+ const pairingStore = config.senderPolicy === "pairing" ? new PairingStore(name, config.cwd) : void 0;
3314
3413
  this.gate = new SenderGate(config.senderPolicy, config.allowedUsers, pairingStore);
3315
3414
  this.router = options?.router || new SessionRouter(bridge, config.cwd, config.sessionScope);
3316
3415
  this.registerSharedCommands();
@@ -3600,8 +3699,8 @@ ${promptText}` : promptText;
3600
3699
  }
3601
3700
  let doneResolve = /* @__PURE__ */ __name(() => {
3602
3701
  }, "doneResolve");
3603
- const done = new Promise((resolve2) => {
3604
- doneResolve = resolve2;
3702
+ const done = new Promise((resolve3) => {
3703
+ doneResolve = resolve3;
3605
3704
  });
3606
3705
  const promptState = {
3607
3706
  cancelled: false,
@@ -3812,8 +3911,8 @@ ${promptText}` : promptText;
3812
3911
  }
3813
3912
  let doneResolve = /* @__PURE__ */ __name(() => {
3814
3913
  }, "doneResolve");
3815
- const done = new Promise((resolve2) => {
3816
- doneResolve = resolve2;
3914
+ const done = new Promise((resolve3) => {
3915
+ doneResolve = resolve3;
3817
3916
  });
3818
3917
  const promptState = {
3819
3918
  cancelled: false,
@@ -3963,8 +4062,8 @@ ${promptText}` : promptText;
3963
4062
  try {
3964
4063
  const cancelled = await Promise.race([
3965
4064
  promptBridge.cancelSession(sessionId).then(() => true),
3966
- new Promise((resolve2) => {
3967
- graceTimer = setTimeout(() => resolve2(false), LOOP_CANCEL_GRACE_MS);
4065
+ new Promise((resolve3) => {
4066
+ graceTimer = setTimeout(() => resolve3(false), LOOP_CANCEL_GRACE_MS);
3968
4067
  graceTimer.unref?.();
3969
4068
  })
3970
4069
  ]);
@@ -4054,8 +4153,8 @@ ${promptText}` : promptText;
4054
4153
  try {
4055
4154
  const cancelled = await Promise.race([
4056
4155
  active.cancelRequested,
4057
- new Promise((resolve2) => {
4058
- timer = setTimeout(() => resolve2(false), CLEAR_CANCEL_TIMEOUT_MS);
4156
+ new Promise((resolve3) => {
4157
+ timer = setTimeout(() => resolve3(false), CLEAR_CANCEL_TIMEOUT_MS);
4059
4158
  timer.unref?.();
4060
4159
  })
4061
4160
  ]);
@@ -4421,7 +4520,7 @@ ${requestList}`);
4421
4520
  `Memory: ${sanitizeQuotedText(this.memoryScope.namespace, 128)}`
4422
4521
  ] : [],
4423
4522
  // Only the basename — don't leak the absolute cwd to group members.
4424
- `Workspace: ${basename(this.config.cwd)}`,
4523
+ `Workspace: ${basename3(this.config.cwd)}`,
4425
4524
  `Session: ${active ? "active" : "none"}${scopeNote}`
4426
4525
  ].join("\n"));
4427
4526
  return true;
@@ -5344,8 +5443,8 @@ ${sanitizePromptText(entry.text).trim()}` : `No channel memory entry ${intent.id
5344
5443
  let timer;
5345
5444
  const settled = await Promise.race([
5346
5445
  active.done.then(() => true),
5347
- new Promise((resolve2) => {
5348
- timer = setTimeout(() => resolve2(false), CLEAR_CANCEL_TIMEOUT_MS);
5446
+ new Promise((resolve3) => {
5447
+ timer = setTimeout(() => resolve3(false), CLEAR_CANCEL_TIMEOUT_MS);
5349
5448
  })
5350
5449
  ]);
5351
5450
  clearTimeout(timer);
@@ -6040,8 +6139,8 @@ __name(truncateLoopLabel, "truncateLoopLabel");
6040
6139
 
6041
6140
  // packages/channels/base/dist/ChannelLoopStore.js
6042
6141
  init_esbuild_shims();
6043
- import * as crypto2 from "node:crypto";
6044
- import * as fs2 from "node:fs/promises";
6142
+ import * as crypto3 from "node:crypto";
6143
+ import * as fs3 from "node:fs/promises";
6045
6144
  import * as path3 from "node:path";
6046
6145
  var ChannelLoopStore = class {
6047
6146
  static {
@@ -6054,7 +6153,7 @@ var ChannelLoopStore = class {
6054
6153
  constructor(options) {
6055
6154
  this.filePath = options.filePath;
6056
6155
  this.now = options.now ?? (() => /* @__PURE__ */ new Date());
6057
- this.idFactory = options.idFactory ?? (() => crypto2.randomUUID());
6156
+ this.idFactory = options.idFactory ?? (() => crypto3.randomUUID());
6058
6157
  }
6059
6158
  async list() {
6060
6159
  return this.readJobs();
@@ -6129,7 +6228,7 @@ var ChannelLoopStore = class {
6129
6228
  async readJobs() {
6130
6229
  let raw;
6131
6230
  try {
6132
- raw = await fs2.readFile(this.filePath, "utf8");
6231
+ raw = await fs3.readFile(this.filePath, "utf8");
6133
6232
  } catch (err) {
6134
6233
  if (err.code === "ENOENT")
6135
6234
  return [];
@@ -6157,20 +6256,20 @@ var ChannelLoopStore = class {
6157
6256
  }
6158
6257
  async writeJobs(jobs) {
6159
6258
  const dir = path3.dirname(this.filePath);
6160
- await fs2.mkdir(dir, { recursive: true, mode: 448 });
6161
- await fs2.chmod(dir, 448).catch(() => {
6259
+ await fs3.mkdir(dir, { recursive: true, mode: 448 });
6260
+ await fs3.chmod(dir, 448).catch(() => {
6162
6261
  });
6163
- const tmpPath = `${this.filePath}.${crypto2.randomBytes(6).toString("hex")}.tmp`;
6262
+ const tmpPath = `${this.filePath}.${crypto3.randomBytes(6).toString("hex")}.tmp`;
6164
6263
  try {
6165
- await fs2.writeFile(tmpPath, JSON.stringify(jobs, null, 2), {
6264
+ await fs3.writeFile(tmpPath, JSON.stringify(jobs, null, 2), {
6166
6265
  encoding: "utf8",
6167
6266
  mode: 384
6168
6267
  });
6169
- await fs2.rename(tmpPath, this.filePath);
6170
- await fs2.chmod(this.filePath, 384).catch(() => {
6268
+ await fs3.rename(tmpPath, this.filePath);
6269
+ await fs3.chmod(this.filePath, 384).catch(() => {
6171
6270
  });
6172
6271
  } catch (err) {
6173
- await fs2.rm(tmpPath, { force: true }).catch(() => {
6272
+ await fs3.rm(tmpPath, { force: true }).catch(() => {
6174
6273
  });
6175
6274
  throw err;
6176
6275
  }
@@ -8,16 +8,16 @@ import {
8
8
  initializeI18n,
9
9
  resolveLanguageSetting,
10
10
  t
11
- } from "./chunk-3PE7OY2G.js";
11
+ } from "./chunk-TKASNYDS.js";
12
12
  import {
13
13
  IdeClient
14
- } from "./chunk-6TDA4EVC.js";
14
+ } from "./chunk-GCY7QTCE.js";
15
15
  import {
16
16
  AuthEvent,
17
17
  IdeConnectionEvent,
18
18
  logAuth,
19
19
  logIdeConnection
20
- } from "./chunk-YN2I5I42.js";
20
+ } from "./chunk-CPU6I5YV.js";
21
21
  import {
22
22
  getErrorMessage
23
23
  } from "./chunk-UE5TZ55T.js";
@@ -70652,11 +70652,11 @@ async function createContentGenerator(generatorConfig, config, isInitialAuth) {
70652
70652
  let baseGenerator;
70653
70653
  try {
70654
70654
  if (authType === "openai" /* USE_OPENAI */) {
70655
- const { createOpenAIContentGenerator } = await import("./openaiContentGenerator-FURUCKQJ.js");
70655
+ const { createOpenAIContentGenerator } = await import("./openaiContentGenerator-42PZKET5.js");
70656
70656
  baseGenerator = createOpenAIContentGenerator(generatorConfig, config);
70657
70657
  } else if (authType === "qwen-oauth" /* QWEN_OAUTH */) {
70658
- const { getQwenOAuthClient: getQwenOauthClient } = await import("./qwenOAuth2-5FNX3AWH.js");
70659
- const { QwenContentGenerator } = await import("./qwenContentGenerator-NRLM7R36.js");
70658
+ const { getQwenOAuthClient: getQwenOauthClient } = await import("./qwenOAuth2-6LS2T3Q6.js");
70659
+ const { QwenContentGenerator } = await import("./qwenContentGenerator-VR2CNFGI.js");
70660
70660
  try {
70661
70661
  const qwenClient = await getQwenOauthClient(
70662
70662
  config,
@@ -70677,7 +70677,7 @@ async function createContentGenerator(generatorConfig, config, isInitialAuth) {
70677
70677
  const { createAnthropicContentGenerator } = await import("./anthropicContentGenerator-ZZRGFEES.js");
70678
70678
  baseGenerator = createAnthropicContentGenerator(generatorConfig, config);
70679
70679
  } else if (authType === "gemini" /* USE_GEMINI */ || authType === "vertex-ai" /* USE_VERTEX_AI */) {
70680
- const { createGeminiContentGenerator } = await import("./geminiContentGenerator-4BQ5QHPR.js");
70680
+ const { createGeminiContentGenerator } = await import("./geminiContentGenerator-ADZTXEKV.js");
70681
70681
  baseGenerator = createGeminiContentGenerator(generatorConfig, config);
70682
70682
  } else {
70683
70683
  throw new Error(
@@ -14,14 +14,14 @@ import {
14
14
  } from "./chunk-TJTKSVIV.js";
15
15
  import {
16
16
  loadSettings
17
- } from "./chunk-ILQ42UG6.js";
17
+ } from "./chunk-6IITZE7O.js";
18
18
  import {
19
19
  writeStderrLine
20
20
  } from "./chunk-OWAK7LMW.js";
21
21
  import {
22
22
  MCP_BUDGET_WARN_FRACTION,
23
23
  parsePositiveIntegerEnv
24
- } from "./chunk-6TDA4EVC.js";
24
+ } from "./chunk-GCY7QTCE.js";
25
25
  import {
26
26
  openBrowserSecurely,
27
27
  shouldLaunchBrowser
@@ -297,7 +297,7 @@ var serveCommand = {
297
297
  process.exit(1);
298
298
  }
299
299
  }
300
- const { runQwenServe } = await import("./run-qwen-serve-5HWOQFLI.js");
300
+ const { runQwenServe } = await import("./run-qwen-serve-LSOPP4R2.js");
301
301
  try {
302
302
  const handle = await runQwenServe({
303
303
  port: argv.port,
@@ -2,12 +2,12 @@
2
2
  "use strict";
3
3
  import {
4
4
  buildPermissionSettings
5
- } from "./chunk-LHEQDKAR.js";
5
+ } from "./chunk-QIFTJDBY.js";
6
6
  import {
7
7
  resolveVoiceStreamConfig,
8
8
  resolveVoiceTranscriptionConfig,
9
9
  transcribeVoiceAudio
10
- } from "./chunk-XACBIZJB.js";
10
+ } from "./chunk-3ESL7JXA.js";
11
11
  import {
12
12
  getVoiceSettingsScope,
13
13
  isSelectableVoiceModel,
@@ -16,7 +16,7 @@ import {
16
16
  readVoiceMode,
17
17
  readVoiceModel,
18
18
  resolveVoiceTransport
19
- } from "./chunk-SMASS3CY.js";
19
+ } from "./chunk-2476XGOU.js";
20
20
  import {
21
21
  WorkspacePermissionRulesSessionRequiredError,
22
22
  WorkspaceSettingsPartialPersistError,
@@ -46,14 +46,14 @@ import {
46
46
  createIdleWorkspaceProvidersStatus,
47
47
  createIdleWorkspaceSkillsStatus,
48
48
  mapDomainErrorToErrorKind
49
- } from "./chunk-TFV3XVAZ.js";
49
+ } from "./chunk-64GC5EMF.js";
50
50
  import {
51
51
  getPersistScopeForModelSelection,
52
52
  loadSettings
53
- } from "./chunk-ILQ42UG6.js";
53
+ } from "./chunk-6IITZE7O.js";
54
54
  import {
55
55
  getWorkspaceTrustStatus
56
- } from "./chunk-XFJU7SVP.js";
56
+ } from "./chunk-GMUPIMHF.js";
57
57
  import {
58
58
  writeStderrLine
59
59
  } from "./chunk-OWAK7LMW.js";
@@ -61,7 +61,7 @@ import {
61
61
  ModelsConfig,
62
62
  SkillManager,
63
63
  require_yauzl
64
- } from "./chunk-6TDA4EVC.js";
64
+ } from "./chunk-GCY7QTCE.js";
65
65
  import {
66
66
  Storage,
67
67
  createDebugLogger
@@ -4,7 +4,7 @@ import {
4
4
  disableMouseEvents,
5
5
  enableMouseEvents,
6
6
  useKeypressContext
7
- } from "./chunk-6QGZVKOO.js";
7
+ } from "./chunk-MRE77ST5.js";
8
8
  import {
9
9
  use_stdin_default,
10
10
  use_stdout_default
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  resolveChannelCwd
5
- } from "./chunk-E655RDRL.js";
5
+ } from "./chunk-W6CQPLWM.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";
@@ -21,12 +21,12 @@ function ensureBuiltins() {
21
21
  if (!builtinsPromise) {
22
22
  builtinsPromise = (async () => {
23
23
  const labelled = [
24
- { name: "telegram", promise: import("./dist-RZBJT5O2.js") },
25
- { name: "weixin", promise: import("./dist-HCUUS6IH.js") },
26
- { name: "dingtalk", promise: import("./dist-Y54RURGT.js") },
27
- { name: "wecom", promise: import("./dist-ZJHKKWUD.js") },
28
- { name: "feishu", promise: import("./dist-YTPTCUAD.js") },
29
- { name: "qqbot", promise: import("./dist-O2IP3G5D.js") }
24
+ { name: "telegram", promise: import("./dist-3DQNQJ6H.js") },
25
+ { name: "weixin", promise: import("./dist-IEQSDXS7.js") },
26
+ { name: "dingtalk", promise: import("./dist-IGZMVS5R.js") },
27
+ { name: "wecom", promise: import("./dist-NUXRQHC5.js") },
28
+ { name: "feishu", promise: import("./dist-XLE6ODMB.js") },
29
+ { name: "qqbot", promise: import("./dist-J2H4KTLB.js") }
30
30
  ];
31
31
  const results = await Promise.allSettled(labelled.map((l) => l.promise));
32
32
  for (let i = 0; i < results.length; i++) {
@@ -21,7 +21,7 @@ import {
21
21
  isChannelWebhookTaskResultMessage,
22
22
  normalizeWorkerDiagnostic,
23
23
  sanitizeWorkerDiagnostic
24
- } from "./chunk-HVWPSGDY.js";
24
+ } from "./chunk-I7RRHHYG.js";
25
25
  import {
26
26
  channelSelectionNames
27
27
  } from "./chunk-TJTKSVIV.js";
@@ -32,7 +32,7 @@ import {
32
32
  } from "./chunk-5HBA2Z7V.js";
33
33
  import {
34
34
  sanitizeLogText
35
- } from "./chunk-MHEZV3OY.js";
35
+ } from "./chunk-BKNPMEN6.js";
36
36
  import {
37
37
  init_esbuild_shims
38
38
  } from "./chunk-5O2XNYP6.js";
@@ -2,19 +2,19 @@
2
2
  "use strict";
3
3
  import {
4
4
  getErrorMessage
5
- } from "./chunk-LLIGYAQU.js";
5
+ } from "./chunk-UZC5VPOJ.js";
6
6
  import {
7
7
  extensionToOutputString,
8
8
  getExtensionManager
9
- } from "./chunk-HZXU6YZW.js";
9
+ } from "./chunk-RKUMFUFM.js";
10
10
  import {
11
11
  loadSettings
12
- } from "./chunk-ILQ42UG6.js";
12
+ } from "./chunk-6IITZE7O.js";
13
13
  import {
14
14
  initializeI18n,
15
15
  resolveLanguageSetting,
16
16
  t
17
- } from "./chunk-3PE7OY2G.js";
17
+ } from "./chunk-TKASNYDS.js";
18
18
  import {
19
19
  writeStderrLine,
20
20
  writeStdoutLine
@@ -3,16 +3,16 @@
3
3
  import {
4
4
  getInstallationInfo,
5
5
  resolveUpdateCommand
6
- } from "./chunk-4W55BHOC.js";
6
+ } from "./chunk-OBSLEYCD.js";
7
7
  import {
8
8
  performStandaloneUpdate
9
- } from "./chunk-Y5UDBQYF.js";
9
+ } from "./chunk-WIYV7CSF.js";
10
10
  import {
11
11
  updateEventEmitter
12
12
  } from "./chunk-YAF2MQZ6.js";
13
13
  import {
14
14
  t
15
- } from "./chunk-3PE7OY2G.js";
15
+ } from "./chunk-TKASNYDS.js";
16
16
  import {
17
17
  createDebugLogger
18
18
  } from "./chunk-UE5TZ55T.js";