状态与图标图谱

所有位置方案共用这一套状态语言和 icon 注册表。这一页是它的规格书——落地时按这里 实现;决策 1 / 决策 2 只决定「列表挂在哪」,不重新定义状态。决策 5 决定用点还是文字。

四态指示器

四种状态占同一个 14×14 盒子,点态在盒子里居中缩小——否则列表 行会随状态变化左右抖动。形态而非只有颜色承担区分(色盲可用): 快转缺口环 = 机器在忙、慢转虚线圈 = 等你动手、实心点 = 静态结论。

进行中running频道创建中 / 对话回复中 / 异步任务执行中——三者是同一个态
待你处理todo有需要点击提交的卡片或交互组件,机器停在这儿等你
有新内容unread已完成且你还没看过。看过即消失——它是「未读」,不是「已完成」
出错了error最后一轮失败,不管它就永远不动
无状态none已完成且你看过了。列表里绝大多数行应该长这样
两条与原方案不同的定名,建议采纳:
1. 蓝点是「未读」不是「已完成」。完成且你已经看过的对话不该留点, 否则列表永远挂满蓝点、点就失去意义。
2. 优先级 error > todo > running > unread:需要你动手的信号 永远盖过机器自己在忙。
一条自我修正:我上一版说"对话的蓝点和频道的蓝点是同一个语义, 统一成一颗点,用户只需学一次"。这句是错的,撤回。
两者的信息类型不同:频道未读是可数的事实(3 条没看),对话状态是会变的过程(在跑 / 等你 / 失败)。可数的事实用计数文字表达信息量 大得多,点只能表达"有";而过程态用文字反而吵、还容易读错。
所以正确做法是分工而不是统一:频道未读用「3 条未看」文字胶囊 (抖音关注列表的做法),对话状态用形态点。它们长得不一样是对的。
聚合到一颗(tab 头 / 汉堡按钮 / 悬浮球)
出错了待你处理进行中有新内容3待办 ≥2 时带数字(唯一卡住流程的态,值得比点更重的表达)

对话列表 item

主行是对话标题,副行是 subject(页面 icon + 标题,弱化)。进行中时副行文字换成实时说明、icon 保留——"在跑什么"比"几分钟前" 有用得多,而 icon 保证页面身份不丢。

SubjectKind icon 注册表(8 种全覆盖)

这就是「subject card 很多页面没做 icon」的解法:不要每个页面各自决定画 什么,由 kind 决定。有头像用头像,没有就回落到 kind 的 icon,永远有东西 可画。注册表是 Record<SubjectKind, …>,没有 default 分支—— 新增 kind 时 TypeScript 会报错,逼着补齐。

频道channel内容grain页面page搜索search用户user连接器connector创建creation生产记录run
同一份数据的三种用法
列表副行AI 行业早报
对话头部 chip
会话内卡片

状态怎么流转

发消息 / 触发任务
      │
      ▼
  ┌────────┐  需要用户提交卡片   ┌────────┐  用户提交   ┌────────┐
  │running │ ─────────────────► │  todo  │ ──────────► │running │
  └────────┘                    └────────┘             └────────┘
      │ 跑完                                                │
      ▼                                                     ▼
  ┌────────┐   用户打开看过    ┌────────┐            (回到上面)
  │ unread │ ────────────────► │  none  │
  └────────┘                   └────────┘
      ▲
      │ 失败
  ┌────────┐   重试
  │ error  │ ──────► running
  └────────┘
没有「后台任务」这个实体。线上所谓后台任务就是某条会话上的一轮 ChatTurn 在异步跑,所以状态机只有一套、列表只有一个。频道创建中、对话回复中、 异步任务执行中,三者全部是 running。这是整套方案里最大的一处简化, 也是它能让"对话和任务管理不协调"这件事消失的根本原因。

决策 5:三种状态表达,并排对比

同一批对话,三种表达。取舍很实在:点省空间、文字有信息量。 我的结论是分场景混用——频道未读用文字(可数事实),对话状态用点 (会变的过程)。

四态点

最省空间,形态承担区分

点 + 数字

待办带数字,唯一卡流程的态加重

文字胶囊

信息量最大,246px 侧栏里会挤

频道未读:点 vs 计数文字

左边是今天的形态(蓝点,只能表达"有"),右边是抖音关注列表的形态 (「3 条未看」,把可数的事实说出来)。未读本质是可数的,右边更对。这条与位置无关——即使不采用方案 D,也应该把频道未读换成计数。

蓝点(今天)
AI 行业早报
🏙巨构旷野
📰AI 每日要闻 Top 5
🎱世界杯彩票三档投注
📕小红书每日热榜
🌀AI 日报|量子位风
计数文字 ← 推荐
AI 行业早报
🏙巨构旷野
📰AI 每日要闻 Top 51 条未看
🎱世界杯彩票三档投注2 条未看
📕小红书每日热榜3 条未看
🌀AI 日报|量子位风