支持Cline Agent

This commit is contained in:
xintaofei
2026-03-28 20:14:48 +08:00
parent afa67380e7
commit be3f4986d7
26 changed files with 1418 additions and 35 deletions

View File

@@ -739,20 +739,29 @@ async fn run_connection(
.await
}
Err(e) => {
// session/load failed (e.g. ephemeral forked session).
// session/load failed (e.g. agent doesn't support resume,
// or ephemeral forked session).
// Fall back to session/new so the tab still works.
let err_str = e.to_string();
eprintln!(
"[ACP] session/load failed ({}), falling back to session/new",
e
);
crate::web::event_bridge::emit_event(
&handle,
"acp://event",
AcpEvent::Error {
connection_id: conn_id.clone(),
message: format!("Failed to load session, starting new: {e}"),
},
err_str
);
// Only emit a visible error for unexpected failures;
// "Method not found" is expected for agents that don't
// support session resume (e.g. Cline).
if !err_str.contains("Method not found") {
crate::web::event_bridge::emit_event(
&handle,
"acp://event",
AcpEvent::Error {
connection_id: conn_id.clone(),
message: format!(
"Failed to load session, starting new: {e}"
),
},
);
}
let new_resp = cx
.send_request_to(Agent, NewSessionRequest::new(cwd.clone()))
.block_task()

View File

@@ -78,6 +78,7 @@ pub fn all_acp_agents() -> Vec<AgentType> {
AgentType::Gemini,
AgentType::OpenClaw,
AgentType::OpenCode,
AgentType::Cline,
]
}
@@ -88,6 +89,7 @@ pub fn registry_id_for(agent_type: AgentType) -> &'static str {
AgentType::Gemini => "gemini",
AgentType::OpenClaw => "openclaw-acp",
AgentType::OpenCode => "opencode",
AgentType::Cline => "cline",
}
}
@@ -98,6 +100,7 @@ pub fn from_registry_id(id: &str) -> Option<AgentType> {
"gemini" => Some(AgentType::Gemini),
"openclaw-acp" => Some(AgentType::OpenClaw),
"opencode" => Some(AgentType::OpenCode),
"cline" => Some(AgentType::Cline),
_ => None,
}
}
@@ -184,6 +187,19 @@ pub fn get_agent_meta(agent_type: AgentType) -> AcpAgentMeta {
node_required: Some("22.12.0"),
},
},
AgentType::Cline => AcpAgentMeta {
agent_type,
name: "Cline",
description: "Autonomous coding agent CLI",
distribution: AgentDistribution::Npx {
version: "2.11.0",
package: "cline@2.11.0",
cmd: "cline",
args: &["--acp"],
env: &[],
node_required: None,
},
},
AgentType::OpenCode => AcpAgentMeta {
agent_type,
name: "OpenCode",

View File

@@ -242,6 +242,7 @@ pub struct AcpAgentInfo {
pub opencode_auth_json: Option<String>,
pub codex_auth_json: Option<String>,
pub codex_config_toml: Option<String>,
pub cline_secrets_json: Option<String>,
}
/// Lightweight status info for a single agent, used by connect() pre-check.