28 lines
1.7 KiB
Markdown
28 lines
1.7 KiB
Markdown
# 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` 中的用户现有改动。
|
||
- 不通过增大堆上限或单纯重启掩盖根因。
|
||
- 代码注释使用简体中文;日志不得包含敏感数据。
|