🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

CPA 中转站 cslkkl/dsh-cpa-switch

DeepSeek Harnessv0.19.0
cslkkl4 天前有提交已提供中文文档扫描:含敏感能力

DeepSeek Harness 插件:在 DSH 里管理 CLIProxyAPI 的账号余额 / 签到 /…

36.3/100
综合分
2
GitHub 星标
395
npm 周下载
—/5
用户评分

数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-cpa-switch
npm 源 · dsh-cpa-switch 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · model
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-cpa-switch @ 0.19.0
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/27 00:32:21

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 78 处,展示前 23 条)
  • 发起网络请求
    lib/index.js:31
    const response = await fetch(url, {
  • 执行外部命令固定命令
    lib/index.js:343
    const out = execFileSync("reg", ["query", "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"], {
  • 写入本地文件
    lib/index.js:550
    await pipeline(stream, createWriteStream(destPath));
  • 写入本地文件
    lib/index.js:1190
    mkdirSync(managedCpaDir(), { recursive: true });
  • 写入本地文件
    lib/index.js:1191
    writeFileSync(managedConfigPath(), content, "utf8");
  • 读取本地文件
    lib/index.js:1213
    content = readFileSync(managedConfigPath(), "utf8");
  • 读取本地文件
    lib/index.js:1243
    content = readFileSync(managedConfigPath(), "utf8");
  • 读取本地文件
    lib/index.js:1304
    content = readFileSync(managedConfigPath(), "utf8");
  • 读取本地文件
    lib/index.js:1381
    content = readFileSync(managedConfigPath(), "utf8");
  • 读取本地文件
    lib/index.js:1478
    const content = readFileSync(managedConfigPath(), "utf8");
  • 写入本地文件
    lib/index.js:1527
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    lib/index.js:1570
    mkdirSync(destDir, { recursive: true });
  • 读取本地文件
    lib/index.js:1572
    const tarBin = bsdtar !== "" && existsSync(bsdtar) ? bsdtar : "tar";
  • 执行外部命令来自配置/变量
    lib/index.js:1574
    const child = spawn(tarBin, [
  • 删除本地文件
    lib/index.js:1624
    rmSync(path, {
  • 写入本地文件
    lib/index.js:1736
    mkdirSync(dirname(path), { recursive: true });
  • 发起网络请求
    lib/index.js:3422
    const list = await deps.gateway.fetch("/v0/management/auth-files");
  • 发起网络请求
    lib/index.js:3485
    const data = await deps.gateway.fetch(`/v0/management/auth-files/models?name=${encodeURIComponent(String(file.name))}`, { timeoutMs: 6e4 });
  • 发起网络请求
    lib/index.js:3957
    const fetched = await deps.gateway.fetch("/v1/models", {
  • 执行外部命令来自配置/变量
    lib/index.js:5736
    const child = spawn(exe, args, {
  • 发起网络请求
    lib/index.js:5904
    async fetch(path, init) {
  • 发起网络请求
    lib/index.js:6327
    deps.gateway.fetch(accountsPath),
  • 发起网络请求
    lib/client.js:493
    const response = await fetch(path, {
扫描于 2026/10/31(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-ui-plugin-manager@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-credentials@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 管理账号余额
  • 账号签到与切换
  • 自动注册对话模型
展开完整介绍(97 字)↓

DeepSeek Harness 插件:在 DSH 里管理 CLIProxyAPI 的账号(余额 / 签到 / 切换账号),自动注册四个渠道的对话模型,CPA 随 DSH 启停 —— 装完即用。

v0.20.02026-10-27
· 新功能 · 「设为唯一」不再「一启用就消失」。 以前只要某个号是启用状态,它卡片上就没有这个按钮 —— 于是同渠道开两个以上的号时, 已经启用的那几张卡一个入口都没有,想收敛到其中某一个,只能先把别的号一个个手动关掉。 现在的规则按这个渠道里有几个号启用来定: | 启用的号 | 哪些卡上有「设为唯一」 | | -------- | ---------------------------------------------------------------------- | | 1 个 | 只有禁用的那些卡(那个唯一的号没有 —— 它自己已经是「唯一」了) | | 0 个 | 全部(收敛的目标还没定,每张卡都是入口) | | 多个 | 全部,包括已启用的那几个(「就它,别的关掉」正是最常用的一次点击) | 四个渠道通用。 · token 数量过百万自动缩写。 ZCode 这类渠道的额度动辄几亿,整串千分位读不出量级。现在到百万级换一档: 508,000,000 tokens → 508M tokens、5,080,000,000 tokens → 5,080M tokens。 - 只上 M 这一档,不会写成 5.08B —— 同屏两个档位反而更难比大小; - 一百万以下照旧是千分位(999,999 tokens);0 仍然不带单位,缺失仍然是 —; - 卡片两格、顶部汇总三格、额度包周期余量、对话界面模型选择器左侧的读数一起生效 (四处本来就共用同一个格式化函数,所以「同一屏两种写法」在结构上不会出现); - 百万档保留最多两位小数(1,234,567 → 1.23M):纯取整会把它说成 1M, 少报 23%,缩写的目的是「一眼比大小」而不是把数量级之外的信息也扔掉。 · 侧栏入口收进「更多」菜单,不再占栏上那一行。 打开面板底部的「侧栏入口」开关后,入口现在落在侧栏的「更多」菜单里(宿主官方给 低频入口留的折叠位),那一行带本插件的图标,点了直接进面板。 - 只回答「要不要入口」,不回答「放哪」:栏上是宿主与所有插件共用的一列, 插件默认不占;开关关着(默认)时面板只从「插件」页进; - 旧宿主有兜底:「更多」这个位置是宿主 0.2.1-rc.3 才声明的, 更老的宿主上等 2 秒仍没有这个位置就退回栏上那一行 —— 是「看得见的降级」, 而不是「开关明明开着、侧栏里什么都没有」; - 从上一版升级上来、开关本来开着的:入口会自动换到「更多」里,不用重新开一次。 · 换渠道插件时,手放的补丁文件不会再被静默冲掉。 渠道插件的「更新」是「清空 plugins/ 再解压」,此前直接压进 plugins/ 的手放 dll 会在下一次更新时无声消失。现在托管 CPA 目录下有一个 overrides/: - 把临时补丁(上游还没修、或修了没发版)放进 overrides/,每次更新解压完会自动叠回去; - 目录即清单,里面有什么文件就是当前生效着哪些补丁,不用登记; - 退役 = 删掉那里的文件 + 点一次「更新」; - 目录本身由启动时预建 —— 与其它「改托管配置」的动作一样,只在 CPA 未运行时进行。 · 修复 · 摘了思考档位的模型不再「一开口就整轮报错」。 选了这类模型(例如 zcode/glm-5.3-flash)发第一条消息就失败,报 UNSUPPORTED_REASONING_EFFORT「model does not support reasoning effort high」—— 而界面上根本没有 Effort 这一行、你也没选过 high。根因是插件在路由级 声明了一个默认档位,该字段对整条路由的每个模型都生效,而档位能力是逐模型的: 被摘掉档位的模型只认 off,请求时拿不到界面值就退回那个默认值,于是每次请求都炸, 而界面无入口可改。现在档位一律逐模型给。 - 代价:档位菜单里多回一行 Default。它是对的选择 —— 档位按模型和版本一直在变, 硬编猜不准,Default 本来就是「不发参数、由上游决定」的兜底。 · 删除按钮现在看得出是「危险动作」。 以前它是无边框文字,混在「签到 / 任务 / 设为唯一」那排有框的按钮里不像按钮, 而它恰恰是这一排里唯一不可逆的。 - 卡片上的「删除」与确认框的「确认删除」都换成与兄弟逐字相同的黑框 + 红字 (红只在文字上,框、宽度、右端对齐、亮暗主题全部跟随兄弟); - 确认框正文一并收短:删的是什么、后果(要重新授权一次)、以及替代方案 (只想让它不参与调度的话用卡片上的开关禁用即可),三件事一件没少,中英都压到一行内。 · 工具栏顺序
v0.19.02026-10-24
· 新功能 · 账号被判死时,面板会说,并给你一个按钮。 上游有时会把凭据判死而不是封号:token 的有效期还有几周、refreshToken 也没过期, 但服务端已经把那个会话列进黑名单(WorkBuddy 侧的错误码是 12153)。 这种号在面板上和正常的号长得一模一样 —— status 仍是 active、disabled 是 false —— 唯一的不同只在 auth-files 的 note 里。于是你能看到的线索只有 「这号怎么不出余额」,而该做的事(重新授权一次)界面上一个字都没提。 - 卡片上出现琥珀色「需重新登录」标签,旁边是「重新登录」按钮; - 点它走的是与「添加账号」同一个登录会话 —— 协议上重登旧号与加新号是同一件事, 落盘按 uid 覆盖,不会多出一个号;但弹窗标题会写「重新登录」而不是「添加账号」; - 判据只认上游那句文案(session dead / re-login required / 12153), 认不出就不说话:误报会让你去换掉一份还能用的凭据; - 三条一起跟着受益:签到、跑任务、模型调用在这个号上本来就全都会失败。 · 可以删掉没用的账号了。 CPA 本来就有 DELETE /v0/management/auth-files,只是官方管理界面没做出来。 - 卡片按钮行末尾多一个「删除」(弱化样式、位置固定 —— 这一排里只有它不可逆); - 点它弹确认框,标题带账号名,正文说清三件事:删的是什么、后果(要重新授权一次)、 以及替代方案(只想让它不参与调度的话用卡片上的开关禁用即可); - 删完会回读确认文件真的没了才算成功 —— 200 只说明请求被接受, 照它报成功的话界面会抹掉那张卡,下次打开号又回来了、而且一直在参与调度; - 同时清掉本地记忆里那个号的启用状态,免得以后用同一个 uid 重登时 带着上一次的开关状态回来。 · 修复 · 无。这一版只有上面两项新能力。 · 升级 dsh plugin --profile add dsh-cpa-switch 装完重启 DSH —— 这次新增了一条宿主路由(/api/v1/cpa/account-remove), 宿主半端要重新加载;浏览器半端的改动刷新页面即可。 无配置迁移:账号状态与偏好文件都不动。 · 复验 · 有被判死的号时:卡片上有琥珀色「需重新登录」+ 一个主按钮;正常的号没有任何标签; · 点「重新登录」→ 弹窗标题是「重新登录 · WorkBuddy」,走完授权后那个号恢复正常; · 点「删除」→ 确认框标题带账号名;取消 → 什么都不发生; · 确认删除 → 那张卡消失;~/.cli-proxy-api/ 里对应的 -.json 真的没了; · 删除后再打开面板:不会又冒出来(回读确认过); · 英文界面:Sign in again / Delete / Delete the account "…"?。 · 版本号说明 取 minor:两项使用者可观察到的新能力(一个状态标签 + 一个按钮、一个新动作 + 一条新路由)。 按发布手册的口径,新增能力走 minor。 正文手写的原因:这次改动直接推到 main,而 Release Drafter 草稿只看得见「合并进 main 的 PR」—— 草稿此刻是空的(- (还没有已合并的改动))。按手册那条口径,直推成批改动的版本必须以本文件为准。 · 「需重新登录」的判据与三条取舍:src/relogin.ts · 删除域的五步与四个静默坏法:src/ops/remove.ts
v0.18.12026-10-20
· 修复 · 侧栏入口默认不再显示。 0.18.0 让它默认开:装上插件,左侧栏立刻多一行。侧栏是全宿主共用的一列 (插件 / 自动任务 / 用量统计 / SSH),插件默认占位是在替用户决定它长什么样。 - 现在默认关:装完侧栏不动,面板从「插件」页进 —— 那条路一直都在; - 想要常驻入口的人:面板底部按一下「侧栏入口」,之后跨重启保持; - 读不到偏好也按关(与默认值同向):一次读失败不会凭空给侧栏加一行, 而文件里明明写着关; - 面板底部那个开关在「还没读到」时按关画(仍可点)—— 读失败不该让它变成点不动。 · 产物断言里那条「关得掉」以前是空的。 假 ctx 的 slots.inject 返回 undefined,组件侧兜成空函数,于是「关掉会摘掉那一行」 在断言里永远成立。现在它真的返回 disposer,并新增一档「宿主说关 ⇒ 那一行真被摘掉」, 同时钉住 main(面板整页)不受这个开关影响。 · 升级 dsh plugin --profile add dsh-cpa-switch 装完重启 DSH。无配置迁移,但有一条要预期: · 从 0.18.0 升级上来、没按过那个开关的用户:侧栏那一行会消失(文件不存在 ⇒ 新默认)。 按一下就回来。 · 已经打开过开关的用户:文件里是「开」,升级后仍然是开 —— 你的选择不会被冲掉。 · 复验 · 装好不点任何开关:侧栏没有本插件那一行;面板从「插件」页进; · 面板底部按「侧栏入口」→ 侧栏那一行出现;再关掉 → 立刻消失; · 关掉后重启 DSH:仍然关着;打开后重启:仍然开着。 · 版本号说明 取 patch:这是把上一版判错的默认值改回来,没有新增能力。判据与取舍见 决策记录。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-cpa-switch 在 DSH 里管好你的 AI 渠道账号余额、签到、任务、切号,不用离开 DSH 简体中文 · English 看余额、签到、跑任务、切账号 —— 在 DSH 里管理 CLIProxyAPI(CPA)的账号,不用再开它的网页控制台。 装完插件即可用:CPA 本体、渠道插件、配置与密钥都由插件自动备好。 [!NOTE] 密钥不出宿主:面板里的所有操作都由插件代劳,管理密钥只保存在宿主侧,网页拿不到。 它做什么 打开 DSH 的 插件 → CPA 切换器,或点左侧栏的 CPA 切换器(与「插件 / 自动任务 / 用量统计 / SSH」并列的那一行),四个渠道各一个标签: - 看账号余额:可用 / 已用 / 额度池 / 套餐包数;token 与积分分开显示,不混加。
展开完整文档(README 剩余 1 节)
dsh-cpa-switch

在 DSH 里管好你的 AI 渠道账号余额、签到、任务、切号,不用离开 DSH

简体中文 · English

看余额、签到、跑任务、切账号 —— 在 DSH 里管理 CLIProxyAPI(CPA)的账号,不用再开它的网页控制台。

装完插件即可用:CPA 本体、渠道插件、配置与密钥都由插件自动备好。

[!NOTE]
密钥不出宿主:面板里的所有操作都由插件代劳,管理密钥只保存在宿主侧,网页拿不到。

它做什么

打开 DSH 的 插件 → CPA 切换器,或点左侧栏的 CPA 切换器(与「插件 / 自动任务 / 用量统计 / SSH」并列的那一行),四个渠道各一个标签:

- 看账号余额:可用 / 已用 / 额度池 / 套餐包数;token 与积分分开显示,不混加。
额度数字到百万级自动缩写(508M tokens;只上一档 M,不改写成 B)
- 额度包周期提醒:上游明确给出结束日期的额度包,在周期结束前 7 天可展开查看账号、包名、余量和结束时间;周期结束不等于未用额度一定失效
- 一键签到 / 一键任务:整个渠道一次点完;每个账号也可以单独操作
- 启用 / 禁用账号:每个账号一个开关;「只用这一个」一步把同渠道其余账号全部禁用
- 添加账号:每个渠道列表末尾的「+ 添加账号」,在浏览器里完成 OAuth 登录即可
- 记住你的选择:重启 DSH 后,在用的仍是你上次选的号;运行期间被别处改回去(渠道插件会按额度自动重新启用账号)时,面板会照你的选择恢复并提示一句——期间开关不会反复跳回「全开」再弹回来
- 自动签到:按渠道开关;DSH 没开而漏掉的签到,插件启动时补一次
- 进程托管:DSH 开则 CPA 起(已在跑就复用),DSH 关则一并停止
- 起不来时说清为什么:端口被别的 CPA 占用、配置代际不符、配置加载失败各自点明;端口被外部实例占着时不再假装「运行中」
- 对话模型自动注册:装完插件、加完账号,四个渠道的模型自动出现在 DSH 的模型选择器里
- 只让常用的模型出现在选择器里:面板工具栏上有个「模型」按钮,点开取消勾选某个模型并保存,它就从对话界面的下拉里消失(面板里照旧列出全部,随时可以勾回来);不勾只是不在下拉里,模型本身照常能调通
- 侧栏入口默认不显示:面板最底部有一个「侧栏入口」开关(默认关)。打开后入口在 侧栏的「更多」菜单里(不占栏上那一行);关掉(默认)时面板只从插件页进 ——侧栏是宿主和大家共用的地方,插件不默认占位

支持四个渠道

| 渠道 | 账号数 | 余额单位 | 签到 | 任务 |
| 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-switch

GUI 的插件管理器里填包名 dsh-cpa-switch 等价。

从本地目录安装(开发用):

plugin_manager action: install_bundle
target: <本目录绝对路径>

从本仓库源码安装:

cd <本仓库目录>bash
pnpm install
pnpm build
dsh plugin --profile web add .

插件必须装进所选配置档的 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)—— 一眼看出请求会走谁
- 这个服务商在 DSH 里显示为 CPA Switch —— 你在模型选择器里看到的就是它
- 同一个模型被多个渠道供给时,每个渠道各出一条 —— 选了哪个渠道,就只用那个渠道的号,不会跨渠道轮询消耗你的其它号
- 只列能用的:已被禁用、已报错或当前不可用的账号,它的模型不会出现 —— 选择器里不会有「点了才发现调不通」的条目
- 只列这四个渠道:CPA 上可能还装着本插件不管理的渠道,它们的模型不出现;插件不认的渠道不会有管理入口,与其给你一个选不上的名字,不如不列
- 启动时不会先给一份残缺的清单:重启 DSH 后如果第一次读到的目录还不完整(CPA 刚起、账号还在分批加载),插件会继续用上一次的完整清单,并在几秒内自动重读补齐 —— 不会出现「只剩一两条模型」或「只剩一个渠道」的中间态

加了新账号、删了账号,模型清单自动跟着变。机制与设计见架构说明。

思考档位

模型选择器里每个模型可以切思考档位 —— 两个选项:

- 关:不让模型输出思考过程,直接给答案
- 开(默认):模型先想再答,思考过程在对话里看得见

默认打开(reasoningEfforts: true)。想整体关掉就去插件设置里关这个开关 —— 关掉后 Effort 那一行会消失,回到不带档位的老行为。

⚠️ 只给两档是有意的,不是没做完。 实测上游对「低/中/高/最大」这类中间刻度不按刻度办事(同一档位内的波动比档位之间的差还大),给了就是在制造错误预期。所以只暴露两个语义确定的值:关与开。理由与实测数据见决策记录。

⚠️ 「关」发出去的那个词按渠道自动适配(zcode 只认 none、不认 off),所以四个渠道上选「关」都不会因为用词被上游拒。

⚠️ 如果上游某个时刻拒绝档位值(整轮对话报错),把上面那个开关关掉即可恢复。

菜单里为什么有一行 Default:它是 DSH 在「路由没声明默认档位」时补的,语义就是什么都不发、由上游自己决定。档位这事各模型差别很大、上游还常改,所以插件不钉默认值 —— Default 就是那个兜底,另外两行是插件给的两档。曾经钉过(high)以去掉这一行,但那会把摘掉档位的模型整轮打崩,已撤。原理与取舍见决策记录。

已知限制

- 仅 Windows:CPA 目前以 Windows 可执行文件 + DLL 插件形式提供。
- 下载要能访问 GitHub Release:直连不通时需要代理。
- 被限流的号界面看不出:面板显示"启用"不代表"现在能用",只有实际对话报错才发现 —— 详见架构说明的防错清单。

文档维护者文档地图见 AGENTS.md。常用入口:

| 想看什么 | 去哪 |
| 为什么这样设计(不变决策、契约边界、防错清单) | docs/ARCHITECTURE.md |
| 宿主半边各模块、内部 HTTP 路由表 | src/README.md |
| 浏览器半边 | src/client/README.md |
| 环境准备 | src/setup/README.md |
| 测试覆盖与运行 | tests/README.md |
| 下一步做什么、当前卡在哪 | docs/PLAN.md |

开发 powershell
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。

本仓的约定写在 AGENTS.md:改动要同步文档网络,文档改动后跑一次链接校验(命令见该文件)。

许可

MIT
预览分享卡片长什么样 ↓cslkkl/dsh-cpa-switch
分享 · DeepSeek Harness Hub
cslkkl/dsh-cpa-switch

DeepSeek Harness 插件:在 DSH 里管理 CLIProxyAPI 的账号余额 / 签到 /…

回到顶部