Skip to content

feat(sidebar): 未读聚合灯补全到项目行/对话组/设备段头 - #2938

Open
fico-hub wants to merge 3 commits into
makecindy:mainfrom
fico-hub:fix/sidebar-unread-aggregation
Open

feat(sidebar): 未读聚合灯补全到项目行/对话组/设备段头#2938
fico-hub wants to merge 3 commits into
makecindy:mainfrom
fico-hub:fix/sidebar-unread-aggregation

Conversation

@fico-hub

@fico-hub fico-hub commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

这次改了什么

摘要

会话的未读/运行「灯语」此前只亮在最底层会话行,展开态的项目行、「对话」组行、设备段头都没有任何聚合指示——多设备(按设备分组)下找一条未读消息要逐段、逐文件夹展开翻找(实际使用反馈)。本 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 浮层面板项目行同款);
  • 设备段头:设备图标 running 呼吸橙,右侧新增灯组 = 聚合未读点(size 6,静态,rail 段钮同款)+ 原「离线」标注。设备段折叠时未读不再不可见;
  • 每层聚合的集合都是该层下实际渲染的行集合(置顶区按 displaySessions),保证「灯亮进去一定找得到亮的行」;折叠豁免同步扩展为与灯同口径 attention ∪ running(含 device-link 远程镜像,Greptile P1 修复),亮的行不会被折进「显示全部」。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

  • 关联 Issue / 需求:无(用户实际使用反馈:多设备下找未读绿点困难)
  • 本 PR 包含:聚合 helper 抽取 + 三处新增灯位(项目行/对话组行/设备段头)+ 口径单测 + 既有源码守卫测试同步
  • 明确不包含:设备名旁 6px「在线状态」点的形态调整(与未读点同绿的历史歧义,见「已知限制」);移动端;自动化管理页(Scheduler)的列表
  • 用户可见变化:展开态侧栏的项目行、「对话」组行、设备段头出现运行呼吸橙与未读聚合点
  • 是否存在 breaking change:无

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 / -error token;聚合入口用静态点(非呼吸),尺寸沿用先例(行内 5px、段级 6px);
    • DESIGN.md §14.4 Motion & Transitions:呼吸复用既有 session-status-breathing 关键帧(compositor-only),未新增动画;
    • DESIGN.md §10 Token Selection Rules:无新 token、无硬编码色值。

怎么验证的

自动验证

NODE_OPTIONS=--max-old-space-size=12288 npx tsc --noEmit -p tsconfig.json
结果:0 错误

npx vitest run src/renderer/features/cc-agent src/renderer/__tests__
结果:515 个测试文件全部通过(6078 passed | 1 skipped),含新增
src/renderer/features/cc-agent/lib/__tests__/sessionLampAggregation.test.ts
(tone 优先级 / 未读集合门槛 / urgent 提升 error / 远程镜像并入,13 例)。
sidebarRemoteProjectIcon.test.ts 的设备段头源码守卫断言随右侧结构
(「离线」外包灯组容器)同步更新,其守卫意图(条数不回归、离线靠右)保持。

手工验证

不涉及(纯 renderer 展示逻辑,交互路径无变化;状态组合已由演示数据 HTML 状态页逐态核对,见「UI 变化」截图)。

未执行的验证

未在真机做多设备 device-link 实测(远程镜像口径由 remoteLampOf 单测钉住,与 rail 既有行为同源);移动端不涉及。

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:

影响与回滚

  • 影响范围:桌面端展开态侧栏(项目行 / 对话组行 / 设备段头)的纯视觉指示;rail 两处聚合为等价重构
  • 回滚 / 降级方式:revert 本 PR 即可,无数据/协议/持久化变更

已知限制:设备名旁的 6px 小点是既有「在线状态」指示(绿在线/灰离线),与未读点同用 --card-status-done 绿、仅位置不同(名旁 vs 行尾)。历史上已造成过误读,本 PR 不动它——是否给在线点换形态(描边/灰阶)彻底区分,留待产品定夺,可另开后续 PR。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s,见 DCO
  • UI 改动已在「UI 变化」注明引用的设计规范章节(不涉及 UI 则跳过)
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档
  • 已确认测试结果或说明未执行原因

未读点此前只亮在最底层会话行,项目层与设备层没有任何聚合指示——多设备
(按设备分组)下找一条未读要逐段逐文件夹展开翻找。本次把折叠 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>
@fico-hub
fico-hub requested a review from a team as a code owner August 18, 2026 08:27
@greptile-apps

greptile-apps Bot commented Aug 18, 2026

Copy link
Copy Markdown

Greptile Summary

本 PR 将会话运行态与未读状态的聚合逻辑集中到共享 helper,并在展开态侧栏的设备段、项目及对话组补齐聚合灯。

  • 统一 rail 与展开态侧栏的本地及 device-link 远程灯语口径
  • 将本地和远程 running/attention 会话加入折叠豁免
  • 为新增聚合逻辑及侧栏结构补充或更新测试

Confidence Score: 5/5

该 PR 看起来可以安全合并。

既有线程指出的运行会话折叠问题已由本地 running 基础豁免、远程活动追加集合及各可折叠列表的数据透传共同修复,当前没有阻塞性故障残留。

Important Files Changed

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
Loading

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>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread apps/desktop/src/renderer/features/cc-agent/CCAgentSidebarUpper.tsx
置顶区 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>
@MagicLizi MagicLizi added awaiting-discussion 等待维护者讨论(review-pr) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) labels Aug 18, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

⏸️ 本 PR 触发 product 维护者确认门。

在项目行、对话组、设备段头补全未读聚合指示灯,新增用户可见的 UI 元素。 需维护者在 PR 上 Approve 后方可合并。

讨论 issue 已创建,详见上方链接。

讨论 issue:#2961

@MagicLizi

Copy link
Copy Markdown
Contributor

@fico-hub 👋 这个 PR 目前与 main 有合并冲突,auto-review 因此暂时跳过、没法继续审查 / 合并。

请在本地 merge 最新的 origin/main 解决冲突后推送;冲突解除后,下一轮 auto-review 会自动重新处理这个 PR。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-discussion 等待维护者讨论(review-pr) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants