1仕組みと動作原理
3段階のモード(quick / normal / refined)はスクリプトの引数ではなく、プロンプトでオーケストレーションされたパイプラインである。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
チャンクをまたぐ訳語の一致はモデルの記憶ではなく「共有コンテキストファイル」に依存する。メインエージェントがトーン、背景、マージ済み用語集、翻訳の難所を02-prompt.mdに書き込み、各チャンクのサブエージェントが同一のファイルを参照する。
Consistency is guaranteed by the shared `02-prompt.md`
用語のソースは4段階でマージされ、優先順位が明確に定められている: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)
各チャンクに対してサブエージェントを1つ起動して並列翻訳を行い、サブエージェントにホストツールがない場合は逐次的なインライン翻訳にフォールバックできる。
Spawn one subagent **per chunk**, all in parallel
初回使用時はブロッキング設定を行う。EXTEND.mdが見つからない場合は必ずユーザーの好みを尋ねて書き込み、デフォルト値による無断実行を許可しない。
**BLOCKING OPERATION**: This setup MUST complete before ANY translation.
URL入力時にネットワーク通信を行わないのはスクリプト側である。SKILL.mdはエージェントに「ソースの実体化」(Webコンテンツを取得してローカル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](
- 网络端点: 外部ネットワークアクセスの宣言: スキル付属スクリプトのネットワーク呼び出しはゼロ:chunk.tsは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…