dsh-lsp-pyright
Pyright language configuration pack for DeepSeek Harness (DSH). Static type checking and code intelligence for Python files.
中文:DSH 的 Pyright LSP「即插即用」语言包 —— 装上本包,.py / .pyi 文件即可用 lsp 工具做代码导航。
This pack is one Cordis configuration plugin: it registers a configured
@deepseek-ai/dsh-lsp-stdio instance on ctx.lsp with the server command, launch
arguments, and extension mapping for Pyright. It implements no LSP protocol —
the shared base does: @deepseek-ai/dsh-lsp (the seam) + @deepseek-ai/dsh-tool-lsp (the
model-facing lsp tool with goToDefinition / findReferences / goToImplementation /
hover). Twelve packs reuse one unchanged base.
Installing the language server (three ways)
npm install -g pyright # npm
pip install pyright # pip
pipx install pyright # pipx (isolated)
After install, pyright-langserver must be on PATH (npm/pipx put it there automatically).
⚠️ The plugin itself never downloads or installs the server binary — matching the
upstream anthropics LSP plugins, the server is an external prerequisite. The plugin only
resolves and launches it.
Supported extensions
| .py | python |
| .pyi | python |
How the pack works
- Lazy start: the server process is not started at load.
lsp-stdio launches it
lazily on the first matching query and keeps one process per workspace.
- No-server fallback: if the executable cannot be resolved, the pack still loads;
every
lsp query for these extensions fails with a structured LSP_UNAVAILABLE error
naming the command — the rest of the session is unaffected.
- Config overrides: every default below can be overridden from the composition row,
e.g. a server installed at a non-standard path:
- id: lsp-pyright
name: '@dsh-lsp-packs/dsh-lsp-pyright'
config:
command: /absolute/path/to/pyright-langserver
args:
- --stdio
extensionToLanguage:
'.xyz': custom-language-id
maxDocumentBytes: 8000000
All fields of the servers table documented in the @deepseek-ai/dsh-lsp-stdio README are
accepted (command, args, env, extensionToLanguage, initializationOptions,
configuration, byte/time bounds).
Mounting
- Mount the shared base once (the
lsp service, the lsp tool, and a
filesystem/subprocess pair for the same execution world) — ready-made snippet in
examples/base-composition.cordis.yml of the dsh-lsp-packs repo.
- Install the pack (its
cordis.yml is the dsh.bundle.patch, so the row inserts
itself):
dsh plugin add @dsh-lsp-packs/dsh-lsp-pyright # published name
dsh plugin add /path/to/dsh-lsp-packs/dsh-lsp-pyright # or a local checkout
or compose the row directly (name resolved from the installed package):
- insert:
- id: lsp-pyright
name: '@dsh-lsp-packs/dsh-lsp-pyright'
Smoke test
pnpm vitest run --dir dsh-lsp-pyright # or from the repo root: pnpm test
- Lane 1 (offline): asserts the defaults (command / args / extension table / provider id).
- Lane 2 (offline): asserts the missing-server fallback returns
LSP_UNAVAILABLE.
- Lane 3 (needs the server): runs the four
lsp operations against sample.py;
it auto-skips when pyright-langserver is not on PATH.
Pyright answers every query entirely within the opened document, so the smoke test needs no project scaffolding. The hover lane asserts the docstring (Add two numbers).
License
MIT — see LICENSE. The server binary is a third-party component with its own license.