4.9 KiB
omp-lsp
oh-my-pi-style language-server integration for the DeepSeek Harness (DSH).
- Diagnostics writethrough: after every successful
editorwrite(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) lspagent 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 |