Repository navigation
#68 到 #83 攒了十来张单子,这批一起收。其中三张是同一类毛病:代码把「没数据」和「数据是空」当成了同一件事。
最要紧的三条
| 症状 | 真实原因 |
|---|---|
| 一个失效账号吃掉整次请求的 8 次重试,最后报「API 密钥无效」 | 以「刷新拿到了新 token」判定账号仍可用。有一类账号 refresh 长期有效、chat 恒回 403,判死条件因此恒假 |
| buddy 某一轮被中断后,之后每一轮都失败 | 中断留下的 assistant 消息只有 reasoning、没有正文,空字符串被原样发到 wire,国内网关 400/11151 且不在重试集合里 |
| zcode 全部模型勾选后,每次重启又变回全禁用 | 用户全开时黑名单是空对象,与「从未选过」无法区分,启动补静音据此又把它们全关一遍 |
逐条
#68 失效账号耗尽重试预算 — 池车道以「刷新成功」当「账号可用」。改法:单次请求内只允许该账号换一次票(refreshedThisRequest),第二次仍 session_dead 就判死并轮到下一个。取「第二次」而不是把惩罚提到刷新之前,是为了仍给真正过期的 token 一次机会。压缩重试路径同步。
#70 侧栏入口开关 — 新增 sidebarRow 配置(默认开)。只控制左侧栏那一行:设置页的 XD Pool 卡片始终注册,模型池不受影响 —— 关掉入口不能把开关本身也锁在门外。
#72 订阅包余额虚高 30 倍 — fetchCredits 只把 CapacityType === 4 当月包,而 2 是周期订阅包(12 期 × 4000,CapacityRemain 是整期剩余、CycleCapacityRemain 才是当期剩余),落进「一次性」分支。三账号实测:官方 3,399.8 / 插件 102,396 → 修复后 3,366;另两个只有月包的账号(3,049 / 2,771)不变,所以长期没被发现。
#73 中断回合留下的空 assistant 消息 — serializeMessages2 出口加 isBlankWireMessage / dropBlankWireMessages,serializeMessages4 同步。三点取舍都用真实请求验证过:user 空消息不动;不伪造占位内容;有 tool_calls 的 assistant 消息绝不删(它是 tool 结果的配对锚点)。
#74 全开渠道每次重启被重新禁用 — setModelDisabled 打开模型时是删键而不是写 false,于是「用户全开」与「从未选择」在磁盘上是同一个空对象。新增持久标记 selectionTouched,四个用户入口都置位,启动补静音只在标记缺失时执行。影响面是「所有模型都打开」的渠道,目录越小越必然 —— 这解释了为什么只有 zcode 反复被报。
#75 保存模型选择后界面回滚 30 秒 — setDraftFor(region, undefined) 的语义是「退回池子最后报告的状态」,而那份状态靠 30 秒轮询刷新。改成先 refresh(region) 再清草稿(重读失败则保留草稿);settingScope.set 的返回值不再丢弃,revision 冲突时保留草稿、报「设置已在别处被修改」、不谎报成功。
#82 RPC 桥惰性解析 — 2.4.6 的 CHANGELOG 声称这条已修,但发布产物里 installPackRpc 仍只捕获一次。现已改为每次 callPack 前惰性重解析。
社区 PR
- #81(@jmglsi) 第三条内容指纹:
Relative paths resolve from the workspace root→are resolved against the workspace root,语义、长度、换行位置都不变,被网关字符串表收录的子串消失。 - #84(@Refeain) CodeArts 输出上限:三条路径(
listModels/resolveModel/ wire)统一按 65536 封顶。实测 384000 → HTTP 200 + SSE 帧InferHub.4001.200,65536 → 正常流式。
尚未定性
#69 CodeArts 提示密钥无效、#71 kimi k3.1 pro 没有响应 两张只有一句话。#69 至少有两条来源,其中 InferHub.4001.200 那条已随 #83 修掉;真正的 401/403 需要失败时的原始响应才能确认。#71 请补一下:是空回复、卡住不动、还是有报错文案。
验证
- 全套 80 文件 / 1033 用例(串行 60.7s 全绿)
pack.js每次改动后node --check通过- server
tsc0 错;clienttsc的 6 条是改前就有的(accounts.ts/context-budget.ts/free-upstream.ts的 Node 类型不匹配)