ARTICLE / 开源项目

补充侧边栏批量归档交互特性的研究

PR 地址NousResearch/hermes-agent#68054 · 修整侧边栏点击语义:ctrl 固定、shift 多选、一次归档一批

研究摘要

Hermes 桌面端侧边栏的会话列表里,shift+click 一直被用作"固定会话"的快捷操作。对经常批量清理会话的用户来说,这个键位设计留下了缺口:想归档掉十几个旧会话,只能一个一个点进菜单操作,固定与批量清理两种诉求挤在同一个修饰键上,语义互相打架。

本 PR 重排了侧边栏会话行的点击语义:ctrl+click 接管"固定",shift+click 改为切换多选,配合 Escape 清除、底部批量归档栏,一次操作可以选中任意数量的会话并整体归档。改动覆盖 5 个桌面端源文件与 4 个语言包(+129/-16),cmd+click 新标签页、cmd+shift+click 新窗口、单击恢复会话等既有语义全部保持不变。PR body 附有 11 项手动验证清单但未标注完成状态。

一、问题背景:一个修饰键承载两种互斥诉求

1.1 原交互的键位分配

原侧边栏交互中:

  • 单击:恢复会话;
  • cmd+click:在新标签页打开;
  • cmd+shift+click:在新窗口打开;
  • shift+click:固定(pin)会话。

1.2 三个痛点

一是固定与批量操作的语义冲突shift+click 在主流桌面软件里是标准的"范围多选"手势,这里却用来做固定,用户从其他工具迁移过来时肌肉记忆直接失效;同时,固定是低频操作,多选是高频操作,高频诉求让位给了低频诉求。

二是批量归档路径漫长。会话列表越积越长,清理时只能逐个处理,没有"选中一批 → 一次归档"的出口,几十个旧会话的清理成本被线性放大。

三是无选中反馈与取消通道。即便选中了内容,也没有明确的高亮、数量提示与一键取消,误操作只能靠手动恢复。

二、特性设计:键位重排 + 多选状态 + 批量归档栏

2.1 点击语义重排

session-row.tsx 中的点击处理逻辑调整为:

手势行为
单击恢复会话(不变)
cmd+click新标签页打开(不变)
cmd+shift+click新窗口打开(不变)
ctrl+click(原 shift+click固定/取消固定会话
shift+click(新)切换多选状态
Escape清除全部选中

固定操作改为 ctrl+click(macOS 上即 control+click),把 shift+click 释放给范围多选这一通用语义。

2.2 多选视觉与状态

index.tsx 引入多选状态管理:被选中的行显示 accent 高亮环、背景色与勾选图标;对已选中的行再次 shift+click 则取消选中。选中状态贯穿虚拟化列表(virtual-session-list.tsx)与会话分区(sessions-section.tsx),属性逐层透传,不破坏列表的虚拟滚动性能路径。

2.3 批量归档栏

当选中数量 ≥ 1 时,Recents 区域底部出现批量归档操作栏,显示当前选中数量,提供两个动作:Archive(归档全部选中会话)与 Clear(清除选中状态)。Escape 键在任意时刻清空选择,误选可一键撤回。

2.4 本地化同步

交互语义变化同步到 4 个语言包(英文、简体中文、繁体中文、日文),shiftClickHint 提示文案随键位变化更新,避免界面提示与实际手势脱节。

2.5 操作栏的出现条件与反馈

批量归档栏只在选中数量 ≥ 1 时出现,数量归零(全部取消选中)后操作栏随之消失,界面不会残留一个没有作用的空操作区。选中状态与操作栏的出现条件绑定,视觉上通过 accent 高亮环、背景色与勾选图标三重反馈强化"当前处于多选模式"的感知,降低误操作概率。清空通道有两条:Clear 按钮显式清除,Escape 键快捷清除,覆盖鼠标与键盘两种操作习惯。

三、实测结果

PR body 附有 11 项手动验证清单(ctrl+click 固定、shift+click 选中高亮、多行连选、反选、批量归档栏出现与计数、Archive 归档全部、Clear 清除、Escape 清除、cmd+click 新标签页、cmd+shift+click 新窗口、单击恢复会话),但 checkbox 均未勾选,无完成记录。以下为设计意图与预期效果:

  • 预期效果一ctrl+click 固定、shift+click 多选,两个手势互不干扰,原有三组快捷键无回归;
  • 预期效果二:选中 ≥1 行时底部出现带计数的归档栏,Archive 一次性归档全部选中会话,Clear 与 Escape 均可清除选中;
  • 预期效果三:虚拟化列表在多选状态下的滚动与渲染性能不劣化。

以上均为设计意图,实际交互效果需在桌面端构建后按清单逐项验证。

四、能力边界

  • 桌面端专属:改动全部位于 apps/desktop,CLI / TUI / 网关端的会话管理不受影响;
  • 键位平台差异ctrl+click 在 macOS 与 Windows 上键位相同但触控板/鼠标习惯不同,触控板用户可能更习惯双指轻点手势,本特性未覆盖触控板手势映射;
  • 选择是会话级的:批量归档作用于整个会话,不支持会话内部分内容的批量操作;
  • 无自动化测试记录:PR 以手动验证清单为主,未提供组件级自动化测试数据,回归保障依赖人工逐项确认。

五、PR 信息

  • PR 地址:https://github.com/NousResearch/hermes-agent/pull/68054
  • 改动规模:+129 / -16,9 个文件(session-row.tsxindex.tsxsessions-section.tsxvirtual-session-list.tsx 及 en/zh/zh-hant/ja 四个语言包等)
  • PR 状态:closed
  • 提交时间:2026-07-20

本文记录 x7peeps 向 Hermes Agent 上游贡献的特性研究,所有数据来自 PR 实测记录。