dsh-session-manager
dsh Session Manager(会话管理插件)
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 18, 2026
- Updated
- Aug 18, 2026
Introduction
dsh Session Manager(会话管理插件)
DeepSeek Harness 的部署级插件:在 Web 设置的「会话管理」页中,统一管理所有会话 —— 支持恢复归档、删除会话、按工作区分组、多选/全部批量操作。作为部署级插件常驻,进程重启后自动加载。
功能
- 恢复归档:把已归档会话移回侧边栏(通过平台
host/archived-sessions-changed帧实时同步所有浏览器)。 - 删除会话:移除工作区记账 + 归档隐藏 + 删除磁盘日志(冷会话立即删;运行中的会话隐藏后,等它停止自动删除)。
- 批量删除:多选删除、删除所选、删除全部已归档、全部删除。
- 批量恢复:恢复全部已归档。
- 按工作区分组 的清单(含未分组),每行可 归档 / 恢复 / 删除(删除需二次确认)。
- 状态持久化:已删/待删记录写入
.session-manager-state.json,插件/进程重启后不复活。
界面预览
「会话管理」设置页(按工作区分组、多选、批量操作):

目录结构
dsh-session-manager/
├── readme.md # 本文档
├── LICENSE
├── package.json # 项目根元信息(可选)
├── packages/
│ ├── session-manager/ # Host 服务 @deepseek-ai/dsh-session-manager
│ │ ├── src/{index.ts, types.ts}
│ │ ├── tsconfig.json / tsdown.config.ts
│ │ └── scripts/rewrite-remote-zod.mjs # 构建后处理(见下)
│ └── client-ui-session-manager/ # 浏览器设置页 @deepseek-ai/dsh-client-ui-session-manager
│ ├── src/{index.ts, client/index.ts}
│ └── tsconfig.json / tsdown.config.ts
└── dist/ # 构建产物(lib/,可被部署直接拷贝安装)
├── session-manager-lib/
└── client-ui-lib/
架构
- Host 侧:
SessionManagerService extends TypertRemoteService,通过@Remote暴露list / restore / restoreMany / archive / deleteSession / deleteSessions / deleteAllArchived。 直接操作 workspace 存储域(归档集合 + 工作区记账)、调用持久化层定位并删除会话日志、维护待删队列。 Remote 贡献随包的./typert由typert-loader自动注册。 - 客户端侧:注册
settings.section的「会话管理」页,通过ctx.remote.sessionManager.*调用 Host。 Remote namespace 由dsh-api-remotes统一挂载(平台标准路径)。
构建
前置:Node 18+、pnpm 9+;已在 dsh 仓库工具链内构建(typert 生成、client bundle 依赖其 tsdown 配置)。
# 在 dsh 仓库根目录(含本插件源码的 checkout)执行
pnpm install
pnpm build:lib:host # Host 构建 + typert(生成 typert.host.js / typert.remote-client.js)
# 然后对 session-manager 的产物执行一次远程层 zod 重写(让浏览器 bundle 内联 zod):
node packages/session-manager/scripts/rewrite-remote-zod.mjs
pnpm build:lib:client # 客户端 bundle
每次 Host 重建后都需重跑 rewrite-remote-zod.mjs(它把生成的 remote-client 由 import { z } from 'zod'
改写为 zod 具名导入,配合 tsdown 的 zod ESM alias,避免本仓库 rolldown 把 zod 留成外部 require("zod")
导致模块表缺失)。构建产物在 dist/(本项目已含一份当前构建结果)。
安装(拉取下来安装)
当前插件的 Host/Client 依赖 dsh 的运行时与构建环境,且 Remote 跨端挂载依赖平台共享包
dsh-api-remotes(子包尚未发布到 npm registry),因此不支持“从远端一条 dsh plugin add
命令直接装上并立即可用”。正确做法是:先把仓库拉取(clone)到本地,再从本地目录安装
(此路径已验证可用)。
1. 拉取代码
从 GitHub
git clone git@github.com:DM-Odyssey/dsh-session-manager.git
cd dsh-session-manager
2. 本地目录安装到 profile
在 clone 出的项目根目录(package.json 是一个带 dsh.bundle.patch 的 bundle 包)执行:
dsh plugin --profile web add "$PWD"
# 等价于:dsh plugin --profile web add /absolute/path/to/dsh-session-manager
dsh plugin ... add 会在 profile 里 pnpm add 这个 bundle 及其两个子包
(packages/session-manager、packages/client-ui-session-manager,以 file: 本地依赖解析),
并把识别为 bundle 的包自动加入 dsh.profile.bundles;启动时 bundle 自带的 cordis.patch.yml
作为一层补丁挂载 session-manager 与 client-ui-session-manager 两行。无需手工 patch/symlink。
3. 重启
npx @deepseek-ai/dsh web
重启后打开 设置 → 会话管理 即可使用。
备注:若子包后续发布到 npm/GitHub Packages,可把 bundle 的
dependencies从file:改为 registry 版本,并调整 Remote 挂载方(当前依赖dsh-api-remotes),届时才能真正“远程一下装”。 在此之前请使用“拉取下来安装”。
手工方式(备选,与该 bundle 等价)
若不便用 dsh plugin add,也可手工放置:把两个子包的 lib+package.json 拷到
~/.local/lib/node_modules/@deepseek-ai/dsh/node_modules/@deepseek-ai/<包名>/,写
~/.dsh/profiles/web/cordis.patch.yml(两行 insert,见下),并确保 profile 的
node_modules/@deepseek-ai/<包名> 是指向全局包的符号链接,重启。
回滚
dsh plugin --profile web remove @dm-odyssey/dsh-session-manager # 或 pnpm remove
# 或:编辑 ~/.dsh/profiles/web/package.json,把该 bundle 从 dsh.profile.bundles 移出并删除依赖
rm -f ~/.dsh/profiles/web/cordis.patch.yml
# 重启 dsh web
使用
- 在侧边栏(原生三点菜单)把不需要的会话「归档」;
- 打开 设置 → 会话管理;
- 单个:每行 归档 / 恢复 / 删除(删除需二次确认);
- 批量:全选、恢复全部已归档 (N)、删除全部已归档 (N)、删除所选 (N)、全部删除。
删除立即在所有页面隐藏会话;磁盘日志冷会话当场删除、运行中的在停止后(刷新页面或 60 秒扫描)自动清除。
数据与安全
- 删除 = 工作区记账移除 + 归档集合隐藏 + 日志目录删除;日志路径经严格校验(只允许删除以会话 id
命名的
session.jsonl[.zstd]所在目录)。 - 「已删除 / 待删」记录写入
<workspace>/.session-manager-state.json;删除该文件即重置记录。 - 归档集合里的孤立 id(对应日志已不存在的会话)会被当作清除项处理,不再反复出现。
回滚
rm ~/.dsh/profiles/web/cordis.patch.yml
rm -rf ~/.dsh/profiles/node_modules/@deepseek-ai/dsh-session-manager \
~/.dsh/profiles/node_modules/@deepseek-ai/dsh-client-ui-session-manager
rm -rf ~/.local/lib/node_modules/@deepseek-ai/dsh/node_modules/@deepseek-ai/dsh-session-manager \
~/.local/lib/node_modules/@deepseek-ai/dsh/node_modules/@deepseek-ai/dsh-client-ui-session-manager
# 重启 dsh web
许可
MIT。