从侧栏彻底删除会话及其本地全部记录
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lingshidu/dsh-delete-session该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 18 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
发起外部网络请求
查看扫描证据(共 1 处,展示前 1 条)
- 发起网络请求client.js:214
fetch(ROUTE, {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH 0.2 会话删除插件:通过官方 slot API 在侧边栏会话行菜单里加上「删除会话」,背后由 Host 路由支撑,负责移除会话产物并维护工作区账本。
README
由 DeepSeek 最新模型翻译生成dsh-delete-session
DSH(DeepSeek Harness)0.2.x 的会话「永久删除」插件。
补上官方缺失的能力:在侧栏会话行上删除该会话的全部本地记录。
为什么重写而不是修复旧插件
社区插件 dsh-session-delete@0.1.0 是按 DSH 0.1.0-rc.6 写的,在 0.2.0-rc.2 上失效。它失效的方式是静默的 —— 不报错,菜单就是不出现。原因有两条,都源于它采用了 DOM 克隆 + React fiber 探测:
| 旧插件依赖 | 0.2.0-rc.2 实际 |
| 菜单 memoizedProps.items 数组 | 会话菜单改传 children: renderSlot(...),没有 items |
| 会话行 props 含 onArchive | SessionNodeItem({ node, currentId, now, onOpen, onRenameRequest, renderSlot, onReveal, drag, t }) —— onArchive/onFork 已移除(改由 slot 提供) |
本插件改为使用 DSH 0.2 官方开放的 slot,因此不依赖任何内部 props 或 DOM 结构:
展开完整文档(README 剩余 1 节)
dsh-delete-session
DSH(DeepSeek Harness)0.2.x 的会话「永久删除」插件。
补上官方缺失的能力:在侧栏会话行上删除该会话的全部本地记录。
为什么重写而不是修复旧插件
社区插件 dsh-session-delete@0.1.0 是按 DSH 0.1.0-rc.6 写的,在 0.2.0-rc.2 上失效。它失效的方式是静默的 —— 不报错,菜单就是不出现。原因有两条,都源于它采用了 DOM 克隆 + React fiber 探测:
| 旧插件依赖 | 0.2.0-rc.2 实际 |
| 菜单 memoizedProps.items 数组 | 会话菜单改传 children: renderSlot(...),没有 items |
| 会话行 props 含 onArchive | SessionNodeItem({ node, currentId, now, onOpen, onRenameRequest, renderSlot, onReveal, drag, t }) —— onArchive/onFork 已移除(改由 slot 提供) |
本插件改为使用 DSH 0.2 官方开放的 slot,因此不依赖任何内部 props 或 DOM 结构:
- sidebar.workspaces.session.menu.item —— 会话行 … 菜单项
- sidebar.workspaces.session.row.action —— 会话行悬停图标按钮
- shell.overlay —— 确认对话框
功能
| 入口 | 行为 |
| 会话行 … 菜单 → 删除会话 | 红色危险项,排在内置 Archive 之后另起一组 |
| 会话行悬停 → 垃圾桶图标 | 同一动作的快捷入口 |
| 确认对话框 | 明确「不可恢复」;删除中显示进度;失败显示具体原因;内存态未释放时给出重启提示 |
删除是永久的,不可恢复(没有回收站)。删除内容:
1. 会话产物目录 <DSH_HOME>/sessions/<项目编码>/<会话>/(含日志文件)
2. 工作区账目:从 archivedSessionIds 与归属工作区的 sessionIds 中摘除
3. 投影缓存 <DSH_HOME>/storages/session_projcache/sessions/<会话>.json(尽力而为)
正在运行的会话(有进行中的 turn)一律拒绝删除。
为什么不能简单地「live 就拒绝」
DSH 0.2 的侧栏用 session 作用域 slot 渲染会话行,官方文档明确写了这会「激活并保留列表中每个 Session」。也就是说 凡是出现在列表里的会话都是 live 的(ctx.sessions.get(id) 非 undefined)。若据此拒绝,所有会话都删不掉 —— 这正是同类旧插件的主要缺陷。
真正危险的是「正在运行」和「仍被某个查看器持有」,所以删除流程是:
1. 运行中检查:ctx.agents.get(id)?.status === 'running' → 拒绝
2. 定位并校验会话目录(下面的三重守卫)
3. 摘除工作区账目 —— 让侧栏行消失,客户端随之释放它的 session scope
4. 等待宿主卸载该会话(轮询 ctx.sessions.get(id) 变 undefined)
- 等到 → 内存态已释放,删文件安全
- 超时 → 仍然继续删除,但在响应里回报 resident,前端提示「重启 DSH 可确保彻底生效」
5. 删除会话产物目录(带重试,处理 Windows 瞬时文件占用);失败则回滚账目,不留下「已隐藏但未删除」
6. 清理投影缓存(尽力而为)
这样「删掉正在运行的会话」和「已删除却被内存态回写复活」都不会发生。
安全设计
宿主半在动文件之前执行三重路径守卫,全部通过才允许递归删除:
1. dirname(dirname(会话目录)) 的 basename 必须恰好是 sessions
2. 必须存在「项目目录 / 会话目录」两级且互不相同
3. 该目录内必须确实存在 *.jsonl(.zstd) 会话产物
写入路径用 node:fs 直接操作(不经 shell),因此没有命令注入面,也不需要引号转义。
安装
直接从 GitHub 安装
dsh plugin --profile <profile> add github:lingshidu/dsh-delete-session
或从本地目录(file: 协议;pnpm 会复制而非软链,改动源码后需重新执行安装)
dsh plugin --profile <profile> add /path/to/dsh-delete-session
安装后插件管理器会自动把它写入 profile 的 dsh.profile.bundles。
安装后需要重载窗口(Ctrl+R)或重启 DSH,客户端半才会被加载。
手动兜底:pnpm add /path/to/dsh-delete-session,然后在 profile 的 cordis.patch.yml 加入
- insert:
- id: dsh-delete-session
name: dsh-delete-session
卸载
dsh plugin --profile <profile> remove dsh-delete-session
验证
宿主半提供两个同源路由,可直接探测:
路由是否已加载(参数不合法应返回 400 bad-args)
curl -X POST http://127.0.0.1:19387/dsh-delete-session/delete \
-H 'content-type: application/json' -d '{}'
只做定位与校验,不删除任何东西
curl -X POST http://127.0.0.1:19387/dsh-delete-session/inspect \
-H 'content-type: application/json' -d '{"sessionId":"<会话id>"}'
inspect 返回 { ok, live, resolvable, dir },用于确认会话能否被正确定位。
实现要点
- Host 半(index.js):inject: ['webServer','sessionPersistence','workspaceRegistry','sessions']。
- sessionPersistence.list() 在 0.2.x 返回 { header, revision, sizeBytes }[](不是 header[]),本插件兼容两种形状。
- sessionPersistence.locate(header) 返回日志文件路径,其 dirname 才是会话目录。
- Client 半(client.js):Module Loader 包(window.__ModuleLoader__.load({ factory(require) }))。
- 组件身份模块级稳定;@deepseek-ai/dsh-client-ui-primitives 经 loader 的 require 解析(隐式 baseline external,不自带副本)。
- 菜单项与浮层对话框通过模块级 store + useSyncExternalStore 共享待确认请求。
已知限制
- 工作区级批量操作无法通过 slot 实现。0.2.0-rc.2 的工作区行菜单项是 ProjectRowItem 内写死的 [{id:'rename'},{id:'delete'}],没有开放 slot。若需要「删除整个工作区的全部会话」,只能再走 DOM 注入那条脆弱路线,本插件有意不做。
- 会话行菜单项只在会话行出现;归档行同样可用。
- 兼容性依据 DSH 0.2.0-rc.2 的实际接口编写。若宿主大版本升级后 slot 名称变化,ctx.slots.inject() 会等待声明,注册项只是不出现(不会报错)—— 可用窗口控制台的 slots.inject(...) 日志排查。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
lingshidu/dsh-delete-session
从侧栏彻底删除会话及其本地全部记录
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目