dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DeepSeek Harness 插件:在 DSH 里管理 CLIProxyAPI 的账号(余额 / 签到 / 切换账号),自动注册四个渠道的对话模型,CPA 随 DSH 启停 —— 装完即用。
dsh-cpa-switch
在 DSH 里管好你的 AI 渠道账号 余额、签到、任务、切号,不用离开 DSH
简体中文 · English
看余额、签到、跑任务、切账号 —— 在 DSH 里管理 CLIProxyAPI(CPA)的账号, 不用再开它的网页控制台。
装完插件即可用:CPA 本体、渠道插件、配置与密钥都由插件自动备好。
[!NOTE]
密钥不出宿主:面板里的所有操作都由插件代劳,管理密钥只保存在宿主侧,网页拿不到。
打开 DSH 的 插件 → CPA 切换器,或点左侧栏的 CPA 切换器(与「插件 / 自动任务 / 用量统计 / SSH」并列的那一行),四个渠道各一个标签:
端口被外部实例占着时不再假装「运行中」
并保存,它就从对话界面的下拉里消失(面板里照旧列出全部,随时可以勾回来); 不勾只是不在下拉里,模型本身照常能调通
点它直达面板;关掉(默认)时面板只从插件页进 —— 侧栏是宿主和大家共用的地方,插件不默认占位
渠道 · 账号数 · 余额单位 · 签到 · 任务 WorkBuddy · 多号 · 积分 · ✅ · ✅ Trae · 多号 · 积分 · ✅ · — Qoder · 单号 · 积分 · ✅ · — ZCode · 单号 · token · — · —
四个渠道上报的余额字段不是一套:Trae 只有一个余额池,上游不给总额与已用, 所以它那格显示 —、也不画进度条 —— 那是「上游没说」,不是「用了 0」。
按能力降级:渠道不支持的功能不显示,不给"点了没反应"的按钮。
管理密钥只保存在宿主侧,永不下发浏览器 —— 细节见 架构说明。
只需要 DSH(DeepSeek Harness)。CPA 本体、渠道插件、管理密钥都不用你准备 —— 插件首次启动时自动下载并配好;机器上已有 CPA 时直接复用,不会覆盖。
下载需要能访问 GitHub Release,直连不通时配好代理即可。
渠道插件不会被自动升级(上游随时可能改行为,静默替换风险太大)。 面板上会显示「渠道插件 a → b」,需要时点一次「更新渠道插件」: 它会先停 CPA、保留一份旧件、失败自动还原,换完不自动重启。
从 npm 安装:
dsh plugin --profile <profile> add dsh-cpa-switchGUI 的插件管理器里填包名 dsh-cpa-switch 等价。
从本地目录安装(开发用):
plugin_manager action: install_bundle
target: <本目录绝对路径>从本仓库源码安装:
cd <本仓库目录>
pnpm install
pnpm build
dsh plugin --profile web add .插件必须装进所选 profile 的 node_modules/ 下。装完不显示、或显示「未运行」, 见 AGENTS.md 的活跃坑。
字段 · 默认 · 说明 adminKey · 空 · CPA 管理密钥;留空则用凭据库里的引用 adminKeyRef · CPA_ADMIN_KEY · 凭据库里的引用名 port · 8317 · CPA 监听端口 exePath · 空 · CPA 可执行文件路径;留空自动探测 manageLifecycle · true · 是否由插件负责 CPA 的启动和停止 autoCheckinOnStart · true · 启动时补一次漏掉的签到 openControlPanel · false · CPA 启动时是否同时打开它自带的网页控制台 reasoningEfforts · true · 是否让模型可切思考档位(关 / 开两档) maxOutputTokens · 384000 · 推给宿主的每模型输出上限;0 = 不声明 startTimeoutSeconds · 30 · 等待 CPA 就绪的最长秒数
⚠️ 输出上限:插件把 maxOutputTokens 推给宿主的每个模型(宿主字段 maxTokens), 让请求不再被 DSH 兜底的 32768 提前截断。实测它目前只在 WorkBuddy 渠道真正生效 —— qoder 由服务端模板自带上限、客户端值不进请求,trae 会丢弃该字段并自行补大值;给这两家 声明是为渠道侧支持后自动生效。默认值 384000(DeepSeek V4 系列的输出上限天花板)是 报大方向:上游对超报值不拒绝(实测 384000 发给真实上限 128k 的模型也正常返回), 截断职责仍在上游。链路与实测见 实测报告 的附录。
装完插件、加完账号,四个渠道的模型会自动出现在 DSH 的模型选择器里:
CPA Switch · WorkBuddy),组内每一行是模型名本身(如 deepseek-v4.1-flash)—— 一眼看出请求会走谁
不会跨渠道轮询消耗你的其它号
选择器里不会有「点了才发现调不通」的条目
插件不认的渠道不会有管理入口,与其给你一个选不上的名字,不如不列
(CPA 刚起、账号还在分批加载),插件会继续用上一次的完整清单,并在几秒内自动重读补齐 —— 不会出现「只剩一两条模型」或「只剩一个渠道」的中间态
加了新账号、删了账号,模型清单自动跟着变。机制与设计见 架构说明。
模型选择器里每个模型可以切思考档位 —— 两个选项:
默认打开(reasoningEfforts: true)。想整体关掉就去插件设置里关这个开关 —— 关掉后 Effort 那一行会消失,回到不带档位的老行为。
⚠️ 只给两档是有意的,不是没做完。 实测上游对「低/中/高/最大」这类中间刻度 不按刻度办事(同一档位内的波动比档位之间的差还大),给了就是在制造错误预期。 所以只暴露两个语义确定的值:关与开。理由与实测数据见 决策记录。
⚠️ 「关」发出去的那个词按渠道自动适配(zcode 只认 none、不认 off), 所以四个渠道上选「关」都不会因为用词被上游拒。
⚠️ 如果上游某个时刻拒绝档位值(整轮对话报错),把上面那个开关关掉即可恢复。
菜单里为什么没有 `Default` 那一行:DSH 只在「路由没声明默认档位」时才补它,
而它与「关」一样不发档位、名字却像是个值。插件已声明默认档位(=开),
所以菜单就是干净的关 / 开两项。原理与取舍见
决策记录。
—— 详见 架构说明 的防错清单。
维护者文档地图见 AGENTS.md。常用入口:
想看什么 · 去哪 为什么这样设计(不变决策、契约边界、防错清单) · docs/ARCHITECTURE.md 宿主半边各模块、内部 HTTP 路由表 · src/README.md 浏览器半边 · src/client/README.md 环境准备 · src/setup/README.md 测试覆盖与运行 · tests/README.md 下一步做什么、当前卡在哪 · docs/PLAN.md
pnpm install
pnpm build # tsdown 双目标构建 → lib/
pnpm check # typecheck + lint + format + build + verify:artifacts + test改了源码要重新构建:宿主加载的是构建产物,pnpm build 之后宿主侧重启 DSH、 浏览器侧刷新页面。
本项目站在以下开源项目之上,特此致谢:
部分 · 参考来源 工程骨架与插件机制:tsdown 双目标构建、双 tsconfig、vitest / eslint / prettier、Cordis 集成、配置 schema、React 面板 UI、生命周期写法 · dsh-workbuddy-bridge 被管理宿主:多渠道中转 ProxyAPI,以及账号文件、路由策略等管理 API(上游代码) · CLIProxyAPI 渠道协议与多渠道路由能力:WorkBuddy / Trae / Qoder / ZCode 渠道插件,以及账号聚合、签到、任务、余额协议 —— 面板的渠道能力面由它定义 · cpa-multi-plugins · workbuddy-bridge-0.1.2-source(WorkBuddy 渠道协议参考) 宿主平台 · DeepSeek Harness
CLIProxyAPI 运行时产物发布自 cslkkl/CLIProxyAPI(release-windows工作流);开发与调研另参考 zlZayn/CLIProxyAPI(local-autobrowser分支)。二者与上游 router-for-me/CLIProxyAPI 本质同源,仅存放位置与分支不同。
本项目仅供个人学习与研究使用,与 WorkBuddy / Trae / Qoder / ZCode 等各平台官方无关,非官方产品。
欢迎提 Issue 与 PR。提交前请确保 pnpm check 全绿。
怎么起步、提交与 PR 的纪律、文档同步要求 → CONTRIBUTING.md。