在网页界面里删除、恢复和整理会话,并设置压缩阈值
30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add JeffKeeping/dsh-session-manager该包不可直接 npm 安装,改从 GitHub 源安装(原因见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 28 处,展示前 19 条)
- 执行外部命令来自配置/变量lib/index.js:52
const child = spawn(openFolderCommand(platform), [path], { - 读取本地文件lib/index.js:98
projects = readdirSync(root); - 读取本地文件lib/index.js:104
if (existsSync(candidate)) return candidate; - 读取本地文件lib/index.js:211
content = await readFile(path, "utf8"); - 写入本地文件lib/index.js:220
await writeFile(tmp, next, "utf8"); - 写入本地文件lib/index.js:221
await rename(tmp, path); - 读取本地文件lib/index.js:407
if (force && (originalPath === void 0 || !existsSync(originalPath))) originalPath = findSessionDirOnDisk(id) ?? originalPath; - 读取本地文件lib/index.js:455
if (!live && originalPath !== void 0 && existsSync(originalPath)) { - 写入本地文件lib/index.js:456
await mkdir(trashRoot(), { recursive: true }); - 删除本地文件lib/index.js:457
await rm(trashPath, { - 写入本地文件lib/index.js:461
await rename(originalPath, trashPath); - 删除本地文件lib/index.js:486
for (const entry of overflow) await rm(trashSessionDir(entry.sessionId), { - 读取本地文件lib/index.js:495
if (artifactMoved && originalPath !== void 0 && existsSync(trashPath) && !existsSync(originalPath)) try { - 写入本地文件lib/index.js:496
await mkdir(dirname(originalPath), { recursive: true }); - 写入本地文件lib/index.js:497
await rename(trashPath, originalPath); - 删除本地文件lib/index.js:569
await rm(from, { - 删除本地文件lib/index.js:626
await rm(trashSessionDir(id), { - 删除本地文件lib/index.js:630
if (entry.originalPath !== void 0) await rm(entry.originalPath, { - 删除本地文件lib/index.js:660
await rm(trashSessionDir(entry.sessionId), {
扫描于 2026/10/22(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cosmokit@deepseek-ai/schemastery@deepseek-ai/dsh-scope@deepseek-ai/dsh-settings@deepseek-ai/dsh-storage@deepseek-ai/dsh-storage-domain@deepseek-ai/dsh-home-paths@deepseek-ai/dsh-atomic-write@deepseek-ai/cordis-plugin-loader@deepseek-ai/cordis-plugin-include给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH 会话管理插件:删除(回收站恢复、彻底清除、一键清空)、强制删除异常会话、恢复归档会话、统计、继续/暂停、打开日志目录、未读标记、工作区分组与排序、上下文压缩阈值。
README
由 DeepSeek 最新模型翻译生成dsh-session-manager
| English
在 DeepSeek Harness Web 界面中全面管理会话:设置页与对话顶部均提供入口——删除(回收站可恢复、可彻底清除、可一键清空)、恢复已归档会话、近期活动统计、继续/暂停会话、打开日志目录、未读/已读标记、新聊天中继续(fork)、工作区分组与排序管理、上下文压缩阈值设置,不修改 DSH 核心代码。
本仓库基于 dream12347/dsh-session-manager(MIT)的 v0.2.3 构建产物,在其上发布 v0.4.1:DSH 原生风格确认弹窗、更宽的会话 ID 兼容、强制删除、一键清空回收站,并修复了重挂载时路由重复注册导致宿主启动失败的问题。功能列表与实现说明沿用上游。
上游项目由 dsh + Deepseek-V4-Flash0731 完成;本仓库为其衍生版本,遵循 MIT。
v0.4.1 相对上游的改动
| # | 改动 | 说明 |
| 1 | 原生确认弹窗 | 所有 window.confirm() / window.alert() 换成 @deepseek-ai/dsh-client-ui-primitives 的官方 Modal:遮罩模糊、Esc 关闭、焦点归还、危险动作使用 --dsw-alias-state-error-primary,会话 ID 以等宽字体展示。
展开完整文档(README 剩余 1 节)
dsh-session-manager
| English
在 DeepSeek Harness Web 界面中全面管理会话:设置页与对话顶部均提供入口——删除(回收站可恢复、可彻底清除、可一键清空)、恢复已归档会话、近期活动统计、继续/暂停会话、打开日志目录、未读/已读标记、新聊天中继续(fork)、工作区分组与排序管理、上下文压缩阈值设置,不修改 DSH 核心代码。
本仓库基于 dream12347/dsh-session-manager(MIT)的 v0.2.3 构建产物,在其上发布 v0.4.1:DSH 原生风格确认弹窗、更宽的会话 ID 兼容、强制删除、一键清空回收站,并修复了重挂载时路由重复注册导致宿主启动失败的问题。功能列表与实现说明沿用上游。
上游项目由 dsh + Deepseek-V4-Flash0731 完成;本仓库为其衍生版本,遵循 MIT。
v0.4.1 相对上游的改动
| # | 改动 | 说明 |
| 1 | 原生确认弹窗 | 所有 window.confirm() / window.alert() 换成 @deepseek-ai/dsh-client-ui-primitives 的官方 Modal:遮罩模糊、Esc 关闭、焦点归还、危险动作使用 --dsw-alias-state-error-primary,会话 ID 以等宽字体展示。彻底告别桌面端弹出的系统消息框 |
| 2 | 更宽的会话 ID 兼容 | 原来只接受 session-<hex>,遇到 od-<uuid> 一类由其它入口铸造的 ID 会直接返回 invalid-session-id,导致「删不掉」。现在接受任意可安全用作单层路径的 ID([A-Za-z0-9][A-Za-z0-9._-]{0,199},禁止 ..) |
| 3 | 强制删除 | 常规删除失败时,失败弹窗直接给出「强制删除」:跳过官方归档校验、按磁盘目录兜底定位会话目录,直接移入回收站(仍可恢复)。POST /dsh-session-manager/delete 接受 { sessionId, force: true };运行中的会话依旧拒绝 |
| 4 | 一键清空回收站 | 回收站新增「清空回收站」按钮,经 POST /dsh-session-manager/purge-all 一次性永久清除全部条目与其磁盘目录;部分条目删除失败时保留其记录以便重试,并回报 purged / failed / remaining |
| 5 | 路由注册崩溃修复 | webServer.register() 对重复 (kind, path) 是硬抛错。插件重挂载(配置重载 / 禁用启用 / 服务替换)会重复注册 9 条路由而旧注册未释放,异常沿 apply() 逃逸,宿主启动直接失败。现在改用进程级路由表:新挂载先接管(释放旧注册再注册),仍冲突只记日志;setup() 失败也被 apply() 兜住,插件不激活但宿主继续运行 |
| 6 | 删除入口迁移 | 移除了对话顶部的红色「删除本对话」按钮,改到侧边栏会话行「…」菜单(sidebar.workspaces.session.menu.item,order 500,danger 行),与置顶/重命名/分叉/归档/复制 ID 同处一个菜单,避免占据对话标题栏 |
功能
- 设置页新增独立的「会话管理」分栏(与 Notifications 同级的设置分区)
- 面板列出全部会话(标题 / 工作目录),底部折叠区单独展示已归档会话,支持一键恢复回到会话列表
- 回收站:删除的会话移入回收站(保留最近 10 条,超出自动清除最早一条),可恢复或彻底删除
- 统计:每个会话可在居中弹窗中查看完整近期活动统计(轮次 / 用户消息 / 助手消息 / 全部工具调用 / 活动窗口)
- 继续会话:一键打开会话并关闭面板;暂停:停止正在运行会话的当前回合
- 未读 / 已读:会话行标题旁显示状态点——手动未读为蓝色、官方等待输入为琥珀、官方完成提醒为绿色、运行中为转圈;点击官方状态点就地已读(不跳转),点击蓝色点清除未读,打开会话自动已读;官方侧边栏的对应会话行旁同步显示蓝色未读点
- 新聊天中继续:每个会话一键 fork 子会话(官方 sessions.fork)并打开
- 文件夹:在系统文件管理器中打开会话日志目录
- 删除会话(菜单入口):侧边栏会话行的「…」菜单里新增红色「删除本对话」项,位于「复制 Session ID」之后并单独成组;确认后移入回收站
- 对话管理 / 回收站:对话顶部入口,打开自绘右侧抽屉(图钉固定常驻、点击外部自动收起),行内「更多」悬浮菜单收纳统计 / 文件夹 / 新聊天中继续
- 工作区管理:会话按工作区分组展示,组内按最后使用时间排序(可切换最新/最旧);拖拽工作区标题即可调整顺序(插入 / 交换 / 拖到末尾);悬停标题出现置于顶部 / 重命名 / 删除按钮(删除按官方定义:仅移出列表,文件夹与会话记录保留,会话归入「未分组」)
- 上下文压缩阈值(通用设置):设置对话上下文用到模型窗口(100 万 token)的多少比例时自动压缩(17%–90%),每次压缩保留最近 16% 原文;对所有 Agent 预设的会话统一生效(保存即时 + 持久化 + 重启自动应用)
- 删除限制:仅禁止删除「正在思考」的会话;当前打开的会话(空闲)可删除
- 子代理(subagent)会话支持删除(非运行中):即使主会话已删除、子代理成为「孤儿」,也能在会话管理中直接清理
- 中英文界面自适应(跟随页面语言)
安装
从 Release(推荐)
dsh plugin --profile <profile> add https://github.com/JeffKeeping/dsh-session-manager/releases/latest/download/dsh-session-manager.tgz
也可以先下载 dsh-session-manager.tgz 再本地安装:
dsh plugin --profile <profile> add /absolute/path/to/dsh-session-manager.tgz
本地目录安装走 link 方式,装好后不要移动或删除该目录。
从 GitHub
dsh plugin --profile <profile> add 'github:JeffKeeping/dsh-session-manager#v0.4.1'
从本地目录
dsh plugin --profile web add /absolute/path/to/dsh-session-manager
从 tarball
pnpm pack
dsh plugin --profile web add /absolute/path/to/dsh-session-manager-0.2.2.tgz
安装完成后重启 dsh web(host 插件与客户端 bundle 需要重启才能加载)。
截图
1. 设置页 · 会话管理
设置页会话管理
- 左侧导航新增独立「会话管理」分栏(与 账号与余额 / 通用设置 同级)
- 会话按工作区分组(test1 / test / code),组标题带数量
- 每行左侧是标题与工作目录,右侧依次为 继续会话 / 新聊天中继续 / 统计 / 文件夹 / 删除;运行中的会话显示「运行中」并禁用「继续会话」
- 顶部:全选、已选计数、批量删除;右上角排序切换(最新在前)
- 底部折叠区:已归档会话 与 回收站(1/10),回收站下方是 清空回收站
2. 会话行「…」菜单
会话行菜单
侧边栏任意会话行悬停右侧的「…」,菜单自上而下为:置顶会话 / 重命名(Ctrl+Alt+G)/ 分叉会话(Ctrl+Alt+F)/ 归档会话(Ctrl+Shift+A)/ 复制 Session ID,最下方一条分隔线之后是本插件新增的红色危险项 删除本对话。
3. 会话管理抽屉
会话管理抽屉
从对话顶部 对话管理 打开的自绘右侧抽屉,数据与设置页同源:
- 每行:继续会话 / 更多 / 删除,「更多」收纳 统计、文件夹、新聊天中继续
- 运行中的会话标「运行中」,按钮置灰
- 底部:已归档会话 (10)、回收站 (1/10) 与 清空回收站
4. 通用设置 · 上下文压缩阈值
上下文压缩阈值
滑块 + 输入框设置 17%–90%,保存后立即生效,且对所有 Agent 预设的会话统一生效。
使用
设置页会话管理
1. 打开侧边栏底部 设置(齿轮图标)
2. 设置页面左侧导航出现独立的 会话管理 分栏,点击进入
3. 主列表为未归档会话;底部「已归档会话」折叠区可展开查看、恢复或删除归档会话
4. 删除会话 → 进入底部「回收站」折叠区(保留最近 10 条)
5. 回收站内可 恢复(回到会话列表)或 彻底删除(永久清除,不可恢复)
6. 每行操作:继续会话(打开并进入对话)、暂停(停止正在运行的回合)、统计(展开近期活动)、文件夹(打开日志目录)、删除
7. 工作区标题右侧(悬停显示):置于顶部(挪到最前)、重命名、删除(红色,二次确认)
8. 拖拽工作区标题可调整顺序:放到某个工作区上方/下方插入,放到标题上交换位置,拖到最下方即移到末尾
9. 排序按钮(最新在前 / 最旧在前)切换组内会话的排列顺序
通用设置:上下文压缩阈值
1. 打开 设置 → 通用设置(General)
2. 找到「上下文压缩阈值」:滑块 / 输入框设置 17%–90%
3. 保存后立即生效(含已打开的会话);配置对所有 Agent 预设统一生效,重启后依然有效
删除会话(会话行「…」菜单)
侧边栏任意会话行悬停出现「…」,菜单原有 置顶 / 重命名 / 分叉 / 归档 / 复制 Session ID,最下方新增一组红色 删除本对话:
1. 点击后弹出 DSH 原生确认框(显示会话标题与 Session ID)
2. 确认即移入回收站,可在设置页「会话管理 → 回收站」恢复或彻底删除
3. 若宿主返回错误(例如目录无法解析),弹窗直接提供 强制删除
会话标题旁的删除按钮不再出现在对话顶部;顶部仍保留 对话管理 与 回收站 两个入口。
未读 / 已读状态点
会话行标题旁的圆点表示四种状态:蓝色=手动标记未读、琥珀=官方等待输入、绿色=官方完成提醒、转圈=运行中。点击琥珀 / 绿色点就地标记已读(不跳转,仅清除官方提醒);点击蓝色点清除未读;点击空白位置标记未读;打开会话自动已读。官方侧边栏的会话行旁同步显示蓝色未读点(按标题文本匹配,重复标题会话会共享该点)。
强制删除(v0.3.0+)
当某个会话的 ID 不属于官方目录(例如由其它入口铸造的 od-<uuid>),或归档步骤异常时,常规删除会报错。
此时失败弹窗会显示会话 ID 与宿主返回的错误码,并提供 强制删除:跳过官方归档校验、按 ~/.dsh/sessions/<project>/<id> 扫描定位会话目录,再移入回收站(可以恢复);正在运行的会话依然拒绝。
清空回收站(v0.4.0+)
回收站展开后底部有 清空回收站 按钮:确认后一次性永久删除回收站中的全部会话(含 ~/.dsh/dsh-delete-session-trash/ 下的目录),不可恢复。个别条目删除失败时会保留其记录以便重试,弹窗会报告成功与失败数量。
工作原理
| 层 | 实现 |
| Host | src/index.ts 注册 9 条路由:POST /delete(归档 + 非 live 会话文件移入回收站 + 记录条目,支持 force)、POST /restore(文件移回 + 取消归档 + 删除条目)、POST /purge(清除单个回收站条目与文件)、POST /purge-all(清空回收站)、GET /trash(回收站列表)、POST /open-folder(打开日志目录)、POST /pause(暂停运行中会话)、GET\|POST /compaction-threshold(读写全局压缩阈值)、GET /stats(活动统计)。通过 ctx.sessionPersistence 定位会话、ctx.workspaceRegistry 归档/取消归档、ctx.storageDomain 持久化回收站条目、归档集合与阈值;ctx.agents 检测运行中的会话并拒绝删除 |
| Client | src/client/index.ts 通过官方 settings.section 插槽注册独立分栏,用 useSessions / useWorkspaces 标准数据源列出会话(含归档/回收站分组),删除/恢复/彻底删除调用 host 路由;抽屉通过 sessions.list(ObservableSnapshot)订阅实时列表;彻底删除的会话 id 记录在浏览器 localStorage,避免 live 会话删除后刷新「复活」 |
- 未读机制:手动未读集保存在浏览器 localStorage 的共享 key dsh.session-unread.v1({version:1, ids:[]} 格式,与其他会话管理插件互通);官方状态点(琥珀/绿色/转圈)由官方 SessionSummary 的 pendingInteraction / completed / running 字段驱动,点击就地已读通过清除官方提醒标记实现,无需打开会话;侧边栏的蓝色未读点由 MutationObserver 装饰官方树节点(官方行元素没有会话 id 属性,故按标题文本匹配)
- 压缩阈值全局生效:保存在存储域(dsh_delete_session 的 thresholdRatio);如果默认 Agent 预设是用户预设,则同时写入 agent-presets 服务解析出的 agent.cordis.yml,系统预设文件保持只读。host 在每个 agent/pre-step 钩子里把阈值写入所有预设的压缩引擎配置,因此对所有 Agent 预设的会话统一生效,重启后依然有效
- 删除时先走官方归档通道:侧边栏立即隐藏该会话
- 回收站条目持久化在 DSH 存储域(~/.dsh/storages/dsh_delete_session.json),文件在 ~/.dsh/dsh-delete-session-trash/
- 工作区记账(sessionIds 槽位)在下次启动时由 registry 重建索引自动对账,无需手动编辑文件
- 无系统提示词改动、无模型工具新增,对 token 与模型行为零影响
限制
- 不能删除正在运行的会话(按钮禁用并拒绝删除),多标签页场景请先在别处确认该会话已停止
- 子代理会话可删除(非运行中),包括主会话已删除的「孤儿子代理」——不会再有无法清理的残留会话
- live 会话(当前进程内打开的会话)删除后,其内存状态由 DSH 在重启时彻底清理
- 已彻底删除的会话 id 会保留在浏览器 localStorage(防止刷新后重新出现)与归档集合中(无害残留,不显示)
- 侧边栏未读点按标题文本匹配,存在重复标题的会话时两者会共享同一个点(会话管理抽屉内不受影响,按真实会话 id 精确标记)
兼容性
本版本在 DSH 0.2.1-rc.2(桌面端)验证;上游声明适配 0.1.1-rc.1 与 0.2.0-rc.2。
已在 0.2.1-rc.2 核对:ctx.sessionPersistence.locate() 仍存在;IconTrashOutline16 已移除,插件自动回退到 IconTrashOutlineRegular;Modal / Button / StateDot 均由 @deepseek-ai/dsh-client-ui-primitives@0.2.1-rc.2 导出。
DSH 版本升级后如插槽或服务 API 变化,需要同步适配。
开发
npm install --no-save tsdown # 仅构建需要,不写入 package.json
npx tsdown # 生成 lib/index.js 与 lib/client.js
node tests/route-guard.manual.mjs # 路由接管 / 重复挂载回归测试
lib/ 为提交的构建产物,修改源码后必须重新构建并提交 lib/。该工具链在改动前可逐字节复现上游产物。
许可
MIT,见 LICENSE。上游版权归 dream12347;本衍生版本同样以 MIT 发布。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
JeffKeeping/dsh-session-manager
在网页界面里删除、恢复和整理会话,并设置压缩阈值
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 19,725未汉化DSH
73.1
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,251已汉化DSH
72
多模型 AI 桌面工作台CherryHQ/cherry-studio
AI 生产力工作室,集智能聊天、自主智能体和 300+ 助手于一体,统一接入前沿大模型
★ 52,668已汉化DSH
71.6
图床管理工具Molunerfinn/PicGo
Modelflare:满血、稳定、绝不掺水。全球 SOTA 模型,成本更低。
★ 27,382已汉化DSH
71.3
AI 工具一键部署器edison7009/EchoBird
ChatGPT、Codex CLI、Claude Code 多账号切换 · 多模型智能路由与故障自动切换 · AI…
★ 3,398已汉化DSH
71.3