use crate::integration::{InstructionSurface, Integration, McpSurface, SkillSurface};
pub fn all() -> Vec<Box<dyn Integration>> {
use crate::agents::{
AmpAgent, AntigravityAgent, ClaudeAgent, ClineAgent, CodeBuddyAgent, CodexAgent,
CopilotAgent, CrushAgent, CursorAgent, ForgeAgent, GeminiAgent, HermesAgent, IFlowAgent,
JunieAgent, KiloCodeAgent, OpenClawAgent, OpenCodeAgent, PiAgent, QoderCliAgent, QwenAgent,
RooAgent, TabnineAgent, TraeAgent, WindsurfAgent,
};
vec![
Box::new(ClaudeAgent::new()),
Box::new(CursorAgent::new()),
Box::new(GeminiAgent::new()),
Box::new(OpenClawAgent::new()),
Box::new(HermesAgent::new()),
Box::new(CodexAgent::new()),
Box::new(CopilotAgent::new()),
Box::new(OpenCodeAgent::new()),
Box::new(ClineAgent::new()),
Box::new(RooAgent::new()),
Box::new(WindsurfAgent::new()),
Box::new(KiloCodeAgent::new()),
Box::new(AntigravityAgent::new()),
Box::new(AmpAgent::new()),
Box::new(CodeBuddyAgent::new()),
Box::new(CrushAgent::new()),
Box::new(ForgeAgent::new()),
Box::new(IFlowAgent::new()),
Box::new(JunieAgent::new()),
Box::new(PiAgent::new()),
Box::new(QoderCliAgent::new()),
Box::new(QwenAgent::new()),
Box::new(TabnineAgent::new()),
Box::new(TraeAgent::new()),
]
}
pub fn by_id(id: &str) -> Option<Box<dyn Integration>> {
all().into_iter().find(|i| i.id() == id)
}
pub fn mcp_capable() -> Vec<Box<dyn McpSurface>> {
use crate::agents::{
AmpAgent, AntigravityAgent, ClaudeAgent, ClineAgent, CodexAgent, CopilotAgent, CrushAgent,
CursorAgent, ForgeAgent, GeminiAgent, HermesAgent, IFlowAgent, JunieAgent, KiloCodeAgent,
OpenClawAgent, OpenCodeAgent, PiAgent, QoderCliAgent, QwenAgent, RooAgent, TabnineAgent,
WindsurfAgent,
};
vec![
Box::new(ClaudeAgent::new()),
Box::new(CursorAgent::new()),
Box::new(GeminiAgent::new()),
Box::new(OpenClawAgent::new()),
Box::new(HermesAgent::new()),
Box::new(CodexAgent::new()),
Box::new(CopilotAgent::new()),
Box::new(OpenCodeAgent::new()),
Box::new(ClineAgent::new()),
Box::new(RooAgent::new()),
Box::new(WindsurfAgent::new()),
Box::new(KiloCodeAgent::new()),
Box::new(AntigravityAgent::new()),
Box::new(AmpAgent::new()),
Box::new(CrushAgent::new()),
Box::new(ForgeAgent::new()),
Box::new(IFlowAgent::new()),
Box::new(JunieAgent::new()),
Box::new(PiAgent::new()),
Box::new(QoderCliAgent::new()),
Box::new(QwenAgent::new()),
Box::new(TabnineAgent::new()),
]
}
pub fn mcp_by_id(id: &str) -> Option<Box<dyn McpSurface>> {
mcp_capable().into_iter().find(|i| i.id() == id)
}
pub fn skill_capable() -> Vec<Box<dyn SkillSurface>> {
use crate::agents::{
AmpAgent, AntigravityAgent, ClaudeAgent, ClineAgent, CodeBuddyAgent, CodexAgent,
CopilotAgent, CrushAgent, CursorAgent, ForgeAgent, GeminiAgent, HermesAgent, KiloCodeAgent,
OpenClawAgent, OpenCodeAgent, PiAgent, QwenAgent, TraeAgent, WindsurfAgent,
};
vec![
Box::new(ClaudeAgent::new()),
Box::new(CursorAgent::new()),
Box::new(GeminiAgent::new()),
Box::new(OpenClawAgent::new()),
Box::new(HermesAgent::new()),
Box::new(CodexAgent::new()),
Box::new(CopilotAgent::new()),
Box::new(OpenCodeAgent::new()),
Box::new(ClineAgent::new()),
Box::new(WindsurfAgent::new()),
Box::new(KiloCodeAgent::new()),
Box::new(AntigravityAgent::new()),
Box::new(AmpAgent::new()),
Box::new(CodeBuddyAgent::new()),
Box::new(CrushAgent::new()),
Box::new(ForgeAgent::new()),
Box::new(PiAgent::new()),
Box::new(QwenAgent::new()),
Box::new(TraeAgent::new()),
]
}
pub fn skill_by_id(id: &str) -> Option<Box<dyn SkillSurface>> {
skill_capable().into_iter().find(|i| i.id() == id)
}
pub fn instruction_capable() -> Vec<Box<dyn InstructionSurface>> {
use crate::agents::{
AmpAgent, AntigravityAgent, ClaudeAgent, ClineAgent, CodeBuddyAgent, CodexAgent,
CopilotAgent, CrushAgent, ForgeAgent, GeminiAgent, HermesAgent, JunieAgent, KiloCodeAgent,
OpenClawAgent, PiAgent, QoderCliAgent, QwenAgent, RooAgent, TraeAgent, WindsurfAgent,
};
vec![
Box::new(ClaudeAgent::new()),
Box::new(ClineAgent::new()),
Box::new(RooAgent::new()),
Box::new(KiloCodeAgent::new()),
Box::new(WindsurfAgent::new()),
Box::new(AntigravityAgent::new()),
Box::new(GeminiAgent::new()),
Box::new(CodexAgent::new()),
Box::new(CopilotAgent::new()),
Box::new(CodeBuddyAgent::new()),
Box::new(AmpAgent::new()),
Box::new(CrushAgent::new()),
Box::new(ForgeAgent::new()),
Box::new(PiAgent::new()),
Box::new(QoderCliAgent::new()),
Box::new(QwenAgent::new()),
Box::new(JunieAgent::new()),
Box::new(TraeAgent::new()),
Box::new(OpenClawAgent::new()),
Box::new(HermesAgent::new()),
]
}
pub fn instruction_by_id(id: &str) -> Option<Box<dyn InstructionSurface>> {
instruction_capable().into_iter().find(|i| i.id() == id)
}