Back to home@Yisan0429

dsh-itranslation

No description

Stars
0
Language
TypeScript
Created
Aug 13, 2026
Updated
Aug 28, 2026
GitHub repo

Introduction

Preset License Version Platform

Itranslation × DSH

整本书翻译生产线 · DeepSeek Harness Agent Preset

Markdown → 全本译文(默认简体中文)
确定性章节识别 · 空行分段 · 子代理逐章翻译 · 软对齐组装 · 全书审查 · 定向修订 · meta.json 证据链

当前状态:确定性引擎、十个工具、client UI 与部署链入均已落地,并通过全量检查闸(类型检查 / lint / 逐文件 100% 覆盖率 / knip / publint / jscpd)。可直接链入本机 DSH 使用。


概览

Itranslation × DSH 是一个整本书翻译生产线的 DeepSeek Harness agent preset:把一本书交给 agent,得到全本中文译文与完整证据链。书籍建议先经 E2M 统一转成 Markdown,经九步流程自动处理——确定性引擎负责章节识别、分段与组装(纯代码、不经过 LLM),子代理负责逐章翻译(独立上下文、不占主上下文),独立审查模型按段对照原文备份定位问题,只修问题段——最终输出规范格式的 Markdown 成品与可审计的 meta.json 证据链。

同一本书、同一配置可复现重跑;每次运行落盘 meta.json、审查报告、术语表与状态文件,留存可审计。

差异化

能力典型做法Itranslation × DSH
翻译工作单元整章一次性翻译空行分段为工作单元;子代理逐段翻译、句序对齐原文,句数失配仅告警(软对齐)
上下文管理全部塞进主会话一章一个 spawn 子代理(独立上下文、模型固定),主上下文不随书长膨胀
术语一致性LLM 记忆 / 事后纠错预读子代理产出 glossary.json → 人工确认锁定 → 审查维度之一,修订回写留痕
质量保障一遍过独立审查模型按「章/段」对照原文备份定位问题(5 维度),只重译问题段
中断恢复自建断点续跑DSH 会话记录即断点:中断后回原会话继续,零自建持久化
可复现性黑盒确定性边界(提取/章节/分段/组装纯代码)+ meta.json 证据链,同书同配置可重跑
成本可见性账单出来才知道已完成章不重复付费;token/耗时/过程记录写入 meta.json

安装(链入本机 DSH)

前置:Node ^22.19 || >=24、pnpm 11.7(仓库声明于 packageManager)、本机 DSH 部署(dsh web)。

方式一:从源码仓库链入(当前推荐)

git clone <repo> && cd dsh-itranslation
pnpm install                          # 依赖 + 自动装 git 钩子
pnpm run build                        # 双面构建(tsc + tsdown,含 client 浏览器 bundle)

node scripts/install-web-deploy.mjs        # dry-run:预览会写入 ~/.dsh/profiles/web/ 的改动
node scripts/install-web-deploy.mjs --apply  # 幂等落盘:打包 tarball、执行 dsh plugin add、同步 agent preset
dsh web                                   # 重启生效

install-web-deploy.mjs --apply 现在走的是 DSH 官方插件通道:它把 packages/itranslation/bundle@yisan0429/dsh-itranslation)连同 core/tools/client 打成 tarball,然后用 dsh plugin --profile web add file:<bundle>.tgz 安装。DSH 会自动把该 bundle 加入 dsh.profile.bundles 并加载其 cordis.patch.yml(插入 client host entry)。脚本随后还会自动同步 agent preset 到 ~/.dsh/.agent-presets/itranslation/

方式二:已发布到 npm 后

dsh plugin --profile web add @yisan0429/dsh-itranslation

安装后仍需同步 agent preset:

node scripts/sync-agent-preset.mjs --apply
dsh web

修改 preset(presets/itranslation/agent.cordis.yml)后:重跑 sync-agent-preset.mjs --apply 并重启 dsh web——repo 是唯一真相源,部署副本由脚本同步,不存在两份文件漂移的问题。

部署脚本只改用户 profile(~/.dsh/profiles/web/),不碰 ~/deepseek-harness。重启后在 DSH 新建会话,选择 Itranslation preset 即可。

使用

输入文件与目标语言在设置页配置,开启新对话,选用 Itranslation 模式后发送“开始翻译”。你在两处停点回应,其余(预读、分章翻译、组装、审查)全自动:

停点时机你要做的
① 术语表预读完成、glossary.json 生成后可直接编辑该文件增删术语,确认后 agent 才开始翻译
② 审查报告全书译完、报告出来后过目 audit-report.md:进入修订(只改报告指出的问题段),或直接出成品

失败与中断:任何步骤的工具调用报错(如 prepare 拒绝已录入的书)、派发被取消、或你打断/纠正 agent 时,agent 立即停止:只原样报告该步错误(若有),不做任何自行处置(不重试、不换路径、不继续下一步、不提问、不宣告下一步),等待你的明确指示。两个停点是 agent 仅有的两次提问;其余任何情况(含出错、被取消、被打断后)它都不提问、不决策。

工作流与产物:

input/<书>.md                              output/<slug>.md
    │  prepare(录入,## 章边界)                 ▲  assemble(组装 + meta.json)
    ▼                                          │
produce/<slug>/                               │
    ├─ state.json         章结构                │
    ├─ source/<n>.md      清理后原文备份(审查依据)
    ├─ chapters/<n>.md    各章译文(子代理逐章落盘;超长章分片 <n>.<k>.md)
    ├─ glossary.json      术语表(停点①可编辑)
    ├─ analysis.md        书档案(背景/摘要/逻辑线 + 完整风格指南)
    ├─ audit-report.md    全书审查报告(停点②过目)
    └─ meta.json          证据链(模型/耗时/token/修订记录)

配置

preset 配置(presets/itranslation/agent.cordis.yml

默认说明
overlongThresholdBytes40000章节源文本超过该字节数时被 itranslation_segment 标记为超长,agent 停下告知、不自动分片

LLM 提示词(设置页,命名空间 itranslation

四个 LLM 步骤(预读/翻译/审查/修订)的附加提示词模板,在 DSH 设置页「整书翻译」分区编辑(经插件自有路由 /_dsh/itranslation/settings 读写)。默认值为内置成品提示词(core 包 DEFAULT_PROMPTS,设置页与 itranslation_prompts 工具共用同一真相源);itranslation_dispatch 派发子代理时自动读取对应提示词并组装任务文本,留空/清空即回退到内置默认。itranslation_prompts 仅作只读查看/调试用,主代理在流水线中不应调用。同一设置页还包含 targetLanguage(默认 简体中文)与 inputFile(留空自动发现 input/ 下唯一 .md)。四个提示词键如下:

默认说明
preReadPrompt内置预读提示词预读子代理附加提示词(通读全书 → 直接落盘 analysis.md(含完整风格指南)+ 高价值 glossary.json
translatePrompt内置翻译提示词翻译子代理附加提示词(查表术语、段落数一致、不含章标题)
auditPrompt内置审查提示词审查模型附加提示词(5 维度、按章/段定位、不分级)
revisePrompt内置修订提示词修订模型附加提示词(只改报告指出的问题段)

功能特性

确定性引擎(core,零 DSH 依赖)

章节识别只认 ## 为章边界(书名 #、节 ### 留在正文,标题属性 {#...} 剥除,第一个 ## 之前的正文为独立空标题章,无 ## 整本作单章);段落由 Markdown 空行天然承载;组装按原文/译文空行分段比对段数,章/段数失配抛错由工具层询问,绝不静默继续。slug 由书名确定性生成(NFKC 规范化、保留中文、规避 Windows 保留名、≤200 字符)。

标题翻译(程序级):组装时书名行与 ## 章标题自动经 glossary.json 译成目标语言(## The First Storm## 第一场风暴;glossary 无对应条目时保留原文)。空标题首章正文若以 # <书名> 行开头(E2M 标题行落入正文的产物),组装会丢弃该段及其译文,确保书名行只出现一次。

十个确定性工具(tools)

工具作用关键参数主要输出
itranslation_prepare一本书录入:读 input/ 下 Markdown → 识别 ## 章边界 → 落原文备份与章结构;已准备过的书拒绝覆盖pathtitleslugchapterssourceFiles
itranslation_segment分段报告(只读):每章段数/句数/字节,标记超长章slugchapter(可选)chapters[]overlongChapters[]
itranslation_glossary术语表管理:按 term 增补(set)/删除(remove)并回写;不带参数时只读slugset[]remove[]sourceentries[]
itranslation_scoped_read子代理专用受限读取:只读本步骤派发时白名单内的文件,白名单外一律拒绝file_pathokpathcontent
itranslation_scoped_write子代理专用受限写入:只写本步骤派发时白名单内的文件,白名单外一律拒绝file_pathcontentokpath
itranslation_dispatch确定性派发流水线子代理:按步骤组装任务文本并后台启动/续发子代理(pre-read/translate/audit/revise);revise 复用审计子代理会话slugsteplanguagechapterchildIdokstepsubagentId/messageId
itranslation_align组装校验:读原文与译文(含分片)→ 空行比对段数并组装 → 写 aligned.md 预览(标题经 glossary 翻译)slugokchapters[]mismatch
itranslation_assemble出成品 + 证据链:前置 state.json/chapters//audit-report.md 齐全才执行 → 写 output/<slug>.md(标题经 glossary 翻译)与 meta.json(processes 从会话日志自动导出:模型/起止/用量;processes[] 参数只作补充 notes)slugprocesses[](可选 notes)okoutputFilemetaFile
itranslation_status进度与证据摘要(只读):产物存在性、已译章数、工作阶段slugartifacts{}phase
itranslation_prompts读取四个 LLM 步骤的附加提示词(只读):设置页已保存值优先,未设置返回内置默认oksourceprompts{}

主流程工具执行前会校验前置产物与步骤顺序,不齐即拒绝(硬拦只在确定性工具处);失配等数据条件返回结构化 ok:false 由 agent 转问用户。

子代理并行翻译

一章一个 spawn 子代理(独立上下文、模型固定),由 itranslation_dispatch 统一组装任务并后台启动;任务只注入固定提示词与路径,章节正文、风格说明与术语表由子代理经 itranslation_scoped_read 直读书级目录文件(单一真相源,不占注入预算);超长章由主 agent 拆分并留痕,分片各派一个子代理。并发/分批由主 agent 自定。

术语表范围约束

glossary.json 的收录是主动识别关键术语,而非穷举名词:必收书名与各章章名(组装阶段据此生成中文标题,term 须与原文标题完全一致、区分大小写)、专名(人名/地名/机构名,音译即取舍)、不常见或领域词、有争议或歧义译法、抽象概念词;不得用只有唯一自然译法的普通名词凑数。硬上限 200 条——itranslation_glossary 超过即拒绝写入;单次批量新增超过 100 条返回软警告(不拦截)。约束落在 preset persona(预读指令)与工具护栏中,停点①的人工审阅仍可增删。

全书审查与定向修订

全书译完统一审查(不逐章审):独立审查模型按「章/段」对照原文备份定位问题,产出 audit-report.md(5 维度:忠实度与准确性、术语与专名一致性、通顺与可读性、格式标点数字、体例与信息完整性;不分级、只列问题清单)。报告交用户过目(停点②),修订只重译问题段、不按章重跑;术语改动回写 glossary.json 并留痕。

Client UI

Run 卡进度:六个主流程 itranslation_* 工具各一行状态行(运行中/完成/失配/失败),从冻结的 call/result 派生中文摘要;提示词设置页:四个 LLM 提示词文本框,外加目标语言与输入文件配置。视觉对齐 harness 设计语言(共享 primitives + CSS Module + --dsw-alias-* token)。

架构

                    ┌─────────────────────────────────────────────┐
                    │               DSH 运行时(宿主)              │
                    │   llm 路由 · subagents · settings · fs · web  │
                    └───────┬──────────────┬──────────────┬────────┘
                            │              │              │
              ┌─────────────▼──────┐  ┌────▼─────┐  ┌─────▼──────────┐
              │  tools(Host 工具面)│  │  client  │  │ agent(主/子)  │
              │  十个确定性工具 +   │  │ UI(Run卡 │  │ 预读/翻译/审查/ │
              │  书级状态文件       │  │ +设置页)  │  │ 修订(LLM 层)  │
              └─────────────┬──────┘  └──────────┘  └────────────────┘
                            │ 依赖
              ┌─────────────▼──────┐
              │  core(确定性引擎)  │  slugify / detectChapters /
              │  零 DSH 依赖        │  segmentParagraphs / assembleBook
              └────────────────────┘

LLM 层由 itranslation_dispatch 经 DSH subagents 服务派发子代理完成;插件工具负责确定性文本层、子代理文件围栏与书级状态文件——无 Python 依赖、不自建 API 客户端。

项目结构

dsh-itranslation/
├── packages/itranslation/
│   ├── core/      确定性文本引擎(章节识别/分段/组装),零 DSH 依赖
│   ├── tools/     Host 工具面:十个 itranslation_* 工具(主流程、派发、子代理受限读写)与书级状态文件管理
│   ├── client/    Client UI:Run 卡进度、提示词/目标语言/输入文件设置页(host/client 双面构建)
│   └── bundle/    DSH bundle 入口:`dsh.bundle.patch` + `cordis.patch.yml`,供 `dsh plugin add` 安装
├── presets/itranslation/   agent preset 组合(agent.cordis.yml + preset.yml)
├── scripts/       lefthook 安装、commit-msg 校验、web 部署链入(幂等,内部走 dsh plugin add)
├── input/         用户放入 E2M 转出的 Markdown
├── produce/       书级工作目录(<slug>/,会话期间产物)
├── output/        最终成品(<slug>.md)
└── README.md   产品与使用文档(历史设计与决策记录见 archive/,不随发布分发)

开发

检查闸(提交前必过):typecheck(host + client 双聚合)→ lint(oxlint)→ test:coverage(逐文件 100% 覆盖率)→ hygiene(knip + publint)→ duplication(jscpd)。lefthook 在 pre-commit 跑增量 lint + 全量 typecheck,commit-msg 校验 conventional commits,pre-push 跑测试与覆盖率。

设计/开发决策历史记录已归档至 archive/(本地保留,不随发布分发)。

License

MIT