feat: v0.7.0 — registre de providers LLM : am providers list/show/add/remove/default, settings.providers + default_provider (closes #88)
This commit is contained in:
@@ -114,14 +114,21 @@ pub fn set_value(app: &App, key: &str, value: &str) -> Result<i32> {
|
||||
/// exists. Used by the REPL 'theme <name>' command so a switched theme
|
||||
/// survives a restart.
|
||||
pub fn persist_setting(app: &App, key: &str, value: &str) -> Result<()> {
|
||||
let path = match &app.config_origin {
|
||||
Some(p) => p.clone(),
|
||||
None => user_config_path(app)?,
|
||||
};
|
||||
let path = active_config_path(app)?;
|
||||
write_dotted_key(&path, key, value)?;
|
||||
reload_and_validate(&path)
|
||||
}
|
||||
|
||||
/// Path of the configuration file that is actually in effect: the loaded
|
||||
/// origin when one exists, otherwise the user config file (created on
|
||||
/// demand). Mutating commands write here so the change survives a reload.
|
||||
pub(crate) fn active_config_path(app: &App) -> Result<PathBuf> {
|
||||
match &app.config_origin {
|
||||
Some(p) => Ok(p.clone()),
|
||||
None => user_config_path(app),
|
||||
}
|
||||
}
|
||||
|
||||
/// Set one dotted key (e.g. settings.default_shell) in a YAML config file.
|
||||
fn write_dotted_key(path: &Path, key: &str, value: &str) -> Result<()> {
|
||||
let text = std::fs::read_to_string(path)
|
||||
@@ -155,7 +162,7 @@ fn write_dotted_key(path: &Path, key: &str, value: &str) -> Result<()> {
|
||||
}
|
||||
|
||||
/// Reload a written config file to make sure the change stays valid.
|
||||
fn reload_and_validate(path: &Path) -> Result<()> {
|
||||
pub(crate) fn reload_and_validate(path: &Path) -> Result<()> {
|
||||
let cli = crate::cli::Cli::parse_from(["am", "--config", path.to_str().unwrap_or_default()]);
|
||||
config::load(&cli).map_err(|e| {
|
||||
anyhow!("the new value makes the configuration invalid: {e:#}")
|
||||
@@ -183,7 +190,7 @@ fn user_config_path_if_any(app: &App) -> Option<PathBuf> {
|
||||
}
|
||||
|
||||
/// Ensure the user config file exists (creating a template when needed).
|
||||
fn user_config_path(app: &App) -> Result<PathBuf> {
|
||||
pub(crate) fn user_config_path(app: &App) -> Result<PathBuf> {
|
||||
let dir = app
|
||||
.paths
|
||||
.config_dir
|
||||
|
||||
Reference in New Issue
Block a user