@omdp/dsh-key-fallback 3.3.2 → 3.3.3

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.md CHANGED
@@ -4,7 +4,20 @@
4
4
 
5
5
  **Multi-key API key pool with automatic rotation for [DeepSeek Harness (DSH)](https://github.com/deepseek-ai/deepseek-harness)** — hooks DSH's credential seam `credentials.resolve`: each time an adapter asks for a key, if that ref belongs to a configured pool the wrapper returns the pool's current key; when a configured trigger error occurs it marks the failed key cooling (fixed `cooldownMs`, no exponential backoff) and advances to the next key. **Re-sending is left entirely to DSH's own `dsh-llm-retry`** — this plugin never re-sends on its own; it only switches the key and lets the retry policy decide.
6
6
 
7
- Current version: **v3.3.2** (`v7` UI generation).
7
+ Current version: **v3.3.3** (`v7` UI generation).
8
+
9
+ ## What v3.3.3 offers
10
+
11
+ - **DSH `0.2.1` support declared — zero code change** (2026-10-18). All four dsh peers gained a **second
12
+ per-triple interval**, so they now read `>=0.2.0-rc.1 <0.2.1-0 || >=0.2.1-rc.1 <0.2.2-0`; `cordis` gained
13
+ `4.0.5` and `schemastery` `3.18.5` (both are exactly what `0.2.1-rc.2` pins). Verified in four layers:
14
+ a per-file SHA256 diff of the whole `@deepseek-ai/*` tree between `0.2.0-rc.2` and `0.2.1-rc.2`
15
+ (288 → 305 packages, 177 with real `.js` churn), a real ESM export-set diff of the 9 packages this plugin
16
+ consumes (identical sets; the only removals are in `dsh-app-boot`, which this plugin does not use), a
17
+ method-level existence check of every symbol the plugin touches, and a **real `0.2.1-rc.2` CLI assembly**
18
+ under an isolated `DSH_HOME` (`--dump-config` composes the plugin with zero skips). Counterfactual: reverting
19
+ the peer to the old single interval makes the same run emit `skipping profile bundle … is incompatible with
20
+ dsh 0.2.1-rc.2`, so the test is genuinely sensitive.
8
21
 
9
22
  ## What v3.3.2 offers
10
23
 
@@ -142,7 +155,7 @@ Current version: **v3.3.2** (`v7` UI generation).
142
155
 
143
156
  - DeepSeek Harness with a `web`-profile GUI (`npx @deepseek-ai/dsh web`)
144
157
  - Node.js `^22.19` or `>=24`
145
- - Peer ranges use **per-triple intervals** (since 3.3.2; per-version enumeration before that) — `@deepseek-ai/dsh` / `@deepseek-ai/dsh-credentials` / `@deepseek-ai/dsh-llm` / `@deepseek-ai/dsh-settings` all declare `>=0.2.0-rc.1 <0.2.1-0`: testing the first rc of a triple clears its later rc builds (`0.2.0-rc.2`/`rc.3`…) and the stable `0.2.0`, while crossing a triple (`0.2.1-rc.1`) is still gated off and requires a fresh check. The `-0` upper bound is mandatory: semver sorts prereleases *before* the stable release, so `<0.2.1` would leak the next triple's rc (see `AGENTS.md` rule 3). `@deepseek-ai/cordis` `4.0.1 || 4.0.2 || 4.0.4` and `@deepseek-ai/schemastery` `3.18.1 || 3.18.2 || 3.18.4` stay **enumerated** (neither goes through the gate, which only inspects `@deepseek-ai/dsh` and `dsh-*`, and they have sparse version sets with no prerelease chain). The plugin only uses the credential-reference half (`resolve`/`describe`/`set`/`unset`/`credentialRef` — stable since `0.1.0-rc.6`) and the `agent/request` + `agent/request-error` waterfall (payload unchanged across versions); `isCredentialRefName` (added `rc.8`) is implemented locally for compatibility. **Note the `0.1.7` line is no longer declared as of 3.3.2** — install 3.3.1 if you need it.
158
+ - Peer ranges use **per-triple intervals** (single segment since 3.3.2, **two segments since 3.3.3**; per-version enumeration before that) — `@deepseek-ai/dsh` / `@deepseek-ai/dsh-credentials` / `@deepseek-ai/dsh-llm` / `@deepseek-ai/dsh-settings` all declare `>=0.2.0-rc.1 <0.2.1-0 || >=0.2.1-rc.1 <0.2.2-0`: testing the first rc of a triple clears its later rc builds (`0.2.0-rc.2`/`rc.3`…, `0.2.1-rc.2`/`rc.3`…) and that triple's stable release, while crossing into a *new* triple (`0.2.2-rc.1`) is still gated off and requires a fresh check. The `-0` upper bound is mandatory: semver sorts prereleases *before* the stable release, so `<0.2.1` would leak the next triple's rc (see `AGENTS.md` rule 3). `@deepseek-ai/cordis` `4.0.1 || 4.0.2 || 4.0.4 || 4.0.5` and `@deepseek-ai/schemastery` `3.18.1 || 3.18.2 || 3.18.4 || 3.18.5` stay **enumerated** (neither goes through the gate, which only inspects `@deepseek-ai/dsh` and `dsh-*`, and they have sparse version sets with no prerelease chain). The plugin only uses the credential-reference half (`resolve`/`describe`/`set`/`unset`/`credentialRef` — stable since `0.1.0-rc.6`) and the `agent/request` + `agent/request-error` waterfall (payload unchanged across versions); `isCredentialRefName` (added `rc.8`) is implemented locally for compatibility. **Note the `0.1.7` line is no longer declared as of 3.3.2** — install 3.3.1 if you need it.
146
159
 
147
160
  ## What v3.2.0 offers
148
161
 
package/lib/index.js CHANGED
@@ -291,7 +291,7 @@ export function apply(ctx, config) {
291
291
  }
292
292
  // ── 包装 credentials.resolve:ref 命中池 env 时返回池当前 key ──
293
293
  // 这是 DSH 官方唯一的「每次请求都问一次用哪把 key」接缝(dsh-llm-pi-ai:2563、
294
- // dsh-llm-deepseek-api-key:44、dsh-vision-bridge:91、dsh-cost-meter:957 等全部经它取值),
294
+ // dsh-llm-deepseek-api-key:44、dsh-cost-meter:957 等全部经它取值;已归档的 vision-bridge 亦然),
295
295
  // 因此拦这一处即可覆盖所有 provider,且语义与「重发归官方、插件只切 key」完全同构。
296
296
  const poolsByEnv = new Map()
297
297
  const credSvc = ctx.credentials
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@omdp/dsh-key-fallback",
3
3
  "description": "API Key 回退轮换插件:多 key 池 + 自动轮换(触发码可配置,含 LlmError 标准码全集)+ 环境密钥编辑 + 明文揭示 + 短 ref 迁移。同时兼容 DSH 0.1.5-rc.3(settings.yaml 后端)与 0.1.7+(profile entry config 后端)。Settings → API Key 回退 UI. v7.",
4
- "version": "3.3.2",
4
+ "version": "3.3.3",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -38,11 +38,11 @@
38
38
  }
39
39
  },
40
40
  "peerDependencies": {
41
- "@deepseek-ai/cordis": "4.0.1 || 4.0.2 || 4.0.4",
42
- "@deepseek-ai/dsh": ">=0.2.0-rc.1 <0.2.1-0",
43
- "@deepseek-ai/dsh-credentials": ">=0.2.0-rc.1 <0.2.1-0",
44
- "@deepseek-ai/dsh-llm": ">=0.2.0-rc.1 <0.2.1-0",
45
- "@deepseek-ai/dsh-settings": ">=0.2.0-rc.1 <0.2.1-0",
46
- "@deepseek-ai/schemastery": "3.18.1 || 3.18.2 || 3.18.4"
41
+ "@deepseek-ai/cordis": "4.0.1 || 4.0.2 || 4.0.4 || 4.0.5",
42
+ "@deepseek-ai/dsh": ">=0.2.0-rc.1 <0.2.1-0 || >=0.2.1-rc.1 <0.2.2-0",
43
+ "@deepseek-ai/dsh-credentials": ">=0.2.0-rc.1 <0.2.1-0 || >=0.2.1-rc.1 <0.2.2-0",
44
+ "@deepseek-ai/dsh-llm": ">=0.2.0-rc.1 <0.2.1-0 || >=0.2.1-rc.1 <0.2.2-0",
45
+ "@deepseek-ai/dsh-settings": ">=0.2.0-rc.1 <0.2.1-0 || >=0.2.1-rc.1 <0.2.2-0",
46
+ "@deepseek-ai/schemastery": "3.18.1 || 3.18.2 || 3.18.4 || 3.18.5"
47
47
  }
48
48
  }