@openclaw/whatsapp 2026.5.3-beta.4 → 2026.5.4-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
@@ -5,12 +5,12 @@ import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-CN
5
5
  import "./reaction-level-CRVEVAfi.js";
6
6
  import { a as markdownToWhatsApp, i as jidToE164, n as assertWebChannel, o as resolveJidToE164, r as isSelfChatMode, s as toWhatsappJid, t as text_runtime_exports } from "./text-runtime-C1zNiZeO.js";
7
7
  import "./send-CIyLFxdZ.js";
8
- import { t as whatsappPlugin } from "./channel-DQ-5Xoj9.js";
8
+ import { t as whatsappPlugin } from "./channel-hbY6bgVQ.js";
9
9
  import { n as WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS } from "./outbound-base-Bq1UYEK5.js";
10
10
  import { t as whatsappCommandPolicy } from "./command-policy-O8sRnqUV.js";
11
- import { a as resolveWhatsAppGroupToolPolicy, i as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupIntroHint } from "./shared-D_wzSVar.js";
11
+ import { a as resolveWhatsAppGroupToolPolicy, i as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupIntroHint } from "./shared-Cmuil8Ri.js";
12
12
  import "./config-schema-Dmo66Ubb.js";
13
- import { t as whatsappSetupPlugin } from "./channel.setup-DOHR2BGp.js";
13
+ import { t as whatsappSetupPlugin } from "./channel.setup-Dd-A2LLn.js";
14
14
  import { t as DEFAULT_WEB_MEDIA_BYTES } from "./constants-DLGCIbfl.js";
15
15
  import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-DVs4ffXu.js";
16
16
  import { t as __testing } from "./access-control-BQ3tCkH8.js";
@@ -10,7 +10,7 @@ import { t as createWhatsAppLoginTool } from "./agent-tools-login-DpRxLNRB.js";
10
10
  import { t as createWhatsAppOutboundBase } from "./outbound-base-Bq1UYEK5.js";
11
11
  import { t as getWhatsAppRuntime } from "./runtime-6fZ67abR.js";
12
12
  import { t as whatsappCommandPolicy } from "./command-policy-O8sRnqUV.js";
13
- import { a as resolveWhatsAppGroupToolPolicy, c as formatWhatsAppConfigAllowFromEntries, i as resolveWhatsAppGroupRequireMention, n as loadWhatsAppChannelRuntime, o as resolveWhatsAppGroupIntroHint, r as whatsappSetupWizardProxy, s as resolveWhatsAppMentionStripRegexes, t as createWhatsAppPluginBase } from "./shared-D_wzSVar.js";
13
+ import { a as resolveWhatsAppGroupToolPolicy, c as formatWhatsAppConfigAllowFromEntries, i as resolveWhatsAppGroupRequireMention, n as loadWhatsAppChannelRuntime, o as resolveWhatsAppGroupIntroHint, r as whatsappSetupWizardProxy, s as resolveWhatsAppMentionStripRegexes, t as createWhatsAppPluginBase } from "./shared-Cmuil8Ri.js";
14
14
  import { d as readWebAuthExistsForDecision, n as WHATSAPP_AUTH_UNSTABLE_CODE } from "./auth-store-BjCb50Ry.js";
15
15
  import { t as whatsappSetupAdapter } from "./setup-core-DZKvpzbH.js";
16
16
  import { t as detectWhatsAppLegacyStateMigrations } from "./state-migrations-DnCdvoYD.js";
@@ -1,2 +1,2 @@
1
- import { t as whatsappPlugin } from "./channel-DQ-5Xoj9.js";
1
+ import { t as whatsappPlugin } from "./channel-hbY6bgVQ.js";
2
2
  export { whatsappPlugin };
@@ -1,9 +1,9 @@
1
1
  import { startWebLoginWithQr as startWebLoginWithQr$1, waitForWebLogin as waitForWebLogin$1 } from "./login-qr-runtime.js";
2
2
  import { a as getWebAuthAgeMs$1, b as webAuthExists$1, d as readWebAuthExistsForDecision$1, f as readWebAuthSnapshot$1, h as readWebSelfId$1, m as readWebAuthState$1, o as logWebSelfId$1, p as readWebAuthSnapshotBestEffort$1, s as logoutWeb$1, u as readWebAuthExistsBestEffort$1 } from "./auth-store-BjCb50Ry.js";
3
3
  import { t as getActiveWebListener$1 } from "./active-listener-N7GFKsuN.js";
4
- import { t as monitorWebChannel$1 } from "./monitor-C4Fhg_lD.js";
5
- import { t as loginWeb$1 } from "./login-DymdrKca.js";
6
- import { whatsappSetupWizard as whatsappSetupWizard$1 } from "./setup-surface-ieFnIW4g.js";
4
+ import { t as monitorWebChannel$1 } from "./monitor-CiG3ddjv.js";
5
+ import { t as loginWeb$1 } from "./login-Cb_Wvr8L.js";
6
+ import { whatsappSetupWizard as whatsappSetupWizard$1 } from "./setup-surface-DQbN6Iu0.js";
7
7
  //#region extensions/whatsapp/src/channel.runtime.ts
8
8
  function getActiveWebListener(...args) {
9
9
  return getActiveWebListener$1(...args);
@@ -1,4 +1,4 @@
1
- import { a as resolveWhatsAppGroupToolPolicy, i as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupIntroHint, r as whatsappSetupWizardProxy, t as createWhatsAppPluginBase } from "./shared-D_wzSVar.js";
1
+ import { a as resolveWhatsAppGroupToolPolicy, i as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupIntroHint, r as whatsappSetupWizardProxy, t as createWhatsAppPluginBase } from "./shared-Cmuil8Ri.js";
2
2
  import { m as readWebAuthState } from "./auth-store-BjCb50Ry.js";
3
3
  import { t as whatsappSetupAdapter } from "./setup-core-DZKvpzbH.js";
4
4
  import { t as detectWhatsAppLegacyStateMigrations } from "./state-migrations-DnCdvoYD.js";
@@ -593,4 +593,4 @@ var WhatsAppConnectionController = class {
593
593
  }
594
594
  };
595
595
  //#endregion
596
- export { waitForWhatsAppLoginResult as a, waitForWaConnection as c, computeBackoff as d, newConnectionId$1 as f, sleepWithAbort as h, closeWaSocketSoon as i, resolveWhatsAppSocketTiming as l, resolveReconnectPolicy as m, WhatsAppConnectionController as n, createWaSocket as o, resolveHeartbeatSeconds as p, closeWaSocket as r, newConnectionId as s, WHATSAPP_LOGGED_OUT_QR_MESSAGE as t, DEFAULT_RECONNECT_POLICY as u };
596
+ export { waitForWhatsAppLoginResult as a, waitForWaConnection as c, DEFAULT_RECONNECT_POLICY as d, computeBackoff as f, sleepWithAbort as g, resolveReconnectPolicy as h, closeWaSocketSoon as i, resolveWhatsAppSocketTiming as l, resolveHeartbeatSeconds as m, WhatsAppConnectionController as n, createWaSocket as o, newConnectionId$1 as p, closeWaSocket as r, newConnectionId as s, WHATSAPP_LOGGED_OUT_QR_MESSAGE as t, renderQrTerminal as u };
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-RkAeH_Qm.js";
2
2
  import { a as resolveWhatsAppAccount } from "./accounts-BDqgpFEB.js";
3
3
  import { y as restoreCredsFromBackupIfNeeded } from "./auth-store-BjCb50Ry.js";
4
- import { a as waitForWhatsAppLoginResult, i as closeWaSocketSoon, l as resolveWhatsAppSocketTiming, o as createWaSocket } from "./connection-controller-BiHAsTM8.js";
4
+ import { a as waitForWhatsAppLoginResult, i as closeWaSocketSoon, l as resolveWhatsAppSocketTiming, o as createWaSocket, u as renderQrTerminal } from "./connection-controller-Bzopd9NT.js";
5
5
  import { logInfo } from "openclaw/plugin-sdk/text-runtime";
6
6
  import { formatCliCommand } from "openclaw/plugin-sdk/cli-runtime";
7
7
  import { danger, defaultRuntime, success } from "openclaw/plugin-sdk/runtime-env";
@@ -16,9 +16,18 @@ async function loginWeb(verbose, waitForConnection, runtime = defaultRuntime, ac
16
16
  });
17
17
  const socketTiming = resolveWhatsAppSocketTiming(cfg);
18
18
  const restoredFromBackup = await restoreCredsFromBackupIfNeeded(account.authDir);
19
- let sock = await createWaSocket(true, verbose, {
19
+ const onQr = (qr) => {
20
+ runtime.log("Scan this QR in WhatsApp (Linked Devices):");
21
+ renderQrTerminal(qr, { small: true }).then((output) => {
22
+ runtime.log(output.endsWith("\n") ? output.slice(0, -1) : output);
23
+ }).catch((err) => {
24
+ runtime.error(`failed rendering WhatsApp QR: ${String(err)}`);
25
+ });
26
+ };
27
+ let sock = await createWaSocket(false, verbose, {
20
28
  authDir: account.authDir,
21
- ...socketTiming
29
+ ...socketTiming,
30
+ onQr
22
31
  });
23
32
  logInfo("Waiting for WhatsApp connection...", runtime);
24
33
  try {
@@ -30,19 +39,20 @@ async function loginWeb(verbose, waitForConnection, runtime = defaultRuntime, ac
30
39
  runtime,
31
40
  waitForConnection,
32
41
  socketTiming,
42
+ onQr,
33
43
  onSocketReplaced: (replacementSock) => {
34
44
  sock = replacementSock;
35
45
  }
36
46
  });
37
47
  if (result.outcome === "connected") {
38
- console.log(success(result.restarted ? "✅ Linked after restart; web session ready." : restoredFromBackup ? "✅ Recovered from creds.json.bak; web session ready." : "✅ Linked! Credentials saved for future sends."));
48
+ runtime.log(success(result.restarted ? "✅ Linked after restart; web session ready." : restoredFromBackup ? "✅ Recovered from creds.json.bak; web session ready." : "✅ Linked! Credentials saved for future sends."));
39
49
  return;
40
50
  }
41
51
  if (result.outcome === "logged-out") {
42
- console.error(danger(`WhatsApp reported the session is logged out. Cleared cached web session; please rerun ${formatCliCommand("openclaw channels login")} and scan the QR again.`));
52
+ runtime.error(danger(`WhatsApp reported the session is logged out. Cleared cached web session; please rerun ${formatCliCommand("openclaw channels login")} and scan the QR again.`));
43
53
  throw new Error("Session logged out; cache cleared. Re-run login.", { cause: result.error });
44
54
  }
45
- console.error(danger(`WhatsApp Web connection ended before fully opening. ${result.message}`));
55
+ runtime.error(danger(`WhatsApp Web connection ended before fully opening. ${result.message}`));
46
56
  throw new Error(result.message, { cause: result.error });
47
57
  } finally {
48
58
  closeWaSocketSoon(sock);
@@ -1,6 +1,6 @@
1
1
  import { a as resolveWhatsAppAccount } from "./accounts-BDqgpFEB.js";
2
2
  import { d as readWebAuthExistsForDecision, h as readWebSelfId, n as WHATSAPP_AUTH_UNSTABLE_CODE } from "./auth-store-BjCb50Ry.js";
3
- import { a as waitForWhatsAppLoginResult, l as resolveWhatsAppSocketTiming, o as createWaSocket, r as closeWaSocket, t as WHATSAPP_LOGGED_OUT_QR_MESSAGE } from "./connection-controller-BiHAsTM8.js";
3
+ import { a as waitForWhatsAppLoginResult, l as resolveWhatsAppSocketTiming, o as createWaSocket, r as closeWaSocket, t as WHATSAPP_LOGGED_OUT_QR_MESSAGE } from "./connection-controller-Bzopd9NT.js";
4
4
  import { logInfo } from "openclaw/plugin-sdk/text-runtime";
5
5
  import { danger, defaultRuntime, info, success } from "openclaw/plugin-sdk/runtime-env";
6
6
  import { renderQrPngDataUrl } from "openclaw/plugin-sdk/media-runtime";
@@ -1,7 +1,7 @@
1
1
  //#region extensions/whatsapp/login-qr-runtime.ts
2
2
  let loginQrModulePromise = null;
3
3
  function loadLoginQrModule() {
4
- loginQrModulePromise ??= import("./login-qr-DIS0Iv-7.js");
4
+ loginQrModulePromise ??= import("./login-qr-BmIHgjH2.js");
5
5
  return loginQrModulePromise;
6
6
  }
7
7
  async function startWebLoginWithQr(...args) {
@@ -10,7 +10,7 @@ import { n as cacheInboundMessageMeta, r as lookupInboundMessageMeta, t as build
10
10
  import { _ as readWebSelfIdentityForDecision, a as getWebAuthAgeMs, h as readWebSelfId, r as WhatsAppAuthUnstableError, s as logoutWeb } from "./auth-store-BjCb50Ry.js";
11
11
  import { a as getSelfIdentity, c as resolveComparableIdentity, i as getReplyContext, n as getMentionIdentities, o as getSenderIdentity, r as getPrimaryIdentityId, s as identitiesOverlap, t as getComparableIdentityValues } from "./identity-QHAlV7Fu.js";
12
12
  import { i as resolveWhatsAppInboundPolicy, n as checkInboundAccessControl, r as resolveWhatsAppCommandAuthorized } from "./access-control-BQ3tCkH8.js";
13
- import { c as waitForWaConnection, d as computeBackoff, f as newConnectionId, h as sleepWithAbort, l as resolveWhatsAppSocketTiming, m as resolveReconnectPolicy, n as WhatsAppConnectionController, o as createWaSocket, p as resolveHeartbeatSeconds, u as DEFAULT_RECONNECT_POLICY } from "./connection-controller-BiHAsTM8.js";
13
+ import { c as waitForWaConnection, d as DEFAULT_RECONNECT_POLICY, f as computeBackoff, g as sleepWithAbort, h as resolveReconnectPolicy, l as resolveWhatsAppSocketTiming, m as resolveHeartbeatSeconds, n as WhatsAppConnectionController, o as createWaSocket, p as newConnectionId } from "./connection-controller-Bzopd9NT.js";
14
14
  import { resolveAccountEntry } from "openclaw/plugin-sdk/account-core";
15
15
  import { getChildLogger, normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/text-runtime";
16
16
  import { createAckReactionHandle, logAckFailure, removeAckReactionHandleAfterReply, shouldAckReactionForWhatsApp } from "openclaw/plugin-sdk/channel-feedback";
@@ -48,7 +48,7 @@ import { resolveBatchedReplyThreadingPolicy } from "openclaw/plugin-sdk/reply-re
48
48
  import { resolveIdentityNamePrefix as resolveIdentityNamePrefix$1 } from "openclaw/plugin-sdk/agent-runtime";
49
49
  import { formatInboundEnvelope, formatInboundEnvelope as formatInboundEnvelope$1 } from "openclaw/plugin-sdk/channel-envelope";
50
50
  import { toLocationContext } from "openclaw/plugin-sdk/channel-location";
51
- import { createChannelReplyPipeline } from "openclaw/plugin-sdk/channel-reply-pipeline";
51
+ import { createChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode } from "openclaw/plugin-sdk/channel-reply-pipeline";
52
52
  //#region extensions/whatsapp/src/inbound/dedupe.ts
53
53
  const RECENT_WEB_MESSAGE_TTL_MS = 20 * 6e4;
54
54
  const RECENT_WEB_MESSAGE_MAX = 5e3;
@@ -2317,7 +2317,15 @@ async function dispatchWhatsAppBufferedReply(params) {
2317
2317
  accountId: params.route.accountId
2318
2318
  });
2319
2319
  const mediaLocalRoots = getAgentScopedMediaLocalRoots(params.cfg, params.route.agentId);
2320
- const disableBlockStreaming = resolveWhatsAppDisableBlockStreaming(params.cfg);
2320
+ const sourceReplyChatType = typeof params.context.ChatType === "string" ? params.context.ChatType : params.msg.chatType;
2321
+ const sourceReplyDeliveryMode = sourceReplyChatType === "group" || sourceReplyChatType === "channel" ? resolveChannelSourceReplyDeliveryMode({
2322
+ cfg: params.cfg,
2323
+ ctx: {
2324
+ ChatType: sourceReplyChatType,
2325
+ CommandSource: params.context.CommandSource === "native" ? "native" : void 0
2326
+ }
2327
+ }) : void 0;
2328
+ const disableBlockStreaming = sourceReplyDeliveryMode === "message_tool_only" ? true : resolveWhatsAppDisableBlockStreaming(params.cfg);
2321
2329
  let didSendReply = false;
2322
2330
  let didLogHeartbeatStrip = false;
2323
2331
  const { queuedFinal, counts } = await dispatchReplyWithBufferedBlockDispatcher({
@@ -2390,6 +2398,7 @@ async function dispatchWhatsAppBufferedReply(params) {
2390
2398
  },
2391
2399
  replyOptions: {
2392
2400
  disableBlockStreaming,
2401
+ ...sourceReplyDeliveryMode ? { sourceReplyDeliveryMode } : {},
2393
2402
  onModelSelected: params.onModelSelected
2394
2403
  }
2395
2404
  });
@@ -8,8 +8,8 @@ import { n as setWhatsAppRuntime } from "./runtime-6fZ67abR.js";
8
8
  import { C as waitForCredsSaveQueueWithTimeout, S as waitForCredsSaveQueue, _ as readWebSelfIdentityForDecision, a as getWebAuthAgeMs, b as webAuthExists, c as pickWebChannel, d as readWebAuthExistsForDecision, f as readWebAuthSnapshot, g as readWebSelfIdentity, h as readWebSelfId, i as formatWhatsAppWebAuthStatusState, l as readCredsJsonRaw, m as readWebAuthState, n as WHATSAPP_AUTH_UNSTABLE_CODE, o as logWebSelfId, p as readWebAuthSnapshotBestEffort, r as WhatsAppAuthUnstableError, s as logoutWeb, t as WA_WEB_AUTH_DIR, u as readWebAuthExistsBestEffort, v as resolveDefaultWebAuthDir, w as writeCredsJsonAtomically, y as restoreCredsFromBackupIfNeeded } from "./auth-store-BjCb50Ry.js";
9
9
  import { t as DEFAULT_WEB_MEDIA_BYTES } from "./constants-DLGCIbfl.js";
10
10
  import { n as resolveWebAccountId, t as getActiveWebListener } from "./active-listener-N7GFKsuN.js";
11
- import { c as waitForWaConnection, o as createWaSocket, s as newConnectionId } from "./connection-controller-BiHAsTM8.js";
12
- import { a as loadWebMediaRaw, c as monitorWebInbox, d as extractMediaPlaceholder, f as extractText, i as loadWebMedia, l as extractContactContext, n as LocalMediaAccessError, o as optimizeImageToJpeg, p as resetWebInboundDedupe, r as getDefaultLocalRoots, s as optimizeImageToPng, t as monitorWebChannel, u as extractLocationData } from "./monitor-C4Fhg_lD.js";
13
- import { t as loginWeb } from "./login-DymdrKca.js";
11
+ import { c as waitForWaConnection, o as createWaSocket, s as newConnectionId } from "./connection-controller-Bzopd9NT.js";
12
+ import { a as loadWebMediaRaw, c as monitorWebInbox, d as extractMediaPlaceholder, f as extractText, i as loadWebMedia, l as extractContactContext, n as LocalMediaAccessError, o as optimizeImageToJpeg, p as resetWebInboundDedupe, r as getDefaultLocalRoots, s as optimizeImageToPng, t as monitorWebChannel, u as extractLocationData } from "./monitor-CiG3ddjv.js";
13
+ import { t as loginWeb } from "./login-Cb_Wvr8L.js";
14
14
  import { HEARTBEAT_PROMPT, HEARTBEAT_TOKEN, SILENT_REPLY_TOKEN, stripHeartbeatToken } from "openclaw/plugin-sdk/reply-runtime";
15
15
  export { DEFAULT_WEB_MEDIA_BYTES, HEARTBEAT_PROMPT, HEARTBEAT_TOKEN, LocalMediaAccessError, SILENT_REPLY_TOKEN, WA_WEB_AUTH_DIR, WHATSAPP_AUTH_UNSTABLE_CODE, WhatsAppAuthUnstableError, createWaSocket, createWhatsAppLoginTool, extractContactContext, extractLocationData, extractMediaPlaceholder, extractText, formatError, formatWhatsAppWebAuthStatusState, getActiveWebListener, getDefaultLocalRoots, getStatusCode, getWebAuthAgeMs, handleWhatsAppAction, hasWebCredsSync, loadWebMedia, loadWebMediaRaw, logWebSelfId, loginWeb, logoutWeb, monitorWebChannel, monitorWebInbox, newConnectionId, optimizeImageToJpeg, optimizeImageToPng, pickWebChannel, readCredsJsonRaw, readWebAuthExistsBestEffort, readWebAuthExistsForDecision, readWebAuthSnapshot, readWebAuthSnapshotBestEffort, readWebAuthState, readWebSelfId, readWebSelfIdentity, readWebSelfIdentityForDecision, resetWebInboundDedupe, resolveDefaultWebAuthDir, resolveWebAccountId, resolveWebCredsBackupPath, resolveWebCredsPath, restoreCredsFromBackupIfNeeded, sendMessageWhatsApp, sendPollWhatsApp, sendReactionWhatsApp, sendTypingWhatsApp, setWhatsAppRuntime, startWebLoginWithQr, stripHeartbeatToken, waitForCredsSaveQueue, waitForCredsSaveQueueWithTimeout, waitForWaConnection, waitForWebLogin, webAuthExists, whatsAppActionRuntime, writeCredsJsonAtomically };
@@ -1,2 +1,2 @@
1
- import { t as whatsappSetupPlugin } from "./channel.setup-DOHR2BGp.js";
1
+ import { t as whatsappSetupPlugin } from "./channel.setup-Dd-A2LLn.js";
2
2
  export { whatsappSetupPlugin };
@@ -279,7 +279,7 @@ async function finalizeWhatsAppSetup(params) {
279
279
  message: linked ? "WhatsApp already linked. Re-link now?" : "Link WhatsApp now (QR)?",
280
280
  initialValue: !linked
281
281
  })) try {
282
- const { loginWeb } = await import("./login-DymdrKca.js").then((n) => n.n);
282
+ const { loginWeb } = await import("./login-Cb_Wvr8L.js").then((n) => n.n);
283
283
  await loginWeb(false, void 0, params.runtime, accountId);
284
284
  } catch (error) {
285
285
  params.runtime.error(`WhatsApp login failed: ${String(error)}`);
@@ -124,10 +124,10 @@ function resolveWhatsAppConfigPath(params) {
124
124
  return `${resolveWhatsAppGroupScopeBasePath(params)}.${params.field}`;
125
125
  }
126
126
  async function loadWhatsAppChannelRuntime() {
127
- return await import("./channel.runtime-DKXRnA8x.js");
127
+ return await import("./channel.runtime-CzJk8F1Z.js");
128
128
  }
129
129
  async function loadWhatsAppSetupSurface() {
130
- return await import("./setup-surface-ieFnIW4g.js");
130
+ return await import("./setup-surface-DQbN6Iu0.js");
131
131
  }
132
132
  const whatsappSetupWizardProxy = createWhatsAppSetupWizardProxy(async () => (await loadWhatsAppSetupSurface()).whatsappSetupWizard);
133
133
  const whatsappConfigAdapter = createScopedChannelConfigAdapter({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/whatsapp",
3
- "version": "2026.5.3-beta.4",
3
+ "version": "2026.5.4-beta.1",
4
4
  "description": "OpenClaw WhatsApp channel plugin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,7 +19,7 @@
19
19
  "openclaw": "workspace:*"
20
20
  },
21
21
  "peerDependencies": {
22
- "openclaw": ">=2026.5.3-beta.4"
22
+ "openclaw": ">=2026.5.4-beta.1"
23
23
  },
24
24
  "peerDependenciesMeta": {
25
25
  "openclaw": {
@@ -61,10 +61,10 @@
61
61
  "minHostVersion": ">=2026.4.25"
62
62
  },
63
63
  "compat": {
64
- "pluginApi": ">=2026.5.3-beta.4"
64
+ "pluginApi": ">=2026.5.4-beta.1"
65
65
  },
66
66
  "build": {
67
- "openclawVersion": "2026.5.3-beta.4"
67
+ "openclawVersion": "2026.5.4-beta.1"
68
68
  },
69
69
  "release": {
70
70
  "publishToClawHub": true,