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/view/turn.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/view/turn.rs')
| -rw-r--r-- | crates/atuin-ai/src/tui/view/turn.rs | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/crates/atuin-ai/src/tui/view/turn.rs b/crates/atuin-ai/src/tui/view/turn.rs index 6c3d5c29..98ae5eff 100644 --- a/crates/atuin-ai/src/tui/view/turn.rs +++ b/crates/atuin-ai/src/tui/view/turn.rs @@ -1,7 +1,8 @@ use std::path::PathBuf; +use crate::fsm::tools::ToolManager; use crate::tools::descriptor; -use crate::tools::{ClientToolCall, HistorySearchFilterMode, ToolPreview, ToolTracker}; +use crate::tools::{ClientToolCall, HistorySearchFilterMode, ToolPreview}; use crate::tui::ConversationEvent; /// Server-sent danger level for a suggested command @@ -210,12 +211,12 @@ pub(crate) enum UiTurn { pub(crate) struct TurnBuilder<'a> { turns: Vec<UiTurn>, current_turn: Option<UiTurn>, - tracker: &'a ToolTracker, + tracker: &'a ToolManager, } /// A struct to iteratively build [UiTurn] events from [ConversationEvent]s. impl<'a> TurnBuilder<'a> { - pub(crate) fn new(tracker: &'a ToolTracker) -> Self { + pub(crate) fn new(tracker: &'a ToolManager) -> Self { Self { turns: Vec::new(), current_turn: None, @@ -441,18 +442,18 @@ impl<'a> TurnBuilder<'a> { match &tracked.tool { ClientToolCall::Shell(shell) => ToolRenderData::Shell { command: shell.command.clone(), - preview: tracked.preview(), + preview: tracked.shell_preview(), }, ClientToolCall::Read(read) => ToolRenderData::FileRead { path: read.path.clone(), }, ClientToolCall::Edit(edit) => ToolRenderData::FileEdit { path: edit.path.clone(), - preview: tracked.edit_preview.clone(), + preview: tracked.edit_preview().cloned(), }, ClientToolCall::Write(write) => ToolRenderData::FileWrite { path: write.path.clone(), - preview: tracked.write_preview.clone(), + preview: tracked.write_preview().cloned(), }, ClientToolCall::AtuinHistory(history) => ToolRenderData::HistorySearch { query: history.query.clone(), |
