前言¶
在 DeepSeek Harness(DSH)里长期跑智能体,侧栏会话会越积越多。官方归档只是把会话从列表里藏起来,磁盘上的记录仍在;想彻底清掉一条对话,或给会话改个好认的名字,往往要在菜单里翻找,操作路径也不直观。
社区插件 dsh-session-tool(维护者 immortal-akx)针对的就是这类会话管理缺口:在侧栏「⋯」里提供可配置的「删除会话」,在对话区头部提供一键重命名,并可选隐藏官方悬停区的归档、置顶按钮。下文按安装、功能、配置与注意事项说明用法;事实以 GitHub 仓库 README 为准。
这是什么¶
dsh-session-tool 是 DSH 的 Cordis 插件(npm 包名 dsh-session-tool,当前资料中版本为 0.12.6,MIT 许可)。它不改变 DSH 的会话存储模型,而是在 Web 客户端注入菜单与头部工具,并在宿主侧注册 HTTP 路由,完成「永久删除磁盘目录 + 清理记账」以及通过官方 sessions 服务重命名。
插件目录页:skillhub.cn/plugins/immortal-akx/dsh-session-tool。社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;安装前建议自行查看源码与许可证,插件以当前 DSH 进程权限运行。
核心功能¶
侧栏「⋯」删除会话¶
- 在会话行「⋯」菜单中增加 「删除会话」(默认文案;可通过配置改 label、order、显隐、红色危险样式、禁用态)。
- 删除前需勾选「我已了解后果」,未勾选时删除按钮禁用。
- 删除为永久删除,不可恢复(本插件没有回收站)。删除正在运行的会话时,会先停止该会话,然后再删除。
- 运行中删除时,弹窗会额外提示会话正在运行,按钮文案为「停止并删除」。
对话区头部重命名¶
- 头部工具栏最左侧提供 ✏️「重命名会话」,走官方
sessions服务;改完后侧栏与头部标题即时更新。 - 输入框预填当前名称并自动聚焦;名称为空时「确定」禁用;回车提交、Esc 取消;失败在弹窗内显示原因。
官方菜单与悬停按钮的可配置性¶
- 可通过
MenuItems.official调整官方四项(置顶、重命名、分叉、归档)的文案、顺序或隐藏(重命名项仅支持hidden)。 - 可通过
ButtonItems.official隐藏会话行悬停时的官方 归档、置顶 图标按钮(仅支持hidden)。本插件不提供自己的悬停按钮。
审计日志¶
配置问题与每一次删除会写入 ~/.dsh/logs/dsh-session-tool.log(超过 1 MB 轮转为 .log.1)。配置键写错不会打断 DSH 启动,只会记日志并忽略该项。
安装与启用¶
将 <profile> 换成你的 profile 名(例如 web、desktop)。安装命令来自仓库 README:
# npm
dsh plugin --profile <profile> add dsh-session-tool
# 本地目录
dsh plugin --profile <profile> add file:C:/path/to/dsh-session-tool
# GitHub
dsh plugin --profile <profile> add github:<owner>/dsh-session-tool
装完后重启 DSH 生效。
卸载:
dsh plugin --profile <profile> remove dsh-session-tool
运行环境要求(package.json):Node >=22.19,peer 依赖 @deepseek-ai/cordis ~4.0.4。
典型用法与配置¶
配置写在 profile 的补丁文件 ~/.dsh/profiles/<profile>/cordis.patch.yml。键名区分大小写(例如误写 menuItems 会被忽略并记警告日志),改完需重启 DSH。只写需要覆盖的字段,其余使用默认值。
默认删除项与 order 参考¶
order 为升序数字,越小越靠前;不写等于 0。官方菜单项参考:置顶 100、重命名 200、分叉 300、归档 400;本插件「删除会话」默认 500。
维护者在 README 中给出的实际配置示例:保留删除菜单项,并隐藏悬停区的归档、置顶按钮:
# order 参考:官方 pin 100 / rename 200 / fork 300 / archive 400;本插件 delete 默认 500
- id: dsh-session-tool
name: dsh-session-tool
config:
MenuItems:
official:
pin: {}
rename: {}
fork: {}
archive: {}
plugin:
delete:
label: "删除会话"
order: 500
hidden: false
danger: true
disabled: false
ButtonItems:
official:
archive:
hidden: true
pin:
hidden: true
plugin: {}
完整 schema(含 shortcut、separatorBefore 等已登记但未实现字段)见 GitHub README 配置一节。
删除在后台做了什么¶
README 将删除链路概括为六步,便于理解「为何要先停再删」:
- 界面校验:回环地址与同源请求(否则 403/405)。
- 运行中的会话:
cancel并等待静默(最多 15 秒)。 flush写盘并从内存会话表detach,避免收尾阶段把日志目录重建。- 删除磁盘目录(永久删除,不进入回收目录)。
- 清理记账:投影缓存、工作区
sessionIds、归档集合等。 - 写审计日志。
客户端加载时,apply 须同步完成;配置在后台读取(3 秒超时,失败重试 5 次 × 2 秒),读不到则用默认值。宿主侧 /list、/config、/diag、/delete 等 HTTP 路由按进程级单例注册,避免重复加载撞路由。
适用场景与注意¶
适合谁:需要定期清理试验会话、希望删除真正释放磁盘、或习惯在对话头部改名的 DSH 用户;想用配置统一菜单顺序、隐藏官方悬停归档/置顶的人也可一并使用。
务必注意:
- 删除不可恢复,操作前确认会话内容已备份或不再需要。
- 插件以 DSH 进程权限删除目录与改记账,安装前应阅读
lib/与许可证。 - 隐藏官方悬停按钮依赖 DOM/CSS 与官方按钮的
aria-label文案;若 DSH 更新改了文案,需在lib/client.js的ARCHIVE_LABELS/PIN_LABELS中维护,加载日志中的cssRules=可用于核对规则条数。
结尾¶
DSH 生态强调「一切皆插件」;dsh-session-tool 在不大改官方模型的前提下,把「删干净」和「改名字」放到侧栏菜单和对话头部,并用 cordis.patch.yml 把菜单顺序与显隐交给用户。若你要试用或贡献 issue,可从目录页与仓库入手:
- 目录页:https://www.skillhub.cn/plugins/immortal-akx/dsh-session-tool
- GitHub:https://github.com/immortal-akx/dsh-session-tool