dsh-finalize: Pre-delivery Office Metadata Cleanup

前言

在 DeepSeek Harness(DSH)里用 python-docx、python-pptx、openpyxl 或 LibreOffice 生成 docx、pptx、xlsx 时,文件里常会留下库名、Words=0、模板日期、Application 字段等一眼可辨的「工具指纹」。常见做法是伪造编辑时间或修订次数,但这与无法改动的 rsid、真实保存历史矛盾,解压 XML 即可识破。

下面介绍社区插件 dsh-finalize(维护者 hengyun721,分类:工作流)。它在文件交付的瞬间做一次 finalize pass,且只在这一处运行:能证明有误的元数据做规范化,能重算的统计量从正文重算,不会伪造的内容写入侧栏报告,而不是写进文件。设计原则是:fix what is provably wrong, never invent evidence。

这是什么

dsh-finalize 是 DeepSeek Harness 的 bundle 插件(MIT,当前 package 版本 0.3.0,Node >= 20)。它不注册新 tool、不注入 prompt 段落,通过 tools/pre-execute 钩子在配置的交付工具执行之前处理磁盘上的文件。

目录页:skillhub.cn/plugins/hengyun721/dsh-finalize
源码:github.com/hengyun721/dsh-finalize

社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,安装前请自行审阅源码与许可证。

核心功能

自动修复与仅报告项

各格式行为以 README 表格为准,摘要如下。

格式 自动处理 只报告、不写入
docx creator/description、模板日期、Application/AppVersion、字数/字符/段落/行数、模板缩略图 TotalTime=0、缺批注/修订、页数
pptx 同上核心属性,幻灯片/备注/隐藏页计数、字数 无演讲者备注、裁剪图仍在 media、隐藏页
xlsx 核心属性、TitlesOfParts 与表名对齐 零公式、pivot 缓存、外链、隐藏表
odt / ods / odp meta:generator、creator、日期、document-statistic、缩略图及 manifest editing-duration=PT0S、单次保存、无批注/修订
pdf 只读,不改字节 Producer/Creator/XMP、增量更新、缺书签、签名等

Application 字段是删除,而不是替换成假的 Microsoft Office Word 16.0 字符串。

会话与 UI

同一次交付中的多个文件各自处理;同一会话内 30 分钟内的多次交付会合并为一份报告,避免互相覆盖。

用 present(或配置的 transport)交付文件时,无需额外调用,pass 在工具执行前完成,收件人拿到的已是规范化后的文件。

助手消息操作行(复制 / 赞 / 踩 / 分支旁)会出现盾牌图标:

状态 含义
灰色 本会话尚无交付
琥珀色带数字 有这么多项需人工处理
点击 面板展示各文件的 fixed / open / read-only

面板还提供 Scan recent files:对工作目录下最新的 Office 文件跑一遍 pass,适合脚本直接落盘、未走 present 的情况。

安装与启用

插件为 DSH bundle(含 dsh.bundle.patch),无构建步骤、无运行时 npm 依赖。官方 README 给出的安装方式为本地目录安装(需先取得仓库到本机,安装命令如下,勿凭插件名拼接 dsh plugin add github:owner/repo):

git clone https://github.com/hengyun721/dsh-finalize.git
dsh plugin --profile desktop add /absolute/path/to/dsh-finalize

也可在 Harness 内用插件管理器的 install_bundle,target 为上述绝对路径。若提示 restart-required,重启一次 DSH。

配置

默认配置通过 cordis.patch.yml 写入 profile,可在设置中覆盖。示例:

- 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 写入 dc:creator、lastModifiedBy、meta:initial-creator;空字符串会清掉生成器名,不虚构人名
triggerTools 触发 pass 的交付工具,默认 present、qqbot_send_file
formats 适配器白名单,其余格式在报告中为 skipped
scanLimit 「Scan recent files」处理的最近文件数量,默认 5
autoFix.* 是否 strip 生成器字段、删除 Application、重算统计
report.surface panel 显示盾牌;silent 不渲染按钮

典型用法

  1. 按上文安装并重启(如需要)。
  2. 在 DSH 中让智能体生成或修改 docx/pptx/xlsx 等,通过 present 交付。
  3. 交付前 pass 已改写 ZIP/ODF 内可证伪的元数据;点击盾牌查看仍须人工补充或只读观察的项。
  4. 若文件是外部脚本写入工作目录,可在面板用 Scan recent files 补跑一遍。

Host 侧还提供 /api/finalize.report 与 /api/finalize.scan;格式引擎在依赖-free 的 lib/office.js 中实现。

适用场景与注意

适合: 经常通过 DSH 交付 Office/ODF 文档、希望去掉库指纹并重算真实字数统计,同时接受「编辑时长、页数、批注」等无法诚实自动填写的项以报告形式呈现的团队或个人。

注意:

  • 插件以当前 DSH 进程权限读写工作目录与交付路径,安装前应阅读 index.js、lib/office.js 及 LICENSE。
  • PDF 仅检测报告,不修改文件。
  • 与同 profile 其他插件并列安装时,不改变其 tool 与 prompt 行为(README Compatibility 节)。

结尾

dsh-finalize 把「交付前最后一遍元数据卫生」收进 DSH 工作流:能改的改对,不能编的进面板。进一步了解可访问 插件目录页 与 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye