@eddyskywalker/dsh-chatgpt-subscription 0.62.0 → 0.63.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 CHANGED
@@ -2,6 +2,44 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.63.1 - 2026-11-07
6
+
7
+ - **[codemode] 工具调用入参被切断或混入 DSML 残留时补读 `"code"`,不再把整段污染文本当源码编译**
8
+ - **根因**(`src/host/codemode/transport.ts`):`opendesign/deepseek-v4.1-flash-eco` 会把工具调用的对象头切坏并混入 `</||DSML||` 残留,但 `"code"` 的值往往仍是完整程序(归档里的真实样本 878 字符、可直接编译)。旧解析器在整段 `JSON.parse` 与按花括号切段都失败后落进「纯程序文本」兜底,把整段污染文本当源码编译,报一个与真实原因无关的 `Unexpected token`,还丢掉了那段能跑的程序。两条真实样本(`session-b3b7b035`「今日更新内容查询」,`reasoningEffort: max`):`{"code_badge_none">\n</||DSML||: … , "code": "<878 字符程序>"}` 与 `{"code_edit_note: …`;损坏在助手消息落库时即已存在(早于工具执行),归模型/网关侧,本条修的是我们对它的**处理方式**。
9
+ - **修法**:`parseArguments` 在「纯程序文本」兜底之前新增损坏负载分支,三件套各自只做一件事——`looksDamagedArguments` 只认两种证据(以 `{"` 开头的对象形态、或正文带 DSML 残留,不拿泛化的 `</` 判据,因为真程序里写 HTML 字符串是正常的);`splicedMember` 按键名扫描 `"code"` / `"description"` / `"summary"`,值必须是完整闭合的 JSON 字符串字面量(按转义规则扫描后再 `JSON.parse`,不会被值内部的引号或反斜杠骗到);补不出来则 `damagedArgumentsError` 明确拒绝并提示重发一次完整调用,**绝不把整段负载送进求值器**。`description` 缺失时沿用 `summary → 源码首行` 的既有兜底。
10
+ - **不动的地方**:合法游离程序(含 `<div>` 之类 HTML 字符串)照旧走 `bare` 分支;`fused` 两段拼接、子调用入参别名容错与 `code_tools_*` 发现工具均未改,工具 Schema 未动。
11
+ - **回归**:`test/codemode-argument-recovery.test.ts` 新增 4 条(DSML 污染头补读后照常执行且标题降级到源码首行、尾部截断仍补得回来、源码含 HTML 的普通程序不受影响、补不出值时明确拒绝并回显实际键名 `code_edit_note`);`docs/codemode-code-run-error-audit.md` 新增 P5 并记入两条真实入参回放。`npm run typecheck` 通过;全套 Vitest 371 个文件通过 / 2 个跳过(6834 例通过 / 9 例跳过)。
12
+
13
+ - **[kimi-code] 删除从未接线的静态前缀预热 helper**
14
+ - **删的是什么**(`src/host/kimi-code/adapter.ts`):`maybeWarmupStaticPrefix`、`StaticPrefixWarmupInput`、`StaticPrefixWarmupOutcome`、`MIN_WARMUP_DRAFT_CHARS`、`DEFAULT_MIN_WARMUP_QUOTA_RATIO`,以及因此不再被引用的 `orderStaticPrefixMessages` 导入;`test/kimi-code-adapter.test.ts` 里那条"四道闸门"用例同步删除。
15
+ - **为什么删**:它自 0.63.0 起只有测试调用、没有生产调用点。四道闸门里最关键的是"输入框草稿 ≥ 6 个字符",而草稿只有客户端拿得到;宿主能碰到的唯一触发点(真实请求入口)串行预热并不比冷启动本身更快,改成与主请求并行又会在同一前缀上做双份冷预填充。语义不成立,删掉,而不是留一个永远不会跑的接线点。
16
+ - **未受影响**:冷启动 singleflight(`acquireColdStartWarmup`、`coldStartGroupKey`、25 分钟 TTL 记忆、2.5 秒跟随预算)、子代理突发错峰、标题请求让行、等待期续热(`cache-wait`),以及静态前缀重排(`orderStaticPrefixMessages` 在 mapper 里照旧生效)。
17
+ - **回归**:`npm run typecheck` 通过;`test/kimi-code-adapter.test.ts`(54 例)、`test/kimi-code-cache-wait.test.ts`、`test/cache-warmup-install.test.ts` 共 102 例通过;全套 Vitest 371 个文件通过 / 2 个跳过(6830 例通过 / 9 例跳过)。
18
+
19
+ ## 0.63.0 - 2026-11-07
20
+
21
+ - **[codemode] 全量对齐内核 PTC 生命周期/提交车道/错误语义,新增融合参数救援与子调用入参别名容错**
22
+ - **两段拼接参数救援与别名兜底**(`src/host/codemode/transport.ts`):`parseArguments` 支持原生对象、JSON 字符串、两段拼接(`{"title":…,"message":…}{"code":…}`)与纯程序文本四种形态;拼接时自动提取末段源码并将前段作为 `progress_update` 简报补发(`<callId>:ptc:0`);兼容 `program` / `source` / `script` 等源码别名键,`description` 缺失时按 `summary → 简报标题 → 源码首行` 三级兜底,拒绝时回显实际传入键名与前 120 字符原始片段。
23
+ - **宿主层子调用入参别名容错**(`normalizeSubCallArgs`):当目标规范键未提供且别名键非该工具原生属性时,自动将 `read` / `edit` / `write` / `read_image` 的 `path` / `filePath` 映射为 `file_path`、`glob` / `grep` 的 `file_path` / `filePath` 映射为 `path`、`edit` 的驼峰键映射为下划线键、`win_bash` 的 `cwd` / `timeout_ms` / `runInBackground` 映射为规范键、`job_output` / `job_kill` 的 `jobId` 映射为 `job_id`。
24
+ - **对齐内核 `PtcExecutor` / `PtcCalls` 五项机制**(`src/host/codemode/retention.ts`、`executor.ts`、`entry-codemode.ts`、`transport.ts`):
25
+ 1. 展开 Cordis `cordis.original` 包装链,按 `(agent, originalProvider)` 在 `agent.ctx.effect` 上去重注册释放钩子,修复会话/子代理销毁时常驻进程未自动释放的泄漏;
26
+ 2. 新增会话级 `awaitPredecessors` 与 `executor.reset(agent)`,新调用进入前等待同会话已 `abort` 的前序运行与进行中的重置排空,重置失败抛 `CodeResetFailedError` 并阻塞后续调用直至重试成功;
27
+ 3. 优先通过 `ctx.tools.definitions(exec.agent, exec.toolSet)` 按调用方实时解析可见工具集,消除多会话并发时模块级 `catalog` 互相覆盖;
28
+ 4. Commit Lane 在队列头部启动时惰性求值并发分类 `classify()`,并在同步挂载图片与 `additionalContexts` 后立即向程序返回子调用结果,将 `shapeDispatchLog` 与 `tool/ptc-dispatch` 落盘放入带 `maxParallelSubCalls` 背压的有序 `logWork` 链中后台排空;
29
+ 5. 对齐 `ToolCallLimitExceededError`、`CodeRunFailedError`(`CODE_RUN_FAILED`)与外层取消 `AbortError`(`ABORTED`),常驻模式下保留子调用超限原始原因与完整诊断。
30
+ - **恒定说明段强化**(`src/host/codemode/rules.ts`):静态形状表覆盖 10 个内置信封与 2 个裸数组(`job_list` / `list_agents`),补充 `file_path` / `path` / `workdir` 参数键区分、Windows 路径/正则反斜杠转义、非模块图限制,以及子进程 `process.env` 为空(`os.tmpdir()` 与 `node:child_process` 调 `gh`/`git` 缺失环境变量)应改用 `await tools.win_bash({ command })` 的规则,同一部署下保持逐字节恒定。
31
+
32
+ - **[kimi-code / cache-warmup] 静态引导前缀重排、突发预填充节流与大输出预览留存优化**
33
+ - **静态前缀重排与指纹扩展**(`src/host/kimi-code/mapper.ts`、`adapter.ts`):识别首轮用户消息中的静态引导块(`AGENTS.md` 指令、技能目录、语言覆盖提示)并稳定前置排序,使主代理与子代理共享更长静态前缀;`prefixFingerprints` 与 `coldStartGroupKey` 纳入 `staticPrefixHash`。
34
+ - **主会话标题让行与子代理突发错峰**(`src/host/kimi-code/adapter.ts`):`session-title-first-prompt-llm` 旁路请求等待主会话首轮响应头到达后再发出;同账号/同模型并发子代理首轮长负载按 `acquireSubagentBurstPacing` 错峰进入预填充;后台预热增加最小草稿长度(6 字符)与剩余额度比例(20%)门限。
35
+ - **缓存预热投影与留存修正**(`src/host/cache-warmup/projection.ts`、`install.ts`、`retrieval-intent.ts`、`usage.ts`):区分构建/测试失败日志中内嵌的局部 `diff --git` 与纯补丁输出,避免 25KB+ 测试日志因含快照 diff 而跳过投影;20KB+ 超大 `grep`/`glob` 输出自动开启导航预览;补齐含 `cache_read_input_tokens` 原始字段的命中率统计。
36
+
37
+ - **[proxy] 系统代理探测不再为无控制台宿主闪出 cmd 黑窗,win32 也不再经过 shell 层(#91)**
38
+ - **根因**:#19 曾以 completed 关闭,但修复从未进入 `src/host/proxy-manager.ts`——win32 分支的 `execSync('reg query …')` 一直缺 `windowsHide`。`execSync` 默认经 `cmd.exe /d /s /c`,当宿主自身没有控制台时(detached 启动的 `dsh web`、GUI 拉起的父进程),Windows 会为这条短命 shell **新分配一个可见控制台**;又因为系统代理缓存 TTL 只有 5 秒,`resolveActiveProxyUrl()` 每跨过一次 TTL 的请求都会复现一次黑窗。
39
+ - **修法**:三条探测(win32 `reg query`、macOS `scutil --proxy`、Linux `gsettings get`)统一改走新增的 `runSystemProbe()`,以 `execFileSync` + `windowsHide: true` 直接起可执行文件:既不再有 `cmd.exe` 这一层(`reg.exe` 的键路径作为独立参数传入,无需 shell 引号),也不会再分配可见控制台。macOS/Linux 上 `windowsHide` 是空操作,但让三个平台的意图只写一次。
40
+ - **不改的部分**:`SYSTEM_PROXY_CACHE_TTL_MS` 仍是 5 秒。把它放宽到 30–60 秒会改变「改完系统代理多久生效」的用户可见语义,属于产品取舍,不在本次修复内;`proxyMode` 为 `direct`/`custom` 时本就不调用探测,无需再改。
41
+ - **回归**:`test/proxy-manager.test.ts` 用 `vi.mock('node:child_process')` 记录探测调用(同时保证测试绝不真的 fork 系统命令),新增「System probe launch shape (#19 / #91)」4 条断言:win32 直接起 `reg.exe` 且参数为 `['query', 'HKCU\Software\…\Internet Settings']`、macOS/Linux 分支同样带 `windowsHide: true`、探测抛错(如沙箱里没有 `reg.exe`)仍回落环境变量。反向验证:摘掉 `windowsHide` 后前 3 条立即失败。
42
+
5
43
  ## 0.62.0 - 2026-11-07
6
44
 
7
45
  - **[opendesign] 随包模型表补齐价目表新增的 4 个模型(37 → 41)**