assistant.rs

  1mod active_thread;
  2mod assistant_configuration;
  3mod assistant_model_selector;
  4mod assistant_panel;
  5mod buffer_codegen;
  6mod context;
  7mod context_picker;
  8mod context_store;
  9mod context_strip;
 10mod inline_assistant;
 11mod inline_prompt_editor;
 12mod message_editor;
 13mod terminal_codegen;
 14mod terminal_inline_assistant;
 15mod thread;
 16mod thread_history;
 17mod thread_store;
 18mod ui;
 19
 20use std::sync::Arc;
 21
 22use assistant_settings::AssistantSettings;
 23use client::Client;
 24use command_palette_hooks::CommandPaletteFilter;
 25use feature_flags::{Assistant2FeatureFlag, FeatureFlagAppExt};
 26use fs::Fs;
 27use gpui::{actions, AppContext};
 28use prompt_library::{PromptBuilder, PromptLoadingParams};
 29use settings::Settings as _;
 30use util::ResultExt;
 31
 32pub use crate::assistant_panel::{AssistantPanel, ConcreteAssistantPanelDelegate};
 33pub use crate::inline_assistant::InlineAssistant;
 34
 35actions!(
 36    assistant2,
 37    [
 38        NewThread,
 39        NewPromptEditor,
 40        ToggleContextPicker,
 41        ToggleModelSelector,
 42        RemoveAllContext,
 43        OpenHistory,
 44        OpenPromptEditorHistory,
 45        OpenConfiguration,
 46        RemoveSelectedThread,
 47        Chat,
 48        ChatMode,
 49        CycleNextInlineAssist,
 50        CyclePreviousInlineAssist,
 51        FocusUp,
 52        FocusDown,
 53        FocusLeft,
 54        FocusRight,
 55        RemoveFocusedContext,
 56        AcceptSuggestedContext
 57    ]
 58);
 59
 60const NAMESPACE: &str = "assistant2";
 61
 62/// Initializes the `assistant2` crate.
 63pub fn init(fs: Arc<dyn Fs>, client: Arc<Client>, stdout_is_a_pty: bool, cx: &mut AppContext) {
 64    AssistantSettings::register(cx);
 65    assistant_panel::init(cx);
 66
 67    let prompt_builder = PromptBuilder::new(Some(PromptLoadingParams {
 68        fs: fs.clone(),
 69        repo_path: stdout_is_a_pty
 70            .then(|| std::env::current_dir().log_err())
 71            .flatten(),
 72        cx,
 73    }))
 74    .log_err()
 75    .map(Arc::new)
 76    .unwrap_or_else(|| Arc::new(PromptBuilder::new(None).unwrap()));
 77    inline_assistant::init(
 78        fs.clone(),
 79        prompt_builder.clone(),
 80        client.telemetry().clone(),
 81        cx,
 82    );
 83    terminal_inline_assistant::init(
 84        fs.clone(),
 85        prompt_builder.clone(),
 86        client.telemetry().clone(),
 87        cx,
 88    );
 89
 90    feature_gate_assistant2_actions(cx);
 91}
 92
 93fn feature_gate_assistant2_actions(cx: &mut AppContext) {
 94    CommandPaletteFilter::update_global(cx, |filter, _cx| {
 95        filter.hide_namespace(NAMESPACE);
 96    });
 97
 98    cx.observe_flag::<Assistant2FeatureFlag, _>(move |is_enabled, cx| {
 99        if is_enabled {
100            CommandPaletteFilter::update_global(cx, |filter, _cx| {
101                filter.show_namespace(NAMESPACE);
102            });
103        } else {
104            CommandPaletteFilter::update_global(cx, |filter, _cx| {
105                filter.hide_namespace(NAMESPACE);
106            });
107        }
108    })
109    .detach();
110}