Skip to repository content

tenant.openagents/omega

No repository description is available.

OpenAgents Git authority 2026-07-28T02:37:37.329Z Public web read
NIP-34 coordinate30617:7649603503856e5148d571eac2766b288a8ff1e9e35d380337a1d2b0015b4f92:omega
MaintainersHidden in public view
References2 branches · 1 tag
Read-only clonegit clone https://openagents.com/git/tenant.openagents/omega.git
Browse files

migrations.rs

367 lines · 8.7 KB · rust
1use anyhow::Result;
2use serde_json::Value;
3use settings_content::{PlatformOverrides, ReleaseChannelOverrides};
4
5/// Applies a migration callback to the root settings object as well as all
6/// nested platform, release-channel, and profile override objects.
7pub(crate) fn migrate_settings(
8    value: &mut Value,
9    migrate_one: &mut dyn FnMut(&mut serde_json::Map<String, Value>) -> Result<()>,
10) -> Result<()> {
11    let Some(root_object) = value.as_object_mut() else {
12        return Ok(());
13    };
14
15    migrate_one(root_object)?;
16
17    let override_keys = ReleaseChannelOverrides::OVERRIDE_KEYS
18        .iter()
19        .copied()
20        .chain(PlatformOverrides::OVERRIDE_KEYS.iter().copied());
21
22    for key in override_keys {
23        if let Some(sub_object) = root_object.get_mut(key) {
24            if let Some(sub_map) = sub_object.as_object_mut() {
25                migrate_one(sub_map)?;
26            }
27        }
28    }
29
30    if let Some(profiles) = root_object.get_mut("profiles") {
31        if let Some(profiles_object) = profiles.as_object_mut() {
32            for profile_value in profiles_object.values_mut() {
33                if let Some(profile_map) = profile_value.as_object_mut() {
34                    if let Some(inner) = profile_map
35                        .get_mut("settings")
36                        .and_then(|v| v.as_object_mut())
37                    {
38                        migrate_one(inner)?;
39                    } else {
40                        migrate_one(profile_map)?;
41                    }
42                }
43            }
44        }
45    }
46
47    Ok(())
48}
49
50/// Applies a migration callback to a value and its `languages` children,
51/// at the root level as well as all nested platform, release-channel, and
52/// profile override objects.
53pub(crate) fn migrate_language_setting(
54    value: &mut Value,
55    migrate_fn: fn(&mut Value, path: &[&str]) -> Result<()>,
56) -> Result<()> {
57    fn apply_to_value_and_languages(
58        value: &mut Value,
59        prefix: &[&str],
60        migrate_fn: fn(&mut Value, path: &[&str]) -> Result<()>,
61    ) -> Result<()> {
62        migrate_fn(value, prefix)?;
63        let languages = value
64            .as_object_mut()
65            .and_then(|obj| obj.get_mut("languages"))
66            .and_then(|languages| languages.as_object_mut());
67        if let Some(languages) = languages {
68            for (language_name, language) in languages.iter_mut() {
69                let mut path: Vec<&str> = prefix.to_vec();
70                path.push("languages");
71                path.push(language_name);
72                migrate_fn(language, &path)?;
73            }
74        }
75        Ok(())
76    }
77
78    if !value.is_object() {
79        return Ok(());
80    }
81
82    apply_to_value_and_languages(value, &[], migrate_fn)?;
83
84    let Some(root_object) = value.as_object_mut() else {
85        return Ok(());
86    };
87
88    let override_keys = ReleaseChannelOverrides::OVERRIDE_KEYS
89        .iter()
90        .copied()
91        .chain(PlatformOverrides::OVERRIDE_KEYS.iter().copied());
92
93    for key in override_keys {
94        if let Some(sub_value) = root_object.get_mut(key) {
95            apply_to_value_and_languages(sub_value, &[key], migrate_fn)?;
96        }
97    }
98
99    if let Some(profiles) = root_object.get_mut("profiles") {
100        if let Some(profiles_object) = profiles.as_object_mut() {
101            let profile_names: Vec<String> = profiles_object.keys().cloned().collect();
102            for profile_name in &profile_names {
103                if let Some(profile_value) = profiles_object.get_mut(profile_name.as_str()) {
104                    if let Some(settings_value) = profile_value
105                        .as_object_mut()
106                        .and_then(|m| m.get_mut("settings"))
107                    {
108                        apply_to_value_and_languages(
109                            settings_value,
110                            &["profiles", profile_name],
111                            migrate_fn,
112                        )?;
113                    } else {
114                        apply_to_value_and_languages(
115                            profile_value,
116                            &["profiles", profile_name],
117                            migrate_fn,
118                        )?;
119                    }
120                }
121            }
122        }
123    }
124
125    Ok(())
126}
127
128pub(crate) mod m_2025_01_02 {
129    mod settings;
130
131    pub(crate) use settings::SETTINGS_PATTERNS;
132}
133
134pub(crate) mod m_2025_01_29 {
135    mod keymap;
136    mod settings;
137
138    pub(crate) use keymap::KEYMAP_PATTERNS;
139    pub(crate) use settings::{SETTINGS_PATTERNS, replace_edit_prediction_provider_setting};
140}
141
142pub(crate) mod m_2025_01_30 {
143    mod keymap;
144    mod settings;
145
146    pub(crate) use keymap::KEYMAP_PATTERNS;
147    pub(crate) use settings::SETTINGS_PATTERNS;
148}
149
150pub(crate) mod m_2025_03_03 {
151    mod keymap;
152
153    pub(crate) use keymap::KEYMAP_PATTERNS;
154}
155
156pub(crate) mod m_2025_03_06 {
157    mod keymap;
158
159    pub(crate) use keymap::KEYMAP_PATTERNS;
160}
161
162pub(crate) mod m_2025_03_29 {
163    mod settings;
164
165    pub(crate) use settings::SETTINGS_PATTERNS;
166}
167
168pub(crate) mod m_2025_04_15 {
169    mod keymap;
170    mod settings;
171
172    pub(crate) use keymap::KEYMAP_PATTERNS;
173    pub(crate) use settings::SETTINGS_PATTERNS;
174}
175
176pub(crate) mod m_2025_04_21 {
177    mod settings;
178
179    pub(crate) use settings::SETTINGS_PATTERNS;
180}
181
182pub(crate) mod m_2025_04_23 {
183    mod settings;
184
185    pub(crate) use settings::SETTINGS_PATTERNS;
186}
187
188pub(crate) mod m_2025_05_05 {
189    mod settings;
190
191    pub(crate) use settings::SETTINGS_PATTERNS;
192}
193
194pub(crate) mod m_2025_05_08 {
195    mod settings;
196
197    pub(crate) use settings::SETTINGS_PATTERNS;
198}
199
200pub(crate) mod m_2025_06_16 {
201    mod settings;
202
203    pub(crate) use settings::SETTINGS_PATTERNS;
204}
205
206pub(crate) mod m_2025_06_25 {
207    mod settings;
208
209    pub(crate) use settings::SETTINGS_PATTERNS;
210}
211
212pub(crate) mod m_2025_06_27 {
213    mod settings;
214
215    pub(crate) use settings::SETTINGS_PATTERNS;
216}
217
218pub(crate) mod m_2025_07_08 {
219    mod settings;
220
221    pub(crate) use settings::SETTINGS_PATTERNS;
222}
223
224pub(crate) mod m_2025_10_01 {
225    mod settings;
226
227    pub(crate) use settings::flatten_code_actions_formatters;
228}
229
230pub(crate) mod m_2025_10_02 {
231    mod settings;
232
233    pub(crate) use settings::remove_formatters_on_save;
234}
235
236pub(crate) mod m_2025_10_03 {
237    mod settings;
238
239    pub(crate) use settings::SETTINGS_PATTERNS;
240}
241
242pub(crate) mod m_2025_10_16 {
243    mod settings;
244
245    pub(crate) use settings::restore_code_actions_on_format;
246}
247
248pub(crate) mod m_2025_10_17 {
249    mod settings;
250
251    pub(crate) use settings::make_file_finder_include_ignored_an_enum;
252}
253
254pub(crate) mod m_2025_10_21 {
255    mod settings;
256
257    pub(crate) use settings::make_relative_line_numbers_an_enum;
258}
259
260pub(crate) mod m_2025_11_12 {
261    mod settings;
262
263    pub(crate) use settings::SETTINGS_PATTERNS;
264}
265
266pub(crate) mod m_2025_11_20 {
267    mod settings;
268
269    pub(crate) use settings::SETTINGS_PATTERNS;
270}
271
272pub(crate) mod m_2025_11_25 {
273    mod settings;
274
275    pub(crate) use settings::remove_context_server_source;
276}
277
278pub(crate) mod m_2025_12_01 {
279    mod settings;
280
281    pub(crate) use settings::SETTINGS_PATTERNS;
282}
283
284pub(crate) mod m_2025_12_08 {
285    mod keymap;
286
287    pub(crate) use keymap::KEYMAP_PATTERNS;
288}
289
290pub(crate) mod m_2025_12_15 {
291    mod settings;
292
293    pub(crate) use settings::SETTINGS_PATTERNS;
294}
295
296pub(crate) mod m_2025_01_27 {
297    mod settings;
298
299    pub(crate) use settings::make_auto_indent_an_enum;
300}
301
302pub(crate) mod m_2026_02_02 {
303    mod settings;
304
305    pub(crate) use settings::move_edit_prediction_provider_to_edit_predictions;
306}
307
308pub(crate) mod m_2026_02_03 {
309    mod settings;
310
311    pub(crate) use settings::migrate_experimental_sweep_mercury;
312}
313
314pub(crate) mod m_2026_02_04 {
315    mod settings;
316
317    pub(crate) use settings::migrate_tool_permission_defaults;
318}
319
320pub(crate) mod m_2026_02_25 {
321    mod settings;
322
323    pub(crate) use settings::migrate_builtin_agent_servers_to_registry;
324}
325
326pub(crate) mod m_2026_03_16 {
327    mod settings;
328
329    pub(crate) use settings::SETTINGS_PATTERNS;
330}
331
332pub(crate) mod m_2026_03_23 {
333    mod keymap;
334
335    pub(crate) use keymap::KEYMAP_PATTERNS;
336}
337
338pub(crate) mod m_2026_03_30 {
339    mod settings;
340
341    pub(crate) use settings::make_play_sound_when_agent_done_an_enum;
342}
343
344pub(crate) mod m_2026_04_01 {
345    mod settings;
346
347    pub(crate) use settings::restructure_profiles_with_settings_key;
348}
349
350pub(crate) mod m_2026_04_10 {
351    mod settings;
352
353    pub(crate) use settings::rename_web_search_to_search_web;
354}
355
356pub(crate) mod m_2026_04_17 {
357    mod settings;
358
359    pub(crate) use settings::promote_show_branch_icon_true_to_show_branch_status_icon;
360}
361
362pub(crate) mod m_2026_05_04 {
363    mod settings;
364
365    pub(crate) use settings::SETTINGS_PATTERNS;
366}
367
Served at tenant.openagents/omega Member data and write actions are omitted.