Validate Codex app-server command overrides#84417
Conversation
|
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
Summary 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 Rank-up moves:
What the crustacean ranks mean
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 Risk before merge
Maintainer options:
Next step before merge Security Review detailsBest 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 Label changes:
Label justifications:
What I checked:
Likely related people:
Codex review notes: model gpt-5.5, reasoning high; reviewed against e32e0f3f7f3e. |
|
ClawSweeper PR egg ✨ Hatched: 🥚 common Velvet Branchling Hatch commandComment Hatchability rules:
Rarity: 🥚 common. What is this egg doing here?
|
|
@clawsweeper merge |
|
@clawsweeper automerge |
562c350 to
774392d
Compare
|
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- |
|
@clawsweeper automerge |
|
🦞✅ Source: What merged:
Automerge notes:
The automerge loop is complete. Automerge progress:
|
774392d to
966bcd6
Compare
…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 [@​NorseGaud](https://github.com/NorseGaud), [@​yudistiraashadi](https://github.com/yudistiraashadi), [@​huangqian8](https://github.com/huangqian8), [@​VibhorGautam](https://github.com/VibhorGautam), [@​maweibin](https://github.com/maweibin), [@​tianxingleo](https://github.com/tianxingleo), [@​IgnacioPro](https://github.com/IgnacioPro), and [@​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 [@​aniruddhaadak80](https://github.com/aniruddhaadak80), [@​leno23](https://github.com/leno23), [@​TomDjerry](https://github.com/TomDjerry), [@​matthewxmurphy](https://github.com/matthewxmurphy), [@​vincentkoc](https://github.com/vincentkoc), and [@​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 [@​deepujain](https://github.com/deepujain), [@​Zacxxx](https://github.com/Zacxxx), [@​Jah-yee](https://github.com/Jah-yee), [@​neyric](https://github.com/neyric), [@​usimic](https://github.com/usimic), [@​Renu-Cybe](https://github.com/Renu-Cybe), [@​BigUncle](https://github.com/BigUncle), and [@​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 [@​ayesha-aziz123](https://github.com/ayesha-aziz123), [@​dishraters](https://github.com/dishraters), [@​hougangdev](https://github.com/hougangdev), and [@​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 [@​Quratulain-bilal](https://github.com/Quratulain-bilal), [@​mbelinky](https://github.com/mbelinky), [@​Mickey-](https://github.com/Mickey-), [@​vancece](https://github.com/vancece), [@​xenouzik](https://github.com/xenouzik), [@​posigit](https://github.com/posigit), [@​surlymochan](https://github.com/surlymochan), [@​janaka](https://github.com/janaka), and [@​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 [@​itskai-dev](https://github.com/itskai-dev), [@​gwh7078](https://github.com/gwh7078), [@​longstoryscott](https://github.com/longstoryscott), [@​MoeJaberr](https://github.com/MoeJaberr), and [@​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 [@​BobDu](https://github.com/BobDu), [@​alitariksahin](https://github.com/alitariksahin), [@​Jefsky](https://github.com/Jefsky), [@​musaabhasan](https://github.com/musaabhasan), [@​OmerZeyveli](https://github.com/OmerZeyveli), [@​leno23](https://github.com/leno23), [@​WuKongAI-CMU](https://github.com/WuKongAI-CMU), [@​luoyanglang](https://github.com/luoyanglang), and [@​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 [@​nielskaspers](https://github.com/nielskaspers), [@​cosmopolitan033](https://github.com/cosmopolitan033), [@​drclaw-iq](https://github.com/drclaw-iq), [@​alexgduarte](https://github.com/alexgduarte), [@​zccyman](https://github.com/zccyman), [@​chengoak](https://github.com/chengoak), and [@​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 [@​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. ([#​85283](https://github.com/openclaw/openclaw/issues/85283)) Thanks [@​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`. ([#​85302](https://github.com/openclaw/openclaw/issues/85302)) Thanks [@​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. ([#​85237](https://github.com/openclaw/openclaw/issues/85237)) Thanks [@​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. ([#​72343](https://github.com/openclaw/openclaw/issues/72343)) Thanks [@​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. ([#​84189](https://github.com/openclaw/openclaw/issues/84189)) Thanks [@​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. ([#​85182](https://github.com/openclaw/openclaw/issues/85182)) Thanks [@​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. ([#​84693](https://github.com/openclaw/openclaw/issues/84693)) Thanks [@​efpiva](https://github.com/efpiva). - Gateway/plugins: reuse a compatible Gateway startup plugin registry during dispatch so safe plugin dispatches avoid redundant registry loading. ([#​84324](https://github.com/openclaw/openclaw/issues/84324)) Thanks [@​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. ([#​80323](https://github.com/openclaw/openclaw/issues/80323), refs [#​80176](https://github.com/openclaw/openclaw/issues/80176)) Thanks [@​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. ([#​80395](https://github.com/openclaw/openclaw/issues/80395)) Thanks [@​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. ([#​80323](https://github.com/openclaw/openclaw/issues/80323)) Thanks [@​100yenadmin](https://github.com/100yenadmin). - QA-Lab: tag gateway restart recovery and streaming final-integrity scenarios as live-only runtime parity lanes. ([#​80323](https://github.com/openclaw/openclaw/issues/80323)) Thanks [@​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. ([#​83872](https://github.com/openclaw/openclaw/issues/83872)) Thanks [@​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. ([#​80323](https://github.com/openclaw/openclaw/issues/80323), refs [#​80174](https://github.com/openclaw/openclaw/issues/80174)) Thanks [@​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. ([#​84816](https://github.com/openclaw/openclaw/issues/84816)) Thanks [@​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. ([#​84493](https://github.com/openclaw/openclaw/issues/84493)) Thanks [@​frankekn](https://github.com/frankekn). ##### Fixes - WebChat: summarize internal message-tool source replies so tool cards no longer duplicate the visible reply body. ([#​84773](https://github.com/openclaw/openclaw/issues/84773)) Thanks [@​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. ([#​85256](https://github.com/openclaw/openclaw/issues/85256), fixes [#​63819](https://github.com/openclaw/openclaw/issues/63819)) Thanks [@​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. ([#​83255](https://github.com/openclaw/openclaw/issues/83255)) Thanks [@​lightcap](https://github.com/lightcap). - Ollama: bypass the managed proxy for configured local embedding origins while keeping SSRF guardrails on unconfigured targets. Thanks [@​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. ([#​85835](https://github.com/openclaw/openclaw/issues/85835)) Thanks [@​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. ([#​85652](https://github.com/openclaw/openclaw/issues/85652)) Thanks [@​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. ([#​85764](https://github.com/openclaw/openclaw/issues/85764)) Thanks [@​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 [#​82215](https://github.com/openclaw/openclaw/issues/82215). Thanks [@​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. ([#​85488](https://github.com/openclaw/openclaw/issues/85488)) Thanks [@​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. ([#​85032](https://github.com/openclaw/openclaw/issues/85032)) Thanks [@​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. ([#​85549](https://github.com/openclaw/openclaw/issues/85549)) Thanks [@​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. ([#​85619](https://github.com/openclaw/openclaw/issues/85619)) Thanks [@​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. ([#​85603](https://github.com/openclaw/openclaw/issues/85603)) Thanks [@​SebTardif](https://github.com/SebTardif). - Directive tags: preserve message and content-part object identity when display stripping makes no directive-tag changes. ([#​85682](https://github.com/openclaw/openclaw/issues/85682)) Thanks [@​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. ([#​85219](https://github.com/openclaw/openclaw/issues/85219)) Thanks [@​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. ([#​84830](https://github.com/openclaw/openclaw/issues/84830)) Thanks [@​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. ([#​52264](https://github.com/openclaw/openclaw/issues/52264)) Thanks [@​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. ([#​85631](https://github.com/openclaw/openclaw/issues/85631)) Thanks [@​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. ([#​85638](https://github.com/openclaw/openclaw/issues/85638)) Thanks [@​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. ([#​85625](https://github.com/openclaw/openclaw/issues/85625)) Thanks [@​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. ([#​85694](https://github.com/openclaw/openclaw/issues/85694)) Thanks [@​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 [#​85523](https://github.com/openclaw/openclaw/issues/85523). ([#​85615](https://github.com/openclaw/openclaw/issues/85615)) Thanks [@​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`. ([#​84901](https://github.com/openclaw/openclaw/issues/84901)) Thanks [@​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. ([#​85476](https://github.com/openclaw/openclaw/issues/85476)) Thanks [@​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. ([#​45613](https://github.com/openclaw/openclaw/issues/45613)) Thanks [@​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 [@​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 [#​83888](https://github.com/openclaw/openclaw/issues/83888). ([#​85425](https://github.com/openclaw/openclaw/issues/85425)) Thanks [@​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 [#​83604](https://github.com/openclaw/openclaw/issues/83604). ([#​85060](https://github.com/openclaw/openclaw/issues/85060)) Thanks [@​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 [#​85070](https://github.com/openclaw/openclaw/issues/85070). ([#​85089](https://github.com/openclaw/openclaw/issues/85089)) Thanks [@​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. ([#​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 [#​81984](https://github.com/openclaw/openclaw/issues/81984). ([#​85586](https://github.com/openclaw/openclaw/issues/85586), from [#​82081](https://github.com/openclaw/openclaw/issues/82081)) Thanks [@​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 [#​85538](https://github.com/openclaw/openclaw/issues/85538). Thanks [@​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. ([#​82263](https://github.com/openclaw/openclaw/issues/82263)) Thanks [@​luna-system](https://github.com/luna-system). - Memory/doctor: report missing or unusable QMD workspace directories as workspace failures instead of generic binary failures. ([#​63167](https://github.com/openclaw/openclaw/issues/63167)) Thanks [@​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. ([#​82444](https://github.com/openclaw/openclaw/issues/82444)) Thanks [@​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. ([#​84775](https://github.com/openclaw/openclaw/issues/84775)) Thanks [@​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. ([#​80397](https://github.com/openclaw/openclaw/issues/80397), refs [#​80323](https://github.com/openclaw/openclaw/issues/80323)) Thanks [@​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. ([#​19328](https://github.com/openclaw/openclaw/issues/19328)) Thanks [@​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 [@​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. ([#​85500](https://github.com/openclaw/openclaw/issues/85500)) - Restore Control UI gateway token pairing \[AI]. ([#​85459](https://github.com/openclaw/openclaw/issues/85459)) Thanks [@​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 [@​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 [@​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 [@​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. ([#​83794](https://github.com/openclaw/openclaw/issues/83794)) Thanks [@​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. ([#​49769](https://github.com/openclaw/openclaw/issues/49769)) Thanks [@​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 [#​85157](https://github.com/openclaw/openclaw/issues/85157). ([#​85188](https://github.com/openclaw/openclaw/issues/85188)) Thanks [@​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. ([#​84735](https://github.com/openclaw/openclaw/issues/84735)) Thanks [@​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 [#​85012](https://github.com/openclaw/openclaw/issues/85012). ([#​85090](https://github.com/openclaw/openclaw/issues/85090)) Thanks [@​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. ([#​84949](https://github.com/openclaw/openclaw/issues/84949)) Thanks [@​luoyanglang](https://github.com/luoyanglang). - Gateway/agents: return phase-aware `agent.wait` timeout attribution and only cool auth profiles on provider-started timeouts. Refs [#​65504](https://github.com/openclaw/openclaw/issues/65504). Thanks [@​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. ([#​85272](https://github.com/openclaw/openclaw/issues/85272)) Thanks [@​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 [#​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 [#​84630](https://github.com/openclaw/openclaw/issues/84630). ([#​84641](https://github.com/openclaw/openclaw/issues/84641)) Thanks [@​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 [#​84721](https://github.com/openclaw/openclaw/issues/84721). ([#​84722](https://github.com/openclaw/openclaw/issues/84722)) Thanks [@​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 [#​84201](https://github.com/openclaw/openclaw/issues/84201). ([#​84475](https://github.com/openclaw/openclaw/issues/84475)) Thanks [@​jbetala7](https://github.com/jbetala7). - Control UI/chat: disable the thinking selector for known non-reasoning models instead of showing duplicate Off choices. Fixes [#​84069](https://github.com/openclaw/openclaw/issues/84069). Thanks [@​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 [#​58026](https://github.com/openclaw/openclaw/issues/58026). Thanks [@​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 [#​61338](https://github.com/openclaw/openclaw/issues/61338). Thanks [@​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 [#​64399](https://github.com/openclaw/openclaw/issues/64399). Thanks [@​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 [#​85076](https://github.com/openclaw/openclaw/issues/85076). Thanks [@​Noerr](https://github.com/Noerr). - Telegram: pass configured markdown table mode through outbound markdown chunking so chunked sends render tables consistently. Fixes [#​85085](https://github.com/openclaw/openclaw/issues/85085). Thanks [@​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. ([#​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 [#​80487](https://github.com/openclaw/openclaw/issues/80487). ([#​80488](https://github.com/openclaw/openclaw/issues/80488)) Thanks [@​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. ([#​84890](https://github.com/openclaw/openclaw/issues/84890)) Thanks [@​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 [#​83808](https://github.com/openclaw/openclaw/issues/83808). ([#​83875](https://github.com/openclaw/openclaw/issues/83875)) Thanks [@​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 [#​84968](https://github.com/openclaw/openclaw/issues/84968). ([#​85130](https://github.com/openclaw/openclaw/issues/85130)) Thanks [@​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 [#​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 [#​77992](https://github.com/openclaw/openclaw/issues/77992). Thanks [@​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 [#​67088](https://github.com/openclaw/openclaw/issues/67088). Thanks [@​theglove44](https://github.com/theglove44). - Codex app-server: keep native web search observations out of mirrored chat transcripts while preserving tool progress telemetry. Fixes [#​85109](https://github.com/openclaw/openclaw/issues/85109). Thanks [@​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 [#​83812](https://github.com/openclaw/openclaw/issues/83812). Thanks [@​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 [#​59209](https://github.com/openclaw/openclaw/issues/59209). Thanks [@​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 [#​84948](https://github.com/openclaw/openclaw/issues/84948). Thanks [@​markoa](https://github.com/markoa). - CLI/models: make `capability model auth logout --agent` remove auth profiles from the selected non-default agent store. Fixes [#​85092](https://github.com/openclaw/openclaw/issues/85092). Thanks [@​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 [#​85094](https://github.com/openclaw/openclaw/issues/85094). Thanks [@​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. ([#​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 [#​62604](https://github.com/openclaw/openclaw/issues/62604). Thanks [@​cpwilhelmi](https://github.com/cpwilhelmi). - Providers/Gemini: strip fractional seconds from web-search time range filters so Gemini accepts freshness-bound search requests. ([#​85071](https://github.com/openclaw/openclaw/issues/85071)) Thanks [@​Noerr](https://github.com/Noerr). - OpenAI Codex: preserve image input support for sparse `openai-codex/gpt-5.5` catalog rows. ([#​85095](https://github.com/openclaw/openclaw/issues/85095)) Thanks [@​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. ([#​85533](https://github.com/openclaw/openclaw/issues/85533)) Thanks [@​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 [#​85470](https://github.com/openclaw/openclaw/issues/85470). ([#​85605](https://github.com/openclaw/openclaw/issues/85605)) Thanks [@​joshavant](https://github.com/joshavant). - Plugins/discovery: strip `-plugin` package suffixes when deriving plugin id hints so package names line up with manifest ids. ([#​85170](https://github.com/openclaw/openclaw/issues/85170)) Thanks [@​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. ([#​85209](https://github.com/openclaw/openclaw/issues/85209)) Thanks [@​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]. ([#​84982](https://github.com/openclaw/openclaw/issues/84982)) Thanks [@​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 [#​71581](https://github.com/openclaw/openclaw/issues/71581). ([#​83743](https://github.com/openclaw/openclaw/issues/83743)) Thanks [@​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. ([#​83483](https://github.com/openclaw/openclaw/issues/83483)) Thanks [@​Kaspre](https://github.com/Kaspre). - Agents/code mode: return structured timeout and runtime-unavailable error codes for known worker failures. Fixes [#​83389](https://github.com/openclaw/openclaw/issues/83389). ([#​83444](https://github.com/openclaw/openclaw/issues/83444)) Thanks [@​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. ([#​83445](https://github.com/openclaw/openclaw/issues/83445)) Thanks [@​bryanpearson](https://github.com/bryanpearson). - Gateway CLI: surface local post-challenge connect assembly failures immediately instead of waiting for the wrapper timeout. Fixes [#​68944](https://github.com/openclaw/openclaw/issues/68944). ([#​85253](https://github.com/openclaw/openclaw/issues/85253)) Thanks [@​samzong](https://github.com/samzong). - Messages: strip unsupported web-search citation control markers from outbound replies before they reach WebChat or external channels. Fixes [#​85193](https://github.com/openclaw/openclaw/issues/85193). ([#​85204](https://github.com/openclaw/openclaw/issues/85204)) Thanks [@​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 [#​69386](https://github.com/openclaw/openclaw/issues/69386). ([#​85194](https://github.com/openclaw/openclaw/issues/85194)) Thanks [@​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 [#​71710](https://github.com/openclaw/openclaw/issues/71710). ([#​84381](https://github.com/openclaw/openclaw/issues/84381)) Thanks [@​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 [@​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. ([#​84417](https://github.com/openclaw/openclaw/issues/84417)) Thanks [@​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 [#​85197](https://github.com/openclaw/openclaw/issues/85197). ([#​85198](https://github.com/openclaw/openclaw/issues/85198)) Thanks [@​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. ([#​85227](https://github.com/openclaw/openclaw/issues/85227)) Thanks [@​amknight](https://github.com/amknight). - fix: constrain Windows task script names \[AI]. ([#​85064](https://github.com/openclaw/openclaw/issues/85064)) Thanks [@​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. ([#​85211](https://github.com/openclaw/openclaw/issues/85211)) Thanks [@​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 [#​47229](https://github.com/openclaw/openclaw/issues/47229). ([#​83063](https://github.com/openclaw/openclaw/issues/83063)) Thanks [@​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. ([#​85541](https://github.com/openclaw/openclaw/issues/85541)) Thanks [@​fuller-stack-dev](https://github.com/fuller-stack-dev) and [@​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. ([#​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. ([#​85185](https://github.com/openclaw/openclaw/issues/85185)) Thanks [@​neeravmakwana](https://github.com/neeravmakwana). - CLI/agents: allow `openclaw agent --session-key` to target explicit session keys, including agent-scoped legacy keys. ([#​85121](https://github.com/openclaw/openclaw/issues/85121)) Thanks [@​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. ([#​83722](https://github.com/openclaw/openclaw/issues/83722)) Thanks [@​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. ([#​85110](https://github.com/openclaw/openclaw/issues/85110)) Thanks [@​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. ([#​83348](https://github.com/openclaw/openclaw/issues/83348)) Thanks [@​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. ([#​85022](https://github.com/openclaw/openclaw/issues/85022)) Thanks [@​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 [#​85310](https://github.com/openclaw/openclaw/issues/85310). ([#​85357](https://github.com/openclaw/openclaw/issues/85357)) Thanks [@​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 [#​68916](https://github.com/openclaw/openclaw/issues/68916). ([#​85190](https://github.com/openclaw/openclaw/issues/85190)) Thanks [@​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 [#​85012](https://github.com/openclaw/openclaw/issues/85012). ([#​85534](https://github.com/openclaw/openclaw/issues/85534)) Thanks [@​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. ([#​80886](https://github.com/openclaw/openclaw/issues/80886)) Thanks [@​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. ([#​85054](https://github.com/openclaw/openclaw/issues/85054)) Thanks [@​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. ([#​83262](https://github.com/openclaw/openclaw/issues/83262)) Thanks [@​IWhatsskill](https://github.com/IWhatsskill). - Doctor: show personal Codex CLI asset notices as info instead of warnings. Fixes [#​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. ([#​81296](https://github.com/openclaw/openclaw/issues/81296)) Thanks [@​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. ([#​84837](https://github.com/openclaw/openclaw/issues/84837)) Thanks [@​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. ([#​84006](https://github.com/openclaw/openclaw/issues/84006)) Thanks [@​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. ([#​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. ([#​81069](https://github.com/openclaw/openclaw/issues/81069)) Thanks [@​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. ([#​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 [#​84185](https://github.com/openclaw/openclaw/issues/84185). ([#​84190](https://github.com/openclaw/openclaw/issues/84190)) Thanks [@​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 [#​81837](https://github.com/openclaw/openclaw/issues/81837). ([#​81886](https://github.com/openclaw/openclaw/issues/81886)) Thanks [@​TurboTheTurtle](https://github.com/TurboTheTurtle). - Gateway/status: surface inbound delivery telemetry counters and transport-liveness warnings in `openclaw status --all`. Fixes [#​49577](https://github.com/openclaw/openclaw/issues/49577). ([#​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 [#​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. ([#​80319](https://github.com/openclaw/openclaw/issues/80319)) Thanks [@​100yenadmin](https://github.com/100yenadmin). - Agents/config: keep non-Google provider model refs from being rewritten by Google Gemini preview-id normalization. ([#​84762](https://github.com/openclaw/openclaw/issues/84762)) Thanks [@​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 [#​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 [#​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 [#​83134](https://github.com/openclaw/openclaw/issues/83134). ([#​83317](https://github.com/openclaw/openclaw/issues/83317)) Thanks [@​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. ([#​85223](https://github.com/openclaw/openclaw/issues/85223)) Thanks [@​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 [#​84305](https://github.com/openclaw/openclaw/issues/84305). ([#​85160](https://github.com/openclaw/openclaw/issues/85160)) Thanks [@​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 [#​84436](https://github.com/openclaw/openclaw/issues/84436). ([#​84444](https://github.com/openclaw/openclaw/issues/84444)) Thanks [@​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. ([#​83955](https://github.com/openclaw/openclaw/issues/83955)) Thanks [@​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]. ([#​84799](https://github.com/openclaw/openclaw/issues/84799)) Thanks [@​pgondhi987](https://github.com/pgondhi987). - doctor: constrain legacy plugin cleanup paths \[AI]. ([#​84801](https://github.com/openclaw/openclaw/issues/84801)) Thanks [@​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. ([#​84863](https://github.com/openclaw/openclaw/issues/84863)) Thanks [@​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 [#​84477](https://github.com/openclaw/openclaw/issues/84477). ([#​85100](https://github.com/openclaw/openclaw/issues/85100)) Thanks [@​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 [#​84076](https://github.com/openclaw/openclaw/issues/84076). ([#​85107](https://github.com/openclaw/openclaw/issues/85107)) Thanks [@​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. ([#​85216](https://github.com/openclaw/openclaw/issues/85216)) Thanks [@​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 [#​85017](https://github.com/openclaw/openclaw/issues/85017). ([#​85137](https://github.com/openclaw/openclaw/issues/85137)) Thanks [@​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 [#​84811](https://github.com/openclaw/openclaw/issues/84811). ([#​85154](https://github.com/openclaw/openclaw/issues/85154)) Thanks [@​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 [#​68649](https://github.com/openclaw/openclaw/issues/68649). ([#​84768](https://github.com/openclaw/openclaw/issues/84768)) Thanks [@​luoyanglang](https://github.com/luoyanglang). - Diagnostics/OpenTelemetry plugin: suppress handled OTLP exporter promise rejections so collector shutdowns no longer crash the Gateway. ([#​81085](https://github.com/openclaw/openclaw/issues/81085)) Thanks [@​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 [#​85049](https://github.com/openclaw/openclaw/issues/85049). ([#​85140](https://github.com/openclaw/openclaw/issues/85140)) Thanks [@​joshavant](https://github.com/joshavant). - Media/audio: skip empty structured sherpa-onnx transcripts instead of treating the raw JSON payload as spoken text. ([#​84667](https://github.com/openclaw/openclaw/issues/84667)) Thanks [@​TurboTheTurtle](https://github.com/TurboTheTurtle). - Agents/exec: preserve inherited XDG base-directory environment values for subprocesses while still rejecting agent-supplied XDG overrides. Fixes [#​84854](https://github.com/openclaw/openclaw/issues/84854). ([#​85139](https://github.com/openclaw/openclaw/issues/85139)) Thanks [@​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. ([#​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 [#​68252](https://github.com/openclaw/openclaw/issues/68252), [#​69187](https://github.com/openclaw/openclaw/issues/69187), and [#​70402](https://github.com/openclaw/openclaw/issues/70402). ([#​70464](https://github.com/openclaw/openclaw/issues/70464)) Thanks [@​chiyouYCH](https://github.com/chiyouYCH). - Trajectory/support: tol…
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Summary
node C:\...\codex.js..jsentrypoint.appServer.args.Closes #84365
Real behavior proof
Behavior or issue addressed:
On Windows, a manual Codex
appServer.commandoverride likenode C:\Users\me\.openclaw\npm\node_modules\@openai\codex\bin\codex.jscould flow into spawn resolution as a single command string. The.jssuffix then made the whole string look like a Node entrypoint, producing failures likeCannot 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
git diff --checkalso 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 includeCo-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>.