Skip to content

dsh-session-deck

Verified

@yiliang114/dsh-session-deck · v0.1.10 · MIT · Web UI

Codex-inspired activity and session management for DeepSeek Harness: track running, waiting, and unread sessions across workspaces.

Install

dsh plugin add @yiliang114/dsh-session-deck

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Creators

Readme

DSH Session Deck — DeepSeek Harness 会话管理插件

English · npm · 最新发布 · 发布 CI

受 Codex 活动视图启发的 DeepSeek Harness 会话管理插件。 Session Deck 在 DSH 原生侧栏中加入 Activity 和 Favorites 视图,跨工作区查看运行中、等待回复和未读会话,快速处理需要你关注的任务,并随时回到重要对话。

活动视图的交互受到 Codex 启发,并结合 DSH 的工作区、会话状态和原生置顶会话做了适配。Session Deck 是独立的 DSH 社区插件。

社区维护的第三方插件,默认英文界面,无额外 npm 依赖、无遥测,采用 MIT 许可证。

三种视图,一个侧栏

视图 用途
Activity(活动) 跨工作区查看运行中、等待回复、未读和最近会话。
Favorites(收藏) 汇总 DSH 原生置顶会话,随时回到重要任务。
Workspaces(工作区) 使用原生工作区树、管理功能及其他插件提供的菜单。

切换视图不会离开当前对话。会话行显示标题、工作区、时间和状态,菜单提供收藏、重命名、分叉、归档和复制 ID 等操作。

通过 More(更多)→ Show archived(显示归档) 查看所有工作区的归档会话。支持按标题、工作区、路径或会话 ID 搜索,点击条目右侧的 Restore(恢复) 按钮才会恢复并打开原会话;点击标题或行本身不会恢复。恢复会保留原工作区位置,不会重启已停止的任务或重新置顶。恢复失败时弹窗会显示错误,便于重试。

当你在别处查看时,会话完成会播放一组短促的双音提示,并把结果标记为未读。每个导航标签右上角分别显示小蓝点:Workspaces 和 Activity 对应全部未读会话,Favorites 仅对应收藏中的未读会话,选中哪个标签不会清除其他标签的提示。工作区分组标题保留各自的未读蓝点。浏览器标签页也会在 favicon 右上角加蓝点,并在标题前显示 (N),查看相应会话后自动更新。页面隐藏或窗口失焦且浏览器已授权通知时,同时发送一条静音系统通知;点击通知可回到对应会话。打开某个会话只清除该会话,最后一个未读成员被查看后对应蓝点才消失;展开/折叠分组或切换视图都不会把整组标成已读。

截图来自本地 DSH 安装的英文界面;会话标题和工作区名称已匿名化。

Activity Favorites Workspaces
掌握运行状态和未读结果。 回到原生置顶的重要会话。 保留完整的工作区操作。
英文 Activity 视图 英文 Favorites 视图 英文原生 Workspaces 视图

截图展示无需宿主补丁、自动位于全局面板下方和工作区区域上方的切换条。界面及匿名化后的会话标题使用英文;不包含浏览器顶部菜单、标签栏和地址栏。

从 npm 安装

从 npm 安装最新发布版本。作为历史验证记录,首次发布的 0.1.2 tarball 已在隔离环境中安装,SHA512 完整性校验通过,宿主入口、客户端和补丁文件均已与源码核对;这不代表后续版本已经完成相同验证。

环境要求:

  • Node.js 22 或以上。
  • DSH Web GUI 0.2.1-rc.2,这是当前精确适配的宿主版本,其他版本未经验证。
  • 已启用 DSH 原生侧栏、会话和工作区插件。

安装前先检查命令行版本,并使用当前 Web GUI 对应的 profile:

node --version
dsh --version

预期 Node.js 为 v22 或以上,DSH 为 0.2.1-rc.2。以下步骤以已经可以正常打开的 DSH Web GUI 为前提;如果找不到 dsh 命令,请先安装并启动受支持的 DSH 宿主。如果启动 DSH 时使用了自定义 DSH_HOME,执行插件命令时也要使用相同的值。

**从旧安装迁移:**在通过 npm 安装前,请先在 DSH 插件管理中停用并移除旧插件实例,避免两个实例同时接管侧栏;浏览器存储可以保留。

dsh plugin --profile web add @yiliang114/dsh-session-deck@latest --ignore-scripts

使用其他 profile 时替换 web。刷新现有 DSH GUI,然后在全局面板下方、工作区区域上方选择 Workspaces / Activity / Favorites。在支持的 DSH 0.2.1-rc.2 布局中,插件会自动将切换条放到该位置,无需修改已安装的 DSH 文件。Workspaces 保留原生工作区浏览器。修改客户端后也需要刷新,不应假定热更新已启用。

插件自身文案使用英文。要让 DSH 其他界面也显示英文,在 更多 → 设置 → 通用设置 → 语言 中选择 English。会话标题仍保留用户原来使用的语言。

首次使用检查(约两分钟)

  1. 完成或关闭 DSH 的首次使用对话框。在 插件 中确认 @yiliang114/dsh-session-deck 已安装并启用,然后刷新页面。
  2. 选择 Activity,打开一个至少开始过一轮任务的已有会话。新建空会话即使已置顶也会被隐藏,因此全新 profile 中显示空列表是正常的。
  3. 将鼠标移到该会话上,打开操作菜单,选择 Add to favorites (pin)。它应出现在 Favorites,并在 Workspaces 中显示原生置顶标记。
  4. 在三个视图间切换,当前对话应保持打开;再次刷新页面,Favorites 中仍应保留该置顶会话。

如果看不到切换条,请检查插件是否装在当前 Web GUI 的 profile 和 DSH_HOME 下、是否已启用,以及宿主版本是否匹配。原生侧栏、会话和工作区插件也需要启用。同时检查侧栏底部:无法识别支持的工作区边界时,切换条会回退到那里。详见兼容性。

2026-10-25,0.1.8 版本在 DSH 0.2.1-rc.2、Node 22.20.0 的隔离 profile 中通过了安装、导航、收藏、归档恢复、GUI 卸载及重装检查。会话检查使用本地合成记录,没有调用模型;这不代表已经验证真实模型状态变化、系统通知投递或物理音频输出,也不代表后续版本完成了相同验收。

备选:链接本地仓库

git clone https://github.com/yiliang114/dsh-session-deck.git
cd dsh-session-deck
npm run verify
dsh plugin --profile web add "link:$PWD" --offline --ignore-scripts

项目没有需要安装的依赖,仓库已包含客户端文件;build 仅检查 JavaScript 语法,不生成客户端。链接安装期间请保留仓库目录。

也可以通过 Plugins → Add plugin → Install a third-party plugin 安装:输入 link:/absolute/path/to/dsh-session-deck,点击 Install,然后 Enable now,最后刷新页面。

备选:使用 tarball 安装

不经过 npm 注册表分发时,在仓库根目录执行:

npm run verify
npm pack --ignore-scripts

将生成的归档文件复制到目标机器,再用绝对路径安装。将 VERSION 替换为 npm pack 输出文件名中的版本号:

dsh plugin --profile web add /absolute/path/yiliang114-dsh-session-deck-VERSION.tgz --ignore-scripts

安装后刷新 GUI。tarball 安装不依赖原仓库目录持续存在。链接和 tarball 两种安装方式都会在支持的 rc.2 布局中自动将切换条放到工作区区域上方,无需宿主补丁。

自定义插件市场

市场索引列出已通过注册表验证的 npm 发布版本。在 DSH 自定义插件市场中添加以下原始 JSON 地址作为索引源:

https://raw.githubusercontent.com/yiliang114/dsh-session-deck/main/market-index.json

这是用户自行添加的自定义市场源,并非 DSH 官方收录。发布 npm 不会自动将插件加入官方 DSH 市场。

维护者:推送到 main 会自动排队发布补丁版本(例如 0.1.2 → 0.1.3)。连续快速推送可能合并处理:过时的排队任务跳过,最新可执行任务包含累计改动。需要手动选择次版本时,执行 npm version minor --no-git-tag-version,再正常提交并推送;显式指定的更高稳定版本(例如 0.2.0)会保留,下一次发布为 0.2.1。工作流负责验证、版本提交和标签、带 provenance 的发布、市场索引更新和 GitHub Release。认证前提与失败恢复请参阅发布指南(英文)。

会话状态与边界

  • Activity 保留全部运行中、等待回复和未读会话,以及最多 20 条普通最近会话,按 DSH 的 updatedAt 排序,而非最后打开时间。Favorites 不受 20 条限制。
  • 收藏直接使用 DSH 原生置顶数据,与工作区树同步。Activity 和 Favorites 不单独显示归档、子代理和空白会话;普通分叉正常显示。Show archived(显示归档) 列出全部已知归档会话,包括已归档的空白会话和子代理,不受 20 条限制。
  • 状态优先级为等待回复 → 运行中 → 未读。已知子代理后代仍在运行时,父会话保持运行状态;普通分叉不会向来源会话传播状态。
  • 仅聚合 DSH 会话目录中已知的子代理后代。独立后台 shell 作业不在跟踪范围内,会话空闲不代表它启动的所有进程均已退出。
  • 会话及已知后代全部停止时,如果你正在查看其他会话,它会标记为未读;打开即清除;开始新一轮运行也会清除上一轮结果的未读标记。从原生 Workspaces 列表进入会话时,已读确认不等待完成状态观察的排队锁。持久化记录可恢复刷新期间发生的完成状态,但无法补全所有页面关闭期间完整开始并结束、或从未观察到的运行。
  • 每次实际观察到的完成最多播放一次插件提示音,并在后台且已授权时附加一条静音系统通知;刷新、恢复历史未读和仅子代理结束都不会补发提示,但下一轮完整运行仍会产生新提示。等待用户交互不算完成。通过 Session Deck 归档引起的停止会被抑制;原生或外部归档若先收到停止状态、后收到归档成员更新,仍可能被识别为手动停止。同源标签页在支持 Web Locks 时串行执行完成状态观察和提醒投递;共享存储不可用或不支持锁时仅尽力去重,不承诺严格一次。
  • 每次本页观察到新的归档成员变化时,会清除会话已知的旧运行/未读基线,即使它暂时不在目录中。未变化的归档成员快照不会反复清除后来出现的共享记录,因为它们可能来自其他标签页的新活动;这些已处理记录随后参与正常的有界清理。仅凭目录缺失不会删除未读数据。恢复空闲会话不会补报旧的完成。如果恢复后的首个快照仍显示运行中,会保守地等待一次新的“空闲→运行”变化,因此恢复时已经启动的运行可能结束而不提醒。页面从未观察到的归档/恢复过程无法推断。
  • 打开 Activity/Favorites 会话失败时会显示错误对话框,保留未读状态;关闭对话框后可重新点击会话或菜单重试。Open in workspace for all actions 仅在打开成功后切换视图。
  • 提示音保持中性,不宣称成功:当前客户端状态无法区分正常完成、失败和手动停止。声音在本地合成,默认开启。可在自己使用的浏览器点击 More → Enable and test sound(开启并试听提示音),启用声音并通过用户手势试听;结果只确认播放已启动,不代表扬声器实际可闻。前后台都由插件播放提示音,系统通知设为静音,避免重复发声。浏览器自动播放限制可能要求先点击页面或按键。系统通知仅在浏览器站点设置中已授权时发送;插件不请求外部推送权限,也不跟踪单条聊天消息。
  • Workspaces、Activity 和浏览器标签页反映所有符合条件的未读会话(不是聊天消息条数),Favorites 只反映其中已收藏的会话;页面标题显示完整数量。工作区蓝点按完整的工作区成员关系汇总同一批会话,不依赖当前渲染或截断的会话行。平面和树状视图都只统计直接成员;折叠的树状祖先不会汇总后代未读。页面隐藏或当前打开其他全局面板时,不算已查看会话。
  • 归档活动会话需要确认 Stop and archive(停止并归档)。插件不提供永久删除;其他插件贡献的完整原生菜单请切回 Workspaces 使用。

DSH 兼容性与切换条位置

插件的 engines.dsh 精确声明支持 0.2.1-rc.2。自动顶部定位使用针对该版本的 DOM 兼容适配层,并非 DSH 官方扩展 API。

DSH 侧栏 定位方式 Session Deck 支持情况
官方 0.2.1-rc.2,未打补丁 没有官方 sidebar.workspaces.before 槽位;适配层默认将切换条放到工作区区域上方。 当前支持目标,严格检查 rc.2 DOM 结构。
0.2.1-rc.2 加旧版本地补丁 复用全局面板下方已有的 sidebar.workspaces.before 槽位。 兼容,但已不再需要补丁。
官方 0.2.1-rc.3 已发布的客户端及槽位声明中仍没有 before 槽位。 不支持:整体兼容性未经验证,精确版本声明不包含它。

识别到 rc.2 布局时,适配层在工作区区域紧前方、Automation tasks 等全局面板下方插入自己的 DOM 容器,通过 React portal 渲染切换条。它不会写入已安装的 DSH 文件,也不会替换原生工作区浏览器。遇到未知 DOM 布局时回退到底部。停用插件会移除其限定范围的观察器和 DOM 容器。

rc.2 的 More 菜单同样没有菜单项扩展槽位。Session Deck 仅在原生账号按钮和菜单结构匹配该版本时,通过自己的 portal 容器在 Settings 下方插入入口。原生设置、反馈、账号操作和键盘导航保持可用;未知或存在歧义的布局会回退为底部的 Show archived 按钮。停用插件会清理菜单容器及观察器。

工作区分组标题也没有装饰槽位。未读蓝点由一个严格识别原生项目行及其真实 workspace:<id> 键的适配器添加;它只拥有自己的 6px 标记,会清理退出动画副本里的标记,不使用标题或路径识别分组。未知布局不会改动原生树,Activity、提示音和会话跳转仍然可用。常驻的完成观察器使用官方 shell.overlay 槽位。

rc.3 发布文件检查于 2026-10-23,该检查不能证明插件兼容。支持其他宿主版本时,需要先验证会话、工作区、槽位、UI 接口及 DOM 布局,再扩大 engines.dsh 的版本范围。

旧版侧栏补丁回滚

侧栏补丁脚本保留用于回滚和向后兼容,新安装无需执行。如果之前安装过本地 before 槽位补丁,插件可以继续复用该槽位,也可以恢复原侧栏。

找到当前运行的 DSH 实际加载的 @deepseek-ai/dsh-client-ui-sidebar 包目录,在本仓库中执行以下命令。占位路径应替换为该侧栏包目录,而非 DSH 根目录或本插件目录:

node scripts/patch-sidebar-before.mjs /path/to/dsh-client-ui-sidebar --rollback

恢复依赖原始的相邻 .dsa-before.backup 备份,并会拒绝覆盖无关改动。回滚后刷新 GUI:在支持的未打补丁 rc.2 布局中,新插件仍会将切换条放到工作区区域上方。如果回滚的是 DSH 源码仓库,还需重新构建相关客户端产物。

隐私与本地存储

插件使用 DSH 的会话和工作区 API,不发起模型调用、不发送遥测、没有外部上传端点。

为兼容早期版本,浏览器 localStorage 沿用以下键:

键 内容
dsh-session-activity.mode.v1 当前视图。
dsh-session-activity.pending.v1 会话 ID、观察到的运行状态和完成未读元数据。
dsh-session-activity.notified.v1 每个会话最近一次已投递通知的版本,用于避免同源标签页重复提醒。
dsh-session-activity.sound.v1 完成提示音是否开启。

插件不在其中保存会话正文。收藏仍使用 DSH 原生置顶数据。视图和未读状态在同源标签页间同步,不跨设备同步;存储不可用时仅保留在内存中。清除浏览器存储会重置这些元数据。已处理记录最多保留 1,000 条,运行中和未读记录不受此清理上限影响。

停用或卸载

进入 插件 → @yiliang114/dsh-session-deck。关闭启用开关即可停用;点击 卸载 并确认则移除安装包。随后刷新 GUI:原生工作区树应保留,Activity、Favorites 以及插件添加到 更多 菜单中的条目应消失。停用也会移除适配层的观察器和 DOM 容器。

会话和原生置顶数据会保留。卸载不会清除上表中的浏览器元数据,也不会撤销旧版宿主补丁;如需撤销,请单独执行恢复命令。

如需使用命令行,请使用当前 Web GUI 对应的 profile 和 DSH_HOME:

dsh plugin --profile web remove @yiliang114/dsh-session-deck

命令行卸载后,请重启对应的 DSH Web 实例,再刷新页面。在 rc.2 验收中,命令行移除安装包后,运行中的宿主仍保留插件,直到重启才卸载运行时;GUI 卸载则立即生效。不要给 remove 添加 --ignore-scripts:宿主附带的 pnpm 不支持在移除命令中使用该参数。

开发

npm run verify

该命令依次执行语法检查、会话筛选与状态逻辑的 Node.js 测试,以及打包清单 dry-run 检查。CI 使用 Node.js 22 和 24。没有独立 lint 或 TypeScript 检查;自动检查不能替代真实 DSH GUI 验证。

客户端位于 lib/client.js,另有最小宿主入口和 Cordis 配置。反馈问题时,请在 GitHub Issues 中提供 DSH 版本、安装方式和复现步骤。

许可证

MIT。本项目独立维护,不属于 DSH 官方内置组件。