ui: two-column layout for conversation pane with marker gutter

Split conversation pane into 2-char gutter + text column. Gutter shows
● markers at turn boundaries (Cyan for user, Magenta for assistant),
aligned with the input area's ' > ' gutter.

Key changes:
- Added Marker enum (None/User/Assistant) and parallel markers vec
- Track turn boundaries via pending_marker field
- New draw_conversation_pane() with visual row computation for wrapping
- Both gutter and text scroll synchronously by visual line offset

This fixes the wrapping alignment issue where continuation lines
aligned under markers instead of under the text.
This commit is contained in:
Kent Overstreet 2026-03-21 19:15:13 -04:00
parent 78b22d6cae
commit acc878b9a4
4 changed files with 254 additions and 201 deletions

15
Cargo.lock generated
View file

@ -2804,6 +2804,7 @@ dependencies = [
"tiktoken-rs",
"tokio",
"tui-markdown",
"tui-textarea-2",
"unicode-width",
"walkdir",
]
@ -4601,6 +4602,20 @@ dependencies = [
"tracing",
]
[[package]]
name = "tui-textarea-2"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74a31ca0965e3ff6a7ac5ecb02b20a88b4f68ebf138d8ae438e8510b27a1f00f"
dependencies = [
"crossterm 0.29.0",
"portable-atomic",
"ratatui-core",
"ratatui-widgets",
"unicode-segmentation",
"unicode-width",
]
[[package]]
name = "typenum"
version = "1.19.0"