Skip to content

dsh-patent-draft-revision

Verified

dsh-patent-draft-revision · v1.1.3 · MIT

DSH 插件:按修改意见修改专利申请文件初稿(.docx),所有改动均以 Word 修订呈现(修订人「专利」),原稿不动,机制上禁止直接修改。

Install

dsh plugin add dsh-patent-draft-revision

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Creators

Readme

专利初稿参照意见修改

一个 DeepSeek Harness(DSH)插件:按修改意见修改专利申请文件初稿(.docx),所有改动都以 Word 修订呈现,修订人默认为「专利」,原稿不动,并且从机制上禁止"直接修改"。

安装

方式一:npm(推荐,不需要本机安装 git)

DSH 桌面端 → 侧栏「插件」→「添加插件」,输入:

dsh-patent-draft-revision

方式二:从 Gitee 仓库安装(需要本机已安装 git;地址必须带结尾的 .git)

https://gitee.com/hc905/dsh-patent-draft-revision.git

不带 .git 的裸地址(https://gitee.com/hc905/dsh-patent-draft-revision)会被 pnpm 当成 tarball 去解包,报 ERR_PNPM_TARBALL_EXTRACT;实测 pnpm 11.7.0 必须带 .git。

装完重启 DSH。

方式三:本地路径(离线包)

link:<解压目录>/plugins/dsh-patent-draft-revision

注意:同一台机器不要同时安装 @local/ 版本和 npm 版本——两者的挂载 id 相同,会冲突。


它提供什么

名称 类型 作用
patent_draft_read 工具 读初稿,返回 1 起算的段号、样式、文字、表格归属;只读
patent_revision_apply 工具 按修订计划生成修订稿,全部写成 w:ins / w:del
patent_draft_verify 工具 校验"拒绝制定修订人的全部修订后文字须与来源文件完全一致"
patent-draft-revision 技能 把修改意见翻译成修订计划的完整流程与边界说明

三条硬保证

  1. 只写修订,不写直接修改。 工具只生成 OOXML 修订标记。写出前会把自己产出的包重新读回来,拒绝本次全部修订后,文字必须与初稿逐字一致;不通过就报错、不落盘(verified: true 表示该自检已通过)。
  2. 原稿永不改动。 outputPath 与 inputPath 相同时直接拒绝;省略 outputPath 时在初稿同目录生成「原名(修订稿).docx」。
  3. 修订人恒为「专利」。 在 cordis.patch.yml 的 config.author 中可改,工具参数 author 可单次覆盖;除此之外不会写入其他修订人。

修订计划的操作

op 用途
replace_text 段内替换(find / replace / occurrence),留空 replace 即删除
replace_paragraph 整段重写,自动算最小字符差异,生成细粒度修订
insert_text 段内插入(anchor 之后,或 position: start | end)
insert_paragraph_after 新增整段(text 含换行则拆成多段,可用 style)
delete_paragraph 删除整段(含段落标记,接受后该段消失)

段号始终以初稿为准,与 patent_draft_read 的 index 一致,同一次调用中先删段再引用其他段也不会错位。

修订计划怎么传

patent_revision_apply 接受两种传法,二选一:

传法 参数 适用
内联数组 revisions: [ … ] 几条到几十条
计划文件 revisionsPath: "<plan.json>" 上百条(例如 208 条 / 43KB 的整篇译文修订),避免把整个计划写进调用参数

计划文件的内容是一个 revisions 数组,或含 revisions 数组的对象,两者都接受。

安装

由 DSH 的 plugin_manager 以 bundle 形式安装(本插件声明了 dsh.bundle.patch):

plugin_manager({ action: "install_bundle", target: "<本目录的绝对路径>" })

手动安装等价于在 profile 目录($DSH_PROFILE_DIR)执行:

pnpm add <本目录的绝对路径>
node tools/add-profile-bundle.mjs <profile 目录>        # 等价于 install_bundle 的 bundle 选择步骤

然后重启 Harness。装完可以用 tools/verify-profile-install.mjs 复核(见"测试")。

设计要点

  • 零第三方依赖。 lib/zip.js 用 node:zlib 实现最小 ZIP 读写,lib/xml.js 实现保真 XML 树。
  • peerDependencies 是模块解析的开关,不是可选项。 profile 安装的是符号链接,插件的真实路径在 profile 之外,Harness 的解析层(dsh-app-boot 的 profile-resolution-bootstrap)只有在包的 peerDependencies 里看见某个 @deepseek-ai/* 名字时,才会把该裸导入拦截到安装目录的副本。所以 dependencies 必须为空(避免 pnpm 去下载),而三个被导入的包必须写进 peerDependencies。漏一个,插件会静默地激活失败——test/plugin-load.mjs 里有一条机械检查:源码里出现的每个 @deepseek-ai/* 导入都必须被 peerDependencies 覆盖,反之亦然。
  • 保真改动。 只重写 word/document.xml(以及可选的 word/settings.xml),其余部件按原字节回写;未触及的文本节点原样序列化。拆分 run 时继承原 w:rPr,加粗/颜色等字符格式在删除与插入两侧都保留。
  • 遵守会话文件策略。 fs 服务的写操作按约定只支持文本,无法写 docx,因此插件直接用 node:fs,但会读取 ctx.sandboxPolicy:read-only 时拒绝写出,workspace-write 时拒绝写到工作区之外。
  • 段落标记修订被正确建模。 文本投影实现"拒绝插入的段落标记 / 接受删除的段落标记即与下一段合并"的语义,因此新增段、删除段的"拒绝全部修订"结果也能逐字还原。

已知边界

  • 只处理正文 word/document.xml;页眉、页脚、脚注、批注中的文字不在范围内。
  • 含制表符、换行、图片的复杂文本块不能被从中断开,会给出明确报错。
  • 不支持 .doc 旧格式;不支持 ZIP64(4 GiB 以上)。
  • 文档中已有的他人修订原样保留,报告里以 foreignRevisions 提示。

测试

# 引擎与端到端(纯 Node):44 项
<node> test/run-tests.mjs

# 与真实 Harness API 对齐(Electron 以 Node 模式运行,才能读 app.asar):manifest / locale /
# cordis.patch.yml / defineTool 编译 / 技能提供者契约 / 三个工具端到端 / 文件策略
$env:ELECTRON_RUN_AS_NODE = '1'
& '<...>\DeepSeek Harness.exe' --import ./test/register-shim.mjs ./test/plugin-load.mjs

# 独立实现(Python + lxml)复核"拒绝全部修订 = 原文"
<python> test/verify-with-lxml.py test/sample-初稿.docx test/sample-修订稿.docx

# 复核安装:组合出的 profile 里是否有且仅有一行本插件,以及运行时解析是否会把
# 三个 peer 包拦截到安装目录
$env:ELECTRON_RUN_AS_NODE = '1'
& '<...>\DeepSeek Harness.exe' --import ./test/register-shim.mjs ./tools/verify-profile-install.mjs `
    "$env:DSH_PROFILE_DIR" 'D:\App\Deepseek\resources\app.asar\dsh\package.json'

test/make-sample.py 生成样例初稿(含表格与带字符格式的 run),test/preview/ 是 LibreOffice 渲染出的修订效果。

卸载

pnpm remove @local/dsh-patent-draft-revision     # 在 profile 目录执行

再把包名从 package.json 的 dsh.profile.bundles 中删掉,重启 Harness。test/、tools/、README.md 不属于运行时,删除它们不影响插件。