diff --git a/CHANGELOG.md b/CHANGELOG.md
index 844b884bd6e..305b4611535 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,103 +7,96 @@ Docs: https://docs.openclaw.ai
### Changes
- CLI/infer: add a first-class `openclaw infer ...` hub for provider-backed inference workflows across model, media, web, and embedding tasks. Thanks @Takhoffman.
+- Tools/media generation: auto-fallback across auth-backed image, music, and video providers by default, preserve intent during provider switches, remap size/aspect/resolution/duration hints to the closest supported option, and surface provider capabilities plus mode-aware video-to-video support.
+- Memory/wiki: restore the bundled `memory-wiki` stack with plugin, CLI, sync/query/apply tooling, memory-host integration, structured claim/evidence fields, compiled digest retrieval, claim-health linting, contradiction clustering, staleness dashboards, and freshness-weighted search. Thanks @vincentkoc.
- Plugins/webhooks: add a bundled webhook ingress plugin so external automation can create and drive bound TaskFlows through per-route shared-secret endpoints. (#61892) Thanks @mbelinky.
-- Tools/media generation: preserve intent across auth-backed image, music, and video provider fallback, remap size, aspect ratio, resolution, and duration hints to the closest supported option, and surface explicit provider capabilities plus mode-aware video-to-video support.
-- Memory/wiki: restore the bundled `memory-wiki` stack with plugin, CLI, sync/query/apply tooling, and memory-host integration for wiki-backed memory workflows.
-- Providers/Arcee AI: add a bundled Arcee AI provider plugin with Trinity catalog entries, OpenRouter support, and updated onboarding/auth guidance. (#62068) Thanks @arthurbr11.
-- Providers/Google: add Gemma 4 model support and keep Google fallback resolution on the requested provider path so native Google Gemma routes work again. (#61507) Thanks @eyjohn.
-- Providers/Google: preserve explicit thinking-off semantics for Gemma 4 while still enabling Gemma reasoning support in the Google compatibility wrappers. (#62127) Thanks @romgenie, co-authored with BunsDev.
-- Providers/Anthropic: restore Claude CLI as the preferred local Anthropic path in onboarding, model-auth guidance, doctor flows, and Docker Claude CLI live lanes again.
-- ACP/ACPX plugin: bump the bundled `acpx` pin to `0.5.1` so plugin-local installs and strict version checks pick up the latest published runtime release. (#62148) Thanks @onutc.
-- Tools/media generation: auto-fallback across auth-backed image, music, and video providers by default, and remap fallback size, aspect ratio, resolution, and duration hints to the closest supported option instead of dropping intent on provider switches.
-- Tools/media generation: report applied fallback geometry and duration settings consistently in tool results, add a shared normalization contract for image/music/video runtimes, and simplify the bundled image-generation-core runtime test to only verify the plugin-sdk re-export seam.
- Gateway/sessions: add persisted compaction checkpoints plus Sessions UI branch/restore actions so operators can inspect and recover pre-compaction session state. (#62146) Thanks @scoootscooob.
+- Compaction: add pluggable compaction provider registry so plugins can replace the built-in summarization pipeline. Configure via `agents.defaults.compaction.provider`; falls back to LLM summarization on provider failure. (#56224) Thanks @DhruvBhatia0.
+- Agents/system prompt: add `agents.defaults.systemPromptOverride` for controlled prompt experiments plus heartbeat prompt-section controls so heartbeat runtime behavior can stay enabled without injecting heartbeat instructions every turn.
+- Providers/Google: add Gemma 4 model support and keep Google fallback resolution on the requested provider path so native Google Gemma routes work again. (#61507) Thanks @eyjohn.
+- Providers/Google: preserve explicit thinking-off semantics for Gemma 4 while still enabling Gemma reasoning support in compatibility wrappers. (#62127) Thanks @romgenie.
+- Providers/Arcee AI: add a bundled Arcee AI provider plugin with Trinity catalog entries, OpenRouter support, and updated onboarding/auth guidance. (#62068) Thanks @arthurbr11.
+- Providers/Anthropic: restore Claude CLI as the preferred local Anthropic path in onboarding, model-auth guidance, doctor flows, and Docker Claude CLI live lanes again.
- Providers/Ollama: detect vision capability from the `/api/show` response and set image input on models that support it so Ollama vision models accept image attachments. (#62193) Thanks @BruceMacD.
- Memory/dreaming: ingest redacted session transcripts into the dreaming corpus with per-day session-corpus notes, cursor checkpointing, and promotion/doctor support. (#62227) Thanks @vignesh07.
-- Plugins/memory: add a public memory-artifact export seam to the unified memory capability so companion plugins like `memory-wiki` can bridge the active memory plugin without reaching into `memory-core` internals. Thanks @vincentkoc.
-- Memory/wiki: add structured claim/evidence fields plus compiled agent digest artifacts so `memory-wiki` behaves more like a persistent knowledge layer and less like markdown-only page storage. Thanks @vincentkoc.
-- Memory/wiki: add claim-health linting, contradiction clustering, staleness-aware dashboards, and freshness-weighted wiki search so `memory-wiki` can act more like a maintained belief layer than a passive markdown dump. Thanks @vincentkoc.
-- Memory/wiki: use compiled digest artifacts as the first-pass wiki index for search/get flows, and resolve claim ids back to owning pages so agents can retrieve knowledge by belief identity instead of only by file path. Thanks @vincentkoc.
-- Memory/wiki: add an opt-in `context.includeCompiledDigestPrompt` flag so memory prompt supplements can append a compact compiled wiki snapshot for legacy prompt assembly and context engines that explicitly consume memory prompt sections. Thanks @vincentkoc.
-- Plugin SDK/context engines: pass `availableTools` and `citationsMode` into `assemble()`, and expose `buildMemorySystemPromptAddition(...)` so non-legacy context engines can adopt the active memory prompt path without reimplementing it. Thanks @vincentkoc.
- Providers/inferrs: add string-content compatibility for stricter OpenAI-compatible chat backends, document `inferrs` setup with a full config example, and add troubleshooting guidance for local backends that pass direct probes but fail on full agent-runtime prompts.
- Agents/context engine: expose prompt-cache runtime context to context engines and keep current-turn prompt-cache usage aligned with the active attempt instead of stale prior-turn assistant state. (#62179) Thanks @jalehman.
-- Tools/media: document per-provider music and video generation capabilities, and add shared live video-to-video sweep coverage for providers that support local reference clips.
-- Compaction: add pluggable compaction provider registry so plugins can replace the built-in summarization pipeline. Configure via `agents.defaults.compaction.provider`; falls back to LLM summarization on provider failure. (#56224) Thanks @DhruvBhatia0.
+- Plugin SDK/context engines: pass `availableTools` and `citationsMode` into `assemble()`, and expose memory-artifact and memory-prompt seams so companion plugins and non-legacy context engines can consume active memory state without reaching into internals. Thanks @vincentkoc.
+- ACP/ACPX plugin: bump the bundled `acpx` pin to `0.5.1` so plugin-local installs and strict version checks pick up the latest published runtime release. (#62148) Thanks @onutc.
- Discord/events: allow `event-create` to accept a cover image URL or local file path, load and validate PNG/JPG/GIF event cover media, and pass the encoded image payload through Discord admin action/runtime paths. (#60883) Thanks @bittoby.
### Fixes
-- Plugins/media: when `plugins.allow` is set, capability fallback now merges bundled capability plugin ids into the allowlist (not only `plugins.entries`), so media understanding providers such as OpenAI-compatible STT load for voice transcription without requiring `openai` in `plugins.allow`. (#62205) Thanks @neeravmakwana.
- CLI/infer: keep provider-backed infer behavior aligned with actual runtime execution by fixing explicit TTS override handling, profile-aware gateway TTS prefs resolution, per-request transcription `prompt`/`language` overrides, image output MIME/extension mismatches, configured web-search fallback behavior, and agent-vs-CLI web-search execution drift.
-- Auth/OpenAI Codex OAuth: reload fresh on-disk credentials inside the locked refresh path and retry once after `refresh_token_reused` rotates only the stored refresh token, so relogin/restart recovery stops getting stuck on stale cached auth state. Thanks @owen-ever.
-- Agents/history and replies: buffer phaseless OpenAI WS text until a real assistant phase arrives, keep replay and SSE history sequence tracking aligned, hide commentary and leaked tool XML from user-visible history, and keep history-based follow-up replies on `final_answer` text only. (#61729, #61747, #61829, #61855, #61954) Thanks @100yenadmin, @afurm, and @openperf.
-- Plugins/channels: keep bundled channel artifact and secret-contract loading stable under lazy loading, preserve plugin-schema defaults during install, and fix Windows `file://` plus native-Jiti plugin loader paths so onboarding, doctor, `openclaw secret`, and bundled plugin installs work again. (#61832, #61836, #61853, #61856) Thanks @Zeesejo and @SuperMarioYL.
-- Plugins/ClawHub: verify downloaded plugin archives against version metadata SHA-256, fail closed when archive integrity metadata is missing or malformed, and tighten fallback ZIP verification so plugin installs cannot proceed on mismatched or incomplete ClawHub package metadata. (#60517) Thanks @mappel-nv.
-- Auto-reply/media: allow managed generated-media `MEDIA:` paths from normal reply text again while still blocking arbitrary host-local media and document paths, so generated media keep delivering without reopening host-path injection holes.
-- Runtime event trust: mark background `notifyOnExit` summaries, ACP parent-stream relays, and wake-hook payloads as untrusted system events so lower-trust runtime output no longer re-enters later turns as trusted `System:` text. (#62003)
-- Providers/Anthropic: preserve thinking blocks for Claude Opus 4.5+, Sonnet 4.5+, and newer Claude 4-family models so prompt-cache prefixes keep matching, and skip `service_tier` injection on OAuth-authenticated stream wrapper requests so Claude OAuth streaming stops failing with HTTP 401. (#60356, #61793)
+- Plugins/media: when `plugins.allow` is set, capability fallback now merges bundled capability plugin ids into the allowlist (not only `plugins.entries`), so media understanding providers such as OpenAI-compatible STT load for voice transcription without requiring `openai` in `plugins.allow`. (#62205) Thanks @neeravmakwana.
+- Agents/history and replies: buffer phaseless OpenAI WS text until a real assistant phase arrives, keep replay and SSE history sequence tracking aligned, hide commentary and leaked tool XML from user-visible history, and keep history-based follow-up replies on `final_answer` text only. (#61729, #61747, #61829, #61855, #61954) Thanks @100yenadmin and contributors.
- Control UI: show `/tts` audio replies in webchat, detect mistaken `?token=` auth links with the correct `#token=` hint, and keep Copy, Canvas, and mobile exec-approval UI from covering chat content on narrow screens. (#54842, #61514, #61598) Thanks @neeravmakwana.
-- TUI: route `/status` through the shared session-status command, keep commentary hidden in history, strip raw envelope metadata from async command notices, preserve fallback streaming before per-attempt failures finalize, and restore Kitty keyboard state on exit or fatal crashes. (#49130, #59985, #60043, #61463) Thanks @biefan, @MoerAI, @jwchmodx, and @100yenadmin.
-- Sessions/model selection: resolve the explicitly selected session model separately from runtime fallback resolution so session status and live model switching stay aligned with the chosen model.
-- Discord/ACP bindings: canonicalize DM conversation identity across inbound messages, component interactions, native commands, and current-conversation binding resolution so `--bind here` in Discord DMs keeps routing follow-up replies to the bound agent instead of falling back to the default agent.
+- iOS/gateway: replace string-matched connection error UI with structured gateway connection problems, preserve actionable pairing/auth failures over later generic disconnect noise, and surface reusable problem banners and details across onboarding, settings, and root status surfaces. (#62650) Thanks @ngutman.
+- TUI: route `/status` through the shared session-status command, keep commentary hidden in history, strip raw envelope metadata from async command notices, preserve fallback streaming before per-attempt failures finalize, and restore Kitty keyboard state on exit or fatal crashes. (#49130, #59985, #60043, #61463) Thanks @biefan and contributors.
- iOS/Watch exec approvals: keep Apple Watch review and approval recovery working while the iPhone is locked or backgrounded, including reconnect recovery, pending approval persistence, notification cleanup, and APNs-backed watch refresh recovery. (#61757) Thanks @ngutman.
+- Agents/context overflow: combine oversized and aggregate tool-result recovery in one pass and restore a total-context overflow backstop so recoverable sessions retry instead of failing early. (#61651) Thanks @Takhoffman.
+- Auth/OpenAI Codex OAuth: reload fresh on-disk credentials inside the locked refresh path and retry once after `refresh_token_reused` rotates only the stored refresh token, so relogin/restart recovery stops getting stuck on stale cached auth state. Thanks @owen-ever.
+- Auth/OpenAI Codex OAuth: keep native `/model ...@profile` selections on the target session and honor explicit user-locked auth profiles even when per-agent auth order excludes them. (#62744) Thanks @jalehman.
+- Providers/Anthropic: preserve thinking blocks for Claude Opus 4.5+, Sonnet 4.5+, and newer Claude 4-family models so prompt-cache prefixes keep matching, and skip `service_tier` injection on OAuth-authenticated stream wrapper requests so Claude OAuth streaming stops failing with HTTP 401. (#60356, #61793)
+- Agents/Claude CLI: surface nested API error messages from structured CLI output so billing/auth/provider failures show the real provider error instead of an opaque CLI failure.
+- Agents/exec: preserve explicit `host=node` routing under elevated defaults when `tools.exec.host=auto`, fail loud on invalid elevated cross-host overrides, and keep `strictInlineEval` commands blocked after approval timeouts instead of falling through to automatic execution. (#61739) Thanks @obviyus.
- Nodes/exec approvals: keep `host=node` POSIX transport shell wrappers (`/bin/sh -lc ...`) aligned with inner-command allowlist analysis so allowlisted scripts stop prompting unnecessarily, while Windows `cmd.exe` wrapper runs stay approval-gated. (#62401) Thanks @ngutman.
- Nodes/exec approvals: keep Windows `cmd.exe /c` wrapper runs approval-gated even when `env` carriers, including env-assignment carriers, wrap the shell invocation. (#62439) Thanks @ngutman.
-- Agents/context overflow: combine oversized and aggregate tool-result recovery in one pass and restore a total-context overflow backstop so recoverable sessions retry instead of failing early. (#61651) Thanks @Takhoffman.
-- Agents/exec: preserve explicit `host=node` routing under elevated defaults when `tools.exec.host=auto`, fail loud on invalid elevated cross-host overrides, and keep `strictInlineEval` commands blocked after approval timeouts instead of falling through to automatic execution. (#61739) Thanks @obviyus.
- Gateway tool/exec config: block model-facing `gateway config.apply` and `config.patch` writes from changing exec approval paths such as `safeBins`, `safeBinProfiles`, `safeBinTrustedDirs`, and `strictInlineEval`, while still allowing unchanged structured values through. (#62001) Thanks @eleqtrizit.
-- Host exec/env sanitization: block dangerous `JAVA_OPTS`, `RUSTFLAGS`, and `CARGO_HOME` inputs at the host-exec boundary so attacker-controlled env overrides can no longer inject JVM agents, compiler flags, or Cargo state pivots into host-run processes. (#62291) Thanks @pgondhi987.
+- Host exec/env sanitization: block dangerous Java, Rust, Cargo, Git, Kubernetes, cloud credential, config-path, and Helm env overrides so host-run tools cannot be redirected to attacker-chosen code, config, credentials, or repository state. (#59119, #62002, #62291) Thanks @eleqtrizit and contributors.
- Commands/allowlist: require owner authorization for `/allowlist add` and `/allowlist remove` before channel resolution, so non-owner but command-authorized senders can no longer persistently rewrite allowlist policy state. (#62383) Thanks @pgondhi987.
- Feishu/docx uploads: honor `tools.fs.workspaceOnly` for local `upload_file` and `upload_image` paths by forwarding workspace-constrained `localRoots` into the media loader, so docx uploads can no longer read host-local files outside the workspace when workspace-only mode is active. (#62369) Thanks @pgondhi987.
- Network/fetch guard: drop request bodies and body-describing headers on cross-origin `307` and `308` redirects by default, so attacker-controlled redirect hops cannot receive secret-bearing POST payloads from SSRF-guarded fetch flows unless a caller explicitly opts in. (#62357) Thanks @pgondhi987.
-- Media/base64 decode guards: enforce byte limits before decoding missed base64-backed Teams, Signal, QQ Bot, and image-tool payloads so oversized inbound media and data URLs no longer bypass pre-decode size checks. (#62007) Thanks @eleqtrizit.
-- Providers/Ollama: honor the selected provider's `baseUrl` during streaming so multi-Ollama setups stop routing every stream to the first configured Ollama endpoint. (#61678)
-- Auth/OpenAI Codex OAuth: keep native `/model ...@profile` selections on the target session and honor explicit user-locked auth profiles even when per-agent auth order excludes them. (#62744) Thanks @jalehman.
-- Browser/remote CDP: retry the DevTools websocket once after remote browser restarts so healthy remote browser profiles do not fail availability checks during CDP warm-up. (#57397) Thanks @ThanhNguyxn07.
- Browser/SSRF: treat main-frame `document` redirect hops as navigations even when Playwright does not flag them as `isNavigationRequest()`, so strict private-network blocking still stops forbidden redirect pivots before the browser reaches the internal target. (#62355) Thanks @pgondhi987.
+- Browser/node invoke: block persistent browser profile create, reset, and delete mutations through `browser.proxy` on both gateway-forwarded `node.invoke` and the node-host proxy path, even when no profile allowlist is configured. (#60489)
- Gateway/node pairing: require a fresh pairing request when a previously paired node reconnects with additional declared commands, and keep the live session pinned to the earlier approved command set until the upgrade is approved. (#62658) Thanks @eleqtrizit.
- Gateway/auth: invalidate existing shared-token and password WebSocket sessions when the configured secret rotates, so stale authenticated sockets cannot stay attached after token or password changes. (#62350) Thanks @pgondhi987.
-- Gateway/status and containers: auto-bind to `0.0.0.0` inside Docker and Podman environments, and probe local TLS gateways over `wss://` with self-signed fingerprint forwarding so container startup and loopback TLS status checks work again. (#61818, #61935) Thanks @openperf and @ThanhNguyxn07.
-- macOS/gateway version: strip trailing commit metadata from CLI version output before semver parsing so the Mac app recognizes installed gateway versions like `OpenClaw 2026.4.2 (d74a122)` again. (#61111) Thanks @oliviareid-svg.
-- Discord: recover forwarded referenced message text and attachments when snapshots are missing, use `ws://` again for gateway monitor sockets, stop forcing a hardcoded temperature for Codex-backed auto-thread titles, and harden voice receive recovery so rapid speaker restarts keep their next utterance. (#41536, #61670) Thanks @artwalker and @wit-oc.
-- Slack/threading: keep legacy thread stickiness for real replies when older callers omit `isThreadReply`, while still honoring `replyToMode` for Slack's auto-created top-level `thread_ts`. (#61835) Thanks @kaonash.
-- Plugins/loaders: centralize bundled `dist/**` Jiti native-load policy and keep channel, public-surface, facade, and config-metadata loader seams off native Jiti on Windows so onboarding and configure flows stop tripping `ERR_UNSUPPORTED_ESM_URL_SCHEME`. (#62286) Thanks @chen-zhang-cs-code.
-- Providers/xAI: recognize `api.grok.x.ai` as an xAI-native endpoint again and keep legacy `x_search` auth resolution working so older xAI web-search configs continue to load. (#61377) Thanks @jjjojoj.
-- Memory/vector recall: surface explicit warnings when `sqlite-vec` is unavailable or vector writes are degraded, and strip managed Light Sleep and REM blocks before daily-note ingestion so memory indexing and dreaming stop reporting false-success or re-ingesting staged output. (#61720) Thanks @MonkeyLeeT.
-- Matrix/formatting: preserve multi-paragraph and loose-list rendering in Element so numbered and bulleted Markdown keeps their content attached to the correct list item. (#60997) Thanks @gucasbrg.
- MS Teams/security: validate file-consent upload URLs against HTTPS, Microsoft/SharePoint host allowlists, and private-IP DNS checks before uploading attachments, blocking SSRF-style consent-upload abuse. (#23596)
-- QQ Bot/media: route gateway-side attachment and fallback downloads through guarded QQ/Tencent HTTPS fetches so QQ media handling no longer follows arbitrary remote hosts.
-- Providers/Ollama: stop warning that Ollama could not be reached when discovery only sees empty default local stubs, while still keeping real explicit Ollama overrides loud when the endpoint is unreachable.
-- Tools/web_fetch and web_search: fix `TypeError: fetch failed` caused by undici 8.0 enabling HTTP/2 by default; pinned SSRF-guard dispatchers now explicitly set `allowH2: false` to restore HTTP/1.1 behavior and keep the custom DNS-pinning lookup compatible. (#61738, #61777) Thanks @zozo123.
-- Tools/web search/Exa: show Exa Search in onboarding and configure provider pickers again by marking the bundled Exa provider as setup-visible. Thanks @vincentkoc.
-- Docs/i18n: relocalize final localized-page links after translation and remove the zh-CN homepage redirect override so localized Mintlify pages resolve to the correct language roots again. (#61796) Thanks @hxy91819.
-- Plugins/provider hooks: stop recursive provider snapshot loads from overflowing the stack during plugin initialization, while still preserving cached nested provider-hook results. (#61922, #61938, #61946, #61951)
-- Exec/runtime events: mark background `notifyOnExit` summaries and ACP parent-stream relays as untrusted system events so lower-trust runtime output no longer re-enters later turns as trusted `System:` text.
-- Hooks/wake: queue direct and mapped wake-hook payloads as untrusted system events so external wake content no longer enters the main session as trusted input. (#62003)
-- Browser/node invoke: block persistent browser profile create, reset, and delete mutations through `browser.proxy` on both gateway-forwarded `node.invoke` and the node-host proxy path, even when no profile allowlist is configured. (#60489)
+- Media/base64 decode guards: enforce byte limits before decoding missed base64-backed Teams, Signal, QQ Bot, and image-tool payloads so oversized inbound media and data URLs no longer bypass pre-decode size checks. (#62007) Thanks @eleqtrizit.
+- Runtime event trust: mark background `notifyOnExit` summaries, ACP parent-stream relays, and wake-hook payloads as untrusted system events so lower-trust runtime output no longer re-enters later turns as trusted `System:` text. (#62003)
+- Auto-reply/media: allow managed generated-media `MEDIA:` paths from normal reply text again while still blocking arbitrary host-local media and document paths, so generated media keep delivering without reopening host-path injection holes.
+- Gateway/status and containers: auto-bind to `0.0.0.0` inside Docker and Podman environments, and probe local TLS gateways over `wss://` with self-signed fingerprint forwarding so container startup and loopback TLS status checks work again. (#61818, #61935) Thanks @openperf and contributors.
+- Gateway/OpenAI-compatible HTTP: abort in-flight `/v1/chat/completions` and `/v1/responses` turns when clients disconnect so abandoned HTTP requests stop wasting agent runtime. (#54388) Thanks @Lellansin.
+- macOS/gateway version: strip trailing commit metadata from CLI version output before semver parsing so the Mac app recognizes installed gateway versions like `OpenClaw 2026.4.2 (d74a122)` again. (#61111) Thanks @oliviareid-svg.
+- Sessions/model selection: resolve the explicitly selected session model separately from runtime fallback resolution so session status and live model switching stay aligned with the chosen model.
+- Discord/ACP bindings: canonicalize DM conversation identity across inbound messages, component interactions, native commands, and current-conversation binding resolution so `--bind here` in Discord DMs keeps routing follow-up replies to the bound agent instead of falling back to the default agent.
+- Discord: recover forwarded referenced message text and attachments when snapshots are missing, use `ws://` again for gateway monitor sockets, stop forcing a hardcoded temperature for Codex-backed auto-thread titles, and harden voice receive recovery so rapid speaker restarts keep their next utterance. (#41536, #61670) Thanks @artwalker and contributors.
- Slack/thread mentions: add `channels.slack.thread.requireExplicitMention` so Slack channels that already require mentions can also require explicit `@bot` mentions inside bot-participated threads. (#58276) Thanks @praktika-engineer.
-- UI/light mode: target both root and nested WebKit scrollbar thumbs in the light theme so page-level and container scrollbars stay visible on light backgrounds. (#61753) Thanks @chziyue.
-- Matrix/onboarding: add an invite auto-join setup step with explicit off warnings and strict stable-target validation so new Matrix accounts stop silently ignoring invited rooms and fresh DM-style invites unless operators opt in. (#62168) Thanks @gumadeiras.
-- Telegram/doctor: keep top-level access-control fallback in place during multi-account normalization while still promoting legacy default auth into `accounts.default`, so existing named bots keep inherited allowlists without dropping the legacy default bot. (#62263) Thanks @obviyus.
-- Agents/subagents: honor `sessions_spawn(lightContext: true)` for spawned subagent runs by preserving lightweight bootstrap context through the gateway and embedded runner instead of silently falling back to full workspace bootstrap injection. (#62264) Thanks @theSamPadilla.
+- Slack/threading: keep legacy thread stickiness for real replies when older callers omit `isThreadReply`, while still honoring `replyToMode` for Slack's auto-created top-level `thread_ts`. (#61835) Thanks @kaonash.
- Slack/media: keep attachment downloads on the SSRF-guarded dispatcher path so Slack media fetching works on Node 22 without dropping pinned transport enforcement. (#62239) Thanks @openperf.
+- Matrix/onboarding: add an invite auto-join setup step with explicit off warnings and strict stable-target validation so new Matrix accounts stop silently ignoring invited rooms and fresh DM-style invites unless operators opt in. (#62168) Thanks @gumadeiras.
+- Matrix/formatting: preserve multi-paragraph and loose-list rendering in Element so numbered and bulleted Markdown keeps their content attached to the correct list item. (#60997) Thanks @gucasbrg.
+- Telegram/doctor: keep top-level access-control fallback in place during multi-account normalization while still promoting legacy default auth into `accounts.default`, so existing named bots keep inherited allowlists without dropping the legacy default bot. (#62263) Thanks @obviyus.
+- Plugins/loaders: centralize bundled `dist/**` Jiti native-load policy and keep channel, public-surface, facade, and config-metadata loader seams off native Jiti on Windows so onboarding and configure flows stop tripping `ERR_UNSUPPORTED_ESM_URL_SCHEME`. (#62286) Thanks @chen-zhang-cs-code.
+- Plugins/channels: keep bundled channel artifact and secret-contract loading stable under lazy loading, preserve plugin-schema defaults during install, and fix Windows `file://` plus native-Jiti plugin loader paths so onboarding, doctor, `openclaw secret`, and bundled plugin installs work again. (#61832, #61836, #61853, #61856) Thanks @Zeesejo and contributors.
+- Plugins/ClawHub: verify downloaded plugin archives against version metadata SHA-256, fail closed when archive integrity metadata is missing or malformed, and tighten fallback ZIP verification so plugin installs cannot proceed on mismatched or incomplete ClawHub package metadata. (#60517) Thanks @mappel-nv.
+- Plugins/provider hooks: stop recursive provider snapshot loads from overflowing the stack during plugin initialization, while still preserving cached nested provider-hook results. (#61922, #61938, #61946, #61951)
- Docker/plugins: stop forcing bundled plugin discovery to `/app/extensions` in runtime images so packaged installs use compiled `dist/extensions` artifacts again and Node 24 containers do not boot through source-only plugin entry paths. Fixes #62044. (#62316) Thanks @gumadeiras.
-- Cron: load `jobId` into `id` when the on-disk store omits `id`, matching doctor migration and fixing `unknown cron job id` for hand-edited `jobs.json`. (#62246) Thanks @neeravmakwana.
-- Agents/model fallback: classify minimal HTTP 404 API errors (for example `404 status code (no body)`) as `model_not_found` so assistant failures throw into the fallback chain instead of stopping at the first fallback candidate. (#62119) Thanks @neeravmakwana.
+- Providers/Ollama: honor the selected provider's `baseUrl` during streaming so multi-Ollama setups stop routing every stream to the first configured Ollama endpoint. (#61678)
+- Providers/Ollama: stop warning that Ollama could not be reached when discovery only sees empty default local stubs, while still keeping real explicit Ollama overrides loud when the endpoint is unreachable.
+- Providers/xAI: recognize `api.grok.x.ai` as an xAI-native endpoint again and keep legacy `x_search` auth resolution working so older xAI web-search configs continue to load. (#61377) Thanks @jjjojoj.
- Providers/Mistral: send `reasoning_effort` for `mistral/mistral-small-latest` (Mistral Small 4) with thinking-level mapping, and mark the catalog entry as reasoning-capable so adjustable reasoning matches Mistral’s Chat Completions API. (#62162) Thanks @neeravmakwana.
- OpenAI TTS/Groq: send `wav` to Groq-compatible speech endpoints, honor explicit `responseFormat` overrides on OpenAI-compatible paths, and only mark voice-note output as voice-compatible when the actual format is `opus`. (#62233) Thanks @neeravmakwana.
+- Tools/web_fetch and web_search: fix `TypeError: fetch failed` caused by undici 8.0 enabling HTTP/2 by default; pinned SSRF-guard dispatchers now explicitly set `allowH2: false` to restore HTTP/1.1 behavior and keep the custom DNS-pinning lookup compatible. (#61738, #61777) Thanks @zozo123.
+- Tools/web search/Exa: show Exa Search in onboarding and configure provider pickers again by marking the bundled Exa provider as setup-visible. Thanks @vincentkoc.
+- Memory/vector recall: surface explicit warnings when `sqlite-vec` is unavailable or vector writes are degraded, and strip managed Light Sleep and REM blocks before daily-note ingestion so memory indexing and dreaming stop reporting false-success or re-ingesting staged output. (#61720) Thanks @MonkeyLeeT.
+- Memory/dreaming: make Dreams config reads and writes respect the selected memory slot plugin instead of always targeting `memory-core`. (#62275) Thanks @SnowSky1.
+- QQ Bot/media: route gateway-side attachment and fallback downloads through guarded QQ/Tencent HTTPS fetches so QQ media handling no longer follows arbitrary remote hosts.
+- Browser/remote CDP: retry the DevTools websocket once after remote browser restarts so healthy remote browser profiles do not fail availability checks during CDP warm-up. (#57397) Thanks @ThanhNguyxn07.
+- UI/light mode: target both root and nested WebKit scrollbar thumbs in the light theme so page-level and container scrollbars stay visible on light backgrounds. (#61753) Thanks @chziyue.
+- Agents/subagents: honor `sessions_spawn(lightContext: true)` for spawned subagent runs by preserving lightweight bootstrap context through the gateway and embedded runner instead of silently falling back to full workspace bootstrap injection. (#62264) Thanks @theSamPadilla.
+- Cron: load `jobId` into `id` when the on-disk store omits `id`, matching doctor migration and fixing `unknown cron job id` for hand-edited `jobs.json`. (#62246) Thanks @neeravmakwana.
+- Agents/model fallback: classify minimal HTTP 404 API errors (for example `404 status code (no body)`) as `model_not_found` so assistant failures throw into the fallback chain instead of stopping at the first fallback candidate. (#62119) Thanks @neeravmakwana.
- BlueBubbles/network: respect explicit private-network opt-out for loopback and private `serverUrl` values across account resolution, status probes, monitor startup, and attachment downloads, while keeping public-host attachment hostname pinning intact. (#59373) Thanks @jpreagan.
- Agents/heartbeat: keep heartbeat runs pinned to the main session so active subagent transcripts are not overwritten by heartbeat status messages. (#61803) Thanks @100yenadmin.
+- Agents/heartbeat: respect disabled heartbeat prompt guidance so operators can suppress heartbeat prompt instructions without disabling heartbeat runtime behavior.
- Agents/compaction: stop compaction-wait aborts from re-entering prompt failover and replaying completed tool turns. (#62600) Thanks @i-dentifier.
- Approvals/runtime: move native approval lifecycle assembly into shared core bootstrap/runtime seams driven by channel capabilities and runtime contexts, and remove the legacy bundled approval fallback wiring. (#62135) Thanks @gumadeiras.
- Security/fetch-guard: stop rejecting operator-configured proxy hostnames against the target-scoped hostname allowlist in SSRF-guarded fetches, restoring proxy-based media downloads for Telegram and other channels. (#62312) Thanks @ademczuk.
-- iOS/gateway: replace string-matched connection error UI with structured gateway connection problems, preserve actionable pairing/auth failures over later generic disconnect noise, and surface reusable problem banners and details across onboarding, settings, and root status surfaces. (#62650) Thanks @ngutman.
-- Git/env sanitization: block additional Git repository-plumbing env variables such as `GIT_DIR`, `GIT_WORK_TREE`, `GIT_COMMON_DIR`, `GIT_INDEX_FILE`, `GIT_OBJECT_DIRECTORY`, `GIT_ALTERNATE_OBJECT_DIRECTORIES`, and `GIT_NAMESPACE` so host-run Git commands cannot be redirected to attacker-chosen repository state through inherited or request-scoped env. (#62002) Thanks @eleqtrizit.
-- Host exec/env sanitization: block additional request-scoped credential and config-path overrides such as `KUBECONFIG`, cloud credential-path env, `CARGO_HOME`, and `HELM_HOME` so host-run tools can no longer be redirected to attacker-chosen config or state. (#59119) Thanks @eleqtrizit.
- Logging: make `logging.level` and `logging.consoleLevel` honor the documented severity threshold ordering again, and keep child loggers inheriting the parent `minLevel`. (#44646) Thanks @zhumengzhu.
- Agents/sessions_send: pass `threadId` through announce delivery so cross-session notifications land in the correct Telegram forum topic instead of the group's general thread. (#62758) Thanks @jalehman.
- Daemon/systemd: keep sudo systemctl calls scoped to the invoking user when machine-scoped systemctl fails, while still avoiding machine fallback for permission-denied user bus errors. (#62337) Thanks @Aftabbs.
+- Docs/i18n: relocalize final localized-page links after translation and remove the zh-CN homepage redirect override so localized Mintlify pages resolve to the correct language roots again. (#61796) Thanks @hxy91819.
## 2026.4.5
diff --git a/apps/android/app/build.gradle.kts b/apps/android/app/build.gradle.kts
index 698f5fafdbe..906d2d4074d 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 = 2026040601
- versionName = "2026.4.6"
+ versionCode = 2026040701
+ versionName = "2026.4.7"
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/Config/Version.xcconfig b/apps/ios/Config/Version.xcconfig
index 4f8284d8e1e..7cf8c95b19e 100644
--- a/apps/ios/Config/Version.xcconfig
+++ b/apps/ios/Config/Version.xcconfig
@@ -1,8 +1,8 @@
// Shared iOS version defaults.
// Generated overrides live in build/Version.xcconfig (git-ignored).
-OPENCLAW_GATEWAY_VERSION = 2026.4.6
-OPENCLAW_MARKETING_VERSION = 2026.4.6
-OPENCLAW_BUILD_VERSION = 2026040601
+OPENCLAW_GATEWAY_VERSION = 2026.4.7
+OPENCLAW_MARKETING_VERSION = 2026.4.7
+OPENCLAW_BUILD_VERSION = 2026040701
#include? "../build/Version.xcconfig"
diff --git a/apps/macos/Sources/OpenClaw/Resources/Info.plist b/apps/macos/Sources/OpenClaw/Resources/Info.plist
index d58af201e9a..63e416a9565 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.6
+ 2026.4.7
CFBundleVersion
- 2026040601
+ 2026040701
CFBundleIconFile
OpenClaw
CFBundleURLTypes
diff --git a/extensions/acpx/package.json b/extensions/acpx/package.json
index 4566d520436..d11a5f83ff7 100644
--- a/extensions/acpx/package.json
+++ b/extensions/acpx/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/acpx",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw ACP runtime backend",
"type": "module",
"dependencies": {
diff --git a/extensions/alibaba/package.json b/extensions/alibaba/package.json
index 6c2e5324148..4ddbb5d1df2 100644
--- a/extensions/alibaba/package.json
+++ b/extensions/alibaba/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/alibaba-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"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 e4b4a7ee0e2..fe7e6dd1259 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.6",
+ "version": "2026.4.7",
"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 83a0211a875..b7ababfc716 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.6",
+ "version": "2026.4.7",
"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 8dc5cce2ff4..3160b29cb27 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.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Anthropic Vertex provider plugin",
"type": "module",
diff --git a/extensions/anthropic/package.json b/extensions/anthropic/package.json
index 51bd365a3fe..0c0b065934b 100644
--- a/extensions/anthropic/package.json
+++ b/extensions/anthropic/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/anthropic-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Anthropic provider plugin",
"type": "module",
diff --git a/extensions/arcee/package.json b/extensions/arcee/package.json
index a3140663419..b0de3c4c5b7 100644
--- a/extensions/arcee/package.json
+++ b/extensions/arcee/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/arcee-provider",
- "version": "2026.4.4",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Arcee provider plugin",
"type": "module",
diff --git a/extensions/bluebubbles/package.json b/extensions/bluebubbles/package.json
index 2bd889370af..14c4722fb03 100644
--- a/extensions/bluebubbles/package.json
+++ b/extensions/bluebubbles/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/bluebubbles",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw BlueBubbles channel plugin",
"type": "module",
"devDependencies": {
@@ -8,7 +8,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -40,13 +40,13 @@
"install": {
"npmSpec": "@openclaw/bluebubbles",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/brave/package.json b/extensions/brave/package.json
index d14a5a9317f..1aab3b6ca79 100644
--- a/extensions/brave/package.json
+++ b/extensions/brave/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/brave-plugin",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Brave plugin",
"type": "module",
diff --git a/extensions/browser/package.json b/extensions/browser/package.json
index 7d0e64defff..5c558e3964d 100644
--- a/extensions/browser/package.json
+++ b/extensions/browser/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/browser-plugin",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw browser tool plugin",
"type": "module",
diff --git a/extensions/byteplus/package.json b/extensions/byteplus/package.json
index 4ad8d8d52c2..d96f9f580d8 100644
--- a/extensions/byteplus/package.json
+++ b/extensions/byteplus/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/byteplus-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw BytePlus provider plugin",
"type": "module",
diff --git a/extensions/chutes/package.json b/extensions/chutes/package.json
index 6075eb0cbb8..db1bc2b92b5 100644
--- a/extensions/chutes/package.json
+++ b/extensions/chutes/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/chutes-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"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 c2106374707..45f6f54f856 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.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Cloudflare AI Gateway provider plugin",
"type": "module",
diff --git a/extensions/comfy/package.json b/extensions/comfy/package.json
index 048368deb68..810af55bcbf 100644
--- a/extensions/comfy/package.json
+++ b/extensions/comfy/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/comfy-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw ComfyUI provider plugin",
"type": "module",
diff --git a/extensions/copilot-proxy/package.json b/extensions/copilot-proxy/package.json
index 4bb2b65173f..29835aabcfd 100644
--- a/extensions/copilot-proxy/package.json
+++ b/extensions/copilot-proxy/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/copilot-proxy",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Copilot Proxy provider plugin",
"type": "module",
diff --git a/extensions/deepgram/package.json b/extensions/deepgram/package.json
index 1bcc6669091..0303dffeea8 100644
--- a/extensions/deepgram/package.json
+++ b/extensions/deepgram/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/deepgram-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Deepgram media-understanding provider",
"type": "module",
diff --git a/extensions/deepseek/package.json b/extensions/deepseek/package.json
index 09d85f915c3..ca35e9160a3 100644
--- a/extensions/deepseek/package.json
+++ b/extensions/deepseek/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/deepseek-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw DeepSeek provider plugin",
"type": "module",
diff --git a/extensions/diagnostics-otel/package.json b/extensions/diagnostics-otel/package.json
index c94121d0c09..a23dea86de6 100644
--- a/extensions/diagnostics-otel/package.json
+++ b/extensions/diagnostics-otel/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/diagnostics-otel",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw diagnostics OpenTelemetry exporter",
"type": "module",
"dependencies": {
@@ -24,10 +24,10 @@
"./index.ts"
],
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/diffs/package.json b/extensions/diffs/package.json
index 704a1a07a9c..a17c0b9ce07 100644
--- a/extensions/diffs/package.json
+++ b/extensions/diffs/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/diffs",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw diff viewer plugin",
"type": "module",
diff --git a/extensions/discord/package.json b/extensions/discord/package.json
index 7dd0c40bca1..2482e38978a 100644
--- a/extensions/discord/package.json
+++ b/extensions/discord/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/discord",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw Discord channel plugin",
"type": "module",
"dependencies": {
@@ -16,7 +16,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -49,13 +49,13 @@
"install": {
"npmSpec": "@openclaw/discord",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"bundle": {
"stageRuntimeDependencies": true
diff --git a/extensions/duckduckgo/package.json b/extensions/duckduckgo/package.json
index 842ee2ee8ef..3e55fe9386f 100644
--- a/extensions/duckduckgo/package.json
+++ b/extensions/duckduckgo/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/duckduckgo-plugin",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw DuckDuckGo plugin",
"type": "module",
diff --git a/extensions/elevenlabs/package.json b/extensions/elevenlabs/package.json
index e671432a3bb..1a68e2ba527 100644
--- a/extensions/elevenlabs/package.json
+++ b/extensions/elevenlabs/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/elevenlabs-speech",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw ElevenLabs speech plugin",
"type": "module",
diff --git a/extensions/exa/package.json b/extensions/exa/package.json
index 3acfc0b9f4f..f6dc964925a 100644
--- a/extensions/exa/package.json
+++ b/extensions/exa/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/exa-plugin",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Exa plugin",
"type": "module",
diff --git a/extensions/fal/package.json b/extensions/fal/package.json
index 32da50d71b5..89798824a7e 100644
--- a/extensions/fal/package.json
+++ b/extensions/fal/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/fal-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw fal provider plugin",
"type": "module",
diff --git a/extensions/feishu/package.json b/extensions/feishu/package.json
index 7bb65c5e70d..fdbabe29329 100644
--- a/extensions/feishu/package.json
+++ b/extensions/feishu/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/feishu",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw Feishu/Lark channel plugin (community maintained by @m1heng)",
"type": "module",
"dependencies": {
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -40,13 +40,13 @@
"install": {
"npmSpec": "@openclaw/feishu",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"bundle": {
"stageRuntimeDependencies": true
diff --git a/extensions/firecrawl/package.json b/extensions/firecrawl/package.json
index 3afa3b82598..b305db6e117 100644
--- a/extensions/firecrawl/package.json
+++ b/extensions/firecrawl/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/firecrawl-plugin",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Firecrawl plugin",
"type": "module",
diff --git a/extensions/fireworks/package.json b/extensions/fireworks/package.json
index b3b6dcaff0d..a02756df3a6 100644
--- a/extensions/fireworks/package.json
+++ b/extensions/fireworks/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/fireworks-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Fireworks provider plugin",
"type": "module",
diff --git a/extensions/github-copilot/package.json b/extensions/github-copilot/package.json
index 5edc8b2c895..6b53afd5ddb 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.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw GitHub Copilot provider plugin",
"type": "module",
diff --git a/extensions/google/package.json b/extensions/google/package.json
index 6b3d8664912..bda5d9471ed 100644
--- a/extensions/google/package.json
+++ b/extensions/google/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/google-plugin",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Google plugin",
"type": "module",
diff --git a/extensions/googlechat/package.json b/extensions/googlechat/package.json
index eaad7a9f302..4070c6c36f6 100644
--- a/extensions/googlechat/package.json
+++ b/extensions/googlechat/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/googlechat",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Google Chat channel plugin",
"type": "module",
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -43,7 +43,7 @@
"install": {
"npmSpec": "@openclaw/googlechat",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
}
}
}
diff --git a/extensions/groq/package.json b/extensions/groq/package.json
index 0a5f0b9ffab..9d1976f24c0 100644
--- a/extensions/groq/package.json
+++ b/extensions/groq/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/groq-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Groq media-understanding provider",
"type": "module",
diff --git a/extensions/huggingface/package.json b/extensions/huggingface/package.json
index 7c010177858..e326cb729a9 100644
--- a/extensions/huggingface/package.json
+++ b/extensions/huggingface/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/huggingface-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"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 d943ea4a96a..20fcd014064 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.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw image generation runtime package",
"type": "module",
diff --git a/extensions/imessage/package.json b/extensions/imessage/package.json
index 3693fe4b533..a094c02189b 100644
--- a/extensions/imessage/package.json
+++ b/extensions/imessage/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/imessage",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw iMessage channel plugin",
"type": "module",
diff --git a/extensions/irc/package.json b/extensions/irc/package.json
index ad53f4b235c..574b1b1ab2e 100644
--- a/extensions/irc/package.json
+++ b/extensions/irc/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/irc",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw IRC channel plugin",
"type": "module",
"devDependencies": {
@@ -11,7 +11,7 @@
"./index.ts"
],
"install": {
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"setupEntry": "./setup-entry.ts",
"channel": {
diff --git a/extensions/kilocode/package.json b/extensions/kilocode/package.json
index 58713fdca84..db5edfa77aa 100644
--- a/extensions/kilocode/package.json
+++ b/extensions/kilocode/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/kilocode-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"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 2b1926bd0df..e06d2237ee9 100644
--- a/extensions/kimi-coding/package.json
+++ b/extensions/kimi-coding/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/kimi-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Kimi provider plugin",
"type": "module",
diff --git a/extensions/line/package.json b/extensions/line/package.json
index b4613fcf5b0..89d53513879 100644
--- a/extensions/line/package.json
+++ b/extensions/line/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/line",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw LINE channel plugin",
"type": "module",
@@ -9,7 +9,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -36,7 +36,7 @@
"install": {
"npmSpec": "@openclaw/line",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
}
}
}
diff --git a/extensions/litellm/package.json b/extensions/litellm/package.json
index 4fef131d5ab..95512e20199 100644
--- a/extensions/litellm/package.json
+++ b/extensions/litellm/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/litellm-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw LiteLLM provider plugin",
"type": "module",
diff --git a/extensions/llm-task/package.json b/extensions/llm-task/package.json
index 3bf65dee38f..2407cc82be3 100644
--- a/extensions/llm-task/package.json
+++ b/extensions/llm-task/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/llm-task",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw JSON-only LLM task plugin",
"type": "module",
diff --git a/extensions/lobster/package.json b/extensions/lobster/package.json
index abb576773ba..ebe01619170 100644
--- a/extensions/lobster/package.json
+++ b/extensions/lobster/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/lobster",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "Lobster workflow tool plugin (typed pipelines + resumable approvals)",
"type": "module",
"dependencies": {
@@ -15,10 +15,10 @@
"./index.ts"
],
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/matrix/CHANGELOG.md b/extensions/matrix/CHANGELOG.md
index ca8ea76b35b..7538423b816 100644
--- a/extensions/matrix/CHANGELOG.md
+++ b/extensions/matrix/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## 2026.4.7
+
+### Changes
+
+- Version alignment with core OpenClaw release numbers.
+
## 2026.4.6
### Changes
diff --git a/extensions/matrix/package.json b/extensions/matrix/package.json
index 6273bcbc7ac..0bc00155a16 100644
--- a/extensions/matrix/package.json
+++ b/extensions/matrix/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/matrix",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw Matrix channel plugin",
"type": "module",
"dependencies": {
@@ -16,7 +16,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -45,7 +45,7 @@
"install": {
"npmSpec": "@openclaw/matrix",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6",
+ "minHostVersion": ">=2026.4.7",
"allowInvalidConfigRecovery": true
},
"releaseChecks": {
diff --git a/extensions/mattermost/package.json b/extensions/mattermost/package.json
index 794e8bc7b97..dd0398ab649 100644
--- a/extensions/mattermost/package.json
+++ b/extensions/mattermost/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/mattermost",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw Mattermost channel plugin",
"type": "module",
"dependencies": {
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -36,7 +36,7 @@
"install": {
"npmSpec": "@openclaw/mattermost",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
}
}
}
diff --git a/extensions/media-understanding-core/package.json b/extensions/media-understanding-core/package.json
index 2666240f04f..118a63f30b3 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.6",
+ "version": "2026.4.7",
"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 7ee2ca034e3..c6878d560fa 100644
--- a/extensions/memory-core/package.json
+++ b/extensions/memory-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/memory-core",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw core memory search plugin",
"type": "module",
@@ -9,7 +9,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
diff --git a/extensions/memory-lancedb/package.json b/extensions/memory-lancedb/package.json
index ae9aed1801a..b7170da6f51 100644
--- a/extensions/memory-lancedb/package.json
+++ b/extensions/memory-lancedb/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/memory-lancedb",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw LanceDB-backed long-term memory plugin with auto-recall/capture",
"type": "module",
"dependencies": {
@@ -18,13 +18,13 @@
"install": {
"npmSpec": "@openclaw/memory-lancedb",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/memory-wiki/package.json b/extensions/memory-wiki/package.json
index 2ec3e76b9ea..f4f5f3cff85 100644
--- a/extensions/memory-wiki/package.json
+++ b/extensions/memory-wiki/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/memory-wiki",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw persistent wiki plugin",
"type": "module",
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
diff --git a/extensions/microsoft-foundry/package.json b/extensions/microsoft-foundry/package.json
index 10002876328..70585f5b714 100644
--- a/extensions/microsoft-foundry/package.json
+++ b/extensions/microsoft-foundry/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/microsoft-foundry",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Microsoft Foundry provider plugin",
"type": "module",
diff --git a/extensions/microsoft/package.json b/extensions/microsoft/package.json
index 37056fdcc0c..2387e3b03b2 100644
--- a/extensions/microsoft/package.json
+++ b/extensions/microsoft/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/microsoft-speech",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Microsoft speech plugin",
"type": "module",
diff --git a/extensions/minimax/package.json b/extensions/minimax/package.json
index cf1ccd7ab20..86820cf080f 100644
--- a/extensions/minimax/package.json
+++ b/extensions/minimax/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/minimax-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw MiniMax provider and OAuth plugin",
"type": "module",
diff --git a/extensions/mistral/package.json b/extensions/mistral/package.json
index a06617b53ac..6a532a62805 100644
--- a/extensions/mistral/package.json
+++ b/extensions/mistral/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/mistral-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Mistral provider plugin",
"type": "module",
diff --git a/extensions/moonshot/package.json b/extensions/moonshot/package.json
index f0691c7985b..416aa8bba39 100644
--- a/extensions/moonshot/package.json
+++ b/extensions/moonshot/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/moonshot-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Moonshot provider plugin",
"type": "module",
diff --git a/extensions/msteams/CHANGELOG.md b/extensions/msteams/CHANGELOG.md
index c8cc9032c5e..36603bffd3a 100644
--- a/extensions/msteams/CHANGELOG.md
+++ b/extensions/msteams/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## 2026.4.7
+
+### Changes
+
+- Version alignment with core OpenClaw release numbers.
+
## 2026.4.6
### Changes
diff --git a/extensions/msteams/package.json b/extensions/msteams/package.json
index 7bbfb380e04..9c53a984b6e 100644
--- a/extensions/msteams/package.json
+++ b/extensions/msteams/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/msteams",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw Microsoft Teams channel plugin",
"type": "module",
"dependencies": {
@@ -13,7 +13,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -40,13 +40,13 @@
"install": {
"npmSpec": "@openclaw/msteams",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/nextcloud-talk/package.json b/extensions/nextcloud-talk/package.json
index 40df16d5ab9..c95218e34e8 100644
--- a/extensions/nextcloud-talk/package.json
+++ b/extensions/nextcloud-talk/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/nextcloud-talk",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw Nextcloud Talk channel plugin",
"type": "module",
"devDependencies": {
@@ -8,7 +8,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -37,13 +37,13 @@
"install": {
"npmSpec": "@openclaw/nextcloud-talk",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/nostr/CHANGELOG.md b/extensions/nostr/CHANGELOG.md
index e7b56d657e7..2bf11282f64 100644
--- a/extensions/nostr/CHANGELOG.md
+++ b/extensions/nostr/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## 2026.4.7
+
+### Changes
+
+- Version alignment with core OpenClaw release numbers.
+
## 2026.4.6
### Changes
diff --git a/extensions/nostr/package.json b/extensions/nostr/package.json
index 82bea87dc92..0c1f6ff2a59 100644
--- a/extensions/nostr/package.json
+++ b/extensions/nostr/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/nostr",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw Nostr channel plugin for NIP-04 encrypted DMs",
"type": "module",
"dependencies": {
@@ -11,7 +11,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -36,13 +36,13 @@
"install": {
"npmSpec": "@openclaw/nostr",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/nvidia/package.json b/extensions/nvidia/package.json
index 7bafff3c13a..afcdcd9f6d0 100644
--- a/extensions/nvidia/package.json
+++ b/extensions/nvidia/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/nvidia-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw NVIDIA provider plugin",
"type": "module",
diff --git a/extensions/ollama/package.json b/extensions/ollama/package.json
index 5a5dab7a069..c2621b20774 100644
--- a/extensions/ollama/package.json
+++ b/extensions/ollama/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/ollama-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Ollama provider plugin",
"type": "module",
diff --git a/extensions/open-prose/package.json b/extensions/open-prose/package.json
index c45e44f6910..b10711cdb61 100644
--- a/extensions/open-prose/package.json
+++ b/extensions/open-prose/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/open-prose",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"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 c2919094f33..d2da2461ab2 100644
--- a/extensions/openai/package.json
+++ b/extensions/openai/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/openai-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw OpenAI provider plugins",
"type": "module",
diff --git a/extensions/opencode-go/package.json b/extensions/opencode-go/package.json
index 9c614ec902a..4bfe50929dd 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.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw OpenCode Go provider plugin",
"type": "module",
diff --git a/extensions/opencode/package.json b/extensions/opencode/package.json
index 0bc0ecd43d3..09ca4720999 100644
--- a/extensions/opencode/package.json
+++ b/extensions/opencode/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/opencode-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw OpenCode Zen provider plugin",
"type": "module",
diff --git a/extensions/openrouter/package.json b/extensions/openrouter/package.json
index 2e187e18741..e9b0f3e299a 100644
--- a/extensions/openrouter/package.json
+++ b/extensions/openrouter/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/openrouter-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw OpenRouter provider plugin",
"type": "module",
diff --git a/extensions/openshell/package.json b/extensions/openshell/package.json
index c89c3615a40..07e2dd64862 100644
--- a/extensions/openshell/package.json
+++ b/extensions/openshell/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/openshell-sandbox",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw OpenShell sandbox backend",
"type": "module",
diff --git a/extensions/perplexity/package.json b/extensions/perplexity/package.json
index 7a35192e687..a800391b51c 100644
--- a/extensions/perplexity/package.json
+++ b/extensions/perplexity/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/perplexity-plugin",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Perplexity plugin",
"type": "module",
diff --git a/extensions/qa-channel/package.json b/extensions/qa-channel/package.json
index 72ed933cd98..a2368926651 100644
--- a/extensions/qa-channel/package.json
+++ b/extensions/qa-channel/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/qa-channel",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw QA synthetic channel plugin",
"type": "module",
@@ -9,7 +9,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -40,7 +40,7 @@
"install": {
"npmSpec": "@openclaw/qa-channel",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
}
}
}
diff --git a/extensions/qa-lab/package.json b/extensions/qa-lab/package.json
index 6948dc5066e..969005f6119 100644
--- a/extensions/qa-lab/package.json
+++ b/extensions/qa-lab/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/qa-lab",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw QA lab plugin with private debugger UI and scenario runner",
"type": "module",
@@ -9,7 +9,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -23,10 +23,10 @@
"install": {
"npmSpec": "@openclaw/qa-lab",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
}
}
}
diff --git a/extensions/qianfan/package.json b/extensions/qianfan/package.json
index f05aa9d7a0c..d3f6ac455a7 100644
--- a/extensions/qianfan/package.json
+++ b/extensions/qianfan/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/qianfan-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Qianfan provider plugin",
"type": "module",
diff --git a/extensions/qqbot/package.json b/extensions/qqbot/package.json
index 8ff6bdc5992..f40c31590c0 100644
--- a/extensions/qqbot/package.json
+++ b/extensions/qqbot/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/qqbot",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": false,
"description": "OpenClaw QQ Bot channel plugin",
"type": "module",
@@ -15,7 +15,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -41,13 +41,13 @@
"npmSpec": "@openclaw/qqbot",
"localPath": "extensions/qqbot",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"bundle": {
"stageRuntimeDependencies": true
diff --git a/extensions/qwen/package.json b/extensions/qwen/package.json
index acd89541258..ef315c7a24e 100644
--- a/extensions/qwen/package.json
+++ b/extensions/qwen/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/qwen-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Qwen Cloud provider plugin",
"type": "module",
diff --git a/extensions/runway/package.json b/extensions/runway/package.json
index fd7ac1f5ca6..84f94f16b22 100644
--- a/extensions/runway/package.json
+++ b/extensions/runway/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/runway-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Runway video provider plugin",
"type": "module",
diff --git a/extensions/searxng/package.json b/extensions/searxng/package.json
index 7562dd2f8fe..1c935ec5ad3 100644
--- a/extensions/searxng/package.json
+++ b/extensions/searxng/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/searxng-plugin",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw SearXNG plugin",
"type": "module",
diff --git a/extensions/sglang/package.json b/extensions/sglang/package.json
index bef0d79a19f..8e39c7a8364 100644
--- a/extensions/sglang/package.json
+++ b/extensions/sglang/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/sglang-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw SGLang provider plugin",
"type": "module",
diff --git a/extensions/signal/package.json b/extensions/signal/package.json
index 53fb8d361b8..50768354f0c 100644
--- a/extensions/signal/package.json
+++ b/extensions/signal/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/signal",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Signal channel plugin",
"type": "module",
diff --git a/extensions/slack/package.json b/extensions/slack/package.json
index 7d261a6e351..5618ca6550b 100644
--- a/extensions/slack/package.json
+++ b/extensions/slack/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/slack",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Slack channel plugin",
"type": "module",
diff --git a/extensions/speech-core/package.json b/extensions/speech-core/package.json
index 34d45e31129..a7eb248f39b 100644
--- a/extensions/speech-core/package.json
+++ b/extensions/speech-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/speech-core",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw speech runtime package",
"type": "module",
diff --git a/extensions/stepfun/package.json b/extensions/stepfun/package.json
index f54eba4d448..100fb5354ef 100644
--- a/extensions/stepfun/package.json
+++ b/extensions/stepfun/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/stepfun-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw StepFun provider plugin",
"type": "module",
diff --git a/extensions/synology-chat/package.json b/extensions/synology-chat/package.json
index 6c9ccdca033..32f13c7f0d2 100644
--- a/extensions/synology-chat/package.json
+++ b/extensions/synology-chat/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/synology-chat",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "Synology Chat channel plugin for OpenClaw",
"type": "module",
"devDependencies": {
@@ -23,7 +23,7 @@
"install": {
"npmSpec": "@openclaw/synology-chat",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
}
}
}
diff --git a/extensions/synthetic/package.json b/extensions/synthetic/package.json
index 2a5ab5ab013..c44d6398b1b 100644
--- a/extensions/synthetic/package.json
+++ b/extensions/synthetic/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/synthetic-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Synthetic provider plugin",
"type": "module",
diff --git a/extensions/tavily/package.json b/extensions/tavily/package.json
index 0dec1e25ec4..3b031afcb9c 100644
--- a/extensions/tavily/package.json
+++ b/extensions/tavily/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/tavily-plugin",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Tavily plugin",
"type": "module",
diff --git a/extensions/telegram/package.json b/extensions/telegram/package.json
index 8158bc010f7..0c19ef396d3 100644
--- a/extensions/telegram/package.json
+++ b/extensions/telegram/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/telegram",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Telegram channel plugin",
"type": "module",
diff --git a/extensions/tlon/package.json b/extensions/tlon/package.json
index 28ed6507932..65fd2d9fe3b 100644
--- a/extensions/tlon/package.json
+++ b/extensions/tlon/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/tlon",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw Tlon/Urbit channel plugin",
"type": "module",
"dependencies": {
@@ -14,7 +14,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -39,7 +39,7 @@
"install": {
"npmSpec": "@openclaw/tlon",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
}
}
}
diff --git a/extensions/together/package.json b/extensions/together/package.json
index 28c99dde870..05f0c8bee59 100644
--- a/extensions/together/package.json
+++ b/extensions/together/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/together-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Together provider plugin",
"type": "module",
diff --git a/extensions/twitch/CHANGELOG.md b/extensions/twitch/CHANGELOG.md
index 6a504937419..f2fd324a40a 100644
--- a/extensions/twitch/CHANGELOG.md
+++ b/extensions/twitch/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## 2026.4.7
+
+### Changes
+
+- Version alignment with core OpenClaw release numbers.
+
## 2026.4.6
### Changes
diff --git a/extensions/twitch/package.json b/extensions/twitch/package.json
index 3ff206952aa..ebc27862351 100644
--- a/extensions/twitch/package.json
+++ b/extensions/twitch/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/twitch",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw Twitch channel plugin",
"type": "module",
"dependencies": {
@@ -16,7 +16,7 @@
"./index.ts"
],
"install": {
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"channel": {
"id": "twitch",
diff --git a/extensions/venice/package.json b/extensions/venice/package.json
index 61e293e3103..9f1405a0b28 100644
--- a/extensions/venice/package.json
+++ b/extensions/venice/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/venice-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"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 b710b4d813b..813044f5ad8 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.6",
+ "version": "2026.4.7",
"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 6f00aa68d99..971f5e301df 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.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw video generation runtime package",
"type": "module",
diff --git a/extensions/vllm/package.json b/extensions/vllm/package.json
index 92c90f84a4a..7a7137ef411 100644
--- a/extensions/vllm/package.json
+++ b/extensions/vllm/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/vllm-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw vLLM provider plugin",
"type": "module",
diff --git a/extensions/voice-call/CHANGELOG.md b/extensions/voice-call/CHANGELOG.md
index 320744a1422..1b36a54ec21 100644
--- a/extensions/voice-call/CHANGELOG.md
+++ b/extensions/voice-call/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## 2026.4.7
+
+### Changes
+
+- Version alignment with core OpenClaw release numbers.
+
## 2026.4.6
### Changes
diff --git a/extensions/voice-call/package.json b/extensions/voice-call/package.json
index 0206d66702d..c499fd074e7 100644
--- a/extensions/voice-call/package.json
+++ b/extensions/voice-call/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/voice-call",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw voice-call plugin",
"type": "module",
"dependencies": {
@@ -13,7 +13,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -25,13 +25,13 @@
"./index.ts"
],
"install": {
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/volcengine/package.json b/extensions/volcengine/package.json
index 4b7c9c60dd6..a6ff1f3449a 100644
--- a/extensions/volcengine/package.json
+++ b/extensions/volcengine/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/volcengine-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Volcengine provider plugin",
"type": "module",
diff --git a/extensions/vydra/package.json b/extensions/vydra/package.json
index cd0f85b06e4..73be4305732 100644
--- a/extensions/vydra/package.json
+++ b/extensions/vydra/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/vydra-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Vydra media provider plugin",
"type": "module",
diff --git a/extensions/webhooks/package.json b/extensions/webhooks/package.json
index f9a389a2af2..91fc9b9a68d 100644
--- a/extensions/webhooks/package.json
+++ b/extensions/webhooks/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/webhooks",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw webhook bridge plugin",
"type": "module",
diff --git a/extensions/whatsapp/package.json b/extensions/whatsapp/package.json
index 16de0bd0513..4481d95240b 100644
--- a/extensions/whatsapp/package.json
+++ b/extensions/whatsapp/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/whatsapp",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw WhatsApp channel plugin",
"type": "module",
"dependencies": {
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -41,13 +41,13 @@
"install": {
"npmSpec": "@openclaw/whatsapp",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/xai/package.json b/extensions/xai/package.json
index 497e1a010c4..78c044638d6 100644
--- a/extensions/xai/package.json
+++ b/extensions/xai/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/xai-plugin",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw xAI plugin",
"type": "module",
diff --git a/extensions/xiaomi/package.json b/extensions/xiaomi/package.json
index 25e9fd45e09..e432b20db85 100644
--- a/extensions/xiaomi/package.json
+++ b/extensions/xiaomi/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/xiaomi-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Xiaomi provider plugin",
"type": "module",
diff --git a/extensions/zai/package.json b/extensions/zai/package.json
index 23cacc57e65..9450419b6da 100644
--- a/extensions/zai/package.json
+++ b/extensions/zai/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/zai-provider",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"private": true,
"description": "OpenClaw Z.AI provider plugin",
"type": "module",
diff --git a/extensions/zalo/CHANGELOG.md b/extensions/zalo/CHANGELOG.md
index 482a183a787..d24de8c13b3 100644
--- a/extensions/zalo/CHANGELOG.md
+++ b/extensions/zalo/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## 2026.4.7
+
+### Changes
+
+- Version alignment with core OpenClaw release numbers.
+
## 2026.4.6
### Changes
diff --git a/extensions/zalo/package.json b/extensions/zalo/package.json
index 3deb436057e..f3edc6349f3 100644
--- a/extensions/zalo/package.json
+++ b/extensions/zalo/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/zalo",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw Zalo channel plugin",
"type": "module",
"dependencies": {
@@ -11,7 +11,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -39,13 +39,13 @@
"install": {
"npmSpec": "@openclaw/zalo",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"release": {
"publishToClawHub": true,
diff --git a/extensions/zalouser/CHANGELOG.md b/extensions/zalouser/CHANGELOG.md
index 454e036ce62..9d60eca90ca 100644
--- a/extensions/zalouser/CHANGELOG.md
+++ b/extensions/zalouser/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## 2026.4.7
+
+### Changes
+
+- Version alignment with core OpenClaw release numbers.
+
## 2026.4.6
### Changes
diff --git a/extensions/zalouser/package.json b/extensions/zalouser/package.json
index b3eca6a7521..e3cfa373c6b 100644
--- a/extensions/zalouser/package.json
+++ b/extensions/zalouser/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/zalouser",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "OpenClaw Zalo Personal Account plugin via native zca-js integration",
"type": "module",
"dependencies": {
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
- "openclaw": ">=2026.4.6"
+ "openclaw": ">=2026.4.7"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -40,13 +40,13 @@
"install": {
"npmSpec": "@openclaw/zalouser",
"defaultChoice": "npm",
- "minHostVersion": ">=2026.4.6"
+ "minHostVersion": ">=2026.4.7"
},
"compat": {
- "pluginApi": ">=2026.4.6"
+ "pluginApi": ">=2026.4.7"
},
"build": {
- "openclawVersion": "2026.4.6"
+ "openclawVersion": "2026.4.7"
},
"release": {
"publishToClawHub": true,
diff --git a/package.json b/package.json
index f1b9061c5d0..afa859f7e4a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "openclaw",
- "version": "2026.4.6",
+ "version": "2026.4.7",
"description": "Multi-channel AI gateway with extensible messaging integrations",
"keywords": [],
"homepage": "https://github.com/openclaw/openclaw#readme",
diff --git a/src/cli/update-cli.test.ts b/src/cli/update-cli.test.ts
index 7c3f2b54763..e806da8c915 100644
--- a/src/cli/update-cli.test.ts
+++ b/src/cli/update-cli.test.ts
@@ -1021,7 +1021,7 @@ describe("update-cli", () => {
makeOkUpdateResult({
mode: "git",
root: path.join(tempDir, "..", "openclaw"),
- after: { version: "2026.4.6" },
+ after: { version: "2026.4.7" },
}),
);
serviceLoaded.mockResolvedValue(true);
diff --git a/src/config/schema.base.generated.ts b/src/config/schema.base.generated.ts
index a6ef5ea56df..ee32dfa0268 100644
--- a/src/config/schema.base.generated.ts
+++ b/src/config/schema.base.generated.ts
@@ -26904,6 +26904,6 @@ export const GENERATED_BASE_CONFIG_SCHEMA: BaseConfigSchemaResponse = {
tags: ["advanced", "url-secret"],
},
},
- version: "2026.4.6",
+ version: "2026.4.7",
generatedAt: "2026-03-22T21:17:33.302Z",
};
diff --git a/src/plugins/stage-bundled-plugin-runtime-deps.test.ts b/src/plugins/stage-bundled-plugin-runtime-deps.test.ts
index 7395ac03c71..cf5df8f0113 100644
--- a/src/plugins/stage-bundled-plugin-runtime-deps.test.ts
+++ b/src/plugins/stage-bundled-plugin-runtime-deps.test.ts
@@ -48,7 +48,7 @@ describe("stageBundledPluginRuntimeDeps", () => {
JSON.stringify(
{
name: "@openclaw/feishu",
- version: "2026.4.6",
+ version: "2026.4.7",
dependencies: {
"@larksuiteoapi/node-sdk": "^1.60.0",
},
@@ -120,7 +120,7 @@ describe("stageBundledPluginRuntimeDeps", () => {
JSON.stringify(
{
name: "@openclaw/amazon-bedrock-provider",
- version: "2026.4.6",
+ version: "2026.4.7",
dependencies: {
"@aws-sdk/client-bedrock": "3.1024.0",
},
diff --git a/test/plugin-npm-release.test.ts b/test/plugin-npm-release.test.ts
index 5d28dfc7e1b..1b48378ad7a 100644
--- a/test/plugin-npm-release.test.ts
+++ b/test/plugin-npm-release.test.ts
@@ -133,7 +133,7 @@ describe("collectPublishablePluginPackages", () => {
mkdirSync(join(repoDir, "extensions", "demo-plugin"), { recursive: true });
writeJsonFile(join(repoDir, "extensions", "demo-plugin", "package.json"), {
name: "@openclaw/demo-plugin",
- version: "2026.4.6",
+ version: "2026.4.7",
openclaw: {
extensions: ["./index.ts"],
install: {
@@ -150,7 +150,7 @@ describe("collectPublishablePluginPackages", () => {
extensionId: "demo-plugin",
packageDir: "extensions/demo-plugin",
packageName: "@openclaw/demo-plugin",
- version: "2026.4.6",
+ version: "2026.4.7",
channel: "stable",
publishTag: "latest",
installNpmSpec: "@openclaw/demo-plugin",