diff --git a/crates/assistant2/src/thread.rs b/crates/assistant2/src/thread.rs index df9b1c370cf2340d74322a73b1d096a00fc79840..c54ae4d7380d192ee75e1e075c14e3e9e9cab4a5 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 b2eaead980a5aacee0cc94e8976cd3e0cfb2645f..dd7458b75ba484b6f4494192c91df31b1baf2d8a 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 6a4ed439540c1f8282e1963020f408f694c51feb..eace3b6665ba6f1aec78b2968e759a973eb93636 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 1736f6bd9a6c2fab503885326ea3661e870fdb58..23fe6aa43dde53aea4e0114fd9e001e43c65522e 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 b12bc89a1fede0aad565b6519600043277d8f887..88775a30244712e0c5e5cd68a47a351442b35de7 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 90bfebe7a674b00a5d1f9871f216c7e21d63db27..d5dacb556c132e6c3dcd11b76a32cd1a77b6e66e 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 f8e660d213355f88d4e24fad636216b3b2f4fdb0..0880c42a0c638efd58f7a98dbd922263e1caa621 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;