feat(sidebar): 未读聚合灯补全到项目行/对话组/设备段头 - #2938
Conversation
未读点此前只亮在最底层会话行,项目层与设备层没有任何聚合指示——多设备 (按设备分组)下找一条未读要逐段逐文件夹展开翻找。本次把折叠 rail 已有的 聚合灯语补到展开态的每一层: - 新增 lib/sessionLampAggregation:灯语聚合唯一事实源(running 呼吸橙 + 未读点 红 error > 蓝 awaiting > 绿 done,本地链路 ∪ device-link 远程镜像), rail 段钮 / rail 浮层面板项目行改为同一实现(行为不变); - 项目行(含置顶区)/「对话」组行:文件夹与消息图标 running 呼吸橙,标题右 侧聚合 AttentionDot(size 5,静态); - 设备段头:设备图标 running 呼吸橙,右侧灯组 = 聚合未读点(size 6)+ 原 「离线」标注; - 各层聚合集合 = 该层下实际渲染的行集合,灯亮进去一定找得到亮的行; - 对话组标题 flex-1 → shrink,对齐 2026-08-12「名字 shrink、图标紧跟名字」 的项目行/会话行同规裁决。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: ficowang <fico@xd.com>
|
| Filename | Overview |
|---|---|
| apps/desktop/src/renderer/features/cc-agent/lib/sessionLampAggregation.ts | 新增统一灯语聚合入口,合并本地 running/未读状态与 device-link 远程活动镜像。 |
| apps/desktop/src/renderer/features/cc-agent/sidebar/SessionEntryList.tsx | 折叠逻辑现已豁免本地运行会话及父级追加的远程活动会话。 |
| apps/desktop/src/renderer/features/cc-agent/sidebar/sections/ProjectsSection.tsx | 为设备段、项目和对话组接入聚合灯,并将统一的 attention/running 集合传入折叠路径。 |
| apps/desktop/src/renderer/features/cc-agent/sidebar/sections/ProjectNode.tsx | 项目标题新增运行呼吸图标、聚合未读点及折叠豁免透传。 |
| apps/desktop/src/renderer/features/cc-agent/CCAgentSidebarUpper.tsx | 置顶项目和 rail 面板改用共享聚合逻辑,并为置顶项目补齐远程活动折叠豁免。 |
| apps/desktop/src/renderer/features/cc-agent/sidebar/RailNav.tsx | rail 原有灯语计算被等价迁移到共享聚合 helper。 |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
S["本地会话状态与远程活动镜像"] --> A["aggregateSessionLamps"]
A --> D["设备段聚合灯"]
A --> P["项目 / 对话组聚合灯"]
A --> R["会话行状态"]
S --> F["attention ∪ running 折叠豁免"]
F --> P
F --> R
Reviews (3): Last reviewed commit: "fix(sidebar): 置顶项目行补远程折叠豁免" | Re-trigger Greptile
聚合灯为 running 会话点亮上层呼吸橙,但折叠豁免只认 attention—— running-only 会话可能被折进「显示全部」,灯指向不可见的行(Greptile P1)。 - SessionEntryList 折叠豁免基础口径改为 notifications ∪ runningSessionIds, 并新增 foldExemptSessionIds 追加集合(只影响折叠,不影响行内视觉); - ProjectsSection 顶层条目豁免改用 attention ∪ running(priorityContext, 含 device-link 远程镜像),同一份集合经 ProjectNode / DialogueGroupNode 下传到项目内/组内列表,补上远程 running/未读行的行级豁免; - projectsSidebarSection 源码守卫断言同步到新口径。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: ficowang <fico@xd.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 84a65b8b47
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
置顶区 ProjectNode 的灯聚合含 device-link 远程镜像,但其行列表的折叠豁免 只有本地 base 口径(notifications ∪ runningSessionIds)——远程 running/未读 会话超出折叠上限时,灯亮而行被折进「显示全部」(codex review)。 沿 ProjectsSection.lampFoldExemptIds / rail panelNotifications 同语义,把 置顶项目下实际渲染会话中有远程活动条目的 id 经 foldExemptSessionIds 传入。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: ficowang <fico@xd.com>
|
⏸️ 本 PR 触发 product 维护者确认门。 在项目行、对话组、设备段头补全未读聚合指示灯,新增用户可见的 UI 元素。 需维护者在 PR 上 Approve 后方可合并。 讨论 issue 已创建,详见上方链接。 讨论 issue:#2961 |
|
@fico-hub 👋 这个 PR 目前与 请在本地 merge 最新的 |
这次改了什么
摘要
会话的未读/运行「灯语」此前只亮在最底层会话行,展开态的项目行、「对话」组行、设备段头都没有任何聚合指示——多设备(按设备分组)下找一条未读消息要逐段、逐文件夹展开翻找(实际使用反馈)。本 PR 把折叠 rail 已有的聚合灯补全到展开态的每一层,形成「设备段头 → 项目/对话组行 → 会话行」三层连续的灯链路:
lib/sessionLampAggregation.ts作为灯语聚合的唯一事实源:running(呼吸橙)+ 未读点 tone(红 error > 蓝 awaiting > 绿 done 取聚合最高档),口径 = 本地链路(running / notifications / attentionKinds / urgent)∪ device-link 远程活动镜像(remoteLampOf,自 RailNav 迁入)。rail 段钮与 rail 浮层面板项目行的两处既有聚合改为调用同一实现,行为不变;ProjectNode,含置顶区)与「对话」组行:图标 running 呼吸橙,标题右侧新增聚合 AttentionDot(size 5,静态,rail 浮层面板项目行同款);displaySessions),保证「灯亮进去一定找得到亮的行」;折叠豁免同步扩展为与灯同口径 attention ∪ running(含 device-link 远程镜像,Greptile P1 修复),亮的行不会被折进「显示全部」。变更类型
feat新功能fix缺陷修复refactor/perf重构或性能优化docs/test/chore文档、测试或工程维护范围
UI 变化
四形态预览(演示数据,Default Light;色值即对应 token 取值,实现内全部经
var(--*)消费):② 一列(改动主战场——三层灯链路全集,含折叠段/离线段/各 tone):
③ 两列(灯语同②,含置顶区项目行点灯):
④ 三列(灯语同②):
① 最小化 rail(无回归对照——本次的参照系,聚合改共享实现后行为不变):
(预览源文件与 HTML 状态页在分支
assets/sidebar-unread-lamp。)DESIGN.md §2 Semantic & Accent「Thinking / Warning Orange sanctioned consumers」:本次呼吸橙全部属于既已登记的「running-state breathing icons in the sidebar」消费类,直接读--status-bar-accent,不引入新 token、不新增 consumer 类;AttentionDot.tsx组件头的角标点规范(全端统一色表):tone 经--card-status-done / -awaiting / -errortoken;聚合入口用静态点(非呼吸),尺寸沿用先例(行内 5px、段级 6px);DESIGN.md §14.4 Motion & Transitions:呼吸复用既有session-status-breathing关键帧(compositor-only),未新增动画;DESIGN.md §10 Token Selection Rules:无新 token、无硬编码色值。怎么验证的
自动验证
手工验证
不涉及(纯 renderer 展示逻辑,交互路径无变化;状态组合已由演示数据 HTML 状态页逐态核对,见「UI 变化」截图)。
未执行的验证
未在真机做多设备 device-link 实测(远程镜像口径由
remoteLampOf单测钉住,与 rail 既有行为同源);移动端不涉及。风险
风险分类
影响与回滚
已知限制:设备名旁的 6px 小点是既有「在线状态」指示(绿在线/灰离线),与未读点同用
--card-status-done绿、仅位置不同(名旁 vs 行尾)。历史上已造成过误读,本 PR 不动它——是否给在线点换形态(描边/灰阶)彻底区分,留待产品定夺,可另开后续 PR。提交前检查
git commit -s,见 DCO)