dsh-workbuddy-xdpool 0.4.2 → 1.0.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 +220 -153
- package/LICENSE +1 -1
- package/README.en.md +163 -163
- package/README.md +181 -181
- package/lib/bin.js +110 -10
- package/lib/client.js +109 -13
- package/lib/index.d.ts +72 -8
- package/lib/index.js +186 -27
- package/package.json +126 -109
package/README.en.md
CHANGED
|
@@ -1,163 +1,163 @@
|
|
|
1
|
-
# DSH WorkBuddy XD Pool
|
|
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/
|
|
7
|
-
<a href="https://github.com/
|
|
8
|
-
</p>
|
|
9
|
-
|
|
10
|
-
English | [中文](./README.md)
|
|
11
|
-
|
|
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.
|
|
13
|
-
|
|
14
|
-
> Unlike single-account connectors (e.g. `dsh-workbuddy-connect`), XD Pool treats multi-account as the norm — it never picks or imports an account by hand. It scans every historical sign-in snapshot left by the WorkBuddy desktop app, merges them all into one shared pool, and exposes them as a single `workbuddy-xdpool` provider group whose requests auto-fail-over across members.
|
|
15
|
-
|
|
16
|
-
**Settings card (Settings → Plugins → DSH WorkBuddy XD Pool)**
|
|
17
|
-
|
|
18
|
-

|
|
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
|
-

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

|
|
27
|
-
|
|
28
|
-
## Features
|
|
29
|
-
|
|
30
|
-
- **Zero-config**: install, enable, done. Every account signed into the WorkBuddy desktop app is auto-discovered into the rotation pool on first use.
|
|
31
|
-
- **Automatic failover**: the pool tracks each account's `429` cooldown. A cooling account is skipped in favor of the next healthy one; cooldowns expire automatically. Requests pause only when every account is cooling at once.
|
|
32
|
-
- **Pool health at a glance**: the settings card shows pool health (N accounts / X cooling, which account is next), each account's token expiry, and cooldown countdowns.
|
|
33
|
-
- **Live remaining credits**: per-account credit packages (`package · remain / size`) and a big green total, refreshed from upstream in real time.
|
|
34
|
-
- **Annotated model catalog**: the card lists pool models with their credit multiplier (e.g. `GLM-5.2 · x0.79`), free / limited-free / night-discount tags, image-input capability, and context window — kept live from upstream `credits` / `tags`.
|
|
35
|
-
- **Daily check-in**: below each account's credits the card offers a check-in button showing the current streak, the per-day credit, and any milestone bonus. Collect an account's reward with one click — several accounts can be collected in turn, with no need to switch the pool's preferred account first. The status is re-read before claiming, so an account that already collected today is **never double-collected**. Also available as the `checkin` CLI command.
|
|
36
|
-
- **CN / global region auto-detection**: the upstream origin is picked per account from its login domain — a global sign-in (`workbuddy.ai`) uses `www.workbuddy.ai`, while a CN sign-in (the default) uses `copilot.tencent.com` and `www.codebuddy.cn`. Both regions can coexist in one pool, each account talking to its own region, with rotation and failover working across both.
|
|
37
|
-
- **Three manual actions**: re-detect desktop sign-ins, clear all cooldowns, and daily check-in — available both on the card and via the CLI.
|
|
38
|
-
|
|
39
|
-
## Install
|
|
40
|
-
|
|
41
|
-
Prerequisite: WorkBuddy desktop app installed and signed in (the plugin reuses the app's sign-in state; adding accounts = signing in / switching accounts in the desktop app — each is absorbed into the pool automatically). Tested against DSH Desktop host `0.1.2`; compatible with `0.1.1-rc.2` / `0.1.2` (the settings-section install picks `settings.installSection` on `0.1.2-rc.1+`, or the older free function earlier).
|
|
42
|
-
|
|
43
|
-
**Option A — install from npm (recommended)**
|
|
44
|
-
|
|
45
|
-
```sh
|
|
46
|
-
# if dsh is not on PATH, use node ~/.dsh/profiles/node_modules/@deepseek-ai/dsh/lib/bin.js instead
|
|
47
|
-
dsh plugin --profile desktop add dsh-workbuddy-xdpool
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
> npm is the fast path: the only dependency pulled in is the plugin itself (**roughly 1 package, a few seconds**).
|
|
51
|
-
> Installing from GitHub source also installs the dev toolchain (bundler, test runner, hundreds of packages), which is markedly slower.
|
|
52
|
-
|
|
53
|
-
**Option B — install from GitHub source**
|
|
54
|
-
|
|
55
|
-
```sh
|
|
56
|
-
dsh plugin --profile desktop add github:
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
**Option C — manual bundle registration**
|
|
60
|
-
|
|
61
|
-
```sh
|
|
62
|
-
# 1) install the package (npm or GitHub)
|
|
63
|
-
dsh plugin --profile desktop add dsh-workbuddy-xdpool
|
|
64
|
-
|
|
65
|
-
# 2) register the bundle: edit ~/.dsh/profiles/desktop/package.json and append
|
|
66
|
-
# "dsh-workbuddy-xdpool" to the end of the "dsh" → "profile" → "bundles" array
|
|
67
|
-
|
|
68
|
-
# 3) restart DSH Desktop
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
**Build locally** (developers):
|
|
72
|
-
|
|
73
|
-
```sh
|
|
74
|
-
pnpm install
|
|
75
|
-
pnpm build # outputs lib/index.js + lib/index.d.ts + lib/bin.js + lib/client.js
|
|
76
|
-
pnpm test # 26 tests (failover rotation, per-(account,model) cooldowns, check-in guards)
|
|
77
|
-
pnpm typecheck # host side
|
|
78
|
-
pnpm typecheck:client # client side
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
> `pnpm install` needs pnpm 11 (`npx pnpm@11`); add `--config.confirmModulesPurge=false --config.minimumReleaseAge=0` if the supply-chain age policy blocks freshly published rc packages.
|
|
82
|
-
|
|
83
|
-
> **The built output is committed** (`lib/` is no longer ignored). A GitHub install therefore runs
|
|
84
|
-
> no install-time script and never hits pnpm's "build scripts are blocked" prompt. **After changing
|
|
85
|
-
> `src/`, re-run `pnpm build` and commit `lib/` too**, or users would receive the old build.
|
|
86
|
-
|
|
87
|
-
After install: a **WorkBuddy XD Pool** group appears in the model picker; Settings → Plugins → **DSH WorkBuddy XD Pool** card shows pool health, per-account tokens/credits/check-in/cooldowns, plus "Detect accounts again" and "Clear all cooldowns" buttons. Works on Web / TUI profiles too (`--profile web` / `--profile dsh-tui`).
|
|
88
|
-
|
|
89
|
-
## CLI
|
|
90
|
-
|
|
91
|
-
```sh
|
|
92
|
-
dsh plugin --profile desktop exec dsh-workbuddy-xdpool status # pool accounts/cooldown + shim state (--credits, --json, --rates)
|
|
93
|
-
dsh plugin --profile desktop exec dsh-workbuddy-xdpool accounts # discovered accounts (--json)
|
|
94
|
-
dsh plugin --profile desktop exec dsh-workbuddy-xdpool doctor # diagnose discovery/cooldown/upstream
|
|
95
|
-
dsh plugin --profile desktop exec dsh-workbuddy-xdpool reset # clear all 429 cooldowns now
|
|
96
|
-
dsh plugin --profile desktop exec dsh-workbuddy-xdpool checkin # today's check-in state per account (--json)
|
|
97
|
-
dsh plugin --profile desktop exec dsh-workbuddy-xdpool checkin all
|
|
98
|
-
# collect every account's daily reward (or pass one label)
|
|
99
|
-
dsh plugin --profile desktop exec dsh-workbuddy-xdpool login # guide to adding another desktop account
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
## How accounts get into the pool
|
|
103
|
-
|
|
104
|
-
Auto-discovery. Every sign-in on the WorkBuddy desktop app leaves a token-bearing snapshot; XD Pool scans them and absorbs each into the pool. So multi-account = sign in / switch accounts in the desktop app, then hit "Detect accounts again" or restart DSH.
|
|
105
|
-
|
|
106
|
-
To snapshot an extra login explicitly (e.g. to pin one account for verification):
|
|
107
|
-
|
|
108
|
-
```sh
|
|
109
|
-
dsh plugin --profile desktop exec dsh-workbuddy-xdpool import myKey
|
|
110
|
-
dsh plugin --profile desktop exec dsh-workbuddy-xdpool accounts
|
|
111
|
-
dsh plugin --profile desktop exec dsh-workbuddy-xdpool remove myKey
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
Snapshots are stored under `~/.dsh/.workbuddy-xdpool/` named by the **MD5-8 prefix** of their key (so keys with Chinese, `/`, or spaces are safe). Long-lived use relies on refresh-token auto-renewal; if it lapses, re-sign-in on the desktop and `import <key> --force`.
|
|
115
|
-
|
|
116
|
-
## Configuration
|
|
117
|
-
|
|
118
|
-
Effective config is read from the plugin settings section (`settings.workbuddy-xdpool`), editable on the Models settings page and applied live:
|
|
119
|
-
|
|
120
|
-
| Field | Description | Default |
|
|
121
|
-
| --- | --- | --- |
|
|
122
|
-
| `authFile` | Override the WorkBuddy desktop auth-file path (equiv. to `WORKBUDDY_AUTH_FILE`) | auto-probed |
|
|
123
|
-
| `cooldownMs` | Per-account 429 cooldown in milliseconds | `60000` |
|
|
124
|
-
|
|
125
|
-
Or set it directly in `~/.dsh/settings.yaml`:
|
|
126
|
-
|
|
127
|
-
```yaml
|
|
128
|
-
workbuddy-xdpool:
|
|
129
|
-
cooldownMs: 120000
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
## Architecture
|
|
133
|
-
|
|
134
|
-
- **Host side** (`src/`): registers the `workbuddy-xdpool` provider, the `workbuddy-xdpool` settings section (`settings.installSection`), four same-origin routes (status / re-scan / clear cooldowns / check-in), and account discovery + catalog seeding. The upstream client picks the CN or global origin per credential from its login domain.
|
|
135
|
-
- **Client** (`src/client/`): the browser card loaded via `dsh.client`; the collapsible shell reuses the host's `dsm-plugin-card*` style language (`--dsw-alias-*` theme tokens), with content classes namespaced `dsm-workbuddy-xdpool-*`. Check-in is the plugin's only mutating route: POST-only, loopback-origin-only, an explicit per-account `accountId`, and a pre-claim status re-check.
|
|
136
|
-
- **Build**: `tsdown` produces `lib/index.js` (host entry) + `lib/index.d.ts` (types) + `lib/bin.js` (CLI) + `lib/client.js` (CJS browser bundle wrapped in `window.__ModuleLoader__.load`). All four are committed, so an install needs no build-time script.
|
|
137
|
-
|
|
138
|
-
## Known limitations
|
|
139
|
-
|
|
140
|
-
- **Only accounts on this machine**: the pool cannot and will not perform WorkBuddy sign-in / QR auth for you (tokens are minted by the WorkBuddy desktop app's own Tencent SSO and are device-bound). Add accounts by signing in on the desktop app.
|
|
141
|
-
- Depends on WorkBuddy client endpoints (not an official public API); may need updates when WorkBuddy changes.
|
|
142
|
-
- If Windows/Linux usernames differ and Windows env vars aren't forwarded into WSL, point `WORKBUDDY_AUTH_FILE` or the config `authFile` at the real location.
|
|
143
|
-
|
|
144
|
-
## Disclaimer
|
|
145
|
-
|
|
146
|
-
- For **personal study and research only** — drives your own WorkBuddy accounts on your own machine. Do not use commercially or beyond reasonable personal use.
|
|
147
|
-
- You are responsible for complying with WorkBuddy's terms of service; any consequences (account limits, emptied quotas, outages) are your own.
|
|
148
|
-
- The authors are not liable for any direct or indirect loss from using or misusing this project.
|
|
149
|
-
- This project is not affiliated with, endorsed by, or authorized by Tencent, WorkBuddy, or DeepSeek; all names belong to their respective owners.
|
|
150
|
-
|
|
151
|
-
## Acknowledgments
|
|
152
|
-
|
|
153
|
-
This project was built with reference to the following public projects, whose copyright notices are retained as their licenses require. The reference is to **design ideas and established findings**; the code is an independent implementation, and the modules that draw on an existing pattern say so in their file headers:
|
|
154
|
-
|
|
155
|
-
- [corrinehu/dsh-workbuddy-connect](https://github.com/corrinehu/dsh-workbuddy-connect) (MIT) — the core reference for settings-section registration (`settings.installSection`) and the DSH plugin structure, client-card loading, desktop credential refresh, and loopback shim hardening.
|
|
156
|
-
- [dingminhua/dsh-connect-workbuddy](https://github.com/dingminhua/dsh-connect-workbuddy) (MIT, Copyright (c) 2026 LaoDing) — the reference for the `dsm-plugin-card*` card style language and `--dsw-alias-*` theme tokens; the **daily check-in** endpoints (`/v2/billing/meter/checkin-activity-status` and `/v2/billing/meter/daily-checkin`), the credit-package aggregation rules (monthly-cycle vs one-off gift), and picking the upstream origin per credential domain for CN/global follow interface shapes that project had already validated.
|
|
157
|
-
- [Sliverkiss/workbuddy2api](https://github.com/Sliverkiss/workbuddy2api) (MIT) — reference implementation of the upstream WorkBuddy protocol (`copilot.tencent.com` wire behavior) and credits endpoints.
|
|
158
|
-
|
|
159
|
-
All copyrights belong to their respective authors. This project takes the **reference-the-design, implement-independently** approach and does not wholesale copy any reference project's source. If an attribution is missing or wrong, please open an issue.
|
|
160
|
-
|
|
161
|
-
## License
|
|
162
|
-
|
|
163
|
-
[MIT](./LICENSE)
|
|
1
|
+
# DSH WorkBuddy XD Pool
|
|
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/XDTrees/dsh-workbuddy-xdpool?style=flat-square" alt="MIT license"></a>
|
|
7
|
+
<a href="https://github.com/XDTrees/dsh-workbuddy-xdpool/stargazers"><img src="https://img.shields.io/github/stars/XDTrees/dsh-workbuddy-xdpool?style=flat-square" alt="GitHub stars"></a>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
English | [中文](./README.md)
|
|
11
|
+
|
|
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.
|
|
13
|
+
|
|
14
|
+
> Unlike single-account connectors (e.g. `dsh-workbuddy-connect`), XD Pool treats multi-account as the norm — it never picks or imports an account by hand. It scans every historical sign-in snapshot left by the WorkBuddy desktop app, merges them all into one shared pool, and exposes them as a single `workbuddy-xdpool` provider group whose requests auto-fail-over across members.
|
|
15
|
+
|
|
16
|
+
**Settings card (Settings → Plugins → DSH WorkBuddy XD Pool)**
|
|
17
|
+
|
|
18
|
+

|
|
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
|
+

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

|
|
27
|
+
|
|
28
|
+
## Features
|
|
29
|
+
|
|
30
|
+
- **Zero-config**: install, enable, done. Every account signed into the WorkBuddy desktop app is auto-discovered into the rotation pool on first use.
|
|
31
|
+
- **Automatic failover**: the pool tracks each account's `429` cooldown. A cooling account is skipped in favor of the next healthy one; cooldowns expire automatically. Requests pause only when every account is cooling at once.
|
|
32
|
+
- **Pool health at a glance**: the settings card shows pool health (N accounts / X cooling, which account is next), each account's token expiry, and cooldown countdowns.
|
|
33
|
+
- **Live remaining credits**: per-account credit packages (`package · remain / size`) and a big green total, refreshed from upstream in real time.
|
|
34
|
+
- **Annotated model catalog**: the card lists pool models with their credit multiplier (e.g. `GLM-5.2 · x0.79`), free / limited-free / night-discount tags, image-input capability, and context window — kept live from upstream `credits` / `tags`.
|
|
35
|
+
- **Daily check-in**: below each account's credits the card offers a check-in button showing the current streak, the per-day credit, and any milestone bonus. Collect an account's reward with one click — several accounts can be collected in turn, with no need to switch the pool's preferred account first. The status is re-read before claiming, so an account that already collected today is **never double-collected**. Also available as the `checkin` CLI command.
|
|
36
|
+
- **CN / global region auto-detection**: the upstream origin is picked per account from its login domain — a global sign-in (`workbuddy.ai`) uses `www.workbuddy.ai`, while a CN sign-in (the default) uses `copilot.tencent.com` and `www.codebuddy.cn`. Both regions can coexist in one pool, each account talking to its own region, with rotation and failover working across both.
|
|
37
|
+
- **Three manual actions**: re-detect desktop sign-ins, clear all cooldowns, and daily check-in — available both on the card and via the CLI.
|
|
38
|
+
|
|
39
|
+
## Install
|
|
40
|
+
|
|
41
|
+
Prerequisite: WorkBuddy desktop app installed and signed in (the plugin reuses the app's sign-in state; adding accounts = signing in / switching accounts in the desktop app — each is absorbed into the pool automatically). Tested against DSH Desktop host `0.1.2`; compatible with `0.1.1-rc.2` / `0.1.2` (the settings-section install picks `settings.installSection` on `0.1.2-rc.1+`, or the older free function earlier).
|
|
42
|
+
|
|
43
|
+
**Option A — install from npm (recommended)**
|
|
44
|
+
|
|
45
|
+
```sh
|
|
46
|
+
# if dsh is not on PATH, use node ~/.dsh/profiles/node_modules/@deepseek-ai/dsh/lib/bin.js instead
|
|
47
|
+
dsh plugin --profile desktop add dsh-workbuddy-xdpool
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
> npm is the fast path: the only dependency pulled in is the plugin itself (**roughly 1 package, a few seconds**).
|
|
51
|
+
> Installing from GitHub source also installs the dev toolchain (bundler, test runner, hundreds of packages), which is markedly slower.
|
|
52
|
+
|
|
53
|
+
**Option B — install from GitHub source**
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
dsh plugin --profile desktop add github:XDTrees/dsh-workbuddy-xdpool
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Option C — manual bundle registration**
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
# 1) install the package (npm or GitHub)
|
|
63
|
+
dsh plugin --profile desktop add dsh-workbuddy-xdpool
|
|
64
|
+
|
|
65
|
+
# 2) register the bundle: edit ~/.dsh/profiles/desktop/package.json and append
|
|
66
|
+
# "dsh-workbuddy-xdpool" to the end of the "dsh" → "profile" → "bundles" array
|
|
67
|
+
|
|
68
|
+
# 3) restart DSH Desktop
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Build locally** (developers):
|
|
72
|
+
|
|
73
|
+
```sh
|
|
74
|
+
pnpm install
|
|
75
|
+
pnpm build # outputs lib/index.js + lib/index.d.ts + lib/bin.js + lib/client.js
|
|
76
|
+
pnpm test # 26 tests (failover rotation, per-(account,model) cooldowns, check-in guards)
|
|
77
|
+
pnpm typecheck # host side
|
|
78
|
+
pnpm typecheck:client # client side
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
> `pnpm install` needs pnpm 11 (`npx pnpm@11`); add `--config.confirmModulesPurge=false --config.minimumReleaseAge=0` if the supply-chain age policy blocks freshly published rc packages.
|
|
82
|
+
|
|
83
|
+
> **The built output is committed** (`lib/` is no longer ignored). A GitHub install therefore runs
|
|
84
|
+
> no install-time script and never hits pnpm's "build scripts are blocked" prompt. **After changing
|
|
85
|
+
> `src/`, re-run `pnpm build` and commit `lib/` too**, or users would receive the old build.
|
|
86
|
+
|
|
87
|
+
After install: a **WorkBuddy XD Pool** group appears in the model picker; Settings → Plugins → **DSH WorkBuddy XD Pool** card shows pool health, per-account tokens/credits/check-in/cooldowns, plus "Detect accounts again" and "Clear all cooldowns" buttons. Works on Web / TUI profiles too (`--profile web` / `--profile dsh-tui`).
|
|
88
|
+
|
|
89
|
+
## CLI
|
|
90
|
+
|
|
91
|
+
```sh
|
|
92
|
+
dsh plugin --profile desktop exec dsh-workbuddy-xdpool status # pool accounts/cooldown + shim state (--credits, --json, --rates)
|
|
93
|
+
dsh plugin --profile desktop exec dsh-workbuddy-xdpool accounts # discovered accounts (--json)
|
|
94
|
+
dsh plugin --profile desktop exec dsh-workbuddy-xdpool doctor # diagnose discovery/cooldown/upstream
|
|
95
|
+
dsh plugin --profile desktop exec dsh-workbuddy-xdpool reset # clear all 429 cooldowns now
|
|
96
|
+
dsh plugin --profile desktop exec dsh-workbuddy-xdpool checkin # today's check-in state per account (--json)
|
|
97
|
+
dsh plugin --profile desktop exec dsh-workbuddy-xdpool checkin all
|
|
98
|
+
# collect every account's daily reward (or pass one label)
|
|
99
|
+
dsh plugin --profile desktop exec dsh-workbuddy-xdpool login # guide to adding another desktop account
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## How accounts get into the pool
|
|
103
|
+
|
|
104
|
+
Auto-discovery. Every sign-in on the WorkBuddy desktop app leaves a token-bearing snapshot; XD Pool scans them and absorbs each into the pool. So multi-account = sign in / switch accounts in the desktop app, then hit "Detect accounts again" or restart DSH.
|
|
105
|
+
|
|
106
|
+
To snapshot an extra login explicitly (e.g. to pin one account for verification):
|
|
107
|
+
|
|
108
|
+
```sh
|
|
109
|
+
dsh plugin --profile desktop exec dsh-workbuddy-xdpool import myKey
|
|
110
|
+
dsh plugin --profile desktop exec dsh-workbuddy-xdpool accounts
|
|
111
|
+
dsh plugin --profile desktop exec dsh-workbuddy-xdpool remove myKey
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Snapshots are stored under `~/.dsh/.workbuddy-xdpool/` named by the **MD5-8 prefix** of their key (so keys with Chinese, `/`, or spaces are safe). Long-lived use relies on refresh-token auto-renewal; if it lapses, re-sign-in on the desktop and `import <key> --force`.
|
|
115
|
+
|
|
116
|
+
## Configuration
|
|
117
|
+
|
|
118
|
+
Effective config is read from the plugin settings section (`settings.workbuddy-xdpool`), editable on the Models settings page and applied live:
|
|
119
|
+
|
|
120
|
+
| Field | Description | Default |
|
|
121
|
+
| --- | --- | --- |
|
|
122
|
+
| `authFile` | Override the WorkBuddy desktop auth-file path (equiv. to `WORKBUDDY_AUTH_FILE`) | auto-probed |
|
|
123
|
+
| `cooldownMs` | Per-account 429 cooldown in milliseconds | `60000` |
|
|
124
|
+
|
|
125
|
+
Or set it directly in `~/.dsh/settings.yaml`:
|
|
126
|
+
|
|
127
|
+
```yaml
|
|
128
|
+
workbuddy-xdpool:
|
|
129
|
+
cooldownMs: 120000
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Architecture
|
|
133
|
+
|
|
134
|
+
- **Host side** (`src/`): registers the `workbuddy-xdpool` provider, the `workbuddy-xdpool` settings section (`settings.installSection`), four same-origin routes (status / re-scan / clear cooldowns / check-in), and account discovery + catalog seeding. The upstream client picks the CN or global origin per credential from its login domain.
|
|
135
|
+
- **Client** (`src/client/`): the browser card loaded via `dsh.client`; the collapsible shell reuses the host's `dsm-plugin-card*` style language (`--dsw-alias-*` theme tokens), with content classes namespaced `dsm-workbuddy-xdpool-*`. Check-in is the plugin's only mutating route: POST-only, loopback-origin-only, an explicit per-account `accountId`, and a pre-claim status re-check.
|
|
136
|
+
- **Build**: `tsdown` produces `lib/index.js` (host entry) + `lib/index.d.ts` (types) + `lib/bin.js` (CLI) + `lib/client.js` (CJS browser bundle wrapped in `window.__ModuleLoader__.load`). All four are committed, so an install needs no build-time script.
|
|
137
|
+
|
|
138
|
+
## Known limitations
|
|
139
|
+
|
|
140
|
+
- **Only accounts on this machine**: the pool cannot and will not perform WorkBuddy sign-in / QR auth for you (tokens are minted by the WorkBuddy desktop app's own Tencent SSO and are device-bound). Add accounts by signing in on the desktop app.
|
|
141
|
+
- Depends on WorkBuddy client endpoints (not an official public API); may need updates when WorkBuddy changes.
|
|
142
|
+
- If Windows/Linux usernames differ and Windows env vars aren't forwarded into WSL, point `WORKBUDDY_AUTH_FILE` or the config `authFile` at the real location.
|
|
143
|
+
|
|
144
|
+
## Disclaimer
|
|
145
|
+
|
|
146
|
+
- For **personal study and research only** — drives your own WorkBuddy accounts on your own machine. Do not use commercially or beyond reasonable personal use.
|
|
147
|
+
- You are responsible for complying with WorkBuddy's terms of service; any consequences (account limits, emptied quotas, outages) are your own.
|
|
148
|
+
- The authors are not liable for any direct or indirect loss from using or misusing this project.
|
|
149
|
+
- This project is not affiliated with, endorsed by, or authorized by Tencent, WorkBuddy, or DeepSeek; all names belong to their respective owners.
|
|
150
|
+
|
|
151
|
+
## Acknowledgments
|
|
152
|
+
|
|
153
|
+
This project was built with reference to the following public projects, whose copyright notices are retained as their licenses require. The reference is to **design ideas and established findings**; the code is an independent implementation, and the modules that draw on an existing pattern say so in their file headers:
|
|
154
|
+
|
|
155
|
+
- [corrinehu/dsh-workbuddy-connect](https://github.com/corrinehu/dsh-workbuddy-connect) (MIT) — the core reference for settings-section registration (`settings.installSection`) and the DSH plugin structure, client-card loading, desktop credential refresh, and loopback shim hardening.
|
|
156
|
+
- [dingminhua/dsh-connect-workbuddy](https://github.com/dingminhua/dsh-connect-workbuddy) (MIT, Copyright (c) 2026 LaoDing) — the reference for the `dsm-plugin-card*` card style language and `--dsw-alias-*` theme tokens; the **daily check-in** endpoints (`/v2/billing/meter/checkin-activity-status` and `/v2/billing/meter/daily-checkin`), the credit-package aggregation rules (monthly-cycle vs one-off gift), and picking the upstream origin per credential domain for CN/global follow interface shapes that project had already validated.
|
|
157
|
+
- [Sliverkiss/workbuddy2api](https://github.com/Sliverkiss/workbuddy2api) (MIT) — reference implementation of the upstream WorkBuddy protocol (`copilot.tencent.com` wire behavior) and credits endpoints.
|
|
158
|
+
|
|
159
|
+
All copyrights belong to their respective authors. This project takes the **reference-the-design, implement-independently** approach and does not wholesale copy any reference project's source. If an attribution is missing or wrong, please open an issue.
|
|
160
|
+
|
|
161
|
+
## License
|
|
162
|
+
|
|
163
|
+
[MIT](./LICENSE)
|