dsh-multi-router 0.6.9 → 0.6.10

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
@@ -2,6 +2,14 @@
2
2
 
3
3
  本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/)。版本号从 `0.1` 起以功能迭代为主,接口在 `1.0` 前可能变化。
4
4
 
5
+ ## 0.6.10
6
+
7
+ - 修复「按积分折扣排序」与「积分使用均衡」会打乱临期积分优先级的问题:两者此前都是对全部候选做整体重排,因此一个更便宜、或本轮还没用完额度的非临期账号,可能插到仍有临期积分的账号前面。
8
+ - 现在候选先按临期到期时间分成互不跨越的分组,折扣排序与额度降权都只在**组内**调整先后。临期账号无论倍率高低、本轮是否已用完额度,都保持在非临期账号之前;组内顺序仍遵循各自的规则。
9
+ - 临期优先的排序改为显式比较到期时间并用原索引打破平局,不再依赖 `Infinity - Infinity` 得 `NaN` 时的排序实现细节。
10
+ - 冷却语义不变:仅作用于临期优先本身,普通路由继续照常运行。
11
+ - 新增两组回归:临期账号在更便宜的非临期账号面前保持领先、以及额度降权不跨组;后者已做反向验证(调用点不再传递临期分组时测试立即失败)。
12
+
5
13
  ## 0.6.9
6
14
 
7
15
  - 路由新增「按积分折扣排序」开关,默认开启。每次请求按各渠道当前公布的积分倍率从小到大排列候选账号,倍率越低越便宜、越先用;倍率随目录刷新实时跟随,限时促销到期后自动恢复,不需要定时任务。
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  一个插件内置 WorkBuddy、Trae、Qoder 的认证、模型发现和聊天传输,提供三家的多账号池及集中路由。运行不依赖原来三个 DSH 插件;三家代码随安装包一起打包。基于 MIT 上游,固定版本见 `upstream-lock.json`,许可见 `THIRD_PARTY_NOTICES.md`。
8
8
 
9
- 版本:0.6.9。适配 DSH Desktop / Web 0.2.1-rc.2(同时兼容 0.2.0-rc.2),Node.js ^22.19.0 或 >=24。
9
+ 版本:0.6.10。适配 DSH Desktop / Web 0.2.1-rc.2(同时兼容 0.2.0-rc.2),Node.js ^22.19.0 或 >=24。
10
10
 
11
11
  ## 在 DSH 里管理
12
12
 
@@ -115,7 +115,7 @@ Qoder 的 `dfmodel` 在真实目录里显示为 DeepSeek-Flash,未声明具体
115
115
 
116
116
  `discountOrder: true` 开启「按积分折扣排序」(默认开启)。每次请求按各渠道当前公布的**积分倍率**从小到大排列候选账号,倍率越低越便宜、越先用。倍率来自模型目录并随目录刷新,限时促销到期后自动恢复,因此不需要定时任务。三家的数据形态不同(Trae 为数值 `creditMultiplier`,WorkBuddy 与 Qoder 为 `x0.11` 字符串),统一解析后把生效中的 `promotions[].factor` 作为折上折计入,`factor` 为 0 表示直接替换成本价。
117
117
 
118
- 优先级沿用既有约定:临期积分最高,其次是上面「积分使用均衡」的本轮额度降权,折扣只在同类候选之间决定先后——已用完额度的账号不会因为便宜而继续排在前面。未公布倍率的账号排在最后,不会被当成免费。`creditRates` 是每次发布时从目录派生的运行时数据而非配置,面板回传或手工编辑会在归一化阶段被丢弃。Free 自动免费模型路由不参与,也不展示该开关。
118
+ 优先级沿用既有约定,且**折扣与额度都不会跨越临期分组**:候选先按临期到期时间分成互不跨越的分组,折扣排序与「积分使用均衡」的额度降权都只在组内调整先后。临期账号无论倍率高低、本轮是否已用完额度,都保持在非临期账号之前;组内则先按到期时间、再按各自规则排列。未公布倍率的账号在组内排在最后,不会被当成免费。冷却只作用于临期优先本身,普通路由照常运行。`creditRates` 是每次发布时从目录派生的运行时数据而非配置,面板回传或手工编辑会在归一化阶段被丢弃。Free 自动免费模型路由不参与,也不展示该开关。
119
119
 
120
120
  额度只决定下一次请求选哪个账号,不中断正在生成的回答;并发请求、最后一次请求可能使阈值超过,积分结算延迟也可能造成超额。这是轮换阈值,不是上游消费硬上限。
121
121
 
package/cordis.patch.yml CHANGED
@@ -1,3 +1,3 @@
1
1
  - insert:
2
- - id: llm-multi-router-v2-0.6.9
3
- name: ./lib/host-v0.6.9.js
2
+ - id: llm-multi-router-v2-0.6.10
3
+ name: ./lib/host-v0.6.10.js
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  ApiService
3
- } from "./chunk-BK2JVL3Q.js";
3
+ } from "./chunk-47YTECKF.js";
4
4
  import "./chunk-4V52V5GO.js";
5
5
  import "./chunk-DNQPZMPF.js";
6
- import "./chunk-D726WROP.js";
6
+ import "./chunk-R2Z4WGR6.js";
7
7
  import "./chunk-GEBZMIMA.js";
8
8
  export {
9
9
  ApiService
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  RouteError,
9
9
  abortable
10
- } from "./chunk-D726WROP.js";
10
+ } from "./chunk-R2Z4WGR6.js";
11
11
  import {
12
12
  REASONING_EFFORTS,
13
13
  beijingDay,
@@ -329,4 +329,4 @@ async function collectCompletion(frames, model) {
329
329
  export {
330
330
  ApiService
331
331
  };
332
- //# sourceMappingURL=chunk-BK2JVL3Q.js.map
332
+ //# sourceMappingURL=chunk-47YTECKF.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-DNQPZMPF.js";
5
5
  import {
6
6
  RouteError
7
- } from "./chunk-D726WROP.js";
7
+ } from "./chunk-R2Z4WGR6.js";
8
8
  import {
9
9
  REASONING_EFFORTS
10
10
  } from "./chunk-GEBZMIMA.js";
@@ -117,4 +117,4 @@ function createShim(router, { modelPrefix = "" } = {}) {
117
117
  export {
118
118
  createShim
119
119
  };
120
- //# sourceMappingURL=chunk-KHBV4LKT.js.map
120
+ //# sourceMappingURL=chunk-LH6RKOZD.js.map
@@ -22,7 +22,7 @@ import {
22
22
  RouteError,
23
23
  abortable,
24
24
  qoderContextModel
25
- } from "./chunk-D726WROP.js";
25
+ } from "./chunk-R2Z4WGR6.js";
26
26
  import {
27
27
  beijingDay,
28
28
  writePrivateJson
@@ -5418,4 +5418,4 @@ export {
5418
5418
  refreshWorkBuddyCheckinCredential,
5419
5419
  createWorkBuddyCheckin
5420
5420
  };
5421
- //# sourceMappingURL=chunk-RMIZSZ6B.js.map
5421
+ //# sourceMappingURL=chunk-LXDLKLM6.js.map
@@ -6,7 +6,7 @@ import {
6
6
  refreshWorkBuddyCheckinCredential,
7
7
  supportsCheckin,
8
8
  workbuddyToken
9
- } from "./chunk-RMIZSZ6B.js";
9
+ } from "./chunk-LXDLKLM6.js";
10
10
  import {
11
11
  discoverLocalAccounts,
12
12
  importAccount,
@@ -19,7 +19,7 @@ import {
19
19
  } from "./chunk-KWXLQJS5.js";
20
20
  import {
21
21
  ApiService
22
- } from "./chunk-BK2JVL3Q.js";
22
+ } from "./chunk-47YTECKF.js";
23
23
  import {
24
24
  hostIsLoopback
25
25
  } from "./chunk-DNQPZMPF.js";
@@ -28,7 +28,7 @@ import {
28
28
  contextInfo,
29
29
  matchModel,
30
30
  resolveContext
31
- } from "./chunk-D726WROP.js";
31
+ } from "./chunk-R2Z4WGR6.js";
32
32
  import {
33
33
  PROVIDERS,
34
34
  PROVIDER_NAMES,
@@ -45,7 +45,7 @@ import {
45
45
  import { createHash, randomBytes as randomBytes3, timingSafeEqual } from "node:crypto";
46
46
 
47
47
  // package.json
48
- var version = "0.6.9";
48
+ var version = "0.6.10";
49
49
 
50
50
  // src/manager.mjs
51
51
  import { readFile as readFile4, mkdir as mkdir2, mkdtemp as mkdtemp2, rm as rm3 } from "node:fs/promises";
@@ -2056,4 +2056,4 @@ export {
2056
2056
  Manager,
2057
2057
  managementHandler
2058
2058
  };
2059
- //# sourceMappingURL=chunk-I2CZXH2A.js.map
2059
+ //# sourceMappingURL=chunk-P7CNCBSY.js.map