diff --git a/CHANGELOG.md b/CHANGELOG.md
index a2061303397..b3d65e6122c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,8 @@ Docs: https://docs.openclaw.ai
## Unreleased
+## 2026.4.20
+
### Changes
- Plugins/tasks: add a detached runtime registration contract so plugin executors can own detached task lifecycle and cancellation without reaching into core task internals. (#68915) Thanks @mbelinky.
diff --git a/apps/android/app/build.gradle.kts b/apps/android/app/build.gradle.kts
index 0499cd1a26f..de08f5ecc25 100644
--- a/apps/android/app/build.gradle.kts
+++ b/apps/android/app/build.gradle.kts
@@ -65,8 +65,8 @@ android {
applicationId = "ai.openclaw.app"
minSdk = 31
targetSdk = 36
- versionCode = 2026041902
- versionName = "2026.4.19-beta.2"
+ versionCode = 2026042000
+ versionName = "2026.4.20"
ndk {
// Support all major ABIs — native libs are tiny (~47 KB per ABI)
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
diff --git a/apps/ios/CHANGELOG.md b/apps/ios/CHANGELOG.md
index 5ef3a2594a1..8cd1fac26c1 100644
--- a/apps/ios/CHANGELOG.md
+++ b/apps/ios/CHANGELOG.md
@@ -1,5 +1,9 @@
# OpenClaw iOS Changelog
+## 2026.4.20 - 2026-04-20
+
+Maintenance update for the current OpenClaw release.
+
## 2026.4.19 - 2026-04-19
Maintenance update for the current OpenClaw beta release.
diff --git a/apps/ios/Config/Version.xcconfig b/apps/ios/Config/Version.xcconfig
index 24923d50bca..fc650b9e4eb 100644
--- a/apps/ios/Config/Version.xcconfig
+++ b/apps/ios/Config/Version.xcconfig
@@ -2,8 +2,8 @@
// Source of truth: apps/ios/version.json
// Generated by scripts/ios-sync-versioning.ts.
-OPENCLAW_IOS_VERSION = 2026.4.19
-OPENCLAW_MARKETING_VERSION = 2026.4.19
+OPENCLAW_IOS_VERSION = 2026.4.20
+OPENCLAW_MARKETING_VERSION = 2026.4.20
OPENCLAW_BUILD_VERSION = 1
#include? "../build/Version.xcconfig"
diff --git a/apps/ios/fastlane/metadata/en-US/release_notes.txt b/apps/ios/fastlane/metadata/en-US/release_notes.txt
index 5090e4186ab..99afd00b10b 100644
--- a/apps/ios/fastlane/metadata/en-US/release_notes.txt
+++ b/apps/ios/fastlane/metadata/en-US/release_notes.txt
@@ -1 +1 @@
-Maintenance update for the current OpenClaw beta release.
+Maintenance update for the current OpenClaw release.
diff --git a/apps/ios/version.json b/apps/ios/version.json
index 12e69f6617b..d12a7e41436 100644
--- a/apps/ios/version.json
+++ b/apps/ios/version.json
@@ -1,3 +1,3 @@
{
- "version": "2026.4.19"
+ "version": "2026.4.20"
}
diff --git a/apps/macos/Sources/OpenClaw/Resources/Info.plist b/apps/macos/Sources/OpenClaw/Resources/Info.plist
index be7fdd834b2..dbc3943063a 100644
--- a/apps/macos/Sources/OpenClaw/Resources/Info.plist
+++ b/apps/macos/Sources/OpenClaw/Resources/Info.plist
@@ -15,9 +15,9 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 2026.4.19-beta.2
+ 2026.4.20
CFBundleVersion
- 2026041902
+ 2026042000
CFBundleIconFile
OpenClaw
CFBundleURLTypes
diff --git a/docs/.generated/config-baseline.sha256 b/docs/.generated/config-baseline.sha256
index 550499df716..85a14925092 100644
--- a/docs/.generated/config-baseline.sha256
+++ b/docs/.generated/config-baseline.sha256
@@ -1,4 +1,4 @@
-889094f0a34a8a8a8b7672b846f4cbe41e273ebb6fd230f1955ec80c65339bef config-baseline.json
-10b7c57a6198526b846471e1bcda6e361c1f3db2e3b1cd24abd8bac11db56e16 config-baseline.core.json
+b199851e694368264c24ba3d347a84764a19f632769e049fe94a82787c5e5d93 config-baseline.json
+cbb9a6ee1cb69068d5eb63f00f95512ba19778415ea5b2eabe056aaea38978b5 config-baseline.core.json
0982fc3d264047919333a57dfba1ba948e6639fb19659a400f947dfdd8b8d1de config-baseline.channel.json
b695cb31b4c0cf1d31f842f2892e99cc3ff8d84263ae72b72977cae844b81d6e config-baseline.plugin.json
diff --git a/extensions/acpx/package.json b/extensions/acpx/package.json
index 4c46c4f3853..9814b29e94c 100644
--- a/extensions/acpx/package.json
+++ b/extensions/acpx/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/acpx",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw ACP runtime backend",
"type": "module",
"dependencies": {
diff --git a/extensions/alibaba/package.json b/extensions/alibaba/package.json
index 933ef1f9c61..58ec1371654 100644
--- a/extensions/alibaba/package.json
+++ b/extensions/alibaba/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/alibaba-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Alibaba Model Studio video provider plugin",
"type": "module",
diff --git a/extensions/amazon-bedrock-mantle/package.json b/extensions/amazon-bedrock-mantle/package.json
index b61ff3492f0..9eaa1c441be 100644
--- a/extensions/amazon-bedrock-mantle/package.json
+++ b/extensions/amazon-bedrock-mantle/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/amazon-bedrock-mantle-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Amazon Bedrock Mantle (OpenAI-compatible) provider plugin",
"type": "module",
diff --git a/extensions/amazon-bedrock/package.json b/extensions/amazon-bedrock/package.json
index d7e7f329d9a..7a95c369855 100644
--- a/extensions/amazon-bedrock/package.json
+++ b/extensions/amazon-bedrock/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/amazon-bedrock-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Amazon Bedrock provider plugin",
"type": "module",
diff --git a/extensions/anthropic-vertex/package.json b/extensions/anthropic-vertex/package.json
index 105f60b9e28..1992c452c1f 100644
--- a/extensions/anthropic-vertex/package.json
+++ b/extensions/anthropic-vertex/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/anthropic-vertex-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Anthropic Vertex provider plugin",
"type": "module",
diff --git a/extensions/anthropic/package.json b/extensions/anthropic/package.json
index dad285b59ab..9a1aa4e594a 100644
--- a/extensions/anthropic/package.json
+++ b/extensions/anthropic/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/anthropic-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Anthropic provider plugin",
"type": "module",
diff --git a/extensions/arcee/package.json b/extensions/arcee/package.json
index c62678b4e96..b03039a8397 100644
--- a/extensions/arcee/package.json
+++ b/extensions/arcee/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/arcee-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Arcee provider plugin",
"type": "module",
diff --git a/extensions/bluebubbles/package.json b/extensions/bluebubbles/package.json
index 4b5c3f1373a..da46c46a98b 100644
--- a/extensions/bluebubbles/package.json
+++ b/extensions/bluebubbles/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/bluebubbles",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw BlueBubbles channel plugin",
"type": "module",
"devDependencies": {
@@ -8,7 +8,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -43,10 +43,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/brave/package.json b/extensions/brave/package.json
index 734d0b1f8d7..4ed4a142e45 100644
--- a/extensions/brave/package.json
+++ b/extensions/brave/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/brave-plugin",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Brave plugin",
"type": "module",
diff --git a/extensions/browser/package.json b/extensions/browser/package.json
index f74a87379f4..9129ebc43a7 100644
--- a/extensions/browser/package.json
+++ b/extensions/browser/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/browser-plugin",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw browser tool plugin",
"type": "module",
diff --git a/extensions/byteplus/package.json b/extensions/byteplus/package.json
index a0ea9d7b9fe..3d95c322bba 100644
--- a/extensions/byteplus/package.json
+++ b/extensions/byteplus/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/byteplus-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw BytePlus provider plugin",
"type": "module",
diff --git a/extensions/chutes/package.json b/extensions/chutes/package.json
index 5ab472852ca..c55e04e4916 100644
--- a/extensions/chutes/package.json
+++ b/extensions/chutes/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/chutes-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Chutes.ai provider plugin",
"type": "module",
diff --git a/extensions/cloudflare-ai-gateway/package.json b/extensions/cloudflare-ai-gateway/package.json
index fbadfd72bc4..bc025c6ee3f 100644
--- a/extensions/cloudflare-ai-gateway/package.json
+++ b/extensions/cloudflare-ai-gateway/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/cloudflare-ai-gateway-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Cloudflare AI Gateway provider plugin",
"type": "module",
diff --git a/extensions/codex/package.json b/extensions/codex/package.json
index 38a3499283e..12d9e1a0304 100644
--- a/extensions/codex/package.json
+++ b/extensions/codex/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/codex",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw Codex harness and model provider plugin",
"type": "module",
"dependencies": {
diff --git a/extensions/comfy/package.json b/extensions/comfy/package.json
index 425a826cc95..89fd3fd126d 100644
--- a/extensions/comfy/package.json
+++ b/extensions/comfy/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/comfy-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw ComfyUI provider plugin",
"type": "module",
diff --git a/extensions/copilot-proxy/package.json b/extensions/copilot-proxy/package.json
index 3c73828a1eb..f68a3e3217b 100644
--- a/extensions/copilot-proxy/package.json
+++ b/extensions/copilot-proxy/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/copilot-proxy",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Copilot Proxy provider plugin",
"type": "module",
diff --git a/extensions/deepgram/package.json b/extensions/deepgram/package.json
index a886cfd79d2..b729d652ad3 100644
--- a/extensions/deepgram/package.json
+++ b/extensions/deepgram/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/deepgram-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Deepgram media-understanding provider",
"type": "module",
diff --git a/extensions/deepseek/package.json b/extensions/deepseek/package.json
index 8395fc77ea1..221e85c8506 100644
--- a/extensions/deepseek/package.json
+++ b/extensions/deepseek/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/deepseek-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw DeepSeek provider plugin",
"type": "module",
diff --git a/extensions/diagnostics-otel/package.json b/extensions/diagnostics-otel/package.json
index 42c31dce521..7d9dbd2f7bb 100644
--- a/extensions/diagnostics-otel/package.json
+++ b/extensions/diagnostics-otel/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/diagnostics-otel",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw diagnostics OpenTelemetry exporter",
"type": "module",
"dependencies": {
@@ -24,10 +24,10 @@
"./index.ts"
],
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/diffs/package.json b/extensions/diffs/package.json
index fc8ea9ec626..1f1fbc56865 100644
--- a/extensions/diffs/package.json
+++ b/extensions/diffs/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/diffs",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw diff viewer plugin",
"type": "module",
diff --git a/extensions/discord/package.json b/extensions/discord/package.json
index 6060ffece08..05b763343c3 100644
--- a/extensions/discord/package.json
+++ b/extensions/discord/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/discord",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw Discord channel plugin",
"type": "module",
"dependencies": {
@@ -16,7 +16,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -52,10 +52,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"bundle": {
"stageRuntimeDependencies": true
diff --git a/extensions/duckduckgo/package.json b/extensions/duckduckgo/package.json
index db8270151cc..da4a33fd528 100644
--- a/extensions/duckduckgo/package.json
+++ b/extensions/duckduckgo/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/duckduckgo-plugin",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw DuckDuckGo plugin",
"type": "module",
diff --git a/extensions/elevenlabs/package.json b/extensions/elevenlabs/package.json
index 3428e84891a..f8aca5f71b8 100644
--- a/extensions/elevenlabs/package.json
+++ b/extensions/elevenlabs/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/elevenlabs-speech",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw ElevenLabs speech plugin",
"type": "module",
diff --git a/extensions/exa/package.json b/extensions/exa/package.json
index 0c136139374..3358d7b87b5 100644
--- a/extensions/exa/package.json
+++ b/extensions/exa/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/exa-plugin",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Exa plugin",
"type": "module",
diff --git a/extensions/fal/package.json b/extensions/fal/package.json
index 3500617cf95..cff7655f862 100644
--- a/extensions/fal/package.json
+++ b/extensions/fal/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/fal-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw fal provider plugin",
"type": "module",
diff --git a/extensions/feishu/package.json b/extensions/feishu/package.json
index e174ff65000..c7dfd9da723 100644
--- a/extensions/feishu/package.json
+++ b/extensions/feishu/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/feishu",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw Feishu/Lark channel plugin (community maintained by @m1heng)",
"type": "module",
"dependencies": {
@@ -13,7 +13,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -44,10 +44,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"bundle": {
"stageRuntimeDependencies": true
diff --git a/extensions/firecrawl/package.json b/extensions/firecrawl/package.json
index 888432b48fb..defde5e3962 100644
--- a/extensions/firecrawl/package.json
+++ b/extensions/firecrawl/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/firecrawl-plugin",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Firecrawl plugin",
"type": "module",
diff --git a/extensions/fireworks/package.json b/extensions/fireworks/package.json
index 9416e63a0ee..a34bcd34537 100644
--- a/extensions/fireworks/package.json
+++ b/extensions/fireworks/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/fireworks-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Fireworks provider plugin",
"type": "module",
diff --git a/extensions/github-copilot/package.json b/extensions/github-copilot/package.json
index 9a685f14fd7..14f720a47ad 100644
--- a/extensions/github-copilot/package.json
+++ b/extensions/github-copilot/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/github-copilot-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw GitHub Copilot provider plugin",
"type": "module",
diff --git a/extensions/google/package.json b/extensions/google/package.json
index 4fb9099ddfd..91d297de875 100644
--- a/extensions/google/package.json
+++ b/extensions/google/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/google-plugin",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Google plugin",
"type": "module",
diff --git a/extensions/googlechat/package.json b/extensions/googlechat/package.json
index 196dd3ed745..10410f8b19b 100644
--- a/extensions/googlechat/package.json
+++ b/extensions/googlechat/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/googlechat",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Google Chat channel plugin",
"type": "module",
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
diff --git a/extensions/groq/package.json b/extensions/groq/package.json
index acb158ce2c8..517f4da8403 100644
--- a/extensions/groq/package.json
+++ b/extensions/groq/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/groq-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Groq media-understanding provider",
"type": "module",
diff --git a/extensions/huggingface/package.json b/extensions/huggingface/package.json
index bfa1ed7da56..991dd5c2b19 100644
--- a/extensions/huggingface/package.json
+++ b/extensions/huggingface/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/huggingface-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Hugging Face provider plugin",
"type": "module",
diff --git a/extensions/image-generation-core/package.json b/extensions/image-generation-core/package.json
index c2cf116f2ec..050590ca622 100644
--- a/extensions/image-generation-core/package.json
+++ b/extensions/image-generation-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/image-generation-core",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw image generation runtime package",
"type": "module",
diff --git a/extensions/imessage/package.json b/extensions/imessage/package.json
index 8d5947abfbf..874b9812664 100644
--- a/extensions/imessage/package.json
+++ b/extensions/imessage/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/imessage",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw iMessage channel plugin",
"type": "module",
diff --git a/extensions/irc/package.json b/extensions/irc/package.json
index beda195854d..2e75e90df24 100644
--- a/extensions/irc/package.json
+++ b/extensions/irc/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/irc",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw IRC channel plugin",
"type": "module",
"devDependencies": {
diff --git a/extensions/kilocode/package.json b/extensions/kilocode/package.json
index 1feb00ddbcf..0ef15c3b0c4 100644
--- a/extensions/kilocode/package.json
+++ b/extensions/kilocode/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/kilocode-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Kilo Gateway provider plugin",
"type": "module",
diff --git a/extensions/kimi-coding/package.json b/extensions/kimi-coding/package.json
index ba036cadb3a..679a7dc9ccf 100644
--- a/extensions/kimi-coding/package.json
+++ b/extensions/kimi-coding/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/kimi-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Kimi provider plugin",
"type": "module",
diff --git a/extensions/line/package.json b/extensions/line/package.json
index bfd5f55b573..10926368342 100644
--- a/extensions/line/package.json
+++ b/extensions/line/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/line",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw LINE channel plugin",
"type": "module",
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
diff --git a/extensions/litellm/package.json b/extensions/litellm/package.json
index 7460e7e3988..0f8c9ad3562 100644
--- a/extensions/litellm/package.json
+++ b/extensions/litellm/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/litellm-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw LiteLLM provider plugin",
"type": "module",
diff --git a/extensions/llm-task/package.json b/extensions/llm-task/package.json
index f9ae3643c18..65321d341ab 100644
--- a/extensions/llm-task/package.json
+++ b/extensions/llm-task/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/llm-task",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw JSON-only LLM task plugin",
"type": "module",
diff --git a/extensions/lmstudio/package.json b/extensions/lmstudio/package.json
index 3016f53aabf..7bbcea36bbf 100644
--- a/extensions/lmstudio/package.json
+++ b/extensions/lmstudio/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/lmstudio-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw LM Studio provider plugin",
"type": "module",
diff --git a/extensions/lobster/package.json b/extensions/lobster/package.json
index d920b5ad8f3..9470664e41c 100644
--- a/extensions/lobster/package.json
+++ b/extensions/lobster/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/lobster",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "Lobster workflow tool plugin (typed pipelines + resumable approvals)",
"type": "module",
"dependencies": {
@@ -15,10 +15,10 @@
"./index.ts"
],
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/matrix/CHANGELOG.md b/extensions/matrix/CHANGELOG.md
index 318fc0d2a11..09442e7e40d 100644
--- a/extensions/matrix/CHANGELOG.md
+++ b/extensions/matrix/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## 2026.4.20
+
+### Changes
+
+- Version alignment with core OpenClaw release numbers.
+
## 2026.4.19-beta.1
### Changes
diff --git a/extensions/matrix/package.json b/extensions/matrix/package.json
index 37490177f32..52a8580d166 100644
--- a/extensions/matrix/package.json
+++ b/extensions/matrix/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/matrix",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw Matrix channel plugin",
"type": "module",
"dependencies": {
@@ -16,7 +16,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
diff --git a/extensions/mattermost/package.json b/extensions/mattermost/package.json
index c5e5151d8fd..8ad89488e3b 100644
--- a/extensions/mattermost/package.json
+++ b/extensions/mattermost/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/mattermost",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw Mattermost channel plugin",
"type": "module",
"dependencies": {
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
diff --git a/extensions/media-understanding-core/package.json b/extensions/media-understanding-core/package.json
index 0dec0a07b5c..60ab617574f 100644
--- a/extensions/media-understanding-core/package.json
+++ b/extensions/media-understanding-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/media-understanding-core",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw media understanding runtime package",
"type": "module",
diff --git a/extensions/memory-core/package.json b/extensions/memory-core/package.json
index 648d919689c..0cc35195f6e 100644
--- a/extensions/memory-core/package.json
+++ b/extensions/memory-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/memory-core",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw core memory search plugin",
"type": "module",
@@ -9,7 +9,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
diff --git a/extensions/memory-lancedb/package.json b/extensions/memory-lancedb/package.json
index 34e68ba14a1..da72ffc5d94 100644
--- a/extensions/memory-lancedb/package.json
+++ b/extensions/memory-lancedb/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/memory-lancedb",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw LanceDB-backed long-term memory plugin with auto-recall/capture",
"type": "module",
"dependencies": {
@@ -21,10 +21,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/memory-wiki/package.json b/extensions/memory-wiki/package.json
index 49d67f48240..8df2e96cc51 100644
--- a/extensions/memory-wiki/package.json
+++ b/extensions/memory-wiki/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/memory-wiki",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw persistent wiki plugin",
"type": "module",
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
diff --git a/extensions/microsoft-foundry/package.json b/extensions/microsoft-foundry/package.json
index ebe58f39594..99ba5f2bdfe 100644
--- a/extensions/microsoft-foundry/package.json
+++ b/extensions/microsoft-foundry/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/microsoft-foundry",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Microsoft Foundry provider plugin",
"type": "module",
diff --git a/extensions/microsoft/package.json b/extensions/microsoft/package.json
index 2255a7e38fe..b76a7c9899f 100644
--- a/extensions/microsoft/package.json
+++ b/extensions/microsoft/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/microsoft-speech",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Microsoft speech plugin",
"type": "module",
diff --git a/extensions/minimax/package.json b/extensions/minimax/package.json
index 30a7cb2bc35..fc5893e3a9c 100644
--- a/extensions/minimax/package.json
+++ b/extensions/minimax/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/minimax-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw MiniMax provider and OAuth plugin",
"type": "module",
diff --git a/extensions/mistral/package.json b/extensions/mistral/package.json
index 9959a4b10ba..c49bad4118c 100644
--- a/extensions/mistral/package.json
+++ b/extensions/mistral/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/mistral-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Mistral provider plugin",
"type": "module",
diff --git a/extensions/moonshot/package.json b/extensions/moonshot/package.json
index 4444ba0cf1f..d83f5c50ad2 100644
--- a/extensions/moonshot/package.json
+++ b/extensions/moonshot/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/moonshot-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Moonshot provider plugin",
"type": "module",
diff --git a/extensions/msteams/package.json b/extensions/msteams/package.json
index a5e283c766f..0d4063174b8 100644
--- a/extensions/msteams/package.json
+++ b/extensions/msteams/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/msteams",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw Microsoft Teams channel plugin",
"type": "module",
"dependencies": {
@@ -18,7 +18,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -48,10 +48,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/nextcloud-talk/package.json b/extensions/nextcloud-talk/package.json
index 4c41dc2c6f3..53c115fa036 100644
--- a/extensions/nextcloud-talk/package.json
+++ b/extensions/nextcloud-talk/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/nextcloud-talk",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw Nextcloud Talk channel plugin",
"type": "module",
"devDependencies": {
@@ -8,7 +8,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -40,10 +40,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/nostr/package.json b/extensions/nostr/package.json
index a72f0941446..ee5ce39dc5a 100644
--- a/extensions/nostr/package.json
+++ b/extensions/nostr/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/nostr",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw Nostr channel plugin for NIP-04 encrypted DMs",
"type": "module",
"dependencies": {
@@ -11,7 +11,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -39,10 +39,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"bundle": {
"stageRuntimeDependencies": true
diff --git a/extensions/nvidia/package.json b/extensions/nvidia/package.json
index e26a0d6301a..828a958f6ed 100644
--- a/extensions/nvidia/package.json
+++ b/extensions/nvidia/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/nvidia-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw NVIDIA provider plugin",
"type": "module",
diff --git a/extensions/ollama/package.json b/extensions/ollama/package.json
index 376229c8e8c..10a69bdfaa7 100644
--- a/extensions/ollama/package.json
+++ b/extensions/ollama/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/ollama-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Ollama provider plugin",
"type": "module",
diff --git a/extensions/open-prose/package.json b/extensions/open-prose/package.json
index 5076bd8cffb..972d0a76df3 100644
--- a/extensions/open-prose/package.json
+++ b/extensions/open-prose/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/open-prose",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenProse VM skill pack plugin (slash command + telemetry).",
"type": "module",
diff --git a/extensions/openai/package.json b/extensions/openai/package.json
index ab185acdbf8..0e651c57b3b 100644
--- a/extensions/openai/package.json
+++ b/extensions/openai/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/openai-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw OpenAI provider plugins",
"type": "module",
diff --git a/extensions/opencode-go/package.json b/extensions/opencode-go/package.json
index c73adcea9f2..6db34878f74 100644
--- a/extensions/opencode-go/package.json
+++ b/extensions/opencode-go/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/opencode-go-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw OpenCode Go provider plugin",
"type": "module",
diff --git a/extensions/opencode/package.json b/extensions/opencode/package.json
index a0673e2046f..2ee15e8526f 100644
--- a/extensions/opencode/package.json
+++ b/extensions/opencode/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/opencode-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw OpenCode Zen provider plugin",
"type": "module",
diff --git a/extensions/openrouter/package.json b/extensions/openrouter/package.json
index b0a4c82382e..728507b4de1 100644
--- a/extensions/openrouter/package.json
+++ b/extensions/openrouter/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/openrouter-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw OpenRouter provider plugin",
"type": "module",
diff --git a/extensions/openshell/package.json b/extensions/openshell/package.json
index a5fb817b606..7b204165eaa 100644
--- a/extensions/openshell/package.json
+++ b/extensions/openshell/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/openshell-sandbox",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw OpenShell sandbox backend",
"type": "module",
diff --git a/extensions/perplexity/package.json b/extensions/perplexity/package.json
index 97494dafa41..c01a23d6ffa 100644
--- a/extensions/perplexity/package.json
+++ b/extensions/perplexity/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/perplexity-plugin",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Perplexity plugin",
"type": "module",
diff --git a/extensions/qa-channel/package.json b/extensions/qa-channel/package.json
index f32bd9a4fff..554701b4b08 100644
--- a/extensions/qa-channel/package.json
+++ b/extensions/qa-channel/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/qa-channel",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw QA synthetic channel plugin",
"type": "module",
@@ -9,7 +9,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
diff --git a/extensions/qa-lab/package.json b/extensions/qa-lab/package.json
index 49f196ef20b..65a7ce708f9 100644
--- a/extensions/qa-lab/package.json
+++ b/extensions/qa-lab/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/qa-lab",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw QA lab plugin with private debugger UI and scenario runner",
"type": "module",
@@ -13,7 +13,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -30,7 +30,7 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
}
}
}
diff --git a/extensions/qa-matrix/package.json b/extensions/qa-matrix/package.json
index b1dc8048202..098e5771453 100644
--- a/extensions/qa-matrix/package.json
+++ b/extensions/qa-matrix/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/qa-matrix",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Matrix QA runner plugin",
"type": "module",
@@ -10,7 +10,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -22,7 +22,7 @@
"./index.ts"
],
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
}
}
}
diff --git a/extensions/qianfan/package.json b/extensions/qianfan/package.json
index fd5291a68c8..81f18adcd7e 100644
--- a/extensions/qianfan/package.json
+++ b/extensions/qianfan/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/qianfan-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Qianfan provider plugin",
"type": "module",
diff --git a/extensions/qqbot/package.json b/extensions/qqbot/package.json
index 8c6093d2d35..4fa8d614671 100644
--- a/extensions/qqbot/package.json
+++ b/extensions/qqbot/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/qqbot",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": false,
"description": "OpenClaw QQ Bot channel plugin",
"type": "module",
@@ -15,7 +15,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -44,10 +44,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"bundle": {
"stageRuntimeDependencies": true
diff --git a/extensions/qwen/package.json b/extensions/qwen/package.json
index 6205972e5d1..435ef3f9305 100644
--- a/extensions/qwen/package.json
+++ b/extensions/qwen/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/qwen-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Qwen Cloud provider plugin",
"type": "module",
diff --git a/extensions/runway/package.json b/extensions/runway/package.json
index 959cc0b0350..a67737831bc 100644
--- a/extensions/runway/package.json
+++ b/extensions/runway/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/runway-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Runway video provider plugin",
"type": "module",
diff --git a/extensions/searxng/package.json b/extensions/searxng/package.json
index 4927c044edd..e42aa1be883 100644
--- a/extensions/searxng/package.json
+++ b/extensions/searxng/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/searxng-plugin",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw SearXNG plugin",
"type": "module",
diff --git a/extensions/sglang/package.json b/extensions/sglang/package.json
index bd70badefa5..e881173cca4 100644
--- a/extensions/sglang/package.json
+++ b/extensions/sglang/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/sglang-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw SGLang provider plugin",
"type": "module",
diff --git a/extensions/signal/package.json b/extensions/signal/package.json
index f9f8dd2a856..3d3cce0f756 100644
--- a/extensions/signal/package.json
+++ b/extensions/signal/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/signal",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Signal channel plugin",
"type": "module",
diff --git a/extensions/slack/package.json b/extensions/slack/package.json
index 8bacfe530b6..6a0b9919578 100644
--- a/extensions/slack/package.json
+++ b/extensions/slack/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/slack",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Slack channel plugin",
"type": "module",
diff --git a/extensions/speech-core/package.json b/extensions/speech-core/package.json
index 561c744e4ae..7d2cc05f1cd 100644
--- a/extensions/speech-core/package.json
+++ b/extensions/speech-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/speech-core",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw speech runtime package",
"type": "module",
diff --git a/extensions/stepfun/package.json b/extensions/stepfun/package.json
index cfd3a4da4a2..12e44110a9f 100644
--- a/extensions/stepfun/package.json
+++ b/extensions/stepfun/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/stepfun-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw StepFun provider plugin",
"type": "module",
diff --git a/extensions/synology-chat/package.json b/extensions/synology-chat/package.json
index 32708002ca9..1f0d678df22 100644
--- a/extensions/synology-chat/package.json
+++ b/extensions/synology-chat/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/synology-chat",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "Synology Chat channel plugin for OpenClaw",
"type": "module",
"devDependencies": {
diff --git a/extensions/synthetic/package.json b/extensions/synthetic/package.json
index 750f34d9ed0..e12d20949a6 100644
--- a/extensions/synthetic/package.json
+++ b/extensions/synthetic/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/synthetic-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Synthetic provider plugin",
"type": "module",
diff --git a/extensions/tavily/package.json b/extensions/tavily/package.json
index 3e3d77a9d51..55dbae0b459 100644
--- a/extensions/tavily/package.json
+++ b/extensions/tavily/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/tavily-plugin",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Tavily plugin",
"type": "module",
diff --git a/extensions/telegram/package.json b/extensions/telegram/package.json
index e9f8765ee2a..3fbd3fb0636 100644
--- a/extensions/telegram/package.json
+++ b/extensions/telegram/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/telegram",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Telegram channel plugin",
"type": "module",
diff --git a/extensions/tlon/package.json b/extensions/tlon/package.json
index 822d39c049c..cad08ba5d62 100644
--- a/extensions/tlon/package.json
+++ b/extensions/tlon/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/tlon",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw Tlon/Urbit channel plugin",
"type": "module",
"dependencies": {
@@ -14,7 +14,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
diff --git a/extensions/together/package.json b/extensions/together/package.json
index 5fbf8533338..cdf12945486 100644
--- a/extensions/together/package.json
+++ b/extensions/together/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/together-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Together provider plugin",
"type": "module",
diff --git a/extensions/twitch/package.json b/extensions/twitch/package.json
index 7affa2c58a5..bc2259c0460 100644
--- a/extensions/twitch/package.json
+++ b/extensions/twitch/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/twitch",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw Twitch channel plugin",
"type": "module",
"dependencies": {
diff --git a/extensions/venice/package.json b/extensions/venice/package.json
index 9432b0364a3..6c6d346c072 100644
--- a/extensions/venice/package.json
+++ b/extensions/venice/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/venice-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Venice provider plugin",
"type": "module",
diff --git a/extensions/vercel-ai-gateway/package.json b/extensions/vercel-ai-gateway/package.json
index 5af68108d60..856f6c2af65 100644
--- a/extensions/vercel-ai-gateway/package.json
+++ b/extensions/vercel-ai-gateway/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/vercel-ai-gateway-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Vercel AI Gateway provider plugin",
"type": "module",
diff --git a/extensions/video-generation-core/package.json b/extensions/video-generation-core/package.json
index efcc059c51f..e4e47c21b7d 100644
--- a/extensions/video-generation-core/package.json
+++ b/extensions/video-generation-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/video-generation-core",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw video generation runtime package",
"type": "module",
diff --git a/extensions/vllm/package.json b/extensions/vllm/package.json
index 9f41cbb6b6b..41fb82d3728 100644
--- a/extensions/vllm/package.json
+++ b/extensions/vllm/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/vllm-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw vLLM provider plugin",
"type": "module",
diff --git a/extensions/voice-call/package.json b/extensions/voice-call/package.json
index 4630096e9c0..75434671084 100644
--- a/extensions/voice-call/package.json
+++ b/extensions/voice-call/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/voice-call",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw voice-call plugin",
"type": "module",
"dependencies": {
@@ -13,7 +13,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -28,10 +28,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/volcengine/package.json b/extensions/volcengine/package.json
index c6094dbf5b8..040bd02580b 100644
--- a/extensions/volcengine/package.json
+++ b/extensions/volcengine/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/volcengine-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Volcengine provider plugin",
"type": "module",
diff --git a/extensions/voyage/package.json b/extensions/voyage/package.json
index 52bb99a71b7..142590bdb6e 100644
--- a/extensions/voyage/package.json
+++ b/extensions/voyage/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/voyage-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Voyage embedding provider plugin",
"type": "module",
diff --git a/extensions/vydra/package.json b/extensions/vydra/package.json
index cfbea9d6752..f3bfd05e549 100644
--- a/extensions/vydra/package.json
+++ b/extensions/vydra/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/vydra-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Vydra media provider plugin",
"type": "module",
diff --git a/extensions/webhooks/package.json b/extensions/webhooks/package.json
index 785d605f1bd..3d21b93b745 100644
--- a/extensions/webhooks/package.json
+++ b/extensions/webhooks/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/webhooks",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw webhook bridge plugin",
"type": "module",
diff --git a/extensions/whatsapp/package.json b/extensions/whatsapp/package.json
index 1a54649bc46..876605bf410 100644
--- a/extensions/whatsapp/package.json
+++ b/extensions/whatsapp/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/whatsapp",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw WhatsApp channel plugin",
"type": "module",
"dependencies": {
@@ -13,7 +13,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -49,13 +49,13 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"bundle": {
"stageRuntimeDependencies": true
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/xai/package.json b/extensions/xai/package.json
index 815bdba82dc..299b67d1c59 100644
--- a/extensions/xai/package.json
+++ b/extensions/xai/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/xai-plugin",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw xAI plugin",
"type": "module",
diff --git a/extensions/xiaomi/package.json b/extensions/xiaomi/package.json
index 3919e2a7ba5..04f35469beb 100644
--- a/extensions/xiaomi/package.json
+++ b/extensions/xiaomi/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/xiaomi-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Xiaomi provider plugin",
"type": "module",
diff --git a/extensions/zai/package.json b/extensions/zai/package.json
index ce907e86e8a..57d4052b90d 100644
--- a/extensions/zai/package.json
+++ b/extensions/zai/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/zai-provider",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"private": true,
"description": "OpenClaw Z.AI provider plugin",
"type": "module",
diff --git a/extensions/zalo/package.json b/extensions/zalo/package.json
index 67be195fcf4..3c92dc587ea 100644
--- a/extensions/zalo/package.json
+++ b/extensions/zalo/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/zalo",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw Zalo channel plugin",
"type": "module",
"dependencies": {
@@ -11,7 +11,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -42,10 +42,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/zalouser/package.json b/extensions/zalouser/package.json
index 91f1cab6c48..dee50e2d8b4 100644
--- a/extensions/zalouser/package.json
+++ b/extensions/zalouser/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/zalouser",
- "version": "2026.4.19-beta.1",
+ "version": "2026.4.20",
"description": "OpenClaw Zalo Personal Account plugin via native zca-js integration",
"type": "module",
"dependencies": {
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.19-beta.1"
+ "openclaw": ">=2026.4.20"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -43,10 +43,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
- "pluginApi": ">=2026.4.19-beta.1"
+ "pluginApi": ">=2026.4.20"
},
"build": {
- "openclawVersion": "2026.4.19-beta.1"
+ "openclawVersion": "2026.4.20"
},
"release": {
"publishToClawHub": true,
diff --git a/package.json b/package.json
index c2bfe797091..b7fc309f300 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "openclaw",
- "version": "2026.4.19-beta.2",
+ "version": "2026.4.20",
"description": "Multi-channel AI gateway with extensible messaging integrations",
"keywords": [],
"homepage": "https://github.com/openclaw/openclaw#readme",
diff --git a/src/config/schema.base.generated.ts b/src/config/schema.base.generated.ts
index fe89ba1a930..a0cf9dfbac6 100644
--- a/src/config/schema.base.generated.ts
+++ b/src/config/schema.base.generated.ts
@@ -27471,6 +27471,6 @@ export const GENERATED_BASE_CONFIG_SCHEMA: BaseConfigSchemaResponse = {
tags: ["advanced", "url-secret"],
},
},
- version: "2026.4.19-beta.2",
+ version: "2026.4.20",
generatedAt: "2026-03-22T21:17:33.302Z",
};