Skip to content

Commit 292e715

Browse files
committed
Auto-merge upstream openclaw/openclaw
2 parents 3af6bdf + 7157244 commit 292e715

63 files changed

Lines changed: 1142 additions & 244 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@
22

33
Docs: https://docs.openclaw.ai
44

5-
## 2026.4.11
5+
## Unreleased
6+
7+
### Changes
8+
9+
### Fixes
10+
11+
## 2026.4.11-beta.1
612

713
### Changes
814

@@ -29,6 +35,7 @@ Docs: https://docs.openclaw.ai
2935
- Google/Veo: stop sending the unsupported `numberOfVideos` request field so Gemini Developer API Veo runs do not fail before OpenClaw can complete the intended Google video generation path. (#64723) Thanks @velvet-shark.
3036
- QA/packaging: stop packaged CLI startup and completion cache generation from reading repo-only QA scenario markdown, ship the bundled QA scenario pack in npm releases, and keep `openclaw completion --write-state` working even if QA setup is broken. (#64648) Thanks @obviyus.
3137
- Codex/QA: keep Codex app-server coordination chatter out of visible replies, add a live QA leak scenario, and classify leaked harness meta text as a QA failure instead of a successful reply. Thanks @vincentkoc.
38+
- WhatsApp: route `message react` through the gateway-owned action path so reactions use the live WhatsApp listener in both DM and group chats, matching `message send` and `message poll`. Thanks @mcaxtr.
3239

3340
## 2026.4.10
3441

apps/android/app/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ android {
6666
minSdk = 31
6767
targetSdk = 36
6868
versionCode = 2026041101
69-
versionName = "2026.4.11"
69+
versionName = "2026.4.11-beta.1"
7070
ndk {
7171
// Support all major ABIs — native libs are tiny (~47 KB per ABI)
7272
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")

apps/macos/Sources/OpenClaw/Resources/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<key>CFBundlePackageType</key>
1616
<string>APPL</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>2026.4.11</string>
18+
<string>2026.4.11-beta.1</string>
1919
<key>CFBundleVersion</key>
2020
<string>2026041101</string>
2121
<key>CFBundleIconFile</key>

apps/macos/Sources/OpenClawProtocol/GatewayModels.swift

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,60 @@ public struct AgentEvent: Codable, Sendable {
401401
}
402402
}
403403

404+
public struct MessageActionParams: Codable, Sendable {
405+
public let channel: String
406+
public let action: String
407+
public let params: [String: AnyCodable]
408+
public let accountid: String?
409+
public let requestersenderid: String?
410+
public let senderisowner: Bool?
411+
public let sessionkey: String?
412+
public let sessionid: String?
413+
public let agentid: String?
414+
public let toolcontext: [String: AnyCodable]?
415+
public let idempotencykey: String
416+
417+
public init(
418+
channel: String,
419+
action: String,
420+
params: [String: AnyCodable],
421+
accountid: String?,
422+
requestersenderid: String?,
423+
senderisowner: Bool?,
424+
sessionkey: String?,
425+
sessionid: String?,
426+
agentid: String?,
427+
toolcontext: [String: AnyCodable]?,
428+
idempotencykey: String)
429+
{
430+
self.channel = channel
431+
self.action = action
432+
self.params = params
433+
self.accountid = accountid
434+
self.requestersenderid = requestersenderid
435+
self.senderisowner = senderisowner
436+
self.sessionkey = sessionkey
437+
self.sessionid = sessionid
438+
self.agentid = agentid
439+
self.toolcontext = toolcontext
440+
self.idempotencykey = idempotencykey
441+
}
442+
443+
private enum CodingKeys: String, CodingKey {
444+
case channel
445+
case action
446+
case params
447+
case accountid = "accountId"
448+
case requestersenderid = "requesterSenderId"
449+
case senderisowner = "senderIsOwner"
450+
case sessionkey = "sessionKey"
451+
case sessionid = "sessionId"
452+
case agentid = "agentId"
453+
case toolcontext = "toolContext"
454+
case idempotencykey = "idempotencyKey"
455+
}
456+
}
457+
404458
public struct SendParams: Codable, Sendable {
405459
public let to: String
406460
public let message: String?

apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,60 @@ public struct AgentEvent: Codable, Sendable {
401401
}
402402
}
403403

404+
public struct MessageActionParams: Codable, Sendable {
405+
public let channel: String
406+
public let action: String
407+
public let params: [String: AnyCodable]
408+
public let accountid: String?
409+
public let requestersenderid: String?
410+
public let senderisowner: Bool?
411+
public let sessionkey: String?
412+
public let sessionid: String?
413+
public let agentid: String?
414+
public let toolcontext: [String: AnyCodable]?
415+
public let idempotencykey: String
416+
417+
public init(
418+
channel: String,
419+
action: String,
420+
params: [String: AnyCodable],
421+
accountid: String?,
422+
requestersenderid: String?,
423+
senderisowner: Bool?,
424+
sessionkey: String?,
425+
sessionid: String?,
426+
agentid: String?,
427+
toolcontext: [String: AnyCodable]?,
428+
idempotencykey: String)
429+
{
430+
self.channel = channel
431+
self.action = action
432+
self.params = params
433+
self.accountid = accountid
434+
self.requestersenderid = requestersenderid
435+
self.senderisowner = senderisowner
436+
self.sessionkey = sessionkey
437+
self.sessionid = sessionid
438+
self.agentid = agentid
439+
self.toolcontext = toolcontext
440+
self.idempotencykey = idempotencykey
441+
}
442+
443+
private enum CodingKeys: String, CodingKey {
444+
case channel
445+
case action
446+
case params
447+
case accountid = "accountId"
448+
case requestersenderid = "requesterSenderId"
449+
case senderisowner = "senderIsOwner"
450+
case sessionkey = "sessionKey"
451+
case sessionid = "sessionId"
452+
case agentid = "agentId"
453+
case toolcontext = "toolContext"
454+
case idempotencykey = "idempotencyKey"
455+
}
456+
}
457+
404458
public struct SendParams: Codable, Sendable {
405459
public let to: String
406460
public let message: String?
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
228031f16ad06580bfd137f092d70d03f2796515e723b8b6618ed69d285465fa config-baseline.json
2-
bad0a5bb247a62b8fb9ed9fc2b2720eacf3e0913077ac351b5d26ae2723335ad config-baseline.core.json
3-
e1f94346a8507ce3dec763b598e79f3bb89ff2e33189ce977cc87d3b05e71c1d config-baseline.channel.json
1+
02af8ba235c1d45212f7a38c0a1752712f2c49505445127587c974499ffbbc50 config-baseline.json
2+
fb6f0ef881fb591d2791d2adca43c7e88d48f8b562457683092ab6e767aece78 config-baseline.core.json
3+
73464e0e53d9e76e212b0946db36e69c2528b45bbd8131a4302e9b7f44b8a115 config-baseline.channel.json
44
6c19997f1fb2aff4315f2cb9c7d9e299b403fbc0f9e78e3412cc7fe1c655f222 config-baseline.plugin.json
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
7a5c71593c9efbb936b9632f0b381a6c603e9bce44706b312a0172504fa51ef6 plugin-sdk-api-baseline.json
2-
0b044de57266d20561838a5ae0edbaacaa53b323d4c8c068e701a48f92f0a264 plugin-sdk-api-baseline.jsonl
1+
a7612f89b98d04577ec867555e0219bd21659f93879dc127244da0beddb53dae plugin-sdk-api-baseline.json
2+
77d138ee00a105cb02c6cb5cdae5348a778b57a3af66551f4bbdc8c03e32f67c plugin-sdk-api-baseline.jsonl

extensions/whatsapp/src/channel.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ export const whatsappPlugin: ChannelPlugin<ResolvedWhatsAppAccount> =
135135
describeMessageTool: ({ cfg, accountId }) =>
136136
describeWhatsAppMessageActions({ cfg, accountId }),
137137
supportsAction: ({ action }) => action === "react",
138+
resolveExecutionMode: ({ action }) => (action === "react" ? "gateway" : "local"),
138139
handleAction: async ({ action, params, cfg, accountId, toolContext }) =>
139140
await (
140141
await loadWhatsAppChannelReactAction()

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "openclaw",
3-
"version": "2026.4.11",
3+
"version": "2026.4.11-beta.1",
44
"description": "Multi-channel AI gateway with extensible messaging integrations",
55
"keywords": [],
66
"homepage": "https://github.com/openclaw/openclaw#readme",
@@ -30,7 +30,9 @@
3030
"!dist/**/*.map",
3131
"!dist/plugin-sdk/.tsbuildinfo",
3232
"!dist/extensions/qa-channel/**",
33+
"dist/extensions/qa-channel/runtime-api.js",
3334
"!dist/extensions/qa-lab/**",
35+
"dist/extensions/qa-lab/runtime-api.js",
3436
"docs/",
3537
"!docs/.generated/**",
3638
"!docs/.i18n/zh-CN.tm.jsonl",

scripts/build-all.mjs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ export const BUILD_ALL_STEPS = [
1010
{ label: "canvas:a2ui:bundle", kind: "pnpm", pnpmArgs: ["canvas:a2ui:bundle"] },
1111
{ label: "tsdown", kind: "node", args: ["scripts/tsdown-build.mjs"] },
1212
{ label: "runtime-postbuild", kind: "node", args: ["scripts/runtime-postbuild.mjs"] },
13+
{
14+
label: "write-npm-update-compat-sidecars",
15+
kind: "node",
16+
args: ["scripts/write-npm-update-compat-sidecars.mjs"],
17+
},
1318
{ label: "build-stamp", kind: "node", args: ["scripts/build-stamp.mjs"] },
1419
{
1520
label: "build:plugin-sdk:dts",

0 commit comments

Comments
 (0)