清除文档生成器指纹并重算真实统计,只报告不伪造
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add hengyun721/dsh-finalize该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · tool
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 3 处,展示前 3 条)
- 写入本地文件index.js:30
try { appendFileSync(TRACE, `${new Date().toISOString()} ${line}\n`) } catch { } - 发起网络请求client.js:47
fetch(reportUrl(props), { headers: { accept: 'application/json' } }) - 发起网络请求client.js:147
fetch(url, { headers: { accept: 'application/json' } })
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH 交付前的收尾处理:清除 docx/pptx/xlsx/odf 工具留下的痕迹,重新计算真实统计,并说明哪些内容不会编造。
README
由 DeepSeek 最新模型翻译生成dsh-finalize
一个 DeepSeek Harness 插件:文件交付的那一刻跑一次检查,别的地方都不出现。它清掉文档库留下的生成器指纹、重算真正能算准的统计字段,并把不能靠编造解决的东西收进侧边面板,而不是写进文件里。
设计原则:只修可以证明是错的东西,绝不伪造证据。
编辑时长、修订历史、批注、"本文由人撰写"这类声明,一律只报告、不写入。Application 字段是删掉,不是改成假的 Microsoft Office Word 16.0——缺失很平常,撒谎会和包里其它字段自相矛盾。
为什么做这个
python-docx、python-pptx、openpyxl、LibreOffice 生成的文件自带"出生证明":作者字段写着库名、创建时间是 2013 年的模板日期、四十页的报告 Words=0、还留着一张模板缩略图。这些是 bug,不是风格,任何人解压就能看见。
而常见的建议——伪造编辑时长、编一个修订次数——只会更糟:它和你改不动的字段(rsid 痕迹、真实保存历史)直接冲突,一查就穿。这个插件只做诚实的那一半:把错的改对,把只有人才能提供的收进面板。
展开完整文档(README 剩余 1 节)
dsh-finalize
一个 DeepSeek Harness 插件:文件交付的那一刻跑一次检查,别的地方都不出现。它清掉文档库留下的生成器指纹、重算真正能算准的统计字段,并把不能靠编造解决的东西收进侧边面板,而不是写进文件里。
设计原则:只修可以证明是错的东西,绝不伪造证据。
编辑时长、修订历史、批注、"本文由人撰写"这类声明,一律只报告、不写入。Application 字段是删掉,不是改成假的 Microsoft Office Word 16.0——缺失很平常,撒谎会和包里其它字段自相矛盾。
为什么做这个
python-docx、python-pptx、openpyxl、LibreOffice 生成的文件自带"出生证明":作者字段写着库名、创建时间是 2013 年的模板日期、四十页的报告 Words=0、还留着一张模板缩略图。这些是 bug,不是风格,任何人解压就能看见。
而常见的建议——伪造编辑时长、编一个修订次数——只会更糟:它和你改不动的字段(rsid 痕迹、真实保存历史)直接冲突,一查就穿。这个插件只做诚实的那一半:把错的改对,把只有人才能提供的收进面板。
它做什么
| 格式 | 自动修 | 只报告,不代填 |
| docx | 作者与描述、模板日期、Application/AppVersion、字数/字符数/段落数/行数、模板缩略图 | TotalTime=0、没有批注、没有修订痕迹、页数 |
| pptx | 同套 core 属性、幻灯片/备注/隐藏页统计、字数 | 没有演讲者备注、裁剪图片的原图仍在 ppt/media、隐藏幻灯片 |
| xlsx | core 属性、TitlesOfParts 与实际 sheet 名对齐 | 全表 0 条公式、透视缓存残留已删除的数据、外部链接、隐藏工作表 |
| odt ods odp | meta:generator、作者、日期、meta:document-statistic、缩略图及其 manifest 条目 | meta:editing-duration=PT0S、只保存过一次、没有批注、没有修订 |
| pdf | 什么都不改——只读 | Producer/Creator/XMP、增量更新、缺少书签、数字签名 |
一次交付多个文件,会逐个独立处理;同一会话里多次交付,30 分钟内合并成一份报告,而不是互相覆盖。
安装
这是一个 DSH bundle:带 dsh.bundle.patch 的普通包,没有构建步骤,也没有运行时依赖。
git clone https://github.com/hengyun721/dsh-finalize.git
dsh plugin --profile desktop add /绝对路径/dsh-finalize
也可以在 Harness 内用插件管理器安装该目录(install_bundle,target 指向上面的绝对路径)。如果提示 restart-required,重启一次。
使用
不需要调用任何东西。用 present(或已配置的传输)交付文件,检查在工具真正执行之前跑完,文件落盘时已经是处理过的。
消息操作栏里会出现一个盾牌图标,和复制 / 赞 / 踩 / 分支并排:
| 状态 | 含义 |
| 灰色 | 本会话还没有交付记录 |
| 琥珀色带数字 | 有这么多项需要人工处理 |
| 点击 | 打开面板,按文件列出「已修 / 待人工 / 只读」 |
面板里还有一个扫描最近文件:不用交付,直接对工作区里最新的 Office 文件跑一遍。文档是脚本生成、没走 present 的时候用这个。
配置
- id: dsh-finalize
name: 'dsh-finalize'
config:
author: ''
triggerTools: [present, qqbot_send_file]
formats: [docx, pptx, xlsx, pdf, odt, ods, odp]
scanLimit: 5
autoFix:
stripGeneratorFields: true
dropApplicationField: true
recomputeStats: true
report:
surface: panel
| 配置项 | 类型 | 默认值 | 说明 |
| author | string | '' | 写入 dc:creator、lastModifiedBy、meta:initial-creator。留空表示只清除库名,不编造人名。 |
| triggerTools | string[] | present、qqbot_send_file | 触发检查的交付工具。 |
| formats | string[] | 全部七种 | 适配器白名单,其余格式标记为 skipped。 |
| scanLimit | number | 5 | 「扫描最近文件」一次处理多少个文件。 |
| autoFix.stripGeneratorFields | boolean | true | 移除库名和 generated by … 描述。 |
| autoFix.dropApplicationField | boolean | true | 删除 Application/AppVersion,而不是伪造 Office 版本号。 |
| autoFix.recomputeStats | boolean | true | 按正文重算字数、字符数、段落数。 |
| report.surface | panel \| silent | panel | 是否渲染操作栏按钮。 |
仓库结构
| 路径 | 职责 |
| index.js | Host 半边。在交付工具上挂 tools/pre-execute,按扩展名把文件路由到适配器,合并同一会话的报告,并提供 /api/finalize.report 与 /api/finalize.scan。不注册工具、不写提示词。 |
| client.js | 客户端半边。把盾牌按钮注册进 conversation.chat.assistant-actions,渲染报告面板(固定覆盖层、使用主题变量、不越界写 DOM)。 |
| lib/office.js | 格式引擎,零依赖。ZIP 读写(node:zlib)、OOXML 适配器(docx/pptx/xlsx)、ODF 适配器(odt/ods/odp)、只读 PDF 检查器。 |
| cordis.patch.yml | bundle 补丁:插入 dsh-finalize 插件行和默认配置。install_bundle 应用到 profile 的就是它。 |
| package.json | 包清单:dsh.bundle.patch、Web 半边声明(platform、immediately、inject)、导出表、check / test 脚本。 |
| locale/en.json、locale/zh.json | 插件管理器与设置页读取的展示信息(meta.title、meta.description),无需激活插件即可读取。 |
| icon.svg | 原创插件图标(文档 + 对勾),用于插件列表和 bundle 详情。 |
| test/smoke.test.mjs | 四个 node:test 用例:ODF 重写、docx 重写、PDF 检查器、非 ZIP 输入拒绝。fixture 全在内存构建,不落盘。 |
| .github/workflows/ci.yml | push / PR 时的 CI:Node 20,先 npm run check,再 npm test。 |
| CHANGELOG.md | 变更记录(Keep a Changelog 格式)。 |
| LICENSE | MIT 许可。 |
| README.md | 英文说明。 |
| README.zh.md | 本文件。 |
引擎结构
lib/office.js 刻意保持单文件、扁平 API:
| 符号 | 作用 |
| readZip(buffer) | 解析中央目录,得到 { name, data, time, date }。不支持 ZIP64。 |
| writeZip(entries) | 用 deflateRaw 重新打包。名为 mimetype 的条目保持不压缩且位置不变——ODF 的硬性要求。 |
| finalizeDocx / finalizePptx / finalizeXlsx | OOXML 适配器,共用 fixCore、stripApplication、dropThumbnail、commonUnresolved。 |
| finalizeOdf | 基于 meta.xml 与 META-INF/manifest.xml 的 ODF 适配器。 |
| inspectPdf | 正则级 PDF 检查器,只返回观察结果,绝不改写字节。 |
| finalizeOffice(bytes, kind, options) | Host 半边调用的分发入口。 |
兼容性
设计上就是为了和别的插件共存,不改变它们的行为。
- 不注册工具、不写提示词:模型的工具列表和系统提示词都不变,token 计算和工具选择不受影响。
- 只有一个被动监听器:tools/pre-execute 只在配置的交付工具上触发,永远 return next(),自身异常被吞掉,既挡不住也改不了别的工具调用。
- 不绑定传输层:钩的是交付工具,不是 QQ / Web / CLI 通道,换传输照常工作。
- 命名空间独立:路由是 /api/finalize.report 和 /api/finalize.scan,slot id 是 dsh-finalize,与官方的 deliverables、changes.*、presented 都不冲突。
- 调试默认关闭:不开 DSH_FINALIZE_DEBUG=1 时,除被交付的文件外不写任何文件。
已知限制
- 页数需要排版引擎,插件只报不猜。
- ODF 只改 meta.xml 和 manifest 里的缩略图条目,其它不动;结构已验证,但 CI 不覆盖"用 LibreOffice 实际打开"。
- 旧二进制格式(doc、xls、ppt)、rtf、ipynb 未实现。其中 doc 在 PIDSI_EDITTIME 里存的是真实累计编辑时长,值得优先补上。
- 这不是作者身份检测工具,也不声称文件"看起来像人写的"。它只做两件事:去噪、报矛盾。
调试
启动 Harness 前设置 DSH_FINALIZE_DEBUG=1,会在系统临时目录写入 dsh-finalize.log 和 dsh-finalize-last.json。默认关闭,不会往工作区写东西。
开发
npm run check # 对三个运行时文件做 node --check
npm test # 四个单测,无依赖
npm test 以进程内方式运行测试文件,所以在禁止派生进程的沙箱终端里也能跑。
许可
MIT,见 LICENSE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
hengyun721/dsh-finalize
清除文档生成器指纹并重算真实统计,只报告不伪造
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,330已汉化DeepSeek 客户端
74.5
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,349已汉化DSH
71.6
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,311已汉化DSH
71.4
智能体运行框架路由HarnessRouter/harnessrouter
智能体 harness 的统一接口。
★ 3,984已汉化DSH
71.3
这是你的仓库?认领条目