# dsh-line-select · Line-Range Selection Plugin 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 `` 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 ```sh dsh plugin --profile web add ``` Restart `dsh web` after installation. Uninstall: ```sh 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 `` | | 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 ```sh # From the DSH checkout, link its node_modules once for module resolution: # New-Item -ItemType Junction -Path node_modules -Target /node_modules node test/smoke.mjs ``` ## License MIT