Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions src/tools.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,76 @@ use std::sync::LazyLock;
static ALL_TOOLS_VEC: LazyLock<Vec<Tool>> = LazyLock::new(|| {
vec![
Tool::new("adal", ".adal", ".adal/skills", None),
Tool::new("aider-desk", ".aider-desk", ".aider-desk/skills", None),
Tool::new("amp", ".config/agents", ".config/agents/skills", None),
Tool::new(
"antigravity",
".gemini/antigravity",
".gemini/antigravity/skills",
None,
),
Tool::new(
"antigravity-cli",
".gemini/antigravity-cli",
".gemini/antigravity-cli/skills",
None,
),
Tool::new(
"antigravity-ide",
".gemini/antigravity-ide",
".gemini/antigravity-ide/skills",
None,
),
Tool::new("astrbot", ".astrbot", ".astrbot/data/skills", None),
Tool::new("autohand-code", ".autohand", ".autohand/skills", None),
Tool::new("augment", ".augment", ".augment/skills", None),
Tool::new("bob", ".bob", ".bob/skills", None),
Tool::new(
"claude",
".claude",
".claude/skills",
Some(".claude/commands"),
),
Tool::new(
"claude-code",
".claude",
".claude/skills",
Some(".claude/commands"),
),
Tool::new("cline", ".cline", ".cline/skills", None),
Tool::new(
"codearts-agent",
".codeartsdoer",
".codeartsdoer/skills",
None,
),
Tool::new("codebuddy", ".codebuddy", ".codebuddy/skills", None),
Tool::new("codemaker", ".codemaker", ".codemaker/skills", None),
Tool::new("codestudio", ".codestudio", ".codestudio/skills", None),
Tool::new("codex", ".codex", ".codex/skills", Some(".codex/commands")),
Tool::new("command-code", ".commandcode", ".commandcode/skills", None),
Tool::new("continue", ".continue", ".continue/skills", None),
Tool::new("cortex", ".snowflake/cortex", ".cortex/skills", None),
Tool::new("crush", ".config/crush", ".config/crush/skills", None),
Tool::new("cursor", ".cursor", ".cursor/skills", None),
Tool::new(
"deepagents",
".deepagents",
".deepagents/agent/skills",
None,
),
Tool::new("devin", ".config/devin", ".config/devin/skills", None),
Tool::new("dexto", ".dexto", ".agents/skills", None),
Tool::new("droid", ".factory", ".factory/skills", None),
Tool::new("firebender", ".firebender", ".firebender/skills", None),
Tool::new("forgecode", ".forge", ".forge/skills", None),
Tool::new("gemini-cli", ".gemini", ".gemini/skills", None),
Tool::new("github-copilot", ".copilot", ".copilot/skills", None),
Tool::new("goose", ".config/goose", ".config/goose/skills", None),
Tool::new("hermes-agent", ".hermes", ".hermes/skills", None),
Tool::new("iflow-cli", ".iflow", ".iflow/skills", None),
Tool::new("inference-sh", ".inferencesh", ".inferencesh/skills", None),
Tool::new("jazz", ".jazz", ".jazz/skills", None),
Tool::new("junie", ".junie", ".junie/skills", None),
Tool::new(
"kilo",
Expand All @@ -39,13 +82,18 @@ static ALL_TOOLS_VEC: LazyLock<Vec<Tool>> = LazyLock::new(|| {
Some(".kilocode/commands"),
),
Tool::new("kimi-cli", ".config/agents", ".config/agents/skills", None),
Tool::new("kimi-code-cli", ".kimi-code", ".agents/skills", None),
Tool::new("kiro-cli", ".kiro", ".kiro/skills", None),
Tool::new("kode", ".kode", ".kode/skills", None),
Tool::new("lingma", ".lingma", ".lingma/skills", None),
Tool::new("loaf", ".loaf", ".agents/skills", None),
Tool::new("mcpjam", ".mcpjam", ".mcpjam/skills", None),
Tool::new("mistral-vibe", ".vibe", ".vibe/skills", None),
Tool::new("moltbot", ".moltbot", ".moltbot/skills", None),
Tool::new("moxby", ".moxby", ".moxby/skills", None),
Tool::new("mux", ".mux", ".mux/skills", None),
Tool::new("neovate", ".neovate", ".neovate/skills", None),
Tool::new("ona", ".ona", ".ona/skills", None),
Tool::new(
"opencode",
".config/opencode",
Expand All @@ -57,18 +105,27 @@ static ALL_TOOLS_VEC: LazyLock<Vec<Tool>> = LazyLock::new(|| {
Tool::new("pi", ".pi/agent", ".pi/agent/skills", None),
Tool::new("pochi", ".pochi", ".pochi/skills", None),
Tool::new("qoder", ".qoder", ".qoder/skills", None),
Tool::new("qoder-cn", ".qoder-cn", ".qoder-cn/skills", None),
Tool::new("qwen-code", ".qwen", ".qwen/skills", None),
Tool::new("reasonix", ".reasonix", ".reasonix/skills", None),
Tool::new("replit", ".config/agents", ".config/agents/skills", None),
Tool::new("rovodev", ".rovodev", ".rovodev/skills", None),
Tool::new("roo", ".roo", ".roo/skills", None),
Tool::new("tabnine-cli", ".tabnine", ".tabnine/agent/skills", None),
Tool::new("terramind", ".terramind", ".terramind/skills", None),
Tool::new("tinycloud", ".tinycloud", ".tinycloud/skills", None),
Tool::new("trae", ".trae", ".trae/skills", None),
Tool::new("trae-cn", ".trae-cn", ".trae-cn/skills", None),
Tool::new("warp", ".warp", ".agents/skills", None),
Tool::new(
"windsurf",
".codeium/windsurf",
".codeium/windsurf/skills",
None,
),
Tool::new("zed", ".config/zed", ".agents/skills", None),
Tool::new("zencoder", ".zencoder", ".zencoder/skills", None),
Tool::new("zenflow", ".zencoder", ".zencoder/skills", None),
]
});

Expand Down
60 changes: 60 additions & 0 deletions tests/tools_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,49 @@ fn test_common_tools_exist() {
assert!(names.contains(&"neovate"));
}

#[test]
fn test_external_supported_tools_exist() {
let tools = all_tools();
let names: Vec<_> = tools.iter().map(|t| t.name).collect();

for name in [
"aider-desk",
"antigravity-cli",
"antigravity-ide",
"astrbot",
"autohand-code",
"bob",
"claude-code",
"codearts-agent",
"codemaker",
"codestudio",
"deepagents",
"devin",
"dexto",
"firebender",
"forgecode",
"hermes-agent",
"inference-sh",
"jazz",
"kimi-code-cli",
"lingma",
"loaf",
"moxby",
"ona",
"qoder-cn",
"reasonix",
"rovodev",
"tabnine-cli",
"terramind",
"tinycloud",
"warp",
"zed",
"zenflow",
] {
assert!(names.contains(&name), "missing tool: {name}");
}
}

#[test]
fn test_supported_list_paths_match_registry() {
let amp = get_tool("amp").unwrap();
Expand Down Expand Up @@ -119,4 +162,21 @@ fn test_supported_list_paths_match_registry() {
let windsurf = get_tool("windsurf").unwrap();
assert!(windsurf.config_path.ends_with(".codeium/windsurf"));
assert!(windsurf.skills_path.ends_with(".codeium/windsurf/skills"));

let claude_code = get_tool("claude-code").unwrap();
assert!(claude_code.config_path.ends_with(".claude"));
assert!(claude_code.skills_path.ends_with(".claude/skills"));
assert!(claude_code.commands_path.is_some());

let devin = get_tool("devin").unwrap();
assert!(devin.config_path.ends_with(".config/devin"));
assert!(devin.skills_path.ends_with(".config/devin/skills"));

let tabnine_cli = get_tool("tabnine-cli").unwrap();
assert!(tabnine_cli.config_path.ends_with(".tabnine"));
assert!(tabnine_cli.skills_path.ends_with(".tabnine/agent/skills"));

let zed = get_tool("zed").unwrap();
assert!(zed.config_path.ends_with(".config/zed"));
assert!(zed.skills_path.ends_with(".agents/skills"));
}
Loading