From 66a2a3cb9a85d62d5cca1320de8573577d3d98b8 Mon Sep 17 00:00:00 2001 From: David Katz Date: Thu, 5 Feb 2026 10:47:25 -0500 Subject: [PATCH] Fix gemini cli command parsing (#6960) --- crates/goose/src/config/base.rs | 9 ++++----- crates/goose/src/providers/claude_code.rs | 5 ++--- crates/goose/src/providers/codex.rs | 5 ++--- crates/goose/src/providers/cursor_agent.rs | 5 ++--- crates/goose/src/providers/gemini_cli.rs | 5 ++--- 5 files changed, 12 insertions(+), 17 deletions(-) diff --git a/crates/goose/src/config/base.rs b/crates/goose/src/config/base.rs index f03652f7..42becedc 100644 --- a/crates/goose/src/config/base.rs +++ b/crates/goose/src/config/base.rs @@ -8,7 +8,6 @@ use serde_json::Value; use serde_yaml::Mapping; use std::collections::HashMap; use std::env; -use std::ffi::OsString; use std::fs::OpenOptions; use std::io::Write; use std::path::{Path, PathBuf}; @@ -954,10 +953,10 @@ impl Config { } } -config_value!(CLAUDE_CODE_COMMAND, OsString, "claude"); -config_value!(GEMINI_CLI_COMMAND, OsString, "gemini"); -config_value!(CURSOR_AGENT_COMMAND, OsString, "cursor-agent"); -config_value!(CODEX_COMMAND, OsString, "codex"); +config_value!(CLAUDE_CODE_COMMAND, String, "claude"); +config_value!(GEMINI_CLI_COMMAND, String, "gemini"); +config_value!(CURSOR_AGENT_COMMAND, String, "cursor-agent"); +config_value!(CODEX_COMMAND, String, "codex"); config_value!(CODEX_REASONING_EFFORT, String, "high"); config_value!(CODEX_ENABLE_SKILLS, String, "true"); config_value!(CODEX_SKIP_GIT_CHECK, String, "false"); diff --git a/crates/goose/src/providers/claude_code.rs b/crates/goose/src/providers/claude_code.rs index 1e6417c1..a1e30eab 100644 --- a/crates/goose/src/providers/claude_code.rs +++ b/crates/goose/src/providers/claude_code.rs @@ -2,7 +2,6 @@ use anyhow::Result; use async_trait::async_trait; use rmcp::model::Role; use serde_json::{json, Value}; -use std::ffi::OsString; use std::path::PathBuf; use std::process::Stdio; use tokio::io::{AsyncBufReadExt, BufReader}; @@ -36,8 +35,8 @@ pub struct ClaudeCodeProvider { impl ClaudeCodeProvider { pub async fn from_env(model: ModelConfig) -> Result { let config = crate::config::Config::global(); - let command: OsString = config.get_claude_code_command().unwrap_or_default().into(); - let resolved_command = SearchPaths::builder().with_npm().resolve(command)?; + let command: String = config.get_claude_code_command().unwrap_or_default().into(); + let resolved_command = SearchPaths::builder().with_npm().resolve(&command)?; Ok(Self { command: resolved_command, diff --git a/crates/goose/src/providers/codex.rs b/crates/goose/src/providers/codex.rs index 6234483a..a79cda1e 100644 --- a/crates/goose/src/providers/codex.rs +++ b/crates/goose/src/providers/codex.rs @@ -1,7 +1,6 @@ use anyhow::Result; use async_trait::async_trait; use serde_json::json; -use std::ffi::OsString; use std::path::PathBuf; use std::process::Stdio; use tokio::io::{AsyncBufReadExt, BufReader}; @@ -48,8 +47,8 @@ pub struct CodexProvider { impl CodexProvider { pub async fn from_env(model: ModelConfig) -> Result { let config = Config::global(); - let command: OsString = config.get_codex_command().unwrap_or_default().into(); - let resolved_command = SearchPaths::builder().with_npm().resolve(command)?; + let command: String = config.get_codex_command().unwrap_or_default().into(); + let resolved_command = SearchPaths::builder().with_npm().resolve(&command)?; // Get reasoning effort from config, default to "high" let reasoning_effort = config diff --git a/crates/goose/src/providers/cursor_agent.rs b/crates/goose/src/providers/cursor_agent.rs index cadd7f97..ad593f15 100644 --- a/crates/goose/src/providers/cursor_agent.rs +++ b/crates/goose/src/providers/cursor_agent.rs @@ -2,7 +2,6 @@ use anyhow::Result; use async_trait::async_trait; use rmcp::model::Role; use serde_json::{json, Value}; -use std::ffi::OsString; use std::path::PathBuf; use std::process::Stdio; use tokio::io::{AsyncBufReadExt, BufReader}; @@ -36,8 +35,8 @@ pub struct CursorAgentProvider { impl CursorAgentProvider { pub async fn from_env(model: ModelConfig) -> Result { let config = crate::config::Config::global(); - let command: OsString = config.get_cursor_agent_command().unwrap_or_default().into(); - let resolved_command = SearchPaths::builder().with_npm().resolve(command)?; + let command: String = config.get_cursor_agent_command().unwrap_or_default().into(); + let resolved_command = SearchPaths::builder().with_npm().resolve(&command)?; Ok(Self { command: resolved_command, diff --git a/crates/goose/src/providers/gemini_cli.rs b/crates/goose/src/providers/gemini_cli.rs index 4adf8b79..b2c6ff82 100644 --- a/crates/goose/src/providers/gemini_cli.rs +++ b/crates/goose/src/providers/gemini_cli.rs @@ -1,7 +1,6 @@ use anyhow::Result; use async_trait::async_trait; use serde_json::json; -use std::ffi::OsString; use std::path::PathBuf; use std::process::Stdio; use tokio::io::{AsyncBufReadExt, BufReader}; @@ -42,8 +41,8 @@ pub struct GeminiCliProvider { impl GeminiCliProvider { pub async fn from_env(model: ModelConfig) -> Result { let config = Config::global(); - let command: OsString = config.get_gemini_cli_command().unwrap_or_default().into(); - let resolved_command = SearchPaths::builder().with_npm().resolve(command)?; + let command: String = config.get_gemini_cli_command().unwrap_or_default().into(); + let resolved_command = SearchPaths::builder().with_npm().resolve(&command)?; Ok(Self { command: resolved_command,