better-code-review-graph 3.25.2__tar.gz → 3.25.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.claude-plugin/plugin.json +1 -1
  2. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.github/workflows/cd.yml +2 -3
  3. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.jules/bolt.md +8 -0
  4. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/CHANGELOG.md +30 -0
  5. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/PKG-INFO +5 -5
  6. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/pyproject.toml +5 -5
  7. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/server.json +2 -2
  8. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/exporter.py +31 -6
  9. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_oci_publication_sunset.py +4 -4
  10. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/uv.lock +23 -22
  11. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.agents/skills/build-graph/SKILL.md +0 -0
  12. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.agents/skills/review-delta/SKILL.md +0 -0
  13. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.agents/skills/review-pr/SKILL.md +0 -0
  14. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.coderabbit.yaml +0 -0
  15. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.dockerignore +0 -0
  16. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.github/CODEOWNERS +0 -0
  17. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  18. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  19. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  20. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.github/review-learnings.md +0 -0
  21. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.github/rulesets/main.json +0 -0
  22. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.github/workflows/bot-governance.yml +0 -0
  23. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.github/workflows/ci.yml +0 -0
  24. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.github/workflows/opencode.yml +0 -0
  25. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.gitignore +0 -0
  26. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.infisical.json +0 -0
  27. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.jules/sentinel.md +0 -0
  28. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/.pre-commit-config.yaml +0 -0
  29. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/AGENTS.md +0 -0
  30. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/BREAKING_CHANGES.md +0 -0
  31. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/CLAUDE.md +0 -0
  32. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/CODE_OF_CONDUCT.md +0 -0
  33. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/CONTRIBUTING.md +0 -0
  34. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/Dockerfile +0 -0
  35. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/LICENSE +0 -0
  36. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/LICENSE-MIT +0 -0
  37. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/NOTICE +0 -0
  38. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/README.md +0 -0
  39. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/SECURITY.md +0 -0
  40. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/alembic.ini +0 -0
  41. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/docs/HANDOVER.md +0 -0
  42. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/hooks/_graph_state.py +0 -0
  43. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/hooks/branch-sync-check.py +0 -0
  44. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/hooks/hooks.json +0 -0
  45. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/hooks/stale-graph-check.py +0 -0
  46. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/migrations/README +0 -0
  47. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/migrations/env.py +0 -0
  48. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/migrations/script.py.mako +0 -0
  49. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/migrations/versions/001_baseline.py +0 -0
  50. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/migrations/versions/002_summary_columns.py +0 -0
  51. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/migrations/versions/003_federation.py +0 -0
  52. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/migrations/versions/004_security_tags.py +0 -0
  53. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/migrations/versions/005_temporal_columns.py +0 -0
  54. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/migrations/versions/006_commits_table.py +0 -0
  55. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/renovate.json +0 -0
  56. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/rules/heuristic/cwe-22-path-traversal.yaml +0 -0
  57. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/rules/heuristic/cwe-78-shell-command-sink.yaml +0 -0
  58. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/rules/heuristic/cwe-89-sql-string-format.yaml +0 -0
  59. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/rules/heuristic/cwe-95-eval-on-input.yaml +0 -0
  60. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/rules/heuristic/hardcoded-secret.yaml +0 -0
  61. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/rules/semgrep/curated.yaml +0 -0
  62. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/scripts/benchmark_row_deserialization.py +0 -0
  63. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/scripts/enforce-commit.sh +0 -0
  64. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/scripts/preserve-diacritics.py +0 -0
  65. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/scripts/test_preserve_diacritics.py +0 -0
  66. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/semantic-release.toml +0 -0
  67. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/skills/impact-audit/SKILL.md +0 -0
  68. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/skills/onboard-repo/SKILL.md +0 -0
  69. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/skills/refactor-check/SKILL.md +0 -0
  70. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/skills/review-delta/SKILL.md +0 -0
  71. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/skills/review-pr/SKILL.md +0 -0
  72. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/skills/security-sweep/SKILL.md +0 -0
  73. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/smithery.yaml +0 -0
  74. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/__init__.py +0 -0
  75. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/__main__.py +0 -0
  76. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/cli.py +0 -0
  77. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/config.py +0 -0
  78. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/credential_state.py +0 -0
  79. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/docs/__init__.py +0 -0
  80. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/docs/config.md +0 -0
  81. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/docs/graph.md +0 -0
  82. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/docs/query.md +0 -0
  83. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/docs/recipes.md +0 -0
  84. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/docs/review.md +0 -0
  85. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/docs/security.md +0 -0
  86. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/embeddings.py +0 -0
  87. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/federation.py +0 -0
  88. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/graph.py +0 -0
  89. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/importer.py +0 -0
  90. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/incremental.py +0 -0
  91. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/parser.py +0 -0
  92. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/py.typed +0 -0
  93. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/relay_schema.py +0 -0
  94. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/relay_setup.py +0 -0
  95. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/reranker.py +0 -0
  96. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/resolver/__init__.py +0 -0
  97. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/resolver/_types.py +0 -0
  98. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/resolver/fallback.py +0 -0
  99. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/resolver/go.py +0 -0
  100. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/resolver/java.py +0 -0
  101. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/resolver/python.py +0 -0
  102. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/resolver/rust.py +0 -0
  103. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/resolver/typescript.py +0 -0
  104. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/security/__init__.py +0 -0
  105. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/security/heuristic.py +0 -0
  106. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/security/semgrep_engine.py +0 -0
  107. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/server.py +0 -0
  108. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/summarizer.py +0 -0
  109. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/temporal.py +0 -0
  110. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/tools.py +0 -0
  111. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/src/better_code_review_graph/xpia.py +0 -0
  112. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/__init__.py +0 -0
  113. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/conftest.py +0 -0
  114. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/conftest_e2e.py +0 -0
  115. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/e2e_mcp_protocol_test.py +0 -0
  116. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/Sample.cs +0 -0
  117. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/SampleJava.java +0 -0
  118. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/callback_refs.js +0 -0
  119. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/caller_example.py +0 -0
  120. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/multi_call_example.py +0 -0
  121. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/sample.c +0 -0
  122. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/sample.cpp +0 -0
  123. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/sample.kt +0 -0
  124. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/sample.php +0 -0
  125. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/sample.rb +0 -0
  126. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/sample.sol +0 -0
  127. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/sample.swift +0 -0
  128. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/sample_go.go +0 -0
  129. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/sample_python.py +0 -0
  130. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/sample_rust.rs +0 -0
  131. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/sample_typescript.ts +0 -0
  132. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/fixtures/test_sample.py +0 -0
  133. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/integration/__init__.py +0 -0
  134. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/integration/test_multi_user_remote.py +0 -0
  135. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_alembic_baseline.py +0 -0
  136. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_as_of_diff.py +0 -0
  137. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_auto_resolve_ambiguity.py +0 -0
  138. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_bare_suffix_correctness.py +0 -0
  139. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_callers_not_found_reason.py +0 -0
  140. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_callers_of_coverage.py +0 -0
  141. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_cli.py +0 -0
  142. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_cli_contracts.py +0 -0
  143. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_cohere_dimensions.py +0 -0
  144. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_commits_migration.py +0 -0
  145. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_config_open_relay_registered.py +0 -0
  146. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_coverage_gaps.py +0 -0
  147. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_credential_state.py +0 -0
  148. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_credential_state_stdio_no_fallback.py +0 -0
  149. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_credential_state_store_errors.py +0 -0
  150. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_crg_protocol_harness.py +0 -0
  151. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_custom_local_model.py +0 -0
  152. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_dynamic_dispatch_hints.py +0 -0
  153. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_e2e.py +0 -0
  154. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_embedder_retry_classification.py +0 -0
  155. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_embedding_migration.py +0 -0
  156. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_embeddings.py +0 -0
  157. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_embeddings_extra.py +0 -0
  158. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_export_graph_dispatch.py +0 -0
  159. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_export_graph_dispatch_path_traversal.py +0 -0
  160. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_exporter.py +0 -0
  161. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_federation.py +0 -0
  162. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_federation_migration.py +0 -0
  163. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_federation_smoke.py +0 -0
  164. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_full_live.py +0 -0
  165. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_g6_ux_status_accuracy.py +0 -0
  166. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_get_docs_section_error_path.py +0 -0
  167. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_get_review_context_no_diff.py +0 -0
  168. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_graph.py +0 -0
  169. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_graph_batch_fetch.py +0 -0
  170. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_graph_extra.py +0 -0
  171. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_graph_get_edges_by_targets_coverage.py +0 -0
  172. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_graph_stats_error_coverage.py +0 -0
  173. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_handle_not_found_coverage.py +0 -0
  174. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_help_recipes.py +0 -0
  175. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_heuristic.py +0 -0
  176. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_home_isolation.py +0 -0
  177. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_impact_payload_truncation.py +0 -0
  178. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_implements_edges.py +0 -0
  179. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_import_graph_dispatch.py +0 -0
  180. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_importer.py +0 -0
  181. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_incremental.py +0 -0
  182. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_incremental_extra.py +0 -0
  183. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_kind_filter_optimization.py +0 -0
  184. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_kinds_error_path.py +0 -0
  185. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_list_graph_stats_coverage.py +0 -0
  186. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_list_kinds_coverage.py +0 -0
  187. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_live_mcp.py +0 -0
  188. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_local_reranker.py +0 -0
  189. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_lookup_node_directly.py +0 -0
  190. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_multi_user.py +0 -0
  191. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_multi_user_dispatch.py +0 -0
  192. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_multilang.py +0 -0
  193. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_no_stale_package_name.py +0 -0
  194. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_oserror_coverage.py +0 -0
  195. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_parser.py +0 -0
  196. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_parser_extra.py +0 -0
  197. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_parser_grammar_failure.py +0 -0
  198. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_parser_source_text.py +0 -0
  199. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_path_resolution_fallback.py +0 -0
  200. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_payload_estimation.py +0 -0
  201. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_per_plugin_storage_migration.py +0 -0
  202. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_per_sub_graph_db.py +0 -0
  203. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_performance_n1.py +0 -0
  204. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_performance_n1_embeddings.py +0 -0
  205. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_phase_3_smoke.py +0 -0
  206. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_plugin_assets.py +0 -0
  207. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_pre_2_0_backup.py +0 -0
  208. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_relay_schema.py +0 -0
  209. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_relay_setup.py +0 -0
  210. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_renamed_in_diff.py +0 -0
  211. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_renamed_in_diff_exception.py +0 -0
  212. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_repo_filter.py +0 -0
  213. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_repo_filter_batching.py +0 -0
  214. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_repo_id_persistence.py +0 -0
  215. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_resolve_search_candidates.py +0 -0
  216. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_resolver_dispatcher.py +0 -0
  217. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_resolver_fallback.py +0 -0
  218. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_resolver_go.py +0 -0
  219. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_resolver_java.py +0 -0
  220. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_resolver_python.py +0 -0
  221. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_resolver_rust.py +0 -0
  222. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_resolver_typescript.py +0 -0
  223. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_response_header.py +0 -0
  224. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_response_payload_honesty.py +0 -0
  225. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_review_delta_line_shifts.py +0 -0
  226. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_review_languages_filter.py +0 -0
  227. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_reviewer_summary.py +0 -0
  228. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_search_edges_by_target_names.py +0 -0
  229. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_search_keyword_warning.py +0 -0
  230. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_security_injection.py +0 -0
  231. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_security_path_traversal.py +0 -0
  232. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_security_scan_batching.py +0 -0
  233. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_security_tags_migration.py +0 -0
  234. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_security_tool.py +0 -0
  235. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_semgrep_engine.py +0 -0
  236. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_server.py +0 -0
  237. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_server_help_coverage.py +0 -0
  238. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_serverinfo_version.py +0 -0
  239. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_setup_tool.py +0 -0
  240. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_shares_state_edges.py +0 -0
  241. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_spot_check.py +0 -0
  242. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_sql_security.py +0 -0
  243. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_stdio_direct.py +0 -0
  244. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_summarize_graph_dispatch.py +0 -0
  245. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_summarizer.py +0 -0
  246. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_summary_schema.py +0 -0
  247. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_temporal.py +0 -0
  248. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_temporal_migration.py +0 -0
  249. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_tested_by_edges.py +0 -0
  250. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_tools.py +0 -0
  251. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_tools_build_error_coverage.py +0 -0
  252. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_tools_full.py +0 -0
  253. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_tools_get_docs_section_coverage.py +0 -0
  254. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_typescript_coverage_gaps.py +0 -0
  255. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_v17_coverage_gaps.py +0 -0
  256. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_xpia.py +0 -0
  257. {better_code_review_graph-3.25.2 → better_code_review_graph-3.25.4}/tests/test_xpia_adversarial.py +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "better-code-review-graph",
3
3
  "description": "Knowledge graph for token-efficient code reviews -- semantic search and call-graph resolution across your codebase.",
4
- "version": "3.25.2",
4
+ "version": "3.25.4",
5
5
  "userConfig": {
6
6
  "EMBEDDING_MODELS": {
7
7
  "type": "string",
@@ -3,7 +3,6 @@ name: CD
3
3
  on:
4
4
  push:
5
5
  branches:
6
- - staging
7
6
  - main
8
7
  workflow_dispatch:
9
8
  inputs:
@@ -16,9 +15,9 @@ on:
16
15
  - stable
17
16
 
18
17
  env:
19
- # Unified release ladder: push to staging = beta, push to main = stable.
18
+ # Release lane: merge to main auto-publishes stable; beta only via manual dispatch (release_type=beta).
20
19
  # workflow_dispatch keeps release_type as an explicit override.
21
- RELEASE_TYPE: ${{ github.event_name == 'push' && (github.ref_name == 'staging' && 'beta' || 'stable') || inputs.release_type }}
20
+ RELEASE_TYPE: ${{ github.event_name == 'push' && 'stable' || inputs.release_type }}
22
21
 
23
22
  permissions:
24
23
  contents: write
@@ -105,3 +105,11 @@ Subquery 2 is not correlated, so SQLite already hoists it behind an `OP_Once` gu
105
105
  ## 2026-09-05 - Optimize peak memory overhead during full graph exports
106
106
  **Learning:** Full graph serializations (e.g., `export_graphml`, `export_jsonld` in `src/better_code_review_graph/exporter.py`) iterated over python `GraphNode` and `GraphEdge` objects via `store.get_all_nodes()` / `store.get_all_edges()`. This led to significant unnecessary memory consumption due to the construction and destruction of tens of thousands of dataclass instances for operations that only required scalar row values.
107
107
  **Action:** Replace `for node in store.get_all_nodes():` with a direct iterator over `sqlite3.Cursor` (e.g., `for row in store._conn.execute("SELECT * FROM nodes")`), accessing data via dictionary-style keys (`row["qualified_name"]`), eliminating object materialization on hot loops that touch the whole graph.
108
+
109
+ ### 2026-09-11 - Stream large JSON graph exports via generator
110
+
111
+ **Anchor:** `N/A` (to be committed)
112
+
113
+ **Learning:** When exporting the full code review graph via `export_crg`, materializing the entire graph's nodes and edges into lists of Python dictionaries before passing them to `json.dumps()` causes massive peak memory overhead, especially for large repositories.
114
+
115
+ **Action:** Replace full list materialization (`[dict(row) for row in cursor]`) with a generator that iterates over the `sqlite3.Cursor` directly. Yield incrementally-dumped JSON string chunks (`json.dumps(dict(row), indent=2).replace("\\n", "\\n ")`) to construct the final payload efficiently on-the-fly.
@@ -2,6 +2,36 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v3.25.4 (2026-09-12)
6
+
7
+ ### Bug Fixes
8
+
9
+ - Bolt optimize memory overhead in crg export
10
+ ([#1029](https://github.com/n24q02m/better-code-review-graph/pull/1029),
11
+ [`3e4d438`](https://github.com/n24q02m/better-code-review-graph/commit/3e4d438304ccd0e7c1b25050706fa8b1a7236650))
12
+
13
+
14
+ ## v3.25.3 (2026-09-12)
15
+
16
+ ### Bug Fixes
17
+
18
+ - Update fastretrieval stable pin expectation
19
+ ([#1027](https://github.com/n24q02m/better-code-review-graph/pull/1027),
20
+ [`79bb07a`](https://github.com/n24q02m/better-code-review-graph/commit/79bb07a2c0224754e36a57f712c5465fbc0a9aeb))
21
+
22
+ - **deps**: Update minor dependencies
23
+ ([#1027](https://github.com/n24q02m/better-code-review-graph/pull/1027),
24
+ [`79bb07a`](https://github.com/n24q02m/better-code-review-graph/commit/79bb07a2c0224754e36a57f712c5465fbc0a9aeb))
25
+
26
+ ### Chores
27
+
28
+ - **release**: Fix stale two-branch comment (single-main lane)
29
+ ([`ab7b641`](https://github.com/n24q02m/better-code-review-graph/commit/ab7b641ab9f99825ffd633ffa0a98eae8e08d858))
30
+
31
+ - **release**: Single-main release lane (staging branch retired)
32
+ ([`06b4d8e`](https://github.com/n24q02m/better-code-review-graph/commit/06b4d8e60b529df8bcd908fa4e56a639524d2ac2))
33
+
34
+
5
35
  ## v3.25.2 (2026-09-12)
6
36
 
7
37
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: better-code-review-graph
3
- Version: 3.25.2
3
+ Version: 3.25.4
4
4
  Summary: Token-efficient code review knowledge graph: semantic search and call-graph resolution.
5
5
  Author: n24q02m
6
6
  License-Expression: Apache-2.0
@@ -13,18 +13,18 @@ Classifier: License :: OSI Approved :: Apache Software License
13
13
  Classifier: Programming Language :: Python :: 3.13
14
14
  Classifier: Topic :: Software Development :: Quality Assurance
15
15
  Requires-Python: ==3.13.*
16
- Requires-Dist: alembic<2,>=1.19.2
16
+ Requires-Dist: alembic<2,>=1.20.0
17
17
  Requires-Dist: defusedxml>=0.7.1
18
18
  Requires-Dist: fastmcp<4,>=3.4.7
19
- Requires-Dist: fastretrieval<2,>=1.2.0
19
+ Requires-Dist: fastretrieval<2,>=1.3.2
20
20
  Requires-Dist: httpx
21
21
  Requires-Dist: litellm>=1.100.0
22
22
  Requires-Dist: mcp<2,>=1.30.0
23
- Requires-Dist: n24q02m-mcp-core[llm]==1.23.2
23
+ Requires-Dist: n24q02m-mcp-core[llm]==1.24.0
24
24
  Requires-Dist: networkx<4,>=3.6.1
25
25
  Requires-Dist: pydantic-settings
26
26
  Requires-Dist: pygments>=2.21.0
27
- Requires-Dist: tree-sitter-language-pack<2,>=1.17.0
27
+ Requires-Dist: tree-sitter-language-pack<2,>=1.18.0
28
28
  Requires-Dist: tree-sitter<1,>=0.26.0
29
29
  Requires-Dist: watchdog<7,>=6.0.0
30
30
  Provides-Extra: security
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "better-code-review-graph"
7
- version = "3.25.2"
7
+ version = "3.25.4"
8
8
  description = "Token-efficient code review knowledge graph: semantic search and call-graph resolution."
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  license = "Apache-2.0"
@@ -21,10 +21,10 @@ dependencies = [
21
21
  "mcp>=1.30.0,<2",
22
22
  "fastmcp>=3.4.7,<4",
23
23
  "tree-sitter>=0.26.0,<1",
24
- "tree-sitter-language-pack>=1.17.0,<2",
24
+ "tree-sitter-language-pack>=1.18.0,<2",
25
25
  "networkx>=3.6.1,<4",
26
26
  "watchdog>=6.0.0,<7",
27
- "fastretrieval>=1.2.0,<2",
27
+ "fastretrieval>=1.3.2,<2",
28
28
  "httpx",
29
29
  "pydantic-settings",
30
30
  # Floor tracks the current mcp-core stable for cascade parity with
@@ -33,7 +33,7 @@ dependencies = [
33
33
  # (this repo's slug == server_name already, so no CLI regression here).
34
34
  # Keep this on a stable release -- a prerelease floor such as 1.20.0b2
35
35
  # sorts below its own stable under PEP 440 and does not require it.
36
- "n24q02m-mcp-core[llm]==1.23.2",
36
+ "n24q02m-mcp-core[llm]==1.24.0",
37
37
  # litellm security floor (transitive via mcp-core[llm]). 1.83.x-1.87.x carry 4
38
38
  # advisories in litellm's PROXY server: GHSA-r75f-5x8p-qvmc (SQLi in proxy key
39
39
  # verify), GHSA-xqmj-j6mv-4862 (SSTI /prompts/test), GHSA-v4p8-mg3p-g94g (cmd-exec
@@ -44,7 +44,7 @@ dependencies = [
44
44
  # floor lifts it (semgrep resolves to 1.79.x, fine for a dev-only SAST tool).
45
45
  "litellm>=1.100.0",
46
46
  "Pygments>=2.21.0",
47
- "alembic>=1.19.2,<2",
47
+ "alembic>=1.20.0,<2",
48
48
  "defusedxml>=0.7.1",
49
49
  ]
50
50
 
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/n24q02m/better-code-review-graph.git",
7
7
  "source": "github"
8
8
  },
9
- "version": "3.25.2",
9
+ "version": "3.25.4",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "pypi",
13
13
  "identifier": "better-code-review-graph",
14
- "version": "3.25.2",
14
+ "version": "3.25.4",
15
15
  "runtimeHint": "uvx",
16
16
  "runtimeArgs": [
17
17
  "--python",
@@ -269,12 +269,37 @@ def export_crg(store: GraphStore, root: Path | None = None) -> str:
269
269
  from .federation import derive_repo_id
270
270
 
271
271
  repo_id = derive_repo_id(root if root is not None else store.db_path.parent)
272
- nodes = [dict(row) for row in store.iter_raw_nodes()]
273
- edges = [dict(row) for row in store.iter_raw_edges()]
274
- return json.dumps(
275
- {"schema_version": 1, "repo_id": repo_id, "nodes": nodes, "edges": edges},
276
- indent=2,
277
- )
272
+
273
+ # To prevent massive memory overhead when exporting large JSON structures,
274
+ # stream the output by iterating over the database cursor in a Python generator
275
+ # and yielding incrementally-dumped string pieces instead of materializing full lists.
276
+ def _generate():
277
+ yield "{\n"
278
+ yield ' "schema_version": 1,\n'
279
+ yield f' "repo_id": {json.dumps(repo_id)},\n'
280
+ yield ' "nodes": [\n'
281
+
282
+ first = True
283
+ for row in store.iter_raw_nodes():
284
+ if not first:
285
+ yield ",\n"
286
+ first = False
287
+ yield " " + json.dumps(dict(row), indent=2).replace("\n", "\n ")
288
+
289
+ yield "\n ],\n"
290
+ yield ' "edges": [\n'
291
+
292
+ first = True
293
+ for row in store.iter_raw_edges():
294
+ if not first:
295
+ yield ",\n"
296
+ first = False
297
+ yield " " + json.dumps(dict(row), indent=2).replace("\n", "\n ")
298
+
299
+ yield "\n ]\n"
300
+ yield "}"
301
+
302
+ return "".join(_generate())
278
303
 
279
304
 
280
305
  _FORMATTERS = {
@@ -88,14 +88,14 @@ def test_embedding_dependencies_and_lock_use_stable_releases():
88
88
  packages = {package["name"]: package for package in lock["package"]}
89
89
 
90
90
  requirements = project["dependencies"]
91
- assert "fastretrieval>=1.2.0,<2" in requirements
92
- assert "n24q02m-mcp-core[llm]==1.23.2" in requirements
91
+ assert "fastretrieval>=1.3.2,<2" in requirements
92
+ assert "n24q02m-mcp-core[llm]==1.24.0" in requirements
93
93
  legacy_distribution = "qwen" + "3-embed"
94
94
  assert not any(
95
95
  legacy_distribution in requirement.casefold() for requirement in requirements
96
96
  )
97
- assert packages["fastretrieval"]["version"] == "1.2.0"
98
- assert packages["n24q02m-mcp-core"]["version"] == "1.23.2"
97
+ assert packages["fastretrieval"]["version"] == "1.3.2"
98
+ assert packages["n24q02m-mcp-core"]["version"] == "1.24.0"
99
99
  assert legacy_distribution not in packages
100
100
 
101
101
 
@@ -77,16 +77,16 @@ wheels = [
77
77
 
78
78
  [[package]]
79
79
  name = "alembic"
80
- version = "1.19.2"
80
+ version = "1.20.0"
81
81
  source = { registry = "https://pypi.org/simple" }
82
82
  dependencies = [
83
83
  { name = "mako" },
84
84
  { name = "sqlalchemy" },
85
85
  { name = "typing-extensions" },
86
86
  ]
87
- sdist = { url = "https://files.pythonhosted.org/packages/34/10/181eecdd552217d0342492bd6f3b8a96e973083379aace3d3402830ddc03/alembic-1.19.2.tar.gz", hash = "sha256:297950a8a91f6770eb82bfbce9bea55c728b90a5386c6e81430191a319d138b0", size = 2082643, upload-time = "2026-09-04T17:10:11.212Z" }
87
+ sdist = { url = "https://files.pythonhosted.org/packages/ed/aa/02910bdb8e2f1444f6654d5b296cd827d126f82209050ee7b1000f92ac4b/alembic-1.20.0.tar.gz", hash = "sha256:db505480647bc60386c5369402f4a57a506b7539c9e9ef5e270d45cbbe4939bf", size = 2093272, upload-time = "2026-09-11T19:09:11.126Z" }
88
88
  wheels = [
89
- { url = "https://files.pythonhosted.org/packages/9c/cb/9014784dcb0585977ae23b6f43331d0a33c51ac0d692506d12b4f5ee9f3b/alembic-1.19.2-py3-none-any.whl", hash = "sha256:32d553dcd577e6fe5c3c63e91468526d35e4dcecafe865d7db4e9b328fa93cb2", size = 267399, upload-time = "2026-09-04T17:10:12.796Z" },
89
+ { url = "https://files.pythonhosted.org/packages/3f/27/78a89b55b0904d222183164e079b4ca56208e94eff1d35ad1f1ad5be9b06/alembic-1.20.0-py3-none-any.whl", hash = "sha256:77eb101048d95f982c0353e9233404889dcd7a6fc244c107836c0e2fc9cf7d9d", size = 268719, upload-time = "2026-09-11T19:09:12.88Z" },
90
90
  ]
91
91
 
92
92
  [[package]]
@@ -159,7 +159,7 @@ wheels = [
159
159
 
160
160
  [[package]]
161
161
  name = "better-code-review-graph"
162
- version = "3.25.0"
162
+ version = "3.25.2"
163
163
  source = { editable = "." }
164
164
  dependencies = [
165
165
  { name = "alembic" },
@@ -197,20 +197,20 @@ dev = [
197
197
 
198
198
  [package.metadata]
199
199
  requires-dist = [
200
- { name = "alembic", specifier = ">=1.19.2,<2" },
200
+ { name = "alembic", specifier = ">=1.20.0,<2" },
201
201
  { name = "defusedxml", specifier = ">=0.7.1" },
202
202
  { name = "fastmcp", specifier = ">=3.4.7,<4" },
203
- { name = "fastretrieval", specifier = ">=1.2.0,<2" },
203
+ { name = "fastretrieval", specifier = ">=1.3.2,<2" },
204
204
  { name = "httpx" },
205
205
  { name = "litellm", specifier = ">=1.100.0" },
206
206
  { name = "mcp", specifier = ">=1.30.0,<2" },
207
- { name = "n24q02m-mcp-core", extras = ["llm"], specifier = "==1.23.2" },
207
+ { name = "n24q02m-mcp-core", extras = ["llm"], specifier = "==1.24.0" },
208
208
  { name = "networkx", specifier = ">=3.6.1,<4" },
209
209
  { name = "pydantic-settings" },
210
210
  { name = "pygments", specifier = ">=2.21.0" },
211
211
  { name = "semgrep", marker = "extra == 'security'", specifier = ">=1.0,<1.162" },
212
212
  { name = "tree-sitter", specifier = ">=0.26.0,<1" },
213
- { name = "tree-sitter-language-pack", specifier = ">=1.17.0,<2" },
213
+ { name = "tree-sitter-language-pack", specifier = ">=1.18.0,<2" },
214
214
  { name = "watchdog", specifier = ">=6.0.0,<7" },
215
215
  ]
216
216
  provides-extras = ["security"]
@@ -618,7 +618,7 @@ server = [
618
618
 
619
619
  [[package]]
620
620
  name = "fastretrieval"
621
- version = "1.2.0"
621
+ version = "1.3.2"
622
622
  source = { registry = "https://pypi.org/simple" }
623
623
  dependencies = [
624
624
  { name = "huggingface-hub" },
@@ -629,9 +629,9 @@ dependencies = [
629
629
  { name = "tokenizers" },
630
630
  { name = "tqdm" },
631
631
  ]
632
- sdist = { url = "https://files.pythonhosted.org/packages/af/89/acef3ff8502054764c275dc373bb68c8fbe011e9290b0bbdb72ce78c0b5e/fastretrieval-1.2.0.tar.gz", hash = "sha256:4b566df8afc79421248c1ec97a21e1dd4355ccb0c43df29d8e366a2dd43c07dd", size = 323790, upload-time = "2026-08-31T11:23:17.129Z" }
632
+ sdist = { url = "https://files.pythonhosted.org/packages/05/a0/54566f5a09cd54709c9f33b500a02566733ef324e10abbc3376f1624f8fb/fastretrieval-1.3.2.tar.gz", hash = "sha256:d9d68b494d79283f21570b45cd6141e7b506c822c943b3a5067056d43d834ca3", size = 327923, upload-time = "2026-09-12T04:48:23.251Z" }
633
633
  wheels = [
634
- { url = "https://files.pythonhosted.org/packages/21/07/264fa767eca0a5a842e8cd26b57d955e631015f31f33702fb329b9bcf701/fastretrieval-1.2.0-py3-none-any.whl", hash = "sha256:7699bdff1f9773c2a1429b3457d179328b685691fb67fc9f3888c67e706b4ebe", size = 144691, upload-time = "2026-08-31T11:23:15.556Z" },
634
+ { url = "https://files.pythonhosted.org/packages/0b/a8/db251b86f12bf601e0ae3756c534f27d345bbb2516e91b4d5b8d09496c2a/fastretrieval-1.3.2-py3-none-any.whl", hash = "sha256:28ba8f843d346ac8bc75716d3006c61c1fb351a1aea78d5e318daebff967169e", size = 145556, upload-time = "2026-09-12T04:48:21.608Z" },
635
635
  ]
636
636
 
637
637
  [[package]]
@@ -1211,7 +1211,7 @@ wheels = [
1211
1211
 
1212
1212
  [[package]]
1213
1213
  name = "n24q02m-mcp-core"
1214
- version = "1.23.2"
1214
+ version = "1.24.0"
1215
1215
  source = { registry = "https://pypi.org/simple" }
1216
1216
  dependencies = [
1217
1217
  { name = "authlib" },
@@ -1221,15 +1221,16 @@ dependencies = [
1221
1221
  { name = "httpcore" },
1222
1222
  { name = "httpx" },
1223
1223
  { name = "loguru" },
1224
+ { name = "mcp" },
1224
1225
  { name = "platformdirs" },
1225
1226
  { name = "pydantic" },
1226
1227
  { name = "pydantic-settings" },
1227
1228
  { name = "starlette" },
1228
1229
  { name = "tomli-w" },
1229
1230
  ]
1230
- sdist = { url = "https://files.pythonhosted.org/packages/3c/6a/a53c1da697af2e7392d133715965ff1cf7ba4771a857d7c000526a962854/n24q02m_mcp_core-1.23.2.tar.gz", hash = "sha256:ffe32ed36e83015333632837e266746b097344654151aeea18444a24ab663997", size = 368487, upload-time = "2026-08-31T11:13:19.028Z" }
1231
+ sdist = { url = "https://files.pythonhosted.org/packages/bf/b9/587e76ab01578ff8b4df48624a0b634c5e4236702232cfebaf17d68c1920/n24q02m_mcp_core-1.24.0.tar.gz", hash = "sha256:fd863cefb8b33aca716f871177312d60fd9919c6c2e0f84c5ce20da0079b6751", size = 366191, upload-time = "2026-09-11T16:33:16.434Z" }
1231
1232
  wheels = [
1232
- { url = "https://files.pythonhosted.org/packages/34/6e/4008a61ea2b40ece60d5551ea46cf27d8d0da64083743e71677ea59d2673/n24q02m_mcp_core-1.23.2-py3-none-any.whl", hash = "sha256:8e8d611129e15f7e81133355429c153c1fd05d2604b4286edf850d0642c0720d", size = 198270, upload-time = "2026-08-31T11:13:17.745Z" },
1233
+ { url = "https://files.pythonhosted.org/packages/56/95/fb190ebaefdda15f1800ffa71a72d046eb72f5fdba802fdfc6b35a72e674/n24q02m_mcp_core-1.24.0-py3-none-any.whl", hash = "sha256:7a90e6ad29a4ce477aaabfb71bb117f906fdda26b2038fb5b9c7e735869e507d", size = 198405, upload-time = "2026-09-11T16:33:15.016Z" },
1233
1234
  ]
1234
1235
 
1235
1236
  [package.optional-dependencies]
@@ -2058,19 +2059,19 @@ wheels = [
2058
2059
 
2059
2060
  [[package]]
2060
2061
  name = "tree-sitter-language-pack"
2061
- version = "1.17.0"
2062
+ version = "1.18.0"
2062
2063
  source = { registry = "https://pypi.org/simple" }
2063
2064
  dependencies = [
2064
2065
  { name = "tree-sitter" },
2065
2066
  ]
2066
- sdist = { url = "https://files.pythonhosted.org/packages/69/14/0adfc30ef03a6deddeda0728e5137d809c5d21642c2f94ad1a1ae180e6e1/tree_sitter_language_pack-1.17.0.tar.gz", hash = "sha256:57f8e73c6c28240d26d4468c0fec2e1b63a90a582773f8df00d967d1b62a7960", size = 88632, upload-time = "2026-09-10T03:43:05.829Z" }
2067
+ sdist = { url = "https://files.pythonhosted.org/packages/5c/8e/d2a612d42a453b1c07f526ebd809174d3cd3ae21940abfb5721b8e88a724/tree_sitter_language_pack-1.18.0.tar.gz", hash = "sha256:24f234099f8cf67c6e5fe5adec73d95efb1505e5409a17e65de0790b3480336b", size = 88630, upload-time = "2026-09-11T17:09:16.578Z" }
2067
2068
  wheels = [
2068
- { url = "https://files.pythonhosted.org/packages/f4/60/bbe41b2f654440f0a0f8fad604d768ba659378f2860d7ddd4847d758f601/tree_sitter_language_pack-1.17.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:0455a5f260edebd6474bc055969586f68da071eaf028bc4dd4aa61dd9e2b2d51", size = 2263357, upload-time = "2026-09-10T03:42:56.779Z" },
2069
- { url = "https://files.pythonhosted.org/packages/ee/3c/805384231fa59227e162ff73d1c0f79d1516f51be56f04b009ea9d12503d/tree_sitter_language_pack-1.17.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:872dcd5fcbf9b6ddff9f338de5290e11de8d0b94c7d54dfebfeadc5efe52c915", size = 2154511, upload-time = "2026-09-10T03:42:58.34Z" },
2070
- { url = "https://files.pythonhosted.org/packages/c8/a9/11cf596aeeeaf63cf4076ec53e1d9322a42b6d1c6139ad0ee23376f86f38/tree_sitter_language_pack-1.17.0-cp310-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:d82e333bed569c24bc4d00a23f53939a09f56590b204a30235e6ba7e4831a661", size = 2310857, upload-time = "2026-09-10T03:42:59.809Z" },
2071
- { url = "https://files.pythonhosted.org/packages/2c/8f/8e950c478a8399eff2f71c92ccb23aad56604b9a742a575ec5484d36b7bc/tree_sitter_language_pack-1.17.0-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:5b6177414b40c525c1a231f7a67210342e5065df7821e25c822a1b87a55ed976", size = 2428638, upload-time = "2026-09-10T03:43:01.558Z" },
2072
- { url = "https://files.pythonhosted.org/packages/2e/d2/a821a105b6eab0ff732c3b46d2b6769aa556e410c7ecfd1a98cc646bf391/tree_sitter_language_pack-1.17.0-cp310-abi3-win_amd64.whl", hash = "sha256:6b9ff09c79aa63aae5ad2cabc509a1d25e0654732684e4a0ea3c2765bad62936", size = 2206980, upload-time = "2026-09-10T03:43:03.057Z" },
2073
- { url = "https://files.pythonhosted.org/packages/33/85/48501b81bcfc6eafdf959669d32b519b8299dc392d8e986a8e9d6bce4b75/tree_sitter_language_pack-1.17.0-cp310-abi3-win_arm64.whl", hash = "sha256:80f486203641c66138fbdf11ad4a6ea3465233e4eb940bb3229805a6ff98e0d4", size = 2110025, upload-time = "2026-09-10T03:43:04.596Z" },
2069
+ { url = "https://files.pythonhosted.org/packages/b6/8e/8f85fe93fa2e9311068b32e1db87f2001a14574d73efe1a37de1c4ec74b8/tree_sitter_language_pack-1.18.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:7a6842e31fe30ae30a7ca743ed535c8b28db1f5c9ca814c5f21e8206dab22017", size = 2291509, upload-time = "2026-09-11T17:09:08.522Z" },
2070
+ { url = "https://files.pythonhosted.org/packages/81/7f/cef50511eddab28f5774ff3ef4db5ebbf511e357939cff8159c0c980b127/tree_sitter_language_pack-1.18.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:92021a92ad6ec65b7375a6fd5fe10c1b88462a7641484c32aee946796ee23086", size = 2180915, upload-time = "2026-09-11T17:09:10.012Z" },
2071
+ { url = "https://files.pythonhosted.org/packages/69/7e/0bd772190c9e2fbb34332b3851bcf7110eb4a2baa57eb077b668013ee1df/tree_sitter_language_pack-1.18.0-cp310-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:da137e0fe277d08520b5387c56d01085882d4d1cf153e7f563323b24e1197f1c", size = 2345686, upload-time = "2026-09-11T17:09:11.275Z" },
2072
+ { url = "https://files.pythonhosted.org/packages/da/d5/9ca08e61b88339aa2e06c9046131f2a846c6e9c0865cf06b120776387062/tree_sitter_language_pack-1.18.0-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9eab31adf7500ea16a4006cad44f0b71d48ad3d6c884aafbcbf56a3c6147cc39", size = 2456221, upload-time = "2026-09-11T17:09:12.625Z" },
2073
+ { url = "https://files.pythonhosted.org/packages/9a/fb/fa32a8c273c5e54067b329121a838af880e41852e51c0034e9fa477c92c0/tree_sitter_language_pack-1.18.0-cp310-abi3-win_amd64.whl", hash = "sha256:905b4b56a02abdab9699ddd7c7c97adf39592ad206f3d837ea67c24150fad19b", size = 2236084, upload-time = "2026-09-11T17:09:14.08Z" },
2074
+ { url = "https://files.pythonhosted.org/packages/ef/0c/01b59617a24e8fde08924a4c269158cf90c1608d8ce91114e264708f5981/tree_sitter_language_pack-1.18.0-cp310-abi3-win_arm64.whl", hash = "sha256:074ce091f4b6d54f798a350c2cca8b7c1a16d3d3504ddf3404cce180a438dcaf", size = 2138127, upload-time = "2026-09-11T17:09:15.462Z" },
2074
2075
  ]
2075
2076
 
2076
2077
  [[package]]