fix(claudbg-eej6): wrap Handle::block_on with block_in_place in TUI
load_transcript_for_session and load_transcript_for_agent called
Handle::current().block_on() from within the tokio::main async context,
causing a panic on session selection. Wrap with block_in_place() to
signal the scheduler to move other tasks off the thread before blocking.
fix(claudbg-80fb): add #[serde(rename = "sessionId")] to RawEntry.session_id
The JSONL field is camelCase ("sessionId") but serde matched only the
literal field name, so session_id always deserialized as None. This made
AgentRef.session_id default to "", and since any_str.starts_with("") is
always true, load_transcript_for_agent matched the wrong session and
found no agent, leaving sub-agent transcripts permanently empty.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
run_tui() now calls discover_sessions() before entering the event loop,
converts each SessionRef to SessionListItem (sorted most-recent-first),
and assigns to state.sessions. Failures silently yield an empty list.
Fixes claudbg-zi1d
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Mark TUI, session list & dump, and transcription output epics as
completed — all child tasks done.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Splits chat area with a 30-char right panel listing sub-agent runs.
Yellow border highlights the focused pane. Tab cycles focus; j/k
navigates agents when panel focused; Enter drills into sub-agent
transcript. Shows "No sub-agents" when list is empty.
Closes claudbg-9c8r
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Quit dialog: centered 26×5 Clear+Block overlay triggered by q/Q,
confirms with q, dismisses with Esc. Help modal: centered 32×14 overlay
triggered by ?, lists all keyboard shortcuts, dismisses with Esc.
Both modals intercept all input while open. Wired into run.rs dispatch.
Closes claudbg-1e1c
Closes claudbg-1tlk
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements run_tui() with RAII terminal guard (TerminalGuard), panic hook
for safe cleanup, and 50ms poll event loop. Placeholder renderer draws a
bordered box. Wires into stubs.rs replacing the coming-soon stub.
Closes claudbg-ut9q
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Defines Screen, Focus, AppState, SessionListItem with state transition
methods (new, enter_transcript, go_back). Reuses existing RawEntry and
AgentRef types. Includes 11 unit tests.
Closes claudbg-nq36
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds ratatui 0.29 with crossterm backend feature to Cargo.toml.
crossterm 0.28.1 is pulled in transitively via ratatui's crossterm feature.
Closes claudbg-78xt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Explicitly list 'thinking' and 'output' as valid values and show an
example invocation so users can discover options from --help.
Closes claudbg-a532
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Call discover_agents_for_session for each session and show the real
count in a new Sub-agents column. JSON and XML output updated to include
the subagents field.
Closes claudbg-xpzp
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace hardcoded 120-char cap with usize::MAX when opts.verbose is set.
Also add a trailing ellipsis indicator when content is actually truncated.
Closes claudbg-kg0v
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove the opts.include.output gate in render_entry_text so tool results
are always visible. Truncated to 200 chars by default; uncapped with
--verbose.
Closes claudbg-zy1p
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace {:?} debug format with entries sorted by count descending,
formatted as "Name×N" joined by ", " instead of raw HashMap output.
Closes claudbg-f4ot
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add collapse_dump_rows() post-processing pass that merges runs of rows
with identical type/role/content into a single row showing the seq range
as "N-M". Applies to table, JSON, and XML output uniformly.
Closes claudbg-d9ev
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace hardcoded FALLBACK_WIDTH=200 with ContentArrangement::Dynamic
so comfy-table auto-fits to the actual terminal. Truncate project paths
to the last ~40 chars with an ellipsis prefix in sessions list.
Closes claudbg-6dgc
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sessions list/dump and agents list/dump were passing Vec<Vec<String>>
directly to render_json, producing unlabeled arrays. Now each row is
mapped to a serde_json object with named keys before serializing.
Closes claudbg-pfa5
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
RawEntry.duration_ms was not decorated with #[serde(rename = "durationMs")]
so the camelCase field from JSONL was silently dropped, causing
sessions transcribe to always show Duration: 0ms.
Closes claudbg-nqxz
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Subagents live at <session-uuid>/subagents/ (a sibling directory to
the session JSONL), not at <project-dir>/subagents/. Fix both
discover_agents_for_session and discover_all_agents to use the correct
path, and update integration tests accordingly.
Closes claudbg-33n0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Document camelCase JSONL field names that need serde renames
(durationMs, sessionId, parentUuid, etc.)
- Correct subagent disk structure: subagents live in
<session-uuid>/subagents/ (a sibling directory), not
<project-dir>/subagents/ as previously documented
- Note comfy-table is already in use (not a choice)
- Add discovery path note to agents architecture section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
All 7 epics and the v0.1.0 milestone bean are now marked completed.
All 37 beans across the project have been implemented.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Set a 200-column minimum width in render_table so comfy-table never
truncates cell content in the Nix build sandbox or other non-tty
contexts; also mark Wave 7 stub beans in-progress/completed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace stub implementations with full Wave 6 agent commands: list
discovers and renders agents for a session; dump reads agent JSONL
directly (no DB); transcribe shows stats header + chat log with
include guards; --follow variant polls the file at 500ms for both
dump and transcribe. Adds 10 new unit tests; total now 99, 0 warnings.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace stub sessions commands with full implementations
- sessions list: lazy-syncs all discovered sessions, queries DB sorted most-recent-first, supports table/json/xml output and --verbose full UUID display
- sessions dump: resolves 8-char prefix via LIKE query, fetches raw JSONL from DB, renders table/json/xml with content preview (truncated at 80 chars unless --verbose)
- sessions transcribe: prints stats header then chat log; thinking/tool-result blocks gated by --include flags; json/xml output serialize structured messages
- --follow for dump and transcribe: bypasses DB, polls file with byte-seek offset at 500ms intervals
- Update agents.rs stubs to accept &GlobalOpts (Wave 6 prep)
- Update main.rs to pass &cli.global to all session and agent commands
- 89 tests pass, 0 clippy warnings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add src/output/ module with three renderers:
- table.rs: render_table() using comfy-table with dynamic column sizing
- json.rs: render_json<T: Serialize>() using serde_json pretty-print
- xml.rs: render_xml_rows() with XML-escaped headers and values
Each renderer has unit tests (17 new tests total); total test count: 79 passing, 0 clippy warnings.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Mark claudbg-uls1, claudbg-g5uv, claudbg-jupi, claudbg-76fy, claudbg-d3aj
as completed with implementation summaries.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add src/parser/discovery.rs with SessionRef, AgentRef, discover_sessions(),
discover_agents_for_session(), and discover_all_agents(). Add
src/parser/reader.rs with async read_session_file() using tokio BufReader.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>