CPLAT-9497: improve session picker and conversation navigation#22
Merged
gavin-jeong merged 64 commits intomasterfrom Apr 16, 2026
Merged
CPLAT-9497: improve session picker and conversation navigation#22gavin-jeong merged 64 commits intomasterfrom
gavin-jeong merged 64 commits intomasterfrom
Conversation
Entity Tree View: - Toggle left pane between flat conversation list and entity tree (tab when left-focused, or :tree command) - Right pane detail level cycles independently (tab when right-focused) - Tree shows Agents, Background Jobs, and Task Board sections - Compact labels: Agent: shortID [type], BG: id command, Task: #id subject - Rich preview: agents show full subagent conversation with tool calls, bg jobs show actual command output, tasks show full activity span - J key jumps from conv sub-item to matching entity in tree - ConvKeymap with configurable JumpToTree key Agent Navigation Fixes: - Parse toolUseResult.agentId from session JSONL (was reading empty top-level field) - Build toolUseToAgent map for direct agent ID lookup instead of timestamp heuristics - Fix bg task navigation: match actual TaskOutput result instead of "Command running in background" acknowledgement - TaskCreate operations now visible as sub-items (task detection decoupled from task list existence) Configurable Refresh: - All views use keymap.Session.Refresh instead of hardcoded "R" - Added refresh to Stats and Hooks views (previously had none) - Help lines use configurable key
URLs ending with `**` (markdown bold markers) were stored as-is, producing invalid URLs in the picker. Add `*` to the TrimRight character set alongside existing punctuation.
Add cron-aware session scanning and TUI views so cron jobs can be filtered, inspected, and drilled into alongside tasks, agents, and background jobs.
Stop the sessions view from reapplying a cleared filter during live refresh by clearing the stored startup search query when esc resets the active filter.
Roll up project stats by base repo so worktrees aggregate together, and show each repo's cost ratio in the stats detail view.
Update the top-level stats project summary renderer to display the rolled-up repo path so worktree paths no longer appear in the stats view.
Keep the rolled-up repo stats detail and add a separate project-path breakdown so both repo and project perspectives are available.
Add CLI picker support and TUI navigation updates for session stats, repo aggregation, URL/file actions, and conversation live-tail behavior so browsing active work is easier without losing manual context.
ku524
approved these changes
Apr 13, 2026
Add a conversation subcommand with multi-line rows, turn-scoped artifact previews, and picker interactions for opening, editing, and jumping to related conversation turns.
Bring master into the feature branch, keep the current session picker, repo stats, live-tail, and conversation picker changes, and resolve the PR merge conflicts.
Multi-line conversation rows could overflow the list height, clipping the first item. Switch from pre-computed visMax to real-time line counting so items always render within the available space.
Indent multi-line conversation body rows to the same text column as the header, rather than the far-left gutter, so wrapped lines align cleanly under the selected item's header text.
Keep assistant turns with failed tool results visible in conversation views and show an explicit error summary in previews so verbose mode exposes Bash/tool_result failures instead of collapsing them into tool-only turns.
Add tab-based mode cycling to ccx conversation and change standard conversation preview in the main TUI to show text plus artifact summaries instead of raw tool blocks.
Insert divider lines between merged preview turns so compact and standard conversation previews are easier to scan when multiple turns are shown in a single preview entry.
Switch picker truncation and padding from byte-length checks to terminal display width so CJK and other wide glyphs align correctly in the conversation picker.
Standard conversation preview renders directly from the raw entry, so it was bypassing the turn separators added to synthetic preview entries. Insert separators when multiple embedded turn headers are present so the preview is easier to scan.
Compact and standard previews were flattening all text blocks together, which removed the boundaries needed for visible separators. Render text by block chunks so divider lines actually appear between turns.
When the conversation preview is focused, show a left-side tooltip for the focused artifact block. Reuse existing diff rendering for change blocks and show concise details for files, URLs, and images.
Replace aggregate artifact counts in standard conversation preview with per-artifact preview blocks so the existing block cursor can navigate and select concrete files, URLs, images, and changes.
Drop the old count-based standard preview renderer so conversation STANDARD uses only the synthesized artifact-row path and tests reflect the active behavior.
Render per-turn artifacts in standard conversation preview as a passive list instead of selectable-looking rows, while keeping the left-side detail tooltip for focused artifact context.
Make the focused artifact tooltip image-aware using cache-only lookup for passive preview. Show an image detail card with paste ID and cached path when available, while keeping explicit open behavior unchanged.
Add a new internal/kitty package for terminal capability detection and Kitty graphics protocol image drawing. When a focused image artifact has a cached file and the terminal supports Kitty graphics, draw the image inline over the tooltip area. Falls back to the existing text card in unsupported terminals.
Add CCX_KITTY=1 env override and KITTY_WINDOW_ID/KITTY_PID fallback detection for tmux sessions where TERM_PROGRAM is lost. Wrap Kitty graphics escape sequences in tmux DCS passthrough so they reach the outer terminal correctly.
Place inline images at the tooltip's computed position instead of a fixed corner, and emit a clear command on every non-image frame so stale images disappear when focus moves away.
Query tmux server environment for TERM_PROGRAM and KITTY_WINDOW_ID so Kitty graphics support is detected automatically without requiring CCX_KITTY=1 when running inside tmux on a Kitty-compatible terminal.
Position the inline image inside the tooltip box area using the same cursor-relative Y calculation as overlayTooltip, accounting for the text header lines. The clear command on every non-image frame already handles resize and defocus cleanup.
Update README to reflect the new preview mode names (compact/standard/verbose) and add a screenshot showing Kitty inline image rendering in the conversation tooltip.
Synthesize per-turn text blocks and artifact blocks so each item is individually focusable via the block cursor. Artifacts placed below their related turn. Focused artifact blocks trigger the left tooltip with diff/file/url/image details.
Prepend the dashed separator line to the next text chunk instead of making it a separate system_tag block, so the block cursor skips over it naturally.
longlg88
approved these changes
Apr 15, 2026
Render compact and standard preview separators as single dashed lines that fill the available preview width instead of using short fixed-width rules.
Replace the Unicode dashed separator with a plain ASCII dash rule so it stays single-line under the current wrap logic and remains width-stable.
Stop embedding a fixed 200-character dashed line into the synthetic standard preview entry. Use a lightweight separator marker instead so the renderer can apply width-aware full-line separators at display time.
Switch compact and standard preview separators from '-' to '=' so the rule reads more clearly while remaining single-width and width-stable.
Handle the synthetic [separator] text block in the shared message renderer so it becomes a full-width visual rule instead of leaking into preview output literally.
Some preview text blocks carry the separator marker as a prefix before the next text chunk. Handle both exact and prefixed forms so the renderer always emits the visual rule and never shows the marker literally.
Switch the visual rule emitted for separator markers from '=' to '-' to match the preferred dashed style while keeping the renderer behavior unchanged.
Reduce separator width by one column, preserve wrapped-line indentation in text preview blocks, and switch the image indicator from the emoji icon to a subtler square glyph in both conversation rows and message detail.
Add a p-driven page menu overlay in conversation view using the same pattern as stats/config. Wire second-key dispatch for urls, changes, files, and overview, and cover the overlay flow with tests.
Complete the p-driven conversation page menu with URLs, images, changes, and files pages backed by existing artifact extraction helpers. Keep the menu as an in-view overlay and preserve existing conversation navigation.
Replace plain text artifact boards with real left-side item lists for conversation pages and add basic navigation/enter behavior for the new browser state, starting with images.
Extend the conversation artifact split browser so the images page uses Kitty inline rendering in the right-side detail pane while preserving the existing left-pane image tooltip behavior for normal conversation view.
Enable per-item actions in the conversation artifact split browser so URLs can open in the browser, files/changes can open in the editor, and images continue to open via the existing image path.
Add page-specific right-side detail rendering for URLs, files, changes, and images so the conversation artifact browser behaves more like a conventional list/detail split view.
Promote conversation page items from plain extract.Item values to a richer item model carrying timestamp, containing turn preview, related user prompt, and image paste IDs. Use that metadata in the right detail pane and overlay/action plumbing.
Tighten the artifact page actions hint and reformat the shared item context renderer so timestamp, turn preview, and related user prompt are presented in clearer sections across all artifact pages.
Remove dead text-board helpers, keep the split-browser path as the only conversation page implementation, and align tests with the real page openers/state. Stabilize the browser around enriched page items and a read-only right detail pane.
Finish the conversation artifact pages as a left-list/right-detail browser with page-aware actions, richer item context, and consistent help text. Keep the normal conversation view unchanged while letting `p` pages serve as focused artifact browsers.
Route the artifact page actions menu through shared page-aware helpers so URLs, files, changes, and images all use one coherent open/edit/copy flow backed by the richer convPageItem model.
Avoid reloading and rebuilding agent preview content in updateConvPreview when the selected agent item already matches the current preview cache. This keeps agent navigation cheaper without changing behavior.
Replace duplicated tab-driven pane/detail mode switching in handleConversationKeys with the existing setConvLeftPaneMode and setConvDetailLevel helpers so the behavior stays centralized and consistent.
Make artifact browser list truncation width-aware and align the page action hints with the actual supported image actions so the browser finishes with a more coherent UX.
Ignore local .claude workspace files so the branch stays clean while working with plans, scheduled tasks, and local settings.
Introduce an explicit overview page for the conversation artifact browser so `p` works consistently while already inside a page, `overview` becomes a real destination, and browser help text reflects page mode and resize behavior.
Remove the pseudo none page and use overview as the explicit default for the conversation artifact browser. This simplifies page state checks and makes the browser model more coherent.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
JIRA: https://sendbird.atlassian.net/browse/CPLAT-9497
Summary
Test plan