Support CC migrate-installer path (#35717)

If we can't find CC in the PATH, we'll now fall back to a known local
install path.

Release Notes:

- N/A
This commit is contained in:
Agus Zubiaga 2025-08-06 09:23:47 -03:00 committed by GitHub
parent ecd182c52f
commit 3bbd32b70e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 26 additions and 7 deletions

View file

@ -89,6 +89,7 @@ impl AgentServerCommand {
pub(crate) async fn resolve( pub(crate) async fn resolve(
path_bin_name: &'static str, path_bin_name: &'static str,
extra_args: &[&'static str], extra_args: &[&'static str],
fallback_path: Option<&Path>,
settings: Option<AgentServerSettings>, settings: Option<AgentServerSettings>,
project: &Entity<Project>, project: &Entity<Project>,
cx: &mut AsyncApp, cx: &mut AsyncApp,
@ -105,13 +106,24 @@ impl AgentServerCommand {
env: agent_settings.command.env, env: agent_settings.command.env,
}); });
} else { } else {
find_bin_in_path(path_bin_name, project, cx) match find_bin_in_path(path_bin_name, project, cx).await {
.await Some(path) => Some(Self {
.map(|path| Self {
path, path,
args: extra_args.iter().map(|arg| arg.to_string()).collect(), args: extra_args.iter().map(|arg| arg.to_string()).collect(),
env: None, env: None,
}) }),
None => fallback_path.and_then(|path| {
if path.exists() {
Some(Self {
path: path.to_path_buf(),
args: extra_args.iter().map(|arg| arg.to_string()).collect(),
env: None,
})
} else {
None
}
}),
}
} }
} }
} }

View file

@ -101,8 +101,15 @@ impl AgentConnection for ClaudeAgentConnection {
settings.get::<AllAgentServersSettings>(None).claude.clone() settings.get::<AllAgentServersSettings>(None).claude.clone()
})?; })?;
let Some(command) = let Some(command) = AgentServerCommand::resolve(
AgentServerCommand::resolve("claude", &[], settings, &project, cx).await "claude",
&[],
Some(&util::paths::home_dir().join(".claude/local/claude")),
settings,
&project,
cx,
)
.await
else { else {
anyhow::bail!("Failed to find claude binary"); anyhow::bail!("Failed to find claude binary");
}; };

View file

@ -48,7 +48,7 @@ impl AgentServer for Gemini {
})?; })?;
let Some(command) = let Some(command) =
AgentServerCommand::resolve("gemini", &[ACP_ARG], settings, &project, cx).await AgentServerCommand::resolve("gemini", &[ACP_ARG], None, settings, &project, cx).await
else { else {
anyhow::bail!("Failed to find gemini binary"); anyhow::bail!("Failed to find gemini binary");
}; };