dsh-find:在 DSH 里用 Ctrl+F 本地全文检索所有工作区与对话

前言

在 DeepSeek Harness(DSH)里开多个工作区、跑一长串对话之后,想找回某句报错、某次工具输出或某段思考链,往往只能在当前会话里翻页,或靠记忆猜是哪个工作区。浏览器自带的查找只管眼前这一页,也碰不到别的对话。下面介绍社区客户端插件 dsh-find(维护者 A-2788553793):用熟悉的 Ctrl+F(macOS 为 ⌘F)打开全局查找面板,在全部工作区、全部对话里做全文匹配,并把「思考链」与「对话文本」分栏展示;搜索在本地完成,不调用模型、不消耗 token。

这是什么

dsh-find 是 DSH 的 客户端(web)插件,通过 Cordis bundle 同时提供 Host 路由与页面 overlay UI。它在会话事件(用户消息、助手回复、工具结果等)上建索引式过滤,命中后返回带工作区名、对话标题、频道(thinking / conversation)的片段,并支持点击跳转到对应位置。插件源码托管于 GitHub,社区目录页为 skillhub.cn/plugins/A-2788553793/dsh-find。DSH 生态奉行「一切皆插件」;社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

当前 package 版本为 0.1.0,许可证 MIT,要求 Node.js ≥ 20。

核心功能

全局查找与手动触发

  1. Ctrl+F / ⌘F 打开查找面板;若页面上已有选中文字,会预填为关键词。
  2. 在输入框输入关键词后,需按 Enter 或点蓝色「查找」按钮才会开始搜索(输入过程中不会自动全库扫描,避免半截词误扫)。
  3. 对话输入框可使用 /find-text 关键词:不经过模型,直接打开面板并开始查找(由 Host 命令与 Client 长轮询桥接)。

结果展示

面板分左右两栏:

栏 内容
思考链 reasoning 块中的文字
对话文本 用户消息、助手输出、工具结果等

两栏同时显示、独立滚动;标题上显示该栏命中数。每个工作区一张卡片(工作区名 + 命中数),其下按对话分节。每条命中展示所在整段(按空行分段),过长时以命中为中心截取并加省略号;片段字数上限随窗口高度约在 200–900 字符之间。关键词以 <mark> 高亮。

可选勾选 「隐藏已归档」:不列出已归档对话的命中(默认不勾,仍会显示但排在最后)。已归档对话标题带红色「已归档」标签;界面不挂载归档会话,点击无法跳转,面板底部会提示,需先取消归档再点。

点击跳转

点击命中条目后:

  1. 切换到对应工作区/对话(uiWorkspace.openSession);
  2. 加载会话事件直至命中消息(sessions.using + ISession.loadThrough(seq));
  3. 在页面上定位可见文本节点,滚动到视口中央并脉冲高亮约 4 秒。

Host 侧健康检查:GET /dsh-find/health 返回 version: 3。搜索接口:GET /dsh-find/search。

本地执行与实现要点

  • Host(index.js)用 ctx.sessionQuery:listSessions() 遍历会话(跳过 origin === 'subagent' 的子代理会话),先 filterEvents 判命中,再 readSession 按块区分 thinking / conversation;8 路并发;客户端断开时取消任务。
  • Client(client.js)通过 fetch 调 Host 路由,UI 挂在 shell.overlay(id dsh-find-dialog),在捕获阶段拦截浏览器原生查找。
  • 全程无模型调用。

查询参数示例:

GET /dsh-find/search?q=<关键词>&maxChars=420&perSession=3&total=150
参数 默认 范围 含义
q — ≤ 200 字符 关键词(空则空结果)
maxChars 420 120–2000 每条命中片段字数上限
perSession 3 1–12 每个对话每栏最多展示命中数
total 150 1–400 每栏命中上限(超出则 truncated: true)

安装与启用

插件以 source bundle 方式装入当前 DSH profile。资料中的步骤如下。

先从 GitHub 取得源码目录(或使用已有本地副本),再执行:

plugin_manager install_bundle  <dsh-find 源码目录路径>

若修改过插件代码需要重装,须先移除再安装(重复 install_bundle 可能报 already-installed):

plugin_manager remove_bundle  dsh-find
plugin_manager install_bundle  <dsh-find 源码目录路径>

装妥或重装后刷新页面一次(Client 脚本由 bundle 提供)。安装前建议阅读仓库源码与 MIT 许可证;插件在当前 DSH 进程权限下运行,与宿主同源路由与 sessionQuery 交互,应确认其行为符合你的安全预期。

典型用法

操作 说明
Ctrl+F / ⌘F 打开查找面板,可选中文字作初始关键词
/find-text 关键词 在对话输入框发送,直接开面板并搜索
输入 → Enter 或「查找」 手动触发搜索
勾「隐藏已归档」 结果中排除已归档对话命中
点击命中 跳转并高亮(归档项仅提示)
Esc / 点遮罩 关闭面板

探活示例:

curl -s 'http://<你的 DSH 同源地址>/dsh-find/health'

适用场景与已知边界

适合:在多工作区、长对话、大量工具输出中,用固定关键词回溯某段思考链或某句回复;需要区分 reasoning 与正文时;希望零 token 成本的本地检索时。

边界(来自 README):

  • 只搜会话事件中的可见文本类内容,不含压缩摘要之外的隐藏状态。
  • {type:'tool-call'} 工具调用参数块不参与匹配,减轻命令噪音。
  • 命中定位依赖文本最终渲染在页面上;虚拟列表折叠很远时,loadThrough 后若 7 秒内仍找不到节点,则只完成跳转、不高亮。
  • 已归档对话可搜到但默认无法打开,需先取消归档。
  • 面板占用 shell.overlay 槽位,未打开时不渲染内容。

结尾

dsh-find 把桌面软件里常见的全局 Ctrl+F 搬到 DSH:跨工作区与对话的本地全文检索,思考链与对话分栏,点击即可回到上下文。安装走 plugin_manager install_bundle,用法以快捷键、/find-text 和搜索 API 参数为准。

羽毛球分组比赛记分
小程序二维码

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

小夜