github Python re-analysis due

n24q02m/better-code-review-graph

github

Knowledge graph for token-efficient code reviews -- semantic search and call-graph resolution across your codebase.

maintainer
n24q02m
license
Apache-2.0
first seen
2026-06-01
last seen
2026-09-05
releases · 30d
6
short id

Drift inferred · capture-to-capture

tool count over time

06-01 18:10 now
22t
25t
capabilities 25 tools
transport stdio · http verified reported listed in the official MCP registry counts 25 tools · 0 res · 0 prompts permission surface via README inference

tools

  • build

    Full or incremental graph build. Set full_rebuild=true to re-parse all files; pass roots to federate extra repo directories into one graph.

  • cache_clear

    Remove all computed embeddings.

  • diff

    Nodes added/removed/modified between two commit SHAs (from_sha, to_sha).

  • embed

    Compute vector embeddings for semantic search. Dual-mode: local ONNX or cloud chain.

  • export

    Export the graph as graphml / json-ld / dot / cypher. Inline or to output_path.

  • impact

    Blast radius of changed files. Auto-detects from git diff. Paginated with max_results.

  • large_functions

    Find functions/classes exceeding a line-count threshold.

  • query

    Predefined patterns: callers_of, callees_of, imports_of, importers_of, children_of, tests_for, inheritors_of, file_summary.

  • renamed_in_diff

    Symbols whose callsite line shifted versus a base ref.

  • report

    Re-emit cached findings as JSON (format='json') or SARIF v2.1.0 (format='sarif').

  • rule_list

    List available rules for an engine.

  • scan

    Run a security scan (engine='heuristic' default = 5 regex rules, or 'semgrep'). Findings persist on nodes.security_tags.

  • search

    Search code entities by name/keyword or semantic similarity.

  • set

    Update a runtime setting (key=log_level).

  • setup_complete

    Re-resolve credentials from environment variables.

  • setup_reset

    Clear credentials and reset state.

  • setup_skip

    Set local mode (skip relay permanently, use ONNX only).

  • setup_start

    Start relay setup to configure API keys via browser (HTTP mode).

  • setup_status

    Show current credential state, providers configured, and setup URL.

  • spot_check

    Random callsite snippets from the last callers_of/callees_of/inheritors_of/importers_of result.

  • stats

    Graph size, languages, node/edge breakdown, embedding count.

  • status

    Server info: version, graph path, node/edge counts, embedding backend, embeddings count.

  • summarize

    LLM-generated one-paragraph docstrings for Function nodes (via the SUMMARY_MODELS chain; no-op when no provider key is set). Cost-capped via max_nodes.

  • suppress

    Suppress a finding by rule_id (or remove=true to un-suppress).

  • update

    Alias for build with full_rebuild=false (incremental).

skills & danger signals github-tarball
code evidence vv3.22.0 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 190

filesystem 82

  • fs n24q02m-better-code-review-graph-ccd60c9/hooks/_graph_state.py :13 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/hooks/branch-sync-check.py :28 import shutil
  • fs n24q02m-better-code-review-graph-ccd60c9/hooks/stale-graph-check.py :25 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/migrations/versions/005_temporal_columns.py :67 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/scripts/preserve-diacritics.py :22 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/scripts/test_preserve_diacritics.py :15 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/credential_state.py :27 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/embeddings.py :33 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/exporter.py :22 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/federation.py :22 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/graph.py :10 import shutil
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/incremental.py :12 import shutil
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/parser.py :13 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/__init__.py :18 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/_types.py :14 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/fallback.py :32 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/go.py :29 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/java.py :31 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/python.py :28 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/rust.py :31 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/typescript.py :27 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/security/heuristic.py :18 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/security/semgrep_engine.py :17 import shutil
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/server.py :16 from pathlib import Path
  • fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/tools.py :19 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/conftest.py :6 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/conftest_e2e.py :84 with open(self._path, encoding="utf-8", errors="replace") as f:
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/fixtures/sample_python.py :4 from pathlib import Path # noqa: F401
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_alembic_baseline.py :27 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_as_of_diff.py :27 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_cli_contracts.py :15 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_commits_migration.py :29 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_coverage_gaps.py :12 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_credential_state.py :369 # Parent dir is created eagerly so the SQLite open() succeeds.
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_crg_protocol_harness.py :17 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_export_graph_dispatch_path_traversal.py :1 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_federation.py :20 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_federation_migration.py :24 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_federation_smoke.py :48 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_full_live.py :16 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_get_review_context_no_diff.py :3 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_graph.py :4 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_graph_get_edges_by_targets_coverage.py :2 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_graph_stats_error_coverage.py :1 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_heuristic.py :6 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_home_isolation.py :13 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_incremental.py :125 with patch("pathlib.Path.read_bytes", side_effect=PermissionError):
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_list_graph_stats_coverage.py :2 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_live_mcp.py :14 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_lookup_node_directly.py :1 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_multilang.py :3 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_no_stale_package_name.py :3 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_oci_publication_sunset.py :8 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_oserror_coverage.py :1 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_parser.py :3 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_parser_extra.py :5 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_parser_grammar_failure.py :18 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_path_resolution_fallback.py :24 with patch("pathlib.Path.resolve", side_effect=OSError("Mocked OSError")):
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_per_plugin_storage_migration.py :5 monkeypatch.setattr("pathlib.Path.home", lambda: tmp_path)
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_phase_3_smoke.py :29 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_plugin_assets.py :17 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_pre_2_0_backup.py :9 revision (None / 001 / 002 / 003 / 004), a ``shutil.copy2`` of the
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_repo_filter.py :16 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_repo_id_persistence.py :13 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_dispatcher.py :15 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_fallback.py :15 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_go.py :19 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_java.py :21 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_python.py :16 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_rust.py :18 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_typescript.py :23 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_response_payload_honesty.py :26 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_review_delta_line_shifts.py :32 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_search_edges_by_target_names.py :3 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_security_tags_migration.py :32 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_security_tool.py :15 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_semgrep_engine.py :13 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_temporal_migration.py :32 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_tested_by_edges.py :10 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_tools.py :4 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_typescript_coverage_gaps.py :3 from pathlib import Path
  • fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_v17_coverage_gaps.py :21 from pathlib import Path

shell / exec 28

  • shell n24q02m-better-code-review-graph-ccd60c9/hooks/branch-sync-check.py :29 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/scripts/preserve-diacritics.py :19 import subprocess
  • shell n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/federation.py :19 import subprocess
  • shell n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/incremental.py :13 import subprocess
  • shell n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/security/semgrep_engine.py :18 import subprocess
  • shell n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/tools.py :1890 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/conftest_e2e.py :17 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_commits_migration.py :27 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_coverage_gaps.py :11 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_crg_protocol_harness.py :15 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_e2e.py :5 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_federation_smoke.py :46 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_full_live.py :15 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_heuristic.py :278 src = "subprocess.run(cmd, shell=True)"
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_incremental.py :3 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_incremental_extra.py :5 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_live_mcp.py :13 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_parser_grammar_failure.py :17 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_phase_3_smoke.py :26 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_plugin_assets.py :14 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_renamed_in_diff.py :11 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_renamed_in_diff_exception.py :1 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_reviewer_summary.py :10 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_semgrep_engine.py :11 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_server.py :7 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_stdio_direct.py :16 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_temporal_migration.py :30 import subprocess
  • shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_v17_coverage_gaps.py :20 import subprocess

network 3

  • net n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/relay_setup.py :124 import httpx
  • net (weak) n24q02m-better-code-review-graph-ccd60c9/tests/e2e_mcp_protocol_test.py :24 import httpx
  • net (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_relay_setup.py :90 patch("httpx.AsyncClient") as mock_http_cls,

secrets 6

  • secrets n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/embeddings.py :134 if os.getenv("JINA_AI_API_KEY"):
  • secrets n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/server.py :1041 if not os.environ.get("MCP_DCR_SERVER_SECRET"):
  • secrets (weak) n24q02m-better-code-review-graph-ccd60c9/tests/fixtures/sample_python.py :32 secret = os.environ.get("SECRET", "default")
  • secrets (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_cohere_dimensions.py :177 not (os.getenv("COHERE_API_KEY") or os.getenv("CO_API_KEY")),
  • secrets (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_multi_user_dispatch.py :152 assert os.environ.get("GEMINI_API_KEY") is None
  • secrets (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_relay_setup.py :50 assert os.environ.get("GEMINI_API_KEY") == "from-store"

database 20

  • db n24q02m-better-code-review-graph-ccd60c9/hooks/_graph_state.py :12 import sqlite3
  • db n24q02m-better-code-review-graph-ccd60c9/migrations/env.py :17 from sqlalchemy import engine_from_config, pool
  • db n24q02m-better-code-review-graph-ccd60c9/migrations/versions/001_baseline.py :33 import sqlalchemy as sa
  • db n24q02m-better-code-review-graph-ccd60c9/migrations/versions/003_federation.py :44 import sqlalchemy as sa
  • db n24q02m-better-code-review-graph-ccd60c9/migrations/versions/004_security_tags.py :46 import sqlalchemy as sa
  • db n24q02m-better-code-review-graph-ccd60c9/migrations/versions/005_temporal_columns.py :69 import sqlalchemy as sa
  • db n24q02m-better-code-review-graph-ccd60c9/migrations/versions/006_commits_table.py :42 import sqlalchemy as sa
  • db n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/embeddings.py :30 import sqlite3
  • db n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/graph.py :11 import sqlite3
  • db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_alembic_baseline.py :25 import sqlite3
  • db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_commits_migration.py :26 import sqlite3
  • db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_coverage_gaps.py :10 import sqlite3
  • db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_embedding_migration.py :3 import sqlite3
  • db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_federation_migration.py :22 import sqlite3
  • db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_phase_3_smoke.py :25 import sqlite3
  • db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_plugin_assets.py :13 import sqlite3
  • db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_pre_2_0_backup.py :31 import sqlite3
  • db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_security_tags_migration.py :30 import sqlite3
  • db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_summary_schema.py :11 import sqlite3
  • db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_temporal_migration.py :29 import sqlite3

declared dependencies 10

  • mcp@>=1.28.1,<2
  • fastmcp@>=3.4.4,<4
  • tree-sitter@>=0.26.0,<1
  • tree-sitter-language-pack@>=1.15.8,<2
  • networkx@>=3.6.1,<4
  • watchdog@>=6.0.0,<7
  • fastretrieval@>=1.1.0,<2
  • httpx@*
  • pydantic-settings@*
  • semgrep@>=1.0,<1.162