dsh-connect-workbuddy 4.6.0 → 4.6.1
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 +13 -0
- package/lib/bin.js +1 -1
- package/lib/client.js +12 -0
- package/lib/{host-heartbeat-BxBvvAZq.js → host-heartbeat-BI7_lfoi.js} +1 -1
- package/lib/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 4.6.1 (2026-10-16)
|
|
4
|
+
|
|
5
|
+
> 版本号是 **patch**:只加了一行提示文案,没有行为、接口或配置变更。
|
|
6
|
+
|
|
7
|
+
### Fixes
|
|
8
|
+
|
|
9
|
+
- **模型区补一句「免费模型有时间段内定额 Token 上限,并非无限制使用。」(加粗)**
|
|
10
|
+
- **为什么单独一句、而不是接在上面那句说明后面**:目录里有一批 `creditMultiplier: 0` 的模型,卡片把它们显示为免费;而上游仍会在**某一时段内的 token 定额**用完时用 `6004` / `14003` 拒掉 —— **那个定额不是账单余额,充钱也解决不了**。把「免费=无限」当成事实的人,会把 `6004` 读成「插件坏了」进而去找一个没问题的账号(#56 的报告者就为这个误读花掉过时间),或者去充值(`#63` 报的正是这个读法)。上面那句是描述**事实**、灰度的说明文字,这一句纠正的是**预期**,所以它独立成行并加粗。
|
|
11
|
+
- **颜色刻意不变**:仍是三级灰,不换成主色也不换成错误色 —— 它陈述的是正常产品行为,不是故障;换成红色会读成报错横幅,而真正该被当成错误的信息在别处。
|
|
12
|
+
- **中英 1:1**:`row.tabFreeQuotaWarn`(`免费模型有时间段内定额 Token 上限,并非无限制使用。` / `Free models have a per-window token quota — they are not unlimited.`)。
|
|
13
|
+
- **守卫**:`tests/pool-card-render.spec.tsx` 新增 2 例 —— ① 提示会渲染、且带的是**加粗类**而不是又一条灰度提示;② 字重必须写在样式表里(断言 `.dsm-workbuddy-free-quota-warn{font-weight:600}`),防止有人改成内联 `style={{fontWeight:600}}` 之后这条规则在 CSS 里查不到。**变异验证**:① 删掉那段提示 → 红;② 从 CSS 删掉加粗规则 → 红。
|
|
14
|
+
- **顺带踩到并记录一个老坑**:这行的样式注释里写了反引号(引用 locale 键),而 `styles.ts` 是**模板字面量** —— 反引号会直接截断字符串,表现为 `tsc` 报 `',' expected`。同一个错在本次发布周期里犯了两次,已改为不带反引号的写法。
|
|
15
|
+
|
|
3
16
|
## 4.6.0 (2026-10-15)
|
|
4
17
|
|
|
5
18
|
> 版本号是 **minor** 而不是 patch:这一版新增了**用户可见的界面结论与控件**(池级「模型整体繁忙」判断、积分弹窗的打开期自动刷新、额度提示的呈现位置调整),按语义化版本属于特性。主线是**三处「界面上说了错话」的修正** —— 窗口左上角那个本来没有的方框、池卡片把模型问题说成账号问题、以及同一个账号在两个界面上状态不一致。三处都不会让测试或 CI 变红,只有人看界面才会发现,这也是它们能一路发出去的原因。
|
package/lib/bin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { C as defaultDesktopAuthDirs, F as WorkBuddyUpstreamClient, K as WORKBUDDY_APP_EXECUTABLE_ENV, O as legacyWorkbuddyOwnAuthPath, Q as findWorkbuddyAppExecutableWithSource, S as defaultDesktopAuthCandidates, a as readHostHeartbeat, c as WORKBUDDY_CONNECT_VERSION, d as FALLBACK_WORKBUDDY_MODELS_GLOBAL, j as workbuddyOwnAuthPath, l as piAiRuntimeInfo, o as workbuddyHostHeartbeatPath, ot as hostPeersInfo, r as isHeartbeatProcessAlive, u as FALLBACK_WORKBUDDY_MODELS, v as WORKBUDDY_AUTH_FILE_ENV, y as WorkBuddyCredentialStore } from "./host-heartbeat-
|
|
2
|
+
import { C as defaultDesktopAuthDirs, F as WorkBuddyUpstreamClient, K as WORKBUDDY_APP_EXECUTABLE_ENV, O as legacyWorkbuddyOwnAuthPath, Q as findWorkbuddyAppExecutableWithSource, S as defaultDesktopAuthCandidates, a as readHostHeartbeat, c as WORKBUDDY_CONNECT_VERSION, d as FALLBACK_WORKBUDDY_MODELS_GLOBAL, j as workbuddyOwnAuthPath, l as piAiRuntimeInfo, o as workbuddyHostHeartbeatPath, ot as hostPeersInfo, r as isHeartbeatProcessAlive, u as FALLBACK_WORKBUDDY_MODELS, v as WORKBUDDY_AUTH_FILE_ENV, y as WorkBuddyCredentialStore } from "./host-heartbeat-BI7_lfoi.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
|
@@ -3129,6 +3129,12 @@ window.__ModuleLoader__.load({
|
|
|
3129
3129
|
scrolling to the end of a long model list. */
|
|
3130
3130
|
.dsm-workbuddy-models-dirty{margin-left:8px;padding:1px 6px;border-radius:6px;background:var(--dsw-alias-state-warn-primary,#f59e0b);color:#1b1d22;font-size:11px;font-weight:600;line-height:16px;vertical-align:1px;white-space:nowrap}
|
|
3131
3131
|
.dsm-workbuddy-models-summary{margin:2px 0 0;color:var(--dsw-alias-label-tertiary,#999);font-size:12px;line-height:18px}
|
|
3132
|
+
/* The free-model quota warning (see the tabFreeQuotaWarn locale key). Bold on
|
|
3133
|
+
purpose, and it keeps the summary's own grey rather than the primary label
|
|
3134
|
+
colour: it has to stand out from the three lines around it WITHOUT reading as
|
|
3135
|
+
an error banner, because the fact it states is normal product behaviour
|
|
3136
|
+
rather than a failure. Weight is the only signal it needs. */
|
|
3137
|
+
.dsm-workbuddy-free-quota-warn{font-weight:600}
|
|
3132
3138
|
.dsm-workbuddy-model-list{display:flex;flex-direction:column;border:1px solid var(--dsw-alias-border-l2,#36373b);border-radius:10px;overflow:hidden}
|
|
3133
3139
|
.dsm-workbuddy-model{display:grid;grid-template-columns:minmax(0,1fr);gap:7px;padding:10px 12px;background:var(--dsw-alias-bg-layer-2,#232529);transition:opacity .16s}
|
|
3134
3140
|
.dsm-workbuddy-model-disabled{opacity:.55}
|
|
@@ -4750,6 +4756,10 @@ window.__ModuleLoader__.load({
|
|
|
4750
4756
|
className: "dsm-workbuddy-models-summary",
|
|
4751
4757
|
children: t("row.tabHint")
|
|
4752
4758
|
}),
|
|
4759
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
4760
|
+
className: "dsm-workbuddy-models-summary dsm-workbuddy-free-quota-warn",
|
|
4761
|
+
children: t("row.tabFreeQuotaWarn")
|
|
4762
|
+
}),
|
|
4753
4763
|
!activeRegionOn ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
4754
4764
|
className: "dsm-workbuddy-tab-off-notice",
|
|
4755
4765
|
children: t("row.tabOffNotice")
|
|
@@ -5930,6 +5940,7 @@ window.__ModuleLoader__.load({
|
|
|
5930
5940
|
"row.tabCn": "Domestic",
|
|
5931
5941
|
"row.tabGlobal": "Global",
|
|
5932
5942
|
"row.tabHint": "Each tab is a separate provider (workbuddy / workbuddy-global) with its own account, credits, and models. Both sides are live at once: different sessions can pick from either side, and changes on one tab never touch the other.",
|
|
5943
|
+
"row.tabFreeQuotaWarn": "Free models have a per-window token quota — they are not unlimited.",
|
|
5933
5944
|
"row.tabSwitchHint": "Uncheck to switch this provider off. Its models disappear from the DSH model picker; your account, credits, and model settings are kept and return when you check it again.",
|
|
5934
5945
|
"row.tabSwitchAria": "Offer the {region} provider to DSH",
|
|
5935
5946
|
"row.tabOffNotice": "This provider is switched off: none of its models are offered to DSH. Your account, credits, and model settings are kept — check the box above the tab to bring it back.",
|
|
@@ -6214,6 +6225,7 @@ window.__ModuleLoader__.load({
|
|
|
6214
6225
|
"row.tabCn": "国内版",
|
|
6215
6226
|
"row.tabGlobal": "国际版",
|
|
6216
6227
|
"row.tabHint": "每个 tab 是一个独立供应商(workbuddy / workbuddy-global),各有自己的账号、积分与模型。两边同时生效:不同会话可各选一边,一侧的改动不影响另一侧。",
|
|
6228
|
+
"row.tabFreeQuotaWarn": "免费模型有时间段内定额 Token 上限,并非无限制使用。",
|
|
6217
6229
|
"row.tabSwitchHint": "取消勾选即关闭该供应商:它的模型不再出现在 DSH 模型选择器里;账号、积分与模型设置都会保留,重新勾选即恢复。",
|
|
6218
6230
|
"row.tabSwitchAria": "是否向 DSH 提供{region}供应商",
|
|
6219
6231
|
"row.tabOffNotice": "该供应商已关闭:它的模型不会提供给 DSH。账号、积分与模型设置均已保留——勾选上方复选框即可恢复。",
|
|
@@ -3825,7 +3825,7 @@ function generationOf(version) {
|
|
|
3825
3825
|
//#endregion
|
|
3826
3826
|
//#region src/version.ts
|
|
3827
3827
|
/** The npm package version this build was produced from. */
|
|
3828
|
-
const WORKBUDDY_CONNECT_VERSION = "4.6.
|
|
3828
|
+
const WORKBUDDY_CONNECT_VERSION = "4.6.1";
|
|
3829
3829
|
//#endregion
|
|
3830
3830
|
//#region src/host-heartbeat.ts
|
|
3831
3831
|
/**
|
package/lib/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as isEncryptedFieldWrapper, A as workbuddyAccountId, B as modelIdOfBody, C as defaultDesktopAuthDirs, D as isVaultAccountId, E as isEncryptedCredentialError, F as WorkBuddyUpstreamClient, G as regionOf, H as parseReasoning, I as classifyUpstreamError, J as deriveAtRestKey, K as WORKBUDDY_APP_EXECUTABLE_ENV, L as declaredTools, M as CREDENTIAL_REJECTED_CODE, N as WORKBUDDY_FALLBACK_SYSTEM_PROMPT, O as legacyWorkbuddyOwnAuthPath, P as WorkBuddyCredentialRejectedError, R as isCredentialRejectedError, S as defaultDesktopAuthCandidates, T as hasEncryptedCredentialFields, U as parseUpstreamModel, V as parseCreditMultiplier, W as prepareChatBody, X as fetchAtRestKeyPayload, Y as deriveAtRestKeyId, Z as findWorkbuddyAppExecutable, _ as WORKBUDDY_AUTH_FILENAME, a as readHostHeartbeat, at as workbuddyAppExecutableCandidates, b as WorkBuddyEncryptedCredentialError, c as WORKBUDDY_CONNECT_VERSION, ct as withFileLock, d as FALLBACK_WORKBUDDY_MODELS_GLOBAL, et as isWorkbuddyBundle, f as WorkBuddyCatalog, g as ENCRYPTED_CREDENTIAL_CODE, h as fallbackModelsFor, i as processStartTimeMs, it as readAtRestKey, j as workbuddyOwnAuthPath, k as parseWorkBuddyAuth, l as piAiRuntimeInfo, lt as writeFileAtomic, m as deriveCatalog, n as clearHostHeartbeat, nt as macosNestedAppBundles, o as workbuddyHostHeartbeatPath, p as applyContextBudgets, q as clearAtRestKeyCache, r as isHeartbeatProcessAlive, rt as openEncryptedField, s as writeHostHeartbeat, st as resolveDshHome, t as WORKBUDDY_HOST_HEARTBEAT_FILENAME, tt as macosBundleExecutable, u as FALLBACK_WORKBUDDY_MODELS, v as WORKBUDDY_AUTH_FILE_ENV, w as defaultDesktopAuthPath, x as authFileName, y as WorkBuddyCredentialStore, z as knownRegionOf } from "./host-heartbeat-
|
|
1
|
+
import { $ as isEncryptedFieldWrapper, A as workbuddyAccountId, B as modelIdOfBody, C as defaultDesktopAuthDirs, D as isVaultAccountId, E as isEncryptedCredentialError, F as WorkBuddyUpstreamClient, G as regionOf, H as parseReasoning, I as classifyUpstreamError, J as deriveAtRestKey, K as WORKBUDDY_APP_EXECUTABLE_ENV, L as declaredTools, M as CREDENTIAL_REJECTED_CODE, N as WORKBUDDY_FALLBACK_SYSTEM_PROMPT, O as legacyWorkbuddyOwnAuthPath, P as WorkBuddyCredentialRejectedError, R as isCredentialRejectedError, S as defaultDesktopAuthCandidates, T as hasEncryptedCredentialFields, U as parseUpstreamModel, V as parseCreditMultiplier, W as prepareChatBody, X as fetchAtRestKeyPayload, Y as deriveAtRestKeyId, Z as findWorkbuddyAppExecutable, _ as WORKBUDDY_AUTH_FILENAME, a as readHostHeartbeat, at as workbuddyAppExecutableCandidates, b as WorkBuddyEncryptedCredentialError, c as WORKBUDDY_CONNECT_VERSION, ct as withFileLock, d as FALLBACK_WORKBUDDY_MODELS_GLOBAL, et as isWorkbuddyBundle, f as WorkBuddyCatalog, g as ENCRYPTED_CREDENTIAL_CODE, h as fallbackModelsFor, i as processStartTimeMs, it as readAtRestKey, j as workbuddyOwnAuthPath, k as parseWorkBuddyAuth, l as piAiRuntimeInfo, lt as writeFileAtomic, m as deriveCatalog, n as clearHostHeartbeat, nt as macosNestedAppBundles, o as workbuddyHostHeartbeatPath, p as applyContextBudgets, q as clearAtRestKeyCache, r as isHeartbeatProcessAlive, rt as openEncryptedField, s as writeHostHeartbeat, st as resolveDshHome, t as WORKBUDDY_HOST_HEARTBEAT_FILENAME, tt as macosBundleExecutable, u as FALLBACK_WORKBUDDY_MODELS, v as WORKBUDDY_AUTH_FILE_ENV, w as defaultDesktopAuthPath, x as authFileName, y as WorkBuddyCredentialStore, z as knownRegionOf } from "./host-heartbeat-BI7_lfoi.js";
|
|
2
2
|
import z from "@deepseek-ai/schemastery";
|
|
3
3
|
import { appendFile, mkdir, readFile } from "node:fs/promises";
|
|
4
4
|
import { randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "dsh-connect-workbuddy",
|
|
3
3
|
"displayName": "DSH Connect WorkBuddy",
|
|
4
4
|
"description": "把本机登录的 WorkBuddy 模型接入 DeepSeek Harness,并提供只读的积分概览与模型管理。",
|
|
5
|
-
"version": "4.6.
|
|
5
|
+
"version": "4.6.1",
|
|
6
6
|
"author": "dingminhua",
|
|
7
7
|
"copyright": "Copyright (c) 2026 LaoDing",
|
|
8
8
|
"license": "MIT",
|