Repository navigation
wb2api 1.7.0
wb2api 1.7.0(versionCode 49)
新增版本公告检测,并把上游 10-27 → 10-31 的变更跟进到位(其中一条是推翻我自己 1.6.9 的做法)。
1. 新增:启动时检测新版本
版本号由远程文本驱动(你随时改页面即可公告,不必发版):
- 拉取远程公告页 → 正则
最新版\s*[vV]?\s*(\d+(?:\.\d+){1,3})取版本 → 按段数值比较
(字典序会把1.10.0判成比1.9.9旧); - 远程文本里版本号后面常直接跟 URL/中文(
最新版1.6.9https://…),所以正则不加\b;
页面被富文本插了标签时先剥标签再匹配; - 发现更高版本 → toast「发现新版本 x.y.z(当前 x.y.z)」;
- 网络异常 / 超时 / 非 200 → 明确回执(不会静默);页面可访问但没有「最新版x.x.x」→ 单独文案;
- 设置 → 关于 → 「检查更新」 可手动重试(给出「正在检查 / 已是最新 / 无标记 / 网络异常」完整回执);
- 独立 OkHttp(8s 超时、浏览器 UA),只在冷启动跑一次,不占网关连接池、不影响启动速度。
2. 上游跟进(10-27 → 10-31,45 个提交)
| 上游 | 内容 | 落地 |
|---|---|---|
| PR #108 | 6020/6021 恢复请求内轮转,终态改回 429 + Retry-After | ✅ 1.6.9 我按当时推荐方案做的是 fail-fast + 503,上游实测「同号连续 6021 后 33 秒就通」→ 换号有意义,且上游本身回 429(SDK 对 429 才按 Retry-After 排队重试)。等待时长取 body 的 data.retry_after(6020 实测 40s),缺省 5s,封顶 600s |
| issue #117 | 号都在途占满时等一个名额 | ✅ 50ms 轮询、上限 10s、只给一次、不占换号次数 —— 「只差一个并发槽」的请求不再直接 503 |
| 10-27 | 11102 负缓存 TTL 6h/24h → 2m/10m | ✅ 11102 也会由瞬时抖动/分类误判触发,锁 6 小时会让整池该模型不可用 |
| 10-27 | 全冷却兜底不得绕过模型级冷却 | ✅ 否则兜底会挑一个冷却中的号白撞上游 |
| 10-30 | 客户端版本 5.9.3 / 5.9.4;内置 CLI 2.165.0(与 npm latest 2.176.0 不同源) | ✅ 新增 BUILTIN_CLI_VERSION 区分;Web 层 Origin 改 www.workbuddy.cn |
| 10-31 | 下架夜猫子(删整个排程) | ✅ 删 Scheduler 分支与对应配置项(旧配置的键被忽略,无需迁移) |
未移植(记录在案):思考档位网关策略(PR #104/#105,新功能,工作量大)、Kimi 工具 $ref 展开、按模型隔离的软限流、窗口用量加权调度、/v1/embeddings。
3. 审计修复(逐文件核对注释与实现)
| 级别 | 问题 |
|---|---|
| P0 | responder(读流/解析)抛异常没有任何处置 —— bodyStreamOf 注释声称的「可分类异常」会冒到 HttpServer 变成匿名 500,该号不罚、不换号 |
| P0 | hardMarkers 含裸词 "insufficient":400/403 的 insufficient_scope / insufficient permissions 会被判成「余额耗尽」→ 冷却到次日 04:00(近 24 小时出池) |
| P1 | max_completion_tokens 翻译失败(字符串/0/负数)被静默丢弃 → 由「模型最大输出」顶替(想限 1000 实际拿到数万 token) |
| P1 | http_success 指标用 hop.ok || hop.sent,错误响应也是 sent → 该指标恒等于 completed |
| P1 | revive(解冻)不清 breaker_retry → 解冻后第一次熔断仍按历史次数退避(最长 6h) |
| P1 | mapError 的 status 参数从未使用(三处调用各传不同值,误导读者) |
覆盖安装:签名与 1.6.3–1.6.9 一致(SHA-256
32a556af…6c5c17),账号与配置保留。