@openclaw/qqbot 2026.5.30-beta.1 → 2026.5.31-beta.2

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.
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # OpenClaw QQ Bot
2
+
3
+ Official OpenClaw channel plugin for QQ Bot group and direct-message workflows.
4
+
5
+ Install from OpenClaw:
6
+
7
+ ```bash
8
+ openclaw plugin add @openclaw/qqbot
9
+ ```
10
+
11
+ Configure QQ Bot credentials in OpenClaw, then connect the bot to the groups or direct-message contexts where agents should operate.
package/dist/api.js CHANGED
@@ -1,9 +1,9 @@
1
- import { C as getMessageReplyStats, D as setOutboundAudioPort, E as OUTBOUND_ERROR_CODES, S as getMessageReplyConfig, T as DEFAULT_MEDIA_SEND_ERROR, _ as sendVideoMsg, a as sendText, b as MESSAGE_REPLY_LIMIT, f as buildMediaTarget, g as sendPhoto, h as sendDocument, i as sendProactiveMessage, m as resolveOutboundMediaPath, n as sendCronMessage, p as parseTarget, r as sendMedia, v as sendVoice, w as recordMessageReply, x as checkMessageReplyLimit, y as resolveUserFacingMediaError } from "./outbound-DUcb4_lD.js";
1
+ import { C as getMessageReplyStats, D as setOutboundAudioPort, E as OUTBOUND_ERROR_CODES, S as getMessageReplyConfig, T as DEFAULT_MEDIA_SEND_ERROR, _ as sendVideoMsg, a as sendText, b as MESSAGE_REPLY_LIMIT, f as buildMediaTarget, g as sendPhoto, h as sendDocument, i as sendProactiveMessage, m as resolveOutboundMediaPath, n as sendCronMessage, p as parseTarget, r as sendMedia, v as sendVoice, w as recordMessageReply, x as checkMessageReplyLimit, y as resolveUserFacingMediaError } from "./outbound-CgW0-dMd.js";
2
2
  import { c as listQQBotAccountIds, l as resolveDefaultQQBotAccountId, o as DEFAULT_ACCOUNT_ID, s as applyQQBotAccountConfig, u as resolveQQBotAccount } from "./config-schema-Bc-ArbIT.js";
3
- import { t as qqbotPlugin } from "./channel-BTLUP21p.js";
3
+ import { t as qqbotPlugin } from "./channel-DsUMS0Az.js";
4
4
  import { C as debugError, l as getAccessToken, w as debugLog, z as formatErrorMessage } from "./runtime-DDu_1bny.js";
5
5
  import { t as qqbotSetupPlugin } from "./channel.setup-_OAH-xmU.js";
6
- import { r as getFrameworkCommands, t as getRequestContext } from "./request-context-dZYDdrAi.js";
6
+ import { r as getFrameworkCommands, t as getRequestContext } from "./request-context-DNbuU0Co.js";
7
7
  import { resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
8
8
  import { callGatewayTool } from "openclaw/plugin-sdk/agent-harness-runtime";
9
9
  //#region extensions/qqbot/src/engine/tools/channel-api.ts
@@ -374,7 +374,7 @@ function createQQBotApprovalCapability() {
374
374
  },
375
375
  load: async () => {
376
376
  ensurePlatformAdapter();
377
- return (await import("./handler-runtime-DTg4Utt_.js")).qqbotApprovalNativeRuntime;
377
+ return (await import("./handler-runtime-TwO5-5cH.js")).qqbotApprovalNativeRuntime;
378
378
  }
379
379
  })
380
380
  });
@@ -813,7 +813,7 @@ function clearAccountCredentials(cfg, accountId) {
813
813
  * @throws {Error} When the target format is invalid.
814
814
  */
815
815
  function parseTarget(to) {
816
- let id = to.replace(/^qqbot:/i, "");
816
+ const id = to.replace(/^qqbot:/i, "");
817
817
  if (id.startsWith("c2c:")) {
818
818
  const userId = id.slice(4);
819
819
  if (!userId) throw new Error(`Invalid c2c target format: ${to} - missing user ID`);
@@ -868,12 +868,12 @@ function looksLikeQQBotTarget(id) {
868
868
  //#region extensions/qqbot/src/channel.ts
869
869
  let gatewayModulePromise;
870
870
  function loadGatewayModule() {
871
- gatewayModulePromise ??= import("./gateway-D5xQGKIF.js");
871
+ gatewayModulePromise ??= import("./gateway-Bx-wZKqQ.js");
872
872
  return gatewayModulePromise;
873
873
  }
874
874
  let outboundMessagingModulePromise;
875
875
  function loadOutboundMessagingModule() {
876
- outboundMessagingModulePromise ??= import("./outbound-DUcb4_lD.js").then((n) => n.t);
876
+ outboundMessagingModulePromise ??= import("./outbound-CgW0-dMd.js").then((n) => n.t);
877
877
  return outboundMessagingModulePromise;
878
878
  }
879
879
  function createQQBotSendReceipt(params) {
@@ -1,2 +1,2 @@
1
- import { t as qqbotPlugin } from "./channel-BTLUP21p.js";
1
+ import { t as qqbotPlugin } from "./channel-DsUMS0Az.js";
2
2
  export { qqbotPlugin };
@@ -1,9 +1,9 @@
1
- import { D as setOutboundAudioPort, T as DEFAULT_MEDIA_SEND_ERROR, _ as sendVideoMsg, c as isCronReminderPayload, d as normalizeMediaTags, g as sendPhoto, h as sendDocument, l as isMediaPayload, o as decodeMediaPath, r as sendMedia, s as encodePayloadForCron, u as parseQQBotPayload, v as sendVoice, y as resolveUserFacingMediaError } from "./outbound-DUcb4_lD.js";
1
+ import { D as setOutboundAudioPort, T as DEFAULT_MEDIA_SEND_ERROR, _ as sendVideoMsg, c as isCronReminderPayload, d as normalizeMediaTags, g as sendPhoto, h as sendDocument, l as isMediaPayload, o as decodeMediaPath, r as sendMedia, s as encodePayloadForCron, u as parseQQBotPayload, v as sendVoice, y as resolveUserFacingMediaError } from "./outbound-CgW0-dMd.js";
2
2
  import { c as getPlatformAdapter, i as normalizeOptionalString$1, n as normalizeLowercaseStringOrEmpty$1, o as readStringField, s as sanitizeFileName, t as asOptionalObjectRecord } from "./string-normalize-R_0cKO7Q.js";
3
3
  import { f as resolveAccountBase, h as setBridgeLogger, p as ensurePlatformAdapter } from "./config-schema-Bc-ArbIT.js";
4
- import { C as parseApprovalButtonData, a as getQQBotDataDir, d as isWindows, f as normalizePath, h as authorizeQQBotApprovalAction, i as getHomeDir, l as getTempDir, m as toGatewayAccount, o as getQQBotDataPath, p as resolveQQBotPayloadLocalFilePath, r as checkSilkWasmAvailable, s as getQQBotMediaDir, u as isLocalPath } from "./channel-BTLUP21p.js";
4
+ import { C as parseApprovalButtonData, a as getQQBotDataDir, d as isWindows, f as normalizePath, h as authorizeQQBotApprovalAction, i as getHomeDir, l as getTempDir, m as toGatewayAccount, o as getQQBotDataPath, p as resolveQQBotPayloadLocalFilePath, r as checkSilkWasmAvailable, s as getQQBotMediaDir, u as isLocalPath } from "./channel-DsUMS0Az.js";
5
5
  import { B as StreamContentType, C as debugError, D as getNextMsgSeq, F as getImageMimeType, H as StreamInputState, I as getMaxUploadSize, N as formatFileSize, R as formatDuration, S as withTokenRetry, T as debugWarn, V as StreamInputMode, _ as sendInputNotify, a as acknowledgeInteraction, b as startBackgroundTokenRefresh, c as createRawInputNotifyFn, d as getMessageApi, f as getPluginUserAgent, g as registerAccount, h as onMessageSent, i as accountToCreds, j as downloadFile, k as openLocalFile, l as getAccessToken, m as initSender, n as getQQBotRuntimeForEngine, o as buildDeliveryTarget, p as initApiConfig, s as clearTokenCache, t as getQQBotRuntime, u as getGatewayUrl, v as sendMedia$1, w as debugLog, x as stopBackgroundTokenRefresh, y as sendText, z as formatErrorMessage } from "./runtime-DDu_1bny.js";
6
- import { a as getPluginVersion, i as getFrameworkVersion, n as runWithRequestContext, o as initCommands, s as matchSlashCommand } from "./request-context-dZYDdrAi.js";
6
+ import { a as getPluginVersion, i as getFrameworkVersion, n as runWithRequestContext, o as initCommands, s as matchSlashCommand } from "./request-context-DNbuU0Co.js";
7
7
  import { asBoolean, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  import { isImplicitSameChatApprovalAuthorization } from "openclaw/plugin-sdk/approval-auth-runtime";
9
9
  import * as fs$1 from "node:fs";
@@ -235,7 +235,7 @@ function appendLine(line) {
235
235
  }
236
236
  }
237
237
  function shouldCompact() {
238
- return !!cache && totalLinesOnDisk > cache.size * COMPACT_THRESHOLD_RATIO && totalLinesOnDisk > 1e3;
238
+ return cache !== null && totalLinesOnDisk > cache.size * COMPACT_THRESHOLD_RATIO && totalLinesOnDisk > 1e3;
239
239
  }
240
240
  function compactFile() {
241
241
  if (!cache) return;
@@ -1977,7 +1977,8 @@ async function processAttachments(attachments, ctx) {
1977
1977
  attachmentLocalPaths
1978
1978
  };
1979
1979
  }
1980
- async function processVoiceAttachment(localPath, audioPath, att, asrReferText, cfg, downloadDir, audioConvert, log) {
1980
+ async function processVoiceAttachment(localPath, audioPathInput, att, asrReferText, cfg, downloadDir, audioConvert, log) {
1981
+ let audioPath = audioPathInput;
1981
1982
  const wavUrl = att.voice_wav_url ? att.voice_wav_url.startsWith("//") ? `https:${att.voice_wav_url}` : att.voice_wav_url : "";
1982
1983
  const attUrl = att.url?.startsWith("//") ? `https:${att.url}` : att.url;
1983
1984
  const meta = {
@@ -4262,7 +4263,7 @@ function fixPathEncoding(mediaPath, log) {
4262
4263
  const hasNonASCII = /[\u0080-\u00FF]/.test(result);
4263
4264
  if (!isWinLocal && (hasOctal || hasNonASCII)) {
4264
4265
  log?.debug?.(`Decoding path with mixed encoding: ${result}`);
4265
- let decoded = result.replace(/\\([0-7]{1,3})/g, (_, octal) => String.fromCharCode(Number.parseInt(octal, 8)));
4266
+ const decoded = result.replace(/\\([0-7]{1,3})/g, (_, octal) => String.fromCharCode(Number.parseInt(octal, 8)));
4266
4267
  const bytes = [];
4267
4268
  for (let i = 0; i < decoded.length; i++) {
4268
4269
  const code = decoded.charCodeAt(i);
@@ -6624,7 +6625,7 @@ async function startGateway(ctx) {
6624
6625
  context: { account: ctx.account },
6625
6626
  abortSignal: ctx.abortSignal
6626
6627
  });
6627
- accountLogger.info(`approval.native context registered (lease=${!!lease})`);
6628
+ accountLogger.info(`approval.native context registered (lease=${Boolean(lease)})`);
6628
6629
  } else accountLogger.info("No channelRuntime — skipping approval.native registration");
6629
6630
  return startGateway$1({
6630
6631
  account: toGatewayAccount(ctx.account),
@@ -1,5 +1,5 @@
1
1
  import { m as getBridgeLogger, p as ensurePlatformAdapter, u as resolveQQBotAccount } from "./config-schema-Bc-ArbIT.js";
2
- import { S as buildPluginApprovalText, _ as matchesQQBotApprovalAccount, b as buildApprovalKeyboard, g as isQQBotExecApprovalClientEnabled, v as resolveQQBotExecApprovalConfig, w as resolveApprovalTarget, x as buildExecApprovalText, y as shouldHandleQQBotExecApprovalRequest } from "./channel-BTLUP21p.js";
2
+ import { S as buildPluginApprovalText, _ as matchesQQBotApprovalAccount, b as buildApprovalKeyboard, g as isQQBotExecApprovalClientEnabled, v as resolveQQBotExecApprovalConfig, w as resolveApprovalTarget, x as buildExecApprovalText, y as shouldHandleQQBotExecApprovalRequest } from "./channel-DsUMS0Az.js";
3
3
  import { d as getMessageApi, i as accountToCreds } from "./runtime-DDu_1bny.js";
4
4
  import { resolveApprovalRequestSessionConversation } from "openclaw/plugin-sdk/approval-native-runtime";
5
5
  import { createChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-runtime";
@@ -1,5 +1,5 @@
1
1
  import { i as normalizeOptionalString, n as normalizeLowercaseStringOrEmpty, s as sanitizeFileName } from "./string-normalize-R_0cKO7Q.js";
2
- import { a as getQQBotDataDir, f as normalizePath$1, n as parseTarget$1, p as resolveQQBotPayloadLocalFilePath, s as getQQBotMediaDir, u as isLocalPath } from "./channel-BTLUP21p.js";
2
+ import { a as getQQBotDataDir, f as normalizePath$1, n as parseTarget$1, p as resolveQQBotPayloadLocalFilePath, s as getQQBotMediaDir, u as isLocalPath } from "./channel-DsUMS0Az.js";
3
3
  import { A as checkFileSize, C as debugError, E as UploadDailyLimitExceededError, F as getImageMimeType, I as getMaxUploadSize, L as readFileAsync, M as fileExistsAsync, N as formatFileSize, O as UPLOAD_PREPARE_FALLBACK_CODE, P as getFileTypeName, T as debugWarn, i as accountToCreds, j as downloadFile, p as initApiConfig, v as sendMedia$1, w as debugLog, y as sendText$1, z as formatErrorMessage } from "./runtime-DDu_1bny.js";
4
4
  import { pathExistsSync, resolveLocalPathFromRootsSync } from "openclaw/plugin-sdk/security-runtime";
5
5
  import path from "node:path";
@@ -1,4 +1,4 @@
1
- import { a as getQQBotDataDir, c as getQQBotMediaPath, d as isWindows, i as getHomeDir } from "./channel-BTLUP21p.js";
1
+ import { a as getQQBotDataDir, c as getQQBotMediaPath, d as isWindows, i as getHomeDir } from "./channel-DsUMS0Az.js";
2
2
  import { w as debugLog } from "./runtime-DDu_1bny.js";
3
3
  import { uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import fs from "node:fs";
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@openclaw/qqbot",
3
- "version": "2026.5.30-beta.1",
3
+ "version": "2026.5.31-beta.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@openclaw/qqbot",
9
- "version": "2026.5.30-beta.1",
9
+ "version": "2026.5.31-beta.2",
10
10
  "dependencies": {
11
11
  "@tencent-connect/qqbot-connector": "1.1.0",
12
12
  "mpg123-decoder": "1.0.3",
@@ -15,7 +15,7 @@
15
15
  "zod": "4.4.3"
16
16
  },
17
17
  "peerDependencies": {
18
- "openclaw": ">=2026.5.30-beta.1"
18
+ "openclaw": ">=2026.5.31-beta.2"
19
19
  },
20
20
  "peerDependenciesMeta": {
21
21
  "openclaw": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/qqbot",
3
- "version": "2026.5.30-beta.1",
3
+ "version": "2026.5.31-beta.2",
4
4
  "private": false,
5
5
  "description": "OpenClaw QQ Bot channel plugin for group and direct-message workflows.",
6
6
  "repository": {
@@ -16,7 +16,7 @@
16
16
  "zod": "4.4.3"
17
17
  },
18
18
  "peerDependencies": {
19
- "openclaw": ">=2026.5.30-beta.1"
19
+ "openclaw": ">=2026.5.31-beta.2"
20
20
  },
21
21
  "peerDependenciesMeta": {
22
22
  "openclaw": {
@@ -45,10 +45,10 @@
45
45
  "minHostVersion": ">=2026.4.10"
46
46
  },
47
47
  "compat": {
48
- "pluginApi": ">=2026.5.30-beta.1"
48
+ "pluginApi": ">=2026.5.31-beta.2"
49
49
  },
50
50
  "build": {
51
- "openclawVersion": "2026.5.30-beta.1"
51
+ "openclawVersion": "2026.5.31-beta.2"
52
52
  },
53
53
  "release": {
54
54
  "publishToClawHub": true,
@@ -63,6 +63,7 @@
63
63
  "dist/**",
64
64
  "openclaw.plugin.json",
65
65
  "npm-shrinkwrap.json",
66
+ "README.md",
66
67
  "skills/**"
67
68
  ],
68
69
  "bundledDependencies": [