diff --git a/Cargo.lock b/Cargo.lock index ad5a8a9b63ec8f..ecca09174c8d85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -307,9 +307,9 @@ dependencies = [ [[package]] name = "agent-client-protocol" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d197653697b91b3a2cfb579d061a3388cda9fdc79cb6f9393da65cbad46baf8" +checksum = "5efba6592048ef8a9ac97de8d79b2d9933d8ac4d94f7a2de102348fed0c61103" dependencies = [ "agent-client-protocol-derive", "agent-client-protocol-schema", @@ -329,9 +329,9 @@ dependencies = [ [[package]] name = "agent-client-protocol-derive" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e4fbf6733a900814fb921b2aac06612e15b42020b76a356fbc1192e725cebc" +checksum = "4d176a10d4cb06e0262a738c3c5bf21ff0968db13a666e31cbca94a3d3d72e7c" dependencies = [ "quote", "syn 2.0.117", @@ -339,9 +339,9 @@ dependencies = [ [[package]] name = "agent-client-protocol-schema" -version = "0.13.5" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d419a87e28240978e4bfdf2a5b91bccb95ae8d5b06e10721bb07c449b9f43dd" +checksum = "c290bfa00c6b52339db66f8e9cf711d5f08530800529f7d619ff24d6cba253d0" dependencies = [ "anyhow", "derive_more", diff --git a/Cargo.toml b/Cargo.toml index f9872bea55e664..037afc59bfe16c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -502,7 +502,7 @@ accesskit = "0.24.0" accesskit_macos = "0.26.0" accesskit_unix = "0.21.0" accesskit_windows = "0.32.1" -agent-client-protocol = { version = "=0.13.1", features = ["unstable"] } +agent-client-protocol = { version = "=0.14.0", features = ["unstable"] } aho-corasick = "1.1" alacritty_terminal = { git = "https://github.com/zed-industries/alacritty", rev = "fcf32feacb367b75ec84dd40f041e4fd411d3cc1" } any_vec = "0.14" diff --git a/crates/acp_thread/src/acp_thread.rs b/crates/acp_thread/src/acp_thread.rs index 72e77f1615a076..e3fcf7ac4fa625 100644 --- a/crates/acp_thread/src/acp_thread.rs +++ b/crates/acp_thread/src/acp_thread.rs @@ -1704,7 +1704,7 @@ impl AcpThread { config_options, .. }) => cx.emit(AcpThreadEvent::ConfigOptionsUpdated(config_options)), - acp::SessionUpdate::UsageUpdate(update) if cx.has_flag::() => { + acp::SessionUpdate::UsageUpdate(update) => { let usage = self.token_usage.get_or_insert_with(Default::default); usage.max_tokens = update.size; usage.used_tokens = update.used; diff --git a/crates/acp_thread/src/connection.rs b/crates/acp_thread/src/connection.rs index e572d5e7e007cd..0f3abe1f9b507a 100644 --- a/crates/acp_thread/src/connection.rs +++ b/crates/acp_thread/src/connection.rs @@ -366,7 +366,7 @@ pub trait AgentSessionList { cx: &mut App, ) -> Task>; - fn supports_delete(&self, _cx: &App) -> bool { + fn supports_delete(&self) -> bool { false } diff --git a/crates/agent/src/agent.rs b/crates/agent/src/agent.rs index ddf90cfa7381c5..f78c0d2e675a18 100644 --- a/crates/agent/src/agent.rs +++ b/crates/agent/src/agent.rs @@ -2676,7 +2676,7 @@ impl AgentSessionList for NativeAgentSessionList { Task::ready(Ok(AgentSessionListResponse::new(sessions))) } - fn supports_delete(&self, _cx: &App) -> bool { + fn supports_delete(&self) -> bool { true } diff --git a/crates/agent_servers/src/acp.rs b/crates/agent_servers/src/acp.rs index 52d00208820ecb..d85f285437ef31 100644 --- a/crates/agent_servers/src/acp.rs +++ b/crates/agent_servers/src/acp.rs @@ -609,12 +609,12 @@ impl AgentSessionList for AcpSessionList { }) } - fn supports_delete(&self, cx: &App) -> bool { - self.supports_delete && cx.has_flag::() + fn supports_delete(&self) -> bool { + self.supports_delete } fn delete_session(&self, session_id: &acp::SessionId, cx: &mut App) -> Task> { - if !self.supports_delete(cx) { + if !self.supports_delete() { return Task::ready(Err(anyhow::anyhow!("delete_session not supported"))); } @@ -2484,10 +2484,7 @@ pub mod test_support { mod tests { use std::sync::atomic::{AtomicUsize, Ordering}; - use feature_flags::FeatureFlag as _; - use super::*; - use gpui::UpdateGlobal as _; use settings::Settings as _; #[test] @@ -2788,25 +2785,6 @@ mod tests { ); } - fn set_acp_beta_override(cx: &mut App, value: &str) { - let store = settings::SettingsStore::test(cx); - cx.set_global(store); - settings::SettingsStore::update_global(cx, |store, _| { - store.register_setting::(); - }); - feature_flags::FeatureFlagStore::init(cx); - - let value = value.to_string(); - settings::SettingsStore::update_global(cx, |store, cx| { - store.update_user_settings(cx, |content| { - content - .feature_flags - .get_or_insert_default() - .insert(AcpBetaFeatureFlag::NAME.to_string(), value); - }); - }); - } - async fn connect_session_list_test_agent( sessions: Vec, cx: &mut gpui::TestAppContext, @@ -2891,31 +2869,6 @@ mod tests { ); } - #[gpui::test] - async fn session_delete_support_requires_beta_flag_and_capability( - cx: &mut gpui::TestAppContext, - ) { - let deleted_sessions = Arc::new(std::sync::Mutex::new(Vec::new())); - let connection = connect_session_delete_test_agent(deleted_sessions, cx).await; - let session_list = AcpSessionList::new(connection.clone(), true); - let missing_capability = AcpSessionList::new(connection, false); - - cx.update(|cx| { - let store = settings::SettingsStore::test(cx); - cx.set_global(store); - - assert_eq!( - session_list.supports_delete(cx), - cx.has_flag::() - ); - assert!(!missing_capability.supports_delete(cx)); - - cx.update_flags(false, vec![AcpBetaFeatureFlag::NAME.to_string()]); - assert!(session_list.supports_delete(cx)); - assert!(!missing_capability.supports_delete(cx)); - }); - } - async fn connect_session_delete_test_agent( deleted_sessions: Arc>>, cx: &mut gpui::TestAppContext, @@ -3022,11 +2975,6 @@ mod tests { let session_list = AcpSessionList::new(connection, true); let session_id = acp::SessionId::new("session-to-delete"); - cx.update(|cx| { - let store = settings::SettingsStore::test(cx); - cx.set_global(store); - cx.update_flags(false, vec![AcpBetaFeatureFlag::NAME.to_string()]); - }); cx.update(|cx| session_list.delete_session(&session_id, cx)) .await .expect("delete_session failed"); @@ -3046,11 +2994,6 @@ mod tests { let session_list = AcpSessionList::new(connection, false); let session_id = acp::SessionId::new("session-to-delete"); - cx.update(|cx| { - let store = settings::SettingsStore::test(cx); - cx.set_global(store); - cx.update_flags(false, vec![AcpBetaFeatureFlag::NAME.to_string()]); - }); let error = cx .update(|cx| session_list.delete_session(&session_id, cx)) .await @@ -3068,36 +3011,6 @@ mod tests { ); } - #[gpui::test] - async fn logout_support_requires_agent_capability(cx: &mut gpui::TestAppContext) { - cx.update(|cx| set_acp_beta_override(cx, "off")); - assert!(!cx.update(|cx| cx.has_flag::())); - - let fs = fs::FakeFs::new(cx.executor()); - fs.insert_tree("/", serde_json::json!({ "a": {} })).await; - let project = project::Project::test(fs, [std::path::Path::new("/a")], cx).await; - let mut harness = test_support::connect_fake_acp_connection(project, cx).await; - - assert!(!harness.connection.supports_logout()); - let unsupported_logout = cx.update(|cx| harness.connection.logout(cx)); - let error = unsupported_logout - .await - .expect_err("logout should be rejected when the agent does not advertise support"); - assert_eq!(error.to_string(), "Logout is not supported by this agent."); - assert_eq!(harness.logout_count.load(Ordering::SeqCst), 0); - - Rc::get_mut(&mut harness.connection) - .expect("test harness should own the only ACP connection handle") - .agent_capabilities - .auth = acp::AgentAuthCapabilities::new().logout(acp::LogoutCapabilities::new()); - - assert!(harness.connection.supports_logout()); - cx.update(|cx| harness.connection.logout(cx)) - .await - .expect("logout should be sent when the agent advertises support"); - assert_eq!(harness.logout_count.load(Ordering::SeqCst), 1); - } - #[cfg(not(windows))] #[gpui::test] async fn startup_returns_error_when_agent_exits_before_initialization( diff --git a/crates/agent_ui/src/conversation_view/thread_view.rs b/crates/agent_ui/src/conversation_view/thread_view.rs index e0a72ee77ed0a2..710a368314a967 100644 --- a/crates/agent_ui/src/conversation_view/thread_view.rs +++ b/crates/agent_ui/src/conversation_view/thread_view.rs @@ -12,7 +12,6 @@ use agent::{SkillLoadingError, SkillLoadingErrorsUpdated}; use agent_settings::UserAgentsMd; use cloud_api_types::{SubmitAgentThreadFeedbackBody, SubmitAgentThreadFeedbackCommentsBody}; use editor::actions::OpenExcerpts; -use feature_flags::AcpBetaFeatureFlag; use crate::completion_provider::AvailableSkill; use crate::message_editor::SharedSessionCapabilities; @@ -4163,18 +4162,14 @@ impl ThreadView { let usage = thread.token_usage()?; let show_split = self.supports_split_token_display(cx); - let cost_label = if cx.has_flag::() { - thread.cost().map(|cost| { - let precision = if cost.amount > 0.0 && cost.amount < 0.01 { - 4 - } else { - 2 - }; - format!("{:.prec$} {}", cost.amount, cost.currency, prec = precision) - }) - } else { - None - }; + let cost_label = thread.cost().map(|cost| { + let precision = if cost.amount > 0.0 && cost.amount < 0.01 { + 4 + } else { + 2 + }; + format!("{:.prec$} {}", cost.amount, cost.currency, prec = precision) + }); let progress_color = |ratio: f32| -> Hsla { if ratio >= 0.85 { diff --git a/crates/agent_ui/src/threads_archive_view.rs b/crates/agent_ui/src/threads_archive_view.rs index a86c902443ce9a..e04ab5a940c228 100644 --- a/crates/agent_ui/src/threads_archive_view.rs +++ b/crates/agent_ui/src/threads_archive_view.rs @@ -824,7 +824,7 @@ impl ThreadsArchiveView { if let Some(list) = state .connection .session_list(cx) - .filter(|list| list.supports_delete(cx)) + .filter(|list| list.supports_delete()) { list.delete_session(session_id, cx) } else {