aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-ai/src/driver.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/driver.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/driver.rs')
-rw-r--r--crates/atuin-ai/src/driver.rs16
1 files changed, 14 insertions, 2 deletions
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();