---
title: "v2026.8.1: Other Bug Fixes"
description: "Scoped fixes across Codex delegation, browser Talk, Copilot and xAI replay, Doctor recovery, plugin upgrades, meeting audio, and more."
---

OpenClaw now preserves completed Codex delegation results through the covered handoffs, keeps accepted user turns from being stored twice, stops cancelled commands before they start, and retains Canvas widget identity and pin state after reload. The rest of this section covers scoped fixes across browser Talk, Copilot and xAI replay, [Doctor](/cli/doctor) recovery, plugin upgrades, meeting audio, and the [terminal app](/web/tui).

<AccordionGroup>

<Accordion title="Agent Work and Handoffs">

In the repaired [Codex delegation](/tools/subagents) and `sessions_yield` paths, completed subagent results now survive cleanup and handoff, yielded jobs launch once, and the parent resumes after fan-out finishes.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Preserve Codex native subagent results after parent cleanup [#102060](https://github.com/openclaw/openclaw/pull/102060)
- Keep Gateway-connected nodes healthy and consistent [#103093](https://github.com/openclaw/openclaw/pull/103093)
- Protect managed worktrees while agent runs are active [#103263](https://github.com/openclaw/openclaw/pull/103263)
- Keep automatic session maintenance from deleting active runs [#104137](https://github.com/openclaw/openclaw/pull/104137)
- Keep command continuations in one session [#104866](https://github.com/openclaw/openclaw/pull/104866)
- Resume replay-safe work after Gateway restarts [#104997](https://github.com/openclaw/openclaw/pull/104997)
- Prevent retired subagent JSON from resurrecting completed runs [#105793](https://github.com/openclaw/openclaw/pull/105793)
- Preserve Claude CLI background subagent and workflow results [#106347](https://github.com/openclaw/openclaw/pull/106347)
- Harden cloud-worker admission and remote turns [#107043](https://github.com/openclaw/openclaw/pull/107043)
- Preserve managed worktrees when session state is unreadable [#108041](https://github.com/openclaw/openclaw/pull/108041)
- Prevent heartbeat stalls from aborting healthy runs [#108455](https://github.com/openclaw/openclaw/pull/108455)
- Preserve parent sessions when creating parallel child chats [#110541](https://github.com/openclaw/openclaw/pull/110541)
- Recover final replies after completed tool-only turns [#110565](https://github.com/openclaw/openclaw/pull/110565)
- Resume parent agents after yielded child handoffs [#110922](https://github.com/openclaw/openclaw/pull/110922)
- Preserve completed cloud-worker results before reconciliation [#110952](https://github.com/openclaw/openclaw/pull/110952)
- Recover cloud-worker sessions from workspace conflicts [#111244](https://github.com/openclaw/openclaw/pull/111244)
- Keep cloud-worker workspace reconciliation working across turns [#111481](https://github.com/openclaw/openclaw/pull/111481)
- Let Swarm collector fan-outs use their configured group caps [#111505](https://github.com/openclaw/openclaw/pull/111505)
- Make cloud-worker reclaim retryable after workspace conflicts [#111714](https://github.com/openclaw/openclaw/pull/111714)
- Make cloud-worker reclaim recover from retained conflicts [#112186](https://github.com/openclaw/openclaw/pull/112186)
- Resume interrupted turns after gateway restarts [#112562](https://github.com/openclaw/openclaw/pull/112562)
- Keep large Swarms reliable through races and restarts [#112989](https://github.com/openclaw/openclaw/pull/112989)
- Prevent sessions_yield completion deadlocks [#113190](https://github.com/openclaw/openclaw/pull/113190)
- Use abort codes for accurate restart recovery [#114219](https://github.com/openclaw/openclaw/pull/114219)
- Prevent cross-agent session lifecycle deadlocks [#114524](https://github.com/openclaw/openclaw/pull/114524)
- Stop blocked tool loops before turn timeout [#114673](https://github.com/openclaw/openclaw/pull/114673)
- Treat empty finalizers after successful tool work as completion [#115104](https://github.com/openclaw/openclaw/pull/115104)
- Restore full-stack delivery, recovery, and QA reliability [#115290](https://github.com/openclaw/openclaw/pull/115290)
- Restore end-to-end agent delivery and QA integrity [#115404](https://github.com/openclaw/openclaw/pull/115404)
- Stop managed Gateway crash loops during agent DB migration [#115631](https://github.com/openclaw/openclaw/pull/115631)
- Large agent fan-outs avoid registry persistence stalls [#116286](https://github.com/openclaw/openclaw/pull/116286)
- Preserve child-agent turn and navigation ownership [#116897](https://github.com/openclaw/openclaw/pull/116897)
- Keep sessions.steer retries from interrupting active work [#116969](https://github.com/openclaw/openclaw/pull/116969)
- Preserve final subagent replies and accurate session states [#117119](https://github.com/openclaw/openclaw/pull/117119)
- Preserve retry safety for paired-node command failures [#117139](https://github.com/openclaw/openclaw/pull/117139)
- Keep subagent results consistent after restart and at scale [#117141](https://github.com/openclaw/openclaw/pull/117141)
- Preserve approved command output when an agent session resumes [#117177](https://github.com/openclaw/openclaw/pull/117177)
- Preserve authoritative Codex turn outcomes and final answers [#117185](https://github.com/openclaw/openclaw/pull/117185)
- Canonicalize subagent timing and outcome state [#117267](https://github.com/openclaw/openclaw/pull/117267)
- Isolate concurrent Codex turns and completion delivery [#117298](https://github.com/openclaw/openclaw/pull/117298)
- Make subagent recovery deterministic after gateway restarts [#117412](https://github.com/openclaw/openclaw/pull/117412)
- Preserve agent run ownership and completion delivery [#117731](https://github.com/openclaw/openclaw/pull/117731)
- Restore reliable cancellation, run status, delegation, and Codex compaction [#117902](https://github.com/openclaw/openclaw/pull/117902)
- Make requested agent threads visible and persistent [#118073](https://github.com/openclaw/openclaw/pull/118073)
- Restore missing replies from steered or yielded subagents [#118117](https://github.com/openclaw/openclaw/pull/118117)
- Harden cancellation, compaction, and tool-loop safety [#118146](https://github.com/openclaw/openclaw/pull/118146)
- Keep queued agent runs alive until execution starts [#118181](https://github.com/openclaw/openclaw/pull/118181)
- Enforce child-agent limits during simultaneous launches [#118201](https://github.com/openclaw/openclaw/pull/118201)
- Keep subagent completion output private and accurate [#118296](https://github.com/openclaw/openclaw/pull/118296)
- Restore final replies after a tool failure [#118344](https://github.com/openclaw/openclaw/pull/118344)
- Preserve and recover subagent results after delivery failures [#118360](https://github.com/openclaw/openclaw/pull/118360)
- Let embedded agents recover once from critical tool loops [#118647](https://github.com/openclaw/openclaw/pull/118647)
- Deliver active-run steering reliably across agent harnesses [#119594](https://github.com/openclaw/openclaw/pull/119594)
- Resume parents after late subagent completion [#119696](https://github.com/openclaw/openclaw/pull/119696)
- Keep completed actions visible after final-answer recovery [#119726](https://github.com/openclaw/openclaw/pull/119726)
- Bound subagent completion results in parent prompts [#119731](https://github.com/openclaw/openclaw/pull/119731)
- Finish successful sessions despite timestamp races [#119752](https://github.com/openclaw/openclaw/pull/119752)
- Recover sessions trapped in repeated model retries [#119851](https://github.com/openclaw/openclaw/pull/119851)
- Make active-run steering exact and atomic [#120285](https://github.com/openclaw/openclaw/pull/120285)
- Preserve message arrival order across queue modes [#120420](https://github.com/openclaw/openclaw/pull/120420)
- Prevent agent turns from silently stalling after streaming [#120426](https://github.com/openclaw/openclaw/pull/120426)
- Surface required background completions and bound session patch output [#120453](https://github.com/openclaw/openclaw/pull/120453)
- Apply steering before unstarted tool calls [#120470](https://github.com/openclaw/openclaw/pull/120470)
- Resume yielded requesters after child agents finish [#120538](https://github.com/openclaw/openclaw/pull/120538)
- Use advertised SSH fallback ports for Cloud Workers [#120546](https://github.com/openclaw/openclaw/pull/120546)
- Preserve Cloud Worker cleanup across SSH fallback [#120715](https://github.com/openclaw/openclaw/pull/120715)
- Preserve Cloud Worker workspace results after SSH loss [#120717](https://github.com/openclaw/openclaw/pull/120717)
- Restore reliable Cloud session creation and worker tunnels [#120926](https://github.com/openclaw/openclaw/pull/120926)
- Wait for recovery-owner release before admitting replies [#120935](https://github.com/openclaw/openclaw/pull/120935)
- Keep steering messages at the next safe tool boundary [#120964](https://github.com/openclaw/openclaw/pull/120964)
- Make Crabbox cloud-worker provisioning idempotent [#121019](https://github.com/openclaw/openclaw/pull/121019)
- Restore Cloud Worker workspace sync from macOS Gateways [#121027](https://github.com/openclaw/openclaw/pull/121027)
- Make Cloud Worker startup responsive and recoverable [#121200](https://github.com/openclaw/openclaw/pull/121200)
- Support large Git workspaces in Cloud Workers [#121262](https://github.com/openclaw/openclaw/pull/121262)
- Resume main-session turns after Gateway restarts [#121969](https://github.com/openclaw/openclaw/pull/121969)
- Let Discord corrections steer active turns [#122452](https://github.com/openclaw/openclaw/pull/122452)
- Cascade session Stop to child agents [#122909](https://github.com/openclaw/openclaw/pull/122909)
- Preserve paired-device sessions while runners are offline [#123477](https://github.com/openclaw/openclaw/pull/123477)
- Make device onboarding and session dispatch outcomes reliable [#123501](https://github.com/openclaw/openclaw/pull/123501)
- Speed up local node launches and contain scratch state [#123503](https://github.com/openclaw/openclaw/pull/123503)
- Keep paired-node outcomes consistent under load [#123869](https://github.com/openclaw/openclaw/pull/123869)
- Preserve device-runner workspaces across restarts [#123889](https://github.com/openclaw/openclaw/pull/123889)
- Restore cloud-worker workspace sync after bundle cutover [#124339](https://github.com/openclaw/openclaw/pull/124339)
- Preserve cloud workspace results across tunnel reconnects [#124406](https://github.com/openclaw/openclaw/pull/124406)
- Keep active Crabbox cloud workers leased [#124615](https://github.com/openclaw/openclaw/pull/124615)
- Open new Git-workspace sessions without waiting for baseline scans [#124796](https://github.com/openclaw/openclaw/pull/124796)
- Keep acknowledged agent turns recoverable [#124857](https://github.com/openclaw/openclaw/pull/124857)
- Preserve agent identity and skills outside the configured workspace [#125675](https://github.com/openclaw/openclaw/pull/125675)
- Pass agent workspace rules to native Codex subagents [#125783](https://github.com/openclaw/openclaw/pull/125783)
- Make steering atomic and Gateway-owned [#125808](https://github.com/openclaw/openclaw/pull/125808)
- Keep turns active when sessions_yield has no child [#125850](https://github.com/openclaw/openclaw/pull/125850)
- Share delegation guidance across native and Codex runtimes [#125892](https://github.com/openclaw/openclaw/pull/125892)
- Resume turns that settle during Gateway restart drain [#125955](https://github.com/openclaw/openclaw/pull/125955)
- Keep large `AGENTS.md` instruction chains visible to Codex [#125966](https://github.com/openclaw/openclaw/pull/125966)
- Bind subagent completion delivery to its Gateway [#126062](https://github.com/openclaw/openclaw/pull/126062)
- Surface paired-device runtime and onboarding requirements [#126067](https://github.com/openclaw/openclaw/pull/126067)
- Let restart recovery own the visible turn result [#126087](https://github.com/openclaw/openclaw/pull/126087)
- Restore Cloud Worker Desktop for node-backed Crabbox workers [#126393](https://github.com/openclaw/openclaw/pull/126393)
- Defer restored subagent recovery until Gateway readiness [#126523](https://github.com/openclaw/openclaw/pull/126523)
- Recover cloud workers without blocking Gateway startup [#126641](https://github.com/openclaw/openclaw/pull/126641)
- Keep ACP prompts, sessions, and conversation bindings with their active owner [#126657](https://github.com/openclaw/openclaw/pull/126657)
- Unblock sessions after restart recovery has settled [#126671](https://github.com/openclaw/openclaw/pull/126671)
- Complete autonomous Cloud Desktop startup [#126705](https://github.com/openclaw/openclaw/pull/126705)
- Prevent lost or duplicate subagent completion messages [#126812](https://github.com/openclaw/openclaw/pull/126812)
- fix(recovery): keep queued replies alive during session watchdog repair [#127510](https://github.com/openclaw/openclaw/pull/127510)
- fix(gateway): prevent silent delivery loss on closing connections [#128144](https://github.com/openclaw/openclaw/pull/128144)
- fix: explain cloud worker enrollment failures behind reverse proxies [#128632](https://github.com/openclaw/openclaw/pull/128632)
- fix(gateway): make restart recovery state authoritative [#129316](https://github.com/openclaw/openclaw/pull/129316)
- fix(workers): remote sessions preserve destination and access policy [#130148](https://github.com/openclaw/openclaw/pull/130148)
- fix(workers): preserve remote turns through drain and cancellation [#130235](https://github.com/openclaw/openclaw/pull/130235)
- fix(workers): re-arm admission-deadline launches, terminalize dead-worker turns, defer debris cleanup [#130446](https://github.com/openclaw/openclaw/pull/130446)
- Keep subagents alive during long tool calls [#95536](https://github.com/openclaw/openclaw/pull/95536)
- Bound repeated session recovery across Gateway restarts [#96230](https://github.com/openclaw/openclaw/pull/96230)
- Resume top-level sessions after parallel subagents finish [#99396](https://github.com/openclaw/openclaw/pull/99396)
- Drain queued replies after mismatched active operations finish [18b4cc9](https://github.com/openclaw/openclaw/commit/18b4cc9)
- Skip redundant gateway checkout sync during Crabbox setup [2ec0299](https://github.com/openclaw/openclaw/commit/2ec0299)
- Prevent canceled agent runs from contending with their own cleanup [a14bbd1](https://github.com/openclaw/openclaw/commit/a14bbd1)
- Keep visible cloud-worker turns streaming [fc3ba07](https://github.com/openclaw/openclaw/commit/fc3ba07)
- Warn when a yielded agent turn has no way to continue [#100146](https://github.com/openclaw/openclaw/pull/100146)
- Keep truncated ACP output valid Unicode [#102378](https://github.com/openclaw/openclaw/pull/102378)
- Clean up canceled queued chat turns safely [#103194](https://github.com/openclaw/openclaw/pull/103194)
- Keep agent runs alive when progress callbacks fail [#103351](https://github.com/openclaw/openclaw/pull/103351)
- Keep native commands responsive during active runs [#104144](https://github.com/openclaw/openclaw/pull/104144)
- Make indexed access explicit across the agent runtime [#104670](https://github.com/openclaw/openclaw/pull/104670)
- Keep agent cancellation and timeout outcomes consistent [#104936](https://github.com/openclaw/openclaw/pull/104936)
- Preserve Codex subagent completions after sessions_yield [#105724](https://github.com/openclaw/openclaw/pull/105724)
- Preserve agent continuations across restart deferral races [#106174](https://github.com/openclaw/openclaw/pull/106174)
- Preserve labels for cross-agent ACP spawns [#106241](https://github.com/openclaw/openclaw/pull/106241)
- Preserve image attachments when steering active runs [#107657](https://github.com/openclaw/openclaw/pull/107657)
- Delete sessions immediately after cloud-worker teardown [#107848](https://github.com/openclaw/openclaw/pull/107848)
- Block synchronous self-sends and attribute missing-cost usage [#108354](https://github.com/openclaw/openclaw/pull/108354)
- Resume cloud sessions after a Gateway restart [#108426](https://github.com/openclaw/openclaw/pull/108426)
- Preserve no-delivery subagent status after restart [#108710](https://github.com/openclaw/openclaw/pull/108710)
- Show a durable ACP interruption after Gateway disconnects [#108827](https://github.com/openclaw/openclaw/pull/108827)
- Restore routed internal chat turns [#109201](https://github.com/openclaw/openclaw/pull/109201)
- Preserve captured subagent output after silent completion [#109541](https://github.com/openclaw/openclaw/pull/109541)
- Keep final replies scoped to the current agent run [#109676](https://github.com/openclaw/openclaw/pull/109676)
- Report operator-stopped agent turns as cancelled [#110220](https://github.com/openclaw/openclaw/pull/110220)
- Isolate embedded fallback after Gateway transport loss [#110226](https://github.com/openclaw/openclaw/pull/110226)
- Keep derived caches from wedging cloud workspaces [#110380](https://github.com/openclaw/openclaw/pull/110380)
- Show cloud-worker progress in session tail [#110460](https://github.com/openclaw/openclaw/pull/110460)
- Allow live Swarm fan-outs to launch registered collector agents [#111379](https://github.com/openclaw/openclaw/pull/111379)
- Reconcile abandoned running sessions after restart [#111699](https://github.com/openclaw/openclaw/pull/111699)
- Admit healthy sessions after restart recovery completes [#111869](https://github.com/openclaw/openclaw/pull/111869)
- Recover sessions after force-clearing stuck agent runs [#112166](https://github.com/openclaw/openclaw/pull/112166)
- Allow direct sessions in non-Git Gateway folders [#112433](https://github.com/openclaw/openclaw/pull/112433)
- Prevent subagent completion replay after gateway restarts [#112534](https://github.com/openclaw/openclaw/pull/112534)
- Recover agents stuck in stable tool-argument churn [#112620](https://github.com/openclaw/openclaw/pull/112620)
- Keep forced cloud worker teardown from being blocked by recovery [#112781](https://github.com/openclaw/openclaw/pull/112781)
- Re-adopt healthy cloud workers after Gateway restart [#112928](https://github.com/openclaw/openclaw/pull/112928)
- Let benign session updates stop blocking cron and subagent starts [#113088](https://github.com/openclaw/openclaw/pull/113088)
- Bound session-catalog provider refresh pressure [#113171](https://github.com/openclaw/openclaw/pull/113171)
- Retire completed session queue lanes [#114051](https://github.com/openclaw/openclaw/pull/114051)
- Recover terminal sessions stuck behind stale restart state [#114071](https://github.com/openclaw/openclaw/pull/114071)
- Recover sessions with missing status and stale restart fences [#114078](https://github.com/openclaw/openclaw/pull/114078)
- Resume interrupted turns regardless of abort wording [#114121](https://github.com/openclaw/openclaw/pull/114121)
- Reclaim stale agent worktree locks after restarts [#114130](https://github.com/openclaw/openclaw/pull/114130)
- Preserve subagent announcements on benign compaction skips [#114449](https://github.com/openclaw/openclaw/pull/114449)
- Harden session lifecycle and subagent controls [#114477](https://github.com/openclaw/openclaw/pull/114477)
- Keep canceled and timed-out agent runs terminal [#114542](https://github.com/openclaw/openclaw/pull/114542)
- Fail fast when session creation finds initialization in progress [#114597](https://github.com/openclaw/openclaw/pull/114597)
- Recover gateway startup from dead migration owners [#114718](https://github.com/openclaw/openclaw/pull/114718)
- Restore observer updates and companion role boundaries [#114898](https://github.com/openclaw/openclaw/pull/114898)
- Harden node reconnects and inference cancellation [#115033](https://github.com/openclaw/openclaw/pull/115033)
- Detect adopted Claude and Pi turns despite short file reads [#115106](https://github.com/openclaw/openclaw/pull/115106)
- Avoid repeated subagent-result prompt rendering [#115263](https://github.com/openclaw/openclaw/pull/115263)
- Prevent canceled CLI agent runs from starting [#115324](https://github.com/openclaw/openclaw/pull/115324)
- Restore subagent completion delivery for CLI parents [#115422](https://github.com/openclaw/openclaw/pull/115422)
- Prevent stale node sessions from appearing healthy [#115971](https://github.com/openclaw/openclaw/pull/115971)
- Prevent finalization retries from dropping chat replies [#116006](https://github.com/openclaw/openclaw/pull/116006)
- Restore Codex final acknowledgments after settled tools [#116044](https://github.com/openclaw/openclaw/pull/116044)
- Run after-turn hooks for interrupted agent turns [#116087](https://github.com/openclaw/openclaw/pull/116087)
- Preserve streamed replies when an agent run times out [#116253](https://github.com/openclaw/openclaw/pull/116253)
- fix(worker): add jitter to default reconnect backoff to prevent thundering herd [#116279](https://github.com/openclaw/openclaw/pull/116279)
- Keep subagent status responsive with retained history [#116449](https://github.com/openclaw/openclaw/pull/116449)
- Bound Codex steering requests by timeout and abort [#116565](https://github.com/openclaw/openclaw/pull/116565)
- Resume in-flight Code Mode work after Gateway restarts [#116605](https://github.com/openclaw/openclaw/pull/116605)
- Resume interrupted Codex conversations after gateway restart [#116725](https://github.com/openclaw/openclaw/pull/116725)
- Stop restart loops for repairable state database schemas [#116733](https://github.com/openclaw/openclaw/pull/116733)
- Preserve truthful bounded subagent outcomes [#116932](https://github.com/openclaw/openclaw/pull/116932)
- Show killed subagents consistently across status views [#116991](https://github.com/openclaw/openclaw/pull/116991)
- Handle embedded-agent cancellation exactly once [#116994](https://github.com/openclaw/openclaw/pull/116994)
- Reject Gateway sends after a node socket starts closing [#117066](https://github.com/openclaw/openclaw/pull/117066)
- Preserve parent tools on verified subagent completion wakes [#117148](https://github.com/openclaw/openclaw/pull/117148)
- Serialize subagent recovery after Gateway restarts [#117283](https://github.com/openclaw/openclaw/pull/117283)
- Preserve Codex app-server disconnect diagnostics [#117296](https://github.com/openclaw/openclaw/pull/117296)
- Isolate WorkerConnection observer failures [#117507](https://github.com/openclaw/openclaw/pull/117507)
- Honor subagent completion capture deadlines [#117750](https://github.com/openclaw/openclaw/pull/117750)
- fix(gateway): stop expired or stalled remote-node streaming [#117918](https://github.com/openclaw/openclaw/pull/117918)
- Give queued agent runs their full execution timeout [#117995](https://github.com/openclaw/openclaw/pull/117995)
- Preserve reply recovery during Gateway restart handoff [#118026](https://github.com/openclaw/openclaw/pull/118026)
- Stop repeated equivalent terminal command failures [#118071](https://github.com/openclaw/openclaw/pull/118071)
- Keep delayed sessions_send follow-ups running [#118105](https://github.com/openclaw/openclaw/pull/118105)
- Classify agent cancellations and timeouts consistently [#118254](https://github.com/openclaw/openclaw/pull/118254)
- Restore /btw side questions on gateway sessions [#118396](https://github.com/openclaw/openclaw/pull/118396)
- Reject hidden-only subagent completion replies [#118461](https://github.com/openclaw/openclaw/pull/118461)
- Preserve sessions_yield handoffs and requester final replies [#118584](https://github.com/openclaw/openclaw/pull/118584)
- Prevent duplicate Codex subagents after yielded fanout [#118644](https://github.com/openclaw/openclaw/pull/118644)
- Record authoritative completion reasons in trajectories [#118685](https://github.com/openclaw/openclaw/pull/118685)
- Prevent duplicate yielded subagent launches and missing synthesis [#118703](https://github.com/openclaw/openclaw/pull/118703)
- Suppress false no-reply messages during continuations [#119154](https://github.com/openclaw/openclaw/pull/119154)
- Preserve admitted node results during disconnect [#119246](https://github.com/openclaw/openclaw/pull/119246)
- Fence subagent recovery to the active Gateway lifecycle [#119776](https://github.com/openclaw/openclaw/pull/119776)
- Deliver yielded subagent follow-up results to the waiting parent [#120187](https://github.com/openclaw/openclaw/pull/120187)
- Wait for child agents to finish before resuming the requester [#120601](https://github.com/openclaw/openclaw/pull/120601)
- Prevent cloud-worker teardown from racing slow setup [#120661](https://github.com/openclaw/openclaw/pull/120661)
- Stop queued agent work after aborted sessions [#120856](https://github.com/openclaw/openclaw/pull/120856)
- Acknowledge busy-session steering only after transcript persistence [#120914](https://github.com/openclaw/openclaw/pull/120914)
- Prevent hung agent teardown from wedging sessions [#120921](https://github.com/openclaw/openclaw/pull/120921)
- Recover failed cloud-worker placements safely [#120976](https://github.com/openclaw/openclaw/pull/120976)
- Preserve cloud-worker failure details across Gateway restarts [#121122](https://github.com/openclaw/openclaw/pull/121122)
- Clear the exact queued message when delivery begins [#121158](https://github.com/openclaw/openclaw/pull/121158)
- Start subagent retention after work completes [#121178](https://github.com/openclaw/openclaw/pull/121178)
- fix(gateway): preserve paired restart session refs [#121478](https://github.com/openclaw/openclaw/pull/121478)
- fix(workers): repair cloud session lifecycle and recovery [#121564](https://github.com/openclaw/openclaw/pull/121564)
- Keep queued cross-session sends isolated under contention [#121662](https://github.com/openclaw/openclaw/pull/121662)
- Keep replacement sessions attached to live worktrees [#121666](https://github.com/openclaw/openclaw/pull/121666)
- Keep subagent results with the correct follow-up generation [#121771](https://github.com/openclaw/openclaw/pull/121771)
- Stop orphan completion polling and stale requester wake delays [#121782](https://github.com/openclaw/openclaw/pull/121782)
- Retry subagent cleanup after transient failures [#121802](https://github.com/openclaw/openclaw/pull/121802)
- Preserve truthful subagent result delivery state [#121837](https://github.com/openclaw/openclaw/pull/121837)
- fix(gateway): clear orphan execHost when unbinding execNode [#121966](https://github.com/openclaw/openclaw/pull/121966)
- Keep dismissed subagent results from reappearing after restart [#121972](https://github.com/openclaw/openclaw/pull/121972)
- Let Cloud Worker previews stream without Gateway round-trip pacing [#122258](https://github.com/openclaw/openclaw/pull/122258)
- Release stale reply ownership that blocks later messages [#122265](https://github.com/openclaw/openclaw/pull/122265)
- Keep concurrent isolated completions independent [#122468](https://github.com/openclaw/openclaw/pull/122468)
- Keep direct Codex child tools working after parent yield [#122503](https://github.com/openclaw/openclaw/pull/122503)
- fix(subagents): preserve announce drop vs none delivery reasons [#122855](https://github.com/openclaw/openclaw/pull/122855)
- Resume Codex parents after subagent fan-out [#123124](https://github.com/openclaw/openclaw/pull/123124)
- Keep Gateway-local node ownership in describe responses [#123165](https://github.com/openclaw/openclaw/pull/123165)
- Keep queued subagents alive while awaiting capacity [#123169](https://github.com/openclaw/openclaw/pull/123169)
- Clear phantom active sessions after terminal handling is lost [#123192](https://github.com/openclaw/openclaw/pull/123192)
- Prevent duplicate requester wakes after subagent completion [#123285](https://github.com/openclaw/openclaw/pull/123285)
- Restore cloud-worker turns after dispatch [#123337](https://github.com/openclaw/openclaw/pull/123337)
- Prevent duplicate final replies from embedded agent runs [#123391](https://github.com/openclaw/openclaw/pull/123391)
- Preserve Swarm collector failure details [#123468](https://github.com/openclaw/openclaw/pull/123468)
- Preserve active-turn steering after tool-authority checks [#123549](https://github.com/openclaw/openclaw/pull/123549)
- Prevent false failures after successful node-hosted turns [#123564](https://github.com/openclaw/openclaw/pull/123564)
- Expire stale paired-node worker environments after 14 days [#123673](https://github.com/openclaw/openclaw/pull/123673)
- Bound persistent node-runner workspace growth [#123700](https://github.com/openclaw/openclaw/pull/123700)
- Prevent workspace sync files from being truncated by short writes [#123739](https://github.com/openclaw/openclaw/pull/123739)
- Surface node-worker Gateway connection failures [#123773](https://github.com/openclaw/openclaw/pull/123773)
- Retire worker placements after sessions disappear [#123785](https://github.com/openclaw/openclaw/pull/123785)
- Prevent false TLS failures after node-host turns [#123790](https://github.com/openclaw/openclaw/pull/123790)
- Allow cloud-worker bootstrap over slow uplinks [#123919](https://github.com/openclaw/openclaw/pull/123919)
- Separate concurrent cloud-worker runtime modes [#123946](https://github.com/openclaw/openclaw/pull/123946)
- fix(gateway): frozen worker processes never resume when the host ps stalls [#123976](https://github.com/openclaw/openclaw/pull/123976)
- Make dropped targeted Gateway events detectable [#123999](https://github.com/openclaw/openclaw/pull/123999)
- Cancel pending ACP prompts during bridge shutdown [#124068](https://github.com/openclaw/openclaw/pull/124068)
- Release stale cloud-worker claims after reconciliation failure [#124368](https://github.com/openclaw/openclaw/pull/124368)
- Keep large worker-placement sweeps responsive [#124372](https://github.com/openclaw/openclaw/pull/124372)
- Reconcile cloud workspaces with more than 25,000 files [#124373](https://github.com/openclaw/openclaw/pull/124373)
- Report worker errors returned before launch [#124387](https://github.com/openclaw/openclaw/pull/124387)
- fix(subagents): bound settle-wake deferrals to prevent indefinite parking [#124408](https://github.com/openclaw/openclaw/pull/124408)
- Prune obsolete worker bundles on paired nodes [#124590](https://github.com/openclaw/openclaw/pull/124590)
- Recover staged remote-exec results after restart [#124619](https://github.com/openclaw/openclaw/pull/124619)
- Stop ACPX session resets from silently skipping runtime hooks [#124628](https://github.com/openclaw/openclaw/pull/124628)
- Prevent concurrent worker starts from cancelling a valid connection [#124638](https://github.com/openclaw/openclaw/pull/124638)
- Prevent bad broadcasts from reconnecting every client [#124726](https://github.com/openclaw/openclaw/pull/124726)
- Preserve device-runner sessions through capacity faults [#124744](https://github.com/openclaw/openclaw/pull/124744)
- Recover channel turns across repeated Gateway restarts [#124746](https://github.com/openclaw/openclaw/pull/124746)
- Cancel running subagents through the Gateway [#124752](https://github.com/openclaw/openclaw/pull/124752)
- Preserve actionable stale-worker build failures [#124774](https://github.com/openclaw/openclaw/pull/124774)
- Accept local and reclaimed session cleanup results [#124791](https://github.com/openclaw/openclaw/pull/124791)
- Report and terminalize stale cloud-worker build failures [#124920](https://github.com/openclaw/openclaw/pull/124920)
- Ensure late steering receives a response before a run ends [#125038](https://github.com/openclaw/openclaw/pull/125038)
- Reject outdated workers during restart recovery [#125083](https://github.com/openclaw/openclaw/pull/125083)
- Show a waiting reply when sessions_yield pauses a turn [#125106](https://github.com/openclaw/openclaw/pull/125106)
- Stop restart recovery from claiming interrupted commands succeeded [#125209](https://github.com/openclaw/openclaw/pull/125209)
- fix(subagents): keep the failure cause on pending-error timeout announces [#125357](https://github.com/openclaw/openclaw/pull/125357)
- Start cloud workers from registered projects [#125680](https://github.com/openclaw/openclaw/pull/125680)
- Prevent stale steer cleanup from aborting a new run [#125763](https://github.com/openclaw/openclaw/pull/125763)
- Avoid session-store reads during streamed responses [#125872](https://github.com/openclaw/openclaw/pull/125872)
- Let Gateway choose the current run for steer sends [#125921](https://github.com/openclaw/openclaw/pull/125921)
- fix(diagnostics): defer watchdog abort during preflight [#125929](https://github.com/openclaw/openclaw/pull/125929)
- Route detached subagent announcements through their Gateway instance [#125946](https://github.com/openclaw/openclaw/pull/125946)
- Restore detached subagent completion delivery [#126040](https://github.com/openclaw/openclaw/pull/126040)
- Require authoritative final reply evidence for subagents [#126075](https://github.com/openclaw/openclaw/pull/126075)
- Keep session run identities accurate across clients [#126106](https://github.com/openclaw/openclaw/pull/126106)
- Keep channel subagent completions bound to their Gateway [#126113](https://github.com/openclaw/openclaw/pull/126113)
- Deliver subagent completions after parent turns end [#126122](https://github.com/openclaw/openclaw/pull/126122)
- Bound Gateway audit and Codex output backlogs [#126154](https://github.com/openclaw/openclaw/pull/126154)
- Preserve plugin subagent wait lifecycle details [#126167](https://github.com/openclaw/openclaw/pull/126167)
- Record delivery for empty subagent completions sent through messaging [#126179](https://github.com/openclaw/openclaw/pull/126179)
- Clear stale sub-agent failure warnings after a successful retry [#126218](https://github.com/openclaw/openclaw/pull/126218)
- Make session interrupts target the correct active turn [#126291](https://github.com/openclaw/openclaw/pull/126291)
- Apply cloud worker profiles for ported SSH remotes [#126343](https://github.com/openclaw/openclaw/pull/126343)
- Explain why deleted sessions keep managed worktrees [#126347](https://github.com/openclaw/openclaw/pull/126347)
- Let enrolled nodes reconnect during Gateway startup [#126601](https://github.com/openclaw/openclaw/pull/126601)
- Preserve worker results when scratch cleanup fails [#126849](https://github.com/openclaw/openclaw/pull/126849)
- Require a real final answer before delegated replies complete [#126925](https://github.com/openclaw/openclaw/pull/126925)
- fix(agents): deliver yielded requester settle finals [#127292](https://github.com/openclaw/openclaw/pull/127292)
- fix(crabbox): decouple lease heartbeat budget from renewal cadence [#127559](https://github.com/openclaw/openclaw/pull/127559)
- fix(gateway): let cloud sessions retry failed worker cleanup [#127660](https://github.com/openclaw/openclaw/pull/127660)
- fix(gateway): prevent sessions from using unconfigured agents [#127661](https://github.com/openclaw/openclaw/pull/127661)
- fix(agents): preserve authoritative child completion results [#127739](https://github.com/openclaw/openclaw/pull/127739)
- fix(agents): restore system-agent delegation in channel turns [#128084](https://github.com/openclaw/openclaw/pull/128084)
- Resume yielded requesters after visible session spawns [#128096](https://github.com/openclaw/openclaw/pull/128096)
- fix(gateway): avoid failed worker cleanup blocking startup [#128103](https://github.com/openclaw/openclaw/pull/128103)
- fix(subagents): interrupted tasks lose real user instructions after restart [#128104](https://github.com/openclaw/openclaw/pull/128104)
- fix(crabbox): preserve Machine0 provisioning budget [#128185](https://github.com/openclaw/openclaw/pull/128185)
- fix(agents): status-only replies silently suppress fallback and task completion [#128269](https://github.com/openclaw/openclaw/pull/128269)
- fix(gateway): keep replacement requests alive across reconnect cleanup [#128393](https://github.com/openclaw/openclaw/pull/128393)
- fix(nodes): retry automatic placement across eligible devices [#128566](https://github.com/openclaw/openclaw/pull/128566)
- fix(subagents): hide private commentary from logs and completion announcements [#128584](https://github.com/openclaw/openclaw/pull/128584)
- fix(gateway): preserve active cloud sessions during maintenance [#128588](https://github.com/openclaw/openclaw/pull/128588)
- fix(gateway): reclaim cloud workers before session recovery [#128597](https://github.com/openclaw/openclaw/pull/128597)
- fix(worker): support Windows shared-host quiescence [#128628](https://github.com/openclaw/openclaw/pull/128628)
- fix(nodes): require matching launch and turn identity [#128722](https://github.com/openclaw/openclaw/pull/128722)
- fix(gateway): skip worker bootstrap when teardown is pending [#128745](https://github.com/openclaw/openclaw/pull/128745)
- fix(gateway): keep cloud-managed nodes out of device placement [#128780](https://github.com/openclaw/openclaw/pull/128780)
- fix(node-host): recover worker hosting after transient initialization failures [#128798](https://github.com/openclaw/openclaw/pull/128798)
- fix(agents): transient final-call failures discard a completed tool turn [#128840](https://github.com/openclaw/openclaw/pull/128840)
- fix(gateway): wait for restart recovery execution start [#128843](https://github.com/openclaw/openclaw/pull/128843)
- fix(gateway): publish cloud placement changes [#128914](https://github.com/openclaw/openclaw/pull/128914)
- fix(crabbox): dispose heartbeat generations [#128957](https://github.com/openclaw/openclaw/pull/128957)
- fix(workers): preserve v1 bundle identity on Windows [#128989](https://github.com/openclaw/openclaw/pull/128989)
- fix(agents): child tasks lose findings and actionable failure causes [#129074](https://github.com/openclaw/openclaw/pull/129074)
- fix(nodes): keep starting containers out of the exited state [#129102](https://github.com/openclaw/openclaw/pull/129102)
- fix(codex): preserve native subagent gateway delivery [#129109](https://github.com/openclaw/openclaw/pull/129109)
- fix(workers): retry interrupted workspace lease releases [#129221](https://github.com/openclaw/openclaw/pull/129221)
- fix: cloud worker transfers fail after plain workspace results are staged [#129223](https://github.com/openclaw/openclaw/pull/129223)
- fix(workers): preserve executable workspace files on Windows nodes [#129226](https://github.com/openclaw/openclaw/pull/129226)
- fix(agent-core): close tool batches at the launch boundary [#129293](https://github.com/openclaw/openclaw/pull/129293)
- fix(gateway): reconnect clients after failed WebSocket delivery [#129458](https://github.com/openclaw/openclaw/pull/129458)
- fix(worker): honor full access on paired node sessions [#129537](https://github.com/openclaw/openclaw/pull/129537)
- fix(agents): avoid superseding terminal run owners [#129629](https://github.com/openclaw/openclaw/pull/129629)
- refactor(workers): unify cloud bootstrap lifecycle [#129719](https://github.com/openclaw/openclaw/pull/129719)
- fix(subagents): preserve pending completions across delete cleanup and restore [#129754](https://github.com/openclaw/openclaw/pull/129754)
- fix(workers): keep remote execution on its selected node [#129929](https://github.com/openclaw/openclaw/pull/129929)
- fix(subagents): a completed subagent does not wake an idle parent until someone sends a message [#129993](https://github.com/openclaw/openclaw/pull/129993)
- fix(agents): strip external-content nonce so loop detection blocks repeated wrapped failures [#130261](https://github.com/openclaw/openclaw/pull/130261)
- Fix missing replies after native Codex subagents finish [#130311](https://github.com/openclaw/openclaw/pull/130311)
- Keep native completion receipts through child recovery [#130347](https://github.com/openclaw/openclaw/pull/130347)
- fix(workers): recheck idle and node readiness after waits [#130390](https://github.com/openclaw/openclaw/pull/130390)
- improve(worker): diagnose admission-deadline failures and widen daemon revalidation budget [#130435](https://github.com/openclaw/openclaw/pull/130435)
- fix(workers): report full nodes as at capacity, not offline [#130445](https://github.com/openclaw/openclaw/pull/130445)
- fix(workers): protect in-flight workspace manifests from concurrent retention [#130449](https://github.com/openclaw/openclaw/pull/130449)
- fix(gateway): recover admitted turns across restart [#130491](https://github.com/openclaw/openclaw/pull/130491)
- fix(subagents): reconcile transport-ambiguous dispatch instead of misreporting an accepted run [#130586](https://github.com/openclaw/openclaw/pull/130586)
- fix(gateway): finish node disconnect cleanup before yielding [#130631](https://github.com/openclaw/openclaw/pull/130631)
- fix(agents): preserve silent reply after settled tools [#130675](https://github.com/openclaw/openclaw/pull/130675)
- fix: session creation targets the wrong Gateway after admission [#130686](https://github.com/openclaw/openclaw/pull/130686)
- fix: nested worker delegation no longer times out [#130691](https://github.com/openclaw/openclaw/pull/130691)
- fix(agents): continue settled tool batches after a transport drop [#130721](https://github.com/openclaw/openclaw/pull/130721)
- fix(gateway): pin runtime generation at admission [#131120](https://github.com/openclaw/openclaw/pull/131120)
- fix(gateway): preserve stateless Responses history replay [#131197](https://github.com/openclaw/openclaw/pull/131197)
- fix(agents): allow uncategorized hidden and ACP spawns [#131736](https://github.com/openclaw/openclaw/pull/131736)
- fix: preserve transcript recovery and prerelease update routing [#132598](https://github.com/openclaw/openclaw/pull/132598)
- Preserve explicit main-agent bindings in multi-agent configurations [#89419](https://github.com/openclaw/openclaw/pull/89419)
- Retire stale subagent runs after gateway restarts [#90817](https://github.com/openclaw/openclaw/pull/90817)
- Preserve chat abort results after dispatch rejection [#91000](https://github.com/openclaw/openclaw/pull/91000)
- Prevent duplicate inter-agent sends after compaction [#93293](https://github.com/openclaw/openclaw/pull/93293)
- Keep yielded parent tasks running while continuation work remains [#95996](https://github.com/openclaw/openclaw/pull/95996)
- Stop A2A handoffs from re-sending message-tool replies [#97259](https://github.com/openclaw/openclaw/pull/97259)
- Restore gateway routing for session dispatch [4f86a29](https://github.com/openclaw/openclaw/commit/4f86a29)
- Keep long steering metadata valid around emoji boundaries [#101736](https://github.com/openclaw/openclaw/pull/101736)
- Prevent stale final replies after a session reset or deletion [#102128](https://github.com/openclaw/openclaw/pull/102128)
- Keep ACP steer acknowledgements emoji-safe [#102583](https://github.com/openclaw/openclaw/pull/102583)
- Preserve why child runs stopped in session state [#104676](https://github.com/openclaw/openclaw/pull/104676)
- Keep masked subagent run IDs valid around emoji [#104874](https://github.com/openclaw/openclaw/pull/104874)
- Preserve cancellation and timeout reasons in active agent sessions [#113693](https://github.com/openclaw/openclaw/pull/113693)
- Reject worktree sessions from repositories without commits [#117447](https://github.com/openclaw/openclaw/pull/117447)
- Consolidate normalization helpers across production [#120350](https://github.com/openclaw/openclaw/pull/120350)
- Keep simultaneous steering messages paired with their own delivery [#120770](https://github.com/openclaw/openclaw/pull/120770)
- Preserve Cloud Worker teardown failures during reclaim [#121520](https://github.com/openclaw/openclaw/pull/121520)
- Let timed-out cloud dispatch retries rejoin the running operation [#121616](https://github.com/openclaw/openclaw/pull/121616)
- Retry persisted subagent recovery after transient failures [#121766](https://github.com/openclaw/openclaw/pull/121766)
- fix(gateway): invalidate stale worker disk-space projections [#123442](https://github.com/openclaw/openclaw/pull/123442)
- Stop startup jitter from looking like a Gateway stall [#123461](https://github.com/openclaw/openclaw/pull/123461)
- Stop duplicate cancellation attempts after a node worker deadline [#123462](https://github.com/openclaw/openclaw/pull/123462)
- Clear expired phantom active sessions during gateway maintenance [#123532](https://github.com/openclaw/openclaw/pull/123532)
- Preserve SSH failure diagnostics while tightening regression gates [#123606](https://github.com/openclaw/openclaw/pull/123606)
- Give spawned child agents exact staged attachment paths [#123676](https://github.com/openclaw/openclaw/pull/123676)
- Report unsupported node events explicitly [#123719](https://github.com/openclaw/openclaw/pull/123719)
- Clean node workspace transfer scratch across restarts [#123859](https://github.com/openclaw/openclaw/pull/123859)
- Bound Gateway worker-bundle cache growth [#123901](https://github.com/openclaw/openclaw/pull/123901)
- Recognize active native Codex children as yield continuations [#124004](https://github.com/openclaw/openclaw/pull/124004)
- Clean stale node worker bundle staging [#124057](https://github.com/openclaw/openclaw/pull/124057)
- Keep recovered node workers connecting until validation completes [#124109](https://github.com/openclaw/openclaw/pull/124109)
- fix(agents): bound escaped output for the third child-result call site [#124171](https://github.com/openclaw/openclaw/pull/124171)
- Distinguish busy device workers from disconnected ones [#124340](https://github.com/openclaw/openclaw/pull/124340)
- Preserve device-worker capacity failure messages [#124574](https://github.com/openclaw/openclaw/pull/124574)
- Warn when worker-placement session evidence cannot be resolved [#124635](https://github.com/openclaw/openclaw/pull/124635)
- Prevent side-effect replay after restart [#124737](https://github.com/openclaw/openclaw/pull/124737)
- Surface failed node event delivery [#124798](https://github.com/openclaw/openclaw/pull/124798)
- Keep worker reconciliation running through SQLite locks [#125058](https://github.com/openclaw/openclaw/pull/125058)
- Reject agent runs on unusable managed worktrees [#125341](https://github.com/openclaw/openclaw/pull/125341)
- Enforce one transport mode per cloud worker provider [#125384](https://github.com/openclaw/openclaw/pull/125384)
- fix(agents): stop canceled subagents reporting timeouts [#125407](https://github.com/openclaw/openclaw/pull/125407)
- Allow direct sessions in non-Git projects [#125657](https://github.com/openclaw/openclaw/pull/125657)
- Prevent cancelled steering messages from being queued [#126314](https://github.com/openclaw/openclaw/pull/126314)
- Preserve silent completion for CLI-backed child agents [#126379](https://github.com/openclaw/openclaw/pull/126379)
- Harden node-carried Cloud Worker Desktop sessions [#126425](https://github.com/openclaw/openclaw/pull/126425)
- Recover cloud workers after uncertain cleanup [#126465](https://github.com/openclaw/openclaw/pull/126465)
- fix(gateway): prevent interrupt failures from blocking session lifecycle [#126546](https://github.com/openclaw/openclaw/pull/126546)
- fix(gateway): prevent requests stalling after reconnect callbacks [#128268](https://github.com/openclaw/openclaw/pull/128268)
- fix(gateway): surface cloud workspace recovery failures [#128864](https://github.com/openclaw/openclaw/pull/128864)
- fix(workers): preserve workspace reconciliation failures [#129240](https://github.com/openclaw/openclaw/pull/129240)
- fix(node-host): drain all workers before shutdown failures [#129699](https://github.com/openclaw/openclaw/pull/129699)

</details>

</Accordion>

<Accordion title="Conversations, history, and stored data">

One accepted user turn now stays one turn across the repaired retry and restart paths instead of being written twice. `/new` and `/reset` also preserve the underlying transcript position while clearing the visible conversation, so resetting what you see does not lose OpenClaw's place in the [saved history](/concepts/session).

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Let legacy state migrations converge after archive collisions [#102780](https://github.com/openclaw/openclaw/pull/102780)
- Move Web Push state to shared SQLite [#103294](https://github.com/openclaw/openclaw/pull/103294)
- Preserve user turns across incomplete agent retries [#103634](https://github.com/openclaw/openclaw/pull/103634)
- Reject and repair zero session retention durations [#104516](https://github.com/openclaw/openclaw/pull/104516)
- Unblock upgrades with recoverable legacy migration state [#104529](https://github.com/openclaw/openclaw/pull/104529)
- Harden interrupted SQLite session migration recovery [#105358](https://github.com/openclaw/openclaw/pull/105358)
- Preserve complete SQLite recovery file sets [#105370](https://github.com/openclaw/openclaw/pull/105370)
- Restore compaction for Codex sessions using ChatGPT OAuth [#105997](https://github.com/openclaw/openclaw/pull/105997)
- Serialize SQLite maintenance with Gateway ownership [#106210](https://github.com/openclaw/openclaw/pull/106210)
- Prevent legacy migration residue from blocking gateway startup [#107002](https://github.com/openclaw/openclaw/pull/107002)
- Migrate dormant older session databases before startup compaction [#107803](https://github.com/openclaw/openclaw/pull/107803)
- Preserve transcripts until session eviction is durable [#108378](https://github.com/openclaw/openclaw/pull/108378)
- Harden SQLite upgrades and concurrent storage access [#108663](https://github.com/openclaw/openclaw/pull/108663)
- Prevent dev-channel state backups from hanging [#109090](https://github.com/openclaw/openclaw/pull/109090)
- Preserve transcripts when provider configs omit model lists [#109252](https://github.com/openclaw/openclaw/pull/109252)
- Harden long-session compaction and agent-loop turn handling [#109709](https://github.com/openclaw/openclaw/pull/109709)
- Honor configured session-entry limits during writes [#110241](https://github.com/openclaw/openclaw/pull/110241)
- Block incompatible database downgrades and move full checks off the hot path [#110271](https://github.com/openclaw/openclaw/pull/110271)
- Preserve database quarantines when the primary database is damaged [#110453](https://github.com/openclaw/openclaw/pull/110453)
- Archive full transcripts before manual compaction [#111122](https://github.com/openclaw/openclaw/pull/111122)
- Make session lineage durable and auditable [#111861](https://github.com/openclaw/openclaw/pull/111861)
- Stop SQLite maintenance before mutating hard-linked sidecars [#112224](https://github.com/openclaw/openclaw/pull/112224)
- Preserve transcript cursors across session resets [#112988](https://github.com/openclaw/openclaw/pull/112988)
- Preserve SQLite state across maintenance races [#113216](https://github.com/openclaw/openclaw/pull/113216)
- Publish backup archives atomically and durably [#113302](https://github.com/openclaw/openclaw/pull/113302)
- Support deep Windows SQLite state paths [#113336](https://github.com/openclaw/openclaw/pull/113336)
- Make SQLite snapshot publication crash-recoverable [#113367](https://github.com/openclaw/openclaw/pull/113367)
- Repair physically corrupted canonical SQLite indexes [#113382](https://github.com/openclaw/openclaw/pull/113382)
- Keep SQLite snapshot WAL growth bounded during active writes [#113385](https://github.com/openclaw/openclaw/pull/113385)
- Make filesystem publication crash-durable [#113453](https://github.com/openclaw/openclaw/pull/113453)
- Prevent stale SQLite verification from quarantining replacements [#113459](https://github.com/openclaw/openclaw/pull/113459)
- Keep invalid SQLite schema repair atomic [#113592](https://github.com/openclaw/openclaw/pull/113592)
- Recover complete SQLite backups after interrupted commit [#113607](https://github.com/openclaw/openclaw/pull/113607)
- Keep SQLite snapshots progressing during active writes [#113708](https://github.com/openclaw/openclaw/pull/113708)
- Speed up session lists on large SQLite stores [#113959](https://github.com/openclaw/openclaw/pull/113959)
- Make the auto-compaction enable setting valid and effective [#114118](https://github.com/openclaw/openclaw/pull/114118)
- Recover repaired shared-state databases without restarting the Gateway [#114278](https://github.com/openclaw/openclaw/pull/114278)
- Keep session reads and transcript history consistent [#114369](https://github.com/openclaw/openclaw/pull/114369)
- Correct compaction estimates for CJK text [#114386](https://github.com/openclaw/openclaw/pull/114386)
- Preserve pruned session history when compaction summarization fails [#114696](https://github.com/openclaw/openclaw/pull/114696)
- Keep CJK tool results within context budgets [#114755](https://github.com/openclaw/openclaw/pull/114755)
- Keep generated images visible after agent turns [#115255](https://github.com/openclaw/openclaw/pull/115255)
- Prevent Gateway OOM from bloated usage rollups [#115347](https://github.com/openclaw/openclaw/pull/115347)
- Prevent duplicate persisted user turns and speed repeated agent sessions [#115474](https://github.com/openclaw/openclaw/pull/115474)
- Keep concurrent session writes on one reachable transcript branch [#115658](https://github.com/openclaw/openclaw/pull/115658)
- Preserve messages sent with session reset commands [#116195](https://github.com/openclaw/openclaw/pull/116195)
- Keep reply text in transcripts when media is attached [#116225](https://github.com/openclaw/openclaw/pull/116225)
- Keep conversation resets durable when replacement setup fails [#116247](https://github.com/openclaw/openclaw/pull/116247)
- Keep tool calls paired after a mid-turn abort [#116642](https://github.com/openclaw/openclaw/pull/116642)
- Preserve tool outcomes and bounded diagnostics through compaction [#116895](https://github.com/openclaw/openclaw/pull/116895)
- Repair additive agent database schema during updates [#116980](https://github.com/openclaw/openclaw/pull/116980)
- Compact SQLite sessions after newly appended content [#117076](https://github.com/openclaw/openclaw/pull/117076)
- Restore first-run Gateway readiness on fresh state [#117257](https://github.com/openclaw/openclaw/pull/117257)
- Preserve accepted prompts across Gateway restarts [#117260](https://github.com/openclaw/openclaw/pull/117260)
- Preserve live session rows during startup migration [#117272](https://github.com/openclaw/openclaw/pull/117272)
- Recover delivered replies after transcript write failures [#117845](https://github.com/openclaw/openclaw/pull/117845)
- Protect chat-history attachments from generic TTL cleanup [#119127](https://github.com/openclaw/openclaw/pull/119127)
- Retry unusable automatic compaction summaries [#119137](https://github.com/openclaw/openclaw/pull/119137)
- Prevent zero disk budgets from deleting session history [#119422](https://github.com/openclaw/openclaw/pull/119422)
- Persist fresh SQLite sessions before the first message [#119473](https://github.com/openclaw/openclaw/pull/119473)
- Archive cron-run transcripts before task maintenance deletes them [#119511](https://github.com/openclaw/openclaw/pull/119511)
- Allow backups while the gateway is running [#119782](https://github.com/openclaw/openclaw/pull/119782)
- Prevent zero high-water targets from clearing session history [#119909](https://github.com/openclaw/openclaw/pull/119909)
- Recover Codex sessions during required preflight compaction [#120197](https://github.com/openclaw/openclaw/pull/120197)
- Preserve user-created configuration backups [#120298](https://github.com/openclaw/openclaw/pull/120298)
- Stop completed sessions from staying marked active [#120424](https://github.com/openclaw/openclaw/pull/120424)
- Older agent databases upgrade without losing session visibility [#120437](https://github.com/openclaw/openclaw/pull/120437)
- Fence transcript writes to the admitted session run [#121003](https://github.com/openclaw/openclaw/pull/121003)
- Let replies proceed after transcript projection repair [#121025](https://github.com/openclaw/openclaw/pull/121025)
- Preserve real tool results across session resets [#121028](https://github.com/openclaw/openclaw/pull/121028)
- Protect externally supervised shared state across releases [#121069](https://github.com/openclaw/openclaw/pull/121069)
- Preserve Gateway rollback across compatible database columns [#121075](https://github.com/openclaw/openclaw/pull/121075)
- Bind session archive and restore to the listed conversation [#121169](https://github.com/openclaw/openclaw/pull/121169)
- Preserve durable transcript ownership [#122729](https://github.com/openclaw/openclaw/pull/122729)
- Preserve fixed-store ownership during multi-agent migration [#123235](https://github.com/openclaw/openclaw/pull/123235)
- Keep long sessions recoverable through repeated context overflows [#123484](https://github.com/openclaw/openclaw/pull/123484)
- Preserve readable transcripts and archive cleanup deletions safely [#123495](https://github.com/openclaw/openclaw/pull/123495)
- Refresh Codex session meters after compaction [#123640](https://github.com/openclaw/openclaw/pull/123640)
- Preserve orphaned SQLite recovery sidecars safely [#123680](https://github.com/openclaw/openclaw/pull/123680)
- Fork active sessions from the last completed reply [#123718](https://github.com/openclaw/openclaw/pull/123718)
- Preserve generated compaction summaries under context overflow [#123827](https://github.com/openclaw/openclaw/pull/123827)
- Keep session catalogs bound to the right agent and Codex home [#123899](https://github.com/openclaw/openclaw/pull/123899)
- Make `/new` clear discarded transcript bytes from the context fuse [#124126](https://github.com/openclaw/openclaw/pull/124126)
- Let older state databases finish STRICT migration [#124282](https://github.com/openclaw/openclaw/pull/124282)
- Keep session listings responsive with many configured agents [#124453](https://github.com/openclaw/openclaw/pull/124453)
- Preserve readable session stores when a configured sibling is missing [#124617](https://github.com/openclaw/openclaw/pull/124617)
- Keep copied state directories self-contained [#124728](https://github.com/openclaw/openclaw/pull/124728)
- Preserve workspace instructions for queued turns after compaction [#124850](https://github.com/openclaw/openclaw/pull/124850)
- Make session compaction failures visible and recoverable [#125302](https://github.com/openclaw/openclaw/pull/125302)
- Repair stable state before Gateway startup [#125483](https://github.com/openclaw/openclaw/pull/125483)
- Recover final replies after native Codex compaction fails [#125895](https://github.com/openclaw/openclaw/pull/125895)
- Preserve generated media previews through durable recovery [#126261](https://github.com/openclaw/openclaw/pull/126261)
- Default embedded compaction to low reasoning [#126421](https://github.com/openclaw/openclaw/pull/126421)
- Stop persisting runtime-only skill catalogs in sessions [#126931](https://github.com/openclaw/openclaw/pull/126931)
- fix(sessions): preserve ownership across lifecycle and maintenance [#127344](https://github.com/openclaw/openclaw/pull/127344)
- fix: explicit session resets clear prior context [#127530](https://github.com/openclaw/openclaw/pull/127530)
- fix(agents): preserve real user turns during compaction [#127563](https://github.com/openclaw/openclaw/pull/127563)
- fix(sqlite): isolate read-only snapshot preparation to stop WAL lock drops [#127855](https://github.com/openclaw/openclaw/pull/127855)
- fix(codex): reclaim binding capacity after session deletion [#128366](https://github.com/openclaw/openclaw/pull/128366)
- fix(sessions): bound active transcript hydration [#129343](https://github.com/openclaw/openclaw/pull/129343)
- fix(compaction): summarize the prepared window and always restore audited identifiers [#129423](https://github.com/openclaw/openclaw/pull/129423)
- fix(agents): direct commands skip proactive compaction [#130863](https://github.com/openclaw/openclaw/pull/130863)
- Stop repeated compaction fallbacks while preserving session history [#86900](https://github.com/openclaw/openclaw/pull/86900)
- Keep historical delivery receipts out of model prompts [#99504](https://github.com/openclaw/openclaw/pull/99504)
- Preserve fresh tool output under context pressure [#99756](https://github.com/openclaw/openclaw/pull/99756)
- Restore SQLite terminal-session freshness checks [2f94650](https://github.com/openclaw/openclaw/commit/2f94650)
- fix(sessions): search visible categories across clients (#118912) [43ffe41](https://github.com/openclaw/openclaw/commit/43ffe41)
- Keep conversation routing consistent when SQLite fails [#101023](https://github.com/openclaw/openclaw/pull/101023)
- Keep compaction boundaries reachable in paginated session history [#104250](https://github.com/openclaw/openclaw/pull/104250)
- Prevent large legacy session migrations from stalling [#104737](https://github.com/openclaw/openclaw/pull/104737)
- Restore history and usage reads for compressed transcript archives [#104795](https://github.com/openclaw/openclaw/pull/104795)
- Refuse backup and compaction from corrupt SQLite indexes [#104938](https://github.com/openclaw/openclaw/pull/104938)
- Restore byte-based auto-compaction for SQLite sessions [#104940](https://github.com/openclaw/openclaw/pull/104940)
- Validate shared SQLite state before OpenClaw mutates it [#104952](https://github.com/openclaw/openclaw/pull/104952)
- Reject corrupt agent state before startup changes [#105179](https://github.com/openclaw/openclaw/pull/105179)
- Reject orphaned SQLite state before mutation or backup [#105222](https://github.com/openclaw/openclaw/pull/105222)
- Remove transcript search data with deleted sessions [#105249](https://github.com/openclaw/openclaw/pull/105249)
- Repair drifted SQLite unique-index definitions safely [#105260](https://github.com/openclaw/openclaw/pull/105260)
- Canonicalize macOS session-migration target aliases [#105390](https://github.com/openclaw/openclaw/pull/105390)
- Keep session search fast as transcript history grows [#105585](https://github.com/openclaw/openclaw/pull/105585)
- Reject unsafe SQLite schema drift during maintenance [#105767](https://github.com/openclaw/openclaw/pull/105767)
- Surface transcript filesystem errors instead of empty history [#106412](https://github.com/openclaw/openclaw/pull/106412)
- Prevent session error handlers from leaving rejected tasks [#106951](https://github.com/openclaw/openclaw/pull/106951)
- Exclude migration archives from session disk limits [#107238](https://github.com/openclaw/openclaw/pull/107238)
- Notify session watchers when upstream sessions disappear [#107356](https://github.com/openclaw/openclaw/pull/107356)
- Allow SQLite compaction with memory path search [#107809](https://github.com/openclaw/openclaw/pull/107809)
- Preserve CLI session history during transcript shrink races [#108072](https://github.com/openclaw/openclaw/pull/108072)
- Continuation sessions keep lightweight bootstrap across short file reads [#108253](https://github.com/openclaw/openclaw/pull/108253)
- Complete session tail reads on network filesystems [#108655](https://github.com/openclaw/openclaw/pull/108655)
- Keep session previews complete across short file reads [#108941](https://github.com/openclaw/openclaw/pull/108941)
- Bound SQLite mount checks during database startup [#109432](https://github.com/openclaw/openclaw/pull/109432)
- Persist failed bound ACP turns in session transcripts [#109683](https://github.com/openclaw/openclaw/pull/109683)
- Reject invalid session-history limits with HTTP 400 [#109743](https://github.com/openclaw/openclaw/pull/109743)
- Stop compaction from duplicating prior summaries [#109828](https://github.com/openclaw/openclaw/pull/109828)
- Bound workspace bootstrap and compaction reads [#109945](https://github.com/openclaw/openclaw/pull/109945)
- Stop cancelled compaction retries promptly [#110114](https://github.com/openclaw/openclaw/pull/110114)
- Stop Windows session-archive retry stalls [#110191](https://github.com/openclaw/openclaw/pull/110191)
- Preserve delivered partial replies after ACP cancellation [#110300](https://github.com/openclaw/openclaw/pull/110300)
- Preserve active turns during session compaction [#110389](https://github.com/openclaw/openclaw/pull/110389)
- Make managed-image state migration SQLite-portable [#111167](https://github.com/openclaw/openclaw/pull/111167)
- Let session migration skip invalid legacy cron stubs [#111168](https://github.com/openclaw/openclaw/pull/111168)
- Bound per-agent SQLite handles for large fleets [#111411](https://github.com/openclaw/openclaw/pull/111411)
- Preserve transcript cursors across normal embedded turns [#111949](https://github.com/openclaw/openclaw/pull/111949)
- Keep the Gateway responsive during transcript archiving [#112424](https://github.com/openclaw/openclaw/pull/112424)
- Preserve large inode identity during session migration [#112478](https://github.com/openclaw/openclaw/pull/112478)
- Protect active primary sessions from maintenance eviction [#112640](https://github.com/openclaw/openclaw/pull/112640)
- Restore v13 agent-database upgrades on SQLite 3.51 [#113151](https://github.com/openclaw/openclaw/pull/113151)
- Support long Windows SQLite snapshot paths [#113228](https://github.com/openclaw/openclaw/pull/113228)
- Restore all canonical SQLite uniqueness constraints [#113261](https://github.com/openclaw/openclaw/pull/113261)
- Reject invalid canonical SQLite backups [#113287](https://github.com/openclaw/openclaw/pull/113287)
- Verify SQLite backups and snapshots under long Windows paths [#113313](https://github.com/openclaw/openclaw/pull/113313)
- Repair canonical SQLite indexes before use [#113390](https://github.com/openclaw/openclaw/pull/113390)
- Enforce one SQLite connection boundary [#113418](https://github.com/openclaw/openclaw/pull/113418)
- Fail closed on SQLite schema loss during upgrades [#113473](https://github.com/openclaw/openclaw/pull/113473)
- Recover SQLite snapshots after killed rollback writers [#113580](https://github.com/openclaw/openclaw/pull/113580)
- Keep Codex sessions running when automatic compaction lacks host auth [#114001](https://github.com/openclaw/openclaw/pull/114001)
- Protect live SQLite WAL files during integrity checks [#114016](https://github.com/openclaw/openclaw/pull/114016)
- Show native history when adopting Pi and OpenCode sessions [#114040](https://github.com/openclaw/openclaw/pull/114040)
- Bound trajectory runtime-event storage [#114250](https://github.com/openclaw/openclaw/pull/114250)
- Preserve refreshed session usage and resume cron cleanup [#114539](https://github.com/openclaw/openclaw/pull/114539)
- Preserve active heartbeat sessions through canonical SQLite lifecycle handling [#114936](https://github.com/openclaw/openclaw/pull/114936)
- Run startup and Doctor state migrations in one ordered plan [#114938](https://github.com/openclaw/openclaw/pull/114938)
- Keep overflow-recovery transcript history append-only [#115310](https://github.com/openclaw/openclaw/pull/115310)
- Make Doctor refuse newer cron database schemas safely [#115447](https://github.com/openclaw/openclaw/pull/115447)
- Preserve transcripts when compaction summarization fails [#115500](https://github.com/openclaw/openclaw/pull/115500)
- Enforce the host transcript byte limit for Codex sessions [#115514](https://github.com/openclaw/openclaw/pull/115514)
- Keep Doctor running when an agent database is unusable [#115570](https://github.com/openclaw/openclaw/pull/115570)
- Bound memory used by live session history streams [#115599](https://github.com/openclaw/openclaw/pull/115599)
- Stop Codex OAuth compaction from falling back to API-key auth [#115666](https://github.com/openclaw/openclaw/pull/115666)
- Release closed SQLite session caches [#115794](https://github.com/openclaw/openclaw/pull/115794)
- Keep migrated sessions usable after restart [#116077](https://github.com/openclaw/openclaw/pull/116077)
- Preserve prompts in oversized trajectory events [#116220](https://github.com/openclaw/openclaw/pull/116220)
- Preserve caller-replaced SQLite targets on Windows [#116284](https://github.com/openclaw/openclaw/pull/116284)
- Honor HTTP Accept negotiation for session history [#116535](https://github.com/openclaw/openclaw/pull/116535)
- Let gateways recover from conflicting legacy runtime state [#116558](https://github.com/openclaw/openclaw/pull/116558)
- Resolve explicit main-session aliases correctly [#116636](https://github.com/openclaw/openclaw/pull/116636)
- Ignore stale upstream activity after session changes [#116864](https://github.com/openclaw/openclaw/pull/116864)
- Preserve persisted user turns after session restart [#116924](https://github.com/openclaw/openclaw/pull/116924)
- Preserve complete tool-call groups during oversized compaction [#116992](https://github.com/openclaw/openclaw/pull/116992)
- Restore continuation-skip behavior for SQLite-backed agent sessions [#117082](https://github.com/openclaw/openclaw/pull/117082)
- Preserve reconnected drafts across Gateway restarts [#117310](https://github.com/openclaw/openclaw/pull/117310)
- Make archived transcript fallback consistent [#117343](https://github.com/openclaw/openclaw/pull/117343)
- Preserve durable SQLite user turns during session reconciliation [#117393](https://github.com/openclaw/openclaw/pull/117393)
- Apply mixed chat settings in one session transaction [#117542](https://github.com/openclaw/openclaw/pull/117542)
- Surface transcript archive retention failures [#117761](https://github.com/openclaw/openclaw/pull/117761)
- Preserve conversation text when large images are omitted [#117792](https://github.com/openclaw/openclaw/pull/117792)
- Preserve queued messages during `/compact` [#117840](https://github.com/openclaw/openclaw/pull/117840)
- Bound compaction identifier scans on long tokens [#118422](https://github.com/openclaw/openclaw/pull/118422)
- Restore usage details for SQLite sessions [#118918](https://github.com/openclaw/openclaw/pull/118918)
- Preserve reset guidance for dynamic models [#119179](https://github.com/openclaw/openclaw/pull/119179)
- Reject transcript writes when a session rotates mid-append [#119221](https://github.com/openclaw/openclaw/pull/119221)
- Keep admitted user turns attached during retries [#119307](https://github.com/openclaw/openclaw/pull/119307)
- Keep session writes moving during transcript archival [#119460](https://github.com/openclaw/openclaw/pull/119460)
- Timestamp recovered Claude CLI history [#119528](https://github.com/openclaw/openclaw/pull/119528)
- Session lists refresh after external identity changes [#120203](https://github.com/openclaw/openclaw/pull/120203)
- Preserve token usage after failed compaction [#120264](https://github.com/openclaw/openclaw/pull/120264)
- Preserve context provenance across retries [#120509](https://github.com/openclaw/openclaw/pull/120509)
- fix(infra): detect virtiofs and 9p filesystems to prevent WAL corruption [#120597](https://github.com/openclaw/openclaw/pull/120597)
- Replace session write leases with durable writer claims [#121113](https://github.com/openclaw/openclaw/pull/121113)
- Keep reset-session tool results with retained calls [#121146](https://github.com/openclaw/openclaw/pull/121146)
- Prevent concurrent session changes from overwriting transcripts [#121284](https://github.com/openclaw/openclaw/pull/121284)
- Avoid full session scans after transcript writes [#121342](https://github.com/openclaw/openclaw/pull/121342)
- Avoid whole-store work for single-session updates [#121349](https://github.com/openclaw/openclaw/pull/121349)
- Align automation filters and avoid false SQLite corruption [#121429](https://github.com/openclaw/openclaw/pull/121429)
- Prevent false SQLite corruption during concurrent first startup [#121526](https://github.com/openclaw/openclaw/pull/121526)
- Improve session reliability during rapid workflows [#121680](https://github.com/openclaw/openclaw/pull/121680)
- Preserve mixed attachment order in chat history [#121980](https://github.com/openclaw/openclaw/pull/121980)
- Preserve transcripts when compaction validation fails [#122824](https://github.com/openclaw/openclaw/pull/122824)
- Keep internal recovery prompts out of transcripts [#122908](https://github.com/openclaw/openclaw/pull/122908)
- Repair upgrades from the shipped commitments schema [#122945](https://github.com/openclaw/openclaw/pull/122945)
- Preserve pinned conversations during session maintenance [#122990](https://github.com/openclaw/openclaw/pull/122990)
- Keep protected sessions outside the eviction quota [#123014](https://github.com/openclaw/openclaw/pull/123014)
- Count protected sessions toward the total retention cap [#123081](https://github.com/openclaw/openclaw/pull/123081)
- Preserve native CLI sessions through compaction [#123466](https://github.com/openclaw/openclaw/pull/123466)
- Preserve file context across conversation compaction [#123467](https://github.com/openclaw/openclaw/pull/123467)
- Clear stale CLI history after manual compaction [#123486](https://github.com/openclaw/openclaw/pull/123486)
- Preserve the shared SQLite WAL during auxiliary shutdown [#123777](https://github.com/openclaw/openclaw/pull/123777)
- Let compaction accept slash-delimited prose [#123832](https://github.com/openclaw/openclaw/pull/123832)
- Honor explicit legacy session owners in per-agent stores [#123887](https://github.com/openclaw/openclaw/pull/123887)
- Continue timeout recovery from the compacted transcript [#124000](https://github.com/openclaw/openclaw/pull/124000)
- Keep older session history reachable past hidden tails [#124120](https://github.com/openclaw/openclaw/pull/124120)
- Avoid repeated session-root scans in configured Control UI lists [#124384](https://github.com/openclaw/openclaw/pull/124384)
- fix(settings): take the settings file lock before the first-write read [#124471](https://github.com/openclaw/openclaw/pull/124471)
- Cap file lists in compaction summaries [#124577](https://github.com/openclaw/openclaw/pull/124577)
- Preserve running-task transcripts when cron data is unreadable [#124718](https://github.com/openclaw/openclaw/pull/124718)
- Recover retired multi-agent session stores during upgrade [#124846](https://github.com/openclaw/openclaw/pull/124846)
- fix(matrix): gateway fails to start when legacy credentials differ [#124893](https://github.com/openclaw/openclaw/pull/124893)
- Preserve default-agent ownership during session migration [#124928](https://github.com/openclaw/openclaw/pull/124928)
- Preserve Unicode sessions during SQLite upgrades [#124951](https://github.com/openclaw/openclaw/pull/124951)
- Restore legacy persisted-data validation compatibility [#125031](https://github.com/openclaw/openclaw/pull/125031)
- Stop empty legacy agent databases from blocking startup [#125172](https://github.com/openclaw/openclaw/pull/125172)
- Stop manual compaction backup leaks [#125183](https://github.com/openclaw/openclaw/pull/125183)
- fix(compaction): re-compact when last entry is a compaction record but context still exceeds window [#125210](https://github.com/openclaw/openclaw/pull/125210)
- Make session deletion and cleanup results accurate [#125217](https://github.com/openclaw/openclaw/pull/125217)
- Migrate legacy state to the configured system agent [#125266](https://github.com/openclaw/openclaw/pull/125266)
- Complete large session migrations promptly [#125300](https://github.com/openclaw/openclaw/pull/125300)
- Prevent Doctor timeouts on large SQLite migrations [#125361](https://github.com/openclaw/openclaw/pull/125361)
- Preserve the selected session folder in transcripts [#125484](https://github.com/openclaw/openclaw/pull/125484)
- Prevent Doctor stalls on large session migrations [#125510](https://github.com/openclaw/openclaw/pull/125510)
- Clean up orphaned media attachments safely [#125560](https://github.com/openclaw/openclaw/pull/125560)
- Warn agents when session search results are still indexing [#125582](https://github.com/openclaw/openclaw/pull/125582)
- Preserve structured tool results in Codex transcripts [#125610](https://github.com/openclaw/openclaw/pull/125610)
- Allow forced-stopped sessions to archive [#125614](https://github.com/openclaw/openclaw/pull/125614)
- fix(compaction): ignore decimal identifier fragments [#126089](https://github.com/openclaw/openclaw/pull/126089)
- Make compaction and branch summaries honor idle timeouts [#126159](https://github.com/openclaw/openclaw/pull/126159)
- fix(gateway): keep history active through terminal persistence [#126235](https://github.com/openclaw/openclaw/pull/126235)
- Restore upgrades from 2026.7.2-beta.4 agent state [#126354](https://github.com/openclaw/openclaw/pull/126354)
- Avoid retaining the full session store during child lookup [#126770](https://github.com/openclaw/openclaw/pull/126770)
- Reject stale session replacements after concurrent changes [#127027](https://github.com/openclaw/openclaw/pull/127027)
- fix(sessions): cleanup large backlogs without OOM [#127105](https://github.com/openclaw/openclaw/pull/127105)
- fix(sessions): preserve sessions when age pruning is disabled [#127277](https://github.com/openclaw/openclaw/pull/127277)
- fix(sessions): preserve assigned owners through Doctor and startup repairs [#127706](https://github.com/openclaw/openclaw/pull/127706)
- fix(sessions): stop /reset from hiding a message accepted at the same time [#127842](https://github.com/openclaw/openclaw/pull/127842)
- fix(sessions): preserve artifacts during canonical repair [#128317](https://github.com/openclaw/openclaw/pull/128317)
- fix(sessions): keep admin events out of model context [AI-assisted] [#128346](https://github.com/openclaw/openclaw/pull/128346)
- fix(sessions): delete progress cards with session artifacts [#128451](https://github.com/openclaw/openclaw/pull/128451)
- perf(sessions): avoid database maintenance during reads [#128631](https://github.com/openclaw/openclaw/pull/128631)
- fix(sqlite): stage read-only snapshots in private user cache [#128635](https://github.com/openclaw/openclaw/pull/128635)
- fix(compaction): retain audited facts when summaries exceed cap [#128968](https://github.com/openclaw/openclaw/pull/128968)
- fix: resume after settled-tool context overflow [#128970](https://github.com/openclaw/openclaw/pull/128970)
- perf(sessions): defer transcript index rebuilds to the reconcile worker [#129182](https://github.com/openclaw/openclaw/pull/129182)
- fix(sqlite): index agent session lookups [#129569](https://github.com/openclaw/openclaw/pull/129569)
- fix(compaction): protect manual commands from stale recovery [#129581](https://github.com/openclaw/openclaw/pull/129581)
- fix(sessions): release reconcile lease before terminal state (#130161) [#130185](https://github.com/openclaw/openclaw/pull/130185)
- fix(sessions): select the transcript header by type in bounded reads [#130342](https://github.com/openclaw/openclaw/pull/130342)
- fix(compaction): scope the transcript byte fuse to the latest compaction window [#130487](https://github.com/openclaw/openclaw/pull/130487)
- fix(agents): honor preflight compaction budget [#130562](https://github.com/openclaw/openclaw/pull/130562)
- fix(compaction): show the summarizer the audited latest ask [#130620](https://github.com/openclaw/openclaw/pull/130620)
- fix(sqlite): safely discard retired commitments state [#130629](https://github.com/openclaw/openclaw/pull/130629)
- fix(gateway): close the history stream startup event gap [#130633](https://github.com/openclaw/openclaw/pull/130633)
- fix(sessions): re-fetch agent-db handles at synchronous section entry [#130797](https://github.com/openclaw/openclaw/pull/130797)
- fix: spawned child history is denied after recency expiry [#131203](https://github.com/openclaw/openclaw/pull/131203)
- Preserve formatting across non-streaming reply chunks [#56145](https://github.com/openclaw/openclaw/pull/56145)
- Keep queued turns from steering replies away from the latest prompt [#90759](https://github.com/openclaw/openclaw/pull/90759)
- Make manual compaction stoppable [#90821](https://github.com/openclaw/openclaw/pull/90821)
- Preserve whole characters in post-compaction context [#102515](https://github.com/openclaw/openclaw/pull/102515)
- Cap oversized Gateway history limits correctly [#104263](https://github.com/openclaw/openclaw/pull/104263)
- Preserve Unicode in persisted tool details [#104540](https://github.com/openclaw/openclaw/pull/104540)
- Reject invalid Claude session pagination cursors [#104967](https://github.com/openclaw/openclaw/pull/104967)
- Reject incomplete SQLite schemas before maintenance [#105583](https://github.com/openclaw/openclaw/pull/105583)
- Reject unsafe SQLite bigint conversions [#106081](https://github.com/openclaw/openclaw/pull/106081)
- Reject malformed session pagination cursors [#107895](https://github.com/openclaw/openclaw/pull/107895)
- Allow disabling the session disk budget in configuration [#108046](https://github.com/openclaw/openclaw/pull/108046)
- Preserve session-tail events across short reads [#108127](https://github.com/openclaw/openclaw/pull/108127)
- Preserve legacy session start times across short reads [#109205](https://github.com/openclaw/openclaw/pull/109205)
- Clean trajectory runtime files after short reads [#109206](https://github.com/openclaw/openclaw/pull/109206)
- Repair fractional restart handoffs during doctor upgrades [#110231](https://github.com/openclaw/openclaw/pull/110231)
- Preserve timestamps when importing malformed Claude history [#110536](https://github.com/openclaw/openclaw/pull/110536)
- Harden Doctor legacy session-store reads [#110772](https://github.com/openclaw/openclaw/pull/110772)
- Preserve conversation anchors across repeated compaction [#112755](https://github.com/openclaw/openclaw/pull/112755)
- Bound retained SQLite WAL files after checkpoint recovery [#112951](https://github.com/openclaw/openclaw/pull/112951)
- Repair transcripts when plugins block tool results [#113697](https://github.com/openclaw/openclaw/pull/113697)
- Let agents archive their own sessions after a turn [#114522](https://github.com/openclaw/openclaw/pull/114522)
- Make the transcript byte limit a single compaction opt-in [#115206](https://github.com/openclaw/openclaw/pull/115206)
- Stop false slow-lock warnings for zero-timeout SQLite commits [#115990](https://github.com/openclaw/openclaw/pull/115990)
- Honor cancellation while waiting for session file locks [#117446](https://github.com/openclaw/openclaw/pull/117446)
- Warn when live transcript broadcasts fail [#117539](https://github.com/openclaw/openclaw/pull/117539)
- Avoid unnecessary compaction after mid-turn precheck [#117963](https://github.com/openclaw/openclaw/pull/117963)
- Wait for SQLite locks during startup checkpoints [#118022](https://github.com/openclaw/openclaw/pull/118022)
- Reject invalid session-history cursors [#119443](https://github.com/openclaw/openclaw/pull/119443)
- Recover compaction from sparse assistant history [#122159](https://github.com/openclaw/openclaw/pull/122159)
- Repair mis-stamped v17 agent databases [#122171](https://github.com/openclaw/openclaw/pull/122171)
- Resolve per-agent transcripts for batched session titles [#122338](https://github.com/openclaw/openclaw/pull/122338)
- Keep recovered media in the owning agent transcript [#124111](https://github.com/openclaw/openclaw/pull/124111)
- Keep projected session-history rows reachable across pages [#124145](https://github.com/openclaw/openclaw/pull/124145)
- Report self-archive success before ending the active turn [#124896](https://github.com/openclaw/openclaw/pull/124896)
- Report concurrent session changes during deletion [#125188](https://github.com/openclaw/openclaw/pull/125188)
- fix(gateway): honor requested session preview length [#125201](https://github.com/openclaw/openclaw/pull/125201)
- Surface transcript read failures during compaction [#125741](https://github.com/openclaw/openclaw/pull/125741)
- Clean up orphaned media after sessionless agent runs [#125938](https://github.com/openclaw/openclaw/pull/125938)
- fix(gateway): record display-cap truncation structurally on projected chat messages [#126342](https://github.com/openclaw/openclaw/pull/126342)
- fix(sessions): history pagination skips projected messages or stops advancing [#129099](https://github.com/openclaw/openclaw/pull/129099)
- Reject blank session-history keys at the Gateway route [#85261](https://github.com/openclaw/openclaw/pull/85261)
- Surface session-delivery retry-state write failures [#97024](https://github.com/openclaw/openclaw/pull/97024)

</details>

</Accordion>

<Accordion title="Agent tools and code execution">

[Code Mode](/tools/code-mode) can keep an eligible task moving when it fails before taking action or while discovering tools and skills, and nested tool calls now finish or cancel cleanly instead of hanging. Once a write may have happened, recovery is limited to checking what changed rather than replaying an uncertain action, while cancellation, policy denial, and other final outcomes still stop the task.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Require integer limits for the session find tool [#105931](https://github.com/openclaw/openclaw/pull/105931)

**Bug fixes**

- Enable CLI-backed agents to run commands on connected nodes [#103936](https://github.com/openclaw/openclaw/pull/103936)
- Make node-hosted skills readable and runnable on their publishing node [#104832](https://github.com/openclaw/openclaw/pull/104832)
- Let vision models inspect discovered images directly [#107311](https://github.com/openclaw/openclaw/pull/107311)
- Preserve ignored managed-worktree state during automatic cleanup [#108401](https://github.com/openclaw/openclaw/pull/108401)
- Stop image and PDF work when an agent run is cancelled [#112644](https://github.com/openclaw/openclaw/pull/112644)
- Preserve prompt caches across tool discovery [#114572](https://github.com/openclaw/openclaw/pull/114572)
- Code Mode accepts safe templates and regular expressions [#114651](https://github.com/openclaw/openclaw/pull/114651)
- Keep required agent tools visible under tool search [#114664](https://github.com/openclaw/openclaw/pull/114664)
- Preserve required Code Mode tools and secure suspended runs [#114778](https://github.com/openclaw/openclaw/pull/114778)
- Preserve concurrent Code Mode tool execution [#114884](https://github.com/openclaw/openclaw/pull/114884)
- Prevent apply_patch from overwriting existing files [#114911](https://github.com/openclaw/openclaw/pull/114911)
- Bound and speed up Code Mode worker lifecycles [#114945](https://github.com/openclaw/openclaw/pull/114945)
- Prevent silent corruption when editing non-UTF-8 files [#115088](https://github.com/openclaw/openclaw/pull/115088)
- Prevent node hangs and runaway local-model discovery [#115248](https://github.com/openclaw/openclaw/pull/115248)
- Prevent Code Mode resume loss and unbounded TypeScript preparation [#115314](https://github.com/openclaw/openclaw/pull/115314)
- Make Code Mode reliable across restarts and providers [#115379](https://github.com/openclaw/openclaw/pull/115379)
- Preserve original line endings during agent edits [#116011](https://github.com/openclaw/openclaw/pull/116011)
- Preserve unchanged file bytes during fuzzy apply_patch updates [#116128](https://github.com/openclaw/openclaw/pull/116128)
- Preserve untouched file bytes during fuzzy edits [#116509](https://github.com/openclaw/openclaw/pull/116509)
- Stop canceled media requests before paid generation starts [#117418](https://github.com/openclaw/openclaw/pull/117418)
- Protect registered worktrees from orphan cleanup [#119709](https://github.com/openclaw/openclaw/pull/119709)
- Explain when inbound documents cannot be read [#122025](https://github.com/openclaw/openclaw/pull/122025)
- Keep readable images when part of a batch fails [#122361](https://github.com/openclaw/openclaw/pull/122361)
- Prevent completed tools from replaying after idle timeouts [#122516](https://github.com/openclaw/openclaw/pull/122516)
- Keep Code Mode running when tool results are too large [#122924](https://github.com/openclaw/openclaw/pull/122924)
- Prevent overlapping end-of-file patches from deleting content [#124379](https://github.com/openclaw/openclaw/pull/124379)
- Refuse ambiguous apply-patch edits [#124470](https://github.com/openclaw/openclaw/pull/124470)
- Read oversized single-line files without shell tools [#126587](https://github.com/openclaw/openclaw/pull/126587)
- Stop system prompts from suggesting unavailable tools [#126792](https://github.com/openclaw/openclaw/pull/126792)
- fix: allow code mode repair after preflight rejection [#128054](https://github.com/openclaw/openclaw/pull/128054)
- fix: agents continue after Code Mode tool and JavaScript errors [#128088](https://github.com/openclaw/openclaw/pull/128088)
- Recover automatic browser routing and Discord voice participant context [2e0f6d5](https://github.com/openclaw/openclaw/commit/2e0f6d5)
- Stream large Codex sandbox file copies [#101511](https://github.com/openclaw/openclaw/pull/101511)
- Keep truncated tool results free of broken emoji [#102087](https://github.com/openclaw/openclaw/pull/102087)
- Distinguish Code Mode cancellations from timeouts [#102494](https://github.com/openclaw/openclaw/pull/102494)
- Restore allowlisted command execution on Mac nodes [#102536](https://github.com/openclaw/openclaw/pull/102536)
- Preserve Unicode across retained text boundaries [#102599](https://github.com/openclaw/openclaw/pull/102599)
- Accept matching repeated Content-Length headers [#102939](https://github.com/openclaw/openclaw/pull/102939)
- Preserve caller cancellation in timed fetches [#102951](https://github.com/openclaw/openclaw/pull/102951)
- Default timeout for stalled media response headers [#103209](https://github.com/openclaw/openclaw/pull/103209)
- Reject invalid xAI X Search handle filters before requests [#103393](https://github.com/openclaw/openclaw/pull/103393)
- Suppress false shell-failure warnings after recovered runs [#103593](https://github.com/openclaw/openclaw/pull/103593)
- Preserve coding tools for subagents spawned from native CLI harnesses [#103751](https://github.com/openclaw/openclaw/pull/103751)
- Find Feishu Drive files outside the first root page [#104190](https://github.com/openclaw/openclaw/pull/104190)
- Let Codex agents choose paired nodes for individual commands [#104198](https://github.com/openclaw/openclaw/pull/104198)
- Cancel SearXNG searches when the parent run stops [#104216](https://github.com/openclaw/openclaw/pull/104216)
- Return timed-out Android node commands promptly [#104225](https://github.com/openclaw/openclaw/pull/104225)
- Restore channel labels for agent-scoped sessions [#104274](https://github.com/openclaw/openclaw/pull/104274)
- Bound stalled remote media downloads and clean partial files [#104624](https://github.com/openclaw/openclaw/pull/104624)
- Bound tool-image payloads before base64 decoding [#105086](https://github.com/openclaw/openclaw/pull/105086)
- Reject invalid Parallel web-search result counts [#105108](https://github.com/openclaw/openclaw/pull/105108)
- Cancel Kimi web-search requests with the agent run [#105125](https://github.com/openclaw/openclaw/pull/105125)
- Typed executable lookup for remote nodes [#105182](https://github.com/openclaw/openclaw/pull/105182)
- Reject malformed camera media sizes [#105954](https://github.com/openclaw/openclaw/pull/105954)
- Decode the full HTML5 entity set in agent workflows [#105957](https://github.com/openclaw/openclaw/pull/105957)
- fix(agents): omitted image metadata reports inflated byte sizes [#106066](https://github.com/openclaw/openclaw/pull/106066)
- Restore Codex sandbox commands with file-URI paths [#107644](https://github.com/openclaw/openclaw/pull/107644)
- Clear tool-search catalogs after prep aborts [#108114](https://github.com/openclaw/openclaw/pull/108114)
- Clean up stale tool tracking when agent runs unsubscribe [#108403](https://github.com/openclaw/openclaw/pull/108403)
- Prevent stale tool results from proving current actions completed [#109259](https://github.com/openclaw/openclaw/pull/109259)
- Preserve agent-created filename case on Windows [#109823](https://github.com/openclaw/openclaw/pull/109823)
- Preserve tool output contracts in truncated Code Mode indexes [#110317](https://github.com/openclaw/openclaw/pull/110317)
- Preserve Code Mode's quick index around oversized tools [#110517](https://github.com/openclaw/openclaw/pull/110517)
- Stop aborted runs from hanging on stuck tool calls [#110704](https://github.com/openclaw/openclaw/pull/110704)
- Preserve stable network results when response cleanup fails [#111245](https://github.com/openclaw/openclaw/pull/111245)
- Restore Windows browser discovery for diff rendering [#111257](https://github.com/openclaw/openclaw/pull/111257)
- fix(network): guarded fetch callers can leave responses streaming [#111277](https://github.com/openclaw/openclaw/pull/111277)
- Stop Code Mode shell-command retry storms [#113070](https://github.com/openclaw/openclaw/pull/113070)
- Preserve and validate compact Tool Search arguments [#114461](https://github.com/openclaw/openclaw/pull/114461)
- Make hidden tool capabilities discoverable to agents [#114516](https://github.com/openclaw/openclaw/pull/114516)
- Keep core coding tools directly available with tool search [#114560](https://github.com/openclaw/openclaw/pull/114560)
- Preserve valid Code Mode methods and reject loader evasions [#114742](https://github.com/openclaw/openclaw/pull/114742)
- Tell agents which watched group sessions they can read [#114835](https://github.com/openclaw/openclaw/pull/114835)
- Keep search tool summaries readable [#114933](https://github.com/openclaw/openclaw/pull/114933)
- Improve node cancellation and local-model recovery [#114935](https://github.com/openclaw/openclaw/pull/114935)
- Save node screen captures with matching file formats [#115094](https://github.com/openclaw/openclaw/pull/115094)
- Deliver each Code Mode output block only once across waits [#115213](https://github.com/openclaw/openclaw/pull/115213)
- Cancel abandoned HTTP tool calls [#115550](https://github.com/openclaw/openclaw/pull/115550)
- Allow exact edits beside fuzzy near-duplicates [#115738](https://github.com/openclaw/openclaw/pull/115738)
- Stabilize atomic browser download staging [#115892](https://github.com/openclaw/openclaw/pull/115892)
- Preserve CRLF files when applying patches [#115943](https://github.com/openclaw/openclaw/pull/115943)
- Sandboxed replies can attach fetched files [#116400](https://github.com/openclaw/openclaw/pull/116400)
- Preserve truthful agent-tool outcomes and cancellation [#116916](https://github.com/openclaw/openclaw/pull/116916)
- fix(nodes): validate photo payloads before publishing captures [#116927](https://github.com/openclaw/openclaw/pull/116927)
- Make paired-node photo results visible and atomic [#116988](https://github.com/openclaw/openclaw/pull/116988)
- Honor Canvas action deadlines across nodes and Gateway transport [#117316](https://github.com/openclaw/openclaw/pull/117316)
- Resolve effective tools for fresh and sandboxed sessions [#117723](https://github.com/openclaw/openclaw/pull/117723)
- Verify delegated file writes before reporting success [#117938](https://github.com/openclaw/openclaw/pull/117938)
- Preserve existing node screen output when writes fail [#117973](https://github.com/openclaw/openclaw/pull/117973)
- Preserve failures from deferred MCP tools [#118363](https://github.com/openclaw/openclaw/pull/118363)
- fix(agents): write unrestricted host files in place instead of truncating first [#118470](https://github.com/openclaw/openclaw/pull/118470)
- Preserve complete xAI tool responses and citations [#118477](https://github.com/openclaw/openclaw/pull/118477)
- Surface failed image extraction for textless PDFs [#118629](https://github.com/openclaw/openclaw/pull/118629)
- fix(agents): node plugin tool calls report a generic client timeout [#118720](https://github.com/openclaw/openclaw/pull/118720)
- Stop canceled web searches across providers [#118895](https://github.com/openclaw/openclaw/pull/118895)
- Support symlinked remote sandbox workspaces and reliable macOS validation [#119110](https://github.com/openclaw/openclaw/pull/119110)
- Fix Tool Search calls from providers with dotted arguments [#119464](https://github.com/openclaw/openclaw/pull/119464)
- Make agent file reads nonblocking and explicit [#121508](https://github.com/openclaw/openclaw/pull/121508)
- Stage uppercase Windows file URLs for sandboxed agents [#121521](https://github.com/openclaw/openclaw/pull/121521)
- Enable suggested-task cards for Codex-harness sessions [#121568](https://github.com/openclaw/openclaw/pull/121568)
- Accept canonical file URLs across Windows media workflows [#121676](https://github.com/openclaw/openclaw/pull/121676)
- Let code-mode Codex models discover deferred tools [#121703](https://github.com/openclaw/openclaw/pull/121703)
- Restore OpenAI hosted search in Code Mode [#121812](https://github.com/openclaw/openclaw/pull/121812)
- Fall back to structured Tool Search under Electron [#122037](https://github.com/openclaw/openclaw/pull/122037)
- Preserve Code Mode skills under wildcard tool policies [#122057](https://github.com/openclaw/openclaw/pull/122057)
- Expand Windows backslash home paths in agent file tools [#122071](https://github.com/openclaw/openclaw/pull/122071)
- Unprocessed media attachments get clear model-visible outcomes [#122098](https://github.com/openclaw/openclaw/pull/122098)
- Prevent generated worktree names from reviving retired checkouts [#122393](https://github.com/openclaw/openclaw/pull/122393)
- Let sandboxed agents read staged document attachments [#122490](https://github.com/openclaw/openclaw/pull/122490)
- Restore inbound images for non-default CLI agent workspaces [#122684](https://github.com/openclaw/openclaw/pull/122684)
- Preserve session kinds in sessions_list [#122697](https://github.com/openclaw/openclaw/pull/122697)
- Keep canceled web-search results out of provider caches [#123951](https://github.com/openclaw/openclaw/pull/123951)
- Recover double-wrapped Tool Search calls [#124138](https://github.com/openclaw/openclaw/pull/124138)
- Restore native OpenAI web search in packaged runs [#124215](https://github.com/openclaw/openclaw/pull/124215)
- Cancel bundled MCP work when agent runs stop [#124425](https://github.com/openclaw/openclaw/pull/124425)
- Stop prompting models to use unavailable tools [#124716](https://github.com/openclaw/openclaw/pull/124716)
- Honor Codex node execution host selection [#124777](https://github.com/openclaw/openclaw/pull/124777)
- Fix clipped session selection and Code Mode timers [#124879](https://github.com/openclaw/openclaw/pull/124879)
- Restore media attachments for named embedded agents [#124957](https://github.com/openclaw/openclaw/pull/124957)
- Confirm when a failed tool action succeeds on retry [#125078](https://github.com/openclaw/openclaw/pull/125078)
- fix(sandbox): queue reads behind in-flight writes to the same file [#125091](https://github.com/openclaw/openclaw/pull/125091)
- Report no-reply and unavailable tool outcomes [#125607](https://github.com/openclaw/openclaw/pull/125607)
- Preserve Copilot manifest-profile tool grants [#125875](https://github.com/openclaw/openclaw/pull/125875)
- Restore OpenClaw guidance to Copilot agent turns [#125997](https://github.com/openclaw/openclaw/pull/125997)
- Agents stop cleanly after terminal dynamic tools [#126208](https://github.com/openclaw/openclaw/pull/126208)
- Stop stale tool-failure warnings after successful replies [#126542](https://github.com/openclaw/openclaw/pull/126542)
- Run Code Mode when the unused exec alias is blank [#126599](https://github.com/openclaw/openclaw/pull/126599)
- Stop caching unfinished Kimi web searches as successful [#126765](https://github.com/openclaw/openclaw/pull/126765)
- Reject empty Perplexity answers and reuse equivalent searches [#126780](https://github.com/openclaw/openclaw/pull/126780)
- Preserve literal Unicode-space paths for workspace file changes [#126797](https://github.com/openclaw/openclaw/pull/126797)
- Reuse Gemini and Kimi caches for equivalent searches [#126798](https://github.com/openclaw/openclaw/pull/126798)
- fix(read): drop image payload for non-vision models [#127112](https://github.com/openclaw/openclaw/pull/127112)
- Stop recommending unavailable session tools [#127648](https://github.com/openclaw/openclaw/pull/127648)
- fix: Code Mode shell calls stall near yield deadline [#127759](https://github.com/openclaw/openclaw/pull/127759)
- fix(agents): include ctimeMs in workspace file cache identity [#127769](https://github.com/openclaw/openclaw/pull/127769)
- fix(code-mode): pending-call overflow no longer commits partial batches [#128030](https://github.com/openclaw/openclaw/pull/128030)
- fix: continue code mode with read-only recovery [#128071](https://github.com/openclaw/openclaw/pull/128071)
- fix: Code Mode exec approvals stop polling [#128355](https://github.com/openclaw/openclaw/pull/128355)
- fix(agents): settle nested code mode bridge calls [#128440](https://github.com/openclaw/openclaw/pull/128440)
- fix(agents): compact mid-turn overflow while code-mode work is still pending [#129792](https://github.com/openclaw/openclaw/pull/129792)
- refactor(web): use canonical provider contracts [#130334](https://github.com/openclaw/openclaw/pull/130334)
- fix(nodes): validate capture batches before publishing files [#130371](https://github.com/openclaw/openclaw/pull/130371)
- fix(code-mode): avoid repair mode for invalid nested calls [#130478](https://github.com/openclaw/openclaw/pull/130478)
- fix(media): record dispositions for dropped native-vision attachments [#130846](https://github.com/openclaw/openclaw/pull/130846)
- fix(codex): let collector waits finish their full timeout [#130939](https://github.com/openclaw/openclaw/pull/130939)
- fix(agents): skip implicit workspace scaffold for runtime-managed ACP agents [#130987](https://github.com/openclaw/openclaw/pull/130987)
- fix(code-mode): continue tasks after discovery-only errors [#131079](https://github.com/openclaw/openclaw/pull/131079)
- fix(openai): restore automatic Code Mode for preferred models [#131139](https://github.com/openclaw/openclaw/pull/131139)
- fix(agents): keep dangling symlinks visible in ls listings [#131783](https://github.com/openclaw/openclaw/pull/131783)
- fix(brave): bind preflight to request cancellation [#132097](https://github.com/openclaw/openclaw/pull/132097)
- fix: reduce first Grok web search startup delay [#132685](https://github.com/openclaw/openclaw/pull/132685)
- Preserve successful Code Mode reply delivery [5775e2a](https://github.com/openclaw/openclaw/commit/5775e2a)
- Stop flagging exact-limit web responses as truncated [#102389](https://github.com/openclaw/openclaw/pull/102389)
- Keep truncated tool-result context valid around emoji [#102466](https://github.com/openclaw/openclaw/pull/102466)
- Preserve emoji boundaries in native hook display text [#102467](https://github.com/openclaw/openclaw/pull/102467)
- Reject invalid session read offsets [#102481](https://github.com/openclaw/openclaw/pull/102481)
- Preserve complete characters in truncated MCP metadata [#102500](https://github.com/openclaw/openclaw/pull/102500)
- Keep Codex timeout diagnostics UTF-16 safe [#102509](https://github.com/openclaw/openclaw/pull/102509)
- Mark interrupted web responses as incomplete [#102550](https://github.com/openclaw/openclaw/pull/102550)
- Keep Codex diagnostic truncation Unicode-safe [#102576](https://github.com/openclaw/openclaw/pull/102576)
- Keep Parallel MCP error details Unicode-safe [#102592](https://github.com/openclaw/openclaw/pull/102592)
- Preserve source length for truncated web_fetch output [#102978](https://github.com/openclaw/openclaw/pull/102978)
- Count every failed tool call in trace summaries [#102981](https://github.com/openclaw/openclaw/pull/102981)
- Prevent empty agent output from crashing truncation [#103425](https://github.com/openclaw/openclaw/pull/103425)
- Preserve valid Unicode in Firecrawl API errors [#103487](https://github.com/openclaw/openclaw/pull/103487)
- Reject malformed session-history offsets [#103594](https://github.com/openclaw/openclaw/pull/103594)
- Keep disabled Exa content options out of default cache entries [#103653](https://github.com/openclaw/openclaw/pull/103653)
- Stop session grep searches promptly when canceled [#103709](https://github.com/openclaw/openclaw/pull/103709)
- Enforce middleware detail limits by UTF-8 bytes [#104156](https://github.com/openclaw/openclaw/pull/104156)
- Report accurate UTF-8 sizes for Code Mode API files [#104244](https://github.com/openclaw/openclaw/pull/104244)
- Reject malformed goal token budgets [#104534](https://github.com/openclaw/openclaw/pull/104534)
- Stop Parallel MCP search after an initialization acknowledgement fails [#104554](https://github.com/openclaw/openclaw/pull/104554)
- Report correct UTF-8 byte counts after writes [#104560](https://github.com/openclaw/openclaw/pull/104560)
- Keep tool_search_code stderr errors valid at UTF-16 boundaries [#104767](https://github.com/openclaw/openclaw/pull/104767)
- Preserve cancellation reasons through request timeouts [#105071](https://github.com/openclaw/openclaw/pull/105071)
- Make sandbox file checks reliable across locales [#105263](https://github.com/openclaw/openclaw/pull/105263)
- Reject unsafe PDF page numbers before analysis [#105315](https://github.com/openclaw/openclaw/pull/105315)
- Require positive integer Tool Search limits [#105567](https://github.com/openclaw/openclaw/pull/105567)
- Keep read-tool warning previews Unicode-safe [#106399](https://github.com/openclaw/openclaw/pull/106399)
- Resolve relative links in Web Readability output [#106874](https://github.com/openclaw/openclaw/pull/106874)
- Avoid resize hints after image re-encoding [#107027](https://github.com/openclaw/openclaw/pull/107027)
- Fix Perplexity Search API date filters [#107046](https://github.com/openclaw/openclaw/pull/107046)
- Reject malformed array indices in Workspaces bindings [#107317](https://github.com/openclaw/openclaw/pull/107317)
- Preserve UTF-8 in session-tool error tails [#108012](https://github.com/openclaw/openclaw/pull/108012)
- fix(agents): report blocked command outcomes [#108060](https://github.com/openclaw/openclaw/pull/108060)
- Keep read-tool warning previews valid Unicode [#108276](https://github.com/openclaw/openclaw/pull/108276)
- Prevent stalled find and grep checks from hanging [#109215](https://github.com/openclaw/openclaw/pull/109215)
- Bound sandbox bootstrap seed file reads [#110017](https://github.com/openclaw/openclaw/pull/110017)
- Explain directory paths passed to the read tool [#114601](https://github.com/openclaw/openclaw/pull/114601)
- Prevent empty and shell-style Code Mode calls on small models [#115275](https://github.com/openclaw/openclaw/pull/115275)
- Isolate Code Mode tool catalogs by run [#115458](https://github.com/openclaw/openclaw/pull/115458)
- Reject unsupported Feishu document content at creation [#115697](https://github.com/openclaw/openclaw/pull/115697)
- Close abandoned web-fetch responses during provider fallback [#115759](https://github.com/openclaw/openclaw/pull/115759)
- Hide leading UTF-8 BOMs from agent file reads [#115781](https://github.com/openclaw/openclaw/pull/115781)
- Include tool-use summaries in CLI-backed run results [#115797](https://github.com/openclaw/openclaw/pull/115797)
- Report Codex hosted-search timeouts accurately [#115837](https://github.com/openclaw/openclaw/pull/115837)
- Strip leading BOMs from inline fetched text [#115906](https://github.com/openclaw/openclaw/pull/115906)
- Report Copilot code-mode engagement in JSON results [#115913](https://github.com/openclaw/openclaw/pull/115913)
- Make Tool Search telemetry counter resets identifiable [#116070](https://github.com/openclaw/openclaw/pull/116070)
- Keep session-status text compact and sanitized [#116742](https://github.com/openclaw/openclaw/pull/116742)
- Preserve terminal summaries on abort-wrapped agent tools [#118495](https://github.com/openclaw/openclaw/pull/118495)
- Reject PDF page selections outside the document range [#118639](https://github.com/openclaw/openclaw/pull/118639)
- fix(link-understanding): release connections after failed fetches [#118683](https://github.com/openclaw/openclaw/pull/118683)
- fix(code-mode): keep MCP node label truncation UTF-16 safe [#119392](https://github.com/openclaw/openclaw/pull/119392)
- fix(media): forward caller abort signal to retry backoff sleep [#119398](https://github.com/openclaw/openclaw/pull/119398)
- Fix managed-worktree cleanup with symlinked state directories [#120362](https://github.com/openclaw/openclaw/pull/120362)
- Recognize uppercase attachment file URLs on Windows [#121362](https://github.com/openclaw/openclaw/pull/121362)
- Clear recovered multi-file patch warnings [#121503](https://github.com/openclaw/openclaw/pull/121503)
- Decode local media file URLs safely on Windows [#122192](https://github.com/openclaw/openclaw/pull/122192)
- Stop false file-change failures on Windows media reads [#122427](https://github.com/openclaw/openclaw/pull/122427)
- Fill session lists after filtering [#122725](https://github.com/openclaw/openclaw/pull/122725)
- Preserve partial web fetch status [#122866](https://github.com/openclaw/openclaw/pull/122866)
- Allow zero-byte artifact downloads [#122928](https://github.com/openclaw/openclaw/pull/122928)
- Report headless Code Mode timeouts consistently [#122997](https://github.com/openclaw/openclaw/pull/122997)
- Return a clear error for malformed Diffs tool calls [#123087](https://github.com/openclaw/openclaw/pull/123087)
- Correct image resize log percentage signs [#123411](https://github.com/openclaw/openclaw/pull/123411)
- Reject failed target pages from Firecrawl [#123741](https://github.com/openclaw/openclaw/pull/123741)
- Cancelled X searches no longer affect retries [#123996](https://github.com/openclaw/openclaw/pull/123996)
- Hide unavailable node guidance in Code Mode [#124698](https://github.com/openclaw/openclaw/pull/124698)
- fix(agents): remind exec models to quote shell metacharacters [#125485](https://github.com/openclaw/openclaw/pull/125485)
- Keep managed-worktree cleanup running past stale metadata [#125721](https://github.com/openclaw/openclaw/pull/125721)
- Report accurate file counts for directory fetches [#126439](https://github.com/openclaw/openclaw/pull/126439)
- Extract readable content from XHTML pages [#126835](https://github.com/openclaw/openclaw/pull/126835)
- Honor Unicode BOM before conflicting HTTP charsets [#126854](https://github.com/openclaw/openclaw/pull/126854)
- Keep canceled Firecrawl requests from returning stale results [#126857](https://github.com/openclaw/openclaw/pull/126857)
- Expose directory pagination tokens to agents [#127051](https://github.com/openclaw/openclaw/pull/127051)
- fix(file-transfer): inline small YAML and source files from paired nodes [#128656](https://github.com/openclaw/openclaw/pull/128656)
- fix: recover after read-only Code Mode node lookup [#129427](https://github.com/openclaw/openclaw/pull/129427)
- fix(ollama): skip local checks for hosted web search [#129833](https://github.com/openclaw/openclaw/pull/129833)
- fix(code-mode): serialize catalog handles nested in final values [#130276](https://github.com/openclaw/openclaw/pull/130276)
- fix(ci): share Git ownership across workflow fetch policies [#132428](https://github.com/openclaw/openclaw/pull/132428)
- Guide node discovery before describing a paired node [#51926](https://github.com/openclaw/openclaw/pull/51926)
- Cache and back off remote node binary probes [#79438](https://github.com/openclaw/openclaw/pull/79438)
- Reject invalid process actions before execution [#81157](https://github.com/openclaw/openclaw/pull/81157)
- Require web provider environment references to resolve before counting as credentials [#96400](https://github.com/openclaw/openclaw/pull/96400)

</details>

</Accordion>

<Accordion title="Processes and background commands">

Cancelling a queued command now keeps it from starting, cancellation during startup reaches the process once it exists, and an explicit replacement retires the command it replaced without killing ordinary work that happens to be running at the same time. Commands already running in the background keep their existing lifetime.

[Process output](/tools/exec) also stays in the order OpenClaw observed it, completion remains attached to the exact process that finished, and polling says when earlier output was omitted. The full history remains available through paged process logs rather than one response that can grow without bound.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Prevent zombie-process buildup in Docker sandboxes [#103441](https://github.com/openclaw/openclaw/pull/103441)
- Keep background CLI commands visible as tasks [#110468](https://github.com/openclaw/openclaw/pull/110468)
- Stop cancelled turns before they spawn background agent loops [#115011](https://github.com/openclaw/openclaw/pull/115011)
- Prevent concurrent sandbox container name conflicts [#115645](https://github.com/openclaw/openclaw/pull/115645)
- Reclaim idle agent terminals under pool pressure [#116101](https://github.com/openclaw/openclaw/pull/116101)
- Open remote node terminals promptly and preserve operator renames [#116355](https://github.com/openclaw/openclaw/pull/116355)
- Report background process outcomes truthfully and wake on quiet failures [#120754](https://github.com/openclaw/openclaw/pull/120754)
- Honor Windows child environment overrides regardless of key casing [#120802](https://github.com/openclaw/openclaw/pull/120802)
- Stop forked commands after Gateway timeouts [#124081](https://github.com/openclaw/openclaw/pull/124081)
- Stop terminal process trees when sessions are archived [#125784](https://github.com/openclaw/openclaw/pull/125784)
- fix(worker): keep background servers alive after replies [#130733](https://github.com/openclaw/openclaw/pull/130733)
- Preserve emoji in agent output and recovery messages [#102085](https://github.com/openclaw/openclaw/pull/102085)
- Stop canceled parallel tools from starting [#102276](https://github.com/openclaw/openclaw/pull/102276)
- Keep heredoc body text out of shell command status splits [#102889](https://github.com/openclaw/openclaw/pull/102889)
- Keep Codex sandbox leases until child processes close [#103617](https://github.com/openclaw/openclaw/pull/103617)
- Preserve ANSI sanitization across bash output chunks [#103706](https://github.com/openclaw/openclaw/pull/103706)
- Remove hidden terminal escape fragments from sanitized text [#103707](https://github.com/openclaw/openclaw/pull/103707)
- Bound Windows foreground exec cleanup [#104234](https://github.com/openclaw/openclaw/pull/104234)
- Keep goals visible after background command completions [#104265](https://github.com/openclaw/openclaw/pull/104265)
- Keep sandbox exec finalization inside lifecycle admission [#104419](https://github.com/openclaw/openclaw/pull/104419)
- Stop stalled Windows encoding checks from blocking commands [#109319](https://github.com/openclaw/openclaw/pull/109319)
- Reap ngrok tunnels during Voice Call cleanup [#110122](https://github.com/openclaw/openclaw/pull/110122)
- Preserve descendant output during event-loop stalls [#111040](https://github.com/openclaw/openclaw/pull/111040)
- Find mise-installed commands across supported platforms [#111258](https://github.com/openclaw/openclaw/pull/111258)
- Use a valid terminal identity when TERM is blank [#111261](https://github.com/openclaw/openclaw/pull/111261)
- Preserve ANSI sanitizer state across local exec chunks [#111364](https://github.com/openclaw/openclaw/pull/111364)
- Warn agents before retrying timed-out commands [#111390](https://github.com/openclaw/openclaw/pull/111390)
- Preserve running tasks after background-process removal [#113860](https://github.com/openclaw/openclaw/pull/113860)
- Prevent superseded scoped processes from surviving replacement [#114845](https://github.com/openclaw/openclaw/pull/114845)
- Stop processes cancelled during startup [#114917](https://github.com/openclaw/openclaw/pull/114917)
- Prevent cancelled queued processes from starting [#114951](https://github.com/openclaw/openclaw/pull/114951)
- Preserve long process deadlines beyond Node's timer limit [#115230](https://github.com/openclaw/openclaw/pull/115230)
- Keep process cancellation reasons consistent [#115317](https://github.com/openclaw/openclaw/pull/115317)
- Prevent orphaned Windows child process trees [#115535](https://github.com/openclaw/openclaw/pull/115535)
- Stop false failures for completed shell checks [#115737](https://github.com/openclaw/openclaw/pull/115737)
- Bound completed background command memory and clean retired sessions [#115760](https://github.com/openclaw/openclaw/pull/115760)
- Return results from long-running node-host commands [#116591](https://github.com/openclaw/openclaw/pull/116591)
- Decode legacy Windows session exec output correctly [#119509](https://github.com/openclaw/openclaw/pull/119509)
- Make exec timeout units explicit [#119874](https://github.com/openclaw/openclaw/pull/119874)
- Keep exec completions tied to the exact process [#120575](https://github.com/openclaw/openclaw/pull/120575)
- Warn when process polls omit earlier output [#120583](https://github.com/openclaw/openclaw/pull/120583)
- Stop polled background commands from sending stale completion alerts [#120585](https://github.com/openclaw/openclaw/pull/120585)
- Warn when process output is permanently discarded [#120705](https://github.com/openclaw/openclaw/pull/120705)
- Close task-owned terminals after completion [#121055](https://github.com/openclaw/openclaw/pull/121055)
- Close task-owned terminals when tasks finish [#121070](https://github.com/openclaw/openclaw/pull/121070)
- Retire exec sessions after sandbox preparation failures [#121148](https://github.com/openclaw/openclaw/pull/121148)
- Close the correct Gateway terminal when run IDs collide [#121192](https://github.com/openclaw/openclaw/pull/121192)
- Close task-owned terminals when background work ends [#121267](https://github.com/openclaw/openclaw/pull/121267)
- Keep compound shell commands readable in tool displays [#122581](https://github.com/openclaw/openclaw/pull/122581)
- Stop and reap stale macOS Talk MLX helpers safely [#124604](https://github.com/openclaw/openclaw/pull/124604)
- fix(process): commands lose output during event-loop stalls [#125381](https://github.com/openclaw/openclaw/pull/125381)
- Report node timeouts and process kills accurately [#125466](https://github.com/openclaw/openclaw/pull/125466)
- Keep terminal and exec recovery paths usable [#125731](https://github.com/openclaw/openclaw/pull/125731)
- Codex sandbox termination waits for full process cleanup [#125908](https://github.com/openclaw/openclaw/pull/125908)
- Keep child signal forwarding active after operational errors [#126493](https://github.com/openclaw/openclaw/pull/126493)
- Keep large command bursts responsive [#127145](https://github.com/openclaw/openclaw/pull/127145)
- Keep background commands controllable after signal errors [#127154](https://github.com/openclaw/openclaw/pull/127154)
- fix(agents): preserve approved exec output stream labels [#127595](https://github.com/openclaw/openclaw/pull/127595)
- fix(agents): interactive process prompts stall during timed polls [#130081](https://github.com/openclaw/openclaw/pull/130081)
- fix(exec): stop cancelled commands before process admission [#130941](https://github.com/openclaw/openclaw/pull/130941)
- fix(agents): avoid persistent skill watchers in one-shot ingress runs [#132512](https://github.com/openclaw/openclaw/pull/132512)
- Prevent Unix child cleanup from terminating the gateway [#94697](https://github.com/openclaw/openclaw/pull/94697)
- fix(process): await process-tree cleanup before cancellation settles [#98539](https://github.com/openclaw/openclaw/pull/98539)
- fix(process): decode UTF-16 Windows output streams (#109163) [95b69ef](https://github.com/openclaw/openclaw/commit/95b69ef)
- Keep background-process labels valid around emoji [#102332](https://github.com/openclaw/openclaw/pull/102332)
- Clamp explicit zero bash-job TTLs to the one-minute minimum [#102855](https://github.com/openclaw/openclaw/pull/102855)
- Keep bash output byte-bounded and UTF-8 safe [#103272](https://github.com/openclaw/openclaw/pull/103272)
- Strip residual terminal control characters [#103274](https://github.com/openclaw/openclaw/pull/103274)
- Keep SCP failure messages valid around emoji filenames [#104148](https://github.com/openclaw/openclaw/pull/104148)
- Preserve Unicode in file-transfer error tails [#104151](https://github.com/openclaw/openclaw/pull/104151)
- Preserve emoji in truncated process output [#104531](https://github.com/openclaw/openclaw/pull/104531)
- Report accurate byte counts for process input [#104966](https://github.com/openclaw/openclaw/pull/104966)
- Report accurate UTF-8 byte counts for process send-keys [#104968](https://github.com/openclaw/openclaw/pull/104968)
- Apply undefined child-process environment removals [#107258](https://github.com/openclaw/openclaw/pull/107258)
- Bound Logbook snapshot subprocesses [#109042](https://github.com/openclaw/openclaw/pull/109042)
- Report the real cause and duration of command-lane timeouts [#109287](https://github.com/openclaw/openclaw/pull/109287)
- Handle ACP agent process startup failures safely [#109529](https://github.com/openclaw/openclaw/pull/109529)
- Treat permission-restricted PIDs as alive [#110235](https://github.com/openclaw/openclaw/pull/110235)
- Isolate bash stdout and stderr decoding [#112325](https://github.com/openclaw/openclaw/pull/112325)
- Preserve signal-specific exit codes from wrapped CLI commands [#113685](https://github.com/openclaw/openclaw/pull/113685)
- Restore byte-exact process output on fixed Bun canaries [#114606](https://github.com/openclaw/openclaw/pull/114606)
- Prefer native PowerShell 7 executables on Windows PATH [#114999](https://github.com/openclaw/openclaw/pull/114999)
- Accept the documented global exec notice delay [#115101](https://github.com/openclaw/openclaw/pull/115101)
- Make cancelled foreground commands reject cleanly [#115694](https://github.com/openclaw/openclaw/pull/115694)
- Resume shared terminal output when a slow viewer leaves [#117847](https://github.com/openclaw/openclaw/pull/117847)
- Explain wrapper-selected Linux SIGKILL failures [#117911](https://github.com/openclaw/openclaw/pull/117911)
- Honor explicit Windows executable paths [#121094](https://github.com/openclaw/openclaw/pull/121094)
- Keep background process poll output in order [#123449](https://github.com/openclaw/openclaw/pull/123449)
- Preserve stderr and errors in node exec results [#123602](https://github.com/openclaw/openclaw/pull/123602)
- Preserve exec outcomes across lifecycle races [#125532](https://github.com/openclaw/openclaw/pull/125532)
- Treat empty exec workdirs as omitted [#126509](https://github.com/openclaw/openclaw/pull/126509)
- Keep the newest background process sessions visible [#126706](https://github.com/openclaw/openclaw/pull/126706)
- Separate Codex execution sessions from WebSocket transport [#126859](https://github.com/openclaw/openclaw/pull/126859)
- fix(agents): preserve timeout and termination details in process logs [#129273](https://github.com/openclaw/openclaw/pull/129273)
- Explain unusable working directories in remote node exec [#97105](https://github.com/openclaw/openclaw/pull/97105)

</details>

</Accordion>

<Accordion title="Automations and task boards">

[Workboard](/plugins/workboard) now keeps an accepted worker attached to its card, rolls back a failed operation without overwriting someone else's edits, and reconnects launches interrupted by a restart. If OpenClaw does not have a complete view of the running workers, it waits instead of guessing whether one still belongs to the card, and stale launch attempts remain blocked.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Fail closed when task-registry restore fails [#105031](https://github.com/openclaw/openclaw/pull/105031)
- Fail closed when task-flow state cannot be restored [#105088](https://github.com/openclaw/openclaw/pull/105088)
- Resume interrupted generated-media completions through the owning session [#108024](https://github.com/openclaw/openclaw/pull/108024)
- Harden cron editing and Workboard dispatch [#114564](https://github.com/openclaw/openclaw/pull/114564)
- Preserve live blocked TaskFlows during maintenance [#117606](https://github.com/openclaw/openclaw/pull/117606)
- Deliver queued background-task results proactively [#123076](https://github.com/openclaw/openclaw/pull/123076)
- Keep Workboard summaries from stalling the Gateway [#123922](https://github.com/openclaw/openclaw/pull/123922)
- Keep Workboard cards synced when the dashboard is closed [#125023](https://github.com/openclaw/openclaw/pull/125023)
- Prevent orphaned Workboard runs and overwritten cards [#125951](https://github.com/openclaw/openclaw/pull/125951)
- fix(worktrees): preserve nested repositories during cleanup [#129454](https://github.com/openclaw/openclaw/pull/129454)
- fix(workboard): preserve unassigned worker ownership (#115119) [a9303f2](https://github.com/openclaw/openclaw/commit/a9303f2)
- Resume cron media jobs with their original context [#101078](https://github.com/openclaw/openclaw/pull/101078)
- Keep background-task status from corrupting emoji [#101976](https://github.com/openclaw/openclaw/pull/101976)
- Repair legacy task delivery statuses during upgrade [#103946](https://github.com/openclaw/openclaw/pull/103946)
- Keep durable task start times accurate [#104278](https://github.com/openclaw/openclaw/pull/104278)
- Keep restored task state consistent and index-safe [#104990](https://github.com/openclaw/openclaw/pull/104990)
- Avoid repeated global scans during cron session cleanup [#105903](https://github.com/openclaw/openclaw/pull/105903)
- Let Workboard workers finish dispatched cards [#107271](https://github.com/openclaw/openclaw/pull/107271)
- Preserve same-ID cron history across separate stores [#108730](https://github.com/openclaw/openclaw/pull/108730)
- Record the actual runtime used by Workboard executions [#108887](https://github.com/openclaw/openclaw/pull/108887)
- Correlate Workboard completion proofs by id [#111324](https://github.com/openclaw/openclaw/pull/111324)
- Harden cron notifications and Workboard dispatch [#114499](https://github.com/openclaw/openclaw/pull/114499)
- Keep new Workboard cards with the selected agent [#114650](https://github.com/openclaw/openclaw/pull/114650)
- Harden Cron waits and Workboard card lifecycle behavior [#114865](https://github.com/openclaw/openclaw/pull/114865)
- Keep newly created Workboard cards dispatchable [#116412](https://github.com/openclaw/openclaw/pull/116412)
- Reject invalid task notification policies before persistence [#117554](https://github.com/openclaw/openclaw/pull/117554)
- Preserve accepted task suggestions under registry pressure [#117623](https://github.com/openclaw/openclaw/pull/117623)
- Speed up large Workboard card lists [#118848](https://github.com/openclaw/openclaw/pull/118848)
- Keep task suggestions recoverable after failures and capacity pressure [#120940](https://github.com/openclaw/openclaw/pull/120940)
- fix(workboard): truncate oversized notification messages instead of crashing dispatch [#120999](https://github.com/openclaw/openclaw/pull/120999)
- Deliver generated media with the current reply contract [#121937](https://github.com/openclaw/openclaw/pull/121937)
- Preserve concurrent Workboard edits when failed operations roll back [#126161](https://github.com/openclaw/openclaw/pull/126161)
- Retry safe Workboard worktree cleanup after failures [#126162](https://github.com/openclaw/openclaw/pull/126162)
- Recover interrupted Workboard worker launches [#126170](https://github.com/openclaw/openclaw/pull/126170)
- fix(worktrees): stop repeated startup cleanup errors [#128761](https://github.com/openclaw/openclaw/pull/128761)
- fix(tasks): blocked work incorrectly appears successful [#129101](https://github.com/openclaw/openclaw/pull/129101)
- fix(acp): classify complete task output before summary truncation [#129255](https://github.com/openclaw/openclaw/pull/129255)
- fix(workboard): index card child records [#129568](https://github.com/openclaw/openclaw/pull/129568)
- fix(gateway): Land PR works with configured repository hooks [#129576](https://github.com/openclaw/openclaw/pull/129576)
- fix(gateway): unblock GitHub publication on hooksPath checkouts and auto-retry deferred requests [#129772](https://github.com/openclaw/openclaw/pull/129772)
- fix(tasks): stop completed TaskFlows from accumulating [#129873](https://github.com/openclaw/openclaw/pull/129873)
- fix(cron): preserve authored speech in text announcements [#130520](https://github.com/openclaw/openclaw/pull/130520)
- Keep fast context maintenance out of task flows [#102147](https://github.com/openclaw/openclaw/pull/102147)
- Keep emoji intact in captured Workboard cards [#102544](https://github.com/openclaw/openclaw/pull/102544)
- Report active Workboard claims before dependency errors [#104065](https://github.com/openclaw/openclaw/pull/104065)
- Scope default Workboard card positions by board [#104410](https://github.com/openclaw/openclaw/pull/104410)
- Reject impossible commitment due dates [#106236](https://github.com/openclaw/openclaw/pull/106236)
- Keep the task process listener singleton [#117766](https://github.com/openclaw/openclaw/pull/117766)
- Stop Workboard sync errors with multiple agents [#125429](https://github.com/openclaw/openclaw/pull/125429)
- Start Workboard reconciliation after Gateway readiness [#125470](https://github.com/openclaw/openclaw/pull/125470)
- Rebind managed worktree cleanup to the live repository [#126305](https://github.com/openclaw/openclaw/pull/126305)
- fix(tasks): blocked completion outcomes cannot be filtered [#129196](https://github.com/openclaw/openclaw/pull/129196)
- fix(workers): preserve configured Git authors on cloud workers [#129826](https://github.com/openclaw/openclaw/pull/129826)
- fix(gateway): bound the publication attribute scan by listing size, not the command cap [#129907](https://github.com/openclaw/openclaw/pull/129907)

</details>

</Accordion>

<Accordion title="Web and dashboard interfaces">

[Canvas](/platforms/mac/canvas) now keeps generated widgets distinct when their names collide, remembers which widget was pinned after reload, and shows a bounded error when pinning fails instead of making the action disappear. When a stored widget identity is invalid or an occupied name is ambiguous, Canvas still refuses to guess which widget you meant.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Stabilize session dashboards after launch [#111907](https://github.com/openclaw/openclaw/pull/111907)
- Keep concurrent background task progress and completion stable [#114085](https://github.com/openclaw/openclaw/pull/114085)
- Make per-agent Control UI settings persist and show save errors [#117107](https://github.com/openclaw/openclaw/pull/117107)
- Preserve Canvas widgets when generated names collide [#117132](https://github.com/openclaw/openclaw/pull/117132)
- Prevent cloud-session recovery dead ends in the Control UI [#120970](https://github.com/openclaw/openclaw/pull/120970)
- Remove startup stalls from new Control UI chats [#122471](https://github.com/openclaw/openclaw/pull/122471)
- Preserve Workboard sidebar pins during startup and plugin toggles [#123475](https://github.com/openclaw/openclaw/pull/123475)
- Reject oversized and empty chat attachments before send [#123977](https://github.com/openclaw/openclaw/pull/123977)
- fix(portals): keep worker previews reachable and owned by the active environment [#130434](https://github.com/openclaw/openclaw/pull/130434)
- Keep emoji intact in restart reasons and chat previews [#101754](https://github.com/openclaw/openclaw/pull/101754)
- Stop split-pane headers from opening a hidden session picker [#103107](https://github.com/openclaw/openclaw/pull/103107)
- Render media URLs with encoded extensions [#103466](https://github.com/openclaw/openclaw/pull/103466)
- Lock Workboard card drafts while saving [#105600](https://github.com/openclaw/openclaw/pull/105600)
- Restore active plan checklists after reconnect [#109966](https://github.com/openclaw/openclaw/pull/109966)
- Clean up failed Cloud sessions and flag incompatible runtimes [#110371](https://github.com/openclaw/openclaw/pull/110371)
- Keep emoji intact when slicing Markdown content [#110643](https://github.com/openclaw/openclaw/pull/110643)
- Keep workboard dropdowns on-screen in short windows [#110788](https://github.com/openclaw/openclaw/pull/110788)
- Hide the media-only model placeholder from chat history [#111204](https://github.com/openclaw/openclaw/pull/111204)
- Recover Custodian conversations after inference invalidates a session [#111562](https://github.com/openclaw/openclaw/pull/111562)
- Make dashboard boards scrollable [#111911](https://github.com/openclaw/openclaw/pull/111911)
- Show all Workboard cards when no board is selected [#112484](https://github.com/openclaw/openclaw/pull/112484)
- Keep session progress with the selected agent after reconnects [#114548](https://github.com/openclaw/openclaw/pull/114548)
- Preserve Workboard sessions during card edits [#114804](https://github.com/openclaw/openclaw/pull/114804)
- Keep multiple Workboard widgets synchronized [#114972](https://github.com/openclaw/openclaw/pull/114972)
- Preserve Workboard draft edits across rerenders [#115141](https://github.com/openclaw/openclaw/pull/115141)
- Show local assistant media while preview roots load [#115672](https://github.com/openclaw/openclaw/pull/115672)
- Keep chat content visible after HTML-backed disclosure blocks [#115877](https://github.com/openclaw/openclaw/pull/115877)
- Restore deleted-board Workboard routing [#116342](https://github.com/openclaw/openclaw/pull/116342)
- Restore settings search, signed media previews, and native chat text [#116654](https://github.com/openclaw/openclaw/pull/116654)
- Revalidate cached Gateway media correctly [#116880](https://github.com/openclaw/openclaw/pull/116880)
- Close Gateway media file handles reliably [#117000](https://github.com/openclaw/openclaw/pull/117000)
- Honor If-Modified-Since for authenticated Gateway media [#117133](https://github.com/openclaw/openclaw/pull/117133)
- Preserve board widget metadata for HEAD requests [#120177](https://github.com/openclaw/openclaw/pull/120177)
- Complete bounded file reads for previews and media detection [#120208](https://github.com/openclaw/openclaw/pull/120208)
- Make Control UI task suggestions actionable and display-safe [#120967](https://github.com/openclaw/openclaw/pull/120967)
- Show pasted titles and final replies for remote sessions [#121467](https://github.com/openclaw/openclaw/pull/121467)
- Report an error when every Web Push test delivery fails [#122080](https://github.com/openclaw/openclaw/pull/122080)
- Generate session titles through the active runtime's authentication [#122163](https://github.com/openclaw/openclaw/pull/122163)
- Show placeholders for blocked remote chat images [#122312](https://github.com/openclaw/openclaw/pull/122312)
- Show every active task in the Control UI [#122565](https://github.com/openclaw/openclaw/pull/122565)
- fix(gateway): recover embedded channel runs in chat startup projection [#123189](https://github.com/openclaw/openclaw/pull/123189)
- Keep recently completed tasks visible and correctly ordered [#123219](https://github.com/openclaw/openclaw/pull/123219)
- Show portal previews when CSP blocks only the probe [#123344](https://github.com/openclaw/openclaw/pull/123344)
- Render managed images under Control UI base paths [#123592](https://github.com/openclaw/openclaw/pull/123592)
- Reject over-limit Control UI file attachments before encoding [#123654](https://github.com/openclaw/openclaw/pull/123654)
- Prevent duplicate Canvas dashboard pins after reload [#123721](https://github.com/openclaw/openclaw/pull/123721)
- Reclaim attachments on selected chat-send and catalog exits [#123983](https://github.com/openclaw/openclaw/pull/123983)
- Reduce chat branch polling and recover dropdown state [#124094](https://github.com/openclaw/openclaw/pull/124094)
- Keep task Retry and Dismiss results across refresh [#124371](https://github.com/openclaw/openclaw/pull/124371)
- Release discarded Control UI attachment payloads [#124391](https://github.com/openclaw/openclaw/pull/124391)
- Show snapshot failures after forced worktree removal [#124605](https://github.com/openclaw/openclaw/pull/124605)
- Generate readable worktree and session titles at dispatch [#124787](https://github.com/openclaw/openclaw/pull/124787)
- Unify session previews and stop leaking or over-stripping reply markers [#124997](https://github.com/openclaw/openclaw/pull/124997)
- Refresh device lists after concurrent changes [#125627](https://github.com/openclaw/openclaw/pull/125627)
- Prevent dashboard session conflicts during concurrent updates [#125777](https://github.com/openclaw/openclaw/pull/125777)
- Retry dashboard sends after concurrent session updates [#125849](https://github.com/openclaw/openclaw/pull/125849)
- Keep progress cards available in ordinary Codex runs [#126189](https://github.com/openclaw/openclaw/pull/126189)
- Stop replaying unchanged session PR subscriptions [#126726](https://github.com/openclaw/openclaw/pull/126726)
- fix(gateway): live sessions stall or reorder across agent identities [#128265](https://github.com/openclaw/openclaw/pull/128265)
- fix(gateway): preserve mixed media failure receipts [#128423](https://github.com/openclaw/openclaw/pull/128423)
- fix(gateway): project canonical session events [#129313](https://github.com/openclaw/openclaw/pull/129313)
- fix(ui): align collapsed top-left controls [#129920](https://github.com/openclaw/openclaw/pull/129920)
- fix: cloud machine picker loses CPU and RAM with larger catalogs [#130684](https://github.com/openclaw/openclaw/pull/130684)
- fix: hide unsupported cloud machine class overrides [#130766](https://github.com/openclaw/openclaw/pull/130766)
- fix: stop suggesting unsupported cloud worker classes [#130787](https://github.com/openclaw/openclaw/pull/130787)
- fix(crabbox): recover machine choices after catalog failures [#130828](https://github.com/openclaw/openclaw/pull/130828)
- Keep truncated session titles and previews emoji-safe [#102090](https://github.com/openclaw/openclaw/pull/102090)
- Keep Control UI truncation safe at emoji boundaries [#102225](https://github.com/openclaw/openclaw/pull/102225)
- Keep truncated chat text Unicode-safe [#102470](https://github.com/openclaw/openclaw/pull/102470)
- Keep long live-chat replies emoji-safe when trimmed [#102484](https://github.com/openclaw/openclaw/pull/102484)
- Keep emoji intact in Overview event previews [#102625](https://github.com/openclaw/openclaw/pull/102625)
- Prevent Workboard select menus from flashing before positioning [#102867](https://github.com/openclaw/openclaw/pull/102867)
- Keep identity text valid at emoji boundaries [#103034](https://github.com/openclaw/openclaw/pull/103034)
- Restore the Worktrees table layout [#103899](https://github.com/openclaw/openclaw/pull/103899)
- Preserve emoji in pending config summaries [#103908](https://github.com/openclaw/openclaw/pull/103908)
- Prevent broken emoji in exported tool previews [#104054](https://github.com/openclaw/openclaw/pull/104054)
- Time out incomplete Admin HTTP RPC request bodies [#104564](https://github.com/openclaw/openclaw/pull/104564)
- Stop Telegram Mini App dashboard loading from hanging indefinitely [#104629](https://github.com/openclaw/openclaw/pull/104629)
- Keep emoji intact in long Control UI branch labels [#104901](https://github.com/openclaw/openclaw/pull/104901)
- Keep explicit current-chat replies visible in Control UI history [#106073](https://github.com/openclaw/openclaw/pull/106073)
- Prevent overlapping and stale Logbook refreshes [#106397](https://github.com/openclaw/openclaw/pull/106397)
- Keep exported session preview truncation UTF-16 safe [#106400](https://github.com/openclaw/openclaw/pull/106400)
- Reject malformed Control UI compression weights [#107617](https://github.com/openclaw/openclaw/pull/107617)
- Prevent workspace reveal and config open from hanging [#110277](https://github.com/openclaw/openclaw/pull/110277)
- Enforce valid usage-meter widths [#110410](https://github.com/openclaw/openclaw/pull/110410)
- Preserve emoji in truncated dashboard event notices [#111702](https://github.com/openclaw/openclaw/pull/111702)
- Prefer the most recently seen offline Canvas node [#112084](https://github.com/openclaw/openclaw/pull/112084)
- Keep IME confirmation from sending unfinished Copilot messages [#113752](https://github.com/openclaw/openclaw/pull/113752)
- Fall back when the profile hero avatar cannot load [#115600](https://github.com/openclaw/openclaw/pull/115600)
- Prevent duplicate and stale profile refreshes [#116764](https://github.com/openclaw/openclaw/pull/116764)
- Report static Control UI asset sizes on HEAD requests [#117049](https://github.com/openclaw/openclaw/pull/117049)
- Honor HTTP-date validators when resuming gateway media [#117058](https://github.com/openclaw/openclaw/pull/117058)
- Report avatar size on authenticated HEAD requests [#117124](https://github.com/openclaw/openclaw/pull/117124)
- Stop advertising an unsupported Canvas snapshot delay [#117326](https://github.com/openclaw/openclaw/pull/117326)
- Report accurate A2UI asset sizes in HEAD responses [#117961](https://github.com/openclaw/openclaw/pull/117961)
- Report Canvas document sizes on HEAD requests [#117964](https://github.com/openclaw/openclaw/pull/117964)
- Show original filenames on chat attachment cards [#118628](https://github.com/openclaw/openclaw/pull/118628)
- Reject explicitly empty Gateway attachments [#118742](https://github.com/openclaw/openclaw/pull/118742)
- Preserve byte-accurate Control UI metadata for HEAD requests [#119822](https://github.com/openclaw/openclaw/pull/119822)
- fix(gateway): serve Control UI assistant media for uppercase file URLs [#121827](https://github.com/openclaw/openclaw/pull/121827)
- Show newly paired devices without reconnecting [#122774](https://github.com/openclaw/openclaw/pull/122774)
- Keep native history anchored while older messages load [#123103](https://github.com/openclaw/openclaw/pull/123103)
- Show timed-out runs correctly in the Control UI [#123511](https://github.com/openclaw/openclaw/pull/123511)
- Keep delayed final replies above newer chat turns [#123560](https://github.com/openclaw/openclaw/pull/123560)
- Show visible errors when dashboard pinning fails [#124044](https://github.com/openclaw/openclaw/pull/124044)
- Clean up abandoned chat attachments across every pre-send exit [#124100](https://github.com/openclaw/openclaw/pull/124100)
- Reject oversized Control UI requests before disconnect [#124139](https://github.com/openclaw/openclaw/pull/124139)
- Discard unreferenced attachments when hooks block a chat turn [#124353](https://github.com/openclaw/openclaw/pull/124353)
- Stop closed Gateway clients from restoring subscriptions [#124771](https://github.com/openclaw/openclaw/pull/124771)
- Stop duplicate dashboard session queries [#124968](https://github.com/openclaw/openclaw/pull/124968)
- Stop Canvas snapshots from returning deleted file paths [#125216](https://github.com/openclaw/openclaw/pull/125216)
- Unify and harden Control UI resource routes [#126386](https://github.com/openclaw/openclaw/pull/126386)
- Show offline node status on mixed-role devices [#126428](https://github.com/openclaw/openclaw/pull/126428)
- Refresh mixed-role node status on disconnect [#126677](https://github.com/openclaw/openclaw/pull/126677)
- Make task-result copying reliable when browser clipboard access fails [#127181](https://github.com/openclaw/openclaw/pull/127181)
- Recover Lobsterdex link copying from clipboard failures [#127194](https://github.com/openclaw/openclaw/pull/127194)
- fix(ui): let mobile workboard scroll with toolbar [#129497](https://github.com/openclaw/openclaw/pull/129497)
- fix(ui): cloud worker profile edits corrupt other providers [#129846](https://github.com/openclaw/openclaw/pull/129846)
- fix(ui): keep update badge clear of chat title [#129992](https://github.com/openclaw/openclaw/pull/129992)
- fix(codex): keep progress cards out of chat history [#130022](https://github.com/openclaw/openclaw/pull/130022)
- Report Canvas live-reload WebSocket failures [#82505](https://github.com/openclaw/openclaw/pull/82505)

</details>

</Accordion>

<Accordion title="Terminal App">

The [terminal app](/web/tui) now stays on the conversation you most recently selected during rapid switching and preserves the active answer and chosen tool visibility when you return to it. It retries one temporary live-update failure, while a second failure remains visible and full verbosity continues to show stored tool output.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Enable terminal controls for paired Mac sessions [#107361](https://github.com/openclaw/openclaw/pull/107361)

**Bug fixes**

- Make resumed native terminals connect and display output reliably [#107688](https://github.com/openclaw/openclaw/pull/107688)
- Prevent `/reset` from destroying an active TUI conversation [#113841](https://github.com/openclaw/openclaw/pull/113841)
- Make Apple Watch approvals and iPhone lifecycle recovery more reliable [#114366](https://github.com/openclaw/openclaw/pull/114366)
- Keep terminal conversations isolated and streamed replies intact [#114504](https://github.com/openclaw/openclaw/pull/114504)
- Preserve replies, drafts, and session state in the TUI [#114816](https://github.com/openclaw/openclaw/pull/114816)
- Keep Apple device auth from blocking node-host restarts [#115533](https://github.com/openclaw/openclaw/pull/115533)
- Preserve Wear phone-discovery resources in release builds [#116068](https://github.com/openclaw/openclaw/pull/116068)
- Preserve TUI session state across switches and reconnects [#116399](https://github.com/openclaw/openclaw/pull/116399)
- Preserve Android and Wear work across lifecycle changes [#116593](https://github.com/openclaw/openclaw/pull/116593)
- Preserve TUI input across session resets [#116873](https://github.com/openclaw/openclaw/pull/116873)
- Share Control UI chat terminals with their agents [#125758](https://github.com/openclaw/openclaw/pull/125758)
- Keep explicitly disconnected Android nodes offline [b9d53d3](https://github.com/openclaw/openclaw/commit/b9d53d3)
- Order Android disconnect cleanup after in-flight gateway work [#103068](https://github.com/openclaw/openclaw/pull/103068)
- Prevent duplicate Mac launches from opening SSH tunnels [#103892](https://github.com/openclaw/openclaw/pull/103892)
- Restore the Android node connection after process death [#104226](https://github.com/openclaw/openclaw/pull/104226)
- Let paired Mac Codex session catalogs finish loading [#104299](https://github.com/openclaw/openclaw/pull/104299)
- Allow slower Codex session catalogs from paired Macs [#104332](https://github.com/openclaw/openclaw/pull/104332)
- Keep rapid TUI session switches on the latest selection [#104824](https://github.com/openclaw/openclaw/pull/104824)
- Restore macOS node reconnects after Gateway drops [#105091](https://github.com/openclaw/openclaw/pull/105091)
- Allow slower Mac node workers to finish starting [#106281](https://github.com/openclaw/openclaw/pull/106281)
- Allow five minutes for macOS node cold starts [#106380](https://github.com/openclaw/openclaw/pull/106380)
- Keep remote Mac nodes connected through metadata writes [#106419](https://github.com/openclaw/openclaw/pull/106419)
- Let remote Mac nodes finish connecting after tunnel recovery [#106481](https://github.com/openclaw/openclaw/pull/106481)
- Preserve TUI drafts and submit readiness across Gateway restarts [#107115](https://github.com/openclaw/openclaw/pull/107115)
- Restore paired-node Claude and Codex session catalogs [#107410](https://github.com/openclaw/openclaw/pull/107410)
- Preserve TUI session restore state in SQLite [#108058](https://github.com/openclaw/openclaw/pull/108058)
- Fix Claude CLI selection and group native sessions by host [#108062](https://github.com/openclaw/openclaw/pull/108062)
- Reload usage-bar templates after watcher errors [#109462](https://github.com/openclaw/openclaw/pull/109462)
- Honor queue modes in local chat sessions [#109689](https://github.com/openclaw/openclaw/pull/109689)
- Keep Swift node routes valid during connection callbacks [#110127](https://github.com/openclaw/openclaw/pull/110127)
- Split Android cache from durable client state [#111710](https://github.com/openclaw/openclaw/pull/111710)
- Recover Linux Quick Chat from a corrupt Gateway identity [#114359](https://github.com/openclaw/openclaw/pull/114359)
- Keep terminal conversations synchronized across clients [#114443](https://github.com/openclaw/openclaw/pull/114443)
- Prevent stale mobile cancellation from disrupting newer sessions [#114549](https://github.com/openclaw/openclaw/pull/114549)
- Recover TUI chat after Gateway event gaps [#114932](https://github.com/openclaw/openclaw/pull/114932)
- Stop Mac node workers from respawning forever [#114974](https://github.com/openclaw/openclaw/pull/114974)
- Recover TUI session updates after a transient subscription failure [#115010](https://github.com/openclaw/openclaw/pull/115010)
- Prevent dropped WebSocket pongs from wedging Mac keepalive [#115362](https://github.com/openclaw/openclaw/pull/115362)
- Recover native device identity after an interrupted import [#115494](https://github.com/openclaw/openclaw/pull/115494)
- Wait for the current snapshot after macOS reconnects [#116550](https://github.com/openclaw/openclaw/pull/116550)
- fix(tui): own picker roster request lifecycles canonically [#117285](https://github.com/openclaw/openclaw/pull/117285)
- Keep local TUI status accurate through turn completion [#117402](https://github.com/openclaw/openclaw/pull/117402)
- Show attachment-only assistant replies in the TUI [#117460](https://github.com/openclaw/openclaw/pull/117460)
- Clear stale TUI modes when switching sessions [#117658](https://github.com/openclaw/openclaw/pull/117658)
- Prevent stale TUI runs after switching sessions [#117853](https://github.com/openclaw/openclaw/pull/117853)
- Preserve reasoning and tool traces after chat navigation [#118332](https://github.com/openclaw/openclaw/pull/118332)
- Reject delivery to disconnected Apple Watch polling sockets [#118606](https://github.com/openclaw/openclaw/pull/118606)
- Recover macOS node startup when legacy identity files reappear [#120610](https://github.com/openclaw/openclaw/pull/120610)
- Fix Windows launches for npm-installed session CLIs [#122334](https://github.com/openclaw/openclaw/pull/122334)
- Render each live TUI assistant reply once [#123395](https://github.com/openclaw/openclaw/pull/123395)
- Prevent macOS node workers from restarting after stop [#123651](https://github.com/openclaw/openclaw/pull/123651)
- Keep replacement Mac node workers active after stale exits [#123969](https://github.com/openclaw/openclaw/pull/123969)
- Keep embedded CUA unavailable when PID tracking fails [#124572](https://github.com/openclaw/openclaw/pull/124572)
- Show interrupted and failed TUI runs after reconnect [#125898](https://github.com/openclaw/openclaw/pull/125898)
- Prevent TUI startup messages from going to the wrong session [#126046](https://github.com/openclaw/openclaw/pull/126046)
- fix(tui): settle activity from authoritative Gateway run ownership [#126497](https://github.com/openclaw/openclaw/pull/126497)
- fix(macos): return paired-node Codex catalogs without native supervision [#126811](https://github.com/openclaw/openclaw/pull/126811)
- Keep Terminal UI messages with the replacement agent [#126820](https://github.com/openclaw/openclaw/pull/126820)
- perf(tui): stop blocking the editor on every path autocomplete keystroke [#127834](https://github.com/openclaw/openclaw/pull/127834)
- fix(tui): preserve active session runs and hidden tool output [#129496](https://github.com/openclaw/openclaw/pull/129496)
- fix(tui): keep pending follow-up actions hidden after navigation [#130458](https://github.com/openclaw/openclaw/pull/130458)
- fix(tui): avoid stalls for non-auth error messages [#131273](https://github.com/openclaw/openclaw/pull/131273)
- Allow paired iPhones to relay Watch commands [58d55ca](https://github.com/openclaw/openclaw/commit/58d55ca)
- Keep TUI error explanations visible after history reloads [#104864](https://github.com/openclaw/openclaw/pull/104864)
- Fail fast during macOS node reconnect cleanup [#105282](https://github.com/openclaw/openclaw/pull/105282)
- Keep Linux node failure text valid [#107717](https://github.com/openclaw/openclaw/pull/107717)
- Preserve emoji in long Pi and OpenCode session searches [#107719](https://github.com/openclaw/openclaw/pull/107719)
- Connect node hosts to IPv6 Gateway literals [#109179](https://github.com/openclaw/openclaw/pull/109179)
- Preserve Unicode in Pi catalog tool arguments [#109589](https://github.com/openclaw/openclaw/pull/109589)
- Preserve Unicode when truncating OpenCode catalog tool input [#109591](https://github.com/openclaw/openclaw/pull/109591)
- Keep macOS PortGuardian compatible with current state databases [#111032](https://github.com/openclaw/openclaw/pull/111032)
- Import existing direct Gateways into macOS saved profiles [#112629](https://github.com/openclaw/openclaw/pull/112629)
- Copy text through the PowerShell clipboard fallback [#113835](https://github.com/openclaw/openclaw/pull/113835)
- Bound macOS remote SSH tunnel teardown [#115861](https://github.com/openclaw/openclaw/pull/115861)
- fix(codex): open local images with uppercase file URLs [#121611](https://github.com/openclaw/openclaw/pull/121611)
- Preserve Unicode Windows LAN route aliases [#122263](https://github.com/openclaw/openclaw/pull/122263)
- Report TUI session-memory write failures once [#124886](https://github.com/openclaw/openclaw/pull/124886)
- Clear stale TUI overlays when restoring a remembered session [#125086](https://github.com/openclaw/openclaw/pull/125086)
- Keep agent-opened terminals in the background [#125101](https://github.com/openclaw/openclaw/pull/125101)
- Restore remembered global TUI sessions before the first send [#126135](https://github.com/openclaw/openclaw/pull/126135)
- Keep Crabbox worker wallpaper visible after desktop setup [#126560](https://github.com/openclaw/openclaw/pull/126560)
- Keep macOS elevation computer control active [#126674](https://github.com/openclaw/openclaw/pull/126674)
- Clear stale TUI session names after switching [#127029](https://github.com/openclaw/openclaw/pull/127029)

</details>

</Accordion>

<Accordion title="Voice and Talk">

Browser [Realtime Talk](/nodes/talk) now limits stalled microphone uploads, queued playback, replacement work, and abandoned voice sessions instead of letting them grow without bound. A malformed audio frame can be dropped without ending healthy playback, while Google Live ends the current voice session when it cannot safely cancel only the response that overflowed.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Keep GPT-Live Browser Talk available across session cleanup [#116603](https://github.com/openclaw/openclaw/pull/116603)
- Bound and safely replace browser Realtime Talk sessions [#117216](https://github.com/openclaw/openclaw/pull/117216)
- Prevent stale realtime voice work after reconnects [#117599](https://github.com/openclaw/openclaw/pull/117599)
- Preserve final speech during Talk shutdown [#118693](https://github.com/openclaw/openclaw/pull/118693)
- Keep realtime voice sessions usable after failed or incomplete responses [#121177](https://github.com/openclaw/openclaw/pull/121177)
- fix(talk): isolate cancellation ownership contract [#127186](https://github.com/openclaw/openclaw/pull/127186)
- Bound Google realtime browser-token requests [#106034](https://github.com/openclaw/openclaw/pull/106034)
- Stop xAI voice reconnect waits when a session closes [#108252](https://github.com/openclaw/openclaw/pull/108252)
- Stop stalled Google Live Realtime Talk startups [#109020](https://github.com/openclaw/openclaw/pull/109020)
- Release Realtime Talk media after WebRTC disconnects [#109914](https://github.com/openclaw/openclaw/pull/109914)
- Wait for a usable Talk call before restoring camera [#110874](https://github.com/openclaw/openclaw/pull/110874)
- Close stale Talk allocations after stop or restart [#112384](https://github.com/openclaw/openclaw/pull/112384)
- Keep Realtime Talk media and updates in the correct chat [#116067](https://github.com/openclaw/openclaw/pull/116067)
- Bound superseded GPT-Live agent consults [#116211](https://github.com/openclaw/openclaw/pull/116211)
- Bound OpenAI realtime playback acknowledgement state [#116288](https://github.com/openclaw/openclaw/pull/116288)
- Bound realtime voice talkback backlog [#116420](https://github.com/openclaw/openclaw/pull/116420)
- Bound oversized GPT-Live delegation responses [#116482](https://github.com/openclaw/openclaw/pull/116482)
- Google Live reconnects discard stale sessions [#116493](https://github.com/openclaw/openclaw/pull/116493)
- Clear stale input and bound memory in closed xAI voice sessions [#116659](https://github.com/openclaw/openclaw/pull/116659)
- Release realtime Talk relays after disconnect [#116684](https://github.com/openclaw/openclaw/pull/116684)
- Bound Browser Talk audio uploads during stalled Gateway uplinks [#116696](https://github.com/openclaw/openclaw/pull/116696)
- Stop Realtime Talk from retaining runaway audio [#116734](https://github.com/openclaw/openclaw/pull/116734)
- Bound durable Talk transcript persistence [#117214](https://github.com/openclaw/openclaw/pull/117214)
- Bound Talk relay transcript persistence [#117215](https://github.com/openclaw/openclaw/pull/117215)
- Start a fresh Google Live session after resume invalidation [#117371](https://github.com/openclaw/openclaw/pull/117371)
- Prevent xAI retries from reviving closed voice sessions [#117399](https://github.com/openclaw/openclaw/pull/117399)
- Keep the first Google realtime voice input from being dropped [#117450](https://github.com/openclaw/openclaw/pull/117450)
- Honor Google Live's 60-second browser activation deadline [#117490](https://github.com/openclaw/openclaw/pull/117490)
- Preserve Google realtime prompts during startup [#117529](https://github.com/openclaw/openclaw/pull/117529)
- Stop Talk microphone polling after session cleanup [#117573](https://github.com/openclaw/openclaw/pull/117573)
- Preserve xAI realtime voice terminal outcomes [#117600](https://github.com/openclaw/openclaw/pull/117600)
- Bound and order Google realtime startup audio [#117640](https://github.com/openclaw/openclaw/pull/117640)
- Stop late audio after a realtime Talk session closes [#117682](https://github.com/openclaw/openclaw/pull/117682)
- Bound browser Talk tool calls and prevent duplicate execution [#117732](https://github.com/openclaw/openclaw/pull/117732)
- Bound Google Live tool ownership and cancellation [#117896](https://github.com/openclaw/openclaw/pull/117896)
- Execute OpenAI Realtime tools only from completed responses [#117923](https://github.com/openclaw/openclaw/pull/117923)
- Bound detached browser Talk voice-session owners [#117974](https://github.com/openclaw/openclaw/pull/117974)
- Preserve terminal voice events under backpressure [#118433](https://github.com/openclaw/openclaw/pull/118433)
- Stop stalled xAI voice sessions before playback marks grow unbounded [#119045](https://github.com/openclaw/openclaw/pull/119045)
- Start realtime voice timeout after authentication [#119131](https://github.com/openclaw/openclaw/pull/119131)
- fix(ui): prevent oversized WebRTC SDP answers from hanging Talk setup [#119295](https://github.com/openclaw/openclaw/pull/119295)
- Keep xAI voice turns running after malformed terminal output [#120002](https://github.com/openclaw/openclaw/pull/120002)
- Move realtime voice policy into Talk ownership [#122668](https://github.com/openclaw/openclaw/pull/122668)
- End failed xAI and Google voice connections cleanly [#123064](https://github.com/openclaw/openclaw/pull/123064)
- Prevent OpenAI Realtime barge-in truncation errors [#125502](https://github.com/openclaw/openclaw/pull/125502)
- Keep xAI voice interruptions within produced audio [#125612](https://github.com/openclaw/openclaw/pull/125612)
- fix(talk): keep unused speech secrets from blocking startup [#127687](https://github.com/openclaw/openclaw/pull/127687)
- fix(voice): fence realtime bridge lifecycle [#129249](https://github.com/openclaw/openclaw/pull/129249)
- fix(talk): preserve accepted work on relay detach (#121894) [87665fa](https://github.com/openclaw/openclaw/commit/87665fa)
- Preserve Unicode in voice-wake trigger limits [#103210](https://github.com/openclaw/openclaw/pull/103210)
- Stop WebRTC voice setup from hanging indefinitely [#104662](https://github.com/openclaw/openclaw/pull/104662)
- Reject malformed Talk relay audio frames [#106502](https://github.com/openclaw/openclaw/pull/106502)
- Bound retained text in browser Realtime Talk conversations [#117581](https://github.com/openclaw/openclaw/pull/117581)
- Avoid media prompts after Realtime Talk is cancelled [#117958](https://github.com/openclaw/openclaw/pull/117958)
- Bound realtime Talk relay tool-call state [#117972](https://github.com/openclaw/openclaw/pull/117972)
- fix(ui): ignore malformed realtime talk audio frames instead of throwing [#119215](https://github.com/openclaw/openclaw/pull/119215)
- Warn when browser Talk microphone uploads fall behind [#123783](https://github.com/openclaw/openclaw/pull/123783)
- fix(talk): make relay playback completion idempotent [#129818](https://github.com/openclaw/openclaw/pull/129818)

</details>

</Accordion>

<Accordion title="Models and providers">

Specific [GitHub Copilot](/plugins/reference/github-copilot) and xAI replay failures now recover without resetting the conversation. Copilot preserves valid same-run reasoning through active tool calls, and affected post-compaction or encrypted-reasoning failures receive one bounded sanitized retry under the matching transport, model family, or xAI decrypt signature.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Fix OpenAI Realtime authentication and transcription secrets [#102518](https://github.com/openclaw/openclaw/pull/102518)
- Keep interrupted Anthropic thinking from breaking session replay [#104043](https://github.com/openclaw/openclaw/pull/104043)
- Keep Codex thread bindings within plugin-state limits [#104504](https://github.com/openclaw/openclaw/pull/104504)
- Keep parent Codex sessions alive after child creation [#108042](https://github.com/openclaw/openclaw/pull/108042)
- Preserve detected MIME types for input images [#111276](https://github.com/openclaw/openclaw/pull/111276)
- Preserve Codex-bound conversations across session rotation [#112016](https://github.com/openclaw/openclaw/pull/112016)
- Make Codex session caching and benchmark parity exact [#115663](https://github.com/openclaw/openclaw/pull/115663)
- Restore Codex SQLite session continuity [#116944](https://github.com/openclaw/openclaw/pull/116944)
- Preserve Claude follow-up replies after background tasks [#119073](https://github.com/openclaw/openclaw/pull/119073)
- Prevent photo-heavy Claude turns from hitting the output cap [#119488](https://github.com/openclaw/openclaw/pull/119488)
- Preserve Codex sessions and approvals across chats [#120405](https://github.com/openclaw/openclaw/pull/120405)
- Preserve long OpenAI sessions after server compaction [#120457](https://github.com/openclaw/openclaw/pull/120457)
- Preserve Codex thread ownership across conversation and subagent lifecycles [#120740](https://github.com/openclaw/openclaw/pull/120740)
- Restore prompt caching for Claude Opus 5 and Sonnet 5 [#121283](https://github.com/openclaw/openclaw/pull/121283)
- Keep compacted OpenAI sessions usable after transcript cleanup [#123485](https://github.com/openclaw/openclaw/pull/123485)
- Preserve the real Codex answer when a coda follows [#123993](https://github.com/openclaw/openclaw/pull/123993)
- Improve Claude CLI prompt-cache reuse [#124300](https://github.com/openclaw/openclaw/pull/124300)
- Keep session context windows aligned with the active runtime [#124303](https://github.com/openclaw/openclaw/pull/124303)
- Bound Codex continuity projections when context engines are unavailable [#125324](https://github.com/openclaw/openclaw/pull/125324)
- Preserve Claude CLI conversation continuity without native transcripts [#96841](https://github.com/openclaw/openclaw/pull/96841)
- Restore compaction for Bedrock AWS SDK authentication [#103638](https://github.com/openclaw/openclaw/pull/103638)
- Preserve emoji boundaries during context pruning [#104404](https://github.com/openclaw/openclaw/pull/104404)
- Preserve UTF-16 boundaries in bootstrap context [#104423](https://github.com/openclaw/openclaw/pull/104423)
- Preserve Codex thread continuity after beta5 upgrades [#104848](https://github.com/openclaw/openclaw/pull/104848)
- Restore OpenAI OAuth models on attached cloud workers [#107791](https://github.com/openclaw/openclaw/pull/107791)
- Bound the missing-provider warning cache [#108806](https://github.com/openclaw/openclaw/pull/108806)
- Keep shared Codex clients alive for active sibling turns [#110227](https://github.com/openclaw/openclaw/pull/110227)
- Deliver bound ACP follow-up turns to external harnesses [#110261](https://github.com/openclaw/openclaw/pull/110261)
- Bound Codex session resume work and recover from temporary overloads [#110396](https://github.com/openclaw/openclaw/pull/110396)
- fix(github-copilot): preserve reasoning during tool calls [#112659](https://github.com/openclaw/openclaw/pull/112659)
- Keep adopted Claude Code chats working across turns [#113078](https://github.com/openclaw/openclaw/pull/113078)
- Preserve Claude cache during stalled session recovery [#113866](https://github.com/openclaw/openclaw/pull/113866)
- Recover Codex chats after in-place session resets [#114056](https://github.com/openclaw/openclaw/pull/114056)
- Speed up long Codex thread resumes [#114882](https://github.com/openclaw/openclaw/pull/114882)
- Preserve replacement CLI sessions during recovery [#114926](https://github.com/openclaw/openclaw/pull/114926)
- Stop offering unsupported Codex OAuth realtime sessions [#115211](https://github.com/openclaw/openclaw/pull/115211)
- Keep pre-switch reasoning removed on later replay turns [#115287](https://github.com/openclaw/openclaw/pull/115287)
- Restore sequential embedded Codex runs with stable keys [#115601](https://github.com/openclaw/openclaw/pull/115601)
- Keep custom-provider models from crashing session lists [#115713](https://github.com/openclaw/openclaw/pull/115713)
- Preserve assistant text boundaries in OpenAI-compatible replay [#115743](https://github.com/openclaw/openclaw/pull/115743)
- Preserve Claude CLI text before tool calls in final replies [#115890](https://github.com/openclaw/openclaw/pull/115890)
- Refresh local date context in long-running agent sessions [#116090](https://github.com/openclaw/openclaw/pull/116090)
- fix(codex): preserve user home default for session catalog [#116131](https://github.com/openclaw/openclaw/pull/116131)
- Keep remote Codex WebSocket sessions connected [#116135](https://github.com/openclaw/openclaw/pull/116135)
- Preserve Codex conversation continuity during concurrent reconnects [#116216](https://github.com/openclaw/openclaw/pull/116216)
- Show /new guidance for thinking-signature replay failures [#116987](https://github.com/openclaw/openclaw/pull/116987)
- Limit gateway response attachments to the active turn [#120742](https://github.com/openclaw/openclaw/pull/120742)
- Clear stale OpenAI replay checkpoints after transcript rewrites [#120786](https://github.com/openclaw/openclaw/pull/120786)
- Stabilize Claude CLI live-session lifecycle [#121566](https://github.com/openclaw/openclaw/pull/121566)
- fix(acp): avoid resending described images [#122041](https://github.com/openclaw/openclaw/pull/122041)
- Resume OpenAI Responses sessions from compaction-only checkpoints [#122519](https://github.com/openclaw/openclaw/pull/122519)
- Keep Responses sessions usable with malformed reasoning history [#123228](https://github.com/openclaw/openclaw/pull/123228)
- Recover OpenAI turns after rejected compaction [#123398](https://github.com/openclaw/openclaw/pull/123398)
- Preserve context usage across resumed Codex sessions [#124969](https://github.com/openclaw/openclaw/pull/124969)
- Preserve retained user turns after OpenAI Responses compaction [#124974](https://github.com/openclaw/openclaw/pull/124974)
- fix(copilot): Claude models stop replying after auto-compaction [#125015](https://github.com/openclaw/openclaw/pull/125015)
- Start OpenAI Responses compaction within the active context budget [#125342](https://github.com/openclaw/openclaw/pull/125342)
- Keep Claude CLI subagent activity out of the parent turn [#125621](https://github.com/openclaw/openclaw/pull/125621)
- Preserve final replies after Copilot BYOK tool turns [#126097](https://github.com/openclaw/openclaw/pull/126097)
- fix(claude): preserve partial output on aborted live turns [#126883](https://github.com/openclaw/openclaw/pull/126883)
- Preserve compaction-only replay checkpoints [#127106](https://github.com/openclaw/openclaw/pull/127106)
- fix(agents): preserve valid CLI session bindings [#128732](https://github.com/openclaw/openclaw/pull/128732)
- fix(anthropic): keep Agent SDK session warm after first turn [#128985](https://github.com/openclaw/openclaw/pull/128985)
- fix(providers): recover conversations after encrypted reasoning stream rejection [#129886](https://github.com/openclaw/openclaw/pull/129886)
- fix(agents): route CLI bootstrap truncation notice into the system prompt [#130325](https://github.com/openclaw/openclaw/pull/130325)
- fix(agents): preserve admitted CLI session context [#130475](https://github.com/openclaw/openclaw/pull/130475)
- fix(codex): prevent stale resumes from disrupting shared sessions [#130701](https://github.com/openclaw/openclaw/pull/130701)
- fix(codex): clean up subscriptions after failed thread resumes [#130862](https://github.com/openclaw/openclaw/pull/130862)
- fix(anthropic): stabilize SDK environment before session fingerprinting [#132535](https://github.com/openclaw/openclaw/pull/132535)
- Preserve real replies after Claude CLI resume placeholders [#90799](https://github.com/openclaw/openclaw/pull/90799)
- Prevent stale GitHub Copilot reasoning data from breaking later turns [#95493](https://github.com/openclaw/openclaw/pull/95493)
- Keep compaction on the model selected for the live session [#95713](https://github.com/openclaw/openclaw/pull/95713)
- Recover xAI/Grok turns from stale encrypted reasoning replay [#97926](https://github.com/openclaw/openclaw/pull/97926)
- Clarify rejected API keys in Realtime Talk [#102461](https://github.com/openclaw/openclaw/pull/102461)
- Extend indexed-access safety across core packages [#104626](https://github.com/openclaw/openclaw/pull/104626)
- Give clear guidance when GPT-Live voice models are unsupported [#104695](https://github.com/openclaw/openclaw/pull/104695)
- Apply provider defaults to explicit video entries [#108396](https://github.com/openclaw/openclaw/pull/108396)
- Release failed Chutes userinfo connections [#109677](https://github.com/openclaw/openclaw/pull/109677)
- Reject malformed UTF-8 in proxy gateway error responses [#111852](https://github.com/openclaw/openclaw/pull/111852)
- Preserve tool results when replay IDs contain whitespace [#111864](https://github.com/openclaw/openclaw/pull/111864)
- Clarify malformed image errors in Amazon Bedrock [#111872](https://github.com/openclaw/openclaw/pull/111872)
- Reject malformed active image inputs before agent dispatch [#116883](https://github.com/openclaw/openclaw/pull/116883)
- Keep image compression pinned to the admitted plugin generation [#125182](https://github.com/openclaw/openclaw/pull/125182)

</details>

</Accordion>

<Accordion title="Speech and media providers">

Across the affected shared and OpenAI [transcription](/nodes/audio) paths, repeated short-lived connections now back off and stop at the configured retry limit, OpenAI turns stay in order, more eligible final words survive microphone close, and a large backlog keeps the newest audio so the session remains responsive.

Local CLI text-to-speech now caps output memory, handles a broken audio stream safely, and preserves a valid output file when only unused stdout fails. Output metadata from Local CLI and ElevenLabs also reports the audio format that was actually produced.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- feat(comfy): support custom headers and per-request seed randomization [#130098](https://github.com/openclaw/openclaw/pull/130098)

**Bug fixes**

- Move official OpenRouter image generation to the Images API [#101367](https://github.com/openclaw/openclaw/pull/101367)
- Wait for realtime providers to accept Talk tool results [#103268](https://github.com/openclaw/openclaw/pull/103268)
- Accept URL-safe Base64 from Google media providers [#116204](https://github.com/openclaw/openclaw/pull/116204)
- Restore Google media features when the base URL is blank [#116852](https://github.com/openclaw/openclaw/pull/116852)
- Preserve realtime transcripts and final tool arguments [#116891](https://github.com/openclaw/openclaw/pull/116891)
- Restore transcription for locally stored inbound media [#117268](https://github.com/openclaw/openclaw/pull/117268)
- Harden Qwen and Alibaba Wan video generation [#117303](https://github.com/openclaw/openclaw/pull/117303)
- Keep generated media alive until active chat runs finish [#119764](https://github.com/openclaw/openclaw/pull/119764)
- Keep TTS status checks from blocking Gateway fanout [#119788](https://github.com/openclaw/openclaw/pull/119788)
- Restore implicit Codex image routing after provider folding [ea0fe35](https://github.com/openclaw/openclaw/commit/ea0fe35)
- Bound OpenRouter music stream memory use [#101488](https://github.com/openclaw/openclaw/pull/101488)
- Stop endless reconnect loops in realtime transcription [#102348](https://github.com/openclaw/openclaw/pull/102348)
- Send unsupported image formats safely to Anthropic [#102537](https://github.com/openclaw/openclaw/pull/102537)
- Bound stalled voice-list requests across speech providers [#102865](https://github.com/openclaw/openclaw/pull/102865)
- Bound stalled voice-provider JSON requests to 30 seconds [#102884](https://github.com/openclaw/openclaw/pull/102884)
- Prevent stalled fal image downloads from hanging indefinitely [#103071](https://github.com/openclaw/openclaw/pull/103071)
- Align xAI image and video capability contracts [#103384](https://github.com/openclaw/openclaw/pull/103384)
- Detect media types from percent-encoded URL filenames [#103410](https://github.com/openclaw/openclaw/pull/103410)
- Make xAI batch transcription model-less [#103419](https://github.com/openclaw/openclaw/pull/103419)
- Verify local speech-to-text acceleration before prioritizing it [#104210](https://github.com/openclaw/openclaw/pull/104210)
- Reject malformed ElevenLabs endpoint overrides safely [#105163](https://github.com/openclaw/openclaw/pull/105163)
- Validate Deepgram realtime custom endpoints [#105334](https://github.com/openclaw/openclaw/pull/105334)
- Prevent OpenAI image requests from crashing before model catalogs load [#105518](https://github.com/openclaw/openclaw/pull/105518)
- Keep Vydra media requests on configured transport policy [#105884](https://github.com/openclaw/openclaw/pull/105884)
- Preserve host-staged images for native vision [#106416](https://github.com/openclaw/openclaw/pull/106416)
- Detect media types from upload contents [#107863](https://github.com/openclaw/openclaw/pull/107863)
- OpenAI realtime voice closes promptly during reconnects [#108209](https://github.com/openclaw/openclaw/pull/108209)
- Treat blank OpenAI speech keys as missing [#108212](https://github.com/openclaw/openclaw/pull/108212)
- Reject blank Xiaomi speech API keys locally [#108558](https://github.com/openclaw/openclaw/pull/108558)
- Keep TTS selection working with invalid provider configuration [#108569](https://github.com/openclaw/openclaw/pull/108569)
- Transcribe voice notes in native harness sessions [#108714](https://github.com/openclaw/openclaw/pull/108714)
- Transcribe filename-only audio in native harness sessions [#108765](https://github.com/openclaw/openclaw/pull/108765)
- Reject blank Gradium API keys before speech requests [#108800](https://github.com/openclaw/openclaw/pull/108800)
- Reject blank speech-provider credentials consistently [#109051](https://github.com/openclaw/openclaw/pull/109051)
- Stop slow Vydra media downloads from hanging forever [#109210](https://github.com/openclaw/openclaw/pull/109210)
- Bound stalled DashScope video downloads [#109394](https://github.com/openclaw/openclaw/pull/109394)
- Stop oversized ElevenLabs streaming audio [#109621](https://github.com/openclaw/openclaw/pull/109621)
- Prevent duplicate generated-image deliveries [#110366](https://github.com/openclaw/openclaw/pull/110366)
- Preserve Vydra HTTP details when error bodies break [#110478](https://github.com/openclaw/openclaw/pull/110478)
- Clean up spoken replies and avoid narrating code-heavy responses [#110948](https://github.com/openclaw/openclaw/pull/110948)
- Recognize ambiguous M4A voice files as audio [#111177](https://github.com/openclaw/openclaw/pull/111177)
- Reject malformed Codex image Base64 [#111235](https://github.com/openclaw/openclaw/pull/111235)
- Use structured media facts for inbound audio detection [#111315](https://github.com/openclaw/openclaw/pull/111315)
- Reject invalid xAI realtime tool arguments [#111730](https://github.com/openclaw/openclaw/pull/111730)
- Keep media persistence and CLI templates aligned per attachment [#112545](https://github.com/openclaw/openclaw/pull/112545)
- Preserve OpenAI realtime transcript order [#113723](https://github.com/openclaw/openclaw/pull/113723)
- Reject malformed audio from media providers [#114041](https://github.com/openclaw/openclaw/pull/114041)
- Reject malformed provider media and embedding payloads [#114514](https://github.com/openclaw/openclaw/pull/114514)
- Surface OpenAI realtime setup errors promptly [#115582](https://github.com/openclaw/openclaw/pull/115582)
- Keep generated speech in the media store [#115647](https://github.com/openclaw/openclaw/pull/115647)
- Bound OpenAI realtime voice startup data [#116224](https://github.com/openclaw/openclaw/pull/116224)
- Bound queued realtime audio and clear it on close [#116230](https://github.com/openclaw/openclaw/pull/116230)
- Discard cancelled pre-connect OpenAI voice audio [#116735](https://github.com/openclaw/openclaw/pull/116735)
- Recognize AIFF variants across audio workflows [#116907](https://github.com/openclaw/openclaw/pull/116907)
- Fix Together video outcomes and image inputs [#116913](https://github.com/openclaw/openclaw/pull/116913)
- Preserve OpenAI video terminal results and valid edit fields [#116917](https://github.com/openclaw/openclaw/pull/116917)
- Preserve media orientation, formats, and filenames [#116928](https://github.com/openclaw/openclaw/pull/116928)
- Keep realtime transcription responsive during backlogs [#116935](https://github.com/openclaw/openclaw/pull/116935)
- Fix OpenAI Sora multipart video submissions [#116995](https://github.com/openclaw/openclaw/pull/116995)
- Make Codex image streams fail and complete reliably [#116999](https://github.com/openclaw/openclaw/pull/116999)
- Preserve queued OpenAI realtime audio frames [#117028](https://github.com/openclaw/openclaw/pull/117028)
- Preserve Gateway microphone audio during OpenAI peer startup [#117057](https://github.com/openclaw/openclaw/pull/117057)
- Bound unfinished Google Live transcripts [#117179](https://github.com/openclaw/openclaw/pull/117179)
- Bound Mistral realtime transcript growth [#117190](https://github.com/openclaw/openclaw/pull/117190)
- Reject malformed or incomplete MiniMax audio responses [#117195](https://github.com/openclaw/openclaw/pull/117195)
- Validate OpenAI video downloads before delivery [#117227](https://github.com/openclaw/openclaw/pull/117227)
- Reject malformed generated media downloads [#117281](https://github.com/openclaw/openclaw/pull/117281)
- Honor configured OpenRouter image request transport [#117336](https://github.com/openclaw/openclaw/pull/117336)
- Reject malformed text-to-speech responses [#117345](https://github.com/openclaw/openclaw/pull/117345)
- Isolate reconnecting transcription sessions [#117592](https://github.com/openclaw/openclaw/pull/117592)
- Preserve opening speech while GPT-Live starts [#117604](https://github.com/openclaw/openclaw/pull/117604)
- Keep Deepgram voice turns from ending mid-sentence [#117663](https://github.com/openclaw/openclaw/pull/117663)
- Fix Fal aspect ratios for Krea and Nano Banana 2 [#117784](https://github.com/openclaw/openclaw/pull/117784)
- Fall back when media providers return empty assets [#117875](https://github.com/openclaw/openclaw/pull/117875)
- Prevent incomplete hosted video downloads from replacing valid output [#117893](https://github.com/openclaw/openclaw/pull/117893)
- Preserve generated media files when writes fail [#117934](https://github.com/openclaw/openclaw/pull/117934)
- Preserve existing TTS output when copying fails [#117962](https://github.com/openclaw/openclaw/pull/117962)
- Bound stalled realtime transcription buffers [#118109](https://github.com/openclaw/openclaw/pull/118109)
- Reset OpenAI realtime voice bridges cleanly between sessions [#118136](https://github.com/openclaw/openclaw/pull/118136)
- Bound OpenAI realtime transcription session state [#118204](https://github.com/openclaw/openclaw/pull/118204)
- Restore image editing through LiteLLM proxies [#118562](https://github.com/openclaw/openclaw/pull/118562)
- Use configured media fallbacks after empty provider output [#118660](https://github.com/openclaw/openclaw/pull/118660)
- Preserve final words in OpenAI realtime transcription [#118782](https://github.com/openclaw/openclaw/pull/118782)
- Enforce limits on every OpenAI realtime final transcript [#118928](https://github.com/openclaw/openclaw/pull/118928)
- Stop malformed video downloads hanging under debug capture [#119257](https://github.com/openclaw/openclaw/pull/119257)
- Roll back partial image, music, and video batches [#119292](https://github.com/openclaw/openclaw/pull/119292)
- Return Comfy SaveVideo outputs without still images [#119543](https://github.com/openclaw/openclaw/pull/119543)
- Surface ElevenLabs realtime transcription failures [#120772](https://github.com/openclaw/openclaw/pull/120772)
- Keep realtime voice tool results retryable after delivery failures [#120776](https://github.com/openclaw/openclaw/pull/120776)
- Preserve repeated speech turns in ElevenLabs transcripts [#120792](https://github.com/openclaw/openclaw/pull/120792)
- Bound GPT-Live audio work and preserve workspace lock ownership [#120911](https://github.com/openclaw/openclaw/pull/120911)
- Prevent truncated streamed media files [#123590](https://github.com/openclaw/openclaw/pull/123590)
- Discover installed whisper.cpp models [#124699](https://github.com/openclaw/openclaw/pull/124699)
- Surface attachment and media processing failures [#125562](https://github.com/openclaw/openclaw/pull/125562)
- Keep local and ElevenLabs TTS audio formats truthful [#125628](https://github.com/openclaw/openclaw/pull/125628)
- Enable Runway and Alibaba video-provider authentication [#126722](https://github.com/openclaw/openclaw/pull/126722)
- fix(media): convert multi-frame HEIC and HEIF photos for image providers [#128501](https://github.com/openclaw/openclaw/pull/128501)
- fix(media): enforce generation model and reference limits [#129591](https://github.com/openclaw/openclaw/pull/129591)
- fix(media): keep failure markers visible in audio-only processing [#130869](https://github.com/openclaw/openclaw/pull/130869)
- fix(media): bound local reads and invalidate cleaned attachment paths [#130885](https://github.com/openclaw/openclaw/pull/130885)
- fix(agents): preserve generated video output order [#131110](https://github.com/openclaw/openclaw/pull/131110)
- Trust known CLI transcript files [#87393](https://github.com/openclaw/openclaw/pull/87393)
- Preserve local TTS file output when stdout errors [45d15aa](https://github.com/openclaw/openclaw/commit/45d15aa)
- Keep media file-store keys consistent across operating systems [cf432ec](https://github.com/openclaw/openclaw/commit/cf432ec)
- Bound Local CLI TTS output memory [#101510](https://github.com/openclaw/openclaw/pull/101510)
- Apply OpenRouter request policy to video catalogs [#102062](https://github.com/openclaw/openclaw/pull/102062)
- Handle Local CLI TTS stream failures safely [#102347](https://github.com/openclaw/openclaw/pull/102347)
- Keep Inworld TTS error previews valid Unicode [#102608](https://github.com/openclaw/openclaw/pull/102608)
- Keep OpenAI image auth logs valid Unicode [#102611](https://github.com/openclaw/openclaw/pull/102611)
- Keep large attached-file text UTF-16 safe [#102634](https://github.com/openclaw/openclaw/pull/102634)
- Bound stalled OpenAI Realtime setup requests [#102860](https://github.com/openclaw/openclaw/pull/102860)
- Add a bounded timeout to Inworld voice discovery [#102965](https://github.com/openclaw/openclaw/pull/102965)
- Bound Azure Speech voice discovery requests [#102984](https://github.com/openclaw/openclaw/pull/102984)
- Retry transient Google Lyria no-audio responses [#103326](https://github.com/openclaw/openclaw/pull/103326)
- Accept local file URLs for managed outgoing images [#103540](https://github.com/openclaw/openclaw/pull/103540)
- Stop transcript capture when a canceled run is still starting [#104123](https://github.com/openclaw/openclaw/pull/104123)
- Apply OpenRouter request policy to music generation [#104835](https://github.com/openclaw/openclaw/pull/104835)
- Preserve remote attachment filename prefixes [#105547](https://github.com/openclaw/openclaw/pull/105547)
- Fix cross-platform local media extension parsing [#105614](https://github.com/openclaw/openclaw/pull/105614)
- Prevent Logbook from storing malformed snapshot images [#106473](https://github.com/openclaw/openclaw/pull/106473)
- Skip invalid Gradium configurations safely [#108551](https://github.com/openclaw/openclaw/pull/108551)
- Ignore blank Vydra speech API keys [#108757](https://github.com/openclaw/openclaw/pull/108757)
- Ignore blank MiniMax speech API keys [#108777](https://github.com/openclaw/openclaw/pull/108777)
- Treat blank Inworld API keys as unconfigured [#108783](https://github.com/openclaw/openclaw/pull/108783)
- Reject blank ElevenLabs realtime transcription keys [#108916](https://github.com/openclaw/openclaw/pull/108916)
- Ignore blank xAI audio API keys [#108953](https://github.com/openclaw/openclaw/pull/108953)
- Centralize TTS request preparation for Discord and voice calls [#109640](https://github.com/openclaw/openclaw/pull/109640)
- Keep valid Microsoft voices when catalog rows are malformed [#110784](https://github.com/openclaw/openclaw/pull/110784)
- Preserve completed OpenRouter music when cleanup fails [#111056](https://github.com/openclaw/openclaw/pull/111056)
- Normalize mixed-case MIME headers in media storage [#111184](https://github.com/openclaw/openclaw/pull/111184)
- Reject malformed Inworld TTS audio [#111197](https://github.com/openclaw/openclaw/pull/111197)
- Reject malformed xAI streamed audio [#111201](https://github.com/openclaw/openclaw/pull/111201)
- OpenRouter keeps valid video models when catalog rows are malformed [#111637](https://github.com/openclaw/openclaw/pull/111637)
- Preserve offloaded images in Copilot sessions and restore Telegram release QA [#112972](https://github.com/openclaw/openclaw/pull/112972)
- Reject malformed Xiaomi TTS audio [#113106](https://github.com/openclaw/openclaw/pull/113106)
- Reject malformed Volcengine TTS audio payloads [#113109](https://github.com/openclaw/openclaw/pull/113109)
- Preserve valid Azure voices in malformed catalogs [#115067](https://github.com/openclaw/openclaw/pull/115067)
- Reject malformed Google video-operation JSON consistently [#115465](https://github.com/openclaw/openclaw/pull/115465)
- Prevent duplicate Mistral realtime transcripts [#116774](https://github.com/openclaw/openclaw/pull/116774)
- Accept OpenRouter in-progress video jobs [#116986](https://github.com/openclaw/openclaw/pull/116986)
- Clean media CLI scratch data after setup failures [#117716](https://github.com/openclaw/openclaw/pull/117716)
- Preserve GPT-Live relay error outcomes during teardown [#117978](https://github.com/openclaw/openclaw/pull/117978)
- Support the current OpenAI speech model snapshot [#118475](https://github.com/openclaw/openclaw/pull/118475)
- Apply configured language to CLI audio transcription [#118501](https://github.com/openclaw/openclaw/pull/118501)
- Enforce playback cache retention by default [#119417](https://github.com/openclaw/openclaw/pull/119417)
- Release sockets after malformed provider media responses [#120351](https://github.com/openclaw/openclaw/pull/120351)
- Reset Mistral transcription state after reconnect [#120813](https://github.com/openclaw/openclaw/pull/120813)
- Honor request timeouts for Comfy music generation [#123444](https://github.com/openclaw/openclaw/pull/123444)
- Classify real TTS provider timeouts correctly [#125530](https://github.com/openclaw/openclaw/pull/125530)
- fix(media): restore attachment playback after host clock rollback [#128363](https://github.com/openclaw/openclaw/pull/128363)
- fix(audio): discover installed Windows transcription tools with mixed-case Path [#129235](https://github.com/openclaw/openclaw/pull/129235)
- fix(xai): preserve transcription audio on reopen [#130297](https://github.com/openclaw/openclaw/pull/130297)
- Report OpenRouter image capability errors correctly [#99079](https://github.com/openclaw/openclaw/pull/99079)

</details>

</Accordion>

<Accordion title="Command line and diagnostics">

[Doctor](/cli/doctor) now stops a stale build before repair, safely migrates the covered legacy agent databases without following unrelated state, and gives operators a concrete recovery path when the shared database is corrupt. Corrupt shared state is diagnosed and left unchanged for manual restoration or repair.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Exit nonzero when Gateway agent runs do not complete [#111126](https://github.com/openclaw/openclaw/pull/111126)
- Make read-only SQLite diagnostics journal-aware [#113404](https://github.com/openclaw/openclaw/pull/113404)
- Keep Doctor SQLite migration and recovery consistent [#114694](https://github.com/openclaw/openclaw/pull/114694)
- Preserve paired-node connections and local inference boundaries [#114857](https://github.com/openclaw/openclaw/pull/114857)
- Repair headerless session transcripts with doctor [#115080](https://github.com/openclaw/openclaw/pull/115080)
- Doctor safely repairs legacy state in reused sandbox workspaces [#115784](https://github.com/openclaw/openclaw/pull/115784)
- Repair duplicate session identities with doctor [#116703](https://github.com/openclaw/openclaw/pull/116703)
- Prevent Doctor restore from replacing a valid session index with an empty archive [#117221](https://github.com/openclaw/openclaw/pull/117221)
- Unify environment, path, and cancellation semantics [#120359](https://github.com/openclaw/openclaw/pull/120359)
- Keep targeted config writes from migrating unrelated state [#120451](https://github.com/openclaw/openclaw/pull/120451)
- Keep node and device CLI RPCs off writable shared state [#123674](https://github.com/openclaw/openclaw/pull/123674)
- Keep status commands off shared-state writes [#124142](https://github.com/openclaw/openclaw/pull/124142)
- Keep Gateway diagnostics from mutating shared state [#125178](https://github.com/openclaw/openclaw/pull/125178)
- Recover recreated legacy workspace state with Doctor [#126059](https://github.com/openclaw/openclaw/pull/126059)
- Restore CLI defaults for explicit multi-agent rosters [#126418](https://github.com/openclaw/openclaw/pull/126418)
- fix(doctor): scan all configured agent session stores [#130895](https://github.com/openclaw/openclaw/pull/130895)
- fix(doctor): bound recovered session migrations (#126265) [d06c0b8](https://github.com/openclaw/openclaw/commit/d06c0b8)
- Show conversation usage in `/context map` [#102633](https://github.com/openclaw/openclaw/pull/102633)
- Keep truncated Unicode text valid across OpenClaw surfaces [#102823](https://github.com/openclaw/openclaw/pull/102823)
- Stop stalled node camera downloads from hanging forever [#103266](https://github.com/openclaw/openclaw/pull/103266)
- Preserve PATH when ClawDock is sourced in zsh [#103805](https://github.com/openclaw/openclaw/pull/103805)
- Show task-registry restore errors in console output [#103976](https://github.com/openclaw/openclaw/pull/103976)
- Stop healthy local audio checks from failing Doctor [#104237](https://github.com/openclaw/openclaw/pull/104237)
- Register the local audio check in OpenClaw Doctor [#104242](https://github.com/openclaw/openclaw/pull/104242)
- Restore local audio information in OpenClaw Doctor [#104281](https://github.com/openclaw/openclaw/pull/104281)
- Unify CLI tool timeout and cancellation diagnostics [#104319](https://github.com/openclaw/openclaw/pull/104319)
- Preserve consistent details in error messages [#105927](https://github.com/openclaw/openclaw/pull/105927)
- Let doctor migrate legacy operator approvals [#108203](https://github.com/openclaw/openclaw/pull/108203)
- Bound stalled container inspection probes [#109199](https://github.com/openclaw/openclaw/pull/109199)
- Repair migrated transcript paths across short filesystem reads [#109400](https://github.com/openclaw/openclaw/pull/109400)
- Keep pure-read CLI commands out of writable database lifecycles [#110732](https://github.com/openclaw/openclaw/pull/110732)
- Stop identity updates from creating unknown agents [#111268](https://github.com/openclaw/openclaw/pull/111268)
- Reject malformed UTF-8 in docs search results [#111288](https://github.com/openclaw/openclaw/pull/111288)
- Report real SQLite paths and current build SHAs in CLI output [#111659](https://github.com/openclaw/openclaw/pull/111659)
- Preserve configured agents across runtime overrides [#113146](https://github.com/openclaw/openclaw/pull/113146)
- Restore plain `agent exec` output to stdout [#114043](https://github.com/openclaw/openclaw/pull/114043)
- Honor backpressure in debug proxy responses [#114076](https://github.com/openclaw/openclaw/pull/114076)
- Keep remote Gateway calls read-only [#115664](https://github.com/openclaw/openclaw/pull/115664)
- Return failure status for incomplete MCP probes [#116664](https://github.com/openclaw/openclaw/pull/116664)
- Report web capability provider failures correctly [#116674](https://github.com/openclaw/openclaw/pull/116674)
- Keep Doctor-repaired session rows readable [#117207](https://github.com/openclaw/openclaw/pull/117207)
- Honor parent options across task CLI commands [#117528](https://github.com/openclaw/openclaw/pull/117528)
- Make commitment dismissal atomic and truthful [#117591](https://github.com/openclaw/openclaw/pull/117591)
- Stop stale Doctor builds before unsafe repair guidance [#117913](https://github.com/openclaw/openclaw/pull/117913)
- Restore current assistant context in stuck-session diagnostics [#117945](https://github.com/openclaw/openclaw/pull/117945)
- Warn when Linux node services will stop after logout [#118430](https://github.com/openclaw/openclaw/pull/118430)
- Honor explicit Doctor-only migration repairs [#118700](https://github.com/openclaw/openclaw/pull/118700)
- Refresh live session caches after Doctor repairs [#118766](https://github.com/openclaw/openclaw/pull/118766)
- Recover exec after Doctor migration without restart [#118769](https://github.com/openclaw/openclaw/pull/118769)
- Align TaskFlow columns for Unicode controller names [#118801](https://github.com/openclaw/openclaw/pull/118801)
- Release stalled response cleanup under debug capture [#119706](https://github.com/openclaw/openclaw/pull/119706)
- Report accurate totals for filtered node lists [#119744](https://github.com/openclaw/openclaw/pull/119744)
- Recover legacy agent databases safely with doctor [#120906](https://github.com/openclaw/openclaw/pull/120906)
- Write valid image defaults during Microsoft Foundry setup [#121370](https://github.com/openclaw/openclaw/pull/121370)
- Preserve camera outputs on failed downloads [#122550](https://github.com/openclaw/openclaw/pull/122550)
- Repair legacy multi-agent roster upgrades [#123027](https://github.com/openclaw/openclaw/pull/123027)
- Preserve cron ownership during legacy multi-agent upgrades [#123372](https://github.com/openclaw/openclaw/pull/123372)
- Make Fal image generation work immediately after onboarding [#123447](https://github.com/openclaw/openclaw/pull/123447)
- Keep migrated agents on their existing workspace [#123808](https://github.com/openclaw/openclaw/pull/123808)
- Restore owner-safe multi-agent status commands [#123826](https://github.com/openclaw/openclaw/pull/123826)
- Keep explicit agent fleets ownerless in diagnostics [#123831](https://github.com/openclaw/openclaw/pull/123831)
- Preserve explicit agent targets in read-only CLI commands [#123868](https://github.com/openclaw/openclaw/pull/123868)
- Add explicit agent ownership to Policy CLI commands [#123880](https://github.com/openclaw/openclaw/pull/123880)
- Report physical SQLite session-store paths in diagnostics [#124102](https://github.com/openclaw/openclaw/pull/124102)
- Unblock the macOS computer-use rig and restore node details [#124536](https://github.com/openclaw/openclaw/pull/124536)
- Warn about malformed final records during transcript migration [#124977](https://github.com/openclaw/openclaw/pull/124977)
- Warn about unusable Crabbox cloud worker profiles before dispatch [#124995](https://github.com/openclaw/openclaw/pull/124995)
- Keep offline Gateway commands from changing shared state [#125102](https://github.com/openclaw/openclaw/pull/125102)
- Preserve pairing migration ownership during multi-agent updates [#125417](https://github.com/openclaw/openclaw/pull/125417)
- Preserve customized workspaces after setup-state migration [#125435](https://github.com/openclaw/openclaw/pull/125435)
- Return a failing exit code for failed agent turns [#125557](https://github.com/openclaw/openclaw/pull/125557)
- Repair stale Crabbox cloud-worker profiles [#125991](https://github.com/openclaw/openclaw/pull/125991)
- Preserve managed checkouts shared by multiple projects [#126004](https://github.com/openclaw/openclaw/pull/126004)
- Report native project instruction usage as unverified [#126010](https://github.com/openclaw/openclaw/pull/126010)
- Bound Doctor session-entry repairs for large stores [#126353](https://github.com/openclaw/openclaw/pull/126353)
- Stop false legacy-session warnings on clean multi-agent fleets [#126551](https://github.com/openclaw/openclaw/pull/126551)
- Doctor repairs markerless legacy multi-agent rosters [#126595](https://github.com/openclaw/openclaw/pull/126595)
- Preserve live node inventory failures [#126609](https://github.com/openclaw/openclaw/pull/126609)
- Enable CLI authentication for media-only providers [#126711](https://github.com/openclaw/openclaw/pull/126711)
- Give Doctor an actionable state-database error [#126985](https://github.com/openclaw/openclaw/pull/126985)
- fix(sessions): show collaboration details in CLI [#128035](https://github.com/openclaw/openclaw/pull/128035)
- fix: clarify cloud dispatch and heartbeat timeout diagnostics [#128434](https://github.com/openclaw/openclaw/pull/128434)
- fix(cli): print inference results alongside input paths [#128523](https://github.com/openclaw/openclaw/pull/128523)
- fix(doctor): bound media migration session scans [#128816](https://github.com/openclaw/openclaw/pull/128816)
- fix(crabbox): preserve terminal provider errors [#129020](https://github.com/openclaw/openclaw/pull/129020)
- fix(cli): validate node options before contacting the Gateway [#130352](https://github.com/openclaw/openclaw/pull/130352)
- fix(crabbox): keep the setup failure reason and name its phase [#130425](https://github.com/openclaw/openclaw/pull/130425)
- fix(device-pair): verify retained subscribers before archiving the migration source [#131008](https://github.com/openclaw/openclaw/pull/131008)
- Propagate web provider failures through the capability CLI [5df1957](https://github.com/openclaw/openclaw/commit/5df1957)
- Keep context-overflow diagnostics valid Unicode [#102618](https://github.com/openclaw/openclaw/pull/102618)
- Keep session key tables Unicode-safe [#103010](https://github.com/openclaw/openclaw/pull/103010)
- Reject unsafe byte-size values instead of silently rounding them [#103100](https://github.com/openclaw/openclaw/pull/103100)
- Keep truncated cron-list Unicode characters intact [#103616](https://github.com/openclaw/openclaw/pull/103616)
- Preserve caller shell variables during ClawDock setup [#103837](https://github.com/openclaw/openclaw/pull/103837)
- Reject malformed node camera and screen media payloads [#104414](https://github.com/openclaw/openclaw/pull/104414)
- Preserve emoji boundaries in Crabbox error details [#104612](https://github.com/openclaw/openclaw/pull/104612)
- Reject hexadecimal Fleet CPU limits at the CLI boundary [#105158](https://github.com/openclaw/openclaw/pull/105158)
- Reject noncanonical trajectory export request encodings [#105557](https://github.com/openclaw/openclaw/pull/105557)
- Resolve identity files from the selected agent workspace [#106087](https://github.com/openclaw/openclaw/pull/106087)
- Keep CLI and Skill Workshop truncation emoji-safe [#106370](https://github.com/openclaw/openclaw/pull/106370)
- Reject non-decimal Workspaces grid coordinates [#107478](https://github.com/openclaw/openclaw/pull/107478)
- Preserve small proxy-capture bodies with malformed lengths [#108292](https://github.com/openclaw/openclaw/pull/108292)
- Bound the legacy crontab check in doctor [#109107](https://github.com/openclaw/openclaw/pull/109107)
- Reject retired audio transcription settings and preserve migration [#109226](https://github.com/openclaw/openclaw/pull/109226)
- Time out stalled debug-proxy CONNECT openings [#109269](https://github.com/openclaw/openclaw/pull/109269)
- Preserve emoji in shortened Bash session identifiers [#109468](https://github.com/openclaw/openclaw/pull/109468)
- Preserve legacy ACP replay state during Doctor repair [#109685](https://github.com/openclaw/openclaw/pull/109685)
- Bound Doctor scans of large heartbeat session transcripts [#110721](https://github.com/openclaw/openclaw/pull/110721)
- Report fallback session changes in CLI JSON output [#111645](https://github.com/openclaw/openclaw/pull/111645)
- Honor explicit timeouts for local agent runs [#114621](https://github.com/openclaw/openclaw/pull/114621)
- Make Doctor persist repaired default-agent rosters [#117115](https://github.com/openclaw/openclaw/pull/117115)
- Align session cleanup summaries for emoji and CJK labels [#117459](https://github.com/openclaw/openclaw/pull/117459)
- Stop completed TaskFlow cancellations from inflating pending pressure [#117714](https://github.com/openclaw/openclaw/pull/117714)
- Return failure when APNs rejects a nodes push test [#117737](https://github.com/openclaw/openclaw/pull/117737)
- Stop Doctor from requiring obsolete transcripts for SQLite sessions [#119940](https://github.com/openclaw/openclaw/pull/119940)
- Recover terminal NUL tails in archived session JSONL [#120041](https://github.com/openclaw/openclaw/pull/120041)
- Validate Gmail webhook Tailscale modes early [#120272](https://github.com/openclaw/openclaw/pull/120272)
- Use the node's default camera for unflagged snaps [#120430](https://github.com/openclaw/openclaw/pull/120430)
- Publish Browser snapshot files atomically [#122327](https://github.com/openclaw/openclaw/pull/122327)
- Allow adding agents while the local Gateway is running [#123490](https://github.com/openclaw/openclaw/pull/123490)
- Prevent truncated camera files after short filesystem writes [#123736](https://github.com/openclaw/openclaw/pull/123736)
- CLI errors name the supported agent selectors [#124018](https://github.com/openclaw/openclaw/pull/124018)
- Make node status filters accurate and permission-safe [#124348](https://github.com/openclaw/openclaw/pull/124348)
- Reject invalid explicit session-store targets [#124515](https://github.com/openclaw/openclaw/pull/124515)
- Restore the main agent roster for configless exec [#124805](https://github.com/openclaw/openclaw/pull/124805)
- fix(cli): let nested agent exec --timeout override the parent flag [#125256](https://github.com/openclaw/openclaw/pull/125256)
- Show recovery guidance for unreachable Gateway commands [#125556](https://github.com/openclaw/openclaw/pull/125556)
- Explain an empty MCP probe [#125611](https://github.com/openclaw/openclaw/pull/125611)
- Return failure for duplicate in-flight agent runs [#125757](https://github.com/openclaw/openclaw/pull/125757)
- Honor `--agent` during legacy state migration [#125948](https://github.com/openclaw/openclaw/pull/125948)
- Warn when New Chat preserves a managed worktree [#126771](https://github.com/openclaw/openclaw/pull/126771)
- Preserve recorded session identity in CLI lists [#126921](https://github.com/openclaw/openclaw/pull/126921)
- Return machine-readable errors for invalid Nodes CLI input [#127223](https://github.com/openclaw/openclaw/pull/127223)
- fix(cli): return JSON for session validation failures [#128224](https://github.com/openclaw/openclaw/pull/128224)
- fix(cli): honor selected agent when inspecting audio providers [#128292](https://github.com/openclaw/openclaw/pull/128292)
- fix(cli): return JSON for sessions list failures [#128316](https://github.com/openclaw/openclaw/pull/128316)
- fix(cli): emit JSON for trajectory export failures [#128351](https://github.com/openclaw/openclaw/pull/128351)
- fix(cli): report container launch failures instead of exit 1 [#128406](https://github.com/openclaw/openclaw/pull/128406)
- fix(cli): reject nonexistent transcript summary paths [#128589](https://github.com/openclaw/openclaw/pull/128589)
- fix: status checks exceed CPU limit after SQLite lock hardening [#128884](https://github.com/openclaw/openclaw/pull/128884)
- fix(flows): failed and waiting workflows appear healthy [#129156](https://github.com/openclaw/openclaw/pull/129156)
- fix(doctor): cron migration ignores agents.defaults.systemAgent under explicit ownership [AI-assisted] [#130190](https://github.com/openclaw/openclaw/pull/130190)
- fix(cli): reject missing repeatable inference inputs [#130608](https://github.com/openclaw/openclaw/pull/130608)

**Documentation**

- Clarify platform-specific camera defaults in CLI help [#107942](https://github.com/openclaw/openclaw/pull/107942)

</details>

</Accordion>

<Accordion title="Security and permissions">

Doctor's legacy [authentication migration](/gateway/authentication) now preserves complete credentials, credentials already stored in SQLite, and the selected ChatGPT account across the covered legacy-to-SQLite migrations. Ambiguous ownership, unreadable files, and unverifiable credentials continue to stop the migration.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Create backup archives with owner-only permissions [#102403](https://github.com/openclaw/openclaw/pull/102403)
- Restrict classic voice streaming to authenticated Twilio calls [#102887](https://github.com/openclaw/openclaw/pull/102887)
- Repair legacy approval schemas without wedging startup [#109876](https://github.com/openclaw/openclaw/pull/109876)
- Complete the SQLite-only auth profile migration [#114033](https://github.com/openclaw/openclaw/pull/114033)
- Restore sandbox creation with current OpenShell naming limits [#115058](https://github.com/openclaw/openclaw/pull/115058)
- Correct embedded TUI outcomes, queued cancellation, and error privacy [#117044](https://github.com/openclaw/openclaw/pull/117044)
- Redact credentials from voice-call provider errors [#117304](https://github.com/openclaw/openclaw/pull/117304)
- Prevent generated media text from hijacking delivery [#118780](https://github.com/openclaw/openclaw/pull/118780)
- Keep Gateway locks inside the selected state directory [#120110](https://github.com/openclaw/openclaw/pull/120110)
- Isolate external coding-session catalogs from operator HOME [#122983](https://github.com/openclaw/openclaw/pull/122983)
- Hide unowned host session catalogs on multi-user Gateways [#123421](https://github.com/openclaw/openclaw/pull/123421)
- Block agent SQLite commands from opening live OpenClaw state [#123816](https://github.com/openclaw/openclaw/pull/123816)
- Keep caller speech at user priority in Voice Call [#123846](https://github.com/openclaw/openclaw/pull/123846)
- Keep expired Codex approvals from aborting the turn [#125671](https://github.com/openclaw/openclaw/pull/125671)
- Fail closed when Code Mode aliases are invalidated [#126660](https://github.com/openclaw/openclaw/pull/126660)
- fix(sandbox): restore reliable OpenShell execution and workspace integrity [#130031](https://github.com/openclaw/openclaw/pull/130031)
- fix(openshell): preserve file writes during concurrent mirror commands [#130447](https://github.com/openclaw/openclaw/pull/130447)
- Preserve credentials during doctor auth migration [#97881](https://github.com/openclaw/openclaw/pull/97881)
- Preserve SQLite credentials during legacy auth repair [#98245](https://github.com/openclaw/openclaw/pull/98245)
- Isolate gateway workspace patch application [e5240b9](https://github.com/openclaw/openclaw/commit/e5240b9)
- Honor MiniMax request policy across media generation [#102072](https://github.com/openclaw/openclaw/pull/102072)
- Enforce tool-call payload limits using UTF-8 bytes [#102450](https://github.com/openclaw/openclaw/pull/102450)
- Keep sandbox session labels Unicode-safe [#102969](https://github.com/openclaw/openclaw/pull/102969)
- Require human approval for Codex app-server commands [#103457](https://github.com/openclaw/openclaw/pull/103457)
- Stop voice-call logs from recording conversation content [#103555](https://github.com/openclaw/openclaw/pull/103555)
- Keep exact tool allowlists on the correct factories [#104213](https://github.com/openclaw/openclaw/pull/104213)
- Restrict Gradium TTS credential egress [#105169](https://github.com/openclaw/openclaw/pull/105169)
- Move channel pairing state to SQLite [#105802](https://github.com/openclaw/openclaw/pull/105802)
- Treat leading-hyphen worktree base refs as refs, not Git flags [#106048](https://github.com/openclaw/openclaw/pull/106048)
- Guard MiniMax image requests with the shared SSRF policy [#106163](https://github.com/openclaw/openclaw/pull/106163)
- Safely migrate legacy Reef peer trust [#108417](https://github.com/openclaw/openclaw/pull/108417)
- Release Reef guard streams after provider errors [#109196](https://github.com/openclaw/openclaw/pull/109196)
- Neutralize formulas in Google Meet attendance CSV exports [#109725](https://github.com/openclaw/openclaw/pull/109725)
- Preserve Codex session permissions across resumed turns [#111136](https://github.com/openclaw/openclaw/pull/111136)
- Reject stale shared-session mutations after replacement [#113023](https://github.com/openclaw/openclaw/pull/113023)
- Mark WhatsApp voice transcripts as untrusted audio text [#113111](https://github.com/openclaw/openclaw/pull/113111)
- Preserve relocated credentials and shared agent sessions [#113559](https://github.com/openclaw/openclaw/pull/113559)
- Prevent false exec-deny failures during concurrent Codex runs [#113929](https://github.com/openclaw/openclaw/pull/113929)
- Preserve owner authorization in realtime voice consults [#114163](https://github.com/openclaw/openclaw/pull/114163)
- Complete auth migration when main owns the OAuth profile [#114226](https://github.com/openclaw/openclaw/pull/114226)
- Prevent read-only and stale Workboard dashboard actions [#114686](https://github.com/openclaw/openclaw/pull/114686)
- Reconstruct valid Voice Call webhook URLs for IPv6 hosts [#115135](https://github.com/openclaw/openclaw/pull/115135)
- Reuse one MCP namespace model per Code Mode run [#115459](https://github.com/openclaw/openclaw/pull/115459)
- Migrate retired node-host state automatically at startup [#115495](https://github.com/openclaw/openclaw/pull/115495)
- Preserve the requester through promoted Codex approvals [#116152](https://github.com/openclaw/openclaw/pull/116152)
- Unify Doctor's legacy authentication migration [#117361](https://github.com/openclaw/openclaw/pull/117361)
- Preserve selected ChatGPT accounts during migration [#118205](https://github.com/openclaw/openclaw/pull/118205)
- Make voice-call callback retries durable and token-safe [#118754](https://github.com/openclaw/openclaw/pull/118754)
- Redact credentials from Parallel search errors [#120205](https://github.com/openclaw/openclaw/pull/120205)
- Preserve incognito scope for embedded session ownership [#120215](https://github.com/openclaw/openclaw/pull/120215)
- Prevent cross-runtime device identity races [#120643](https://github.com/openclaw/openclaw/pull/120643)
- Reject stale Cloud Worker bundle tunnels [#121081](https://github.com/openclaw/openclaw/pull/121081)
- Deliver scoped global-session events to the right observers [#121166](https://github.com/openclaw/openclaw/pull/121166)
- Make Cloud workers available with trusted-proxy browser authentication [#121671](https://github.com/openclaw/openclaw/pull/121671)
- Restore usable URLs in the agent portal listing [#123149](https://github.com/openclaw/openclaw/pull/123149)
- Recover legacy OAuth secrets from custom agent directories [#123187](https://github.com/openclaw/openclaw/pull/123187)
- Stop Beam mirror uploads from following redirects [#123848](https://github.com/openclaw/openclaw/pull/123848)
- Apply edge authentication to secure session URLs [#125982](https://github.com/openclaw/openclaw/pull/125982)
- Show only enforceable Codex approval scopes [#125995](https://github.com/openclaw/openclaw/pull/125995)
- Keep forced worktree cleanup from removing active runs [#126174](https://github.com/openclaw/openclaw/pull/126174)
- Separate remote node execution from Gateway process control [#126253](https://github.com/openclaw/openclaw/pull/126253)
- Keep retired auth files from blocking migrated credentials [#126562](https://github.com/openclaw/openclaw/pull/126562)
- fix(state): keep divergent retired device identity from blocking gateway readiness [#126748](https://github.com/openclaw/openclaw/pull/126748)
- Start fresh installs with canonical shared credential ownership [#126783](https://github.com/openclaw/openclaw/pull/126783)
- fix(auth): stop advising a retry when the auth store needs migration [#127306](https://github.com/openclaw/openclaw/pull/127306)
- fix(auth): preserve non-lock store write errors [#128049](https://github.com/openclaw/openclaw/pull/128049)
- fix(agents): stop recommending unavailable gateway tools [#128190](https://github.com/openclaw/openclaw/pull/128190)
- fix(voice-call): keep ngrok auth out of argv [#129330](https://github.com/openclaw/openclaw/pull/129330)
- fix(openshell): remote workspace is never seeded when the gateway restarts before first exec [#129809](https://github.com/openclaw/openclaw/pull/129809)
- fix(gateway): keep session events within their owning agent [#130039](https://github.com/openclaw/openclaw/pull/130039)
- fix(auth): honor shared-store ownership in temp-state exec and agent deletion [#130437](https://github.com/openclaw/openclaw/pull/130437)
- fix(nodes): show paired-device launch approvals in the requesting browser [#130573](https://github.com/openclaw/openclaw/pull/130573)
- fix: preserve native session ownership during cleanup and attachment [#130864](https://github.com/openclaw/openclaw/pull/130864)
- fix(openshell): preserve nested host symlinks during mirror sync [#131122](https://github.com/openclaw/openclaw/pull/131122)
- Doctor copies model catalog credentials into SQLite [#87166](https://github.com/openclaw/openclaw/pull/87166)
- Reject malformed tool availability expressions safely [#92411](https://github.com/openclaw/openclaw/pull/92411)
- Guard provider-hosted video downloads against private-network access [#101854](https://github.com/openclaw/openclaw/pull/101854)
- Redact sensitive Twilio webhook diagnostics [#102089](https://github.com/openclaw/openclaw/pull/102089)
- Prevent broken Unicode at security text limits [#102266](https://github.com/openclaw/openclaw/pull/102266)
- Keep truncated tool-policy audit labels valid UTF-16 [#102464](https://github.com/openclaw/openclaw/pull/102464)
- Stop iOS reconnects from requesting unnecessary approval [#102661](https://github.com/openclaw/openclaw/pull/102661)
- Keep Unicode token hints well formed in logs [#103341](https://github.com/openclaw/openclaw/pull/103341)
- Redact caller phone numbers in voice-call event logs [#103547](https://github.com/openclaw/openclaw/pull/103547)
- Keep redacted token hints valid Unicode [#103843](https://github.com/openclaw/openclaw/pull/103843)
- Keep masked credentials valid around emoji [#104800](https://github.com/openclaw/openclaw/pull/104800)
- Keep API-key previews valid around emoji [#104810](https://github.com/openclaw/openclaw/pull/104810)
- Validate sandbox environment limits by UTF-8 byte size [#105017](https://github.com/openclaw/openclaw/pull/105017)
- Correct sandbox escape paths for home-sibling directories [#106603](https://github.com/openclaw/openclaw/pull/106603)
- Surface auth-storage lock cleanup failures [#107427](https://github.com/openclaw/openclaw/pull/107427)
- Reject malformed Telnyx webhook timestamps [#107565](https://github.com/openclaw/openclaw/pull/107565)
- Keep system-agent approval text Unicode-safe [#108298](https://github.com/openclaw/openclaw/pull/108298)
- Pin Plivo callbacks to the configured webhook path [#112559](https://github.com/openclaw/openclaw/pull/112559)
- Verify Twilio webhooks against the public path [#112800](https://github.com/openclaw/openclaw/pull/112800)
- fix(sandbox): show POSIX path in container escape hint [#114209](https://github.com/openclaw/openclaw/pull/114209)
- Keep queued approval command labels Unicode-safe [#118566](https://github.com/openclaw/openclaw/pull/118566)
- Preserve POSIX shell builtins in enforced exec mode [#119351](https://github.com/openclaw/openclaw/pull/119351)
- Clean up failed SSH sandbox setup [#121457](https://github.com/openclaw/openclaw/pull/121457)
- Let read-only operators copy retained task results [#122841](https://github.com/openclaw/openclaw/pull/122841)
- Preserve safe Windows SQLite directory diagnostics [#123023](https://github.com/openclaw/openclaw/pull/123023)
- Hide host session catalogs from unprofiled multi-user callers [#123438](https://github.com/openclaw/openclaw/pull/123438)
- Explain visible-session working-directory denials [#123829](https://github.com/openclaw/openclaw/pull/123829)
- Keep read-only device identity checks lock-free [#124745](https://github.com/openclaw/openclaw/pull/124745)
- Harden Crabbox Cloud Worker Desktop provisioning [#126417](https://github.com/openclaw/openclaw/pull/126417)
- fix(gateway): protect concurrent cloud session placement [#129224](https://github.com/openclaw/openclaw/pull/129224)
- Resolve Tavily credentials in agent tools [#97827](https://github.com/openclaw/openclaw/pull/97827)

</details>

</Accordion>

<Accordion title="Plugins and installation">

[Plugin upgrades](/plugins/manage-plugins) now keep canonical SQLite install and state records when conflicting legacy data is provably stale, archive the old file for recovery, and allow startup to continue. Newer or ambiguous legacy state and archive failures remain blocking so Doctor can retry without discarding either copy.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Converge conflicting legacy plugin install metadata [#107961](https://github.com/openclaw/openclaw/pull/107961)
- Archive redundant plugin-state sidecars when canonical rows are newer [#110083](https://github.com/openclaw/openclaw/pull/110083)
- Install production dependencies for bundled cloud workers [1644bef](https://github.com/openclaw/openclaw/commit/1644bef)
- Include required workspace packages in cloud worker bundles [20b7a9f](https://github.com/openclaw/openclaw/commit/20b7a9f)
- Prevent repeated Codex binding migrations at startup [#103281](https://github.com/openclaw/openclaw/pull/103281)
- Repair Voice Call SQLite schema upgrades through doctor [#104752](https://github.com/openclaw/openclaw/pull/104752)
- Keep plugin metadata reads from mutating shared state [#106103](https://github.com/openclaw/openclaw/pull/106103)
- Add controls and clearer errors for native session discovery [#107162](https://github.com/openclaw/openclaw/pull/107162)
- Fail OpenCode session reads cleanly on output-pipe errors [#108218](https://github.com/openclaw/openclaw/pull/108218)
- Honor OPENCLAW_STATE_DIR for Voice Call state [#109284](https://github.com/openclaw/openclaw/pull/109284)
- Keep plugin-state reads outside the writable SQLite lifecycle [#113204](https://github.com/openclaw/openclaw/pull/113204)
- Restore MXC provisioning and Windows workspace tool execution [#115399](https://github.com/openclaw/openclaw/pull/115399)
- Keep Beam mirror retries moving after slow responses [#116174](https://github.com/openclaw/openclaw/pull/116174)
- Start source-built cloud workers with vendored packages [#122400](https://github.com/openclaw/openclaw/pull/122400)
- fix: prevent $-pattern injection in tilde expansion across extensions [#123004](https://github.com/openclaw/openclaw/pull/123004)
- Keep runtime dependencies single-owned and preserve empty subagent completions [#126119](https://github.com/openclaw/openclaw/pull/126119)
- Bound expired plugin-state cleanup [#126827](https://github.com/openclaw/openclaw/pull/126827)
- fix: allow plugin state values up to 1 MiB [#130387](https://github.com/openclaw/openclaw/pull/130387)
- fix(cloud-workers): build complete source runtime artifacts [#130735](https://github.com/openclaw/openclaw/pull/130735)
- Fix cloud-worker bundle integrity verification [553c245](https://github.com/openclaw/openclaw/commit/553c245)
- Keep long oc-path error previews Unicode-safe [#102527](https://github.com/openclaw/openclaw/pull/102527)
- Keep truncated install errors Unicode-safe [#102833](https://github.com/openclaw/openclaw/pull/102833)
- Preserve Unicode in 1Password audit output [#106424](https://github.com/openclaw/openclaw/pull/106424)
- Reject invalid 12-hour times in Logbook analysis [#107191](https://github.com/openclaw/openclaw/pull/107191)
- Warn when Linux Canvas socket monitoring falls back to polling [#109502](https://github.com/openclaw/openclaw/pull/109502)
- Keep plugin-hosted media available during registry swaps [#112515](https://github.com/openclaw/openclaw/pull/112515)
- Deliver session-change events to plugin-only listeners [#116948](https://github.com/openclaw/openclaw/pull/116948)
- Keep clipped Beam mirror text valid Unicode [#117671](https://github.com/openclaw/openclaw/pull/117671)
- Fix Beam upload links and minimal Gateway startup [#120927](https://github.com/openclaw/openclaw/pull/120927)
- Preserve exact identity for copied system-event snapshots [#120984](https://github.com/openclaw/openclaw/pull/120984)
- fix(beam): stop mirroring after service shutdown [#126589](https://github.com/openclaw/openclaw/pull/126589)
- fix(diffs): resolve viewer assets in unified builds [#129391](https://github.com/openclaw/openclaw/pull/129391)

</details>

</Accordion>

<Accordion title="Messaging and calls">

Affected [Google Meet and Teams sessions](/plugins/meeting-plugins) now wait for the local audio bridge to stop before teardown completes. Google Meet also rejects malformed node-control requests before dispatch and keeps local audio diagnostics bounded and readable.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Retry transient reply-session initialization conflicts [#105754](https://github.com/openclaw/openclaw/pull/105754)
- Make Teams meeting joins and transcription reliable [#110615](https://github.com/openclaw/openclaw/pull/110615)
- Deliver Codex-generated images on message-tool-only routes [#110893](https://github.com/openclaw/openclaw/pull/110893)
- Give each session one authoritative delivery route [#113225](https://github.com/openclaw/openclaw/pull/113225)
- Deliver files and generated images from remote Codex workspaces [#115668](https://github.com/openclaw/openclaw/pull/115668)
- Prevent continuous inbound messages from starving replies [#115682](https://github.com/openclaw/openclaw/pull/115682)
- Recognize message-tool replies to the current conversation [#116560](https://github.com/openclaw/openclaw/pull/116560)
- Bound realtime meeting audio playback [#116589](https://github.com/openclaw/openclaw/pull/116589)
- Preserve final-reply recovery after proven no-send failures [#117597](https://github.com/openclaw/openclaw/pull/117597)
- Bound meeting talkback audio and process retention [#117733](https://github.com/openclaw/openclaw/pull/117733)
- Renew durable outbound producer leases through send completion [#118663](https://github.com/openclaw/openclaw/pull/118663)
- Resume durable outbound retries after startup [#118694](https://github.com/openclaw/openclaw/pull/118694)
- Prevent duplicate outbound delivery during concurrent recovery [#119966](https://github.com/openclaw/openclaw/pull/119966)
- Prevent duplicate and lost agent deliveries [#120108](https://github.com/openclaw/openclaw/pull/120108)
- Retry inbound messages when debounce dispatch fails [#122384](https://github.com/openclaw/openclaw/pull/122384)
- Deliver requested media while keeping image inspection private [#124910](https://github.com/openclaw/openclaw/pull/124910)
- fix(agents): recognize explicit current-source replies (#113554) [3a4b3df](https://github.com/openclaw/openclaw/commit/3a4b3df)
- Stop stalled Google Meet requests after 30 seconds [#102149](https://github.com/openclaw/openclaw/pull/102149)
- Stop stalled Google Meet calendar lookups after 30 seconds [#102157](https://github.com/openclaw/openclaw/pull/102157)
- Keep Google Meet sessions with their joining agent [#102331](https://github.com/openclaw/openclaw/pull/102331)
- Handle uppercase file URLs in media directives [#103490](https://github.com/openclaw/openclaw/pull/103490)
- Make Google Meet leave remove the Chrome participant [#103522](https://github.com/openclaw/openclaw/pull/103522)
- Make Google Meet tab reuse safe for non-English accounts [#103719](https://github.com/openclaw/openclaw/pull/103719)
- Reject invalid Google Meet URLs before local launch [#104687](https://github.com/openclaw/openclaw/pull/104687)
- Validate Calendar-derived Google Meet links [#104863](https://github.com/openclaw/openclaw/pull/104863)
- Prevent duplicate device-pair reminders during slow sends [#106395](https://github.com/openclaw/openclaw/pull/106395)
- Reject malformed meeting audio payloads [#106474](https://github.com/openclaw/openclaw/pull/106474)
- Reject malformed voice-call audio frames [#106859](https://github.com/openclaw/openclaw/pull/106859)
- Preserve actionable ngrok errors across fragmented output [#107122](https://github.com/openclaw/openclaw/pull/107122)
- Codex turns continue after progress replies [#108487](https://github.com/openclaw/openclaw/pull/108487)
- Bind channel replay settlement to the correct inbound claim [#109117](https://github.com/openclaw/openclaw/pull/109117)
- Unify Google Meet realtime audio handling [#109413](https://github.com/openclaw/openclaw/pull/109413)
- Stop Twilio TTS pacing immediately on cancellation [#109618](https://github.com/openclaw/openclaw/pull/109618)
- Treat blank Twilio setup credentials as missing [#109674](https://github.com/openclaw/openclaw/pull/109674)
- Harden recovered meeting browser sessions [#110089](https://github.com/openclaw/openclaw/pull/110089)
- Harden Google Meet talkback bridge recovery [#110092](https://github.com/openclaw/openclaw/pull/110092)
- Document ambient group recall and await Signal cleanup [#110413](https://github.com/openclaw/openclaw/pull/110413)
- Wait for meeting audio bridge processes to stop [#110548](https://github.com/openclaw/openclaw/pull/110548)
- Make Nextcloud Talk and Nostr ingress durable [#110653](https://github.com/openclaw/openclaw/pull/110653)
- Tell channel users when a Codex session changed [#110856](https://github.com/openclaw/openclaw/pull/110856)
- Stop stale Codex retries and surface a resend notice [#110980](https://github.com/openclaw/openclaw/pull/110980)
- Route voice and meeting consults to the configured default agent [#111749](https://github.com/openclaw/openclaw/pull/111749)
- Verify meeting talk-back on the microphone capture path [#112939](https://github.com/openclaw/openclaw/pull/112939)
- Reject corrupted voice-call identifiers from malformed provider JSON [#114267](https://github.com/openclaw/openclaw/pull/114267)
- Preserve generated media in cross-agent announcements [#115126](https://github.com/openclaw/openclaw/pull/115126)
- Preserve plugin request timeouts when response bodies stall [#116166](https://github.com/openclaw/openclaw/pull/116166)
- Close voice-call media connections during shutdown [#116536](https://github.com/openclaw/openclaw/pull/116536)
- Bound slow telephony speech playback queues [#116549](https://github.com/openclaw/openclaw/pull/116549)
- Fence native realtime consults to their voice-call bridge [#116559](https://github.com/openclaw/openclaw/pull/116559)
- Bound Discord realtime voice playback memory [#116574](https://github.com/openclaw/openclaw/pull/116574)
- Reject oversized local attachments before buffering [#116667](https://github.com/openclaw/openclaw/pull/116667)
- Stop stale Voice Call consults after session teardown [#116701](https://github.com/openclaw/openclaw/pull/116701)
- Preserve trusted context for tool-created Voice Calls [#116856](https://github.com/openclaw/openclaw/pull/116856)
- Clean message-tool replies and suppress false no-reply fallbacks [#116909](https://github.com/openclaw/openclaw/pull/116909)
- Prevent voice-call audio pacing slowdowns on long replies [#117162](https://github.com/openclaw/openclaw/pull/117162)
- Release Twilio and Plivo state after calls end [#117201](https://github.com/openclaw/openclaw/pull/117201)
- Preserve Discord voice transcripts during capability discovery [#117373](https://github.com/openclaw/openclaw/pull/117373)
- Recover encrypted Discord voice at DAVE transition zero [#117381](https://github.com/openclaw/openclaw/pull/117381)
- Bound Voice Call replay metadata growth [#117437](https://github.com/openclaw/openclaw/pull/117437)
- Preserve Voice Call transcripts across bridge replacement [#117686](https://github.com/openclaw/openclaw/pull/117686)
- Preserve attachment intent across model and history paths [#117841](https://github.com/openclaw/openclaw/pull/117841)
- Preserve relative attachments alongside reply captions [#118746](https://github.com/openclaw/openclaw/pull/118746)
- Retry queued messages when an outbound adapter is unavailable [#119371](https://github.com/openclaw/openclaw/pull/119371)
- Bound errored channel-ingress settlements [#120104](https://github.com/openclaw/openclaw/pull/120104)
- Preserve channel progress acceptance outcomes [#120171](https://github.com/openclaw/openclaw/pull/120171)
- Deliver channel images once to Claude CLI turns [#120721](https://github.com/openclaw/openclaw/pull/120721)
- Prevent duplicate final replies after Gateway restarts [#121908](https://github.com/openclaw/openclaw/pull/121908)
- Stop reporting suppressed notifications as delivered [#122421](https://github.com/openclaw/openclaw/pull/122421)
- Restore CLI message sends after multi-agent migration [#123450](https://github.com/openclaw/openclaw/pull/123450)
- Preserve Google Meet output files when writes fail [#123959](https://github.com/openclaw/openclaw/pull/123959)
- Deliver Codex input choices in Telegram and web chat [#124146](https://github.com/openclaw/openclaw/pull/124146)
- Preserve message delivery receipts through middleware [#125497](https://github.com/openclaw/openclaw/pull/125497)
- Stop idle channel monitors from repeatedly locking SQLite [#126073](https://github.com/openclaw/openclaw/pull/126073)
- fix: resumed main-session turn after a gateway restart is delivered to the session's last route instead of silently completing [#127342](https://github.com/openclaw/openclaw/pull/127342)
- fix: generated media loses filenames, durations, and dimensions [#128895](https://github.com/openclaw/openclaw/pull/128895)
- fix: Telegram private topics resume after gateway restart [#128896](https://github.com/openclaw/openclaw/pull/128896)
- fix(googlechat): use agent identity in typing status [#129172](https://github.com/openclaw/openclaw/pull/129172)
- Close Google Meet audio sessions cleanly on pipe failures [#102105](https://github.com/openclaw/openclaw/pull/102105)
- Keep truncated Google Meet log values UTF-16 safe [#102617](https://github.com/openclaw/openclaw/pull/102617)
- Validate Google Meet node-control requests before dispatch [#103752](https://github.com/openclaw/openclaw/pull/103752)
- Align Google Meet DTMF delay metadata with runtime behavior [#104119](https://github.com/openclaw/openclaw/pull/104119)
- Remove duplicate set-profile action listing [#104235](https://github.com/openclaw/openclaw/pull/104235)
- Preserve valid Unicode in voice-call process diagnostics [#104260](https://github.com/openclaw/openclaw/pull/104260)
- Keep Google Meet caption epochs unique across reloads [#105221](https://github.com/openclaw/openclaw/pull/105221)
- Reject non-decimal Google Meet transcript cursors [#106384](https://github.com/openclaw/openclaw/pull/106384)
- Prevent overlapping stale-call hangups [#106396](https://github.com/openclaw/openclaw/pull/106396)
- Preserve Unix epoch timestamps in agent envelopes [#106407](https://github.com/openclaw/openclaw/pull/106407)
- Treat meeting-bot signal exits and timeouts as failures [#107614](https://github.com/openclaw/openclaw/pull/107614)
- Keep Voice Call custom-log tails aligned and UTF-8 safe [#108322](https://github.com/openclaw/openclaw/pull/108322)
- Ignore blank Voice Call provider environment values [#108816](https://github.com/openclaw/openclaw/pull/108816)
- Keep voice-call continue polling within its deadline [#109053](https://github.com/openclaw/openclaw/pull/109053)
- Preserve Unicode in ngrok tunnel output [#109220](https://github.com/openclaw/openclaw/pull/109220)
- Preserve Google Meet attendance CSV rows [#109926](https://github.com/openclaw/openclaw/pull/109926)
- fix(meeting-bot): keep local audio diagnostics readable across chunks [#110703](https://github.com/openclaw/openclaw/pull/110703)
- Keep stalled Teams meeting setup probes within one deadline [#111455](https://github.com/openclaw/openclaw/pull/111455)
- fix(teams-meetings): listening probes work with reused tabs [#111466](https://github.com/openclaw/openclaw/pull/111466)
- Let Teams listening probes set a timeout [#111486](https://github.com/openclaw/openclaw/pull/111486)
- Reject malformed APNs relay response text [#111769](https://github.com/openclaw/openclaw/pull/111769)
- Canonicalize node chat subscription session keys [#111830](https://github.com/openclaw/openclaw/pull/111830)
- Keep new session delivery state canonical [#113373](https://github.com/openclaw/openclaw/pull/113373)
- Release meeting-audio pull timers after early wake [#114526](https://github.com/openclaw/openclaw/pull/114526)
- Keep invalid configured timezones consistent [#116103](https://github.com/openclaw/openclaw/pull/116103)
- Reject duplicate voice-call media stream starts [#116508](https://github.com/openclaw/openclaw/pull/116508)
- Keep delivered-media counts aligned with rendered messages [#117850](https://github.com/openclaw/openclaw/pull/117850)
- Report missed message-tool replies without exposing private output [#121822](https://github.com/openclaw/openclaw/pull/121822)
- Publish Google Meet exports atomically [#122306](https://github.com/openclaw/openclaw/pull/122306)
- fix(google-meet): keep ZIP exports beside output directories with trailing separators [#122367](https://github.com/openclaw/openclaw/pull/122367)
- fix(reply): stop advertising unavailable media messaging tools [#129944](https://github.com/openclaw/openclaw/pull/129944)

</details>

</Accordion>

<Accordion title="Documentation">

Documentation links now reach their intended external destinations and cross-page headings, while contributor attribution follows renamed accounts correctly. The [external-link checker](/ci#pipeline-overview) reports future drift on weekly or manual runs without blocking pull requests.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Preserve localized docs until translation finalization [dde6af2](https://github.com/openclaw/openclaw/commit/dde6af2)

**Documentation**

- Keep localized docs navigation complete and translated [#114993](https://github.com/openclaw/openclaw/pull/114993)
- Expose links in the generated maturity taxonomy [44a0c09](https://github.com/openclaw/openclaw/commit/44a0c09)
- Preserve product names in localized documentation links [8cd9ad0](https://github.com/openclaw/openclaw/commit/8cd9ad0)
- Preserve translated pages for externally mirrored docs [d6e9cbd](https://github.com/openclaw/openclaw/commit/d6e9cbd)
- Fix maturity taxonomy closing-tag indentation [de17534](https://github.com/openclaw/openclaw/commit/de17534)
- Explain Slack audio clips and voice-input limits [#102410](https://github.com/openclaw/openclaw/pull/102410)
- Repair external docs links and add a non-blocking audit [#114643](https://github.com/openclaw/openclaw/pull/114643)
- Repair stale docs links and contributor attribution [#114746](https://github.com/openclaw/openclaw/pull/114746)
- Repair documentation anchors and spellcheck drift [#122960](https://github.com/openclaw/openclaw/pull/122960)
- docs: fix four broken cross-page anchor links [#128278](https://github.com/openclaw/openclaw/pull/128278)
- docs: clarify Daytona cloud-worker class incompatibility [#130814](https://github.com/openclaw/openclaw/pull/130814)
- docs: remove unsupported Daytona cloud-worker setup recipe [#130824](https://github.com/openclaw/openclaw/pull/130824)

</details>

</Accordion>

</AccordionGroup>
