中文EN

dsh-session-mng

session已测通过npmMIT

在设置里管理全部 DeepSeek Harness 会话:按工作区分组浏览活跃与已归档会话,为活跃或已归档会话按整段对话生成标题,归档/恢复,把冷会话移动到其他工作区,并在确认后彻底删除已归档会话(含其子代理会话)。

下载量 / Downloads
1,661
依赖体积 / node_modules
0.99 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-session-mng

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-session-mng

官网 / Website: <https://dsh.zlmix.com/session-mng/>

![npm package](https://www.npmjs.com/package/dsh-session-mng)

![DSH Web Plugin](https://github.com/deepseek-ai/deepseek-harness)

![License: MIT](LICENSE)

One Settings page for every DeepSeek Harness session — generate a title from the whole conversation, archive or restore, move a cold session to another workspace, and permanently delete archived sessions.

一个设置页管理全部 DSH 会话:按整段对话生成标题、归档/恢复、跨工作区移动、彻底删除已归档会话。Host + Web Client 双半插件,无运行时依赖,不注册模型可见工具,不注册标题 provider。

Quick start (EN) — Desktop app: install from the in-app Plugins page (the desktop profile is app-managed, so dsh plugin --profile desktop … refuses). CLI-managed profiles: dsh plugin --profile <profile> add dsh-session-mng. Open Settings → Session Manager. Nothing is written until you press a confirm button in a dialog.

功能

  • 统一会话总览:按工作区分组列出当前 profile 的全部会话(活跃 + 已归档)。显示标题、路径、会话 id、大小、最后活动时间、运行/已打开/已归档/已置顶/分支/子代理标记;支持搜索、工作区筛选、排序、刷新、批量选择。
  • 分支会话默认显示:从某条会话分出来的会话(fork)和主会话一样可见、可管理——有来源记录时缩进挂在父会话下方,父行显示「N 分支」,分支行标注「↳ 来自:父标题」,搜索父标题也能找到它。DSH 0.2.2 起普通 fork 不再记录来源,这类分支显示「分支」徽标 + 「来源未记录」,不缩进,但可以像独立会话一样单独移动。由委派产生的子代理会话仍默认隐藏(勾选「显示子代理会话」查看),总览行会提示「已隐藏 N 个子代理会话」。
  • 按工作区分页(Host 侧):首屏只取工作区概览(会话数/归档数/空会话数/大小占位),展开工作区才按 50 条一页向宿主取行,「加载更多」继续追加;会话数 >100 时默认折叠工作区;搜索自动展开命中工作区。过滤工具栏和批量条整体吸顶。
  • 万级会话可用:Host 新增零会话日志 IO 的 catalog(复用宿主的 header 索引与投影缓存),10000 条会话首屏 overview 约 10 ms / 约 1.3 KB,单页 50 行约 9 ms;GET /state 保留给 0.1.x 客户端与回退路径。
  • 选择跟随可见集:切换筛选/折叠/搜索/刷新后,隐藏会话自动取消选择;全选当前列表 只作用于当前筛选与已展开的工作区。
  • 空会话默认隐藏:侧栏本来就不显示的 blank 会话,会话管理默认也不显示;勾选「显示空会话」才出现。提供「清理空会话(N)」快速清理已归档空会话。
  • 删除范围模态确认:范围内容在弹窗内独立滚动,底部勾选与确认/取消按钮固定可见;支持遮罩点击/Esc 取消。
  • 生成标题:选中任意会话(包括已归档的冷会话),让模型总结整段对话,给出可编辑的标题提案;确认后才写入。活跃会话走官方 sessionTitle.rename,冷会话按官方 session/title 事件形状追加,不需要恢复会话。
  • 归档 / 恢复:调用官方 workspaceRegistry.archiveSession / unarchiveSession。运行中的会话先提示,用户二次确认后才停止并归档;恢复后回到原工作区原位置。
  • 跨工作区移动(整枝):把冷会话真正迁移到目标工作区——改写会话日志 header 的 cwd、把日志目录迁到目标项目目录、同步 workspace 账本。根会话的子代理会话会一起搬走(它们的 parentSession 血缘保持不变),普通分支(fork)是独立会话,留在原工作区。整枝先整体校验(任一会话已打开/运行中就整体拒绝)、逐个迁移、失败按逆序整体回滚。SessionId、归档状态、pin 状态不变,事件字节不变。
  • 彻底删除已归档会话:删除前先预览范围(根会话、子代理会话、目录、字节数);确认后把日志目录移出 store、清理归档集合与 workspace 账本,再删除。不可恢复。 子代理会话随父级联删除;普通分支会话不会(它们仍是独立会话,来源父会话删除后保留下来),如需一并删除请把分支也勾选进来。
  • 预览最近消息:不恢复会话即可看最近 10 条用户/助手消息。
  • 失效归档标记清理:归档集合里有、但磁盘上已无日志的 id,会以横幅提示并允许清理。
  • 工作区归属自检 + 一键归位:左侧栏只渲染工作区账本里的会话,所以「右边能看到、左边栏看不到」这种不同步,根因通常是会话的 cwd 属于某工作区但账本 sessionIds 里漏了它。会话管理页会检测这类会话:横幅提示 + 「一键归位」按钮(行上带「未归位」徽标,详情页也有同样按钮)。归位只写账本、不改会话日志,live/archived 都安全;若宿主自己的会话列表仍不返回它,会明确提示需要重启后再试。
  • 中英双语、浅色/深色主题跟随宿主。

安装

桌面版(DeepSeek Harness.app)

desktop profile 由应用独占,命令行不接管它。请在应用内 设置 → 插件(Plugins) 中搜索 dsh-session-mng 安装;安装后在 设置 → 会话管理 打开。

本地开发 / 未发 npm 时,在应用内插件管理器使用「从本地目录安装」,或在支持 plugin_manager 的会话里把本仓库目录作为 bundle 安装。

命令行管理的 profile(web / main / 自建)

# 从 npm 安装(发版后)
dsh plugin --profile <profile> add dsh-session-mng

# 从 GitHub 源码安装
dsh plugin --profile <profile> add github:ZilongYang/dsh-session-mng#main

# 本地开发:把本仓库直接链接进去
dsh plugin --profile <profile> add link:/绝对路径/dsh-session-mng

Host 半是进程内模块:装完如果看不到页面,重启一次 dsh/应用再刷新页面;Client 半刷新页面即可。

市场状态:awesome-dsh-plugin 收录 PR #9672 已于 2026-10-27 合并(check 与 Submission gate 均通过)。dshmarket 读取同一份目录,卡片版本随 npm 自动更新,当前显示 0.1.3。

使用

1. 打开 设置 → 会话管理。

2. 顶部 tab 切换 全部 / 活跃 / 已归档;用工作区下拉、搜索框、排序缩小范围。

3. 点任意会话进入详情:生成标题、打开、归档/恢复并打开、移动到其他工作区、彻底删除(仅已归档)。

4. 在列表里勾选多个会话可批量归档、恢复、移动、删除;批量删除也会先显示范围确认。

5. 所有写操作都要在界面里明确点击确认;标题提案本身不写任何数据。

它是怎么工作的

Settings page (client.js)
      │  GET  /session-mng/api/overview                 ← 首屏:只有计数,没有会话行
      │  GET  /session-mng/api/sessions?...             ← 每个展开的工作区一页(≤50 行)
      │  GET  /session-mng/api/{search,session,blanks,misplaced,sizes}
      │  GET  /session-mng/api/state                    ← 0.1.x 兼容 / 老 Host 回退
      │  POST /session-mng/api/{preview,title/propose,title/apply,archive,unarchive,delete/preview,delete,move,repair}
      ▼
Host route (lib/api.js) ──► service (lib/service.js)
      ├─ catalog      : workspaceRegistry.headers + sessionProjectionCache(零会话日志 IO;seam 缺失回退 buildState 慢路径)
      ├─ state        : buildState 慢路径 / sessionController + sessionQuery + workspaceRegistry + sessionPersistence
      ├─ title        : sessionQuery.readSurface → ctx.llm.stream → 确认后写 session/title 事件
      ├─ archive      : workspaceRegistry.archiveSession / unarchiveSession
      ├─ repair       : 工作区账本自检 + attachSession(纯账本写,不改会话字节;cwd 校验)
      ├─ move         : 日志 header cwd 重写 + 目录迁移 + workspace 缓存对账(失败全回滚)
      └─ delete       : 删除范围预览 → 目录移入临时区 → 清理账本 → 删除(失败回滚)
  • 首屏是概览、行是分页:overview 只聚合内存索引;sessions 每页最多 50 行,排序/分支嵌套在 Host 完成后再切片,id tie-break 保证翻页稳定。
  • catalog 不落盘、不缓存会话:行从宿主已有的 header 索引与投影缓存读取;归档/移动/删除/改标题后只失效大小快照与慢路径缓存,下一次请求自然重建。
  • 标题是日志事件:session/title 的 source 为 user,与官方重命名一致;已归档会话不需要恢复 Agent。
  • 工作区归属是派生的:由会话 header 的 cwd 决定。移动必须改写 header,只改账本无效。
  • 不碰事件正文:移动只重写日志第一个 frame(header),其余字节原样保留;移动后重新完整 replay 校验一次。
  • 事务式删除/移动:目录先移出 sessions root 到同文件系统的临时目录,失败可回滚;成功后才删除临时副本。
  • 零模型工具:不注册 agent tool、不注入系统提示词、不注册 title provider,正常对话的 token 开销为 0。

兼容性

项 · 说明

实测宿主 · DSH 0.2.2-rc.1(桌面 App,desktop profile,Web GUI);0.2.1-rc.5(全局 CLI)、0.2.1-rc.3、0.2.1-rc.2 也已验证

Node · >=20.3 可运行总览/标题/归档/删除;移动 需要 node:zlib 的 Zstandard 支持(Node >=22.15,当前 Desktop 运行时为 Node 24.21)

会话后端 · 移动/删除只支持本地 JSONL 后端(`sessionPer

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:10,最后更新 2026-11-05

链接

GitHub · Homepage · npm

同类插件