dsh-easy-lsp
Language-server (LSP) manager for DeepSeek Harness: a self-contained LSP engine, a one-click installer, and proactive diagnostic injection, all managed from a visual LSP Servers page.
English | 中文
LSP Servers page
Features
- Code intelligence:
lsp tool — goToDefinition / findReferences / goToImplementation / hover.
- On-demand diagnostics:
lsp_diagnostics tool checks a file's compile/type errors (requires a server that pushes diagnostics, e.g. pyright).
- Symbols:
lsp_symbols tool — document symbol listing (not available in the official LSP tooling).
- Semantic rename:
lsp_rename tool — renames a symbol across the whole project (cross-file references and overloads included); returns a per-file edit list with original-text anchors that you apply yourself.
- Code actions:
lsp_code_actions tool — lists the server's standard fixes (auto-import, fix type errors, quick refactors) with their edits; command-only actions are marked not executable.
- Formatting:
lsp_format tool — formats a file per the server's project rules; whole-file replacements are returned for you to rewrite with the write tool.
- Call hierarchy:
lsp_callers tool — semantic callers/callees of a symbol with exact call sites (depth 1).
- Proactive diagnostics: after the agent writes/edits code, unresolved errors are injected into the next system prompt automatically; half-finished-code noise is filtered by a stability threshold.
- Visual management: Settings → LSP Servers — add / edit / enable / delete / test (test result shows the server's supported capabilities).
- One-click installer: 37 presets (30 auto + 7 guides) covering mainstream languages; installs to user-level directories, no sudo.
- Self-contained engine: no dependency on the official
dsh-lsp / dsh-lsp-stdio / dsh-tool-lsp.
Installation
dsh plugin --profile web add dsh-easy-lsp # install
dsh plugin --profile web remove dsh-easy-lsp # uninstall
Restart dsh web, then: Settings → LSP Servers → add a language server (e.g. TypeScript / Python) → one-click install or copy the command → save and enable.
Conflict note: the lsp tool name collides with the official dsh-tool-lsp — use one or the other.
Configuration
Servers are stored in the lsp section of ~/.dsh/settings.yaml and managed in the UI (manual edits are hot-synced too):
lsp:
servers:
typescript:
enabled: true
command: typescript-language-server
args: ['--stdio']
extensionToLanguage: { '.ts': 'typescript', '.tsx': 'typescript' }
diagnostics:
autoRun: true
inject: true
stabilityRounds: 2
Notes
- typescript-language-server does not push transient diagnostics; pyright-style servers do. Code actions for such servers are collected without a diagnostics context and may be limited.
- typescript-language-server has no call hierarchy provider; pyright has no document-formatting provider — unsupported operations fail fast with a clear message.
- Rename / format / code actions / call hierarchy return edit lists or information only; the agent applies edits with the existing write/edit tools (no direct file writes).
- One extension maps to the first enabled server (conflict hinted in the UI).
- Proactive-injection cache is global per file; sessions share diagnostic state.
- Out of scope: completion, signatureHelp, inlayHint, semanticTokens, workspace/symbol, typeHierarchy, and code-graph features (use an MCP server for those).
License
MIT