Skip to content

[Feature] 支持 OpenCode v2 正式版 (v2.0.x) 新配置格式:providers / mcp.servers / plugins / Server API #7382

Description

@Enough1122

Self Checks / 自检

Related App / 涉及应用

  • OpenCode

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 只认顶层单数 providersrc-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/..."apisettings.baseURLoptions 拆分为 settings / headers / body
  • model:idmodelIDtool_call/modalitiescapabilities.*variants: {high: {...}} 对象 → variants: [{id: "high", ...}] 数组
  • mcp: {...}mcp.servers: {...}enabled 反转为 disabledtimeout 拆分为 {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 的用户:

  1. CC Switch 读不到原生 v2 已配供应商(只能读 provider,读不到 providers),或解析失败(类似 OpenCode becomes unusable when Coding Plan provider hits quota exhaustion; no runtime rescue path like Claude takeover #2351Failed to parse provider ... missing field npm 那类 warn 直接丢弃)
  2. 从 CC Switch 写入会把 v2 原生格式用 v1 旧字段覆盖回去,v2 启动报 warning / 行为不一致
  3. live 模型拉取 / 本地环境检查若还走 v1 server API / opencode2 二进制假设,在 GA(opencode 原地替换)下会失效

我在尝试把主力切到 OpenCode v2 正式版的时候,发现 CC Switch 侧还没有明确的 v2 支持计划,所以来问下排期。

Proposed Solution / 建议方案

希望 CC Switch 能支持 OpenCode v2(同时尽量兼容 v1 存量):

  1. 版本探测:opencode --version 区分 v1 / v2,或按配置文件形状嗅探(providers vs providermcp.servers vs mcpplugins vs plugin),v2 存在时优先按 v2 理解
  2. 读取兼容:同时认 provider + providersmcp + mcp.serversplugin + plugins,混用时按官方规则“原生 v2 值优先”,避免静默丢供应商
  3. 写入策略:检测到 v2 时默认写原生 v2 形状(package: aisdk:...settings.baseURL/apiKeymcp.serversplugins),或给个显式开关“以 v2 格式写入”;保留用户无关字段(model/theme 等)不动
  4. live 能力:运行时模型拉取切到 V2 server API(@opencode/client),本地环境检查更新二进制探测逻辑(GA 后不再假设 opencode2 并存)+ cli.json 说明
  5. 若暂时做不到全量,至少先做到“读 v2 不丢、写 v2 不覆盖回退 + 明确提示当前版本不支持”,避免配置被洗掉

Additional Context / 补充信息

Contribution / 参与贡献

  • I am interested in contributing to this feature. / 我有兴趣参与开发此功能。
    • 我可以提供真实 v2 配置脱敏样例 + 回归测试(v1/v2 混读、写入不丢字段、MCP/plugins 兼容),需要的话请告诉我需要哪些脱敏字段。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions