Files

28 lines
1.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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