OpenChamber 1.2.0 更新解析收藏模型、工具调用展开与可调字体间距【免费下载链接】openchamberAgentic Development Environment based on OpenCode AI agent项目地址: https://gitcode.com/gh_mirrors/op/openchamberOpenChamber 1.2.0发布于 2025-12-15聚焦于日常 AI 编码体验的细节打磨模型选择器新增收藏/最近快捷入口聊天工具调用支持折叠、活动与详细三种展开模式外观设置加入 50%–200% 的字体与间距缩放同时 VS Code 扩展内可直接打开设置页面。本文以该版本 changelogchangelog/1.2.0.md为主线结合仓库源码packages/ui/src/lib/settings/registry.ts、packages/ui/src/stores/useUIStore.ts逐项拆解这些功能的实现原理与使用方式帮助你在升级后快速上手也便于开发者理解 OpenChamber 的设置体系是如何组织的。版本概览App 与 VS Code 双端同步升级1.2.0 的变更同时覆盖了 OpenChamber App 与 VS Code 扩展两个使用入口且改进内容保持一致其中工具调用展开、字体间距控制与设置页访问三项由社区开发者 theblazehen 贡献改进项AppVS Code 扩展模型选择器收藏与最近模型快捷访问✅✅工具调用展开设置折叠 / 活动 / 详细✅✅外观设置中的字体大小与间距控制50%–200% 缩放✅✅扩展内直接访问设置页面✅✅从实现角度看App 与 VS Code 共享同一套 UI 前端packages/ui因此双端的改进本质上是同一套设置体系在不同宿主中的暴露方式不同下文以 App 端源码为主要依据展开。收藏与最近模型模型选择器的快捷访问功能体验1.2.0 之前在模型选择器中切换模型需要反复滚动查找该版本引入两个快捷分区收藏Favorites手动固定常用模型长期稳定置顶最近Recent自动记录最近使用过的模型供快速回切。在模型选择器中收藏与最近分区连同每个provider:id分组都是可折叠的手风琴区块折叠状态会被持久化。对应实现位于 packages/ui/src/stores/useModelPickerSectionsStore.ts该 store 使用 zustand 的persist中间件将折叠状态写入model-picker-collapsed-sections键version 1并且Section keys 在所有选择器表面间共享也就是说你在一个选择器里折叠某个 provider 分组其它入口都会记住刷新页面也不会丢失。底层数据结构与容量上限收藏、最近、隐藏等模型列表在设置注册表中统一定义packages/ui/src/lib/settings/registry.ts#L445-L448favoriteModels: fieldModelRef[]({ scope: profile, parse: parseModelRefs(64), ui: uiStore(favoriteModels, setUi(favoriteModels), { autoSave: false }) }), hiddenModels: fieldModelRef[]({ scope: profile, parse: parseModelRefs(1024), ... }), recentModels: fieldModelRef[]({ scope: profile, parse: parseModelRefs(16), ui: uiStore(recentModels, setUi(recentModels), { autoSave: false }) }),几个值得注意的实现事实每个模型引用由providerID modelID组成见 packages/ui/src/stores/useUIStore.ts#L911 的类型定义Array{ providerID: string; modelID: string }收藏上限64 个、最近上限16 个、隐藏模型上限1024 个均通过parseModelRefs(n)解析并做数量约束这些字段scope: profile即按用户配置profile维度存储属于 UI 层配置写入通过useUIStore完成。收藏与最近列表的增删逻辑在 packages/ui/src/stores/useUIStore.ts#L2374-L2413 中可以清楚看到收藏的切换逻辑若目标模型已存在则从favoriteModels中移除取消收藏否则按最新收藏在前的顺序插入头部。而最近列表的更新逻辑同文件 #L2516-L2531为使用过的模型会去重后插入列表头部并截断保留前 5 条作为最近展示。此外收藏模型还提供了一组快捷键在 packages/ui/src/lib/i18n/messages/zh-CN.settings.ts#L1202-L1203 中存在cycle_favorite_model_forward向前轮换收藏模型与cycle_favorite_model_backward向后轮换收藏模型两个动作的本地化文案说明 1.2.0 还允许你通过键盘在收藏列表中快速轮换切换模型适合多模型对比场景。工具调用展开设置折叠 / 活动 / 详细三种模式聊天流中Agent 的工具调用信息是信息密度最高的区域既需要快速了解发生了什么也需要在排查时看到完整细节。1.2.0 将工具调用的展示方式改为可配置提供三种模式折叠collapsed默认仅显示摘要行聊天界面最干净适合日常高频对话活动activity突出显示当前正在执行的活动状态便于观察 Agent 的实时动作详细detailed完整展开工具参数与返回内容适合调试与审查。这一设置项的搜索关键词定义在 packages/ui/src/lib/settings/search.ts#L39keywords: [activity, collapsed, expanded, live, tools, history],同时设置搜索体系中工具与文件chat.tools-and-files分区search.ts#L347-L350也服务于该区域的相关展示配置。三种模式对应了collapsed、expanded与activity等语义用户可以在设置中按需切换而不必在消息流中手动逐个展开。注意该设置位于外观/聊天展示相关分组属于scope: profile的用户级偏好具体字段注册可结合 packages/ui/src/lib/settings/registry.ts 中聊天展示相关分区查看升级到 1.2.0 后首次进入设置即可看到新的下拉选项。字体大小与间距控制50%–200% 缩放使用方式在外观设置Appearance Settings中1.2.0 新增了字体大小与间距padding的百分比控制范围为50%–200%100% 为默认值50% 为一半大小200% 为双倍大小。这对高分辨率屏幕、远程演示或视力适配都非常实用。实现原理以 root rem 为基准的全局缩放字体与间距不是逐条改 CSS 属性而是通过缩放根元素的font-size让整套界面响应式联动。核心实现在 packages/ui/src/stores/useUIStore.ts#L2178-L2183setFontSize: (size) { // Clamp between 50% and 200% const clampedSize Math.max(50, Math.min(200, size)); set({ fontSize: clampedSize }); get().applyTypography(); },applyTypography同文件 #L2232-L2249执行真正的应用逻辑const scale fontSize / 100; // 100 1.0x, 50 0.5x, 200 2.0x当scale 1时移除根元素上的font-size与语义排版变量恢复默认否则将根元素的font-size设置为scale * 100%同时通过SEMANTIC_TYPOGRAPHY语义排版映射表getTypographyVariable同步缩放各语义级字号变量注释明确指出缩放根 rem 单元后常规工具类、图标、间距与语义排版全部响应同一个界面设置因此字体与间距控制是联动生效的。间距padding的处理方式一致setPadding 同样在 50–200 之间做钳制并调用applyPadding()应用。细分的字体设置值得注意的是fontSize并非唯一字体控制项。packages/ui/src/lib/settings/registry.ts#L422-L429 展示了完整的排版字段组fontSize: field({ scope: profile, perSurface: true, parse: parseFiniteNumber, ... }), terminalFontSize: field({ scope: profile, perSurface: true, ... }), editorFontSize: field({ scope: profile, perSurface: true, ... }), uiFont: field({ scope: profile, parse: parseUiFont, ... }), monoFont: field({ scope: profile, parse: parseMonoFont, ... }), padding: field({ scope: profile, perSurface: true, ... }), cornerRadius: field({ scope: profile, perSurface: true, ... }),fontSize界面整体百分比钳制在 50–200Math.max(50, Math.min(200, size))terminalFontSize钳制在9–52pxuseUIStore.ts#L2193-L2197editorFontSize钳制在9–32pxuseUIStore.ts#L2207-L2211这些字段均标记perSurface: true表示不同界面surface可分别记忆自己的字体设置例如主界面与代码编辑器的字体可独立调整互不干扰。VS Code 扩展内直接访问设置页面1.2.0 之前使用 VS Code 扩展的用户修改界面设置需要回到 App 端该版本让扩展内可以直接打开设置页。从源码看VS Code 端的多个宿主面板——Agent 管理面板AgentManagerPanelProvider.ts#L134-L135、聊天视图ChatViewProvider.ts#L211-L212、会话编辑器SessionEditorPanelProvider.ts#L263-L264——都会监听来自 webview 的api:config/settings:save消息保存成功后通过vscode.commands.executeCommand(openchamber.internal.settingsSynced, response.data)触发内部命令openchamber.internal.settingsSynced将最新设置同步给各面板并调用对应的notifySettingsSynced通知 webview 侧刷新如 AgentManagerPanelProvider.ts#L168-L176。这意味着在扩展内修改收藏模型、字体大小、工具调用展开模式等设置后改动会通过设置保存通道回写并广播到所有打开的 OpenChamber 面板App 与扩展之间的配置保持同步。小结与升级建议OpenChamber 1.2.0 虽然是一个以改进Improvements为主的版本没有新增模块但这四项改进恰好覆盖了高频交互痛点收藏/最近模型让多模型工作流如主模型与快速模型切换的启动成本大幅降低工具调用三种展开模式让聊天区在简洁与详细之间可平滑调节50%–200% 字体与间距缩放配合perSurface的独立记忆适配不同显示环境扩展内设置页闭环了 VS Code 场景下的配置体验。升级到 1.2.0 后建议依次完成在模型选择器中收藏常用模型并尝试收藏轮换快捷键、将工具调用展开切到活动模式观察 Agent 实时动作、在外观设置中将字体调至舒适比例。相关源码入口packages/ui/src/lib/settings/registry.ts、packages/ui/src/stores/useUIStore.ts、packages/vscode/src/AgentManagerPanelProvider.ts可作为后续深入了解设置体系与双端同步机制的起点。【免费下载链接】openchamberAgentic Development Environment based on OpenCode AI agent项目地址: https://gitcode.com/gh_mirrors/op/openchamber创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考