Install
Inside DeepSeek Harness, with dsh-market
dsh plugin --profile web add dshmarket
Or from the command line
dsh plugin --profile web add github:fengMax1997/dsh-line-select
Installing runs third-party code with your own permissions — it can read your files, use your credentials and reach the network. Review the source first, and pin a commit (github:owner/repo#sha) when you can.
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-50to the current draft; the Host expands that reference into an injected<workspace-selection>atagent/pre-step, so the agent sees the source lines without reading the file itself - Select file (whole-file reference): the 「选中文件」 button writes
@src/app.tsinto the draft, letting the agent read the whole file with itsreadtool (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-protocoland@deepseek-ai/dsh-llmpeer 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