dsh-workbuddy-connect 0.7.0 → 0.7.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/README.en.md CHANGED
@@ -60,7 +60,8 @@ Prerequisite: the WorkBuddy desktop app is installed and signed in. The plugin r
60
60
 
61
61
  | Plugin | Required DSH core | Desktop app |
62
62
  |---|---|---|
63
- | **0.7.0 (the 0.2.0 era)** | **supports `0.2.0-rc.1` / `0.2.0-rc.2` only** (`0.1.5` / `0.1.6` / `0.1.7` are no longer covered — those users should stay on `0.6.5`), verified on a real `0.2.0-rc.2` host (web: loading, both CN and international catalogs, encrypted credentials, status routes all fine). This is the release that adapts to DSH `0.2.0`'s settings-service rework — `0.2.0` replaced the service with a Config-derived form facade that no longer installs sections, so earlier releases lose their settings there | desktop builds bundling the `0.2.0` core (preview / nightly) |
63
+ | **0.7.1 (current stable)** | **supports `0.2.0-rc.2` only** (`0.2.0-rc.1` users should stay on `0.7.0`), and narrows the `@earendil-works/pi-ai` peer from `^0.85.1 \|\| ^0.87.1` to **`^0.87.1`**: pnpm profiles upgraded in place from `0.6.x` no longer keep a stale `pi-ai@0.85.1` that still satisfies the range and re-creates the two-generation mixing of [#69](https://github.com/corrinehu/dsh-workbuddy-connect/issues/69) ([#74](https://github.com/corrinehu/dsh-workbuddy-connect/issues/74)). **The in-place upgrade from `0.6.5` is verified**: after editing `package.json` and running `pnpm install`, the plugin resolves `pi-ai@0.87.1` with no overrides; the old dual-arm behavior of `0.7.0` admitting `0.85.1` was reproduced as the control. | desktop builds bundling the `0.2.0-rc.2` core (preview / nightly) |
64
+ | **0.7.0 (the 0.2.0-era debut)** | **supports `0.2.0-rc.1` / `0.2.0-rc.2` only** (`0.1.5` / `0.1.6` / `0.1.7` are no longer covered — those users should stay on `0.6.5`), verified on a real `0.2.0-rc.2` host (web: loading, both CN and international catalogs, encrypted credentials, status routes all fine). This is the release that adapts to DSH `0.2.0`'s settings-service rework — `0.2.0` replaced the service with a Config-derived form facade that no longer installs sections, so earlier releases lose their settings there. **`0.7.1` drops `rc.1`** | desktop builds bundling the `0.2.0` core (preview / nightly) |
64
65
  | **0.6.0 (dual-UI adaptive)** | `0.1.5-rc.1` / `rc.2` / `rc.3`; the `0.1.6-alpha` line (incl. `alpha.1` / `alpha.2`) and `0.1.6` stable; verified against `0.1.7-alpha.1` (`0.1.7` stable is inside the range too). **Subsequent `0.1.x` prereleases (e.g. `0.1.8-alpha.x`) DO fall inside the `^0.1.7-alpha.1` arm** — the host's compatibility check resolves peer ranges with includePrerelease semantics (our earlier "not covered" claim was wrong; corrected here); prereleases crossing into `0.2.0` are the ones that need an explicit peer-range extension | `2.0.7`+ works today; desktop builds bundling `0.1.6+` will work too |
65
66
  | **0.6.5 (final release of the `0.1.x` line)** | adds `0.2.0-rc.1` on top of the `0.6.0` surface (`0.1.5` / `0.1.6` / `0.1.7` / `0.2.0-rc.1`), verified on a real `0.2.0-rc.1` host (web: loading, catalogs, encrypted credentials, chat & image round-trips all fine). Releases up to and including `0.6.4` do not carry that range and are skipped wholesale by DSH `0.2.0-rc.1` (see [#63](https://github.com/corrinehu/dsh-workbuddy-connect/issues/63)) | desktop builds bundling `0.1.x` cores (incl. the released `2.0.7`+ line); `0.2.0-rc.1` works too (verified on web; desktop not yet verified) |
66
67
  | **0.3.2 – 0.5.4** (international support since `0.5.0`) | the `0.1.5-rc.1` line only (no `0.1.6+`; see [#41](https://github.com/corrinehu/dsh-workbuddy-connect/issues/41)) | `2.0.7`+ (bundled core `0.1.5-rc.1`) |
@@ -95,7 +96,8 @@ Prerequisite: the WorkBuddy desktop app is installed and signed in. The plugin r
95
96
  ```
96
97
 
97
98
  - From `0.6.0` on, the Models settings page no longer shows the non-editable WorkBuddy / WorkBuddy AI cards (consistent across both core generations); the model picker, `/model`, and chat calls are unaffected.
98
- - On DSH `0.2.0-rc.1` / `0.2.0-rc.2`, just install the latest: `dsh plugin --profile web add dsh-workbuddy-connect`
99
+ - On DSH `0.2.0-rc.2`, just install the latest: `dsh plugin --profile web add dsh-workbuddy-connect`; on `0.2.0-rc.1`, stay on `0.7.0`: `dsh plugin --profile web add dsh-workbuddy-connect@0.7.0`
100
+ - pnpm profiles upgraded in place from `0.6.x` (with a manually installed `pi-ai@0.85.1`): on `0.7.1+` the peer range no longer admits `0.85.1`, so `pnpm install` moves the plugin onto the host's `0.87.1`; the temporary `overrides: {'@earendil-works/pi-ai': 0.87.1}` from [#74](https://github.com/corrinehu/dsh-workbuddy-connect/issues/74) can be removed
99
101
  - Still on DSH `0.1.5` / `0.1.6` / `0.1.7`? Stay on `0.6.5`: `dsh plugin --profile web add dsh-workbuddy-connect@0.6.5`
100
102
  - Still on DSH `0.1.2-rc.1`? Stay on `0.3.1`: `dsh plugin --profile web add dsh-workbuddy-connect@0.3.1`
101
103
  - Still on DSH `0.1.1-rc.2`? Stay on the older release: `dsh plugin --profile web add dsh-workbuddy-connect@0.2.6`
package/README.md CHANGED
@@ -70,7 +70,8 @@ WorkBuddy 中模型的推理档位信息目前分散在上游接口与客户端
70
70
 
71
71
  | 插件版本 | 要求的 DSH 核心 | 桌面 App |
72
72
  |---|---|---|
73
- | **0.7.0(0.2.0 世代)** | **仅支持 `0.2.0-rc.1` / `0.2.0-rc.2`**(`0.1.5` / `0.1.6` / `0.1.7` 不再支持,用户请停留在 `0.6.5`),已在 `0.2.0-rc.2` 真机实测(web 端:加载、国内版与国际版目录、加密凭据、状态路由正常)。这是适配 DSH `0.2.0` 设置服务改造的版本——`0.2.0` 把设置服务换成了 Config 表单门面,移除了旧的 `installSection` 接口,早期版本在上面会丢失设置项 | 内置 `0.2.0` 内核的桌面版(预览 / nightly) |
73
+ | **0.7.1(当前稳定版)** | **仅支持 `0.2.0-rc.2`**(`0.2.0-rc.1` 用户请停留在 `0.7.0`),并把 `@earendil-works/pi-ai` peer 从 `^0.85.1 \|\| ^0.87.1` 收窄为 **`^0.87.1`**:从 `0.6.x` 原地升级的 pnpm profile 不再因旧 `pi-ai@0.85.1` 仍在范围内而被保留、复现 [#69](https://github.com/corrinehu/dsh-workbuddy-connect/issues/69) 的两代混用([#74](https://github.com/corrinehu/dsh-workbuddy-connect/issues/74))。**从 `0.6.5` 原地升级已实测**:编辑 `package.json` 后 `pnpm install`,插件即解析到 `pi-ai@0.87.1`,无需任何 override;同时在 `0.7.0` 上复现了双臂范围放行 `0.85.1` 的原行为作为对照。 | 内置 `0.2.0-rc.2` 内核的桌面版(预览 / nightly) |
74
+ | **0.7.0(0.2.0 世代首发)** | **仅支持 `0.2.0-rc.1` / `0.2.0-rc.2`**(`0.1.5` / `0.1.6` / `0.1.7` 不再支持,用户请停留在 `0.6.5`),已在 `0.2.0-rc.2` 真机实测(web 端:加载、国内版与国际版目录、加密凭据、状态路由正常)。这是适配 DSH `0.2.0` 设置服务改造的版本——`0.2.0` 把设置服务换成了 Config 表单门面,移除了旧的 `installSection` 接口,早期版本在上面会丢失设置项。**`0.7.1` 起不再支持 `rc.1`** | 内置 `0.2.0` 内核的桌面版(预览 / nightly) |
74
75
  | **0.6.0(双界面自适应)** | `0.1.5-rc.1` / `rc.2` / `rc.3`;`0.1.6-alpha` 系列(含 `alpha.1` / `alpha.2`)与 `0.1.6` 正式版;已实测 `0.1.7-alpha.1`(`0.1.7` 正式版同样在范围内)。**后续 `0.1.x` prerelease(如 `0.1.8-alpha.x`)同样落在 `^0.1.7-alpha.1` 区间内**——宿主兼容判定按 includePrerelease 语义解析 peer range(早先「不自动覆盖」的说法有误,已更正);跨入 `0.2.0` 的 prerelease 才需要插件显式扩展 peer range | `2.0.7`+ 可直接使用;搭载 `0.1.6+` 核心的桌面版发布后同样适用 |
75
76
  | **0.6.5(`0.1.x` 线最终版)** | 在 `0.6.0` 的支持面上追加 `0.2.0-rc.1`(`0.1.5` / `0.1.6` / `0.1.7` / `0.2.0-rc.1`),已在 `0.2.0-rc.1` 真机实测(web 端:加载、目录、加密凭据、对话与图片往返正常)。已发布的 `0.6.4` 及更早版本不含该区间,在 DSH `0.2.0-rc.1` 上会被宿主整体跳过(见 [#63](https://github.com/corrinehu/dsh-workbuddy-connect/issues/63)) | 内置 `0.1.x` 内核的桌面版(含 `2.0.7` 起的已发布正式版);`0.2.0-rc.1` 亦可(web 已实测,桌面版待实测) |
76
77
  | **0.3.2 – 0.5.4**(国际版支持自 `0.5.0`) | `0.1.5-rc.1` 系列(不支持 `0.1.6+`,见 [#41](https://github.com/corrinehu/dsh-workbuddy-connect/issues/41)) | `2.0.7`+(内置核心已跟进 `0.1.5-rc.1`) |
@@ -104,7 +105,8 @@ WorkBuddy 中模型的推理档位信息目前分散在上游接口与客户端
104
105
  ```
105
106
 
106
107
  - 自 `0.6.0` 起,Models 设置页不再显示 WorkBuddy / WorkBuddy AI 的不可编辑卡片(两代核心行为一致);模型选择器、`/model` 与对话调用不受影响。
107
- - DSH `0.2.0-rc.1` / `0.2.0-rc.2` 的用户,安装最新版即可:`dsh plugin --profile web add dsh-workbuddy-connect`
108
+ - DSH `0.2.0-rc.2` 的用户,安装最新版即可:`dsh plugin --profile web add dsh-workbuddy-connect`;还在 `0.2.0-rc.1` 的用户请停留在 `0.7.0`:`dsh plugin --profile web add dsh-workbuddy-connect@0.7.0`
109
+ - 从 `0.6.x` 原地升级的 pnpm profile(曾手动装过 `pi-ai@0.85.1`):升级到 `0.7.1+` 后 peer 范围不再接受 `0.85.1`,`pnpm install` 会把插件解析到宿主同代的 `0.87.1`;此前按 [#74](https://github.com/corrinehu/dsh-workbuddy-connect/issues/74) 临时加过的 `overrides: {'@earendil-works/pi-ai': 0.87.1}` 可以删掉了
108
110
  - 还在用 DSH `0.1.5` / `0.1.6` / `0.1.7` 的用户,请停留在 `0.6.5`:`dsh plugin --profile web add dsh-workbuddy-connect@0.6.5`
109
111
  - 还在用 DSH `0.1.2-rc.1` 的用户,请停留在 `0.3.1`:`dsh plugin --profile web add dsh-workbuddy-connect@0.3.1`
110
112
  - 还在用 DSH `0.1.1-rc.2` 的用户,请停留在 `0.2.6`:`dsh plugin --profile web add dsh-workbuddy-connect@0.2.6`
package/lib/bin.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { C as WORKBUDDY_VARIANTS, O as WorkBuddyUpstreamClient, S as CN_VARIANT, Z as resolveAppVersion, 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-d_lBAk8t.js";
2
+ import { C as WORKBUDDY_VARIANTS, O as WorkBuddyUpstreamClient, S as CN_VARIANT, Z as resolveAppVersion, 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-L93zSVB5.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
@@ -2561,7 +2561,7 @@ window.__ModuleLoader__.load({
2561
2561
  };
2562
2562
  //#endregion
2563
2563
  //#region src/version.ts
2564
- const WORKBUDDY_CONNECT_VERSION = "0.7.0";
2564
+ const WORKBUDDY_CONNECT_VERSION = "0.7.1";
2565
2565
  //#endregion
2566
2566
  //#region src/client/WorkBuddyConfigPage.tsx
2567
2567
  /**
@@ -387,15 +387,36 @@ function randomSentinel() {
387
387
  return `probe_sentinel_${randomBytes(12).toString("hex")}`;
388
388
  }
389
389
  /**
390
- * The upstream's "this effort value is not supported" code, measured
391
- * 2026-09-11 (plan §4.2). It is *not* treated as a permanent protocol promise:
392
- * anything unrecognized degrades to `unknown` rather than to a capability
393
- * conclusion.
394
- */
395
- const INVALID_EFFORT_CODE = "invalid_reasoning_effort";
390
+ * The upstream's "this effort value is not supported" codes, per region, as
391
+ * measured on each live endpoint. The sets are kept separate so a code only
392
+ * ever widens detection for the endpoint it was measured on.
393
+ *
394
+ * - `invalid_reasoning_effort` — the China endpoint, measured 2026-09-11
395
+ * (plan §4.2). Also kept for `global` as a fallback spelling.
396
+ * - `model_param_invalid` — the global endpoint, measured 2026-10-01. A
397
+ * non-canonical value is answered `400` / `11133` with this code, which names
398
+ * no field (`extError.param` is empty), instead of one that names the effort.
399
+ * It is generic enough to be readable here only because the baseline step has
400
+ * already proved the *same* request without `reasoning_effort` succeeds,
401
+ * leaving the sentinel as the only difference between the two attempts. A
402
+ * sibling code in the same `11133` envelope that names another parameter
403
+ * (`integer_below_min_value`, the `max_tokens` floor) and a body carrying no
404
+ * `extError` at all (`11102`, unknown model) are therefore not mistaken for
405
+ * it, and neither is a level-sweep answer. It is *not* added to `cn`: that
406
+ * endpoint was measured answering the specific code, and reading a generic
407
+ * code there would widen attribution beyond what was observed.
408
+ *
409
+ * Neither is treated as a permanent protocol promise: anything unrecognized
410
+ * still degrades to `unknown` rather than to a capability conclusion.
411
+ */
412
+ const INVALID_EFFORT_CODES = {
413
+ cn: /* @__PURE__ */ new Set(["invalid_reasoning_effort"]),
414
+ global: /* @__PURE__ */ new Set(["invalid_reasoning_effort", "model_param_invalid"])
415
+ };
396
416
  /** Whether an attempt is an attributable rejection of the effort value. */
397
- function isEffortRejection(attempt) {
398
- return attempt.status === 400 && attempt.errorCode === INVALID_EFFORT_CODE;
417
+ function isEffortRejection(attempt, region) {
418
+ const codes = INVALID_EFFORT_CODES[region];
419
+ return attempt.status === 400 && attempt.errorCode !== void 0 && codes.has(attempt.errorCode);
399
420
  }
400
421
  /** Whether an attempt shows the upstream accepted the request and streamed. */
401
422
  function isAcceptance(attempt) {
@@ -411,12 +432,15 @@ function unknownReason(stage, attempt) {
411
432
  * Probe one model.
412
433
  *
413
434
  * `options.candidates` exists so tests can shorten the sweep; production always
414
- * uses {@link PROBE_EFFORT_CANDIDATES}.
435
+ * uses {@link PROBE_EFFORT_CANDIDATES}. `options.region` selects which
436
+ * endpoint's rejection vocabulary is read; it defaults to `cn`, which is also
437
+ * the production default for the China app.
415
438
  */
416
439
  async function probeModel(options) {
417
440
  const sentinel = options.sentinel ?? randomSentinel;
418
441
  const candidates = options.candidates ?? PROBE_EFFORT_CANDIDATES;
419
442
  const timeoutMs = options.timeoutMs ?? 3e4;
443
+ const region = options.region ?? "cn";
420
444
  let requests = 0;
421
445
  const attempt = async (effort) => {
422
446
  requests += 1;
@@ -447,7 +471,7 @@ async function probeModel(options) {
447
471
  efforts: [],
448
472
  requests
449
473
  };
450
- if (!isEffortRejection(sentinelAttempt)) return {
474
+ if (!isEffortRejection(sentinelAttempt, region)) return {
451
475
  validation: "unknown",
452
476
  efforts: [],
453
477
  requests,
@@ -460,7 +484,7 @@ async function probeModel(options) {
460
484
  accepted.push(effort);
461
485
  continue;
462
486
  }
463
- if (isEffortRejection(levelAttempt)) continue;
487
+ if (isEffortRejection(levelAttempt, region)) continue;
464
488
  return {
465
489
  validation: "unknown",
466
490
  efforts: [],
@@ -3611,7 +3635,7 @@ var WorkBuddyCatalog = class {
3611
3635
  };
3612
3636
  //#endregion
3613
3637
  //#region src/version.ts
3614
- const WORKBUDDY_CONNECT_VERSION = "0.7.0";
3638
+ const WORKBUDDY_CONNECT_VERSION = "0.7.1";
3615
3639
  //#endregion
3616
3640
  //#region src/host-heartbeat.ts
3617
3641
  /**
package/lib/index.d.ts CHANGED
@@ -229,17 +229,22 @@ type ProbeOutcome = {
229
229
  requests: number;
230
230
  reason: string;
231
231
  };
232
+ /** Which endpoint's rejection vocabulary a probe interprets. */
233
+ type ProbeRegion = 'cn' | 'global';
232
234
  /**
233
235
  * Probe one model.
234
236
  *
235
237
  * `options.candidates` exists so tests can shorten the sweep; production always
236
- * uses {@link PROBE_EFFORT_CANDIDATES}.
238
+ * uses {@link PROBE_EFFORT_CANDIDATES}. `options.region` selects which
239
+ * endpoint's rejection vocabulary is read; it defaults to `cn`, which is also
240
+ * the production default for the China app.
237
241
  */
238
242
  declare function probeModel(options: {
239
243
  send: ProbeSender;
240
244
  sentinel?: SentinelFactory;
241
245
  candidates?: readonly WorkBuddyEffort[];
242
246
  timeoutMs?: number;
247
+ region?: ProbeRegion;
243
248
  }): Promise<ProbeOutcome>;
244
249
  //#endregion
245
250
  //#region src/upstream.d.ts
@@ -1463,6 +1468,12 @@ interface WorkBuddyProbeServiceOptions {
1463
1468
  */
1464
1469
  account: () => string | undefined;
1465
1470
  sentinel?: SentinelFactory;
1471
+ /**
1472
+ * Which endpoint's rejection vocabulary sweeps read. The two apps talk to
1473
+ * different upstreams that answer a bad effort with different codes, so each
1474
+ * runtime passes its own region instead of sharing one widening set.
1475
+ */
1476
+ region: ProbeRegion;
1466
1477
  /** Injectable for tests; defaults to the live upstream sender. */
1467
1478
  send?: (modelId: string) => ProbeSender;
1468
1479
  }
package/lib/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { A as extractDisplayErrorMessage, B as CN_APP_VERSION_FILENAME, C as WORKBUDDY_VARIANTS, D as WORKBUDDY_UPDATE_PATH, F as prepareInternationalChatBody, G as resolveChatIdentity, H as chatUserAgent, I as regionOf, J as appUserAgent, K as validCliVersion, L as PROBE_EFFORT_CANDIDATES, M as normalizeCredits, N as parseModelCatalog, O as WorkBuddyUpstreamClient, P as prepareChatBody, Q as validAppVersion, R as probeModel, S as CN_VARIANT, U as fallbackChatIdentity, V as FALLBACK_CN_APP_VERSION, W as readCliVersion, X as readBundleVersion, Y as installedAppVersion, Z as resolveAppVersion, _ as desktopAuthCandidatesFor, a as readHostHeartbeat, b as atRestKeyProviderFor, c as WORKBUDDY_CONNECT_VERSION, d as WorkBuddyCatalog, f as WORKBUDDY_AUTH_FILENAME, g as defaultDesktopAuthPath, h as defaultDesktopAuthCandidates, i as processStartTimeMs, j as modelWithCurrentPromotion, k as classifyUpstreamError, l as FALLBACK_WORKBUDDY_AI_MODELS, m as WorkBuddyCredentialStore, n as clearHostHeartbeat, o as workbuddyHostHeartbeatPath, p as WORKBUDDY_AUTH_FILE_ENV, q as WORKBUDDY_APP_VERSION_FILENAME, r as isHeartbeatProcessAlive, s as writeHostHeartbeat, t as WORKBUDDY_HOST_HEARTBEAT_FILENAME, u as FALLBACK_WORKBUDDY_MODELS, v as parseWorkBuddyAuth, w as variantFor, x as AI_VARIANT, y as workbuddyOwnAuthPath, z as randomSentinel } from "./host-heartbeat-d_lBAk8t.js";
1
+ import { A as extractDisplayErrorMessage, B as CN_APP_VERSION_FILENAME, C as WORKBUDDY_VARIANTS, D as WORKBUDDY_UPDATE_PATH, F as prepareInternationalChatBody, G as resolveChatIdentity, H as chatUserAgent, I as regionOf, J as appUserAgent, K as validCliVersion, L as PROBE_EFFORT_CANDIDATES, M as normalizeCredits, N as parseModelCatalog, O as WorkBuddyUpstreamClient, P as prepareChatBody, Q as validAppVersion, R as probeModel, S as CN_VARIANT, U as fallbackChatIdentity, V as FALLBACK_CN_APP_VERSION, W as readCliVersion, X as readBundleVersion, Y as installedAppVersion, Z as resolveAppVersion, _ as desktopAuthCandidatesFor, a as readHostHeartbeat, b as atRestKeyProviderFor, c as WORKBUDDY_CONNECT_VERSION, d as WorkBuddyCatalog, f as WORKBUDDY_AUTH_FILENAME, g as defaultDesktopAuthPath, h as defaultDesktopAuthCandidates, i as processStartTimeMs, j as modelWithCurrentPromotion, k as classifyUpstreamError, l as FALLBACK_WORKBUDDY_AI_MODELS, m as WorkBuddyCredentialStore, n as clearHostHeartbeat, o as workbuddyHostHeartbeatPath, p as WORKBUDDY_AUTH_FILE_ENV, q as WORKBUDDY_APP_VERSION_FILENAME, r as isHeartbeatProcessAlive, s as writeHostHeartbeat, t as WORKBUDDY_HOST_HEARTBEAT_FILENAME, u as FALLBACK_WORKBUDDY_MODELS, v as parseWorkBuddyAuth, w as variantFor, x as AI_VARIANT, y as workbuddyOwnAuthPath, z as randomSentinel } from "./host-heartbeat-L93zSVB5.js";
2
2
  import z from "@deepseek-ai/schemastery";
3
3
  import { resolveImageAttachmentAccess, resolveRetryPolicy } from "@deepseek-ai/dsh-llm";
4
4
  import { dirname, join, resolve } from "node:path";
@@ -1111,6 +1111,7 @@ var WorkBuddyProbeService = class {
1111
1111
  try {
1112
1112
  const outcome = await probeModel({
1113
1113
  send,
1114
+ region: this.options.region,
1114
1115
  ...this.options.sentinel === void 0 ? {} : { sentinel: this.options.sentinel }
1115
1116
  });
1116
1117
  if (this.options.account() !== account) return {
@@ -1940,6 +1941,7 @@ function createVariantRuntime(config, variant, current, identityOf, accountOf, k
1940
1941
  catalog,
1941
1942
  credentials: store,
1942
1943
  client,
1944
+ region: variant.id === CN_VARIANT.id ? "cn" : "global",
1943
1945
  consent: () => current().probeConsent === true,
1944
1946
  account: () => identityOf(variant.id)
1945
1947
  }),
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "dsh-workbuddy-connect",
3
3
  "displayName": "DSH WorkBuddy Connect",
4
4
  "description": "将 WorkBuddy 桌面 App 包含的模型自动接入 DeepSeek Harness — bring WorkBuddy desktop app models into DeepSeek Harness with zero configuration.",
5
- "version": "0.7.0",
5
+ "version": "0.7.1",
6
6
  "author": "corrinehu",
7
7
  "keywords": [
8
8
  "dsh-plugin",
@@ -68,15 +68,15 @@
68
68
  },
69
69
  "peerDependencies": {
70
70
  "@deepseek-ai/cordis": "^4.0.2",
71
- "@deepseek-ai/dsh-atomic-write": "0.2.0-rc.1 || 0.2.0-rc.2",
72
- "@deepseek-ai/dsh-attachment": "0.2.0-rc.1 || 0.2.0-rc.2",
73
- "@deepseek-ai/dsh-home-paths": "0.2.0-rc.1 || 0.2.0-rc.2",
74
- "@deepseek-ai/dsh-host-webserver": "0.2.0-rc.1 || 0.2.0-rc.2",
75
- "@deepseek-ai/dsh-llm": "0.2.0-rc.1 || 0.2.0-rc.2",
76
- "@deepseek-ai/dsh-llm-pi-ai": "0.2.0-rc.1 || 0.2.0-rc.2",
77
- "@deepseek-ai/dsh-settings": "0.2.0-rc.1 || 0.2.0-rc.2",
71
+ "@deepseek-ai/dsh-atomic-write": "0.2.0-rc.2",
72
+ "@deepseek-ai/dsh-attachment": "0.2.0-rc.2",
73
+ "@deepseek-ai/dsh-home-paths": "0.2.0-rc.2",
74
+ "@deepseek-ai/dsh-host-webserver": "0.2.0-rc.2",
75
+ "@deepseek-ai/dsh-llm": "0.2.0-rc.2",
76
+ "@deepseek-ai/dsh-llm-pi-ai": "0.2.0-rc.2",
77
+ "@deepseek-ai/dsh-settings": "0.2.0-rc.2",
78
78
  "@deepseek-ai/schemastery": "^3.18.2",
79
- "@earendil-works/pi-ai": "^0.85.1 || ^0.87.1",
79
+ "@earendil-works/pi-ai": "^0.87.1",
80
80
  "react": "^18.2.0"
81
81
  },
82
82
  "devDependencies": {