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 ui;
20
21use std::sync::Arc;
22
23use assistant_settings::AssistantSettings;
24use client::Client;
25use command_palette_hooks::CommandPaletteFilter;
26use feature_flags::{Assistant2FeatureFlag, FeatureFlagAppExt};
27use fs::Fs;
28use gpui::{actions, App};
29use prompt_library::PromptBuilder;
30use settings::Settings as _;
31
32pub use crate::assistant_panel::{AssistantPanel, ConcreteAssistantPanelDelegate};
33pub use crate::inline_assistant::InlineAssistant;
34
35actions!(
36 assistant2,
37 [
38 NewThread,
39 NewPromptEditor,
40 ToggleContextPicker,
41 RemoveAllContext,
42 OpenHistory,
43 OpenConfiguration,
44 RemoveSelectedThread,
45 Chat,
46 ChatMode,
47 CycleNextInlineAssist,
48 CyclePreviousInlineAssist,
49 FocusUp,
50 FocusDown,
51 FocusLeft,
52 FocusRight,
53 RemoveFocusedContext,
54 AcceptSuggestedContext
55 ]
56);
57
58const NAMESPACE: &str = "assistant2";
59
60/// Initializes the `assistant2` crate.
61pub fn init(
62 fs: Arc<dyn Fs>,
63 client: Arc<Client>,
64 prompt_builder: Arc<PromptBuilder>,
65 cx: &mut App,
66) {
67 AssistantSettings::register(cx);
68 thread_store::init(cx);
69 assistant_panel::init(cx);
70
71 inline_assistant::init(
72 fs.clone(),
73 prompt_builder.clone(),
74 client.telemetry().clone(),
75 cx,
76 );
77 terminal_inline_assistant::init(
78 fs.clone(),
79 prompt_builder.clone(),
80 client.telemetry().clone(),
81 cx,
82 );
83
84 feature_gate_assistant2_actions(cx);
85}
86
87fn feature_gate_assistant2_actions(cx: &mut App) {
88 CommandPaletteFilter::update_global(cx, |filter, _cx| {
89 filter.hide_namespace(NAMESPACE);
90 });
91
92 cx.observe_flag::<Assistant2FeatureFlag, _>(move |is_enabled, cx| {
93 if is_enabled {
94 CommandPaletteFilter::update_global(cx, |filter, _cx| {
95 filter.show_namespace(NAMESPACE);
96 });
97 } else {
98 CommandPaletteFilter::update_global(cx, |filter, _cx| {
99 filter.hide_namespace(NAMESPACE);
100 });
101 }
102 })
103 .detach();
104}