Skip to content

dsh-archived-delete

Verified

dsh-archived-delete · v1.0.0 · MIT · Web UI

Permanently delete a DeepSeek Harness conversation (archived ones included) from the session context menu, with verified removal.

Install

dsh plugin add dsh-archived-delete

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

Source

Published to npm without a public repository. Inspect the package contents before installing.

Tags

Creators

Readme

dsh-archived-delete

给 DeepSeek Harness 加一个永久删除对话的动作,已归档的对话也能删。

Adds a permanent Delete conversation action to the DSH session context menu, including archived conversations. Local-only: no network, no model calls, no tokens.

DSH 侧边栏原本只有"归档"——归档只是把对话藏起来,聊天记录仍然占着磁盘,内容也还在。这个插件补上真正删掉的那一步。

安装

方式一:插件管理器

设置 → 插件 → 安装,填包名:

dsh-archived-delete

方式二:命令行(在 profile 目录里)

cd ~/.dsh/profiles/desktop
pnpm add dsh-archived-delete

然后把包名加进 package.json 的 dsh.profile.bundles:

"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-archived-delete"]

装完需要重启 DSH——它是主进程插件,只在启动时加载一次。

使用

在侧边栏任意对话上右键 → 删除对话 → 确认框里点 永久删除。

删除是不可恢复的,确认框会明确说明这一点。

它会删掉什么

位置 内容
~/.dsh/sessions/<项目键>/<会话ID>/ 聊天记录本体(JSONL)
archivedSessionIds 归档集合里的登记
pinnedSessionIds 置顶集合里的登记
workspace sessionIds 工作区的记账
~/.dsh/storages/session_projcache/sessions/<id>.json 投影缓存

安全设计

这个插件做的是不可逆操作,所以每条危险路径都做了拦截:

  • 只认会话 ID 格式,且拒绝任何路径分隔符——不可能删到会话目录之外
  • 正在运行的对话不让删:先问所有活动提供者(回合、子代理、后台任务、定时任务)。探测本身失败也拒绝——宁可删不掉,也不误删
  • 路径越界检查:目标路径必须落在 sessions 根目录内(Windows 下大小写不敏感)
  • 删完回头确认:只有目录确实消失才返回成功,不会出现"报告已删、文件还在"
  • 读盘错误一律中止:不会把"读不到"降级成"只清索引、假装删了"
  • 并发保护:同一会话被两个窗口同时删,只执行一次
  • 已经开着的对话:先关闭以释放文件句柄再删;若之后删文件失败,错误信息会明确告诉你"该对话已从运行时关闭"
  • 记录已不存在:只清理索引,并在返回值里标记 alreadyAbsent,不会谎报删除成功

它不做什么

  • 不联网,不发任何请求,不调用模型,不消耗 token
  • 不进回收站——是真删,删了不能恢复
  • 不碰其它对话,不读对话内容

卸载

cd ~/.dsh/profiles/desktop
pnpm remove dsh-archived-delete

从 dsh.profile.bundles 里移除同名条目,重启 DSH。已经删掉的对话不会因为卸载而恢复。

兼容性

  • Node.js >= 22
  • 目标环境:DSH Web GUI
  • 主要在 Windows 上验证;macOS / Linux 走同一套路径逻辑

项目结构

lib/index.js       主进程插件:RPC 路由 + purgeSession 删除逻辑
client/client.js   浏览器插件:菜单项 + 确认弹窗
cordis.patch.yml   插件挂载声明
locale/*.json      插件列表里的标题与描述
icon.svg           图标

开发

# 改完之后验证语法与加载
node -e "import('./lib/index.js').then(m => console.log(Object.keys(m)))"

purgeSession(ctx, { sessionId }) 是导出的纯函数入口,可以用假的 ctx 单独测试各条分支。

发布(维护者)

pnpm pack                 # 先看包里到底装了什么
npm publish --access public

许可证

MIT