moai-adk 0.35.1__py3-none-any.whl
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.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +10 -0
- moai_adk/__main__.py +199 -0
- moai_adk/cli/__init__.py +6 -0
- moai_adk/cli/commands/__init__.py +17 -0
- moai_adk/cli/commands/analyze.py +116 -0
- moai_adk/cli/commands/doctor.py +272 -0
- moai_adk/cli/commands/init.py +372 -0
- moai_adk/cli/commands/language.py +248 -0
- moai_adk/cli/commands/status.py +104 -0
- moai_adk/cli/commands/update.py +2686 -0
- moai_adk/cli/main.py +13 -0
- moai_adk/cli/prompts/__init__.py +5 -0
- moai_adk/cli/prompts/init_prompts.py +219 -0
- moai_adk/cli/spec_status.py +263 -0
- moai_adk/cli/ui/__init__.py +44 -0
- moai_adk/cli/ui/progress.py +422 -0
- moai_adk/cli/ui/prompts.py +389 -0
- moai_adk/cli/ui/theme.py +129 -0
- moai_adk/cli/worktree/__init__.py +27 -0
- moai_adk/cli/worktree/__main__.py +31 -0
- moai_adk/cli/worktree/cli.py +683 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +493 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +422 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/__init__.py +1 -0
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +400 -0
- moai_adk/core/claude_integration.py +393 -0
- moai_adk/core/command_helpers.py +270 -0
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/__init__.py +19 -0
- moai_adk/core/config/auto_spec_config.py +340 -0
- moai_adk/core/config/migration.py +244 -0
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +273 -0
- moai_adk/core/diagnostics/__init__.py +19 -0
- moai_adk/core/diagnostics/slash_commands.py +159 -0
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +1902 -0
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +31 -0
- moai_adk/core/git/branch.py +25 -0
- moai_adk/core/git/branch_manager.py +129 -0
- moai_adk/core/git/checkpoint.py +134 -0
- moai_adk/core/git/commit.py +67 -0
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/event_detector.py +79 -0
- moai_adk/core/git/manager.py +216 -0
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +157 -0
- moai_adk/core/integration/integration_tester.py +226 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +305 -0
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_config_resolver.py +572 -0
- moai_adk/core/language_validator.py +543 -0
- moai_adk/core/mcp/setup.py +116 -0
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +605 -0
- moai_adk/core/migration/__init__.py +18 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +277 -0
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +209 -0
- moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
- moai_adk/core/migration/selective_restorer.py +470 -0
- moai_adk/core/migration/template_utils.py +74 -0
- moai_adk/core/migration/user_selection_ui.py +338 -0
- moai_adk/core/migration/version_detector.py +139 -0
- moai_adk/core/migration/version_migrator.py +228 -0
- moai_adk/core/performance/__init__.py +6 -0
- moai_adk/core/performance/cache_system.py +316 -0
- moai_adk/core/performance/parallel_processor.py +116 -0
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/__init__.py +1 -0
- moai_adk/core/project/backup_utils.py +70 -0
- moai_adk/core/project/checker.py +300 -0
- moai_adk/core/project/detector.py +293 -0
- moai_adk/core/project/initializer.py +387 -0
- moai_adk/core/project/phase_executor.py +716 -0
- moai_adk/core/project/validator.py +139 -0
- moai_adk/core/quality/__init__.py +6 -0
- moai_adk/core/quality/trust_checker.py +377 -0
- moai_adk/core/quality/validators/__init__.py +6 -0
- moai_adk/core/quality/validators/base_validator.py +19 -0
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +918 -0
- moai_adk/core/session_manager.py +651 -0
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +680 -0
- moai_adk/core/spec/ears_template_engine.py +1247 -0
- moai_adk/core/spec/quality_validator.py +687 -0
- moai_adk/core/spec_status_manager.py +478 -0
- moai_adk/core/template/__init__.py +7 -0
- moai_adk/core/template/backup.py +174 -0
- moai_adk/core/template/config.py +191 -0
- moai_adk/core/template/languages.py +43 -0
- moai_adk/core/template/merger.py +233 -0
- moai_adk/core/template/processor.py +1200 -0
- moai_adk/core/template_engine.py +310 -0
- moai_adk/core/template_variable_synchronizer.py +417 -0
- moai_adk/core/unified_permission_manager.py +745 -0
- moai_adk/core/user_behavior_analytics.py +851 -0
- moai_adk/core/version_sync.py +429 -0
- moai_adk/foundation/__init__.py +56 -0
- moai_adk/foundation/backend.py +1027 -0
- moai_adk/foundation/database.py +1115 -0
- moai_adk/foundation/devops.py +1585 -0
- moai_adk/foundation/ears.py +431 -0
- moai_adk/foundation/frontend.py +870 -0
- moai_adk/foundation/git/commit_templates.py +557 -0
- moai_adk/foundation/git.py +376 -0
- moai_adk/foundation/langs.py +484 -0
- moai_adk/foundation/ml_ops.py +1162 -0
- moai_adk/foundation/testing.py +1524 -0
- moai_adk/foundation/trust/trust_principles.py +676 -0
- moai_adk/foundation/trust/validation_checklist.py +1573 -0
- moai_adk/project/__init__.py +0 -0
- moai_adk/project/configuration.py +1084 -0
- moai_adk/project/documentation.py +566 -0
- moai_adk/project/schema.py +447 -0
- moai_adk/statusline/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +105 -0
- moai_adk/statusline/config.py +376 -0
- moai_adk/statusline/enhanced_output_style_detector.py +372 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +322 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +343 -0
- moai_adk/statusline/update_checker.py +129 -0
- moai_adk/statusline/version_reader.py +741 -0
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
- moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
- moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
- moai_adk/templates/.claude/hooks/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
- moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
- moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
- moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
- moai_adk/templates/.claude/settings.json +172 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
- moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
- moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +649 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +376 -0
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
- moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
- moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +128 -0
- moai_adk/templates/.git-hooks/pre-push +365 -0
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
- moai_adk/templates/.gitignore +222 -0
- moai_adk/templates/.mcp.json +13 -0
- moai_adk/templates/.moai/config/config.yaml +58 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
- moai_adk/templates/.moai/config/sections/language.yaml +11 -0
- moai_adk/templates/.moai/config/sections/project.yaml +13 -0
- moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
- moai_adk/templates/.moai/config/sections/system.yaml +24 -0
- moai_adk/templates/.moai/config/sections/user.yaml +5 -0
- moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +642 -0
- moai_adk/utils/__init__.py +30 -0
- moai_adk/utils/banner.py +38 -0
- moai_adk/utils/common.py +294 -0
- moai_adk/utils/link_validator.py +241 -0
- moai_adk/utils/logger.py +147 -0
- moai_adk/utils/safe_file_reader.py +206 -0
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.35.1.dist-info/METADATA +3018 -0
- moai_adk-0.35.1.dist-info/RECORD +502 -0
- moai_adk-0.35.1.dist-info/WHEEL +4 -0
- moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
- moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# Best Practices Enforcement
|
|
2
|
+
|
|
3
|
+
Context7-powered best practices validation and automated standards enforcement.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Best Practices Engine validates coding standards and best practices using real-time documentation from Context7, ensuring code follows latest framework and language standards.
|
|
8
|
+
|
|
9
|
+
## Best Practices Engine Implementation
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
class BestPracticesEngine:
|
|
13
|
+
"""Context7-powered best practices validation and enforcement"""
|
|
14
|
+
|
|
15
|
+
def __init__(self, context7_client: Context7Client):
|
|
16
|
+
self.context7_client = context7_client
|
|
17
|
+
self.language_rules = self._load_language_rules()
|
|
18
|
+
self.practice_validators = self._initialize_validators()
|
|
19
|
+
|
|
20
|
+
async def validate(self, codebase: str, languages: List[str], context7_docs: bool = True) -> PracticesResult:
|
|
21
|
+
"""Validate coding best practices with real-time documentation"""
|
|
22
|
+
|
|
23
|
+
validation_results = {}
|
|
24
|
+
|
|
25
|
+
for language in languages:
|
|
26
|
+
# Get latest best practices from Context7
|
|
27
|
+
if context7_docs:
|
|
28
|
+
try:
|
|
29
|
+
library_id = await self.context7_client.resolve_library_id(language)
|
|
30
|
+
latest_docs = await self.context7_client.get_library_docs(
|
|
31
|
+
context7CompatibleLibraryID=library_id,
|
|
32
|
+
topic="best-practices",
|
|
33
|
+
tokens=5000
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
# Validate against latest standards
|
|
37
|
+
validation_result = await self._validate_against_latest_standards(
|
|
38
|
+
codebase, language, latest_docs
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
except Exception as e:
|
|
42
|
+
logger.warning(f"Failed to get Context7 docs for {language}: {e}")
|
|
43
|
+
# Fallback to cached rules
|
|
44
|
+
validation_result = await self._validate_with_cached_rules(
|
|
45
|
+
codebase, language
|
|
46
|
+
)
|
|
47
|
+
else:
|
|
48
|
+
validation_result = await self._validate_with_cached_rules(
|
|
49
|
+
codebase, language
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
validation_results[language] = validation_result
|
|
53
|
+
|
|
54
|
+
# Cross-language best practices
|
|
55
|
+
cross_language_result = await self._validate_cross_language_practices(codebase)
|
|
56
|
+
|
|
57
|
+
# Calculate overall practices score
|
|
58
|
+
overall_score = sum(
|
|
59
|
+
result.score for result in validation_results.values()
|
|
60
|
+
) / len(validation_results)
|
|
61
|
+
|
|
62
|
+
return PracticesResult(
|
|
63
|
+
language_results=validation_results,
|
|
64
|
+
cross_language_practices=cross_language_result,
|
|
65
|
+
overall_score=overall_score,
|
|
66
|
+
compliance_level=self._determine_compliance_level(overall_score),
|
|
67
|
+
improvement_roadmap=self._create_improvement_roadmap(validation_results)
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
async def _validate_against_latest_standards(
|
|
71
|
+
self,
|
|
72
|
+
codebase: str,
|
|
73
|
+
language: str,
|
|
74
|
+
latest_docs: str
|
|
75
|
+
) -> LanguageValidationResult:
|
|
76
|
+
"""Validate code against latest language standards from Context7"""
|
|
77
|
+
|
|
78
|
+
# Extract best practices from documentation
|
|
79
|
+
best_practices = await self._extract_best_practices_from_docs(latest_docs)
|
|
80
|
+
|
|
81
|
+
# Validate naming conventions
|
|
82
|
+
naming_result = await self._validate_naming_conventions(
|
|
83
|
+
codebase, language, best_practices.get("naming", {})
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
# Validate code structure
|
|
87
|
+
structure_result = await self._validate_code_structure(
|
|
88
|
+
codebase, language, best_practices.get("structure", {})
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# Validate error handling
|
|
92
|
+
error_handling_result = await self._validate_error_handling(
|
|
93
|
+
codebase, language, best_practices.get("error_handling", {})
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
# Validate documentation
|
|
97
|
+
documentation_result = await self._validate_documentation(
|
|
98
|
+
codebase, language, best_practices.get("documentation", {})
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
# Validate testing patterns
|
|
102
|
+
testing_result = await self._validate_testing_patterns(
|
|
103
|
+
codebase, language, best_practices.get("testing", {})
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# Calculate language-specific score
|
|
107
|
+
language_score = (
|
|
108
|
+
naming_result.score * 0.2 +
|
|
109
|
+
structure_result.score * 0.3 +
|
|
110
|
+
error_handling_result.score * 0.2 +
|
|
111
|
+
documentation_result.score * 0.15 +
|
|
112
|
+
testing_result.score * 0.15
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
return LanguageValidationResult(
|
|
116
|
+
language=language,
|
|
117
|
+
score=language_score,
|
|
118
|
+
validations={
|
|
119
|
+
"naming": naming_result,
|
|
120
|
+
"structure": structure_result,
|
|
121
|
+
"error_handling": error_handling_result,
|
|
122
|
+
"documentation": documentation_result,
|
|
123
|
+
"testing": testing_result
|
|
124
|
+
},
|
|
125
|
+
best_practices_version=await self._get_docs_version(latest_docs),
|
|
126
|
+
recommendations=self._generate_language_recommendations(
|
|
127
|
+
naming_result, structure_result, error_handling_result,
|
|
128
|
+
documentation_result, testing_result
|
|
129
|
+
)
|
|
130
|
+
)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Configuration
|
|
134
|
+
|
|
135
|
+
```yaml
|
|
136
|
+
best_practices:
|
|
137
|
+
enabled: true
|
|
138
|
+
context7_integration: true
|
|
139
|
+
auto_update_standards: true
|
|
140
|
+
compliance_target: 0.85
|
|
141
|
+
|
|
142
|
+
language_rules:
|
|
143
|
+
python:
|
|
144
|
+
style_guide: "pep8"
|
|
145
|
+
formatter: "black"
|
|
146
|
+
linter: "ruff"
|
|
147
|
+
type_checker: "mypy"
|
|
148
|
+
|
|
149
|
+
javascript:
|
|
150
|
+
style_guide: "airbnb"
|
|
151
|
+
formatter: "prettier"
|
|
152
|
+
linter: "eslint"
|
|
153
|
+
|
|
154
|
+
typescript:
|
|
155
|
+
style_guide: "google"
|
|
156
|
+
formatter: "prettier"
|
|
157
|
+
linter: "eslint"
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Context7 Library Mappings
|
|
161
|
+
|
|
162
|
+
```python
|
|
163
|
+
QUALITY_LIBRARY_MAPPINGS = {
|
|
164
|
+
# Static Analysis Tools
|
|
165
|
+
"eslint": "/eslint/eslint",
|
|
166
|
+
"prettier": "/prettier/prettier",
|
|
167
|
+
"black": "/psf/black",
|
|
168
|
+
"ruff": "/astral-sh/ruff",
|
|
169
|
+
"mypy": "/python/mypy",
|
|
170
|
+
"pylint": "/pylint-dev/pylint",
|
|
171
|
+
"sonarqube": "/SonarSource/sonarqube",
|
|
172
|
+
|
|
173
|
+
# Testing Frameworks
|
|
174
|
+
"jest": "/facebook/jest",
|
|
175
|
+
"pytest": "/pytest-dev/pytest",
|
|
176
|
+
"mocha": "/mochajs/mocha",
|
|
177
|
+
"junit": "/junit-team/junit5",
|
|
178
|
+
|
|
179
|
+
# Security Tools
|
|
180
|
+
"bandit": "/PyCQA/bandit",
|
|
181
|
+
"snyk": "/snyk/snyk",
|
|
182
|
+
"owasp-zap": "/zaproxy/zaproxy",
|
|
183
|
+
|
|
184
|
+
# Performance Tools
|
|
185
|
+
"lighthouse": "/GoogleChrome/lighthouse",
|
|
186
|
+
"py-spy": "/benfred/py-spy",
|
|
187
|
+
|
|
188
|
+
# Documentation Standards
|
|
189
|
+
"openapi": "/OAI/OpenAPI-Specification",
|
|
190
|
+
"sphinx": "/sphinx-doc/sphinx",
|
|
191
|
+
"jsdoc": "/jsdoc/jsdoc"
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Custom Quality Rules
|
|
196
|
+
|
|
197
|
+
```python
|
|
198
|
+
class CustomQualityRule:
|
|
199
|
+
"""Define custom quality validation rules"""
|
|
200
|
+
|
|
201
|
+
def __init__(self, name: str, validator: Callable, severity: str = "medium"):
|
|
202
|
+
self.name = name
|
|
203
|
+
self.validator = validator
|
|
204
|
+
self.severity = severity
|
|
205
|
+
|
|
206
|
+
async def validate(self, codebase: str) -> RuleResult:
|
|
207
|
+
"""Execute custom rule validation"""
|
|
208
|
+
try:
|
|
209
|
+
result = await self.validator(codebase)
|
|
210
|
+
return RuleResult(
|
|
211
|
+
rule_name=self.name,
|
|
212
|
+
passed=result.passed,
|
|
213
|
+
severity=self.severity,
|
|
214
|
+
details=result.details,
|
|
215
|
+
recommendations=result.recommendations
|
|
216
|
+
)
|
|
217
|
+
except Exception as e:
|
|
218
|
+
return RuleResult(
|
|
219
|
+
rule_name=self.name,
|
|
220
|
+
passed=False,
|
|
221
|
+
severity="error",
|
|
222
|
+
details={"error": str(e)},
|
|
223
|
+
recommendations=["Fix rule implementation"]
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
# Usage example
|
|
227
|
+
async def custom_naming_convention_rule(codebase: str):
|
|
228
|
+
"""Custom rule: Enforce project-specific naming conventions"""
|
|
229
|
+
|
|
230
|
+
patterns = {
|
|
231
|
+
"api_endpoints": r"^[a-z]+_[a-z]+$",
|
|
232
|
+
"database_models": r"^[A-Z][a-zA-Z]*Model$",
|
|
233
|
+
"utility_functions": r"^util_[a-z_]+$"
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
violations = []
|
|
237
|
+
for pattern_name, pattern in patterns.items():
|
|
238
|
+
pattern_violations = await scan_for_pattern_violations(codebase, pattern, pattern_name)
|
|
239
|
+
violations.extend(pattern_violations)
|
|
240
|
+
|
|
241
|
+
return RuleValidationResult(
|
|
242
|
+
passed=len(violations) == 0,
|
|
243
|
+
details={"violations": violations, "total_violations": len(violations)},
|
|
244
|
+
recommendations=[f"Fix {len(violations)} naming convention violations"]
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
# Register custom rule
|
|
248
|
+
custom_rule = CustomQualityRule(
|
|
249
|
+
name="project_naming_conventions",
|
|
250
|
+
validator=custom_naming_convention_rule,
|
|
251
|
+
severity="medium"
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
quality_orchestrator.register_custom_rule(custom_rule)
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## Related
|
|
258
|
+
|
|
259
|
+
- [TRUST 5 Validation](trust5-validation.md)
|
|
260
|
+
- [Proactive Analysis](proactive-analysis.md)
|
|
261
|
+
- [Integration Patterns](integration-patterns.md)
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# Integration Patterns
|
|
2
|
+
|
|
3
|
+
Enterprise integration patterns for CI/CD pipelines, GitHub Actions, and Quality-as-Service APIs.
|
|
4
|
+
|
|
5
|
+
## CI/CD Pipeline Integration
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
async def quality_gate_pipeline():
|
|
9
|
+
"""Integrate quality validation into CI/CD pipeline"""
|
|
10
|
+
|
|
11
|
+
# Initialize quality orchestrator
|
|
12
|
+
quality_orchestrator = QualityOrchestrator.from_config("quality-config.yaml")
|
|
13
|
+
|
|
14
|
+
# Run comprehensive quality analysis
|
|
15
|
+
quality_result = await quality_orchestrator.analyze_codebase(
|
|
16
|
+
path="src/",
|
|
17
|
+
languages=["python", "typescript"],
|
|
18
|
+
quality_threshold=0.85
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
# Quality gate validation
|
|
22
|
+
if not quality_result.trust5_validation.passed:
|
|
23
|
+
print(" Quality gate failed!")
|
|
24
|
+
print(f"Overall score: {quality_result.overall_score:.2f}")
|
|
25
|
+
|
|
26
|
+
# Print failed principles
|
|
27
|
+
for principle, result in quality_result.trust5_validation.principles.items():
|
|
28
|
+
if not result.passed:
|
|
29
|
+
print(f" {principle}: {result.score:.2f} (threshold: 0.80)")
|
|
30
|
+
|
|
31
|
+
# Exit with error code
|
|
32
|
+
sys.exit(1)
|
|
33
|
+
|
|
34
|
+
# Check for critical security issues
|
|
35
|
+
critical_issues = [
|
|
36
|
+
issue for issue in quality_result.proactive_analysis.recommendations
|
|
37
|
+
if issue.severity == "critical" and issue.category == "security"
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
if critical_issues:
|
|
41
|
+
print(f" Found {len(critical_issues)} critical security issues!")
|
|
42
|
+
for issue in critical_issues:
|
|
43
|
+
print(f" - {issue.description}")
|
|
44
|
+
sys.exit(1)
|
|
45
|
+
|
|
46
|
+
print(" Quality gate passed!")
|
|
47
|
+
print(f"Overall quality score: {quality_result.overall_score:.2f}")
|
|
48
|
+
|
|
49
|
+
# Generate quality report
|
|
50
|
+
await generate_quality_report(quality_result, output_path="quality-report.json")
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## GitHub Actions Integration
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
async def github_actions_quality_check():
|
|
57
|
+
"""Quality check for GitHub Actions workflow"""
|
|
58
|
+
|
|
59
|
+
# Parse inputs
|
|
60
|
+
github_token = os.getenv("GITHUB_TOKEN")
|
|
61
|
+
repo_path = os.getenv("GITHUB_WORKSPACE", ".")
|
|
62
|
+
pr_number = os.getenv("PR_NUMBER")
|
|
63
|
+
|
|
64
|
+
# Run quality analysis
|
|
65
|
+
quality_orchestrator = QualityOrchestrator()
|
|
66
|
+
quality_result = await quality_orchestrator.analyze_codebase(
|
|
67
|
+
path=repo_path,
|
|
68
|
+
languages=["python", "javascript", "typescript"]
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# Post comment on PR if quality issues found
|
|
72
|
+
if pr_number and quality_result.overall_score < 0.85:
|
|
73
|
+
comment = generate_pr_quality_comment(quality_result)
|
|
74
|
+
await post_github_comment(github_token, pr_number, comment)
|
|
75
|
+
|
|
76
|
+
# Set output for GitHub Actions
|
|
77
|
+
print(f"::set-output name=quality_score::{quality_result.overall_score}")
|
|
78
|
+
print(f"::set-output name=quality_passed::{quality_result.trust5_validation.passed}")
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Quality-as-Service REST API
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
from fastapi import FastAPI, HTTPException
|
|
85
|
+
from pydantic import BaseModel
|
|
86
|
+
|
|
87
|
+
app = FastAPI(title="Code Quality Analysis API")
|
|
88
|
+
|
|
89
|
+
class QualityAnalysisRequest(BaseModel):
|
|
90
|
+
repository_url: str
|
|
91
|
+
languages: List[str]
|
|
92
|
+
quality_threshold: float = 0.85
|
|
93
|
+
|
|
94
|
+
class QualityAnalysisResponse(BaseModel):
|
|
95
|
+
analysis_id: str
|
|
96
|
+
overall_score: float
|
|
97
|
+
trust5_validation: Dict
|
|
98
|
+
recommendations: List[Dict]
|
|
99
|
+
analysis_completed_at: datetime
|
|
100
|
+
|
|
101
|
+
@app.post("/api/quality/analyze", response_model=QualityAnalysisResponse)
|
|
102
|
+
async def analyze_quality(request: QualityAnalysisRequest):
|
|
103
|
+
"""API endpoint for quality analysis"""
|
|
104
|
+
|
|
105
|
+
try:
|
|
106
|
+
# Clone and analyze repository
|
|
107
|
+
with tempfile.TemporaryDirectory() as temp_dir:
|
|
108
|
+
await clone_repository(request.repository_url, temp_dir)
|
|
109
|
+
|
|
110
|
+
quality_orchestrator = QualityOrchestrator()
|
|
111
|
+
quality_result = await quality_orchestrator.analyze_codebase(
|
|
112
|
+
path=temp_dir,
|
|
113
|
+
languages=request.languages,
|
|
114
|
+
quality_threshold=request.quality_threshold
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
return QualityAnalysisResponse(
|
|
118
|
+
analysis_id=str(uuid.uuid4()),
|
|
119
|
+
overall_score=quality_result.overall_score,
|
|
120
|
+
trust5_validation=quality_result.trust5_validation.dict(),
|
|
121
|
+
recommendations=[rec.dict() for rec in quality_result.proactive_analysis.recommendations],
|
|
122
|
+
analysis_completed_at=datetime.now(UTC)
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
except Exception as e:
|
|
126
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Cross-Project Quality Benchmarking
|
|
130
|
+
|
|
131
|
+
```python
|
|
132
|
+
class QualityBenchmarking:
|
|
133
|
+
"""Cross-project quality benchmarking and comparison"""
|
|
134
|
+
|
|
135
|
+
def __init__(self, benchmark_database: str):
|
|
136
|
+
self.benchmark_db = benchmark_database
|
|
137
|
+
self.comparison_metrics = [
|
|
138
|
+
"code_coverage",
|
|
139
|
+
"security_score",
|
|
140
|
+
"maintainability_index",
|
|
141
|
+
"technical_debt_ratio",
|
|
142
|
+
"duplicate_code_percentage"
|
|
143
|
+
]
|
|
144
|
+
|
|
145
|
+
async def benchmark_project(self, project_path: str, project_metadata: Dict) -> BenchmarkResult:
|
|
146
|
+
"""Benchmark project quality against similar projects"""
|
|
147
|
+
|
|
148
|
+
# Analyze current project
|
|
149
|
+
current_metrics = await self._analyze_project_quality(project_path)
|
|
150
|
+
|
|
151
|
+
# Find comparable projects from database
|
|
152
|
+
comparable_projects = await self._find_comparable_projects(project_metadata)
|
|
153
|
+
|
|
154
|
+
# Calculate percentiles and rankings
|
|
155
|
+
benchmark_comparison = await self._calculate_benchmark_comparison(
|
|
156
|
+
current_metrics, comparable_projects
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
# Generate improvement recommendations based on top performers
|
|
160
|
+
improvement_recommendations = await self._generate_benchmark_recommendations(
|
|
161
|
+
current_metrics, benchmark_comparison
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
return BenchmarkResult(
|
|
165
|
+
project_metrics=current_metrics,
|
|
166
|
+
benchmark_comparison=benchmark_comparison,
|
|
167
|
+
industry_percentiles=benchmark_comparison.percentiles,
|
|
168
|
+
improvement_roadmap=improvement_recommendations,
|
|
169
|
+
competitive_analysis=self._analyze_competitive_position(
|
|
170
|
+
current_metrics, benchmark_comparison
|
|
171
|
+
)
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
async def _find_comparable_projects(self, project_metadata: Dict) -> List[ProjectMetrics]:
|
|
175
|
+
"""Find projects with similar characteristics for comparison"""
|
|
176
|
+
|
|
177
|
+
query = {
|
|
178
|
+
"language": project_metadata.get("language"),
|
|
179
|
+
"project_type": project_metadata.get("type", "web_application"),
|
|
180
|
+
"team_size_range": self._get_team_size_range(project_metadata.get("team_size", 5)),
|
|
181
|
+
"industry": project_metadata.get("industry", "technology")
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
# Query benchmark database
|
|
185
|
+
comparable_projects = await self.benchmark_db.find_projects(query)
|
|
186
|
+
|
|
187
|
+
return comparable_projects[:50] # Limit to top 50 comparable projects
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Related
|
|
191
|
+
|
|
192
|
+
- [TRUST 5 Validation](trust5-validation.md)
|
|
193
|
+
- [Proactive Analysis](proactive-analysis.md)
|
|
194
|
+
- [Best Practices Engine](best-practices.md)
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Proactive Quality Analysis
|
|
2
|
+
|
|
3
|
+
Automated code quality issue detection and continuous improvement recommendations.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Proactive Quality Scanner automatically detects code quality issues and provides improvement recommendations across multiple dimensions:
|
|
8
|
+
- Performance optimization opportunities
|
|
9
|
+
- Maintainability improvements
|
|
10
|
+
- Security vulnerabilities
|
|
11
|
+
- Code duplication
|
|
12
|
+
- Technical debt analysis
|
|
13
|
+
- Complexity reduction
|
|
14
|
+
|
|
15
|
+
## Proactive Scanner Implementation
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
class ProactiveQualityScanner:
|
|
19
|
+
"""Proactive code quality issue detection and analysis"""
|
|
20
|
+
|
|
21
|
+
def __init__(self, context7_client: Context7Client):
|
|
22
|
+
self.context7_client = context7_client
|
|
23
|
+
self.issue_detectors = self._initialize_detectors()
|
|
24
|
+
self.pattern_analyzer = CodePatternAnalyzer()
|
|
25
|
+
|
|
26
|
+
async def scan(self, codebase: str, focus_areas: List[str]) -> ProactiveResult:
|
|
27
|
+
"""Comprehensive proactive quality scanning"""
|
|
28
|
+
|
|
29
|
+
scan_results = {}
|
|
30
|
+
|
|
31
|
+
# Performance analysis
|
|
32
|
+
if "performance" in focus_areas:
|
|
33
|
+
scan_results["performance"] = await self._scan_performance_issues(codebase)
|
|
34
|
+
|
|
35
|
+
# Maintainability analysis
|
|
36
|
+
if "maintainability" in focus_areas:
|
|
37
|
+
scan_results["maintainability"] = await self._scan_maintainability_issues(codebase)
|
|
38
|
+
|
|
39
|
+
# Security vulnerabilities
|
|
40
|
+
if "security" in focus_areas:
|
|
41
|
+
scan_results["security"] = await self._scan_security_issues(codebase)
|
|
42
|
+
|
|
43
|
+
# Code duplication
|
|
44
|
+
if "duplication" in focus_areas:
|
|
45
|
+
scan_results["duplication"] = await self._scan_code_duplication(codebase)
|
|
46
|
+
|
|
47
|
+
# Technical debt
|
|
48
|
+
if "technical_debt" in focus_areas:
|
|
49
|
+
scan_results["technical_debt"] = await self._analyze_technical_debt(codebase)
|
|
50
|
+
|
|
51
|
+
# Code complexity
|
|
52
|
+
if "complexity" in focus_areas:
|
|
53
|
+
scan_results["complexity"] = await self._analyze_complexity(codebase)
|
|
54
|
+
|
|
55
|
+
# Generate improvement recommendations
|
|
56
|
+
recommendations = await self._generate_improvement_recommendations(scan_results)
|
|
57
|
+
|
|
58
|
+
return ProactiveResult(
|
|
59
|
+
scan_results=scan_results,
|
|
60
|
+
recommendations=recommendations,
|
|
61
|
+
priority_issues=self._identify_priority_issues(scan_results),
|
|
62
|
+
estimated_effort=self._calculate_improvement_effort(recommendations)
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
async def _scan_performance_issues(self, codebase: str) -> PerformanceResult:
|
|
66
|
+
"""Scan for performance-related issues"""
|
|
67
|
+
|
|
68
|
+
issues = []
|
|
69
|
+
|
|
70
|
+
# Get language-specific performance patterns from Context7
|
|
71
|
+
for language in self._detect_languages(codebase):
|
|
72
|
+
try:
|
|
73
|
+
# Resolve library ID
|
|
74
|
+
library_id = await self.context7_client.resolve_library_id(language)
|
|
75
|
+
|
|
76
|
+
# Get performance best practices
|
|
77
|
+
perf_docs = await self.context7_client.get_library_docs(
|
|
78
|
+
context7CompatibleLibraryID=library_id,
|
|
79
|
+
topic="performance",
|
|
80
|
+
tokens=3000
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
# Analyze code against performance patterns
|
|
84
|
+
language_issues = await self._analyze_performance_patterns(
|
|
85
|
+
codebase, language, perf_docs
|
|
86
|
+
)
|
|
87
|
+
issues.extend(language_issues)
|
|
88
|
+
|
|
89
|
+
except Exception as e:
|
|
90
|
+
logger.warning(f"Failed to get performance docs for {language}: {e}")
|
|
91
|
+
|
|
92
|
+
# Common performance issues
|
|
93
|
+
common_issues = await self._detect_common_performance_issues(codebase)
|
|
94
|
+
issues.extend(common_issues)
|
|
95
|
+
|
|
96
|
+
return PerformanceResult(
|
|
97
|
+
issues=issues,
|
|
98
|
+
score=self._calculate_performance_score(issues),
|
|
99
|
+
hotspots=self._identify_performance_hotspots(issues),
|
|
100
|
+
optimizations=self._suggest_optimizations(issues)
|
|
101
|
+
)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Usage Examples
|
|
105
|
+
|
|
106
|
+
```python
|
|
107
|
+
# Initialize proactive scanner
|
|
108
|
+
proactive_scanner = ProactiveQualityScanner(
|
|
109
|
+
context7_client=context7_client,
|
|
110
|
+
rule_engine=BestPracticesEngine()
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
# Scan for improvement opportunities
|
|
114
|
+
improvements = await proactive_scanner.scan_codebase(
|
|
115
|
+
path="src/",
|
|
116
|
+
scan_types=["security", "performance", "maintainability", "testing"]
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
# Generate improvement recommendations
|
|
120
|
+
recommendations = await proactive_scanner.generate_recommendations(
|
|
121
|
+
issues=improvements,
|
|
122
|
+
priority="high",
|
|
123
|
+
auto_fix=True
|
|
124
|
+
)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Configuration
|
|
128
|
+
|
|
129
|
+
```yaml
|
|
130
|
+
proactive_analysis:
|
|
131
|
+
enabled: true
|
|
132
|
+
scan_frequency: "daily"
|
|
133
|
+
focus_areas:
|
|
134
|
+
- "performance"
|
|
135
|
+
- "security"
|
|
136
|
+
- "maintainability"
|
|
137
|
+
- "technical_debt"
|
|
138
|
+
|
|
139
|
+
auto_fix:
|
|
140
|
+
enabled: true
|
|
141
|
+
severity_threshold: "medium"
|
|
142
|
+
confirmation_required: true
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Advanced Patterns
|
|
146
|
+
|
|
147
|
+
### Machine Learning Quality Prediction
|
|
148
|
+
|
|
149
|
+
```python
|
|
150
|
+
class QualityPredictionEngine:
|
|
151
|
+
"""ML-powered quality issue prediction"""
|
|
152
|
+
|
|
153
|
+
def __init__(self, model_path: str):
|
|
154
|
+
self.model = self._load_model(model_path)
|
|
155
|
+
self.feature_extractor = CodeFeatureExtractor()
|
|
156
|
+
|
|
157
|
+
async def predict_quality_issues(self, codebase: str) -> PredictionResult:
|
|
158
|
+
"""Predict potential quality issues using ML"""
|
|
159
|
+
|
|
160
|
+
# Extract code features
|
|
161
|
+
features = await self.feature_extractor.extract_features(codebase)
|
|
162
|
+
|
|
163
|
+
# Make predictions
|
|
164
|
+
predictions = self.model.predict(features)
|
|
165
|
+
|
|
166
|
+
# Analyze prediction confidence
|
|
167
|
+
confidence_scores = self.model.predict_proba(features)
|
|
168
|
+
|
|
169
|
+
# Group predictions by issue type
|
|
170
|
+
issue_predictions = self._group_predictions_by_type(
|
|
171
|
+
predictions, confidence_scores
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
return PredictionResult(
|
|
175
|
+
predictions=issue_predictions,
|
|
176
|
+
confidence_scores=confidence_scores,
|
|
177
|
+
high_risk_areas=self._identify_high_risk_areas(issue_predictions),
|
|
178
|
+
prevention_recommendations=self._generate_prevention_recommendations(
|
|
179
|
+
issue_predictions
|
|
180
|
+
)
|
|
181
|
+
)
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Real-time Quality Monitoring
|
|
185
|
+
|
|
186
|
+
```python
|
|
187
|
+
class RealTimeQualityMonitor:
|
|
188
|
+
"""Real-time code quality monitoring and alerting"""
|
|
189
|
+
|
|
190
|
+
def __init__(self, webhook_url: str, notification_config: Dict):
|
|
191
|
+
self.webhook_url = webhook_url
|
|
192
|
+
self.notification_config = notification_config
|
|
193
|
+
self.quality_history = deque(maxlen=1000)
|
|
194
|
+
self.alert_thresholds = notification_config.get("thresholds", {})
|
|
195
|
+
|
|
196
|
+
async def monitor_quality_changes(self, codebase: str):
|
|
197
|
+
"""Continuously monitor quality changes"""
|
|
198
|
+
|
|
199
|
+
while True:
|
|
200
|
+
# Get current quality metrics
|
|
201
|
+
current_metrics = await self._get_current_quality_metrics(codebase)
|
|
202
|
+
|
|
203
|
+
# Compare with historical data
|
|
204
|
+
if self.quality_history:
|
|
205
|
+
previous_metrics = self.quality_history[-1]
|
|
206
|
+
quality_change = self._calculate_quality_change(
|
|
207
|
+
previous_metrics, current_metrics
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
# Check for quality degradation
|
|
211
|
+
if quality_change < -self.alert_thresholds.get("degradation", 0.1):
|
|
212
|
+
await self._send_quality_alert(
|
|
213
|
+
alert_type="quality_degradation",
|
|
214
|
+
metrics=current_metrics,
|
|
215
|
+
change=quality_change
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
# Store metrics
|
|
219
|
+
self.quality_history.append(current_metrics)
|
|
220
|
+
|
|
221
|
+
# Wait for next check
|
|
222
|
+
await asyncio.sleep(self.notification_config.get("check_interval", 300))
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Related
|
|
226
|
+
|
|
227
|
+
- [TRUST 5 Validation](trust5-validation.md)
|
|
228
|
+
- [Best Practices Engine](best-practices.md)
|
|
229
|
+
- [Integration Patterns](integration-patterns.md)
|