assistant.rs

  1mod active_thread;
  2mod assistant_configuration;
  3mod assistant_diff;
  4mod assistant_model_selector;
  5mod assistant_panel;
  6mod buffer_codegen;
  7mod context;
  8mod context_picker;
  9mod context_store;
 10mod context_strip;
 11mod history_store;
 12mod inline_assistant;
 13mod inline_prompt_editor;
 14mod message_editor;
 15mod profile_selector;
 16mod terminal_codegen;
 17mod terminal_inline_assistant;
 18mod thread;
 19mod thread_history;
 20mod thread_store;
 21mod tool_use;
 22mod ui;
 23
 24use std::sync::Arc;
 25
 26use assistant_settings::AssistantSettings;
 27use client::Client;
 28use command_palette_hooks::CommandPaletteFilter;
 29use feature_flags::{Assistant2FeatureFlag, FeatureFlagAppExt};
 30use fs::Fs;
 31use gpui::{App, actions, impl_actions};
 32use prompt_store::PromptBuilder;
 33use schemars::JsonSchema;
 34use serde::Deserialize;
 35use settings::Settings as _;
 36
 37pub use crate::active_thread::ActiveThread;
 38use crate::assistant_configuration::{AddContextServerModal, ManageProfilesModal};
 39pub use crate::assistant_panel::{AssistantPanel, ConcreteAssistantPanelDelegate};
 40pub use crate::inline_assistant::InlineAssistant;
 41pub use crate::thread::{Message, RequestKind, Thread, ThreadEvent};
 42pub use crate::thread_store::ThreadStore;
 43pub use assistant_diff::{AssistantDiff, AssistantDiffToolbar};
 44
 45actions!(
 46    assistant2,
 47    [
 48        NewThread,
 49        NewPromptEditor,
 50        ToggleContextPicker,
 51        ToggleProfileSelector,
 52        RemoveAllContext,
 53        OpenHistory,
 54        OpenConfiguration,
 55        AddContextServer,
 56        RemoveSelectedThread,
 57        Chat,
 58        ChatMode,
 59        CycleNextInlineAssist,
 60        CyclePreviousInlineAssist,
 61        FocusUp,
 62        FocusDown,
 63        FocusLeft,
 64        FocusRight,
 65        RemoveFocusedContext,
 66        AcceptSuggestedContext,
 67        OpenActiveThreadAsMarkdown,
 68        OpenAssistantDiff,
 69        ToggleKeep,
 70        Reject,
 71        RejectAll,
 72        KeepAll
 73    ]
 74);
 75
 76#[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema)]
 77pub struct ManageProfiles {
 78    #[serde(default)]
 79    pub customize_tools: Option<Arc<str>>,
 80}
 81
 82impl ManageProfiles {
 83    pub fn customize_tools(profile_id: Arc<str>) -> Self {
 84        Self {
 85            customize_tools: Some(profile_id),
 86        }
 87    }
 88}
 89
 90impl_actions!(assistant, [ManageProfiles]);
 91
 92const NAMESPACE: &str = "assistant2";
 93
 94/// Initializes the `assistant2` crate.
 95pub fn init(
 96    fs: Arc<dyn Fs>,
 97    client: Arc<Client>,
 98    prompt_builder: Arc<PromptBuilder>,
 99    cx: &mut App,
100) {
101    AssistantSettings::register(cx);
102    thread_store::init(cx);
103    assistant_panel::init(cx);
104
105    inline_assistant::init(
106        fs.clone(),
107        prompt_builder.clone(),
108        client.telemetry().clone(),
109        cx,
110    );
111    terminal_inline_assistant::init(
112        fs.clone(),
113        prompt_builder.clone(),
114        client.telemetry().clone(),
115        cx,
116    );
117    cx.observe_new(AddContextServerModal::register).detach();
118    cx.observe_new(ManageProfilesModal::register).detach();
119
120    feature_gate_assistant2_actions(cx);
121}
122
123fn feature_gate_assistant2_actions(cx: &mut App) {
124    CommandPaletteFilter::update_global(cx, |filter, _cx| {
125        filter.hide_namespace(NAMESPACE);
126    });
127
128    cx.observe_flag::<Assistant2FeatureFlag, _>(move |is_enabled, cx| {
129        if is_enabled {
130            CommandPaletteFilter::update_global(cx, |filter, _cx| {
131                filter.show_namespace(NAMESPACE);
132            });
133        } else {
134            CommandPaletteFilter::update_global(cx, |filter, _cx| {
135                filter.hide_namespace(NAMESPACE);
136            });
137        }
138    })
139    .detach();
140}