gongwen-skill 2.7.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
  ```
@@ -103,6 +105,7 @@ metadata:
103
105
  ```
104
106
  - **PyPI 为权威判定渠道**(pip 包核心分发,pip install -U 即从 PyPI 拉取);PyPI 不可达时回退 GitHub tag(备用渠道,git 用户/CI 触发源)
105
107
  - GitCode/AtomGit 与 GitHub 同源 tag,仅在 GitHub 不可达时作国内拉取镜像提示(不参与版本判定)
108
+ - GitHub 不可达且触发 DNS 诊断时(系统解析为保留/Fake-IP 段),`check-update --json` 会输出 `dns_diagnosis` 字段(含 `hosts_suggestions`),如实向用户转述排查建议即可
106
109
  - 若全部渠道均不可用(无 git/无网络),**必须明确告知用户"版本自检因无法访问远程而跳过"**,不得静默假设本地即最新
107
110
  3.5. **本地 git tag 对比**(P6,Agent 执行版本确认时补充):
108
111
  - 优先对 skill 安装目录执行 git tag 对比:
@@ -185,7 +188,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
185
188
 
186
189
  - **路径 A - 格式修复**:用户有文档,只需排版标准化(GB/T 9704),不改文字内容
187
190
  - **路径 B - 内容优化**:用户有文档,需要润色文字并生成修订对比版(原稿 vs 优化稿,红色标注修改处)
188
- - **路径 C - 生成公文**:用户没有文档,根据背景和要求从零生成新的公文。四步流程:编写 Markdown 草稿 → md2docx 转换 → 引用路径 A optimize 套国标格式 → check 验证交付。
191
+ - **路径 C - 生成公文**:用户没有文档,根据背景和要求从零生成新的公文。四步流程:编写 Markdown 草稿 → md2docx 转换 → 引用路径 A optimize 套国标格式 → check 验证交付;也可用 `gongwen draft 草稿.md -o 成品.docx -t 类型` 一条命令完成(含自动格式修复 + 验证)。
189
192
  - **路径 D - 一键格式修复**(`fix-common` 新增):用户有文档,只需快速规范化常见格式问题(段落类型修正/编号拆分/首句加粗/加粗范围修复),一步到位,输出不含 AI 声明段的干净文档。与路径 A 的区别:不依赖规则引擎、不追加 AI 声明段,适合对"干净中间稿"做最终格式规范化。
190
193
  - **路径 E - 样式学习**(`style-learn` 新增):用户提供一份**标准文档**(如本单位定稿的红头公文/排版规范的样例),要求"学习排版样式""按这个格式生成模板""做成模板以后都用这个格式"。Agent 应调用 `style-learn` 解析文档的字体/字号/字间距/行距/缩进/页边距,生成命名自定义模板(注册到 user_rules),后续所有文档可用 `optimize -t 模板名` 套用该格式。
191
194
 
@@ -241,7 +244,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
241
244
  │
242
245
  ├─ 包含"生成/写/起草" + 未指定已有文档
243
246
  │ └── 识别为路径 C(生成公文)
244
- │ └── 必须走 md2docx → [bold-first] → optimize → check
247
+ │ └── 必须走 md2docx → [bold-first] → optimize → check(或 `draft 草稿.md -o 成品.docx -t 类型` 一步到位)
245
248
  │
246
249
  └─ 不确定
247
250
  └── 必须追问用户:是改格式还是改内容?不得猜测路径直接执行
@@ -258,7 +261,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
258
261
 
259
262
  ## 用户交互指引(Agent 必须遵守)
260
263
 
261
- > **终端用户也可直接运行 `python -m gongwen wizard`**:交互式向导以菜单方式完成同样的 A/B/C/D 路径选择与逐步确认(详见下文「向导式交互」小节)。Agent 读到本条时,若用户表示「不熟悉命令/不想记参数」,应主动引导其使用向导,而非逐字念命令行参数。
264
+ > **终端用户也可直接运行 `python -m gongwen wizard`**:交互式向导以菜单方式完成同样的 A/B/C/D/E 路径选择与逐步确认(详见下文「向导式交互」小节)。Agent 读到本条时,若用户表示「不熟悉命令/不想记参数」,应主动引导其使用向导,而非逐字念命令行参数。
262
265
 
263
266
  ### 第一步:确认路径(必须,严禁跳过)
264
267
 
@@ -287,12 +290,12 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
287
290
  当用户**不熟悉命令行**、希望**逐步确认后再执行**,或 Agent 需要**把交互决策委托给工具**时,使用向导:
288
291
 
289
292
  ```
290
- python -m gongwen wizard # 终端交互:菜单选 A/B/C/D → 逐项填参 → 预览确认 → 执行
293
+ python -m gongwen wizard # 终端交互:菜单选 A/B/C/D/E → 逐项填参 → 预览确认 → 执行
291
294
  python -m gongwen wizard --answers 答案.json # Agent 非交互:跳过提问直接执行
292
295
  python -m gongwen wizard --answers 答案.json --dry-run # 只打印将执行的命令,不真正执行
293
296
  ```
294
297
 
295
- - **路径菜单**:A 格式优化(`optimize`)|B 内容优化(`optimize-content`)|C 生成模板(`template`)|D 一键格式修复(`fix-common`)
298
+ - **路径菜单**:A 格式优化(`optimize`)|B 内容优化(`optimize-content`)|C 生成模板(`template`)|D 一键格式修复(`fix-common`)|E 样式学习(`style-learn`)
296
299
  - **交互流程**:选择路径 → 收集参数(公文类型支持 序号 / id / 中文名,如 `1`、`notice`、`通知`)→ A/B/D 先预览再 y/n 确认 → 执行;C 无修改风险直接执行
297
300
  - **`--answers` JSON 扁平结构**(Agent 场景,顶层带 `path`):
298
301
  ```json
@@ -320,7 +323,7 @@ python -m gongwen wizard --answers 答案.json --dry-run # 只打印将执行
320
323
  | "按上级文件要求调整" | 用户有政策依据但未提供 | 追问具体文件名或文号,或用 web 搜索相关政策 |
321
324
  | "弄漂亮一点" | 希望格式规范 | 解释 GB/T 9704 标准是唯一合规格式 |
322
325
 
323
- **原则**:不确定时 **先确认路径**(A/B/C/D,向导模式同),再用 **具体示例引导用户选择**,不猜测。
326
+ **原则**:不确定时 **先确认路径**(A/B/C/D/E,向导模式同),再用 **具体示例引导用户选择**,不猜测。
324
327
 
325
328
  #### 2. 充分利用 skill 知识库
326
329
 
@@ -871,7 +874,7 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
871
874
 
872
875
  ---
873
876
 
874
- ## 附录:全部命令速查(25 个,按用途分组)
877
+ ## 附录:全部命令速查(29 个,按用途分组)
875
878
 
876
879
  > Agent 遇到用户需求时,先在此表定位对应命令;命令用法不明确时运行 `python -m gongwen <命令> --help` 查看完整参数。
877
880
 
@@ -879,7 +882,7 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
879
882
 
880
883
  | 命令 | 用途 | 最小用法 |
881
884
  |------|------|---------|
882
- | `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` |
883
886
 
884
887
  ### 🏗️ 生成与模板
885
888
 
@@ -888,7 +891,8 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
888
891
  | `list-types` | 列出 24 种支持的公文类型 | `python -m gongwen list-types` |
889
892
  | `template` | 按类型生成 GB/T 9704 空白模板 | `python -m gongwen template notice -o 通知.docx` |
890
893
  | `generate` | 从 DocumentModel JSON 生成 .docx | `python -m gongwen generate 模型.json -o 公文.docx` |
891
- | `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` |
892
896
  | `style-learn` | 从标准文档学习排版样式生成模板 | `python -m gongwen style-learn 标准.docx -n 模板名` |
893
897
  | `style-list` | 列出已学习的自定义样式模板 | `python -m gongwen style-list` |
894
898
 
@@ -904,9 +908,9 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
904
908
 
905
909
  | 命令 | 用途 | 最小用法 |
906
910
  |------|------|---------|
907
- | `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` |
908
912
  | `fix-common` | 一键修复常见格式问题(路径 D) | `python -m gongwen fix-common 公文.docx -o 成品.docx` |
909
- | `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` |
910
914
  | `full-review` | 完整审校:格式修复→内容优化→批注,一条命令 | `python -m gongwen full-review 公文.docx -o 成品.docx` |
911
915
  | `bold-first` | 正文段落首句加粗(公文规范) | `python -m gongwen bold-first 公文.docx -o 成品.docx` |
912
916
 
@@ -925,15 +929,16 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
925
929
  | `table-signs` | 从名单批量生成会议桌签 | `python -m gongwen table-signs 名单.txt -o 桌签.docx` |
926
930
  | `review` | 生成公文审稿流转单(五/三角色) | `python -m gongwen review report -o 审稿单.docx` |
927
931
  | `handoff` | 跨会话交接(长任务收尾必写) | `python -m gongwen handoff --write` |
928
- | `check-update` | 版本自检(PyPI pip 包权威 + GitHub 备用,自动检测安装形态) | `python -m gongwen check-update` |
929
- | `font` | 公文标准字体管理(安装/检查/列出) | `python -m gongwen font install` |
932
+ | `check-update` | 版本自检(PyPI pip 包权威 + GitHub 备用,自动检测安装形态;GitHub 不可达时 DNS 诊断) | `python -m gongwen check-update` |
933
+ | `font` | 公文标准字体管理(安装/检查/列出;下载失败时自动安全 DNS 直连兜底) | `python -m gongwen font install` |
930
934
 
931
935
  ### 🩺 诊断与修复
932
936
 
933
937
  | 命令 | 用途 | 最小用法 |
934
938
  |------|------|---------|
935
- | `doctor` | 全面诊断:检查 Python 版本/依赖/版本一致性/字体/DSH 文件/代码风格等 | `python -m gongwen doctor` |
939
+ | `doctor` | 全面诊断:检查 Python 版本/依赖/版本一致性/字体/DSH 文件/代码风格/网络 DNS 等 | `python -m gongwen doctor` |
936
940
  | `doctor --json` | JSON 结构化输出(便于 Agent 解析) | `python -m gongwen doctor --json` |
941
+ | `doctor --offline` | 跳过网络/DNS 诊断(离线模式) | `python -m gongwen doctor --offline` |
937
942
  | `repair` | 修复常见问题:安装缺失依赖/字体/同步 SKILL.md 副本 | `python -m gongwen repair` |
938
943
 
939
944
  ### ⚙️ 规则管理
@@ -1948,7 +1953,7 @@ python -m gongwen check 成品.docx -t <类型> --json
1948
1953
 
1949
1954
  第二步至第四步使用同一 `-t` 类型。
1950
1955
 
1951
- > **推荐做法**:Agent 先根据用户需求在对话中生成 Markdown 草稿(使用下方段落模板),再走上述四步流程生成格式化成品并验证合规。
1956
+ > **推荐做法**:Agent 先根据用户需求在对话中生成 Markdown 草稿(使用下方段落模板),再走上述四步流程生成格式化成品并验证合规;需要一步到位时可直接 `python -m gongwen draft 草稿.md -o 成品.docx -t <类型>`(自动完成格式修复 + check 验证,P0 存在时退出码非 0)。
1952
1957
 
1953
1958
  ### 路径 C / 交付后的用户修改处理
1954
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
  ```
@@ -103,6 +105,7 @@ metadata:
103
105
  ```
104
106
  - **PyPI 为权威判定渠道**(pip 包核心分发,pip install -U 即从 PyPI 拉取);PyPI 不可达时回退 GitHub tag(备用渠道,git 用户/CI 触发源)
105
107
  - GitCode/AtomGit 与 GitHub 同源 tag,仅在 GitHub 不可达时作国内拉取镜像提示(不参与版本判定)
108
+ - GitHub 不可达且触发 DNS 诊断时(系统解析为保留/Fake-IP 段),`check-update --json` 会输出 `dns_diagnosis` 字段(含 `hosts_suggestions`),如实向用户转述排查建议即可
106
109
  - 若全部渠道均不可用(无 git/无网络),**必须明确告知用户"版本自检因无法访问远程而跳过"**,不得静默假设本地即最新
107
110
  3.5. **本地 git tag 对比**(P6,Agent 执行版本确认时补充):
108
111
  - 优先对 skill 安装目录执行 git tag 对比:
@@ -185,7 +188,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
185
188
 
186
189
  - **路径 A - 格式修复**:用户有文档,只需排版标准化(GB/T 9704),不改文字内容
187
190
  - **路径 B - 内容优化**:用户有文档,需要润色文字并生成修订对比版(原稿 vs 优化稿,红色标注修改处)
188
- - **路径 C - 生成公文**:用户没有文档,根据背景和要求从零生成新的公文。四步流程:编写 Markdown 草稿 → md2docx 转换 → 引用路径 A optimize 套国标格式 → check 验证交付。
191
+ - **路径 C - 生成公文**:用户没有文档,根据背景和要求从零生成新的公文。四步流程:编写 Markdown 草稿 → md2docx 转换 → 引用路径 A optimize 套国标格式 → check 验证交付;也可用 `gongwen draft 草稿.md -o 成品.docx -t 类型` 一条命令完成(含自动格式修复 + 验证)。
189
192
  - **路径 D - 一键格式修复**(`fix-common` 新增):用户有文档,只需快速规范化常见格式问题(段落类型修正/编号拆分/首句加粗/加粗范围修复),一步到位,输出不含 AI 声明段的干净文档。与路径 A 的区别:不依赖规则引擎、不追加 AI 声明段,适合对"干净中间稿"做最终格式规范化。
190
193
  - **路径 E - 样式学习**(`style-learn` 新增):用户提供一份**标准文档**(如本单位定稿的红头公文/排版规范的样例),要求"学习排版样式""按这个格式生成模板""做成模板以后都用这个格式"。Agent 应调用 `style-learn` 解析文档的字体/字号/字间距/行距/缩进/页边距,生成命名自定义模板(注册到 user_rules),后续所有文档可用 `optimize -t 模板名` 套用该格式。
191
194
 
@@ -241,7 +244,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
241
244
  │
242
245
  ├─ 包含"生成/写/起草" + 未指定已有文档
243
246
  │ └── 识别为路径 C(生成公文)
244
- │ └── 必须走 md2docx → [bold-first] → optimize → check
247
+ │ └── 必须走 md2docx → [bold-first] → optimize → check(或 `draft 草稿.md -o 成品.docx -t 类型` 一步到位)
245
248
  │
246
249
  └─ 不确定
247
250
  └── 必须追问用户:是改格式还是改内容?不得猜测路径直接执行
@@ -258,7 +261,7 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
258
261
 
259
262
  ## 用户交互指引(Agent 必须遵守)
260
263
 
261
- > **终端用户也可直接运行 `python -m gongwen wizard`**:交互式向导以菜单方式完成同样的 A/B/C/D 路径选择与逐步确认(详见下文「向导式交互」小节)。Agent 读到本条时,若用户表示「不熟悉命令/不想记参数」,应主动引导其使用向导,而非逐字念命令行参数。
264
+ > **终端用户也可直接运行 `python -m gongwen wizard`**:交互式向导以菜单方式完成同样的 A/B/C/D/E 路径选择与逐步确认(详见下文「向导式交互」小节)。Agent 读到本条时,若用户表示「不熟悉命令/不想记参数」,应主动引导其使用向导,而非逐字念命令行参数。
262
265
 
263
266
  ### 第一步:确认路径(必须,严禁跳过)
264
267
 
@@ -287,12 +290,12 @@ python -m gongwen handoff --latest --summary # 最新交接文档(Markdown 摘
287
290
  当用户**不熟悉命令行**、希望**逐步确认后再执行**,或 Agent 需要**把交互决策委托给工具**时,使用向导:
288
291
 
289
292
  ```
290
- python -m gongwen wizard # 终端交互:菜单选 A/B/C/D → 逐项填参 → 预览确认 → 执行
293
+ python -m gongwen wizard # 终端交互:菜单选 A/B/C/D/E → 逐项填参 → 预览确认 → 执行
291
294
  python -m gongwen wizard --answers 答案.json # Agent 非交互:跳过提问直接执行
292
295
  python -m gongwen wizard --answers 答案.json --dry-run # 只打印将执行的命令,不真正执行
293
296
  ```
294
297
 
295
- - **路径菜单**:A 格式优化(`optimize`)|B 内容优化(`optimize-content`)|C 生成模板(`template`)|D 一键格式修复(`fix-common`)
298
+ - **路径菜单**:A 格式优化(`optimize`)|B 内容优化(`optimize-content`)|C 生成模板(`template`)|D 一键格式修复(`fix-common`)|E 样式学习(`style-learn`)
296
299
  - **交互流程**:选择路径 → 收集参数(公文类型支持 序号 / id / 中文名,如 `1`、`notice`、`通知`)→ A/B/D 先预览再 y/n 确认 → 执行;C 无修改风险直接执行
297
300
  - **`--answers` JSON 扁平结构**(Agent 场景,顶层带 `path`):
298
301
  ```json
@@ -320,7 +323,7 @@ python -m gongwen wizard --answers 答案.json --dry-run # 只打印将执行
320
323
  | "按上级文件要求调整" | 用户有政策依据但未提供 | 追问具体文件名或文号,或用 web 搜索相关政策 |
321
324
  | "弄漂亮一点" | 希望格式规范 | 解释 GB/T 9704 标准是唯一合规格式 |
322
325
 
323
- **原则**:不确定时 **先确认路径**(A/B/C/D,向导模式同),再用 **具体示例引导用户选择**,不猜测。
326
+ **原则**:不确定时 **先确认路径**(A/B/C/D/E,向导模式同),再用 **具体示例引导用户选择**,不猜测。
324
327
 
325
328
  #### 2. 充分利用 skill 知识库
326
329
 
@@ -871,7 +874,7 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
871
874
 
872
875
  ---
873
876
 
874
- ## 附录:全部命令速查(25 个,按用途分组)
877
+ ## 附录:全部命令速查(29 个,按用途分组)
875
878
 
876
879
  > Agent 遇到用户需求时,先在此表定位对应命令;命令用法不明确时运行 `python -m gongwen <命令> --help` 查看完整参数。
877
880
 
@@ -879,7 +882,7 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
879
882
 
880
883
  | 命令 | 用途 | 最小用法 |
881
884
  |------|------|---------|
882
- | `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` |
883
886
 
884
887
  ### 🏗️ 生成与模板
885
888
 
@@ -888,7 +891,8 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
888
891
  | `list-types` | 列出 24 种支持的公文类型 | `python -m gongwen list-types` |
889
892
  | `template` | 按类型生成 GB/T 9704 空白模板 | `python -m gongwen template notice -o 通知.docx` |
890
893
  | `generate` | 从 DocumentModel JSON 生成 .docx | `python -m gongwen generate 模型.json -o 公文.docx` |
891
- | `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` |
892
896
  | `style-learn` | 从标准文档学习排版样式生成模板 | `python -m gongwen style-learn 标准.docx -n 模板名` |
893
897
  | `style-list` | 列出已学习的自定义样式模板 | `python -m gongwen style-list` |
894
898
 
@@ -904,9 +908,9 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
904
908
 
905
909
  | 命令 | 用途 | 最小用法 |
906
910
  |------|------|---------|
907
- | `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` |
908
912
  | `fix-common` | 一键修复常见格式问题(路径 D) | `python -m gongwen fix-common 公文.docx -o 成品.docx` |
909
- | `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` |
910
914
  | `full-review` | 完整审校:格式修复→内容优化→批注,一条命令 | `python -m gongwen full-review 公文.docx -o 成品.docx` |
911
915
  | `bold-first` | 正文段落首句加粗(公文规范) | `python -m gongwen bold-first 公文.docx -o 成品.docx` |
912
916
 
@@ -925,15 +929,16 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
925
929
  | `table-signs` | 从名单批量生成会议桌签 | `python -m gongwen table-signs 名单.txt -o 桌签.docx` |
926
930
  | `review` | 生成公文审稿流转单(五/三角色) | `python -m gongwen review report -o 审稿单.docx` |
927
931
  | `handoff` | 跨会话交接(长任务收尾必写) | `python -m gongwen handoff --write` |
928
- | `check-update` | 版本自检(PyPI pip 包权威 + GitHub 备用,自动检测安装形态) | `python -m gongwen check-update` |
929
- | `font` | 公文标准字体管理(安装/检查/列出) | `python -m gongwen font install` |
932
+ | `check-update` | 版本自检(PyPI pip 包权威 + GitHub 备用,自动检测安装形态;GitHub 不可达时 DNS 诊断) | `python -m gongwen check-update` |
933
+ | `font` | 公文标准字体管理(安装/检查/列出;下载失败时自动安全 DNS 直连兜底) | `python -m gongwen font install` |
930
934
 
931
935
  ### 🩺 诊断与修复
932
936
 
933
937
  | 命令 | 用途 | 最小用法 |
934
938
  |------|------|---------|
935
- | `doctor` | 全面诊断:检查 Python 版本/依赖/版本一致性/字体/DSH 文件/代码风格等 | `python -m gongwen doctor` |
939
+ | `doctor` | 全面诊断:检查 Python 版本/依赖/版本一致性/字体/DSH 文件/代码风格/网络 DNS 等 | `python -m gongwen doctor` |
936
940
  | `doctor --json` | JSON 结构化输出(便于 Agent 解析) | `python -m gongwen doctor --json` |
941
+ | `doctor --offline` | 跳过网络/DNS 诊断(离线模式) | `python -m gongwen doctor --offline` |
937
942
  | `repair` | 修复常见问题:安装缺失依赖/字体/同步 SKILL.md 副本 | `python -m gongwen repair` |
938
943
 
939
944
  ### ⚙️ 规则管理
@@ -1948,7 +1953,7 @@ python -m gongwen check 成品.docx -t <类型> --json
1948
1953
 
1949
1954
  第二步至第四步使用同一 `-t` 类型。
1950
1955
 
1951
- > **推荐做法**:Agent 先根据用户需求在对话中生成 Markdown 草稿(使用下方段落模板),再走上述四步流程生成格式化成品并验证合规。
1956
+ > **推荐做法**:Agent 先根据用户需求在对话中生成 Markdown 草稿(使用下方段落模板),再走上述四步流程生成格式化成品并验证合规;需要一步到位时可直接 `python -m gongwen draft 草稿.md -o 成品.docx -t <类型>`(自动完成格式修复 + check 验证,P0 存在时退出码非 0)。
1952
1957
 
1953
1958
  ### 路径 C / 交付后的用户修改处理
1954
1959
 
package/CHANGELOG.md CHANGED
@@ -4,6 +4,45 @@
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
+
33
+ ## v2.8.0 (2026-09-03)
34
+
35
+ ### Added
36
+ - **DNS 污染诊断(安全 DNS / DoH)**:`check-update` 在 GitHub 渠道不可达时自动触发 DNS 污染诊断,对比系统解析与安全 DNS(DoH)真实 IP,输出污染判定、对比表与可直接粘贴的 hosts 条目建议
37
+ - **`doctor` 新增「网络/DNS 诊断」检查项**:默认联网检测 GitHub/PyPI 关键域名是否疑似 DNS 污染(系统解析落在 198.18.0.0/15 等保留/Fake-IP 段时判定疑似污染),`--offline` 参数可完全跳过网络查询
38
+ - **新增 `gongwen/cli/netcheck.py` 模块**:DoH 解析(内置阿里 `dns.alidns.com` / 腾讯 `doh.pub` / `1.12.12.12` / Google 备用,多端点自动降级)+ 系统解析对比 + 污染判定 + hosts 建议生成;环境变量 `GONGWEN_DOH` 可覆盖为自定义 DoH 端点
39
+ - **`check-update --json` 输出新增 `dns_diagnosis` 字段**:含 `polluted` / `detail` / `hosts_suggestions` 等,便于 Agent 解析
40
+ - **自动直连兜底(DNS 污染时零操作下载)**:`font install` 下载字体、`check-update`/`helpers` 查询 PyPI 常规请求失败时,自动用 DoH 真实 IP + TLS SNI 直连重试(`netcheck.download_with_doh_fallback` / `_DoHHTTPSConnection`),证书校验仍针对真实域名,安全不降级
41
+
42
+ ### Notes
43
+ - 诊断只做建议,不修改 hosts、不改变版本判定逻辑;自动直连仅作为下载/查询失败的兜底路径(YAGNI)
44
+ - DoH 查询经第三方公共 DNS 服务(阿里/腾讯),仅诊断/兜底失败时发起少量查询;可设置 `GONGWEN_DOH` 指向私有端点
45
+
7
46
  ## v2.7.0 (2026-09-03)
8
47
 
9
48
  ### 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` | 注入抄送机关 + 印发机关 + 印发日期 + 分隔线 |
@@ -45,12 +46,12 @@ Licensed under the MIT License. See the LICENSE file for details.
45
46
  | 🔍 审稿生成 | `review` | 按五角色审稿机制生成审稿意见 |
46
47
  | 🧩 完整审校 | `full-review` | 修订+批注联合命令(句子级差异修订 + 分类批注) |
47
48
  | 🎨 样式学习 | `style-learn` / `style-list` | 上传标准文档学习 Run/段落/页面三级样式(字体/字号/字间距/行距/缩进/页边距),生成命名模板持久化,后续用 `optimize -t 模板名` 套用 |
48
- | 🔄 版本自检 | `check-update` | 版本自检(PyPI pip 包权威判定 + GitHub 备用,GitCode/AtomGit 作国内镜像提示) |
49
- | 🩺 自我诊断 | `doctor` / `repair` | 全面诊断 22 项(Python/依赖/版本一致性/字体/DSH 文件/DSH 技能 frontmatter/代码风格),自动修复常见问题 |
49
+ | 🔄 版本自检 | `check-update` | 版本自检(PyPI pip 包权威判定 + GitHub 备用,GitCode/AtomGit 作国内镜像提示;GitHub 不可达时自动做 DNS 污染诊断 + hosts 建议) |
50
+ | 🩺 自我诊断 | `doctor` / `repair` | 全面诊断 23 项(Python/依赖/版本一致性/字体/DSH 文件/DSH 技能 frontmatter/代码风格/网络 DNS),自动修复常见问题;`--offline` 跳过网络检查 |
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
 
@@ -336,7 +346,7 @@ python -m gongwen rule-list notice
336
346
 
337
347
  Agent 加载 skill 后**必须执行版本追新自检**,确保使用最新版本:
338
348
 
339
- 1. **远程自检**(首选):`python -m gongwen check-update`——以 **PyPI(pip 包发布源)为权威判定渠道**并发查询比对本地(pip install -U 即从 PyPI 拉取);PyPI 不可达时回退 GitHub tag(备用渠道)。全部渠道不可达时明确告知"版本自检跳过"。GitHub 为海外渠道(国内常超时)采用短超时快速降级;GitHub 不可达时自动提示国内代码镜像(GitCode/AtomGit,与 GitHub 同源 tag)与 GitHub520 hosts 加速方案
349
+ 1. **远程自检**(首选):`python -m gongwen check-update`——以 **PyPI(pip 包发布源)为权威判定渠道**并发查询比对本地(pip install -U 即从 PyPI 拉取);PyPI 不可达时回退 GitHub tag(备用渠道)。全部渠道不可达时明确告知"版本自检跳过"。GitHub 为海外渠道(国内常超时)采用短超时快速降级;GitHub 不可达时自动提示国内代码镜像(GitCode/AtomGit,与 GitHub 同源 tag)、GitHub520 hosts 加速方案,并自动做 **DNS 污染诊断**(对比系统解析与安全 DNS/DoH 真实 IP,输出可直接粘贴的 hosts 条目建议)
340
350
  2. **本地 git tag 对比**(补充):对 skill 安装目录执行 `git -C "<skill安装目录>" describe --tags --abbrev=0`;若安装目录不在 git 管理下,应告知用户"无法执行版本对比,建议手动检查 GitHub 更新"
341
351
  3. **落后则警告**:发现本地版本落后于最新版本时,**必须在执行前警告用户**并提示更新——`check-update` 会按安装形态自动给出精准更新命令(pip 包安装:`pip install --upgrade gongwen-skill`;git/skill 目录安装:`cd <gongwen-skill目录> && git pull && git fetch --tags`),不得静默使用旧版本
342
352
 
@@ -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.7.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.7.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.7.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"
@@ -629,6 +647,23 @@ Skill 定位为**工具层**,默认不依赖 LLM(确定性工作全自包含
629
647
 
630
648
  ---
631
649
 
650
+ ## 🌐 GitHub 不可达排查(安全 DNS / DoH)
651
+
652
+ 国内网络访问 GitHub 常遇「无法访问 / 超时」问题,常见原因之一是 **DNS 污染**——系统 DNS 返回的不是真实 IP,而是保留/Fake-IP 段(如 198.18.0.0/15、0.0.0.0),连接自然失败或超时。
653
+
654
+ **快速诊断**:运行 python -m gongwen doctor(含网络/DNS 检查项),或 python -m gongwen check-update(GitHub 渠道不可达时自动诊断)。检测到疑似污染时,会输出系统解析 vs 安全 DNS 真实 IP 对比,以及可直接粘贴的 hosts 条目建议。
655
+
656
+ **原理**:安全 DNS(DoH,DNS over HTTPS)通过加密 HTTP 查询 DNS,避免中间设备篡改解析结果,可拿到域名的真实 IP。本工具内置阿里(dns.alidns.com)、腾讯(doh.pub / 1.12.12.12)等国内公共 DoH 端点,多端点自动降级;可通过环境变量 GONGWEN_DOH 覆盖为自定义端点(如自建的 DoH 服务)。
657
+
658
+ **自动兜底(v2.9.0)**:`font install` 下载字体、`check-update` 查 PyPI 时若常规请求失败(疑似 DNS 污染),自动用 DoH 真实 IP + TLS SNI 直连重试——TLS 证书仍按真实域名校验,安全不降级,用户零操作。
659
+
660
+ **处置建议**(按推荐度):
661
+ 1. 若使用了代理工具(Clash/V2Ray 等)且系统解析命中 198.18.x Fake-IP,优先检查其 DNS 模式的 fake-ip-filter 是否漏掉 GitHub 域名(比改 hosts 更治本)
662
+ 2. 将诊断输出的 hosts 条目写入 C:\Windows\System32\drivers\etc\hosts(需管理员权限),git / 浏览器即可直连真实 IP
663
+ 3. 或使用国内镜像仓库克隆/更新(见下方「镜像仓库」)
664
+
665
+ > 诊断 + 自动兜底:本工具不写入 hosts、不修改系统配置;但 `font install` 下载字体、`check-update` 查询 PyPI 遇到 DNS 污染导致的失败时,会**自动用安全 DNS(DoH)真实 IP + TLS SNI 直连重试**(零操作,证书校验不降级)。DoH 查询经第三方公共 DNS 服务,仅在诊断/兜底失败时发起少量查询,隐私敏感者可设置 GONGWEN_DOH 指向自有端点。
666
+
632
667
  ## 📄 许可证与出处
633
668
 
634
669
  MIT License · **(c) 2026 Jose AI** · https://www.linhut.cn
@@ -640,4 +675,3 @@ MIT License · **(c) 2026 Jose AI** · https://www.linhut.cn
640
675
  - GitHub:https://github.com/linhut/gongwen-skill
641
676
  - GitCode:https://gitcode.com/linhut/gongwen-skill
642
677
  - AtomGit:https://atomgit.com/linhut/gongwen-skill
643
-