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
  • 社區目錄頁地址在已覈實資料中未提供。
羽毛球分组比赛记分
小程序二维码

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

小夜