Skip to content

feat: add interactive TUI dashboard (cjules dash) for #6#16

Closed
hahwul wants to merge 2 commits into
mainfrom
feat/dash-tui
Closed

feat: add interactive TUI dashboard (cjules dash) for #6#16
hahwul wants to merge 2 commits into
mainfrom
feat/dash-tui

Conversation

@hahwul

@hahwul hahwul commented Jun 6, 2026

Copy link
Copy Markdown
Owner

Implements the interactive TUI dashboard requested in #6.

Features

  • Command: cjules dash (also cjules dashboard)
  • Split view: scrollable/filterable session list (left) + live activity logs for selected session (right)
  • Statuses, colors, ages, repo display using existing formatters
  • In-TUI interactions:
    • a / A: approve pending plan (when in AWAITING_PLAN_APPROVAL)
    • m / M: open message composer to send follow-up (cjules msg equivalent)
  • Keyboard: vim-style (j/k, g/G), arrows, PageUp/Down, Tab (focus list<->logs), / live filter, f active-only toggle, r refresh, l tail toggle, ?/h help overlay, q/Ctrl-C quit
  • Production terminal hygiene: alternate screen buffer, raw mode (no echo), SIGWINCH handling, guaranteed stty/cursor/alt-screen restore on every exit path (signals, at_exit, errors)
  • Efficient polling with separate intervals for session list vs per-session activities; incremental activity append + seen dedup + bounded per-session history
  • Zero new runtime dependencies; reuses Models, API::*, Client, Output::Colors, Util, existing watch/logs rendering logic

Testing / Quality

  • crystal spec : 97 examples, 0 failures
  • crystal tool format + bin/ameba clean
  • shards build --release succeeds
  • Non-TTY guard + proper exit code 1
  • Terminal restore tested via non-interactive paths

Closes #6

hahwul added 2 commits June 6, 2026 12:12
Implements #6

- New command: cjules dash (alias: dashboard)
- Split-screen TUI: left pane lists sessions with status, repo, title, age (filterable with /, active-only toggle with f)
- Right pane: live activity log tail for the selected session (incremental fetch + dedup, follow mode)
- In-TUI actions: 'a' to approve plan (when AWAITING_PLAN_APPROVAL), 'm' to compose+send message
- Full keyboard support (vim keys, arrows, PgUp/PgDn, Tab focus switch, g/G, r refresh, l toggle follow, ? help, q/ctrl-c quit)
- Production-grade terminal handling: alternate screen, raw mode, SIGWINCH resize, guaranteed restore of stty + cursor + alt screen on any exit path (INT/TERM/at_exit)
- Reuses existing Models, API, Client, Output::Colors, Util, state rendering
- Updated docs, CLI help, CHANGELOG, skill definition

All tests pass, ameba clean, formatted.
… interleaving

Previously draw_list_pane + stray '│' + draw_log_pane produced vertically stacked output instead of columns, causing completely broken screen layout.

Now:
- build_list_lines / build_log_lines return exactly  padded strings
- render zips them per row: list_cell + '│' + log_cell + newline
- Log column gets a 1-line title bar (session id + state + count) as its first row
- Added \e[0m safety before bottom separator to prevent reverse-video bleed

This was the root cause of '화면이 깨지네' when running ./bin/cjules dash.
@hahwul hahwul closed this Jun 6, 2026
@hahwul hahwul deleted the feat/dash-tui branch June 6, 2026 03:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Interactive TUI Dashboard (cjules dash)

1 participant