dsh-tool-lsp:DeepSeek Harness 的 LSP 行爲面

前言

在智能體開發中,讓模型具備 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 的順序匹配。

功能與工具

插件提供了五個工具,模型可以通過調用這些工具來執行操作。

  1. lsp_diagnostics
    用於獲取文件診斷信息,合併拉取和推送通道。
    * 寫入磁盤: 否

  2. lsp_format
    用於對整個文件或特定範圍進行格式化。
    * 寫入磁盤: 是

  3. lsp_rename
    用於執行語義重命名,服務器會根據能力決定是否跨文件重命名。
    * 寫入磁盤: 是

  4. lsp_code_action
    用於應用語言服務器願意提供的代碼修復。
    * 寫入磁盤: 是(僅在應用操作時)

  5. lsp_symbols
    用於獲取文檔大綱或工作區符號搜索。
    * 寫入磁盤: 否

參數說明

工具參數使用 1-based UTF-16 的 line 和 character,這與大多數編輯器的座標系統一致。插件內部會自動處理 0-based 線協議和 UTF-8/UTF-32 編碼的轉換。

寫入衝突處理

插件遵循 DSH 的文件系統觀察策略。如果文件在模型讀取後被其他人修改,寫入操作會拋出 LSP_WRITE_CONFLICT 錯誤,而不是靜默覆蓋。

注意事項與限制

  1. 依賴環境:插件本身不安裝語言服務器,你需要自行安裝 vtsls、rust-analyzer、biome 等工具,並將其添加到系統 PATH 中。
  2. 符號支持:biome 和 ruff 不實現 textDocument/documentSymbol 接口,因此對這兩個工具,lsp_symbols 會返回 LSP_UNSUPPORTED。
  3. 冷服務器:冷服務器(如 rust-analyzer)在索引期間可能返回空診斷。插件會進行重試,一旦重試耗盡仍無結果,將返回已有的數據。
  4. 開發與熱加載:修改插件源碼後,必須重啓 DSH 進程才能生效,市場開關無法熱加載新代碼。

總結

dsh-tool-lsp 將真實的 LSP 能力引入 DeepSeek Harness,使得智能體能夠直接利用現有的語言服務器生態。在配置好服務器並啓用插件後,模型即可獲得標準的代碼診斷、格式化和導航能力。

羽毛球分组比赛记分
小程序二维码

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

小夜