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