v0.7.0
v0.7.0
对齐浏览器 HAR 抓包证据的流式重构,加上资源稳态治理与全新 React 管理控制台。
流式与协议(对齐 HAR)
- 首个有效文本 token 超时:默认 75 秒(
M365_FIRST_TOKEN_TIMEOUT_SECONDS,范围 15–600),只以首个非空白文本 token 为准,保留 90 秒常规 WebSocket 读超时,不误杀搜索/生图/深推理的长首字。 - 安全非流式退化:仅在尚未提交任何 SSE 字节时返回标准 JSON 错误;已提交后只发合法 SSE error +
[DONE]。 - 统一 SSE 写锁:所有流式帧、工具输出与 keepalive 走同一个
sseWriter,消除并发写竞态。 - 故障转移收敛:
WS_READ_TIMEOUT与上游 422 纳入可转移;共享层传输故障(DNS/TCP/TLS/SOCKS5/503)不再逐账号轮转,避免账号切换风暴。 - 快照一次性消费:移植社区 PR #86 的
snapshotReconciler,内存降为 O(n),消除重复段落(署名见下)。 - 乱码修复:消除上游分片切断多字节 UTF-8 时产生的
U+FFFD。stripReplacementChars改用ToValidUTF8丢弃残余非法字节,流式过滤器新增 UTF-8 边界缓冲,被切断的汉字会被正确重组而不是丢弃。
资源与内存稳态
- 响应 buffer 池:上限 64 个 × 64KiB,超限对象不入池。
- MCP 待执行队列:上限 1024,满载淘汰最旧并回错误,取消/超时清理并释放切片引用。
- 缓存统计
KeyStats:LRU 淘汰(上限 1024)。 health_ping包级 map 定期 GC。- 连接池
Warm节流放宽为按缺口补足。
Web 控制台
- 全新 React SPA(Vite 6 + React 18 + TypeScript + motion),8 个页面:Dashboard、Usage、Accounts、API Keys、Conversations、Proxy Pool、Model Test、Settings;11 语言 i18n;由
/webapp/提供。 - 旧版单页 HTML 保留为回退界面,侧边栏版本号改为从
/api/version动态读取。 - 新增开机自启开关(HKCU Run,免管理员)。
协议与模型
- 真实模型目录:
flux-3/flux-4(生图),清除假模型gpt-5.6-sol/terra/luna与gpt-image-2;生图走标准/v1/images。 reasoning_effort路由:支持none/minimal/low/medium/high/xhigh,非法值返回 400。- 临时会话:
metadata.copilot_temp_session→disableMemory,且不入库。 - 引用解析:解析
displayData.content的 Title/Snippet。 - 计量风控:metering 接入主路径
/v1/chat/completions,图片能力冷却。 M365_MASTER_KEY平滑迁移:设置主密钥后仍能解密历史 fallback 加密的 refresh token,无需重新授权。- REST UA 统一为 Chrome,422 纳入重试白名单。
构建与发布
- 修复非 Windows 平台编译(
autostart桩),25 个平台产物齐备。 - 源码默认版本
dev,发布版由 CI 从 Git tag 注入。
社区贡献
感谢以下社区 PR,其成果已在 v0.7.0 中体现:
- #86 @2164312714-svg — ChatHub 文本快照一次性消费(
snapshotReconciler,已移植并在源码中署名)。 - #62 @banana2556 — 安全复用会话连接;连接池复用边界据此收敛(仅新请求复用连接,续接对话一律重新拨号)。
已知问题
internal/web/server.go中第二个body.Stream推理分支不可达(既有结构问题),reasoning_content目前不会流式输出。
产物
25 个平台二进制 + checksums.txt:linux(amd64/arm64/386/arm/mips/mipsle/mips64/mips64le/ppc64/ppc64le/riscv64/s390x/loong64)、darwin(amd64/arm64)、windows(amd64/386/arm64)、freebsd(amd64/arm64/riscv64)、netbsd(amd64/arm64)、openbsd(amd64/arm64)。