dsh-connect-workbuddy 4.6.3 → 4.6.4

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 CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.6.4 (2026-10-16)
4
+
5
+ > 版本号是 **patch**:只动开发脚本与测试,**不改插件运行时行为**。
6
+
7
+ ### Fixes
8
+
9
+ - **`probe-region-token-accounting.mjs` 补上 `tool-result` 与高熵类 —— 这正是 #59 那个「预测不出上游数字」缺口的关键一格(issue #59)**
10
+ - **为什么补**:本仓库的探针原先只有 `prose` / `code` / `json` 三档。而一份真实长会话的 body 构成(`WORKBUDDY_BODY_REPORT` 抓下来的 35 个真实请求)是 **`tool-result` 占 47% 字符**,是三档里**一档都没覆盖**的内容类别。用三档去预测,结论是「上游报的数比最贵档还高 28%」,看起来像发现了新机制;而把实测的 `tool-result` 系数(**455.5 tok/1k**,跨区域 455.5 vs 455.6)代回去,**缺口从 28% 收到约 1%**。**缺的是系数表的一行,不是新机制。**
11
+ - **新增的 `--kind`**:`base64`(实测 2.50× 于 `code`)、`hex`(2.04×)、`ansi`(1.92×)、`proc`(1.63×)、`tool-result`。报告者的实测显示**高熵内容是长会话里最贵的一类**,而 base64 恰是 `code` 的 2.5 倍 —— 老表把 `code` 当成天花板,因此系统性低估。
12
+ - **生成器必须是确定性的**:两个区域要收到**逐字节相同**的填充文本,否则测出来的比值是在量生成器而不是量网关。故不读时钟、不读随机源、不读文件系统;用固定种子的 32 位 LCG。**这一点由测试直接断言源码文本**(`Math.random` / `Date.now` / `new Date` / `fs` 调用一律不得出现),因为行为断言只能证明「这次恰好相同」。
13
+ - **★ 写测试时抓到一个真缺陷**:初版生成器是 `(state >>> 8) % alphabet.length` —— 只取 LCG 状态的 log2(L) 位,**在 L=64 时每 16384 字符就重复一次**,于是 65536 字符的填充里同一段 16 KiB 出现四次。**短周期正是这个类存在要避免的「可压缩」**:一个能看出重复的分词器会少收 token,于是实测水位被**低估**,而这正是原始 #59 现象的形状。修法是在取模前先做两轮 xorshift-multiply 混合(实测 12 万字符内无周期)。
14
+ - **采样规则**(写进模块注释):**不得只取日志开头**。报告者实测同一类真实 `tool-result` 文本,取开头 12k 字符得 322.6 tok/1k,全时段均匀采样得 455.5 —— **差 41%**。填充文本不仅要跨区域逐字节相同,还要与真实分布同构,否则量到的是一类内容的系数、却被当作整份历史用。
15
+ - **`tool-result` 刻意不走 `entropy()`**:逐字符打散模板会产出没有任何工具会发出的文本,而这个类的**全部意义就在于内容形状**(标识符、花括号、引号键、路径、对齐数字)真实。它的变化来自「每轮以递进的偏移重复模板」,因此同样没有短周期。
16
+ - **守卫**:新增 `tests/probe-fillers.spec.ts`,8 例 —— ① 十个 `语言:类别` 组合都存在;② 每次生成逐字节相同;③ **源码文本里不得出现随机源或时钟**;④ **不得有 64 / 1024 / 16384 的周期**(这一条就是抓到上面那个真缺陷的那条);⑤ `tool-result` 仍像 tool-result(含 `export function` / `"path"` / `await fs.readFile`,且中文版确实是中文);⑥ `ansi` 是**真的控制字节** `<ESC>[31m`,不是字面的 `\u001B` 六字符;⑦ 结构化类别里不得出现 `NaN`;⑧ 每个填充长度都超过默认 `--chars=12000`。
17
+ - **第 ⑦ 条的取法有讲究,写在测试注释里**:`NaN` 只查 `ansi` / `proc` / `tool-result` 三类 —— 它们是**格式化**出来的(`\u001B[3${n}m`、`.padStart`),出现 `NaN` 必是缺陷;而 base64 / hex 是从字母表里取的,字母表本身含 `N`、`a`、`N`,子串会以约 64³ 分之一的概率偶然出现。初版断言查了全部类别,**是错的**(会在无关的地方随机转红)—— 这是我写完立刻遇到并改掉的。
18
+ - **变异验证(5 个变异,全部转红,各自只打中应打中的用例)**:① 去掉取模前的混合(重现 16384 周期)→ 红 1 例;② 顺序循环字母表(64 周期)→ 红 1 例;③ 改用 `Math.random` → 红 1 例;④ `ansi` 退化成字面 `\u001B` → 红 1 例;⑤ `tool-result` 逐字符打散成乱码 → 红 1 例。
19
+ - **来源**:本条的补类与采样规则由 issue #59 的报告者提出并附实测数据(`tool-result` 455.5、高熵四档、尺寸梯度 12k→500k),本仓库按其建议固化。**探针脚本不随包发布**(`files` 白名单不含 `scripts/`),所以这一版与已安装插件的行为无关。
20
+
3
21
  ## 4.6.3 (2026-10-16)
4
22
 
5
23
  > 版本号是 **patch**:没有接口、配置或界面变更,但它修的是一个**所有国际版模型全部不可用**的缺陷。
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-BnaHx2f6.js";
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-BvxLN-O5.js";
3
3
  import { realpathSync } from "node:fs";
4
4
  import { fileURLToPath } from "node:url";
5
5
  //#region src/bin.ts
@@ -3907,7 +3907,7 @@ function generationOf(version) {
3907
3907
  //#endregion
3908
3908
  //#region src/version.ts
3909
3909
  /** The npm package version this build was produced from. */
3910
- const WORKBUDDY_CONNECT_VERSION = "4.6.3";
3910
+ const WORKBUDDY_CONNECT_VERSION = "4.6.4";
3911
3911
  //#endregion
3912
3912
  //#region src/host-heartbeat.ts
3913
3913
  /**
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-BnaHx2f6.js";
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-BvxLN-O5.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.3",
5
+ "version": "4.6.4",
6
6
  "author": "dingminhua",
7
7
  "copyright": "Copyright (c) 2026 LaoDing",
8
8
  "license": "MIT",