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…