Skip to content

fix(auth): harden Codex auth probes#87559

Merged
steipete merged 2 commits into
openclaw:mainfrom
nxmxbbd:nex/codex-auth-probe-20260528135601
May 29, 2026
Merged

fix(auth): harden Codex auth probes#87559
steipete merged 2 commits into
openclaw:mainfrom
nxmxbbd:nex/codex-auth-probe-20260528135601

Conversation

@nxmxbbd

@nxmxbbd nxmxbbd commented May 28, 2026

Copy link
Copy Markdown
Contributor

Summary

What problem does this PR solve?

  • Makes models status --probe --probe-provider openai-codex --probe-profile <id> run as a raw OpenClaw model probe with the selected OAuth profile instead of inheriting the normal Codex harness/session path.
  • Ensures native Codex Responses probe payloads still send non-empty instructions when raw probe mode suppresses the normal system prompt.
  • Keeps the change narrow: no stream-resolution changes, no config/schema changes, no generated output.

Why does this matter now?

The auth probe is meant to answer whether a selected profile can complete a minimal model round-trip. If the probe runs through the normal session harness or sends an empty native Responses instruction field, it can fail or exercise a different path than the status command is trying to validate.

What is the intended outcome?

A selected openai-codex OAuth profile can be probed through the built-in OpenClaw model-run path, while native Codex Responses receives a small default instruction only when the raw probe would otherwise produce no instructions.

What is intentionally out of scope?

  • Existing session continuation and stream-resolution ownership.
  • General provider discovery or credential-store migration behavior.
  • Non-native/custom Codex-compatible Responses backends.

What does success look like?

The CLI probe reports status: "ok" for the selected profile, focused regression tests cover the call shape and payload fallback, and existing stream-resolution tests continue to pass.

What should reviewers focus on?

The runtime/auth fields passed by the probe (agentHarnessRuntimeOverride, modelRun, authProfileId) and the native-only scoping of the default instructions fallback.

Linked context

Which issue does this close?

Does not close an issue.

Which issues, PRs, or discussions are related?

Related #75272. This branch is a current-main narrow implementation for the auth-probe path and intentionally avoids changing stream resolution.

Was this requested by a maintainer or owner?

No maintainer request.

Real behavior proof (required for external PRs)

  • Behavior or issue addressed:

models status --probe for a selected openai-codex OAuth profile should exercise a raw OpenClaw model-run probe and complete a minimal round-trip.

  • Real environment tested:

Local synthetic-current-main checkout: this patch applied cleanly on top of upstream/main bd6a404aa32357c21d6588a35b18e1034fe4b610 at proof time, using an existing local OAuth profile and a minimal config file at /tmp/openclaw-empty-config.json to avoid unrelated legacy config fields. Final pre-push fetch later moved upstream/main to 05f357b13bb348f408b9a13a84e675ffe5dbd38f; the branch still had zero touched-file overlap with base changes and git merge-tree --write-tree upstream/main HEAD was clean.

  • Exact steps or command run after this patch:
OPENCLAW_CONFIG_PATH=/tmp/openclaw-empty-config.json \
  node --import tsx src/entry.ts models status \
    --agent main \
    --probe \
    --probe-provider openai-codex \
    --probe-profile openai-codex:default \
    --probe-timeout 90000 \
    --probe-max-tokens 16 \
    --json
  • Evidence after fix (screenshot, recording, terminal capture, console output, redacted runtime log, linked artifact, or copied live output):

Terminal capture from the synthetic-current-main checkout, copied live output with secrets redacted and only the public-safe probe result included:

exit 0
duration_s 88.61
stdout_bytes 6802
stderr_bytes 77
stdout_prefix_lines ['[agents/auth-profiles] using external OAuth credential after refresh [REDACTED]']
probe_summary.results[0]:
{
  "provider": "openai-codex",
  "model": "openai-codex/gpt-5.4",
  "profileId": "openai-codex:default",
  "label": "openai-codex:default",
  "source": "profile",
  "mode": "oauth",
  "status": "ok",
  "latencyMs": 12958
}
proof_ok True
  • Observed result after fix:

The command exited 0 and the parsed probe result for openai-codex:default reported status: "ok" on a checkout with this patch applied to upstream/main at proof time. The later final pre-push fresh-base check found no touched-file overlap and a clean merge-tree against 05f357b13bb348f408b9a13a84e675ffe5dbd38f.

  • What was not tested:

I did not test every provider profile combination, expired/invalid OAuth recovery, or hosted CI before opening. The real run used one local openai-codex:default OAuth profile.

  • Proof limitations or environment constraints:

The local raw stdout also contained one auth-profile refresh warning before the JSON object, so the evidence above is the sanitized terminal summary and probe-result excerpt rather than the full raw status output. The warning was unrelated to this patch and the parsed probe result completed successfully.

  • Before evidence (optional but encouraged):

Before the patch, focused RED checks showed the raw Codex Responses payload could have instructions === undefined, and the probe runner did not pass raw model-run/runtime override fields for the openai-codex probe path.

Tests and validation

Which commands did you run?

git diff --check -- src/commands/models/list.probe.ts src/commands/models/list.probe.test.ts src/agents/openai-transport-stream.ts src/agents/openai-transport-stream.test.ts
node_modules/.bin/oxfmt --check src/commands/models/list.probe.ts src/commands/models/list.probe.test.ts src/agents/openai-transport-stream.ts src/agents/openai-transport-stream.test.ts
node scripts/run-vitest.mjs src/commands/models/list.probe.test.ts src/agents/openai-transport-stream.test.ts src/agents/embedded-agent-runner/stream-resolution.test.ts --root /tmp/openclaw-codex-auth-probe-20260528135601
node scripts/run-vitest.mjs src/agents/harness/selection.test.ts src/agents/harness/runtime-plugin.test.ts --root /tmp/openclaw-codex-auth-probe-20260528135601

# Additional drift proof on upstream/main at proof time (bd6a404aa3) with this patch applied:
git apply --check /tmp/openclaw-codex-auth-probe-current-main.patch
git diff --check --cached -- src/commands/models/list.probe.ts src/commands/models/list.probe.test.ts src/agents/openai-transport-stream.ts src/agents/openai-transport-stream.test.ts
node_modules/.bin/oxfmt --check src/commands/models/list.probe.ts src/commands/models/list.probe.test.ts src/agents/openai-transport-stream.ts src/agents/openai-transport-stream.test.ts
node scripts/run-vitest.mjs src/commands/models/list.probe.test.ts src/agents/openai-transport-stream.test.ts src/agents/embedded-agent-runner/stream-resolution.test.ts --root /tmp/openclaw-codex-auth-probe-mergeproof-20260528150011
node scripts/run-vitest.mjs src/agents/harness/selection.test.ts src/agents/harness/runtime-plugin.test.ts --root /tmp/openclaw-codex-auth-probe-mergeproof-20260528150011

What regression coverage was added or updated?

  • list.probe.test.ts now asserts the selected openai-codex profile is forwarded with raw OpenClaw model-run fields.
  • openai-transport-stream.test.ts covers native fallback instructions and confirms custom/proxy Codex-compatible Responses backends are not changed.

What failed before this fix, if known?

The new focused checks failed before the production changes: the probe call lacked the raw model-run/runtime override fields, and the native raw Responses payload had no instructions.

If no test was added, why not?

Tests were added.

Risk checklist

Did user-visible behavior change? (Yes/No)

Yes, for models status --probe when probing selected openai-codex profiles.

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

No.

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

Yes, auth probe execution now pins the built-in runtime path and preserves the selected OAuth profile explicitly. It does not add new credential storage or logging.

What is the highest-risk area?

Accidentally changing normal Codex session stream ownership or applying the fallback instructions to custom/proxy backends.

How is that risk mitigated?

The patch does not touch stream-resolution.ts; existing stream-resolution tests still pass. The fallback instructions are gated by native backend detection, with a regression test proving custom/proxy backends still omit the fallback.

Current review state

What is the next action?

Maintainer review and CI after the PR is opened.

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

No known author-side code blocker. CI has not run on this branch yet; local drift proof applied this patch to upstream/main at proof time and reran the focused checks plus real CLI probe. Final pre-push fresh-base check against 05f357b13bb348f408b9a13a84e675ffe5dbd38f had zero touched-file overlap and a clean merge-tree.

Which bot or reviewer comments were addressed?

No comments on this PR yet.

@openclaw-barnacle openclaw-barnacle Bot added commands Command implementations agents Agent runtime and tooling size: S proof: supplied External PR includes structured after-fix real behavior proof. labels May 28, 2026
@clawsweeper

clawsweeper Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed May 28, 2026, 8:16 PM ET / 00:16 UTC.

Summary
The PR routes selected openai-codex auth probes through raw OpenClaw model-run mode, adds native Codex Responses fallback instructions, bootstraps OpenClaw-native Codex OAuth profile loading, and refreshes focused tests/prompt snapshots.

PR surface: Source +29, Tests +131. Total +160 across 11 files.

Reproducibility: yes. source-reproducible: current main builds the selected-profile probe without raw model-run/runtime override and can produce undefined native Codex Responses instructions when the raw probe has no system prompt. I did not run a live failing current-main probe in this read-only review.

Review metrics: 1 noteworthy metric.

  • Auth-provider routing: 1 probe/runtime routing path changed. Selected openai-codex auth probes now force OpenClaw runtime/model-run behavior, so maintainers should notice the provider-auth decision before merge.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦪 silver shellfish
Patch quality: 🐚 platinum hermit
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:

  • [P1] Add redacted current-head terminal/live output for head 784a68d showing the selected openai-codex OAuth probe exits 0 with status ok.
  • [P1] Have a maintainer explicitly approve or verify the auth-provider routing change before merge.

Proof guidance:

  • [P1] Needs stronger real behavior proof before merge: The PR body has redacted live output, but it is not tied to the latest head after later auth-overlay and snapshot commits, so current-head proof is still needed before merge. 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

  • [P1] Current-head real behavior proof is insufficient for head 784a68d after later runtime auth-overlay and prompt snapshot commits; before merge, reviewers need redacted terminal/live output for the selected openai-codex OAuth probe on the current head.
  • [P1] The diff changes which runtime and OAuth profile path validates selected openai-codex probes and native Codex Responses auth bootstrap, so maintainers should explicitly own that auth-provider routing before merge.
  • [P1] Focused tests and snapshot checks were listed in the PR body, but this read-only review did not rerun artifact-producing tests against the latest head.

Maintainer options:

  1. Refresh current-head auth proof (recommended)
    Update the PR body with redacted terminal/live output proving head 784a68d runs the selected openai-codex OAuth probe successfully after the auth-overlay change.
  2. Maintainer-owned verification
    A maintainer can accept the auth-routing risk by recording their own local or Crabbox proof and explicitly approving the OpenClaw-native Codex auth path before merge.

Next step before merge

  • [P1] Manual review should verify current-head proof and own the auth-provider routing change; this review did not find a narrow automated code repair.

Security
Cleared: The diff changes OAuth profile routing for probes but adds no credential logging, storage format, dependency, workflow, or supply-chain change; no concrete security issue found.

Review details

Best possible solution:

Merge after current-head redacted live probe proof, maintainer approval of the auth-provider routing, and green focused tests plus prompt snapshot checks.

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

Yes, source-reproducible: current main builds the selected-profile probe without raw model-run/runtime override and can produce undefined native Codex Responses instructions when the raw probe has no system prompt. I did not run a live failing current-main probe in this read-only review.

Is this the best way to solve the issue?

Yes, broadly: the PR uses a narrow runtime override plus native-only payload fallback and focused regression tests. The remaining blocker is proof and maintainer ownership of the auth-provider routing, not a clear alternative implementation.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P2: This is a normal-priority auth probe bug fix with limited blast radius but meaningful operator impact for validating Codex OAuth profiles.
  • merge-risk: 🚨 auth-provider: The PR changes the runtime and profile-bootstrap path used to validate openai-codex OAuth probes.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🐚 platinum hermit.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs stronger real behavior proof before merge: The PR body has redacted live output, but it is not tied to the latest head after later auth-overlay and snapshot commits, so current-head proof is still needed before merge. 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 +29, Tests +131. Total +160 across 11 files.

View PR surface stats
Area Files Added Removed Net
Source 3 39 10 +29
Tests 8 170 39 +131
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 11 209 49 +160

What I checked:

  • Repository policy applied: The root policy treats provider routing, auth/session state, fallbacks, and upgrade-sensitive behavior as merge risk even with green CI; scoped agent guidance also prefers focused helper tests for embedded-runner behavior. (AGENTS.md:17, fc8b57e0cf12)
  • Current main probe path: Current main forwards the selected auth profile into runEmbeddedAgent but does not set raw model-run mode or force the OpenClaw runtime for openai-codex probes. (src/commands/models/list.probe.ts:513, fc8b57e0cf12)
  • PR probe routing change: The PR head adds an openai-codex-only OpenClaw runtime override and sets modelRun: true for probe execution. (src/commands/models/list.probe.ts:525, 784a68d7d36f)
  • PR native Codex payload fallback: The PR head adds a native-backend-only default instruction when Codex Responses instructions would otherwise be empty, while preserving undefined instructions for custom/proxy Codex-compatible backends in tests. (src/agents/openai-transport-stream.ts:1996, 784a68d7d36f)
  • PR auth bootstrap change: The PR head also changes OpenClaw-native Codex Responses runs to load the openai-codex external auth provider scope before the auth store is built. (src/agents/embedded-agent-runner/run.ts:784, 784a68d7d36f)
  • Current-head proof gap: The PR body includes useful redacted terminal output, but the recorded live probe is tied to earlier synthetic-main/base SHAs and does not identify head 784a68d after the later auth-overlay and snapshot commits. (784a68d7d36f)

Likely related people:

  • vincentkoc: Current-main blame for the auth probe call shape, Codex Responses request shaping, and embedded-runner auth bootstrap region points to commit 6d90e00, though the checkout history is shallow. (role: current source area contributor; confidence: medium; commits: 6d90e00fa3; files: src/commands/models/list.probe.ts, src/agents/openai-transport-stream.ts, src/agents/embedded-agent-runner/run.ts)
  • steipete: Recent PR-head commits add the auth-overlay preservation and prompt snapshot refreshes, and the PR is assigned to this person in the provided timeline. (role: recent branch and adjacent auth/probe contributor; confidence: high; commits: a794be30e1fe, e7a031004923, 54ee231280e1; files: src/agents/embedded-agent-runner/run.ts, test/fixtures/agents/prompt-snapshots/codex-runtime-happy-path/*)
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 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 May 28, 2026
@clawsweeper

clawsweeper Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg: ✨ hatched 🌱 uncommon Sunspot Lint Imp. Rarity: 🌱 uncommon. Trait: stacks clean commits.

Details

Share on X: post this hatch
Copy: My PR egg hatched a 🌱 uncommon Sunspot Lint Imp in ClawSweeper.
Hatchability:

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

About:

  • Eggs appear after real-behavior proof passes. They are collectible flavor only.
  • Review momentum changes the shell state: follow-up work warms it, re-review makes it wobble, and a clean final review lets it hatch.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

@steipete steipete self-assigned this May 28, 2026
steipete added a commit to nxmxbbd/openclaw that referenced this pull request May 28, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 28, 2026
@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. and removed 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. labels May 28, 2026
@steipete steipete force-pushed the nex/codex-auth-probe-20260528135601 branch from 0db73df to 79e1410 Compare May 28, 2026 23:12
steipete added a commit to nxmxbbd/openclaw that referenced this pull request May 28, 2026
steipete added a commit to nxmxbbd/openclaw that referenced this pull request May 28, 2026
steipete added a commit to nxmxbbd/openclaw that referenced this pull request May 28, 2026
@steipete steipete force-pushed the nex/codex-auth-probe-20260528135601 branch from 79e1410 to da8c907 Compare May 28, 2026 23:30
steipete added a commit to nxmxbbd/openclaw that referenced this pull request May 28, 2026
steipete added a commit to nxmxbbd/openclaw that referenced this pull request May 28, 2026
@steipete steipete force-pushed the nex/codex-auth-probe-20260528135601 branch from da8c907 to 709af3b Compare May 28, 2026 23:47
steipete added a commit to nxmxbbd/openclaw that referenced this pull request May 28, 2026
@clawsweeper clawsweeper Bot removed the rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. label May 28, 2026
@clawsweeper clawsweeper Bot added the rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. label May 28, 2026
steipete added a commit to nxmxbbd/openclaw that referenced this pull request May 29, 2026
steipete added a commit to nxmxbbd/openclaw that referenced this pull request May 29, 2026
steipete added a commit to nxmxbbd/openclaw that referenced this pull request May 29, 2026
@steipete steipete force-pushed the nex/codex-auth-probe-20260528135601 branch from 709af3b to 784a68d Compare May 29, 2026 00:10
steipete added a commit to nxmxbbd/openclaw that referenced this pull request May 29, 2026
steipete added a commit to nxmxbbd/openclaw that referenced this pull request May 29, 2026
@steipete steipete force-pushed the nex/codex-auth-probe-20260528135601 branch from 784a68d to 11cab15 Compare May 29, 2026 00:52
@steipete steipete merged commit 37c5003 into openclaw:main May 29, 2026
107 of 109 checks passed
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 29, 2026
* fix(auth): harden Codex auth probes

* fix: preserve Codex probe auth overlay (openclaw#87559)

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
@clawsweeper clawsweeper Bot mentioned this pull request May 30, 2026
25 tasks
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request May 31, 2026
…026.5.28) (#759)

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.27` → `2026.5.28` |

---

### Release Notes

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

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

[Compare Source](openclaw/openclaw@v2026.5.27...v2026.5.28)

##### Highlights

- Agent and Codex runtime recovery is steadier: subagents keep cwd/workspace separation, hook context stays prompt-local, session locks release on timeout abort while live OpenClaw locks survive cleanup, stale restart continuations are avoided, and Codex app-server/helper failures no longer tear down shared runtime state. ([#&#8203;87218](openclaw/openclaw#87218), [#&#8203;86875](openclaw/openclaw#86875), [#&#8203;87409](openclaw/openclaw#87409), [#&#8203;87399](openclaw/openclaw#87399), [#&#8203;87375](openclaw/openclaw#87375), [#&#8203;88129](openclaw/openclaw#88129))
- Channel delivery and session identity got safer across outbound plugin hooks, Matrix room ids, iMessage reactions/approvals, Slack final replies, Discord recovered tool warnings, runtime-config message actions, WhatsApp profile auth roots, Telegram polling, and Microsoft Teams service URL trust checks. ([#&#8203;73706](openclaw/openclaw#73706), [#&#8203;75670](openclaw/openclaw#75670), [#&#8203;87366](openclaw/openclaw#87366), [#&#8203;87451](openclaw/openclaw#87451), [#&#8203;87334](openclaw/openclaw#87334), [#&#8203;84535](openclaw/openclaw#84535), [#&#8203;82492](openclaw/openclaw#82492), [#&#8203;83304](openclaw/openclaw#83304), [#&#8203;87160](openclaw/openclaw#87160))
- Mobile and chat surfaces got a broader refresh: the iOS Pro UI, hosted push relay default, realtime Talk tab playback, Gateway chat transport, onboarding, Talk permissions, WebChat reconnect delivery, and session picker behavior now preserve more state across reconnects and empty searches. ([#&#8203;87367](openclaw/openclaw#87367), [#&#8203;87531](openclaw/openclaw#87531), [#&#8203;87682](openclaw/openclaw#87682), [#&#8203;88096](openclaw/openclaw#88096), [#&#8203;88105](openclaw/openclaw#88105)) Thanks [@&#8203;ngutman](https://github.com/ngutman) and [@&#8203;BunsDev](https://github.com/BunsDev).
- Browser, channel, and automation inputs are stricter: Browser tool timeouts, viewport/tab indices, Gateway ports, cron retry handling, Discord component ids, schema array refs, Telegram callback pages, and channel progress callbacks now reject malformed values earlier and preserve the intended delivery context. ([#&#8203;82887](openclaw/openclaw#82887))
- Provider, media, and document coverage expands with Claude Opus 4.8, Fal Krea image schemas, NVIDIA featured models, MiniMax streaming music responses, encrypted PDF extraction, voice model catalogs, GitHub Copilot agent runtime support, and a Codex Supervisor plugin path for delegated Codex workflows. ([#&#8203;87845](openclaw/openclaw#87845), [#&#8203;87890](openclaw/openclaw#87890), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764), [#&#8203;87751](openclaw/openclaw#87751), [#&#8203;87794](openclaw/openclaw#87794))
- CLI, auth, doctor, and provider paths fail faster and recover more clearly: malformed numeric/version options are rejected, workspace dotenv provider credentials are ignored, heartbeat defaults, OAuth/token lifetimes, and local service startup requests are bounded, agent auth health labels are clearer, legacy `api_key` auth profiles migrate to canonical form, and restart guidance is actionable. ([#&#8203;87398](openclaw/openclaw#87398), [#&#8203;86281](openclaw/openclaw#86281), [#&#8203;87361](openclaw/openclaw#87361), [#&#8203;88133](openclaw/openclaw#88133), [#&#8203;83655](openclaw/openclaw#83655), [#&#8203;87559](openclaw/openclaw#87559), [#&#8203;88088](openclaw/openclaw#88088), [#&#8203;85924](openclaw/openclaw#85924)) Thanks [@&#8203;vincentkoc](https://github.com/vincentkoc) and [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- Plugin and Gateway hot paths do less repeated work while preserving cache correctness for install records, config JSON parsing, tool search catalogs, session stores, manifest model rows, auto-enabled plugin config, browser tokens, viewer assets, and release-split external plugin packages. ([#&#8203;86699](openclaw/openclaw#86699))
- Release, QA, and E2E validation now bound more log, artifact, harness, and cross-OS waits so failing lanes produce proof instead of hanging or false-greening.

##### Changes

- Status: show active subagent details in status output.
- Diffs: split the default language pack and expand default Diffs language coverage while keeping the host floor aligned. ([#&#8203;87370](openclaw/openclaw#87370), [#&#8203;87372](openclaw/openclaw#87372)) Thanks [@&#8203;RomneyDa](https://github.com/RomneyDa).
- ClawHub: add plugin display names plus skill verification and trust surfaces. ([#&#8203;87354](openclaw/openclaw#87354), [#&#8203;86699](openclaw/openclaw#86699)) Thanks [@&#8203;thewilloftheshadow](https://github.com/thewilloftheshadow) and [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- iOS: refresh the dev app with Pro Command, Chat, Agents, Settings, hosted push relay defaults, and realtime Talk playback wired to gateway sessions, diagnostics, chat, and realtime Talk. ([#&#8203;87367](openclaw/openclaw#87367), [#&#8203;88096](openclaw/openclaw#88096), [#&#8203;88105](openclaw/openclaw#88105)) Thanks [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin) and [@&#8203;ngutman](https://github.com/ngutman).
- Docs: clarify Codex computer-use setup, paste-token stdin auth setup, macOS gateway sleep troubleshooting, native Codex hook relay recovery, container model auth, install deployment cards, device-token admin gating, CLI setup flow compatibility, Notte cloud browser CDP setup, and backport targets. ([#&#8203;87313](openclaw/openclaw#87313), [#&#8203;63050](openclaw/openclaw#63050), [#&#8203;87685](openclaw/openclaw#87685)) Thanks [@&#8203;bdjben](https://github.com/bdjben), [@&#8203;liaoandi](https://github.com/liaoandi), and [@&#8203;thewilloftheshadow](https://github.com/thewilloftheshadow).
- PDF/tools: use ClawPDF for PDF extraction, support encrypted PDF extraction, and surface MCP structured content in agent tool results. ([#&#8203;87670](openclaw/openclaw#87670), [#&#8203;87751](openclaw/openclaw#87751))
- Providers: add Claude Opus 4.8 support, Fal Krea image model schemas, NVIDIA featured model catalogs, MiniMax streaming music responses, and provider-backed voice model catalogs. ([#&#8203;87845](openclaw/openclaw#87845), [#&#8203;87890](openclaw/openclaw#87890), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764), [#&#8203;87794](openclaw/openclaw#87794)) Thanks [@&#8203;eleqtrizit](https://github.com/eleqtrizit) and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Codex/GitHub: add the GitHub Copilot agent runtime and the Codex Supervisor plugin package.
- Plugins: externalize GitHub Copilot and Tokenjuice as official install-on-demand plugins with npm and ClawHub publish metadata.
- Workboard: add agent coordination tools for tracking and handing off active agent work.
- Discord: show commentary in progress drafts so live Discord runs expose useful in-progress context. ([#&#8203;85200](openclaw/openclaw#85200))
- Plugin SDK: add a reply payload sending hook for plugins that need to deliver channel-owned replies and flatten package types for SDK declarations. ([#&#8203;82823](openclaw/openclaw#82823), [#&#8203;87165](openclaw/openclaw#87165)) Thanks [@&#8203;piersonr](https://github.com/piersonr) and [@&#8203;RomneyDa](https://github.com/RomneyDa).
- Policy: add policy comparison, ingress-channel conformance, and sandbox-posture conformance checks. ([#&#8203;85572](openclaw/openclaw#85572), [#&#8203;85744](openclaw/openclaw#85744), [#&#8203;86768](openclaw/openclaw#86768))

##### Fixes

- Agents: fall back to local config pruning when the optional `agents delete` Gateway probe cannot authenticate, so offline installs can still delete agents without removing shared workspaces.
- Tighten phone-control mutation authorization \[AI]. ([#&#8203;87150](openclaw/openclaw#87150)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Clarify directive persistence authorization policy \[AI]. ([#&#8203;86369](openclaw/openclaw#86369)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Agents/Codex: keep spawned agent cwd/workspace state separated, forward ACP spawn attachments, keep hook context prompt-local, release session locks on timeout abort and runtime teardown without deleting live OpenClaw-owned locks during cleanup, avoid session event queue self-wait, clean up exec abort listeners, stream assistant deltas incrementally, recover raw missing-thread compaction failures, preserve rotated compaction session identity, keep compaction-timeout snapshots continuable, preserve shared app-server state across startup or helper failures, keep native hook relay alive across restarts and prune stale bridge files, close native hook relay replacement races, keep Claude live tool progress visible for watchdog recovery, suppress abandoned requester completion handoff, route workspace memory through tools, resolve Codex runtime models first, report quarantined dynamic tools, format `skills` command output, bind node auto-review to prepared plans, retry Claude CLI transcript probes, and bound compaction/steering retries. ([#&#8203;87218](openclaw/openclaw#87218), [#&#8203;86875](openclaw/openclaw#86875), [#&#8203;86123](openclaw/openclaw#86123), [#&#8203;88129](openclaw/openclaw#88129), [#&#8203;87399](openclaw/openclaw#87399), [#&#8203;87375](openclaw/openclaw#87375), [#&#8203;72574](openclaw/openclaw#72574), [#&#8203;87383](openclaw/openclaw#87383), [#&#8203;87400](openclaw/openclaw#87400), [#&#8203;83022](openclaw/openclaw#83022), [#&#8203;87671](openclaw/openclaw#87671), [#&#8203;87738](openclaw/openclaw#87738), [#&#8203;87747](openclaw/openclaw#87747), [#&#8203;87706](openclaw/openclaw#87706), [#&#8203;87546](openclaw/openclaw#87546), [#&#8203;87541](openclaw/openclaw#87541), [#&#8203;81048](openclaw/openclaw#81048)) Thanks [@&#8203;mbelinky](https://github.com/mbelinky), [@&#8203;Alix-007](https://github.com/Alix-007), [@&#8203;luoyanglang](https://github.com/luoyanglang), [@&#8203;yetval](https://github.com/yetval), [@&#8203;sjf](https://github.com/sjf), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;benjamin1492](https://github.com/benjamin1492), [@&#8203;c19354837](https://github.com/c19354837), [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev), [@&#8203;pfrederiksen](https://github.com/pfrederiksen), and [@&#8203;dodge1218](https://github.com/dodge1218).
- Codex Supervisor: keep real-home app-server MCP session listing on the loaded state path, bound stored history scans, and close WebSocket probes cleanly.
- Channels: thread canonical session keys into outbound hooks, preserve Matrix room-id case, keep fallback tool warnings mention-inert, retain delivered Slack final replies during late cleanup, continue iMessage polling after denied reactions, suppress duplicate native exec approvals, resolve Gateway message actions against the active runtime config, preserve Telegram SecretRef prompt config and polling keepalives, preserve WhatsApp profile auth roots, QR display, document filenames, and plugin hook config, suppress Discord recovered tool warnings, preserve the Discord voice outbound helper, cap Discord/Signal/Zalo channel request and container timeouts, and block untrusted Teams service URLs while keeping TeamsSDK patterns aligned. ([#&#8203;73706](openclaw/openclaw#73706), [#&#8203;75670](openclaw/openclaw#75670), [#&#8203;87366](openclaw/openclaw#87366), [#&#8203;87451](openclaw/openclaw#87451), [#&#8203;87465](openclaw/openclaw#87465), [#&#8203;87334](openclaw/openclaw#87334), [#&#8203;84535](openclaw/openclaw#84535), [#&#8203;76262](openclaw/openclaw#76262), [#&#8203;83304](openclaw/openclaw#83304), [#&#8203;82492](openclaw/openclaw#82492), [#&#8203;87581](openclaw/openclaw#87581), [#&#8203;77114](openclaw/openclaw#77114), [#&#8203;86426](openclaw/openclaw#86426), [#&#8203;85529](openclaw/openclaw#85529), [#&#8203;87160](openclaw/openclaw#87160)) Thanks [@&#8203;zeroaltitude](https://github.com/zeroaltitude), [@&#8203;lukeboyett](https://github.com/lukeboyett), [@&#8203;jarvis-mns1](https://github.com/jarvis-mns1), [@&#8203;xiaotian](https://github.com/xiaotian), [@&#8203;funmerlin](https://github.com/funmerlin), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;eleqtrizit](https://github.com/eleqtrizit), [@&#8203;heyitsaamir](https://github.com/heyitsaamir), [@&#8203;amittell](https://github.com/amittell), [@&#8203;lidge-jun](https://github.com/lidge-jun), [@&#8203;liorb-mountapps](https://github.com/liorb-mountapps), [@&#8203;masatohoshino](https://github.com/masatohoshino), [@&#8203;bladin](https://github.com/bladin), and [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- CLI/auth/doctor/providers: reject malformed numeric/timeout/subcommand-version inputs, ignore workspace dotenv provider credentials, wait for respawn child shutdown, bound heartbeat defaults plus Codex, GitHub Copilot, OpenAI, Anthropic, Google, Feishu, LM Studio, MiniMax, Xiaomi TTS, and local-provider OAuth/token/model requests, harden Codex auth probes, label auth health by agent, preserve explicit agentRuntime pins during Codex model migration, warm provider auth off the main thread, honor Codex response timeouts, stop migrating current Claude Haiku 4.5 profiles to Sonnet, bound local service startup, resolve GPT-5.5 without cached catalog, migrate legacy memory auto-provider config, rewrite non-canonical `api_key` auth profiles, and make doctor restart follow-ups actionable. ([#&#8203;87398](openclaw/openclaw#87398), [#&#8203;86281](openclaw/openclaw#86281), [#&#8203;87361](openclaw/openclaw#87361), [#&#8203;88133](openclaw/openclaw#88133), [#&#8203;83655](openclaw/openclaw#83655), [#&#8203;87559](openclaw/openclaw#87559), [#&#8203;87719](openclaw/openclaw#87719), [#&#8203;88088](openclaw/openclaw#88088), [#&#8203;85924](openclaw/openclaw#85924), [#&#8203;84362](openclaw/openclaw#84362)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@&#8203;samzong](https://github.com/samzong), [@&#8203;giodl73-repo](https://github.com/giodl73-repo), [@&#8203;alkor2000](https://github.com/alkor2000), [@&#8203;mmaps](https://github.com/mmaps), [@&#8203;nxmxbbd](https://github.com/nxmxbbd), and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Gateway/security/session state: expire browser tokens after auth rotation, scope assistant idempotency dedupe, drain probe client closes, avoid stale restart continuation reuse, preserve retry-after fallbacks and stale rate-limit cooldown probes, bound webchat image and artifact transcript scans, include seconds in inbound metadata timestamps, clear completed session active runs, clear stale chat stream buffers, and evict current plugin-state namespaces at row caps. ([#&#8203;87810](openclaw/openclaw#87810), [#&#8203;87833](openclaw/openclaw#87833), [#&#8203;75089](openclaw/openclaw#75089)) Thanks [@&#8203;joshavant](https://github.com/joshavant) and [@&#8203;litang9](https://github.com/litang9).
- Config/parsing/network: reject partial numeric parsing, parse provider/Discord retry headers and dates strictly, honor IPv6 and bare IPv6 `no_proxy` entries, preserve empty plugin allowlists, canonicalize secret target array indexes, and reject malformed media content lengths, inspected TCP ports, marketplace content lengths, cron epochs, sandbox stat fields, unsafe duration values, empty config path segments, noncanonical schema array refs, unsafe Telegram callback pages, and invalid Teams attachment-fetch DNS targets. ([#&#8203;87883](openclaw/openclaw#87883)) Thanks [@&#8203;zhangguiping-xydt](https://github.com/zhangguiping-xydt).
- Browser/input hardening: reject invalid tab indexes, excessive viewport resizes, explicit zero CDP ports, malformed geolocation options, unsafe screenshot or permission-grant timeouts, loose response-body limits, invalid cookie expiries, and non-finite Browser tool delays/timeouts.
- Cron/automation: retry recurring jobs after transient model rate limits before waiting for the next scheduled slot, and preflight model fallbacks before skipping scheduled work. ([#&#8203;82887](openclaw/openclaw#82887)) Thanks [@&#8203;chen-zhang-cs-code](https://github.com/chen-zhang-cs-code).
- Auto-reply/directives: respect provider and relayed channel metadata during directive persistence so channel-originated decisions keep their intended context. ([#&#8203;87683](openclaw/openclaw#87683))
- WhatsApp: resolve the auth directory from the active profile so profile-scoped WhatsApp installs do not drift to the wrong credential root. ([#&#8203;82492](openclaw/openclaw#82492)) Thanks [@&#8203;lidge-jun](https://github.com/lidge-jun).
- Gateway/session state: clear completed session active runs, avoid cold-loading providers for MCP inventory, cache single-session child indexes, cap handshake timers, and bound preauth, auth-guard, media, transcript, readiness, and port options.
- Channels/replies: preserve channel-owned progress callbacks when verbose output is off, keep group-room progress suppression intact, prefer external session delivery context, escape Discord component id delimiters, force final TUI chat repaints, show Slack reasoning previews, and normalize Discord/Matrix/Mattermost channel numeric options. ([#&#8203;87476](openclaw/openclaw#87476), [#&#8203;87423](openclaw/openclaw#87423))
- Agents/tool args: harden smart-quoted argument repair for edit arrays and exact escaped arguments so model-produced tool calls recover without corrupting valid input. ([#&#8203;86611](openclaw/openclaw#86611)) Thanks [@&#8203;ferminquant](https://github.com/ferminquant).
- Providers/agents: preserve seeded Anthropic signatures, preserve signed thinking payloads, concatenate signature-delta chunks, preserve DeepSeek `reasoning_content` replay across tier suffixes, apply OpenRouter strict9 ids to Mistral routes, promote Ollama plain-text tool calls, load NVIDIA featured model catalogs, stream MiniMax music generation responses, and recover empty preflight compaction. ([#&#8203;87593](openclaw/openclaw#87593), [#&#8203;87493](openclaw/openclaw#87493), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764)) Thanks [@&#8203;Pluviobyte](https://github.com/Pluviobyte) and [@&#8203;eleqtrizit](https://github.com/eleqtrizit).
- Media/images: skip CLI image cache refs when resolving generated images, allow trusted generated HTML attachments, and bound generated video downloads so stale refs and slow providers fail cleanly. ([#&#8203;87523](openclaw/openclaw#87523), [#&#8203;87982](openclaw/openclaw#87982))
- File transfer: handle late tar stdin pipe errors after archive validation or unpacking has already settled.
- Performance: trust install-record caches between reloads, prefer native JSON parsing, reuse unchanged tool-search catalogs, reuse gateway session and plugin metadata paths, skip unchanged store serialization, patch single-entry session writes, add precomputed session patch writers, reduce store clone allocations, cache manifest model catalog rows and auto-enabled plugin config, avoid full session snapshots for entry reads, defer configured Slack full startup, prefer bundled plugin dist entries, and slim current metadata identity caches. ([#&#8203;87760](openclaw/openclaw#87760))
- Docker/release/QA: package runtime workspace templates, stream cross-OS served artifacts, preserve sparse Crabbox run artifacts, isolate npm plugin installs per package, reject incompatible package plugin API installs, drop the leftover root Sharp dependency from package manifests after the Rastermill migration, bound OpenClaw instance logs, plugin gauntlet relay logs, MCP channel buffers, kitchen-sink scans, agent-turn assertions, QA-Lab credential broker calls, QA Matrix substrate requests, and release scenario logs, and keep release/google live guards current. ([#&#8203;87647](openclaw/openclaw#87647), [#&#8203;87477](openclaw/openclaw#87477)) Thanks [@&#8203;rohitjavvadi](https://github.com/rohitjavvadi) and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Release/CI: bound manual git fetches, ClawHub verifier responses, ClawHub owner metadata, dependency-guard error bodies, Parallels limits, startup/test/memory budget parsing, and diffs viewer build warnings so release lanes fail with useful proof instead of hanging. ([#&#8203;87839](openclaw/openclaw#87839))

</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/759
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
* fix(auth): harden Codex auth probes

* fix: preserve Codex probe auth overlay (openclaw#87559)

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
* fix(auth): harden Codex auth probes

* fix: preserve Codex probe auth overlay (openclaw#87559)

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling commands Command implementations merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. P2 Normal backlog priority with limited blast radius. 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: S 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.

2 participants