前言¶
在 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。
核心功能¶
全局查找与手动触发¶
- Ctrl+F / ⌘F 打开查找面板;若页面上已有选中文字,会预填为关键词。
- 在输入框输入关键词后,需按 Enter 或点蓝色「查找」按钮才会开始搜索(输入过程中不会自动全库扫描,避免半截词误扫)。
- 对话输入框可使用
/find-text 关键词:不经过模型,直接打开面板并开始查找(由 Host 命令与 Client 长轮询桥接)。
结果展示¶
面板分左右两栏:
| 栏 | 内容 |
|---|---|
| 思考链 | reasoning 块中的文字 |
| 对话文本 | 用户消息、助手输出、工具结果等 |
两栏同时显示、独立滚动;标题上显示该栏命中数。每个工作区一张卡片(工作区名 + 命中数),其下按对话分节。每条命中展示所在整段(按空行分段),过长时以命中为中心截取并加省略号;片段字数上限随窗口高度约在 200–900 字符之间。关键词以 <mark> 高亮。
可选勾选 「隐藏已归档」:不列出已归档对话的命中(默认不勾,仍会显示但排在最后)。已归档对话标题带红色「已归档」标签;界面不挂载归档会话,点击无法跳转,面板底部会提示,需先取消归档再点。
点击跳转¶
点击命中条目后:
- 切换到对应工作区/对话(
uiWorkspace.openSession); - 加载会话事件直至命中消息(
sessions.using+ISession.loadThrough(seq)); - 在页面上定位可见文本节点,滚动到视口中央并脉冲高亮约 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(iddsh-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 参数为准。