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

会话修复助手 Zn-Dk/dsh-session-repair

DeepSeek Harnessv0.7.0
Zn-Dk36 天前有提交已提供中文文档扫描:含敏感能力

DSH Web 会话诊断、可信备份与一键安全修复插件。

36.3/100
综合分
4
GitHub 星标
376
npm 周下载
—/5
用户评分

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · chat
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
数据截至 2026/11/01·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 36 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 20:27:18

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

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

读写/删除本地文件写入剪贴板(不计风险)
查看扫描证据(共 25 处,展示前 24 条)
  • 读取本地文件
    lib/index.js:130
    for (const entry of await readdir(sessionsRoot())) {
  • 读取本地文件
    lib/index.js:142
    await stat(path);
  • 写入本地文件
    lib/index.js:155
    await mkdir(join(root, 'audit'), { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/index.js:158
    await writeFile(path, JSON.stringify(entry, null, 2) + '\n', { mode: 0o600 });
  • 读取本地文件
    lib/index.js:203
    manifestText = await readFile(join(dir, backupId), 'utf8');
  • 读取本地文件
    lib/index.js:255
    const names = await readdir(dir);
  • 读取本地文件
    lib/index.js:352
    manifestText = await readFile(join(dir, backupId), 'utf8');
  • 读取本地文件
    lib/index.js:367
    backupBytes = await readFile(artifactPath);
  • 写入剪贴板
    lib/client.js:202
    const copy = async () => { if (report) await navigator.clipboard?.writeText(reportText(report)) }
  • 写入剪贴板
    lib/client.js:297
    jsx('button', { className:'sr-button sr-copy', type:'button', title:t('copySessionId'), onClick:()=>{ void navigator.clipboard?.writeText(sessionId) }
  • 读取本地文件
    lib/raw-storage.js:59
    const first = await stat(path);
  • 读取本地文件
    lib/raw-storage.js:60
    const bytes = await readFile(path);
  • 读取本地文件
    lib/raw-storage.js:61
    const second = await stat(path);
  • 写入本地文件
    lib/repair.js:191
    await writeFile(tmp, bytes, { mode: 0o600 });
  • 写入本地文件
    lib/repair.js:192
    await rename(tmp, path);
  • 读取本地文件
    lib/backup-store.js:23
    names = await readdir(dir);
  • 删除本地文件
    lib/backup-store.js:33
    await rm(artifactPath);
  • 删除本地文件
    lib/backup-store.js:37
    await rm(manifestPath);
  • 读取本地文件
    lib/backup-store.js:46
    const before = await stat(sourcePath);
  • 读取本地文件
    lib/backup-store.js:47
    const bytes = await readFile(sourcePath);
  • 读取本地文件
    lib/backup-store.js:48
    const after = await stat(sourcePath);
  • 写入本地文件
    lib/backup-store.js:51
    await mkdir(targetDir, { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/backup-store.js:74
    await rename(tmpArtifact, artifactPath);
  • 写入本地文件
    lib/backup-store.js:75
    await rename(tmpManifest, manifestPath);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/dsh-skill
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

2 张 · 点击查看大图

功能亮点

  • 会话诊断
  • 可信备份
  • 一键安全修复
v0.7.02026-09-29
· v0.7.0 — 修复 DSH 0.1.5-rc.1 不可达 + 补齐 V3 会话格式能力 · 修复 / Fixed 在 DSH ≥ 0.1.5-rc.1 上完全不可达(严重):插件依赖 sessionPersistence.locate() 取 artifact 路径,rc.1 已移除该方法;且 rc.1 的 list() 返回 { header, revision, ... } 嵌套快照而旧代码读 x.id。两者叠加导致每次检查都返回 artifact-missing,所有修复路径不可达(通道能注册、GUI 能打开,但功能一调用即失败)。 · 兼容两种快照形状(rc.1 嵌套 / 旧扁平); · locate 降级为可选调用,保留旧 DSH 支持; · 新增路径重算(复刻引擎 projectKey + encodeSegment,含 _no-cwd 与目录扫描兜底),已在真实会话上验证精确命中。 · seq-gap 由每跳跃一条改为聚合成一条(带 gapCount):真实 subagent 会话有上千次跳跃(事件裁剪所致,正常),逐条上报淹没其他发现(实测 83 条 → 1 条)。 · 新增 / Added 三个新诊断码,规则对齐引擎的会话准入校验: · source-kind-unclassified(blocked):source.kind 不在引擎 15 项审计词表内; · source-field-unexpected(repairable):仅 agent-message 的闭合形状校验; · usage-null-token:null 为 repairable,负值/非安全整数为 blocked。 新增 findFormatRepairs / applyFormatRepair:只做不臆造数据的机械修复,严格限定事件类型(曾有对所有类型改写同一字段导致 285 个会话损坏的历史);未经分类的 source.kind 不自动改写。 · 验证 / Verification · 单元测试 28/28(新增 14 个 V3 专项,含跨事件类型误改的隔离断言); · 真实会话端到端:7 个会话零误报(6 healthy / 0 blocked); · 编译干净。 · 说明 / Notes 曾考虑增加 format-version-unsupported,经真实数据核实予以否决:已存会话 header 的 version 是物理代际(真实文件为 version: 0),并非 V3 逻辑版本,据此判断会产生误报。 npm:
v0.6.22026-08-24
· dsh-session-repair v0.6.2 DSH Web 会话诊断、可信备份与安全修复插件。 · 修复 · i18n 未跟随宿主语言:改用 Host locale 服务(ctx.get('locale') 读 locale.preference),并通过 useSyncExternalStore 订阅切换实时重渲染;不再依赖 navigator.language(你切到 English 后仍显示中文的问题)。 · 变更 · Client bundle 通过 locale.register('dsh-session-repair', { zh, en }) 注册文案,t() 优先走宿主翻译管道。 · humanDiff 标点与 seq 列表分隔符也 i18n 化(joinEnd/sentenceEnd/seqSep)。 · 修复(英文版) · i18n 现在跟随 Host locale 服务(ctx.get('locale') 读 locale.preference),用 useSyncExternalStore 响应式重渲染;不再依赖 navigator.language(把界面切到英文后它仍停在中文)。 · 变更(英文版) · Client bundle 通过 locale.register('dsh-session-repair', { zh, en }) 注册文案;t() 优先走宿主翻译管道。 · humanDiff 标点与 seq 列表分隔符改为 i18n 键(joinEnd/sentenceEnd/seqSep)。 --- · npm: · GitHub: · 收录:awesome-dsh-plugin(category: session)
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-session-repair DSH Web 会话诊断、可信 checkpoint、pre-repair backup 与安全修复插件。 安装 从 npm 安装(推荐) dsh plugin --profile web add dsh-session-repair 安装后重启 dsh web,再刷新 http://127.0.0.1:3080。 从 GitHub 安装 dsh plugin --profile web add github:Zn-Dk/dsh-session-repair 开发阶段:link 本地源码 cd /root/proj/dsh-proj/dsh-session-repair pnpm install pnpm build dsh plugin --profile web add link:/root/proj/dsh-proj/dsh-session-repair 修改源码后重启现有 dsh web;不要启动替代服务器。若同时运行 deepseek-harness 的 dev:web watcher,Client bundle 可通过现有 HMR 接收更新。
展开完整文档(README 剩余 1 节)
dsh-session-repair

DSH Web 会话诊断、可信 checkpoint、pre-repair backup 与安全修复插件。

安装

从 npm 安装(推荐)

dsh plugin --profile web add dsh-session-repair

安装后重启 dsh web,再刷新 http://127.0.0.1:3080。

从 GitHub 安装

dsh plugin --profile web add github:Zn-Dk/dsh-session-repair

开发阶段:link 本地源码

cd /root/proj/dsh-proj/dsh-session-repair
pnpm install
pnpm build
dsh plugin --profile web add link:/root/proj/dsh-proj/dsh-session-repair

修改源码后重启现有 dsh web;不要启动替代服务器。若同时运行 deepseek-harness 的 dev:web watcher,Client bundle 可通过现有 HMR 接收更新。

状态分级

诊断报告的 severity 由检查项汇总而来,用于决定是否显示可写修复入口:

| status | case-when |
| healthy | 无 blocked/repairable/warning 检查项。seq-gap 与 live 会话中未闭合的 turn/step 仅作 info 观察项,不抬高等级。 |
| warning | 已结束(非 live)的历史存在未闭合的 turn/step 结构,或有其他潜在问题。可读、不提供写入修复。 |
| repairable | 存在确定性可修复问题(如空 tool-call ID 链),可提交修复计划。 |
| blocked | 会话无法正常展示,且存在无法自动修复的硬冲突(如 ID 冲突、zstd 损坏、会话不匹配)。 |

为什么需要这个插件

当 DeepSeek 网关在 tool-call 增量帧里偶发把 id/name 发成空字符串(上游 discussion #4365 跟踪的 identity-loss 家族),持久化历史会被「毒化」——之后每次加载都抛 message must have tool source,会话永久打不开。

dsh-session-repair 就在这个打不开的会话顶部原位一键修复——不用复制 sessionId、不用 agent 参与、不用手工切帧解压 zstd:

- 一键:在坏会话 header 点「会话体检」→「备份并修复」。
- 覆盖三种身份丢失形态:字段缺失、null、""。
- 一次性修复整条链(assistant/message、tool/call、tool/result)。
- 修复前强制 pre-repair backup,支持一键回滚,并保留审计记录。

上游已验证根因,并把我们的 closeBlock 兜底采纳为引擎侧修复蓝图的新增层(discussion #4365)。本插件是读取路径的恢复侧补全:它修复已经毒化的历史,引擎 patch 则阻止新的毒化写入。

使用

打开任意会话,在 Chat header 点击「会话体检」。当报告为 repairable 且至少有一条确定性修复计划时,面板会显示「备份并修复」按钮,并列出全部待修 seq 链。点击后先确认目标 seq 和 pre-repair backup,再一次性执行修复并重新校验;歧义、live、文件变化或其他 blocked 状态不会显示可写修复按钮。

面板按钮说明:

- 「刷新诊断」:重新读取当前会话工件并更新报告。
- 「复制报告」:把诊断 JSON 复制到剪贴板。
- 「导出报告」:下载诊断报告 JSON 文件。
- 「恢复上次修复前」:仅当会话为 repairable/blocked 且存在 pre-repair 备份时显示,一键回滚到最近一次修复前的状态。
- 「清空备份」:手动清空 safety 备份。
- 「备份并修复」:仅当报告为 repairable 且存在确定性修复计划时显示。

Agent 工具(模型调用)

插件注册了一个模型可调用工具 dsh_session_repair,它不是用户手动触发,而是由 agent 判断并调用:

- 参数:sessionId(可选;缺省时诊断当前会话)
- 返回:结构化诊断报告(severity / checks / repairPlans / maxSeq / eventCount 等)

典型用法:

1. 在健康会话里对 agent 说:「诊断 session-xxxx 这个 history unavailable 会话」,agent 会调用 dsh_session_repair 并传入旧 sessionId。
2. 在当前会话里对 agent 说:「帮我体检一下当前会话」,agent 调用时不传 sessionId,诊断当前会话。

注意:该工具只做只读诊断,不会执行修复。修复仍需在 header 的「会话体检」面板里点按钮完成。

安全边界

Host 先读取 raw storage,再决定是否调用引擎展示接口。Client 不直接触碰 ~/.dsh,也不能提交任意 JSON patch。修复使用 batchId 与 artifact fingerprint,修复前必生成 pre-repair backup,复验成功后才原子替换。多条独立空 ID 链在一次性批次中修复;歧义、zstd 损坏、文件变化、live/追加中的会话一律不写入。live 会话通过 ctx.get('sessions') / ctx.get('agents') 判定,其未闭合的 turn/step 属正常追加状态,仅记为 info。

插件自有数据位于 ~/.dsh/session-repair/,包括 backups 和 audit。外部 ~/.dsh/backup-sessions-* 目录只作为 legacy 取证与比较来源,默认不自动恢复。

当前实现状态

当前仓库已包含 raw zstd/JSONL 诊断、tool-call ID 检查、确定性 repair plan、checkpoint/pre-repair backup 写入、backup 列表/对比、报告导出、RPC、Agent tool、header 报告面板和随包 Skill。全部端点为已实现或明确返回 not-implemented,不会伪装成功。

发布与收录

- npm:dsh-session-repair
- GitHub:https://github.com/Zn-Dk/dsh-session-repair
- Releases:https://github.com/Zn-Dk/dsh-session-repair/releases
- 收录:已被 awesome-dsh-plugin 与 awesome-deepseek-harness 收录(awesome 侧 category: session;见 data/plugins/Zn-Dk__dsh-session-repair.yml)

Skill

随包 Skill 发布在 skills/dsh-session-repair/SKILL.md,由 Host runtime 注册;与插件同名但属于不同注册表,不单独发布、不使用 submodule、不默认软链接。
预览分享卡片长什么样 ↓Zn-Dk/dsh-session-repair
分享 · DeepSeek Harness Hub
Zn-Dk/dsh-session-repair

DSH Web 会话诊断、可信备份与一键安全修复插件。

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部