dsh-connect-trae 3.5.1 → 3.6.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 +79 -0
- package/README.md +1 -0
- package/lib/client.js +517 -0
- package/lib/index.d.ts +42 -0
- package/lib/index.js +526 -26
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,84 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.6.1 (2026-10-16)
|
|
4
|
+
|
|
5
|
+
> **「自动续期」不再是一句没有期限的承诺。** 卡片现在会告诉你**刷新令牌**何时到期 ——
|
|
6
|
+
> 在那之前访问令牌会自动续期,在那之后自动续期就彻底停了,必须重新登录一次 Trae。
|
|
7
|
+
|
|
8
|
+
### 修复
|
|
9
|
+
|
|
10
|
+
- **刷新令牌的到期时间对用户完全不可见(issue #37 追问引出)**:
|
|
11
|
+
- **问题**:卡片一直只写「访问令牌 {时间} 过期(自动续期)」。这句话是对的,
|
|
12
|
+
而且一直对 —— 直到**刷新令牌**到期的那个瞬间,自动续期就永久停止了。
|
|
13
|
+
一个读了几个月「自动续期」的用户,没有任何理由预期这件事。
|
|
14
|
+
- **根因**:刷新令牌的到期时间**被解析了、也被存下来了,但从来没送到浏览器** ——
|
|
15
|
+
状态接口里根本没有这个字段,所以卡片无从显示。
|
|
16
|
+
- **现在**:状态接口暴露刷新令牌到期时间,卡片**按账号**在临近到期时给出一行提示:
|
|
17
|
+
- 剩余 **30 天**以内 → 提醒(警告色),写明**到期时间**与**还剩几天**;
|
|
18
|
+
- **已到期** → 明确说明「自动续期已停止」,并给出恢复方式(重新登录一次 Trae);
|
|
19
|
+
- **还很久 / 没有该字段**(CLI 凭据本身不带)→ **不显示任何东西**。
|
|
20
|
+
健康的令牌不该在每一行都占一行文字,伪造的期限比不显示更糟。
|
|
21
|
+
|
|
22
|
+
> 这条不是理论问题:我们在排查 `#38` 时**亲身遇到过** —— 某区域插件自存的凭据访问令牌已过期,
|
|
23
|
+
刷新也返回 401,而卡片上一直写着「自动续期」。当时只能靠人肉发现。
|
|
24
|
+
|
|
25
|
+
### 测试
|
|
26
|
+
|
|
27
|
+
- 新增 5 例覆盖三种状态与两个边界(健康不显示、临近显示截止日与剩余天数、已过期显示错误态、
|
|
28
|
+
无该字段不伪造、最后一天仍算「未过期」)。
|
|
29
|
+
- **变异验证**:去掉 30 天提醒窗口 → 2 例变红;在缺少字段时伪造一个期限 → 1 例变红。
|
|
30
|
+
- 全仓 **660** 例测试通过,类型检查通过。
|
|
31
|
+
|
|
32
|
+
## 3.6.0 (2026-10-16)
|
|
33
|
+
|
|
34
|
+
> **多个账号可以并存了。** 本版新增**账号导入 / 导出**:不再需要每次把某台机器的登录凭据
|
|
35
|
+
> 手工写进默认路径来顶掉上一个账号 —— 导出一份 JSON、在另一处导入即可。同时补上
|
|
36
|
+
> `#39` 那条诊断:上游没下发 function 配置时,报错不再读起来像本地故障。
|
|
37
|
+
|
|
38
|
+
这是一次 **minor** 升级(新增用户可见的界面与能力)。
|
|
39
|
+
|
|
40
|
+
### 新增
|
|
41
|
+
|
|
42
|
+
- **账号导入 / 导出(issue #37)**:账号区新增一行「导入 / 导出账号」,
|
|
43
|
+
- **导出**:勾选若干账号 → 下载一个 JSON 文件(`trae-accounts-YYYY-MM-DD.json`);
|
|
44
|
+
- **导入**:选择文件 → **脱敏预览**(只显示账号标识与「是否有 Token」,不显示凭据)→ 勾选 → 导入;
|
|
45
|
+
- 文件格式与同族 `dsh-connect-workbuddy` **互通**(顶层 snake_case:`access_token` / `refresh_token` /
|
|
46
|
+
`uid` / `nickname` / `domain` / `expiresAt`(毫秒) / `refreshExpiresAt` / `auth_raw`),
|
|
47
|
+
所以两边导出的文件可以互相导入。
|
|
48
|
+
- **顺带把存储升级成多账号**:本插件原先每个区域只保存**一个**凭据,导入的第二个账号无处可放。
|
|
49
|
+
现改为**每区域一个文件保存凭据数组**(格式版本 1→2),**旧文件仍可读**、在下一次写入时自动升级。
|
|
50
|
+
- 导入按钮在**未登录时也可用** —— 一台从没登录过的机器,正是最需要导入别处导出的文件的时候。
|
|
51
|
+
|
|
52
|
+
> **区域门禁是正向匹配**:导入文件里的 `domain` 是文件作者可控的值,而本插件「认不出就当作国内版」
|
|
53
|
+
> 的规则对**上游下发**的数据是对的、对**导入文件**是危险的(伪造域名会被塞进国内版)。
|
|
54
|
+
> 因此导入走一条**只认正向识别**的通道:空值、认不出的值、以及明确属于另一区域的值一律**跳过并计数**,
|
|
55
|
+
> 绝不静默落库。国内版与国际版是两个并行的供应商栈,跨区导入会导致跨区计费。
|
|
56
|
+
|
|
57
|
+
### 修复
|
|
58
|
+
|
|
59
|
+
- **修复一个会导致账号丢失的写入缺陷(本次实现导入功能时发现)**:本插件的刷新路径原先把
|
|
60
|
+
「刚刷新好的那一个凭据」当作**整个文件**写回。在单凭据时代这没问题;一旦一个区域能保存多个账号
|
|
61
|
+
(正是导入带来的),**刷新一个账号就会把同区域的其他账号全部删掉**。
|
|
62
|
+
已改为**读-改-写**:只替换被刷新账号自己那一条,其余条目原样保留。回归测试专门钉住了这一点。
|
|
63
|
+
|
|
64
|
+
- **上游未下发 function 配置时,报错读起来不再像本地故障(issue #39)**:
|
|
65
|
+
- 报告者遇到的现象是每次调用都返回 `2001 no function config found for appId=…`,
|
|
66
|
+
他据此排查了一圈本地凭据与插件版本,最后才发现问题在服务端 —— 上游的
|
|
67
|
+
`get_detail_param` 当时对**每个** SOLO function 都返回空的 `config_info_list`,随后**自行恢复**。
|
|
68
|
+
- 现在(a)`2001` 有了明确文案:**「上游尚未下发本通道的 function 配置(这是上游侧的状态,
|
|
69
|
+
不是本地凭据或配置问题)」**;(b)当**所有** function 都返回 200 却一条配置都没有时,
|
|
70
|
+
目录读取会抛出专用的 `TraeEmptySoloDirectory`,把「上游没下发」与「所有 function 都请求失败」
|
|
71
|
+
区分开。两者都不暗示需要重新登录,因为这个条件是**会自行恢复**的。
|
|
72
|
+
|
|
73
|
+
### 测试
|
|
74
|
+
|
|
75
|
+
- 新增 4 个测试文件、共 34 例:导入导出格式(解析 / 脱敏预览 / 往返 / 区域门禁)、
|
|
76
|
+
导入路由(HTTP 边界上的伪造区域拒绝、导入前重新解析文件而非信任预览)、
|
|
77
|
+
存储升级与**刷新不吞账号**、以及端到端的「一处导出 → 另一处导入」。
|
|
78
|
+
- 区域门禁做了**变异验证**:把门禁改成 fail-open(正是同族插件 `#42` 修过的那个缺陷)后,
|
|
79
|
+
格式层与路由层**各有用例变红**;把毫秒单位改成错误的换算同样被抓住。
|
|
80
|
+
- 全仓 **655** 例测试通过,类型检查通过。
|
|
81
|
+
|
|
3
82
|
## 3.5.1 (2026-10-16)
|
|
4
83
|
|
|
5
84
|
> **DeepSeek-V4 四个模型行不再必然报 4001。** 本版修一处 wire 名单合并的方向错误:
|
package/README.md
CHANGED
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
- **识图能力跟随 Trae 自身的标注** —— Trae 把某个模型标为 `multimodal` 时,插件直接按多模态对外声明,无需你在卡片上逐一手勾(issue #16)。判据是「**你手动勾选的 ∪ Trae 标注多模态的**」:Trae 明确标 `false` 或未标注的模型保持纯文本,你可以照旧手动为它们打开图片输入。卡片上被自动开启的那一行显示为已勾选且只读,并说明原因。详见下方「图片输入(识图)」。
|
|
43
43
|
- **多账号切换** —— 支持重新读取 Token 列表并选择账号;Token 不写入 DSH 设置。**你的选择会被记住并长期生效**:插件不会因为某个账号额度用尽、或检测到另一个可用账号就自作主张替你切换(换账号意味着换人计费)。所以当绑定的账号额度耗尽时,卡片会**明确告诉你**,并把本机其他还有额度的账号连同其可用积分数列出来,由你一键切换——而不是让面板一直空着、也不自动把你切走。「刷新账号与 Token」每次都会回报结果(找到几个账号、当前仍绑定谁),不会再「点了没反应」。下拉里显示的是产品名(`Trae` / `TRAE SOLO` / 国际版),便于分辨凭据来自哪个安装。
|
|
44
44
|
- **跟随 Trae 当前登录的账号** —— 你在 Trae 桌面端**退出并换登录**后,卡片会检测到「插件绑定的账号」与「Trae 现在登录的账号」不一致,并给出一行提示与**一键切换**(复用账号下拉的同一次写入,不引入第二条切换路径)。想让插件**自动跟随**,可打开设置卡片里的「跟随 Trae 当前登录的账号」开关:此后每次配置生效都会把 `accounts.<region>` 重绑到 App 当前登录的账号。**该开关默认关闭**——已有配置保持原来的严格绑定,自动换绑意味着换人计费,必须由你主动勾选;未勾选时上面那行提示就是你的手动通道。(issue #29)
|
|
45
|
+
- **账号导入 / 导出** —— 不用再为了用第二个账号而把凭据手工写进默认路径、顶掉上一个。在卡片账号区的「导入 / 导出账号」里:**导出**勾选若干账号下载一份 JSON;**导入**选择文件后先看**脱敏预览**(只显示账号标识与「是否有 Token」,不含凭据本身)再勾选导入。文件格式与同族 `dsh-connect-workbuddy` **互通**,两边导出的文件可以互相导入。导入按账号去重(同一账号再导入即覆盖更新),**认不出所属区域或因缺 Token 的记录会被跳过并计数**——国内版与国际版是两条并行计费通道,跨区导入会导致跨区计费,所以这里只认同能**正向识别**的区域。导出文件里是**有效 Token,请当作密码保管**。(issue #37)
|
|
45
46
|
- **只读用量与模型管理** —— 国内版查看 Work 积分与通用积分,国际版查看订阅/试用状态;刷新/启用 Trae 模型;只读查询不消耗额度。
|
|
46
47
|
- **积分临近到期会提醒** —— 剩余额度只回答「还有多少」,回答不了「**哪一笔先到期**」;提醒条按到期紧迫程度逐级加重(**7 天 → 24 小时 → 已过期**),写明金额、套餐数和最早到期时间,避免只盯总额时悄悄丢掉最先到期的额度。国内版在用量页与输入框积分面板两处都显示(国际版是订阅制,没有逐包到期数据)。
|
|
47
48
|
- **一键测试启用模型** —— 给**已启用**的每个模型发一条最小消息(一句 `ping`、不带工具),逐个告诉你能不能真的应答:**可用** / **需要更高档位**(Trae `1005`,你的套餐不覆盖)/ **上游不提供**(`4001`,SOLO 通道没有这个模型)/ **被限流**(`4011`,Trae 限了这条通道)/ **登录凭据被拒** / **本次未测出**。最后一项是一等公民:超时、断连、代理、5xx **一律不算「不可用」**——只有上游明确的拒绝才算负面结论。**这是插件里唯一消耗额度的操作**(签到改变的是账号状态,不消耗),只在你点击时运行,结果只留在当前会话里不写入设置。
|