cc-switch 供应商编辑深度指南:live 配置回填、图标自定义与 JSON 编辑实践
2026/9/7 8:20:10 网站建设 项目流程

cc-switch 供应商编辑深度指南:live 配置回填、图标自定义与 JSON 编辑实践

【免费下载链接】cc-switchA cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io项目地址: https://gitcode.com/GitHub_Trending/cc/cc-switch

cc-switch 的「编辑供应商」是日常使用频率最高的功能之一:修改 API Key、切换端点地址、调整模型列表、更换图标都发生在这块全屏编辑面板里。本文基于官方用户手册的编辑章节,结合 EditProviderDialog、IconPicker、JsonEditor 等前端源码,完整拆解可编辑字段、「live 回填」同步机制、多端点管理与 JSON 编辑器的工作方式,帮助你在改动配置时理解每一个保存动作背后实际发生了什么。

打开编辑面板

编辑入口位于供应商卡片上:

  1. 找到要编辑的供应商卡片;
  2. 鼠标悬停在卡片上,显示操作按钮;
  3. 点击「编辑」按钮。

点击后打开的是一个全屏面板。从源码看,编辑对话框由 EditProviderDialog 实现,它基于 FullScreenPanel 渲染,内部复用与添加供应商完全相同的 ProviderForm 表单组件——这也意味着编辑时能用的功能(模型下拉、通用配置快捷开关、端点管理)与添加时一致。面板底部放置「保存」按钮,其可用状态与表单的提交就绪状态(isFormReady)和提交中状态(isFormSubmitting)绑定,防止重复提交。

可编辑内容

基本信息

字段说明
名称供应商显示名称
备注附加说明信息
网站链接供应商官网或控制台地址
图标自定义图标和颜色

提交时这些字段会经过轻量的规范化处理。查看 EditProviderDialog 的handleSubmit可以发现:nametrim(),而noteswebsiteUrl在仅有空白字符时会被置为undefined,即"清空输入"与"留空"效果等价,不会把纯空格存进数据库。

图标自定义

CC Switch 提供丰富的图标自定义功能。

图标选择器
  1. 点击图标区域打开图标选择器;
  2. 使用搜索框按名称搜索图标;
  3. 点击选择想要的图标。

图标库包含常见的 AI 服务商和技术图标,支持:

  • 按名称模糊搜索;
  • 显示图标名称提示;
  • 实时预览选中效果。

从源码看,选择器由 IconPicker 实现,核心机制包括:

  • 搜索过滤:搜索框输入后调用searchIcons(searchQuery)对图标列表做模糊匹配,图标元数据来自 icons/extracted 目录;
  • 名称提示:每个图标按钮的title使用getIconMetadata(iconName)中的displayName,即悬停时能看到图标的可读名称,而不是内部标识符;
  • 选中态反馈:被选中的图标会应用border-primary bg-primary/10高亮样式,且按钮下方的名称文字提供实时预览;
  • 无结果兜底:搜索无匹配时显示"未找到匹配的图标"提示,避免空白界面。

图标值最终保存为字符串(icon字段),配合可选的iconColor用于配色。

配置信息

JSON 格式的配置内容,包括:

  • API Key;
  • 端点地址;
  • 其他环境变量。

编辑当前启用的供应商:live 回填机制

编辑当前启用的供应商时,有特殊的「回填」机制:

  1. 打开编辑面板时,会从 live 配置文件读取最新内容;
  2. 如果你在 CLI 工具中手动修改过配置,这些修改会被同步回来;
  3. 保存后,修改会写入 live 配置文件。

这确保了 CC Switch 和 CLI 工具的配置始终同步。

这一机制在 EditProviderDialog 中有完整实现,值得细看几个设计决策:

  • 仅对"当前生效供应商"读取 live:打开面板时先通过providersApi.getCurrent(appId)查询当前启用的供应商 ID,只有当编辑对象恰好是它时才调用vscodeApi.getLiveProviderSettings(appId)读取实时配置;编辑非启用供应商时直接以数据库(SSOT)中的settingsConfig为初始值。
  • 只加载一次hasLoadedLive标记保证 live 配置只在首次打开时读取一次,避免后续渲染用旧数据覆盖用户已在表单中做的编辑。
  • 读取失败静默回退:live 读取抛错时回退到数据库配置(SSOT),不打断编辑流程。
  • 代理接管模式例外:当代理(proxy)接管了配置写入时,live 文件里是代理改写后的地址与占位符,此时isProxyTakeover分支会跳过 live 读取、直接展示数据库配置,避免用户在编辑界面看到代理地址后误保存(源码注释见 EditProviderDialog)。
  • OpenCode / Pi 例外:OpenCode 使用增量合并(additive)模式,Pi 的共享models.json由目录协调器管理,二者都没有"每个供应商一份 live 快照"的概念,因此同样不读取 live 覆盖数据库聚合值。
  • Codex modelCatalog 防丢失:Codex 的modelCatalog是 cc-switch 的私有字段,SSOT 在数据库;而 live 的config.toml只在写入时投影出model_catalog_json指针。来回切换供应商或 Codex.app 改写配置都可能让 live 丢失该投影。因此源码强制以数据库的modelCatalog为准(EditProviderDialog),防止"编辑界面显示空映射表 → 保存后连同数据库映射一起被清空"的数据丢失问题。

自动获取模型

编辑供应商时,可以自动从供应商端点获取可用模型列表:

  1. 确保已填写 API Key 和端点地址;
  2. 点击模型输入框旁的获取模型按钮(下载图标);
  3. 从分组下拉菜单中选择模型。

详细说明请参阅 2.1 添加供应商 — 自动获取模型。由于编辑面板复用ProviderForm,模型获取、下拉选择与添加时的行为完全一致。

通用配置快捷开关(Claude)

编辑 Claude 供应商时,JSON 编辑器上方提供常用设置的快捷开关,包括工具搜索、禁用自动更新、Teammates、高效能模式等。详见 2.1 添加供应商 — Claude 通用配置快捷开关。

修改 API Key

编辑供应商时,可以直接在API Key输入框中修改:

  1. 点击供应商卡片的「编辑」按钮;
  2. 在「API Key」输入框中输入新的密钥;
  3. 点击「保存」。

提示:API Key 输入框支持显示/隐藏切换,点击右侧的眼睛图标可查看完整密钥。

修改端点地址

编辑供应商时,可以直接在端点地址输入框中修改:

  1. 点击供应商卡片的「编辑」按钮;
  2. 在「端点地址」输入框中输入新的 URL;
  3. 点击「保存」。

端点地址格式

应用格式示例
Claudehttps://api.example.com
Codexhttps://api.example.com/v1
Geminihttps://api.example.com

注意 Claude 与 Codex 的差异:Codex 的 base URL 需要带/v1路径后缀,Claude 则是裸域名。填错路径是最常见的连通性问题来源之一,保存前可借助表单的校验提示确认。

添加自定义端点

供应商可以配置多个端点,用于:

  • 速度测试时测试多个地址;
  • 故障转移时的备用端点。

自动收集

添加供应商时,CC Switch 会自动从配置中提取端点地址。

手动添加

编辑供应商时,在「端点管理」区域可以:

  • 添加新端点;
  • 删除现有端点;
  • 设置默认端点。

从源码看,多端点能力集中在表单层:useSpeedTestEndpoints 管理端点集合与速度测试,EndpointSpeedTest 负责并发探测各端点延迟,CommonConfigEditor 提供端点编辑界面。这些组件在编辑面板中与添加面板共享,保证两处体验一致。

JSON 编辑器

配置使用 JSON 格式,编辑器提供:

  • 语法高亮;
  • 格式校验;
  • 错误提示。

常见错误

缺少引号

// ❌ 错误 { env: { KEY: "value" } } // ✅ 正确 { "env": { "KEY": "value" } }

多余逗号

// ❌ 错误 { "env": { "KEY": "value", } } // ✅ 正确 { "env": { "KEY": "value" } }

未闭合括号

// ❌ 错误 { "env": { "KEY": "value" } // ✅ 正确 { "env": { "KEY": "value" } }

从实现看,JsonEditor 基于 CodeMirror 6 构建:使用@codemirror/lang-json提供 JSON 语言支持与语法高亮,@codemirror/lintlinter扩展实时解析文档内容并生成诊断(diagnostics)——包括 JSON 语法错误、以及顶层结构不是对象时的额外提示;showValidation属性可关闭校验(只读展示场景)。编辑体验上,它还实现了基于最长公共前后缀的最小差异更新与光标位置映射(mapPositionByContext),确保格式化重排时输入光标不跳位。

保存与生效

  1. 点击「保存」按钮;
  2. 如果表单检测到非阻塞问题,会出现「先存上再说」确认提示;确认后仍可保存;
  3. 如果是当前启用的供应商,配置立即写入 live 文件;
  4. 重启 CLI 工具生效。

第 2 步对应源码中的"软校验"(soft validation):表单在提交前检查必填项(例如非官方供应商未填 API Key、未填端点),发现问题时弹出标题为「配置存在以下问题」的确认框,提示"仍要保存吗?保存后切换此供应商时可能失败,可以之后再补全",按钮文案为「仍要保存」——文案定义见 zh.json,弹框触发点位于 ProviderForm。而 JSON 格式错误则属于硬校验:configJsonError("配置JSON格式错误,请检查语法")会直接阻断保存。

保存成功后,handleSubmit会关闭面板并通过onSubmit把新配置连同originalId(原供应商 ID)一起交给上层处理,上层负责持久化到数据库,必要时同步 live 文件。对于当前启用的供应商,配置会立即写入 live 文件;但注意 CLI 工具读取配置通常在进程启动时完成,因此需要重启 CLI 工具(如重启 Claude Code / Codex 会话)才能让新配置生效。

取消编辑

点击「取消」或按Esc键关闭编辑面板,所有修改都不会保存。

从源码看,取消路径经过closeDialogonOpenChange(false)关闭全屏面板;由于所有编辑都只发生在表单的受控状态中,未经提交就不会写入数据库或 live 文件,因此取消是完全无损的。另外源码对面板关闭做了细分:若此时打开着托管账号(Auth)设置子面板,handlePanelClose会先关闭子面板而不是整个编辑对话框,避免误关导致编辑内容丢失。

小结

操作行为要点源码/文档依据
打开编辑卡片悬停 →「编辑」,全屏面板EditProviderDialog
编辑启用供应商live 回填,保持与 CLI 手动修改同步EditProviderDialog
图标更换搜索、名称提示、选中高亮IconPicker
配置编辑CodeMirror + JSON 实时校验JsonEditor
非阻塞问题「仍要保存」软校验确认ProviderForm
保存生效启用供应商立即写 live,重启 CLIdocs/user-manual/zh/2-providers/2.3-edit.md

理解"数据库 SSOT + live 文件双向同步"这条主线,是正确使用编辑功能的关键:数据库是配置的事实来源,live 文件是 CLI 工具实际读取的产物;编辑启用供应商时回填 live 是为了纳入你在 CLI 侧的手动修改,而代理接管、OpenCode、Pi 等特殊应用形态各有明确的例外处理,避免误读误写。

【免费下载链接】cc-switchA cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io项目地址: https://gitcode.com/GitHub_Trending/cc/cc-switch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询