dsh-workbuddy-xdpool 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +77 -0
- package/README.en.md +14 -3
- package/README.md +14 -3
- package/assets/model-picker.png +0 -0
- package/assets/region-tabs.png +0 -0
- package/assets/settings-card.png +0 -0
- package/lib/bin.js +1483 -1294
- package/lib/client.js +719 -219
- package/lib/index.d.ts +767 -629
- package/lib/index.js +2289 -1920
- package/package.json +109 -109
- package/screenshots.json +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,81 @@
|
|
|
4
4
|
|
|
5
5
|
版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
|
|
6
6
|
|
|
7
|
+
## 0.4.0 (2026-09-16)
|
|
8
|
+
|
|
9
|
+
本次更新来自两条用户反馈与一次上游兼容性对齐:账号现在可以**按顺序逐个用尽**(不再平均分摊),积分包**逐条显示具体到期时刻**,并修掉了一处会让所有接口返回 401 的凭据选择缺陷。
|
|
10
|
+
|
|
11
|
+
### 新增
|
|
12
|
+
|
|
13
|
+
- **账号使用方式可切换(优先 / 轮换)**:卡片状态行下方新增开关,默认**优先模式**。
|
|
14
|
+
|
|
15
|
+
- **优先模式**:始终由同一个账号服务,直到它被限流才顺延到下一个;冷却结束后它**立刻回到队首**接管 —— 该账号的积分在冷却期间并未被消耗,所以无需从头排队。
|
|
16
|
+
- **轮换模式**:保留原来的平均分摊行为,供希望把额度摊平到各账号的用户选择。
|
|
17
|
+
- 切换**即时生效**并写入插件设置,**对所有账号、所有切换状态通用**,不需要重启宿主。
|
|
18
|
+
- 优先级顺序是确定性的:桌面 App 当前登录的账号 → 上游签发时间较新者 → 存储过期时间较晚者。此前顺序取决于文件名字典序,实际会出现 `0, 2, 1` 这类非预期排列。
|
|
19
|
+
|
|
20
|
+
- **积分包逐条显示到期时刻**:原先只给出「3 天内到期」的合计数,看不到具体时间;现在每个积分包单独标注它的到期时刻(精确到分钟,例如「到期 09/19 15:36」),3 天内到期的以琥珀色高亮。月度周期套餐显示下次刷新时刻(「刷新 10/01 00:00」)。
|
|
21
|
+
|
|
22
|
+
- 之所以精确到分钟而不是只给日期:上游发放一次性礼包的到期时刻是**任意的钟点**,并非「过 0 点即失效」,只显示日期会让人误判。
|
|
23
|
+
|
|
24
|
+
### 布局
|
|
25
|
+
|
|
26
|
+
- **积分包列表改为两行网格**:包名与数量在首行左右分栏,到期时刻在次行跨栏并与包名左对齐。此前到期时刻被挤到第二行且从容器左边缘起排,列表看起来参差不齐。
|
|
27
|
+
|
|
28
|
+
### 修复
|
|
29
|
+
|
|
30
|
+
- **同一账号存在多个凭据文件时会选中已失效的那一个,导致积分 / 签到 / 模型全部返回 401**。此前按**存储的 `expiresAt` 最大**来挑选凭据,但 `expiresAt` 描述的是「签发时有效期有多长」,**不代表上游仍然接受** —— 上游吊销 token 时不会同步改写该字段,于是一个早已失效的备份可以声称比真实可用的文件**更晚过期**,从而被长期选中。
|
|
31
|
+
|
|
32
|
+
- 现改用 **`auth.lastRefreshTime`(上游自己的签发时间)** 作为新鲜度判据,并在解析凭据时读入该字段。排序优先级:① 桌面 App 当前登录的 live 文件 → ② 签发时间较新者 → ③ 存储过期时间(仅作为文档缺少签发时间时的回退,保证比较是全序的)。
|
|
33
|
+
|
|
34
|
+
- **国际版登录域名识别不全**:参考桌面客户端自身的国际域名清单(`workbuddy.ai`、`workbuddy.cc`),并补充 CodeBuddy CLI 使用的 `codebuddy.ai`。此前只识别 `workbuddy.ai`,落在其他拼写上的国际账号会被误判为国内版,token 被发往国内网关而在 openresty 层被拒绝。
|
|
35
|
+
|
|
36
|
+
- **国际网关写死单一域名**:国际版账号按品牌域名区分且**互不通用**(在 `codebuddy.ai` 签发的 token 会被 `workbuddy.ai` 网关拒绝,反之亦然),因此网关地址改为**跟随凭据自身的域**,未识别的域名回落至桌面端网关。chat / billing / referer / 模型目录四处一并生效。
|
|
37
|
+
|
|
38
|
+
- **上游以 HTML 页面拒绝凭据时给出可执行提示**:识别 openresty / APISIX 的鉴权拒绝(401/403 且响应体是 HTML),改为提示「凭据已被上游网关拒绝,通常说明用的是旧登录留下的失效凭据;请重新登录 WorkBuddy 桌面端后在卡片中选择该账号」,不再原样抛出 HTML 片段。非鉴权类的非 JSON 响应保持原有的通用提示。
|
|
39
|
+
|
|
40
|
+
- **部分模型不显示思考档位**:上游部分模型的推理元数据使用**单数形式**(`effort` 而非 `supportedEfforts`),此前该形态会被直接丢弃。现将其规范化为插件已理解的复数形状,并携带声明的档位到 `defaultEffort`。
|
|
41
|
+
|
|
42
|
+
### 测试
|
|
43
|
+
|
|
44
|
+
- 新增 `tests/pool-priority.test.ts`(10 例):优先模式下连续请求命中同一账号、仅在该账号冷却后顺延、冷却结束后回归队首、按模型冷却不影响其他模型;轮换模式的轮转与运行时切换;凭据新鲜度的四类排序(live 优先、签发时间优先、缺失签发时间时回退过期时间、秒/毫秒单位归一化)。
|
|
45
|
+
- 修正 `tests/failover.test.ts` 中依赖轮转顺序的限流桩:改为按**已出现的不同凭据数**计次,不再假设「token 序号即账号位置」,因此与账号排序解耦。
|
|
46
|
+
- 全套 **36 个测试通过**。
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
## 0.3.0 (2026-09-16)
|
|
50
|
+
|
|
51
|
+
本次更新把卡片界面按参考插件的形态重做了一遍,并补齐了国内版 / 国际版的完整分离。
|
|
52
|
+
|
|
53
|
+
### 新增
|
|
54
|
+
|
|
55
|
+
- **国内版 / 国际版 拆成两个独立供应商**:`workbuddy-xdpool`(国内版)与 `workbuddy-xdpool-global`(国际版)分别注册为独立 provider,模型选择器里各占一个分组。两条链路各有独立的回环端点(各自端口与密钥),互不影响;账号按登录域名严格归属各自区域,国内版请求绝不会走国际版账号,反之亦然。
|
|
56
|
+
|
|
57
|
+
- **卡片顶部新增「国内版 / 国际版」切换栏**:两个 tab 固定显示,各自带一个健康状态指示点。未登录的那一侧显示明确的空状态与**该区域的登录步骤**(含国际版客户端名称、可用的登录方式、网络环境要求),而不是一片空白。
|
|
58
|
+
|
|
59
|
+
- **模型管理**:模型列表支持逐项操作 —— **勾选启用 / 停用**、**图片输入**单独开关、**上下文窗口**在「默认上限」与「模型原生上限」之间切换(仅对原生窗口超过默认值的模型显示)。改动为草稿式,需点「保存」生效,另有「放弃修改」。保存后**无需重启宿主**即可在选择器里生效。
|
|
60
|
+
|
|
61
|
+
- 卡片截图新增「国内版 / 国际版切换」一张(中英 README 均已引用)。
|
|
62
|
+
|
|
63
|
+
### 变更
|
|
64
|
+
|
|
65
|
+
- **账号区与积分区重做排版**:账号信息、积分包明细、合计大数字与签到按钮改为分区网格布局,数字更醒目,签到按钮位于合计下方,不再多个区块横向挤在一起。
|
|
66
|
+
- 模型行现在同时展示输出上限与推理档位(上游提供时)。
|
|
67
|
+
|
|
68
|
+
### 修复
|
|
69
|
+
|
|
70
|
+
- **切换 tab 后仍显示另一区域账号**:`refresh` 回调此前在依赖数组为空的情况下闭包引用了当前区域,导致切换后请求的始终是首次的区域。现改为把区域作为参数传入(回调身份稳定),并**按区域分别保存各自最近一次状态** —— 切换 tab 时不再闪空白,隐藏 tab 的状态指示点也持续有效。
|
|
71
|
+
- **国际版域名识别不全**:桌面客户端把 `workbuddy.ai` 与 `workbuddy.cc` 同列为国际版域名,此前只识别前者,登录落在 `.cc` 的账号会被误判为国内版并请求错误网关。现已一并识别。
|
|
72
|
+
- **模型勾选控件不可用(显示为灰色)**:客户端注册时未注入设置作用域,导致卡片判定为只读。现注入 `settingsScope` 并通过它写入模型选择 —— 该选择保存在插件设置中,**对所有账号、所有切换状态通用**,设定一次即可。
|
|
73
|
+
- 保存的模型选择改由宿主的**模型发现接口**下发,使保存结果即时反映到模型选择器,而无需重启。
|
|
74
|
+
|
|
75
|
+
- **两个 provider 一直显示「加载失败」**:注册适配器时构造的 provider profile 漏了 modelErrors 字段。宿主解析每个模型时都会读这个 Map,于是每次解析都抛 `Cannot read properties of undefined`,模型目录把它渲染成「{provider} 加载失败」。现已补上该字段(与参考插件一致),两个区域的模型解析全部恢复正常。
|
|
76
|
+
- **provider 注册后设置页读不到配置作用域**:插件未在顶层 inject 中声明 settings 服务,宿主不会为该插件挂载设置视图,其 provider 行渲染时读取命名空间视图会得到 undefined。现已声明,并改为同步直接调用 ctx.settings.installSection。
|
|
77
|
+
|
|
78
|
+
### 说明
|
|
79
|
+
|
|
80
|
+
- 额度/限流自动切换能力保持不变,并按 (账号, 模型) 粒度冷却:一个模型被限流不影响该账号其它模型;账号令牌失效会自动刷新重试;全部账号耗尽后才向调用方返回 429。
|
|
81
|
+
|
|
7
82
|
## 0.2.0 (2026-09-16)
|
|
8
83
|
|
|
9
84
|
本次更新在既有的多账号自动容错池基础上,补齐了每日签到、国内/国际版双区域适配,并把做签到的多账号体验做成了「一个账号一个按钮」的形态。
|
|
@@ -32,6 +107,8 @@
|
|
|
32
107
|
|
|
33
108
|
### 安装体验
|
|
34
109
|
|
|
110
|
+
- **已发布到 npm**:`dsh-workbuddy-xdpool` 现可从 npm 安装,安装只需约 10 秒、仅拉取插件自身一个包(依赖已全部标记为 optional,见下条)。推荐用 `dsh plugin --profile desktop add dsh-workbuddy-xdpool`。
|
|
111
|
+
|
|
35
112
|
- **安装速度优化(约 140 秒 → 数秒)**:把 6 个由 DSH 宿主进程提供的运行时包(`@deepseek-ai/dsh-llm`、`dsh-llm-pi-ai`、`dsh-settings`、`cordis`、`schemastery`、`@earendil-works/pi-ai`)在 `peerDependenciesMeta` 中标记为 **optional**。插件自身从不拉取它们;此前未标记 optional,包管理器会自动解析并安装它们的整棵依赖树(含 AWS / Google / Anthropic / Mistral SDK 等),实测安装 112 个包、耗时约 140 秒 —— 现在只需约 1 个包、数秒完成。
|
|
36
113
|
|
|
37
114
|
- **构建产物随仓库提交**:`lib/`(`index.js` + `index.d.ts` + `bin.js` + `client.js`)不再被忽略,直接从 GitHub 安装时**不需要任何安装期脚本**,因此不会再出现 pnpm 的「构建脚本被拦截,请放行后重试」提示,装完即用。
|
package/README.en.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# DSH WorkBuddy XD Pool
|
|
2
2
|
|
|
3
|
+
<p align="center">
|
|
4
|
+
<a href="https://www.npmjs.com/package/dsh-workbuddy-xdpool"><img src="https://img.shields.io/npm/v/dsh-workbuddy-xdpool?style=flat-square&label=npm&color=cb3837" alt="npm version"></a>
|
|
5
|
+
<a href="https://www.npmjs.com/package/dsh-workbuddy-xdpool"><img src="https://img.shields.io/npm/d18m/dsh-workbuddy-xdpool?style=flat-square&label=downloads&color=cb3837" alt="npm downloads"></a>
|
|
6
|
+
<a href="LICENSE"><img src="https://img.shields.io/github/license/aosi526/dsh-workbuddy-xdpool?style=flat-square" alt="MIT license"></a>
|
|
7
|
+
<a href="https://github.com/aosi526/dsh-workbuddy-xdpool/stargazers"><img src="https://img.shields.io/github/stars/aosi526/dsh-workbuddy-xdpool?style=flat-square" alt="GitHub stars"></a>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
3
10
|
English | [中文](./README.md)
|
|
4
11
|
|
|
5
12
|
Merge **every WorkBuddy account** you have ever signed into on this machine into a single **DeepSeek Harness model pool**. No manual setup: each account you sign in on the WorkBuddy desktop app automatically becomes a pool member, and when one account gets rate-limited (HTTP 429), requests automatically fail over to the next healthy account.
|
|
@@ -8,11 +15,15 @@ Merge **every WorkBuddy account** you have ever signed into on this machine into
|
|
|
8
15
|
|
|
9
16
|
**Settings card (Settings → Plugins → DSH WorkBuddy XD Pool)**
|
|
10
17
|
|
|
11
|
-

|
|
19
|
+
|
|
20
|
+
**Model picker (domestic and international appear as two separate supplier groups; the rate multiplier is baked into model.name because the DSH 0.1.2 composer only reads name)**
|
|
21
|
+
|
|
22
|
+

|
|
12
23
|
|
|
13
|
-
**
|
|
24
|
+
**Domestic / international dual suppliers (each with its own accounts, credits and models, usable at the same time)**
|
|
14
25
|
|
|
15
|
-

|
|
16
27
|
|
|
17
28
|
## Features
|
|
18
29
|
|
package/README.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# DSH WorkBuddy XD Pool
|
|
2
2
|
|
|
3
|
+
<p align="center">
|
|
4
|
+
<a href="https://www.npmjs.com/package/dsh-workbuddy-xdpool"><img src="https://img.shields.io/npm/v/dsh-workbuddy-xdpool?style=flat-square&label=npm&color=cb3837" alt="npm version"></a>
|
|
5
|
+
<a href="https://www.npmjs.com/package/dsh-workbuddy-xdpool"><img src="https://img.shields.io/npm/d18m/dsh-workbuddy-xdpool?style=flat-square&label=downloads&color=cb3837" alt="npm downloads"></a>
|
|
6
|
+
<a href="LICENSE"><img src="https://img.shields.io/github/license/aosi526/dsh-workbuddy-xdpool?style=flat-square" alt="MIT license"></a>
|
|
7
|
+
<a href="https://github.com/aosi526/dsh-workbuddy-xdpool/stargazers"><img src="https://img.shields.io/github/stars/aosi526/dsh-workbuddy-xdpool?style=flat-square" alt="GitHub stars"></a>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
3
10
|
[English](./README.en.md) | 中文
|
|
4
11
|
|
|
5
12
|
将 WorkBuddy 桌面 App 里登录过的**所有账号**自动并入一个 **DeepSeek Harness 模型池**:无需任何手动配置,你在 WorkBuddy 桌面登录的每个账号都会成为一个池成员;某个账号被限流(429)时,请求会自动切换到下一个可用账号,实现多账号自动容错轮换。
|
|
@@ -8,11 +15,15 @@
|
|
|
8
15
|
|
|
9
16
|
**插件配置卡片(设置 → 插件 → DSH WorkBuddy XD Pool)**
|
|
10
17
|
|
|
11
|
-

|
|
19
|
+
|
|
20
|
+
**模型选择器(国内版 / 国际版 两个独立供应商分组;倍率直接拼进 model.name:DSH 0.1.2 composer 只读 name)**
|
|
21
|
+
|
|
22
|
+

|
|
12
23
|
|
|
13
|
-
|
|
24
|
+
**国内版 / 国际版 双供应商(各自独立账号、积分与模型,可同时使用)**
|
|
14
25
|
|
|
15
|
-

|
|
16
27
|
|
|
17
28
|
## 功能
|
|
18
29
|
|
package/assets/model-picker.png
CHANGED
|
Binary file
|
|
Binary file
|
package/assets/settings-card.png
CHANGED
|
Binary file
|