1mod active_thread;
2mod agent_diff;
3mod assistant_configuration;
4mod assistant_model_selector;
5mod assistant_panel;
6mod buffer_codegen;
7mod context;
8mod context_picker;
9mod context_server_configuration;
10mod context_server_tool;
11mod context_store;
12mod context_strip;
13mod debug;
14mod history_store;
15mod inline_assistant;
16mod inline_prompt_editor;
17mod message_editor;
18mod profile_selector;
19mod terminal_codegen;
20mod terminal_inline_assistant;
21mod thread;
22mod thread_history;
23mod thread_store;
24mod tool_compatibility;
25mod tool_use;
26mod ui;
27
28use std::sync::Arc;
29
30use assistant_settings::{AgentProfileId, AssistantSettings};
31use client::Client;
32use fs::Fs;
33use gpui::{App, actions, impl_actions};
34use language::LanguageRegistry;
35use prompt_store::PromptBuilder;
36use schemars::JsonSchema;
37use serde::Deserialize;
38use settings::Settings as _;
39use thread::ThreadId;
40
41pub use crate::active_thread::ActiveThread;
42use crate::assistant_configuration::{AddContextServerModal, ManageProfilesModal};
43pub use crate::assistant_panel::{AssistantPanel, ConcreteAssistantPanelDelegate};
44pub use crate::context::{ContextLoadResult, LoadedContext};
45pub use crate::inline_assistant::InlineAssistant;
46pub use crate::thread::{Message, MessageSegment, Thread, ThreadEvent};
47pub use crate::thread_store::{TextThreadStore, ThreadStore};
48pub use agent_diff::{AgentDiffPane, AgentDiffToolbar};
49pub use context_store::ContextStore;
50pub use ui::preview::{all_agent_previews, get_agent_preview};
51
52actions!(
53 agent,
54 [
55 NewTextThread,
56 ToggleContextPicker,
57 ToggleNavigationMenu,
58 ToggleOptionsMenu,
59 DeleteRecentlyOpenThread,
60 ToggleProfileSelector,
61 RemoveAllContext,
62 ExpandMessageEditor,
63 OpenHistory,
64 AddContextServer,
65 RemoveSelectedThread,
66 Chat,
67 CycleNextInlineAssist,
68 CyclePreviousInlineAssist,
69 FocusUp,
70 FocusDown,
71 FocusLeft,
72 FocusRight,
73 RemoveFocusedContext,
74 AcceptSuggestedContext,
75 OpenActiveThreadAsMarkdown,
76 OpenAgentDiff,
77 Keep,
78 Reject,
79 RejectAll,
80 KeepAll,
81 Follow,
82 ResetTrialUpsell,
83 ]
84);
85
86#[derive(Default, Clone, PartialEq, Deserialize, JsonSchema)]
87pub struct NewThread {
88 #[serde(default)]
89 from_thread_id: Option<ThreadId>,
90}
91
92#[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema)]
93pub struct ManageProfiles {
94 #[serde(default)]
95 pub customize_tools: Option<AgentProfileId>,
96}
97
98impl ManageProfiles {
99 pub fn customize_tools(profile_id: AgentProfileId) -> Self {
100 Self {
101 customize_tools: Some(profile_id),
102 }
103 }
104}
105
106impl_actions!(agent, [NewThread, ManageProfiles]);
107
108/// Initializes the `agent` crate.
109pub fn init(
110 fs: Arc<dyn Fs>,
111 client: Arc<Client>,
112 prompt_builder: Arc<PromptBuilder>,
113 language_registry: Arc<LanguageRegistry>,
114 cx: &mut App,
115) {
116 AssistantSettings::register(cx);
117 thread_store::init(cx);
118 assistant_panel::init(cx);
119 context_server_configuration::init(language_registry, cx);
120
121 inline_assistant::init(
122 fs.clone(),
123 prompt_builder.clone(),
124 client.telemetry().clone(),
125 cx,
126 );
127 terminal_inline_assistant::init(
128 fs.clone(),
129 prompt_builder.clone(),
130 client.telemetry().clone(),
131 cx,
132 );
133 cx.observe_new(AddContextServerModal::register).detach();
134 cx.observe_new(ManageProfilesModal::register).detach();
135}