Back to home@988hj7tczd-oss

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)。克隆本仓库后:

  1. 先把官方 deepseek-ai/deepseek-harness 检出到与本仓库同级的 dsh-src/ 目录,并执行其 pnpm install && pnpm run build
  2. 再按下方「安装」一节执行本仓库的 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 个)

语言包默认 serverextensionToLanguage
dsh-lsp-pyrightpyright-langserver --stdio.py / .pyipython
dsh-lsp-rustrust-analyzer.rsrust
dsh-lsp-gogopls.gogo
dsh-lsp-cppclangd.c/.hc.cpp/.hpp/.cccpp
dsh-lsp-javajdtls.javajava
dsh-lsp-tstypescript-language-server --stdio.tstypescript.tsxtypescriptreact.jsjavascript.jsxjavascriptreact
dsh-lsp-rubyruby-lsp --stdio.rbruby
dsh-lsp-phpintelephense --stdio(可切 phpactor.phpphp
dsh-lsp-lualua-language-server --stdio.lualua
dsh-lsp-kotlinkotlin-language-server.kt / .ktskotlin
dsh-lsp-swiftsourcekit-lsp.swiftswift
dsh-lsp-csharpomnisharp --stdio(可切 Roslyn/dotnet 方案).cscsharp

每个包目录(如 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:

  1. pack defaults(离线,总跑)——断言默认 command / args / 扩展表 / provider id 与 README 一致;
  2. missing server(离线,总跑)——用不可解析的 command 加载,验证查询返回 LSP_UNAVAILABLE、插件不崩溃;
  3. 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_UNAVAILABLE fallback)通过;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.mjsPACKS 表;修改后运行 pnpm generate 重新生成 12 个包(生成的文件已提交,生成器只是维护入口)。

License

MIT —— 见根 LICENSE 与各包 LICENSE。各语言 server 是第三方二进制,版权归其各自项目。