修复首次MCP就绪等待丢失唤醒

调整 DirectProject MCP readiness gate 的通知注册顺序

抽取 MCP 启动终态判断并增加 missed wakeup 回归测试

同步客户端扩展技术方案中的等待契约
This commit is contained in:
2026-09-01 08:05:09 +00:00
parent a0c72faa27
commit aed1525c1b
2 changed files with 101 additions and 36 deletions
@@ -349,7 +349,7 @@ Skill root 是当前启用 Skill 集合的完整投影;每次准备时先清
- 尽量跳过失败项,保留 AGC 内置 Skill 和 `agc_tools`;
- 不自动重试、不启动后台修复服务、不删除原始内容。
DirectProject 首轮使用 Codex 已有的 Eager MCP 启动和 AGC 侧有界 readiness gate:所有已启用第三方 MCP 并行尝试启动,AGC 在首次 `turn/start` 前等待现有 app-server 状态通知,最多等待 `120000` 毫秒;不执行工具探测调用,也不新增外部 MCP 服务。第三方 MCP 仍保持 `required=false`,单项进入 `failed`/`cancelled` 或等待超时后,DirectProject 继续对话;后续回合可重新发现等待窗口结束后才 ready 的 MCP。
DirectProject 首轮使用 Codex 已有的 Eager MCP 启动和 AGC 侧有界 readiness gate:所有已启用第三方 MCP 并行尝试启动,AGC 在首次 `turn/start` 前等待现有 app-server 状态通知,最多等待 `120000` 毫秒;等待实现必须先注册 `Notify` future,再读取共享状态,以免 `notify_waiters` 在状态检查和等待注册之间丢失唤醒;不执行工具探测调用,也不新增外部 MCP 服务。第三方 MCP 仍保持 `required=false`,单项进入 `failed`/`cancelled` 或等待超时后,DirectProject 继续对话;后续回合可重新发现等待窗口结束后才 ready 的 MCP。
扩展集合的 fingerprint 纳入现有 DirectProject app-server pool key,扩展集合变化后不复用不匹配的旧运行实例。