Skip to content

Validate Codex app-server command overrides#84417

Merged
clawsweeper[bot] merged 2 commits into
openclaw:mainfrom
TurboTheTurtle:fix/codex-appserver-command-validation-84365
May 22, 2026
Merged

Validate Codex app-server command overrides#84417
clawsweeper[bot] merged 2 commits into
openclaw:mainfrom
TurboTheTurtle:fix/codex-appserver-command-validation-84365

Conversation

@TurboTheTurtle

Copy link
Copy Markdown
Contributor

Summary

  • Reject Codex app-server command overrides that combine an executable with inline arguments, such as node C:\...\codex.js.
  • Fail closed in the shared Windows spawn resolver before a malformed command can be treated as one .js entrypoint.
  • Add a doctor warning that points users to managed Codex startup or appServer.args.

Closes #84365

Real behavior proof

Behavior or issue addressed:
On Windows, a manual Codex appServer.command override like node C:\Users\me\.openclaw\npm\node_modules\@openai\codex\bin\codex.js could flow into spawn resolution as a single command string. The .js suffix then made the whole string look like a Node entrypoint, producing failures like Cannot find module 'C:\WINDOWS\system32\node C:\...\codex.js' instead of a clear config diagnostic.

Real environment tested:
Local OpenClaw source checkout at /Users/andy/openclaw-84365, using the bundled Node runtime at /Users/andy/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin/node.

Exact steps or command run after this patch:

PATH=/Users/andy/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin:$PATH node scripts/run-vitest.mjs extensions/codex/src/app-server/config.test.ts extensions/codex/src/app-server/transport-stdio.test.ts src/plugin-sdk/windows-spawn.test.ts src/commands/doctor/shared/codex-route-warnings.test.ts
git diff --check
PATH=/Users/andy/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin:$PATH node --import tsx --input-type=module --eval 'import { resolveCodexAppServerRuntimeOptions } from "./extensions/codex/src/app-server/config.ts"; import { collectCodexRouteWarnings } from "./src/commands/doctor/shared/codex-route-warnings.ts"; import { resolveWindowsSpawnProgram } from "./src/plugin-sdk/windows-spawn.ts"; const malformed = "node C:\\Users\\me\\.openclaw\\npm\\node_modules\\@openai\\codex\\bin\\codex.js"; const spacedPath = "C:\\Program Files\\OpenAI Codex\\codex.exe"; function capture(fn) { try { return { ok: true, value: fn() }; } catch (error) { return { ok: false, message: error instanceof Error ? error.message : String(error) }; } } const runtime = capture(() => resolveCodexAppServerRuntimeOptions({ pluginConfig: { appServer: { command: malformed } }, env: {}, requirementsToml: null })); const spawn = capture(() => resolveWindowsSpawnProgram({ command: malformed, platform: "win32", env: {}, execPath: "C:\\node\\node.exe" })); const safe = resolveCodexAppServerRuntimeOptions({ pluginConfig: { appServer: { command: spacedPath } }, env: {}, requirementsToml: null }).start.command; const doctorWarnings = collectCodexRouteWarnings({ cfg: { plugins: { entries: { codex: { enabled: true, config: { appServer: { command: malformed } } } } } } }).filter((warning) => warning.includes("app-server command")); const payload = { malformedCommand: malformed, runtimeRejected: !runtime.ok, runtimeMessage: runtime.ok ? null : runtime.message, windowsSpawnRejected: !spawn.ok, windowsSpawnMessage: spawn.ok ? null : spawn.message, spacedExecutablePreserved: safe, doctorWarningCount: doctorWarnings.length, doctorWarning: doctorWarnings[0] ?? null }; console.log(JSON.stringify(payload, null, 2)); if (runtime.ok || spawn.ok || safe !== spacedPath || doctorWarnings.length !== 1) process.exit(1);'

Evidence after fix:

{
  "malformedCommand": "node C:\\Users\\me\\.openclaw\\npm\\node_modules\\@openai\\codex\\bin\\codex.js",
  "runtimeRejected": true,
  "windowsSpawnRejected": true,
  "spacedExecutablePreserved": "C:\\Program Files\\OpenAI Codex\\codex.exe",
  "doctorWarningCount": 1
}

Observed result after fix:
The malformed override is rejected during Codex runtime option resolution and again by the shared Windows spawn resolver. Doctor reports one targeted warning for the same config shape. A valid executable path with spaces is still preserved as a direct command.

What was not tested:
I did not run a live Windows npm-global Codex app-server session. This patch covers the source-reproducible malformed override path with Windows spawn simulation and doctor/runtime tests.

Validation

Test Files  4 passed (4)
Tests  147 passed (147)

git diff --check also passed.

Author attribution: if this PR is squash-merged or reworked, please preserve the commit author Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> or include Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>.

@openclaw-barnacle openclaw-barnacle Bot added commands Command implementations extensions: codex size: M proof: supplied External PR includes structured after-fix real behavior proof. labels May 20, 2026
@clawsweeper

clawsweeper Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

Codex review: passed.

Latest ClawSweeper review: 2026-05-22 05:37 UTC / May 22, 2026, 1:37 AM ET.

Workflow note: Future ClawSweeper reviews update this same comment in place.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

Summary
The PR rejects Codex app-server command overrides that embed Node/package-manager inline arguments, adds matching doctor diagnostics, regression tests, and a changelog entry.

Reproducibility: yes. for the scoped malformed override path: current main passes the combined command string through to the Windows spawn resolver, and the PR body shows after-fix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

PR rating
Overall: 🐚 platinum hermit
Proof: 🐚 platinum hermit
Patch quality: 🐚 platinum hermit
Summary: Good focused bug-fix PR with sufficient targeted proof and no blocking findings, with remaining confidence limited by absence of a live Windows managed-startup smoke.

Rank-up moves:

  • Before closing the linked Windows issue as fully exhausted, verify or separately track the managed Codex binary discovery path on a real Windows npm/global install.
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Real behavior proof
Sufficient (live_output): The PR body includes after-fix terminal/live-output proof for Codex runtime validation, shared Windows spawn validation, spaced executable preservation, and doctor warning behavior.

Risk before merge

  • Merging intentionally turns malformed executable-plus-arguments app-server overrides into validation errors; that matches the documented command/args contract but is visible upgrade behavior for users with copied workarounds.
  • The patch adds an exported helper on the public openclaw/plugin-sdk/windows-spawn subpath; it is additive and generic, but maintainers should be comfortable with that SDK surface becoming part of the contract.
  • The linked Windows report also mentioned managed Codex binary discovery; this PR fixes and proves the malformed manual override path, not a live Windows npm-global managed-startup session.

Maintainer options:

  1. Accept the scoped fail-closed validation (recommended)
    Merge with maintainer acceptance that malformed appServer.command strings now fail early and that this is the intended compatibility break for a broken workaround.
  2. Require a live Windows smoke first
    Pause merge until a Windows npm/global Codex managed-startup smoke proves the broader linked issue can be closed end to end.
  3. Rework if SDK expansion is not wanted
    If maintainers do not want a new public windows-spawn helper, rework the validation behind an approved internal or documented SDK seam before merging.

Next step before merge
No repair lane is needed because the PR is focused, maintainer-opted into automerge, has sufficient proof, and has no discrete code defect for automation to fix.

Security
Cleared: The diff adds fail-closed config/spawn validation, diagnostics, tests, and a changelog entry without adding dependencies, workflow changes, lifecycle hooks, or broader secret handling.

Review details

Best possible solution:

Land the narrow validation and doctor diagnostic after exact-head checks, while leaving any remaining Windows managed-binary discovery failure to separate follow-up if it still reproduces.

Do we have a high-confidence way to reproduce the issue?

Yes for the scoped malformed override path: current main passes the combined command string through to the Windows spawn resolver, and the PR body shows after-fix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

Is this the best way to solve the issue?

Yes for the PR's stated scope: rejecting executable-plus-arguments values and pointing users to appServer.args matches the existing command/args contract better than shell-style splitting. The broader managed-binary discovery part of the linked report remains a separate proof question.

Label changes:

  • add merge-risk: 🚨 compatibility: The PR deliberately rejects existing malformed app-server command override strings during config/runtime resolution instead of letting them reach spawn.
  • add status: 🚀 automerge armed: This PR is in ClawSweeper's automerge lane. Sufficient (live_output): The PR body includes after-fix terminal/live-output proof for Codex runtime validation, shared Windows spawn validation, spaced executable preservation, and doctor warning behavior.
  • remove status: 👀 ready for maintainer look: Current PR status label is status: 🚀 automerge armed.

Label justifications:

  • P1: The PR addresses a Windows Codex startup failure that can make Codex-backed chats unusable for affected users.
  • merge-risk: 🚨 compatibility: The PR deliberately rejects existing malformed app-server command override strings during config/runtime resolution instead of letting them reach spawn.
  • rating: 🐚 platinum hermit: Current PR rating is 🐚 platinum hermit because proof is 🐚 platinum hermit, patch quality is 🐚 platinum hermit, and Good focused bug-fix PR with sufficient targeted proof and no blocking findings, with remaining confidence limited by absence of a live Windows managed-startup smoke.
  • status: 🚀 automerge armed: This PR is in ClawSweeper's automerge lane. Sufficient (live_output): The PR body includes after-fix terminal/live-output proof for Codex runtime validation, shared Windows spawn validation, spaced executable preservation, and doctor warning behavior.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix terminal/live-output proof for Codex runtime validation, shared Windows spawn validation, spaced executable preservation, and doctor warning behavior.

What I checked:

  • Current main passes command override through raw: Current main reads plugins.entries.codex.config.appServer.command or OPENCLAW_CODEX_APP_SERVER_BIN into command and separately resolves appServer.args, with no inline-argument validation before spawn. (extensions/codex/src/app-server/config.ts:351, e32e0f3f7f3e)
  • Current main Windows spawn can classify a malformed string as a Node entrypoint: Current main resolves .js commands by using execPath and placing the whole resolved command in leadingArgv, matching the linked issue's node C:\...\codex.js treated as one module path failure mode. (src/plugin-sdk/windows-spawn.ts:218, e32e0f3f7f3e)
  • PR adds shared inline-argument detection before Windows resolution: The PR branch adds detectWindowsSpawnCommandInlineArgs for Node/package-manager command prefixes and throws before resolving Windows spawn candidates when inline arguments are detected. (src/plugin-sdk/windows-spawn.ts:106, 966bcd6617f2)
  • PR adds Codex config validation for config and env overrides: The PR branch validates both config and environment app-server command sources, then directs users to appServer.args or managed startup when a combined command string is found. (extensions/codex/src/app-server/config.ts:309, 966bcd6617f2)
  • PR adds doctor warning for malformed Codex command config: The PR branch adds collectCodexAppServerCommandWarnings and pushes that warning into the existing Codex route-warning list before other route diagnostics. (src/commands/doctor/shared/codex-route-warnings.ts:2431, 966bcd6617f2)
  • Current docs and plugin metadata support executable-only command semantics: The Codex harness docs say appServer.command is for a different executable, and the plugin metadata labels appServer.args as the arguments used for stdio transport. Public docs: docs/plugins/codex-harness.md. (docs/plugins/codex-harness.md:322, e32e0f3f7f3e)

Likely related people:

  • steipete: History shows Peter Steinberger introduced Codex app-server controls and authored adjacent Windows wrapper resolver hardening used by this fix path. (role: feature introducer and adjacent Windows spawn contributor; confidence: high; commits: 31a0b7bd42a5, 12c12570238c, 68a8a98ab761; files: extensions/codex/src/app-server/config.ts, docs/plugins/codex-harness.md, src/plugin-sdk/windows-spawn.ts)
  • Dallin Romney: Current-main blame/log for the central Codex app-server config, doctor warning file, and Windows spawn file points to a recent broad plugin-load refactor touching these paths. (role: recent area contributor; confidence: medium; commits: dca9cecaeed9; files: extensions/codex/src/app-server/config.ts, src/commands/doctor/shared/codex-route-warnings.ts, src/plugin-sdk/windows-spawn.ts)
  • vincentkoc: Recent history on the Codex app-server config includes configurable post-tool raw assistant timeout work in the same runtime-options surface. (role: recent Codex app-server contributor; confidence: medium; commits: 60d200f79719; files: extensions/codex/src/app-server/config.ts)

Codex review notes: model gpt-5.5, reasoning high; reviewed against e32e0f3f7f3e.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P1 High-priority user-facing bug, regression, or broken workflow. labels May 20, 2026
@clawsweeper

clawsweeper Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

✨ Hatched: 🥚 common Velvet Branchling

Hatch command

Comment @clawsweeper hatch when this PR is hatchable.

Hatchability rules:

  • Merged PRs are hatchable.
  • Open PRs are hatchable when they are status: 👀 ready for maintainer look, status: 🚀 automerge armed, or labeled clawsweeper:automerge.
  • Closed unmerged PRs are hatchable only when one of those hatchable labels is still present in the durable record.

Rarity: 🥚 common.
Trait: stacks clean commits.
Image traits: location flaky test forest; accessory miniature diff map; palette charcoal, cyan, and signal green; mood sparkly; pose holding its accessory up for inspection; shell smooth pearl shell; lighting cool dashboard glow; background little resolved-comment flags.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Velvet Branchling in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • Hatchability usually comes from sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness. A merged PR is already final, so merge makes the egg hatchable independently.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

@Takhoffman

Copy link
Copy Markdown
Contributor

@clawsweeper merge

@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

@clawsweeper automerge

@TurboTheTurtle TurboTheTurtle force-pushed the fix/codex-appserver-command-validation-84365 branch from 562c350 to 774392d Compare May 22, 2026 02:52
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 22, 2026
@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

Rebased this branch onto current upstream/main to resolve the merge conflict.\n\nConflict resolution: kept the new upstream sandbox-exec config helper and preserved this PR's Codex app-server command inline-args validation helper.\n\nValidation:\n- npm run test -- extensions/codex/src/app-server/config.test.ts src/plugin-sdk/windows-spawn.test.ts src/commands/doctor/shared/codex-route-warnings.test.ts\n- git diff --check\n\nAuthor check before push:\n\ntext\n774392d644 Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Validate Codex app-server command overrides\n\n\nRaw Pulls API still reports maintainer_can_modify: true.\n\n@clawsweeper re-review

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 22, 2026
@Takhoffman

Copy link
Copy Markdown
Contributor

@clawsweeper automerge

@clawsweeper clawsweeper Bot added the clawsweeper:automerge Maintainer opted this PR into bounded ClawSweeper-reviewed automerge label May 22, 2026
@clawsweeper

clawsweeper Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor

🦞✅
ClawSweeper merged this PR after the passing review.

Source: clawsweeper[bot]
Feedback: structured ClawSweeper verdict: pass (sha=966bcd6617f26291a244c24c571e5f1b2b3596e0)
Merge status: merged by ClawSweeper automerge
Merged at: 2026-05-22T05:39:03Z
Merge commit: 03125c8e132d

What merged:

  • The PR rejects Codex app-server command overrides that embed Node/package-manager inline arguments, adds matching doctor diagnostics, regression tests, and a changelog entry.
  • Reproducibility: yes. for the scoped malformed override path: current main passes the combined command strin ... ix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

Automerge notes:

  • PR branch already contained follow-up commit before automerge: Validate Codex app-server command overrides

The automerge loop is complete.

Automerge progress:

  • 2026-05-22 05:17:53 UTC review queued 774392d64437 (queued)
  • 2026-05-22 05:32:29 UTC review queued 966bcd6617f2 (after repair)
  • 2026-05-22 05:38:52 UTC review passed 966bcd6617f2 (structured ClawSweeper verdict: pass (sha=966bcd6617f26291a244c24c571e5f1b2b359...)
  • 2026-05-22 05:39:05 UTC merged 966bcd6617f2 (merged by ClawSweeper automerge)

@clawsweeper clawsweeper Bot force-pushed the fix/codex-appserver-command-validation-84365 branch from 774392d to 966bcd6 Compare May 22, 2026 05:32
@clawsweeper clawsweeper Bot added status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. and removed status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels May 22, 2026
@clawsweeper clawsweeper Bot merged commit 03125c8 into openclaw:main May 22, 2026
113 of 116 checks passed
@TurboTheTurtle TurboTheTurtle deleted the fix/codex-appserver-command-validation-84365 branch May 22, 2026 06:29
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request May 24, 2026
…026.5.22) (#645)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/openclaw/openclaw](https://openclaw.ai) ([source](https://github.com/openclaw/openclaw)) | patch | `2026.5.20` → `2026.5.22` |

---

### Release Notes

<details>
<summary>openclaw/openclaw (ghcr.io/openclaw/openclaw)</summary>

### [`v2026.5.22`](https://github.com/openclaw/openclaw/releases/tag/v2026.5.22): openclaw 2026.5.22

[Compare Source](https://github.com/openclaw/openclaw/compare/v2026.5.20...v2026.5.22)

##### 2026.5.22

##### Changes

- Gateway/perf: reuse process-stable channel catalog reads, avoid repeated bundled-channel boundary checks, and rotate gateway watch CPU profiles so benchmark runs do not accumulate unbounded artifacts.
- Gateway/perf: reuse immutable plugin metadata snapshots across startup, config, model, channel, setup, and secret metadata readers so hot paths avoid repeated plugin file stats and manifest registry reloads.
- Gateway/perf: lazy-load startup-idle plugin work, core gateway method handlers, and the embedded ACPX runtime so Gateway health and ready signals no longer wait on unused handler trees or ACPX probes.
- Gateway/perf: cache plugin SDK public-surface alias maps and skip irrelevant macOS Linuxbrew PATH probes so Gateway startup avoids repeated filesystem walks and slow missing-directory stats.
- Meeting Notes: add a source-only external meeting-notes plugin and SDK source-provider contract outside the core npm package, with auto-start capture config, manual transcript imports, read-only `openclaw meeting-notes` CLI access, and Discord voice as the first live source.
- Docs/channels/config: add Signal `configPath`, Telegram wildcard topic defaults, local-time backup archive names, Termux home fallback, include-path validation, secret-scanner-safe placeholder guidance, Gemini CLI/Antigravity media guidance, and macOS VM auto-login guidance. Thanks [@&#8203;NorseGaud](https://github.com/NorseGaud), [@&#8203;yudistiraashadi](https://github.com/yudistiraashadi), [@&#8203;huangqian8](https://github.com/huangqian8), [@&#8203;VibhorGautam](https://github.com/VibhorGautam), [@&#8203;maweibin](https://github.com/maweibin), [@&#8203;tianxingleo](https://github.com/tianxingleo), [@&#8203;IgnacioPro](https://github.com/IgnacioPro), and [@&#8203;xzcxzcyy-claw](https://github.com/xzcxzcyy-claw).
- Docs: clarify model-usage portability, Codex migration prerequisites, status bootstrap wording, thread-bound subagent limits, hook ownership, and config-preserving safety guidance. Thanks [@&#8203;aniruddhaadak80](https://github.com/aniruddhaadak80), [@&#8203;leno23](https://github.com/leno23), [@&#8203;TomDjerry](https://github.com/TomDjerry), [@&#8203;matthewxmurphy](https://github.com/matthewxmurphy), [@&#8203;vincentkoc](https://github.com/vincentkoc), and [@&#8203;stablegenius49](https://github.com/stablegenius49).
- Docs: clarify README onboarding and Gateway startup paths, WhatsApp QR/408 recovery, cron output language prompts, skill advanced features, gateway upstream 403 troubleshooting, and plugin fallback override guidance. Thanks [@&#8203;deepujain](https://github.com/deepujain), [@&#8203;Zacxxx](https://github.com/Zacxxx), [@&#8203;Jah-yee](https://github.com/Jah-yee), [@&#8203;neyric](https://github.com/neyric), [@&#8203;usimic](https://github.com/usimic), [@&#8203;Renu-Cybe](https://github.com/Renu-Cybe), [@&#8203;BigUncle](https://github.com/BigUncle), and [@&#8203;SeashoreShi](https://github.com/SeashoreShi).
- Docs: clarify context-pruning ratio bounds, local dashboard recovery, CLI env markers, remote onboarding token behavior, and Peekaboo Bridge permissions for subprocess agents. Thanks [@&#8203;ayesha-aziz123](https://github.com/ayesha-aziz123), [@&#8203;dishraters](https://github.com/dishraters), [@&#8203;hougangdev](https://github.com/hougangdev), and [@&#8203;brandonlipman](https://github.com/brandonlipman).
- Docs: clarify browser CDP diagnostics, Plugin SDK allowlist imports, status-reaction timing defaults, queue steering behavior, limited-tool troubleshooting, cron HEARTBEAT handling, Telegram multi-agent groups, Bitwarden SecretRef setup, and EasyRunner deployments. Thanks [@&#8203;Quratulain-bilal](https://github.com/Quratulain-bilal), [@&#8203;mbelinky](https://github.com/mbelinky), [@&#8203;Mickey-](https://github.com/Mickey-), [@&#8203;vancece](https://github.com/vancece), [@&#8203;xenouzik](https://github.com/xenouzik), [@&#8203;posigit](https://github.com/posigit), [@&#8203;surlymochan](https://github.com/surlymochan), [@&#8203;janaka](https://github.com/janaka), and [@&#8203;choiking](https://github.com/choiking).
- Crabbox/Testbox: run clean sparse-checkout Testbox syncs from a temporary full checkout and route remote changed gates through Corepack pnpm.
- Docs: clarify IPv4-only Gateway BYOH binding, trusted-proxy scope clearing, Android pairing approval, macOS Accessibility grants, Zalo profile env vars, password-store SecretRef setup, and Chinese memory navigation. Thanks [@&#8203;itskai-dev](https://github.com/itskai-dev), [@&#8203;gwh7078](https://github.com/gwh7078), [@&#8203;longstoryscott](https://github.com/longstoryscott), [@&#8203;MoeJaberr](https://github.com/MoeJaberr), and [@&#8203;yuaiccc](https://github.com/yuaiccc).
- Docs: consolidate GLM under Z.AI, add the Upstash Box install guide and Gateway exposure runbook, clarify MEDIA directives, Copilot and Voyage setup, config path quoting, real behavior proof, and memory-file write guidance. Thanks [@&#8203;BobDu](https://github.com/BobDu), [@&#8203;alitariksahin](https://github.com/alitariksahin), [@&#8203;Jefsky](https://github.com/Jefsky), [@&#8203;musaabhasan](https://github.com/musaabhasan), [@&#8203;OmerZeyveli](https://github.com/OmerZeyveli), [@&#8203;leno23](https://github.com/leno23), [@&#8203;WuKongAI-CMU](https://github.com/WuKongAI-CMU), [@&#8203;luoyanglang](https://github.com/luoyanglang), and [@&#8203;majin1102](https://github.com/majin1102).
- Docs: clarify media provider credentials, Codex/OpenClaw code-mode boundaries, Slack and Telegram ack reactions, Feishu dynamic agents, secrets plaintext boundaries, memory guidance, and Chinese glossary terms. Thanks [@&#8203;nielskaspers](https://github.com/nielskaspers), [@&#8203;cosmopolitan033](https://github.com/cosmopolitan033), [@&#8203;drclaw-iq](https://github.com/drclaw-iq), [@&#8203;alexgduarte](https://github.com/alexgduarte), [@&#8203;zccyman](https://github.com/zccyman), [@&#8203;chengoak](https://github.com/chengoak), and [@&#8203;cassthebandit](https://github.com/cassthebandit).
- Packaging: exclude documentation images and assets from the npm tarball, reducing published package size without affecting runtime docs search or CLI behavior. Thanks [@&#8203;SebTardif](https://github.com/SebTardif).
- Media understanding: stop auto-probing Gemini CLI and use Antigravity CLI only as a lower-priority image/video fallback after configured provider APIs.
- Agents/subagents: limit default sub-agent bootstrap context to `AGENTS.md` and `TOOLS.md`, keeping persona, identity, user, memory, heartbeat, and setup files out of delegated workers by default. ([#&#8203;85283](https://github.com/openclaw/openclaw/issues/85283)) Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- Maintainer skills: exclude plugin SDK/API boundary work from `openclaw-landable-bug-sweep` so bugbash sweeps stay focused on small paper-cut fixes.
- QA-Lab/diagnostics: extend the OpenTelemetry smoke harness to prove trace, metric, and log export, and add first-class Prometheus and observability smoke aliases.
- Plugin SDK: add a generic channel-message poll sender so channel plugins can expose poll delivery without depending on channel-specific SDK facades.
- Crabbox: keep the local wrapper's provider validation synced with the installed Crabbox binary while preserving supported aliases such as `docker` and `blacksmith`. ([#&#8203;85302](https://github.com/openclaw/openclaw/issues/85302)) Thanks [@&#8203;hxy91819](https://github.com/hxy91819).
- Maintainer skills: add `openclaw-landable-bug-sweep` for producing five small, reviewed, CI-green OpenClaw bugfix PRs from issue/PR sweeps.
- Control UI/chat: add search and Load More pagination to the chat session picker, keeping initial session loads bounded while making older conversations reachable. ([#&#8203;85237](https://github.com/openclaw/openclaw/issues/85237)) Thanks [@&#8203;amknight](https://github.com/amknight).
- CLI/onboarding: start classic onboarding when bare `openclaw` runs before an authored config exists, while keeping configured installs on Crestodian. ([#&#8203;72343](https://github.com/openclaw/openclaw/issues/72343)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Discord: allow configuring a bounded `agentComponents.ttlMs` callback registry lifetime for long-running component workflows, with per-account overrides and a 24-hour cap. ([#&#8203;84189](https://github.com/openclaw/openclaw/issues/84189)) Thanks [@&#8203;100menotu001](https://github.com/100menotu001).
- xAI/Grok: reuse xAI OAuth auth profiles for Grok `web_search`, thread active-agent auth through web search, add Grok model aliases, and let media providers declare default operation timeouts. ([#&#8203;85182](https://github.com/openclaw/openclaw/issues/85182)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Plugin SDK: add row-level session workflow helpers and deprecate `loadSessionStore` so plugins can read and patch sessions without depending on the legacy whole-store shape. ([#&#8203;84693](https://github.com/openclaw/openclaw/issues/84693)) Thanks [@&#8203;efpiva](https://github.com/efpiva).
- Gateway/plugins: reuse a compatible Gateway startup plugin registry during dispatch so safe plugin dispatches avoid redundant registry loading. ([#&#8203;84324](https://github.com/openclaw/openclaw/issues/84324)) Thanks [@&#8203;ai-hpc](https://github.com/ai-hpc).
- Plugins/SDK: add a general `embeddingProviders` capability contract and registration API so embeddings can become a reusable provider surface outside memory-specific adapters.
- Dependencies: refresh provider, plugin, UI, and tooling packages, update `protobufjs` to 8.4.0 to clear the current npm advisory, and carry the Claude ACP completion patch forward to `@agentclientprotocol/claude-agent-acp` 0.36.1.
- Agents/tools: remove the old sender-owner tool gating path so configured tools stay visible for trusted sessions while command and channel-action auth still carry real sender identity.
- QA-Lab: add curated mock JSONL replay fixtures and first-drift reporting for runtime-parity audits. ([#&#8203;80323](https://github.com/openclaw/openclaw/issues/80323), refs [#&#8203;80176](https://github.com/openclaw/openclaw/issues/80176)) Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add a QA bus tool-trace visibility scenario for sanitized tool-call assertions.
- QA-Lab: replace generic evidence framing in seeded scenario prompts with concrete observed QA behavior.
- QA-Lab: list named scenario packs in the coverage report so personal-agent privacy coverage stays visible in audits.
- QA-Lab: list live transport lane membership in the coverage report so real transport checks stay separate from seeded qa-channel scenarios.
- Release/package: run package integrity checks before package acceptance lanes so public install/update validation fails before private QA assets can leak into the package.
- QA-Lab: include the optional 100-turn runtime parity soak in release-soak artifacts so long-run Codex/Pi transcript drift stays visible outside the default gate. ([#&#8203;80395](https://github.com/openclaw/openclaw/issues/80395)) Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add a live-only long-context progress watchdog scenario for Codex app-server timeout and stalled-run sentinels. ([#&#8203;80323](https://github.com/openclaw/openclaw/issues/80323)) Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: tag gateway restart recovery and streaming final-integrity scenarios as live-only runtime parity lanes. ([#&#8203;80323](https://github.com/openclaw/openclaw/issues/80323)) Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add a personal-agent failure recovery scenario that checks honest partial status, retry boundaries, and local recovery artifacts. ([#&#8203;83872](https://github.com/openclaw/openclaw/issues/83872)) Thanks [@&#8203;iFiras-Max1](https://github.com/iFiras-Max1).
- QA-Lab: include an opt-in `update.run` package self-upgrade sentinel for destructive latest-package recovery checks.
- QA-Lab: add Codex plugin lifecycle and auth-profile fixture coverage for missing installs, pinned-version drift, first-turn install ordering, and doctor migration safety. ([#&#8203;80323](https://github.com/openclaw/openclaw/issues/80323), refs [#&#8203;80174](https://github.com/openclaw/openclaw/issues/80174)) Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- Models/perf: pre-warm the provider auth-state map at gateway startup so `/models` and every model-listing call short-circuits the per-provider plugin / external-CLI discovery on the hot path. Per-call cost drops from \~20 s to \~5 ms (\~4,100×); the one-time startup warm resets and re-warms after hot reloads. ([#&#8203;84816](https://github.com/openclaw/openclaw/issues/84816)) Thanks [@&#8203;sjf](https://github.com/sjf).
- Release/security: ship the root npm package and OpenClaw-owned npm plugins with generated shrinkwrap, support bundled plugin runtime dependencies for suitable plugin tarballs, and require review for lockfile/shrinkwrap changes so published installs use locked dependency graphs.
- Tests/perf: isolate doctor core health check unit coverage from real skills/workspace discovery so `doctor-core-checks` no longer dominates unit perf while keeping one real skills-readiness smoke. ([#&#8203;84493](https://github.com/openclaw/openclaw/issues/84493)) Thanks [@&#8203;frankekn](https://github.com/frankekn).

##### Fixes

- WebChat: summarize internal message-tool source replies so tool cards no longer duplicate the visible reply body. ([#&#8203;84773](https://github.com/openclaw/openclaw/issues/84773)) Thanks [@&#8203;jason-allen-oneal](https://github.com/jason-allen-oneal).
- Gateway: preserve deferred lifecycle-error cleanup across later non-terminal events so provider timeouts can persist failed session state instead of leaving sessions stuck running. ([#&#8203;85256](https://github.com/openclaw/openclaw/issues/85256), fixes [#&#8203;63819](https://github.com/openclaw/openclaw/issues/63819)) Thanks [@&#8203;samzong](https://github.com/samzong).
- Agents/subagents: report tool-only child progress during timeout summaries instead of showing no visible output.
- Telegram/ACP: preserve explicit `:topic:` conversation suffixes when inbound ACP targets do not carry a separate thread id.
- Browser/proxy: bypass the managed proxy for the exact local managed Chrome CDP readiness and DevTools WebSocket endpoints, so `openclaw browser start` works when the operator proxy blocks loopback egress. ([#&#8203;83255](https://github.com/openclaw/openclaw/issues/83255)) Thanks [@&#8203;lightcap](https://github.com/lightcap).
- Ollama: bypass the managed proxy for configured local embedding origins while keeping SSRF guardrails on unconfigured targets. Thanks [@&#8203;Kaspre](https://github.com/Kaspre).
- OpenAI/images: route Codex API-key image generation through the native OpenAI Images API instead of the Codex OAuth streaming backend, avoiding 401s from valid API keys.
- Agents/OpenAI completions: omit empty tool payload fields for proxy-like OpenAI-compatible endpoints so strict vLLM-style servers accept tool-free turns. ([#&#8203;85835](https://github.com/openclaw/openclaw/issues/85835)) Thanks [@&#8203;rendrag-git](https://github.com/rendrag-git).
- Checks/Windows: route full `pnpm check` stage commands through the managed child runner so Windows avoids Node shell-argv deprecation warnings there too.
- Checks/Windows: run managed child commands through explicit `cmd.exe` wrapping instead of Node shell mode with argv, avoiding Node 24 subprocess deprecation warnings during changed checks.
- Gateway: omit internal stream-error placeholder entries from agent prompt history so failed assistant turns are not replayed as model-authored text. ([#&#8203;85652](https://github.com/openclaw/openclaw/issues/85652)) Thanks [@&#8203;anyech](https://github.com/anyech).
- Sessions: enforce the session write-lock max-hold policy during lock acquisition so long-held locks can be reclaimed before the stale-lock window. ([#&#8203;85764](https://github.com/openclaw/openclaw/issues/85764)) Thanks [@&#8203;njuboy11](https://github.com/njuboy11).
- Models: prune retired Groq, GitHub Copilot, OpenAI, xAI, and old Claude catalog entries, with doctor migration to upgrade existing configs to current provider refs.
- Doctor/update: recognize junction-backed source checkouts as git installs by comparing canonical paths before showing package-manager update guidance. Fixes [#&#8203;82215](https://github.com/openclaw/openclaw/issues/82215). Thanks [@&#8203;igormf](https://github.com/igormf).
- Channels: honor `/verbose on` for tool/progress summaries across direct chats, groups, channels, and forum topics while preserving quiet default behavior. ([#&#8203;85488](https://github.com/openclaw/openclaw/issues/85488)) Thanks [@&#8203;kurplunkin](https://github.com/kurplunkin).
- CLI/skills: show an all-ready note with next-step commands when skill setup has no missing dependencies to install. ([#&#8203;85032](https://github.com/openclaw/openclaw/issues/85032)) Thanks [@&#8203;aniruddhaadak80](https://github.com/aniruddhaadak80).
- Microsoft Foundry: route DeepSeek V4 Pro and Flash models through the Foundry Responses API while keeping older DeepSeek models on their existing path. ([#&#8203;85549](https://github.com/openclaw/openclaw/issues/85549)) Thanks [@&#8203;roslinmahmud](https://github.com/roslinmahmud).
- Status/usage: show configured cost estimates for AWS SDK models in full usage output while keeping token-only usage replies cost-free. ([#&#8203;85619](https://github.com/openclaw/openclaw/issues/85619)) Thanks [@&#8203;ItsOtherMauridian](https://github.com/ItsOtherMauridian).
- Agents/OpenAI Responses: retry non-visible reasoning-only turns for OpenAI Responses API families instead of treating them as empty failed turns. ([#&#8203;85603](https://github.com/openclaw/openclaw/issues/85603)) Thanks [@&#8203;SebTardif](https://github.com/SebTardif).
- Directive tags: preserve message and content-part object identity when display stripping makes no directive-tag changes. ([#&#8203;85682](https://github.com/openclaw/openclaw/issues/85682)) Thanks [@&#8203;willamhou](https://github.com/willamhou).
- Telegram: send local `path`/`filePath` and structured attachment media from `sendMessage` actions instead of dropping them or sending text-only messages. ([#&#8203;85219](https://github.com/openclaw/openclaw/issues/85219)) Thanks [@&#8203;keshavbotagent](https://github.com/keshavbotagent).
- Sessions/status: show the estimated context budget when fresh provider usage is unavailable and clear stale estimates across session resets and compaction boundaries. ([#&#8203;84830](https://github.com/openclaw/openclaw/issues/84830)) Thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- Gateway/config: pin relative `OPENCLAW_STATE_DIR` overrides to an absolute path at startup so later working-directory changes cannot retarget gateway state. ([#&#8203;52264](https://github.com/openclaw/openclaw/issues/52264)) Thanks [@&#8203;PerfectPan](https://github.com/PerfectPan).
- Release/package: run npm release, prepublish, and postpublish verification through Windows-safe npm command shims so native Windows checks can execute `npm.cmd` instead of treating it as a binary.
- Agents/harness: pass CLI runtime aliases through harness selection so provider-owned CLI aliases no longer get rejected before reaching the right runtime. ([#&#8203;85631](https://github.com/openclaw/openclaw/issues/85631)) Thanks [@&#8203;potterdigital](https://github.com/potterdigital).
- Secrets: show the irreversible apply warning after interactive `secrets configure` confirmation so confirmed migrations still get the final safety prompt. ([#&#8203;85638](https://github.com/openclaw/openclaw/issues/85638)) Thanks [@&#8203;alkor2000](https://github.com/alkor2000).
- Agents/CLI output: ignore cumulative Claude `stream-json` result usage when assistant usage events are present, preventing inflated cache-read accounting. ([#&#8203;85625](https://github.com/openclaw/openclaw/issues/85625)) Thanks [@&#8203;zhouhe-xydt](https://github.com/zhouhe-xydt).
- CLI: keep `waitForever()` alive by leaving its keep-alive interval ref'd so the public helper no longer exits immediately with Node's unsettled-await code. ([#&#8203;85694](https://github.com/openclaw/openclaw/issues/85694)) Thanks [@&#8203;m1qaweb](https://github.com/m1qaweb).
- Agents/bootstrap: guard bootstrap name checks against missing file names so malformed bootstrap entries warn and truncate instead of crashing. Fixes [#&#8203;85523](https://github.com/openclaw/openclaw/issues/85523). ([#&#8203;85615](https://github.com/openclaw/openclaw/issues/85615)) Thanks [@&#8203;zhouhe-xydt](https://github.com/zhouhe-xydt).
- CLI/tasks: reject partially numeric `openclaw tasks audit --limit` values so audit limits must be real positive integers instead of accepting strings like `5abc`. ([#&#8203;84901](https://github.com/openclaw/openclaw/issues/84901)) Thanks [@&#8203;jbetala7](https://github.com/jbetala7).
- Status/diagnostics: bound deep Docker audit probes so `openclaw status --deep` reports slow container checks instead of hanging behind unbounded inspection. ([#&#8203;85476](https://github.com/openclaw/openclaw/issues/85476)) Thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- Providers/Anthropic: migrate 1M context handling to GA-capable Claude 4.x models by sizing eligible models at 1M without the retired `context-1m-2025-08-07` beta, ignoring that retired beta in older configs, and preserving OAuth-required Anthropic beta headers. ([#&#8203;45613](https://github.com/openclaw/openclaw/issues/45613)) Thanks [@&#8203;haoyu-haoyu](https://github.com/haoyu-haoyu).
- Cron/Telegram: parse forum-topic delivery targets through the Telegram plugin instead of cron core, including `:topic:` and `:topicId` forms for announce delivery. Thanks [@&#8203;etticat](https://github.com/etticat).
- Twitch: keep stale message-handler cleanup callbacks from removing newer handler registrations for the same account, preserving inbound message delivery after reconnects. Fixes [#&#8203;83888](https://github.com/openclaw/openclaw/issues/83888). ([#&#8203;85425](https://github.com/openclaw/openclaw/issues/85425)) Thanks [@&#8203;alkor2000](https://github.com/alkor2000).
- Memory/LanceDB: expose public memory artifacts through the active memory provider bridge so memory-wiki imports durable memory files, daily notes, dream reports, and event logs without depending on memory-core internals. Fixes [#&#8203;83604](https://github.com/openclaw/openclaw/issues/83604). ([#&#8203;85060](https://github.com/openclaw/openclaw/issues/85060)) Thanks [@&#8203;brokemac79](https://github.com/brokemac79).
- Crabbox: keep AWS hydration compatible with local Actions replay by inlining the hydrate workflow's Node/pnpm setup instead of invoking repo-local composite actions.
- Agents/subagents: simplify native sub-agent completion handoff so children report their latest visible assistant result to the requester without using `message`, while keeping parent-owned message-tool delivery policy intact. Fixes [#&#8203;85070](https://github.com/openclaw/openclaw/issues/85070). ([#&#8203;85089](https://github.com/openclaw/openclaw/issues/85089)) Thanks [@&#8203;brokemac79](https://github.com/brokemac79).
- Docker setup: stop printing the Gateway bearer token in setup logs and printed follow-up commands.
- Agents: let embedded compaction fallback retries proceed when PI-compatible candidates do not need agent harness plugin preparation.
- Agents/tools: honor configured custom provider API keys when deciding whether media, image-generation, video-generation, music-generation, and PDF tools are available. ([#&#8203;85570](https://github.com/openclaw/openclaw/issues/85570))
- StepFun: stop advertising stale generic API key auth choices so onboarding only offers runtime-backed Standard and Step Plan choices.
- Diagnostics: keep OpenTelemetry log bodies behind explicit content capture and scrub scoped agent-session keys from OpenTelemetry and Prometheus labels while preserving bounded queue-lane prefixes.
- Windows installer: fail Git checkout installs when `pnpm install` or `pnpm build` fails instead of writing a wrapper to a missing CLI build.
- Sessions: surface previous-transcript archive failures during `/new` rotation so disk rename errors are logged instead of silently hiding stranded transcript files. Fixes [#&#8203;81984](https://github.com/openclaw/openclaw/issues/81984). ([#&#8203;85586](https://github.com/openclaw/openclaw/issues/85586), from [#&#8203;82081](https://github.com/openclaw/openclaw/issues/82081)) Thanks [@&#8203;0xghost42](https://github.com/0xghost42).
- TUI/agents: mirror internal-ui message-tool replies into final chat output so message-tool-only agents remain visible in `openclaw tui`. Fixes [#&#8203;85538](https://github.com/openclaw/openclaw/issues/85538). Thanks [@&#8203;danpolasek](https://github.com/danpolasek).
- Agents: keep parallel OpenAI-compatible tool-call deltas in separate argument buffers so interleaved tool calls no longer corrupt streamed arguments. ([#&#8203;82263](https://github.com/openclaw/openclaw/issues/82263)) Thanks [@&#8203;luna-system](https://github.com/luna-system).
- Memory/doctor: report missing or unusable QMD workspace directories as workspace failures instead of generic binary failures. ([#&#8203;63167](https://github.com/openclaw/openclaw/issues/63167)) Thanks [@&#8203;sercada](https://github.com/sercada).
- Debug proxy: record CONNECT client-socket errors and destroy the paired upstream socket so abrupt client disconnects no longer leak tunnel resources. ([#&#8203;82444](https://github.com/openclaw/openclaw/issues/82444)) Thanks [@&#8203;SebTardif](https://github.com/SebTardif).
- Diffs: continue hydrating later diff cards when one card fails so a single broken card no longer blanks the whole diff viewer. ([#&#8203;84775](https://github.com/openclaw/openclaw/issues/84775)) Thanks [@&#8203;cosmopolitan033](https://github.com/cosmopolitan033).
- Mac app: use the native settings sidebar window chrome so the sidebar toggle stays on the left and content no longer clips under oversized titlebar padding.
- QA-Lab/Codex: bundle auth/plugin fixture imports for flow scenarios and let terminal async media tools end Codex app-server turns without timing out. ([#&#8203;80397](https://github.com/openclaw/openclaw/issues/80397), refs [#&#8203;80323](https://github.com/openclaw/openclaw/issues/80323)) Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- Gateway/agents: preserve fresh session overrides and metadata when stale cached agent-session entries race with store updates, so subagent model/provider overrides and routing policy survive concurrent writes. ([#&#8203;19328](https://github.com/openclaw/openclaw/issues/19328)) Thanks [@&#8203;CodeReclaimers](https://github.com/CodeReclaimers).
- Control UI/chat: keep chat session search inline with the session selector so the header no longer shows a duplicate standalone search row.
- Control UI/chat: collapse focused-mode header chrome and suppress hidden-header scroll updates so focus mode no longer jumps while scrolling. Thanks [@&#8203;amknight](https://github.com/amknight).
- Codex app-server: restart the native app-server and retry once when server-side compaction times out, so preflight compaction stalls recover instead of failing every dispatch. ([#&#8203;85500](https://github.com/openclaw/openclaw/issues/85500))
- Restore Control UI gateway token pairing \[AI]. ([#&#8203;85459](https://github.com/openclaw/openclaw/issues/85459)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- OpenAI video: honor configured provider request private-network opt-in for local/custom video endpoints so explicitly trusted mock and self-hosted providers are not blocked. Thanks [@&#8203;shakkernerd](https://github.com/shakkernerd).
- OpenAI video: send uploaded video edit requests to the documented `/videos/edits` endpoint with a `video` file instead of posting MP4 references to `/videos`. Thanks [@&#8203;shakkernerd](https://github.com/shakkernerd).
- Agents/channels: preserve message-tool delivery evidence through gateway agent completion handoffs so successful generated media sends are not followed by false failure messages. Thanks [@&#8203;shakkernerd](https://github.com/shakkernerd).
- CLI/update: repair managed npm plugin `openclaw` peer links during post-core convergence and reject stale or wrong-target peer links before restart. ([#&#8203;83794](https://github.com/openclaw/openclaw/issues/83794)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- CLI/agents: default new omitted-account bindings to all accounts when the channel has multiple configured accounts, and clarify account-scope docs. ([#&#8203;49769](https://github.com/openclaw/openclaw/issues/49769)) Thanks [@&#8203;Gcaufy](https://github.com/Gcaufy).
- Codex app-server: let authorized `/codex` control commands such as `/codex detach` escape plugin-owned conversation bindings while keeping unknown or unauthorized slash text routed to the bound plugin. Fixes [#&#8203;85157](https://github.com/openclaw/openclaw/issues/85157). ([#&#8203;85188](https://github.com/openclaw/openclaw/issues/85188)) Thanks [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Auto-reply/models: keep `/models` browse replies fast by sharing the bounded read-only catalog path with Gateway model listing. ([#&#8203;84735](https://github.com/openclaw/openclaw/issues/84735)) Thanks [@&#8203;safrano9999](https://github.com/safrano9999).
- Codex app-server: disable native Code Mode when the effective exec host is `node` and keep OpenClaw `exec`/`process` available, so `/exec host=node` routes shell commands through the selected node instead of the gateway. Fixes [#&#8203;85012](https://github.com/openclaw/openclaw/issues/85012). ([#&#8203;85090](https://github.com/openclaw/openclaw/issues/85090)) Thanks [@&#8203;sahilsatralkar](https://github.com/sahilsatralkar).
- Agents: bound embedded auto-compaction session write-lock watchdogs to the compaction timeout instead of the full run timeout, so stuck compaction cannot hold the live session lock for the whole run window. ([#&#8203;84949](https://github.com/openclaw/openclaw/issues/84949)) Thanks [@&#8203;luoyanglang](https://github.com/luoyanglang).
- Gateway/agents: return phase-aware `agent.wait` timeout attribution and only cool auth profiles on provider-started timeouts. Refs [#&#8203;65504](https://github.com/openclaw/openclaw/issues/65504). Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- Gateway: defer provider auth-state prewarm until after startup readiness so early gateway tool/session requests are not blocked by provider auth discovery. ([#&#8203;85272](https://github.com/openclaw/openclaw/issues/85272)) Thanks [@&#8203;dutifulbob](https://github.com/dutifulbob).
- Gateway/models: coalesce provider auth-state rewarms after auth-profile failures and log event-loop delay for warm/rewarm work, so provider auth bursts no longer stack full auth sweeps behind channel replies.
- Gateway/models: stop cancelled provider auth-state prewarms from continuing full provider sweeps, so reload and auth-failure bursts no longer keep startup busy.
- Agents/Codex: show the first plan update as a transient chat status notice without counting it as final assistant content.
- CLI/update: walk the macOS process ancestry and honor the inherited Gateway runtime PID before package updates stop the managed Gateway service, so nested in-band updater children can refuse instead of killing the LaunchAgent-supervised Gateway that owns them. Fixes [#&#8203;85120](https://github.com/openclaw/openclaw/issues/85120).
- Gateway/LaunchAgent: wait for launchd reload bootout to finish and fall back to kickstart when bootstrap races, so reload handoff does not leave the service deregistered. Fixes [#&#8203;84630](https://github.com/openclaw/openclaw/issues/84630). ([#&#8203;84641](https://github.com/openclaw/openclaw/issues/84641)) Thanks [@&#8203;NianJiuZst](https://github.com/NianJiuZst).
- Gateway/LaunchAgent: treat a concurrent launchd bootstrap as a successful restart when the service is already loaded, avoiding false macOS Gateway restart failures. Fixes [#&#8203;84721](https://github.com/openclaw/openclaw/issues/84721). ([#&#8203;84722](https://github.com/openclaw/openclaw/issues/84722)) Thanks [@&#8203;googlerest](https://github.com/googlerest).
- Gateway/service: include the active `openclaw` command bin directory in managed service PATH generation and doctor audit expectations for npm-global macOS installs. Fixes [#&#8203;84201](https://github.com/openclaw/openclaw/issues/84201). ([#&#8203;84475](https://github.com/openclaw/openclaw/issues/84475)) Thanks [@&#8203;jbetala7](https://github.com/jbetala7).
- Control UI/chat: disable the thinking selector for known non-reasoning models instead of showing duplicate Off choices. Fixes [#&#8203;84069](https://github.com/openclaw/openclaw/issues/84069). Thanks [@&#8203;DrippingMellow](https://github.com/DrippingMellow).
- Memory: expand `~` in configured extra memory paths before resolving them, so home-relative folders are not treated as workspace-relative. Fixes [#&#8203;58026](https://github.com/openclaw/openclaw/issues/58026). Thanks [@&#8203;stadman](https://github.com/stadman).
- Skills: treat `openclaw.os: macos` as Darwin when checking skill requirements, so macOS-only skills no longer report as missing on macOS hosts. Fixes [#&#8203;61338](https://github.com/openclaw/openclaw/issues/61338). Thanks [@&#8203;Jessecq1995](https://github.com/Jessecq1995).
- Control UI/logs: strip ANSI escape sequences from displayed Gateway log messages so color codes no longer appear as raw text. Fixes [#&#8203;64399](https://github.com/openclaw/openclaw/issues/64399). Thanks [@&#8203;guguangxin-eng](https://github.com/guguangxin-eng).
- Docker: pre-create the workspace and auth-profile config mount points with `node` ownership so first-run named volumes do not start root-owned. Fixes [#&#8203;85076](https://github.com/openclaw/openclaw/issues/85076). Thanks [@&#8203;Noerr](https://github.com/Noerr).
- Telegram: pass configured markdown table mode through outbound markdown chunking so chunked sends render tables consistently. Fixes [#&#8203;85085](https://github.com/openclaw/openclaw/issues/85085). Thanks [@&#8203;ShuaiHui](https://github.com/ShuaiHui).
- CLI/update: preserve managed Gateway service environment during package cutovers so macOS LaunchAgent repair/restart reads the pre-update service state instead of caller shell state. ([#&#8203;83026](https://github.com/openclaw/openclaw/issues/83026))
- Agents/providers: honor per-model `api` and `baseUrl` overrides in custom provider auth hooks and transport selection. Fixes [#&#8203;80487](https://github.com/openclaw/openclaw/issues/80487). ([#&#8203;80488](https://github.com/openclaw/openclaw/issues/80488)) Thanks [@&#8203;huveewomg](https://github.com/huveewomg).
- Gateway/restart: eager-load the lifecycle runtime before in-place upgrade signal handling so package replacement does not deadlock restart imports. ([#&#8203;84890](https://github.com/openclaw/openclaw/issues/84890)) Thanks [@&#8203;myps6415](https://github.com/myps6415).
- CLI/update: start managed Gateway update handoff helpers from a stable existing directory and tolerate deleted cwd/package roots during macOS LaunchAgent handoff. Fixes [#&#8203;83808](https://github.com/openclaw/openclaw/issues/83808). ([#&#8203;83875](https://github.com/openclaw/openclaw/issues/83875)) Thanks [@&#8203;jason-allen-oneal](https://github.com/jason-allen-oneal).
- Skills: watch each shared skill directory once across agent workspaces instead of once per agent, preventing file-descriptor exhaustion (`EMFILE`) that disposed bundle-mcp processes and stalled sessions on multi-agent gateways. Fixes [#&#8203;84968](https://github.com/openclaw/openclaw/issues/84968). ([#&#8203;85130](https://github.com/openclaw/openclaw/issues/85130)) Thanks [@&#8203;openperf](https://github.com/openperf).
- Release/security: keep generated npm shrinkwrap package versions inside the pnpm lock graph so published package locks cannot bypass pnpm dependency age and override policy.
- Cron: honor `cron.retry.retryOn: ["network"]` for common network error codes such as `EAI_AGAIN`, `EHOSTUNREACH`, and `ENETUNREACH`.
- Gateway chat: broadcast returned agent-run error payloads after an agent starts so ACP/WebChat clients receive terminal idle-timeout errors. Fixes [#&#8203;84945](https://github.com/openclaw/openclaw/issues/84945).
- Gateway chat display: preserve OpenAI-compatible `prompt_tokens`, `completion_tokens`, and `total_tokens` usage fields in sanitized chat history so llama.cpp sessions keep context counts. Fixes [#&#8203;77992](https://github.com/openclaw/openclaw/issues/77992). Thanks [@&#8203;MarTT79](https://github.com/MarTT79).
- Dashboard/CLI: allow macOS browser launching through `open` even when SSH environment variables are present, while preserving Linux SSH no-display protection. Fixes [#&#8203;67088](https://github.com/openclaw/openclaw/issues/67088). Thanks [@&#8203;theglove44](https://github.com/theglove44).
- Codex app-server: keep native web search observations out of mirrored chat transcripts while preserving tool progress telemetry. Fixes [#&#8203;85109](https://github.com/openclaw/openclaw/issues/85109). Thanks [@&#8203;ugitmebaby](https://github.com/ugitmebaby).
- OpenCode Go: strip unsupported Kimi reasoning replay fields before provider requests so repeated `kimi-k2.6` turns do not fail schema validation. Fixes [#&#8203;83812](https://github.com/openclaw/openclaw/issues/83812). Thanks [@&#8203;Sleeck](https://github.com/Sleeck).
- Browser/CDP: add a WSL2 portproxy self-loop hint when Chrome DevTools endpoints accept connections but return an empty HTTP reply. Fixes [#&#8203;59209](https://github.com/openclaw/openclaw/issues/59209). Thanks [@&#8203;Owlock](https://github.com/Owlock).
- Agents/OpenAI: preserve structured provider error code, type, and redacted body metadata on boundary-aware transport failures.
- Doctor/Codex: point native Codex asset warnings at the canonical `openclaw migrate plan codex` preview command. Fixes [#&#8203;84948](https://github.com/openclaw/openclaw/issues/84948). Thanks [@&#8203;markoa](https://github.com/markoa).
- CLI/models: make `capability model auth logout --agent` remove auth profiles from the selected non-default agent store. Fixes [#&#8203;85092](https://github.com/openclaw/openclaw/issues/85092). Thanks [@&#8203;islandpreneur007](https://github.com/islandpreneur007).
- Gateway/models: reuse prepared provider auth metadata during model-listing auth checks so repeated lookups avoid broad plugin discovery while preserving synthetic local auth.
- CLI/status: suppress systemd user-service setup hints when `openclaw status --deep` can already reach a running Gateway RPC service. Fixes [#&#8203;85094](https://github.com/openclaw/openclaw/issues/85094). Thanks [@&#8203;islandpreneur007](https://github.com/islandpreneur007).
- CLI/devices: recover local approval when a same-device repair request replaces the request ID being approved.
- CLI/agents: retry transient normal-close Gateway handshakes before falling back to embedded `openclaw agent` execution.
- CLI/update: keep managed Gateway service stop/restart status lines out of `openclaw update --json` stdout so package-update automation can parse the JSON payload.
- Plugins: resolve OpenClaw plugin SDK subpaths for native external plugin runtimes without mutating package installs or broadening process-wide module resolution.
- Agents/OpenAI: preserve Responses and Chat Completions `reasoning_tokens` usage metadata without double-counting it in aggregate output tokens. ([#&#8203;85319](https://github.com/openclaw/openclaw/issues/85319))
- Control UI/chat: convert pasted `data:image/...;base64,...` clipboard text into an image attachment instead of dumping the payload into the composer. Fixes [#&#8203;62604](https://github.com/openclaw/openclaw/issues/62604). Thanks [@&#8203;cpwilhelmi](https://github.com/cpwilhelmi).
- Providers/Gemini: strip fractional seconds from web-search time range filters so Gemini accepts freshness-bound search requests. ([#&#8203;85071](https://github.com/openclaw/openclaw/issues/85071)) Thanks [@&#8203;Noerr](https://github.com/Noerr).
- OpenAI Codex: preserve image input support for sparse `openai-codex/gpt-5.5` catalog rows. ([#&#8203;85095](https://github.com/openclaw/openclaw/issues/85095)) Thanks [@&#8203;sercada](https://github.com/sercada).
- CLI/models: add a piped or pasted API-key path for OpenAI Codex auth and warn when API keys are pasted into token-mode auth. ([#&#8203;85533](https://github.com/openclaw/openclaw/issues/85533)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Telegram: dead-letter missing-harness isolated ingress failures so a poisoned spooled update no longer blocks later same-lane messages. Fixes [#&#8203;85470](https://github.com/openclaw/openclaw/issues/85470). ([#&#8203;85605](https://github.com/openclaw/openclaw/issues/85605)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Plugins/discovery: strip `-plugin` package suffixes when deriving plugin id hints so package names line up with manifest ids. ([#&#8203;85170](https://github.com/openclaw/openclaw/issues/85170)) Thanks [@&#8203;JulyanXu](https://github.com/JulyanXu).
- Tlon: stop advertising a non-existent agent tool contract in the plugin manifest.
- Telegram: preserve fenced code block languages through Markdown rendering so Telegram receives `language-*` code classes. ([#&#8203;85209](https://github.com/openclaw/openclaw/issues/85209)) Thanks [@&#8203;leno23](https://github.com/leno23).
- Windows installer: run npm and Corepack command shims from a Windows-local directory so installs launched from WSL2 UNC paths do not fail before OpenClaw is installed.
- Windows updates: roll back git-backed updates to the previous checkout when dependency install, build, UI build, or doctor repair fails.
- Windows installer: persist user-local portable Git on PATH and activate the repo-pinned pnpm version for git-backed installs and updates.
- Windows installer: bootstrap a user-local portable Node.js when native Windows has no Node and no winget, Chocolatey, or Scoop, so first-run installs can continue on raw hosts.
- Windows installer: extract the downloaded portable Node.js directory with native `tar` before falling back to .NET zip extraction, avoiding PowerShell 5.1 archive and path-length failures.
- fix(integrations): enforce channel read target allowlists \[AI]. ([#&#8203;84982](https://github.com/openclaw/openclaw/issues/84982)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Agents/heartbeat: route single-owner `session.dmScope=main` direct-message exec and cron event wakes back to the agent main session so async completions no longer strand context in orphan direct-DM queues. Fixes [#&#8203;71581](https://github.com/openclaw/openclaw/issues/71581). ([#&#8203;83743](https://github.com/openclaw/openclaw/issues/83743)) Thanks [@&#8203;Kaspre](https://github.com/Kaspre).
- Agents/code-mode: expose outer code-mode `exec` source through the `command` hook alias with `toolKind`/`toolInputKind` discriminators so exec-shaped policies can distinguish code-mode cells. ([#&#8203;83483](https://github.com/openclaw/openclaw/issues/83483)) Thanks [@&#8203;Kaspre](https://github.com/Kaspre).
- Agents/code mode: return structured timeout and runtime-unavailable error codes for known worker failures. Fixes [#&#8203;83389](https://github.com/openclaw/openclaw/issues/83389). ([#&#8203;83444](https://github.com/openclaw/openclaw/issues/83444)) Thanks [@&#8203;Kaspre](https://github.com/Kaspre).
- QA-Lab: isolate multi-scenario suite workers when scenarios need startup config patches, preventing message-routing config from leaking into unrelated scenarios.
- QA-Lab: make the commitments heartbeat-target-none scenario request an immediate heartbeat instead of waiting for the next scheduled heartbeat.
- Codex/Plugin SDK: deliver Codex-native subagent completions through a generic harness task runtime so harness-backed plugins can mirror durable task lifecycle and completion delivery without Codex-specific SDK imports. ([#&#8203;83445](https://github.com/openclaw/openclaw/issues/83445)) Thanks [@&#8203;bryanpearson](https://github.com/bryanpearson).
- Gateway CLI: surface local post-challenge connect assembly failures immediately instead of waiting for the wrapper timeout. Fixes [#&#8203;68944](https://github.com/openclaw/openclaw/issues/68944). ([#&#8203;85253](https://github.com/openclaw/openclaw/issues/85253)) Thanks [@&#8203;samzong](https://github.com/samzong).
- Messages: strip unsupported web-search citation control markers from outbound replies before they reach WebChat or external channels. Fixes [#&#8203;85193](https://github.com/openclaw/openclaw/issues/85193). ([#&#8203;85204](https://github.com/openclaw/openclaw/issues/85204)) Thanks [@&#8203;neeravmakwana](https://github.com/neeravmakwana).
- Agents/exec: treat denied exec approvals as terminal instead of feeding them back into agent follow-up work, and recognize Chinese stop phrases in abort handling. Fixes [#&#8203;69386](https://github.com/openclaw/openclaw/issues/69386). ([#&#8203;85194](https://github.com/openclaw/openclaw/issues/85194)) Thanks [@&#8203;samzong](https://github.com/samzong).
- CLI/agents: abort accepted Gateway-backed `openclaw agent` runs on SIGINT/SIGTERM so cron and supervisor timeouts do not leave remote agent work alive. Fixes [#&#8203;71710](https://github.com/openclaw/openclaw/issues/71710). ([#&#8203;84381](https://github.com/openclaw/openclaw/issues/84381)) Thanks [@&#8203;Kaspre](https://github.com/Kaspre).
- Codex app-server: retry replay-safe stdio client-close turns once using structured failure metadata, while surfacing idle `turn/completed` timeouts instead of blindly replaying active shared-server turns. Thanks [@&#8203;VACInc](https://github.com/VACInc).
- Codex app-server: reject command overrides that embed Node or package-manager arguments and point users to `appServer.args`, so Windows startup avoids shell parsing failures. ([#&#8203;84417](https://github.com/openclaw/openclaw/issues/84417)) Thanks [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Agents/Copilot: drop unsafe GitHub Copilot Responses reasoning replay items before send so Telegram direct sessions no longer fail on overlong replay IDs. Fixes [#&#8203;85197](https://github.com/openclaw/openclaw/issues/85197). ([#&#8203;85198](https://github.com/openclaw/openclaw/issues/85198)) Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- UI: add accessible tooltips to the topbar color-mode buttons so System, Light, and Dark choices are labeled on hover and focus. ([#&#8203;85227](https://github.com/openclaw/openclaw/issues/85227)) Thanks [@&#8203;amknight](https://github.com/amknight).
- fix: constrain Windows task script names \[AI]. ([#&#8203;85064](https://github.com/openclaw/openclaw/issues/85064)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Control UI: keep the chat session picker from hiding older or cross-agent configured conversations while preserving the bounded configured-agent refresh. ([#&#8203;85211](https://github.com/openclaw/openclaw/issues/85211)) Thanks [@&#8203;amknight](https://github.com/amknight).
- Agents/Anthropic: preserve unsafe integer tool-call input values in streamed Anthropic tool-use JSON, preventing Discord-style IDs from being rounded before dispatch. Fixes [#&#8203;47229](https://github.com/openclaw/openclaw/issues/47229). ([#&#8203;83063](https://github.com/openclaw/openclaw/issues/83063)) Thanks [@&#8203;leno23](https://github.com/leno23).
- Agents/Codex: estimate tool-heavy prompt pressure at the LLM boundary before provider submission, so persistent sessions compact before overflowing context windows. ([#&#8203;85541](https://github.com/openclaw/openclaw/issues/85541)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev) and [@&#8203;joshavant](https://github.com/joshavant).
- Agents/hooks: wait for local one-shot CLI and Codex `agent_end` plugin hooks before process cleanup so terminal observability flushes reliably. ([#&#8203;85007](https://github.com/openclaw/openclaw/issues/85007))
- Providers/Google: preserve Gemini 3 cron `thinkingDefault: "low"` when stale catalog metadata says `reasoning:false`, so scheduled runs keep provider-supported thinking instead of downgrading to off. ([#&#8203;85185](https://github.com/openclaw/openclaw/issues/85185)) Thanks [@&#8203;neeravmakwana](https://github.com/neeravmakwana).
- CLI/agents: allow `openclaw agent --session-key` to target explicit session keys, including agent-scoped legacy keys. ([#&#8203;85121](https://github.com/openclaw/openclaw/issues/85121)) Thanks [@&#8203;Kaspre](https://github.com/Kaspre).
- Auto-reply/ACP: wait for same-channel block reply delivery before starting tool work, while still honoring ACP dispatch aborts so stopped turns do not wait on slow channel sends. ([#&#8203;83722](https://github.com/openclaw/openclaw/issues/83722)) Thanks [@&#8203;IWhatsskill](https://github.com/IWhatsskill).
- Codex/ACP: mark required child-run completions that only report progress, omit a final deliverable, or fail requester delivery as blocked while preserving real final reports. ([#&#8203;85110](https://github.com/openclaw/openclaw/issues/85110)) Thanks [@&#8203;IWhatsskill](https://github.com/IWhatsskill).
- Channels: treat bare abort messages such as `stop`, `abort`, and `wait` as immediate control commands in inbound debounce paths so stop requests are not delayed behind pending message coalescing. ([#&#8203;83348](https://github.com/openclaw/openclaw/issues/83348)) Thanks [@&#8203;IWhatsskill](https://github.com/IWhatsskill).
- Channels/message tool: resolve configured external channel plugins during in-agent channel selection, so `openclaw agent --local` message-tool sends no longer report an available channel as unavailable. ([#&#8203;85022](https://github.com/openclaw/openclaw/issues/85022)) Thanks [@&#8203;Kaspre](https://github.com/Kaspre).
- Agents/heartbeat: honor group/channel `message_tool` visible-reply policy and model-specific Codex runtime config for scheduled heartbeat runs, so failed internal tool output stays private. Fixes [#&#8203;85310](https://github.com/openclaw/openclaw/issues/85310). ([#&#8203;85357](https://github.com/openclaw/openclaw/issues/85357)) Thanks [@&#8203;neeravmakwana](https://github.com/neeravmakwana).
- Gateway/ACP: close child ACP sessions spawned via `sessions_spawn` when their parent session is reset or deleted, instead of leaving orphaned `claude-agent-acp` processes that accumulate and exhaust memory. Fixes [#&#8203;68916](https://github.com/openclaw/openclaw/issues/68916). ([#&#8203;85190](https://github.com/openclaw/openclaw/issues/85190)) Thanks [@&#8203;openperf](https://github.com/openperf).
- Codex app-server: block native execution paths when OpenClaw exec resolves to a node host while preserving the first-party CLI node binding path. Fixes [#&#8203;85012](https://github.com/openclaw/openclaw/issues/85012). ([#&#8203;85534](https://github.com/openclaw/openclaw/issues/85534)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Diagnostics: bound cleanup timeout detail logs, emit drop summaries when async diagnostic bursts exceed the queue cap, and surface async queue drops through diagnostic telemetry.
- Agents/subagents: surface blocked child-run completions as errors instead of successful subagent finishes. ([#&#8203;80886](https://github.com/openclaw/openclaw/issues/80886)) Thanks [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Context engines: fail closed with a descriptive error when the selected agent runtime cannot satisfy declared context-engine host requirements.
- Agents/Pi: treat accepted embedded `sessions_spawn` child-session handoffs as terminal progress so parent turns no longer report false non-deliverable failures. ([#&#8203;85054](https://github.com/openclaw/openclaw/issues/85054)) Thanks [@&#8203;samzong](https://github.com/samzong).
- CLI/models: resolve `openclaw models set` aliases from the runtime config while keeping authored aliases ahead of runtime-only defaults. ([#&#8203;83262](https://github.com/openclaw/openclaw/issues/83262)) Thanks [@&#8203;IWhatsskill](https://github.com/IWhatsskill).
- Doctor: show personal Codex CLI asset notices as info instead of warnings. Fixes [#&#8203;84859](https://github.com/openclaw/openclaw/issues/84859).
- WhatsApp: update Baileys to `7.0.0-rc13` and drop the obsolete logger type patch.
- CLI/update: pre-pack GitHub/git package update targets before the staged npm install, restoring `openclaw update --tag main` for one-off package updates. ([#&#8203;81296](https://github.com/openclaw/openclaw/issues/81296)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Gateway: mirror successful same-source message-tool sends into session transcripts so delivered replies stay in later history/context. ([#&#8203;84837](https://github.com/openclaw/openclaw/issues/84837)) Thanks [@&#8203;iFiras-Max1](https://github.com/iFiras-Max1).
- Media generation: keep image, music, and video completion delivery from duplicating or losing task ownership when generated media finishes through active session replies. ([#&#8203;84006](https://github.com/openclaw/openclaw/issues/84006)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Infra/json: retry transient `File changed during read` races while loading JSON state so config and state reads recover instead of failing the turn. ([#&#8203;84285](https://github.com/openclaw/openclaw/issues/84285))
- Plugins/providers: fail closed for workspace provider plugins during setup-mode discovery unless explicitly trusted, preventing untrusted workspace plugin code from running during provider setup. ([#&#8203;81069](https://github.com/openclaw/openclaw/issues/81069)) Thanks [@&#8203;mmaps](https://github.com/mmaps).
- Providers/Ollama: resolve configured Ollama Cloud `OLLAMA_API_KEY` markers to the real discovery key so cloud provider entries keep authenticated model catalog access. ([#&#8203;85037](https://github.com/openclaw/openclaw/issues/85037))
- Discord: keep persistent component registry fallback warnings actionable by forwarding structured error and cause metadata through the runtime logger. Fixes [#&#8203;84185](https://github.com/openclaw/openclaw/issues/84185). ([#&#8203;84190](https://github.com/openclaw/openclaw/issues/84190)) Thanks [@&#8203;100menotu001](https://github.com/100menotu001).
- Gateway/sessions: preserve compatible session auth profile overrides when switching models within the same provider, including provider-auth aliases. Fixes [#&#8203;81837](https://github.com/openclaw/openclaw/issues/81837). ([#&#8203;81886](https://github.com/openclaw/openclaw/issues/81886)) Thanks [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Gateway/status: surface inbound delivery telemetry counters and transport-liveness warnings in `openclaw status --all`. Fixes [#&#8203;49577](https://github.com/openclaw/openclaw/issues/49577). ([#&#8203;72724](https://github.com/openclaw/openclaw/issues/72724))
- Docker: prune package-excluded plugin source workspaces and dependency closures so runtime images do not keep packages for plugins that were not opted in.
- Providers/Ollama: treat Docker/OrbStack host aliases as local Ollama endpoints so `ollama-local` marker auth works when OpenClaw runs inside a VM/container and Ollama runs on the host. Fixes [#&#8203;84875](https://github.com/openclaw/openclaw/issues/84875).
- QA-Lab: keep explicitly searchable/deferred OpenClaw dynamic tool rows report-only by default so tool-coverage gates do not treat mock discovery gaps as hard product failures. ([#&#8203;80319](https://github.com/openclaw/openclaw/issues/80319)) Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- Agents/config: keep non-Google provider model refs from being rewritten by Google Gemini preview-id normalization. ([#&#8203;84762](https://github.com/openclaw/openclaw/issues/84762)) Thanks [@&#8203;zhangguiping-xydt](https://github.com/zhangguiping-xydt).
- Installer: require a real controlling terminal before launching onboarding so headless `curl | bash` installs finish cleanly after installing the CLI.
- Agents/Codex: promote a completed final assistant response when a prompt timeout races Codex app-server completion instead of returning an empty timeout envelope. Refs [#&#8203;84516](https://github.com/openclaw/openclaw/issues/84516).
- Codex app-server: keep interrupted turn statuses from being treated as OpenClaw aborts by themselves, so tool-only turns remain eligible for no-visible-answer recovery. Fixes [#&#8203;84492](https://github.com/openclaw/openclaw/issues/84492).
- Agents: cap heartbeat model bleed context hints by the stored session window when runtime model metadata is unavailable, so overflow recovery advice does not suggest a larger window than the active session actually has.
- Control UI/Web Push: use `https://openclaw.ai` as the generated default VAPID subject instead of the old localhost mailbox so iOS PWA push setup uses an Apple-acceptable subject when `OPENCLAW_VAPID_SUBJECT` is unset. Fixes [#&#8203;83134](https://github.com/openclaw/openclaw/issues/83134). ([#&#8203;83317](https://github.com/openclaw/openclaw/issues/83317)) Thanks [@&#8203;IWhatsskill](https://github.com/IWhatsskill).
- Control UI: distinguish inherited thinking-off settings from explicit Off selections so the thinking selector no longer shows two identical Off rows. ([#&#8203;85223](https://github.com/openclaw/openclaw/issues/85223)) Thanks [@&#8203;amknight](https://github.com/amknight).
- Agents/Pi: keep embedded session transcript writes from tripping false takeover detection after packaged npm onboarding agent turns.
- Codex/TUI: surface Codex-native post-turn compaction failures instead of continuing uncompacted, and keep successful native compaction serialized before local idle/next-turn handling. Fixes [#&#8203;84305](https://github.com/openclaw/openclaw/issues/84305). ([#&#8203;85160](https://github.com/openclaw/openclaw/issues/85160)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Memory/search: stop recall tracking from writing dreaming side-effect artifacts when `dreaming.enabled=false`, while preserving normal search results. Fixes [#&#8203;84436](https://github.com/openclaw/openclaw/issues/84436). ([#&#8203;84444](https://github.com/openclaw/openclaw/issues/84444)) Thanks [@&#8203;NianJiuZst](https://github.com/NianJiuZst).
- Diffs: render viewer toolbar icons from a closed icon-name map instead of HTML strings, removing the toolbar icon XSS sink. ([#&#8203;83955](https://github.com/openclaw/openclaw/issues/83955)) Thanks [@&#8203;tanshanshan](https://github.com/tanshanshan).
- QA: keep `pnpm qa:e2e` self-check runs inside the private QA runtime envelope even when inherited shell env disables bundled plugins.
- fix(config): validate browser sandbox bind sources \[AI]. ([#&#8203;84799](https://github.com/openclaw/openclaw/issues/84799)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- doctor: constrain legacy plugin cleanup paths \[AI]. ([#&#8203;84801](https://github.com/openclaw/openclaw/issues/84801)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Update/doctor: prune stale local bundled plugin install records that point at old compiled bundled output so current bundled plugin schemas win after upgrade. ([#&#8203;84863](https://github.com/openclaw/openclaw/issues/84863)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Providers/Ollama: preserve native Ollama tool-call IDs across assistant replay so Gemini over Ollama Cloud can keep its hidden function-call thought-signature handle.
- Discord: keep session recovery and `/stop` abort ownership on the source dispatch lane while bound ACP turns continue routing to their target session, so stalled pre-run work and late replies are cleared instead of leaking after stop. Fixes [#&#8203;84477](https://github.com/openclaw/openclaw/issues/84477). ([#&#8203;85100](https://github.com/openclaw/openclaw/issues/85100)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Codex app-server: mark missing turn completion after observed execution as replay-unsafe and release the session so follow-up turns can run. Fixes [#&#8203;84076](https://github.com/openclaw/openclaw/issues/84076). ([#&#8203;85107](https://github.com/openclaw/openclaw/issues/85107)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Codex app-server: give visible `message` dynamic tool sends a longer timeout budget so slow channel delivery can return its own result or error instead of hitting the 30-second Codex wrapper. ([#&#8203;85216](https://github.com/openclaw/openclaw/issues/85216)) Thanks [@&#8203;amknight](https://github.com/amknight).
- Codex app-server: add a dedicated post-tool raw assistant completion idle timeout config so trusted heavy turns can wait longer after tool handoff without weakening final assistant release.
- Matrix: keep explicitly configured two-person rooms on the room route before stale `m.direct` or strict two-member DM fallback can bypass mention gating. Fixes [#&#8203;85017](https://github.com/openclaw/openclaw/issues/85017). ([#&#8203;85137](https://github.com/openclaw/openclaw/issues/85137)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Agents/subagents: require explicit subagent allowlist targets to be configured agents so stale deleted-agent ids are omitted from `agents_list` and rejected by `sessions_spawn`. Fixes [#&#8203;84811](https://github.com/openclaw/openclaw/issues/84811). ([#&#8203;85154](https://github.com/openclaw/openclaw/issues/85154)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- PDF tool: time out idle remote PDF body reads after 120 seconds so stalled remote documents return an error instead of wedging the session. Fixes [#&#8203;68649](https://github.com/openclaw/openclaw/issues/68649). ([#&#8203;84768](https://github.com/openclaw/openclaw/issues/84768)) Thanks [@&#8203;luoyanglang](https://github.com/luoyanglang).
- Diagnostics/OpenTelemetry plugin: suppress handled OTLP exporter promise rejections so collector shutdowns no longer crash the Gateway. ([#&#8203;81085](https://github.com/openclaw/openclaw/issues/81085)) Thanks [@&#8203;luoyanglang](https://github.com/luoyanglang).
- Agents/exec: omit raw command text and env values from denied exec failure logs while keeping safe correlation metadata. Fixes [#&#8203;85049](https://github.com/openclaw/openclaw/issues/85049). ([#&#8203;85140](https://github.com/openclaw/openclaw/issues/85140)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Media/audio: skip empty structured sherpa-onnx transcripts instead of treating the raw JSON payload as spoken text. ([#&#8203;84667](https://github.com/openclaw/openclaw/issues/84667)) Thanks [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Agents/exec: preserve inherited XDG base-directory environment values for subprocesses while still rejecting agent-supplied XDG overrides. Fixes [#&#8203;84854](https://github.com/openclaw/openclaw/issues/84854). ([#&#8203;85139](https://github.com/openclaw/openclaw/issues/85139)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Node/Linux: keep `OPENCLAW_GATEWAY_TOKEN` out of generated systemd unit files by writing node service token values to a node-specific env file. ([#&#8203;84408](https://github.com/openclaw/openclaw/issues/84408))
- Memory-core/dreaming: reuse stable narrative subagent session keys per workspace and phase while keeping per-run idempotency and bounded cleanup, so stale `dreaming-narrative-*` sessions do not accumulate. Fixes [#&#8203;68252](https://github.com/openclaw/openclaw/issues/68252), [#&#8203;69187](https://github.com/openclaw/openclaw/issues/69187), and [#&#8203;70402](https://github.com/openclaw/openclaw/issues/70402). ([#&#8203;70464](https://github.com/openclaw/openclaw/issues/70464)) Thanks [@&#8203;chiyouYCH](https://github.com/chiyouYCH).
- Trajectory/support: tol…
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
Summary:
- The PR rejects Codex app-server command overrides that embed Node/package-manager inline arguments, adds matching doctor diagnostics, regression tests, and a changelog entry.
- Reproducibility: yes. for the scoped malformed override path: current main passes the combined command strin ... ix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Validate Codex app-server command overrides

Validation:
- ClawSweeper review passed for head 966bcd6.
- Required merge gates passed before the squash merge.

Prepared head SHA: 966bcd6
Review: openclaw#84417 (comment)

Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
Summary:
- The PR rejects Codex app-server command overrides that embed Node/package-manager inline arguments, adds matching doctor diagnostics, regression tests, and a changelog entry.
- Reproducibility: yes. for the scoped malformed override path: current main passes the combined command strin ... ix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Validate Codex app-server command overrides

Validation:
- ClawSweeper review passed for head 966bcd6.
- Required merge gates passed before the squash merge.

Prepared head SHA: 966bcd6
Review: openclaw#84417 (comment)

Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
Summary:
- The PR rejects Codex app-server command overrides that embed Node/package-manager inline arguments, adds matching doctor diagnostics, regression tests, and a changelog entry.
- Reproducibility: yes. for the scoped malformed override path: current main passes the combined command strin ... ix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Validate Codex app-server command overrides

Validation:
- ClawSweeper review passed for head 966bcd6.
- Required merge gates passed before the squash merge.

Prepared head SHA: 966bcd6
Review: openclaw#84417 (comment)

Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 24, 2026
Summary:
- The PR rejects Codex app-server command overrides that embed Node/package-manager inline arguments, adds matching doctor diagnostics, regression tests, and a changelog entry.
- Reproducibility: yes. for the scoped malformed override path: current main passes the combined command strin ... ix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Validate Codex app-server command overrides

Validation:
- ClawSweeper review passed for head 966bcd6.
- Required merge gates passed before the squash merge.

Prepared head SHA: 966bcd6
Review: openclaw#84417 (comment)

Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
galiniliev pushed a commit to galiniliev/openclaw that referenced this pull request May 25, 2026
Summary:
- The PR rejects Codex app-server command overrides that embed Node/package-manager inline arguments, adds matching doctor diagnostics, regression tests, and a changelog entry.
- Reproducibility: yes. for the scoped malformed override path: current main passes the combined command strin ... ix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Validate Codex app-server command overrides

Validation:
- ClawSweeper review passed for head 966bcd6.
- Required merge gates passed before the squash merge.

Prepared head SHA: 966bcd6
Review: openclaw#84417 (comment)

Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
Summary:
- The PR rejects Codex app-server command overrides that embed Node/package-manager inline arguments, adds matching doctor diagnostics, regression tests, and a changelog entry.
- Reproducibility: yes. for the scoped malformed override path: current main passes the combined command strin ... ix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Validate Codex app-server command overrides

Validation:
- ClawSweeper review passed for head 966bcd6.
- Required merge gates passed before the squash merge.

Prepared head SHA: 966bcd6
Review: openclaw#84417 (comment)

Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
Summary:
- The PR rejects Codex app-server command overrides that embed Node/package-manager inline arguments, adds matching doctor diagnostics, regression tests, and a changelog entry.
- Reproducibility: yes. for the scoped malformed override path: current main passes the combined command strin ... ix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Validate Codex app-server command overrides

Validation:
- ClawSweeper review passed for head 966bcd6.
- Required merge gates passed before the squash merge.

Prepared head SHA: 966bcd6
Review: openclaw#84417 (comment)

Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
Summary:
- The PR rejects Codex app-server command overrides that embed Node/package-manager inline arguments, adds matching doctor diagnostics, regression tests, and a changelog entry.
- Reproducibility: yes. for the scoped malformed override path: current main passes the combined command strin ... ix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Validate Codex app-server command overrides

Validation:
- ClawSweeper review passed for head 966bcd6.
- Required merge gates passed before the squash merge.

Prepared head SHA: 966bcd6
Review: openclaw#84417 (comment)

Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
jameslcowan pushed a commit to jameslcowan/openclaw that referenced this pull request Jun 2, 2026
Summary:
- The PR rejects Codex app-server command overrides that embed Node/package-manager inline arguments, adds matching doctor diagnostics, regression tests, and a changelog entry.
- Reproducibility: yes. for the scoped malformed override path: current main passes the combined command strin ... ix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Validate Codex app-server command overrides

Validation:
- ClawSweeper review passed for head 966bcd6.
- Required merge gates passed before the squash merge.

Prepared head SHA: 966bcd6
Review: openclaw#84417 (comment)

Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
Summary:
- The PR rejects Codex app-server command overrides that embed Node/package-manager inline arguments, adds matching doctor diagnostics, regression tests, and a changelog entry.
- Reproducibility: yes. for the scoped malformed override path: current main passes the combined command strin ... ix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Validate Codex app-server command overrides

Validation:
- ClawSweeper review passed for head 966bcd6.
- Required merge gates passed before the squash merge.

Prepared head SHA: 966bcd6
Review: openclaw#84417 (comment)

Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
Summary:
- The PR rejects Codex app-server command overrides that embed Node/package-manager inline arguments, adds matching doctor diagnostics, regression tests, and a changelog entry.
- Reproducibility: yes. for the scoped malformed override path: current main passes the combined command strin ... ix resolver/doctor live output. I did not establish a live Windows npm-global managed-startup reproduction.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Validate Codex app-server command overrides

Validation:
- ClawSweeper review passed for head 966bcd6.
- Required merge gates passed before the squash merge.

Prepared head SHA: 966bcd6
Review: openclaw#84417 (comment)

Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clawsweeper:automerge Maintainer opted this PR into bounded ClawSweeper-reviewed automerge commands Command implementations extensions: codex merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P1 High-priority user-facing bug, regression, or broken workflow. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: M status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Codex Harness Startup Failures on Windows (OpenClaw 2026.5.18)

2 participants