1.7 KiB
1.7 KiB
ccweb 未路由通知阻塞修复需求
背景
ccweb 重启后,仍在运行的 Codex App 协作子线程继续发送通知,但 ccwebMcpChildThreads 是进程内 Map,没有从 codexapp-state.json 恢复。通知无法命中路由,随后对每条 delta 同步遍历并解析全部会话 JSON,导致 Node 主线程单核 100% 和 HTTP 524。
必须实现
- 恢复父会话状态时,从已持久化的协作 toolCalls 中重建足够的子线程路由信息,至少包含 child threadId、parentSessionId、parentThreadId、spawnToolId、状态和可用标签。
- 子线程内存路由必须在父线程磁盘收养之前判断,避免已知子线程也触发全盘扫描。
- 对真正未知的 threadId 增加有界负缓存,使高频 delta 在 TTL 内最多触发一次磁盘查找。
codex_app_notification_unrouted日志按 threadId/method 节流,保留诊断能力但不逐条写盘。- 会话创建、更新、删除后应正确维护 threadId 索引或使缓存失效,不产生长期错误路由。
- 保留现有行为:父线程未路由通知仍可被收养;新产生的 collabAgentToolCall 仍可注册和更新子线程。
测试要求
- 先添加在旧实现上失败的回归断言,再实现最小修复。
- 覆盖恢复态子线程映射重建、子线程优先路由、未知线程负缓存和日志节流。
- 运行定向测试、
node --check server.js、npm run regression。 - 测试总超时不超过 60 秒。
约束
- 不覆盖
public/app.js、public/style.css、scripts/regression.js中的用户现有改动。 - 不通过增大堆上限或单纯重启掩盖根因。
- 代码注释使用简体中文;日志不得包含敏感数据。