DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

xffwlkjgzs88 /

xffwlkjgzs88/dsh-session-delete

Verified

给 DSH 会话列表加一个能真删除的按钮:让宿主 registry 遗忘、清掉正文与投影缓存。零依赖小插件,附说明与免责声明。

★ 1 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHubProject homepage
READMESource: main@4c094093
dsh-session-delete

dsh-session-delete

给 DSH 的会话列表加一个能真删的按钮
不是归档,是删掉

Stars License Disclaimer QQ

English · 简体中文

作者接活:网站 / 小程序搭建部署 · 服务器 · 域名 · 支付接口对接

[!IMPORTANT] 装之前知道两件事:

  1. 会话行会多一个垃圾桶,点两次删除(这是主功能);
  2. 侧栏左下角的"新版本"按钮会被藏起来,改到「设置 → 通用」里。不想要:Console 执行 localStorage.setItem('dsh.session-delete.hideUpdateBadge', '0') 刷新即可。

只有桌面版、且宿主有 dshDesktop.updates 才会动;web 版不碰。

装

在 DSH 里新开一个会话,把下面这段发给它。版本号换成你自己的(设置或「关于」里能看到):

把 GitHub 上的 xffwlkjgzs88/dsh-session-delete 装到 DSH。我这边是 0.2.0-rc.2 桌面版 Windows。
如果插件跟我的版本对不上,你直接改它的代码适配,改完再装,最后打开 /session-delete/ping 确认。

最后一句是重点。作者很懒,不保证跟得上新版客户端;对不上就让 AI 现场改。改哪儿不用猜——打开 /session-delete/state,services 里哪个是 false,就是新版把那个名字改了。

不想麻烦 AI,自己改两处。桌面版是 ~/.dsh/profiles/desktop/package.json,web 版是 ~/.dsh/profiles/web/package.json:

{
  "dependencies": { "dsh-session-delete": "github:xffwlkjgzs88/dsh-session-delete" },
  "dsh": { "profile": { "bundles": ["…原有的…", "dsh-session-delete"] } }
}

同目录 npm install,重启。没装 Node 也行,零依赖:把仓库解压成 node_modules/dsh-session-delete 丢进去。

验证:

http://127.0.0.1:19387/session-delete/ping
{"ok":true,"home":"…","version":"0.3.6"}

插件完全开源免费,MIT,没有付费版、没有激活码、没有广告,仓库里所有代码你都能看。

起因

DSH 侧栏只有归档,没有删除。我那串归档列表越堆越长,全是不会再打开的东西,还占着硬盘。

最初我直接去 ~/.dsh/sessions/ 删目录。删完看着没了,过几分钟又冒出来,重启更是原样回来。

查了一晚上才明白:宿主的 WorkspaceRegistry 把整份侧栏状态放在内存里,你动磁盘它不知道。它下一次写盘,整份内存状态覆盖回去,被删的 sessionId 又回来了。备份里留着证据:

12:48:57  workspace.json: (空)                      插件删成功
12:49:14  workspace.json: 宿主写回,updatedAt 变了   宿主刷盘
12:49:20  workspace.json: d2f98c9f, 3caf4ef1        删掉的 id 又在了

所以顺序得反过来:先让宿主忘掉,再删文件,最后盯几秒看会不会被写回。

删一条会话时会发生什么

  1. 会话在跑就先停活,等 300ms 让最后一段写盘落完;
  2. 从 SessionStore detach,触发 session/disposed;
  3. 每个 workspace 实体 detachSession(id),顺手剔掉 archived / pinned 里的残留;
  4. 删 sessions/<bucket>/<id>/ 和投影缓存;
  5. emit('api-session/removed'),列表立刻掉行;
  6. 1.2 秒、4 秒各复核一次,被写回就再清一遍。

拿不到 workspaceRegistry 才退回改 workspace.json(先存 .bak)。服务在就绝不双写。

用法

鼠标移到会话行上,··· 右边出现垃圾桶。点第一次变红问「确认?」,3.5 秒内点第二次才真删。

弹窗里会显示这条会话占多大。正在运行的会话会额外警告"这一轮会被打断",确认后才动手。

界面改动(第二处)

除了删除按钮,插件还动了一个地方:

  • 隐藏侧栏左下角那个「新版本」按钮(类名以 _indicator 结尾);
  • 在「设置 → 通用 → 当前版本」下面补一行「版本更新」,状态和原生一致;
  • 更新逻辑没改,还是走 globalThis.dshDesktop.updates;
  • 只在桌面版且该桥存在时生效,web 版不碰。

关掉:

localStorage.setItem('dsh.session-delete.hideUpdateBadge', '0')

接口

四条路由,同源、无鉴权。

GET  /session-delete/ping              → {"ok":true,"home":"…","version":"0.3.5"}
GET  /session-delete/state             → 宿主认为有什么 vs 磁盘上有什么
GET  /session-delete/size?sessionId=…  → 这条会话占多少字节
POST /session-delete/delete            → {"sessionId":"…"} 或 {"sessionId":"…","force":true}

/delete 返回:200 删完(带 steps)、409 会话在跑要 force、202 已受理后台执行、400 id 不合法、405 方法不对。

steps 里失败会写成 fail: 原因,不假装成功。细节见 docs/api.md。

兼容性

只在 DSH 0.2.0-rc.2 桌面版(Windows 11)上真跑过。 当前仓库版本只做了静态验证(node --check + 4 条单测)。

没实测:web 版、0.1.x、macOS / Linux、以后的新版本。

换宿主版本时先看诊断,/session-delete/state 现在会直接列出拿到了哪些服务:

{ "services": { "webServer": true, "registry": true, "sessions": true } }

哪个是 false,就说明新版改了那个名字 —— 改 lib/index.js 里对应的 ctx.get('…') 即可,不用猜。

缺东西时的表现,都不会崩:

缺什么 表现
workspaceRegistry 退回改 workspace.json(带备份)
sessions 跳过 detach
webServer(headless / TUI) 宿主半边不加载
座位名变了 按钮不出现,不报错

常见问题

装了没反应? /session-delete/ping 打不开 = 没加载,查 bundles 和有没有重启;打得开但没按钮 = 座位名对不上,把 /state 发出来。

提示 npm 不是内部或外部命令? 没装 Node。下 ZIP 解压改名 dsh-session-delete,丢进 node_modules\,bundles 加一行。

改坏了 package.json? 同目录找 package.json.bak-* 改回去。

删错了能恢复吗? 不能。删前备份 ~/.dsh/sessions 和 storages\workspace.json。

能只删一部分消息吗? 不能,只能整条。

会不会误删正在用的这条? 会弹窗确认。删完页面重载到新会话。

删完真的释放磁盘了吗? 是,正文和投影缓存都删了。

内容会不会外传? 不会。没有外发请求,只读写本机 ~/.dsh。

影响 DSH 更新吗? 不影响,只是把入口换了位置。

别把端口开到公网是什么意思? 四条路由没密码,端口映射出去谁都能调删除。

Mac / Linux 呢? 逻辑跨平台,没实测。

卸载

删 bundles 里那行、删 dependencies 里那行、删 node_modules\dsh-session-delete,重启。

已知问题

  • 座位名写死:sidebar.workspaces.session.row.action、shell.overlay。宿主改名后按钮消失,改 lib/client.js 顶部常量。
  • 隐藏更新按钮靠 _indicator 类名后缀判断,宿主换类名会失效(不影响删除)。
  • 并发删同一个 id 没去重。
  • workspace.json 退路只删 id,不做结构迁移。

用户须知

删了不进回收站。 没有撤销,我也找不回来。

  • force 会打断那条会话正在跑的回合。
  • 用前备份 ~/.dsh/sessions 和 storages/workspace.json。
  • 四条路由无鉴权,别把 web 端口开到公网。
  • 不联网、不收集数据,只读写本机 ~/.dsh。
  • 数据丢失、工作中断、业务损失作者不赔,也没有响应时限。完整条款见 DISCLAIMER.md。

作者

小富富 · QQ 811588817

很懒。这个插件纯粹因为自己看着归档列表烦才写的,更新随缘,不保证跟得上新客户端——对不上就让 AI 改,改法见上面「装」。

接活:网站、小程序搭建部署,服务器、域名、支付接口对接,一条龙。加 QQ 直接说需求。

许可

MIT © 小富富

Star History
—/ 5

No ratings yet

Verified DSH bundle

Commit 4c094093a483

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout