3.8 KiB
3.8 KiB
MCP 会话显示隐藏开关计划
目标
在侧栏搜索框右侧增加一个图标按钮,用于显示或隐藏由 MCP 创建的会话;正常会话始终可见,并完整覆盖状态记忆、搜索临时显示与运行态例外。
当前阶段
阶段 5:交付
执行步骤
- 审查需求与实现计划
- 补充会话过滤与图标状态的失败回归测试
- 实现持久化状态与 MCP 会话过滤逻辑
- 接入搜索框右侧图标及主题响应式样式
- 运行定向测试并修复问题
- 执行完整回归与差异审查
- 清理临时跟踪文件并记录交付
阶段
阶段 1:需求与计划审查
- 通过逐项访谈确认产品边界
- 定位现有会话列表、搜索、分组和 MCP 标识逻辑
- 完成独立计划审查
- 状态: complete
阶段 2:测试先行
- 为过滤规则、状态例外、搜索覆盖和图标契约补充失败测试
- 运行新增测试并确认修改前失败
- 状态: complete
阶段 3:实现
- 增加本地持久化的显示状态
- 在列表派生数据阶段过滤 MCP 会话
- 接入无文字图标按钮、无障碍状态和主题样式
- 状态: complete
阶段 4:验证
- 运行定向测试、语法检查与完整回归
- 审查变更差异、工作区状态及项目规范符合性
- 状态: complete
阶段 5:交付
- 更新持久计划与 Trellis 记录
- 清理临时 TODO CSV
- 状态: complete
已确认需求
- 过滤对象仅为
createdFromKind === 'mcp'的会话,正常会话始终显示。 - 隐藏模式仍保留当前打开或
isRunning的 MCP 会话;其他 MCP 会话隐藏。 - 搜索时临时恢复全部 MCP 会话参与匹配,清空搜索后恢复隐藏规则。
- 按钮位于搜索框右侧并与高级搜索并排,仅显示一个状态图标。
- 首次默认显示;用户切换结果保存在本机浏览器,刷新和下次打开继续沿用。
- 没有可见会话的项目分组不渲染。
技术决策
| 决策 | 理由 |
|---|---|
在 getVisibleSessions() 之后、搜索匹配之前派生列表可见性 |
保持服务端快照和缓存完整,只影响侧栏展示 |
| 搜索查询非空时绕过 MCP 隐藏过滤 | 满足主动搜索可以找回隐藏会话的需求 |
使用单一 localStorage 布尔偏好,缺失时按显示处理 |
与首次默认显示和跨刷新记忆一致 |
图标按钮维护 aria-pressed、动态 title/aria-label |
只有图标时仍能清晰表达当前状态和点击动作 |
| 将显示偏好纳入列表结构签名或切换时强制失效 | 避免现有结构签名优化跳过重新渲染 |
风险与验证重点
- 置顶 MCP 会话也应服从隐藏规则,除非它是当前会话或运行中。
- 当前会话从 MCP 状态切换后,侧栏不能丢失当前定位。
- 新快照把会话从运行中更新为已完成时,隐藏模式应自动移除该条目。
- 所有主题及窄屏布局不得挤压搜索输入框或高级搜索按钮。
- 不引入服务端状态或协议改动。
错误记录
| 错误 | 尝试 | 处理 |
|---|---|---|
| 完整历史分叉不能同时指定 worker 类型 | 1 | 改为 fork_turns: none 并在任务中显式提供上下文 |
wait_agent 等待值低于 10 秒下限 |
1 | 改用 10 秒以上等待值 |
| 高级搜索回归要求保留荒原主题精确选择器 | 1 | 恢复 .session-search-row .advanced-search-open,新按钮使用独立规则 |
| Firefox 无头渲染图形后端超时且未生成截图 | 1 | 改用软件渲染/Xvfb 再试一次,失败则降级到计算布局与静态契约 |
| 完整回归 Codex App steer 场景等待 WebSocket 消息超时 | 1 | 失败位于既有 server/mock 集成链路,与前端侧栏变更隔离;保留定向回归与审查证据 |