mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 13:43:26 +08:00
Initial scaffold for ECC 2.0, a terminal-native agentic IDE built with Ratatui. Compiles to a 3.4MB single binary. Core modules: - Session manager with SQLite-backed state store - TUI dashboard with split-pane layout (sessions, output, metrics) - Worktree orchestration (auto-create per agent session) - Observability with tool call risk scoring - Inter-agent communication via SQLite mailbox - Background daemon with heartbeat monitoring - CLI with start/stop/sessions/status/daemon subcommands Tech stack: Rust + Ratatui + Crossterm + Tokio + rusqlite + git2 + clap
53 lines
1.8 KiB
Rust
53 lines
1.8 KiB
Rust
use anyhow::Result;
|
|
use crossterm::{
|
|
event::{self, Event, KeyCode, KeyModifiers},
|
|
execute,
|
|
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
|
|
};
|
|
use ratatui::prelude::*;
|
|
use std::io;
|
|
use std::time::Duration;
|
|
|
|
use super::dashboard::Dashboard;
|
|
use crate::config::Config;
|
|
use crate::session::store::StateStore;
|
|
|
|
pub async fn run(db: StateStore, cfg: Config) -> Result<()> {
|
|
enable_raw_mode()?;
|
|
let mut stdout = io::stdout();
|
|
execute!(stdout, EnterAlternateScreen)?;
|
|
|
|
let backend = CrosstermBackend::new(stdout);
|
|
let mut terminal = Terminal::new(backend)?;
|
|
|
|
let mut dashboard = Dashboard::new(db, cfg);
|
|
|
|
loop {
|
|
terminal.draw(|frame| dashboard.render(frame))?;
|
|
|
|
if event::poll(Duration::from_millis(250))? {
|
|
if let Event::Key(key) = event::read()? {
|
|
match (key.modifiers, key.code) {
|
|
(KeyModifiers::CONTROL, KeyCode::Char('c')) => break,
|
|
(_, KeyCode::Char('q')) => break,
|
|
(_, KeyCode::Tab) => dashboard.next_pane(),
|
|
(KeyModifiers::SHIFT, KeyCode::BackTab) => dashboard.prev_pane(),
|
|
(_, KeyCode::Char('j')) | (_, KeyCode::Down) => dashboard.scroll_down(),
|
|
(_, KeyCode::Char('k')) | (_, KeyCode::Up) => dashboard.scroll_up(),
|
|
(_, KeyCode::Char('n')) => dashboard.new_session(),
|
|
(_, KeyCode::Char('s')) => dashboard.stop_selected(),
|
|
(_, KeyCode::Char('r')) => dashboard.refresh(),
|
|
(_, KeyCode::Char('?')) => dashboard.toggle_help(),
|
|
_ => {}
|
|
}
|
|
}
|
|
}
|
|
|
|
dashboard.tick().await;
|
|
}
|
|
|
|
disable_raw_mode()?;
|
|
execute!(terminal.backend_mut(), LeaveAlternateScreen)?;
|
|
Ok(())
|
|
}
|