前言¶
在 DeepSeek Harness(DSH)里长期跑 Agent 时,会话会按工作区持久化到磁盘,侧边栏和注册表负责展示与归档。官方 GUI 能归档,但不能取消归档;没有标签;跨工作区移动会话往往还要重启进程才能对齐路径。若你希望模型直接整理会话,或让浏览器侧插件通过 HTTP 调用同一套逻辑,就需要把「列举、移动、删除、打标签、归档/解归档」收拢到可编程入口上。下面介绍社区插件 dsh-session-manager(维护者 minhaoli),它用 Agent 工具与 loopback REST API 两条轨道共享同一实现,补全上述能力。
这是什么¶
dsh-session-manager 是 DSH 生态中的工作流类插件(SkillHub 目录页)。一句话定位:为 DSH 提供会话 housekeeping 的 Agent 工具,以及在 webServer 可用时的本机 REST API——列举会话、跨工作区移动、带可选备份的删除、标签读写、归档与解归档。源码与说明见 GitHub:minhaoli/dsh-session-manager(MIT,当前包版本 0.1.0)。SkillHub 为独立社区目录,与 DeepSeek / 幻方无官方从属关系;安装前请自行审阅源码与许可证。插件在当前 DSH 进程权限下读写会话目录与注册表,务必确认你信任该仓库。
与官方界面的关系:README 写明 GUI 只覆盖部分能力;本插件把完整操作面放到模型可调用的六个工具,以及供例如 dsh-session-tree 消费的 HTTP 接口上。
环境与依赖¶
开发测试针对的 DSH 版本为 0.2.1-rc.2;更早版本未测试。依赖 @deepseek-ai/cordis ~4.0.5,运行时为 Node.js 22+(随 DSH 桌面运行时提供)。插件会读取 workspaceRegistry、sessionPersistence、storageDomain、webServer 等宿主服务;若某版 DSH 重命名或移除其中一项,对应功能会软失败(记 warning)而非拖垮宿主。
核心功能¶
Agent 工具(六个)¶
参数均为 JSON,返回 { ok: true, ... } 或 { ok: false, error }。
| 工具 | 作用 |
|---|---|
session_list |
枚举持久化会话,含工作区、归档状态、标签、标题;可按 workspaceId、path、archived、tag 过滤 |
session_move |
跨工作区移动:重写日志头 cwd、重命名磁盘目录、热更新注册表,GUI 无需重启即可反映 |
session_delete |
永久删除会话及日志目录;可传 backupDir 先复制目录 |
session_tag |
标签 set / add / remove / clear / drop / list,存于 ~/.dsh/session-tags.json |
session_archive |
从各分组界面隐藏会话,保留日志与工作区槽位,幂等 |
session_unarchive |
将归档会话恢复到原位置(GUI 未提供的方向) |
限制:当前正在运行的 live 会话会被 session_move 与 session_delete 拒绝。
Loopback REST API¶
仅在存在 webServer 服务时注册(web / desktop 模式)。每个 HTTP 处理最终走对应工具的 execute,与 Agent 面行为一致。
安全边界:请求须经 isLoopbackRequest(req) 校验,非本机对端返回 403 {"error":"forbidden: loopback-only"},无 token,靠传输层限制而非凭证。不要将 DSH Web 服务暴露到 localhost 之外;本插件挂载时尤其如此。
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/api/dsh-session-manager/sessions |
列举会话 |
GET |
/api/dsh-session-manager/tags |
标签相关查询 |
PUT |
/api/dsh-session-manager/tags |
body: { "sessionId": "...", "tags": ["a","b"] } |
DELETE |
/api/dsh-session-manager/tags |
body: { "tags": ["a"] },从所有会话移除这些标签 |
POST |
/api/dsh-session-manager/sessions/move |
sessionIds + targetWorkspaceId,或 targetPath 与可选 createIfMissing |
POST |
/api/dsh-session-manager/sessions/delete |
sessionIds,可选 backupDir |
POST |
/api/dsh-session-manager/sessions/archive |
sessionId |
POST |
/api/dsh-session-manager/sessions/unarchive |
sessionId |
POST |
/api/dsh-session-manager/projcache/warm |
诊断:标题预热报告 |
业务成功返回 200;工具 ok: false 或畸形 body 为 400;非 loopback 为 403;方法错误 405;未捕获异常 500。请求体上限 1 MB,须为 JSON 对象。
实现上值得知道的点¶
- 移动同步三件事:物理移动(zstd 头改写 + 目录重命名)、注册表重索引与
attachSession/detachSession、以及经 storage-domain 表更新 projection cache 的identity.cwd。任一步遗漏会导致 GUI 路径陈旧。 - 标题预热:冷启动后未打开过的会话在
session.list中可能没有标题;挂载约 800 ms 后插件会对缺标题行的持久化会话调用官方coldSnapshot写回 checkpoint。lib/index.js中WARM_TAIL_PROBE默认为false,避免重启时对大量会话读日志尾部拖慢侧边栏;若需启动时校验已有标题行,可改为true。 - 归档走注册表公开 API
archiveSession(),与 GUI 同源;除显式删除或解归档外不重写归档集合。 - 零第三方 import:
lib/index.js仅用node:内置模块,便于作为独立 file plugin 加载。
安装与启用¶
先做 profile 选择:实际启动用的 profile——桌面 Electron 为 desktop,CLI 可为 web / headless / node。desktop profile 在应用运行时会拒绝 dsh CLI 写入;应在应用内插件管理器安装,或先关闭应用再用 CLI。
推荐从 Git 安装:
# from git (recommended)
dsh plugin --profile <your-profile> add github:minhaoli/dsh-session-manager
# or from a local checkout
dsh plugin --profile <your-profile> add /absolute/path/to/dsh-session-manager
包声明了 dsh.bundle.patch,dsh plugin add 会把它追加到 dsh.profile.bundles,下次启动由 loader 挂载。若手工安装,需在 ~/.dsh/profiles/<profile>/cordis.patch.yml 自行插入:
- insert:
- id: session-manager
name: 'dsh-session-manager'
典型用法¶
通过 curl 操作标签(本机 Web 端口以你环境为准,示例为 3080)¶
先确认 DSH 已在 loopback 上提供 webServer,再调用:
curl -s http://127.0.0.1:3080/api/dsh-session-manager/tags
curl -s -X PUT http://127.0.0.1:3080/api/dsh-session-manager/tags \
-H 'content-type: application/json' \
-d '{"sessionId":"abc123","tags":["research","todo"]}'
列举会话、移动、删除、归档等对应上表 POST/GET 路径,body 字段与 Agent 工具参数一致。
在对话里让模型整理会话¶
在已挂载本插件的 DSH 配置下,模型可调用 session_list 按工作区或标签筛选,再用 session_move、session_tag、session_archive / session_unarchive 等完成整理;删除前可用 session_delete 的 backupDir 留副本。
与侧边栏 UI 配合¶
dsh-session-tree 通过本插件 REST API 渲染标签、拖拽移动与归档菜单。README 注明它会替换官方 ui-workspace bundle,两者同时安装时应禁用官方那一行。同作者还有 dsh-session-query-vector、dsh-session-search、dsh-ui-reload 等配套插件,可按需组合。
适用场景与注意¶
适合:需要批量或程序化会话治理的 DSH 用户——跨工作区搬迁历史对话、给会话打标签便于检索、解归档 GUI 撤不回的会话、在删除前备份日志目录;以及开发消费 loopback API 的浏览器插件。
注意:
- 插件权限即 DSH 进程权限,能读写的路径与会话数据范围与宿主相同。
- REST 仅 loopback,勿将 Web 服务暴露到公网。
- 依赖 DSH
0.2.1-rc.2及上述 Cordis 服务面;升级 DSH 后若能力异常,先查日志中的 warning。 - 社区目录与 GitHub 星标等元数据以站点为准(目录页当前星标为 0),不代表官方背书。
结尾¶
dsh-session-manager 把 DSH 会话管理的完整操作面统一到 Agent 工具与本机 REST API,弥补 GUI 在解归档、标签与热移动上的缺口,并作为 session-tree 等 UI 插件的后端。进一步了解与安装: