@mytechtoday/augment-extensions 0.1.2 → 0.4.0
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.
- package/README.md +614 -39
- package/augment-extensions/coding-standards/bash/README.md +196 -0
- package/augment-extensions/coding-standards/bash/module.json +163 -0
- package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -0
- package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -0
- package/augment-extensions/coding-standards/css/README.md +40 -0
- package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/css/module.json +44 -0
- package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html/README.md +40 -0
- package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html/module.json +44 -0
- package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/README.md +194 -0
- package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html-css-js/module.json +48 -0
- package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/js/README.md +46 -0
- package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/js/module.json +49 -0
- package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/php/README.md +248 -0
- package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -0
- package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -0
- package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -0
- package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -0
- package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -0
- package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -0
- package/augment-extensions/coding-standards/php/module.json +166 -0
- package/augment-extensions/coding-standards/php/rules/api-development.md +480 -0
- package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -0
- package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -0
- package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -0
- package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -0
- package/augment-extensions/coding-standards/php/rules/documentation.md +425 -0
- package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -0
- package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -0
- package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -0
- package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -0
- package/augment-extensions/coding-standards/php/rules/performance.md +392 -0
- package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -0
- package/augment-extensions/coding-standards/php/rules/security.md +358 -0
- package/augment-extensions/coding-standards/php/rules/testing.md +403 -0
- package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -0
- package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -0
- package/augment-extensions/coding-standards/powershell/README.md +154 -0
- package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -0
- package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -0
- package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -0
- package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -0
- package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -0
- package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -0
- package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -0
- package/augment-extensions/coding-standards/powershell/module.json +165 -0
- package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -0
- package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -0
- package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -0
- package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -0
- package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -0
- package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -0
- package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -0
- package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -0
- package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -0
- package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -0
- package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -0
- package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -0
- package/augment-extensions/coding-standards/python/README.md +12 -8
- package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -0
- package/augment-extensions/coding-standards/python/module.json +8 -4
- package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -0
- package/augment-extensions/coding-standards/python/rules/documentation.md +831 -0
- package/augment-extensions/coding-standards/python/rules/error-handling.md +855 -68
- package/augment-extensions/coding-standards/python/rules/testing.md +409 -0
- package/augment-extensions/coding-standards/python/rules/tooling.md +446 -0
- package/augment-extensions/coding-standards/python/rules/type-hints.md +115 -50
- package/augment-extensions/collections/html-css-js/README.md +82 -0
- package/augment-extensions/collections/html-css-js/collection.json +41 -0
- package/augment-extensions/domain-rules/database/README.md +161 -0
- package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -0
- package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -0
- package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -0
- package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -0
- package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -0
- package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -0
- package/augment-extensions/domain-rules/database/module.json +28 -0
- package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -0
- package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -0
- package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -0
- package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -0
- package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -0
- package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -0
- package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -0
- package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -0
- package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -0
- package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -0
- package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -0
- package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -0
- package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -0
- package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -0
- package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -0
- package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -0
- package/augment-extensions/domain-rules/mcp/README.md +150 -0
- package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -0
- package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -0
- package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -0
- package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -0
- package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -0
- package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -0
- package/augment-extensions/domain-rules/mcp/module.json +49 -0
- package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -0
- package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -0
- package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -0
- package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -0
- package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -0
- package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -0
- package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -0
- package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -0
- package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -0
- package/augment-extensions/domain-rules/wordpress/README.md +163 -0
- package/augment-extensions/domain-rules/wordpress/module.json +32 -0
- package/augment-extensions/domain-rules/wordpress/rules/coding-standards.md +617 -0
- package/augment-extensions/domain-rules/wordpress/rules/directory-structure.md +270 -0
- package/augment-extensions/domain-rules/wordpress/rules/file-patterns.md +423 -0
- package/augment-extensions/domain-rules/wordpress/rules/gutenberg-blocks.md +493 -0
- package/augment-extensions/domain-rules/wordpress/rules/performance.md +568 -0
- package/augment-extensions/domain-rules/wordpress/rules/plugin-development.md +510 -0
- package/augment-extensions/domain-rules/wordpress/rules/project-detection.md +251 -0
- package/augment-extensions/domain-rules/wordpress/rules/rest-api.md +501 -0
- package/augment-extensions/domain-rules/wordpress/rules/security.md +564 -0
- package/augment-extensions/domain-rules/wordpress/rules/theme-development.md +388 -0
- package/augment-extensions/domain-rules/wordpress/rules/woocommerce.md +441 -0
- package/augment-extensions/domain-rules/wordpress-plugin/README.md +139 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/ajax-plugin.md +1599 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/custom-post-type-plugin.md +1727 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block-plugin.md +428 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block.md +422 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/mvc-plugin.md +1623 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/object-oriented-plugin.md +1343 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/rest-endpoint.md +734 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/settings-page-plugin.md +1350 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/simple-procedural-plugin.md +503 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/singleton-plugin.md +971 -0
- package/augment-extensions/domain-rules/wordpress-plugin/module.json +53 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/activation-hooks.md +770 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/admin-interface.md +874 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/ajax-handlers.md +629 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/asset-management.md +559 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/context-providers.md +709 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/cron-jobs.md +736 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/database-management.md +1057 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/documentation-standards.md +463 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/frontend-functionality.md +478 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/gutenberg-blocks.md +818 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/internationalization.md +416 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/migration.md +667 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/performance-optimization.md +878 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-architecture.md +693 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-structure.md +352 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/rest-api.md +818 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/scaffolding-workflow.md +624 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/security-best-practices.md +866 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing-patterns.md +1165 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing.md +414 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/vscode-integration.md +751 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/woocommerce-integration.md +949 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/wordpress-org-submission.md +458 -0
- package/augment-extensions/examples/gutenberg-block-plugin/README.md +101 -0
- package/augment-extensions/examples/gutenberg-block-plugin/examples/testimonial-block.md +428 -0
- package/augment-extensions/examples/gutenberg-block-plugin/module.json +40 -0
- package/augment-extensions/examples/rest-api-plugin/README.md +98 -0
- package/augment-extensions/examples/rest-api-plugin/examples/task-manager-api.md +1299 -0
- package/augment-extensions/examples/rest-api-plugin/module.json +40 -0
- package/augment-extensions/examples/woocommerce-extension/README.md +98 -0
- package/augment-extensions/examples/woocommerce-extension/examples/product-customizer.md +763 -0
- package/augment-extensions/examples/woocommerce-extension/module.json +40 -0
- package/augment-extensions/workflows/beads/module.json +4 -3
- package/augment-extensions/workflows/database/README.md +195 -0
- package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -0
- package/augment-extensions/workflows/database/examples/migration-example.md +498 -0
- package/augment-extensions/workflows/database/examples/optimization-example.md +496 -0
- package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -0
- package/augment-extensions/workflows/database/module.json +42 -0
- package/augment-extensions/workflows/database/rules/data-migration.md +249 -0
- package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -0
- package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -0
- package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -0
- package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -0
- package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -0
- package/augment-extensions/workflows/database/rules/workflow.md +458 -0
- package/augment-extensions/workflows/openspec/module.json +4 -3
- package/augment-extensions/workflows/wordpress-plugin/README.md +232 -0
- package/augment-extensions/workflows/wordpress-plugin/ai-prompts.md +839 -0
- package/augment-extensions/workflows/wordpress-plugin/bead-decomposition-patterns.md +854 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/complete-plugin-example.md +540 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/custom-post-type-example.md +1083 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/feature-addition-workflow.md +669 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/plugin-creation-workflow.md +597 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/secure-form-handler-example.md +925 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/security-audit-workflow.md +752 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/wordpress-org-submission-workflow.md +773 -0
- package/augment-extensions/workflows/wordpress-plugin/module.json +49 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/best-practices.md +942 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/development-workflow.md +702 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/submission-workflow.md +728 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/testing-workflow.md +775 -0
- package/augment-extensions/writing-standards/screenplay/README.md +171 -0
- package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -0
- package/augment-extensions/writing-standards/screenplay/module.json +124 -0
- package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -0
- package/cli/MODULES.md +302 -0
- package/cli/dist/cli.js +142 -9
- package/cli/dist/cli.js.map +1 -1
- package/cli/dist/commands/catalog.d.ts +13 -0
- package/cli/dist/commands/catalog.d.ts.map +1 -0
- package/cli/dist/commands/catalog.js +104 -0
- package/cli/dist/commands/catalog.js.map +1 -0
- package/cli/dist/commands/gui.d.ts +6 -0
- package/cli/dist/commands/gui.d.ts.map +1 -0
- package/cli/dist/commands/gui.js +211 -0
- package/cli/dist/commands/gui.js.map +1 -0
- package/cli/dist/commands/init.d.ts.map +1 -1
- package/cli/dist/commands/init.js +12 -0
- package/cli/dist/commands/init.js.map +1 -1
- package/cli/dist/commands/install-rules.d.ts +14 -0
- package/cli/dist/commands/install-rules.d.ts.map +1 -0
- package/cli/dist/commands/install-rules.js +127 -0
- package/cli/dist/commands/install-rules.js.map +1 -0
- package/cli/dist/commands/link.d.ts.map +1 -1
- package/cli/dist/commands/link.js +9 -11
- package/cli/dist/commands/link.js.map +1 -1
- package/cli/dist/commands/list.d.ts.map +1 -1
- package/cli/dist/commands/list.js +11 -28
- package/cli/dist/commands/list.js.map +1 -1
- package/cli/dist/commands/mcp.d.ts +48 -0
- package/cli/dist/commands/mcp.d.ts.map +1 -0
- package/cli/dist/commands/mcp.js +229 -0
- package/cli/dist/commands/mcp.js.map +1 -0
- package/cli/dist/commands/self-remove.d.ts +7 -0
- package/cli/dist/commands/self-remove.d.ts.map +1 -0
- package/cli/dist/commands/self-remove.js +179 -0
- package/cli/dist/commands/self-remove.js.map +1 -0
- package/cli/dist/commands/show.d.ts.map +1 -1
- package/cli/dist/commands/show.js +42 -71
- package/cli/dist/commands/show.js.map +1 -1
- package/cli/dist/commands/skill.d.ts +67 -0
- package/cli/dist/commands/skill.d.ts.map +1 -0
- package/cli/dist/commands/skill.js +513 -0
- package/cli/dist/commands/skill.js.map +1 -0
- package/cli/dist/commands/unlink.d.ts +6 -0
- package/cli/dist/commands/unlink.d.ts.map +1 -0
- package/cli/dist/commands/unlink.js +115 -0
- package/cli/dist/commands/unlink.js.map +1 -0
- package/cli/dist/commands/validate.d.ts +6 -0
- package/cli/dist/commands/validate.d.ts.map +1 -0
- package/cli/dist/commands/validate.js +159 -0
- package/cli/dist/commands/validate.js.map +1 -0
- package/cli/dist/utils/catalog-sync.d.ts +22 -0
- package/cli/dist/utils/catalog-sync.d.ts.map +1 -0
- package/cli/dist/utils/catalog-sync.js +157 -0
- package/cli/dist/utils/catalog-sync.js.map +1 -0
- package/cli/dist/utils/character-count.d.ts +56 -0
- package/cli/dist/utils/character-count.d.ts.map +1 -0
- package/cli/dist/utils/character-count.js +190 -0
- package/cli/dist/utils/character-count.js.map +1 -0
- package/cli/dist/utils/documentation-validator.d.ts +18 -0
- package/cli/dist/utils/documentation-validator.d.ts.map +1 -0
- package/cli/dist/utils/documentation-validator.js +233 -0
- package/cli/dist/utils/documentation-validator.js.map +1 -0
- package/cli/dist/utils/install-rules.d.ts +32 -0
- package/cli/dist/utils/install-rules.d.ts.map +1 -0
- package/cli/dist/utils/install-rules.js +375 -0
- package/cli/dist/utils/install-rules.js.map +1 -0
- package/cli/dist/utils/mcp-integration.d.ts +70 -0
- package/cli/dist/utils/mcp-integration.d.ts.map +1 -0
- package/cli/dist/utils/mcp-integration.js +292 -0
- package/cli/dist/utils/mcp-integration.js.map +1 -0
- package/cli/dist/utils/module-system.d.ts +153 -0
- package/cli/dist/utils/module-system.d.ts.map +1 -0
- package/cli/dist/utils/module-system.js +528 -0
- package/cli/dist/utils/module-system.js.map +1 -0
- package/cli/dist/utils/modules-catalog.d.ts +33 -0
- package/cli/dist/utils/modules-catalog.d.ts.map +1 -0
- package/cli/dist/utils/modules-catalog.js +163 -0
- package/cli/dist/utils/modules-catalog.js.map +1 -0
- package/cli/dist/utils/rule-install-hooks.d.ts +19 -0
- package/cli/dist/utils/rule-install-hooks.d.ts.map +1 -0
- package/cli/dist/utils/rule-install-hooks.js +224 -0
- package/cli/dist/utils/rule-install-hooks.js.map +1 -0
- package/cli/dist/utils/skill-system.d.ts +95 -0
- package/cli/dist/utils/skill-system.d.ts.map +1 -0
- package/cli/dist/utils/skill-system.js +313 -0
- package/cli/dist/utils/skill-system.js.map +1 -0
- package/modules.md +534 -70
- package/package.json +12 -3
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
# Graph-Augmented MCP Example: Supply Chain Analysis
|
|
2
|
+
|
|
3
|
+
## Use Case
|
|
4
|
+
|
|
5
|
+
A supply chain analysis system that uses knowledge graphs to track entities (suppliers, products, warehouses) and their relationships for complex queries and reasoning.
|
|
6
|
+
|
|
7
|
+
**Challenges**:
|
|
8
|
+
- Model complex entity relationships
|
|
9
|
+
- Support multi-hop reasoning
|
|
10
|
+
- Handle graph traversal efficiently
|
|
11
|
+
- Integrate graph context with LLM generation
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Configuration
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"mcp": {
|
|
20
|
+
"type": "graph",
|
|
21
|
+
"graphDatabase": {
|
|
22
|
+
"backend": "neo4j",
|
|
23
|
+
"uri": "bolt://localhost:7687",
|
|
24
|
+
"database": "supply-chain"
|
|
25
|
+
},
|
|
26
|
+
"entityExtraction": {
|
|
27
|
+
"enabled": true,
|
|
28
|
+
"model": "gpt-4o",
|
|
29
|
+
"entityTypes": ["SUPPLIER", "PRODUCT", "WAREHOUSE", "CUSTOMER", "ORDER"]
|
|
30
|
+
},
|
|
31
|
+
"relationshipTypes": [
|
|
32
|
+
"SUPPLIES",
|
|
33
|
+
"STORED_IN",
|
|
34
|
+
"ORDERED_BY",
|
|
35
|
+
"SHIPS_TO",
|
|
36
|
+
"DEPENDS_ON"
|
|
37
|
+
],
|
|
38
|
+
"traversal": {
|
|
39
|
+
"maxDepth": 3,
|
|
40
|
+
"maxNodes": 100,
|
|
41
|
+
"algorithm": "bidirectional_bfs"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Architecture
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
53
|
+
│ Supply Chain Query │
|
|
54
|
+
│ "Which suppliers can fulfill order #12345?" │
|
|
55
|
+
└─────────────────────────────────────────────────────────────┘
|
|
56
|
+
│
|
|
57
|
+
▼
|
|
58
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
59
|
+
│ Entity Extraction │
|
|
60
|
+
│ Entities: [Order #12345] │
|
|
61
|
+
│ Intent: Find suppliers │
|
|
62
|
+
└─────────────────────────────────────────────────────────────┘
|
|
63
|
+
│
|
|
64
|
+
▼
|
|
65
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
66
|
+
│ Knowledge Graph (Neo4j) │
|
|
67
|
+
│ │
|
|
68
|
+
│ (Order #12345) -[CONTAINS]→ (Product A) │
|
|
69
|
+
│ ↓ │
|
|
70
|
+
│ [SUPPLIED_BY] │
|
|
71
|
+
│ ↓ │
|
|
72
|
+
│ (Supplier X, Y, Z) │
|
|
73
|
+
│ ↓ │
|
|
74
|
+
│ [STORED_IN] │
|
|
75
|
+
│ ↓ │
|
|
76
|
+
│ (Warehouse 1, 2) │
|
|
77
|
+
└─────────────────────────────────────────────────────────────┘
|
|
78
|
+
│
|
|
79
|
+
▼
|
|
80
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
81
|
+
│ Graph Traversal │
|
|
82
|
+
│ Path: Order → Product → Supplier → Warehouse │
|
|
83
|
+
│ Depth: 3 hops │
|
|
84
|
+
│ Nodes: 15 entities │
|
|
85
|
+
└─────────────────────────────────────────────────────────────┘
|
|
86
|
+
│
|
|
87
|
+
▼
|
|
88
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
89
|
+
│ Context Serialization │
|
|
90
|
+
│ Graph → Natural Language Description │
|
|
91
|
+
└─────────────────────────────────────────────────────────────┘
|
|
92
|
+
│
|
|
93
|
+
▼
|
|
94
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
95
|
+
│ LLM Generation │
|
|
96
|
+
│ Graph Context → GPT-4o → Answer │
|
|
97
|
+
└─────────────────────────────────────────────────────────────┘
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Implementation
|
|
103
|
+
|
|
104
|
+
### Step 1: Graph Manager
|
|
105
|
+
|
|
106
|
+
```python
|
|
107
|
+
from neo4j import GraphDatabase
|
|
108
|
+
from typing import List, Dict, Any, Optional
|
|
109
|
+
import openai
|
|
110
|
+
|
|
111
|
+
class GraphManager:
|
|
112
|
+
def __init__(self, uri: str, user: str, password: str):
|
|
113
|
+
self.driver = GraphDatabase.driver(uri, auth=(user, password))
|
|
114
|
+
|
|
115
|
+
def close(self):
|
|
116
|
+
self.driver.close()
|
|
117
|
+
|
|
118
|
+
def create_entity(self, entity_type: str, properties: Dict[str, Any]) -> str:
|
|
119
|
+
"""Create entity node in graph"""
|
|
120
|
+
with self.driver.session() as session:
|
|
121
|
+
result = session.run(
|
|
122
|
+
f"""
|
|
123
|
+
CREATE (e:{entity_type} $properties)
|
|
124
|
+
RETURN elementId(e) as id
|
|
125
|
+
""",
|
|
126
|
+
properties=properties
|
|
127
|
+
)
|
|
128
|
+
return result.single()["id"]
|
|
129
|
+
|
|
130
|
+
def create_relationship(
|
|
131
|
+
self,
|
|
132
|
+
from_id: str,
|
|
133
|
+
to_id: str,
|
|
134
|
+
rel_type: str,
|
|
135
|
+
properties: Optional[Dict[str, Any]] = None
|
|
136
|
+
) -> None:
|
|
137
|
+
"""Create relationship between entities"""
|
|
138
|
+
with self.driver.session() as session:
|
|
139
|
+
session.run(
|
|
140
|
+
f"""
|
|
141
|
+
MATCH (a), (b)
|
|
142
|
+
WHERE elementId(a) = $from_id AND elementId(b) = $to_id
|
|
143
|
+
CREATE (a)-[r:{rel_type} $properties]->(b)
|
|
144
|
+
""",
|
|
145
|
+
from_id=from_id,
|
|
146
|
+
to_id=to_id,
|
|
147
|
+
properties=properties or {}
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
def find_paths(
|
|
151
|
+
self,
|
|
152
|
+
start_entity: Dict[str, Any],
|
|
153
|
+
end_entity: Dict[str, Any],
|
|
154
|
+
max_depth: int = 3
|
|
155
|
+
) -> List[Dict[str, Any]]:
|
|
156
|
+
"""Find paths between entities"""
|
|
157
|
+
with self.driver.session() as session:
|
|
158
|
+
result = session.run(
|
|
159
|
+
"""
|
|
160
|
+
MATCH path = (start)-[*1..$max_depth]-(end)
|
|
161
|
+
WHERE start.id = $start_id AND end.id = $end_id
|
|
162
|
+
RETURN path
|
|
163
|
+
LIMIT 10
|
|
164
|
+
""",
|
|
165
|
+
start_id=start_entity["id"],
|
|
166
|
+
end_id=end_entity["id"],
|
|
167
|
+
max_depth=max_depth
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
paths = []
|
|
171
|
+
for record in result:
|
|
172
|
+
path = record["path"]
|
|
173
|
+
paths.append(self._serialize_path(path))
|
|
174
|
+
|
|
175
|
+
return paths
|
|
176
|
+
|
|
177
|
+
def traverse_from_entity(
|
|
178
|
+
self,
|
|
179
|
+
entity_id: str,
|
|
180
|
+
max_depth: int = 2,
|
|
181
|
+
max_nodes: int = 100
|
|
182
|
+
) -> Dict[str, Any]:
|
|
183
|
+
"""Traverse graph from entity"""
|
|
184
|
+
with self.driver.session() as session:
|
|
185
|
+
result = session.run(
|
|
186
|
+
"""
|
|
187
|
+
MATCH path = (start)-[*1..$max_depth]-(connected)
|
|
188
|
+
WHERE elementId(start) = $entity_id
|
|
189
|
+
RETURN path
|
|
190
|
+
LIMIT $max_nodes
|
|
191
|
+
""",
|
|
192
|
+
entity_id=entity_id,
|
|
193
|
+
max_depth=max_depth,
|
|
194
|
+
max_nodes=max_nodes
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
nodes = []
|
|
198
|
+
relationships = []
|
|
199
|
+
|
|
200
|
+
for record in result:
|
|
201
|
+
path = record["path"]
|
|
202
|
+
for node in path.nodes:
|
|
203
|
+
nodes.append({
|
|
204
|
+
"id": node.element_id,
|
|
205
|
+
"labels": list(node.labels),
|
|
206
|
+
"properties": dict(node)
|
|
207
|
+
})
|
|
208
|
+
|
|
209
|
+
for rel in path.relationships:
|
|
210
|
+
relationships.append({
|
|
211
|
+
"type": rel.type,
|
|
212
|
+
"start": rel.start_node.element_id,
|
|
213
|
+
"end": rel.end_node.element_id,
|
|
214
|
+
"properties": dict(rel)
|
|
215
|
+
})
|
|
216
|
+
|
|
217
|
+
return {
|
|
218
|
+
"nodes": nodes,
|
|
219
|
+
"relationships": relationships
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
def _serialize_path(self, path) -> Dict[str, Any]:
|
|
223
|
+
"""Serialize Neo4j path to dict"""
|
|
224
|
+
nodes = [
|
|
225
|
+
{
|
|
226
|
+
"id": node.element_id,
|
|
227
|
+
"labels": list(node.labels),
|
|
228
|
+
"properties": dict(node)
|
|
229
|
+
}
|
|
230
|
+
for node in path.nodes
|
|
231
|
+
]
|
|
232
|
+
|
|
233
|
+
relationships = [
|
|
234
|
+
{
|
|
235
|
+
"type": rel.type,
|
|
236
|
+
"properties": dict(rel)
|
|
237
|
+
}
|
|
238
|
+
for rel in path.relationships
|
|
239
|
+
]
|
|
240
|
+
|
|
241
|
+
return {
|
|
242
|
+
"nodes": nodes,
|
|
243
|
+
"relationships": relationships
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
class SupplyChainAnalyzer:
|
|
247
|
+
def __init__(self, graph_manager: GraphManager, openai_api_key: str):
|
|
248
|
+
self.graph = graph_manager
|
|
249
|
+
self.client = openai.OpenAI(api_key=openai_api_key)
|
|
250
|
+
|
|
251
|
+
def extract_entities(self, query: str) -> List[Dict[str, Any]]:
|
|
252
|
+
"""Extract entities from query using LLM"""
|
|
253
|
+
response = self.client.chat.completions.create(
|
|
254
|
+
model="gpt-4o",
|
|
255
|
+
messages=[
|
|
256
|
+
{
|
|
257
|
+
"role": "system",
|
|
258
|
+
"content": """Extract entities from the query.
|
|
259
|
+
|
|
260
|
+
Entity types: SUPPLIER, PRODUCT, WAREHOUSE, CUSTOMER, ORDER
|
|
261
|
+
|
|
262
|
+
Return JSON array of entities:
|
|
263
|
+
[{"type": "ORDER", "value": "#12345"}, ...]"""
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"role": "user",
|
|
267
|
+
"content": query
|
|
268
|
+
}
|
|
269
|
+
],
|
|
270
|
+
response_format={"type": "json_object"}
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
import json
|
|
274
|
+
result = json.loads(response.choices[0].message.content)
|
|
275
|
+
return result.get("entities", [])
|
|
276
|
+
|
|
277
|
+
def analyze_query(self, query: str) -> Dict[str, Any]:
|
|
278
|
+
"""Analyze supply chain query using graph"""
|
|
279
|
+
# Extract entities from query
|
|
280
|
+
entities = self.extract_entities(query)
|
|
281
|
+
|
|
282
|
+
if not entities:
|
|
283
|
+
return {"answer": "No entities found in query", "graph_context": None}
|
|
284
|
+
|
|
285
|
+
# Get graph context for entities
|
|
286
|
+
graph_contexts = []
|
|
287
|
+
for entity in entities:
|
|
288
|
+
# Find entity in graph
|
|
289
|
+
entity_id = self._find_entity_id(entity)
|
|
290
|
+
|
|
291
|
+
if entity_id:
|
|
292
|
+
# Traverse graph from entity
|
|
293
|
+
subgraph = self.graph.traverse_from_entity(
|
|
294
|
+
entity_id=entity_id,
|
|
295
|
+
max_depth=3,
|
|
296
|
+
max_nodes=100
|
|
297
|
+
)
|
|
298
|
+
graph_contexts.append(subgraph)
|
|
299
|
+
|
|
300
|
+
# Serialize graph to natural language
|
|
301
|
+
graph_description = self._serialize_graph_to_text(graph_contexts)
|
|
302
|
+
|
|
303
|
+
# Generate answer using LLM
|
|
304
|
+
answer = self._generate_answer(query, graph_description)
|
|
305
|
+
|
|
306
|
+
return {
|
|
307
|
+
"answer": answer,
|
|
308
|
+
"graph_context": graph_contexts,
|
|
309
|
+
"entities_found": entities
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
def _find_entity_id(self, entity: Dict[str, Any]) -> Optional[str]:
|
|
313
|
+
"""Find entity ID in graph"""
|
|
314
|
+
with self.graph.driver.session() as session:
|
|
315
|
+
result = session.run(
|
|
316
|
+
f"""
|
|
317
|
+
MATCH (e:{entity['type']})
|
|
318
|
+
WHERE e.id = $value OR e.name = $value
|
|
319
|
+
RETURN elementId(e) as id
|
|
320
|
+
LIMIT 1
|
|
321
|
+
""",
|
|
322
|
+
value=entity["value"]
|
|
323
|
+
)
|
|
324
|
+
|
|
325
|
+
record = result.single()
|
|
326
|
+
return record["id"] if record else None
|
|
327
|
+
|
|
328
|
+
def _serialize_graph_to_text(self, graph_contexts: List[Dict[str, Any]]) -> str:
|
|
329
|
+
"""Convert graph structure to natural language"""
|
|
330
|
+
parts = []
|
|
331
|
+
|
|
332
|
+
for i, context in enumerate(graph_contexts, 1):
|
|
333
|
+
parts.append(f"=== Subgraph {i} ===")
|
|
334
|
+
|
|
335
|
+
# Describe nodes
|
|
336
|
+
parts.append("Entities:")
|
|
337
|
+
for node in context["nodes"][:20]: # Limit to 20 nodes
|
|
338
|
+
labels = ", ".join(node["labels"])
|
|
339
|
+
props = ", ".join(f"{k}={v}" for k, v in node["properties"].items())
|
|
340
|
+
parts.append(f" - {labels}: {props}")
|
|
341
|
+
|
|
342
|
+
# Describe relationships
|
|
343
|
+
parts.append("\nRelationships:")
|
|
344
|
+
for rel in context["relationships"][:20]: # Limit to 20 relationships
|
|
345
|
+
parts.append(f" - {rel['type']}")
|
|
346
|
+
|
|
347
|
+
parts.append("")
|
|
348
|
+
|
|
349
|
+
return "\n".join(parts)
|
|
350
|
+
|
|
351
|
+
def _generate_answer(self, query: str, graph_context: str) -> str:
|
|
352
|
+
"""Generate answer using graph context"""
|
|
353
|
+
response = self.client.chat.completions.create(
|
|
354
|
+
model="gpt-4o",
|
|
355
|
+
messages=[
|
|
356
|
+
{
|
|
357
|
+
"role": "system",
|
|
358
|
+
"content": """You are a supply chain analyst.
|
|
359
|
+
|
|
360
|
+
Use the provided graph context to answer questions about:
|
|
361
|
+
- Supplier relationships
|
|
362
|
+
- Product availability
|
|
363
|
+
- Warehouse locations
|
|
364
|
+
- Order fulfillment
|
|
365
|
+
- Dependencies
|
|
366
|
+
|
|
367
|
+
Be specific and cite entities from the graph."""
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"role": "user",
|
|
371
|
+
"content": f"""Graph Context:
|
|
372
|
+
{graph_context}
|
|
373
|
+
|
|
374
|
+
Query: {query}
|
|
375
|
+
|
|
376
|
+
Answer:"""
|
|
377
|
+
}
|
|
378
|
+
],
|
|
379
|
+
temperature=0.3
|
|
380
|
+
)
|
|
381
|
+
|
|
382
|
+
return response.choices[0].message.content
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
## Usage Example
|
|
388
|
+
|
|
389
|
+
```python
|
|
390
|
+
# Initialize graph manager
|
|
391
|
+
graph = GraphManager(
|
|
392
|
+
uri="bolt://localhost:7687",
|
|
393
|
+
user="neo4j",
|
|
394
|
+
password="password"
|
|
395
|
+
)
|
|
396
|
+
|
|
397
|
+
# Create sample supply chain graph
|
|
398
|
+
supplier_id = graph.create_entity("SUPPLIER", {"id": "SUP-001", "name": "Acme Corp"})
|
|
399
|
+
product_id = graph.create_entity("PRODUCT", {"id": "PROD-123", "name": "Widget A"})
|
|
400
|
+
warehouse_id = graph.create_entity("WAREHOUSE", {"id": "WH-001", "location": "New York"})
|
|
401
|
+
order_id = graph.create_entity("ORDER", {"id": "#12345", "status": "pending"})
|
|
402
|
+
|
|
403
|
+
# Create relationships
|
|
404
|
+
graph.create_relationship(supplier_id, product_id, "SUPPLIES", {"quantity": 1000})
|
|
405
|
+
graph.create_relationship(product_id, warehouse_id, "STORED_IN", {"quantity": 500})
|
|
406
|
+
graph.create_relationship(order_id, product_id, "CONTAINS", {"quantity": 10})
|
|
407
|
+
|
|
408
|
+
# Initialize analyzer
|
|
409
|
+
analyzer = SupplyChainAnalyzer(graph, "your-openai-key")
|
|
410
|
+
|
|
411
|
+
# Analyze query
|
|
412
|
+
result = analyzer.analyze_query("Which suppliers can fulfill order #12345?")
|
|
413
|
+
|
|
414
|
+
print(f"Answer: {result['answer']}")
|
|
415
|
+
print(f"\nEntities Found: {result['entities_found']}")
|
|
416
|
+
print(f"Graph Nodes: {len(result['graph_context'][0]['nodes']) if result['graph_context'] else 0}")
|
|
417
|
+
|
|
418
|
+
# Clean up
|
|
419
|
+
graph.close()
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## Key Features
|
|
425
|
+
|
|
426
|
+
### 1. Entity Extraction
|
|
427
|
+
- LLM-based entity recognition
|
|
428
|
+
- Support for multiple entity types
|
|
429
|
+
- Flexible matching (ID or name)
|
|
430
|
+
|
|
431
|
+
### 2. Graph Traversal
|
|
432
|
+
- Bidirectional BFS algorithm
|
|
433
|
+
- Configurable depth and node limits
|
|
434
|
+
- Path finding between entities
|
|
435
|
+
|
|
436
|
+
### 3. Relationship Modeling
|
|
437
|
+
- Typed relationships (SUPPLIES, STORED_IN, etc.)
|
|
438
|
+
- Relationship properties
|
|
439
|
+
- Multi-hop reasoning
|
|
440
|
+
|
|
441
|
+
### 4. Context Serialization
|
|
442
|
+
- Graph → Natural language conversion
|
|
443
|
+
- Structured entity descriptions
|
|
444
|
+
- Relationship summaries
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## Testing
|
|
449
|
+
|
|
450
|
+
```python
|
|
451
|
+
import pytest
|
|
452
|
+
|
|
453
|
+
def test_entity_creation():
|
|
454
|
+
graph = GraphManager("bolt://localhost:7687", "neo4j", "password")
|
|
455
|
+
|
|
456
|
+
entity_id = graph.create_entity("SUPPLIER", {"id": "TEST-001", "name": "Test Corp"})
|
|
457
|
+
assert entity_id is not None
|
|
458
|
+
|
|
459
|
+
graph.close()
|
|
460
|
+
|
|
461
|
+
def test_graph_traversal():
|
|
462
|
+
graph = GraphManager("bolt://localhost:7687", "neo4j", "password")
|
|
463
|
+
|
|
464
|
+
# Create test entities
|
|
465
|
+
supplier_id = graph.create_entity("SUPPLIER", {"id": "SUP-TEST"})
|
|
466
|
+
product_id = graph.create_entity("PRODUCT", {"id": "PROD-TEST"})
|
|
467
|
+
graph.create_relationship(supplier_id, product_id, "SUPPLIES")
|
|
468
|
+
|
|
469
|
+
# Traverse
|
|
470
|
+
subgraph = graph.traverse_from_entity(supplier_id, max_depth=2)
|
|
471
|
+
|
|
472
|
+
assert len(subgraph["nodes"]) > 0
|
|
473
|
+
assert len(subgraph["relationships"]) > 0
|
|
474
|
+
|
|
475
|
+
graph.close()
|
|
476
|
+
|
|
477
|
+
def test_entity_extraction():
|
|
478
|
+
analyzer = SupplyChainAnalyzer(None, "your-openai-key")
|
|
479
|
+
|
|
480
|
+
entities = analyzer.extract_entities("Which suppliers can fulfill order #12345?")
|
|
481
|
+
|
|
482
|
+
assert len(entities) > 0
|
|
483
|
+
assert any(e["type"] == "ORDER" for e in entities)
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
---
|
|
487
|
+
|
|
488
|
+
## Best Practices
|
|
489
|
+
|
|
490
|
+
1. **Entity Modeling**: Define clear entity types and properties
|
|
491
|
+
2. **Relationship Types**: Use descriptive relationship names
|
|
492
|
+
3. **Graph Indexing**: Index frequently queried properties
|
|
493
|
+
4. **Traversal Limits**: Set appropriate depth and node limits
|
|
494
|
+
5. **Caching**: Cache frequently accessed subgraphs
|
|
495
|
+
6. **Batch Operations**: Batch entity/relationship creation
|
|
496
|
+
7. **Schema Validation**: Validate graph schema consistency
|
|
497
|
+
8. **Monitoring**: Track query performance and graph size
|
|
498
|
+
|
|
499
|
+
---
|
|
500
|
+
|
|
501
|
+
## Performance Optimization
|
|
502
|
+
|
|
503
|
+
- **Indexing**: Create indexes on entity IDs and names
|
|
504
|
+
- **Query Optimization**: Use Cypher query profiling
|
|
505
|
+
- **Connection Pooling**: Reuse Neo4j connections
|
|
506
|
+
- **Caching**: Cache subgraph results
|
|
507
|
+
- **Pagination**: Paginate large result sets
|
|
508
|
+
- **Parallel Queries**: Execute independent queries in parallel
|
|
509
|
+
|
|
510
|
+
---
|
|
511
|
+
|
|
512
|
+
## Security
|
|
513
|
+
|
|
514
|
+
- **Access Control**: Implement role-based access control
|
|
515
|
+
- **Query Validation**: Sanitize Cypher queries
|
|
516
|
+
- **Encryption**: Encrypt graph data at rest
|
|
517
|
+
- **Audit Logging**: Log all graph modifications
|
|
518
|
+
- **Rate Limiting**: Limit traversal depth and nodes per query
|
|
519
|
+
```
|
|
520
|
+
|