Cherry Studio Agent 配置热更新:已打开会话如何即时生效配置修改
Cherry Studio Agent 配置热更新已打开会话如何即时生效配置修改【免费下载链接】cherry-studio Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端项目地址: https://gitcode.com/CherryHQ/cherry-studio导读本篇技术指南聚焦 Cherry Studio 中的一项行为变更Agent 配置被编辑后正在打开甚至正在运行的 Agent 会话将直接采用新配置不再需要关闭重开会话或等待空闲超时。你将了解该变更的生效规则、底层连接对账reconcile机制的实现原理、权限模式作为安全例外单独处理的细节以及各配置项实际生效的时序。该变更由 PR #16946 引入详见 变更说明并已同步至仓库内的破坏性变更记录集 v2-refactor-temp/docs/breaking-changes。一、变更前的问题配置修改被静默忽略在引入本变更之前如果用户编辑了一个 Agent而该 Agent 的某个会话正处于打开状态那么大部分配置修改都会被该会话静默忽略直到满足以下任一条件才真正生效会话空闲超过 5 分钟运行时连接因空闲 TTL 被回收下次恢复时重新拉取配置会话被关闭后重新打开重建连接时从最新配置重新派生。尤其严重的是MCP 服务器相关的编辑在旧行为下对一个正在运行的会话修改 MCP 服务器集合或定义完全不生效——运行中的会话不会感知这些变化。从源码看5 分钟空闲窗口正是运行时默认空闲 TTL 的体现// src/main/ai/agentSession/AgentSessionRuntimeService.ts const DEFAULT_IDLE_TTL_MS 5 * 60 * 1000空闲 TTL 到期后连接被关闭下一次消息到来时ensureConnection会基于最新配置重新连接配置因此迟到生效。这也解释了为什么用户过去需要等待空闲窗口或手动重开会话。二、变更后的行为配置编辑即时推进到会话新的行为规则可以概括为一张立即 / 下一条消息对照表配置项类别生效时机权限模式permission-mode立即生效安全例外见下文第四节MCP 服务器集合 / 定义从下一条消息开始Plan / 小模型plan/small models从下一条消息开始技能启用 / 禁用从下一条消息开始工作区绑定workspace binding从下一条消息开始最大轮数max turns从下一条消息开始指令instructions从下一条消息开始提供商 API 密钥从下一条消息开始模型model特殊PATCH { model: null }会整体失效会话见第五节关键保证进行中的响应in-flight response绝不会被配置编辑打断——当前轮次的输出完整结束后新配置才从下一条消息开始生效用户不再需要关闭重开会话也不需要等待 5 分钟空闲窗口编辑后发送的第一条消息可能稍慢因为会话运行时需要重新连接以加载新配置。三、底层机制连接对账Connection Reconcile双通道该行为由 Agent 会话运行时的push pull 双通道对账实现核心代码位于 AgentSessionRuntimeService.ts。3.1 Push 通道Agent 更新事件驱动当 Agent 被编辑时运行时服务监听handleAgentUpdated事件遍历所有属于该 Agent 的会话条目逐个对其活动连接发起对账// src/main/ai/agentSession/AgentSessionRuntimeService.ts private async handleAgentUpdated(agentId: string, updates: UpdateAgentDto, agent: AgentEntity): Promisevoid { const modelEdited Object.prototype.hasOwnProperty.call(updates, model) const reconciles: Promisevoid[] [] for (const entry of this.entries.values()) { if (entry.agentId ! agentId) continue // A cleared model (PATCH { model: null }) is unroutable, not stale — fully invalidate. if (modelEdited !agent.model) { this.invalidateModelClearedEntry(entry) continue } // Bookkeeping: fresh turns are stamped with (and steers gated on) the entrys latest model. if (agent.model) entry.modelId agent.model reconciles.push(this.reconcileEntryConnection(entry)) } await Promise.all(reconciles) }代码注释明确了设计意图push 通道是相对每次新轮次都会做的 pull 检查的延迟优化——它让 Agent 编辑立即作用于空闲/活跃连接而不必等待下一条消息。值得注意有些输入变化不会触发agent-updated事件例如会话内技能切换、MCP 定义编辑、工作区切换这些场景没有 push完全由 pull 通道覆盖。3.2 对账裁决verdict语义每次对账由连接的reconcile(input)方法返回一个裁决结果类型定义在 runtime/types.tsexport type AgentRuntimeReconcileResult current | patched | rebuild | invalid | failed运行时服务根据裁决结果采取不同动作见 AgentSessionRuntimeService.ts 的reconcileEntryConnection裁决含义运行时动作current连接配置已是最新无需任何操作patched热修补已应用如工具策略保持连接rebuild属于生成期冻结类配置模型、工作区、技能、子模型、MCP 定义等发生变化无正在进行的轮次时主动关闭连接等待下次拉取重建有活跃轮次则保留连接由下一次新轮次的 pull 承接invalid期望配置已不可派生Agent/会话/模型行被删除与模型被清空同等处理整体失效条目failed热修补失败如收紧权限失败失败关闭fail closed暂停活跃轮次并拆除连接防止继续运行在旧的更宽松的策略下failed分支的注释点明其安全语义一个失败的 live patch 可能让连接继续执行旧的更宽松的策略——快照中的permissionMode会门控canUseTool所以失败的收紧绝不能继续运行。3.3 Pull 通道新轮次必然对账对账并非只靠 push。在 AgentSessionRuntimeService.ts 中每个新轮次在连接上都会执行一次 reconcile一条连接若携带正在运行的 SDK 流绝不会在此处对账——关闭它会丢失进行中的响应一个新的、尚未准入的轮次必须对账——它必须运行在最新配置上对账动作作用于捕获时的连接TOCTOU 纪律即使对账期间条目被替换也绝不对后继者误操作。这保证了即使 push 因某种原因缺席下一条消息也必然以最新配置启动——正是从下一条消息生效这一规则的最底层兜底。四、权限模式唯一立即生效的安全例外变更说明强调权限模式的变更尤其收紧立即生效即使在响应中途这是出于安全考虑。源码在 ClaudeCodeRuntimeDriver.ts 的reconcile实现中给出了精确细节const permissionModeChanged baseline.live.toolPolicy.permissionMode ! fresh.live.toolPolicy.permissionMode // Claudes set_permission_mode control request can terminate work already in flight. Keep the // mode (and the local approval gate that mirrors it) frozen for the active turn; the host pulls // reconcile again before admitting the next turn, when the SDK update is safe to apply. const deferPermissionMode permissionModeChanged this.adapter?.isTurnActive true实际语义比摘要更精细空闲会话无活跃轮次新的权限模式通过 SDK 的setPermissionMode控制请求立即推送到子进程本地审批门approval gate同步刷新活跃轮次中由于set_permission_mode控制请求可能终止正在飞行中的工作权限模式会在当前轮次保持冻结推迟到下一个轮次边界应用——此时由宿主在下一条消息准入前再次 pull 对账来执行更新工具禁用等策略变更不受此限制reconcile中先于 rebuild 裁决应用安全的工具策略事实——新禁用的工具在当前轮次即可收紧只有权限模式等待边界。此外若对账期间setPermissionMode等操作抛错驱动返回failed宿主按失败关闭处理暂停活跃轮次并拆除连接确保绝不会停留在旧的宽松策略上。对应地AgentRuntimeConnection.reconcile的接口契约runtime/types.ts明确写道可现场应用的工具策略事实会在 rebuild 裁决前就地修补唯一例外是权限模式变更——它在活跃轮次中保持冻结在下一次轮次边界应用。五、模型被清空整体失效而非迟到生效handleAgentUpdated中有一个专门分支如果编辑是PATCH { model: null }AgentEntitySchema.model可空Agent 将无法路由到任何模型此时不是标记过期而是整体失效该运行时条目暂停活跃轮次让渲染端得知其已停止abort 随后通过轮次流的 abort 监听器拆除会话closeSession落定轮次、丢弃排队中的后续消息、关闭连接从条目表中移除该 entry同时自动丢弃任何正在进行的旧模型连接其 entry 已非当前connect()会关闭自己打开的连接而不是安装它——无模型 Agent 绝不能留下仍指向旧模型的过期条目。注释还补充了一个边界场景删除模型的user_model行会通过外键onDelete: set null把agent.model置空但该路径不会发出 agent update 事件因此不会走到这个事件驱动的处理器这类情况由其他机制覆盖活跃轮次在自己的捕获模型上完成、排队中的后续消息被startNextTurn的模型复检拦截、新的派发在聊天上下文中以未配置模型快速失败。六、空闲 TTL、连接重建与首条消息延迟变更后用户唯一可感知的代价是编辑后的第一条消息可能启动稍慢。这是因为push 对账可能返回rebuild模型、工作区、技能、子模型、MCP 定义等属于生成期冻结的配置变化此时若无活跃轮次运行时主动关闭连接closeConnectionAsync下一条消息到来时ensureConnection基于最新配置重新连接——新配置自然生效。rebuild判定基于连接配置的rebuildSignature重建签名比较ClaudeCodeRuntimeDriver.ts 中签名不匹配时会记录变更事实并返回rebuild。需要注意的是重建在有后台占用background occupancy或轮次转换transitioning时会被推迟reconcileEntryConnection检查hasLiveTurn、isAgentSessionRuntimeTransitioning、hasAgentSessionRuntimeBackgroundWork只要存在其一就保留连接把重建留给下一次新轮次的 pull——这同样保证了绝不在工作中途打断的承诺。状态机中对应的事件是connection-rebuild-deferred见 agentSessionRuntimeState.ts。七、测试验证与发布注意事项仓库测试覆盖了这一行为的核心路径AgentSessionRuntimeService.test.tsreconciles the connection on any agent update without closing a current one任何 Agent 更新都触发连接对账且不关闭当前连接pushes a reconcile for configuration-only updates纯配置更新如{ configuration: { permission_mode: plan } }也会推送对账fails closed and logs when a push reconcile throwspush 对账抛错时失败关闭并记录日志pauses the active stream and preserves queued turns when a live reconcile failslive 对账失败时暂停活跃流并保留排队轮次驱动层对账的current/patched/rebuild/invalid/failed全裁决矩阵见 ClaudeCodeRuntimeDriver.test.ts 与 PiRuntimeConnection.test.ts。对发布经理的提示原文即含进行中的响应不会被配置编辑打断新配置从下一条消息开始生效权限模式收紧是安全例外立即生效若在发布前还有其他 Agent 会话对账相关的变更条目需要合并处理。八、总结本变更的实质是给 Cherry Studio 的 Agent 会话运行时补齐了配置编辑 → 连接即时对账这条链路push 通道handleAgentUpdated事件驱动让空闲/活跃连接立即感知配置变化消除等 5 分钟空闲或重开会话的旧行为pull 通道每条新消息必然对账作为兜底保证从下一条消息生效安全例外权限模式收紧在空闲时立即推送、活跃轮次中冻结到边界应用失败则 fail closed整体失效模型被清空的 Agent 会话被完全拆除绝不残留指向旧模型的过期运行时。如果你在使用中编辑了正在对话的 Agent 配置只需知道两条规则正在输出的响应不会被中断下一条消息将运行在最新配置上——唯一需要接受的代价是编辑后首条消息因重新连接而略慢。【免费下载链接】cherry-studio Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端项目地址: https://gitcode.com/CherryHQ/cherry-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Wails v3 Environment API 实战:环境信息检测与 macOS 透明背景示例解析

Wails v3 Environment API 实战:环境信息检测与 macOS 透明背景示例解析

Wails v3 Environment API 实战:环境信息检测与 macOS 透明背景示例解析 【免费下载链接】wails Create beautiful applications using Go 项目地址: https://gitcode.com/gh_mirrors/wa/wails 导读 本指南基于 Wails v3 仓库中的 environment 示例&#xf…

2026/9/19 12:07:26 阅读更多 →
Gollum快速上手教程:3个命令搭建你的Git驱动Wiki

Gollum快速上手教程:3个命令搭建你的Git驱动Wiki

Gollum快速上手教程:3个命令搭建你的Git驱动Wiki 【免费下载链接】gollum A simple, Git-powered wiki with a local frontend and support for many kinds of markup and content. 项目地址: https://gitcode.com/gh_mirrors/go/gollum Gollum 是一个用 Rub…

2026/9/19 12:07:26 阅读更多 →
Podman 容器组主机名配置全解:`podman pod create/clone --hostname` 选项深度解析

Podman 容器组主机名配置全解:`podman pod create/clone --hostname` 选项深度解析

Podman 容器组主机名配置全解:podman pod create/clone --hostname 选项深度解析 【免费下载链接】podman Podman: A tool for managing OCI containers and pods. 项目地址: https://gitcode.com/gh_mirrors/po/podman 导读 在 Podman 的 Pod(容…

2026/9/19 12:07:26 阅读更多 →

最新新闻

植物大战僵尸民间改版全指南:杂交版、融合版、修改器与避坑经验

植物大战僵尸民间改版全指南:杂交版、融合版、修改器与避坑经验

植物大战僵尸这个IP的生命力,说实话超出了我十多年前第一次在电脑上种下第一颗豌豆射手时的想象。原版通关几遍之后,很多人以为这游戏就到头了,但真正让它活到今天、并且持续吸引新老玩家的,是围绕它生长出来的一个庞大民间生态&a…

2026/9/19 13:09:53 阅读更多 →
随机化算法详解:从期望、集中不等式到Monte Carlo实践

随机化算法详解:从期望、集中不等式到Monte Carlo实践

简介:《算法设计》课程英文课件第11章聚焦随机化算法(Randomized Algorithms),面向已掌握基础算法、希望系统理解随机化思想与概率分析的计算机专业学生、考研学生及算法竞赛选手。课件先概述随机化算法的两类基本形态&#xff1a…

2026/9/19 13:09:53 阅读更多 →
ISO/IEC/IEEE 15288-2015:系统生命周期过程落地与裁剪实践指南

ISO/IEC/IEEE 15288-2015:系统生命周期过程落地与裁剪实践指南

简介:ISO IEC IEEE 15288-2015《系统和软件工程—系统生命周期过程》是由ISO、IEC与IEEE联合发布的权威国际标准,面向系统工程师、项目经理、质量与配置管理人员,也适用于航空航天、国防、汽车、医疗等对过程控制要求严格的行业,为…

2026/9/19 13:09:53 阅读更多 →
Multisim 14.3元器件库为空?注册表与数据库修复全攻略

Multisim 14.3元器件库为空?注册表与数据库修复全攻略

1. 问题现象与根因定位1.1 这个故障到底长什么样Multisim 14.3 启动之后,元器件工具栏是灰的,Database Manager 里 Master Database 显示为空,或者干脆弹窗提示“无法加载主数据库”。更隐蔽的一种情况是软件能打开、能画图,但放置…

2026/9/19 13:09:53 阅读更多 →
酷呆桌面V1.1.0.2免费版:Windows桌面整理工具安装配置与使用技巧

酷呆桌面V1.1.0.2免费版:Windows桌面整理工具安装配置与使用技巧

1. 桌面整理这件事,为什么值得认真对待每天打开电脑,满屏的图标、文件夹、快捷方式堆在一起,找个东西要花十几秒甚至更久,这种体验相信大多数Windows用户都经历过。桌面作为我们和电脑交互的第一入口,它的整洁程度直接…

2026/9/19 13:09:53 阅读更多 →
OpenCode 启动被 Health Guard 拦下:CFG-010 占位符 Key 改到 TaoToken 通道

OpenCode 启动被 Health Guard 拦下:CFG-010 占位符 Key 改到 TaoToken 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 13:08:53 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →