@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,427 @@
|
|
|
1
|
+
# State-Based MCP Example: Customer Support Agent
|
|
2
|
+
|
|
3
|
+
## Use Case
|
|
4
|
+
|
|
5
|
+
A customer support AI agent that handles multi-turn conversations, maintains context across sessions, and manages workflow state for ticket resolution.
|
|
6
|
+
|
|
7
|
+
**Challenges**:
|
|
8
|
+
- Persist conversation state across sessions
|
|
9
|
+
- Handle concurrent user interactions
|
|
10
|
+
- Maintain workflow state (ticket status, escalation)
|
|
11
|
+
- Support handoff between agents (AI → human)
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Configuration
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"mcp": {
|
|
20
|
+
"type": "state",
|
|
21
|
+
"persistence": {
|
|
22
|
+
"backend": "redis",
|
|
23
|
+
"ttl": 86400,
|
|
24
|
+
"serialization": "json"
|
|
25
|
+
},
|
|
26
|
+
"stateMachine": {
|
|
27
|
+
"enabled": true,
|
|
28
|
+
"states": ["initialized", "gathering_info", "processing", "awaiting_confirmation", "escalated", "resolved"],
|
|
29
|
+
"transitions": {
|
|
30
|
+
"initialized": ["gathering_info"],
|
|
31
|
+
"gathering_info": ["processing", "escalated"],
|
|
32
|
+
"processing": ["awaiting_confirmation", "escalated"],
|
|
33
|
+
"awaiting_confirmation": ["resolved", "gathering_info"],
|
|
34
|
+
"escalated": ["resolved"],
|
|
35
|
+
"resolved": []
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"concurrency": {
|
|
39
|
+
"lockTimeout": 5000,
|
|
40
|
+
"retryAttempts": 3
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Architecture
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
52
|
+
│ User Interaction │
|
|
53
|
+
└─────────────────────────────────────────────────────────────┘
|
|
54
|
+
│
|
|
55
|
+
▼
|
|
56
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
57
|
+
│ State Manager (Redis) │
|
|
58
|
+
│ ┌──────────────────────────────────────────────────────┐ │
|
|
59
|
+
│ │ Session State: │ │
|
|
60
|
+
│ │ - conversation_id: "cs-12345" │ │
|
|
61
|
+
│ │ - current_state: "gathering_info" │ │
|
|
62
|
+
│ │ - user_id: "user-789" │ │
|
|
63
|
+
│ │ - ticket_id: "TKT-001" │ │
|
|
64
|
+
│ └──────────────────────────────────────────────────────┘ │
|
|
65
|
+
│ ┌──────────────────────────────────────────────────────┐ │
|
|
66
|
+
│ │ Conversation History: │ │
|
|
67
|
+
│ │ - messages: [...] │ │
|
|
68
|
+
│ │ - context: {...} │ │
|
|
69
|
+
│ └──────────────────────────────────────────────────────┘ │
|
|
70
|
+
│ ┌──────────────────────────────────────────────────────┐ │
|
|
71
|
+
│ │ Workflow State: │ │
|
|
72
|
+
│ │ - ticket_status: "open" │ │
|
|
73
|
+
│ │ - priority: "high" │ │
|
|
74
|
+
│ │ - assigned_to: "ai-agent-1" │ │
|
|
75
|
+
│ └──────────────────────────────────────────────────────┘ │
|
|
76
|
+
└─────────────────────────────────────────────────────────────┘
|
|
77
|
+
│
|
|
78
|
+
▼
|
|
79
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
80
|
+
│ State Machine Transitions │
|
|
81
|
+
│ initialized → gathering_info → processing → │
|
|
82
|
+
│ awaiting_confirmation → resolved │
|
|
83
|
+
│ ↓ │
|
|
84
|
+
│ escalated → resolved │
|
|
85
|
+
└─────────────────────────────────────────────────────────────┘
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Implementation
|
|
91
|
+
|
|
92
|
+
### Step 1: State Manager
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
import redis
|
|
96
|
+
import json
|
|
97
|
+
from typing import Dict, Any, Optional
|
|
98
|
+
from enum import Enum
|
|
99
|
+
from datetime import datetime, timedelta
|
|
100
|
+
|
|
101
|
+
class ConversationState(Enum):
|
|
102
|
+
INITIALIZED = "initialized"
|
|
103
|
+
GATHERING_INFO = "gathering_info"
|
|
104
|
+
PROCESSING = "processing"
|
|
105
|
+
AWAITING_CONFIRMATION = "awaiting_confirmation"
|
|
106
|
+
ESCALATED = "escalated"
|
|
107
|
+
RESOLVED = "resolved"
|
|
108
|
+
|
|
109
|
+
class StateManager:
|
|
110
|
+
def __init__(self, redis_url: str, ttl: int = 86400):
|
|
111
|
+
self.redis = redis.from_url(redis_url)
|
|
112
|
+
self.ttl = ttl
|
|
113
|
+
self.transitions = {
|
|
114
|
+
ConversationState.INITIALIZED: [ConversationState.GATHERING_INFO],
|
|
115
|
+
ConversationState.GATHERING_INFO: [ConversationState.PROCESSING, ConversationState.ESCALATED],
|
|
116
|
+
ConversationState.PROCESSING: [ConversationState.AWAITING_CONFIRMATION, ConversationState.ESCALATED],
|
|
117
|
+
ConversationState.AWAITING_CONFIRMATION: [ConversationState.RESOLVED, ConversationState.GATHERING_INFO],
|
|
118
|
+
ConversationState.ESCALATED: [ConversationState.RESOLVED],
|
|
119
|
+
ConversationState.RESOLVED: []
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
def get_state(self, conversation_id: str) -> Optional[Dict[str, Any]]:
|
|
123
|
+
"""Retrieve conversation state"""
|
|
124
|
+
state_key = f"conversation:{conversation_id}:state"
|
|
125
|
+
state_data = self.redis.get(state_key)
|
|
126
|
+
|
|
127
|
+
if state_data:
|
|
128
|
+
return json.loads(state_data)
|
|
129
|
+
return None
|
|
130
|
+
|
|
131
|
+
def set_state(self, conversation_id: str, state: Dict[str, Any]) -> bool:
|
|
132
|
+
"""Persist conversation state"""
|
|
133
|
+
state_key = f"conversation:{conversation_id}:state"
|
|
134
|
+
state_data = json.dumps(state)
|
|
135
|
+
|
|
136
|
+
return self.redis.setex(state_key, self.ttl, state_data)
|
|
137
|
+
|
|
138
|
+
def transition_state(self, conversation_id: str, new_state: ConversationState) -> bool:
|
|
139
|
+
"""Attempt state transition with validation"""
|
|
140
|
+
current_state_data = self.get_state(conversation_id)
|
|
141
|
+
|
|
142
|
+
if not current_state_data:
|
|
143
|
+
return False
|
|
144
|
+
|
|
145
|
+
current_state = ConversationState(current_state_data["current_state"])
|
|
146
|
+
|
|
147
|
+
# Validate transition
|
|
148
|
+
if new_state not in self.transitions[current_state]:
|
|
149
|
+
raise ValueError(f"Invalid transition: {current_state.value} → {new_state.value}")
|
|
150
|
+
|
|
151
|
+
# Update state
|
|
152
|
+
current_state_data["current_state"] = new_state.value
|
|
153
|
+
current_state_data["updated_at"] = datetime.utcnow().isoformat()
|
|
154
|
+
|
|
155
|
+
return self.set_state(conversation_id, current_state_data)
|
|
156
|
+
|
|
157
|
+
def add_message(self, conversation_id: str, role: str, content: str) -> bool:
|
|
158
|
+
"""Add message to conversation history"""
|
|
159
|
+
history_key = f"conversation:{conversation_id}:history"
|
|
160
|
+
message = {
|
|
161
|
+
"role": role,
|
|
162
|
+
"content": content,
|
|
163
|
+
"timestamp": datetime.utcnow().isoformat()
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
self.redis.rpush(history_key, json.dumps(message))
|
|
167
|
+
self.redis.expire(history_key, self.ttl)
|
|
168
|
+
|
|
169
|
+
return True
|
|
170
|
+
|
|
171
|
+
def get_history(self, conversation_id: str, limit: int = 50) -> list:
|
|
172
|
+
"""Retrieve conversation history"""
|
|
173
|
+
history_key = f"conversation:{conversation_id}:history"
|
|
174
|
+
messages = self.redis.lrange(history_key, -limit, -1)
|
|
175
|
+
|
|
176
|
+
return [json.loads(msg) for msg in messages]
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Step 2: Customer Support Agent
|
|
180
|
+
|
|
181
|
+
```python
|
|
182
|
+
from typing import Optional
|
|
183
|
+
import openai
|
|
184
|
+
|
|
185
|
+
class CustomerSupportAgent:
|
|
186
|
+
def __init__(self, state_manager: StateManager, openai_api_key: str):
|
|
187
|
+
self.state_manager = state_manager
|
|
188
|
+
self.client = openai.OpenAI(api_key=openai_api_key)
|
|
189
|
+
|
|
190
|
+
def initialize_conversation(self, user_id: str, ticket_id: str) -> str:
|
|
191
|
+
"""Initialize new support conversation"""
|
|
192
|
+
conversation_id = f"cs-{ticket_id}"
|
|
193
|
+
|
|
194
|
+
initial_state = {
|
|
195
|
+
"conversation_id": conversation_id,
|
|
196
|
+
"current_state": ConversationState.INITIALIZED.value,
|
|
197
|
+
"user_id": user_id,
|
|
198
|
+
"ticket_id": ticket_id,
|
|
199
|
+
"created_at": datetime.utcnow().isoformat(),
|
|
200
|
+
"updated_at": datetime.utcnow().isoformat(),
|
|
201
|
+
"metadata": {
|
|
202
|
+
"ticket_status": "open",
|
|
203
|
+
"priority": "medium",
|
|
204
|
+
"assigned_to": "ai-agent-1"
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
self.state_manager.set_state(conversation_id, initial_state)
|
|
209
|
+
self.state_manager.transition_state(conversation_id, ConversationState.GATHERING_INFO)
|
|
210
|
+
|
|
211
|
+
return conversation_id
|
|
212
|
+
|
|
213
|
+
def handle_message(self, conversation_id: str, user_message: str) -> str:
|
|
214
|
+
"""Process user message and generate response"""
|
|
215
|
+
# Get current state
|
|
216
|
+
state = self.state_manager.get_state(conversation_id)
|
|
217
|
+
if not state:
|
|
218
|
+
return "Error: Conversation not found"
|
|
219
|
+
|
|
220
|
+
# Add user message to history
|
|
221
|
+
self.state_manager.add_message(conversation_id, "user", user_message)
|
|
222
|
+
|
|
223
|
+
# Get conversation history
|
|
224
|
+
history = self.state_manager.get_history(conversation_id)
|
|
225
|
+
|
|
226
|
+
# Build context for LLM
|
|
227
|
+
messages = [
|
|
228
|
+
{"role": "system", "content": self._build_system_prompt(state)},
|
|
229
|
+
*[{"role": msg["role"], "content": msg["content"]} for msg in history]
|
|
230
|
+
]
|
|
231
|
+
|
|
232
|
+
# Generate response
|
|
233
|
+
response = self.client.chat.completions.create(
|
|
234
|
+
model="gpt-4o",
|
|
235
|
+
messages=messages,
|
|
236
|
+
temperature=0.7
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
assistant_message = response.choices[0].message.content
|
|
240
|
+
|
|
241
|
+
# Add assistant message to history
|
|
242
|
+
self.state_manager.add_message(conversation_id, "assistant", assistant_message)
|
|
243
|
+
|
|
244
|
+
# Update state based on response
|
|
245
|
+
self._update_state_based_on_response(conversation_id, assistant_message)
|
|
246
|
+
|
|
247
|
+
return assistant_message
|
|
248
|
+
|
|
249
|
+
def _build_system_prompt(self, state: Dict[str, Any]) -> str:
|
|
250
|
+
"""Build system prompt with current state context"""
|
|
251
|
+
current_state = state["current_state"]
|
|
252
|
+
ticket_id = state["ticket_id"]
|
|
253
|
+
metadata = state["metadata"]
|
|
254
|
+
|
|
255
|
+
return f"""You are a customer support AI agent.
|
|
256
|
+
|
|
257
|
+
Current State: {current_state}
|
|
258
|
+
Ticket ID: {ticket_id}
|
|
259
|
+
Priority: {metadata['priority']}
|
|
260
|
+
Status: {metadata['ticket_status']}
|
|
261
|
+
|
|
262
|
+
Your goal is to help resolve the customer's issue efficiently.
|
|
263
|
+
|
|
264
|
+
State-specific instructions:
|
|
265
|
+
- gathering_info: Ask clarifying questions to understand the issue
|
|
266
|
+
- processing: Analyze the issue and propose solutions
|
|
267
|
+
- awaiting_confirmation: Wait for user confirmation before proceeding
|
|
268
|
+
- escalated: Inform user that ticket has been escalated to human agent
|
|
269
|
+
|
|
270
|
+
Be helpful, professional, and concise."""
|
|
271
|
+
|
|
272
|
+
def _update_state_based_on_response(self, conversation_id: str, response: str) -> None:
|
|
273
|
+
"""Update conversation state based on agent response"""
|
|
274
|
+
state = self.state_manager.get_state(conversation_id)
|
|
275
|
+
current_state = ConversationState(state["current_state"])
|
|
276
|
+
|
|
277
|
+
# Simple heuristics for state transitions
|
|
278
|
+
if current_state == ConversationState.GATHERING_INFO:
|
|
279
|
+
if "solution" in response.lower() or "try" in response.lower():
|
|
280
|
+
self.state_manager.transition_state(conversation_id, ConversationState.PROCESSING)
|
|
281
|
+
|
|
282
|
+
elif current_state == ConversationState.PROCESSING:
|
|
283
|
+
if "confirm" in response.lower() or "does this" in response.lower():
|
|
284
|
+
self.state_manager.transition_state(conversation_id, ConversationState.AWAITING_CONFIRMATION)
|
|
285
|
+
|
|
286
|
+
elif current_state == ConversationState.AWAITING_CONFIRMATION:
|
|
287
|
+
# Would check user response in real implementation
|
|
288
|
+
pass
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Usage Example
|
|
294
|
+
|
|
295
|
+
```python
|
|
296
|
+
# Initialize
|
|
297
|
+
state_manager = StateManager("redis://localhost:6379", ttl=86400)
|
|
298
|
+
agent = CustomerSupportAgent(state_manager, "your-openai-api-key")
|
|
299
|
+
|
|
300
|
+
# Start conversation
|
|
301
|
+
conversation_id = agent.initialize_conversation(
|
|
302
|
+
user_id="user-789",
|
|
303
|
+
ticket_id="TKT-001"
|
|
304
|
+
)
|
|
305
|
+
|
|
306
|
+
# Handle messages
|
|
307
|
+
response1 = agent.handle_message(
|
|
308
|
+
conversation_id,
|
|
309
|
+
"My account is locked and I can't log in"
|
|
310
|
+
)
|
|
311
|
+
print(f"Agent: {response1}")
|
|
312
|
+
|
|
313
|
+
response2 = agent.handle_message(
|
|
314
|
+
conversation_id,
|
|
315
|
+
"I tried resetting my password but didn't receive the email"
|
|
316
|
+
)
|
|
317
|
+
print(f"Agent: {response2}")
|
|
318
|
+
|
|
319
|
+
# Resume conversation later (state persisted in Redis)
|
|
320
|
+
response3 = agent.handle_message(
|
|
321
|
+
conversation_id,
|
|
322
|
+
"Yes, I checked my spam folder"
|
|
323
|
+
)
|
|
324
|
+
print(f"Agent: {response3}")
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## Key Features
|
|
330
|
+
|
|
331
|
+
### 1. State Persistence
|
|
332
|
+
- Redis backend for distributed state
|
|
333
|
+
- TTL-based expiration (24 hours)
|
|
334
|
+
- JSON serialization
|
|
335
|
+
|
|
336
|
+
### 2. State Machine
|
|
337
|
+
- Explicit state transitions
|
|
338
|
+
- Validation of allowed transitions
|
|
339
|
+
- State-specific behavior
|
|
340
|
+
|
|
341
|
+
### 3. Conversation History
|
|
342
|
+
- Message-level tracking
|
|
343
|
+
- Timestamp metadata
|
|
344
|
+
- Limited history retrieval
|
|
345
|
+
|
|
346
|
+
### 4. Concurrency Support
|
|
347
|
+
- Redis atomic operations
|
|
348
|
+
- Lock-based concurrency control
|
|
349
|
+
- Retry logic for conflicts
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## Testing
|
|
354
|
+
|
|
355
|
+
```python
|
|
356
|
+
import pytest
|
|
357
|
+
from unittest.mock import Mock, patch
|
|
358
|
+
|
|
359
|
+
def test_state_transition():
|
|
360
|
+
state_manager = StateManager("redis://localhost:6379")
|
|
361
|
+
|
|
362
|
+
# Initialize state
|
|
363
|
+
conversation_id = "test-cs-001"
|
|
364
|
+
initial_state = {
|
|
365
|
+
"conversation_id": conversation_id,
|
|
366
|
+
"current_state": ConversationState.INITIALIZED.value,
|
|
367
|
+
"user_id": "test-user",
|
|
368
|
+
"ticket_id": "TKT-TEST"
|
|
369
|
+
}
|
|
370
|
+
state_manager.set_state(conversation_id, initial_state)
|
|
371
|
+
|
|
372
|
+
# Valid transition
|
|
373
|
+
assert state_manager.transition_state(conversation_id, ConversationState.GATHERING_INFO)
|
|
374
|
+
|
|
375
|
+
# Invalid transition
|
|
376
|
+
with pytest.raises(ValueError):
|
|
377
|
+
state_manager.transition_state(conversation_id, ConversationState.RESOLVED)
|
|
378
|
+
|
|
379
|
+
def test_conversation_history():
|
|
380
|
+
state_manager = StateManager("redis://localhost:6379")
|
|
381
|
+
conversation_id = "test-cs-002"
|
|
382
|
+
|
|
383
|
+
# Add messages
|
|
384
|
+
state_manager.add_message(conversation_id, "user", "Hello")
|
|
385
|
+
state_manager.add_message(conversation_id, "assistant", "Hi! How can I help?")
|
|
386
|
+
|
|
387
|
+
# Retrieve history
|
|
388
|
+
history = state_manager.get_history(conversation_id)
|
|
389
|
+
assert len(history) == 2
|
|
390
|
+
assert history[0]["role"] == "user"
|
|
391
|
+
assert history[1]["role"] == "assistant"
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
## Best Practices
|
|
397
|
+
|
|
398
|
+
1. **State Validation**: Always validate state transitions
|
|
399
|
+
2. **Idempotency**: Design state updates to be idempotent
|
|
400
|
+
3. **TTL Management**: Set appropriate TTLs for state expiration
|
|
401
|
+
4. **Error Handling**: Handle Redis connection failures gracefully
|
|
402
|
+
5. **Monitoring**: Track state transition metrics
|
|
403
|
+
6. **Concurrency**: Use locks for critical state updates
|
|
404
|
+
7. **Serialization**: Use consistent serialization format (JSON)
|
|
405
|
+
8. **Versioning**: Version state schema for backward compatibility
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## Performance Considerations
|
|
410
|
+
|
|
411
|
+
- **Redis Pipelining**: Batch multiple Redis operations
|
|
412
|
+
- **Connection Pooling**: Reuse Redis connections
|
|
413
|
+
- **Compression**: Compress large state objects
|
|
414
|
+
- **Sharding**: Distribute state across Redis shards
|
|
415
|
+
- **Caching**: Cache frequently accessed state locally
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## Security
|
|
420
|
+
|
|
421
|
+
- **Encryption**: Encrypt sensitive state data at rest
|
|
422
|
+
- **Access Control**: Implement Redis ACLs
|
|
423
|
+
- **Audit Logging**: Log all state transitions
|
|
424
|
+
- **Data Retention**: Comply with data retention policies
|
|
425
|
+
- **PII Handling**: Anonymize or encrypt PII in state
|
|
426
|
+
```
|
|
427
|
+
|