Skip to content

feat: add OpenRouter OAuth to onboarding#91830

Merged
Patrick-Erichsen merged 2 commits into
mainfrom
pe/claw-256-openrouter-onboarding
Jun 10, 2026
Merged

feat: add OpenRouter OAuth to onboarding#91830
Patrick-Erichsen merged 2 commits into
mainfrom
pe/claw-256-openrouter-onboarding

Conversation

@Patrick-Erichsen

Copy link
Copy Markdown
Contributor

Summary

  • Cherry-pick [codex] Add OpenRouter OAuth login #91031 to add provider-owned OpenRouter PKCE OAuth login while preserving @kenrogers' authorship.
  • Feature OpenRouter in the top-level CLI model/auth provider picker so onboarding shows it alongside OpenAI, Anthropic, xAI, and Google.
  • Keep OAuth mechanics owned by the OpenRouter provider metadata/runtime path instead of adding provider-specific onboarding code in core.

Verification

  • node scripts/run-vitest.mjs extensions/openrouter/oauth.test.ts extensions/openrouter/index.test.ts extensions/openrouter/onboard.test.ts extensions/openrouter/provider-runtime.contract.test.ts src/plugins/contracts/providers.contract.test.ts src/plugins/contracts/registry.contract.test.ts src/commands/auth-choice.test.ts src/commands/models/auth.test.ts src/commands/auth-choice-options.test.ts
  • git diff --check origin/main..HEAD
  • pnpm exec oxfmt --check src/commands/auth-choice-options.ts src/commands/auth-choice-options.test.ts extensions/openrouter/index.test.ts extensions/openrouter/oauth.ts extensions/openrouter/provider-contract-api.ts extensions/openrouter/openclaw.plugin.json
  • pnpm docs:list
  • .agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main

Real behavior proof

Behavior addressed: OpenRouter appears as a first-class top-level choice in the CLI model/auth provider picker, and selecting it shows the expected setup hint.

Real environment tested: Local OpenClaw checkout on macOS with an isolated temporary OpenClaw home/config path.

Exact steps or command run after this patch:

tmp=$(mktemp -d /tmp/openclaw-openrouter-onboarding-proof.XXXXXX)
env OPENCLAW_HOME="$tmp" \
  OPENCLAW_STATE_DIR="$tmp/state" \
  OPENCLAW_CONFIG_PATH="$tmp/openclaw.json" \
  pnpm openclaw configure --section model

Evidence after fix:

OpenClaw configure
Model/auth provider
● OpenAI (ChatGPT/Codex sign-in or API key)
○ Anthropic
○ xAI (Grok)
○ Google
○ OpenRouter
○ More…
○ Skip for now

Selected-row hint proof:

Model/auth provider
○ Google
● OpenRouter (OAuth or API key)
○ More…
○ Skip for now

Observed result after fix: OpenRouter is visible in the top-level provider list and carries the OAuth or API key help text from provider-owned auth metadata.

What was not tested: This PR did not run a fresh live OpenRouter browser consent flow. The cherry-picked OAuth PR includes redacted live proof of browser authorization, callback exchange, stored openrouter:default, and a model call with OPENROUTER_API_KEY unset.

Refs #91031.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation commands Command implementations extensions: openrouter size: L maintainer Maintainer-authored PR labels Jun 10, 2026
@clawsweeper

clawsweeper Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 10, 2026, 12:54 AM ET / 04:54 UTC.

Summary
The PR adds OpenRouter PKCE OAuth login, registers it in OpenRouter provider auth metadata and docs, and features OpenRouter in the top-level CLI model/auth provider picker.

PR surface: Source +459, Tests +350, Docs +41. Total +850 across 10 files.

Reproducibility: not applicable. this is a feature PR, not a bug report. The relevant behavior check is after-fix proof showing OpenRouter in the CLI picker plus predecessor live OAuth proof for the cherry-picked runtime commit.

Review metrics: 1 noteworthy metric.

  • Provider auth surfaces: 1 OAuth method added; 1 featured auth choice added. This changes the user-facing auth/provider picker and profile-writing behavior, so maintainers should review it as an auth surface change rather than ordinary docs polish.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • none.

Risk before merge

  • [P1] Merging ships a new auth-provider path that exchanges a browser OAuth callback for API-key material and writes openrouter:default; the discussion explicitly accepts this auth-provider risk, but it still needs maintainer landing judgment.
  • [P1] The current branch provides fresh terminal proof for the top-level picker, while the full live browser consent and model-call proof comes from the cherry-picked predecessor branch rather than a fresh run on this exact head.

Maintainer options:

  1. Land With Accepted Auth Risk (recommended)
    Maintain the current provider-owned implementation and land it only after the protected auth-provider review accepts the new OAuth-to-API-key storage path.
  2. Request Fresh Live OAuth Proof
    If maintainers want branch-local proof instead of relying on the predecessor live run, ask for a fresh redacted OpenRouter browser consent, callback exchange, profile status, and model-call transcript on this head.
  3. Pause In Favor Of The Predecessor
    If attribution plus picker follow-up is no longer the desired landing path, pause this PR and make the predecessor branch or a maintainer-owned replacement the canonical target.

Next step before merge

  • No automated repair is indicated; the remaining action is maintainer review and landing of a protected auth-provider PR with accepted merge risk.

Security
Cleared: The diff is security-sensitive because it adds OAuth callback and credential storage behavior, but I found no concrete supply-chain or credential-handling defect in the reviewed patch.

Review details

Best possible solution:

Land this canonical attributed branch after maintainer auth-provider review, then close the predecessor branch as superseded by this one.

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

Not applicable: this is a feature PR, not a bug report. The relevant behavior check is after-fix proof showing OpenRouter in the CLI picker plus predecessor live OAuth proof for the cherry-picked runtime commit.

Is this the best way to solve the issue?

Yes, with maintainer review: the implementation keeps OpenRouter-specific OAuth mechanics inside the OpenRouter plugin and uses existing provider auth metadata for the core picker. The safer alternative would only be to require fresh live OAuth proof on this exact branch before landing.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P2: This is a normal-priority provider onboarding feature with limited scope, but it is auth-sensitive and user-facing.
  • merge-risk: 🚨 auth-provider: The PR adds a new OpenRouter OAuth flow that exchanges callback codes for API-key credentials and changes provider auth/profile behavior.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): The PR body and comment include branch-local terminal proof for the CLI picker, and the linked cherry-picked predecessor includes redacted live terminal proof of browser OAuth completion, stored profile use, and an OpenRouter model call.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body and comment include branch-local terminal proof for the CLI picker, and the linked cherry-picked predecessor includes redacted live terminal proof of browser OAuth completion, stored profile use, and an OpenRouter model call.
Evidence reviewed

PR surface:

Source +459, Tests +350, Docs +41. Total +850 across 10 files.

View PR surface stats
Area Files Added Removed Net
Source 5 462 3 +459
Tests 3 350 0 +350
Docs 2 61 20 +41
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 10 873 23 +850

What I checked:

  • Current main lacks OpenRouter OAuth: Current main's OpenRouter manifest has only the openrouter-api-key provider auth choice, so the requested OAuth onboarding is not already implemented on main. (extensions/openrouter/openclaw.plugin.json:46, b4cdd9211957)
  • Latest release lacks OpenRouter OAuth: The latest release tag v2026.6.5 shows the same API-key-only OpenRouter auth choice, so this is not already shipped. (extensions/openrouter/openclaw.plugin.json:46, 5181e4f7c82b)
  • PR adds the manifest auth choice: The PR adds a second OpenRouter provider auth choice with method oauth, choice id openrouter-oauth, and onboardingFeatured: true. (extensions/openrouter/openclaw.plugin.json:61, dfa22c0a73e7)
  • PR adds provider-owned OAuth runtime: The new OpenRouter OAuth runtime builds the OpenRouter auth URL, validates callback state, exchanges the code at the OpenRouter auth-keys endpoint, and returns an openrouter:default API-key profile plus OpenRouter config defaults. (extensions/openrouter/oauth.ts:162, dfa22c0a73e7)
  • Picker behavior is covered by branch tests: The PR updates the grouped auth-choice test to include OpenRouter in the featured top-level provider order after Google. (src/commands/auth-choice-options.test.ts:513, dfa22c0a73e7)
  • Dependency contract checked: OpenRouter's OAuth PKCE guide documents sending users to /auth with callback_url, code_challenge, and code_challenge_method=S256, then exchanging the returned code at /api/v1/auth/keys; the PR follows that shape. (openrouter.ai)

Likely related people:

  • Peter Steinberger: Introduced the provider onboarding auth metadata manifest path that this PR extends, and has broad prior ownership across provider/plugin auth configuration. (role: feature-history owner; confidence: medium; commits: ae60094fb556, 4a0f72866b4d; files: src/plugins/provider-auth-choices.ts, src/flows/provider-flow.ts, extensions/openrouter/openclaw.plugin.json)
  • Vincent Koc: Recent OpenRouter provider fixes and provider-family refactors make this person a good routing candidate for OpenRouter runtime behavior. (role: recent OpenRouter contributor; confidence: medium; commits: 791dbf4f9dde, b56517b0eede; files: extensions/openrouter/index.ts, extensions/openrouter/openclaw.plugin.json, docs/providers/openrouter.md)
  • Dallin Romney: Most recent blame on the OpenRouter provider entry and auth-choice ordering surface comes from a runtime-plugin prewarm refactor that moved the touched files on current main. (role: recent adjacent contributor; confidence: medium; commits: 8b84e951e5a6; files: extensions/openrouter/index.ts, src/commands/auth-choice-options.ts)
  • Pavan Kumar Gondhi: Recently fixed provider auth-choice resolution and trust boundaries, which are directly adjacent to this PR's manifest auth choice changes. (role: adjacent provider-auth-choice contributor; confidence: medium; commits: 2d97eae53e21; files: src/plugins/provider-auth-choices.ts)
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.

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.

@Patrick-Erichsen

Copy link
Copy Markdown
Contributor Author

Proof update before review loop:

  • node scripts/run-vitest.mjs extensions/openrouter/oauth.test.ts extensions/openrouter/index.test.ts extensions/openrouter/onboard.test.ts extensions/openrouter/provider-runtime.contract.test.ts src/plugins/contracts/providers.contract.test.ts src/plugins/contracts/registry.contract.test.ts src/commands/auth-choice.test.ts src/commands/models/auth.test.ts src/commands/auth-choice-options.test.ts — passed 4 shards / 166 tests locally after rebasing on current origin/main.
  • git diff --check origin/main..HEAD — clean.
  • .agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main — clean, no accepted/actionable findings.

CLI prompt proof:

Model/auth provider
● OpenAI (ChatGPT/Codex sign-in or API key)
○ Anthropic
○ xAI (Grok)
○ Google
○ OpenRouter
○ More…
○ Skip for now

Selected-row hint proof:

Model/auth provider
○ Google
● OpenRouter (OAuth or API key)
○ More…
○ Skip for now

@Patrick-Erichsen

Copy link
Copy Markdown
Contributor Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@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. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. labels Jun 10, 2026
@Patrick-Erichsen

Copy link
Copy Markdown
Contributor Author

Maintainer decision: make this PR the canonical landing path for OpenRouter OAuth onboarding.

Rationale:

  • This branch preserves @kenrogers' original OpenRouter OAuth commit from [codex] Add OpenRouter OAuth login #91031 by cherry-pick, retaining attribution.
  • It adds the missing follow-up to feature OpenRouter in the top-level onboarding provider picker.
  • Current-branch proof covers the picker behavior, and the predecessor PR supplies redacted live OAuth callback/exchange/profile/model-call proof for the cherry-picked implementation.

I accept the auth-provider merge-risk label for this landing path. After this PR lands, #91031 should be closed as superseded by the attributed cherry-pick here.

@Patrick-Erichsen

Copy link
Copy Markdown
Contributor Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Command router queued. I will update this comment with the next step.

Re-review progress:

@Patrick-Erichsen

Copy link
Copy Markdown
Contributor Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Command router queued. I will update this comment with the next step.

Re-review progress:

@Patrick-Erichsen Patrick-Erichsen merged commit e9671ed into main Jun 10, 2026
229 of 242 checks passed
@Patrick-Erichsen Patrick-Erichsen deleted the pe/claw-256-openrouter-onboarding branch June 10, 2026 04:59
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request Jun 12, 2026
…26.6.6) (#1040)

This PR contains the following updates:

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

---

### Release Notes

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

### [`v2026.6.6`](https://github.com/openclaw/openclaw/blob/HEAD/CHANGELOG.md#202666)

[Compare Source](openclaw/openclaw@v2026.6.5...v2026.6.6)

##### Highlights

- Security boundaries are substantially tighter across transcripts, sandbox binds, host environment inheritance, MCP stdio, Codex HTTP access, native search policy, elevated sender checks, deleted-agent ACP bypasses, loopback tools, Discord moderation, and Teams group actions; exec approvals now fail closed on timeout. ([#&#8203;91529](openclaw/openclaw#91529), [#&#8203;91618](openclaw/openclaw#91618), [#&#8203;91615](openclaw/openclaw#91615), [#&#8203;91619](openclaw/openclaw#91619), [#&#8203;91741](openclaw/openclaw#91741), [#&#8203;91745](openclaw/openclaw#91745), [#&#8203;91746](openclaw/openclaw#91746), [#&#8203;91748](openclaw/openclaw#91748), [#&#8203;91749](openclaw/openclaw#91749), [#&#8203;91750](openclaw/openclaw#91750), [#&#8203;91751](openclaw/openclaw#91751), [#&#8203;91752](openclaw/openclaw#91752), [#&#8203;91763](openclaw/openclaw#91763), [#&#8203;89938](openclaw/openclaw#89938)) Thanks [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;pgondhi987](https://github.com/pgondhi987), [@&#8203;mmaps](https://github.com/mmaps), [@&#8203;eleqtrizit](https://github.com/eleqtrizit), [@&#8203;shakkernerd](https://github.com/shakkernerd), and [@&#8203;drobison00](https://github.com/drobison00).
- Telegram delivery is safer and more coherent: account-scoped topics route to the right agent, streamed text survives tool calls, `/compact` works on generic ingress, callback handling uses concrete APIs, draft chunking is shared, durable dispatch dedupe moved into the SDK, and unauthorized DM text stays out of cache and prompt context. ([#&#8203;91189](openclaw/openclaw#91189), [#&#8203;88682](openclaw/openclaw#88682), [#&#8203;89588](openclaw/openclaw#89588), [#&#8203;90212](openclaw/openclaw#90212), [#&#8203;91876](openclaw/openclaw#91876), [#&#8203;91874](openclaw/openclaw#91874), [#&#8203;91904](openclaw/openclaw#91904), [#&#8203;91478](openclaw/openclaw#91478), [#&#8203;91915](openclaw/openclaw#91915)) Thanks [@&#8203;codysai001](https://github.com/codysai001), [@&#8203;alexzhu0](https://github.com/alexzhu0), [@&#8203;joelnishanth](https://github.com/joelnishanth), [@&#8203;snowzlm](https://github.com/snowzlm), [@&#8203;obviyus](https://github.com/obviyus), and [@&#8203;sallyom](https://github.com/sallyom).
- iMessage recovery and delivery now cover always-on inbound restart, durable echo markers, block streaming, idle approval discovery, hardened outbound transport, and actionable inbound startup diagnostics. ([#&#8203;91335](openclaw/openclaw#91335), [#&#8203;91449](openclaw/openclaw#91449), [#&#8203;88969](openclaw/openclaw#88969), [#&#8203;88530](openclaw/openclaw#88530), [#&#8203;91783](openclaw/openclaw#91783), [#&#8203;91785](openclaw/openclaw#91785)) Thanks [@&#8203;omarshahine](https://github.com/omarshahine), [@&#8203;jmissig](https://github.com/jmissig), and [@&#8203;colmbrogan](https://github.com/colmbrogan).
- Browser and MCP connectivity gained existing-session CDP support, discovered WebSocket validation, default-profile `cdpUrl` handling, safer browser-output boundaries, Streamable HTTP loopback transport, corrected OAuth/SSE authorization handling, and broader schema compatibility. ([#&#8203;91422](openclaw/openclaw#91422), [#&#8203;89851](openclaw/openclaw#89851), [#&#8203;91736](openclaw/openclaw#91736), [#&#8203;91747](openclaw/openclaw#91747), [#&#8203;91451](openclaw/openclaw#91451), [#&#8203;80143](openclaw/openclaw#80143)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987), [@&#8203;anagnorisis2peripeteia](https://github.com/anagnorisis2peripeteia), [@&#8203;lifuyue](https://github.com/lifuyue), [@&#8203;eleqtrizit](https://github.com/eleqtrizit), [@&#8203;LiuwqGit](https://github.com/LiuwqGit), and [@&#8203;HemantSudarshan](https://github.com/HemantSudarshan).
- Control UI startup and first-reply latency are lower through cached model metadata, removal of the startup catalog wait, lazy slash-command loading, and first-event tracing with slow-reply diagnostics. ([#&#8203;91531](openclaw/openclaw#91531), [#&#8203;91538](openclaw/openclaw#91538), [#&#8203;91568](openclaw/openclaw#91568), [#&#8203;91583](openclaw/openclaw#91583), [#&#8203;91598](openclaw/openclaw#91598))
- Provider support expands with OpenRouter OAuth onboarding and Claude Fable 5 adaptive thinking, while Codex sessions keep correct compaction ownership, local models skip guardian review, dynamic tool progress normalizes cleanly, and Gemma 4 reasoning replay is preserved. ([#&#8203;91830](openclaw/openclaw#91830), [#&#8203;91882](openclaw/openclaw#91882), [#&#8203;91590](openclaw/openclaw#91590), [#&#8203;88630](openclaw/openclaw#88630), [#&#8203;88768](openclaw/openclaw#88768), [#&#8203;91696](openclaw/openclaw#91696)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;bdjben](https://github.com/bdjben), and [@&#8203;Coder-Wangyankun](https://github.com/Coder-Wangyankun).

##### Changes

- CLI progress: emit Claude CLI commentary progress events and bridge inter-tool commentary into channel progress without exposing internal protocol scaffolding. ([#&#8203;89834](openclaw/openclaw#89834), [#&#8203;90883](openclaw/openclaw#90883)) Thanks [@&#8203;anagnorisis2peripeteia](https://github.com/anagnorisis2peripeteia).
- Observability: allow trusted diagnostics channels to capture tool input/output content, add first-assistant-event traces, and warn on slow initial replies. ([#&#8203;91256](openclaw/openclaw#91256), [#&#8203;91568](openclaw/openclaw#91568), [#&#8203;91583](openclaw/openclaw#91583)) Thanks [@&#8203;amknight](https://github.com/amknight).
- Plugins/ClawHub: dogfood reusable package publishing, let dry runs skip publish approval, allow declared installed trusted hooks, report managed plugin version drift, and warn instead of failing on retired Skill Workshop configuration. ([#&#8203;91574](openclaw/openclaw#91574), [#&#8203;91591](openclaw/openclaw#91591), [#&#8203;90004](openclaw/openclaw#90004), [#&#8203;90927](openclaw/openclaw#90927), [#&#8203;90838](openclaw/openclaw#90838)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@&#8203;brokemac79](https://github.com/brokemac79), and [@&#8203;lonexreb](https://github.com/lonexreb).
- Memory/providers: move the local llama.cpp runtime into its provider plugin, batch embeddings across files, persist the agent model catalog cache, and keep QMD JSON search one-shot while filtering stale REM recall previews. ([#&#8203;91324](openclaw/openclaw#91324), [#&#8203;89138](openclaw/openclaw#89138), [#&#8203;90457](openclaw/openclaw#90457), [#&#8203;91837](openclaw/openclaw#91837), [#&#8203;91851](openclaw/openclaw#91851)) Thanks [@&#8203;osolmaz](https://github.com/osolmaz), [@&#8203;mushuiyu886](https://github.com/mushuiyu886), [@&#8203;ai-hpc](https://github.com/ai-hpc), and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Channels/mobile: add the QQBot group mention toggle, improve iPad and iPhone control surfaces, and expose the active connection host in the TUI footer. ([#&#8203;91423](openclaw/openclaw#91423), [#&#8203;91557](openclaw/openclaw#91557), [#&#8203;89909](openclaw/openclaw#89909)) Thanks [@&#8203;cxyhhhhh](https://github.com/cxyhhhhh), [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin), and [@&#8203;baskduf](https://github.com/baskduf).
- Performance: prewarm TUI runtime plugins, deduplicate plugin auto-enable fanout, trim dense text-delta snapshots, and reuse prepared startup model metadata. ([#&#8203;90782](openclaw/openclaw#90782), [#&#8203;89978](openclaw/openclaw#89978), [#&#8203;91580](openclaw/openclaw#91580), [#&#8203;91531](openclaw/openclaw#91531)) Thanks [@&#8203;RomneyDa](https://github.com/RomneyDa) and [@&#8203;ai-hpc](https://github.com/ai-hpc).

##### Fixes

- Agent/session recovery: drop stale approval follow-ups after session rebind, remove drained reply-queue items by identity, recover stale main and visible replies, preserve Codex context-engine compaction ownership, lower the default compaction timeout to 180 seconds while respecting explicit configuration, and keep provider-failure terminal lifecycle state correct. ([#&#8203;85679](openclaw/openclaw#85679), [#&#8203;91450](openclaw/openclaw#91450), [#&#8203;91566](openclaw/openclaw#91566), [#&#8203;91840](openclaw/openclaw#91840), [#&#8203;91590](openclaw/openclaw#91590), [#&#8203;91361](openclaw/openclaw#91361), [#&#8203;91895](openclaw/openclaw#91895)) Thanks [@&#8203;openperf](https://github.com/openperf), [@&#8203;yetval](https://github.com/yetval), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;wangmiao0668000666](https://github.com/wangmiao0668000666), and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- User-visible content boundaries: suppress Codex/Harmony protocol artifacts, neutralize browser and LanceDB memory media directives, redact transcript images, and preserve native `/compact` replies through source suppression. ([#&#8203;89151](openclaw/openclaw#89151), [#&#8203;91422](openclaw/openclaw#91422), [#&#8203;91425](openclaw/openclaw#91425), [#&#8203;91529](openclaw/openclaw#91529), [#&#8203;90212](openclaw/openclaw#90212)) Thanks [@&#8203;joelnishanth](https://github.com/joelnishanth), [@&#8203;pgondhi987](https://github.com/pgondhi987), [@&#8203;joshavant](https://github.com/joshavant), and [@&#8203;snowzlm](https://github.com/snowzlm).
- Channel delivery: keep WhatsApp captured replies attached to the successor controller after restart, retry Feishu rate limits, preserve Mattermost thread replies, canonicalize LINE webhook paths, restore Discord reply hydration and runtime timeout exports, and show OpenAI Realtime WebRTC assistant transcripts. ([#&#8203;85823](openclaw/openclaw#85823), [#&#8203;89659](openclaw/openclaw#89659), [#&#8203;91684](openclaw/openclaw#91684), [#&#8203;91649](openclaw/openclaw#91649), [#&#8203;90263](openclaw/openclaw#90263), [#&#8203;91686](openclaw/openclaw#91686), [#&#8203;90426](openclaw/openclaw#90426)) Thanks [@&#8203;itsuzef](https://github.com/itsuzef), [@&#8203;ladygege](https://github.com/ladygege), [@&#8203;jacobtomlinson](https://github.com/jacobtomlinson), [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev), and [@&#8203;shushushv](https://github.com/shushushv).
- Cron: cancel active task runs cleanly, preserve terminal timeout/cancel state, and recover no-deliver tool warnings instead of silently losing the outcome. ([#&#8203;90666](openclaw/openclaw#90666), [#&#8203;90678](openclaw/openclaw#90678)) Thanks [@&#8203;ai-hpc](https://github.com/ai-hpc).
- Gateway/config/auth: share the approval runtime socket token, replace arrays explicitly in `config.patch`, skip the deleted-agent guard only for valid ACP harness sessions, surface headless LaunchAgent state, verify SQLite auth migration before cleanup, and arm QMD startup maintenance. ([#&#8203;87105](openclaw/openclaw#87105), [#&#8203;91551](openclaw/openclaw#91551), [#&#8203;91219](openclaw/openclaw#91219), [#&#8203;91614](openclaw/openclaw#91614), [#&#8203;91740](openclaw/openclaw#91740), [#&#8203;91978](openclaw/openclaw#91978)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev) and [@&#8203;scotthuang](https://github.com/scotthuang).
- Providers/Codex: clarify quota errors, restore the Codex synthetic usage line, canonicalize Codex protocol assets, require API-key auth for realtime voice, normalize ACP model refs, preserve Gemma 4 `reasoning_content`, and avoid guardian review for local models. ([#&#8203;91390](openclaw/openclaw#91390), [#&#8203;91709](openclaw/openclaw#91709), [#&#8203;91507](openclaw/openclaw#91507), [#&#8203;91567](openclaw/openclaw#91567), [#&#8203;88630](openclaw/openclaw#88630), [#&#8203;91696](openclaw/openclaw#91696)) Thanks [@&#8203;hxy91819](https://github.com/hxy91819), [@&#8203;brokemac79](https://github.com/brokemac79), [@&#8203;RomneyDa](https://github.com/RomneyDa), [@&#8203;joshavant](https://github.com/joshavant), and [@&#8203;Coder-Wangyankun](https://github.com/Coder-Wangyankun).
- Updates/builds: recover package Gateway restarts after refresh failure, expose plugin convergence repair, fall back to Corepack in PATH-less pnpm environments, seed the correct Docker store packages, and keep ClawHub dry-run and publish paths reusable. ([#&#8203;91581](openclaw/openclaw#91581), [#&#8203;91599](openclaw/openclaw#91599), [#&#8203;91547](openclaw/openclaw#91547), [#&#8203;91591](openclaw/openclaw#91591)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev), [@&#8203;sallyom](https://github.com/sallyom), and [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- UI: require explicit user intent before opening chat sessions and drain restored chat queues after session switches. ([#&#8203;91480](openclaw/openclaw#91480)) Thanks [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Android: avoid the `dataSync` foreground-service type for persistent nodes. ([#&#8203;80082](openclaw/openclaw#80082)) Thanks [@&#8203;davelutztx](https://github.com/davelutztx).
- Native hooks: bound relay lifetimes so abandoned native hook connections cannot linger indefinitely. ([#&#8203;91550](openclaw/openclaw#91550)) Thanks [@&#8203;joshavant](https://github.com/joshavant).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/1040
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commands Command implementations docs Improvements or additions to documentation extensions: openrouter maintainer Maintainer-authored PR merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: L status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants