Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.
1722 matches across 15 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | code_review_graph/communities.py | 28 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 30 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 40 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 42 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 63 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 65 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 157 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 159 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 231 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 233 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 345 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 347 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 436 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 438 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 580 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/communities.py | 582 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/exports.py | 16 | # ------------------------------------------------------------------- |
| MEDIUM | code_review_graph/exports.py | 18 | # ------------------------------------------------------------------- |
| MEDIUM | code_review_graph/exports.py | 82 | # ------------------------------------------------------------------- |
| MEDIUM | code_review_graph/exports.py | 84 | # ------------------------------------------------------------------- |
| MEDIUM | code_review_graph/exports.py | 153 | # ------------------------------------------------------------------- |
| MEDIUM | code_review_graph/exports.py | 155 | # ------------------------------------------------------------------- |
| MEDIUM | code_review_graph/exports.py | 315 | # ------------------------------------------------------------------- |
| MEDIUM | code_review_graph/exports.py | 317 | # ------------------------------------------------------------------- |
| MEDIUM | code_review_graph/changes.py | 28 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/changes.py | 30 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/changes.py | 169 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/changes.py | 171 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/changes.py | 214 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/changes.py | 216 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/changes.py | 272 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/changes.py | 274 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/spring_resolver.py | 50 | # ----------------------------------------------------------------------- |
| MEDIUM | code_review_graph/spring_resolver.py | 53 | # ----------------------------------------------------------------------- |
| MEDIUM | code_review_graph/spring_resolver.py | 74 | # ----------------------------------------------------------------------- |
| MEDIUM | code_review_graph/spring_resolver.py | 81 | # ----------------------------------------------------------------------- |
| MEDIUM | code_review_graph/spring_resolver.py | 100 | # ----------------------------------------------------------------------- |
| MEDIUM | code_review_graph/spring_resolver.py | 103 | # ----------------------------------------------------------------------- |
| MEDIUM | code_review_graph/spring_resolver.py | 113 | # ----------------------------------------------------------------------- |
| MEDIUM | code_review_graph/spring_resolver.py | 115 | # ----------------------------------------------------------------------- |
| MEDIUM | code_review_graph/tsconfig_resolver.py | 31 | # ------------------------------------------------------------------ |
| MEDIUM | code_review_graph/tsconfig_resolver.py | 33 | # ------------------------------------------------------------------ |
| MEDIUM | code_review_graph/tsconfig_resolver.py | 61 | # ------------------------------------------------------------------ |
| MEDIUM | code_review_graph/tsconfig_resolver.py | 63 | # ------------------------------------------------------------------ |
| MEDIUM | code_review_graph/tsconfig_resolver.py | 226 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/tsconfig_resolver.py | 228 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/refactor.py | 47 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/refactor.py | 49 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/refactor.py | 68 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/refactor.py | 70 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/refactor.py | 180 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/refactor.py | 182 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/refactor.py | 582 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/refactor.py | 584 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/refactor.py | 672 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/refactor.py | 674 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/graph.py | 28 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/graph.py | 30 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/graph.py | 138 | # --------------------------------------------------------------------------- |
| MEDIUM | code_review_graph/graph.py | 140 | # --------------------------------------------------------------------------- |
| 256 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | code_review_graph/communities.py | 635 | def incremental_detect_communities( |
| LOW | code_review_graph/communities.py | 806 | def get_architecture_overview(store: GraphStore) -> dict[str, Any]: |
| LOW | code_review_graph/analysis.py | 213 | def find_surprising_connections( |
| LOW | code_review_graph/analysis.py | 317 | def generate_suggested_questions( |
| LOW | code_review_graph/jedi_resolver.py | 234 | def _find_untracked_method_calls(root, is_test_file: bool = False): |
| LOW | code_review_graph/refactor.py | 229 | def _collect_type_referenced_names(store: GraphStore) -> set[str]: |
| LOW | code_review_graph/skills.py | 595 | def generate_codex_hooks_config(repo_root: Path) -> dict[str, Any]: |
| LOW | code_review_graph/skills.py | 1088 | def inject_platform_instructions(repo_root: Path, target: str = "all") -> list[str]: |
| LOW | code_review_graph/skills.py | 1118 | def generate_cursor_hooks_config() -> dict[str, Any]: |
| LOW | code_review_graph/skills.py | 1065 | def install_gemini_cli_skills(repo_root: Path) -> Path: |
| LOW | code_review_graph/context_savings.py | 201 | def format_context_savings_panel( |
| LOW | code_review_graph/graph.py | 354 | def search_edges_by_target_name(self, name: str, kind: str = "CALLS") -> list[GraphEdge]: |
| LOW | code_review_graph/graph.py | 475 | def resolve_bare_call_targets(self) -> int: |
| LOW | code_review_graph/graph.py | 746 | def _get_impact_radius_networkx( |
| LOW | code_review_graph/graph.py | 954 | def get_flow_criticalities_for_node(self, node_id: int) -> list[float]: |
| LOW | code_review_graph/graph.py | 974 | def get_community_ids_by_qualified_names( |
| LOW | code_review_graph/graph.py | 1005 | def get_nodes_without_signature(self) -> list[sqlite3.Row]: |
| LOW | code_review_graph/graph.py | 1148 | def get_nodes_by_community_id( |
| LOW | code_review_graph/rescript_resolver.py | 36 | def resolve_rescript_cross_module(store: GraphStore) -> dict: |
| LOW | code_review_graph/parser.py | 3661 | def _extract_js_var_functions( |
| LOW | code_review_graph/parser.py | 6645 | def _handle_r_binary_operator( |
| LOW | code_review_graph/parser.py | 663 | def _rescript_brace_depth_array(cleaned: str) -> list[int]: |
| LOW | code_review_graph/parser.py | 826 | def _detect_language_from_shebang(path: Path) -> Optional[str]: |
| LOW | code_review_graph/parser.py | 1453 | def _parse_databricks_py_notebook( |
| LOW | code_review_graph/parser.py | 2396 | def _elixir_function_name_and_params( |
| LOW | code_review_graph/parser.py | 2425 | def _extract_elixir_constructs( |
| LOW | code_review_graph/parser.py | 2611 | def _extract_nix_flake_input_urls( |
| LOW | code_review_graph/parser.py | 2661 | def _extract_nix_import_targets(self, rhs_node) -> list[tuple[str, int]]: |
| LOW | code_review_graph/parser.py | 2879 | def _extract_bash_source_command( |
| LOW | code_review_graph/parser.py | 2915 | def _extract_dart_calls_from_children( |
| LOW | code_review_graph/parser.py | 3072 | def _julia_call_first_identifier(self, call_expr) -> Optional[str]: |
| LOW | code_review_graph/parser.py | 3081 | def _extract_julia_constructs( |
| LOW | code_review_graph/parser.py | 3438 | def _handle_lua_variable_declaration( |
| LOW | code_review_graph/parser.py | 3547 | def _handle_lua_table_function( |
| LOW | code_review_graph/parser.py | 3748 | def _extract_js_field_function( |
| LOW | code_review_graph/parser.py | 3866 | def _emit_spring_field_injection( |
| LOW | code_review_graph/parser.py | 3938 | def _emit_spring_constructor_injection( |
| LOW | code_review_graph/parser.py | 3976 | def _emit_temporal_stub_fields( |
| LOW | code_review_graph/parser.py | 4034 | def _get_kafka_annotation_topics(annotation_node) -> list[str]: |
| LOW | code_review_graph/parser.py | 4064 | def _emit_kafka_edges_from_class( |
| LOW | code_review_graph/parser.py | 4146 | def _emit_kafka_edges_from_method( |
| LOW | code_review_graph/parser.py | 4671 | def _get_java_method_and_receiver(node) -> tuple[Optional[str], Optional[str]]: |
| LOW | code_review_graph/parser.py | 4712 | def _extract_jsx_component_call( |
| LOW | code_review_graph/parser.py | 4752 | def _resolve_jsx_component_target( |
| LOW | code_review_graph/parser.py | 4803 | def _extract_value_references( |
| LOW | code_review_graph/parser.py | 5013 | def _extract_solidity_constructs( |
| LOW | code_review_graph/parser.py | 5254 | def _collect_js_exported_local_names( |
| LOW | code_review_graph/parser.py | 6503 | def _get_jsx_component_reference(self, node) -> Optional[tuple[Optional[str], str]]: |
| LOW | code_review_graph/parser.py | 6538 | def _get_member_expression_root_name(self, node) -> Optional[str]: |
| LOW | code_review_graph/parser.py | 6548 | def _looks_like_component_name(name: str) -> bool: |
| LOW | code_review_graph/cli.py | 133 | def _instruction_files_to_modify( |
| LOW | code_review_graph/search.py | 80 | def extract_query_identifiers(query: str) -> list[str]: |
| LOW | code_review_graph/main.py | 96 | async def build_or_update_graph_tool( |
| LOW | code_review_graph/main.py | 279 | def semantic_search_nodes_tool( |
| LOW | code_review_graph/main.py | 395 | def find_large_functions_tool( |
| LOW | code_review_graph/main.py | 551 | def get_architecture_overview_tool( |
| LOW | code_review_graph/main.py | 795 | def get_surprising_connections_tool( |
| LOW | code_review_graph/main.py | 815 | def get_suggested_questions_tool( |
| LOW | code_review_graph/incremental.py | 234 | def _write_data_dir_gitignore(data_dir: Path) -> None: |
| LOW | code_review_graph/incremental.py | 327 | def ensure_repo_gitignore_excludes_crg(repo_root: Path) -> str: |
| 896 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | code_review_graph/skills.py | 966 | cat > /dev/null || true |
| HIGH | code_review_graph/skills.py | 968 | msg="$(code-review-graph status --repo "__CRG_REPO__" 2>&1 | head -n 1 || true)" |
| HIGH | code_review_graph/skills.py | 974 | ' 2>/dev/null || echo '{"suppressOutput": true}' |
| HIGH | code_review_graph/skills.py | 563 | "cat >/dev/null || true; " |
| HIGH | code_review_graph/skills.py | 581 | "cat >/dev/null || true; " |
| HIGH | code_review_graph/skills.py | 606 | "cat >/dev/null || true; " |
| HIGH | code_review_graph/skills.py | 624 | "cat >/dev/null || true; " |
| HIGH | code_review_graph/skills.py | 651 | code-review-graph update || true |
| HIGH | code_review_graph/skills.py | 652 | code-review-graph detect-changes --brief || true |
| HIGH | code_review_graph/skills.py | 985 | cat > /dev/null || true |
| HIGH | code_review_graph/skills.py | 987 | code-review-graph update --skip-flows --repo "__CRG_REPO__" >/dev/null 2>&1 || true |
| HIGH | code_review_graph/skills.py | 1185 | " 2>/dev/null || echo '{"passed":true}' |
| HIGH | code_review_graph/skills.py | 1207 | " <<< "$output" 2>/dev/null || echo '{"passed":true}' |
| HIGH | code_review_graph/skills.py | 1229 | " <<< "$output" 2>/dev/null || echo '{"passed":true}' |
| HIGH | code_review_graph/visualization.py | 832 | var bg = communityColoringOn && d.community_id != null ? communityColorScale(d.community_id) : (KIND_COLOR[d.kind] || |
| HIGH | code_review_graph/visualization.py | 837 | if (d.line_start != null) h += '<div class="tt-row"><span class="tt-label">Lines: </span>' + d.line_start + ' \u2013 ' |
| HIGH | code_review_graph/visualization.py | 837 | if (d.line_start != null) h += '<div class="tt-row"><span class="tt-label">Lines: </span>' + d.line_start + ' \u2013 ' |
| HIGH | code_review_graph/visualization.py | 840 | if (d.community_id != null) { |
| HIGH | code_review_graph/visualization.py | 890 | CONTAINS: { dash:null, width:1, opacity:0.14, marker:"" }, |
| HIGH | code_review_graph/visualization.py | 891 | CALLS: { dash:null, width:2, opacity:0.7, marker:"url(#arrow-calls)" }, |
| HIGH | code_review_graph/visualization.py | 898 | function eStyle(d) { return EDGE_CFG[d.kind] || {dash:null,width:1,opacity:0.3,marker:""}; } |
| HIGH | code_review_graph/visualization.py | 901 | if (communityColoringOn && d.community_id != null) return communityColorScale(d.community_id); |
| HIGH | code_review_graph/visualization.py | 901 | if (communityColoringOn && d.community_id != null) return communityColorScale(d.community_id); |
| HIGH | code_review_graph/visualization.py | 972 | var best = null, bestDist = Infinity; |
| HIGH | code_review_graph/visualization.py | 978 | if (ev.key === "ArrowRight" && dx > 0 && Math.abs(dy) < Math.abs(dx)) ok = true; |
| HIGH | code_review_graph/visualization.py | 979 | if (ev.key === "ArrowLeft" && dx < 0 && Math.abs(dy) < Math.abs(dx)) ok = true; |
| HIGH | code_review_graph/visualization.py | 980 | if (ev.key === "ArrowDown" && dy > 0 && Math.abs(dx) < Math.abs(dy)) ok = true; |
| HIGH | code_review_graph/visualization.py | 981 | if (ev.key === "ArrowUp" && dy < 0 && Math.abs(dx) < Math.abs(dy)) ok = true; |
| HIGH | code_review_graph/visualization.py | 982 | if (ok && dist < bestDist) { best = n; bestDist = dist; } |
| HIGH | code_review_graph/visualization.py | 1170 | return d._hidden ? "none" : null; |
| HIGH | code_review_graph/visualization.py | 1179 | if (cid == null) { |
| HIGH | code_review_graph/visualization.py | 1182 | if (cid != null && hiddenCommunities.has(cid)) { |
| HIGH | code_review_graph/visualization.py | 1185 | return null; |
| HIGH | code_review_graph/visualization.py | 1190 | if (cid == null) { |
| HIGH | code_review_graph/visualization.py | 1193 | if (cid != null && hiddenCommunities.has(cid)) { |
| HIGH | code_review_graph/visualization.py | 1196 | return null; |
| HIGH | code_review_graph/visualization.py | 1200 | var activeFlowQns = null; |
| HIGH | code_review_graph/visualization.py | 1203 | if (idx === "") { activeFlowQns = null; clearFlowHighlight(); return; } |
| HIGH | code_review_graph/visualization.py | 1212 | if (!activeFlowQns || activeFlowQns.size === 0) { clearFlowHighlight(); return; } |
| HIGH | code_review_graph/visualization.py | 1249 | if (t === d.qualified_name && e.kind === "CALLS") { var sN = nodeById.get(s); if (sN) callers.push(sN); } |
| HIGH | code_review_graph/visualization.py | 1249 | if (t === d.qualified_name && e.kind === "CALLS") { var sN = nodeById.get(s); if (sN) callers.push(sN); } |
| HIGH | code_review_graph/visualization.py | 1250 | if (s === d.qualified_name && e.kind === "CALLS") { var tN = nodeById.get(t); if (tN) callees.push(tN); } |
| HIGH | code_review_graph/visualization.py | 1250 | if (s === d.qualified_name && e.kind === "CALLS") { var tN = nodeById.get(t); if (tN) callees.push(tN); } |
| HIGH | code_review_graph/visualization.py | 1253 | var bg = communityColoringOn && d.community_id != null ? communityColorScale(d.community_id) : (KIND_COLOR[d.kind] || |
| HIGH | code_review_graph/visualization.py | 1259 | if (d.community_id != null) { |
| HIGH | code_review_graph/visualization.py | 1628 | CROSS_COMMUNITY: { dash: null, width: 2, opacity: 0.6, marker: "" }, |
| HIGH | code_review_graph/visualization.py | 1630 | CONTAINS: { dash: null, width: 1, opacity: 0.08, marker: "" }, |
| HIGH | code_review_graph/visualization.py | 1631 | CALLS: { dash: null, width: 1.5, opacity: 0.7, marker: "url(#arrow-calls)" }, |
| HIGH | code_review_graph/visualization.py | 1635 | function eStyle(d) { return EDGE_CFG[d.kind] || { dash: null, width: 1, opacity: 0.3, marker: "" }; } |
| HIGH | code_review_graph/visualization.py | 1740 | if (d.line_start != null) addRow("Lines", d.line_start + " \u2013 " + (d.line_end || d.line_start)); |
| HIGH | code_review_graph/visualization.py | 1740 | if (d.line_start != null) addRow("Lines", d.line_start + " \u2013 " + (d.line_end || d.line_start)); |
| HIGH | code_review_graph/visualization.py | 1743 | if (d.weight != null) addRow("Weight", d.weight); |
| HIGH | code_review_graph/visualization.py | 1780 | var linkSel = null, labelSel = null; |
| HIGH | code_review_graph/visualization.py | 1782 | var simulation = null; |
| HIGH | code_review_graph/visualization.py | 1788 | if (d.kind === "Community") return Math.max(12, Math.min(40, 8 + Math.sqrt(d.member_count || 1) * 3)); |
| HIGH | code_review_graph/visualization.py | 1790 | if (d.symbol_count != null) return Math.max(8, Math.min(30, 6 + Math.sqrt(d.symbol_count || 1) * 2)); |
| HIGH | code_review_graph/visualization.py | 1790 | if (d.symbol_count != null) return Math.max(8, Math.min(30, 6 + Math.sqrt(d.symbol_count || 1) * 2)); |
| HIGH | code_review_graph/visualization.py | 1796 | if (d.kind === "Community" && d.community_id != null) return communityColorScale(d.community_id); |
| HIGH | code_review_graph/visualization.py | 1838 | if (d.kind === "CROSS_COMMUNITY" || d.kind === "DEPENDS_ON") return Math.max(100, 200 - (d.weight || 1) * 5); |
| HIGH | code_review_graph/visualization.py | 1843 | if (d.kind === "CROSS_COMMUNITY" || d.kind === "DEPENDS_ON") return 0.1 + Math.min(0.5, (d.weight || 1) * 0.02); |
| 42 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | code_review_graph/communities.py | 7 | |
| LOW | code_review_graph/exports.py | 3 | |
| LOW | code_review_graph/changes.py | 7 | |
| LOW | code_review_graph/spring_resolver.py | 18 | |
| LOW | code_review_graph/tsconfig_resolver.py | 8 | |
| LOW | code_review_graph/analysis.py | 4 | |
| LOW | code_review_graph/jedi_resolver.py | 12 | |
| LOW | code_review_graph/refactor.py | 9 | |
| LOW | code_review_graph/skills.py | 9 | |
| LOW | code_review_graph/memory.py | 3 | |
| LOW | code_review_graph/enrich.py | 8 | |
| LOW | code_review_graph/registry.py | 7 | |
| LOW | code_review_graph/context_savings.py | 7 | |
| LOW | code_review_graph/graph.py | 8 | |
| LOW | code_review_graph/graph_diff.py | 3 | |
| LOW | code_review_graph/constants.py | 3 | |
| LOW | code_review_graph/__init__.py | 3 | |
| LOW | code_review_graph/__init__.py | 3 | |
| LOW | code_review_graph/__init__.py | 3 | |
| LOW | code_review_graph/__init__.py | 3 | |
| LOW | code_review_graph/__init__.py | 3 | |
| LOW | code_review_graph/rescript_resolver.py | 23 | |
| LOW | code_review_graph/visualization.py | 14 | |
| LOW | code_review_graph/prompts.py | 13 | |
| LOW | code_review_graph/parser.py | 7 | |
| LOW | code_review_graph/embeddings.py | 11 | |
| LOW | code_review_graph/embeddings.py | 719 | |
| LOW | code_review_graph/cli.py | 27 | |
| LOW | code_review_graph/migrations.py | 7 | |
| LOW | code_review_graph/search.py | 8 | |
| LOW | code_review_graph/flows.py | 9 | |
| LOW | code_review_graph/postprocessing.py | 15 | |
| LOW | code_review_graph/hints.py | 9 | |
| LOW | code_review_graph/main.py | 9 | |
| LOW | code_review_graph/wiki.py | 7 | |
| LOW | code_review_graph/daemon_cli.py | 13 | |
| LOW | code_review_graph/daemon.py | 11 | |
| LOW | code_review_graph/token_benchmark.py | 3 | |
| LOW | code_review_graph/incremental.py | 7 | |
| LOW | code_review_graph/incremental.py | 1221 | |
| LOW | code_review_graph/temporal_resolver.py | 19 | |
| LOW | code_review_graph/tools/analysis_tools.py | 3 | |
| LOW | code_review_graph/tools/build.py | 3 | |
| LOW | code_review_graph/tools/query.py | 3 | |
| LOW | code_review_graph/tools/refactor_tools.py | 3 | |
| LOW | code_review_graph/tools/community_tools.py | 3 | |
| LOW | code_review_graph/tools/_common.py | 3 | |
| LOW | code_review_graph/tools/__init__.py | 34 | |
| LOW | code_review_graph/tools/__init__.py | 37 | |
| LOW | code_review_graph/tools/__init__.py | 38 | |
| LOW | code_review_graph/tools/__init__.py | 39 | |
| LOW | code_review_graph/tools/__init__.py | 40 | |
| LOW | code_review_graph/tools/__init__.py | 43 | |
| LOW | code_review_graph/tools/__init__.py | 48 | |
| LOW | code_review_graph/tools/__init__.py | 48 | |
| LOW | code_review_graph/tools/__init__.py | 48 | |
| LOW | code_review_graph/tools/__init__.py | 55 | |
| LOW | code_review_graph/tools/__init__.py | 55 | |
| LOW | code_review_graph/tools/__init__.py | 55 | |
| LOW | code_review_graph/tools/__init__.py | 55 | |
| 62 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | code_review_graph/communities.py | 128 | |
| LOW | code_review_graph/exports.py | 140 | |
| LOW | code_review_graph/exports.py | 157 | |
| LOW | code_review_graph/changes.py | 174 | |
| LOW | code_review_graph/tsconfig_resolver.py | 65 | |
| LOW | code_review_graph/tsconfig_resolver.py | 146 | |
| LOW | code_review_graph/refactor.py | 240 | |
| LOW | code_review_graph/refactor.py | 587 | |
| LOW | code_review_graph/refactor.py | 677 | |
| LOW | code_review_graph/refactor.py | 306 | |
| LOW | code_review_graph/skills.py | 678 | |
| LOW | code_review_graph/skills.py | 729 | |
| LOW | code_review_graph/memory.py | 77 | |
| LOW | code_review_graph/enrich.py | 30 | |
| LOW | code_review_graph/registry.py | 57 | |
| LOW | code_review_graph/graph.py | 369 | |
| LOW | code_review_graph/graph.py | 746 | |
| LOW | code_review_graph/visualization.py | 28 | |
| LOW | code_review_graph/parser.py | 596 | |
| LOW | code_review_graph/parser.py | 681 | |
| LOW | code_review_graph/parser.py | 997 | |
| LOW | code_review_graph/parser.py | 1108 | |
| LOW | code_review_graph/parser.py | 1238 | |
| LOW | code_review_graph/parser.py | 1322 | |
| LOW | code_review_graph/parser.py | 1453 | |
| LOW | code_review_graph/parser.py | 1557 | |
| LOW | code_review_graph/parser.py | 2049 | |
| LOW | code_review_graph/parser.py | 2155 | |
| LOW | code_review_graph/parser.py | 2396 | |
| LOW | code_review_graph/parser.py | 2425 | |
| LOW | code_review_graph/parser.py | 2611 | |
| LOW | code_review_graph/parser.py | 2661 | |
| LOW | code_review_graph/parser.py | 2739 | |
| LOW | code_review_graph/parser.py | 2879 | |
| LOW | code_review_graph/parser.py | 2915 | |
| LOW | code_review_graph/parser.py | 3038 | |
| LOW | code_review_graph/parser.py | 3058 | |
| LOW | code_review_graph/parser.py | 3081 | |
| LOW | code_review_graph/parser.py | 3438 | |
| LOW | code_review_graph/parser.py | 3625 | |
| LOW | code_review_graph/parser.py | 3661 | |
| LOW | code_review_graph/parser.py | 3813 | |
| LOW | code_review_graph/parser.py | 3827 | |
| LOW | code_review_graph/parser.py | 3866 | |
| LOW | code_review_graph/parser.py | 3938 | |
| LOW | code_review_graph/parser.py | 3976 | |
| LOW | code_review_graph/parser.py | 4034 | |
| LOW | code_review_graph/parser.py | 4064 | |
| LOW | code_review_graph/parser.py | 4146 | |
| LOW | code_review_graph/parser.py | 4193 | |
| LOW | code_review_graph/parser.py | 4302 | |
| LOW | code_review_graph/parser.py | 5013 | |
| LOW | code_review_graph/parser.py | 5181 | |
| LOW | code_review_graph/parser.py | 5254 | |
| LOW | code_review_graph/parser.py | 5269 | |
| LOW | code_review_graph/parser.py | 5309 | |
| LOW | code_review_graph/parser.py | 5353 | |
| LOW | code_review_graph/parser.py | 5553 | |
| LOW | code_review_graph/parser.py | 5664 | |
| LOW | code_review_graph/parser.py | 5943 | |
| 44 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | code_review_graph/communities.py | 568 | except Exception: |
| LOW | code_review_graph/jedi_resolver.py | 128 | except Exception as e: |
| LOW | code_review_graph/jedi_resolver.py | 147 | except Exception: # nosec B112 - Jedi may fail on malformed code |
| LOW | code_review_graph/graph.py | 585 | except Exception: # nosec B110 - FTS5 table may not exist on older schemas |
| LOW | code_review_graph/embeddings.py | 109 | except Exception as exc: # pragma: no cover — best-effort startup hook |
| LOW | code_review_graph/embeddings.py | 200 | except Exception as e: |
| LOW | code_review_graph/embeddings.py | 286 | except Exception as e: |
| LOW | code_review_graph/embeddings.py | 449 | except Exception: |
| LOW | code_review_graph/embeddings.py | 460 | except Exception: # nosec B110 |
| LOW | code_review_graph/embeddings.py | 524 | except Exception as e: |
| LOW | code_review_graph/embeddings.py | 597 | except Exception: |
| LOW | code_review_graph/cli.py | 313 | except Exception as exc: |
| LOW | code_review_graph/cli.py | 320 | except Exception as exc: |
| LOW | code_review_graph/cli.py | 328 | except Exception as exc: |
| LOW | code_review_graph/cli.py | 346 | except Exception as exc: |
| MEDIUM | code_review_graph/cli.py | 1114 | print(f"Error: {exc}", file=sys.stderr) |
| LOW | code_review_graph/search.py | 245 | except Exception as e: |
| LOW | code_review_graph/search.py | 349 | except Exception as e: |
| MEDIUM | code_review_graph/daemon_cli.py | 36 | print("Error: Daemon is already running.") |
| MEDIUM | code_review_graph/daemon_cli.py | 59 | print("Error: Could not read daemon PID.") |
| MEDIUM | code_review_graph/daemon_cli.py | 70 | print(f"Error: Permission denied sending signal to PID {pid}.") |
| MEDIUM | code_review_graph/daemon_cli.py | 184 | print(f"Error reading log file: {exc}") |
| MEDIUM | code_review_graph/daemon_cli.py | 200 | print(f"Error: {exc}") |
| LOW | code_review_graph/daemon.py | 471 | except Exception: |
| LOW | code_review_graph/daemon.py | 692 | except Exception: |
| LOW | code_review_graph/daemon.py | 901 | except Exception: |
| LOW | code_review_graph/incremental.py | 68 | except Exception as exc: # noqa: BLE001 - best-effort post-pass |
| LOW | code_review_graph/incremental.py | 80 | except Exception as exc: # noqa: BLE001 - best-effort post-pass |
| LOW | code_review_graph/incremental.py | 92 | except Exception as exc: # noqa: BLE001 - best-effort post-pass |
| LOW | code_review_graph/incremental.py | 284 | except Exception as exc: |
| LOW | code_review_graph/incremental.py | 816 | except Exception as e: |
| LOW | code_review_graph/incremental.py | 867 | except Exception as e: |
| LOW | code_review_graph/incremental.py | 1004 | except Exception as e: |
| LOW | code_review_graph/incremental.py | 1137 | except Exception as e: |
| LOW | code_review_graph/incremental.py | 1164 | except Exception as e: |
| LOW | code_review_graph/incremental.py | 1190 | except Exception as e: |
| LOW | code_review_graph/tools/refactor_tools.py | 122 | except Exception as exc: |
| LOW | code_review_graph/tools/community_tools.py | 62 | except Exception as exc: |
| LOW | code_review_graph/tools/community_tools.py | 138 | except Exception as exc: |
| LOW | code_review_graph/tools/community_tools.py | 243 | except Exception as exc: |
| LOW | code_review_graph/tools/docs.py | 219 | except Exception as exc: |
| LOW | code_review_graph/tools/flows_tools.py | 79 | except Exception as exc: |
| LOW | code_review_graph/tools/flows_tools.py | 173 | except Exception as exc: |
| LOW | code_review_graph/tools/review.py | 345 | except Exception as exc: |
| LOW | code_review_graph/tools/review.py | 474 | except Exception as exc: |
| LOW | code_review_graph/tools/registry_tools.py | 40 | except Exception as exc: |
| LOW | code_review_graph/tools/registry_tools.py | 105 | except Exception as exc: |
| LOW | code_review_graph/tools/registry_tools.py | 124 | except Exception as exc: |
| LOW | code_review_graph/eval/runner.py | 203 | except Exception as e: |
| LOW | code_review_graph/eval/token_benchmark.py | 179 | except Exception as e: |
| LOW | code_review_graph/eval/benchmarks/build_performance.py | 23 | except Exception as exc: |
| LOW | code_review_graph/eval/benchmarks/build_performance.py | 34 | except Exception as exc: |
| LOW | …de_review_graph/eval/benchmarks/multi_hop_retrieval.py | 65 | except Exception as exc: # noqa: BLE001 — benchmark must not abort the runner |
| LOW | …de_review_graph/eval/benchmarks/multi_hop_retrieval.py | 101 | except Exception as exc: # noqa: BLE001 |
| LOW | code_review_graph/eval/benchmarks/impact_accuracy.py | 57 | except Exception as exc: |
| LOW | code_review_graph/eval/benchmarks/token_efficiency.py | 86 | except Exception as exc: |
| LOW | tests/test_search.py | 167 | except Exception: |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/test_registry.py | 111 | # Create a new registry from the same file |
| MEDIUM | tests/test_flows.py | 265 | # Create a chain of 20 functions. |
| MEDIUM | tests/test_multilang.py | 219 | # Create a mini Java project with two packages |
| MEDIUM | tests/test_daemon.py | 518 | # Create a new repo directory for alpha with a different path (no graph.db) |
| MEDIUM | tests/test_incremental.py | 564 | # Create a simple Python file |
| MEDIUM | tests/test_integration_git.py | 164 | # Create the parent repo and add lib as a submodule |
| MEDIUM | tests/test_integration_git.py | 248 | # Create a legitimate page |
| MEDIUM | tests/test_tools.py | 1177 | # Create the two communities and stamp community_id on nodes. |
| MEDIUM | tests/test_tools.py | 1388 | # Create a small graph |
| MEDIUM | tests/test_graph.py | 188 | # Create a chain: file_a -> func_a -> (calls) -> func_b in file_b |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | code_review_graph/eval/token_benchmark.py | 28 | # Step 1: get_minimal_context |
| LOW | code_review_graph/eval/token_benchmark.py | 34 | # Step 2: detect_changes (minimal) |
| LOW | diagrams/generate_diagrams.py | 342 | # Step 1: Trigger |
| LOW | diagrams/generate_diagrams.py | 350 | # Step 2: Detect |
| LOW | diagrams/generate_diagrams.py | 524 | # Step 1: User asks |
| LOW | diagrams/generate_diagrams.py | 532 | # Step 2: Claude Code |
| LOW | diagrams/generate_diagrams.py | 363 | # Step 3: Cascade |
| LOW | diagrams/generate_diagrams.py | 376 | # Step 4: Re-parse |
| LOW | diagrams/generate_diagrams.py | 545 | # Step 3: MCP call |
| LOW | diagrams/generate_diagrams.py | 558 | # Step 4: Graph query |
| LOW | diagrams/generate_diagrams.py | 570 | # Step 5: Claude responds |
| LOW | tests/test_refactor.py | 623 | # Step 1: dry_run — no writes, returns diff |
| LOW | tests/test_refactor.py | 638 | # Step 2: refactor_id should still be valid — dry_run doesn't consume it |
| LOW | tests/test_refactor.py | 642 | # Step 3: real apply — uses same refactor_id |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | code_review_graph/registry.py | 60 | Register a repository path. Validates that the path contains a ``.git`` or ``.code-review-graph`` direc |
| HIGH | code_review_graph/daemon.py | 85 | Load daemon configuration from a TOML file. Args: path: Explicit config path. Falls back to :data:`CONFIG_ |
| HIGH | code_review_graph/daemon.py | 212 | Add a repository to the daemon config and persist the change. Args: repo_path: Path to the repository (wi |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | code_review_graph/parser.py | 261 | # via extra["solidity_kind"]. |
| LOW | code_review_graph/parser.py | 321 | "dart": ["import_or_export"], |
| LOW | code_review_graph/parser.py | 2221 | # Every top-level construct in Elixir is a ``call`` node: |
| LOW | code_review_graph/parser.py | 5721 | for qsub in reversed(sub.children): |
| LOW | .serena/project.yml | 1 | # the name by which the project can be referenced within Serena |
| LOW | .serena/project.yml | 21 | # - For JavaScript, use typescript |
| LOW | .serena/project.yml | 41 | # The language backend to use for this project. |
| LOW | .serena/project.yml | 61 | |
| LOW | .serena/project.yml | 81 | # * `execute_shell_command`: Executes a shell command. |
| LOW | .serena/project.yml | 101 | # * `rename_symbol`: Renames a symbol throughout the codebase using language server refactoring capabilities. |
| LOW | .serena/project.yml | 121 | # If the setting is undefined, the base_modes from the global configuration (serena_config.yml) apply. |
| LOW | .serena/project.yml | 141 | # If null or missing, use the setting from the global configuration. |
| LOW | .beads/config.yaml | 1 | # Beads Configuration File |
| LOW | .beads/config.yaml | 21 | # title-length: 255 |
| LOW | .beads/config.yaml | 41 | # backup: |
| LOW | docs/COMMANDS.md | 321 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | code_review_graph/communities.py | 659 | # Check if any communities are affected (batch to stay under SQLite limit) |
| LOW | code_review_graph/refactor.py | 533 | # Check if this is a method override where the base class method |
| LOW | code_review_graph/skills.py | 363 | # Check if already present |
| LOW | code_review_graph/parser.py | 1487 | # Check if all non-empty lines are MAGIC lines |
| LOW | code_review_graph/wiki.py | 105 | # Check if this flow passes through any community member |
| LOW | .serena/project.yml | 123 | # Set this to [] to disable base modes for this project. |
| LOW | .serena/project.yml | 124 | # Set this to a list of mode names to always include the respective modes for this project. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_integration_git.py | 158 | _git(lib_repo, "config", "user.email", "test@test.com") |
| LOW | tests/test_integration_git.py | 168 | _git(parent, "config", "user.email", "test@test.com") |
| LOW | tests/test_integration_git.py | 53 | _git(repo, "config", "user.email", "test@test.com") |
| LOW | tests/test_eval.py | 261 | ["git", "config", "user.email", "test@test.com"], |
| LOW | tests/test_eval.py | 404 | ["git", "config", "user.email", "test@test.com"], |
| LOW | tests/test_eval.py | 478 | ["git", "config", "user.email", "test@test.com"], |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/test_parser.py | 1307 | # the highest-leverage language for the fix after Python. |
| MEDIUM | tests/test_embeddings.py | 437 | """Ensure localhost detection is robust against subdomain tricks.""" |
| MEDIUM | code-review-graph-vscode/package-lock.json | 3466 | "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | .serena/project.yml | 58 | # Same syntax as gitignore, so you can use * and **. |
| LOW | .serena/project.yml | 71 | # To make sure you have the latest list of tools, and to view their descriptions, |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_parser.py | 294 | "def helper():\n" |
| LOW | tests/test_parser.py | 1112 | b"def helper(): pass\n", |
| LOW | tests/test_integration_git.py | 160 | (lib_repo / "util.py").write_text("def helper():\n pass\n") |
| LOW | tests/test_tools.py | 692 | + "def handle_request():\n" |