use crate::config::Mode;
pub const GROVE_START: &str = "<!-- grove:start -->";
pub const GROVE_END: &str = "<!-- grove:end -->";
pub const MCP_SERVER_KEY: &str = "grove";
pub fn expected_mcp_args(mode: Mode) -> Option<&'static [&'static str]> {
match mode {
Mode::Mcp | Mode::Both => Some(&["serve"]),
Mode::McpLlm => Some(&["serve", "--explore"]),
Mode::Skill | Mode::Grammars => None,
}
}
pub fn expected_claude_marker(mode: Mode) -> Option<&'static str> {
match mode {
Mode::McpLlm => Some("mcp__grove__explore"),
Mode::Mcp | Mode::Both => Some("mcp__grove__outline"),
Mode::Skill => Some("grove skill"),
Mode::Grammars => None,
}
}
pub fn agents_md_expected(mode: Mode) -> bool {
mode == Mode::McpLlm
}
#[cfg(test)]
mod tests {
use super::*;
use crate::config::Mode;
#[test]
fn expected_mcp_args_coverage() {
assert_eq!(expected_mcp_args(Mode::Mcp), Some(["serve"].as_slice()));
assert_eq!(expected_mcp_args(Mode::Both), Some(["serve"].as_slice()));
assert_eq!(
expected_mcp_args(Mode::McpLlm),
Some(["serve", "--explore"].as_slice())
);
assert_eq!(expected_mcp_args(Mode::Skill), None);
assert_eq!(expected_mcp_args(Mode::Grammars), None);
}
#[test]
fn expected_claude_marker_coverage() {
assert_eq!(
expected_claude_marker(Mode::McpLlm),
Some("mcp__grove__explore")
);
assert_eq!(
expected_claude_marker(Mode::Mcp),
Some("mcp__grove__outline")
);
assert_eq!(
expected_claude_marker(Mode::Both),
Some("mcp__grove__outline")
);
assert_eq!(expected_claude_marker(Mode::Skill), Some("grove skill"));
assert_eq!(expected_claude_marker(Mode::Grammars), None);
}
#[test]
fn agents_md_expected_only_mcp_llm() {
assert!(agents_md_expected(Mode::McpLlm));
assert!(!agents_md_expected(Mode::Mcp));
assert!(!agents_md_expected(Mode::Both));
assert!(!agents_md_expected(Mode::Skill));
assert!(!agents_md_expected(Mode::Grammars));
}
}