graphmind 0.6.3__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.
- graphmind-0.6.3/.cargo/config.toml +6 -0
- graphmind-0.6.3/.dockerignore +13 -0
- graphmind-0.6.3/.env.example +2 -0
- graphmind-0.6.3/.github/workflows/ci.yml +53 -0
- graphmind-0.6.3/.github/workflows/deploy-docs.yml +54 -0
- graphmind-0.6.3/.github/workflows/publish-crate.yml +54 -0
- graphmind-0.6.3/.github/workflows/release.yml +157 -0
- graphmind-0.6.3/.gitignore +21 -0
- graphmind-0.6.3/CLAUDE.md +295 -0
- graphmind-0.6.3/CODEOWNERS +9 -0
- graphmind-0.6.3/Cargo.lock +4400 -0
- graphmind-0.6.3/Cargo.toml +150 -0
- graphmind-0.6.3/Dockerfile +60 -0
- graphmind-0.6.3/LICENSE +202 -0
- graphmind-0.6.3/PKG-INFO +14 -0
- graphmind-0.6.3/README.md +402 -0
- graphmind-0.6.3/ROADMAP.md +120 -0
- graphmind-0.6.3/api/openapi.yaml +732 -0
- graphmind-0.6.3/benches/bench_setup.rs +102 -0
- graphmind-0.6.3/benches/finbench_benchmark.rs +708 -0
- graphmind-0.6.3/benches/finbench_common/mod.rs +1666 -0
- graphmind-0.6.3/benches/full_benchmark.rs +464 -0
- graphmind-0.6.3/benches/graph_benchmarks.rs +199 -0
- graphmind-0.6.3/benches/graph_optimization_benchmark.rs +254 -0
- graphmind-0.6.3/benches/graphalytics_benchmark.rs +910 -0
- graphmind-0.6.3/benches/graphalytics_common/mod.rs +419 -0
- graphmind-0.6.3/benches/late_materialization_bench.rs +236 -0
- graphmind-0.6.3/benches/ldbc_benchmark.rs +763 -0
- graphmind-0.6.3/benches/ldbc_bi_benchmark.rs +694 -0
- graphmind-0.6.3/benches/ldbc_bi_common/mod.rs +35 -0
- graphmind-0.6.3/benches/ldbc_common/mod.rs +1078 -0
- graphmind-0.6.3/benches/mvcc_benchmark.rs +369 -0
- graphmind-0.6.3/benches/vector_benchmark.rs +399 -0
- graphmind-0.6.3/crates/graphmind-graph-algorithms/Cargo.toml +17 -0
- graphmind-0.6.3/crates/graphmind-graph-algorithms/README.md +27 -0
- graphmind-0.6.3/crates/graphmind-graph-algorithms/src/cdlp.rs +161 -0
- graphmind-0.6.3/crates/graphmind-graph-algorithms/src/common.rs +117 -0
- graphmind-0.6.3/crates/graphmind-graph-algorithms/src/community.rs +236 -0
- graphmind-0.6.3/crates/graphmind-graph-algorithms/src/flow.rs +183 -0
- graphmind-0.6.3/crates/graphmind-graph-algorithms/src/lcc.rs +275 -0
- graphmind-0.6.3/crates/graphmind-graph-algorithms/src/lib.rs +23 -0
- graphmind-0.6.3/crates/graphmind-graph-algorithms/src/mst.rs +191 -0
- graphmind-0.6.3/crates/graphmind-graph-algorithms/src/pagerank.rs +360 -0
- graphmind-0.6.3/crates/graphmind-graph-algorithms/src/pathfinding.rs +374 -0
- graphmind-0.6.3/crates/graphmind-graph-algorithms/src/pca.rs +1003 -0
- graphmind-0.6.3/crates/graphmind-graph-algorithms/src/topology.rs +88 -0
- graphmind-0.6.3/crates/graphmind-optimization/Cargo.toml +22 -0
- graphmind-0.6.3/crates/graphmind-optimization/README.md +35 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/abc.rs +163 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/bat.rs +118 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/bmr.rs +126 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/bwr.rs +110 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/cuckoo.rs +173 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/de.rs +118 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/firefly.rs +150 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/fpa.rs +134 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/ga.rs +141 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/gotlbo.rs +160 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/gsa.rs +122 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/gwo.rs +104 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/hs.rs +93 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/itlbo.rs +152 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/jaya.rs +97 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/mod.rs +45 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/motlbo.rs +252 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/nsga2.rs +265 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/pso.rs +133 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/qojaya.rs +155 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/rao.rs +145 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/sa.rs +83 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/algorithms/tlbo.rs +131 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/common.rs +136 -0
- graphmind-0.6.3/crates/graphmind-optimization/src/lib.rs +10 -0
- graphmind-0.6.3/crates/graphmind-optimization/tests/test_solvers.rs +601 -0
- graphmind-0.6.3/crates/graphmind-sdk/Cargo.toml +41 -0
- graphmind-0.6.3/crates/graphmind-sdk/README.md +71 -0
- graphmind-0.6.3/crates/graphmind-sdk/src/algo.rs +405 -0
- graphmind-0.6.3/crates/graphmind-sdk/src/client.rs +40 -0
- graphmind-0.6.3/crates/graphmind-sdk/src/embedded.rs +765 -0
- graphmind-0.6.3/crates/graphmind-sdk/src/error.rs +45 -0
- graphmind-0.6.3/crates/graphmind-sdk/src/lib.rs +137 -0
- graphmind-0.6.3/crates/graphmind-sdk/src/models.rs +79 -0
- graphmind-0.6.3/crates/graphmind-sdk/src/remote.rs +141 -0
- graphmind-0.6.3/crates/graphmind-sdk/src/vector_ext.rs +139 -0
- graphmind-0.6.3/deny.toml +32 -0
- graphmind-0.6.3/dist/config.toml +39 -0
- graphmind-0.6.3/dist/graphmind.service +30 -0
- graphmind-0.6.3/dist/install.sh +53 -0
- graphmind-0.6.3/docs/ACID_GUARANTEES.md +67 -0
- graphmind-0.6.3/docs/ADR/ADR-001-use-rust-as-primary-language.md +277 -0
- graphmind-0.6.3/docs/ADR/ADR-002-use-rocksdb-for-persistence.md +412 -0
- graphmind-0.6.3/docs/ADR/ADR-003-use-resp-protocol.md +469 -0
- graphmind-0.6.3/docs/ADR/ADR-004-use-raft-consensus.md +561 -0
- graphmind-0.6.3/docs/ADR/ADR-005-use-capnproto-serialization.md +517 -0
- graphmind-0.6.3/docs/ADR/ADR-006-use-tokio-async-runtime.md +86 -0
- graphmind-0.6.3/docs/ADR/ADR-007-volcano-iterator-execution.md +104 -0
- graphmind-0.6.3/docs/ADR/ADR-008-multi-tenancy-namespace-isolation.md +133 -0
- graphmind-0.6.3/docs/ADR/ADR-009-graph-partitioning-strategy.md +169 -0
- graphmind-0.6.3/docs/ADR/ADR-010-observability-stack.md +199 -0
- graphmind-0.6.3/docs/ADR/ADR-011-cypher-crud-operations.md +206 -0
- graphmind-0.6.3/docs/ADR/ADR-012-late-materialization.md +153 -0
- graphmind-0.6.3/docs/ADR/ADR-013-peg-grammar-atomic-keywords.md +176 -0
- graphmind-0.6.3/docs/ADR/ADR-014-explain-profile-queries.md +239 -0
- graphmind-0.6.3/docs/ADR/ADR-015-graph-native-query-planning.md +186 -0
- graphmind-0.6.3/docs/ADR/README.md +63 -0
- graphmind-0.6.3/docs/ARCHITECTURE.md +1355 -0
- graphmind-0.6.3/docs/CYPHER_COMPATIBILITY.md +88 -0
- graphmind-0.6.3/docs/GLOSSARY.md +93 -0
- graphmind-0.6.3/docs/README.md +49 -0
- graphmind-0.6.3/docs/REQUIREMENTS.md +311 -0
- graphmind-0.6.3/docs/SDK_API_CLI_ARCHITECTURE.md +341 -0
- graphmind-0.6.3/docs/SUPPLY_CHAIN_GUARDIAN_DEMO.md +98 -0
- graphmind-0.6.3/docs/TECHNOLOGY_COMPARISONS.md +768 -0
- graphmind-0.6.3/docs/TECH_STACK.md +1130 -0
- graphmind-0.6.3/docs/archive/AGENCY_ENRICHMENT_PROPOSAL.md +59 -0
- graphmind-0.6.3/docs/archive/ARCHITECTURE_ROADMAP.md +67 -0
- graphmind-0.6.3/docs/archive/GNN_PROPOSAL.md +47 -0
- graphmind-0.6.3/docs/archive/PERFORMANCE_ROADMAP.md +67 -0
- graphmind-0.6.3/docs/archive/PROGRESS.md +45 -0
- graphmind-0.6.3/docs/ldbc/FINBENCH.md +160 -0
- graphmind-0.6.3/docs/ldbc/GRAPHALYTICS.md +231 -0
- graphmind-0.6.3/docs/ldbc/README.md +67 -0
- graphmind-0.6.3/docs/ldbc/SNB_BI.md +110 -0
- graphmind-0.6.3/docs/ldbc/SNB_INTERACTIVE.md +149 -0
- graphmind-0.6.3/docs/optimization/CASE_STUDY_HEALTHCARE.md +34 -0
- graphmind-0.6.3/docs/optimization/pypi_publish_workflow.yml +56 -0
- graphmind-0.6.3/docs/performance/BENCHMARKS.md +94 -0
- graphmind-0.6.3/docs/performance/BENCHMARK_COMPARISON.md +51 -0
- graphmind-0.6.3/docs/performance/BENCHMARK_RESULTS_v0.5.0.md +73 -0
- graphmind-0.6.3/docs/product/README.md +316 -0
- graphmind-0.6.3/docs/product/personas.csv +13 -0
- graphmind-0.6.3/docs/product/testcases.csv +45 -0
- graphmind-0.6.3/docs/product/traceability_matrix.csv +111 -0
- graphmind-0.6.3/docs/product/usecases.csv +30 -0
- graphmind-0.6.3/docs/product/workflows.csv +18 -0
- graphmind-0.6.3/docs/test-results/COMPREHENSIVE_TEST_REPORT.md +851 -0
- graphmind-0.6.3/docs/test-results/PHASE2_RESP_TESTS.md +190 -0
- graphmind-0.6.3/docs/test-results/README.md +217 -0
- graphmind-0.6.3/docs-site/.gitignore +3 -0
- graphmind-0.6.3/docs-site/README.md +41 -0
- graphmind-0.6.3/docs-site/docs/admin/authentication.md +117 -0
- graphmind-0.6.3/docs-site/docs/admin/backup-restore.md +112 -0
- graphmind-0.6.3/docs-site/docs/admin/monitoring.md +143 -0
- graphmind-0.6.3/docs-site/docs/admin/multi-tenancy.md +150 -0
- graphmind-0.6.3/docs-site/docs/adr/001-rust.md +103 -0
- graphmind-0.6.3/docs-site/docs/adr/002-rocksdb.md +95 -0
- graphmind-0.6.3/docs-site/docs/adr/003-resp.md +87 -0
- graphmind-0.6.3/docs-site/docs/adr/004-raft.md +87 -0
- graphmind-0.6.3/docs-site/docs/adr/005-capnproto.md +86 -0
- graphmind-0.6.3/docs-site/docs/adr/006-tokio.md +56 -0
- graphmind-0.6.3/docs-site/docs/adr/007-volcano.md +65 -0
- graphmind-0.6.3/docs-site/docs/adr/008-multi-tenancy.md +64 -0
- graphmind-0.6.3/docs-site/docs/adr/009-partitioning.md +68 -0
- graphmind-0.6.3/docs-site/docs/adr/010-observability.md +65 -0
- graphmind-0.6.3/docs-site/docs/adr/011-cypher-crud.md +80 -0
- graphmind-0.6.3/docs-site/docs/adr/012-late-materialization.md +79 -0
- graphmind-0.6.3/docs-site/docs/adr/013-peg-grammar.md +71 -0
- graphmind-0.6.3/docs-site/docs/adr/014-explain-profile.md +88 -0
- graphmind-0.6.3/docs-site/docs/adr/015-graph-native-planner.md +106 -0
- graphmind-0.6.3/docs-site/docs/adr/_category_.json +6 -0
- graphmind-0.6.3/docs-site/docs/advanced/algorithms.md +185 -0
- graphmind-0.6.3/docs-site/docs/advanced/architecture.md +181 -0
- graphmind-0.6.3/docs-site/docs/advanced/nlq.md +119 -0
- graphmind-0.6.3/docs-site/docs/advanced/vector-search.md +142 -0
- graphmind-0.6.3/docs-site/docs/cypher/aggregations.md +162 -0
- graphmind-0.6.3/docs-site/docs/cypher/basics.md +196 -0
- graphmind-0.6.3/docs-site/docs/cypher/crud.md +217 -0
- graphmind-0.6.3/docs-site/docs/cypher/functions.md +143 -0
- graphmind-0.6.3/docs-site/docs/cypher/patterns.md +190 -0
- graphmind-0.6.3/docs-site/docs/getting-started.md +107 -0
- graphmind-0.6.3/docs-site/docs/glossary.md +81 -0
- graphmind-0.6.3/docs-site/docs/installation/binary.md +101 -0
- graphmind-0.6.3/docs-site/docs/installation/configuration.md +130 -0
- graphmind-0.6.3/docs-site/docs/installation/docker.md +133 -0
- graphmind-0.6.3/docs-site/docs/installation/source.md +131 -0
- graphmind-0.6.3/docs-site/docs/ldbc/_category_.json +6 -0
- graphmind-0.6.3/docs-site/docs/ldbc/finbench.md +125 -0
- graphmind-0.6.3/docs-site/docs/ldbc/graphalytics.md +110 -0
- graphmind-0.6.3/docs-site/docs/ldbc/index.md +66 -0
- graphmind-0.6.3/docs-site/docs/ldbc/snb-bi.md +73 -0
- graphmind-0.6.3/docs-site/docs/ldbc/snb-interactive.md +97 -0
- graphmind-0.6.3/docs-site/docs/performance/_category_.json +6 -0
- graphmind-0.6.3/docs-site/docs/performance/benchmarks.md +98 -0
- graphmind-0.6.3/docs-site/docs/performance/comparison.md +50 -0
- graphmind-0.6.3/docs-site/docs/sdks/_category_.json +5 -0
- graphmind-0.6.3/docs-site/docs/sdks/index.md +81 -0
- graphmind-0.6.3/docs-site/docs/sdks/python.md +395 -0
- graphmind-0.6.3/docs-site/docs/sdks/resp-protocol.md +282 -0
- graphmind-0.6.3/docs-site/docs/sdks/rest-api.md +412 -0
- graphmind-0.6.3/docs-site/docs/sdks/rust.md +385 -0
- graphmind-0.6.3/docs-site/docs/sdks/typescript.md +385 -0
- graphmind-0.6.3/docs-site/docs/visualizer/features.md +178 -0
- graphmind-0.6.3/docs-site/docs/visualizer/index.md +77 -0
- graphmind-0.6.3/docs-site/docusaurus.config.ts +144 -0
- graphmind-0.6.3/docs-site/package-lock.json +19710 -0
- graphmind-0.6.3/docs-site/package.json +48 -0
- graphmind-0.6.3/docs-site/sidebars.ts +64 -0
- graphmind-0.6.3/docs-site/src/css/custom.css +48 -0
- graphmind-0.6.3/docs-site/src/pages/index.module.css +426 -0
- graphmind-0.6.3/docs-site/src/pages/index.tsx +358 -0
- graphmind-0.6.3/docs-site/static/.nojekyll +0 -0
- graphmind-0.6.3/docs-site/static/img/favicon.ico +0 -0
- graphmind-0.6.3/docs-site/static/img/logo.svg +10 -0
- graphmind-0.6.3/docs-site/tsconfig.json +8 -0
- graphmind-0.6.3/examples/aact_common/mod.rs +1589 -0
- graphmind-0.6.3/examples/aact_loader.rs +167 -0
- graphmind-0.6.3/examples/agentic_enrichment_demo.rs +371 -0
- graphmind-0.6.3/examples/banking_demo.rs +2262 -0
- graphmind-0.6.3/examples/clinical_trials_demo.rs +2224 -0
- graphmind-0.6.3/examples/cluster_demo.rs +444 -0
- graphmind-0.6.3/examples/cricket_common/mod.rs +875 -0
- graphmind-0.6.3/examples/cricket_loader.rs +163 -0
- graphmind-0.6.3/examples/druginteractions_common/mod.rs +529 -0
- graphmind-0.6.3/examples/druginteractions_loader.rs +164 -0
- graphmind-0.6.3/examples/enterprise_soc_demo.rs +2139 -0
- graphmind-0.6.3/examples/finbench_common/mod.rs +1667 -0
- graphmind-0.6.3/examples/finbench_loader.rs +138 -0
- graphmind-0.6.3/examples/industrial_kg_demo.rs +1307 -0
- graphmind-0.6.3/examples/knowledge_graph_demo.rs +1653 -0
- graphmind-0.6.3/examples/ldbc_common/mod.rs +1078 -0
- graphmind-0.6.3/examples/ldbc_loader.rs +119 -0
- graphmind-0.6.3/examples/pathways_common/mod.rs +1231 -0
- graphmind-0.6.3/examples/pathways_loader.rs +179 -0
- graphmind-0.6.3/examples/pca_demo.rs +629 -0
- graphmind-0.6.3/examples/sdk_demo.rs +252 -0
- graphmind-0.6.3/examples/simple_client_demo.py +248 -0
- graphmind-0.6.3/examples/smart_manufacturing_demo.rs +1075 -0
- graphmind-0.6.3/examples/social_network_demo.rs +913 -0
- graphmind-0.6.3/examples/supply_chain_demo.rs +2515 -0
- graphmind-0.6.3/examples/surveillance_common/mod.rs +418 -0
- graphmind-0.6.3/examples/surveillance_loader.rs +130 -0
- graphmind-0.6.3/graphmind_mcp/__init__.py +8 -0
- graphmind-0.6.3/graphmind_mcp/__main__.py +5 -0
- graphmind-0.6.3/graphmind_mcp/cli.py +172 -0
- graphmind-0.6.3/graphmind_mcp/config.py +58 -0
- graphmind-0.6.3/graphmind_mcp/escape.py +53 -0
- graphmind-0.6.3/graphmind_mcp/generators/__init__.py +15 -0
- graphmind-0.6.3/graphmind_mcp/generators/algorithm_tools.py +169 -0
- graphmind-0.6.3/graphmind_mcp/generators/base.py +36 -0
- graphmind-0.6.3/graphmind_mcp/generators/edge_tools.py +144 -0
- graphmind-0.6.3/graphmind_mcp/generators/generic_tools.py +50 -0
- graphmind-0.6.3/graphmind_mcp/generators/node_tools.py +155 -0
- graphmind-0.6.3/graphmind_mcp/generators/vector_tools.py +72 -0
- graphmind-0.6.3/graphmind_mcp/schema.py +259 -0
- graphmind-0.6.3/graphmind_mcp/server.py +193 -0
- graphmind-0.6.3/ldbc-benchmark-results.png +0 -0
- graphmind-0.6.3/pyproject.toml +30 -0
- graphmind-0.6.3/scripts/README.md +141 -0
- graphmind-0.6.3/scripts/coverage.sh +77 -0
- graphmind-0.6.3/scripts/distributed_test.sh +56 -0
- graphmind-0.6.3/scripts/download_finbench.sh +338 -0
- graphmind-0.6.3/scripts/download_graphalytics.sh +234 -0
- graphmind-0.6.3/scripts/download_snapshot.py +109 -0
- graphmind-0.6.3/scripts/enrich_clinical_trials.py +332 -0
- graphmind-0.6.3/scripts/run_all_examples.sh +310 -0
- graphmind-0.6.3/scripts/social_network_demo.cypher +322 -0
- graphmind-0.6.3/scripts/upload_snapshot.py +123 -0
- graphmind-0.6.3/sdk/python/.gitignore +6 -0
- graphmind-0.6.3/sdk/python/Cargo.lock +4265 -0
- graphmind-0.6.3/sdk/python/Cargo.toml +20 -0
- graphmind-0.6.3/sdk/python/README.md +79 -0
- graphmind-0.6.3/sdk/python/src/lib.rs +563 -0
- graphmind-0.6.3/sdk/python/tests/test_embedded.py +59 -0
- graphmind-0.6.3/sdk/python/tests/test_mcp_escape.py +141 -0
- graphmind-0.6.3/sdk/python/tests/test_mcp_generators.py +391 -0
- graphmind-0.6.3/sdk/python/tests/test_mcp_schema.py +201 -0
- graphmind-0.6.3/sdk/python/tests/test_mcp_server.py +217 -0
- graphmind-0.6.3/sdk/python/tests/test_vector.py +38 -0
- graphmind-0.6.3/sdk/typescript/.gitignore +5 -0
- graphmind-0.6.3/sdk/typescript/README.md +73 -0
- graphmind-0.6.3/sdk/typescript/package-lock.json +48 -0
- graphmind-0.6.3/sdk/typescript/package.json +34 -0
- graphmind-0.6.3/sdk/typescript/src/client.ts +191 -0
- graphmind-0.6.3/sdk/typescript/src/http-client.ts +137 -0
- graphmind-0.6.3/sdk/typescript/src/index.ts +17 -0
- graphmind-0.6.3/sdk/typescript/src/types.ts +143 -0
- graphmind-0.6.3/sdk/typescript/tests/client.test.ts +118 -0
- graphmind-0.6.3/sdk/typescript/tsconfig.json +20 -0
- graphmind-0.6.3/src/agent/mod.rs +136 -0
- graphmind-0.6.3/src/agent/tools.rs +107 -0
- graphmind-0.6.3/src/algo/mod.rs +134 -0
- graphmind-0.6.3/src/audit.rs +121 -0
- graphmind-0.6.3/src/auth.rs +112 -0
- graphmind-0.6.3/src/embed/client.rs +697 -0
- graphmind-0.6.3/src/embed/mod.rs +180 -0
- graphmind-0.6.3/src/graph/catalog.rs +923 -0
- graphmind-0.6.3/src/graph/edge.rs +297 -0
- graphmind-0.6.3/src/graph/event.rs +36 -0
- graphmind-0.6.3/src/graph/mod.rs +72 -0
- graphmind-0.6.3/src/graph/node.rs +332 -0
- graphmind-0.6.3/src/graph/property.rs +1327 -0
- graphmind-0.6.3/src/graph/storage/columnar.rs +131 -0
- graphmind-0.6.3/src/graph/storage/mod.rs +3 -0
- graphmind-0.6.3/src/graph/store.rs +3376 -0
- graphmind-0.6.3/src/graph/types.rs +200 -0
- graphmind-0.6.3/src/http/handler.rs +1506 -0
- graphmind-0.6.3/src/http/mod.rs +6 -0
- graphmind-0.6.3/src/http/server.rs +400 -0
- graphmind-0.6.3/src/http/static/assets/index-DRQhgRiT.js +33 -0
- graphmind-0.6.3/src/http/static/assets/index-DpPSVizJ.css +2 -0
- graphmind-0.6.3/src/http/static/favicon.svg +1 -0
- graphmind-0.6.3/src/http/static/icons.svg +24 -0
- graphmind-0.6.3/src/http/static/index.html +14 -0
- graphmind-0.6.3/src/index/manager.rs +640 -0
- graphmind-0.6.3/src/index/mod.rs +9 -0
- graphmind-0.6.3/src/index/property_index.rs +108 -0
- graphmind-0.6.3/src/lib.rs +236 -0
- graphmind-0.6.3/src/main.rs +818 -0
- graphmind-0.6.3/src/metrics.rs +53 -0
- graphmind-0.6.3/src/nlq/client.rs +616 -0
- graphmind-0.6.3/src/nlq/mod.rs +390 -0
- graphmind-0.6.3/src/persistence/mod.rs +550 -0
- graphmind-0.6.3/src/persistence/storage.rs +755 -0
- graphmind-0.6.3/src/persistence/tenant.rs +1655 -0
- graphmind-0.6.3/src/persistence/wal.rs +471 -0
- graphmind-0.6.3/src/protocol/command.rs +1031 -0
- graphmind-0.6.3/src/protocol/mod.rs +57 -0
- graphmind-0.6.3/src/protocol/resp.rs +1180 -0
- graphmind-0.6.3/src/protocol/server.rs +788 -0
- graphmind-0.6.3/src/query/ast.rs +688 -0
- graphmind-0.6.3/src/query/cypher.pest +196 -0
- graphmind-0.6.3/src/query/executor/cost_model.rs +358 -0
- graphmind-0.6.3/src/query/executor/logical_optimizer.rs +510 -0
- graphmind-0.6.3/src/query/executor/logical_plan.rs +457 -0
- graphmind-0.6.3/src/query/executor/mod.rs +8558 -0
- graphmind-0.6.3/src/query/executor/operator.rs +11031 -0
- graphmind-0.6.3/src/query/executor/physical_planner.rs +255 -0
- graphmind-0.6.3/src/query/executor/plan_enumerator.rs +676 -0
- graphmind-0.6.3/src/query/executor/planner.rs +3586 -0
- graphmind-0.6.3/src/query/executor/record.rs +913 -0
- graphmind-0.6.3/src/query/mod.rs +614 -0
- graphmind-0.6.3/src/query/parser.rs +3899 -0
- graphmind-0.6.3/src/raft/cluster.rs +719 -0
- graphmind-0.6.3/src/raft/mod.rs +107 -0
- graphmind-0.6.3/src/raft/network.rs +549 -0
- graphmind-0.6.3/src/raft/node.rs +450 -0
- graphmind-0.6.3/src/raft/state_machine.rs +670 -0
- graphmind-0.6.3/src/raft/storage.rs +246 -0
- graphmind-0.6.3/src/rbac.rs +107 -0
- graphmind-0.6.3/src/rdf/mapping.rs +159 -0
- graphmind-0.6.3/src/rdf/mod.rs +74 -0
- graphmind-0.6.3/src/rdf/namespace.rs +169 -0
- graphmind-0.6.3/src/rdf/schema.rs +119 -0
- graphmind-0.6.3/src/rdf/serialization/jsonld.rs +112 -0
- graphmind-0.6.3/src/rdf/serialization/mod.rs +217 -0
- graphmind-0.6.3/src/rdf/serialization/ntriples.rs +636 -0
- graphmind-0.6.3/src/rdf/serialization/rdfxml.rs +401 -0
- graphmind-0.6.3/src/rdf/serialization/turtle.rs +205 -0
- graphmind-0.6.3/src/rdf/store.rs +934 -0
- graphmind-0.6.3/src/rdf/types.rs +1323 -0
- graphmind-0.6.3/src/sharding/mod.rs +9 -0
- graphmind-0.6.3/src/sharding/proxy.rs +73 -0
- graphmind-0.6.3/src/sharding/router.rs +112 -0
- graphmind-0.6.3/src/snapshot/format.rs +61 -0
- graphmind-0.6.3/src/snapshot/mod.rs +787 -0
- graphmind-0.6.3/src/sparql/algebra.rs +18 -0
- graphmind-0.6.3/src/sparql/executor.rs +102 -0
- graphmind-0.6.3/src/sparql/http.rs +43 -0
- graphmind-0.6.3/src/sparql/mod.rs +128 -0
- graphmind-0.6.3/src/sparql/optimizer.rs +48 -0
- graphmind-0.6.3/src/sparql/parser.rs +47 -0
- graphmind-0.6.3/src/sparql/results.rs +148 -0
- graphmind-0.6.3/src/tenant_store.rs +186 -0
- graphmind-0.6.3/src/vector/index.rs +336 -0
- graphmind-0.6.3/src/vector/manager.rs +172 -0
- graphmind-0.6.3/src/vector/mod.rs +52 -0
- graphmind-0.6.3/tests/advanced_aggregations.rs +122 -0
- graphmind-0.6.3/tests/advanced_cypher.rs +163 -0
- graphmind-0.6.3/tests/ai_features_test.rs +52 -0
- graphmind-0.6.3/tests/algo_integration_test.rs +110 -0
- graphmind-0.6.3/tests/algo_test.rs +98 -0
- graphmind-0.6.3/tests/comprehensive_test.rs +320 -0
- graphmind-0.6.3/tests/cypher_crud_test.rs +837 -0
- graphmind-0.6.3/tests/distributed_client.py +49 -0
- graphmind-0.6.3/tests/index_test.rs +81 -0
- graphmind-0.6.3/tests/integration/README.md +235 -0
- graphmind-0.6.3/tests/integration/test_resp_basic.py +107 -0
- graphmind-0.6.3/tests/integration/test_resp_visual.py +122 -0
- graphmind-0.6.3/tests/multi_objective_test.rs +81 -0
- graphmind-0.6.3/tests/mvcc_test.rs +71 -0
- graphmind-0.6.3/tests/optimization_test.rs +98 -0
- graphmind-0.6.3/tests/sharding_test.rs +118 -0
- graphmind-0.6.3/tests/target_node_filter_test.rs +667 -0
- graphmind-0.6.3/tests/v060_features_test.rs +700 -0
- graphmind-0.6.3/tests/vector_query_test.rs +179 -0
- graphmind-0.6.3/tests/vector_search_test.rs +90 -0
- graphmind-0.6.3/ui/.agents/skills/shadcn/SKILL.md +242 -0
- graphmind-0.6.3/ui/.agents/skills/shadcn/agents/openai.yml +5 -0
- graphmind-0.6.3/ui/.agents/skills/shadcn/assets/shadcn-small.png +0 -0
- graphmind-0.6.3/ui/.agents/skills/shadcn/assets/shadcn.png +0 -0
- graphmind-0.6.3/ui/.agents/skills/shadcn/cli.md +257 -0
- graphmind-0.6.3/ui/.agents/skills/shadcn/customization.md +202 -0
- graphmind-0.6.3/ui/.agents/skills/shadcn/evals/evals.json +47 -0
- graphmind-0.6.3/ui/.agents/skills/shadcn/mcp.md +94 -0
- graphmind-0.6.3/ui/.agents/skills/shadcn/rules/base-vs-radix.md +306 -0
- graphmind-0.6.3/ui/.agents/skills/shadcn/rules/composition.md +195 -0
- graphmind-0.6.3/ui/.agents/skills/shadcn/rules/forms.md +192 -0
- graphmind-0.6.3/ui/.agents/skills/shadcn/rules/icons.md +101 -0
- graphmind-0.6.3/ui/.agents/skills/shadcn/rules/styling.md +162 -0
- graphmind-0.6.3/ui/.gitignore +2 -0
- graphmind-0.6.3/ui/README.md +73 -0
- graphmind-0.6.3/ui/components.json +25 -0
- graphmind-0.6.3/ui/eslint.config.js +23 -0
- graphmind-0.6.3/ui/index.html +13 -0
- graphmind-0.6.3/ui/package-lock.json +8135 -0
- graphmind-0.6.3/ui/package.json +55 -0
- graphmind-0.6.3/ui/public/favicon.svg +1 -0
- graphmind-0.6.3/ui/public/icons.svg +24 -0
- graphmind-0.6.3/ui/skills-lock.json +10 -0
- graphmind-0.6.3/ui/src/App.tsx +106 -0
- graphmind-0.6.3/ui/src/api/client.ts +147 -0
- graphmind-0.6.3/ui/src/components/editor/CypherEditor.tsx +371 -0
- graphmind-0.6.3/ui/src/components/editor/SavedQueries.tsx +158 -0
- graphmind-0.6.3/ui/src/components/graph/ForceGraph.tsx +1688 -0
- graphmind-0.6.3/ui/src/components/graph/FullscreenExplorer.tsx +758 -0
- graphmind-0.6.3/ui/src/components/graph/GraphStats.tsx +249 -0
- graphmind-0.6.3/ui/src/components/graph/GraphToolbar.tsx +235 -0
- graphmind-0.6.3/ui/src/components/graph/KeyboardShortcutsHelp.tsx +96 -0
- graphmind-0.6.3/ui/src/components/inspector/PropertyInspector.tsx +170 -0
- graphmind-0.6.3/ui/src/components/inspector/RightPanel.tsx +35 -0
- graphmind-0.6.3/ui/src/components/inspector/SchemaBrowser.tsx +416 -0
- graphmind-0.6.3/ui/src/components/layout/AppShell.tsx +64 -0
- graphmind-0.6.3/ui/src/components/layout/LeftPanel.tsx +422 -0
- graphmind-0.6.3/ui/src/components/layout/Navbar.tsx +182 -0
- graphmind-0.6.3/ui/src/components/results/BottomPanel.tsx +33 -0
- graphmind-0.6.3/ui/src/components/results/ResultsTable.tsx +137 -0
- graphmind-0.6.3/ui/src/components/theme-provider.tsx +68 -0
- graphmind-0.6.3/ui/src/components/ui/badge.tsx +25 -0
- graphmind-0.6.3/ui/src/components/ui/button.tsx +39 -0
- graphmind-0.6.3/ui/src/components/ui/graph-selector.tsx +132 -0
- graphmind-0.6.3/ui/src/components/ui/icon-picker.tsx +175 -0
- graphmind-0.6.3/ui/src/components/ui/resizable.tsx +48 -0
- graphmind-0.6.3/ui/src/components/ui/tabs.tsx +40 -0
- graphmind-0.6.3/ui/src/components/ui/theme-toggle.tsx +33 -0
- graphmind-0.6.3/ui/src/index.css +194 -0
- graphmind-0.6.3/ui/src/lib/colors.ts +140 -0
- graphmind-0.6.3/ui/src/lib/cypher.ts +120 -0
- graphmind-0.6.3/ui/src/lib/icons.ts +126 -0
- graphmind-0.6.3/ui/src/lib/shortcuts.ts +84 -0
- graphmind-0.6.3/ui/src/lib/utils.ts +6 -0
- graphmind-0.6.3/ui/src/main.tsx +10 -0
- graphmind-0.6.3/ui/src/stores/graphSettingsStore.ts +122 -0
- graphmind-0.6.3/ui/src/stores/graphStore.ts +108 -0
- graphmind-0.6.3/ui/src/stores/queryStore.ts +148 -0
- graphmind-0.6.3/ui/src/stores/uiStore.ts +55 -0
- graphmind-0.6.3/ui/src/types/api.ts +65 -0
- graphmind-0.6.3/ui/tsconfig.app.json +32 -0
- graphmind-0.6.3/ui/tsconfig.json +13 -0
- graphmind-0.6.3/ui/tsconfig.node.json +26 -0
- graphmind-0.6.3/ui/vite.config.ts +26 -0
- graphmind-0.6.3/visualization.svg +1 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Workaround for GCC 13+ requiring explicit <cstdint> includes.
|
|
2
|
+
# The bundled librocksdb-sys 0.16 headers lack this include.
|
|
3
|
+
# Remove this once rocksdb is upgraded to a version with the fix
|
|
4
|
+
# and libclang-dev is available for bindgen.
|
|
5
|
+
[env]
|
|
6
|
+
CXXFLAGS = "-include cstdint"
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
env:
|
|
10
|
+
CARGO_TERM_COLOR: always
|
|
11
|
+
CXXFLAGS: "-include cstdint"
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
test:
|
|
15
|
+
name: Test (${{ matrix.os }})
|
|
16
|
+
runs-on: ${{ matrix.os }}
|
|
17
|
+
strategy:
|
|
18
|
+
matrix:
|
|
19
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
23
|
+
- uses: Swatinem/rust-cache@v2
|
|
24
|
+
- name: Build
|
|
25
|
+
run: cargo build --verbose
|
|
26
|
+
- name: Run tests
|
|
27
|
+
run: cargo test --verbose
|
|
28
|
+
|
|
29
|
+
lint:
|
|
30
|
+
name: Lint
|
|
31
|
+
runs-on: ubuntu-latest
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/checkout@v4
|
|
34
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
35
|
+
with:
|
|
36
|
+
components: clippy, rustfmt
|
|
37
|
+
- uses: Swatinem/rust-cache@v2
|
|
38
|
+
- name: Check formatting
|
|
39
|
+
run: cargo fmt -- --check
|
|
40
|
+
- name: Clippy
|
|
41
|
+
run: cargo clippy -- -D warnings
|
|
42
|
+
|
|
43
|
+
ui:
|
|
44
|
+
name: UI Build
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/checkout@v4
|
|
48
|
+
- uses: actions/setup-node@v4
|
|
49
|
+
with:
|
|
50
|
+
node-version: 20
|
|
51
|
+
cache: npm
|
|
52
|
+
cache-dependency-path: ui/package-lock.json
|
|
53
|
+
- run: cd ui && npm ci && npm run build
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: Deploy Documentation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- 'docs-site/**'
|
|
8
|
+
- 'docs/**'
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
pages: write
|
|
14
|
+
id-token: write
|
|
15
|
+
|
|
16
|
+
concurrency:
|
|
17
|
+
group: "pages"
|
|
18
|
+
cancel-in-progress: false
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
build:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- uses: actions/setup-node@v4
|
|
27
|
+
with:
|
|
28
|
+
node-version: 20
|
|
29
|
+
cache: npm
|
|
30
|
+
cache-dependency-path: docs-site/package-lock.json
|
|
31
|
+
|
|
32
|
+
- name: Install dependencies
|
|
33
|
+
working-directory: docs-site
|
|
34
|
+
run: npm ci
|
|
35
|
+
|
|
36
|
+
- name: Build docs
|
|
37
|
+
working-directory: docs-site
|
|
38
|
+
run: npm run build
|
|
39
|
+
|
|
40
|
+
- name: Upload artifact
|
|
41
|
+
uses: actions/upload-pages-artifact@v3
|
|
42
|
+
with:
|
|
43
|
+
path: docs-site/build
|
|
44
|
+
|
|
45
|
+
deploy:
|
|
46
|
+
environment:
|
|
47
|
+
name: github-pages
|
|
48
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
49
|
+
runs-on: ubuntu-latest
|
|
50
|
+
needs: build
|
|
51
|
+
steps:
|
|
52
|
+
- name: Deploy to GitHub Pages
|
|
53
|
+
id: deployment
|
|
54
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: Publish Crate to Crates.io
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [created]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
env:
|
|
9
|
+
CARGO_TERM_COLOR: always
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
publish:
|
|
13
|
+
name: Publish graphmind-optimization
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- name: Checkout code
|
|
17
|
+
uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Install Rust toolchain
|
|
20
|
+
uses: dtolnay/rust-toolchain@stable
|
|
21
|
+
|
|
22
|
+
- name: Publish to crates.io
|
|
23
|
+
env:
|
|
24
|
+
CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }}
|
|
25
|
+
shell: bash
|
|
26
|
+
run: |
|
|
27
|
+
publish_crate() {
|
|
28
|
+
CRATE=$1
|
|
29
|
+
echo "--------------------------------------------------"
|
|
30
|
+
echo "🚀 Processing $CRATE..."
|
|
31
|
+
|
|
32
|
+
# Dry run first to check compilation/packaging
|
|
33
|
+
# cargo publish --dry-run -p $CRATE
|
|
34
|
+
|
|
35
|
+
# Attempt real publish
|
|
36
|
+
OUTPUT=$(cargo publish -p $CRATE 2>&1)
|
|
37
|
+
EXIT_CODE=$?
|
|
38
|
+
|
|
39
|
+
if [ $EXIT_CODE -eq 0 ]; then
|
|
40
|
+
echo "✅ Success: $CRATE published."
|
|
41
|
+
elif echo "$OUTPUT" | grep -q "already exists"; then
|
|
42
|
+
echo "⚠️ Skipping: Version already exists on crates.io."
|
|
43
|
+
elif echo "$OUTPUT" | grep -q "already uploaded"; then
|
|
44
|
+
echo "⚠️ Skipping: Version already exists on crates.io."
|
|
45
|
+
else
|
|
46
|
+
echo "❌ Error: Failed to publish $CRATE"
|
|
47
|
+
echo "$OUTPUT"
|
|
48
|
+
return $EXIT_CODE
|
|
49
|
+
fi
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
# Publish order matters if there are dependencies
|
|
53
|
+
publish_crate graphmind-graph-algorithms
|
|
54
|
+
publish_crate graphmind-optimization
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ['v*']
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: write
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
build:
|
|
12
|
+
name: Build (${{ matrix.target }})
|
|
13
|
+
runs-on: ${{ matrix.os }}
|
|
14
|
+
strategy:
|
|
15
|
+
fail-fast: false
|
|
16
|
+
matrix:
|
|
17
|
+
include:
|
|
18
|
+
- target: x86_64-unknown-linux-gnu
|
|
19
|
+
os: ubuntu-latest
|
|
20
|
+
archive: tar.gz
|
|
21
|
+
- target: x86_64-apple-darwin
|
|
22
|
+
os: macos-latest
|
|
23
|
+
archive: tar.gz
|
|
24
|
+
- target: aarch64-apple-darwin
|
|
25
|
+
os: macos-latest
|
|
26
|
+
archive: tar.gz
|
|
27
|
+
- target: x86_64-pc-windows-msvc
|
|
28
|
+
os: windows-latest
|
|
29
|
+
archive: zip
|
|
30
|
+
env:
|
|
31
|
+
CXXFLAGS: "-include cstdint"
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/checkout@v4
|
|
34
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
35
|
+
with:
|
|
36
|
+
targets: ${{ matrix.target }}
|
|
37
|
+
- uses: Swatinem/rust-cache@v2
|
|
38
|
+
|
|
39
|
+
- name: Build UI
|
|
40
|
+
run: |
|
|
41
|
+
cd ui && npm ci && npm run build
|
|
42
|
+
|
|
43
|
+
- name: Build release binary
|
|
44
|
+
run: cargo build --release --target ${{ matrix.target }}
|
|
45
|
+
|
|
46
|
+
- name: Package (Unix)
|
|
47
|
+
if: matrix.archive == 'tar.gz'
|
|
48
|
+
run: |
|
|
49
|
+
mkdir -p dist
|
|
50
|
+
cp target/${{ matrix.target }}/release/graphmind dist/ 2>/dev/null || true
|
|
51
|
+
cp target/${{ matrix.target }}/release/graphmind-cli dist/ 2>/dev/null || true
|
|
52
|
+
cp README.md LICENSE dist/
|
|
53
|
+
cp dist/graphmind.conf.example dist/ 2>/dev/null || true
|
|
54
|
+
tar -czf graphmind-${{ github.ref_name }}-${{ matrix.target }}.tar.gz -C dist .
|
|
55
|
+
|
|
56
|
+
- name: Package (Windows)
|
|
57
|
+
if: matrix.archive == 'zip'
|
|
58
|
+
shell: pwsh
|
|
59
|
+
run: |
|
|
60
|
+
New-Item -ItemType Directory -Force dist
|
|
61
|
+
Copy-Item target/${{ matrix.target }}/release/graphmind.exe dist/ -ErrorAction SilentlyContinue
|
|
62
|
+
Copy-Item target/${{ matrix.target }}/release/graphmind-cli.exe dist/ -ErrorAction SilentlyContinue
|
|
63
|
+
Copy-Item README.md,LICENSE dist/
|
|
64
|
+
Compress-Archive -Path dist/* -DestinationPath graphmind-${{ github.ref_name }}-${{ matrix.target }}.zip
|
|
65
|
+
|
|
66
|
+
- name: Upload artifact
|
|
67
|
+
uses: actions/upload-artifact@v4
|
|
68
|
+
with:
|
|
69
|
+
name: graphmind-${{ matrix.target }}
|
|
70
|
+
path: graphmind-${{ github.ref_name }}-${{ matrix.target }}.*
|
|
71
|
+
|
|
72
|
+
release:
|
|
73
|
+
name: Create Release
|
|
74
|
+
if: always()
|
|
75
|
+
needs: build
|
|
76
|
+
runs-on: ubuntu-latest
|
|
77
|
+
steps:
|
|
78
|
+
- uses: actions/download-artifact@v4
|
|
79
|
+
with:
|
|
80
|
+
merge-multiple: true
|
|
81
|
+
- name: Create GitHub Release
|
|
82
|
+
uses: softprops/action-gh-release@v2
|
|
83
|
+
with:
|
|
84
|
+
files: graphmind-*
|
|
85
|
+
generate_release_notes: true
|
|
86
|
+
|
|
87
|
+
docker:
|
|
88
|
+
name: Docker
|
|
89
|
+
runs-on: ubuntu-latest
|
|
90
|
+
steps:
|
|
91
|
+
- uses: actions/checkout@v4
|
|
92
|
+
- uses: docker/setup-buildx-action@v3
|
|
93
|
+
- uses: docker/login-action@v3
|
|
94
|
+
with:
|
|
95
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
96
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
97
|
+
- uses: docker/build-push-action@v6
|
|
98
|
+
with:
|
|
99
|
+
context: .
|
|
100
|
+
push: true
|
|
101
|
+
platforms: linux/amd64
|
|
102
|
+
tags: |
|
|
103
|
+
fabischk/graphmind:${{ github.ref_name }}
|
|
104
|
+
fabischk/graphmind:latest
|
|
105
|
+
|
|
106
|
+
publish-pypi:
|
|
107
|
+
name: PyPI
|
|
108
|
+
runs-on: ubuntu-latest
|
|
109
|
+
env:
|
|
110
|
+
CXXFLAGS: "-include cstdint"
|
|
111
|
+
steps:
|
|
112
|
+
- uses: actions/checkout@v4
|
|
113
|
+
- uses: PyO3/maturin-action@v1
|
|
114
|
+
with:
|
|
115
|
+
working-directory: sdk/python
|
|
116
|
+
command: publish
|
|
117
|
+
args: --skip-existing
|
|
118
|
+
manylinux: manylinux_2_28
|
|
119
|
+
before-script-linux: |
|
|
120
|
+
dnf install -y clang-devel cmake || true
|
|
121
|
+
env:
|
|
122
|
+
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
|
123
|
+
|
|
124
|
+
publish-npm:
|
|
125
|
+
name: npm
|
|
126
|
+
runs-on: ubuntu-latest
|
|
127
|
+
steps:
|
|
128
|
+
- uses: actions/checkout@v4
|
|
129
|
+
- uses: actions/setup-node@v4
|
|
130
|
+
with:
|
|
131
|
+
node-version: 20
|
|
132
|
+
registry-url: https://registry.npmjs.org
|
|
133
|
+
- run: cd sdk/typescript && npm ci && npm publish --access public || echo "Already published, skipping"
|
|
134
|
+
env:
|
|
135
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
136
|
+
|
|
137
|
+
publish-crates:
|
|
138
|
+
name: Crates.io
|
|
139
|
+
runs-on: ubuntu-latest
|
|
140
|
+
env:
|
|
141
|
+
CXXFLAGS: "-include cstdint"
|
|
142
|
+
steps:
|
|
143
|
+
- uses: actions/checkout@v4
|
|
144
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
145
|
+
- name: Publish crates (in dependency order)
|
|
146
|
+
run: |
|
|
147
|
+
cargo publish -p graphmind-graph-algorithms --allow-dirty || true
|
|
148
|
+
sleep 30
|
|
149
|
+
cargo publish -p graphmind-optimization --allow-dirty || true
|
|
150
|
+
sleep 30
|
|
151
|
+
cargo publish -p graphmind --allow-dirty || true
|
|
152
|
+
sleep 30
|
|
153
|
+
cargo publish -p graphmind-sdk --allow-dirty || true
|
|
154
|
+
sleep 30
|
|
155
|
+
cargo publish -p graphmind-cli --allow-dirty || true
|
|
156
|
+
env:
|
|
157
|
+
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/target
|
|
2
|
+
|
|
3
|
+
# Project overview
|
|
4
|
+
project_overview.txt
|
|
5
|
+
|
|
6
|
+
# Temporary files
|
|
7
|
+
temp.txt
|
|
8
|
+
|
|
9
|
+
# Documentation (generated)
|
|
10
|
+
docs/CREATE_IMPLEMENTATION.md
|
|
11
|
+
|
|
12
|
+
# Generated banking demo data
|
|
13
|
+
docs/banking/data/
|
|
14
|
+
*.tsv
|
|
15
|
+
|
|
16
|
+
# DB Data Directories
|
|
17
|
+
*_data/
|
|
18
|
+
vectors/
|
|
19
|
+
wal/
|
|
20
|
+
data/
|
|
21
|
+
.env
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
Graphmind is a high-performance distributed graph database written in Rust with ~90% OpenCypher query support, Redis protocol (RESP) compatibility, multi-tenancy, vector search, NLQ, and graph algorithms. Currently at Phase 4 (High Availability Foundation), version v0.6.1.
|
|
8
|
+
|
|
9
|
+
## Build & Development Commands
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Build
|
|
13
|
+
cargo build # Debug build
|
|
14
|
+
cargo build --release # Release build (optimized)
|
|
15
|
+
|
|
16
|
+
# Run tests (1842 unit tests)
|
|
17
|
+
cargo test # All tests
|
|
18
|
+
cargo test graph::node # Specific module tests
|
|
19
|
+
cargo test -- --nocapture # Tests with output
|
|
20
|
+
|
|
21
|
+
# Benchmarks (all in benches/)
|
|
22
|
+
cargo bench # All benchmarks
|
|
23
|
+
cargo bench --bench graph_benchmarks # Criterion micro-benchmarks (15 benches)
|
|
24
|
+
cargo bench --bench full_benchmark # Full suite (ingestion, vector, traversal, algorithms)
|
|
25
|
+
cargo bench --bench vector_benchmark # HNSW vector search
|
|
26
|
+
cargo bench --bench graphalytics_benchmark # LDBC Graphalytics algorithms
|
|
27
|
+
cargo bench --bench mvcc_benchmark # MVCC & arena allocation
|
|
28
|
+
cargo bench --bench late_materialization_bench # Late materialization traversal
|
|
29
|
+
cargo bench --bench graph_optimization_benchmark # Metaheuristic optimization solvers
|
|
30
|
+
cargo bench --bench ldbc_benchmark # LDBC SNB Interactive queries (needs data)
|
|
31
|
+
cargo bench --bench ldbc_bi_benchmark # LDBC SNB BI queries (needs data)
|
|
32
|
+
cargo bench --bench finbench_benchmark # LDBC FinBench queries (synthetic data)
|
|
33
|
+
|
|
34
|
+
# Run examples
|
|
35
|
+
cargo run --example banking_demo # Banking fraud detection + NLQ
|
|
36
|
+
cargo run --example clinical_trials_demo # Clinical trials + vector search
|
|
37
|
+
cargo run --example supply_chain_demo # Supply chain + optimization
|
|
38
|
+
cargo run --example smart_manufacturing_demo # Digital twin + scheduling
|
|
39
|
+
cargo run --example social_network_demo # Social network analysis
|
|
40
|
+
cargo run --example knowledge_graph_demo # Enterprise knowledge graph
|
|
41
|
+
cargo run --example enterprise_soc_demo # Security operations center
|
|
42
|
+
cargo run --example agentic_enrichment_demo # GAK (Generation-Augmented Knowledge)
|
|
43
|
+
cargo run --example persistence_demo # Persistence & multi-tenancy
|
|
44
|
+
cargo run --example cluster_demo # Raft clustering
|
|
45
|
+
cargo run --example ldbc_loader # Load LDBC SNB SF1 dataset
|
|
46
|
+
cargo run --example finbench_loader # Load/generate FinBench dataset
|
|
47
|
+
cargo run --release --example cricket_loader # Load 21K Cricsheet matches
|
|
48
|
+
cargo run --release --example aact_loader # Load AACT clinical trials dataset
|
|
49
|
+
|
|
50
|
+
# Start RESP server
|
|
51
|
+
cargo run # RESP on 127.0.0.1:6379, HTTP on :8080
|
|
52
|
+
|
|
53
|
+
# Code quality
|
|
54
|
+
cargo fmt -- --check # Check formatting
|
|
55
|
+
cargo clippy -- -D warnings # Lint checks
|
|
56
|
+
|
|
57
|
+
# Integration tests (requires running server)
|
|
58
|
+
cd tests/integration
|
|
59
|
+
python3 test_resp_basic.py
|
|
60
|
+
python3 test_resp_visual.py
|
|
61
|
+
|
|
62
|
+
# Frontend UI (React)
|
|
63
|
+
cd ui && npm install # Install frontend dependencies
|
|
64
|
+
cd ui && npm run dev # Dev server on :5173 (proxies /api to :8080)
|
|
65
|
+
cd ui && npm run build # Production build → ui/dist/
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Architecture
|
|
69
|
+
|
|
70
|
+
### Module Structure
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
src/
|
|
74
|
+
├── graph/ # Property Graph Model
|
|
75
|
+
│ ├── store.rs # GraphStore - in-memory storage with indices + cardinality stats
|
|
76
|
+
│ ├── node.rs # Node with labels and properties
|
|
77
|
+
│ ├── edge.rs # Directed edges with types
|
|
78
|
+
│ ├── property.rs # PropertyValue (String, Integer, Float, Boolean, DateTime, Array, Map, Null)
|
|
79
|
+
│ └── types.rs # NodeId, EdgeId, Label, EdgeType
|
|
80
|
+
│
|
|
81
|
+
├── query/ # OpenCypher Query Engine (~90% coverage)
|
|
82
|
+
│ ├── parser.rs # Pest-based OpenCypher parser
|
|
83
|
+
│ ├── cypher.pest # PEG grammar (atomic keyword rules for word boundaries)
|
|
84
|
+
│ ├── ast.rs # Query AST
|
|
85
|
+
│ └── executor/
|
|
86
|
+
│ ├── planner.rs # Query planner (AST → ExecutionPlan)
|
|
87
|
+
│ ├── operator.rs # Physical operators (Volcano iterator model)
|
|
88
|
+
│ └── record.rs # Record, RecordBatch, Value (with late materialization)
|
|
89
|
+
│
|
|
90
|
+
├── protocol/ # RESP Protocol
|
|
91
|
+
│ ├── resp.rs # RESP3 encoder/decoder
|
|
92
|
+
│ ├── server.rs # Tokio TCP server
|
|
93
|
+
│ └── command.rs # GRAPH.* command handler
|
|
94
|
+
│
|
|
95
|
+
├── persistence/ # Persistence & Multi-Tenancy
|
|
96
|
+
│ ├── storage.rs # RocksDB with column families
|
|
97
|
+
│ ├── wal.rs # Write-Ahead Log
|
|
98
|
+
│ └── tenant.rs # Multi-tenancy & resource quotas
|
|
99
|
+
│
|
|
100
|
+
├── raft/ # High Availability
|
|
101
|
+
│ ├── node.rs # RaftNode using openraft
|
|
102
|
+
│ ├── state_machine.rs # GraphStateMachine
|
|
103
|
+
│ ├── cluster.rs # ClusterConfig, ClusterManager
|
|
104
|
+
│ ├── network.rs # Inter-node communication
|
|
105
|
+
│ └── storage.rs # Raft log storage
|
|
106
|
+
│
|
|
107
|
+
├── nlq/ # Natural Language Query Pipeline
|
|
108
|
+
│ ├── mod.rs # NLQPipeline (text_to_cypher, extract_cypher, is_safe_query)
|
|
109
|
+
│ └── client.rs # NLQClient (OpenAI, Gemini, Ollama, Claude Code providers)
|
|
110
|
+
│
|
|
111
|
+
├── vector/ # HNSW Vector Index
|
|
112
|
+
├── snapshot/ # Portable .sgsnap export/import
|
|
113
|
+
└── sharding/ # Tenant-level sharding
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Key Architectural Patterns
|
|
117
|
+
|
|
118
|
+
1. **Volcano Iterator Model (ADR-007)**: Lazy, pull-based operators:
|
|
119
|
+
- `NodeScanOperator` → `FilterOperator` → `ExpandOperator` → `ProjectOperator` → `LimitOperator`
|
|
120
|
+
|
|
121
|
+
2. **Late Materialization (ADR-012)**: Scan produces `Value::NodeRef(id)` not full clones. Properties resolved on demand via `resolve_property()`.
|
|
122
|
+
|
|
123
|
+
3. **In-Memory Graph Storage**: O(1) lookups via HashMaps with adjacency lists for traversal.
|
|
124
|
+
|
|
125
|
+
4. **Multi-Tenancy**: RocksDB column families with tenant-prefixed keys, per-tenant quotas.
|
|
126
|
+
|
|
127
|
+
5. **Raft Consensus**: Uses `openraft` crate with custom `GraphStateMachine`.
|
|
128
|
+
|
|
129
|
+
6. **Cross-Type Coercion**: Integer/Float promotion, String/Boolean coercion, Null propagation (three-valued logic).
|
|
130
|
+
|
|
131
|
+
### Frontend (React UI)
|
|
132
|
+
|
|
133
|
+
The web-based visualizer is a React 19 + TypeScript application in `ui/`.
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
ui/src/
|
|
137
|
+
├── api/client.ts # Typed fetch client for all API endpoints
|
|
138
|
+
├── stores/ # Zustand state management
|
|
139
|
+
│ ├── graphStore.ts # Nodes, edges, selection, multi-select
|
|
140
|
+
│ ├── queryStore.ts # Query execution, history, saved queries
|
|
141
|
+
│ ├── uiStore.ts # Connection status, schema, panel state
|
|
142
|
+
│ └── graphSettingsStore.ts # Colors, icons, captions (persisted)
|
|
143
|
+
├── components/
|
|
144
|
+
│ ├── editor/ # CodeMirror 6 Cypher editor, query templates, saved queries
|
|
145
|
+
│ ├── graph/ # D3 force graph, fullscreen explorer, toolbar, stats, minimap
|
|
146
|
+
│ ├── inspector/ # Property inspector, schema browser with color/icon pickers
|
|
147
|
+
│ ├── layout/ # AppShell, Navbar, resizable panels
|
|
148
|
+
│ ├── results/ # TanStack Table for query results
|
|
149
|
+
│ └── ui/ # Reusable components (button, badge, tabs, resizable, theme toggle, icon picker)
|
|
150
|
+
├── lib/
|
|
151
|
+
│ ├── cypher.ts # Cypher keywords/functions/procedures for autocomplete
|
|
152
|
+
│ ├── colors.ts # Node label color mapping with custom override support
|
|
153
|
+
│ ├── icons.ts # 55+ SVG icon catalog for node visualization
|
|
154
|
+
│ ├── shortcuts.ts # Keyboard shortcuts system
|
|
155
|
+
│ └── utils.ts # Tailwind merge utility
|
|
156
|
+
└── types/api.ts # TypeScript interfaces matching backend API
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Tech stack:** React 19, Vite 6, TypeScript, Tailwind CSS v4, shadcn/ui, D3.js (d3-force), CodeMirror 6, TanStack Table, Zustand
|
|
160
|
+
|
|
161
|
+
**Dev commands:**
|
|
162
|
+
```bash
|
|
163
|
+
cd ui
|
|
164
|
+
npm install # Install dependencies
|
|
165
|
+
npm run dev # Dev server on :5173 (proxies /api to :8080)
|
|
166
|
+
npm run build # Production build → ui/dist/
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Cypher Support
|
|
170
|
+
|
|
171
|
+
**Supported clauses:** MATCH, OPTIONAL MATCH, CREATE, DELETE, SET, REMOVE, MERGE, WITH, UNWIND, UNION, RETURN DISTINCT, ORDER BY, SKIP, LIMIT, EXPLAIN, EXISTS subqueries.
|
|
172
|
+
|
|
173
|
+
**Supported functions (30+):** toUpper, toLower, trim, replace, substring, left, right, reverse, toString, toInteger, toFloat, abs, ceil, floor, round, sqrt, sign, count, sum, avg, min, max, collect, size, length, head, last, tail, keys, id, labels, type, exists, coalesce.
|
|
174
|
+
|
|
175
|
+
**Remaining gaps:** list slicing, pattern comprehensions, named paths, collect(DISTINCT x).
|
|
176
|
+
|
|
177
|
+
## API Patterns
|
|
178
|
+
|
|
179
|
+
### Query Engine
|
|
180
|
+
```rust
|
|
181
|
+
// Read-only queries
|
|
182
|
+
let executor = QueryExecutor::new(&store);
|
|
183
|
+
let result: RecordBatch = executor.execute(&query)?;
|
|
184
|
+
|
|
185
|
+
// Write queries (CREATE, DELETE, SET, MERGE)
|
|
186
|
+
let mut executor = MutQueryExecutor::new(&mut store, tenant_id);
|
|
187
|
+
executor.execute(&query)?;
|
|
188
|
+
|
|
189
|
+
// EXPLAIN (no execution)
|
|
190
|
+
// Returns plan as RecordBatch with operator descriptions
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### NLQ Pipeline
|
|
194
|
+
```rust
|
|
195
|
+
let pipeline = NLQPipeline::new(nlq_config)?;
|
|
196
|
+
let cypher = pipeline.text_to_cypher("Who knows Alice?", &schema_summary).await?;
|
|
197
|
+
// Returns clean Cypher with markdown fences stripped and safety validation
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Graph Store
|
|
201
|
+
```rust
|
|
202
|
+
let mut graph = GraphStore::new();
|
|
203
|
+
let node_id = graph.create_node("Person");
|
|
204
|
+
graph.get_node_mut(node_id)?.set_property("name", "Alice");
|
|
205
|
+
graph.create_edge(source_id, target_id, "KNOWS")?;
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### HTTP API Endpoints
|
|
209
|
+
|
|
210
|
+
The Axum HTTP server runs on port 8080 alongside the RESP server on port 6379.
|
|
211
|
+
|
|
212
|
+
| Method | Path | Description |
|
|
213
|
+
|--------|------|-------------|
|
|
214
|
+
| POST | `/api/query` | Execute a single Cypher query |
|
|
215
|
+
| POST | `/api/script` | Execute multi-statement Cypher script (line-by-line) |
|
|
216
|
+
| POST | `/api/nlq` | Translate natural language to Cypher via LLM |
|
|
217
|
+
| GET | `/api/status` | Server health, node/edge counts, cache stats |
|
|
218
|
+
| GET | `/api/schema` | Schema introspection (labels, types, properties, stats) |
|
|
219
|
+
| POST | `/api/sample` | Sample a subgraph for visualization |
|
|
220
|
+
| POST | `/api/import/csv` | Import nodes from CSV |
|
|
221
|
+
| POST | `/api/import/json` | Import nodes from JSON |
|
|
222
|
+
| POST | `/api/snapshot/export` | Export graph as .sgsnap |
|
|
223
|
+
| POST | `/api/snapshot/import` | Import .sgsnap snapshot |
|
|
224
|
+
|
|
225
|
+
#### Script Endpoint
|
|
226
|
+
```bash
|
|
227
|
+
# Execute a .cypher file with multiple statements
|
|
228
|
+
curl -X POST http://localhost:8080/api/script \
|
|
229
|
+
-H 'Content-Type: application/json' \
|
|
230
|
+
-d '{"query": "CREATE (a:Person {name: '\''Alice'\''})\nCREATE (b:Person {name: '\''Bob'\''})"}'
|
|
231
|
+
# Response: {"status":"ok","executed":2,"errors":[],"storage":{"nodes":2,"edges":0}}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
#### NLQ Endpoint (Natural Language Queries)
|
|
235
|
+
Requires an LLM provider configured via environment variables:
|
|
236
|
+
- `OPENAI_API_KEY` — Uses OpenAI (model: `OPENAI_MODEL` or `gpt-4o-mini`)
|
|
237
|
+
- `GEMINI_API_KEY` — Uses Google Gemini (model: `GEMINI_MODEL` or `gemini-2.0-flash`)
|
|
238
|
+
- `CLAUDE_CODE_NLQ=1` — Uses Claude Code CLI
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
OPENAI_API_KEY=sk-... cargo run
|
|
242
|
+
# Then:
|
|
243
|
+
curl -X POST http://localhost:8080/api/nlq \
|
|
244
|
+
-H 'Content-Type: application/json' \
|
|
245
|
+
-d '{"query": "Who are Alice'\''s friends?"}'
|
|
246
|
+
# Response: {"cypher":"MATCH (a:Person {name:'Alice'})-[:FRIENDS_WITH]-(b) RETURN a,b","provider":"OpenAI","model":"gpt-4o-mini"}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## Testing
|
|
250
|
+
|
|
251
|
+
- **1842 unit tests** across all modules (89.7% coverage)
|
|
252
|
+
- **10 benchmark binaries** in `benches/` (Criterion micro-benchmarks + domain benchmarks)
|
|
253
|
+
- **Integration tests**: Python scripts in `tests/integration/`
|
|
254
|
+
- **8 domain-specific example demos** with NLQ integration
|
|
255
|
+
- **4 data loaders** (LDBC SNB, FinBench, Cricket, AACT) in `examples/`
|
|
256
|
+
- **28 CRUD integration tests** in `tests/cypher_crud_test.rs` (CREATE, MATCH, SET, DELETE, MERGE, WITH, UNWIND, OPTIONAL MATCH, EXPLAIN)
|
|
257
|
+
|
|
258
|
+
## Demo Scripts
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
# Social Network Demo — 52 nodes, 142 edges
|
|
262
|
+
# Load via UI script button or API:
|
|
263
|
+
curl -X POST http://localhost:8080/api/script \
|
|
264
|
+
-H 'Content-Type: application/json' \
|
|
265
|
+
-d @scripts/social_network_demo.cypher
|
|
266
|
+
|
|
267
|
+
# Or paste into the UI editor and use the Upload button
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
The demo creates: 16 Person, 6 City, 5 Company, 7 Property, 6 Car, 5 Pet, 8 Hobby, 4 University nodes with MARRIED_TO, LIVES_IN, FRIENDS_WITH, WORKS_AT, OWNS, ATTENDED, ENJOYS, INVESTED_IN, HEADQUARTERED_IN relationships. Includes 25 test queries (Q1-Q25).
|
|
271
|
+
|
|
272
|
+
## UI Features (Visualizer)
|
|
273
|
+
|
|
274
|
+
The web visualizer at `http://localhost:8080` provides:
|
|
275
|
+
|
|
276
|
+
- **Cypher Editor**: CodeMirror 6 with syntax highlighting, autocomplete (keywords, functions, schema labels/types, variables), Ctrl+Enter to execute
|
|
277
|
+
- **D3 Force Graph**: Canvas-based rendering with zoom/pan, node dragging, click selection, right-click context menu (expand neighbors, load all relationships)
|
|
278
|
+
- **Graph Layouts**: Force-directed (default), circular, hierarchical, grid
|
|
279
|
+
- **Fullscreen Explorer**: Immersive mode with floating glassmorphism legend, search, minimap, and property inspector
|
|
280
|
+
- **Query Templates**: Pre-built queries organized by category (Exploration, Pathfinding, Analytics, Social Network, Algorithms)
|
|
281
|
+
- **Saved Queries**: Name and save queries, persisted to localStorage
|
|
282
|
+
- **NLQ Mode**: Natural language to Cypher translation (requires LLM API key)
|
|
283
|
+
- **Search**: Type to highlight matching nodes on canvas, dims non-matching
|
|
284
|
+
- **Shortest Path**: Click two nodes to find and visualize shortest path (BFS)
|
|
285
|
+
- **Highlight Mode**: Select a node to highlight connected nodes, dim the rest
|
|
286
|
+
- **Multi-select**: Shift+click to select multiple nodes
|
|
287
|
+
- **Node Icons**: 55+ built-in SVG icons assignable per label, auto-detect image URLs
|
|
288
|
+
- **Color Customization**: Per-label node colors and per-type edge colors (persisted)
|
|
289
|
+
- **Caption Property**: Choose which property displays on each node label
|
|
290
|
+
- **Export**: PNG screenshot, CSV data, JSON graph
|
|
291
|
+
- **Graph Stats**: Floating panel with node/edge distribution and degree metrics
|
|
292
|
+
- **Dark/Light Theme**: Toggle with system preference support
|
|
293
|
+
- **Keyboard Shortcuts**: F5 (run), Escape (clear), Delete (remove from canvas), ? (help)
|
|
294
|
+
- **Script Loader**: Upload .cypher files to execute all statements
|
|
295
|
+
- **Query History**: With play/delete buttons and timeline scrubber
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Code Owners for Graphmind Graph
|
|
2
|
+
# This file defines who owns the code and who should review changes.
|
|
3
|
+
|
|
4
|
+
# Global owner (matches everything)
|
|
5
|
+
* @sandeepkunkunuru
|
|
6
|
+
|
|
7
|
+
# Specific component owners (examples for future)
|
|
8
|
+
# /crates/graphmind-optimization/ @expert-optimizer
|
|
9
|
+
# /docs/ @tech-writer
|