use std::sync::Arc;
use tokio::sync::Mutex;
use serde_json::Value;
use crate::session::VisionSessionManager;
use crate::types::{McpError, McpResult, ToolCallResult, ToolDefinition};
use super::{
observation_log, session_end, session_start, vision_capture, vision_compare, vision_diff,
vision_evidence, vision_ground, vision_health, vision_link, vision_ocr, vision_query,
vision_similar, vision_suggest, vision_track, vision_workspace_add, vision_workspace_compare,
vision_workspace_create, vision_workspace_list, vision_workspace_query, vision_workspace_xref,
};
use super::{invention_cognition, invention_grounding, invention_prediction, invention_temporal};
pub struct ToolRegistry;
impl ToolRegistry {
pub fn list_tools() -> Vec<ToolDefinition> {
vec![
observation_log::definition(),
vision_capture::definition(),
vision_compare::definition(),
vision_query::definition(),
vision_ocr::definition(),
vision_similar::definition(),
vision_track::definition(),
vision_diff::definition(),
vision_health::definition(),
vision_link::definition(),
vision_ground::definition(),
vision_evidence::definition(),
vision_suggest::definition(),
vision_workspace_create::definition(),
vision_workspace_add::definition(),
vision_workspace_list::definition(),
vision_workspace_query::definition(),
vision_workspace_compare::definition(),
vision_workspace_xref::definition(),
session_start::definition(),
session_end::definition(),
invention_grounding::definition_vision_ground_claim(),
invention_grounding::definition_vision_verify_claim(),
invention_grounding::definition_vision_cite(),
invention_grounding::definition_vision_contradict(),
invention_grounding::definition_vision_hallucination_check(),
invention_grounding::definition_vision_hallucination_fix(),
invention_grounding::definition_vision_truth_check(),
invention_grounding::definition_vision_truth_refresh(),
invention_grounding::definition_vision_truth_history(),
invention_grounding::definition_vision_compare_contexts(),
invention_grounding::definition_vision_compare_sites(),
invention_grounding::definition_vision_compare_versions(),
invention_grounding::definition_vision_compare_devices(),
invention_temporal::definition_vision_at_time(),
invention_temporal::definition_vision_timeline(),
invention_temporal::definition_vision_reconstruct(),
invention_temporal::definition_vision_archaeology_dig(),
invention_temporal::definition_vision_archaeology_reconstruct(),
invention_temporal::definition_vision_archaeology_report(),
invention_temporal::definition_vision_consolidate(),
invention_temporal::definition_vision_consolidate_preview(),
invention_temporal::definition_vision_consolidate_policy(),
invention_temporal::definition_vision_dejavu_check(),
invention_temporal::definition_vision_dejavu_patterns(),
invention_temporal::definition_vision_dejavu_alert(),
invention_prediction::definition_vision_prophecy(),
invention_prediction::definition_vision_prophecy_diff(),
invention_prediction::definition_vision_prophecy_compare(),
invention_prediction::definition_vision_regression_predict(),
invention_prediction::definition_vision_regression_test(),
invention_prediction::definition_vision_regression_history(),
invention_prediction::definition_vision_attention_predict(),
invention_prediction::definition_vision_attention_optimize(),
invention_prediction::definition_vision_attention_compare(),
invention_prediction::definition_vision_phantom_create(),
invention_prediction::definition_vision_phantom_compare(),
invention_prediction::definition_vision_phantom_ab_test(),
invention_cognition::definition_vision_semantic_analyze(),
invention_cognition::definition_vision_semantic_find(),
invention_cognition::definition_vision_semantic_intent(),
invention_cognition::definition_vision_reason(),
invention_cognition::definition_vision_reason_about(),
invention_cognition::definition_vision_reason_diagnose(),
invention_cognition::definition_vision_bind_code(),
invention_cognition::definition_vision_bind_memory(),
invention_cognition::definition_vision_bind_identity(),
invention_cognition::definition_vision_bind_time(),
invention_cognition::definition_vision_traverse_binding(),
invention_cognition::definition_vision_gestalt_analyze(),
invention_cognition::definition_vision_gestalt_harmony(),
invention_cognition::definition_vision_gestalt_improve(),
]
}
pub async fn call(
name: &str,
arguments: Option<Value>,
session: &Arc<Mutex<VisionSessionManager>>,
) -> McpResult<ToolCallResult> {
let args = arguments.unwrap_or(Value::Object(serde_json::Map::new()));
match name {
"observation_log" => observation_log::execute(args, session).await,
"vision_capture" => vision_capture::execute(args, session).await,
"vision_compare" => vision_compare::execute(args, session).await,
"vision_query" => vision_query::execute(args, session).await,
"vision_ocr" => vision_ocr::execute(args, session).await,
"vision_similar" => vision_similar::execute(args, session).await,
"vision_track" => vision_track::execute(args, session).await,
"vision_diff" => vision_diff::execute(args, session).await,
"vision_health" => vision_health::execute(args, session).await,
"vision_link" => vision_link::execute(args, session).await,
"vision_ground" => vision_ground::execute(args, session).await,
"vision_evidence" => vision_evidence::execute(args, session).await,
"vision_suggest" => vision_suggest::execute(args, session).await,
"vision_workspace_create" => vision_workspace_create::execute(args, session).await,
"vision_workspace_add" => vision_workspace_add::execute(args, session).await,
"vision_workspace_list" => vision_workspace_list::execute(args, session).await,
"vision_workspace_query" => vision_workspace_query::execute(args, session).await,
"vision_workspace_compare" => vision_workspace_compare::execute(args, session).await,
"vision_workspace_xref" => vision_workspace_xref::execute(args, session).await,
"session_start" => session_start::execute(args, session).await,
"session_end" => session_end::execute(args, session).await,
"vision_ground_claim" => {
invention_grounding::execute_vision_ground_claim(args, session).await
}
"vision_verify_claim" => {
invention_grounding::execute_vision_verify_claim(args, session).await
}
"vision_cite" => invention_grounding::execute_vision_cite(args, session).await,
"vision_contradict" => {
invention_grounding::execute_vision_contradict(args, session).await
}
"vision_hallucination_check" => {
invention_grounding::execute_vision_hallucination_check(args, session).await
}
"vision_hallucination_fix" => {
invention_grounding::execute_vision_hallucination_fix(args, session).await
}
"vision_truth_check" => {
invention_grounding::execute_vision_truth_check(args, session).await
}
"vision_truth_refresh" => {
invention_grounding::execute_vision_truth_refresh(args, session).await
}
"vision_truth_history" => {
invention_grounding::execute_vision_truth_history(args, session).await
}
"vision_compare_contexts" => {
invention_grounding::execute_vision_compare_contexts(args, session).await
}
"vision_compare_sites" => {
invention_grounding::execute_vision_compare_sites(args, session).await
}
"vision_compare_versions" => {
invention_grounding::execute_vision_compare_versions(args, session).await
}
"vision_compare_devices" => {
invention_grounding::execute_vision_compare_devices(args, session).await
}
"vision_at_time" => invention_temporal::execute_vision_at_time(args, session).await,
"vision_timeline" => invention_temporal::execute_vision_timeline(args, session).await,
"vision_reconstruct" => {
invention_temporal::execute_vision_reconstruct(args, session).await
}
"vision_archaeology_dig" => {
invention_temporal::execute_vision_archaeology_dig(args, session).await
}
"vision_archaeology_reconstruct" => {
invention_temporal::execute_vision_archaeology_reconstruct(args, session).await
}
"vision_archaeology_report" => {
invention_temporal::execute_vision_archaeology_report(args, session).await
}
"vision_consolidate" => {
invention_temporal::execute_vision_consolidate(args, session).await
}
"vision_consolidate_preview" => {
invention_temporal::execute_vision_consolidate_preview(args, session).await
}
"vision_consolidate_policy" => {
invention_temporal::execute_vision_consolidate_policy(args, session).await
}
"vision_dejavu_check" => {
invention_temporal::execute_vision_dejavu_check(args, session).await
}
"vision_dejavu_patterns" => {
invention_temporal::execute_vision_dejavu_patterns(args, session).await
}
"vision_dejavu_alert" => {
invention_temporal::execute_vision_dejavu_alert(args, session).await
}
"vision_prophecy" => invention_prediction::execute_vision_prophecy(args, session).await,
"vision_prophecy_diff" => {
invention_prediction::execute_vision_prophecy_diff(args, session).await
}
"vision_prophecy_compare" => {
invention_prediction::execute_vision_prophecy_compare(args, session).await
}
"vision_regression_predict" => {
invention_prediction::execute_vision_regression_predict(args, session).await
}
"vision_regression_test" => {
invention_prediction::execute_vision_regression_test(args, session).await
}
"vision_regression_history" => {
invention_prediction::execute_vision_regression_history(args, session).await
}
"vision_attention_predict" => {
invention_prediction::execute_vision_attention_predict(args, session).await
}
"vision_attention_optimize" => {
invention_prediction::execute_vision_attention_optimize(args, session).await
}
"vision_attention_compare" => {
invention_prediction::execute_vision_attention_compare(args, session).await
}
"vision_phantom_create" => {
invention_prediction::execute_vision_phantom_create(args, session).await
}
"vision_phantom_compare" => {
invention_prediction::execute_vision_phantom_compare(args, session).await
}
"vision_phantom_ab_test" => {
invention_prediction::execute_vision_phantom_ab_test(args, session).await
}
"vision_semantic_analyze" => {
invention_cognition::execute_vision_semantic_analyze(args, session).await
}
"vision_semantic_find" => {
invention_cognition::execute_vision_semantic_find(args, session).await
}
"vision_semantic_intent" => {
invention_cognition::execute_vision_semantic_intent(args, session).await
}
"vision_reason" => invention_cognition::execute_vision_reason(args, session).await,
"vision_reason_about" => {
invention_cognition::execute_vision_reason_about(args, session).await
}
"vision_reason_diagnose" => {
invention_cognition::execute_vision_reason_diagnose(args, session).await
}
"vision_bind_code" => {
invention_cognition::execute_vision_bind_code(args, session).await
}
"vision_bind_memory" => {
invention_cognition::execute_vision_bind_memory(args, session).await
}
"vision_bind_identity" => {
invention_cognition::execute_vision_bind_identity(args, session).await
}
"vision_bind_time" => {
invention_cognition::execute_vision_bind_time(args, session).await
}
"vision_traverse_binding" => {
invention_cognition::execute_vision_traverse_binding(args, session).await
}
"vision_gestalt_analyze" => {
invention_cognition::execute_vision_gestalt_analyze(args, session).await
}
"vision_gestalt_harmony" => {
invention_cognition::execute_vision_gestalt_harmony(args, session).await
}
"vision_gestalt_improve" => {
invention_cognition::execute_vision_gestalt_improve(args, session).await
}
_ => Err(McpError::ToolNotFound(name.to_string())),
}
}
}