READMESource: main@15436064
dsh-session-tool
给 DeepSeek Harness(DSH)补上删除会话能力的宿主插件。
DSH 官方只有「归档」—— 归档只是把会话从界面隐藏,日志文件原封不动躺在磁盘上,没有删除入口。本插件补上这个能力。
特性
- 斜杠命令:
/sessions-archived查看、/sessions-delete删除(/菜单自动出现,无需客户端界面) - agent 工具:
session_archived_list/session_delete,模型可直接调用 - 默认安全:删除先进回收目录,
--purge才永久删除;--yes显式确认;拒绝删除当前会话 - 运行中的会话默认拒绝删除,
--stop才先取消回合并等待静默 - 完整清理链路:日志目录 + 投影缓存 + 工作区记账(含归档集合)一起清,走活的
storageDomain,内存与磁盘一致 - 零依赖:只用 Node 内置模块 + DSH 宿主服务,不 import 任何
@deepseek-ai的值
安装
⚠️ 下面命令里的
<profile>是占位符,请替换成你自己的 profile 名, 不要把尖括号一起输入。常见值:Web / TUI 端用web,桌面端用desktop。
一行搞定(Web 端,可直接复制粘贴)
dsh plugin --profile web add dsh-session-tool
桌面端把
web换成desktop;其他 profile 换成你自己的名字。
其他安装方式
从 GitHub 安装(npm 镜像尚未同步时可用):
dsh plugin --profile web add github:immortal-akx/dsh-session-tool
从本地开发目录安装:
dsh plugin --profile web add file:C:/path/to/dsh-session-tool
装完重启
安装后重启 DSH 生效(Host 插件在启动时加载)。
图形界面(推荐)
重启 DSH 后,侧栏每个会话行都会多出删除入口:
| 位置 | 操作 |
|---|---|
| 会话行的 "..." 菜单 | 鼠标移到会话行 → 点行尾的 ⋯ → 菜单底部 「删除会话」(红色,带垃圾桶图标) |
| 会话行悬停按钮 | 鼠标停在会话行上 → 行尾出现 🗑 删除 按钮 |
点击后会弹出确认框,确认即删除。安全设计:
- 默认移入回收目录(
$DSH_HOME/session-trash/<时间戳>/),可手动搬回恢复 - 运行中的会话会二次确认,确认后先停止其任务再删除
- 删除后侧栏那一行自动消失(若未消失,刷新页面即可)
命令(不想用鼠标时)
在任意会话输入框敲 /:
| 命令 | 作用 |
|---|---|
/sessions-archived |
列出已归档会话:标题 / 创建时间 / 占用 / id / 是否运行中 / 文件是否还在 |
/sessions-delete |
删除已归档会话 |
/sessions-delete 预览:将删哪些(不动手)
/sessions-delete all --yes 删除全部 → 移入回收目录
/sessions-delete 1,3 --yes 按序号删
/sessions-delete 6cf4aa57 --yes 按 id 前缀删
/sessions-delete all --stop --yes 连"正在运行"的会话也删(先停止其任务)
/sessions-delete all --purge --yes 永久删除(不进回收目录)
删除后文件在 $DSH_HOME/session-trash/<时间戳>/,想恢复就把 session-<id> 文件夹搬回 $DSH_HOME/sessions/<原分组>/。
agent 工具
| 工具 | 参数 |
|---|---|
session_archived_list |
无 |
session_delete |
sessionIds(必填)、purge(默认 false = 进回收目录)、stop(默认 false = 拒绝运行中的会话) |
安全设计
- 默认不真删 —— 移到
$DSH_HOME/session-trash/<时间戳>/,可手动恢复 - 必须显式确认 —— 不带
--yes只预览 - 拒绝删当前会话 —— 正在对话的这个会被跳过
- 运行中的会话默认拒绝 ——
--stop才先agent.cancel()+ 等静默(15 秒上限) - 删前先 flush + detach —— 把会话从内存表摘除,避免 dispose 阶段把日志目录重建回来
- 先删文件、后动记账 —— 文件确认删净才清记账,半删的会话不会掉进「未分组」
- 走活的 storageDomain 清账 —— 投影缓存行、工作区
sessionIds、归档集合三处一起改 - 陈旧登记 —— 归档表里有 id 但文件早没了的,只清理登记
实现
- 宿主插件:
ctx.commands.register()注册斜杠命令,ctx.get('tools').register()注册工具 - 只依赖宿主服务:
commands/tools/agents/sessions/storageDomain/workspaceRegistry - 入口
lib/index.js,挂载声明cordis.patch.yml
为什么不做侧栏按钮:DSH 客户端↔宿主是代码生成的 Typert RPC,第三方插件无法新增接口。斜杠命令 + agent 工具是插件可用的官方入口。
卸载
dsh plugin --profile <profile> remove dsh-session-tool
许可
MIT
致谢
- 删除链路的部分设计(先删文件后动记账、走 live storageDomain 清账、运行中会话处理)参考了 @pepsi-ai/dsh-plugin-session-delete。
- 图形界面与宿主通信的思路同样受其启发:第三方插件无法新增 Typert RPC namespace,因此用同源 HTTP 路由做宿主↔浏览器桥接。本项目改用官方插槽(
sidebar.workspaces.session.menu.item/.row.action)实现菜单项,未使用 DOM 注入。
No comments yet. Be the first to write one.