dsh-ccswitch-importer-plus
Manifest validImport CC Switch Codex, Claude and OpenCode providers into DeepSeek Harness and configure per-model reasoning depth.
DSH CCSwitch 导入器(社区增强版)
将 CCSwitch 里的 Codex、Claude、Claude Desktop 与 OpenCode provider 导入 DeepSeek Harness,并在同一个「设置 -> 模型」页面管理每个模型的推理深度。
衍生作品说明:本插件是 wtiaw/dsh-ccswitch-importer(Apache-2.0)的衍生版,由第三方维护,不是原作者的官方版本。上游版本面向 DSH 0.1.x;本版本针对 DSH 0.2.0-rc.2 重写了 Host/Client 接线,并修复了批量导入、凭据脱敏、多语言等问题。npm 包名为
dsh-ccswitch-importer-plus,插件 ID 与 loader ID 与包名一致。完整变更清单见与上游的差异。
功能
- 只读扫描
~/.cc-switch/cc-switch.db,识别自定义 Codex、Claude、Claude Desktop 与 OpenCode provider;官方和默认 profile 会跳过。 - 将 endpoint、协议、模型 ID 和 API key 导入 DSH 的
llm-pi-ai设置。 - API key 只在 Host 进程中读取,并通过 DSH credentials 服务保存为
apiKeyEnv引用;扫描和导入响应不包含 key。 - 从 Codex TOML 顶层
model_reasoning_effort预填模型推理配置,同时允许之后在 DSH 中修改。 none映射为关闭;已知模型使用保守目录;未知模型只生成导入值对应的单个等级;非法值安全关闭并给出警告。- 重新导入不会覆盖已有的推理等级、route 默认值、headers、容量字段或未出现在 CCSwitch 的额外模型。
- 原生 Models 页面、CCSwitch 导入区和模型推理编辑器共存于同一个 Models 页面。
- CCSwitch 导入区、模型推理面板和每个模型卡片都支持收纳折叠,折叠偏好会保存在当前浏览器。
CCSwitch 是只读导入源。首次导入后,DSH 设置和 credentials 服务成为配置事实来源;不会写回 CCSwitch 数据库。
安装
从 GitHub 安装:
dsh plugin --profile desktop add github:2995288295/dsh-ccswitch-importer-plus
从本地源码安装:
dsh plugin --profile desktop add ./dsh-ccswitch-importer-plus
安装或更新后刷新 DSH Web 页面,打开 设置 -> 模型。
使用
- 在 Models 页面打开「CCSwitch 导入」并点击「扫描」。
- 选择需要导入的 provider,点击「导入选中」。
- 检查导入结果和 provider 模型列表。
- 在同页的模型推理区域确认已预填的等级;第三方网关需要自定义 wire value 时直接编辑并保存。
- 使用各面板标题栏或模型卡片右侧的箭头收纳/展开内容;折叠偏好会自动记住。
- 在输入框模型选择器中使用保存后的推理等级。
导入会在设置 revision 冲突时停止并恢复本次写入的 credential;已有 credential 会恢复原值。
推理目录
当前保守目录包含:
- GPT-5.6 系列:
off: none、low、medium、high、xhigh、max。 - OpenAI o-series(
o1、o3、o4-mini及变体):off: null、low、medium、high。
目录只是默认值,保存后的 DSH 字段由用户控制。
DSH Community Market 目录
本插件按 目录适配器指南(路径 A:标准来源) 提供可接入 DSH Community Market 的标准目录。仓库内包含:
scripts/build-catalog.mjs—— 从package.json元数据生成catalog-sourcemanifest 与/v1/plugins条目页;scripts/deploy-catalog.sh—— 一键部署到 Cloudflare Pages(含 JSON Content-Type 重写规则);test/catalog.test.mjs—— 用官方 Schema 校验生成结果并断言元数据一致;- docs/catalog.md —— 部署方式、Content-Type 要求与来源登记说明。
同时,本插件仓库已添加 GitHub topic dsh-plugin,会被 dshfind 目录来源按 topic 自动收录。
生成与部署:
DSH_CATALOG_ORIGIN=https://catalog.example.com npm run build:catalog
安全边界与限制
- Host 路由只接受 loopback、same-origin 请求;API key 不进入浏览器、日志、摘要或错误文本。
- 读取需要 Node.js 22.19 或更高版本,以支持只读 SQLite API。
- 插件只处理 CCSwitch 的自定义 Codex / Claude / Claude Desktop / OpenCode provider 和当前数据库字段;「测试连接」先请求
{baseURL}/models(免费、不发推理请求),只有当上游不提供模型列表(401/403/404/405/501)时,才对该 provider 真正使用的端点补发一次 1 token 的最小请求,用于区分「中转站不暴露/models」与「凭据确实无效」。它不写入任何设置,失败时会把上游自己的错误原文(脱敏后)一并显示。 - 未知模型和不合法等级默认关闭,避免向网关发送未确认的 reasoning 参数。
与上游的差异
相对 wtiaw/dsh-ccswitch-importer(0.1.3,2026-09-24,面向 DSH 0.1.x),本版本的主要改动:
针对 DSH 0.2.0-rc.2 的兼容性重写
- peer 依赖改为
^0.2.0-rc.2,移除 0.2.0 已废弃的@deepseek-ai/dsh-client-runtime注入。 - 适配 0.2.0 的
{ ok, value }远端信封与settings.describe()命名空间视图。 - 导入源从 Codex 扩展到 Codex、Claude、Claude Desktop 与 OpenCode。
- 新增模型目录回退、模型探测(probe)与 loopback 错误透出。
- 插件挂载到原生「模型」页面底部的 footer 槽位,与原生 UI 共存。
缺陷修复
- 批量导入此前只成功第一条:现在每次写入成功后重新读取 settings revision,作为下一条的并发前置条件。
- 凭据脱敏从「按
sk-形状匹配」改为「按已知密钥的值脱敏」,导入响应与 stderr 都不再回显 API key。 POST /import现在强制要求同源Origin头;超长请求体会销毁连接而不是静默忽略。- 保存推理等级期间若又产生新改动,状态显示为「已保存(有未保存修改)」而不是「已保存」。
- 空扫描结果现在区分「未安装 CCSwitch / 无 profile / 数据库不可读 / Node 版本过低」,并回显探测路径。
node:sqlite改为懒加载,Node 版本不足时给出可读提示,而不是整个插件加载失败。- 界面文案全部走 zh/en 语言目录,不再硬编码中文。
0.2.0-rc.3 界面可用性修复
- 被阻止的行现在直接说明原因:服务端为每种原因附带机器可读的
blockedCode(未知值一律回退为blocked),界面按 zh/en 目录本地化呈现,并把 app type、npm 适配器这类可变部分通过blockedDetail一并显示。 - 导入后的自动刷新不再清空导入结果;结果项显示 provider 名称而不是内部 ID,失败项标红,并新增「清除」入口。
- 首次进入设置页不再闪现「没有可读取的 CCSwitch provider」;「扫描中」与「导入中」不再共用同一个按钮文案。
- 推理面板:保存后再修改,徽章立刻变为「有未保存的改动」,而不是继续显示「已保存」;无改动时保存按钮禁用,避免空写一次设置;「重新载入」在会丢弃本地修改时先确认;等级行汇总新增「已自定义 N 项」标记,折叠状态下也能看出哪些模型改过 wire 值。
0.2.0-rc.4 测试连接
- 每个可导入的行现在都有一个「测试连接」按钮:新增的
POST /api/dsh-ccswitch/probe只请求{baseURL}/models,把结果显示在行内——连通 · N 个模型 · Nms,或具体失败原因(HTTP 401、超时、网络错误、缺少凭据),在需要做判断的地方直接给出结论。 - 探测在结构上就是只读的:这条路由不碰 settings,也不执行导入。有一条测试断言导入路径被调用 0 次。
- 按钮放在徽章旁边,而不是塞进行
<label>里,所以点击按钮不再连带切换复选框;没有凭据或 base URL 的行不显示按钮;单次请求最多探测 50 行。 - 结果在两端都做归一化(未知原因一律按网络失败处理,计数与耗时都做夹取),重扫后消失的行会连带丢弃它的探测结果;服务端继续按密钥值脱敏,错误响应里不会回显 key。
0.2.0-rc.5 探测更可信
- 失败信息不再只有一个状态码:探测会把上游自己的错误原文取出来(脱敏、压成一行、截断 200 字符)附在行内,例如
失败 · HTTP 401 · Invalid token (request id: …),而不是让用户对着一个HTTP 401猜。 /models被中转站挡住时不再是假失败:当它是401/403/404/405/501时,会按该 provider 的协议(openai-completions→/chat/completions、openai-responses→/responses、anthropic-messages→/messages)补发一次带上max_tokens: 1的最小真实请求。只要这次成功,行内显示连通 · 最小请求 · Nms,明确说明是通过哪种方式验证的。- 这次补发只发生在免费检查答不上来的时候,且上游不可达(超时/网络错误)或该 provider 没有已知模型 ID 时不会发第二次请求;导入路径的模型加宽仍然只走
/models,因此不会因为探测而多花钱。 - 新增宿主半未加载的识别:如果探测请求本身返回
401/404(宿主还没加载新路由,页面却已经是新的客户端 bundle),行内会提示「宿主未加载该接口,重启 DSH 后重试」,而不是把它误读成上游故障。
0.2.0-rc.6 修复「测试连接」被同源围栏拦下
- 修掉一个我自己引入的缺陷:写操作原本必须有
Origin头,但浏览器在同源 POST 上是允许不发Origin的(这个界面就是这样),于是每次点击都只得到forbidden: missing Origin on a state-changing request,看起来就像探测接口坏了。现在改为接受三种等价证明:Origin与Host一致、Sec-Fetch-Site: same-origin(浏览器设置,脚本无法伪造)、或客户端自己带的x-dsh-ccswitch-origin标记头。 - 这三种证明跨站页面都给不出来:自定义头会触发 CORS 预检,而这条路由不响应预检;
Sec-Fetch-Site由浏览器填写。因此围栏没有被削弱,只是不再误伤同源页面。 - 被拒绝时响应体现在会附带
saw: { origin, site, marker },直接说明这次请求到底带了什么,避免再对着一个forbidden猜。 - 同样的修复也覆盖了
/import:它此前有完全一样的问题。
上游版权与许可证原样保留在 LICENSE;改动声明见 NOTICE,且每个被改动的源文件头部都带改动提示。
开发与验证
要求 Node.js 22.19 或更高版本:
npm install
npm test
npm run pack:check
npm run build 生成 DSH Host bundle 和带有 window.__ModuleLoader__.load 注册的 Client bundle。发布包只包含 dist、patch、README、NOTICE 和许可证,不包含源码与测试。
Comments
Loading…
From the same category
by ccch1mneyyy
DSH 官方公众号收录的 TUI 补位插件:Claude Code 风,鲸鱼顶栏/实时状态/流式思考/双击 Esc 回滚/上下文进度+TPS。npm 一键装。 DSH official WeChat featured TUI plugin — Claude Code style: whale bar, live status, streaming thoughts, double-Esc rol
★ 4.3k
↓ 10.9k/wk
MIT
TypeScript
Oct 11, 2026
dsh plugin --profile terminal add @deepseek-harness-tui/dsh-tuiby strukto-ai
The World's First Virtual Terminal for AI Agents
★ 3.7k
↓ 355/wk
Apache-2.0
TypeScript
Oct 11, 2026
dsh plugin --profile agent add @struktoai/mirage-dshby bowenliang123
The best DeepSeek Harness plugin for context insight and management, with context dashboard / browser / sidebar and context command, for context statistics, composition, breakdown, evolution details,
★ 2k
↓ 34.4k/wk
Apache-2.0
TypeScript
Oct 11, 2026
dsh plugin --profile web add dsh-contextby huiliyi37
官方 DeepSeek Harness 的交互式终端 UI 插件:自研 ANSI 极简交互渲染、流式 Markdown/工具卡、16+ 主题、slash 命令与选择器、输入历史与本地偏好持久化、LSP 诊断、memory记忆,很丝滑的开发体验。
★ 287
↓ 462/wk
Apache-2.0
TypeScript
Sep 30, 2026
dsh plugin --profile terminal add @huiliyi37/dsh-tianshu-tuiby Hilbert-beinghappy
面向 DeepSeek Harness 的 Claude Code 风格终端界面,支持 Windows、macOS 与 Linux,兼容透明终端、VS Code 主题和自定义配色。
★ 197
↓ 108/wk
MIT
TypeScript
Oct 1, 2026
dsh plugin --profile web add seekttyby T-Auto
deepseek-harness Plugin Access and Implementation Standards / deepseek-harness交互生态插件规范与实施标准
★ 83
MIT
JavaScript
Oct 10, 2026