mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-31 12:18:35 +00:00
* fix(agents): preserve reasoning_content replay across DeepSeek tier suffixes OpenCode Zen exposes DeepSeek V4 as `deepseek-v4-flash-free`, which keeps the upstream DeepSeek thinking-mode contract that requires `reasoning_content` to be passed back on follow-up requests. The existing replay allowlist only matched the bare ids (`deepseek-v4-flash`, `kimi-k2-thinking`, ...), so the tier-suffixed id missed every candidate and the sanitizer stripped `reasoning_content` from the assistant turn. DeepSeek then rejected the second API call with HTTP 400 and the session deadlocked. Strip the well-known tier suffixes (`-free`, `-paid`, `-trial`) when generating allowlist candidates so the base model id matches and the reasoning replay survives. Existing matching for prefixed / colon-suffixed routes is unchanged. Fixes #87575 Co-authored-by: Cursor <cursoragent@cursor.com> * fix(agents): avoid spread-rebuild when iterating allowlist candidates oxlint flagged the [...candidates] spread as an unnecessary array copy. Use an explicit baseCount loop bound instead so we still iterate the original entries while pushing tier-stripped variants onto the same array. Co-authored-by: Cursor <cursoragent@cursor.com> * test(opencode): add live DeepSeek replay probe * test(opencode): avoid forced tool choice in live replay --------- Co-authored-by: Pluviobyte <Pluviobyte@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>