daxianya/dsh-session-manager ↗★ 1

dsh-session-manager

会话管理:在侧边栏加一个面板,列出/批量删除 DSH 会话与工作区(硬删除,不留备份) 适合需要快速清理、批量管理会话且无需备份的桌面端用户。

패키지
dsh-session-manager
호환성
미검증
Cordis peer 범위
^4.0.1
버전
0.2.0
라이선스
MIT
최근 업데이트
2026. 10. 23.

같은 패키지 이름의 다른 저장소

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:daxianya/dsh-session-manager

dsh-session-manager

release license platform downloads

给 DeepSeek Harness 桌面版用的会话管理插件:在左侧导航栏加一条「会话管理」,集中查看、筛选、批量删除会话与工作区。

硬删除,不留备份。 删掉就是删掉。

主界面

装

一条命令,装完重启就出现在左侧,不需要任何手工配置:

dsh plugin --profile desktop add https://github.com/daxianya/dsh-session-manager/releases/latest/download/dsh-session-manager.tgz

然后 ⌘Q 退出再打开。

也可以用本地 tgz:

dsh plugin --profile desktop add ./dsh-session-manager-0.2.0.tgz

dsh plugin add 会自动装依赖、登记 dependencies、并把包写进 dsh.profile.bundles——手不用碰配置文件。

确认装好了:

dsh --profile desktop --dump-config | grep -A2 session-manager

卸载:

dsh plugin --profile desktop remove dsh-session-manager

能干什么

功能说明
会话列表标题、回合数、体积、最后活动、所属工作区
批量删除勾选后一次删掉,两步确认,删目录 + 清索引 + 清缓存
单条删除行尾垃圾桶图标,点两下确认
排序按时间 / 体积 / 回合 / 标题,可切升降序
只看无项目筛出工作区已被删掉的孤儿会话
空会话清理点了「新会话」但一句话没发的空壳,软件本身不显示,可在设置里清掉
失效记录清理名单上还留着、文件已经不在的残留条目
5 种布局表格 / 卡片 / 按项目分组 / 左右分栏 / 带体积条
外观浅色 / 深色 / 跟随系统,字号 3 档,只作用于本面板

安全设计

  • 不删当前正在对话的会话:服务端读会话状态,正在跑回合的直接拒绝,理由回传「正在运行回合」
  • 同源校验:非本机 Origin 的 POST 一律 403
  • id 白名单:只接受 session- 格式,../ 这类路径穿越直接判非法
  • 原子写:改 workspace.json 走临时文件 + rename,不会写出半个文件

界面

卡片视图

左右分栏

设置面板

空列表

想看五种布局的对比,用浏览器打开 design/preview.html。

结构

client.js         前端:面板 UI、5 种布局、设置、事件委托
lib/index.js      后端:4 个 HTTP 接口、会话扫描、删除、修复
cordis.patch.yml  告诉宿主「把我挂进去」
package.json      dsh.bundle / dsh.client 声明

接口

方法路径作用
GET/dsh-sm/sessions列出会话、工作区、孤儿、统计
POST/dsh-sm/delete批量删除 {ids: [...]}
POST/dsh-sm/repair清理失效记录 {dryRun?}
POST/dsh-sm/purge-blank清理空会话 {dryRun?}

侧边栏从哪来

插件自己注册,不依赖宿主预留位置:

ctx.slots.inject("sidebar.panellist", () =>
  ctx.slots.register(
    { name: "sidebar.panellist", id: PANEL_ID, order: 20, label: "会话管理" },
    PanelIcon));
ctx.slots.inject("main", () =>
  ctx.slots.register({ name: "main", key: PANEL_ID, inject: () => ({}) },
    SessionManagerPage));

order 控制排序,label 控制显示名。

已知限制

  • 删完请重启一次:宿主内存里还留着会话对象,它下次写 workspace.json 时可能把 id 写回去,产生「名单上有、磁盘上没有」的失效记录。设置面板里的「清理失效记录」能修,但要先 ⌘Q 退出再点,否则会被覆盖回去。
  • 只测过 macOS + DeepSeek Harness 桌面版。

License

MIT