You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
claudbg/.beans/claudbg-rudq--tui-transcrip...

49 lines
2.3 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
# claudbg-rudq
title: 'TUI: transcript screen — chat log and stats header'
status: completed
type: feature
priority: normal
created_at: 2026-03-30T04:46:56Z
updated_at: 2026-03-30T16:59:42Z
parent: claudbg-i6l2
blocked_by:
- claudbg-ut9q
---
Render the full-screen transcript view for a session or sub-agent.
## Layout
```
Session: 21fae0a8 Model: claude-3-opus Tokens: in=12k out=4k Duration: 57min
Tools: Bash×12, Read×8, Write×3
────────────────────────────────────────────────────────────────────────────
[user]: Please implement the sessions list command…
[assistant]: I'll start by reading the existing code structure…
[tool: Read] {"file_path": "/path/to/file.rs"}
[tool_result]: pub struct SessionRef {\n pub session_id: String,\n pub project…
[assistant]: Here is the implementation:
```
## Implementation
- Split the frame: top block = stats header (fixed ~3 lines), middle = scrollable chat log, right panel = sub-agents (see sub-agents task).
- Use `ratatui::widgets::Paragraph` with `Wrap { trim: false }` for the header.
- Chat log: build as a `Vec<Line>` (ratatui spans/lines). Each entry becomes one or more lines. Use `Paragraph::new(text).scroll((v_offset, h_offset))` for scroll.
- Horizontal scroll for long lines: track `transcript_h_scroll` in state, increment/decrement with left/right keys.
- Vertical scroll: `transcript_scroll` in state, up/down keys.
- Thinking blocks: hidden by default (filter from `entries` before rendering).
- Tool results: truncated to ~200 chars by default.
## Data source
Load `RawEntry` list from raw JSONL via `read_session_file` when entering transcript screen. Compute `SessionStats` for the header.
## Blocked by
- app state (claudbg-nq36), event loop (claudbg-ut9q)
## Summary of Changes\n\nCreated src/tui/screens/transcript.rs with render_transcript() (4-row stats header + scrollable chat log via Paragraph::scroll) and handle_transcript_event() (Up/k/Down/j/Left/h/Right/l scroll, Tab focus toggle, Esc→back, q→quit dialog). Data loaded lazily via maybe_load_transcript() in run.rs event loop. Thinking blocks skipped, tool results truncated to 200 chars. Subagents populated for future panel. 37 new tests, 184 total passing.