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外部依赖
| 类型 | 依赖 |
|---|---|
| package | markdown-it 14.1.1(唯一运行时依赖) |
| package | markdown-it 运行时 import |
| cli | bun(脚本 shebang 运行时) |
| cli | npx -y bun(无 bun 时的回退运行时) |
| network | homepage 元数据 URL(静态 frontmatter,任何步骤都不抓取) |
4风险提醒 风险提醒:蓝色 · 知晓即可
- 间接提示词注入面 — 网页来源内容逐字进 02-prompt.md,subagent 按该文件执行并把产物写到输出目录;建议对不可信来源的翻译结果做一次人工过目。
- glossary_files 可读任意本地文件 — EXTEND.md 的 glossary_files 支持绝对路径,项目级 EXTEND.md 若来自他人仓库,可能把无关本地文件读入翻译上下文(供应链式信息读取)。
- 成本与上下文放大 — refined 模式要跑分析→初稿→评审→修订→润色多轮,且每块一个 subagent;长文成本显著高于一次直译,需按重要性选模式。
- URL 抓取属宿主行为 — SKILL.md 要求 agent 自行抓取 URL 内容落盘,抓取用的工具与凭证面取决于宿主环境,skill 不提供也不约束(这是它判蓝而非更高的原因,也是使用者需自行把关的点)。
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…1567581c26