前言¶
在 DeepSeek Harness (DSH) 的开发实践中,智能体有时需要在未获取文件内容、未定位光标的情况下,仅通过符号名称查找代码结构(如类名、函数名)。传统的 LSP 工具(如 goToDefinition)通常依赖上下文。dsh-workspace-intelligence 解决了这一需求,它为 DSH 提供了一个独立的 workspace_symbol 工具,允许 agent 利用标准 LSP 的 workspace/symbol 请求进行确定性搜索。
插件定位¶
dsh-workspace-intelligence 是一个独立的 DSH/Cordis 插件。
它专注于确定性 LSP 工作区符号搜索。插件不修改 DeepSeek Harness 核心代码,也不直接调用 ctx.lsp,而是通过公开的 ctx.fs、ctx.subprocess 和 ctx.tools 上下文与 LSP 通信。它兼容 SymbolInformation[]、WorkspaceSymbol[]、URI-only location、null 和空数组等多种返回格式,确保行为可预测。
安装与启用¶
插件默认处于禁用状态,因为 Language Server 的启动命令必须由部署方指定。
- 安装插件
使用官方安装命令添加插件到指定 Profile。
dsh plugin --profile <name> add dsh-workspace-intelligence
- 安装依赖环境
安装 Node.js(要求^22.19.0或>=24)以及至少一个支持 stdio LSP 的语言服务器(示例)。
pnpm add -g pyright typescript typescript-language-server
-
配置 Language Server
部署方需在 Profile 的cordis.patch.yml中配置语言服务器。根据操作系统执行以下步骤:-
Windows
运行pnpm root -g获取全局目录。将examples/windows/cordis.patch.yml合并到 Profile 配置中。将C:/pnpm-global-root替换为实际输出路径(注意将分隔符改为/)。保留node + JS 绝对路径,不要使用.cmdshim;ctx.subprocess不经过 shell。 -
macOS/Linux
将examples/macos-linux/cordis.patch.yml合并到 Profile 的cordis.patch.yml。模板直接从 PATH 启动语言服务器。 -
验证配置
合并完成后,检查合成结果以确保配置正确。
-
dsh --profile <name> --dump-config
使用方法¶
调用该工具时,模型只需传递一个必填参数。
{ "query": "SessionManager" }
- 参数限制:空白 query 会被拒绝。模型不能选择 provider、命令、workspace 或 timeout。
- 返回内容:结果包含符号名、可读的
kind、canonical URI、可选的range以及containerName。
配置说明¶
servers 配置项必填,且至少包含一项。Server ID 会按字典序排序,因此对象插入顺序不影响行为。
| 配置项 | 默认值 | 说明 |
|---|---|---|
command |
必填 | executable 的绝对路径或由 ctx.subprocess 解析的命令名 |
args |
[] |
直接传入的 argv,不经过 shell |
env |
{} |
子进程环境变量增量 |
initializationOptions |
null |
LSP 初始化参数 |
configuration |
null |
workspace/configuration 返回值 |
maxMessageBytes |
16000000 |
单条 LSP 消息上限 |
maxStderrBytes |
1000000 |
stderr 诊断尾部上限 |
shutdownTimeoutMs |
5000 |
优雅关闭等待时间 |
killGraceMs |
2000 |
进程树终止等待时间 |
maxResults |
100 |
merge 和去重后保留的符号数 |
maxResultChars |
16000 |
完整模型输出字符预算,最小 256 |
timeoutMs |
60000 |
交给 DSH timeout policy 的工具超时元数据 |
行为与限制¶
- 并发与排序:查询会 fan-out 到全部已配置的 server;同一 server 内串行。结果按 exact match、prefix match、其他结果、server id 和原始顺序稳定排序。
- 去重规则:去重 key 为
name + kind + URI + optional range。排序后的第一项保留。 - 错误处理:任一 provider 成功(包括空结果)即返回成功;失败和不支持的 provider 只计数。全部不支持时报
WORKSPACE_SYMBOL_UNSUPPORTED,存在失败且无成功结果时报WORKSPACE_SYMBOL_PROVIDER_FAILED。 - 取消策略:caller 取消会发送 best-effort
$/cancelRequest,并原样拒绝,不会变成 partial success。 - 进程管理:每个 canonical workspace/server 惰性复用一个进程。卸载时先移除工具,再执行 shutdown、exit 和 process-tree 终止。
- 不支持的功能:不提供 grep fallback、document symbols、call hierarchy、embedding、raw JSON-RPC 或 cursor-based LSP 操作。
结语¶
dsh-workspace-intelligence 提供了一个确定性、无上下文依赖的符号搜索能力。它是 DSH 生态中“一切皆插件”理念的体现。该插件遵循 MIT 许可证,适合需要在 Agent 层面进行代码结构查询的开发场景。