dsh-english-search:给 DSH 会话区加一个原生化风格的顶部搜索栏

前言

用 DeepSeek Harness(DSH)处理阅读和写作时,查词、查词源是高频动作。常见做法有两个:开一个新标签页去词典网站,或者在会话里反复输入结构化提示词再自己整理结果。前者离开当前工作区,后者动作重复、结果格式不固定。

dsh-english-search 解决的就是这个问题:它在 DSH 会话区域最上方固定一个 vocabtool.com 风格的搜索栏,提供查词、词源、问答三种模式,查词由 DSH 自身的 LLM 服务完成——不访问任何外部站点、不需要数据库、不需要本地后端。下面介绍这个插件的定位、原理和用法。

这是什么

dsh-english-search 是 kami-mura 维护的一个 DSH 插件,当前版本 0.4.5,MIT 许可证。一句话定位:DSH 原生风格顶部搜索栏插件(查词/词源/问答),固定在会话区域最上方,由 DSH 自身 LLM 驱动,无外部站点依赖。

它的依赖面很窄:Host 侧用 DSH 内置的 llm / agentDefaultModel / webServer 服务,Client 侧用 slots 服务与 react 平台模块,均为 DSH 内置能力。整个插件无外部 HTTP 调用、无 Cookie、无数据库、无本地服务、无构建步骤。

核心功能

  • 在 DSH 会话区域最上方提供搜索栏,独立于消息滚动区;使用 DSH WebUI 原生设计令牌(--dsw-alias-*),与输入框卡片同表面、同描边、同圆角、同阴影,明暗主题自动跟随,宽度收窄为 520px(--es-bar-max-width
  • 三种模式:查词 / 词源 / 问答
  • 查词走 DSH 当前会话默认模型(agentDefaultModel),与对话共用模型配额
  • 支持快捷前缀:!arena 直接词源、? 直接问答
  • 结果面板与落地页同款(loading / error / 结果卡片 + 关闭按钮),内容渲染 Markdown(加粗 / 列表 / 标题 / 引用 / 行内代码)
  • 三套系统提示词与 vocabtool.com 后端一致,源自 MIT 项目 kami-mura/vocabtool-web

工作原理

插件分两端:

  • Host(lib/index.js):注册 webServer 路由 /api/plugins/english-search,经 ctx.get('llm') + ctx.get('agentDefaultModel') 调用 DSH 模型,effort=off,失败自动回退无 effort。
  • Client(lib/client.js):手写 CJS bundle,注册在官方 conversation.input.dock 插槽(id english-search)管理生命周期,再通过 React Portal 挂到会话根节点顶部;与 Host 之间是同源 fetch 调用。

这里选 conversation.input.dock 而不是 conversation.top,是因为 DSH 0.1.0-rc.6 尚不存在后者。

安装与启用

标准安装命令:

dsh plugin --profile web add dsh-english-search

也可以从 GitHub 安装:

dsh plugin --profile web add github:kami-mura/dsh-English-search

这个包是标准 dsh bundle(dsh.bundle.patch),dsh plugin add 会自动把它加入 profile 的层栈(dsh.profile.bundles),不需要手改任何配置文件。

安装后需重启 dsh web 服务进程才能生效——注意是重启服务进程,不是刷新浏览器页面。

典型用法

装好重启后,搜索栏出现在会话区域最上方。先选模式,再输入内容:

1、默认输入单词,做查词;
2、输入 !arena,直接做词源查询;
3、输入 ?lie 和 lay 的区别,直接做问答。

查询过程在结果面板中显示 loading / error 状态,完成后以结果卡片呈现,支持 Markdown 渲染,右上角有关闭按钮。

查词请求走的是当前会话默认模型,所以这部分消耗与你的对话共用同一个模型配额,这一点在评估用量时需要计入。

不安装,先动态体验

如果不打算直接部署,可以在任意 DSH 会话中通过 cordis_define 动态运行:

1、执行 cordis_defineplugin.kind: "new"idPrefix: "vocab"code.host 粘贴仓库中的 plugin.host.jscode.client 粘贴 plugin.client.js
2、执行 cordis_run 激活(Client 包首次需要批准一次)。

注意动态版与原生版显示位置不同:动态插件运行环境不提供 react-dom,搜索框会显示在输入框上方;通过 npm/GitHub 安装的原生插件才固定在会话区域最上方。想验证最终形态,还是建议走正式安装。

常见问题与注意事项

安装后看不到搜索框,按顺序排查:

1、确认插件版本 ≥ 0.4.2。运行 dsh plugin --profile web list 查看已安装版本。0.4.0 及更早版本使用 conversation.top 插槽,而 DSH 0.1.0-rc.6 不存在该插槽,搜索框不会渲染。版本不符就升级:

dsh plugin --profile web add dsh-english-search@latest

2、重启 dsh web 服务。安装、升级插件后都需要重启服务进程,刷新浏览器页面无效。

3、如果仍不显示,查看浏览器开发者控制台是否有 english-search 相关报错,并确认服务启动日志中无插件报错。

卸载命令:

dsh plugin --profile web remove dsh-english-search

另外提醒一点:插件以当前 dsh 进程的权限运行,安装前应检查源码与许可证。这个项目是 MIT 许可,代码集中在 lib/index.jslib/client.js 和动态版两个入口文件,阅读成本不高。

结尾

dsh-english-search 的价值在于把查词这类高频动作收进 DSH 会话本身:界面用原生设计令牌、视觉与输入框一致,调用走 DSH 自身模型服务,全程不依赖外部站点。对于经常在 DSH 里读英文材料的人,这是一个安装成本低、边界清晰的实用插件。

  • 社区目录页:https://www.skillhub.cn/plugins/kami-mura/dsh-English-search (社区维护的插件目录,与 DeepSeek / 幻方无官方从属关系)
  • GitHub 仓库:https://github.com/kami-mura/dsh-English-search
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜