pub const SETTINGS_ROOT_KEY_VALUE_PATTERN: &str = r#"(document (object (pair key: (string (string_content) @name) value: (_) @value ) ))"#; pub const SETTINGS_NESTED_KEY_VALUE_PATTERN: &str = r#"(document (object (pair key: (string (string_content) @parent_key) value: (object (pair key: (string (string_content) @setting_name) value: (_) @setting_value ) ) ) ))"#; pub const SETTINGS_LANGUAGES_PATTERN: &str = r#"(document (object (pair key: (string (string_content) @languages) value: (object (pair key: (string) value: (object (pair key: (string (string_content) @setting_name) value: (_) @value ) ) )) ) ) (#eq? @languages "languages"))"#; pub const SETTINGS_ASSISTANT_TOOLS_PATTERN: &str = r#"(document (object (pair key: (string (string_content) @assistant) value: (object (pair key: (string (string_content) @profiles) value: (object (pair key: (_) value: (object (pair key: (string (string_content) @tools_key) value: (object (pair key: (string (string_content) @tool_name) value: (_) @tool_value ) ) ) ) ) ) ) ) ) ) (#eq? @assistant "assistant") (#eq? @profiles "profiles") (#eq? @tools_key "tools"))"#; pub const SETTINGS_ASSISTANT_PATTERN: &str = r#"(document (object (pair key: (string (string_content) @key) ) ) (#eq? @key "assistant"))"#; pub const SETTINGS_EDIT_PREDICTIONS_ASSISTANT_PATTERN: &str = r#"(document (object (pair key: (string (string_content) @edit_predictions) value: (object (pair key: (string (string_content) @enabled_in_assistant)) ) ) ) (#eq? @edit_predictions "edit_predictions") (#eq? @enabled_in_assistant "enabled_in_assistant"))"#; pub const SETTINGS_DUPLICATED_AGENT_PATTERN: &str = r#"(document (object (pair key: (string (string_content) @agent1) value: (_) ) @pair1 (pair key: (string (string_content) @agent2) value: (_) ) ) (#eq? @agent1 "agent") (#eq? @agent2 "agent"))"#; /// Migrate language settings,/// calls `migrate_fn` with the top level object as well as all language settings under the "languages" key/// Fails early if `migrate_fn` returns an error at any pointpub fn migrate_language_setting( value: &mut serde_json::Value, migrate_fn: fn(&mut serde_json::Value, path: &[&str]) -> anyhow::Result<()>,) -> anyhow::Result<()> { migrate_fn(value, &[])?; let languages = value .as_object_mut() .and_then(|obj| obj.get_mut("languages")) .and_then(|languages| languages.as_object_mut()); if let Some(languages) = languages { for (language_name, language) in languages.iter_mut() { let path = vec!["languages", language_name]; migrate_fn(language, &path)?; } } Ok(())}
pub const SETTINGS_ROOT_KEY_VALUE_PATTERN: &str = r#"(document
(object
(pair
key: (string (string_content) @name)
value: (_) @value
)
)
)"#;
pub const SETTINGS_NESTED_KEY_VALUE_PATTERN: &str = r#"(document
(object
(pair
key: (string (string_content) @parent_key)
value: (object
(pair
key: (string (string_content) @setting_name)
value: (_) @setting_value
)
)
)
)
)"#;
pub const SETTINGS_LANGUAGES_PATTERN: &str = r#"(document
(object
(pair
key: (string (string_content) @languages)
value: (object
(pair
key: (string)
value: (object
(pair
key: (string (string_content) @setting_name)
value: (_) @value
)
)
))
)
)
(#eq? @languages "languages")
)"#;
pub const SETTINGS_ASSISTANT_TOOLS_PATTERN: &str = r#"(document
(object
(pair
key: (string (string_content) @assistant)
value: (object
(pair
key: (string (string_content) @profiles)
value: (object
(pair
key: (_)
value: (object
(pair
key: (string (string_content) @tools_key)
value: (object
(pair
key: (string (string_content) @tool_name)
value: (_) @tool_value
)
)
)
)
)
)
)
)
)
)
(#eq? @assistant "assistant")
(#eq? @profiles "profiles")
(#eq? @tools_key "tools")
)"#;
pub const SETTINGS_ASSISTANT_PATTERN: &str = r#"(document
(object
(pair
key: (string (string_content) @key)
)
)
(#eq? @key "assistant")
)"#;
pub const SETTINGS_EDIT_PREDICTIONS_ASSISTANT_PATTERN: &str = r#"(document
(object
(pair
key: (string (string_content) @edit_predictions)
value: (object
(pair key: (string (string_content) @enabled_in_assistant))
)
)
)
(#eq? @edit_predictions "edit_predictions")
(#eq? @enabled_in_assistant "enabled_in_assistant")
)"#;
pub const SETTINGS_DUPLICATED_AGENT_PATTERN: &str = r#"(document
(object
(pair
key: (string (string_content) @agent1)
value: (_)
) @pair1
(pair
key: (string (string_content) @agent2)
value: (_)
)
)
(#eq? @agent1 "agent")
(#eq? @agent2 "agent")
)"#;
/// Migrate language settings,
/// calls `migrate_fn` with the top level object as well as all language settings under the "languages" key
/// Fails early if `migrate_fn` returns an error at any point
pub fn migrate_language_setting(
value: &mut serde_json::Value,
migrate_fn: fn(&mut serde_json::Value, path: &[&str]) -> anyhow::Result<()>,
) -> anyhow::Result<()> {
migrate_fn(value, &[])?;
let languages = value
.as_object_mut()
.and_then(|obj| obj.get_mut("languages"))
.and_then(|languages| languages.as_object_mut());
if let Some(languages) = languages {
for (language_name, language) in languages.iter_mut() {
let path = vec!["languages", language_name];
migrate_fn(language, &path)?;
}
}
Ok(())
}