dsh-workbuddy-connect 0.7.7 → 0.7.9
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/README.en.md +18 -13
- package/README.md +18 -13
- package/THIRD_PARTY_NOTICES.txt +24 -0
- package/lib/bin.js +1 -1
- package/lib/client.js +114 -33
- package/lib/{host-heartbeat-FytEpUGO.js → host-heartbeat-SJaZ33tR.js} +351 -19
- package/lib/index.d.ts +7 -2
- package/lib/index.js +398 -59
- package/package.json +27 -27
package/README.en.md
CHANGED
|
@@ -13,7 +13,7 @@ Brings the models available in your signed-in WorkBuddy / WorkBuddy AI desktop a
|
|
|
13
13
|
```text
|
|
14
14
|
Please install and verify the DSH (DeepSeek Harness) plugin dsh-workbuddy-connect for me (project: https://github.com/corrinehu/dsh-workbuddy-connect).
|
|
15
15
|
Start by reading the project README and confirming which interface I actually use (Web / Desktop / TUI) and its DSH core version — for the Desktop app, the bundled core, never the standalone CLI's version.
|
|
16
|
-
Then install from the official npm package per the version mapping (0.2.1-rc.1 -> 0.7.7, 0.2.0-rc.2 -> 0.7.6, rc.1 -> 0.7.0, 0.1.5-0.1.7 -> 0.6.5), preferring a locally supported non-market channel; on some Desktop distributions (the official Electron app in particular) the profile is app-managed and rules vary by distribution — check mine first, then explore its compliant install route, but never bypass its validation.
|
|
16
|
+
Then install from the official npm package per the version mapping (0.2.1-rc.2 -> 0.7.9, 0.2.1-rc.1 -> 0.7.7, 0.2.0-rc.2 -> 0.7.6, rc.1 -> 0.7.0, 0.1.5-0.1.7 -> 0.6.5), preferring a locally supported non-market channel; on some Desktop distributions (the official Electron app in particular) the profile is app-managed and rules vary by distribution — check mine first, then explore its compliant install route, but never bypass its validation.
|
|
17
17
|
Ask for my consent and make backups before changing any local files or configuration.
|
|
18
18
|
After installing, verify the WorkBuddy group appears in the model picker and walk me through one short conversation.
|
|
19
19
|
If the Desktop install still fails generation validation (e.g. the @types/retry false positive), report it honestly, reference upstream dataelement/dsh-desktop#688, and suggest switching to the standalone Web / TUI — do not modify dependency packages or bypass the check.
|
|
@@ -23,7 +23,8 @@ Core-to-plugin quick reference (full table in "Compatibility and release history
|
|
|
23
23
|
|
|
24
24
|
| DSH core | Recommended plugin |
|
|
25
25
|
|---|---|
|
|
26
|
-
| 0.2.1-rc.
|
|
26
|
+
| 0.2.1-rc.2 | 0.7.9 (npm latest) |
|
|
27
|
+
| 0.2.1-rc.1 | 0.7.7 |
|
|
27
28
|
| 0.2.0-rc.2 | 0.7.6 |
|
|
28
29
|
| 0.2.0-rc.1 | 0.7.0 |
|
|
29
30
|
| 0.1.5 – 0.1.7 | 0.6.5 |
|
|
@@ -32,8 +33,8 @@ Core-to-plugin quick reference (full table in "Compatibility and release history
|
|
|
32
33
|
<summary>Manual install (command line, Web / TUI only)</summary>
|
|
33
34
|
|
|
34
35
|
```sh
|
|
35
|
-
# Web (pin per your actual core — example: 0.2.
|
|
36
|
-
dsh plugin --profile web add dsh-workbuddy-connect@0.7.
|
|
36
|
+
# Web (pin per your actual core — example: 0.2.1-rc.2 -> 0.7.9; or install from source via github:corrinehu/dsh-workbuddy-connect)
|
|
37
|
+
dsh plugin --profile web add dsh-workbuddy-connect@0.7.9
|
|
37
38
|
dsh web
|
|
38
39
|
|
|
39
40
|
# TUI (example for a 0.1.x core; that profile needs pnpm 11, e.g. npx pnpm@11)
|
|
@@ -59,11 +60,11 @@ dsh --profile dsh-tui
|
|
|
59
60
|
|
|
60
61
|

|
|
61
62
|
|
|
62
|
-
- **Image input**: most models accept images pasted or dropped straight into the conversation (GLM-5.3-Flash,
|
|
63
|
+
- **Image input**: most models accept images pasted or dropped straight into the conversation (GLM-5.3-Flash, the DeepSeek-V4 series, and more); the few text-only models (e.g. GLM-5.1 / GLM-5.2 on the China endpoint) clearly say so.
|
|
63
64
|
|
|
64
65
|
- **Reasoning levels**: levels explicitly declared by WorkBuddy appear directly — for example, GLM-5.3 and GLM-5.3-Flash offer low / high / max. For models without declared levels, Web and Desktop offer a manual check in the model picker (it sends a few requests and may consume credit); models without a check result or selectable levels keep using WorkBuddy's default.
|
|
65
66
|
|
|
66
|
-
- **Balance at a glance**: with a WorkBuddy / WorkBuddy AI model selected, the composer shows the account's remaining credit next to the model selector (e.g. `WB.3,401 credits`, `WB AI.3,401 credits` on the international app). Credit is not polled automatically (every status read is a real billing query): one read on mount, then refresh on demand with the ↻
|
|
67
|
+
- **Balance at a glance**: with a WorkBuddy / WorkBuddy AI model selected, the composer shows the account's remaining credit next to the model selector (e.g. `WB.3,401 credits`, `WB AI.3,401 credits` on the international app). Credit is not polled automatically (every status read is a real billing query): one read on mount, then refresh on demand with the ↻ before the balance. During session switching, the controls may briefly hide until the model selection is ready, then return automatically. The refresh button remains available even when the model has no reasoning-level detection entry or the balance cannot be read.
|
|
67
68
|
|
|
68
69
|
- **Status and detection**: Settings → Plugins → the matching card shows the account, token validity, remaining credit, and model offers; it also refreshes the model list manually, shows whether the current list came from the upstream or the built-in fallback, and runs manual reasoning-level detection for eligible models. On DSH 0.1.5 the entry lives under Settings → Plugins; on 0.1.6+ it moved to the left-sidebar Plugins panel (workbuddy-connect → View) — and the Settings → Models page shows no WorkBuddy entries on either generation, by design.
|
|
69
70
|
|
|
@@ -83,7 +84,7 @@ The same UI works unchanged inside the DSH 0.1.5 settings cards:
|
|
|
83
84
|
|
|
84
85
|

|
|
85
86
|
|
|
86
|
-
The expanded card has three tabs: Status shows the account, token validity, total credit, catalog source, and reasoning-level detection; Context lists each model's context window, and the international version's "use the upstream's largest declared context window" switch lives here (on by default, so DSH sizes context compression to the largest declared window; turn it off to follow the upstream default instead, and the preference persists across restarts); Details
|
|
87
|
+
The expanded card has three tabs: Status shows the account, token validity, total credit, catalog source, and reasoning-level detection; Context lists each model's context window, and the international version's "use the upstream's largest declared context window" switch lives here (on by default, so DSH sizes context compression to the largest declared window; turn it off to follow the upstream default instead, and the preference persists across restarts); Details combines credit packages with the same name and shows model offers. The CN and international versions each get their own card.
|
|
87
88
|
|
|
88
89
|

|
|
89
90
|
|
|
@@ -118,7 +119,7 @@ dsh plugin --profile web exec dsh-workbuddy-connect doctor --provider workbuddy-
|
|
|
118
119
|
- **International-version environments not yet covered**: on Windows / WSL / Linux no reliable source for the international app's version has been located yet, so the saved value or the built-in default is used. On macOS, real-shim checks covered complete GPT-family replies, tool calls, and continued turns.
|
|
119
120
|
- **Behaviour change with no credentials**: a version whose app was never signed in — and that left no plugin-owned copy — no longer shows a model group. The CN version used to display a built-in fallback list, but every model on it failed when selected.
|
|
120
121
|
- **The enterprise credit path currently covers the CN product only**: the international enterprise billing interface is unverified, so those accounts still read through the personal endpoint pending measurement. The enterprise branch could not be tested locally (the development machine holds a personal account); it was implemented from the official app's interface contract, and reports from enterprise users are welcome.
|
|
121
|
-
- **Settings entries vary with the DSH version**:
|
|
122
|
+
- **Settings entries vary with the DSH version**: older services use `installSection`; newer ones use SettingsForms. On DSH 0.2.1-rc.2, 0.7.9 restores the international edition's maximum-context switch, enabled by default. Turning it off uses the upstream default window, and the preference survives restarts. The switch appears only once this plugin's writable settings entry is ready; while waiting, the maximum window remains the default.
|
|
122
123
|
- Relies on WorkBuddy client interfaces (not a public API); the plugin may need updates as WorkBuddy changes.
|
|
123
124
|
|
|
124
125
|
## Compatibility and release history
|
|
@@ -127,7 +128,8 @@ The plugin version must match the DSH core — a mismatched combination fails to
|
|
|
127
128
|
|
|
128
129
|
| DSH core | Recommended plugin | Notes |
|
|
129
130
|
|---|---|---|
|
|
130
|
-
| `0.2.1-rc.
|
|
131
|
+
| `0.2.1-rc.2` | `0.7.9` | Targets this core only; `0.2.0-rc.2` and `0.2.1-rc.2` differ. Check the core bundled in your Desktop app. |
|
|
132
|
+
| `0.2.1-rc.1` | `0.7.7` | The core moved to `@earendil-works/pi-ai` 1.3.0, so the plugin bundles 1.3.0 too — a leftover 0.87.1 overrides entry must be removed (see the pi-ai note below). |
|
|
131
133
|
| `0.2.0-rc.2` | `0.7.6` | Previous core line; fixes enterprise catalog gaps and international chat requests blocked by the upstream channel check. Avoid 0.7.2 with its registry regression. |
|
|
132
134
|
| `0.2.0-rc.1` | `0.7.0` | 0.7.1 drops rc.1 support; stay on this version. |
|
|
133
135
|
| `0.1.5` – `0.1.7` | `0.6.5` | Final release for the old cores; 0.7.0 targets 0.2.0 only. |
|
|
@@ -136,6 +138,8 @@ The plugin version must match the DSH core — a mismatched combination fails to
|
|
|
136
138
|
|
|
137
139
|
Release history (full records at [releases](https://github.com/corrinehu/dsh-workbuddy-connect/releases)):
|
|
138
140
|
|
|
141
|
+
- **0.7.9**: restores the international edition's maximum-context switch on DSH 0.2.1-rc.2, including delayed initialization and persistent settings (PR [#172](https://github.com/corrinehu/dsh-workbuddy-connect/pull/172), by @1Dreamer666); avoids fetch-blocked local ports that could cause international-edition 502 errors (PR [#164](https://github.com/corrinehu/dsh-workbuddy-connect/pull/164), by @Xiong-Ziyi); combines credit packages with the same name to reduce repeated entries.
|
|
142
|
+
- **0.7.8**: adapts to DSH 0.2.1-rc.2; bundles the official atomic-write helper instead of relying on host module exposure; refreshes the China catalog snapshot and distinguishes Hy3 / Hy3-X; improves probe result labels and fixes the credit-refresh placement and tooltip. Thanks to @chenpiyanghappy for PR [#156](https://github.com/corrinehu/dsh-workbuddy-connect/pull/156).
|
|
139
143
|
- **0.7.7**: adapts to the DSH 0.2.1-rc.1 core: peers narrow to 0.2.1-rc.1 and the plugin-bundled `@earendil-works/pi-ai` moves to 1.3.0 with it (a profile-level leftover 0.87.1 overrides entry must be removed, or the plugin fails to load).
|
|
140
144
|
- **0.7.6**: fixes enterprise accounts missing `glm-5.3-flashx` from the model catalog ([#123](https://github.com/corrinehu/dsh-workbuddy-connect/issues/123)), and fixes international chat requests being blocked by the upstream channel check ([#139](https://github.com/corrinehu/dsh-workbuddy-connect/issues/139) / [#142](https://github.com/corrinehu/dsh-workbuddy-connect/issues/142)).
|
|
141
145
|
- **0.7.5**: restores composer controls after session switching ([#125](https://github.com/corrinehu/dsh-workbuddy-connect/issues/125) / [#132](https://github.com/corrinehu/dsh-workbuddy-connect/issues/132)), fixes WSL helper environment forwarding ([#133](https://github.com/corrinehu/dsh-workbuddy-connect/issues/133)), and adds community projects to both READMEs.
|
|
@@ -146,9 +150,9 @@ Release history (full records at [releases](https://github.com/corrinehu/dsh-wor
|
|
|
146
150
|
- **0.7.0**: adapts to DSH 0.2.0's settings-service rework and drops 0.1.x support.
|
|
147
151
|
- **0.6.5**: final release of the 0.1.x line.
|
|
148
152
|
|
|
149
|
-
Pinned-version install example: `dsh plugin --profile web add dsh-workbuddy-connect@0.7.
|
|
153
|
+
Pinned-version install example: `dsh plugin --profile web add dsh-workbuddy-connect@0.7.9`.
|
|
150
154
|
|
|
151
|
-
**pi-ai versions are per core line and must not be mixed**: the 0.2.1-rc.1 core
|
|
155
|
+
**pi-ai versions are per core line and must not be mixed**: the 0.2.1-rc.1 / rc.2 core lines (plugin 0.7.7 / 0.7.8–0.7.9 respectively) moved to `@earendil-works/pi-ai` 1.3.0 (bundled by the plugin), so a profile-level leftover `overrides: {'@earendil-works/pi-ai': '0.87.1'}` **must be removed** or the plugin fails to load; the 0.2.0-rc.2 core line (plugin 0.7.6) still requires `^0.87.1` — on that line, **do not** upgrade the profile-level pi-ai to 1.x, and do not act on third-party plugin managers' "updatable" prompts, which do not check peer constraints ([#86](https://github.com/corrinehu/dsh-workbuddy-connect/issues/86)).
|
|
152
156
|
|
|
153
157
|
## Disclaimer
|
|
154
158
|
|
|
@@ -159,10 +163,11 @@ Pinned-version install example: `dsh plugin --profile web add dsh-workbuddy-conn
|
|
|
159
163
|
|
|
160
164
|
## Related Projects / Community Ecosystem
|
|
161
165
|
|
|
162
|
-
- **[
|
|
166
|
+
- **[dsh-buddy-checkin](https://github.com/corrinehu/dsh-buddy-checkin)**: a daily check-in plugin for the WorkBuddy China edition, maintained by this project's author.
|
|
167
|
+
- **[dsh-workbuddy-switcher](https://github.com/ddGuo/dsh-workbuddy-switcher)**: a community-maintained WorkBuddy account management and switching plugin.
|
|
163
168
|
- **[hana-workbuddy-connect](https://github.com/miaoyongxu/hana-workbuddy-connect)**: a community-maintained unofficial adapter project that reuses parts of the `dsh-workbuddy-connect` implementation to bring WorkBuddy / WorkBuddy AI models to HanaAgent.
|
|
164
169
|
|
|
165
|
-
|
|
170
|
+
See each project's documentation for supported versions and installation requirements. Except for `dsh-buddy-checkin`, these projects are independently maintained by third parties. Listing them here is not an official endorsement or a stability or compatibility commitment for this plugin's internal interfaces.
|
|
166
171
|
|
|
167
172
|
## Acknowledgements
|
|
168
173
|
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
```text
|
|
14
14
|
请帮我安装并验证 DSH(DeepSeek Harness)插件 dsh-workbuddy-connect(项目地址:https://github.com/corrinehu/dsh-workbuddy-connect):
|
|
15
15
|
先阅读项目 README,确认我实际使用的界面(Web / Desktop / TUI)与 DSH 内核版本,桌面版以 App 内置核心为准,不要用独立 CLI 的版本代替;
|
|
16
|
-
再按版本对应关系从 npm 正式包安装(0.2.1-rc.1→0.7.7、0.2.0-rc.2→0.7.6、rc.1→0.7.0、0.1.5–0.1.7→0.6.5),优先走本机受支持的非插件市场渠道;部分 Desktop 发行版(尤其官方 Electron 版)的 profile 由 App 管理,各发行版规则未必相同,先确认我所用的发行版,再探查其合规的安装方式,但不得绕过其校验;
|
|
16
|
+
再按版本对应关系从 npm 正式包安装(0.2.1-rc.2→0.7.9、0.2.1-rc.1→0.7.7、0.2.0-rc.2→0.7.6、rc.1→0.7.0、0.1.5–0.1.7→0.6.5),优先走本机受支持的非插件市场渠道;部分 Desktop 发行版(尤其官方 Electron 版)的 profile 由 App 管理,各发行版规则未必相同,先确认我所用的发行版,再探查其合规的安装方式,但不得绕过其校验;
|
|
17
17
|
任何本地文件或配置改动,先征得我同意并做好备份;
|
|
18
18
|
装完后验证模型选择器里出现 WorkBuddy 分组,并陪我完成一次简短对话;
|
|
19
19
|
若 Desktop 安装仍因 generation 校验失败(如 @types/retry 误报),请如实报告、参照上游 dataelement/dsh-desktop#688,并建议我改用独立的 Web / TUI,不要修改依赖包或绕过校验。
|
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
|
|
24
24
|
| DSH 内核 | 推荐插件版 |
|
|
25
25
|
|---|---|
|
|
26
|
-
| 0.2.1-rc.
|
|
26
|
+
| 0.2.1-rc.2 | 0.7.9(npm latest) |
|
|
27
|
+
| 0.2.1-rc.1 | 0.7.7 |
|
|
27
28
|
| 0.2.0-rc.2 | 0.7.6 |
|
|
28
29
|
| 0.2.0-rc.1 | 0.7.0 |
|
|
29
30
|
| 0.1.5 – 0.1.7 | 0.6.5 |
|
|
@@ -32,8 +33,8 @@
|
|
|
32
33
|
<summary>手动安装(命令行,仅 Web / TUI)</summary>
|
|
33
34
|
|
|
34
35
|
```sh
|
|
35
|
-
# Web(按实际内核固定版本,示例为 0.2.
|
|
36
|
-
dsh plugin --profile web add dsh-workbuddy-connect@0.7.
|
|
36
|
+
# Web(按实际内核固定版本,示例为 0.2.1-rc.2 → 0.7.9;也可用 github:corrinehu/dsh-workbuddy-connect 从源码安装)
|
|
37
|
+
dsh plugin --profile web add dsh-workbuddy-connect@0.7.9
|
|
37
38
|
dsh web
|
|
38
39
|
|
|
39
40
|
# TUI(示例为 0.1.x 内核;该 profile 需用 pnpm 11 安装,如 npx pnpm@11)
|
|
@@ -59,11 +60,11 @@ dsh --profile dsh-tui
|
|
|
59
60
|
|
|
60
61
|

|
|
61
62
|
|
|
62
|
-
- **图片输入**:大部分模型支持在对话里直接粘贴或拖入图片(GLM-5.3-Flash、
|
|
63
|
+
- **图片输入**:大部分模型支持在对话里直接粘贴或拖入图片(GLM-5.3-Flash、DeepSeek-V4 系列等);少数纯文字模型(如 GLM-5.1、GLM-5.2)会明确提示不支持。
|
|
63
64
|
|
|
64
65
|
- **推理档位**:WorkBuddy 明确声明的档位会直接显示,例如 GLM-5.3 和 GLM-5.3-Flash 可选 low / high / max。未声明档位的模型可在 Web 和 Desktop 的模型选择器中手动检测(发送少量请求,可能消耗积分);未检测或没有可用档位的模型使用 WorkBuddy 默认档位。
|
|
65
66
|
|
|
66
|
-
- **余额速览**:选中 WorkBuddy / WorkBuddy AI 模型时,输入框底部在模型选择器旁显示当前账号的剩余积分(如 `WB.3,401(积分)`、国际版 `WB AI.3,401
|
|
67
|
+
- **余额速览**:选中 WorkBuddy / WorkBuddy AI 模型时,输入框底部在模型选择器旁显示当前账号的剩余积分(如 `WB.3,401(积分)`、国际版 `WB AI.3,401(积分)`)。积分不自动轮询(每次读取都是真实计费查询),挂载时读取一次后可点积分文字前方的 ↻ 手动刷新。切换会话时组件可能短暂隐藏,模型选择就绪后自动恢复;即使模型没有推理档位检测入口或余额读取失败,刷新按钮仍保留。
|
|
67
68
|
|
|
68
69
|
- **信息查看与检测**:设置 → 插件 → 对应卡片可查看账号、令牌有效期、剩余积分和模型优惠,也可手动刷新模型列表并查看当前列表来自上游还是内置兜底,或对可检测模型手动检测推理档位。DSH 0.1.5 的入口在「设置 → 插件」,0.1.6+ 移到主界面左侧栏「插件」面板(workbuddy-connect → 查看);「设置 → 模型」页两代都不显示 WorkBuddy 条目,属有意设计。
|
|
69
70
|
|
|
@@ -83,7 +84,7 @@ dsh --profile dsh-tui
|
|
|
83
84
|
|
|
84
85
|

|
|
85
86
|
|
|
86
|
-
卡片展开后分「状态 / 上下文 / 明细」三个标签:状态页展示账号、令牌有效期、合计积分、模型列表来源与推理档位检测;上下文页列出各模型上下文窗口,国际版可在这里关闭「使用上游声明的最大上下文窗口」(默认开启,DSH
|
|
87
|
+
卡片展开后分「状态 / 上下文 / 明细」三个标签:状态页展示账号、令牌有效期、合计积分、模型列表来源与推理档位检测;上下文页列出各模型上下文窗口,国际版可在这里关闭「使用上游声明的最大上下文窗口」(默认开启,DSH 按上游最大窗口安排上下文压缩;关闭后改用上游默认窗口,偏好持久化);明细页合并展示同名积分包的余量与模型优惠。国内版与国际版各有一张自己的卡片。
|
|
87
88
|
|
|
88
89
|

|
|
89
90
|
|
|
@@ -119,7 +120,7 @@ dsh plugin --profile web exec dsh-workbuddy-connect doctor --provider workbuddy-
|
|
|
119
120
|
- **国际版仍未覆盖的环境**:Windows / WSL / Linux 下国际版 App 的版本读取尚未找到可靠来源,会退回最近保存的版本或内置值。macOS 上已通过真实 shim 验证 GPT 系完整回复、工具调用与续轮。
|
|
120
121
|
- **无凭据时的行为变化**:某版 App 从未登录、也没留下插件自留副本时,该版模型分组不再显示。此前国内版会显示一份内置兜底列表,但那些模型选了必然报错。
|
|
121
122
|
- **企业账号积分目前仅覆盖国内版**:国际版企业账号的计费接口尚未验证,仍按个人版接口读取;待有实测结论后再扩展。企业账号分支在本机无法自测(开发机为个人账号),依据官方 App 的接口契约实现,欢迎企业账号用户反馈实测结果。
|
|
122
|
-
- **设置入口随 DSH
|
|
123
|
+
- **设置入口随 DSH 版本而异**:旧版设置服务使用 `installSection`,新版使用 SettingsForms。0.7.9 在 DSH 0.2.1-rc.2 上恢复国际版「使用上游声明的最大上下文窗口」开关,默认开启;关闭后使用上游默认窗口,设置在重启后保留。只有本插件的可写设置入口就绪后才显示开关,等待期间仍使用默认的最大窗口。
|
|
123
124
|
- 依赖 WorkBuddy 客户端接口(非官方开放 API),WorkBuddy 更新后插件可能需要随之调整。
|
|
124
125
|
|
|
125
126
|
## 版本兼容与历史版本
|
|
@@ -128,7 +129,8 @@ dsh plugin --profile web exec dsh-workbuddy-connect doctor --provider workbuddy-
|
|
|
128
129
|
|
|
129
130
|
| DSH 内核 | 推荐插件版 | 注意事项 |
|
|
130
131
|
|---|---|---|
|
|
131
|
-
| `0.2.1-rc.
|
|
132
|
+
| `0.2.1-rc.2` | `0.7.9` | 仅适配这一内核;`0.2.0-rc.2` 与 `0.2.1-rc.2` 不同,请核对 App 内置版本。 |
|
|
133
|
+
| `0.2.1-rc.1` | `0.7.7` | 内核升级到 `@earendil-works/pi-ai` 1.3.0,插件同步自带 1.3.0,历史遗留的 0.87.1 overrides 必须移除(见下方 pi-ai 说明)。 |
|
|
132
134
|
| `0.2.0-rc.2` | `0.7.6` | 上一代内核线;修复企业账号模型目录缺项与国际版对话被渠道校验拦截,勿停留在有注册表回归的 0.7.2。 |
|
|
133
135
|
| `0.2.0-rc.1` | `0.7.0` | 0.7.1 起不再支持 rc.1,请停留本版。 |
|
|
134
136
|
| `0.1.5` – `0.1.7` | `0.6.5` | 旧内核最终版;0.7.0 起仅面向 0.2.0。 |
|
|
@@ -137,6 +139,8 @@ dsh plugin --profile web exec dsh-workbuddy-connect doctor --provider workbuddy-
|
|
|
137
139
|
|
|
138
140
|
历次更新(完整记录见 [releases](https://github.com/corrinehu/dsh-workbuddy-connect/releases)):
|
|
139
141
|
|
|
142
|
+
- **0.7.9**:恢复 DSH 0.2.1-rc.2 上国际版最大上下文窗口开关,修复延迟初始化及设置持久化(PR [#172](https://github.com/corrinehu/dsh-workbuddy-connect/pull/172),by @1Dreamer666);避免本地服务绑定到 fetch 禁用端口导致国际版 502(PR [#164](https://github.com/corrinehu/dsh-workbuddy-connect/pull/164),by @Xiong-Ziyi);同名积分包合并展示,减少重复条目。
|
|
143
|
+
- **0.7.8**:适配 DSH 0.2.1-rc.2;将官方原子写入工具打包到插件,避免依赖宿主暴露该模块;更新国内模型目录快照,区分 Hy3 / Hy3-X;优化推理检测结果展示,调整积分刷新按钮位置并修正悬停提示。感谢 @chenpiyanghappy 的 PR [#156](https://github.com/corrinehu/dsh-workbuddy-connect/pull/156)。
|
|
140
144
|
- **0.7.7**:适配 DSH 0.2.1-rc.1 内核:peer 收窄到 0.2.1-rc.1,插件自带的 `@earendil-works/pi-ai` 随内核升级到 1.3.0(profile 级历史遗留的 0.87.1 overrides 必须移除,否则插件无法加载);修复国际版与国内版推理档位检测停留「检测未完成」——上游把档位拒绝码改拼为 `invalid_parameter_value`([#143](https://github.com/corrinehu/dsh-workbuddy-connect/issues/143) / [#148](https://github.com/corrinehu/dsh-workbuddy-connect/issues/148),PR [#145](https://github.com/corrinehu/dsh-workbuddy-connect/pull/145));修复中文 Windows 控制台下注册表缺键诊断因 GBK 编码被误判(zh-CN 实机验证)。
|
|
141
145
|
- **0.7.6**:修复企业账号模型目录缺少 `glm-5.3-flashx`([#123](https://github.com/corrinehu/dsh-workbuddy-connect/issues/123)),修复国际版对话请求被上游渠道校验拦截([#139](https://github.com/corrinehu/dsh-workbuddy-connect/issues/139) / [#142](https://github.com/corrinehu/dsh-workbuddy-connect/issues/142))。
|
|
142
146
|
- **0.7.5**:修复切换会话后输入框余额与刷新按钮消失([#125](https://github.com/corrinehu/dsh-workbuddy-connect/issues/125) / [#132](https://github.com/corrinehu/dsh-workbuddy-connect/issues/132)),修复 WSL 调用 Windows 凭据解密程序的环境转发([#133](https://github.com/corrinehu/dsh-workbuddy-connect/issues/133)),README 收录社区项目([#130](https://github.com/corrinehu/dsh-workbuddy-connect/issues/130))。
|
|
@@ -147,9 +151,9 @@ dsh plugin --profile web exec dsh-workbuddy-connect doctor --provider workbuddy-
|
|
|
147
151
|
- **0.7.0**:适配 DSH 0.2.0 的设置服务改造,不再支持 0.1.x。
|
|
148
152
|
- **0.6.5**:0.1.x 线最终版本。
|
|
149
153
|
|
|
150
|
-
固定版本安装示例:`dsh plugin --profile web add dsh-workbuddy-connect@0.7.
|
|
154
|
+
固定版本安装示例:`dsh plugin --profile web add dsh-workbuddy-connect@0.7.9`。
|
|
151
155
|
|
|
152
|
-
**pi-ai 版本按内核线区分,不能混**:0.2.1-rc.1
|
|
156
|
+
**pi-ai 版本按内核线区分,不能混**:0.2.1-rc.1 / rc.2 内核线(分别对应插件 0.7.7 / 0.7.8–0.7.9)已升级到 `@earendil-works/pi-ai` 1.3.0(由插件自带),profile 级历史遗留的 `overrides: {'@earendil-works/pi-ai': '0.87.1'}` **必须移除**,否则插件会因加载到旧一代 pi-ai 而启动失败;0.2.0-rc.2 内核线(插件 0.7.6)仍要求 `^0.87.1`,在这条线上**不要**把 profile 级的 pi-ai 升到 1.x,第三方插件管理器的「可更新」提示不校验 peer 约束、不能照做([#86](https://github.com/corrinehu/dsh-workbuddy-connect/issues/86))。
|
|
153
157
|
|
|
154
158
|
## 免责声明
|
|
155
159
|
|
|
@@ -160,10 +164,11 @@ dsh plugin --profile web exec dsh-workbuddy-connect doctor --provider workbuddy-
|
|
|
160
164
|
|
|
161
165
|
## 相关项目 / 社区生态
|
|
162
166
|
|
|
163
|
-
- **[
|
|
167
|
+
- **[dsh-buddy-checkin](https://github.com/corrinehu/dsh-buddy-checkin)**:本项目作者维护的 WorkBuddy 国内版每日签到插件。
|
|
168
|
+
- **[dsh-workbuddy-switcher](https://github.com/ddGuo/dsh-workbuddy-switcher)**:社区维护的 WorkBuddy 账号管理与切换插件。
|
|
164
169
|
- **[hana-workbuddy-connect](https://github.com/miaoyongxu/hana-workbuddy-connect)**:社区维护的非官方适配项目,复用 `dsh-workbuddy-connect` 的部分实现,为 HanaAgent 接入 WorkBuddy / WorkBuddy AI 模型。
|
|
165
170
|
|
|
166
|
-
|
|
171
|
+
适用版本与安装要求请参阅各项目说明。除 `dsh-buddy-checkin` 外,以上项目均由第三方独立维护;收录不代表官方背书,也不构成本插件内部接口的稳定性或兼容性承诺。
|
|
167
172
|
|
|
168
173
|
## 致谢
|
|
169
174
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
@deepseek-ai/dsh-atomic-write 0.2.1-rc.2
|
|
2
|
+
Bundled from https://github.com/deepseek-ai/deepseek-harness/tree/main/packages/util/atomic-write
|
|
3
|
+
|
|
4
|
+
MIT License
|
|
5
|
+
|
|
6
|
+
Copyright (c) 2026 DeepSeek
|
|
7
|
+
|
|
8
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
10
|
+
in the Software without restriction, including without limitation the rights
|
|
11
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
13
|
+
furnished to do so, subject to the following conditions:
|
|
14
|
+
|
|
15
|
+
The above copyright notice and this permission notice shall be included in all
|
|
16
|
+
copies or substantial portions of the Software.
|
|
17
|
+
|
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
24
|
+
SOFTWARE.
|
package/lib/bin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { C as WORKBUDDY_VARIANTS, O as WorkBuddyUpstreamClient, Q as resolveAppVersion, S as CN_VARIANT, a as readHostHeartbeat, b as atRestKeyProviderFor, c as WORKBUDDY_CONNECT_VERSION, l as FALLBACK_WORKBUDDY_AI_MODELS, m as WorkBuddyCredentialStore, o as workbuddyHostHeartbeatPath, r as isHeartbeatProcessAlive, u as FALLBACK_WORKBUDDY_MODELS, w as variantFor } from "./host-heartbeat-
|
|
2
|
+
import { C as WORKBUDDY_VARIANTS, O as WorkBuddyUpstreamClient, Q as resolveAppVersion, S as CN_VARIANT, a as readHostHeartbeat, b as atRestKeyProviderFor, c as WORKBUDDY_CONNECT_VERSION, l as FALLBACK_WORKBUDDY_AI_MODELS, m as WorkBuddyCredentialStore, o as workbuddyHostHeartbeatPath, r as isHeartbeatProcessAlive, u as FALLBACK_WORKBUDDY_MODELS, w as variantFor } from "./host-heartbeat-SJaZ33tR.js";
|
|
3
3
|
import { realpathSync } from "node:fs";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
//#region src/bin.ts
|
package/lib/client.js
CHANGED
|
@@ -456,6 +456,37 @@ window.__ModuleLoader__.load({
|
|
|
456
456
|
color: "var(--dsw-alias-state-success-primary, #22a06b)"
|
|
457
457
|
};
|
|
458
458
|
/**
|
|
459
|
+
* Chip for a probe that came back `non-validating`.
|
|
460
|
+
*
|
|
461
|
+
* Amber rather than the success green: the upstream accepted a sentinel effort,
|
|
462
|
+
* which tells us it does not check the parameter — not that any level works.
|
|
463
|
+
* The state is an observation, and it used to share the green chip with the
|
|
464
|
+
* verified levels, which read as "these are the supported levels".
|
|
465
|
+
*/
|
|
466
|
+
const probeChipNotValidatingStyle = {
|
|
467
|
+
padding: "1px 8px",
|
|
468
|
+
borderRadius: 999,
|
|
469
|
+
fontSize: 11,
|
|
470
|
+
lineHeight: "18px",
|
|
471
|
+
background: "var(--dsw-alias-state-warning-subtle, rgba(214, 142, 23, 0.14))",
|
|
472
|
+
color: "var(--dsw-alias-state-warning-primary, #b26a00)"
|
|
473
|
+
};
|
|
474
|
+
/** Chip for a probe that never produced an answer (cancelled or failed). */
|
|
475
|
+
const probeChipUnknownStyle = {
|
|
476
|
+
padding: "1px 8px",
|
|
477
|
+
borderRadius: 999,
|
|
478
|
+
fontSize: 11,
|
|
479
|
+
lineHeight: "18px",
|
|
480
|
+
background: "var(--dsw-alias-fill-tertiary, rgba(127, 127, 127, 0.12))",
|
|
481
|
+
color: "var(--dsw-alias-label-tertiary, #8a8a8a)"
|
|
482
|
+
};
|
|
483
|
+
/** Pick the chip style that matches what the observation actually says. */
|
|
484
|
+
function probeChipStyleFor(result) {
|
|
485
|
+
if (result.validation === "validating" && result.efforts.length > 0) return modelBadgeChipStyle;
|
|
486
|
+
if (result.validation === "non-validating") return probeChipNotValidatingStyle;
|
|
487
|
+
return probeChipUnknownStyle;
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
459
490
|
* Localize an upstream promotional badge label, with an unknown-badge fallback.
|
|
460
491
|
*
|
|
461
492
|
* The CN catalog spells badges in Chinese (`限时免费`, `夜间折扣`); the
|
|
@@ -467,9 +498,32 @@ window.__ModuleLoader__.load({
|
|
|
467
498
|
function modelBadgeLabel(badge, t) {
|
|
468
499
|
if (badge === "限时免费") return t("badgeLimitedFree");
|
|
469
500
|
if (badge === "夜间折扣") return t("badgeNightDiscount");
|
|
501
|
+
if (badge === "夜间免费") return t("badgeNightFree");
|
|
502
|
+
if (badge === "独家限免") return t("badgeExclusiveFree");
|
|
470
503
|
if (badge === "Free now") return t("badgeFreeNow");
|
|
471
504
|
return badge;
|
|
472
505
|
}
|
|
506
|
+
/**
|
|
507
|
+
* Upstream badge labels that already say "you pay nothing", in either language.
|
|
508
|
+
*
|
|
509
|
+
* The catalog reports both `free: true` and a promotional badge for the same
|
|
510
|
+
* row (`hy3` carries `限时免费`, `step-5-preview` carries `独家限免`). Rendering
|
|
511
|
+
* the generic free chip on top of those printed the same fact twice and, worse,
|
|
512
|
+
* pushed the second chip past the row's horizontal budget — it collapsed into a
|
|
513
|
+
* sliver instead of wrapping. One chip per row is enough: a badge that already
|
|
514
|
+
* states the offer is preferred over the bare "Free".
|
|
515
|
+
*/
|
|
516
|
+
const FREE_STATEMENT_BADGES = /* @__PURE__ */ new Set([
|
|
517
|
+
"限时免费",
|
|
518
|
+
"夜间免费",
|
|
519
|
+
"独家限免",
|
|
520
|
+
"Free now"
|
|
521
|
+
]);
|
|
522
|
+
/** Whether a row still needs the generic free chip next to its badges. */
|
|
523
|
+
function needsFreeChip(free, badges) {
|
|
524
|
+
if (free !== true) return false;
|
|
525
|
+
return !(badges ?? []).some((badge) => FREE_STATEMENT_BADGES.has(badge));
|
|
526
|
+
}
|
|
473
527
|
const progressTrackStyle = {
|
|
474
528
|
height: 8,
|
|
475
529
|
overflow: "hidden",
|
|
@@ -637,6 +691,25 @@ window.__ModuleLoader__.load({
|
|
|
637
691
|
})]
|
|
638
692
|
});
|
|
639
693
|
}
|
|
694
|
+
/** Combine same-name packages for display; expiry data stays per package upstream. */
|
|
695
|
+
function groupCreditPackages(accounts) {
|
|
696
|
+
const groups = /* @__PURE__ */ new Map();
|
|
697
|
+
for (const account of accounts) {
|
|
698
|
+
const group = groups.get(account.packageName);
|
|
699
|
+
if (group === void 0) groups.set(account.packageName, {
|
|
700
|
+
packageName: account.packageName,
|
|
701
|
+
remain: account.remain,
|
|
702
|
+
size: account.size,
|
|
703
|
+
...account.unlimited === true ? { unlimited: true } : {}
|
|
704
|
+
});
|
|
705
|
+
else {
|
|
706
|
+
group.remain += account.remain;
|
|
707
|
+
group.size = group.size > 0 && account.size > 0 ? group.size + account.size : 0;
|
|
708
|
+
if (account.unlimited === true) group.unlimited = true;
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
return [...groups.values()];
|
|
712
|
+
}
|
|
640
713
|
/**
|
|
641
714
|
* One billing package as a labeled progress bar.
|
|
642
715
|
*
|
|
@@ -718,7 +791,7 @@ window.__ModuleLoader__.load({
|
|
|
718
791
|
children: [model.badges?.map((badge) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
719
792
|
style: modelBadgeChipStyle,
|
|
720
793
|
children: modelBadgeLabel(badge, t)
|
|
721
|
-
}, badge)), model.free
|
|
794
|
+
}, badge)), needsFreeChip(model.free, model.badges) ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
722
795
|
style: modelBadgeChipStyle,
|
|
723
796
|
children: t("freeModel")
|
|
724
797
|
}) : null]
|
|
@@ -822,7 +895,7 @@ window.__ModuleLoader__.load({
|
|
|
822
895
|
style: modelBadgeChipStyle,
|
|
823
896
|
children: modelBadgeLabel(badge, t)
|
|
824
897
|
}, badge)),
|
|
825
|
-
model.free
|
|
898
|
+
needsFreeChip(model.free, model.badges) ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
826
899
|
style: modelBadgeChipStyle,
|
|
827
900
|
children: t("freeModel")
|
|
828
901
|
}) : null
|
|
@@ -923,7 +996,9 @@ window.__ModuleLoader__.load({
|
|
|
923
996
|
style: quotaGroupStyle,
|
|
924
997
|
children: probe.candidates.map((id) => {
|
|
925
998
|
const result = probe.results.find((entry) => entry.id === id);
|
|
926
|
-
const
|
|
999
|
+
const row = models?.find((model) => model.id === id);
|
|
1000
|
+
const name = row?.name ?? result?.name ?? id;
|
|
1001
|
+
const declared = (row?.declaredEfforts?.length ?? 0) > 0 ? row.declaredEfforts.join(" / ") : row?.defaultEffort;
|
|
927
1002
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
928
1003
|
style: modelOfferStyle,
|
|
929
1004
|
children: [
|
|
@@ -932,8 +1007,8 @@ window.__ModuleLoader__.load({
|
|
|
932
1007
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: name }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
933
1008
|
style: probeRowEndStyle,
|
|
934
1009
|
children: [result === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
935
|
-
style:
|
|
936
|
-
children: result.validation === "validating" && result.efforts.length > 0 ? result.efforts.join(" / ") :
|
|
1010
|
+
style: probeChipStyleFor(result),
|
|
1011
|
+
children: result.validation === "validating" && result.efforts.length > 0 ? result.efforts.join(" / ") : result.validation === "non-validating" ? t("probeResultNotValidating") + (declared === void 0 ? "" : t("probeDeclaredSuffix", { levels: declared })) : t("probeResultUnknown")
|
|
937
1012
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
938
1013
|
type: "button",
|
|
939
1014
|
style: buttonStyle$2,
|
|
@@ -1433,13 +1508,13 @@ window.__ModuleLoader__.load({
|
|
|
1433
1508
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
|
|
1434
1509
|
style: quotaTitleStyle,
|
|
1435
1510
|
children: t("creditsDetailHeading")
|
|
1436
|
-
}), status.credits.accounts.filter((account) => account.packageName === "enterprise" || account.remain > 0 || account.unlimited === true).map((account
|
|
1511
|
+
}), groupCreditPackages(status.credits.accounts).filter((account) => account.packageName === "enterprise" || account.remain > 0 || account.unlimited === true).map((account) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CreditBar, {
|
|
1437
1512
|
label: account.packageName === "enterprise" ? t("packageEnterprise") : account.packageName,
|
|
1438
1513
|
remain: account.remain,
|
|
1439
1514
|
size: account.size,
|
|
1440
1515
|
unlimited: account.unlimited,
|
|
1441
1516
|
t
|
|
1442
|
-
},
|
|
1517
|
+
}, account.packageName))]
|
|
1443
1518
|
}), status.models === void 0 || status.models.length === 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1444
1519
|
style: quotaListStyle,
|
|
1445
1520
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
|
|
@@ -1560,7 +1635,7 @@ window.__ModuleLoader__.load({
|
|
|
1560
1635
|
lineHeight: "16px",
|
|
1561
1636
|
color: "var(--dsw-alias-label-tertiary)",
|
|
1562
1637
|
whiteSpace: "nowrap",
|
|
1563
|
-
padding: "0 4px"
|
|
1638
|
+
padding: "0 4px 0 0"
|
|
1564
1639
|
};
|
|
1565
1640
|
/**
|
|
1566
1641
|
* The badge's ↻ (#99): the only re-read after the mount fetch. An icon-only
|
|
@@ -1890,17 +1965,7 @@ window.__ModuleLoader__.load({
|
|
|
1890
1965
|
const showTooltip = tooltipVisible && !confirming && note === void 0;
|
|
1891
1966
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
1892
1967
|
style: wrapperStyle,
|
|
1893
|
-
onMouseEnter: () => {
|
|
1894
|
-
setTooltipVisible(true);
|
|
1895
|
-
},
|
|
1896
|
-
onMouseLeave: () => {
|
|
1897
|
-
setTooltipVisible(false);
|
|
1898
|
-
},
|
|
1899
1968
|
children: [
|
|
1900
|
-
credit === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1901
|
-
style: creditStyle,
|
|
1902
|
-
children: credit
|
|
1903
|
-
}),
|
|
1904
1969
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1905
1970
|
type: "button",
|
|
1906
1971
|
style: {
|
|
@@ -1929,6 +1994,10 @@ window.__ModuleLoader__.load({
|
|
|
1929
1994
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M20 12a8 8 0 1 1-2.34-5.66" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M20 4v4h-4" })]
|
|
1930
1995
|
})
|
|
1931
1996
|
}),
|
|
1997
|
+
credit === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1998
|
+
style: creditStyle,
|
|
1999
|
+
children: credit
|
|
2000
|
+
}),
|
|
1932
2001
|
visible && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
1933
2002
|
type: "button",
|
|
1934
2003
|
"aria-label": text,
|
|
@@ -1939,6 +2008,12 @@ window.__ModuleLoader__.load({
|
|
|
1939
2008
|
onClick: () => {
|
|
1940
2009
|
setConfirming(true);
|
|
1941
2010
|
},
|
|
2011
|
+
onMouseEnter: () => {
|
|
2012
|
+
setTooltipVisible(true);
|
|
2013
|
+
},
|
|
2014
|
+
onMouseLeave: () => {
|
|
2015
|
+
setTooltipVisible(false);
|
|
2016
|
+
},
|
|
1942
2017
|
onFocus: () => {
|
|
1943
2018
|
setTooltipVisible(true);
|
|
1944
2019
|
},
|
|
@@ -2772,7 +2847,7 @@ window.__ModuleLoader__.load({
|
|
|
2772
2847
|
};
|
|
2773
2848
|
//#endregion
|
|
2774
2849
|
//#region src/version.ts
|
|
2775
|
-
const WORKBUDDY_CONNECT_VERSION = "0.7.
|
|
2850
|
+
const WORKBUDDY_CONNECT_VERSION = "0.7.9";
|
|
2776
2851
|
//#endregion
|
|
2777
2852
|
//#region src/client/WorkBuddyConfigPage.tsx
|
|
2778
2853
|
/**
|
|
@@ -2815,15 +2890,15 @@ window.__ModuleLoader__.load({
|
|
|
2815
2890
|
//#region src/client/locales.ts
|
|
2816
2891
|
/** Plugin-card copy registered under the settings.workbuddy locale namespace. */
|
|
2817
2892
|
const en = {
|
|
2818
|
-
title: "DSH WorkBuddy Connect",
|
|
2819
|
-
intro: "Use the models in the WorkBuddy desktop app directly in DSH — zero configuration, ready out of the box.",
|
|
2820
|
-
titleAI: "DSH WorkBuddy AI Connect",
|
|
2893
|
+
title: "DSH WorkBuddy Connect (China)",
|
|
2894
|
+
intro: "Use the models in the WorkBuddy desktop app (China edition) directly in DSH — zero configuration, ready out of the box.",
|
|
2895
|
+
titleAI: "DSH WorkBuddy AI Connect (International)",
|
|
2821
2896
|
introAI: "Use the models in the WorkBuddy AI international desktop app directly in DSH — zero configuration, ready out of the box.",
|
|
2822
2897
|
expand: "Expand",
|
|
2823
2898
|
collapse: "Collapse",
|
|
2824
2899
|
loading: "Loading account…",
|
|
2825
2900
|
signedOut: "Not signed in",
|
|
2826
|
-
signedOutHint: "Sign in once in the WorkBuddy desktop app; this plugin follows that sign-in automatically.",
|
|
2901
|
+
signedOutHint: "Sign in once in the WorkBuddy desktop app (China edition); this plugin follows that sign-in automatically.",
|
|
2827
2902
|
signedOutHintAI: "Sign in once in the WorkBuddy AI desktop app; this plugin follows that sign-in automatically.",
|
|
2828
2903
|
signedInAs: "Signed in as {nickname}",
|
|
2829
2904
|
accessTokenExpires: "Access token expires {time} (refresh is automatic)",
|
|
@@ -2873,17 +2948,19 @@ window.__ModuleLoader__.load({
|
|
|
2873
2948
|
badgeLimitedFree: "Limited-time free",
|
|
2874
2949
|
badgeNightDiscount: "Night discount",
|
|
2875
2950
|
badgeFreeNow: "Free now",
|
|
2951
|
+
badgeExclusiveFree: "Exclusive free",
|
|
2952
|
+
badgeNightFree: "Free at night",
|
|
2876
2953
|
rate: "{rate} credits per message",
|
|
2877
2954
|
rateUnknown: "Price unavailable — refresh to update",
|
|
2878
2955
|
probeLabel: "Reasoning levels",
|
|
2879
2956
|
probeTooltipIdle: "Detect the reasoning levels {model} accepts",
|
|
2880
2957
|
probeTooltipVerified: "Accepted levels: {levels} · click to detect again",
|
|
2881
|
-
probeTooltipNotValidating: "This model
|
|
2958
|
+
probeTooltipNotValidating: "This model accepts any effort value, so the probe cannot tell the levels apart · click to re-probe",
|
|
2882
2959
|
probeTooltipRetry: "Detection did not complete · click to retry",
|
|
2883
2960
|
probeBubbleBody: "Send test requests to confirm the available reasoning levels. May consume a small amount of credit.",
|
|
2884
2961
|
probeConfirmAction: "Confirm",
|
|
2885
2962
|
probeNoteVerified: "Detected: {levels}",
|
|
2886
|
-
probeNoteNotValidating: "
|
|
2963
|
+
probeNoteNotValidating: "Could not probe the levels: the upstream does not validate the effort parameter — that is not the same as no level being supported",
|
|
2887
2964
|
probeNoteUnknown: "Detection did not complete",
|
|
2888
2965
|
probeNoteDismiss: "Got it",
|
|
2889
2966
|
probeHeading: "Reasoning effort detection",
|
|
@@ -2899,7 +2976,8 @@ window.__ModuleLoader__.load({
|
|
|
2899
2976
|
probeConfirmBody: "Send test requests to {model} to confirm its available reasoning levels. May consume a small amount of credit.",
|
|
2900
2977
|
cancel: "Cancel",
|
|
2901
2978
|
probeResultVerified: "Verified levels: {levels}",
|
|
2902
|
-
probeResultNotValidating: "
|
|
2979
|
+
probeResultNotValidating: "Upstream ignores the effort parameter",
|
|
2980
|
+
probeDeclaredSuffix: " (catalogue declares {levels})",
|
|
2903
2981
|
probeResultUnknown: "Detection did not complete",
|
|
2904
2982
|
probeResultAt: "Detected {time}",
|
|
2905
2983
|
probeResultEmpty: "No detectable models right now.",
|
|
@@ -2939,15 +3017,15 @@ window.__ModuleLoader__.load({
|
|
|
2939
3017
|
agentUpgradePrompt: "Please open {repository}, check its latest version, and install or update the plugin \"dsh-workbuddy-connect\" in my current DSH profile following the project README (the install command differs by profile). After upgrading, fully quit and restart DSH."
|
|
2940
3018
|
};
|
|
2941
3019
|
const zh = {
|
|
2942
|
-
title: "DSH WorkBuddy Connect",
|
|
2943
|
-
intro: "在 DSH 中直接使用 WorkBuddy
|
|
2944
|
-
titleAI: "DSH WorkBuddy AI Connect",
|
|
3020
|
+
title: "DSH WorkBuddy Connect(国内版)",
|
|
3021
|
+
intro: "在 DSH 中直接使用 WorkBuddy 国内版桌面 App 包含的模型,开箱即用,无需额外配置。",
|
|
3022
|
+
titleAI: "DSH WorkBuddy AI Connect(国际版)",
|
|
2945
3023
|
introAI: "在 DSH 中直接使用 WorkBuddy AI 国际版桌面 App 包含的模型,开箱即用,无需额外配置。",
|
|
2946
3024
|
expand: "展开",
|
|
2947
3025
|
collapse: "收起",
|
|
2948
3026
|
loading: "正在读取账号…",
|
|
2949
3027
|
signedOut: "未登录",
|
|
2950
|
-
signedOutHint: "在 WorkBuddy
|
|
3028
|
+
signedOutHint: "在 WorkBuddy 国内版桌面 App 里登录一次即可,插件会自动跟随当前登录的账号。",
|
|
2951
3029
|
signedOutHintAI: "在 WorkBuddy AI 国际版桌面 App 里登录一次即可,插件会自动跟随当前登录的账号。",
|
|
2952
3030
|
signedInAs: "已登录:{nickname}",
|
|
2953
3031
|
accessTokenExpires: "访问令牌 {time} 过期(自动续期)",
|
|
@@ -2997,17 +3075,19 @@ window.__ModuleLoader__.load({
|
|
|
2997
3075
|
badgeLimitedFree: "限时免费",
|
|
2998
3076
|
badgeNightDiscount: "夜间折扣",
|
|
2999
3077
|
badgeFreeNow: "限时免费",
|
|
3078
|
+
badgeExclusiveFree: "独家限免",
|
|
3079
|
+
badgeNightFree: "夜间免费",
|
|
3000
3080
|
rate: "{rate} 积分/次",
|
|
3001
3081
|
rateUnknown: "价格未知 — 刷新后更新",
|
|
3002
3082
|
probeLabel: "推理等级",
|
|
3003
3083
|
probeTooltipIdle: "检测 {model} 可用的推理档位",
|
|
3004
3084
|
probeTooltipVerified: "已接受:{levels} · 点击可重新检测",
|
|
3005
|
-
probeTooltipNotValidating: "
|
|
3085
|
+
probeTooltipNotValidating: "该模型接受任意档位参数,探测无法区分可用档位 · 点击可重新检测",
|
|
3006
3086
|
probeTooltipRetry: "检测未完成 · 点击重试",
|
|
3007
3087
|
probeBubbleBody: "发送探测请求以确认可用推理档位。可能消耗少量积分。",
|
|
3008
3088
|
probeConfirmAction: "确认检测",
|
|
3009
3089
|
probeNoteVerified: "已检测:{levels}",
|
|
3010
|
-
probeNoteNotValidating: "
|
|
3090
|
+
probeNoteNotValidating: "无法探测档位:上游不校验该参数 —— 这不等于该档位不被支持",
|
|
3011
3091
|
probeNoteUnknown: "检测未完成",
|
|
3012
3092
|
probeNoteDismiss: "知道了",
|
|
3013
3093
|
probeHeading: "推理档位检测",
|
|
@@ -3023,7 +3103,8 @@ window.__ModuleLoader__.load({
|
|
|
3023
3103
|
probeConfirmBody: "向 {model} 发送探测请求,以确认可用推理档位。可能消耗少量积分。",
|
|
3024
3104
|
cancel: "取消",
|
|
3025
3105
|
probeResultVerified: "已验证接受的档位:{levels}",
|
|
3026
|
-
probeResultNotValidating: "
|
|
3106
|
+
probeResultNotValidating: "上游不校验档位参数",
|
|
3107
|
+
probeDeclaredSuffix: "(目录声明 {levels})",
|
|
3027
3108
|
probeResultUnknown: "检测未完成",
|
|
3028
3109
|
probeResultAt: "检测于 {time}",
|
|
3029
3110
|
probeResultEmpty: "当前没有可检测的模型。",
|