DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Tool Lsp — DSH Plugin for DeepSeek Harness
← Plugins
T

dsh-tool-lsp

Tool Lsp

LSP action surface for DeepSeek Harness: diagnostics, formatting, rename, code actions and symbols over real language servers. Hot-mountable from dshmarket.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:Jaylor-Wang/dsh-tool-lsp#4ff6c3150b8f84608e9da518c5f6c382a4ad032c
READMECompatibilityVersions

Compatibility and provenance

Tool Lsp is published as dsh-tool-lsp and currently resolves to version 0.1.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
github
Registry updated
9/18/2026

Versions

0.1.0stable
9/18/2026

Related plugins

Loading related plugins…

Latest
0.1.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
any
License
MIT
Source
github
GitHub
★ 1
Weekly downloads
0
Last push
9/18/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

Related plugins

More verified plugins in developer-tools.

Web App@deepseek-ai/dsh-web-appThe dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)Sdk Minimal@deepseek-ai/dsh-sdk-minimalThe standalone minimal SDK profile bundle: JSON-RPC, one DeepSeek adapter, persistent shell, and JSONL sessionsSdk App@deepseek-ai/dsh-sdk-appThe dsh SDK profile bundle: stdio JSON-RPC serving and process lifecycle over dsh-baseSubagent Codex@deepseek-ai/dsh-subagent-codexOne-shot Codex subagent provider over the official app-server protocol

README

dsh-tool-lsp

English | 中文

An LSP tool surface for DeepSeek Harness: real language-server diagnostics, formatting, rename, code actions and symbol navigation, exposed as five tools the model can call directly.

Tools

ToolWhat it doesWrites to disk
lsp_diagnosticsFile diagnostics, merging the pull and push channelsno
lsp_formatWhole-file or range formattingyes
lsp_renameSemantic rename, across files when the server says soyes
lsp_code_actionFixes the language server is willing to applyyes (when an action is applied)
lsp_symbolsDocument outline / workspace symbol searchno

Writes go through the Harness filesystem observation policy: a file changed by someone else since this call read it fails with LSP_WRITE_CONFLICT rather than being silently overwritten.

Install

dsh plugin --profile web add dsh-tool-lsp

Enable it from dshmarket. The plugin is off by default — click the switch when you want it, and it takes effect immediately with no restart. The enabled state does not survive a restart.

Configuration

The language-server table lives in the user profile's patch layer ($DSH_HOME/profiles/<name>/cordis.patch.yml), never in the plugin package: the package's own cordis.patch.yml has to stay plain insert rows, or dshmarket cannot hot-mount or hot-unmount this plugin.

- id: lsp
  config:
    servers:
      vtsls:
        command: vtsls
        args: ["--stdio"]
        extensionToLanguage:
          ".ts": typescript
          ".tsx": typescriptreact
          ".js": javascript
          ".jsx": javascriptreact
        projectMarkers: ["package.json", "tsconfig.json"]
        configuration:                 # the answer to workspace/configuration
          typescript:
            preferences:
              includePackageJsonAutoImports: "on"

      rust:
        command: rust-analyzer
        extensionToLanguage:
          ".rs": rust
        projectMarkers: ["Cargo.toml"]

      biome:
        command: biome
        args: ["lsp-proxy"]
        extensionToLanguage:
          ".json": json
          ".css": css
        projectMarkers: ["biome.json"]

# The switch needs its own row: same-id rows merge key by key, and folding them
# into one row breaks the market's toggle
- id: lsp
  disabled: true

Server entry fields

FieldRequiredDefaultMeaning
command✅—Executable name, resolved on PATH at mount; a typo fails there, not on first call
extensionToLanguage✅—Extension → LSP language id
fileGlobs[]Path globs, highest routing priority
projectMarkers[]Project file names, used to split one extension across servers
args[]Launch arguments
env{}Extra environment entries
initializationOptionsnullinitializationOptions sent with initialize
configurationnullAnswer to workspace/configuration, resolved per requested section
formattingOptionsnullOverrides the global formatting options (tabSize / insertSpaces)

Routing

Matched in order, first hit wins:

  1. fileGlobs
  2. projectMarkers — the marker file in the file's nearest ancestor; only chooses among entries that already map the extension
  3. extensionToLanguage — first match in configuration order

Top-level options

maxDiagnostics (200), maxSymbols (100), maxCodeActions (50), maxResultChars (16000), maxDiffLines (60), maxDocumentBytes (8 MiB), timeoutMs (60000).

Positions

Tool arguments take 1-based UTF-16 line / character, matching editors. The 0-based wire form and the utf-8 / utf-32 encodings some servers negotiate are converted internally — the model never has to think about it.

Requirements

The language servers themselves must be on PATH; this plugin does not install them. vtsls, biome, rust-analyzer, ty, ruff, or any other LSP server.

Known limitations

  • biome and ruff do not implement textDocument/documentSymbol, so lsp_symbols returns LSP_UNSUPPORTED for them. They serve diagnostics and formatting only.
  • A cold server (rust-analyzer is the usual example) may answer a first diagnostic pull with nothing at all while it indexes. The plugin retries with backoff and, once out of attempts, reports what it has.

Development

npm test                 # 121 unit tests, including protocol coverage over a fake server
npm run verify:servers   # every server configured in the patch layer, over real requests

verify:servers reads the servers: table out of the profile patch, starts each real server, and issues one request per advertised capability. Usage: node test/verify-servers.mjs [profileDir].

Restart the process after changing plugin source. The market switch changes whether the plugin is mounted, immediately — but it does not load new code from disk into a running process (ESM module cache, confirmed by measurement).

License

MIT