Files

1.7 KiB
Raw Permalink Blame History

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.jsnpm run regression
  • 测试总超时不超过 60 秒。

约束

  • 不覆盖 public/app.jspublic/style.cssscripts/regression.js 中的用户现有改动。
  • 不通过增大堆上限或单纯重启掩盖根因。
  • 代码注释使用简体中文;日志不得包含敏感数据。