前言¶
在 DeepSeek Harness(DSH)里,会话往往「能打开、历史也能看」,但一发送新消息就失败。表面错误常常是兜底的 ... API stream from ... failed,容易误判为网络或通道问题;换模型后才会看到 Attachment object is missing. 这类真实原因。
DSH 每次发消息都会重放整段历史。历史里若引用过图片或文件,而对应内容对象已从本地附件库消失,请求会在准备阶段中断。手工排查还容易踩坑:只改文件不重启服务端、误读多帧 zstd 会话日志、无备份就覆盖不可逆数据。下面介绍社区插件 dsh-session-attachment-repair(维护者 chenkui-luo,分类:工作流),如何把「证明缺失 → 备份 → 替换悬空引用 → 校验 → 重启复验」固定成可审计流程。
这是什么¶
dsh-session-attachment-repair 同时是 DSH Skill 与 DSH 插件包(npm 名 dsh-plugin-session-attachment-repair)。它专门修复一类故障:会话历史引用的附件对象不在本地 attachment store 中,导致后续请求失败。
数据不出本机:不联网、不上传、不调用模型。插件形态下只做转发,调用仓库内 scripts/repair_session.mjs,与 Skill 共用同一套修复逻辑,避免分叉。
核心功能¶
经过上面的定位,插件(及同仓库脚本)提供的能力包括:
- 扫描与体检:列出受影响的会话,统计悬空附件(图片与文件分别计数);
verify发现悬空附件时以退出码 1 结束,便于脚本判断。 - 修复与占位:将悬空附件引用替换为文本占位(界面显示为
[图片已不可用:…]一类说明);不能恢复已丢失的图片字节——附件库按内容哈希与尺寸校验,原图拷回会被判为损坏。 - 备份与回滚:写入前强制同位备份(如
session.v3.jsonl.zstd.bak-<时间戳>);支持从指定备份restore;写入前后有哈希比对。 - 逐节点校验:确认改动仅发生在「悬空附件 → 文本占位」,其余内容不变。
- Web 界面:安装插件后,在「设置 → 会话附件修复」中扫描、预览、备份并写入;写入与还原需二次确认。
不适用:网络/代理、鉴权与余额、限流、上下文超长、模型配置错误,以及「对象存在但元数据不匹配」的损坏;若失败来自 DSH 版本升级的破坏性变更,应走升级流程而非本工具。
安装与启用¶
DSH 主目录默认为用户主目录下的 .dsh,可用环境变量 DSH_HOME 或命令行 --home <目录> 覆盖。
插件方式(Web 宿主)¶
官方文档给出的安装命令如下:
dsh plugin --profile web add github:chenkui-luo/dsh-session-attachment-repair
刷新页面一次,然后打开「设置 → 会话附件修复」。无 dsh CLI 时,可将仓库放到 <profile>/node_modules/dsh-plugin-session-attachment-repair,并在 <profile>/cordis.patch.yml 增加插件注册项(详见仓库 README)。
Skill 方式¶
交给 Agent 安装时,可使用仓库地址 https://github.com/chenkui-luo/dsh-session-attachment-repair,或把整个目录放到宿主 skills 根目录(例如 ~/.dsh/skills),目录名需与 SKILL.md 里的 name 一致。无需额外配置或密钥。
环境与权限:需要 Node.js ≥ 22.15(依赖 zlib 的 zstd 同步编解码);需要会话目录读写权限。插件以当前 DSH 进程权限运行,安装前建议自行查看源码与 MIT 许可证。Windows 已在文档中标注实际执行通过;macOS / Linux 文档标注为未验证。修复后需由用户亲自重启服务端,再发一条消息复验,才算真正通过。
典型用法¶
自然语言(Skill)¶
例如:
- 「这个会话发不出消息了,帮我看看是不是附件丢了」
- 「把所有发不出消息的会话排查一遍」
命令行¶
主要入口:
node scripts/repair_session.mjs scan # 扫描受影响的会话
node scripts/repair_session.mjs verify --session <id> # 单个会话体检
node scripts/repair_session.mjs repair --session <id> # 生成修复副本(不写入)
node scripts/repair_session.mjs repair --session <id> --apply # 备份并写入
node scripts/repair_session.mjs restore --session <id> --backup <备份文件>
node scripts/repair_session.mjs self-test # 编解码与备份链路自检
扫描与体检可加 --json 输出结构化结果。自检与回归测试:
node scripts/repair_session.mjs self-test
node tests/run_tests.mjs
适用场景与注意¶
适合:本地 DSH 用户、长期保留带图/带文件附件的会话,且已确认失败与「Attachment object is missing」或同类悬空引用有关。
务必注意:
- 会修改会话日志;虽有备份,仍应把备份当作唯一回滚依据。
- 只改磁盘不重启时,已打开会话可能仍留在服务端内存,复验会得到假阴性。
- 会话日志为多帧 zstd 首尾相接,不要用「一次性解码」误判文件内容。
- DSH 升级后若日志或附件库布局变化,脚本约定可能需要同步更新。
结尾¶
dsh-session-attachment-repair 把「附件对象已从本地库消失」这一类会话故障,收成可扫描、可备份、可校验、可回滚的工作流;插件侧与 Skill 共用同一脚本,避免两套逻辑。社区目录页与源码:
- 目录页:https://www.skillhub.cn/plugins/chenkui-luo/dsh-session-attachment-repair
- GitHub:https://github.com/chenkui-luo/dsh-session-attachment-repair
DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。