Skip to main content

codetether_agent/tui/app/state/
default_impl.rs

1//! Default implementation for `AppState`.
2
3use std::collections::{HashMap, HashSet, VecDeque};
4use std::sync::Arc;
5
6use crate::tui::help::HelpScrollState;
7use crate::tui::models::{InputMode, ViewMode};
8use crate::tui::ralph_view::RalphViewState;
9use crate::tui::swarm_view::SwarmViewState;
10use crate::tui::symbol_search::SymbolSearchState;
11
12impl Default for super::AppState {
13    fn default() -> Self {
14        Self {
15            view_mode: ViewMode::Chat,
16            input_mode: InputMode::Normal,
17            messages: vec![],
18            input: String::new(),
19            input_cursor: 0,
20            input_scroll: 0,
21            chat_scroll: 0,
22            chat_last_max_scroll: 0,
23            chat_auto_follow: true,
24            tool_preview_scroll: 0,
25            tool_preview_last_max_scroll: 0,
26            protocol_selected: 0,
27            protocol_scroll: 0,
28            status: "Ready — type a message and press Enter. Ctrl+C/Ctrl+Q quits.".to_string(),
29            processing: false,
30            session_id: None,
31            sessions: vec![],
32            selected_session: 0,
33            session_filter: String::new(),
34            cwd_display: String::new(),
35            bus_log: crate::tui::bus_log::BusLogState::new(),
36            swarm: SwarmViewState::new(),
37            audit: crate::tui::audit_view::AuditViewState::default(),
38            git: super::git_state::GitViewState::default(),
39            ralph: RalphViewState::new(),
40            symbol_search: SymbolSearchState::new(),
41            slash_suggestions: vec![],
42            selected_slash_suggestion: 0,
43            command_history: Vec::new(),
44            history_index: None,
45            worker_id: None,
46            worker_name: None,
47            a2a_connected: false,
48            peer_endpoint_ready: false,
49            recent_tasks: Vec::new(),
50            worker_bridge_registered_agents: HashSet::new(),
51            worker_bridge_processing_state: None,
52            worker_task_queue: VecDeque::new(),
53            active_remote_task: None,
54            help_scroll: HelpScrollState::default(),
55            show_help: false,
56            available_models: Vec::new(),
57            selected_model_index: 0,
58            model_picker_active: false,
59            model_filter: String::new(),
60            model_refresh_in_flight: false,
61            model_refresh_rx: None,
62            model_picker_target_model: None,
63            streaming_text: String::new(),
64            processing_started_at: None,
65            current_request_first_token_ms: None,
66            current_request_last_token_ms: None,
67            last_request_first_token_ms: None,
68            last_request_last_token_ms: None,
69            last_completion_model: None,
70            last_completion_latency_ms: None,
71            last_completion_prompt_tokens: None,
72            last_completion_output_tokens: None,
73            context_used: None,
74            context_budget: None,
75            context_health: Default::default(),
76            last_tool_name: None,
77            last_tool_latency_ms: None,
78            last_tool_success: None,
79            pending_tool_name: None,
80            pending_tool_started_at: None,
81            chat_latency: Default::default(),
82            pending_images: Vec::new(),
83            pending_text_pastes: Vec::new(),
84            current_turn_cancel: None,
85            auto_apply_edits: false,
86            allow_network: false,
87            slash_autocomplete: true,
88            use_worktree: true,
89            selected_settings_index: 0,
90            mcp_registry: Arc::new(crate::tui::app::mcp::TuiMcpRegistry::new()),
91            spawned_agents: HashMap::new(),
92            active_spawned_agent: None,
93            streaming_agent_texts: HashMap::new(),
94            cached_message_lines: Vec::new(),
95            cached_messages_len: 0,
96            cached_max_width: 0,
97            cached_streaming_snapshot: None,
98            cached_processing: false,
99            cached_frozen_len: 0,
100            watchdog_notification: None,
101            main_watchdog_root_prompt: None,
102            main_last_event_at: None,
103            main_watchdog_restart_count: 0,
104            main_inflight_prompt: None,
105            okr_repository: None,
106            pending_okr_approval: None,
107            pending_smart_switch_retry: None,
108            smart_switch_retry_count: 0,
109            smart_switch_attempted_models: Vec::new(),
110            chat_sync_rx: None,
111            chat_sync_status: None,
112            chat_sync_last_success: None,
113            chat_sync_last_error: None,
114            chat_sync_uploaded_bytes: 0,
115            chat_sync_uploaded_batches: 0,
116            autochat: super::super::autochat::state::AutochatState::default(),
117            file_picker_dir: std::path::PathBuf::new(),
118            file_picker_entries: Vec::new(),
119            file_picker_selected: 0,
120            file_picker_filter: String::new(),
121            file_picker_active: false,
122            workspace: crate::tui::models::WorkspaceSnapshot::default(),
123            chat_layout_mode: crate::tui::ui::webview::layout_mode::ChatLayoutMode::default(),
124            last_key_at: None,
125            recording_stop_flag: None,
126            pending_voice_text: None,
127            saved_chat_scroll: 0,
128            saved_chat_auto_follow: true,
129            saved_tool_preview_scroll: 0,
130            streaming_start: None,
131            streaming_chars: 0,
132        }
133    }
134}