dcdf22dac38b1650d4347c397e2d78f6e6eb2390
_ls_to_client called _inject_completions() on EVERY response with an id+result,
not just textDocument/completion responses. pop_context() defaulted to
{'type': 'unknown'} for any untracked id, which _inject_completions treats as
'inject module-name completions' — so list-shaped LS responses for
definition/references/documentSymbol/formatting/codeAction were silently
replaced or prefixed with the Bicep module catalog list instead of returning
real Bicep LangServer results.
Found via a full LSP-capability audit against production: definition,
references, documentSymbol, formatting and codeAction all incorrectly
returned module-completion items instead of real results.
Fix: pop_context() now returns None when the response id wasn't recorded as
a pending completion request, and _ls_to_client only calls
_inject_completions() when a real completion context was found — every other
response now passes through untouched.
iLSP — Internal LSP Proxy
Self-hosted Language Server Protocol proxy for LRU's internal tooling.
Runs at https://ilsp.i80.dk (Nomad/Docker, autobox.i80.dk).
Provides smart autocomplete on top of standard LSPs:
| Language | Endpoint | Extra completions |
|---|---|---|
| Bicep | wss://ilsp.i80.dk/bicep |
Internal ACR modules, versions, params |
| YAML | wss://ilsp.i80.dk/yaml |
AzDO pipeline templates, GHA reusable workflows |
| Python | wss://ilsp.i80.dk/python |
Jedi (standard) |
→ See EDITOR_SETUP.md for editor configuration and a full feature overview.
Quick start
# Check service health
curl https://ilsp.i80.dk/health
# Run smoke tests
python3 scripts/smoke_test_completions.py
# Local dev
make run # build + start + health check
make run-quick # start without rebuilding
make logs # tail container logs
make health # curl health endpoint
Updating catalogs
Catalogs are baked into the Docker image at build time — commit + push to update
production (see EDITOR_SETUP.md for the full
workflow and a note on why push_catalogs.sh / /reload don't take effect in prod).
python3 scripts/sync_pipeline_templates.py # scan AzDO + GHA template repos
python3 scripts/sync_bicep_modules.py # from DevOpsMCP repo — needs az CLI + ACR access
git add *_catalog.json && git commit -m "chore: refresh catalogs" && git push
Deploy
Push to main → Gitea Actions builds image → Nomad deploys automatically.
# Manual deploy (if CI is down)
git push
ssh autobox.i80.dk 'nomad job run /opt/nomad/jobs/ilsp.nomad'
Description
Languages
Python
91%
Shell
3.7%
Makefile
2.5%
HCL
1.5%
Dockerfile
1.3%