dsh-yiyide-pdf
一译得(yiyide.cc)PDF 翻译的 DeepSeek Harness 插件: 把「上传 → 页级预检 → 三页预览 → 报价 → 确认冻结译点 → 翻译 → 质量确认 → 下载」整条流水线做成 DSH 原生工具, 翻译在 DSH 里发起,成品直接落到本机。
- 复用一译得已有的连接器接口(
/v1/connector、/v1/uploads、/v1/orders、/v1/jobs白名单),没有新增后端。 - 授权码就是网页端的连接器授权码:在 https://app.yiyide.cc/account 用手机号登录后生成,
wb_开头,30 天有效。 - 原件不出本机以外的地方:只有 PDF 字节目片上传给一译得,与网页端行为一致。
安装
# 从 GitHub 装(推荐)
dsh plugin --profile web add github:bannerchi/dsh-yiyide-pdf
# 或在 DSH 里装本地目录(会 pnpm link 进当前 profile,并写入 dsh.profile.bundles)
dsh plugin --profile web add /path/to/dsh-yiyide-pdf
--profile 换成你自己的 profile 名:dsh web 下一般是 web,DSH 桌面版的 profile 是 desktop。
也可以让 DSH 的插件管理器安装同一个目录。装好后重启/刷新 DSH 会话,工具 yiyide_* 即可用。
要求:DSH >=0.2.0 <0.4.0,Node 20+。插件本身零运行时依赖
(@deepseek-ai/dsh-tools、@deepseek-ai/schemastery 由 DSH 宿主提供,所以声明为可选 peer)。
授权(三选一,推荐第一种)
- 插件配置(最安全) — 设置 → 插件 → 一译得 PDF 翻译 →
connectorToken字段粘贴授权码。 该字段是role('secret'),界面掩码显示,不会进入会话记录。 - 原生授权流 — 若宿主提供
authorization服务,可在 DSH 的授权入口里选择「一译得 PDF 翻译授权码」, 在系统弹窗里粘贴(不走对话)。 - 工具传参 — 对话里
yiyide_connect { token: "wb_…" }。会先真实请求一次账号接口验证,通过才写入 DSH 凭据中心(refYIYIDE_CONNECTOR_TOKEN);缺点是授权码会留在会话记录里,介意就用前两种。
授权读取顺序:凭据中心 YIYIDE_CONNECTOR_TOKEN → 插件配置 connectorToken。
授权失效(AUTH_REQUIRED)时回到网页重新生成即可,旧码会被自动作废。
工具
| 工具 | 作用 | 是否改状态 |
|---|---|---|
yiyide_connect |
绑定/校验/清除授权码 | 只动本机凭据 |
yiyide_account |
账号:手机号掩码、可用/冻结译点、上传限制、支持语言 | 只读 |
yiyide_translate |
上传本地 PDF + 等页级预检,拿到页数与报价译点 | 创建上传 |
yiyide_upload_status |
回查某个上传的预检/报价/预览授权 | 只读 |
yiyide_preview |
授权三页预览并把水印 PNG 存到本机 | 可能冻结少量译点 |
yiyide_quote |
生成(或恢复)正式报价订单,不开始翻译 | 创建订单 |
yiyide_order |
回查订单状态与译点 | 只读 |
yiyide_confirm |
确认报价:冻结 quoted_points 译点并开始完整翻译 |
冻结译点 |
yiyide_job |
任务进度(可 wait_seconds 有界轮询)、文档风险 |
只读 |
yiyide_quality |
成品风险确认:accept 结算并开放下载 / reject 释放译点 |
结算或释放 |
yiyide_download |
下载纯译文 / 双语对照 PDF 到本机 | 只写本机文件 |
yiyide_jobs |
最近任务记录(≤100) | 只读 |
典型对话
把 ~/Documents/paper.pdf 翻译成中文
模型会按 yiyide_translate → (展示页数与报价)→ yiyide_preview → yiyide_quote → 你确认费用 →
yiyide_confirm → yiyide_job → yiyide_download 的顺序推进。任何冻结/结算译点的步骤都会弹 DSH 原生确认框,
上面写着账号、文件、页数、冻结译点与账户余额;选「取消」不会扣点。
安全与金额保护
- 授权码只存在本机(凭据中心/插件配置),不作为工具参数回传给模型,日志里也不会出现原文。
- 每次请求 60s 超时;拒绝 HTTP 重定向;JSON ≤ 1MB、预览 PNG ≤ 8MB、成品 ≤ 512MB。
- 成品下载链接只接受一译得 origin 或 COS(
*.myqcloud.com)的 HTTPS 无端口签名地址, 签名 URL 请求不带账号凭证;链接过期只刷新一次。 - 写入型请求失败(
OUTCOME_UNKNOWN/ 网络中断/5xx)绝不自动重试:插件会按已知 ID 回查状态, 然后把决定权交回给你,避免重复上传/重复下单/重复确认。 - 确认前会重读订单,若报价或状态变了直接报
STATE_CHANGED,不会按旧价扣点。 - 成品落盘
0600且不覆盖已有文件(自动加(2)后缀)。
配置项
| 字段 | 默认 | 说明 |
|---|---|---|
apiOrigin |
https://yiyide.cc |
只接受生产 origin 或本机 loopback |
connectorToken |
空 | 连接器授权码(secret) |
defaultTargetLanguage |
zh |
默认目标语言 code |
outputDirectory |
空 | 成品目录;空则用会话工作目录,其次 ~/Downloads |
previewDirectory |
空 | 预览 PNG 目录;空则用系统临时目录 |
requestTimeoutSeconds |
60 |
单请求超时 |
preflightIntervalSeconds / preflightMaxRounds |
4 / 30 |
页级预检轮询节奏与上限 |
pollIntervalSeconds |
6 |
任务轮询间隔 |
allowAnyDownloadHost |
false |
允许任意 HTTPS 下载地址(不建议) |
结构
lib/api.js 连接器 HTTP 客户端(错误码、超时、下载 URL 校验)
lib/files.js 本地 PDF 校验、sha1/分片 sha256、成品/预览落盘、状态快照
lib/flow.js 业务流程(上传、预检、预览、报价、确认、轮询、下载)
lib/tools.js defineTool 工具定义(12 个 yiyide_* 工具)
lib/index.js Config + apply:凭据读写、原生确认框、授权流、系统提示
cordis.patch.yml 插件条目(insert yiyide-pdf)
已知边界
- 只走「标准」表达风格、PDF 导出、
preset_mode: off(与一译得连接器当前能力一致)。 需要学术/正式风格、术语库或其它导出格式时,请到网页端继续。 - 单文件页数与大小受账号上限约束(
yiyide_account里的limits)。 - 页级预检/翻译是异步任务:长文档需要多次
yiyide_job轮询,或在yiyide_job里给wait_seconds。
开发与测试
test/fake-api.mjs 是一个按连接器契约实现的最小假服务端(分片校验、预检、预览授权、
报价/确认、任务状态、质量确认、签名下载),全部测试都在不花钱、不联网的前提下跑:
npm test # = node --test test/smoke.test.mjs test/flow.test.mjs,13 个用例
test/smoke.test.mjs:用替身顶掉@deepseek-ai/*(真实环境由 DSH 宿主兜底解析), 验证apply()能注册 12 个工具、授权流、系统提示,以及未绑定/绑定/清除授权码与账号查询。test/flow.test.mjs:整条流水线(全流程 / 质量确认 / 分片失败不重试 / 本地文件校验)。
插件安装是「生成式」快照(DSH 会把插件目录复制进 profile 的一个 generation),
所以改完 lib/ 之后要重新安装一次才会生效:
dsh plugin --profile web add /path/to/dsh-yiyide-pdf
同一个路径已经装过时,add 会报 already-installed(file: 安装不看版本号),需要先移除再装:
dsh plugin --profile web remove dsh-yiyide-pdf
dsh plugin --profile web add /path/to/dsh-yiyide-pdf
生产环境探针(不需要授权码)可用于确认接口在线:
curl -s https://yiyide.cc/v1/translation/capabilities | head -c 200 # 200 + 语言列表
curl -s -o /dev/null -w '%{http_code}\n' https://yiyide.cc/v1/connector/account # 401 LOGIN_REQUIRED
No comments yet. Be the first to write one.