diff options
Diffstat (limited to 'crates/atuin-ai/src/user_context/mod.rs')
| -rw-r--r-- | crates/atuin-ai/src/user_context/mod.rs | 68 |
1 files changed, 0 insertions, 68 deletions
diff --git a/crates/atuin-ai/src/user_context/mod.rs b/crates/atuin-ai/src/user_context/mod.rs deleted file mode 100644 index fdeb890b..00000000 --- a/crates/atuin-ai/src/user_context/mod.rs +++ /dev/null @@ -1,68 +0,0 @@ -//! User-authored context files (`TERMINAL.md`). -//! -//! Context files are markdown documents that can embed shell commands for -//! dynamic content. Before each API request, context files are discovered -//! by walking the filesystem, commands are executed, and the interpolated -//! content is sent to the server as `config.user_contexts`. - -pub(crate) mod interpolate; -mod walker; - -use std::path::Path; - -pub(crate) use walker::global_context_path; - -/// A fully resolved user context, ready to include in an API request. -#[derive(Debug, Clone, serde::Serialize)] -pub(crate) struct UserContext { - /// The path to the context file on disk. - pub path: String, - /// The interpolated content. - pub data: String, -} - -/// Discover context files and interpolate embedded commands. -/// -/// Walks from `start` up to the filesystem root looking for -/// `.atuin/ai-context.md`, then checks `global_path`. Returns contexts -/// ordered from most general (global/root) to most specific (deepest). -pub(crate) async fn gather( - start: &Path, - global_path: Option<&Path>, - shell: &str, -) -> Vec<UserContext> { - let raw_files = match walker::walk(start, global_path).await { - Ok(files) => files, - Err(e) => { - tracing::warn!("Failed to walk for context files: {e}"); - return Vec::new(); - } - }; - - if raw_files.is_empty() { - return Vec::new(); - } - - // Interpolate all files in parallel. - let mut handles = Vec::with_capacity(raw_files.len()); - for file in raw_files { - let shell = shell.to_string(); - handles.push(tokio::spawn(async move { - let data = interpolate::interpolate(&file.content, &shell).await; - UserContext { - path: file.path.to_string_lossy().to_string(), - data, - } - })); - } - - let mut contexts = Vec::with_capacity(handles.len()); - for handle in handles { - match handle.await { - Ok(ctx) => contexts.push(ctx), - Err(e) => tracing::warn!("Context interpolation task failed: {e}"), - } - } - - contexts -} |
