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