dsh-cot-peek

中文文档
0.5.9发布于 2026/11/03MITES Module零依赖

思考小窗:贴边深呼吸箭头、思考增量翻译;设置页可选官方 Bing/Google/DeepSeek 或自定义 OpenAI 兼容端点,支持拉取模型列表与连接测试,本地端点走宿时代理绕过 CORS。

原始使用文档
文档目录12 节
  1. 它做什么
  2. 自定义翻译端点(本地模型 / 任意 OpenAI 兼容网关)
  3. 设置页(0.3+)
  4. 自动 / 手动两种模式
  5. 翻译管线(为什么快、为什么不会硬翻术语)
  6. 会话隔离(为什么不会串台)
  7. 装完就有翻译吗?
  8. 依赖
  9. 安装
  10. 发布
  11. 文件
  12. 已知限制

dsh-cot-peek · 思考小窗

在 DSH Web 界面里悬浮一个置顶小窗,实时显示当前会话的思考过程(reasoning), 可收起,点一下按钮就翻成中文。

思考小窗示意

上面是示意图(按插件真实布局/配色渲染),不是截图。

位置:shell.overlay 顶层浮层,position: fixed,始终待在对话列里面: 它从输入框的数据座量出对话列的左右边界,宽度不会超出;拖动时也过不去侧边栏(0.5.5 起拖动被夹在对话列内), 侧边栏一打开,对话列变窄,小窗自动跟着缩,侧边栏收起后也会恢复您原本设的大小(用户尺寸单独记着,不被压缩掉)。 可拖动(按住标题栏)、可调大小(拖右下角),位置尺寸存在 localStorage (最小 320×140,最大 960×800)。Windows 桌面版顶部有一条系统窗口拖拽区, 小窗最低只能停到它下面,不会压上去(压上去拖动会变成拖动整个 DSH,0.5.0 修复)。

贴边与边缘抽屉:把小窗拖到对话列的左右边缘松手,它会吸附到那一侧; 收起时只留一枚边缘箭头(左右自动换朝向):

  • 没有侧边栏(对话列贴着屏幕边):和以前一样,窗体滑出视口,箭头停在屏幕边缘
  • 有侧边栏(0.5.5 起):吸附位置是对话列的边缘,收起时窗体原地隐藏、只剩箭头, 不会再滑到侧边栏上面去(箭头也在对话列里,不挡侧边栏)
  • 箭头做透明度呼吸动画(只有透明度变化,大小不变)
  • 悬停或点击箭头 → 窗体显示/滑入,完整显示文本框
  • 鼠标离开 1.5 秒后自动收起(再进入会取消)
  • 没有侧边栏时,滑入/滑出是 380ms 的缓动位移;prefers-reduced-motion 时箭头不呼吸
  • 拖离边缘松手 → 解除吸附,回到对话列内自由漂浮

数据来自 conversation.input.dock 里的隐藏数据座(那里才有当前 Session 的 Chat 快照)。

它做什么

  • 从 Chat 快照里直接读当前正在流式输出的 reasoning(不额外请求、不跑二次流)
  • 自动翻译(默认开):每 2.5 秒检查一次有没有新思考,有就把新增的已完结句子送翻, 整段不会重翻;标题栏「自动」按钮可随时关掉
  • 手动翻译:标题栏的「翻译」按钮,点一下立刻把当前整段翻完(没写完的尾巴也一起送)
  • 英文思考 → 中文译文:代码块、行内代码、URL、文件名、术语先打成占位符,翻完原样还原
  • 相同片段缓存,多句串行翻译(不冲垮免费翻译接口)
  • 翻译失败自动退回原文,标题栏给出状态
  • 手动模式下思考继续长时按钮会变成「再译」,提醒译文已经落后一截
  • 对话结束 3 秒后自动滑出视口,只留边缘箭头;中途又跑起来会取消
  • 下一轮开始时,自动收起的小窗会自己滑回来;您手动收起的则保持收起
  • 切换对话时边缘抽屉自动收回,并且不会自动翻译切过去的历史思考 (只把切换后新到达的文字算作新内容,避免白烧翻译额度)
  • 可切换「译文 / 原文」
  • 翻译服务不可用时,鼠标悬停标题栏的「翻译未启用」会显示具体卡在哪一步 (服务未挂载 / 插件未启用 / 设置不可用 / 服务报错)

自定义翻译端点(本地模型 / 任意 OpenAI 兼容网关)

窗口标题栏的 ⚙ 可以配置一个 OpenAI 兼容端点,配好后优先走它,官方翻译包只作为回退。 常见地址:

跑什么base URL
LM Studiohttp://127.0.0.1:1234/v1
Ollama(OpenAI 兼容)http://127.0.0.1:11434/v1
任意网关https://your-gateway/v1
  • 模型可以留空(服务端只有一个模型时),留空就不传 model 字段
  • API Key 可选,填了就带 Authorization: Bearer …
  • 配置存在 localStorage,不进仓库;发送前同样会做代码 / URL / 术语占位保护
  • 标题栏出现 「本地」 小标签表示当前走自定义端点
  • 点「改用官方」清空配置,回到 Bing / Google / DeepSeek

CORS / 宿主代理(0.3.2+):本地和内网地址(127.0.0.1、10.x、192.168.x、172.16-31.x) 会先走 DSH 宿时代理(/api/dsh-cot-peek/translate),由宿主进程转发 —— 完全不受 CORS 限制, 像 dsh-our-free-model 那种自带 127.0.0.1:8326 网关、但不发 CORS 头的插件也能直接接。 公网 https 地址仍由浏览器直连,需要对方允许跨域;宿主不存在时会自动回退到直连。

更新后要重启一次 DSH:宿主半身(/api/dsh-cot-peek/translate 代理)只在 DSH 启动时加载, 只刷新页面只会更新客户端。重启前本地端点会退回浏览器直连,可能被 CORS 拦。 旧版 DSH 没有宿主路由时,插件会自动回退直连,不会因为 401 卡住。

设置页(0.3+)

插件会把自己注册进 DSH 的插件设置页:设置 → 插件 → 思考小窗 · 翻译设置。 在那里可以:

  • 选翻译引擎:官方(Bing / Google / DeepSeek,走官方实验包)或 自定义 OpenAI 兼容端点
  • 填端点地址、模型(可选)、API Key(可选)
  • 点「保存」立即生效;点「改用官方」清空端点
  • 点「拉取模型列表」:走宿主代理读端点的 /v1/models;拉取成功后会出现「从拉取的列表里选模型 · N」按钮,点开就是完整清单,选中即保存(0.5.3 起;0.5.4 不再用系统下拉——系统下拉在深色界面里是浅灰底浅灰字,看不清;0.5.6 换成页面内列表框,行和文字都写死浅色兜底,也不依赖自绘按钮)
  • 点「测试连接」:用一句话试翻,直接告诉你通没通、返回了什么
  • 「平滑显示」(0.4.4+):思考文本按阅读速度(慢 40 / 正常 80 / 快 160 字每秒)逐字浮现,滚到底部才自动跟随;关掉就回到实时跳字。译文同样按这个速度显示(0.5.0 起),不会每隔 2.5 秒整段跳一次;落后太多时会自动加速追赶,不会越拖越慢(0.5.1)
  • 滚轮随时可翻:一旦往上翻就暂停自动跟随,窗口底部出现「↓ 回到底部」按钮,点一下恢复跟随(0.4.5+)
  • 「累积整轮思考」(0.4.6+,默认开):思考→工具→思考的多步循环会把同一轮所有步骤连起来显示,不会在中途被下一段替换掉;关掉则只显示最新一段
  • 平滑显示默认「慢」档 40 字/秒;嫌慢可在 ⚙ 面板切「正常」80 /「快」160(0.5.0 修好了三档标签,之前三档都显示「快」;0.5.4 起三档改成三个按钮,不用点开系统下拉)
  • 小窗的 ⚙ 面板里也有同样的「拉取模型列表 / 测试连接」按钮;拉取成功会自动保存(0.4.2 起)
  • 注意:部分本地网关(如 Our Free Model)强制要求 model,不填会回 model must be a string;先点「拉取模型列表」选一个模型即可(0.4.1 起会自动选第一个)
  • 页面上会提示 CORS 要求和隐私说明(发送前已对代码 / URL / 术语做占位保护)

窗口标题栏的 ⚙ 是同一个配置的快捷入口,两边读写同一份 localStorage。 点 ⚙ 时小窗会临时长高到能放下整个面板(360–460px),再点一次或保存/改用官方关掉面板后, 窗口会恢复成打开前的大小(0.5.2+);如果在面板开着时自己拖过大小,则以您拖的为准。

自动 / 手动两种模式

  • 自动(默认):每 2.5 秒看一眼思考有没有变长,变了就只翻新增的完结句子。 整段不重翻、未写完的半句留原文,所以流式输出不会被翻译卡住。 标题栏点「自动」可关掉,选择记在 localStorage。
  • 手动:关掉自动后,「翻译」按钮点一次翻整段(也就是把没写完的尾巴也送出去)。 两者不冲突:自动开着时点「翻译」,会立刻把整段补齐,之后又回到增量模式。

为什么自动要限频:免费接口(Bing)会被限流,逐句实时翻译又慢又容易被拒; 现在 2.5 秒一收,既跟得上,也不会把请求打爆。

翻译管线(为什么快、为什么不会硬翻术语)

  1. 省

    • 增量:自动模式下只送新增的完结句子,同一句永远只翻一次
    • 手动触发:点「翻译」才整段翻(含未写完的尾巴)
    • 串行 + 合句:短句合并到 ≥28 字符再发,减少请求数
    • 缓存:同一句只翻一次(思考里重复很多)
  2. 准

    • 送整句、不送碎片;合句后语义完整
  3. 不硬翻专业术语

    • 发出前先用占位符把代码块、行内代码、URL、文件名、术语表里的词 替换成 ⟦1⟧ 这类标记,翻译引擎看不到它们,翻完再原样还原
    • 术语表在 client.js 的 KEEP_TERMS,默认保留英文: DSH / MCP / LLM / API / SDK / JSON / Session / Token / Prompt / Context / Slot / Plugin / Bundle / Agent / Tool / Stream / Markdown …

    想加词:往 KEEP_TERMS 里加一条即可。

会话隔离(为什么不会串台)

窗口的数据座是 conversation.input.dock 里的一个隐藏 <span>,它往一个单例 bridge 写 { sessionId, text, running, bounds },浮层窗口只渲染 bridge 的当前值:

  • 只有当前挂载会话的数据座在写;切换会话时旧数据座先卸载并清空 bridge(sessionId: null), 窗口随之隐藏,新会话再写入自己的快照
  • 窗口按 sessionId 切换时重置翻译缓存并自动收起,所以不会读到别的会话的 reasoning
  • 同一窗口里后台/未聚焦的会话不会写入;多开窗口各自是独立渲染进程,bridge 互不影响
  • 已知边界:多智能体(subagent)的思考不在主对话快照里,窗口只显示主对话的 reasoning

装完就有翻译吗?

默认没有。 插件本体只负责显示思考 + 调用翻译入口,真正翻译需要二选一:

  1. 官方翻译实验包(推荐,免配置):安装 @deepseek-ai/dsh-experimental-cot-translation-bundle, 到「插件页 → 官方分组」启用「思考过程机器翻译」;默认走 Bing,免费
  2. 自定义端点(0.3+):设置 → 插件 → 思考小窗 → 选「自定义 OpenAI 兼容端点」, 填本地 LM Studio / Ollama / 任意网关地址

两者都没配时,窗口会显示「翻译未启用 · 装官方翻译包或配端点」,其余功能照常可用。

端点填完整 URL(以 /chat/completions 结尾)也能用,例如 http://127.0.0.1:8326/v1/chat/completions。

依赖

中文译文依赖官方实验包:

@deepseek-ai/dsh-experimental-cot-translation-bundle

它提供 Host 侧的 translator 服务和 Client 侧的 ctx.remote.cotTranslation。 不装也能用,只是小窗显示英文原文,标题栏标「翻译未启用」(悬停或点按钮能看到具体原因)。

本插件的 package.json 里 dsh.client.inject 必须声明 @deepseek-ai/dsh-api-remotes ——那是提供 remote 服务的客户端包;不声明的话 ctx.get('remote') 永远是 undefined, 表现就是「翻译未启用」。另外客户端 inject 数组里要有 remote(与官方翻译插件一致), 读取嵌套命名空间用 ctx.get('remote.cotTranslation'):cordis 的 ctx.get(name) 是 绕过 inject 要求直接读服务仓的,这是最稳的一条路;ctx.inject(['remote.cotTranslation']) 作为第二条路兜底等待挂载。

翻译服务默认 Bing(免费、免登录),可在 「设置 → 插件 → 思考过程机器翻译」里换成 Google 或 DeepSeek(付费)。

实测:Google 的 translate.googleapis.com 在国内网络下连不通,Bing 的 edge.microsoft.com 是可用的,建议保持默认。

安装

从 npm 安装(推荐):

dsh plugin --profile desktop add dsh-cot-peek

或者在 DSH「设置 → 插件市场」里加入下面的索引源,在「发现」页一键装:

https://gh-proxy.com/https://raw.githubusercontent.com/wunainana/dsh-cot-peek/main/market.json

本地目录链接(开发时):

dsh plugin --profile desktop add link:<本目录的绝对路径>

从 GitHub 装(SSH,适合 HTTPS 到 GitHub 不通的网络):

dsh plugin --profile desktop add "git+ssh://[email protected]:wunainana/dsh-cot-peek.git"

安装后重启 DSH 生效。

发布

  • npm:已发布 [email protected] → https://www.npmjs.com/package/dsh-cot-peek

  • 插件市场索引:仓库根目录的 market.json(格式 1,已通过 DSH 自带 @deepseek-ai/dsh-plugin-market-index 校验)。把它加进 「设置 → 插件市场 → 索引源」即可在「发现」页看到:

    https://gh-proxy.com/https://raw.githubusercontent.com/wunainana/dsh-cot-peek/main/market.json
    

    直连 GitHub 的网络也可以直接用 raw 地址:

    https://raw.githubusercontent.com/wunainana/dsh-cot-peek/main/market.json
    
  • 发新版本:改 package.json 的 version → npm publish --access public → 更新 market.json 里该版本的 version 与 publishTimestamp → 提交推送。 npm 账户开了 2FA,发布需要 --otp=<6位码> 或 Bypass 2FA 的 granular token。

文件

package.json       bundle 清单(dsh.bundle.patch + dsh.client)
cordis.patch.yml   把 cot-peek 这一行插进 profile
index.js           Host 半身:空实现(功能全在浏览器)
client.js          全部逻辑:取 reasoning、分句、术语保护、手动翻译、UI
locale/zh.json     插件管理页里显示的中文标题/描述
locale/en.json     英文标题/描述
icon.svg           原创图标
market.json        插件市场索引(format 1)

已知限制

  • 「累积整轮思考」按节点的 data.turn 拼接同一轮的所有 step;个别 DSH 版本的节点没有该字段时, 会退回「只显示最新一段」(累积上限 2 万字,超出按 step 整块保留尾部;0.5.7 起截断不会再让翻译引擎误判成新流反复重翻)
  • 多智能体(subagent)的思考不在主对话快照里,窗口看不到子代理的 reasoning
  • 手动翻译:翻完之后思考继续长,译文会落后,按钮变成「再译」提醒您
  • 翻译走匿名接口,可能被限流或拒绝;失败时自动显示原文(0.5.8 起失败结果不再写入缓存,点「再译」能真正重试)
  • 新一轮思考开始时会清掉上一轮译文(0.5.8 起),不会出现「新原文配旧译文」
  • 本地 / 内网端点连不上时会直接报真实原因(0.5.7 起不再回退到浏览器直连去碰 CORS)
  • 自动检查新版本(0.5.9 起):宿主向 npm 查询最新版,发现更新时小窗标题栏出现「有新版本 x.y.z」徽标, ⚙ 面板里也会提示升级命令;查询结果缓存 6 小时,离线时静默跳过
  • 改完 client.js 需要刷新页面(Client 插件重载)

版本与发布记录

dsh-cot-peek 共发布 29 个版本,首次发布于 2026/10/18;过去 12 个月发布了 29 个版本。

版本发布日期距今
0.5.9latest2026/11/03今天
0.5.82026/11/03今天
0.5.72026/11/03今天
0.5.62026/10/286 天前
0.5.52026/10/286 天前
0.5.42026/10/286 天前

关于 dsh-cot-peek 的常见问题

dsh-cot-peek 是什么?

思考小窗:贴边深呼吸箭头、思考增量翻译;设置页可选官方 Bing/Google/DeepSeek 或自定义 OpenAI 兼容端点,支持拉取模型列表与连接测试,本地端点走宿时代理绕过 CORS。

如何安装 dsh-cot-peek?

在项目目录运行 npm install dsh-cot-peek,或使用 pnpm add / yarn add / bun add。

dsh-cot-peek 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/dsh-cot-peek 是否存在。

dsh-cot-peek 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

dsh-cot-peek 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

dsh-cot-peek 可以商用吗?

dsh-cot-peek 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

dsh-cot-peek 还在维护吗?

最新版本 0.5.9 发布于 2026/11/03(今天);至今共发布 29 个版本,其中过去 12 个月发布了 29 个;首次发布于 2026/10/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。