Skip to content

dsh-codegraph-search

Verified

dsh-codegraph-search Β· v0.6.2 Β· MIT Β· Web UI

Keyword + code-graph search tab for the dsh web GUI, docked in the built-in right sidebar

Install

dsh plugin add dsh-codegraph-search

Confirm the layer applied with dsh --profile default --dump-config β€” see the install guide.

Source

Tags

Creators

Readme

dsh-codegraph-search

Awesome DSH Plugin npm version

The Search tab in dsh's right sidebar: keyword / code graph mode switch, search filters, and the onboarding cards for both modes

A Search tab for the DeepSeek Harness (dsh) web GUI's built-in right sidebar β€” no dsh-better-sidebar required. One panel, two modes:

  • Keyword β€” search file names and contents in the current session's workspace, grouped per file with line numbers.
  • Code graph β€” query symbols by name / qualified name and expand their callers and callees.

Clicking a hit opens the file in the built-in text preview, jumping to the line.

Modes

Keyword

  • File names and content lines; per-file groups with match counts, collapsible.
  • Progressive results: the host streams each file group over NDJSON the moment it is found (POST /workspace-search/search with stream: true), so hits appear while the walk is still running and the status line counts up live. Rendering is throttled β€” the first rows show immediately, then the list is updated at most once per 250 ms β€” so a fast walk never re-renders per file, and the final list is sorted exactly like the buffered response. Code-graph queries stay a single buffered response.
  • Matched text is highlighted: the query inside file names, matched lines, and code-graph symbol names / signatures, using the same matching rules the search itself used (literal case folding, or the regex and Aa state).
  • VS Code-style filters: files to include / files to exclude (comma-separated globs, supports **, *, ?, {a,b}), Aa case toggle, .* regex toggle.
  • Type filter: quick extension chips (.ts .tsx .js .py .json .md) plus a free-form extension field.
  • Skips hidden files/dirs, .git, node_modules, .hg, .svn, dist, build, .next, target, symlinks, binary files, and files over 1 MiB.

Code graph

  • Needs the codegraph CLI on the server and a codegraph init-ed workspace (the index lives in .codegraph/).
  • Symbol results show kind, signature and location; each row lazily expands callers / callees. Missing CLI, missing index, timeout and parse failures are reported with their own message and a copyable fix command.

Usage

  • The panel scopes to the current session's workspace automatically.
  • Enter searches; results also refresh ~250 ms after a filter or mode change.
  • Esc clears the query.
  • Switching tabs no longer re-runs the search: results, scroll position and expansion state are preserved.

Requirements

  • dsh web (the built-in right sidebar, @deepseek-ai/dsh-client-ui-sidebar-right)
  • Node.js >= 22
  • codegraph CLI β€” only for the code graph mode

Install

Published on npm as dsh-codegraph-search:

dsh plugin --profile web add dsh-codegraph-search

From a local checkout instead β€” the profile then keeps it as a link: dependency, so your edits take effect on the next restart:

git clone https://github.com/Wilyte/dsh-codegraph-search.git
dsh plugin --profile web add ./dsh-codegraph-search

Either way the plugin is added to the web profile's bundle list, so restart dsh web to load it. No extra sidebar plugin is needed: the tab registers directly with dsh's built-in right sidebar, and the sidebar's guide page shows a "Code search" entry.

Configuration

All fields optional (profile patch layer, id: code-search):

- id: code-search
  config:
    maxFiles: 5000          # hard cap on files scanned per search
    maxMatches: 300         # hard cap on total content matches
    maxLineLength: 300      # hard cap on one reported line
    maxFileBytes: 1048576   # files above this skip the content scan
    codegraphBin: codegraph # CLI used by the code graph mode
    codegraphTimeoutMs: 15000
    codegraphMaxResults: 50

Every cap is reported honestly in the status line ("file scan truncated" / "matches truncated") instead of silently dropping results.

How it works

Dual-face bundle.

  • Host half (lib/index.js) registers an HTTP route on dsh's webServer (ctx.webServer.register, prefix /workspace-search) β€” POST /workspace-search/search and POST /workspace-search/graph. It deliberately does not inject connection: that service does not exist in the web host profile.
  • Client half (lib/client.js) registers a tab type on ctx.sidebarRightTabs (kind search), renders its body into the keyed sidebar.right.pane.tab seat, and contributes a guide-page entry. Copy is routed through the Client locale service (zh/en) and the stylesheet is mounted through ctx.effect, using the GUI's own design tokens.

Credits

This plugin started from dsh-workspace-search by AmmiWang β€” the original VS Code-style keyword search tab for dsh, then docked in dsh-better-sidebar. The code graph mode, streamed results and the built-in right sidebar were added on top of it. Thanks for the original work.

License

MIT