aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-ai/src/tui/view/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/atuin-ai/src/tui/view/mod.rs')
-rw-r--r--crates/atuin-ai/src/tui/view/mod.rs12
1 files changed, 9 insertions, 3 deletions
diff --git a/crates/atuin-ai/src/tui/view/mod.rs b/crates/atuin-ai/src/tui/view/mod.rs
index d40a44d4..2061ec38 100644
--- a/crates/atuin-ai/src/tui/view/mod.rs
+++ b/crates/atuin-ai/src/tui/view/mod.rs
@@ -431,7 +431,7 @@ const MAX_SHELL_PREVIEW_LINES: u16 = 5;
/// Render a shell command execution with live VT100 output viewport.
fn shell_tool_view(tool_key: &str, command: &str, preview: Option<&ToolPreview>) -> Elements {
- let preview_done = preview.is_some_and(|p| p.exit_code.is_some() || p.interrupted);
+ let preview_done = preview.is_some_and(|p| p.exit_code.is_some() || p.interrupted.is_some());
element! {
#(if let Some(preview) = preview {
@@ -468,10 +468,16 @@ fn shell_tool_view(tool_key: &str, command: &str, preview: Option<&ToolPreview>)
}
fn shell_tool_footer(preview: &ToolPreview, preview_done: bool) -> Elements {
- if preview.interrupted {
+ use crate::fsm::tools::InterruptReason;
+
+ if let Some(reason) = &preview.interrupted {
+ let text = match reason {
+ InterruptReason::User => "Interrupted".to_string(),
+ InterruptReason::Timeout(secs) => format!("Timed out ({secs}s)"),
+ };
return element! {
Text {
- Span(text: "Interrupted", style: Style::default().fg(Color::Red).add_modifier(Modifier::BOLD))
+ Span(text: text, style: Style::default().fg(Color::Red).add_modifier(Modifier::BOLD))
}
};
}