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