//! Doc-lifecycle plugin for VAPORA use crate::config::PluginConfig; use crate::Result; use doc_lifecycle_core::prelude::*; use std::path::PathBuf; /// Main plugin interface for doc-lifecycle integration #[derive(Debug)] pub struct DocLifecyclePlugin { config: PluginConfig, classifier: Classifier, consolidator: Consolidator, rag_indexer: RagIndexer, mdbook_generator: Option, } impl DocLifecyclePlugin { /// Create a new doc-lifecycle plugin pub fn new(config: PluginConfig) -> Result { let mdbook_generator = if config.generate_mdbook { let mdbook_config = doc_lifecycle_core::mdbook_generator::MdBookConfig::new( PathBuf::from("book"), "VAPORA Project".to_string(), ); Some(MdBookGenerator::new(mdbook_config)) } else { None }; Ok(Self { config, classifier: Classifier::new(), consolidator: Consolidator::new(), rag_indexer: RagIndexer::new(), mdbook_generator, }) } /// Process documentation for a completed task pub async fn process_task_docs(&mut self, task_id: &str) -> Result<()> { tracing::info!("Processing task docs for task {}", task_id); // 1. Classify documents if self.config.auto_classify { self.classify_session_docs(task_id).await?; } // 2. Consolidate duplicates if self.config.auto_consolidate { self.consolidate_docs().await?; } // 3. Generate RAG index if self.config.generate_rag_index { self.update_rag_index().await?; } // 4. Generate mdBook if self.config.generate_mdbook { self.generate_mdbook().await?; } Ok(()) } async fn classify_session_docs(&self, _task_id: &str) -> Result<()> { // TODO: Implement session doc classification Ok(()) } async fn consolidate_docs(&self) -> Result<()> { // TODO: Implement consolidation Ok(()) } async fn update_rag_index(&self) -> Result<()> { // TODO: Implement RAG index update Ok(()) } async fn generate_mdbook(&self) -> Result<()> { if let Some(generator) = &self.mdbook_generator { generator.generate()?; } Ok(()) } }