assistant.rs

 1mod assistant_panel;
 2mod message_editor;
 3mod thread;
 4
 5use command_palette_hooks::CommandPaletteFilter;
 6use feature_flags::{Assistant2FeatureFlag, FeatureFlagAppExt};
 7use gpui::{actions, AppContext};
 8
 9pub use crate::assistant_panel::AssistantPanel;
10
11actions!(
12    assistant2,
13    [ToggleFocus, NewThread, ToggleModelSelector, Chat]
14);
15
16const NAMESPACE: &str = "assistant2";
17
18/// Initializes the `assistant2` crate.
19pub fn init(cx: &mut AppContext) {
20    assistant_panel::init(cx);
21    feature_gate_assistant2_actions(cx);
22}
23
24fn feature_gate_assistant2_actions(cx: &mut AppContext) {
25    const ASSISTANT1_NAMESPACE: &str = "assistant";
26
27    CommandPaletteFilter::update_global(cx, |filter, _cx| {
28        filter.hide_namespace(NAMESPACE);
29    });
30
31    cx.observe_flag::<Assistant2FeatureFlag, _>(move |is_enabled, cx| {
32        if is_enabled {
33            CommandPaletteFilter::update_global(cx, |filter, _cx| {
34                filter.show_namespace(NAMESPACE);
35                filter.hide_namespace(ASSISTANT1_NAMESPACE);
36            });
37        } else {
38            CommandPaletteFilter::update_global(cx, |filter, _cx| {
39                filter.hide_namespace(NAMESPACE);
40                filter.show_namespace(ASSISTANT1_NAMESPACE);
41            });
42        }
43    })
44    .detach();
45}