deepwiki-rs 1.6.0

deepwiki-rs(also known as Litho) is a high-performance automatic generation engine for C4 architecture documentation, developed using Rust. It can intelligently analyze project structures, identify core components, parse dependency relationships, and leverage large language models (LLMs) to automatically generate professional architecture documentation.
pub mod code;
pub mod code_releationship;
pub mod original_document;
pub mod project_structure;

use std::path::PathBuf;

use schemars::JsonSchema;
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct FileInfo {
    pub path: PathBuf,
    pub name: String,
    pub size: u64,
    pub extension: Option<String>,
    pub is_core: bool,
    pub importance_score: f64,
    pub complexity_score: f64,
    pub last_modified: Option<String>,
}

/// Directory information
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct DirectoryInfo {
    pub path: PathBuf,
    pub name: String,
    pub file_count: usize,
    pub subdirectory_count: usize,
    pub total_size: u64,
    pub importance_score: f64,
}

/// Directory purpose classification
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum DirectoryPurpose {
    Core,     // Core business logic
    Config,   // Configuration
    Api,      // API/interface layer
    Database, // Data layer
    Frontend, // Frontend
    Test,     // Test
    Tool,     // Tool/script
    Docs,     // Documentation
    Other,
}

impl Default for DirectoryPurpose {
    fn default() -> Self {
        DirectoryPurpose::Other
    }
}

/// Directory dossier — LLM-generated summary of a directory
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
#[serde(default)]
pub struct DirectoryDossier {
    pub path: PathBuf,
    pub name: String,
    pub purpose: DirectoryPurpose,
    pub file_count: usize,
    pub subdirectory_count: usize,
    pub importance_score: f64,
    pub summary: String,
    pub key_files: Vec<String>,
    /// Per-file insights generated by LLM
    pub file_insights: Vec<FileInsight>,
}

/// LLM-generated insight for a single file within a directory
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
#[serde(default)]
pub struct FileInsight {
    pub name: String,
    pub file_path: PathBuf,
    pub summary: String,
    /// Code purpose classification (based on file extension and content)
    #[serde(default)]
    pub code_purpose: crate::types::code::CodePurpose,
    /// Source code summary (truncated to prevent token overflow)
    #[serde(default)]
    pub source_summary: String,
    /// Detailed description of the file's role
    #[serde(default)]
    pub detailed_description: String,
    /// Key responsibilities of this file
    #[serde(default)]
    pub responsibilities: Vec<String>,
    /// Key interfaces/functions exposed
    #[serde(default)]
    pub interfaces: Vec<crate::types::code::InterfaceInfo>,
    /// Key dependencies
    #[serde(default)]
    pub dependencies: Vec<crate::types::code::Dependency>,
    /// Importance score
    #[serde(default)]
    pub importance_score: f64,
}

/// Merged insights stored under CODE_INSIGHTS key
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
#[serde(default)]
pub struct CodeAndDirectoryInsights {
    pub file_insights: Vec<crate::types::code::CodeInsight>,
    pub directory_insights: Vec<DirectoryDossier>,
}

/// LLM-driven directory and file selection for relationship analysis.
/// Produced by the selection-phase LLM call and cached for reuse across agents.
#[derive(Debug, Serialize, Deserialize, Clone, Default, JsonSchema)]
#[serde(default)]
pub struct DirectorySelection {
    /// Selected directories (by path) for relationship analysis
    pub selected_directories: Vec<PathBuf>,
    /// Selected files per directory (relative path within directory)
    pub selected_files: Vec<SelectedFilesForDirectory>,
}

#[derive(Debug, Serialize, Deserialize, Clone, Default, JsonSchema)]
#[serde(default)]
pub struct SelectedFilesForDirectory {
    pub dir_path: PathBuf,
    pub file_names: Vec<String>,
}