dsh-line-select:在 DSH Web 中按行选择代码并注入给 agent

前言

DSH 的扩展方式强调把 Web GUI 的能力拆成插件来补充。dsh-line-select 解决的问题也比较具体:在 DSH Web 里让 agent 修改某个文件的某段代码时,如果只给文件路径,agent 可能会读取整个文件;如果要指定“第 10 到 50 行”,又需要手工把行号或原文补进输入框。

dsh-line-select 的做法是在输入框上方提供行选区面板,把可视化的行范围转成 @path:start-end 引用,并在发送前由 Host 端展开、注入所选行原文。下面介绍它的功能、安装方式和典型用法。

这是什么

dsh-line-select 是 DeepSeek Harness Web 的行选区插件。它用于浏览工作区文件、带行号预览代码、可视化选中行范围,并把 @path:start-end 引用写入输入框,让 agent 精准修改指定行。

仓库地址:

  • GitHub:https://github.com/fengmax1997/dsh-line-select

已核实资料中给出的版本与许可信息:

  • 版本:package.json 声明 0.1.1
  • 许可:MIT

核心功能

文件树浏览

安装后,输入框上方新增「⛶ 行选区」按钮。点击后在面板内浏览当前工作区目录,隐藏文件跳过,目录优先展示。

带行号预览

点击文件后打开只读代码视图。视图为纯文本加行号,并支持深色/浅色主题自适应。

行范围选择

在代码视图中点击行号作为起点,再点击另一个行号作为终点。两个方向都可以,插件会取 min–max 作为行范围,并在视图中高亮选区。

写入输入框

确认行范围后,可以把类似 @src/app.ts:10-50 的引用追加到当前草稿。发送前,Host 端会扫描消息中的这类引用,读取行范围并注入 <workspace-selection> 结构,使 agent 无需自己读文件就能看到第 10–50 行原文。

注入结构类似:

<workspace-selection path="src/app.ts" start-line="10" end-line="50">
  <line n="10">...</line>
  <line n="11">...</line>
</workspace-selection>

整文件引用

面板底部有「选中文件」按钮,点击后把 @src/app.ts 写入草稿。这种方式用于让 agent 通过 read 工具读取整个文件,而不是把大文件内容直接灌进上下文。

手写引用

也可以不打开面板,直接在输入框输入:

  • @src/app.ts:10-50:指定行范围
  • @src/app.ts:10:单行
  • @src/app.ts:整文件

工作原理

  • Host 端:lib/index.js 提供 lineSelect Typert Remote 服务,负责列目录和带行号读文件;在 agent/pre-step 阶段扫描 @path:start-end,读取行范围并注入 <workspace-selection>
  • Client 端:lib/client.js 通过 conversation.input.dock 提供面板 UI 与选区交互,并使用 inputActions.setDraft 写入当前草稿。

安装与启用

安装命令如下。命令中的 <本目录或 tarball 路径> 是占位符,需要替换为本地插件目录或 tarball 的实际路径:

dsh plugin --profile web add <本目录或 tarball 路径>

安装后重启 dsh web

卸载命令:

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

依赖方面,package.json 声明零第三方运行时依赖;@deepseek-ai/dsh-typert-protocol@deepseek-ai/dsh-llm 作为可选 peer 依赖,由 DSH profile 提供。

典型用法

1、启动 dsh web,在输入框上方找到「⛶ 行选区」按钮。

2、打开面板,浏览工作区目录,找到目标文件,例如 src/app.ts

3、点击文件打开只读代码视图。

4、点击第 10 行行号作为起点,再点击第 50 行行号作为终点,确认选区高亮。

5、把 @src/app.ts:10-50 写入当前草稿,补充修改要求后发送。

6、如果只想让 agent 读取整个文件,点击底部「选中文件」按钮,写入 @src/app.ts 后发送。

适用场景与注意

适合在 DSH Web GUI 中需要精确指定某几行代码、避免 agent 读取整文件或重复复制行号的场景。例如让 agent 只修改一个函数体、一段配置项、一个报错函数附近的代码。

使用前注意以下几点:

  • 路径限制:所有路径经 confine() 强制限制在会话 cwd 内,拒绝绝对路径、盘符与 .. 穿越。
  • 只读行为:插件不写盘,不执行任何文件内容。
  • 内容上限:单文件不超过 1MB,超过后只读头部;预览不超过 800 行;单次注入不超过 400 行。
  • 权限边界:插件在 DSH 进程内运行,并依赖当前会话的工作区范围。安装前建议检查源码、MIT 许可证以及本机 DSH 环境。
  • 安装路径:安装命令中的路径占位符必须替换为实际本地目录或 tarball 路径;已核实资料未给出从 GitHub 地址直接安装的命令。

结尾

dsh-line-select 把“看哪几行、选哪几行、把哪几行给 agent”这几步放进了 DSH Web 的输入框流程里。对需要局部修改代码的插件工作流来说,它提供的是一个更明确的行范围引用方式,而不是把整个文件直接交给 agent。

已核实资料中提供了 GitHub 仓库地址:

  • GitHub:https://github.com/fengmax1997/dsh-line-select
  • 社区目录页地址在已核实资料中未提供。
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜