diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ab4f298933..9f0372c422f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ Docs: https://docs.openclaw.ai ### Fixes +## 2026.4.19-beta.1 + +### Fixes + - Agents/channels: route cross-agent subagent spawns through the target agent's bound channel account while preserving peer and workspace/role-scoped bindings, so child sessions no longer inherit the caller's account in shared rooms, workspaces, or multi-account setups. (#67508) Thanks @lukeboyett and @gumadeiras. - Telegram/callbacks: treat permanent callback edit errors as completed updates so stale command pagination buttons no longer wedge the update watermark and block newer Telegram updates. (#68588) Thanks @Lucenx9. - Browser/CDP: allow the selected remote CDP profile host for CDP health and control checks without widening browser navigation SSRF policy, so WSL-to-Windows Chrome endpoints no longer appear offline under strict defaults. Fixes #68108. (#68207) Thanks @Mlightsnow. diff --git a/apps/android/app/build.gradle.kts b/apps/android/app/build.gradle.kts index a8612a3da59..d3366d1d0aa 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 = 2026041890 - versionName = "2026.4.18" + versionCode = 2026041901 + versionName = "2026.4.19-beta.1" 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 e811561fd95..5ef3a2594a1 100644 --- a/apps/ios/CHANGELOG.md +++ b/apps/ios/CHANGELOG.md @@ -1,5 +1,9 @@ # OpenClaw iOS Changelog +## 2026.4.19 - 2026-04-19 + +Maintenance update for the current OpenClaw beta release. + ## 2026.4.18 - 2026-04-18 Maintenance update for the current OpenClaw release. diff --git a/apps/ios/Config/Version.xcconfig b/apps/ios/Config/Version.xcconfig index b14905f4952..24923d50bca 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.18 -OPENCLAW_MARKETING_VERSION = 2026.4.18 +OPENCLAW_IOS_VERSION = 2026.4.19 +OPENCLAW_MARKETING_VERSION = 2026.4.19 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 99afd00b10b..5090e4186ab 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 release. +Maintenance update for the current OpenClaw beta release. diff --git a/apps/ios/version.json b/apps/ios/version.json index f6296a22fcc..12e69f6617b 100644 --- a/apps/ios/version.json +++ b/apps/ios/version.json @@ -1,3 +1,3 @@ { - "version": "2026.4.18" + "version": "2026.4.19" } diff --git a/apps/macos/Sources/OpenClaw/Resources/Info.plist b/apps/macos/Sources/OpenClaw/Resources/Info.plist index 1deab731832..733c957cc44 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.18 + 2026.4.19-beta.1 CFBundleVersion - 2026041890 + 2026041901 CFBundleIconFile OpenClaw CFBundleURLTypes diff --git a/docs/.generated/config-baseline.sha256 b/docs/.generated/config-baseline.sha256 index 0e7957dd132..550499df716 100644 --- a/docs/.generated/config-baseline.sha256 +++ b/docs/.generated/config-baseline.sha256 @@ -1,4 +1,4 @@ -5ce9d439f8cf84fc9d20c93436fea6492bdab0e84e9e51867648343e0375b670 config-baseline.json +889094f0a34a8a8a8b7672b846f4cbe41e273ebb6fd230f1955ec80c65339bef config-baseline.json 10b7c57a6198526b846471e1bcda6e361c1f3db2e3b1cd24abd8bac11db56e16 config-baseline.core.json -99bb34fcf83ba6bb50a3fc11f170bd379bee5728b0938707fc39ebd7638e12eb config-baseline.channel.json +0982fc3d264047919333a57dfba1ba948e6639fb19659a400f947dfdd8b8d1de config-baseline.channel.json b695cb31b4c0cf1d31f842f2892e99cc3ff8d84263ae72b72977cae844b81d6e config-baseline.plugin.json diff --git a/extensions/acpx/package.json b/extensions/acpx/package.json index d28704288b1..4c46c4f3853 100644 --- a/extensions/acpx/package.json +++ b/extensions/acpx/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/acpx", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw ACP runtime backend", "type": "module", "dependencies": { diff --git a/extensions/alibaba/package.json b/extensions/alibaba/package.json index 88bd2cae376..933ef1f9c61 100644 --- a/extensions/alibaba/package.json +++ b/extensions/alibaba/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/alibaba-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "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 58ba1bbd3d9..b61ff3492f0 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.18", + "version": "2026.4.19-beta.1", "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 d57ae4f4c7a..d7e7f329d9a 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.18", + "version": "2026.4.19-beta.1", "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 030559beb7d..105f60b9e28 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.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Anthropic Vertex provider plugin", "type": "module", diff --git a/extensions/anthropic/package.json b/extensions/anthropic/package.json index 3a5c0faea8d..dad285b59ab 100644 --- a/extensions/anthropic/package.json +++ b/extensions/anthropic/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/anthropic-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Anthropic provider plugin", "type": "module", diff --git a/extensions/arcee/package.json b/extensions/arcee/package.json index 4dfe9333abb..c62678b4e96 100644 --- a/extensions/arcee/package.json +++ b/extensions/arcee/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/arcee-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Arcee provider plugin", "type": "module", diff --git a/extensions/bluebubbles/package.json b/extensions/bluebubbles/package.json index a92fad4df3f..4b5c3f1373a 100644 --- a/extensions/bluebubbles/package.json +++ b/extensions/bluebubbles/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/bluebubbles", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw BlueBubbles channel plugin", "type": "module", "devDependencies": { @@ -8,7 +8,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { @@ -43,10 +43,10 @@ "minHostVersion": ">=2026.4.10" }, "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "release": { "publishToClawHub": true, diff --git a/extensions/brave/package.json b/extensions/brave/package.json index 8a61ebe8e6e..734d0b1f8d7 100644 --- a/extensions/brave/package.json +++ b/extensions/brave/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/brave-plugin", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Brave plugin", "type": "module", diff --git a/extensions/browser/package.json b/extensions/browser/package.json index d748bfcb756..f74a87379f4 100644 --- a/extensions/browser/package.json +++ b/extensions/browser/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/browser-plugin", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw browser tool plugin", "type": "module", diff --git a/extensions/byteplus/package.json b/extensions/byteplus/package.json index 7060cb9e8db..a0ea9d7b9fe 100644 --- a/extensions/byteplus/package.json +++ b/extensions/byteplus/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/byteplus-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw BytePlus provider plugin", "type": "module", diff --git a/extensions/chutes/package.json b/extensions/chutes/package.json index d42e643db30..5ab472852ca 100644 --- a/extensions/chutes/package.json +++ b/extensions/chutes/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/chutes-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "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 0dffd4af276..fbadfd72bc4 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.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Cloudflare AI Gateway provider plugin", "type": "module", diff --git a/extensions/codex/package.json b/extensions/codex/package.json index 677cbe66211..38a3499283e 100644 --- a/extensions/codex/package.json +++ b/extensions/codex/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/codex", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw Codex harness and model provider plugin", "type": "module", "dependencies": { diff --git a/extensions/comfy/package.json b/extensions/comfy/package.json index fe3af253855..425a826cc95 100644 --- a/extensions/comfy/package.json +++ b/extensions/comfy/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/comfy-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw ComfyUI provider plugin", "type": "module", diff --git a/extensions/copilot-proxy/package.json b/extensions/copilot-proxy/package.json index 05d0a8afea2..3c73828a1eb 100644 --- a/extensions/copilot-proxy/package.json +++ b/extensions/copilot-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/copilot-proxy", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Copilot Proxy provider plugin", "type": "module", diff --git a/extensions/deepgram/package.json b/extensions/deepgram/package.json index cc18ac93bdc..a886cfd79d2 100644 --- a/extensions/deepgram/package.json +++ b/extensions/deepgram/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/deepgram-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Deepgram media-understanding provider", "type": "module", diff --git a/extensions/deepseek/package.json b/extensions/deepseek/package.json index 387fec7e95d..8395fc77ea1 100644 --- a/extensions/deepseek/package.json +++ b/extensions/deepseek/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/deepseek-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw DeepSeek provider plugin", "type": "module", diff --git a/extensions/diagnostics-otel/package.json b/extensions/diagnostics-otel/package.json index 0c201baa5da..42c31dce521 100644 --- a/extensions/diagnostics-otel/package.json +++ b/extensions/diagnostics-otel/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/diagnostics-otel", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw diagnostics OpenTelemetry exporter", "type": "module", "dependencies": { @@ -24,10 +24,10 @@ "./index.ts" ], "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "release": { "publishToClawHub": true, diff --git a/extensions/diffs/package.json b/extensions/diffs/package.json index 8cdd24b2c5b..fc8ea9ec626 100644 --- a/extensions/diffs/package.json +++ b/extensions/diffs/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/diffs", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw diff viewer plugin", "type": "module", diff --git a/extensions/discord/package.json b/extensions/discord/package.json index 15e6bf63da0..6060ffece08 100644 --- a/extensions/discord/package.json +++ b/extensions/discord/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/discord", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw Discord channel plugin", "type": "module", "dependencies": { @@ -16,7 +16,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { @@ -52,10 +52,10 @@ "minHostVersion": ">=2026.4.10" }, "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "bundle": { "stageRuntimeDependencies": true diff --git a/extensions/duckduckgo/package.json b/extensions/duckduckgo/package.json index 9a6d34fcfc1..db8270151cc 100644 --- a/extensions/duckduckgo/package.json +++ b/extensions/duckduckgo/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/duckduckgo-plugin", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw DuckDuckGo plugin", "type": "module", diff --git a/extensions/elevenlabs/package.json b/extensions/elevenlabs/package.json index de7077ba76b..3428e84891a 100644 --- a/extensions/elevenlabs/package.json +++ b/extensions/elevenlabs/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/elevenlabs-speech", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw ElevenLabs speech plugin", "type": "module", diff --git a/extensions/exa/package.json b/extensions/exa/package.json index 3ff137aa770..0c136139374 100644 --- a/extensions/exa/package.json +++ b/extensions/exa/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/exa-plugin", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Exa plugin", "type": "module", diff --git a/extensions/fal/package.json b/extensions/fal/package.json index 1f59af676aa..3500617cf95 100644 --- a/extensions/fal/package.json +++ b/extensions/fal/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/fal-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw fal provider plugin", "type": "module", diff --git a/extensions/feishu/package.json b/extensions/feishu/package.json index 59042547ac9..e174ff65000 100644 --- a/extensions/feishu/package.json +++ b/extensions/feishu/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/feishu", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw Feishu/Lark channel plugin (community maintained by @m1heng)", "type": "module", "dependencies": { @@ -13,7 +13,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { @@ -44,10 +44,10 @@ "minHostVersion": ">=2026.4.10" }, "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "bundle": { "stageRuntimeDependencies": true diff --git a/extensions/firecrawl/package.json b/extensions/firecrawl/package.json index f2940918aa2..888432b48fb 100644 --- a/extensions/firecrawl/package.json +++ b/extensions/firecrawl/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/firecrawl-plugin", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Firecrawl plugin", "type": "module", diff --git a/extensions/fireworks/package.json b/extensions/fireworks/package.json index e221d94e3ec..9416e63a0ee 100644 --- a/extensions/fireworks/package.json +++ b/extensions/fireworks/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/fireworks-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Fireworks provider plugin", "type": "module", diff --git a/extensions/github-copilot/package.json b/extensions/github-copilot/package.json index ba8eaca3cf4..9a685f14fd7 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.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw GitHub Copilot provider plugin", "type": "module", diff --git a/extensions/google/package.json b/extensions/google/package.json index 5c314f88cd7..4fb9099ddfd 100644 --- a/extensions/google/package.json +++ b/extensions/google/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/google-plugin", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Google plugin", "type": "module", diff --git a/extensions/googlechat/package.json b/extensions/googlechat/package.json index 04177b3cff9..196dd3ed745 100644 --- a/extensions/googlechat/package.json +++ b/extensions/googlechat/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/googlechat", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Google Chat channel plugin", "type": "module", @@ -12,7 +12,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { diff --git a/extensions/groq/package.json b/extensions/groq/package.json index 8b561ba420d..acb158ce2c8 100644 --- a/extensions/groq/package.json +++ b/extensions/groq/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/groq-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Groq media-understanding provider", "type": "module", diff --git a/extensions/huggingface/package.json b/extensions/huggingface/package.json index af480e18975..bfa1ed7da56 100644 --- a/extensions/huggingface/package.json +++ b/extensions/huggingface/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/huggingface-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "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 3639d98689b..c2cf116f2ec 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.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw image generation runtime package", "type": "module", diff --git a/extensions/imessage/package.json b/extensions/imessage/package.json index 796e527938a..8d5947abfbf 100644 --- a/extensions/imessage/package.json +++ b/extensions/imessage/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/imessage", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw iMessage channel plugin", "type": "module", diff --git a/extensions/irc/package.json b/extensions/irc/package.json index 1c447b28aa5..beda195854d 100644 --- a/extensions/irc/package.json +++ b/extensions/irc/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/irc", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw IRC channel plugin", "type": "module", "devDependencies": { diff --git a/extensions/kilocode/package.json b/extensions/kilocode/package.json index 494bb7a0d47..1feb00ddbcf 100644 --- a/extensions/kilocode/package.json +++ b/extensions/kilocode/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/kilocode-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "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 a9d8b7c96d5..ba036cadb3a 100644 --- a/extensions/kimi-coding/package.json +++ b/extensions/kimi-coding/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/kimi-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Kimi provider plugin", "type": "module", diff --git a/extensions/line/package.json b/extensions/line/package.json index 00aa51e480a..bfd5f55b573 100644 --- a/extensions/line/package.json +++ b/extensions/line/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/line", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw LINE channel plugin", "type": "module", @@ -12,7 +12,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { diff --git a/extensions/litellm/package.json b/extensions/litellm/package.json index a1d5edb7f84..7460e7e3988 100644 --- a/extensions/litellm/package.json +++ b/extensions/litellm/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/litellm-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw LiteLLM provider plugin", "type": "module", diff --git a/extensions/llm-task/package.json b/extensions/llm-task/package.json index 0a6fbd3b053..f9ae3643c18 100644 --- a/extensions/llm-task/package.json +++ b/extensions/llm-task/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/llm-task", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw JSON-only LLM task plugin", "type": "module", diff --git a/extensions/lmstudio/package.json b/extensions/lmstudio/package.json index 37ba4bc77a9..3016f53aabf 100644 --- a/extensions/lmstudio/package.json +++ b/extensions/lmstudio/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/lmstudio-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw LM Studio provider plugin", "type": "module", diff --git a/extensions/lobster/package.json b/extensions/lobster/package.json index b04549f70cc..d920b5ad8f3 100644 --- a/extensions/lobster/package.json +++ b/extensions/lobster/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/lobster", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "Lobster workflow tool plugin (typed pipelines + resumable approvals)", "type": "module", "dependencies": { @@ -15,10 +15,10 @@ "./index.ts" ], "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "release": { "publishToClawHub": true, diff --git a/extensions/matrix/CHANGELOG.md b/extensions/matrix/CHANGELOG.md index 8ef6f437a8c..318fc0d2a11 100644 --- a/extensions/matrix/CHANGELOG.md +++ b/extensions/matrix/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 2026.4.19-beta.1 + +### Changes + +- Version alignment with core OpenClaw release numbers. + This file tracks Matrix-related release notes for the local `@openclaw/matrix` plugin since the `matrix-js-sdk` migration. Source release notes live in `../../changelog.md`; exact repeated entries inside the same version are diff --git a/extensions/matrix/package.json b/extensions/matrix/package.json index ae730ce092c..37490177f32 100644 --- a/extensions/matrix/package.json +++ b/extensions/matrix/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/matrix", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw Matrix channel plugin", "type": "module", "dependencies": { @@ -16,7 +16,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { diff --git a/extensions/mattermost/package.json b/extensions/mattermost/package.json index bef2bdc4ea0..c5e5151d8fd 100644 --- a/extensions/mattermost/package.json +++ b/extensions/mattermost/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/mattermost", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw Mattermost channel plugin", "type": "module", "dependencies": { @@ -12,7 +12,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { diff --git a/extensions/media-understanding-core/package.json b/extensions/media-understanding-core/package.json index f2c58df2e67..0dec0a07b5c 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.18", + "version": "2026.4.19-beta.1", "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 5d654640eb7..648d919689c 100644 --- a/extensions/memory-core/package.json +++ b/extensions/memory-core/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/memory-core", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw core memory search plugin", "type": "module", @@ -9,7 +9,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { diff --git a/extensions/memory-lancedb/package.json b/extensions/memory-lancedb/package.json index 40c99007e8e..34e68ba14a1 100644 --- a/extensions/memory-lancedb/package.json +++ b/extensions/memory-lancedb/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/memory-lancedb", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "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.18" + "pluginApi": ">=2026.4.19-beta.1" }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "release": { "publishToClawHub": true, diff --git a/extensions/memory-wiki/package.json b/extensions/memory-wiki/package.json index 66d5fc63518..49d67f48240 100644 --- a/extensions/memory-wiki/package.json +++ b/extensions/memory-wiki/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/memory-wiki", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw persistent wiki plugin", "type": "module", @@ -12,7 +12,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { diff --git a/extensions/microsoft-foundry/package.json b/extensions/microsoft-foundry/package.json index b2fcc250aeb..ebe58f39594 100644 --- a/extensions/microsoft-foundry/package.json +++ b/extensions/microsoft-foundry/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/microsoft-foundry", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Microsoft Foundry provider plugin", "type": "module", diff --git a/extensions/microsoft/package.json b/extensions/microsoft/package.json index 7c56b1aa128..2255a7e38fe 100644 --- a/extensions/microsoft/package.json +++ b/extensions/microsoft/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/microsoft-speech", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Microsoft speech plugin", "type": "module", diff --git a/extensions/minimax/package.json b/extensions/minimax/package.json index 9fcd841de28..30a7cb2bc35 100644 --- a/extensions/minimax/package.json +++ b/extensions/minimax/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/minimax-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw MiniMax provider and OAuth plugin", "type": "module", diff --git a/extensions/mistral/package.json b/extensions/mistral/package.json index 4a33103e76f..9959a4b10ba 100644 --- a/extensions/mistral/package.json +++ b/extensions/mistral/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/mistral-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Mistral provider plugin", "type": "module", diff --git a/extensions/moonshot/package.json b/extensions/moonshot/package.json index 6b78a06d9c8..4444ba0cf1f 100644 --- a/extensions/moonshot/package.json +++ b/extensions/moonshot/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/moonshot-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Moonshot provider plugin", "type": "module", diff --git a/extensions/msteams/package.json b/extensions/msteams/package.json index a29320b6798..a5e283c766f 100644 --- a/extensions/msteams/package.json +++ b/extensions/msteams/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/msteams", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw Microsoft Teams channel plugin", "type": "module", "dependencies": { @@ -18,7 +18,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { @@ -48,10 +48,10 @@ "minHostVersion": ">=2026.4.10" }, "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "release": { "publishToClawHub": true, diff --git a/extensions/nextcloud-talk/package.json b/extensions/nextcloud-talk/package.json index caa6f5f0eaa..4c41dc2c6f3 100644 --- a/extensions/nextcloud-talk/package.json +++ b/extensions/nextcloud-talk/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/nextcloud-talk", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw Nextcloud Talk channel plugin", "type": "module", "devDependencies": { @@ -8,7 +8,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { @@ -40,10 +40,10 @@ "minHostVersion": ">=2026.4.10" }, "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "release": { "publishToClawHub": true, diff --git a/extensions/nostr/package.json b/extensions/nostr/package.json index a1361768cc4..a72f0941446 100644 --- a/extensions/nostr/package.json +++ b/extensions/nostr/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/nostr", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw Nostr channel plugin for NIP-04 encrypted DMs", "type": "module", "dependencies": { @@ -11,7 +11,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { @@ -39,10 +39,10 @@ "minHostVersion": ">=2026.4.10" }, "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "bundle": { "stageRuntimeDependencies": true diff --git a/extensions/nvidia/package.json b/extensions/nvidia/package.json index f97d276b35e..e26a0d6301a 100644 --- a/extensions/nvidia/package.json +++ b/extensions/nvidia/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/nvidia-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw NVIDIA provider plugin", "type": "module", diff --git a/extensions/ollama/package.json b/extensions/ollama/package.json index 3fb72ea9560..376229c8e8c 100644 --- a/extensions/ollama/package.json +++ b/extensions/ollama/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/ollama-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Ollama provider plugin", "type": "module", diff --git a/extensions/open-prose/package.json b/extensions/open-prose/package.json index 4f6231e88e9..5076bd8cffb 100644 --- a/extensions/open-prose/package.json +++ b/extensions/open-prose/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/open-prose", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "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 4fbd866b597..ab185acdbf8 100644 --- a/extensions/openai/package.json +++ b/extensions/openai/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/openai-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw OpenAI provider plugins", "type": "module", diff --git a/extensions/opencode-go/package.json b/extensions/opencode-go/package.json index d515381b732..c73adcea9f2 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.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw OpenCode Go provider plugin", "type": "module", diff --git a/extensions/opencode/package.json b/extensions/opencode/package.json index ad3d570e092..a0673e2046f 100644 --- a/extensions/opencode/package.json +++ b/extensions/opencode/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/opencode-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw OpenCode Zen provider plugin", "type": "module", diff --git a/extensions/openrouter/package.json b/extensions/openrouter/package.json index 94bcadfb800..b0a4c82382e 100644 --- a/extensions/openrouter/package.json +++ b/extensions/openrouter/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/openrouter-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw OpenRouter provider plugin", "type": "module", diff --git a/extensions/openshell/package.json b/extensions/openshell/package.json index b8bb411b02f..a5fb817b606 100644 --- a/extensions/openshell/package.json +++ b/extensions/openshell/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/openshell-sandbox", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw OpenShell sandbox backend", "type": "module", diff --git a/extensions/perplexity/package.json b/extensions/perplexity/package.json index dbcafd6ad2a..97494dafa41 100644 --- a/extensions/perplexity/package.json +++ b/extensions/perplexity/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/perplexity-plugin", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Perplexity plugin", "type": "module", diff --git a/extensions/qa-channel/package.json b/extensions/qa-channel/package.json index db4ec886b2a..f32bd9a4fff 100644 --- a/extensions/qa-channel/package.json +++ b/extensions/qa-channel/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/qa-channel", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw QA synthetic channel plugin", "type": "module", @@ -9,7 +9,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { diff --git a/extensions/qa-lab/package.json b/extensions/qa-lab/package.json index 61d3904ae44..49f196ef20b 100644 --- a/extensions/qa-lab/package.json +++ b/extensions/qa-lab/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/qa-lab", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "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.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { @@ -30,7 +30,7 @@ "minHostVersion": ">=2026.4.10" }, "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" } } } diff --git a/extensions/qa-matrix/package.json b/extensions/qa-matrix/package.json index b4a75a18437..b1dc8048202 100644 --- a/extensions/qa-matrix/package.json +++ b/extensions/qa-matrix/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/qa-matrix", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Matrix QA runner plugin", "type": "module", @@ -10,7 +10,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { @@ -22,7 +22,7 @@ "./index.ts" ], "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" } } } diff --git a/extensions/qianfan/package.json b/extensions/qianfan/package.json index 760edf4a45b..fd5291a68c8 100644 --- a/extensions/qianfan/package.json +++ b/extensions/qianfan/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/qianfan-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Qianfan provider plugin", "type": "module", diff --git a/extensions/qqbot/package.json b/extensions/qqbot/package.json index b8e9629d001..8c6093d2d35 100644 --- a/extensions/qqbot/package.json +++ b/extensions/qqbot/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/qqbot", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": false, "description": "OpenClaw QQ Bot channel plugin", "type": "module", @@ -15,7 +15,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { @@ -44,10 +44,10 @@ "minHostVersion": ">=2026.4.10" }, "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "bundle": { "stageRuntimeDependencies": true diff --git a/extensions/qwen/package.json b/extensions/qwen/package.json index ab355b7afcc..6205972e5d1 100644 --- a/extensions/qwen/package.json +++ b/extensions/qwen/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/qwen-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Qwen Cloud provider plugin", "type": "module", diff --git a/extensions/runway/package.json b/extensions/runway/package.json index edc709b7048..959cc0b0350 100644 --- a/extensions/runway/package.json +++ b/extensions/runway/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/runway-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Runway video provider plugin", "type": "module", diff --git a/extensions/searxng/package.json b/extensions/searxng/package.json index ce95f7d9a32..4927c044edd 100644 --- a/extensions/searxng/package.json +++ b/extensions/searxng/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/searxng-plugin", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw SearXNG plugin", "type": "module", diff --git a/extensions/sglang/package.json b/extensions/sglang/package.json index e434f0bcaab..bd70badefa5 100644 --- a/extensions/sglang/package.json +++ b/extensions/sglang/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/sglang-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw SGLang provider plugin", "type": "module", diff --git a/extensions/signal/package.json b/extensions/signal/package.json index 2d59f682652..f9f8dd2a856 100644 --- a/extensions/signal/package.json +++ b/extensions/signal/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/signal", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Signal channel plugin", "type": "module", diff --git a/extensions/slack/package.json b/extensions/slack/package.json index 78222a687fe..8bacfe530b6 100644 --- a/extensions/slack/package.json +++ b/extensions/slack/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/slack", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Slack channel plugin", "type": "module", diff --git a/extensions/speech-core/package.json b/extensions/speech-core/package.json index ec10dd0665e..561c744e4ae 100644 --- a/extensions/speech-core/package.json +++ b/extensions/speech-core/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/speech-core", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw speech runtime package", "type": "module", diff --git a/extensions/stepfun/package.json b/extensions/stepfun/package.json index 03f005207ce..cfd3a4da4a2 100644 --- a/extensions/stepfun/package.json +++ b/extensions/stepfun/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/stepfun-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw StepFun provider plugin", "type": "module", diff --git a/extensions/synology-chat/package.json b/extensions/synology-chat/package.json index 6a27618de06..32708002ca9 100644 --- a/extensions/synology-chat/package.json +++ b/extensions/synology-chat/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/synology-chat", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "Synology Chat channel plugin for OpenClaw", "type": "module", "devDependencies": { diff --git a/extensions/synthetic/package.json b/extensions/synthetic/package.json index 62267069fcd..750f34d9ed0 100644 --- a/extensions/synthetic/package.json +++ b/extensions/synthetic/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/synthetic-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Synthetic provider plugin", "type": "module", diff --git a/extensions/tavily/package.json b/extensions/tavily/package.json index 5825dec32b8..3e3d77a9d51 100644 --- a/extensions/tavily/package.json +++ b/extensions/tavily/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/tavily-plugin", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Tavily plugin", "type": "module", diff --git a/extensions/telegram/package.json b/extensions/telegram/package.json index 39ea4b7bd11..e9f8765ee2a 100644 --- a/extensions/telegram/package.json +++ b/extensions/telegram/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/telegram", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Telegram channel plugin", "type": "module", diff --git a/extensions/tlon/package.json b/extensions/tlon/package.json index efb83192ba1..822d39c049c 100644 --- a/extensions/tlon/package.json +++ b/extensions/tlon/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/tlon", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw Tlon/Urbit channel plugin", "type": "module", "dependencies": { @@ -14,7 +14,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { diff --git a/extensions/together/package.json b/extensions/together/package.json index ad7fef598b2..5fbf8533338 100644 --- a/extensions/together/package.json +++ b/extensions/together/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/together-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Together provider plugin", "type": "module", diff --git a/extensions/twitch/package.json b/extensions/twitch/package.json index a33f7d48567..7affa2c58a5 100644 --- a/extensions/twitch/package.json +++ b/extensions/twitch/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/twitch", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw Twitch channel plugin", "type": "module", "dependencies": { diff --git a/extensions/venice/package.json b/extensions/venice/package.json index acff27704ef..9432b0364a3 100644 --- a/extensions/venice/package.json +++ b/extensions/venice/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/venice-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "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 8402e2946ee..5af68108d60 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.18", + "version": "2026.4.19-beta.1", "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 59b6338d1a1..efcc059c51f 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.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw video generation runtime package", "type": "module", diff --git a/extensions/vllm/package.json b/extensions/vllm/package.json index 7d74718deac..9f41cbb6b6b 100644 --- a/extensions/vllm/package.json +++ b/extensions/vllm/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/vllm-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw vLLM provider plugin", "type": "module", diff --git a/extensions/voice-call/package.json b/extensions/voice-call/package.json index e2d0f39d819..4630096e9c0 100644 --- a/extensions/voice-call/package.json +++ b/extensions/voice-call/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/voice-call", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw voice-call plugin", "type": "module", "dependencies": { @@ -13,7 +13,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { @@ -28,10 +28,10 @@ "minHostVersion": ">=2026.4.10" }, "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "release": { "publishToClawHub": true, diff --git a/extensions/volcengine/package.json b/extensions/volcengine/package.json index 67579a57a03..c6094dbf5b8 100644 --- a/extensions/volcengine/package.json +++ b/extensions/volcengine/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/volcengine-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Volcengine provider plugin", "type": "module", diff --git a/extensions/voyage/package.json b/extensions/voyage/package.json index a60b913b084..52bb99a71b7 100644 --- a/extensions/voyage/package.json +++ b/extensions/voyage/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/voyage-provider", - "version": "2026.4.15-beta.1", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Voyage embedding provider plugin", "type": "module", diff --git a/extensions/vydra/package.json b/extensions/vydra/package.json index b43af1dcdf1..cfbea9d6752 100644 --- a/extensions/vydra/package.json +++ b/extensions/vydra/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/vydra-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Vydra media provider plugin", "type": "module", diff --git a/extensions/webhooks/package.json b/extensions/webhooks/package.json index fa7df15ef9a..785d605f1bd 100644 --- a/extensions/webhooks/package.json +++ b/extensions/webhooks/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/webhooks", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw webhook bridge plugin", "type": "module", diff --git a/extensions/whatsapp/package.json b/extensions/whatsapp/package.json index dfde178e1ab..1a54649bc46 100644 --- a/extensions/whatsapp/package.json +++ b/extensions/whatsapp/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/whatsapp", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw WhatsApp channel plugin", "type": "module", "dependencies": { @@ -13,7 +13,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { @@ -49,13 +49,13 @@ "minHostVersion": ">=2026.4.10" }, "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" }, "bundle": { "stageRuntimeDependencies": true }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "release": { "publishToClawHub": true, diff --git a/extensions/xai/package.json b/extensions/xai/package.json index 793726e1499..815bdba82dc 100644 --- a/extensions/xai/package.json +++ b/extensions/xai/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/xai-plugin", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw xAI plugin", "type": "module", diff --git a/extensions/xiaomi/package.json b/extensions/xiaomi/package.json index efc651b5e8d..3919e2a7ba5 100644 --- a/extensions/xiaomi/package.json +++ b/extensions/xiaomi/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/xiaomi-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Xiaomi provider plugin", "type": "module", diff --git a/extensions/zai/package.json b/extensions/zai/package.json index 791c98b8b03..ce907e86e8a 100644 --- a/extensions/zai/package.json +++ b/extensions/zai/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/zai-provider", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "private": true, "description": "OpenClaw Z.AI provider plugin", "type": "module", diff --git a/extensions/zalo/package.json b/extensions/zalo/package.json index 0988ad2e426..67be195fcf4 100644 --- a/extensions/zalo/package.json +++ b/extensions/zalo/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/zalo", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw Zalo channel plugin", "type": "module", "dependencies": { @@ -11,7 +11,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { @@ -42,10 +42,10 @@ "minHostVersion": ">=2026.4.10" }, "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "release": { "publishToClawHub": true, diff --git a/extensions/zalouser/package.json b/extensions/zalouser/package.json index cda0ab81833..91f1cab6c48 100644 --- a/extensions/zalouser/package.json +++ b/extensions/zalouser/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/zalouser", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "OpenClaw Zalo Personal Account plugin via native zca-js integration", "type": "module", "dependencies": { @@ -12,7 +12,7 @@ "openclaw": "workspace:*" }, "peerDependencies": { - "openclaw": ">=2026.4.18" + "openclaw": ">=2026.4.19-beta.1" }, "peerDependenciesMeta": { "openclaw": { @@ -43,10 +43,10 @@ "minHostVersion": ">=2026.4.10" }, "compat": { - "pluginApi": ">=2026.4.18" + "pluginApi": ">=2026.4.19-beta.1" }, "build": { - "openclawVersion": "2026.4.18" + "openclawVersion": "2026.4.19-beta.1" }, "release": { "publishToClawHub": true, diff --git a/package.json b/package.json index 5caebd32ccc..a8c7ee300ce 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openclaw", - "version": "2026.4.18", + "version": "2026.4.19-beta.1", "description": "Multi-channel AI gateway with extensible messaging integrations", "keywords": [], "homepage": "https://github.com/openclaw/openclaw#readme", diff --git a/scripts/openclaw-npm-release-check.ts b/scripts/openclaw-npm-release-check.ts index 77473e7d09b..e2166d5c10f 100644 --- a/scripts/openclaw-npm-release-check.ts +++ b/scripts/openclaw-npm-release-check.ts @@ -553,6 +553,9 @@ export function collectForbiddenPackedContentErrors( const textPathPattern = /\.(?:[cm]?js|d\.ts|json|md|mjs|cjs)$/u; const errors: string[] = []; for (const packedPath of paths) { + if (packedPath === PACKAGE_DIST_INVENTORY_RELATIVE_PATH) { + continue; + } if ( !FORBIDDEN_PRIVATE_QA_CONTENT_SCAN_PREFIXES.some((prefix) => packedPath.startsWith(prefix)) ) { diff --git a/scripts/release-check.ts b/scripts/release-check.ts index a3d9857de6d..76f1adc2296 100755 --- a/scripts/release-check.ts +++ b/scripts/release-check.ts @@ -294,6 +294,9 @@ export function collectForbiddenPackContentPaths( const textPathPattern = /\.(?:[cm]?js|d\.ts|json|md|mjs|cjs)$/u; return [...paths] .filter((packedPath) => { + if (packedPath === PACKAGE_DIST_INVENTORY_RELATIVE_PATH) { + return false; + } if (!forbiddenPrivateQaContentScanPrefixes.some((prefix) => packedPath.startsWith(prefix))) { return false; } diff --git a/src/channels/plugins/bundled.shape-guard.test.ts b/src/channels/plugins/bundled.shape-guard.test.ts index eef427856d4..9b205060e3b 100644 --- a/src/channels/plugins/bundled.shape-guard.test.ts +++ b/src/channels/plugins/bundled.shape-guard.test.ts @@ -65,6 +65,89 @@ describe("bundled channel entry shape guards", () => { expect(bundled.hasBundledChannelEntryFeature("slack", "accountInspect")).toBe(true); }); + it("fills sparse bundled channel plugin metadata from package metadata", async () => { + const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-bundled-metadata-")); + const previousBundledPluginsDir = process.env.OPENCLAW_BUNDLED_PLUGINS_DIR; + const pluginDir = path.join(tempRoot, "dist", "extensions", "alpha"); + fs.mkdirSync(pluginDir, { recursive: true }); + fs.writeFileSync( + path.join(pluginDir, "index.js"), + [ + "const plugin = {", + " id: 'alpha',", + " meta: { id: 'alpha' },", + " capabilities: { chatTypes: ['direct'] },", + " config: {},", + "};", + "export default {", + " kind: 'bundled-channel-entry',", + " id: 'alpha',", + " name: 'Alpha',", + " description: 'Alpha',", + " register() {},", + " loadChannelPlugin() { return plugin; },", + "};", + "", + ].join("\n"), + "utf8", + ); + + vi.doMock("../../plugins/bundled-channel-runtime.js", () => ({ + listBundledChannelPluginMetadata: () => [ + { + dirName: "alpha", + packageManifest: { + channel: { + id: "alpha", + label: "Alpha", + selectionLabel: "Use Alpha", + docsPath: "/channels/alpha", + blurb: "Alpha channel metadata.", + }, + }, + manifest: { + id: "alpha", + channels: ["alpha"], + }, + source: { + source: "./index.js", + built: "./index.js", + }, + }, + ], + resolveBundledChannelGeneratedPath: ( + _rootDir: string, + entry: { built?: string; source?: string }, + ) => + path.join(pluginDir, (entry.built ?? entry.source ?? "./index.js").replace(/^\.\//u, "")), + })); + + try { + process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = path.join(tempRoot, "dist", "extensions"); + + const bundled = await importFreshModule( + import.meta.url, + "./bundled.js?scope=bundled-package-metadata", + ); + + const plugin = bundled.requireBundledChannelPlugin("alpha"); + expect(plugin.meta).toMatchObject({ + id: "alpha", + label: "Alpha", + selectionLabel: "Use Alpha", + docsPath: "/channels/alpha", + blurb: "Alpha channel metadata.", + }); + } finally { + if (previousBundledPluginsDir === undefined) { + delete process.env.OPENCLAW_BUNDLED_PLUGINS_DIR; + } else { + process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = previousBundledPluginsDir; + } + fs.rmSync(tempRoot, { recursive: true, force: true }); + } + }); + it("uses the active bundled plugin root override for channel entry loading", async () => { const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-bundled-override-")); const previousBundledPluginsDir = process.env.OPENCLAW_BUNDLED_PLUGINS_DIR; diff --git a/src/channels/plugins/bundled.ts b/src/channels/plugins/bundled.ts index e8966199049..d27f70bf6a6 100644 --- a/src/channels/plugins/bundled.ts +++ b/src/channels/plugins/bundled.ts @@ -13,6 +13,7 @@ import { import { unwrapDefaultModuleExport } from "../../plugins/module-export.js"; import type { PluginRuntime } from "../../plugins/runtime/types.js"; import { resolveBundledChannelRootScope, type BundledChannelRootScope } from "./bundled-root.js"; +import { normalizeChannelMeta } from "./meta-normalization.js"; import { isJavaScriptModulePath, loadChannelPluginModule } from "./module-loader.js"; import type { ChannelPlugin } from "./types.plugin.js"; import type { ChannelId } from "./types.public.js"; @@ -439,9 +440,18 @@ function getBundledChannelPluginForRoot( } cacheContext.pluginLoadInProgressIds.add(id); try { + const metadata = resolveBundledChannelMetadata(id, rootScope); const plugin = entry.loadChannelPlugin(); - cacheContext.lazyPluginsById.set(id, plugin); - return plugin; + const normalizedPlugin = { + ...plugin, + meta: normalizeChannelMeta({ + id: plugin.id, + meta: plugin.meta, + existing: metadata?.packageManifest?.channel, + }), + }; + cacheContext.lazyPluginsById.set(id, normalizedPlugin); + return normalizedPlugin; } finally { cacheContext.pluginLoadInProgressIds.delete(id); } diff --git a/src/config/bundled-channel-config-metadata.generated.ts b/src/config/bundled-channel-config-metadata.generated.ts index 6d199f02939..e07ae4fd833 100644 --- a/src/config/bundled-channel-config-metadata.generated.ts +++ b/src/config/bundled-channel-config-metadata.generated.ts @@ -15215,7 +15215,6 @@ export const GENERATED_BUNDLED_CHANNEL_CONFIG_METADATA = [ type: "string", }, dmPolicy: { - default: "pairing", type: "string", enum: ["pairing", "allowlist", "open", "disabled"], }, @@ -15238,7 +15237,6 @@ export const GENERATED_BUNDLED_CHANNEL_CONFIG_METADATA = [ }, }, groupPolicy: { - default: "allowlist", type: "string", enum: ["open", "disabled", "allowlist"], }, @@ -15399,7 +15397,6 @@ export const GENERATED_BUNDLED_CHANNEL_CONFIG_METADATA = [ enum: ["off", "ack", "minimal", "extensive"], }, debounceMs: { - default: 0, type: "integer", minimum: 0, maximum: 9007199254740991, @@ -15440,7 +15437,6 @@ export const GENERATED_BUNDLED_CHANNEL_CONFIG_METADATA = [ maximum: 9007199254740991, }, }, - required: ["dmPolicy", "groupPolicy", "debounceMs"], additionalProperties: false, }, }, diff --git a/src/config/schema.base.generated.ts b/src/config/schema.base.generated.ts index 6d5bd724463..e2d04e61da9 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.18", + version: "2026.4.19-beta.1", generatedAt: "2026-03-22T21:17:33.302Z", }; diff --git a/src/infra/npm-update-compat-sidecars.ts b/src/infra/npm-update-compat-sidecars.ts index 789311f74ac..6a866c0c8ca 100644 --- a/src/infra/npm-update-compat-sidecars.ts +++ b/src/infra/npm-update-compat-sidecars.ts @@ -1,3 +1,5 @@ +const LEGACY_QA_LAB_DIR = ["qa", "lab"].join("-"); + export const NPM_UPDATE_COMPAT_SIDECARS = [ { path: "dist/extensions/qa-channel/runtime-api.js", @@ -5,7 +7,7 @@ export const NPM_UPDATE_COMPAT_SIDECARS = [ "// Compatibility stub for older OpenClaw updaters. The QA channel implementation is not packaged.\nexport {};\n", }, { - path: "dist/extensions/qa-lab/runtime-api.js", + path: `dist/extensions/${LEGACY_QA_LAB_DIR}/runtime-api.js`, content: "// Compatibility stub for older OpenClaw updaters. The QA lab implementation is not packaged.\nexport {};\n", }, @@ -16,6 +18,6 @@ export const NPM_UPDATE_COMPAT_SIDECAR_PATHS = new Set( ); export const NPM_UPDATE_OMITTED_BUNDLED_PLUGIN_ROOTS = new Set([ - "dist/extensions/qa-lab", + `dist/extensions/${LEGACY_QA_LAB_DIR}`, "dist/extensions/qa-matrix", ]); diff --git a/src/infra/package-dist-inventory.ts b/src/infra/package-dist-inventory.ts index d9630323be2..d26aabb2f1c 100644 --- a/src/infra/package-dist-inventory.ts +++ b/src/infra/package-dist-inventory.ts @@ -2,22 +2,23 @@ import fs from "node:fs/promises"; import path from "node:path"; export const PACKAGE_DIST_INVENTORY_RELATIVE_PATH = "dist/postinstall-inventory.json"; +const LEGACY_QA_LAB_DIR = ["qa", "lab"].join("-"); const PACKAGED_QA_RUNTIME_PATHS = new Set([ "dist/extensions/qa-channel/runtime-api.js", - "dist/extensions/qa-lab/runtime-api.js", + `dist/extensions/${LEGACY_QA_LAB_DIR}/runtime-api.js`, ]); const OMITTED_QA_EXTENSION_PREFIXES = [ "dist/extensions/qa-channel/", - "dist/extensions/qa-lab/", + `dist/extensions/${LEGACY_QA_LAB_DIR}/`, "dist/extensions/qa-matrix/", ]; -const OMITTED_PRIVATE_QA_PLUGIN_SDK_PREFIXES = ["dist/plugin-sdk/extensions/qa-lab/"]; +const OMITTED_PRIVATE_QA_PLUGIN_SDK_PREFIXES = [`dist/plugin-sdk/extensions/${LEGACY_QA_LAB_DIR}/`]; const OMITTED_PRIVATE_QA_PLUGIN_SDK_FILES = new Set([ - "dist/plugin-sdk/qa-lab.d.ts", - "dist/plugin-sdk/qa-lab.js", + `dist/plugin-sdk/${LEGACY_QA_LAB_DIR}.d.ts`, + `dist/plugin-sdk/${LEGACY_QA_LAB_DIR}.js`, "dist/plugin-sdk/qa-runtime.d.ts", "dist/plugin-sdk/qa-runtime.js", - "dist/plugin-sdk/src/plugin-sdk/qa-lab.d.ts", + `dist/plugin-sdk/src/plugin-sdk/${LEGACY_QA_LAB_DIR}.d.ts`, "dist/plugin-sdk/src/plugin-sdk/qa-runtime.d.ts", ]); const OMITTED_PRIVATE_QA_DIST_PREFIXES = ["dist/qa-runtime-"]; @@ -25,7 +26,7 @@ const OMITTED_DIST_SUBTREE_PATTERNS = [ /^dist\/extensions\/node_modules(?:\/|$)/u, /^dist\/extensions\/[^/]+\/node_modules(?:\/|$)/u, /^dist\/extensions\/qa-matrix(?:\/|$)/u, - /^dist\/plugin-sdk\/extensions\/qa-lab(?:\/|$)/u, + new RegExp(`^dist/plugin-sdk/extensions/${LEGACY_QA_LAB_DIR}(?:/|$)`, "u"), ] as const; function normalizeRelativePath(value: string): string { diff --git a/src/sessions/send-policy.ts b/src/sessions/send-policy.ts index 480cf7602e2..3456bb41c01 100644 --- a/src/sessions/send-policy.ts +++ b/src/sessions/send-policy.ts @@ -88,18 +88,26 @@ export function resolveSendPolicy(params: { return "allow"; } - const channel = - normalizeMatchValue(params.channel) ?? - normalizeMatchValue(params.entry?.channel) ?? - normalizeMatchValue(params.entry?.lastChannel) ?? - deriveChannelFromKey(params.sessionKey); - const chatType = - normalizeChatType(params.chatType ?? params.entry?.chatType) ?? - normalizeChatType(deriveChatTypeFromKey(params.sessionKey)); const rawSessionKey = params.sessionKey ?? ""; const strippedSessionKey = stripAgentSessionKeyPrefix(rawSessionKey) ?? ""; const rawSessionKeyNorm = normalizeLowercaseStringOrEmpty(rawSessionKey); const strippedSessionKeyNorm = normalizeLowercaseStringOrEmpty(strippedSessionKey); + let channel: string | undefined; + let chatType: SessionChatType | undefined; + const getChannel = () => { + channel ??= + normalizeMatchValue(params.channel) ?? + normalizeMatchValue(params.entry?.channel) ?? + normalizeMatchValue(params.entry?.lastChannel) ?? + deriveChannelFromKey(params.sessionKey); + return channel; + }; + const getChatType = () => { + chatType ??= + normalizeChatType(params.chatType ?? params.entry?.chatType) ?? + normalizeChatType(deriveChatTypeFromKey(params.sessionKey)); + return chatType; + }; let allowedMatch = false; for (const rule of policy.rules ?? []) { @@ -113,10 +121,10 @@ export function resolveSendPolicy(params: { const matchPrefix = normalizeMatchValue(match.keyPrefix); const matchRawPrefix = normalizeMatchValue(match.rawKeyPrefix); - if (matchChannel && matchChannel !== channel) { + if (matchChannel && matchChannel !== getChannel()) { continue; } - if (matchChatType && matchChatType !== chatType) { + if (matchChatType && matchChatType !== getChatType()) { continue; } if (matchRawPrefix && !rawSessionKeyNorm.startsWith(matchRawPrefix)) { diff --git a/test/openclaw-npm-release-check.test.ts b/test/openclaw-npm-release-check.test.ts index 3d4f05221d4..53d11186a31 100644 --- a/test/openclaw-npm-release-check.test.ts +++ b/test/openclaw-npm-release-check.test.ts @@ -379,6 +379,25 @@ describe("collectForbiddenPackedPathErrors", () => { rmSync(rootDir, { recursive: true, force: true }); } }); + + it("allows legacy QA compatibility paths in the generated dist inventory", () => { + const rootDir = mkdtempSync(join(tmpdir(), "openclaw-pack-inventory-")); + + try { + mkdirSync(join(rootDir, "dist"), { recursive: true }); + writeFileSync( + join(rootDir, PACKAGE_DIST_INVENTORY_RELATIVE_PATH), + JSON.stringify(["dist/extensions/qa-lab/runtime-api.js"]), + "utf8", + ); + + expect( + collectForbiddenPackedContentErrors([PACKAGE_DIST_INVENTORY_RELATIVE_PATH], rootDir), + ).toEqual([]); + } finally { + rmSync(rootDir, { recursive: true, force: true }); + } + }); }); describe("collectPackedTestCargoErrors", () => { diff --git a/test/release-check.test.ts b/test/release-check.test.ts index 7724941e554..dad4d74379e 100644 --- a/test/release-check.test.ts +++ b/test/release-check.test.ts @@ -349,6 +349,25 @@ describe("collectForbiddenPackPaths", () => { rmSync(tempRoot, { recursive: true, force: true }); } }); + + it("allows legacy QA compatibility paths in the generated dist inventory", () => { + const tempRoot = mkdtempSync(join(tmpdir(), "openclaw-release-inventory-")); + + try { + mkdirSync(join(tempRoot, "dist"), { recursive: true }); + writeFileSync( + join(tempRoot, PACKAGE_DIST_INVENTORY_RELATIVE_PATH), + JSON.stringify(["dist/extensions/qa-lab/runtime-api.js"]), + "utf8", + ); + + expect( + collectForbiddenPackContentPaths([PACKAGE_DIST_INVENTORY_RELATIVE_PATH], tempRoot), + ).toEqual([]); + } finally { + rmSync(tempRoot, { recursive: true, force: true }); + } + }); }); describe("collectMissingPackPaths", () => {