dsh-connect-trae 4.4.0 → 4.4.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/CHANGELOG.md +55 -0
- package/lib/index.d.ts +3 -1
- package/lib/index.js +53 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,60 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 4.4.1 (2026-10-22)
|
|
4
|
+
|
|
5
|
+
> **4.4.0 的修复自己藏掉了 `kimi-k2-0905`。这个版本把它捞回来,并补上 4.4.0 缺的实测。**
|
|
6
|
+
>
|
|
7
|
+
> 一条自我纠正。4.4.0 发布后作者对提升的模型做了**真实调用**实测,实测把 4.4.0 的
|
|
8
|
+
> 一个缺陷暴露出来:为了防止重名孪生行,4.4.0 加了「显示名已被占用就跳过」的规则 ——
|
|
9
|
+
> 这条规则把 `kimi-k2-0905` 也丢掉了,而它**是另一个真模型**(168K 上下文,实测可调用)。
|
|
10
|
+
> 于是报告人 `yuantao313` 抱怨的那一类「带日期的快照 ID」在 `kimi-k2-0905` 上**依然拿不到** ——
|
|
11
|
+
> 成因从「合并只遍历骨架」换成了「去重按名字判断」,**症状没变**。
|
|
12
|
+
> 详见 [`docs/ISSUE46_DIAGNOSIS.md`](https://github.com/dingminhua/dsh-connect-trae/blob/main/docs/ISSUE46_DIAGNOSIS.md) 第 9 节。
|
|
13
|
+
|
|
14
|
+
### 修复
|
|
15
|
+
|
|
16
|
+
- **重名判断改为「能力测试」而非「名字测试」**(`fix(catalog)`,issue #46)。
|
|
17
|
+
`claimedNames` 记录每个显示名下**最大的**上下文窗口;一个重名行只有在**严格更大于**
|
|
18
|
+
该最大值时才提升,并被追加 id 以便区分(两行都渲染成 `Kimi-K2-0905` 的 picker 是在撒谎)。
|
|
19
|
+
- **实测依据**(2026-10-22,CN 凭据):`kimi-k2` 是 28000 而 `kimi-k2-0905` 是 168000,
|
|
20
|
+
名字相同、能力差 6 倍,且 `kimi-k2-0905` 在 `solo_coder` 与 `chat_v3` 下**都能调用**。
|
|
21
|
+
- 反面对照:`glm-4.7` 与 `glm-4.7-auto` 元数据**完全相同**(100000/16000/`chat_v3`),
|
|
22
|
+
是真重复,仍然只留一行;`glm-5.2_advisor_default`(168000)比 skeleton 的 `glm-5.2`
|
|
23
|
+
(200000)**更小**,是内部改道,仍被排除。
|
|
24
|
+
- **实测结果**:目录 **42 → 46 行**,提升行 7 → 11。新增
|
|
25
|
+
`kimi-k2-0905`、`minimax-m2-auto`、`minimax-m2.1-auto`、`glm-4.6-auto`
|
|
26
|
+
(全部为 168K / `solo_coder`,显示名形如 `MiniMax-M2 (minimax-m2-auto)`)。
|
|
27
|
+
- 比较基准是**最强的占用者**,因此与 wire 名单的顺序无关(有回归测试钉住)。
|
|
28
|
+
|
|
29
|
+
### 测试补强
|
|
30
|
+
|
|
31
|
+
- **982 例测试全绿**(`pnpm run test`),新增 **4 例**:重名但更强者被提升且名字带 id、
|
|
32
|
+
重名且相等/更弱者仍被排除、`-auto` 孪生按能力取舍、比较基准取最强占用者。
|
|
33
|
+
|
|
34
|
+
### 实测记录(4.4.0 遗留边界现已关闭)
|
|
35
|
+
|
|
36
|
+
`4.4.0` 的 CHANGELOG 曾记「新提升的 7 个模型未逐个实测可调用性」。现已实测,**全部通过**
|
|
37
|
+
(真调用,走插件自己的 bridge,每个一次最小 `ping`):
|
|
38
|
+
|
|
39
|
+
| 模型 | function | 结果 |
|
|
40
|
+
| --- | --- | --- |
|
|
41
|
+
| `seed-code-pro-0430` / `glm-5-turbo` | `solo_work_remote` | AVAILABLE |
|
|
42
|
+
| `glm-4.7` / `glm-4.6` / `minimax-m2` / `minimax-m2.1` / `qwen3-coder` | `chat_v3` | AVAILABLE |
|
|
43
|
+
| `kimi-k2` | `inline_chat` · `chat_v3` · `solo_work_remote` | 三个 function 全部 AVAILABLE |
|
|
44
|
+
| 4.4.1 新增的 4 行 | `solo_coder` | 全部 AVAILABLE |
|
|
45
|
+
|
|
46
|
+
合计 21 次真实调用,消耗 **约 11 额度**(约 0.43/次)。
|
|
47
|
+
因此 `4.4.0` 中「`kimi-k2` 归属 `inline_chat`、可调用性尚未取证」这条边界**一并关闭**。
|
|
48
|
+
|
|
49
|
+
### 已知边界
|
|
50
|
+
|
|
51
|
+
- fix A 多问 function 带出的 `doubao_1_8`(`Doubao-Seed-1.8`)**实测 4001 拒绝**:它没有
|
|
52
|
+
`wireFunction`、也没有上下文与输出元数据,是条残缺的骨架行。按 issue #19「全部呈现 +
|
|
53
|
+
如实报错」的策略这是合规行为(选中会得到明确的上游原文错误),但它确实是一条新增的、
|
|
54
|
+
调不通的行 —— 记在这里,不假装它可用。
|
|
55
|
+
- 取证仍在维护者本机的 CN 账号上完成。报告人账号上是否真有
|
|
56
|
+
`deepseek-v4.1-flash-1017` 这一行,仍需他升级后确认(本机 roster 上无此行)。
|
|
57
|
+
|
|
3
58
|
## 4.4.0 (2026-10-22)
|
|
4
59
|
|
|
5
60
|
> **模型表不再系统性排除「带日期的快照配置」;账号池开关不再被模型目录的保存冲掉。**
|
package/lib/index.d.ts
CHANGED
|
@@ -385,7 +385,9 @@ interface TraeWireModel {
|
|
|
385
385
|
* name has nothing to show in the picker.
|
|
386
386
|
*
|
|
387
387
|
* The display-name-collision test lives in the merge itself (it needs the
|
|
388
|
-
* Remote rows to compare against); see {@link mergeTraeModelSources}.
|
|
388
|
+
* Remote rows to compare against); see {@link mergeTraeModelSources}. It is a
|
|
389
|
+
* CAPABILITY test there, not a name test: a collision only suppresses a row
|
|
390
|
+
* when the equally-named row is at least as capable.
|
|
389
391
|
*
|
|
390
392
|
* The survivors are exactly the models a user would recognise and the IDE
|
|
391
393
|
* offers but the plugin hid: `kimi-k2` / `kimi-k2-0905`, `glm-4.6`,
|
package/lib/index.js
CHANGED
|
@@ -210,7 +210,9 @@ function applyImageSelection(models, selected) {
|
|
|
210
210
|
* name has nothing to show in the picker.
|
|
211
211
|
*
|
|
212
212
|
* The display-name-collision test lives in the merge itself (it needs the
|
|
213
|
-
* Remote rows to compare against); see {@link mergeTraeModelSources}.
|
|
213
|
+
* Remote rows to compare against); see {@link mergeTraeModelSources}. It is a
|
|
214
|
+
* CAPABILITY test there, not a name test: a collision only suppresses a row
|
|
215
|
+
* when the equally-named row is at least as capable.
|
|
214
216
|
*
|
|
215
217
|
* The survivors are exactly the models a user would recognise and the IDE
|
|
216
218
|
* offers but the plugin hid: `kimi-k2` / `kimi-k2-0905`, `glm-4.6`,
|
|
@@ -316,15 +318,61 @@ function mergeTraeModelSources(remote, wire) {
|
|
|
316
318
|
});
|
|
317
319
|
}
|
|
318
320
|
const remoteIds = new Set(remote.map((model) => displayKey(model.id)));
|
|
319
|
-
|
|
321
|
+
/**
|
|
322
|
+
* Display name -> the LARGEST context window claimed under it.
|
|
323
|
+
*
|
|
324
|
+
* A name collision does NOT by itself mean "alias". Two rows sharing a
|
|
325
|
+
* display name are sometimes genuinely different models, and the only
|
|
326
|
+
* upstream signal that separates them is capability. Measured 2026-10-22 on
|
|
327
|
+
* a live CN credential:
|
|
328
|
+
*
|
|
329
|
+
* - `kimi-k2` (28000) and `kimi-k2-0905` (168000) BOTH display as
|
|
330
|
+
* `Kimi-K2-0905` — and both ANSWER (verified: `kimi-k2-0905` answers
|
|
331
|
+
* under `solo_coder` and `chat_v3`). Dropping the second one hid a real
|
|
332
|
+
* 168k model behind an equally-named 28k one, which is exactly the
|
|
333
|
+
* "dated snapshot the IDE offers, the plugin does not" complaint of
|
|
334
|
+
* issue #46.
|
|
335
|
+
* - `minimax-m2` (100000, `chat_v3`) and `minimax-m2-auto` (168000,
|
|
336
|
+
* `solo_coder`) both display as `MiniMax-M2` — again a bigger config
|
|
337
|
+
* behind an equally-named smaller one.
|
|
338
|
+
* - `glm-4.7` and `glm-4.7-auto` both display as `GLM-4.7` with IDENTICAL
|
|
339
|
+
* metadata (100000/16000/`chat_v3`) — a true duplicate, and promoting it
|
|
340
|
+
* would list one model twice for no gain.
|
|
341
|
+
* - `glm-5.2_advisor_default` (168000) is SMALLER than the skeleton's
|
|
342
|
+
* `glm-5.2` (200000), so it is an internal re-routing of a model the user
|
|
343
|
+
* already has in full — not worth a second row.
|
|
344
|
+
*
|
|
345
|
+
* So the rule is: a collision skips the row UNLESS the new row carries a
|
|
346
|
+
* STRICTLY LARGER context window, in which case the user is being offered
|
|
347
|
+
* capability the equally-named row does not have and hiding it would cost
|
|
348
|
+
* them something real. Names are tracked with their best context so the
|
|
349
|
+
* comparison is always against the strongest claimant, whatever the order.
|
|
350
|
+
*/
|
|
351
|
+
const claimedNames = /* @__PURE__ */ new Map();
|
|
352
|
+
const claim = (name, contextWindow) => {
|
|
353
|
+
const key = displayKey(name);
|
|
354
|
+
if (key === "") return;
|
|
355
|
+
claimedNames.set(key, Math.max(claimedNames.get(key) ?? 0, contextWindow ?? 0));
|
|
356
|
+
};
|
|
357
|
+
for (const model of remote) claim(model.name, model.contextWindow);
|
|
320
358
|
for (const wireModel of wire) {
|
|
321
359
|
if (remoteIds.has(displayKey(wireModel.id))) continue;
|
|
322
360
|
if (!isPromotableWireModel(wireModel)) continue;
|
|
323
|
-
|
|
324
|
-
|
|
361
|
+
const collides = claimedNames.has(displayKey(wireModel.name));
|
|
362
|
+
if (collides && (wireModel.contextWindow ?? 0) <= (claimedNames.get(displayKey(wireModel.name)) ?? 0)) continue;
|
|
363
|
+
/**
|
|
364
|
+
* A surviving collision gets the id appended, because the whole point of
|
|
365
|
+
* promoting it is that the user can TELL IT APART from the equally-named
|
|
366
|
+
* row: two rows rendering as `MiniMax-M2` is a picker that lies about
|
|
367
|
+
* having one model. The id is the `config_name` the bridge sends, so it is
|
|
368
|
+
* also the most actionable disambiguator available.
|
|
369
|
+
*/
|
|
370
|
+
const name = collides ? `${wireModel.name} (${wireModel.id})` : wireModel.name;
|
|
371
|
+
claim(wireModel.name, wireModel.contextWindow);
|
|
372
|
+
claim(name, wireModel.contextWindow);
|
|
325
373
|
result.push({
|
|
326
374
|
id: wireModel.id,
|
|
327
|
-
name
|
|
375
|
+
name,
|
|
328
376
|
...wireModel.contextWindow === void 0 ? {} : { contextWindow: wireModel.contextWindow },
|
|
329
377
|
...wireModel.maxTokens === void 0 ? {} : { maxTokens: wireModel.maxTokens },
|
|
330
378
|
...wireModel.creditMultiplier === void 0 ? {} : { creditMultiplier: wireModel.creditMultiplier },
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "dsh-connect-trae",
|
|
3
3
|
"displayName": "DSH Connect Trae",
|
|
4
4
|
"description": "把本机登录的 Trae 模型接入 DeepSeek Harness:国内版与国际版双供应商并行,提供用量/积分概览与每日签到领取。",
|
|
5
|
-
"version": "4.4.
|
|
5
|
+
"version": "4.4.1",
|
|
6
6
|
"author": "dingminhua",
|
|
7
7
|
"copyright": "Copyright (c) 2026 LaoDing",
|
|
8
8
|
"license": "MIT",
|