dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DSH 会话管理插件:删除(回收站恢复/彻底清除/一键清空)、强制删除异常会话、恢复归档会话、统计、继续/暂停、打开日志目录、未读标记、工作区分组与排序、上下文压缩阈值。DSH session manager: recoverable trash, empty trash, force delete, stats, continue/pause, log folder, workspace grouping, compaction threshold.
在 DeepSeek Harness Web 界面中全面管理会话:设置页与对话顶部均提供入口——删除(回收站可恢复、可彻底清除、可一键清空)、恢复已归档会话、近期活动统计、继续/暂停会话、打开日志目录、未读/已读标记、新聊天中继续(fork)、工作区分组与排序管理、上下文压缩阈值设置,不修改 DSH 核心代码。
本仓库基于 dream12347/dsh-session-manager(MIT)的 v0.2.3 构建产物, 在其上发布 v0.4.1:DSH 原生风格确认弹窗、更宽的会话 ID 兼容、强制删除、一键清空回收站, 并修复了重挂载时路由重复注册导致宿主启动失败的问题。功能列表与实现说明沿用上游。
上游项目由 dsh + Deepseek-V4-Flash0731 完成;本仓库为其衍生版本,遵循 MIT。
| # | 改动 | 说明 |
|---|---|---|
| 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 同处一个菜单,避免占据对话标题栏 |
sessions.fork)并打开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 方式,安装后不要移动或删除该目录。
dsh plugin --profile <profile> add 'github:JeffKeeping/dsh-session-manager#v0.4.1'
dsh plugin --profile web add /absolute/path/to/dsh-session-manager
pnpm pack
dsh plugin --profile web add /absolute/path/to/dsh-session-manager-0.2.2.tgz
安装完成后重启 dsh web(host 插件与客户端 bundle 需要重启加载)。


侧边栏任意会话行悬停右侧的「…」,菜单自上而下为:置顶会话 / 重命名(Ctrl+Alt+G)/ 分叉会话(Ctrl+Alt+F)/ 归档会话(Ctrl+Shift+A)/ 复制 Session ID,最下方一条分隔线之后是本插件新增的红色危险项 删除本对话。

从对话顶部 对话管理 打开的自绘右侧抽屉,数据与设置页同源:

滑块 + 输入框设置 17%–90%,保存后立即生效,且对所有 Agent 预设的会话统一生效。
侧边栏任意会话行悬停出现「…」,菜单原有 置顶 / 重命名 / 分叉 / 归档 / 复制 Session ID, 最下方新增一组红色 删除本对话:
会话标题旁的删除按钮不再出现在对话顶部;顶部仍保留 对话管理 与 回收站 两个入口。
会话行标题旁的圆点表示四种状态:蓝色=手动标记未读、琥珀=官方等待输入、绿色=官方完成提醒、转圈=运行中。点击琥珀 / 绿色点就地标记已读(不跳转,仅清除官方提醒);点击蓝色点清除未读;点击空白位置标记未读;打开会话自动已读。官方侧边栏的会话行旁同步显示蓝色未读点(按标题文本匹配,重复标题会话会共享该点)。
当某个会话的 ID 不属于官方目录(例如由其它入口铸造的 od-<uuid>),或归档步骤异常时,常规删除会报错。
此时失败弹窗会显示会话 ID 与宿主返回的错误码,并提供 强制删除:跳过官方归档校验、按
~/.dsh/sessions/<project>/<id> 扫描定位会话目录,再移入回收站(可以恢复);正在运行的会话依然拒绝。
回收站展开后底部有 清空回收站 按钮:确认后一次性永久删除回收站中的全部会话(含
~/.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 会话删除后刷新「复活」 |
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/storages/dsh_delete_session.json),文件在 ~/.dsh/dsh-delete-session-trash/sessionIds 槽位)在下次启动时由 registry 重建索引自动对账,无需手动编辑文件本版本在 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 发布。