baoyu-translate
This skill should be used when the user asks to "translate", "翻译", "精翻", "translate article", "translate to Chinese", "translate to English", "改成中文", "改成英文", "convert to Chinese", "localize", "本地化", "refined translation", "精细翻译", "proofread translation", "快速翻译", "快翻", "这篇文章翻译一下", or provides a URL/file with translation intent. Supports three modes (quick/normal/refined) with custom glossary support.
1实现原理 · 为什么它能做到
三档模式(quick / normal / refined)不是脚本参数,而是 prompt 编排的流水线:quick 直接译,normal 先分析再译,refined 走『分析→译→评审→修订→润色』并逐步落盘。
| Refined | `--mode refined` | Analyze → Translate → Review → Polish | Publication-quality, important documents |
长文切块是纯本地的 markdown 块级切分:chunk.ts 用 markdown-it 解析块边界,按字数(默认 5000)切,超长块再退化为按行、按词切。
const maxWords = options.maxWords ?? 5000
跨块译名一致靠『共享上下文文件』而不是靠模型记忆:main agent 先把风格、背景、合并术语表、翻译难点写进 02-prompt.md,每个 chunk 的 subagent 读同一份。
Consistency is guaranteed by the shared `02-prompt.md`
术语来源四级合并,优先级明确:EXTEND.md 内联 → EXTEND.md 外部术语文件 → 内置 EN→ZH 表 → CLI --glossary(最高)。
Merge glossaries: EXTEND.md `glossary` (inline) + EXTEND.md `glossary_files` (external files, paths relative to EXTEND.md location) + built-in glossary + `--glossary` file (CLI overrides all)
每个 chunk 起一个 subagent 并行翻译,subagent 无宿主工具也能退化为串行内联翻译。
Spawn one subagent **per chunk**, all in parallel
首次使用是阻塞式设置:找不到 EXTEND.md 必须先问用户偏好并写入,不允许静默用默认值开跑。
**BLOCKING OPERATION**: This setup MUST complete before ANY translation.
URL 输入不联网的是脚本:SKILL.md 只要求 agent『物化来源』——把网页内容抓下来存成本地 md,脚本从头到尾只处理本地文件。
| URL | Fetch content, save to `translate/{slug}.md` |
输出目录约定固定、冲突时改名备份而不覆盖:`{source-dir}/{source-basename}-{target-lang}/`,已存在则先改名。
Create a subdirectory next to the source file: `{source-dir}/{source-basename}-{target-lang}/`
2核心能力
3外部依赖
| Kind | Dependency / Endpoint |
|---|---|
| package | markdown-it 14.1.1(唯一运行时依赖) |
| package | markdown-it 运行时 import |
| cli | bun(脚本 shebang 运行时) |
| cli | npx -y bun(无 bun 时的回退运行时) |
| network | homepage 元数据 URL(静态 frontmatter,任何步骤都不抓取) |
4管控建议与判定依据
- scripts/: 执行本地脚本或命令: ${BUN_X} {baseDir}/scripts/main.ts <file> [--max-words N] [--output-dir D](
- 网络端点: 声明外部网络访问: skill 自带脚本零网络调用:chunk.ts 只 import fs / path / markdown-it,package.json 无 ht
- 本地工作目录: 文件读写与工件输出: {source-dir}/{source-basename}-{target-lang}/ 输出目录(已存在则先改名为 {name}.backup-Y
5第二遍独立确认
- [ok] 脚本零网络、零凭证 — chunk.ts 仅 import fs/path/markdown-it,main.ts 仅 import node:process + ./chunk.js;grep http/fetch/curl/process.env/API_KEY 在两个脚本内零命中。
- [ok] 切块逻辑与 SKILL.md 描述一致 — chunk.ts 用 markdown-it 解析、在块边界切分、超长块退化处理,默认 maxWords 5000,与 SKILL.md『Splits at markdown block boundaries to preserve structure』一致;frontmatter 被单独抽出为 chunks/frontmatter.md。
- [ok] 依赖面 = markdown-it 单包 — package.json 仅声明 markdown-it 14.1.1,bun.lock 中的其余条目均为其传递依赖(argparse/entities/linkify-it/mdurl/punycode.js/uc.micro),无 postinstall、无网络行为。
- [ok] subagent 分工与模板内容 — subagent-prompt-template.md 明确 shared context → 02-prompt.md、每块产出 chunks/chunk-{NN}-draft.md;spawn 动作由 agent 执行,脚本不 spawn 任何进程。
- [ok] URL 输入的网络归属 — workflow-mechanics.md 把 URL 处理写成 agent 的『Fetch content』动作;本 skill 目录内无抓取代码,故网络面不落在 skill 自身。
- [ok] EXTEND.md 路径不一致(轻微) — SKILL.md 列三条路径(含 XDG),references/config/extend-schema.md 只列项目与家目录两条;属文档不一致,不影响判级,已在 traits/risks 采信 SKILL.md 的三档说法。
- [ok] 元数据与 pin — 本地 HEAD = 1567581c26ec29f4216c6e6835415bf30343b0e3;GitHub API MIT / 25926 stars / pushed_at 2026-09-10T15:13:43Z;仓库根 LICENSE 为 MIT。
6结论
38c8846f411e3248…