feat(tui): implement status bar with connection and turn state indicators feat(tui): create workflow panel for agent status and progress visualization feat(web): introduce web frontend interface with static file serving feat(ws): add WebSocket interface for real-time communication and session management
33 lines
1.3 KiB
Rust
33 lines
1.3 KiB
Rust
//! Installs language servers (non-interactive, via package managers or
|
|
//! direct download).
|
|
|
|
/// Install a language server for the given language.
|
|
///
|
|
/// Returns a success message or an error describing why installation failed.
|
|
pub fn install_language_server(language: &str) -> anyhow::Result<String> {
|
|
match language {
|
|
"rust" => {
|
|
// rust-analyzer is typically installed via rustup
|
|
let output = std::process::Command::new("rustup")
|
|
.args(["component", "add", "rust-analyzer"])
|
|
.output()?;
|
|
if output.status.success() {
|
|
Ok("rust-analyzer installed via rustup".to_string())
|
|
} else {
|
|
anyhow::bail!("failed to install rust-analyzer: {}", String::from_utf8_lossy(&output.stderr))
|
|
}
|
|
}
|
|
"python" => {
|
|
let output = std::process::Command::new("npm")
|
|
.args(["install", "-g", "pyright"])
|
|
.output()?;
|
|
if output.status.success() {
|
|
Ok("pyright installed via npm".to_string())
|
|
} else {
|
|
anyhow::bail!("failed to install pyright: {}", String::from_utf8_lossy(&output.stderr))
|
|
}
|
|
}
|
|
lang => anyhow::bail!("no install method known for language '{lang}'"),
|
|
}
|
|
}
|