🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

会话管家 wsnmm3/dsh-session-keeper

DeepSeek Harness
wsnmm310 天前有提交已提供中文文档扫描:含敏感能力

用分类树和回收站整理侧边栏里的会话

29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add wsnmm3/dsh-session-keeper
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 10 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件写入剪贴板(不计风险)
查看扫描证据(共 35 处,展示前 16 条)
  • 读取本地文件
    lib/index.js:101
    containers = (await readdir(root, { withFileTypes: true })).filter((entry) => entry.isDirectory()).map((entry) => entry.name);
  • 读取本地文件
    lib/index.js:108
    if ((await stat(candidate)).isDirectory()) found.push({
  • 读取本地文件
    lib/index.js:134
    if ((await stat(candidate)).isDirectory()) return {
  • 读取本地文件
    lib/index.js:145
    const entries = await readdir(path, { withFileTypes: true }).catch(() => []);
  • 读取本地文件
    lib/index.js:149
    else if (entry.isFile()) total += await stat(child).then((info) => info.size).catch(() => 0);
  • 读取本地文件
    lib/index.js:156
    const names = (await readdir(root, { withFileTypes: true }).catch(() => [])).filter((entry) => entry.isDirectory()).map((entry) => entry.name);
  • 写入本地文件
    lib/index.js:175
    await mkdir(batchDir, { recursive: true });
  • 写入本地文件
    lib/index.js:176
    await writeFile(manifestPath(batchDir), JSON.stringify(batch, null, 2), "utf8");
  • 写入本地文件
    lib/index.js:177
    await mkdir(trashRoot(dshHome), { recursive: true });
  • 写入本地文件
    lib/index.js:205
    await mkdir(dirname(target), { recursive: true });
  • 写入本地文件
    lib/index.js:206
    await rename(chosen.path, target);
  • 写入本地文件
    lib/index.js:238
    await mkdir(dirname(target), { recursive: true });
  • 删除本地文件
    lib/index.js:295
    if (restored.length > 0 && failed.length === 0) await rm(batchDir, {
  • 删除本地文件
    lib/index.js:329
    await rm(batchDir, {
  • 删除本地文件
    lib/index.js:365
    await rm(batchDir, {
  • 写入剪贴板
    lib/client.js:10908
    await navigator.clipboard.writeText(text);
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-brand@deepseek-ai/dsh-api-gateway@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-sidebar@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-invariants@deepseek-ai/dsh-session@deepseek-ai/dsh-storage-domain
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 的会话管理:按工作区划分的分类树、拖拽排序、置顶、归档区,以及可恢复的删除回收站。

README

由 DeepSeek 最新模型翻译生成
会话管理 · dsh-session-keeper 把 dsh 侧边栏变成真正能管得住的地方:分类树、拖拽排序、置顶、归档分区、可撤回的删除回收站。 每个 Workspace 有自己独立的分类,每个会话最多属于一个分类;删掉的会话进回收站而不是蒸发。 | 包名 | dsh-session-keeper | | 显示名 | 会话管理(设置 → 插件里的 tab 就是这个名字) | | 版本 | 1.2.1 | | 许可 | MIT | | 形态 | 一个包内含 Host 入口 + Web Client bundle + Cordis profile patch,不需要另装 Client / Bundle | 这是谁的代码? 本项目是 ht719/dsh-session-categories(0.1.0,MIT)的维护分支。 上游那份装进当前版本的 dsh 会直接打不开窗口,本仓库在它之上做了移植与扩展。 每一项改动来自哪里(上游基线 / 竞品思路 / 使用者反馈)都记在 CHANGELOG.md;移植的技术细节在 FORK-NOTES.md。 不要与上游包同时安装。
展开完整文档(README 剩余 1 节)
会话管理 · dsh-session-keeper

把 dsh 侧边栏变成真正能管得住的地方:分类树、拖拽排序、置顶、归档分区、可撤回的删除回收站。
每个 Workspace 有自己独立的分类,每个会话最多属于一个分类;删掉的会话进回收站而不是蒸发。

| 包名 | dsh-session-keeper |
| 显示名 | 会话管理(设置 → 插件里的 tab 就是这个名字) |
| 版本 | 1.2.1 |
| 许可 | MIT |
| 形态 | 一个包内含 Host 入口 + Web Client bundle + Cordis profile patch,不需要另装 Client / Bundle |

这是谁的代码? 本项目是 ht719/dsh-session-categories(0.1.0,MIT)的维护分支。
上游那份装进当前版本的 dsh 会直接打不开窗口,本仓库在它之上做了移植与扩展。
每一项改动来自哪里(上游基线 / 竞品思路 / 使用者反馈)都记在 CHANGELOG.md;移植的技术细节在 FORK-NOTES.md。

不要与上游包同时安装。 dsh-session-keeper 与 @deepseek-ai/dsh-session-categories 抢的是同一个 sidebar.workspaces 槽位,打开的也是同一个存储域(session_categories,version 0)。两个一起装,侧边栏会互相顶掉,分类文档也会被写进同一份。二选一:这个分支,或者上游。

为什么会有这个分支(源于什么)

上游 dsh-session-categories@0.1.0 发布于 2026-08-19,对着更早的 dsh 预发布版写的。之后 dsh 移除了 @deepseek-ai/dsh-client-runtime 这个包,而上游的 client bundle 仍然 require 它:

upstream lib/client.js 需要: "@deepseek-ai/dsh-client-runtime/client" ← 现在解析不到

dsh 的模块加载器会拿插件的 inject 声明去解析 bundle 里的 require。解析不到就在 bundle
物化时抛异常,sidebar.workspaces 这个 slot 条目的挂载随之崩溃;官方侧边栏把 slot 收回去,而崩溃发生在 shell 引导阶段,于是窗口永远开不完 —— 表现出来的样子是「dsh 打不开了」。

本分支从源码重建 bundle(不是打补丁改 lib/),所以重装插件也不会把修复冲掉。
上游还缺两样东西:仓库里没有 Rows.module.css(Rows.tsx 却 import 它),以及重建出来的样式表里 @keyframes row-in 块被截断过(一个坏 at-rule 会让后面所有规则静默失效)。
这两处也在本分支补齐,细节见 FORK-NOTES.md 与 BUILD.md。

功能

1. 分类树

- 分类按 Workspace 隔离:A 工作区的分类不会跑到 B 工作区去。
- 支持多级嵌套:分类下可以再开子分类,缩进随层级增加。
- 新建方式三个入口:Workspace 操作菜单建一级分类、分类 ⋯ 菜单建子分类、会话行的移动到分类。
- 分类的 ⋯ 菜单:新建子分类 / 重命名 / 删除。重命名是就地输入(回车确认、Esc 取消),不弹框。

2. 拖拽

四种拖拽都支持,各有各的落点规则:

| 拖什么 | 拖到哪 | 结果 |
| 会话行 | 单列表 / 工作区分组里的另一行 | 调整顺序(写进本地存储) |
| 会话行 | 分类里的行 | 在该分类内调整顺序 |
| 会话行 | 分类容器 | 改派到那个分类 |
| 分类行 | 同级分类行 | 在兄弟之间排序 |
| 分类行 | 其他分类行的中间带 | 变成它的子分类 |

分类行拖到另一行的上边缘 / 下边缘是排序,落在中间带是改父级 —— 两种手势靠落点高度区分。
跨父级排序会被 Host 拒绝(anchor-not-found),这是设计如此:排序只在同级内有意义。

需要「手动排序」生效,把视图菜单的排序方式切到 手动排序;停在 最近更新 时,新活动会把会话顶回前面。

3. 会话操作

每个会话行右缘有 ⋯,鼠标悬停时时间戳让位、按钮落到最右:

| 操作 | 作用 |
| 重命名 | 改标题 |
| 分叉会话 | 在最后一个完成的回合处分叉 |
| 置顶会话 / 取消置顶 | 标记该行醒目:置顶行会被抬进所有分类上方的全局置顶段,或者留在自己所属的分组里 |
| 归档会话 / 取消归档 | 归档该行,或把归档行放回原位 |
| 移动到分类… | 改派到别的分类,或放回未分类尾部 |
| 删除会话 | 把会话记录移进回收站(见第 5 节) |

4. 视图菜单

分组方式(三种,与官方浏览器一致):

| 模式 | 说明 |
| 按工作区 | 每个 Workspace 一个平铺分区 |
| 按工作区树 | 按目录路径嵌套:目录位于另一个 Workspace 目录之内的,作为那个分区里的子分区渲染。按严格路径边界匹配,E:\AI\DSHX 不是 E:\AI\DSH 的子级 |
| 单列表 | 一条按时间排的列表,不分组 |

路径比较前会归一化(Windows 分隔符、结尾分隔符、大小写都不计),所以 E:\AI\DSH 与 e:/ai/dsh/ 是同一个父级。

筛选会话(三态,与官方一致):

- 隐藏已归档 —— 归档分区和归档行一起消失;
- 全部对话(包括已归档) —— 分区出现并展开;
- 仅显示已归档 —— 工作区分组全部隐藏,只剩归档分区。

第二项写「包括」而不是官方的「显示」,是有意为之;行为完全一致。

置顶位置(一个开关,管所有置顶行):

- 置顶到分类上方 —— 置顶行从各自分类里抽出来,汇成所有分类之上的全局置顶段。置顶说的是「在整个列表里醒目」,不是「在某个分组里靠前」;
- 保留在所属分类 —— 置顶行留在自己所属的分组里,只在那个分组内靠前。

开关在同一个视图菜单里,默认是置顶到分类上方。

5. 删除与回收站

「删除会话」把会话记录移到 dsh 数据目录下的批次目录。文件不销毁,删除随时可逆。

移任何文件之前,确认框会先走 /session-recycle/scan 扫一遍并列出:

- 会话记录本身占多大;
- 选了更大范围时,会跟着一起移动的、该会话写过的文件;
- 每一个被拒绝的文件,以及拒绝的理由。

三档范围:只移会话记录 / 连该会话在工作目录里写过的文件一起移 / 预留的「全部」档。
安全规则很严:只有真实路径严格位于会话工作目录内、且不在 dsh 数据目录下的文件才会被动到;符号链接、不存在的文件、其余情况一律拒绝并给出理由。日志会在移动之前读出来,因为一旦离开 sessions 目录,持久化层就读不到它了。

删除同时把该会话从所有工作区名册里摘除、并从归档集合中释放,所以不会留下孤儿行。
撤回会把三面一起还原:恢复日志、重新挂回名册、原本已归档的重新归档。

回收站管理在 设置 → 插件 → 会话管理:

- 按批次分组列出,显示删除时间、会话数、占用体积;
- 看内容 展开该会话的存档对话,让「再删一次」是个知情决定;
- 撤回最近一批 把最新一批放回原处;
- 彻底删除(单批)与 清理过期(默认保留最近 20 批 / 30 天)—— 这两项不可逆;
- 清空回收站 一次清掉全部批次。

6. 插件日志

设置页的插件日志是个环形记录,按时间倒序记插件自己的动作与失败(归档、取消归档、删除、扫描、撤回)。
被拒绝的动作会留下看得见的理由,而不是一闪而过的 toast。可以一键复制全部日志。

安装

shell 里要能用 dsh 命令,然后装到未修改的 dsh Web profile:

dsh plugin --profile web add dsh-session-keeper
dsh --profile web

在 dsh 源码仓库里跑的话,用它自己的 launcher:

pnpm dsh plugin --profile web add dsh-session-keeper
pnpm dsh --profile web

仓库里已含生成好的运行时文件,不需要额外构建插件。

从 tarball 装(离线或想锁定版本时):

dsh plugin --profile web add ./dsh-session-keeper-1.2.1.tgz

装完重启 dsh。插件注册三个 slot:sidebar.workspaces、settings.plugins.tab、sidebar.footer.action,不碰任何 dsh 核心包,也不需要改 ui-workspace / ui-slots / api-remotes。

注意事项

1. 预发布版不承诺兼容。 插件对着当前的 dsh 预发布插件 API。dsh 升级时请一起更新本插件——只升一边很容易撞上「包被移除 / 导出改名」这类断裂,症状往往就是侧边栏整块不见或窗口打不开。

2. 「彻底删除」是真的删。 「删除会话」是可逆的(进回收站);「彻底删除」「清理过期」「清空回收站」不可逆。
回收站不是备份,重要会话请另外导出。

3. 视图状态在你自己的浏览器里。 分组方式、排序方式、分类展开状态、归档筛选、各账户的手动顺序,都以 dsh.session-categories.view.v2 存在浏览器 localStorage。换机器、清缓存、换 profile 都会丢。
会话本身和分类数据不在这里,不会因为清缓存丢。

4. 分类删除会连带归档会话。 递归删除一个分类,会把里面的会话归档(不是删除)。日志不会被删掉,随时可以取消归档找回来。

5. 跨 Workspace 的操作会被拒绝。 把会话移到别的 Workspace 的分类、把分类移进自己的后代、对着过期 revision 动手 —— 都会被拒并给出理由。
这是保护,不是 bug。

6. 排序要开「手动排序」。 停在「最近更新」时,新活动会把会话顶回最前面,把用户手排的顺序不断覆盖。

7. 本插件不注入全局 CSS。 所有样式都走 CSS Modules(类名哈希化),作用域限定在自己渲染的 DOM 里。它不会改侧边栏的全局宽度、不会改窗口背景、不会写 document.body。所以它既不会修好、也不会弄坏外壳层的布局问题。

8. 卸载。 dsh plugin --profile web remove dsh-session-keeper。分类与会话数据留在 dsh 存储里,不会跟着插件走。

数据与行为

- 递归删除分类会归档其中的会话,不删持久化日志。
- 归档操作带 operation id 重试,进程重启后可以恢复。
- 变更会拒绝:过期 revision、跨 Workspace 的会话 id、移到自身后代、指向未知分类。
- 删除的批次目录在 dsh 数据目录下,结构 <批次id>/<会话id>/;批次 id 形如 2026-10-17T14-31-25-939Z。

兼容性

面向当前 dsh 预发布版的插件 API,目标是在未修改的 dsh 安装里工作。
dsh 不承诺跨预发布版本兼容,升级时请同时更新 dsh 和本插件。

仓库结构

仓库根目录就是可安装的预构建包。源码保留在 packages/workspace/session-categories/、 packages/client/ui-session-categories/ 与 packages/bundle/session-categories/。
构建说明(含本分支不得不打的上游补丁)见 BUILD.md。

许可与致谢

MIT。上游版权归原作者 ht719;本分支保留同样的许可与署名,改动以同等条款发布。
上游仓库:ht719/dsh-session-categories。
预览分享卡片长什么样 ↓wsnmm3/dsh-session-keeper
分享 · DeepSeek Harness Hub
wsnmm3/dsh-session-keeper

用分类树和回收站整理侧边栏里的会话

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部