gongwen-skill 2.8.0 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -44,6 +44,8 @@ metadata:
44
44
  | **dsh** | 加载 SKILL.md + cordis 插件,可执行命令、有 Web UI | 加载 skill 后调用 CLI 命令,或通过 DSH 插件 API 调用;配置面板可调整排版参数 |
45
45
  | **dialogue-only** | 纯对话,**不能执行命令** | 不应直接执行命令,应引导用户手动操作;同时可读取项目内的文字性资源库(`prompts/style-prompts.md`、`prompts/usage-prompts.md`、`rules/official/*.yaml`、`SKILL.md` 等)作为公文写作指导的知识库,在对话中提供用词用语、写作规范、风格指引等专业建议;参考 README.md 中的「纯对话 LLM 使用指引」
46
46
 
47
+ > **格式兼容性**:工具链基于 OOXML(`.docx`),**不支持旧版 `.doc`(OLE2/WPS 二进制格式)**。用户提供 `.doc` 文件时,Agent 应先用 WPS/Word「另存为 .docx」;本机装有 WPS 时可用 COM 转换:`KWPS.Application` → `Documents.Open(src)` → `SaveAs(dst, 12)`(WPS 枚举 12 = OOXML),再走 `check/optimize/optimize-content` 全流程。
48
+
47
49
  ### 二、聚合禁令(违反任一条即为不合格执行)
48
50
 
49
51
  ```
@@ -186,7 +188,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
186
188
 
187
189
  - **路径 A - 格式修复**:用户有文档,只需排版标准化(GB/T 9704),不改文字内容
188
190
  - **路径 B - 内容优化**:用户有文档,需要润色文字并生成修订对比版(原稿 vs 优化稿,红色标注修改处)
189
- - **路径 C - 生成公文**:用户没有文档,根据背景和要求从零生成新的公文。四步流程:编写 Markdown 草稿 → md2docx 转换 → 引用路径 A optimize 套国标格式 → check 验证交付。
191
+ - **路径 C - 生成公文**:用户没有文档,根据背景和要求从零生成新的公文。四步流程:编写 Markdown 草稿 → md2docx 转换 → 引用路径 A optimize 套国标格式 → check 验证交付;也可用 `gongwen draft 草稿.md -o 成品.docx -t 类型` 一条命令完成(含自动格式修复 + 验证)。
190
192
  - **路径 D - 一键格式修复**(`fix-common` 新增):用户有文档,只需快速规范化常见格式问题(段落类型修正/编号拆分/首句加粗/加粗范围修复),一步到位,输出不含 AI 声明段的干净文档。与路径 A 的区别:不依赖规则引擎、不追加 AI 声明段,适合对"干净中间稿"做最终格式规范化。
191
193
  - **路径 E - 样式学习**(`style-learn` 新增):用户提供一份**标准文档**(如本单位定稿的红头公文/排版规范的样例),要求"学习排版样式""按这个格式生成模板""做成模板以后都用这个格式"。Agent 应调用 `style-learn` 解析文档的字体/字号/字间距/行距/缩进/页边距,生成命名自定义模板(注册到 user_rules),后续所有文档可用 `optimize -t 模板名` 套用该格式。
192
194
 
@@ -242,7 +244,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
242
244
  │
243
245
  ├─ 包含"生成/写/起草" + 未指定已有文档
244
246
  │ └── 识别为路径 C(生成公文)
245
- │ └── 必须走 md2docx → [bold-first] → optimize → check
247
+ │ └── 必须走 md2docx → [bold-first] → optimize → check(或 `draft 草稿.md -o 成品.docx -t 类型` 一步到位)
246
248
  │
247
249
  └─ 不确定
248
250
  └── 必须追问用户:是改格式还是改内容?不得猜测路径直接执行
@@ -259,7 +261,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
259
261
 
260
262
  ## 用户交互指引(Agent 必须遵守)
261
263
 
262
- > **终端用户也可直接运行 `python -m gongwen wizard`**:交互式向导以菜单方式完成同样的 A/B/C/D 路径选择与逐步确认(详见下文「向导式交互」小节)。Agent 读到本条时,若用户表示「不熟悉命令/不想记参数」,应主动引导其使用向导,而非逐字念命令行参数。
264
+ > **终端用户也可直接运行 `python -m gongwen wizard`**:交互式向导以菜单方式完成同样的 A/B/C/D/E 路径选择与逐步确认(详见下文「向导式交互」小节)。Agent 读到本条时,若用户表示「不熟悉命令/不想记参数」,应主动引导其使用向导,而非逐字念命令行参数。
263
265
 
264
266
  ### 第一步:确认路径(必须,严禁跳过)
265
267
 
@@ -288,12 +290,12 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
288
290
  当用户**不熟悉命令行**、希望**逐步确认后再执行**,或 Agent 需要**把交互决策委托给工具**时,使用向导:
289
291
 
290
292
  ```
291
- python -m gongwen wizard # 终端交互:菜单选 A/B/C/D → 逐项填参 → 预览确认 → 执行
293
+ python -m gongwen wizard # 终端交互:菜单选 A/B/C/D/E → 逐项填参 → 预览确认 → 执行
292
294
  python -m gongwen wizard --answers 答案.json # Agent 非交互:跳过提问直接执行
293
295
  python -m gongwen wizard --answers 答案.json --dry-run # 只打印将执行的命令,不真正执行
294
296
  ```
295
297
 
296
- - **路径菜单**:A 格式优化(`optimize`)|B 内容优化(`optimize-content`)|C 生成模板(`template`)|D 一键格式修复(`fix-common`)
298
+ - **路径菜单**:A 格式优化(`optimize`)|B 内容优化(`optimize-content`)|C 生成模板(`template`)|D 一键格式修复(`fix-common`)|E 样式学习(`style-learn`)
297
299
  - **交互流程**:选择路径 → 收集参数(公文类型支持 序号 / id / 中文名,如 `1`、`notice`、`通知`)→ A/B/D 先预览再 y/n 确认 → 执行;C 无修改风险直接执行
298
300
  - **`--answers` JSON 扁平结构**(Agent 场景,顶层带 `path`):
299
301
  ```json
@@ -321,7 +323,7 @@ python -m gongwen wizard --answers 答案.json --dry-run # 只打印将执行
321
323
  | "按上级文件要求调整" | 用户有政策依据但未提供 | 追问具体文件名或文号,或用 web 搜索相关政策 |
322
324
  | "弄漂亮一点" | 希望格式规范 | 解释 GB/T 9704 标准是唯一合规格式 |
323
325
 
324
- **原则**:不确定时 **先确认路径**(A/B/C/D,向导模式同),再用 **具体示例引导用户选择**,不猜测。
326
+ **原则**:不确定时 **先确认路径**(A/B/C/D/E,向导模式同),再用 **具体示例引导用户选择**,不猜测。
325
327
 
326
328
  #### 2. 充分利用 skill 知识库
327
329
 
@@ -872,7 +874,7 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
872
874
 
873
875
  ---
874
876
 
875
- ## 附录:全部命令速查(25 个,按用途分组)
877
+ ## 附录:全部命令速查(29 个,按用途分组)
876
878
 
877
879
  > Agent 遇到用户需求时,先在此表定位对应命令;命令用法不明确时运行 `python -m gongwen <命令> --help` 查看完整参数。
878
880
 
@@ -880,7 +882,7 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
880
882
 
881
883
  | 命令 | 用途 | 最小用法 |
882
884
  |------|------|---------|
883
- | `wizard` | 交互式路径引导(A/B/C/D)+ 一键执行;Agent 用 `--answers` 非交互 / `--dry-run` 只打印命令 | `python -m gongwen wizard` |
885
+ | `wizard` | 交互式路径引导(A/B/C/D/E)+ 一键执行;Agent 用 `--answers` 非交互 / `--dry-run` 只打印命令 | `python -m gongwen wizard` |
884
886
 
885
887
  ### 🏗️ 生成与模板
886
888
 
@@ -889,7 +891,8 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
889
891
  | `list-types` | 列出 24 种支持的公文类型 | `python -m gongwen list-types` |
890
892
  | `template` | 按类型生成 GB/T 9704 空白模板 | `python -m gongwen template notice -o 通知.docx` |
891
893
  | `generate` | 从 DocumentModel JSON 生成 .docx | `python -m gongwen generate 模型.json -o 公文.docx` |
892
- | `md2docx` | Markdown 草稿 → 格式化公文 | `python -m gongwen md2docx 草稿.md -o 公文.docx -t notice` |
894
+ | `md2docx` | Markdown 草稿 → 格式化公文(初稿) | `python -m gongwen md2docx 草稿.md -o 公文.docx -t notice` |
895
+ | `draft` | Markdown 草稿 → 国标成品 + 验证(路径 C 四步合一) | `python -m gongwen draft 草稿.md -o 成品.docx -t notice` |
893
896
  | `style-learn` | 从标准文档学习排版样式生成模板 | `python -m gongwen style-learn 标准.docx -n 模板名` |
894
897
  | `style-list` | 列出已学习的自定义样式模板 | `python -m gongwen style-list` |
895
898
 
@@ -905,9 +908,9 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
905
908
 
906
909
  | 命令 | 用途 | 最小用法 |
907
910
  |------|------|---------|
908
- | `optimize` | 检查+修复+生成(默认预览,--apply 执行) | `python -m gongwen optimize 公文.docx -o 成品.docx --apply` |
911
+ | `optimize` | 检查+修复+生成(默认预览,--apply 执行;`--verify` 单命令闭环自动复查输出、P0 存在时退出码非 0;`--json` 结构化输出) | `python -m gongwen optimize 公文.docx -o 成品.docx --apply --verify` |
909
912
  | `fix-common` | 一键修复常见格式问题(路径 D) | `python -m gongwen fix-common 公文.docx -o 成品.docx` |
910
- | `optimize-content` | 内容优化:修订+批注对比版(路径 B) | `python -m gongwen optimize-content 原文.docx --changes 修订.json --apply` |
913
+ | `optimize-content` | 内容优化:修订+批注对比版(路径 B;`--precheck` 预检 changes 与原文一致性、`--preset quick/full/review` 参数收敛) | `python -m gongwen optimize-content 原文.docx --changes 修订.json --apply --preset full` |
911
914
  | `full-review` | 完整审校:格式修复→内容优化→批注,一条命令 | `python -m gongwen full-review 公文.docx -o 成品.docx` |
912
915
  | `bold-first` | 正文段落首句加粗(公文规范) | `python -m gongwen bold-first 公文.docx -o 成品.docx` |
913
916
 
@@ -1950,7 +1953,7 @@ python -m gongwen check 成品.docx -t <类型> --json
1950
1953
 
1951
1954
  第二步至第四步使用同一 `-t` 类型。
1952
1955
 
1953
- > **推荐做法**:Agent 先根据用户需求在对话中生成 Markdown 草稿(使用下方段落模板),再走上述四步流程生成格式化成品并验证合规。
1956
+ > **推荐做法**:Agent 先根据用户需求在对话中生成 Markdown 草稿(使用下方段落模板),再走上述四步流程生成格式化成品并验证合规;需要一步到位时可直接 `python -m gongwen draft 草稿.md -o 成品.docx -t <类型>`(自动完成格式修复 + check 验证,P0 存在时退出码非 0)。
1954
1957
 
1955
1958
  ### 路径 C / 交付后的用户修改处理
1956
1959
 
@@ -44,6 +44,8 @@ metadata:
44
44
  | **dsh** | 加载 SKILL.md + cordis 插件,可执行命令、有 Web UI | 加载 skill 后调用 CLI 命令,或通过 DSH 插件 API 调用;配置面板可调整排版参数 |
45
45
  | **dialogue-only** | 纯对话,**不能执行命令** | 不应直接执行命令,应引导用户手动操作;同时可读取项目内的文字性资源库(`prompts/style-prompts.md`、`prompts/usage-prompts.md`、`rules/official/*.yaml`、`SKILL.md` 等)作为公文写作指导的知识库,在对话中提供用词用语、写作规范、风格指引等专业建议;参考 README.md 中的「纯对话 LLM 使用指引」
46
46
 
47
+ > **格式兼容性**:工具链基于 OOXML(`.docx`),**不支持旧版 `.doc`(OLE2/WPS 二进制格式)**。用户提供 `.doc` 文件时,Agent 应先用 WPS/Word「另存为 .docx」;本机装有 WPS 时可用 COM 转换:`KWPS.Application` → `Documents.Open(src)` → `SaveAs(dst, 12)`(WPS 枚举 12 = OOXML),再走 `check/optimize/optimize-content` 全流程。
48
+
47
49
  ### 二、聚合禁令(违反任一条即为不合格执行)
48
50
 
49
51
  ```
@@ -186,7 +188,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
186
188
 
187
189
  - **路径 A - 格式修复**:用户有文档,只需排版标准化(GB/T 9704),不改文字内容
188
190
  - **路径 B - 内容优化**:用户有文档,需要润色文字并生成修订对比版(原稿 vs 优化稿,红色标注修改处)
189
- - **路径 C - 生成公文**:用户没有文档,根据背景和要求从零生成新的公文。四步流程:编写 Markdown 草稿 → md2docx 转换 → 引用路径 A optimize 套国标格式 → check 验证交付。
191
+ - **路径 C - 生成公文**:用户没有文档,根据背景和要求从零生成新的公文。四步流程:编写 Markdown 草稿 → md2docx 转换 → 引用路径 A optimize 套国标格式 → check 验证交付;也可用 `gongwen draft 草稿.md -o 成品.docx -t 类型` 一条命令完成(含自动格式修复 + 验证)。
190
192
  - **路径 D - 一键格式修复**(`fix-common` 新增):用户有文档,只需快速规范化常见格式问题(段落类型修正/编号拆分/首句加粗/加粗范围修复),一步到位,输出不含 AI 声明段的干净文档。与路径 A 的区别:不依赖规则引擎、不追加 AI 声明段,适合对"干净中间稿"做最终格式规范化。
191
193
  - **路径 E - 样式学习**(`style-learn` 新增):用户提供一份**标准文档**(如本单位定稿的红头公文/排版规范的样例),要求"学习排版样式""按这个格式生成模板""做成模板以后都用这个格式"。Agent 应调用 `style-learn` 解析文档的字体/字号/字间距/行距/缩进/页边距,生成命名自定义模板(注册到 user_rules),后续所有文档可用 `optimize -t 模板名` 套用该格式。
192
194
 
@@ -242,7 +244,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
242
244
  │
243
245
  ├─ 包含"生成/写/起草" + 未指定已有文档
244
246
  │ └── 识别为路径 C(生成公文)
245
- │ └── 必须走 md2docx → [bold-first] → optimize → check
247
+ │ └── 必须走 md2docx → [bold-first] → optimize → check(或 `draft 草稿.md -o 成品.docx -t 类型` 一步到位)
246
248
  │
247
249
  └─ 不确定
248
250
  └── 必须追问用户:是改格式还是改内容?不得猜测路径直接执行
@@ -259,7 +261,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
259
261
 
260
262
  ## 用户交互指引(Agent 必须遵守)
261
263
 
262
- > **终端用户也可直接运行 `python -m gongwen wizard`**:交互式向导以菜单方式完成同样的 A/B/C/D 路径选择与逐步确认(详见下文「向导式交互」小节)。Agent 读到本条时,若用户表示「不熟悉命令/不想记参数」,应主动引导其使用向导,而非逐字念命令行参数。
264
+ > **终端用户也可直接运行 `python -m gongwen wizard`**:交互式向导以菜单方式完成同样的 A/B/C/D/E 路径选择与逐步确认(详见下文「向导式交互」小节)。Agent 读到本条时,若用户表示「不熟悉命令/不想记参数」,应主动引导其使用向导,而非逐字念命令行参数。
263
265
 
264
266
  ### 第一步:确认路径(必须,严禁跳过)
265
267
 
@@ -288,12 +290,12 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
288
290
  当用户**不熟悉命令行**、希望**逐步确认后再执行**,或 Agent 需要**把交互决策委托给工具**时,使用向导:
289
291
 
290
292
  ```
291
- python -m gongwen wizard # 终端交互:菜单选 A/B/C/D → 逐项填参 → 预览确认 → 执行
293
+ python -m gongwen wizard # 终端交互:菜单选 A/B/C/D/E → 逐项填参 → 预览确认 → 执行
292
294
  python -m gongwen wizard --answers 答案.json # Agent 非交互:跳过提问直接执行
293
295
  python -m gongwen wizard --answers 答案.json --dry-run # 只打印将执行的命令,不真正执行
294
296
  ```
295
297
 
296
- - **路径菜单**:A 格式优化(`optimize`)|B 内容优化(`optimize-content`)|C 生成模板(`template`)|D 一键格式修复(`fix-common`)
298
+ - **路径菜单**:A 格式优化(`optimize`)|B 内容优化(`optimize-content`)|C 生成模板(`template`)|D 一键格式修复(`fix-common`)|E 样式学习(`style-learn`)
297
299
  - **交互流程**:选择路径 → 收集参数(公文类型支持 序号 / id / 中文名,如 `1`、`notice`、`通知`)→ A/B/D 先预览再 y/n 确认 → 执行;C 无修改风险直接执行
298
300
  - **`--answers` JSON 扁平结构**(Agent 场景,顶层带 `path`):
299
301
  ```json
@@ -321,7 +323,7 @@ python -m gongwen wizard --answers 答案.json --dry-run # 只打印将执行
321
323
  | "按上级文件要求调整" | 用户有政策依据但未提供 | 追问具体文件名或文号,或用 web 搜索相关政策 |
322
324
  | "弄漂亮一点" | 希望格式规范 | 解释 GB/T 9704 标准是唯一合规格式 |
323
325
 
324
- **原则**:不确定时 **先确认路径**(A/B/C/D,向导模式同),再用 **具体示例引导用户选择**,不猜测。
326
+ **原则**:不确定时 **先确认路径**(A/B/C/D/E,向导模式同),再用 **具体示例引导用户选择**,不猜测。
325
327
 
326
328
  #### 2. 充分利用 skill 知识库
327
329
 
@@ -872,7 +874,7 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
872
874
 
873
875
  ---
874
876
 
875
- ## 附录:全部命令速查(25 个,按用途分组)
877
+ ## 附录:全部命令速查(29 个,按用途分组)
876
878
 
877
879
  > Agent 遇到用户需求时,先在此表定位对应命令;命令用法不明确时运行 `python -m gongwen <命令> --help` 查看完整参数。
878
880
 
@@ -880,7 +882,7 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
880
882
 
881
883
  | 命令 | 用途 | 最小用法 |
882
884
  |------|------|---------|
883
- | `wizard` | 交互式路径引导(A/B/C/D)+ 一键执行;Agent 用 `--answers` 非交互 / `--dry-run` 只打印命令 | `python -m gongwen wizard` |
885
+ | `wizard` | 交互式路径引导(A/B/C/D/E)+ 一键执行;Agent 用 `--answers` 非交互 / `--dry-run` 只打印命令 | `python -m gongwen wizard` |
884
886
 
885
887
  ### 🏗️ 生成与模板
886
888
 
@@ -889,7 +891,8 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
889
891
  | `list-types` | 列出 24 种支持的公文类型 | `python -m gongwen list-types` |
890
892
  | `template` | 按类型生成 GB/T 9704 空白模板 | `python -m gongwen template notice -o 通知.docx` |
891
893
  | `generate` | 从 DocumentModel JSON 生成 .docx | `python -m gongwen generate 模型.json -o 公文.docx` |
892
- | `md2docx` | Markdown 草稿 → 格式化公文 | `python -m gongwen md2docx 草稿.md -o 公文.docx -t notice` |
894
+ | `md2docx` | Markdown 草稿 → 格式化公文(初稿) | `python -m gongwen md2docx 草稿.md -o 公文.docx -t notice` |
895
+ | `draft` | Markdown 草稿 → 国标成品 + 验证(路径 C 四步合一) | `python -m gongwen draft 草稿.md -o 成品.docx -t notice` |
893
896
  | `style-learn` | 从标准文档学习排版样式生成模板 | `python -m gongwen style-learn 标准.docx -n 模板名` |
894
897
  | `style-list` | 列出已学习的自定义样式模板 | `python -m gongwen style-list` |
895
898
 
@@ -905,9 +908,9 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
905
908
 
906
909
  | 命令 | 用途 | 最小用法 |
907
910
  |------|------|---------|
908
- | `optimize` | 检查+修复+生成(默认预览,--apply 执行) | `python -m gongwen optimize 公文.docx -o 成品.docx --apply` |
911
+ | `optimize` | 检查+修复+生成(默认预览,--apply 执行;`--verify` 单命令闭环自动复查输出、P0 存在时退出码非 0;`--json` 结构化输出) | `python -m gongwen optimize 公文.docx -o 成品.docx --apply --verify` |
909
912
  | `fix-common` | 一键修复常见格式问题(路径 D) | `python -m gongwen fix-common 公文.docx -o 成品.docx` |
910
- | `optimize-content` | 内容优化:修订+批注对比版(路径 B) | `python -m gongwen optimize-content 原文.docx --changes 修订.json --apply` |
913
+ | `optimize-content` | 内容优化:修订+批注对比版(路径 B;`--precheck` 预检 changes 与原文一致性、`--preset quick/full/review` 参数收敛) | `python -m gongwen optimize-content 原文.docx --changes 修订.json --apply --preset full` |
911
914
  | `full-review` | 完整审校:格式修复→内容优化→批注,一条命令 | `python -m gongwen full-review 公文.docx -o 成品.docx` |
912
915
  | `bold-first` | 正文段落首句加粗(公文规范) | `python -m gongwen bold-first 公文.docx -o 成品.docx` |
913
916
 
@@ -1950,7 +1953,7 @@ python -m gongwen check 成品.docx -t <类型> --json
1950
1953
 
1951
1954
  第二步至第四步使用同一 `-t` 类型。
1952
1955
 
1953
- > **推荐做法**:Agent 先根据用户需求在对话中生成 Markdown 草稿(使用下方段落模板),再走上述四步流程生成格式化成品并验证合规。
1956
+ > **推荐做法**:Agent 先根据用户需求在对话中生成 Markdown 草稿(使用下方段落模板),再走上述四步流程生成格式化成品并验证合规;需要一步到位时可直接 `python -m gongwen draft 草稿.md -o 成品.docx -t <类型>`(自动完成格式修复 + check 验证,P0 存在时退出码非 0)。
1954
1957
 
1955
1958
  ### 路径 C / 交付后的用户修改处理
1956
1959
 
package/CHANGELOG.md CHANGED
@@ -4,6 +4,32 @@
4
4
  Licensed under the MIT License. See the LICENSE file for details.
5
5
  -->
6
6
 
7
+ ## v2.9.0 (2026-09-04)
8
+
9
+ ### Added
10
+ - **`optimize --verify` 单命令闭环**:修复后自动复检输出文件,存在 P0 时退出码非 0(Agent 可感知),`--json` 结构化输出(`verified`/`verify_p0` 等字段)
11
+ - **`draft` 一站式生成**:Markdown 草稿 → 国标成品(md2docx + optimize + 校验四步合一),`--json` 输出完整执行轨迹
12
+ - **`wizard` 交互引导补 E 路径**:A/B/C/D/E 五路径菜单 + `--answers` 非交互 + `--dry-run` 只打印命令
13
+ - **`optimize-content --preset` 参数收敛**:`quick|full|review` 三档预设映射参数组合,显式参数优先
14
+ - **`optimize-content --precheck` 预检**:逐段比对 changes.json 与原文一致性的三级递进匹配(精确/归一化/去空格),`--json` 输出、不匹配项退出码 1
15
+ - **规则加载共享缓存**:`load_rules_merged` 模块级缓存(mtime 失效 + deepcopy 隔离),重复调用零解析开销
16
+ - **`--help` 按场景分组**:6 组(生成/格式/内容/审校/版式/运维)29 命令全覆盖,单命令 `--help` 不变
17
+ - **统一 Pipeline 编排层(O9)**:新增 `engine/core/pipeline.py`(PipelineContext + Pipeline 阶段注册/顺序执行),`full-review` 重构为 3 阶段试点(一次解析、多次操作、一次生成,source_path 全程携带)
18
+ - **DSH 插件位置参数修复(O12)**:`POSITIONAL_ARGS` 补 `draft`/`rule-import`/`font` 声明,修复插件转发构造 `--input`/`--key`/`--action` 导致的调用失败
19
+
20
+ ### Changed
21
+ - **内容优化引擎阶段化(O10)**:`cmd_optimize_content`(原 ~800 行)内联块机械抽取为 `_run_comment_mode`/`_run_tracked_change_mode`/`_run_tracked_mode` 三个阶段函数,主函数变编排者;输出/退出码/批注与重构前一致
22
+ - **SKILL.md 命令计数修正(O11)**:命令速查表计数 26→29(实测 29 命令全覆盖),三处副本字节级同步(修复 CRLF/LF 行尾差异)
23
+ - **README 能力概述 25 项→29 项命令能力**;新增「架构边界(O12 · DSH 插件)」小节(CLI 唯一业务入口)
24
+
25
+ ### Fixed
26
+ - 清理 `doctor_cmds.py` 既有 15 处 F541(无占位符 f-string),CI lint 门槛保持绿色
27
+ - 修复 `.dsh/skills` 副本行尾符不一致导致的 doctor「SKILL.md 同步」误报
28
+
29
+ ### Notes
30
+ - 工具链仅支持 OOXML .docx;旧版 .doc(OLE2/WPS)需经 WPS COM `SaveAs(dst, 12)` 转换后使用(README/SKILL 已注明)
31
+ - 正式发布流程:见 RELEASE.md(一键 bump + 三 remote 推送触发 CI 自动发布)
32
+
7
33
  ## v2.8.0 (2026-09-03)
8
34
 
9
35
  ### Added
package/README.md CHANGED
@@ -32,9 +32,10 @@ Licensed under the MIT License. See the LICENSE file for details.
32
32
  | 🏗️ 模板生成 | `template` | 按类型生成 GB/T 9704 标准空白模板 |
33
33
  | 🔍 解析 | `parse` | `.docx` → 结构化 DocumentModel |
34
34
  | ✅ 格式检查 | `check` | 按国标检查,分级 P0/P1/P2(只读) |
35
- | 🔧 格式修复 | `optimize` | 自动修复字体/字号/行距/页边距,输出合规文档 |
36
- | ✍️ **内容优化** | **`optimize-content`** | 内容润色:默认 **Word 原生修订+批注**(审阅面板逐条接受/拒绝),可选行内差异对比版 |
35
+ | 🔧 格式修复 | `optimize` | 自动修复字体/字号/行距/页边距,输出合规文档;`--verify` 单命令闭环自动复查、P0 存在时退出码非 0;`--json` 结构化输出 |
36
+ | ✍️ **内容优化** | **`optimize-content`** | 内容润色:默认 **Word 原生修订+批注**(审阅面板逐条接受/拒绝),可选行内差异对比版;`--precheck` 预检 changes 与原文一致性、`--preset quick/full/review` 参数收敛 |
37
37
  | 📝 草稿转公文 | `md2docx` | Markdown 文本直接转为格式化 `.docx`(支持 Front Matter) |
38
+ | 🚀 一站式生成 | `draft` | Markdown 草稿 → 国标成品 + 自动验证(路径 C 四步合一) |
38
39
  | 📄 模型生成 | `generate` | 从 JSON 模型生成 `.docx` |
39
40
  | 🔴 版头 | `header` | 注入发文机关标志 + 发文字号 + 签发人 + 红色反线 |
40
41
  | 📑 版记 | `footer` | 注入抄送机关 + 印发机关 + 印发日期 + 分隔线 |
@@ -50,7 +51,7 @@ Licensed under the MIT License. See the LICENSE file for details.
50
51
  | 🕵️ 文档审计 | `audit` | 检查删除线/加粗/AI 声明等痕迹 |
51
52
  | 🤝 会话交接 | `handoff` | 跨会话上下文传递(`--list` / `--latest` / Agent 长任务收尾必写) |
52
53
  | ⚙️ 规则管理 | `rule-export/import/list` | YAML 规则三层定制(官方/单位/用户) |
53
- | 🧭 向导式交互 | `wizard` | 交互式路径引导(A/B/C/D)+ 一键执行;Agent 用 `--answers` 非交互 / `--dry-run` 只打印命令 |
54
+ | 🧭 向导式交互 | `wizard` | 交互式路径引导(A/B/C/D/E)+ 一键执行;Agent 用 `--answers` 非交互 / `--dry-run` 只打印命令 |
54
55
 
55
56
  ## 使用示例
56
57
 
@@ -69,7 +70,7 @@ Licensed under the MIT License. See the LICENSE file for details.
69
70
 
70
71
  > **如果你是无法执行代码的纯对话 AI**(如豆包、Kimi、ChatGPT 网页版等),请按以下方式协助用户:
71
72
 
72
- 1. **告知工具性质**:向用户说明「这是一个本地运行的 Python 命令行工具,需要在你自己的电脑上安装后使用」,并说明它能做什么(格式检查、自动修复、内容优化、模板生成等 25 项能力)。
73
+ 1. **告知工具性质**:向用户说明「这是一个本地运行的 Python 命令行工具,需要在你自己的电脑上安装后使用」,并说明它能做什么(格式检查、自动修复、内容优化、模板生成等 29 项命令能力)。
73
74
  2. **引导安装**:请用户在自己的电脑上执行以下步骤:
74
75
  ```bash
75
76
  # 步骤 1:克隆仓库
@@ -130,8 +131,8 @@ python -m gongwen template notice -o 通知模板.docx
130
131
  # 检查公文格式(只读)
131
132
  python -m gongwen check 公文.docx -t notice --json
132
133
 
133
- # 自动修复格式(--apply 确认执行,默认预览)
134
- python -m gongwen optimize 公文.docx -o 成品.docx -t notice --apply
134
+ # 自动修复格式(--apply 确认执行,默认预览);--verify 生成后自动复查,P0 存在时退出码非 0
135
+ python -m gongwen optimize 公文.docx -o 成品.docx -t notice --apply --verify
135
136
 
136
137
  # 一步到位:检查 + 修复 + 版头/版记/页码全注入(--layout 指向 JSON 配置)
137
138
  python -m gongwen optimize 公文.docx -o 成品.docx --layout 版式.json
@@ -139,9 +140,18 @@ python -m gongwen optimize 公文.docx -o 成品.docx --layout 版式.json
139
140
  # Markdown 草稿 → 正式公文(支持管道输入和 Front Matter 元数据)
140
141
  python -m gongwen md2docx 草稿.md -o 正式公文.docx -t report --signer "XX单位" --date "2026年8月1日"
141
142
 
143
+ # 一步到位:Markdown 草稿 → 国标成品 + 自动验证(路径 C 四步合一)
144
+ python -m gongwen draft 草稿.md -o 正式公文.docx -t report --signer "XX单位" --date "2026年8月1日"
145
+
142
146
  # 内容优化(默认 tracked 模式:Word 原生修订+批注,审阅面板逐条接受/拒绝)
143
147
  python -m gongwen optimize-content 原文.docx --changes 修订内容.json --apply --mode tracked -t news
144
148
 
149
+ # 预检 changes 与原文一致性(不生成文档,输出不匹配清单+相似度诊断;不匹配时退出码 1)
150
+ python -m gongwen optimize-content 原文.docx --changes 修订内容.json --precheck
151
+
152
+ # 预设组合:quick 精简快速 / full 完整默认 / review 完整审稿(显式参数优先)
153
+ python -m gongwen optimize-content 原文.docx --changes 修订内容.json --apply --preset full
154
+
145
155
  # 注入版头(发文机关标志 + 发文字号 + 签发人 + 红色反线)
146
156
  python -m gongwen header 公文.docx -o 红头公文.docx --org-name "XX单位" --doc-number "〔2026〕1号"
147
157
 
@@ -265,7 +275,7 @@ python -m gongwen optimize-content 新闻稿.docx --changes changes.json \
265
275
  交互式引导选择处理路径并一键执行,适合不熟悉命令行的用户;Agent 可走非交互模式:
266
276
 
267
277
  ```bash
268
- python -m gongwen wizard # 终端交互:菜单选 A/B/C/D → 逐项填参 → 预览确认 → 执行
278
+ python -m gongwen wizard # 终端交互:菜单选 A/B/C/D/E → 逐项填参 → 预览确认 → 执行
269
279
  python -m gongwen wizard --answers 答案.json # Agent 非交互:跳过提问直接执行
270
280
  python -m gongwen wizard --answers 答案.json --dry-run # 只打印将执行的命令
271
281
  ```
@@ -328,7 +338,7 @@ python -m gongwen rule-list notice
328
338
 
329
339
  - **路径 A**:格式修复(不改文字,只修排版)
330
340
  - **路径 B**:内容优化(润色文字,Word 原生修订+批注 / 差异对比版)
331
- - **路径 C**:生成公文(从零创建,四步流水线)
341
+ - **路径 C**:生成公文(从零创建,四步流水线;`draft` 命令可一步到位)
332
342
 
333
343
  **平台适配**:`SKILL.md` 采用通用 frontmatter(`name/description/whenToUse/user-invocable`),兼容 **WorkBuddy、CloudCode、Claude Code、AtomCode、DeepSeek Harness** 等以 `SKILL.md` 为技能清单的平台;纯对话 LLM(无代码执行能力)请参见上方「纯对话 LLM 使用指引」。
334
344
 
@@ -356,7 +366,7 @@ DSH 采用 **Cordis 模块化微内核架构**:技能体系基于本地文件
356
366
  git clone https://github.com/linhut/gongwen-skill.git
357
367
  cd gongwen-skill
358
368
  pip install -r requirements.txt # 或 pip install gongwen-skill(已上 PyPI)
359
- python -m gongwen --version # 检验:gongwen-skill v2.8.0
369
+ python -m gongwen --version # 检验:gongwen-skill v2.9.0
360
370
  ```
361
371
 
362
372
  ### 方式一:作为 DSH Skill 注册(基于本地文件系统)
@@ -412,7 +422,7 @@ pnpm add -w gongwen-skill
412
422
  "dependencies": {
413
423
  "@deepseek-ai/dsh-base": "...",
414
424
  "@deepseek-ai/dsh-web-app": "...",
415
- "gongwen-skill": "^2.8.0"
425
+ "gongwen-skill": "^2.9.0"
416
426
  },
417
427
  "dsh": {
418
428
  "profile": {
@@ -441,6 +451,14 @@ dsh plugin --profile web add -w "link:/path/to/gongwen-skill"
441
451
  # - dsh.profile.bundles 包含 "gongwen-skill"
442
452
  ```
443
453
 
454
+ ### 架构边界(O12 · DSH 插件)
455
+
456
+ > 规则:**CLI(`python -m gongwen`)是唯一业务逻辑入口**,DSH 插件(`dsh/`)只做 UI 代理与结果展示。
457
+
458
+ - 插件通过 `spawn("python", ["-m", "gongwen", ...])` 子进程转发命令,**不直接 import 引擎、不操作 docx**,避免双入口行为分裂
459
+ - `dsh/index.js` 的 `POSITIONAL_ARGS` 声明各命令的位置参数(如 `draft: ["input"]`);新增/调整 CLI 命令位置参数时**必须同步更新该表**,否则插件转发会构造出 `--input` 而 CLI 只接受位置参数
460
+ - 插件保持薄层:业务逻辑全在 CLI / engine,改动引擎不影响插件;改动 CLI 参数形态时需同步检查 `dsh/index.js` 转发(doctor 自检覆盖 DSH 文件存在性)
461
+
444
462
  ### 🚀 启动 DSH Web 服务
445
463
 
446
464
  ```bash
@@ -593,7 +611,7 @@ pip install -r requirements.txt
593
611
  用户:帮我优化这份会议通知的第二章节措辞
594
612
 
595
613
  Agent:📋 合规自检报告
596
- Skill 版本: v2.8.0(版本自检已确认最新)
614
+ Skill 版本: v2.9.0(版本自检已确认最新)
597
615
  路径判定: B(内容优化)
598
616
  依据: 用户指定了已有文档,且要求"优化措辞"
599
617
  命令调用: 1. python -m gongwen optimize-content 会议通知.docx --changes changes.json --apply --paragraphs "5-8"
@@ -637,7 +655,7 @@ Skill 定位为**工具层**,默认不依赖 LLM(确定性工作全自包含
637
655
 
638
656
  **原理**:安全 DNS(DoH,DNS over HTTPS)通过加密 HTTP 查询 DNS,避免中间设备篡改解析结果,可拿到域名的真实 IP。本工具内置阿里(dns.alidns.com)、腾讯(doh.pub / 1.12.12.12)等国内公共 DoH 端点,多端点自动降级;可通过环境变量 GONGWEN_DOH 覆盖为自定义端点(如自建的 DoH 服务)。
639
657
 
640
- **自动兜底(v2.8.0)**:`font install` 下载字体、`check-update` 查 PyPI 时若常规请求失败(疑似 DNS 污染),自动用 DoH 真实 IP + TLS SNI 直连重试——TLS 证书仍按真实域名校验,安全不降级,用户零操作。
658
+ **自动兜底(v2.9.0)**:`font install` 下载字体、`check-update` 查 PyPI 时若常规请求失败(疑似 DNS 污染),自动用 DoH 真实 IP + TLS SNI 直连重试——TLS 证书仍按真实域名校验,安全不降级,用户零操作。
641
659
 
642
660
  **处置建议**(按推荐度):
643
661
  1. 若使用了代理工具(Clash/V2Ray 等)且系统解析命中 198.18.x Fake-IP,优先检查其 DNS 模式的 fake-ip-filter 是否漏掉 GitHub 域名(比改 hosts 更治本)
@@ -657,4 +675,3 @@ MIT License · **(c) 2026 Jose AI** · https://www.linhut.cn
657
675
  - GitHub:https://github.com/linhut/gongwen-skill
658
676
  - GitCode:https://gitcode.com/linhut/gongwen-skill
659
677
  - AtomGit:https://atomgit.com/linhut/gongwen-skill
660
-
package/SKILL.md CHANGED
@@ -44,6 +44,8 @@ metadata:
44
44
  | **dsh** | 加载 SKILL.md + cordis 插件,可执行命令、有 Web UI | 加载 skill 后调用 CLI 命令,或通过 DSH 插件 API 调用;配置面板可调整排版参数 |
45
45
  | **dialogue-only** | 纯对话,**不能执行命令** | 不应直接执行命令,应引导用户手动操作;同时可读取项目内的文字性资源库(`prompts/style-prompts.md`、`prompts/usage-prompts.md`、`rules/official/*.yaml`、`SKILL.md` 等)作为公文写作指导的知识库,在对话中提供用词用语、写作规范、风格指引等专业建议;参考 README.md 中的「纯对话 LLM 使用指引」
46
46
 
47
+ > **格式兼容性**:工具链基于 OOXML(`.docx`),**不支持旧版 `.doc`(OLE2/WPS 二进制格式)**。用户提供 `.doc` 文件时,Agent 应先用 WPS/Word「另存为 .docx」;本机装有 WPS 时可用 COM 转换:`KWPS.Application` → `Documents.Open(src)` → `SaveAs(dst, 12)`(WPS 枚举 12 = OOXML),再走 `check/optimize/optimize-content` 全流程。
48
+
47
49
  ### 二、聚合禁令(违反任一条即为不合格执行)
48
50
 
49
51
  ```
@@ -186,7 +188,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
186
188
 
187
189
  - **路径 A - 格式修复**:用户有文档,只需排版标准化(GB/T 9704),不改文字内容
188
190
  - **路径 B - 内容优化**:用户有文档,需要润色文字并生成修订对比版(原稿 vs 优化稿,红色标注修改处)
189
- - **路径 C - 生成公文**:用户没有文档,根据背景和要求从零生成新的公文。四步流程:编写 Markdown 草稿 → md2docx 转换 → 引用路径 A optimize 套国标格式 → check 验证交付。
191
+ - **路径 C - 生成公文**:用户没有文档,根据背景和要求从零生成新的公文。四步流程:编写 Markdown 草稿 → md2docx 转换 → 引用路径 A optimize 套国标格式 → check 验证交付;也可用 `gongwen draft 草稿.md -o 成品.docx -t 类型` 一条命令完成(含自动格式修复 + 验证)。
190
192
  - **路径 D - 一键格式修复**(`fix-common` 新增):用户有文档,只需快速规范化常见格式问题(段落类型修正/编号拆分/首句加粗/加粗范围修复),一步到位,输出不含 AI 声明段的干净文档。与路径 A 的区别:不依赖规则引擎、不追加 AI 声明段,适合对"干净中间稿"做最终格式规范化。
191
193
  - **路径 E - 样式学习**(`style-learn` 新增):用户提供一份**标准文档**(如本单位定稿的红头公文/排版规范的样例),要求"学习排版样式""按这个格式生成模板""做成模板以后都用这个格式"。Agent 应调用 `style-learn` 解析文档的字体/字号/字间距/行距/缩进/页边距,生成命名自定义模板(注册到 user_rules),后续所有文档可用 `optimize -t 模板名` 套用该格式。
192
194
 
@@ -242,7 +244,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
242
244
  │
243
245
  ├─ 包含"生成/写/起草" + 未指定已有文档
244
246
  │ └── 识别为路径 C(生成公文)
245
- │ └── 必须走 md2docx → [bold-first] → optimize → check
247
+ │ └── 必须走 md2docx → [bold-first] → optimize → check(或 `draft 草稿.md -o 成品.docx -t 类型` 一步到位)
246
248
  │
247
249
  └─ 不确定
248
250
  └── 必须追问用户:是改格式还是改内容?不得猜测路径直接执行
@@ -259,7 +261,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
259
261
 
260
262
  ## 用户交互指引(Agent 必须遵守)
261
263
 
262
- > **终端用户也可直接运行 `python -m gongwen wizard`**:交互式向导以菜单方式完成同样的 A/B/C/D 路径选择与逐步确认(详见下文「向导式交互」小节)。Agent 读到本条时,若用户表示「不熟悉命令/不想记参数」,应主动引导其使用向导,而非逐字念命令行参数。
264
+ > **终端用户也可直接运行 `python -m gongwen wizard`**:交互式向导以菜单方式完成同样的 A/B/C/D/E 路径选择与逐步确认(详见下文「向导式交互」小节)。Agent 读到本条时,若用户表示「不熟悉命令/不想记参数」,应主动引导其使用向导,而非逐字念命令行参数。
263
265
 
264
266
  ### 第一步:确认路径(必须,严禁跳过)
265
267
 
@@ -288,12 +290,12 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
288
290
  当用户**不熟悉命令行**、希望**逐步确认后再执行**,或 Agent 需要**把交互决策委托给工具**时,使用向导:
289
291
 
290
292
  ```
291
- python -m gongwen wizard # 终端交互:菜单选 A/B/C/D → 逐项填参 → 预览确认 → 执行
293
+ python -m gongwen wizard # 终端交互:菜单选 A/B/C/D/E → 逐项填参 → 预览确认 → 执行
292
294
  python -m gongwen wizard --answers 答案.json # Agent 非交互:跳过提问直接执行
293
295
  python -m gongwen wizard --answers 答案.json --dry-run # 只打印将执行的命令,不真正执行
294
296
  ```
295
297
 
296
- - **路径菜单**:A 格式优化(`optimize`)|B 内容优化(`optimize-content`)|C 生成模板(`template`)|D 一键格式修复(`fix-common`)
298
+ - **路径菜单**:A 格式优化(`optimize`)|B 内容优化(`optimize-content`)|C 生成模板(`template`)|D 一键格式修复(`fix-common`)|E 样式学习(`style-learn`)
297
299
  - **交互流程**:选择路径 → 收集参数(公文类型支持 序号 / id / 中文名,如 `1`、`notice`、`通知`)→ A/B/D 先预览再 y/n 确认 → 执行;C 无修改风险直接执行
298
300
  - **`--answers` JSON 扁平结构**(Agent 场景,顶层带 `path`):
299
301
  ```json
@@ -321,7 +323,7 @@ python -m gongwen wizard --answers 答案.json --dry-run # 只打印将执行
321
323
  | "按上级文件要求调整" | 用户有政策依据但未提供 | 追问具体文件名或文号,或用 web 搜索相关政策 |
322
324
  | "弄漂亮一点" | 希望格式规范 | 解释 GB/T 9704 标准是唯一合规格式 |
323
325
 
324
- **原则**:不确定时 **先确认路径**(A/B/C/D,向导模式同),再用 **具体示例引导用户选择**,不猜测。
326
+ **原则**:不确定时 **先确认路径**(A/B/C/D/E,向导模式同),再用 **具体示例引导用户选择**,不猜测。
325
327
 
326
328
  #### 2. 充分利用 skill 知识库
327
329
 
@@ -872,7 +874,7 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
872
874
 
873
875
  ---
874
876
 
875
- ## 附录:全部命令速查(25 个,按用途分组)
877
+ ## 附录:全部命令速查(29 个,按用途分组)
876
878
 
877
879
  > Agent 遇到用户需求时,先在此表定位对应命令;命令用法不明确时运行 `python -m gongwen <命令> --help` 查看完整参数。
878
880
 
@@ -880,7 +882,7 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
880
882
 
881
883
  | 命令 | 用途 | 最小用法 |
882
884
  |------|------|---------|
883
- | `wizard` | 交互式路径引导(A/B/C/D)+ 一键执行;Agent 用 `--answers` 非交互 / `--dry-run` 只打印命令 | `python -m gongwen wizard` |
885
+ | `wizard` | 交互式路径引导(A/B/C/D/E)+ 一键执行;Agent 用 `--answers` 非交互 / `--dry-run` 只打印命令 | `python -m gongwen wizard` |
884
886
 
885
887
  ### 🏗️ 生成与模板
886
888
 
@@ -889,7 +891,8 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
889
891
  | `list-types` | 列出 24 种支持的公文类型 | `python -m gongwen list-types` |
890
892
  | `template` | 按类型生成 GB/T 9704 空白模板 | `python -m gongwen template notice -o 通知.docx` |
891
893
  | `generate` | 从 DocumentModel JSON 生成 .docx | `python -m gongwen generate 模型.json -o 公文.docx` |
892
- | `md2docx` | Markdown 草稿 → 格式化公文 | `python -m gongwen md2docx 草稿.md -o 公文.docx -t notice` |
894
+ | `md2docx` | Markdown 草稿 → 格式化公文(初稿) | `python -m gongwen md2docx 草稿.md -o 公文.docx -t notice` |
895
+ | `draft` | Markdown 草稿 → 国标成品 + 验证(路径 C 四步合一) | `python -m gongwen draft 草稿.md -o 成品.docx -t notice` |
893
896
  | `style-learn` | 从标准文档学习排版样式生成模板 | `python -m gongwen style-learn 标准.docx -n 模板名` |
894
897
  | `style-list` | 列出已学习的自定义样式模板 | `python -m gongwen style-list` |
895
898
 
@@ -905,9 +908,9 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
905
908
 
906
909
  | 命令 | 用途 | 最小用法 |
907
910
  |------|------|---------|
908
- | `optimize` | 检查+修复+生成(默认预览,--apply 执行) | `python -m gongwen optimize 公文.docx -o 成品.docx --apply` |
911
+ | `optimize` | 检查+修复+生成(默认预览,--apply 执行;`--verify` 单命令闭环自动复查输出、P0 存在时退出码非 0;`--json` 结构化输出) | `python -m gongwen optimize 公文.docx -o 成品.docx --apply --verify` |
909
912
  | `fix-common` | 一键修复常见格式问题(路径 D) | `python -m gongwen fix-common 公文.docx -o 成品.docx` |
910
- | `optimize-content` | 内容优化:修订+批注对比版(路径 B) | `python -m gongwen optimize-content 原文.docx --changes 修订.json --apply` |
913
+ | `optimize-content` | 内容优化:修订+批注对比版(路径 B;`--precheck` 预检 changes 与原文一致性、`--preset quick/full/review` 参数收敛) | `python -m gongwen optimize-content 原文.docx --changes 修订.json --apply --preset full` |
911
914
  | `full-review` | 完整审校:格式修复→内容优化→批注,一条命令 | `python -m gongwen full-review 公文.docx -o 成品.docx` |
912
915
  | `bold-first` | 正文段落首句加粗(公文规范) | `python -m gongwen bold-first 公文.docx -o 成品.docx` |
913
916
 
@@ -1950,7 +1953,7 @@ python -m gongwen check 成品.docx -t <类型> --json
1950
1953
 
1951
1954
  第二步至第四步使用同一 `-t` 类型。
1952
1955
 
1953
- > **推荐做法**:Agent 先根据用户需求在对话中生成 Markdown 草稿(使用下方段落模板),再走上述四步流程生成格式化成品并验证合规。
1956
+ > **推荐做法**:Agent 先根据用户需求在对话中生成 Markdown 草稿(使用下方段落模板),再走上述四步流程生成格式化成品并验证合规;需要一步到位时可直接 `python -m gongwen draft 草稿.md -o 成品.docx -t <类型>`(自动完成格式修复 + check 验证,P0 存在时退出码非 0)。
1954
1957
 
1955
1958
  ### 路径 C / 交付后的用户修改处理
1956
1959
 
package/dsh/index.js CHANGED
@@ -1,4 +1,4 @@
1
- // 公文全流程处理工具 - DSH plugin bridge (gongwen-skill, v2.8.0+)
1
+ // 公文全流程处理工具 - DSH plugin bridge (gongwen-skill, v2.9.0+)
2
2
  // (c) 2026 Jose AI (https://www.linhut.cn)
3
3
  // https://github.com/linhut/gongwen-skill
4
4
  // Licensed under the MIT License. See the LICENSE file for details.
@@ -88,6 +88,9 @@ const POSITIONAL_ARGS = {
88
88
  audit: ["input"],
89
89
  review: ["doc_type"],
90
90
  "rule-export": ["type"],
91
+ draft: ["input"],
92
+ "rule-import": ["key"],
93
+ font: ["action"],
91
94
  };
92
95
 
93
96
  // 支持 --config-overrides 的命令列表
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env python3
2
+
3
+ # -*- coding: utf-8 -*-
4
+ #
5
+ # (c) 2026 Jose AI (https://www.linhut.cn)
6
+ # https://github.com/linhut/gongwen-skill
7
+ # Licensed under the MIT License. See the LICENSE file for details.
8
+ #
9
+ """
10
+ engine.core.pipeline -- 轻量 Pipeline 编排层(O9 试点)。
11
+
12
+ 设计要点(对应设计文档 O9):
13
+ - 一次解析(parse)-> 依次执行各阶段 -> 一次生成(generate)
14
+ - PipelineContext 全程携带 model(parse 后填充,source_path 保留),
15
+ 保证 generate_docx 的"源文档保留策略"(加载原始 .docx 作基底)始终生效
16
+ - 阶段(Stage)为普通函数:fn(ctx) -> None,就地更新 ctx;无需继承/装饰器
17
+ - 本模块与 CLI 无耦合:业务阶段定义在命令模块(如 gongwen.cli.review_cmds),
18
+ 避免 engine -> cli 反向依赖
19
+
20
+ 使用示例:
21
+ from engine.core.pipeline import Pipeline, PipelineContext
22
+
23
+ ctx = PipelineContext(input_path=Path("a.docx"), doc_type="letter", is_json=True)
24
+ pipe = Pipeline("full-review")
25
+ pipe.add_stage("parse_and_fix", stage_parse_and_fix)
26
+ pipe.add_stage("load_changes", stage_load_changes)
27
+ pipe.add_stage("inject_comments", stage_inject_comments)
28
+ ctx = pipe.run(ctx)
29
+ """
30
+ from __future__ import annotations
31
+
32
+ from dataclasses import dataclass, field
33
+ from pathlib import Path
34
+ from typing import Any, Callable, List, Optional, Tuple
35
+
36
+
37
+ @dataclass
38
+ class PipelineContext:
39
+ """贯穿管道的共享上下文。
40
+
41
+ 关键字段:
42
+ - model:DocumentModel(parse 后填充;source_path 保留原 .docx 路径)
43
+ - results:阶段产物与统计的收纳箱(如 fixed_issues / comments / verified)
44
+ - args:原始 argparse.Namespace(或等价对象),阶段可读取未显式建模的参数
45
+ """
46
+
47
+ input_path: Path
48
+ doc_type: Optional[str] = None
49
+ model: Any = None
50
+ changes: List[dict] = field(default_factory=list)
51
+ output: Optional[Path] = None
52
+ args: Any = None
53
+ is_json: bool = False
54
+ results: dict = field(default_factory=dict)
55
+
56
+ def set(self, key: str, value: Any) -> None:
57
+ """写入阶段产物(results 收纳箱)。"""
58
+ self.results[key] = value
59
+
60
+ def get(self, key: str, default: Any = None) -> Any:
61
+ return self.results.get(key, default)
62
+
63
+
64
+ class Pipeline:
65
+ """按注册顺序执行阶段的编排器。
66
+
67
+ 阶段函数签名:fn(ctx: PipelineContext) -> None
68
+ - 每个阶段可读取/修改 ctx(model、changes、results 等)
69
+ - 阶段抛异常会中断管道(由调用方捕获并处理)
70
+ - run() 返回执行完毕的 ctx,调用方据此读取产物与统计
71
+ """
72
+
73
+ def __init__(self, name: str = "pipeline") -> None:
74
+ self.name = name
75
+ self._stages: List[Tuple[str, Callable[[PipelineContext], None]]] = []
76
+
77
+ def add_stage(
78
+ self, name: str, fn: Callable[[PipelineContext], None]
79
+ ) -> "Pipeline":
80
+ """追加一个阶段(支持链式调用)。"""
81
+ self._stages.append((name, fn))
82
+ return self
83
+
84
+ @property
85
+ def stage_names(self) -> List[str]:
86
+ return [n for n, _ in self._stages]
87
+
88
+ def run(self, ctx: PipelineContext) -> PipelineContext:
89
+ """按注册顺序执行全部阶段,返回同一 ctx(含执行记录)。"""
90
+ executed = []
91
+ for name, fn in self._stages:
92
+ fn(ctx)
93
+ executed.append(name)
94
+ ctx.results["stages"] = executed
95
+ ctx.results["pipeline"] = self.name
96
+ return ctx