71 Commits (f8d666f2ad1a39d95e566ea3468a1aa59091e677)
 

Author SHA1 Message Date
Elijah Voigt f8d666f2ad misc updates 2 months ago
Elijah Voigt 7679cfeb36 chore: update beans to completed after toil session
- claudbg-j9az: fix model column blank in sessions list
- claudbg-vqhj: '/' key focuses filter/search bar
- claudbg-8bs3: color-highlight selected agent row
- claudbg-e49f: Home/End keys for transcript navigation
- claudbg-6m2c: token count filter fields (in:/out:/tokens:)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 03caf03a72 feat(claudbg-6m2c): add in/out/tokens filter fields for token-count filtering
Add `in:<N>`, `out:<N>`, and `tokens:<N>` filter fields (with `:`, `>`, `<`
operators) to the TUI filter query language. Populate input_tokens and
output_tokens on SessionListItem from the DB sessions table, wire them into
the SessionRow trait, and update the help modal to document the new fields.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt ae81563983 feat(claudbg-e49f): add Home/End key bindings to jump to top/bottom of transcript
Home jumps to the top (scroll = 0) and End jumps to the bottom, mirroring
the existing gg/G vim-style bindings. Help modal updated to document both.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 52f33202d3 feat(claudbg-8bs3): highlight selected agent row with REVERSED style instead of '>' cursor
Replace the '>' prefix + yellow fg on the selected/viewing agent row with
Modifier::REVERSED applied to the full span, matching ratatui Table highlight
conventions and removing the need for a cursor character.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 1fd9f8c259 feat(claudbg-vqhj): '/' key focuses filter/search bar
Press '/' to immediately focus the filter input on the session-list
screen and the search input on the transcript screen, matching the
less(1) convention. Updates help modal and placeholder hint text.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 7696a5560f fix(claudbg-j9az): populate model from DB in TUI session list
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 0940c6f523 chore: ticket TODO.md items as beans, remove already-done item
- claudbg-vqhj: '/' key to focus filter/search bar
- claudbg-j9az: bug — model column always blank in sessions list
- claudbg-6m2c: token count filter fields (in:/out:/tokens: with </> ops)
- claudbg-e49f: Home/End keys to jump to top/bottom of transcript
- claudbg-8bs3: color-highlight selected agent row instead of '>' cursor

Removed "project truncates beginning" TODO item — already implemented
in truncate_project() which prepends '…' and keeps the tail.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 0bca469701 fix(claudbg-9627): scan up to 20 lines for cwd field in session discovery
The project path was missing for sessions whose first JSONL line has no
cwd field. Fix reads up to 20 non-empty lines to find any entry with cwd
(typically a system-type entry that may not be at line 1).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt f45a0dfd87 feat(claudbg-x45o): sessions list scopes to current project by default
Add --scope=project|user flag to `sessions list` (default: project).
When project scope is active, only sessions whose project_path matches
the current working directory are shown. Use --scope=user to see all.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 0c6ecf1165 feat(claudbg-e4ac): highlight active agent in sidebar when viewing its transcript
When the user is viewing a SubagentTranscript, the corresponding entry
in the sub-agents panel is now highlighted with '>' prefix regardless
of which panel has keyboard focus.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 76870fa306 feat(claudbg-mfpd): Esc/Backspace returns to session transcript from agent transcript
When on SubagentTranscript, Esc or Backspace now goes back to the parent
session's Transcript view (lazy-reloads entries) instead of jumping all
the way to the session list. Transcript → session list path unchanged.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt a6a0b9a0db feat(claudbg-6t38,claudbg-trk3): add gg/G vim-style jump navigation in transcript
gg (double-g): jump to top of transcript via pending_g chord detection.
G (Shift+G): jump to bottom of transcript.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt ae337dcf94 fix(claudbg-4gtn): clamp Space/PageDown scroll to end of transcript content
Compute total rendered lines on each page-down keypress and cap the
scroll offset so it cannot scroll past the last line.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 3b209745fc fix(claudbg-0yk4,claudbg-zniv): populate msg count and project path from DB in TUI
Query the DB cache on TUI startup to enrich SessionListItems with
message_count and fallback project_path for sessions whose JSONL
first line lacks a cwd field.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt b7c54dd463 fix(claudbg-u28r): use blue/white search highlight for light mode legibility
Also close claudbg-4g3l, claudbg-ltt0, claudbg-37cj as already implemented.
Fixes pre-existing fmt issues in agents.rs, sessions.rs, filter.rs, and TUI files.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt bb50c0c01d chore: convert TODO.md items to beans tickets
Created 10 beans covering all tracked work items:
- claudbg-x45o: sessions list --scope flag (project-scoped by default)
- claudbg-9627: sessions list missing project path bug
- claudbg-zniv: TUI missing project path bug
- claudbg-0yk4: TUI message count always 0
- claudbg-4gtn: Space/PageDown scrolls past transcript end
- claudbg-e4ac: selected agent highlights in agents widget
- claudbg-mfpd: back-navigation from agent to session transcript
- claudbg-u28r: search highlight unreadable in light mode
- claudbg-trk3: Shift+G jump to bottom of transcript
- claudbg-6t38: gg jump to top of transcript

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 3ba8cf0e07 feat(claudbg-agi7): transcript search panel with highlight and n/N navigation
- Bottom search bar (3 rows, always visible), press 't' to focus
- Case-insensitive match highlighting (yellow bg) across all spans
- Panel title shows current/total match count (e.g. "2/7")
- 'n'/'N' navigate next/previous match, wrapping around
- Enter applies search and returns focus to chat log
- Esc clears search and returns focus to chat log
- Tab cycles ChatLog → SubagentsPanel → SearchInput → ChatLog
- Help modal updated with search keybindings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt f4f341d133 feat(claudbg-nypt): Space/PageDown page down, Shift+Space/PageUp page up in TUI
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 9be62abb78 chore(claudbg-g0oh): remove cargo-nextest, use cargo test
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 96fc4d948d fix(claudbg-eej6,claudbg-80fb): fix two TUI session/agent transcript bugs
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>
2 months ago
Elijah Voigt 5bc207c455 feat(claudbg-gf58): TUI filter panel with persistent query history
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 403762400e feat(claudbg-horp): add --filter flag to sessions/agents list commands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 277e3a8667 feat(claudbg-4bms): filter query parser with AND/OR and key:value syntax
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt e0398fd5bb feat(claudbg-6gx6): TUI c key toggles color globally
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt c4646cf0e2 feat(claudbg-d8ht): color-coded transcript label prefixes in CLI
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 8d72b0e971 feat(claudbg-37cj): add --[no-]color global flag and NO_COLOR support
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 9c9f61efd1 feat(claudbg-4g3l): add --limit flag to list commands, default 10
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 970ed0895f feat(claudbg-ltt0): sessions with no subcommand defaults to list
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 7f864192e8 fix(tui): populate session list from disk on startup
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>
2 months ago
Elijah Voigt 3dd463b3ae chore(beans): close completed epics
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>
2 months ago
Elijah Voigt f80185e442 feat(tui): add sub-agents panel to transcript screen
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>
2 months ago
Elijah Voigt 0581431dd7 feat(tui): add transcript screen with stats header and chat log
Renders 4-row stats header (session ID, model, tokens, duration, tools)
above a scrollable chat log (Paragraph::scroll). Thinking blocks filtered,
tool results truncated to 200 chars. Handles scroll, Tab focus toggle,
Esc→back, q→quit dialog. Loads data lazily in event loop.

Closes claudbg-rudq

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 523bf4b89c feat(tui): add quit confirmation dialog and help modal
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>
2 months ago
Elijah Voigt 06b0c7cc57 feat(tui): add session list screen widget
Renders full-screen session list using ratatui Table with REVERSED
selection highlight. Columns: ID, Date, Project (tail-truncated), Model,
Msgs, Agents. Handles Up/k/Down/j nav, Enter→transcript, q/Esc→quit.
Wired into event loop render dispatch.

Closes claudbg-pta8

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago
Elijah Voigt 1ddf7fb4fe feat(tui): add terminal setup, event loop, and teardown
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>
2 months ago
Elijah Voigt c3721bc9ef feat(tui): add app state model and screen enum
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>
2 months ago
Elijah Voigt 3e9e6f7ced feat(tui): add ratatui + crossterm dependencies
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>
2 months ago
Elijah Voigt 0af7b50095 fix(cli): improve --include help text with valid values and example
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>
2 months ago
Elijah Voigt 68a795bacd feat(sessions): add Sub-agents count column to sessions list
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>
2 months ago
Elijah Voigt 4fd09045d0 fix(transcribe): respect --verbose for tool use input truncation
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>
2 months ago
Elijah Voigt 1455859825 fix(transcribe): show tool results by default with truncation
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>
2 months ago
Elijah Voigt dbffc151fb fix(transcribe): format tool_calls as readable list in header
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>
2 months ago
Elijah Voigt 123913aefd fix(dump): collapse consecutive identical rows in sessions dump
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>
2 months ago
Elijah Voigt d9ceb916ba fix(output): respect terminal width and truncate long project paths
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>
2 months ago
Elijah Voigt f3258ee2b5 fix(output): emit array-of-objects for JSON output
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>
2 months ago
Elijah Voigt b6ef138aae fix(models): add serde rename for durationMs field
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>
2 months ago
Elijah Voigt 01afe4d804 fix(discovery): correct subagent directory path structure
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>
2 months ago
Elijah Voigt 5bddec167b docs(CLAUDE.md): add JSONL schema notes and correct subagent path structure
- 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>
2 months ago
Elijah Voigt 66c1cf5c6e chore(beans): triage session bugs, agent discovery bug, and TUI epic
Session list & dump epic (claudbg-tci9):
- Table overflows terminal / project path truncation (claudbg-6dgc)
- JSON output is array-of-arrays not array-of-objects (claudbg-pfa5)
- --include help text missing valid values (claudbg-a532)
- Collapse consecutive identical rows in dump (claudbg-d9ev)
- Add sub-agent count column to sessions list (claudbg-xpzp)

Transcription output improvements epic (claudbg-8vpb):
- Tools header shows debug HashMap not readable list (claudbg-f4ot)
- Duration always 0ms due to durationMs/duration_ms field mismatch (claudbg-nqxz)
- Tool results hidden by default — should show with truncation (claudbg-zy1p)
- Tool use input hard-capped at 120 chars ignoring --verbose (claudbg-kg0v)

Agent discovery bug (claudbg-33n0):
- discover_agents_for_session looks in <project>/subagents/ but actual
  disk structure is <project>/<session-uuid>/subagents/

TUI epic (claudbg-i6l2) + 8 child tasks:
- ratatui/crossterm deps, app state, terminal/event loop,
  session list screen, transcript screen, sub-agents panel,
  quit dialog, help modal

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 months ago