diff --git a/crates/assistant2/src/thread.rs b/crates/assistant2/src/thread.rs index df9b1c370c..c54ae4d738 100644 --- a/crates/assistant2/src/thread.rs +++ b/crates/assistant2/src/thread.rs @@ -5,7 +5,7 @@ use assistant_tool::ToolWorkingSet; use chrono::{DateTime, Utc}; use collections::{BTreeMap, HashMap, HashSet}; use futures::StreamExt as _; -use gpui::{App, Context, Entity, EventEmitter, SharedString, Task, WeakEntity}; +use gpui::{App, Context, Entity, EventEmitter, SharedString, Task}; use language_model::{ LanguageModel, LanguageModelCompletionEvent, LanguageModelRegistry, LanguageModelRequest, LanguageModelRequestMessage, LanguageModelRequestTool, LanguageModelToolResult, @@ -72,7 +72,7 @@ pub struct Thread { context_by_message: HashMap>, completion_count: usize, pending_completions: Vec, - project: WeakEntity, + project: Entity, tools: Arc, tool_use: ToolUseState, } @@ -94,7 +94,7 @@ impl Thread { context_by_message: HashMap::default(), completion_count: 0, pending_completions: Vec::new(), - project: project.downgrade(), + project, tools, tool_use: ToolUseState::new(), } @@ -135,7 +135,7 @@ impl Thread { context_by_message: HashMap::default(), completion_count: 0, pending_completions: Vec::new(), - project: project.downgrade(), + project, tools, tool_use, } diff --git a/crates/assistant_tool/src/assistant_tool.rs b/crates/assistant_tool/src/assistant_tool.rs index b2eaead980..dd7458b75b 100644 --- a/crates/assistant_tool/src/assistant_tool.rs +++ b/crates/assistant_tool/src/assistant_tool.rs @@ -4,7 +4,7 @@ mod tool_working_set; use std::sync::Arc; use anyhow::Result; -use gpui::{App, Task, WeakEntity}; +use gpui::{App, Entity, Task}; use project::Project; pub use crate::tool_registry::*; @@ -31,7 +31,7 @@ pub trait Tool: 'static + Send + Sync { fn run( self: Arc, input: serde_json::Value, - project: WeakEntity, + project: Entity, cx: &mut App, ) -> Task>; } diff --git a/crates/assistant_tools/src/list_worktrees_tool.rs b/crates/assistant_tools/src/list_worktrees_tool.rs index 6a4ed43954..eace3b6665 100644 --- a/crates/assistant_tools/src/list_worktrees_tool.rs +++ b/crates/assistant_tools/src/list_worktrees_tool.rs @@ -1,8 +1,8 @@ use std::sync::Arc; -use anyhow::{anyhow, Result}; +use anyhow::Result; use assistant_tool::Tool; -use gpui::{App, Task, WeakEntity}; +use gpui::{App, Entity, Task}; use project::Project; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; @@ -34,13 +34,9 @@ impl Tool for ListWorktreesTool { fn run( self: Arc, _input: serde_json::Value, - project: WeakEntity, + project: Entity, cx: &mut App, ) -> Task> { - let Some(project) = project.upgrade() else { - return Task::ready(Err(anyhow!("project dropped"))); - }; - cx.spawn(|cx| async move { cx.update(|cx| { #[derive(Debug, Serialize)] diff --git a/crates/assistant_tools/src/now_tool.rs b/crates/assistant_tools/src/now_tool.rs index 1736f6bd9a..23fe6aa43d 100644 --- a/crates/assistant_tools/src/now_tool.rs +++ b/crates/assistant_tools/src/now_tool.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use anyhow::{anyhow, Result}; use assistant_tool::Tool; use chrono::{Local, Utc}; -use gpui::{App, Task, WeakEntity}; +use gpui::{App, Entity, Task}; use project::Project; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; @@ -42,7 +42,7 @@ impl Tool for NowTool { fn run( self: Arc, input: serde_json::Value, - _project: WeakEntity, + _project: Entity, _cx: &mut App, ) -> Task> { let input: NowToolInput = match serde_json::from_value(input) { diff --git a/crates/assistant_tools/src/read_file_tool.rs b/crates/assistant_tools/src/read_file_tool.rs index b12bc89a1f..88775a3024 100644 --- a/crates/assistant_tools/src/read_file_tool.rs +++ b/crates/assistant_tools/src/read_file_tool.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use anyhow::{anyhow, Result}; use assistant_tool::Tool; -use gpui::{App, Task, WeakEntity}; +use gpui::{App, Entity, Task}; use project::{Project, ProjectPath, WorktreeId}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; @@ -37,13 +37,9 @@ impl Tool for ReadFileTool { fn run( self: Arc, input: serde_json::Value, - project: WeakEntity, + project: Entity, cx: &mut App, ) -> Task> { - let Some(project) = project.upgrade() else { - return Task::ready(Err(anyhow!("project dropped"))); - }; - let input = match serde_json::from_value::(input) { Ok(input) => input, Err(err) => return Task::ready(Err(anyhow!(err))), diff --git a/crates/context_server/src/context_server_tool.rs b/crates/context_server/src/context_server_tool.rs index 90bfebe7a6..d5dacb556c 100644 --- a/crates/context_server/src/context_server_tool.rs +++ b/crates/context_server/src/context_server_tool.rs @@ -1,8 +1,9 @@ use std::sync::Arc; -use anyhow::{anyhow, bail}; +use anyhow::{anyhow, bail, Result}; use assistant_tool::Tool; use gpui::{App, Entity, Task}; +use project::Project; use crate::manager::ContextServerManager; use crate::types; @@ -49,11 +50,11 @@ impl Tool for ContextServerTool { } fn run( - self: std::sync::Arc, + self: Arc, input: serde_json::Value, - _project: gpui::WeakEntity, + _project: Entity, cx: &mut App, - ) -> gpui::Task> { + ) -> Task> { if let Some(server) = self.server_manager.read(cx).get_server(&self.server_id) { cx.foreground_executor().spawn({ let tool_name = self.tool.name.clone(); diff --git a/crates/scripting_tool/src/scripting_tool.rs b/crates/scripting_tool/src/scripting_tool.rs index f8e660d213..0880c42a0c 100644 --- a/crates/scripting_tool/src/scripting_tool.rs +++ b/crates/scripting_tool/src/scripting_tool.rs @@ -4,7 +4,7 @@ use project::Project; pub(crate) use session::*; use assistant_tool::{Tool, ToolRegistry}; -use gpui::{App, AppContext as _, Task, WeakEntity}; +use gpui::{App, AppContext as _, Entity, Task}; use schemars::JsonSchema; use serde::Deserialize; use std::sync::Arc; @@ -38,16 +38,13 @@ impl Tool for ScriptingTool { fn run( self: Arc, input: serde_json::Value, - project: WeakEntity, + project: Entity, cx: &mut App, ) -> Task> { let input = match serde_json::from_value::(input) { Err(err) => return Task::ready(Err(err.into())), Ok(input) => input, }; - let Some(project) = project.upgrade() else { - return Task::ready(Err(anyhow::anyhow!("project dropped"))); - }; let session = cx.new(|cx| Session::new(project, cx)); let lua_script = input.lua_script;