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

会话删除 yhPrime/dsh-session-delete

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

在会话菜单中二次确认后删除会话并移入系统回收站

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · chat
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 24 天前
档位由哪些信号合成

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

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

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 7 处,展示前 7 条)
  • 读取本地文件
    lib/index.js:176
    projects = await readdir(sessionsRoot, { withFileTypes: true })
  • 读取本地文件
    lib/index.js:185
    const info = await stat(candidate)
  • 读取本地文件
    lib/index.js:209
    if (candidate !== null && existsSync(candidate)) return candidate
  • 读取本地文件
    lib/index.js:292
    const left = paths.filter((target) => existsSync(target))
  • 读取本地文件
    lib/index.js:347
    projectionCache: existsSync(join(home, 'storages', 'session_projcache', 'sessions', `${wanted}.json`)),
  • 读取本地文件
    lib/index.js:363
    const document = JSON.parse(await readFile(join(home, 'storages', 'workspace.json'), 'utf8'))
  • 发起网络请求
    lib/client.js:251
    var response = await fetch(api(path), init);
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

会话删除:DeepSeek Harness Web 插件——在会话头部添加红色垃圾桶按钮,二次确认后删除会话。

README

由 DeepSeek 最新模型翻译生成
会话删除(dsh-session-delete) 一个 DeepSeek Harness 插件:在侧栏会话行的「⋯」菜单里加一行 「删除会话…」。确认后: - 该会话的日志目录与投影缓存被移到操作系统自己的回收站(Windows 的「回收站」); - 它同时从工作区会话列表里摘掉,归档集合里的残留也一并清掉。 回收站就是你电脑上那个:还原用你熟悉的方式(资源管理器 → 回收站 → 还原)。本插件不在 DSH 里面另造回收站。 功能 - ✅ 「⋯」菜单里一行 role="menuitem" 的「删除会话…」,排在官方 pin(100) / rename(200) / fork(300) / archive(400) 之后(本插件 order: 500),左侧是官方垃圾桶图标 - ✅ 二次确认对话框挂在官方 shell.overlay 浮层(遮罩、Esc、焦点自己管,不随菜单卸载) - ✅ 中文/英文跟随界面语言(同一套字典,键集合经测试校验一致) - ✅ 不替换任何官方 UI:只用自己的包名命名空间 id 往官方槽位里加 - ✅ 动手前先做只读定位;定位不到就什么都不做 删除到底做了什么(顺序是重点) | 步 | 做什么 | 官方依据 | | 1 | 定位 ~/.dsh/sessions/<工作区>/<session-id> | 只读扫描,不拼用户输入 |
展开完整文档(README 剩余 1 节)
会话删除(dsh-session-delete)

一个 DeepSeek Harness 插件:在侧栏会话行的「⋯」菜单里加一行 「删除会话…」。确认后:

- 该会话的日志目录与投影缓存被移到操作系统自己的回收站(Windows 的「回收站」);
- 它同时从工作区会话列表里摘掉,归档集合里的残留也一并清掉。

回收站就是你电脑上那个:还原用你熟悉的方式(资源管理器 → 回收站 → 还原)。本插件不在 DSH 里面另造回收站。

功能

- ✅ 「⋯」菜单里一行 role="menuitem" 的「删除会话…」,排在官方 pin(100) / rename(200) / fork(300) / archive(400) 之后(本插件 order: 500),左侧是官方垃圾桶图标
- ✅ 二次确认对话框挂在官方 shell.overlay 浮层(遮罩、Esc、焦点自己管,不随菜单卸载)
- ✅ 中文/英文跟随界面语言(同一套字典,键集合经测试校验一致)
- ✅ 不替换任何官方 UI:只用自己的包名命名空间 id 往官方槽位里加
- ✅ 动手前先做只读定位;定位不到就什么都不做

删除到底做了什么(顺序是重点)

| 步 | 做什么 | 官方依据 |
| 1 | 定位 ~/.dsh/sessions/<工作区>/<session-id> | 只读扫描,不拼用户输入 |
| 2 | 停住该会话 | workspaceRegistry.archiveSession(id, { stopActivity: true }) —— 归档集合正是 agent/pre-step 门读的东西,这就是官方的「停」信号,避免日志被还在跑的 Agent 写 |
| 3 | 回收日志目录 + 投影缓存 | Microsoft.VisualBasic.FileIO.FileSystem … SendToRecycleBin |
| 4 | 摘掉该行 | Workspace.detachSession(id),随后 unarchiveSession(id) 清掉第 2 步留下的归档记录 |

全程在一次 HTTP 请求里完成(宿主半体拥有整条链)。

失败是回滚,不是半途状态。 第 3 步失败就什么都不摘、并把第 2 步的归档撤销,会话的可见性回到原样。没有「直接永久删除」的兜底——回收站拒绝时静默抹掉用户日志,不是这个插件该做的决定。

平台

| | 状态 |
| Windows | ✅ 支持。Microsoft.VisualBasic.FileIO.FileSystem(Windows PowerShell 5.1 与 7 都带)让 shell 回收而不是 unlink。PowerShell 走绝对路径 %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe——GUI 启动不继承 shell 的 PATH,所以不能假设 pwsh 在 PATH 上 |
| macOS / Linux | ⛔ 未实现。会明确回 501 且不做任何改动,而不是猜一种删除方式 |

已知边界

- 只有「清空回收站」不可逆 —— 那是 Windows 自己的行为,不是本插件的。
- 「幽灵行」:被删的会话若在本次运行里被加载过(新建或点开),它仍活在宿主的内存会话表里。官方没有把它移除的接口——ctx.sessions 只有 create / prepare / enter / announce / flush / get / list / fork;AgentHandle.dispose() 属于创建它的那一方(agent 工厂的复合拆除链),插件拿不到。于是那一行会留在侧栏(失去工作区归属后落到「未分组」),要等下次启动 DSH 才彻底消失。
- 实测:刷新页面清不掉它。 曾有一版把确认按钮绑成「确认并刷新界面」(location.reload()),验证结果是那一行依然在——因为尸体在宿主内存里,页面重取也拿得到;该绑定已移除,按钮回到单纯的「确认」。
- 成功的弹窗不区分这两种情形:结论框固定两行——「已删除:日志已移入系统回收站。」+「本会话将在重启 DSH 后消失。」这句话对两种情况都成立(本次运行没加载过的会话当场就没了,加载过的重启后也没了),所以没必要让用户分辨。宿主仍会在响应里回 wasLive,供诊断使用。
- 注意:字节此时已经在回收站里,那行只是一条指向空处的记录;没被本次运行加载过的会话删掉不会留行。
- 宿主若没有 workspaceRegistry(非 Web 组合),回收照做,但列表行可能要等到下次启动才消失;这一步会在返回结果里说明,不会假装成功。
- 归档(把行藏起来但保留日志)仍是官方 ⋯ 里那一行的职责,本插件不提供。

安装

官方插件管理器(本机验证过的方式)

用 Settings → Plugins 安装,或让插件管理器装本地目录。它会写成:

"dependencies": { "dsh-session-delete": "link:<本目录绝对路径>" }
并把 "dsh-session-delete" 追加进 profile 的 dsh.profile.bundles。装的是 link:(符号链接),所以本目录就是唯一真源。

手工部署

把本目录放进 profile(例如 ~/.dsh/profiles/desktop/),然后:

1. dependencies 加 "dsh-session-delete": "file:./dsh-session-delete"
2. dsh.profile.bundles 追加 "dsh-session-delete"
3. 在 profile 目录 pnpm install,然后重启 DSH

cordis.patch.yml 把插件行插进 profile 层;client 端由官方 dsh-client-modules 扫描 dsh.client 声明后自动注入浏览器。

卸载:Settings → Plugins 里卸载,或从 dependencies / dsh.profile.bundles 里删掉再 pnpm install。

改代码后什么时候生效

| 改哪半 | 生效方式 |
| lib/client.js(浏览器半体) | 宿主每次投递都从磁盘读 → 刷新页面即可 |
| lib/index.js(宿主半体) | 模块在挂载时导入一次,改文件不会重新导入 → 需要重启 DSH |

自测(不安装)

node tools/dry-run.mjs [--scratch <dir>] [--composition <module-list>] [--keep]

在系统临时目录里搭一个暂存配置档,跑 85 项检查,最后断言真实 Harness 家目录一字未动(包括逐个比对真实会话日志目录)。覆盖:安装形态、发布契约、dsh.client.inject ∩ 组合、classic-script 编译、客户端 apply() 与两处注册、菜单行有/无 sessionId 的渲染、官方 MenuItemButton 的 onSelect 契约、有序删除流程、以及宿主半体的定位/删除/回滚/隔离。

回收站在 dry run 里是可注入的 stand-in:它把字节搬走,而不是交给系统回收站,所以 dry run 绝不会往你的回收站放任何东西。真实回收站路径由一次单独的一次性目录探针验证(见提交历史)。

发布前注意事项

dsh.client.inject 是硬门禁

宿主会一直扣着客户端入口,直到清单里每一个 seam 都存在。列了不在组合里的名字 = 这个插件在该宿主上永远不会加载(市场为这条规则付过代价,issue #554)。

本包只列确实存在于组合里、且确实用到的三个包:

| seam | 用途 |
| @deepseek-ai/dsh-client-locale | ctx.locale |
| @deepseek-ai/dsh-client-ui-settings | ctx.slots(市场的映射里,提供 slot 服务的 seam) |
| @deepseek-ai/dsh-client-ui-workspace | 它声明了 sidebar.workspaces.session.menu.item 这个槽位 |

不要加 @deepseek-ai/dsh-client-runtime(市场已从自己的清单删掉;它属于宿主基础设施链)或 @deepseek-ai/dsh-client-ui-slots(被 runtime 内联的纯核心库,npm 清单里连 dsh 字段都没有,不是客户端模块)。

客户端 bundle 的文件头是发布契约

文件必须以单行 window.__ModuleLoader__.load({ id: "dsh-session-delete", factory: (require) => { 开头,且不能有 BOM(宿主会从文件头嗅探 loader id)。同时必须是 classic script(官方用 vm.Script 编译校验),所以 bundle 里不能出现 import/export。

刻意没有声明的东西

peerDependencies / engines.dsh 故意留空。 宿主会按 dsh peer range 决定是否跳过整个 bundle(只闸 @deepseek-ai/dsh 与 @deepseek-ai/dsh-*)。声明一个与被测宿主不匹配的区间,代价是插件完全不被加载——比不声明更糟。本机已验证的运行时是 0.2.0-rc.2,等确定要支持哪些版本后再补:

"peerDependencies": { "@deepseek-ai/dsh": "^<验证过的版本>" },
"engines": { "dsh": "^<同一个版本>" }

两者机制不同:engines.dsh 是市场安装时的前置校验,peerDependencies 是宿主启动时的跳过判定。

许可证

MIT
预览分享卡片长什么样 ↓yhPrime/dsh-session-delete
分享 · DeepSeek Harness Hub
yhPrime/dsh-session-delete

在会话菜单中二次确认后删除会话并移入系统回收站

回到顶部