feat: add MCP session visibility toggle and rebuild release

This commit is contained in:
shiyue
2026-08-26 17:12:45 +08:00
parent f15bc92d1e
commit e62a545569
13 changed files with 564 additions and 7 deletions

View File

@@ -0,0 +1,2 @@
{"file":".trellis/spec/frontend/index.md","reason":"前端任务入口与规范索引"}
{"file":".trellis/spec/frontend/quality-guidelines.md","reason":"验证前端质量与回归测试覆盖"}

View File

@@ -0,0 +1,4 @@
{"file":".trellis/spec/frontend/index.md","reason":"前端任务入口与规范索引"}
{"file":".trellis/spec/frontend/quality-guidelines.md","reason":"前端质量与回归测试要求"}
{"file":".trellis/spec/frontend/component-guidelines.md","reason":"侧栏控件结构与无障碍约束参考"}
{"file":".trellis/spec/frontend/state-management.md","reason":"本地持久化显示状态的状态管理参考"}

View File

@@ -0,0 +1,38 @@
# MCP 会话显示隐藏开关
## 背景
侧栏会展示大量由 MCP 创建的协作会话。用户通常不需要逐条查看这些会话,希望通过一个紧凑按钮减少列表噪声,同时保留普通会话和仍需关注的运行态会话。
## 用户故事
作为经常使用 MCP 协作能力的用户,我希望用一个图标快速显示或隐藏 MCP 创建的会话,使侧栏保持简洁,并且不会丢失当前会话或仍在运行的任务入口。
## 功能要求
1. 在侧栏搜索框右侧、与高级搜索按钮并排增加一个图标按钮。
2. 按钮仅控制 `createdFromKind === 'mcp'` 的会话;正常会话始终显示。
3. 隐藏模式仍显示当前打开或 `isRunning === true` 的 MCP 会话。
4. 其他 MCP 会话在隐藏模式下不参与置顶区、项目分组和未分组列表渲染。
5. 输入会话搜索关键词时,全部 MCP 会话恢复参与匹配;清空搜索后重新应用隐藏规则。
6. 首次且没有保存偏好时默认显示 MCP 会话。
7. 用户切换结果保存于当前浏览器,刷新或下次打开继续沿用。
8. 控件仅显示一个状态图标,不显示文字或数量角标;通过悬停提示与无障碍属性表达动作和状态。
## 非目标
- 不删除、归档或修改任何会话数据。
- 不改变服务端会话列表接口、排序协议或 MCP 创建流程。
- 不改变项目折叠、置顶和旧会话“加载更多”的既有语义。
- 不增加设置页配置项。
## 验收标准
- 默认状态与当前行为一致:全部会话正常显示。
- 切换隐藏后,普通会话、当前 MCP 会话和运行中 MCP 会话仍显示,其余 MCP 会话消失。
- 置顶 MCP 会话在非当前、非运行时同样隐藏。
- 隐藏状态下搜索可找到匹配的 MCP 会话;清空搜索后再次隐藏。
- 刷新页面后保留最后一次切换状态。
- 图标按钮在主要主题和窄屏侧栏中不挤压或遮挡现有控件。
- 新增回归测试覆盖过滤、持久化、搜索覆盖、状态例外与 DOM/无障碍契约。

View File

@@ -0,0 +1,26 @@
{
"id": "mcp-session-visibility-toggle",
"name": "mcp-session-visibility-toggle",
"title": "MCP 会话显示隐藏开关",
"description": "",
"status": "in_progress",
"dev_type": null,
"scope": null,
"package": null,
"priority": "P2",
"creator": "shiyue",
"assignee": "shiyue",
"createdAt": "2026-08-26",
"completedAt": null,
"branch": null,
"base_branch": "main",
"worktree_path": null,
"commit": null,
"pr_url": null,
"subtasks": [],
"children": [],
"parent": null,
"relatedFiles": [],
"notes": "",
"meta": {}
}