UI Enhancements

dsh-line-select

fengMax1997/dsh-line-select · ★ 1

fengMax1997Curated

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.

License
MIT
Added
2026-08-16
Maintenance
active
Install kind
github
Manifest details
Manifest status
Declared
Manifest path
dsh.plugin.json
Manifest checked
2026-08-19
Lifecycle scripts
None found

Static manifest checks report declarations only; they are not compatibility or security review.

安装

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

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

For install and environment setup, plus plugin development tutorials, see DSH community docs ↗

README

Source README · body: en · Read Chinese README

Table of contents
  1. Features
  2. Install
  3. How it works
  4. Security
  5. Tests
  6. License

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