DSH Plugins Marketplace

DSH Plugins

Plugins

/

dsh-session-delete

E

dsh-session-delete

Discovered

A real "Delete session" for DeepSeek Harness. Not archive - erase. | 真正的「删除会话」,不是归档,是删干净。

Machine translated

dsh-session-delete

给 DeepSeek Harness 会话菜单加一行真正意义上的「删除会话」。

DSH license

DSH 自带的「归档」只是把会话藏起来:日志目录还在磁盘上、Workspace 的 sessionIds 还占着名额、置顶记录还留着、投影缓存里还存着标题。这个插件补上缺的那一环——停止 → 归档 → 解绑 → 取消置顶 → 删日志 → 删缓存 → 通知前端,整套做完,而且删不掉时会把前面的每一步回滚。


亮点

  • 两次点击确认,第一下进入确认态,第二下才执行;菜单一关就自动解除武装,不会出现「上次点了一半、这次一点就删」。
  • 完整删除,不是隐藏。归档留下的僵尸工作区记录、置顶记录、投影缓存一并清掉。
  • 失败可回滚。日志仍被写入方占用时,自动 attachSession 放回工作区、unarchiveSession 取消归档,行内提示可重试。
  • 视觉与原生一致。复用宿主 sidebar.workspaces.session.menu.item 插槽,几何参数、危险色 token、垃圾桶图标都对齐全套菜单。
  • 零构建、零运行时依赖。主机半部是原生 ESM(apply(ctx, config)),客户端半部由 window.__ModuleLoader__.load 注册进宿主模块图;合计 387 + 236 行,装完即用。
  • 中英双语,跟随界面语言。

效果

会话「⋯」菜单 → 追加一行红色「删除会话」:

会话 A                    ⋯
├─ 置顶
├─ 重命名
├─ 分叉
├─ 归档
├─ 复制 Session ID
└─ 🗑 删除会话        ← 本插件
状态显示
待命删除会话(常态红)
已武装再次点击删除
执行中正在删除会话…
成功会话已删除
失败删除失败,点击重试(悬停看原因)

安装

需要 DeepSeek Harness 0.2.1-rc.3 或更高(见兼容性),以及安装流程用到的 pnpm。本包没有发布到 npm。

不要用裸包名安装。 npm 上 dsh-session-delete 这个名字属于另一个作者的同类插件(vtxf/dsh-session-delete,0.1.0,2026-08 发布)。执行 dsh plugin add dsh-session-delete 会装到那一个,而不是这个。本仓库一律用完整 git URL + 固定 commit,这也是下面三种方式都这么写的原因。

方式一:Web 界面

设置 → 插件 → 安装,填入:

git+https://github.com/EndlessPoem/dsh-session-delete.git#v1.0.0

方式二:命令行

需要 dsh CLI 在 PATH 上(桌面版内置的那份不在 PATH 里,此时用方式一或方式三)。--profile 换成你自己的 profile 名,默认是 desktop:

dsh plugin --profile desktop add "git+https://github.com/EndlessPoem/dsh-session-delete.git#v1.0.0"

#v1.0.0 指向 release tag。想要严格可复现(tag 被移动也不受影响)就换成 40 位完整 commit SHA,形如 #c846167fd80b6ab02c14f9f6c0ba9d45a1b88a02——插件市场索引的 git 源就要求这种写法。不要直接用 #main:分支一推,所有人的依赖都会悄悄换版本。

方式三:手写 profile

编辑 ~/.dsh/profiles/<profile>/package.json:

{
  "dependencies": {
    "dsh-session-delete": "git+https://github.com/EndlessPoem/dsh-session-delete.git#v1.0.0"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app",
        "dsh-session-delete"
      ]
    }
  }
}

再在 profile 目录执行 pnpm install,重启 DSH。

装好后在设置 → 插件列表里确认 dsh-session-delete 处于已选中状态。


它到底删了什么

点下第二次时,Host 按顺序执行:

#动作用到的宿主能力
1停掉正在跑的工作agents.get(id).cancel({ kind: 'user' })
2归档,立刻从侧栏分组消失workspaceRegistry.archiveSession(id, { stopActivity: true })
3从每个 Workspace 的 sessionIds 摘除workspace.detachSession(id)
4从全局置顶集合移除workspaceRegistry.unpinSession(id)
5删除会话目录整棵树<root>/<slug>/<id>/,含 session.v4.jsonl.zstd
6删除投影缓存条目storages/session_projcache/sessions/<id>.json
7通知前端丢掉这一行api-session/removed

第 3 步是这个插件存在的理由。 归档不改变 sessionIds 成员关系,光删日志的话,工作区里会永远躺着一个点不开的死记录。

第 5 步失败会触发回滚:撤销第 3、4、2 步,行内报「删除失败,点击重试」。所以不会出现「行没了、数据还在」或者「数据没了、行还在」的半删状态。删除重试最多 8 次,间隔递增,专门对付 Windows 上文件句柄晚释放的情况。


存储根目录怎么找

按顺序取第一个命中项:

  1. 本插件配置 config.sessionsRoot
  2. 活动 configEditor 里 @deepseek-ai/dsh-session-persistence-jsonl 的 root
  3. 环境变量 DSH_SESSION_ROOT
  4. $DSH_HOME/sessions
  5. ~/.dsh/sessions

每个根目录下两种布局都支持:<root>/<项目目录>/<sessionId>/(默认),或根目录本身已按工作区隔离时的 <root>/<sessionId>/。

投影缓存目录同理,可用 config.projectionCacheDir 覆盖。自定义放在 cordis.patch.yml:

- id: dsh-session-delete
  config:
    sessionsRoot: 'D:\my-dsh\sessions'
    projectionCacheDir: 'D:\my-dsh\storages\session_projcache\sessions'

接口

POST /session-delete/delete

{ "sessionId": "session-..." }

仅接受同源请求(校验 Origin/Host,拒绝 sec-fetch-site: cross-site 与 Origin: null)。

状态code含义
200—{ ok: true, removed: true, dir, root, archived, detached, warning? }
400bad-requestsessionId 非法或请求体超过 16 KiB
403cross-origin非同源请求
404session/not-found所有候选根目录下都找不到该会话,响应里带 searched 列表
405method非 POST
409session/locked日志仍被占用,归档与工作区归属已回滚
500internal未预期异常

已知边界

Harness 目前没有公开的「销毁单个 Agent / Session」原语:已加载的会话归宿主根 fiber 所有,只能随进程退出释放。因此对当前进程已加载的会话:

  • 日志目录、投影缓存、工作区归属、置顶记录都已清除,重启后任何视图都查不到;
  • 内存中的 Agent 对象要到进程重启才消失,所以本次运行期间该 id 仍可能出现在「全部对话(显示已归档)」筛选下。

未加载过的会话(绝大多数历史会话)删完立刻从所有视图消失。

另外两点:

  • 删除不可恢复,没有回收站。需要留底的话先手动备份 <root> 下对应目录。
  • 删除过程中如果 DSH 被强杀,可能出现「第 2–4 步已生效、第 5 步未完成」的中间态;此时日志目录仍在,工作区归属已摘除,重新安装启动后该会话不会出现在列表里,但磁盘上有残留——按上文的根目录布局手删即可。

兼容性

项目要求
DeepSeek Harness>=0.2.1-rc.3 <0.3.0
Node.js>=20
平台Web / Desktop(需要 webServer 与 Web 前端)

DSH 对预发布版本的 SemVer 比较是严格的:0.2.1-rc.3 不满足 ^0.2.1,所以 engines.dsh 写成区间形式而不是 caret。


开发

git clone https://github.com/EndlessPoem/dsh-session-delete.git
cd dsh-session-delete

没有构建步骤。本地联调用 link: 依赖把它挂进 profile:

"dsh-session-delete": "link:/absolute/path/to/dsh-session-delete"

改了 client.js 需要在 DSH Web 页面刷新;改了 index.js(主机半部)需要重启 DSH。

目录结构与职责:

package.json         dsh.manifestVersion / dsh.bundle.patch / dsh.client 声明
cordis.patch.yml     Loader 行:把插件插进 profile 的树里
index.js             主机半部:POST 路由 + 七步删除 + 回滚
client.js            客户端半部:菜单行、确认态、错误就地展示、内嵌中英词典
locale/en.json       插件列表里显示的名称与简介(meta)
locale/zh.json       同上,中文
icon.svg             插件图标

文案有两份是有意的:locale/*.json 只承载插件列表里的 meta(标题、简介),菜单行的运行时文案(含「再次点击删除」等状态)内嵌在 client.js 里,避免前端每次切换语言都多一次资源请求。改文案时两处都要对。

客户端半部通过 window.__ModuleLoader__.load 注册,注入 slots 与 locale,槽位 id 是 sidebar.workspaces.session.menu.item,order: 500 让它排在内置行之后。data-session-delete 属性暴露当前状态(idle / confirm / busy / done / failed),方便写 UI 测试。

贡献时请保持两条底线:不新增运行时依赖,不为了删干净去碰宿主的私有状态——只用 apply(ctx, config) 拿到的公开服务。


许可

MIT

Comments

Loading…

Similar plugins

dsh-session-delete

by Linusteller

DeepSeek Harness 插件:侧栏会话菜单「删除会话」(永久删除,非归档)

Development & InfrastructureSessions & MessagesManifest valid

★ 2

MIT

JavaScript

Oct 22, 2026

dsh plugin --profile web add dsh-delete-sessions

by luckamuu

DeepSeek Harness 插件:提供删除已归档会话的入口(可以彻底删除不会在次出现)

Manifest valid

★ 0

MIT

JavaScript

Oct 8, 2026

dsh plugin --profile web add @local/archived-sessions

by xohmai

DeepSeek Harness 会话删除插件:设置页管理归档会话,真正删除磁盘日志(回收站可还原)+ 批量清理——官方归档只隐藏不删盘,这里补上。

Sessions & MessagesManifest valid

★ 42

↓ 280/wk

Apache-2.0

JavaScript

Oct 19, 2026

dsh plugin --profile web add dsh-session-delete

by lxchapu

DSH(DeepSeek Harness)插件:把会话从磁盘上彻底删除。任意会话的「…」菜单里可删单条,侧边栏切到「仅显示已归档」时可一键删除全部已归档会话;两者都先弹二次确认,正在运行的会话会被拒绝删除。

Development & InfrastructureManifest valid

★ 1

MIT

JavaScript

Oct 3, 2026

dsh plugin --profile web add @lxchapu/dsh-session-purge

by akira399

Permanently delete DSH sessions from the file system, right from the sidebar conversation menu (真正的物理删除,不是归档隐藏).

Development & InfrastructureTerminal & ClientsManifest valid

★ 3

↓ 320/wk

MIT

JavaScript

Aug 15, 2026

dsh plugin --profile web add dsh-session-delete

by NIGHT576

Real deletion for DSH Web conversations: a session-row menu action and a Workspaces-header batch dialog; removes each session's log directory and projection cache. 给 DSH Web 侧栏补上真正的会话删除:右键菜单删单条、区头批量删多

Manifest valid

★ 0

MIT

JavaScript

Sep 12, 2026

dsh plugin --profile web add dsh-delete-session