dsh-connect-workbuddy 5.8.1 → 5.8.2
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 +25 -0
- package/lib/bin.js +1 -1
- package/lib/client.js +77 -3
- package/lib/{host-heartbeat-CM-09T4U.js → host-heartbeat-C9BFJEBM.js} +1 -1
- package/lib/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 5.8.2 (2026-10-24)
|
|
4
|
+
|
|
5
|
+
> 适配版本:跟随宿主 `0.2.1-rc.3`。rc.2 在 web-app 捆绑里新增了官方插件 `@deepseek-ai/dsh-client-ui-deepseek-model-label-1017`(给 DeepSeek 官方 Flash 行画「1017」发布徽章),它与本插件注册**同一个 `single` 槽**、**同一个默认优先级 0**——于是本插件的注册**抛错**,模型选择器里的负载徽章**静默消失**。本版修掉这一处,其余全部兼容。
|
|
6
|
+
|
|
7
|
+
### Fixes
|
|
8
|
+
|
|
9
|
+
- **模型选择器的标签槽位不再与宿主自带的 1017 徽章插件抢同一格(0.2.1-rc.2+)。**
|
|
10
|
+
- 该槽是 `kind: "single"`,`SlotCore.register()` 对同一优先级上的第二次注册**直接抛错**:`single slot "conversation.input.model.label" already has a registration at priority 0 … (lowest renders)`。两个插件都用默认 `0`,谁后注册谁抛。实测是本插件抛——应用自己的崩溃日志里逐字记着这句,以及本插件的 `model label slot failed to register`。因为 `catch` 只 `console.error`(刻意的:标签失注册不该让整页挂掉),页面上**只是徽章不见了**,没有任何可见报错,所以一直没被发现。
|
|
11
|
+
- 修法只做一件事:**换一个不碰撞的优先级**。`-0.5`(分数优先级合法)与宿主的默认 `0`、以及 `dsh-connect-qoder` 占用的 `-1` 都不碰撞,三个插件于是排成 `-1`(qoder)→ `-0.5`(本插件)→ `0`(宿主 1017)。取值只要求「不与别人碰撞」,不需要知道别人用了几。
|
|
12
|
+
- **刻意不引入插件之间的联动**(项目不变量,见 [`docs/DESIGN.md`](docs/DESIGN.md) §零):不读 `slots.entries(...)` 枚举同槽的其它注册、不把别家的行「转交」给别的插件的组件渲染、不为对方合成 `t` 席位、不依赖别人的优先级。曾经的转交方案能算「更客气」,但它要代渲染器合成对方的 props(`t` 来自对方注册时声明的 `locale:` 命名空间),还得约定一条跨插件转交方向否则递归——实测两个插件都转交时同一行被来回传递,直接 `RangeError: Maximum call stack size exceeded`。这不是本插件该承担的责任,整体撤除。
|
|
13
|
+
- **代价(已接受并记录)**:该槽是 `single`,一格只有一个赢家。「最低优先级渲染」意味着 `-0.5` 实际上**赢过**宿主的 `0`,因此本插件赢下该格时,别的插件在**它自己的行**上的装饰不会被合成(宿主的「1017」徽章不会出现在本插件渲染的那一行)。不是自己的模型行,一律给宿主契约的下限 `model.name`。这是**放弃联动换来的确定性**,不是待修缺陷;要改成联动,先改 `DESIGN.md` §零。
|
|
14
|
+
- **取值 `-0.5` 的定夺依据(不需要用户来选)**:宿主一方早有书面立场——`dsh-client-ui-deepseek-model-label-1017` 的 README「Known Limitations and Deferred Work」逐字写着「the two presentations do not compose automatically」,并把处置办法写成**在 profile patch 里禁用它**(配置层,不是运行时协商)。所以「两个徽标不合成」是宿主的官方立场,本项目的 §零 不变量与之一致。其余三条:1017 的 package description 就是「**Temporary** 1017 release badge」,README 承诺结构化发布标签上线后移除该包;它只装饰**一个**模型(`DeepSeek-V4.1-Flash`,限 `deepseek-official`/`deepseek-account` 两条线路),而本插件装饰**自己全部 WorkBuddy 模型行**(负载等级、促销价、夜间折扣、新模型标记);`single` 槽「最低优先级渲染」,`-0.5` 实际赢过宿主的 `0`——但选它是为了**不碰撞**而非谦让,且 1017 被移除后本插件自动成为该格唯一占用者。
|
|
15
|
+
|
|
16
|
+
### Docs
|
|
17
|
+
|
|
18
|
+
- 新增 [`docs/DSH-0.2.1-RC3-FOLLOWUP.md`](docs/DSH-0.2.1-RC3-FOLLOWUP.md):rc.3 复核全文,含逐面包比对与本次回归的完整证据链。
|
|
19
|
+
- [`docs/DSH-0.2.1-RC1-FOLLOWUP.md`](docs/DSH-0.2.1-RC1-FOLLOWUP.md) 补 §2.4 **订正**:原文把「rc 宿主上照常加载」归因为「闸门只校验 `@deepseek-ai/dsh*` + profile 用 `link:`」,**这是错的**——闸门确实校验,只是用 `semver.satisfies(rt, range, { includePrerelease: true })` 放行。范围本身无需改(裸 semver 判 false 的事实仍成立)。
|
|
20
|
+
|
|
21
|
+
### Tests
|
|
22
|
+
|
|
23
|
+
- 新增 [`tests/model-label-slot-coexistence.spec.tsx`](tests/model-label-slot-coexistence.spec.tsx)(6 条),跑**真实的 `SlotCore`**:宿主 1017 在场时注册不抛错、优先级与 `-1`/`0` 均不碰撞、自家行仍有徽章;外加「不做联动」一组——别家行只给纯目录名(**即使**另一个贡献者就在账本上)、源码不得出现 `slots.entries(...)` / 渲染别家组件 / `locale.bind`、注册只声明自家常量。
|
|
24
|
+
- 变异验证:把 `MODEL_LABEL_PRIORITY` 改回 `0` → 多条红并**复现同一句崩溃原文**;把注册换成会读账本的写法 → 「不做联动」那组红。
|
|
25
|
+
- `tests/dsh-line.spec.ts` 里「已知预发布悬崖」的注释按实测订正归因(断言本身不变,仍钉「裸 semver 判 false」)。
|
|
26
|
+
- 完整套件 **2225 通过 / 2 条按平台跳过**(此前 2219),`typecheck` 与 `build` 通过。
|
|
27
|
+
|
|
3
28
|
## 5.8.1 (2026-10-24)
|
|
4
29
|
|
|
5
30
|
> 修复版本:解决 DSH 会话在国内区**每一步**都 `400 / 11128` 的死循环。根因不是账号、额度、网络,也不是「宿主提示词要你改」——是插件的救援梯子对网关的**精确子串门**有一个可证明的盲区:`You are a coding agent powered by <model> model.` 这条 agent 身份从句,稀疏零宽扰动打不到,于是每次请求都逐字节原样上线被拒。**凭据、计费、provider 注册均未改动**;请求路径新增的定向破坏只插不可见字符(实测真实提示 **+0.26% 字节**),不改模型读到的任何一个词。
|
package/lib/bin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { C as WorkBuddyCredentialStore, D as defaultDesktopAuthDirs, E as defaultDesktopAuthCandidates, I as workbuddyOwnAuthPath, It as hostPeersInfo, M as legacyWorkbuddyOwnAuthPath, Ot as findWorkbuddyAppExecutableWithSource, S as WORKBUDDY_AUTH_FILE_ENV, St as WORKBUDDY_APP_EXECUTABLE_ENV, V as WorkBuddyUpstreamClient, a as readHostHeartbeat, c as WORKBUDDY_CONNECT_VERSION, d as rosterSeenPath, f as piAiRuntimeInfo, m as FALLBACK_WORKBUDDY_MODELS_GLOBAL, o as workbuddyHostHeartbeatPath, p as FALLBACK_WORKBUDDY_MODELS, r as isHeartbeatProcessAlive, u as describeRosterSeenPayload } from "./host-heartbeat-
|
|
2
|
+
import { C as WorkBuddyCredentialStore, D as defaultDesktopAuthDirs, E as defaultDesktopAuthCandidates, I as workbuddyOwnAuthPath, It as hostPeersInfo, M as legacyWorkbuddyOwnAuthPath, Ot as findWorkbuddyAppExecutableWithSource, S as WORKBUDDY_AUTH_FILE_ENV, St as WORKBUDDY_APP_EXECUTABLE_ENV, V as WorkBuddyUpstreamClient, a as readHostHeartbeat, c as WORKBUDDY_CONNECT_VERSION, d as rosterSeenPath, f as piAiRuntimeInfo, m as FALLBACK_WORKBUDDY_MODELS_GLOBAL, o as workbuddyHostHeartbeatPath, p as FALLBACK_WORKBUDDY_MODELS, r as isHeartbeatProcessAlive, u as describeRosterSeenPayload } from "./host-heartbeat-C9BFJEBM.js";
|
|
3
3
|
import { readFile } from "node:fs/promises";
|
|
4
4
|
import { realpathSync } from "node:fs";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
package/lib/client.js
CHANGED
|
@@ -9416,8 +9416,64 @@ window.__ModuleLoader__.load({
|
|
|
9416
9416
|
});
|
|
9417
9417
|
}
|
|
9418
9418
|
/**
|
|
9419
|
+
* The priority this plugin registers the model-label slot at.
|
|
9420
|
+
*
|
|
9421
|
+
* WHY A DISTINCT PRIORITY AT ALL. `conversation.input.model.label` is a
|
|
9422
|
+
* `single` slot: it holds ONE cell, and `SlotCore.register()` THROWS when a
|
|
9423
|
+
* second registration claims one priority — "single slot … already has a
|
|
9424
|
+
* registration at priority 0 — register at a different priority to shadow it
|
|
9425
|
+
* (lowest renders)". The default priority is `0`, which is also what the host's
|
|
9426
|
+
* own shipped contributor uses
|
|
9427
|
+
* (`@deepseek-ai/dsh-client-ui-deepseek-model-label-1017`, in the web-app
|
|
9428
|
+
* bundle from 0.2.1-rc.2 on), so registering at `0` made the two race. Measured
|
|
9429
|
+
* on 0.2.1-rc.3 that is US: the app's own crash log records
|
|
9430
|
+
* `single slot "conversation.input.model.label" already has a registration at
|
|
9431
|
+
* priority 0 (registered by Kb)` and this entry's catch-all line
|
|
9432
|
+
* `model label slot failed to register`, and because that catch only logs, the
|
|
9433
|
+
* badge simply vanished from the picker with no visible error.
|
|
9434
|
+
*
|
|
9435
|
+
* WHY NOT `-1`. That is `dsh-connect-qoder`'s slot priority, and two plugins on
|
|
9436
|
+
* one priority collide for exactly the same reason `0` did.
|
|
9437
|
+
*
|
|
9438
|
+
* WHY `-0.5` IS SAFE AND SELF-CONTAINED. The value only has to be distinct from
|
|
9439
|
+
* whatever else claims the cell; `-0.5` is legal, sorts without collision
|
|
9440
|
+
* against both `-1` and `0`, and requires knowing nothing about the other
|
|
9441
|
+
* plugins. See the "不做插件联动" invariant in `docs/DESIGN.md`.
|
|
9442
|
+
*
|
|
9443
|
+
* WHAT THIS PLUGIN DELIBERATELY DOES NOT DO. It does not read the slot ledger,
|
|
9444
|
+
* does not look for another plugin's registration, and does not render another
|
|
9445
|
+
* plugin's component. Foreign rows get the plain catalog name, which is exactly
|
|
9446
|
+
* the slot's documented minimum. Inter-plugin chaining is out of scope by
|
|
9447
|
+
* project policy (`docs/DESIGN.md` §零) — and that policy is NOT stricter than
|
|
9448
|
+
* the Host's own: the shipped `dsh-client-ui-deepseek-model-label-1017` README
|
|
9449
|
+
* lists, under "Known Limitations and Deferred Work", that "another model-label
|
|
9450
|
+
* plugin at the same priority conflicts; the two presentations do not compose
|
|
9451
|
+
* automatically", and the remedy it documents is DISABLING it in the profile
|
|
9452
|
+
* patch — a configuration decision, not a runtime negotiation. A consequence is
|
|
9453
|
+
* that when this plugin wins the cell, another contributor's decoration on ITS
|
|
9454
|
+
* rows is not composed; that is an accepted, documented trade-off rather than
|
|
9455
|
+
* something to work around at runtime.
|
|
9456
|
+
*
|
|
9457
|
+
* WHY WINNING IS THE RIGHT SIDE OF THAT TRADE. 1017 is a TEMPORARY marker
|
|
9458
|
+
* (its own package description: "Temporary 1017 release badge …"; its README
|
|
9459
|
+
* says to remove the package and its bundle row once structured release labels
|
|
9460
|
+
* replace it) and it decorates exactly ONE model, on two provider routes. This
|
|
9461
|
+
* plugin decorates every WorkBuddy model row with load level, promo price and
|
|
9462
|
+
* the new-model mark — its core surface. Trading a long-lived feature for a
|
|
9463
|
+
* temporary marker is the wrong way round, and when 1017 is removed this
|
|
9464
|
+
* plugin is already the only occupant of the cell.
|
|
9465
|
+
*
|
|
9466
|
+
* Exported so the test asserts against the value that actually ships rather
|
|
9467
|
+
* than a copy of it.
|
|
9468
|
+
*/
|
|
9469
|
+
const MODEL_LABEL_PRIORITY = -.5;
|
|
9470
|
+
/**
|
|
9419
9471
|
* The label for one model row in the host's picker.
|
|
9420
9472
|
*
|
|
9473
|
+
* Self-contained by design: a model this plugin owns gets the full label, and
|
|
9474
|
+
* anything else gets the plain catalog name. There is no forwarding and no
|
|
9475
|
+
* consultation of other plugins' registrations — see `MODEL_LABEL_PRIORITY`.
|
|
9476
|
+
*
|
|
9421
9477
|
* @param props - The host's model identity and the placement of this label.
|
|
9422
9478
|
* @returns The catalog name, the promotion chip when one holds, and the load
|
|
9423
9479
|
* badge when the probe reported one.
|
|
@@ -10775,12 +10831,30 @@ window.__ModuleLoader__.load({
|
|
|
10775
10831
|
* example is the official DeepSeek "1017" release badge, which is the same
|
|
10776
10832
|
* job — a coloured marker beside a model name.
|
|
10777
10833
|
*
|
|
10778
|
-
*
|
|
10779
|
-
*
|
|
10834
|
+
* WHY A NEGATIVE PRIORITY (host 0.2.1-rc.2 and later). This is a `single`
|
|
10835
|
+
* slot: it holds ONE cell, and `SlotCore.register()` THROWS when a second
|
|
10836
|
+
* registration claims the same priority — "single slot … already has a
|
|
10837
|
+
* registration at priority 0 — register at a different priority to shadow
|
|
10838
|
+
* it (lowest renders)". The host itself now ships a contributor here
|
|
10839
|
+
* (`@deepseek-ai/dsh-client-ui-deepseek-model-label-1017`, in the web-app
|
|
10840
|
+
* bundle from rc.2 on) that registers at the default 0, so registering at
|
|
10841
|
+
* 0 makes the two race: whichever lands second throws. Measured on
|
|
10842
|
+
* 0.2.1-rc.3 that is US — the app's own crash log records, verbatim,
|
|
10843
|
+
* "single slot \"conversation.input.model.label\" already has a
|
|
10844
|
+
* registration at priority 0 (registered by Kb)" plus this entry's
|
|
10845
|
+
* catch-all line "model label slot failed to register" twice per page
|
|
10846
|
+
* load, which is the badge silently disappearing from the picker.
|
|
10847
|
+
*
|
|
10848
|
+
* See `MODEL_LABEL_PRIORITY` in `./WorkBuddyModelLabel.tsx` for the full
|
|
10849
|
+
* ordering, the measured evidence, and the deliberate absence of any
|
|
10850
|
+
* inter-plugin coordination (project invariant, `docs/DESIGN.md` §六).
|
|
10780
10851
|
*/
|
|
10781
10852
|
const registerModelLabel = () => {
|
|
10782
10853
|
try {
|
|
10783
|
-
return ctx.slots.inject("conversation.input.model.label", () => ctx.slots.register({
|
|
10854
|
+
return ctx.slots.inject("conversation.input.model.label", () => ctx.slots.register({
|
|
10855
|
+
name: "conversation.input.model.label",
|
|
10856
|
+
priority: MODEL_LABEL_PRIORITY
|
|
10857
|
+
}, WorkBuddyModelLabel));
|
|
10784
10858
|
} catch (error) {
|
|
10785
10859
|
console.error("[dsh-connect-workbuddy] model label slot failed to register (host provider unaffected):", error);
|
|
10786
10860
|
return;
|
|
@@ -6806,7 +6806,7 @@ function describeRosterSeenPayload(raw) {
|
|
|
6806
6806
|
//#endregion
|
|
6807
6807
|
//#region src/version.ts
|
|
6808
6808
|
/** The npm package version this build was produced from. */
|
|
6809
|
-
const WORKBUDDY_CONNECT_VERSION = "5.8.
|
|
6809
|
+
const WORKBUDDY_CONNECT_VERSION = "5.8.2";
|
|
6810
6810
|
//#endregion
|
|
6811
6811
|
//#region src/host-heartbeat.ts
|
|
6812
6812
|
/**
|
package/lib/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as parseCreditMultiplier, A as isEncryptedCredentialError, At as isWorkbuddyBundle, B as WorkBuddyCredentialRejectedError, C as WorkBuddyCredentialStore, Ct as clearAtRestKeyCache, D as defaultDesktopAuthDirs, Dt as findWorkbuddyAppExecutable, E as defaultDesktopAuthCandidates, Et as fetchAtRestKeyPayload, F as workbuddyAccountId, Ft as workbuddyAppExecutableCandidates, G as forceNeutralHead, H as channelGateMemberOf, I as workbuddyOwnAuthPath, J as isCredentialRejectedError, K as isContextTooLongBody, L as CONTEXT_OVERFLOW_MARKER, Lt as resolveDshHome, M as legacyWorkbuddyOwnAuthPath, Mt as macosNestedAppBundles, N as parseWorkBuddyAuth, Nt as openEncryptedField, O as defaultDesktopAuthPath, P as preferredAccountName, Pt as readAtRestKey, Q as openingEvidenceOfBody, R as CREDENTIAL_REJECTED_CODE, Rt as withFileLock, S as WORKBUDDY_AUTH_FILE_ENV, St as WORKBUDDY_APP_EXECUTABLE_ENV, T as authFileName, Tt as deriveAtRestKeyId, U as classifyUpstreamError, V as WorkBuddyUpstreamClient, W as declaredTools, X as knownRegionOf, Y as isFirstMessageGateBody, Z as modelIdOfBody, _ as deriveCatalog, _t as parseQueueAnswer, a as readHostHeartbeat, at as requestEvidenceOf, b as ENCRYPTED_CREDENTIAL_CODE, bt as imageDefaultFor, c as WORKBUDDY_CONNECT_VERSION, ct as defaultOffModelIds, dt as offRefused, et as parseReasoning, f as piAiRuntimeInfo, ft as recordRefusal, g as applyContextBudgets, gt as pickImageModel, h as WorkBuddyCatalog, ht as WorkBuddyImageError, i as processStartTimeMs, it as regionOf, j as isVaultAccountId, jt as macosBundleExecutable, k as hasEncryptedCredentialFields, kt as isEncryptedFieldWrapper, l as createFileRosterSeenStore, lt as lastRefusalFor, m as FALLBACK_WORKBUDDY_MODELS_GLOBAL, mt as DEFAULT_IMAGE_SIZE, n as clearHostHeartbeat, nt as perturbChannelFingerprints, o as workbuddyHostHeartbeatPath, ot as attachBusyLevels, p as FALLBACK_WORKBUDDY_MODELS, pt as withEffectiveOff, q as isConversationIdGateBody, r as isHeartbeatProcessAlive, rt as prepareChatBody, s as writeHostHeartbeat, st as REFUSES_OFF_MODEL_IDS, t as WORKBUDDY_HOST_HEARTBEAT_FILENAME, tt as parseUpstreamModel, ut as offDefaultFor, v as fallbackModelsFor, vt as queueNoticeText, w as WorkBuddyEncryptedCredentialError, wt as deriveAtRestKey, x as WORKBUDDY_AUTH_FILENAME, xt as nativeModalityOf, y as withoutRouters, yt as NATIVE_MODALITY_BY_MODEL_ID, z as WORKBUDDY_FALLBACK_SYSTEM_PROMPT, zt as writeFileAtomic } from "./host-heartbeat-
|
|
1
|
+
import { $ as parseCreditMultiplier, A as isEncryptedCredentialError, At as isWorkbuddyBundle, B as WorkBuddyCredentialRejectedError, C as WorkBuddyCredentialStore, Ct as clearAtRestKeyCache, D as defaultDesktopAuthDirs, Dt as findWorkbuddyAppExecutable, E as defaultDesktopAuthCandidates, Et as fetchAtRestKeyPayload, F as workbuddyAccountId, Ft as workbuddyAppExecutableCandidates, G as forceNeutralHead, H as channelGateMemberOf, I as workbuddyOwnAuthPath, J as isCredentialRejectedError, K as isContextTooLongBody, L as CONTEXT_OVERFLOW_MARKER, Lt as resolveDshHome, M as legacyWorkbuddyOwnAuthPath, Mt as macosNestedAppBundles, N as parseWorkBuddyAuth, Nt as openEncryptedField, O as defaultDesktopAuthPath, P as preferredAccountName, Pt as readAtRestKey, Q as openingEvidenceOfBody, R as CREDENTIAL_REJECTED_CODE, Rt as withFileLock, S as WORKBUDDY_AUTH_FILE_ENV, St as WORKBUDDY_APP_EXECUTABLE_ENV, T as authFileName, Tt as deriveAtRestKeyId, U as classifyUpstreamError, V as WorkBuddyUpstreamClient, W as declaredTools, X as knownRegionOf, Y as isFirstMessageGateBody, Z as modelIdOfBody, _ as deriveCatalog, _t as parseQueueAnswer, a as readHostHeartbeat, at as requestEvidenceOf, b as ENCRYPTED_CREDENTIAL_CODE, bt as imageDefaultFor, c as WORKBUDDY_CONNECT_VERSION, ct as defaultOffModelIds, dt as offRefused, et as parseReasoning, f as piAiRuntimeInfo, ft as recordRefusal, g as applyContextBudgets, gt as pickImageModel, h as WorkBuddyCatalog, ht as WorkBuddyImageError, i as processStartTimeMs, it as regionOf, j as isVaultAccountId, jt as macosBundleExecutable, k as hasEncryptedCredentialFields, kt as isEncryptedFieldWrapper, l as createFileRosterSeenStore, lt as lastRefusalFor, m as FALLBACK_WORKBUDDY_MODELS_GLOBAL, mt as DEFAULT_IMAGE_SIZE, n as clearHostHeartbeat, nt as perturbChannelFingerprints, o as workbuddyHostHeartbeatPath, ot as attachBusyLevels, p as FALLBACK_WORKBUDDY_MODELS, pt as withEffectiveOff, q as isConversationIdGateBody, r as isHeartbeatProcessAlive, rt as prepareChatBody, s as writeHostHeartbeat, st as REFUSES_OFF_MODEL_IDS, t as WORKBUDDY_HOST_HEARTBEAT_FILENAME, tt as parseUpstreamModel, ut as offDefaultFor, v as fallbackModelsFor, vt as queueNoticeText, w as WorkBuddyEncryptedCredentialError, wt as deriveAtRestKey, x as WORKBUDDY_AUTH_FILENAME, xt as nativeModalityOf, y as withoutRouters, yt as NATIVE_MODALITY_BY_MODEL_ID, z as WORKBUDDY_FALLBACK_SYSTEM_PROMPT, zt as writeFileAtomic } from "./host-heartbeat-C9BFJEBM.js";
|
|
2
2
|
import z from "@deepseek-ai/schemastery";
|
|
3
3
|
import { appendFile, mkdir, open, readFile, rename, rm, stat, writeFile } 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": "5.8.
|
|
5
|
+
"version": "5.8.2",
|
|
6
6
|
"author": "dingminhua",
|
|
7
7
|
"copyright": "Copyright (c) 2026 LaoDing",
|
|
8
8
|
"license": "MIT",
|