# 更新说明

## [1.0.2]

### 修复

- 输入框积分弹层的「刷新」不再与读端自己的时限等长：该通道按面板整段 20 秒预算执行，慢速凭据读取会让点击以超时收场。现在按留出序列化余量的预算作答，未完成的探测仍写入缓存，下一次轮询即可读到。
- 设置保存里越界的 token 预算不再丢掉整批改动：字段自带与后端一致的上限，超限值在保存前被挡下，不再等到整份选择载荷被拒收后只报一句 `invalid selection payload`。
- 签到开关在小时框留有无效文本时仍可关闭，不再提示错误却把计时器留在运行状态。
- 面板框在加载过程中不再产生一次读取错误：读取若落在面板文档就位、内容尚未到达的瞬间，此前会取到空对象。

### 改进

- 账号卡与设置卡维持单列堆叠，间距收紧，多数窗口不必滚动即可看全；签到日志框限高可滚动，新结果自动滚到可见处。
- 输入框积分弹层宽度随内容变化并对齐触发器右侧，高度上限连内边距一起计算；账号名过长时在列内截断并保留悬停提示。
- 在输入框弹层里切换账号后积分不再短暂显示成「—」，保存的账号选择不再被当成宿主的设置改动。
- 输入框弹层里选中账号那一行的压暗程度与账号前的圆点颜色写进插件自己的样式，不再取自宿主。
- 插件页承载面板的框高度改为跟随面板内容，最长约四个账号，账号更多时由面板自身滚动，不再固定成一个视口高度。

## [1.0.1]

### 修复

- 设置保存改用插件条目的实际命名空间，不再因为名字对不上而失败，面板里的来源开关、区域开关、签到与模型选择都受影响；宿主设置读取失败时保留上一次读到的设置，不清空停用账号、移除记录、积分保底和模型覆盖，补丁按顶层键替换。
- 面板路由挂载早于引擎就绪的窗口期内请求不再报 500；某条路由注册失败时释放已注册的部分，不再让面板卡在半挂载。
- 「重新检测账号」与加载期把账号扫描和网关启动纳入整段预算，按时应答，未完成的部分由后台刷新补齐；重新检测会移除登录文件已不在的 WorkBuddy 账号，目录暂时读不到时保留原账号与冷却。
- 输入框积分弹窗的「刷新」按总预算逐账号补读，多账号机器上不再逐个等满；面板通道调用带客户端超时；首次读取 WorkBuddy 积分时自动触发后台探测，冷启动和换号后的未知余额按 5 秒重读。
- 快速关闭再开启某来源时，新网关等待旧网关释放端口；首选端口被占用时改用实际绑定的端口，不再造成地址漂移。
- 插件重载后重新计算当天的签到时段，不再漏掉未领的时段，旧一轮仍在收尾时也不会并发第二轮；手动「立即运行」与命令面板签到记入当前已到点的时段，Qoder 当日轮次晚于签到时点开出时会在开出时刻补收。
- WorkBuddy、Trae、Qoder 收到上游终止标记即完成响应，不再等待 TCP 连接关闭；覆盖空终止回复、跨分块标记和 Trae 终止事件中的正文，加载期取消的请求也不再创建上游请求。
- 上游开始输出后才失败时，流不再裸断开：改为发出带内错误帧、终止帧与 `[DONE]`，客户端能正常收尾；取消或断开导致的连接中断不再被记为上游流失败。
- 上游回显的凭据不再原样出现在错误信息里，JSON 字段形式与 `Cosy-Key`、`X-Cloudide-Token`、`X-Ide-Token` 这类厂商写法一并覆盖，带内错误帧同样脱敏；凭据后面的字段不再被连带抹掉。
- Trae 拒绝回包中途断开时保留上游真实状态码，429 保留软限流分类；Qoder 登录过期帧不再被嵌套对象覆盖，每日限额的等待时长在消息内携带时也能读到。
- 修复国内 Trae、Qoder 的有效登录被误判为已过期，账号池因此为空、对应网关不可用的问题；没有过期时间的登录不再被当成已过期。
- Trae、Qoder 的轮流使用只在对话请求上换号，刷新模型列表和健康检查不再拨动游标；首选来源账号改名后，轮询与到期排序不再因旧标签永久停用；连登奖励只兑换已解锁的档位，签到程序关闭时不再被计为已领取。
- 输入框积分框切换账号时会报告结果：切到当前不能服务的账号时说明选择已保存、恢复后自动生效；刷新后账号已被停用则明确报无法切换，而不是假装已切过去。
- 模型 id 为 `__proto__` 时按普通 id 保存与读回；provider 注册失败时清空发现缓存，不再返回已释放的模型；到期时间或令牌刷新返回异常时长时按默认有效期记录，面板照常打开。
- 面板配色统一为同一组低饱和色相，四个语义色在暗色与亮色下协调一致，亮色下警告色与输入框积分圆点的对比度、模型页选中项的悬停配色一并修正。
- 显示名、包名与仓库名统一为 **WTQ Pool** / `dsh-wtq-pool`（WorkBuddy / Trae / Qoder 三个来源的首字母），插件卡片、模型选择器与面板标题一致；命令 id 与设置命名空间不变，升级后原有配置照常生效。
- Trae 模型目录自带的倍率传到面板，模型行显示 `x0.79` 这样的费率标签，模型选择器里的名称带上同一后缀，未给出费率的模型保持不标注；面板右下角的入口收成一排 GitHub、npm、文档与许可四个链接，标签跟随界面语言。
- 中英文文档明确 WorkBuddy 故障转移、Trae/Qoder 分发限制、主题重载与本地安装方式；报错指引与日志中的平台残留已清理，网关拒绝凭据的提示改为指向连接检查。

## [1.0.0]

首个版本。

### 功能

- 只读本机 WorkBuddy、Trae、Qoder 桌面 App 的登录文件，不发起独立的 OAuth 流程。
- 按 region 把账号合成模型池并注册成 provider：WorkBuddy 国内/国际、Trae 国内/国际、Qoder 国内/国际；没有账号的 region 不注册。
- WorkBuddy 被限流或额度用尽时自动换号，支持优先使用、轮询、临期积分优先和会话固定；Trae、Qoder 按请求分发，支持轮询与临期积分优先。
- 后台积分自动化：每日签到、任务奖励领取、连登解锁。到点和「立即运行」执行同一轮，顺带领取 WorkBuddy 国内账号已解锁的连登档位和已完成的任务奖励。
- 会话积分展开框带刷新按钮，重读当前模型这一组账号的积分。
- 插件页提供 **WTQ Pool** 配置卡片：账号池、模型勾选、连接检查三屏，覆盖三个来源。
- `xdpool.open` / `xdpool.rescan` / `xdpool.resetCooldowns` / `xdpool.doctor` / `xdpool.checkin` 命令。

### 说明

- provider 通过运行时注册接入（`ctx.llm.registerAdapter` + `ctx.llm.registerConfigurableProviders`），不改写宿主 provider 配置；插件设置由宿主持久化至 profile。
- 每个网关只绑 `127.0.0.1`，首选端口为 `42831`–`42881`，占用时使用临时端口；面板只接受实际回环对端。
- 对 `@earendil-works/pi-ai` 按实际解析到的版本适配请求上下文：新旧两代对 system 提示的承载方式不同，插件按当前解析结果选择形态，因此宿主换代或 profile 提升旧版都不会打断发消息。
- 会话输入框左侧显示当前模型的账号积分，点开可切换账号。
- 面板以同源 `iframe` 嵌在插件页的配置卡片里，样式与宿主页面互不影响。
