比较文本、JSON、CSV 与 Markdown 并生成结构化差异报告
32/100
综合分
4
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add omdsh-dev/dsh-tool-diff该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-invariants@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 文本与JSON比较
- 生成结构化差异报告
DSH Diff 工具插件:文本/JSON/CSV/Markdown 结构化比较与 unified diff,零依赖只读,注册 diff 工具
README
由 DeepSeek 最新模型翻译生成dsh-tool-diff
DSH Diff 文本差异工具插件 —— 文本 / JSON / CSV / Markdown 结构化比较与 unified diff 生成。零依赖、纯函数、只读。
License
动机
Agent 需要对比两份内容(配置片段、API 响应、表格、文档修订)时,现有路径是起 bash 进程调用系统 diff 或手写比较逻辑:
1. 每次调用都起进程——Windows 上尤其昂贵
2. 系统 diff 不懂结构——JSON 只能给整段文本差异,看不出 $.user.name 这样的路径级变更
3. 手写比较代码不可验证——边界(引号内逗号、嵌套数组、标题重命名)极易出错
本插件提供确定性、零依赖、纯函数的差异比较:一次函数调用,毫秒级返回结构化 JSON 报告或标准 unified diff。
展开完整文档(README 剩余 1 节)
dsh-tool-diff
DSH Diff 文本差异工具插件 —— 文本 / JSON / CSV / Markdown 结构化比较与 unified diff 生成。零依赖、纯函数、只读。
License
动机
Agent 需要对比两份内容(配置片段、API 响应、表格、文档修订)时,现有路径是起 bash 进程调用系统 diff 或手写比较逻辑:
1. 每次调用都起进程——Windows 上尤其昂贵
2. 系统 diff 不懂结构——JSON 只能给整段文本差异,看不出 $.user.name 这样的路径级变更
3. 手写比较代码不可验证——边界(引号内逗号、嵌套数组、标题重命名)极易出错
本插件提供确定性、零依赖、纯函数的差异比较:一次函数调用,毫秒级返回结构化 JSON 报告或标准 unified diff。
安全模型
- 零依赖:Myers 行级 diff、RFC 4180 解析器、JSON 递归比较全部手写
- 只读:不读文件、不写文件、不联网、不调 git;patch action 只在内存中生成并校验补丁,绝不落盘
- 预算:
- 输入单侧 ≤ 256 KiB(超限直接报错)
- 输出 ≤ 64 KiB(超限按 maxChanges 与字节预算截断并置 truncated)
- Myers diagonal 预算 2000 + 蛇步总预算 2000 万 + 公共前后缀修剪 + hash 快速拒绝 + 规模上限 4000 行 → 恶意重复/全异文本有界完成
- 行数 ≤ 50K、JSON 嵌套 ≤ 64 层、CSV ≤ 50K 行 / 512 列
- timeoutMs: 2000
- 工具参数会记入会话日志,不要传入敏感数据
工具声明
注册 diff 工具(@deepseek-ai/dsh-tool-diff,row id tool-diff),统一输出 JSON 文本字符串信封:所有 action 都带通用摘要 { equal, truncated, beforeBytes, afterBytes, changes }。
| action | 作用 | 输出 |
| text | 行级 Myers diff | unified diff(--- before / +++ after / @@ hunks,无时间戳)+ 统计;format=structured 输出带行号的操作列表 |
| json | 递归比较两个 JSON 值 | $ 路径化变更($.user.name、$.items[0]、$['a.b'])+ add/remove/replace 汇总 |
| csv | RFC 4180 解析后按主键或位置比较 | addedRows / removedRows / changedRows(列级)/ duplicateKeys / 列集合变化 |
| markdown | 轻量块级 tokenizer(标题/代码块/列表/引用/表格) | headingChanges(rename 识别)/ blockChanges(h2[1]/p[0] 路径)/ codeBlockChanges + 全文 diff |
| patch | 生成 unified diff 并在内存中校验 | patch 文本 + valid / hunks / targetMatchesAfter / hunk 级错误 |
| 参数 | 类型 | 必填 | 说明 |
| action | string | ✅ | text / json / csv / markdown / patch |
| before | string | ✅ | 原内容(任意 action 的输入侧) |
| after | string | ✅ | 新内容 |
| format | string | | unified(默认 text/patch)/ structured(默认 json/csv/markdown)/ both |
| context | integer | | unified 上下文行数,默认 3,范围 0..20 |
| key | string | | CSV 主键列名或 1-based 索引;缺省 → 位置比较 |
| delimiter | string | | CSV 分隔符,默认 ,,单字符或 tab |
| ignoreWhitespace | boolean | | 比较时忽略空白差异(text/csv/markdown);patch action 拒绝(精确文本协议) |
| ignoreCase | boolean | | 比较时忽略大小写(text/json/csv/markdown);patch action 拒绝 |
| sortKeys | boolean | | JSON 键排序,默认 true |
| maxChanges | integer | | 最大报告变更数,默认 1000,硬顶 10000 |
输出示例
{"kind":"json","equal":false,"beforeBytes":42,"afterBytes":58,"changes":[
{"op":"replace","path":"$.tags[1]","before":"b","after":"c"},
{"op":"add","path":"$.user.email","after":"b@x.com"},
{"op":"replace","path":"$.user.name","before":"Alice","after":"Bob"}],
"summary":{"added":1,"removed":0,"replaced":2,"moved":0}}
设计要点
- 行级 Myers:O(ND) 迭代实现(非递归),trace 回溯;公共前后缀修剪后在小规模上运行,保证内存与时间有界;快速拒绝使用与 lineEqual 相同的归一化键(ignore 选项下不漏判公共行)
- CSV 双模式:提供 key 且表头存在 → keyed(行顺序无关);否则 positional(按数据行号)。before/after 两侧重复 key 都进 duplicateKeys 且 equal=false,重复 key 的行不参与匹配(结果确定);空字符串 key 与缺失 key()不混淆
- Markdown 块对齐:按块类型 token 做 Myers,同型块内容变化 → replace,结构增删 → add/remove;标题按父路径+级别匹配,同路径同级别文本变化 → rename;代码块语言/行数/内容任一变化都进 codeBlockChanges(内容变化带 changed:true)
- JSON 深度防线:JSON.parse 之前先做 O(n) 非递归括号扫描(跳过字符串字面量),超 64 层直接报错;重复键由状态机扫描并随输出报告(duplicateKeys.before/after),不静默丢信息
- patch 语义:equal = 两侧在精确行 + 末尾换行语义下相等(与 valid 无关);valid 只表示"生成的 patch 可从 before 应用到 after";hunk 坐标(old/new、顺序、重叠、间隙)严格校验;patch 被截断时 valid:false + patchComplete:false
- Unicode:孤立 surrogate 在入口被拒绝(invalid Unicode)
- 可复现输出:unified diff 无时间戳;sortKeys 默认 true 使变更列表稳定;所有 action 最终 JSON 信封 ≤ 64KiB(契约断言)
构建与测试
构建(零依赖,仅需 monorepo 的 tsc)
node /node_modules/typescript/bin/tsc -p tsconfig.json
测试(vitest,124 个用例)
node /node_modules/vitest/vitest.mjs run tests
DSH 0.1.5-rc.1 兼容(已验证)
本插件已迁移到 DSH 0.1.5-rc.1 依赖线,并在 local harness 0.1.5-rc.1 的隔离 consumer 中完成全链路验证:
- 类型/运行时:@deepseek-ai/cordis: ^4.0.1 + @deepseek-ai/dsh-tools: >=0.0.1-rc.1 =0.0.1-rc.1 ⚠️ web 与 headless 是不同 profile:web 安装不会自动覆盖 headless;dsh run 默认使用 headless profile。Windows 路径使用正斜杠(C:/...)。
验证安装
dsh --profile web --dump-config | grep tool-diff
运行验证
dsh run "使用 diff 工具对比两段文本"
手动安装(源码贡献 / 旧 snapshot 场景)
仅适用于源码贡献(在 monorepo 中开发调试本插件)或仍在使用旧 snapshot 的场景(本地 junction/symlink、手动编辑 profile 层)。
许可
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
omdsh-dev/dsh-tool-diff
比较文本、JSON、CSV 与 Markdown 并生成结构化差异报告
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,335已汉化MCP
71.7
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9
原生编程智能体paean-ai/deeptide
由 DeepSeek 打造,为 DeepSeek 而生。
★ 1,107已汉化DSH
67.7
多引擎接力台emo-xiaoyu/harness-mix
macOS/Linux 已加入源码构建与启动适配;目标系统的完整桌面验收仍需在对应机器执行。安装方式、Linux…
★ 419已汉化DSH
66.8
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。