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