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