# 发现与决策:ccweb_list_conversations children scope ## 需求 - 给 `ccweb_list_conversations` 增加 `scope: "children"`。 - 同步更新该 MCP 的提示词/描述。 - 完成实现、回归覆盖和验证。 ## 已知代码事实 - `listConversationSummaries(args, sourceSessionId)` 当前遍历 `SESSIONS_DIR` 下全部 JSON,只按 agent/status 过滤,最后排序并应用 limit。 - MCP 创建的子会话在自身 JSON 中持久化 `createdFrom.kind = "mcp"` 和 `createdFrom.sourceSessionId`。 - `loadSessionMetaFromFile` 当前只暴露 `createdFromKind`,没有暴露来源会话 ID;实现 children 过滤需扩展元数据或读取完整会话。 - `ccweb_list_conversations` 有两处 schema/描述:`lib/ccweb-mcp-server.js` 与 `server.js` 的 Codex App 动态工具兼容定义。 - README 的 MCP 表格需要同步新语义。 - 当前工作树已有其他任务修改 `server.js`、`lib/ccweb-mcp-server.js`、`scripts/regression.js`,补丁必须基于当前内容最小追加。 - 本地 `git diff -G` 未发现既有未提交改动触碰 `ccweb_list_conversations`、`listConversationSummaries`、`loadSessionMetaFromFile` 或 `createdFromKind` 相关行;目标区域可做局部补丁。 - 当前回归先在 `scripts/regression.js` 约 6021 行测试全量列表,MCP 创建及 `createdFrom` 断言位于约 6139 行后,适合在创建完成后追加 children scope 场景。 - `createdFrom` 已包含在大文件头尾 preview 的顶层字段集合中,因此只需从现有对象提取 `sourceSessionId`,无需为 children scope 全量读取大 JSON。 - `loadSessionMetaFromFile` 的完整解析和 preview 两条分支都应新增内部字段 `createdFromSourceSessionId`;该字段只用于过滤,不必暴露到 MCP 返回摘要。 - children 过滤应紧跟 meta 读取执行,早于运行态、等待状态计算,以减少无关会话开销。 - stdio MCP 与 Codex App 兼容工具的现有描述文字不同;两者都需明确“默认全部、children 为当前来源直接 MCP 子对话”,并添加同一 enum schema。 - 两处 schema 均设置 `additionalProperties: false`,新增 `scope` 后不会影响既有 agent/status/limit 参数。 - 回归中可在首个 `mcpCreate` 完成并验证 `createdFrom` 后调用列表:此时当前来源只有一个直接 MCP 子会话,适合断言精确集合。 - 省略 scope 与显式 all 的兼容性可比较同参数调用返回的会话 ID 数组;children 应包含新建子会话且排除来源会话。 - README 当前仅有一行轻量元数据描述,可直接补充 `scope=children` 的行为与默认 all。 - 现有回归没有 branch 会话夹具;为验证 `kind === 'mcp'` 条件,需要在回归中创建一个来自同一来源的 branch,或构造等价持久会话夹具。 - 项目只有 `npm run regression` 这一完整回归入口;失败测试与最终验证均需用 `timeout 60s` 包裹。 - `handleNewSession` 创建 branch 后会把测试 WebSocket 切换到新会话;为避免干扰后续事件断言,children scope 回归应直接在临时 sessions 目录写入最小 branch/孙级夹具。 - `buildSessionInfoPayload` 虽会返回 `createdFromKind`,但 children MCP 过滤不应依赖当前 WebSocket 查看状态。 - 会话元数据完整解析阈值默认 512 KiB、preview 头尾各 128 KiB;已有 `session-preview-metadata` 定向回归以更小阈值强制走 preview 分支。 - 该定向回归已覆盖 preview 中的 `createdFrom.kind`,可扩展来源 ID 或通过内部 MCP 验证 children 过滤,避免只测试小文件路径。 - `runSessionPreviewMetadataRegression` 已配置独立内部 MCP token,可将 tail 夹具改为 `kind: mcp + sourceSessionId`,随后调用 `ccweb_list_conversations(scope=children)` 精确断言;这是最小且快速的失败回归入口。 - preview 定向回归无需真实父会话文件:列表过滤只使用自动传入的来源 ID 与子会话持久元数据比对。 - 主回归已直接导入 `lib/ccweb-mcp-server.js` 的 `TOOLS`,可对 stdio/shared MCP 的 scope enum 与描述做结构化断言。 - Codex App 当前主路径走线程级 MCP;`codexAppCommunicationDynamicTools` 是兼容定义,仍需同步文字与 schema,可用已有 server 源码审计断言或行为回归覆盖。 - 回归已有 `assertCcwebDisplayImageContract` 这类静态契约函数和 target 分派模式;可新增列表 scope 契约函数,并在 `session-preview-metadata` 定向目标及完整回归中复用。 - 完整回归后续没有对全局会话数量做精确断言,仅按 ID 查找;增加 branch 与孙级临时会话夹具不会破坏后续场景。 - 新增测试语法检查通过;实现前定向回归稳定失败在 stdio/shared MCP 缺少 scope enum,证明失败测试有效。 - 实现后 `server.js`、`lib/ccweb-mcp-server.js`、`scripts/regression.js` 语法检查全部通过,preview 定向回归通过。 - 服务端将任何非 `children` 值归一为 `all`;children 在运行态/等待态计算、排序和 limit 前完成过滤。 - 最终语法检查、session-preview-metadata 定向回归、完整 `npm run regression` 与 `git diff --check` 全部通过。 - 最终局部差异确认核心改动仅落在会话元数据、列表过滤、两处 MCP 契约、README 与回归断言;工作树中的任务看板等大段 diff 为既有改动,未被覆盖。 - 差异审查发现 preview 测试不应把原有 `ccweb_prompt_user` 夹具改写为 `mcp`;将改为新增独立大文件 MCP 子会话夹具,以保留旧覆盖。 - 已完成上述修正,定向回归、完整回归和 diff check 再次通过;没有剩余代码风险或阻塞。 - 无需重启服务即可完成代码交付;本轮未执行服务重启。 - 最终文件行号已核验,临时 CSV 已不存在,`git diff --check` 仍通过。 - 重启前运行态检查发现除当前对话外还有 2 个 running 对话;按项目运维规则暂缓 `pm2 restart ccweb --update-env`。 ## 技术决策 | 决策 | 理由 | |------|------| | 支持 `scope: "all" | "children"` | schema 显式、可验证;默认 all 向后兼容 | | children 匹配 `createdFrom.kind === "mcp" && createdFrom.sourceSessionId === sourceSessionId` | 精确表达直接持久子对话,不混入分支对话 | | 非法 scope 回退 all | 正常 MCP 由 enum 约束,服务内部调用仍保持兼容与可预测 | | 不依赖 LLM 上下文或 pending reply 状态 | 子会话持久元数据才是可重启恢复的权威来源 | | 暂不新增返回字段 | 用户只要求过滤能力,遵循 YAGNI;现有摘要字段足以继续投递消息 | ## 风险 - 大会话文件可能走 preview 解析路径,需要确保 preview 元数据能读取 `createdFrom.sourceSessionId`。 - limit 必须在 children 过滤后应用。 - 回归测试已有大量并行任务新增内容,插入断言时避免更改无关逻辑。 - 需分别断言省略 scope、scope=all、scope=children 和非法 scope。 - 本轮 `codebase-memory-mcp` transport 已关闭;按降级策略使用本地检索,不再重复失败调用。 ## 资源 - `server.js`:列表实现、会话元数据解析、Codex App 工具 schema。 - `lib/ccweb-mcp-server.js`:stdio MCP 工具 schema 与提示词。 - `scripts/regression.js`:MCP 创建及列表回归。 - `README.md`:MCP 能力说明。