Coverage report: 95%

Files Functions Classes

coverage.py v7.16.2, created at 2026-10-22 21:20 +0000

      Statements   Branches   Total
File class   coverage statements missing excluded   coverage branches partial   coverage
src/local_deep_research/__init__.py (no class)   100% 6 0 0   100% 0 0   100%
src/local_deep_research/__version__.py (no class)   100% 1 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/__init__.py (no class)   100% 1 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/__init__.py (no class)   100% 7 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/adaptive_explorer.py AdaptiveExplorer   100% 107 0 0   100% 38 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/adaptive_explorer.py (no class)   100% 24 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/base_explorer.py ExplorationStrategy   100% 0 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/base_explorer.py ExplorationResult   100% 0 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/base_explorer.py BaseCandidateExplorer   98% 101 2 0   95% 42 2   97%
src/local_deep_research/advanced_search_system/candidate_exploration/base_explorer.py (no class)   100% 31 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/constraint_guided_explorer.py ConstraintGuidedExplorer   99% 118 1 0   97% 60 2   98%
src/local_deep_research/advanced_search_system/candidate_exploration/constraint_guided_explorer.py (no class)   100% 22 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/diversity_explorer.py DiversityExplorer   93% 164 11 0   84% 88 6   90%
src/local_deep_research/advanced_search_system/candidate_exploration/diversity_explorer.py (no class)   100% 21 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/parallel_explorer.py ParallelExplorer   100% 75 0 0   96% 24 1   99%
src/local_deep_research/advanced_search_system/candidate_exploration/parallel_explorer.py (no class)   100% 17 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/progressive_explorer.py SearchProgress   100% 10 0 0   100% 6 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/progressive_explorer.py ProgressiveExplorer   100% 85 0 0   96% 56 2   99%
src/local_deep_research/advanced_search_system/candidate_exploration/progressive_explorer.py (no class)   100% 22 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidates/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidates/base_candidate.py Candidate   100% 23 0 0   100% 14 0   100%
src/local_deep_research/advanced_search_system/candidates/base_candidate.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/constraints/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/constraints/base_constraint.py ConstraintType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/constraints/base_constraint.py Constraint   100% 14 0 0   100% 12 0   100%
src/local_deep_research/advanced_search_system/constraints/base_constraint.py (no class)   100% 19 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/constraints/constraint_analyzer.py ConstraintAnalyzer   100% 34 0 0   100% 18 0   100%
src/local_deep_research/advanced_search_system/constraints/constraint_analyzer.py (no class)   100% 12 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/evidence/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/evidence/base_evidence.py EvidenceType   100% 2 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/evidence/base_evidence.py Evidence   100% 2 0 0   100% 2 0   100%
src/local_deep_research/advanced_search_system/evidence/base_evidence.py (no class)   100% 23 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/evidence/evaluator.py EvidenceEvaluator   100% 38 0 0   100% 14 0   100%
src/local_deep_research/advanced_search_system/evidence/evaluator.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/filters/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/filters/base_filter.py BaseFilter   50% 2 1 0   100% 0 0   50%
src/local_deep_research/advanced_search_system/filters/base_filter.py (no class)   100% 7 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/filters/cross_engine_filter.py CrossEngineFilter   98% 83 2 0   100% 38 0   98%
src/local_deep_research/advanced_search_system/filters/cross_engine_filter.py (no class)   100% 11 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/filters/followup_relevance_filter.py FollowUpRelevanceFilter   98% 54 1 0   96% 26 1   98%
src/local_deep_research/advanced_search_system/filters/followup_relevance_filter.py (no class)   100% 9 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/filters/journal_reputation_filter.py JournalFilterError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/filters/journal_reputation_filter.py JournalReputationFilter   96% 370 13 0   89% 132 14   95%
src/local_deep_research/advanced_search_system/filters/journal_reputation_filter.py (no class)   81% 94 18 0   72% 18 1   79%
src/local_deep_research/advanced_search_system/findings/base_findings.py BaseFindingsRepository   33% 6 4 0   100% 0 0   33%
src/local_deep_research/advanced_search_system/findings/base_findings.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/findings/repository.py FindingsRepository   94% 174 11 0   94% 72 4   94%
src/local_deep_research/advanced_search_system/findings/repository.py (no class)   100% 18 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/findings/topic.py Topic   100% 13 0 0   90% 10 1   96%
src/local_deep_research/advanced_search_system/findings/topic.py TopicGraph   100% 53 0 0   88% 42 5   95%
src/local_deep_research/advanced_search_system/findings/topic.py (no class)   100% 27 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/knowledge/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/knowledge/followup_context_manager.py FollowUpContextHandler   98% 94 2 0   95% 44 2   97%
src/local_deep_research/advanced_search_system/knowledge/followup_context_manager.py (no class)   100% 22 0 0   100% 2 0   100%
src/local_deep_research/advanced_search_system/parallel_search.py (no class)   100% 16 0 0   100% 4 0   100%
src/local_deep_research/advanced_search_system/questions/__init__.py (no class)   100% 7 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/atomic_fact_question.py AtomicFactQuestionGenerator   100% 31 0 0   100% 20 0   100%
src/local_deep_research/advanced_search_system/questions/atomic_fact_question.py (no class)   100% 9 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/base_question.py BaseQuestionGenerator   88% 8 1 0   100% 4 0   92%
src/local_deep_research/advanced_search_system/questions/base_question.py (no class)   100% 6 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/browsecomp_question.py BrowseCompQuestionGenerator   98% 138 3 0   92% 106 9   95%
src/local_deep_research/advanced_search_system/questions/browsecomp_question.py (no class)   100% 15 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/decomposition_question.py DecompositionQuestionGenerator   97% 119 4 0   88% 84 10   93%
src/local_deep_research/advanced_search_system/questions/decomposition_question.py (no class)   100% 10 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/flexible_browsecomp_question.py FlexibleBrowseCompQuestionGenerator   100% 22 0 0   93% 14 1   97%
src/local_deep_research/advanced_search_system/questions/flexible_browsecomp_question.py (no class)   100% 6 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/followup/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/followup/base_followup_question.py BaseFollowUpQuestionGenerator   80% 5 1 0   100% 0 0   80%
src/local_deep_research/advanced_search_system/questions/followup/base_followup_question.py (no class)   100% 9 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/followup/llm_followup_question.py LLMFollowUpQuestionGenerator   100% 5 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/followup/llm_followup_question.py (no class)   100% 6 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/followup/simple_followup_question.py SimpleFollowUpQuestionGenerator   100% 3 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/followup/simple_followup_question.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/news_question.py NewsQuestionGenerator   100% 7 0 0   100% 2 0   100%
src/local_deep_research/advanced_search_system/questions/news_question.py (no class)   100% 6 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/standard_question.py StandardQuestionGenerator   100% 28 0 0   88% 8 1   97%
src/local_deep_research/advanced_search_system/questions/standard_question.py (no class)   100% 9 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/repositories/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/summarization/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/summarization/base.py BaseSummarizer   100% 16 0 0   100% 4 0   100%
src/local_deep_research/advanced_search_system/summarization/base.py (no class)   100% 12 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/summarization/focused.py FocusedSummarizer   100% 3 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/summarization/focused.py (no class)   100% 5 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/tools/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/tools/archive.py (no class)   99% 86 1 0   97% 38 1   98%
src/local_deep_research/advanced_search_system/tools/base_tool.py BaseTool   96% 24 1 0   92% 12 1   94%
src/local_deep_research/advanced_search_system/tools/base_tool.py (no class)   100% 12 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/tools/fetch/__init__.py (no class)   96% 485 19 15   95% 214 10   96%
src/local_deep_research/advanced_search_system/tools/fetch/library_resolver.py _LibraryReference   100% 0 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/tools/fetch/library_resolver.py (no class)   96% 141 6 4   93% 60 4   95%
src/local_deep_research/advanced_search_system/tools/fetch/prompts.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/tools/search_availability.py NoResearchToolsAvailable   100% 0 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/tools/search_availability.py SearchAvailabilityMiddleware   100% 31 0 0   100% 12 0   100%
src/local_deep_research/advanced_search_system/tools/search_availability.py (no class)   96% 82 3 0   92% 26 2   95%
src/local_deep_research/api/__init__.py (no class)   100% 5 0 0   100% 0 0   100%
src/local_deep_research/api/benchmark_functions.py (no class)   100% 79 0 0   100% 28 0   100%
src/local_deep_research/api/client.py LDRClient   96% 105 4 0   92% 48 4   95%
src/local_deep_research/api/client.py (no class)   100% 26 0 0   100% 2 0   100%
src/local_deep_research/api/research_functions.py (no class)   95% 234 11 0   89% 100 11   93%
src/local_deep_research/api/settings_utils.py InMemorySettingsManager   96% 115 5 0   97% 68 2   96%
src/local_deep_research/api/settings_utils.py (no class)   95% 74 4 0   89% 36 4   93%
src/local_deep_research/benchmarks/__init__.py (no class)   100% 6 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/benchmark_functions.py (no class)   98% 131 3 0   91% 76 7   95%
src/local_deep_research/benchmarks/comparison/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/comparison/evaluator.py _create_spider_chart.radar_factory.RadarAxes   0% 22 22 0   0% 8 0   0%
src/local_deep_research/benchmarks/comparison/evaluator.py (no class)   98% 292 6 0   91% 76 5   96%
src/local_deep_research/benchmarks/comparison/results.py Benchmark_results   100% 20 0 0   100% 6 0   100%
src/local_deep_research/benchmarks/comparison/results.py (no class)   100% 8 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/datasets.py (no class)   0% 2 2 0   100% 0 0   0%
src/local_deep_research/benchmarks/datasets/__init__.py (no class)   83% 12 2 0   100% 0 0   83%
src/local_deep_research/benchmarks/datasets/base.py BenchmarkDataset   93% 54 4 0   94% 18 1   93%
src/local_deep_research/benchmarks/datasets/base.py DatasetRegistry   100% 15 0 0   100% 4 0   100%
src/local_deep_research/benchmarks/datasets/base.py (no class)   100% 32 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/datasets/browsecomp.py BrowseCompDataset   95% 39 2 0   86% 14 2   92%
src/local_deep_research/benchmarks/datasets/browsecomp.py (no class)   100% 12 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/datasets/custom_dataset_template.py CustomDataset   100% 14 0 0   100% 6 0   100%
src/local_deep_research/benchmarks/datasets/custom_dataset_template.py (no class)   100% 11 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/datasets/simpleqa.py SimpleQADataset   100% 14 0 0   100% 6 0   100%
src/local_deep_research/benchmarks/datasets/simpleqa.py (no class)   100% 11 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/datasets/utils.py (no class)   87% 63 8 0   88% 16 2   87%
src/local_deep_research/benchmarks/datasets/xbench_deepsearch.py XBenchDeepSearchDataset   95% 76 4 0   88% 16 2   93%
src/local_deep_research/benchmarks/datasets/xbench_deepsearch.py (no class)   100% 15 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/efficiency/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/efficiency/resource_monitor.py ResourceMonitor   100% 94 0 0   100% 36 0   100%
src/local_deep_research/benchmarks/efficiency/resource_monitor.py (no class)   87% 23 3 0   100% 0 0   87%
src/local_deep_research/benchmarks/efficiency/speed_profiler.py SpeedProfiler   94% 62 4 0   80% 30 4   89%
src/local_deep_research/benchmarks/efficiency/speed_profiler.py (no class)   100% 23 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/evaluators/__init__.py (no class)   100% 5 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/evaluators/base.py BaseBenchmarkEvaluator   83% 6 1 0   100% 0 0   83%
src/local_deep_research/benchmarks/evaluators/base.py (no class)   100% 9 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/evaluators/browsecomp.py BrowseCompEvaluator   100% 11 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/evaluators/browsecomp.py (no class)   100% 7 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/evaluators/composite.py CompositeBenchmarkEvaluator   100% 24 0 0   100% 6 0   100%
src/local_deep_research/benchmarks/evaluators/composite.py (no class)   100% 7 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/evaluators/simpleqa.py SimpleQAEvaluator   100% 56 0 0   100% 4 0   100%
src/local_deep_research/benchmarks/evaluators/simpleqa.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/graders.py (no class)   89% 245 26 0   82% 56 8   88%
src/local_deep_research/benchmarks/metrics.py (no class)   0% 3 3 0   100% 0 0   0%
src/local_deep_research/benchmarks/metrics/__init__.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/metrics/calculation.py (no class)   99% 142 2 0   100% 40 0   99%
src/local_deep_research/benchmarks/metrics/reporting.py (no class)   97% 60 2 0   90% 30 3   94%
src/local_deep_research/benchmarks/metrics/statistics.py (no class)   100% 53 0 0   100% 24 0   100%
src/local_deep_research/benchmarks/models/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/optimization/__init__.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/optimization/api.py (no class)   100% 16 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/optimization/metrics.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/optimization/optuna_optimizer.py OptunaOptimizer   77% 311 71 0   74% 86 10   77%
src/local_deep_research/benchmarks/optimization/optuna_optimizer.py (no class)   98% 57 1 0   75% 4 1   97%
src/local_deep_research/benchmarks/runners.py (no class)   100% 122 0 0   100% 42 0   100%
src/local_deep_research/benchmarks/templates.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/web_api/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/web_api/benchmark_service.py SocketIOService   100% 4 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/web_api/benchmark_service.py BenchmarkTaskStatus   100% 0 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/web_api/benchmark_service.py BenchmarkQueueTracker   100% 29 0 0   93% 14 1   98%
src/local_deep_research/benchmarks/web_api/benchmark_service.py BenchmarkService   97% 442 13 0   89% 122 13   95%
src/local_deep_research/benchmarks/web_api/benchmark_service.py (no class)   97% 68 2 0   50% 4 2   94%
src/local_deep_research/chat/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/chat/context.py ChatContextManager   96% 91 4 0   90% 50 5   94%
src/local_deep_research/chat/context.py (no class)   100% 19 0 0   100% 0 0   100%
src/local_deep_research/chat/service.py ChatCursorError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/chat/service.py ArchiveBlockedError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/chat/service.py ChatSessionNotFound   100% 0 0 0   100% 0 0   100%
src/local_deep_research/chat/service.py ChatRepositoryError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/chat/service.py AttemptNotFound   100% 0 0 0   100% 0 0   100%
src/local_deep_research/chat/service.py AttemptInProgress   100% 0 0 0   100% 0 0   100%
src/local_deep_research/chat/service.py ChatService   90% 366 36 0   92% 112 9   91%
src/local_deep_research/chat/service.py (no class)   100% 54 0 0   100% 0 0   100%
src/local_deep_research/citation_handler.py CitationHandler   100% 30 0 0   92% 12 1   98%
src/local_deep_research/citation_handler.py (no class)   100% 9 0 0   100% 0 0   100%
src/local_deep_research/citation_handlers/__init__.py (no class)   100% 5 0 0   100% 0 0   100%
src/local_deep_research/citation_handlers/base_citation_handler.py _HeadingRepetitionGuard   97% 32 1 0   94% 18 1   96%
src/local_deep_research/citation_handlers/base_citation_handler.py BaseCitationHandler   95% 105 5 0   96% 46 2   95%
src/local_deep_research/citation_handlers/base_citation_handler.py (no class)   100% 34 0 0   100% 0 0   100%
src/local_deep_research/citation_handlers/forced_answer_citation_handler.py ForcedAnswerCitationHandler   100% 42 0 0   100% 16 0   100%
src/local_deep_research/citation_handlers/forced_answer_citation_handler.py (no class)   100% 9 0 0   100% 0 0   100%
src/local_deep_research/citation_handlers/precision_extraction_handler.py PrecisionExtractionHandler   99% 194 1 0   92% 90 7   97%
src/local_deep_research/citation_handlers/precision_extraction_handler.py (no class)   100% 19 0 0   100% 0 0   100%
src/local_deep_research/citation_handlers/standard_citation_handler.py StandardCitationHandler   100% 34 0 0   100% 10 0   100%
src/local_deep_research/citation_handlers/standard_citation_handler.py (no class)   100% 15 0 0   100% 4 0   100%
src/local_deep_research/config/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/config/constants.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/config/llm_config.py LLMNotConfiguredError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/config/llm_config.py ProcessingLLMWrapper   71% 374 107 0   63% 172 31   69%
src/local_deep_research/config/llm_config.py (no class)   97% 186 5 0   97% 74 2   97%
src/local_deep_research/config/paths.py DirectoryNotPrivateError   100% 2 0 0   100% 0 0   100%
src/local_deep_research/config/paths.py (no class)   99% 104 1 0   96% 28 1   98%
src/local_deep_research/config/search_config.py (no class)   100% 27 0 0   90% 10 1   97%
src/local_deep_research/config/thread_settings.py NoSettingsContextError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/config/thread_settings.py (no class)   99% 77 1 0   97% 38 1   98%
src/local_deep_research/constants.py ResearchStatus   100% 0 0 0   100% 0 0   100%
src/local_deep_research/constants.py (no class)   100% 64 0 0   100% 0 0   100%
src/local_deep_research/content_fetcher/__init__.py (no class)   100% 10 0 0   100% 2 0   100%
src/local_deep_research/content_fetcher/fetcher.py ContentFetcher   95% 203 11 13   94% 94 6   94%
src/local_deep_research/content_fetcher/fetcher.py (no class)   100% 23 0 0   100% 0 0   100%
src/local_deep_research/content_fetcher/url_classifier.py URLType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/content_fetcher/url_classifier.py URLClassifier   97% 60 2 0   95% 42 2   96%
src/local_deep_research/content_fetcher/url_classifier.py (no class)   100% 35 0 0   100% 0 0   100%
src/local_deep_research/database/alembic_runner.py (no class)   94% 181 10 0   90% 58 6   93%
src/local_deep_research/database/auth_db.py (no class)   95% 98 5 0   81% 16 3   93%
src/local_deep_research/database/backup/__init__.py (no class)   100% 6 0 0   100% 0 0   100%
src/local_deep_research/database/backup/backup_executor.py BackupExecutor   98% 42 1 0   80% 10 2   94%
src/local_deep_research/database/backup/backup_executor.py (no class)   100% 18 0 0   100% 0 0   100%
src/local_deep_research/database/backup/backup_service.py BackupResult   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/backup/backup_service.py BackupService   87% 422 53 0   92% 136 11   89%
src/local_deep_research/database/backup/backup_service.py (no class)   97% 100 3 0   93% 14 1   96%
src/local_deep_research/database/base.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/credential_store_base.py CredentialStoreBase   93% 27 2 0   100% 10 0   95%
src/local_deep_research/database/credential_store_base.py (no class)   100% 14 0 0   100% 0 0   100%
src/local_deep_research/database/encrypted_db.py _ConnectionCacheEntry   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/encrypted_db.py _ConnectionGeneration   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/encrypted_db.py _CurrentConnectionGeneration   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/encrypted_db.py _StaleConnectionGenerationDetached   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/encrypted_db.py _ConnectionGenerationChanged   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/encrypted_db.py _ConnectionGenerationMissing   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/encrypted_db.py _ConnectionGenerationUnverifiable   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/encrypted_db.py UserConnectionStatus   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/encrypted_db.py DatabaseInitializationError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/encrypted_db.py _SidecarWaitBudget   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/encrypted_db.py _RekeyVerificationError   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/encrypted_db.py DatabaseManager   93% 861 64 0   87% 260 27   91%
src/local_deep_research/database/encrypted_db.py (no class)   98% 246 5 0   95% 20 1   98%
src/local_deep_research/database/initialize.py (no class)   93% 56 4 0   93% 14 1   93%
src/local_deep_research/database/library_init.py (no class)   100% 98 0 0   100% 12 0   100%
src/local_deep_research/database/models/__init__.py (no class)   100% 25 0 0   100% 0 0   100%
src/local_deep_research/database/models/active_research.py UserActiveResearch   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/active_research.py (no class)   100% 16 0 0   100% 0 0   100%
src/local_deep_research/database/models/auth.py User   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/models/auth.py (no class)   100% 16 0 0   100% 0 0   100%
src/local_deep_research/database/models/base.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/models/benchmark.py BenchmarkStatus   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/benchmark.py DatasetType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/benchmark.py BenchmarkRun   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/benchmark.py BenchmarkResult   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/benchmark.py BenchmarkConfig   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/benchmark.py BenchmarkProgress   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/benchmark.py (no class)   100% 103 0 0   100% 0 0   100%
src/local_deep_research/database/models/chat.py ChatRole   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/chat.py ChatMessageType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/chat.py ChatSessionStatus   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/chat.py ChatSession   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/chat.py ChatMessage   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/chat.py ChatProgressStep   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/chat.py (no class)   100% 57 0 0   100% 0 0   100%
src/local_deep_research/database/models/citation.py Paper   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/citation.py PaperAppearance   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/citation.py (no class)   100% 30 0 0   100% 0 0   100%
src/local_deep_research/database/models/download_tracker.py DownloadTracker   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/models/download_tracker.py DownloadDuplicates   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/download_tracker.py DownloadAttempt   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/models/download_tracker.py (no class)   100% 43 0 0   100% 0 0   100%
src/local_deep_research/database/models/file_integrity.py FileIntegrityRecord   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/file_integrity.py FileVerificationFailure   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/file_integrity.py (no class)   100% 37 0 0   100% 0 0   100%
src/local_deep_research/database/models/journal.py Journal   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/journal.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py RAGIndexStatus   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py DocumentStatus   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py EmbeddingProvider   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py ExtractionMethod   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py ExtractionSource   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py ExtractionQuality   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py DistanceMetric   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py IndexType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py SplitterType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py PDFStorageMode   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py SourceType   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py UploadBatch   100% 3 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py Document   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py DocumentBlob   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py Collection   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py DocumentCollection   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/library.py DocumentChunk   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py DownloadQueue   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/library.py LibraryStatistics   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py RAGIndex   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py RagDocumentStatus   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/library.py CollectionFolder   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py CollectionFolderFile   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/library.py (no class)   100% 298 0 0   100% 0 0   100%
src/local_deep_research/database/models/logs.py ResearchLog   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/logs.py (no class)   100% 16 0 0   100% 0 0   100%
src/local_deep_research/database/models/metrics.py TokenUsage   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/metrics.py ModelUsage   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/metrics.py ResearchRating   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/metrics.py SearchCall   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/metrics.py (no class)   100% 92 0 0   100% 0 0   100%
src/local_deep_research/database/models/news.py CardType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/news.py RatingType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/news.py SubscriptionType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/news.py SubscriptionStatus   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/news.py NewsSubscription   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/models/news.py SubscriptionFolder   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/news.py NewsCard   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/news.py UserRating   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/news.py UserPreference   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/news.py NewsInterest   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/news.py (no class)   100% 114 0 0   100% 0 0   100%
src/local_deep_research/database/models/note.py NoteChangeType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/note.py NoteSynthesisType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/note.py NoteVersion   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/models/note.py NoteLink   100% 3 0 0   100% 0 0   100%
src/local_deep_research/database/models/note.py NoteResearch   100% 3 0 0   100% 0 0   100%
src/local_deep_research/database/models/note.py NoteReference   0% 3 3 0   100% 0 0   0%
src/local_deep_research/database/models/note.py NoteSynthesis   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/note.py NoteSynthesisSource   0% 3 3 0   100% 0 0   0%
src/local_deep_research/database/models/note.py (no class)   100% 87 0 0   100% 0 0   100%
src/local_deep_research/database/models/providers.py ProviderModel   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/providers.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/database/models/queue.py QueueStatus   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/queue.py TaskMetadata   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/queue.py (no class)   100% 27 0 0   100% 0 0   100%
src/local_deep_research/database/models/queued_research.py QueuedResearch   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/queued_research.py (no class)   100% 15 0 0   100% 0 0   100%
src/local_deep_research/database/models/rate_limiting.py RateLimitAttempt   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/rate_limiting.py RateLimitEstimate   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/rate_limiting.py (no class)   100% 28 0 0   100% 0 0   100%
src/local_deep_research/database/models/reports.py Report   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/reports.py ReportSection   100% 1 0 0   100% 0 0   100%
src/local_deep_research/database/models/reports.py (no class)   100% 51 0 0   100% 0 0   100%
src/local_deep_research/database/models/research.py LenientJSON   92% 12 1 0   75% 4 1   88%
src/local_deep_research/database/models/research.py ResearchTask   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/research.py SearchQuery   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/research.py SearchResult   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/research.py ResearchMode   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/research.py ResearchResource   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/research.py ResearchHistory   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/research.py Research   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/research.py ResearchStrategy   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/research.py (no class)   100% 137 0 0   100% 0 0   100%
src/local_deep_research/database/models/settings.py UserSettings   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/settings.py APIKey   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/settings.py SettingType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/models/settings.py Setting   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/settings.py (no class)   100% 53 0 0   100% 0 0   100%
src/local_deep_research/database/models/user_base.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/models/user_news_search_history.py UserNewsSearchHistory   50% 2 1 0   100% 0 0   50%
src/local_deep_research/database/models/user_news_search_history.py (no class)   100% 12 0 0   100% 0 0   100%
src/local_deep_research/database/models/zotero.py ZoteroSyncState   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/zotero.py ZoteroItemMap   0% 1 1 0   100% 0 0   0%
src/local_deep_research/database/models/zotero.py (no class)   100% 34 0 0   100% 0 0   100%
src/local_deep_research/database/pool_config.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/database/queue_service.py UserQueueService   100% 61 0 0   100% 22 0   100%
src/local_deep_research/database/queue_service.py (no class)   100% 17 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_epoch.py (no class)   100% 12 0 0   100% 2 0   100%
src/local_deep_research/database/rekey_lock.py RekeyOperationalError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_lock.py AuthorizationLeaseMode   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_lock.py RekeySidecarOperation   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_lock.py RekeySidecarIOError   100% 6 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_lock.py RekeyStage   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_lock.py RekeyUnavailableError   100% 3 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_lock.py RekeyIndeterminateError   100% 4 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_lock.py RekeyLockContentionError   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_lock.py DatabaseKeyCheckUnavailableError   100% 3 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_lock.py RekeyRecoveryRequiredError   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_lock.py RekeyEpochUnreadableError   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_lock.py RekeyEpochState   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_lock.py _SidecarLockRequest   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/rekey_lock.py (no class)   92% 443 37 0   84% 116 18   90%
src/local_deep_research/database/research_cascade.py SharedDownloadIndex   100% 27 0 0   100% 12 0   100%
src/local_deep_research/database/research_cascade.py (no class)   96% 239 10 0   91% 122 11   94%
src/local_deep_research/database/session_context.py DatabaseSessionError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/session_context.py DatabaseSessionUnavailableError   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/session_context.py DatabaseAccessMixin   50% 2 1 0   100% 0 0   50%
src/local_deep_research/database/session_context.py (no class)   98% 114 2 0   100% 34 0   99%
src/local_deep_research/database/session_passwords.py SessionPasswordStore   100% 26 0 0   90% 10 1   97%
src/local_deep_research/database/session_passwords.py (no class)   100% 23 0 0   100% 2 0   100%
src/local_deep_research/database/sqlcipher_compat.py _guarded_connection_type.LifecycleConnection   82% 17 3 0   75% 4 1   81%
src/local_deep_research/database/sqlcipher_compat.py _guarded_connection_type.ThreadCheckedCursor   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/sqlcipher_compat.py (no class)   99% 69 1 0   82% 22 4   95%
src/local_deep_research/database/sqlcipher_utils.py SQLCipherRekeyError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/database/sqlcipher_utils.py (no class)   98% 281 7 1   95% 56 3   97%
src/local_deep_research/database/temp_auth.py TemporaryAuthStore   100% 12 0 0   100% 2 0   100%
src/local_deep_research/database/temp_auth.py (no class)   100% 12 0 0   100% 0 0   100%
src/local_deep_research/database/thread_local_session.py ThreadLocalSessionManager   96% 104 4 0   98% 40 1   97%
src/local_deep_research/database/thread_local_session.py _ThreadCleanup   90% 21 2 0   100% 0 0   90%
src/local_deep_research/database/thread_local_session.py ThreadSessionContext   100% 6 0 0   100% 0 0   100%
src/local_deep_research/database/thread_local_session.py (no class)   87% 69 9 0   100% 2 0   87%
src/local_deep_research/database/thread_metrics.py ThreadSafeMetricsWriter   100% 48 0 0   91% 22 2   97%
src/local_deep_research/database/thread_metrics.py (no class)   100% 18 0 0   100% 0 0   100%
src/local_deep_research/defaults/__init__.py (no class)   95% 19 1 0   75% 8 2   89%
src/local_deep_research/document_loaders/__init__.py (no class)   100% 5 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/bounded_pdf.py (no class)   98% 54 1 0   94% 18 1   97%
src/local_deep_research/document_loaders/bytes_loader.py (no class)   90% 80 8 0   100% 18 0   92%
src/local_deep_research/document_loaders/evernote_loader.py _EvernoteXMLParser   100% 3 0 0   100% 2 0   100%
src/local_deep_research/document_loaders/evernote_loader.py EverNoteLoader   97% 32 1 0   91% 22 2   94%
src/local_deep_research/document_loaders/evernote_loader.py (no class)   100% 16 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/json_loader.py SimpleJSONLoader   100% 22 0 0   100% 2 0   100%
src/local_deep_research/document_loaders/json_loader.py (no class)   100% 37 0 0   100% 10 0   100%
src/local_deep_research/document_loaders/loader_registry.py (no class)   95% 122 6 0   77% 30 5   91%
src/local_deep_research/document_loaders/openpyxl_hardening.py (no class)   88% 16 2 0   100% 4 0   90%
src/local_deep_research/document_loaders/text_encoding.py EncodingAwareTextLoader   100% 2 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/text_encoding.py EncodingAwareCSVLoader   100% 2 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/text_encoding.py (no class)   100% 39 0 0   100% 12 0   100%
src/local_deep_research/document_loaders/toml_loader.py TOMLLoader   100% 9 0 0   100% 6 0   100%
src/local_deep_research/document_loaders/toml_loader.py (no class)   100% 14 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/xls_loader.py XLSLoader   95% 20 1 0   80% 10 2   90%
src/local_deep_research/document_loaders/xls_loader.py (no class)   100% 10 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/yaml_loader.py YAMLLoader   100% 20 0 0   100% 2 0   100%
src/local_deep_research/document_loaders/yaml_loader.py (no class)   100% 24 0 0   100% 2 0   100%
src/local_deep_research/document_loaders/zip_container_guard.py DecompressionBombError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/zip_container_guard.py _XlsxScanTarget   95% 21 1 0   100% 8 0   97%
src/local_deep_research/document_loaders/zip_container_guard.py _XmlTagSigns   100% 10 0 0   100% 4 0   100%
src/local_deep_research/document_loaders/zip_container_guard.py _XmlProlog   100% 53 0 0   100% 34 0   100%
src/local_deep_research/document_loaders/zip_container_guard.py _CountedXmlStream   95% 21 1 0   83% 6 1   93%
src/local_deep_research/document_loaders/zip_container_guard.py _XlsxIndexedList   100% 14 0 0   100% 8 0   100%
src/local_deep_research/document_loaders/zip_container_guard.py _ContentTypes   100% 0 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/zip_container_guard.py _PptxShapeTree   100% 0 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/zip_container_guard.py _DocxSectionStats   100% 0 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/zip_container_guard.py _OpenCell   100% 9 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/zip_container_guard.py _OpenRow   100% 13 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/zip_container_guard.py _OpenTable   100% 6 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/zip_container_guard.py (no class)   98% 1709 42 2   94% 820 43   96%
src/local_deep_research/domain_classifier/__init__.py (no class)   100% 9 0 0   100% 4 0   100%
src/local_deep_research/domain_classifier/classifier.py DomainClassifier   92% 132 10 0   93% 42 3   93%
src/local_deep_research/domain_classifier/classifier.py (no class)   100% 24 0 0   100% 0 0   100%
src/local_deep_research/domain_classifier/models.py DomainClassification   100% 1 0 0   100% 0 0   100%
src/local_deep_research/domain_classifier/models.py (no class)   100% 17 0 0   100% 0 0   100%
src/local_deep_research/embeddings/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/embeddings/embeddings_config.py (no class)   97% 68 2 0   92% 24 2   96%
src/local_deep_research/embeddings/model_cache.py _ModelCache   98% 87 2 0   90% 30 3   96%
src/local_deep_research/embeddings/model_cache.py SharedSentenceTransformerEmbeddings   100% 8 0 0   100% 0 0   100%
src/local_deep_research/embeddings/model_cache.py (no class)   99% 90 1 0   95% 22 1   98%
src/local_deep_research/embeddings/model_loading.py ModelAccessLock   96% 48 2 0   89% 18 2   94%
src/local_deep_research/embeddings/model_loading.py (no class)   100% 16 0 0   100% 0 0   100%
src/local_deep_research/embeddings/providers/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/embeddings/providers/base.py BaseEmbeddingProvider   67% 9 3 0   100% 2 0   73%
src/local_deep_research/embeddings/providers/base.py (no class)   100% 27 0 0   100% 0 0   100%
src/local_deep_research/embeddings/providers/implementations/__init__.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/embeddings/providers/implementations/ollama.py OllamaEmbeddingsProvider   94% 70 4 0   100% 20 0   96%
src/local_deep_research/embeddings/providers/implementations/ollama.py (no class)   100% 29 0 0   100% 0 0   100%
src/local_deep_research/embeddings/providers/implementations/openai.py OpenAIEmbeddingsProvider   98% 134 3 0   98% 50 1   98%
src/local_deep_research/embeddings/providers/implementations/openai.py (no class)   100% 26 0 0   100% 0 0   100%
src/local_deep_research/embeddings/providers/implementations/owned_openai_embeddings.py OwnedOpenAIEmbeddings   88% 8 1 0   88% 8 1   88%
src/local_deep_research/embeddings/providers/implementations/owned_openai_embeddings.py (no class)   89% 46 5 0   100% 2 0   90%
src/local_deep_research/embeddings/providers/implementations/sentence_transformers.py SentenceTransformersProvider   94% 169 10 8   91% 80 7   93%
src/local_deep_research/embeddings/providers/implementations/sentence_transformers.py (no class)   100% 38 0 0   100% 0 0   100%
src/local_deep_research/embeddings/sentence_transformer_models.py SentenceTransformerModelSpec   100% 1 0 0   100% 0 0   100%
src/local_deep_research/embeddings/sentence_transformer_models.py (no class)   100% 15 0 0   100% 2 0   100%
src/local_deep_research/embeddings/splitters/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/embeddings/splitters/bounded_semantic_chunker.py _DocumentSplitter   100% 0 0 0   100% 0 0   100%
src/local_deep_research/embeddings/splitters/bounded_semantic_chunker.py BoundedSemanticChunker   100% 21 0 0   100% 4 0   100%
src/local_deep_research/embeddings/splitters/bounded_semantic_chunker.py (no class)   100% 13 0 3   50% 2 1   93%
src/local_deep_research/embeddings/splitters/text_splitter_registry.py (no class)   100% 60 0 2   95% 22 1   99%
src/local_deep_research/error_handling/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/error_handling/error_messages.py (no class)   100% 14 0 0   100% 8 0   100%
src/local_deep_research/error_handling/error_reporter.py ErrorCategory   100% 0 0 0   100% 0 0   100%
src/local_deep_research/error_handling/error_reporter.py ErrorReporter   90% 67 7 0   86% 28 2   88%
src/local_deep_research/error_handling/error_reporter.py (no class)   100% 23 0 0   100% 0 0   100%
src/local_deep_research/error_handling/openai_compat_errors.py (no class)   95% 60 3 0   95% 20 1   95%
src/local_deep_research/error_handling/report_generator.py ErrorReportGenerator   100% 103 0 0   97% 58 2   99%
src/local_deep_research/error_handling/report_generator.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/exceptions.py ResearchTerminatedException   100% 0 0 0   100% 0 0   100%
src/local_deep_research/exceptions.py NoUserDatabaseError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/exceptions.py SystemAtCapacityError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/exceptions.py DuplicateResearchError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/exceptions.py InvalidQueuedResearchOverridesError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/exceptions.py (no class)   100% 10 0 0   100% 0 0   100%
src/local_deep_research/exporters/__init__.py (no class)   83% 12 2 0   100% 0 0   83%
src/local_deep_research/exporters/base.py ExportResult   100% 0 0 0   100% 0 0   100%
src/local_deep_research/exporters/base.py ExportOptions   100% 0 0 0   100% 0 0   100%
src/local_deep_research/exporters/base.py BaseExporter   79% 19 4 0   100% 12 0   87%
src/local_deep_research/exporters/base.py (no class)   100% 27 0 0   100% 0 0   100%
src/local_deep_research/exporters/latex_exporter.py LaTeXExporter   100% 15 0 0   100% 0 0   100%
src/local_deep_research/exporters/latex_exporter.py (no class)   100% 14 0 0   100% 0 0   100%
src/local_deep_research/exporters/odt_exporter.py ODTExporter   98% 63 1 0   94% 18 1   98%
src/local_deep_research/exporters/odt_exporter.py (no class)   90% 30 3 0   100% 0 0   90%
src/local_deep_research/exporters/pdf_exporter.py PDFExporter   100% 18 0 0   100% 2 0   100%
src/local_deep_research/exporters/pdf_exporter.py (no class)   100% 15 0 0   100% 0 0   100%
src/local_deep_research/exporters/quarto_exporter.py QuartoExporter   100% 30 0 0   100% 2 0   100%
src/local_deep_research/exporters/quarto_exporter.py (no class)   100% 17 0 0   100% 0 0   100%
src/local_deep_research/exporters/registry.py ExporterRegistry   100% 18 0 0   100% 4 0   100%
src/local_deep_research/exporters/registry.py (no class)   100% 16 0 0   100% 0 0   100%
src/local_deep_research/exporters/ris_exporter.py RISExporter   100% 15 0 0   100% 0 0   100%
src/local_deep_research/exporters/ris_exporter.py (no class)   100% 14 0 0   100% 0 0   100%
src/local_deep_research/followup_research/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/followup_research/models.py FollowUpRequest   100% 1 0 0   100% 0 0   100%
src/local_deep_research/followup_research/models.py (no class)   100% 8 0 0   100% 0 0   100%
src/local_deep_research/followup_research/service.py FollowUpResearchService   95% 43 2 0   100% 10 0   96%
src/local_deep_research/followup_research/service.py (no class)   100% 11 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/data_sources/__init__.py (no class)   93% 14 1 0   75% 4 1   89%
src/local_deep_research/journal_quality/data_sources/_openalex_common.py (no class)   98% 114 2 0   96% 50 2   98%
src/local_deep_research/journal_quality/data_sources/base.py DataSource   13% 15 13 0   0% 4 0   11%
src/local_deep_research/journal_quality/data_sources/base.py (no class)   100% 26 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/data_sources/doaj.py DOAJSource   92% 24 2 0   67% 6 2   87%
src/local_deep_research/journal_quality/data_sources/doaj.py (no class)   100% 29 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/data_sources/institutions.py InstitutionSource   82% 51 9 0   60% 20 6   76%
src/local_deep_research/journal_quality/data_sources/institutions.py (no class)   100% 25 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/data_sources/jabref.py JabRefSource   86% 36 5 0   62% 16 4   79%
src/local_deep_research/journal_quality/data_sources/jabref.py (no class)   100% 24 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/data_sources/openalex.py SchemaDriftError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/data_sources/openalex.py OpenAlexSource   88% 58 7 0   77% 22 5   85%
src/local_deep_research/journal_quality/data_sources/openalex.py (no class)   100% 25 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/data_sources/predatory.py PredatorySource   91% 33 3 0   64% 14 3   83%
src/local_deep_research/journal_quality/data_sources/predatory.py (no class)   100% 24 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/db.py JournalQualityDB   98% 341 6 0   89% 156 17   95%
src/local_deep_research/journal_quality/db.py (no class)   95% 406 19 0   91% 122 9   94%
src/local_deep_research/journal_quality/downloader.py (no class)   85% 226 33 0   86% 44 6   86%
src/local_deep_research/journal_quality/models.py JournalQualityBase   100% 0 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/models.py Source   100% 0 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/models.py Institution   100% 0 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/models.py PredatoryJournal   100% 0 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/models.py PredatoryPublisher   100% 0 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/models.py PredatoryHijacked   100% 0 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/models.py Abbreviation   100% 0 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/models.py (no class)   100% 49 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/scoring.py (no class)   100% 56 0 0   100% 44 0   100%
src/local_deep_research/library/download_management/__init__.py (no class)   100% 5 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/database_init.py (no class)   92% 24 2 0   75% 4 1   89%
src/local_deep_research/library/download_management/failure_classifier.py BaseFailure   100% 6 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/failure_classifier.py PermanentFailure   100% 1 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/failure_classifier.py TemporaryFailure   100% 1 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/failure_classifier.py RateLimitFailure   100% 7 0 0   100% 2 0   100%
src/local_deep_research/library/download_management/failure_classifier.py FailureClassifier   97% 63 2 0   96% 52 2   97%
src/local_deep_research/library/download_management/failure_classifier.py (no class)   100% 18 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/filters/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/filters/resource_filter.py ResourceFilter   100% 16 0 0   100% 4 0   100%
src/local_deep_research/library/download_management/filters/resource_filter.py (no class)   100% 9 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/models/__init__.py Base   100% 0 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/models/__init__.py FailureType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/models/__init__.py DownloadStatus   100% 0 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/models/__init__.py ResourceDownloadStatus   0% 1 1 0   100% 0 0   0%
src/local_deep_research/library/download_management/models/__init__.py (no class)   100% 43 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/retry_manager.py RetryDecision   100% 0 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/retry_manager.py ResourceFilterResult   100% 5 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/retry_manager.py FilterSummary   100% 15 0 0   100% 6 0   100%
src/local_deep_research/library/download_management/retry_manager.py RetryManager   98% 57 1 0   91% 22 2   96%
src/local_deep_research/library/download_management/retry_manager.py (no class)   100% 25 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/status_tracker.py ResourceStatusTracker   92% 120 9 0   95% 42 2   93%
src/local_deep_research/library/download_management/status_tracker.py (no class)   100% 26 0 0   100% 6 0   100%
src/local_deep_research/llm/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/llm/cancellation.py (no class)   68% 68 22 0   73% 22 4   69%
src/local_deep_research/llm/llm_registry.py LLMRegistry   100% 42 0 0   100% 14 0   100%
src/local_deep_research/llm/llm_registry.py (no class)   100% 29 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/_helpers.py (no class)   100% 73 0 0   100% 20 0   100%
src/local_deep_research/llm/providers/auto_discovery.py ProviderInfo   100% 14 0 0   100% 4 0   100%
src/local_deep_research/llm/providers/auto_discovery.py ProviderDiscovery   98% 59 1 0   93% 30 2   97%
src/local_deep_research/llm/providers/auto_discovery.py (no class)   100% 38 0 0   100% 2 0   100%
src/local_deep_research/llm/providers/base.py BaseLLMProvider   100% 27 0 1   100% 6 0   100%
src/local_deep_research/llm/providers/base.py (no class)   100% 28 0 0   100% 4 0   100%
src/local_deep_research/llm/providers/implementations/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/anthropic.py AnthropicProvider   96% 55 2 0   95% 20 1   96%
src/local_deep_research/llm/providers/implementations/anthropic.py (no class)   100% 20 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/atlascloud.py AtlasCloudProvider   100% 1 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/atlascloud.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/custom_anthropic_endpoint.py CustomAnthropicEndpointProvider   100% 20 0 0   100% 4 0   100%
src/local_deep_research/llm/providers/implementations/custom_anthropic_endpoint.py (no class)   100% 19 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/custom_openai_endpoint.py CustomOpenAIEndpointProvider   100% 31 0 0   100% 10 0   100%
src/local_deep_research/llm/providers/implementations/custom_openai_endpoint.py (no class)   100% 24 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/deepseek.py DeepseekProvider   100% 1 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/deepseek.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/google.py GoogleProvider   100% 29 0 0   100% 12 0   100%
src/local_deep_research/llm/providers/implementations/google.py (no class)   100% 17 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/ionos.py IONOSProvider   100% 1 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/ionos.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/llamacpp.py LlamaCppProvider   100% 18 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/llamacpp.py (no class)   100% 22 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/lmstudio.py LMStudioProvider   100% 30 0 0   100% 6 0   100%
src/local_deep_research/llm/providers/implementations/lmstudio.py (no class)   100% 28 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/ollama.py OllamaProvider   96% 83 3 0   100% 18 0   97%
src/local_deep_research/llm/providers/implementations/ollama.py (no class)   100% 32 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/openai.py OpenAIProvider   100% 28 0 0   100% 6 0   100%
src/local_deep_research/llm/providers/implementations/openai.py (no class)   100% 17 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/openrouter.py OpenRouterProvider   100% 1 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/openrouter.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/orcarouter.py OrcaRouterProvider   100% 1 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/orcarouter.py (no class)   100% 11 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/qwen.py QwenCloudProvider   100% 1 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/qwen.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/requesty.py RequestyProvider   100% 1 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/requesty.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/xai.py XAIProvider   100% 1 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/xai.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/openai_base.py OpenAICompatibleProvider   97% 105 3 0   92% 38 3   96%
src/local_deep_research/llm/providers/openai_base.py (no class)   100% 29 0 0   100% 0 0   100%
src/local_deep_research/mcp/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/mcp/__main__.py (no class)   67% 3 1 0   50% 2 1   60%
src/local_deep_research/mcp/server.py ValidationError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/mcp/server.py (no class)   97% 326 11 0   93% 84 6   96%
src/local_deep_research/metrics/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/metrics/database.py MetricsDatabase   100% 16 0 0   100% 6 0   100%
src/local_deep_research/metrics/database.py (no class)   100% 9 0 0   100% 0 0   100%
src/local_deep_research/metrics/pricing/__init__.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/metrics/pricing/cost_calculator.py CostCalculator   100% 48 0 0   94% 16 1   98%
src/local_deep_research/metrics/pricing/cost_calculator.py (no class)   100% 46 0 0   100% 12 0   100%
src/local_deep_research/metrics/pricing/pricing_cache.py PricingCache   100% 15 0 0   100% 0 0   100%
src/local_deep_research/metrics/pricing/pricing_cache.py (no class)   100% 14 0 0   100% 0 0   100%
src/local_deep_research/metrics/pricing/pricing_fetcher.py PricingFetcher   98% 55 1 0   97% 38 1   98%
src/local_deep_research/metrics/pricing/pricing_fetcher.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/metrics/query_utils.py TruncationSummary   100% 0 0 0   100% 0 0   100%
src/local_deep_research/metrics/query_utils.py (no class)   100% 40 0 0   100% 12 0   100%
src/local_deep_research/metrics/search_tracker.py SearchTracker   99% 126 1 0   95% 40 2   98%
src/local_deep_research/metrics/search_tracker.py (no class)   93% 27 2 0   100% 4 0   94%
src/local_deep_research/metrics/token_counter.py TokenCountingCallback   98% 303 6 0   95% 134 5   97%
src/local_deep_research/metrics/token_counter.py TokenCounter   98% 239 5 0   92% 96 8   96%
src/local_deep_research/metrics/token_counter.py (no class)   100% 37 0 0   100% 0 0   100%
src/local_deep_research/news/__init__.py (no class)   100% 7 0 0   100% 0 0   100%
src/local_deep_research/news/api.py (no class)   95% 424 22 0   93% 136 9   94%
src/local_deep_research/news/constants.py (no class)   100% 80 0 0   100% 40 0   100%
src/local_deep_research/news/core/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/core/base_card.py CardSource   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/core/base_card.py CardVersion   100% 2 0 0   100% 2 0   100%
src/local_deep_research/news/core/base_card.py BaseCard   95% 39 2 0   100% 10 0   96%
src/local_deep_research/news/core/base_card.py NewsCard   100% 7 0 0   100% 2 0   100%
src/local_deep_research/news/core/base_card.py ResearchCard   100% 4 0 0   100% 0 0   100%
src/local_deep_research/news/core/base_card.py UpdateCard   100% 6 0 0   100% 0 0   100%
src/local_deep_research/news/core/base_card.py OverviewCard   100% 4 0 0   100% 0 0   100%
src/local_deep_research/news/core/base_card.py (no class)   100% 83 0 0   100% 0 0   100%
src/local_deep_research/news/core/card_factory.py CardFactory   98% 92 2 0   94% 36 2   97%
src/local_deep_research/news/core/card_factory.py (no class)   100% 32 0 0   100% 0 0   100%
src/local_deep_research/news/core/card_storage.py SQLCardStorage   98% 125 2 0   92% 48 4   97%
src/local_deep_research/news/core/card_storage.py (no class)   100% 24 0 0   100% 0 0   100%
src/local_deep_research/news/core/news_analyzer.py NewsAnalyzer   100% 145 0 0   98% 58 1   99%
src/local_deep_research/news/core/news_analyzer.py (no class)   100% 21 0 0   100% 0 0   100%
src/local_deep_research/news/core/relevance_service.py RelevanceService   100% 40 0 0   100% 28 0   100%
src/local_deep_research/news/core/relevance_service.py (no class)   100% 12 0 0   100% 2 0   100%
src/local_deep_research/news/core/search_integration.py NewsSearchCallback   88% 24 3 0   100% 6 0   90%
src/local_deep_research/news/core/search_integration.py (no class)   100% 28 0 0   100% 0 0   100%
src/local_deep_research/news/core/storage.py BaseStorage   17% 6 5 0   100% 0 0   17%
src/local_deep_research/news/core/storage.py CardStorage   0% 6 6 0   100% 0 0   0%
src/local_deep_research/news/core/storage.py RatingStorage   0% 4 4 0   100% 0 0   0%
src/local_deep_research/news/core/storage.py PreferenceStorage   0% 5 5 0   100% 0 0   0%
src/local_deep_research/news/core/storage.py (no class)   100% 48 0 0   100% 0 0   100%
src/local_deep_research/news/core/storage_manager.py InteractionType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/core/storage_manager.py StorageManager   95% 122 6 0   86% 42 6   93%
src/local_deep_research/news/core/storage_manager.py (no class)   100% 32 0 0   100% 0 0   100%
src/local_deep_research/news/core/utils.py (no class)   100% 35 0 0   100% 8 0   100%
src/local_deep_research/news/exceptions.py NewsAPIException   100% 9 0 0   100% 2 0   100%
src/local_deep_research/news/exceptions.py NewsFeatureDisabledException   100% 1 0 0   100% 0 0   100%
src/local_deep_research/news/exceptions.py InvalidLimitException   100% 1 0 0   100% 0 0   100%
src/local_deep_research/news/exceptions.py SubscriptionNotFoundException   100% 1 0 0   100% 0 0   100%
src/local_deep_research/news/exceptions.py SubscriptionCreationException   100% 1 0 0   100% 0 0   100%
src/local_deep_research/news/exceptions.py SubscriptionUpdateException   100% 1 0 0   100% 0 0   100%
src/local_deep_research/news/exceptions.py SubscriptionDeletionException   100% 1 0 0   100% 0 0   100%
src/local_deep_research/news/exceptions.py DatabaseAccessException   100% 1 0 0   100% 0 0   100%
src/local_deep_research/news/exceptions.py NewsFeedGenerationException   100% 4 0 0   100% 2 0   100%
src/local_deep_research/news/exceptions.py ResearchProcessingException   100% 4 0 0   100% 2 0   100%
src/local_deep_research/news/exceptions.py NotImplementedException   100% 1 0 0   100% 0 0   100%
src/local_deep_research/news/exceptions.py InvalidParameterException   100% 1 0 0   100% 0 0   100%
src/local_deep_research/news/exceptions.py SchedulerNotificationException   100% 1 0 0   100% 0 0   100%
src/local_deep_research/news/exceptions.py (no class)   100% 29 0 0   100% 0 0   100%
src/local_deep_research/news/folder_manager.py FolderManager   100% 67 0 0   100% 22 0   100%
src/local_deep_research/news/folder_manager.py (no class)   100% 16 0 0   100% 0 0   100%
src/local_deep_research/news/preference_manager/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/preference_manager/base_preference.py BasePreferenceManager   94% 32 2 0   100% 10 0   95%
src/local_deep_research/news/preference_manager/base_preference.py TopicRegistry   100% 16 0 0   100% 4 0   100%
src/local_deep_research/news/preference_manager/base_preference.py (no class)   100% 22 0 0   100% 0 0   100%
src/local_deep_research/news/preference_manager/storage.py SQLPreferenceStorage   100% 80 0 0   94% 32 2   98%
src/local_deep_research/news/preference_manager/storage.py (no class)   100% 18 0 0   100% 0 0   100%
src/local_deep_research/news/rating_system/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/rating_system/base_rater.py RelevanceRating   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/rating_system/base_rater.py QualityRating   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/rating_system/base_rater.py BaseRatingSystem   79% 14 3 0   100% 2 0   81%
src/local_deep_research/news/rating_system/base_rater.py QualityRatingSystem   100% 13 0 0   100% 6 0   100%
src/local_deep_research/news/rating_system/base_rater.py RelevanceRatingSystem   92% 13 1 0   83% 6 1   89%
src/local_deep_research/news/rating_system/base_rater.py (no class)   100% 37 0 0   100% 0 0   100%
src/local_deep_research/news/rating_system/storage.py SQLRatingStorage   96% 73 3 0   91% 32 3   94%
src/local_deep_research/news/rating_system/storage.py (no class)   100% 19 0 0   100% 0 0   100%
src/local_deep_research/news/recommender/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/recommender/base_recommender.py BaseRecommender   98% 45 1 0   100% 20 0   98%
src/local_deep_research/news/recommender/base_recommender.py (no class)   100% 18 0 0   100% 0 0   100%
src/local_deep_research/news/recommender/topic_based.py TopicBasedRecommender   96% 95 4 0   96% 28 1   96%
src/local_deep_research/news/recommender/topic_based.py SearchBasedRecommender   100% 3 0 0   100% 0 0   100%
src/local_deep_research/news/recommender/topic_based.py (no class)   100% 17 0 0   100% 0 0   100%
src/local_deep_research/news/subscription_runner.py (no class)   100% 31 0 0   100% 10 0   100%
src/local_deep_research/news/utils/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/utils/headline_generator.py (no class)   98% 57 1 0   90% 10 1   97%
src/local_deep_research/news/utils/topic_generator.py (no class)   97% 88 3 0   96% 28 1   97%
src/local_deep_research/notifications/__init__.py (no class)   100% 8 0 0   100% 0 0   100%
src/local_deep_research/notifications/apprise_log_utils.py _AppriseSanitizingRecordFactory   100% 9 0 0   100% 2 0   100%
src/local_deep_research/notifications/apprise_log_utils.py (no class)   100% 12 0 0   100% 2 0   100%
src/local_deep_research/notifications/exceptions.py NotificationError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/notifications/exceptions.py ServiceError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/notifications/exceptions.py SecurityBlockError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/notifications/exceptions.py SendError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/notifications/exceptions.py RateLimitError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/notifications/exceptions.py (no class)   100% 10 0 0   100% 0 0   100%
src/local_deep_research/notifications/manager.py NotificationReason   100% 0 0 0   100% 0 0   100%
src/local_deep_research/notifications/manager.py NotificationResult   100% 1 0 0   100% 0 0   100%
src/local_deep_research/notifications/manager.py NotificationManager   95% 151 7 0   98% 50 1   96%
src/local_deep_research/notifications/manager.py RateLimiter   100% 66 0 0   96% 26 1   99%
src/local_deep_research/notifications/manager.py (no class)   100% 47 0 0   100% 0 0   100%
src/local_deep_research/notifications/queue_helpers.py (no class)   98% 127 3 0   97% 30 1   97%
src/local_deep_research/notifications/service.py NotificationService   90% 167 16 0   95% 78 4   92%
src/local_deep_research/notifications/service.py (no class)   100% 39 0 0   100% 0 0   100%
src/local_deep_research/notifications/templates.py EventType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/notifications/templates.py NotificationTemplate   95% 62 3 0   94% 18 1   95%
src/local_deep_research/notifications/templates.py (no class)   100% 26 0 0   100% 0 0   100%
src/local_deep_research/notifications/url_builder.py (no class)   100% 27 0 0   100% 8 0   100%
src/local_deep_research/report_generator.py IntegratedReportGenerator   90% 498 52 0   82% 284 34   87%
src/local_deep_research/report_generator.py (no class)   96% 114 4 0   88% 24 3   95%
src/local_deep_research/research_library/__init__.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/research_library/deletion/__init__.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/research_library/deletion/services/__init__.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/research_library/deletion/services/bulk_deletion.py BulkDeletionService   95% 58 3 0   91% 22 2   94%
src/local_deep_research/research_library/deletion/services/bulk_deletion.py (no class)   100% 9 0 0   100% 0 0   100%
src/local_deep_research/research_library/deletion/services/collection_deletion.py CollectionDeletionService   98% 117 2 0   100% 30 0   99%
src/local_deep_research/research_library/deletion/services/collection_deletion.py (no class)   91% 23 2 0   100% 0 0   91%
src/local_deep_research/research_library/deletion/services/document_deletion.py DocumentDeletionService   98% 171 4 0   93% 58 4   97%
src/local_deep_research/research_library/deletion/services/document_deletion.py (no class)   100% 45 0 0   83% 6 1   98%
src/local_deep_research/research_library/deletion/utils/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/research_library/deletion/utils/cascade_helper.py RemoteVectorStoreDropError   100% 5 0 0   100% 0 0   100%
src/local_deep_research/research_library/deletion/utils/cascade_helper.py _PlannedIndex   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/deletion/utils/cascade_helper.py CascadeHelper   94% 201 12 0   98% 88 2   95%
src/local_deep_research/research_library/deletion/utils/cascade_helper.py (no class)   100% 69 0 0   100% 8 0   100%
src/local_deep_research/research_library/downloaders/__init__.py (no class)   100% 10 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/arxiv.py ArxivTextSource   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/arxiv.py ArxivTextResult   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/arxiv.py ArxivFullTextStatus   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/arxiv.py ArxivFullTextOutcome   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/arxiv.py ArxivDownloader   97% 264 7 0   96% 148 6   97%
src/local_deep_research/research_library/downloaders/arxiv.py (no class)   100% 69 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/base.py ContentType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/base.py DownloadResult   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/base.py _ResponseBodyTooLarge   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/base.py BaseDownloader   95% 179 9 0   94% 64 4   95%
src/local_deep_research/research_library/downloaders/base.py (no class)   100% 62 0 0   100% 6 0   100%
src/local_deep_research/research_library/downloaders/biorxiv.py BioRxivDownloader   96% 82 3 0   100% 40 0   98%
src/local_deep_research/research_library/downloaders/biorxiv.py (no class)   100% 16 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/direct_pdf.py DirectPDFDownloader   98% 50 1 0   96% 28 1   97%
src/local_deep_research/research_library/downloaders/direct_pdf.py (no class)   100% 10 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/extraction/__init__.py (no class)   100% 8 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/extraction/base.py BaseExtractor   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/extraction/base.py (no class)   100% 5 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/extraction/justext_extractor.py JustextExtractor   100% 26 0 0   100% 8 0   100%
src/local_deep_research/research_library/downloaders/extraction/justext_extractor.py (no class)   100% 6 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/extraction/metadata_extractor.py (no class)   100% 154 0 0   97% 92 3   99%
src/local_deep_research/research_library/downloaders/extraction/newspaper_extractor.py NewspaperExtractor   100% 18 0 0   100% 2 0   100%
src/local_deep_research/research_library/downloaders/extraction/newspaper_extractor.py (no class)   100% 5 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/extraction/pipeline.py _SpecializedResult   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/extraction/pipeline.py (no class)   93% 377 28 15   92% 140 7   92%
src/local_deep_research/research_library/downloaders/extraction/readability_extractor.py ReadabilityExtractor   100% 18 0 0   100% 6 0   100%
src/local_deep_research/research_library/downloaders/extraction/readability_extractor.py (no class)   100% 86 0 0   100% 20 0   100%
src/local_deep_research/research_library/downloaders/extraction/trafilatura_extractor.py TrafilaturaExtractor   95% 21 1 0   75% 4 1   92%
src/local_deep_research/research_library/downloaders/extraction/trafilatura_extractor.py (no class)   100% 7 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/generic.py GenericDownloader   99% 68 1 0   94% 36 2   97%
src/local_deep_research/research_library/downloaders/generic.py (no class)   100% 22 0 0   100% 2 0   100%
src/local_deep_research/research_library/downloaders/html.py _TerminalTransportError   100% 4 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/html.py HTMLDownloader   96% 237 9 1   95% 96 5   96%
src/local_deep_research/research_library/downloaders/html.py (no class)   100% 55 0 0   100% 12 0   100%
src/local_deep_research/research_library/downloaders/openalex.py OpenAlexDownloader   98% 88 2 0   96% 28 1   97%
src/local_deep_research/research_library/downloaders/openalex.py (no class)   100% 17 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/playwright_html.py PlaywrightHTMLDownloader   93% 331 23 0   91% 102 9   93%
src/local_deep_research/research_library/downloaders/playwright_html.py AutoHTMLDownloader   88% 104 12 0   77% 44 8   85%
src/local_deep_research/research_library/downloaders/playwright_html.py (no class)   89% 117 13 0   68% 28 9   85%
src/local_deep_research/research_library/downloaders/pubmed.py PubMedDownloader   96% 256 10 0   92% 130 9   95%
src/local_deep_research/research_library/downloaders/pubmed.py (no class)   100% 25 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/semantic_scholar.py SemanticScholarDownloader   98% 60 1 0   90% 20 2   96%
src/local_deep_research/research_library/downloaders/semantic_scholar.py (no class)   100% 15 0 0   100% 0 0   100%
src/local_deep_research/research_library/extraction_catalog.py ExtractionMethodExtra   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/extraction_catalog.py ExtractionSourceExtra   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/extraction_catalog.py (no class)   100% 5 0 0   100% 0 0   100%
src/local_deep_research/research_library/notes/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/research_library/notes/services/__init__.py (no class)   100% 8 0 0   100% 0 0   100%
src/local_deep_research/research_library/notes/services/note_ai_service.py NoteAIService   100% 500 0 0   97% 202 7   99%
src/local_deep_research/research_library/notes/services/note_ai_service.py (no class)   100% 87 0 0   100% 0 0   100%
src/local_deep_research/research_library/notes/services/note_service.py NoteService   92% 770 65 0   93% 266 19   92%
src/local_deep_research/research_library/notes/services/note_service.py (no class)   94% 179 10 0   86% 36 3   93%
src/local_deep_research/research_library/search/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/research_library/search/services/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/research_library/search/services/research_history_indexer.py ResearchHistoryIndexer   100% 79 0 0   96% 28 1   99%
src/local_deep_research/research_library/search/services/research_history_indexer.py (no class)   100% 28 0 0   100% 0 0   100%
src/local_deep_research/research_library/services/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/services/collection_rebuild.py RebuildCancelled   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/services/collection_rebuild.py CollectionRebuild   94% 163 9 0   88% 50 6   93%
src/local_deep_research/research_library/services/collection_rebuild.py (no class)   100% 62 0 2   100% 4 0   100%
src/local_deep_research/research_library/services/download_service.py RefillRank   100% 1 0 0   100% 0 0   100%
src/local_deep_research/research_library/services/download_service.py DownloadService   96% 1147 44 0   90% 470 43   94%
src/local_deep_research/research_library/services/download_service.py (no class)   98% 117 2 0   88% 16 2   97%
src/local_deep_research/research_library/services/faiss_safe_load.py _RestrictedFaissUnpickler   100% 5 0 0   100% 2 0   100%
src/local_deep_research/research_library/services/faiss_safe_load.py (no class)   100% 11 0 0   100% 0 0   100%
src/local_deep_research/research_library/services/library_rag_service.py _PreparedDocument   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/services/library_rag_service.py _LazyEmbeddings   100% 3 0 0   100% 0 0   100%
src/local_deep_research/research_library/services/library_rag_service.py _TrackedRLock   100% 29 0 0   100% 10 0   100%
src/local_deep_research/research_library/services/library_rag_service.py LibraryRAGService   89% 979 105 0   89% 344 37   89%
src/local_deep_research/research_library/services/library_rag_service.py (no class)   100% 177 0 0   100% 16 0   100%
src/local_deep_research/research_library/services/library_service.py LibraryService   93% 407 27 0   88% 182 15   92%
src/local_deep_research/research_library/services/library_service.py (no class)   100% 68 0 0   100% 2 0   100%
src/local_deep_research/research_library/services/pdf_storage_manager.py PDFStorageManager   92% 156 12 0   94% 54 3   93%
src/local_deep_research/research_library/services/pdf_storage_manager.py (no class)   100% 52 0 0   100% 10 0   100%
src/local_deep_research/research_library/services/rag_service_factory.py (no class)   93% 71 5 0   94% 16 1   93%
src/local_deep_research/research_library/utils/__init__.py (no class)   96% 233 10 0   94% 82 5   95%
src/local_deep_research/research_library/zotero/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/research_library/zotero/client.py ZoteroError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/zotero/client.py ZoteroAuthError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/zotero/client.py ZoteroTransientError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/zotero/client.py ZoteroAttachment   100% 1 0 0   100% 0 0   100%
src/local_deep_research/research_library/zotero/client.py ZoteroItem   100% 7 0 0   75% 4 1   91%
src/local_deep_research/research_library/zotero/client.py ZoteroClient   99% 280 2 0   96% 116 5   98%
src/local_deep_research/research_library/zotero/client.py (no class)   100% 81 0 0   100% 6 0   100%
src/local_deep_research/research_library/zotero/sync_service.py ZoteroConfig   100% 4 0 0   100% 0 0   100%
src/local_deep_research/research_library/zotero/sync_service.py ZoteroSyncService   100% 593 0 0   95% 240 11   99%
src/local_deep_research/research_library/zotero/sync_service.py (no class)   98% 112 2 0   100% 2 0   98%
src/local_deep_research/scheduler/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/scheduler/background.py SchedulerCredentialStore   100% 5 0 0   100% 0 0   100%
src/local_deep_research/scheduler/background.py DocumentSchedulerSettings   100% 1 0 0   100% 0 0   100%
src/local_deep_research/scheduler/background.py BackgroundJobScheduler   94% 799 47 0   91% 218 12   93%
src/local_deep_research/scheduler/background.py (no class)   100% 114 0 0   100% 6 0   100%
src/local_deep_research/search_system.py AdvancedSearchSystem   82% 181 32 2   74% 70 14   80%
src/local_deep_research/search_system.py (no class)   100% 24 0 0   100% 2 0   100%
src/local_deep_research/search_system_factory.py (no class)   92% 75 6 0   87% 38 5   90%
src/local_deep_research/security/__init__.py (no class)   100% 35 0 0   100% 4 0   100%
src/local_deep_research/security/account_lockout.py AccountLockoutManager   100% 52 0 0   100% 24 0   100%
src/local_deep_research/security/account_lockout.py (no class)   100% 20 0 0   75% 4 1   96%
src/local_deep_research/security/client_safe_errors.py (no class)   100% 8 0 0   100% 4 0   100%
src/local_deep_research/security/data_sanitizer.py DataSanitizer   100% 47 0 0   100% 32 0   100%
src/local_deep_research/security/data_sanitizer.py (no class)   99% 78 1 0   96% 24 1   98%
src/local_deep_research/security/directory_creation.py DirectoryCreationSecurityError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/directory_creation.py (no class)   100% 20 0 0   100% 10 0   100%
src/local_deep_research/security/dns_pinning.py NotificationGuardUnavailableError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/dns_pinning.py (no class)   94% 199 12 0   83% 66 11   91%
src/local_deep_research/security/egress/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/security/egress/audit_hook.py (no class)   91% 81 7 2   77% 30 7   87%
src/local_deep_research/security/egress/classification.py Sensitivity   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/egress/classification.py Exposure   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/egress/classification.py Role   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/egress/classification.py Mode   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/egress/classification.py Label   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/egress/classification.py Component   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/egress/classification.py Decision   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/egress/classification.py (no class)   100% 48 0 0   100% 8 0   100%
src/local_deep_research/security/egress/fetch.py (no class)   100% 12 0 0   100% 4 0   100%
src/local_deep_research/security/egress/guidance.py (no class)   96% 27 1 0   92% 12 1   95%
src/local_deep_research/security/egress/policy.py EgressScope   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/egress/policy.py EgressContext   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/egress/policy.py Decision   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/egress/policy.py EngineClassification   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/egress/policy.py PolicyDeniedError   100% 3 0 0   100% 0 0   100%
src/local_deep_research/security/egress/policy.py (no class)   93% 759 56 26   94% 340 16   93%
src/local_deep_research/security/egress/run_classification.py (no class)   98% 90 2 0   100% 28 0   98%
src/local_deep_research/security/egress/validators.py GuardedEngineUrl   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/egress/validators.py (no class)   89% 306 33 0   92% 126 10   90%
src/local_deep_research/security/egress/warnings.py (no class)   92% 145 11 0   94% 66 4   93%
src/local_deep_research/security/file_integrity/__init__.py (no class)   100% 5 0 0   100% 0 0   100%
src/local_deep_research/security/file_integrity/base_verifier.py FileType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/file_integrity/base_verifier.py BaseFileVerifier   67% 9 3 0   100% 2 0   73%
src/local_deep_research/security/file_integrity/base_verifier.py (no class)   100% 17 0 0   100% 0 0   100%
src/local_deep_research/security/file_integrity/integrity_manager.py FileIntegrityManager   98% 190 4 0   96% 78 1   97%
src/local_deep_research/security/file_integrity/integrity_manager.py (no class)   100% 33 0 0   100% 0 0   100%
src/local_deep_research/security/file_integrity/verifiers/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/security/file_integrity/verifiers/faiss_verifier.py FAISSIndexVerifier   100% 3 0 0   100% 0 0   100%
src/local_deep_research/security/file_integrity/verifiers/faiss_verifier.py (no class)   100% 6 0 0   100% 0 0   100%
src/local_deep_research/security/file_upload_validator.py FileUploadValidator   100% 40 0 0   100% 24 0   100%
src/local_deep_research/security/file_upload_validator.py (no class)   100% 39 0 0   100% 6 0   100%
src/local_deep_research/security/file_write_verifier.py FileWriteSecurityError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/file_write_verifier.py (no class)   98% 63 1 0   90% 20 2   96%
src/local_deep_research/security/filename_sanitizer.py UnsafeFilenameError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/filename_sanitizer.py (no class)   100% 43 0 0   96% 24 1   99%
src/local_deep_research/security/ip_ranges.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/security/legacy_ipv4.py (no class)   100% 87 0 0   100% 36 0   100%
src/local_deep_research/security/log_sanitizer.py _BarePass   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/log_sanitizer.py _PipelineRun   98% 59 1 0   94% 32 2   97%
src/local_deep_research/security/log_sanitizer.py _ExceptionNodePlan   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/log_sanitizer.py (no class)   94% 1533 94 0   90% 700 65   93%
src/local_deep_research/security/module_whitelist.py SecurityError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/module_whitelist.py (no class)   100% 41 0 0   100% 12 0   100%
src/local_deep_research/security/network_utils.py (no class)   100% 27 0 0   100% 10 0   100%
src/local_deep_research/security/notification_destination.py NotificationDestinationKind   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/notification_destination.py NotificationDestination   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/notification_destination.py NotificationDestinationError   100% 3 0 0   100% 0 0   100%
src/local_deep_research/security/notification_destination.py (no class)   89% 219 25 0   83% 90 15   87%
src/local_deep_research/security/notification_validator.py NotificationURLValidationError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/notification_validator.py NotificationURLValidator   95% 218 11 0   97% 114 3   96%
src/local_deep_research/security/notification_validator.py (no class)   100% 173 0 0   100% 54 0   100%
src/local_deep_research/security/password_validator.py PasswordValidator   100% 9 0 0   100% 6 0   100%
src/local_deep_research/security/password_validator.py (no class)   100% 6 0 0   100% 0 0   100%
src/local_deep_research/security/path_validator.py PathValidator   93% 141 10 0   100% 84 0   96%
src/local_deep_research/security/path_validator.py (no class)   97% 73 2 0   89% 18 2   96%
src/local_deep_research/security/safe_requests.py _BodyGuard   100% 16 0 0   88% 8 1   96%
src/local_deep_research/security/safe_requests.py _size_guarded_class.SizeGuarded   100% 14 0 0   100% 10 0   100%
src/local_deep_research/security/safe_requests.py SafeSession   100% 75 0 0   97% 38 1   99%
src/local_deep_research/security/safe_requests.py (no class)   97% 336 9 2   93% 106 5   96%
src/local_deep_research/security/secure_logging.py SecureLogger   100% 5 0 0   100% 0 0   100%
src/local_deep_research/security/secure_logging.py (no class)   100% 16 0 0   100% 0 0   100%
src/local_deep_research/security/security_settings.py (no class)   95% 55 3 0   95% 20 1   95%
src/local_deep_research/security/ssrf_validator.py (no class)   97% 233 8 0   95% 100 5   96%
src/local_deep_research/security/toml_limits.py TOMLLimitError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/toml_limits.py (no class)   100% 33 0 0   100% 14 0   100%
src/local_deep_research/security/url_builder.py URLBuilderError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/url_builder.py (no class)   93% 70 5 0   100% 26 0   95%
src/local_deep_research/security/url_redaction.py (no class)   97% 118 4 0   93% 56 4   95%
src/local_deep_research/security/url_validator.py URLValidationError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/security/url_validator.py URLValidator   91% 142 13 0   98% 86 2   93%
src/local_deep_research/security/url_validator.py (no class)   100% 34 0 0   100% 0 0   100%
src/local_deep_research/settings/__init__.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/settings/base.py ISettingsManager   0% 9 9 0   100% 0 0   0%
src/local_deep_research/settings/base.py (no class)   100% 21 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/__init__.py (no class)   100% 11 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/bootstrap.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/db_config.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/news_scheduler.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/queue_processor.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/security.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/server.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/testing.py (no class)   100% 8 0 0   100% 0 0   100%
src/local_deep_research/settings/env_registry.py (no class)   100% 42 0 0   100% 10 0   100%
src/local_deep_research/settings/env_settings.py EnvSetting   96% 26 1 0   100% 12 0   97%
src/local_deep_research/settings/env_settings.py BooleanSetting   100% 9 0 0   100% 6 0   100%
src/local_deep_research/settings/env_settings.py StringSetting   100% 2 0 0   100% 0 0   100%
src/local_deep_research/settings/env_settings.py IntegerSetting   100% 29 0 0   100% 14 0   100%
src/local_deep_research/settings/env_settings.py PathSetting   93% 28 2 0   86% 14 2   90%
src/local_deep_research/settings/env_settings.py SecretSetting   100% 4 0 0   100% 0 0   100%
src/local_deep_research/settings/env_settings.py EnumSetting   100% 14 0 0   100% 8 0   100%
src/local_deep_research/settings/env_settings.py SettingsRegistry   100% 48 0 0   100% 18 0   100%
src/local_deep_research/settings/env_settings.py (no class)   100% 51 0 0   100% 0 0   100%
src/local_deep_research/settings/exceptions.py SettingsValueError   100% 5 0 0   100% 0 0   100%
src/local_deep_research/settings/exceptions.py EnvSettingError   100% 2 0 0   100% 0 0   100%
src/local_deep_research/settings/exceptions.py MissingEnvironmentVariableError   100% 1 0 0   100% 0 0   100%
src/local_deep_research/settings/exceptions.py EnvironmentValueRangeError   83% 6 1 0   75% 4 1   80%
src/local_deep_research/settings/exceptions.py EnvironmentPathNotFoundError   100% 1 0 0   100% 0 0   100%
src/local_deep_research/settings/exceptions.py InvalidEnvironmentValueError   83% 6 1 0   75% 4 1   80%
src/local_deep_research/settings/exceptions.py (no class)   100% 17 0 0   100% 0 0   100%
src/local_deep_research/settings/logger.py (no class)   98% 87 2 0   93% 44 3   96%
src/local_deep_research/settings/manager.py SettingsManager   95% 454 22 0   95% 220 12   95%
src/local_deep_research/settings/manager.py SnapshotSettingsContext   100% 12 0 0   100% 6 0   100%
src/local_deep_research/settings/manager.py (no class)   96% 272 12 0   90% 124 8   94%
src/local_deep_research/storage/__init__.py (no class)   100% 5 0 0   100% 0 0   100%
src/local_deep_research/storage/base.py ReportStorage   0% 6 6 0   100% 0 0   0%
src/local_deep_research/storage/base.py (no class)   100% 15 0 0   100% 0 0   100%
src/local_deep_research/storage/database.py DatabaseReportStorage   95% 58 3 0   100% 12 0   96%
src/local_deep_research/storage/database.py (no class)   100% 14 0 0   100% 0 0   100%
src/local_deep_research/storage/database_with_file_backup.py DatabaseWithFileBackupStorage   100% 32 0 0   100% 10 0   100%
src/local_deep_research/storage/database_with_file_backup.py (no class)   100% 15 0 0   100% 0 0   100%
src/local_deep_research/storage/factory.py (no class)   100% 16 0 0   100% 4 0   100%
src/local_deep_research/storage/file.py FileReportStorage   96% 83 3 0   100% 18 0   97%
src/local_deep_research/storage/file.py (no class)   100% 18 0 0   100% 0 0   100%
src/local_deep_research/text_optimization/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/text_optimization/citation_formatter.py CitationMode   100% 0 0 0   100% 0 0   100%
src/local_deep_research/text_optimization/citation_formatter.py CitationFormatter   97% 235 7 0   98% 104 2   97%
src/local_deep_research/text_optimization/citation_formatter.py QuartoExporter   100% 44 0 0   100% 8 0   100%
src/local_deep_research/text_optimization/citation_formatter.py RISExporter   99% 140 2 0   99% 74 1   99%
src/local_deep_research/text_optimization/citation_formatter.py LaTeXExporter   100% 111 0 0   100% 54 0   100%
src/local_deep_research/text_optimization/citation_formatter.py (no class)   97% 574 15 0   94% 246 15   96%
src/local_deep_research/text_processing/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/text_processing/text_cleaner.py (no class)   100% 9 0 0   100% 2 0   100%
src/local_deep_research/utilities/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/arxiv.py (no class)   100% 47 0 0   100% 12 0   100%
src/local_deep_research/utilities/arxiv_api.py ArxivSortCriterion   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/arxiv_api.py ArxivSortOrder   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/arxiv_api.py ArxivQueryRequest   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/arxiv_api.py ArxivIdRequest   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/arxiv_api.py ArxivAuthor   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/arxiv_api.py ArxivPaper   100% 2 0 0   25% 4 3   50%
src/local_deep_research/utilities/arxiv_api.py _Readable   100% 1 0 0   50% 2 1   67%
src/local_deep_research/utilities/arxiv_api.py _ItemSource   100% 1 0 0   50% 2 1   67%
src/local_deep_research/utilities/arxiv_api.py _GatedArxivSession   60% 10 4 0   25% 4 1   50%
src/local_deep_research/utilities/arxiv_api.py (no class)   98% 111 2 3   93% 14 1   98%
src/local_deep_research/utilities/chunk_anchor.py (no class)   97% 102 3 0   98% 62 1   98%
src/local_deep_research/utilities/citation_normalizer.py (no class)   92% 186 14 0   88% 114 10   91%
src/local_deep_research/utilities/db_utils.py (no class)   97% 77 2 0   100% 22 0   98%
src/local_deep_research/utilities/download_url.py (no class)   95% 59 3 0   78% 18 4   91%
src/local_deep_research/utilities/enums.py KnowledgeAccumulationApproach   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/enums.py (no class)   100% 6 0 0   100% 0 0   100%
src/local_deep_research/utilities/es_utils.py ElasticsearchManager   97% 110 3 0   97% 30 1   97%
src/local_deep_research/utilities/es_utils.py (no class)   100% 15 0 0   100% 0 0   100%
src/local_deep_research/utilities/formatting.py (no class)   100% 8 0 0   100% 4 0   100%
src/local_deep_research/utilities/host_match.py (no class)   100% 12 0 0   100% 2 0   100%
src/local_deep_research/utilities/js_rendering.py (no class)   100% 5 0 0   100% 0 0   100%
src/local_deep_research/utilities/json_utils.py (no class)   100% 93 0 0   91% 56 5   97%
src/local_deep_research/utilities/llm_utils.py _close_inner_ollama_clients._Proxy   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/llm_utils.py (no class)   100% 102 0 0   100% 32 0   100%
src/local_deep_research/utilities/log_utils.py InterceptHandler   100% 14 0 0   75% 4 1   94%
src/local_deep_research/utilities/log_utils.py (no class)   88% 287 34 0   81% 98 11   86%
src/local_deep_research/utilities/lxml_thread_safety.py (no class)   93% 44 3 0   100% 10 0   94%
src/local_deep_research/utilities/metric_write_health.py MetricWriteSnapshot   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/metric_write_health.py MetricWriteHealth   100% 20 0 0   100% 10 0   100%
src/local_deep_research/utilities/metric_write_health.py (no class)   100% 18 0 0   100% 0 0   100%
src/local_deep_research/utilities/office_conversion.py OfficeConversionError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/office_conversion.py (no class)   91% 80 7 2   83% 18 3   90%
src/local_deep_research/utilities/openalex_enrichment.py (no class)   99% 135 1 0   97% 64 2   98%
src/local_deep_research/utilities/pandoc_conversion.py PandocConversionError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/pandoc_conversion.py _MemoryCap   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/pandoc_conversion.py (no class)   94% 122 7 4   88% 26 3   93%
src/local_deep_research/utilities/pdf_extraction_limits.py (no class)   100% 5 0 0   100% 0 0   100%
src/local_deep_research/utilities/pdf_page_walk.py (no class)   91% 22 2 2   100% 2 0   92%
src/local_deep_research/utilities/pdf_stream_release.py _Pending   100% 2 0 0   100% 0 0   100%
src/local_deep_research/utilities/pdf_stream_release.py PdfplumberWalkReleaser   94% 297 17 0   92% 116 9   94%
src/local_deep_research/utilities/pdf_stream_release.py PypdfWalkReleaser   95% 56 3 0   100% 28 0   96%
src/local_deep_research/utilities/pdf_stream_release.py (no class)   92% 202 17 0   90% 70 5   91%
src/local_deep_research/utilities/request_context.py (no class)   100% 30 0 0   100% 0 0   100%
src/local_deep_research/utilities/research_content_cache.py ResearchContentCache   78% 136 30 0   65% 52 10   74%
src/local_deep_research/utilities/research_content_cache.py (no class)   94% 98 6 10   85% 40 6   91%
src/local_deep_research/utilities/resource_utils.py (no class)   100% 14 0 0   100% 8 0   100%
src/local_deep_research/utilities/search_utilities.py _URLCandidateBudgetExceeded   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/search_utilities.py _URLCandidateBudget   100% 4 0 0   100% 2 0   100%
src/local_deep_research/utilities/search_utilities.py (no class)   92% 742 61 0   90% 396 34   91%
src/local_deep_research/utilities/setup_utils.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/utilities/sql_utils.py (no class)   100% 2 0 0   100% 0 0   100%
src/local_deep_research/utilities/thread_context.py (no class)   96% 50 2 0   100% 10 0   97%
src/local_deep_research/utilities/threading_utils.py (no class)   100% 15 0 0   100% 2 0   100%
src/local_deep_research/utilities/type_utils.py (no class)   97% 96 3 0   98% 62 1   97%
src/local_deep_research/utilities/url_utils.py (no class)   92% 246 19 0   92% 116 9   92%
src/local_deep_research/vector_stores/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/vector_stores/base.py WriteLock   100% 1 0 0   0% 2 2   33%
src/local_deep_research/vector_stores/base.py BaseVectorStore   100% 0 0 3   100% 0 0   100%
src/local_deep_research/vector_stores/base.py (no class)   100% 37 0 0   50% 2 1   97%
src/local_deep_research/vector_stores/config.py (no class)   100% 30 0 0   100% 6 0   100%
src/local_deep_research/vector_stores/facade.py _BindKwargs   100% 0 0 0   100% 0 0   100%
src/local_deep_research/vector_stores/facade.py ChunkInput   100% 0 0 0   100% 0 0   100%
src/local_deep_research/vector_stores/facade.py SearchResult   100% 0 0 0   100% 0 0   100%
src/local_deep_research/vector_stores/facade.py IndexStats   100% 0 0 0   100% 0 0   100%
src/local_deep_research/vector_stores/facade.py DeleteStats   100% 0 0 0   100% 0 0   100%
src/local_deep_research/vector_stores/facade.py VectorIndex   95% 124 6 0   85% 46 5   92%
src/local_deep_research/vector_stores/facade.py (no class)   100% 39 0 0   100% 0 0   100%
src/local_deep_research/vector_stores/implementations/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/vector_stores/implementations/faiss_store.py FaissVectorStore   93% 346 25 0   88% 144 17   91%
src/local_deep_research/vector_stores/implementations/faiss_store.py (no class)   100% 55 0 0   100% 0 0   100%
src/local_deep_research/vector_stores/legacy_cleanup.py (no class)   92% 240 20 0   97% 72 2   93%
src/local_deep_research/vector_stores/legacy_rekey.py (no class)   99% 184 1 0   96% 50 2   99%
src/local_deep_research/web/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/app.py (no class)   98% 46 1 0   83% 6 1   96%
src/local_deep_research/web/auth/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/auth/connection_cleanup.py (no class)   94% 128 8 0   100% 22 0   95%
src/local_deep_research/web/auth/password_utils.py (no class)   100% 21 0 0   100% 8 0   100%
src/local_deep_research/web/auth/session_manager.py SessionManager   100% 89 0 0   100% 36 0   100%
src/local_deep_research/web/auth/session_manager.py (no class)   100% 23 0 0   100% 0 0   100%
src/local_deep_research/web/database/benchmark_schema.py BenchmarkStatus   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/database/benchmark_schema.py DatasetType   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/database/benchmark_schema.py (no class)   100% 30 0 0   100% 6 0   100%
src/local_deep_research/web/dependencies/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/dependencies/auth.py (no class)   99% 145 2 0   93% 54 4   97%
src/local_deep_research/web/dependencies/csrf.py CSRFMiddleware   96% 81 3 0   97% 30 1   96%
src/local_deep_research/web/dependencies/csrf.py (no class)   97% 37 1 0   90% 10 1   96%
src/local_deep_research/web/dependencies/flash.py (no class)   100% 10 0 0   100% 2 0   100%
src/local_deep_research/web/dependencies/json_body.py (no class)   100% 23 0 0   100% 6 0   100%
src/local_deep_research/web/dependencies/rate_limit.py _LocalTrustedHosts   88% 16 2 0   100% 6 0   91%
src/local_deep_research/web/dependencies/rate_limit.py (no class)   98% 432 7 3   96% 172 7   98%
src/local_deep_research/web/dependencies/template_helpers.py (no class)   100% 33 0 0   100% 8 0   100%
src/local_deep_research/web/dependencies/threadpool.py WorkerCleanupStreamingResponse   100% 3 0 0   100% 2 0   100%
src/local_deep_research/web/dependencies/threadpool.py WorkerCleanupAPIRoute   100% 2 0 2   100% 0 0   100%
src/local_deep_research/web/dependencies/threadpool.py (no class)   92% 119 10 2   83% 24 0   90%
src/local_deep_research/web/exceptions.py WebAPIException   100% 9 0 0   100% 2 0   100%
src/local_deep_research/web/exceptions.py AuthenticationRequiredError   100% 4 0 0   100% 2 0   100%
src/local_deep_research/web/exceptions.py (no class)   100% 7 0 0   100% 0 0   100%
src/local_deep_research/web/fastapi_app.py SecurityHeadersMiddleware   100% 25 0 0   100% 10 0   100%
src/local_deep_research/web/fastapi_app.py _RequestBodyTooLarge   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/fastapi_app.py BodySizeLimitMiddleware   100% 72 0 0   100% 32 0   100%
src/local_deep_research/web/fastapi_app.py SecureCookieMiddleware   100% 58 0 0   100% 36 0   100%
src/local_deep_research/web/fastapi_app.py RememberMeMiddleware   100% 21 0 0   100% 10 0   100%
src/local_deep_research/web/fastapi_app.py DatabaseMiddleware   95% 44 2 0   100% 14 0   97%
src/local_deep_research/web/fastapi_app.py DatabaseMiddleware._call_http._MinimalRequest   100% 1 0 0   100% 0 0   100%
src/local_deep_research/web/fastapi_app.py RequestTimingASGIMiddleware   100% 22 0 0   100% 6 0   100%
src/local_deep_research/web/fastapi_app.py _PathScopedCORSMiddleware   100% 10 0 0   100% 4 0   100%
src/local_deep_research/web/fastapi_app.py (no class)   90% 635 64 0   86% 146 20   89%
src/local_deep_research/web/models/database.py (no class)   100% 82 0 0   88% 16 2   98%
src/local_deep_research/web/models/settings.py BaseSetting   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/models/settings.py LLMSetting   100% 3 0 0   100% 2 0   100%
src/local_deep_research/web/models/settings.py SearchSetting   100% 3 0 0   100% 2 0   100%
src/local_deep_research/web/models/settings.py ReportSetting   100% 3 0 0   100% 2 0   100%
src/local_deep_research/web/models/settings.py AppSetting   100% 3 0 0   100% 2 0   100%
src/local_deep_research/web/models/settings.py ChatSetting   0% 3 3 0   0% 2 0   0%
src/local_deep_research/web/models/settings.py SettingsGroup   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/models/settings.py (no class)   100% 36 0 0   100% 0 0   100%
src/local_deep_research/web/queue/__init__.py (no class)   100% 4 0 0   100% 0 0   100%
src/local_deep_research/web/queue/lifecycle_cleanup.py QueuedResearchCleanupResult   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/queue/lifecycle_cleanup.py (no class)   96% 47 2 0   90% 20 2   94%
src/local_deep_research/web/queue/manager.py QueueManager   100% 43 0 0   100% 8 0   100%
src/local_deep_research/web/queue/manager.py (no class)   100% 25 0 0   100% 0 0   100%
src/local_deep_research/web/queue/processor_v2.py QueueSweepResult   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/queue/processor_v2.py _DirectStartOutcome   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/queue/processor_v2.py QueueProcessorV2   94% 627 36 0   86% 192 24   92%
src/local_deep_research/web/queue/processor_v2.py (no class)   100% 65 0 0   100% 0 0   100%
src/local_deep_research/web/research_state.py _ReentrantUserLock   95% 19 1 0   75% 4 1   91%
src/local_deep_research/web/research_state.py (no class)   100% 148 0 0   95% 44 2   99%
src/local_deep_research/web/routers/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/routers/api.py (no class)   100% 208 0 0   98% 52 1   99%
src/local_deep_research/web/routers/api_v1.py (no class)   97% 301 10 0   98% 106 2   97%
src/local_deep_research/web/routers/auth.py (no class)   92% 489 41 0   90% 100 10   91%
src/local_deep_research/web/routers/benchmark.py (no class)   94% 393 22 0   89% 126 14   93%
src/local_deep_research/web/routers/chat.py (no class)   99% 588 1 2   94% 144 8   99%
src/local_deep_research/web/routers/context_overflow_api.py (no class)   100% 106 0 0   100% 24 0   100%
src/local_deep_research/web/routers/followup.py (no class)   86% 187 27 0   90% 30 1   86%
src/local_deep_research/web/routers/history.py (no class)   100% 175 0 0   100% 34 0   100%
src/local_deep_research/web/routers/library.py (no class)   96% 652 28 0   95% 164 6   96%
src/local_deep_research/web/routers/library_delete.py (no class)   100% 176 0 0   100% 56 0   100%
src/local_deep_research/web/routers/library_search.py (no class)   97% 175 6 0   92% 50 4   96%
src/local_deep_research/web/routers/metrics.py (no class)   99% 942 10 0   96% 268 11   98%
src/local_deep_research/web/routers/news_flask_api.py (no class)   92% 732 57 0   95% 188 9   93%
src/local_deep_research/web/routers/news_pages.py (no class)   100% 64 0 0   100% 4 0   100%
src/local_deep_research/web/routers/notes.py _RedactingRepr   75% 24 6 0   75% 8 2   75%
src/local_deep_research/web/routers/notes.py (no class)   96% 1156 45 0   97% 324 9   96%
src/local_deep_research/web/routers/rag.py (no class)   96% 1468 62 0   96% 418 14   96%
src/local_deep_research/web/routers/research.py (no class)   93% 1051 69 3   94% 330 17   94%
src/local_deep_research/web/routers/scheduler.py (no class)   100% 25 0 0   100% 2 0   100%
src/local_deep_research/web/routers/settings.py (no class)   97% 1575 53 14   95% 658 32   96%
src/local_deep_research/web/routers/unified_search.py (no class)   98% 130 3 0   98% 42 1   98%
src/local_deep_research/web/routers/zotero.py (no class)   92% 120 10 0   100% 30 0   93%
src/local_deep_research/web/routes/_search_constants.py (no class)   100% 1 0 0   100% 0 0   100%
src/local_deep_research/web/routes/globals.py (no class)   100% 1 0 0   100% 0 0   100%
src/local_deep_research/web/routes/research_validation.py (no class)   100% 30 0 0   100% 10 0   100%
src/local_deep_research/web/server_config.py (no class)   100% 72 0 0   100% 34 0   100%
src/local_deep_research/web/services/pdf_extraction_service.py PDFExtractionService   97% 63 2 0   100% 18 0   98%
src/local_deep_research/web/services/pdf_extraction_service.py (no class)   100% 20 0 0   100% 2 0   100%
src/local_deep_research/web/services/pdf_service.py UnsafePDFResourceURLError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/services/pdf_service.py _SafeUrlFetcher   100% 6 0 0   100% 2 0   100%
src/local_deep_research/web/services/pdf_service.py _SkippingUrlFetcher   100% 8 0 0   100% 0 0   100%
src/local_deep_research/web/services/pdf_service.py MissingPDFDependencyError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/services/pdf_service.py PDFService   100% 54 0 0   92% 12 1   98%
src/local_deep_research/web/services/pdf_service.py (no class)   87% 78 10 0   64% 14 3   84%
src/local_deep_research/web/services/report_assembly_service.py (no class)   95% 142 7 0   95% 62 3   95%
src/local_deep_research/web/services/research_service.py _SocketEmitter   100% 1 0 0   100% 0 0   100%
src/local_deep_research/web/services/research_service.py (no class)   93% 1074 79 0   90% 368 28   92%
src/local_deep_research/web/services/research_sources_service.py ResearchSourcesService   87% 112 15 0   81% 32 4   85%
src/local_deep_research/web/services/research_sources_service.py (no class)   91% 184 17 0   88% 102 12   90%
src/local_deep_research/web/services/resource_service.py (no class)   100% 40 0 0   100% 4 0   100%
src/local_deep_research/web/services/settings_service.py (no class)   96% 84 3 0   89% 38 2   94%
src/local_deep_research/web/services/socketio_asgi.py (no class)   99% 421 2 0   89% 152 16   97%
src/local_deep_research/web/static_files.py (no class)   92% 38 3 0   90% 10 1   92%
src/local_deep_research/web/template_config.py _LDRTemplates   97% 66 2 0   73% 30 6   90%
src/local_deep_research/web/template_config.py (no class)   83% 18 3 0   100% 0 0   83%
src/local_deep_research/web/themes/__init__.py ThemeRegistry   100% 47 0 0   91% 22 2   97%
src/local_deep_research/web/themes/__init__.py (no class)   100% 30 0 0   100% 0 0   100%
src/local_deep_research/web/themes/loader.py ThemeLoader   92% 65 5 0   79% 28 4   88%
src/local_deep_research/web/themes/loader.py (no class)   100% 21 0 0   100% 0 0   100%
src/local_deep_research/web/themes/schema.py ThemeMetadata   100% 1 0 0   100% 0 0   100%
src/local_deep_research/web/themes/schema.py (no class)   100% 16 0 0   100% 0 0   100%
src/local_deep_research/web/utils/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/utils/download_headers.py (no class)   100% 13 0 0   100% 4 0   100%
src/local_deep_research/web/utils/pagination.py (no class)   100% 10 0 0   100% 2 0   100%
src/local_deep_research/web/utils/path_ids.py (no class)   100% 11 0 0   100% 0 0   100%
src/local_deep_research/web/utils/range_response.py (no class)   100% 42 0 0   100% 16 0   100%
src/local_deep_research/web/utils/request_timing.py RequestTimingMiddleware   100% 17 0 0   100% 4 0   100%
src/local_deep_research/web/utils/request_timing.py (no class)   100% 19 0 0   100% 2 0   100%
src/local_deep_research/web/utils/vite_helper.py _ManifestState   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/utils/vite_helper.py ViteHelper   93% 212 14 0   91% 112 10   93%
src/local_deep_research/web/utils/vite_helper.py (no class)   97% 71 2 0   67% 6 2   95%
src/local_deep_research/web/warning_checks/__init__.py (no class)   90% 167 17 0   88% 58 7   89%
src/local_deep_research/web/warning_checks/backup.py (no class)   100% 30 0 0   100% 18 0   100%
src/local_deep_research/web/warning_checks/context.py (no class)   100% 21 0 0   100% 8 0   100%
src/local_deep_research/web/warning_checks/hardware.py (no class)   100% 29 0 0   100% 20 0   100%
src/local_deep_research/web_search_engines/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engine_availability.py SearchFailure   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engine_availability.py UnrecordedFailure   100% 1 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engine_availability.py EngineDisablement   100% 7 0 0   100% 2 0   100%
src/local_deep_research/web_search_engines/engine_availability.py SearchEngineAvailability   98% 90 2 0   100% 30 0   98%
src/local_deep_research/web_search_engines/engine_availability.py (no class)   97% 152 5 0   93% 46 3   96%
src/local_deep_research/web_search_engines/engine_groups.py SearchEngineGroup   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engine_groups.py (no class)   100% 27 0 0   100% 4 0   100%
src/local_deep_research/web_search_engines/engine_registry.py EngineEntry   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engine_registry.py (no class)   100% 10 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/__init__.py (no class)   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/_google_pse_rate_limiter.py (no class)   100% 35 0 0   100% 6 0   100%
src/local_deep_research/web_search_engines/engines/_searxng_rate_limiter.py _UrlState   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/_searxng_rate_limiter.py (no class)   99% 120 1 0   98% 40 1   99%
src/local_deep_research/web_search_engines/engines/full_search.py _Invokable   100% 1 0 0   50% 2 1   67%
src/local_deep_research/web_search_engines/engines/full_search.py FullSearchResults   98% 178 4 4   95% 74 4   97%
src/local_deep_research/web_search_engines/engines/full_search.py (no class)   100% 57 0 0   100% 8 0   100%
src/local_deep_research/web_search_engines/engines/local_embedding_manager.py LocalEmbeddingManager   100% 59 0 0   100% 18 0   100%
src/local_deep_research/web_search_engines/engines/local_embedding_manager.py (no class)   100% 17 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_arxiv.py FullTextNotExtractedError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_arxiv.py FullTextFetchFailedError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_arxiv.py FullTextRateLimitedError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_arxiv.py ArXivSearchEngine   100% 172 0 0   98% 52 1   99%
src/local_deep_research/web_search_engines/engines/search_engine_arxiv.py (no class)   100% 35 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_brave.py BraveSearchEngine   97% 37 1 0   100% 8 0   98%
src/local_deep_research/web_search_engines/engines/search_engine_brave.py (no class)   100% 14 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_collection.py CollectionSearchEngine   100% 92 0 0   94% 32 2   98%
src/local_deep_research/web_search_engines/engines/search_engine_collection.py (no class)   100% 14 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_elasticsearch.py ElasticsearchSearchEngine   93% 202 14 0   93% 60 4   93%
src/local_deep_research/web_search_engines/engines/search_engine_elasticsearch.py (no class)   100% 38 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_exa.py ExaSearchEngine   100% 65 0 0   96% 26 1   99%
src/local_deep_research/web_search_engines/engines/search_engine_exa.py (no class)   100% 14 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_federal_register.py _FullContentDeadlineReached   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_federal_register.py _UnexpectedResponseHost   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_federal_register.py _FederalRegisterRunState   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_federal_register.py FederalRegisterSearchEngine   91% 214 20 0   88% 78 9   90%
src/local_deep_research/web_search_engines/engines/search_engine_federal_register.py (no class)   100% 59 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_github.py GitHubSearchEngine   99% 308 2 0   97% 110 3   99%
src/local_deep_research/web_search_engines/engines/search_engine_github.py (no class)   100% 41 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_google_pse.py GooglePSESearchEngine   93% 115 8 0   92% 36 3   93%
src/local_deep_research/web_search_engines/engines/search_engine_google_pse.py (no class)   100% 20 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_guardian.py GuardianSearchEngine   97% 229 6 0   92% 78 6   96%
src/local_deep_research/web_search_engines/engines/search_engine_guardian.py (no class)   100% 23 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_gutenberg.py GutenbergSearchEngine   95% 185 9 0   88% 80 10   93%
src/local_deep_research/web_search_engines/engines/search_engine_gutenberg.py (no class)   100% 27 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_library.py LibraryRAGSearchEngine   99% 184 2 0   92% 62 5   97%
src/local_deep_research/web_search_engines/engines/search_engine_library.py (no class)   100% 28 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_mojeek.py MojeekSearchEngine   98% 60 1 0   95% 22 1   98%
src/local_deep_research/web_search_engines/engines/search_engine_mojeek.py (no class)   100% 18 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_nasa_ads.py NasaAdsSearchEngine   91% 133 12 0   87% 54 7   90%
src/local_deep_research/web_search_engines/engines/search_engine_nasa_ads.py (no class)   100% 19 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_openalex.py OpenAlexAuthError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_openalex.py OpenAlexSearchEngine   99% 196 2 0   92% 76 6   97%
src/local_deep_research/web_search_engines/engines/search_engine_openalex.py (no class)   100% 28 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_openlibrary.py OpenLibrarySearchEngine   90% 194 19 0   83% 90 15   88%
src/local_deep_research/web_search_engines/engines/search_engine_openlibrary.py (no class)   100% 26 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_paperless.py PaperlessSearchEngine   94% 285 17 0   82% 100 16   91%
src/local_deep_research/web_search_engines/engines/search_engine_paperless.py (no class)   100% 31 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_pubchem.py PubChemSearchEngine   98% 234 5 0   79% 80 17   93%
src/local_deep_research/web_search_engines/engines/search_engine_pubchem.py (no class)   100% 27 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_pubmed.py PubMedSearchEngine   98% 694 15 0   86% 356 51   94%
src/local_deep_research/web_search_engines/engines/search_engine_pubmed.py (no class)   100% 39 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_retriever.py RetrieverSearchEngine   100% 48 0 0   100% 12 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_retriever.py (no class)   100% 12 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_scaleserp.py ScaleSerpSearchEngine   100% 62 0 0   94% 18 1   99%
src/local_deep_research/web_search_engines/engines/search_engine_scaleserp.py (no class)   100% 16 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_searxng.py SafeSearchSetting   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_searxng.py SearXNGSearchEngine   96% 232 10 0   95% 86 4   96%
src/local_deep_research/web_search_engines/engines/search_engine_searxng.py (no class)   100% 39 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_semantic_scholar.py SemanticScholarSearchEngine   98% 256 5 0   92% 100 8   96%
src/local_deep_research/web_search_engines/engines/search_engine_semantic_scholar.py (no class)   100% 36 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_serpapi.py SerpAPISearchEngine   100% 28 0 0   100% 6 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_serpapi.py (no class)   100% 13 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_serper.py SerperSearchEngine   100% 60 0 0   94% 16 1   99%
src/local_deep_research/web_search_engines/engines/search_engine_serper.py (no class)   100% 20 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_serply.py SerplySearchEngine   91% 44 4 0   100% 10 0   93%
src/local_deep_research/web_search_engines/engines/search_engine_serply.py (no class)   100% 22 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_sofya.py SofyaSearchEngine   100% 56 0 0   100% 16 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_sofya.py (no class)   100% 21 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_stackexchange.py StackExchangeSearchEngine   95% 203 10 0   89% 56 6   94%
src/local_deep_research/web_search_engines/engines/search_engine_stackexchange.py (no class)   100% 34 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_tavily.py TavilySearchEngine   100% 49 0 0   93% 14 1   98%
src/local_deep_research/web_search_engines/engines/search_engine_tavily.py (no class)   100% 16 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_tinyfish.py TinyFishSearchEngine   83% 89 15 0   75% 28 7   81%
src/local_deep_research/web_search_engines/engines/search_engine_tinyfish.py (no class)   100% 28 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_wayback.py WaybackSearchEngine   98% 276 5 0   97% 102 3   98%
src/local_deep_research/web_search_engines/engines/search_engine_wayback.py (no class)   100% 30 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_webz.py WebzSearchEngine   98% 125 3 0   97% 78 2   98%
src/local_deep_research/web_search_engines/engines/search_engine_webz.py (no class)   100% 30 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_wikinews.py WikinewsSearchEngine   97% 124 4 0   85% 40 6   94%
src/local_deep_research/web_search_engines/engines/search_engine_wikinews.py (no class)   100% 41 0 0   100% 2 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_wikipedia.py WikipediaSearchEngine   100% 116 0 0   100% 18 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_wikipedia.py (no class)   100% 23 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_zenodo.py ZenodoSearchEngine   97% 147 4 0   92% 52 4   96%
src/local_deep_research/web_search_engines/engines/search_engine_zenodo.py (no class)   100% 28 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/rate_limiting/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/rate_limiting/exceptions.py RateLimitError   100% 2 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/rate_limiting/exceptions.py AdaptiveRetryError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/rate_limiting/exceptions.py RateLimitConfigError   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/rate_limiting/exceptions.py (no class)   100% 6 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/rate_limiting/llm/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/rate_limiting/llm/detection.py (no class)   92% 48 4 0   96% 26 1   93%
src/local_deep_research/web_search_engines/rate_limiting/llm/wrapper.py AdaptiveLLMWait   100% 12 0 0   100% 6 0   100%
src/local_deep_research/web_search_engines/rate_limiting/llm/wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper   90% 230 22 0   90% 72 5   90%
src/local_deep_research/web_search_engines/rate_limiting/llm/wrapper.py (no class)   100% 44 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/rate_limiting/tracker.py AdaptiveRateLimitTracker   92% 365 28 0   92% 140 9   92%
src/local_deep_research/web_search_engines/rate_limiting/tracker.py (no class)   100% 43 0 2   100% 2 0   100%
src/local_deep_research/web_search_engines/relevance_filter.py (no class)   95% 194 9 0   93% 76 5   95%
src/local_deep_research/web_search_engines/retriever_registry.py RetrieverRegistry   100% 68 0 0   100% 24 0   100%
src/local_deep_research/web_search_engines/retriever_registry.py (no class)   100% 18 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/search_engine_base.py _SearchRunState   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/search_engine_base.py AdaptiveWait   100% 2 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/search_engine_base.py BaseSearchEngine   94% 532 30 30   92% 230 19   94%
src/local_deep_research/web_search_engines/search_engine_base.py (no class)   100% 136 0 2   100% 8 0   100%
src/local_deep_research/web_search_engines/search_engine_factory.py (no class)   91% 426 37 0   87% 260 27   90%
src/local_deep_research/web_search_engines/search_engines_config.py (no class)   92% 226 18 0   96% 90 4   93%
src/local_deep_research/web_search_engines/wayback_client.py (no class)   99% 107 1 0   96% 48 2   98%
Total     95% 78278 3553 187   92% 25936 1792   95%

No items found using the specified filter.