DeepSeek Harness Plugin

fengMax1997/dsh-line-select

Stars ★ 0 Category UI Enhancements Added 2026-08-15

Line-range selection: browse workspace files, preview code with line numbers, visually select a line range, and write a `@path:start-end` reference into the composer; the agent receives the exact selected lines on send.

Install

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:fengMax1997/dsh-line-select

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).

README

A DeepSeek Harness Web GUI plugin: browse workspace files, preview code with line numbers, visually select a line range, and write a @path:start-end reference into the composer — when the message is sent, the agent automatically receives the exact selected lines and can modify precisely that range (e.g. lines 10–50).

Features

  • File-tree browser: a 「⛶ 行选区」 button above the composer opens a panel that browses the workspace directory (dot-files skipped, directories first)
  • Numbered preview: click a file to open a read-only view with line numbers (auto light/dark theme)
  • Line-range selection: click a line number to set the start, click again to set the end (either order; range only expands), the selection is highlighted
  • Write to composer: one click appends @src/app.ts:10-50 to the current draft; the Host expands that reference into an injected <workspace-selection> at agent/pre-step, so the agent sees the source lines without reading the file itself
  • Select file (whole-file reference): the 「选中文件」 button writes @src/app.ts into the draft, letting the agent read the whole file with its read tool (without stuffing large contents into context)
  • Hand-written references work too: type @src/app.ts:10-50, @src/app.ts:10 (single line), or @src/app.ts (whole file) directly — spaces in file names are supported (e.g. @新建 文本文档.md:3-8)

Install

dsh plugin --profile web add <this directory or tarball path>

Restart dsh web after installation.

Uninstall:

dsh plugin --profile web remove dsh-line-select

How it works

Layer Description
Host (lib/index.js) lineSelect Typert Remote service (strict manifest): list lists a directory, read reads a file with line numbers; agent/pre-step scans @path:start-end tokens in user messages, reads the range, and injects <workspace-selection path="…" start-line="…" end-line="…"><line n="…">…</line></workspace-selection>
Client (lib/client.js) conversation.input.dock entry: panel UI + selection interaction; writes the draft through the official inputActions.setDraft seam

Security

  • Every path is confined to the session cwd (absolute paths, drive letters, and .. traversal are rejected)
  • Read-only: never writes to disk, never executes file contents
  • Limits: 1 MB per file (head-only beyond that), 800 preview lines, 400 injected lines per reference
  • Zero third-party runtime dependencies (only @deepseek-ai/dsh-typert-protocol and @deepseek-ai/dsh-llm peer deps, provided by the DSH profile)

Tests

# From the DSH checkout, link its node_modules once for module resolution:
#   New-Item -ItemType Junction -Path node_modules -Target <dsh checkout>/node_modules
node test/smoke.mjs

License

MIT

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →