From bcdf8c8cde31e826000f1b2d6eeaebdd865a07c1 Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Mon, 8 Jun 2026 09:12:45 -0700 Subject: feat: Capture command output + expose to new `atuin_output` tool (#3510) --- crates/atuin-ai/src/stream.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'crates/atuin-ai/src/stream.rs') diff --git a/crates/atuin-ai/src/stream.rs b/crates/atuin-ai/src/stream.rs index 084e8238..e78dc2e1 100644 --- a/crates/atuin-ai/src/stream.rs +++ b/crates/atuin-ai/src/stream.rs @@ -2,7 +2,10 @@ // SSE streaming // ─────────────────────────────────────────────────────────────────── +use atuin_client::history::History; use atuin_client::settings::AiCapabilities; + +use crate::context::history_output_capability_available; use atuin_common::tls::ensure_crypto_provider; use eventsource_stream::Eventsource; @@ -61,6 +64,7 @@ impl ChatRequest { messages: Vec, session_id: Option, capabilities: &AiCapabilities, + history_output_available: bool, invocation_id: String, ) -> Self { let mut caps = vec![ @@ -78,6 +82,11 @@ impl ChatRequest { if capabilities.enable_command_execution.unwrap_or(true) { caps.push("client_v1_execute_shell_command".to_string()); } + if history_output_capability_available(history_output_available) + && capabilities.enable_history_output.unwrap_or(true) + { + caps.push("client_v1_atuin_output".to_string()); + } if let Ok(extra) = std::env::var("ATUIN_AI__ADDITIONAL_CAPS") { caps.extend( extra @@ -103,7 +112,7 @@ pub(crate) fn create_chat_stream( request: ChatRequest, client_ctx: ClientContext, send_cwd: bool, - last_command: Option, + last_command: Option, user_contexts: Vec, skill_summaries: Vec, skill_overflow: Option, @@ -120,7 +129,7 @@ pub(crate) fn create_chat_stream( tracing::debug!("Sending SSE request to {endpoint}"); - let context = client_ctx.to_json(send_cwd, last_command.as_deref()); + let context = client_ctx.to_json(send_cwd, last_command.as_ref()); let mut config = serde_json::json!({ "capabilities": request.capabilities, -- cgit v1.3.1