Skip to content

fix(mcp): repair OAuth redirect, errors, and unicode schema patterns#91451

Merged
vincentkoc merged 6 commits into
openclaw:mainfrom
LiuwqGit:fix/issue-91433-mcp-oauth-regex
Jun 10, 2026
Merged

fix(mcp): repair OAuth redirect, errors, and unicode schema patterns#91451
vincentkoc merged 6 commits into
openclaw:mainfrom
LiuwqGit:fix/issue-91433-mcp-oauth-regex

Conversation

@LiuwqGit

@LiuwqGit LiuwqGit commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Keep the legacy 127.0.0.1 OAuth redirect default for upgrade compatibility, and retry dynamic client registration with http://localhost:8989/oauth/callback when an authorization server rejects the IP loopback redirect.
  • Surface real OAuth error bodies instead of "[object Response]" by normalizing body-less MCP HTTP fetch responses to global Response objects the MCP SDK can read.
  • Prevent post-auth MCP probe crashes on PayPal-like tool schemas whose JSON Schema pattern values use redundant \: escapes that are invalid under TypeBox's unicode RegExp compile path.

Why does this matter now?

Remote streamable-http MCP servers with OAuth (PayPal, Calendly) are currently unusable or fail with opaque errors after login.

What is the intended outcome?

Operators can run openclaw mcp login / openclaw mcp probe against OAuth MCP servers without regex compile crashes, with readable DCR errors, and with a tested localhost fallback for ASes that reject 127.0.0.1.

What is intentionally out of scope?

  • Live end-to-end OAuth against PayPal/Calendly in this PR environment
  • Upstream MCP SDK changes

What does success look like?

Regression tests cover all three failure modes; maintainers can confirm live OAuth on PayPal/Calendly with the reporter's repro steps.

What should reviewers focus on?

Localhost redirect fallback policy (only after DCR rejection, legacy default preserved) and the conservative JSON Schema pattern repair applied before TypeBox compile.

Linked context

Which issue does this close?

Closes #91433

Which issues, PRs, or discussions are related?

Related #91433 (ClawSweeper review and reporter follow-up confirming localhost fixes Calendly)

Was this requested by a maintainer or owner?

No — community bug report with maintainer review pending.

Real behavior proof (required for external PRs)

  • Behavior or issue addressed: MCP OAuth regex crash, [object Response] error masking, Calendly DCR redirect rejection

  • Real environment tested: Local Node v25.6.0 on Windows checkout (E:/Projects/openclaw), branch fix/issue-91433-mcp-oauth-regex

  • Exact steps or command run after this patch:

    • node -e repro script for PayPal-like TypeBox pattern compile and body-less OAuth error normalization (copied output below)
    • node scripts/run-vitest.mjs src/agents/mcp-oauth.test.ts -t "legacy loopback|redirect registration|retries MCP"
    • node scripts/run-vitest.mjs src/agents/mcp-http-fetch.test.ts -t "compatible with MCP SDK"
    • pnpm exec oxlint on changed source files
  • Evidence after fix (screenshot, recording, terminal capture, console output, redacted runtime log, linked artifact, or copied live output):

Copied terminal output from a local Node repro after this patch:

Terminal output (PayPal-like TypeBox pattern):
  before: Invalid regular expression: /^https\:\/\///u: Invalid escape
  after repair compiles as: ^https:///
Terminal output (OAuth DCR error body path):
  foreign response instanceof Response: false
  wrapped response instanceof Response: true
  parsed error_description: bad redirect
  • Observed result after fix: PayPal-like unicode-invalid pattern compiles after repair; body-less foreign fetch responses normalize to global Response so OAuth error JSON is readable; localhost redirect retry is covered by unit test.
  • What was not tested: Live openclaw mcp login/probe against PayPal or Calendly
  • Proof limitations or environment constraints: No access to external OAuth AS credentials/endpoints in this environment; reporter already confirmed localhost redirect fixes Calendly live.
  • Before evidence (optional but encouraged): Issue MCP remote OAuth: two bugs block streamable-http servers (regex \: under /u; OAuth errors surfaced as [object Response]) #91433 repro logs (Invalid regular expression: /^https\:\/\//u, [object Response])

Tests and validation

Which commands did you run?

  • node scripts/run-vitest.mjs src/agents/mcp-oauth.test.ts -t "legacy loopback|redirect registration|retries MCP"
  • node scripts/run-vitest.mjs src/agents/mcp-http-fetch.test.ts -t "compatible with MCP SDK"
  • pnpm exec oxlint src/shared/json-schema-defaults.ts src/agents/mcp-oauth.ts src/agents/mcp-http-fetch.ts

What regression coverage was added or updated?

  • mcp-oauth.test.ts: legacy default preserved; localhost retry after redirect registration rejection
  • mcp-http-fetch.test.ts: body-less cross-realm fetch response works with MCP SDK parseErrorResponse
  • agent-bundle-mcp-runtime.test.ts: unicode-invalid JSON Schema pattern compiles and validates

What failed before this fix, if known?

  • PayPal probe: Invalid regular expression: /^https\:\/\//u: Invalid escape
  • Calendly login: Invalid OAuth error response ... "[object Response]"
  • Calendly DCR: invalid_client_metadata for 127.0.0.1 redirect (reporter confirmed localhost works)

If no test was added, why not?

N/A — regression tests added for all three fixes.

Risk checklist

Did user-visible behavior change? (Yes)

New localhost redirect retry on DCR rejection; legacy 127.0.0.1 default preserved for existing registrations.

Did config, environment, or migration behavior change? (No)

Did security, auth, secrets, network, or tool execution behavior change? (Yes)

OAuth redirect registration fallback and MCP HTTP response normalization for OAuth error readability.

What is the highest-risk area?

OAuth redirect fallback after dynamic client registration failure.

How is that risk mitigated?

Legacy default unchanged; localhost used only on explicit DCR redirect rejection without configured override; existing --oauth-redirect-url override remains.

Current review state

What is the next action?

Wait for maintainer review. CI is green on head 564eac41ac; request another ClawSweeper re-review after the prior run timed out (Codex ETIMEDOUT).

What is still waiting on author, maintainer, CI, or external proof?

  • ClawSweeper re-review on 564eac41ac did not complete (timeout); no fresh bot verdict yet
  • Live PayPal/Calendly openclaw mcp login/probe proof still unavailable in contributor environment

Which bot or reviewer comments were addressed?

  • All prior P1 code findings addressed in 564eac41ac (body-less error text, redirect persistence)
  • CI: check-lint, Real behavior proof, checks-node-agentic-agents-support, checks-node-agentic-agents-core-runtime — pass on latest push

@LiuwqGit LiuwqGit requested a review from a team as a code owner June 8, 2026 15:06
@openclaw-barnacle openclaw-barnacle Bot added agents Agent runtime and tooling size: S triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels Jun 8, 2026
@clawsweeper

clawsweeper Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed June 8, 2026, 8:47 PM ET / 00:47 UTC.

Summary
The PR updates MCP OAuth redirect fallback behavior, MCP HTTP response wrapping for SDK OAuth error parsing, JSON Schema pattern normalization, and related regression tests.

PR surface: Source +121, Tests +145. Total +266 across 6 files.

Reproducibility: yes. for the PR-introduced defect by source inspection: the fallback writes redirectUrl before the second auth attempt, and runMcpOAuthLogin reads that store value for later unconfigured logins. I did not run the full CLI OAuth flow because this is a read-only review and live credentials are not available.

Review metrics: 1 noteworthy metric.

  • OAuth fallback state: 1 persisted redirect field added. The new stored redirectUrl changes future MCP OAuth login behavior after the fallback path.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦪 silver shellfish
Patch quality: 🦪 silver shellfish
Result: blocked until stronger real behavior proof is added.

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

Rank-up moves:

  • [P2] Fix redirect persistence so failed fallback attempts do not change future logins.
  • [P2] Add redacted openclaw mcp login/openclaw mcp probe terminal or log proof for the fallback and code-exchange path, or get maintainer proof acceptance.

Proof guidance:

  • [P1] Needs stronger real behavior proof before merge: Copied terminal output covers the schema and response-normalization repros, but the PR still lacks redacted real openclaw mcp login/probe proof for the automatic fallback and later code exchange; after adding proof, updating the PR body should trigger re-review, or a maintainer can comment @clawsweeper re-review. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Risk before merge

  • [P2] Merging as-is can leave a failed or false-positive redirect fallback stored as localhost, changing later unconfigured MCP OAuth logins away from the shipped 127.0.0.1 default.
  • [P2] The PR still lacks redacted live openclaw mcp login/probe proof for the automatic fallback and later code exchange against a real OAuth MCP server or maintainer acceptance of that proof gap.

Maintainer options:

  1. Persist fallback only after success (recommended)
    Move the stored redirectUrl write until the localhost retry returns authorized or redirect so failed fallback attempts do not poison later logins.
  2. Accept sticky fallback intentionally
    Maintainers can explicitly accept that any redirect-registration-looking failure switches future unconfigured logins to localhost until credentials are cleared.

Next step before merge

  • [P1] The remaining action is not a safe automation marker because the external PR also needs contributor or maintainer real-behavior proof for the auth-provider flow.

Security
Needs attention: The diff does not add third-party code execution or dependency changes, but the OAuth redirect fallback can persist an unproven auth-provider route after a failed retry.

Review findings

  • [P1] Persist the localhost redirect only after the retry succeeds — src/agents/mcp-oauth.ts:276
Review details

Best possible solution:

Keep the legacy default and explicit oauth.redirectUrl override, retry with localhost in memory, persist localhost only after the retry succeeds, then require redacted live CLI proof or explicit maintainer acceptance before merge.

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

Yes for the PR-introduced defect by source inspection: the fallback writes redirectUrl before the second auth attempt, and runMcpOAuthLogin reads that store value for later unconfigured logins. I did not run the full CLI OAuth flow because this is a read-only review and live credentials are not available.

Is this the best way to solve the issue?

No as written; the PR uses the right owner path, but the redirect store update should be conditional on a successful fallback attempt. The response wrapping and schema-pattern repair are plausible narrow fixes after dependency/source inspection.

Full review comments:

  • [P1] Persist the localhost redirect only after the retry succeeds — src/agents/mcp-oauth.ts:276
    This writes redirectUrl: localhost before the fallback auth attempt proves it can complete. If the retry also fails, or if invalid_client_metadata matched a non-redirect client metadata problem, the store is left pinned to localhost and later openclaw mcp login calls no longer use the legacy 127.0.0.1 default even though the fallback never worked. Keep the in-memory retry, but only persist the fallback redirect after the retry returns authorized or redirect, and add a regression test for the failed-retry path.
    Confidence: 0.9

Overall correctness: patch is incorrect
Overall confidence: 0.88

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🦪 silver shellfish.
  • remove rating: 🦐 gold shrimp: Current PR rating is rating: 🦪 silver shellfish, so this older rating label is no longer current.

Label justifications:

  • P1: The PR changes MCP OAuth login behavior for remote servers and can affect existing auth-provider setups.
  • merge-risk: 🚨 compatibility: The fallback stores a new redirect choice that can change future upgrade/login behavior for existing MCP OAuth users.
  • merge-risk: 🚨 auth-provider: The changed OAuth redirect registration and code-exchange flow directly affects auth-provider routing and credentials.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🦪 silver shellfish.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs stronger real behavior proof before merge: Copied terminal output covers the schema and response-normalization repros, but the PR still lacks redacted real openclaw mcp login/probe proof for the automatic fallback and later code exchange; after adding proof, updating the PR body should trigger re-review, or a maintainer can comment @clawsweeper re-review. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
Evidence reviewed

PR surface:

Source +121, Tests +145. Total +266 across 6 files.

View PR surface stats
Area Files Added Removed Net
Source 3 144 23 +121
Tests 3 146 1 +145
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 6 290 24 +266

Security concerns:

  • [medium] Sticky redirect fallback after failed retry — src/agents/mcp-oauth.ts:276
    A failed fallback can leave future OAuth logins using localhost instead of the shipped 127.0.0.1 default, changing auth-provider behavior without a successful registration or code exchange.
    Confidence: 0.88

What I checked:

  • root policy read: The full root AGENTS.md was read; its auth-provider, fallback, dependency-contract, and proof requirements apply to this PR. (AGENTS.md:1, 5b76436c452a)
  • scoped policy read: src/agents/AGENTS.md was read fully; the PR touches agent MCP runtime code and tests under that scope. (src/agents/AGENTS.md:1, 5b76436c452a)
  • current OAuth behavior: Current main uses the shipped 127.0.0.1 redirect default and has no persisted redirectUrl fallback in the OAuth store. (src/agents/mcp-oauth.ts:47, 5b76436c452a)
  • PR fallback persistence: The PR writes LOCALHOST_REDIRECT_URL into the OAuth store before the fallback auth attempt returns authorized or redirect. (src/agents/mcp-oauth.ts:276, 564eac41acb0)
  • MCP SDK contract: @modelcontextprotocol/sdk 1.29.0 parseErrorResponse reads text only from a global Response, and auth() uses provider.clientMetadata for DCR plus provider.redirectUrl for authorization and token exchange. (package.json:1878, 5b76436c452a)
  • CLI entry point: openclaw mcp login calls runMcpOAuthLogin with the MCP HTTP fetch wrapper, so the change affects the documented public OAuth login flow. (src/cli/mcp-cli.ts:1244, 5b76436c452a)

Likely related people:

  • openclaw/openclaw-secops: CODEOWNERS assigns src/agents/auth.ts and nested auth paths to this team, and the PR changes src/agents/mcp-oauth.ts. (role: CODEOWNERS auth owner; confidence: high; files: .github/CODEOWNERS, src/agents/mcp-oauth.ts)
  • Kevin Lin: git blame/log in this checkout point current central MCP/auth/schema lines to a recent broad revert commit touching these files; this is a routing clue, not blame for the bug. (role: recent area contributor; confidence: low; commits: 4c5d8afa38c0; files: src/agents/mcp-oauth.ts, src/agents/mcp-http-fetch.ts, src/shared/json-schema-defaults.ts)
  • Vincent Koc: git log -S and file history show the latest release baseline commit touching the central MCP OAuth/fetch/schema files. (role: release baseline contributor; confidence: low; commits: 2e08f0f4221f; files: src/agents/mcp-oauth.ts, src/agents/mcp-http-fetch.ts, src/shared/json-schema-defaults.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.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 8, 2026
@LiuwqGit

LiuwqGit commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

Follow-up pushed addressing ClawSweeper review:

  • Redirect compatibility: keep legacy 127.0.0.1 default; retry DCR with localhost only after invalid_client_metadata / redirect_uri rejection (no configured override).
  • OAuth error regression: test now uses a body-less foreign response — the path where current main returned an unparsed response to MCP SDK parseErrorResponse.
  • Lint: fixed no-new side-effect probes in JSON Schema pattern repair.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 8, 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:

@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels Jun 8, 2026
@clawsweeper clawsweeper Bot added P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. labels Jun 8, 2026
@LiuwqGit

LiuwqGit commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

Second follow-up (564eac41ac) addresses ClawSweeper P1 findings:

  1. Body-less OAuth errors: ensureGlobalFetchResponse now awaits response.text() when body is null, so MCP SDK parseErrorResponse receives JSON instead of an empty body.
  2. Redirect persistence: localhost fallback writes redirectUrl into the OAuth store; subsequent openclaw mcp login --code reuses the same redirect URI.

Tests added/updated:

  • mcp-http-fetch.test.ts — body-less foreign response regression (now passes locally + CI)
  • mcp-oauth.test.ts — persisted redirect across code exchange

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 8, 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 rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 9, 2026
@LiuwqGit

LiuwqGit commented Jun 9, 2026

Copy link
Copy Markdown
Contributor Author

PR follow-up status on 564eac41ac:

  • CI: all required checks green (including check-lint, Real behavior proof, checks-node-agentic-agents-core-runtime)
  • Code: prior ClawSweeper P1 items addressed (body-less OAuth error text + persisted localhost redirect for --code exchange)
  • ClawSweeper: last re-review failed with Codex ETIMEDOUT before completing — requesting a fresh review

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 9, 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:

@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Jun 9, 2026
@vincentkoc vincentkoc self-assigned this Jun 10, 2026
LiuwqGit and others added 6 commits June 11, 2026 01:09
Preserve 127.0.0.1 default, retry DCR with localhost on rejection,
fix lint no-new probes, and test body-less OAuth error responses.

Co-authored-by: Cursor <cursoragent@cursor.com>
Persist localhost redirect after DCR fallback so --code exchange matches,
and read body-less foreign response text before SDK error parsing.

Co-authored-by: Cursor <cursoragent@cursor.com>
@vincentkoc vincentkoc force-pushed the fix/issue-91433-mcp-oauth-regex branch from 564eac4 to 967d448 Compare June 10, 2026 16:10
@vincentkoc vincentkoc merged commit 7a34986 into openclaw:main Jun 10, 2026
20 of 22 checks passed
@vincentkoc

Copy link
Copy Markdown
Member

Maintainer fixes and pre-merge proof are complete.

Autoreview found and this branch now fixes:

  • body-forbidden 204/205/304 response normalization
  • redirect fallback firing during authorization-code exchange
  • failed localhost fallbacks being persisted
  • OAuth retry state being overwritten after a successful redirect
  • repaired patternProperties collisions, including prototype-named keys

Verification on head 967d4486cfbdf20ef2768efbd3e90785c52ca088:

  • node scripts/run-vitest.mjs src/agents/mcp-http-fetch.test.ts src/agents/mcp-oauth.test.ts src/agents/agent-bundle-mcp-runtime.test.ts src/shared/json-schema-defaults.test.ts — 57 tests passed
  • .agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main ... — clean; no accepted/actionable findings
  • dependency contract inspected directly against @modelcontextprotocol/sdk 1.29.0 source/types

Broad remote proof gap: Crabbox Azure exhausted regional core quota/capacity; Blacksmith fallback is unavailable because the blacksmith CLI is not installed; brokered AWS is not authenticated on this host. No broad gate was represented as passing.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 11, 2026
…penclaw#91451)

* fix(mcp): repair OAuth redirect, errors, and unicode schema patterns

Fixes openclaw#91433

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(mcp): address PR review on redirect compat and OAuth errors

Preserve 127.0.0.1 default, retry DCR with localhost on rejection,
fix lint no-new probes, and test body-less OAuth error responses.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(mcp): preserve OAuth redirect and error body text

Persist localhost redirect after DCR fallback so --code exchange matches,
and read body-less foreign response text before SDK error parsing.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(mcp): harden OAuth and schema normalization

* fix(mcp): persist only successful OAuth fallback

* fix(mcp): preserve OAuth retry state

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
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

agents Agent runtime and tooling merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P1 High-priority user-facing bug, regression, or broken workflow. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. size: M status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

MCP remote OAuth: two bugs block streamable-http servers (regex \: under /u; OAuth errors surfaced as [object Response])

2 participants