在会话菜单中二次确认后删除会话并移入系统回收站
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🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
yhPrime/dsh-session-delete
在会话菜单中二次确认后删除会话并移入系统回收站
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,462已汉化DSH
73
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,848已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,246已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
DS Bot 是一个基于 DeepSeek Harness简称 dsh的 bot 插件,插件将 dsh 改造为 bot…
★ 4,717已汉化DSH
71.1
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,711已汉化DSH
71.1