@openclaw/qqbot 2026.5.19 → 2026.5.20-beta.1

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/dist/api.js CHANGED
@@ -1,9 +1,9 @@
1
- import { C as recordMessageReply, E as setOutboundAudioPort, S as getMessageReplyStats, T as OUTBOUND_ERROR_CODES, _ as sendVoice, a as sendText, b as checkMessageReplyLimit, d as buildMediaTarget, f as parseTarget, g as sendVideoMsg, h as sendPhoto, i as sendProactiveMessage, m as sendDocument, n as sendCronMessage, p as resolveOutboundMediaPath, r as sendMedia, v as resolveUserFacingMediaError, w as DEFAULT_MEDIA_SEND_ERROR, x as getMessageReplyConfig, y as MESSAGE_REPLY_LIMIT } from "./outbound-DE6E79k5.js";
2
- import { c as listQQBotAccountIds, l as resolveDefaultQQBotAccountId, o as DEFAULT_ACCOUNT_ID, s as applyQQBotAccountConfig, u as resolveQQBotAccount } from "./config-schema-S5Xdt1tV.js";
3
- import { t as qqbotPlugin } from "./channel-CD_RD3Ro.js";
4
- import { C as debugError, l as getAccessToken, w as debugLog, z as formatErrorMessage } from "./runtime-Dcl6gcEg.js";
5
- import { t as qqbotSetupPlugin } from "./channel.setup-t_t2xa93.js";
6
- import { r as getFrameworkCommands, t as getRequestContext } from "./request-context-B2yIu7CE.js";
1
+ import { C as recordMessageReply, E as setOutboundAudioPort, S as getMessageReplyStats, T as OUTBOUND_ERROR_CODES, _ as sendVoice, a as sendText, b as checkMessageReplyLimit, d as buildMediaTarget, f as parseTarget, g as sendVideoMsg, h as sendPhoto, i as sendProactiveMessage, m as sendDocument, n as sendCronMessage, p as resolveOutboundMediaPath, r as sendMedia, v as resolveUserFacingMediaError, w as DEFAULT_MEDIA_SEND_ERROR, x as getMessageReplyConfig, y as MESSAGE_REPLY_LIMIT } from "./outbound-CVDwCPRR.js";
2
+ import { c as listQQBotAccountIds, l as resolveDefaultQQBotAccountId, o as DEFAULT_ACCOUNT_ID, s as applyQQBotAccountConfig, u as resolveQQBotAccount } from "./config-schema-CfbaUZcI.js";
3
+ import { t as qqbotPlugin } from "./channel-M_xgk02s.js";
4
+ import { C as debugError, l as getAccessToken, w as debugLog, z as formatErrorMessage } from "./runtime-CMJ5DY9K.js";
5
+ import { t as qqbotSetupPlugin } from "./channel.setup-CNTkQaYC.js";
6
+ import { r as getFrameworkCommands, t as getRequestContext } from "./request-context-ykvLAJFX.js";
7
7
  import { callGatewayTool } from "openclaw/plugin-sdk/agent-harness-runtime";
8
8
  //#region extensions/qqbot/src/engine/tools/channel-api.ts
9
9
  /**
@@ -1,6 +1,6 @@
1
- import { c as getPlatformAdapter, t as asOptionalObjectRecord } from "./string-normalize-DKS36VHd.js";
2
- import { a as qqbotSetupAdapterShared, c as listQQBotAccountIds, i as qqbotMeta, m as getBridgeLogger, n as qqbotSetupWizard, o as DEFAULT_ACCOUNT_ID$1, p as ensurePlatformAdapter, r as qqbotConfigAdapter, s as applyQQBotAccountConfig, t as qqbotChannelConfigSchema, u as resolveQQBotAccount } from "./config-schema-S5Xdt1tV.js";
3
- import { T as debugWarn, t as getQQBotRuntime, w as debugLog, z as formatErrorMessage } from "./runtime-Dcl6gcEg.js";
1
+ import { c as getPlatformAdapter, t as asOptionalObjectRecord } from "./string-normalize-du8a5Uk3.js";
2
+ import { a as qqbotSetupAdapterShared, c as listQQBotAccountIds, i as qqbotMeta, m as getBridgeLogger, n as qqbotSetupWizard, o as DEFAULT_ACCOUNT_ID$1, p as ensurePlatformAdapter, r as qqbotConfigAdapter, s as applyQQBotAccountConfig, t as qqbotChannelConfigSchema, u as resolveQQBotAccount } from "./config-schema-CfbaUZcI.js";
3
+ import { T as debugWarn, t as getQQBotRuntime, w as debugLog, z as formatErrorMessage } from "./runtime-CMJ5DY9K.js";
4
4
  import { getExecApprovalReplyMetadata } from "openclaw/plugin-sdk/approval-runtime";
5
5
  import { createMessageReceiptFromOutboundResults, defineChannelMessageAdapter } from "openclaw/plugin-sdk/channel-message";
6
6
  import { createChannelApprovalCapability } from "openclaw/plugin-sdk/approval-delivery-runtime";
@@ -374,7 +374,7 @@ function createQQBotApprovalCapability() {
374
374
  },
375
375
  load: async () => {
376
376
  ensurePlatformAdapter();
377
- return (await import("./handler-runtime-DUd04TKq.js")).qqbotApprovalNativeRuntime;
377
+ return (await import("./handler-runtime-BcPUK_xf.js")).qqbotApprovalNativeRuntime;
378
378
  }
379
379
  })
380
380
  });
@@ -826,7 +826,7 @@ function looksLikeQQBotTarget(id) {
826
826
  //#region extensions/qqbot/src/channel.ts
827
827
  let gatewayModulePromise;
828
828
  function loadGatewayModule() {
829
- gatewayModulePromise ??= import("./gateway-C5NbXHnt.js");
829
+ gatewayModulePromise ??= import("./gateway-CkzNqy_N.js");
830
830
  return gatewayModulePromise;
831
831
  }
832
832
  function createQQBotSendReceipt(params) {
@@ -844,7 +844,7 @@ function createQQBotSendReceipt(params) {
844
844
  async function sendQQBotText(params) {
845
845
  await loadGatewayModule();
846
846
  const account = resolveQQBotAccount(params.cfg, params.accountId);
847
- const { sendText } = await import("./outbound-DE6E79k5.js").then((n) => n.t);
847
+ const { sendText } = await import("./outbound-CVDwCPRR.js").then((n) => n.t);
848
848
  const result = await sendText({
849
849
  to: params.to,
850
850
  text: params.text,
@@ -866,7 +866,7 @@ async function sendQQBotText(params) {
866
866
  async function sendQQBotMedia(params) {
867
867
  await loadGatewayModule();
868
868
  const account = resolveQQBotAccount(params.cfg, params.accountId);
869
- const { sendMedia } = await import("./outbound-DE6E79k5.js").then((n) => n.t);
869
+ const { sendMedia } = await import("./outbound-CVDwCPRR.js").then((n) => n.t);
870
870
  const result = await sendMedia({
871
871
  to: params.to,
872
872
  text: params.text ?? "",
@@ -1,2 +1,2 @@
1
- import { t as qqbotPlugin } from "./channel-CD_RD3Ro.js";
1
+ import { t as qqbotPlugin } from "./channel-M_xgk02s.js";
2
2
  export { qqbotPlugin };
@@ -1,4 +1,4 @@
1
- import { a as qqbotSetupAdapterShared, i as qqbotMeta, n as qqbotSetupWizard, r as qqbotConfigAdapter, t as qqbotChannelConfigSchema } from "./config-schema-S5Xdt1tV.js";
1
+ import { a as qqbotSetupAdapterShared, i as qqbotMeta, n as qqbotSetupWizard, r as qqbotConfigAdapter, t as qqbotChannelConfigSchema } from "./config-schema-CfbaUZcI.js";
2
2
  //#region extensions/qqbot/src/channel.setup.ts
3
3
  /**
4
4
  * Setup-only QQBot plugin — lightweight subset used during `openclaw onboard`
@@ -1,4 +1,4 @@
1
- import { a as normalizeStringifiedOptionalString, c as getPlatformAdapter, d as registerPlatformAdapterFactory, l as hasPlatformAdapter, n as normalizeLowercaseStringOrEmpty, o as readStringField, r as normalizeOptionalLowercaseString, t as asOptionalObjectRecord, u as registerPlatformAdapter } from "./string-normalize-DKS36VHd.js";
1
+ import { a as normalizeStringifiedOptionalString, c as getPlatformAdapter, d as registerPlatformAdapterFactory, l as hasPlatformAdapter, n as normalizeLowercaseStringOrEmpty, o as readStringField, r as normalizeOptionalLowercaseString, t as asOptionalObjectRecord, u as registerPlatformAdapter } from "./string-normalize-du8a5Uk3.js";
2
2
  import { buildSecretInputSchema, coerceSecretRef, hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
3
3
  import { resolvePreferredOpenClawTmpDir } from "openclaw/plugin-sdk/temp-path";
4
4
  import fs from "node:fs";
@@ -1,9 +1,9 @@
1
- import { E as setOutboundAudioPort, _ as sendVoice, c as isMediaPayload, g as sendVideoMsg, h as sendPhoto, l as parseQQBotPayload, m as sendDocument, o as encodePayloadForCron, r as sendMedia, s as isCronReminderPayload, u as normalizeMediaTags, v as resolveUserFacingMediaError, w as DEFAULT_MEDIA_SEND_ERROR } from "./outbound-DE6E79k5.js";
2
- import { c as getPlatformAdapter, i as normalizeOptionalString, n as normalizeLowercaseStringOrEmpty, o as readStringField, s as sanitizeFileName, t as asOptionalObjectRecord } from "./string-normalize-DKS36VHd.js";
3
- import { f as resolveAccountBase, h as setBridgeLogger, p as ensurePlatformAdapter } from "./config-schema-S5Xdt1tV.js";
4
- import { C as parseApprovalButtonData, a as getQQBotDataDir, d as isWindows, f as normalizePath$1, 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-CD_RD3Ro.js";
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-Dcl6gcEg.js";
6
- import { a as getPluginVersion, i as getFrameworkVersion, n as runWithRequestContext, o as initCommands, s as matchSlashCommand } from "./request-context-B2yIu7CE.js";
1
+ import { E as setOutboundAudioPort, _ as sendVoice, c as isMediaPayload, g as sendVideoMsg, h as sendPhoto, l as parseQQBotPayload, m as sendDocument, o as encodePayloadForCron, r as sendMedia, s as isCronReminderPayload, u as normalizeMediaTags, v as resolveUserFacingMediaError, w as DEFAULT_MEDIA_SEND_ERROR } from "./outbound-CVDwCPRR.js";
2
+ import { c as getPlatformAdapter, i as normalizeOptionalString, n as normalizeLowercaseStringOrEmpty, o as readStringField, s as sanitizeFileName, t as asOptionalObjectRecord } from "./string-normalize-du8a5Uk3.js";
3
+ import { f as resolveAccountBase, h as setBridgeLogger, p as ensurePlatformAdapter } from "./config-schema-CfbaUZcI.js";
4
+ import { C as parseApprovalButtonData, a as getQQBotDataDir, d as isWindows, f as normalizePath$1, 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-M_xgk02s.js";
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-CMJ5DY9K.js";
6
+ import { a as getPluginVersion, i as getFrameworkVersion, n as runWithRequestContext, o as initCommands, s as matchSlashCommand } from "./request-context-ykvLAJFX.js";
7
7
  import * as fs$1 from "node:fs";
8
8
  import fs from "node:fs";
9
9
  import * as os$1 from "node:os";
@@ -1,6 +1,6 @@
1
- import { m as getBridgeLogger, p as ensurePlatformAdapter, u as resolveQQBotAccount } from "./config-schema-S5Xdt1tV.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-CD_RD3Ro.js";
3
- import { d as getMessageApi, i as accountToCreds } from "./runtime-Dcl6gcEg.js";
1
+ import { m as getBridgeLogger, p as ensurePlatformAdapter, u as resolveQQBotAccount } from "./config-schema-CfbaUZcI.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-M_xgk02s.js";
3
+ import { d as getMessageApi, i as accountToCreds } from "./runtime-CMJ5DY9K.js";
4
4
  import { resolveApprovalRequestSessionConversation } from "openclaw/plugin-sdk/approval-native-runtime";
5
5
  import { createChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-runtime";
6
6
  //#region extensions/qqbot/src/bridge/approval/handler-runtime.ts
@@ -1,6 +1,6 @@
1
- import { i as normalizeOptionalString, n as normalizeLowercaseStringOrEmpty, s as sanitizeFileName } from "./string-normalize-DKS36VHd.js";
2
- import { a as getQQBotDataDir, f as normalizePath, n as parseTarget$1, p as resolveQQBotPayloadLocalFilePath, s as getQQBotMediaDir, u as isLocalPath } from "./channel-CD_RD3Ro.js";
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-Dcl6gcEg.js";
1
+ import { i as normalizeOptionalString, n as normalizeLowercaseStringOrEmpty, s as sanitizeFileName } from "./string-normalize-du8a5Uk3.js";
2
+ import { a as getQQBotDataDir, f as normalizePath, n as parseTarget$1, p as resolveQQBotPayloadLocalFilePath, s as getQQBotMediaDir, u as isLocalPath } from "./channel-M_xgk02s.js";
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-CMJ5DY9K.js";
4
4
  import { pathExistsSync, resolveLocalPathFromRootsSync } from "openclaw/plugin-sdk/security-runtime";
5
5
  import path from "node:path";
6
6
  import { getFileExtension } from "openclaw/plugin-sdk/media-mime";
@@ -844,11 +844,10 @@ const TAG_ALIASES = {
844
844
  const ALL_TAG_NAMES = [...VALID_TAGS, ...Object.keys(TAG_ALIASES)];
845
845
  ALL_TAG_NAMES.sort((a, b) => b.length - a.length);
846
846
  const TAG_NAME_PATTERN = ALL_TAG_NAMES.join("|");
847
- const LEFT_BRACKET = "(?:[<<<]|&lt;)";
848
847
  /** Match self-closing media-tag syntax with file/src/path/url attributes. */
849
- const SELF_CLOSING_TAG_REGEX = new RegExp("`?" + LEFT_BRACKET + "\\s*(" + TAG_NAME_PATTERN + ")(?:\\s+(?!file|src|path|url)[a-z_-]+\\s*=\\s*[\"']?[^\"'\\s<<>>>]*?[\"']?)*\\s+(?:file|src|path|url)\\s*=\\s*[\"']?([^\"'\\s>>]+?)[\"']?(?:\\s+[a-z_-]+\\s*=\\s*[\"']?[^\"'\\s<<>>>]*?[\"']?)*\\s*/?\\s*(?:[>>>]|&gt;)`?", "gi");
848
+ const SELF_CLOSING_TAG_REGEX = new RegExp("`?(?:[<<<]|&lt;)\\s*(" + TAG_NAME_PATTERN + ")(?:\\s+(?!file|src|path|url)[a-z_-]+\\s*=\\s*[\"']?[^\"'\\s<<>>>]*?[\"']?)*\\s+(?:file|src|path|url)\\s*=\\s*[\"']?([^\"'\\s>>]+?)[\"']?(?:\\s+[a-z_-]+\\s*=\\s*[\"']?[^\"'\\s<<>>>]*?[\"']?)*\\s*/?\\s*(?:[>>>]|&gt;)`?", "gi");
850
849
  /** Match malformed wrapped media tags that should be normalized. */
851
- const FUZZY_MEDIA_TAG_REGEX = new RegExp("`?" + LEFT_BRACKET + "\\s*(" + TAG_NAME_PATTERN + ")\\s*(?:[>>>]|&gt;)[\"']?\\s*([^<<<>>\"'`]+?)\\s*[\"']?(?:[<<<]|&lt;)\\s*/?\\s*(?:" + TAG_NAME_PATTERN + ")\\s*(?:[>>>]|&gt;)`?", "gi");
850
+ const FUZZY_MEDIA_TAG_REGEX = new RegExp("`?(?:[<<<]|&lt;)\\s*(" + TAG_NAME_PATTERN + ")\\s*(?:[>>>]|&gt;)[\"']?\\s*([^<<<>>\"'`]+?)\\s*[\"']?(?:[<<<]|&lt;)\\s*/?\\s*(?:" + TAG_NAME_PATTERN + ")\\s*(?:[>>>]|&gt;)`?", "gi");
852
851
  /** Normalize a raw tag name into the canonical tag set. */
853
852
  function resolveTagName(raw) {
854
853
  const lower = lc(raw);
@@ -856,7 +855,7 @@ function resolveTagName(raw) {
856
855
  return TAG_ALIASES[lower] ?? "qqimg";
857
856
  }
858
857
  /** Match wrapped tags whose bodies need newline and tab cleanup. */
859
- const MULTILINE_TAG_CLEANUP = new RegExp("(" + LEFT_BRACKET + "\\s*(?:" + TAG_NAME_PATTERN + ")\\s*(?:[>>>]|&gt;))([\\s\\S]*?)((?:[<<<]|&lt;)\\s*/?\\s*(?:" + TAG_NAME_PATTERN + ")\\s*(?:[>>>]|&gt;))", "gi");
858
+ const MULTILINE_TAG_CLEANUP = new RegExp("((?:[<<<]|&lt;)\\s*(?:" + TAG_NAME_PATTERN + ")\\s*(?:[>>>]|&gt;))([\\s\\S]*?)((?:[<<<]|&lt;)\\s*/?\\s*(?:" + TAG_NAME_PATTERN + ")\\s*(?:[>>>]|&gt;))", "gi");
860
859
  /** Normalize malformed media-tag output into canonical wrapped tags. */
861
860
  function normalizeMediaTags(text) {
862
861
  const normalizeWrappedTag = (_match, rawTag, content) => {
@@ -1,5 +1,5 @@
1
- import { a as getQQBotDataDir, c as getQQBotMediaPath, d as isWindows, i as getHomeDir } from "./channel-CD_RD3Ro.js";
2
- import { w as debugLog } from "./runtime-Dcl6gcEg.js";
1
+ import { a as getQQBotDataDir, c as getQQBotMediaPath, d as isWindows, i as getHomeDir } from "./channel-M_xgk02s.js";
2
+ import { w as debugLog } from "./runtime-CMJ5DY9K.js";
3
3
  import fs from "node:fs";
4
4
  import path from "node:path";
5
5
  import { loadJsonFile } from "openclaw/plugin-sdk/json-store";
@@ -1,4 +1,4 @@
1
- import { c as getPlatformAdapter, i as normalizeOptionalString, s as sanitizeFileName } from "./string-normalize-DKS36VHd.js";
1
+ import { c as getPlatformAdapter, i as normalizeOptionalString, s as sanitizeFileName } from "./string-normalize-du8a5Uk3.js";
2
2
  import * as fs$1 from "node:fs";
3
3
  import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
4
4
  import os from "node:os";
@@ -1,2 +1,2 @@
1
- import { r as setQQBotRuntime, t as getQQBotRuntime } from "./runtime-Dcl6gcEg.js";
1
+ import { r as setQQBotRuntime, t as getQQBotRuntime } from "./runtime-CMJ5DY9K.js";
2
2
  export { getQQBotRuntime, setQQBotRuntime };
@@ -1,2 +1,2 @@
1
- import { t as qqbotSetupPlugin } from "./channel.setup-t_t2xa93.js";
1
+ import { t as qqbotSetupPlugin } from "./channel.setup-CNTkQaYC.js";
2
2
  export { qqbotSetupPlugin };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/qqbot",
3
- "version": "2026.5.19",
3
+ "version": "2026.5.20-beta.1",
4
4
  "private": false,
5
5
  "description": "OpenClaw QQ Bot channel plugin",
6
6
  "repository": {
@@ -21,7 +21,7 @@
21
21
  "openclaw": "workspace:*"
22
22
  },
23
23
  "peerDependencies": {
24
- "openclaw": ">=2026.5.19"
24
+ "openclaw": ">=2026.5.20-beta.1"
25
25
  },
26
26
  "peerDependenciesMeta": {
27
27
  "openclaw": {
@@ -50,10 +50,10 @@
50
50
  "minHostVersion": ">=2026.4.10"
51
51
  },
52
52
  "compat": {
53
- "pluginApi": ">=2026.5.19"
53
+ "pluginApi": ">=2026.5.20-beta.1"
54
54
  },
55
55
  "build": {
56
- "openclawVersion": "2026.5.19"
56
+ "openclawVersion": "2026.5.20-beta.1"
57
57
  },
58
58
  "release": {
59
59
  "publishToClawHub": true,