use rmcp::schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, JsonSchema)]
pub struct SemanticSearchRequest {
pub query: String,
pub limit: Option<usize>,
pub compact: Option<bool>,
pub filter_path: Option<String>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct GetFileChunksRequest {
pub path: String,
pub compact: Option<bool>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct FindReferencesRequest {
pub symbol: String,
pub limit: Option<usize>,
}
#[derive(Debug, Serialize)]
pub struct SearchResultItem {
pub path: String,
pub start_line: usize,
pub end_line: usize,
pub kind: String,
pub score: f32,
#[serde(skip_serializing_if = "Option::is_none")]
pub signature: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub context_prev: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub context_next: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct ReferenceItem {
pub path: String,
pub line: usize,
pub kind: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub signature: Option<String>,
pub score: f32,
}
#[derive(Debug, Serialize)]
pub struct IndexStatusResponse {
pub indexed: bool,
pub total_chunks: usize,
pub total_files: usize,
pub model: String,
pub dimensions: usize,
pub max_chunk_id: u32,
pub db_path: String,
pub project_path: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub error_message: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct DatabaseInfoResponse {
pub database_path: String,
pub project_path: String,
pub is_current_directory: bool,
pub depth_from_current: usize,
pub total_chunks: usize,
pub total_files: usize,
pub model: String,
}
#[derive(Debug, Serialize)]
pub struct FindDatabasesResponse {
pub databases: Vec<DatabaseInfoResponse>,
pub message: String,
pub current_directory: String,
}