```mermaid flowchart TD %% Main Program Flow Start([Start]) --> ParseCmdLine[Parse Command Line Arguments] ParseCmdLine --> ValidateConfig[Validate Configuration] ValidateConfig --> ShowHelp{Show Help?} ValidateConfig --> ShowVersion{Show Version?} ShowHelp -->|Yes| DisplayHelp[Display Help Text] --> Exit([Exit]) ShowVersion -->|Yes| DisplayVersion[Display Version] --> Exit ShowHelp -->|No| ShowVersion ShowVersion -->|No| ProcessFiles[Process Markdown Files] %% Processing Files ProcessFiles --> SourceDir{Source Directory Specified?} %% Source Directory Branch SourceDir -->|Yes| BackupSource[Backup & Rename Source Directory] BackupSource --> WalkSourceDir[Walk Directory Recursively] WalkSourceDir --> ProcessEachFile[Process Each File] ProcessEachFile --> IsMarkdown{Is Markdown File?} IsMarkdown -->|Yes| ProcessMarkdown[Process Markdown File] IsMarkdown -->|No| CopyFile[Copy File to Target] ProcessMarkdown --> CleanupTemp[Clean Up Temporary Directory] CopyFile --> CleanupTemp %% Individual Files Branch SourceDir -->|No| FilesSpecified{Files Specified?} FilesSpecified -->|Yes| CreateTempDir[Create Temporary Directory] CreateTempDir --> ProcessEachSpecifiedFile[Process Each Specified File] ProcessEachSpecifiedFile --> IsSpecifiedMarkdown{Is Markdown File?} IsSpecifiedMarkdown -->|Yes| ProcessSpecifiedMarkdown[Process Markdown File] IsSpecifiedMarkdown -->|No| CopySpecifiedFile[Copy File to Target] ProcessSpecifiedMarkdown --> BackupTempDir[Backup Temporary Directory] CopySpecifiedFile --> BackupTempDir BackupTempDir --> CleanupTempDir[Clean Up Temporary Directory] %% Process Markdown File Subflow subgraph ProcessMarkdownFileFlow[Process Markdown File] ReadFile[Read File Content] --> ExtractMetadata[Extract YAML Metadata] ExtractMetadata --> HasMetadata{Has Metadata?} HasMetadata -->|Yes| UseExistingMetadata[Use Existing Metadata] HasMetadata -->|No| AnalyzeEnabled{AI Analysis Enabled?} AnalyzeEnabled -->|Yes| AnalyzeWithAI[Analyze Content with AI] AnalyzeEnabled -->|No| NoMetadata[No Metadata Added] AnalyzeWithAI --> GenerateMetadata[Generate Metadata] GenerateMetadata --> AddMetadataToContent[Add Metadata to Content] UseExistingMetadata --> WriteFile[Write Processed Content] AddMetadataToContent --> WriteFile NoMetadata --> WriteFile end ProcessMarkdown -.-> ProcessMarkdownFileFlow ProcessSpecifiedMarkdown -.-> ProcessMarkdownFileFlow %% AI Analysis Subflow subgraph AIAnalysisFlow[AI Analysis] LoadConfig[Load AI Configuration] --> GetActiveModel[Get Active AI Model] GetActiveModel --> IsModelAvailable{Is Model Available?} IsModelAvailable -->|Yes| PreparePrompt[Prepare AI Prompt] IsModelAvailable -->|No| ReturnEmpty[Return Empty Result] PreparePrompt --> SendRequest[Send API Request] SendRequest --> ParseResponse[Parse AI Response] ParseResponse --> ExtractTitleDescTags[Extract Title, Description, Tags] ExtractTitleDescTags --> ReturnResult[Return Analysis Result] end AnalyzeWithAI -.-> AIAnalysisFlow %% Final Steps CleanupTemp --> GenerateReport[Generate Processing Report] CleanupTempDir --> GenerateReport GenerateReport --> DisplayReport[Display Report] DisplayReport --> Exit %% Styling classDef process fill:#a8d5ba,stroke:#178a44,stroke-width:1px; classDef decision fill:#ffda9e,stroke:#d86018,stroke-width:1px; classDef io fill:#aac4f5,stroke:#1155cc,stroke-width:1px; classDef terminal fill:#f5b5c8,stroke:#be0d35,stroke-width:1px; classDef subgraphStyle fill:#f5f5f5,stroke:#666666,stroke-width:1px; class Start,Exit terminal; class ParseCmdLine,BackupSource,WalkSourceDir,ProcessEachFile,ProcessMarkdown,CopyFile,CleanupTemp,CreateTempDir,ProcessEachSpecifiedFile,ProcessSpecifiedMarkdown,CopySpecifiedFile,BackupTempDir,CleanupTempDir,GenerateReport,DisplayReport process; class ShowHelp,ShowVersion,SourceDir,IsMarkdown,FilesSpecified,IsSpecifiedMarkdown,HasMetadata,AnalyzeEnabled,IsModelAvailable decision; class DisplayHelp,DisplayVersion,ReadFile,ExtractMetadata,UseExistingMetadata,AnalyzeWithAI,GenerateMetadata,AddMetadataToContent,WriteFile,NoMetadata,LoadConfig,GetActiveModel,PreparePrompt,SendRequest,ParseResponse,ExtractTitleDescTags,ReturnResult,ReturnEmpty io; class ProcessMarkdownFileFlow,AIAnalysisFlow subgraphStyle; ```