#![cfg_attr(coverage_nightly, coverage(off))]
use super::{AgentsMdDocument, Command};
use serde_json::{json, Value as JsonValue};
pub struct McpAgentsMdBridge {
config: BridgeConfig,
tool_registry: Vec<McpTool>,
}
#[derive(Debug, Clone)]
pub struct BridgeConfig {
pub bidirectional: bool,
pub auto_discover: bool,
pub quality_level: QualityLevel,
}
impl Default for BridgeConfig {
fn default() -> Self {
Self {
bidirectional: true,
auto_discover: true,
quality_level: QualityLevel::Standard,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum QualityLevel {
None,
Basic,
Standard,
Strict,
Extreme,
}
#[derive(Debug, Clone)]
pub struct McpTool {
pub name: String,
pub description: String,
pub input_schema: JsonValue,
pub output_schema: JsonValue,
pub handler: ToolHandler,
}
#[derive(Debug, Clone)]
pub enum ToolHandler {
Command(Command),
Function(String),
External(String),
}
#[derive(Debug, Clone)]
pub enum Request {
AgentsMd(AgentsMdRequest),
Mcp(McpRequest),
}
#[derive(Debug, Clone)]
pub struct AgentsMdRequest {
pub request_type: String,
pub params: JsonValue,
}
#[derive(Debug, Clone)]
pub struct McpRequest {
pub method: String,
pub params: JsonValue,
}
#[derive(Debug, Clone)]
pub struct TranslatedRequest {
pub original: Request,
pub translated: Request,
pub metadata: TranslationMetadata,
}
#[derive(Debug, Clone)]
pub struct TranslationMetadata {
pub timestamp: std::time::SystemTime,
pub quality_checks: Vec<String>,
pub warnings: Vec<String>,
}
#[derive(Debug, Clone)]
pub enum Response {
AgentsMd(AgentsMdResponse),
Mcp(McpResponse),
}
#[derive(Debug, Clone)]
pub struct AgentsMdResponse {
pub success: bool,
pub result: JsonValue,
pub error: Option<String>,
}
#[derive(Debug, Clone)]
pub struct McpResponse {
pub result: JsonValue,
pub error: Option<JsonValue>,
}
#[derive(Debug, Clone)]
pub struct UnifiedResponse {
pub original: Response,
pub unified: JsonValue,
pub quality_report: Option<QualityReport>,
}
#[derive(Debug, Clone)]
pub struct QualityReport {
pub score: f64,
pub issues: Vec<String>,
pub suggestions: Vec<String>,
}
impl Default for McpAgentsMdBridge {
fn default() -> Self {
Self::new()
}
}
include!("bridge_conversion.rs");
include!("bridge_tests.rs");