🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

会话归档管理 SZMY-haruhi/dsh-session-plus

DeepSeek Harnessv0.1.1
SZMY-haruhi22 天前有提交已提供中文文档扫描:含敏感能力

把社区里零散的会话能力收成一套:归档目录、恢复原位、删除、编辑重发。补官方缺口,走公开 slot,不打核心补丁。一个 DeepSeek Harness 会话包:归档目录、恢复、删除、编辑重发。通常散落在各个插件里的功能,这里集中到一处。

36.5/100
综合分
2
GitHub 星标
187
npm 周下载
—/5
用户评分

数据截至 2026/10/12 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-session-plus
npm 源 · dsh-session-plus 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · chat
装得上吗
静态安装检查通过
未做真实安装
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 22 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-session-plus @ 0.1.1
✓Node 引擎要求 >=22.15 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/3 01:02:11

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 6 处,展示前 6 条)
  • 删除本地文件
    lib/index.js:88
    await rm(location.path, { force: true });
  • 删除本地文件
    lib/index.js:89
    await rm(join(dir, "session.jsonl"), { force: true });
  • 删除本地文件
    lib/index.js:90
    await rm(join(dir, "session.jsonl.zstd"), { force: true });
  • 删除本地文件
    lib/index.js:92
    await rmdir(dir);
  • 读取本地文件
    lib/index.js:109
    await access(file);
  • 发起网络请求
    lib/client.js:163
    const response = await fetch(path, {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-web
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

4 张 · 点击查看大图

功能亮点

  • 归档会话目录
  • 恢复原位
  • 删除与编辑重发

README

由 DeepSeek 最新模型翻译生成
dsh-session-plus awesome · DSH plugin DeepSeek Harness 的会话补全:侧栏归档目录、恢复到原位置、删除、分支对话。 官方其实已经能归档会话,但没有查看、取消归档或删除的界面。我做这个插件,就是把这几项操作补上。全部走公开 slot 和 workspace 域,不改 @deepseek-ai 核心文件,也不往官方「视图选项」菜单里插 DOM。 侧栏最底下、设置旁边点 归档。 已知失败(请先读) 这不是某一版实现写坏了。我在多个版本里都复现过,社区其它归档类插件也会撞上同一类问题。根因在 DSH 会话日志:tool / result 必须带 source.kind = tool 和 callId。工具还在跑的时候把会话归档(中间会 clear() / 卸绑定),日志可能被写成非法事件。已经写坏的日志,插件修不回来,只能删掉。 我自己测下来是这样: | 场景 | 结果 | | 场景一:这一轮已经结束,再归档,再恢复 | 不会出问题。重启也还在。 | | 场景二:还在长文回答、没有工具调用,中途归档,再恢复 | 不会出问题。回答可以写完。重启也还在。 | | 场景三:正在调工具的途中归档,再恢复 | 一定会出问题。 | | 删除 | 我没再测到 bug。 | | 分支对话(修改并分支) | 我测过的路径里没碰到 bug。
展开完整文档(README 剩余 1 节)
dsh-session-plus

awesome · DSH plugin

DeepSeek Harness 的会话补全:侧栏归档目录、恢复到原位置、删除、分支对话。

官方其实已经能归档会话,但没有查看、取消归档或删除的界面。我做这个插件,就是把这几项操作补上。全部走公开 slot 和 workspace 域,不改 @deepseek-ai 核心文件,也不往官方「视图选项」菜单里插 DOM。

侧栏最底下、设置旁边点 归档。

已知失败(请先读)

这不是某一版实现写坏了。我在多个版本里都复现过,社区其它归档类插件也会撞上同一类问题。根因在 DSH 会话日志:tool / result 必须带 source.kind = tool 和 callId。工具还在跑的时候把会话归档(中间会 clear() / 卸绑定),日志可能被写成非法事件。已经写坏的日志,插件修不回来,只能删掉。

我自己测下来是这样:

| 场景 | 结果 |
| 场景一:这一轮已经结束,再归档,再恢复 | 不会出问题。重启也还在。 |
| 场景二:还在长文回答、没有工具调用,中途归档,再恢复 | 不会出问题。回答可以写完。重启也还在。 |
| 场景三:正在调工具的途中归档,再恢复 | 一定会出问题。 |
| 删除 | 我没再测到 bug。 |
| 分支对话(修改并分支) | 我测过的路径里没碰到 bug。 |

场景三恢复后,客户端常见:

历史加载失败:conversation Context 9:tool-call received more than one start Match(internal)

重启服务后再打开,常见:

history unavailable
SessionPersistenceCorruptionError: ... message must have tool source(internal)

所以:不要在工具还在跑的时候点归档。 等这一轮结束,或先点停止。空白「新会话」本来就不能归档。插件会尽量等到空闲(含 runningCalls / partial,最多约 30 秒)再归档,超时会提示「请先等当前回复结束,或点停止后再归档。」——但我拦不住所有时机。一旦日志已经坏了,恢复没有意义,删掉那个会话即可。

安装

npm(稳定版,官方推荐)。请装 0.1.2。npm 上的 0.1.0 是更早的占名包;0.1.1 还按旧的 list() 头对象和 locate() 找文件,接不上 DSH 0.1.5 之后的会话日志。

dsh plugin --profile web add dsh-session-plus

已经装过 0.1.0 的:

dsh plugin --profile web update dsh-session-plus

也可以跟 GitHub(跟仓库最新提交;本包预构建 lib/,git 安装无需 allowBuilds):

dsh plugin --profile web add github:SZMY-haruhi/dsh-session-plus

钉 commit:

dsh plugin --profile web add github:SZMY-haruhi/dsh-session-plus#<commit>

卸载:

dsh plugin --profile web remove dsh-session-plus

dsh.bundle · 预构建 lib/ · git 安装无需 allowBuilds

特点

- 归档目录:列出官方 archivedSessionIds,不是我自己做的影子列表
- 恢复:从归档集合拿掉;工作区 sessionIds 槽位官方归档时本来就没拆,所以回到原位置
- 删除:居中二次确认(红色删除,确认层压在归档面板之上)。卸工作区记账并删掉整个会话目录:v0 session.jsonl[.zstd]、0.1.5 起的 session.v3.jsonl[.zstd]、以及当前的 session.v4.jsonl[.zstd]。子代理(日志头 origin: "subagent")会跟着删;修改并分支产生的 fork 也写 parentSession,但不是子代理,留在磁盘上。删完不会再取消归档,避免幽灵会话回到列表
- 删的是当前会话时:在当前工作区打开一个空白新会话(uiWorkspace.startSession)。更早的宿主如果还提供 sessions.clear(),就走那个。不会 connectWorkspace(那个体感像「返回工作区」)
- 空白「新会话」:不能归档、不能删除
- 分支对话:自己消息旁的分叉图标(Y 形带箭头,不是官方 git-branch 那种圆点)→ 就近浮窗改提问,可选填新标题,空则官方 increaseTitle 叠 (1) (2) → sessions.fork 再发送;旧会话还在
- 一个入口、一套操作;设置页大管家(导出、暂停、压缩、AI 重命名)我不做

归档目录里点 恢复 / 删除:

自己消息旁 修改并分支:就近浮窗改提问,可选新标题,原对话还在。

行为

| 操作 | 走哪 | 结果 |
| 归档 | 官方 workspaces.archiveSession | 会话从侧栏分组里消失,记账保留 |
| 恢复 | 写回 workspace 域的 archivedSessionIds | 会话出现在原来的工作区位置 |
| 删除 | 卸记账 + 删会话目录(含代际文件和子代理) | 不可恢复;fork 不删 |
| 分支对话 | fork + prompt | 新会话 = 历史前缀 + 改过的提问 + 新回答 |

不做

- 不给 @deepseek-ai 包打文件补丁
- 不覆盖官方 plugin 行(补丁只有 insert)
- 不伪装成官方筛选菜单的一项
- 不修复已经损坏的会话日志(那是宿主 persistence 的事)

从源码开发

需要 Node.js >= 22.15。

pnpm install
pnpm build
dsh plugin --profile web add .

pnpm pack 可打出准备发给 npm 的 tarball,用 dsh plugin --profile web add ./dsh-session-plus-0.1.2.tgz 装这一版。

更新记录

0.1.2 · 2026-10-12

适配 DSH 0.1.5 之后的会话持久化,并在 0.2.0-rc.2 上核对过:

- sessionPersistence.list() 返回 { header, revision, eventCount?, sizeBytes? },不再把日志头当数组元素
- 本插件不调用 locate()。0.2.0-rc.2 里它不在公开的 SessionPersistence 上。删除只认 JSONL 目录布局,并删掉整个会话目录
- 删除父会话时级联删除 origin: "subagent" 的子会话;fork 不删
- 四个接口注册在 ctx.connection.fetch 的精确路径上,先走 /api 的 Host/Origin 和登录校验。未登录是 401
- 确认框先向 GET /api/session-plus/delete-preview 要子代理 id。删除请求把这份 id 带回去,对不上就 409,不删
- 计划里的目录缺失时返回 404,不会先归档再报成功
- ctx.sessions 里还握着计划删除的任何一个 id 时,删除返回 409,不关 handle,也不删目录。正在跑的会话同样是 409
- 归档列表的名字先用客户端会话列表里的持久 title,没有再用接口带回的 session/title,最后才是 displayTitle。这个顺序来自 Hsia97 的 PR #1。宿主用一次 sessionQuery.readTitleSnapshots 取回这些标题。归档不会把会话从客户端 byId 里拿掉
- 确认框的层叠高于归档面板;侧栏按钮不再用负外边距撑出脚栏
- 订阅 workspace / session 列表时保留 getSnapshot 的 this
- 需要 Node.js >= 22.15(zstdDecompressSync)。更早的 22 会明确失败,而不是归档成功却留下日志

级联删除和「不要把 fork 当成子代理」里,列表解包的方向来自 Hsia97 的 PR #1。那一版按任意 parentSession 级联,而且只处理 session.v3.jsonl.zstd。这一版只删 origin: "subagent",并删整个会话目录。

删掉子代理之后,它自己的 fork(只写了 parentSession)会留在磁盘上,父 id 已经不在,变成孤儿。删除做到一半失败时不会把已经删掉的目录加回来。动手前会把计划删除的 id 列表写进日志。

0.1.1 · 2026-08-18

把 GitHub 上这一版同步到 npm。0.1.0 在 npm 只是占名包,同号不能覆盖,所以发 0.1.1。

0.1.0 · 2026-08-18 · 最初版本

这一版指当时的 GitHub main。npm 上同号的 0.1.0 只是更早的占名包,两边不是同一份代码。

第一次把「会话补全」做成能用的插件。这一版实现了:

- 侧栏底部 归档 入口(sidebar.footer.action,与官方设置同一套几何)
- 覆盖层归档目录:列出、恢复、删除
- 归档走官方 workspaces.archiveSession(只写 archivedSessionIds,工作区槽位保留)
- 恢复后回到原来的工作区位置
- 删除:居中确认、卸记账、删 jsonl / .zstd / 会话目录;当前会话则清成空白「新会话」
- 空白草稿拒绝归档 / 删除
- 归档、删除前尽量等到空闲,不 cancel() 正在跑的一轮
- 用户消息旁 修改并分支:就近浮窗、可选新标题、sessions.fork + prompt
- 只走公开 Harness API,不打 @deepseek-ai 补丁,不往视图选项插 DOM

已知限制见上文「已知失败」。场景三是宿主日志约束,不是这一版独有的回归。

语音输入

感谢你看到这里。官方这边没有语音转文字;语音插件我试过几款,接起来费劲、用着也别扭,后来自己写了 otoink:跨窗口口述,引擎内置,尽量轻一点。

致谢

实现时我读过这些 MIT 仓库当设计参考。只借鉴思路;版权仍归原作者:

- cokiscarazo-rgb/dsh-session-management
- Moeblack/dsh-message-edit
- cindyguyuehu123/dsh-webchatlike(交互模型;本插件不补丁核心包)
- dylan121322/dsh-session-unarchive(恢复到原槽位这个想法)

DSH 0.1.5+ 的列表解包和子代理清理,方向来自 Hsia97 的 PR #1。

没有 LICENSE 的仓库,我不当成可复制源码。公开契约见本仓库 NOTICE。

官方契约来自 DeepSeek Harness / Cordis。

许可

MIT · Copyright (c) 2026 SZMY-haruhi

Author

感谢star❤️ tonkatsu258 · 个人网站
预览分享卡片长什么样 ↓SZMY-haruhi/dsh-session-plus
分享 · DeepSeek Harness Hub
SZMY-haruhi/dsh-session-plus

把社区里零散的会话能力收成一套:归档目录、恢复原位、删除、编辑重发。补官方缺口,走公开 slot,不打核心补丁。一个 DeepSeek Harness 会话包:归档目录、恢复、删除、编辑重发。通常散落在各个插件里的功能,这里集中到一处。

回到顶部