@done-coding/cli-cc-switch

中文文档
0.6.1发布于 2026/11/11MITTypeScriptES Module构建来源已验证近 30 天下载 2435

密码

中文使用文档
文档目录6 节
  1. 使用
  2. meta 选项(cc-switch 自身命令面,不透传)
  3. 浏览器配置界面
  4. settings v2:稳定身份、可改别名、多账号
  5. v1 兼容与迁移
  6. 启动行为

@done-coding/cli-cc-switch

模型路由

完整文档:使用文档。

使用

npm install @done-coding/cli-cc-switch

安装后提供两个命令入口(指向同一 es/cli.mjs):

  • dc-cc-switch — 正式命令名
  • cc-router — 兼容入口(迁移自 @ccsuite/cli-router 保留)
dc-cc-switch [command] [options]   # 正式
cc-router [command] [options]      # 兼容

除 --meta-* 外的所有参数原样透传给 claude。

meta 选项(cc-switch 自身命令面,不透传)

选项行为
--meta-profile=<name>显式指定 profile 启动
--meta-pick终端交互选择 profile 启动(需 TTY)
--meta-silent压制启动前的 profile 名输出(MCP/AI 调用避免污染上下文)
--meta-generate从 settings.json 重建 profile.json,报告移除 / 新增的 profile 名
--meta-migrate显式迁移 v1 → v2,先保存 600 权限备份,再原子写回
--meta-ui浏览器编辑 settings v2,保存后自动重建 profile 并提示改名影响
--meta-apiKey=<key>更新凭据(--meta-provider 选提供商,多账号再用 --meta-account 或交互选择,自动重建)
--meta-model-name=<name>添加模型(交互选提供商或 --meta-provider,自动重建;v2 alias=去尾部 [1m]、name+[1m]、自动补 UUID)
--meta-provider=<alias>显式指定提供商(供 apiKey / model-name 跳过交互选择,非独立动作)
--meta-account=<alias>多账号服务商更新 apiKey 时选择账号;非 TTY 必须显式指定,仅用于 apiKey
--meta-provider-list输出提供商列表(alias(name,账号 157 / 199),不含 apiKey)
--meta-model-list输出模型列表(name(provider,账号 157 / 199),同模型多 provider 各一行)
--meta-help显示自身帮助
--meta-version显示自身版本

优先级:--meta-help > --meta-version > --meta-ui > --meta-migrate > --meta-generate > --meta-model-list > --meta-provider-list > --meta-model-name > --meta-apiKey > --meta-pick > --meta-profile=。

--meta-migrate 不得与 --meta-generate 或源修改同用;--meta-apiKey 与 --meta-model-name 互斥、均不得与 --meta-generate 同用;--meta-provider 仅随二者使用;--meta-silent 为修饰选项,不参与动作优先级。

--meta-ui 与其他 meta 动作及 provider/account 选择器互斥;help/version 仍优先,silent 可同用。

浏览器配置界面

dc-cc-switch --meta-ui

要求源配置为 v2;已有 v1 请先运行 --meta-migrate。界面由随包 Schema 的表单视图生成,可编辑服务商、账号、模型及输出选项。UUID 不展示,新增行自动补 UUID,改别名保留身份和默认引用。API 密钥使用密码框。

  • 单密钥模式填写服务商 API 密钥,账号列表留空;多账号模式清空服务商密钥并添加账号。两处同时有非空凭据时保存失败。
  • 默认引用、额外环境变量及其它未展示字段原样保留;需要修改它们时编辑 settings.json。删除默认引用所指的实体会报错,请先调整默认引用。
  • 每次启动都打印完整本地 URL。TTY 尝试打开浏览器;非 TTY 设置 openBrowser:false,无桌面或自动打开失败时可手动打开 URL。链接仅在本次会话有效,请勿分享。
  • 保存成功后以 600 权限原子写回 settings、自动重建 profile,输出移除 / 新增名称及外部按名引用提示,以退出码 0 结束。拒绝 settings/profile 目标软链。
  • 页面字段校验失败可原地修正重试,不写文件。v2 语义校验失败会结束会话、终端提示原因并退出 1;重新启动后再修改。默认 5 分钟超时退出 1,关闭页面本身不代表保存成功。
  • settings 和 profile 分别原子替换;若 settings 已保存而 profile 重建失败,终端明确提示运行 --meta-generate 修复,不会声称全部成功。超时不能撤回已开始的文件操作。

settings v2:稳定身份、可改别名、多账号

配置源仍是 ~/.done-coding/cc-switch/settings.json,运行时读取由它编译的 profile.json。v2 服务商、账号、模型均带 uuid(稳定身份)和 alias(拼 profile 名);改 alias 时保留 UUID,默认引用仍指向同一实体。

{
  "version": 2,
  "defaultProfile": {
    "provider": "00000000-0000-4000-8000-000000000001",
    "account": "00000000-0000-4000-8000-000000000003",
    "model": "00000000-0000-4000-8000-000000000004"
  },
  "providers": [
    {
      "uuid": "00000000-0000-4000-8000-000000000001",
      "alias": "ark-agent-plan",
      "name": "火山方舟 agent plan",
      "url": "https://example.test/anthropic",
      "accounts": [
        {
          "uuid": "00000000-0000-4000-8000-000000000002",
          "alias": "157",
          "apiKey": "test-key-157"
        },
        {
          "uuid": "00000000-0000-4000-8000-000000000003",
          "alias": "199",
          "apiKey": "test-key-199"
        }
      ],
      "models": [
        {
          "uuid": "00000000-0000-4000-8000-000000000004",
          "alias": "glm",
          "name": "glm[1m]"
        }
      ]
    }
  ]
}

这里生成 ark-agent-plan-157-glm / ark-agent-plan-199-glm,默认选第二个。URL 和 key 均为示例,需换成实际配置。

  • 一个服务商只可有 apiKey 或非空 accounts 之一。单 key 模式的 profile 名是 ${provider.alias}-${model.alias},默认引用不带 account。
  • alias 匹配 ^[A-Za-z0-9][A-Za-z0-9._-]*$;同层 UUID / alias 唯一;生成的 profile 名全局唯一,碰撞时报冲突来源。providers / models 均非空。
  • defaultProfile 引用 UUID,必须解析到该服务商所属的账号和模型,否则报「默认 profile 悬空」,修正源后再生成。
  • env 合并顺序仍为通用字段 ← provider.envExtraParams ← model.envExtraParams;账号 key 提供通用 AUTH_TOKEN。
  • v2 读取时不自动修补缺失 UUID。CLI 新增模型、显式迁移和导出的 assignMissingUuids 为新实体补 UUID;手工加实体时需填写 UUID。
  • settings.schema.json 随包发布。迁移自动写入带当前包版本的 jsdelivr $schema 地址。UUID 标 readOnly,apiKey 标 x-dc-ui.secret;UI 使用隐藏身份字段的表单视图,重复和默认引用等语义仍由 CLI 校验。
dc-cc-switch --meta-apiKey=test-new-key --meta-provider=ark-agent-plan --meta-account=199
dc-cc-switch --meta-model-name=new-model --meta-provider=ark-agent-plan
dc-cc-switch --meta-provider-list
dc-cc-switch --meta-generate

TTY 可交互选提供商和账号;非 TTY 多账号缺 --meta-account 会立即报错。新增模型由该服务商所有账号共享。列表只显示别名和名称,不显示密钥。

改 alias 后运行 generate:若 profile 名变化,会列出移除 / 新增名称;有移除时提醒同步外部 --meta-profile= 和脚本引用,无变化不输出差异。UUID 只能保持配置内部引用,外部按名称使用的脚本仍需更新。

v1 兼容与迁移

没有 version、providers 为对象的旧配置继续只读编译,生成内容保持不变,并提示迁移命令。旧 meta 修改仍可操作 v1,不会隐式升级。显式执行:

dc-cc-switch --meta-migrate
dc-cc-switch --meta-generate

迁移保留旧 provider 键 / model.id 为 alias,补 UUID 并将默认完整 profile 名解析为 UUID 引用;不合并服务商。原文件先备份到同目录 settings.json.v1-<时间戳>.bak(权限 600),再原子写回。默认无法解析则省略并提示;非法 alias 或冲突则报错,不改原文件。已是 v2 时不重复备份或改写。有效默认项的配置在迁移前后生成的 profile 名和 env 完全相同。

旧格式示例(仅供已有 v1 配置参考):

profile.json 由 settings.json 经 --meta-generate 生成(启动不自动生成,保速度;profile 缺失或默认 profile 悬空时提示手动运行):

  • ~/.done-coding/cc-switch/settings.json — 唯一源(含 apiKey,chmod 600):
    {
      defaultProfile: "deepseek-pro", // 可选:未配置 → 启动时交互选择
      disabledDefault: false, // true → 忽略已配默认,强制交互选择
      output: { profileName: true }, // 启动前输出 profile 名(false 关闭)
      providers: {
        deepseek: {
          name: "DeepSeek",
          url: "https://api.deepseek.com/anthropic",
          apiKey: "sk-...",
          envExtraParams: { CLAUDE_CODE_EFFORT_LEVEL: "max" }, // provider 级附加 env
          models: [
            { id: "flash", name: "deepseek-v4-flash[1m]" },
            {
              id: "pro",
              name: "deepseek-v4-pro[1m]",
              envExtraParams: {
                ANTHROPIC_DEFAULT_HAIKU_MODEL: "deepseek-v4-flash[1m]",
              },
            },
          ],
        },
      },
    }
    
  • ~/.done-coding/cc-switch/profile.json — 编译快照(运行时读取,原格式、chmod 600)

v1 profile 名 = ${provider}-${id};每个 profile 的 env 按 {...通用, ...providerEnvExtraParams, ...modelEnvExtraParams} 合并(通用 = provider.url/apiKey + model.name 推导的 BASE_URL/AUTH_TOKEN/MODEL/四档/SUBAGENT)。例:pro 档让 haiku 用 flash,在该 model 的 envExtraParams 设 ANTHROPIC_DEFAULT_HAIKU_MODEL。

启动行为

  • 启动前向 stdout 输出当前选中 profile 名一行(output.profileName 缺省 true;--meta-silent 压制,MCP/AI 调用建议带上)
  • 默认选择解析序:--meta-profile=<name> > 交互 pick(--meta-pick / disabledDefault=true)> defaultProfile > 无默认也交互 pick(非 TTY 报错提示 --meta-profile)

0.3.0 起废弃 provider.json / model.json 分层源,存量配置请迁移为 settings.json。

版本与发布记录

@done-coding/cli-cc-switch 共发布 20 个版本,首次发布于 2026/08/01;过去 12 个月发布了 20 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.6.1latest2026/11/112 天前
0.6.1-alpha.0alpha2026/11/112 天前
0.6.02026/11/076 天前
0.5.2-alpha.02026/11/076 天前
0.5.12026/11/048 天前
0.5.1-alpha.02026/11/048 天前

关于 @done-coding/cli-cc-switch 的常见问题

@done-coding/cli-cc-switch 是什么?

密码

如何安装 @done-coding/cli-cc-switch?

在项目目录运行 npm install @done-coding/cli-cc-switch,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 cc-router、dc-cc-switch,可以用 npx cc-router 直接运行。

@done-coding/cli-cc-switch 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@done-coding/cli-cc-switch 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@done-coding/cli-cc-switch 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@done-coding/cli-cc-switch 可以商用吗?

@done-coding/cli-cc-switch 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@done-coding/cli-cc-switch 的下载量有多少?

根据 npm 官方下载统计,@done-coding/cli-cc-switch 在 2026/10/13 – 2026/11/11 这 30 天内被下载 2,435 次,日均约 81 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@done-coding/cli-cc-switch 还在维护吗?

最新版本 0.6.1 发布于 2026/11/11(2 天前);至今共发布 20 个版本,其中过去 12 个月发布了 20 个;首次发布于 2026/08/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。