- Accueil
- Plugins
- Sessions et messages
- dsh-session-cleaner
dsh-session-cleaner
jackxiao17/dsh-session-cleaner
Ajoute Supprimer au menu de session de la barre latérale DSH et déplace la session dans une corbeille. Le panneau permet recherche par titre/texte intégral, filtre d’espace de travail, tri, consultation des journaux, restauration et suppression définitive. La suppression détache aussi l’emplacement du workspace et efface épingle, archive et cache de projection, afin que la restauration retrouve la position d’origine. La suppression définitive retire également les planifications associées et le dossier de projet vide.
Installer
dsh plugin --profile web add github:jackxiao17/dsh-session-cleanerREADME
dsh-session-cleaner
简体中文 | English
把「DSH 会话清理」装进 DSH 桌面版:侧栏每个会话的 ··· 菜单里多一项红色的删除(排在"归档"下面),一键移入回收站;侧栏底部有会话回收站入口,支持搜索、恢复与彻底删除。
删除不只是搬走日志目录:会话在 DSH 里留下的每一处痕都会一并处理——工作区记账槽位、置顶、归档标记、投影缓存行(含宿主留下的 .bak 备份)。恢复时逐项还原,包括侧栏里的原位置。彻底删除时再清掉绑定该会话的定时任务,以及空掉的工程目录。
截图

会话 ··· 菜单里多出红色的删除(排在"归档"下面)。

会话回收站:标题/正文搜索、工作区筛选、排序、恢复与彻底删除。

查看对话记录:逐轮提问与助手回复,Markdown 渲染,超长回复中间省略。
以上图片由本仓库根目录的 screenshots.json 声明(插件市场详情页按它展示),路径相对该文件、指向仓库内的图片。
下载
到 Releases 页面 下载最新版压缩包并解压,得到 dsh-session-cleaner/ 文件夹;也可以 git clone 本仓库。
安装
- 把
dsh-session-cleaner/整个文件夹拷到~/.dsh/profiles/desktop/local/下(Windows 即C:\Users\你\.dsh\profiles\desktop\local\dsh-session-cleaner\) - 编辑
~/.dsh/profiles/desktop/package.json:dependencies里加一行:"dsh-session-cleaner": "file:./local/dsh-session-cleaner"dsh.profile.bundles数组里加一项:"dsh-session-cleaner"
- 在该目录跑一次 DSH 自带的 pnpm:
node "%DSH_HOME%\dsh-runtimes\dsh-primary-runtime\dependencies\pnpm\bin\pnpm.cjs" install -C %DSH_HOME%\profiles\desktop - 重启 DSH 生效;在 DSH 的插件管理页可见
用法
- 点会话
···→ 删除:直接移入回收站,顶部提示"✓ 会话已删除至回收站"(可恢复,所以无二次确认) - 对话中的会话也能删:会先结束当前回答(取消这一轮 + 拆掉 agent),再移入回收站
- 会话回收站(侧栏底部按钮):
- 搜索:标题实时过滤;勾选「搜正文」后按关键词搜提问与回复内容
- 工作区筛选、按删除时间/标题/大小/轮次排序(可倒序)
- 勾选后底部恢复所选 / 彻底删除所选(有确认),也可一键清空
- 查看对话记录:每条会话的"查看对话记录"打开逐轮提问与助手回复(Markdown 渲染,超长回复中间省略,正文关键词仍可搜到)
- 恢复:目录搬回原位、记账挂回原工作区并回到原来的槽位、投影缓存行原样还原、置顶与归档状态还原(删除前是归档的,恢复到归档列表;提示会说明去哪了)
- 回收站保留 30 天:启动时清一次,之后每 6 小时清一次(DSH 长期不重启也不会漏清);面板会显示下次自动清理的时刻
删除 / 恢复 / 彻底删除,各自动了什么
| 位置 | 移入回收站 | 恢复 | 彻底删除 |
|---|---|---|---|
<dshHome>/sessions/<项目段>/<会话id>/ | 整体 rename 到回收站(同盘瞬时,不复制) | 搬回原位 | 删除 |
工作区记账号位 workspace.json → 工作区的 sessionIds | 摘掉槽位(并记下后继会话作为锚点) | 挂回并插回原位置 | — |
全局归档集合 archivedSessionIds | 摘掉(并记下删除前是否归档) | 按原状态还原 | — |
全局置顶集合 pinnedSessionIds | 摘掉(并记下原次序) | 按原次序还原 | — |
投影缓存行 storages/session_projcache/sessions/<id>.json | 通过宿主存储域删除,快照留原文 | 原文写回(文件 + 宿主内存表) | 复查并清掉(含 <id>.json.bak.*) |
绑定该会话的定时任务(schedule 域) | 不动:快照里抄录一份 | 不用还原(从未被动过) | 清掉(进行中的 + 已结束的历史行) |
<dshHome>/sessions/<项目段>/ 工程目录 | — | 需要时重建 | 空了就删掉 |
已知边界
- DSH 的插件接口没有官方稳定性承诺,大版本升级后插件可能失灵——失灵表现为菜单项/按钮消失或操作报错,不会伤及会话数据
- 回收站会占磁盘空间(面板顶部显示总占用),靠 30 天保留期兜底
- 定时任务在会话进回收站期间不会被清掉:宿主对"会话已不存在"的到期任务只会记一条 warn,不会重建会话,也不会自动重试;要彻底清掉请用"彻底删除"。之所以不在"移入回收站"这一步删,是因为宿主的
schedule服务不支持原样重建任务(新建会换 id、清空发送历史),删了就回不来了,而移入回收站必须是可逆的 - 恢复不保证与删除前逐字节相同的地方:若删除前它处于归档状态,恢复后回到归档列表(不会跳进侧栏);若原锚点会话已被删除,恢复后停在侧栏顶部(面板会如实回报"位置未还原")
- 同 id 有两份日志目录时拒绝操作:这是宿主自己都拒绝解析的损坏状态,插件会列出来让你先手工处理,而不是删掉一份、留下另一份却报成功
- 崩溃安全:快照先写、文件后搬,之后再把快照升级为完成态;启动时做一次双向对账——"没搬成"的残留快照会回滚,回收站里缺快照的孤儿目录会被收编成"数据不完整"条目(可见、可彻底删除,但不能恢复,因为原路径已无从得知)
- 0.7.0 移除了两个没人调用的 HTTP 端点:
POST /delete(不进回收站的物理删除)与POST /status。现在删除只有一条链:移入回收站 → 彻底删除 - 只在本机桌面版(
dsh web的 web profile)上验证过;没在别的部署形态上测过
卸载 / 回滚
- 从
~/.dsh/profiles/desktop/package.json里删掉dsh-session-cleaner的 dependencies 行、bundles 行 - 在该目录跑
pnpm install(用 DSH 自带的:node "%DSH_HOME%\dsh-runtimes\dsh-primary-runtime\dependencies\pnpm\bin\pnpm.cjs" install -C %DSH_HOME%\profiles\desktop) - 重启 DSH。本地文件可整个删掉
~/.dsh/profiles/desktop/local/dsh-session-cleaner\
开发与同步(源码在别处迭代时看这节)
本仓库就是插件的开发源码。改完代码后,DSH 不会自动加载新版本,必须手动把整个插件文件夹覆盖拷贝到以下两处,再重启 DSH:
~/.dsh/profiles/desktop/local/dsh-session-cleaner\(安装源,Windows 即C:\Users\你\.dsh\profiles\desktop\local\下)~/.dsh/profiles/desktop/node_modules/dsh-session-cleaner\(DSH 实际加载的目录)
要点:
- 纯代码改动不需要重跑 pnpm install,覆盖文件 + 重启 DSH 即可。只有第一次安装、或改了 package.json 的依赖时才需要再跑一次:
node "%DSH_HOME%\dsh-runtimes\dsh-primary-runtime\dependencies\pnpm\bin\pnpm.cjs" install -C %DSH_HOME%\profiles\desktop - 为什么必须拷两处:这两个目录里的同名文件是硬链接关系(同一份磁盘数据),但如果拷贝方式是"先删旧文件再放新文件"(不少工具的安全保存就是这个行为),硬链接会被切断,结果 local 是新版、node_modules 还是旧版,DSH 加载的仍是旧代码。两处都覆盖就不会有这个问题。
- 迭代时顺手把版本号升一位,共两处:
package.json的version,以及lib/index.js里的buildId。插件启动时会在日志里打印dsh-session-cleaner v<版本号>,重启后一眼就能确认新版本真的生效了(2026-10 出过package.json已升、buildId忘升导致日志仍显示旧版号的问题,两处务必一起改)。 - 改动确认无误后提交推送到本仓库,保证 GitHub 上的代码和你本机跑的一致;发版时标签、Release 与 zip 包里的版本号也要跟着对齐。
一键发版脚本
scripts/release.ps1 是维护者工具(不参与插件运行,也不会被装进发行包——package.json 的 files 只列了 lib、cordis.patch.yml、README.md、README.en.md)。它按顺序做完这几件事:
- 校验
package.json#version与lib/index.js#buildId一致(不一致直接报错,防止再出现"日志显示旧版本号"); - 打包出
dsh-session-cleaner-<版本>.zip并打印 SHA256; - 覆盖同步到
~/.dsh/profiles/desktop/下的local\与node_modules\两处; git commit→ 打v<版本>标签 → 推送 main 与标签;- 创建 Release(标题统一为
dsh-session-cleaner v<版本>)并上传 zip。
# 先干跑看一遍将要做的事(不改任何东西)
pwsh -NoProfile -File scripts/release.ps1 -DryRun
# 正式发版
pwsh -NoProfile -File scripts/release.ps1
参数:-SkipGit、-SkipSync、-SkipRelease 可分别跳过某一步;-Proxy '' 关闭代理(默认走 http://127.0.0.1:7890);-Token 或环境变量 GH_TOKEN 指定令牌,都没有时脚本会尝试读取 Windows 凭据管理器里 git:https://github.com 的令牌(只放环境变量,不打印、不进命令行历史),仍取不到则跳过 Release 创建并提示手工上传。
改完代码先跑一遍验证台
scripts/verify.mjs 是维护者工具(不参与插件运行,也不会被装进发行包)。它用 mock 宿主 + 真实临时目录把关键路径真跑一遍:路径校验、移入回收站、恢复(含槽位/置顶/归档/缓存行还原)、彻底删除(含定时任务与空目录)、并发锁、重复目录拒绝、启动对账、保留期清理、真实 DSH 日志帧解析,以及客户端 bundle 的 slot 注册与双语语言包一致性。
node scripts\verify.mjs
全绿(末行 N 通过 / 0 失败)再发版。
更新记录
0.7.0(深度清理)
- 投影缓存行真的会删了:以前只有没人调用的
/delete端点会删它,界面上走得到的路径从不删;现在移入回收站时通过宿主存储域删除,并连带清掉宿主的<id>.json.bak.*备份 - 置顶不再变成悬空引用:删除时摘掉
pinnedSessionIds,恢复时按原次序还原 - 恢复回到侧栏原位置:记下后继会话作锚点,恢复时用
insertSessionBefore插回原位(attachSession只会前插) - 恢复会还原归档状态:删除前是归档的,恢复后回到归档列表,提示文案会说明
- 彻底删除会清掉绑定该会话的定时任务(进行中 + 已结束的历史行),并删掉空掉的工程目录
- 保留期由"只在启动时清"改为"启动 + 每 6 小时",面板显示下次清理时刻
- 崩溃安全与启动对账:快照先写后搬;启动时双向对账——回滚没搬成的假条目、收编缺快照的孤儿目录、清掉残留临时文件
- 同 id 有多份日志目录时拒绝操作并列出路径,而不是删一份、留一份却报成功
- 锁统一到按会话 id:恢复与彻底删除不再可能交错;批量操作先占批量位、再逐条占会话位
- 移除了无人调用的
POST /delete与POST /status两个端点 - 修正了源码头注释里"运行中的会话一律拒绝删除"的过期描述(实际行为是结束当前回答后删除)
License
Plugins associés
dsh-web-ui (dsh-chat-recovery)
zhu1090093659/dsh-web-ui
billion-context
ranxianglei/billion-context
dsh-synapse
liangmianya/dsh-synapse
dsh-chat-import
nwflower/dsh-chat-import