🚀 PR Agent: The Original Open-Source PR Reviewer. This project is not the Qodo free tier.
This report presents the forensic synthetic code analysis of The-PR-Agent/pr-agent, a Python project with 12,750 GitHub stars. SynthScan v2.0 examined 83,071 lines of code across 348 source files, recording 3148 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 44.6 places this repository in the Strong AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 3148 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pr_agent/config_loader.py | 94 | def apply_secrets_manager_config(): | CODE |
| LOW | pr_agent/secret_providers/__init__.py | 7 | def validate_secret_provider_setting(): | CODE |
| LOW | pr_agent/mosaico/env_bridge.py | 64 | def _register_langfuse_callback(settings) -> None: | CODE |
| LOW | pr_agent/mosaico/dispatch.py | 212 | def _ask_needs_context_fallback() -> str: | CODE |
| LOW | pr_agent/mosaico/dispatch.py | 302 | def _pr_fetch_failed_fallback(pr_url: str) -> str: | CODE |
| LOW | pr_agent/mosaico/observability.py | 18 | def parse_observability_metadata(raw) -> dict: | CODE |
| LOW | pr_agent/tools/pr_update_changelog.py | 140 | def _prepare_changelog_update(self) -> Tuple[str, str]: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 302 | def _get_suggestions_coverage_footer(self, suggestions_present: bool = True) -> str: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 365 | def publish_persistent_comment_with_history(git_provider: GitProvider, | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 394 | def _is_legacy_suggestions_comment(comment_text: str) -> bool: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 615 | async def _self_reflect_with_fallback(self, suggestion_list: List, patches_diff: str, model: str) -> str: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 646 | async def analyze_self_reflection_response(self, data, response_reflect): | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 712 | def _prepare_pr_code_suggestions(self, predictions: str) -> Dict: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 763 | async def push_inline_code_suggestions(self, data, include_coverage_footer: bool = True): | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 930 | def _infer_space_indentation_unit(space_deltas: list[int]) -> int: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 940 | def _continuation_space_adjustments( | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1098 | def validate_one_liner_suggestion_not_repeating_code(self, suggestion): | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1245 | async def convert_to_decoupled_with_line_numbers(self, patches_diff_list_no_line_numbers, model) -> List[str]: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1281 | def generate_summarized_suggestions(self, data: Dict) -> str: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1417 | async def self_reflect_on_suggestions(self, | CODE |
| LOW | pr_agent/tools/pr_description.py | 538 | def _prepare_pr_answer_with_markers(self) -> Tuple[str, str, str, List[dict]]: | STRING |
| LOW | pr_agent/tools/pr_description.py | 708 | def process_pr_files_prediction(self, pr_body, value): | STRING |
| LOW | pr_agent/tools/pr_similar_issue.py | 401 | def _update_index_with_issues(self, issues_list, repo_name_for_index, upsert=False): | CODE |
| LOW | pr_agent/tools/pr_similar_issue.py | 496 | def _update_table_with_issues(self, issues_list, repo_name_for_index, ingest=False): | CODE |
| LOW | pr_agent/tools/pr_similar_issue.py | 587 | def _update_qdrant_with_issues(self, issues_list, repo_name_for_index, ingest=False): | CODE |
| LOW | pr_agent/tools/pr_line_questions.py | 146 | def _load_conversation_history(self) -> str: | CODE |
| LOW | pr_agent/tools/pr_line_questions.py | 219 | def _fit_conversation_history(self, variables, model): | CODE |
| LOW⚡ | pr_agent/tools/pr_help_docs.py | 120 | def map_documentation_files_to_contents(base_path: str, doc_files: list[str], max_allowed_file_len=5000) -> dict[str, st | CODE |
| LOW⚡ | pr_agent/tools/pr_help_docs.py | 147 | def aggregate_documentation_files_for_prompt_contents(file_path_to_contents: dict[str, str], return_just_headings=False) | CODE |
| LOW⚡ | pr_agent/tools/pr_help_docs.py | 421 | def _gen_filenames_to_contents_map_from_repo(self) -> dict[str, str]: | CODE |
| LOW | pr_agent/tools/pr_help_docs.py | 48 | def extract_model_answer_and_relevant_sources(ai_response: str) -> str | None: | CODE |
| LOW | pr_agent/tools/pr_help_docs.py | 75 | def get_maximal_text_input_length_for_token_count_estimation(): | CODE |
| LOW | pr_agent/tools/pr_help_docs.py | 169 | def format_markdown_q_and_a_response(question_str: str, response_str: str, relevant_sections: list[dict[str, str]], | CODE |
| LOW | pr_agent/tools/pr_help_docs.py | 396 | def _find_all_document_files_matching_exts(self, abs_docs_path: str, ignore_readme=False, max_allowed_files=5000) -> | CODE |
| LOW | pr_agent/tools/pr_help_docs.py | 494 | async def _rank_docs_and_return_them_as_prompt(self, docs_filepath_to_contents: dict[str, str], max_allowed_txt_inpu | CODE |
| LOW⚡ | pr_agent/tools/pr_reviewer.py | 242 | def _should_publish_review_no_suggestions(self, pr_review: str) -> bool: | CODE |
| LOW⚡ | pr_agent/tools/pr_reviewer.py | 419 | def _can_verify_inline_key_issue_publication(self) -> bool: | CODE |
| LOW⚡ | pr_agent/tools/pr_reviewer.py | 422 | def _published_inline_key_issue_fingerprints(self, store: InlineCommentStore, | CODE |
| LOW⚡ | pr_agent/tools/pr_reviewer.py | 434 | def _publish_key_issues_as_inline_comments(self, data: dict) -> dict: | CODE |
| LOW⚡ | pr_agent/tools/pr_reviewer.py | 554 | def _get_previous_review_comment(self): | CODE |
| LOW⚡ | pr_agent/tools/pr_reviewer.py | 567 | def _remove_previous_review_comment(self, comment): | CODE |
| LOW⚡ | pr_agent/tools/pr_reviewer.py | 577 | def _can_run_incremental_review(self) -> bool: | CODE |
| LOW | pr_agent/tools/pr_help_message.py | 272 | async def prepare_relevant_snippets(self, sim_results): | CODE |
| LOW⚡ | pr_agent/tools/ticket_pr_compliance_check.py | 175 | def _get_user_description_for_asana(git_provider) -> str: | CODE |
| LOW⚡ | pr_agent/tools/ticket_pr_compliance_check.py | 187 | def extract_gitlab_ticket_references(pr_description, repo_path, gitlab_url): | CODE |
| LOW | pr_agent/tools/ticket_pr_compliance_check.py | 96 | def _get_asana_request_timeout() -> float: | CODE |
| LOW | pr_agent/tools/ticket_pr_compliance_check.py | 107 | async def _fetch_asana_ticket_content(session, ticket_url: str, max_body_characters: int) -> dict: | CODE |
| LOW | pr_agent/tools/ticket_pr_compliance_check.py | 137 | async def _fetch_asana_ticket_contents( | CODE |
| LOW | pr_agent/tools/ticket_pr_compliance_check.py | 242 | def extract_ticket_links_from_pr_description(pr_description, repo_path, base_url_html='https://github.com'): | CODE |
| LOW | pr_agent/tools/ticket_pr_compliance_check.py | 281 | def extract_ticket_links_from_branch_name(branch_name, repo_path, base_url_html="https://github.com"): | CODE |
| LOW | pr_agent/tools/ticket_pr_compliance_check.py | 574 | async def extract_and_cache_pr_tickets(git_provider, vars): | CODE |
| LOW | pr_agent/tools/pr_questions.py | 82 | def identify_image_in_comment(self): | CODE |
| LOW | pr_agent/git_providers/codecommit_provider.py | 350 | def _is_valid_codecommit_hostname(hostname: str) -> bool: | CODE |
| LOW | pr_agent/git_providers/codecommit_provider.py | 476 | def _get_language_percentages(extensions): | CODE |
| LOW | pr_agent/git_providers/plain_diff_provider.py | 122 | def publish_structured_review(self, review: dict): | CODE |
| LOW | pr_agent/git_providers/azuredevops_provider.py | 137 | def _get_suggestion_end_offset(self, relevant_file: str, relevant_lines_end: int) -> Optional[int]: | CODE |
| LOW | pr_agent/git_providers/azuredevops_provider.py | 149 | def _fallback_suggestion_section(suggestion: dict, reason: str) -> str: | CODE |
| LOW | pr_agent/git_providers/azuredevops_provider.py | 155 | def _publish_fallback_suggestions(self, suggestions: list[tuple[dict, str]]) -> int: | CODE |
| LOW | pr_agent/git_providers/azuredevops_provider.py | 275 | def reply_to_comment_from_comment_id(self, comment_id: int, body: str, is_temporary: bool = False) -> Comment: | CODE |
| LOW | pr_agent/git_providers/azuredevops_provider.py | 771 | def publish_persistent_comment(self, pr_comment: str, | CODE |
| 2048 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/unittest/test_extra_config_url.py | 93 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_extra_config_url.py | 95 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_extra_config_url.py | 237 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_extra_config_url.py | 239 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unittest/test_extra_config_url.py | 21 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unittest/test_extra_config_url.py | 23 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unittest/test_extra_config_url.py | 319 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unittest/test_extra_config_url.py | 326 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_extra_config_url.py | 689 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unittest/test_extra_config_url.py | 691 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unittest/test_diff_pipeline_core.py | 68 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_diff_pipeline_core.py | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_diff_pipeline_core.py | 151 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_diff_pipeline_core.py | 153 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_diff_pipeline_core.py | 253 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_diff_pipeline_core.py | 255 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_diff_pipeline_core.py | 332 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_diff_pipeline_core.py | 334 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unittest/test_diff_pipeline_core.py | 25 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unittest/test_diff_pipeline_core.py | 27 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unittest/test_mosaico_provider.py | 158 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unittest/test_mosaico_provider.py | 160 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_rendering.py | 40 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_rendering.py | 42 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_rendering.py | 105 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_rendering.py | 107 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_rendering.py | 213 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_rendering.py | 215 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_rendering.py | 304 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_rendering.py | 306 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_rendering.py | 369 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_rendering.py | 371 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 140 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 142 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 162 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 164 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 227 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 229 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 297 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 299 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 356 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 358 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 397 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 399 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 718 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_mosaico_router.py | 720 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unittest/test_mosaico_router.py | 569 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unittest/test_mosaico_router.py | 571 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unittest/test_mosaico_router.py | 637 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unittest/test_mosaico_router.py | 639 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_filtering.py | 44 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_filtering.py | 46 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_filtering.py | 88 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_filtering.py | 90 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_filtering.py | 185 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_filtering.py | 187 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_filtering.py | 243 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_filtering.py | 245 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_filtering.py | 359 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unittest/test_pr_code_suggestions_filtering.py | 361 | # --------------------------------------------------------------------------- | STRING |
| 140 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pr_agent/config_loader.py | 59 | except Exception: | CODE |
| LOW | pr_agent/config_loader.py | 114 | except Exception as e: | CODE |
| LOW | pr_agent/config_loader.py | 116 | except Exception as e: | CODE |
| LOW | pr_agent/custom_merge_loader.py | 92 | except Exception as e: | CODE |
| LOW | …agent/secret_providers/aws_secrets_manager_provider.py | 23 | except Exception as e: | CODE |
| LOW | …agent/secret_providers/aws_secrets_manager_provider.py | 34 | except Exception as e: | CODE |
| LOW | …agent/secret_providers/aws_secrets_manager_provider.py | 45 | except Exception as e: | CODE |
| LOW | …agent/secret_providers/aws_secrets_manager_provider.py | 55 | except Exception as e: | CODE |
| MEDIUM | …agent/secret_providers/aws_secrets_manager_provider.py | 11 | def __init__(self): | CODE |
| LOW⚡ | …cret_providers/google_cloud_storage_secret_provider.py | 16 | except Exception as e: | CODE |
| LOW⚡ | …cret_providers/google_cloud_storage_secret_provider.py | 24 | except Exception as e: | CODE |
| LOW⚡ | …cret_providers/google_cloud_storage_secret_provider.py | 32 | except Exception as e: | CODE |
| MEDIUM | …cret_providers/google_cloud_storage_secret_provider.py | 10 | def __init__(self): | CODE |
| LOW | pr_agent/secret_providers/__init__.py | 29 | except Exception as e: | CODE |
| LOW | pr_agent/secret_providers/__init__.py | 36 | except Exception as e: | CODE |
| LOW | pr_agent/mosaico/server.py | 74 | except Exception as e: | CODE |
| LOW | pr_agent/mosaico/dispatch.py | 232 | except Exception: | CODE |
| LOW | pr_agent/mosaico/dispatch.py | 251 | except Exception: | CODE |
| LOW | pr_agent/mosaico/dispatch.py | 297 | except Exception as e: | CODE |
| LOW | pr_agent/mosaico/dispatch.py | 347 | except Exception: | CODE |
| LOW | pr_agent/mosaico/dispatch.py | 413 | except Exception: | CODE |
| LOW | pr_agent/mosaico/observability.py | 77 | except Exception as e: | CODE |
| LOW | pr_agent/mosaico/executor.py | 72 | except Exception as e: | CODE |
| LOW | pr_agent/mosaico/executor.py | 117 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_update_changelog.py | 181 | except Exception: | CODE |
| LOW | pr_agent/tools/pr_update_changelog.py | 212 | except Exception as e: | CODE |
| MEDIUM | pr_agent/tools/pr_update_changelog.py | 200 | def _get_changelog_file(self): | CODE |
| MEDIUM | pr_agent/tools/pr_code_suggestions.py | 1098 | def validate_one_liner_suggestion_not_repeating_code(self, suggestion): | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 274 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 284 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 361 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 426 | except Exception as cleanup_error: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 542 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 675 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 679 | except Exception as e: # | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 697 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 757 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1093 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1120 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1143 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1208 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1236 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1276 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1403 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1456 | except Exception as e: | CODE |
| LOW⚡ | pr_agent/tools/pr_description.py | 217 | except Exception as e: | CODE |
| LOW⚡ | pr_agent/tools/pr_description.py | 227 | except Exception as e: | CODE |
| LOW⚡ | pr_agent/tools/pr_description.py | 233 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_description.py | 783 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_description.py | 946 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_description.py | 427 | except Exception as e: | STRING |
| LOW | pr_agent/tools/pr_description.py | 457 | except Exception as e: | STRING |
| LOW | pr_agent/tools/pr_description.py | 534 | except Exception as e: | STRING |
| LOW | pr_agent/tools/pr_description.py | 585 | except Exception as e: | STRING |
| LOW | pr_agent/tools/pr_description.py | 703 | except Exception as e: | STRING |
| LOW | pr_agent/tools/pr_similar_issue.py | 47 | except Exception: | CODE |
| LOW | pr_agent/tools/pr_similar_issue.py | 184 | except Exception: | CODE |
| LOW | pr_agent/tools/pr_similar_issue.py | 192 | except Exception: | CODE |
| LOW | pr_agent/tools/pr_similar_issue.py | 269 | except Exception as e: | CODE |
| LOW | pr_agent/tools/pr_similar_issue.py | 361 | except Exception: | CODE |
| 442 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pr_agent/config_loader.py | 94 | CODE | |
| LOW | pr_agent/config_loader.py | 125 | CODE | |
| LOW | pr_agent/cli.py | 94 | CODE | |
| LOW | pr_agent/custom_merge_loader.py | 12 | CODE | |
| LOW | pr_agent/mosaico/dispatch.py | 258 | CODE | |
| LOW | pr_agent/mosaico/dispatch.py | 388 | CODE | |
| LOW | pr_agent/mosaico/diff_provider.py | 29 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 155 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 345 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 365 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 646 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 712 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 940 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1048 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1098 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1125 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1147 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1245 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 1281 | CODE | |
| LOW | pr_agent/tools/pr_description.py | 870 | CODE | |
| LOW | pr_agent/tools/pr_description.py | 103 | CODE | |
| LOW | pr_agent/tools/pr_description.py | 239 | CODE | |
| LOW | pr_agent/tools/pr_description.py | 360 | CODE | |
| LOW | pr_agent/tools/pr_description.py | 511 | CODE | |
| LOW | pr_agent/tools/pr_description.py | 596 | CODE | |
| LOW | pr_agent/tools/pr_description.py | 708 | CODE | |
| LOW | pr_agent/tools/pr_similar_issue.py | 19 | CODE | |
| LOW | pr_agent/tools/pr_similar_issue.py | 260 | CODE | |
| LOW | pr_agent/tools/pr_similar_issue.py | 401 | CODE | |
| LOW | pr_agent/tools/pr_similar_issue.py | 496 | CODE | |
| LOW | pr_agent/tools/pr_similar_issue.py | 587 | CODE | |
| LOW | pr_agent/tools/pr_add_docs.py | 178 | CODE | |
| LOW | pr_agent/tools/pr_add_docs.py | 136 | CODE | |
| LOW | pr_agent/tools/pr_line_questions.py | 66 | CODE | |
| LOW | pr_agent/tools/pr_generate_labels.py | 65 | CODE | |
| LOW | pr_agent/tools/pr_generate_labels.py | 159 | CODE | |
| LOW | pr_agent/tools/pr_help_docs.py | 81 | CODE | |
| LOW | pr_agent/tools/pr_help_docs.py | 120 | CODE | |
| LOW | pr_agent/tools/pr_help_docs.py | 147 | CODE | |
| LOW | pr_agent/tools/pr_help_docs.py | 169 | CODE | |
| LOW | pr_agent/tools/pr_help_docs.py | 396 | CODE | |
| LOW | pr_agent/tools/pr_help_docs.py | 421 | CODE | |
| LOW | pr_agent/tools/pr_reviewer.py | 524 | CODE | |
| LOW | pr_agent/tools/pr_reviewer.py | 621 | CODE | |
| LOW | pr_agent/tools/pr_help_message.py | 96 | CODE | |
| LOW | pr_agent/tools/ticket_pr_compliance_check.py | 187 | CODE | |
| LOW | pr_agent/tools/ticket_pr_compliance_check.py | 242 | CODE | |
| LOW | pr_agent/tools/ticket_pr_compliance_check.py | 387 | CODE | |
| LOW | pr_agent/tools/ticket_pr_compliance_check.py | 574 | CODE | |
| LOW | pr_agent/git_providers/codecommit_provider.py | 429 | CODE | |
| LOW | pr_agent/git_providers/plain_diff_provider.py | 45 | CODE | |
| LOW | pr_agent/git_providers/azuredevops_provider.py | 180 | CODE | |
| LOW | pr_agent/git_providers/azuredevops_provider.py | 551 | CODE | |
| LOW | pr_agent/git_providers/azuredevops_provider.py | 859 | CODE | |
| LOW | pr_agent/git_providers/github_provider.py | 107 | CODE | |
| LOW | pr_agent/git_providers/github_provider.py | 250 | CODE | |
| LOW | pr_agent/git_providers/github_provider.py | 472 | CODE | |
| LOW | pr_agent/git_providers/github_provider.py | 647 | CODE | |
| LOW | pr_agent/git_providers/github_provider.py | 947 | CODE | |
| LOW | pr_agent/git_providers/github_provider.py | 1517 | CODE | |
| 80 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …agent/secret_providers/aws_secrets_manager_provider.py | 3 | CODE | |
| LOW | pr_agent/mosaico/server.py | 28 | CODE | |
| LOW | pr_agent/mosaico/server.py | 61 | CODE | |
| LOW | pr_agent/tools/pr_update_changelog.py | 15 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 36 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 36 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 36 | CODE | |
| LOW | pr_agent/tools/pr_description.py | 28 | CODE | |
| LOW | pr_agent/tools/pr_description.py | 33 | CODE | |
| LOW | pr_agent/tools/pr_description.py | 33 | CODE | |
| LOW | pr_agent/tools/pr_line_questions.py | 1 | CODE | |
| LOW | pr_agent/tools/pr_line_questions.py | 10 | CODE | |
| LOW | pr_agent/tools/pr_line_questions.py | 13 | CODE | |
| LOW | pr_agent/tools/pr_line_questions.py | 23 | CODE | |
| LOW | pr_agent/tools/pr_generate_labels.py | 2 | CODE | |
| LOW | pr_agent/tools/pr_generate_labels.py | 4 | CODE | |
| LOW | pr_agent/git_providers/azuredevops_provider.py | 1 | CODE | |
| LOW | pr_agent/git_providers/gitlab_provider.py | 2 | CODE | |
| LOW | pr_agent/git_providers/gitlab_provider.py | 7 | CODE | |
| LOW | pr_agent/git_providers/gitlab_provider.py | 7 | CODE | |
| LOW | pr_agent/git_providers/gitlab_provider.py | 8 | CODE | |
| LOW | pr_agent/git_providers/gitlab_provider.py | 11 | CODE | |
| LOW | pr_agent/algo/cli_args.py | 1 | CODE | |
| LOW | pr_agent/algo/cli_args.py | 1 | CODE | |
| LOW | pr_agent/algo/cli_args.py | 2 | CODE | |
| LOW | pr_agent/algo/inline_comment_dedup.py | 32 | CODE | |
| LOW | pr_agent/algo/utils.py | 1 | CODE | |
| LOW | pr_agent/algo/utils.py | 3 | CODE | |
| LOW | pr_agent/algo/skills_loader.py | 38 | CODE | |
| LOW | pr_agent/algo/pr_processing.py | 1 | CODE | |
| LOW | pr_agent/algo/pr_processing.py | 8 | CODE | |
| LOW | pr_agent/algo/pr_processing.py | 15 | CODE | |
| LOW | pr_agent/algo/git_patch_processing.py | 1 | CODE | |
| LOW | pr_agent/algo/git_patch_processing.py | 6 | CODE | |
| LOW | pr_agent/algo/ai_handlers/langchain_ai_handler.py | 11 | CODE | |
| LOW | pr_agent/log/__init__.py | 3 | CODE | |
| LOW | pr_agent/servers/github_app.py | 19 | CODE | |
| LOW | pr_agent/servers/github_polling.py | 3 | CODE | |
| LOW | tests/unittest/test_clip_tokens.py | 3 | CODE | |
| LOW | tests/unittest/test_mosaico_provider.py | 82 | CODE | |
| LOW | tests/unittest/test_mosaico_router.py | 464 | CODE | |
| LOW | tests/unittest/test_mosaico_router.py | 506 | CODE | |
| LOW | tests/unittest/test_codecommit_provider.py | 5 | CODE | |
| LOW | tests/unittest/test_extract_issue_from_branch.py | 1 | CODE | |
| LOW | tests/unittest/test_mosaico_a2a_roundtrip.py | 25 | CODE | |
| LOW | tests/unittest/test_fresh_vars_functionality.py | 22 | CODE | |
| LOW | tests/unittest/test_aws_secrets_manager_provider.py | 5 | CODE | |
| LOW | tests/unittest/test_handle_patch_deletions.py | 2 | CODE | |
| LOW | tests/unittest/test_handle_patch_deletions.py | 5 | CODE | |
| LOW | tests/unittest/test_litellm_reasoning_effort.py | 1 | CODE | |
| LOW | tests/health_test/main.py | 1 | CODE | |
| LOW | tests/health_test/main.py | 5 | CODE | |
| LOW | tests/health_test/main.py | 9 | CODE | |
| LOW | tests/health_test/main.py | 10 | CODE | |
| LOW | tests/health_test/main.py | 13 | CODE | |
| LOW | tests/e2e_tests/test_gitea_app.py | 9 | CODE | |
| LOW | tests/e2e_tests/test_gitea_app.py | 9 | CODE | |
| LOW | tests/e2e_tests/test_gitea_app.py | 9 | CODE | |
| LOW | tests/e2e_tests/test_bitbucket_app.py | 1 | CODE | |
| LOW | tests/e2e_tests/test_bitbucket_app.py | 3 | CODE | |
| 6 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | pr_agent/settings/configuration.toml | 136 | enable_pr_description=true # adds a section with an AI-generated summary of the PR changes | CODE |
| HIGH | pr_agent/settings/pr_reviewer_prompts.toml | 11 | ### AI-generated changes summary: | COMMENT |
| HIGH | …e_suggestions/pr_code_suggestions_reflect_prompts.toml | 49 | ### AI-generated changes summary: | COMMENT |
| HIGH | …ings/code_suggestions/pr_code_suggestions_prompts.toml | 13 | ### AI-generated changes summary: | COMMENT |
| HIGH | …estions/pr_code_suggestions_prompts_not_decoupled.toml | 14 | ### AI-generated changes summary: | COMMENT |
| HIGH | pr_agent/tools/pr_description.py | 197 | # Pass None when the title is not AI-generated so the provider | COMMENT |
| HIGH | pr_agent/algo/pr_processing.py | 551 | f"### AI-generated changes summary:\n{file.ai_file_summary['long_summar | CODE |
| HIGH | docs/docs/core-abilities/metadata.md | 31 | ### AI-generated file summary: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pr_agent/tools/pr_description.py | 65 | # Initialize the variables dictionary | COMMENT |
| MEDIUM | pr_agent/tools/pr_generate_labels.py | 40 | # Initialize the variables dictionary | COMMENT |
| MEDIUM | pr_agent/git_providers/gitlab_provider.py | 1158 | # Create a general note on the file in the MR | COMMENT |
| MEDIUM | pr_agent/algo/token_handler.py | 25 | _lock = Lock() # Create a lock object | CODE |
| MEDIUM | pr_agent/agent/pr_agent.py | 197 | # Define the language-specific instruction and the separator | COMMENT |
| MEDIUM | pr_agent/servers/azuredevops_server_webhook.py | 1 | # This file contains the code for the Azure DevOps Server webhook server. | COMMENT |
| MEDIUM | tests/unittest/test_add_docs_trigger.py | 27 | # Define a FakeGitProvider for both apply_repo_settings and PRAddDocs | COMMENT |
| MEDIUM | tests/unittest/test_codecommit_client.py | 8 | # Create a mock CodeCommitClient instance and codecommit_client member | COMMENT |
| MEDIUM | tests/unittest/test_codecommit_client.py | 83 | # Create a mock CodeCommitClient instance and codecommit_client member | COMMENT |
| MEDIUM | tests/unittest/test_codecommit_client.py | 107 | # Create a mock CodeCommitClient instance and codecommit_client member | COMMENT |
| MEDIUM | tests/unittest/test_extend_patch.py | 125 | # Create a TokenHandler instance with dummy data | COMMENT |
| MEDIUM | tests/unittest/test_extend_patch.py | 132 | # Create a list of languages with files containing base_file and patch data | COMMENT |
| MEDIUM | tests/e2e_tests/test_github_app.py | 39 | # Create a new branch from the base branch | COMMENT |
| MEDIUM | tests/e2e_tests/test_github_app.py | 59 | # Create a pull request | COMMENT |
| MEDIUM | tests/e2e_tests/test_bitbucket_app.py | 43 | # Create a new branch from the base branch | COMMENT |
| MEDIUM | tests/e2e_tests/test_bitbucket_app.py | 58 | # Create a pull request | COMMENT |
| MEDIUM | tests/e2e_tests/test_gitlab_webhook.py | 36 | # Create a new branch from the base branch | COMMENT |
| MEDIUM | tests/e2e_tests/test_gitlab_webhook.py | 50 | # Create a merge request | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | pr_agent/git_providers/codecommit_provider.py | 0 | retrieves the list of files that have been modified, added, deleted, or renamed in a pull request in gitlab, along with | STRING |
| HIGH | pr_agent/git_providers/github_provider.py | 0 | retrieves the list of files that have been modified, added, deleted, or renamed in a pull request in gitlab, along with | STRING |
| HIGH | pr_agent/git_providers/gitlab_provider.py | 0 | retrieves the list of files that have been modified, added, deleted, or renamed in a pull request in gitlab, along with | STRING |
| HIGH | tests/unittest/test_mosaico_smoke.py | 0 | \ review: estimated_effort_to_review_[1-5]: '2' score: '85' relevant_tests: 'no' key_issues_to_review: - relevant_file: | STRING |
| HIGH | tests/unittest/test_mosaico_provider.py | 0 | \ review: estimated_effort_to_review_[1-5]: '2' score: '85' relevant_tests: 'no' key_issues_to_review: - relevant_file: | STRING |
| HIGH | tests/unittest/test_mosaico_a2a_roundtrip.py | 0 | \ review: estimated_effort_to_review_[1-5]: '2' score: '85' relevant_tests: 'no' key_issues_to_review: - relevant_file: | STRING |
| HIGH | tests/unittest/test_plain_diff_provider.py | 0 | diff --git a/foo.py b/foo.py index 1111111..2222222 100644 --- a/foo.py +++ b/foo.py @@ -1,3 +1,3 @@ line1 -line2 +line2 | STRING |
| HIGH | tests/unittest/test_plain_diff_mode_e2e.py | 0 | diff --git a/foo.py b/foo.py index 1111111..2222222 100644 --- a/foo.py +++ b/foo.py @@ -1,3 +1,3 @@ line1 -line2 +line2 | STRING |
| HIGH | tests/unittest/test_diff_parsing.py | 0 | diff --git a/foo.py b/foo.py index 1111111..2222222 100644 --- a/foo.py +++ b/foo.py @@ -1,3 +1,3 @@ line1 -line2 +line2 | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | requirements.txt | 41 | pydantic==2.13.3 | COMMENT |
| LOW | .pre-commit-config.yaml | 21 | # rev must match what's in dev-requirements.txt | COMMENT |
| LOW | .pre-commit-config.yaml | 41 | # hooks: | COMMENT |
| LOW | docker/mosaico/smoke_test.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | pr_agent/settings/custom_labels.toml | 1 | [config] | COMMENT |
| LOW | pr_agent/settings/configuration.toml | 81 | # extended thinking for Claude reasoning models | COMMENT |
| LOW | pr_agent/settings/configuration.toml | 321 | handle_push_trigger = false | COMMENT |
| LOW | pr_agent/settings/configuration.toml | 361 | # description_path= "path/to/description.md" | COMMENT |
| LOW | pr_agent/settings/configuration.toml | 401 | callback_timeout_seconds = 30 # max seconds to wait for pending litellm callbacks to flush before exiting | COMMENT |
| LOW | pr_agent/settings/configuration.toml | 441 | COMMENT | |
| LOW | pr_agent/settings/.secrets_template.toml | 1 | # QUICKSTART: | COMMENT |
| LOW | pr_agent/git_providers/azuredevops_provider.py | 601 | # pull_request_id=self.pr_num, | COMMENT |
| LOW | pr_agent/git_providers/utils.py | 21 | # from a repo's .pr_agent.toml. For each section listed here, only the keys in | COMMENT |
| LOW | pr_agent/git_providers/git_provider.py | 601 | except Exception as e: | COMMENT |
| LOW | pr_agent/algo/utils.py | 621 | COMMENT | |
| LOW | pr_agent/algo/ai_handlers/litellm_ai_handler.py | 61 | # forwards a truthy litellm.api_key, which would authenticate this request | COMMENT |
| LOW | pr_agent/algo/ai_handlers/litellm_ai_handler.py | 641 | try: | COMMENT |
| LOW | pr_agent/algo/ai_handlers/litellm_ai_handler.py | 841 | elif isinstance(model, str) and model.startswith("openrouter/"): | COMMENT |
| LOW | pr_agent/servers/gunicorn_config.py | 1 | import gc | COMMENT |
| LOW | pr_agent/servers/gunicorn_config.py | 21 | # | COMMENT |
| LOW | pr_agent/servers/gunicorn_config.py | 41 | # sync class should handle most 'normal' types of work | COMMENT |
| LOW | pr_agent/servers/gunicorn_config.py | 61 | # | COMMENT |
| LOW | pr_agent/servers/gunicorn_config.py | 161 | worker_connections = 1000 | COMMENT |
| LOW | pr_agent/servers/gunicorn_config.py | 181 | # True or False | COMMENT |
| LOW | pr_agent/servers/gunicorn_config.py | 201 | # umask - A mask for file permissions written by Gunicorn. Note that | COMMENT |
| LOW | pr_agent/servers/gunicorn_config.py | 221 | group = None | COMMENT |
| LOW | pr_agent/servers/gunicorn_config.py | 241 | # | COMMENT |
| LOW | pr_agent/servers/gunicorn_config.py | 261 | # | COMMENT |
| LOW | tests/unittest/test_plain_diff_provider.py | 161 | def test_path_traversal_file_not_read(cfg, tmp_path, monkeypatch): | COMMENT |
| LOW | tests/unittest/test_fetching_sub_issues.py | 1 | # Currently doing API calls - wrong ! | COMMENT |
| LOW | tests/unittest/test_fetching_sub_issues.py | 21 | # github_provider = GithubProvider() | COMMENT |
| LOW | tests/unittest/test_fetching_sub_issues.py | 41 | # # Verify ticket structure | COMMENT |
| LOW | tests/unittest/test_fetching_sub_issues.py | 61 | # | COMMENT |
| LOW | tests/unittest/test_fetching_sub_issues.py | 81 | # | COMMENT |
| LOW | tests/unittest/test_fetching_sub_issues.py | 101 | # Test fetch_sub_issues() to ensure an empty set is returned for an issue with no sub-issues. | COMMENT |
| LOW | docs/docs/installation/azure.md | 1 | ## Azure DevOps Pipeline | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | pr_agent/tools/pr_generate_labels.py | 105 | Prepare the AI prediction for the PR labels based on the provided model. Args: model (str) | STRING |
| HIGH | pr_agent/algo/utils.py | 775 | Fix broken or incomplete JSON messages and return the parsed JSON data. Args: json_message (str): A st | STRING |
| HIGH | pr_agent/algo/utils.py | 842 | Update the settings of the Dynaconf object based on the arguments passed to the function. Args: args: | STRING |
| HIGH | pr_agent/algo/utils.py | 1258 | Clip the number of tokens in a string to a maximum number of tokens. This function limits text to a specified | STRING |
| HIGH | pr_agent/algo/pr_processing.py | 394 | Retrieves the diff files from a Git provider, sorts them by main language, and generates patches for each file. | STRING |
| HIGH | pr_agent/algo/ai_handlers/litellm_helpers.py | 153 | Process LITELLM.EXTRA_BODY configuration and update kwargs accordingly. Args: kwargs: The current kwar | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/unittest/test_bitbucket_provider.py | 116 | mock_get_logger.return_value.opt.return_value.warning.assert_called_once_with( | CODE |
| CRITICAL | tests/unittest/test_gitlab_provider.py | 555 | mock_get_logger.return_value.opt.return_value.warning.assert_called_once_with( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | pr_agent/settings/configuration.toml | 475 | enable_auto_best_practices = true # public - general flag to disable all auto best practices usage | STRING |
| MEDIUM⚡ | pr_agent/settings/configuration.toml | 476 | utilize_auto_best_practices = true # public - disable usage of auto best practices in the 'improve' tool | STRING |
| MEDIUM⚡ | pr_agent/settings/configuration.toml | 477 | extra_instructions = "" # public - extra instructions to the auto best practices generation prompt | STRING |
| MEDIUM⚡ | pr_agent/git_providers/github_provider.py | 1086 | # Be robust to providers built without full __init__ (e.g. __new__ in tests/helpers): | COMMENT |
| LOW | pr_agent/git_providers/git_provider.py | 296 | # if the existing description wasn't generated by the pr-agent, just return it as-is | COMMENT |
| MEDIUM⚡ | tests/unittest/test_pr_questions_helpers.py | 88 | # rather than the exact full match, to remain robust to that quirk. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | pr_agent/tools/pr_help_docs.py | 107 | # Check if it's an underline (heading is above it) | COMMENT |
| LOW⚡ | pr_agent/tools/pr_help_docs.py | 409 | # Check if file has one of the specified extensions | COMMENT |
| LOW | pr_agent/tools/pr_help_docs.py | 525 | # Check if the updated list of documents does not exceed limits and trim if it does: | COMMENT |
| LOW | pr_agent/git_providers/github_provider.py | 1199 | if parsed_url.path.startswith('/api/v3'): #Check if came from github app | CODE |
| LOW | pr_agent/git_providers/github_provider.py | 1203 | if 'api.github.com' in parsed_url.netloc or '/api/v3' in issue_url: #Check if came from github app | CODE |
| LOW | pr_agent/agent/pr_agent.py | 201 | # Check if the specific language instruction is already present to avoid duplication | COMMENT |
| LOW | pr_agent/servers/bitbucket_server_webhook.py | 113 | # Check if ALL files are outside allowed folders | COMMENT |
| LOW | pr_agent/servers/bitbucket_server_webhook.py | 239 | # Check if the parsed object is a list of strings | COMMENT |
| LOW | pr_agent/servers/github_action_runner.py | 92 | # Check if required environment variables are set | COMMENT |
| LOW | pr_agent/servers/bitbucket_app.py | 260 | # Check if the PR should be processed | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pr_agent/algo/ai_handlers/litellm_ai_handler.py | 29 | DUMMY_LITELLM_API_KEY = "dummy_key" # placeholder set when no OpenAI key is configured | CODE |
| LOW⚡ | tests/unittest/test_extra_config_url.py | 160 | fake_token = "TEST-AUTH-TOKEN-NOT-REAL" | CODE |
| LOW⚡ | tests/unittest/test_extra_config_url.py | 161 | _CapturingHandler.require_header = ("Private-Token", fake_token) | CODE |
| LOW⚡ | tests/unittest/test_extra_config_url.py | 162 | monkeypatch.setenv("PR_AGENT_EXTRA_CONFIG_AUTH_HEADER", f"PRIVATE-TOKEN: {fake_token}") | CODE |
| LOW⚡ | tests/unittest/test_extra_config_url.py | 170 | assert _CapturingHandler.captured_headers.get("Private-Token") == fake_token | CODE |
| LOW | tests/unittest/test_gitlab_provider.py | 82 | "GITLAB.PERSONAL_ACCESS_TOKEN": "fake_token" | CODE |
| LOW | tests/unittest/test_gitlab_provider.py | 1153 | "GITLAB.PERSONAL_ACCESS_TOKEN": "fake_token", | CODE |
| LOW | tests/unittest/test_litellm_api_key_guard.py | 144 | # Set after init so __init__'s own dummy-key assignment doesn't overwrite it | COMMENT |
| LOW | tests/unittest/test_litellm_api_key_guard.py | 507 | out with "dummy_key". Keeping the placeholder in ``litellm.openai_key`` — which | STRING |
| LOW | tests/unittest/test_litellm_api_key_guard.py | 583 | "dummy_key" there for the lifetime of the process, and every later request | STRING |
| LOW⚡ | tests/unittest/test_git_provider_utils.py | 169 | "settings": b"[github]\nuser_token = \"dummy-value\"\n[pr_reviewer]\nnum_max_findings =", | CODE |
| LOW | tests/unittest/test_git_provider_utils.py | 180 | assert "dummy-value" not in provider.comments[1] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pr_agent/agent/pr_agent.py | 230 | async def handle_request(self, pr_url, request, notify=None) -> bool: | CODE |
| LOW | pr_agent/servers/gitlab_webhook.py | 51 | async def handle_request(api_url: str, body: str, log_context: dict, sender_id: str, notify=None): | CODE |
| LOW | pr_agent/servers/bitbucket_server_webhook.py | 30 | def handle_request( | CODE |
| LOW | pr_agent/servers/github_app.py | 311 | async def handle_request(body: Dict[str, Any], event: str): | CODE |
| LOW | pr_agent/servers/gitea_app.py | 63 | async def handle_request(body: Dict[str, Any], event: str): | CODE |
| LOW | tests/unittest/test_extra_config_url.py | 289 | async def handle_request(self, *_args, **_kwargs): | CODE |
| LOW | tests/unittest/test_github_action_runner_core.py | 185 | async def handle_request(self, url, body, notify=None): | CODE |
| LOW | tests/unittest/test_github_action_runner_core.py | 235 | async def handle_request(self, url, body, notify=None): | CODE |
| LOW⚡ | tests/unittest/test_cli_plain_diff_mode.py | 84 | async def handle_request(self, target, request, notify=None): | CODE |
| LOW⚡ | tests/unittest/test_cli_plain_diff_mode.py | 100 | async def handle_request(self, target, request, notify=None): | CODE |
| LOW | tests/unittest/test_webhook_logic_core.py | 236 | async def handle_request(self, _url, command, notify=None): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/docs/usage-guide/changing_a_model.md | 563 | Keep the `openai/` prefix on the model name, whatever OrcaRouter model ID you use (`openai/anthropic/claude-fable-5`, `o | CODE |
| MEDIUM | docs/docs/usage-guide/changing_a_model.md | 575 | custom_model_max_tokens = 400000 # the context window Neon publishes for the model | CODE |
| MEDIUM | docs/docs/core-abilities/dynamic_context.md | 30 | ## Challenges of expanding the context window | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pr_agent/tools/pr_update_changelog.py | 138 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 365 | CODE | |
| LOW | pr_agent/tools/pr_code_suggestions.py | 585 | CODE | |
| LOW | pr_agent/git_providers/bitbucket_provider.py | 520 | CODE | |
| LOW | pr_agent/servers/help.py | 20 | CODE | |
| LOW | tests/unittest/test_pr_description_output_core.py | 51 | CODE | |
| LOW | tests/unittest/test_ticket_extraction_async.py | 70 | CODE | |
| LOW | tests/unittest/test_gitlab_provider.py | 39 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pr_agent/git_providers/codecommit_provider.py | 371 | # TODO: implement support for multiple targets in one CodeCommit PR | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pr_agent/git_providers/git_provider.py | 160 | # Example usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pr_agent/algo/skills_loader.py | 308 | def _set_cached_context(cache_settings: Tuple[bool, Tuple[object, ...], Optional[int]], value: str) -> None: | CODE |