diff --git a/crates/assistant2/src/context.rs b/crates/assistant2/src/context.rs index 1aff6c982da1301941ba079888560a040998ab0a..096dbcab9c1bf336281334ab4ac77ab2a0e9e606 100644 --- a/crates/assistant2/src/context.rs +++ b/crates/assistant2/src/context.rs @@ -1,6 +1,7 @@ use gpui::SharedString; use language_model::{LanguageModelRequestMessage, MessageContent}; use serde::{Deserialize, Serialize}; +use ui::prelude::*; use util::post_inc; #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, Serialize, Deserialize)] @@ -19,6 +20,7 @@ pub struct Context { pub name: SharedString, pub kind: ContextKind, pub text: SharedString, + pub icon: IconName, } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -29,6 +31,17 @@ pub enum ContextKind { Thread, } +impl ContextKind { + pub fn icon(&self) -> IconName { + match self { + ContextKind::File => IconName::File, + ContextKind::Directory => IconName::Folder, + ContextKind::FetchedUrl => IconName::Globe, + ContextKind::Thread => IconName::MessageCircle, + } + } +} + pub fn attach_context_to_message( message: &mut LanguageModelRequestMessage, context: impl IntoIterator, diff --git a/crates/assistant2/src/context_store.rs b/crates/assistant2/src/context_store.rs index febd1f597dbfad52e2f4f5209e0efe1a7de9ef24..0a34e65881784f03b965b5029a9d30b7692b2aa8 100644 --- a/crates/assistant2/src/context_store.rs +++ b/crates/assistant2/src/context_store.rs @@ -36,8 +36,9 @@ impl ContextStore { self.context.push(Context { id: self.next_context_id.post_inc(), name: name.into(), - kind, + kind: kind.clone(), text: text.into(), + icon: kind.icon(), }); } diff --git a/crates/assistant2/src/ui/context_pill.rs b/crates/assistant2/src/ui/context_pill.rs index d2f020a582e31dbf879384e5f5221a899f88b023..768eddfc3f5b7435cd9ebcdfc02621424b928850 100644 --- a/crates/assistant2/src/ui/context_pill.rs +++ b/crates/assistant2/src/ui/context_pill.rs @@ -27,15 +27,26 @@ impl ContextPill { impl RenderOnce for ContextPill { fn render(self, cx: &mut WindowContext) -> impl IntoElement { + let padding_right = if self.on_remove.is_some() { + px(2.) + } else { + px(4.) + }; + h_flex() .gap_1() - .pl_1p5() - .pr_0p5() + .pl_1() + .pr(padding_right) .pb(px(1.)) .border_1() .border_color(cx.theme().colors().border.opacity(0.5)) .bg(cx.theme().colors().element_background) .rounded_md() + .child( + Icon::new(self.context.icon) + .size(IconSize::XSmall) + .color(Color::Muted), + ) .child(Label::new(self.context.name.clone()).size(LabelSize::Small)) .when_some(self.on_remove, |parent, on_remove| { parent.child(