OH 学校模型请求修复¶
历史记录 / Historical record:本文保留当时的计划、研究或验收证据,不代表 0.11 当前能力全集。现行说明见 文档入口;英文入口见 English overview。
用户已授权按 DSH 的请求方式立即修复。依据 2026-10-20 诊断:当前流式请求每 3 秒派生一次未取消的 POST,一次操作最多产生 4 个在飞请求;本机延迟响应、并发上限 3 的接口已复现 429。
实现范围¶
- 移除请求竞速;单次 HTTP 请求及流读取均可取消。暂时失败仅在未输出内容时有限串行退避,遵守 Retry-After;不重放已输出的文本或工具调用。
- 桌面与移动宿主使用同一运行门禁,每轮独立取消标志。忙时拒绝新请求,等待旧任务真实退出再释放;移除按运行时长接管和共享标志重置。
- 认证校验区分有效、明确失效及暂时网络错误;网络异常和限流不触发强制续签。路由及 Cookie 独立刷新。
- 界面不把静默视为完成;取消涵盖发送前预检和已发送请求。429 保留真实错误,提供消息重试,续签只用于登录凭证。
- 更新桌面 bundled sidecar 和当前 dev 安装产物,核对版本与散列。
验收¶
- 慢响应超过 3 秒仍只发一次请求。
- 429 重试之间无重叠,服务端等待时间得到遵守。
- 等待响应头、读取流、退避期间均可取消;服务端观察到连接关闭。
- 已输出后失败不重放。
- 忙时重复提交、运行超过 15 秒、取消后新请求及前端预检取消均验证。
- Rust 核心/sidecar 测试、TypeScript 检查和相关 UI 守卫通过。
- 学校真实服务不用于压力测试;本地接口覆盖错误路径。
完成记录(2026-10-20)¶
- 推理传输改为同线程驱动的异步 HTTP;取消直接丢弃在途请求/流,没有遗留请求线程。等待响应头 60 秒、流空闲 120 秒;最多共 3 次串行尝试,遵守 Retry-After。已产生文本、思考或工具增量后不自动重放;截断的工具参数不能当成功响应执行。
- sidecar 与内嵌宿主共用每轮门禁。取消按 runId 指定目标;忙时提交和新建、切换、删除、导入、恢复会话均被拒绝,不夺取旧任务。进度事件带 runId,避免 IM 结果混入本地预检中的对话。
- token 校验区分明确失效与暂时失败,预检/路由/签发各自合并并发调用。失败退避不覆盖最后一次成功验证;等待过程中已过期的 token 不放行。路由响应迟到时不能覆盖网络切换后的新结果。
- 前端取消覆盖预检和运行两个阶段;等待后端真实结束才结束运行状态。限流卡保留服务响应并可重试消息。事件缓冲使用递增序号,超过 300 条后仍能继续显示长回复。
验证与复现入口¶
pnpm test:oh:31 个认证/路由场景、27 个取消/事件断言及手机 OH 静态守卫。- Harness 目录运行
cargo test --offline --workspace:51 项 Rust 测试通过,其中包含真实本地 TCP 服务验证单请求、串行重试、响应头/流/JSON/退避取消和截断响应。 - Harness 目录运行
node test/chat_lifecycle.mjs <sidecar绝对路径>:29 项实际子进程验收,包括持续 15.5 秒仍不被接管、定向取消、连接关闭、忙时会话存档不变和两轮事件归属。 - 桌面 TypeScript 检查、Tauri
cargo check --offline/cargo build --offline、release sidecar 构建、UI 文案与 OneGUI 守卫通过。
dev 交付¶
内嵌及插件清单版本统一为 0.1.5。已重建 release sidecar 与桌面 debug App,并正常退出、重新启动 /Users/st/Library/Caches/onethu/OneTHU.app。bundled 与实际安装 sidecar 的 SHA256 均为 6ea1423ed080c56505a42c9a742124352833d2ebf8a0a6d859f9d9a04c553c18。本机构建使用 APFS /Volumes/OneTHUBuild 的 target 目录。
本轮未向学校模型发起真实对话。测试证明已消除客户端可自行放大并发的缺陷,不代表学校服务永远不会限流。原生截图工具仍报 ScreenCaptureKit -3811,未将本地接口测试称作原生 UI 点击验收。