Self Checks / 自检
Related App / 涉及应用
Problem or Motivation / 问题或动机
OpenCode v2 正式版已发布(v2.0.0 ~ 2026-09-11,v2.0.3 ~ 2026-09-12,tag 已可在 anomalyco/opencode 看到。V2 文档明确写了不再是 opencode2 并存 beta,而是默认替换 opencode 二进制)。
CC Switch 目前对 OpenCode 的读写还是 v1 形状(src-tauri/src/opencode_config.rs#get_providers/set_provider 只认顶层单数 provider,src-tauri/src/provider.rs#OpenCodeProviderConfig 还是 npm + options.{baseURL,apiKey},mcp 还是扁平 map,plugin: string[])。
按官方迁移指南(https://opencode.ai/v2/docs/migrate-v1 ,GA 后已更新为替换式安装,不再 side-by-side),V2 原生格式 breaking changes 包括:
provider(单数)→ providers(复数);npm: "@ai-sdk/..." → package: "aisdk:@ai-sdk/...";api → settings.baseURL;options 拆分为 settings / headers / body
model:id → modelID,tool_call/modalities → capabilities.*,variants: {high: {...}} 对象 → variants: [{id: "high", ...}] 数组
mcp: {...} → mcp.servers: {...},enabled 反转为 disabled,timeout 拆分为 {catalog, execution}
plugin: string[] → plugins: (string | {package, options})[],本地目录偏好 .opencode/plugins/
TUI 配置 tui.json(c)(多层)→ 全局唯一 cli.json(~/.config/opencode/cli.json,首次启动自动迁移)
Server API / clients 重做,调 V1 server API 的集成必须迁移到 V2(官方指向 @opencode/client + 新 API reference)
这会导致升级 v2 的用户:
CC Switch 读不到原生 v2 已配供应商(只能读 provider,读不到 providers),或解析失败(类似 OpenCode becomes unusable when Coding Plan provider hits quota exhaustion; no runtime rescue path like Claude takeover #2351 里 Failed to parse provider ... missing field npm 那类 warn 直接丢弃)
从 CC Switch 写入会把 v2 原生格式用 v1 旧字段覆盖回去,v2 启动报 warning / 行为不一致
live 模型拉取 / 本地环境检查若还走 v1 server API / opencode2 二进制假设,在 GA(opencode 原地替换)下会失效
我在尝试把主力切到 OpenCode v2 正式版的时候,发现 CC Switch 侧还没有明确的 v2 支持计划,所以来问下排期。
Proposed Solution / 建议方案
希望 CC Switch 能支持 OpenCode v2(同时尽量兼容 v1 存量):
版本探测:opencode --version 区分 v1 / v2,或按配置文件形状嗅探(providers vs provider、mcp.servers vs mcp、plugins vs plugin),v2 存在时优先按 v2 理解
读取兼容:同时认 provider + providers、mcp + mcp.servers、plugin + plugins,混用时按官方规则“原生 v2 值优先”,避免静默丢供应商
写入策略:检测到 v2 时默认写原生 v2 形状(package: aisdk:...、settings.baseURL/apiKey、mcp.servers、plugins),或给个显式开关“以 v2 格式写入”;保留用户无关字段(model/theme 等)不动
live 能力:运行时模型拉取切到 V2 server API(@opencode/client),本地环境检查更新二进制探测逻辑(GA 后不再假设 opencode2 并存)+ cli.json 说明
若暂时做不到全量,至少先做到“读 v2 不丢、写 v2 不覆盖回退 + 明确提示当前版本不支持”,避免配置被洗掉
Additional Context / 补充信息
Contribution / 参与贡献
Self Checks / 自检
Related App / 涉及应用
Problem or Motivation / 问题或动机
OpenCode v2 正式版已发布(
v2.0.0~ 2026-09-11,v2.0.3~ 2026-09-12,tag 已可在anomalyco/opencode看到。V2 文档明确写了不再是opencode2并存 beta,而是默认替换opencode二进制)。CC Switch 目前对 OpenCode 的读写还是 v1 形状(
src-tauri/src/opencode_config.rs#get_providers/set_provider只认顶层单数provider,src-tauri/src/provider.rs#OpenCodeProviderConfig还是npm+options.{baseURL,apiKey},mcp还是扁平 map,plugin: string[])。按官方迁移指南(https://opencode.ai/v2/docs/migrate-v1 ,GA 后已更新为替换式安装,不再 side-by-side),V2 原生格式 breaking changes 包括:
provider(单数)→providers(复数);npm: "@ai-sdk/..."→package: "aisdk:@ai-sdk/...";api→settings.baseURL;options拆分为settings/headers/bodyid→modelID,tool_call/modalities→capabilities.*,variants: {high: {...}}对象 →variants: [{id: "high", ...}]数组mcp: {...}→mcp.servers: {...},enabled反转为disabled,timeout拆分为{catalog, execution}plugin: string[]→plugins: (string | {package, options})[],本地目录偏好.opencode/plugins/tui.json(c)(多层)→ 全局唯一cli.json(~/.config/opencode/cli.json,首次启动自动迁移)@opencode/client+ 新 API reference)这会导致升级 v2 的用户:
provider,读不到providers),或解析失败(类似 OpenCode becomes unusable when Coding Plan provider hits quota exhaustion; no runtime rescue path like Claude takeover #2351 里Failed to parse provider ... missing field npm那类 warn 直接丢弃)opencode2二进制假设,在 GA(opencode原地替换)下会失效我在尝试把主力切到 OpenCode v2 正式版的时候,发现 CC Switch 侧还没有明确的 v2 支持计划,所以来问下排期。
Proposed Solution / 建议方案
希望 CC Switch 能支持 OpenCode v2(同时尽量兼容 v1 存量):
opencode --version区分 v1 / v2,或按配置文件形状嗅探(providersvsprovider、mcp.serversvsmcp、pluginsvsplugin),v2 存在时优先按 v2 理解provider+providers、mcp+mcp.servers、plugin+plugins,混用时按官方规则“原生 v2 值优先”,避免静默丢供应商package: aisdk:...、settings.baseURL/apiKey、mcp.servers、plugins),或给个显式开关“以 v2 格式写入”;保留用户无关字段(model/theme 等)不动@opencode/client),本地环境检查更新二进制探测逻辑(GA 后不再假设opencode2并存)+cli.json说明Additional Context / 补充信息
v2.0.0(2026-09-11) /v2.0.3(2026-09-12),gh release list目前 Latest 仍指向v1.18.30,但 tag 已有 v2 稳定线src-tauri/src/opencode_config.rs:148-180get_providers()/set_provider()只碰config["provider"]src-tauri/src/provider.rs:935-950OpenCodeProviderConfig { npm, options, models }src-tauri/src/opencode_config.rs:219-259get_mcp_servers()/set_mcp_server()只碰扁平mcpsrc-tauri/src/opencode_config.rs:261-315add_plugin()只维护plugin: string[]Contribution / 参与贡献