Skip to content
Merged
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
16 changes: 8 additions & 8 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 Down Expand Up @@ -207,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 @@ -280,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 @@ -420,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 @@ -711,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 @@ -758,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 @@ -1133,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
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
28 changes: 14 additions & 14 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 @@ -86,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 @@ -162,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 @@ -379,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 Down Expand Up @@ -541,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 @@ -576,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 @@ -587,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 @@ -715,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 @@ -736,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 @@ -758,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 @@ -772,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 @@ -807,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 @@ -828,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 @@ -871,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
2 changes: 1 addition & 1 deletion src/help.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use std::path::Path;
use crate::VERSION;

thread_local! {
static INVOKED_BIN: RefCell<String> = RefCell::new(String::new());
static INVOKED_BIN: RefCell<String> = const { RefCell::new(String::new()) };
}

const LAUNCH_HELP_BODY: &str = "\
Expand Down
4 changes: 2 additions & 2 deletions src/http.rs
Original file line number Diff line number Diff line change
Expand Up @@ -781,7 +781,7 @@ mod tests {
Some("sk-ar-v1-DifferentTail00000000000000000000abcd")
));
// A longer-head ASCII-dot mask matches on head AND literal tail.
let long = getKeyPrefixStyleMask("sk-ar-v1-abcd", "wxyz");
let long = get_key_prefix_style_mask("sk-ar-v1-abcd", "wxyz");
assert!(is_active_key_row(
&long,
Some("sk-ar-v1-abcd-middle-secret-wxyz")
Expand All @@ -790,7 +790,7 @@ mod tests {
}

/// Helper mirroring the server's getKeyPrefix() shape for tests.
fn getKeyPrefixStyleMask(head: &str, tail: &str) -> String {
fn get_key_prefix_style_mask(head: &str, tail: &str) -> String {
format!("{head}...{tail}")
}
}
30 changes: 10 additions & 20 deletions src/spawn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const CLAUDE_EFFORT_TOKENS: &[(&str, i64)] = &[
("max", 32000),
];

#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ToolConfig {
pub command: String,
pub base_url_env: String,
Expand All @@ -39,21 +39,6 @@ pub struct ToolConfig {
pub extra: BTreeMap<String, YamlValue>,
}

impl Default for ToolConfig {
fn default() -> Self {
Self {
command: String::new(),
base_url_env: String::new(),
auth_env: String::new(),
model_env: None,
base_suffix: String::new(),
enable_gateway_model_discovery: false,
shadow_env: None,
extra: BTreeMap::new(),
}
}
}

impl ToolConfig {
pub fn merge(&mut self, over: &ToolConfig) {
if !over.command.is_empty() {
Expand Down Expand Up @@ -878,7 +863,10 @@ mod tests {
sanitize_model_id("\u{1b}[1mstealth/ox-alpha\u{1b}[0m"),
"stealth/ox-alpha"
);
assert_eq!(sanitize_model_id("stealth/ox-alpha[2m]"), "stealth/ox-alpha");
assert_eq!(
sanitize_model_id("stealth/ox-alpha[2m]"),
"stealth/ox-alpha"
);
assert_eq!(
sanitize_model_id("stealth/ox-alpha[0;1m]"),
"stealth/ox-alpha"
Expand Down Expand Up @@ -1318,7 +1306,7 @@ mod tests {
let mut env = BTreeMap::new();
let mut routing = crate::config::RoutingConstraints::default();
apply_routing_env(&mut env, &routing, "claude");
assert!(env.get("CLAUDE_CODE_EXTRA_BODY").is_none());
assert!(!env.contains_key("CLAUDE_CODE_EXTRA_BODY"));
routing.set_exacto(true);
routing.set_require_tools(true);
routing.set_require_1m(true);
Expand Down Expand Up @@ -1390,8 +1378,10 @@ mod tests {
#[test]
fn merge_command_only_overlay_keeps_codex_suffix() {
let mut t = builtin("codex").unwrap();
let mut over = ToolConfig::default();
over.command = "/opt/codex".into();
let over = ToolConfig {
command: "/opt/codex".into(),
..Default::default()
};
t.merge(&over);
assert_eq!(t.command, "/opt/codex");
assert_eq!(t.base_suffix, "/v1");
Expand Down
Loading
Loading