@lynn123411/dsh-chat-translate 1.8.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -14
- package/cordis.patch.yml +2 -1
- package/docs//351/205/215/347/275/256.md +22 -20
- package/lib/client.js +429 -1065
- package/lib/client.js.map +4 -4
- package/lib/index.js +265 -471
- package/lib/index.js.map +4 -4
- package/lib/types/client/index.d.ts +12 -11
- package/lib/types/client/locales.d.ts +8 -20
- package/lib/types/client/reading-settings-page.d.ts +7 -0
- package/lib/types/client/settings/store.d.ts +40 -32
- package/lib/types/client/settings/ui.d.ts +5 -4
- package/lib/types/client/translate/api.d.ts +5 -16
- package/lib/types/client/translate/client-cache.d.ts +1 -3
- package/lib/types/client/translate/lazy.d.ts +9 -7
- package/lib/types/client/translate/mount.d.ts +2 -6
- package/lib/types/client/translate/observer.d.ts +24 -24
- package/lib/types/client/translate/reply.d.ts +38 -0
- package/lib/types/index.d.ts +41 -12
- package/lib/types/server/cache.d.ts +13 -1
- package/lib/types/server/config.d.ts +81 -40
- package/lib/types/server/dispatcher.d.ts +25 -38
- package/lib/types/server/pipeline/{think.d.ts → blocks.d.ts} +9 -9
- package/lib/types/server/router.d.ts +6 -8
- package/lib/types/server/types.d.ts +2 -8
- package/package.json +14 -14
- package/lib/types/client/translate/think-button.d.ts +0 -19
- package/lib/types/client/translate/think.d.ts +0 -55
- package/lib/types/client/translate/viewport-observer.d.ts +0 -43
- package/lib/types/server/adapters/bing.d.ts +0 -15
package/README.md
CHANGED
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
# @lynn123411/dsh-chat-translate
|
|
2
2
|
|
|
3
|
-
DeepSeek Harness Web
|
|
3
|
+
DeepSeek Harness Web 界面的**过程折叠块正文翻译**插件。自动把助手「用时 XXX」那个大折叠块里需要阅读的英文(如 `I traced the failing path to a stale lock file.`)翻成中文,采用非侵入式双语对照渲染(点击译文可原地切回原文),不污染会话上下文。折叠块之外的最终汇总、思考链正文与工具调用行一律不翻,代码块原样保留。配置详见 [docs/配置.md](./docs/配置.md)。
|
|
4
4
|
|
|
5
5
|
## 特性
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
- **按块翻译与打包**:正文按 markdown
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
- **DSH
|
|
18
|
-
- **设置面板集成**:设置面板挂在「设置 - 阅读体验」页(本插件贡献其中一张卡片),页内提供总开关、
|
|
7
|
+
- **只翻大折叠块里的正文**:范围判定直接用内核标在 flow item 上的 `data-turn-process-member`(折叠块成员)与 `data-turn-process-answer`(最终汇总)——只翻前者。不做「轮尾行之前」这类位置推断:轮尾行要等轮次结束才出现,进行中的轮次会把折叠块里的正文整片漏掉。折叠块之外的最终汇总、思考链正文、工具调用标题与折叠摘要永不参与,代码块及其内容原样保留。
|
|
8
|
+
- **全自动,无需点击**:回答还在流式输出(markdown 根带 `data-streaming`)时不翻,落定后整条转成中文,中文一段一段出现。开关只有一个:设置页里的总开关。
|
|
9
|
+
- **中文段落原样保留**:不含拉丁字母的块(整段中文、纯数字、纯标点)不进请求也不占缓存,交付正文里已经写好的中文段落不会被再翻一遍。
|
|
10
|
+
- **按块翻译与打包**:正文按 markdown 块级元素切分,混合块(列表项文字 + 子列表 / 代码块)拆成行内片段,嵌套结构留在原位;客户端按 2048 估算 token 分块逐块请求、逐块挂载,宿主把相邻片段打包成一个请求(输入上限 4096 估算 token、输出上限 8192 token),单块超限时按空行、单行、句末依次切开再拼回。
|
|
11
|
+
- **失败即保留原文**:块内任一片段失败就整块不译,界面上不留提示,控制台留一条警告;失败的译文不进缓存,下次滚动重扫时会自然重试。
|
|
12
|
+
- **非侵入式 DOM 挂载与双语对照**:非侵入式包装保留原始 DOM 节点与 React Fiber 事件系统;点击某一块的译文原地切回该块原文,再点原文切回译文,块与块互不影响。
|
|
13
|
+
- **智能内容脱敏与占位符保护**:翻译前对多行代码块、内联代码、URL 链接、文件路径及 CLI 命令行参数做占位符脱敏与鲁棒还原,杜绝代码与路径被误翻译。占位符是 `⟦<随机短码><序号>⟧` 形式的独立片段,构建时会在紧邻拉丁字母的一侧补一个空格,避免译回时与相邻单词粘连。译文只有在每个占位符都按原顺序完整还原时才被采用:占位符被改写、遗失或重复时整条译文作废、退回原文,且绝不写入缓存;升级前旧格式写入的污染译文在读取时被驱逐。
|
|
14
|
+
- **单通道:AI 翻译(OpenAI 兼容协议)**:对接任意 OpenAI 兼容的 `chat/completions` 服务(OpenAI、DeepSeek、通义、Ollama、本地 vLLM 等)。Key / Base URL / 模型三者齐备才翻译,缺任何一项都保持原文,不做任何降级兜底。API Key 经 DSH 凭据服务读写 `~/.dsh/.credentials.yaml` 的 `TRANSLATE_API_KEY`,保存后立即生效;Base URL 与模型在设置面板配置。
|
|
15
|
+
- **串行请求与熔断保护**:同时最多一个在途请求(长回答按阅读顺序逐段出中文),单次请求超时 `aiTimeoutMs`(默认 600000 毫秒,范围 500–900000),连续失败熔断自愈,7 天 LRU 磁盘缓存 `~/.dsh/dsh-chat-translate/cache.json`。
|
|
16
|
+
- **当前会话作用域与视口懒加载**:只翻译当前查看的会话,切换会话自动跟随新内容;回答进入视口(150px 缓冲)才开始翻译,历史会话因此只在真的被读到时才花请求,命中缓存的回答滚到即整条显示中文。
|
|
17
|
+
- **DSH 原生配置接入**:配置就是本插件在 profile 里的插件配置——设置面板经 DSH 的共享配置表单(`ctx.configForms`)读写本插件配置条目 `dsh-chat-translate` 的 `config`,用户层落在当前 profile 的 patch;密钥走 DSH `credentials` 服务。无任何自研配置文件。
|
|
18
|
+
- **设置面板集成**:设置面板挂在「设置 - 阅读体验」页(本插件贡献其中一张卡片),页内提供总开关、API Key、Base URL、模型、单次请求超时与「测试 AI 通道」。
|
|
19
19
|
|
|
20
20
|
## 安装
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
23
|
dsh plugin --profile web add @lynn123411/dsh-chat-translate
|
|
24
24
|
```
|
|
25
|
-
|
package/cordis.patch.yml
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# @lynn123411/dsh-chat-translate bundle patch
|
|
2
2
|
# 声明在 package.json 的 dsh.bundle.patch,`dsh plugin add` 后自动并入 profile 层栈。
|
|
3
|
-
#
|
|
3
|
+
# 这条 insert 行是 root loader entry(不是 preset 子树),client-modules 正是对这类行
|
|
4
|
+
# 依据 dsh.client 声明服务浏览器半区(lib/client.js),所以插件本体单行即可。
|
|
4
5
|
- insert:
|
|
5
6
|
- id: dsh-chat-translate
|
|
6
7
|
name: '@lynn123411/dsh-chat-translate'
|
|
@@ -9,31 +9,33 @@
|
|
|
9
9
|
TRANSLATE_API_KEY: sk-xxx
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
-
> ⚠️ **注意**:DSH 的凭据加载器要求 refs 键值非空。手动编辑时要么填写真实 Key,要么**直接删除该行**——不要写成 `TRANSLATE_API_KEY: ""` 这类空值,否则 DSH
|
|
12
|
+
> ⚠️ **注意**:DSH 的凭据加载器要求 refs 键值非空。手动编辑时要么填写真实 Key,要么**直接删除该行**——不要写成 `TRANSLATE_API_KEY: ""` 这类空值,否则 DSH 启动会失败。未配置时插件不翻译,正文保持原文,不会报错。
|
|
13
13
|
|
|
14
|
-
2. **Base URL 与模型等设置**:在「设置 - 阅读体验」中填写 Base URL(如 `https://api.openai.com/v1` 或 `https://api.deepseek.com/v1`)与模型名(如 `gpt-4o-mini`、`deepseek-chat`),点击「测试 AI
|
|
14
|
+
2. **Base URL 与模型等设置**:在「设置 - 阅读体验」中填写 Base URL(如 `https://api.openai.com/v1` 或 `https://api.deepseek.com/v1`)与模型名(如 `gpt-4o-mini`、`deepseek-chat`),点击「测试 AI 通道」验证。所有设置(开关、超时、Base URL、模型、目标语言)都是本插件在 profile 里的插件配置:写入当前 profile 的 patch(`~/.dsh/profiles/<profile>/cordis.patch.yml`)中 `dsh-chat-translate` 条目的 `config`,可直接编辑该文件——字段都是可实时更新的,改完立即生效,不需重载:
|
|
15
15
|
|
|
16
16
|
```yaml
|
|
17
|
-
dsh-chat-translate
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
model: deepseek-chat
|
|
26
|
-
targetLang: zh-Hans
|
|
17
|
+
- id: dsh-chat-translate
|
|
18
|
+
name: '@lynn123411/dsh-chat-translate'
|
|
19
|
+
config:
|
|
20
|
+
enabled: true
|
|
21
|
+
aiTimeoutMs: 600000
|
|
22
|
+
baseUrl: https://api.deepseek.com/v1
|
|
23
|
+
model: deepseek-chat
|
|
24
|
+
targetLang: zh-Hans
|
|
27
25
|
```
|
|
28
26
|
|
|
29
|
-
> 从 1.2 起,插件不再读写独立的 `~/.dsh/dsh-chat-translate-config.json
|
|
27
|
+
> 从 1.2 起,插件不再读写独立的 `~/.dsh/dsh-chat-translate-config.json`:升级后首次加载会自动把旧文件的值迁移进这个配置条目并删除旧文件(若你已在 UI 中改过设置,则以你的设置为准)。
|
|
30
28
|
|
|
31
|
-
|
|
29
|
+
> 从 2.0 起,`concurrency`、`timeoutMs`、`thinkTimeoutMs`、`aiEnabled`、`bingEnabled`、`thinkEnabled` 与 `channels` 都已退役:这些键在旧版本里描述的能力(工具标题翻译、思考链翻译、Bing 兜底、并发池)已经删除。首次加载会把它们从你的配置条目里清掉,`~/.dsh/dsh-chat-translate/think-cache.json` 也一并删除。`targetLang` 只在这里配置,设置面板不提供入口。
|
|
32
30
|
|
|
33
|
-
|
|
34
|
-
- 思考还在流式输出(`data-state="running"`)时按钮置灰;翻译中再点忽略;失败时按钮停止动画并回到可翻译状态,可以再点重试。
|
|
35
|
-
- 缓存规则:展开时若整条思考的段落都命中本地缓存就直接显示中文(不发请求);只命中一部分时展开仍是原文,点按钮时已命中的立刻出现、其余才发请求;翻译中途折叠卡片,本次翻译会跑完并进缓存。
|
|
36
|
-
- 翻译范围:展开的思考正文;折叠起来的那一行摘要永不翻译,代码块原样保留,混合块只翻行内文字、嵌套子列表留在原位。只走 AI 通道,Bing 从不参与。
|
|
37
|
-
- 请求方式:客户端按 2048 估算 token 分块,宿主按块打包(输入上限 4096 估算 token、输出上限 8192 token),走独立串行队列(同时最多一个在途请求),超时由 `thinkTimeoutMs` 控制(默认 600000 毫秒,范围 500–900000)。译文进独立缓存池(客户端与磁盘各 300 条),与工具标题互不挤占。
|
|
31
|
+
3. **翻译范围与时机**:只翻「用时 XXX」那个大折叠块里的正文(给人读的那些段落)。范围判定用内核标在每条 flow item 上的 `data-turn-process-member`(折叠块成员)与 `data-turn-process-answer`(最终汇总):只翻前者,后者一个字都不碰。回答还在流式输出(markdown 根带 `data-streaming`)时不动,落定后整条自动转中文,不需要点任何按钮。
|
|
38
32
|
|
|
39
|
-
|
|
33
|
+
- 永不翻译:折叠块之外的最终汇总、思考链正文、工具调用标题、工具卡片折叠起来的那一行摘要。
|
|
34
|
+
- 原样保留:代码块(`pre`)及其内部;不含拉丁字母的块(整段中文、纯数字、纯标点)不进请求也不占缓存。
|
|
35
|
+
- 混合块(列表项文字 + 子列表 / 代码块)只翻行内文字,嵌套结构留在原位。
|
|
36
|
+
- 失败即保留原文:块内任一片段失败就整块不译,界面上不留提示,控制台留一条警告;失败结果不进缓存,下次滚动重扫时自然重试。
|
|
37
|
+
- 点击某一块的译文原地切回该块原文,再点原文切回译文;块与块互不影响。
|
|
38
|
+
|
|
39
|
+
4. **请求方式**:客户端按 2048 估算 token 分块,逐块请求、逐块挂载;宿主把相邻片段打包成一个请求(输入上限 4096 估算 token、输出上限 8192 token),单块超过输入上限时按空行、单行、句末依次切开,译回后拼回。同时最多一个在途请求,超时由 `aiTimeoutMs` 控制(默认 600000 毫秒,范围 500–900000)。译文进唯一的缓存池(客户端 500 条、磁盘 1000 条,7 天 TTL);已命中缓存的块在进入视口时立即显示中文,不发请求。
|
|
40
|
+
|
|
41
|
+
5. **通道行为**:只有一条通道——Key / Base URL / 模型三者齐备才翻译,缺任何一项都保持原文,不做降级兜底。
|