- Home
- Plugins
- UI Enhancements
- dsh-conversation-search
dsh-conversation-search
funnysnake11111/dsh-conversation-search
DeepSeek Harness 对话内容搜索插件:在 Web UI 内搜索当前与全部历史会话的消息文本,点击结果自动切换/滚动定位到命中消息并高亮,面板内展示命中消息的前后上下文。Conversation full-text search for DeepSeek Harness: search the current and all historical sessions, click a hit to auto-navigate, scroll to and highlight the matchi
Install
dsh plugin --profile web add github:funnysnake11111/dsh-conversation-searchREADME
dsh-conversation-search
DeepSeek Harness 桌面版会话搜索插件:在聊天界面内搜索当前与全部历史会话的消息文本,点击结果自动切换会话、滚动定位到命中消息并高亮。
Conversation search plugin for DeepSeek Harness Desktop: search the current and all historical sessions, click a hit to auto-navigate, scroll to and highlight the matching message.
当前版本 0.5.12。触发方式:输入框旁工具栏的放大镜按钮(唯一入口,无快捷键)。
功能特性
- 搜索模式三态(单选 chip,覆盖不同精度需求):
- 宽松匹配:大小写不敏感、空白弹性多词 AND;
- 精确匹配(默认):默认不区分大小写、默认开启整词边界(
npm不命中npmjs,中文子串不受影响)、空白不弹性;大小写与整词边界都可改成选项(见下); - 正则匹配:对会话文本执行你输入的正则表达式(区分大小写、模式 ≤200 字符、语法错误在状态栏提示);
- 只搜真实对话消息(0.5.2 默认):默认排除 DSH 注入的上下文消息(工作区指令、记忆注入、运行环境快照、技能目录、时间戳、审批通知),命中即「你说过的 / 助手说过的」;需要连注入内容一起搜时,在面板 ⚙ 设置里勾选「包含注入的上下文」(localStorage 持久化,切换即时重搜);
- 精确匹配可调(0.5.5):⚙ 设置里新增「区分大小写(仅精确匹配)」(默认关)与「整词边界(仅精确匹配)」(默认开);两项都只作用于精确模式(宽松/正则不受影响),切换即时重搜并持久化;
- 跨会话定位(0.3.0 turn 直达):点击结果自动切换到目标会话;宿主按
(seq → 回合)映射给出命中所属回合号,client 直接点击回合轨道上对应 mark,由宿主原生loadThrough一程装载落地——远古消息单轮直达(数秒级),不再逐页翻页;视口快查零滚动命中;失败时按比例落点 → 分程 → 翻页(预算可配)→ 时间二分逐级兜底,命中行指纹+词双通道匹配并高亮 2.6 秒; - 「≈ 可能被折叠」标记:命中落在已折叠的过程区/摘要区时(定位或预判发现目标行不在可见 DOM),结果旁显示橙色「≈ 可能被折叠」徽标,以实际定位为准;
- FTS5 候选快速路径:「全部会话」范围下自动用官方 SQLite 全文索引毫秒级筛出候选会话,再对候选拿做字面精扫——字面语义不变,速度大幅提升;
- 范围切换:当前会话(默认)/ 全部会话;
- 细节:面板语言跟随宿主中/英文即时切换;状态栏回显宿主半版本号(识别陈旧宿主);浅/深主题自适应;子代理会话自动排除(无法独立打开,点击只会得到错误页)。
安装
# 方式一:从 npm 安装(推荐,DSH 桌面完全退出后运行)
dsh plugin --profile desktop add dsh-conversation-search
# 方式二:本地源码 link 安装(开发/本机使用)
git clone https://github.com/FunnySnake11111/dsh-conversation-search.git
dsh plugin --profile desktop add link:<克隆目录>
安装后完全重启 DSH 生效(宿主半只在进程启动时加载一次,只刷新页面不够——面板状态栏的版本号可用来确认宿主半是否已重载)。
使用
- 点输入框旁工具栏的放大镜按钮打开搜索面板(唯一入口,无快捷键);
- 选择范围与搜索模式(默认:当前会话 + 精确);
- 输入关键词自动搜索(320ms 防抖),↑↓ 选择、Enter 定位,或直接点击结果;
- Esc 关闭面板;单次最多返回 500 条命中(默认全部返回,超出时状态栏提示),点击结果即定位。
提示:状态栏显示扫描统计、当前模式名(非宽松时)与宿主半版本号(如
v0.5.12);面板底栏显示 client 半实时版本(如c0.5.12,刷新页面即生效);面板底栏 ⚙ 里可开关「包含注入的上下文」「区分大小写」「整词边界」与自动加载预算;结果行首的你/助手/上下文徽标标明消息来源,「全部会话」模式按会话分组显示。
工作原理
| 部分 | 说明 |
|---|---|
host 半 lib/index.js + lib/datasource.js | 0.5.0 起直读本地会话日志自建内存索引(~/.dsh/sessions/<工作区>/<任意会话目录>/session*.jsonl.zstd(v4 / v3 / 早期 session.jsonl.zstd 三种格式都解析,import-* 与裸 UUID 目录一并纳入),逐帧魔数切帧解压,mtime/size 缓存 + LRU 80 会话,激活期后台预热);sessionQuery 仅用于枚举会话与读标题;只索引 user/assistant 消息的可见文本(0.2.5/0.2.6 语义),并按 data.source.kind 区分真实对话与 DSH 注入上下文(0.5.2 默认只返回前者,includeInjected 可放开);与 turn/start 回合锚点;三态搜索(宽松无序 AND / 精确 ASCII 整词 / 正则 + 嵌套量词静态拒绝);命中带 seqFraction 与 hit.turn(seq 二分求所属回合);ctx.provide('conversationSearch') + 手动 ctx.typert.register() 注册清单 |
client 半 lib/client.js | shell.overlay slot 注册面板 + conversation.composer.dock slot 注册触发按钮;typert 贡献经 ctx.remote.$mount(描述符) 建立命名空间;面板语言跟随宿主 locale 服务动态切换 |
| 定位 | uiWorkspace.openSession(幂等)→ 等待会话行渲染 → 选取含行数最多的 [data-chat-flow] 容器与真实滚动容器(赋值回读验证)→ 视口快查(零滚动) → turn 直达(0.3.0):按 hit.turn 直接点击宿主回合轨道 mark,触发宿主原生 loadThrough 一程装载 → 比例落点单次扫描 → mark 缺失时回合轨道分程修正(≤4 程)→「加载更早」翻页(预算 15–120s 可配,默认 80s,单次 ≤15 页)→ 时间二分兜底;行匹配用指纹(去标点投影)+ 词匹配双通道;新定位自动中止旧定位 |
设计原则:纯官方 ctx API + 纯 DOM 锚点(data-chat-flow / data-chat-flow-kind),不碰 React 内部;0.5.0 起搜索数据源直读本地会话日志(只读,不改写);任何插件内失败只降级自身,绝不影响宿主启动。
已知边界
- 子代理会话(Agent Teams 成员、子代理分身)不能作为主会话在对话区打开(宿主拒绝
session/agent-busy),故不在搜索范围; - 索引为内存态(按 mtime/size 缓存):活动会话刚写入的新消息需等文件 mtime 变化后重建索引才可搜到;单会话索引文本截断 64KB/事件;
- 极早历史(超出聊天视图已加载窗口)的命中:0.3.0 起优先按回合号直达(宿主
loadThrough一程装载);回合轨道缺失该 mark 或定位仍未中时自动翻页加载;若自动加载超时,跳转会停留在估算位置(结果旁打「≈ 可能被折叠」标); - 命中数上限 500 条 / 单次扫描预算 8 秒;范围=全部会话时超出会提示已截断。
更新记录
完整版本历史(0.1.0 起每一版的修复与原因)见 CHANGELOG.md。
License
Related plugins
dsh-web (dsh-task-board)
zhu1090093659/dsh-web
dsh-web (dsh-web-all)
zhu1090093659/dsh-web
dsh-web-ui (dsh-task-board)
zhu1090093659/dsh-web-ui
dsh-web-ui (dsh-web-ui-all)
zhu1090093659/dsh-web-ui