omp-lsp

oh-my-pi-style language-server integration for the DeepSeek Harness (DSH).

  • Diagnostics writethrough: after every successful edit or write (DSH's built-ins or omp-edit), the touched files are synced to their language server. Fresh errors and warnings are appended to the tool result, so the agent sees what it just broke:
    The file src/a.ts has been updated successfully.
    
    LSP diagnostics after this edit (1 error, 0 warnings):
    src/a.ts:1:7 error [2322]: Type 'string' is not assignable to type 'number'. (typescript)
    
  • lsp agent tool:
Action Inputs Result
diagnostics file (path or glob) All diagnostics with counts
definition / type_definition / implementation / references file, line, symbol path:line:col: source line list
hover file, line, symbol Type/doc text
symbols file, or file="*" + query Document outline / workspace symbol search
rename file, line, symbol, new_name, apply Applies the rename across the workspace (apply=false previews)
rename_file file, new_name, apply Moves the file and updates imports when the server supports it
code_actions file, line, query, apply Lists actions; apply=true applies the first match
status / reload / capabilities — Installed/running servers, restart, server capabilities
request file, query (method), payload (JSON) Raw LSP request

symbol locates the column on the line: bare identifiers match on word boundaries, other text as a substring, and name#2 picks the 2nd occurrence.

Language servers

They're auto-detected on PATH, ~/.local/bin and the project's node_modules/.bin. There's one client per (server, project root), found from the nearest root marker, and idle servers stop after idleMinutes.

id Command Files Install
typescript typescript-language-server ts tsx js jsx mjs cjs npm i -g typescript-language-server typescript@5
pyright pyright-langserver py pyi npm i -g pyright
gopls gopls go go install golang.org/x/tools/gopls@latest
rust-analyzer rust-analyzer rs rustup component add rust-analyzer
clangd clangd c h cc cpp hpp distro package clangd
bash bash-language-server sh bash zsh npm i -g bash-language-server
json / css / html vscode-*-language-server json, css/scss/less, html npm i -g vscode-langservers-extracted
yaml yaml-language-server yaml yml npm i -g yaml-language-server

Without root access, install the npm ones into ~/.local:

npm i -g --prefix ~/.local typescript-language-server typescript@5 pyright bash-language-server yaml-language-server vscode-langservers-extracted

TypeScript 7 (the Go port) ships no tsserver.js, so keep typescript@5 for the language server. If a project has no local typescript dependency, the plugin points the server at the global install.

Installation

dsh plugin --profile web add git+https://git.rizzy.dev/DSH-Plugins/omp-lsp.git

Or go to Settings → Plugins → Install with the same URL, or ask the agent to use plugin_manager → install_bundle.

For development:

git clone https://git.rizzy.dev/DSH-Plugins/omp-lsp.git ~/dsh-plugins/omp-lsp
dsh plugin --profile web add link:$HOME/dsh-plugins/omp-lsp

Then restart DSH (systemctl --user restart dsh or re-run dsh web), and check with lsp action=status in a new session.

Configuration

Set options in config of the omp-lsp row in ~/.dsh/profiles/web/cordis.patch.yml:

- id: omp-lsp
  config:
    writethrough: true              # append diagnostics to edit/write results
    writethroughTools: [edit, write]
    minSeverity: 2                  # 1 error, 2 +warnings, 3 +info, 4 +hints
    budgetMs: 4000                  # max wait for fresh diagnostics per write
    maxDiagnostics: 25
    idleMinutes: 10
    disabled: [html]                # server ids to turn off
    servers:                        # override or add servers
      lua:
        command: lua-language-server
        args: []
        extensions: [.lua]
        roots: [.luarc.json]
        languageId: lua

Tests

npm test   # unit tests + live tests against typescript-language-server and pyright when installed

Files

File Role
index.js DSH plugin: lsp tool, tools/post-execute diagnostics writethrough, workspace-edit application through ctx.fs
lib/client.js JSON-RPC/stdio LSP client: document sync, push + pull diagnostics with freshness tracking
lib/servers.js Server catalog, PATH detection, root markers, per-root pool, idle reaping
lib/format.js Diagnostics/locations/symbols/hover formatting, TextEdit application, column lookup
S
Description
DSH plugin: oh-my-pi style LSP — diagnostics appended to every edit/write and an lsp tool (definition, references, hover, symbols, rename, code actions).
Readme
46 KiB
0 Stars 2 Watchers 0 Forks
Languages
JavaScript 100%