DeepSeek Harness Plugin

988hj7tczd-oss/dsh-lsp-packs#dsh-lsp-pyright

Stars ★ 3 Category Development & Runtime Added 2026-09-01

Python LSP configuration plugin for DeepSeek Harness using Pyright.

Install

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:988hj7tczd-oss/dsh-lsp-packs#path:/dsh-lsp-pyright

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

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

  1. 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.
  2. 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.

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.