PerryLink/dsh-lsp-actions19

dsh-lsp-actions

LSP action surface for DeepSeek Harness: diagnostics, formatting, completion, code actions, symbols, signature help, inlay hints, and rename tools over language servers, plus the editor action protocol (lsp.actions.*) that makes the plugin the IDE integration backend

AI 分析

适合需要代码诊断、格式化、自动补全等IDE辅助功能的开发者。

パッケージ
dsh-lsp-actions
バージョン
0.5.1
ライセンス
Apache-2.0
最終更新
2026/09/12

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:PerryLink/dsh-lsp-actions

ドキュメント

README 全文を読む ↗

Configuration

All tunables are Schemastery Config fields (changeable from cordis.yml). An id-targeted override replaces the whole row — restate every key you need. cordis.patch.yml documents each key inline.

KeyDefaultMeaning
servers{}Named language servers; an empty table activates no servers
editor.enabledfalseServe the editor action protocol over JSON-RPC stdio (headless backend only)
editor.requestTimeoutMs60000Per-run timeout budget (ms) for the editor protocol
editor.diagnosticsCacheMaxFiles64Bounded LRU diagnostics-cache size (files)
maxDiagnostics200Diagnostics cap per result
maxCompletionItems20Completion-items cap per result
maxCodeActions50Code-actions cap per result
maxSymbols100Symbol-results cap
maxSignatures10Signature-help cap
maxInlayHints200Inlay-hints cap
maxResultChars16000Rendered-result cap (chars)
maxDocumentBytes4000000Document-read cap (bytes)
timeoutMs60000Per-call timeout, enforced by the official timeout policy

Each servers entry is an LspServerEntry: command (executable resolved on PATH at load) and extensionToLanguage (".ts"typescript) are required; optional fileGlobs, projectMarkers, args, env, initializationOptions, configuration, formattingOptions, maxMessageBytes, maxStderrBytes, killGraceMs, shutdownTimeoutMs, diagnosticsSettleMs, diagnosticsDebounceMs, and idleTimeoutMs (0 = keep the server process alive) tune the built-in stdio client.

Routing is deterministic and configuration-driven. Every file takes the first match from: (1) a server entry whose fileGlobs match the path; (2) the nearest ancestor directory — walking up to the workspace root — that holds a project config file listed in some entry's projectMarkers, matched against the entries that also map the file's extension; (3) the entry whose extensionToLanguage maps the file's extension, in config order. A workspace holding apps/node-app/{package.json,tsconfig.json,src/main.ts} and apps/deno-app/{deno.json,src/main.ts} therefore serves each main.ts from its own project's server, with no path rule to maintain and nothing to change when a project is added, renamed, or moved:

servers:
  typescript:
    command: typescript-language-server
    args: ["--stdio"]
    extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
    projectMarkers: ["package.json", "tsconfig.json"]
  deno:
    command: deno
    args: ["lsp"]
    extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
    projectMarkers: ["deno.json", "deno.jsonc"]

A project marker only decides among servers that already map the file's extension (it never widens an entry's file types); the walk never leaves the workspace root, and a project config in one directory never applies to a sibling directory. Step (1) outranks a project marker: an entry whose fileGlobs match the path still wins, so drop project-level globs when you adopt projectMarkers — a lingering **/*.ts glob keeps claiming those files. These rules govern the built-in stdio client — a mounted ctx.lsp seam provider decides its own routing.