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 RemoveAllContext,
48 OpenHistory,
49 OpenConfiguration,
50 ManageProfiles,
51 AddContextServer,
52 RemoveSelectedThread,
53 Chat,
54 ChatMode,
55 CycleNextInlineAssist,
56 CyclePreviousInlineAssist,
57 FocusUp,
58 FocusDown,
59 FocusLeft,
60 FocusRight,
61 RemoveFocusedContext,
62 AcceptSuggestedContext,
63 OpenActiveThreadAsMarkdown
64 ]
65);
66
67const NAMESPACE: &str = "assistant2";
68
69/// Initializes the `assistant2` crate.
70pub fn init(
71 fs: Arc<dyn Fs>,
72 client: Arc<Client>,
73 prompt_builder: Arc<PromptBuilder>,
74 cx: &mut App,
75) {
76 AssistantSettings::register(cx);
77 thread_store::init(cx);
78 assistant_panel::init(cx);
79
80 inline_assistant::init(
81 fs.clone(),
82 prompt_builder.clone(),
83 client.telemetry().clone(),
84 cx,
85 );
86 terminal_inline_assistant::init(
87 fs.clone(),
88 prompt_builder.clone(),
89 client.telemetry().clone(),
90 cx,
91 );
92 cx.observe_new(AddContextServerModal::register).detach();
93 cx.observe_new(ManageProfilesModal::register).detach();
94
95 feature_gate_assistant2_actions(cx);
96}
97
98fn feature_gate_assistant2_actions(cx: &mut App) {
99 CommandPaletteFilter::update_global(cx, |filter, _cx| {
100 filter.hide_namespace(NAMESPACE);
101 });
102
103 cx.observe_flag::<Assistant2FeatureFlag, _>(move |is_enabled, cx| {
104 if is_enabled {
105 CommandPaletteFilter::update_global(cx, |filter, _cx| {
106 filter.show_namespace(NAMESPACE);
107 });
108 } else {
109 CommandPaletteFilter::update_global(cx, |filter, _cx| {
110 filter.hide_namespace(NAMESPACE);
111 });
112 }
113 })
114 .detach();
115}