Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion crates/acp_thread/src/acp_thread.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1704,7 +1704,7 @@ impl AcpThread {
config_options,
..
}) => cx.emit(AcpThreadEvent::ConfigOptionsUpdated(config_options)),
acp::SessionUpdate::UsageUpdate(update) if cx.has_flag::<AcpBetaFeatureFlag>() => {
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;
Expand Down
2 changes: 1 addition & 1 deletion crates/acp_thread/src/connection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@ pub trait AgentSessionList {
cx: &mut App,
) -> Task<Result<AgentSessionListResponse>>;

fn supports_delete(&self, _cx: &App) -> bool {
fn supports_delete(&self) -> bool {
false
}

Expand Down
2 changes: 1 addition & 1 deletion crates/agent/src/agent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
93 changes: 3 additions & 90 deletions crates/agent_servers/src/acp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -609,12 +609,12 @@ impl AgentSessionList for AcpSessionList {
})
}

fn supports_delete(&self, cx: &App) -> bool {
self.supports_delete && cx.has_flag::<AcpBetaFeatureFlag>()
fn supports_delete(&self) -> bool {
self.supports_delete
}

fn delete_session(&self, session_id: &acp::SessionId, cx: &mut App) -> Task<Result<()>> {
if !self.supports_delete(cx) {
if !self.supports_delete() {
return Task::ready(Err(anyhow::anyhow!("delete_session not supported")));
}

Expand Down Expand Up @@ -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]
Expand Down Expand Up @@ -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::FeatureFlagsSettings>();
});
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<acp::SessionInfo>,
cx: &mut gpui::TestAppContext,
Expand Down Expand Up @@ -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::<AcpBetaFeatureFlag>()
);
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<std::sync::Mutex<Vec<acp::SessionId>>>,
cx: &mut gpui::TestAppContext,
Expand Down Expand Up @@ -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");
Expand All @@ -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
Expand All @@ -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::<AcpBetaFeatureFlag>()));

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(
Expand Down
21 changes: 8 additions & 13 deletions crates/agent_ui/src/conversation_view/thread_view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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::<AcpBetaFeatureFlag>() {
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 {
Expand Down
2 changes: 1 addition & 1 deletion crates/agent_ui/src/threads_archive_view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Loading