Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ anyr account use work # switch saved profiles
anyr onboard impl # paste-ready prompt for a coding agent
anyr plan # migration plan prompt (no code changes)
anyr fix # repair LLM wiring through AnyRouter
anyr claude --ok # launch through the gateway
anyr claude --ok # launch through the gateway (model: anyrouter/auto)
anyr claude --install --ok # install Claude Code first if missing
anyr codex --ok
anyr opencode --ok
Expand Down
34 changes: 23 additions & 11 deletions src/cmd/config_tui.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::collections::BTreeMap;
use std::path::PathBuf;
use std::path::Path;

use crate::config::{valid_account_name, write_config, Profile};
use crate::http::{fetch_credits, fetch_me};
Expand Down Expand Up @@ -35,7 +35,7 @@ use crate::cmd::usage::run_usage;
pub(crate) fn print_config_status(
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
path: &PathBuf,
path: &Path,
) -> Result<(), String> {
let cfg = load_config_if_present(path).unwrap_or_default();
let profile = cfg.profiles.get(&cfg.active_profile);
Expand All @@ -57,7 +57,11 @@ pub(crate) fn print_config_status(
} else {
format!("{account} {extra_email}")
};
let model = session_model_label(profile.map(|p| p.default_model()).unwrap_or("auto"));
let model = session_model_label(
profile
.map(|p| p.default_model())
.unwrap_or(crate::config::DEFAULT_MODEL),
);
let agent = profile
.and_then(|p| p.default_tool.clone())
.or_else(|| cfg.last_tool.clone())
Expand Down Expand Up @@ -203,7 +207,7 @@ pub(crate) fn settings_tab_names() -> Vec<String> {
pub(crate) fn config_settings_frame(
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
path: &PathBuf,
path: &Path,
online: bool,
cache: &mut CreditsCache,
tab: usize,
Expand Down Expand Up @@ -276,7 +280,7 @@ pub(crate) fn config_settings_frame(
pub(crate) fn fill_general_settings(
rows: &mut Vec<crate::tui::SettingRow>,
kinds: &mut Vec<Option<SettingKind>>,
path: &PathBuf,
path: &Path,
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
profile: Option<&Profile>,
Expand Down Expand Up @@ -339,7 +343,11 @@ pub(crate) fn fill_general_settings(
rows,
kinds,
"default",
session_model_label(profile.map(|p| p.default_model()).unwrap_or("auto")),
session_model_label(
profile
.map(|p| p.default_model())
.unwrap_or(crate::config::DEFAULT_MODEL),
),
Tone::Model,
SettingKind::Model("default"),
);
Expand Down Expand Up @@ -412,7 +420,7 @@ pub(crate) fn fill_general_settings(
pub(crate) fn fill_agent_settings(
rows: &mut Vec<crate::tui::SettingRow>,
kinds: &mut Vec<Option<SettingKind>>,
path: &PathBuf,
path: &Path,
env: &BTreeMap<String, String>,
profile: Option<&Profile>,
id: &'static str,
Expand Down Expand Up @@ -703,7 +711,7 @@ pub(crate) fn slot_current_opt(profile: Option<&Profile>, slot: &str) -> String
pub(crate) fn config_settings_loop(
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
path: &PathBuf,
path: &Path,
) -> Result<i32, String> {
let mut cache = CreditsCache::fresh();
let mut tab = 0usize;
Expand Down Expand Up @@ -750,7 +758,7 @@ pub(crate) fn config_settings_loop(
pub(crate) fn config_edit_row(
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
path: &PathBuf,
path: &Path,
kind: SettingKind,
) -> Result<i32, String> {
match kind {
Expand Down Expand Up @@ -1125,7 +1133,7 @@ pub(crate) fn config_reset_row(path: &std::path::Path, kind: SettingKind) -> Res
pub(crate) fn config_menu_loop_legacy(
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
path: &PathBuf,
path: &Path,
) -> Result<i32, String> {
let items = vec![
"Switch key".into(),
Expand Down Expand Up @@ -1183,7 +1191,11 @@ pub(crate) fn config_tui_header(path: &std::path::Path) -> Vec<String> {
),
format!(
"model {}",
session_model_label(profile.map(|p| p.default_model()).unwrap_or("auto"))
session_model_label(
profile
.map(|p| p.default_model())
.unwrap_or(crate::config::DEFAULT_MODEL),
)
),
format!("file {}", path.display()),
]
Expand Down
16 changes: 8 additions & 8 deletions src/cmd/dispatch.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::collections::{BTreeMap, HashMap};
use std::path::PathBuf;
use std::path::{Path, PathBuf};
use std::sync::{Arc, Mutex};

use crate::config::{resolve_config_path, write_config};
Expand Down Expand Up @@ -406,21 +406,21 @@ pub(crate) fn config_path(parsed: &ParsedArgs, env: &BTreeMap<String, String>) -
resolve_config_path(get_string_flag(&parsed.flags, "config").as_deref(), env)
}

pub(crate) fn tool_command_for(path: &PathBuf, id: &str) -> String {
pub(crate) fn tool_command_for(path: &Path, id: &str) -> String {
let cfg = load_config_if_present(path);
resolve_tool(cfg.as_ref(), id)
.map(|t| t.command)
.unwrap_or_else(|_| id.to_string())
}

pub(crate) fn catalog_lookup_enabled(env: &BTreeMap<String, String>) -> bool {
match env.get("ANYR_NO_CATALOG").map(|s| s.as_str()) {
Some("1" | "true" | "TRUE" | "yes") => false,
_ => true,
}
!matches!(
env.get("ANYR_NO_CATALOG").map(|s| s.as_str()),
Some("1" | "true" | "TRUE" | "yes")
)
}

pub(crate) fn persist_tool_command(path: &PathBuf, id: &str, command: &str) -> Result<(), String> {
pub(crate) fn persist_tool_command(path: &Path, id: &str, command: &str) -> Result<(), String> {
let builtin = resolve_tool(None, id)
.map(|t| t.command)
.unwrap_or_else(|_| id.to_string());
Expand All @@ -435,7 +435,7 @@ pub(crate) fn persist_tool_command(path: &PathBuf, id: &str, command: &str) -> R
}

pub(crate) fn launcher_last_tool(
path: &PathBuf,
path: &Path,
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
) -> String {
Expand Down
4 changes: 2 additions & 2 deletions src/cmd/keys.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::collections::BTreeMap;
use std::path::PathBuf;
use std::path::Path;

use crate::config::write_config;
use crate::http::{create_key, delete_key, fetch_keys, is_active_key_row, reveal_key};
Expand Down Expand Up @@ -276,7 +276,7 @@ pub(crate) fn key_pick_label(row: &crate::http::RemoteKey, current: bool) -> Str
pub(crate) fn stored_api_key(
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
path: &PathBuf,
path: &Path,
) -> Option<String> {
let existing = load_config_if_present(path);
let profile = existing
Expand Down
2 changes: 1 addition & 1 deletion src/cmd/launch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ pub(crate) fn run_launch(
let id = catalog_model_id(&flag_model);
let stored = if is_auto_model(&id) { None } else { Some(id) };
if let Some(p) = cfg.profiles.get_mut(&cfg.active_profile) {
// Auto stays unset so the next launch re-picks the most-used model.
// Auto stays unset so the next launch keeps the anyrouter/auto preset.
p.default_model = stored.clone();
}
cfg.agent_binding_mut(tool_name).default_model = stored;
Expand Down
40 changes: 24 additions & 16 deletions src/cmd/menu.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::collections::BTreeMap;
use std::path::PathBuf;
use std::path::Path;
use std::sync::{Arc, Mutex};

use crate::http::{fetch_keys, fetch_models, is_active_key_row, reveal_key};
Expand Down Expand Up @@ -45,7 +45,11 @@ pub(crate) fn agent_binding_detail(
.filter(|s| !s.is_empty())
.map(session_model_label)
.unwrap_or_else(|| {
session_model_label(profile.map(|p| p.default_model()).unwrap_or("auto"))
session_model_label(
profile
.map(|p| p.default_model())
.unwrap_or(crate::config::DEFAULT_MODEL),
)
});
let account = binding
.and_then(|b| b.profile.as_deref())
Expand Down Expand Up @@ -82,7 +86,7 @@ pub(crate) fn agent_binding_detail(

#[cfg(feature = "native")]
pub(crate) fn launcher_palette(
path: &PathBuf,
path: &Path,
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
credits: &mut CreditsCache,
Expand Down Expand Up @@ -158,7 +162,7 @@ pub(crate) fn launcher_palette(

#[cfg(not(feature = "native"))]
pub(crate) fn launcher_palette(
path: &PathBuf,
path: &Path,
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
_credits: &mut CreditsCache,
Expand Down Expand Up @@ -375,7 +379,7 @@ pub(crate) fn run_menu(parsed: &ParsedArgs, env: &BTreeMap<String, String>) -> R
}

pub(crate) fn launcher_hud(
path: &PathBuf,
path: &Path,
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
credits: &mut CreditsCache,
Expand All @@ -389,7 +393,11 @@ pub(crate) fn launcher_hud(
.peek_identity()
.map(|me| me.display_label())
.unwrap_or_else(|| cfg.active_profile.clone());
let model = session_model_label(profile.map(|p| p.default_model()).unwrap_or("auto"));
let model = session_model_label(
profile
.map(|p| p.default_model())
.unwrap_or(crate::config::DEFAULT_MODEL),
);
let credits_s = credits.peek_credits();
let dot = if signed_in {
term::ok("●")
Expand Down Expand Up @@ -533,7 +541,7 @@ pub(crate) fn push_agent_configure_entries(
}

pub(crate) fn install_agent_dialog(
path: &PathBuf,
path: &Path,
env: &BTreeMap<String, String>,
) -> Result<i32, String> {
let missing = missing_agents(env, |id| tool_command_for(path, id));
Expand Down Expand Up @@ -568,7 +576,7 @@ pub(crate) fn install_agent_dialog(
}

pub(crate) fn launcher_signed_in(
path: &PathBuf,
path: &Path,
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
) -> bool {
Expand All @@ -579,7 +587,7 @@ pub(crate) fn launcher_dispatch(
action: &str,
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
path: &PathBuf,
path: &Path,
) -> Result<LauncherNext, String> {
if action == "Quit" || action.starts_with("Quit") {
return Ok(LauncherNext::Exit(0));
Expand Down Expand Up @@ -707,7 +715,7 @@ pub(crate) fn launcher_dispatch(
pub(crate) fn switch_agent_model(
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
path: &PathBuf,
path: &Path,
agent: &str,
) -> Result<LauncherNext, String> {
if agent.is_empty() {
Expand All @@ -728,7 +736,7 @@ pub(crate) fn switch_agent_model(
pub(crate) fn bind_agent_model(
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
path: &PathBuf,
path: &Path,
agent: &str,
) -> Result<i32, String> {
let existing = load_config_if_present(path);
Expand All @@ -750,7 +758,7 @@ pub(crate) fn bind_agent_model(
pub(crate) fn switch_agent_account(
_parsed: &ParsedArgs,
_env: &BTreeMap<String, String>,
path: &PathBuf,
path: &Path,
agent: &str,
) -> Result<LauncherNext, String> {
if agent.is_empty() {
Expand All @@ -764,7 +772,7 @@ pub(crate) fn switch_agent_account(
Ok(LauncherNext::Continue)
}

pub(crate) fn bind_agent_account(path: &PathBuf, agent: &str) -> Result<i32, String> {
pub(crate) fn bind_agent_account(path: &Path, agent: &str) -> Result<i32, String> {
let cfg = load_config_if_present(path).unwrap_or_default();
let mut names: Vec<String> = cfg.profiles.keys().cloned().collect();
names.sort();
Expand Down Expand Up @@ -799,7 +807,7 @@ pub(crate) fn bind_agent_account(path: &PathBuf, agent: &str) -> Result<i32, Str
pub(crate) fn switch_agent_key(
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
path: &PathBuf,
path: &Path,
agent: &str,
) -> Result<LauncherNext, String> {
if agent.is_empty() {
Expand All @@ -820,7 +828,7 @@ pub(crate) fn switch_agent_key(
pub(crate) fn bind_agent_key(
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
path: &PathBuf,
path: &Path,
agent: &str,
) -> Result<i32, String> {
let (_keys_path, cfg, base, api_key) = keys_credential(parsed, env)?;
Expand Down Expand Up @@ -863,7 +871,7 @@ pub(crate) fn bind_agent_key(
pub(crate) fn launch_agent_picker(
parsed: &ParsedArgs,
env: &BTreeMap<String, String>,
path: &PathBuf,
path: &Path,
) -> Result<LauncherNext, String> {
if !launcher_signed_in(path, parsed, env) {
eprintln!(
Expand Down
14 changes: 5 additions & 9 deletions src/cmd/models.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::collections::BTreeMap;
use std::path::PathBuf;
use std::path::Path;

use crate::config::{write_config, Profile};
use crate::http::{fetch_credits, fetch_models, format_models_list, CatalogModel};
Expand Down Expand Up @@ -214,7 +214,7 @@ pub(crate) fn known_model_id(models: &[CatalogModel], id: &str) -> bool {

pub(crate) fn save_model_slot(
existing: Option<crate::config::Config>,
path: &PathBuf,
path: &Path,
slot: &str,
id: &str,
) -> Result<i32, String> {
Expand Down Expand Up @@ -256,7 +256,7 @@ pub(crate) fn known_agent(name: &str) -> Result<String, String> {
}
}

pub(crate) fn save_agent_model(path: &PathBuf, agent: &str, id: &str) -> Result<i32, String> {
pub(crate) fn save_agent_model(path: &Path, agent: &str, id: &str) -> Result<i32, String> {
let agent = known_agent(agent)?;
let mut cfg = load_config_if_present(path).ok_or_else(no_key_error)?;
let id = catalog_model_id(id);
Expand All @@ -276,11 +276,7 @@ pub(crate) fn save_agent_model(path: &PathBuf, agent: &str, id: &str) -> Result<
Ok(0)
}

pub(crate) fn save_agent_account(
path: &PathBuf,
agent: &str,
profile: &str,
) -> Result<i32, String> {
pub(crate) fn save_agent_account(path: &Path, agent: &str, profile: &str) -> Result<i32, String> {
let agent = known_agent(agent)?;
let mut cfg = load_config_if_present(path).ok_or_else(no_key_error)?;
if !cfg.profiles.contains_key(profile) {
Expand All @@ -296,7 +292,7 @@ pub(crate) fn save_agent_account(
Ok(0)
}

pub(crate) fn save_agent_key(path: &PathBuf, agent: &str, key: &str) -> Result<i32, String> {
pub(crate) fn save_agent_key(path: &Path, agent: &str, key: &str) -> Result<i32, String> {
let agent = known_agent(agent)?;
let mut cfg = load_config_if_present(path).ok_or_else(no_key_error)?;
cfg.agent_binding_mut(&agent).api_key = Some(key.to_string());
Expand Down
Loading
Loading