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

会话删除 PanChengN/dsh-plugin-session-delete

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

从侧栏菜单彻底删除会话及其磁盘记录

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · other
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 39 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 16 处,展示前 10 条)
  • 读取本地文件
    index.js:47
    const text = zlib.zstdDecompressSync(readFileSync(file)).toString('utf8')
  • 读取本地文件
    index.js:55
    if (!existsSync(root)) return rows
  • 读取本地文件
    index.js:56
    for (const workspaceDir of readdirSync(root)) {
  • 读取本地文件
    index.js:60
    workspaceStat = statSync(workspacePath)
  • 读取本地文件
    index.js:65
    for (const name of readdirSync(workspacePath)) {
  • 读取本地文件
    index.js:69
    dirStat = statSync(dir)
  • 写入本地文件
    index.js:134
    writeFileSync(file, JSON.stringify(doc, null, 2))
  • 删除本地文件递归
    index.js:172
    rmSync(row.dir, { recursive: true, force: true })
  • 删除本地文件
    index.js:189
    rmSync(join(cacheRoot, `${name}.json`), { force: true })
  • 发起网络请求
    client.js:66
    const response = await fetch(ENDPOINT, {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 侧栏菜单删除会话
  • 彻底删除磁盘记录
  • 删除派生缓存与子会话

给 DeepSeek Harness 侧栏会话菜单加一行「删除会话」:真正从磁盘删除会话记录、派生缓存与子智能体会话(非官方插件)

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-session-delete 给 DeepSeek Harness 的 Web UI 侧栏会话右键菜单加一行 「删除会话」,并真正从磁盘上删除会话。 背景:DSH 0.1.7-rc.2 没有任何删除会话的功能。会话菜单只有 置顶 / 重命名 / 分叉 / 归档,主机端会话控制器也没有 delete RPC(dsh-session-persistence-jsonl 的文档原文:「不删除会话文件——日志在 root 下累积,直到外部移除;seam 无删除接口」)。 本 bundle 用官方 Slot 机制补上这一行,并把「外部移除」做成一个主机端点。 非官方社区插件,与 DeepSeek 官方无关。
展开完整文档(README 剩余 1 节)
dsh-plugin-session-delete

给 DeepSeek Harness 的 Web UI 侧栏会话右键菜单加一行 「删除会话」,并真正从磁盘上删除会话。

背景:DSH 0.1.7-rc.2 没有任何删除会话的功能。会话菜单只有 置顶 / 重命名 / 分叉 / 归档,主机端会话控制器也没有 delete RPC(dsh-session-persistence-jsonl 的文档原文:「不删除会话文件——日志在 root 下累积,直到外部移除;seam 无删除接口」)。
本 bundle 用官方 Slot 机制补上这一行,并把「外部移除」做成一个主机端点。

非官方社区插件,与 DeepSeek 官方无关。

组成

| 文件 | 作用 |
| package.json | bundle 清单:dsh.bundle.patch + dsh.client(客户端半) |
| cordis.patch.yml | 插入主机行 session-delete |
| index.js | 主机半:注册 POST /api/dsh-session-delete |
| client.js | 客户端半:向 sidebar.workspaces.session.menu.item 座位注册菜单行(order 500) |
| locale/{zh,en}.json | 插件卡片标题与描述 |
| icon.svg | 插件卡片图标 |

仓库根目录就是插件目录(package.json 在根上),clone 下来即可直接安装,无需构建步骤。

安装

安装方式有两种,差别很大:路径安装会把 profile 绑到那个目录上,Git 安装不会。

| 方式 | 在 Add plugin 里填 | 装完能不能删掉那个目录 | 适合 |
| A. Git 地址(推荐) | github:PanChengN/dsh-plugin-session-delete | ✅ 随便删,代码已经拷进 profile | 所有日常使用 |
| B. 本地路径 | /绝对路径/dsh-plugin-session-delete | ❌ 一删就悬空(见「卸载与换设备」) | 只在改插件源码时 |

方式 A:Git 地址安装(推荐)

侧栏 Plugins 页面 → Add plugin → 填:

github:PanChengN/dsh-plugin-session-delete

也可以填 https://github.com/PanChengN/dsh-plugin-session-delete。
想锁版本就加 #,例如 github:PanChengN/dsh-plugin-session-delete#v1.0.1。

点 Enable now,再重启 DeepSeek Harness(新 bundle 的浏览器模块需要一次进程重启才会进入模块表)。

这样装完,profile 的依赖记录是 github:PanChengN/dsh-plugin-session-delete,
pnpm 会从 codeload.github.com 拉 tarball 解到 /node_modules/.pnpm/ 下,
与任何本地目录无关:clone 出来的、下载下来的目录随时可以删。
升级同理:在 Plugins 页面按新 spec 重装(例如把 #v1.0.1 换成 #v1.0.2)。

方式 B:本地路径安装(只在开发插件时用)

git clone https://github.com/PanChengN/dsh-plugin-session-delete.git

然后在 Add plugin 里粘贴 clone 出来的目录的绝对路径。CLI 明确拒绝桌面 profile:

$ dsh plugin --profile desktop add
error: profile "desktop" is managed exclusively by the Electron application

这种安装会在 profile 里写成 link:,插件从此依赖那个目录:一删就悬空,启动会异常(症状与救援见下一节)。改了源码想立刻生效时用它,否则请用方式 A。

从方式 B 迁移到方式 A

1. 先在 Plugins 页面 Remove 掉路径安装的那份(目录已经删了就先跑一次下一节的救援脚本)
2. Add plugin 里填 github:PanChengN/dsh-plugin-session-delete → Enable now → 重启
3. 之后那个 clone 目录就可以随便删了

⚠️ 卸载与换设备(必读)

- 用方式 A(Git 地址)安装的:在 Plugins 页面 Remove 即可,没有本地目录需要照顾。
- 用方式 B(本地路径)安装的:规则是先在 GUI 里卸载,再删目录。path 安装会把绝对路径写进 profile,直接删目录会留下悬空引用。

正确顺序

1. 侧栏 Plugins 页面里把本插件 Disable / Remove(桌面版必须走 GUI;DSH 的 removeBundle 会停用 → 热重载 → pnpm remove,同步清理 profile 清单)
2. 再删掉 clone 出来的目录

目录已经被删掉了会怎样

症状:启动异常、插件清单里出现失败条目、界面提示「加载失败;点击重试」,宿主日志里是

dsh: cannot resolve profile bundle "@local/dsh-bundle-session-delete" from the dsh installation or
; run 'dsh plugin --profile install' if its dependency is not installed

原因:删目录只删掉了代码,profile 里留下的引用全部悬空。一共三处(外加一处无害的锁文件):

| 位置 | 内容 |
| $DSH_HOME/profiles//package.json | dependencies 的 link: 与 dsh.profile.bundles 里的条目 |
| $DSH_HOME/profiles//node_modules/@local/dsh-bundle-session-delete | 指向已删目录的符号链接 |
| $DSH_HOME/profiles//cordis.yml | Loader 真正启动的 leaf 配置里那一行 - id: session-delete |
| pnpm-lock.yaml / node_modules/.pnpm/lock.yaml | 只是记录,下次组合刷新会被重写(脚本不改它) |

补充机制:loadProfileDirectory() 对每个 bundle 是逐个 try/catch 的,解析失败的 bundle 会被跳过并记进
skippedBundles,不会让整个 profile 起不来;真正让界面异常的是上面那些残留引用。

救援:跑仓库自带脚本

git clone https://github.com/PanChengN/dsh-plugin-session-delete.git # 或直接用你手上那份
python3 dsh-plugin-session-delete/scripts/fix-stale-install.py # 先只检查
python3 dsh-plugin-session-delete/scripts/fix-stale-install.py --apply # 确认后执行

脚本会:删除悬空的 link: 依赖与对应的 dsh.profile.bundles 条目、删掉 profile 私有层的悬空符号链接、摘掉 cordis.yml 里的残留行,每个被改动的文件都先备份为 *.bak-(回滚就是覆盖回去)。
默认是 dry-run,加 --apply 才写入。$DSH_HOME 不是 ~/.dsh 时用 --dsh-home /path 指定。

profiles/node_modules/(共享挂载层)里的历史悬空链接脚本只统计、不删 —— 那层是 DSH 自己的挂载点,解析时按候选目录逐个探测 package.json,悬空项会被跳过,无害。

改完重启 DeepSeek Harness 即可;如仍报 pnpm 相关错误,删掉该 profile 的 node_modules/.pnpm/lock.yaml 再启动。

手工救援(不想跑脚本时)

关掉 App,然后:

1. 编辑 $DSH_HOME/profiles//package.json:从 dependencies 删掉 "@local/dsh-bundle-session-delete": "link:...",并从 dsh.profile.bundles 数组里删掉 "@local/dsh-bundle-session-delete"
2. 删掉 $DSH_HOME/profiles//node_modules/@local/dsh-bundle-session-delete(悬空符号链接)
3. 编辑 $DSH_HOME/profiles//cordis.yml,删掉结尾那两行:

- id: session-delete
name: '@local/dsh-bundle-session-delete'

4. 重新打开 DeepSeek Harness

两条禁令

- 别直接 rm -rf 一个已启用插件的目录(本插件、任何 path 安装的插件都一样)
- 别同时装两份:本插件的包名是 @local/dsh-bundle-session-delete,cordis 行 id 是 session-delete, HTTP 路由是 /api/dsh-session-delete。同一 profile 里装两份会撞上 ambiguous-install,即使装上也会因重复注册同一路由而让插件加载失败。要换成 GitHub 那份,就先在 GUI 里移除本地那份。

删除范围

一次删除会清掉四处,全部基于 $DSH_HOME(默认 ~/.dsh):

1. sessions/// —— 会话正文与写锁
2. storages/session_projcache/sessions/.json —— 派生缓存(标题等)
3. storages/workspace.json —— global.archivedSessionIds 与各工作区的 sessionIds 引用
4. 子智能体会话 —— 当 zlib.zstdDecompressSync 可用时,连带删除 header.parentSession 指向被删会话的会话;不可用时跳过并在响应里报告 zstd: false

会话 id 的两种落盘形式(session- 与裸 )都会识别。

接口

POST /api/dsh-session-delete
content-type: application/json

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

成功:

{
"ok": true,
"sessionId": "session-....",
"removedSessions": 1,
"removedChildren": 0,
"removedCaches": 1,
"workspace": { "archived": 0, "groups": 1 },
"emitted": 2,
"zstd": true
}

失败:400 missing-session-id / 400 invalid-json / 405 method-not-allowed / 500 。

删除后界面如何更新(不整页刷新)

删除成功后,主机半会向客户端发 api-session/removed(dsh-api-remotes 的转发事件之一),客户端 ClientSessions.handleSessionRemoved 收到后把该 id 从列表快照里移除;侧栏在按工作区拼行时对「没有 summary 的 id」直接 continue 跳过,所以那一行会立刻消失。

客户端半只在事件没生效时(400ms 后该 id 仍在快照里)才退一步调用一次
sessions.refresh() 重新拉取列表基线,任何情况下都不再 location.reload()。

主机内存里的工作区注册表仍保留着已删除 id 的成员关系,但因为它没有对应的 session summary,侧栏不会渲染;下次启动时 workspace.json 已经是干净的。

已知限制

- 菜单行的确认框用的是浏览器原生 confirm(),样式不是 DSH 风格;要换成 shell.overlay 自定义对话框是下一步。
- 没有阻止删除「当前正在进行的对话」——确认框里有提示,但没有硬性拦截。
- 主机内存中的工作区成员关系要等重启才彻底清掉(界面表现不受影响)。

许可

MIT © 2026 NIUpc
预览分享卡片长什么样 ↓PanChengN/dsh-plugin-session-delete
分享 · DeepSeek Harness Hub
PanChengN/dsh-plugin-session-delete

从侧栏菜单彻底删除会话及其磁盘记录

这是你的仓库?认领条目

回到顶部