🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

划词解读 yfwu2020/dsh-selection-explain

DeepSeek Harnessv0.10.6
yfwu20204 天前有提交已提供中文文档扫描:含敏感能力

DSH 划词解读:选中文字浮出按钮,点击弹窗流式显示专业中英翻译 + 该文字在当前上下文中的含义详解

32.9/100
综合分
4
GitHub 星标
469
npm 周下载
—/5
用户评分

数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @yfwu2020/dsh-selection-explain
npm 源 · @yfwu2020/dsh-selection-explain 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · tool
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功(非静态推断);本次验证针对插件 v0.13.0,当前版本为 v0.10.6
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@yfwu2020/dsh-selection-explain @ 0.10.6
✓Node 引擎要求 >=22.14.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 03:20:02

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 85 处,展示前 49 条)
  • 发起网络请求
    lib/client.js:212
    return fetch(ROUTE + (query.length ? "?" + query.join("&") : ""), { headers: { accept: "application/json" } }).then(function(response) {
  • 发起网络请求
    lib/client.js:738
    fetch(SETTINGS, { headers: { accept: "application/json" } }).then(function(response) {
  • 发起网络请求
    lib/client.js:786
    settingsSaveRequest = fetch(SETTINGS, {
  • 发起网络请求
    lib/client.js:905
    return fetch(SETTINGS, {
  • 发起网络请求
    lib/client.js:2614
    fetch(MIC_API).then(function(response) {
  • 发起网络请求
    lib/client.js:2875
    return fetch(QUOTE_CONTEXT_API, {
  • 读取本地文件
    lib/host/mic.js:74
    micProbeResolved = existsSync(override) ? override : '';
  • 读取本地文件
    lib/host/mic.js:79
    if (existsSync(MIC_PROBE)) {
  • 读取本地文件
    lib/host/mic.js:83
    if (!existsSync(MIC_PROBE_SRC)) {
  • 读取本地文件
    lib/host/mic.js:90
    tag = createHash('sha1').update(readFileSync(MIC_PROBE_SRC)).digest('hex').slice(0, 8);
  • 读取本地文件
    lib/host/mic.js:96
    if (existsSync(built)) {
  • 写入本地文件
    lib/host/mic.js:108
    mkdirSync(pluginDataDir(), { recursive: true });
  • 执行外部命令来自配置/变量
    lib/host/mic.js:112
    result = spawnSync(attempt.command, [...attempt.args, MIC_PROBE_SRC, '-o', built], { timeout: 60_000 });
  • 读取本地文件
    lib/host/mic.js:117
    if (result.status === 0 && existsSync(built)) {
  • 写入本地文件
    lib/host/mic.js:119
    chmodSync(built, 0o755);
  • 执行外部命令固定命令
    lib/host/mic.js:150
    const found = spawnSync('xcrun', ['--sdk', 'macosx', '--show-sdk-path'], { timeout: 15_000 });
  • 执行外部命令来自配置/变量
    lib/host/mic.js:187
    const child = spawn(probe, ['--watch', String(MIC_WATCH_MS)], {
  • 读取本地文件
    lib/host/settings-store.js:50
    const parsed = JSON.parse(await readFile(settingsFile(), 'utf8'));
  • 写入本地文件
    lib/host/settings-store.js:72
    await mkdir(join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'selection-explain'), { recursive: true });
  • 写入本地文件
    lib/host/settings-store.js:73
    await writeFile(settingsFile(), JSON.stringify({ version: 1, values: settingsOverrides }, null, 0), 'utf8');
  • 读取本地文件
    lib/host/models.js:33
    const raw = await readFile(leakyFile(), 'utf8');
  • 写入本地文件
    lib/host/models.js:62
    void writeFile(leakyFile(), body, 'utf8').catch((error) => {
  • 读取本地文件
    lib/host/history-store.js:40
    const parsed = JSON.parse(await readFile(pillPosFile(), 'utf8'));
  • 写入本地文件
    lib/host/history-store.js:54
    await mkdir(dataDir, { recursive: true });
  • 写入本地文件
    lib/host/history-store.js:55
    await writeFile(pillPosFile(), JSON.stringify({ version: 1, position: pillPos }, null, 0), 'utf8');
  • 读取本地文件
    lib/host/history-store.js:97
    const parsed = JSON.parse(await readFile(panelSizeFile(), 'utf8'));
  • 写入本地文件
    lib/host/history-store.js:111
    await mkdir(dataDir, { recursive: true });
  • 写入本地文件
    lib/host/history-store.js:112
    await writeFile(panelSizeFile(), JSON.stringify({ version: 1, size: panelSize }, null, 0), 'utf8');
  • 读取本地文件
    lib/host/history-store.js:266
    const raw = await readFile(historyFile(), 'utf8');
  • 写入本地文件
    lib/host/history-store.js:296
    await mkdir(dataDir, { recursive: true });
  • 写入本地文件
    lib/host/history-store.js:297
    await writeFile(historyFile(), JSON.stringify({ version: 1, entries }, null, 0), 'utf8');
  • 读取本地文件
    lib/host/attach.js:217
    const bytes = await readFile(hostPath);
  • 读取本地文件
    lib/host/shot-platform.js:104
    const fileExists = (path) => stat(path).then(info => info.isFile() && info.size > 0).catch(() => false);
  • 读取本地文件
    lib/host/shot-platform.js:123
    await access(compiler);
  • 读取本地文件
    lib/host/shot-platform.js:165
    return parsePngSize(await readFile(path));
  • 写入本地文件
    lib/host/shot-platform.js:179
    await chmod(dir, 0o700);
  • 删除本地文件
    lib/host/shot-platform.js:182
    async remove(path, recursive = false) { await rm(path, { recursive, force: true }).catch(() => { }); },
  • 读取本地文件
    lib/host/shot-platform.js:184
    const names = await readdir(dir).catch(() => []);
  • 删除本地文件
    lib/host/shot-platform.js:188
    }).map(name => rm(join(dir, name), { force: true }).catch(() => { })));
  • 读取本地文件
    lib/host/chat-materials.js:44
    await access(path);
  • 读取本地文件
    lib/host/design-skill.js:27
    const info = await stat(path);
  • 读取本地文件
    lib/host/design-skill.js:31
    const raw = await readFile(path, 'utf8');
  • 读取本地文件
    lib/host/native-probe.js:8
    return stat(path).then(value => value.isFile() && value.size > 0).catch(() => false);
  • 读取本地文件
    lib/host/native-probe.js:16
    source = await readFile(options.sourcePath);
  • 写入本地文件
    lib/host/native-probe.js:27
    await mkdir(options.cacheDir, { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/host/native-probe.js:31
    await chmod(temporary, 0o755);
  • 写入本地文件
    lib/host/native-probe.js:32
    await rename(temporary, output);
  • 删除本地文件
    lib/host/native-probe.js:39
    await rm(temporary, { force: true }).catch(() => { });
  • 读取本地文件
    lib/host/native-probe.js:49
    await access(compiler);
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent-default-model@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-llm@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 选中文字浮出按钮
  • 弹窗流式显示翻译
  • 上下文含义详解
v0.13.12026-10-28
完成客户端、解读、历史和截图模块的结构整理,并修复窗口探针的发布与截图任务清理问题。 · 修复 · 发布包包含窗口与显示器探针源码;缺少平台二进制时,支持按源码 hash 编译并缓存,保留失败时的截图降级路径。 · 截图服务按插件实例管理任务;停用时中止活动命令、释放长轮询并清理临时文件。 · 框选取消或正常完成后,取消仍在后台运行的窗口与显示器预读取。 · 结构整理 · 客户端界面、实例状态、控制器装配和事件订阅分别维护,补齐控制器依赖的类型约束。 · 解读流程按请求准备、消息、工具、流式执行和补结论拆分。 · 历史模块拆出文本转换、消息回放、滚动和截图标题处理。 · 浏览器面板按场景拆分;客户端十个场景各自使用独立进程、临时宿主、数据目录和界面生命周期。 · 保留现有 HTTP/SSE 接口、配置默认值和历史数据格式,不新增运行时依赖。 · 验证范围 · 完整单元、隔离宿主集成与真实浏览器测试。 · 宿主及客户端类型检查,以及发布包资源与源码恢复检查。 · 截图生命周期测试使用平台夹具和合成图片;真实系统截图未进行人工验证。
v0.13.02026-10-27
· 新增 · 截图提问(⌘⇧X) 框选屏幕上任意区域,松手即可提问;小窗开着时截图直接进入待发送附件。 · 截图取景范围 设置 → 截图,按「弹语音卡」与「直接进输入框」两种触发分别选择 整窗 或 仅选区,提示词也按取景范围分流。 · 图片灯箱 点缩略图在当前窗口内放大预览,一组图用 ← / → 切换,Esc 或点空白关闭。 · 附件改为「点发送才上传」 叉掉的图片不再落盘;发送后气泡里存的是引用而不是字节。 · 修复 · 红框偏移:修正 plist 矩形解析与坐标换算、用透明通道量出窗口内容区、去掉 screencapture -l 的 -o、补上窗口矩形刷新 —— 逐像素验证后红框落在框选位置。 · 截图失败可见:host 通过长轮询把失败回传客户端,并保留待发送卡片;长轮询与框选超时的定时器 unref,宿主退出不再被钉住。 · 截图标题:标题独立落盘、回放历史与胶囊同步刷新,追问保存不会再抹掉。 · 附件上传对象接错:原先挂到了截图 env 上,而 ask() 读的是对话 env,已改正。 · 去掉多余的窗口列表二次调用,修正卡片动画。 · 提升聊天上下文预算,超大的最近历史自动压缩。 · 说明 · 仅选区截图不再提红框(图上没有框,提示词也就不该提)。
v0.12.02026-10-20
· 对话记忆与附件 · 小窗上下文从固定最近 20 条改为容量预算,默认 32,768 tokens,可在「设置 → 模型 → 对话记忆」调整;容量允许时保留原文及图片顺序,接近上限时分批压缩较早的完整问答。 · 摘要与原始记录分别保存,重开对话沿用摘要和背景;摘要失败、输出截断或流未完整结束时不推进压缩进度。 · 取消历史图片 2 张/4 MiB、文件 8 件的滚动淘汰。开启工具后,模型可按附件引用恢复旧图、旧文件,或按消息编号读取已压缩的原文。 · 引用不再静默截尾;主会话引用在加入时保存一次上下文快照。超长输入失败后保留原文,也不阻塞后续正常对话。 · 内存与历史管理 · 长对话按需渲染,关闭小窗或卸载时释放预览引用和定时器;客户端历史缓存增加数量与容量限制。 · 修复历史与设置首次加载的并发问题;已升格记录也参与小窗历史数量淘汰,并同步修改设置说明,正式会话不受影响。 · 历史保存失败会显示提示,避免误以为已保存。 · 验证与说明 · 通过完整单元、宿主集成、浏览器测试与类型检查,并增加摘要、附件恢复、重开续聊和内存释放回归测试。 · 输入容量为估算;整理摘要会产生额外模型调用,实际缓存命中率尚未在线测量。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
划词解读 划一下,说一句。把不懂的地方,就地问明白。 DSH 中的翻译、上下文解读与语音追问。 快速安装 · 语音输入 · 功能一览 · 使用与设置 DSH 插件 · v0.13.1 · MIT 01 / 划完,直接说 选中一句话,直接用语音问「它在这里是什么意思?」——问题留在选区旁,回答接着出现在小窗里。 从划词到提问,一口气完成 小窗还没打开:划选文字后启动输入法语音,选区旁会出现临时卡片,承接你说的话。结束语音、文字定稿后,默认自动发送,直接进入追问。 选中文本与语音卡片之间的真实连线,问题可直接写入选区旁的输入框 选区通过青色下划线和虚线连接到临时输入卡片。 小窗已经打开:划选新的文字,再启动输入法语音。这段文字会作为引用加入小窗,你说的话写入追问框。 在小窗里,也能直接开口 点击输入框旁的麦克风开始录音,查看实时波形与转写;点击停止完成输入,或按 Esc 取消本次录音。实时转写不可用时,会在停止后识别。 DSH 中实际运行的语音输入:小窗底部显示录音控制与波形 英文例句的解读小窗中,直接启动语音追问。 语音卡片默认开启说完直接发送和空录音时收起。在 设置 → 界面 → 语音输入 中可以分别关闭。 语音相关设置的真实截图:空录音时收起与说完直接发送 输入法联动需要 macOS 14.4+ 与支持的语音输入法(已适配豆包)。
展开完整文档(README 剩余 1 节)
划词解读

划一下,说一句。把不懂的地方,就地问明白。

DSH 中的翻译、上下文解读与语音追问。

快速安装 · 语音输入 · 功能一览 · 使用与设置

DSH 插件 · v0.13.1 · MIT

01 / 划完,直接说

选中一句话,直接用语音问「它在这里是什么意思?」——问题留在选区旁,回答接着出现在小窗里。

从划词到提问,一口气完成

小窗还没打开:划选文字后启动输入法语音,选区旁会出现临时卡片,承接你说的话。结束语音、文字定稿后,默认自动发送,直接进入追问。

选中文本与语音卡片之间的真实连线,问题可直接写入选区旁的输入框

选区通过青色下划线和虚线连接到临时输入卡片。

小窗已经打开:划选新的文字,再启动输入法语音。这段文字会作为引用加入小窗,你说的话写入追问框。

在小窗里,也能直接开口

点击输入框旁的麦克风开始录音,查看实时波形与转写;点击停止完成输入,或按 Esc 取消本次录音。实时转写不可用时,会在停止后识别。

DSH 中实际运行的语音输入:小窗底部显示录音控制与波形

英文例句的解读小窗中,直接启动语音追问。

语音卡片默认开启说完直接发送和空录音时收起。在 设置 → 界面 → 语音输入 中可以分别关闭。

语音相关设置的真实截图:空录音时收起与说完直接发送

输入法联动需要 macOS 14.4+ 与支持的语音输入法(已适配豆包)。小窗麦克风需要 DSH 启用语音识别服务。未配置语音时,文字解读与键盘追问仍可使用。

小窗麦克风提示不可用?

请检查 DSH 宿主是否启用了 @deepseek-ai/dsh-experimental-speech-to-text,以及识别模型是否已就绪。首次使用时,如果小窗显示 准备模型,点击后按提示准备;下载与识别在宿主运行。

这与输入法语音是两个独立入口:输入法联动使用输入法本身的识别能力。

02 / 先读懂,再深入

在 DSH 中选中文字,点击 解读。英文先给译文,中文按内容给解读,代码则生成注释;需要更多背景时,再点 展开详解。

选中英文例句后,真实小窗给出翻译并显示展开详解入口

选中 “The migration ran long, so we will ship on Wednesday”,先得到译文。

展开后,模型结合前后文与可用的会话背景解释术语、语气和承接关系。你可以直接在底部继续追问。

真实解读小窗中的上下文详解与后续追问

接着问「ran long 是说迁移失败了吗?」,把问题留在同一段讨论里。

03 / 把相关内容,一起带进来

小窗打开时,在主界面、小窗正文或支持的侧边栏网页预览中划选文字,点 引用,就能带着新材料继续问。一次最多加入 4 段引用,每段都可以单独移除。

真实小窗中,所选内容作为引用卡片出现在追问输入框上方

图片和文件,直接拖进来

追问时可以把图片或文件拖进小窗,也可以直接粘贴(⌘V)或用输入框左下角的 + 选择。一次最多 10 件,单件不超过 20 MB。

- 图片显示为缩略图:点一下就在当前窗口里放大预览(输入框上方的待发送图与已经发出的气泡图一致;一组图里用 ← / → 或两侧按钮左右翻,Esc / 点空白处 / 点 ✕ 关闭;⌘/中键仍可新标签打开)。文件显示为可下载的卡片。发送后仍留在消息气泡里,关掉小窗再打开也在 —— 存的是引用而不是字节,历史文件不会因为几张截图变胖。
- 拖到小窗上的文件只会进小窗,不会同时落进主会话的输入框;拖到小窗外面则照常归主会话。
- 模型可以直接读取你附带的文件(读它的只读副本),不必你复制路径过去。
- 追问时最近 2 张图片会重新带给模型,更早的图片自动降级成一行文字说明(避免请求超限);文件不占这个额度。
- 升格时这些附件会一并带进正式会话,继续在主会话里追问同一张图、同一个文件。

截图提问(⌘⇧X)

按 ⌘⇧X 框选屏幕上的任意区域,松手后可以直接提问;小窗开着时,截图会直接进入输入框的待发送附件。截图范围在 设置 → 截图 里按两种触发方式分别设置:

| 范围 | 发给模型的图 |
| 全屏 | 选区中心所在的那块屏幕 |
| 整窗 | 选区所属的整个窗口(默认:截图后弹语音卡时) |
| 选区 + 留白 | 选区向四周外扩「留白」指定的逻辑像素 |
| 仅选区 | 选区本身(默认:截图直接进输入框时) |

留白两模式共用,默认 48pt;外扩不会超出选区中心所在的那块屏。仅选区不画红框(图就是选区),其余范围会在图里用红色实线框标出问题焦点。需要 macOS 的屏幕录制权限。

不必每次从头来:

| 想做什么 | 入口 |
| 回到刚才的解读 | 右下角悬浮胶囊,或小窗里的 最近 |
| 把讨论继续做下去 | 升格,将解读与追问带入正式会话 |
| 阅读代码 | 选中代码,查看注释与原代码交替呈现的解释 |
| 用图表理解复杂问题 | 将输出偏好切为网页,模型可生成 HTML 页面 |

长对话默认显示最近 40 条消息,点击消息区顶部的 显示更早的消息 可继续往前查看。收起小窗会释放回答区域的网页预览,重开后恢复显示;完整对话、输入草稿和待发送附件仍会保留。

小窗追问按容量预算组织模型上下文,不再固定截取最近 20 条消息。预算内保留原文和图片顺序;接近上限时,将较早的完整问答分批整理为摘要,最近问答优先保持原文;最近一组也无法容纳时,会将其一并整理为摘要。可在 设置 → 模型 → 对话记忆 调整输入预算,默认 200,000 tokens;宿主能提供模型容量时还会自动收紧,并预留回答与工具空间。用量为估算,整理摘要会产生额外模型调用;摘要失败会明确报错,不静默丢弃原文。

图片与文件保存在宿主附件库,历史只存引用。图片不再按“两张/4 MiB”、文件不再按“八个”滚动淘汰,而是随上下文段一起保留或压缩。启用工具时,模型可用小窗材料工具重新取得旧图、旧文件路径或已压缩的原始消息;文件正文仍由宿主读取工具按需解析。附件丢失或格式不支持时会说明原因。引用保留选中原文;较早的小窗引用会补充附近内容,主会话引用在加入时取得一次上下文快照。

快速安装

这是 DSH 环境中的插件。请先安装 DSH、配置一个可用模型,再运行:

dsh plugin --profile web add @yfwu2020/dsh-selection-explain

安装后刷新 DSH 页面,选中一段文字,点击 解读 即可。

也可在 GitHub Releases 下载构建包,按下方说明安装。

安装 Release 构建包

将下载的 .tgz 放到当前目录,以 v0.13.1 为例:

mkdir -p ~/.dsh/plugins/dsh-selection-explain
tar -xzf yfwu2020-dsh-selection-explain-0.13.1.tgz -C ~/.dsh/plugins/dsh-selection-explain --strip-components=1
dsh plugin --profile web add ~/.dsh/plugins/dsh-selection-explain

安装完成后刷新 DSH 页面。其他版本请替换文件名中的版本号。

从源码安装 / 卸载

git clone https://github.com/yfwu2020/dsh-selection-explain.git
cd dsh-selection-explain
npm ci
npm run build
dsh plugin --profile web add .

源码构建需要 package.json 中列出的 DSH 开发依赖可用。

卸载 npm 安装的插件:

dsh plugin --profile web remove @yfwu2020/dsh-selection-explain

使用与设置

Enter 发送 · Shift+Enter 换行 · Esc 收起小窗。录音期间,第一次 Esc 只取消录音,再按一次才关闭小窗。

点击小窗顶部的 设置,修改会自动保存:

| 设置 | 可以调整什么 |
| 模型 | 跟随主会话,或为解读单独指定模型 |
| 思考强度 | 首轮、次轮与追问分别选择 关 / 低 / 高 / 最高;按模型实际能力映射 |
| 背景 | 是否附带会话消息,以及引用的上下文范围 |
| 联网 | 是否允许模型调用工具,以及允许的工具范围 |
| 界面 | 语音卡片收尾、侧边栏网页划词与悬浮胶囊 |
| 数据 | 保留多少条最近解读 |

与完整视图、最近会话共存(0.10.2)

解读小窗使用自己的浮层,显示在最近会话列表和完整视图工作面板上方,空白区域仍可点击原界面。在完整视图里,解读插件自行隐藏悬浮胶囊;返回分栏后恢复。

聊天与解读可以同时打开。与 dsh-full-view 0.1.6、dsh-recent-sessions 0.2.3 配合时,Esc 先退出最后操作的小窗;点击两窗之外后先退解读,再按一次收起聊天。此次调整需一起更新两个插件,未改变 Harness 的公共浮层或设置。

快捷键与 Esc 层级(0.10.3)

模型菜单收起后不再被 DSH 识别为弹层,避免设置等快捷键失效。官方设置等模态浮层打开时,Esc 优先交给官方浮层处理,保留解读小窗、插件设置抽屉、模型菜单和语音卡;官方浮层关闭后,再按 Esc 继续退出插件层级。

数据与使用范围

选中文字、必要的前后文,以及开启的会话背景会交给你配置的模型。可在设置中关闭会话背景或工具调用。

插件不将录音保存为音频文件,也不把音频附到会话;小窗录音由 DSH 配置的识别服务处理,是否经过云端取决于该服务。输入法语音由输入法本身处理,插件接收输入框中写入的文字。

解读历史默认保留最近 20 条,以明文存储在 ~/.dsh/selection-explain/history.json。可在 设置 → 数据 中调整,设为 0 停止保存新历史;已有历史不会因此清空。数量超过上限时,按最后更新时间淘汰最旧的小窗历史,已升格的记录也参与淘汰;升格后的正式会话不受影响。

支持 DSH 界面与可注入的侧边栏 HTML 预览。输入框、源码视图、外部站点浏览器标签页,以及部分第三方预览不触发划词(直接通过独立 URL 加载、无法注入划词桥的页面)。模型回答与联网查证仍可能出错。

开发与兼容性

依赖 DSH 的 webServer、llm 等宿主服务;具体版本范围见 package.json。

npm test
npm run typecheck
npm run build
项目结构见 架构说明,验证方式见 开发说明。

配置项见 src/settings.ts,默认值见 src/config-values.ts。

MIT License · 反馈问题
预览分享卡片长什么样 ↓yfwu2020/dsh-selection-explain
分享 · DeepSeek Harness Hub
yfwu2020/dsh-selection-explain

DSH 划词解读:选中文字浮出按钮,点击弹窗流式显示专业中英翻译 + 该文字在当前上下文中的含义详解

回到顶部