Pitch
opencode parity. We have `crates/tui/src/lsp/` foundation (#136) but it isn't surfaced in the transcript yet. After every `apply_patch` / `edit_file` / `write_file`, send a `textDocument/didChange` to the LSP server and wait briefly (~300ms) for diagnostics. Render any errors / warnings inline below the patch result:
```
✓ apply_patch crates/tui/src/foo.rs
- 5 lines
⚠ rust-analyzer · 1 error · 1 warning
foo.rs:12:9 expected ;, found }
foo.rs:18:5 unused variable: x
```
The model sees these in the next turn (already in the tool result text), so it can self-correct without the user having to paste the build error.
Implementation sketch
- LSP server discovery already exists; just poll `pull_diagnostics` after each patching tool call.
- Cap diagnostic rendering at 5 most-severe entries per file.
- Setting to disable for users on slow LSP servers (`/config diagnostics_inline false`).
Acceptance
Pitch
opencode parity. We have `crates/tui/src/lsp/` foundation (#136) but it isn't surfaced in the transcript yet. After every `apply_patch` / `edit_file` / `write_file`, send a `textDocument/didChange` to the LSP server and wait briefly (~300ms) for diagnostics. Render any errors / warnings inline below the patch result:
```
✓ apply_patch crates/tui/src/foo.rs
⚠ rust-analyzer · 1 error · 1 warning
foo.rs:12:9 expected
;, found}foo.rs:18:5 unused variable:
x```
The model sees these in the next turn (already in the tool result text), so it can self-correct without the user having to paste the build error.
Implementation sketch
Acceptance