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