988hj7tczd-oss/dsh-lsp-packs

Plugin插件 ⭐ 3 MIT Dev Workflow开发与代码工作流

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

Project Overview项目介绍

dsh-lsp-packs is a collection of per-language LSP configuration plugins for DeepSeek Harness, covering 12 languages: Python, Rust, Go, C/C++, Java, TypeScript/JavaScript, Ruby, PHP, Lua, Kotlin, Swift, and C#. Each language ships as a standalone Cordis plugin that reuses a shared base providing the lsp service and lsp tool, enabling goToDefinition, findReferences, goToImplementation, and hover out of the box. Use it when integrating DSH with language servers without implementing the LSP protocol yourself. Note: the plugin does not download server binaries; install them per each package's README, otherwise queries return a structured LSP_UNAVAILABLE error.

dsh-lsp-packs 是面向 DeepSeek Harness 的多语言 LSP 配置包合集,涵盖 Python、Rust、Go、C/C++、Java、TS/JS、Ruby、PHP、Lua、Kotlin、Swift、C# 共 12 种语言。每种语言作为独立 Cordis 插件包发布,复用共享底座 lsp 服务与 lsp 工具,提供 goToDefinition、findReferences、goToImplementation 与 hover 能力。适用于按语言即装即用、跳过自行实现 LSP 协议的 DSH 集成场景。注意:插件不下载语言 server 二进制,需按各包 README 单独安装,未安装时返回结构化 LSP_UNAVAILABLE 错误。

Or use CLI install (for developers)或使用命令行安装(适合开发者)

CLI Install命令行安装

dsh plugin add @dsh-lsp-packs/dsh-lsp-pyright

988hj7tczd-oss/dsh-lsp-packs 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

dsh-lsp-packs

独立安装说明 每个 dsh-lsp-<lang>/ 都是可独立安装的 DSH 插件包,依赖通过 npm registry 获取,不要求用户预先检出相邻的 dsh-src。本仓库的 pnpm-workspace.yaml 仅用于本地一次性构建和测试全部 12 个语言包。 本地开发/验证可直接执行 pnpm install && pnpm build;语言 server 二进制仍需按各包 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 / .pyipython
dsh-lsp-rust rust-analyzer .rsrust
dsh-lsp-go gopls .gogo
dsh-lsp-cpp clangd .c/.hc.cpp/.hpp/.cccpp
dsh-lsp-java jdtls .javajava
dsh-lsp-ts typescript-language-server --stdio .tstypescript.tsxtypescriptreact.jsjavascript.jsxjavascriptreact
dsh-lsp-ruby ruby-lsp --stdio .rbruby
dsh-lsp-php intelephense --stdio(可切 phpactor .phpphp
dsh-lsp-lua lua-language-server --stdio .lualua
dsh-lsp-kotlin kotlin-language-server .kt / .ktskotlin
dsh-lsp-swift sourcekit-lsp .swiftswift
dsh-lsp-csharp omnisharp --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 是第三方二进制,版权归其各自项目。

权限、失败边界与 DSH STORE 状态

  • PERMISSIONS.md:运行时读取面 / 命令面(固定 argv,非 shell)/ 写面 / 外部服务 / 失败边界 / 供应链 / 文件权限信号(无 chmod/chown、644、无 setuid/setgid)。
  • docs/store-evidence.md:一次性 Profile 安装 → 启动(工具注册清单)→ 卸载步骤、本地离线证据、待宿主补录真实运行记录说明,并逐项回应 DSH STORE 五类审查信号(仓库 canonical 匹配 / Node 声明 / 供应链 / 文件权限 / 命令权限)。
  • STORE 复检由 dsh-safe-plugin-manager 每 3 小时自动执行;本仓库已按清单契约声明(package.json 的 repository / engines.node / dsh.compatibility / dsh.permissions)。
上一个 Prev dsh-codebuddy-plugin 下一个 Next dsh-mem0