aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-ai/src/tui/view/mod.rs
diff options
context:
space:
mode:
authorMichelle Tilley <michelle@michelletilley.net>2026-04-21 15:30:46 -0700
committerGitHub <noreply@github.com>2026-04-21 15:30:46 -0700
commit8dec33f5f9a972a38978b5600fde5bc292fb6401 (patch)
tree19708731284c8ba810a5acede4720d3396f9e5a2 /crates/atuin-ai/src/tui/view/mod.rs
parentfix: shell tool preview stuck as Running after completion (#3436) (diff)
downloadatuin-8dec33f5f9a972a38978b5600fde5bc292fb6401.zip
feat: shell tool execution timeouts (#3437)
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))
}
};
}