diff options
| author | Michelle Tilley <michelle@michelletilley.net> | 2026-04-21 13:07:27 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-21 13:07:27 -0700 |
| commit | 2f702ad446fcd6a261a3bea0ab2807d70eca43e2 (patch) | |
| tree | 4cfa6276257cefbe73f7fa46a74026170aaf8435 /crates/atuin-ai/src/tui/components/atuin_ai.rs | |
| parent | docs: document show_numeric_shortcuts (#3433) (diff) | |
| download | atuin-2f702ad446fcd6a261a3bea0ab2807d70eca43e2.zip | |
refactor: Replace ad-hoc dispatch with FSM + driver architecture (#3434)
Replaces the tangled dispatch handler system (`tui/dispatch.rs`,
`tui/state.rs`) with a pure finite state machine + driver architecture.
The FSM handles all state transitions as explicit `(State, Event) →
(NewState, Effects)` mappings. The driver executes IO effects and
bridges the TUI to the FSM.
Diffstat (limited to 'crates/atuin-ai/src/tui/components/atuin_ai.rs')
| -rw-r--r-- | crates/atuin-ai/src/tui/components/atuin_ai.rs | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/crates/atuin-ai/src/tui/components/atuin_ai.rs b/crates/atuin-ai/src/tui/components/atuin_ai.rs index c7227fbd..31dff1c3 100644 --- a/crates/atuin-ai/src/tui/components/atuin_ai.rs +++ b/crates/atuin-ai/src/tui/components/atuin_ai.rs @@ -5,11 +5,10 @@ //! Tab) are handled in the bubble phase so child components like the //! permission Select can consume them first. -use std::sync::mpsc; - use crossterm::event::{Event, KeyCode, KeyEvent, KeyEventKind, KeyModifiers}; use eye_declare::{Elements, EventResult, Hooks, component, props}; +use crate::commands::inline::DriverEventSender; use crate::tui::events::AiTuiEvent; use crate::tui::state::AppMode; @@ -28,7 +27,7 @@ pub(crate) struct AtuinAi { #[derive(Default)] pub(crate) struct AtuinAiState { - tx: Option<mpsc::Sender<AiTuiEvent>>, + tx: Option<DriverEventSender>, } #[component(props = AtuinAi, state = AtuinAiState, children = Elements)] @@ -38,7 +37,7 @@ fn atuin_ai( hooks: &mut Hooks<AtuinAi, AtuinAiState>, children: Elements, ) -> Elements { - hooks.use_context::<mpsc::Sender<AiTuiEvent>>(|tx, _, state| { + hooks.use_context::<DriverEventSender>(|tx, _, state| { state.tx = tx.cloned(); }); |
