Skip to content

[Feature] 项目行聚合「运行中 / 刚结束」状态:折叠时也能看到在跑几个,并覆盖定时任务运行 #1441

Description

@HanawaBanana

想要的效果(一句话)

侧栏里折叠了会话列表的项目也能一眼看出:这个项目下有几个在跑(包含定时任务的运行),跑完有提示,并且能区分「全部结束」和「还有在跑」;点一下就能进到对应的会话 / 定时任务运行。这是个设计讨论,想先听你们的意见,同意方向我再开工。

现状(我都核对过代码)

我的提案(推荐 A)

A1. 项目行左侧加一个「状态位」(保留文件夹图标形状,在它右下叠一个状态点/环,不用图标换色来表达状态,避免和 hover / 选中语义打架)

状态 表现 说明
运行中 warning 点 + 数字徽标 数字=该项目当前运行中的会话数,含定时任务运行;aria-label 给全量语义(如「2 个会话 · 1 个定时任务运行中」)
需要你介入 紫点(沿用 permission 语义)优先于运行中点 权限/提问/Plan 待批准;数字仍只统计运行中
全部结束 绿色 ✓,短驻留 例如 10–15 秒,或被「查看过这个项目」清掉;提示「3 个会话已完成」
部分结束 warning 点 + 数字继续显示,冒一条瞬时提示 「1 个已完成,仍有 2 个在跑」,或在数字旁临时加 ✓1
有失败 红色 ⚠(沿用 failed) 与完成提示同一条通道

A2. 折叠态与展开态都显示状态位(折叠时才是刚需),折叠只影响是否列出会话。

A3. 项目行尾加一个独立的小入口(不改动「点击行=展开/收起」的既有语义):点开一个小浮层,分两节列出「运行中」与「刚刚结束 / 失败」,每条一键直达 —— 会话就切到对话,定时任务运行就跳到定时任务页并选中该任务与该次运行(#1298 已经有选中恢复)。浮层支持键盘、Esc、点外部关闭。

A4. 定时任务运行不建「临时会话」。 你原想法里的「临时会话看完即隐藏」我不建议做,原因具体:#1298 刚刻意把自动化转写从会话列表收回,临时会话会重新把它注入列表、和 reuse 模式(运行复用同一段会话)纠缠,还会带来「看过了但状态怎么算」的一致性问题。改成:

  • 项目行数字分开计数:2 会话 · 1 定时;
  • 浮层里单独一节「定时任务 · 任务名 · 已运行 3 分钟 · 查看运行记录」,点击直达;
  • 运行结束同样走项目级「刚结束」提示,并且复用现有通知管线发一条「定时任务运行完成」(原生通知 + 可选提示音 + NotificationCenter),点它跳到对应运行 —— 这样也顺手补上了 feat(scheduled): 定时任务页改造为「任务 + 运行记录」主从视图(#1291 阶段一) #1298 之后「定时任务跑完没人告诉你」的空档。

A5. 读/清除语义:沿用现有「会话 outcome 徽标 + 读过即清」的模式:项目级提示在你查看该项目(或点开浮层)后清除,不常驻。

A6. 无障碍与主题:状态不单靠颜色(数字 + aria-label + 不同形状);动画沿用有界呼吸并遵守 prefers-reduced-motion;亮/暗主题都用语义 token;浮层键盘可达。

可选 A7:同一套聚合镜像到托盘菜单与 macOS dock 角标(#402 已有托盘入口)。建议另开 PR,不塞进第一版。

替代方案

  • B(更小):只做「项目行数字 + 结束提示」,不做浮层入口;定时任务只在数字里体现。适合先把最有价值的部分落地。
  • C(你原来的想法):定时任务运行时在侧栏挂一个临时会话条目,看完/切换即隐藏。真要做需要先修订 feat(scheduled): 定时任务页改造为「任务 + 运行记录」主从视图(#1291 阶段一) #1298 的契约(自动化转写不进会话列表),我不推荐,但你们决定我就照做。
  • D:侧栏不动,只在定时任务页增强运行提示。

想请你们定的几件事

  1. 数字口径:定时任务运行是否合并进同一个数字,还是分开显示?(我建议分开:2 · 1 定时)
  2. 结束提示驻留:短驻留(10–15 秒)还是常驻到查看为止?(我建议短驻留 + 查看即清,和现有 outcome 徽标一致)
  3. 折叠态进入运行列表的交互:行尾独立按钮(我建议)还是长按/右键菜单?
  4. 定时任务完成是否复用原生通知 + 提示音(现在提示音只在「需要你介入」时响)?默认开还是让用户设?
  5. 是否同时做托盘 / dock 角标镜像,还是留后续 PR?
  6. 和 feat(sidebar): align every row's leading edge, group pinned projects, and sweep running titles #1160 的顺序:等它落地后叠在它的「单一前导字形」模型上(我建议),还是先按当前结构做、事后再对齐?这两条路我都能配合。

实现草图(工作量可控,供评估)

  • 数据:渲染层已有 runningSessions + 会话→项目归属 + latestSessionOutcomes;定时任务运行需要一个新的输入,建议 main 在 scheduled-runner 开始/结束时向渲染层发一条 scheduled.run.changed { taskId, runId, status, title }(最小、实时),渲染层不额外轮询 scheduled.listRuns。
  • UI:Sidebar.tsx 项目行状态位 + 行尾入口 + 浮层组件;样式落在 sessions.css / sidebar-threads.css(与 feat(sidebar): align every row's leading edge, group pinned projects, and sweep running titles #1160 同文件,需要协调顺序)。
  • i18n:预计 6–8 个新键 ×9 语言。
  • 测试:渲染测试(折叠态数字、完成提示、权限优先、定时任务计数分开)、源契约测试(状态位与浮层入口)、E2E 计划场景(含定时任务运行的项目:折叠→数字→结束→绿点,覆盖「全部结束」与「部分结束」两种)+ 真机截图。
  • 契约:component-spec §3 Sidebar(状态表)+ §20A(定时任务与侧栏的入口关系)+ E2E 场景,中英双语;是否加 ADR 看你们对本特性的定位。

如果你认可这个方向,告诉我走 A 还是 B(以及上面几个选择题的答案),我就开工出 PR:实现 + 双语契约 + 测试 + 真机截图一起交。@vastsa

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions