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/driver.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'crates/atuin-ai/src/driver.rs') diff --git a/crates/atuin-ai/src/driver.rs b/crates/atuin-ai/src/driver.rs index ddb839b7..82d666ef 100644 --- a/crates/atuin-ai/src/driver.rs +++ b/crates/atuin-ai/src/driver.rs @@ -492,6 +492,7 @@ fn execute_effect(effect: &Effect, ctx: DriverContext) { messages.clone(), session_id.clone(), &app.capabilities, + app.daemon_enabled, fsm.ctx.invocation_id.clone(), ); tokio::spawn(async move { @@ -570,7 +571,6 @@ fn execute_effect(effect: &Effect, ctx: DriverContext) { Effect::ExecuteTool { tool_id, tool } => { let tool_id = tool_id.clone(); - let tool = tool.clone(); let tx = tx.clone(); let db = io.app_ctx.history_db.clone(); @@ -731,8 +731,9 @@ fn execute_effect(effect: &Effect, ctx: DriverContext) { preview: None, })); } - ClientToolCall::AtuinHistory(_) => { + ClientToolCall::AtuinHistory(tool) => { // History search needs async DB access + let tool = tool.clone(); tokio::spawn(async move { let outcome = tool.execute(&db).await; let _ = tx.send(DriverEvent::Fsm(Event::ToolExecutionDone { @@ -742,6 +743,17 @@ fn execute_effect(effect: &Effect, ctx: DriverContext) { })); }); } + ClientToolCall::AtuinOutput(tool) => { + let tool = tool.clone(); + tokio::spawn(async move { + let outcome = tool.execute().await; + let _ = tx.send(DriverEvent::Fsm(Event::ToolExecutionDone { + tool_id, + outcome, + preview: None, + })); + }); + } ClientToolCall::LoadSkill(skill_call) => { let skill_name = skill_call.name.clone(); let registry = io.skill_registry.clone(); -- cgit v1.3.1