Repository navigation
Releases: cslkkl/dsh-cpa-switch
Release list
v0.19.0
新功能
-
账号被判死时,面板会说,并给你一个按钮。
上游有时会把凭据判死而不是封号: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 <profile> add dsh-cpa-switch
装完重启 DSH —— 这次新增了一条宿主路由(/api/v1/cpa/account-remove),
宿主半端要重新加载;浏览器半端的改动刷新页面即可。
无配置迁移:账号状态与偏好文件都不动。
复验
- 有被判死的号时:卡片上有琥珀色「需重新登录」+ 一个主按钮;正常的号没有任何标签;
- 点「重新登录」→ 弹窗标题是「重新登录 · WorkBuddy」,走完授权后那个号恢复正常;
- 点「删除」→ 确认框标题带账号名;取消 → 什么都不发生;
- 确认删除 → 那张卡消失;
~/.cli-proxy-api/里对应的<渠道>-<uid>.json真的没了; - 删除后再打开面板:不会又冒出来(回读确认过);
- 英文界面:
Sign in again/Delete/Delete the account "…"?。
版本号说明
取 minor:两项使用者可观察到的新能力(一个状态标签 + 一个按钮、一个新动作 + 一条新路由)。
按发布手册的口径,新增能力走 minor。
正文手写的原因:这次改动直接推到 main,而 Release Drafter 草稿只看得见「合并进 main 的 PR」——
草稿此刻是空的(- (还没有已合并的改动))。按手册那条口径,直推成批改动的版本必须以本文件为准。
- 「需重新登录」的判据与三条取舍:src/relogin.ts
- 删除域的五步与四个静默坏法:src/ops/remove.ts
v0.18.1
修复
-
侧栏入口默认不再显示。
0.18.0让它默认开:装上插件,左侧栏立刻多一行。侧栏是全宿主共用的一列
(插件 / 自动任务 / 用量统计 / SSH),插件默认占位是在替用户决定它长什么样。- 现在默认关:装完侧栏不动,面板从「插件」页进 —— 那条路一直都在;
- 想要常驻入口的人:面板底部按一下「侧栏入口」,之后跨重启保持;
- 读不到偏好也按关(与默认值同向):一次读失败不会凭空给侧栏加一行,
而文件里明明写着关; - 面板底部那个开关在「还没读到」时按关画(仍可点)—— 读失败不该让它变成点不动。
-
产物断言里那条「关得掉」以前是空的。
假 ctx 的slots.inject返回undefined,组件侧兜成空函数,于是「关掉会摘掉那一行」
在断言里永远成立。现在它真的返回 disposer,并新增一档「宿主说关 ⇒ 那一行真被摘掉」,
同时钉住main(面板整页)不受这个开关影响。
升级
dsh plugin --profile <profile> add dsh-cpa-switch
装完重启 DSH。无配置迁移,但有一条要预期:
- 从
0.18.0升级上来、没按过那个开关的用户:侧栏那一行会消失(文件不存在 ⇒ 新默认)。
按一下就回来。 - 已经打开过开关的用户:文件里是「开」,升级后仍然是开 —— 你的选择不会被冲掉。
复验
- 装好不点任何开关:侧栏没有本插件那一行;面板从「插件」页进;
- 面板底部按「侧栏入口」→ 侧栏那一行出现;再关掉 → 立刻消失;
- 关掉后重启 DSH:仍然关着;打开后重启:仍然开着。
版本号说明
取 patch:这是把上一版判错的默认值改回来,没有新增能力。判据与取舍见
决策记录。
v0.18.0
新功能
- 侧栏那一行可以关掉了。
面板最底下多了一行「侧栏入口」(默认开)。关掉之后左侧栏那行不再出现,
面板只能从「插件」页打开 —— 想给侧栏腾地方时用。- 关掉是摘除注册,不是不画:留一个空按钮会让人点进去,那是更糟的形态;
- 默认开、坏值也按开:入口没了比多一个入口难查得多 —— 用户看不到某个东西时,
没有任何线索指向一个 JSON 文件; - 开关状态存在
~/.dsh/storages/cpa-panel-prefs.json,与「隐藏模型」同一类(你的意图,
不是插件派生出来的),重启后保持; - 文案:标题只说「是什么」(
侧栏入口/Sidebar entry),说明只说「关掉之后什么样」
(关掉后,面板只能从插件页打开)。
修复
- 开关自己会点不动(本版内修掉,未进过发布包):
inject的返回值被当成 disposer 用,
而它要 dispose 的是整个inject;读写又按result.data.*取值,而宿主是摊平返回的 ——
合起来的症状是开关一直显示「开」、点了回弹。两处都按真实契约改掉,判据钉住
响应体的取值位置(顶层{ok, sidebarEntry})。
升级
dsh plugin --profile <profile> add dsh-cpa-switch
装完重启 DSH —— 这次新增了一条宿主路由(/api/v1/cpa/panel-prefs),
宿主半端要重新加载。无配置迁移:偏好文件不存在时按「开」,与升级前行为一致。
复验
- 面板拉到底:一行分隔线 + 「侧栏入口」开关,默认在手;
- 关掉 → 左侧栏那行消失(不是变灰);点开面板仍能从「插件」页进;
- 再打开 → 侧栏那行回来;
- 关掉后重启 DSH:仍然关着(偏好落盘);
- 英文界面文案是
Sidebar entry/When off, the panel is only reachable from the Plugins page。
版本号说明
取 minor:新增一处使用者可观察到的新能力(侧栏入口的开关 + 一条新路由)。按
发布手册
的口径,新增能力走 minor。
- 决策与替代方案:侧栏入口
- 运行时状态文件归属(
cpa-panel-prefs.json属「意图」类):src/README.md
v0.17.0
新功能
- 左侧栏多了一行「CPA 切换器」,面板可以直接点进去。
以前进面板只有一条路:翻到「插件」页、在那张卡片里展开。现在侧栏
(与「插件 / 自动任务 / 用量统计 / SSH」同一排)多了一行本插件的入口,
点开之后中间列就是同一个面板的整页形态。- 两个入口、一份实现:插件页里那处照旧;侧栏那行渲染的是同一个面板,
只是外面多一层页面外壳(顶部一行「返回」+ 一列定宽内容); - 字形换成线条的:侧栏那排官方图标都是 16 格轮廓,所以这一行用轮廓字形
(弧 = 切号、人物 = 账号,与插件页那枚实心图标同源、不同画法);颜色取
currentColor,选中态与明暗主题自动跟随; - 名字与插件列表对齐:以前侧栏那行写「CPA 面板」、插件列表里叫「CPA 切换器」——
同一件东西两个名字。现在统一成后者(英文 CPA Switch); - 面板里的东西一个没变:账号、余额、签到、模型勾选、渠道插件更新都还在原处。
- 两个入口、一份实现:插件页里那处照旧;侧栏那行渲染的是同一个面板,
修复
- 产物断言里那处「假 ctx」其实不会执行注册(内部测试夹具,不影响已发布的包)。
它的inject(deps, cb)是个空函数,于是包在座位级等待里的注册在断言里一条都不会发生 ——
一条永远不会红的检查。现在改成真的回调,并补上侧栏那一组断言
(两处 id 逐字相同、没占官方 id、返回真调一次)。
升级
dsh plugin --profile <profile> add dsh-cpa-switch
装完重启 DSH(宿主半端零改动,但浏览器半端与文案变了)。无配置迁移 ——
模型选择、账号禁用状态、隐藏的模型清单都不变。
复验
- 侧栏出现一行 CPA 切换器 / CPA Switch,位置在「自动任务」与「用量统计」之间;
- 点它 → 中间列打开整页面板;点顶部「返回」回对话;
- 插件页里那张卡片的入口照旧可用;
- 亮暗两套主题、以及选中态下,那枚线条字形都读得清。
它只有一条路径(selectPanel(null)),产物断言里会被真调一次。
版本号说明
取 minor:新增一处使用者可观察到的新入口(侧栏行 + 中央面板页)。按
发布手册
的口径,新增能力走 minor。
v0.16.1
修复
- fix: 签到不闪骨架、漂移号不再先全亮、provider 行缺失自愈 (#70)
v0.16.0
新功能
-
模型选择框左边多了一个「我还能花多少」的读数。
选模型的那一刻正是余额决定事情的那一刻(选贵的还是便宜的),而面板上的余额
要两跳才看得到。现在对话输入行里、模型选择器的紧左侧是一个小读数:
一个字形 + 一个数字,回答「当前这个渠道还剩多少」。- 只算启用的号(禁用的号不会被调度到);积分渠道是硬币字形,
token 渠道是圆 + T; - 不限额改说「不限」、不写数字:trae 有不限额号时,旁边挂一个合计会被读成
「你还有这么多」,而上游说的是「这份没有上限」; ⚠️ 读不到 / 还没加载 / 一个号都没凑出来时它是空着的,绝不画0——
编造的 0 会被读成「余额用光了」,比一片空白更糟;- 不是本插件的模型的会话里什么都不显示(别的 provider 旁边挂我们的账本没有意义);
- 数据走面板那份读缓存,零新增请求;悬停可以看到「哪个渠道、什么单位的合计」。
- 只算启用的号(禁用的号不会被调度到);积分渠道是硬币字形,
-
模型下拉里不再每一行都把渠道名念一遍。
选择器早就按渠道分组了,组标题就是渠道(CPA Switch · WorkBuddy),而行里
又写一遍WorkBuddy · glm-5.3—— 同一句话说两遍。- 现在组内每行只有模型名(
glm-5.3),渠道只由组标题承载; - 收起状态的按钮与菜单根行仍带渠道名(
WorkBuddy · glm-5.3)——
那两处不在分组里,不写就没人知道是谁家的模型; - 面板「模型」勾选弹窗里的行同步改成模型名,与选择器逐字一致。
- 现在组内每行只有模型名(
修复
-
你禁用的号不再被上游按额度悄悄全部打开。 渠道插件自带的额度生命周期
(lifecycle_auto,默认开)会在每天 09:00 / 21:00 的定时任务之后,把
「CN 号 + 被禁用 + 额度未耗尽」的号写回启用 —— 它分不清这个禁用是你点的、
还是它自己因额度耗尽禁的。- 症状:「我没动它,号全亮起来了」,而「设为唯一」按钮整排消失,
零报错; - 现在面板读到漂移就按你的选择禁回去,并说一句「恢复你禁用的 N 个账号」;
⚠️ 只往一个方向主张:绝不把上游因额度耗尽禁掉的号启用回来
(否则请求会落到一个耗尽的号上)。面板没打开 / 没读到那个渠道时不动手。
- 症状:「我没动它,号全亮起来了」,而「设为唯一」按钮整排消失,
-
「模型」勾选弹窗里几十行长得一模一样。 每行原先交出去的是渠道名,
三四十行全是同一个「WorkBuddy」,用户分不清在勾哪个模型。
现在每行是模型名,与选择器里那一行逐字相同。
内部改动
- 发布流补齐四条底线(发布噪音守卫、发布态不变量、草稿退役、回落改用
--generate-notes),并逐条钉成判据 —— 这些都是「坏了也不报错」的地方。 - CI 增加收口 job(分支保护只盯
CI Success这一个名字),格式步骤与本地
pnpm check同源,另加 GitHub Actions 的版本漂移巡逻。 - 包清单声明补齐:
author/homepage/bugs/main补上(只看main
的老工具链此前拿到的是一个没有入口的包),发布产物不再带 sourcemap。 - 模型名与渠道身份的分工写进决策记录:
name是纯展示载荷,路由身份从头到尾是
providerId/modelId(去掉前缀因此不牵动任何路由行为)。
升级
dsh plugin --profile <profile> add dsh-cpa-switch
装完重启 DSH(这次改的是宿主半端与浏览器半端两边)。无配置迁移 ——
模型选择、账号禁用状态、隐藏的模型清单都不变。
复验
-
余额读数:模型选择框左侧出现一个字形 + 数字;切到别的渠道的模型时
字形 / 数字跟着换;trae 出现「不限」而不是一个数。 -
下拉行:组内每行只有模型名;收起状态的按钮、菜单根行仍带渠道名。
-
勾选弹窗:每行是模型名(不再是清一色「WorkBuddy」)。
-
禁用意图:在面板禁用某个号之后,若上游把它重新打开,面板会再禁回去并提示一句;
因额度耗尽被上游禁掉的号不会被启用回来。 -
决策记录:双座位(模型名分层 + 余额读数) ·
模型名根修 ·
禁用意图单向主张
版本号说明
取 minor:一处使用者可观察到的新能力(选择器左侧的渠道余额读数)加若干修缺陷
与行为变化(下拉行改裸名)。按发布手册
的口径,新增能力与行为变化走 minor。
/model 弹窗与悬停文案):宿主在渲染槽位之前就算好了
触发位的 title / aria-label,且 /model 弹窗的搜索只匹配行标签、不匹配分组标题 ——
所以悬停与读屏只拿到裸名、打「workbuddy」搜不到该渠道的模型
(看得到、搜不到)。这是去掉前缀换来「不再重复」的已知取舍,不是缺陷。
main 的
产物改动(包清单声明、CI 收口 job),而 Release Drafter 看不见直推的提交 ——
照默认走会漏掉 npm 页面与包内容的那几条。
v0.15.1
v0.15.0
新功能
- 只让常用的模型出现在模型选择器里 —— 面板工具栏上多了个「模型」按钮。
选择器里挤着四个渠道的全部模型(本机约百行),而常用的就那么几个。
现在:点工具栏的「模型」,弹出当前渠道的模型清单,取消勾选的就不出现在
DSH 对话界面的模型下拉里。- 勾选的地方在面板、生效的地方在选择器 —— 面板本身照旧列出全部模型,
否则你没法把取消掉的再勾回来; ⚠️ 不勾 ≠ 删掉、也不等于不能用:模型在 CPA 那边照常在、接口照常能调,
只是不在下拉里出现。这条是弹窗里明写的,也是本功能唯一容易误解的地方;- 保存后立即生效(不需要等下一次目录刷新)。
- 勾选的地方在面板、生效的地方在选择器 —— 面板本身照旧列出全部模型,
修复
- 勾选保存成功却不生效(真机实踩)—— 目录护栏把「用户藏掉的行」当成
「目录读残」原样拦回:面板说保存成功、状态文件也写对了,但选择器里一个都没少。
护栏现在按(渠道, 裸名)逐行豁免被隐藏的模型,而不是整体放行。 - 勾选清单与选择器不是同一批模型(真机实踩)—— 清单原先读渠道目录
(glm-5.2),而推给宿主的行叫Trae/trae/glm-5.2,两边一个键都对不上:
勾了 18 个,选择器里 9 行一个没少,而所有请求都是 200。清单改用
「不隐藏的话会被推送的行」,与推送侧同一个键。 - 同一个模型在 trae 侧有三个条目 —— 上游给同一个模型注册了三种 id 形态
(裸名 / 我们写的别名 / 上游又给我们别名套一层前缀),27 条 id 其实只有 16 个模型。
现在反复剥前缀得到裸名,并且推给宿主的清单同一(渠道, 裸名)只留一行。 - 面板上的「模型」入口读错响应字段 —— 传输层把响应体摊平在结果对象上,
而类型带索引签名,于是「取result.data」能编译通过、却永远是空:
表现是那块界面根本不存在(而所有请求都是 200、零报错零日志)。
现在入口永远立着,读不到 / 读失败 / 还没有都在界面里说清楚。 - 图标在真实显示尺寸下读不清(30px) —— 宿主行内图标只画 30px、卡片 36px,
而旧图是细线灰环 + 描边人物:在那个尺寸下人物散成毛边、环糊成一段「C」,
灰色还被读成「已禁用」。换成实心圆盘 + 反白人物 + 反白环绕箭头,与同一排里
官方插件的实心彩色图标同一族。
内部改动
- 模型名的归一(剥渠道别名前缀)收成一处实现,宿主写盘与路由侧判定共用,
避免两边口径漂开(漂开的症状是「用户藏过的模型某天又自己冒出来」,且没有报错)。 - 撤回了一批做错对象的改动:当初按「号」做隐藏,而维护者要的是按模型 ——
那批已整体撤回,面板与文档同步回滚,没有留下半截状态。
升级
dsh plugin --profile <profile> add dsh-cpa-switch
装完重启 DSH(改的是宿主半端)。无配置迁移:模型可见性默认「什么都不藏」,
不勾选就等于现在的行为;新的状态文件是 ~/.dsh/storages/cpa-panel-hidden-models.json。
复验
-
模型入口:面板每个渠道页签的工具栏上有一个「模型」按钮(与
「刷新 / 全部签到 / 全部任务」同排);点开列出该渠道的模型,弹窗里说清
「不勾 ≠ 删掉」。 -
勾选生效:取消勾选某个模型 → 保存 → DSH 对话界面的模型下拉里它消失,
而面板里它照旧在;勾回来 → 保存 → 下拉里它回来。 -
互不影响:同渠道其它模型不受影响;同名模型在别的渠道不受影响。
-
图标:插件页行内 30px、卡片 36px 磁贴里是一块读得清的实心图形,
亮暗两张主题都看得清。
版本号说明
取 minor:一处使用者可观察到的新能力(勾选哪些模型进选择器)加若干修缺陷。
按发布手册
的口径,新增能力走 minor。
main 的,
Release Drafter 看不见直推的提交(它只认合并进来的 PR),照默认走会得到一份
只列文档与 CI 的正文。
v0.14.0
新功能
-
模型选择器按渠道分组了 —— 不再是一层平铺的近百个模型。
选择器是按 provider 分组的,而四个渠道(WorkBuddy / Trae / Qoder / ZCode)的模型
此前全挂在同一个分组下,本机实测 96 行平铺成一层,找模型要一直翻。
现在一个渠道一个分组,组名是CPA Switch · <渠道名>,顺序与面板页签一致。⚠️ 升级后每个会话要重选一次模型(一次性,之后不再受影响)。
选择器的选项身份是分组/模型,分组变了,你之前选中的那个就找不到了。
打开旧会话时会看到输入框停用,在对应渠道的分组里重选一次即可。
这是这次分组必须付的代价,已确认接受;分组名从此是稳定契约。
-
思考档位按三重复测重做:摘掉 11 个「假旋钮」,对调 4 个「反方向」的。
界面上「关 / 开」这一行本来就不总是可信,重测 97 个模型后处置如下:- 关不掉的(选「关」照样思考)与两档都不思考的 → 摘掉档位列
(11 个:hy4-preview-f、step-5-preview、Trae的Doubao-Seed-2.1-Pro/Turbo、
glm-5.2、glm-5.3-flash、kimi-k2.6、step-5-preview,以及zcode的
glm-5.3/glm-5.3-flash)—— 留着只是给你一个按不动或没意义的按钮; - 方向相反的(选「开」反而想得更少)→ 把两个档位的值对调
(4 个:qoder 的dfmodel/gfmodel/gm51model/gmodel),
让「关 = 想得少、开 = 想得多」恢复正确方向。
⚠️ 对调只修方向:这些模型「关」那一档仍会思考 —— 上游没给一个真能关掉思考的词; - 测不准的 55 个一律不动:两档的字数区间重叠就判「测不准」。
上一版是按单次测量分类的,而重复测显示同一批模型有一半翻了类
(wb/glm-5.3585/38 → 12/12、wb/glm-5.1真开关 → 测不准)——
在测不准的数据上改,等于把上一版的错重犯一遍。
- 关不掉的(选「关」照样思考)与两档都不思考的 → 摘掉档位列
修复
- 「未签到」标签改成灰底 —— 原来是空心描边,看起来像括号,与绿底「已签到」
并排时会被读成标点而不是状态。「今天没签」可能是有意不签,所以用中性的灰
(不是警告色,也不是失败色)。 - 没有签到状态的渠道(Qoder / ZCode)整行不显示任何标签 —— 那是「不知道」,
不是「没签」,此前就是这个行为,本版把它写成了正式判据。
内部改动
- 模型 id 的解析收成一处:渠道那侧不再抄一份目录的解析逻辑。
- 模型窗口校准表:窗口允许缺省 —— 档位标记与窗口是两条独立的证据轴,
Trae 平台模型的窗口按渠道口径仍不填(走宿主兜底),不再为了挂档位标记
去凭空补一个窗口值。
升级
dsh plugin --profile <profile> add dsh-cpa-switch
装完重启 DSH(改的是宿主半端)。无配置迁移;唯一的破坏性影响是上面那条
一次性重选模型。
复验
-
分组:模型选择器里应出现四个分组(
CPA Switch · WorkBuddy / Trae / Qoder / ZCode),
不再是单个分组下近百行。 -
重选:旧会话打开时输入框停用 → 在对应渠道分组里重选一次模型 → 恢复可用。
-
档位:
workbuddy/step-5-preview、zcode/glm-5.3这类模型不应有 Effort 行,
同渠道其它模型照旧;qoder/gmodel选「开」应比选「关」想得更多。 -
标签:没签到的号上是一个灰底「未签到」标签,不再是空心描边。
-
决策记录:模型选择器按渠道分组 ·
思考档位重新分类 ·
三重复测数据
版本号说明
取 minor:两处使用者可观察到的变化(选择器分组、档位摘除/对调)加一处修缺陷
(未签到标签)。按发布手册
的口径,行为变化走 minor。
需要在新的四个分组里各重选一次(旧的 cpa 分组会被清掉,不会留下幽灵分组)。
v0.13.0
新功能
-
/v1/*现在要鉴权 —— 同一台机器上的其它程序不能再白拿你的账号额度。
托管配置此前没有access.api-keys段,/v1不校验任何密钥:端口虽然只监听
127.0.0.1,但同机的任何程序都能不带密钥调/v1/chat/completions,
直接消耗你的账号额度(2026-10-04 实测不带鉴权返回 200)。
装上这一版:新机器生成的配置直接带调用密钥;已经跑过一次的老机器在 DSH 启动、
CPA 未运行时自动补上这一段。- 只补「缺失」:配置里已有
api-keys是你的密钥清单,一个字节都不动; - 真机实测(重启后):不带密钥
GET /v1/models→ 401,带密钥 → 200;
重启后 46 次对话请求全部 200 —— 模型照常能发、面板读写照常,
因为两条路各用各的钥匙(调用密钥走/v1,管理密钥走管理接口)。 ⚠️ 改的是宿主半端,装完要重启 DSH;补写只在 CPA 未运行时做
(它运行中持有该配置文件、保存时会回写),所以 CPA 常驻不重启的机器
要等下一次停机窗口才生效。
- 只补「缺失」:配置里已有
-
面板上能看见渠道插件的版本,也能一键换新版。
以前判断「渠道插件装好了没」只看磁盘上有没有 dll —— 有就算装好,于是
「一键准备环境」点多少次都不会换版本:本机实测停在 10-04 的构建(qoder 约 0.8.45),
而上游已是 v0.8.66,且你正踩的那个「developer角色被上游拒」正是 0.8.64 修的。
现在面板上多一行「渠道插件v0.8.45 → v0.8.66」,要换得你自己点。- 不自动升级:上游随时可能改行为,静默升级等于把上游的风险直接灌给你;
- 换之前先停 CPA(Windows 上被加载的 dll 改不了名;外部实例一律拒绝、只停自己启的),
留旧件备份、失败自动还原上一版,换完不自动重启; - 已装版本记在
~/.dsh/storages/cpa-panel-install.json(不记就无从判断有没有新版);
判「有没有新版」用 tag 相等,不解析版本号;没记过 tag 时什么都不说,不编。
修复
- 开着代理时,插件的下载与查版本全部失效(症状是
HTTP 400,而同一个代理用
curl却是 200,看着完全像网络问题)。根因是代理路径下 TLS 握手根本没发生,
明文请求直接打到了代理上。现在代理路径会真正建起加密连接。 - 重载一次插件就整个挂不上:插件没把 locale 字典的注销函数交还宿主,第二次注册
直接抛already has locale,界面上只显示「未能完成同步」。 - 面板上「渠道插件」那一行不再与提示块撞按钮名。
内部改动
- 就位探测与配置代际(「对端要哪一代」对不上时提前提示,而不是等 CPA 启动失败)
补成正式判据 —— 这条分支此前没有测试,只有真机脚本验过。 SetupSession增一个「调用密钥现读」的口子:一键准备写配置时把access.api-keys
一起落盘。
升级
dsh plugin --profile <profile> add dsh-cpa-switch
装完重启 DSH:本批改的多数是宿主半端。无配置迁移、无破坏性改动 ——
托管配置里的 access.api-keys 段会在首次启动时自动补上(CPA 未运行时)。
复验
-
鉴权:重启 DSH 后看托管配置里出现
access:/api-keys:段;不带密钥调
http://127.0.0.1:8317/v1/models应 401,带密钥应 200;随后发一条模型
消息应照常成功,面板打开与写操作照常。 -
渠道插件版本:面板上应出现版本行;点「更新」后按提示等它下载(约 17 MB),
日志里应看到「停 CPA → 下载 → 校验 → 替换」的顺序。 -
代理:开着代理时查版本与下载应正常(不再 400)。
-
在 CPA 未运行的机器上,终端应出现
托管配置缺 access.api-keys,已写入 CPA_API_KEY(/v1 从此要求鉴权);
已自己配过api-keys的机器不应出现它(判据是「一字节不动」)。 -
决策记录:
/v1鉴权收口 ·
代理路径的 TLS 握手 ·
渠道插件更新路径
版本号说明
取 minor:一个安全默认的收口(/v1 从不校验到校验,使用者可观察到:不带密钥
调用被拒)加一个新能力(渠道插件可查版本、可一键更新)。按
发布手册
的口径,行为变化 / 新能力走 minor。
/v1 从此要求密钥。如果你有插件之外的程序在直连
127.0.0.1:8317 调 /v1/*(自己的脚本、别的客户端),它们会开始收到 401 ——
把这些调用方加上托管配置里那个 access.api-keys 值即可。