aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-ai/src/commands/inline.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/atuin-ai/src/commands/inline.rs')
-rw-r--r--crates/atuin-ai/src/commands/inline.rs29
1 files changed, 28 insertions, 1 deletions
diff --git a/crates/atuin-ai/src/commands/inline.rs b/crates/atuin-ai/src/commands/inline.rs
index b7aae51f..e0a92ab4 100644
--- a/crates/atuin-ai/src/commands/inline.rs
+++ b/crates/atuin-ai/src/commands/inline.rs
@@ -175,7 +175,7 @@ async fn run_inline_tui(
.find_resumable(cwd.as_deref(), git_root_str.as_deref(), max_age_secs)
.await?;
- let (mut session_mgr, initial_state) = if let Some(stored) = resumable {
+ let (mut session_mgr, mut initial_state) = if let Some(stored) = resumable {
debug!(session_id = %stored.id, "resuming AI session");
let (mgr, events, server_sid, last_event_ts, invocation_id) =
SessionManager::resume(Box::new(service), &stored).await?;
@@ -199,6 +199,23 @@ async fn run_inline_tui(
session.is_resumed = true;
session.last_event_time =
last_event_ts.and_then(|ts| chrono::DateTime::from_timestamp(ts, 0));
+
+ // Restore file read tracker from session metadata
+ if let Ok(Some(json)) = mgr.get_metadata(crate::file_tracker::METADATA_KEY).await
+ && let Ok(tracker) = crate::file_tracker::FileReadTracker::from_json(&json)
+ {
+ session.file_tracker = tracker;
+ }
+
+ // Restore edit permission grants from session metadata
+ if let Ok(Some(json)) = mgr
+ .get_metadata(crate::edit_permissions::METADATA_KEY)
+ .await
+ && let Ok(cache) = crate::edit_permissions::EditPermissionCache::from_json(&json)
+ {
+ session.edit_permissions = cache;
+ }
+
(mgr, session)
} else {
// No meaningful content — treat as a fresh session
@@ -215,6 +232,16 @@ async fn run_inline_tui(
(mgr, Session::new(ctx.git_root.is_some(), None))
};
+ // Initialize the snapshot store now that we know the session ID.
+ let snapshot_dir = atuin_common::utils::data_dir()
+ .join("ai")
+ .join("snapshots")
+ .join(session_mgr.session_id());
+ match crate::snapshots::SnapshotStore::open(snapshot_dir) {
+ Ok(store) => initial_state.snapshot_store = Some(store),
+ Err(e) => tracing::warn!("failed to open snapshot store: {e}"),
+ }
+
let (tx, rx) = mpsc::channel::<AiTuiEvent>();
println!();