1use crate::AgentServerCommand;
2use anyhow::Result;
3use gpui::App;
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6use settings::{Settings, SettingsSources};
7
8pub fn init(cx: &mut App) {
9 AllAgentServersSettings::register(cx);
10}
11
12#[derive(Default, Deserialize, Serialize, Clone, JsonSchema, Debug)]
13pub struct AllAgentServersSettings {
14 pub gemini: Option<AgentServerSettings>,
15 pub claude: Option<AgentServerSettings>,
16 pub codex: Option<AgentServerSettings>,
17}
18
19#[derive(Deserialize, Serialize, Clone, JsonSchema, Debug)]
20pub struct AgentServerSettings {
21 #[serde(flatten)]
22 pub command: AgentServerCommand,
23}
24
25impl settings::Settings for AllAgentServersSettings {
26 const KEY: Option<&'static str> = Some("agent_servers");
27
28 type FileContent = Self;
29
30 fn load(sources: SettingsSources<Self::FileContent>, _: &mut App) -> Result<Self> {
31 let mut settings = AllAgentServersSettings::default();
32
33 for AllAgentServersSettings {
34 gemini,
35 claude,
36 codex,
37 } in sources.defaults_and_customizations()
38 {
39 if gemini.is_some() {
40 settings.gemini = gemini.clone();
41 }
42 if claude.is_some() {
43 settings.claude = claude.clone();
44 }
45 if codex.is_some() {
46 settings.codex = codex.clone();
47 }
48 }
49
50 Ok(settings)
51 }
52
53 fn import_from_vscode(_vscode: &settings::VsCodeSettings, _current: &mut Self::FileContent) {}
54}