aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-ai/src/stream.rs
diff options
context:
space:
mode:
authorMichelle Tilley <michelle@michelletilley.net>2026-06-08 09:12:45 -0700
committerGitHub <noreply@github.com>2026-06-08 09:12:45 -0700
commitbcdf8c8cde31e826000f1b2d6eeaebdd865a07c1 (patch)
treef62f66e4dede22ce73ea5dafe69881d6af9b3101 /crates/atuin-ai/src/stream.rs
parentchore(deps): bump debian from bookworm-20260421-slim to bookworm-20260518-sli... (diff)
downloadatuin-bcdf8c8cde31e826000f1b2d6eeaebdd865a07c1.zip
feat: Capture command output + expose to new `atuin_output` tool (#3510)
Diffstat (limited to 'crates/atuin-ai/src/stream.rs')
-rw-r--r--crates/atuin-ai/src/stream.rs13
1 files changed, 11 insertions, 2 deletions
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<serde_json::Value>,
session_id: Option<String>,
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<String>,
+ last_command: Option<History>,
user_contexts: Vec<crate::user_context::UserContext>,
skill_summaries: Vec<crate::skills::SkillSummary>,
skill_overflow: Option<String>,
@@ -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,