diff --git a/crates/agent/src/assistant_panel.rs b/crates/agent/src/assistant_panel.rs index 1cbdc1e333..b3b7549afd 100644 --- a/crates/agent/src/assistant_panel.rs +++ b/crates/agent/src/assistant_panel.rs @@ -54,8 +54,8 @@ use crate::thread::{Thread, ThreadError, ThreadId, TokenUsageRatio}; use crate::thread_history::{PastContext, PastThread, ThreadHistory}; use crate::thread_store::{TextThreadStore, ThreadStore}; use crate::{ - AddContextServer, AgentDiffPane, DeleteRecentlyOpenThread, ExpandMessageEditor, Follow, - InlineAssistant, NewTextThread, NewThread, OpenActiveThreadAsMarkdown, OpenAgentDiff, + AddContextServer, AgentDiffPane, ContextStore, DeleteRecentlyOpenThread, ExpandMessageEditor, + Follow, InlineAssistant, NewTextThread, NewThread, OpenActiveThreadAsMarkdown, OpenAgentDiff, OpenHistory, ThreadEvent, ToggleContextPicker, ToggleNavigationMenu, ToggleOptionsMenu, }; @@ -315,6 +315,7 @@ pub struct AssistantPanel { _default_model_subscription: Subscription, context_store: Entity, prompt_store: Option>, + inline_assist_context_store: Entity, configuration: Option>, configuration_subscription: Option, local_timezone: UtcOffset, @@ -438,6 +439,12 @@ impl AssistantPanel { Some(thread_store.downgrade()), ) }); + let inline_assist_context_store = cx.new(|_cx| { + crate::context_store::ContextStore::new( + project.downgrade(), + Some(thread_store.downgrade()), + ) + }); let message_editor = cx.new(|cx| { MessageEditor::new( @@ -640,6 +647,7 @@ impl AssistantPanel { chrono::Local::now().offset().local_minus_utc(), ) .unwrap(), + inline_assist_context_store, previous_view: None, history_store: history_store.clone(), history: cx.new(|cx| ThreadHistory::new(weak_self, history_store, window, cx)), @@ -674,6 +682,12 @@ impl AssistantPanel { &self.prompt_store } + pub(crate) fn inline_assist_context_store( + &self, + ) -> &Entity { + &self.inline_assist_context_store + } + pub(crate) fn thread_store(&self) -> &Entity { &self.thread_store } @@ -2436,9 +2450,11 @@ impl rules_library::InlineAssistDelegate for PromptLibraryInlineAssist { let prompt_store = None; let thread_store = None; let text_thread_store = None; + let context_store = cx.new(|_| ContextStore::new(project.clone(), None)); assistant.assist( &prompt_editor, self.workspace.clone(), + context_store, project, prompt_store, thread_store, diff --git a/crates/agent/src/inline_assistant.rs b/crates/agent/src/inline_assistant.rs index d07126d64d..7800a56f2b 100644 --- a/crates/agent/src/inline_assistant.rs +++ b/crates/agent/src/inline_assistant.rs @@ -251,15 +251,15 @@ impl InlineAssistant { .map_or(false, |model| model.provider.is_authenticated(cx)) }; - let assistant_panel = workspace - .panel::(cx) - .map(|assistant_panel| assistant_panel.read(cx)); - let prompt_store = assistant_panel - .and_then(|assistant_panel| assistant_panel.prompt_store().as_ref().cloned()); - let thread_store = - assistant_panel.map(|assistant_panel| assistant_panel.thread_store().downgrade()); - let text_thread_store = - assistant_panel.map(|assistant_panel| assistant_panel.text_thread_store().downgrade()); + let Some(assistant_panel) = workspace.panel::(cx) else { + return; + }; + let assistant_panel = assistant_panel.read(cx); + + let prompt_store = assistant_panel.prompt_store().as_ref().cloned(); + let thread_store = Some(assistant_panel.thread_store().downgrade()); + let text_thread_store = Some(assistant_panel.text_thread_store().downgrade()); + let context_store = assistant_panel.inline_assist_context_store().clone(); let handle_assist = |window: &mut Window, cx: &mut Context| match inline_assist_target { @@ -268,6 +268,7 @@ impl InlineAssistant { assistant.assist( &active_editor, cx.entity().downgrade(), + context_store, workspace.project().downgrade(), prompt_store, thread_store, @@ -338,6 +339,7 @@ impl InlineAssistant { &mut self, editor: &Entity, workspace: WeakEntity, + context_store: Entity, project: WeakEntity, prompt_store: Option>, thread_store: Option>, @@ -447,8 +449,6 @@ impl InlineAssistant { let mut assist_to_focus = None; for range in codegen_ranges { let assist_id = self.next_assist_id.post_inc(); - let context_store = - cx.new(|_cx| ContextStore::new(project.clone(), thread_store.clone())); let codegen = cx.new(|cx| { BufferCodegen::new( editor.read(cx).buffer().clone(), @@ -472,7 +472,7 @@ impl InlineAssistant { prompt_buffer.clone(), codegen.clone(), self.fs.clone(), - context_store, + context_store.clone(), workspace.clone(), thread_store.clone(), text_thread_store.clone(),