列出、移动、打标签、归档并备份删除会话
29.2/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/minhaoli/dsh-session-manager.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 13 处,展示前 13 条)
- 读取本地文件lib/index.js:89
const buf = readFileSync(logPath); - 写入本地文件lib/index.js:98
writeFileSync(logPath, Buffer.concat([newFrame, buf.subarray(e0)])); - 读取本地文件lib/index.js:110
return readdirSync(dir).filter((n) => /^session(?:\.v\d+)?\.jsonl\.zstd$/.test(n)); - 读取本地文件lib/index.js:134
const buf = readFileSync(logPath); - 读取本地文件lib/index.js:204
const data = JSON.parse(readFileSync(tagFilePath(), "utf8")); - 写入本地文件lib/index.js:214
writeFileSync(tmp, JSON.stringify({ version: 1, tags }, null, 2) + "\n", "utf8"); - 写入本地文件lib/index.js:215
renameSync(tmp, file); - 读取本地文件lib/index.js:630
if (existsSync(newDir)) throw new Error(`target dir already exists: ${newDir}`); - 写入本地文件lib/index.js:636
mkdirSync(projectDir(root, targetCwd), { recursive: true }); - 写入本地文件lib/index.js:637
renameSync(oldDir, newDir); - 写入本地文件lib/index.js:700
if (backupDir !== undefined) mkdirSync(backupDir, { recursive: true }); - 读取本地文件lib/index.js:707
if (!existsSync(dir)) throw new Error(`session dir missing: ${dir}`); - 删除本地文件递归lib/index.js:720
rmSync(dir, { recursive: true, force: true });
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
智能体工具加一个回环 REST API,用来打理 DSH 会话:列出、跨工作区移动、带备份删除、打标签、归档和取消归档。
README
由 DeepSeek 最新模型翻译生成dsh-session-manager
给 DSH 会话做日常维护的 agent 工具 + 本机回环 REST API —— 列出、跨工作区移动、带备份删除、打标签、归档与反归档。
DSH 自带的 GUI 只覆盖了其中一部分(能归档,但没有反归档;没有标签;跨工作区移动要重启)。这个插件把整套能力放到两条共用同一份实现的通道上:
- Agent 工具 —— 模型可以直接调的六个工具。
- 本机回环 REST API —— 同样的六个操作走 HTTP,浏览器端插件不必再走 IPC 桥。dsh-session-tree 就靠它渲染侧栏的标签、拖拽移动和归档菜单。
适用版本
| DSH | 0.2.1-rc.2(开发与验证所用版本) |
| @deepseek-ai/cordis | ~4.0.5 |
| 运行时 | Node.js 22+(DSH 桌面运行时自带) |
更早的 DSH 版本未验证。插件读取 workspaceRegistry、sessionPersistence、storageDomain、webServer 四个服务;如果某个版本改名或删掉了其中之一,对应功能会 fail-soft(打一条 warning)而不是把宿主拖崩。
展开完整文档(README 剩余 1 节)
dsh-session-manager
给 DSH 会话做日常维护的 agent 工具 + 本机回环 REST API —— 列出、跨工作区移动、带备份删除、打标签、归档与反归档。
DSH 自带的 GUI 只覆盖了其中一部分(能归档,但没有反归档;没有标签;跨工作区移动要重启)。这个插件把整套能力放到两条共用同一份实现的通道上:
- Agent 工具 —— 模型可以直接调的六个工具。
- 本机回环 REST API —— 同样的六个操作走 HTTP,浏览器端插件不必再走 IPC 桥。dsh-session-tree 就靠它渲染侧栏的标签、拖拽移动和归档菜单。
适用版本
| DSH | 0.2.1-rc.2(开发与验证所用版本) |
| @deepseek-ai/cordis | ~4.0.5 |
| 运行时 | Node.js 22+(DSH 桌面运行时自带) |
更早的 DSH 版本未验证。插件读取 workspaceRegistry、sessionPersistence、storageDomain、webServer 四个服务;如果某个版本改名或删掉了其中之一,对应功能会 fail-soft(打一条 warning)而不是把宿主拖崩。
安装
从 git 装(推荐)
dsh plugin --profile <你的 profile> add github:minhaoli/dsh-session-manager
或者从本地目录装
dsh plugin --profile <你的 profile> add /path/to/dsh-session-manager
<你的 profile> 填你实际启动的那个 —— Electron 应用是 desktop,CLI 模式是 web / headless / node。desktop profile 由 Electron 应用独占管理,应用运行时拒绝 dsh CLI 写入;请从应用自己的插件管理器安装,或先关掉应用。
包里声明了 dsh.bundle.patch,所以 dsh plugin add 会顺带把它写进 dsh.profile.bundles,下次启动即挂载。如果你是手工拷贝安装,自己补这一行:
~/.dsh/profiles/<profile>/cordis.patch.yml
- insert:
- id: session-manager
name: 'dsh-session-manager'
Agent 工具
六个工具都接收 JSON 参数,返回 { ok: true, ... } 或 { ok: false, error }。
| 工具 | 作用 |
| session_list | 列出持久化会话及其工作区、归档状态、标签、标题。过滤参数:workspaceId、path、archived、tag。 |
| session_move | 跨工作区移动会话。重写日志头 cwd 并在磁盘上重命名目录,然后实时更新 registry —— GUI 不用重启就能看到。 |
| session_delete | 永久删除会话及其日志目录。传 backupDir 会先把每个目录拷一份。 |
| session_tag | set / add / remove / clear / drop / list 标签。数据存在 ~/.dsh/session-tags.json。 |
| session_archive | 把会话从所有分组界面隐藏;日志和工作区槽位保留。幂等。 |
| session_unarchive | 把归档会话恢复到原位置 —— GUI 缺的就是这个方向。 |
session_move 和 session_delete 会拒绝「活会话」(模型当前正在跑的那个对话)。
REST API
只在 webServer 服务存在时注册(web 和 desktop 两种模式)。每个 handler 都转调对应工具的 execute,因此两条通道行为完全一致。
所有请求都过 isLoopbackRequest(req) 这道闸 —— 非回环来源直接 403 {"error":"forbidden: loopback-only"}。没有 token,闸是传输层而不是凭据。挂了本插件就别把 DSH web 服务暴露到 localhost 之外。
| 方法 | 路径 | Body / 说明 |
| GET | /api/dsh-session-manager/sessions | — |
| GET | /api/dsh-session-manager/tags | — |
| PUT | /api/dsh-session-manager/tags | { "sessionId": "...", "tags": ["a","b"] } |
| DELETE | /api/dsh-session-manager/tags | { "tags": ["a"] } —— 从所有会话上摘掉这些标签 |
| POST | /api/dsh-session-manager/sessions/move | { "sessionIds": [...], "targetWorkspaceId": "..." } 或 { ..., "targetPath": "...", "createIfMissing": true } |
| POST | /api/dsh-session-manager/sessions/delete | { "sessionIds": [...], "backupDir": "..." }(backupDir 可选) |
| POST | /api/dsh-session-manager/sessions/archive | { "sessionId": "..." } |
| POST | /api/dsh-session-manager/sessions/unarchive | { "sessionId": "..." } |
| POST | /api/dsh-session-manager/projcache/warm | —(诊断用:返回标题预热报告) |
状态码:工具返回 ok: true 时 200;业务失败或 body 格式错 400;非回环 403;方法不对 405;意外抛错 500。
请求体上限 1 MB,且必须是 JSON 对象。
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"]}'
几个实现细节
移动要同步三处。 物理移动(重写 zstd 头 + 目录改名)之后,还要重新索引 registry 头、调公开的 attachSession / detachSession,再通过 storage-domain 的表句柄更新投影缓存里的 identity.cwd。少任何一步,GUI 都会显示旧路径。
启动时预热标题。 冷会话在 session.list 里没有标题 —— 持久标题在投影缓存的 checkpoint 里,而 checkpoint 只有该会话在某个进程里被 attach 过才会写。重启后所有没打开过的会话都是冷的,侧栏于是退化成显示目录名。插件在挂载 800 ms 后扫一遍缺标题行的会话,调官方 coldSnapshot(meta, inheritedEventCount, events) 把 checkpoint 写回去。
校验既有标题行的「日志尾巴探测」是关的(lib/index.js 里的 WARM_TAIL_PROBE = false)。开着的话每次启动都要把全部会话的日志尾巴读一遍 —— 这是重启后侧栏慢的主因,实测约 620 个会话。代价是:投影缓存写入失败窗口内发生的改名,启动时不再被自动纠正;打开该会话时官方冷读阶梯仍会自愈。要恢复旧行为就把这个常量改成 true。
归档走 registry。 归档走 archiveSession() —— 和 GUI 用的同一个 add-only API。除了显式删除或反归档,插件从不重写归档集合;即便是那两种情况,也走 registry 公开的 enqueueOperation / setState 写链,保证 registry 的缓存状态一致。
刻意零 import。 lib/index.js 只用 node: 内置模块。这个文件插件是通过原生动态 import 加载的,裸模块名只能从 profile 的 node_modules 解析;只用内置模块让它可以作为一个独立文件插件被加载(和 zen-useragent.js 同样的形态)。
配套插件
- dsh-session-tree —— 消费本 REST API 的侧栏 UI(标签、分组、拖拽移动、删除)。它替换官方 ui-workspace bundle,同时安装时要把那一行 disable 掉。
- dsh-session-query-vector —— 会话语义搜索后端。
- dsh-session-search —— 对话内查找栏。
- dsh-ui-reload —— 一键重载前端按钮。
许可
MIT —— 见 LICENSE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
minhaoli/dsh-session-manager
列出、移动、打标签、归档并备份删除会话
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 21,780未汉化DSH
73.5
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 1,947已汉化MCP
72.7
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,347已汉化DSH
71.9
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13917 个插件含 PR 收录与…
★ 343已汉化DSH
71.6