dsh-lsp-packs
Out-of-the-box per-language LSP configuration packs for DeepSeek Harness: 12 Cordis plugins (one per language) reusing the shared @deepseek-ai/dsh-lsp-stdio + @deepseek-ai/dsh-tool-lsp base
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 24, 2026
- Updated
- Aug 24, 2026
Introduction
dsh-lsp-packs
[!IMPORTANT] 依赖前置:相邻
dsh-src检出(link:依赖) 本项目在开发形态下使用link:依赖指向相邻的 DeepSeek Harness 源码检出(dsh-src), 与当前仓库保持同一父目录布局(<parent>/dsh-src)。克隆本仓库后:
- 先把官方
deepseek-ai/deepseek-harness检出到与本仓库同级的dsh-src/目录,并执行其pnpm install && pnpm run build;- 再按下方「安装」一节执行本仓库的
pnpm install --offline && pnpm build与测试。 发布到 npm 的版本会尽量把link:依赖替换为 registry 真实版本;无法替换的内部包保持link:,见各包 README 说明。
按语言开箱即用的 LSP 语言配置包 插件系列(DeepSeek Harness / DSH)。
装上一个包,该语言就有原生代码导航:
lsp工具(goToDefinition/findReferences/goToImplementation/hover)无需自行实现任何 LSP 协议。每个语言一个 Cordis 配置插件,复用官方通用底座@deepseek-ai/dsh-lsp-stdio+@deepseek-ai/dsh-tool-lsp,共 12 个语言包,底座零改动、零重复。
Out-of-the-box, per-language LSP configuration packs for DeepSeek Harness: one Cordis plugin per language, all reusing the same shared base (@deepseek-ai/dsh-lsp seam + @deepseek-ai/dsh-lsp-stdio stdio host + @deepseek-ai/dsh-tool-lsp model tool).
语言包一览(12 个)
| 语言包 | 默认 server | extensionToLanguage |
|---|---|---|
dsh-lsp-pyright | pyright-langserver --stdio | .py / .pyi → python |
dsh-lsp-rust | rust-analyzer | .rs → rust |
dsh-lsp-go | gopls | .go → go |
dsh-lsp-cpp | clangd | .c/.h → c;.cpp/.hpp/.cc → cpp |
dsh-lsp-java | jdtls | .java → java |
dsh-lsp-ts | typescript-language-server --stdio | .ts→typescript、.tsx→typescriptreact、.js→javascript、.jsx→javascriptreact |
dsh-lsp-ruby | ruby-lsp --stdio | .rb → ruby |
dsh-lsp-php | intelephense --stdio(可切 phpactor) | .php → php |
dsh-lsp-lua | lua-language-server --stdio | .lua → lua |
dsh-lsp-kotlin | kotlin-language-server | .kt / .kts → kotlin |
dsh-lsp-swift | sourcekit-lsp | .swift → swift |
dsh-lsp-csharp | omnisharp --stdio(可切 Roslyn/dotnet 方案) | .cs → csharp |
每个包目录(如 dsh-lsp-pyright/)自包含:
dsh-lsp-<lang>/
├── cordis.yml # dsh.bundle patch:注册本插件行(`dsh plugin add` 时自动装配)
├── package.json # @dsh-lsp-packs/dsh-lsp-<lang>;声明 dsh.bundle.patch
├── src/index.ts # Cordis 插件:name / inject / Config / apply
├── README.md # 安装 server(按语言)、支持扩展表、用法与示例
├── tests/smoke.e2e.ts # 冒烟:离线(默认值+fallback)+ 真实 server 4 操作
└── LICENSE # MIT
快速开始
1. 装配共享底座(一次,host 层)
ctx.lsp 服务、lsp 工具、以及同一执行世界的 fs/subprocess 由部署方装配一次,所有语言包共用。就绪片段见 examples/base-composition.cordis.yml:
- insert:
- id: lsp-service
name: '@deepseek-ai/dsh-lsp'
- id: tool-lsp
name: '@deepseek-ai/dsh-tool-lsp'
# fs / subprocess 若部署已有则保留现有行,缺谁补谁
2. 装语言包
dsh plugin add @dsh-lsp-packs/dsh-lsp-pyright # 发布后的包名
# 或本地路径:
dsh plugin add /path/to/dsh-lsp-packs/dsh-lsp-pyright
包的 cordis.yml 即其 dsh.bundle.patch,安装后自动把插件行插入组合;apply() 内部为 ctx.lsp 装配一个配好该语言默认值的 dsh-lsp-stdio 实例。
3. 安装语言 server(前置条件)
插件不下载/不安装 server 二进制(与上游 anthropics LSP 插件一致,见各包 README 的安装指引,pyright 支持 npm / pip / pipx 三种方式)。server 未安装时,插件仍可加载:查询返回结构化 LSP_UNAVAILABLE 错误(包含缺失命令与原因),会话不崩溃、其余工具不受影响。
设计要点
- 配置层而不是协议层:包只声明
servers表(command / args / extensionToLanguage / 边界参数),协议与进程编排全部交给@deepseek-ai/dsh-lsp-stdio,模型侧工具由@deepseek-ai/dsh-tool-lsp提供——12 个包对底座零改动(验收标准 3)。 - 懒启动:加载时不拉起 server,首次匹配查询才 spawn(与上游行为一致)。
- Config 覆盖:
Config允许覆盖command/args/env/extensionToLanguage等全部字段(默认与 README 一致),便于用户本机路径不同的场景。 - No-server fallback:加载期解析可执行文件失败时,注册占位 provider,查询统一抛
LSP_UNAVAILABLE,保证“未装 server 时不影响其他工具”。
测试
pnpm verify # 离线结构冒烟:node 直跑,无需 node_modules(脚本内嵌 PROMPT.md 规格表,逐包核对)
pnpm test # vitest:每包 3 个 lane
每个 tests/smoke.e2e.ts 三个 lane:
- pack defaults(离线,总跑)——断言默认 command / args / 扩展表 / provider id 与 README 一致;
- missing server(离线,总跑)——用不可解析的 command 加载,验证查询返回
LSP_UNAVAILABLE、插件不崩溃; - real server(需要真 server)——对样例文件跑
lsp工具 4 个操作,断言跳转/引用结果非空;server 不在 PATH 或不可用时自动跳过(部分 server 需要预构建索引,如 sourcekit-lsp 需swift build,构建失败时仅跳过依赖索引的操作)。
本机(macOS,2026-08-23)已真实跑通:12/12 测试文件通过(42 passed / 42 skipped), 其中 clangd 4 操作全绿、sourcekit-lsp 定义/hover 通过、全部 12 包离线 lane (默认值 +
LSP_UNAVAILABLEfallback)通过;tsc对 24 个 TS 文件 0 错误。 详见 docs/verification.md。
目录结构
dsh-lsp-packs/
├── PROMPT.md # 制作指令(勿改)
├── README.md # 本文档
├── package.json / pnpm-workspace.yaml / tsconfig.base.json / vitest.config.ts
├── LICENSE # MIT(根)
├── examples/
│ └── base-composition.cordis.yml # 共享底座装配片段(一次性,host 层)
├── docs/
│ └── verification.md # 本机真实运行验证记录
├── scripts/
│ ├── generate-packs.mjs # 生成器:12 个包的唯一事实来源(npm run generate)
│ └── verify.mjs # 离线结构验证(npm run verify)
└── dsh-lsp-<lang>/ # 12 个独立语言包(每个可独立发布/安装)
生成与再生成
语言默认值集中在 scripts/generate-packs.mjs 的 PACKS 表;修改后运行 pnpm generate 重新生成 12 个包(生成的文件已提交,生成器只是维护入口)。
License
MIT —— 见根 LICENSE 与各包 LICENSE。各语言 server 是第三方二进制,版权归其各自项目。