dsh-patent-draft-revision
Verifieddsh-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 |
技能 | 把修改意见翻译成修订计划的完整流程与边界说明 |
三条硬保证
- 只写修订,不写直接修改。 工具只生成 OOXML 修订标记。写出前会把自己产出的包重新读回来,拒绝本次全部修订后,文字必须与初稿逐字一致;不通过就报错、不落盘(
verified: true表示该自检已通过)。 - 原稿永不改动。
outputPath与inputPath相同时直接拒绝;省略outputPath时在初稿同目录生成「原名(修订稿).docx」。 - 修订人恒为「专利」。 在
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 不属于运行时,删除它们不影响插件。