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, App};
 32use prompt_store::PromptBuilder;
 33use settings::Settings as _;
 34
 35pub use crate::active_thread::ActiveThread;
 36use crate::assistant_configuration::{AddContextServerModal, ManageProfilesModal};
 37pub use crate::assistant_panel::{AssistantPanel, ConcreteAssistantPanelDelegate};
 38pub use crate::inline_assistant::InlineAssistant;
 39pub use crate::thread::{Message, RequestKind, Thread, ThreadEvent};
 40pub use crate::thread_store::ThreadStore;
 41pub use assistant_diff::AssistantDiff;
 42
 43actions!(
 44    assistant2,
 45    [
 46        NewThread,
 47        NewPromptEditor,
 48        ToggleContextPicker,
 49        ToggleProfileSelector,
 50        RemoveAllContext,
 51        OpenHistory,
 52        OpenConfiguration,
 53        ManageProfiles,
 54        AddContextServer,
 55        RemoveSelectedThread,
 56        Chat,
 57        ChatMode,
 58        CycleNextInlineAssist,
 59        CyclePreviousInlineAssist,
 60        FocusUp,
 61        FocusDown,
 62        FocusLeft,
 63        FocusRight,
 64        RemoveFocusedContext,
 65        AcceptSuggestedContext,
 66        OpenActiveThreadAsMarkdown,
 67        ToggleKeep,
 68        Reject
 69    ]
 70);
 71
 72const NAMESPACE: &str = "assistant2";
 73
 74/// Initializes the `assistant2` crate.
 75pub fn init(
 76    fs: Arc<dyn Fs>,
 77    client: Arc<Client>,
 78    prompt_builder: Arc<PromptBuilder>,
 79    cx: &mut App,
 80) {
 81    AssistantSettings::register(cx);
 82    thread_store::init(cx);
 83    assistant_panel::init(cx);
 84
 85    inline_assistant::init(
 86        fs.clone(),
 87        prompt_builder.clone(),
 88        client.telemetry().clone(),
 89        cx,
 90    );
 91    terminal_inline_assistant::init(
 92        fs.clone(),
 93        prompt_builder.clone(),
 94        client.telemetry().clone(),
 95        cx,
 96    );
 97    cx.observe_new(AddContextServerModal::register).detach();
 98    cx.observe_new(ManageProfilesModal::register).detach();
 99
100    feature_gate_assistant2_actions(cx);
101}
102
103fn feature_gate_assistant2_actions(cx: &mut App) {
104    CommandPaletteFilter::update_global(cx, |filter, _cx| {
105        filter.hide_namespace(NAMESPACE);
106    });
107
108    cx.observe_flag::<Assistant2FeatureFlag, _>(move |is_enabled, cx| {
109        if is_enabled {
110            CommandPaletteFilter::update_global(cx, |filter, _cx| {
111                filter.show_namespace(NAMESPACE);
112            });
113        } else {
114            CommandPaletteFilter::update_global(cx, |filter, _cx| {
115                filter.hide_namespace(NAMESPACE);
116            });
117        }
118    })
119    .detach();
120}