gongwen-skill 2.6.0 → 2.6.1
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/.dsh/skills/gongwen-skill/SKILL.md +15 -18
- package/.dsh/skills/gongwen-skill.md +15 -18
- package/CHANGELOG.md +7 -0
- package/README.md +7 -7
- package/SKILL.md +15 -18
- package/dsh/index.js +1 -1
- package/gongwen/__init__.py +1 -1
- package/gongwen/_legacy.py +3 -3
- package/gongwen/cli/helpers.py +1 -1
- package/gongwen/cli/update_cmds.py +69 -21
- package/package.json +1 -1
- package/prompts/usage-prompts.md +1 -1
- package/pyproject.toml +1 -1
|
@@ -93,21 +93,16 @@ metadata:
|
|
|
93
93
|
|
|
94
94
|
1. 读取 `gongwen` 包顶部的 `__version__` 常量,获取本地版本号
|
|
95
95
|
2. 告知用户:`当前加载 gongwen-skill v{__version__}`
|
|
96
|
-
3.
|
|
96
|
+
3. **版本自检**(不能只用本地 `git describe`——它只读本地可达 tag,未 fetch 时会误判本地即最新;也不能只查单一仓库——网络抖动会导致误判):
|
|
97
97
|
```bash
|
|
98
|
-
# 首选:CLI
|
|
98
|
+
# 首选:CLI 内置自检命令(PyPI pip 包权威判定 + GitHub 备用渠道,自动比对本地版本)
|
|
99
99
|
python -m gongwen check-update
|
|
100
100
|
|
|
101
|
-
#
|
|
102
|
-
|
|
103
|
-
https://github.com/linhut/gongwen-skill.git \
|
|
104
|
-
https://gitcode.com/linhut/gongwen-skill.git \
|
|
105
|
-
https://atomgit.com/linhut/gongwen-skill.git ; do
|
|
106
|
-
git ls-remote --tags "$url" | awk -F/ '{print $NF}' \
|
|
107
|
-
| grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -1
|
|
108
|
-
done
|
|
101
|
+
# 手动回退:PyPI 权威(pip 包发布源)
|
|
102
|
+
python -c "import urllib.request,json;print(json.loads(urllib.request.urlopen('https://pypi.org/pypi/gongwen-skill/json',timeout=10).read())['info']['version']))"
|
|
109
103
|
```
|
|
110
|
-
-
|
|
104
|
+
- **PyPI 为权威判定渠道**(pip 包核心分发,pip install -U 即从 PyPI 拉取);PyPI 不可达时回退 GitHub tag(备用渠道,git 用户/CI 触发源)
|
|
105
|
+
- GitCode/AtomGit 与 GitHub 同源 tag,仅在 GitHub 不可达时作国内拉取镜像提示(不参与版本判定)
|
|
111
106
|
- 若全部渠道均不可用(无 git/无网络),**必须明确告知用户"版本自检因无法访问远程而跳过"**,不得静默假设本地即最新
|
|
112
107
|
3.5. **本地 git tag 对比**(P6,Agent 执行版本确认时补充):
|
|
113
108
|
- 优先对 skill 安装目录执行 git tag 对比:
|
|
@@ -116,14 +111,16 @@ metadata:
|
|
|
116
111
|
```
|
|
117
112
|
- 若 skill 目录不在 git 管理下,应告知用户"无法执行版本对比,建议手动检查 GitHub 更新"
|
|
118
113
|
- 版本对比结果若发现本地版本落后于最新 tag,应在执行前**警告用户**
|
|
119
|
-
4.
|
|
114
|
+
4. 若权威渠道最新版本 > 本地 `__version__`,提示用户:
|
|
120
115
|
```
|
|
121
|
-
有更新可用:最新版 {
|
|
116
|
+
有更新可用:最新版 {最新版},当前 {本地version}
|
|
117
|
+
安装形态自动检测(pip 包 / git 目录),按形态给出精准更新命令:
|
|
118
|
+
pip 包安装:pip install --upgrade gongwen-skill
|
|
119
|
+
git 目录安装:cd <gongwen-skill目录> && git pull && git fetch --tags
|
|
122
120
|
拉取地址:
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
AtomGit
|
|
126
|
-
更新命令:cd <gongwen-skill目录> && git pull && git fetch --tags
|
|
121
|
+
PyPI(权威):https://pypi.org/project/gongwen-skill/
|
|
122
|
+
GitHub(备用):https://github.com/linhut/gongwen-skill
|
|
123
|
+
GitCode / AtomGit(国内镜像):https://gitcode.com/linhut/gongwen-skill / https://atomgit.com/linhut/gongwen-skill
|
|
127
124
|
```
|
|
128
125
|
|
|
129
126
|
### 七、会话交接(长任务收尾必须遵守)
|
|
@@ -897,7 +894,7 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
|
|
|
897
894
|
| `table-signs` | 从名单批量生成会议桌签 | `python -m gongwen table-signs 名单.txt -o 桌签.docx` |
|
|
898
895
|
| `review` | 生成公文审稿流转单(五/三角色) | `python -m gongwen review report -o 审稿单.docx` |
|
|
899
896
|
| `handoff` | 跨会话交接(长任务收尾必写) | `python -m gongwen handoff --write` |
|
|
900
|
-
| `check-update` |
|
|
897
|
+
| `check-update` | 版本自检(PyPI pip 包权威 + GitHub 备用,自动检测安装形态) | `python -m gongwen check-update` |
|
|
901
898
|
| `font` | 公文标准字体管理(安装/检查/列出) | `python -m gongwen font install` |
|
|
902
899
|
|
|
903
900
|
### 🩺 诊断与修复
|
|
@@ -93,21 +93,16 @@ metadata:
|
|
|
93
93
|
|
|
94
94
|
1. 读取 `gongwen` 包顶部的 `__version__` 常量,获取本地版本号
|
|
95
95
|
2. 告知用户:`当前加载 gongwen-skill v{__version__}`
|
|
96
|
-
3.
|
|
96
|
+
3. **版本自检**(不能只用本地 `git describe`——它只读本地可达 tag,未 fetch 时会误判本地即最新;也不能只查单一仓库——网络抖动会导致误判):
|
|
97
97
|
```bash
|
|
98
|
-
# 首选:CLI
|
|
98
|
+
# 首选:CLI 内置自检命令(PyPI pip 包权威判定 + GitHub 备用渠道,自动比对本地版本)
|
|
99
99
|
python -m gongwen check-update
|
|
100
100
|
|
|
101
|
-
#
|
|
102
|
-
|
|
103
|
-
https://github.com/linhut/gongwen-skill.git \
|
|
104
|
-
https://gitcode.com/linhut/gongwen-skill.git \
|
|
105
|
-
https://atomgit.com/linhut/gongwen-skill.git ; do
|
|
106
|
-
git ls-remote --tags "$url" | awk -F/ '{print $NF}' \
|
|
107
|
-
| grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -1
|
|
108
|
-
done
|
|
101
|
+
# 手动回退:PyPI 权威(pip 包发布源)
|
|
102
|
+
python -c "import urllib.request,json;print(json.loads(urllib.request.urlopen('https://pypi.org/pypi/gongwen-skill/json',timeout=10).read())['info']['version']))"
|
|
109
103
|
```
|
|
110
|
-
-
|
|
104
|
+
- **PyPI 为权威判定渠道**(pip 包核心分发,pip install -U 即从 PyPI 拉取);PyPI 不可达时回退 GitHub tag(备用渠道,git 用户/CI 触发源)
|
|
105
|
+
- GitCode/AtomGit 与 GitHub 同源 tag,仅在 GitHub 不可达时作国内拉取镜像提示(不参与版本判定)
|
|
111
106
|
- 若全部渠道均不可用(无 git/无网络),**必须明确告知用户"版本自检因无法访问远程而跳过"**,不得静默假设本地即最新
|
|
112
107
|
3.5. **本地 git tag 对比**(P6,Agent 执行版本确认时补充):
|
|
113
108
|
- 优先对 skill 安装目录执行 git tag 对比:
|
|
@@ -116,14 +111,16 @@ metadata:
|
|
|
116
111
|
```
|
|
117
112
|
- 若 skill 目录不在 git 管理下,应告知用户"无法执行版本对比,建议手动检查 GitHub 更新"
|
|
118
113
|
- 版本对比结果若发现本地版本落后于最新 tag,应在执行前**警告用户**
|
|
119
|
-
4.
|
|
114
|
+
4. 若权威渠道最新版本 > 本地 `__version__`,提示用户:
|
|
120
115
|
```
|
|
121
|
-
有更新可用:最新版 {
|
|
116
|
+
有更新可用:最新版 {最新版},当前 {本地version}
|
|
117
|
+
安装形态自动检测(pip 包 / git 目录),按形态给出精准更新命令:
|
|
118
|
+
pip 包安装:pip install --upgrade gongwen-skill
|
|
119
|
+
git 目录安装:cd <gongwen-skill目录> && git pull && git fetch --tags
|
|
122
120
|
拉取地址:
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
AtomGit
|
|
126
|
-
更新命令:cd <gongwen-skill目录> && git pull && git fetch --tags
|
|
121
|
+
PyPI(权威):https://pypi.org/project/gongwen-skill/
|
|
122
|
+
GitHub(备用):https://github.com/linhut/gongwen-skill
|
|
123
|
+
GitCode / AtomGit(国内镜像):https://gitcode.com/linhut/gongwen-skill / https://atomgit.com/linhut/gongwen-skill
|
|
127
124
|
```
|
|
128
125
|
|
|
129
126
|
### 七、会话交接(长任务收尾必须遵守)
|
|
@@ -897,7 +894,7 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
|
|
|
897
894
|
| `table-signs` | 从名单批量生成会议桌签 | `python -m gongwen table-signs 名单.txt -o 桌签.docx` |
|
|
898
895
|
| `review` | 生成公文审稿流转单(五/三角色) | `python -m gongwen review report -o 审稿单.docx` |
|
|
899
896
|
| `handoff` | 跨会话交接(长任务收尾必写) | `python -m gongwen handoff --write` |
|
|
900
|
-
| `check-update` |
|
|
897
|
+
| `check-update` | 版本自检(PyPI pip 包权威 + GitHub 备用,自动检测安装形态) | `python -m gongwen check-update` |
|
|
901
898
|
| `font` | 公文标准字体管理(安装/检查/列出) | `python -m gongwen font install` |
|
|
902
899
|
|
|
903
900
|
### 🩺 诊断与修复
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
Licensed under the MIT License. See the LICENSE file for details.
|
|
5
5
|
-->
|
|
6
6
|
|
|
7
|
+
## v2.6.1 (2026-09-02)
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
- **check-update 改为 PyPI 权威判定 + 安装形态自动检测**:以 PyPI(pip 包发布源)为唯一权威判定渠道(pip install -U 即从 PyPI 拉取),GitHub 降为 PyPI 不可达时的备用渠道(git 用户/CI 触发源);GitCode/AtomGit 保持国内拉取镜像提示(不参与版本判定)
|
|
11
|
+
- **更新命令按安装形态精准给出**:运行时自动检测安装形态(pip 包 / git·skill 目录),pip 安装提示 `pip install --upgrade gongwen-skill`,git/skill 目录提示 `cd <gongwen-skill目录> && git pull && git fetch --tags`;--json 输出新增 authoritative_channel、install_type 字段
|
|
12
|
+
- **文档同步**:SKILL.md/README/RELEASE/_legacy 的渠道描述统一为"PyPI 权威 + GitHub 备用",SKILL.md 版本自检节新增手动回退命令
|
|
13
|
+
|
|
7
14
|
## v2.6.0 (2026-09-02)
|
|
8
15
|
|
|
9
16
|
### Added
|
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ Licensed under the MIT License. See the LICENSE file for details.
|
|
|
45
45
|
| 🔍 审稿生成 | `review` | 按五角色审稿机制生成审稿意见 |
|
|
46
46
|
| 🧩 完整审校 | `full-review` | 修订+批注联合命令(句子级差异修订 + 分类批注) |
|
|
47
47
|
| 🎨 样式学习 | `style-learn` / `style-list` | 上传标准文档学习 Run/段落/页面三级样式(字体/字号/字间距/行距/缩进/页边距),生成命名模板持久化,后续用 `optimize -t 模板名` 套用 |
|
|
48
|
-
| 🔄 版本自检 | `check-update` | 版本自检(PyPI + GitHub
|
|
48
|
+
| 🔄 版本自检 | `check-update` | 版本自检(PyPI pip 包权威判定 + GitHub 备用,GitCode/AtomGit 作国内镜像提示) |
|
|
49
49
|
| 🩺 自我诊断 | `doctor` / `repair` | 全面诊断 22 项(Python/依赖/版本一致性/字体/DSH 文件/DSH 技能 frontmatter/代码风格),自动修复常见问题 |
|
|
50
50
|
| 🕵️ 文档审计 | `audit` | 检查删除线/加粗/AI 声明等痕迹 |
|
|
51
51
|
| 🤝 会话交接 | `handoff` | 跨会话上下文传递(`--list` / `--latest` / Agent 长任务收尾必写) |
|
|
@@ -150,7 +150,7 @@ python -m gongwen footer 红头公文.docx --cc "各单位" --printer "XX办公
|
|
|
150
150
|
# 注入页码(Word PAGE 域动态页码)
|
|
151
151
|
python -m gongwen pagenum 红头公文.docx --alignment right
|
|
152
152
|
|
|
153
|
-
# 版本自检(PyPI + GitHub
|
|
153
|
+
# 版本自检(PyPI pip 包权威判定 + GitHub 备用渠道)
|
|
154
154
|
python -m gongwen check-update
|
|
155
155
|
|
|
156
156
|
# 安装公文标准字体(方正小标宋简体/仿宋_GB2312/楷体_GB2312)
|
|
@@ -317,9 +317,9 @@ python -m gongwen rule-list notice
|
|
|
317
317
|
|
|
318
318
|
Agent 加载 skill 后**必须执行版本追新自检**,确保使用最新版本:
|
|
319
319
|
|
|
320
|
-
1. **远程自检**(首选):`python -m gongwen check-update`——以 **PyPI
|
|
320
|
+
1. **远程自检**(首选):`python -m gongwen check-update`——以 **PyPI(pip 包发布源)为权威判定渠道**并发查询比对本地(pip install -U 即从 PyPI 拉取);PyPI 不可达时回退 GitHub tag(备用渠道)。全部渠道不可达时明确告知"版本自检跳过"。GitHub 为海外渠道(国内常超时)采用短超时快速降级;GitHub 不可达时自动提示国内代码镜像(GitCode/AtomGit,与 GitHub 同源 tag)与 GitHub520 hosts 加速方案
|
|
321
321
|
2. **本地 git tag 对比**(补充):对 skill 安装目录执行 `git -C "<skill安装目录>" describe --tags --abbrev=0`;若安装目录不在 git 管理下,应告知用户"无法执行版本对比,建议手动检查 GitHub 更新"
|
|
322
|
-
3.
|
|
322
|
+
3. **落后则警告**:发现本地版本落后于最新版本时,**必须在执行前警告用户**并提示更新——`check-update` 会按安装形态自动给出精准更新命令(pip 包安装:`pip install --upgrade gongwen-skill`;git/skill 目录安装:`cd <gongwen-skill目录> && git pull && git fetch --tags`),不得静默使用旧版本
|
|
323
323
|
|
|
324
324
|
> 严禁只用本地 `git describe` 判断版本——它只读本地可达 tag,未 fetch 时会误判本地即最新。
|
|
325
325
|
|
|
@@ -337,7 +337,7 @@ DSH 采用 **Cordis 模块化微内核架构**:技能体系基于本地文件
|
|
|
337
337
|
git clone https://github.com/linhut/gongwen-skill.git
|
|
338
338
|
cd gongwen-skill
|
|
339
339
|
pip install -r requirements.txt # 或 pip install gongwen-skill(已上 PyPI)
|
|
340
|
-
python -m gongwen --version # 检验:gongwen-skill v2.6.
|
|
340
|
+
python -m gongwen --version # 检验:gongwen-skill v2.6.1
|
|
341
341
|
```
|
|
342
342
|
|
|
343
343
|
### 方式一:作为 DSH Skill 注册(基于本地文件系统)
|
|
@@ -393,7 +393,7 @@ pnpm add -w gongwen-skill
|
|
|
393
393
|
"dependencies": {
|
|
394
394
|
"@deepseek-ai/dsh-base": "...",
|
|
395
395
|
"@deepseek-ai/dsh-web-app": "...",
|
|
396
|
-
"gongwen-skill": "^2.6.
|
|
396
|
+
"gongwen-skill": "^2.6.1"
|
|
397
397
|
},
|
|
398
398
|
"dsh": {
|
|
399
399
|
"profile": {
|
|
@@ -574,7 +574,7 @@ pip install -r requirements.txt
|
|
|
574
574
|
用户:帮我优化这份会议通知的第二章节措辞
|
|
575
575
|
|
|
576
576
|
Agent:📋 合规自检报告
|
|
577
|
-
Skill 版本: v2.6.
|
|
577
|
+
Skill 版本: v2.6.1(版本自检已确认最新)
|
|
578
578
|
路径判定: B(内容优化)
|
|
579
579
|
依据: 用户指定了已有文档,且要求"优化措辞"
|
|
580
580
|
命令调用: 1. python -m gongwen optimize-content 会议通知.docx --changes changes.json --apply --paragraphs "5-8"
|
package/SKILL.md
CHANGED
|
@@ -93,21 +93,16 @@ metadata:
|
|
|
93
93
|
|
|
94
94
|
1. 读取 `gongwen` 包顶部的 `__version__` 常量,获取本地版本号
|
|
95
95
|
2. 告知用户:`当前加载 gongwen-skill v{__version__}`
|
|
96
|
-
3.
|
|
96
|
+
3. **版本自检**(不能只用本地 `git describe`——它只读本地可达 tag,未 fetch 时会误判本地即最新;也不能只查单一仓库——网络抖动会导致误判):
|
|
97
97
|
```bash
|
|
98
|
-
# 首选:CLI
|
|
98
|
+
# 首选:CLI 内置自检命令(PyPI pip 包权威判定 + GitHub 备用渠道,自动比对本地版本)
|
|
99
99
|
python -m gongwen check-update
|
|
100
100
|
|
|
101
|
-
#
|
|
102
|
-
|
|
103
|
-
https://github.com/linhut/gongwen-skill.git \
|
|
104
|
-
https://gitcode.com/linhut/gongwen-skill.git \
|
|
105
|
-
https://atomgit.com/linhut/gongwen-skill.git ; do
|
|
106
|
-
git ls-remote --tags "$url" | awk -F/ '{print $NF}' \
|
|
107
|
-
| grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -1
|
|
108
|
-
done
|
|
101
|
+
# 手动回退:PyPI 权威(pip 包发布源)
|
|
102
|
+
python -c "import urllib.request,json;print(json.loads(urllib.request.urlopen('https://pypi.org/pypi/gongwen-skill/json',timeout=10).read())['info']['version']))"
|
|
109
103
|
```
|
|
110
|
-
-
|
|
104
|
+
- **PyPI 为权威判定渠道**(pip 包核心分发,pip install -U 即从 PyPI 拉取);PyPI 不可达时回退 GitHub tag(备用渠道,git 用户/CI 触发源)
|
|
105
|
+
- GitCode/AtomGit 与 GitHub 同源 tag,仅在 GitHub 不可达时作国内拉取镜像提示(不参与版本判定)
|
|
111
106
|
- 若全部渠道均不可用(无 git/无网络),**必须明确告知用户"版本自检因无法访问远程而跳过"**,不得静默假设本地即最新
|
|
112
107
|
3.5. **本地 git tag 对比**(P6,Agent 执行版本确认时补充):
|
|
113
108
|
- 优先对 skill 安装目录执行 git tag 对比:
|
|
@@ -116,14 +111,16 @@ metadata:
|
|
|
116
111
|
```
|
|
117
112
|
- 若 skill 目录不在 git 管理下,应告知用户"无法执行版本对比,建议手动检查 GitHub 更新"
|
|
118
113
|
- 版本对比结果若发现本地版本落后于最新 tag,应在执行前**警告用户**
|
|
119
|
-
4.
|
|
114
|
+
4. 若权威渠道最新版本 > 本地 `__version__`,提示用户:
|
|
120
115
|
```
|
|
121
|
-
有更新可用:最新版 {
|
|
116
|
+
有更新可用:最新版 {最新版},当前 {本地version}
|
|
117
|
+
安装形态自动检测(pip 包 / git 目录),按形态给出精准更新命令:
|
|
118
|
+
pip 包安装:pip install --upgrade gongwen-skill
|
|
119
|
+
git 目录安装:cd <gongwen-skill目录> && git pull && git fetch --tags
|
|
122
120
|
拉取地址:
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
AtomGit
|
|
126
|
-
更新命令:cd <gongwen-skill目录> && git pull && git fetch --tags
|
|
121
|
+
PyPI(权威):https://pypi.org/project/gongwen-skill/
|
|
122
|
+
GitHub(备用):https://github.com/linhut/gongwen-skill
|
|
123
|
+
GitCode / AtomGit(国内镜像):https://gitcode.com/linhut/gongwen-skill / https://atomgit.com/linhut/gongwen-skill
|
|
127
124
|
```
|
|
128
125
|
|
|
129
126
|
### 七、会话交接(长任务收尾必须遵守)
|
|
@@ -897,7 +894,7 @@ python -m gongwen fix-common 文件.docx -o 成品.docx
|
|
|
897
894
|
| `table-signs` | 从名单批量生成会议桌签 | `python -m gongwen table-signs 名单.txt -o 桌签.docx` |
|
|
898
895
|
| `review` | 生成公文审稿流转单(五/三角色) | `python -m gongwen review report -o 审稿单.docx` |
|
|
899
896
|
| `handoff` | 跨会话交接(长任务收尾必写) | `python -m gongwen handoff --write` |
|
|
900
|
-
| `check-update` |
|
|
897
|
+
| `check-update` | 版本自检(PyPI pip 包权威 + GitHub 备用,自动检测安装形态) | `python -m gongwen check-update` |
|
|
901
898
|
| `font` | 公文标准字体管理(安装/检查/列出) | `python -m gongwen font install` |
|
|
902
899
|
|
|
903
900
|
### 🩺 诊断与修复
|
package/dsh/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// 公文全流程处理工具 - DSH plugin bridge (gongwen-skill, v2.6.
|
|
1
|
+
// 公文全流程处理工具 - DSH plugin bridge (gongwen-skill, v2.6.1+)
|
|
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.
|
package/gongwen/__init__.py
CHANGED
package/gongwen/_legacy.py
CHANGED
|
@@ -45,7 +45,7 @@ from gongwen.cli.helpers import (
|
|
|
45
45
|
parse_config_overrides as _parse_config_overrides,
|
|
46
46
|
load_rules_with_overrides as _load_rules_with_overrides,
|
|
47
47
|
)
|
|
48
|
-
__version__ = "2.6.
|
|
48
|
+
__version__ = "2.6.1"
|
|
49
49
|
# 版本号应与 gongwen/__init__.py 保持一致,每次发版同步更新
|
|
50
50
|
"""
|
|
51
51
|
中文公文全流程处理工具 —— 基于 GB/T 9704《党政机关公文格式》国家标准。
|
|
@@ -1076,8 +1076,8 @@ def main():
|
|
|
1076
1076
|
p = sub.add_parser("style-list", help="列出所有通过 style-learn 学习的自定义样式模板")
|
|
1077
1077
|
p.set_defaults(func=cmd_style_list)
|
|
1078
1078
|
|
|
1079
|
-
# ---- 版本自检(PyPI
|
|
1080
|
-
p = sub.add_parser("check-update", help="版本自检:PyPI
|
|
1079
|
+
# ---- 版本自检(PyPI pip 包权威判定,GitHub 备用,GitCode/AtomGit 作国内镜像) ----
|
|
1080
|
+
p = sub.add_parser("check-update", help="版本自检:PyPI(pip 包权威)判定更新,GitHub 作备用渠道(GitCode/AtomGit 作国内镜像提示)")
|
|
1081
1081
|
p.add_argument("--json", action="store_true",
|
|
1082
1082
|
help="输出 JSON 格式结果(便于 Agent 解析)")
|
|
1083
1083
|
p.set_defaults(func=cmd_check_update)
|
package/gongwen/cli/helpers.py
CHANGED
|
@@ -38,7 +38,7 @@ TYPE_KEYWORDS = {
|
|
|
38
38
|
"讲话稿": "speech", "主持词": "speech", "新闻稿": "news", "简报": "news",
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
# 官方镜像仓库(GitHub 为 check-update
|
|
41
|
+
# 官方镜像仓库(GitHub 为 check-update 备用判定渠道,GitCode/AtomGit 作国内镜像)
|
|
42
42
|
REPO_MIRRORS = {
|
|
43
43
|
"GitHub": "https://github.com/linhut/gongwen-skill.git",
|
|
44
44
|
"GitCode": "https://gitcode.com/linhut/gongwen-skill.git",
|
|
@@ -12,6 +12,7 @@ Extracted from _legacy.py (tier-2 split).
|
|
|
12
12
|
"""
|
|
13
13
|
from __future__ import annotations
|
|
14
14
|
import logging
|
|
15
|
+
import os
|
|
15
16
|
import time
|
|
16
17
|
import subprocess
|
|
17
18
|
|
|
@@ -58,11 +59,11 @@ def _latest_tag_from_remote(remote_url: str, timeout: int = 15) -> tuple[bool, s
|
|
|
58
59
|
|
|
59
60
|
|
|
60
61
|
# 判定渠道(版本从哪来):
|
|
61
|
-
# - PyPI :发布源(pip
|
|
62
|
-
# - GitHub
|
|
62
|
+
# - PyPI :发布源(pip 包核心分发渠道,权威判定——pip install -U 即从 PyPI 拉取)
|
|
63
|
+
# - GitHub :代码仓库备用源(PyPI 不可达时回退;git 用户、CI 触发源)
|
|
63
64
|
# GitCode/AtomGit 与 GitHub 是同一份 tag 的镜像(发布时同步 push),
|
|
64
|
-
#
|
|
65
|
-
#
|
|
65
|
+
# 不列为判定渠道;仅在 GitHub 不可达时作为国内拉取/加速代理提示。
|
|
66
|
+
# 设计参考 EasyTier「单权威源 + 加速代理」:权威 = PyPI(pip 包),镜像只做加速提示。
|
|
66
67
|
_JUDGMENT_CHANNELS = ("PyPI", "GitHub")
|
|
67
68
|
|
|
68
69
|
# 渠道分级超时(秒):GitHub 为海外渠道,国内常超时,用短超时快速降级;
|
|
@@ -77,6 +78,31 @@ _CHANNEL_TIMEOUTS = {
|
|
|
77
78
|
_GIT_MIRRORS = {k: v for k, v in REPO_MIRRORS.items() if k != "GitHub"}
|
|
78
79
|
|
|
79
80
|
|
|
81
|
+
def _detect_install_type() -> str:
|
|
82
|
+
"""检测当前 gongwen 的安装形态,返回 "pip" | "git" | "unknown"。
|
|
83
|
+
|
|
84
|
+
- pip :gongwen 代码位于 site-packages(pip install 安装)
|
|
85
|
+
- git :gongwen 代码位于 git 工作树内(skill 目录 / git clone 安装)
|
|
86
|
+
- unknown :无法判定(非标准位置)
|
|
87
|
+
用于在检测到更新时给出与安装形态匹配的精准更新命令。
|
|
88
|
+
"""
|
|
89
|
+
try:
|
|
90
|
+
import gongwen
|
|
91
|
+
code_dir = os.path.dirname(os.path.abspath(gongwen.__file__))
|
|
92
|
+
if "site-packages" in code_dir or "dist-packages" in code_dir:
|
|
93
|
+
return "pip"
|
|
94
|
+
# 检查是否位于 git 工作树内
|
|
95
|
+
probe = subprocess.run(
|
|
96
|
+
["git", "-C", code_dir, "rev-parse", "--is-inside-work-tree"],
|
|
97
|
+
capture_output=True, text=True, timeout=5, encoding="utf-8",
|
|
98
|
+
)
|
|
99
|
+
if probe.returncode == 0 and probe.stdout.strip().lower() == "true":
|
|
100
|
+
return "git"
|
|
101
|
+
return "unknown"
|
|
102
|
+
except Exception:
|
|
103
|
+
return "unknown"
|
|
104
|
+
|
|
105
|
+
|
|
80
106
|
def _fetch_channel(name: str, url: str | None, timeout: int) -> tuple[str, bool, str]:
|
|
81
107
|
"""查询单个渠道,返回 (渠道名, 是否成功, 版本或错误信息)。
|
|
82
108
|
|
|
@@ -90,13 +116,14 @@ def _fetch_channel(name: str, url: str | None, timeout: int) -> tuple[str, bool,
|
|
|
90
116
|
|
|
91
117
|
|
|
92
118
|
def cmd_check_update(args):
|
|
93
|
-
"""版本自检:以 PyPI
|
|
119
|
+
"""版本自检:以 PyPI(pip 包发布源)为权威判定,GitHub 作备用渠道。
|
|
94
120
|
|
|
95
|
-
|
|
121
|
+
权威判定:PyPI(pip 包核心分发渠道,pip install -U 即从此拉取)。
|
|
122
|
+
备用判定:GitHub(PyPI 不可达时回退 tag 查询;git 用户、CI 触发源)。
|
|
96
123
|
GitCode/AtomGit 与 GitHub 同步同 tag,不参与版本判定(零增量),
|
|
97
124
|
仅在 GitHub 不可达时作为国内拉取镜像提示(JSON 输出于 mirrors 字段)。
|
|
98
|
-
|
|
99
|
-
支持 --json 输出结构化结果,便于 Agent
|
|
125
|
+
全部渠道不可达时明确告知并返回退出码 2。
|
|
126
|
+
支持 --json 输出结构化结果,便于 Agent 解析(含 authoritative_channel 字段)。
|
|
100
127
|
"""
|
|
101
128
|
import json as _json
|
|
102
129
|
t0 = time.time()
|
|
@@ -105,13 +132,13 @@ def cmd_check_update(args):
|
|
|
105
132
|
local_ver = __version__
|
|
106
133
|
|
|
107
134
|
if not use_json:
|
|
108
|
-
print(f"🔍 版本自检(PyPI + GitHub
|
|
135
|
+
print(f"🔍 版本自检(pip 包权威:PyPI 判定 + GitHub 备用,本地 v{local_ver})")
|
|
109
136
|
print(f"{'─' * 50}")
|
|
110
137
|
|
|
111
138
|
results: dict[str, str] = {}
|
|
112
139
|
ok_count = 0
|
|
113
140
|
|
|
114
|
-
# 判定渠道并发查询:PyPI
|
|
141
|
+
# 判定渠道并发查询:PyPI(权威,pip 包发布源)+ GitHub(备用,tag 查询)。
|
|
115
142
|
# 两渠道并发,总耗时 = 最坏单渠道超时(GitHub 短超时快速降级)。
|
|
116
143
|
from concurrent.futures import ThreadPoolExecutor
|
|
117
144
|
channels = [
|
|
@@ -157,12 +184,19 @@ def cmd_check_update(args):
|
|
|
157
184
|
print(f" - {name}: {url}")
|
|
158
185
|
return 2
|
|
159
186
|
|
|
160
|
-
#
|
|
161
|
-
|
|
162
|
-
|
|
187
|
+
# pip 包为核心分发渠道:版本判定以 PyPI(pip 包发布源)为权威,
|
|
188
|
+
# PyPI 不可达时回退 GitHub tag(备用渠道,git 用户可见);GitCode/AtomGit 不参与判定。
|
|
189
|
+
if results.get("PyPI"):
|
|
190
|
+
latest = results["PyPI"]
|
|
191
|
+
authoritative = "PyPI"
|
|
192
|
+
elif results.get("GitHub"):
|
|
193
|
+
latest = results["GitHub"]
|
|
194
|
+
authoritative = "GitHub"
|
|
195
|
+
else:
|
|
196
|
+
valid = [v for v in results.values() if v]
|
|
197
|
+
latest = max(valid, key=_parse_version) if valid else "v0.0.0"
|
|
198
|
+
authoritative = "未知"
|
|
163
199
|
|
|
164
|
-
# 判断安装方式(用于给出对应的更新命令)
|
|
165
|
-
# pip 安装的用户应使用 pip install --upgrade,git clone 的用户应使用 git pull
|
|
166
200
|
pypi_ok = bool(results.get("PyPI"))
|
|
167
201
|
git_ok = bool(results.get("GitHub"))
|
|
168
202
|
|
|
@@ -179,6 +213,8 @@ def cmd_check_update(args):
|
|
|
179
213
|
for name, v in results.items()
|
|
180
214
|
},
|
|
181
215
|
"mirrors": {name: url for name, url in _GIT_MIRRORS.items()},
|
|
216
|
+
"authoritative_channel": authoritative,
|
|
217
|
+
"install_type": _detect_install_type(),
|
|
182
218
|
"reachable_channels": ok_count,
|
|
183
219
|
"elapsed_seconds": round(time.time() - t0, 1),
|
|
184
220
|
}
|
|
@@ -187,19 +223,31 @@ def cmd_check_update(args):
|
|
|
187
223
|
|
|
188
224
|
# 人类可读输出
|
|
189
225
|
if has_update:
|
|
190
|
-
|
|
191
|
-
print("
|
|
192
|
-
if
|
|
226
|
+
install_type = _detect_install_type()
|
|
227
|
+
print(f"📢 有更新可用:最新版 {latest}(权威渠道 {authoritative}),当前 v{local_ver}")
|
|
228
|
+
if install_type == "pip":
|
|
229
|
+
print(" 检测到 pip 包安装,请升级 pip 包:")
|
|
193
230
|
print(" pip install --upgrade gongwen-skill")
|
|
194
|
-
|
|
231
|
+
elif install_type == "git":
|
|
232
|
+
print(" 检测到 git/skill 目录安装,请更新代码:")
|
|
195
233
|
print(" cd <gongwen-skill目录> && git pull && git fetch --tags")
|
|
234
|
+
print(" (或若以 pip 包使用,可执行:pip install --upgrade gongwen-skill)")
|
|
235
|
+
else:
|
|
236
|
+
print(" pip 包为核心分发渠道,请用 pip 升级:")
|
|
237
|
+
print(" pip install --upgrade gongwen-skill")
|
|
238
|
+
if git_ok:
|
|
239
|
+
print(" (源码安装用户备选:cd <gongwen-skill目录> && git pull && git fetch --tags)")
|
|
196
240
|
print(f"⏱️ 自检耗时 {time.time() - t0:.1f}s")
|
|
197
241
|
return 1
|
|
198
242
|
elif _parse_version(latest) == _parse_version(local_ver):
|
|
199
243
|
if ok_count >= 2:
|
|
200
|
-
|
|
244
|
+
if pypi_ok:
|
|
245
|
+
print(f"✅ 已是最新版本:v{local_ver}(PyPI pip 包权威确认,GitHub 备用一致)")
|
|
246
|
+
else:
|
|
247
|
+
print(f"✅ 已是最新版本:v{local_ver}(GitHub 备用渠道确认,兼容此版本)")
|
|
201
248
|
else:
|
|
202
|
-
|
|
249
|
+
src = "PyPI(pip 包权威)" if pypi_ok else "GitHub(备用)"
|
|
250
|
+
print(f"✅ 已是最新版本:v{local_ver}(单渠道确认:{src})")
|
|
203
251
|
else:
|
|
204
252
|
print(f"ℹ️ 本地版本 v{local_ver} 高于远程 {latest}(本地领先或渠道不同步)")
|
|
205
253
|
|
package/package.json
CHANGED
package/prompts/usage-prompts.md
CHANGED