gongwen-skill 2.12.0 → 2.13.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.
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "gongwen-skill-marketplace",
3
+ "description": "公文全流程处理专家(gongwen-skill)Claude Code 插件市场",
4
+ "owner": {
5
+ "name": "Jose AI"
6
+ },
7
+ "plugins": [
8
+ {
9
+ "name": "gongwen-skill",
10
+ "displayName": "公文全流程处理专家",
11
+ "source": "./",
12
+ "version": "2.12.0",
13
+ "description": "公文全流程处理专家 —— 面向中文公文(.docx)的 GB/T 9704 全流程工具链:格式检查、自动修复、内容优化(Word 原生修订+批注 / 行内差异对比)、模板生成、样式学习、Markdown 转公文、版头版记页码注入,覆盖 25 类法定公文。",
14
+ "category": "productivity",
15
+ "tags": [
16
+ "chinese",
17
+ "document",
18
+ "government",
19
+ "official-document",
20
+ "GB/T 9704",
21
+ "docx",
22
+ "skill",
23
+ "公文"
24
+ ]
25
+ }
26
+ ]
27
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "gongwen-skill",
3
+ "displayName": "公文全流程处理专家",
4
+ "version": "2.12.0",
5
+ "description": "公文全流程处理专家 —— 面向中文公文(.docx)的 GB/T 9704 全流程工具链:格式检查、自动修复、内容优化(Word 原生修订+批注 / 行内差异对比)、模板生成、样式学习、Markdown 转公文、版头版记页码注入,覆盖 25 类法定公文。",
6
+ "author": {
7
+ "name": "Jose AI",
8
+ "url": "https://www.linhut.cn"
9
+ },
10
+ "homepage": "https://github.com/linhut/gongwen-skill",
11
+ "repository": "https://github.com/linhut/gongwen-skill",
12
+ "license": "MIT",
13
+ "category": "productivity",
14
+ "keywords": [
15
+ "chinese",
16
+ "document",
17
+ "government",
18
+ "official-document",
19
+ "GB/T 9704",
20
+ "docx",
21
+ "skill",
22
+ "公文",
23
+ "格式检查"
24
+ ]
25
+ }
package/AGENTS.md ADDED
@@ -0,0 +1,122 @@
1
+ ---
2
+ AIGC:
3
+ Label: "1"
4
+ ContentProducer: 001191440300708461136T1XGW3
5
+ ProduceID: 594788b2f473f3679080da07b1915493_3948b672adda11f18039525400461939
6
+ ReservedCode1: QQXN7DfjJFomCh/Kvmo5ok38vndecdGMG4kKZFsPf0YzBRkXkoJoUGOxHtU8m2/aike/LgYiydcg6cHyT1NuWO3+Bq2M8XblOH3SdsrfC75KXxL6fOZiMjsMLk7jccu0KbisbuD4uLLjFUcFV/o2lh90oFvPqDf1lK+11KDbXcYRNupGF1SyCJDwukM=
7
+ ContentPropagator: 001191440300708461136T1XGW3
8
+ PropagateID: 594788b2f473f3679080da07b1915493_3948b672adda11f18039525400461939
9
+ ReservedCode2: QQXN7DfjJFomCh/Kvmo5ok38vndecdGMG4kKZFsPf0YzBRkXkoJoUGOxHtU8m2/aike/LgYiydcg6cHyT1NuWO3+Bq2M8XblOH3SdsrfC75KXxL6fOZiMjsMLk7jccu0KbisbuD4uLLjFUcFV/o2lh90oFvPqDf1lK+11KDbXcYRNupGF1SyCJDwukM=
10
+ ---
11
+
12
+
13
+
14
+ <!--
15
+ (c) 2026 Jose AI (https://www.linhut.cn)
16
+ https://github.com/linhut/gongwen-skill
17
+ Licensed under the MIT License. See the LICENSE file for details.
18
+ -->
19
+
20
+ # 公文全流程处理专家(gongwen-skill)
21
+
22
+ > 面向中文公文(`.docx`)的 **GB/T 9704《党政机关公文格式》** 全流程处理工具链,打包为可被 AI Agent 直接调用的 Skill。
23
+ >
24
+ > - **展示名(对外名称)**:公文全流程处理专家
25
+ > - **标识名(机器标识,请勿改动)**:包名 `gongwen-skill`、命令名 `gongwen`、Skill 目录名 `gongwen-skill`
26
+ > - **仓库**:https://github.com/linhut/gongwen-skill | 许可:MIT
27
+
28
+ ---
29
+
30
+ ## 1. 快速开始
31
+
32
+ ```bash
33
+ git clone https://github.com/linhut/gongwen-skill.git
34
+ cd gongwen-skill
35
+ pip install -r requirements.txt # 需要 Python 3.10+
36
+ python -m gongwen list-types # 验证安装(应列出 25 种公文类型)
37
+ ```
38
+
39
+ 也可直接安装 PyPI 包:`pip install gongwen-skill`。
40
+
41
+ ---
42
+
43
+ ## 2. Agent 调用约定
44
+
45
+ 1. **入口唯一**:所有业务能力统一通过 CLI `python -m gongwen <命令>` 调用,不要自行拼装底层脚本。
46
+ 2. **执行前声明**(硬门控,不可跳过):先声明「当前调用环境 / 用户需求判定路径(A 格式修复、B 内容优化、C 生成公文、D 一键修复、E 其他)/ 判定依据」。
47
+ 3. **写操作显式授权**:修复与生成类命令默认只预览,需 `--apply` 才落盘;覆盖已有文件前须获得用户确认。
48
+ 4. **只读优先**:诊断类命令(`check` / `parse` / `audit` / `rule-list` / `doctor`)不修改用户文档,可放心执行。
49
+ 5. **规则与提示词**:格式规则位于 `rules/`(官方 / 单位 / 用户三层 YAML),提示词位于 `prompts/`,可按需读取后再判断。
50
+
51
+ ---
52
+
53
+ ## 3. 命令速查(29 项)
54
+
55
+ > 本表仅为速查摘要,**完整操作指南以 `SKILL.md` 为准**(命令参数、示例、规则详见 skills 主文件);新增或调整命令时同步更新两处。
56
+
57
+ | 命令 | 说明 |
58
+ |:-----|:-----|
59
+ | `list-types` | 列出 25 种支持的公文类型 |
60
+ | `template` | 按类型生成 GB/T 9704 标准空白模板 |
61
+ | `parse` | `.docx` → 结构化 DocumentModel(JSON) |
62
+ | `check` | 按国标检查格式,分级 P0/P1/P2(只读) |
63
+ | `optimize` | 检查 + 修复 + 生成(默认预览,`--apply` 执行) |
64
+ | `generate` | 从 DocumentModel JSON 生成 `.docx` |
65
+ | `header` | 注入版头:发文机关标志 + 发文字号 + 签发人 + 红色反线 |
66
+ | `footer` | 注入版记:抄送 + 印发机关 + 印发日期 + 分隔线 |
67
+ | `pagenum` | 注入 Word PAGE 域动态页码 |
68
+ | `md2docx` | Markdown 文本转格式化公文 `.docx` |
69
+ | `draft` | Markdown 草稿 → 国标成品 + 验证(四步合一) |
70
+ | `optimize-content` | 内容优化:Word 原生修订+批注,或行内差异对比版 |
71
+ | `bold-first` | 正文段落首句加粗(符合公文规范) |
72
+ | `fix-common` | 一键修复常见格式问题(段落类型 / 编号拆分 / 首句加粗 / 加粗范围) |
73
+ | `handoff` | 查看或写入会话交接文档(跨会话上下文传递) |
74
+ | `rule-export` / `rule-list` / `rule-import` | 三层规则导出 / 列出 / 导入 |
75
+ | `table-signs` | 从名单批量生成会议桌签 |
76
+ | `full-review` | 完整审校:格式修复 → 内容优化 → 批注输出 |
77
+ | `style-learn` / `style-list` | 从标准文档学习排版样式并注册为命名模板 |
78
+ | `check-update` | 版本自检(PyPI 权威判定 + GitHub 备用 + 国内镜像提示) |
79
+ | `audit` | 审计文档处理链:删除线 / 加粗 / AI 声明等合规性 |
80
+ | `review` | 生成公文审稿流转单(五角色 / 三角色模板) |
81
+ | `wizard` | 向导式交互:A/B/C/D/E 路径引导 + 一键执行 |
82
+ | `font` | 公文标准字体管理:安装 / 检查 / 列出内置字体 |
83
+ | `doctor` / `repair` | 全面自我诊断与常见问题修复 |
84
+
85
+ ---
86
+
87
+ ## 4. 目录结构
88
+
89
+ ```
90
+ gongwen-skill/
91
+ ├── SKILL.md # Skill 主文件(frontmatter + 全量操作指南)
92
+ ├── AGENTS.md # 本文件(面向 Codex 等指令型 Agent)
93
+ ├── .claude-plugin/ # Claude Code 插件清单(plugin.json / marketplace.json)
94
+ ├── dsh/ # DeepSeek Harness 插件(index.js / client.js)
95
+ ├── cordis.patch.yml # DSH 插件注册补丁
96
+ ├── presets/ # DSH Agent 预设「公文全流程处理专家」
97
+ ├── engine/ # 格式引擎(解析 / 检查 / 修复 / 生成)
98
+ ├── gongwen/ # CLI(`python -m gongwen`)
99
+ ├── rules/ # 三层格式规则(官方 / 单位 / 用户)
100
+ └── prompts/ # 各路径提示词
101
+ ```
102
+
103
+ ---
104
+
105
+ ## 5. 平台适配
106
+
107
+ | 平台 | 接入方式 | 对外名称来源 |
108
+ |:-----|:---------|:-------------|
109
+ | Claude Code | `.claude-plugin/plugin.json`(`displayName`)+ `.claude-plugin/marketplace.json` | `displayName` |
110
+ | Codex 等指令型 Agent | 本文件 `AGENTS.md` | 标题名称 |
111
+ | DeepSeek Harness (DSH) | `dsh/` 插件 + `cordis.patch.yml` + `presets/` 预设 | 预设 `name` |
112
+ | WorkBuddy / 通用 Agent | 读取 `SKILL.md` | frontmatter `description` |
113
+
114
+ > 说明:SKILL.md 的 frontmatter `name` 必须保持 kebab-case(`gongwen-skill`)以符合 Agent Skill 规范,对外展示统一使用中文展示名「公文全流程处理专家」。
115
+
116
+ ---
117
+
118
+ ## 6. 许可
119
+
120
+ MIT License,详见 [LICENSE](./LICENSE)。
121
+ *(内容由AI生成,仅供参考)*
122
+ *(内容由AI生成,仅供参考)*
package/CHANGELOG.md CHANGED
@@ -4,6 +4,30 @@
4
4
  Licensed under the MIT License. See the LICENSE file for details.
5
5
  -->
6
6
 
7
+ ## v2.13.0 (2026-09-11)
8
+
9
+ ### Added
10
+ - **政策联网检索 `policy-search`**:按主题检索国务院政策文件库(gov.cn,t=zhengcelibrary)→ web 引擎兜底;`--json` 结构化输出供 agent 消费(含 `gov_empty` 诊断字段);抓取复用 `fact_check._safe_fetch_url`(SSRF 防护)+ `netcheck` DoH 兜底;wizard 新增 F 路径「政策检索」(只读直接执行,dry-run 支持)
11
+ - **渲染验收 `render`**:docx 转逐页图片供版面可视化检查(分页/表格劈裂/签章区),复用 `engine/docx_to_image` 完整链路(LibreOffice/docx2pdf → pdftoppm/PyMuPDF);`--pages/--dpi/--format/--json`,只读命令
12
+ - **对外展示名承载层**:`.claude-plugin/plugin.json` + `marketplace.json`(`displayName: 公文全流程处理专家`)+ `AGENTS.md`(Codex 等指令型 Agent 说明),并纳入 `package.json` files 与 `MANIFEST.in` 打包声明
13
+ - **`npx skills add linhut/gongwen-skill` 安装渠道**:README 新增方式零一行安装(Claude Code/Codex/Cursor 等通用 harness)
14
+
15
+ ### Changed
16
+ - **对外展示名统一为「公文全流程处理专家」**:原称谓「公文全流程处理工具」在全部面向人与模型可见的文案层被替换,覆盖 `SKILL.md`(三副本 frontmatter `description`)、`dsh/index.js`(`GONGWEN_GUIDANCE` 入口描述 / 工具描述 / `export const description` / 文件头注释)、CLI `--version` 与命令帮助描述(`gongwen/cli/app.py`)、`README.md`、`package.json` 与 `pyproject.toml` 的 `description`、`doctor` 诊断标题(`gongwen/cli/doctor_cmds.py`)、`gongwen/_legacy.py` / `gongwen/__init__.py` / `cordis.patch.yml` / `dsh/client.js` / `etc/dsh-config-defaults.json` 中的称谓注释
17
+ - **机器标识与用户文档内容一律不变**:包名 `gongwen-skill`、命令名 `gongwen`、`SKILL.md` frontmatter `name`、DSH 插件 id/name/ns(`cordis.patch.yml`、`dsh/index.js`)、以及所有写入用户 `.docx` 的署名字符串保持原样;`CHANGELOG` 历史条目与 `docs/design/` 历史记录不改
18
+ - **展示名单一事实来源**:`gongwen/__init__.py` 新增 `DISPLAY_NAME` 常量,CLI `description` / `--version` / `doctor` / `repair` 标题统一引用,消除多处硬编码中文名
19
+ - **doctor 新增「展示名一致性」检查**:校验 SKILL.md frontmatter description、`.claude-plugin/` 两个 JSON 的 `displayName`、`package.json` / `pyproject.toml` description、`dsh/index.js` 插件描述共 6 处承载点与 `DISPLAY_NAME` 一致(文件缺失跳过,不误报)
20
+ - **doctor 新增「DSH 宿主版本」「DSH peer 依赖」检查**:探测本机 `@deepseek-ai/dsh` ≥ 0.1.2-rc.1,peer 下限以 `package.json` peerDependencies 为单一来源;无 DSH 宿主时一致跳过避免误报(asar 布局兼容)
21
+ - **CLI 启动提速约 -72%**:`app.py` 顶层重导入惰性化(`review_cmds` 4 命令经 `_lazy_command` 首次调用时导入、`pagenum` 默认值内联),`--version` 926ms→244ms、`--help` 830ms→234ms
22
+ - **架构导入统一**:28 处旧式顶层导入(`from optimizer/config/fact_check` 等)统一为 `from engine.xxx`,消除对 `_bootstrap` sys.path hack 的运行时依赖
23
+ - **DSH 设置面板精简 39→5 字段(P2-31)**:`dsh/client.js` FIELDS 只保留默认类型+页边距,`dsh/index.js` schema 同步;低频排版参数回归 CLI(`config --set` / `--config-overrides`)
24
+ - **DSH 插件移除运行时技能注册(P2-31)**:`dsh/index.js` 取消 `ctx.skills.register`(与文件系统技能 `~/.dsh/skills/gongwen-skill/` 完全重复),技能发现统一走方式一
25
+ - `AGENTS.md` 命令速查表标注「完整操作指南以 SKILL.md 为准」,避免双表维护漂移
26
+ - **`.gitattributes` 统一文本换行**:`*.js/*.py/*.md/*.json/*.yml/*.yaml` 等强制 LF,消除 Windows 检出时的 CRLF 噪音 diff
27
+
28
+ ### Fixed
29
+ - `tests/test_wizard.py`:PATH_DEFS 断言更新为 A–F 并校验 F 路径映射(policy-search)
30
+
7
31
  ## v2.12.0 (2026-09-08)
8
32
 
9
33
  ### Added
package/README.md CHANGED
@@ -4,13 +4,13 @@ https://github.com/linhut/gongwen-skill
4
4
  Licensed under the MIT License. See the LICENSE file for details.
5
5
  -->
6
6
 
7
- # 公文全流程处理工具
7
+ # 公文全流程处理专家
8
8
 
9
9
  <p align="center">
10
- <img src="./logo/2026-08-19_11-17-43.png" alt="公文全流程处理工具" width="760">
10
+ <img src="./logo/2026-08-19_11-17-43.png" alt="公文全流程处理专家" width="760">
11
11
  </p>
12
12
 
13
- > 中文公文全流程处理工具——基于 **GB/T 9704《党政机关公文格式》** 国家标准,支持 **格式检查与修复、内容优化(Word 原生修订+批注/差异对比版)、模板生成、Markdown 转公文、版头版记页码注入、事实核验、风格增强** 等完整能力。原生支持 **DeepSeek Harness (DSH)** 技能系统,打包为可被 AI Agent 直接调用的 Skill,完全自包含,克隆即用。
13
+ > 中文公文全流程处理专家——基于 **GB/T 9704《党政机关公文格式》** 国家标准,支持 **格式检查与修复、内容优化(Word 原生修订+批注/差异对比版)、模板生成、Markdown 转公文、版头版记页码注入、事实核验、风格增强** 等完整能力。原生支持 **DeepSeek Harness (DSH)** 技能系统,打包为可被 AI Agent 直接调用的 Skill,完全自包含,克隆即用。
14
14
 
15
15
  [![CI](https://img.shields.io/badge/CI-Passing-brightgreen)](https://github.com/linhut/gongwen-skill/actions)
16
16
  [![PyPI](https://img.shields.io/pypi/v/gongwen-skill)](https://pypi.org/project/gongwen-skill/)
@@ -615,6 +615,7 @@ python -m gongwen optimize input.docx -o output.docx --apply \
615
615
  | 想让 DSH Agent 调用本技能,无需 Web UI | 方式一(Skill 文件系统) |
616
616
  | 想让 DSH Web UI 工具面板直接调用 | 方式二(npm 插件 bundle) |
617
617
  | 二开插件本身,本地反复编辑 | 方式三(link 模式) |
618
+ | 通用 Agent 一行安装(Claude Code/Codex/Cursor 等) | `npx skills add linhut/gongwen-skill` |
618
619
 
619
620
  ## 🤖 通过 Agent 调用
620
621
 
@@ -622,6 +623,13 @@ python -m gongwen optimize input.docx -o output.docx --apply \
622
623
 
623
624
  ### 安装方式
624
625
 
626
+ **方式零:npx skills add 一行安装(最简)**
627
+ ```bash
628
+ # 任意支持 Agent Skills 的 harness(Claude Code / Codex / Cursor 等)均可:
629
+ # skills CLI 会自动把本技能路由到对应 harness 的 skills 目录
630
+ npx skills add linhut/gongwen-skill
631
+ ```
632
+
625
633
  **方式一:克隆到 Skills 目录(推荐)**
626
634
  ```bash
627
635
  # WorkBuddy / CloudCode
package/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: gongwen-skill
3
- description: 公文全流程处理工具。支持 .docx 公文按 GB/T 9704 国家标准做格式检查(check)、自动修复(optimize)、行内内容修订(optimize-content,红色标注+删除线+修改说明)、模板生成(template)、样式学习(style-learn,从标准文档学习排版样式生成自定义模板)、Markdown 转公文(md2docx),以及版头/版记/页码注入。覆盖通知/请示/报告/函/会议纪要等 25 类公文。完全自包含,克隆即用,无需数据库或后端服务。
3
+ description: 公文全流程处理专家。支持 .docx 公文按 GB/T 9704 国家标准做格式检查(check)、自动修复(optimize)、行内内容修订(optimize-content,红色标注+删除线+修改说明)、模板生成(template)、样式学习(style-learn,从标准文档学习排版样式生成自定义模板)、Markdown 转公文(md2docx),以及版头/版记/页码注入。覆盖通知/请示/报告/函/会议纪要等 25 类公文。完全自包含,克隆即用,无需数据库或后端服务。
4
4
  whenToUse: 当用户需要处理中文公文(.docx格式)时,包括格式检查、自动修复、内容润色、模板生成、样式学习(从标准文档学习排版样式生成自定义模板)、Markdown转公文、版头版记注入等场景。适用于通知/请示/报告/函/会议纪要/新闻稿/讲话稿等25种公文类型。
5
5
  user-invocable: true
6
6
  metadata:
package/cordis.patch.yml CHANGED
@@ -2,7 +2,7 @@
2
2
  # https://github.com/linhut/gongwen-skill
3
3
  # Licensed under the MIT License. See the LICENSE file for details.
4
4
 
5
- # dsh bundle layer: 公文全流程处理工具 (gongwen-skill, host + client)
5
+ # dsh bundle layer: 公文全流程处理专家 (gongwen-skill, host + client)
6
6
  - insert:
7
7
  - id: gongwen-skill
8
8
  name: gongwen-skill
package/dsh/client.js CHANGED
@@ -1,4 +1,4 @@
1
- // 公文全流程处理工具 DSH client — 设置平级菜单「文档样式配置」(gongwen-skill)
1
+ // 公文全流程处理专家 DSH client — 设置平级菜单「文档样式配置」(gongwen-skill)
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.
@@ -61,6 +61,8 @@ window.__ModuleLoader__.load({
61
61
 
62
62
  // 扁平字段表:path(嵌套数组)、label、placeholder、type(text|checkbox|select)
63
63
  // 与 dsh/index.js 的 settings schema 保持一一对应
64
+ // P2-31 精简:只保留高频 5 字段(默认类型 + 页边距);字体/字号/行距等
65
+ // 低频排版参数走 CLI(config --set / --config-overrides)
64
66
  var FIELDS = [
65
67
  { path: ["default_doc_type"], label: "默认公文类型", placeholder: "notice", type: "select" },
66
68
 
@@ -68,46 +70,6 @@ window.__ModuleLoader__.load({
68
70
  { path: ["page_setup", "margins", "bottom"], label: "下边距", placeholder: "2.8cm", type: "text" },
69
71
  { path: ["page_setup", "margins", "left"], label: "左边距", placeholder: "2.7cm", type: "text" },
70
72
  { path: ["page_setup", "margins", "right"], label: "右边距", placeholder: "2.7cm", type: "text" },
71
- { path: ["page_setup", "header_distance"], label: "页眉距", placeholder: "1.5cm", type: "text" },
72
- { path: ["page_setup", "footer_distance"], label: "页脚距", placeholder: "2.3cm", type: "text" },
73
-
74
- { path: ["body", "font"], label: "正文·字体", placeholder: "仿宋_GB2312", type: "text" },
75
- { path: ["body", "font_fallback"], label: "正文·字体回退", placeholder: "FangSong", type: "text" },
76
- { path: ["body", "size"], label: "正文·字号", placeholder: "16pt", type: "text" },
77
- { path: ["body", "line_spacing"], label: "正文·行距", placeholder: "33pt", type: "text" },
78
- { path: ["body", "first_line_indent"], label: "正文·首行缩进", placeholder: "2em", type: "text" },
79
- { path: ["body", "align"], label: "正文·对齐", placeholder: "justify", type: "text" },
80
-
81
- { path: ["doc_title", "font"], label: "标题·字体", placeholder: "方正小标宋简体", type: "text" },
82
- { path: ["doc_title", "font_fallback"], label: "标题·字体回退", placeholder: "SimSun", type: "text" },
83
- { path: ["doc_title", "size"], label: "标题·字号", placeholder: "22pt", type: "text" },
84
- { path: ["doc_title", "align"], label: "标题·对齐", placeholder: "center", type: "text" },
85
- { path: ["doc_title", "bold"], label: "标题·加粗", type: "checkbox" },
86
- { path: ["doc_title", "line_spacing"], label: "标题·行距", placeholder: "33pt", type: "text" },
87
-
88
- { path: ["heading_1", "font"], label: "一级标题·字体", placeholder: "黑体", type: "text" },
89
- { path: ["heading_1", "font_fallback"], label: "一级标题·字体回退", placeholder: "SimHei", type: "text" },
90
- { path: ["heading_1", "size"], label: "一级标题·字号", placeholder: "16pt", type: "text" },
91
- { path: ["heading_1", "line_spacing"], label: "一级标题·行距", placeholder: "33pt", type: "text" },
92
- { path: ["heading_1", "first_line_indent"], label: "一级标题·首行缩进", placeholder: "2em", type: "text" },
93
-
94
- { path: ["heading_2", "font"], label: "二级标题·字体", placeholder: "楷体_GB2312", type: "text" },
95
- { path: ["heading_2", "font_fallback"], label: "二级标题·字体回退", placeholder: "KaiTi", type: "text" },
96
- { path: ["heading_2", "size"], label: "二级标题·字号", placeholder: "16pt", type: "text" },
97
- { path: ["heading_2", "line_spacing"], label: "二级标题·行距", placeholder: "33pt", type: "text" },
98
- { path: ["heading_2", "first_line_indent"], label: "二级标题·首行缩进", placeholder: "2em", type: "text" },
99
-
100
- { path: ["heading_3", "font"], label: "三级标题·字体", placeholder: "仿宋_GB2312", type: "text" },
101
- { path: ["heading_3", "font_fallback"], label: "三级标题·字体回退", placeholder: "FangSong", type: "text" },
102
- { path: ["heading_3", "size"], label: "三级标题·字号", placeholder: "16pt", type: "text" },
103
- { path: ["heading_3", "bold"], label: "三级标题·加粗", type: "checkbox" },
104
- { path: ["heading_3", "line_spacing"], label: "三级标题·行距", placeholder: "33pt", type: "text" },
105
- { path: ["heading_3", "first_line_indent"], label: "三级标题·首行缩进", placeholder: "2em", type: "text" },
106
-
107
- { path: ["signature", "font"], label: "署名·字体", placeholder: "仿宋_GB2312", type: "text" },
108
- { path: ["signature", "font_fallback"], label: "署名·字体回退", placeholder: "FangSong", type: "text" },
109
- { path: ["signature", "size"], label: "署名·字号", placeholder: "18pt", type: "text" },
110
- { path: ["signature", "align"], label: "署名·对齐", placeholder: "center", type: "text" },
111
73
  ];
112
74
 
113
75
  // 从嵌套 value 中取路径值
@@ -438,13 +400,7 @@ window.__ModuleLoader__.load({
438
400
  }, "设置服务不可用(当前部署未挂载 settings provider),排版参数区只读。"),
439
401
 
440
402
  renderGroup("基础设置", FIELDS.slice(0, 1)),
441
- renderGroup("页面设置", FIELDS.slice(1, 7)),
442
- renderGroup("正文格式", FIELDS.slice(7, 13)),
443
- renderGroup("公文标题", FIELDS.slice(13, 19)),
444
- renderGroup("一级标题", FIELDS.slice(19, 24)),
445
- renderGroup("二级标题", FIELDS.slice(24, 29)),
446
- renderGroup("三级标题", FIELDS.slice(29, 35)),
447
- renderGroup("署名格式", FIELDS.slice(35, 39)),
403
+ renderGroup("页面设置", FIELDS.slice(1, 5)),
448
404
 
449
405
  h("div", { style: { display: "flex", gap: "10px", marginTop: "16px", alignItems: "center" } },
450
406
  h("button", {
package/dsh/index.js CHANGED
@@ -1,4 +1,4 @@
1
- // 公文全流程处理工具 - DSH plugin bridge (gongwen-skill, v2.12.0+)
1
+ // 公文全流程处理专家 - DSH plugin bridge (gongwen-skill, v2.13.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.
@@ -11,13 +11,14 @@
11
11
  // * ctx.systemPrompt.section 注入 AI 工作指引(可选服务,缺失不阻塞)
12
12
  // * ctx.settings.register('gongwen-skill') 官方设置命名空间(schemastery schema),
13
13
  // scope.watch 回写 ~/.gongwen-skill/dsh-config.json 保持 CLI 兼容
14
- // * ctx.skills.register 运行时注册 SKILL.md(可选服务)
15
14
  // * call() 透传 Python CLI(向后兼容旧调用方)
16
15
  //
16
+ // 技能发现走文件系统(~/.dsh/skills/gongwen-skill/,方式一),插件不再
17
+ // 运行时注册 SKILL.md(P2-31:与文件系统技能重复,去掉冗余 API 面)。
18
+ //
17
19
  // 官方依据:DeepSeek Harness Bluebook Developer Guide
18
20
  // - Host Services & Events:inject 硬依赖 / ctx.get 可选依赖 / ctx.effect 可逆副作用
19
21
  // - Registering Tools:defineTool + ctx.tools.register
20
- // - User Guide · Skills:ctx.skills.register(SkillRegistration)
21
22
  // 纯 CLI 用户完全不受影响(不使用 DSH 插件时不会读取 dsh-config.json)
22
23
 
23
24
  import { spawn } from "node:child_process";
@@ -44,7 +45,7 @@ const SECTION_NAME = "plugin:gongwen-skill";
44
45
  const SECTION_ORDER = 100;
45
46
 
46
47
  // AI 工作指引(模型可见的能力说明;工具 schema 由 defineTool 自动注入)
47
- const GONGWEN_GUIDANCE = `本机已安装公文全流程处理工具插件(gongwen-skill)。能力:.docx 公文全流程——列出公文类型(list-types)、解析文档(parse)、格式检查(check)、自动修复(optimize)、内容修订对比版(optimize-content)、模板生成(template)、样式学习(style-learn/style-list,从标准文档学习排版样式)、全面诊断(doctor)、自动修复(repair)、Markdown 转公文(md2docx)、JSON 模型生成(generate)、版头/版记/页码注入(header/footer/pagenum)、首句加粗(bold-first)、一键格式修复(fix-common)、桌签生成(table-signs)、审稿流转单(review)、完整审校(full-review)、文档审计(audit)、规则管理(rule-export/import/list)、版本自检(check-update)、会话交接(handoff)、字体管理(font)。覆盖通知/请示/报告/函/会议纪要等 25 类公文。完全自包含,克隆即用,无需数据库或后端服务。用户提到「公文 / 红头文件 / 版式 / 排版 / 格式检查 / 公文模板 / 样式学习 / 自定义模板 / 党政机关公文」时即指本插件。DSH 插件支持配置化排版参数(页边距/行距/字体等):在系统设置 → 文档样式配置 中调整,写入官方 settings 命名空间并同步到 ~/.gongwen-skill/dsh-config.json。`;
48
+ const GONGWEN_GUIDANCE = `本机已安装公文全流程处理专家 插件(gongwen-skill)。能力:.docx 公文全流程——列出公文类型(list-types)、解析文档(parse)、格式检查(check)、自动修复(optimize)、内容修订对比版(optimize-content)、模板生成(template)、样式学习(style-learn/style-list,从标准文档学习排版样式)、全面诊断(doctor)、自动修复(repair)、Markdown 转公文(md2docx)、JSON 模型生成(generate)、版头/版记/页码注入(header/footer/pagenum)、首句加粗(bold-first)、一键格式修复(fix-common)、桌签生成(table-signs)、审稿流转单(review)、完整审校(full-review)、文档审计(audit)、规则管理(rule-export/import/list)、版本自检(check-update)、会话交接(handoff)、字体管理(font)。覆盖通知/请示/报告/函/会议纪要等 25 类公文。完全自包含,克隆即用,无需数据库或后端服务。用户提到「公文 / 红头文件 / 版式 / 排版 / 格式检查 / 公文模板 / 样式学习 / 自定义模板 / 党政机关公文」时即指本插件。DSH 插件支持配置化排版参数(页边距/行距/字体等):在系统设置 → 文档样式配置 中调整,写入官方 settings 命名空间并同步到 ~/.gongwen-skill/dsh-config.json。`;
48
49
 
49
50
  // 定位 gongwen CLI 真实安装根目录
50
51
  function _resolve_gongwen_root() {
@@ -249,6 +250,8 @@ function _handle_config(args) {
249
250
 
250
251
  // 构建系统设置 Schema(schemastery 官方 API:Schema.object / Schema.string ...)
251
252
  function _build_settings_schema() {
253
+ // P2-31 精简:Web 面板只保留高频 5 字段(默认类型 + 页边距);
254
+ // 字体/字号/行距等低频排版参数走 CLI(config --set / --config-overrides)
252
255
  return Schema.object({
253
256
  default_doc_type: Schema.string().default("notice").description("默认公文类型"),
254
257
  page_setup: Schema.object({
@@ -258,53 +261,7 @@ function _build_settings_schema() {
258
261
  left: Schema.string().default("2.7cm").description("左边距"),
259
262
  right: Schema.string().default("2.7cm").description("右边距"),
260
263
  }).description("页边距"),
261
- header_distance: Schema.string().default("1.5cm").description("页眉距"),
262
- footer_distance: Schema.string().default("2.3cm").description("页脚距"),
263
264
  }).description("页面设置"),
264
- body: Schema.object({
265
- font: Schema.string().default("仿宋_GB2312").description("正文字体"),
266
- font_fallback: Schema.string().default("FangSong").description("字体回退"),
267
- size: Schema.string().default("16pt").description("正文字号"),
268
- line_spacing: Schema.string().default("33pt").description("行距"),
269
- first_line_indent: Schema.string().default("2em").description("首行缩进"),
270
- align: Schema.string().default("justify").description("对齐方式"),
271
- }).description("正文格式"),
272
- doc_title: Schema.object({
273
- font: Schema.string().default("方正小标宋简体").description("标题字体"),
274
- font_fallback: Schema.string().default("SimSun").description("字体回退"),
275
- size: Schema.string().default("22pt").description("标题字号"),
276
- align: Schema.string().default("center").description("对齐方式"),
277
- bold: Schema.boolean().default(false).description("是否加粗"),
278
- line_spacing: Schema.string().default("33pt").description("行距"),
279
- }).description("公文标题"),
280
- heading_1: Schema.object({
281
- font: Schema.string().default("黑体").description("一级标题字体"),
282
- font_fallback: Schema.string().default("SimHei").description("字体回退"),
283
- size: Schema.string().default("16pt").description("字号"),
284
- line_spacing: Schema.string().default("33pt").description("行距"),
285
- first_line_indent: Schema.string().default("2em").description("首行缩进"),
286
- }).description("一级标题"),
287
- heading_2: Schema.object({
288
- font: Schema.string().default("楷体_GB2312").description("二级标题字体"),
289
- font_fallback: Schema.string().default("KaiTi").description("字体回退"),
290
- size: Schema.string().default("16pt").description("字号"),
291
- line_spacing: Schema.string().default("33pt").description("行距"),
292
- first_line_indent: Schema.string().default("2em").description("首行缩进"),
293
- }).description("二级标题"),
294
- heading_3: Schema.object({
295
- font: Schema.string().default("仿宋_GB2312").description("三级标题字体"),
296
- font_fallback: Schema.string().default("FangSong").description("字体回退"),
297
- size: Schema.string().default("16pt").description("字号"),
298
- bold: Schema.boolean().default(true).description("是否加粗"),
299
- line_spacing: Schema.string().default("33pt").description("行距"),
300
- first_line_indent: Schema.string().default("2em").description("首行缩进"),
301
- }).description("三级标题"),
302
- signature: Schema.object({
303
- font: Schema.string().default("仿宋_GB2312").description("署名字体"),
304
- font_fallback: Schema.string().default("FangSong").description("字体回退"),
305
- size: Schema.string().default("18pt").description("署名字号"),
306
- align: Schema.string().default("center").description("对齐方式"),
307
- }).description("署名格式"),
308
265
  });
309
266
  }
310
267
 
@@ -484,7 +441,7 @@ function registerGongwenTool(ctx) {
484
441
  ctx.tools.register(defineTool({
485
442
  name: "gongwen",
486
443
  description:
487
- "运行公文全流程处理工具(gongwen-skill)CLI 命令:check(格式检查)、optimize(自动修复)、optimize-content(内容修订对比版)、md2docx(Markdown 转公文)、template(模板生成)、style-learn(样式学习)、list-types(列出公文类型)、doctor(全面诊断)、handoff(会话交接)等。",
444
+ "运行公文全流程处理专家(gongwen-skill)CLI 命令:check(格式检查)、optimize(自动修复)、optimize-content(内容修订对比版)、md2docx(Markdown 转公文)、template(模板生成)、style-learn(样式学习)、list-types(列出公文类型)、doctor(全面诊断)、handoff(会话交接)等。",
488
445
  parameters: {
489
446
  command: {
490
447
  type: "string",
@@ -529,7 +486,7 @@ function registerGongwenTool(ctx) {
529
486
 
530
487
  export const name = "gongwen-skill";
531
488
  export const description =
532
- "中文公文全流程处理工具 - GB/T 9704 格式检查/修复/内容优化/模板生成/版式注入";
489
+ "公文全流程处理专家(gongwen-skill)—— 中文公文 GB/T 9704 格式检查/修复/内容优化/模板生成/版式注入";
533
490
 
534
491
  // 硬依赖:tools(模型工具注册需要)。systemPrompt / settings / skills 为可选服务,
535
492
  // 分别用 ctx.get / ctx.inject 处理,避免在未挂载对应提供方的组合中阻塞插件加载。
@@ -610,30 +567,7 @@ export function apply(ctx) {
610
567
  console.error("[gongwen-skill] settings inject failed:", e);
611
568
  }
612
569
 
613
- // 4. 注册 runtime skill(可选服务 ctx.skills,使 AI 安装后即可自动发现)
614
- const skills = ctx.get("skills");
615
- if (skills?.register) {
616
- try {
617
- const skillPath = join(resolve(__dirname, ".."), "SKILL.md");
618
- if (existsSync(skillPath)) {
619
- const skillContent = readFileSync(skillPath, "utf-8");
620
- const skillD = skills.register({
621
- name: "gongwen-skill",
622
- description:
623
- "中文公文全流程处理:格式检查/自动修复/content润色/模板生成/样式学习/Markdown转公文/版头版记注入",
624
- content: skillContent,
625
- resourceBase: { kind: "directory", path: resolve(__dirname, "..") },
626
- invocation: { modelInvocable: true, userInvocable: true },
627
- });
628
- if (typeof skillD === "function") disposers.push(skillD);
629
- ctx.logger?.info?.("gongwen-skill: runtime skill registered");
630
- }
631
- } catch (e) {
632
- ctx.logger?.warn?.(`gongwen-skill: runtime skill registration skipped: ${e.message}`);
633
- }
634
- }
635
-
636
- // 5. 安装 Agent 预设(presets/ → ~/.dsh/.agent-presets/gongwen-skill/,
570
+ // 4. 安装 Agent 预设(presets/ → ~/.dsh/.agent-presets/gongwen-skill/,
637
571
  // 让 DSH 新建会话可选「公文全流程处理专家」;失败不影响插件其余能力)
638
572
  ensurePresetInstalled();
639
573
 
@@ -314,7 +314,7 @@ def auto_generate_changes(input_path: str, doc_type: str,
314
314
  if not changes:
315
315
  logger.info("LLM 未生成建议(可能未配置或返回空),尝试基于规则的结构建议")
316
316
  try:
317
- from structure_checker import check_structure
317
+ from engine.structure_checker import check_structure
318
318
  issues = check_structure(model.paragraphs, content_rules.get("structure", []))
319
319
  for issue in issues:
320
320
  changes.append({
@@ -314,7 +314,7 @@ class LiveEditSession:
314
314
  (clean_path, diff_path) 两个文件的路径
315
315
  """
316
316
  from datetime import date
317
- from optimizer import create_diff_document
317
+ from engine.optimizer import create_diff_document
318
318
 
319
319
  today_str = date.today().strftime("%Y-%m-%d")
320
320
  stem = str(output_base).replace(".docx", "")
@@ -1,5 +1,5 @@
1
1
  {
2
- "_comment": "公文全流程处理工具(gongwen-skill)DSH 插件默认配置。(c) 2026 Jose AI (https://www.linhut.cn) https://github.com/linhut/gongwen-skill MIT License。复制到 ~/.gongwen-skill/dsh-config.json 后修改生效。",
2
+ "_comment": "公文全流程处理专家(gongwen-skill)DSH 插件默认配置。(c) 2026 Jose AI (https://www.linhut.cn) https://github.com/linhut/gongwen-skill MIT License。复制到 ~/.gongwen-skill/dsh-config.json 后修改生效。",
3
3
  "_doc": "此文件是默认模板,不要直接修改。运行 `python -m gongwen config --init` 可创建用户配置。",
4
4
  "default_doc_type": "notice",
5
5
  "page_setup": {
@@ -5,9 +5,14 @@
5
5
  # https://github.com/linhut/gongwen-skill
6
6
  # Licensed under the MIT License. See the LICENSE file for details.
7
7
  #
8
- # 公文全流程处理工具 - gongwen-skill Python package
8
+ # 公文全流程处理专家 - gongwen-skill Python package
9
9
 
10
- __version__ = "2.12.0"
10
+ __version__ = "2.13.0"
11
+
12
+ # 对外展示名(单一事实来源):面向人与模型的运行时展示文案统一引用此常量,
13
+ # 须与 SKILL.md frontmatter description 首句、.claude-plugin/plugin.json displayName、
14
+ # package.json / pyproject.toml description 保持同步(doctor 一致性检查会校验)。
15
+ DISPLAY_NAME = "公文全流程处理专家"
11
16
 
12
17
  # Re-export everything from the legacy module for backward compatibility
13
18
  # This allows: from gongwen import main, cmd_check, etc.
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # 公文文档格式化 Skill —— 中文公文全流程处理工具
4
+ # 公文文档格式化 Skill —— 中文公文全流程处理专家
5
5
  #
6
6
  # (c) 2026 Jose AI (https://www.linhut.cn)
7
7
  # https://github.com/linhut/gongwen-skill
@@ -16,10 +16,10 @@ from gongwen.cli.helpers import (
16
16
  parse_config_overrides as _parse_config_overrides,
17
17
  load_rules_with_overrides as _load_rules_with_overrides,
18
18
  )
19
- __version__ = "2.12.0"
19
+ __version__ = "2.13.0"
20
20
  # 版本号应与 gongwen/__init__.py 保持一致,每次发版同步更新
21
21
  """
22
- 中文公文全流程处理工具 —— 基于 GB/T 9704《党政机关公文格式》国家标准。
22
+ 中文公文全流程处理专家 —— 基于 GB/T 9704《党政机关公文格式》国家标准。
23
23
 
24
24
  支持格式检查与修复、内容润色(红色标注对比版)、模板生成、Markdown 转公文、
25
25
  版头版记页码注入等完整能力。打包为可被 AI Agent 直接调用的 Skill,
@@ -109,7 +109,7 @@ def cmd_template(args):
109
109
  """生成标准公文模板。"""
110
110
  from datetime import date as _dt
111
111
  from engine.core.document.generator import generate_docx
112
- from template_builder import create_template_document
112
+ from engine.template_builder import create_template_document
113
113
 
114
114
  doc_type = args.type
115
115
  rules = _load_rules_with_overrides(doc_type, getattr(args, "config_overrides", ""))
@@ -302,7 +302,7 @@ def cmd_optimize(args):
302
302
 
303
303
  if getattr(args, "layout", None):
304
304
  layout = json.loads(Path(args.layout).read_text(encoding="utf-8"))
305
- from inject import inject_header, inject_footer, inject_page_number
305
+ from engine.inject import inject_header, inject_footer, inject_page_number
306
306
  if layout.get("header"):
307
307
  inject_header(str(out), layout["header"])
308
308
  if not is_json:
@@ -808,7 +808,7 @@ def cmd_md2docx(args):
808
808
  _pn["alignment"] = _pv.get("alignment", _pn["alignment"])
809
809
  _pn["format"] = _pv.get("format", _pn["format"])
810
810
  break
811
- from inject import inject_page_number
811
+ from engine.inject import inject_page_number
812
812
  inject_page_number(str(out), {"enabled": True, **_pn})
813
813
  except Exception as e:
814
814
  print(f" ⚠️ 页码注入失败({e}),跳过", file=sys.stderr)
@@ -833,7 +833,7 @@ def cmd_md2docx(args):
833
833
  def cmd_header(args):
834
834
  """注入版头:发文机关标志 + 发文字号 + 签发人 + 红色反线。"""
835
835
  import shutil
836
- from inject import inject_header
836
+ from engine.inject import inject_header
837
837
 
838
838
  out = Path(args.output) if args.output else Path(args.input)
839
839
  if out != Path(args.input):
@@ -854,7 +854,7 @@ def cmd_header(args):
854
854
  def cmd_footer(args):
855
855
  """注入版记:抄送 + 印发机关 + 印发日期 + 分隔线。"""
856
856
  import shutil
857
- from inject import inject_footer
857
+ from engine.inject import inject_footer
858
858
 
859
859
  out = Path(args.output) if args.output else Path(args.input)
860
860
  if out != Path(args.input):
@@ -875,7 +875,7 @@ def cmd_footer(args):
875
875
  def cmd_pagenum(args):
876
876
  """注入页码:Word PAGE 域动态页码。"""
877
877
  import shutil
878
- from inject import inject_page_number
878
+ from engine.inject import inject_page_number
879
879
 
880
880
  out = Path(args.output) if args.output else Path(args.input)
881
881
  if out != Path(args.input):