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,使得智能体能够直接利用现有的语言服务器生态。在配置好服务器并启用插件后,模型即可获得标准的代码诊断、格式化和导航能力。

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

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

小夜