Refactor scrolling methods in ScrollState to accept an amount parameter
- Updated `scroll_up` and `scroll_down` methods to take an `amount` parameter for more flexible scrolling. - Removed the `AgentMode` enum and related methods from the types module to simplify state management. - Modified `AppStateRest` to remove the `mode` field and adjusted related logic. - Enhanced `run_subagent` to build tool definitions and handle API key resolution from configuration. - Updated command parsing to reflect changes in login handling. - Removed onboarding overlays and related logic from input handling and rendering. - Improved status bar to reflect connection status and agent readiness. - Adjusted workflow panel rendering to simplify phase status display. - Refactored edit log initialization to load from disk if available. - Updated settings structure to use a HashMap for API keys. - Enhanced error handling in LlmClient for authentication issues.
This commit is contained in:
+18
-22
@@ -65,15 +65,14 @@ fn run_single_process() -> Result<()> {
|
||||
store.memory_dir,
|
||||
);
|
||||
state.sessions = model::session::Session::list(&store.base_dir);
|
||||
if state.settings.api_key.is_none() {
|
||||
state.misc.overlay = app::state::types::Overlay::Onboard;
|
||||
}
|
||||
|
||||
|
||||
|
||||
let _rt = tokio::runtime::Runtime::new()?;
|
||||
|
||||
enable_raw_mode()?;
|
||||
let mut stdout = io::stdout();
|
||||
execute!(stdout, EnterAlternateScreen)?;
|
||||
execute!(stdout, EnterAlternateScreen, crossterm::event::EnableMouseCapture)?;
|
||||
let backend = CrosstermBackend::new(stdout);
|
||||
let mut terminal = Terminal::new(backend)?;
|
||||
terminal.clear()?;
|
||||
@@ -81,7 +80,7 @@ fn run_single_process() -> Result<()> {
|
||||
let run_result = run_loop(&mut state, &mut terminal);
|
||||
|
||||
let mut restore_stdout = io::stdout();
|
||||
let _ = execute!(restore_stdout, LeaveAlternateScreen);
|
||||
let _ = execute!(restore_stdout, LeaveAlternateScreen, crossterm::event::DisableMouseCapture);
|
||||
let _ = disable_raw_mode();
|
||||
|
||||
if let Err(e) = run_result {
|
||||
@@ -165,7 +164,6 @@ fn send_daemon_update(conn: &mut ipc::conn::Connection, state: &app::state::rest
|
||||
};
|
||||
|
||||
let frame = DaemonFrame::StateUpdate(Box::new(StatePayload {
|
||||
mode: state.mode.name().to_string(),
|
||||
session_id: state.session_id.clone(),
|
||||
messages,
|
||||
edit_count: state.edit_log.len() as u32,
|
||||
@@ -184,15 +182,7 @@ fn apply_client_update(
|
||||
state: &mut app::state::rest::AppStateRest,
|
||||
payload: ipc::protocol::StatePayload,
|
||||
) {
|
||||
use app::state::types::{AgentMode, Overlay, Toast, ToastKind};
|
||||
|
||||
state.mode = match payload.mode.as_str() {
|
||||
"Auto" => AgentMode::Auto,
|
||||
"Normal" => AgentMode::Normal,
|
||||
"Plan" => AgentMode::Plan,
|
||||
"Yolo" => AgentMode::Yolo,
|
||||
_ => state.mode,
|
||||
};
|
||||
use app::state::types::{Overlay, Toast, ToastKind};
|
||||
state.session_id = payload.session_id;
|
||||
state.dirty = payload.dirty;
|
||||
|
||||
@@ -218,8 +208,7 @@ fn apply_client_update(
|
||||
Some("Bash") => Overlay::Bash,
|
||||
Some("QuitConfirm") => Overlay::QuitConfirm,
|
||||
Some("Workflow") => Overlay::Workflow,
|
||||
Some("Onboard") => Overlay::Onboard,
|
||||
Some("OnboardProvider") => Overlay::OnboardProvider,
|
||||
|
||||
Some("KeyInput") => Overlay::KeyInput,
|
||||
Some("Editor") => Overlay::Editor,
|
||||
Some("Effort") => Overlay::Effort,
|
||||
@@ -232,7 +221,7 @@ fn apply_client_update(
|
||||
Some("Loading") => Overlay::Loading,
|
||||
Some("ModelSelector") => Overlay::ModelSelector,
|
||||
Some("ClearConfirm") => Overlay::ClearConfirm,
|
||||
Some("LoginPicker") => Overlay::LoginPicker,
|
||||
|
||||
_ => Overlay::None,
|
||||
};
|
||||
|
||||
@@ -370,7 +359,7 @@ fn run_attach(session_id: &str) -> Result<()> {
|
||||
|
||||
enable_raw_mode()?;
|
||||
let mut stdout = io::stdout();
|
||||
execute!(stdout, EnterAlternateScreen)?;
|
||||
execute!(stdout, EnterAlternateScreen, crossterm::event::EnableMouseCapture)?;
|
||||
let backend = CrosstermBackend::new(stdout);
|
||||
let mut terminal = Terminal::new(backend)?;
|
||||
terminal.clear()?;
|
||||
@@ -454,7 +443,7 @@ fn run_attach(session_id: &str) -> Result<()> {
|
||||
})?;
|
||||
}
|
||||
|
||||
let _ = execute!(io::stdout(), LeaveAlternateScreen);
|
||||
let _ = execute!(io::stdout(), LeaveAlternateScreen, crossterm::event::DisableMouseCapture);
|
||||
let _ = disable_raw_mode();
|
||||
|
||||
let _ = client_state.settings.save();
|
||||
@@ -472,7 +461,7 @@ fn run_loop(
|
||||
let _ = terminal.clear();
|
||||
|
||||
let _ = disable_raw_mode();
|
||||
let _ = execute!(io::stdout(), LeaveAlternateScreen);
|
||||
let _ = execute!(io::stdout(), LeaveAlternateScreen, crossterm::event::DisableMouseCapture);
|
||||
}
|
||||
result
|
||||
}
|
||||
@@ -482,7 +471,7 @@ fn run_loop_inner(
|
||||
terminal: &mut Terminal<CrosstermBackend<io::Stdout>>,
|
||||
) -> Result<()> {
|
||||
use std::time::Duration;
|
||||
use crossterm::event::{Event, KeyEventKind};
|
||||
use crossterm::event::{Event, KeyEventKind, MouseEventKind};
|
||||
use controller::input::handle_key;
|
||||
use app::runtime::actions::{Action, apply_action};
|
||||
|
||||
@@ -509,6 +498,13 @@ fn run_loop_inner(
|
||||
Event::Resize(w, h) => {
|
||||
apply_action(state, Action::Resize(w, h));
|
||||
}
|
||||
Event::Mouse(mouse_event) => {
|
||||
if mouse_event.kind == MouseEventKind::ScrollUp {
|
||||
apply_action(state, Action::ScrollUp);
|
||||
} else if mouse_event.kind == MouseEventKind::ScrollDown {
|
||||
apply_action(state, Action::ScrollDown);
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user