Skills Plugins MCP Prompt Model 导航 博客 资讯 我的中心
会话与消息 #deepseek-harness-plugin#dsh-plugin

dsh-session-delete

DSH 会话管理:列出全部会话并显示各自的磁盘占用,可按标题、会话 ID、类型标签、工作区或 agent preset 搜索,并按时间或工作区分组。支持单个或批量永久删除——同时清除日志文件、工作区账目与搜索索引,删除前两步确认、删除后复验;可按需显示子代理会话,侧边对话线程始终隐藏,本次启动中活动的会话会被拒绝直到重启。

bakacirno233 @bakacirno233 ⬇ 2 ★ 0 main

安装

dsh plugin --profile web add github:bakacirno233/dsh-session-delete
下载安装清单

需要可复现安装时,可在仓库后追加 #commit 固定提交。

DSH 会话管理:列出全部会话并显示各自的磁盘占用,可按标题、会话 ID、类型标签、工作区或 agent preset 搜索,并按时间或工作区分组。支持单个或批量永久删除——同时清除日志文件、工作区账目与搜索索引,删除前两步确认、删除后复验;可按需显示子代理会话,侧边对话线程始终隐藏,本次启动中活动的会话会被拒绝直到重启。

该插件未提供要点说明,请参考仓库 README。

deepseek-harness-plugindsh-plugin
  1. 安装并启动 DeepSeek Harness:npx @deepseek-ai/dsh web
  2. 在终端执行上面的安装命令(CLI 会解析插件并核验来源)
  3. 用 dsh plugins list 确认已安装,必要时重启 Harness 生效

插件以当前 dsh 进程的权限运行,安装时可能执行代码。请先通读仓库源码与许可证,确认无破坏性命令与越权访问;本站只做索引,不对第三方插件安全性作担保。

代码仓库github.com/bakacirno233/dsh-session-delete
许可证MIT
主要语言main
下载量2
GitHub 星标0
最近推送2026-09-16
收录日期2026-09-19
分类会话与消息

事实信息来自公开插件目录快照(2026-10-01),介绍文案由本站再加工。

以下为插件仓库 README 全文(原始内容,由公开目录抓取整理)。

# dsh-session-delete

DeepSeek Harness (DSH) 插件:在 **设置 → 会话管理** 中列出所有会话,并永久删除不需要的会话。

## 功能

### 删除语义

- 删除该会话的持久化日志(`~/.dsh/sessions/<项目>//`)
- 从所有工作区的会话账目中摘除(`workspaceRegistry.detachSession`)
- 搜索索引(SQLite FTS)在下一次查询时自动同步清理
- 两步确认防误删;删除前后都会校验,删除后验证持久化列表不再包含该会话
- 每次删除都写日志(成功 `info`、异常 `warn`);工作区账目摘除失败会作为 `warnings` 回传界面,而不是被静默吞掉

> **活动会话限制**:本次启动中打开过的会话(包括正在查看的当前会话)会被拒绝删除——活动 Agent 会重写日志,删除不彻底。**重启应用后**这些会话变成冷会话,即可正常删除。历史会话(此前运行留下的)随时可直接删除。

### 列表与批量操作

- **子代理会话**:DSH 的会话列表默认隐藏 `origin: "subagent"` 的会话。勾选 **「显示子代理会话 (N)」** 即可列出它们(N 是当前被隐藏的数量)。
- **侧边对话隔离**:better-sidebar 的 Side Chat 线程同样带 `subagent` 标记,但它们不是子代理。本插件按 `Side: ` 标题前缀识别,**永远不显示**——删掉它会让侧边栏那个对话标签页变成孤儿。
- **搜索**:匹配标题、会话 ID、类型标签(`子代理` / `subagent`、`主会话` / `main`)、工作区路径、以及 agent preset(`qq-chat`、`cordis` 等)。输入 `子代理`(或其前缀 `agent`)会**自动放开隐藏**,一次列出全部子代理会话。
- **分组**:下拉切换 **按时间**(今天 / 近 7 天 / 近 30 天 / 更早)或 **按工作区**(会话创建时的 `cwd`,按会话数量降序;无 cwd 的归入「未知工作区」)。
- **批量选中**:整组勾选 / 全选 / 单行勾选三级。选中范围严格跟随**屏幕上可见**的条目——被搜索词或隐藏开关过滤掉的会话不会混进批量删除。分组标题右侧显示该组数量与合计占用。
- **批量删除**:逐个串行请求并显示进度(`删除中 12/357`),单条失败只计入失败数、不中断整批,结束后汇总成功与部分失败。
- **占用大小**:每行显示该会话日志文件的体积,便于判断先清理哪个。

### 安全设计

- **删目录有守卫**:递归删除会话目录前校验「目录名 == 会话 id」(DSH 一直如此命名)。一旦路径形态变化导致不匹配,就只删日志文件并记一条 `warn`,绝不盲目 `rm -r`——那可能带走整个工作区分组。
- **定位失败不再假装成功**:`sessionPersistence.locate()` 抛错时返回失败,而不是当成「没有产物」。
- **状态未知即禁用**:host 列表接口不可用时,界面显示错误提示并**禁用所有删除按钮**,不会把「拿不到活动状态」当成「全都是冷会话」。
- **请求有超时**:前端请求 20 秒超时(`AbortController`),host 无响应不会把界面永久锁死。

## 兼容性

| 宿主 | 状态 |
|---|---|
| DSH Desktop 2.0.10 / 内核 `0.1.5-rc.2` | ✅ 已验证(`sessionPersistence.list()` 返回 snapshot,本插件按 `snapshot.header` 读取) |
| DSH Desktop 2.0.9 / 内核 `0.1.5-rc.1` | ⚠️ 未验证。若该版本的 `list()` 返回的是裸 header 而非 snapshot,列表会取不到 id |

> 这条分界线来自 2.0.10 的服务语义变化:`sessionPersistence` 改为按 `SessionHandle`(`create`/`open`)寻址,`list()` 返回 `{ header, sizeBytes, revision }` 快照。若你的 DSH 更老,请先确认 `list()` 的返回结构再装。

## 安装

在目标 profile 的 `package.json`(例如 `~/.dsh/profiles/desktop/package.json`)中加入依赖与 bundle:

```json
{
  "dependencies": {
    "dsh-session-delete": "github:<你的用户名>/dsh-session-delete"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app",
        "…其他插件…",
        "dsh-session-delete"
      ]
    }
  }
}
```

然后在 profile 目录执行 `pnpm install`,重启 DSH 应用。

使用:**设置(齿轮)→ 会话管理**。

## 本地开发(file: 依赖)

```json
"dependencies": {
  "dsh-session-delete": "file:D:/workspace/repos/dsh-session-delete"
}
```

`pnpm install` 后改 `lib/` 里的代码,重启应用即可生效。

> 注意:`file:` 依赖在 profile 的 `node_modules` 下是**副本**而不是符号链接。改完仓库代码后需要重新 `pnpm install`(或手动把 `lib/*.js` 复制过去),否则运行的仍是旧代码。

## 结构

- `lib/index.js` — Host 半部:在本地 `webServer` 注册两个路由
  - `POST /api/session-delete/list` → `{ sessions: [{ sessionId, live, running, sizeBytes?, agentPreset?, cwd? }] }`
  - `POST /api/session-delete/delete` → `{ ok, code?, message?, warnings? }`
  - 文件删除直接使用 `node:fs/promises`(`rm`),无需子进程
  - 列表结果带 5 秒缓存,避免反复刷新时重复扫描全部会话;删除成功后立即失效
- `lib/client.js` — 浏览器半部:`settings.section` 的「会话管理」页,通过 `fetch` 调用宿主路由
- `cordis.patch.yml` — 把宿主插件行插入组合(宿主半部)
- `package.json` 的 `dsh.client` 声明让 Web 端自动发现 `lib/client.js`

## 更新记录

### 2026-09-14 — 兼容 DSH 2.0.10(内核 0.1.5-rc.2)

**兼容**

- **DSH 2.0.10** 改动了 `sessionPersistence.list()` 的返回结构:从 header 数组变为 **snapshot 对象数组**(`{ header, sizeBytes, revision }`)。直读 snapshot 的 `id` 会拿到 `undefined`。现在改走 `snapshot.header` 取出 id/cwd/agentPreset,`sizeBytes` 则直接取 snapshot 自带的(后端已经 `stat` 好了,删掉了独立的 `sizeOf` 函数)。

**修复**

- 递归删除会话目录缺少守卫:现在要求目录名等于会话 id,否则只删日志文件并记录警告
- `sessionPersistence.locate()` 失败不再被当作「没有产物」而静默返回成功
- 工作区账目摘除(`detachSession`)失败不再被吞掉,改为回传 `warnings` 并写日志
- host 状态探测失败时,不再把全部会话渲染成可删除

**新增**

- 「显示子代理会话 (N)」开关;Side Chat 线程始终隐藏
- 批量选中(整组 / 全选 / 单行)与批量删除,带实时进度与失败计数
- 搜索:标题、会话 ID、类型标签、工作区路径、agent preset
- 分组:按时间或按工作区,均支持整组选中并显示组合计
- 列表显示会话占用大小;host 列表接口新增 `sizeBytes` / `agentPreset` / `cwd`
- 删除操作写日志(成功 `info` / 异常 `warn`)

**改进**

- 前端请求加 20 秒超时,避免 host 无响应时界面锁死
- host 列表接口加 5 秒缓存,删除后立即失效

## License

[MIT](./LICENSE)

数据来源:公开的 DeepSeek Harness 插件目录与各插件 GitHub 仓库。本站为独立第三方目录,与 DeepSeek、幻方(High-Flyer)及插件作者均无隶属或背书关系。

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。