支持Cline Agent
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user