fix(desktop): group forked tasks in sidebar - #3739
Conversation
Build collapsible task families from the existing parent session metadata, preserve pinned and drag behavior, and allow branches to detach through the narrow metadata update path. Fixes makecindy#1998 Signed-off-by: Stella-xixi <2559689615@qq.com>
|
| Filename | Overview |
|---|---|
| apps/desktop/src/renderer/features/cc-agent/lib/automationSidebarGrouping.ts | 新增 session family 树构建,处理设备边界、缺失父节点和循环关系,并保持输入顺序。 |
| apps/desktop/src/renderer/features/cc-agent/lib/mainListModel.ts | 将任务 family 纳入主列表投影、活动时间排序、会话展开和设备分段逻辑。 |
| apps/desktop/src/renderer/features/cc-agent/sidebar/SessionEntryList.tsx | 新增递归任务树渲染和节点级折叠状态,并将折叠控件置于原任务拖拽行之外。 |
| apps/desktop/src/renderer/features/cc-agent/sidebar/useDetachSessionFromFamily.ts | 实现本地与远端共用的乐观脱组操作、写入失败回滚及用户提示。 |
| apps/desktop/src/main/localDb/ipc/sessions.ts | 扩展受限 metadata 更新链,仅允许清空 parentSessionId,并广播 family 状态变化。 |
| apps/desktop/src/main/localDb/mapper.ts | 将 parentSessionId 映射到数据库 patch,同时允许调用方禁止刷新 updatedAt。 |
| apps/desktop/src/renderer/lib/sessionService.ts | 扩展本地及 Device Link metadata 写入类型,使脱组沿用 sticky session origin 路由。 |
| apps/desktop/src/renderer/tests/mainListModel.test.ts | 覆盖 family 排序、父任务缺失降级和跨设备关系隔离。 |
| apps/desktop/src/main/localDb/ipc/tests/sessionsUpdate.test.ts | 覆盖脱组持久化、不刷新活动时间以及拒绝任意重新挂载父任务。 |
Sequence Diagram
sequenceDiagram
participant U as 用户
participant R as Renderer 侧边栏
participant T as Session 路由
participant M as Main / 远端 Main
participant D as 会话数据库
U->>R: 选择“移出任务组”
R->>R: 乐观清空 parentSessionId
R->>T: patchMeta(sessionId, null)
T->>M: 本地 IPC 或 Device Link 转发
M->>M: 校验仅允许清空父关系
M->>D: 更新 parent_session_id
M-->>R: 广播 sessions:patched
alt 写入失败
R->>R: 恢复原 parentSessionId
R-->>U: 显示失败提示
end
Reviews (1): Last reviewed commit: "fix(desktop): group forked tasks in side..." | Re-trigger Greptile
|
这条 PR 会改变侧栏里分叉任务的展示和「移出分组」交互,已提交维护者确认。球不在你这边——请等维护者在 PR 上 Approve;如果要改,维护者会 Request Changes。讨论 issue:#3746 |
|
命中 UI 路径(apps/desktop/src/renderer/features/cc-agent/lib/automationSidebarGrouping.ts / apps/desktop/src/renderer/features/cc-agent/lib/mainListModel.ts / apps/desktop/src/renderer/features/cc-agent/sidebar/SessionCard.tsx 等)但 description 未附界面效果证据——建议补充改动后效果:截图/录屏,或改动后界面的 HTML 页面(```html 代码块、.html 附件或在线预览链接),便于确认界面符合 DESIGN.md 设计规范 |
已在 PR 描述中补充了界面效果截图,包括任务分组、展开/折叠以及移出任务组的效果。感谢建议! |
这次改了什么
摘要
为 Desktop 任务侧边栏补充基于现有 session family 元数据的会话树展示,解决 fork 出来的任务与父任务散落在列表中、难以辨认归属的问题。
parentSessionId,递归构建可折叠的任务组,不新增 schema 或 migration。SessionItem/SessionCard原生拖拽行之外,避免与 feat(desktop): CC Agent 任务视图支持递归分屏拖拽布局 #1632 的排序、置顶和分屏拖拽命中区冲突。parentSessionId;支持 device-link 路由,失败时回滚并提示。Fixes #1998
变更类型
feat新功能fix缺陷修复refactor/perf重构或性能优化docs/test/chore文档、测试或工程维护范围
UI 变化
[draggable]祖先,不截获现有排序、置顶和分屏拖拽入口。docs/design-rules/DESIGN.md§10「Light / Dark Dual-Mode Delivery Gate」:新增控件复用现有语义 token 与主题样式,亮暗两种模式均完成本地目检。界面效果
任务树分组与折叠
移出任务组
右键子任务选择「移出任务组」:
移出后任务恢复为顶层独立条目:
怎么验证的
自动验证
手工验证
parentSessionId清空且条目恢复顶层位置。未执行的验证
风险
风险分类
影响与回滚
parentSessionId的本地/远端更新路径。parentSessionId,Main IPC 拒绝任意 reparent,且不会刷新任务活动时间。提交前检查
git commit -s,见 DCO)