🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

zzdhsxk/dsh-session-migration-repair

DeepSeek Harnessspec-screened扫描:含敏感能力在 GitHub 查看 ↗
⚠ 装前注意

修复无法被当前 DSH 版本迁移的旧版format v0会话日志:诊断 → 备份 → 修复 →…

基本兼容但装前注意:未发布到 npm registry,仅可从源码安装 · 最近上游提交 2026/9/12 · 已提供中文文档

修复当前构建拒绝迁移的旧版(格式 v0)DSH 会话日志——离线扫描、备份、修复,并对照真实的 v0→v3 迁移链进行验证。

综合分
29.5
GitHub 分
29.5
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add zzdhsxk/dsh-session-migration-repair
未发布到 npm registry,仅可从源码安装,改用 GitHub 源安装
信任档位:已验证本站已于 1 天前真实安装成功
是什么
dsh 原生插件 · other
装得上吗
本站已真实安装成功(非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 14 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/25
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/24(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查⚠ 装前注意

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

✗npm 包dsh-session-migration-repair(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.15.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

未发布到 npm registry,仅可从源码安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/24 11:30:04

用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
dsh-session-migration-repair

修复无法被当前 DSH 版本迁移的旧版(format v0)会话日志:诊断 → 备份 → 修复 → 用宿主自带的迁移链离线验证 → 落盘。

它解决什么问题

DSH 0.1.5 起,会话存储格式升级到 v3;打开老会话时 DSH 会走 v0 → v1 → v2 → v3 的迁移链,并对每一步做严格校验。旧版本写入时留下的空字段,当时的版本并不在意,但在迁移链上会直接拒绝,表现为「历史加载失败 / history unavailable」。本工具处理的就是这类日志。

它修的四类确定性缺陷(全部可自动修复):

| 报错 | 真因 | 修法 |
|---|---|---|
| released tool-call-chunks row N id and optional name must be strings | 流式工具调用的分片行 id 为空(旧版只在首行写 id) | 从同 turn\|step\|index 的 assistant/chunk tool-call-delta 取回真实 id/name |
| assistant/message N message content[k] name must be a non-empty string | 工具调用块的 name 为空(常见于更早的修复工具改写之后) | 从同 step 的 delta 取回工具名 |
| format v2 assistant/message ... invalid message content kind "tool-call": user/message 0 content[0] id must be a non-empty string | assistant/chunk 的 block-end 里 tool-call 块的 id 为空(外层报错是误导,内层才是真因) | 同样用 delta 的 id 补齐 |
| tool/call ... does not match one advertised tool call | tool/call.arguments 与消息里对外声明的 arguments 不一致 | 以未含替换字符(U+FFFD)的一侧为准,两侧写回同一份 |

安装

作为 DSH 插件(宿主侧注册一个模型可调用的工具 + 一个技能):

dsh plugin --profile web add dsh-session-migration-repair        # 从 npm
dsh plugin --profile web add github:/dsh-session-migration-repair   # 从 GitHub
之后重启 dsh web 并刷新页面

也可以完全脱离 DSH 单独用命令行(零依赖,需要 Node ≥ 22.15 —— Node 20 的 node:zlib 还没有 zstd API):

node bin/cli.mjs --help

命令行

dsh-session-migration-repair list                      # 列出所有会话(含代际与隔离文件)
dsh-session-migration-repair scan         # 只读诊断,不改任何文件
dsh-session-migration-repair validate     # 跑完整迁移链(等价于"打开会话",但不影响服务)
dsh-session-migration-repair fix     --yes # 备份 → 修复 → 校验 → 落盘

常用选项:--dry-run(只报告将改哪些行)、--no-fix-arguments(不动 arguments)、--dsh-home 、--dsh-root (指定 DSH 安装位置用于离线校验)、--json。

示例输出:

$ dsh-session-migration-repair scan session-61c010f4-...
行数               : 59289
阻塞迁移的缺陷     : 160
- packedChunkMissingId        : 112
- messageToolCallMissingName  : 12
- blockEndMissingId           : 12
- blockEndMissingName         : 12
- toolCallMissingName         : 12
工具链             : advertised=607 calls=607 results=607

$ dsh-session-migration-repair fix session-61c010f4-... --yes
已修复 session-61c010f4-...
备份      : ~/.dsh/session-migration-repair/backups//....pre-repair.jsonl.zstd
改动行数  : 148
体积      : 12280330 → 3851062 字节
迁移链    : 通过 ✅ (3530 个 v3 事件)

安全设计

- 先备份后改写:原件复制到 $DSH_HOME/session-migration-repair/backups//,并追加一条审计记录到 audit/repair-log.jsonl。
- 最小差异:只重新序列化真正变化的行(实测 59,289 行的会话只改 148 行),其余行原样保留。
- 写前验证:修复结果先在本地跑完整 v0→v1→v2→v3 迁移链,通过才落盘;写文件用「临时文件 + rename」保证原子性。
- 零依赖:不引入任何 npm 依赖,自带多帧 zstd 读写(DSH 的日志是多帧的,且首帧必须只含 header 一行;Node 自带的 zstd 只能解首帧)。

原理

1. 多帧 zstd:lib/core/zstd.mjs 自己按帧边界拆分(只解析帧头与块头,不重实现压缩),逐帧解压后一次性 UTF-8 解码 —— 直接逐块拼接字符串会在块边界切断多字节字符,凭空制造 U+FFFD。
2. 缺陷索引:每一次流式工具调用都由 assistant/chunk 的 tool-call-delta 宣告(含真实 id 与工具名),因此所有空字段都能从这张索引里补回。
3. 离线验证:DSH 的 sessionFormatCatalog.createRestore() 就是它自己的装载路径,本工具直接驱动它 —— 校验结果与真实打开会话完全一致,不需要反复重启服务试错。

局限

- 只能修文件仍在的日志(哪怕只剩 .corrupt- 隔离备份)。整个会话目录被 rm -rf 的情况,本工具无能为力。
- 只处理上述四类确定性缺陷;迁移链报出其它错误时会拒绝写入并原样保留文件。
- 若日志里的文本本身已被写坏(含 U+FFFD),本工具只能保证「不再新增」破坏,无法凭空还原丢失的字符。

开发

node --test test/.test.mjs                 # 单元测试
DSH_REAL_V0_LOG=/path/to/defective.jsonl.zstd node --test test/*.test.mjs   # 真实日志回归

许可

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入社群

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群