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::assistant_panel::{AssistantPanel, ConcreteAssistantPanelDelegate};
35pub use crate::inline_assistant::InlineAssistant;
36
37actions!(
38 assistant2,
39 [
40 NewThread,
41 NewPromptEditor,
42 ToggleContextPicker,
43 RemoveAllContext,
44 OpenHistory,
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(
64 fs: Arc<dyn Fs>,
65 client: Arc<Client>,
66 prompt_builder: Arc<PromptBuilder>,
67 cx: &mut App,
68) {
69 AssistantSettings::register(cx);
70 thread_store::init(cx);
71 assistant_panel::init(cx);
72
73 inline_assistant::init(
74 fs.clone(),
75 prompt_builder.clone(),
76 client.telemetry().clone(),
77 cx,
78 );
79 terminal_inline_assistant::init(
80 fs.clone(),
81 prompt_builder.clone(),
82 client.telemetry().clone(),
83 cx,
84 );
85
86 feature_gate_assistant2_actions(cx);
87}
88
89fn feature_gate_assistant2_actions(cx: &mut App) {
90 CommandPaletteFilter::update_global(cx, |filter, _cx| {
91 filter.hide_namespace(NAMESPACE);
92 });
93
94 cx.observe_flag::<Assistant2FeatureFlag, _>(move |is_enabled, cx| {
95 if is_enabled {
96 CommandPaletteFilter::update_global(cx, |filter, _cx| {
97 filter.show_namespace(NAMESPACE);
98 });
99 } else {
100 CommandPaletteFilter::update_global(cx, |filter, _cx| {
101 filter.hide_namespace(NAMESPACE);
102 });
103 }
104 })
105 .detach();
106}