Coverage report: 48%

Files Functions Classes

coverage.py v7.12.0, created at 2026-01-11 00:51 +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__   0% 5 5 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer.explore   0% 30 30 0   0% 8 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer.generate_exploration_queries   0% 7 7 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._choose_strategy   0% 4 4 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._get_top_strategies   0% 4 4 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._generate_query_with_strategy   0% 15 15 0   0% 10 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._direct_search_query   0% 5 5 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._synonym_expansion_query   0% 6 6 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._category_exploration_query   0% 4 4 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._related_terms_query   0% 6 6 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._constraint_focused_query   0% 4 4 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._update_strategy_stats   0% 4 4 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._adapt_strategy   0% 5 5 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / adaptive_explorer.py AdaptiveExplorer._try_next_strategy   0% 6 6 0   0% 2 0   0%
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   69% 16 5 0   75% 4 1   70%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer._extract_candidates_from_results   0% 16 16 0   0% 10 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer._generate_answer_candidates   0% 15 15 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer._extract_entity_names   14% 14 12 0   17% 6 1   15%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py BaseCandidateExplorer._should_continue_exploration   89% 9 1 0   75% 4 1   85%
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   73% 15 4 0   62% 8 3   70%
src / local_deep_research / advanced_search_system / candidate_exploration / base_explorer.py (no function)   100% 36 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer.__init__   0% 3 3 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer.explore   0% 39 39 0   0% 14 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer.generate_exploration_queries   0% 11 11 0   0% 8 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._prioritize_constraints   0% 2 2 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._generate_constraint_queries   0% 13 13 0   0% 10 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._name_pattern_queries   0% 8 8 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._property_queries   0% 2 2 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._event_queries   0% 2 2 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._location_queries   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._cross_constraint_exploration   0% 7 7 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._combine_constraints_query   0% 4 4 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._early_validate_candidates   0% 7 7 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._quick_name_validation   0% 5 5 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._rank_by_constraint_alignment   0% 9 9 0   0% 8 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / constraint_guided_explorer.py ConstraintGuidedExplorer._basic_exploration   0% 5 5 0   100% 0 0   0%
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__   0% 6 6 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer.explore   0% 41 41 0   0% 14 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer.generate_exploration_queries   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._categorize_candidates   0% 7 7 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._determine_category   0% 18 18 0   0% 16 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._calculate_diversity_score   0% 14 14 0   0% 8 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._find_underrepresented_categories   0% 6 6 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._generate_diversity_queries   0% 26 26 0   0% 22 0   0%
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   0% 9 9 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._is_sufficiently_different   0% 10 10 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._final_diversity_selection   0% 12 12 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / diversity_explorer.py DiversityExplorer._rank_by_diversity   0% 9 9 0   0% 2 0   0%
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__   0% 4 4 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / parallel_explorer.py ParallelExplorer.explore   0% 35 35 0   0% 10 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / parallel_explorer.py ParallelExplorer.generate_exploration_queries   0% 11 11 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / parallel_explorer.py ParallelExplorer._generate_query_variations   0% 14 14 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / parallel_explorer.py ParallelExplorer._generate_candidate_based_queries   0% 6 6 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / parallel_explorer.py ParallelExplorer._generate_constraint_queries   0% 5 5 0   0% 2 0   0%
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   0% 3 3 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py SearchProgress.get_uncovered_entities   0% 7 7 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer.__init__   0% 4 4 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer.explore   0% 14 14 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer.generate_verification_searches   0% 10 10 0   0% 8 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer._extract_candidates_from_results   0% 18 18 0   0% 14 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer._update_entity_coverage   0% 5 5 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer.suggest_next_searches   0% 22 22 0   0% 22 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer._parallel_search   0% 8 8 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / candidate_exploration / progressive_explorer.py ProgressiveExplorer._parallel_search.search_query   0% 6 6 0   100% 0 0   0%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / candidates / base_candidate.py Candidate.calculate_score   0% 12 12 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / candidates / base_candidate.py Candidate.get_unverified_constraints   0% 5 5 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / candidates / base_candidate.py Candidate.get_weak_evidence   0% 5 5 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / candidates / base_candidate.py (no function)   100% 14 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__   0% 2 2 0   100% 0 0   0%
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   0% 4 4 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / base_constraint_checker.py BaseConstraintChecker._log_constraint_result   0% 2 2 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / base_constraint_checker.py BaseConstraintChecker._calculate_weighted_score   0% 3 3 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / base_constraint_checker.py (no function)   100% 24 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   65% 31 11 0   62% 8 3   64%
src / local_deep_research / advanced_search_system / constraint_checking / constraint_checker.py ConstraintChecker._gather_evidence_for_constraint   75% 4 1 0   50% 2 1   67%
src / local_deep_research / advanced_search_system / constraint_checking / constraint_checker.py (no function)   100% 19 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker.__init__   0% 8 8 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker.check_candidate   0% 32 32 0   0% 10 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker._evaluate_constraint_with_reevaluation   0% 19 19 0   0% 8 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker._should_early_reject   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker.should_reject_candidate_from_averages   0% 9 9 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker.should_reject_candidate   0% 13 13 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker._log_constraint_result_detailed   0% 3 3 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / dual_confidence_checker.py DualConfidenceChecker._llm_prescreen_candidate   0% 16 16 0   0% 6 0   0%
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   68% 19 6 0   50% 2 1   67%
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   0% 15 15 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / evidence_analyzer.py (no function)   100% 18 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   75% 12 3   92%
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   60% 15 6 0   60% 10 2   60%
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   0% 14 14 0   0% 8 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py IntelligentConstraintRelaxer._create_relaxed_constraint   55% 11 5 0   25% 8 2   42%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py IntelligentConstraintRelaxer._get_constraint_type   15% 20 17 0   11% 18 2   13%
src / local_deep_research / advanced_search_system / constraint_checking / intelligent_constraint_relaxer.py IntelligentConstraintRelaxer.analyze_relaxation_impact   0% 19 19 0   0% 8 0   0%
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   89% 9 1 0   83% 6 1   87%
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% 17 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraint_checking / strict_checker.py StrictChecker.__init__   0% 3 3 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / strict_checker.py StrictChecker.check_candidate   0% 21 21 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / strict_checker.py StrictChecker.should_reject_candidate   0% 9 9 0   0% 8 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / strict_checker.py StrictChecker._evaluate_constraint_strictly   0% 15 15 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / strict_checker.py StrictChecker._check_name_pattern_strictly   0% 19 19 0   0% 8 0   0%
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__   0% 3 3 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / threshold_checker.py ThresholdChecker.check_candidate   0% 28 28 0   0% 10 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / threshold_checker.py ThresholdChecker.should_reject_candidate   0% 6 6 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / constraint_checking / threshold_checker.py ThresholdChecker._check_constraint_satisfaction   0% 12 12 0   0% 2 0   0%
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   50% 2 1   75%
src / local_deep_research / advanced_search_system / constraints / base_constraint.py Constraint.to_search_terms   0% 9 9 0   0% 8 0   0%
src / local_deep_research / advanced_search_system / constraints / base_constraint.py Constraint.is_critical   0% 3 3 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / constraints / base_constraint.py (no function)   100% 23 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / constraints / constraint_analyzer.py ConstraintAnalyzer.__init__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / constraints / constraint_analyzer.py ConstraintAnalyzer.extract_constraints   0% 25 25 0   0% 12 0   0%
src / local_deep_research / advanced_search_system / constraints / constraint_analyzer.py ConstraintAnalyzer._parse_constraint_type   0% 2 2 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / constraints / constraint_analyzer.py ConstraintAnalyzer._parse_weight   0% 7 7 0   0% 6 0   0%
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   0% 2 2 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / evidence / base_evidence.py Evidence.__post_init__   0% 2 2 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / evidence / base_evidence.py (no function)   100% 26 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / evidence / evaluator.py EvidenceEvaluator.__init__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / evidence / evaluator.py EvidenceEvaluator.extract_evidence   0% 14 14 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / evidence / evaluator.py EvidenceEvaluator._parse_evidence_response   0% 15 15 0   0% 10 0   0%
src / local_deep_research / advanced_search_system / evidence / evaluator.py EvidenceEvaluator._parse_evidence_type   0% 2 2 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / evidence / evaluator.py EvidenceEvaluator._assess_match_quality   0% 5 5 0   0% 4 0   0%
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   0% 2 2 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / evidence / requirements.py EvidenceRequirements.get_minimum_confidence   0% 2 2 0   100% 0 0   0%
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__   92% 13 1 0   75% 4 1   88%
src / local_deep_research / advanced_search_system / filters / cross_engine_filter.py CrossEngineFilter.filter_results   99% 73 1 0   82% 50 9   92%
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   0% 8 8 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / filters / followup_relevance_filter.py FollowUpRelevanceFilter._select_relevant_sources   0% 36 36 0   0% 12 0   0%
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__   0% 20 20 0   0% 12 0   0%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.create_default   0% 8 8 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.__db_session   0% 4 4 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.__make_search_system   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.__analyze_journal_reputation   0% 15 15 0   0% 2 0   0%
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   0% 4 4 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.__check_result   0% 16 16 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py JournalReputationFilter.filter_results   0% 5 5 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / filters / journal_reputation_filter.py (no function)   100% 29 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   0% 1 1 0   100% 0 0   0%
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   0% 8 8 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.get_findings   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.clear_findings   0% 3 3 0   0% 2 0   0%
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   75% 12 3 0   50% 2 1   71%
src / local_deep_research / advanced_search_system / findings / repository.py FindingsRepository.synthesize_findings   0% 115 115 0   0% 60 0   0%
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 / 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   0% 4 4 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / knowledge / base_knowledge.py BaseKnowledgeGenerator._validate_links   0% 7 7 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / knowledge / base_knowledge.py BaseKnowledgeGenerator._extract_key_points   0% 1 1 0   100% 0 0   0%
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__   0% 3 3 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler.build_context   0% 3 3 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler._extract_findings   0% 10 10 0   0% 8 0   0%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler._extract_sources   0% 12 12 0   0% 10 0   0%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler._extract_entities   0% 11 11 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler._create_summary   0% 3 3 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler._extract_metadata   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler.summarize_for_followup   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler._generate_summary   0% 22 22 0   0% 14 0   0%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler.identify_gaps   0% 11 11 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler.format_for_settings_snapshot   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / followup_context_manager.py FollowUpContextHandler.get_relevant_context_for_llm   0% 14 14 0   0% 8 0   0%
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   0% 10 10 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / knowledge / standard_knowledge.py StandardKnowledge.generate_sub_knowledge   0% 7 7 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / standard_knowledge.py StandardKnowledge.generate   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / standard_knowledge.py StandardKnowledge.compress_knowledge   0% 10 10 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / knowledge / standard_knowledge.py StandardKnowledge.format_citations   0% 6 6 0   0% 4 0   0%
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 / 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   0% 4 4 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / questions / atomic_fact_question.py AtomicFactQuestionGenerator._decompose_to_atomic_facts   0% 16 16 0   0% 10 0   0%
src / local_deep_research / advanced_search_system / questions / atomic_fact_question.py AtomicFactQuestionGenerator._generate_gap_filling_questions   0% 17 17 0   0% 12 0   0%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / questions / base_question.py BaseQuestionGenerator._format_previous_questions   0% 6 6 0   0% 4 0   0%
src / local_deep_research / advanced_search_system / questions / base_question.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator.__init__   0% 5 5 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator.generate_questions   0% 5 5 0   0% 2 0   0%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator._extract_entities   0% 15 15 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator._expand_temporal_ranges   0% 13 13 0   0% 8 0   0%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator._generate_initial_searches   0% 34 34 0   0% 32 0   0%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator._generate_progressive_searches   0% 47 47 0   0% 40 0   0%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator._format_previous_searches   0% 12 12 0   0% 10 0   0%
src / local_deep_research / advanced_search_system / questions / browsecomp_question.py BrowseCompQuestionGenerator._was_searched   0% 7 7 0   0% 8 0   0%
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__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / questions / decomposition_question.py DecompositionQuestionGenerator.generate_questions   0% 87 87 0   0% 62 0   0%
src / local_deep_research / advanced_search_system / questions / decomposition_question.py DecompositionQuestionGenerator._generate_default_questions   0% 36 36 0   0% 26 0   0%
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   0% 19 19 0   0% 6 0   0%
src / local_deep_research / advanced_search_system / questions / entity_aware_question.py EntityAwareQuestionGenerator.generate_sub_questions   0% 23 23 0   0% 10 0   0%
src / local_deep_research / advanced_search_system / questions / entity_aware_question.py (no function)   100% 7 0 0   100% 0 0   100%
src / local_deep_research / advanced_search_system / questions / flexible_browsecomp_question.py FlexibleBrowseCompQuestionGenerator._generate_progressive_searches   0% 22 22 0   0% 14 0   0%
src / local_deep_research / advanced_search_system / questions / flexible_browsecomp_question.py (no function)   0% 4 4 0   100% 0 0   0%
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__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / questions / followup / base_followup_question.py BaseFollowUpQuestionGenerator.set_follow_up_context   0% 1 1 0   100% 0 0   0%
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   0% 1 1 0   100% 0 0   0%
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   0% 4 4 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / questions / followup / llm_followup_question.py LLMFollowUpQuestionGenerator.generate_questions   0% 1 1 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / questions / followup / llm_followup_question.py (no function)   0% 6 6 0   100% 0 0   0%
src / local_deep_research / advanced_search_system / questions / followup / simple_followup_question.py SimpleFollowUpQuestionGenerator.generate_contextualized_query   0% 3 3 0   100% 0 0   0%
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   0% 7 7 0   0% 2 0   0%
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   87% 15 2 0   50% 4 2   79%
src / local_deep_research / advanced_search_system / questions / standard_question.py StandardQuestionGenerator.generate_sub_questions   0% 19 19 0   0% 8 0   0%
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 / 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   0% 11 11 0   0% 6 0   0%
src / local_deep_research / api / benchmark_functions.py evaluate_browsecomp   0% 11 11 0   0% 6 0   0%
src / local_deep_research / api / benchmark_functions.py evaluate_xbench_deepsearch   0% 11 11 0   0% 6 0   0%
src / local_deep_research / api / benchmark_functions.py get_available_benchmarks   0% 1 1 0   100% 0 0   0%
src / local_deep_research / api / benchmark_functions.py compare_configurations   0% 39 39 0   0% 12 0   0%
src / local_deep_research / api / benchmark_functions.py (no function)   0% 10 10 0   100% 0 0   0%
src / local_deep_research / api / client.py LDRClient.__init__   0% 5 5 0   100% 0 0   0%
src / local_deep_research / api / client.py LDRClient.login   0% 26 26 0   0% 6 0   0%
src / local_deep_research / api / client.py LDRClient._api_headers   0% 3 3 0   0% 2 0   0%
src / local_deep_research / api / client.py LDRClient.quick_research   0% 21 21 0   0% 12 0   0%
src / local_deep_research / api / client.py LDRClient.wait_for_research   0% 15 15 0   0% 10 0   0%
src / local_deep_research / api / client.py LDRClient.get_settings   0% 6 6 0   0% 4 0   0%
src / local_deep_research / api / client.py LDRClient.update_setting   0% 4 4 0   0% 2 0   0%
src / local_deep_research / api / client.py LDRClient.get_history   0% 11 11 0   0% 8 0   0%
src / local_deep_research / api / client.py LDRClient.logout   0% 6 6 0   0% 2 0   0%
src / local_deep_research / api / client.py LDRClient.submit_benchmark   0% 2 2 0   100% 0 0   0%
src / local_deep_research / api / client.py LDRClient.get_benchmarks   0% 4 4 0   0% 2 0   0%
src / local_deep_research / api / client.py LDRClient.__enter__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / api / client.py LDRClient.__exit__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / api / client.py quick_query   0% 5 5 0   0% 2 0   0%
src / local_deep_research / api / client.py (no function)   100% 20 0 0   100% 0 0   100%
src / local_deep_research / api / research_functions.py _init_search_system   58% 26 11 0   56% 16 3   57%
src / local_deep_research / api / research_functions.py quick_summary   93% 41 3 0   86% 22 3   90%
src / local_deep_research / api / research_functions.py generate_report   75% 36 9 0   73% 22 6   74%
src / local_deep_research / api / research_functions.py detailed_research   100% 19 0 0   100% 8 0   100%
src / local_deep_research / api / research_functions.py analyze_documents   0% 38 38 0   0% 14 0   0%
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   83% 12 2 0   75% 4 1   81%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager._load_defaults   82% 22 4 0   83% 12 2   82%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager.create_or_update_setting   0% 9 9 0   0% 4 0   0%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager.delete_setting   50% 4 2 0   50% 2 1   50%
src / local_deep_research / api / settings_utils.py InMemorySettingsManager.import_settings   0% 9 9 0   0% 8 0   0%
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 (no function)   100% 21 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   0% 27 27 0   0% 22 0   0%
src / local_deep_research / benchmarks / benchmark_functions.py evaluate_browsecomp   0% 27 27 0   0% 22 0   0%
src / local_deep_research / benchmarks / benchmark_functions.py evaluate_xbench_deepsearch   0% 27 27 0   0% 22 0   0%
src / local_deep_research / benchmarks / benchmark_functions.py get_available_benchmarks   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / benchmark_functions.py compare_configurations   0% 38 38 0   0% 12 0   0%
src / local_deep_research / benchmarks / benchmark_functions.py (no function)   0% 11 11 0   100% 0 0   0%
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   0% 42 42 0   0% 12 0   0%
src / local_deep_research / benchmarks / comparison / evaluator.py _evaluate_single_configuration   0% 36 36 0   0% 2 0   0%
src / local_deep_research / benchmarks / comparison / evaluator.py _calculate_average_metrics   0% 31 31 0   0% 20 0   0%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_comparison_visualizations   0% 23 23 0   0% 2 0   0%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_metric_comparison_chart   0% 30 30 0   0% 14 0   0%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_spider_chart   0% 37 37 0   0% 8 0   0%
src / local_deep_research / benchmarks / comparison / evaluator.py _create_spider_chart.radar_factory   0% 12 12 0   100% 0 0   0%
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   0% 42 42 0   0% 14 0   0%
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__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / comparison / results.py Benchmark_results.add_result   0% 4 4 0   100% 0 0   0%
src / local_deep_research / benchmarks / comparison / results.py Benchmark_results.get_all   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / comparison / results.py Benchmark_results.get_best   0% 6 6 0   0% 6 0   0%
src / local_deep_research / benchmarks / comparison / results.py Benchmark_results._load_results   0% 5 5 0   100% 0 0   0%
src / local_deep_research / benchmarks / comparison / results.py Benchmark_results._save_results   0% 2 2 0   100% 0 0   0%
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% 33 33 0   0% 12 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   0% 3 3 0   0% 2 0   0%
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   0% 1 1 0   100% 0 0   0%
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__   0% 12 12 0   0% 2 0   0%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.start   0% 13 13 0   0% 4 0   0%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.stop   0% 8 8 0   0% 4 0   0%
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   0% 4 4 0   100% 0 0   0%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.get_process_stats   0% 6 6 0   0% 2 0   0%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.get_system_stats   0% 7 7 0   0% 2 0   0%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.get_combined_stats   0% 13 13 0   0% 10 0   0%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.print_summary   0% 14 14 0   0% 4 0   0%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py ResourceMonitor.export_data   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / efficiency / resource_monitor.py check_system_resources   0% 13 13 0   0% 2 0   0%
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__   0% 4 4 0   100% 0 0   0%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.start   0% 3 3 0   100% 0 0   0%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.stop   0% 3 3 0   0% 2 0   0%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.start_timer   0% 3 3 0   0% 2 0   0%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.stop_timer   0% 13 13 0   0% 4 0   0%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.timer   0% 4 4 0   100% 0 0   0%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.get_timings   0% 7 7 0   0% 6 0   0%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.get_summary   0% 15 15 0   0% 12 0   0%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py SpeedProfiler.print_summary   0% 10 10 0   0% 4 0   0%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py time_function   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / efficiency / speed_profiler.py time_function.wrapper   0% 5 5 0   100% 0 0   0%
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__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / evaluators / base.py BaseBenchmarkEvaluator.get_name   0% 1 1 0   100% 0 0   0%
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   0% 3 3 0   100% 0 0   0%
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__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / evaluators / browsecomp.py BrowseCompEvaluator.evaluate   0% 10 10 0   100% 0 0   0%
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__   0% 8 8 0   0% 2 0   0%
src / local_deep_research / benchmarks / evaluators / composite.py CompositeBenchmarkEvaluator.evaluate   0% 16 16 0   0% 4 0   0%
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__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / evaluators / simpleqa.py SimpleQAEvaluator.evaluate   0% 12 12 0   0% 2 0   0%
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   90% 41 4 0   50% 8 2   84%
src / local_deep_research / benchmarks / graders.py grade_results   0% 66 66 0   0% 24 0   0%
src / local_deep_research / benchmarks / graders.py human_evaluation   0% 48 48 0   0% 18 0   0%
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   95% 22 1   98%
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   90% 10 1   96%
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   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / optimization / api.py optimize_for_speed   0% 3 3 0   100% 0 0   0%
src / local_deep_research / benchmarks / optimization / api.py optimize_for_quality   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / optimization / api.py optimize_for_efficiency   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / optimization / api.py get_default_param_space   0% 1 1 0   100% 0 0   0%
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__   0% 23 23 0   0% 2 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer.optimize   0% 27 27 0   0% 6 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._get_default_param_space   0% 1 1 0   100% 0 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._objective   0% 27 27 0   0% 14 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._run_experiment   0% 22 22 0   100% 0 0   0%
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   0% 24 24 0   0% 12 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._create_visualizations   0% 12 12 0   0% 4 0   0%
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   0% 28 28 0   0% 6 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._create_custom_visualizations   0% 6 6 0   0% 2 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._create_quality_vs_speed_plot   0% 49 49 0   0% 10 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._create_parameter_evolution_plots   0% 33 33 0   0% 10 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py OptunaOptimizer._create_duration_vs_score_plot   0% 32 32 0   0% 8 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py optimize_parameters   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py optimize_for_speed   0% 3 3 0   100% 0 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py optimize_for_quality   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / optimization / optuna_optimizer.py optimize_for_efficiency   0% 2 2 0   100% 0 0   0%
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   0% 3 3 0   0% 2 0   0%
src / local_deep_research / benchmarks / runners.py run_benchmark   0% 99 99 0   0% 40 0   0%
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   0% 51 51 0   0% 22 0   0%
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 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% 52 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   0% 3 3 0   100% 0 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkQueueTracker.update_task_status   0% 5 5 0   0% 2 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkQueueTracker.get_task_status   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkQueueTracker.remove_task   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkQueueTracker.cleanup_completed_tasks   0% 15 15 0   0% 12 0   0%
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   29% 7 5 0   100% 0 0   29%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.generate_config_hash   0% 4 4 0   100% 0 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.generate_query_hash   0% 2 2 0   100% 0 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.create_benchmark_run   0% 14 14 0   100% 0 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.get_existing_results   0% 14 14 0   0% 4 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.start_benchmark   0% 36 36 0   0% 8 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService._run_benchmark_thread   0% 71 71 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   0% 15 15 0   0% 10 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService._process_benchmark_task   0% 45 45 0   0% 4 0   0%
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   0% 34 34 0   0% 12 0   0%
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   0% 7 7 0   100% 0 0   0%
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   0% 17 17 0   0% 8 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.get_benchmark_status   0% 53 53 0   0% 18 0   0%
src / local_deep_research / benchmarks / web_api / benchmark_service.py BenchmarkService.cancel_benchmark   0% 9 9 0   0% 2 0   0%
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 get_setting_from_snapshot   100% 1 0 0   100% 0 0   100%
src / local_deep_research / config / llm_config.py is_openai_available   100% 5 0 0   100% 0 0   100%
src / local_deep_research / config / llm_config.py is_anthropic_available   60% 5 2 0   100% 0 0   60%
src / local_deep_research / config / llm_config.py is_openai_endpoint_available   60% 5 2 0   100% 0 0   60%
src / local_deep_research / config / llm_config.py is_ollama_available   73% 22 6 0   100% 2 0   75%
src / local_deep_research / config / llm_config.py is_vllm_available   0% 8 8 0   100% 0 0   0%
src / local_deep_research / config / llm_config.py is_lmstudio_available   100% 7 0 0   100% 0 0   100%
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_llm   48% 196 101 0   51% 92 15   49%
src / local_deep_research / config / llm_config.py get_llm.get_context_window_size   75% 8 2 0   75% 4 1   75%
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   46% 24 13 0   29% 14 2   39%
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   0% 5 5 0   100% 0 0   0%
src / local_deep_research / config / paths.py get_models_directory   0% 5 5 0   100% 0 0   0%
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 get_settings_context   100% 3 0 0   100% 2 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 (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / constants.py (no function)   100% 3 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 init_auth_database   100% 9 0 0   100% 2 0   100%
src / local_deep_research / database / auth_db.py get_auth_db_session   83% 6 1 0   50% 2 1   75%
src / local_deep_research / database / auth_db.py (no function)   100% 11 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   50% 2 1   80%
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% 6 0 0   100% 0 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager._get_pool_kwargs   67% 3 1 0   50% 2 1   60%
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._check_encryption_available   91% 33 3 0   75% 4 1   89%
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% 16 16 0   0% 4 0   0%
src / local_deep_research / database / encrypted_db.py DatabaseManager.create_user_database   78% 46 10 0   80% 10 2   79%
src / local_deep_research / database / encrypted_db.py DatabaseManager.create_user_database.create_sqlcipher_connection   89% 9 1 0   50% 2 1   82%
src / local_deep_research / database / encrypted_db.py DatabaseManager.open_user_database   74% 31 8 0   75% 8 2   74%
src / local_deep_research / database / encrypted_db.py DatabaseManager.open_user_database.create_sqlcipher_connection   89% 9 1 0   50% 2 1   82%
src / local_deep_research / database / encrypted_db.py DatabaseManager.get_session   100% 6 0 0   100% 2 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.close_user_database   100% 4 0 0   100% 2 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.check_database_integrity   62% 16 6 0   67% 6 2   64%
src / local_deep_research / database / encrypted_db.py DatabaseManager.change_password   68% 19 6 0   67% 6 2   68%
src / local_deep_research / database / encrypted_db.py DatabaseManager.user_exists   100% 6 0 0   100% 0 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.get_memory_usage   100% 1 0 0   100% 0 0   100%
src / local_deep_research / database / encrypted_db.py DatabaseManager.create_thread_safe_session_for_metrics   82% 11 2 0   75% 4 1   80%
src / local_deep_research / database / encrypted_db.py DatabaseManager.create_thread_safe_session_for_metrics.create_thread_connection   69% 13 4 0   50% 2 1   67%
src / local_deep_research / database / encrypted_db.py (no function)   100% 28 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   83% 12 2 0   100% 2 0   86%
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   26% 23 17 0   25% 4 1   26%
src / local_deep_research / database / initialize.py _run_migrations   100% 6 0 0   50% 2 1   88%
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   69% 16 5 0   100% 4 0   75%
src / local_deep_research / database / library_init.py ensure_default_library_collection   80% 15 3 0   100% 2 0   82%
src / local_deep_research / database / library_init.py initialize_library_for_user   75% 12 3 0   100% 0 0   75%
src / local_deep_research / database / library_init.py get_default_library_id   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / library_init.py get_source_type_id   0% 9 9 0   0% 2 0   0%
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__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / library.py UploadBatch.__repr__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / library.py Document.__repr__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / database / models / library.py DocumentBlob.__repr__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / database / models / library.py Collection.__repr__   0% 1 1 0   100% 0 0   0%
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__   0% 1 1 0   100% 0 0   0%
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__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / library.py RAGIndex.__repr__   0% 1 1 0   100% 0 0   0%
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__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / models / library.py CollectionFolderFile.__repr__   0% 1 1 0   100% 0 0   0%
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__   100% 1 0 0   100% 0 0   100%
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% 126 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.update_queue_status   0% 10 10 0   0% 4 0   0%
src / local_deep_research / database / queue_service.py UserQueueService.get_queue_status   75% 4 1 0   50% 2 1   67%
src / local_deep_research / database / queue_service.py UserQueueService.add_task_metadata   0% 4 4 0   100% 0 0   0%
src / local_deep_research / database / queue_service.py UserQueueService.update_task_status   17% 12 10 0   17% 6 1   17%
src / local_deep_research / database / queue_service.py UserQueueService.get_pending_tasks   0% 2 2 0   100% 0 0   0%
src / local_deep_research / database / queue_service.py UserQueueService.cleanup_old_tasks   0% 4 4 0   100% 0 0   0%
src / local_deep_research / database / queue_service.py UserQueueService.get_active_task_count   0% 2 2 0   100% 0 0   0%
src / local_deep_research / database / queue_service.py UserQueueService.get_queued_task_count   0% 2 2 0   100% 0 0   0%
src / local_deep_research / database / queue_service.py UserQueueService._increment_queue_count   0% 6 6 0   0% 2 0   0%
src / local_deep_research / database / queue_service.py UserQueueService._update_queue_counts   0% 7 7 0   0% 2 0   0%
src / local_deep_research / database / queue_service.py (no function)   100% 16 0 0   100% 0 0   100%
src / local_deep_research / database / session_context.py get_user_db_session   71% 45 13 0   79% 28 4   74%
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   0% 4 4 0   100% 0 0   0%
src / local_deep_research / database / session_context.py ensure_db_session   0% 3 3 0   100% 0 0   0%
src / local_deep_research / database / session_context.py ensure_db_session.wrapper   0% 17 17 0   0% 8 0   0%
src / local_deep_research / database / session_context.py DatabaseAccessMixin.get_db_session   0% 5 5 0   100% 0 0   0%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / session_passwords.py SessionPasswordStore.retrieve   0% 1 1 0   100% 0 0   0%
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_key_from_password   100% 5 0 0   100% 0 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_rekey   71% 7 2 0   50% 2 1   67%
src / local_deep_research / database / sqlcipher_utils.py get_sqlcipher_settings   100% 3 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_utils.py apply_sqlcipher_pragmas   100% 6 0 0   100% 2 0   100%
src / local_deep_research / database / sqlcipher_utils.py apply_performance_pragmas   100% 10 0 0   100% 0 0   100%
src / local_deep_research / database / sqlcipher_utils.py verify_sqlcipher_connection   57% 7 3 0   100% 0 0   57%
src / local_deep_research / database / sqlcipher_utils.py create_sqlcipher_connection   0% 15 15 0   0% 2 0   0%
src / local_deep_research / database / sqlcipher_utils.py (no function)   100% 18 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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / temp_auth.py TemporaryAuthStore.retrieve   0% 1 1 0   100% 0 0   0%
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   86% 22 3 0   83% 6 1   86%
src / local_deep_research / database / thread_local_session.py ThreadLocalSessionManager.get_current_session   0% 3 3 0   0% 2 0   0%
src / local_deep_research / database / thread_local_session.py ThreadLocalSessionManager._cleanup_thread_session   80% 10 2 0   50% 2 1   75%
src / local_deep_research / database / thread_local_session.py ThreadLocalSessionManager.cleanup_thread   0% 6 6 0   0% 4 0   0%
src / local_deep_research / database / thread_local_session.py ThreadLocalSessionManager.cleanup_all   0% 4 4 0   0% 2 0   0%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / thread_local_session.py cleanup_current_thread   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / thread_local_session.py ThreadSessionContext.__init__   0% 3 3 0   100% 0 0   0%
src / local_deep_research / database / thread_local_session.py ThreadSessionContext.__enter__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / database / thread_local_session.py ThreadSessionContext.__exit__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / database / thread_local_session.py (no function)   100% 20 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   82% 28 5 0   79% 14 3   81%
src / local_deep_research / database / thread_metrics.py ThreadSafeMetricsWriter.write_token_metrics   0% 4 4 0   100% 0 0   0%
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   0% 3 3 0   0% 2 0   0%
src / local_deep_research / defaults / __init__.py list_default_files   0% 1 1 0   100% 0 0   0%
src / local_deep_research / defaults / __init__.py ensure_defaults_exist   0% 8 8 0   0% 6 0   0%
src / local_deep_research / defaults / __init__.py (no function)   100% 7 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   0% 5 5 0   0% 2 0   0%
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   24% 37 28 0   12% 8 1   22%
src / local_deep_research / domain_classifier / classifier.py DomainClassifier.classify_all_domains   0% 49 49 0   0% 18 0   0%
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   62% 8 3   89%
src / local_deep_research / domain_classifier / classifier.py (no function)   100% 19 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   50% 2 1   88%
src / local_deep_research / embeddings / embeddings_config.py is_sentence_transformers_available   0% 2 2 0   100% 0 0   0%
src / local_deep_research / embeddings / embeddings_config.py is_ollama_embeddings_available   0% 2 2 0   100% 0 0   0%
src / local_deep_research / embeddings / embeddings_config.py is_openai_embeddings_available   0% 2 2 0   100% 0 0   0%
src / local_deep_research / embeddings / embeddings_config.py get_available_embedding_providers   0% 8 8 0   0% 6 0   0%
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.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% 23 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_available_models   100% 3 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / implementations / ollama.py (no function)   100% 20 0 0   100% 0 0   100%
src / local_deep_research / embeddings / providers / implementations / openai.py OpenAIEmbeddingsProvider.create_embeddings   0% 22 22 0   0% 14 0   0%
src / local_deep_research / embeddings / providers / implementations / openai.py OpenAIEmbeddingsProvider.is_available   0% 5 5 0   100% 0 0   0%
src / local_deep_research / embeddings / providers / implementations / openai.py OpenAIEmbeddingsProvider.get_available_models   0% 17 17 0   0% 6 0   0%
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   75% 8 2 0   50% 4 2   67%
src / local_deep_research / embeddings / providers / implementations / sentence_transformers.py SentenceTransformersProvider.is_available   0% 1 1 0   100% 0 0   0%
src / local_deep_research / embeddings / providers / implementations / sentence_transformers.py SentenceTransformersProvider.get_available_models   0% 1 1 0   100% 0 0   0%
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   0% 29 29 0   0% 16 0   0%
src / local_deep_research / embeddings / splitters / text_splitter_registry.py is_semantic_chunker_available   0% 2 2 0   100% 0 0   0%
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   88% 24 3   95%
src / local_deep_research / error_handling / report_generator.py ErrorReportGenerator._get_technical_context   100% 27 0 0   95% 20 1   98%
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 / 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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / followup_research / models.py (no function)   100% 20 0 0   100% 0 0   100%
src / local_deep_research / followup_research / routes.py prepare_followup   0% 23 23 0   0% 4 0   0%
src / local_deep_research / followup_research / routes.py start_followup   0% 57 57 0   0% 12 0   0%
src / local_deep_research / followup_research / routes.py (no function)   100% 12 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   48% 25 13 0   33% 6 2   45%
src / local_deep_research / followup_research / service.py FollowUpResearchService.prepare_research_context   67% 6 2 0   50% 2 1   62%
src / local_deep_research / followup_research / service.py FollowUpResearchService.perform_followup   0% 7 7 0   0% 2 0   0%
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 / 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   0% 3 3 0   0% 2 0   0%
src / local_deep_research / library / download_management / failure_classifier.py BaseFailure.get_cooldown_remaining   0% 6 6 0   0% 4 0   0%
src / local_deep_research / library / download_management / failure_classifier.py BaseFailure.to_dict   0% 1 1 0   100% 0 0   0%
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   50% 2 1   89%
src / local_deep_research / library / download_management / failure_classifier.py FailureClassifier.classify_failure   59% 27 11 0   50% 24 4   55%
src / local_deep_research / library / download_management / failure_classifier.py FailureClassifier.classify_from_exception   0% 3 3 0   100% 0 0   0%
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   0% 5 5 0   0% 2 0   0%
src / local_deep_research / library / download_management / filters / resource_filter.py ResourceFilter._apply_legacy_file_check   0% 1 1 0   100% 0 0   0%
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   0% 7 7 0   0% 4 0   0%
src / local_deep_research / library / download_management / filters / resource_filter.py ResourceFilter.should_skip_resource   0% 2 2 0   100% 0 0   0%
src / local_deep_research / library / download_management / filters / resource_filter.py ResourceFilter.get_retry_statistics   0% 1 1 0   100% 0 0   0%
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   88% 8 1 0   83% 6 1   86%
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__   0% 4 4 0   100% 0 0   0%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.should_retry_resource   0% 2 2 0   100% 0 0   0%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.record_attempt   0% 7 7 0   0% 2 0   0%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.filter_resources   0% 19 19 0   0% 8 0   0%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.get_filter_summary   0% 4 4 0   0% 2 0   0%
src / local_deep_research / library / download_management / retry_manager.py RetryManager._get_resource_status   0% 7 7 0   0% 6 0   0%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.get_retry_statistics   0% 2 2 0   100% 0 0   0%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.reset_daily_retry_counters   0% 6 6 0   100% 0 0   0%
src / local_deep_research / library / download_management / retry_manager.py RetryManager.clear_old_permanent_failures   0% 1 1 0   100% 0 0   0%
src / local_deep_research / library / download_management / retry_manager.py (no function)   100% 27 0 0   100% 0 0   100%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker.__init__   0% 8 8 0   100% 0 0   0%
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   0% 36 36 0   0% 16 0   0%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker.mark_success   0% 16 16 0   0% 8 0   0%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker.can_retry   0% 15 15 0   0% 12 0   0%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker.get_resource_status   0% 5 5 0   0% 2 0   0%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker.get_failed_resources_count   0% 7 7 0   0% 2 0   0%
src / local_deep_research / library / download_management / status_tracker.py ResourceStatusTracker.clear_permanent_failures   0% 16 16 0   0% 2 0   0%
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% 5 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / auto_discovery.py ProviderInfo.__init__   100% 13 0 0   100% 2 0   100%
src / local_deep_research / llm / providers / auto_discovery.py ProviderInfo._generate_display_name   100% 17 0 0   100% 14 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 get_setting_from_snapshot   0% 1 1 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / anthropic.py AnthropicProvider.create_llm   0% 16 16 0   0% 6 0   0%
src / local_deep_research / llm / providers / implementations / anthropic.py AnthropicProvider.is_available   0% 5 5 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / anthropic.py create_anthropic_llm   0% 1 1 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / anthropic.py is_anthropic_available   0% 1 1 0   100% 0 0   0%
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% 24 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / custom_openai_endpoint.py get_setting_from_snapshot   0% 1 1 0   100% 0 0   0%
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% 25 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   12% 25 22 0   10% 10 1   11%
src / local_deep_research / llm / providers / implementations / google.py create_google_llm   0% 1 1 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / google.py is_google_available   0% 1 1 0   100% 0 0   0%
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% 21 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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / ionos.py is_ionos_available   0% 1 1 0   100% 0 0   0%
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% 20 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / lmstudio.py LMStudioProvider.create_llm   0% 6 6 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / lmstudio.py LMStudioProvider.is_available   0% 9 9 0   100% 0 0   0%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / lmstudio.py is_lmstudio_available   0% 1 1 0   100% 0 0   0%
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% 25 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / ollama.py get_setting_from_snapshot   100% 1 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   76% 25 6 0   100% 4 0   79%
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% 30 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / implementations / openai.py get_setting_from_snapshot   0% 1 1 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / openai.py OpenAIProvider.create_llm   0% 46 46 0   0% 16 0   0%
src / local_deep_research / llm / providers / implementations / openai.py OpenAIProvider.is_available   0% 5 5 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / openai.py create_openai_llm   0% 1 1 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / openai.py is_openai_available   0% 1 1 0   100% 0 0   0%
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% 24 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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / openrouter.py is_openrouter_available   0% 1 1 0   100% 0 0   0%
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% 19 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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / llm / providers / implementations / xai.py is_xai_available   0% 1 1 0   100% 0 0   0%
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% 19 0 0   100% 0 0   100%
src / local_deep_research / llm / providers / openai_base.py get_setting_from_snapshot   100% 1 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   86% 14 2 0   50% 4 0   78%
src / local_deep_research / llm / providers / openai_base.py OpenAICompatibleProvider.is_available   71% 7 2 0   100% 2 0   78%
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   67% 9 3 0   50% 2 1   64%
src / local_deep_research / llm / providers / openai_base.py (no function)   100% 25 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   100% 16 0 0   75% 4 1   95%
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   67% 64 21 0   66% 44 5   67%
src / local_deep_research / metrics / token_counter.py TokenCountingCallback.on_llm_end   100% 42 0 0   75% 32 8   89%
src / local_deep_research / metrics / token_counter.py TokenCountingCallback.on_llm_error   83% 6 1 0   50% 4 2   70%
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   41% 51 30 0   38% 16 2   40%
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   0% 16 16 0   0% 4 0   0%
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   64% 125 45 0   42% 60 25   57%
src / local_deep_research / metrics / token_counter.py TokenCounter._get_metrics_from_thread_db   27% 22 16 0   12% 8 1   23%
src / local_deep_research / metrics / token_counter.py TokenCounter._merge_metrics   95% 20 1 0   83% 6 1   92%
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   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / api.py _notify_scheduler_about_subscription_change   0% 19 19 0   0% 8 0   0%
src / local_deep_research / news / api.py get_news_feed   12% 128 112 0   3% 58 0   10%
src / local_deep_research / news / api.py debug_research_items   0% 14 14 0   100% 0 0   0%
src / local_deep_research / news / api.py get_subscription_history   36% 36 23 0   17% 6 1   33%
src / local_deep_research / news / api.py _format_time_ago   0% 20 20 0   0% 8 0   0%
src / local_deep_research / news / api.py get_subscription   92% 13 1 0   50% 2 1   87%
src / local_deep_research / news / api.py get_subscriptions   0% 17 17 0   0% 2 0   0%
src / local_deep_research / news / api.py update_subscription   21% 48 38 0   3% 32 1   14%
src / local_deep_research / news / api.py create_subscription   41% 22 13 0   0% 2 0   38%
src / local_deep_research / news / api.py delete_subscription   56% 16 7 0   50% 2 1   56%
src / local_deep_research / news / api.py get_votes_for_cards   0% 22 22 0   0% 8 0   0%
src / local_deep_research / news / api.py submit_feedback   0% 29 29 0   0% 10 0   0%
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__   0% 2 2 0   0% 2 0   0%
src / local_deep_research / news / core / base_card.py BaseCard.__post_init__   0% 4 4 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py BaseCard.set_progress_callback   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py BaseCard._update_progress   0% 2 2 0   0% 2 0   0%
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   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / core / base_card.py BaseCard.to_base_dict   0% 1 1 0   100% 0 0   0%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py BaseCard._extract_summary   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py BaseCard._calculate_impact   0% 4 4 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py BaseCard._extract_topics   0% 5 5 0   0% 2 0   0%
src / local_deep_research / news / core / base_card.py BaseCard._extract_entities   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py NewsCard.__post_init__   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / core / base_card.py NewsCard.get_card_type   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py NewsCard.to_dict   0% 3 3 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py ResearchCard.get_card_type   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py ResearchCard.to_dict   0% 3 3 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py UpdateCard.__post_init__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py UpdateCard.get_card_type   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py UpdateCard.to_dict   0% 3 3 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py OverviewCard.get_card_type   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py OverviewCard.to_dict   0% 3 3 0   100% 0 0   0%
src / local_deep_research / news / core / base_card.py (no function)   100% 91 0 0   100% 0 0   100%
src / local_deep_research / news / core / card_factory.py CardFactory.register_card_type   50% 4 2 0   50% 2 1   50%
src / local_deep_research / news / core / card_factory.py CardFactory.get_storage   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / core / card_factory.py CardFactory.create_card   20% 10 8 0   50% 2 1   25%
src / local_deep_research / news / core / card_factory.py CardFactory.load_card   0% 6 6 0   0% 2 0   0%
src / local_deep_research / news / core / card_factory.py CardFactory.get_user_cards   0% 11 11 0   0% 6 0   0%
src / local_deep_research / news / core / card_factory.py CardFactory.get_recent_cards   0% 8 8 0   0% 4 0   0%
src / local_deep_research / news / core / card_factory.py CardFactory.update_card   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / core / card_factory.py CardFactory.delete_card   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / core / card_factory.py CardFactory._reconstruct_card   0% 18 18 0   0% 2 0   0%
src / local_deep_research / news / core / card_factory.py CardFactory.create_news_card_from_analysis   0% 6 6 0   0% 2 0   0%
src / local_deep_research / news / core / card_factory.py create_card   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / card_factory.py load_card   0% 1 1 0   100% 0 0   0%
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__   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.session   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.create   0% 15 15 0   0% 2 0   0%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.get   0% 3 3 0   100% 0 0   0%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.update   0% 10 10 0   0% 6 0   0%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.delete   0% 7 7 0   0% 2 0   0%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.list   0% 14 14 0   0% 10 0   0%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.get_by_user   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.get_latest_version   0% 3 3 0   100% 0 0   0%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.add_version   0% 16 16 0   0% 2 0   0%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.update_latest_info   0% 10 10 0   0% 2 0   0%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.archive_card   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / card_storage.py SQLCardStorage.pin_card   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / card_storage.py (no function)   100% 22 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   11% 19 17 0   25% 4 1   13%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer.extract_news_items   0% 22 22 0   0% 8 0   0%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer.generate_big_picture   0% 11 11 0   0% 2 0   0%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer.generate_watch_for   0% 22 22 0   0% 10 0   0%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer.generate_patterns   0% 17 17 0   0% 6 0   0%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer.extract_topics   0% 25 25 0   0% 12 0   0%
src / local_deep_research / news / core / news_analyzer.py NewsAnalyzer._prepare_snippets   100% 13 0 0   70% 10 3   87%
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% 19 0 0   100% 0 0   100%
src / local_deep_research / news / core / relevance_service.py RelevanceService.calculate_relevance   95% 20 1 0   72% 18 5   84%
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   50% 2 1   80%
src / local_deep_research / news / core / search_integration.py NewsSearchCallback.__call__   83% 6 1 0   50% 2 1   75%
src / local_deep_research / news / core / search_integration.py NewsSearchCallback._track_user_search   0% 7 7 0   100% 0 0   0%
src / local_deep_research / news / core / search_integration.py NewsSearchCallback._calculate_quality   0% 7 7 0   0% 2 0   0%
src / local_deep_research / news / core / search_integration.py create_search_wrapper   0% 5 5 0   100% 0 0   0%
src / local_deep_research / news / core / search_integration.py create_search_wrapper.wrapped_search   0% 11 11 0   100% 0 0   0%
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   0% 1 1 0   100% 0 0   0%
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__   0% 7 7 0   100% 0 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager._get_current_session   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager.cards   0% 6 6 0   0% 4 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager.subscriptions   0% 6 6 0   0% 4 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager.ratings   0% 6 6 0   0% 4 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager.preferences   0% 6 6 0   0% 4 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager.get_user_feed   0% 18 18 0   0% 8 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager.get_trending_news   0% 6 6 0   100% 0 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager.record_interaction   0% 25 25 0   0% 12 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager.get_user_subscriptions   0% 5 5 0   100% 0 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager.get_user_stats   0% 11 11 0   100% 0 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager.get_card   0% 5 5 0   100% 0 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager.get_card_interactions   0% 10 10 0   0% 2 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager.update_card   0% 5 5 0   100% 0 0   0%
src / local_deep_research / news / core / storage_manager.py StorageManager.cleanup_old_data   0% 18 18 0   0% 6 0   0%
src / local_deep_research / news / core / storage_manager.py get_storage_manager   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / core / storage_manager.py (no function)   0% 40 40 0   100% 0 0   0%
src / local_deep_research / news / core / utils.py get_local_date_string   0% 18 18 0   0% 6 0   0%
src / local_deep_research / news / core / utils.py generate_card_id   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / utils.py generate_subscription_id   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / utils.py utc_now   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / core / utils.py hours_ago   0% 4 4 0   0% 2 0   0%
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__   0% 1 1 0   100% 0 0   0%
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   50% 2 1   83%
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   0% 8 8 0   0% 6 0   0%
src / local_deep_research / news / flask_api.py get_user_id   0% 5 5 0   0% 2 0   0%
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   0% 5 5 0   100% 0 0   0%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / flask_api.py not_found   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / flask_api.py internal_error   0% 1 1 0   100% 0 0   0%
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 debug_database   0% 10 10 0   0% 2 0   0%
src / local_deep_research / news / flask_api.py (no function)   100% 113 0 0   100% 0 0   100%
src / local_deep_research / news / folder_manager.py FolderManager.__init__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / folder_manager.py FolderManager.get_user_folders   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / folder_manager.py FolderManager.create_folder   0% 5 5 0   100% 0 0   0%
src / local_deep_research / news / folder_manager.py FolderManager.update_folder   0% 9 9 0   0% 6 0   0%
src / local_deep_research / news / folder_manager.py FolderManager.delete_folder   0% 9 9 0   0% 4 0   0%
src / local_deep_research / news / folder_manager.py FolderManager.get_subscriptions_by_folder   0% 8 8 0   0% 2 0   0%
src / local_deep_research / news / folder_manager.py FolderManager.update_subscription   0% 20 20 0   0% 10 0   0%
src / local_deep_research / news / folder_manager.py FolderManager.delete_subscription   0% 6 6 0   0% 2 0   0%
src / local_deep_research / news / folder_manager.py FolderManager.get_subscription_stats   0% 7 7 0   0% 2 0   0%
src / local_deep_research / news / folder_manager.py FolderManager._sub_to_dict   0% 1 1 0   100% 0 0   0%
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__   0% 1 1 0   100% 0 0   0%
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   0% 7 7 0   0% 2 0   0%
src / local_deep_research / news / preference_manager / base_preference.py BasePreferenceManager.remove_interest   0% 6 6 0   0% 2 0   0%
src / local_deep_research / news / preference_manager / base_preference.py BasePreferenceManager.ignore_topic   0% 8 8 0   0% 4 0   0%
src / local_deep_research / news / preference_manager / base_preference.py BasePreferenceManager.boost_source   0% 7 7 0   0% 2 0   0%
src / local_deep_research / news / preference_manager / base_preference.py BasePreferenceManager.get_default_preferences   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / preference_manager / base_preference.py TopicRegistry.__init__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / preference_manager / base_preference.py TopicRegistry.extract_topics   0% 5 5 0   0% 2 0   0%
src / local_deep_research / news / preference_manager / base_preference.py TopicRegistry.register_topic   0% 4 4 0   0% 2 0   0%
src / local_deep_research / news / preference_manager / base_preference.py TopicRegistry.get_trending_topics   0% 4 4 0   100% 0 0   0%
src / local_deep_research / news / preference_manager / base_preference.py TopicRegistry.get_topic_info   0% 1 1 0   100% 0 0   0%
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__   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.session   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.create   0% 5 5 0   100% 0 0   0%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.get   0% 3 3 0   100% 0 0   0%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.update   0% 9 9 0   0% 6 0   0%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.delete   0% 7 7 0   0% 2 0   0%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.list   0% 6 6 0   0% 2 0   0%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.get_user_preferences   0% 3 3 0   100% 0 0   0%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.upsert_preferences   0% 11 11 0   0% 6 0   0%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.add_liked_item   0% 12 12 0   0% 6 0   0%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.add_disliked_item   0% 12 12 0   0% 6 0   0%
src / local_deep_research / news / preference_manager / storage.py SQLPreferenceStorage.update_preference_embedding   0% 8 8 0   0% 2 0   0%
src / local_deep_research / news / preference_manager / storage.py (no function)   0% 18 18 0   100% 0 0   0%
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__   0% 2 2 0   100% 0 0   0%
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   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / rating_system / base_rater.py BaseRatingSystem.get_card_ratings   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / rating_system / base_rater.py BaseRatingSystem.remove_rating   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / rating_system / base_rater.py BaseRatingSystem._create_rating_record   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / rating_system / base_rater.py BaseRatingSystem._validate_rating_value   0% 2 2 0   0% 2 0   0%
src / local_deep_research / news / rating_system / base_rater.py QualityRatingSystem.get_rating_type   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / rating_system / base_rater.py QualityRatingSystem.rate   0% 6 6 0   0% 2 0   0%
src / local_deep_research / news / rating_system / base_rater.py QualityRatingSystem._validate_rating_value   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / rating_system / base_rater.py QualityRatingSystem.get_rating   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / rating_system / base_rater.py RelevanceRatingSystem.get_rating_type   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / rating_system / base_rater.py RelevanceRatingSystem.rate   0% 6 6 0   0% 2 0   0%
src / local_deep_research / news / rating_system / base_rater.py RelevanceRatingSystem._validate_rating_value   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / rating_system / base_rater.py RelevanceRatingSystem.get_rating   0% 3 3 0   0% 2 0   0%
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__   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.session   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.create   0% 5 5 0   100% 0 0   0%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.get   0% 5 5 0   0% 2 0   0%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.update   0% 10 10 0   0% 6 0   0%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.delete   0% 7 7 0   0% 2 0   0%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.list   0% 13 13 0   0% 10 0   0%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.get_user_rating   0% 4 4 0   100% 0 0   0%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.upsert_rating   0% 6 6 0   0% 2 0   0%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.get_ratings_summary   0% 10 10 0   0% 2 0   0%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage.get_user_ratings   0% 4 4 0   0% 2 0   0%
src / local_deep_research / news / rating_system / storage.py SQLRatingStorage._get_rating_distribution   0% 5 5 0   0% 4 0   0%
src / local_deep_research / news / rating_system / storage.py (no function)   0% 19 19 0   100% 0 0   0%
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__   0% 6 6 0   100% 0 0   0%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender.set_progress_callback   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender._update_progress   0% 2 2 0   0% 2 0   0%
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   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender._get_user_ratings   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender._execute_search   0% 11 11 0   0% 4 0   0%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender._filter_by_preferences   0% 11 11 0   0% 10 0   0%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender._sort_by_relevance   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender._sort_by_relevance.calculate_score   0% 4 4 0   100% 0 0   0%
src / local_deep_research / news / recommender / base_recommender.py BaseRecommender.get_strategy_info   0% 1 1 0   100% 0 0   0%
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__   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / recommender / topic_based.py TopicBasedRecommender.generate_recommendations   0% 27 27 0   0% 4 0   0%
src / local_deep_research / news / recommender / topic_based.py TopicBasedRecommender._get_trending_topics   0% 12 12 0   0% 10 0   0%
src / local_deep_research / news / recommender / topic_based.py TopicBasedRecommender._filter_topics_by_preferences   0% 15 15 0   0% 8 0   0%
src / local_deep_research / news / recommender / topic_based.py TopicBasedRecommender._generate_topic_query   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / recommender / topic_based.py TopicBasedRecommender._create_recommendation_card   0% 19 19 0   0% 6 0   0%
src / local_deep_research / news / recommender / topic_based.py SearchBasedRecommender.generate_recommendations   0% 3 3 0   100% 0 0   0%
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__   0% 15 15 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription._calculate_next_refresh   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.should_refresh   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.is_due_for_refresh   0% 1 1 0   100% 0 0   0%
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   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.on_refresh_success   0% 4 4 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.on_refresh_error   0% 8 8 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.pause   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.resume   0% 4 4 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.update_interval   0% 7 7 0   0% 4 0   0%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.save   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.mark_refreshed   0% 7 7 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / base_subscription.py BaseSubscription.to_dict   0% 1 1 0   100% 0 0   0%
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 NewsScheduler.__new__   100% 5 0 0   50% 4 2   78%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.__init__   89% 9 1 0   50% 2 1   82%
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   67% 6 2 0   100% 0 0   67%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._get_setting   67% 3 1 0   50% 2 1   60%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.start   83% 12 2 0   75% 4 1   81%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.stop   0% 6 6 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.update_user_info   90% 20 2 0   75% 4 1   88%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.unregister_user   0% 11 11 0   0% 4 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._schedule_user_subscriptions   41% 46 27 0   36% 14 3   40%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._schedule_document_processing   78% 46 10 0   50% 6 3   75%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._process_user_documents   0% 122 122 0   0% 32 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.get_document_scheduler_status   0% 21 21 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.trigger_document_processing   0% 22 22 0   0% 6 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._check_user_overdue_subscriptions   0% 20 20 0   0% 6 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._check_subscription   0% 38 38 0   0% 8 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._trigger_subscription_research_sync   0% 37 37 0   0% 4 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._trigger_subscription_research_sync.SettingsContext.__init__   0% 6 6 0   0% 4 0   0%
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   0% 51 51 0   0% 12 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._store_research_result.make_serializable   0% 9 9 0   0% 8 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._run_cleanup_with_tracking   60% 5 2 0   100% 0 0   60%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._cleanup_inactive_users   47% 15 8 0   25% 4 1   42%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._reload_config   0% 14 14 0   0% 8 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.get_status   0% 9 9 0   0% 4 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler._estimate_memory_usage   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / scheduler.py NewsScheduler.get_user_sessions_summary   0% 5 5 0   0% 2 0   0%
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% 41 0 0   100% 0 0   100%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.__init__   0% 10 10 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.query   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.get_subscription_type   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.generate_search_query   0% 9 9 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription._transform_to_news_query   0% 8 8 0   0% 6 0   0%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.evolve_query   0% 5 5 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.get_statistics   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscription.to_dict   0% 3 3 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscriptionFactory.from_user_search   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / search_subscription.py SearchSubscriptionFactory.from_recommendation   0% 2 2 0   100% 0 0   0%
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__   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.session   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.create   0% 7 7 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.get   0% 5 5 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.update   0% 12 12 0   0% 8 0   0%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.delete   0% 7 7 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.list   0% 15 15 0   0% 10 0   0%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.get_active_subscriptions   0% 6 6 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.get_due_subscriptions   0% 4 4 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.update_refresh_time   0% 8 8 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.increment_stats   0% 9 9 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.pause_subscription   0% 7 7 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.resume_subscription   0% 8 8 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / storage.py SQLSubscriptionStorage.expire_subscription   0% 8 8 0   0% 2 0   0%
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__   0% 12 12 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.get_subscription_type   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.generate_search_query   0% 10 10 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.update_activity   0% 6 6 0   0% 4 0   0%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.evolve_topic   0% 5 5 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.add_related_topic   0% 3 3 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.merge_with   0% 5 5 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.should_auto_expire   0% 4 4 0   0% 2 0   0%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.get_statistics   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscription.to_dict   0% 3 3 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscriptionFactory.from_news_extraction   0% 2 2 0   100% 0 0   0%
src / local_deep_research / news / subscription_manager / topic_subscription.py TopicSubscriptionFactory.from_user_interest   0% 2 2 0   100% 0 0   0%
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% 33 0 0   79% 14 3   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% 18 0 0   100% 0 0   100%
src / local_deep_research / news / web.py create_news_blueprint.news_page   0% 3 3 0   100% 0 0   0%
src / local_deep_research / news / web.py create_news_blueprint.insights_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / web.py create_news_blueprint.preferences_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / web.py create_news_blueprint.subscriptions_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / news / web.py create_news_blueprint.new_subscription_page   0% 8 8 0   0% 2 0   0%
src / local_deep_research / news / web.py create_news_blueprint.edit_subscription_page   0% 18 18 0   0% 4 0   0%
src / local_deep_research / news / web.py create_news_blueprint.health_check   0% 8 8 0   100% 0 0   0%
src / local_deep_research / news / web.py load_user_settings   0% 9 9 0   0% 2 0   0%
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   0% 10 10 0   0% 2 0   0%
src / local_deep_research / notifications / queue_helpers.py send_queue_failed_notification   0% 12 12 0   0% 4 0   0%
src / local_deep_research / notifications / queue_helpers.py send_queue_failed_notification_from_session   0% 10 10 0   0% 2 0   0%
src / local_deep_research / notifications / queue_helpers.py send_research_completed_notification_from_session   16% 32 27 0   0% 6 0   13%
src / local_deep_research / notifications / queue_helpers.py send_research_failed_notification_from_session   0% 26 26 0   0% 4 0   0%
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   50% 24 12 0   50% 6 3   50%
src / local_deep_research / notifications / templates.py NotificationTemplate._get_fallback_template   0% 2 2 0   100% 0 0   0%
src / local_deep_research / notifications / templates.py NotificationTemplate.get_required_context   0% 21 21 0   0% 6 0   0%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / report_generator.py IntegratedReportGenerator.__init__   78% 9 2 0   75% 4 1   77%
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   85% 26 4 0   75% 16 2   81%
src / local_deep_research / report_generator.py IntegratedReportGenerator._research_and_generate_sections   68% 40 13 0   45% 20 5   60%
src / local_deep_research / report_generator.py IntegratedReportGenerator._generate_sections   0% 1 1 0   100% 0 0   0%
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% 17 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   0% 9 9 0   0% 2 0   0%
src / local_deep_research / research_library / deletion / routes / delete_routes.py delete_document_blob   0% 10 10 0   0% 2 0   0%
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   0% 9 9 0   0% 2 0   0%
src / local_deep_research / research_library / deletion / routes / delete_routes.py delete_collection_index   0% 9 9 0   0% 2 0   0%
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   0% 13 13 0   0% 4 0   0%
src / local_deep_research / research_library / deletion / routes / delete_routes.py delete_documents_blobs_bulk   0% 13 13 0   0% 4 0   0%
src / local_deep_research / research_library / deletion / routes / delete_routes.py remove_documents_from_collection_bulk   0% 13 13 0   0% 4 0   0%
src / local_deep_research / research_library / deletion / routes / delete_routes.py get_bulk_deletion_preview   0% 14 14 0   0% 4 0   0%
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.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% 31 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% 13 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   29% 14 2   37%
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   74% 47 12 0   71% 24 3   73%
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   75% 4 1 0   50% 2 1   67%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader.download_with_result   43% 7 4 0   25% 4 1   36%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._download_pdf_content   60% 10 4 0   33% 6 2   50%
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   0% 21 21 0   0% 16 0   0%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._fetch_text_from_europe_pmc   86% 28 4 0   57% 14 6   76%
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   0% 5 5 0   0% 2 0   0%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._try_europe_pmc_api   0% 17 17 0   0% 8 0   0%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._get_pmc_id_from_pmid   83% 23 4 0   67% 12 2   77%
src / local_deep_research / research_library / downloaders / pubmed.py PubMedDownloader._download_via_europe_pmc   100% 6 0 0   50% 2 1   88%
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 is_downloadable_domain   0% 21 21 0   0% 12 0   0%
src / local_deep_research / research_library / routes / library_routes.py get_authenticated_user_password   0% 16 16 0   0% 4 0   0%
src / local_deep_research / research_library / routes / library_routes.py library_page   0% 16 16 0   100% 0 0   0%
src / local_deep_research / research_library / routes / library_routes.py document_details_page   0% 6 6 0   0% 2 0   0%
src / local_deep_research / research_library / routes / library_routes.py download_manager_page   0% 27 27 0   0% 10 0   0%
src / local_deep_research / research_library / routes / library_routes.py get_library_stats   0% 4 4 0   100% 0 0   0%
src / local_deep_research / research_library / routes / library_routes.py get_collections_list   0% 4 4 0   100% 0 0   0%
src / local_deep_research / research_library / routes / library_routes.py get_documents   0% 11 11 0   100% 0 0   0%
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   0% 4 4 0   100% 0 0   0%
src / local_deep_research / research_library / routes / library_routes.py get_pdf_url   0% 1 1 0   100% 0 0   0%
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% 18 18 0   0% 4 0   0%
src / local_deep_research / research_library / routes / library_routes.py download_single_resource   0% 10 10 0   0% 4 0   0%
src / local_deep_research / research_library / routes / library_routes.py download_text_single   0% 14 14 0   0% 6 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% 36 36 0   0% 12 0   0%
src / local_deep_research / research_library / routes / library_routes.py download_research_pdfs   0% 9 9 0   0% 2 0   0%
src / local_deep_research / research_library / routes / library_routes.py download_bulk   0% 10 10 0   0% 2 0   0%
src / local_deep_research / research_library / routes / library_routes.py download_bulk.generate   0% 75 75 0   0% 26 0   0%
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   0% 4 4 0   100% 0 0   0%
src / local_deep_research / research_library / routes / library_routes.py mark_for_redownload   0% 8 8 0   0% 2 0   0%
src / local_deep_research / research_library / routes / library_routes.py queue_all_undownloaded   0% 53 53 0   0% 18 0   0%
src / local_deep_research / research_library / routes / library_routes.py get_research_sources   0% 18 18 0   0% 6 0   0%
src / local_deep_research / research_library / routes / library_routes.py check_downloads   0% 15 15 0   0% 6 0   0%
src / local_deep_research / research_library / routes / library_routes.py download_source   0% 30 30 0   0% 14 0   0%
src / local_deep_research / research_library / routes / library_routes.py (no function)   100% 100 0 0   100% 0 0   100%
src / local_deep_research / research_library / routes / rag_routes.py get_rag_service   0% 39 39 0   0% 14 0   0%
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% 17 17 0   0% 2 0   0%
src / local_deep_research / research_library / routes / rag_routes.py get_available_models   0% 16 16 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 extract_text_from_file   0% 46 46 0   0% 12 0   0%
src / local_deep_research / research_library / routes / rag_routes.py upload_to_collection   0% 100 100 0   0% 32 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   0% 57 57 0   0% 10 0   0%
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% 112 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__   89% 18 2 0   50% 2 1   85%
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   0% 19 19 0   0% 8 0   0%
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   15% 33 28 0   7% 14 1   13%
src / local_deep_research / research_library / services / download_service.py DownloadService._download_pdf   0% 91 91 0   0% 22 0   0%
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   0% 17 17 0   0% 10 0   0%
src / local_deep_research / research_library / services / download_service.py DownloadService._try_existing_text   0% 8 8 0   0% 4 0   0%
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   0% 19 19 0   0% 6 0   0%
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   0% 31 31 0   0% 6 0   0%
src / local_deep_research / research_library / services / download_service.py DownloadService._get_downloader   75% 4 1 0   75% 4 1   75%
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   0% 10 10 0   0% 2 0   0%
src / local_deep_research / research_library / services / download_service.py (no function)   100% 54 0 0   100% 0 0   100%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.__init__   96% 28 1 0   75% 4 1   94%
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._get_or_create_rag_index   0% 14 14 0   0% 2 0   0%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.load_or_create_faiss_index   22% 59 46 0   22% 18 4   22%
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   20% 75 60 0   27% 26 1   22%
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   0% 47 47 0   0% 18 0   0%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.index_user_document   0% 41 41 0   0% 20 0   0%
src / local_deep_research / research_library / services / library_rag_service.py LibraryRAGService.remove_collection_from_index   0% 24 24 0   0% 8 0   0%
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% 35 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   0% 1 1 0   100% 0 0   0%
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   0% 7 7 0   0% 6 0   0%
src / local_deep_research / research_library / services / library_service.py LibraryService._apply_search_filter   0% 2 2 0   100% 0 0   0%
src / local_deep_research / research_library / services / library_service.py LibraryService.get_library_stats   0% 12 12 0   100% 0 0   0%
src / local_deep_research / research_library / services / library_service.py LibraryService.get_documents   0% 37 37 0   0% 20 0   0%
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   0% 8 8 0   0% 2 0   0%
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   0% 17 17 0   0% 8 0   0%
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   0% 3 3 0   100% 0 0   0%
src / local_deep_research / research_library / services / library_service.py LibraryService.sync_library_with_filesystem   0% 22 22 0   0% 6 0   0%
src / local_deep_research / research_library / services / library_service.py LibraryService.mark_for_redownload   0% 14 14 0   0% 6 0   0%
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   56% 9 4 0   50% 2 1   55%
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   0% 17 17 0   0% 8 0   0%
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   0% 2 2 0   100% 0 0   0%
src / local_deep_research / research_library / utils / __init__.py (no function)   100% 15 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   100% 10 0 0   100% 2 0   100%
src / local_deep_research / research_scheduler / routes.py trigger_manual_run   100% 12 0 0   100% 4 0   100%
src / local_deep_research / research_scheduler / routes.py (no function)   100% 9 0 0   100% 0 0   100%
src / local_deep_research / search_system.py AdvancedSearchSystem.__init__   82% 44 8 0   67% 18 6   77%
src / local_deep_research / search_system.py AdvancedSearchSystem._progress_callback   0% 3 3 0   0% 2 0   0%
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   90% 29 3 0   50% 6 3   83%
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   0% 6 6 0   0% 4 0   0%
src / local_deep_research / search_system_factory.py create_strategy   11% 133 119 0   13% 78 8   11%
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)   61% 28 11 0   100% 0 0   61%
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 (no function)   100% 9 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   0% 5 5 0   0% 2 0   0%
src / local_deep_research / security / file_integrity / base_verifier.py BaseFileVerifier.get_algorithm   0% 1 1 0   100% 0 0   0%
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__   0% 11 11 0   0% 4 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._normalize_path   0% 1 1 0   100% 0 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager.register_verifier   0% 2 2 0   100% 0 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager.record_file   0% 23 23 0   0% 6 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager.verify_file   0% 24 24 0   0% 8 0   0%
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   0% 4 4 0   0% 4 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._needs_verification   0% 8 8 0   0% 6 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._do_verification   0% 14 14 0   0% 6 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._update_stats   0% 8 8 0   0% 2 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._log_failure   0% 16 16 0   0% 6 0   0%
src / local_deep_research / security / file_integrity / integrity_manager.py FileIntegrityManager._cleanup_old_failures   0% 6 6 0   0% 4 0   0%
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   0% 11 11 0   0% 4 0   0%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / security / file_integrity / verifiers / faiss_verifier.py FAISSIndexVerifier.get_file_type   0% 1 1 0   100% 0 0   0%
src / local_deep_research / security / file_integrity / verifiers / faiss_verifier.py FAISSIndexVerifier.allows_modifications   0% 1 1 0   100% 0 0   0%
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   0% 11 11 0   0% 8 0   0%
src / local_deep_research / security / file_write_verifier.py write_file_verified   53% 15 7 0   50% 4 2   53%
src / local_deep_research / security / file_write_verifier.py write_json_verified   0% 5 5 0   0% 2 0   0%
src / local_deep_research / security / file_write_verifier.py (no function)   100% 10 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% 18 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   51% 45 22 0   53% 34 6   52%
src / local_deep_research / security / path_validator.py PathValidator.sanitize_for_filesystem_ops   0% 7 7 0   0% 4 0   0%
src / local_deep_research / security / path_validator.py PathValidator.validate_model_path   83% 12 2 0   75% 8 2   80%
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   52% 25 12 0   50% 18 3   51%
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   50% 2 1   75%
src / local_deep_research / security / security_headers.py SecurityHeaders.init_app   100% 10 0 0   100% 0 0   100%
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% 16 0 0   100% 4 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   62% 8 3 0   50% 6 3   57%
src / local_deep_research / security / security_headers.py SecurityHeaders._add_cors_headers   67% 21 7 0   40% 10 2   58%
src / local_deep_research / security / security_headers.py (no function)   100% 14 0 0   100% 0 0   100%
src / local_deep_research / security / ssrf_validator.py is_ip_blocked   90% 21 2 0   93% 14 1   91%
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   0% 6 6 0   0% 4 0   0%
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   87% 15 2 0   100% 4 0   89%
src / local_deep_research / security / url_builder.py build_full_url   70% 10 3 0   75% 4 1   71%
src / local_deep_research / security / url_builder.py validate_constructed_url   0% 13 13 0   0% 8 0   0%
src / local_deep_research / security / url_builder.py mask_sensitive_url   0% 14 14 0   0% 6 0   0%
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 get_javascript_url_validator   0% 1 1 0   100% 0 0   0%
src / local_deep_research / security / url_validator.py (no function)   100% 26 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.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% 17 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   0% 2 2 0   100% 0 0   0%
src / local_deep_research / settings / env_registry.py is_rate_limiting_enabled   75% 8 2 0   50% 2 1   70%
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% 5 0 0   100% 0 0   100%
src / local_deep_research / settings / env_settings.py EnvSetting.get_value   83% 6 1 0   75% 4 1   80%
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% 1 0 0   100% 0 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__   0% 1 1 0   100% 0 0   0%
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   75% 12 3 0   50% 6 3   67%
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   71% 14 4 0   50% 6 1   65%
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__   0% 1 1 0   100% 0 0   0%
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   50% 2 1   88%
src / local_deep_research / settings / env_settings.py EnumSetting._convert_value   50% 8 4 0   33% 6 2   43%
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   62% 8 3 0   50% 2 1   60%
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   21% 14 11 0   10% 10 1   17%
src / local_deep_research / settings / logger.py redact_sensitive_keys   0% 15 15 0   0% 10 0   0%
src / local_deep_research / settings / logger.py create_settings_summary   0% 6 6 0   0% 2 0   0%
src / local_deep_research / settings / logger.py get_settings_log_level   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / logger.py (no function)   59% 17 7 0   12% 8 1   44%
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 get_typed_setting_value   70% 20 6 0   90% 10 1   77%
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   50% 6 3 0   50% 2 1   50%
src / local_deep_research / settings / manager.py SettingsManager._check_thread_safety   67% 3 1 0   50% 2 1   60%
src / local_deep_research / settings / manager.py SettingsManager.settings_locked   62% 8 3 0   75% 4 1   67%
src / local_deep_research / settings / manager.py SettingsManager.default_settings   100% 2 0 0   100% 0 0   100%
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   88% 16 2 0   100% 8 0   92%
src / local_deep_research / settings / manager.py SettingsManager.set_setting   0% 34 34 0   0% 18 0   0%
src / local_deep_research / settings / manager.py SettingsManager.clear_cache   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / manager.py SettingsManager.get_all_settings   78% 18 4 0   80% 10 2   79%
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   39% 46 28 0   45% 20 9   41%
src / local_deep_research / settings / manager.py SettingsManager.delete_setting   50% 12 6 0   50% 4 2   50%
src / local_deep_research / settings / manager.py SettingsManager.load_from_defaults_file   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / manager.py SettingsManager.db_version_matches_package   0% 3 3 0   100% 0 0   0%
src / local_deep_research / settings / manager.py SettingsManager.update_db_version   0% 5 5 0   100% 0 0   0%
src / local_deep_research / settings / manager.py SettingsManager.import_settings   0% 19 19 0   0% 14 0   0%
src / local_deep_research / settings / manager.py SettingsManager._create_setting   0% 22 22 0   0% 18 0   0%
src / local_deep_research / settings / manager.py SettingsManager._emit_settings_changed   72% 18 5 0   67% 6 2   71%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / settings / manager.py SettingsManager.get_setting_key_for_env_var   0% 5 5 0   0% 2 0   0%
src / local_deep_research / settings / manager.py (no function)   100% 53 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 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.format_document   94% 18 1 0   92% 12 1   93%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._find_sources_section   100% 6 0 0   100% 4 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% 8 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_number_hyperlinks.replace_comma_citations   89% 9 1 0   75% 4 1   85%
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% 8 0 0   100% 0 0   100%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_domain_hyperlinks.replace_comma_citations   90% 10 1 0   75% 4 1   86%
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% 21 0 0   92% 12 1   97%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_domain_id_hyperlinks.replace_comma_citations   0% 9 9 0   0% 4 0   0%
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% 18 0 0   90% 10 1   96%
src / local_deep_research / text_optimization / citation_formatter.py CitationFormatter._format_domain_id_always_hyperlinks.replace_comma_citations   89% 9 1 0   75% 4 1   85%
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   0% 2 2 0   100% 0 0   0%
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   98% 47 1 0   86% 28 4   93%
src / local_deep_research / text_optimization / citation_formatter.py RISExporter._create_ris_entry   91% 66 6 0   87% 30 4   90%
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   94% 17 1 0   90% 10 1   93%
src / local_deep_research / text_optimization / citation_formatter.py LaTeXExporter._create_bibliography   100% 18 0 0   100% 8 0   100%
src / local_deep_research / text_optimization / citation_formatter.py (no function)   100% 39 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   86% 22 3 0   75% 12 1   82%
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 / 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   67% 63 21 0   95% 20 1   73%
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   0% 9 9 0   0% 2 0   0%
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   59% 27 11 0   83% 6 1   64%
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   93% 57 4 0   70% 20 6   87%
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.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% 28 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   94% 16 1   98%
src / local_deep_research / utilities / search_utilities.py format_findings   90% 77 8 0   91% 32 3   90%
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 get_search_context   100% 4 0 0   100% 2 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% 3 0 0   100% 2 0   100%
src / local_deep_research / utilities / thread_context.py (no function)   100% 11 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 / 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   91% 22 2 0   67% 12 4   82%
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   0% 12 12 0   0% 2 0   0%
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   53% 53 25 0   33% 12 2   49%
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% 29 0 0   100% 0 0   100%
src / local_deep_research / web / app.py main   0% 16 16 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)   89% 9 1 0   50% 2 1   82%
src / local_deep_research / web / app_factory.py _is_private_ip   60% 5 2 0   100% 0 0   60%
src / local_deep_research / web / app_factory.py create_app   85% 123 18 0   60% 10 4   83%
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.ratelimit_handler   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / app_factory.py create_app.disable_csrf_for_api   100% 2 0 0   100% 2 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   75% 8 2 0   100% 4 0   83%
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% 63 0 0   83% 6 1   99%
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% 1 0 0   100% 0 0   100%
src / local_deep_research / web / app_factory.py register_error_handlers.server_error   0% 1 1 0   100% 0 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   57% 28 12 0   100% 10 0   68%
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   89% 35 4 0   75% 24 6   83%
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 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   0% 4 4 0   0% 2 0   0%
src / local_deep_research / web / auth / decorators.py inject_current_user   75% 16 4 0   75% 8 2   75%
src / local_deep_research / web / auth / decorators.py (no function)   100% 8 0 0   100% 0 0   100%
src / local_deep_research / web / auth / middleware_optimizer.py should_skip_database_middleware   83% 12 2 0   80% 10 2   82%
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   86% 14 2 0   75% 8 2   82%
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   77% 79 18 0   50% 26 7   70%
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   91% 68 6 0   88% 26 3   90%
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   45% 20 9   55%
src / local_deep_research / web / auth / routes.py integrity_check   80% 5 1 0   50% 2 1   71%
src / local_deep_research / web / auth / routes.py (no function)   100% 32 0 0   100% 0 0   100%
src / local_deep_research / web / auth / session_cleanup.py cleanup_stale_sessions   27% 15 11 0   30% 10 1   28%
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% 3 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% 14 0 0   100% 0 0   100%
src / local_deep_research / web / models / database.py get_db_connection   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / models / database.py calculate_duration   29% 49 35 0   50% 10 5   32%
src / local_deep_research / web / models / database.py get_logs_for_research   55% 11 5 0   50% 2 1   54%
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   0% 3 3 0   0% 2 0   0%
src / local_deep_research / web / models / settings.py SearchSetting.validate_search_key   0% 3 3 0   0% 2 0   0%
src / local_deep_research / web / models / settings.py ReportSetting.validate_report_key   0% 3 3 0   0% 2 0   0%
src / local_deep_research / web / models / settings.py AppSetting.validate_app_key   67% 3 1 0   50% 2 1   60%
src / local_deep_research / web / models / settings.py (no function)   100% 45 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   0% 22 22 0   0% 2 0   0%
src / local_deep_research / web / queue / manager.py QueueManager.get_queue_position   0% 12 12 0   0% 4 0   0%
src / local_deep_research / web / queue / manager.py QueueManager.remove_from_queue   0% 16 16 0   0% 4 0   0%
src / local_deep_research / web / queue / manager.py QueueManager.get_user_queue   0% 14 14 0   0% 6 0   0%
src / local_deep_research / web / queue / manager.py (no function)   100% 15 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   0% 4 4 0   0% 2 0   0%
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   0% 31 31 0   0% 12 0   0%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2._start_research_directly   0% 38 38 0   0% 4 0   0%
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   0% 8 8 0   100% 0 0   0%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2._process_queue_loop   79% 19 4 0   88% 8 1   81%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2._process_user_queue   74% 27 7 0   62% 8 3   71%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2._start_queued_researches   0% 15 15 0   0% 2 0   0%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2._start_research   0% 17 17 0   0% 4 0   0%
src / local_deep_research / web / queue / processor_v2.py QueueProcessorV2.process_user_request   69% 16 5 0   50% 6 3   64%
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   82% 38 7 0   78% 18 4   80%
src / local_deep_research / web / queue / processor_v2.py (no function)   100% 34 0 0   100% 0 0   100%
src / local_deep_research / web / routes / api_routes.py get_current_config   67% 9 3 0   100% 0 0   67%
src / local_deep_research / web / routes / api_routes.py api_start_research   95% 19 1 0   100% 2 0   95%
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   72% 18 5 0   75% 4 1   73%
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% 44 0 0   100% 0 0   100%
src / local_deep_research / web / routes / context_overflow_api.py get_context_overflow_metrics   0% 57 57 0   0% 28 0   0%
src / local_deep_research / web / routes / context_overflow_api.py get_research_context_overflow   0% 30 30 0   0% 10 0   0%
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   25% 52 39 0   20% 10 2   24%
src / local_deep_research / web / routes / history_routes.py get_research_status   48% 25 13 0   38% 8 3   45%
src / local_deep_research / web / routes / history_routes.py get_research_details   77% 31 7 0   50% 6 3   73%
src / local_deep_research / web / routes / history_routes.py get_report   0% 19 19 0   0% 4 0   0%
src / local_deep_research / web / routes / history_routes.py get_markdown   0% 15 15 0   0% 4 0   0%
src / local_deep_research / web / routes / history_routes.py get_research_logs   0% 16 16 0   0% 6 0   0%
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% 38 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   55% 62 28 0   35% 26 9   49%
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   0% 1 1 0   100% 0 0   0%
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   55% 11 5 0   50% 2 1   54%
src / local_deep_research / web / routes / metrics_routes.py api_research_link_metrics   0% 33 33 0   0% 12 0   0%
src / local_deep_research / web / routes / metrics_routes.py api_research_metrics   0% 7 7 0   100% 0 0   0%
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   0% 12 12 0   0% 4 0   0%
src / local_deep_research / web / routes / metrics_routes.py api_save_research_rating   0% 20 20 0   0% 6 0   0%
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   76% 17 4 0   75% 4 1   76%
src / local_deep_research / web / routes / metrics_routes.py api_research_costs   0% 25 25 0   0% 8 0   0%
src / local_deep_research / web / routes / metrics_routes.py api_cost_analytics   25% 48 36 0   15% 20 3   22%
src / local_deep_research / web / routes / metrics_routes.py link_analytics   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / metrics_routes.py api_link_analytics   0% 10 10 0   0% 2 0   0%
src / local_deep_research / web / routes / metrics_routes.py api_get_domain_classifications   0% 10 10 0   0% 2 0   0%
src / local_deep_research / web / routes / metrics_routes.py api_get_classifications_summary   0% 10 10 0   0% 2 0   0%
src / local_deep_research / web / routes / metrics_routes.py api_classify_domains   0% 28 28 0   0% 8 0   0%
src / local_deep_research / web / routes / metrics_routes.py api_classification_progress   0% 27 27 0   0% 10 0   0%
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_news_api_exception   0% 2 2 0   100% 0 0   0%
src / local_deep_research / web / routes / news_routes.py get_news_feed   0% 14 14 0   100% 0 0   0%
src / local_deep_research / web / routes / news_routes.py debug_research_items   0% 9 9 0   100% 0 0   0%
src / local_deep_research / web / routes / news_routes.py get_subscriptions   0% 9 9 0   100% 0 0   0%
src / local_deep_research / web / routes / news_routes.py create_subscription   0% 10 10 0   100% 0 0   0%
src / local_deep_research / web / routes / news_routes.py get_subscription   0% 8 8 0   100% 0 0   0%
src / local_deep_research / web / routes / news_routes.py update_subscription   0% 9 9 0   100% 0 0   0%
src / local_deep_research / web / routes / news_routes.py delete_subscription   0% 8 8 0   100% 0 0   0%
src / local_deep_research / web / routes / news_routes.py get_subscription_history   0% 9 9 0   100% 0 0   0%
src / local_deep_research / web / routes / news_routes.py submit_feedback   0% 14 14 0   0% 2 0   0%
src / local_deep_research / web / routes / news_routes.py research_news_item   0% 13 13 0   0% 2 0   0%
src / local_deep_research / web / routes / news_routes.py save_preferences   0% 10 10 0   100% 0 0   0%
src / local_deep_research / web / routes / news_routes.py get_categories   0% 8 8 0   100% 0 0   0%
src / local_deep_research / web / routes / news_routes.py (no function)   100% 31 0 0   100% 0 0   100%
src / local_deep_research / web / routes / research_routes.py redirect_static   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / research_routes.py progress_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / research_routes.py research_details_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / research_routes.py results_page   0% 1 1 0   100% 0 0   0%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / research_routes.py collections_config_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / research_routes.py api_keys_config_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / research_routes.py search_engines_config_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / research_routes.py llm_config_page   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web / routes / research_routes.py start_research   58% 212 89 0   50% 70 21   56%
src / local_deep_research / web / routes / research_routes.py terminate_research   66% 44 15 0   50% 12 6   62%
src / local_deep_research / web / routes / research_routes.py delete_research   0% 23 23 0   0% 8 0   0%
src / local_deep_research / web / routes / research_routes.py clear_history   0% 22 22 0   0% 10 0   0%
src / local_deep_research / web / routes / research_routes.py open_file_location   0% 26 26 0   0% 10 0   0%
src / local_deep_research / web / routes / research_routes.py save_raw_config   0% 13 13 0   0% 2 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   58% 12 5 0   50% 4 2   56%
src / local_deep_research / web / routes / research_routes.py get_research_logs   0% 16 16 0   0% 6 0   0%
src / local_deep_research / web / routes / research_routes.py get_research_report   0% 19 19 0   0% 6 0   0%
src / local_deep_research / web / routes / research_routes.py export_research_report   0% 31 31 0   0% 8 0   0%
src / local_deep_research / web / routes / research_routes.py get_research_status   42% 53 31 0   25% 24 6   36%
src / local_deep_research / web / routes / research_routes.py get_queue_status   0% 8 8 0   100% 0 0   0%
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   61% 49 19 0   60% 20 6   61%
src / local_deep_research / web / routes / research_routes.py (no function)   100% 104 0 0   100% 0 0   100%
src / local_deep_research / web / routes / settings_routes.py _get_setting_from_session   83% 6 1 0   50% 2 1   75%
src / local_deep_research / web / routes / settings_routes.py calculate_warnings   83% 23 4 0   50% 8 4   74%
src / local_deep_research / web / routes / settings_routes.py validate_setting   0% 18 18 0   0% 20 0   0%
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   0% 122 122 0   0% 76 0   0%
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   0% 37 37 0   0% 8 0   0%
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   48% 40 21 0   44% 18 4   47%
src / local_deep_research / web / routes / settings_routes.py api_delete_setting   71% 14 4 0   75% 4 1   72%
src / local_deep_research / web / routes / settings_routes.py api_import_settings   0% 11 11 0   0% 2 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   73% 22 6 0   83% 12 2   76%
src / local_deep_research / web / routes / settings_routes.py api_get_available_search_engines   82% 34 6 0   70% 10 3   80%
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% 24 24 0   0% 6 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% 114 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   45% 11 6 0   50% 2 1   46%
src / local_deep_research / web / server_config.py save_server_config   75% 8 2 0   100% 0 0   75%
src / local_deep_research / web / server_config.py sync_from_settings   100% 18 0 0   50% 16 8   76%
src / local_deep_research / web / server_config.py (no function)   100% 10 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 get_citation_formatter   100% 5 0 0   100% 0 0   100%
src / local_deep_research / web / services / research_service.py export_report_to_memory   60% 47 19 0   50% 14 3   57%
src / local_deep_research / web / services / research_service.py save_research_strategy   75% 16 4 0   50% 2 1   72%
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   0% 2 2 0   100% 0 0   0%
src / local_deep_research / web / services / research_service.py run_research_process   41% 420 248 0   29% 116 26   38%
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   100% 4 0 0   100% 2 0   100%
src / local_deep_research / web / services / research_service.py run_research_process.progress_callback   65% 49 17 0   70% 30 7   67%
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   64% 28 10 0   67% 12 2   65%
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   26% 34 25 0   10% 10 1   23%
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_manager.py check_env_setting   100% 5 0 0   100% 2 0   100%
src / local_deep_research / web / services / settings_manager.py SettingsManager.__init__   100% 4 0 0   100% 0 0   100%
src / local_deep_research / web / services / settings_manager.py SettingsManager._check_thread_safety   67% 3 1 0   50% 2 1   60%
src / local_deep_research / web / services / settings_manager.py SettingsManager.settings_locked   62% 8 3 0   75% 4 1   67%
src / local_deep_research / web / services / settings_manager.py SettingsManager.default_settings   75% 24 6 0   100% 4 0   79%
src / local_deep_research / web / services / settings_manager.py SettingsManager.__get_typed_setting_value   88% 16 2 0   83% 6 1   86%
src / local_deep_research / web / services / settings_manager.py SettingsManager.__query_settings   50% 12 6 0   38% 8 1   45%
src / local_deep_research / web / services / settings_manager.py SettingsManager.get_setting   85% 13 2 0   100% 6 0   89%
src / local_deep_research / web / services / settings_manager.py SettingsManager.set_setting   72% 32 9 0   56% 16 7   67%
src / local_deep_research / web / services / settings_manager.py SettingsManager.get_all_settings   82% 11 2 0   75% 4 1   80%
src / local_deep_research / web / services / settings_manager.py SettingsManager.create_or_update_setting   0% 46 46 0   0% 20 0   0%
src / local_deep_research / web / services / settings_manager.py SettingsManager.delete_setting   42% 12 7 0   50% 4 2   44%
src / local_deep_research / web / services / settings_manager.py SettingsManager.load_from_defaults_file   100% 1 0 0   100% 0 0   100%
src / local_deep_research / web / services / settings_manager.py SettingsManager.db_version_matches_package   100% 3 0 0   100% 0 0   100%
src / local_deep_research / web / services / settings_manager.py SettingsManager.update_db_version   100% 5 0 0   100% 0 0   100%
src / local_deep_research / web / services / settings_manager.py SettingsManager.import_settings   84% 19 3 0   79% 14 3   82%
src / local_deep_research / web / services / settings_manager.py SettingsManager._create_setting   0% 22 22 0   0% 18 0   0%
src / local_deep_research / web / services / settings_manager.py SettingsManager._emit_settings_changed   89% 18 2 0   83% 6 1   88%
src / local_deep_research / web / services / settings_manager.py (no function)   100% 35 0 0   100% 0 0   100%
src / local_deep_research / web / services / settings_service.py set_setting   0% 2 2 0   100% 0 0   0%
src / local_deep_research / web / services / settings_service.py get_all_settings   0% 2 2 0   100% 0 0   0%
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   0% 14 14 0   0% 6 0   0%
src / local_deep_research / web / services / settings_service.py validate_setting   0% 2 2 0   100% 0 0   0%
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   100% 15 0 0   100% 0 0   100%
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% 18 0 0   100% 6 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   75% 8 2 0   100% 2 0   80%
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   100% 2 0 0   100% 0 0   100%
src / local_deep_research / web / services / socket_service.py (no function)   100% 21 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   86% 21 3 0   100% 4 0   88%
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   86% 7 1 0   75% 4 1   82%
src / local_deep_research / web / utils / rate_limiter.py (no function)   100% 13 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 / vite_helper.py ViteHelper.__init__   80% 5 1 0   50% 2 1   71%
src / local_deep_research / web / utils / vite_helper.py ViteHelper.init_app   100% 6 0 0   50% 2 1   88%
src / local_deep_research / web / utils / vite_helper.py ViteHelper._load_manifest   67% 6 2 0   50% 2 1   62%
src / local_deep_research / web / utils / vite_helper.py ViteHelper.vite_hmr   67% 3 1 0   50% 2 1   60%
src / local_deep_research / web / utils / vite_helper.py ViteHelper.vite_asset   21% 14 11 0   20% 10 2   21%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / default_search_engines.py get_default_search_engine_configs   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / default_search_engines.py (no function)   0% 2 2 0   100% 0 0   0%
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   0% 12 12 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / full_search.py FullSearchResults.remove_boilerplate   0% 5 5 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / full_search.py FullSearchResults.run   0% 27 27 0   0% 12 0   0%
src / local_deep_research / web_search_engines / engines / full_search.py FullSearchResults.invoke   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / full_search.py FullSearchResults.__call__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / full_search.py (no function)   100% 17 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine.__init__   0% 8 8 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine._get_search_config   0% 20 20 0   0% 18 0   0%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine._get_available_engines   0% 26 26 0   0% 16 0   0%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine.analyze_query   0% 58 58 0   0% 38 0   0%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine._get_previews   0% 37 37 0   0% 8 0   0%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine._get_full_content   0% 13 13 0   0% 4 0   0%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine._get_engine_instance   0% 14 14 0   0% 6 0   0%
src / local_deep_research / web_search_engines / engines / meta_search_engine.py MetaSearchEngine.invoke   0% 1 1 0   100% 0 0   0%
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   75% 4 1   73%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py shutdown_global_executor   0% 8 8 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine.__init__   100% 16 0 0   50% 2 1   94%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._check_api_key_availability   0% 10 10 0   0% 6 0   0%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._get_search_config   36% 14 9 0   33% 12 2   35%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._get_available_engines   12% 32 28 0   5% 22 1   9%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._get_available_generic_engines   0% 13 13 0   0% 8 0   0%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine.select_engines   0% 54 54 0   0% 32 0   0%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._get_engine_instance   0% 15 15 0   0% 6 0   0%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._execute_single_engine   0% 13 13 0   0% 4 0   0%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._get_previews   0% 50 50 0   0% 16 0   0%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine._get_full_content   0% 24 24 0   0% 12 0   0%
src / local_deep_research / web_search_engines / engines / parallel_search_engine.py ParallelSearchEngine.invoke   0% 1 1 0   100% 0 0   0%
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__   92% 13 1 0   50% 2 1   87%
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   93% 15 1 0   75% 4 1   89%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py ArXivSearchEngine._get_full_content   0% 61 61 0   0% 20 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py ArXivSearchEngine.run   100% 5 0 0   50% 2 1   86%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py ArXivSearchEngine.get_paper_details   0% 22 22 0   0% 6 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py ArXivSearchEngine.search_by_author   0% 7 7 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py ArXivSearchEngine.search_by_category   0% 7 7 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_arxiv.py (no function)   100% 20 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_brave.py BraveSearchEngine.__init__   86% 21 3 0   88% 8 1   86%
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   31% 29 20 0   33% 18 4   32%
src / local_deep_research / web_search_engines / engines / search_engine_brave.py BraveSearchEngine.run   0% 5 5 0   0% 2 0   0%
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__   0% 5 5 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_collection.py CollectionSearchEngine._load_collection_embedding_settings   0% 16 16 0   0% 4 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_collection.py CollectionSearchEngine.search   0% 39 39 0   0% 10 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_collection.py CollectionSearchEngine._get_document_url   0% 16 16 0   0% 6 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_collection.py (no function)   100% 15 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_ddg.py DuckDuckGoSearchEngine.__init__   0% 8 8 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_ddg.py DuckDuckGoSearchEngine.run   0% 2 2 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_ddg.py DuckDuckGoSearchEngine._get_previews   0% 19 19 0   0% 10 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_ddg.py DuckDuckGoSearchEngine._get_full_content   0% 3 3 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_ddg.py (no function)   0% 14 14 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py ElasticsearchSearchEngine.__init__   100% 20 0 0   100% 6 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py ElasticsearchSearchEngine._get_previews   88% 26 3 0   100% 10 0   92%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py ElasticsearchSearchEngine._get_full_content   71% 24 7 0   80% 10 2   74%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py ElasticsearchSearchEngine.search_by_query_string   62% 8 3 0   100% 0 0   62%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py ElasticsearchSearchEngine.search_by_dsl   57% 7 3 0   100% 0 0   57%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py ElasticsearchSearchEngine._process_es_response   25% 16 12 0   12% 8 1   21%
src / local_deep_research / web_search_engines / engines / search_engine_elasticsearch.py (no function)   100% 13 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   0% 9 9 0   0% 4 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._optimize_github_query   0% 23 23 0   0% 8 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._search_github   0% 36 36 0   0% 12 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._get_readme_content   0% 16 16 0   0% 4 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._get_recent_issues   0% 12 12 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._get_file_content   0% 16 16 0   0% 4 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._format_repository_preview   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._format_code_preview   0% 2 2 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._format_issue_preview   0% 2 2 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._format_user_preview   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._get_previews   0% 38 38 0   0% 22 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._get_full_content   0% 40 40 0   0% 24 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine.search_repository   0% 22 22 0   0% 6 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine.search_code   0% 16 16 0   0% 6 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine.search_issues   0% 17 17 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine.set_search_type   0% 5 5 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py GitHubSearchEngine._filter_for_relevance   0% 24 24 0   0% 10 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_github.py (no function)   100% 28 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   50% 10 5 0   50% 2 1   50%
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   89% 27 3 0   92% 12 1   90%
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   25% 24 18 0   30% 10 1   26%
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   83% 35 6 0   60% 10 4   78%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine._get_previews   82% 11 2 0   50% 2 1   77%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine._get_full_content   0% 10 10 0   0% 6 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine.run   40% 42 25 0   23% 22 5   34%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine.search_by_section   0% 9 9 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_guardian.py GuardianSearchEngine.get_recent_articles   0% 12 12 0   0% 2 0   0%
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__   0% 9 9 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_library.py LibraryRAGSearchEngine.search   0% 73 73 0   0% 26 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_library.py LibraryRAGSearchEngine._get_previews   0% 1 1 0   100% 0 0   0%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_library.py (no function)   100% 18 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py _get_file_loader   0% 20 20 0   0% 12 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py _load_document   0% 12 12 0   0% 4 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager.__init__   100% 17 0 0   100% 2 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager.embeddings   100% 4 0 0   100% 2 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   0% 8 8 0   0% 2 0   0%
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   67% 3 1 0   75% 4 1   71%
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   27% 11 8 0   25% 4 1   27%
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   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalEmbeddingManager.get_indexed_folders_info   0% 9 9 0   0% 4 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine.__init__   82% 17 3 0   67% 6 2   78%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine._index_folders   71% 17 5 0   58% 12 5   66%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine._get_previews   0% 34 34 0   0% 18 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine._get_full_content   0% 17 17 0   0% 12 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine.run   0% 26 26 0   0% 14 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine.get_collections_info   0% 16 16 0   0% 6 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine.reindex_collection   0% 9 9 0   0% 6 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local.py LocalSearchEngine.from_config   90% 20 2 0   38% 8 3   75%
src / local_deep_research / web_search_engines / engines / search_engine_local.py (no function)   100% 61 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_local_all.py LocalAllSearchEngine.__init__   0% 13 13 0   0% 4 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local_all.py LocalAllSearchEngine._get_previews   0% 18 18 0   0% 6 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_local_all.py LocalAllSearchEngine._get_full_content   0% 21 21 0   0% 12 0   0%
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_nasa_ads.py NasaAdsSearchEngine.__init__   91% 22 2 0   100% 6 0   93%
src / local_deep_research / web_search_engines / engines / search_engine_nasa_ads.py NasaAdsSearchEngine._get_previews   78% 54 12 0   64% 22 6   74%
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% 14 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_openalex.py OpenAlexSearchEngine.__init__   90% 21 2 0   100% 6 0   93%
src / local_deep_research / web_search_engines / engines / search_engine_openalex.py OpenAlexSearchEngine._get_previews   84% 57 9 0   67% 24 8   79%
src / local_deep_research / web_search_engines / engines / search_engine_openalex.py OpenAlexSearchEngine._format_work_preview   83% 48 8 0   64% 22 4   77%
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% 15 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   75% 8 2   93%
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   56% 43 19 0   44% 18 2   52%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine._get_previews   73% 15 4 0   83% 6 1   76%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine._convert_document_to_preview   90% 98 10 0   75% 36 9   86%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine._get_full_content   84% 31 5 0   83% 12 2   84%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine.run   73% 15 4 0   83% 6 1   76%
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   50% 6 3 0   100% 0 0   50%
src / local_deep_research / web_search_engines / engines / search_engine_paperless.py PaperlessSearchEngine.get_document_count   60% 5 2 0   100% 0 0   60%
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   93% 14 1 0   50% 2 1   88%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._extract_core_terms   0% 5 5 0   100% 0 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._expand_time_window   0% 18 18 0   0% 14 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._optimize_query_for_pubmed   0% 49 49 0   0% 24 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._simplify_query   0% 12 12 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._is_historical_focused   0% 18 18 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._adaptive_search   0% 35 35 0   0% 16 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._search_pubmed   100% 27 0 0   100% 6 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._get_article_summaries   0% 40 40 0   0% 18 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._get_article_abstracts   0% 50 50 0   0% 26 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._get_article_detailed_metadata   0% 67 67 0   0% 46 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._create_enriched_content   0% 43 43 0   0% 36 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._find_pmc_ids   0% 25 25 0   0% 14 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._get_pmc_full_text   0% 35 35 0   0% 20 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._get_previews   0% 84 84 0   0% 54 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine._get_full_content   0% 91 91 0   0% 64 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine.search_by_author   0% 7 7 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine.search_by_journal   0% 7 7 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine.search_recent   0% 9 9 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py PubMedSearchEngine.advanced_search   0% 10 10 0   0% 4 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_pubmed.py (no function)   100% 33 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% 11 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_scaleserp.py ScaleSerpSearchEngine.__init__   73% 22 6 0   83% 6 1   75%
src / local_deep_research / web_search_engines / engines / search_engine_scaleserp.py ScaleSerpSearchEngine._get_previews   84% 57 9 0   73% 26 7   81%
src / local_deep_research / web_search_engines / engines / search_engine_scaleserp.py ScaleSerpSearchEngine._get_full_content   34% 32 21 0   35% 20 5   35%
src / local_deep_research / web_search_engines / engines / search_engine_scaleserp.py ScaleSerpSearchEngine.run   0% 11 11 0   0% 8 0   0%
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._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   76% 75 18 0   60% 30 10   71%
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% 29 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine.__init__   82% 28 5 0   75% 4 1   81%
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._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   47% 15 8 0   33% 6 2   43%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine._optimize_query   12% 17 15 0   25% 4 1   14%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine._direct_search   59% 22 9 0   50% 10 5   56%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine._adaptive_search   8% 48 44 0   4% 26 1   7%
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   88% 33 4 0   80% 10 2   86%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py SemanticScholarSearchEngine._get_full_content   0% 27 27 0   0% 22 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_semantic_scholar.py (no function)   100% 23 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   50% 2 1   86%
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__   71% 21 6 0   83% 6 1   74%
src / local_deep_research / web_search_engines / engines / search_engine_serper.py SerperSearchEngine._get_previews   89% 55 6 0   83% 24 4   87%
src / local_deep_research / web_search_engines / engines / search_engine_serper.py SerperSearchEngine._get_full_content   62% 32 12 0   65% 20 7   63%
src / local_deep_research / web_search_engines / engines / search_engine_serper.py SerperSearchEngine.run   0% 11 11 0   0% 8 0   0%
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   97% 32 1 0   90% 10 1   95%
src / local_deep_research / web_search_engines / engines / search_engine_tavily.py TavilySearchEngine._get_full_content   32% 31 21 0   35% 20 5   33%
src / local_deep_research / web_search_engines / engines / search_engine_tavily.py TavilySearchEngine.run   100% 5 0 0   50% 2 1   86%
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   66% 29 10 0   50% 10 1   62%
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   89% 9 1 0   75% 4 1   85%
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   65% 17 6 0   75% 4 1   67%
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   96% 23 1 0   88% 8 1   94%
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   0% 21 21 0   0% 8 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_wikinews.py WikinewsSearchEngine._fetch_full_content_and_pubdate   0% 21 21 0   0% 2 0   0%
src / local_deep_research / web_search_engines / engines / search_engine_wikinews.py WikinewsSearchEngine._get_previews   0% 16 16 0   0% 10 0   0%
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   64% 22 8 0   50% 16 4   58%
src / local_deep_research / web_search_engines / rate_limiting / llm / detection.py extract_retry_after   78% 18 4 0   88% 8 1   81%
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__   0% 3 3 0   100% 0 0   0%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py AdaptiveLLMWait.__call__   0% 9 9 0   0% 6 0   0%
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   0% 10 10 0   0% 6 0   0%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper._get_rate_limit_key   78% 18 4 0   30% 10 3   61%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper.invoke   15% 13 11 0   25% 4 1   18%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper.invoke._invoke_with_retry   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper._do_invoke   29% 7 5 0   0% 2 0   22%
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__   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / rate_limiting / llm / wrapper.py create_rate_limited_llm_wrapper.RateLimitedLLMWrapper.__repr__   0% 1 1 0   100% 0 0   0%
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   100% 5 0 0   100% 0 0   100%
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   61% 31 12 0   67% 12 4   63%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.get_wait_time   85% 20 3 0   75% 8 2   82%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.apply_rate_limit   86% 7 1 0   50% 4 2   73%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.record_outcome   77% 13 3 0   67% 6 2   74%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker._update_estimate   65% 54 19 0   67% 18 4   65%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.get_stats   43% 23 13 0   30% 10 3   39%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.reset_engine   82% 22 4 0   88% 8 1   83%
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   0% 9 9 0   0% 8 0   0%
src / local_deep_research / web_search_engines / rate_limiting / tracker.py AdaptiveRateLimitTracker.cleanup_old_data   65% 20 7 0   50% 6 3   62%
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   50% 2 1   83%
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._load_engine_class   100% 14 0 0   75% 4 1   94%
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   69% 32 10 0   100% 6 0   74%
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   93% 46 3 0   78% 18 2   89%
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   90% 69 7 0   88% 24 3   89%
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 (no function)   100% 44 0 0   100% 0 0   100%
src / local_deep_research / web_search_engines / search_engine_factory.py create_search_engine   70% 121 36 0   58% 74 17   66%
src / local_deep_research / web_search_engines / search_engine_factory.py _create_full_search_wrapper   0% 64 64 0   0% 44 0   0%
src / local_deep_research / web_search_engines / search_engine_factory.py get_search   73% 26 7 0   56% 16 7   67%
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   69% 13 4 0   100% 4 0   76%
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   83% 52 9 0   73% 22 6   80%
src / local_deep_research / web_search_engines / search_engines_config.py default_search_engine   0% 1 1 0   100% 0 0   0%
src / local_deep_research / web_search_engines / search_engines_config.py local_search_engines   0% 7 7 0   100% 0 0   0%
src / local_deep_research / web_search_engines / search_engines_config.py (no function)   100% 11 0 0   100% 0 0   100%
Total     51% 36775 17931 2   36% 10884 1073   48%

No items found using the specified filter.