mirror of
https://github.com/hanzoai/lsp.git
synced 2026-09-30 22:52:48 +00:00
f5eedb85c1f9fc3eaf14f09debe8f5c2ff0e9d27
Two files, and neither is new policy — this is the fleet's one pipeline, imported the way ~20 other repos import it. hanzo.yml says what to gate and what to publish; .hanzo/workflows/cicd.yml is the ~10-line caller. The one thing worth reading twice is the go-test gate. It installs gopls before running the suite, at the version READ OUT OF THE DOCKERFILE, because internal/lsp/gopls_test.go skips itself when gopls is not on PATH — and that test is the acceptance test: it stands up a directory laid out as a Go module proxy, points the fetch phase at it with GOPROXY=file:// so the real `go mod download` runs with no network, and requires `locate definition` on a dependency symbol to come back external at the module coordinate. Without the install this repo would have shipped a green CI that never once ran the thing it exists to do. Reading the version from the Dockerfile rather than repeating it keeps ONE pin. Two copies are right twice and then wrong once, and the wrong once is CI certifying a language server the image does not run. No `deploy:` block. Which build runs is a reviewed hanzoai/universe change — tag plus digest — synced by cd.hanzo.ai. This daemon runs third-party language servers over tenant source behind a jail; "which binary is behind that jail" is the last thing that should move as a CI side effect. Co-authored-by: Hanzo Dev <[email protected]>
lsp
The jailed language-server daemon. It holds immutable per-(org, repo, commit) working trees, runs a language server over each one inside a jail with no network, and answers position questions about them.
The answer it exists for is a definition that leaves the repository and lands in a dependency — which a static symbol index structurally cannot give you.
POST /root {org, repo, rev, files} → {ready, cold, langs}
POST /root/warm same body, only for a held repo
POST /ask {org, repo, rev, op, path, line, character, relation}
→ the answer, or 409 {"need":"tree"}
GET /healthz liveness
GET /readyz readiness — green only once the jail proved out on this host
Everything else — the wire contract in full, the two-phase security model, the deployment, and what phase 2 is — is in LLM.md.
Description
Jailed language-server daemon: immutable per-(org,repo,commit) roots, gopls behind a seccomp jail with no network. Backs /v1/code/lsp.
192 KiB
Languages
Go
93%
Dockerfile
7%