rdmsm4x-changelog-20260903-1855-tyrell-terminal-console-release
rdmsm4x-changelog-20260903-1855-tyrell-terminal-console-release
Summary: Built, integrated, and verified the Tyrell
full-screen interactive terminal console (tyrell console),
delivering a persistent Footlights status strip, four switchable
operational dashboards (Bus Events, Chat & Dispatch, Streaming Logs,
Tasks & Issues), ticket resolution workflows, robust non-TTY
fallback, and complete test suite validation.
Scope
- Primary host:
rdmsm4x(canonical build and development workspace at/Users/richh/dev/apps/Tyrell). - Target deployment: Fleet-wide macOS nodes (
rdmsm4x,rdmbair15m5,rdmbair13m5,jdmbair13m5,rdmpw3265m,rdmpw3275m).
What Changed Across Milestones M1–M4
Milestone 1: Terminal Infrastructure & Footlights Status Panel
- Terminal Management & Output Mode:
- Implemented
TerminalOutputModeand raw terminal mode transitions via termios inSources/tyrell/Console/ConsoleApp.swift. - Configured alternate screen buffer (
\u{1B}[?1049h/\u{1B}[?1049l), cursor hiding/restoration (\u{1B}[?25l/\u{1B}[?25h), and mouse tracking disablement. - Implemented asynchronous
SIGWINCHsignal dispatch viaDispatchSource.makeSignalSourcefor dynamic terminal window resize refits.
- Implemented
- Footlights Status Panel
(
ConsoleStatusPanel.swift):- Pins a persistent 6-row status strip at the bottom of the screen
(
height - 6 ..< height):- Row 1: Provider usage meters (Anthropic, OpenAI, Gemini, local Ollama) with colored progress blocks.
- Row 2: Fleet node health indicators across all 6 Mac nodes with freshness grading.
- Row 3: Active agent workstreams displaying assigned tasks.
- Row 4: Queue & operational counters (blocked work, paused tasks, orphan tasks, recent errors).
- Row 5: Active step meter displaying in-flight sync/scan progress, elapsed time, and ETA.
- Row 6: Interactive hotkey command bar (1–4 screens, T/R/P/Enter actions, Q quit).
- Robust line truncation utility
fit(line:maxWidth:)ensuring exact column width fitting without leaking open ANSI SGR sequences.
- Pins a persistent 6-row status strip at the bottom of the screen
(
Milestone 2: Dashboard Screens 1–3 (Bus Events, Chat & Dispatch, Realtime Logs)
- Screen Protocol & Navigation
(
ConsoleScreen.swift):- Defined
@MainActor public protocol ConsoleScreen: AnyObjectwith standardized rendering, input handling, and lifecycle hooks.
- Defined
- Screen 1 — Bus Events
(
BusEventsScreen.swift):- Live fleet coordination event stream with consecutive message
deduplication within a 15-second window, badge counters
(
(×N)), token-bucket burst throttling, and keyboard auto-scroll pausing.
- Live fleet coordination event stream with consecutive message
deduplication within a 15-second window, badge counters
(
- Screen 2 — Chat & Peer Dispatch
(
ChatScreen.swift):- Real-time two-way messaging with fleet agents
(
claude@rdmsm4x,agy,codex, or broadcast), command/recipient parsing, inline text editing buffer, and scrollback.
- Real-time two-way messaging with fleet agents
(
- Screen 3 — Realtime Streaming Logs
(
RealtimeLogsScreen.swift):- Streaming log tailing with live
/search filtering, regex matching, and auto-scrolling viewport.
- Streaming log tailing with live
Milestone 3: Universal Remote Connectivity & Daemon Integration
- Client & RPC Infrastructure
(
ConsoleRemoteClient.swift):- Implemented
ConsoleRemoteClientProtocolandConsoleRemoteClientsupporting local (127.0.0.1:43117) and remote (--host <node>) endpoints. - Dual-header authentication
(
Authorization: Bearer <token>andX-Tyrell-Token: <token>) using~/.tyrell/token. - Graceful degradation when offline or unreachable without crashing or blocking the UI loop.
- Implemented
Milestone 4: Tasks Screen & Ticket Resolution Workflows
- Interactive Tasks Dashboard
(
TasksScreen.swift):- Full-screen table of open issues and blocked tasks with responsive
column collapsing (
ColumnConfig.forWidthadapting from 40 to 120+ columns). - Selected row highlighted with
▶cursor and ANSI inverse video (\u{1B}[7;1m), while preserving priority color accents (P0bold red,P1yellow,P2cyan,P3dim). - Bounded viewport scrolling with strict index clamping.
- Full-screen table of open issues and blocked tasks with responsive
column collapsing (
- Action Workflows & State Machine:
T: Claim/take ticket via daemon RPC with automatic fallback to local ticket CLI (/Users/richh/bin/ticket).R: Interactive inline prompt capturing resolution notes; commits via daemon RPC or ticket CLI.P: Toggle pause/hold/resume on selected ticket.Enter: Full modal drill-down inspection of ticket metadata and error traces.Esc: Cancel prompt/modal and return to table browsing.q/Ctrl+C: Clean terminal restoration and application exit.
- Ticket CLI Integration
(
TicketCLIExecutor.swift):- Safe subprocess execution for
/Users/richh/bin/ticket,/usr/local/bin/ticket,/opt/homebrew/bin/ticket, and~/bin/ticket.
- Safe subprocess execution for
Non-TTY Pipe Fallback & CLI Invocations
- Interactive TTY: running
tyrellortyrell consoleenters full-screen interactive dashboard. - Non-TTY / Pipe: running
tyrell | catdetectsisatty(STDIN_FILENO) == 0and emits clean UNIX help with 0 ANSI escape sequences. tyrell console --helpdocuments all console screens, footlights status panel rows, keyboard navigation shortcuts, and remote connection options with 0 ANSI escape sequences.
Verification Evidence
swift build --target tyrell: Passed cleanly (0 warnings, 0 errors).- Non-TTY pipe escape code check:
tyrell | tr -dc '\033' | wc -c->0(Zero ANSI escape codes emitted).tyrell console --help | tr -dc '\033' | wc -c->0(Zero ANSI escape codes emitted).tyrell | cat-> Displays clean CLI usage and subcommand listing.tyrell console --help-> Displays complete console help, keyboard shortcuts, and options.
- Test suite execution (
swift test):- 100% pass across all test suites (251+ tests, 0 failures, 0 unexpected).
- All console suites passing:
ConsoleStateTests,ConsoleScreenTests,ConsoleStatusPanelTests,KeyDecoderTests,ConsoleRemoteClientTests,BusEventsScreenTests,ChatScreenTests,RealtimeLogsScreenTests,TasksScreenTests.
Files Touched
Sources/tyrell/main.swift(subcommand dispatch and interactive console launch)Sources/tyrell/Console/ConsoleApp.swift(lifecycle, alternate buffer, event loop, resize handling)Sources/tyrell/Console/ConsoleScreen.swift(screen protocol and registry)Sources/tyrell/Console/ConsoleState.swift(state aggregator, polling, bus throttling)Sources/tyrell/Console/ConsoleStatusPanel.swift(persistent 6-row Footlights status panel)Sources/tyrell/Console/KeyDecoder.swift(raw terminal key event decoder)Sources/tyrell/Console/ConsoleRemoteClient.swift(daemon HTTP client and protocol extensions)Sources/tyrell/Console/TicketCLIExecutor.swift(local ticket CLI subprocess executor)Sources/tyrell/Console/BusEventsScreen.swift(Screen 1: Bus Events)Sources/tyrell/Console/ChatScreen.swift(Screen 2: Chat & Dispatch)Sources/tyrell/Console/RealtimeLogsScreen.swift(Screen 3: Streaming Logs)Sources/tyrell/Console/TasksScreen.swift(Screen 4: Tasks & Issues)Tests/TyrellCoreTests/ConsoleScreenTests.swiftTests/TyrellCoreTests/ConsoleStateTests.swiftTests/TyrellCoreTests/ConsoleStatusPanelTests.swiftTests/TyrellCoreTests/KeyDecoderTests.swiftTests/TyrellCoreTests/ConsoleRemoteClientTests.swiftTests/TyrellCoreTests/BusEventsScreenTests.swiftTests/TyrellCoreTests/ChatScreenTests.swiftTests/TyrellCoreTests/RealtimeLogsScreenTests.swiftTests/TyrellCoreTests/TasksScreenTests.swift
How to Undo
- Changes are fully tracked in Git on
rdmsm4x:~/dev/apps/Tyrell. - Revert commits on the active branch or restore files via
git checkout. - Rebuild via
swift build --target tyrell.
Outstanding Owner Actions
- None. All acceptance criteria and verification gates are satisfied.