gongwen-skill 2.11.0 → 2.12.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.
- package/CHANGELOG.md +19 -0
- package/README.md +36 -17
- package/SKILL.md +10 -10
- package/dsh/client.js +100 -17
- package/dsh/index.js +31 -4
- package/engine/fact_check.py +4 -4
- package/engine/handoff.py +1 -1
- package/gongwen/__init__.py +1 -1
- package/gongwen/_legacy.py +3 -3
- package/package.json +3 -2
- package/presets/agent.cordis.yml +238 -0
- package/presets/preset.yml +3 -0
- package/prompts/usage-prompts.md +1 -1
- package/pyproject.toml +1 -1
- package/rules/official/_common.yaml +5 -5
- package/rules/official/host_speech.yaml +1 -1
- package/rules/official/news.yaml +2 -2
- package/rules/official/speech.yaml +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,25 @@
|
|
|
4
4
|
Licensed under the MIT License. See the LICENSE file for details.
|
|
5
5
|
-->
|
|
6
6
|
|
|
7
|
+
## v2.12.0 (2026-09-08)
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **DSH Agent 预设「公文全流程处理专家」**:新增 `presets/`(`preset.yml` + `agent.cordis.yml`),`dsh/index.js` 在 apply() 时自动安装到 `~/.dsh/.agent-presets/gongwen-skill/`,DSH Web 新建会话可直接切换到该预设开箱即用;内置公文专家 Persona(25 类能力、A/B/C/D/E 路径判定、硬性规则)、完整工具链(fs/shell/jobs/skills/goals/planning/compaction/delegation);已验证 roster 识别 + standingKeyFor 挂载通过
|
|
11
|
+
- **DSH 设置平级菜单「文档样式配置」**(取代原「插件配置 → gongwen-skill」卡片):
|
|
12
|
+
- `dsh/client.js`:新增 `settings.section` 注册(id=`gongwen-styles`,order=20,label=`文档样式配置`),在「系统设置」侧边栏与通用设置/模型/插件平级;页面含默认公文类型下拉(25 种)与完整排版参数(39 字段);移除原 `settings.plugin.item` 卡片注册
|
|
13
|
+
- `dsh/index.js`:`GONGWEN_GUIDANCE` 入口描述同步为「系统设置 → 文档样式配置」
|
|
14
|
+
- README DSH 章节同步(配置入口、兼容性自查表、架构边界说明)
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- **DSH 插件瘦身(架构边界回归「CLI 唯一业务入口」)**:移除设置面板中的「模板样式管理」与「通过文档新增样式模板」两个 GUI 区块及其配套的 host webServer 路由(`/plugins/gongwen/api/*`,约 580 行)——模板学习/管理回归 CLI(`style-learn`/`style-list`/`template`),设置面板只保留 39 字段排版参数配置;`dsh/index.js` 891→617 行、`dsh/client.js` 781→475 行,不再依赖 webServer 基础设施
|
|
18
|
+
|
|
19
|
+
### Compatibility
|
|
20
|
+
- **DSH 宿主版本要求:支持 DSH ≥ 0.1.2-rc.1**。本版 DSH 插件改用官方 `settings.section` 平级菜单 + `ctx.tools.register(defineTool(...))` API,需要宿主提供对应服务;**旧版宿主(installSettingsSection 时代)不兼容**——升级 DSH 到 ≥ 0.1.2-rc.1,或改用纯 Skill 文件系统方式(方式一,无需 DSH 插件)。
|
|
21
|
+
- **peer 适配(以 DSH 0.1.2-rc.1 开发环境为准)**:`@deepseek-ai/dsh-client-ui-settings-plugins` 下限由 `>=0.1.3-alpha.1` 下调至 `>=0.1.2-rc.1`——`settings.section` 在 0.1.2-rc.1 已提供,原下限是 `settings.plugin.item` 时代(v2.11.0)遗留;实测与开发环境安装的 0.1.2-rc.1 匹配,其余 peer(cordis ≥4 / dsh-tools ≥0.1.0 / schemastery ≥3.18.0)均满足
|
|
22
|
+
- 设置命名空间内嵌排版参数与 `~/.gongwen-skill/dsh-config.json` 双向同步:首次加载自动迁移旧配置(仅当设置面板尚无用户覆盖时)。
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
7
26
|
## v2.11.0 (2026-09-06)
|
|
8
27
|
|
|
9
28
|
### Added
|
package/README.md
CHANGED
|
@@ -232,7 +232,7 @@ python -m gongwen font check # 检查安装状态
|
|
|
232
232
|
### 事实核验
|
|
233
233
|
|
|
234
234
|
- **默认执行**(不依赖 `--background`):实体提取(人名/职务/机构全称)→ 互联网交叉核验 → 生成"存疑/已确认/未经核验"批注
|
|
235
|
-
- **实体属性核验**:识别人名+职务配对(如"
|
|
235
|
+
- **实体属性核验**:识别人名+职务配对(如"××单位党组成员、副主任XXX"),能发现职务写反等严重事实错误
|
|
236
236
|
- **LLM+规则混合提取**:配置 `GONGWEN_LLM_API` 后 LLM 内容理解提取(主通道)+ 规则提取(兜底)
|
|
237
237
|
- **背景资料增强**:`--background` 传入 docx/pdf/md/txt/URL 构建基准,已确认实体自动过滤
|
|
238
238
|
|
|
@@ -314,11 +314,11 @@ python -m gongwen wizard --answers 答案.json --dry-run # 只打印将执行
|
|
|
314
314
|
|
|
315
315
|
### 讲话稿(speech 朗读件)
|
|
316
316
|
|
|
317
|
-
页边距为国标默认(上3.7/下3.5/左2.8/右2.6 cm);标题方正小标宋简体 24pt 居中、行距 35pt;一级标题黑体 18pt、二级标题楷体_GB2312 18pt;署名/日期楷体_GB2312 18pt 居中、行距 35pt;正文仿宋_GB2312 18pt 不加粗、行距 30pt exact、首行缩进 2
|
|
317
|
+
页边距为国标默认(上3.7/下3.5/左2.8/右2.6 cm);标题方正小标宋简体 24pt 居中、行距 35pt;一级标题黑体 18pt、二级标题楷体_GB2312 18pt;署名/日期楷体_GB2312 18pt 居中、行距 35pt;正文仿宋_GB2312 18pt 不加粗、行距 30pt exact、首行缩进 2 字符;跳过版头/版记/发文字号/密级检查。(样式以最终版定稿为准)
|
|
318
318
|
|
|
319
319
|
### 主持词(host_speech 朗读件)
|
|
320
320
|
|
|
321
|
-
页边距与普通公文一致(上2.8/下2.8/左2.7/右2.7 cm);标题方正小标宋简体 24pt 居中、行距 35pt;主持人信息/日期楷体_GB2312 18pt 居中、行距 30pt;正文仿宋_GB2312 18pt 不加粗、行距 30pt exact、首行缩进 2 字符,议程引导句("下面,进行第X项议程…"
|
|
321
|
+
页边距与普通公文一致(上2.8/下2.8/左2.7/右2.7 cm);标题方正小标宋简体 24pt 居中、行距 35pt;主持人信息/日期楷体_GB2312 18pt 居中、行距 30pt;正文仿宋_GB2312 18pt 不加粗、行距 30pt exact、首行缩进 2 字符,议程引导句("下面,进行第X项议程…")可局部加粗;跳过版头/版记/发文字号/密级检查。(样式以最终版定稿为准)
|
|
322
322
|
|
|
323
323
|
## 📚 支持的 25 种公文类型
|
|
324
324
|
|
|
@@ -381,7 +381,7 @@ DSH 采用 **Cordis 模块化微内核架构**:技能体系基于本地文件
|
|
|
381
381
|
git clone https://github.com/linhut/gongwen-skill.git
|
|
382
382
|
cd gongwen-skill
|
|
383
383
|
pip install -r requirements.txt # 或 pip install gongwen-skill(已上 PyPI)
|
|
384
|
-
python -m gongwen --version # 检验:gongwen-skill v2.
|
|
384
|
+
python -m gongwen --version # 检验:gongwen-skill v2.12.0
|
|
385
385
|
```
|
|
386
386
|
|
|
387
387
|
### 方式一:作为 DSH Skill 注册(基于本地文件系统)
|
|
@@ -437,7 +437,7 @@ pnpm add -w gongwen-skill
|
|
|
437
437
|
"dependencies": {
|
|
438
438
|
"@deepseek-ai/dsh-base": "...",
|
|
439
439
|
"@deepseek-ai/dsh-web-app": "...",
|
|
440
|
-
"gongwen-skill": "^2.
|
|
440
|
+
"gongwen-skill": "^2.12.0"
|
|
441
441
|
},
|
|
442
442
|
"dsh": {
|
|
443
443
|
"profile": {
|
|
@@ -453,7 +453,7 @@ pnpm add -w gongwen-skill
|
|
|
453
453
|
|
|
454
454
|
> **注意**:若 `add` 启动报错提示子包重复声明,请检查 `dsh.profile.bundles` 数组中**仅包含根包 `gongwen-skill`**,避免同时列入 `engine` 或 `gongwen` 等子目录。
|
|
455
455
|
|
|
456
|
-
> **DSH
|
|
456
|
+
> **DSH 版本要求**:**支持 DSH ≥ 0.1.2-rc.1**。插件按 DeepSeek Harness 0.1.2-rc.1 官方开发文档(Bluebook · Developer Guide)实现——`ctx.tools.register(defineTool(...))`(模型工具)、`ctx.settings.register` + `settings.section` 平级菜单(配置,设置侧边栏「文档样式配置」)、`ctx.systemPrompt.section`、`ctx.skills.register`。需要承载这些 API 的 DSH 组合(`@deepseek-ai/dsh-base` 等),peerDependencies 已声明 `@deepseek-ai/cordis`、`@deepseek-ai/dsh-tools`、`@deepseek-ai/schemastery` 与 `@deepseek-ai/dsh-client-ui-settings-plugins`。**旧版宿主(installSettingsSection 时代)不兼容**:DSH 0.1.2-rc.1 之前(无上述官方 API / 尚用 installSettingsSection 注入设置卡片的版本)上安装会得到 pnpm peer 缺失警告,插件可能无法加载,请升级 DSH 到 ≥ 0.1.2-rc.1 或改用方式一(Skill 文件系统)。
|
|
457
457
|
|
|
458
458
|
### 方式三:本地源码链接(用于插件开发)
|
|
459
459
|
|
|
@@ -476,7 +476,7 @@ dsh plugin --profile web add -w "link:/path/to/gongwen-skill"
|
|
|
476
476
|
- `dsh/index.js` 的 `POSITIONAL_ARGS` 声明各命令的位置参数(如 `draft: ["input"]`);新增/调整 CLI 命令位置参数时**必须同步更新该表**,否则插件转发会构造出 `--input` 而 CLI 只接受位置参数
|
|
477
477
|
- 插件保持薄层:业务逻辑全在 CLI / engine,改动引擎不影响插件;改动 CLI 参数形态时需同步检查 `dsh/index.js` 转发(doctor 自检覆盖 DSH 文件存在性)
|
|
478
478
|
- **模型工具注册**:插件通过官方 `ctx.tools.register(defineTool({...}))` 注册名为 `gongwen` 的模型工具,工具 schema 自动流入 DSH 系统提示词组装;`defineTool` 校验模型生成的参数后调用 `runCli()` 透传 Python CLI(详见上方「DSH 插件配置化」)
|
|
479
|
-
-
|
|
479
|
+
- **客户端配置菜单**:`dsh/client.js` 注册进官方 `settings.section` list slot(id=`gongwen-styles`,order=20,label=`文档样式配置`),在「系统设置」侧边栏与通用设置/模型/插件平级;页面经 `ctx.settingsScope` 读写官方 settings 文档,UI 样式使用 `--dsw-alias-*` 语义 token(官方 Client UI & Slots 规范)
|
|
480
480
|
|
|
481
481
|
### 🚀 启动 DSH Web 服务
|
|
482
482
|
|
|
@@ -492,10 +492,21 @@ dsh --profile web
|
|
|
492
492
|
|
|
493
493
|
浏览器访问 [http://127.0.0.1:3080/](http://127.0.0.1:3080/),在新建会话时即可让 DSH Agent 自动加载 gongwen-skill 调用 Web UI 工具流。
|
|
494
494
|
|
|
495
|
+
### 🤖 Agent 预设「公文全流程处理专家」
|
|
496
|
+
|
|
497
|
+
插件装载后会自动把 `presets/`(`preset.yml` + `agent.cordis.yml`)安装到 `~/.dsh/.agent-presets/gongwen-skill/`,DSH Web **新建会话 → 预设选择**中会出现 **「公文全流程处理专家」**,选中即可开箱即用:
|
|
498
|
+
|
|
499
|
+
- **内置 Persona**:公文专家人设(25 类公文能力、A/B/C/D/E 路径判定:格式优化 / 内容优化 / 生成 / 一键修复 / 样式学习、硬性规则——`bold-first` 先于 `optimize`、交付前 `check` 复核 P0=0 等)
|
|
500
|
+
- **完整工具链**:文件系统(fs/fs-search)、shell(Windows 用 pwsh / 其他用 bash,跑 `python -m gongwen`)、后台任务(jobs)、技能(skills + tool-skill)、目标(goal)、计划模式(plan-mode)、压缩(compaction)、委派(subagent/workflow/ralph)、问答(ask-user)、任务清单(todo)、联网(web)
|
|
501
|
+
- 业务能力由插件 host 平面注册的 `gongwen` 模型工具 + 运行时技能 `gongwen-skill` 提供,无需额外配置
|
|
502
|
+
|
|
503
|
+
> **自定义预设**:如需修改该预设,可在 DSH 预设列表把它复制为新预设后再编辑(插件升级会覆盖原预设文件)。预设 id 为 `gongwen-skill`,源码在仓库 `presets/`。
|
|
504
|
+
|
|
495
505
|
### DSH 兼容性自查
|
|
496
506
|
|
|
497
507
|
| 检查项 | 状态 |
|
|
498
508
|
|:-------|:----:|
|
|
509
|
+
| **DSH 宿主版本要求(≥ 0.1.2-rc.1;旧版宿主「installSettingsSection 时代」不兼容)** | ✅ 需 DSH ≥ 0.1.2-rc.1 |
|
|
499
510
|
| Skill 体系:`SKILL.md` YAML frontmatter (`name + description + whenToUse`) | ✅ |
|
|
500
511
|
| 技能名称规范 (`gongwen-skill`,长度 ≤ 30 字符) | ✅ |
|
|
501
512
|
| 目录技能格式 (`.dsh/skills/gongwen-skill/SKILL.md`) | ✅ |
|
|
@@ -504,13 +515,13 @@ dsh --profile web
|
|
|
504
515
|
| 插件 bundle 声明:`dsh.bundle.patch`(官方「第三方插件」规范) | ✅ |
|
|
505
516
|
| 客户端半侧声明:`dsh.client` + `exports["./client"]`(官方 Client 模块系统) | ✅ |
|
|
506
517
|
| 模型工具注册:`ctx.tools.register(defineTool(...))`(官方 Registering Tools 规范) | ✅ `gongwen` 工具 |
|
|
507
|
-
|
|
|
518
|
+
| 配置菜单:官方 `settings.section` 平级菜单(「文档样式配置」)+ `ctx.settingsScope`(官方 Client UI & Slots) | ✅ |
|
|
508
519
|
| 系统提示注入:`ctx.systemPrompt.section`(官方 Host Services & Events) | ✅ |
|
|
509
520
|
| 运行时技能:`ctx.skills.register`(官方 Skills 注册表) | ✅ |
|
|
510
521
|
| CLI 独立可执行(`python -m gongwen <命令>`) | ✅ |
|
|
511
522
|
| PyPI 上架(`pip install gongwen-skill`) | ✅ |
|
|
512
523
|
| 零外部运行时依赖(仅 python-docx/pydantic/pyyaml) | ✅ |
|
|
513
|
-
| DSH
|
|
524
|
+
| DSH 配置化排版参数(页边距/行距/字体/默认公文类型,39 字段) | ✅ v2.6.0+ |
|
|
514
525
|
|
|
515
526
|
### DSH 插件配置化(v2.6.0+)
|
|
516
527
|
|
|
@@ -518,7 +529,7 @@ DSH 插件支持通过配置文件管理排版参数,Agent 调用时自动注
|
|
|
518
529
|
|
|
519
530
|
**两种配置入口(同一数据,双向同步)**:
|
|
520
531
|
|
|
521
|
-
1. **DSH Web 设置面板(推荐)**:系统设置 →
|
|
532
|
+
1. **DSH Web 设置面板(推荐)**:系统设置 → **文档样式配置**(设置侧边栏平级菜单,与通用设置/模型/插件并列),页面含默认公文类型下拉(25 种)与完整排版参数(页边距/字体/行距等 39 字段);保存后写入 DSH 官方 settings 文档,并由插件 Host 的 `scope.watch` 自动同步到 `~/.gongwen-skill/dsh-config.json`。样式模板的**学习与管理走 CLI**(`style-learn` / `style-list` / `template`,见「样式学习」章节),不占用设置面板,保持插件薄层
|
|
522
533
|
2. **CLI / 配置文件**:直接编辑 `~/.gongwen-skill/dsh-config.json`,或通过插件 `config` 命令管理
|
|
523
534
|
|
|
524
535
|
> **兼容性**:插件首次在带 settings provider 的 DSH 部署中加载时,会把已存在的 `~/.gongwen-skill/dsh-config.json` 一次性迁移进官方 settings 命名空间(仅当设置面板尚无用户覆盖时),之后以设置面板 / settings 文档为权威源,双向同步。
|
|
@@ -535,7 +546,7 @@ node -e "import('./dsh/index.js').then(async m => { console.log(await m.call({},
|
|
|
535
546
|
cp etc/dsh-config-defaults.json ~/.gongwen-skill/dsh-config.json
|
|
536
547
|
```
|
|
537
548
|
|
|
538
|
-
|
|
549
|
+
**配置项说明**(完整 39 字段,与设置面板一一对应):
|
|
539
550
|
|
|
540
551
|
| 配置路径 | 说明 | 默认值 |
|
|
541
552
|
|:---------|:-----|:-------|
|
|
@@ -544,14 +555,22 @@ cp etc/dsh-config-defaults.json ~/.gongwen-skill/dsh-config.json
|
|
|
544
555
|
| `page_setup.margins.left/right` | 左右页边距 | `2.7cm` |
|
|
545
556
|
| `page_setup.header_distance` | 页眉距边界 | `1.5cm` |
|
|
546
557
|
| `page_setup.footer_distance` | 页脚距边界 | `2.3cm` |
|
|
547
|
-
| `body.font` | 正文字体 | `仿宋_GB2312` |
|
|
558
|
+
| `body.font` / `body.font_fallback` | 正文字体 / 回退字体 | `仿宋_GB2312` / `FangSong` |
|
|
548
559
|
| `body.size` | 正文字号 | `16pt` |
|
|
549
560
|
| `body.line_spacing` | 正文行距 | `33pt` |
|
|
550
561
|
| `body.first_line_indent` | 首行缩进 | `2em` |
|
|
551
|
-
| `
|
|
552
|
-
| `doc_title.
|
|
553
|
-
| `
|
|
554
|
-
| `
|
|
562
|
+
| `body.align` | 正文对齐 | `justify` |
|
|
563
|
+
| `doc_title.font` / `doc_title.font_fallback` | 大标题字体 / 回退字体 | `方正小标宋简体` / `SimSun` |
|
|
564
|
+
| `doc_title.size` / `doc_title.align` / `doc_title.bold` | 大标题字号 / 对齐 / 加粗 | `22pt` / `center` / `false` |
|
|
565
|
+
| `doc_title.line_spacing` | 大标题行距 | `33pt` |
|
|
566
|
+
| `heading_1.font` / `heading_1.font_fallback` | 一级标题字体 / 回退字体 | `黑体` / `SimHei` |
|
|
567
|
+
| `heading_1.size` / `heading_1.line_spacing` / `heading_1.first_line_indent` | 一级标题字号 / 行距 / 首行缩进 | `16pt` / `33pt` / `2em` |
|
|
568
|
+
| `heading_2.font` / `heading_2.font_fallback` | 二级标题字体 / 回退字体 | `楷体_GB2312` / `KaiTi` |
|
|
569
|
+
| `heading_2.size` / `heading_2.line_spacing` / `heading_2.first_line_indent` | 二级标题字号 / 行距 / 首行缩进 | `16pt` / `33pt` / `2em` |
|
|
570
|
+
| `heading_3.font` / `heading_3.font_fallback` | 三级标题字体 / 回退字体 | `仿宋_GB2312` / `FangSong` |
|
|
571
|
+
| `heading_3.size` / `heading_3.bold` / `heading_3.line_spacing` / `heading_3.first_line_indent` | 三级标题字号 / 加粗 / 行距 / 首行缩进 | `16pt` / `true` / `33pt` / `2em` |
|
|
572
|
+
| `signature.font` / `signature.font_fallback` | 署名字体 / 回退字体 | `仿宋_GB2312` / `FangSong` |
|
|
573
|
+
| `signature.size` / `signature.align` | 署名字号 / 对齐 | `18pt` / `center` |
|
|
555
574
|
|
|
556
575
|
**修改配置**(DSH 插件调用):
|
|
557
576
|
|
|
@@ -643,7 +662,7 @@ pip install -r requirements.txt
|
|
|
643
662
|
用户:帮我优化这份会议通知的第二章节措辞
|
|
644
663
|
|
|
645
664
|
Agent:📋 合规自检报告
|
|
646
|
-
Skill 版本: v2.
|
|
665
|
+
Skill 版本: v2.12.0(版本自检已确认最新)
|
|
647
666
|
路径判定: B(内容优化)
|
|
648
667
|
依据: 用户指定了已有文档,且要求"优化措辞"
|
|
649
668
|
命令调用: 1. python -m gongwen optimize-content 会议通知.docx --changes changes.json --apply --paragraphs "5-8"
|
package/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gongwen-skill
|
|
3
|
-
description: 公文全流程处理工具。支持 .docx 公文按 GB/T 9704 国家标准做格式检查(check)、自动修复(optimize)、行内内容修订(optimize-content,红色标注+删除线+修改说明)、模板生成(template)、样式学习(style-learn,从标准文档学习排版样式生成自定义模板)、Markdown 转公文(md2docx),以及版头/版记/页码注入。覆盖通知/请示/报告/函/会议纪要等
|
|
4
|
-
whenToUse: 当用户需要处理中文公文(.docx格式)时,包括格式检查、自动修复、内容润色、模板生成、样式学习(从标准文档学习排版样式生成自定义模板)、Markdown转公文、版头版记注入等场景。适用于通知/请示/报告/函/会议纪要/新闻稿/讲话稿等
|
|
3
|
+
description: 公文全流程处理工具。支持 .docx 公文按 GB/T 9704 国家标准做格式检查(check)、自动修复(optimize)、行内内容修订(optimize-content,红色标注+删除线+修改说明)、模板生成(template)、样式学习(style-learn,从标准文档学习排版样式生成自定义模板)、Markdown 转公文(md2docx),以及版头/版记/页码注入。覆盖通知/请示/报告/函/会议纪要等 25 类公文。完全自包含,克隆即用,无需数据库或后端服务。
|
|
4
|
+
whenToUse: 当用户需要处理中文公文(.docx格式)时,包括格式检查、自动修复、内容润色、模板生成、样式学习(从标准文档学习排版样式生成自定义模板)、Markdown转公文、版头版记注入等场景。适用于通知/请示/报告/函/会议纪要/新闻稿/讲话稿等25种公文类型。
|
|
5
5
|
user-invocable: true
|
|
6
6
|
metadata:
|
|
7
7
|
author: Jose AI
|
|
@@ -9,7 +9,7 @@ metadata:
|
|
|
9
9
|
license: MIT
|
|
10
10
|
python: ">=3.10"
|
|
11
11
|
dsh_version: compatible
|
|
12
|
-
doc_types:
|
|
12
|
+
doc_types: 25
|
|
13
13
|
standard: GB/T 9704-2012
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -146,7 +146,7 @@ python -c "
|
|
|
146
146
|
import sys; sys.path.insert(0, '<skill目录>/engine')
|
|
147
147
|
from handoff import write_handoff
|
|
148
148
|
write_handoff(
|
|
149
|
-
session_id='简短任务描述', # 如 '
|
|
149
|
+
session_id='简短任务描述', # 如 '会议材料优化'
|
|
150
150
|
handoff_type='long_task', # long_task / batch / interrupted
|
|
151
151
|
context={'what_we_are_doing': '我们在做什么', 'doc_type': '公文类型',
|
|
152
152
|
'input_file': '输入文件', 'working_directory': '工作目录'},
|
|
@@ -747,7 +747,7 @@ Agent 在交付任何路径产物前,必须扫描全文并自检:
|
|
|
747
747
|
撰稿人撰写课题汇报初稿
|
|
748
748
|
→ 信息技术部负责人(业务审核:核对项目、职责内容)
|
|
749
749
|
→ 综合岗文字校对(gongwen-skill 预检 + 人工润色、格式规范)
|
|
750
|
-
→
|
|
750
|
+
→ 综合专班核稿
|
|
751
751
|
→ 分管领导终审签发
|
|
752
752
|
```
|
|
753
753
|
|
|
@@ -1170,9 +1170,9 @@ python -m gongwen full-review 原文.docx --changes changes.json -o 审校版.do
|
|
|
1170
1170
|
上传标准文档,学习其排版样式(含字间距等细微属性),生成自定义命名模板:
|
|
1171
1171
|
|
|
1172
1172
|
```bash
|
|
1173
|
-
python -m gongwen style-learn 单位定稿红头.docx -n
|
|
1173
|
+
python -m gongwen style-learn 单位定稿红头.docx -n 单位红头规范 # 学习并注册模板
|
|
1174
1174
|
python -m gongwen style-list # 列出已学习模板
|
|
1175
|
-
python -m gongwen optimize 文档.docx -t
|
|
1175
|
+
python -m gongwen optimize 文档.docx -t 单位红头规范 --apply # 套用模板
|
|
1176
1176
|
```
|
|
1177
1177
|
|
|
1178
1178
|
模板存储于 `~/.gongwen-skill/user_rules/`(仓库之外),**git pull 更新 skill 不会丢失**。
|
|
@@ -1298,7 +1298,7 @@ python -m gongwen optimize-content 原文.docx --changes changes.json --mode tra
|
|
|
1298
1298
|
|
|
1299
1299
|
1. **关键信息绝对不可删除**:严禁删除包含以下类型信息的整段或整句——
|
|
1300
1300
|
- 关键里程碑(日期 + 事件,如"2025年3月与省科技厅汇报")
|
|
1301
|
-
- 领导协调 / 汇报记录(如"
|
|
1301
|
+
- 领导协调 / 汇报记录(如"向××部门文宣司汇报")
|
|
1302
1302
|
- 资金 / 经费 / 项目预算数据(含具体金额或来源)
|
|
1303
1303
|
- 政策依据引用(含文号、政策名称)
|
|
1304
1304
|
- 省情 / 背景分析段落(提供论证基础的信息段)
|
|
@@ -1894,7 +1894,7 @@ LLM 根据用户背景和要求,参考下方段落结构模板和惯用语库
|
|
|
1894
1894
|
- 若用户既无名单也不知参会人员 → 跳过桌签生成,不追问
|
|
1895
1895
|
- **仅询问一次**,用户明确说"不需要"后不再重复追问
|
|
1896
1896
|
|
|
1897
|
-
>
|
|
1897
|
+
> 桌签模板由工具内置模板(`engine/templates/table_sign.dotx`)自动生成,无需外部模板文件。
|
|
1898
1898
|
> 生成时以名单输入文件或标准输入传递人员姓名(每行一人),支持 `--combined` 合并为一个多页文档。
|
|
1899
1899
|
|
|
1900
1900
|
**第二步:md2docx 转换(管线内步骤)**
|
|
@@ -2662,7 +2662,7 @@ python -m gongwen check 成品.docx -t <类型> --json
|
|
|
2662
2662
|
| 讲话要点标题 | 黑体 | 18pt | 首行缩进2字 | 一、二、三 等层次标题 |
|
|
2663
2663
|
| 议程导引 | 仿宋_GB2312 | 18pt | 两端对齐 | "首先""下面""现在"等过渡语 |
|
|
2664
2664
|
|
|
2665
|
-
> **讲话稿(speech)与主持词(host_speech
|
|
2665
|
+
> **讲话稿(speech)与主持词(host_speech)格式差异**(以最终版定稿为准):
|
|
2666
2666
|
> - 页边距:讲话稿用国标默认(上3.7/下3.5/左2.8/右2.6cm);主持词与普通公文一致(上2.8/下2.8/左2.7/右2.7cm)。
|
|
2667
2667
|
> - 署名/日期行距:讲话稿 35pt;主持词 30pt(均楷体_GB2312 18pt 居中)。
|
|
2668
2668
|
> - 正文:均为仿宋_GB2312 18pt 不加粗、行距 30pt exact、首行缩进 2 字;主持词议程引导句可局部加粗。
|
package/dsh/client.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
// 公文全流程处理工具 DSH client —
|
|
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.
|
|
5
5
|
//
|
|
6
6
|
// 官方依据:DeepSeek Harness Bluebook Developer Guide · Client UI & Slots
|
|
7
7
|
// - 只写纯 JavaScript:无 TS/JSX/import/require,React 用 React.createElement
|
|
8
|
-
// -
|
|
8
|
+
// - 设置侧边栏平级菜单:注册 settings.section(id=gongwen-styles, order=20,
|
|
9
|
+
// label=文档样式配置),取代原 settings.plugin.item 插件配置卡片
|
|
9
10
|
// - 通过 ctx.settingsScope.bind({ namespace }) 读写官方 settings 命名空间(revision 设栅)
|
|
10
11
|
// - 样式使用 --dsw-alias-* 语义 token,不写死颜色
|
|
11
12
|
// - 打包格式 = loader 的 lazy-CJS factory 产物(window.__ModuleLoader__.load)
|
|
@@ -26,10 +27,42 @@ window.__ModuleLoader__.load({
|
|
|
26
27
|
// 与 Host 侧 ctx.settings.register 配对的命名空间
|
|
27
28
|
var NS = "gongwen-skill";
|
|
28
29
|
|
|
29
|
-
//
|
|
30
|
+
// 25 种公文类型(与 rules/official/*.yaml 及 list-types 输出一致)
|
|
31
|
+
// 用于「默认公文类型」下拉;value 为英文 id(配置存储值,与 CLI --doc-type 兼容),
|
|
32
|
+
// label 为中文名(取自各 rules/official/<id>.yaml 的 template_name)。
|
|
33
|
+
// 若 settings 中已有值不在列表内,会追加显示该值。
|
|
34
|
+
var DOC_TYPES = [
|
|
35
|
+
{ value: "announcement", label: "通告" },
|
|
36
|
+
{ value: "bill", label: "议案" },
|
|
37
|
+
{ value: "bulletin", label: "通报" },
|
|
38
|
+
{ value: "command", label: "命令(令)" },
|
|
39
|
+
{ value: "communique", label: "公报" },
|
|
40
|
+
{ value: "decision", label: "决定" },
|
|
41
|
+
{ value: "host_speech", label: "主持词" },
|
|
42
|
+
{ value: "instruction", label: "指示" },
|
|
43
|
+
{ value: "letter", label: "函" },
|
|
44
|
+
{ value: "meeting", label: "会议纪要" },
|
|
45
|
+
{ value: "minutes", label: "纪要" },
|
|
46
|
+
{ value: "news", label: "新闻稿/简报" },
|
|
47
|
+
{ value: "notice", label: "通知" },
|
|
48
|
+
{ value: "notice_public", label: "公告" },
|
|
49
|
+
{ value: "opinion", label: "意见" },
|
|
50
|
+
{ value: "regulation", label: "制度" },
|
|
51
|
+
{ value: "reply", label: "批复" },
|
|
52
|
+
{ value: "report", label: "报告" },
|
|
53
|
+
{ value: "request", label: "请示" },
|
|
54
|
+
{ value: "resolution", label: "决议" },
|
|
55
|
+
{ value: "speech", label: "讲话稿" },
|
|
56
|
+
{ value: "summary", label: "总结" },
|
|
57
|
+
{ value: "table_sign", label: "座签" },
|
|
58
|
+
{ value: "technical_proposal", label: "技术方案" },
|
|
59
|
+
{ value: "work_plan", label: "工作方案" },
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
// 扁平字段表:path(嵌套数组)、label、placeholder、type(text|checkbox|select)
|
|
30
63
|
// 与 dsh/index.js 的 settings schema 保持一一对应
|
|
31
64
|
var FIELDS = [
|
|
32
|
-
{ path: ["default_doc_type"], label: "默认公文类型", placeholder: "notice", type: "
|
|
65
|
+
{ path: ["default_doc_type"], label: "默认公文类型", placeholder: "notice", type: "select" },
|
|
33
66
|
|
|
34
67
|
{ path: ["page_setup", "margins", "top"], label: "上边距", placeholder: "2.8cm", type: "text" },
|
|
35
68
|
{ path: ["page_setup", "margins", "bottom"], label: "下边距", placeholder: "2.8cm", type: "text" },
|
|
@@ -92,7 +125,7 @@ window.__ModuleLoader__.load({
|
|
|
92
125
|
return JSON.parse(JSON.stringify(v === undefined ? null : v));
|
|
93
126
|
}
|
|
94
127
|
|
|
95
|
-
// ----
|
|
128
|
+
// ---- 配置 controller:暂存编辑 → scope.mutate 一次性提交 ----
|
|
96
129
|
function makeCardController(scope) {
|
|
97
130
|
var snapshot = { status: "loading", value: null, writable: false, base: null, user: null };
|
|
98
131
|
var staged = {}; // pathKey -> { value, overridden }
|
|
@@ -255,6 +288,51 @@ window.__ModuleLoader__.load({
|
|
|
255
288
|
);
|
|
256
289
|
}
|
|
257
290
|
|
|
291
|
+
if (f.type === "select") {
|
|
292
|
+
var cur = value === undefined || value === null ? "" : String(value);
|
|
293
|
+
var opts = DOC_TYPES.slice();
|
|
294
|
+
if (cur && !opts.some(function (o) { return o.value === cur; })) opts.unshift({ value: cur, label: cur });
|
|
295
|
+
return h("label", {
|
|
296
|
+
style: {
|
|
297
|
+
display: "flex", alignItems: "center", gap: "10px",
|
|
298
|
+
padding: "5px 0", fontSize: "13px", lineHeight: "1.5",
|
|
299
|
+
color: "var(--dsw-alias-label-primary)",
|
|
300
|
+
},
|
|
301
|
+
},
|
|
302
|
+
h("span", {
|
|
303
|
+
style: {
|
|
304
|
+
minWidth: "140px", flexShrink: 0,
|
|
305
|
+
color: "var(--dsw-alias-label-secondary)",
|
|
306
|
+
},
|
|
307
|
+
}, f.label),
|
|
308
|
+
h("select", {
|
|
309
|
+
value: cur,
|
|
310
|
+
disabled: disabled,
|
|
311
|
+
onChange: function (e) { onChange(e.target.value); },
|
|
312
|
+
style: {
|
|
313
|
+
flex: 1, minWidth: 0, height: "32px", padding: "0 10px",
|
|
314
|
+
fontSize: "13px", lineHeight: "1.5",
|
|
315
|
+
border: "1px solid var(--dsw-alias-border-l4)",
|
|
316
|
+
borderRadius: "6px",
|
|
317
|
+
background: "var(--dsw-alias-bg-layer-3)",
|
|
318
|
+
color: "var(--dsw-alias-label-primary)",
|
|
319
|
+
},
|
|
320
|
+
},
|
|
321
|
+
opts.map(function (o) {
|
|
322
|
+
return h("option", { key: o.value, value: o.value }, o.label);
|
|
323
|
+
})
|
|
324
|
+
),
|
|
325
|
+
h("span", {
|
|
326
|
+
style: {
|
|
327
|
+
flexShrink: 0, fontSize: "11px",
|
|
328
|
+
color: overridden
|
|
329
|
+
? "var(--dsw-alias-label-secondary)"
|
|
330
|
+
: "var(--dsw-alias-label-tertiary)",
|
|
331
|
+
},
|
|
332
|
+
}, overridden ? "已自定义" : "默认"),
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
|
|
258
336
|
return h("label", {
|
|
259
337
|
style: {
|
|
260
338
|
display: "flex", alignItems: "center", gap: "10px",
|
|
@@ -311,9 +389,11 @@ window.__ModuleLoader__.load({
|
|
|
311
389
|
);
|
|
312
390
|
}
|
|
313
391
|
|
|
314
|
-
|
|
392
|
+
// ---- 设置页「文档样式配置」主组件(settings.section 内容)----
|
|
393
|
+
function GongwenStylesSection(props) {
|
|
315
394
|
var face = props.face;
|
|
316
395
|
var [, force] = useState(0);
|
|
396
|
+
|
|
317
397
|
useEffect(function () {
|
|
318
398
|
return face.subscribe(function () { force(function (n) { return n + 1; }); });
|
|
319
399
|
}, [face]);
|
|
@@ -322,7 +402,6 @@ window.__ModuleLoader__.load({
|
|
|
322
402
|
var unavailable = meta.status !== "ready";
|
|
323
403
|
var disabled = !meta.writable || meta.saving || unavailable;
|
|
324
404
|
|
|
325
|
-
// 按组渲染
|
|
326
405
|
function renderGroup(groupLabel, fields) {
|
|
327
406
|
return h(Section, { title: groupLabel },
|
|
328
407
|
fields.map(function (f) {
|
|
@@ -340,7 +419,7 @@ window.__ModuleLoader__.load({
|
|
|
340
419
|
|
|
341
420
|
return h("div", {
|
|
342
421
|
style: {
|
|
343
|
-
padding: "16px 4px", maxWidth: "
|
|
422
|
+
padding: "16px 4px", maxWidth: "760px",
|
|
344
423
|
fontSize: "14px", lineHeight: "1.6",
|
|
345
424
|
color: "var(--dsw-alias-label-primary)",
|
|
346
425
|
},
|
|
@@ -356,7 +435,7 @@ window.__ModuleLoader__.load({
|
|
|
356
435
|
|
|
357
436
|
unavailable && h("div", {
|
|
358
437
|
style: { padding: "12px 0", color: "var(--dsw-alias-label-tertiary)" },
|
|
359
|
-
}, "设置服务不可用(当前部署未挂载 settings provider
|
|
438
|
+
}, "设置服务不可用(当前部署未挂载 settings provider),排版参数区只读。"),
|
|
360
439
|
|
|
361
440
|
renderGroup("基础设置", FIELDS.slice(0, 1)),
|
|
362
441
|
renderGroup("页面设置", FIELDS.slice(1, 7)),
|
|
@@ -400,10 +479,12 @@ window.__ModuleLoader__.load({
|
|
|
400
479
|
},
|
|
401
480
|
}, "同步文件: ~/.gongwen-skill/dsh-config.json"),
|
|
402
481
|
),
|
|
482
|
+
|
|
403
483
|
);
|
|
404
484
|
}
|
|
405
485
|
|
|
406
|
-
// 导出 apply + inject(官方 Client UI & Slots
|
|
486
|
+
// 导出 apply + inject(官方 Client UI & Slots 注册方式:
|
|
487
|
+
// settings.section 在设置侧边栏出现独立平级菜单)
|
|
407
488
|
exports.apply = function (ctx) {
|
|
408
489
|
var slots = ctx.get("slots");
|
|
409
490
|
var settingsScope = ctx.get("settingsScope");
|
|
@@ -412,16 +493,18 @@ window.__ModuleLoader__.load({
|
|
|
412
493
|
var scope = settingsScope.bind({ namespace: NS });
|
|
413
494
|
var controller = makeCardController(scope);
|
|
414
495
|
|
|
415
|
-
//
|
|
416
|
-
slots.inject("settings.
|
|
496
|
+
// 注册设置侧边栏平级菜单「文档样式配置」
|
|
497
|
+
slots.inject("settings.section", function () {
|
|
417
498
|
return slots.register({
|
|
418
|
-
name: "settings.
|
|
419
|
-
|
|
420
|
-
|
|
499
|
+
name: "settings.section",
|
|
500
|
+
id: "gongwen-styles",
|
|
501
|
+
order: 20,
|
|
502
|
+
label: "文档样式配置",
|
|
503
|
+
locale: "settings",
|
|
421
504
|
inject: function () {
|
|
422
505
|
return { face: controller };
|
|
423
506
|
},
|
|
424
|
-
},
|
|
507
|
+
}, GongwenStylesSection);
|
|
425
508
|
});
|
|
426
509
|
|
|
427
510
|
// 插件卸载时释放订阅
|
|
@@ -433,4 +516,4 @@ window.__ModuleLoader__.load({
|
|
|
433
516
|
|
|
434
517
|
return module.exports;
|
|
435
518
|
},
|
|
436
|
-
});
|
|
519
|
+
});
|
package/dsh/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// 公文全流程处理工具 - DSH plugin bridge (gongwen-skill, v2.
|
|
1
|
+
// 公文全流程处理工具 - DSH plugin bridge (gongwen-skill, v2.12.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.
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
// 纯 CLI 用户完全不受影响(不使用 DSH 插件时不会读取 dsh-config.json)
|
|
22
22
|
|
|
23
23
|
import { spawn } from "node:child_process";
|
|
24
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
24
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, copyFileSync } from "node:fs";
|
|
25
25
|
import { dirname, join, resolve } from "node:path";
|
|
26
26
|
import { fileURLToPath } from "node:url";
|
|
27
|
-
import { homedir } from "node:os";
|
|
27
|
+
import { homedir, tmpdir } from "node:os";
|
|
28
28
|
import { defineTool } from "@deepseek-ai/dsh-tools";
|
|
29
29
|
import Schema from "@deepseek-ai/schemastery";
|
|
30
30
|
|
|
@@ -44,7 +44,7 @@ const SECTION_NAME = "plugin:gongwen-skill";
|
|
|
44
44
|
const SECTION_ORDER = 100;
|
|
45
45
|
|
|
46
46
|
// 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)。覆盖通知/请示/报告/函/会议纪要等
|
|
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
48
|
|
|
49
49
|
// 定位 gongwen CLI 真实安装根目录
|
|
50
50
|
function _resolve_gongwen_root() {
|
|
@@ -416,6 +416,29 @@ async function runCli(command, args = {}, options = {}) {
|
|
|
416
416
|
});
|
|
417
417
|
}
|
|
418
418
|
|
|
419
|
+
|
|
420
|
+
// Agent 预设安装:把插件包内 presets/(preset.yml + agent.cordis.yml)同步到
|
|
421
|
+
// ~/.dsh/.agent-presets/gongwen-skill/,使 DSH Web 新建会话可选「公文全流程处理专家」预设。
|
|
422
|
+
// 参照官方插件模式(np-ppt):每次 apply 幂等同步;用户自行修改过的预设会被插件版本覆盖,
|
|
423
|
+
// 如需自定义可从该预设 copy 出新预设再改。
|
|
424
|
+
function ensurePresetInstalled() {
|
|
425
|
+
try {
|
|
426
|
+
const userPresetDir = join(homedir(), ".dsh", ".agent-presets", "gongwen-skill");
|
|
427
|
+
mkdirSync(userPresetDir, { recursive: true });
|
|
428
|
+
const pluginPresets = join(resolve(__dirname, ".."), "presets");
|
|
429
|
+
const presetYml = join(pluginPresets, "preset.yml");
|
|
430
|
+
const agentYml = join(pluginPresets, "agent.cordis.yml");
|
|
431
|
+
if (existsSync(presetYml)) {
|
|
432
|
+
copyFileSync(presetYml, join(userPresetDir, "preset.yml"));
|
|
433
|
+
}
|
|
434
|
+
if (existsSync(agentYml)) {
|
|
435
|
+
copyFileSync(agentYml, join(userPresetDir, "agent.cordis.yml"));
|
|
436
|
+
}
|
|
437
|
+
} catch {
|
|
438
|
+
// 预设安装失败不阻塞插件其余能力
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
419
442
|
// 模型工具参数 → CLI 参数对象(camel/snake → CLI kebab 映射)
|
|
420
443
|
function toolArgsToCli(args) {
|
|
421
444
|
const out = {};
|
|
@@ -610,6 +633,10 @@ export function apply(ctx) {
|
|
|
610
633
|
}
|
|
611
634
|
}
|
|
612
635
|
|
|
636
|
+
// 5. 安装 Agent 预设(presets/ → ~/.dsh/.agent-presets/gongwen-skill/,
|
|
637
|
+
// 让 DSH 新建会话可选「公文全流程处理专家」;失败不影响插件其余能力)
|
|
638
|
+
ensurePresetInstalled();
|
|
639
|
+
|
|
613
640
|
ctx.logger?.info?.(`gongwen-skill plugin loaded${projectRoot ? ` (projectRoot=${projectRoot})` : "(gongwen 包未定位)"}`);
|
|
614
641
|
} catch (err) {
|
|
615
642
|
ctx.logger?.error?.(`gongwen-skill plugin apply failed: ${err.message}`);
|
package/engine/fact_check.py
CHANGED
|
@@ -37,8 +37,8 @@ class Entity:
|
|
|
37
37
|
"""从文档中提取的实体。"""
|
|
38
38
|
entity_type: str # person / org / project / doc_no / data
|
|
39
39
|
entity_name: str # 实体名(如"XXX")
|
|
40
|
-
doc_attribute: str = "" # V2 新增:文档中的属性(如"
|
|
41
|
-
doc_context: str = "" # V2 新增:完整上下文(如"
|
|
40
|
+
doc_attribute: str = "" # V2 新增:文档中的属性(如"××单位党组成员、副主任")
|
|
41
|
+
doc_context: str = "" # V2 新增:完整上下文(如"××单位党组成员、副主任XXX...")
|
|
42
42
|
context: str = "" # 上下文片段
|
|
43
43
|
paragraph_index: int = 0
|
|
44
44
|
status: str = "待核验" # 待核验 / 已确认 / 存疑 / 无法核验
|
|
@@ -254,7 +254,7 @@ def extract_entities(paragraphs: list[str]) -> List[Entity]:
|
|
|
254
254
|
|
|
255
255
|
_LLM_EXTRACT_PROMPT = (
|
|
256
256
|
"请从以下中文公文中提取所有需事实核验的实体,包括:\n"
|
|
257
|
-
"1. 人名(含其职务描述,如\"
|
|
257
|
+
"1. 人名(含其职务描述,如\"××单位党组成员、副主任XXX\")\n"
|
|
258
258
|
"2. 组织机构名(含完整全称)\n"
|
|
259
259
|
"3. 发文字号、关键数据\n"
|
|
260
260
|
"输出 JSON 数组,格式:[{{\"type\": \"person|org|doc_no|data\", \"name\": \"实体名\", "
|
|
@@ -552,7 +552,7 @@ def extract_person_title_pairs(text: str) -> List[tuple[str, str]]:
|
|
|
552
552
|
"""从段落文本中提取 (姓名, 职务描述) 配对。
|
|
553
553
|
|
|
554
554
|
模式:{职务}(2-8 字,含 主任/副主任/书记/部长 等后缀)+ {姓名}(2-3 字)。
|
|
555
|
-
如"
|
|
555
|
+
如"××单位党组成员、副主任XXX" → ("XXX", "××单位党组成员、副主任")。
|
|
556
556
|
"""
|
|
557
557
|
pairs: List[tuple[str, str]] = []
|
|
558
558
|
title_pattern = r'([\u4e00-\u9fa5、]{2,20}(?:' + '|'.join(_TITLE_SUFFIXES) + r'))([\u4e00-\u9fa5]{2,3})(?![、,。;])'
|
package/engine/handoff.py
CHANGED
|
@@ -70,7 +70,7 @@ def write_handoff(
|
|
|
70
70
|
"""写入交接文档,返回文件路径。
|
|
71
71
|
|
|
72
72
|
Args:
|
|
73
|
-
session_id: 唯一标识,如 '
|
|
73
|
+
session_id: 唯一标识,如 '会议材料优化'
|
|
74
74
|
context: 任务上下文(what_we_are_doing / doc_type / input_file / working_directory)
|
|
75
75
|
completed: 已完成事项列表,每项 {"item", "evidence"}
|
|
76
76
|
next_steps: 下一步计划列表,每项 {"action", "status", "depends_on"}
|
package/gongwen/__init__.py
CHANGED
package/gongwen/_legacy.py
CHANGED
|
@@ -16,7 +16,7 @@ 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.
|
|
19
|
+
__version__ = "2.12.0"
|
|
20
20
|
# 版本号应与 gongwen/__init__.py 保持一致,每次发版同步更新
|
|
21
21
|
"""
|
|
22
22
|
中文公文全流程处理工具 —— 基于 GB/T 9704《党政机关公文格式》国家标准。
|
|
@@ -48,8 +48,8 @@ __version__ = "2.11.0"
|
|
|
48
48
|
python -m gongwen check input.docx -t notice --json
|
|
49
49
|
python -m gongwen optimize input.docx -o output.docx -t report
|
|
50
50
|
cat input.md | python -m gongwen md2docx - -o 公文.docx # 管道输入
|
|
51
|
-
python -m gongwen header in.docx --org-name
|
|
52
|
-
python -m gongwen footer in.docx --cc
|
|
51
|
+
python -m gongwen header in.docx --org-name ×××办公厅 --doc-number "×××办发〔2026〕1号"
|
|
52
|
+
python -m gongwen footer in.docx --cc 各省×× --printer ×××办公厅 --print-date 2026年7月23日
|
|
53
53
|
python -m gongwen pagenum in.docx --alignment right
|
|
54
54
|
"""
|
|
55
55
|
import json # noqa: E402
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gongwen-skill",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.12.0",
|
|
4
4
|
"description": "公文全流程处理工具 - GB/T 9704 格式检查/修复/内容优化/模板生成/版式注入",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dsh/index.js",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@deepseek-ai/cordis": ">=4",
|
|
49
49
|
"@deepseek-ai/dsh-tools": ">=0.1.0",
|
|
50
50
|
"@deepseek-ai/schemastery": ">=3.18.0",
|
|
51
|
-
"@deepseek-ai/dsh-client-ui-settings-plugins": ">=0.1.
|
|
51
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins": ">=0.1.2-rc.1"
|
|
52
52
|
},
|
|
53
53
|
"scripts": {
|
|
54
54
|
"prepack": "node scripts/clean-cache.js",
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"rules/",
|
|
62
62
|
"prompts/",
|
|
63
63
|
"etc/",
|
|
64
|
+
"presets/",
|
|
64
65
|
"cordis.patch.yml",
|
|
65
66
|
"SKILL.md",
|
|
66
67
|
"pyproject.toml",
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
# gongwen-skill Agent Preset — 公文全流程处理专家
|
|
3
|
+
#
|
|
4
|
+
# 专用于中文公文(党政机关公文 GB/T 9704)处理的 Agent 预设:
|
|
5
|
+
# 格式检查 / 自动修复 / 内容修订对比 / 模板生成 / 样式学习 / Markdown 转公文
|
|
6
|
+
# / 版头版记页码注入 / 全面诊断修复。
|
|
7
|
+
#
|
|
8
|
+
# 业务能力由 gongwen-skill 插件提供(host 平面注册 gongwen 工具 + 运行时技能
|
|
9
|
+
# gongwen-skill);本预设提供公文专家 Persona、完整工具链与隔离 realm 编排,
|
|
10
|
+
# 让用户新建会话切换到该预设即可开箱即用。
|
|
11
|
+
#
|
|
12
|
+
# 适配 DSH ≥ 0.1.2-rc.1(settings.section / tools.register / webServer 时代)。
|
|
13
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
14
|
+
|
|
15
|
+
# ── identity & persona ───────────────────────────────────────────────────────
|
|
16
|
+
|
|
17
|
+
- id: persona
|
|
18
|
+
name: '@deepseek-ai/dsh-persona'
|
|
19
|
+
config:
|
|
20
|
+
text: >-
|
|
21
|
+
You are an expert Chinese Official Document (党政机关公文) Processing Agent
|
|
22
|
+
powered by the {{model}} model, built on the gongwen-skill toolchain.
|
|
23
|
+
Your working directory is {{cwd}}.
|
|
24
|
+
|
|
25
|
+
## Core Mission
|
|
26
|
+
Handle the full lifecycle of .docx official documents per GB/T 9704:
|
|
27
|
+
format checking, automated repair, content optimization with tracked revisions,
|
|
28
|
+
template generation, style learning, Markdown-to-document conversion, and
|
|
29
|
+
版头/版记/页码 injection — all via `python -m gongwen <command>` (the CLI is the
|
|
30
|
+
single business entry; the DSH `gongwen` model tool forwards to it).
|
|
31
|
+
|
|
32
|
+
## Capabilities (25 类公文)
|
|
33
|
+
- 列类型 `list-types`|解析 `parse`|格式检查 `check`|自动修复 `optimize`
|
|
34
|
+
- 内容修订对比版 `optimize-content`(tracked/comment-mode/inline 三种模式 + 8 色审阅角色)
|
|
35
|
+
- 模板生成 `template`|样式学习 `style-learn`(从标准 .docx 学排版生成命名模板)/ `style-list`
|
|
36
|
+
- Markdown 转公文 `md2docx`|JSON 模型生成 `generate`
|
|
37
|
+
- 版头 `header` / 版记 `footer` / 页码 `pagenum` 注入
|
|
38
|
+
- 首句加粗 `bold-first`|一键格式修复 `fix-common`
|
|
39
|
+
- 桌签生成 `table-signs`|审稿流转单 `review`|完整审校 `full-review`|文档审计 `audit`
|
|
40
|
+
- 规则管理 `rule-export`/`rule-list`/`rule-import`|版本自检 `check-update`
|
|
41
|
+
- 会话交接 `handoff`|字体管理 `font install/check/list`|向导 `wizard`
|
|
42
|
+
- 诊断 `doctor --json`|修复 `repair`
|
|
43
|
+
|
|
44
|
+
## Path Decision (路径判定)
|
|
45
|
+
- 用户有已有 .docx 且要求"排版/修复格式" → **A 格式优化**: `optimize --apply`
|
|
46
|
+
(先 `check --json` 看问题清单,再 optimize;有 P0 时 optimize 后复检)
|
|
47
|
+
- 用户有已有 .docx 且要求"润色/改措辞" → **B 内容优化**:
|
|
48
|
+
生成 changes.json → `optimize-content <d.docx> --changes changes.json
|
|
49
|
+
--apply [--mode tracked|inline] [--output-tasks tasks.json]`
|
|
50
|
+
→ Agent 核验回填 `--input-tasks` 也可
|
|
51
|
+
- 用户要从草稿/主题生成一份公文 → **C 生成**:
|
|
52
|
+
markdown 草稿 → `md2docx 草稿.md -t <类型> [--signer 落款 --date 日期]`
|
|
53
|
+
→ 「可选」`bold-first`(必须在 optimize 之前)→ `optimize`(套国标格式)
|
|
54
|
+
→ 最终 `check` 确认后交付
|
|
55
|
+
- 用户只想一键修常见格式 → **D (`fix-common`)**
|
|
56
|
+
- 用户提供一份标准文档要求"按这个格式做成模板" → **E 样式学习**:
|
|
57
|
+
`style-learn 标准.docx -n 模板名`(生成 user_rules/模板名.yaml)
|
|
58
|
+
→ 之后 `optimize -t 模板名` 套用
|
|
59
|
+
- 会议类公文默认询问是否同步生成桌签(`table-signs`)
|
|
60
|
+
|
|
61
|
+
## Hard Rules
|
|
62
|
+
- 输出必须是 .docx 成品:新会话/新任务先 `python -m gongwen handoff --list` 检查未完成交接
|
|
63
|
+
- `bold-first` 必须在 `optimize` 之前执行,否则整段加粗
|
|
64
|
+
- 图形化设置入口在「系统设置 → 文档样式配置」(页边距/行距/字体 ≈ 39 字段):
|
|
65
|
+
保存后同步到 ~/.gongwen-skill/dsh-config.json。样式模板的学习/管理走 CLI
|
|
66
|
+
(`style-learn` / `style-list` / `template`),不占用设置面板
|
|
67
|
+
- 文档格式以 GB/T 9704-2012 为准;讲话稿(speech)与主持词(host_speech)按最终版定稿样式
|
|
68
|
+
|
|
69
|
+
## Tooling
|
|
70
|
+
- 优先使用 DSH 的 `gongwen` 模型工具转发 CLI;复杂/管道场景可直接
|
|
71
|
+
`python -m gongwen <command>`(PowerShell 环境用 pwsh,其他用 bash)
|
|
72
|
+
- 只支持 OOXML .docx;旧版 .doc 先提示用户转成 .docx
|
|
73
|
+
- 交付前必须 `check 成品.docx -t <类型> --json` 复核 P0=0,质量验证通过才交付
|
|
74
|
+
|
|
75
|
+
- id: agent-instructions
|
|
76
|
+
name: '@deepseek-ai/dsh-agent-instructions'
|
|
77
|
+
config:
|
|
78
|
+
maxBytes: 65536
|
|
79
|
+
|
|
80
|
+
# ── shell ───────────────────────────────────────────────────────────────────
|
|
81
|
+
|
|
82
|
+
- id: tool-bash
|
|
83
|
+
name: '@deepseek-ai/dsh-tool-bash'
|
|
84
|
+
disabled: !!js process.platform === 'win32'
|
|
85
|
+
|
|
86
|
+
- id: tool-pwsh
|
|
87
|
+
name: '@deepseek-ai/dsh-tool-pwsh'
|
|
88
|
+
disabled: !!js process.platform !== 'win32'
|
|
89
|
+
|
|
90
|
+
# ── filesystem ──────────────────────────────────────────────────────────────
|
|
91
|
+
|
|
92
|
+
- id: tool-fs
|
|
93
|
+
name: '@deepseek-ai/dsh-tool-fs'
|
|
94
|
+
|
|
95
|
+
- id: tool-fs-search
|
|
96
|
+
name: '@deepseek-ai/dsh-tool-fs-search'
|
|
97
|
+
config:
|
|
98
|
+
sampleOverCapGlobResults: false
|
|
99
|
+
|
|
100
|
+
# ── background jobs ────────────────────────────────────────────────────────
|
|
101
|
+
|
|
102
|
+
- id: tool-jobs
|
|
103
|
+
name: '@deepseek-ai/dsh-tool-jobs'
|
|
104
|
+
|
|
105
|
+
# ── skills ──────────────────────────────────────────────────────────────────
|
|
106
|
+
|
|
107
|
+
- id: skill-filesystem
|
|
108
|
+
name: '@deepseek-ai/dsh-skill-filesystem'
|
|
109
|
+
|
|
110
|
+
- id: tool-skill
|
|
111
|
+
name: '@deepseek-ai/dsh-tool-skill'
|
|
112
|
+
|
|
113
|
+
# ── goals ───────────────────────────────────────────────────────────────────
|
|
114
|
+
|
|
115
|
+
- id: tool-goal
|
|
116
|
+
name: '@deepseek-ai/dsh-tool-goal'
|
|
117
|
+
|
|
118
|
+
# ── plan mode ───────────────────────────────────────────────────────────────
|
|
119
|
+
|
|
120
|
+
- id: planning
|
|
121
|
+
name: cordis:group
|
|
122
|
+
group: true
|
|
123
|
+
isolate:
|
|
124
|
+
planMode: true
|
|
125
|
+
config:
|
|
126
|
+
- id: plan-mode
|
|
127
|
+
name: '@deepseek-ai/dsh-plan-mode'
|
|
128
|
+
config:
|
|
129
|
+
section: |
|
|
130
|
+
You are in plan mode. Stay in plan mode until exit_plan_mode succeeds or the user switches the session mode. Imperative language to implement changes means plan the implementation, not execute it. A user's conversational agreement — including an answer confirming something you asked — approves nothing and does not end plan mode; fold the confirmed decision into the plan and submit it through exit_plan_mode.
|
|
131
|
+
|
|
132
|
+
Explore first. Use non-mutating reads, searches, static analysis, and checks to ground the plan in the actual repository. Do not edit or write files, change configuration, run formatters or code generation that rewrites tracked files, commit, or otherwise carry out the plan. Prefer existing functions and patterns over new machinery.
|
|
133
|
+
|
|
134
|
+
The tool catalog stays the same across modes for request-cache stability. These plan-mode rules override any later tool description or guidance that suggests using mutation tools; those tools remain listed to keep the tool catalog unchanged. Do not use todo_write to track this planning phase: it tracks implementation after an approved plan, while the plan itself belongs in exit_plan_mode.
|
|
135
|
+
|
|
136
|
+
Resolve discoverable facts by inspection. Use ask_user_question only for user-owned choices or material ambiguity that inspection cannot answer. Do not ask the user where code lives or how current behavior works when you can find out.
|
|
137
|
+
|
|
138
|
+
Make the plan decision-complete: state the goal and success criteria; group implementation changes by subsystem; identify public API, schema, and data-flow changes; cover edge cases, failure modes, tests, acceptance criteria, and explicit assumptions. Keep it concise enough to review but detailed enough that another engineer can implement it without making design decisions.
|
|
139
|
+
|
|
140
|
+
When ready, call exit_plan_mode with the complete plan markdown, starting with a # title. Make exit_plan_mode the only and final tool call in that assistant response: it presents the plan for approval, and implementation begins only in a later step after approval. Do not paste the final plan as a plain reply or ask "should I proceed?" through prose or ask_user_question. If review rejects it, incorporate the feedback and present again. If the review channel is unavailable or aborted, stay in plan mode and ask the user to switch modes manually; do not proceed with implementation.
|
|
141
|
+
|
|
142
|
+
# ── compaction ──────────────────────────────────────────────────────────────
|
|
143
|
+
|
|
144
|
+
- id: compaction
|
|
145
|
+
name: cordis:group
|
|
146
|
+
group: true
|
|
147
|
+
isolate:
|
|
148
|
+
compaction: true
|
|
149
|
+
toolResultPruner: true
|
|
150
|
+
config:
|
|
151
|
+
- id: compaction-basic
|
|
152
|
+
name: '@deepseek-ai/dsh-compaction-basic'
|
|
153
|
+
|
|
154
|
+
- id: command-compact
|
|
155
|
+
name: '@deepseek-ai/dsh-command-compact'
|
|
156
|
+
|
|
157
|
+
- id: tool-result-pruner
|
|
158
|
+
name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
|
|
159
|
+
config:
|
|
160
|
+
thresholdChars: 8192
|
|
161
|
+
headChars: 4096
|
|
162
|
+
tailChars: 1024
|
|
163
|
+
|
|
164
|
+
# ── delegation and workflows ────────────────────────────────────────────────
|
|
165
|
+
|
|
166
|
+
- id: delegation
|
|
167
|
+
name: cordis:group
|
|
168
|
+
group: true
|
|
169
|
+
isolate:
|
|
170
|
+
workflowEngine: true
|
|
171
|
+
config:
|
|
172
|
+
- id: tool-subagent-control
|
|
173
|
+
name: '@deepseek-ai/dsh-tool-subagent-control'
|
|
174
|
+
|
|
175
|
+
- id: tool-subagent-list-agents
|
|
176
|
+
name: '@deepseek-ai/dsh-tool-subagent-control/list-agents'
|
|
177
|
+
|
|
178
|
+
- id: tool-subagent
|
|
179
|
+
name: '@deepseek-ai/dsh-tool-subagent'
|
|
180
|
+
config:
|
|
181
|
+
provider: spawn
|
|
182
|
+
toolName: subagent
|
|
183
|
+
backgroundMode: continuable
|
|
184
|
+
|
|
185
|
+
- id: tool-subagent-fork
|
|
186
|
+
name: '@deepseek-ai/dsh-tool-subagent'
|
|
187
|
+
config:
|
|
188
|
+
provider: fork
|
|
189
|
+
toolName: subagent_fork
|
|
190
|
+
backgroundMode: continuable
|
|
191
|
+
|
|
192
|
+
- id: tool-subagent-codex
|
|
193
|
+
name: '@deepseek-ai/dsh-tool-subagent'
|
|
194
|
+
disabled: true
|
|
195
|
+
config:
|
|
196
|
+
provider: codex
|
|
197
|
+
toolName: subagent_codex
|
|
198
|
+
enableRunInBackground: false
|
|
199
|
+
maxDepth: provider-managed
|
|
200
|
+
|
|
201
|
+
- id: tool-subagent-claude-code
|
|
202
|
+
name: '@deepseek-ai/dsh-tool-subagent'
|
|
203
|
+
disabled: true
|
|
204
|
+
config:
|
|
205
|
+
provider: claude-code
|
|
206
|
+
toolName: subagent_claude_code
|
|
207
|
+
enableRunInBackground: false
|
|
208
|
+
maxDepth: provider-managed
|
|
209
|
+
|
|
210
|
+
- id: workflow-worker-thread
|
|
211
|
+
name: '@deepseek-ai/dsh-workflow-worker-thread'
|
|
212
|
+
config:
|
|
213
|
+
provider: spawn
|
|
214
|
+
|
|
215
|
+
- id: tool-workflow
|
|
216
|
+
name: '@deepseek-ai/dsh-tool-workflow'
|
|
217
|
+
|
|
218
|
+
- id: tool-ralph
|
|
219
|
+
name: '@deepseek-ai/dsh-tool-ralph'
|
|
220
|
+
config:
|
|
221
|
+
subagentProvider: spawn
|
|
222
|
+
maxRounds: 64
|
|
223
|
+
|
|
224
|
+
# ── remaining model-facing rows ─────────────────────────────────────────────
|
|
225
|
+
|
|
226
|
+
- id: tool-ask-user
|
|
227
|
+
name: '@deepseek-ai/dsh-tool-ask-user'
|
|
228
|
+
|
|
229
|
+
- id: tool-todo
|
|
230
|
+
name: '@deepseek-ai/dsh-tool-todo'
|
|
231
|
+
config:
|
|
232
|
+
allowParallelInProgress: true
|
|
233
|
+
|
|
234
|
+
- id: tool-web
|
|
235
|
+
name: '@deepseek-ai/dsh-tool-web'
|
|
236
|
+
config:
|
|
237
|
+
fetch: false
|
|
238
|
+
searchTimeoutMs: 60000
|
package/prompts/usage-prompts.md
CHANGED
package/pyproject.toml
CHANGED
|
@@ -201,28 +201,28 @@ check_rules:
|
|
|
201
201
|
severity: P0
|
|
202
202
|
field: page_setup.margins.top
|
|
203
203
|
expected: "2.8cm"
|
|
204
|
-
message: "上边距应为2.8cm
|
|
204
|
+
message: "上边距应为2.8cm(红头文件正文区收窄)"
|
|
205
205
|
|
|
206
206
|
- id: CHK-C002
|
|
207
207
|
name: "左边距检查"
|
|
208
208
|
severity: P0
|
|
209
209
|
field: page_setup.margins.left
|
|
210
210
|
expected: "2.7cm"
|
|
211
|
-
message: "左边距应为2.7cm
|
|
211
|
+
message: "左边距应为2.7cm"
|
|
212
212
|
|
|
213
213
|
- id: CHK-C003
|
|
214
214
|
name: "右边距检查"
|
|
215
215
|
severity: P0
|
|
216
216
|
field: page_setup.margins.right
|
|
217
217
|
expected: "2.7cm"
|
|
218
|
-
message: "右边距应为2.7cm
|
|
218
|
+
message: "右边距应为2.7cm"
|
|
219
219
|
|
|
220
220
|
- id: CHK-C011
|
|
221
221
|
name: "下边距检查"
|
|
222
222
|
severity: P0
|
|
223
223
|
field: page_setup.margins.bottom
|
|
224
224
|
expected: "2.8cm"
|
|
225
|
-
message: "下边距应为2.8cm
|
|
225
|
+
message: "下边距应为2.8cm"
|
|
226
226
|
|
|
227
227
|
- id: CHK-C018
|
|
228
228
|
name: "纸张大小检查"
|
|
@@ -396,7 +396,7 @@ check_rules:
|
|
|
396
396
|
severity: P1
|
|
397
397
|
field: body.line_spacing
|
|
398
398
|
expected: 33pt
|
|
399
|
-
message: "正文行距应为固定值33
|
|
399
|
+
message: "正文行距应为固定值33磅(与标题行距统一)"
|
|
400
400
|
|
|
401
401
|
- id: CHK-C012
|
|
402
402
|
name: "正文首行缩进检查"
|
package/rules/official/news.yaml
CHANGED
|
@@ -9,7 +9,7 @@ display: 新闻稿/简报
|
|
|
9
9
|
description: 报道会议、活动、工作进展等新闻事实的文稿
|
|
10
10
|
|
|
11
11
|
# ===== 范文学习来源 =====
|
|
12
|
-
# 范文1
|
|
12
|
+
# 范文1:筹委会市场开发部第一次全体会议
|
|
13
13
|
# 标题:部门名+序次+会议类型+召开
|
|
14
14
|
# 强调=部署,要求=督办
|
|
15
15
|
# 范文2:筹委会办公室人工智能赋能信息技术工作专题部署会议
|
|
@@ -98,7 +98,7 @@ structure:
|
|
|
98
98
|
required: true
|
|
99
99
|
keywords: ["稿源", "编辑"]
|
|
100
100
|
elements: [稿源单位, 编辑姓名]
|
|
101
|
-
example: "
|
|
101
|
+
example: "稿源:××单位共同发展处 编辑:XXX"
|
|
102
102
|
|
|
103
103
|
# 新闻稿不需要的法定公文检查项
|
|
104
104
|
# P3-7:skip_checks 为声明性文档配置(供 Agent 审阅参考),focus_checks 由
|