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}