Skip to content

fix(OpenAI Responses): disable item id replay for storeless providers#90706

Merged
obviyus merged 4 commits into
openclaw:mainfrom
snowzlm:fix/openai-responses-storeless-replay
Jun 13, 2026
Merged

fix(OpenAI Responses): disable item id replay for storeless providers#90706
obviyus merged 4 commits into
openclaw:mainfrom
snowzlm:fix/openai-responses-storeless-replay

Conversation

@snowzlm

@snowzlm snowzlm commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes #89728.
Supersedes duplicate PR #89729.
Refs #90657 as the narrow storeless Responses replay lane from the Actions-backed tracking matrix.

Custom OpenAI Responses-compatible providers can have effective Responses store support stripped (compat.supportsStore=false). In that storeless mode, replaying prior Responses item ids is unsafe because the provider cannot resolve server-stored items from prior turns.

This PR was refreshed from latest openclaw/openclaw:main and now consolidates the useful coverage from both open duplicate PRs:

Latest main check

Latest main checked: 66b91d78feb3.

Current main is still incomplete for this bug class:

  • Direct builder still computes replay eligibility with only payloadPolicy.explicitStore !== false.
  • Context-management wrapper still passes through an undefined replayResponsesItemIds value when policy.shouldStripStore === true.
  • For custom openai-responses models with compat.supportsStore=false, payload policy resolves to:
explicitStore === undefined
shouldStripStore === true

That means current main can still replay prior Responses item ids on a route where store support was stripped.

Root cause

The previous guard only checked whether store had been explicitly disabled:

payloadPolicy.explicitStore !== false

For custom providers that strip store support via compatibility policy, explicitStore remains undefined, so the old guard treats replay as safe even though the effective payload is storeless.

The same issue existed in the provider-owned context-management wrapper: it preserved an undefined replay option instead of forcing replay off when policy.shouldStripStore was true.

Changes

  • Disable Responses item-id replay when the resolved payload policy strips store.
  • Apply the same storeless replay gate in the OpenAI Responses context-management wrapper.
  • Add a stream-level regression test for a custom openai-responses model with compat.supportsStore=false.
  • Add a wrapper regression test proving custom store-stripped Responses routes pass replayResponsesItemIds: false to the underlying stream.
  • Preserve existing store-enabled OpenAI Responses replay behavior.

Compatibility contract

This PR treats compat.supportsStore=false as a storeless Responses route. For that route OpenClaw must not replay server-side Responses item ids (reasoning.id, assistant message.id, or function_call.id) because the backend cannot resolve prior stored response items. Stateless tool linking remains valid through call_id and function_call_output.call_id.

Store-enabled direct OpenAI Responses behavior is unchanged. Provider-owned wrappers can still explicitly opt back in for known exceptions that support storeless encrypted reasoning replay, such as the existing Microsoft Foundry override.

Rollback: revert the two replay-gate changes in src/agents/openai-transport-stream.ts and src/llm/providers/stream-wrappers/openai.ts; tests added in this PR document the expected storeless contract.

Compatibility regression matrix

This patch now has explicit regression coverage that the storeless fix does not break previously valid official or third-party routes:

  • Official OpenAI Responses store-enabled route: context wrapper still sets replayResponsesItemIds: true.
  • Azure OpenAI Responses store-enabled route: context wrapper still sets replayResponsesItemIds: true.
  • Store-capable third-party Responses route with explicit opt-in: replay item ids are preserved.
  • Storeless custom Responses route with compat.supportsStore=false: replay item ids are disabled.
  • Microsoft Foundry provider-owned override: existing extension test still confirms Foundry encrypted reasoning continuations keep replayResponsesItemIds: true despite supportsStore=false.

Focused validation added after the compatibility matrix:

node scripts/run-vitest.mjs run src/agents/embedded-agent-runner-extraparams.test.ts
# 139 tests passed

node scripts/run-vitest.mjs run src/agents/openai-transport-stream.test.ts
# 243 tests passed

node scripts/run-vitest.mjs run extensions/microsoft-foundry/index.test.ts
# 43 tests passed

pnpm exec oxlint src/agents/openai-transport-stream.test.ts src/agents/embedded-agent-runner-extraparams.test.ts extensions/microsoft-foundry/index.test.ts
# 0 warnings, 0 errors

Real behavior proof

Behavior addressed: Storeless custom openai-responses providers must not receive replayed prior Responses item ids. The user-visible failure class is provider-side continuation/tool-turn failure when a custom-compatible provider cannot resolve prior item ids that were never stored server-side.

Real environment tested: Latest local OpenClaw checkout on Linux, reset to openclaw/openclaw:main at 66b91d78feb3, then patched from new branch head bfea37e66676. The before/after proof uses the production createOpenAIResponsesTransportStreamFn() path against a local HTTP Responses-compatible endpoint that rejects replayed server item ids but accepts stateless call_id pairing.

Exact steps or command run after this patch: reverse only the two production replay-gate hunks, run node --import tsx ../live-storeless-before-after-proof.mjs BEFORE, restore the patch, then run node --import tsx ../live-storeless-before-after-proof.mjs AFTER. Supplemental checks: node scripts/run-vitest.mjs run src/agents/openai-responses.reasoning-replay.test.ts src/agents/embedded-agent-runner-extraparams.test.ts and pnpm exec oxlint src/agents/openai-transport-stream.ts src/llm/providers/stream-wrappers/openai.ts src/agents/openai-responses.reasoning-replay.test.ts src/agents/embedded-agent-runner-extraparams.test.ts.

Evidence after fix: The real before/after stream invocation captured the following outbound requests/results from the production transport path:

=== BEFORE current-main-equivalent without storeless replay gate ===
BEFORE_CAPTURE request_path=/responses
BEFORE_CAPTURE store_present=false
BEFORE_CAPTURE replay_items=[{"type":"message","role":"system"},{"type":"message","role":"user"},{"type":"reasoning","id":"rs_prior"},{"type":"message","id":"msg_prior","role":"assistant"},{"type":"function_call","id":"fc_prior","call_id":"call_live"},{"type":"message","role":"user"}]
BEFORE_CAPTURE tool_output_call_id="call_live"
BEFORE_RESULT unsafe_replayed_ids=3
BEFORE_RESULT call_id_preserved=true
BEFORE_BACKEND accepts_payload=false
[openai-transport] [responses] error provider=openai api=openai-responses model=gpt-5.5 name=Error status=400 code=undefined type=undefined causeName=undefined causeCode=undefined message=400 storeless backend rejected replayed Responses item ids
BEFORE_STREAM stop_reason=error
BEFORE_STREAM text=""
BEFORE_SUMMARY rejected_before_or_accepted_after=true
=== AFTER patched head bfea37e66676 with storeless replay gate ===
AFTER_CAPTURE request_path=/responses
AFTER_CAPTURE store_present=false
AFTER_CAPTURE replay_items=[{"type":"message","role":"system"},{"type":"message","role":"user"},{"type":"reasoning"},{"type":"message","role":"assistant"},{"type":"function_call","call_id":"call_live"},{"type":"message","role":"user"}]
AFTER_CAPTURE tool_output_call_id="call_live"
AFTER_RESULT unsafe_replayed_ids=0
AFTER_RESULT call_id_preserved=true
AFTER_BACKEND accepts_payload=true
AFTER_STREAM stop_reason=stop
AFTER_STREAM text="ok"
AFTER_SUMMARY rejected_before_or_accepted_after=true

Supplemental focused Vitest passed 2 shards: openai-responses.reasoning-replay.test.ts passed 10 tests, including the storeless custom provider replay regression; embedded-agent-runner-extraparams.test.ts passed 137 tests, including the context-management wrapper regression. oxlint reported 0 warnings and 0 errors on touched source/test files.

Observed result after fix: The current-main-equivalent path sent three unsafe replayed item ids (rs_prior, msg_prior, fc_prior) and the storeless backend rejected the payload with HTTP 400. The patched head sent zero unsafe replayed ids, preserved call_id pairing, and the same backend accepted the payload and completed the stream with text ok.

What was not tested: No external third-party custom Responses provider was called; the live proof used a local Responses-compatible endpoint to capture the actual OpenClaw outbound request without exposing credentials or relying on a vendor account. Repository-wide GitHub Actions CI is green for the refreshed branch, and the latest Real behavior proof check is passing.

Duplicate PR handling

PR #89729 covers the same issue but was based on an older branch and is now superseded. This PR is the canonical refreshed branch from latest main and includes both the direct builder and wrapper fixes.

@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 5, 2026
@clawsweeper

clawsweeper Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 13, 2026, 9:42 AM ET / 13:42 UTC.

Summary
The PR disables prior OpenAI Responses item-id replay when the resolved payload policy strips store, applies the same gate in the OpenAI Responses wrapper, and adds direct/wrapper regression coverage.

PR surface: Source +1, Tests +266. Total +267 across 5 files.

Reproducibility: yes. Source inspection on current main shows compat.supportsStore=false sets shouldStripStore=true while the direct builder still gates replay only on explicitStore !== false, and the wrapper leaves replay undefined in that path.

Review metrics: 1 noteworthy metric.

  • Replay Default Narrowed: 1 default gate changed. The PR changes the default replay behavior for compat.supportsStore=false Responses routes, so maintainers should consciously accept the compatibility contract before merge.

Stored data model
Persistent data-model change detected: serialized state: src/agents/openai-transport-stream.test.ts. Confirm migration or upgrade compatibility proof before merge.

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

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

Risk before merge

  • [P1] Merging intentionally changes default outbound payloads for custom openai-responses models with compat.supportsStore=false: prior Responses item ids are omitted unless a provider wrapper explicitly opts back in.
  • [P1] The real behavior proof validates the generic OpenClaw payload contract against a local Responses-compatible endpoint, but it does not prove every third-party custom backend.
  • [P1] The PR body's before/after proof was captured before the final maintainer refactor commits; source inspection shows the final head is behavior-equivalent, but landing still depends on maintainer acceptance and current-head checks.

Maintainer options:

  1. Accept The Storeless Contract (recommended)
    Land the PR if maintainers agree that stripped-store Responses routes must omit server item ids and any exceptions belong in provider-owned wrappers.
  2. Add A Provider Opt-In First
    If another known storeless backend still requires item-id replay, add a documented provider wrapper opt-in with focused regression coverage before merge.
  3. Pause For Vendor Proof
    Pause if maintainers need proof from a real third-party custom provider rather than the generic local Responses-compatible endpoint before accepting the compatibility change.

Next step before merge

  • No automated repair is recommended because there is no concrete patch defect; the remaining action is maintainer compatibility acceptance plus normal current-head checks.

Security
Cleared: The diff changes TypeScript payload gating and tests only; it adds no dependency, workflow, secret, package-resolution, download, or code-execution surface.

Review details

Best possible solution:

Land the focused fix if maintainers accept that compat.supportsStore=false means no server item-id replay by default, with provider-owned opt-ins for known exceptions such as Microsoft Foundry.

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

Yes. Source inspection on current main shows compat.supportsStore=false sets shouldStripStore=true while the direct builder still gates replay only on explicitStore !== false, and the wrapper leaves replay undefined in that path.

Is this the best way to solve the issue?

Yes. The PR uses the existing payload policy at both replay handoff points; stripping ids later inside message conversion would be a weaker layer because it lacks the resolved store policy and provider-wrapper override boundary.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 68e234f9e24a.

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes before/after live output from the production OpenClaw Responses transport path against a local Responses-compatible endpoint, showing current-main-equivalent rejection and patched success while preserving call_id.

Label justifications:

  • P2: This is a scoped provider/runtime bug fix for custom OpenAI Responses-compatible storeless routes with limited but real follow-up/tool-turn impact.
  • merge-risk: 🚨 compatibility: The PR changes existing custom-provider payload behavior by omitting prior Responses item ids for compat.supportsStore=false routes unless a provider wrapper opts back in.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body includes before/after live output from the production OpenClaw Responses transport path against a local Responses-compatible endpoint, showing current-main-equivalent rejection and patched success while preserving call_id.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes before/after live output from the production OpenClaw Responses transport path against a local Responses-compatible endpoint, showing current-main-equivalent rejection and patched success while preserving call_id.
Evidence reviewed

PR surface:

Source +1, Tests +266. Total +267 across 5 files.

View PR surface stats
Area Files Added Removed Net
Source 2 5 4 +1
Tests 3 290 24 +266
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 5 295 28 +267

What I checked:

  • Root policy read: The root review policy was read fully and applied; it requires whole-surface review, dependency/Codex contract checks when relevant, and compatibility-risk surfacing for provider/default changes. (AGENTS.md:1, 68e234f9e24a)
  • Scoped agent policy read: The scoped agents guide was read fully; it affected the test-surface review but did not change the runtime compatibility verdict. (src/agents/AGENTS.md:1, 68e234f9e24a)
  • Current main direct-builder gap: Current main still allows replay whenever payloadPolicy.explicitStore !== false; this misses the case where explicitStore is undefined and shouldStripStore is true. (src/agents/openai-transport-stream.ts:2211, 68e234f9e24a)
  • Storeless policy signal: Current main sets shouldStripStore when a Responses API model declares compat.supportsStore=false, then removes store from the outgoing payload. (src/agents/openai-responses-payload-policy.ts:359, 68e234f9e24a)
  • Current main wrapper gap: The current wrapper derives replayResponsesItemIds from explicitStore only, so stripped-store routes can leave replay undefined and fall through to the builder default. (src/llm/providers/stream-wrappers/openai.ts:401, 68e234f9e24a)
  • Serializer behavior: When replay is disabled, reasoning/message/function-call item ids are removed while function_call.call_id and function_call_output.call_id remain available for stateless tool pairing. (src/agents/openai-transport-stream.ts:1185, 68e234f9e24a)

Likely related people:

  • waterblue: Authored the earlier replay-id gating commit that this PR extends from explicit store=false to stripped-store policy. (role: prior repair author; confidence: high; commits: 03dec8bb3a00; files: src/agents/openai-transport-stream.ts, src/llm/providers/stream-wrappers/openai.ts, src/agents/openai-transport-stream.test.ts)
  • Vincent Koc: Recent history shows repeated provider compatibility and OpenAI Responses transport work around the central files affected by this PR. (role: recent area contributor; confidence: high; commits: cc1881a83846, 7836c9a6c24d, 8c802aa68351; files: src/agents/openai-transport-stream.ts, src/llm/providers/stream-wrappers/openai.ts, src/agents/openai-responses-payload-policy.ts)
  • Peter Steinberger: Recent commits touched OpenAI transport defaults, native streaming compat helpers, and related provider policy boundaries. (role: adjacent owner; confidence: medium; commits: 3207c5326a94, 628c71103eb7, a9125ec0b07b; files: src/agents/openai-transport-stream.ts, src/llm/providers/stream-wrappers/openai.ts, src/agents/openai-responses-payload-policy.ts)
  • obviyus: Authored prior Responses API capability detection work and the current PR head refactor that simplified the wrapper replay gate. (role: adjacent capability contributor; confidence: medium; commits: 685f9903ec38, ab92238c2de0, bfc4546bb5fc; files: src/agents/openai-responses-payload-policy.ts, src/llm/providers/stream-wrappers/openai.ts, src/agents/embedded-agent-runner-extraparams.test.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.

@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 5, 2026
@snowzlm
snowzlm force-pushed the fix/openai-responses-storeless-replay branch from 5c92168 to fb69711 Compare June 5, 2026 15:50
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦞 diamond lobster Very strong PR readiness with only minor 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. labels Jun 5, 2026
@snowzlm
snowzlm force-pushed the fix/openai-responses-storeless-replay branch from fb69711 to b4e0be2 Compare June 7, 2026 14:47
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 7, 2026
@snowzlm

snowzlm commented Jun 7, 2026

Copy link
Copy Markdown
Contributor Author

Updated the PR body with latest-main verification and consolidated the duplicate #89729 wrapper fix. @clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

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

@openclaw-barnacle openclaw-barnacle Bot added triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. and removed proof: supplied External PR includes structured after-fix real behavior proof. labels Jun 7, 2026
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. and removed rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jun 7, 2026
@snowzlm

snowzlm commented Jun 7, 2026

Copy link
Copy Markdown
Contributor Author

Updated the PR body with live OpenClaw stream payload proof for the refreshed branch. @clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

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

@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. labels Jun 7, 2026
@snowzlm

snowzlm commented Jun 7, 2026

Copy link
Copy Markdown
Contributor Author

Real behavior proof now passes and the PR body contains the live OpenClaw stream payload proof. @clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

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

@clawsweeper

clawsweeper Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

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

@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 7, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 7, 2026
@snowzlm

snowzlm commented Jun 7, 2026

Copy link
Copy Markdown
Contributor Author

Updated the PR body with the compatibility regression matrix for official, third-party, and Foundry routes. @clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

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

@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 7, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Jun 7, 2026
@snowzlm
snowzlm force-pushed the fix/openai-responses-storeless-replay branch from df73364 to bfea37e Compare June 7, 2026 20:29
@snowzlm

snowzlm commented Jun 7, 2026

Copy link
Copy Markdown
Contributor Author

Updated the PR body to the latest head and added compatibility regression coverage for official, third-party, and Foundry routes. @clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

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

@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 7, 2026
@snowzlm

snowzlm commented Jun 7, 2026

Copy link
Copy Markdown
Contributor Author

CI is clean on bfea37e66676; PR body is updated with the final compatibility matrix. @clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

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

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 7, 2026
@hannesrudolph

Copy link
Copy Markdown
Member

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

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

@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 13, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 13, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 13, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 13, 2026
@obviyus
obviyus merged commit 3c02c23 into openclaw:main Jun 13, 2026
171 of 172 checks passed
@obviyus

obviyus commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Landed via rebase onto main.

  • Scoped tests:
    • pnpm check:test-types
    • node scripts/run-vitest.mjs run src/agents/embedded-agent-runner-extraparams.test.ts src/agents/openai-responses.reasoning-replay.test.ts src/agents/openai-transport-stream.test.ts extensions/microsoft-foundry/index.test.ts
    • git diff --check origin/main...HEAD
    • strict local Responses transport proof: rejected store, previous_response_id, and replay item ids; result stop with OK
  • Changelog: not updated; release notes are generated from PR/commit history
  • Land commit: bfc4546
  • Merge commit: 3c02c23

Thanks @snowzlm!

eleboucher pushed a commit to eleboucher/homelab that referenced this pull request Jun 16, 2026
…26.6.8) (#1144)

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.6` → `2026.6.8` |

---

### Release Notes

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

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

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

##### Highlights

- Telegram and WhatsApp channel delivery are richer and less brittle: Telegram can send structured rich text with tables, lists, expandable blockquotes, prompt-preserving CLI backend delivery, retired native draft migration, and safer rich-media boundaries, while WhatsApp now honors configured ACP bindings. ([#&#8203;92679](openclaw/openclaw#92679), [#&#8203;84082](openclaw/openclaw#84082), [#&#8203;89421](openclaw/openclaw#89421), [#&#8203;92513](openclaw/openclaw#92513)) Thanks [@&#8203;obviyus](https://github.com/obviyus), [@&#8203;jzakirov](https://github.com/jzakirov), [@&#8203;spacegeologist](https://github.com/spacegeologist), and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Agent and Gateway recovery is sharper across account-scoped DM sends, generated media completions, restart shutdown aborts, yielded subagent pauses, yielded cron media, heartbeat dedupe, session identity prompts, and unknown OpenAI agent selector rejection. ([#&#8203;92788](openclaw/openclaw#92788), [#&#8203;91246](openclaw/openclaw#91246), [#&#8203;91357](openclaw/openclaw#91357), [#&#8203;92631](openclaw/openclaw#92631), [#&#8203;92146](openclaw/openclaw#92146), [#&#8203;91287](openclaw/openclaw#91287), [#&#8203;92468](openclaw/openclaw#92468), [#&#8203;92510](openclaw/openclaw#92510)) Thanks [@&#8203;yetval](https://github.com/yetval), [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle), [@&#8203;ooiuuii](https://github.com/ooiuuii), [@&#8203;openperf](https://github.com/openperf), [@&#8203;IWhatsskill](https://github.com/IWhatsskill), [@&#8203;ZengWen-DT](https://github.com/ZengWen-DT), and [@&#8203;zhangguiping-xydt](https://github.com/zhangguiping-xydt).
- Provider/model handling expands and tightens with GLM-5.2, Claude Haiku 4.5 catalog rows, OpenRouter and Google Vertex provider-prefix normalization, managed SecretRef auth, bounded model browse discovery, storeless OpenAI Responses replay gating, and Claude 4.5 Copilot tool-streaming safety. ([#&#8203;92796](openclaw/openclaw#92796), [#&#8203;90116](openclaw/openclaw#90116), [#&#8203;92627](openclaw/openclaw#92627), [#&#8203;91218](openclaw/openclaw#91218), [#&#8203;90686](openclaw/openclaw#90686), [#&#8203;92247](openclaw/openclaw#92247), [#&#8203;90706](openclaw/openclaw#90706), [#&#8203;75393](openclaw/openclaw#75393)) Thanks [@&#8203;arkyu2077](https://github.com/arkyu2077), [@&#8203;liuhao1024](https://github.com/liuhao1024), [@&#8203;bymle](https://github.com/bymle), [@&#8203;rohitjavvadi](https://github.com/rohitjavvadi), [@&#8203;samson910022](https://github.com/samson910022), [@&#8203;snowzlm](https://github.com/snowzlm), and [@&#8203;Kailigithub](https://github.com/Kailigithub).
- `/usage` and reply payload hooks now have a native full footer renderer, default template, fixed-decimal formatting, credential-aware limits, better partial-count handling, and warnings for broken templates instead of silent bad output. ([#&#8203;92657](openclaw/openclaw#92657), [#&#8203;89835](openclaw/openclaw#89835), [#&#8203;89629](openclaw/openclaw#89629)) Thanks [@&#8203;Marvinthebored](https://github.com/Marvinthebored).
- UI and mobile flows are steadier: workspace files can collapse and start collapsed, WebChat backscroll survives streaming, the sidebar session picker remains interactive above the desktop workbench, reset soft args survive UI dispatch, stale dashboard session parent lineage is preserved, and iOS reconnects stale foreground gateways. ([#&#8203;92779](openclaw/openclaw#92779), [#&#8203;92622](openclaw/openclaw#92622), [#&#8203;92705](openclaw/openclaw#92705), [#&#8203;91353](openclaw/openclaw#91353), [#&#8203;90658](openclaw/openclaw#90658), [#&#8203;92552](openclaw/openclaw#92552)) Thanks [@&#8203;shakkernerd](https://github.com/shakkernerd), [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle), [@&#8203;NianJiuZst](https://github.com/NianJiuZst), [@&#8203;zhouhe-xydt](https://github.com/zhouhe-xydt), [@&#8203;luoyanglang](https://github.com/luoyanglang), and [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin).
- Memory, state, and diagnostics recover cleaner: oversized OpenAI embedding batches split before 431s, QMD memory search stays available in transient mode, SQLite avoids WAL on NFS state volumes, stuck-session recovery scheduling no longer resets warning backoff, and Infinity chunk limits stay genuinely unbounded. ([#&#8203;92650](openclaw/openclaw#92650), [#&#8203;92618](openclaw/openclaw#92618), [#&#8203;92639](openclaw/openclaw#92639), [#&#8203;91247](openclaw/openclaw#91247), [#&#8203;92752](openclaw/openclaw#92752), [#&#8203;92735](openclaw/openclaw#92735)) Thanks [@&#8203;mushuiyu886](https://github.com/mushuiyu886), [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle), [@&#8203;849261680](https://github.com/849261680), [@&#8203;gnanam1990](https://github.com/gnanam1990), and [@&#8203;yhterrance](https://github.com/yhterrance).

##### Changes

- Providers/models: add GLM-5.2 support and Claude Haiku 4.5 catalog entries while keeping provider-qualified model IDs normalized across OpenRouter and Google Vertex paths. ([#&#8203;92796](openclaw/openclaw#92796), [#&#8203;90116](openclaw/openclaw#90116), [#&#8203;92627](openclaw/openclaw#92627), [#&#8203;91218](openclaw/openclaw#91218)) Thanks [@&#8203;arkyu2077](https://github.com/arkyu2077), [@&#8203;liuhao1024](https://github.com/liuhao1024), and [@&#8203;bymle](https://github.com/bymle).
- Channel plugins: ship Telegram rich-message delivery and WhatsApp ACP binding support, including rich prompt handoff to CLI backends and transport fixtures for richer drafts. ([#&#8203;92679](openclaw/openclaw#92679), [#&#8203;92513](openclaw/openclaw#92513)) Thanks [@&#8203;obviyus](https://github.com/obviyus) and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Agent commands: support `/btw` in CLI-backed sessions and keep CLI usage-error exits classified as usage failures instead of successful runs. ([#&#8203;92669](openclaw/openclaw#92669), [#&#8203;92162](openclaw/openclaw#92162)) Thanks [@&#8203;joshavant](https://github.com/joshavant) and [@&#8203;Pandah97](https://github.com/Pandah97).
- Usage hooks: add built-in full footer rendering, default footer templates, per-turn usage state, credential-aware limits, and fixed-decimal formatting for usage-bar templates. ([#&#8203;92657](openclaw/openclaw#92657), [#&#8203;89835](openclaw/openclaw#89835), [#&#8203;89629](openclaw/openclaw#89629)) Thanks [@&#8203;Marvinthebored](https://github.com/Marvinthebored).
- Docs and operator guidance: document node config examples, clarify before-install hook scope, correct agent default concurrency comments, refresh ZAI provider docs, and update channel/group docs for current Telegram and WhatsApp behavior. ([#&#8203;92677](openclaw/openclaw#92677), [#&#8203;92766](openclaw/openclaw#92766), [#&#8203;92695](openclaw/openclaw#92695)) Thanks [@&#8203;liuhao1024](https://github.com/liuhao1024), [@&#8203;sallyom](https://github.com/sallyom), and [@&#8203;ArielSmoliar](https://github.com/ArielSmoliar).

##### Fixes

- Onboarding/skills: show the Homebrew install recommendation only on macOS and Linux, so FreeBSD and other unsupported platforms no longer get a misleading brew prompt. Fixes [#&#8203;68893](openclaw/openclaw#68893); carries forward [#&#8203;68894](openclaw/openclaw#68894), [#&#8203;68910](openclaw/openclaw#68910), [#&#8203;68941](openclaw/openclaw#68941), [#&#8203;68943](openclaw/openclaw#68943), [#&#8203;69002](openclaw/openclaw#69002), and [#&#8203;69545](openclaw/openclaw#69545). Thanks [@&#8203;yurivict](https://github.com/yurivict), [@&#8203;Sanjays2402](https://github.com/Sanjays2402), [@&#8203;Eruditi](https://github.com/Eruditi), [@&#8203;JustInCache](https://github.com/JustInCache), [@&#8203;nnish16](https://github.com/nnish16), and [@&#8203;Mlightsnow](https://github.com/Mlightsnow).
- Channels and delivery: preserve account-scoped DM channel send policy, rich Telegram final replies, rich Telegram tables and lists, Telegram thread-create CLI remapping, Slack outbound `message_sent` hooks, contributed message-tool schema optionality, same-channel generated media completions, and channel chunking around surrogate pairs and Infinity limits. ([#&#8203;92788](openclaw/openclaw#92788), [#&#8203;92679](openclaw/openclaw#92679), [#&#8203;89421](openclaw/openclaw#89421), [#&#8203;89943](openclaw/openclaw#89943), [#&#8203;91137](openclaw/openclaw#91137), [#&#8203;91246](openclaw/openclaw#91246), [#&#8203;92735](openclaw/openclaw#92735)) Thanks [@&#8203;yetval](https://github.com/yetval), [@&#8203;obviyus](https://github.com/obviyus), [@&#8203;spacegeologist](https://github.com/spacegeologist), [@&#8203;rishitamrakar](https://github.com/rishitamrakar), [@&#8203;lundog](https://github.com/lundog), [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle), and [@&#8203;yhterrance](https://github.com/yhterrance).
- Auto-reply/groups: keep ordinary group text replies on automatic final-reply delivery while allowing `message(action=send)` for files, images, and other attachments to the same group or topic. Carries forward [#&#8203;43276](openclaw/openclaw#43276); refs [#&#8203;48004](openclaw/openclaw#48004). Thanks [@&#8203;NayukiChiba](https://github.com/NayukiChiba) and [@&#8203;ShakaRover](https://github.com/ShakaRover).
- Auto-reply/skills: preserve multiline payloads for `/skill` and direct skill slash commands while keeping command-head normalization for aliases, colon syntax, and bot mentions. Fixes [#&#8203;79155](openclaw/openclaw#79155); carries forward [#&#8203;81305](openclaw/openclaw#81305). Thanks [@&#8203;web3blind](https://github.com/web3blind).
- iMessage: normalize leading NUL sent-message echo prefixes while preserving interior NUL bytes and the leading attributedBody marker handling from [#&#8203;73942](openclaw/openclaw#73942). Carries forward [#&#8203;63581](openclaw/openclaw#63581). Thanks [@&#8203;drvoss](https://github.com/drvoss).
- Discord: give generated auto-thread titles a 60-second timeout and 4,096-token reasoning-model output budget, clamped to the selected model output cap. ([#&#8203;64734](openclaw/openclaw#64734)) Thanks [@&#8203;hanamizuki](https://github.com/hanamizuki).
- Agent, cron, and Gateway runtime: mark active main sessions before restart shutdown aborts, pause yielded subagent runs whose terminal also signals abort, preserve yielded media completions, de-duplicate main-session heartbeat events, expose session identity in runtime prompts, reject unknown OpenAI agent selectors, keep generated media completions and slash-command block replies in WebChat, preserve fresh post-compaction usage while clearing stale usage snapshots, and require admin privileges for HTTP session/model override surfaces. ([#&#8203;91357](openclaw/openclaw#91357), [#&#8203;92631](openclaw/openclaw#92631), [#&#8203;92146](openclaw/openclaw#92146), [#&#8203;91287](openclaw/openclaw#91287), [#&#8203;92468](openclaw/openclaw#92468), [#&#8203;92510](openclaw/openclaw#92510), [#&#8203;91246](openclaw/openclaw#91246), [#&#8203;50795](openclaw/openclaw#50795), [#&#8203;50845](openclaw/openclaw#50845), [#&#8203;82874](openclaw/openclaw#82874), [#&#8203;92651](openclaw/openclaw#92651), [#&#8203;92646](openclaw/openclaw#92646)) Thanks [@&#8203;ooiuuii](https://github.com/ooiuuii), [@&#8203;openperf](https://github.com/openperf), [@&#8203;IWhatsskill](https://github.com/IWhatsskill), [@&#8203;ZengWen-DT](https://github.com/ZengWen-DT), [@&#8203;zhangguiping-xydt](https://github.com/zhangguiping-xydt), [@&#8203;Hollychou924](https://github.com/Hollychou924), [@&#8203;leno23](https://github.com/leno23), and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Agents/exec: default empty-success background completion notices on only for real chat channels, preserving explicit opt-outs and keeping generic providers silent while carrying forward the narrow UX intent from [#&#8203;39726](openclaw/openclaw#39726) and [#&#8203;46926](openclaw/openclaw#46926). Thanks [@&#8203;Sapientropic](https://github.com/Sapientropic) and [@&#8203;wenkang-xie](https://github.com/wenkang-xie).
- Providers and model replay: preserve storeless OpenAI Responses replay compatibility, avoid eager tool streaming for Claude 4.5 in Copilot, honor profile auth for SecretRef model entries, bound model browsing, strip provider prefixes where runtimes need bare IDs, and surface nested embedding fetch failures. ([#&#8203;90706](openclaw/openclaw#90706), [#&#8203;75393](openclaw/openclaw#75393), [#&#8203;90686](openclaw/openclaw#90686), [#&#8203;92247](openclaw/openclaw#92247), [#&#8203;92627](openclaw/openclaw#92627), [#&#8203;91218](openclaw/openclaw#91218), [#&#8203;92628](openclaw/openclaw#92628)) Thanks [@&#8203;snowzlm](https://github.com/snowzlm), [@&#8203;Kailigithub](https://github.com/Kailigithub), [@&#8203;rohitjavvadi](https://github.com/rohitjavvadi), [@&#8203;samson910022](https://github.com/samson910022), [@&#8203;liuhao1024](https://github.com/liuhao1024), [@&#8203;bymle](https://github.com/bymle), and [@&#8203;mushuiyu886](https://github.com/mushuiyu886).
- Memory, state, diagnostics, and config: split header-too-large embedding batches, keep QMD memory search enabled in transient mode, avoid SQLite WAL on NFS volumes, preserve recovery scheduling outside stuck-session warning backoff, and keep shell environment fallbacks contained in config write tests. ([#&#8203;92650](openclaw/openclaw#92650), [#&#8203;92618](openclaw/openclaw#92618), [#&#8203;92639](openclaw/openclaw#92639), [#&#8203;91247](openclaw/openclaw#91247), [#&#8203;92752](openclaw/openclaw#92752)) Thanks [@&#8203;mushuiyu886](https://github.com/mushuiyu886), [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle), [@&#8203;849261680](https://github.com/849261680), and [@&#8203;gnanam1990](https://github.com/gnanam1990).
- Workspace setup state: store setup completion outside the workspace dot directory using an OpenClaw-named root file, migrate valid legacy state forward, and avoid clobbering generic root `workspace-state.json` files for TigerFS-style dot-path compatibility. This Clownfish replacement carries forward the focused [#&#8203;53326](openclaw/openclaw#53326) fix idea because the original branch was closed and uneditable. ([#&#8203;53326](openclaw/openclaw#53326), [#&#8203;44783](openclaw/openclaw#44783), [#&#8203;39446](openclaw/openclaw#39446)) Thanks [@&#8203;1qh](https://github.com/1qh).
- UI/mobile/TUI: preserve dashboard session parent lineage, WebChat backscroll, reset soft command args, sidebar session picker interactivity, collapsed workspace files, resolved `/model` confirmation refs, and stale foreground iOS Gateway reconnects. ([#&#8203;90658](openclaw/openclaw#90658), [#&#8203;92622](openclaw/openclaw#92622), [#&#8203;91353](openclaw/openclaw#91353), [#&#8203;92705](openclaw/openclaw#92705), [#&#8203;92779](openclaw/openclaw#92779), [#&#8203;92773](openclaw/openclaw#92773), [#&#8203;92552](openclaw/openclaw#92552)) Thanks [@&#8203;luoyanglang](https://github.com/luoyanglang), [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle), [@&#8203;zhouhe-xydt](https://github.com/zhouhe-xydt), [@&#8203;NianJiuZst](https://github.com/NianJiuZst), [@&#8203;shakkernerd](https://github.com/shakkernerd), [@&#8203;NarahariRaghava](https://github.com/NarahariRaghava), and [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin).
- TUI: reload the active session after external `/new` or `/reset` session-change events so stale transcript and stream state clear promptly. Fixes [#&#8203;38966](openclaw/openclaw#38966); carries forward [#&#8203;40472](openclaw/openclaw#40472). Thanks [@&#8203;yizhanzjz](https://github.com/yizhanzjz) and [@&#8203;wsyjh8](https://github.com/wsyjh8).
- Control UI: preserve Gateway Access tokens during same-normalized WebSocket URL edits and reload gateway-scoped tokens when switching endpoints. Fixes [#&#8203;41545](openclaw/openclaw#41545); repairs [#&#8203;42001](openclaw/openclaw#42001) with additional source PRs [#&#8203;41546](openclaw/openclaw#41546), [#&#8203;41552](openclaw/openclaw#41552), and [#&#8203;41718](openclaw/openclaw#41718). Thanks [@&#8203;wsyjh8](https://github.com/wsyjh8), [@&#8203;llagy0020](https://github.com/llagy0020), [@&#8203;llagy007](https://github.com/llagy007), [@&#8203;pingfanfan](https://github.com/pingfanfan), and [@&#8203;zheliu2](https://github.com/zheliu2).
- Gateway CLI: tolerate a single transient clean WebSocket close before `hello-ok` so one-shot RPC calls reconnect instead of failing noisily, while repeated clean pre-hello closes still surface. Carries forward source PRs [#&#8203;54475](openclaw/openclaw#54475) and [#&#8203;54774](openclaw/openclaw#54774); [#&#8203;85253](openclaw/openclaw#85253) covered adjacent connect assembly diagnostics. Thanks [@&#8203;ruanrrn](https://github.com/ruanrrn).
- Gateway/Linux: keep root-owned systemd user service lifecycle commands on root's user manager when a stale `SUDO_USER` remains in a root shell with root's user bus environment. Fixes [#&#8203;81410](openclaw/openclaw#81410). Thanks [@&#8203;Ericksza](https://github.com/Ericksza) and [@&#8203;ChuckClose-tech](https://github.com/ChuckClose-tech).
- Release and test reliability: extend slow Gateway/full-suite watchdogs, split local full-suite shards when throttled, stabilize plugin auth marker fixtures, avoid brittle provider-ref error text, and keep QA Lab bootstrap selection assertions aligned with flow-only scenarios. ([#&#8203;92652](openclaw/openclaw#92652))
- macOS Peekaboo bridge: update the embedded Peekaboo package to 3.5.2 and route bundled-skill CLI commands through the OpenClaw app bridge so they inherit its Screen Recording and Accessibility grants.
- Agent routing: route subagent RPC callbacks addressed to an agent-shaped `--to` target to the correct session key instead of falling back to the main session, so WeChat (and other channel) session-key callbacks reach the intended subagent session. ([#&#8203;90231](openclaw/openclaw#90231)) Thanks [@&#8203;zhangguiping-xydt](https://github.com/zhangguiping-xydt).
- Cron: preserve model, fallback, thinking, timeout, light-context, unsafe-content, and tool allow-list overrides on implicit text payloads by promoting them to agent turns, while explicit system events still prune those fields. Fixes [#&#8203;28905](openclaw/openclaw#28905); carries forward [#&#8203;64060](openclaw/openclaw#64060) and [#&#8203;73946](openclaw/openclaw#73946). Thanks [@&#8203;liaoandi](https://github.com/liaoandi).
- QQBot delivery: keep markdown table chunks self-contained across message boundaries by preserving table state across block deliveries, flushing unfinished table-row fragments as plain text, and detecting short pipe-terminated rows by column count so split rows are not sent as malformed markdown. ([#&#8203;92428](openclaw/openclaw#92428)) Thanks [@&#8203;sliverp](https://github.com/sliverp).

</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/1144
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: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. size: M 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.

Custom OpenAI Responses-compatible providers still replay item ids when store support is stripped

3 participants