前言¶
在智能體開發中,讓模型具備 IDE 級別的代碼理解能力通常需要調用語言服務器協議(LSP)。DeepSeek Harness (DSH) 原生並未提供直接操作 LSP 的能力。dsh-tool-lsp 插件填補了這一空白,它將真實的語言服務器診斷、格式化、重命名、代碼操作和符號導航暴露爲五個可調用的工具。
插件簡介¶
dsh-tool-lsp 是一個 LSP 操作面插件,隸屬於 DeepSeek Harness 客戶端。它允許模型直接調用語言服務器提供的功能。該插件由 Jaylor-Wang 維護,遵循 MIT 許可證。
安裝與啓用¶
插件通過 npm 包管理,安裝命令如下:
dsh plugin --profile web add dsh-tool-lsp
安裝完成後,插件處於默認關閉狀態。你需要進入 dshmarket 並手動切換開關才能啓用。需要注意的是,插件的啓用狀態不持久化,重啓 DSH 進程後需要重新開啓。
配置¶
語言服務器的配置不包含在插件包內,而是位於用戶配置的 patch 層,路徑爲 $DSH_HOME/profiles/<name>/cordis.patch.yml。
配置文件的結構包含一個 servers 表和一個控制開關行。以下是配置一個 TypeScript 服務器和 Rust 服務器的示例:
- id: lsp
config:
servers:
vtsls:
command: vtsls
args: ["--stdio"]
extensionToLanguage:
".ts": typescript
".tsx": typescriptreact
".js": javascript
".jsx": javascriptreact
projectMarkers: ["package.json", "tsconfig.json"]
configuration:
typescript:
preferences:
includePackageJsonAutoImports: "on"
rust:
command: rust-analyzer
extensionToLanguage:
".rs": rust
projectMarkers: ["Cargo.toml"]
biome:
command: biome
args: ["lsp-proxy"]
extensionToLanguage:
".json": json
".css": css
projectMarkers: ["biome.json"]
# 開關需要單獨一行,合併會導致市場無法切換
- id: lsp
disabled: true
配置中關鍵的字段包括 command(服務器可執行文件名)、extensionToLanguage(文件擴展名到語言 ID 的映射)以及 projectMarkers(用於區分項目的標記文件)。路由邏輯按照 fileGlobs > projectMarkers > extensionToLanguage 的順序匹配。
功能與工具¶
插件提供了五個工具,模型可以通過調用這些工具來執行操作。
-
lsp_diagnostics
用於獲取文件診斷信息,合併拉取和推送通道。
* 寫入磁盤: 否 -
lsp_format
用於對整個文件或特定範圍進行格式化。
* 寫入磁盤: 是 -
lsp_rename
用於執行語義重命名,服務器會根據能力決定是否跨文件重命名。
* 寫入磁盤: 是 -
lsp_code_action
用於應用語言服務器願意提供的代碼修復。
* 寫入磁盤: 是(僅在應用操作時) -
lsp_symbols
用於獲取文檔大綱或工作區符號搜索。
* 寫入磁盤: 否
參數說明¶
工具參數使用 1-based UTF-16 的 line 和 character,這與大多數編輯器的座標系統一致。插件內部會自動處理 0-based 線協議和 UTF-8/UTF-32 編碼的轉換。
寫入衝突處理¶
插件遵循 DSH 的文件系統觀察策略。如果文件在模型讀取後被其他人修改,寫入操作會拋出 LSP_WRITE_CONFLICT 錯誤,而不是靜默覆蓋。
注意事項與限制¶
- 依賴環境:插件本身不安裝語言服務器,你需要自行安裝
vtsls、rust-analyzer、biome等工具,並將其添加到系統 PATH 中。 - 符號支持:
biome和ruff不實現textDocument/documentSymbol接口,因此對這兩個工具,lsp_symbols會返回LSP_UNSUPPORTED。 - 冷服務器:冷服務器(如
rust-analyzer)在索引期間可能返回空診斷。插件會進行重試,一旦重試耗盡仍無結果,將返回已有的數據。 - 開發與熱加載:修改插件源碼後,必須重啓 DSH 進程才能生效,市場開關無法熱加載新代碼。
總結¶
dsh-tool-lsp 將真實的 LSP 能力引入 DeepSeek Harness,使得智能體能夠直接利用現有的語言服務器生態。在配置好服務器並啓用插件後,模型即可獲得標準的代碼診斷、格式化和導航能力。