Skip to content

💄 style: add preserve thinking feature for Qwen3.7 Max model#13494

Merged
tjx666 merged 36 commits into
lobehub:canaryfrom
sxjeru:4222
Jun 9, 2026
Merged

💄 style: add preserve thinking feature for Qwen3.7 Max model#13494
tjx666 merged 36 commits into
lobehub:canaryfrom
sxjeru:4222

Conversation

@sxjeru

@sxjeru sxjeru commented Apr 2, 2026

Copy link
Copy Markdown
Contributor

💻 Change Type

  • ✨ feat
  • 🐛 fix
  • ♻️ refactor
  • 💄 style
  • 👷 build
  • ⚡️ perf
  • ✅ test
  • 📝 docs
  • 🔨 chore

🔗 Related Issue

🔀 Description of Change

https://qwen.ai/blog?id=qwen3.6

已确认可用,当关闭开关不再传入历史推理内容,会发现输入 token 变少了。

image

🧪 How to Test

  • Tested locally
  • Added/updated tests
  • No tests needed

📸 Screenshots / Videos

Before After
... ...

📝 Additional Information

@vercel

vercel Bot commented Apr 2, 2026

Copy link
Copy Markdown

@sxjeru is attempting to deploy a commit to the LobeHub OSS Team on Vercel.

A member of the Team first needs to authorize it.

@lobehubbot

Copy link
Copy Markdown
Member

@ONLY-yours @canisminor1990 - This PR adds preserve thinking support for Qwen3.6 Plus and updates model providers (Qwen, Zhipu). It also modifies ModelSwitchPanel UI and chat config types. Please take a look.

@codecov

codecov Bot commented Apr 2, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 97.56637% with 11 lines in your changes missing coverage. Please review.
✅ Project coverage is 70.41%. Comparing base (0a6b02c) to head (5983031).
⚠️ Report is 8 commits behind head on canary.

Additional details and impacted files
@@            Coverage Diff             @@
##           canary   #13494      +/-   ##
==========================================
- Coverage   70.50%   70.41%   -0.09%     
==========================================
  Files        3312     3312              
  Lines      327060   326158     -902     
  Branches    34721    35735    +1014     
==========================================
- Hits       230582   229654     -928     
- Misses      96296    96320      +24     
- Partials      182      184       +2     
Flag Coverage Δ
app 61.24% <97.40%> (+<0.01%) ⬆️
database 92.24% <ø> (ø)
packages/agent-manager-runtime 49.69% <ø> (ø)
packages/agent-runtime 81.06% <ø> (ø)
packages/builtin-tool-lobe-agent 18.52% <ø> (ø)
packages/context-engine 84.12% <ø> (ø)
packages/conversation-flow 91.29% <ø> (ø)
packages/device-gateway-client 90.18% <ø> (ø)
packages/eval-dataset-parser 95.15% <ø> (ø)
packages/eval-rubric 76.11% <ø> (ø)
packages/fetch-sse 87.28% <ø> (+1.71%) ⬆️
packages/file-loaders 87.89% <ø> (ø)
packages/memory-user-memory 74.99% <ø> (ø)
packages/model-bank 99.99% <100.00%> (-0.01%) ⬇️
packages/model-runtime 84.27% <92.07%> (+0.04%) ⬆️
packages/prompts 72.51% <ø> (ø)
packages/python-interpreter 92.90% <ø> (ø)
packages/ssrf-safe-fetch 0.00% <ø> (ø)
packages/types 35.23% <0.00%> (-0.02%) ⬇️
packages/utils 85.05% <ø> (ø)
packages/web-crawler 88.08% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
Store 68.23% <100.00%> (-0.01%) ⬇️
Services 54.25% <100.00%> (+0.04%) ⬆️
Server 71.32% <100.00%> (+0.01%) ⬆️
Libs 55.82% <ø> (-0.14%) ⬇️
Utils 81.93% <ø> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@sxjeru sxjeru marked this pull request as ready for review April 2, 2026 07:12
Copilot AI review requested due to automatic review settings April 2, 2026 07:12

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @sxjeru, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 26db4ac105

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/model-bank/src/aiModels/qwen.ts

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a preserveThinking extended parameter intended to let Qwen3.6 Plus reuse prior assistant “thinking/reasoning” by mapping it to Qwen’s preserve_thinking request option, with corresponding UI/config/type support across the app.

Changes:

  • Add preserveThinking to chat config + model extend-param resolution, and expose a toggle in the model controls UI.
  • Extend the Qwen runtime adapter to (optionally) map assistant reasoning into reasoning_content and send preserve_thinking.
  • Update builtin model catalogs/locales (including adding Qwen3.6 Plus, and other model list edits).

Reviewed changes

Copilot reviewed 20 out of 20 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
src/services/chat/mecha/modelParamsResolver.ts Adds preserveThinking into resolved runtime extend params
src/services/chat/mecha/modelParamsResolver.test.ts Adds unit tests for preserveThinking resolution
src/server/modules/AgentRuntime/RuntimeExecutors.ts Persists assistant reasoning into runtime state messages
src/routes/(main)/settings/provider/features/ModelList/CreateNewModelModal/ExtendParamsSelect.tsx Adds preserveThinking to selectable extend params + preview metadata
src/locales/default/modelProvider.ts Adds hint text for preserveThinking
src/locales/default/chat.ts Adds title/description strings for preserveThinking
src/features/ModelSwitchPanel/components/ControlsForm/ControlsForm.tsx Adds preserveThinking switch in controls form
packages/types/src/openai/chat.ts Extends shared message/payload types (reasoning + preserveThinking)
packages/types/src/agent/chatConfig.ts Adds preserveThinking to agent chat config + zod schema
packages/model-runtime/src/types/chat.ts Extends runtime payload/message types (reasoning_content + preserveThinking)
packages/model-runtime/src/providers/qwen/index.ts Maps preserveThinkingpreserve_thinking and reasoning → reasoning_content for supported Qwen models
packages/model-runtime/src/providers/qwen/index.test.ts Adds tests for Qwen preserve-thinking payload mapping
packages/model-bank/src/types/aiModel.ts Adds preserveThinking to extend param union + zod enum
packages/model-bank/src/aiModels/zhipu.ts Adds new Zhipu model cards (but currently with issues)
packages/model-bank/src/aiModels/qwen.ts Adds Qwen3.6 Plus model card; modifies Qwen3.5 Plus entry
packages/model-bank/src/aiModels/google.ts Removes a Gemini preview model from builtin list
locales/zh-CN/modelProvider.json Adds zh-CN hint for preserveThinking
locales/zh-CN/chat.json Adds zh-CN title/desc for preserveThinking
locales/en-US/modelProvider.json Adds en-US hint for preserveThinking
locales/en-US/chat.json Adds en-US title/desc for preserveThinking
Comments suppressed due to low confidence (1)

packages/model-bank/src/aiModels/google.ts:452

  • This PR removes the Google model gemini-2.5-flash-lite-preview-09-2025 from the builtin list. The PR description focuses on Qwen preserve_thinking, so please confirm this removal is intentional and, if so, consider mentioning it in the PR description to avoid accidental scope creep.
  {
    abilities: {
      functionCall: true,
      search: true,
      vision: true,
    },
    contextWindowTokens: 1_048_576 + 8192,

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/model-bank/src/aiModels/qwen.ts
Comment thread packages/model-bank/src/aiModels/zhipu.ts Outdated
Comment thread packages/model-runtime/src/types/chat.ts
Comment thread src/services/chat/mecha/modelParamsResolver.ts
Comment thread packages/model-bank/src/aiModels/zhipu.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 590e104070

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/model-runtime/src/providers/qwen/index.ts Outdated
@hezhijie0327

hezhijie0327 commented Apr 2, 2026

Copy link
Copy Markdown
Contributor

I think GLM4.7 and above can also use this feature, enabled with thinking.clear_thinking=false

image

https://docs.bigmodel.cn/cn/guide/capabilities/thinking-mode#轮级思考
https://docs.bigmodel.cn/cn/guide/capabilities/thinking-mode#%E8%BD%AE%E7%BA%A7%E6%80%9D%E8%80%83


This comment was translated by Claude.

Original Content

感觉 GLM4.7 以上也能用这个特性, thinking.clear_thinking=false 启用

image

https://docs.bigmodel.cn/cn/guide/capabilities/thinking-mode#轮级思考
https://docs.bigmodel.cn/cn/guide/capabilities/thinking-mode#%E8%BD%AE%E7%BA%A7%E6%80%9D%E8%80%83

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fc9c0bca6b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/server/modules/AgentRuntime/RuntimeExecutors.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7b3d406a24

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/server/modules/AgentRuntime/RuntimeExecutors.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c27df820a8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/model-runtime/src/providers/qwen/index.ts
@sxjeru

sxjeru commented Apr 4, 2026

Copy link
Copy Markdown
Contributor Author

After testing, when disabling the historical reasoning content toggle for qwen3.6-plus, the input tokens decreased from 5,643 to 4,962, a reduction of 681 ≈ 676 (the deep thinking token count from historical conversations).

Switching to a different conversation, when disabling the glm-4.7 toggle, the input tokens decreased from 4983 to 4352, a reduction of 631.

Additionally, I noticed that Qwen removes the thinking content from all historical messages, while GLM appears to retain the thinking content from the last historical message.

The current strategy is for the backend to pass the full historical message reasoning content to the model upstream, along with parameters, letting the upstream decide which reasoning content to use.


Additionally, the build memory has currently been adjusted to around 6500, and after multiple retries, the build may succeed.


This comment was translated by Claude.

Original Content

经过测试,关闭 qwen3.6-plus 的历史推理内容开关,输入 token 从 5,643 - 4,962 = 681 ≈ 676(历史会话的深度思考 token 数)

更换对话,关闭 glm-4.7 开关,输入 token 从 4983 - 4352 = 631

此外发现 qwen 会去掉所有历史消息的思考内容,而 glm 似乎会保留最后一条历史消息的思考内容。

目前策略是后端传递全量历史消息推理内容给模型上游,并搭配参数,由上游决定使用哪些推理内容。


此外目前将构建内存调节为 6500 左右,多次重试后可能会构建成功。

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 15819e6017

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +407 to +410
provider === 'qwen' || provider === 'zhipu';
const modelSupportsPreserveThinking =
modelSupportsPreserveThinkingFromCard ||
(!modelCard && providerSupportsPreserveThinkingFallback);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Do not assume unknown Qwen/Zhipu models support preserveThinking

The provider fallback marks any unmatched Qwen/Zhipu model as preserveThinking-capable, which is too broad. If a built-in unsupported model is used via a custom deployment name (so modelCard lookup misses), this branch treats it as supported and reuses agentConfig.chatConfig.preserveThinking, causing call_llm to persist/replay assistant reasoning and pass preserve-thinking flags even though that model never declared the capability. This can silently increase prompt tokens and alter behavior for renamed deployments that are not actually preserve-thinking models.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c117c89abe

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/model-bank/src/aiModels/google.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0a8ff55e0c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +402 to +406
if (agentConfig) {
const { LOBE_DEFAULT_MODEL_LIST } = await import('model-bank');

const preserveThinkingFromPayload = (llmPayload as { preserveThinking?: boolean })
.preserveThinking;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Honor payload preserveThinking without agentConfig

call_llm supports running without ctx.agentConfig (there is an explicit fallback branch), but preserveThinking is only read inside if (agentConfig). In no-agent-config executions, a caller-provided payload.preserveThinking is silently dropped, so chatPayload never receives it and assistant reasoning is never persisted/replayed even when explicitly requested. This breaks preserve-thinking behavior for instruction-driven/legacy contexts that invoke call_llm without agent config.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is also still reproducible on the current head (62c191e). preserveThinkingFromPayload is read only inside if (agentConfig), while the no-agent-config branch is valid and falls back to processedMessages = llmPayload.messages. In that path an explicit payload.preserveThinking is dropped before chatPayload is built, so instruction-driven callers cannot opt in to preservation even when they pass the flag directly.

@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Apr 24, 2026
@sxjeru sxjeru requested a review from Copilot May 7, 2026 06:14

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 27 out of 27 changed files in this pull request and generated 2 comments.

Comment thread src/server/modules/AgentRuntime/RuntimeExecutors.ts
@sxjeru sxjeru force-pushed the 4222 branch 2 times, most recently from 557e17b to 501e267 Compare May 15, 2026 04:24
@sxjeru sxjeru mentioned this pull request Jun 2, 2026
12 tasks
Comment thread packages/model-bank/src/aiModels/qwen.ts
@tjx666

tjx666 commented Jun 3, 2026

Copy link
Copy Markdown
Member

I don't think this PR is ready to merge yet.

The main remaining issue is the preserveThinking semantics. The new switch reads like it controls whether historical assistant thinking/reasoning is replayed to the upstream model, but the current Qwen and Zhipu adapters still convert stored message.reasoning.content into reasoning_content unconditionally.

That means these cases still replay historical reasoning:

preserveThinking === false
preserveThinking === undefined

For Qwen, preserve_thinking: false is sent only when the flag is explicitly false, but the payload has already included reasoning_content. For Zhipu, thinking.clear_thinking is similarly controlled by the flag, but the historical reasoning_content conversion is also unconditional.

If the intended product behavior is "turn this off to avoid sending historical thinking", the adapter should only derive/send reasoning_content when preserveThinking === true. The current tests also appear to lock the opposite behavior, e.g. preserving reasoning_content when preserveThinking is absent, so those tests should be inverted.

A separate smaller point: the llmPayload.preserveThinking override path is not a formal runtime payload contract right now. I couldn't find a production caller that puts preserveThinking into context.payload, and CallLLMPayload / GeneralAgentCallLLMInstructionPayload don't declare it. Either formalize that override with types and a real call path, or remove the override read and rely on ctx.agentConfig.chatConfig.preserveThinking.

@sxjeru

sxjeru commented Jun 6, 2026

Copy link
Copy Markdown
Contributor Author

@tjx666 Regarding the first point, I had also considered not passing the reasoning content when the switch is turned off. But after further thought, I believe that passing all historical reasoning content in full and letting the API upstream decide whether to use it based on parameters would better preserve the upstream's intended behavior without disrupting it. There is no need for LobeHub to pre-trim it.

The second point has been fixed, thank you for raising it.


This comment was translated by Claude.

Original Content

@tjx666 关于第一点,我此前也想过关闭开关时不传递推理内容。但后来经过思考,认为将历史推理内容全量传递,由 API 上游根据参数决定是否使用应当更能不破坏上游推荐意图行为。不必由 LobeHub 提前裁剪。

第二点已修复,感谢提出。

@tjx666 tjx666 merged commit 64d3bdb into lobehub:canary Jun 9, 2026
20 of 21 checks passed
@lobehubbot

Copy link
Copy Markdown
Member

❤️ Great PR @sxjeru ❤️

The growth of project is inseparable from user feedback and contribution, thanks for your contribution! If you are interesting with the lobehub developer community, please join our discord and then dm @arvinxx or @canisminor1990. They will invite you to our private developer channel. We are talking about the lobe-chat development or sharing ai newsletter around the world.

@sxjeru sxjeru deleted the 4222 branch June 9, 2026 09:26
arvinxx added a commit that referenced this pull request Jun 10, 2026
# 🚀 LobeHub Release (20260610)

**Release Date:** June 10, 2026  
**Since v2.2.2:** 131 merged PRs · 13 contributors

> This weekly release strengthens agent collaboration across cloud,
desktop, CLI, and workspace flows, with steadier runtime behavior and a
broader foundation for workspace-scoped data.

---

## ✨ Highlights

- **Agent execution across devices** — Unifies per-device working
directories, project skill discovery, and sub-agent suspend/resume
behavior across server, QStash, and device RPC flows. (#15543, #15566,
#15481, #15620, #15591)
- **Connector and sandbox platform** — Expands connector permissions,
custom OAuth MCP connector onboarding, sandbox provider support, and
user-uploaded file sync into cloud sandbox runs. (#15463, #15546,
#15184, #15550)
- **Desktop and CLI reliability** — Fixes desktop cold-start,
auto-update, Windows build, CLI skill discovery, and `lh connect` agent
dispatch paths. (#15547, #15525, #15527, #15562, #15632, #15634)
- **Pages and sharing** — Refreshes topic sharing, improves Page Editor
layout behavior, and routes Page Agent tool execution through the
server-side editor path. (#15581, #15556, #15588, #15023, #15610)
- **Model availability and provider updates** — Adds user-scoped LobeHub
model availability, Claude Fable 5, Qwen thinking preservation, and
MiniMax M3 updates. (#15590, #15639, #13494, #15376)

---

## 🏗️ Core Product & Architecture

### Agent Runtime & Heterogeneous Agents

- Improves sub-agent lifecycle handling, including async suspend/resume,
queue-mode QStash resume delivery, and blocking nested sub-agent calls.
(#15481, #15620, #15575)
- Stabilizes heterogeneous agent ingestion and streaming with raw stream
dumps, per-turn usage, image forwarding on regenerate, and
duplicate-text fixes. (#15602, #15577, #15592, #15585)
- Adds execution-device and working-directory controls across device
RPC, legacy defaults, and remote-spawned Claude Code sessions. (#15543,
#15566, #15591, #15572)
- Improves runtime diagnostics and compatibility, including Gemini
multimodal output capture, abort stream semantics, and trace quality
analysis. (#15535, #13677, #15508)

---

## 📱 Platforms, Integrations & UX

### Connectors, Sandbox & Tools

- Ships API-level connector tool permissions, custom OAuth MCP connector
onboarding, and connector-first runtime execution. (#15463, #15546)
- Adds sandbox provider support, cloud sandbox file sync, and safer
external URL file input handling with SSRF validation. (#15184, #15550,
#12657)
- Improves tool visibility and execution with pinned app-fixed tools,
ANSI output rendering, gateway-tunneled MCP calls, and automatic
headless tool runs. (#15509, #15516, #15469, #15492)

### Desktop, CLI & Web UX

- Restores desktop startup and reload behavior, preserves IPC error
causes, and keeps the tab bar new-tab action visible across routes.
(#15547, #15597, #15638)
- Fixes desktop update and build stability for browser quit guards,
macOS update signing, and Windows Visual Studio detection. (#15525,
#15527, #15562)
- Shows the plan-limit upgrade UI on desktop builds. (#15628)
- Adds the Agent Run delivery checker and fixes CLI device dispatch plus
skill list/search output. (#15489, #15634, #15632)
- Refreshes onboarding, auth source preservation, topic UI states,
referral/Fable campaign copy, and chat-input control bar behavior.
(#15629, #15544, #15573, #15614, #15616, #15617, #15622, #15643)

---

## 🔒 Security, Reliability & Rollout Notes

- External URL file input now includes SSRF validation for safer Google
file handling. (#12657)
- Database workspace-scope migrations are part of this release;
self-hosted operators should run the normal migration path before
serving the updated app. (#15446, #15465, #15468, #15472)
- The release branch was re-cut from `canary` and includes the latest
`main` release-version commit so `v2.2.2` is the verified compare base.

---

## 👥 Contributors

@ONLY-yours, @sxjeru, @hardy-one, @xujingli, @hezhijie0327, @Coooolfan,
@arvinxx, @tjx666, @Innei, @rivertwilight, @rdmclin2, @cy948,
@AmAzing129

**Full Changelog**:
v2.2.2...release/weekly-20260610-recut-3
arvinxx added a commit that referenced this pull request Jun 11, 2026
* 🐛 fix(agent-runtime): always persist assistant reasoning to DB

PR #13494 gated message reasoning persistence behind preserveThinking
(agent chatConfig + model extendParams / qwen|zhipu fallback). That gate
is only meant to control whether reasoning is replayed into the next LLM
payload — applying it to the DB write dropped thinking content for every
non-qwen/zhipu reasoning model in server-side agent mode: reasoning
streamed live via stream_end but vanished after refresh.

Restore unconditional reasoning persistence in messageModel.update and
keep the preserveThinking gate only for state.messages payload replay.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* 💄 style(i18n): localize callSubAgent tool labels

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants