@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,570 @@
|
|
|
1
|
+
# Hybrid MCP Example: Research Assistant
|
|
2
|
+
|
|
3
|
+
## Use Case
|
|
4
|
+
|
|
5
|
+
An AI research assistant that combines multiple memory types for complex research tasks: token-based for document analysis, vector-based for knowledge retrieval, and state-based for workflow tracking.
|
|
6
|
+
|
|
7
|
+
**Challenges**:
|
|
8
|
+
- Manage multiple memory types simultaneously
|
|
9
|
+
- Coordinate between different context sources
|
|
10
|
+
- Maintain consistency across memory systems
|
|
11
|
+
- Optimize for both retrieval and generation
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Configuration
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"mcp": {
|
|
20
|
+
"type": "hybrid",
|
|
21
|
+
"components": {
|
|
22
|
+
"token": {
|
|
23
|
+
"enabled": true,
|
|
24
|
+
"maxContextWindow": 200000,
|
|
25
|
+
"compressionThreshold": 0.85
|
|
26
|
+
},
|
|
27
|
+
"vector": {
|
|
28
|
+
"enabled": true,
|
|
29
|
+
"embeddingModel": "voyage-3-large",
|
|
30
|
+
"vectorStore": "pinecone",
|
|
31
|
+
"topK": 10
|
|
32
|
+
},
|
|
33
|
+
"state": {
|
|
34
|
+
"enabled": true,
|
|
35
|
+
"backend": "redis",
|
|
36
|
+
"ttl": 86400
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"orchestration": {
|
|
40
|
+
"strategy": "priority_based",
|
|
41
|
+
"priorities": {
|
|
42
|
+
"vector": 1,
|
|
43
|
+
"state": 2,
|
|
44
|
+
"token": 3
|
|
45
|
+
},
|
|
46
|
+
"contextBudget": {
|
|
47
|
+
"vector": 0.4,
|
|
48
|
+
"state": 0.3,
|
|
49
|
+
"token": 0.3
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Architecture
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
62
|
+
│ Research Query │
|
|
63
|
+
└─────────────────────────────────────────────────────────────┘
|
|
64
|
+
│
|
|
65
|
+
▼
|
|
66
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
67
|
+
│ Context Orchestrator │
|
|
68
|
+
│ ┌──────────────────────────────────────────────────────┐ │
|
|
69
|
+
│ │ Priority-based routing │ │
|
|
70
|
+
│ │ Context budget allocation │ │
|
|
71
|
+
│ │ Memory coordination │ │
|
|
72
|
+
│ └──────────────────────────────────────────────────────┘ │
|
|
73
|
+
└─────────────────────────────────────────────────────────────┘
|
|
74
|
+
│ │ │
|
|
75
|
+
▼ ▼ ▼
|
|
76
|
+
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
77
|
+
│ Vector MCP │ │ State MCP │ │ Token MCP │
|
|
78
|
+
│ │ │ │ │ │
|
|
79
|
+
│ Knowledge │ │ Workflow │ │ Document │
|
|
80
|
+
│ Retrieval │ │ State │ │ Analysis │
|
|
81
|
+
│ │ │ │ │ │
|
|
82
|
+
│ (40% budget) │ │ (30% budget) │ │ (30% budget) │
|
|
83
|
+
└──────────────┘ └──────────────┘ └──────────────┘
|
|
84
|
+
│ │ │
|
|
85
|
+
└────────────────────┴────────────────────┘
|
|
86
|
+
│
|
|
87
|
+
▼
|
|
88
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
89
|
+
│ Unified Context │
|
|
90
|
+
│ - Retrieved knowledge (vector) │
|
|
91
|
+
│ - Workflow state (state) │
|
|
92
|
+
│ - Document excerpts (token) │
|
|
93
|
+
└─────────────────────────────────────────────────────────────┘
|
|
94
|
+
│
|
|
95
|
+
▼
|
|
96
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
97
|
+
│ LLM Generation │
|
|
98
|
+
│ Unified Context → GPT-4o → Research Output │
|
|
99
|
+
└─────────────────────────────────────────────────────────────┘
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Implementation
|
|
105
|
+
|
|
106
|
+
### Step 1: Context Orchestrator
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
from typing import Dict, Any, List, Optional
|
|
110
|
+
from enum import Enum
|
|
111
|
+
import redis
|
|
112
|
+
import voyageai
|
|
113
|
+
from pinecone import Pinecone
|
|
114
|
+
import openai
|
|
115
|
+
import tiktoken
|
|
116
|
+
|
|
117
|
+
class MemoryType(Enum):
|
|
118
|
+
VECTOR = "vector"
|
|
119
|
+
STATE = "state"
|
|
120
|
+
TOKEN = "token"
|
|
121
|
+
|
|
122
|
+
class ContextOrchestrator:
|
|
123
|
+
def __init__(self, config: Dict[str, Any]):
|
|
124
|
+
self.config = config
|
|
125
|
+
self.tokenizer = tiktoken.encoding_for_model("gpt-4o")
|
|
126
|
+
|
|
127
|
+
# Initialize memory components
|
|
128
|
+
self.vector_memory = VectorMemory(config["components"]["vector"])
|
|
129
|
+
self.state_memory = StateMemory(config["components"]["state"])
|
|
130
|
+
self.token_memory = TokenMemory(config["components"]["token"])
|
|
131
|
+
|
|
132
|
+
# Context budget allocation
|
|
133
|
+
self.context_budget = config["orchestration"]["contextBudget"]
|
|
134
|
+
self.max_context_window = config["components"]["token"]["maxContextWindow"]
|
|
135
|
+
|
|
136
|
+
def allocate_context_budget(self) -> Dict[MemoryType, int]:
|
|
137
|
+
"""Allocate token budget to each memory type"""
|
|
138
|
+
total_budget = self.max_context_window
|
|
139
|
+
|
|
140
|
+
return {
|
|
141
|
+
MemoryType.VECTOR: int(total_budget * self.context_budget["vector"]),
|
|
142
|
+
MemoryType.STATE: int(total_budget * self.context_budget["state"]),
|
|
143
|
+
MemoryType.TOKEN: int(total_budget * self.context_budget["token"])
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
def gather_context(self, query: str, session_id: str) -> Dict[str, Any]:
|
|
147
|
+
"""Gather context from all memory types"""
|
|
148
|
+
budget = self.allocate_context_budget()
|
|
149
|
+
|
|
150
|
+
# Retrieve from vector memory (knowledge base)
|
|
151
|
+
vector_context = self.vector_memory.retrieve(
|
|
152
|
+
query=query,
|
|
153
|
+
max_tokens=budget[MemoryType.VECTOR]
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
# Retrieve from state memory (workflow state)
|
|
157
|
+
state_context = self.state_memory.get_state(
|
|
158
|
+
session_id=session_id,
|
|
159
|
+
max_tokens=budget[MemoryType.STATE]
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
# Retrieve from token memory (document analysis)
|
|
163
|
+
token_context = self.token_memory.get_relevant_chunks(
|
|
164
|
+
query=query,
|
|
165
|
+
max_tokens=budget[MemoryType.TOKEN]
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
return {
|
|
169
|
+
"vector": vector_context,
|
|
170
|
+
"state": state_context,
|
|
171
|
+
"token": token_context
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
def build_unified_context(self, contexts: Dict[str, Any]) -> str:
|
|
175
|
+
"""Build unified context from all memory types"""
|
|
176
|
+
parts = []
|
|
177
|
+
|
|
178
|
+
# Add vector context (knowledge base)
|
|
179
|
+
if contexts["vector"]:
|
|
180
|
+
parts.append("=== Knowledge Base ===")
|
|
181
|
+
for i, doc in enumerate(contexts["vector"]["documents"], 1):
|
|
182
|
+
parts.append(f"[{i}] {doc['text']}")
|
|
183
|
+
parts.append(f"Source: {doc['metadata'].get('source', 'Unknown')}")
|
|
184
|
+
parts.append("")
|
|
185
|
+
|
|
186
|
+
# Add state context (workflow)
|
|
187
|
+
if contexts["state"]:
|
|
188
|
+
parts.append("=== Research Workflow ===")
|
|
189
|
+
parts.append(f"Current Phase: {contexts['state']['phase']}")
|
|
190
|
+
parts.append(f"Completed Steps: {', '.join(contexts['state']['completed_steps'])}")
|
|
191
|
+
parts.append(f"Next Steps: {', '.join(contexts['state']['next_steps'])}")
|
|
192
|
+
parts.append("")
|
|
193
|
+
|
|
194
|
+
# Add token context (document excerpts)
|
|
195
|
+
if contexts["token"]:
|
|
196
|
+
parts.append("=== Document Analysis ===")
|
|
197
|
+
for i, chunk in enumerate(contexts["token"]["chunks"], 1):
|
|
198
|
+
parts.append(f"[{i}] {chunk['text']}")
|
|
199
|
+
parts.append(f"Document: {chunk['metadata'].get('document', 'Unknown')}")
|
|
200
|
+
parts.append("")
|
|
201
|
+
|
|
202
|
+
return "\n".join(parts)
|
|
203
|
+
|
|
204
|
+
class VectorMemory:
|
|
205
|
+
def __init__(self, config: Dict[str, Any]):
|
|
206
|
+
self.voyage_client = voyageai.Client(api_key=config.get("voyageApiKey"))
|
|
207
|
+
self.pc = Pinecone(api_key=config.get("pineconeApiKey"))
|
|
208
|
+
self.index = self.pc.Index(config.get("indexName", "research-kb"))
|
|
209
|
+
self.top_k = config.get("topK", 10)
|
|
210
|
+
self.tokenizer = tiktoken.encoding_for_model("gpt-4o")
|
|
211
|
+
|
|
212
|
+
def retrieve(self, query: str, max_tokens: int) -> Dict[str, Any]:
|
|
213
|
+
"""Retrieve relevant documents within token budget"""
|
|
214
|
+
# Embed query
|
|
215
|
+
query_embedding = self.voyage_client.embed(
|
|
216
|
+
texts=[query],
|
|
217
|
+
model="voyage-3-large",
|
|
218
|
+
input_type="query"
|
|
219
|
+
).embeddings[0]
|
|
220
|
+
|
|
221
|
+
# Vector search
|
|
222
|
+
results = self.index.query(
|
|
223
|
+
vector=query_embedding,
|
|
224
|
+
top_k=self.top_k,
|
|
225
|
+
include_metadata=True
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
# Filter by token budget
|
|
229
|
+
documents = []
|
|
230
|
+
total_tokens = 0
|
|
231
|
+
|
|
232
|
+
for match in results.matches:
|
|
233
|
+
text = match.metadata["text"]
|
|
234
|
+
tokens = len(self.tokenizer.encode(text))
|
|
235
|
+
|
|
236
|
+
if total_tokens + tokens <= max_tokens:
|
|
237
|
+
documents.append({
|
|
238
|
+
"text": text,
|
|
239
|
+
"score": match.score,
|
|
240
|
+
"metadata": {k: v for k, v in match.metadata.items() if k != "text"}
|
|
241
|
+
})
|
|
242
|
+
total_tokens += tokens
|
|
243
|
+
else:
|
|
244
|
+
break
|
|
245
|
+
|
|
246
|
+
return {
|
|
247
|
+
"documents": documents,
|
|
248
|
+
"total_tokens": total_tokens
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
class StateMemory:
|
|
252
|
+
def __init__(self, config: Dict[str, Any]):
|
|
253
|
+
self.redis = redis.from_url(config.get("redisUrl", "redis://localhost:6379"))
|
|
254
|
+
self.ttl = config.get("ttl", 86400)
|
|
255
|
+
self.tokenizer = tiktoken.encoding_for_model("gpt-4o")
|
|
256
|
+
|
|
257
|
+
def get_state(self, session_id: str, max_tokens: int) -> Optional[Dict[str, Any]]:
|
|
258
|
+
"""Retrieve workflow state within token budget"""
|
|
259
|
+
state_key = f"research:{session_id}:state"
|
|
260
|
+
state_data = self.redis.get(state_key)
|
|
261
|
+
|
|
262
|
+
if not state_data:
|
|
263
|
+
return None
|
|
264
|
+
|
|
265
|
+
import json
|
|
266
|
+
state = json.loads(state_data)
|
|
267
|
+
|
|
268
|
+
# Truncate if exceeds budget
|
|
269
|
+
state_text = json.dumps(state)
|
|
270
|
+
tokens = len(self.tokenizer.encode(state_text))
|
|
271
|
+
|
|
272
|
+
if tokens > max_tokens:
|
|
273
|
+
# Truncate history
|
|
274
|
+
state["history"] = state.get("history", [])[-5:]
|
|
275
|
+
|
|
276
|
+
return state
|
|
277
|
+
|
|
278
|
+
def update_state(self, session_id: str, state: Dict[str, Any]) -> None:
|
|
279
|
+
"""Update workflow state"""
|
|
280
|
+
import json
|
|
281
|
+
state_key = f"research:{session_id}:state"
|
|
282
|
+
state_data = json.dumps(state)
|
|
283
|
+
self.redis.setex(state_key, self.ttl, state_data)
|
|
284
|
+
|
|
285
|
+
class TokenMemory:
|
|
286
|
+
def __init__(self, config: Dict[str, Any]):
|
|
287
|
+
self.max_context_window = config.get("maxContextWindow", 200000)
|
|
288
|
+
self.tokenizer = tiktoken.encoding_for_model("gpt-4o")
|
|
289
|
+
self.documents = {} # In-memory storage (use persistent storage in production)
|
|
290
|
+
|
|
291
|
+
def add_document(self, doc_id: str, text: str, metadata: Dict[str, Any]) -> None:
|
|
292
|
+
"""Add document to token memory"""
|
|
293
|
+
self.documents[doc_id] = {
|
|
294
|
+
"text": text,
|
|
295
|
+
"metadata": metadata,
|
|
296
|
+
"chunks": self._chunk_document(text)
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
def _chunk_document(self, text: str, chunk_size: int = 4096) -> List[Dict[str, Any]]:
|
|
300
|
+
"""Chunk document for retrieval"""
|
|
301
|
+
sentences = text.split('. ')
|
|
302
|
+
chunks = []
|
|
303
|
+
current_chunk = []
|
|
304
|
+
current_tokens = 0
|
|
305
|
+
|
|
306
|
+
for sentence in sentences:
|
|
307
|
+
sentence_tokens = len(self.tokenizer.encode(sentence))
|
|
308
|
+
|
|
309
|
+
if current_tokens + sentence_tokens > chunk_size:
|
|
310
|
+
chunk_text = '. '.join(current_chunk) + '.'
|
|
311
|
+
chunks.append({
|
|
312
|
+
"text": chunk_text,
|
|
313
|
+
"tokens": current_tokens
|
|
314
|
+
})
|
|
315
|
+
current_chunk = [sentence]
|
|
316
|
+
current_tokens = sentence_tokens
|
|
317
|
+
else:
|
|
318
|
+
current_chunk.append(sentence)
|
|
319
|
+
current_tokens += sentence_tokens
|
|
320
|
+
|
|
321
|
+
if current_chunk:
|
|
322
|
+
chunk_text = '. '.join(current_chunk) + '.'
|
|
323
|
+
chunks.append({
|
|
324
|
+
"text": chunk_text,
|
|
325
|
+
"tokens": current_tokens
|
|
326
|
+
})
|
|
327
|
+
|
|
328
|
+
return chunks
|
|
329
|
+
|
|
330
|
+
def get_relevant_chunks(self, query: str, max_tokens: int) -> Dict[str, Any]:
|
|
331
|
+
"""Get relevant document chunks within token budget"""
|
|
332
|
+
# Simple keyword matching (use semantic search in production)
|
|
333
|
+
query_terms = set(query.lower().split())
|
|
334
|
+
|
|
335
|
+
scored_chunks = []
|
|
336
|
+
for doc_id, doc in self.documents.items():
|
|
337
|
+
for chunk in doc["chunks"]:
|
|
338
|
+
chunk_terms = set(chunk["text"].lower().split())
|
|
339
|
+
overlap = len(query_terms & chunk_terms)
|
|
340
|
+
|
|
341
|
+
if overlap > 0:
|
|
342
|
+
scored_chunks.append({
|
|
343
|
+
"text": chunk["text"],
|
|
344
|
+
"score": overlap,
|
|
345
|
+
"tokens": chunk["tokens"],
|
|
346
|
+
"metadata": {"document": doc_id, **doc["metadata"]}
|
|
347
|
+
})
|
|
348
|
+
|
|
349
|
+
# Sort by score and filter by budget
|
|
350
|
+
scored_chunks.sort(key=lambda x: x["score"], reverse=True)
|
|
351
|
+
|
|
352
|
+
selected_chunks = []
|
|
353
|
+
total_tokens = 0
|
|
354
|
+
|
|
355
|
+
for chunk in scored_chunks:
|
|
356
|
+
if total_tokens + chunk["tokens"] <= max_tokens:
|
|
357
|
+
selected_chunks.append(chunk)
|
|
358
|
+
total_tokens += chunk["tokens"]
|
|
359
|
+
else:
|
|
360
|
+
break
|
|
361
|
+
|
|
362
|
+
return {
|
|
363
|
+
"chunks": selected_chunks,
|
|
364
|
+
"total_tokens": total_tokens
|
|
365
|
+
}
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### Step 2: Research Assistant
|
|
369
|
+
|
|
370
|
+
```python
|
|
371
|
+
class ResearchAssistant:
|
|
372
|
+
def __init__(self, config: Dict[str, Any], openai_api_key: str):
|
|
373
|
+
self.orchestrator = ContextOrchestrator(config)
|
|
374
|
+
self.client = openai.OpenAI(api_key=openai_api_key)
|
|
375
|
+
|
|
376
|
+
def research(self, query: str, session_id: str) -> Dict[str, Any]:
|
|
377
|
+
"""Conduct research using hybrid MCP"""
|
|
378
|
+
# Gather context from all memory types
|
|
379
|
+
contexts = self.orchestrator.gather_context(query, session_id)
|
|
380
|
+
|
|
381
|
+
# Build unified context
|
|
382
|
+
unified_context = self.orchestrator.build_unified_context(contexts)
|
|
383
|
+
|
|
384
|
+
# Generate research output
|
|
385
|
+
messages = [
|
|
386
|
+
{
|
|
387
|
+
"role": "system",
|
|
388
|
+
"content": """You are a research assistant that synthesizes information from multiple sources.
|
|
389
|
+
|
|
390
|
+
Use the provided context from:
|
|
391
|
+
1. Knowledge Base - General knowledge and references
|
|
392
|
+
2. Research Workflow - Current research phase and progress
|
|
393
|
+
3. Document Analysis - Specific document excerpts
|
|
394
|
+
|
|
395
|
+
Provide comprehensive, well-cited answers."""
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
"role": "user",
|
|
399
|
+
"content": f"""Context:
|
|
400
|
+
{unified_context}
|
|
401
|
+
|
|
402
|
+
Research Query: {query}
|
|
403
|
+
|
|
404
|
+
Provide a comprehensive answer with citations."""
|
|
405
|
+
}
|
|
406
|
+
]
|
|
407
|
+
|
|
408
|
+
response = self.client.chat.completions.create(
|
|
409
|
+
model="gpt-4o",
|
|
410
|
+
messages=messages,
|
|
411
|
+
temperature=0.5
|
|
412
|
+
)
|
|
413
|
+
|
|
414
|
+
answer = response.choices[0].message.content
|
|
415
|
+
|
|
416
|
+
# Update workflow state
|
|
417
|
+
self._update_workflow_state(session_id, query, answer)
|
|
418
|
+
|
|
419
|
+
return {
|
|
420
|
+
"answer": answer,
|
|
421
|
+
"contexts_used": {
|
|
422
|
+
"vector": len(contexts["vector"].get("documents", [])),
|
|
423
|
+
"state": bool(contexts["state"]),
|
|
424
|
+
"token": len(contexts["token"].get("chunks", []))
|
|
425
|
+
},
|
|
426
|
+
"token_usage": {
|
|
427
|
+
"vector": contexts["vector"].get("total_tokens", 0),
|
|
428
|
+
"state": 0, # Calculate in production
|
|
429
|
+
"token": contexts["token"].get("total_tokens", 0)
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
def _update_workflow_state(self, session_id: str, query: str, answer: str) -> None:
|
|
434
|
+
"""Update research workflow state"""
|
|
435
|
+
current_state = self.orchestrator.state_memory.get_state(session_id, max_tokens=10000)
|
|
436
|
+
|
|
437
|
+
if not current_state:
|
|
438
|
+
current_state = {
|
|
439
|
+
"phase": "exploration",
|
|
440
|
+
"completed_steps": [],
|
|
441
|
+
"next_steps": [],
|
|
442
|
+
"history": []
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
# Add to history
|
|
446
|
+
current_state["history"].append({
|
|
447
|
+
"query": query,
|
|
448
|
+
"answer": answer[:200], # Truncate for storage
|
|
449
|
+
"timestamp": "2026-01-29T00:00:00Z"
|
|
450
|
+
})
|
|
451
|
+
|
|
452
|
+
# Update phase based on progress
|
|
453
|
+
if len(current_state["history"]) > 5:
|
|
454
|
+
current_state["phase"] = "synthesis"
|
|
455
|
+
|
|
456
|
+
self.orchestrator.state_memory.update_state(session_id, current_state)
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
---
|
|
460
|
+
|
|
461
|
+
## Usage Example
|
|
462
|
+
|
|
463
|
+
```python
|
|
464
|
+
# Configuration
|
|
465
|
+
config = {
|
|
466
|
+
"components": {
|
|
467
|
+
"token": {"maxContextWindow": 200000, "compressionThreshold": 0.85},
|
|
468
|
+
"vector": {
|
|
469
|
+
"voyageApiKey": "your-voyage-key",
|
|
470
|
+
"pineconeApiKey": "your-pinecone-key",
|
|
471
|
+
"indexName": "research-kb",
|
|
472
|
+
"topK": 10
|
|
473
|
+
},
|
|
474
|
+
"state": {"redisUrl": "redis://localhost:6379", "ttl": 86400}
|
|
475
|
+
},
|
|
476
|
+
"orchestration": {
|
|
477
|
+
"strategy": "priority_based",
|
|
478
|
+
"priorities": {"vector": 1, "state": 2, "token": 3},
|
|
479
|
+
"contextBudget": {"vector": 0.4, "state": 0.3, "token": 0.3}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
# Initialize assistant
|
|
484
|
+
assistant = ResearchAssistant(config, "your-openai-key")
|
|
485
|
+
|
|
486
|
+
# Add documents to token memory
|
|
487
|
+
assistant.orchestrator.token_memory.add_document(
|
|
488
|
+
"paper-1",
|
|
489
|
+
"This paper discusses machine learning techniques...",
|
|
490
|
+
{"source": "ml-paper.pdf", "year": 2024}
|
|
491
|
+
)
|
|
492
|
+
|
|
493
|
+
# Conduct research
|
|
494
|
+
result = assistant.research(
|
|
495
|
+
query="What are the latest advances in machine learning?",
|
|
496
|
+
session_id="research-session-001"
|
|
497
|
+
)
|
|
498
|
+
|
|
499
|
+
print(f"Answer: {result['answer']}")
|
|
500
|
+
print(f"\nContexts Used: {result['contexts_used']}")
|
|
501
|
+
print(f"Token Usage: {result['token_usage']}")
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
## Key Features
|
|
507
|
+
|
|
508
|
+
### 1. Multi-Memory Coordination
|
|
509
|
+
- Vector memory for knowledge retrieval
|
|
510
|
+
- State memory for workflow tracking
|
|
511
|
+
- Token memory for document analysis
|
|
512
|
+
|
|
513
|
+
### 2. Context Budget Allocation
|
|
514
|
+
- Proportional allocation (40% vector, 30% state, 30% token)
|
|
515
|
+
- Dynamic adjustment based on availability
|
|
516
|
+
- Token-aware filtering
|
|
517
|
+
|
|
518
|
+
### 3. Unified Context Building
|
|
519
|
+
- Structured context from all sources
|
|
520
|
+
- Clear section separation
|
|
521
|
+
- Source attribution
|
|
522
|
+
|
|
523
|
+
### 4. Workflow State Management
|
|
524
|
+
- Phase tracking (exploration → synthesis)
|
|
525
|
+
- History maintenance
|
|
526
|
+
- Progress monitoring
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
|
|
530
|
+
## Best Practices
|
|
531
|
+
|
|
532
|
+
1. **Budget Allocation**: Adjust based on use case requirements
|
|
533
|
+
2. **Priority Ordering**: Set priorities based on information value
|
|
534
|
+
3. **State Synchronization**: Keep state consistent across memories
|
|
535
|
+
4. **Error Handling**: Handle failures in individual memory components
|
|
536
|
+
5. **Monitoring**: Track usage and performance per memory type
|
|
537
|
+
6. **Caching**: Cache frequently accessed context
|
|
538
|
+
7. **Versioning**: Version state schema for compatibility
|
|
539
|
+
|
|
540
|
+
---
|
|
541
|
+
|
|
542
|
+
## Performance Optimization
|
|
543
|
+
|
|
544
|
+
- **Parallel Retrieval**: Fetch from all memories concurrently
|
|
545
|
+
- **Lazy Loading**: Load only required memory components
|
|
546
|
+
- **Connection Pooling**: Reuse connections to Redis/Pinecone
|
|
547
|
+
- **Batch Operations**: Batch updates to state memory
|
|
548
|
+
- **Compression**: Compress large state objects
|
|
549
|
+
|
|
550
|
+
---
|
|
551
|
+
|
|
552
|
+
## Testing
|
|
553
|
+
|
|
554
|
+
```python
|
|
555
|
+
def test_context_orchestration():
|
|
556
|
+
config = {...} # Test config
|
|
557
|
+
orchestrator = ContextOrchestrator(config)
|
|
558
|
+
|
|
559
|
+
# Test budget allocation
|
|
560
|
+
budget = orchestrator.allocate_context_budget()
|
|
561
|
+
assert sum(budget.values()) <= orchestrator.max_context_window
|
|
562
|
+
|
|
563
|
+
# Test context gathering
|
|
564
|
+
contexts = orchestrator.gather_context("test query", "session-1")
|
|
565
|
+
assert "vector" in contexts
|
|
566
|
+
assert "state" in contexts
|
|
567
|
+
assert "token" in contexts
|
|
568
|
+
```
|
|
569
|
+
```
|
|
570
|
+
|