feat: skills i18n 改造(schemaVersion 1.1,零向后兼容) (#1)

* feat: skills i18n 改造 — schemaVersion 1.1,零向后兼容

把 21 个 skills + 1 个 agent + manifest/categories 全量迁移到 schemaVersion 1.1
的 i18n 结构,配套 CI AI 翻译流水线(GitHub Models)与本地工具链。

## 关键变更

### 数据结构(破坏性,schemaVersion 1.0 → 1.1)
- SKILL.md: 顶层 name 改为 ASCII slug(== 目录名,符合 agentskills.io 规范);
  中文显示名/short_desc/description 全部迁入 metadata.i18n.<locale>
- agents/<id>/agent.json: shortDesc/fullDesc/tags/persona.{role,traits} 迁入
  i18n.<locale>;changelog[].changes 改为 { <locale>: string[] } 对象
- categories.json: 每个分类的 label/description 迁入 i18n.<locale>,顶层只剩
  color/icon
- manifest.json: 加 supportedLocales / defaultLocale;顶层 description 迁入
  i18n.<locale>

### Body 文件结构
- 根 SKILL.md = frontmatter + default_locale (en-US) body
- SKILL.<locale>.md = 各 locale 的 markdown body(首行 <!-- locale: xx --> 自校验)

### 工具链(scripts/i18n/)
- glossary.json: zh→en 术语表 + do_not_translate 白名单
- schema/skill-frontmatter.schema.json: i18n frontmatter JSON Schema
- validate-i18n.py: 8 条校验规则(name 合规 / locale 完整性 / hash 一致性等)
- translate.py: GitHub Models / Anthropic 双 backend,sha256 增量翻译
- migrate.py: 一次性迁移脚本(旧格式 → i18n 结构)

### CI(.github/workflows/)
- i18n-validate.yml: PR 触发跑 validate + translate --check
- i18n-translate.yml: PR 触发用 GitHub Models(默认 openai/gpt-5-mini)翻译缺失
  locale,自动追加 commit;可切到 ANTHROPIC_API_KEY 走 Claude

### 文档
- docs/I18N.md: 作者贡献指南(schema 说明 / 提交流程 / 常见问题)
- README.md: 加多语言段落

## 验证

- uv run scripts/i18n/validate-i18n.py: OK,49 文件 0 错误
- uv run scripts/i18n/translate.py --check: 0 stale locale
- 21 skills 标题数 zh-CN == en-US 严格对齐(最大 66=66)
- skills-ref 规范校验:全部通过(顶层 name ASCII slug + description 单字段)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(i18n): 修复 PR #1 review 反馈的 6 项问题

- schema: translated_by 正则放宽为 ^(human|ai:[A-Za-z0-9._:/-]+)$,接受
  'ai:github:openai/gpt-5-mini' 这类 backend:model 形式(CI 翻译输出格式)
- README + docs/I18N.md: 修正"CI 用 Claude API"误导描述,正确说明默认是
  GitHub Models(openai/gpt-5-mini)+ GITHUB_TOKEN,可选切到 Anthropic
- skills/minimax-tts/SKILL.md & SKILL.zh-CN.md: 删除多余的 ``` 闭合,避免
  Markdown 后续渲染错乱
- skills/docx/SKILL.md: 翻译时丢失的 • Unicode escape 示例已恢复,
  与 zh-CN 版本对齐

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-05 00:26:33 +08:00
committed by GitHub
parent 1c107a9344
commit 1f7c8b9673
59 changed files with 10533 additions and 2014 deletions

View File

@@ -0,0 +1,355 @@
<!-- locale: zh-CN -->
# skill-creator 技能
## L0一句话摘要
引导用户将需求、经验和工作流封装为结构化的 SKILL.md 技能包。
## L1概述与使用场景
### 能力描述
skill-creator 是一个**元技能Meta-Skill**,赋予 Agent 创建和编辑技能的能力。技能是模块化、自包含的能力包,通过 SKILL.md 为 Agent 提供专业知识、工作流和工具集成——将 Agent 从通用助手转变为领域专家。
### 使用场景
- 用户想把反复执行的工作流封装为可复用技能
- 用户想创建新技能教会 Agent 新的能力
- 用户想更新已有技能、优化其效果
- 用户分享了参考资料,需要组织为结构化的技能包
### 核心价值
- **沉淀经验**:将个人知识和工作流固化为可复用的 Skill
- **自我扩展**:创建的技能让 Agent 能力持续增长
- **规范化**:生成符合标准的 SKILL.md确保技能系统正确解析和分发
## L2详细规范
### 关于技能
技能是模块化、自包含的能力包,为 Agent 提供:
1. **专业工作流** — 特定领域的多步骤流程
2. **工具集成** — 处理特定文件格式或 API 的指南
3. **领域知识** — 公司规范、业务逻辑、专业 Schema
4. **捆绑资源** — 脚本、参考文档和资产文件
### 核心原则
#### 简洁优先
上下文窗口是公共资源。技能与系统提示、对话历史、其他技能元数据和用户请求共享上下文窗口。
**默认假设AI 已经非常聪明。** 只添加 AI 不知道的内容。对每条信息问自己:"AI 真的需要这个解释吗?" "这段话值得它的 Token 成本吗?"
优先使用简洁的例子而非冗长的解释。
#### 设置适当的自由度
根据任务的脆弱性和可变性匹配指令的具体程度:
- **高自由度(文本指引)**:多种方案都可行时,决策依赖上下文
- **中自由度(伪代码或带参脚本)**:存在首选模式,允许一定变化
- **低自由度(固定脚本,少量参数)**:操作脆弱易错,一致性至关重要
#### 渐进式披露
技能使用三层加载系统高效管理上下文:
1. **元数据name + description** — 始终在上下文中(~100 词)
2. **SKILL.md body** — 技能触发时加载(<5k 词)
3. **捆绑资源** — Agent 按需加载(无限制,脚本可直接执行无需读入上下文)
### 技能结构
```
skill-name/
├── SKILL.md (必须:技能定义文件)
├── scripts/ (可选:可执行脚本)
├── references/ (可选:参考文档)
└── assets/ (可选:输出用资源文件)
```
#### SKILL.md 格式
SKILL.md 由两部分组成:**FrontmatterYAML 元数据)** 和 **BodyMarkdown 指令)**
##### Frontmatter 字段
**必填**
| 字段 | 类型 | 说明 |
|------|------|------|
| `description` | string | 技能用途描述。**必须包含 "Use when" 触发提示**——AI 据此判断何时使用该技能 |
**推荐**
| 字段 | 类型 | 说明 | 默认值 |
|------|------|------|--------|
| `name` | string | 技能显示名称 | 目录名 |
| `version` | string | 语义版本号(如 `1.0.0` | — |
| `type` | enum | `procedural` / `conversational` / `meta` | — |
| `risk_level` | enum | `low` / `medium` / `high` | — |
| `status` | enum | `enabled` / `disabled` | `enabled` |
| `tags` | string[] | 标签列表 | — |
| `metadata` | object | `author``updated_at` | — |
**功能控制**
| 字段 | 类型 | 默认 | 说明 |
|------|------|------|------|
| `disable-model-invocation` | boolean | `true` | `true`=L0+L1 自动注入 system prompt按需加载体积小`false`=L0+L1+L2 完整内容注入 system prompt |
| `user-invocable` | boolean | `true` | `false`=不出现在命令补全,仅作为背景知识 |
| `allowed-tools` | string[] | — | 限制执行时可用的工具列表 |
| `requires` | object | — | 依赖声明:`tools``optional_tools``connections` |
完整字段表含市场发布、JSON 输出、fork 执行等高级字段)见 [references/desirecore-format.md](references/desirecore-format.md)。
> **Claude Code 兼容说明**Claude Code 仅使用 `name` + `description`+ 可选 `license`、`compatibility`)。这些字段在 DesireCore 中完全合法——DesireCore 格式是 Claude Code 的超集。
##### Body 结构
**推荐使用 L0/L1/L2 分层**
```markdown
# skill-id 技能
## L0一句话摘要
用一句话描述这个技能做什么。
## L1概述与使用场景
### 能力描述 / ### 使用场景 / ### 核心价值
## L2详细规范
### 具体操作步骤 / ### 错误处理
```
分层加载机制:
- **L0**~50 字):快速理解技能做什么
- **L1**~300 字):判断是否适用于当前任务
- **L2**(不限):完整的执行指南
> 分层不是强制的。如果技能内容简短(<100 行),可以不分层——解析器会以整段内容作为 fallback。Claude Code 的无分层格式在 DesireCore 中同样正常工作。
#### Bundled Resources
##### Scripts`scripts/`
可执行代码Python/Bash 等),用于需要确定性可靠性或被反复编写的任务。
- **何时使用**:相同代码被反复编写,或需要确定性可靠性
- **示例**`scripts/rotate_pdf.py`PDF 旋转)、`scripts/fill_form.py`(表单填充)
- **优势**Token 高效,确定性,可直接执行无需读入上下文
- **注意**:脚本可能仍需被 AI 读取以做环境适配
##### References`references/`
文档和参考资料,按需加载到上下文中。
- **何时使用**AI 工作时需要参考的详细文档
- **示例**API 文档、数据库 Schema、领域知识、公司政策
- **最佳实践**:大文件(>10k 词)在 SKILL.md 中提供 grep 搜索模式
- **避免重复**:信息只放 SKILL.md 或 references 中的一处
##### Assets`assets/`
不加载到上下文、而是用于输出的文件。
- **何时使用**:技能需要在最终输出中使用的文件
- **示例**PPT 模板、HTML 骨架、logo 图片、字体文件
- **优势**:将输出资源与文档分离
#### 不应包含的内容
技能应只包含 AI 执行任务所需的文件。**不要**创建README.md、INSTALLATION_GUIDE.md、CHANGELOG.md 等辅助文档。
### 渐进式披露模式
保持 SKILL.md body 在 500 行以内。接近限制时拆分到 references。
**模式 1高层指南 + 参考文件**
```markdown
# PDF Processing
## Quick start
[核心代码示例]
## Advanced features
- **Form filling**: See [FORMS.md](FORMS.md)
- **API reference**: See [REFERENCE.md](REFERENCE.md)
```
**模式 2按领域组织**
```
bigquery-skill/
├── SKILL.md (overview)
└── references/
├── finance.md
├── sales.md
└── product.md
```
用户问销售指标时AI 只读 sales.md。
**模式 3基本内容 + 条件高级内容**
```markdown
## Editing documents
For simple edits, modify the XML directly.
**For tracked changes**: See [REDLINING.md](REDLINING.md)
```
**重要**避免深层嵌套引用——references 只从 SKILL.md 直接链接一层。长 reference 文件(>100 行)在顶部加目录。
### 创建流程
1. 用具体例子理解技能需求
2. 规划可复用资源(脚本、参考、资产)
3. 初始化技能(运行 init_skill.py
4. 编辑技能(实现资源,编写 SKILL.md
5. 验证技能(运行 quick_validate.py
6. 安装技能
7. 迭代优化
#### 步骤 1理解技能需求
跳过此步仅当技能的使用模式已经完全清晰。即使处理已有技能时,此步仍有价值。
通过具体例子理解技能将如何被使用。例如构建 image-editor 技能时:
- "这个技能应支持哪些功能?编辑、旋转、其他?"
- "能举几个使用场景吗?"
- "什么操作应该触发这个技能?"
避免一次问太多问题——从最重要的开始,按需跟进。当对技能应支持的功能有清晰认知时,结束此步。
#### 步骤 2规划资源
分析每个例子:
1. 考虑如何从零执行
2. 识别哪些脚本、参考、资产在反复执行时有帮助
示例分析:
- `pdf-editor` 处理"旋转 PDF"→ 每次都要写相同代码 → `scripts/rotate_pdf.py`
- `frontend-webapp-builder` 处理"创建 todo app"→ 每次都要写样板代码 → `assets/hello-world/`
- `big-query` 处理"今天多少用户登录"→ 每次都要查 Schema → `references/schema.md`
#### 步骤 3初始化
使用 init_skill.py 创建模板:
```bash
# DesireCore 完整格式(默认,推荐)
scripts/init_skill.py <skill-name> --path <output-directory>
# Claude Code 基础格式
scripts/init_skill.py <skill-name> --path <output-directory> --format basic
```
默认生成 DesireCore 格式(含完整 frontmatter + L0/L1/L2 结构)。`--format basic` 生成 Claude Code 兼容的最小格式。
初始化后,根据需要定制或删除生成的示例文件。
#### 步骤 4编辑技能
##### 学习设计模式
根据技能需求查阅参考:
- **多步骤流程**:见 [references/workflows.md](references/workflows.md)
- **输出格式标准**:见 [references/output-patterns.md](references/output-patterns.md)
##### 从资源开始
先实现步骤 2 识别的资源文件scripts/、references/、assets/)。此步骤可能需要用户输入,如品牌资产需要用户提供 logo。
添加的脚本必须实际运行测试,确保无 bug 且输出符合预期。不需要的示例文件应删除。
##### 编写 SKILL.md
**Frontmatter 编写要点**
- `description` 是最关键的字段——AI 据此判断何时触发技能
- 在 description 中包含 "Use when" 触发提示和典型使用场景
- 所有 "when to use" 信息放 description 中,不放 body 里body 只在触发后加载)
**Body 编写要点**
- 始终使用祈使句/不定式形式
- L0 不超过一句话
- L1 用于判断适用性,不超过 300 字
- L2 放完整的操作步骤、API 调用、错误处理
#### 步骤 5验证
```bash
scripts/quick_validate.py <path/to/skill-folder>
```
验证 SKILL.md 格式、frontmatter 字段合法性和目录结构。
#### 步骤 6安装
**方式 A通过 API 安装(推荐,需 Agent Service 运行中)**
```bash
PORT=$(cat ~/.desirecore/agent-service.port 2>/dev/null)
# 安装为全局技能(所有 Agent 可见)
curl -k -X POST "https://127.0.0.1:${PORT}/api/skills" \
-H "Content-Type: application/json" \
-d "{\"skillId\": \"<skill-name>\", \"content\": \"$(cat path/to/SKILL.md | jq -Rsa .)\"}"
# 安装为 Agent 级技能(仅指定 Agent 可见)
curl -k -X POST "https://127.0.0.1:${PORT}/api/agents/<agentId>/skills" \
-H "Content-Type: application/json" \
-d "{\"id\": \"<skill-name>\", \"fullContent\": \"$(cat path/to/SKILL.md | jq -Rsa .)\"}"
```
**方式 B文件系统直写**
```bash
# 全局技能
cp -r path/to/skill-name ~/.desirecore/skills/
# Agent 级技能
cp -r path/to/skill-name ~/.desirecore/agents/<agentId>/skills/
```
**方式 C打包为 .skill 文件Claude Code 兼容)**
```bash
scripts/package_skill.py <path/to/skill-folder>
```
生成 `skill-name.skill` 文件ZIP 格式),可在 Claude Code 中使用。
**安装完成后,必须向用户报告**
- 技能已安装到的完整路径
- 安装的作用域Global / Agent / Project
- 如何在后续对话中触发该技能
#### 步骤 7迭代
1. 在真实任务中使用技能
2. 观察不足或低效之处
3. 确定 SKILL.md 或资源需要如何改进
4. 实施修改并再次测试
### 作用域说明
技能存在三个作用域层级,按优先级从高到低:
| 优先级 | 作用域 | 路径 | 可见范围 |
|--------|--------|------|---------|
| 最高 | Project | `.claude/skills/` | 当前项目所有 Agent |
| 中 | Agent | `~/.desirecore/agents/{agentId}/skills/` | 仅该 Agent |
| 最低 | Global | `~/.desirecore/skills/` | 所有 Agent |
同名技能按优先级覆盖——高优先级的技能会遮蔽低优先级的同名技能。