@eddyskywalker/dsh-chatgpt-subscription 0.40.0 → 0.40.2
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 +40 -0
- package/README.md +1 -1
- package/lib/client.js.map +1 -1
- package/lib/index.js +1662 -318
- package/lib/types/compat.d.ts +9 -1
- package/lib/types/compat.d.ts.map +1 -1
- package/lib/types/host/antigravity/adapter.d.ts.map +1 -1
- package/lib/types/host/antigravity/mapper.d.ts.map +1 -1
- package/lib/types/host/cline-pass/adapter.d.ts +2 -0
- package/lib/types/host/cline-pass/adapter.d.ts.map +1 -1
- package/lib/types/host/common/request-images.d.ts +15 -5
- package/lib/types/host/common/request-images.d.ts.map +1 -1
- package/lib/types/host/kimi-code/adapter.d.ts +143 -0
- package/lib/types/host/kimi-code/adapter.d.ts.map +1 -1
- package/lib/types/host/kimi-code/mapper.d.ts +166 -1
- package/lib/types/host/kimi-code/mapper.d.ts.map +1 -1
- package/lib/types/host/kimi-code/media-files.d.ts +232 -0
- package/lib/types/host/kimi-code/media-files.d.ts.map +1 -0
- package/lib/types/host/subagent-model-authorization.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,46 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.40.2 - 2026-10-25
|
|
6
|
+
|
|
7
|
+
- **[antigravity] 响应体中途断流归为可重试的传输失败,长回答不再一次断线就作废**
|
|
8
|
+
- **现象**:连接在读取响应体的途中被掐断时,undici 只抛一个不带错误码的 `TypeError: terminated`,宿主据此归一成 `UNKNOWN`——而 `UNKNOWN` 不在重试码表里,于是用户正在读的长回答就此结束;真实原因(`ECONNRESET`、对端关 socket、body 超时)挂在 `.cause` 上,落盘前已被丢弃,事后连发生了什么都说不出。
|
|
9
|
+
- **改法**:读取阶段的失败改判为 `TRANSPORT`(DSH 会重试的码),并把 cause 链写进错误消息(截断到 500 字符);没有终止帧的 EOF(既无 `finishReason` 也无 `[DONE]`)同样由 `PROVIDER_ERROR` 改为 `TRANSPORT`——那是连接被切断,不是上游的判定。线路自己已经给出的结论(带内 provider 错误、已构造的 `LlmError`)原样保留,不被降级成传输失败。
|
|
10
|
+
- **取消仍是取消**:调用方主动中止继续报 `ABORTED`,不会被当成可重试的传输故障。
|
|
11
|
+
- **为什么重试安全**:DSH 把失败的那次尝试记为 `assistant/attempt` 并丢弃,重试时重新开始;工具调用只在其流结束后才执行,所以重试既不会重复已提交的输出,也不会重复执行工具。
|
|
12
|
+
- **测试**:`test/antigravity-adapter.test.ts`、`test/antigravity-stream.test.ts` 新增 4 例——中途 `terminated` → `TRANSPORT` 且消息带 cause 链、无终止帧 EOF → `TRANSPORT`、主动取消 → `ABORTED`、以及上游返回的带内错误不被改写。
|
|
13
|
+
|
|
14
|
+
- **[kimi-code] 媒体与推理对齐官方 CLI:截图按 2000px 发送、图片与视频改走文件引用、混合推理字段与密文原样回放**
|
|
15
|
+
- **图片尺寸**:本线路请求版本的最长边改为 2000px(官方 CLI 默认也是 2000),此前沿用共享的 1024 上限,截图必须放下再重读才看得清;其它线路仍是 1024,编码字节上限(单张 256 KiB)没有跟着抬高,小图原样直发、无尺寸的引用与 body 装不下时的淘汰行为都不变。
|
|
16
|
+
- **文件引用**:新增 `src/host/kimi-code/media-files.ts`——`POST {coding base}/v1/files`,`multipart/form-data` 的 `purpose` 取 `image` 或 `video`,带本线路既有的 bearer 与 `X-Msh-*` 身份头,响应里的 id 之后以 `ms://<id>` 引用。这条路径避免 base64 带来的请求体膨胀,减少大媒体被 inline 体积护栏淘汰的情况。
|
|
17
|
+
- **缓存、回退与 404**:引用按「账号 + 内容」缓存并 single-flight(同一份字节并发只上传一次,缓存上限 256 条);上传失败、或内容被 body-fit 淘汰而根本没上传时,仍按原来的 inline 方式发送;服务以 404 拒绝被引用的文件时清掉该条缓存、在同一账号上改用 inline 重发,而指向模型或路由的 404 如实上抛。Anthropic 线路的图片行为一字未动。
|
|
18
|
+
- **推理字段**:`reasoning_content` / `reasoning` / `reasoning_details` 同时出现时全部收取(此前取到一个就停,丢掉服务已经给出的文本);`reasoning_details` 按官方读法分类——`summary` 是可见摘要、`encrypted` 是不透明密文状态(`text` 为空,载荷只留在 `encrypted`)、`index` 只作元数据而不改变顺序;回放时可见摘要当思考、密文作为不透明状态原样回传,且密文只被保存与回传,永不进入可见文本。`replayState` 按来源分别记录,不同来源的推理不会互相冒充。
|
|
19
|
+
- **活体验证**:`scripts/probe-kimi-files.probe.ts` 在本线路账号上跑通「上传 → 引用 → 对话」,图片与视频两条路径模型都如实描述了画面内容。
|
|
20
|
+
- **测试与验证**:新增 `test/kimi-code-media-files.test.ts`、`test/kimi-code-media-integration.test.ts`、`test/kimi-code-reasoning-dialect.test.ts`、`test/kimi-code-image-target.test.ts`,并扩充既有图片目标与 body 上限用例,共 83 例;`npm run typecheck` 三个 TS 项目 0 错误,全量 `LANG=C.UTF-8 npm test` **4878 passed / 8 skipped / 0 failed**。
|
|
21
|
+
|
|
22
|
+
- **[cline-pass] 修复长推理被 180 秒硬超时截断重试**
|
|
23
|
+
- **原因**:`withAttemptTimeout` 把 180 秒的 `AbortSignal.timeout()` 同时用于响应头等待和整个流式读取,导致模型已经开始正常响应后,仍在 180 秒处被中止并触发重试,长任务表现为突然截断重来。
|
|
24
|
+
- **修复**:响应头返回后立即清除该计时器,180 秒只负责响应头阶段;后续流式响应继续由现有 `streamIdleTimeoutMs` 空闲看门狗处理,用户主动取消仍然有效。
|
|
25
|
+
- **回归测试**:模拟响应头快速返回、正文 60ms 后才结束,旧实现会在 20ms 测试预算处截断,新实现可完整读完;网关 100ms 仍不返回响应头时,20ms 测试预算仍会正确报超时。
|
|
26
|
+
- **命名与测试清理**:`ClinePassAdapter` 的响应头超时覆盖项原名 `attemptTimeoutMs`,实际只管响应头等待,容易被读成整次尝试的超时,现更名为 `headerTimeoutMs`;同一轮删掉了两条用例里对 `AbortSignal.timeout` 的全局 mock——它们对新实现不再生效,真正的预算由 `headerTimeoutMs` 注入,用例语义不变。
|
|
27
|
+
|
|
28
|
+
## 0.40.1 - 2026-10-25
|
|
29
|
+
|
|
30
|
+
- **[dispatch] 修掉「路由能力从未真正生效」:守卫的探测一次答 `false`,就把完整的成对路由判成改路由请求并拒绝**
|
|
31
|
+
- **现象**:开了「设置 → 子代理」并授权了路由之后,调度模式带 `provider`+`model` 派发子代理,恒定收到 `subagent model selection: "subagent" always runs on the calling agent's own route and accepts no provider/model`;去掉路由参数反而能派出去(继承父路由)。也就是说配置一直是对的,被拦的是「按任务指定子代理模型」这件事本身。
|
|
32
|
+
- **根因(我们自己的守卫)**:`delegationDenialReason` 里 `declaresRouteParameters` 一旦答 `false`,就把这次调用改判成 inherit 模式,再把成对路由当成「试图把继承式工具改道」拒绝。而探测读的是 `tools.definitions(agent)` 里那份 `subagent` 定义——那份视图有可能不携带本部署 preset 的委派注册,于是它看到的是一份没有 `provider`/`model` 参数的定义,答 `false`。这个 `false` 造成的拒绝**没有任何调用能满足**,比它想避免的「向没有路由参数的工具索要路由」更糟。
|
|
33
|
+
- **改法(`src/host/subagent-model-authorization.ts`)**:完整成对路由**一律**进白名单校验(未授权仍拒,理由变成「不在本会话授权名单里」这种能照做的说法);只有「没给」和「只给一半」才走继承路由分支与相应诊断。探测本身也补了一层容错:先读 `parameters.properties`,读不到才退回原来的扁平读法,两种定义形状都不再被误读成「没有字段」。
|
|
34
|
+
- **测试**:`test/subagent-model-authorization.test.ts` 的 adaptivity 用例原本伪造的是 `{ provider: {}, model: {} }` 这种真实宿主从不产生的扁平形状,所以一直是绿的、也就一直没抓到问题;现在主用例改用真实 JSON Schema 形状,扁平形状保留为兼容用例,并新增「授权路由对在探测答 false 时放行」「未授权路由对仍以名单为由拒绝」两条。全量 4789 passed / 8 skipped / 0 failed(较上一版 +1)。
|
|
35
|
+
|
|
36
|
+
- **[compat] `PLUGIN_VERSION` 从 `0.1.0-alpha.0` 对齐到实际版本,并把「漂移」变成会红的断言**
|
|
37
|
+
- **现象**:这个常量自首次提交起一直没动过,而包已经发到 0.40.0;它被 `wire-auth.ts` 拼进 `user-agent`,于是每一次 Codex 请求都在宣告一个从未发布过的插件版本。
|
|
38
|
+
- **改法**:常量改为与包版本一致;`test/responses-client.test.ts` 里写死的旧字符串改为跟随常量,并新增一条断言——`PLUGIN_VERSION` 必须等于 `package.json` 的 `version`。这样下次发版忘了改常量,测试会红,而不是悄悄发出去。
|
|
39
|
+
- **为什么不用「发布清单加一条」**:靠人记的步骤会把同一个错误再犯一次;能执行的断言不会。
|
|
40
|
+
|
|
41
|
+
- **[docs] 缝隙表补三行、README 的支持区间更正**
|
|
42
|
+
- `.dsh/skills/dsh-harness-upgrade/SKILL.md` §2 的缝隙表原本 8 条,漏了 `src/compat.ts`、`src/host/common/credentials-compat.ts`、`src/host/common/brand-compat.ts` 三处同样是跨 harness 代际的桥接,现已各自补上 invariant(`compat.ts` 的 `PLUGIN_VERSION` 一条写明必须跟包版本一致)。
|
|
43
|
+
- `README.md` 仍写「一直到 0.2.0-rc.2、以 0.2.0-rc.2 为基线」,而 `peerDependencies` 早已覆盖 `0.2.1-rc.3`;已更正。
|
|
44
|
+
|
|
5
45
|
## 0.40.0 - 2026-10-25
|
|
6
46
|
|
|
7
47
|
- **[compaction] 新增「压缩路由」:把上下文压缩的摘要请求改派到指定 provider/model**
|
package/README.md
CHANGED
|
@@ -291,7 +291,7 @@ GPT-6 系列(6.1 Sol / 6 Astra / 6 Sol / 6 Luna)支持文本、图片输入
|
|
|
291
291
|
- Windows 或 Linux;
|
|
292
292
|
- Windows:系统需提供 Windows PowerShell,以使用 CurrentUser DPAPI;
|
|
293
293
|
- Linux:Host 用户必须拥有可写的 `~/.dsh`(或 `$DSH_HOME`),凭据文件会强制使用 `0600`、目录使用 `0700`;
|
|
294
|
-
- 已安装 DSH:peer 范围覆盖 **0.1.2-alpha.5 及以后的每一代**,一直到 0.2.
|
|
294
|
+
- 已安装 DSH:peer 范围覆盖 **0.1.2-alpha.5 及以后的每一代**,一直到 0.2.1-rc.3。构建与测试以 **0.2.1-rc.3** 为基线,旧版行为由版本兼容层保留,因此**同一份代码**可装在 0.1.2-alpha.5 以来的所有代上(用户分散在 npm 的 `latest` / `next` / `alpha` 三个标签上,多数人跑的是比 `alpha` 落后几个版本的 `latest`)。需要桥接的破坏性变更:
|
|
295
295
|
- **0.1.7** 重写了会话消息模型(工具结果由 `tool-result` 内容块改为 `role: "tool"` 消息)、删除了 `settings.register`(偏好改由插件自有存储落盘)、并让 agent preset 不再从 `~/.dsh/.agent-presets` 读取。插件在请求边界、设置服务与 preset 注册三处同时适配。
|
|
296
296
|
- **0.1.6** 把 workflow 引擎改了包名,插件在 preset 同步时按当前安装自动适配(见「随包分发的 Agent Preset」)。
|
|
297
297
|
- 0.1.1-rc.2 不再声明支持——它既没有 preset 用到的 `present` 工具,`mode` 枚举那时也还写作 `code`。
|