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.
- {codegraphcontext-0.6.11/src/codegraphcontext.egg-info → codegraphcontext-0.6.13}/PKG-INFO +3 -3
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/pyproject.toml +3 -3
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_embedded_kuzu.py +212 -11
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/server.py +14 -5
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13/src/codegraphcontext.egg-info}/PKG-INFO +3 -3
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext.egg-info/requires.txt +2 -2
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/LICENSE +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/MANIFEST.in +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/README.md +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/setup.cfg +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/__init__.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/__main__.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/api/__init__.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/api/app.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/api/auth.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/api/mcp_sse.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/api/router.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/api/schemas.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/__init__.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/cli_helpers.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/config_manager.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/hook_manager.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/main.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/project_config.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/registry_commands.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/setup_macos.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/setup_wizard.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/simulator.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/visualizer.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/__init__.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/bundle_registry.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/cgc_bundle.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/cgcignore.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_falkordb.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_falkordb_remote.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_kuzu.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_ladybug.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_nornic.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/falkor_worker.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/graph_query.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/jobs.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/simulator.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/watcher.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/prompts.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/stdlibs.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tool_definitions.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/__init__.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/advanced_language_query_tool.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/code_finder.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/datasources/__init__.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/datasources/cassandra_ingester.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/datasources/mysql_ingester.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/datasources/redis_ingester.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/graph_builder.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/handlers/analysis_handlers.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/handlers/indexing_handlers.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/handlers/management_handlers.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/handlers/query_handlers.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/handlers/watcher_handlers.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/__init__.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/constants.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/discovery.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/embeddings.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/persistence/__init__.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/persistence/utils.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/persistence/writer.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/pipeline.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/pre_scan.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/resolution/__init__.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/resolution/calls.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/resolution/inheritance.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/resolution/post_resolution.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/sanitize.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/schema.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/schema_contract.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/scip_pipeline.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/vector_resolver.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/c.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/cpp.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/csharp.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/css.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/dart.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/elisp.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/elixir.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/go.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/gradle.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/haskell.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/html.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/java.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/javascript.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/kotlin.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/lua.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/maven.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/mybatis.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/perl.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/php.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/python.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/ruby.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/rust.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/scala.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/sfc_common.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/solidity.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/solidity_remappings.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/svelte.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/swift.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/typescript.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/typescriptjsx.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/languages/vue.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/package_resolver.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/c_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/cpp_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/csharp_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/dart_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/elisp_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/go_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/haskell_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/java_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/javascript_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/perl_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/python_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/ruby_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/rust_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/scala_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/solidity_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/swift_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/query_tool_languages/typescript_toolkit.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/report_generator.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/scip_indexer.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/scip_pb2.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/system.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/tree_sitter_parser.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/type_utils.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/cypher_ddl.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/cypher_readonly.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/debug_log.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/gcf_encoder.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/git_utils.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/graph_shapes.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/path_ignore.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/path_sandbox.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/repo_path.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/secret_scanner.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/tool_limits.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/tree_sitter_manager.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/utils/visualize_graph.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/__vite-browser-external-9wXp6ZBx.js +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/function-calls-BtRHrqa2.png +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/graph-total-D1fBAugo.png +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/hero-graph-2voMJp2a.jpg +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/hierarchy-DGADo0YT.png +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/index-C-187lf0.js +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/index-fNAa6jgv.css +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/parser-pyodide.worker-BgsDfaad.js +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/parser.worker-_nvrecvj.js +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/assets/tree-sitter-qKYAACSa.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/cgcIcon.png +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/favicon.ico +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/index.html +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/logo-icon.svg +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/logo.svg +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/placeholder.svg +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/preview-image.png +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/robots.txt +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-c.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-c_sharp.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-core.js +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-cpp.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-dart.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-go.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-java.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-javascript.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-kotlin.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-perl.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-php.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-python.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-ruby.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-rust.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-swift.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-tsx.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter-typescript.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/tree-sitter.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/web-tree-sitter.js +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/dist/wasm/web-tree-sitter.wasm +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/viz/server.py +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext.egg-info/SOURCES.txt +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext.egg-info/dependency_links.txt +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext.egg-info/entry_points.txt +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext.egg-info/top_level.txt +0 -0
- {codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/tests/test_issue_806_fix.py +0 -0
- {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.
|
|
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.
|
|
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
|
|
36
|
-
default
|
|
37
|
-
|
|
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
|
-
|
|
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
|
-
|
|
164
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
884
|
-
|
|
885
|
-
|
|
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":
|
|
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.
|
|
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
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext.egg-info/requires.txt
RENAMED
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/config_manager.py
RENAMED
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/hook_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/project_config.py
RENAMED
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/registry_commands.py
RENAMED
|
File without changes
|
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/cli/setup_wizard.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/bundle_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_falkordb.py
RENAMED
|
File without changes
|
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_kuzu.py
RENAMED
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_ladybug.py
RENAMED
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/database_nornic.py
RENAMED
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/falkor_worker.py
RENAMED
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/core/graph_query.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tool_definitions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/code_finder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/graph_builder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/__init__.py
RENAMED
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/constants.py
RENAMED
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/discovery.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/pipeline.py
RENAMED
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/pre_scan.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/sanitize.py
RENAMED
|
File without changes
|
{codegraphcontext-0.6.11 → codegraphcontext-0.6.13}/src/codegraphcontext/tools/indexing/schema.py
RENAMED
|
File without changes
|
|
File without changes
|