aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-ai/src/commands
diff options
context:
space:
mode:
authorMichelle Tilley <michelle@michelletilley.net>2026-03-02 09:12:20 -0800
committerGitHub <noreply@github.com>2026-03-02 18:12:20 +0100
commit4c9180c2755b6457113e8d6a7566c32cf1ad547a (patch)
tree8136d818898232d811dbc452bb52a16c38b8f8e3 /crates/atuin-ai/src/commands
parentfix: regen cargo dist (diff)
downloadatuin-4c9180c2755b6457113e8d6a7566c32cf1ad547a.zip
chore: Move atuin ai subcommand into core binary (#3212)
Diffstat (limited to 'crates/atuin-ai/src/commands')
-rw-r--r--crates/atuin-ai/src/commands/init.rs14
-rw-r--r--crates/atuin-ai/src/commands/inline.rs32
2 files changed, 25 insertions, 21 deletions
diff --git a/crates/atuin-ai/src/commands/init.rs b/crates/atuin-ai/src/commands/init.rs
index 8174b583..caf4c8d9 100644
--- a/crates/atuin-ai/src/commands/init.rs
+++ b/crates/atuin-ai/src/commands/init.rs
@@ -38,7 +38,7 @@ _atuin_ai_question_mark() {
if [[ -z "$BUFFER" || "$BUFFER" == "?" ]]; then
BUFFER=""
local output
- output=$(atuin-ai inline --natural-language 3>&1 1>&2 2>&3)
+ output=$(atuin ai inline --hook 3>&1 1>&2 2>&3)
# Clean up the inline viewport
_atuin_ai_cleanup
@@ -84,7 +84,7 @@ _atuin_ai_question_mark() {
READLINE_POINT=0
local output
- output=$(atuin-ai inline --natural-language 3>&1 1>&2 2>&3)
+ output=$(atuin ai inline --hook 3>&1 1>&2 2>&3)
if [[ $output == __atuin_ai_cancel__ ]]; then
# User cancelled, do nothing
@@ -142,8 +142,8 @@ function _atuin_ai_question_mark
if test -z "$buf" -o "$buf" = "?"
commandline -r ""
- # Run atuin-ai inline, swapping stdout and stderr
- set -l output (atuin-ai inline --natural-language 3>&1 1>&2 2>&3 | string collect)
+ # Run atuin ai inline, swapping stdout and stderr
+ set -l output (atuin ai inline --hook 3>&1 1>&2 2>&3 | string collect)
if test "$output" = "__atuin_ai_cancel__"
# User cancelled, do nothing
@@ -187,7 +187,7 @@ mod tests {
let result = generate_zsh_integration();
assert!(result.contains("_atuin_ai_question_mark"));
assert!(result.contains("bindkey"));
- assert!(result.contains("atuin-ai inline"));
+ assert!(result.contains("atuin ai inline --hook"));
assert!(result.contains("__atuin_ai_cancel__"));
assert!(result.contains("__atuin_ai_execute__"));
assert!(result.contains("__atuin_ai_insert__"));
@@ -199,7 +199,7 @@ mod tests {
assert!(result.contains("_atuin_ai_question_mark"));
assert!(result.contains("bind"));
assert!(result.contains("READLINE_LINE"));
- assert!(result.contains("atuin-ai inline"));
+ assert!(result.contains("atuin ai inline --hook"));
assert!(result.contains("__atuin_ai_cancel__"));
assert!(result.contains("__atuin_ai_execute__"));
assert!(result.contains("__atuin_ai_insert__"));
@@ -211,7 +211,7 @@ mod tests {
assert!(result.contains("_atuin_ai_question_mark"));
assert!(result.contains("bind"));
assert!(result.contains("commandline"));
- assert!(result.contains("atuin-ai inline"));
+ assert!(result.contains("atuin ai inline --hook"));
assert!(result.contains("__atuin_ai_cancel__"));
assert!(result.contains("__atuin_ai_execute__"));
assert!(result.contains("__atuin_ai_insert__"));
diff --git a/crates/atuin-ai/src/commands/inline.rs b/crates/atuin-ai/src/commands/inline.rs
index b49bfece..67241574 100644
--- a/crates/atuin-ai/src/commands/inline.rs
+++ b/crates/atuin-ai/src/commands/inline.rs
@@ -19,12 +19,12 @@ use tracing::{debug, error, info, trace};
pub async fn run(
initial_command: Option<String>,
- natural_language: bool,
api_endpoint: Option<String>,
api_token: Option<String>,
keep_output: bool,
debug_state_file: Option<String>,
settings: &atuin_client::settings::Settings,
+ output_for_hook: bool,
) -> Result<()> {
// Install panic hook once at entry point to ensure terminal restoration
install_panic_hook();
@@ -36,11 +36,11 @@ pub async fn run(
let endpoint = api_endpoint.as_deref().unwrap_or(
settings
.ai
- .ai_endpoint
+ .endpoint
.as_deref()
.unwrap_or("https://hub.atuin.sh"),
);
- let api_token = api_token.as_deref().or(settings.ai.ai_api_token.as_deref());
+ let api_token = api_token.as_deref().or(settings.ai.api_token.as_deref());
let token = if let Some(token) = &api_token {
token.to_string()
@@ -51,17 +51,13 @@ pub async fn run(
let action = run_inline_tui(
endpoint.to_string(),
token,
- if natural_language {
- None
- } else {
- initial_command
- },
+ initial_command,
keep_output,
debug_state_file,
settings,
)
.await?;
- emit_shell_result(action.0, &action.1);
+ emit_shell_result(action.0, &action.1, output_for_hook);
Ok(())
}
@@ -619,11 +615,19 @@ impl Drop for RawModeGuard {
}
}
-fn emit_shell_result(action: Action, command: &str) {
- match action {
- Action::Execute => eprintln!("__atuin_ai_execute__:{command}"),
- Action::Insert => eprintln!("__atuin_ai_insert__:{command}"),
- Action::Cancel => eprintln!("__atuin_ai_cancel__"),
+fn emit_shell_result(action: Action, command: &str, output_for_hook: bool) {
+ if output_for_hook {
+ match action {
+ Action::Execute => eprintln!("__atuin_ai_execute__:{command}"),
+ Action::Insert => eprintln!("__atuin_ai_insert__:{command}"),
+ Action::Cancel => eprintln!("__atuin_ai_cancel__"),
+ }
+ } else {
+ match action {
+ Action::Execute => eprintln!("{command}"),
+ Action::Insert => eprintln!("{command}"),
+ Action::Cancel => eprintln!(),
+ }
}
}