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::{actions, impl_actions, App};
 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        ToggleKeep,
 69        Reject,
 70        RejectAll,
 71        KeepAll
 72    ]
 73);
 74
 75#[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema)]
 76pub struct ManageProfiles {
 77    #[serde(default)]
 78    pub customize_tools: Option<Arc<str>>,
 79}
 80
 81impl ManageProfiles {
 82    pub fn customize_tools(profile_id: Arc<str>) -> Self {
 83        Self {
 84            customize_tools: Some(profile_id),
 85        }
 86    }
 87}
 88
 89impl_actions!(assistant, [ManageProfiles]);
 90
 91const NAMESPACE: &str = "assistant2";
 92
 93/// Initializes the `assistant2` crate.
 94pub fn init(
 95    fs: Arc<dyn Fs>,
 96    client: Arc<Client>,
 97    prompt_builder: Arc<PromptBuilder>,
 98    cx: &mut App,
 99) {
100    AssistantSettings::register(cx);
101    thread_store::init(cx);
102    assistant_panel::init(cx);
103
104    inline_assistant::init(
105        fs.clone(),
106        prompt_builder.clone(),
107        client.telemetry().clone(),
108        cx,
109    );
110    terminal_inline_assistant::init(
111        fs.clone(),
112        prompt_builder.clone(),
113        client.telemetry().clone(),
114        cx,
115    );
116    cx.observe_new(AddContextServerModal::register).detach();
117    cx.observe_new(ManageProfilesModal::register).detach();
118
119    feature_gate_assistant2_actions(cx);
120}
121
122fn feature_gate_assistant2_actions(cx: &mut App) {
123    CommandPaletteFilter::update_global(cx, |filter, _cx| {
124        filter.hide_namespace(NAMESPACE);
125    });
126
127    cx.observe_flag::<Assistant2FeatureFlag, _>(move |is_enabled, cx| {
128        if is_enabled {
129            CommandPaletteFilter::update_global(cx, |filter, _cx| {
130                filter.show_namespace(NAMESPACE);
131            });
132        } else {
133            CommandPaletteFilter::update_global(cx, |filter, _cx| {
134                filter.hide_namespace(NAMESPACE);
135            });
136        }
137    })
138    .detach();
139}