DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Conv Search — DeepSeek Harness 插件(DSH Plugin)
← Plugins
C

@dsh-external/dsh-conv-search

Conv Search

dsh-conv-search(对话内文本搜索)— DeepSeek Harness 的对话内文本搜索(Ctrl+F)。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:beijingwahw/dsh-conv-search#27c863d5cecc5b37ef6c0eb0bf3512b56d07d40a
README兼容性版本

兼容性与来源证明

Conv Search 以 @dsh-external/dsh-conv-search 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/8/22

版本

0.1.0stable
2026/8/22

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 4
周下载
0
最近提交
2026/8/22
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录

相关插件

继续浏览 memory-context 分类下经过校验的插件。

Memory Plugin@openviking/dsh-memory-plugin适用于 DeepSeek Harness 的 OpenViking 记忆与上下文套件Contextdsh-context用于上下文洞察和管理的 DeepSeek Harness 插件,提供上下文仪表板和上下文命令,帮助了解上下文的构成及其演变过程。Weknora@wxg-prc-cpg/dsh-weknora适用于 DeepSeek Harness (dsh) 的 WeKnora 知识检索工具:通过自有知识库进行语义搜索、文档阅读以及 RAG/代理回答。Memsearch Dsh@zilliz/memsearch-dsh适用于 DeepSeek Harness 的 MemSearch 插件:在多个代理之间共享 Markdown 记忆,支持捕获、步骤前上下文注入、记忆召回技能和技能候选审核面板。

README

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

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.

Install

Requires Node.js ≥ 22 and pnpm (npm install -g pnpm) — dsh plugin add installs the bundle into the profile with pnpm.

One-liner

dsh plugin add beijingwahw/dsh-conv-search --profile web
dsh web   # restart the server to pick the plugin up

Common follow-ups: upgrade dsh plugin upgrade dsh-conv-search --profile web; uninstall dsh plugin remove dsh-conv-search --profile web; local-path install dsh plugin add ./dsh-conv-search --profile web.

The package declares dsh.bundle.patch (mounts the host registration row) and dsh.client (serves the browser half at /plugins/<id>/client.js). lib/ is committed, so the GitHub tarball installs without a build step.

Verify the mount:

dsh --profile web --dump-config | grep conv-search

Usage

GestureAction
Ctrl/Cmd+F (or the header search icon)Open the search bar
TypeSearch as you type (120 ms debounce)
Enter / F3 / Ctrl/Cmd+GNext match (wraps)
Shift+Enter / Shift+F3 / Ctrl/Cmd+Shift+GPrevious match (wraps)
ArrowUp / ArrowDownBrowse previous queries
Aa / ab buttonsMatch case / whole word
EscClose and clear all highlights

How it works

  • src/client/engine.ts — pure DOM helpers: text-node walk, case-insensitive range matching, CSS.highlights paint (dsh-conv-search for all matches, dsh-conv-search-active for the focused one), and scroll-into-view. No cordis, no React — unit-testable against jsdom.
  • src/client/controller.ts — the floating bar (plain DOM, so it never couples to the shell's React version), keyboard capture, debounced search passes, and the transcript MutationObserver that keeps highlights honest during streaming.
  • src/client/index.ts — the cordis client half: installs the controller through ctx.effect and registers the header action button via ctx.slots.inject('conversation.session.header.actions', ...), so the button appears and disappears with the slot declaration and plugin fiber.
  • src/index.ts — the host half is an empty registration shell; all behavior is browser-side.

Model Experience

None. The plugin only reads the rendered transcript in the browser; it touches no prompt, message, schema, stream, tool, or provider request.

Development

pnpm install
pnpm run typecheck   # strict TS, no emit
pnpm run build       # tsdown: host ESM + browser client bundle, then tsc for declarations
pnpm test            # vitest (jsdom): engine, controller, i18n

The client bundle enforces the harness purity rule: platform modules (react, cordis, the seeded client packages) stay externals, and any other @deepseek-ai/* value import fails the build.

Known Limitations and Deferred Work

  • Matching is plain-text only — no regex, no diacritic folding, no cross-node phrase matching (a phrase split across styled spans will not match).
  • Requires a browser with the CSS Custom Highlight API (Chrome/Edge 105+, Safari 17.2+, Firefox 132+). On unsupported browsers the bar still counts matches but paints no highlight.
  • The bar position is fixed (top: 64px; right: 24px); it is not draggable yet.
  • Search scope is the active conversation column only — sidebar session titles and settings pages are intentionally out of scope.

Troubleshooting

  • 'pnpm' is not recognized during dsh plugin add → install pnpm first: npm install -g pnpm.
  • EADDRINUSE ... :3080 on dsh web → a previous dsh web is still bound to the port. Stop it (Ctrl+C in its terminal; on Windows: Get-NetTCPConnection -LocalPort 3080 | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }), or start on another port with dsh web --port 3081.

License

MIT