前言¶
在 DSH(DeepSeek Harness)里接第三方模型,常见做法是自己在 profile 里配 provider、baseURL 和密钥。若你同时在桌面端用 farion1231/cc-switch 管理 Claude Code、Codex、OpenCode 等多套账号,两套配置容易脱节:CC Switch 里增删账号,DSH 侧还要手工改一遍。
dsh-llm-cc-switch 是维护者 Hoemr(Wei Chen)发布的 DSH 插件,分类为模型推理。它把 CC Switch SQLite 数据库里的账号按 harness 类别映射成 DSH 的 provider 路由与模型项,并在每次操作时重新读取 ~/.cc-switch/cc-switch.db,与 CC Switch 保持同步,一般无需重启 DSH。
这是什么¶
一句话:DSH 的 CC Switch 桥接插件——把 CC Switch 管理的账号直接变成 DSH 可选模型,每次操作都重读 cc-switch.db。
- 仓库:Hoemr/dsh-llm-cc-switch
- 目录页:skillhub.cn 插件页
- 许可证:MIT(见仓库 LICENSE)
- 运行环境:Node ≥ 22.19(与 DSH 一致)
映射方式¶
| CC Switch | DSH |
|---|---|
| harness(claude / claude-desktop / codex / opencode / grokbuild 等) | provider 路由(如 cc-switch/claude → 选择器里显示「Claude Code」) |
| 账号(MiniMax、DeepSeek、Xiaomi MiMo 等) | 该类别下的模型(显示为 MiniMax · claude-opus-4 [200k] · anthropic 这类形式) |
端点、协议、密钥在每次请求时按账号动态解析,不会在 DSH 端持久化。协议支持 anthropic-messages、openai-completions、openai-responses,内部复用 DSH 自带的 @deepseek-ai/dsh-llm-pi-ai,流式、工具调用、重试语义与官方适配器一致。
以 tp- 开头的 token-plan 密钥可自动改用 Authorization: Bearer 发送(默认前缀可在配置里改)。每个账号的 baseURL 在加载时会经 scheme + host 白名单校验,不在白名单的行会被跳过,作为对 cc-switch.db 内异常 env 的防护。
支持的 harness¶
CC Switch app_type |
支持情况 | 备注 |
|---|---|---|
claude |
支持 | 通过 ANTHROPIC_AUTH_TOKEN / ANTHROPIC_BASE_URL 解析 |
claude-desktop |
支持 | 同上 |
codex |
支持 | auth.json + model_providers TOML + modelCatalog |
opencode |
支持 | 按 npm 选 anthropic-messages 或 openai-completions |
grokbuild |
支持 | TOML [model.<profile>] + models.default |
gemini · openclaw · hermes · pi |
暂未接入 | 上游 settings_config 形态尚未稳定,默认 appTypes 不含 |
前提¶
- CC Switch 桌面端(SQLite 版本,数据目录
~/.cc-switch/,含cc-switch.db与settings.json) - DSH Desktop(内置
@deepseek-ai/dsh-llm-pi-ai与@earendil-works/pi-ai) - Node ≥ 22.19
README 中记录的兼容性示例:插件 0.3.1 已在 DSH Desktop 0.2.0-rc.2 等版本线验证;package.json 当前版本为 0.3.2。peer 范围见仓库说明,DSH 大版本升级后若 profile 形状变化,适配器测试会先失败而非静默在选择器里出错。
安装与启用¶
官方 README 的安装方式不是单独的 dsh plugin add 一行命令,而是把包加入目标 profile 的 package.json 与 dsh.profile.bundles,再执行:
dsh plugin --profile <name> install
启动 DSH 后,选择器里会出现新类别;在 CC Switch 里增删改账号后,下次选择或发起请求即可生效,通常不必重启 DSH。若 CC Switch 新增一种此前未支持的全新 harness 类型,类别路由需在 DSH 启动时注册,此时需要重启 DSH 才能看到新类别。
配置¶
在 cordis.patch.yml 里为该插件的 config 段可按需覆盖。下面摘录 README 中的示例(注释项表示可选):
- insert:
- id: cc-switch
name: 'dsh-llm-cc-switch'
config:
appTypes: [claude, claude-desktop, codex, opencode, grokbuild]
contextWindow: 200000
maxTokens: 64000
streamIdleTimeoutMs: 300000
bearerAuthPrefixes: [tp-]
urlAllowlist:
schemes: ["http:", "https:", "ws:", "wss:"]
opencodeSession:
enabled: true
header: x-opencode-session
urlAllowlist.schemes / hosts 是闭集白名单:未配置 host 限制时仍按 scheme 过滤;不在白名单的 baseURL 对应账号不会进入路由。OpenCode Go / Zen 对会话头有要求时,命中 opencodeSession.hosts 的账号会补上 DSH 会话 id 相关头,避免 400 MissingSessionID;设 enabled: false 可关闭该行为。
典型用法¶
日常使用:在 CC Switch 里维护账号,在 DSH 模型选择器里按 harness 类别挑选对应账号下的模型即可,密钥与 baseURL 由插件按库内配置解析。
若要在自有代码里读账号与路由,README 提供 CcSwitchStore API(路径 dsh-llm-cc-switch/source/internal):
import { CcSwitchStore } from "dsh-llm-cc-switch/source/internal";
const store = new CcSwitchStore({ dbPath: "/custom/cc-switch.db" });
await store.accounts();
await store.routes();
await store.accountOf("claude-desktop", "<uuid>");
账号身份是 (appType, accountId) 对,而不是裸 UUID;内部路由形如 cc-switch-account/<appType>:<accountId>。扩展其他账号源可实现 AccountStore 子类并 registerAccountSource,在 config.source 中指定名称,无需改插件本体。
安全性与限制¶
插件以只读方式打开 cc-switch.db,不写入 CC Switch 状态;密钥从 settings_config 直读到请求,无中间缓存。日志对密钥与敏感头做了脱敏。安装前建议自行审阅源码与 MIT 许可证;插件在当前 DSH 进程权限下运行,能访问的路径与 CC Switch 数据库一致。
已知限制(摘自 README):
- 仅支持 API Key 类账号;Codex 官方 OAuth、Claude 官方登录类账号会被跳过。
- 模型为纯文本模态,图片输入暂未声明。
- grokbuild 解析器目前只接受直接出现的
api_key,env_key形式需等上游提供解析产物。
结尾¶
若你已在用 CC Switch 统一管理多 harness 账号,又希望在 DSH 里用同一套数据源选模型,dsh-llm-cc-switch 把「读库 → 映射类别与模型 → 按请求解析端点」串成一条链路,并强调每次操作重读数据库与 baseURL 护栏。进一步了解可访问 GitHub 仓库 与 社区目录页。社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。