Skip to content

Commit 07bbaab

Browse files
committed
fix: Remove no selected model scenario
1 parent 25b68e3 commit 07bbaab

12 files changed

Lines changed: 29 additions & 33 deletions

src/app.rs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ pub struct Model {
129129
pub textarea: TextArea,
130130
pub response_events: Vec<ConversationEvent>,
131131
pub inline_entries: Vec<InlineEntryState>,
132-
pub selected_agent_index: Option<usize>,
132+
pub selected_agent_index: usize,
133133
pub session_id: Option<String>,
134134
pub error_message: Option<String>,
135135
pub show_agent_router: bool,
@@ -149,10 +149,10 @@ pub struct Model {
149149
impl Default for Model {
150150
fn default() -> Self {
151151
let agents = vec![
152-
"Claude Code".to_string(),
153-
"Codex ACP".to_string(),
154152
"Claude Code ACP".to_string(),
153+
"Codex ACP".to_string(),
155154
"Mock ACP Agent".to_string(),
155+
// "Claude Code".to_string(),
156156
];
157157

158158
let backend_availability = vec![
@@ -213,7 +213,7 @@ impl Default for Model {
213213
textarea: create_textarea(),
214214
response_events: Vec::new(),
215215
inline_entries: Vec::new(),
216-
selected_agent_index: None,
216+
selected_agent_index: 0,
217217
session_id: None,
218218
error_message: None,
219219
show_agent_router: false,
@@ -251,7 +251,7 @@ impl Model {
251251

252252
Message::SelectItem => {
253253
// Select agent and close overlay
254-
self.selected_agent_index = self.agent_selection_list.selected_index();
254+
self.selected_agent_index = self.agent_selection_list.selected_index().unwrap_or(0);
255255
self.show_agent_router = false;
256256
self.error_message = None;
257257
self.clear_textarea();
@@ -553,6 +553,16 @@ impl Model {
553553
entry.rewrap(width);
554554
}
555555
}
556+
557+
pub fn get_backend(&self) -> Box<dyn AgentBackend + Send> {
558+
match self.selected_agent_index {
559+
0 => Box::new(backends::claude_code_acp::ClaudeCodeAcpBackend::new()),
560+
1 => Box::new(backends::codex_acp::CodexAcpBackend::new()),
561+
2 => Box::new(backends::mock::MockBackend::new()),
562+
// 3 => Box::new(ClaudeBackend::new()),
563+
_ => Box::new(backends::claude_code_acp::ClaudeCodeAcpBackend::new()),
564+
}
565+
}
556566
}
557567

558568
fn create_textarea() -> TextArea {

src/main.rs

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@ mod ui;
1111

1212
use crate::app::{AppMode, InstallChoice, Message, Model};
1313
use crate::autocomplete::update_autocomplete_state;
14-
use crate::backends::{
15-
AgentBackend, BackendEvent, claude::ClaudeBackend, claude_code_acp::ClaudeCodeAcpBackend,
16-
mock::MockBackend,
17-
};
14+
use crate::backends::{AgentBackend, BackendEvent};
1815
use crate::cli::{Cli, agent_name_to_index, valid_agent_names};
1916
use crate::commands::{CommandRegistry, parse_slash_command};
2017
use crate::conversation::{ConversationEvent, render_event, should_render_event};
@@ -88,7 +85,7 @@ async fn run_app(
8885

8986
// Set agent index if provided via CLI
9087
if let Some(index) = agent_index {
91-
model.selected_agent_index = Some(index);
88+
model.selected_agent_index = index;
9289
}
9390

9491
// Pre-fill textarea with initial message if provided
@@ -295,7 +292,7 @@ async fn run_app(
295292
}
296293

297294
// Check if backend is available before spawning
298-
let backend = get_backend(&model);
295+
let backend = model.get_backend();
299296
if !backends::is_available(backend.command_name()) {
300297
// Backend not available - show install prompt
301298
let _ = tx.send(Message::ShowInstallPrompt {
@@ -573,16 +570,6 @@ fn handle_key_simple(
573570
Some(Message::KeyPress(key))
574571
}
575572

576-
fn get_backend(model: &Model) -> Box<dyn AgentBackend + Send> {
577-
match model.selected_agent_index {
578-
Some(0) => Box::new(ClaudeBackend::new()),
579-
Some(1) => Box::new(backends::codex_acp::CodexAcpBackend::new()),
580-
Some(2) => Box::new(ClaudeCodeAcpBackend::new()),
581-
Some(3) => Box::new(MockBackend::new()),
582-
_ => Box::new(ClaudeBackend::new()), // Default
583-
}
584-
}
585-
586573
async fn spawn_and_stream(
587574
backend: Box<dyn AgentBackend + Send>,
588575
prompt: String,

src/ui.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ fn render_chat(model: &mut Model, frame: &mut Frame) {
6969

7070
// Agent info - show selected agent below prompt
7171
let selected_agent = model
72-
.selected_agent_index
73-
.and_then(|i| model.agents.get(i))
72+
.agents
73+
.get(model.selected_agent_index)
7474
.map(|s| s.as_str())
7575
.unwrap_or("No agent selected");
7676

tests/blackbox_tui_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ fn test_shimmer_renders_during_streaming() {
147147
model.current_mode = AppMode::Streaming;
148148

149149
// Select an agent so it shows in the shimmer text
150-
model.selected_agent_index = Some(0); // "Claude Code"
150+
model.selected_agent_index = 0; // "Claude Code ACP"
151151

152152
let mut terminal = Terminal::new(TestBackend::new(100, 30)).unwrap();
153153
terminal

tests/snapshots/blackbox_tui_test__empty_submission_prevented.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ expression: terminal.backend()
55
" "
66
"› Write a message... "
77
" "
8-
"Agent: No agent selected "
8+
"Agent: Claude Code ACP "
99
" "
1010
"/switch-model: agents | /exit: quit "
1111
" "

tests/snapshots/blackbox_tui_test__initial_state.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ expression: terminal.backend()
55
" "
66
"› Write a message... "
77
" "
8-
"Agent: No agent selected "
8+
"Agent: Claude Code ACP "
99
" "
1010
"/switch-model: agents | /exit: quit "
1111
" "

tests/snapshots/blackbox_tui_test__long_text_wrapping.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ expression: terminal.backend()
77
"› should wrap properly in a narrow "
88
" terminal "
99
" "
10-
"Agent: No agent selected "
10+
"Agent: Claude Code ACP "
1111
" "
1212
"/switch-model: agents | /exit: quit "
1313
" "

tests/snapshots/blackbox_tui_test__multiline_input.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ expression: terminal.backend()
66
" Line 1 "
77
"› Line 2 "
88
" "
9-
"Agent: No agent selected "
9+
"Agent: Claude Code ACP "
1010
" "
1111
"/switch-model: agents | /exit: quit "
1212
" "

tests/snapshots/blackbox_tui_test__shimmer_during_streaming.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ expression: terminal.backend()
55
" "
66
"› Write a message... "
77
" "
8-
"Agent: Claude Code "
9-
"Claude Code processing... "
8+
"Agent: Claude Code ACP "
9+
"Claude Code ACP processing... "
1010
"/switch-model: agents | /exit: quit "
1111
" "
1212
" "

tests/snapshots/blackbox_tui_test__typed_hi.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ expression: terminal.backend()
55
" "
66
"› hi "
77
" "
8-
"Agent: No agent selected "
8+
"Agent: Claude Code ACP "
99
" "
1010
"/switch-model: agents | /exit: quit "
1111
" "

0 commit comments

Comments
 (0)