Coverage report: 77%

Files Functions Classes

coverage.py v7.13.4, created at 2026-02-25 01:07 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src / local_deep_research / __init__.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / __version__.py (no function)   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / __init__.py (no function)   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / __init__.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer.__init__   100% 5 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer.explore   100% 30 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer.generate_exploration_queries   100% 7 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._choose_strategy   100% 4 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._get_top_strategies   100% 4 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._generate_query_with_strategy   100% 15 0 0   100% 10 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._direct_search_query   100% 5 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._synonym_expansion_query   100% 7 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._category_exploration_query   100% 4 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._related_terms_query   100% 7 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._constraint_focused_query   100% 4 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._update_strategy_stats   100% 4 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._adapt_strategy   100% 5 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._try_next_strategy   100% 6 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer.__init__   100% 6 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer.explore   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer.generate_exploration_queries   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer._execute_search   100% 16 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer._extract_candidates_from_results   100% 16 0 0   90% 10 1   96%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer._generate_answer_candidates   100% 15 0 0   83% 6 1   95%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer._extract_entity_names   100% 14 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer._should_continue_exploration   100% 9 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer._deduplicate_candidates   100% 8 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer._rank_candidates_by_relevance   100% 15 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py (no function)   100% 29 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer.explore   97% 39 1 0   93% 14 1   96%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer.generate_exploration_queries   100% 11 0 0   88% 8 1   95%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._prioritize_constraints   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._generate_constraint_queries   100% 13 0 0   90% 10 1   96%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._name_pattern_queries   100% 8 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._property_queries   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._event_queries   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._location_queries   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._cross_constraint_exploration   100% 7 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._combine_constraints_query   100% 4 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._early_validate_candidates   100% 7 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._quick_name_validation   100% 5 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._rank_by_constraint_alignment   100% 9 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._basic_exploration   100% 5 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer.__init__   100% 6 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer.explore   46% 41 22 0   7% 14 1   36%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer.generate_exploration_queries   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._categorize_candidates   100% 7 0 0   75% 4 1   91%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._determine_category   100% 18 0 0   100% 16 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._calculate_diversity_score   14% 14 12 0   12% 8 1   14%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._find_underrepresented_categories   100% 6 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._generate_diversity_queries   69% 26 8 0   59% 22 1   65%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._generate_category_queries   0% 6 6 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._filter_for_diversity   89% 9 1 0   83% 6 1   87%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._is_sufficiently_different   100% 10 0 0   83% 6 1   94%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._final_diversity_selection   100% 12 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._rank_by_diversity   33% 9 6 0   50% 2 1   36%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py (no function)   100% 21 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / parallel_explorer.py ParallelExplorer.__init__   100% 4 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / parallel_explorer.py ParallelExplorer.explore   100% 35 0 0   100% 10 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / parallel_explorer.py ParallelExplorer.generate_exploration_queries   100% 11 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / parallel_explorer.py ParallelExplorer._generate_query_variations   100% 14 0 0   83% 6 1   95%
src / local_deep_research / advanced_search_system / candidate_exploration / parallel_explorer.py ParallelExplorer._generate_candidate_based_queries   100% 6 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / parallel_explorer.py ParallelExplorer._generate_constraint_queries   100% 5 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / parallel_explorer.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py SearchProgress.update_coverage   100% 3 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py SearchProgress.get_uncovered_entities   100% 7 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer.__init__   100% 4 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer.explore   100% 14 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer.generate_verification_searches   100% 10 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer._extract_candidates_from_results   100% 18 0 0   93% 14 1   97%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer._update_entity_coverage   100% 5 0 0   83% 6 1   91%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer.suggest_next_searches   55% 22 10 0   45% 22 2   50%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer._parallel_search   100% 8 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer._parallel_search.search_query   100% 6 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidates / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidates / base_candidate.py Candidate.add_evidence   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidates / base_candidate.py Candidate.calculate_score   100% 12 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / candidates / base_candidate.py Candidate.get_unverified_constraints   100% 5 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / candidates / base_candidate.py Candidate.get_weak_evidence   100% 5 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / candidates / base_candidate.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / __init__.py (no function)   100% 8 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / base_constraint_checker.py BaseConstraintChecker.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / base_constraint_checker.py BaseConstraintChecker.check_candidate   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / base_constraint_checker.py BaseConstraintChecker.should_reject_candidate   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / base_constraint_checker.py BaseConstraintChecker._gather_evidence_for_constraint   50% 4 2 0   50% 2 1   50%
src / local_deep_research / advanced_search_system / constraint_checking / base_constraint_checker.py BaseConstraintChecker._log_constraint_result   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / base_constraint_checker.py BaseConstraintChecker._calculate_weighted_score   100% 3 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / base_constraint_checker.py (no function)   100% 18 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / constraint_checker.py ConstraintChecker.__init__   100% 6 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / constraint_checker.py ConstraintChecker.check_candidate   100% 31 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / constraint_checker.py ConstraintChecker._gather_evidence_for_constraint   100% 4 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / constraint_checker.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker.__init__   100% 8 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker.check_candidate   94% 32 2 0   90% 10 1   93%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker._evaluate_constraint_with_reevaluation   74% 19 5 0   62% 8 3   70%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker._should_early_reject   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker.should_reject_candidate_from_averages   100% 9 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker.should_reject_candidate   54% 13 6 0   67% 6 2   58%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker._log_constraint_result_detailed   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker._llm_prescreen_candidate   100% 16 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / evidence_analyzer.py EvidenceAnalyzer.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / evidence_analyzer.py EvidenceAnalyzer.analyze_evidence_dual_confidence   84% 19 3 0   50% 2 1   81%
src / local_deep_research / advanced_search_system / constraint_checking / evidence_analyzer.py EvidenceAnalyzer._extract_score   75% 8 2 0   100% 2 0   80%
src / local_deep_research / advanced_search_system / constraint_checking / evidence_analyzer.py EvidenceAnalyzer.evaluate_evidence_list   100% 15 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / evidence_analyzer.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py IntelligentConstraintRelaxer.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py IntelligentConstraintRelaxer.relax_constraints_progressively   100% 26 0 0   92% 12 1   97%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py IntelligentConstraintRelaxer._create_constraint_variations   100% 11 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py IntelligentConstraintRelaxer._relax_statistical_constraint   88% 17 2 0   100% 4 0   90%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py IntelligentConstraintRelaxer._relax_comparison_constraint   100% 15 0 0   90% 10 1   96%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py IntelligentConstraintRelaxer._relax_temporal_constraint   100% 18 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py IntelligentConstraintRelaxer._relax_property_constraint   100% 14 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py IntelligentConstraintRelaxer._create_relaxed_constraint   82% 11 2 0   62% 8 1   74%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py IntelligentConstraintRelaxer._get_constraint_type   95% 20 1 0   94% 18 1   95%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py IntelligentConstraintRelaxer.analyze_relaxation_impact   100% 19 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / rejection_engine.py RejectionEngine.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / rejection_engine.py RejectionEngine.should_reject_candidate   100% 9 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / rejection_engine.py RejectionEngine.check_all_constraints   43% 7 4 0   25% 4 1   36%
src / local_deep_research / advanced_search_system / constraint_checking / rejection_engine.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / strict_checker.py StrictChecker.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / strict_checker.py StrictChecker.check_candidate   100% 21 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / strict_checker.py StrictChecker.should_reject_candidate   100% 9 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / strict_checker.py StrictChecker._evaluate_constraint_strictly   80% 15 3 0   83% 6 1   81%
src / local_deep_research / advanced_search_system / constraint_checking / strict_checker.py StrictChecker._check_name_pattern_strictly   100% 19 0 0   88% 8 1   96%
src / local_deep_research / advanced_search_system / constraint_checking / strict_checker.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / threshold_checker.py ThresholdChecker.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / threshold_checker.py ThresholdChecker.check_candidate   100% 28 0 0   100% 10 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / threshold_checker.py ThresholdChecker.should_reject_candidate   100% 6 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / threshold_checker.py ThresholdChecker._check_constraint_satisfaction   100% 12 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / threshold_checker.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraints / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraints / base_constraint.py Constraint.__post_init__   100% 2 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / constraints / base_constraint.py Constraint.to_search_terms   100% 9 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / constraints / base_constraint.py Constraint.is_critical   100% 3 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / constraints / base_constraint.py (no function)   100% 19 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraints / constraint_analyzer.py ConstraintAnalyzer.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraints / constraint_analyzer.py ConstraintAnalyzer.extract_constraints   100% 25 0 0   92% 12 1   97%
src / local_deep_research / advanced_search_system / constraints / constraint_analyzer.py ConstraintAnalyzer._parse_constraint_type   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraints / constraint_analyzer.py ConstraintAnalyzer._parse_weight   100% 7 0 0   83% 6 1   92%
src / local_deep_research / advanced_search_system / constraints / constraint_analyzer.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / evidence / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / evidence / base_evidence.py EvidenceType.base_confidence   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / evidence / base_evidence.py Evidence.__post_init__   100% 2 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / evidence / base_evidence.py (no function)   100% 23 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / evidence / evaluator.py EvidenceEvaluator.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / evidence / evaluator.py EvidenceEvaluator.extract_evidence   100% 14 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / evidence / evaluator.py EvidenceEvaluator._parse_evidence_response   100% 15 0 0   100% 10 0   100%
src / local_deep_research / advanced_search_system / evidence / evaluator.py EvidenceEvaluator._parse_evidence_type   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / evidence / evaluator.py EvidenceEvaluator._assess_match_quality   100% 5 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / evidence / evaluator.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / evidence / requirements.py EvidenceRequirements.get_requirements   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / evidence / requirements.py EvidenceRequirements.get_minimum_confidence   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / evidence / requirements.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / filters / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / filters / base_filter.py BaseFilter.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / filters / base_filter.py BaseFilter.filter_results   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / filters / base_filter.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / filters / cross_engine_filter.py CrossEngineFilter.__init__   85% 13 2 0   100% 4 0   88%
src / local_deep_research / advanced_search_system / filters / cross_engine_filter.py CrossEngineFilter._prepare_and_return   100% 4 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / filters / cross_engine_filter.py CrossEngineFilter.filter_results   100% 49 0 0   100% 26 0   100%
src / local_deep_research / advanced_search_system / filters / cross_engine_filter.py (no function)   100% 8 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / filters / followup_relevance_filter.py FollowUpRelevanceFilter.filter_results   100% 8 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / filters / followup_relevance_filter.py FollowUpRelevanceFilter._select_relevant_sources   100% 32 0 0   100% 12 0   100%
src / local_deep_research / advanced_search_system / filters / followup_relevance_filter.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.__init__   100% 20 0 0   100% 12 0   100%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.create_default   100% 8 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.__db_session   100% 4 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.__make_search_system   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.__analyze_journal_reputation   93% 15 1 0   50% 2 1   88%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.__add_journal_to_db   0% 9 9 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.__clean_journal_name   100% 4 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.__check_result   62% 16 6 0   75% 4 1   65%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.filter_results   100% 5 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py (no function)   100% 28 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / base_findings.py BaseFindingsRepository.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / base_findings.py BaseFindingsRepository.add_finding   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / findings / base_findings.py BaseFindingsRepository.get_findings   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / findings / base_findings.py BaseFindingsRepository.clear_findings   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / findings / base_findings.py BaseFindingsRepository.synthesize_findings   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / findings / base_findings.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / repository.py format_links   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.__init__   100% 4 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.add_finding   100% 8 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.get_findings   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.clear_findings   100% 3 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.add_documents   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.set_questions_by_iteration   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.format_findings_to_text   100% 12 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.synthesize_findings   75% 115 29 0   80% 60 6   77%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.synthesize_findings.timeout_handler   0% 4 4 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.synthesize_findings.timeout_handler.handler   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.synthesize_findings.invoke_with_timeout   0% 15 15 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.synthesize_findings.invoke_with_timeout.target   0% 5 5 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / findings / repository.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / topic.py Topic.add_supporting_source   100% 2 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / findings / topic.py Topic.reject_source   100% 4 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / findings / topic.py Topic.update_lead_source   100% 5 0 0   75% 4 1   89%
src / local_deep_research / advanced_search_system / findings / topic.py Topic.get_all_sources   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / topic.py Topic.to_dict   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / topic.py TopicGraph.add_topic   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / topic.py TopicGraph.get_topic   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / topic.py TopicGraph.link_topics   100% 7 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / findings / topic.py TopicGraph.set_parent_child   100% 6 0 0   50% 4 2   80%
src / local_deep_research / advanced_search_system / findings / topic.py TopicGraph.get_root_topics   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / topic.py TopicGraph.get_related_topics   100% 9 0 0   83% 6 1   93%
src / local_deep_research / advanced_search_system / findings / topic.py TopicGraph.merge_topics   84% 25 4 0   71% 24 5   78%
src / local_deep_research / advanced_search_system / findings / topic.py TopicGraph.to_dict   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / findings / topic.py (no function)   100% 27 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / base_knowledge.py BaseKnowledgeGenerator.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / base_knowledge.py BaseKnowledgeGenerator.generate   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / base_knowledge.py BaseKnowledgeGenerator.generate_knowledge   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / base_knowledge.py BaseKnowledgeGenerator.generate_sub_knowledge   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / base_knowledge.py BaseKnowledgeGenerator.compress_knowledge   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / base_knowledge.py BaseKnowledgeGenerator.format_citations   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / base_knowledge.py BaseKnowledgeGenerator._validate_knowledge   100% 4 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / knowledge / base_knowledge.py BaseKnowledgeGenerator._validate_links   100% 7 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / knowledge / base_knowledge.py BaseKnowledgeGenerator._extract_key_points   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / base_knowledge.py (no function)   100% 19 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler.build_context   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler._extract_findings   100% 10 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler._extract_sources   100% 12 0 0   100% 10 0   100%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler._extract_entities   100% 11 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler._create_summary   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler._extract_metadata   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler.summarize_for_followup   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler._generate_summary   86% 22 3 0   79% 14 3   83%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler.identify_gaps   100% 11 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler.format_for_settings_snapshot   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler.get_relevant_context_for_llm   100% 14 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py (no function)   100% 17 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / standard_knowledge.py StandardKnowledge.generate_knowledge   100% 10 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / knowledge / standard_knowledge.py StandardKnowledge.generate_sub_knowledge   100% 7 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / standard_knowledge.py StandardKnowledge.generate   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / standard_knowledge.py StandardKnowledge.compress_knowledge   100% 10 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / knowledge / standard_knowledge.py StandardKnowledge.format_citations   100% 6 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / knowledge / standard_knowledge.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py AdaptiveQueryGenerator.__init__   100% 6 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py AdaptiveQueryGenerator._initialize_default_patterns   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py AdaptiveQueryGenerator.generate_query   100% 7 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py AdaptiveQueryGenerator._generate_from_patterns   71% 31 9 0   59% 22 1   66%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py AdaptiveQueryGenerator._generate_with_expansion   100% 10 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py AdaptiveQueryGenerator._get_semantic_expansions   100% 4 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py AdaptiveQueryGenerator._generate_with_llm   100% 10 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py AdaptiveQueryGenerator.update_patterns   100% 12 0 0   83% 6 1   94%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py AdaptiveQueryGenerator._extract_pattern   100% 8 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py AdaptiveQueryGenerator._format_constraints   100% 4 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py AdaptiveQueryGenerator.generate_fallback_queries   100% 20 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py AdaptiveQueryGenerator._generate_single_constraint_query   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py AdaptiveQueryGenerator.optimize_constraint_combinations   100% 17 0 0   100% 14 0   100%
src / local_deep_research / advanced_search_system / query_generation / adaptive_query_generator.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / __init__.py (no function)   100% 8 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / atomic_fact_question.py AtomicFactQuestionGenerator.generate_questions   100% 4 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / questions / atomic_fact_question.py AtomicFactQuestionGenerator._decompose_to_atomic_facts   100% 16 0 0   100% 10 0   100%
src / local_deep_research / advanced_search_system / questions / atomic_fact_question.py AtomicFactQuestionGenerator._generate_gap_filling_questions   100% 17 0 0   100% 12 0   100%
src / local_deep_research / advanced_search_system / questions / atomic_fact_question.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / base_question.py BaseQuestionGenerator.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / base_question.py BaseQuestionGenerator.generate_questions   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / base_question.py BaseQuestionGenerator._format_previous_questions   100% 6 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / questions / base_question.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator.__init__   100% 5 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator.generate_questions   100% 5 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator._extract_entities   100% 15 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator._expand_temporal_ranges   100% 13 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator._generate_initial_searches   94% 34 2 0   91% 32 3   92%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator._generate_progressive_searches   74% 47 12 0   55% 40 8   66%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator._format_previous_searches   92% 12 1 0   80% 10 2   86%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator._was_searched   100% 7 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / decomposition_question.py DecompositionQuestionGenerator.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / decomposition_question.py DecompositionQuestionGenerator.generate_questions   92% 87 7 0   85% 62 9   89%
src / local_deep_research / advanced_search_system / questions / decomposition_question.py DecompositionQuestionGenerator._generate_default_questions   92% 36 3 0   85% 26 4   89%
src / local_deep_research / advanced_search_system / questions / decomposition_question.py (no function)   100% 8 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / entity_aware_question.py EntityAwareQuestionGenerator.generate_questions   100% 19 0 0   100% 6 0   100%
src / local_deep_research / advanced_search_system / questions / entity_aware_question.py EntityAwareQuestionGenerator.generate_sub_questions   100% 23 0 0   90% 10 1   97%
src / local_deep_research / advanced_search_system / questions / entity_aware_question.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / flexible_browsecomp_question.py FlexibleBrowseCompQuestionGenerator._generate_progressive_searches   100% 22 0 0   93% 14 1   97%
src / local_deep_research / advanced_search_system / questions / flexible_browsecomp_question.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / followup / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / followup / base_followup_question.py BaseFollowUpQuestionGenerator.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / followup / base_followup_question.py BaseFollowUpQuestionGenerator.set_follow_up_context   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / followup / base_followup_question.py BaseFollowUpQuestionGenerator.generate_contextualized_query   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / questions / followup / base_followup_question.py BaseFollowUpQuestionGenerator.generate_questions   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / followup / base_followup_question.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / followup / llm_followup_question.py LLMFollowUpQuestionGenerator.generate_contextualized_query   100% 4 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / followup / llm_followup_question.py LLMFollowUpQuestionGenerator.generate_questions   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / followup / llm_followup_question.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / followup / simple_followup_question.py SimpleFollowUpQuestionGenerator.generate_contextualized_query   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / followup / simple_followup_question.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / news_question.py NewsQuestionGenerator.generate_questions   86% 7 1 0   50% 2 1   78%
src / local_deep_research / advanced_search_system / questions / news_question.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / standard_question.py StandardQuestionGenerator.generate_questions   100% 15 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / questions / standard_question.py StandardQuestionGenerator.generate_sub_questions   100% 19 0 0   88% 8 1   96%
src / local_deep_research / advanced_search_system / questions / standard_question.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / repositories / __init__.py (no function)   0% 2 2 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager.__init__   100% 5 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager.analyze_constraint_relationships   100% 10 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager._analyze_pair   100% 17 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager.create_constraint_clusters   100% 18 0 0   88% 8 1   96%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager._create_relationship_clusters   100% 26 0 0   94% 16 1   98%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager._create_semantic_clusters   38% 34 21 0   39% 18 5   38%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager.generate_cross_constraint_queries   100% 12 0 0   50% 2 1   93%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager._generate_combined_query   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager._generate_progressive_queries   100% 7 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager._generate_intersection_query   100% 8 0 0   100% 4 0   100%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager._generate_validation_queries   100% 7 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager.validate_candidate_across_constraints   67% 15 5 0   67% 12 2   67%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager._validate_with_cluster   80% 15 3 0   50% 6 3   71%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager._validate_pair   0% 12 12 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager._calculate_cluster_coherence   100% 14 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager._deduplicate_clusters   100% 13 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager._format_constraints_for_clustering   100% 4 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager._format_constraints_for_query   100% 4 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py CrossConstraintManager.optimize_search_order   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / search_optimization / cross_constraint_manager.py (no function)   100% 34 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager.__init__   100% 6 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager.analyze_source   100% 15 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager._extract_domain   100% 6 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager._determine_source_type   100% 21 0 0   100% 18 0   100%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager._analyze_content_type   100% 6 0 0   100% 2 0   100%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager._calculate_credibility   100% 11 0 0   100% 10 0   100%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager._extract_specialties   56% 9 4 0   50% 2 1   55%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager._extract_temporal_coverage   83% 12 2 0   100% 4 0   88%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager._extract_geographic_focus   100% 11 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager.calculate_diversity_metrics   95% 21 1 0   88% 8 1   93%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager._calculate_temporal_diversity   100% 10 0 0   100% 8 0   100%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager.recommend_additional_sources   100% 19 0 0   93% 14 1   97%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager._identify_diversity_gaps   100% 24 0 0   81% 16 3   92%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager._get_source_type_modifier   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager._get_region_domain   100% 2 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager.select_diverse_sources   100% 21 0 0   92% 12 1   97%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py SourceDiversityManager.track_source_effectiveness   100% 8 0 0   83% 6 1   93%
src / local_deep_research / advanced_search_system / source_management / diversity_manager.py (no function)   100% 34 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / tools / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / tools / base_tool.py BaseTool.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / tools / base_tool.py BaseTool.execute   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / tools / base_tool.py BaseTool.get_schema   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / tools / base_tool.py BaseTool.validate_parameters   100% 17 0 0   92% 12 1   97%
src / local_deep_research / advanced_search_system / tools / base_tool.py BaseTool._log_execution   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / tools / base_tool.py BaseTool._log_result   100% 1 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / tools / base_tool.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / tools / knowledge_tools / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / tools / question_tools / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / tools / search_tools / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / api / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / api / benchmark_functions.py evaluate_simpleqa   100% 11 0 0   67% 6 2   88%
src / local_deep_research / api / benchmark_functions.py evaluate_browsecomp   55% 11 5 0   17% 6 1   41%
src / local_deep_research / api / benchmark_functions.py evaluate_xbench_deepsearch   55% 11 5 0   17% 6 1   41%
src / local_deep_research / api / benchmark_functions.py get_available_benchmarks   100% 1 0 0   100% 0 0   100%
src / local_deep_research / api / benchmark_functions.py compare_configurations   97% 39 1 0   92% 12 1   96%
src / local_deep_research / api / benchmark_functions.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / api / client.py LDRClient.__init__   100% 5 0 0   100% 0 0   100%
src / local_deep_research / api / client.py LDRClient.login   100% 26 0 0   100% 6 0   100%
src / local_deep_research / api / client.py LDRClient._api_headers   100% 3 0 0   100% 2 0   100%
src / local_deep_research / api / client.py LDRClient.quick_research   86% 21 3 0   83% 12 2   85%
src / local_deep_research / api / client.py LDRClient.wait_for_research   100% 15 0 0   90% 10 1   96%
src / local_deep_research / api / client.py LDRClient.get_settings   100% 6 0 0   100% 4 0   100%
src / local_deep_research / api / client.py LDRClient.update_setting   100% 4 0 0   100% 2 0   100%
src / local_deep_research / api / client.py LDRClient.get_history   91% 11 1 0   88% 8 1   89%
src / local_deep_research / api / client.py LDRClient.logout   100% 6 0 0   100% 2 0   100%
src / local_deep_research / api / client.py LDRClient.submit_benchmark   100% 2 0 0   100% 0 0   100%
src / local_deep_research / api / client.py LDRClient.get_benchmarks   100% 4 0 0   100% 2 0   100%
src / local_deep_research / api / client.py LDRClient.__enter__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / api / client.py LDRClient.__exit__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / api / client.py quick_query   100% 5 0 0   100% 2 0   100%
src / local_deep_research / api / client.py (no function)   100% 21 0 0   100% 0 0   100%
src / local_deep_research / api / research_functions.py _init_search_system   100% 26 0 0   100% 16 0   100%
src / local_deep_research / api / research_functions.py quick_summary   95% 43 2 0   91% 22 2   94%
src / local_deep_research / api / research_functions.py generate_report   89% 36 4 0   77% 22 5   84%
src / local_deep_research / api / research_functions.py detailed_research   100% 21 0 0   100% 8 0   100%
src / local_deep_research / api / research_functions.py analyze_documents   92% 38 3 0   71% 14 2   87%
src / local_deep_research / api / research_functions.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager._get_typed_value   100% 12 0 0   100% 4 0   100%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager._load_defaults   76% 21 5 0   83% 12 2   79%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager.get_setting   100% 5 0 0   100% 2 0   100%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager.set_setting   100% 5 0 0   100% 2 0   100%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager.get_all_settings   100% 1 0 0   100% 0 0   100%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager.load_from_defaults_file   100% 1 0 0   100% 0 0   100%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager.create_or_update_setting   100% 9 0 0   75% 4 1   92%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager.delete_setting   100% 4 0 0   100% 2 0   100%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager.get_bool_setting   0% 2 2 0   100% 0 0   0%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager.get_settings_snapshot   100% 7 0 0   100% 4 0   100%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager.import_settings   100% 9 0 0   100% 8 0   100%
src / local_deep_research / api / settings_utils.py get_default_settings_snapshot   100% 2 0 0   100% 0 0   100%
src / local_deep_research / api / settings_utils.py create_settings_snapshot   89% 37 4 0   88% 32 4   88%
src / local_deep_research / api / settings_utils.py extract_setting_value   100% 8 0 0   100% 6 0   100%
src / local_deep_research / api / settings_utils.py extract_bool_setting   100% 2 0 0   100% 0 0   100%
src / local_deep_research / api / settings_utils.py (no function)   100% 24 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / __init__.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / benchmark_functions.py evaluate_simpleqa   81% 27 5 0   68% 22 7   76%
src / local_deep_research / benchmarks / benchmark_functions.py evaluate_browsecomp   44% 27 15 0   32% 22 7   39%
src / local_deep_research / benchmarks / benchmark_functions.py evaluate_xbench_deepsearch   44% 27 15 0   32% 22 7   39%
src / local_deep_research / benchmarks / benchmark_functions.py get_available_benchmarks   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / benchmark_functions.py compare_configurations   97% 38 1 0   92% 12 1   96%
src / local_deep_research / benchmarks / benchmark_functions.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / comparison / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / comparison / evaluator.py compare_configurations   93% 42 3 0   92% 12 1   93%
src / local_deep_research / benchmarks / comparison / evaluator.py _evaluate_single_configuration   97% 36 1 0   50% 2 1   95%
src / local_deep_research / benchmarks / comparison / evaluator.py _calculate_average_metrics   100% 31 0 0   85% 20 3   94%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_comparison_visualizations   100% 23 0 0   100% 2 0   100%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_metric_comparison_chart   87% 30 4 0   86% 14 2   86%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_spider_chart   81% 37 7 0   100% 8 0   84%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_spider_chart.radar_factory   100% 12 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_spider_chart.radar_factory.RadarAxes.__init__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_spider_chart.radar_factory.RadarAxes.fill   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_spider_chart.radar_factory.RadarAxes.plot   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_spider_chart.radar_factory.RadarAxes.set_varlabels   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_spider_chart.radar_factory.RadarAxes._gen_axes_patch   0% 5 5 0   0% 4 0   0%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_spider_chart.radar_factory.RadarAxes._gen_axes_spines   0% 12 12 0   0% 4 0   0%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_spider_chart.radar_factory.unit_poly_verts   0% 5 5 0   0% 2 0   0%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_pareto_chart   95% 42 2 0   86% 14 2   93%
src / local_deep_research / benchmarks / comparison / evaluator.py (no function)   100% 21 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / comparison / results.py Benchmark_results.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / comparison / results.py Benchmark_results.add_result   100% 4 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / comparison / results.py Benchmark_results.get_all   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / comparison / results.py Benchmark_results.get_best   100% 6 0 0   100% 6 0   100%
src / local_deep_research / benchmarks / comparison / results.py Benchmark_results._load_results   100% 5 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / comparison / results.py Benchmark_results._save_results   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / comparison / results.py (no function)   100% 8 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets.py (no function)   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / __init__.py get_available_datasets   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / __init__.py load_dataset   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / __init__.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / base.py BenchmarkDataset.__init__   0% 5 5 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / base.py BenchmarkDataset.get_dataset_info   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / base.py BenchmarkDataset.get_default_dataset_path   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / base.py BenchmarkDataset.process_example   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / base.py BenchmarkDataset.load   0% 37 37 0   0% 14 0   0%
src / local_deep_research / benchmarks / datasets / base.py BenchmarkDataset.get_examples   0% 3 3 0   0% 2 0   0%
src / local_deep_research / benchmarks / datasets / base.py BenchmarkDataset.get_example   0% 4 4 0   0% 2 0   0%
src / local_deep_research / benchmarks / datasets / base.py BenchmarkDataset.get_question   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / base.py BenchmarkDataset.get_answer   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / base.py DatasetRegistry.register   86% 7 1 0   50% 2 1   78%
src / local_deep_research / benchmarks / datasets / base.py DatasetRegistry.get_dataset_class   100% 3 0 0   100% 2 0   100%
src / local_deep_research / benchmarks / datasets / base.py DatasetRegistry.create_dataset   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / base.py DatasetRegistry.get_available_datasets   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / base.py DatasetRegistry.load_dataset   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / base.py (no function)   100% 32 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / browsecomp.py BrowseCompDataset.get_dataset_info   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / browsecomp.py BrowseCompDataset.get_default_dataset_path   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / browsecomp.py BrowseCompDataset.process_example   0% 35 35 0   0% 14 0   0%
src / local_deep_research / benchmarks / datasets / browsecomp.py BrowseCompDataset.get_question   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / browsecomp.py BrowseCompDataset.get_answer   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / browsecomp.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / custom_dataset_template.py CustomDataset.get_dataset_info   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / custom_dataset_template.py CustomDataset.get_default_dataset_path   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / custom_dataset_template.py CustomDataset.process_example   0% 10 10 0   0% 6 0   0%
src / local_deep_research / benchmarks / datasets / custom_dataset_template.py CustomDataset.get_question   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / custom_dataset_template.py CustomDataset.get_answer   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / custom_dataset_template.py (no function)   0% 11 11 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / simpleqa.py SimpleQADataset.get_dataset_info   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / simpleqa.py SimpleQADataset.get_default_dataset_path   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / simpleqa.py SimpleQADataset.process_example   0% 10 10 0   0% 6 0   0%
src / local_deep_research / benchmarks / datasets / simpleqa.py SimpleQADataset.get_question   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / simpleqa.py SimpleQADataset.get_answer   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / simpleqa.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / utils.py derive_key   100% 4 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / utils.py decrypt   53% 51 24 0   62% 16 2   55%
src / local_deep_research / benchmarks / datasets / utils.py get_known_answer_map   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / utils.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / xbench_deepsearch.py XBenchDeepSearchDataset.xor_decrypt   0% 3 3 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / xbench_deepsearch.py XBenchDeepSearchDataset.get_dataset_info   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / xbench_deepsearch.py XBenchDeepSearchDataset.get_default_dataset_path   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / datasets / xbench_deepsearch.py XBenchDeepSearchDataset.load   0% 6 6 0   0% 2 0   0%
src / local_deep_research / benchmarks / datasets / xbench_deepsearch.py XBenchDeepSearchDataset.load_data   0% 37 37 0   0% 10 0   0%
src / local_deep_research / benchmarks / datasets / xbench_deepsearch.py XBenchDeepSearchDataset._load_from_url   0% 31 31 0   0% 10 0   0%
src / local_deep_research / benchmarks / datasets / xbench_deepsearch.py XBenchDeepSearchDataset.process_example   0% 5 5 0   100% 0 0   0%
src / local_deep_research / benchmarks / datasets / xbench_deepsearch.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / efficiency / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.__init__   92% 12 1 0   50% 2 1   86%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.start   46% 13 7 0   75% 4 1   53%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.stop   75% 8 2 0   75% 4 1   75%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor._monitor_resources   0% 18 18 0   0% 8 0   0%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.monitor   100% 4 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.get_process_stats   100% 6 0 0   100% 2 0   100%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.get_system_stats   100% 7 0 0   100% 2 0   100%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.get_combined_stats   100% 13 0 0   100% 10 0   100%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.print_summary   71% 14 4 0   75% 4 1   72%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.export_data   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py check_system_resources   69% 13 4 0   50% 2 1   67%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py (no function)   88% 24 3 0   100% 0 0   88%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.__init__   100% 4 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.start   100% 3 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.stop   100% 3 0 0   100% 2 0   100%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.start_timer   100% 3 0 0   100% 2 0   100%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.stop_timer   100% 13 0 0   100% 4 0   100%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.timer   100% 4 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.get_timings   100% 7 0 0   83% 6 1   92%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.get_summary   93% 15 1 0   83% 12 2   89%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.print_summary   70% 10 3 0   25% 4 1   57%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py time_function   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py time_function.wrapper   100% 5 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / evaluators / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / evaluators / base.py BaseBenchmarkEvaluator.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / evaluators / base.py BaseBenchmarkEvaluator.get_name   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / evaluators / base.py BaseBenchmarkEvaluator.evaluate   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / evaluators / base.py BaseBenchmarkEvaluator._create_subdirectory   100% 3 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / evaluators / base.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / evaluators / browsecomp.py BrowseCompEvaluator.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / evaluators / browsecomp.py BrowseCompEvaluator.evaluate   100% 10 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / evaluators / browsecomp.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / evaluators / composite.py CompositeBenchmarkEvaluator.__init__   100% 8 0 0   100% 2 0   100%
src / local_deep_research / benchmarks / evaluators / composite.py CompositeBenchmarkEvaluator.evaluate   100% 16 0 0   100% 4 0   100%
src / local_deep_research / benchmarks / evaluators / composite.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / evaluators / simpleqa.py SimpleQAEvaluator.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / evaluators / simpleqa.py SimpleQAEvaluator.evaluate   100% 12 0 0   100% 2 0   100%
src / local_deep_research / benchmarks / evaluators / simpleqa.py SimpleQAEvaluator._run_with_dataset_class   0% 43 43 0   0% 2 0   0%
src / local_deep_research / benchmarks / evaluators / simpleqa.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / graders.py get_evaluation_llm   100% 16 0 0   80% 10 2   92%
src / local_deep_research / benchmarks / graders.py extract_answer_from_response   100% 8 0 0   100% 2 0   100%
src / local_deep_research / benchmarks / graders.py grade_single_result   93% 41 3 0   62% 8 1   88%
src / local_deep_research / benchmarks / graders.py grade_results   79% 66 14 0   62% 24 7   74%
src / local_deep_research / benchmarks / graders.py human_evaluation   58% 48 20 0   56% 18 6   58%
src / local_deep_research / benchmarks / graders.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / metrics.py (no function)   0% 3 3 0   100% 0 0   0%
src / local_deep_research / benchmarks / metrics / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / metrics / calculation.py calculate_metrics   100% 43 0 0   100% 22 0   100%
src / local_deep_research / benchmarks / metrics / calculation.py evaluate_benchmark_quality   0% 21 21 0   0% 2 0   0%
src / local_deep_research / benchmarks / metrics / calculation.py measure_execution_time   0% 21 21 0   0% 4 0   0%
src / local_deep_research / benchmarks / metrics / calculation.py calculate_quality_metrics   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / metrics / calculation.py calculate_speed_metrics   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / metrics / calculation.py calculate_resource_metrics   100% 6 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / metrics / calculation.py calculate_combined_score   100% 17 0 0   100% 10 0   100%
src / local_deep_research / benchmarks / metrics / calculation.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / metrics / reporting.py generate_report   100% 49 0 0   96% 26 1   99%
src / local_deep_research / benchmarks / metrics / reporting.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / models / __init__.py (no function)   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / optimization / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / optimization / api.py optimize_parameters   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / optimization / api.py optimize_for_speed   100% 3 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / optimization / api.py optimize_for_quality   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / optimization / api.py optimize_for_efficiency   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / optimization / api.py get_default_param_space   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / optimization / api.py (no function)   100% 8 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / optimization / metrics.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer.__init__   100% 23 0 0   50% 2 1   96%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer.optimize   67% 27 9 0   33% 6 2   61%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._get_default_param_space   100% 1 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._objective   85% 27 4 0   64% 14 5   78%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._run_experiment   82% 22 4 0   100% 0 0   82%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._optimization_callback   0% 3 3 0   0% 2 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._save_results   96% 24 1 0   75% 12 3   89%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._create_visualizations   83% 12 2 0   75% 4 1   81%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._create_quick_visualizations   0% 10 10 0   0% 2 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._create_optuna_visualizations   54% 28 13 0   83% 6 1   59%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._create_custom_visualizations   83% 6 1 0   50% 2 1   75%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._create_quality_vs_speed_plot   43% 49 28 0   30% 10 3   41%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._create_parameter_evolution_plots   12% 33 29 0   10% 10 1   12%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._create_duration_vs_score_plot   91% 32 3 0   75% 8 2   88%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py optimize_parameters   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py optimize_for_speed   100% 3 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py optimize_for_quality   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py optimize_for_efficiency   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py (no function)   92% 40 3 0   100% 0 0   92%
src / local_deep_research / benchmarks / runners.py format_query   100% 3 0 0   100% 2 0   100%
src / local_deep_research / benchmarks / runners.py run_benchmark   45% 99 54 0   40% 40 6   44%
src / local_deep_research / benchmarks / runners.py run_simpleqa_benchmark   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / runners.py run_browsecomp_benchmark   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / runners.py run_xbench_deepsearch_benchmark   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / runners.py (no function)   100% 17 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / templates.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / ui / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / web_api / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py index   100% 6 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py results   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py start_benchmark   71% 51 15 0   41% 22 9   62%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py get_running_benchmark   69% 13 4 0   50% 2 1   67%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py get_benchmark_status   0% 11 11 0   0% 2 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py cancel_benchmark   0% 10 10 0   0% 2 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py get_benchmark_history   20% 50 40 0   7% 14 1   17%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py get_benchmark_results   0% 44 44 0   0% 12 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py export_benchmark_results   0% 17 17 0   0% 2 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py get_saved_configs   50% 6 3 0   100% 0 0   50%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py start_benchmark_simple   12% 42 37 0   6% 18 1   10%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py validate_config   77% 22 5 0   50% 12 6   68%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py get_search_quality   62% 8 3 0   100% 0 0   62%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py delete_benchmark_run   0% 20 20 0   0% 4 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_routes.py (no function)   100% 55 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkQueueTracker.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkQueueTracker.add_task   100% 3 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkQueueTracker.update_task_status   100% 5 0 0   100% 2 0   100%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkQueueTracker.get_task_status   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkQueueTracker.remove_task   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkQueueTracker.cleanup_completed_tasks   100% 15 0 0   92% 12 1   96%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.__init__   100% 4 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService._get_socket_service   86% 7 1 0   100% 0 0   86%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.generate_config_hash   100% 4 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.generate_query_hash   100% 2 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.create_benchmark_run   100% 14 0 0   100% 0 0   100%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.get_existing_results   100% 14 0 0   100% 4 0   100%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.start_benchmark   89% 36 4 0   62% 8 3   84%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService._run_benchmark_thread   0% 72 72 0   0% 22 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService._run_benchmark_thread.SettingsContext.__init__   0% 7 7 0   0% 4 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService._run_benchmark_thread.SettingsContext.get_setting   0% 4 4 0   0% 2 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService._create_task_queue   87% 15 2 0   80% 10 2   84%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService._process_benchmark_task   93% 45 3 0   50% 4 2   90%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService._process_benchmark_task.benchmark_progress_callback   0% 13 13 0   0% 6 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.sync_pending_results   6% 34 32 0   8% 12 1   7%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService._sync_results_to_database   0% 37 37 0   0% 16 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService._send_progress_update   71% 7 2 0   100% 0 0   71%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService._calculate_final_accuracy   0% 16 16 0   0% 4 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.update_benchmark_status   82% 17 3 0   75% 8 2   80%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.get_benchmark_status   11% 53 47 0   6% 18 1   10%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.cancel_benchmark   67% 9 3 0   50% 2 1   64%
src / local_deep_research / benchmarks / web_api / benchmark_service.py (no function)   100% 46 0 0   100% 0 0   100%
src / local_deep_research / citation_handler.py CitationHandler.__init__   100% 10 0 0   100% 4 0   100%
src / local_deep_research / citation_handler.py CitationHandler._create_handler   100% 16 0 0   100% 6 0   100%
src / local_deep_research / citation_handler.py CitationHandler.analyze_initial   100% 1 0 0   100% 0 0   100%
src / local_deep_research / citation_handler.py CitationHandler.analyze_followup   100% 1 0 0   100% 0 0   100%
src / local_deep_research / citation_handler.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / citation_handlers / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / citation_handlers / base_citation_handler.py BaseCitationHandler.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / citation_handlers / base_citation_handler.py BaseCitationHandler.get_setting   100% 6 0 0   100% 4 0   100%
src / local_deep_research / citation_handlers / base_citation_handler.py BaseCitationHandler._get_output_instruction_prefix   100% 4 0 0   100% 2 0   100%
src / local_deep_research / citation_handlers / base_citation_handler.py BaseCitationHandler._create_documents   100% 11 0 0   88% 8 1   95%
src / local_deep_research / citation_handlers / base_citation_handler.py BaseCitationHandler._format_sources   100% 5 0 0   100% 2 0   100%
src / local_deep_research / citation_handlers / base_citation_handler.py BaseCitationHandler.analyze_initial   0% 1 1 0   100% 0 0   0%
src / local_deep_research / citation_handlers / base_citation_handler.py BaseCitationHandler.analyze_followup   0% 1 1 0   100% 0 0   0%
src / local_deep_research / citation_handlers / base_citation_handler.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / citation_handlers / forced_answer_citation_handler.py ForcedAnswerCitationHandler.analyze_initial   100% 11 0 0   100% 4 0   100%
src / local_deep_research / citation_handlers / forced_answer_citation_handler.py ForcedAnswerCitationHandler.analyze_followup   100% 15 0 0   100% 4 0   100%
src / local_deep_research / citation_handlers / forced_answer_citation_handler.py ForcedAnswerCitationHandler._needs_answer_extraction   100% 10 0 0   100% 8 0   100%
src / local_deep_research / citation_handlers / forced_answer_citation_handler.py ForcedAnswerCitationHandler._extract_direct_answer   100% 7 0 0   100% 0 0   100%
src / local_deep_research / citation_handlers / forced_answer_citation_handler.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / citation_handlers / precision_extraction_handler.py PrecisionExtractionHandler.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / citation_handlers / precision_extraction_handler.py PrecisionExtractionHandler.analyze_initial   100% 11 0 0   100% 2 0   100%
src / local_deep_research / citation_handlers / precision_extraction_handler.py PrecisionExtractionHandler.analyze_followup   100% 11 0 0   100% 0 0   100%
src / local_deep_research / citation_handlers / precision_extraction_handler.py PrecisionExtractionHandler._identify_question_type   100% 18 0 0   100% 16 0   100%
src / local_deep_research / citation_handlers / precision_extraction_handler.py PrecisionExtractionHandler._apply_precision_extraction   67% 15 5 0   64% 14 5   66%
src / local_deep_research / citation_handlers / precision_extraction_handler.py PrecisionExtractionHandler._extract_full_name   100% 29 0 0   75% 20 5   90%
src / local_deep_research / citation_handlers / precision_extraction_handler.py PrecisionExtractionHandler._extract_single_answer   70% 10 3 0   100% 0 0   70%
src / local_deep_research / citation_handlers / precision_extraction_handler.py PrecisionExtractionHandler._extract_dimension   91% 45 4 0   65% 20 7   83%
src / local_deep_research / citation_handlers / precision_extraction_handler.py PrecisionExtractionHandler._extract_score   78% 9 2 0   100% 2 0   82%
src / local_deep_research / citation_handlers / precision_extraction_handler.py PrecisionExtractionHandler._extract_temporal   75% 12 3 0   75% 4 1   75%
src / local_deep_research / citation_handlers / precision_extraction_handler.py PrecisionExtractionHandler._extract_number   67% 9 3 0   50% 2 1   64%
src / local_deep_research / citation_handlers / precision_extraction_handler.py PrecisionExtractionHandler._extract_best_name   88% 8 1 0   75% 4 1   83%
src / local_deep_research / citation_handlers / precision_extraction_handler.py PrecisionExtractionHandler._extract_key_facts   100% 6 0 0   100% 0 0   100%
src / local_deep_research / citation_handlers / precision_extraction_handler.py (no function)   100% 19 0 0   100% 0 0   100%
src / local_deep_research / citation_handlers / standard_citation_handler.py StandardCitationHandler.analyze_initial   100% 9 0 0   100% 2 0   100%
src / local_deep_research / citation_handlers / standard_citation_handler.py StandardCitationHandler.analyze_followup   100% 11 0 0   100% 2 0   100%
src / local_deep_research / citation_handlers / standard_citation_handler.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / config / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / config / llm_config.py is_openai_available   86% 7 1 0   100% 0 0   86%
src / local_deep_research / config / llm_config.py is_anthropic_available   43% 7 4 0   100% 0 0   43%
src / local_deep_research / config / llm_config.py is_openai_endpoint_available   43% 7 4 0   100% 0 0   43%
src / local_deep_research / config / llm_config.py is_ollama_available   86% 7 1 0   100% 0 0   86%
src / local_deep_research / config / llm_config.py is_vllm_available   75% 8 2 0   100% 0 0   75%
src / local_deep_research / config / llm_config.py is_lmstudio_available   43% 7 4 0   100% 0 0   43%
src / local_deep_research / config / llm_config.py is_llamacpp_available   60% 10 4 0   100% 2 0   67%
src / local_deep_research / config / llm_config.py is_google_available   57% 7 3 0   100% 0 0   57%
src / local_deep_research / config / llm_config.py is_openrouter_available   57% 7 3 0   100% 0 0   57%
src / local_deep_research / config / llm_config.py get_available_providers   64% 22 8 0   60% 20 8   62%
src / local_deep_research / config / llm_config.py get_selected_llm_provider   100% 1 0 0   100% 0 0   100%
src / local_deep_research / config / llm_config.py _get_context_window_for_provider   75% 8 2 0   75% 4 1   75%
src / local_deep_research / config / llm_config.py get_llm   75% 209 52 0   68% 100 16   73%
src / local_deep_research / config / llm_config.py get_fallback_model   100% 1 0 0   100% 0 0   100%
src / local_deep_research / config / llm_config.py wrap_llm_without_think_tags   50% 30 15 0   40% 20 4   46%
src / local_deep_research / config / llm_config.py wrap_llm_without_think_tags.ProcessingLLMWrapper.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / config / llm_config.py wrap_llm_without_think_tags.ProcessingLLMWrapper.invoke   92% 13 1 0   67% 6 2   84%
src / local_deep_research / config / llm_config.py wrap_llm_without_think_tags.ProcessingLLMWrapper.__getattr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / config / llm_config.py (no function)   94% 33 2 0   100% 0 0   94%
src / local_deep_research / config / paths.py get_data_directory   100% 8 0 0   100% 2 0   100%
src / local_deep_research / config / paths.py get_research_outputs_directory   100% 5 0 0   100% 0 0   100%
src / local_deep_research / config / paths.py get_cache_directory   100% 5 0 0   100% 0 0   100%
src / local_deep_research / config / paths.py get_logs_directory   100% 5 0 0   100% 0 0   100%
src / local_deep_research / config / paths.py get_encrypted_database_path   100% 4 0 0   100% 0 0   100%
src / local_deep_research / config / paths.py get_user_database_filename   100% 2 0 0   100% 0 0   100%
src / local_deep_research / config / paths.py get_library_directory   100% 5 0 0   100% 0 0   100%
src / local_deep_research / config / paths.py get_config_directory   100% 5 0 0   100% 0 0   100%
src / local_deep_research / config / paths.py get_models_directory   100% 5 0 0   100% 0 0   100%
src / local_deep_research / config / paths.py get_data_dir   100% 1 0 0   100% 0 0   100%
src / local_deep_research / config / paths.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / config / search_config.py get_search_snippets_only_setting   100% 1 0 0   100% 0 0   100%
src / local_deep_research / config / search_config.py get_search   100% 19 0 0   90% 10 1   97%
src / local_deep_research / config / search_config.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / config / thread_settings.py set_settings_context   100% 1 0 0   100% 0 0   100%
src / local_deep_research / config / thread_settings.py clear_settings_context   100% 2 0 0   100% 2 0   100%
src / local_deep_research / config / thread_settings.py get_settings_context   100% 3 0 0   100% 2 0   100%
src / local_deep_research / config / thread_settings.py settings_context   100% 4 0 0   100% 0 0   100%
src / local_deep_research / config / thread_settings.py get_setting_from_snapshot   100% 30 0 0   100% 24 0   100%
src / local_deep_research / config / thread_settings.py get_llm_setting_from_snapshot   100% 1 0 0   100% 0 0   100%
src / local_deep_research / config / thread_settings.py get_bool_setting_from_snapshot   100% 2 0 0   100% 0 0   100%
src / local_deep_research / config / thread_settings.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / constants.py (no function)   100% 17 0 0   100% 0 0   100%
src / local_deep_research / database / auth_db.py get_auth_db_path   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / auth_db.py _get_auth_engine   90% 20 2 0   100% 8 0   93%
src / local_deep_research / database / auth_db.py init_auth_database   100% 10 0 0   100% 2 0   100%
src / local_deep_research / database / auth_db.py get_auth_db_session   100% 3 0 0   100% 0 0   100%
src / local_deep_research / database / auth_db.py auth_db_session   100% 4 0 0   100% 0 0   100%
src / local_deep_research / database / auth_db.py dispose_auth_engine   100% 6 0 0   100% 2 0   100%
src / local_deep_research / database / auth_db.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / database / credential_store_base.py CredentialStoreBase.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / database / credential_store_base.py CredentialStoreBase._store_credentials   100% 3 0 0   100% 0 0   100%
src / local_deep_research / database / credential_store_base.py CredentialStoreBase._retrieve_credentials   100% 12 0 0   100% 6 0   100%
src / local_deep_research / database / credential_store_base.py CredentialStoreBase._cleanup_expired   100% 4 0 0   100% 2 0   100%
src / local_deep_research / database / credential_store_base.py CredentialStoreBase.clear_entry   100% 3 0 0   100% 2 0   100%
src / local_deep_research / database / credential_store_base.py CredentialStoreBase.store   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / credential_store_base.py CredentialStoreBase.retrieve   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / credential_store_base.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.__init__   100% 9 0 0   100% 0 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager._get_pool_kwargs   100% 3 0 0   100% 2 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager._is_valid_encryption_key   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.is_user_connected   100% 2 0 0   100% 0 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager._check_encryption_available   91% 43 4 0   62% 8 3   86%
src / local_deep_research / database / encrypted_db.py DatabaseManager._get_user_db_path   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager._apply_pragmas   0% 15 15 0   0% 4 0   0%
src / local_deep_research / database / encrypted_db.py DatabaseManager._make_sqlcipher_connection   100% 18 0 0   100% 2 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.create_user_database   86% 49 7 0   83% 12 0   85%
src / local_deep_research / database / encrypted_db.py DatabaseManager.create_user_database.create_engine_connection   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.open_user_database   92% 36 3 0   90% 10 1   91%
src / local_deep_research / database / encrypted_db.py DatabaseManager.open_user_database.create_open_connection   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.get_session   100% 7 0 0   100% 2 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.close_user_database   100% 6 0 0   100% 2 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.check_database_integrity   100% 18 0 0   100% 6 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.change_password   84% 19 3 0   100% 6 0   88%
src / local_deep_research / database / encrypted_db.py DatabaseManager.user_exists   100% 5 0 0   100% 0 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.get_memory_usage   100% 3 0 0   100% 0 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.cleanup_thread_engines   100% 22 0 0   93% 14 1   97%
src / local_deep_research / database / encrypted_db.py DatabaseManager.cleanup_all_thread_engines   78% 9 2 0   100% 2 0   82%
src / local_deep_research / database / encrypted_db.py DatabaseManager.create_thread_safe_session_for_metrics   88% 32 4 0   88% 8 1   88%
src / local_deep_research / database / encrypted_db.py DatabaseManager.create_thread_safe_session_for_metrics.create_thread_connection   100% 5 0 0   100% 0 0   100%
src / local_deep_research / database / encrypted_db.py (no function)   100% 35 0 0   100% 0 0   100%
src / local_deep_research / database / encryption_check.py check_sqlcipher_available   100% 14 0 0   75% 4 1   94%
src / local_deep_research / database / encryption_check.py warn_if_no_encryption   100% 6 0 0   100% 2 0   100%
src / local_deep_research / database / encryption_check.py get_connection_string   100% 6 0 0   100% 4 0   100%
src / local_deep_research / database / encryption_check.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / database / initialize.py initialize_database   88% 16 2 0   100% 2 0   89%
src / local_deep_research / database / initialize.py _initialize_default_settings   100% 12 0 0   100% 2 0   100%
src / local_deep_research / database / initialize.py check_database_schema   85% 13 2 0   88% 8 1   86%
src / local_deep_research / database / initialize.py _add_column_if_not_exists   87% 23 3 0   100% 4 0   89%
src / local_deep_research / database / initialize.py _run_migrations   100% 6 0 0   100% 2 0   100%
src / local_deep_research / database / initialize.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / database / library_init.py seed_source_types   100% 16 0 0   100% 4 0   100%
src / local_deep_research / database / library_init.py ensure_default_library_collection   100% 15 0 0   100% 2 0   100%
src / local_deep_research / database / library_init.py initialize_library_for_user   100% 12 0 0   100% 0 0   100%
src / local_deep_research / database / library_init.py get_default_library_id   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / library_init.py get_source_type_id   100% 9 0 0   100% 2 0   100%
src / local_deep_research / database / library_init.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / database / models / __init__.py (no function)   100% 21 0 0   100% 0 0   100%
src / local_deep_research / database / models / active_research.py UserActiveResearch.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / active_research.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / database / models / auth.py User.__repr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / models / auth.py User.database_path   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / models / auth.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / database / models / base.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / database / models / benchmark.py (no function)   100% 101 0 0   100% 0 0   100%
src / local_deep_research / database / models / cache.py Cache.is_expired   86% 7 1 0   75% 4 1   82%
src / local_deep_research / database / models / cache.py Cache.set_ttl   100% 2 0 0   100% 0 0   100%
src / local_deep_research / database / models / cache.py Cache.record_hit   100% 2 0 0   100% 0 0   100%
src / local_deep_research / database / models / cache.py Cache.__repr__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / database / models / cache.py SearchCache.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / cache.py (no function)   100% 35 0 0   100% 0 0   100%
src / local_deep_research / database / models / download_tracker.py DownloadTracker.__repr__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / database / models / download_tracker.py DownloadDuplicates.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / download_tracker.py DownloadAttempt.__repr__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / database / models / download_tracker.py (no function)   100% 42 0 0   100% 0 0   100%
src / local_deep_research / database / models / file_integrity.py FileIntegrityRecord.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / file_integrity.py FileVerificationFailure.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / file_integrity.py (no function)   100% 37 0 0   100% 0 0   100%
src / local_deep_research / database / models / library.py SourceType.__repr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / models / library.py UploadBatch.__repr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / models / library.py Document.__repr__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / database / models / library.py DocumentBlob.__repr__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / database / models / library.py Collection.__repr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / models / library.py DocumentCollection.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / library.py DocumentChunk.__repr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / models / library.py DownloadQueue.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / library.py LibraryStatistics.__repr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / models / library.py RAGIndex.__repr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / models / library.py RagDocumentStatus.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / library.py CollectionFolder.__repr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / models / library.py CollectionFolderFile.__repr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / models / library.py (no function)   100% 291 0 0   100% 0 0   100%
src / local_deep_research / database / models / logs.py ResearchLog.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / logs.py Journal.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / logs.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / database / models / metrics.py TokenUsage.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / metrics.py ModelUsage.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / metrics.py ResearchRating.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / metrics.py SearchCall.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / metrics.py (no function)   100% 92 0 0   100% 0 0   100%
src / local_deep_research / database / models / news.py SubscriptionFolder.to_dict   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / news.py (no function)   100% 110 0 0   100% 0 0   100%
src / local_deep_research / database / models / providers.py ProviderModel.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / providers.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / database / models / queue.py (no function)   100% 27 0 0   100% 0 0   100%
src / local_deep_research / database / models / queued_research.py QueuedResearch.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / queued_research.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / database / models / rate_limiting.py RateLimitAttempt.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / rate_limiting.py RateLimitEstimate.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / rate_limiting.py (no function)   100% 28 0 0   100% 0 0   100%
src / local_deep_research / database / models / reports.py Report.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / reports.py ReportSection.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / reports.py (no function)   100% 51 0 0   100% 0 0   100%
src / local_deep_research / database / models / research.py ResearchTask.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / research.py SearchQuery.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / research.py SearchResult.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / research.py ResearchResource.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / research.py ResearchHistory.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / research.py Research.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / research.py ResearchStrategy.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / research.py (no function)   100% 120 0 0   100% 0 0   100%
src / local_deep_research / database / models / settings.py UserSettings.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / settings.py APIKey.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / settings.py Setting.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / settings.py (no function)   100% 53 0 0   100% 0 0   100%
src / local_deep_research / database / models / user_news_search_history.py UserNewsSearchHistory.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / user_news_search_history.py UserNewsSearchHistory.to_dict   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / user_news_search_history.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / database / queue_service.py UserQueueService.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / queue_service.py UserQueueService._safe_commit   33% 6 4 0   100% 0 0   33%
src / local_deep_research / database / queue_service.py UserQueueService.update_queue_status   100% 10 0 0   75% 4 1   93%
src / local_deep_research / database / queue_service.py UserQueueService.get_queue_status   100% 4 0 0   100% 2 0   100%
src / local_deep_research / database / queue_service.py UserQueueService.add_task_metadata   100% 4 0 0   100% 0 0   100%
src / local_deep_research / database / queue_service.py UserQueueService.update_task_status   100% 12 0 0   100% 6 0   100%
src / local_deep_research / database / queue_service.py UserQueueService.get_pending_tasks   100% 2 0 0   100% 0 0   100%
src / local_deep_research / database / queue_service.py UserQueueService.cleanup_old_tasks   100% 4 0 0   100% 0 0   100%
src / local_deep_research / database / queue_service.py UserQueueService.get_active_task_count   100% 2 0 0   100% 0 0   100%
src / local_deep_research / database / queue_service.py UserQueueService.get_queued_task_count   100% 2 0 0   100% 0 0   100%
src / local_deep_research / database / queue_service.py UserQueueService._get_or_create_status   100% 5 0 0   100% 2 0   100%
src / local_deep_research / database / queue_service.py UserQueueService._increment_queue_count   100% 3 0 0   100% 0 0   100%
src / local_deep_research / database / queue_service.py UserQueueService._update_queue_counts   100% 4 0 0   100% 0 0   100%
src / local_deep_research / database / queue_service.py (no function)   100% 19 0 0   100% 0 0   100%
src / local_deep_research / database / session_context.py get_user_db_session   89% 46 5 0   93% 30 2   91%
src / local_deep_research / database / session_context.py with_user_database   100% 3 0 0   100% 0 0   100%
src / local_deep_research / database / session_context.py with_user_database.wrapper   100% 4 0 0   100% 0 0   100%
src / local_deep_research / database / session_context.py ensure_db_session   100% 3 0 0   100% 0 0   100%
src / local_deep_research / database / session_context.py ensure_db_session.wrapper   100% 17 0 0   100% 8 0   100%
src / local_deep_research / database / session_context.py DatabaseAccessMixin.get_db_session   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / session_context.py DatabaseAccessMixin.execute_with_db   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / session_context.py (no function)   100% 19 0 0   100% 0 0   100%
src / local_deep_research / database / session_passwords.py SessionPasswordStore.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / session_passwords.py SessionPasswordStore.store_session_password   100% 3 0 0   100% 0 0   100%
src / local_deep_research / database / session_passwords.py SessionPasswordStore.get_session_password   100% 3 0 0   100% 0 0   100%
src / local_deep_research / database / session_passwords.py SessionPasswordStore.clear_session   100% 3 0 0   100% 0 0   100%
src / local_deep_research / database / session_passwords.py SessionPasswordStore.store   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / session_passwords.py SessionPasswordStore.retrieve   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / session_passwords.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_compat.py get_sqlcipher_module   60% 5 2 0   100% 0 0   60%
src / local_deep_research / database / sqlcipher_compat.py (no function)   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_utils.py get_salt_file_path   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_utils.py get_salt_for_database   100% 9 0 0   100% 2 0   100%
src / local_deep_research / database / sqlcipher_utils.py create_database_salt   100% 11 0 0   100% 2 0   100%
src / local_deep_research / database / sqlcipher_utils.py has_per_database_salt   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_utils.py _get_key_from_password   100% 4 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_utils.py get_key_from_password   100% 5 0 0   100% 2 0   100%
src / local_deep_research / database / sqlcipher_utils.py set_sqlcipher_key   100% 2 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_utils.py set_sqlcipher_key_from_hex   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_utils.py set_sqlcipher_rekey   100% 7 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_utils.py _get_min_kdf_iterations   100% 2 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_utils.py get_sqlcipher_settings   85% 13 2 0   75% 4 1   82%
src / local_deep_research / database / sqlcipher_utils.py apply_cipher_defaults_before_key   100% 5 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_utils.py apply_sqlcipher_pragmas   100% 8 0 0   100% 2 0   100%
src / local_deep_research / database / sqlcipher_utils.py apply_performance_pragmas   100% 9 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_utils.py verify_sqlcipher_connection   100% 10 0 0   100% 2 0   100%
src / local_deep_research / database / sqlcipher_utils.py get_sqlcipher_version   100% 6 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_utils.py create_sqlcipher_connection   96% 25 1 0   88% 8 1   94%
src / local_deep_research / database / sqlcipher_utils.py (no function)   100% 41 0 0   100% 0 0   100%
src / local_deep_research / database / temp_auth.py TemporaryAuthStore.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / temp_auth.py TemporaryAuthStore.store_auth   100% 4 0 0   100% 0 0   100%
src / local_deep_research / database / temp_auth.py TemporaryAuthStore.retrieve_auth   100% 4 0 0   100% 2 0   100%
src / local_deep_research / database / temp_auth.py TemporaryAuthStore.peek_auth   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / temp_auth.py TemporaryAuthStore.store   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / temp_auth.py TemporaryAuthStore.retrieve   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / temp_auth.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / database / thread_local_session.py ThreadLocalSessionManager.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / database / thread_local_session.py ThreadLocalSessionManager.get_session   91% 22 2 0   83% 6 1   89%
src / local_deep_research / database / thread_local_session.py ThreadLocalSessionManager.get_current_session   100% 3 0 0   100% 2 0   100%
src / local_deep_research / database / thread_local_session.py ThreadLocalSessionManager._cleanup_thread_session   85% 13 2 0   100% 4 0   88%
src / local_deep_research / database / thread_local_session.py ThreadLocalSessionManager.cleanup_thread   100% 6 0 0   100% 4 0   100%
src / local_deep_research / database / thread_local_session.py ThreadLocalSessionManager.cleanup_all   100% 5 0 0   100% 2 0   100%
src / local_deep_research / database / thread_local_session.py get_metrics_session   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / thread_local_session.py get_current_thread_session   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / thread_local_session.py cleanup_current_thread   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / thread_local_session.py ThreadSessionContext.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / database / thread_local_session.py ThreadSessionContext.__enter__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / database / thread_local_session.py ThreadSessionContext.__exit__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / thread_local_session.py (no function)   100% 21 0 0   100% 0 0   100%
src / local_deep_research / database / thread_metrics.py ThreadSafeMetricsWriter.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / thread_metrics.py ThreadSafeMetricsWriter.set_user_password   100% 3 0 0   100% 2 0   100%
src / local_deep_research / database / thread_metrics.py ThreadSafeMetricsWriter.get_session   96% 28 1 0   86% 14 2   93%
src / local_deep_research / database / thread_metrics.py ThreadSafeMetricsWriter.write_token_metrics   100% 4 0 0   100% 0 0   100%
src / local_deep_research / database / thread_metrics.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / defaults / __init__.py get_default_file_path   100% 3 0 0   100% 2 0   100%
src / local_deep_research / defaults / __init__.py list_default_files   100% 1 0 0   100% 0 0   100%
src / local_deep_research / defaults / __init__.py ensure_defaults_exist   88% 8 1 0   67% 6 2   79%
src / local_deep_research / defaults / __init__.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / document_loaders / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / document_loaders / bytes_loader.py load_from_bytes   89% 28 3 0   88% 8 1   89%
src / local_deep_research / document_loaders / bytes_loader.py extract_text_from_bytes   91% 11 1 0   50% 2 1   85%
src / local_deep_research / document_loaders / bytes_loader.py (no function)   100% 8 0 0   100% 0 0   100%
src / local_deep_research / document_loaders / json_loader.py extract_strings_from_json   100% 12 0 0   100% 10 0   100%
src / local_deep_research / document_loaders / json_loader.py SimpleJSONLoader.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / document_loaders / json_loader.py SimpleJSONLoader.lazy_load   100% 18 0 0   100% 2 0   100%
src / local_deep_research / document_loaders / json_loader.py SimpleJSONLoader.load   100% 1 0 0   100% 0 0   100%
src / local_deep_research / document_loaders / json_loader.py extract_text_from_json   100% 13 0 0   100% 0 0   100%
src / local_deep_research / document_loaders / json_loader.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / document_loaders / loader_registry.py get_supported_extensions   100% 1 0 0   100% 0 0   100%
src / local_deep_research / document_loaders / loader_registry.py is_extension_supported   100% 2 0 0   100% 0 0   100%
src / local_deep_research / document_loaders / loader_registry.py get_loader_for_path   75% 12 3 0   100% 2 0   79%
src / local_deep_research / document_loaders / loader_registry.py get_loader_class_for_extension   100% 5 0 0   100% 2 0   100%
src / local_deep_research / document_loaders / loader_registry.py (no function)   76% 74 18 0   57% 14 6   73%
src / local_deep_research / document_loaders / yaml_loader.py YAMLLoader.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / document_loaders / yaml_loader.py YAMLLoader.lazy_load   100% 17 0 0   100% 2 0   100%
src / local_deep_research / document_loaders / yaml_loader.py YAMLLoader.load   100% 1 0 0   100% 0 0   100%
src / local_deep_research / document_loaders / yaml_loader.py extract_text_from_yaml   100% 13 0 0   100% 2 0   100%
src / local_deep_research / document_loaders / yaml_loader.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / domain_classifier / __init__.py __getattr__   86% 7 1 0   75% 4 1   82%
src / local_deep_research / domain_classifier / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / domain_classifier / classifier.py DomainClassifier.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / domain_classifier / classifier.py DomainClassifier._get_llm   100% 3 0 0   100% 2 0   100%
src / local_deep_research / domain_classifier / classifier.py DomainClassifier._get_domain_samples   80% 5 1 0   50% 2 1   71%
src / local_deep_research / domain_classifier / classifier.py DomainClassifier._build_classification_prompt   100% 11 0 0   83% 6 1   94%
src / local_deep_research / domain_classifier / classifier.py DomainClassifier.classify_domain   77% 30 7 0   83% 6 1   78%
src / local_deep_research / domain_classifier / classifier.py DomainClassifier.classify_all_domains   88% 49 6 0   94% 18 1   90%
src / local_deep_research / domain_classifier / classifier.py DomainClassifier.get_classification   100% 6 0 0   100% 0 0   100%
src / local_deep_research / domain_classifier / classifier.py DomainClassifier.get_all_classifications   100% 6 0 0   100% 0 0   100%
src / local_deep_research / domain_classifier / classifier.py DomainClassifier.get_categories_summary   100% 19 0 0   88% 8 1   96%
src / local_deep_research / domain_classifier / classifier.py (no function)   100% 20 0 0   100% 0 0   100%
src / local_deep_research / domain_classifier / models.py DomainClassification.to_dict   0% 1 1 0   100% 0 0   0%
src / local_deep_research / domain_classifier / models.py (no function)   100% 17 0 0   100% 0 0   100%
src / local_deep_research / embeddings / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / embeddings / embeddings_config.py _get_provider_classes   100% 6 0 0   100% 2 0   100%
src / local_deep_research / embeddings / embeddings_config.py is_sentence_transformers_available   100% 2 0 0   100% 0 0   100%
src / local_deep_research / embeddings / embeddings_config.py is_ollama_embeddings_available   100% 2 0 0   100% 0 0   100%
src / local_deep_research / embeddings / embeddings_config.py is_openai_embeddings_available   100% 2 0 0   100% 0 0   100%
src / local_deep_research / embeddings / embeddings_config.py get_available_embedding_providers   75% 8 2 0   50% 6 3   64%
src / local_deep_research / embeddings / embeddings_config.py get_embedding_function   100% 2 0 0   100% 0 0   100%
src / local_deep_research / embeddings / embeddings_config.py get_embeddings   85% 13 2 0   62% 8 3   76%
src / local_deep_research / embeddings / embeddings_config.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / base.py BaseEmbeddingProvider.create_embeddings   0% 1 1 0   100% 0 0   0%
src / local_deep_research / embeddings / providers / base.py BaseEmbeddingProvider.is_available   0% 1 1 0   100% 0 0   0%
src / local_deep_research / embeddings / providers / base.py BaseEmbeddingProvider.get_available_models   100% 1 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / base.py BaseEmbeddingProvider.is_embedding_model   0% 1 1 0   100% 0 0   0%
src / local_deep_research / embeddings / providers / base.py BaseEmbeddingProvider.get_model_info   100% 1 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / base.py BaseEmbeddingProvider.validate_config   100% 3 0 0   100% 2 0   100%
src / local_deep_research / embeddings / providers / base.py BaseEmbeddingProvider.get_provider_info   100% 1 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / base.py (no function)   100% 25 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / implementations / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / implementations / ollama.py OllamaEmbeddingsProvider.create_embeddings   100% 7 0 0   100% 4 0   100%
src / local_deep_research / embeddings / providers / implementations / ollama.py OllamaEmbeddingsProvider.is_available   73% 11 3 0   100% 0 0   73%
src / local_deep_research / embeddings / providers / implementations / ollama.py OllamaEmbeddingsProvider._get_model_capabilities   100% 7 0 0   100% 2 0   100%
src / local_deep_research / embeddings / providers / implementations / ollama.py OllamaEmbeddingsProvider.is_embedding_model   100% 5 0 0   100% 2 0   100%
src / local_deep_research / embeddings / providers / implementations / ollama.py OllamaEmbeddingsProvider.get_available_models   100% 19 0 0   100% 8 0   100%
src / local_deep_research / embeddings / providers / implementations / ollama.py _name_looks_like_embedding   100% 2 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / implementations / ollama.py (no function)   100% 25 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / implementations / openai.py OpenAIEmbeddingsProvider.create_embeddings   100% 22 0 0   100% 14 0   100%
src / local_deep_research / embeddings / providers / implementations / openai.py OpenAIEmbeddingsProvider.is_available   100% 5 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / implementations / openai.py OpenAIEmbeddingsProvider.get_available_models   100% 17 0 0   100% 6 0   100%
src / local_deep_research / embeddings / providers / implementations / openai.py (no function)   100% 17 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / implementations / sentence_transformers.py SentenceTransformersProvider.create_embeddings   100% 8 0 0   100% 4 0   100%
src / local_deep_research / embeddings / providers / implementations / sentence_transformers.py SentenceTransformersProvider.is_available   100% 1 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / implementations / sentence_transformers.py SentenceTransformersProvider.get_available_models   100% 1 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / implementations / sentence_transformers.py (no function)   100% 18 0 0   100% 0 0   100%
src / local_deep_research / embeddings / splitters / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / embeddings / splitters / text_splitter_registry.py get_text_splitter   100% 29 0 0   94% 16 1   98%
src / local_deep_research / embeddings / splitters / text_splitter_registry.py is_semantic_chunker_available   100% 2 0 0   100% 0 0   100%
src / local_deep_research / embeddings / splitters / text_splitter_registry.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / error_handling / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / error_handling / error_reporter.py ErrorReporter.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / error_handling / error_reporter.py ErrorReporter.categorize_error   100% 7 0 0   100% 6 0   100%
src / local_deep_research / error_handling / error_reporter.py ErrorReporter.get_user_friendly_title   100% 2 0 0   100% 0 0   100%
src / local_deep_research / error_handling / error_reporter.py ErrorReporter.get_suggested_actions   100% 2 0 0   100% 0 0   100%
src / local_deep_research / error_handling / error_reporter.py ErrorReporter.analyze_error   100% 7 0 0   100% 2 0   100%
src / local_deep_research / error_handling / error_reporter.py ErrorReporter._send_error_notifications   77% 30 7 0   67% 12 2   74%
src / local_deep_research / error_handling / error_reporter.py ErrorReporter._extract_service_name   100% 6 0 0   100% 4 0   100%
src / local_deep_research / error_handling / error_reporter.py ErrorReporter._determine_severity   100% 2 0 0   100% 0 0   100%
src / local_deep_research / error_handling / error_reporter.py ErrorReporter._is_recoverable   100% 2 0 0   100% 0 0   100%
src / local_deep_research / error_handling / error_reporter.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / error_handling / report_generator.py ErrorReportGenerator.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / error_handling / report_generator.py ErrorReportGenerator.generate_error_report   100% 26 0 0   83% 6 1   97%
src / local_deep_research / error_handling / report_generator.py ErrorReportGenerator._format_partial_results   100% 34 0 0   92% 24 2   97%
src / local_deep_research / error_handling / report_generator.py ErrorReportGenerator._get_technical_context   100% 27 0 0   100% 20 0   100%
src / local_deep_research / error_handling / report_generator.py ErrorReportGenerator.generate_quick_error_summary   100% 2 0 0   100% 0 0   100%
src / local_deep_research / error_handling / report_generator.py ErrorReportGenerator._make_error_user_friendly   100% 6 0 0   100% 4 0   100%
src / local_deep_research / error_handling / report_generator.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / exporters / __init__.py (no function)   100% 8 0 0   100% 0 0   100%
src / local_deep_research / exporters / base.py BaseExporter.format_name   0% 1 1 0   100% 0 0   0%
src / local_deep_research / exporters / base.py BaseExporter.file_extension   0% 1 1 0   100% 0 0   0%
src / local_deep_research / exporters / base.py BaseExporter.mimetype   0% 1 1 0   100% 0 0   0%
src / local_deep_research / exporters / base.py BaseExporter.export   0% 1 1 0   100% 0 0   0%
src / local_deep_research / exporters / base.py BaseExporter._generate_safe_filename   100% 4 0 0   100% 2 0   100%
src / local_deep_research / exporters / base.py BaseExporter._prepend_title_if_needed   100% 7 0 0   100% 6 0   100%
src / local_deep_research / exporters / base.py (no function)   100% 25 0 0   100% 0 0   100%
src / local_deep_research / exporters / latex_exporter.py LaTeXExporter.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / exporters / latex_exporter.py LaTeXExporter.format_name   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / latex_exporter.py LaTeXExporter.file_extension   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / latex_exporter.py LaTeXExporter.mimetype   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / latex_exporter.py LaTeXExporter.export   100% 11 0 0   100% 2 0   100%
src / local_deep_research / exporters / latex_exporter.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / exporters / odt_exporter.py ODTExporter.format_name   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / odt_exporter.py ODTExporter.file_extension   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / odt_exporter.py ODTExporter.mimetype   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / odt_exporter.py ODTExporter.export   94% 36 2 0   86% 14 2   92%
src / local_deep_research / exporters / odt_exporter.py ODTExporter._add_footer   100% 2 0 0   100% 0 0   100%
src / local_deep_research / exporters / odt_exporter.py ODTExporter._sanitize_metadata   100% 2 0 0   100% 0 0   100%
src / local_deep_research / exporters / odt_exporter.py (no function)   87% 23 3 0   100% 0 0   87%
src / local_deep_research / exporters / pdf_exporter.py PDFExporter.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / exporters / pdf_exporter.py PDFExporter.format_name   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / pdf_exporter.py PDFExporter.file_extension   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / pdf_exporter.py PDFExporter.mimetype   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / pdf_exporter.py PDFExporter.export   100% 15 0 0   100% 4 0   100%
src / local_deep_research / exporters / pdf_exporter.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / exporters / quarto_exporter.py QuartoExporter.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / exporters / quarto_exporter.py QuartoExporter.format_name   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / quarto_exporter.py QuartoExporter.file_extension   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / quarto_exporter.py QuartoExporter.mimetype   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / quarto_exporter.py QuartoExporter.export   100% 24 0 0   100% 4 0   100%
src / local_deep_research / exporters / quarto_exporter.py (no function)   100% 18 0 0   100% 0 0   100%
src / local_deep_research / exporters / registry.py ExporterRegistry.register   100% 5 0 0   100% 0 0   100%
src / local_deep_research / exporters / registry.py ExporterRegistry.get_exporter   100% 9 0 0   100% 4 0   100%
src / local_deep_research / exporters / registry.py ExporterRegistry.get_available_formats   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / registry.py ExporterRegistry.is_format_supported   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / registry.py ExporterRegistry.clear   0% 2 2 0   100% 0 0   0%
src / local_deep_research / exporters / registry.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / exporters / ris_exporter.py RISExporter.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / exporters / ris_exporter.py RISExporter.format_name   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / ris_exporter.py RISExporter.file_extension   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / ris_exporter.py RISExporter.mimetype   100% 1 0 0   100% 0 0   100%
src / local_deep_research / exporters / ris_exporter.py RISExporter.export   100% 11 0 0   100% 2 0   100%
src / local_deep_research / exporters / ris_exporter.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / followup_research / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / followup_research / models.py FollowUpRequest.to_dict   100% 1 0 0   100% 0 0   100%
src / local_deep_research / followup_research / models.py FollowUpResponse.to_dict   100% 1 0 0   100% 0 0   100%
src / local_deep_research / followup_research / models.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / followup_research / routes.py prepare_followup   87% 23 3 0   100% 4 0   89%
src / local_deep_research / followup_research / routes.py start_followup   86% 57 8 0   42% 12 5   78%
src / local_deep_research / followup_research / routes.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / followup_research / service.py FollowUpResearchService.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / followup_research / service.py FollowUpResearchService.load_parent_research   100% 25 0 0   83% 6 1   97%
src / local_deep_research / followup_research / service.py FollowUpResearchService.prepare_research_context   100% 6 0 0   100% 2 0   100%
src / local_deep_research / followup_research / service.py FollowUpResearchService.perform_followup   100% 7 0 0   100% 2 0   100%
src / local_deep_research / followup_research / service.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / database_init.py init_database   100% 6 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / database_init.py verify_table_exists   100% 10 0 0   100% 2 0   100%
src / local_deep_research / library / download_management / database_init.py (no function)   75% 8 2 0   50% 2 1   70%
src / local_deep_research / library / download_management / failure_classifier.py BaseFailure.__init__   100% 5 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / failure_classifier.py BaseFailure.is_permanent   100% 1 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / failure_classifier.py BaseFailure.can_retry_now   100% 3 0 0   100% 2 0   100%
src / local_deep_research / library / download_management / failure_classifier.py BaseFailure.get_cooldown_remaining   100% 6 0 0   100% 4 0   100%
src / local_deep_research / library / download_management / failure_classifier.py BaseFailure.to_dict   100% 1 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / failure_classifier.py PermanentFailure.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / failure_classifier.py TemporaryFailure.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / failure_classifier.py RateLimitFailure.__init__   100% 7 0 0   100% 2 0   100%
src / local_deep_research / library / download_management / failure_classifier.py FailureClassifier.classify_failure   100% 27 0 0   100% 24 0   100%
src / local_deep_research / library / download_management / failure_classifier.py FailureClassifier.classify_from_exception   100% 3 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / failure_classifier.py (no function)   100% 20 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / filters / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / filters / resource_filter.py ResourceFilter.__init__   0% 3 3 0   100% 0 0   0%
src / local_deep_research / library / download_management / filters / resource_filter.py ResourceFilter.filter_downloadable_resources   100% 5 0 0   50% 2 1   86%
src / local_deep_research / library / download_management / filters / resource_filter.py ResourceFilter._apply_legacy_file_check   100% 1 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / filters / resource_filter.py ResourceFilter.get_filter_summary   0% 2 2 0   100% 0 0   0%
src / local_deep_research / library / download_management / filters / resource_filter.py ResourceFilter.get_skipped_resources_info   100% 7 0 0   100% 4 0   100%
src / local_deep_research / library / download_management / filters / resource_filter.py ResourceFilter.should_skip_resource   100% 2 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / filters / resource_filter.py ResourceFilter.get_retry_statistics   100% 1 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / filters / resource_filter.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / models / __init__.py ResourceDownloadStatus.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / library / download_management / models / __init__.py (no function)   100% 36 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / retry_manager.py ResourceFilterResult.__init__   100% 5 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / retry_manager.py FilterSummary.__init__   100% 6 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / retry_manager.py FilterSummary.add_result   100% 8 0 0   100% 6 0   100%
src / local_deep_research / library / download_management / retry_manager.py FilterSummary.to_dict   100% 1 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.__init__   100% 4 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.should_retry_resource   100% 2 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.record_attempt   100% 7 0 0   100% 2 0   100%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.filter_resources   100% 19 0 0   88% 8 1   96%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.get_filter_summary   100% 4 0 0   100% 2 0   100%
src / local_deep_research / library / download_management / retry_manager.py RetryManager._get_resource_status   100% 7 0 0   100% 6 0   100%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.get_retry_statistics   100% 2 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.reset_daily_retry_counters   100% 6 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.clear_old_permanent_failures   100% 1 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / retry_manager.py (no function)   100% 26 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker.__init__   100% 8 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker._get_session   0% 1 1 0   100% 0 0   0%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker.mark_failure   89% 36 4 0   75% 16 4   85%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker.mark_success   81% 16 3 0   62% 8 3   75%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker.can_retry   100% 15 0 0   100% 12 0   100%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker.get_resource_status   100% 5 0 0   100% 2 0   100%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker.get_failed_resources_count   100% 7 0 0   100% 2 0   100%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker.clear_permanent_failures   100% 16 0 0   100% 2 0   100%
src / local_deep_research / library / download_management / status_tracker.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / llm / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / llm / llm_registry.py LLMRegistry.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / llm / llm_registry.py LLMRegistry.register   100% 6 0 0   100% 2 0   100%
src / local_deep_research / llm / llm_registry.py LLMRegistry.unregister   100% 5 0 0   100% 2 0   100%
src / local_deep_research / llm / llm_registry.py LLMRegistry.get   100% 3 0 0   100% 0 0   100%
src / local_deep_research / llm / llm_registry.py LLMRegistry.is_registered   100% 3 0 0   100% 0 0   100%
src / local_deep_research / llm / llm_registry.py LLMRegistry.list_registered   100% 2 0 0   100% 0 0   100%
src / local_deep_research / llm / llm_registry.py LLMRegistry.clear   100% 3 0 0   100% 0 0   100%
src / local_deep_research / llm / llm_registry.py register_llm   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / llm_registry.py unregister_llm   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / llm_registry.py get_llm_from_registry   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / llm_registry.py is_llm_registered   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / llm_registry.py list_registered_llms   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / llm_registry.py clear_llm_registry   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / llm_registry.py (no function)   100% 19 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / auto_discovery.py ProviderInfo.__init__   100% 9 0 0   100% 2 0   100%
src / local_deep_research / llm / providers / auto_discovery.py ProviderInfo._generate_display_name   100% 6 0 0   100% 4 0   100%
src / local_deep_research / llm / providers / auto_discovery.py ProviderInfo.to_dict   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / auto_discovery.py ProviderDiscovery.__new__   100% 4 0 0   100% 2 0   100%
src / local_deep_research / llm / providers / auto_discovery.py ProviderDiscovery.discover_providers   80% 35 7 0   79% 14 3   80%
src / local_deep_research / llm / providers / auto_discovery.py ProviderDiscovery.get_provider_info   67% 3 1 0   50% 2 1   60%
src / local_deep_research / llm / providers / auto_discovery.py ProviderDiscovery.get_provider_options   86% 7 1 0   75% 4 1   82%
src / local_deep_research / llm / providers / auto_discovery.py ProviderDiscovery.get_provider_class   100% 2 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / auto_discovery.py discover_providers   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / auto_discovery.py get_discovered_provider_options   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / auto_discovery.py get_provider_class   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / auto_discovery.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / anthropic.py AnthropicProvider.create_llm   88% 16 2 0   100% 6 0   91%
src / local_deep_research / llm / providers / implementations / anthropic.py AnthropicProvider.is_available   100% 5 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / anthropic.py create_anthropic_llm   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / anthropic.py is_anthropic_available   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / anthropic.py register_anthropic_provider   100% 2 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / anthropic.py (no function)   100% 20 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / custom_openai_endpoint.py CustomOpenAIEndpointProvider.requires_auth_for_models   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / custom_openai_endpoint.py CustomOpenAIEndpointProvider.create_llm   100% 4 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / custom_openai_endpoint.py create_openai_endpoint_llm   0% 1 1 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / custom_openai_endpoint.py is_openai_endpoint_available   0% 1 1 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / custom_openai_endpoint.py register_custom_openai_endpoint_provider   100% 2 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / custom_openai_endpoint.py (no function)   100% 21 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / google.py GoogleProvider.requires_auth_for_models   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / google.py GoogleProvider.list_models_for_api   100% 25 0 0   100% 10 0   100%
src / local_deep_research / llm / providers / implementations / google.py create_google_llm   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / google.py is_google_available   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / google.py register_google_provider   100% 2 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / google.py (no function)   100% 18 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / ionos.py IONOSProvider.requires_auth_for_models   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / ionos.py create_ionos_llm   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / ionos.py is_ionos_available   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / ionos.py register_ionos_provider   100% 2 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / ionos.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / lmstudio.py LMStudioProvider.create_llm   100% 6 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / lmstudio.py LMStudioProvider.is_available   100% 9 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / lmstudio.py LMStudioProvider.requires_auth_for_models   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / lmstudio.py create_lmstudio_llm   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / lmstudio.py is_lmstudio_available   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / lmstudio.py register_lmstudio_provider   100% 2 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / lmstudio.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / ollama.py OllamaProvider._get_auth_headers   100% 6 0 0   100% 4 0   100%
src / local_deep_research / llm / providers / implementations / ollama.py OllamaProvider.list_models_for_api   100% 14 0 0   100% 4 0   100%
src / local_deep_research / llm / providers / implementations / ollama.py OllamaProvider.create_llm   86% 42 6 0   65% 20 7   79%
src / local_deep_research / llm / providers / implementations / ollama.py OllamaProvider.is_available   88% 25 3 0   100% 4 0   90%
src / local_deep_research / llm / providers / implementations / ollama.py create_ollama_llm   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / ollama.py is_ollama_available   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / ollama.py register_ollama_provider   100% 2 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / ollama.py (no function)   100% 26 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / openai.py OpenAIProvider.create_llm   100% 46 0 0   100% 16 0   100%
src / local_deep_research / llm / providers / implementations / openai.py OpenAIProvider.is_available   100% 5 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / openai.py create_openai_llm   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / openai.py is_openai_available   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / openai.py register_openai_provider   100% 2 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / openai.py (no function)   100% 20 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / openrouter.py OpenRouterProvider.requires_auth_for_models   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / openrouter.py create_openrouter_llm   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / openrouter.py is_openrouter_available   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / openrouter.py register_openrouter_provider   100% 2 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / openrouter.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / xai.py XAIProvider.requires_auth_for_models   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / xai.py create_xai_llm   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / xai.py is_xai_available   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / xai.py register_xai_provider   100% 2 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / xai.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / openai_base.py OpenAICompatibleProvider.create_llm   76% 38 9 0   93% 14 1   81%
src / local_deep_research / llm / providers / openai_base.py OpenAICompatibleProvider._create_llm_instance   93% 14 1 0   75% 4 1   89%
src / local_deep_research / llm / providers / openai_base.py OpenAICompatibleProvider.is_available   100% 7 0 0   100% 2 0   100%
src / local_deep_research / llm / providers / openai_base.py OpenAICompatibleProvider.requires_auth_for_models   100% 1 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / openai_base.py OpenAICompatibleProvider._get_base_url_for_models   40% 5 3 0   25% 4 1   33%
src / local_deep_research / llm / providers / openai_base.py OpenAICompatibleProvider.list_models_for_api   100% 21 0 0   90% 10 1   97%
src / local_deep_research / llm / providers / openai_base.py OpenAICompatibleProvider.list_models   100% 9 0 0   50% 2 1   91%
src / local_deep_research / llm / providers / openai_base.py (no function)   100% 24 0 0   100% 0 0   100%
src / local_deep_research / metrics / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / metrics / database.py MetricsDatabase.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / metrics / database.py MetricsDatabase.get_session   100% 18 0 0   100% 6 0   100%
src / local_deep_research / metrics / database.py get_metrics_db   100% 3 0 0   100% 2 0   100%
src / local_deep_research / metrics / database.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / cost_calculator.py CostCalculator.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / cost_calculator.py CostCalculator.__aenter__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / cost_calculator.py CostCalculator.__aexit__   100% 2 0 0   50% 2 1   75%
src / local_deep_research / metrics / pricing / cost_calculator.py CostCalculator.get_model_pricing   100% 11 0 0   83% 6 1   94%
src / local_deep_research / metrics / pricing / cost_calculator.py CostCalculator.calculate_cost   100% 7 0 0   100% 2 0   100%
src / local_deep_research / metrics / pricing / cost_calculator.py CostCalculator.calculate_batch_costs   70% 10 3 0   100% 2 0   75%
src / local_deep_research / metrics / pricing / cost_calculator.py CostCalculator.calculate_cost_sync   100% 14 0 0   100% 8 0   100%
src / local_deep_research / metrics / pricing / cost_calculator.py CostCalculator.get_research_cost_summary   100% 17 0 0   100% 4 0   100%
src / local_deep_research / metrics / pricing / cost_calculator.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_cache.py PricingCache.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_cache.py PricingCache._load_cache   0% 1 1 0   100% 0 0   0%
src / local_deep_research / metrics / pricing / pricing_cache.py PricingCache._save_cache   0% 1 1 0   100% 0 0   0%
src / local_deep_research / metrics / pricing / pricing_cache.py PricingCache._is_expired   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_cache.py PricingCache.get   100% 7 0 0   100% 4 0   100%
src / local_deep_research / metrics / pricing / pricing_cache.py PricingCache.set   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_cache.py PricingCache.get_model_pricing   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_cache.py PricingCache.set_model_pricing   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_cache.py PricingCache.get_all_pricing   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_cache.py PricingCache.set_all_pricing   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_cache.py PricingCache.clear   100% 2 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_cache.py PricingCache.clear_expired   100% 8 0 0   100% 8 0   100%
src / local_deep_research / metrics / pricing / pricing_cache.py PricingCache.get_cache_stats   100% 6 0 0   100% 4 0   100%
src / local_deep_research / metrics / pricing / pricing_cache.py (no function)   100% 17 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_fetcher.py PricingFetcher.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_fetcher.py PricingFetcher.__aenter__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_fetcher.py PricingFetcher.__aexit__   100% 2 0 0   50% 2 1   75%
src / local_deep_research / metrics / pricing / pricing_fetcher.py PricingFetcher._load_static_pricing   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_fetcher.py PricingFetcher.fetch_openai_pricing   50% 6 3 0   100% 0 0   50%
src / local_deep_research / metrics / pricing / pricing_fetcher.py PricingFetcher.fetch_anthropic_pricing   50% 6 3 0   100% 0 0   50%
src / local_deep_research / metrics / pricing / pricing_fetcher.py PricingFetcher.fetch_google_pricing   50% 6 3 0   100% 0 0   50%
src / local_deep_research / metrics / pricing / pricing_fetcher.py PricingFetcher.fetch_huggingface_pricing   0% 11 11 0   0% 4 0   0%
src / local_deep_research / metrics / pricing / pricing_fetcher.py PricingFetcher.get_model_pricing   68% 28 9 0   55% 22 4   62%
src / local_deep_research / metrics / pricing / pricing_fetcher.py PricingFetcher._get_models_by_provider   100% 11 0 0   100% 8 0   100%
src / local_deep_research / metrics / pricing / pricing_fetcher.py PricingFetcher.get_all_pricing   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / pricing / pricing_fetcher.py PricingFetcher.get_provider_from_model   93% 14 1 0   92% 12 1   92%
src / local_deep_research / metrics / pricing / pricing_fetcher.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / metrics / query_utils.py get_time_filter_condition   100% 12 0 0   100% 10 0   100%
src / local_deep_research / metrics / query_utils.py get_research_mode_condition   100% 5 0 0   100% 4 0   100%
src / local_deep_research / metrics / query_utils.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / metrics / search_tracker.py SearchTracker.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / search_tracker.py SearchTracker.record_search   89% 35 4 0   100% 10 0   91%
src / local_deep_research / metrics / search_tracker.py SearchTracker.get_search_metrics   100% 25 0 0   75% 12 3   92%
src / local_deep_research / metrics / search_tracker.py SearchTracker.get_research_search_metrics   77% 13 3 0   100% 0 0   77%
src / local_deep_research / metrics / search_tracker.py SearchTracker.get_search_time_series   76% 17 4 0   67% 6 2   74%
src / local_deep_research / metrics / search_tracker.py get_search_tracker   84% 19 3 0   83% 6 1   84%
src / local_deep_research / metrics / search_tracker.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / metrics / token_counter.py TokenCountingCallback.__init__   100% 21 0 0   100% 0 0   100%
src / local_deep_research / metrics / token_counter.py TokenCountingCallback.on_llm_start   70% 64 19 0   70% 44 3   70%
src / local_deep_research / metrics / token_counter.py TokenCountingCallback.on_llm_end   100% 42 0 0   84% 32 5   93%
src / local_deep_research / metrics / token_counter.py TokenCountingCallback.on_llm_error   83% 6 1 0   75% 4 1   80%
src / local_deep_research / metrics / token_counter.py TokenCountingCallback._get_context_overflow_fields   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / token_counter.py TokenCountingCallback._save_to_db   92% 51 4 0   88% 16 2   91%
src / local_deep_research / metrics / token_counter.py TokenCountingCallback.get_counts   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / token_counter.py TokenCounter.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / token_counter.py TokenCounter.thread_metrics_db   71% 7 2 0   100% 2 0   78%
src / local_deep_research / metrics / token_counter.py TokenCounter.create_callback   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / token_counter.py TokenCounter.get_research_metrics   31% 16 11 0   25% 4 1   30%
src / local_deep_research / metrics / token_counter.py TokenCounter.get_overall_metrics   100% 3 0 0   100% 0 0   100%
src / local_deep_research / metrics / token_counter.py TokenCounter._get_metrics_from_encrypted_db   72% 125 35 0   60% 60 14   68%
src / local_deep_research / metrics / token_counter.py TokenCounter._get_metrics_from_thread_db   86% 22 3 0   50% 8 4   77%
src / local_deep_research / metrics / token_counter.py TokenCounter._merge_metrics   100% 20 0 0   100% 6 0   100%
src / local_deep_research / metrics / token_counter.py TokenCounter._get_empty_metrics   100% 1 0 0   100% 0 0   100%
src / local_deep_research / metrics / token_counter.py TokenCounter.get_enhanced_metrics   72% 54 15 0   50% 12 6   68%
src / local_deep_research / metrics / token_counter.py TokenCounter.get_research_timeline_metrics   0% 37 37 0   0% 16 0   0%
src / local_deep_research / metrics / token_counter.py (no function)   100% 33 0 0   100% 0 0   100%
src / local_deep_research / news / __init__.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / news / api.py get_recommender   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / api.py _notify_scheduler_about_subscription_change   100% 19 0 0   88% 8 1   96%
src / local_deep_research / news / api.py get_news_feed   90% 128 13 0   83% 58 10   88%
src / local_deep_research / news / api.py get_subscription_history   86% 36 5 0   83% 6 1   86%
src / local_deep_research / news / api.py _format_time_ago   100% 20 0 0   100% 8 0   100%
src / local_deep_research / news / api.py get_subscription   100% 13 0 0   100% 2 0   100%
src / local_deep_research / news / api.py get_subscriptions   82% 17 3 0   100% 2 0   84%
src / local_deep_research / news / api.py update_subscription   85% 48 7 0   84% 32 5   85%
src / local_deep_research / news / api.py create_subscription   86% 22 3 0   100% 2 0   88%
src / local_deep_research / news / api.py delete_subscription   81% 16 3 0   100% 2 0   83%
src / local_deep_research / news / api.py get_votes_for_cards   86% 22 3 0   62% 8 1   80%
src / local_deep_research / news / api.py submit_feedback   90% 29 3 0   70% 10 1   85%
src / local_deep_research / news / api.py research_news_item   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / api.py save_news_preferences   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / api.py get_news_categories   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / api.py (no function)   100% 24 0 0   100% 0 0   100%
src / local_deep_research / news / core / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py CardVersion.__post_init__   100% 2 0 0   100% 2 0   100%
src / local_deep_research / news / core / base_card.py BaseCard.__post_init__   100% 4 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py BaseCard.set_progress_callback   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py BaseCard._update_progress   100% 2 0 0   100% 2 0   100%
src / local_deep_research / news / core / base_card.py BaseCard.save   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py BaseCard.add_version   0% 6 6 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py BaseCard.get_latest_version   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / core / base_card.py BaseCard.to_base_dict   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py BaseCard.get_card_type   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py BaseCard.to_dict   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py BaseCard._extract_headline   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py BaseCard._extract_summary   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py BaseCard._calculate_impact   100% 4 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py BaseCard._extract_topics   100% 5 0 0   100% 2 0   100%
src / local_deep_research / news / core / base_card.py BaseCard._extract_entities   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py NewsCard.__post_init__   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / core / base_card.py NewsCard.get_card_type   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py NewsCard.to_dict   100% 3 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py ResearchCard.get_card_type   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py ResearchCard.to_dict   100% 3 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py UpdateCard.__post_init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py UpdateCard.get_card_type   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py UpdateCard.to_dict   100% 3 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py OverviewCard.get_card_type   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py OverviewCard.to_dict   100% 3 0 0   100% 0 0   100%
src / local_deep_research / news / core / base_card.py (no function)   100% 83 0 0   100% 0 0   100%
src / local_deep_research / news / core / card_factory.py CardFactory.register_card_type   100% 4 0 0   100% 2 0   100%
src / local_deep_research / news / core / card_factory.py CardFactory.get_storage   67% 9 3 0   75% 4 1   69%
src / local_deep_research / news / core / card_factory.py CardFactory.create_card   100% 10 0 0   100% 2 0   100%
src / local_deep_research / news / core / card_factory.py CardFactory.load_card   100% 6 0 0   100% 2 0   100%
src / local_deep_research / news / core / card_factory.py CardFactory.get_user_cards   100% 11 0 0   100% 6 0   100%
src / local_deep_research / news / core / card_factory.py CardFactory.get_recent_cards   100% 8 0 0   75% 4 1   92%
src / local_deep_research / news / core / card_factory.py CardFactory.update_card   100% 4 0 0   100% 0 0   100%
src / local_deep_research / news / core / card_factory.py CardFactory.delete_card   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / core / card_factory.py CardFactory._reconstruct_card   100% 32 0 0   100% 14 0   100%
src / local_deep_research / news / core / card_factory.py CardFactory.create_news_card_from_analysis   100% 6 0 0   100% 2 0   100%
src / local_deep_research / news / core / card_factory.py create_card   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / card_factory.py load_card   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / card_factory.py (no function)   100% 30 0 0   100% 0 0   100%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.__init__   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.session   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.create   84% 19 3 0   50% 2 1   81%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.get   100% 5 0 0   100% 2 0   100%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.update   100% 19 0 0   100% 12 0   100%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.delete   100% 7 0 0   100% 2 0   100%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.list   100% 15 0 0   100% 10 0   100%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.get_recent   100% 8 0 0   100% 2 0   100%
src / local_deep_research / news / core / card_storage.py SQLCardStorage._card_to_dict   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.get_by_user   100% 3 0 0   100% 0 0   100%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.get_latest_version   86% 7 1 0   75% 4 1   82%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.add_version   100% 20 0 0   83% 6 1   96%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.update_latest_info   100% 13 0 0   67% 6 2   89%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.archive_card   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.pin_card   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / card_storage.py (no function)   100% 24 0 0   100% 0 0   100%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer.analyze_news   100% 19 0 0   100% 4 0   100%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer.extract_news_items   100% 19 0 0   100% 8 0   100%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer.generate_big_picture   100% 11 0 0   100% 2 0   100%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer.generate_watch_for   100% 22 0 0   90% 10 1   97%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer.generate_patterns   100% 17 0 0   100% 6 0   100%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer.extract_topics   100% 25 0 0   100% 12 0   100%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer._prepare_snippets   100% 13 0 0   100% 10 0   100%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer._validate_news_item   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer._count_categories   100% 5 0 0   100% 2 0   100%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer._summarize_impact   100% 4 0 0   100% 2 0   100%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer._empty_analysis   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / news_analyzer.py (no function)   100% 20 0 0   100% 0 0   100%
src / local_deep_research / news / core / relevance_service.py RelevanceService.calculate_relevance   100% 20 0 0   94% 18 1   97%
src / local_deep_research / news / core / relevance_service.py RelevanceService.calculate_trending_score   100% 5 0 0   100% 2 0   100%
src / local_deep_research / news / core / relevance_service.py RelevanceService.filter_trending   100% 7 0 0   100% 4 0   100%
src / local_deep_research / news / core / relevance_service.py RelevanceService.personalize_feed   100% 8 0 0   100% 4 0   100%
src / local_deep_research / news / core / relevance_service.py get_relevance_service   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / core / relevance_service.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / news / core / search_integration.py NewsSearchCallback.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / search_integration.py NewsSearchCallback.tracking_enabled   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / core / search_integration.py NewsSearchCallback.__call__   100% 6 0 0   100% 2 0   100%
src / local_deep_research / news / core / search_integration.py NewsSearchCallback._track_user_search   57% 7 3 0   100% 0 0   57%
src / local_deep_research / news / core / search_integration.py NewsSearchCallback._calculate_quality   100% 7 0 0   100% 2 0   100%
src / local_deep_research / news / core / search_integration.py create_search_wrapper   100% 5 0 0   100% 0 0   100%
src / local_deep_research / news / core / search_integration.py create_search_wrapper.wrapped_search   100% 11 0 0   100% 0 0   100%
src / local_deep_research / news / core / search_integration.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / news / core / storage.py BaseStorage.create   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py BaseStorage.get   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py BaseStorage.update   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py BaseStorage.delete   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py BaseStorage.list   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py BaseStorage.generate_id   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / storage.py CardStorage.get_by_user   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py CardStorage.get_latest_version   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py CardStorage.add_version   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py CardStorage.update_latest_info   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py CardStorage.archive_card   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py CardStorage.pin_card   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py SubscriptionStorage.get_active_subscriptions   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py SubscriptionStorage.get_due_subscriptions   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py SubscriptionStorage.update_refresh_time   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py SubscriptionStorage.increment_stats   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py SubscriptionStorage.pause_subscription   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py SubscriptionStorage.resume_subscription   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py SubscriptionStorage.expire_subscription   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py RatingStorage.get_user_rating   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py RatingStorage.upsert_rating   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py RatingStorage.get_ratings_summary   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py RatingStorage.get_user_ratings   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py PreferenceStorage.get_user_preferences   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py PreferenceStorage.upsert_preferences   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py PreferenceStorage.add_liked_item   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py PreferenceStorage.add_disliked_item   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py PreferenceStorage.update_preference_embedding   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py SearchHistoryStorage.record_search   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py SearchHistoryStorage.get_recent_searches   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py SearchHistoryStorage.link_to_subscription   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py SearchHistoryStorage.get_popular_searches   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py NewsItemStorage.get_recent   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py NewsItemStorage.store_batch   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py NewsItemStorage.update_votes   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py NewsItemStorage.get_by_category   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py NewsItemStorage.cleanup_old_items   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / storage.py (no function)   100% 84 0 0   100% 0 0   100%
src / local_deep_research / news / core / storage_manager.py StorageManager.__init__   100% 7 0 0   100% 0 0   100%
src / local_deep_research / news / core / storage_manager.py StorageManager._get_current_session   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / core / storage_manager.py StorageManager.cards   83% 6 1 0   75% 4 1   80%
src / local_deep_research / news / core / storage_manager.py StorageManager.subscriptions   83% 6 1 0   75% 4 1   80%
src / local_deep_research / news / core / storage_manager.py StorageManager.ratings   83% 6 1 0   75% 4 1   80%
src / local_deep_research / news / core / storage_manager.py StorageManager.preferences   83% 6 1 0   75% 4 1   80%
src / local_deep_research / news / core / storage_manager.py StorageManager.get_user_feed   100% 18 0 0   88% 8 1   96%
src / local_deep_research / news / core / storage_manager.py StorageManager.get_trending_news   100% 6 0 0   100% 0 0   100%
src / local_deep_research / news / core / storage_manager.py StorageManager.record_interaction   100% 25 0 0   92% 12 1   97%
src / local_deep_research / news / core / storage_manager.py StorageManager.get_user_subscriptions   100% 5 0 0   100% 0 0   100%
src / local_deep_research / news / core / storage_manager.py StorageManager.get_user_stats   100% 11 0 0   100% 0 0   100%
src / local_deep_research / news / core / storage_manager.py StorageManager.get_card   100% 5 0 0   100% 0 0   100%
src / local_deep_research / news / core / storage_manager.py StorageManager.get_card_interactions   100% 10 0 0   100% 2 0   100%
src / local_deep_research / news / core / storage_manager.py StorageManager.update_card   100% 5 0 0   100% 0 0   100%
src / local_deep_research / news / core / storage_manager.py StorageManager.cleanup_old_data   100% 18 0 0   83% 6 1   96%
src / local_deep_research / news / core / storage_manager.py get_storage_manager   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / core / storage_manager.py (no function)   100% 40 0 0   100% 0 0   100%
src / local_deep_research / news / core / utils.py get_local_date_string   100% 18 0 0   100% 6 0   100%
src / local_deep_research / news / core / utils.py generate_card_id   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / utils.py generate_subscription_id   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / utils.py utc_now   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / core / utils.py hours_ago   100% 4 0 0   100% 2 0   100%
src / local_deep_research / news / core / utils.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / news / exceptions.py NewsAPIException.__init__   100% 5 0 0   100% 0 0   100%
src / local_deep_research / news / exceptions.py NewsAPIException.to_dict   100% 4 0 0   100% 2 0   100%
src / local_deep_research / news / exceptions.py NewsFeatureDisabledException.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / exceptions.py InvalidLimitException.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / exceptions.py SubscriptionNotFoundException.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / exceptions.py SubscriptionCreationException.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / exceptions.py SubscriptionUpdateException.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / exceptions.py SubscriptionDeletionException.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / exceptions.py DatabaseAccessException.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / exceptions.py NewsFeedGenerationException.__init__   100% 4 0 0   100% 2 0   100%
src / local_deep_research / news / exceptions.py ResearchProcessingException.__init__   100% 4 0 0   100% 2 0   100%
src / local_deep_research / news / exceptions.py NotImplementedException.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / exceptions.py InvalidParameterException.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / exceptions.py SchedulerNotificationException.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / exceptions.py (no function)   100% 28 0 0   100% 0 0   100%
src / local_deep_research / news / flask_api.py safe_error_message   100% 8 0 0   100% 6 0   100%
src / local_deep_research / news / flask_api.py get_user_id   100% 5 0 0   100% 2 0   100%
src / local_deep_research / news / flask_api.py get_news_feed   0% 21 21 0   0% 4 0   0%
src / local_deep_research / news / flask_api.py create_subscription   0% 29 29 0   0% 4 0   0%
src / local_deep_research / news / flask_api.py vote_on_news   0% 18 18 0   0% 6 0   0%
src / local_deep_research / news / flask_api.py get_batch_feedback   0% 18 18 0   0% 6 0   0%
src / local_deep_research / news / flask_api.py submit_feedback   0% 19 19 0   0% 8 0   0%
src / local_deep_research / news / flask_api.py research_news_item   0% 7 7 0   100% 0 0   0%
src / local_deep_research / news / flask_api.py get_current_user_subscriptions   0% 10 10 0   0% 2 0   0%
src / local_deep_research / news / flask_api.py get_subscription   0% 9 9 0   0% 4 0   0%
src / local_deep_research / news / flask_api.py update_subscription   0% 22 22 0   0% 10 0   0%
src / local_deep_research / news / flask_api.py delete_subscription   0% 7 7 0   0% 2 0   0%
src / local_deep_research / news / flask_api.py run_subscription_now   0% 32 32 0   0% 12 0   0%
src / local_deep_research / news / flask_api.py get_subscription_history   0% 11 11 0   0% 2 0   0%
src / local_deep_research / news / flask_api.py save_preferences   0% 10 10 0   0% 2 0   0%
src / local_deep_research / news / flask_api.py get_categories   80% 5 1 0   100% 0 0   80%
src / local_deep_research / news / flask_api.py get_scheduler_status   0% 23 23 0   0% 4 0   0%
src / local_deep_research / news / flask_api.py start_scheduler   0% 12 12 0   0% 2 0   0%
src / local_deep_research / news / flask_api.py stop_scheduler   0% 12 12 0   0% 4 0   0%
src / local_deep_research / news / flask_api.py check_subscriptions_now   0% 20 20 0   0% 4 0   0%
src / local_deep_research / news / flask_api.py trigger_cleanup   0% 10 10 0   0% 2 0   0%
src / local_deep_research / news / flask_api.py get_active_users   0% 7 7 0   100% 0 0   0%
src / local_deep_research / news / flask_api.py scheduler_stats   0% 19 19 0   0% 8 0   0%
src / local_deep_research / news / flask_api.py check_overdue_subscriptions   0% 46 46 0   0% 10 0   0%
src / local_deep_research / news / flask_api.py get_folders   0% 8 8 0   100% 0 0   0%
src / local_deep_research / news / flask_api.py create_folder   0% 13 13 0   0% 4 0   0%
src / local_deep_research / news / flask_api.py update_folder   0% 10 10 0   0% 2 0   0%
src / local_deep_research / news / flask_api.py delete_folder   0% 10 10 0   0% 2 0   0%
src / local_deep_research / news / flask_api.py get_subscriptions_organized   0% 11 11 0   0% 2 0   0%
src / local_deep_research / news / flask_api.py update_subscription_folder   0% 25 25 0   0% 10 0   0%
src / local_deep_research / news / flask_api.py get_subscription_stats   0% 8 8 0   100% 0 0   0%
src / local_deep_research / news / flask_api.py bad_request   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / flask_api.py not_found   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / flask_api.py internal_error   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / flask_api.py get_search_history   0% 14 14 0   0% 2 0   0%
src / local_deep_research / news / flask_api.py add_search_history   0% 22 22 0   0% 4 0   0%
src / local_deep_research / news / flask_api.py clear_search_history   0% 15 15 0   0% 2 0   0%
src / local_deep_research / news / flask_api.py (no function)   100% 114 0 0   100% 0 0   100%
src / local_deep_research / news / folder_manager.py FolderManager.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / folder_manager.py FolderManager.get_user_folders   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / folder_manager.py FolderManager.create_folder   100% 5 0 0   100% 0 0   100%
src / local_deep_research / news / folder_manager.py FolderManager.update_folder   100% 9 0 0   100% 6 0   100%
src / local_deep_research / news / folder_manager.py FolderManager.delete_folder   100% 9 0 0   100% 4 0   100%
src / local_deep_research / news / folder_manager.py FolderManager.get_subscriptions_by_folder   100% 8 0 0   100% 2 0   100%
src / local_deep_research / news / folder_manager.py FolderManager.update_subscription   100% 20 0 0   100% 10 0   100%
src / local_deep_research / news / folder_manager.py FolderManager.delete_subscription   100% 6 0 0   100% 2 0   100%
src / local_deep_research / news / folder_manager.py FolderManager.get_subscription_stats   100% 7 0 0   100% 2 0   100%
src / local_deep_research / news / folder_manager.py FolderManager._sub_to_dict   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / folder_manager.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / news / preference_manager / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / news / preference_manager / base_preference.py BasePreferenceManager.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / preference_manager / base_preference.py BasePreferenceManager.get_preferences   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / preference_manager / base_preference.py BasePreferenceManager.update_preferences   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / preference_manager / base_preference.py BasePreferenceManager.add_interest   100% 7 0 0   100% 2 0   100%
src / local_deep_research / news / preference_manager / base_preference.py BasePreferenceManager.remove_interest   100% 6 0 0   100% 2 0   100%
src / local_deep_research / news / preference_manager / base_preference.py BasePreferenceManager.ignore_topic   100% 8 0 0   100% 4 0   100%
src / local_deep_research / news / preference_manager / base_preference.py BasePreferenceManager.boost_source   100% 7 0 0   100% 2 0   100%
src / local_deep_research / news / preference_manager / base_preference.py BasePreferenceManager.get_default_preferences   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / preference_manager / base_preference.py TopicRegistry.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / preference_manager / base_preference.py TopicRegistry.extract_topics   100% 5 0 0   100% 2 0   100%
src / local_deep_research / news / preference_manager / base_preference.py TopicRegistry.register_topic   100% 4 0 0   100% 2 0   100%
src / local_deep_research / news / preference_manager / base_preference.py TopicRegistry.get_trending_topics   100% 4 0 0   100% 0 0   100%
src / local_deep_research / news / preference_manager / base_preference.py TopicRegistry.get_topic_info   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / preference_manager / base_preference.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.__init__   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.session   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.create   100% 5 0 0   100% 0 0   100%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.get   100% 3 0 0   100% 0 0   100%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.update   100% 9 0 0   100% 6 0   100%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.delete   100% 7 0 0   100% 2 0   100%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.list   100% 6 0 0   100% 2 0   100%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.get_user_preferences   100% 3 0 0   100% 0 0   100%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.upsert_preferences   100% 11 0 0   83% 6 1   94%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.add_liked_item   100% 12 0 0   100% 6 0   100%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.add_disliked_item   100% 12 0 0   83% 6 1   94%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.update_preference_embedding   100% 8 0 0   100% 2 0   100%
src / local_deep_research / news / preference_manager / storage.py (no function)   100% 18 0 0   100% 0 0   100%
src / local_deep_research / news / rating_system / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / news / rating_system / base_rater.py BaseRatingSystem.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / rating_system / base_rater.py BaseRatingSystem.rate   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / rating_system / base_rater.py BaseRatingSystem.get_rating   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / rating_system / base_rater.py BaseRatingSystem.get_rating_type   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / rating_system / base_rater.py BaseRatingSystem.get_recent_ratings   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / rating_system / base_rater.py BaseRatingSystem.get_card_ratings   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / rating_system / base_rater.py BaseRatingSystem.remove_rating   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / rating_system / base_rater.py BaseRatingSystem._create_rating_record   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / rating_system / base_rater.py BaseRatingSystem._validate_rating_value   100% 2 0 0   100% 2 0   100%
src / local_deep_research / news / rating_system / base_rater.py QualityRatingSystem.get_rating_type   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / rating_system / base_rater.py QualityRatingSystem.rate   100% 6 0 0   100% 2 0   100%
src / local_deep_research / news / rating_system / base_rater.py QualityRatingSystem._validate_rating_value   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / rating_system / base_rater.py QualityRatingSystem.get_rating   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / rating_system / base_rater.py RelevanceRatingSystem.get_rating_type   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / rating_system / base_rater.py RelevanceRatingSystem.rate   100% 6 0 0   100% 2 0   100%
src / local_deep_research / news / rating_system / base_rater.py RelevanceRatingSystem._validate_rating_value   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / rating_system / base_rater.py RelevanceRatingSystem.get_rating   67% 3 1 0   50% 2 1   60%
src / local_deep_research / news / rating_system / base_rater.py (no function)   100% 37 0 0   100% 0 0   100%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.__init__   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.session   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.create   100% 5 0 0   100% 0 0   100%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.get   100% 5 0 0   100% 2 0   100%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.update   100% 10 0 0   100% 6 0   100%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.delete   100% 7 0 0   100% 2 0   100%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.list   92% 13 1 0   90% 10 1   91%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.get_user_rating   100% 4 0 0   100% 0 0   100%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.upsert_rating   100% 6 0 0   100% 2 0   100%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.get_ratings_summary   90% 10 1 0   50% 2 1   83%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.get_user_ratings   100% 4 0 0   100% 2 0   100%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage._get_rating_distribution   100% 5 0 0   100% 4 0   100%
src / local_deep_research / news / rating_system / storage.py (no function)   100% 19 0 0   100% 0 0   100%
src / local_deep_research / news / recommender / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender.__init__   100% 6 0 0   100% 0 0   100%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender.set_progress_callback   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender._update_progress   100% 2 0 0   100% 2 0   100%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender.generate_recommendations   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender._get_user_preferences   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender._get_user_ratings   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender._execute_search   100% 11 0 0   100% 4 0   100%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender._filter_by_preferences   100% 11 0 0   100% 10 0   100%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender._sort_by_relevance   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender._sort_by_relevance.calculate_score   100% 4 0 0   100% 0 0   100%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender.get_strategy_info   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / recommender / base_recommender.py (no function)   100% 18 0 0   100% 0 0   100%
src / local_deep_research / news / recommender / topic_based.py TopicBasedRecommender.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / recommender / topic_based.py TopicBasedRecommender.generate_recommendations   100% 27 0 0   100% 4 0   100%
src / local_deep_research / news / recommender / topic_based.py TopicBasedRecommender._get_trending_topics   100% 12 0 0   100% 10 0   100%
src / local_deep_research / news / recommender / topic_based.py TopicBasedRecommender._filter_topics_by_preferences   100% 15 0 0   100% 8 0   100%
src / local_deep_research / news / recommender / topic_based.py TopicBasedRecommender._generate_topic_query   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / recommender / topic_based.py TopicBasedRecommender._create_recommendation_card   100% 19 0 0   83% 6 1   96%
src / local_deep_research / news / recommender / topic_based.py SearchBasedRecommender.generate_recommendations   100% 3 0 0   100% 0 0   100%
src / local_deep_research / news / recommender / topic_based.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.__init__   100% 15 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription._calculate_next_refresh   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.should_refresh   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.is_due_for_refresh   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.generate_search_query   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.get_subscription_type   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.on_refresh_start   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.on_refresh_success   100% 4 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.on_refresh_error   100% 8 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.pause   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.resume   100% 4 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.update_interval   100% 7 0 0   100% 4 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.save   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.mark_refreshed   100% 7 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.to_dict   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / base_subscription.py (no function)   100% 25 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py DocumentSchedulerSettings.defaults   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.__new__   100% 5 0 0   75% 4 1   89%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.__init__   100% 11 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._load_default_config   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.initialize_with_settings   100% 6 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._get_setting   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._get_document_scheduler_settings   100% 25 0 0   100% 6 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.invalidate_user_settings_cache   100% 6 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.invalidate_all_settings_cache   100% 5 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.start   100% 12 0 0   100% 4 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.stop   100% 6 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.update_user_info   100% 20 0 0   100% 4 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.unregister_user   100% 12 0 0   100% 4 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._schedule_user_subscriptions   92% 49 4 0   94% 16 1   92%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._schedule_document_processing   91% 34 3 0   83% 6 1   90%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._process_user_documents   15% 119 101 0   9% 32 1   14%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.get_document_scheduler_status   100% 11 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.trigger_document_processing   100% 22 0 0   100% 6 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._check_user_overdue_subscriptions   100% 22 0 0   100% 6 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._check_subscription   100% 40 0 0   100% 8 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._trigger_subscription_research_sync   89% 38 4 0   75% 4 1   88%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._trigger_subscription_research_sync.SettingsContext.__init__   83% 6 1 0   75% 4 1   80%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._trigger_subscription_research_sync.SettingsContext.get_setting   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._store_research_result   80% 51 10 0   33% 12 4   71%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._store_research_result.make_serializable   78% 9 2 0   75% 8 2   76%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._run_cleanup_with_tracking   100% 5 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._cleanup_inactive_users   87% 15 2 0   100% 4 0   89%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._reload_config   87% 15 2 0   100% 8 0   91%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.get_status   100% 9 0 0   75% 4 1   92%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._estimate_memory_usage   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.get_user_sessions_summary   100% 5 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py get_news_scheduler   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / scheduler.py (no function)   100% 57 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.__init__   100% 10 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.query   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.get_subscription_type   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.generate_search_query   100% 9 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription._transform_to_news_query   100% 8 0 0   100% 6 0   100%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.evolve_query   100% 5 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.get_statistics   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.to_dict   100% 3 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscriptionFactory.from_user_search   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscriptionFactory.from_recommendation   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / search_subscription.py (no function)   100% 19 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.__init__   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.session   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.create   100% 7 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.get   100% 5 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.update   100% 12 0 0   100% 8 0   100%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.delete   100% 7 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.list   87% 15 2 0   70% 10 3   80%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.get_active_subscriptions   100% 6 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.get_due_subscriptions   100% 4 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.update_refresh_time   100% 8 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.increment_stats   100% 9 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.pause_subscription   100% 7 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.resume_subscription   100% 8 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.expire_subscription   100% 8 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / storage.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.__init__   100% 12 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.get_subscription_type   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.generate_search_query   100% 10 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.update_activity   100% 6 0 0   100% 4 0   100%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.evolve_topic   100% 5 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.add_related_topic   100% 3 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.merge_with   100% 5 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.should_auto_expire   100% 4 0 0   100% 2 0   100%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.get_statistics   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.to_dict   100% 3 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscriptionFactory.from_news_extraction   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscriptionFactory.from_user_interest   100% 2 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / topic_subscription.py (no function)   100% 21 0 0   100% 0 0   100%
src / local_deep_research / news / utils / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / news / utils / headline_generator.py generate_headline   100% 4 0 0   100% 2 0   100%
src / local_deep_research / news / utils / headline_generator.py _generate_with_llm   100% 18 0 0   100% 4 0   100%
src / local_deep_research / news / utils / headline_generator.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / news / utils / topic_generator.py generate_topics   100% 4 0 0   100% 2 0   100%
src / local_deep_research / news / utils / topic_generator.py _generate_with_llm   100% 26 0 0   80% 10 2   94%
src / local_deep_research / news / utils / topic_generator.py _validate_topics   100% 18 0 0   100% 12 0   100%
src / local_deep_research / news / utils / topic_generator.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / news / web.py create_news_blueprint   100% 14 0 0   100% 0 0   100%
src / local_deep_research / news / web.py create_news_blueprint.news_page   100% 3 0 0   100% 0 0   100%
src / local_deep_research / news / web.py create_news_blueprint.subscriptions_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / news / web.py create_news_blueprint.new_subscription_page   100% 8 0 0   100% 2 0   100%
src / local_deep_research / news / web.py create_news_blueprint.edit_subscription_page   100% 18 0 0   100% 4 0   100%
src / local_deep_research / news / web.py create_news_blueprint.health_check   100% 8 0 0   100% 0 0   100%
src / local_deep_research / news / web.py load_user_settings   100% 9 0 0   100% 2 0   100%
src / local_deep_research / news / web.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / notifications / __init__.py (no function)   100% 8 0 0   100% 0 0   100%
src / local_deep_research / notifications / exceptions.py (no function)   100% 8 0 0   100% 0 0   100%
src / local_deep_research / notifications / manager.py NotificationManager.__init__   100% 15 0 0   100% 2 0   100%
src / local_deep_research / notifications / manager.py NotificationManager._get_setting   100% 1 0 0   100% 0 0   100%
src / local_deep_research / notifications / manager.py NotificationManager.send_notification   100% 30 0 0   100% 8 0   100%
src / local_deep_research / notifications / manager.py NotificationManager.test_service   100% 1 0 0   100% 0 0   100%
src / local_deep_research / notifications / manager.py NotificationManager._should_notify   57% 7 3 0   100% 0 0   57%
src / local_deep_research / notifications / manager.py NotificationManager._log_notification   60% 5 2 0   100% 0 0   60%
src / local_deep_research / notifications / manager.py RateLimiter.__init__   100% 8 0 0   100% 0 0   100%
src / local_deep_research / notifications / manager.py RateLimiter.set_user_limits   100% 3 0 0   100% 0 0   100%
src / local_deep_research / notifications / manager.py RateLimiter.get_user_limits   100% 2 0 0   100% 0 0   100%
src / local_deep_research / notifications / manager.py RateLimiter.is_allowed   100% 19 0 0   100% 6 0   100%
src / local_deep_research / notifications / manager.py RateLimiter._clean_old_entries   67% 6 2 0   50% 4 2   60%
src / local_deep_research / notifications / manager.py RateLimiter.reset   100% 5 0 0   100% 2 0   100%
src / local_deep_research / notifications / manager.py RateLimiter._cleanup_inactive_users_if_needed   91% 22 2 0   79% 14 3   86%
src / local_deep_research / notifications / manager.py (no function)   100% 25 0 0   100% 0 0   100%
src / local_deep_research / notifications / queue_helpers.py send_queue_notification   100% 10 0 0   100% 2 0   100%
src / local_deep_research / notifications / queue_helpers.py send_queue_failed_notification   100% 12 0 0   75% 4 1   94%
src / local_deep_research / notifications / queue_helpers.py send_queue_failed_notification_from_session   100% 10 0 0   100% 2 0   100%
src / local_deep_research / notifications / queue_helpers.py send_research_completed_notification_from_session   100% 32 0 0   100% 6 0   100%
src / local_deep_research / notifications / queue_helpers.py send_research_failed_notification_from_session   96% 26 1 0   75% 4 1   93%
src / local_deep_research / notifications / queue_helpers.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / notifications / service.py NotificationService.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / notifications / service.py NotificationService._send_with_retry   100% 9 0 0   100% 2 0   100%
src / local_deep_research / notifications / service.py NotificationService.send   75% 20 5 0   62% 8 3   71%
src / local_deep_research / notifications / service.py NotificationService.send_event   100% 6 0 0   100% 0 0   100%
src / local_deep_research / notifications / service.py NotificationService.test_service   75% 16 4 0   50% 6 3   68%
src / local_deep_research / notifications / service.py NotificationService._validate_url   0% 5 5 0   0% 4 0   0%
src / local_deep_research / notifications / service.py NotificationService.get_service_type   100% 4 0 0   100% 4 0   100%
src / local_deep_research / notifications / service.py (no function)   100% 24 0 0   100% 0 0   100%
src / local_deep_research / notifications / templates.py NotificationTemplate._get_jinja_env   58% 12 5 0   75% 4 1   62%
src / local_deep_research / notifications / templates.py NotificationTemplate.format   80% 25 5 0   83% 6 1   81%
src / local_deep_research / notifications / templates.py NotificationTemplate._get_fallback_template   100% 2 0 0   100% 0 0   100%
src / local_deep_research / notifications / templates.py NotificationTemplate.get_required_context   67% 21 7 0   67% 6 2   67%
src / local_deep_research / notifications / templates.py (no function)   100% 26 0 0   100% 0 0   100%
src / local_deep_research / notifications / url_builder.py build_notification_url   86% 22 3 0   88% 8 1   87%
src / local_deep_research / notifications / url_builder.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / report_generator.py get_report_generator   100% 1 0 0   100% 0 0   100%
src / local_deep_research / report_generator.py IntegratedReportGenerator.__init__   100% 11 0 0   100% 4 0   100%
src / local_deep_research / report_generator.py IntegratedReportGenerator.generate_report   100% 4 0 0   100% 0 0   100%
src / local_deep_research / report_generator.py IntegratedReportGenerator._determine_report_structure   100% 26 0 0   94% 16 1   98%
src / local_deep_research / report_generator.py IntegratedReportGenerator._truncate_at_sentence_boundary   100% 12 0 0   100% 8 0   100%
src / local_deep_research / report_generator.py IntegratedReportGenerator._build_previous_context   100% 7 0 0   100% 4 0   100%
src / local_deep_research / report_generator.py IntegratedReportGenerator._research_and_generate_sections   100% 44 0 0   90% 20 2   97%
src / local_deep_research / report_generator.py IntegratedReportGenerator._generate_sections   100% 1 0 0   100% 0 0   100%
src / local_deep_research / report_generator.py IntegratedReportGenerator._format_final_report   100% 20 0 0   88% 8 1   96%
src / local_deep_research / report_generator.py IntegratedReportGenerator._generate_error_report   100% 2 0 0   100% 0 0   100%
src / local_deep_research / report_generator.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / research_library / __init__.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / routes / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / routes / delete_routes.py delete_document   100% 9 0 0   100% 2 0   100%
src / local_deep_research / research_library / deletion / routes / delete_routes.py delete_document_blob   80% 10 2 0   100% 2 0   83%
src / local_deep_research / research_library / deletion / routes / delete_routes.py get_document_deletion_preview   0% 9 9 0   0% 2 0   0%
src / local_deep_research / research_library / deletion / routes / delete_routes.py remove_document_from_collection   0% 9 9 0   0% 2 0   0%
src / local_deep_research / research_library / deletion / routes / delete_routes.py delete_collection   78% 9 2 0   100% 2 0   82%
src / local_deep_research / research_library / deletion / routes / delete_routes.py delete_collection_index   78% 9 2 0   100% 2 0   82%
src / local_deep_research / research_library / deletion / routes / delete_routes.py get_collection_deletion_preview   0% 9 9 0   0% 2 0   0%
src / local_deep_research / research_library / deletion / routes / delete_routes.py delete_documents_bulk   85% 13 2 0   100% 4 0   88%
src / local_deep_research / research_library / deletion / routes / delete_routes.py delete_documents_blobs_bulk   85% 13 2 0   100% 4 0   88%
src / local_deep_research / research_library / deletion / routes / delete_routes.py remove_documents_from_collection_bulk   77% 13 3 0   75% 4 1   76%
src / local_deep_research / research_library / deletion / routes / delete_routes.py get_bulk_deletion_preview   79% 14 3 0   75% 4 1   78%
src / local_deep_research / research_library / deletion / routes / delete_routes.py (no function)   100% 40 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / services / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / services / bulk_deletion.py BulkDeletionService.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / services / bulk_deletion.py BulkDeletionService.delete_documents   100% 12 0 0   100% 4 0   100%
src / local_deep_research / research_library / deletion / services / bulk_deletion.py BulkDeletionService.delete_blobs   92% 13 1 0   83% 6 1   89%
src / local_deep_research / research_library / deletion / services / bulk_deletion.py BulkDeletionService.remove_documents_from_collection   100% 13 0 0   100% 6 0   100%
src / local_deep_research / research_library / deletion / services / bulk_deletion.py BulkDeletionService.get_bulk_preview   83% 18 3 0   67% 6 2   79%
src / local_deep_research / research_library / deletion / services / bulk_deletion.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / services / collection_deletion.py CollectionDeletionService.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / services / collection_deletion.py CollectionDeletionService.delete_collection   100% 31 0 0   88% 8 1   97%
src / local_deep_research / research_library / deletion / services / collection_deletion.py CollectionDeletionService.delete_collection_index_only   84% 25 4 0   100% 2 0   85%
src / local_deep_research / research_library / deletion / services / collection_deletion.py CollectionDeletionService.get_deletion_preview   100% 10 0 0   100% 2 0   100%
src / local_deep_research / research_library / deletion / services / collection_deletion.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / services / document_deletion.py DocumentDeletionService.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / services / document_deletion.py DocumentDeletionService.delete_document   82% 34 6 0   83% 6 1   82%
src / local_deep_research / research_library / deletion / services / document_deletion.py DocumentDeletionService.delete_blob_only   57% 30 13 0   50% 10 1   55%
src / local_deep_research / research_library / deletion / services / document_deletion.py DocumentDeletionService.remove_from_collection   54% 35 16 0   62% 8 1   56%
src / local_deep_research / research_library / deletion / services / document_deletion.py DocumentDeletionService.get_deletion_preview   100% 8 0 0   100% 2 0   100%
src / local_deep_research / research_library / deletion / services / document_deletion.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / utils / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / utils / cascade_helper.py CascadeHelper.delete_document_chunks   100% 6 0 0   100% 2 0   100%
src / local_deep_research / research_library / deletion / utils / cascade_helper.py CascadeHelper.delete_collection_chunks   100% 3 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / utils / cascade_helper.py CascadeHelper.get_document_blob_size   100% 4 0 0   100% 2 0   100%
src / local_deep_research / research_library / deletion / utils / cascade_helper.py CascadeHelper.delete_document_blob   100% 7 0 0   100% 2 0   100%
src / local_deep_research / research_library / deletion / utils / cascade_helper.py CascadeHelper.delete_filesystem_file   85% 13 2 0   100% 6 0   89%
src / local_deep_research / research_library / deletion / utils / cascade_helper.py CascadeHelper.delete_faiss_index_files   84% 19 3 0   100% 6 0   88%
src / local_deep_research / research_library / deletion / utils / cascade_helper.py CascadeHelper.delete_rag_indices_for_collection   100% 10 0 0   75% 4 1   93%
src / local_deep_research / research_library / deletion / utils / cascade_helper.py CascadeHelper.update_download_tracker   79% 14 3 0   75% 4 1   78%
src / local_deep_research / research_library / deletion / utils / cascade_helper.py CascadeHelper.count_document_in_collections   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / utils / cascade_helper.py CascadeHelper.get_document_collections   100% 2 0 0   100% 0 0   100%
src / local_deep_research / research_library / deletion / utils / cascade_helper.py CascadeHelper.remove_from_faiss_index   0% 10 10 0   0% 4 0   0%
src / local_deep_research / research_library / deletion / utils / cascade_helper.py CascadeHelper.delete_document_completely   100% 6 0 0   100% 2 0   100%
src / local_deep_research / research_library / deletion / utils / cascade_helper.py (no function)   100% 31 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / __init__.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / arxiv.py ArxivDownloader.can_handle   60% 5 2 0   100% 0 0   60%
src / local_deep_research / research_library / downloaders / arxiv.py ArxivDownloader.download   67% 3 1 0   50% 2 1   60%
src / local_deep_research / research_library / downloaders / arxiv.py ArxivDownloader.download_with_result   76% 21 5 0   67% 12 2   73%
src / local_deep_research / research_library / downloaders / arxiv.py ArxivDownloader._download_pdf   100% 8 0 0   100% 2 0   100%
src / local_deep_research / research_library / downloaders / arxiv.py ArxivDownloader._download_text   0% 14 14 0   0% 8 0   0%
src / local_deep_research / research_library / downloaders / arxiv.py ArxivDownloader._extract_arxiv_id   100% 6 0 0   100% 4 0   100%
src / local_deep_research / research_library / downloaders / arxiv.py ArxivDownloader._fetch_from_arxiv_api   92% 37 3 0   55% 22 8   78%
src / local_deep_research / research_library / downloaders / arxiv.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader.__init__   100% 4 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader.close   100% 6 0 0   100% 2 0   100%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader.__del__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader.__enter__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader.__exit__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader.can_handle   0% 1 1 0   100% 0 0   0%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader.download   0% 1 1 0   100% 0 0   0%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader.download_pdf   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader.download_with_result   100% 4 0 0   100% 2 0   100%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader.download_text   0% 7 7 0   0% 2 0   0%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader._is_pdf_content   83% 6 1 0   75% 4 1   80%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader._download_pdf   91% 46 4 0   93% 14 1   92%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader.extract_text_from_pdf   89% 18 2 0   100% 4 0   91%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader._fetch_text_from_api   0% 1 1 0   100% 0 0   0%
src / local_deep_research / research_library / downloaders / base.py BaseDownloader.get_metadata   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / base.py (no function)   100% 35 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / biorxiv.py BioRxivDownloader.can_handle   71% 7 2 0   100% 2 0   78%
src / local_deep_research / research_library / downloaders / biorxiv.py BioRxivDownloader.download   67% 3 1 0   50% 2 1   60%
src / local_deep_research / research_library / downloaders / biorxiv.py BioRxivDownloader.download_with_result   46% 26 14 0   38% 16 4   43%
src / local_deep_research / research_library / downloaders / biorxiv.py BioRxivDownloader._download_pdf   67% 6 2 0   50% 2 1   62%
src / local_deep_research / research_library / downloaders / biorxiv.py BioRxivDownloader._download_text   0% 9 9 0   0% 6 0   0%
src / local_deep_research / research_library / downloaders / biorxiv.py BioRxivDownloader._convert_to_pdf_url   83% 6 1 0   50% 2 1   75%
src / local_deep_research / research_library / downloaders / biorxiv.py BioRxivDownloader._fetch_abstract_from_page   62% 24 9 0   50% 10 5   59%
src / local_deep_research / research_library / downloaders / biorxiv.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / direct_pdf.py DirectPDFDownloader.can_handle   62% 16 6 0   62% 8 3   62%
src / local_deep_research / research_library / downloaders / direct_pdf.py DirectPDFDownloader.download   25% 8 6 0   17% 6 1   21%
src / local_deep_research / research_library / downloaders / direct_pdf.py DirectPDFDownloader.download_with_result   42% 24 14 0   21% 14 1   34%
src / local_deep_research / research_library / downloaders / direct_pdf.py DirectPDFDownloader._download_pdf   100% 2 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / direct_pdf.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / generic.py GenericDownloader.can_handle   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / generic.py GenericDownloader.download   88% 8 1 0   67% 6 2   79%
src / local_deep_research / research_library / downloaders / generic.py GenericDownloader.download_with_result   73% 48 13 0   71% 24 3   72%
src / local_deep_research / research_library / downloaders / generic.py GenericDownloader._download_pdf   89% 19 2 0   100% 6 0   92%
src / local_deep_research / research_library / downloaders / generic.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / openalex.py OpenAlexDownloader.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / openalex.py OpenAlexDownloader.can_handle   60% 5 2 0   100% 0 0   60%
src / local_deep_research / research_library / downloaders / openalex.py OpenAlexDownloader.download   100% 2 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / openalex.py OpenAlexDownloader.download_with_result   79% 14 3 0   62% 8 3   73%
src / local_deep_research / research_library / downloaders / openalex.py OpenAlexDownloader._extract_work_id   100% 6 0 0   100% 2 0   100%
src / local_deep_research / research_library / downloaders / openalex.py OpenAlexDownloader._get_pdf_url   44% 45 25 0   44% 16 5   44%
src / local_deep_research / research_library / downloaders / openalex.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader.can_handle   86% 14 2 0   100% 8 0   91%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader.download   100% 4 0 0   100% 2 0   100%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader.download_with_result   100% 7 0 0   100% 4 0   100%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._download_pdf_content   90% 10 1 0   83% 6 1   88%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._download_pdf_with_result   39% 64 39 0   31% 36 5   36%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._download_text   71% 21 6 0   44% 16 5   59%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._fetch_text_from_europe_pmc   89% 28 3 0   64% 14 5   81%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._apply_rate_limit   100% 7 0 0   100% 2 0   100%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._download_pmc_direct   0% 9 9 0   0% 4 0   0%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._download_pubmed   0% 19 19 0   0% 10 0   0%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._download_europe_pmc   100% 5 0 0   100% 2 0   100%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._try_europe_pmc_api   88% 17 2 0   75% 8 2   84%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._get_pmc_id_from_pmid   91% 23 2 0   67% 12 2   83%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._download_via_europe_pmc   100% 6 0 0   100% 2 0   100%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._download_via_ncbi_pmc   89% 9 1 0   75% 4 1   85%
src / local_deep_research / research_library / downloaders / pubmed.py (no function)   100% 23 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / semantic_scholar.py SemanticScholarDownloader.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / semantic_scholar.py SemanticScholarDownloader.can_handle   60% 5 2 0   100% 0 0   60%
src / local_deep_research / research_library / downloaders / semantic_scholar.py SemanticScholarDownloader.download   100% 2 0 0   100% 0 0   100%
src / local_deep_research / research_library / downloaders / semantic_scholar.py SemanticScholarDownloader.download_with_result   29% 14 10 0   25% 8 2   27%
src / local_deep_research / research_library / downloaders / semantic_scholar.py SemanticScholarDownloader._extract_paper_id   100% 6 0 0   100% 2 0   100%
src / local_deep_research / research_library / downloaders / semantic_scholar.py SemanticScholarDownloader._get_pdf_url   68% 28 9 0   70% 10 3   68%
src / local_deep_research / research_library / downloaders / semantic_scholar.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / research_library / routes / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / research_library / routes / library_routes.py handle_web_api_exception   100% 4 0 0   100% 2 0   100%
src / local_deep_research / research_library / routes / library_routes.py is_downloadable_domain   81% 21 4 0   92% 12 1   85%
src / local_deep_research / research_library / routes / library_routes.py get_authenticated_user_password   100% 16 0 0   100% 4 0   100%
src / local_deep_research / research_library / routes / library_routes.py library_page   100% 16 0 0   100% 0 0   100%
src / local_deep_research / research_library / routes / library_routes.py document_details_page   83% 6 1 0   50% 2 1   75%
src / local_deep_research / research_library / routes / library_routes.py download_manager_page   52% 27 13 0   10% 10 1   41%
src / local_deep_research / research_library / routes / library_routes.py get_library_stats   100% 4 0 0   100% 0 0   100%
src / local_deep_research / research_library / routes / library_routes.py get_collections_list   100% 4 0 0   100% 0 0   100%
src / local_deep_research / research_library / routes / library_routes.py get_documents   100% 11 0 0   100% 0 0   100%
src / local_deep_research / research_library / routes / library_routes.py toggle_favorite   0% 4 4 0   100% 0 0   0%
src / local_deep_research / research_library / routes / library_routes.py delete_document   100% 4 0 0   100% 0 0   100%
src / local_deep_research / research_library / routes / library_routes.py get_pdf_url   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_library / routes / library_routes.py view_pdf_page   0% 17 17 0   0% 4 0   0%
src / local_deep_research / research_library / routes / library_routes.py serve_pdf_api   0% 1 1 0   100% 0 0   0%
src / local_deep_research / research_library / routes / library_routes.py view_text_page   0% 11 11 0   0% 4 0   0%
src / local_deep_research / research_library / routes / library_routes.py serve_text_api   0% 11 11 0   0% 4 0   0%
src / local_deep_research / research_library / routes / library_routes.py open_folder   0% 1 1 0   100% 0 0   0%
src / local_deep_research / research_library / routes / library_routes.py download_single_resource   50% 8 4 0   0% 2 0   40%
src / local_deep_research / research_library / routes / library_routes.py download_text_single   0% 12 12 0   0% 4 0   0%
src / local_deep_research / research_library / routes / library_routes.py download_all_text   0% 4 4 0   100% 0 0   0%
src / local_deep_research / research_library / routes / library_routes.py download_all_text.generate   0% 46 46 0   0% 14 0   0%
src / local_deep_research / research_library / routes / library_routes.py download_research_pdfs   57% 7 3 0   100% 0 0   57%
src / local_deep_research / research_library / routes / library_routes.py download_bulk   100% 10 0 0   100% 2 0   100%
src / local_deep_research / research_library / routes / library_routes.py download_bulk.generate   19% 79 64 0   8% 24 0   17%
src / local_deep_research / research_library / routes / library_routes.py get_research_list   0% 4 4 0   100% 0 0   0%
src / local_deep_research / research_library / routes / library_routes.py sync_library   100% 4 0 0   100% 0 0   100%
src / local_deep_research / research_library / routes / library_routes.py mark_for_redownload   100% 8 0 0   100% 2 0   100%
src / local_deep_research / research_library / routes / library_routes.py queue_all_undownloaded   0% 52 52 0   0% 16 0   0%
src / local_deep_research / research_library / routes / library_routes.py get_research_sources   33% 18 12 0   17% 6 1   29%
src / local_deep_research / research_library / routes / library_routes.py check_downloads   40% 15 9 0   17% 6 1   33%
src / local_deep_research / research_library / routes / library_routes.py download_source   25% 28 21 0   8% 12 1   20%
src / local_deep_research / research_library / routes / library_routes.py (no function)   100% 101 0 0   100% 0 0   100%
src / local_deep_research / research_library / routes / rag_routes.py _get_auto_index_executor   100% 4 0 0   100% 2 0   100%
src / local_deep_research / research_library / routes / rag_routes.py _shutdown_auto_index_executor   100% 3 0 0   100% 2 0   100%
src / local_deep_research / research_library / routes / rag_routes.py get_rag_service   97% 36 1 0   75% 12 3   92%
src / local_deep_research / research_library / routes / rag_routes.py get_supported_formats   100% 4 0 0   100% 0 0   100%
src / local_deep_research / research_library / routes / rag_routes.py embedding_settings_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / research_library / routes / rag_routes.py view_document_chunks   0% 17 17 0   0% 6 0   0%
src / local_deep_research / research_library / routes / rag_routes.py collections_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / research_library / routes / rag_routes.py collection_details_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / research_library / routes / rag_routes.py collection_upload_page   0% 5 5 0   0% 2 0   0%
src / local_deep_research / research_library / routes / rag_routes.py collection_create_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / research_library / routes / rag_routes.py get_current_settings   0% 14 14 0   0% 2 0   0%
src / local_deep_research / research_library / routes / rag_routes.py test_embedding   0% 26 26 0   0% 4 0   0%
src / local_deep_research / research_library / routes / rag_routes.py get_available_models   0% 18 18 0   0% 4 0   0%
src / local_deep_research / research_library / routes / rag_routes.py get_index_info   0% 15 15 0   0% 4 0   0%
src / local_deep_research / research_library / routes / rag_routes.py get_rag_stats   0% 10 10 0   0% 2 0   0%
src / local_deep_research / research_library / routes / rag_routes.py index_document   0% 17 17 0   0% 6 0   0%
src / local_deep_research / research_library / routes / rag_routes.py remove_document   0% 16 16 0   0% 6 0   0%
src / local_deep_research / research_library / routes / rag_routes.py index_research   0% 11 11 0   0% 2 0   0%
src / local_deep_research / research_library / routes / rag_routes.py index_all   0% 11 11 0   0% 2 0   0%
src / local_deep_research / research_library / routes / rag_routes.py index_all.generate   0% 33 33 0   0% 12 0   0%
src / local_deep_research / research_library / routes / rag_routes.py configure_rag   0% 35 35 0   0% 6 0   0%
src / local_deep_research / research_library / routes / rag_routes.py get_documents   0% 35 35 0   0% 6 0   0%
src / local_deep_research / research_library / routes / rag_routes.py index_local_library   0% 18 18 0   0% 6 0   0%
src / local_deep_research / research_library / routes / rag_routes.py index_local_library.generate   0% 36 36 0   0% 12 0   0%
src / local_deep_research / research_library / routes / rag_routes.py get_collections   80% 15 3 0   75% 4 1   79%
src / local_deep_research / research_library / routes / rag_routes.py create_collection   89% 19 2 0   100% 4 0   91%
src / local_deep_research / research_library / routes / rag_routes.py update_collection   90% 21 2 0   88% 8 1   90%
src / local_deep_research / research_library / routes / rag_routes.py delete_collection   83% 12 2 0   100% 2 0   86%
src / local_deep_research / research_library / routes / rag_routes.py upload_to_collection   0% 111 111 0   0% 38 0   0%
src / local_deep_research / research_library / routes / rag_routes.py get_collection_documents   0% 34 34 0   0% 12 0   0%
src / local_deep_research / research_library / routes / rag_routes.py index_collection   0% 18 18 0   0% 2 0   0%
src / local_deep_research / research_library / routes / rag_routes.py index_collection.generate   0% 81 81 0   0% 24 0   0%
src / local_deep_research / research_library / routes / rag_routes.py index_collection.generate.index_in_thread   0% 5 5 0   100% 0 0   0%
src / local_deep_research / research_library / routes / rag_routes.py _get_rag_service_for_thread   79% 53 11 0   50% 8 4   75%
src / local_deep_research / research_library / routes / rag_routes.py trigger_auto_index   100% 17 0 0   100% 4 0   100%
src / local_deep_research / research_library / routes / rag_routes.py _auto_index_documents_worker   100% 16 0 0   83% 6 1   95%
src / local_deep_research / research_library / routes / rag_routes.py _background_index_worker   0% 52 52 0   0% 16 0   0%
src / local_deep_research / research_library / routes / rag_routes.py _update_task_status   0% 20 20 0   0% 14 0   0%
src / local_deep_research / research_library / routes / rag_routes.py _is_task_cancelled   0% 7 7 0   100% 0 0   0%
src / local_deep_research / research_library / routes / rag_routes.py start_background_index   0% 27 27 0   0% 6 0   0%
src / local_deep_research / research_library / routes / rag_routes.py get_index_status   0% 19 19 0   0% 6 0   0%
src / local_deep_research / research_library / routes / rag_routes.py cancel_indexing   0% 23 23 0   0% 6 0   0%
src / local_deep_research / research_library / routes / rag_routes.py (no function)   100% 126 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / download_service.py DownloadService.__init__   100% 19 0 0   100% 2 0   100%
src / local_deep_research / research_library / services / download_service.py DownloadService.close   83% 12 2 0   83% 6 1   83%
src / local_deep_research / research_library / services / download_service.py DownloadService.__enter__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / download_service.py DownloadService.__exit__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / download_service.py DownloadService._setup_directories   100% 3 0 0   100% 2 0   100%
src / local_deep_research / research_library / services / download_service.py DownloadService._normalize_url   100% 8 0 0   100% 2 0   100%
src / local_deep_research / research_library / services / download_service.py DownloadService._get_url_hash   100% 2 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / download_service.py DownloadService.is_already_downloaded   80% 10 2 0   75% 4 1   79%
src / local_deep_research / research_library / services / download_service.py DownloadService.get_text_content   100% 19 0 0   88% 8 1   96%
src / local_deep_research / research_library / services / download_service.py DownloadService.queue_research_downloads   83% 23 4 0   70% 10 3   79%
src / local_deep_research / research_library / services / download_service.py DownloadService._is_downloadable   100% 5 0 0   100% 2 0   100%
src / local_deep_research / research_library / services / download_service.py DownloadService.download_resource   11% 44 39 0   5% 20 1   9%
src / local_deep_research / research_library / services / download_service.py DownloadService._download_pdf   38% 91 56 0   41% 22 1   39%
src / local_deep_research / research_library / services / download_service.py DownloadService._extract_text_from_pdf   100% 23 0 0   100% 12 0   100%
src / local_deep_research / research_library / services / download_service.py DownloadService.download_as_text   41% 17 10 0   30% 10 1   37%
src / local_deep_research / research_library / services / download_service.py DownloadService._try_existing_text   62% 8 3 0   50% 4 2   58%
src / local_deep_research / research_library / services / download_service.py DownloadService._try_legacy_text_file   0% 8 8 0   0% 2 0   0%
src / local_deep_research / research_library / services / download_service.py DownloadService._try_existing_pdf_extraction   32% 19 13 0   50% 6 1   36%
src / local_deep_research / research_library / services / download_service.py DownloadService._try_api_text_extraction   0% 22 22 0   0% 8 0   0%
src / local_deep_research / research_library / services / download_service.py DownloadService._fallback_pdf_extraction   48% 31 16 0   50% 6 1   49%
src / local_deep_research / research_library / services / download_service.py DownloadService._get_downloader   100% 4 0 0   100% 4 0   100%
src / local_deep_research / research_library / services / download_service.py DownloadService._download_generic   0% 12 12 0   0% 2 0   0%
src / local_deep_research / research_library / services / download_service.py DownloadService._download_arxiv   0% 8 8 0   0% 2 0   0%
src / local_deep_research / research_library / services / download_service.py DownloadService._try_europe_pmc   0% 22 22 0   0% 12 0   0%
src / local_deep_research / research_library / services / download_service.py DownloadService._download_pubmed   0% 98 98 0   0% 42 0   0%
src / local_deep_research / research_library / services / download_service.py DownloadService._download_semantic_scholar   0% 1 1 0   100% 0 0   0%
src / local_deep_research / research_library / services / download_service.py DownloadService._download_biorxiv   0% 8 8 0   100% 0 0   0%
src / local_deep_research / research_library / services / download_service.py DownloadService._download_medrxiv   0% 1 1 0   100% 0 0   0%
src / local_deep_research / research_library / services / download_service.py DownloadService._save_text_with_db   0% 39 39 0   0% 10 0   0%
src / local_deep_research / research_library / services / download_service.py DownloadService._create_text_document_record   0% 16 16 0   0% 2 0   0%
src / local_deep_research / research_library / services / download_service.py DownloadService._record_failed_text_extraction   70% 10 3 0   50% 2 1   67%
src / local_deep_research / research_library / services / download_service.py (no function)   100% 57 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.__init__   100% 27 0 0   100% 2 0   100%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.close   0% 10 10 0   0% 6 0   0%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.__enter__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.__exit__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.db_password   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.db_password   0% 5 5 0   0% 4 0   0%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService._get_index_hash   100% 2 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService._get_index_path   100% 3 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService._deduplicate_chunks   100% 9 0 0   100% 4 0   100%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService._get_or_create_rag_index   43% 14 8 0   50% 2 1   44%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.load_or_create_faiss_index   37% 59 37 0   39% 18 5   38%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.get_current_index_info   0% 16 16 0   0% 4 0   0%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.index_document   83% 72 12 0   68% 22 7   80%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.index_all_documents   0% 23 23 0   0% 12 0   0%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.remove_document_from_rag   24% 17 13 0   50% 2 1   26%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.index_documents_batch   65% 26 9 0   62% 8 3   65%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.get_rag_stats   80% 15 3 0   50% 4 2   74%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.index_local_file   61% 51 20 0   45% 22 6   56%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.index_user_document   87% 39 5 0   81% 16 3   85%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.remove_collection_from_index   68% 25 8 0   50% 8 4   64%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.search_library   100% 0 0 2   100% 0 0   100%
src / local_deep_research / research_library / services / library_rag_service.py (no function)   100% 41 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / library_service.py LibraryService.__init__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / research_library / services / library_service.py LibraryService._has_blob_in_db   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / library_service.py LibraryService._is_arxiv_url   60% 5 2 0   100% 0 0   60%
src / local_deep_research / research_library / services / library_service.py LibraryService._is_pubmed_url   71% 14 4 0   75% 8 2   73%
src / local_deep_research / research_library / services / library_service.py LibraryService._apply_domain_filter   29% 7 5 0   17% 6 1   23%
src / local_deep_research / research_library / services / library_service.py LibraryService._apply_search_filter   100% 2 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / library_service.py LibraryService.get_library_stats   100% 12 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / library_service.py LibraryService.get_documents   57% 37 16 0   40% 20 8   51%
src / local_deep_research / research_library / services / library_service.py LibraryService.get_all_collections   100% 8 0 0   100% 2 0   100%
src / local_deep_research / research_library / services / library_service.py LibraryService.get_research_list_with_stats   100% 11 0 0   100% 2 0   100%
src / local_deep_research / research_library / services / library_service.py LibraryService.get_document_by_id   29% 14 10 0   25% 4 1   28%
src / local_deep_research / research_library / services / library_service.py LibraryService.toggle_favorite   100% 7 0 0   100% 2 0   100%
src / local_deep_research / research_library / services / library_service.py LibraryService.delete_document   18% 22 18 0   10% 10 1   16%
src / local_deep_research / research_library / services / library_service.py LibraryService.open_file_location   24% 17 13 0   12% 8 1   20%
src / local_deep_research / research_library / services / library_service.py LibraryService.get_unique_domains   100% 4 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / library_service.py LibraryService._extract_domain   60% 5 2 0   100% 0 0   60%
src / local_deep_research / research_library / services / library_service.py LibraryService._get_url_hash   100% 5 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / library_service.py LibraryService._get_storage_path   100% 3 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / library_service.py LibraryService.sync_library_with_filesystem   32% 22 15 0   17% 6 1   29%
src / local_deep_research / research_library / services / library_service.py LibraryService.mark_for_redownload   100% 14 0 0   67% 6 2   90%
src / local_deep_research / research_library / services / library_service.py (no function)   100% 34 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / pdf_storage_manager.py PDFStorageManager.__init__   100% 6 0 0   100% 2 0   100%
src / local_deep_research / research_library / services / pdf_storage_manager.py PDFStorageManager.save_pdf   95% 22 1 0   88% 8 1   93%
src / local_deep_research / research_library / services / pdf_storage_manager.py PDFStorageManager.load_pdf   100% 10 0 0   100% 4 0   100%
src / local_deep_research / research_library / services / pdf_storage_manager.py PDFStorageManager.has_pdf   36% 11 7 0   25% 8 0   32%
src / local_deep_research / research_library / services / pdf_storage_manager.py PDFStorageManager._infer_storage_mode   100% 5 0 0   100% 4 0   100%
src / local_deep_research / research_library / services / pdf_storage_manager.py PDFStorageManager._save_to_filesystem   91% 11 1 0   75% 4 1   87%
src / local_deep_research / research_library / services / pdf_storage_manager.py PDFStorageManager._save_to_database   100% 9 0 0   100% 2 0   100%
src / local_deep_research / research_library / services / pdf_storage_manager.py PDFStorageManager._load_from_filesystem   55% 11 5 0   75% 4 1   60%
src / local_deep_research / research_library / services / pdf_storage_manager.py PDFStorageManager._load_from_database   100% 6 0 0   100% 2 0   100%
src / local_deep_research / research_library / services / pdf_storage_manager.py PDFStorageManager._generate_filename   86% 14 2 0   75% 8 2   82%
src / local_deep_research / research_library / services / pdf_storage_manager.py PDFStorageManager.delete_pdf   86% 22 3 0   70% 10 3   81%
src / local_deep_research / research_library / services / pdf_storage_manager.py PDFStorageManager.upgrade_to_pdf   76% 21 5 0   83% 6 1   78%
src / local_deep_research / research_library / services / pdf_storage_manager.py (no function)   100% 23 0 0   100% 0 0   100%
src / local_deep_research / research_library / utils / __init__.py get_url_hash   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_library / utils / __init__.py get_library_storage_path   0% 10 10 0   0% 2 0   0%
src / local_deep_research / research_library / utils / __init__.py open_file_location   61% 18 7 0   38% 8 3   54%
src / local_deep_research / research_library / utils / __init__.py get_relative_library_path   0% 5 5 0   100% 0 0   0%
src / local_deep_research / research_library / utils / __init__.py get_absolute_library_path   0% 2 2 0   100% 0 0   0%
src / local_deep_research / research_library / utils / __init__.py get_absolute_path_from_settings   0% 6 6 0   0% 2 0   0%
src / local_deep_research / research_library / utils / __init__.py handle_api_error   100% 2 0 0   100% 0 0   100%
src / local_deep_research / research_library / utils / __init__.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / research_scheduler / document_scheduler.py DocumentSchedulerUtil.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_scheduler / document_scheduler.py DocumentSchedulerUtil.get_status   100% 6 0 0   100% 0 0   100%
src / local_deep_research / research_scheduler / document_scheduler.py DocumentSchedulerUtil.trigger_manual_run   100% 9 0 0   100% 2 0   100%
src / local_deep_research / research_scheduler / document_scheduler.py get_document_scheduler   100% 3 0 0   100% 2 0   100%
src / local_deep_research / research_scheduler / document_scheduler.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / research_scheduler / routes.py get_current_username   100% 1 0 0   100% 0 0   100%
src / local_deep_research / research_scheduler / routes.py get_scheduler_status   90% 10 1 0   50% 2 1   83%
src / local_deep_research / research_scheduler / routes.py trigger_manual_run   92% 12 1 0   75% 4 1   88%
src / local_deep_research / research_scheduler / routes.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / search_system.py AdvancedSearchSystem.__init__   100% 44 0 0   94% 18 1   98%
src / local_deep_research / search_system.py AdvancedSearchSystem._progress_callback   100% 3 0 0   50% 2 1   80%
src / local_deep_research / search_system.py AdvancedSearchSystem.set_progress_callback   100% 3 0 0   50% 2 1   80%
src / local_deep_research / search_system.py AdvancedSearchSystem.analyze_topic   100% 5 0 0   50% 2 1   86%
src / local_deep_research / search_system.py AdvancedSearchSystem._perform_search   100% 29 0 0   100% 6 0   100%
src / local_deep_research / search_system.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / search_system_factory.py _get_setting   100% 6 0 0   100% 4 0   100%
src / local_deep_research / search_system_factory.py create_strategy   92% 133 10 0   90% 78 8   91%
src / local_deep_research / search_system_factory.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / security / __init__.py (no function)   63% 30 11 0   100% 0 0   63%
src / local_deep_research / security / data_sanitizer.py DataSanitizer.sanitize   100% 8 0 0   100% 6 0   100%
src / local_deep_research / security / data_sanitizer.py DataSanitizer.redact   100% 8 0 0   100% 6 0   100%
src / local_deep_research / security / data_sanitizer.py sanitize_data   100% 1 0 0   100% 0 0   100%
src / local_deep_research / security / data_sanitizer.py redact_data   100% 1 0 0   100% 0 0   100%
src / local_deep_research / security / data_sanitizer.py filter_research_metadata   100% 9 0 0   100% 4 0   100%
src / local_deep_research / security / data_sanitizer.py strip_settings_snapshot   89% 9 1 0   75% 4 1   85%
src / local_deep_research / security / data_sanitizer.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / security / file_integrity / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / security / file_integrity / base_verifier.py BaseFileVerifier.should_verify   0% 1 1 0   100% 0 0   0%
src / local_deep_research / security / file_integrity / base_verifier.py BaseFileVerifier.get_file_type   0% 1 1 0   100% 0 0   0%
src / local_deep_research / security / file_integrity / base_verifier.py BaseFileVerifier.allows_modifications   0% 1 1 0   100% 0 0   0%
src / local_deep_research / security / file_integrity / base_verifier.py BaseFileVerifier.calculate_checksum   100% 5 0 0   100% 2 0   100%
src / local_deep_research / security / file_integrity / base_verifier.py BaseFileVerifier.get_algorithm   100% 1 0 0   100% 0 0   100%
src / local_deep_research / security / file_integrity / base_verifier.py (no function)   100% 17 0 0   100% 0 0   100%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager.__init__   73% 11 3 0   75% 4 1   73%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._normalize_path   100% 1 0 0   100% 0 0   100%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager.register_verifier   100% 2 0 0   100% 0 0   100%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager.record_file   100% 23 0 0   100% 6 0   100%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager.verify_file   21% 24 19 0   12% 8 3   19%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager.update_checksum   0% 17 17 0   0% 6 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager.get_file_stats   0% 5 5 0   0% 2 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager.get_failure_history   0% 8 8 0   0% 4 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._get_verifier_for_file   100% 4 0 0   75% 4 1   88%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._needs_verification   88% 8 1 0   83% 6 1   86%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._do_verification   100% 14 0 0   100% 6 0   100%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._update_stats   100% 8 0 0   100% 2 0   100%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._log_failure   81% 16 3 0   50% 6 3   73%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._cleanup_old_failures   100% 6 0 0   100% 4 0   100%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._check_global_cleanup_needed   0% 9 9 0   0% 4 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager.cleanup_all_old_failures   36% 11 7 0   25% 4 1   33%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager.get_total_failure_count   0% 2 2 0   100% 0 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py (no function)   91% 32 3 0   100% 0 0   91%
src / local_deep_research / security / file_integrity / verifiers / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / security / file_integrity / verifiers / faiss_verifier.py FAISSIndexVerifier.should_verify   100% 1 0 0   100% 0 0   100%
src / local_deep_research / security / file_integrity / verifiers / faiss_verifier.py FAISSIndexVerifier.get_file_type   100% 1 0 0   100% 0 0   100%
src / local_deep_research / security / file_integrity / verifiers / faiss_verifier.py FAISSIndexVerifier.allows_modifications   100% 1 0 0   100% 0 0   100%
src / local_deep_research / security / file_integrity / verifiers / faiss_verifier.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / security / file_upload_validator.py FileUploadValidator.validate_file_size   100% 12 0 0   100% 8 0   100%
src / local_deep_research / security / file_upload_validator.py FileUploadValidator.validate_file_count   100% 5 0 0   100% 4 0   100%
src / local_deep_research / security / file_upload_validator.py FileUploadValidator.validate_mime_type   100% 5 0 0   100% 4 0   100%
src / local_deep_research / security / file_upload_validator.py FileUploadValidator.validate_pdf_structure   100% 11 0 0   100% 2 0   100%
src / local_deep_research / security / file_upload_validator.py FileUploadValidator.validate_upload   100% 10 0 0   100% 6 0   100%
src / local_deep_research / security / file_upload_validator.py (no function)   100% 19 0 0   100% 0 0   100%
src / local_deep_research / security / file_write_verifier.py _sanitize_sensitive_data   100% 11 0 0   100% 8 0   100%
src / local_deep_research / security / file_write_verifier.py write_file_verified   100% 15 0 0   100% 4 0   100%
src / local_deep_research / security / file_write_verifier.py write_json_verified   100% 5 0 0   100% 2 0   100%
src / local_deep_research / security / file_write_verifier.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / security / ip_ranges.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / security / module_whitelist.py validate_module_import   100% 13 0 0   100% 8 0   100%
src / local_deep_research / security / module_whitelist.py get_safe_module_class   100% 17 0 0   100% 4 0   100%
src / local_deep_research / security / module_whitelist.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / security / network_utils.py is_private_ip   100% 9 0 0   100% 4 0   100%
src / local_deep_research / security / network_utils.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / security / notification_validator.py NotificationURLValidator._is_private_ip   100% 7 0 0   100% 2 0   100%
src / local_deep_research / security / notification_validator.py NotificationURLValidator.validate_service_url   87% 23 3 0   93% 14 1   89%
src / local_deep_research / security / notification_validator.py NotificationURLValidator.validate_service_url_strict   100% 4 0 0   100% 2 0   100%
src / local_deep_research / security / notification_validator.py NotificationURLValidator.validate_multiple_urls   100% 10 0 0   100% 8 0   100%
src / local_deep_research / security / notification_validator.py (no function)   100% 19 0 0   100% 0 0   100%
src / local_deep_research / security / path_validator.py PathValidator.validate_safe_path   100% 16 0 0   100% 6 0   100%
src / local_deep_research / security / path_validator.py PathValidator.validate_local_filesystem_path   64% 45 16 0   65% 34 6   65%
src / local_deep_research / security / path_validator.py PathValidator.sanitize_for_filesystem_ops   86% 7 1 0   75% 4 1   82%
src / local_deep_research / security / path_validator.py PathValidator.validate_model_path   92% 12 1 0   88% 8 1   90%
src / local_deep_research / security / path_validator.py PathValidator.validate_data_path   75% 4 1 0   50% 2 1   67%
src / local_deep_research / security / path_validator.py PathValidator.validate_config_path   76% 25 6 0   72% 18 1   74%
src / local_deep_research / security / path_validator.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / security / rate_limiter.py get_rate_limiter   100% 3 0 0   100% 2 0   100%
src / local_deep_research / security / rate_limiter.py init_rate_limiter   100% 4 0 0   100% 0 0   100%
src / local_deep_research / security / rate_limiter.py init_rate_limiter.get_user_identifier   100% 4 0 0   100% 2 0   100%
src / local_deep_research / security / rate_limiter.py upload_rate_limit   60% 15 6 0   50% 4 0   58%
src / local_deep_research / security / rate_limiter.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / security / safe_requests.py safe_get   100% 22 0 0   90% 10 1   97%
src / local_deep_research / security / safe_requests.py safe_post   100% 22 0 0   70% 10 3   91%
src / local_deep_research / security / safe_requests.py SafeSession.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / security / safe_requests.py SafeSession.request   100% 5 0 0   100% 4 0   100%
src / local_deep_research / security / safe_requests.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / security / security_headers.py SecurityHeaders.__init__   100% 2 0 0   100% 2 0   100%
src / local_deep_research / security / security_headers.py SecurityHeaders.init_app   93% 14 1 0   50% 2 1   88%
src / local_deep_research / security / security_headers.py SecurityHeaders.get_csp_policy   100% 2 0 0   100% 0 0   100%
src / local_deep_research / security / security_headers.py SecurityHeaders.get_permissions_policy   100% 1 0 0   100% 0 0   100%
src / local_deep_research / security / security_headers.py SecurityHeaders.add_security_headers   100% 20 0 0   100% 6 0   100%
src / local_deep_research / security / security_headers.py SecurityHeaders._is_api_route   100% 1 0 0   100% 0 0   100%
src / local_deep_research / security / security_headers.py SecurityHeaders._validate_cors_config   88% 8 1 0   83% 6 1   86%
src / local_deep_research / security / security_headers.py SecurityHeaders._add_cors_headers   86% 21 3 0   70% 10 3   81%
src / local_deep_research / security / security_headers.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / security / security_settings.py _load_security_settings   71% 7 2 0   100% 2 0   78%
src / local_deep_research / security / security_settings.py _convert_value   100% 11 0 0   100% 6 0   100%
src / local_deep_research / security / security_settings.py _validate_bounds   100% 8 0 0   100% 4 0   100%
src / local_deep_research / security / security_settings.py get_security_default   88% 17 2 0   80% 10 2   85%
src / local_deep_research / security / security_settings.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / security / ssrf_validator.py is_ip_blocked   100% 21 0 0   93% 14 1   97%
src / local_deep_research / security / ssrf_validator.py validate_url   72% 39 11 0   92% 12 1   76%
src / local_deep_research / security / ssrf_validator.py get_safe_url   67% 6 2 0   75% 4 1   70%
src / local_deep_research / security / ssrf_validator.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / security / url_builder.py normalize_bind_address   100% 3 0 0   100% 2 0   100%
src / local_deep_research / security / url_builder.py build_base_url_from_settings   100% 15 0 0   100% 4 0   100%
src / local_deep_research / security / url_builder.py build_full_url   100% 10 0 0   100% 4 0   100%
src / local_deep_research / security / url_builder.py validate_constructed_url   85% 13 2 0   100% 8 0   90%
src / local_deep_research / security / url_builder.py mask_sensitive_url   86% 14 2 0   83% 6 1   85%
src / local_deep_research / security / url_builder.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / security / url_validator.py URLValidator.is_unsafe_scheme   100% 8 0 0   100% 6 0   100%
src / local_deep_research / security / url_validator.py URLValidator.is_safe_url   90% 29 3 0   100% 20 0   94%
src / local_deep_research / security / url_validator.py URLValidator._has_suspicious_patterns   100% 6 0 0   100% 4 0   100%
src / local_deep_research / security / url_validator.py URLValidator.sanitize_url   80% 15 3 0   88% 8 1   83%
src / local_deep_research / security / url_validator.py URLValidator.is_academic_url   75% 8 2 0   100% 2 0   80%
src / local_deep_research / security / url_validator.py URLValidator.extract_doi   100% 6 0 0   100% 4 0   100%
src / local_deep_research / security / url_validator.py URLValidator.validate_http_url   86% 21 3 0   81% 16 3   84%
src / local_deep_research / security / url_validator.py URLValidator.is_safe_redirect_url   75% 24 6 0   80% 10 2   76%
src / local_deep_research / security / url_validator.py get_javascript_url_validator   0% 1 1 0   100% 0 0   0%
src / local_deep_research / security / url_validator.py (no function)   100% 28 0 0   100% 0 0   100%
src / local_deep_research / settings / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / settings / base.py ISettingsManager.get_setting   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / base.py ISettingsManager.set_setting   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / base.py ISettingsManager.get_all_settings   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / base.py ISettingsManager.create_or_update_setting   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / base.py ISettingsManager.delete_setting   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / base.py ISettingsManager.get_bool_setting   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / base.py ISettingsManager.get_settings_snapshot   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / base.py ISettingsManager.load_from_defaults_file   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / base.py ISettingsManager.import_settings   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / base.py (no function)   100% 21 0 0   100% 0 0   100%
src / local_deep_research / settings / env_definitions / __init__.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / settings / env_definitions / bootstrap.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / settings / env_definitions / db_config.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / settings / env_definitions / news_scheduler.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / settings / env_definitions / security.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / settings / env_definitions / testing.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / settings / env_registry.py _create_registry   100% 4 0 0   100% 2 0   100%
src / local_deep_research / settings / env_registry.py get_env_setting   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_registry.py is_test_mode   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_registry.py use_fallback_llm   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_registry.py is_ci_environment   100% 2 0 0   100% 0 0   100%
src / local_deep_research / settings / env_registry.py is_github_actions   100% 2 0 0   100% 0 0   100%
src / local_deep_research / settings / env_registry.py is_rate_limiting_enabled   100% 8 0 0   100% 2 0   100%
src / local_deep_research / settings / env_registry.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py EnvSetting.__init__   100% 6 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py EnvSetting.get_value   100% 6 0 0   100% 4 0   100%
src / local_deep_research / settings / env_settings.py EnvSetting._convert_value   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / env_settings.py EnvSetting._get_raw_value   100% 9 0 0   100% 6 0   100%
src / local_deep_research / settings / env_settings.py EnvSetting.is_set   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py EnvSetting.__repr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py BooleanSetting.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py BooleanSetting._convert_value   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py StringSetting.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py StringSetting._convert_value   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py IntegerSetting.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py IntegerSetting._convert_value   100% 12 0 0   100% 6 0   100%
src / local_deep_research / settings / env_settings.py PathSetting.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py PathSetting.get_value   86% 14 2 0   100% 6 0   90%
src / local_deep_research / settings / env_settings.py SecretSetting.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py SecretSetting.__repr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py SecretSetting.__str__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py EnumSetting.__init__   100% 6 0 0   100% 2 0   100%
src / local_deep_research / settings / env_settings.py EnumSetting._convert_value   100% 8 0 0   100% 6 0   100%
src / local_deep_research / settings / env_settings.py SettingsRegistry.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py SettingsRegistry.register_category   100% 3 0 0   100% 2 0   100%
src / local_deep_research / settings / env_settings.py SettingsRegistry.get   100% 8 0 0   100% 2 0   100%
src / local_deep_research / settings / env_settings.py SettingsRegistry.get_setting_object   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py SettingsRegistry.is_env_only   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py SettingsRegistry.get_env_var   100% 2 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py SettingsRegistry.get_all_env_vars   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py SettingsRegistry.get_category_settings   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py SettingsRegistry.get_bootstrap_vars   100% 5 0 0   100% 4 0   100%
src / local_deep_research / settings / env_settings.py SettingsRegistry.get_testing_vars   100% 4 0 0   100% 2 0   100%
src / local_deep_research / settings / env_settings.py SettingsRegistry.list_all_settings   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py (no function)   100% 47 0 0   100% 0 0   100%
src / local_deep_research / settings / logger.py log_settings   93% 14 1 0   80% 10 2   88%
src / local_deep_research / settings / logger.py redact_sensitive_keys   93% 15 1 0   90% 10 1   92%
src / local_deep_research / settings / logger.py create_settings_summary   100% 6 0 0   100% 2 0   100%
src / local_deep_research / settings / logger.py get_settings_log_level   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / logger.py (no function)   100% 17 0 0   100% 8 0   100%
src / local_deep_research / settings / manager.py parse_boolean   100% 11 0 0   100% 8 0   100%
src / local_deep_research / settings / manager.py _parse_number   100% 4 0 0   100% 2 0   100%
src / local_deep_research / settings / manager.py _parse_json_value   100% 8 0 0   100% 4 0   100%
src / local_deep_research / settings / manager.py _parse_multiselect   100% 13 0 0   88% 8 1   95%
src / local_deep_research / settings / manager.py _filter_setting_columns   100% 2 0 0   100% 0 0   100%
src / local_deep_research / settings / manager.py get_typed_setting_value   100% 18 0 0   100% 8 0   100%
src / local_deep_research / settings / manager.py check_env_setting   100% 5 0 0   100% 2 0   100%
src / local_deep_research / settings / manager.py SettingsManager.__init__   100% 6 0 0   100% 2 0   100%
src / local_deep_research / settings / manager.py SettingsManager._ensure_settings_initialized   100% 6 0 0   100% 2 0   100%
src / local_deep_research / settings / manager.py SettingsManager._check_thread_safety   100% 3 0 0   100% 2 0   100%
src / local_deep_research / settings / manager.py SettingsManager.settings_locked   100% 8 0 0   100% 4 0   100%
src / local_deep_research / settings / manager.py SettingsManager.default_settings   79% 29 6 0   100% 6 0   83%
src / local_deep_research / settings / manager.py SettingsManager.__get_typed_setting_value   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / manager.py SettingsManager.__query_settings   100% 12 0 0   100% 8 0   100%
src / local_deep_research / settings / manager.py SettingsManager.get_setting   100% 25 0 0   100% 14 0   100%
src / local_deep_research / settings / manager.py SettingsManager.get_bool_setting   100% 2 0 0   100% 0 0   100%
src / local_deep_research / settings / manager.py SettingsManager.set_setting   97% 34 1 0   89% 18 2   94%
src / local_deep_research / settings / manager.py SettingsManager.clear_cache   0% 2 2 0   100% 0 0   0%
src / local_deep_research / settings / manager.py SettingsManager.get_all_settings   86% 28 4 0   92% 12 1   88%
src / local_deep_research / settings / manager.py SettingsManager.get_settings_snapshot   86% 7 1 0   75% 4 1   82%
src / local_deep_research / settings / manager.py SettingsManager.create_or_update_setting   98% 46 1 0   95% 20 1   97%
src / local_deep_research / settings / manager.py SettingsManager.delete_setting   100% 12 0 0   100% 4 0   100%
src / local_deep_research / settings / manager.py SettingsManager.load_from_defaults_file   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / manager.py SettingsManager.db_version_matches_package   100% 3 0 0   100% 0 0   100%
src / local_deep_research / settings / manager.py SettingsManager.update_db_version   100% 5 0 0   100% 0 0   100%
src / local_deep_research / settings / manager.py SettingsManager.import_settings   100% 22 0 0   88% 16 2   95%
src / local_deep_research / settings / manager.py SettingsManager._create_setting   100% 22 0 0   100% 18 0   100%
src / local_deep_research / settings / manager.py SettingsManager._emit_settings_changed   89% 18 2 0   83% 6 1   88%
src / local_deep_research / settings / manager.py SettingsManager.get_bootstrap_env_vars   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / manager.py SettingsManager.is_bootstrap_env_var   100% 2 0 0   100% 0 0   100%
src / local_deep_research / settings / manager.py SettingsManager.is_env_only_setting   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / manager.py SettingsManager.get_env_var_for_setting   100% 1 0 0   100% 0 0   100%
src / local_deep_research / settings / manager.py SettingsManager.get_setting_key_for_env_var   100% 5 0 0   100% 2 0   100%
src / local_deep_research / settings / manager.py (no function)   100% 59 0 0   100% 0 0   100%
src / local_deep_research / storage / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / storage / base.py ReportStorage.save_report   0% 1 1 0   100% 0 0   0%
src / local_deep_research / storage / base.py ReportStorage.get_report   0% 1 1 0   100% 0 0   0%
src / local_deep_research / storage / base.py ReportStorage.get_report_with_metadata   0% 1 1 0   100% 0 0   0%
src / local_deep_research / storage / base.py ReportStorage.delete_report   0% 1 1 0   100% 0 0   0%
src / local_deep_research / storage / base.py ReportStorage.report_exists   0% 1 1 0   100% 0 0   0%
src / local_deep_research / storage / base.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / storage / database.py DatabaseReportStorage.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / storage / database.py DatabaseReportStorage.save_report   100% 17 0 0   100% 6 0   100%
src / local_deep_research / storage / database.py DatabaseReportStorage.get_report   100% 8 0 0   100% 2 0   100%
src / local_deep_research / storage / database.py DatabaseReportStorage.get_report_with_metadata   62% 8 3 0   100% 2 0   70%
src / local_deep_research / storage / database.py DatabaseReportStorage.delete_report   100% 11 0 0   100% 2 0   100%
src / local_deep_research / storage / database.py DatabaseReportStorage.report_exists   100% 6 0 0   100% 0 0   100%
src / local_deep_research / storage / database.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / storage / database_with_file_backup.py DatabaseWithFileBackupStorage.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / storage / database_with_file_backup.py DatabaseWithFileBackupStorage.save_report   100% 12 0 0   100% 6 0   100%
src / local_deep_research / storage / database_with_file_backup.py DatabaseWithFileBackupStorage.get_report   100% 1 0 0   100% 0 0   100%
src / local_deep_research / storage / database_with_file_backup.py DatabaseWithFileBackupStorage.delete_report   100% 7 0 0   100% 2 0   100%
src / local_deep_research / storage / database_with_file_backup.py DatabaseWithFileBackupStorage.list_reports   0% 1 1 0   100% 0 0   0%
src / local_deep_research / storage / database_with_file_backup.py DatabaseWithFileBackupStorage.get_report_with_metadata   100% 1 0 0   100% 0 0   100%
src / local_deep_research / storage / database_with_file_backup.py DatabaseWithFileBackupStorage.report_exists   100% 1 0 0   100% 0 0   100%
src / local_deep_research / storage / database_with_file_backup.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / storage / factory.py get_report_storage   100% 9 0 0   100% 4 0   100%
src / local_deep_research / storage / factory.py get_request_report_storage   100% 1 0 0   100% 0 0   100%
src / local_deep_research / storage / factory.py set_request_report_storage   100% 1 0 0   100% 0 0   100%
src / local_deep_research / storage / factory.py clear_request_report_storage   100% 1 0 0   100% 0 0   100%
src / local_deep_research / storage / factory.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / storage / file.py FileReportStorage.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / storage / file.py FileReportStorage._get_report_path   100% 1 0 0   100% 0 0   100%
src / local_deep_research / storage / file.py FileReportStorage._get_metadata_path   100% 1 0 0   100% 0 0   100%
src / local_deep_research / storage / file.py FileReportStorage.save_report   100% 12 0 0   100% 2 0   100%
src / local_deep_research / storage / file.py FileReportStorage.get_report   100% 9 0 0   100% 2 0   100%
src / local_deep_research / storage / file.py FileReportStorage.get_report_with_metadata   79% 14 3 0   100% 4 0   83%
src / local_deep_research / storage / file.py FileReportStorage.delete_report   100% 13 0 0   100% 4 0   100%
src / local_deep_research / storage / file.py FileReportStorage.report_exists   100% 1 0 0   100% 0 0   100%
src / local_deep_research / storage / file.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py find_sources_section   100% 5 0 0   100% 4 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter.__init__   100% 5 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._create_source_word_replacer   100% 2 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._create_source_word_replacer.replace_source_word   100% 2 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._create_citation_formatter   100% 2 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._create_citation_formatter.formatter   100% 4 0 0   100% 2 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._replace_comma_citations   100% 2 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._replace_comma_citations._replacer   100% 7 0 0   100% 4 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter.format_document   94% 18 1 0   92% 12 1   93%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._find_sources_section   100% 1 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._parse_sources   100% 10 0 0   100% 4 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_number_hyperlinks   100% 7 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_number_hyperlinks.format_number_link   100% 2 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_number_hyperlinks.replace_citation   100% 1 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_domain_hyperlinks   100% 7 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_domain_hyperlinks.format_domain_link   100% 3 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_domain_hyperlinks.replace_citation   100% 1 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_domain_id_hyperlinks   100% 20 0 0   92% 12 1   97%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_domain_id_hyperlinks.format_domain_id_link   100% 2 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_domain_id_hyperlinks.replace_citation   100% 1 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_domain_id_always_hyperlinks   100% 17 0 0   90% 10 1   96%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_domain_id_always_hyperlinks.format_domain_id_link   100% 2 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_domain_id_always_hyperlinks.replace_citation   100% 1 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._to_superscript   100% 2 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._extract_domain   87% 15 2 0   100% 8 0   91%
src / local_deep_research / text_optimization / citation_formatter.py QuartoExporter.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py QuartoExporter.export_to_quarto   100% 14 0 0   100% 2 0   100%
src / local_deep_research / text_optimization / citation_formatter.py QuartoExporter.export_to_quarto.replace_comma_citations   100% 4 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py QuartoExporter.export_to_quarto.replace_citation   100% 2 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py QuartoExporter._generate_bibliography   100% 17 0 0   100% 4 0   100%
src / local_deep_research / text_optimization / citation_formatter.py RISExporter.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py RISExporter.export_to_ris   100% 41 0 0   86% 22 3   95%
src / local_deep_research / text_optimization / citation_formatter.py RISExporter._create_ris_entry   92% 66 5 0   90% 30 3   92%
src / local_deep_research / text_optimization / citation_formatter.py LaTeXExporter.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py LaTeXExporter.export_to_latex   100% 26 0 0   100% 14 0   100%
src / local_deep_research / text_optimization / citation_formatter.py LaTeXExporter._create_latex_header   100% 1 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py LaTeXExporter._create_latex_footer   100% 1 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py LaTeXExporter._escape_latex   100% 4 0 0   100% 2 0   100%
src / local_deep_research / text_optimization / citation_formatter.py LaTeXExporter._convert_lists   100% 17 0 0   100% 10 0   100%
src / local_deep_research / text_optimization / citation_formatter.py LaTeXExporter._create_bibliography   100% 16 0 0   100% 6 0   100%
src / local_deep_research / text_optimization / citation_formatter.py (no function)   100% 42 0 0   100% 0 0   100%
src / local_deep_research / text_processing / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / text_processing / text_cleaner.py remove_surrogates   57% 7 3 0   100% 2 0   67%
src / local_deep_research / text_processing / text_cleaner.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / utilities / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / utilities / db_utils.py get_db_session   77% 22 5 0   58% 12 1   71%
src / local_deep_research / utilities / db_utils.py get_settings_manager   100% 10 0 0   100% 4 0   100%
src / local_deep_research / utilities / db_utils.py no_db_settings   100% 3 0 0   100% 0 0   100%
src / local_deep_research / utilities / db_utils.py no_db_settings.wrapper   100% 6 0 0   100% 0 0   100%
src / local_deep_research / utilities / db_utils.py get_setting_from_db_main_thread   81% 21 4 0   83% 6 1   81%
src / local_deep_research / utilities / db_utils.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / utilities / enums.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / utilities / es_utils.py ElasticsearchManager.__init__   100% 15 0 0   100% 6 0   100%
src / local_deep_research / utilities / es_utils.py ElasticsearchManager.create_index   100% 14 0 0   100% 6 0   100%
src / local_deep_research / utilities / es_utils.py ElasticsearchManager.delete_index   100% 10 0 0   100% 2 0   100%
src / local_deep_research / utilities / es_utils.py ElasticsearchManager.index_document   100% 7 0 0   100% 0 0   100%
src / local_deep_research / utilities / es_utils.py ElasticsearchManager.bulk_index_documents   100% 13 0 0   100% 4 0   100%
src / local_deep_research / utilities / es_utils.py ElasticsearchManager.index_file   45% 22 12 0   0% 4 0   38%
src / local_deep_research / utilities / es_utils.py ElasticsearchManager.index_directory   83% 18 3 0   100% 6 0   88%
src / local_deep_research / utilities / es_utils.py ElasticsearchManager.search   100% 9 0 0   100% 2 0   100%
src / local_deep_research / utilities / es_utils.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / utilities / json_utils.py get_llm_response_text   100% 10 0 0   100% 8 0   100%
src / local_deep_research / utilities / json_utils.py extract_json   100% 39 0 0   88% 24 3   95%
src / local_deep_research / utilities / json_utils.py _remove_think_tags   100% 4 0 0   100% 0 0   100%
src / local_deep_research / utilities / json_utils.py _strip_code_fences   100% 9 0 0   88% 8 1   94%
src / local_deep_research / utilities / json_utils.py _extract_by_brackets   100% 5 0 0   100% 2 0   100%
src / local_deep_research / utilities / json_utils.py _clean_llm_json_artifacts   100% 4 0 0   100% 0 0   100%
src / local_deep_research / utilities / json_utils.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / utilities / llm_utils.py get_ollama_base_url   100% 3 0 0   100% 0 0   100%
src / local_deep_research / utilities / llm_utils.py get_server_url   100% 19 0 0   100% 10 0   100%
src / local_deep_research / utilities / llm_utils.py fetch_ollama_models   100% 17 0 0   100% 6 0   100%
src / local_deep_research / utilities / llm_utils.py get_model   68% 63 20 0   95% 20 1   75%
src / local_deep_research / utilities / llm_utils.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / utilities / log_utils.py InterceptHandler.emit   100% 14 0 0   75% 4 1   94%
src / local_deep_research / utilities / log_utils.py log_for_research   100% 3 0 0   100% 0 0   100%
src / local_deep_research / utilities / log_utils.py log_for_research.wrapped   100% 4 0 0   100% 0 0   100%
src / local_deep_research / utilities / log_utils.py _get_research_id   100% 6 0 0   100% 4 0   100%
src / local_deep_research / utilities / log_utils.py _process_log_queue   0% 15 15 0   0% 6 0   0%
src / local_deep_research / utilities / log_utils.py _write_log_to_database   100% 10 0 0   50% 2 1   92%
src / local_deep_research / utilities / log_utils.py database_sink   100% 9 0 0   100% 2 0   100%
src / local_deep_research / utilities / log_utils.py frontend_progress_sink   100% 6 0 0   100% 2 0   100%
src / local_deep_research / utilities / log_utils.py flush_log_queue   67% 12 4 0   100% 4 0   75%
src / local_deep_research / utilities / log_utils.py config_logger   100% 14 0 0   100% 2 0   100%
src / local_deep_research / utilities / log_utils.py (no function)   100% 31 0 0   100% 0 0   100%
src / local_deep_research / utilities / search_cache.py SearchCache.__init__   100% 14 0 0   100% 2 0   100%
src / local_deep_research / utilities / search_cache.py SearchCache._init_db   67% 6 2 0   100% 0 0   67%
src / local_deep_research / utilities / search_cache.py SearchCache._normalize_query   100% 3 0 0   100% 0 0   100%
src / local_deep_research / utilities / search_cache.py SearchCache._get_query_hash   100% 3 0 0   100% 0 0   100%
src / local_deep_research / utilities / search_cache.py SearchCache._cleanup_expired   78% 9 2 0   50% 2 1   73%
src / local_deep_research / utilities / search_cache.py SearchCache._evict_lru_memory   100% 7 0 0   100% 4 0   100%
src / local_deep_research / utilities / search_cache.py SearchCache.get   93% 27 2 0   100% 6 0   94%
src / local_deep_research / utilities / search_cache.py SearchCache.put   88% 26 3 0   100% 4 0   90%
src / local_deep_research / utilities / search_cache.py SearchCache.get_or_fetch   95% 57 3 0   85% 20 3   92%
src / local_deep_research / utilities / search_cache.py SearchCache.invalidate   75% 12 3 0   100% 0 0   75%
src / local_deep_research / utilities / search_cache.py SearchCache.clear_all   73% 11 3 0   100% 0 0   73%
src / local_deep_research / utilities / search_cache.py SearchCache.dispose   100% 7 0 0   100% 2 0   100%
src / local_deep_research / utilities / search_cache.py SearchCache.__del__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / utilities / search_cache.py SearchCache.get_stats   75% 12 3 0   100% 0 0   75%
src / local_deep_research / utilities / search_cache.py get_search_cache   100% 3 0 0   100% 2 0   100%
src / local_deep_research / utilities / search_cache.py normalize_entity_query   100% 3 0 0   100% 0 0   100%
src / local_deep_research / utilities / search_cache.py (no function)   100% 30 0 0   100% 0 0   100%
src / local_deep_research / utilities / search_utilities.py remove_think_tags   100% 4 0 0   100% 0 0   100%
src / local_deep_research / utilities / search_utilities.py extract_links_from_search_results   100% 17 0 0   100% 6 0   100%
src / local_deep_research / utilities / search_utilities.py format_links_to_markdown   100% 26 0 0   100% 16 0   100%
src / local_deep_research / utilities / search_utilities.py format_findings   95% 77 4 0   100% 32 0   96%
src / local_deep_research / utilities / search_utilities.py print_search_results   100% 5 0 0   100% 2 0   100%
src / local_deep_research / utilities / search_utilities.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / utilities / setup_utils.py setup_user_directories   0% 2 2 0   100% 0 0   0%
src / local_deep_research / utilities / setup_utils.py (no function)   0% 1 1 0   100% 0 0   0%
src / local_deep_research / utilities / thread_context.py set_search_context   100% 3 0 0   100% 2 0   100%
src / local_deep_research / utilities / thread_context.py clear_search_context   100% 2 0 0   100% 2 0   100%
src / local_deep_research / utilities / thread_context.py get_search_context   100% 4 0 0   100% 2 0   100%
src / local_deep_research / utilities / thread_context.py search_context   100% 4 0 0   100% 0 0   100%
src / local_deep_research / utilities / thread_context.py _get_search_tracker_if_needed   0% 9 9 0   0% 2 0   0%
src / local_deep_research / utilities / thread_context.py preserve_research_context   100% 4 0 0   100% 0 0   100%
src / local_deep_research / utilities / thread_context.py preserve_research_context.wrapper   100% 6 0 0   100% 2 0   100%
src / local_deep_research / utilities / thread_context.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / utilities / threading_utils.py thread_specific_cache   100% 2 0 0   100% 0 0   100%
src / local_deep_research / utilities / threading_utils.py thread_specific_cache._key_func   100% 6 0 0   100% 2 0   100%
src / local_deep_research / utilities / threading_utils.py thread_with_app_context   100% 3 0 0   100% 0 0   100%
src / local_deep_research / utilities / threading_utils.py thread_with_app_context._run_with_context   100% 4 0 0   100% 2 0   100%
src / local_deep_research / utilities / threading_utils.py thread_context   100% 15 0 0   100% 4 0   100%
src / local_deep_research / utilities / threading_utils.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / utilities / type_utils.py to_bool   100% 7 0 0   100% 6 0   100%
src / local_deep_research / utilities / type_utils.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / utilities / url_utils.py normalize_url   100% 16 0 0   100% 10 0   100%
src / local_deep_research / utilities / url_utils.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / web / api.py api_access_control   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / api.py api_access_control.decorated_function   100% 22 0 0   83% 12 2   94%
src / local_deep_research / web / api.py api_documentation   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / api.py health_check   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / api.py api_quick_summary_test   25% 12 9 0   50% 2 1   29%
src / local_deep_research / web / api.py _serialize_results   0% 5 5 0   0% 4 0   0%
src / local_deep_research / web / api.py api_quick_summary   55% 55 25 0   43% 14 2   52%
src / local_deep_research / web / api.py api_generate_report   14% 22 19 0   25% 4 1   15%
src / local_deep_research / web / api.py api_analyze_documents   25% 12 9 0   50% 2 1   29%
src / local_deep_research / web / api.py (no function)   100% 30 0 0   100% 0 0   100%
src / local_deep_research / web / app.py main   0% 17 17 0   0% 2 0   0%
src / local_deep_research / web / app.py main.flush_logs_on_exit   0% 7 7 0   100% 0 0   0%
src / local_deep_research / web / app.py main.shutdown_scheduler   0% 6 6 0   0% 2 0   0%
src / local_deep_research / web / app.py (no function)   90% 10 1 0   50% 2 1   83%
src / local_deep_research / web / app_factory.py _is_private_ip   100% 5 0 0   100% 0 0   100%
src / local_deep_research / web / app_factory.py create_app   84% 138 22 0   60% 10 4   82%
src / local_deep_research / web / app_factory.py create_app.SecureCookieMiddleware.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / app_factory.py create_app.SecureCookieMiddleware.__call__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / app_factory.py create_app.SecureCookieMiddleware.__call__.custom_start_response   100% 9 0 0   88% 8 1   94%
src / local_deep_research / web / app_factory.py create_app.SecureCookieMiddleware._should_add_secure_flag   100% 6 0 0   100% 2 0   100%
src / local_deep_research / web / app_factory.py create_app.ServerHeaderMiddleware.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / app_factory.py create_app.ServerHeaderMiddleware.__call__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / app_factory.py create_app.ServerHeaderMiddleware.__call__.custom_start_response   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / app_factory.py create_app.ratelimit_handler   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / app_factory.py apply_middleware   100% 28 0 0   100% 0 0   100%
src / local_deep_research / web / app_factory.py apply_middleware.cleanup_db_session   67% 9 3 0   75% 4 1   69%
src / local_deep_research / web / app_factory.py apply_middleware.handle_websocket_requests   14% 7 6 0   25% 4 1   18%
src / local_deep_research / web / app_factory.py register_blueprints   100% 62 0 0   67% 6 2   97%
src / local_deep_research / web / app_factory.py register_blueprints.index   100% 14 0 0   75% 4 1   94%
src / local_deep_research / web / app_factory.py register_blueprints.favicon   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / app_factory.py register_blueprints.app_serve_static   62% 16 6 0   50% 4 2   60%
src / local_deep_research / web / app_factory.py register_error_handlers   75% 16 4 0   100% 0 0   75%
src / local_deep_research / web / app_factory.py register_error_handlers.not_found   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web / app_factory.py register_error_handlers.server_error   0% 3 3 0   0% 2 0   0%
src / local_deep_research / web / app_factory.py register_error_handlers.handle_csrf_error   75% 8 2 0   50% 2 1   70%
src / local_deep_research / web / app_factory.py register_error_handlers.handle_news_api_exception   0% 3 3 0   100% 0 0   0%
src / local_deep_research / web / app_factory.py create_database   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / app_factory.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / web / auth / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / auth / cleanup_middleware.py cleanup_completed_research   93% 28 2 0   100% 10 0   95%
src / local_deep_research / web / auth / cleanup_middleware.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / web / auth / database_middleware.py ensure_user_database   100% 35 0 0   88% 24 3   95%
src / local_deep_research / web / auth / database_middleware.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / web / auth / decorators.py _safe_redirect_to_login   100% 4 0 0   100% 2 0   100%
src / local_deep_research / web / auth / decorators.py login_required   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / auth / decorators.py login_required.decorated_function   100% 13 0 0   100% 8 0   100%
src / local_deep_research / web / auth / decorators.py current_user   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / auth / decorators.py get_current_db_session   100% 4 0 0   100% 2 0   100%
src / local_deep_research / web / auth / decorators.py inject_current_user   100% 16 0 0   88% 8 1   96%
src / local_deep_research / web / auth / decorators.py (no function)   100% 10 0 0   100% 0 0   100%
src / local_deep_research / web / auth / middleware_optimizer.py should_skip_database_middleware   100% 12 0 0   100% 10 0   100%
src / local_deep_research / web / auth / middleware_optimizer.py should_skip_queue_checks   100% 5 0 0   100% 4 0   100%
src / local_deep_research / web / auth / middleware_optimizer.py should_skip_session_cleanup   100% 4 0 0   100% 2 0   100%
src / local_deep_research / web / auth / middleware_optimizer.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / web / auth / queue_middleware.py process_pending_queue_operations   100% 14 0 0   100% 8 0   100%
src / local_deep_research / web / auth / queue_middleware.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / web / auth / queue_middleware_v2.py notify_queue_processor   73% 15 4 0   75% 8 2   74%
src / local_deep_research / web / auth / queue_middleware_v2.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / web / auth / routes.py get_csrf_token   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / auth / routes.py login_page   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web / auth / routes.py login   100% 29 0 0   100% 6 0   100%
src / local_deep_research / web / auth / routes.py _perform_post_login_tasks   78% 54 12 0   75% 16 4   77%
src / local_deep_research / web / auth / routes.py register_page   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web / auth / routes.py register   77% 82 19 0   92% 26 2   81%
src / local_deep_research / web / auth / routes.py logout   100% 12 0 0   75% 4 1   94%
src / local_deep_research / web / auth / routes.py check_auth   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web / auth / routes.py change_password   61% 31 12 0   65% 20 5   63%
src / local_deep_research / web / auth / routes.py integrity_check   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web / auth / routes.py (no function)   100% 36 0 0   100% 0 0   100%
src / local_deep_research / web / auth / session_cleanup.py cleanup_stale_sessions   100% 15 0 0   100% 10 0   100%
src / local_deep_research / web / auth / session_cleanup.py (no function)   100% 5 0 0   100% 0 0   100%
src / local_deep_research / web / auth / session_manager.py SessionManager.__init__   100% 5 0 0   100% 0 0   100%
src / local_deep_research / web / auth / session_manager.py SessionManager.create_session   100% 4 0 0   100% 0 0   100%
src / local_deep_research / web / auth / session_manager.py SessionManager.validate_session   100% 11 0 0   100% 4 0   100%
src / local_deep_research / web / auth / session_manager.py SessionManager.destroy_session   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web / auth / session_manager.py SessionManager.cleanup_expired_sessions   100% 10 0 0   100% 8 0   100%
src / local_deep_research / web / auth / session_manager.py SessionManager.get_active_sessions_count   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / auth / session_manager.py SessionManager.get_user_sessions   100% 5 0 0   100% 4 0   100%
src / local_deep_research / web / auth / session_manager.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / web / exceptions.py WebAPIException.__init__   100% 5 0 0   100% 0 0   100%
src / local_deep_research / web / exceptions.py WebAPIException.to_dict   100% 4 0 0   100% 2 0   100%
src / local_deep_research / web / exceptions.py AuthenticationRequiredError.__init__   100% 4 0 0   100% 2 0   100%
src / local_deep_research / web / exceptions.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / web / models / database.py get_db_connection   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / models / database.py calculate_duration   94% 49 3 0   90% 10 1   93%
src / local_deep_research / web / models / database.py get_logs_for_research   100% 11 0 0   100% 2 0   100%
src / local_deep_research / web / models / database.py get_total_logs_for_research   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / models / database.py (no function)   100% 15 0 0   50% 2 1   94%
src / local_deep_research / web / models / settings.py LLMSetting.validate_llm_key   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web / models / settings.py SearchSetting.validate_search_key   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web / models / settings.py ReportSetting.validate_report_key   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web / models / settings.py AppSetting.validate_app_key   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web / models / settings.py (no function)   100% 32 0 0   100% 0 0   100%
src / local_deep_research / web / queue / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / queue / manager.py QueueManager.add_to_queue   89% 19 2 0   100% 2 0   90%
src / local_deep_research / web / queue / manager.py QueueManager.get_queue_position   100% 9 0 0   100% 4 0   100%
src / local_deep_research / web / queue / manager.py QueueManager.remove_from_queue   100% 13 0 0   100% 4 0   100%
src / local_deep_research / web / queue / manager.py QueueManager.get_user_queue   100% 11 0 0   83% 6 1   94%
src / local_deep_research / web / queue / manager.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2.__init__   100% 8 0 0   100% 0 0   100%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2.start   100% 7 0 0   100% 2 0   100%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2.stop   100% 4 0 0   100% 2 0   100%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2.notify_user_activity   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2.notify_research_queued   94% 31 2 0   92% 12 1   93%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2._start_research_directly   82% 38 7 0   50% 4 2   79%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2.notify_research_completed   100% 8 0 0   100% 0 0   100%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2.notify_research_failed   100% 8 0 0   100% 0 0   100%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2._process_queue_loop   89% 19 2 0   100% 8 0   93%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2._process_user_queue   74% 27 7 0   88% 8 1   77%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2._start_queued_researches   100% 15 0 0   100% 2 0   100%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2._start_research   100% 17 0 0   100% 4 0   100%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2.process_user_request   100% 16 0 0   83% 6 1   95%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2.queue_progress_update   100% 4 0 0   100% 0 0   100%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2.queue_error_update   100% 4 0 0   100% 0 0   100%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2.process_pending_operations_for_user   95% 38 2 0   83% 18 3   91%
src / local_deep_research / web / queue / processor_v2.py (no function)   100% 35 0 0   100% 0 0   100%
src / local_deep_research / web / routes / api_routes.py get_current_config   62% 8 3 0   100% 0 0   62%
src / local_deep_research / web / routes / api_routes.py api_start_research   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / routes / api_routes.py api_research_status   70% 10 3 0   100% 2 0   75%
src / local_deep_research / web / routes / api_routes.py api_terminate_research   70% 10 3 0   100% 2 0   75%
src / local_deep_research / web / routes / api_routes.py api_get_resources   50% 6 3 0   100% 0 0   50%
src / local_deep_research / web / routes / api_routes.py api_add_resource   70% 23 7 0   67% 6 2   69%
src / local_deep_research / web / routes / api_routes.py api_delete_resource   62% 8 3 0   100% 2 0   70%
src / local_deep_research / web / routes / api_routes.py check_ollama_status   62% 34 13 0   67% 6 2   62%
src / local_deep_research / web / routes / api_routes.py check_ollama_model   71% 51 15 0   67% 12 4   70%
src / local_deep_research / web / routes / api_routes.py api_get_config   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / routes / api_routes.py (no function)   100% 42 0 0   100% 0 0   100%
src / local_deep_research / web / routes / context_overflow_api.py get_context_overflow_metrics   85% 74 11 0   73% 30 4   82%
src / local_deep_research / web / routes / context_overflow_api.py get_research_context_overflow   100% 30 0 0   100% 10 0   100%
src / local_deep_research / web / routes / context_overflow_api.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / web / routes / globals.py get_globals   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / globals.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / web / routes / history_routes.py history_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / history_routes.py get_history   70% 30 9 0   67% 6 2   69%
src / local_deep_research / web / routes / history_routes.py get_research_status   80% 25 5 0   75% 8 2   79%
src / local_deep_research / web / routes / history_routes.py get_research_details   63% 27 10 0   67% 6 2   64%
src / local_deep_research / web / routes / history_routes.py get_report   84% 19 3 0   75% 4 1   83%
src / local_deep_research / web / routes / history_routes.py get_markdown   73% 15 4 0   50% 4 2   68%
src / local_deep_research / web / routes / history_routes.py get_research_logs   94% 16 1 0   83% 6 1   91%
src / local_deep_research / web / routes / history_routes.py get_log_count   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / routes / history_routes.py (no function)   100% 41 0 0   100% 0 0   100%
src / local_deep_research / web / routes / metrics_routes.py get_rating_analytics   52% 25 12 0   40% 10 4   49%
src / local_deep_research / web / routes / metrics_routes.py get_link_analytics   91% 82 7 0   64% 36 13   83%
src / local_deep_research / web / routes / metrics_routes.py get_available_strategies   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / routes / metrics_routes.py get_strategy_analytics   31% 32 22 0   25% 12 3   30%
src / local_deep_research / web / routes / metrics_routes.py get_rate_limiting_analytics   56% 66 29 0   39% 28 9   51%
src / local_deep_research / web / routes / metrics_routes.py metrics_dashboard   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / metrics_routes.py context_overflow_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / metrics_routes.py api_metrics   89% 35 4 0   50% 4 2   85%
src / local_deep_research / web / routes / metrics_routes.py api_rate_limiting_metrics   67% 9 3 0   100% 0 0   67%
src / local_deep_research / web / routes / metrics_routes.py api_current_rate_limits   73% 11 3 0   100% 2 0   77%
src / local_deep_research / web / routes / metrics_routes.py api_research_link_metrics   21% 33 26 0   17% 12 2   20%
src / local_deep_research / web / routes / metrics_routes.py api_research_metrics   57% 7 3 0   100% 0 0   57%
src / local_deep_research / web / routes / metrics_routes.py api_research_timeline_metrics   0% 7 7 0   100% 0 0   0%
src / local_deep_research / web / routes / metrics_routes.py api_research_search_metrics   0% 7 7 0   100% 0 0   0%
src / local_deep_research / web / routes / metrics_routes.py api_enhanced_metrics   80% 15 3 0   100% 0 0   80%
src / local_deep_research / web / routes / metrics_routes.py api_get_research_rating   67% 12 4 0   75% 4 1   69%
src / local_deep_research / web / routes / metrics_routes.py api_save_research_rating   70% 20 6 0   67% 6 2   69%
src / local_deep_research / web / routes / metrics_routes.py star_reviews   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / metrics_routes.py cost_analytics   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / metrics_routes.py api_star_reviews   88% 34 4 0   50% 14 7   77%
src / local_deep_research / web / routes / metrics_routes.py api_pricing   62% 8 3 0   100% 0 0   62%
src / local_deep_research / web / routes / metrics_routes.py api_model_pricing   67% 9 3 0   100% 0 0   67%
src / local_deep_research / web / routes / metrics_routes.py api_cost_calculation   82% 17 3 0   100% 4 0   86%
src / local_deep_research / web / routes / metrics_routes.py api_research_costs   28% 25 18 0   25% 8 2   27%
src / local_deep_research / web / routes / metrics_routes.py api_cost_analytics   33% 48 32 0   20% 20 4   29%
src / local_deep_research / web / routes / metrics_routes.py link_analytics   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / metrics_routes.py api_link_analytics   60% 10 4 0   50% 2 1   58%
src / local_deep_research / web / routes / metrics_routes.py api_get_domain_classifications   60% 10 4 0   50% 2 1   58%
src / local_deep_research / web / routes / metrics_routes.py api_get_classifications_summary   60% 10 4 0   50% 2 1   58%
src / local_deep_research / web / routes / metrics_routes.py api_classify_domains   57% 28 12 0   38% 8 3   53%
src / local_deep_research / web / routes / metrics_routes.py api_classification_progress   48% 27 14 0   20% 10 2   41%
src / local_deep_research / web / routes / metrics_routes.py (no function)   100% 97 0 0   100% 0 0   100%
src / local_deep_research / web / routes / news_routes.py handle_api_errors   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / routes / news_routes.py handle_api_errors.wrapper   100% 7 0 0   100% 0 0   100%
src / local_deep_research / web / routes / news_routes.py handle_news_api_exception   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / routes / news_routes.py get_news_feed   100% 9 0 0   100% 0 0   100%
src / local_deep_research / web / routes / news_routes.py get_subscriptions   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / routes / news_routes.py create_subscription   83% 6 1 0   50% 2 1   75%
src / local_deep_research / web / routes / news_routes.py get_subscription   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / routes / news_routes.py update_subscription   80% 5 1 0   50% 2 1   71%
src / local_deep_research / web / routes / news_routes.py delete_subscription   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / routes / news_routes.py get_subscription_history   100% 4 0 0   100% 0 0   100%
src / local_deep_research / web / routes / news_routes.py submit_feedback   90% 10 1 0   75% 4 1   86%
src / local_deep_research / web / routes / news_routes.py research_news_item   89% 9 1 0   75% 4 1   85%
src / local_deep_research / web / routes / news_routes.py save_preferences   83% 6 1 0   50% 2 1   75%
src / local_deep_research / web / routes / news_routes.py get_categories   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / routes / news_routes.py (no function)   100% 63 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes.py redirect_static   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes.py progress_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes.py research_details_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes.py results_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes.py history_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes.py settings_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes.py main_config_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes.py collections_config_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes.py api_keys_config_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes.py search_engines_config_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes.py llm_config_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes.py start_research   58% 211 89 0   50% 70 21   56%
src / local_deep_research / web / routes / research_routes.py terminate_research   75% 44 11 0   67% 12 4   73%
src / local_deep_research / web / routes / research_routes.py delete_research   57% 23 10 0   50% 8 4   55%
src / local_deep_research / web / routes / research_routes.py clear_history   45% 22 12 0   30% 10 3   41%
src / local_deep_research / web / routes / research_routes.py open_file_location   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / research_routes.py save_raw_config   0% 28 28 0   0% 4 0   0%
src / local_deep_research / web / routes / research_routes.py save_raw_config.find_blocked_keys   0% 14 14 0   0% 12 0   0%
src / local_deep_research / web / routes / research_routes.py get_history   35% 23 15 0   25% 8 2   32%
src / local_deep_research / web / routes / research_routes.py get_research_details   67% 12 4 0   75% 4 1   69%
src / local_deep_research / web / routes / research_routes.py get_research_logs   44% 16 9 0   33% 6 2   41%
src / local_deep_research / web / routes / research_routes.py get_research_report   0% 20 20 0   0% 6 0   0%
src / local_deep_research / web / routes / research_routes.py export_research_report   0% 33 33 0   0% 8 0   0%
src / local_deep_research / web / routes / research_routes.py get_research_status   61% 54 21 0   46% 24 9   56%
src / local_deep_research / web / routes / research_routes.py get_queue_status   62% 8 3 0   100% 0 0   62%
src / local_deep_research / web / routes / research_routes.py get_queue_position   0% 10 10 0   0% 2 0   0%
src / local_deep_research / web / routes / research_routes.py get_upload_limits   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / research_routes.py upload_pdf   63% 49 18 0   65% 20 5   64%
src / local_deep_research / web / routes / research_routes.py (no function)   100% 103 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes_orm.py check_research_status_orm   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes_orm.py update_research_status_orm   100% 7 0 0   100% 2 0   100%
src / local_deep_research / web / routes / research_routes_orm.py update_progress_log_orm   100% 7 0 0   100% 2 0   100%
src / local_deep_research / web / routes / research_routes_orm.py start_research   0% 24 24 0   0% 12 0   0%
src / local_deep_research / web / routes / research_routes_orm.py terminate_research   25% 32 24 0   30% 10 1   26%
src / local_deep_research / web / routes / research_routes_orm.py delete_research   90% 20 2 0   75% 4 1   88%
src / local_deep_research / web / routes / research_routes_orm.py clear_history   90% 20 2 0   75% 4 1   88%
src / local_deep_research / web / routes / research_routes_orm.py api_get_history   95% 19 1 0   75% 4 1   91%
src / local_deep_research / web / routes / research_routes_orm.py api_get_research   100% 12 0 0   100% 4 0   100%
src / local_deep_research / web / routes / research_routes_orm.py (no function)   100% 36 0 0   100% 0 0   100%
src / local_deep_research / web / routes / route_registry.py get_all_routes   100% 7 0 0   100% 4 0   100%
src / local_deep_research / web / routes / route_registry.py get_routes_by_blueprint   100% 9 0 0   100% 4 0   100%
src / local_deep_research / web / routes / route_registry.py find_route   100% 6 0 0   100% 4 0   100%
src / local_deep_research / web / routes / route_registry.py (no function)   56% 9 4 0   17% 6 1   40%
src / local_deep_research / web / routes / settings_routes.py is_blocked_setting   100% 5 0 0   100% 4 0   100%
src / local_deep_research / web / routes / settings_routes.py get_blocked_settings_error   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / settings_routes.py _get_setting_from_session   100% 6 0 0   100% 2 0   100%
src / local_deep_research / web / routes / settings_routes.py calculate_warnings   87% 23 3 0   62% 8 3   81%
src / local_deep_research / web / routes / settings_routes.py validate_setting   94% 18 1 0   90% 20 2   92%
src / local_deep_research / web / routes / settings_routes.py coerce_setting_for_write   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / settings_routes.py settings_page   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / settings_routes.py save_all_settings   29% 124 88 0   18% 78 6   25%
src / local_deep_research / web / routes / settings_routes.py reset_to_defaults   0% 11 11 0   100% 0 0   0%
src / local_deep_research / web / routes / settings_routes.py save_settings   51% 47 23 0   43% 14 4   49%
src / local_deep_research / web / routes / settings_routes.py api_get_all_settings   44% 18 10 0   17% 6 1   38%
src / local_deep_research / web / routes / settings_routes.py api_get_db_setting   73% 11 3 0   100% 2 0   77%
src / local_deep_research / web / routes / settings_routes.py api_update_setting   77% 48 11 0   73% 22 6   76%
src / local_deep_research / web / routes / settings_routes.py api_delete_setting   68% 19 6 0   75% 8 2   70%
src / local_deep_research / web / routes / settings_routes.py api_import_settings   0% 9 9 0   100% 0 0   0%
src / local_deep_research / web / routes / settings_routes.py api_get_categories   67% 9 3 0   100% 0 0   67%
src / local_deep_research / web / routes / settings_routes.py api_get_types   50% 6 3 0   100% 0 0   50%
src / local_deep_research / web / routes / settings_routes.py api_get_ui_elements   50% 6 3 0   100% 0 0   50%
src / local_deep_research / web / routes / settings_routes.py api_get_available_models   47% 175 93 0   37% 54 8   45%
src / local_deep_research / web / routes / settings_routes.py _get_engine_icon_and_category   100% 22 0 0   100% 12 0   100%
src / local_deep_research / web / routes / settings_routes.py api_get_available_search_engines   76% 38 9 0   60% 10 4   73%
src / local_deep_research / web / routes / settings_routes.py api_get_search_favorites   100% 11 0 0   100% 2 0   100%
src / local_deep_research / web / routes / settings_routes.py api_update_search_favorites   94% 18 1 0   88% 8 1   92%
src / local_deep_research / web / routes / settings_routes.py api_toggle_search_favorite   96% 26 1 0   90% 10 1   94%
src / local_deep_research / web / routes / settings_routes.py main_config_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / settings_routes.py collections_config_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / settings_routes.py api_keys_config_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / settings_routes.py search_engines_config_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / settings_routes.py open_file_location   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / settings_routes.py inject_csrf_token   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / routes / settings_routes.py fix_corrupted_settings   0% 113 113 0   0% 86 0   0%
src / local_deep_research / web / routes / settings_routes.py api_get_warnings   50% 6 3 0   100% 0 0   50%
src / local_deep_research / web / routes / settings_routes.py check_ollama_status   70% 10 3 0   0% 2 0   58%
src / local_deep_research / web / routes / settings_routes.py api_get_rate_limiting_status   62% 13 5 0   50% 2 1   60%
src / local_deep_research / web / routes / settings_routes.py api_reset_engine_rate_limiting   62% 8 3 0   100% 0 0   62%
src / local_deep_research / web / routes / settings_routes.py api_cleanup_rate_limiting   67% 9 3 0   100% 0 0   67%
src / local_deep_research / web / routes / settings_routes.py get_bulk_settings   62% 16 6 0   75% 4 1   65%
src / local_deep_research / web / routes / settings_routes.py api_get_data_location   78% 18 4 0   50% 2 1   75%
src / local_deep_research / web / routes / settings_routes.py api_test_notification_url   0% 13 13 0   0% 2 0   0%
src / local_deep_research / web / routes / settings_routes.py (no function)   100% 131 0 0   100% 0 0   100%
src / local_deep_research / web / server_config.py get_server_config_path   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / server_config.py load_server_config   100% 19 0 0   100% 6 0   100%
src / local_deep_research / web / server_config.py save_server_config   100% 8 0 0   100% 0 0   100%
src / local_deep_research / web / server_config.py sync_from_settings   100% 18 0 0   100% 16 0   100%
src / local_deep_research / web / server_config.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / web / services / pdf_extraction_service.py PDFExtractionService.extract_text_and_metadata   100% 18 0 0   100% 6 0   100%
src / local_deep_research / web / services / pdf_extraction_service.py PDFExtractionService.extract_batch   100% 12 0 0   100% 4 0   100%
src / local_deep_research / web / services / pdf_extraction_service.py get_pdf_extraction_service   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web / services / pdf_extraction_service.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / web / services / pdf_service.py PDFService.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / services / pdf_service.py PDFService.markdown_to_pdf   100% 16 0 0   100% 2 0   100%
src / local_deep_research / web / services / pdf_service.py PDFService._markdown_to_html   100% 14 0 0   100% 6 0   100%
src / local_deep_research / web / services / pdf_service.py get_pdf_service   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web / services / pdf_service.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / web / services / research_service.py _parse_research_metadata   100% 9 0 0   100% 4 0   100%
src / local_deep_research / web / services / research_service.py get_citation_formatter   100% 5 0 0   100% 0 0   100%
src / local_deep_research / web / services / research_service.py export_report_to_memory   100% 10 0 0   100% 2 0   100%
src / local_deep_research / web / services / research_service.py save_research_strategy   88% 16 2 0   100% 2 0   89%
src / local_deep_research / web / services / research_service.py get_research_strategy   67% 9 3 0   100% 0 0   67%
src / local_deep_research / web / services / research_service.py start_research_process   100% 6 0 0   100% 0 0   100%
src / local_deep_research / web / services / research_service.py _generate_report_path   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / services / research_service.py run_research_process   27% 414 304 0   17% 112 17   25%
src / local_deep_research / web / services / research_service.py run_research_process.SettingsContext.__init__   86% 7 1 0   75% 4 1   82%
src / local_deep_research / web / services / research_service.py run_research_process.SettingsContext.get_setting   50% 4 2 0   50% 2 1   50%
src / local_deep_research / web / services / research_service.py run_research_process.progress_callback   43% 49 28 0   43% 30 11   43%
src / local_deep_research / web / services / research_service.py run_research_process.check_termination   0% 4 4 0   0% 2 0   0%
src / local_deep_research / web / services / research_service.py cleanup_research_resources   82% 28 5 0   75% 12 3   80%
src / local_deep_research / web / services / research_service.py handle_termination   80% 10 2 0   100% 0 0   80%
src / local_deep_research / web / services / research_service.py cancel_research   65% 34 12 0   70% 10 3   66%
src / local_deep_research / web / services / research_service.py (no function)   100% 35 0 0   100% 0 0   100%
src / local_deep_research / web / services / research_sources_service.py ResearchSourcesService.save_research_sources   81% 31 6 0   90% 10 1   83%
src / local_deep_research / web / services / research_sources_service.py ResearchSourcesService.get_research_sources   73% 11 3 0   100% 2 0   77%
src / local_deep_research / web / services / research_sources_service.py ResearchSourcesService.copy_sources_to_new_research   83% 18 3 0   100% 6 0   88%
src / local_deep_research / web / services / research_sources_service.py ResearchSourcesService.update_research_with_sources   100% 17 0 0   75% 4 1   95%
src / local_deep_research / web / services / research_sources_service.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / web / services / resource_service.py get_resources_for_research   100% 10 0 0   100% 2 0   100%
src / local_deep_research / web / services / resource_service.py add_resource   100% 9 0 0   100% 0 0   100%
src / local_deep_research / web / services / resource_service.py delete_resource   100% 14 0 0   100% 2 0   100%
src / local_deep_research / web / services / resource_service.py update_resource_content   100% 11 0 0   100% 2 0   100%
src / local_deep_research / web / services / resource_service.py (no function)   100% 8 0 0   100% 0 0   100%
src / local_deep_research / web / services / settings_service.py set_setting   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / services / settings_service.py get_all_settings   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / services / settings_service.py create_or_update_setting   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / services / settings_service.py bulk_update_settings   100% 14 0 0   100% 6 0   100%
src / local_deep_research / web / services / settings_service.py validate_setting   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / services / settings_service.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / web / services / socket_service.py SocketIOService.__new__   100% 6 0 0   100% 4 0   100%
src / local_deep_research / web / services / socket_service.py SocketIOService.__init_singleton   76% 29 7 0   30% 10 3   64%
src / local_deep_research / web / services / socket_service.py SocketIOService.__init_singleton.on_connect   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / services / socket_service.py SocketIOService.__init_singleton.on_disconnect   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / services / socket_service.py SocketIOService.__init_singleton.on_subscribe   0% 3 3 0   100% 0 0   0%
src / local_deep_research / web / services / socket_service.py SocketIOService.__init_singleton.on_error   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / services / socket_service.py SocketIOService.__init_singleton.on_default_error   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / services / socket_service.py SocketIOService.__log_info   100% 2 0 0   100% 2 0   100%
src / local_deep_research / web / services / socket_service.py SocketIOService.__log_error   100% 2 0 0   100% 2 0   100%
src / local_deep_research / web / services / socket_service.py SocketIOService.__log_exception   100% 2 0 0   100% 2 0   100%
src / local_deep_research / web / services / socket_service.py SocketIOService.emit_socket_event   100% 8 0 0   100% 2 0   100%
src / local_deep_research / web / services / socket_service.py SocketIOService.emit_to_subscribers   100% 20 0 0   100% 8 0   100%
src / local_deep_research / web / services / socket_service.py SocketIOService.__handle_connect   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / services / socket_service.py SocketIOService.__handle_disconnect   70% 20 6 0   100% 6 0   77%
src / local_deep_research / web / services / socket_service.py SocketIOService.__handle_subscribe   67% 12 4 0   50% 8 2   60%
src / local_deep_research / web / services / socket_service.py SocketIOService.__handle_socket_error   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / services / socket_service.py SocketIOService.__handle_default_error   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / services / socket_service.py SocketIOService.run   75% 8 2 0   100% 0 0   75%
src / local_deep_research / web / services / socket_service.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / web / themes / __init__.py ThemeRegistry.__new__   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web / themes / __init__.py ThemeRegistry.themes   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / themes / __init__.py ThemeRegistry.get_theme   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / themes / __init__.py ThemeRegistry.get_theme_ids   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / themes / __init__.py ThemeRegistry.get_themes_by_group   100% 6 0 0   100% 4 0   100%
src / local_deep_research / web / themes / __init__.py ThemeRegistry.get_combined_css   100% 17 0 0   80% 10 2   93%
src / local_deep_research / web / themes / __init__.py ThemeRegistry.get_themes_json   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / themes / __init__.py ThemeRegistry.get_metadata_json   100% 4 0 0   100% 2 0   100%
src / local_deep_research / web / themes / __init__.py ThemeRegistry.get_settings_options   100% 4 0 0   100% 2 0   100%
src / local_deep_research / web / themes / __init__.py ThemeRegistry.get_grouped_settings_options   100% 4 0 0   100% 2 0   100%
src / local_deep_research / web / themes / __init__.py ThemeRegistry.is_valid_theme   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / themes / __init__.py ThemeRegistry.clear_cache   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / themes / __init__.py get_themes   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / themes / __init__.py get_themes_json   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / themes / __init__.py get_theme_metadata   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / themes / __init__.py (no function)   100% 27 0 0   100% 0 0   100%
src / local_deep_research / web / themes / loader.py ThemeLoader.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / themes / loader.py ThemeLoader.parse_frontmatter   100% 8 0 0   100% 2 0   100%
src / local_deep_research / web / themes / loader.py ThemeLoader.extract_theme_id   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / themes / loader.py ThemeLoader.validate_css_variables   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / themes / loader.py ThemeLoader.load_theme   100% 21 0 0   100% 8 0   100%
src / local_deep_research / web / themes / loader.py ThemeLoader.get_css_content   75% 4 1 0   50% 2 1   67%
src / local_deep_research / web / themes / loader.py ThemeLoader.load_all_themes   81% 16 3 0   67% 12 2   75%
src / local_deep_research / web / themes / loader.py ThemeLoader.clear_cache   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / themes / loader.py (no function)   100% 18 0 0   100% 0 0   100%
src / local_deep_research / web / themes / schema.py ThemeMetadata.to_dict   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / themes / schema.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / web / utils / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / web / utils / formatters.py convert_debug_to_markdown   100% 21 0 0   100% 4 0   100%
src / local_deep_research / web / utils / formatters.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / utils / rate_limiter.py get_client_ip   100% 7 0 0   100% 4 0   100%
src / local_deep_research / web / utils / rate_limiter.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / web / utils / templates.py render_template_with_defaults   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / utils / templates.py (no function)   100% 4 0 0   100% 0 0   100%
src / local_deep_research / web / utils / theme_helper.py ThemeHelper.__init__   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web / utils / theme_helper.py ThemeHelper.init_app   100% 6 0 0   100% 0 0   100%
src / local_deep_research / web / utils / theme_helper.py ThemeHelper.get_themes   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / utils / theme_helper.py ThemeHelper.clear_cache   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / utils / theme_helper.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / web / utils / vite_helper.py ViteHelper.__init__   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web / utils / vite_helper.py ViteHelper.init_app   100% 6 0 0   100% 2 0   100%
src / local_deep_research / web / utils / vite_helper.py ViteHelper._load_manifest   100% 6 0 0   100% 2 0   100%
src / local_deep_research / web / utils / vite_helper.py ViteHelper.vite_hmr   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web / utils / vite_helper.py ViteHelper.vite_asset   100% 14 0 0   100% 10 0   100%
src / local_deep_research / web / utils / vite_helper.py ViteHelper._fallback_assets   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / utils / vite_helper.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / default_search_engines.py get_default_elasticsearch_config   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / default_search_engines.py get_default_search_engine_configs   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / default_search_engines.py (no function)   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / full_search.py FullSearchResults.__init__   100% 10 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / full_search.py FullSearchResults.check_urls   100% 15 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / full_search.py FullSearchResults.remove_boilerplate   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / full_search.py FullSearchResults.run   100% 27 0 0   92% 12 1   97%
src / local_deep_research / web_search_engines / engines / full_search.py FullSearchResults.invoke   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / full_search.py FullSearchResults.__call__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / full_search.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine.__init__   100% 8 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine._get_search_config   100% 21 0 0   89% 18 2   95%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine._get_available_engines   100% 26 0 0   100% 16 0   100%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine.analyze_query   48% 58 30 0   47% 38 2   48%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine._get_previews   95% 37 2 0   88% 8 1   93%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine._get_full_content   100% 13 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine._get_engine_instance   100% 14 0 0   67% 6 2   90%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine.invoke   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py _get_global_executor   73% 11 3 0   100% 4 0   80%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py shutdown_global_executor   75% 8 2 0   100% 2 0   80%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine.__init__   100% 16 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._check_api_key_availability   100% 10 0 0   100% 6 0   100%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._get_search_config   100% 14 0 0   92% 12 1   96%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._get_available_engines   78% 32 7 0   73% 22 4   76%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._get_available_generic_engines   31% 13 9 0   12% 8 1   24%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine.select_engines   94% 49 3 0   83% 30 5   90%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._get_engine_instance   100% 15 0 0   67% 6 2   90%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._execute_single_engine   100% 13 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._get_previews   84% 50 8 0   81% 16 3   83%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._get_full_content   83% 24 4 0   75% 12 3   81%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine.invoke   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py (no function)   100% 31 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py ArXivSearchEngine.__init__   100% 13 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py ArXivSearchEngine._get_search_results   100% 7 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py ArXivSearchEngine._get_previews   100% 15 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py ArXivSearchEngine._get_full_content   33% 61 41 0   50% 20 2   37%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py ArXivSearchEngine.run   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py ArXivSearchEngine.get_paper_details   73% 22 6 0   67% 6 2   71%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py ArXivSearchEngine.search_by_author   100% 7 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py ArXivSearchEngine.search_by_category   100% 7 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py (no function)   100% 21 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_brave.py BraveSearchEngine.__init__   86% 21 3 0   100% 8 0   90%
src / local_deep_research / web_search_engines / engines / search_engine_brave.py BraveSearchEngine._get_previews   100% 23 0 0   100% 6 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_brave.py BraveSearchEngine._get_full_content   66% 29 10 0   72% 18 5   68%
src / local_deep_research / web_search_engines / engines / search_engine_brave.py BraveSearchEngine.run   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_brave.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_collection.py CollectionSearchEngine.__init__   100% 5 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_collection.py CollectionSearchEngine._load_collection_embedding_settings   100% 16 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_collection.py CollectionSearchEngine.search   100% 39 0 0   100% 10 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_collection.py CollectionSearchEngine._get_document_url   88% 16 2 0   83% 6 1   86%
src / local_deep_research / web_search_engines / engines / search_engine_collection.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_ddg.py DuckDuckGoSearchEngine.__init__   100% 8 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_ddg.py DuckDuckGoSearchEngine.run   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_ddg.py DuckDuckGoSearchEngine._get_previews   100% 19 0 0   100% 10 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_ddg.py DuckDuckGoSearchEngine._get_full_content   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_ddg.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py ElasticsearchSearchEngine.__init__   100% 21 0 0   100% 6 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py ElasticsearchSearchEngine._get_previews   100% 26 0 0   100% 10 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py ElasticsearchSearchEngine._get_full_content   100% 24 0 0   100% 10 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py ElasticsearchSearchEngine.search_by_query_string   100% 8 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py ElasticsearchSearchEngine.search_by_dsl   100% 7 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py ElasticsearchSearchEngine._process_es_response   100% 16 0 0   100% 8 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine.__init__   100% 12 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._handle_rate_limits   78% 9 2 0   75% 4 1   77%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._optimize_github_query   83% 23 4 0   88% 8 1   84%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._search_github   64% 36 13 0   33% 12 2   56%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._get_readme_content   94% 16 1 0   75% 4 1   90%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._get_recent_issues   83% 12 2 0   100% 2 0   86%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._get_file_content   62% 16 6 0   50% 4 2   60%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._format_repository_preview   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._format_code_preview   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._format_issue_preview   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._format_user_preview   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._get_previews   89% 38 4 0   77% 22 3   85%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._get_full_content   90% 40 4 0   67% 24 8   81%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine.search_repository   64% 22 8 0   67% 6 2   64%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine.search_code   88% 16 2 0   50% 6 3   77%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine.search_issues   88% 17 2 0   50% 2 1   84%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine.set_search_type   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._filter_for_relevance   0% 21 21 0   0% 10 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py (no function)   100% 29 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_google_pse.py GooglePSESearchEngine.__init__   81% 31 6 0   100% 8 0   85%
src / local_deep_research / web_search_engines / engines / search_engine_google_pse.py GooglePSESearchEngine._validate_connection   100% 10 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_google_pse.py GooglePSESearchEngine._respect_rate_limit   0% 7 7 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_google_pse.py GooglePSESearchEngine._make_request   68% 34 11 0   60% 10 2   66%
src / local_deep_research / web_search_engines / engines / search_engine_google_pse.py GooglePSESearchEngine._get_previews   100% 27 0 0   92% 12 1   97%
src / local_deep_research / web_search_engines / engines / search_engine_google_pse.py GooglePSESearchEngine._get_full_content   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_google_pse.py (no function)   100% 18 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine.__init__   100% 20 0 0   100% 8 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine._optimize_query_for_guardian   83% 24 4 0   70% 10 3   79%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine._adapt_dates_for_query_type   32% 25 17 0   38% 8 1   33%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine._adaptive_search   15% 34 29 0   8% 12 1   13%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine._get_all_data   89% 35 4 0   70% 10 3   84%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine._get_previews   100% 11 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine._get_full_content   90% 10 1 0   83% 6 1   88%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine.run   67% 42 14 0   64% 22 6   66%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine.search_by_section   89% 9 1 0   50% 2 1   82%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine.get_recent_articles   92% 12 1 0   50% 2 1   86%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py (no function)   100% 21 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_library.py LibraryRAGSearchEngine.__init__   100% 9 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_library.py LibraryRAGSearchEngine.search   81% 73 14 0   65% 26 7   77%
src / local_deep_research / web_search_engines / engines / search_engine_library.py LibraryRAGSearchEngine._get_previews   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_library.py LibraryRAGSearchEngine._get_full_content   0% 24 24 0   0% 10 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_library.py LibraryRAGSearchEngine.close   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_library.py (no function)   100% 19 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py _get_file_loader   100% 12 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py _load_document   100% 12 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager.__init__   100% 19 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager.close   0% 6 6 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager.__enter__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager.__exit__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager.embeddings   100% 6 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager._initialize_embeddings   62% 13 5 0   50% 4 2   59%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager._store_chunks_to_db   0% 29 29 0   0% 6 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager._load_chunks_from_db   0% 16 16 0   0% 4 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager._delete_chunks_from_db   0% 17 17 0   0% 6 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager._load_or_create_vector_store   0% 12 12 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager._load_indexed_folders   75% 8 2 0   100% 2 0   80%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager._save_indexed_folders   67% 6 2 0   100% 0 0   67%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager.get_folder_hash   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager._get_index_path   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager._check_folder_modified   100% 0 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager._get_all_files   100% 3 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager._get_modified_files   0% 16 16 0   0% 10 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager._check_config_changed   100% 11 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager.index_folder   57% 76 33 0   43% 28 12   53%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager.search   0% 62 62 0   0% 30 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager.clear_cache   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager.get_indexed_folders_info   100% 9 0 0   75% 4 1   92%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine.__init__   100% 17 0 0   100% 6 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine._index_folders   88% 17 2 0   83% 12 2   86%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine._get_previews   94% 34 2 0   78% 18 4   88%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine._get_full_content   100% 17 0 0   67% 12 4   86%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine.run   88% 26 3 0   79% 14 3   85%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine.get_collections_info   94% 16 1 0   83% 6 1   91%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine.reindex_collection   89% 9 1 0   83% 6 1   87%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine.from_config   100% 20 0 0   75% 8 2   93%
src / local_deep_research / web_search_engines / engines / search_engine_local.py (no function)   100% 66 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local_all.py LocalAllSearchEngine.__init__   100% 13 0 0   75% 4 1   94%
src / local_deep_research / web_search_engines / engines / search_engine_local_all.py LocalAllSearchEngine._get_previews   100% 18 0 0   100% 6 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local_all.py LocalAllSearchEngine._get_full_content   100% 21 0 0   92% 12 1   97%
src / local_deep_research / web_search_engines / engines / search_engine_local_all.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_mojeek.py MojeekSearchEngine._is_valid_search_result   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_mojeek.py MojeekSearchEngine.__init__   71% 21 6 0   83% 6 1   74%
src / local_deep_research / web_search_engines / engines / search_engine_mojeek.py MojeekSearchEngine._get_search_results   97% 37 1 0   88% 16 2   94%
src / local_deep_research / web_search_engines / engines / search_engine_mojeek.py MojeekSearchEngine._get_previews   100% 10 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_mojeek.py MojeekSearchEngine._get_full_content   80% 10 2 0   100% 4 0   86%
src / local_deep_research / web_search_engines / engines / search_engine_mojeek.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_nasa_ads.py NasaAdsSearchEngine.__init__   73% 22 6 0   67% 6 2   71%
src / local_deep_research / web_search_engines / engines / search_engine_nasa_ads.py NasaAdsSearchEngine._get_previews   91% 54 5 0   86% 22 3   89%
src / local_deep_research / web_search_engines / engines / search_engine_nasa_ads.py NasaAdsSearchEngine._format_doc_preview   91% 35 3 0   86% 14 2   90%
src / local_deep_research / web_search_engines / engines / search_engine_nasa_ads.py NasaAdsSearchEngine._get_full_content   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_nasa_ads.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_openalex.py OpenAlexSearchEngine.__init__   71% 21 6 0   67% 6 2   70%
src / local_deep_research / web_search_engines / engines / search_engine_openalex.py OpenAlexSearchEngine._get_previews   93% 57 4 0   88% 24 3   91%
src / local_deep_research / web_search_engines / engines / search_engine_openalex.py OpenAlexSearchEngine._format_work_preview   90% 48 5 0   77% 22 5   86%
src / local_deep_research / web_search_engines / engines / search_engine_openalex.py OpenAlexSearchEngine._reconstruct_abstract   73% 11 3 0   100% 4 0   80%
src / local_deep_research / web_search_engines / engines / search_engine_openalex.py OpenAlexSearchEngine._get_full_content   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_openalex.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine.__init__   100% 18 0 0   100% 8 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine._make_request   100% 22 0 0   88% 8 1   97%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine._expand_query_with_llm   89% 18 2 0   75% 4 1   86%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine._multi_pass_search   95% 43 2 0   83% 18 3   92%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine._get_previews   93% 15 1 0   83% 6 1   90%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine._convert_document_to_preview   91% 98 9 0   78% 36 8   87%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine._get_full_content   84% 31 5 0   92% 12 1   86%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine.run   93% 15 1 0   83% 6 1   90%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine.arun   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine.test_connection   100% 6 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine.get_document_count   100% 5 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py (no function)   100% 23 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine.__init__   100% 28 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._get_result_count   100% 14 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._extract_core_terms   100% 5 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._expand_time_window   83% 18 3 0   79% 14 3   81%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._optimize_query_for_pubmed   61% 49 19 0   38% 24 5   53%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._simplify_query   100% 12 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._is_historical_focused   78% 18 4 0   100% 2 0   80%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._adaptive_search   94% 35 2 0   94% 16 1   94%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._search_pubmed   81% 27 5 0   50% 6 3   76%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._get_article_summaries   95% 40 2 0   67% 18 6   86%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._get_article_abstracts   82% 50 9 0   65% 26 7   76%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._get_article_detailed_metadata   69% 67 21 0   59% 46 11   65%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._create_enriched_content   70% 43 13 0   53% 36 9   62%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._find_pmc_ids   80% 25 5 0   71% 14 4   77%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._get_pmc_full_text   83% 35 6 0   50% 20 6   71%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._get_previews   69% 84 26 0   46% 54 17   60%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._get_full_content   63% 91 34 0   45% 64 23   55%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine.search_by_author   86% 7 1 0   50% 2 1   78%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine.search_by_journal   86% 7 1 0   50% 2 1   78%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine.search_recent   100% 9 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine.advanced_search   100% 10 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py (no function)   100% 34 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_retriever.py RetrieverSearchEngine.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_retriever.py RetrieverSearchEngine.run   100% 11 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_retriever.py RetrieverSearchEngine._convert_document_to_result   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_retriever.py RetrieverSearchEngine._get_previews   100% 11 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_retriever.py RetrieverSearchEngine._get_full_content   100% 4 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_retriever.py RetrieverSearchEngine.arun   100% 14 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_retriever.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_scaleserp.py ScaleSerpSearchEngine.__init__   76% 25 6 0   83% 6 1   77%
src / local_deep_research / web_search_engines / engines / search_engine_scaleserp.py ScaleSerpSearchEngine._get_previews   87% 60 8 0   77% 26 6   84%
src / local_deep_research / web_search_engines / engines / search_engine_scaleserp.py ScaleSerpSearchEngine._get_full_content   41% 32 19 0   45% 20 3   42%
src / local_deep_research / web_search_engines / engines / search_engine_scaleserp.py ScaleSerpSearchEngine.run   100% 11 0 0   62% 8 3   84%
src / local_deep_research / web_search_engines / engines / search_engine_scaleserp.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_searxng.py SearXNGSearchEngine._normalize_list   100% 15 0 0   80% 10 2   92%
src / local_deep_research / web_search_engines / engines / search_engine_searxng.py SearXNGSearchEngine._is_valid_search_result   100% 5 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_searxng.py SearXNGSearchEngine.__init__   100% 34 0 0   100% 6 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_searxng.py SearXNGSearchEngine._respect_rate_limit   100% 7 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_searxng.py SearXNGSearchEngine._get_search_results   77% 75 17 0   63% 30 9   73%
src / local_deep_research / web_search_engines / engines / search_engine_searxng.py SearXNGSearchEngine._get_previews   100% 16 0 0   100% 6 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_searxng.py SearXNGSearchEngine._get_full_content   75% 12 3 0   75% 4 1   75%
src / local_deep_research / web_search_engines / engines / search_engine_searxng.py SearXNGSearchEngine.invoke   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_searxng.py SearXNGSearchEngine.results   100% 12 0 0   100% 6 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_searxng.py SearXNGSearchEngine.get_self_hosting_instructions   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_searxng.py SearXNGSearchEngine.run   75% 12 3 0   100% 2 0   79%
src / local_deep_research / web_search_engines / engines / search_engine_searxng.py (no function)   100% 32 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine.__init__   93% 28 2 0   100% 4 0   94%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine._create_session   100% 9 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine.close   67% 6 2 0   50% 2 1   62%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine.__del__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine.__enter__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine.__exit__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine._respect_rate_limit   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine._make_request   87% 15 2 0   100% 6 0   90%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine._optimize_query   88% 17 2 0   75% 4 1   86%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine._direct_search   77% 22 5 0   70% 10 3   75%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine._adaptive_search   23% 48 37 0   15% 26 2   20%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine._get_paper_details   0% 16 16 0   0% 8 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine._get_previews   94% 33 2 0   100% 10 0   95%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine._get_full_content   89% 27 3 0   64% 22 8   78%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py (no function)   100% 28 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_serpapi.py SerpAPISearchEngine.__init__   84% 19 3 0   100% 8 0   89%
src / local_deep_research / web_search_engines / engines / search_engine_serpapi.py SerpAPISearchEngine._get_previews   100% 13 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_serpapi.py SerpAPISearchEngine._get_full_content   38% 29 18 0   44% 18 4   40%
src / local_deep_research / web_search_engines / engines / search_engine_serpapi.py SerpAPISearchEngine.run   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_serpapi.py (no function)   100% 13 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_serper.py SerperSearchEngine.__init__   75% 24 6 0   83% 6 1   77%
src / local_deep_research / web_search_engines / engines / search_engine_serper.py SerperSearchEngine._get_previews   90% 58 6 0   83% 24 4   88%
src / local_deep_research / web_search_engines / engines / search_engine_serper.py SerperSearchEngine._get_full_content   69% 32 10 0   75% 20 5   71%
src / local_deep_research / web_search_engines / engines / search_engine_serper.py SerperSearchEngine.run   100% 11 0 0   62% 8 3   84%
src / local_deep_research / web_search_engines / engines / search_engine_serper.py (no function)   100% 19 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_tavily.py TavilySearchEngine.__init__   87% 23 3 0   100% 6 0   90%
src / local_deep_research / web_search_engines / engines / search_engine_tavily.py TavilySearchEngine.__init__.TavilyWrapper.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_tavily.py TavilySearchEngine.__init__.TavilyWrapper.run   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_tavily.py TavilySearchEngine._get_previews   100% 32 0 0   100% 10 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_tavily.py TavilySearchEngine._get_full_content   39% 31 19 0   45% 20 5   41%
src / local_deep_research / web_search_engines / engines / search_engine_tavily.py TavilySearchEngine.run   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_tavily.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wayback.py WaybackSearchEngine.__init__   100% 6 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wayback.py WaybackSearchEngine._extract_urls_from_query   86% 29 4 0   80% 10 2   85%
src / local_deep_research / web_search_engines / engines / search_engine_wayback.py WaybackSearchEngine._format_timestamp   83% 12 2 0   100% 2 0   86%
src / local_deep_research / web_search_engines / engines / search_engine_wayback.py WaybackSearchEngine._get_wayback_snapshots   100% 29 0 0   92% 12 1   98%
src / local_deep_research / web_search_engines / engines / search_engine_wayback.py WaybackSearchEngine._get_previews   94% 17 1 0   88% 8 1   92%
src / local_deep_research / web_search_engines / engines / search_engine_wayback.py WaybackSearchEngine._remove_boilerplate   67% 9 3 0   100% 2 0   73%
src / local_deep_research / web_search_engines / engines / search_engine_wayback.py WaybackSearchEngine._get_wayback_content   100% 9 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wayback.py WaybackSearchEngine._get_full_content   77% 22 5 0   83% 6 1   79%
src / local_deep_research / web_search_engines / engines / search_engine_wayback.py WaybackSearchEngine.search_by_url   100% 9 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wayback.py WaybackSearchEngine.search_by_date_range   94% 18 1 0   83% 6 1   92%
src / local_deep_research / web_search_engines / engines / search_engine_wayback.py WaybackSearchEngine.get_latest_snapshot   82% 17 3 0   100% 4 0   86%
src / local_deep_research / web_search_engines / engines / search_engine_wayback.py (no function)   100% 22 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wikinews.py WikinewsSearchEngine.__init__   85% 13 2 0   50% 2 1   80%
src / local_deep_research / web_search_engines / engines / search_engine_wikinews.py WikinewsSearchEngine._optimize_query_for_wikinews   100% 18 0 0   100% 6 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wikinews.py WikinewsSearchEngine._adapt_date_range_for_query   84% 19 3 0   88% 8 1   85%
src / local_deep_research / web_search_engines / engines / search_engine_wikinews.py WikinewsSearchEngine._fetch_search_results   100% 13 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wikinews.py WikinewsSearchEngine._process_search_result   90% 21 2 0   62% 8 3   83%
src / local_deep_research / web_search_engines / engines / search_engine_wikinews.py WikinewsSearchEngine._fetch_full_content_and_pubdate   71% 21 6 0   100% 2 0   74%
src / local_deep_research / web_search_engines / engines / search_engine_wikinews.py WikinewsSearchEngine._get_previews   100% 16 0 0   70% 10 3   88%
src / local_deep_research / web_search_engines / engines / search_engine_wikinews.py WikinewsSearchEngine._get_full_content   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wikinews.py _clean_wikinews_snippet   100% 6 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wikinews.py (no function)   100% 30 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wikipedia.py WikipediaSearchEngine.__init__   100% 4 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wikipedia.py WikipediaSearchEngine._get_previews   100% 41 0 0   100% 8 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wikipedia.py WikipediaSearchEngine._get_full_content   93% 29 2 0   83% 6 1   91%
src / local_deep_research / web_search_engines / engines / search_engine_wikipedia.py WikipediaSearchEngine.get_summary   100% 7 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wikipedia.py WikipediaSearchEngine.get_page   95% 19 1 0   83% 6 1   92%
src / local_deep_research / web_search_engines / engines / search_engine_wikipedia.py WikipediaSearchEngine.set_language   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_wikipedia.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / rate_limiting / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / rate_limiting / __main__.py (no function)   0% 3 3 0   0% 2 0   0%
src / local_deep_research / web_search_engines / rate_limiting / exceptions.py (no function)   100% 6 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / detection.py is_llm_rate_limit_error   91% 22 2 0   94% 16 1   92%
src / local_deep_research / web_search_engines / rate_limiting / llm / detection.py extract_retry_after   89% 18 2 0   88% 8 1   88%
src / local_deep_research / web_search_engines / rate_limiting / llm / detection.py (no function)   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py AdaptiveLLMWait.__init__   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py AdaptiveLLMWait.__call__   100% 9 0 0   100% 6 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper   100% 11 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper.__init__   67% 6 2 0   50% 2 1   62%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper._should_rate_limit   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper._check_if_local_model   100% 10 0 0   100% 6 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper._get_rate_limit_key   100% 18 0 0   100% 10 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper.invoke   100% 13 0 0   75% 4 1   94%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper.invoke._invoke_with_retry   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper._do_invoke   100% 7 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper.__getattr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper.__str__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper.__repr__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py (no function)   100% 12 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py _get_db_imports   75% 8 2 0   100% 2 0   80%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.__init__   100% 17 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.__init__.get_setting_or_default   86% 7 1 0   50% 2 1   78%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker._apply_profile   100% 9 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker._load_estimates   100% 9 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker._ensure_estimates_loaded   10% 31 28 0   17% 12 2   12%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.get_wait_time   100% 20 0 0   100% 8 0   100%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.apply_rate_limit   100% 7 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.record_outcome   92% 13 1 0   83% 6 1   89%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker._update_estimate   48% 54 28 0   44% 18 2   47%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.get_stats   39% 23 14 0   40% 10 2   39%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.reset_engine   45% 22 12 0   88% 8 1   57%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.get_search_quality_stats   33% 12 8 0   17% 6 1   28%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker._get_quality_status   100% 9 0 0   100% 8 0   100%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.cleanup_old_data   25% 20 15 0   33% 6 2   27%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py get_tracker   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py (no function)   100% 26 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / retriever_registry.py RetrieverRegistry.__init__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / retriever_registry.py RetrieverRegistry.register   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / retriever_registry.py RetrieverRegistry.register_multiple   100% 4 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / retriever_registry.py RetrieverRegistry.get   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / retriever_registry.py RetrieverRegistry.unregister   100% 4 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / retriever_registry.py RetrieverRegistry.clear   100% 4 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / retriever_registry.py RetrieverRegistry.is_registered   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / retriever_registry.py RetrieverRegistry.list_registered   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / retriever_registry.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py AdaptiveWait.__init__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py AdaptiveWait.__call__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine._ensure_list   100% 19 0 0   93% 14 1   97%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine._load_engine_class   83% 12 2 0   100% 2 0   86%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine._check_api_key_availability   100% 8 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine.__init__   100% 23 0 0   100% 10 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine.max_filtered_results   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine.max_filtered_results   100% 4 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine.max_results   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine.max_results   100% 3 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine._get_adaptive_wait   100% 4 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine._record_retry_outcome   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine.run   89% 37 4 0   100% 8 0   91%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine.run._run_with_retry   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine.run._execute_search   96% 46 2 0   83% 18 1   92%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine.invoke   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine._filter_for_relevance   96% 57 2 0   91% 22 2   95%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine._get_previews   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine._get_full_content   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine.close   60% 5 2 0   100% 2 0   71%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine.__enter__   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py BaseSearchEngine.__exit__   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engine_base.py (no function)   100% 50 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engine_factory.py create_search_engine   68% 117 38 0   56% 72 16   63%
src / local_deep_research / web_search_engines / search_engine_factory.py _create_full_search_wrapper   79% 63 13 0   61% 44 7   72%
src / local_deep_research / web_search_engines / search_engine_factory.py get_search   88% 26 3 0   81% 16 3   86%
src / local_deep_research / web_search_engines / search_engine_factory.py (no function)   100% 11 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engines_config.py _get_setting   100% 13 0 0   100% 4 0   100%
src / local_deep_research / web_search_engines / search_engines_config.py _extract_per_engine_config   100% 11 0 0   100% 8 0   100%
src / local_deep_research / web_search_engines / search_engines_config.py search_config   97% 58 2 0   96% 28 1   97%
src / local_deep_research / web_search_engines / search_engines_config.py default_search_engine   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engines_config.py local_search_engines   100% 7 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engines_config.py (no function)   100% 11 0 0   100% 0 0   100%
Total     79% 39239 8121 2   70% 11672 1435   77%

No items found using the specified filter.