aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-ai/src/tui/view/turn.rs
diff options
context:
space:
mode:
authorMichelle Tilley <michelle@michelletilley.net>2026-04-21 13:07:27 -0700
committerGitHub <noreply@github.com>2026-04-21 13:07:27 -0700
commit2f702ad446fcd6a261a3bea0ab2807d70eca43e2 (patch)
tree4cfa6276257cefbe73f7fa46a74026170aaf8435 /crates/atuin-ai/src/tui/view/turn.rs
parentdocs: document show_numeric_shortcuts (#3433) (diff)
downloadatuin-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.rs13
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(),