beijingwahw/dsh-conv-search

dsh-conv-search(对话内文本搜索)— 适用于DeepSeek Harness的对话内文本搜索插件(Ctrl+F,区分大小写,全词匹配,支持流式感知)

Project Overview项目介绍

This is a native DeepSeek Harness plugin that adds in-conversation text search functionality to the DSH web UI. It works like the familiar Ctrl+F keyboard shortcut, scoped exclusively to your current active chat session. It displays a floating search bar that highlights every matching text in your chat transcript and lets you navigate between matches, without modifying any of DSH’s core source code. To install the plugin, you first need Node.js version 22 or newer and pnpm installed globally, then run the one-line install command.

This plugin solves common pain points that come with working with long chat sessions in the DeepSeek Harness web UI. Browser-native find searches the entire page, including sidebar navigation elements and the message input composer, and can’t keep up with continuous streaming model output as the model generates new text. It also doesn’t provide a clear count-based navigation interface to jump between multiple matches easily, while traditional DOM-based highlight methods can break React’s automatic DOM rendering. This plugin addresses all these issues using the modern CSS Custom Highlight API for non-intrusive highlights.

The plugin follows standard DSH plugin distribution conventions, so you can install, upgrade, or uninstall it easily via the built-in dsh plugin CLI command. It has some documented known limitations: matching is plain-text only, there is no regex support, it cannot match phrases split across styled text nodes, and the search bar is not currently draggable. It requires a modern browser that supports the CSS Custom Highlight API, including Chrome 105+, Edge 105+, Safari 17.2+, and Firefox 132+. It is released under the open-source MIT license, free to use and modify.

这是专为 DeepSeek Harness(DSH)开发的原生对话内搜索插件,为 DSH 网页端提供当前对话会话内的文本搜索功能。类似你日常使用的 Ctrl+F,它会弹出悬浮搜索框,高亮对话记录中的所有匹配项,支持在匹配项间跳转,且无需修改 DSH 任何核心代码。

解决了原生浏览器搜索无法限定在当前长对话、不支持匹配跳转、会干扰 React 渲染的问题。它支持大小写匹配、整词匹配,提供匹配总数导航,支持搜索历史回溯,适配流式输出的对话,会自动更新搜索结果,不影响滚动位置。

安装需要 Node.js 22 以上版本和 pnpm 包管理器,使用 dsh plugin add 命令即可一键安装,重启 DSH 服务后生效。插件仅在浏览器端读取渲染后的对话内容,不触及核心请求逻辑,仅支持纯文本匹配,需要支持 CSS Custom Highlight API 的现代浏览器。

Pre-install check安装前体检Compatibility · Security兼容性 · 安全性 1 warning1 项注意
  • Only 3 stars - very few users, little community feedback星标只有 3,几乎没人在用,遇到问题缺少社区反馈
DSH walks through these 9 checksDSH 会逐条核对这 9 项

Compatibility兼容性

  • DSH, Node, OS and profile requirementsDSH 版本 / Node 版本 / 操作系统 / profile 是否满足要求
  • External dependencies and runtimes (Electron / Python / Docker, ...)外部依赖与运行时(Electron / Python / Docker 等)是否齐备
  • Conflicts with installed plugins: command names, skill / tool names, ports, duplicate MCP registration与已装插件是否冲突:命令名、skill / tool 重名、端口占用、重复 MCP 注册

Security安全性

  • Repo matches the facts registered here; archived or abandoned?仓库是否与页面登记一致,是否归档或长期停更
  • Safety of preinstall / install / postinstall and install.sh / setup.ps1preinstall / install / postinstall 与 install.sh、setup.ps1 是否安全
  • curl|bash, download-then-execute, obfuscation, unrelated domains → stop immediatelycurl|bash、下载即执行、混淆代码、无关域名 → 立刻停止
  • Typosquatting or unmaintained packages among the new dependencies新增依赖里有没有 typosquatting 或无人维护的包
  • Requested permissions vs. what the feature actually needs申请了哪些权限、是否超出功能所需(filesystem / network / shell / clipboard)
  • Any sudo / admin requirement, plus uninstall and rollback是否要求 sudo / 管理员权限,以及卸载与回滚方式

Anything uncertain must be marked unknown with a note on how to confirm it. This site's signal screen is a static snapshot, not a security audit.拿不准的必须标「未知」并说明要我怎么确认。本站的信号筛查是静态快照,不能替代安全审计。

Or use CLI install (for developers)或使用命令行安装(适合开发者)

CLI Install命令行安装

dsh plugin add beijingwahw/dsh-conv-search --profile web

把 beijingwahw/dsh-conv-search 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

dsh-conv-search(对话内文本搜索)

License: MIT dsh-plugin DeepSeek Harness

English | 中文

In-conversation text search for the DeepSeek Harness web UI — the Ctrl+F you already know, scoped to the current chat session. A floating search bar highlights every match in the rendered transcript and walks between them, without touching a single line of harness core code.

Problems it solves

  • Long sessions are unsearchable: the browser's native find searches the whole page (sidebar, composer, chrome) and cannot follow a conversation that keeps streaming. This plugin searches only the active conversation scrollport and stays in sync while the model is still writing.
  • No way to jump between occurrences: native find gives no "n / total" navigation. This plugin provides Enter / Shift+Enter and prev/next buttons with wrap-around, centering each match in view.
  • Highlighting must not fight React: the transcript DOM is React-owned and re-renders continuously during streaming. Instead of wrapping matches in <mark> nodes (which would mutate React-managed text and break reconciliation), the plugin paints ranges through the CSS Custom Highlight API — an overlay that survives every re-render and needs zero DOM cleanup.

Features

  • Ctrl/Cmd+F opens the floating search bar (only when a conversation is rendered — otherwise the browser's native find stays untouched); Esc closes it from anywhere, including while the input holds focus.
  • Matching across every rendered chat node: user messages, assistant text, tool cards, and paged-in history. Two toggles mirror the browser/IDE find bar: Aa (match case) and ab (whole word) — essential for hunting error codes, function names, and API identifiers.
  • Live n / total counter with Enter (next) / Shift+Enter (previous) navigation and wrap-around; F3 / Ctrl+G work too, the browser/IDE find-bar convention.
  • Query history: ArrowUp / ArrowDown cycle through your recent queries (most recent first, deduplicated), restoring the draft you were typing when you walk back past the newest entry.
  • Zero-result queries answer back: the count turns red, the bar border follows, and the bar gives a one-shot shake (honoring prefers-reduced-motion). Repeated Enter on no results re-shakes instead of staying silent.
  • The active match is painted in a stronger color and scrolled into view automatically.
  • The header action button mirrors the open state (aria-pressed), so you always know whether search is active.
  • Streaming-aware: a MutationObserver re-runs the search (debounced) while output streams or older pages load, without stealing your scroll position. The active match is anchored by identity (text node + offset), so a paged-in older page or a streamed delta never jumps your cursor to a different occurrence.
  • Scope discipline: the composer seat and the plugin's own bar are excluded, so your draft text never produces phantom hits.
  • Follows the harness theme through --dsw-alias-* design tokens; Chinese/English UI picked from the document language.
  • Session header action button (search icon) registered through the conversation.session.header.actions slot — the additive, unload-safe composition route.

Showing the opening section of the README — the full document lives in the repository以上为 README 开头摘要,完整文档在仓库内 · View the full README on GitHub →在 GitHub 查看完整 README →

← 上一个 Prev dsh-computer-use-windows 下一个 Next dsh-task-planner →