codegraphcontext 0.6.11__tar.gz → 0.6.13__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 (191) hide show
  1. {codegraphcontext-0.6.11/src/codegraphcontext.egg-info → codegraphcontext-0.6.13}/PKG-INFO +3 -3
  2. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/pyproject.toml +3 -3
  3. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_embedded_kuzu.py +212 -11
  4. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/server.py +14 -5
  5. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13/src/codegraphcontext.egg-info}/PKG-INFO +3 -3
  6. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext.egg-info/requires.txt +2 -2
  7. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/LICENSE +0 -0
  8. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/MANIFEST.in +0 -0
  9. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/README.md +0 -0
  10. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/setup.cfg +0 -0
  11. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/__init__.py +0 -0
  12. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/__main__.py +0 -0
  13. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/api/__init__.py +0 -0
  14. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/api/app.py +0 -0
  15. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/api/auth.py +0 -0
  16. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/api/mcp_sse.py +0 -0
  17. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/api/router.py +0 -0
  18. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/api/schemas.py +0 -0
  19. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/__init__.py +0 -0
  20. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/cli_helpers.py +0 -0
  21. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/config_manager.py +0 -0
  22. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/hook_manager.py +0 -0
  23. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/main.py +0 -0
  24. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/project_config.py +0 -0
  25. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/registry_commands.py +0 -0
  26. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/setup_macos.py +0 -0
  27. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/setup_wizard.py +0 -0
  28. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/simulator.py +0 -0
  29. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/visualizer.py +0 -0
  30. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/__init__.py +0 -0
  31. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/bundle_registry.py +0 -0
  32. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/cgc_bundle.py +0 -0
  33. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/cgcignore.py +0 -0
  34. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database.py +0 -0
  35. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_falkordb.py +0 -0
  36. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_falkordb_remote.py +0 -0
  37. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_kuzu.py +0 -0
  38. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_ladybug.py +0 -0
  39. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_nornic.py +0 -0
  40. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/falkor_worker.py +0 -0
  41. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/graph_query.py +0 -0
  42. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/jobs.py +0 -0
  43. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/simulator.py +0 -0
  44. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/watcher.py +0 -0
  45. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/prompts.py +0 -0
  46. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/stdlibs.py +0 -0
  47. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tool_definitions.py +0 -0
  48. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/__init__.py +0 -0
  49. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/advanced_language_query_tool.py +0 -0
  50. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/code_finder.py +0 -0
  51. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/datasources/__init__.py +0 -0
  52. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/datasources/cassandra_ingester.py +0 -0
  53. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/datasources/mysql_ingester.py +0 -0
  54. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/datasources/redis_ingester.py +0 -0
  55. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/graph_builder.py +0 -0
  56. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/handlers/analysis_handlers.py +0 -0
  57. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/handlers/indexing_handlers.py +0 -0
  58. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/handlers/management_handlers.py +0 -0
  59. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/handlers/query_handlers.py +0 -0
  60. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/handlers/watcher_handlers.py +0 -0
  61. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/__init__.py +0 -0
  62. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/constants.py +0 -0
  63. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/discovery.py +0 -0
  64. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/embeddings.py +0 -0
  65. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/persistence/__init__.py +0 -0
  66. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/persistence/utils.py +0 -0
  67. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/persistence/writer.py +0 -0
  68. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/pipeline.py +0 -0
  69. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/pre_scan.py +0 -0
  70. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/resolution/__init__.py +0 -0
  71. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/resolution/calls.py +0 -0
  72. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/resolution/inheritance.py +0 -0
  73. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/resolution/post_resolution.py +0 -0
  74. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/sanitize.py +0 -0
  75. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/schema.py +0 -0
  76. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/schema_contract.py +0 -0
  77. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/scip_pipeline.py +0 -0
  78. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/vector_resolver.py +0 -0
  79. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/c.py +0 -0
  80. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/cpp.py +0 -0
  81. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/csharp.py +0 -0
  82. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/css.py +0 -0
  83. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/dart.py +0 -0
  84. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/elisp.py +0 -0
  85. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/elixir.py +0 -0
  86. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/go.py +0 -0
  87. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/gradle.py +0 -0
  88. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/haskell.py +0 -0
  89. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/html.py +0 -0
  90. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/java.py +0 -0
  91. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/javascript.py +0 -0
  92. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/kotlin.py +0 -0
  93. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/lua.py +0 -0
  94. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/maven.py +0 -0
  95. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/mybatis.py +0 -0
  96. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/perl.py +0 -0
  97. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/php.py +0 -0
  98. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/python.py +0 -0
  99. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/ruby.py +0 -0
  100. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/rust.py +0 -0
  101. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/scala.py +0 -0
  102. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/sfc_common.py +0 -0
  103. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/solidity.py +0 -0
  104. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/solidity_remappings.py +0 -0
  105. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/svelte.py +0 -0
  106. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/swift.py +0 -0
  107. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/typescript.py +0 -0
  108. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/typescriptjsx.py +0 -0
  109. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/vue.py +0 -0
  110. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/package_resolver.py +0 -0
  111. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/c_toolkit.py +0 -0
  112. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/cpp_toolkit.py +0 -0
  113. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/csharp_toolkit.py +0 -0
  114. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/dart_toolkit.py +0 -0
  115. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/elisp_toolkit.py +0 -0
  116. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/go_toolkit.py +0 -0
  117. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/haskell_toolkit.py +0 -0
  118. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/java_toolkit.py +0 -0
  119. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/javascript_toolkit.py +0 -0
  120. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/perl_toolkit.py +0 -0
  121. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/python_toolkit.py +0 -0
  122. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/ruby_toolkit.py +0 -0
  123. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/rust_toolkit.py +0 -0
  124. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/scala_toolkit.py +0 -0
  125. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/solidity_toolkit.py +0 -0
  126. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/swift_toolkit.py +0 -0
  127. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/typescript_toolkit.py +0 -0
  128. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/report_generator.py +0 -0
  129. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/scip_indexer.py +0 -0
  130. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/scip_pb2.py +0 -0
  131. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/system.py +0 -0
  132. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/tree_sitter_parser.py +0 -0
  133. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/type_utils.py +0 -0
  134. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/cypher_ddl.py +0 -0
  135. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/cypher_readonly.py +0 -0
  136. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/debug_log.py +0 -0
  137. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/gcf_encoder.py +0 -0
  138. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/git_utils.py +0 -0
  139. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/graph_shapes.py +0 -0
  140. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/path_ignore.py +0 -0
  141. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/path_sandbox.py +0 -0
  142. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/repo_path.py +0 -0
  143. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/secret_scanner.py +0 -0
  144. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/tool_limits.py +0 -0
  145. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/tree_sitter_manager.py +0 -0
  146. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/visualize_graph.py +0 -0
  147. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/__vite-browser-external-9wXp6ZBx.js +0 -0
  148. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/function-calls-BtRHrqa2.png +0 -0
  149. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/graph-total-D1fBAugo.png +0 -0
  150. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/hero-graph-2voMJp2a.jpg +0 -0
  151. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/hierarchy-DGADo0YT.png +0 -0
  152. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/index-C-187lf0.js +0 -0
  153. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/index-fNAa6jgv.css +0 -0
  154. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/parser-pyodide.worker-BgsDfaad.js +0 -0
  155. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/parser.worker-_nvrecvj.js +0 -0
  156. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/tree-sitter-qKYAACSa.wasm +0 -0
  157. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/cgcIcon.png +0 -0
  158. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/favicon.ico +0 -0
  159. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/index.html +0 -0
  160. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/logo-icon.svg +0 -0
  161. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/logo.svg +0 -0
  162. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/placeholder.svg +0 -0
  163. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/preview-image.png +0 -0
  164. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/robots.txt +0 -0
  165. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-c.wasm +0 -0
  166. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-c_sharp.wasm +0 -0
  167. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-core.js +0 -0
  168. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-cpp.wasm +0 -0
  169. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-dart.wasm +0 -0
  170. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-go.wasm +0 -0
  171. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-java.wasm +0 -0
  172. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-javascript.wasm +0 -0
  173. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-kotlin.wasm +0 -0
  174. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-perl.wasm +0 -0
  175. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-php.wasm +0 -0
  176. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-python.wasm +0 -0
  177. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-ruby.wasm +0 -0
  178. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-rust.wasm +0 -0
  179. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-swift.wasm +0 -0
  180. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-tsx.wasm +0 -0
  181. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-typescript.wasm +0 -0
  182. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter.wasm +0 -0
  183. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/web-tree-sitter.js +0 -0
  184. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/web-tree-sitter.wasm +0 -0
  185. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/server.py +0 -0
  186. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext.egg-info/SOURCES.txt +0 -0
  187. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext.egg-info/dependency_links.txt +0 -0
  188. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext.egg-info/entry_points.txt +0 -0
  189. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext.egg-info/top_level.txt +0 -0
  190. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/tests/test_issue_806_fix.py +0 -0
  191. {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/tests/test_mcp_sse.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codegraphcontext
3
- Version: 0.6.11
3
+ Version: 0.6.13
4
4
  Summary: An MCP server that indexes local code into a graph database to provide context to AI assistants.
5
5
  Author-email: Shashank Shekhar Singh <shashankshekharsingh1205@gmail.com>
6
6
  License: MIT License
@@ -61,7 +61,7 @@ Requires-Dist: falkordblite<0.10,>=0.7; sys_platform != "win32" and python_versi
61
61
  Requires-Dist: requests>=2.28.0
62
62
  Requires-Dist: protobuf<3.21,>=3.20
63
63
  Requires-Dist: kuzu; python_version < "3.14" or sys_platform == "linux"
64
- Requires-Dist: ladybug; sys_platform == "win32" or (sys_platform != "win32" and python_version >= "3.10")
64
+ Requires-Dist: ladybug<0.20,>=0.19; sys_platform == "win32" or (sys_platform != "win32" and python_version >= "3.10")
65
65
  Requires-Dist: mcp<2,>=1.0.0
66
66
  Requires-Dist: fastapi>=0.100.0
67
67
  Requires-Dist: uvicorn>=0.22.0
@@ -80,7 +80,7 @@ Requires-Dist: redis<6,>=5; extra == "falkordb-remote"
80
80
  Provides-Extra: kuzu
81
81
  Requires-Dist: kuzu; (python_version < "3.14" or sys_platform == "linux") and extra == "kuzu"
82
82
  Provides-Extra: ladybug
83
- Requires-Dist: ladybug; (sys_platform == "win32" or (sys_platform != "win32" and python_version >= "3.10")) and extra == "ladybug"
83
+ Requires-Dist: ladybug<0.20,>=0.19; (sys_platform == "win32" or (sys_platform != "win32" and python_version >= "3.10")) and extra == "ladybug"
84
84
  Provides-Extra: neo4j
85
85
  Requires-Dist: neo4j>=5.15.0; extra == "neo4j"
86
86
  Provides-Extra: gcf
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "codegraphcontext"
3
- version = "0.6.11"
3
+ version = "0.6.13"
4
4
  description = "An MCP server that indexes local code into a graph database to provide context to AI assistants."
5
5
  authors = [{ name = "Shashank Shekhar Singh", email = "shashankshekharsingh1205@gmail.com" }]
6
6
  readme = "README.md"
@@ -72,7 +72,7 @@ dependencies = [
72
72
  # wheels for all three platforms and remains the unconditional default.
73
73
  # ------------------------------------------------------------------
74
74
  "kuzu; python_version < '3.14' or sys_platform == 'linux'",
75
- "ladybug; sys_platform == 'win32' or (sys_platform != 'win32' and python_version >= '3.10')",
75
+ "ladybug>=0.19,<0.20; sys_platform == 'win32' or (sys_platform != 'win32' and python_version >= '3.10')",
76
76
  # Cap below 2.0: the low-level `mcp.server.Server` dropped its `list_tools`
77
77
  # and `call_tool` decorators in 2.0.0, which api/mcp_sse.py registers its
78
78
  # handlers with. With an unbounded pin, CI resolved 2.0.0 on release day and
@@ -110,7 +110,7 @@ kuzu = [
110
110
  "kuzu; python_version < '3.14' or sys_platform == 'linux'",
111
111
  ]
112
112
  ladybug = [
113
- "ladybug; sys_platform == 'win32' or (sys_platform != 'win32' and python_version >= '3.10')",
113
+ "ladybug>=0.19,<0.20; sys_platform == 'win32' or (sys_platform != 'win32' and python_version >= '3.10')",
114
114
  ]
115
115
  neo4j = [
116
116
  "neo4j>=5.15.0",
@@ -27,18 +27,85 @@ from codegraphcontext.utils.debug_log import debug_log, info_logger, error_logge
27
27
  # default to ~80% of system RAM, which lets long-running gateways grow huge.
28
28
  DEFAULT_EMBEDDED_BUFFER_POOL_BYTES = 4 * 1024**3
29
29
 
30
+ # Floor for the availability-derived default, so a briefly-busy machine does
31
+ # not shrink the pool into pathological territory.
32
+ MIN_DEFAULT_BUFFER_POOL_BYTES = 256 * 1024**2
33
+
34
+
35
+ def _cgroup_available_bytes():
36
+ """Memory headroom under the container's cgroup limit, or None when
37
+ unconfined. /proc/meminfo shows the HOST inside a container, so a pod
38
+ capped at 1 GiB on a 64 GiB host would otherwise size a 4 GiB pool and
39
+ be OOM-killed natively at first touch."""
40
+ # cgroup v2 (unified hierarchy)
41
+ try:
42
+ with open("/sys/fs/cgroup/memory.max") as f:
43
+ raw = f.read().strip()
44
+ if raw != "max":
45
+ limit = int(raw)
46
+ usage = 0
47
+ try:
48
+ with open("/sys/fs/cgroup/memory.current") as f:
49
+ usage = int(f.read().strip())
50
+ except (OSError, ValueError):
51
+ pass
52
+ return max(limit - usage, 0)
53
+ except (OSError, ValueError):
54
+ pass
55
+ # cgroup v1
56
+ try:
57
+ with open("/sys/fs/cgroup/memory/memory.limit_in_bytes") as f:
58
+ limit = int(f.read().strip())
59
+ if limit < 1 << 60: # v1 reports ~8 EiB when unlimited
60
+ usage = 0
61
+ try:
62
+ with open("/sys/fs/cgroup/memory/memory.usage_in_bytes") as f:
63
+ usage = int(f.read().strip())
64
+ except (OSError, ValueError):
65
+ pass
66
+ return max(limit - usage, 0)
67
+ except (OSError, ValueError):
68
+ pass
69
+ return None
70
+
71
+
72
+ def _available_memory_bytes():
73
+ """The tighter of host MemAvailable (/proc/meminfo) and the cgroup
74
+ memory headroom, or None where neither is readable (macOS…)."""
75
+ host = None
76
+ try:
77
+ with open("/proc/meminfo") as f:
78
+ for line in f:
79
+ if line.startswith("MemAvailable:"):
80
+ host = int(line.split()[1]) * 1024
81
+ break
82
+ except OSError:
83
+ pass
84
+ cgroup = _cgroup_available_bytes()
85
+ if host is not None and cgroup is not None:
86
+ return min(host, cgroup)
87
+ return host if host is not None else cgroup
88
+
30
89
 
31
90
  def resolve_embedded_buffer_pool_size() -> int:
32
91
  """
33
92
  Resolve ``buffer_pool_size`` for embedded ``Database(...)`` constructors.
34
93
 
35
- Reads ``CGC_EMBEDDED_BUFFER_POOL_MB`` (integer MiB). Unset uses a 4 GiB
36
- default. ``0`` opts back into the library default (~80% of system memory).
37
- Invalid values log a warning and fall back to 4 GiB.
94
+ Reads ``CGC_EMBEDDED_BUFFER_POOL_MB`` (integer MiB). Unset uses an
95
+ adaptive default: 4 GiB, capped at half of currently-available memory
96
+ (floored at 256 MiB) — on a memory-constrained host (CI runners sharing
97
+ RAM with a Neo4j container, small VMs) a fixed 4 GiB pool made LadybugDB
98
+ fault natively (SIGSEGV, parity run exit -11) when the reservation could
99
+ not be backed. An explicit env value is always honored as-is; ``0`` opts
100
+ back into the library default (~80% of system memory).
38
101
  """
39
102
  raw = os.getenv("CGC_EMBEDDED_BUFFER_POOL_MB")
40
103
  if raw is None or str(raw).strip() == "":
41
- return DEFAULT_EMBEDDED_BUFFER_POOL_BYTES
104
+ available = _available_memory_bytes()
105
+ if available is None:
106
+ return DEFAULT_EMBEDDED_BUFFER_POOL_BYTES
107
+ adaptive = max(MIN_DEFAULT_BUFFER_POOL_BYTES, available // 2)
108
+ return min(DEFAULT_EMBEDDED_BUFFER_POOL_BYTES, adaptive)
42
109
  try:
43
110
  mb = int(str(raw).strip())
44
111
  except ValueError:
@@ -160,9 +227,15 @@ class EmbeddedGraphManager(GraphQueryInterface):
160
227
  f"Initializing {spec.display_name} at {self.db_path} "
161
228
  f"(buffer_pool_size={pool_msg})"
162
229
  )
163
- self._db = backend.Database(
164
- self.db_path, buffer_pool_size=buffer_pool_size
165
- )
230
+ if buffer_pool_size == 0:
231
+ # 0 means "library default": omit the kwarg
232
+ # rather than trusting every backend to treat
233
+ # a literal 0 that way.
234
+ self._db = backend.Database(self.db_path)
235
+ else:
236
+ self._db = backend.Database(
237
+ self.db_path, buffer_pool_size=buffer_pool_size
238
+ )
166
239
 
167
240
  # Initialise connection pool
168
241
  self._pool = queue.Queue()
@@ -560,7 +633,15 @@ class EmbeddedGraphManager(GraphQueryInterface):
560
633
  # Without this call the process hangs on exit because the
561
634
  # embedded Kùzu engine keeps background threads alive.
562
635
  try:
563
- if not self._db.is_closed():
636
+ # kuzu exposes is_closed as a METHOD on some builds and a
637
+ # bool ATTRIBUTE on others (0.11.x). Calling the attribute
638
+ # raised "'bool' object is not callable" — which this
639
+ # except swallowed, so the close NEVER ran and the
640
+ # background threads it exists to stop stayed alive.
641
+ closed = self._db.is_closed
642
+ if callable(closed):
643
+ closed = closed()
644
+ if not closed:
564
645
  self._db.close()
565
646
  info_logger(f"{self.BACKEND_SPEC.display_name} database closed successfully")
566
647
  except Exception as e:
@@ -632,16 +713,19 @@ class EmbeddedDriverWrapper:
632
713
  compat_state = getattr(self, "_compat_state", None)
633
714
  pool = getattr(self, "_pool", None)
634
715
  display_name = getattr(self, "_display_name", "Embedded")
716
+ backend_id = getattr(self, "_backend_id", "embedded")
635
717
  if pool is not None:
636
718
  return EmbeddedSessionWrapper(
637
719
  pool, getattr(self, "_write_lock", None),
638
720
  compat_state=compat_state, display_name=display_name,
721
+ backend_id=backend_id,
639
722
  )
640
723
  else:
641
724
  db = getattr(self, "db", None) or getattr(self, "conn", None)
642
725
  write_lock = getattr(self, "_write_lock", None) or getattr(self, "_query_lock", None)
643
726
  return EmbeddedSessionWrapper(
644
727
  db, write_lock, compat_state=compat_state, display_name=display_name,
728
+ backend_id=backend_id,
645
729
  )
646
730
  def close(self):
647
731
  pass
@@ -651,10 +735,12 @@ class EmbeddedDriverWrapper:
651
735
 
652
736
 
653
737
  class EmbeddedSessionWrapper:
654
- def __init__(self, pool_or_conn, write_lock=None, compat_state=None, display_name: str = "Embedded"):
738
+ def __init__(self, pool_or_conn, write_lock=None, compat_state=None, display_name: str = "Embedded",
739
+ backend_id: str = "embedded"):
655
740
  self._write_lock = write_lock or threading.Lock()
656
741
  self._query_lock = self._write_lock
657
742
  self._display_name = display_name
743
+ self._backend_id = backend_id
658
744
  # Disabled-query-type state is shared via the manager's compat_state so
659
745
  # fail-fast disabling persists across sessions. A standalone session
660
746
  # (tests / legacy callers) gets its own private state.
@@ -667,7 +753,20 @@ class EmbeddedSessionWrapper:
667
753
  # Backward compatibility check: check if it's a pool or connection
668
754
  if hasattr(pool_or_conn, "get") and not hasattr(pool_or_conn, "execute"):
669
755
  self._pool = pool_or_conn
670
- self.conn = self._pool.get()
756
+ try:
757
+ # The embedded manager is a per-subclass singleton: switching
758
+ # db_path closes the old database and drains its pool. A caller
759
+ # holding a STALE driver reference then blocked here forever
760
+ # with no diagnostic. Fail loudly instead.
761
+ self.conn = self._pool.get(timeout=30)
762
+ except queue.Empty:
763
+ raise RuntimeError(
764
+ "No database connection available after 30s — this driver's "
765
+ "connection pool is exhausted or its database manager was "
766
+ "closed/switched to another path. Re-acquire the driver via "
767
+ "get_database_manager().get_driver() instead of holding a "
768
+ "stale reference."
769
+ )
671
770
  else:
672
771
  self._pool = None
673
772
  self.conn = pool_or_conn
@@ -877,6 +976,60 @@ class EmbeddedSessionWrapper:
877
976
  with self._write_lock:
878
977
  result = self.conn.execute(translated_query, translated_params)
879
978
 
979
+ # LadybugDB (0.19.x) state-dependently drops SOME rows of a
980
+ # batched relationship-only UNWIND MERGE — no error is raised,
981
+ # the MERGE just writes nothing for those rows (a 17-row
982
+ # Struct-CONTAINS batch wrote 12; #1710). Locally an immediate
983
+ # identical re-run bound the stragglers, but on CI the drop
984
+ # survives re-execution, so after the batched pass every row
985
+ # is replayed as a single-row batch through the SAME translated
986
+ # query. MERGE is idempotent, so the union is safe; only
987
+ # ladybug pays the cost. The generic per-row rewrite path is
988
+ # deliberately NOT used here — its query surgery loses ~51
989
+ # CONTAINS edges (the #1612 signature).
990
+ if (
991
+ getattr(self, "_backend_id", "") == "ladybugdb"
992
+ and "MERGE" in query
993
+ and ("-[" in query or "]->" in query)
994
+ and "RETURN" not in query.upper()
995
+ ):
996
+ _u = re.search(r"UNWIND\s+\$(\w+)\s+AS\s+\w+", translated_query)
997
+ _rows = _u and translated_params.get(_u.group(1))
998
+ if isinstance(_rows, list) and len(_rows) > 1:
999
+ # Best-effort only: the batched pass above already
1000
+ # wrote what it could, so a failing single must NEVER
1001
+ # propagate — the first singles attempt let one raise
1002
+ # and the escaping exception aborted the writer's
1003
+ # remaining batches, costing ~51 CONTAINS edges (the
1004
+ # union of idempotent MERGEs cannot otherwise shrink).
1005
+ _single_failures = 0
1006
+ _first_single_error = None
1007
+ for _row in _rows:
1008
+ single = dict(translated_params)
1009
+ single[_u.group(1)] = [_row]
1010
+ try:
1011
+ self.conn.execute(translated_query, single)
1012
+ except Exception as _se:
1013
+ _single_failures += 1
1014
+ if _first_single_error is None:
1015
+ _first_single_error = str(_se)[:160]
1016
+ if _single_failures:
1017
+ debug_log(
1018
+ f"Ladybug single-row replay: {_single_failures}/{len(_rows)} "
1019
+ f"rows errored (first: {_first_single_error}) — batched pass "
1020
+ f"result stands — query: {query[:90]}"
1021
+ )
1022
+ if os.environ.get("CGC_LBG_DIAG") and "helpers.go" in str(translated_params):
1023
+ try:
1024
+ _mq = re.sub(r"MERGE\s.*", "RETURN count(*)", translated_query, flags=re.S)
1025
+ _mr = self.conn.execute(_mq, translated_params)
1026
+ _matched = _mr.get_next()[0]
1027
+ import sys as _sys
1028
+ print(f"LBG_DIAG matched={_matched} batch={len(_rows)} q={translated_query[:110].strip()!r}", file=_sys.stderr, flush=True)
1029
+ except Exception as _de:
1030
+ import sys as _sys
1031
+ print(f"LBG_DIAG count-err {str(_de)[:120]}", file=_sys.stderr, flush=True)
1032
+
880
1033
  return EmbeddedResultWrapper(result)
881
1034
  except Exception as e:
882
1035
  if self._should_fail_fast(query_type, e):
@@ -923,6 +1076,8 @@ class EmbeddedSessionWrapper:
923
1076
  )
924
1077
 
925
1078
  last_result = None
1079
+ dropped = 0
1080
+ first_drop_error = None
926
1081
  for item in batch_data:
927
1082
  loop_params = parameters.copy()
928
1083
  loop_params.pop(batch_param, None)
@@ -935,8 +1090,34 @@ class EmbeddedSessionWrapper:
935
1090
  except Exception as nested_e:
936
1091
  nested_err_str = str(nested_e).lower()
937
1092
  if "binder" in nested_err_str or "cannot find a valid label" in nested_err_str:
1093
+ # Expected: label-pair probing legitimately
1094
+ # misses on schemaless shapes.
938
1095
  continue
939
- raise nested_e
1096
+ # Transient failure (lock contention, buffer
1097
+ # pressure): retry the ROW once before dropping
1098
+ # it — writes are MERGE-idempotent. Silent
1099
+ # drops here were LadybugDB's missing-edge
1100
+ # signature in the parity run (#1612).
1101
+ try:
1102
+ last_result = self.run(loop_query, **loop_params)
1103
+ except Exception as retry_e:
1104
+ dropped += 1
1105
+ if first_drop_error is None:
1106
+ first_drop_error = str(retry_e)[:160]
1107
+ if dropped:
1108
+ if dropped == len(batch_data) and dropped > 0:
1109
+ # Every row failing is systematic breakage, not
1110
+ # transient pressure — raise so the caller's
1111
+ # own retry/failure accounting still engages.
1112
+ raise RuntimeError(
1113
+ f"Per-row fallback failed for ALL {dropped} rows "
1114
+ f"(first error: {first_drop_error}) — query: {query[:90]}"
1115
+ )
1116
+ warning_logger(
1117
+ f"Per-row fallback dropped {dropped}/{len(batch_data)} "
1118
+ f"rows after retry (first error: {first_drop_error}) — "
1119
+ f"query: {query[:90]}"
1120
+ )
940
1121
  return last_result or EmbeddedResultWrapper(None)
941
1122
 
942
1123
 
@@ -1025,6 +1206,26 @@ class EmbeddedSessionWrapper:
1025
1206
  # b) MERGE uid injection from row fields (row.name, row.line_number, …)
1026
1207
  unwind_m = re.search(r'UNWIND\s+\$(\w+)\s+AS\s+(\w+)', query)
1027
1208
  if unwind_m:
1209
+ # 1.5-pre: Collapse consecutive MATCH clauses into one comma-joined
1210
+ # MATCH. LadybugDB's planner silently yields ZERO rows for
1211
+ # UNWIND → MATCH (a {…}) → MATCH (b {…}) when the first MATCH is an
1212
+ # index-map lookup (File-by-path being the everyday case): each
1213
+ # MATCH works alone, chained they produce nothing — no error is
1214
+ # raised, so downstream MERGEs quietly write no edges. That was the
1215
+ # exact signature of the parity gap (all File-sourced CALLS edges
1216
+ # and a handful of Struct CONTAINS edges missing on ladybug only).
1217
+ # The comma form `MATCH (a {…}), (b {…})` is semantically identical
1218
+ # for non-optional patterns and both engines plan it correctly.
1219
+ # Only simple node patterns (no relationship arrows, no parens
1220
+ # inside the pattern) directly adjacent to the next MATCH are
1221
+ # merged, and never across OPTIONAL MATCH.
1222
+ _match_merge_re = re.compile(
1223
+ r'(?<!OPTIONAL )\bMATCH\s*(\([^()]*\)(?:\s*,\s*\([^()]*\))*)\s+MATCH\s*(?=\()'
1224
+ )
1225
+ _prev = None
1226
+ while _prev != query:
1227
+ _prev = query
1228
+ query = _match_merge_re.sub(r'MATCH \1, ', query, count=1)
1028
1229
  batch_param = unwind_m.group(1)
1029
1230
  row_var = unwind_m.group(2)
1030
1231
  batch_data = parameters.get(batch_param)
@@ -803,6 +803,11 @@ class MCPServer:
803
803
  async def _run_loop(self, loop):
804
804
  request_count = 0
805
805
  while True:
806
+ # Reset per iteration: on a parse error `request` would otherwise
807
+ # still hold the PREVIOUS request, and the error response would
808
+ # reuse its id — a second response for an already-answered id,
809
+ # which desyncs clients that match responses by id.
810
+ request = None
806
811
  try:
807
812
  if request_count and request_count % 50 == 0:
808
813
  self.job_manager.cleanup_old_jobs(max_age_hours=24)
@@ -880,15 +885,19 @@ class MCPServer:
880
885
 
881
886
  except Exception as e:
882
887
  error_logger(f"Error processing request: {e}\n{traceback.format_exc()}")
883
- request_id = "unknown"
884
- if 'request' in locals() and isinstance(request, dict):
885
- request_id = request.get('id', "unknown")
888
+ # JSON-RPC: parse errors respond with id null and -32700;
889
+ # errors while handling a parsed request keep that request's id.
890
+ request_id = request.get('id') if isinstance(request, dict) else None
891
+ is_parse_error = not isinstance(request, dict)
886
892
 
887
893
  error_response = {
888
894
  "jsonrpc": "2.0", "id": request_id,
889
895
  "error": {
890
- "code": -32603,
891
- "message": f"Internal error: {str(e)}",
896
+ "code": -32700 if is_parse_error else -32603,
897
+ "message": (
898
+ f"Parse error: {str(e)}" if is_parse_error
899
+ else f"Internal error: {str(e)}"
900
+ ),
892
901
  },
893
902
  }
894
903
  print(json.dumps(error_response), flush=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codegraphcontext
3
- Version: 0.6.11
3
+ Version: 0.6.13
4
4
  Summary: An MCP server that indexes local code into a graph database to provide context to AI assistants.
5
5
  Author-email: Shashank Shekhar Singh <shashankshekharsingh1205@gmail.com>
6
6
  License: MIT License
@@ -61,7 +61,7 @@ Requires-Dist: falkordblite<0.10,>=0.7; sys_platform != "win32" and python_versi
61
61
  Requires-Dist: requests>=2.28.0
62
62
  Requires-Dist: protobuf<3.21,>=3.20
63
63
  Requires-Dist: kuzu; python_version < "3.14" or sys_platform == "linux"
64
- Requires-Dist: ladybug; sys_platform == "win32" or (sys_platform != "win32" and python_version >= "3.10")
64
+ Requires-Dist: ladybug<0.20,>=0.19; sys_platform == "win32" or (sys_platform != "win32" and python_version >= "3.10")
65
65
  Requires-Dist: mcp<2,>=1.0.0
66
66
  Requires-Dist: fastapi>=0.100.0
67
67
  Requires-Dist: uvicorn>=0.22.0
@@ -80,7 +80,7 @@ Requires-Dist: redis<6,>=5; extra == "falkordb-remote"
80
80
  Provides-Extra: kuzu
81
81
  Requires-Dist: kuzu; (python_version < "3.14" or sys_platform == "linux") and extra == "kuzu"
82
82
  Provides-Extra: ladybug
83
- Requires-Dist: ladybug; (sys_platform == "win32" or (sys_platform != "win32" and python_version >= "3.10")) and extra == "ladybug"
83
+ Requires-Dist: ladybug<0.20,>=0.19; (sys_platform == "win32" or (sys_platform != "win32" and python_version >= "3.10")) and extra == "ladybug"
84
84
  Provides-Extra: neo4j
85
85
  Requires-Dist: neo4j>=5.15.0; extra == "neo4j"
86
86
  Provides-Extra: gcf
@@ -28,7 +28,7 @@ kuzu
28
28
  falkordblite<0.10,>=0.7
29
29
 
30
30
  [:sys_platform == "win32" or (sys_platform != "win32" and python_version >= "3.10")]
31
- ladybug
31
+ ladybug<0.20,>=0.19
32
32
 
33
33
  [datasources]
34
34
  pymysql
@@ -64,7 +64,7 @@ kuzu
64
64
  [ladybug]
65
65
 
66
66
  [ladybug:sys_platform == "win32" or (sys_platform != "win32" and python_version >= "3.10")]
67
- ladybug
67
+ ladybug<0.20,>=0.19
68
68
 
69
69
  [neo4j]
70
70
  neo4j>=5.15.0