- AI Agent
- 人工智能
- 代码智能体
- 交互助手
【免费下载链接】openchamber
Agentic Development Environment based on OpenCode AI agent
本篇基于 OpenChamber 仓库中的 changelog/1.4.5.md(2026-01-08 发布,版本主题 “Model thinking effort and MCP toggles”)展开,结合当前仓库源码,完整覆盖该版本在 App 与 VS Code 两个端的全部变更:模型变体(思考强度)选择、MCP 服务器动态启停、/compact命令重构、Shift+Tab 切换 Agent、斜杠命令补全与作用域徽标。读完可以掌握这些特性在 UI 层的交互形态,以及它们在packages/ui源码中的落点与实现约束。
1. 版本变更总览
1.4.5 的变更在 App 端与 VS Code 端完全对齐(VS Code 端复用同一套 Web 前端),核心内容如下表:
| 分类 | 变更 | 说明 |
|---|---|---|
| New | Chat:支持模型变体(thinking effort) | 在模型选择器中为暴露变体的模型挑选思考强度 |
| New | Skills:输入中途按 “/” 也能触发技能补全 | 之前仅输入首字符 “/” 才触发 |
| New | Autocomplete:命令/Agent/技能增加作用域徽标(scope badges) | 区分补全项来自何处 |
| New | MCP:支持动态启用/禁用已配置的 MCP 服务器 | 无需改配置、无需重启 |
| New | Web:Add Project 界面重构,带补全 | 仅 Web 端 |
| Improvement | Shortcuts:Agent 循环切换快捷键由 Tab 改为 Shift+Tab | 避免与输入框 Tab 行为冲突 |
| Improvement | Compact:/summarize更名为/compact,压缩逻辑下沉到 SDK | 客户端不再注入提示词完成压缩 |
2. 模型变体与思考强度(Thinking Effort)
这是本版本的主题特性(changelog 标题即 “Model thinking effort and MCP toggles”)。在 OpenCode 的模型目录中,部分模型会暴露一组variants(即思考强度档位,如 low / medium / high 之类的 id)。1.4.5 让这些档位成为 UI 上可选择的“模型变体”。
2.1 变体 id 的 v1/v2 兼容层
变体数据的格式在 OpenCode v1 与 v2 之间不一致:v2 将模型的变体列为{ id, settings }[]数组,而 v1 是按 id 键控的对象。仓库中专门用 packages/ui/src/lib/modelVariants.ts 收口所有读取变体 id 的路径,源码注释明确记录了这一坑:对数组直接Object.keys会得到"0", "1", "2",导致会话里保存的low匹配失败、选择器回退到 “Default”。核心函数只有两层分支:
// packages/ui/src/lib/modelVariants.ts export const listModelVariantIds = (variants: ModelVariantSource): string[] => { if (!variants) return []; if (Array.isArray(variants)) { return variants.map((variant) => variant.id).filter((id) => id.length > 0); } return Object.keys(variants); };也就是说,模型目录无论来自新版还是旧版记录,UI 侧看到的都是“该模型暴露的思考强度 id 列表”,模型没有变体时列表为空。
2.2 选择、继承与恢复:三态变体选择
模型选择器 packages/ui/src/components/chat/ModelControls.tsx 是变体选择的主体。从源码结构看,1.4.5 引入的不是一个简单下拉,而是一套“显式选择 / 显式 Default / 未选择”三态机制:
- 三态语义:变体选择有三种状态——一个强度名、
null表示用户明确选了 “Default”、undefined表示“根本没有选择”(此时走继承的强度)。源码注释(ModelControls.tsx 的resolveModelVariantSelection)特意强调:把null折叠成undefined会让真正的 “Default” 被下游当作 “未选择” 重新推导,造成选择看似没生效。 - 继承链:当某次选择没有显式强度时,按优先级取候选:会话内该 Agent 记录的强度 → Agent 自身
model.variant→ 设置默认settingsDefaultVariant,并校验候选值确实出现在当前模型的变体列表中(ModelControls.tsx 的resolveInheritedVariantForModel)。 - 按会话、按 Agent 记忆:选择通过
saveAgentModelVariantForSession以 “会话 + Agent + 模型” 为键持久化(见 ModelControls.tsx 的commitVariantSelectionForModel);切回历史会话时,会话记录里的model.variant是权威来源,最后一条用户消息是回退(ModelControls.tsx)。 - 最近使用的强度:每次提交选择会调用
addRecentEffort(ModelControls.tsx),在 “Default” 之外补充“最近用过”的快捷入口。 - 键盘快捷:快捷键注册表中存在
cycle_thinking_variant(默认mod+shift+t,不可自定义,见 packages/ui/src/lib/shortcuts/config.ts),可在不打开选择器的情况下循环切换思考强度。
2.3 选择器展示的细节约束
选择器展示遵循 “picker 显示什么,下一条消息就带什么”:有显式选择时显示所选强度,选了 “Default” 时显示 “Default”,否则显示继承来的强度(ModelControls.tsx 的注释解释了为何不能在有继承强度时仍显示 “Default”——那会让用户以为切换没生效)。此外,可用变体列表刻意按内容做 key 缓存(ModelControls.tsx),避免 store 每次 tick 产生新数组引用导致“继承强度覆盖用户选择”的闪烁。
3. MCP 服务器动态启用/禁用
changelog 中 “MCP: added the ability to dynamically enable or disable configured MCP servers” 对应 packages/ui/src/components/sections/mcp/McpPage.tsx。实现要点:
- 每个已配置的 MCP 服务器维护一个本地
enabled状态,与 OpenCode 配置中disabled布尔字段互为反相:源码中nextEnabled = selectedServer.disabled !== true(McpPage.tsx),勾选框切换时写回enabled: !mcpDraft.disabled。源码注释还说明 OpenCode 把缺失的字段视为 enabled(McpPage.tsx),因此“不写disabled字段”即代表启用,这是向后兼容的关键约定。 - 状态徽标组件直接消费
enabled:服务器为 disabled 时不再展示状态徽标,状态文案区分disabled等情形(McpPage.tsx)。 - 禁用状态会联动关闭“测试连接”等操作按钮(McpPage.tsx),避免对未启用的服务器发起无意义的连接。
该特性让“只配置、暂时不用”的 MCP 服务器成为一等公民:配置保留在 OpenCode 的 MCP 配置中,通过 UI 开关即可临时启停,而不必编辑配置文件或重启服务。
4. 斜杠命令:/summarize→/compact,压缩下沉 SDK
changelog 将这项列在 Improvements 下:/summarize更名为/compact,且压缩(compaction)逻辑移动到 SDK 侧。
- 在输入框的斜杠命令路由中,
compact属于“本地动作命令”集合LOCAL_ACTION_COMMANDS(与undo、redo、timeline、handoff-review并列),见 packages/ui/src/components/chat/composer/submit/slashCommands.ts。 - 命令解析只认第一个词为命令名、其余为参数(
parseSlashCommand,slashCommands.ts);未知命令返回 null,把解释权交还给 OpenCode 的命令路由(slashCommands.ts 的注释),即客户端只拦截自己拥有的动作,其余交给服务端。
从源码结构看,“moved compaction to the SDK”意味着压缩不再由客户端拼装一段提示词发给模型来“总结历史”,而是由 OpenCode SDK/服务端作为一等动作执行;客户端/compact只是一个触发入口。对使用方的实际影响是:命令名以 1.4.5 为界,旧脚本或笔记中的/summarize应更新为/compact。
5. 输入体验:斜杠补全、作用域徽标与 Shift+Tab
- 中途斜杠也能触发技能补全:1.4.5 之前,补全面板只在输入首字符是 “/” 时出现;本版本允许在输入中途键入 “/” 触发技能(Skills)补全,方便在长提示里追加技能引用。命令识别仍走第 4 节的
parseSlashCommand入口。 - 作用域徽标(scope badges):补全列表为命令 / Agent / 技能三类条目增加来源徽标,使用户在结果混杂时能分辨某条补全属于哪个作用域,减少选错目标。
- Agent 循环切换快捷键 Tab → Shift+Tab:changelog 说明快捷键从 Tab 切换为 Shift+Tab。快捷键注册表中
cycle_agent是一个可自定义项(packages/ui/src/lib/shortcuts/config.ts,customizable: true),在设置中可查看与重绑定。从源码结构看,改为 Shift+Tab 的动机是不占用普通 Tab 的输入框焦点/缩进行为,让“切换 Agent”与“文本编辑中的 Tab”互不干扰;用户如有旧习惯,可在快捷键设置中自行恢复。
6. Web 端:Add Project 界面重构
changelog 的 “Web: refactored the Add Project UI with autocomplete” 仅影响 Web 端(VS Code 端无此项)。重构方向是:新增项目时输入框带补全,减少手动敲完整路径的成本。该条目在 changelog 中只有一行描述,仓库中其具体 UI 组件随后续版本持续演进,此处不展开更多推断,仅以 changelog/1.4.5.md 的原始描述为准。
7. 版本边界与验证方式
- 适用前提:以上行为以 OpenChamber 1.4.5 发布时(2026-01-08)的客户端为准;当前仓库版本已远高于此(changelog 目录延续至 changelog/1.24.2.md),部分默认值可能在后续版本调整。涉及快捷键默认绑定的具体值,以 packages/ui/src/lib/shortcuts/config.ts 当前内容为准。
- 可验证的源码锚点:
- 变体 id 兼容层:packages/ui/src/lib/modelVariants.ts;
- 变体选择/继承/恢复:packages/ui/src/components/chat/ModelControls.tsx;
- MCP 启停与
disabled字段:packages/ui/src/components/sections/mcp/McpPage.tsx; /compact命令归属与解析:packages/ui/src/components/chat/composer/submit/slashCommands.ts;- 快捷键注册:packages/ui/src/lib/shortcuts/config.ts。
8. 小结
1.4.5 是一个围绕“会话级模型控制”与“MCP 生命周期”的小版本:它把“选模型”细化为“选模型 + 选思考强度”,并为 MCP 服务器提供了不改配置文件的动态启停开关;同时以/compact取代/summarize把上下文压缩交给 SDK 执行,用 Shift+Tab 把 Agent 切换与文本 Tab 行为解耦。对使用者而言,最需要注意的两点:旧工作流中的/summarize需要更新为/compact;思考强度是按 “会话 + Agent + 模型” 记忆并支持继承的,切换模型或 Agent 时强度可能按第 2.2 节的优先级自动回落。
- AI Agent
- 人工智能
- 代码智能体
- 交互助手
【免费下载链接】openchamber
Agentic Development Environment based on OpenCode AI agent
相关推荐
Claude Code 如何用 /effort 与 --effort 调整思考强度?claude-howto 的各模型 effort 级别说明
Claude Code 如何用 /effort 与 effort 调整思考强度?claude howto 的各模型 effort 级别说明 在 Claude C
教程文档Easydict 为 Claude Code CLI 翻译服务实现模型切换与思考程度(Effort)控制的完整方案
Easydict 为 Claude Code CLI 翻译服务实现模型切换与思考程度(Effort)控制的完整方案 导读 本文基于仓库变更记录 docs/his
桌面应用AI 应用如何用 Pydantic AI 的 Thinking 能力开启并设置模型思考强度
如何用 Pydantic AI 的 Thinking 能力开启并设置模型思考强度 Thinking(reasoning)是指模型在给出最终答案前逐步思考问题的过
网络安全
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考