Symbol-aware code intelligence from language servers — navigation, refactors, and diagnostics where text tools miss callsites.

<operations>
- Position-based: `file` + `line` + `symbol` (substring; `#N` for Nth match). `line` is 1-indexed.
- `rename` — applies by default; `apply: false` previews. Project-aware lookups ERROR without `symbol` — no silent fallback on missing/ambiguous matches.
- `code_actions` — lists by default; apply ONE with `apply: true` + `query` (title substring or index).
- `rename_file` — moves file AND rewrites all imports/references; applies by default.
- `diagnostics` — path, glob (`src/**/*.ts`), or `file: "*"` for workspace.
- `symbols` — `file` lists file symbols; `file: "*"` + `query` searches workspace.
- `reload` — restart one server (`file`) or all (`*`); `reload *` re-reads LSP config.
- `request` — raw: `query` = method, `payload` = JSON params (else auto-built).
</operations>

<timeout>
Default: whole call {{defaultTimeoutSec}}s; project-aware diagnostics wait {{defaultWaitSec}}s. `timeout` sets both for this call — raise it for a server still indexing or cold-starting, lower it to fail fast. Capped at {{maxTimeoutSec}}s.
</timeout>

<critical>
- Symbol-aware work (rename, references, definition, code actions) MUST use `lsp` whenever a server is available.
  It follows shadowing, re-exports, and cross-file usages text tools miss.
- NEVER do a cross-file rename with `ast_edit`/`sed`/hand edits when `lsp` `rename`/`rename_file` can — text renames silently drop callsites.
- Reach for `code_actions` on imports, quick-fixes, and server-known refactors before editing by hand.
</critical>
