Skip to content

fix: classify provider conversation state errors#82616

Merged
osolmaz merged 5 commits into
openclaw:mainfrom
dutifulbob:fix-stale-embedded-run-clear
May 17, 2026
Merged

fix: classify provider conversation state errors#82616
osolmaz merged 5 commits into
openclaw:mainfrom
dutifulbob:fix-stale-embedded-run-clear

Conversation

@dutifulbob

@dutifulbob dutifulbob commented May 16, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add a provider request error classifier for conversation-state rejections from OpenAI, Bedrock/Anthropic-style tool-result mismatches, Gemini role-ordering failures, and alternating-role failures.
  • Route those failures to a clear message-channel reply instead of silently auto-resetting or falling through to the generic runner failure.
  • Preserve raw failure details on internal control surfaces and add focused regression coverage for the external-channel behavior.

Verification

  • pnpm exec oxfmt --check --threads=1 CHANGELOG.md src/auto-reply/reply/agent-runner-execution.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/provider-request-error-classifier.ts src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts passed.
  • pnpm test src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts passed.
  • pnpm test src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts passed.
  • git diff --check upstream/main...HEAD passed.
  • codex review --base main reported no discrete, actionable bugs.

Real behavior proof

  • Behavior or issue addressed: A message-channel run that receives the provider error Custom tool call output is missing for call id: ... should return the clear provider conversation-state message instead of a generic runner failure or hidden auto-reset.
  • Real environment tested: Local OpenClaw checkout on Node 22.22.0, running the production provider request classifier against the OpenAI Responses error wording observed from the channel failure.
  • Exact steps or command run after this patch:
pnpm exec tsx --eval '
import { classifyProviderRequestError } from "./src/auto-reply/reply/provider-request-error-classifier.ts";
const classification = classifyProviderRequestError(new Error("Custom tool call output is missing for call id: call_live_123."));
console.log(JSON.stringify(classification, null, 2));
'
  • Evidence after fix: Terminal output from the command above:
{
  "code": "provider_conversation_state_error",
  "userMessage": "⚠️ The model provider rejected the conversation state. Please try again, or use /new to start a fresh session.",
  "technicalMessage": "Custom tool call output is missing for call id: call_live_123."
}
  • Observed result after fix: The provider error is classified as provider_conversation_state_error and maps to the message-channel text ⚠️ The model provider rejected the conversation state. Please try again, or use /new to start a fresh session.
  • What was not tested: A live Discord/Slack provider call was not forced in this PR because we do not have a deterministic way to make a real provider reject a malformed transcript on demand. The runner-level external-channel delivery path is covered by the targeted regression tests listed above.

@openclaw-barnacle openclaw-barnacle Bot added size: XS triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 16, 2026
@clawsweeper

clawsweeper Bot commented May 16, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

Summary
The PR adds a provider conversation-state error classifier, routes matching external-channel runner failures to a clear user-facing reply, updates regression coverage, and adds a changelog entry.

Reproducibility: yes. from source inspection. Current main only classifies the Bedrock-style toolResult/toolUse mismatch and still auto-resets some role-ordering failures, while the OpenAI custom-tool-output wording in the PR body would not hit the current special case.

Real behavior proof
Sufficient (terminal): The PR body includes after-fix terminal output from a real local checkout running the production classifier against the observed provider error wording; live provider forcing was not deterministic and is disclosed.

Next step before merge
No ClawSweeper repair job is needed; the remaining action is normal maintainer review/merge gating for a clean external PR.

Security
Cleared: The diff does not introduce a concrete security or supply-chain concern; it only changes reply error classification/routing, tests, and changelog text.

Review details

Best possible solution:

Land the focused classifier/routing fix after normal maintainer merge gates, keeping deeper transcript repair work separate from the user-facing failure classification path.

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

Yes, from source inspection. Current main only classifies the Bedrock-style toolResult/toolUse mismatch and still auto-resets some role-ordering failures, while the OpenAI custom-tool-output wording in the PR body would not hit the current special case.

Is this the best way to solve the issue?

Yes. A small centralized classifier used by the existing external failure routing is the narrowest maintainable fix for these provider conversation-state rejections; it avoids broad transcript/session migration changes in this PR.

Acceptance criteria:

  • node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts
  • node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts
  • git diff --check upstream/main...HEAD

What I checked:

  • Current main external failure handling: Current main only special-cases the Bedrock/Anthropic-style toolResult/toolUse mismatch in isToolResultTurnMismatchError; the OpenAI Custom tool call output is missing ... call id wording would not match this branch and would fall through to the generic external runner failure path. (src/auto-reply/reply/agent-runner-execution.ts:459, 83e19ca469e2)
  • Current main role-ordering behavior: Current main still auto-resets or deletes session state for role-ordering / Gemini function-call ordering errors before falling back, which is the behavior the PR intentionally replaces with a clear provider conversation-state reply for external channels. (src/auto-reply/reply/agent-runner-execution.ts:2385, 83e19ca469e2)
  • PR implementation: The diff adds classifyProviderRequestError, recognizes OpenAI missing custom tool output, Bedrock/Anthropic tool-result mismatch, Gemini function-call ordering, and role alternation wording, then routes those classifications through buildExternalRunFailureReply and runner catch paths. (src/auto-reply/reply/provider-request-error-classifier.ts:12, bb8997465838)
  • PR regression coverage: The PR adds classifier unit coverage, runner coverage for OpenAI missing custom tool output and non-reset role ordering behavior, an e2e expectation update, and dispatch coverage showing the provider conversation-state payload is sent as an outbound channel reply. (src/auto-reply/reply/agent-runner-execution.test.ts:4275, bb8997465838)
  • Real behavior proof in PR body: The PR body includes after-fix terminal output from running the production classifier via pnpm exec tsx --eval against the observed OpenAI Responses error wording and shows the expected provider_conversation_state_error classification and user message. (bb8997465838)
  • Feature history: A bounded blame/log pass ties the current main failure-handling lines for the mismatch classifier, external reply builder, and role-ordering reset branches to commit 3fad770. (src/auto-reply/reply/agent-runner-execution.ts:459, 3fad770510e9)

Likely related people:

  • Peter Steinberger: git blame for the current main provider-mismatch and role-ordering failure handling points to the commit that currently carries this auto-reply runner behavior. (role: current source introducer / recent area contributor; confidence: high; commits: 3fad770510e9; files: src/auto-reply/reply/agent-runner-execution.ts)
  • osolmaz: The PR timeline shows osolmaz marked the PR ready for review and requested ClawSweeper re-review, and the PR history includes their changelog adjustment commits. (role: recent PR reviewer / branch steward; confidence: medium; commits: c48c8adf9f21, bb8997465838; files: CHANGELOG.md)

Remaining risk / open question:

  • I did not execute the PR tests in this read-only review; the verdict relies on source inspection plus the contributor-reported verification output.
  • A live Discord/Slack/Gemini/Telegram provider rejection was not forced; the PR body explains that this is not deterministic, and the branch covers the runner and delivery path with targeted regression tests.

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

@dutifulbob
dutifulbob marked this pull request as draft May 17, 2026 02:37
@dutifulbob
dutifulbob force-pushed the fix-stale-embedded-run-clear branch from dba5517 to 3815312 Compare May 17, 2026 03:11
@clawsweeper clawsweeper Bot added P2 Normal backlog priority with limited blast radius. impact:session-state Session, memory, transcript, context, or agent state can drift or corrupt. labels May 17, 2026
@dutifulbob dutifulbob changed the title fix: classify OpenAI tool history mismatch errors fix: classify provider conversation state errors May 17, 2026
@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 May 17, 2026
@dutifulbob

Copy link
Copy Markdown
Contributor Author

Implementation loop report for the current head 381531275b0576a41cd8818ce0fe024c695d5828.

Summary:

  • Added the provider conversation-state classifier and routed recognized provider request-state failures to the clear message-channel reply.
  • Stopped the previous auto-reset path for those provider conversation-state failures, so the user sees the actionable provider error instead.
  • Updated the PR body with after-fix runtime proof; the Real behavior proof gate now passes.

Validation:

  • pnpm exec oxfmt --check --threads=1 CHANGELOG.md src/auto-reply/reply/agent-runner-execution.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/provider-request-error-classifier.ts src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts passed.
  • pnpm test src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts passed.
  • pnpm test src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts passed.
  • git diff --check upstream/main...HEAD passed.
  • Review command against main reported no discrete, actionable bugs.

Checks:

  • Real behavior proof: pass.
  • Workflow Sanity actionlint and no-tabs: pass.
  • Auto response, Labeler, Socket checks: pass.
  • Broad CI lanes are skipped while this PR remains draft/external.

The earlier missing-proof comment is stale after the PR body update. I left the PR as draft, preserving the requested state for maintainer policy review before it is marked ready.

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 17, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 17, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 17, 2026
@dutifulbob
dutifulbob force-pushed the fix-stale-embedded-run-clear branch from 0905a8e to a718482 Compare May 17, 2026 06:49
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 17, 2026
@osolmaz
osolmaz marked this pull request as ready for review May 17, 2026 06:53
@osolmaz

osolmaz commented May 17, 2026

Copy link
Copy Markdown
Member

@clawsweeper review

@clawsweeper

clawsweeper Bot commented May 17, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

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

Re-review progress:

@dutifulbob

Copy link
Copy Markdown
Contributor Author

The ClawSweeper re-review failure is a nothingburger: the workflow completed, but the inner Codex review timed out with spawnSync codex ETIMEDOUT. It did not find a code issue.

The conflict resolution and fix were tested locally after rebasing:

  • pnpm exec oxfmt --check --threads=1 ... passed
  • git diff --check upstream/main...HEAD passed
  • node scripts/run-vitest.mjs src/auto-reply/reply/dispatch-from-config.test.ts src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts passed: 218 tests
  • node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts passed: 50 tests

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 17, 2026
@osolmaz
osolmaz force-pushed the fix-stale-embedded-run-clear branch from bb89974 to bf9bb6d Compare May 17, 2026 08:18
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 17, 2026
@osolmaz
osolmaz force-pushed the fix-stale-embedded-run-clear branch from bf9bb6d to ad4ae49 Compare May 17, 2026 08:21
@osolmaz
osolmaz merged commit 80d03a1 into openclaw:main May 17, 2026
102 checks passed
@osolmaz

osolmaz commented May 17, 2026

Copy link
Copy Markdown
Member

Landed in 80d03a1.

Source head: ad4ae49.

Validation before landing:

  • pnpm docs:list
  • pnpm build
  • pnpm check
  • node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/dispatch-from-config.test.ts
  • node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts

Notes:

  • The full local pnpm test sweep hit unrelated baseline failures outside this PR surface (src/channels/plugins/configured-state.test.ts, extensions/acpx/src/config.test.ts, extensions/feishu/src/setup-surface.test.ts).
  • The PR branch was rebased cleanly against moving main before the final pinned squash merge.

eleboucher pushed a commit to eleboucher/homelab that referenced this pull request May 18, 2026
…026.5.18) (#557)

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.12` → `2026.5.18` |

---

### Release Notes

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

### [`v2026.5.18`](https://github.com/openclaw/openclaw/releases/tag/v2026.5.18): openclaw 2026.5.18

[Compare Source](https://github.com/openclaw/openclaw/compare/v2026.5.12...v2026.5.18)

##### Changes

- Agents: clarify that fixes should default to clean bounded refactors, lean internals, and explicit plugin SDK/API deprecation paths.
- Dependencies: update `@openclaw/proxyline` to 0.3.3.
- Dependencies: update Pi packages to 0.75.1 and raise the minimum supported Node.js 22 line to 22.19.
- Docker/Podman: add `OPENCLAW_IMAGE_APT_PACKAGES` as the runtime-neutral image build arg for extra apt packages while keeping `OPENCLAW_DOCKER_APT_PACKAGES` as a legacy fallback. ([#&#8203;62431](https://github.com/openclaw/openclaw/issues/62431)) Thanks [@&#8203;urtabajev](https://github.com/urtabajev).
- Gateway/ACPX: attribute startup probe, config, runtime, and resource-count costs in restart traces without changing readiness behavior. ([#&#8203;83300](https://github.com/openclaw/openclaw/issues/83300)) Thanks [@&#8203;samzong](https://github.com/samzong).
- Gateway: overlap startup logging and plugin-service startup with channel sidecars to reduce restart ready latency while preserving `/readyz` sidecar gating. ([#&#8203;83301](https://github.com/openclaw/openclaw/issues/83301)) Thanks [@&#8203;samzong](https://github.com/samzong).
- Plugins/admin-http-rpc: allow trusted admin HTTP RPC clients to start and wait for web QR login flows. ([#&#8203;83259](https://github.com/openclaw/openclaw/issues/83259)) Thanks [@&#8203;liorb-mountapps](https://github.com/liorb-mountapps).
- Mac app: redesign Settings pages with consistent card layouts, cached navigation, cleaner permissions/voice/skills/cron/exec/debug panes, and steadier spacing around the native sidebar.
- Skills: rename the repo-local Codex closeout review skill and helper to `autoreview` while preserving the Codex-first fallback behavior.
- Skills: add a meme-maker skill for curated template search, local SVG/PNG rendering, Imgflip hosted rendering, and Know Your Meme provenance links.
- Browser: surface pending and recently handled modal dialogs in snapshots, return `blockedByDialog` when an action opens a modal, and allow `browser dialog --dialog-id` to answer pending dialogs.
- Agents/tools: shorten built-in tool descriptions and schema hints across media, messaging, sessions, cron, Gateway, web, image/PDF, TTS, nodes, and plan tools while preserving routing guardrails.
- Skills: add node inspector debugging, fused diagram generation, and throwaway spike workflow skills.
- CLI/plugins: add `defineToolPlugin` plus `openclaw plugins build`, `validate`, and `init` for typed simple tool plugins with generated manifest metadata, optional tool declarations, and context factories.
- Agents/skills: tighten bundled skill prompts and metadata, quote skill descriptions, refresh current CLI/API guidance, and update embedded sherpa-onnx runtime downloads.
- Skills: update the Obsidian skill to target the official `obsidian` CLI and require its registered binary instead of the third-party `obsidian-cli`.
- Skills: add a Python debugging skill for pdb, breakpoint(), post-mortem inspection, and debugpy remote attach.
- Plugins/messages: add presentation capability limits for channel renderers, adapt rich message controls before native rendering, and mark legacy `interactive`/Slack directive producer APIs as deprecated.
- Proxy: support HTTPS managed forward-proxy endpoints and scoped `proxy.tls.caFile` CA trust for proxy endpoint TLS. ([#&#8203;79171](https://github.com/openclaw/openclaw/issues/79171)) Thanks [@&#8203;jesse-merhi](https://github.com/jesse-merhi).
- QA-Lab: add first-hour 20-turn and optional 100-turn runtime parity scenarios, with tier metadata for standard and soak QA gates. Fixes [#&#8203;80338](https://github.com/openclaw/openclaw/issues/80338); refs [#&#8203;80337](https://github.com/openclaw/openclaw/issues/80337). Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add `openclaw qa suite --runtime-parity-tier` and wire the standard Codex-vs-Pi tier into release checks separately from optional/live-only/soak lanes. Fixes [#&#8203;80337](https://github.com/openclaw/openclaw/issues/80337). Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add a live-only Codex Pi-shaped Read vocabulary canary so runtime parity catches native workspace-read prompt compatibility drift. ([#&#8203;80323](https://github.com/openclaw/openclaw/issues/80323)) Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add live-only harness self-health scenarios for plugin hook crashes, manifest contract errors, and WebChat direct-reply self-message routing. ([#&#8203;80323](https://github.com/openclaw/openclaw/issues/80323)) Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add runtime tool fixture scenarios and coverage reporting for Codex-native workspace tools, OpenClaw dynamic tools, and optional plugin-backed tools. Fixes [#&#8203;80173](https://github.com/openclaw/openclaw/issues/80173). Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: expose runtime tool fixture coverage through `openclaw qa coverage --tools`, with optional suite-summary evaluation for parity gate artifacts. Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: schedule a live-frontier Codex-vs-Pi runtime token-efficiency artifact lane in the all-lanes QA workflow. Fixes [#&#8203;80175](https://github.com/openclaw/openclaw/issues/80175). Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: hard-gate required OpenClaw dynamic runtime-tool drift in the standard Codex-vs-Pi tier with a blocking release-check verifier and publish the tool coverage report artifact. Fixes [#&#8203;80339](https://github.com/openclaw/openclaw/issues/80339); refs [#&#8203;80319](https://github.com/openclaw/openclaw/issues/80319). Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add the personal-agent approval-denial scenario so the benchmark pack verifies denied local reads stop cleanly without tool progress or fixture leaks. ([#&#8203;83150](https://github.com/openclaw/openclaw/issues/83150)) Thanks [@&#8203;iFiras-Max1](https://github.com/iFiras-Max1).
- QA-Lab: extend the personal-agent benchmark pack with a local task followthrough scenario for proof-backed pending, blocked, and done status reporting. Thanks [@&#8203;iFiras-Max1](https://github.com/iFiras-Max1).
- Gateway/performance: add `pnpm test:restart:gateway` benchmark tooling for repeated restart readiness, downtime, trace, and resource-slope evidence. ([#&#8203;83299](https://github.com/openclaw/openclaw/issues/83299)) Thanks [@&#8203;samzong](https://github.com/samzong).
- Android: switch Talk Mode to realtime Gateway relay voice sessions with streaming mic input, realtime audio playback, tool-result bridging, and on-screen transcripts. ([#&#8203;83130](https://github.com/openclaw/openclaw/issues/83130)) Thanks [@&#8203;sliekens](https://github.com/sliekens).

##### Fixes

- Discord/OpenAI: keep realtime Discord voice sessions hearing follow-up turns with OpenAI realtime and prebuffer assistant playback to avoid choppy starts. ([#&#8203;80505](https://github.com/openclaw/openclaw/issues/80505)) Thanks [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin).
- Media: prevent image metadata probing from invoking external decoder delegates on unrecognized image bytes, and stop fallback chaining after real processing errors.
- Media: install Sharp with the root package and fall back to sips, Windows native imaging, ImageMagick, GraphicsMagick, or ffmpeg for image resizing/conversion when Sharp is unavailable. Fixes [#&#8203;83401](https://github.com/openclaw/openclaw/issues/83401). Thanks [@&#8203;scotthuang](https://github.com/scotthuang).
- Telegram: deliver generated media completions back into forum topics by preserving topic IDs across requester-agent handoff. ([#&#8203;83556](https://github.com/openclaw/openclaw/issues/83556)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Gateway: defer update-check startup until after readiness so package update checks no longer block sidecar-ready startup, while preserving update broadcasts and shutdown cleanup. ([#&#8203;83520](https://github.com/openclaw/openclaw/issues/83520)) Thanks [@&#8203;samzong](https://github.com/samzong).
- Telegram: keep `/btw` and read-only status commands from aborting active runs, and avoid retaining raw update payloads in timed-out spool tombstones. Refs [#&#8203;83272](https://github.com/openclaw/openclaw/issues/83272).
- Agents/video: hide `video_generate` reference-audio parameters unless a registered video provider supports audio inputs.
- Plugins/xAI: echo PKCE challenge fields during OAuth authorization-code token exchange for xAI token-endpoint compatibility. ([#&#8203;83499](https://github.com/openclaw/openclaw/issues/83499)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Codex app-server: hydrate current inbound image attachments before queued runs so Responses-backed agents receive Discord and other channel images as native vision input. Fixes [#&#8203;83466](https://github.com/openclaw/openclaw/issues/83466). Thanks [@&#8203;iannwu](https://github.com/iannwu).
- Codex app-server: keep native code mode available without forcing code-mode-only so OpenClaw dynamic tool turns complete through the app-server tool bridge. Fixes [#&#8203;83109](https://github.com/openclaw/openclaw/issues/83109). Thanks [@&#8203;daswass](https://github.com/daswass).
- Release stability: recover stale session diagnostics and Codex OAuth fallback state so stuck runs and reused refresh tokens clear without blocking follow-up work. ([#&#8203;83503](https://github.com/openclaw/openclaw/issues/83503)) Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- Messages/TTS: apply TTS directives before message-tool sends reach core, gateway, or plugin delivery so opt-in message-tool rooms and proactive sends attach voice notes instead of leaking raw tags. Fixes [#&#8203;81598](https://github.com/openclaw/openclaw/issues/81598). Thanks [@&#8203;CG-Intelligence-Agent-Jack](https://github.com/CG-Intelligence-Agent-Jack) and [@&#8203;CoronovirusG10](https://github.com/CoronovirusG10).
- Codex app-server: preserve network access for sandboxed Codex code-mode turns when the OpenClaw sandbox allows outbound egress. Fixes [#&#8203;83347](https://github.com/openclaw/openclaw/issues/83347). Thanks [@&#8203;YusukeIt0](https://github.com/YusukeIt0).
- QA-Lab: keep the OTLP smoke decoder independent of removed OpenTelemetry generated-root internals.
- Messages: default group/channel visible replies to automatic final delivery again, keeping `message_tool` opt-in for ambient/shared rooms and tool-reliable models.
- CLI/TUI: force standalone `/exit` runs to terminate after `runTui` returns so onboarding-launched TUI children do not stay alive invisibly. ([#&#8203;83501](https://github.com/openclaw/openclaw/issues/83501)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Agents/code mode: honor per-agent code-mode config in schema, runtime catalog activation, and model payload filtering. Fixes [#&#8203;83388](https://github.com/openclaw/openclaw/issues/83388). Thanks [@&#8203;Kaspre](https://github.com/Kaspre).
- Agents/code mode: preserve agent, session, run, and channel context in `before_tool_call` hooks for top-level `exec`/`wait` dispatches. Fixes [#&#8203;83387](https://github.com/openclaw/openclaw/issues/83387).
- QQBot: shorten C2C typing indicators to a 10-second window renewed every 5 seconds, capped to keep a final passive-reply slot available. ([#&#8203;83469](https://github.com/openclaw/openclaw/issues/83469))
- Replies: keep final payload delivery after live preview updates so channels can finalize or send the completed answer instead of losing preview-only drafts. ([#&#8203;83468](https://github.com/openclaw/openclaw/issues/83468))
- Discord: deliver final replies in progress-mode preview streams instead of deduplicating the final visible message. ([#&#8203;83443](https://github.com/openclaw/openclaw/issues/83443)) Thanks [@&#8203;compoodment](https://github.com/compoodment).
- Providers/Xiaomi: replay MiMo Anthropic-compatible `reasoning_content` as provider-required thinking blocks even when OpenClaw thinking is disabled, fixing follow-up tool turns for `mimo-v2-flash`. Fixes [#&#8203;83407](https://github.com/openclaw/openclaw/issues/83407). Thanks [@&#8203;Xgenious7](https://github.com/Xgenious7).
- Agents/exec approvals: forward approval-runtime credentials on agent-owned Gateway approval calls so approved async commands complete through the existing runtime path instead of stalling on unauthenticated follow-up calls. Thanks [@&#8203;IWhatsskill](https://github.com/IWhatsskill), [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), and [@&#8203;jesse-merhi](https://github.com/jesse-merhi).
- Gateway/skills: preflight remote macOS skill-bin refreshes with a WebSocket connectivity check so stale node sessions skip quickly instead of logging slow `system.which` timeout warnings.
- CLI/config: keep broken discovered plugins that are not referenced by active config from failing `openclaw config validate`, while preserving fatal errors for explicitly configured plugin entries.
- GitHub Copilot: drop unsafe native Responses reasoning replay items with non-replayable IDs before dispatch, preventing affected Copilot sessions from failing with `invalid_request_body`. Fixes [#&#8203;83220](https://github.com/openclaw/openclaw/issues/83220). Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- Agents/Codex: fail closed when an explicitly requested Codex harness is not registered instead of silently trying configured model fallbacks. Fixes [#&#8203;83349](https://github.com/openclaw/openclaw/issues/83349). Thanks [@&#8203;r2-vibes](https://github.com/r2-vibes).
- QA-Lab: make runtime tool coverage fail on missing required tool exercise instead of treating pass/pass parity envelope drift as missing coverage.
- Core/plugins: harden clawpatch-reported edge cases across gateway auth cleanup, Claude session id paths, plugin activation policy, apply-patch hunk handling, diagnostic redaction, and plugin metadata validation.
- UI: show reasoning choices as plain labels instead of leaking internal override wording in session and chat pickers.
- Mac app: avoid repeating the Configuration heading inside channel quick settings.
- Mac app: keep the Settings sidebar always visible and remove the redundant titlebar hide/show control.
- Mac app: prefer explicit private/Tailscale/LAN Gateway endpoints over SSH tunnels, preserve legacy loopback tunnel configs, persist transport choices, and show captured SSH stderr when tunneling really fails.
- Gateway/sessions: keep ACP/acpx and runtime child sessions visible in configured-only session lists when their owner or parent session belongs to a configured agent.
- Mac app: keep app-level menu commands and Dashboard failure states reachable when the remote Gateway is disconnected.
- Mac app: allow longer Gateway and Context errors to wrap in the menu instead of truncating the useful failure detail.
- Mac app: tighten remote Gateway fields in Settings so the Connection pane keeps readable labels and full action button text.
- Mac app: keep custom Settings card rows left-aligned and full-width so Discovery and status sections no longer appear centered or detached.
- Mac app: align Location permission controls to the same trailing column as the rest of Settings.
- Mac app: add Dashboard, Chat, Canvas, and Settings shortcuts to the Dock icon menu.
- Mac app: replace the Settings window's native split-view sidebar with an explicit layout so page content keeps its leading gutter when the sidebar is shown or hidden.
- Mac app: render channel quick config as aligned Settings rows and hide schema-only variants that cannot be edited safely from the quick pane.
- Gateway/webchat: hide internal runtime-context and other `display: false` transcript messages from Chat history and live message events. Fixes [#&#8203;83216](https://github.com/openclaw/openclaw/issues/83216). Thanks [@&#8203;EmpireCreator](https://github.com/EmpireCreator).
- CLI/help: keep `gateway`, `doctor`, `status`, and `health` help registration out of action/runtime imports so subcommand `--help` stays lightweight in constrained terminals. Fixes [#&#8203;83228](https://github.com/openclaw/openclaw/issues/83228). Thanks [@&#8203;dfguerrerom](https://github.com/dfguerrerom).
- Cron/Discord: keep explicit announce runs in message-tool-only source-reply mode so scheduled agent turns post once instead of also echoing through automatic visible replies. Fixes [#&#8203;83261](https://github.com/openclaw/openclaw/issues/83261). Thanks [@&#8203;Theralley](https://github.com/Theralley).
- Telegram: preserve forum-topic origin targets in inbound, audio-preflight, and skipped-message hook contexts so follow-up delivery stays bound to the originating topic. Fixes [#&#8203;83302](https://github.com/openclaw/openclaw/issues/83302). Thanks [@&#8203;M00zyx](https://github.com/M00zyx).
- Telegram: retry HTTP 421 Misdirected Request send failures on a fresh fallback transport so transient edge-node routing errors no longer drop outbound replies. Fixes [#&#8203;48892](https://github.com/openclaw/openclaw/issues/48892). ([#&#8203;48908](https://github.com/openclaw/openclaw/issues/48908)) Thanks [@&#8203;MarsDoge](https://github.com/MarsDoge).
- Telegram: fail topic sends closed when Telegram reports `message thread not found` instead of retrying without `message_thread_id` into the base chat. Refs [#&#8203;83302](https://github.com/openclaw/openclaw/issues/83302).
- Config/subagents: remove ignored agent-model `timeoutMs` keys, keep subagent model config to primary/fallback selection, and clean shipped stale config through doctor. Fixes [#&#8203;83291](https://github.com/openclaw/openclaw/issues/83291). Thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- Mac app: align the Sessions settings pane with the standard Settings page gutter and row spacing.
- OpenAI/Codex: stop rejecting available `openai-codex` GPT-5.1, GPT-5.2, and GPT-5.3 model refs during config validation, while keeping removed Spark aliases suppressed. Fixes [#&#8203;83303](https://github.com/openclaw/openclaw/issues/83303).
- Plugins/xAI: complete OAuth-backed xAI login and sidecar auth fixes, including guarded loopback callback CORS handling, video generation polling/defaults, and native-host User-Agent attribution. ([#&#8203;83322](https://github.com/openclaw/openclaw/issues/83322)) Thanks [@&#8203;Jaaneek](https://github.com/Jaaneek).
- Codex app-server: preserve streamed native command output in mirrored transcripts and trajectory exports when final snapshots omit aggregated output. ([#&#8203;83200](https://github.com/openclaw/openclaw/issues/83200)) Thanks [@&#8203;rozmiarD](https://github.com/rozmiarD).
- Codex app-server: fail closed when chat or sender policy denies tools, disabling native code, app, environment, and user MCP surfaces for restricted turns. ([#&#8203;82374](https://github.com/openclaw/openclaw/issues/82374)) Thanks [@&#8203;VACInc](https://github.com/VACInc).
- Codex app-server: keep recent context-engine messages when oversized projected history is truncated, so short follow-ups in long channel sessions do not fall back to stale earlier turns. ([#&#8203;83127](https://github.com/openclaw/openclaw/issues/83127)) Thanks [@&#8203;VACInc](https://github.com/VACInc).
- Codex app-server: keep OpenClaw session spawning searchable while steering Codex-native delegation through native subagents, avoiding duplicate direct subagent surfaces. ([#&#8203;83329](https://github.com/openclaw/openclaw/issues/83329)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Codex app-server: recover stale childless Codex-native subagent task mirrors during maintenance and allow their registry rows to be cancelled without an OpenClaw child session. ([#&#8203;82836](https://github.com/openclaw/openclaw/issues/82836)) Thanks [@&#8203;yshimadahrs-ship-it](https://github.com/yshimadahrs-ship-it) and [@&#8203;joshavant](https://github.com/joshavant).
- Feishu: return bound subagent delivery origins from session thread setup so Feishu subagent completions route back to the same DM or topic. ([#&#8203;83190](https://github.com/openclaw/openclaw/issues/83190)) Thanks [@&#8203;100menotu001](https://github.com/100menotu001).
- CLI/update: tailor post-update Gateway recovery hints by platform, showing systemd, LaunchAgent, Scheduled Task, or generic service-manager guidance instead of macOS-only recovery text. ([#&#8203;83096](https://github.com/openclaw/openclaw/issues/83096)) Thanks [@&#8203;rubencu](https://github.com/rubencu).
- Plugins: apply a default 15-second timeout to legacy `before_agent_start` hooks so hung plugin handlers no longer block agent startup. Fixes [#&#8203;48534](https://github.com/openclaw/openclaw/issues/48534). ([#&#8203;83136](https://github.com/openclaw/openclaw/issues/83136)) Thanks [@&#8203;therahul-yo](https://github.com/therahul-yo).
- Feishu: refresh inbound session delivery context for DM, group, and broadcast turns so later replies do not inherit stale WebChat routing. Fixes [#&#8203;78274](https://github.com/openclaw/openclaw/issues/78274).
- Agents/subagents: require the initial subagent registry save before reporting spawn accepted, returning a spawn error instead of losing an untracked run when the registry write fails. ([#&#8203;83146](https://github.com/openclaw/openclaw/issues/83146)) Thanks [@&#8203;yetval](https://github.com/yetval).
- QA-Lab/qa-channel: attach redacted agent tool-start traces to outbound `QaBusMessage` records so scenarios can assert actual tool use instead of relying only on reply text. Fixes [#&#8203;67637](https://github.com/openclaw/openclaw/issues/67637). Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: fail live runtime parity reports when assistant-message usage is missing, preventing `0 vs 0` live token rows from being reported as passing proof. Fixes [#&#8203;80411](https://github.com/openclaw/openclaw/issues/80411). Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add a runtime token-efficiency sidecar report that classifies Codex savings separately from regressions and fails only positive Codex-over-Pi live token deltas above threshold. Fixes [#&#8203;81093](https://github.com/openclaw/openclaw/issues/81093). Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: fail Codex-backed OpenAI live runtime-pair runs before launching isolated workers when no portable Codex auth is available, while staging API-key fallbacks and configured Codex keys for isolated QA agents. Fixes [#&#8203;80412](https://github.com/openclaw/openclaw/issues/80412). Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: refresh parity gates, mock frontier fixtures, model scenarios, and workflow artifact lanes to compare GPT-5.5 against Claude Opus 4.7. Fixes [#&#8203;74262](https://github.com/openclaw/openclaw/issues/74262). Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: make mock parity dispatch provider-aware for source discovery and subagent scenarios so OpenAI and Anthropic lanes no longer share identical canned plans. Fixes [#&#8203;64879](https://github.com/openclaw/openclaw/issues/64879). Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: stop returning Control UI bearer tokens from unauthenticated bootstrap payloads and bind Docker harness ports to loopback-only host addresses. ([#&#8203;66355](https://github.com/openclaw/openclaw/issues/66355)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Mac app: avoid a SwiftUI metadata crash when rendering the Cron Jobs settings pane.
- Agents/subagents: preserve run-mode keep subagent registry entries past the session sweep TTL, so kept subagent runs remain visible after cleanup completes. Fixes [#&#8203;83132](https://github.com/openclaw/openclaw/issues/83132). ([#&#8203;83168](https://github.com/openclaw/openclaw/issues/83168)) Thanks [@&#8203;yetval](https://github.com/yetval).
- Agents/OpenAI streams: yield via `setTimeout(0)` instead of `setImmediate` between bursty Responses chunks so abort timers can fire during the yield, keeping cancel-on-timeout responsive on hot streams. Refs [#&#8203;82462](https://github.com/openclaw/openclaw/issues/82462).
- Agents/Codex: keep legacy `oauthRef`-backed OAuth profiles usable while `openclaw doctor --fix` migrates them back to inline credentials, without creating new sidecar credentials. ([#&#8203;83312](https://github.com/openclaw/openclaw/issues/83312)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Agents/Codex: load the selected provider owner alongside the Codex harness runtime so `openai-codex` models resolve when plugin allowlists scope runtime loading. Fixes [#&#8203;83380](https://github.com/openclaw/openclaw/issues/83380). ([#&#8203;83519](https://github.com/openclaw/openclaw/issues/83519)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Telegram: fail stalled isolated-ingress handlers into tombstones and abort same-lane reply work before restarting, so later same-chat updates drain after a hung turn. Fixes [#&#8203;83272](https://github.com/openclaw/openclaw/issues/83272). ([#&#8203;83505](https://github.com/openclaw/openclaw/issues/83505)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- CLI/config: send SecretRef diagnostics to stderr so JSON command stdout remains parseable.
- CLI/doctor: seed Control UI allowed origins when migrating legacy non-loopback gateway bind host aliases like `0.0.0.0`. Fixes [#&#8203;83286](https://github.com/openclaw/openclaw/issues/83286). Thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- CLI/plugins: ship the bundled memory CLI as a package entry so package-installed `openclaw memory` commands register correctly.
- CLI/update: defer doctor-time plugin package installs during package swaps and seed post-core repair from the updated install registry, preventing duplicate reinstall failures.
- CLI/update: preserve old-parent-readable config metadata during legacy package handoffs, fall back only to official `@openclaw/*` npm plugin packages when ClawHub plugin artifacts are unavailable, and keep managed service package roots authoritative during updates.
- Feishu: detect SecretRef top-level credentials as a configured default account instead of treating object-backed app secrets as missing.
- Gateway/restart: keep ordinary unmanaged SIGUSR1/config restarts in-process instead of detach-spawning an orphaned child, preserving custom supervisor PID tracking while leaving update restarts on the fresh-process path. Fixes [#&#8203;65668](https://github.com/openclaw/openclaw/issues/65668).
- CLI/completion: resolve concrete PowerShell profile paths and reload commands during setup and doctor completion installation. Fixes [#&#8203;44296](https://github.com/openclaw/openclaw/issues/44296). ([#&#8203;83059](https://github.com/openclaw/openclaw/issues/83059)) Thanks [@&#8203;yu-xin-c](https://github.com/yu-xin-c).
- Telegram: keep isolated long polling below the hard `getUpdates` request guard so idle bot accounts with high `timeoutSeconds` do not false-disconnect and restart-loop. Fixes [#&#8203;83264](https://github.com/openclaw/openclaw/issues/83264). Thanks [@&#8203;riccodecarvalho](https://github.com/riccodecarvalho).
- Providers/Google: preserve and recover Gemini 3 tool-call thought signatures during native replay so function-calling turns no longer fail with missing `thought_signature` 400s. Fixes [#&#8203;72879](https://github.com/openclaw/openclaw/issues/72879). ([#&#8203;80358](https://github.com/openclaw/openclaw/issues/80358)) Thanks [@&#8203;abnershang](https://github.com/abnershang).
- Telegram: skip transcript-only delivery mirrors and gateway-injected rows when resolving latest assistant text, preventing retained previews from replacing final replies with stale fragments. Fixes [#&#8203;83159](https://github.com/openclaw/openclaw/issues/83159). ([#&#8203;83362](https://github.com/openclaw/openclaw/issues/83362)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Memory/QMD: keep lexical search on raw hyphenated queries while normalizing semantic QMD sub-searches, avoiding fallback to the builtin index for dashed identifiers and dates. Fixes [#&#8203;81328](https://github.com/openclaw/openclaw/issues/81328).
- Memory-core: distinguish sqlite-vec load failures from missing semantic vector embeddings in degraded `memory index` warnings, so vector recall diagnostics point at unresolved dimensions instead of blaming sqlite-vec when the store is ready. Fixes [#&#8203;75624](https://github.com/openclaw/openclaw/issues/75624). ([#&#8203;83056](https://github.com/openclaw/openclaw/issues/83056)) Thanks [@&#8203;xuruiray](https://github.com/xuruiray) and [@&#8203;Noah3521](https://github.com/Noah3521).
- Agents/subagents: preserve sandbox-peer controller ownership while routing completion announcements back to the originating run session, keeping subagent control and completion delivery scoped correctly. Fixes [#&#8203;80201](https://github.com/openclaw/openclaw/issues/80201). ([#&#8203;80242](https://github.com/openclaw/openclaw/issues/80242)) Thanks [@&#8203;Jerry-Xin](https://github.com/Jerry-Xin).
- Gateway: continue restarting remaining channels when one hot-reload channel restart fails, while still reporting aggregate reload failure and rolling back plugin pre-replace stops. Fixes [#&#8203;83054](https://github.com/openclaw/openclaw/issues/83054). Thanks [@&#8203;zqchris](https://github.com/zqchris).
- Telegram: keep hot-reload restarts from marking polling accounts manually stopped and restart isolated ingress cleanly after worker shutdown, preserving Telegram replies across config reloads. Fixes [#&#8203;83008](https://github.com/openclaw/openclaw/issues/83008). ([#&#8203;83410](https://github.com/openclaw/openclaw/issues/83410)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Telegram/Ollama: pass current Telegram image attachments into native PI/Ollama vision turns so live photo prompts reach Ollama as native images. Fixes [#&#8203;83023](https://github.com/openclaw/openclaw/issues/83023). ([#&#8203;83516](https://github.com/openclaw/openclaw/issues/83516)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Gateway/secrets: split the lightweight secrets runtime state and auth-store cache from the full secrets runtime and take a startup fast path when the gateway startup config has no SecretRef values, speeding up secrets startup while preserving cleanup and refresh semantics.
- Codex app-server: rotate oversized native Codex threads before resume and cap dynamic tool-result text entering native Codex sessions, preventing stale oversized context from surviving OpenClaw compaction. ([#&#8203;82981](https://github.com/openclaw/openclaw/issues/82981)) Thanks [@&#8203;hansolo949](https://github.com/hansolo949).
- Gateway/restart: drain pending replies and active chat runs during restart shutdown before sockets and channels close, aborting timed-out chat runs through the normal cleanup path. ([#&#8203;69121](https://github.com/openclaw/openclaw/issues/69121)) Thanks [@&#8203;alexlomt](https://github.com/alexlomt).
- Agents/Codex: use the Codex runtime context window for OpenAI-model preflight compaction and memory flush checks, so GPT-5.5 Codex sessions compact before hitting the smaller native context limit. Fixes [#&#8203;82982](https://github.com/openclaw/openclaw/issues/82982). Thanks [@&#8203;vliuyt](https://github.com/vliuyt).
- QA-Lab: clean orphaned gateway temp roots when a suite parent exits and wait on gateway plus transport readiness after config restarts, reducing stale `qa-channel` noise from interrupted runs. Fixes [#&#8203;65506](https://github.com/openclaw/openclaw/issues/65506). Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- QA-Lab: wake qa-bus long polls that arrive with stale future cursors after a bus restart, preserving reconnect readiness for harness clients. ([#&#8203;67142](https://github.com/openclaw/openclaw/issues/67142)) Thanks [@&#8203;hxy91819](https://github.com/hxy91819).
- QA-Lab: stage Multipass transfer scripts under OpenClaw's preferred temp root instead of raw OS temp paths, keeping the VM runner inside temp-path guardrails. ([#&#8203;64098](https://github.com/openclaw/openclaw/issues/64098)) Thanks [@&#8203;ImLukeF](https://github.com/ImLukeF).
- Agents/replies: keep surviving reply media and append a warning when other media references fail, so partial media normalization no longer drops failures silently. Thanks [@&#8203;Jerry-Xin](https://github.com/Jerry-Xin).
- Config/models: accept `thinkingFormat: "together"` in model compat config so Together routes can opt into the Together-specific thinking response shape.
- Plugins/tokenjuice: bump the bundled tokenjuice runtime to 0.7.1, bringing Codex hook approval compatibility, pre-tool command wrapping fixes, and Rolldown/Vitest output compaction improvements into the OpenClaw plugin.
- Agents/OpenAI: stop post-processing GPT-5 final replies with hardcoded brevity caps, preserving full channel responses instead of appending synthetic ellipses, and log when strict-agentic GPT-5 execution activates. Fixes [#&#8203;82910](https://github.com/openclaw/openclaw/issues/82910).
- Mac app: refine the Settings General and Connection panes with cleaner status panels, card rows, and a single native titlebar sidebar toggle.
- Agents/media: deliver failed async image, music, and video generation completions directly when requester-session completion handoff fails, so channel users see provider errors instead of silent fallback stalls.
- Browser/CDP: keep loopback proxy bypass active across both `NO_PROXY` casings and redact home-relative Chrome MCP profile paths in attach-failure diagnostics.
- Agents/music: steer song, jingle, beat, anthem, and instrumental requests toward `music_generate` audio creation instead of lyric-only replies, and reserve `lyrics` for exact sung words.
- Codex app-server: record native Codex tool calls and results into trajectory artifacts so debug/trajectory exports capture the full Codex-native tool history, not just OpenClaw-bridged turns. Thanks [@&#8203;vyctorbrzezowski](https://github.com/vyctorbrzezowski).
- Codex/app-server: keep bound conversation sessions on the owning agent runtime so native Codex control and follow-up turns do not fall back to the default agent client. Fixes [#&#8203;82954](https://github.com/openclaw/openclaw/issues/82954). ([#&#8203;82993](https://github.com/openclaw/openclaw/issues/82993))
- CLI/infer: run gateway model probes in fresh explicit sessions so one-shot provider checks do not inherit default agent transcript state. ([#&#8203;82861](https://github.com/openclaw/openclaw/issues/82861)) Thanks [@&#8203;Kaspre](https://github.com/Kaspre).
- Providers/Together: send video-generation requests to Together's v2 video API even when shared text-model config still points at the v1 base URL. ([#&#8203;82992](https://github.com/openclaw/openclaw/issues/82992))
- Browser CLI: preserve browser-level options on nested commands, skip option values during lazy command registration, and keep long-running wait/download/dialog hooks open for their advertised wait window.
- CLI/sessions: accept `openclaw sessions list` as an alias for `openclaw sessions`, matching other list-style commands. Fixes [#&#8203;81139](https://github.com/openclaw/openclaw/issues/81139). ([#&#8203;81163](https://github.com/openclaw/openclaw/issues/81163)) Thanks [@&#8203;YB0y](https://github.com/YB0y).
- Channels/stream previews: widen compact progress draft lines and cut prose at word boundaries while preserving command/path suffixes, with `streaming.progress.maxLineChars` for channel-specific tuning.
- CLI/plugins: have `openclaw plugins doctor` warn when a configured runtime needs a missing owner plugin, sharing the same install mapping as `openclaw doctor --fix`. Fixes [#&#8203;81326](https://github.com/openclaw/openclaw/issues/81326). ([#&#8203;81674](https://github.com/openclaw/openclaw/issues/81674)) Thanks [@&#8203;Zavianx](https://github.com/Zavianx).
- Agents/Codex: route OpenAI runs that resolve to `openai-codex` through the Codex provider and bootstrap OpenClaw's stored OAuth profile into the Codex harness when the harness owns transport, so `openai/*` model refs no longer fail with `No API key found for openai-codex` despite an existing Codex OAuth profile. ([#&#8203;82864](https://github.com/openclaw/openclaw/issues/82864)) Thanks [@&#8203;ragesaq](https://github.com/ragesaq).
- Agents/ACP: distinguish prompt-submitted and runtime-active child stalls from true interactive waits, including redacted proxy-env diagnostics for Codex ACP no-output runs. Fixes [#&#8203;44810](https://github.com/openclaw/openclaw/issues/44810).
- Agents/memory: explain that memory-triggered compaction exposes only `read` and append-only `write` when configured core tools are unavailable in `tools.allow` warnings. Fixes [#&#8203;82941](https://github.com/openclaw/openclaw/issues/82941). Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- Agents/OpenAI: preserve deterministic tool payload ordering for prompt-cache reuse across OpenAI Responses and chat completions calls. ([#&#8203;82940](https://github.com/openclaw/openclaw/issues/82940)) Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- ACP/Codex: honor terminal ACP turn results so failed Codex/acpx runs are not recorded as successful after only progress text. Fixes [#&#8203;79522](https://github.com/openclaw/openclaw/issues/79522). Thanks [@&#8203;dudaefj](https://github.com/dudaefj).
- Telegram: warn when a media group drops photos that fail to download, including albums where every photo is skipped. Fixes [#&#8203;55216](https://github.com/openclaw/openclaw/issues/55216). ([#&#8203;82987](https://github.com/openclaw/openclaw/issues/82987)) Thanks [@&#8203;eldar702](https://github.com/eldar702).
- Agents/skills: apply the full effective tool policy pipeline to inline `command-dispatch: tool` skill dispatch before owner-only filtering, preserving configured allow, deny, sandbox, sender, group, and subagent restrictions. ([#&#8203;78525](https://github.com/openclaw/openclaw/issues/78525))
- Codex: avoid spawning native hook relay subprocesses for post-tool/finalize events with no registered hook handlers while preserving pre-tool safety and approval relays. Fixes [#&#8203;76552](https://github.com/openclaw/openclaw/issues/76552). ([#&#8203;78004](https://github.com/openclaw/openclaw/issues/78004)) Thanks [@&#8203;evgyur](https://github.com/evgyur).
- Channel accounts: keep top-level default channel accounts visible when named accounts are added alongside default credential material, so mixed legacy/new account configs keep resolving `default` instead of silently dropping it.
- Agents/CLI: reject empty successful CLI subprocess replies as `empty_response` and keep them out of shared auth-profile health, so blank Claude CLI results no longer become green no-payload turns. Fixes [#&#8203;83231](https://github.com/openclaw/openclaw/issues/83231). ([#&#8203;83421](https://github.com/openclaw/openclaw/issues/83421)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Codex/Telegram: synthesize native Codex tool progress from final turn snapshots so Telegram `/verbose` stays visible when command events arrive only at completion.
- Codex/Telegram: deliver Codex verbose tool summaries in direct message-tool-only turns while suppressing message-send and activity-log noise. ([#&#8203;83186](https://github.com/openclaw/openclaw/issues/83186)) Thanks [@&#8203;kurplunkin](https://github.com/kurplunkin).
- Mac app: make Channels settings open faster by deferring config-schema work, avoiding startup channel probes, caching decoded channel status rows, and showing only compact quick settings instead of the full generated channel schema.
- Control UI: include the Control UI and Gateway protocol versions in protocol-mismatch errors so stale app/dashboard pairings identify which side needs rebuilding or restarting.
- Gateway/protocol: restore Gateway WS protocol v4 and keep `message.action` room-event metadata on the existing `inboundTurnKind` wire field while preserving internal inbound-event classification.
- Agents/tools: prefer non-webchat session-key routes when the message tool has stale webchat context, so message-tool-only replies keep delivering to the originating channel. Fixes [#&#8203;82911](https://github.com/openclaw/openclaw/issues/82911). ([#&#8203;83004](https://github.com/openclaw/openclaw/issues/83004)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Channels: keep direct-message last-route writes on isolated `per-channel-peer` sessions instead of contaminating the agent main session with channel delivery context. Fixes [#&#8203;36614](https://github.com/openclaw/openclaw/issues/36614). Thanks [@&#8203;aspenas](https://github.com/aspenas).
- Mac app: move the Settings sidebar toggle into the native titlebar and tighten the General pane width.
- Mac app: keep visited Settings panes mounted so switching tabs no longer blanks and reloads their content.
- Mac app: make Config settings open from shallow schema lookups and load selected paths on demand instead of fetching and rendering the full generated config schema up front.
- Codex: sanitize inline image payloads before Codex app-server and OpenAI Responses replay, and clear poisoned Codex thread bindings after invalid image errors. Fixes [#&#8203;82878](https://github.com/openclaw/openclaw/issues/82878).
- Providers/GitHub Copilot: request identity-encoded Copilot API responses across token exchange, catalog, model calls, usage, and embeddings so compressed Business-account error payloads no longer reach JSON parsers as gzip bytes. Fixes [#&#8203;82871](https://github.com/openclaw/openclaw/issues/82871). Thanks [@&#8203;tonyfe01](https://github.com/tonyfe01).
- Telegram: redact nested raw-update identifiers and user metadata before verbose raw update logging, preserving useful update/message ids without exposing chat, user, command, or profile details. ([#&#8203;82945](https://github.com/openclaw/openclaw/issues/82945)) Thanks [@&#8203;galiniliev](https://github.com/galiniliev) and [@&#8203;joshavant](https://github.com/joshavant).
- Telegram: preserve replied-to bot messages, captions, and media metadata in group reply chains so follow-up replies understand what the user is reacting to. ([#&#8203;82863](https://github.com/openclaw/openclaw/issues/82863))
- Providers/Together: update PI runtime packages to 0.74.1 and emit Together-style `reasoning.enabled`/`max_tokens` controls for reasoning-capable OpenAI-completions models.
- Agents/diagnostics: split slow embedded-run `attempt-dispatch` startup summaries into workspace, prompt, runtime-plan, and final dispatch subspans so traces identify the delayed setup phase. Fixes [#&#8203;82782](https://github.com/openclaw/openclaw/issues/82782). ([#&#8203;82783](https://github.com/openclaw/openclaw/issues/82783)) Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- Agents/Codex: flatten nested tool-result middleware blocks into bounded text so successful message sends are no longer replaced with `Tool output unavailable due to post-processing error`. Fixes [#&#8203;82912](https://github.com/openclaw/openclaw/issues/82912). Thanks [@&#8203;joeykrug](https://github.com/joeykrug).
- CLI/media: accept HTTP(S) URLs in `openclaw infer image describe --file`, fetching remote images through the guarded media path instead of treating URLs as local files. Fixes [#&#8203;82837](https://github.com/openclaw/openclaw/issues/82837). ([#&#8203;82854](https://github.com/openclaw/openclaw/issues/82854)) Thanks [@&#8203;neeravmakwana](https://github.com/neeravmakwana).
- Agents/subagents: keep session-backed parent runs active when the child wait call times out before the child session has actually settled, so late subagent completions are reconciled instead of being lost. Fixes [#&#8203;82787](https://github.com/openclaw/openclaw/issues/82787). Thanks [@&#8203;ramitrkar-hash](https://github.com/ramitrkar-hash).
- Control UI: advertise shared Gateway protocol constants in browser connect frames, fixing protocol mismatch handshakes after protocol constant drift. Fixes [#&#8203;82882](https://github.com/openclaw/openclaw/issues/82882). Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- Gateway: add rollback protocol-mismatch diagnostics, including client protocol ranges in Gateway logs and deep status/doctor hints for stale client processes. Fixes [#&#8203;82841](https://github.com/openclaw/openclaw/issues/82841). ([#&#8203;82908](https://github.com/openclaw/openclaw/issues/82908))
- Agents/subagents: keep successful keep-mode completion payloads pending after final-delivery retry exhaustion, so requester recovery no longer loses final subagent results. Fixes [#&#8203;82583](https://github.com/openclaw/openclaw/issues/82583). ([#&#8203;82999](https://github.com/openclaw/openclaw/issues/82999)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Gateway/auth: allow same-host trusted-proxy callers to use the documented local direct `gateway.auth.password` fallback after revisiting the [#&#8203;78684](https://github.com/openclaw/openclaw/issues/78684) fail-closed policy, while keeping token fallback rejected and forwarded-header requests on the trusted-proxy path. Fixes [#&#8203;82607](https://github.com/openclaw/openclaw/issues/82607). ([#&#8203;82953](https://github.com/openclaw/openclaw/issues/82953)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Agents/subagents: wait for queued completion handoffs to reach the parent transcript before marking them announced, preventing busy parent runs from cleaning up before observing child results. Fixes [#&#8203;82913](https://github.com/openclaw/openclaw/issues/82913). ([#&#8203;83039](https://github.com/openclaw/openclaw/issues/83039)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Agents/subagents: route group/channel subagent completions through message-tool-only handoffs when required and keep active-requester wake failures from dropping completion delivery. Fixes [#&#8203;82803](https://github.com/openclaw/openclaw/issues/82803). Thanks [@&#8203;galiniliev](https://github.com/galiniliev), [@&#8203;yozakura-ava](https://github.com/yozakura-ava), and [@&#8203;moeedahmed](https://github.com/moeedahmed).
- Memory-core: scan persisted memory source sessions on startup, comparing on-disk transcripts against the index and marking only missing/newer/resized files dirty for incremental sync. Fixes [#&#8203;82341](https://github.com/openclaw/openclaw/issues/82341). ([#&#8203;82341](https://github.com/openclaw/openclaw/issues/82341)) Thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- Telegram: keep the top-level default account in the account list when named accounts or bindings are added alongside top-level credentials, preserving default polling while still letting named-only configs resolve to a single account. Fixes [#&#8203;82794](https://github.com/openclaw/openclaw/issues/82794). ([#&#8203;82794](https://github.com/openclaw/openclaw/issues/82794)) Thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- CLI/models: reuse command-scoped plugin metadata across model listing, provider catalog, auth, and synthetic-auth checks, restoring fast `openclaw models` runs for plugin-heavy installs. Fixes [#&#8203;82881](https://github.com/openclaw/openclaw/issues/82881). ([#&#8203;83033](https://github.com/openclaw/openclaw/issues/83033)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- CLI/channels: show configured official external channels such as Discord in `openclaw channels list` when their plugin package is missing, including the install and doctor repair command instead of reporting no configured channels. Fixes [#&#8203;82813](https://github.com/openclaw/openclaw/issues/82813).
- Signal: preserve mixed-case group IDs through routing and session persistence so group auto-replies keep delivering after updates. Fixes [#&#8203;82827](https://github.com/openclaw/openclaw/issues/82827).
- Agents/tools: keep the `message` tool available in embedded runs when it is explicitly allowed through `tools.alsoAllow` or runtime tool allowlists, so channel plugins with custom reply delivery can still use configured message sends. Fixes [#&#8203;82833](https://github.com/openclaw/openclaw/issues/82833). Thanks [@&#8203;cn1313113](https://github.com/cn1313113).
- WhatsApp: honor forced document delivery for outbound image, GIF, and video media so `forceDocument`/`asDocument` sends preserve original media bytes instead of using compressed media payloads. ([#&#8203;79272](https://github.com/openclaw/openclaw/issues/79272)) Thanks [@&#8203;itsuzef](https://github.com/itsuzef).
- WhatsApp: name outbound document attachments from their MIME type when no filename is provided, so PDF and CSV sends arrive as `file.pdf` and `file.csv` instead of an extensionless `file`. Thanks [@&#8203;mcaxtr](https://github.com/mcaxtr).
- Process/diagnostics: report active lane blockers in lane wait warnings so `queueAhead=0` no longer hides commands waiting behind active work. Fixes [#&#8203;82791](https://github.com/openclaw/openclaw/issues/82791). ([#&#8203;82792](https://github.com/openclaw/openclaw/issues/82792)) Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- Process/diagnostics: stop counting the active processing turn as queued backlog in liveness warnings so transient max-only event-loop spikes do not surface as gateway warnings.
- Agents/replies: classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure. ([#&#8203;82616](https://github.com/openclaw/openclaw/issues/82616)) Thanks [@&#8203;dutifulbob](https://github.com/dutifulbob).
- Browser plugin: trust managed Chrome CDP diagnostics when launch HTTP probes race cold-start readiness, avoiding false startup failures. Fixes [#&#8203;82904](https://github.com/openclaw/openclaw/issues/82904). ([#&#8203;82986](https://github.com/openclaw/openclaw/issues/82986)) Thanks [@&#8203;kmanan](https://github.com/kmanan) and [@&#8203;hclsys](https://github.com/hclsys).
- Android: prompt before replacing a changed Gateway TLS thumbprint, showing the old and new SHA-256 fingerprints so users can accept expected certificate rotations instead of hard failing on pin mismatch. ([#&#8203;83077](https://github.com/openclaw/openclaw/issues/83077)) Thanks [@&#8203;sliekens](https://github.com/sliekens).
- CLI/status: render extra gateway-like service diagnostics as warning/info output instead of error output. Fixes [#&#8203;46930](https://github.com/openclaw/openclaw/issues/46930). ([#&#8203;82922](https://github.com/openclaw/openclaw/issues/82922)) thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- Agents/failover: classify Moonshot/Kimi exhausted-balance HTTP 429 payloads as billing instead of generic rate limits, preserving billing guidance and fallback behavior. Fixes [#&#8203;43447](https://github.com/openclaw/openclaw/issues/43447). ([#&#8203;83079](https://github.com/openclaw/openclaw/issues/83079)) Thanks [@&#8203;leno23](https://github.com/leno23).
- Plugin SDK: bundle `openclaw/plugin-sdk/zod` into the published package artifact and verify the packed zod subpath stays self-contained, so pnpm global installs can register plugins without a package-local `zod` symlink. Fixes [#&#8203;78398](https://github.com/openclaw/openclaw/issues/78398). ([#&#8203;78515](https://github.com/openclaw/openclaw/issues/78515)) Thanks [@&#8203;ggzeng](https://github.com/ggzeng).
- Providers/Google: drop compaction-truncated Gemini thought signatures before replay so malformed Base64 no longer aborts the next assistant turn. ([#&#8203;82995](https://github.com/openclaw/openclaw/issues/82995)) Thanks [@&#8203;wAngByg](https://github.com/wAngByg).

</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/557
galiniliev pushed a commit to galiniliev/openclaw that referenced this pull request May 20, 2026
Classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure.

Local validation:
- pnpm docs:list
- pnpm build
- pnpm check
- node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/dispatch-from-config.test.ts
- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts

Co-authored-by: dutifulbob <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
Classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure.

Local validation:
- pnpm docs:list
- pnpm build
- pnpm check
- node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/dispatch-from-config.test.ts
- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts

Co-authored-by: dutifulbob <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
Classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure.

Local validation:
- pnpm docs:list
- pnpm build
- pnpm check
- node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/dispatch-from-config.test.ts
- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts

Co-authored-by: dutifulbob <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
Classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure.

Local validation:
- pnpm docs:list
- pnpm build
- pnpm check
- node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/dispatch-from-config.test.ts
- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts

Co-authored-by: dutifulbob <[email protected]>
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 24, 2026
Classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure.

Local validation:
- pnpm docs:list
- pnpm build
- pnpm check
- node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/dispatch-from-config.test.ts
- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts

Co-authored-by: dutifulbob <[email protected]>
galiniliev pushed a commit to galiniliev/openclaw that referenced this pull request May 25, 2026
Classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure.

Local validation:
- pnpm docs:list
- pnpm build
- pnpm check
- node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/dispatch-from-config.test.ts
- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts

Co-authored-by: dutifulbob <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
Classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure.

Local validation:
- pnpm docs:list
- pnpm build
- pnpm check
- node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/dispatch-from-config.test.ts
- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts

Co-authored-by: dutifulbob <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
Classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure.

Local validation:
- pnpm docs:list
- pnpm build
- pnpm check
- node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/dispatch-from-config.test.ts
- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts

Co-authored-by: dutifulbob <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
Classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure.

Local validation:
- pnpm docs:list
- pnpm build
- pnpm check
- node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/dispatch-from-config.test.ts
- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts

Co-authored-by: dutifulbob <[email protected]>
jameslcowan pushed a commit to jameslcowan/openclaw that referenced this pull request Jun 2, 2026
Classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure.

Local validation:
- pnpm docs:list
- pnpm build
- pnpm check
- node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/dispatch-from-config.test.ts
- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts

Co-authored-by: dutifulbob <[email protected]>
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
Classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure.

Local validation:
- pnpm docs:list
- pnpm build
- pnpm check
- node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/dispatch-from-config.test.ts
- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts

Co-authored-by: dutifulbob <[email protected]>
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
Classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure.

Local validation:
- pnpm docs:list
- pnpm build
- pnpm check
- node scripts/run-vitest.mjs src/auto-reply/reply/provider-request-error-classifier.test.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/dispatch-from-config.test.ts
- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts

Co-authored-by: dutifulbob <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

impact:session-state Session, memory, transcript, context, or agent state can drift or corrupt. P2 Normal backlog priority with limited blast radius. proof: supplied External PR includes structured after-fix real behavior proof. size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants