5.7 KiB
5.7 KiB
消息台重构任务单(卡片改列表 Feed)
目标:把消息台从双列卡片重构为高密度列表 Feed,保证用户可读、可操作、可追溯。
范围:仅前端(不改后端接口)。
新增硬约束:信息流严格按时间倒序,最新在上。
0. 实施原则(先定边界)
- 不改
backend接口与字段,仅做前端映射/渲染重构。 - 保持
buildInboxView领域聚合能力不变,避免影响 TopBar 与其他入口。 - 用户视角文案与技术字段解耦:技术字段可在行内展开区可见,默认隐藏。
- 主列表排序规则统一:
updated_at || created_at降序(最新在上)。
1. 现状定位(SCOUT)
- 定位页面入口:
frontend/src/pages/InboxPage.tsx - 定位数据聚合:
frontend/src/lib/inbox.ts - 定位类型定义:
frontend/src/types/inbox.ts - 定位顶部铃铛预览依赖:
frontend/src/components/layout/TopBar.tsx - 确认以下信息:
- 列表数据来源接口(notifications + ai-pmo work-items)
- 当前卡片组件边界(
InboxCard) - Tab 分类逻辑位置(
activeSection+display_kind)
2. 爆炸半径评估(TRACE)
- 执行
FIND_USAGE buildInboxView - 执行
FIND_USAGE InboxDisplayKind - 执行
FIND_USAGE InboxSectionKey - 执行
FIND_USAGE getInboxSectionLabel - 评估结论记录:
InboxPage改造是否会影响TopBar预览行为- 是否需要保持
action_required|auto_running|auto_done|info内部枚举不变
说明:本次推荐保持内部枚举不变,仅在 UI 层映射为“待处理/进行中/已完成/全部”。
3. 组件与文件改造清单(SNIPER)
3.1 新增文件
frontend/src/components/inbox/InboxListItem.tsxfrontend/src/lib/inboxTextMap.tsfrontend/src/lib/formatInboxTime.ts
3.2 修改文件
frontend/src/pages/InboxPage.tsxfrontend/src/components/layout/TopBar.tsx(复用统一时间格式函数,可选;本次保持现状未改)CLAUDE.md(目录结构变更同步)
4. 列表行设计规范
4.1 两种行高
- 需要操作行:72px
- 左:状态图标 + 标题 + 副标题
- 右:项目名、时间、
主操作、详情
- 纯通知行:52px
- 左:状态图标 + 标题 + 副标题
- 右:项目名、时间、
详情
4.2 行内交互
- 点击行本体:展开/收起详情(inline,不跳页)
- 点击主操作按钮:执行动作,不触发行展开
- 点击详情按钮:仅展开详情(或打开详情弹窗,二选一,需统一)
4.3 详情展开区(默认折叠)
- 显示技术字段:
intent原始值、typed actions、chat_id、完整时间戳、重复次数、撤销信息 - 默认主行不出现技术字段
5. 文案映射策略(用户视角)
5.1 intent 映射(显示层)
signal_source.onboard→信号源接入signal.create→新信号识别project.create→项目已创建query.read_only→信息查询followup.confirm→确认执行followup.continue→跟进处理ignore→系统忽略
5.2 状态映射(显示层)
action_required→待处理auto_running→进行中auto_done→已完成info→通知
5.3 标题清洗规则
- 优先使用
notification.title/work_item.title - 包含
给项目ID:前缀时仅保留后半段 registry#替换为历史记录- 去除明显技术噪音字段展示(默认行)
6. Tab 重构(不改底层枚举)
用户 Tab(展示)
待处理(映射action_required)进行中(映射auto_running)已完成(映射auto_done)全部(映射all)
计数规则
- 每个 Tab 角标来自当前项目过滤后的实时集合
全部 = 待处理 + 进行中 + 已完成 + 通知(若通知不单列则并入全部但不单独显示)
7. 时间与排序规则(强制)
7.1 时间显示
- 1 分钟内:
刚刚 - 1 小时内:
X 分钟前 - 当天:
HH:mm - 昨天:
昨天 HH:mm - 更早:
MM-DD HH:mm
7.2 排序(硬约束)
- 主 Feed 严格按
updated_at || created_at降序。 - 最新消息永远在最上方。
- Tab 切换、搜索、项目筛选后仍保持同一倒序规则。
- 如时间缺失:降级到
created_at;仍缺失时排到分组末尾。
8. 首屏密度与布局调整
- 折叠/压缩顶部指标区(避免占用过高首屏)
- 列表单列展示(移动端与桌面统一 Feed 心智)
- 状态筛选仅作为过滤器,不采用任何看板分栏布局
- 验证 1080p 下首屏可见条数
>= 8
9. 验收标准(Definition of Done)
- 一屏可见条数
>= 8 - 主列表默认无技术字段暴露(展开区除外)
- Tab 筛选准确:待处理/进行中/已完成/全部
- 时间显示全部为相对/友好格式
- 点击行可展开/收起详情
- 主 Feed 严格“最新在上”
npm run build通过tsc --noEmit零错误
10. 自检命令(前端)
cd frontend
npm run build
npx tsc --noEmit
技术词裸露扫描(渲染主行):
rg -n "typed actions|read_only|registry#|chat_id" frontend/src/pages frontend/src/components/inbox
期望:仅允许出现在“展开详情区”相关代码路径,不允许出现在默认主行渲染文本。
11. 交付物
- 变更文件清单
- 首屏可见条数描述(含测试分辨率)
- 排序规则验证说明(最新在上)
- 构建与类型检查结果