@maestro-ai/mcp-server 1.2.0 → 2.0.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/dist/content/rules/GEMINI.md +79 -27
- package/dist/content/rules/RULES.md +6 -0
- package/dist/content/skills/specialist-acessibilidade/MCP_INTEGRATION.md +698 -0
- package/dist/content/skills/specialist-acessibilidade/README.md +292 -0
- package/dist/content/skills/specialist-acessibilidade/SKILL.md +202 -0
- package/dist/content/skills/specialist-acessibilidade/mcp_functions/init_accessibility_audit.py +675 -0
- package/dist/content/skills/specialist-acessibilidade/mcp_functions/validate_wcag_compliance.py +587 -0
- package/dist/content/skills/specialist-acessibilidade/resources/checklists/accessibility-validation.md +457 -0
- package/dist/content/skills/specialist-acessibilidade/resources/examples/accessibility-examples.md +863 -0
- package/dist/content/skills/specialist-acessibilidade/resources/reference/wcag-guide.md +359 -0
- package/dist/content/skills/specialist-acessibilidade/resources/templates/checklist-acessibilidade.md +435 -0
- package/dist/content/skills/specialist-acessibilidade/resources/templates/relatorio-acessibilidade.md +490 -0
- package/dist/content/skills/specialist-analise-testes/MCP_INTEGRATION.md +569 -0
- package/dist/content/skills/specialist-analise-testes/README.md +42 -0
- package/dist/content/skills/specialist-analise-testes/SKILL.md +258 -0
- package/dist/content/skills/specialist-analise-testes/mcp_functions/README.md +794 -0
- package/dist/content/skills/specialist-analise-testes/resources/checklists/testing-validation.md +305 -0
- package/dist/content/skills/specialist-analise-testes/resources/examples/testing-examples.md +395 -0
- package/dist/content/skills/specialist-analise-testes/resources/reference/testing-guide.md +1024 -0
- package/dist/content/skills/specialist-arquitetura-avancada/MCP_INTEGRATION.md +440 -0
- package/dist/content/skills/specialist-arquitetura-avancada/README.md +298 -0
- package/dist/content/skills/specialist-arquitetura-avancada/SKILL.md +295 -0
- package/dist/content/skills/specialist-arquitetura-avancada/mcp_functions/README.md +573 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/checklists/architecture-validation.md +385 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/examples/architecture-examples.md +743 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/reference/architecture-guide.md +680 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/templates/bounded-context.md +333 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/templates/cqrs-implementation.md +495 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/templates/event-sourcing.md +571 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/templates/microservices-strategy.md +647 -0
- package/dist/content/skills/specialist-arquitetura-software/MCP_INTEGRATION.md +483 -0
- package/dist/content/skills/specialist-arquitetura-software/README.md +306 -0
- package/dist/content/skills/specialist-arquitetura-software/SKILL.md +194 -0
- package/dist/content/skills/specialist-arquitetura-software/mcp_functions/init_architecture.py +137 -0
- package/dist/content/skills/specialist-arquitetura-software/mcp_functions/process_architecture.py +279 -0
- package/dist/content/skills/specialist-arquitetura-software/mcp_functions/validate_architecture.py +302 -0
- package/dist/content/skills/specialist-arquitetura-software/resources/checklists/architecture-validation.md +180 -0
- package/dist/content/skills/specialist-arquitetura-software/resources/examples/architecture-examples.md +239 -0
- package/dist/content/skills/specialist-arquitetura-software/resources/reference/architecture-guide.md +489 -0
- package/dist/content/skills/specialist-arquitetura-software/resources/templates/adr.md +61 -0
- package/dist/content/skills/specialist-arquitetura-software/resources/templates/arquitetura.md +192 -0
- package/dist/content/skills/specialist-arquitetura-software/resources/templates/slo-sli.md +153 -0
- package/dist/content/skills/specialist-banco-dados/MCP_INTEGRATION.md +390 -0
- package/dist/content/skills/specialist-banco-dados/README.md +323 -0
- package/dist/content/skills/specialist-banco-dados/SKILL.md +221 -0
- package/dist/content/skills/specialist-banco-dados/mcp_functions/init_database.py +720 -0
- package/dist/content/skills/specialist-banco-dados/mcp_functions/process_database.py +386 -0
- package/dist/content/skills/specialist-banco-dados/mcp_functions/validate_database.py +551 -0
- package/dist/content/skills/specialist-banco-dados/resources/checklists/database-validation.md +434 -0
- package/dist/content/skills/specialist-banco-dados/resources/examples/database-examples.md +857 -0
- package/dist/content/skills/specialist-banco-dados/resources/reference/database-guide.md +708 -0
- package/dist/content/skills/specialist-banco-dados/resources/templates/constraints.md +935 -0
- package/dist/content/skills/specialist-banco-dados/resources/templates/design-banco.md +509 -0
- package/dist/content/skills/specialist-banco-dados/resources/templates/indices.md +553 -0
- package/dist/content/skills/specialist-banco-dados/resources/templates/migracoes.md +777 -0
- package/dist/content/skills/specialist-contrato-api/MCP_INTEGRATION.md +152 -0
- package/dist/content/skills/specialist-contrato-api/README.md +183 -0
- package/dist/content/skills/specialist-contrato-api/SKILL.md +317 -0
- package/dist/content/skills/specialist-contrato-api/mcp_functions/README.md +17 -0
- package/dist/content/skills/specialist-contrato-api/resources/checklists/api-validation.md +44 -0
- package/dist/content/skills/specialist-contrato-api/resources/examples/api-examples.md +137 -0
- package/dist/content/skills/specialist-contrato-api/resources/reference/api-guide.md +96 -0
- package/dist/content/skills/specialist-contrato-api/resources/templates/contrato-api.md +165 -0
- package/dist/content/skills/specialist-dados-analytics-ia/MCP_INTEGRATION.md +398 -0
- package/dist/content/skills/specialist-dados-analytics-ia/README.md +224 -0
- package/dist/content/skills/specialist-dados-analytics-ia/SKILL.md +160 -0
- package/dist/content/skills/specialist-dados-analytics-ia/mcp_functions/generate_insights_dashboard.py +669 -0
- package/dist/content/skills/specialist-dados-analytics-ia/mcp_functions/init_analytics_pipeline.py +626 -0
- package/dist/content/skills/specialist-dados-analytics-ia/mcp_functions/validate_analytics_quality.py +772 -0
- package/dist/content/skills/specialist-dados-analytics-ia/resources/checklists/analytics-validation.md +519 -0
- package/dist/content/skills/specialist-dados-analytics-ia/resources/examples/analytics-examples.md +646 -0
- package/dist/content/skills/specialist-dados-analytics-ia/resources/reference/analytics-guide.md +1111 -0
- package/dist/content/skills/specialist-dados-analytics-ia/resources/templates/feature.md +419 -0
- package/dist/content/skills/specialist-dados-analytics-ia/resources/templates/requisitos.md +384 -0
- package/dist/content/skills/specialist-dados-analytics-ia/resources/templates/slo-sli.md +381 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/MCP_INTEGRATION.md +340 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/README.md +218 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/SKILL.md +194 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/resources/checklists/debugging-validation.md +319 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/resources/examples/debugging-examples.md +480 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/resources/prompts/analise-bugs.md +527 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/resources/reference/debugging-guide.md +392 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/resources/templates/bug-report.md +192 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/resources/templates/post-mortem.md +241 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/scripts/README.md +64 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/MCP_INTEGRATION.md +98 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/README.md +167 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/SKILL.md +288 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/mcp_functions/README.md +17 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/resources/checklists/backend-validation.md +44 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/resources/examples/backend-examples.md +109 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/resources/reference/backend-guide.md +86 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/MCP_INTEGRATION.md +914 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/README.md +261 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/SKILL.md +220 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/mcp_functions/init_frontend.py +861 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/mcp_functions/process_frontend.py +1003 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/mcp_functions/validate_frontend.py +766 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/resources/checklists/frontend-validation.md +365 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/resources/examples/frontend-examples.md +1125 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/resources/reference/frontend-guide.md +1055 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/resources/templates/component-story.md +530 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/resources/templates/historia-frontend.md +243 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/resources/templates/ui-guidelines.md +725 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/MCP_INTEGRATION.md +87 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/README.md +149 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/SKILL.md +360 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/mcp_functions/README.md +17 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/checklists/mobile-validation.md +330 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/examples/mobile-examples.md +966 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/reference/android-guide.md +546 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/reference/flutter-guide.md +500 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/reference/ios-guide.md +518 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/reference/mobile-guide.md +76 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/reference/react-native-guide.md +659 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/templates/historia-mobile.md +284 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/templates/mobile-checklist.md +239 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/templates/platform-selection.md +302 -0
- package/dist/content/skills/specialist-devops-infra/MCP_INTEGRATION.md +471 -0
- package/dist/content/skills/specialist-devops-infra/README.md +234 -0
- package/dist/content/skills/specialist-devops-infra/SKILL.md +162 -0
- package/dist/content/skills/specialist-devops-infra/mcp_functions/generate_ci_cd_pipeline.py +870 -0
- package/dist/content/skills/specialist-devops-infra/mcp_functions/init_infrastructure_structure.py +704 -0
- package/dist/content/skills/specialist-devops-infra/mcp_functions/validate_infrastructure_quality.py +745 -0
- package/dist/content/skills/specialist-devops-infra/resources/checklists/devops-validation.md +427 -0
- package/dist/content/skills/specialist-devops-infra/resources/examples/devops-examples.md +652 -0
- package/dist/content/skills/specialist-devops-infra/resources/reference/devops-guide.md +1244 -0
- package/dist/content/skills/specialist-devops-infra/resources/templates/ci-cd-pipeline.yml +40 -0
- package/dist/content/skills/specialist-documentacao-tecnica/MCP_INTEGRATION.md +797 -0
- package/dist/content/skills/specialist-documentacao-tecnica/README.md +304 -0
- package/dist/content/skills/specialist-documentacao-tecnica/SKILL.md +202 -0
- package/dist/content/skills/specialist-documentacao-tecnica/mcp_functions/init_documentation_structure.py +733 -0
- package/dist/content/skills/specialist-documentacao-tecnica/mcp_functions/process_documentation_for_publishing.py +888 -0
- package/dist/content/skills/specialist-documentacao-tecnica/mcp_functions/validate_documentation_quality.py +775 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/checklists/documentation-validation.md +296 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/examples/documentation-examples.md +515 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/reference/documentation-guide.md +798 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/templates/api-docs.md +619 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/templates/design-doc.md +250 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/templates/guia-tecnico.md +383 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/templates/readme-template.md +462 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/MCP_INTEGRATION.md +457 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/README.md +295 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/SKILL.md +214 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/mcp_functions/init_requirements.py +152 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/mcp_functions/process_requirements.py +445 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/mcp_functions/validate_requirements.py +475 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/resources/checklists/requirements-validation.md +258 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/resources/examples/requirements-examples.md +316 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/resources/reference/requirements-guide.md +651 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/resources/templates/criterios-aceite.md +484 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/resources/templates/matriz-rastreabilidade.md +246 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/resources/templates/requisitos.md +244 -0
- package/dist/content/skills/specialist-exploracao-codebase/MCP_INTEGRATION.md +155 -0
- package/dist/content/skills/specialist-exploracao-codebase/README.md +320 -0
- package/dist/content/skills/specialist-exploracao-codebase/SKILL.md +194 -0
- package/dist/content/skills/specialist-exploracao-codebase/mcp_functions/README.md +39 -0
- package/dist/content/skills/specialist-exploracao-codebase/resources/checklists/exploration-validation.md +51 -0
- package/dist/content/skills/specialist-exploracao-codebase/resources/examples/exploration-examples.md +106 -0
- package/dist/content/skills/specialist-exploracao-codebase/resources/reference/exploration-guide.md +111 -0
- package/dist/content/skills/specialist-exploracao-codebase/resources/templates/codebase-map.md +129 -0
- package/dist/content/skills/specialist-exploracao-codebase/resources/templates/refactoring-plan.md +96 -0
- package/dist/content/skills/specialist-exploracao-codebase/resources/templates/technical-debt-report.md +69 -0
- package/dist/content/skills/specialist-gestao-produto/MCP_INTEGRATION.md +436 -0
- package/dist/content/skills/specialist-gestao-produto/README.md +202 -0
- package/dist/content/skills/specialist-gestao-produto/SKILL.md +174 -0
- package/dist/content/skills/specialist-gestao-produto/resources/checklists/prd-validation.md +165 -0
- package/dist/content/skills/specialist-gestao-produto/resources/examples/prd-examples.md +231 -0
- package/dist/content/skills/specialist-gestao-produto/resources/reference/product-guide.md +416 -0
- package/dist/content/skills/specialist-gestao-produto/resources/templates/PRD.md +212 -0
- package/dist/content/skills/specialist-gestao-produto/scripts/init_prd.py +170 -0
- package/dist/content/skills/specialist-gestao-produto/scripts/process_prd.py +388 -0
- package/dist/content/skills/specialist-gestao-produto/scripts/validate_prd.py +406 -0
- package/dist/content/skills/specialist-migracao-modernizacao/MCP_INTEGRATION.md +17 -0
- package/dist/content/skills/specialist-migracao-modernizacao/README.md +46 -0
- package/dist/content/skills/specialist-migracao-modernizacao/SKILL.md +485 -0
- package/dist/content/skills/specialist-migracao-modernizacao/mcp_functions/README.md +10 -0
- package/dist/content/skills/specialist-migracao-modernizacao/resources/checklists/migration-validation.md +23 -0
- package/dist/content/skills/specialist-migracao-modernizacao/resources/examples/migration-examples.md +30 -0
- package/dist/content/skills/specialist-migracao-modernizacao/resources/reference/migration-guide.md +27 -0
- package/dist/content/skills/specialist-migracao-modernizacao/resources/templates/migration-assessment.md +391 -0
- package/dist/content/skills/specialist-migracao-modernizacao/resources/templates/modernization-roadmap.md +479 -0
- package/dist/content/skills/specialist-migracao-modernizacao/resources/templates/risk-analysis.md +527 -0
- package/dist/content/skills/specialist-mobile-design-avancado/MCP_INTEGRATION.md +17 -0
- package/dist/content/skills/specialist-mobile-design-avancado/README.md +46 -0
- package/dist/content/skills/specialist-mobile-design-avancado/SKILL.md +567 -0
- package/dist/content/skills/specialist-mobile-design-avancado/mcp_functions/README.md +10 -0
- package/dist/content/skills/specialist-mobile-design-avancado/resources/checklists/design-validation.md +23 -0
- package/dist/content/skills/specialist-mobile-design-avancado/resources/examples/design-examples.md +46 -0
- package/dist/content/skills/specialist-mobile-design-avancado/resources/reference/design-guide.md +23 -0
- package/dist/content/skills/specialist-modelagem-dominio/MCP_INTEGRATION.md +336 -0
- package/dist/content/skills/specialist-modelagem-dominio/README.md +314 -0
- package/dist/content/skills/specialist-modelagem-dominio/SKILL.md +241 -0
- package/dist/content/skills/specialist-modelagem-dominio/mcp_functions/init_domain.py +479 -0
- package/dist/content/skills/specialist-modelagem-dominio/mcp_functions/process_domain.py +526 -0
- package/dist/content/skills/specialist-modelagem-dominio/mcp_functions/validate_domain.py +569 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/checklists/domain-validation.md +341 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/examples/domain-examples.md +505 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/reference/domain-guide.md +601 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/reference/domain-modeling-complete-guide.md +1126 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/templates/arquitetura-c4.md +477 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/templates/casos-uso.md +395 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/templates/entidades-relacionamentos.md +368 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/templates/modelo-dominio.md +311 -0
- package/dist/content/skills/specialist-observabilidade/SKILL.md +462 -0
- package/dist/content/skills/specialist-performance-escalabilidade/SKILL.md +329 -0
- package/dist/content/skills/specialist-plano-execucao-ia/MCP_INTEGRATION.md +371 -0
- package/dist/content/skills/specialist-plano-execucao-ia/README.md +194 -0
- package/dist/content/skills/specialist-plano-execucao-ia/SKILL.md +271 -0
- package/dist/content/skills/specialist-plano-execucao-ia/mcp_functions/README.md +38 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/checklists/planning-validation.md +144 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/examples/planning-examples.md +203 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/reference/planning-guide.md +316 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/templates/backlog.md +146 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/templates/historia-backend.md +157 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/templates/historia-frontend.md +116 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/templates/historia-usuario.md +66 -0
- package/dist/content/skills/specialist-prototipagem-stitch/MCP_INTEGRATION.md +533 -0
- package/dist/content/skills/specialist-prototipagem-stitch/README.md +321 -0
- package/dist/content/skills/specialist-prototipagem-stitch/SKILL.md +194 -0
- package/dist/content/skills/specialist-prototipagem-stitch/mcp_functions/README.md +239 -0
- package/dist/content/skills/specialist-prototipagem-stitch/resources/checklists/stitch-validation.md +357 -0
- package/dist/content/skills/specialist-prototipagem-stitch/resources/examples/stitch-examples.md +372 -0
- package/dist/content/skills/specialist-prototipagem-stitch/resources/reference/stitch-guide.md +517 -0
- package/dist/content/skills/specialist-prototipagem-stitch/resources/templates/prompt-stitch.md +429 -0
- package/dist/content/skills/specialist-prototipagem-stitch/resources/templates/prototipo-stitch.md +317 -0
- package/dist/content/skills/specialist-seguranca-informacao/MCP_INTEGRATION.md +466 -0
- package/dist/content/skills/specialist-seguranca-informacao/README.md +245 -0
- package/dist/content/skills/specialist-seguranca-informacao/SKILL.md +343 -0
- package/dist/content/skills/specialist-seguranca-informacao/mcp_functions/init_security.py +405 -0
- package/dist/content/skills/specialist-seguranca-informacao/mcp_functions/process_security.py +611 -0
- package/dist/content/skills/specialist-seguranca-informacao/mcp_functions/validate_security.py +468 -0
- package/dist/content/skills/specialist-seguranca-informacao/resources/checklists/security-validation.md +368 -0
- package/dist/content/skills/specialist-seguranca-informacao/resources/examples/security-examples.md +358 -0
- package/dist/content/skills/specialist-seguranca-informacao/resources/reference/security-guide.md +757 -0
- package/dist/content/skills/specialist-seguranca-informacao/resources/templates/checklist-seguranca.md +383 -0
- package/dist/content/skills/specialist-seguranca-informacao/resources/templates/slo-sli.md +244 -0
- package/dist/content/skills/specialist-seguranca-informacao/resources/templates/threat-modeling.md +161 -0
- package/dist/content/skills/specialist-ux-design/MCP_INTEGRATION.md +294 -0
- package/dist/content/skills/specialist-ux-design/README.md +304 -0
- package/dist/content/skills/specialist-ux-design/SKILL.md +212 -0
- package/dist/content/skills/specialist-ux-design/mcp_functions/init_ux.py +126 -0
- package/dist/content/skills/specialist-ux-design/mcp_functions/process_ux.py +408 -0
- package/dist/content/skills/specialist-ux-design/mcp_functions/validate_ux.py +379 -0
- package/dist/content/skills/specialist-ux-design/resources/checklists/ux-validation.md +77 -0
- package/dist/content/skills/specialist-ux-design/resources/examples/ux-examples.md +161 -0
- package/dist/content/skills/specialist-ux-design/resources/reference/ux-guide.md +184 -0
- package/dist/content/skills/specialist-ux-design/resources/templates/design-doc.md +160 -0
- package/dist/content/skills/specialist-ux-design/resources/templates/jornada-usuario.md +126 -0
- package/dist/content/skills/specialist-ux-design/resources/templates/wireframes.md +155 -0
- package/dist/core/adr/ADRGenerator.d.ts +28 -0
- package/dist/core/adr/ADRGenerator.d.ts.map +1 -0
- package/dist/core/adr/ADRGenerator.js +63 -0
- package/dist/core/adr/ADRGenerator.js.map +1 -0
- package/dist/core/adr/index.d.ts +2 -0
- package/dist/core/adr/index.d.ts.map +1 -0
- package/dist/core/adr/index.js +2 -0
- package/dist/core/adr/index.js.map +1 -0
- package/dist/core/architecture/FitnessFunctions.d.ts +67 -0
- package/dist/core/architecture/FitnessFunctions.d.ts.map +1 -0
- package/dist/core/architecture/FitnessFunctions.js +292 -0
- package/dist/core/architecture/FitnessFunctions.js.map +1 -0
- package/dist/core/architecture/index.d.ts +3 -0
- package/dist/core/architecture/index.d.ts.map +1 -0
- package/dist/core/architecture/index.js +3 -0
- package/dist/core/architecture/index.js.map +1 -0
- package/dist/core/architecture/types.d.ts +42 -0
- package/dist/core/architecture/types.d.ts.map +1 -0
- package/dist/core/architecture/types.js +5 -0
- package/dist/core/architecture/types.js.map +1 -0
- package/dist/core/atam/ATAMAnalyzer.d.ts +19 -0
- package/dist/core/atam/ATAMAnalyzer.d.ts.map +1 -0
- package/dist/core/atam/ATAMAnalyzer.js +206 -0
- package/dist/core/atam/ATAMAnalyzer.js.map +1 -0
- package/dist/core/atam/ATAMReporter.d.ts +16 -0
- package/dist/core/atam/ATAMReporter.d.ts.map +1 -0
- package/dist/core/atam/ATAMReporter.js +175 -0
- package/dist/core/atam/ATAMReporter.js.map +1 -0
- package/dist/core/atam/QualityScenarios.d.ts +16 -0
- package/dist/core/atam/QualityScenarios.d.ts.map +1 -0
- package/dist/core/atam/QualityScenarios.js +149 -0
- package/dist/core/atam/QualityScenarios.js.map +1 -0
- package/dist/core/atam/RiskRegistry.d.ts +21 -0
- package/dist/core/atam/RiskRegistry.d.ts.map +1 -0
- package/dist/core/atam/RiskRegistry.js +83 -0
- package/dist/core/atam/RiskRegistry.js.map +1 -0
- package/dist/core/atam/index.d.ts +6 -0
- package/dist/core/atam/index.d.ts.map +1 -0
- package/dist/core/atam/index.js +6 -0
- package/dist/core/atam/index.js.map +1 -0
- package/dist/core/atam/types.d.ts +86 -0
- package/dist/core/atam/types.d.ts.map +1 -0
- package/dist/core/atam/types.js +5 -0
- package/dist/core/atam/types.js.map +1 -0
- package/dist/core/authority/AuthorityManager.d.ts +19 -0
- package/dist/core/authority/AuthorityManager.d.ts.map +1 -0
- package/dist/core/authority/AuthorityManager.js +66 -0
- package/dist/core/authority/AuthorityManager.js.map +1 -0
- package/dist/core/authority/index.d.ts +2 -0
- package/dist/core/authority/index.d.ts.map +1 -0
- package/dist/core/authority/index.js +2 -0
- package/dist/core/authority/index.js.map +1 -0
- package/dist/core/autofix/AutoFixEngine.d.ts +17 -0
- package/dist/core/autofix/AutoFixEngine.d.ts.map +1 -0
- package/dist/core/autofix/AutoFixEngine.js +46 -0
- package/dist/core/autofix/AutoFixEngine.js.map +1 -0
- package/dist/core/autofix/index.d.ts +2 -0
- package/dist/core/autofix/index.d.ts.map +1 -0
- package/dist/core/autofix/index.js +2 -0
- package/dist/core/autofix/index.js.map +1 -0
- package/dist/core/automation/AutoExecutor.d.ts +20 -0
- package/dist/core/automation/AutoExecutor.d.ts.map +1 -0
- package/dist/core/automation/AutoExecutor.js +38 -0
- package/dist/core/automation/AutoExecutor.js.map +1 -0
- package/dist/core/automation/index.d.ts +2 -0
- package/dist/core/automation/index.d.ts.map +1 -0
- package/dist/core/automation/index.js +2 -0
- package/dist/core/automation/index.js.map +1 -0
- package/dist/core/checkpoint/CheckpointManager.d.ts +43 -0
- package/dist/core/checkpoint/CheckpointManager.d.ts.map +1 -0
- package/dist/core/checkpoint/CheckpointManager.js +158 -0
- package/dist/core/checkpoint/CheckpointManager.js.map +1 -0
- package/dist/core/checkpoint/RollbackEngine.d.ts +31 -0
- package/dist/core/checkpoint/RollbackEngine.d.ts.map +1 -0
- package/dist/core/checkpoint/RollbackEngine.js +176 -0
- package/dist/core/checkpoint/RollbackEngine.js.map +1 -0
- package/dist/core/checkpoint/index.d.ts +4 -0
- package/dist/core/checkpoint/index.d.ts.map +1 -0
- package/dist/core/checkpoint/index.js +4 -0
- package/dist/core/checkpoint/index.js.map +1 -0
- package/dist/core/checkpoint/types.d.ts +33 -0
- package/dist/core/checkpoint/types.d.ts.map +1 -0
- package/dist/core/checkpoint/types.js +2 -0
- package/dist/core/checkpoint/types.js.map +1 -0
- package/dist/core/consistency/ConsistencyAnalyzer.d.ts +12 -0
- package/dist/core/consistency/ConsistencyAnalyzer.d.ts.map +1 -0
- package/dist/core/consistency/ConsistencyAnalyzer.js +79 -0
- package/dist/core/consistency/ConsistencyAnalyzer.js.map +1 -0
- package/dist/core/consistency/index.d.ts +3 -0
- package/dist/core/consistency/index.d.ts.map +1 -0
- package/dist/core/consistency/index.js +3 -0
- package/dist/core/consistency/index.js.map +1 -0
- package/dist/core/consistency/types.d.ts +43 -0
- package/dist/core/consistency/types.d.ts.map +1 -0
- package/dist/core/consistency/types.js +5 -0
- package/dist/core/consistency/types.js.map +1 -0
- package/dist/core/context/ContextDetector.d.ts +14 -0
- package/dist/core/context/ContextDetector.d.ts.map +1 -0
- package/dist/core/context/ContextDetector.js +58 -0
- package/dist/core/context/ContextDetector.js.map +1 -0
- package/dist/core/context/index.d.ts +3 -0
- package/dist/core/context/index.d.ts.map +1 -0
- package/dist/core/context/index.js +3 -0
- package/dist/core/context/index.js.map +1 -0
- package/dist/core/context/types.d.ts +41 -0
- package/dist/core/context/types.d.ts.map +1 -0
- package/dist/core/context/types.js +5 -0
- package/dist/core/context/types.js.map +1 -0
- package/dist/core/decision/AlternativeGenerator.d.ts +32 -0
- package/dist/core/decision/AlternativeGenerator.d.ts.map +1 -0
- package/dist/core/decision/AlternativeGenerator.js +155 -0
- package/dist/core/decision/AlternativeGenerator.js.map +1 -0
- package/dist/core/decision/ConfidenceCalculator.d.ts +42 -0
- package/dist/core/decision/ConfidenceCalculator.d.ts.map +1 -0
- package/dist/core/decision/ConfidenceCalculator.js +114 -0
- package/dist/core/decision/ConfidenceCalculator.js.map +1 -0
- package/dist/core/decision/DecisionEngine.d.ts +42 -0
- package/dist/core/decision/DecisionEngine.d.ts.map +1 -0
- package/dist/core/decision/DecisionEngine.js +144 -0
- package/dist/core/decision/DecisionEngine.js.map +1 -0
- package/dist/core/decision/DecisionMatrix.d.ts +29 -0
- package/dist/core/decision/DecisionMatrix.d.ts.map +1 -0
- package/dist/core/decision/DecisionMatrix.js +66 -0
- package/dist/core/decision/DecisionMatrix.js.map +1 -0
- package/dist/core/decision/index.d.ts +6 -0
- package/dist/core/decision/index.d.ts.map +1 -0
- package/dist/core/decision/index.js +6 -0
- package/dist/core/decision/index.js.map +1 -0
- package/dist/core/decision/types.d.ts +40 -0
- package/dist/core/decision/types.d.ts.map +1 -0
- package/dist/core/decision/types.js +5 -0
- package/dist/core/decision/types.js.map +1 -0
- package/dist/core/discovery/CodebaseDiscovery.d.ts +19 -0
- package/dist/core/discovery/CodebaseDiscovery.d.ts.map +1 -0
- package/dist/core/discovery/CodebaseDiscovery.js +83 -0
- package/dist/core/discovery/CodebaseDiscovery.js.map +1 -0
- package/dist/core/discovery/index.d.ts +2 -0
- package/dist/core/discovery/index.d.ts.map +1 -0
- package/dist/core/discovery/index.js +2 -0
- package/dist/core/discovery/index.js.map +1 -0
- package/dist/core/feedback/FeedbackLoop.d.ts +21 -0
- package/dist/core/feedback/FeedbackLoop.d.ts.map +1 -0
- package/dist/core/feedback/FeedbackLoop.js +45 -0
- package/dist/core/feedback/FeedbackLoop.js.map +1 -0
- package/dist/core/feedback/index.d.ts +2 -0
- package/dist/core/feedback/index.d.ts.map +1 -0
- package/dist/core/feedback/index.js +2 -0
- package/dist/core/feedback/index.js.map +1 -0
- package/dist/core/growth/GrowthProjector.d.ts +12 -0
- package/dist/core/growth/GrowthProjector.d.ts.map +1 -0
- package/dist/core/growth/GrowthProjector.js +93 -0
- package/dist/core/growth/GrowthProjector.js.map +1 -0
- package/dist/core/growth/index.d.ts +3 -0
- package/dist/core/growth/index.d.ts.map +1 -0
- package/dist/core/growth/index.js +3 -0
- package/dist/core/growth/index.js.map +1 -0
- package/dist/core/growth/types.d.ts +40 -0
- package/dist/core/growth/types.d.ts.map +1 -0
- package/dist/core/growth/types.js +5 -0
- package/dist/core/growth/types.js.map +1 -0
- package/dist/core/impact/ImpactAnalyzer.d.ts +22 -0
- package/dist/core/impact/ImpactAnalyzer.d.ts.map +1 -0
- package/dist/core/impact/ImpactAnalyzer.js +43 -0
- package/dist/core/impact/ImpactAnalyzer.js.map +1 -0
- package/dist/core/impact/index.d.ts +2 -0
- package/dist/core/impact/index.d.ts.map +1 -0
- package/dist/core/impact/index.js +2 -0
- package/dist/core/impact/index.js.map +1 -0
- package/dist/core/knowledge/ADRManager.d.ts +22 -0
- package/dist/core/knowledge/ADRManager.d.ts.map +1 -0
- package/dist/core/knowledge/ADRManager.js +82 -0
- package/dist/core/knowledge/ADRManager.js.map +1 -0
- package/dist/core/knowledge/ContextLoader.d.ts +18 -0
- package/dist/core/knowledge/ContextLoader.d.ts.map +1 -0
- package/dist/core/knowledge/ContextLoader.js +48 -0
- package/dist/core/knowledge/ContextLoader.js.map +1 -0
- package/dist/core/knowledge/KnowledgeBase.d.ts +35 -0
- package/dist/core/knowledge/KnowledgeBase.d.ts.map +1 -0
- package/dist/core/knowledge/KnowledgeBase.js +143 -0
- package/dist/core/knowledge/KnowledgeBase.js.map +1 -0
- package/dist/core/knowledge/PatternRegistry.d.ts +22 -0
- package/dist/core/knowledge/PatternRegistry.d.ts.map +1 -0
- package/dist/core/knowledge/PatternRegistry.js +56 -0
- package/dist/core/knowledge/PatternRegistry.js.map +1 -0
- package/dist/core/knowledge/index.d.ts +6 -0
- package/dist/core/knowledge/index.d.ts.map +1 -0
- package/dist/core/knowledge/index.js +6 -0
- package/dist/core/knowledge/index.js.map +1 -0
- package/dist/core/knowledge/types.d.ts +60 -0
- package/dist/core/knowledge/types.d.ts.map +1 -0
- package/dist/core/knowledge/types.js +2 -0
- package/dist/core/knowledge/types.js.map +1 -0
- package/dist/core/metrics/MetricsCollector.d.ts +21 -0
- package/dist/core/metrics/MetricsCollector.d.ts.map +1 -0
- package/dist/core/metrics/MetricsCollector.js +20 -0
- package/dist/core/metrics/MetricsCollector.js.map +1 -0
- package/dist/core/metrics/index.d.ts +2 -0
- package/dist/core/metrics/index.d.ts.map +1 -0
- package/dist/core/metrics/index.js +2 -0
- package/dist/core/metrics/index.js.map +1 -0
- package/dist/core/notification/NotificationManager.d.ts +20 -0
- package/dist/core/notification/NotificationManager.d.ts.map +1 -0
- package/dist/core/notification/NotificationManager.js +16 -0
- package/dist/core/notification/NotificationManager.js.map +1 -0
- package/dist/core/notification/index.d.ts +2 -0
- package/dist/core/notification/index.d.ts.map +1 -0
- package/dist/core/notification/index.js +2 -0
- package/dist/core/notification/index.js.map +1 -0
- package/dist/core/risk/RiskEvaluator.d.ts +11 -0
- package/dist/core/risk/RiskEvaluator.d.ts.map +1 -0
- package/dist/core/risk/RiskEvaluator.js +83 -0
- package/dist/core/risk/RiskEvaluator.js.map +1 -0
- package/dist/core/risk/index.d.ts +3 -0
- package/dist/core/risk/index.d.ts.map +1 -0
- package/dist/core/risk/index.js +3 -0
- package/dist/core/risk/index.js.map +1 -0
- package/dist/core/risk/types.d.ts +19 -0
- package/dist/core/risk/types.d.ts.map +1 -0
- package/dist/core/risk/types.js +2 -0
- package/dist/core/risk/types.js.map +1 -0
- package/dist/core/roadmap/RoadmapManager.d.ts +14 -0
- package/dist/core/roadmap/RoadmapManager.d.ts.map +1 -0
- package/dist/core/roadmap/RoadmapManager.js +81 -0
- package/dist/core/roadmap/RoadmapManager.js.map +1 -0
- package/dist/core/roadmap/index.d.ts +3 -0
- package/dist/core/roadmap/index.d.ts.map +1 -0
- package/dist/core/roadmap/index.js +3 -0
- package/dist/core/roadmap/index.js.map +1 -0
- package/dist/core/roadmap/types.d.ts +64 -0
- package/dist/core/roadmap/types.d.ts.map +1 -0
- package/dist/core/roadmap/types.js +5 -0
- package/dist/core/roadmap/types.js.map +1 -0
- package/dist/core/strangler/StranglerOrchestrator.d.ts +14 -0
- package/dist/core/strangler/StranglerOrchestrator.d.ts.map +1 -0
- package/dist/core/strangler/StranglerOrchestrator.js +87 -0
- package/dist/core/strangler/StranglerOrchestrator.js.map +1 -0
- package/dist/core/strangler/index.d.ts +3 -0
- package/dist/core/strangler/index.d.ts.map +1 -0
- package/dist/core/strangler/index.js +3 -0
- package/dist/core/strangler/index.js.map +1 -0
- package/dist/core/strangler/types.d.ts +70 -0
- package/dist/core/strangler/types.d.ts.map +1 -0
- package/dist/core/strangler/types.js +5 -0
- package/dist/core/strangler/types.js.map +1 -0
- package/dist/core/testing/TestRunner.d.ts +17 -0
- package/dist/core/testing/TestRunner.d.ts.map +1 -0
- package/dist/core/testing/TestRunner.js +22 -0
- package/dist/core/testing/TestRunner.js.map +1 -0
- package/dist/core/testing/index.d.ts +2 -0
- package/dist/core/testing/index.d.ts.map +1 -0
- package/dist/core/testing/index.js +2 -0
- package/dist/core/testing/index.js.map +1 -0
- package/dist/core/tradeoff/TradeoffAnalyzer.d.ts +24 -0
- package/dist/core/tradeoff/TradeoffAnalyzer.d.ts.map +1 -0
- package/dist/core/tradeoff/TradeoffAnalyzer.js +51 -0
- package/dist/core/tradeoff/TradeoffAnalyzer.js.map +1 -0
- package/dist/core/tradeoff/index.d.ts +2 -0
- package/dist/core/tradeoff/index.d.ts.map +1 -0
- package/dist/core/tradeoff/index.js +2 -0
- package/dist/core/tradeoff/index.js.map +1 -0
- package/dist/core/validation/DependencyValidator.d.ts +28 -0
- package/dist/core/validation/DependencyValidator.d.ts.map +1 -0
- package/dist/core/validation/DependencyValidator.js +188 -0
- package/dist/core/validation/DependencyValidator.js.map +1 -0
- package/dist/core/validation/SecurityValidator.d.ts +44 -0
- package/dist/core/validation/SecurityValidator.d.ts.map +1 -0
- package/dist/core/validation/SecurityValidator.js +248 -0
- package/dist/core/validation/SecurityValidator.js.map +1 -0
- package/dist/core/validation/ValidationPipeline.d.ts +62 -0
- package/dist/core/validation/ValidationPipeline.d.ts.map +1 -0
- package/dist/core/validation/ValidationPipeline.js +216 -0
- package/dist/core/validation/ValidationPipeline.js.map +1 -0
- package/dist/core/validation/index.d.ts +4 -0
- package/dist/core/validation/index.d.ts.map +1 -0
- package/dist/core/validation/index.js +4 -0
- package/dist/core/validation/index.js.map +1 -0
- package/dist/core/validation/layers/ArchitectureValidator.d.ts +21 -0
- package/dist/core/validation/layers/ArchitectureValidator.d.ts.map +1 -0
- package/dist/core/validation/layers/ArchitectureValidator.js +226 -0
- package/dist/core/validation/layers/ArchitectureValidator.js.map +1 -0
- package/dist/core/validation/layers/QualityValidator.d.ts +23 -0
- package/dist/core/validation/layers/QualityValidator.d.ts.map +1 -0
- package/dist/core/validation/layers/QualityValidator.js +259 -0
- package/dist/core/validation/layers/QualityValidator.js.map +1 -0
- package/dist/core/validation/layers/SecurityValidatorWrapper.d.ts +12 -0
- package/dist/core/validation/layers/SecurityValidatorWrapper.d.ts.map +1 -0
- package/dist/core/validation/layers/SecurityValidatorWrapper.js +54 -0
- package/dist/core/validation/layers/SecurityValidatorWrapper.js.map +1 -0
- package/dist/core/validation/layers/SemanticValidator.d.ts +21 -0
- package/dist/core/validation/layers/SemanticValidator.d.ts.map +1 -0
- package/dist/core/validation/layers/SemanticValidator.js +182 -0
- package/dist/core/validation/layers/SemanticValidator.js.map +1 -0
- package/dist/core/validation/layers/SyntacticValidator.d.ts +17 -0
- package/dist/core/validation/layers/SyntacticValidator.d.ts.map +1 -0
- package/dist/core/validation/layers/SyntacticValidator.js +194 -0
- package/dist/core/validation/layers/SyntacticValidator.js.map +1 -0
- package/dist/core/validation/types.d.ts +90 -0
- package/dist/core/validation/types.d.ts.map +1 -0
- package/dist/core/validation/types.js +24 -0
- package/dist/core/validation/types.js.map +1 -0
- package/dist/frontend-first/contract-generator.d.ts +47 -0
- package/dist/frontend-first/contract-generator.d.ts.map +1 -0
- package/dist/frontend-first/contract-generator.js +312 -0
- package/dist/frontend-first/contract-generator.js.map +1 -0
- package/dist/frontend-first/mock-generator.d.ts +23 -0
- package/dist/frontend-first/mock-generator.d.ts.map +1 -0
- package/dist/frontend-first/mock-generator.js +186 -0
- package/dist/frontend-first/mock-generator.js.map +1 -0
- package/dist/optimization/batch-prompts.d.ts +27 -0
- package/dist/optimization/batch-prompts.d.ts.map +1 -0
- package/dist/optimization/batch-prompts.js +178 -0
- package/dist/optimization/batch-prompts.js.map +1 -0
- package/dist/optimization/context-cache.d.ts +45 -0
- package/dist/optimization/context-cache.d.ts.map +1 -0
- package/dist/optimization/context-cache.js +149 -0
- package/dist/optimization/context-cache.js.map +1 -0
- package/dist/optimization/smart-validation.d.ts +43 -0
- package/dist/optimization/smart-validation.d.ts.map +1 -0
- package/dist/optimization/smart-validation.js +137 -0
- package/dist/optimization/smart-validation.js.map +1 -0
- package/dist/stdio.js +184 -0
- package/dist/stdio.js.map +1 -1
- package/dist/tasks/task-manager.d.ts +30 -0
- package/dist/tasks/task-manager.d.ts.map +1 -0
- package/dist/tasks/task-manager.js +290 -0
- package/dist/tasks/task-manager.js.map +1 -0
- package/dist/tools/atualizar-tarefa.d.ts +17 -0
- package/dist/tools/atualizar-tarefa.d.ts.map +1 -0
- package/dist/tools/atualizar-tarefa.js +200 -0
- package/dist/tools/atualizar-tarefa.js.map +1 -0
- package/dist/tools/configurar-modo.d.ts +10 -0
- package/dist/tools/configurar-modo.d.ts.map +1 -0
- package/dist/tools/configurar-modo.js +121 -0
- package/dist/tools/configurar-modo.js.map +1 -0
- package/dist/tools/contexto.d.ts.map +1 -1
- package/dist/tools/contexto.js +35 -4
- package/dist/tools/contexto.js.map +1 -1
- package/dist/tools/criar-tarefa.d.ts +17 -0
- package/dist/tools/criar-tarefa.d.ts.map +1 -0
- package/dist/tools/criar-tarefa.js +132 -0
- package/dist/tools/criar-tarefa.js.map +1 -0
- package/dist/tools/fase1/checkpoint.tools.d.ts +150 -0
- package/dist/tools/fase1/checkpoint.tools.d.ts.map +1 -0
- package/dist/tools/fase1/checkpoint.tools.js +165 -0
- package/dist/tools/fase1/checkpoint.tools.js.map +1 -0
- package/dist/tools/fase1/knowledge.tools.d.ts +265 -0
- package/dist/tools/fase1/knowledge.tools.d.ts.map +1 -0
- package/dist/tools/fase1/knowledge.tools.js +209 -0
- package/dist/tools/fase1/knowledge.tools.js.map +1 -0
- package/dist/tools/fase1/misc.tools.d.ts +113 -0
- package/dist/tools/fase1/misc.tools.d.ts.map +1 -0
- package/dist/tools/fase1/misc.tools.js +99 -0
- package/dist/tools/fase1/misc.tools.js.map +1 -0
- package/dist/tools/fase1/validation.tools.d.ts +103 -0
- package/dist/tools/fase1/validation.tools.d.ts.map +1 -0
- package/dist/tools/fase1/validation.tools.js +174 -0
- package/dist/tools/fase1/validation.tools.js.map +1 -0
- package/dist/tools/gerar-contrato-api.d.ts +15 -0
- package/dist/tools/gerar-contrato-api.d.ts.map +1 -0
- package/dist/tools/gerar-contrato-api.js +216 -0
- package/dist/tools/gerar-contrato-api.js.map +1 -0
- package/dist/tools/iniciar-projeto.d.ts.map +1 -1
- package/dist/tools/iniciar-projeto.js +27 -1
- package/dist/tools/iniciar-projeto.js.map +1 -1
- package/dist/tools/listar-tarefas.d.ts +16 -0
- package/dist/tools/listar-tarefas.d.ts.map +1 -0
- package/dist/tools/listar-tarefas.js +215 -0
- package/dist/tools/listar-tarefas.js.map +1 -0
- package/dist/tools/phase2/architecture.tools.d.ts +37 -0
- package/dist/tools/phase2/architecture.tools.d.ts.map +1 -0
- package/dist/tools/phase2/architecture.tools.js +51 -0
- package/dist/tools/phase2/architecture.tools.js.map +1 -0
- package/dist/tools/phase2/decision.tools.d.ts +61 -0
- package/dist/tools/phase2/decision.tools.d.ts.map +1 -0
- package/dist/tools/phase2/decision.tools.js +69 -0
- package/dist/tools/phase2/decision.tools.js.map +1 -0
- package/dist/tools/phase2/index.d.ts +8 -0
- package/dist/tools/phase2/index.d.ts.map +1 -0
- package/dist/tools/phase2/index.js +16 -0
- package/dist/tools/phase2/index.js.map +1 -0
- package/dist/tools/phase2/validation.tools.d.ts +40 -0
- package/dist/tools/phase2/validation.tools.d.ts.map +1 -0
- package/dist/tools/phase2/validation.tools.js +43 -0
- package/dist/tools/phase2/validation.tools.js.map +1 -0
- package/dist/tools/phase3/atam.tools.d.ts +26 -0
- package/dist/tools/phase3/atam.tools.d.ts.map +1 -0
- package/dist/tools/phase3/atam.tools.js +48 -0
- package/dist/tools/phase3/atam.tools.js.map +1 -0
- package/dist/tools/phase3/consistency.tools.d.ts +15 -0
- package/dist/tools/phase3/consistency.tools.d.ts.map +1 -0
- package/dist/tools/phase3/consistency.tools.js +20 -0
- package/dist/tools/phase3/consistency.tools.js.map +1 -0
- package/dist/tools/phase3/context.tools.d.ts +25 -0
- package/dist/tools/phase3/context.tools.d.ts.map +1 -0
- package/dist/tools/phase3/context.tools.js +32 -0
- package/dist/tools/phase3/context.tools.js.map +1 -0
- package/dist/tools/phase3/growth.tools.d.ts +28 -0
- package/dist/tools/phase3/growth.tools.d.ts.map +1 -0
- package/dist/tools/phase3/growth.tools.js +32 -0
- package/dist/tools/phase3/growth.tools.js.map +1 -0
- package/dist/tools/phase3/index.d.ts +10 -0
- package/dist/tools/phase3/index.d.ts.map +1 -0
- package/dist/tools/phase3/index.js +10 -0
- package/dist/tools/phase3/index.js.map +1 -0
- package/dist/tools/phase3/roadmap.tools.d.ts +41 -0
- package/dist/tools/phase3/roadmap.tools.d.ts.map +1 -0
- package/dist/tools/phase3/roadmap.tools.js +44 -0
- package/dist/tools/phase3/roadmap.tools.js.map +1 -0
- package/dist/tools/phase3/strangler.tools.d.ts +37 -0
- package/dist/tools/phase3/strangler.tools.d.ts.map +1 -0
- package/dist/tools/phase3/strangler.tools.js +44 -0
- package/dist/tools/phase3/strangler.tools.js.map +1 -0
- package/dist/tools/proximo.d.ts.map +1 -1
- package/dist/tools/proximo.js +45 -8
- package/dist/tools/proximo.js.map +1 -1
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +28 -5
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/validar-gate.d.ts.map +1 -1
- package/dist/tools/validar-gate.js +14 -0
- package/dist/tools/validar-gate.js.map +1 -1
- package/dist/types/config.d.ts +46 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +162 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +38 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/tasks.d.ts +100 -0
- package/dist/types/tasks.d.ts.map +1 -0
- package/dist/types/tasks.js +2 -0
- package/dist/types/tasks.js.map +1 -0
- package/dist/utils/__tests__/prompt-mapper.test.d.ts +2 -0
- package/dist/utils/__tests__/prompt-mapper.test.d.ts.map +1 -0
- package/dist/utils/__tests__/prompt-mapper.test.js +184 -0
- package/dist/utils/__tests__/prompt-mapper.test.js.map +1 -0
- package/dist/utils/history.d.ts +10 -0
- package/dist/utils/history.d.ts.map +1 -1
- package/dist/utils/history.js +12 -1
- package/dist/utils/history.js.map +1 -1
- package/dist/utils/prompt-mapper.d.ts +46 -0
- package/dist/utils/prompt-mapper.d.ts.map +1 -1
- package/dist/utils/prompt-mapper.js +100 -0
- package/dist/utils/prompt-mapper.js.map +1 -1
- package/package.json +5 -5
- package/dist/content/examples/Exemplo de Fluxo Completo com Java e Spring Boot.md +0 -250
- package/dist/content/examples/Exemplo de Fluxo Completo com Laravel e Filament.md +0 -278
- package/dist/content/examples/Exemplo de Fluxo Completo com Laravel e Livewire.md +0 -261
- package/dist/content/examples/Exemplo de Fluxo Completo com Node e NestJS.md +0 -258
- package/dist/content/guides/Cat/303/241logo de Stacks para Cloud Moderna.md" +0 -119
- package/dist/content/guides/Cat/303/241logo de Stacks para Hospedagem Compartilhada.md" +0 -147
- package/dist/content/guides/Checklist Mestre de Entrega.md +0 -68
- package/dist/content/guides/Gates de Qualidade.md +0 -209
- package/dist/content/guides/Guia de Adi/303/247/303/243o de Novas Funcionalidades.md" +0 -355
- package/dist/content/guides/Guia de Chaos Engineering.md +0 -267
- package/dist/content/guides/Guia de Estrat/303/251gias de Cache.md" +0 -352
- package/dist/content/guides/Guia de Migrations Zero-Downtime.md +0 -311
- package/dist/content/guides/Guia de Multi-tenancy.md +0 -368
- package/dist/content/guides/Guia de Otimiza/303/247/303/243o de Custos Cloud.md" +0 -195
- package/dist/content/guides/Guia de Refatora/303/247/303/243o de C/303/263digo Legado com IA.md" +0 -162
- package/dist/content/guides/Guia de SLOs e Error Budgets.md +0 -315
- package/dist/content/guides/M/303/251tricas de Efici/303/252ncia do Desenvolvimento com IA.md" +0 -93
- package/dist/content/guides/Rules base.md +0 -90
- package/dist/content/playbook/Playbook de Desenvolvimento com IA.md +0 -364
- package/dist/content/prompts/README.md +0 -203
- package/dist/content/prompts/acessibilidade/analise-acessibilidade.md +0 -257
- package/dist/content/prompts/apis/design-api-rest.md +0 -303
- package/dist/content/prompts/apis/idempotencia.md +0 -254
- package/dist/content/prompts/apis/versionamento.md +0 -313
- package/dist/content/prompts/arquitetura/arquitetura-c4-completo.md +0 -190
- package/dist/content/prompts/arquitetura/clean-architecture.md +0 -151
- package/dist/content/prompts/arquitetura/multi-tenancy.md +0 -235
- package/dist/content/prompts/database/migrations-zero-downtime.md +0 -192
- package/dist/content/prompts/database/otimizacao-queries.md +0 -296
- package/dist/content/prompts/desenvolvimento/code-review.md +0 -301
- package/dist/content/prompts/desenvolvimento/gerar-servico.md +0 -271
- package/dist/content/prompts/devops/docker-compose.md +0 -336
- package/dist/content/prompts/devops/feature-flags.md +0 -374
- package/dist/content/prompts/devops/kubernetes-deploy.md +0 -460
- package/dist/content/prompts/devops/pipeline-cicd.md +0 -358
- package/dist/content/prompts/devops/terraform-iac.md +0 -502
- package/dist/content/prompts/escalabilidade/analise-performance.md +0 -240
- package/dist/content/prompts/escalabilidade/analise-performance.txt +0 -94
- package/dist/content/prompts/escalabilidade/caching.md +0 -255
- package/dist/content/prompts/observabilidade/chaos-testing.md +0 -237
- package/dist/content/prompts/observabilidade/estrategia-observabilidade.md +0 -263
- package/dist/content/prompts/observabilidade/estrategia-observabilidade.txt +0 -134
- package/dist/content/prompts/observabilidade/slos.md +0 -215
- package/dist/content/prompts/produto/discovery-inicial.md +0 -203
- package/dist/content/prompts/produto/discovery-inicial.txt +0 -33
- package/dist/content/prompts/requisitos/refinar-requisitos.md +0 -232
- package/dist/content/prompts/requisitos/refinar-requisitos.txt +0 -40
- package/dist/content/prompts/seguranca/analise-seguranca.md +0 -243
- package/dist/content/prompts/seguranca/pentest-checklist.md +0 -333
- package/dist/content/prompts/seguranca/rate-limiting.md +0 -356
- package/dist/content/prompts/seguranca/revisao-lgpd.md +0 -227
- package/dist/content/prompts/seguranca/threat-modeling.md +0 -224
- package/dist/content/prompts/testes/contract-testing.md +0 -340
- package/dist/content/prompts/testes/gerar-testes-unitarios.md +0 -474
- package/dist/content/prompts/testes/testes-e2e.md +0 -460
- package/dist/content/prompts/testes/testes-integracao.md +0 -418
- package/dist/content/prompts/testes/testes-performance.md +0 -458
- package/dist/content/prompts/ux/gerar-ui-stitch.md +0 -151
- package/dist/content/specialists/Especialista em Acessibilidade.md +0 -266
- package/dist/content/specialists/Especialista em An/303/241lise de Testes.md" +0 -434
- package/dist/content/specialists/Especialista em Arquitetura Avan/303/247ada.md" +0 -358
- package/dist/content/specialists/Especialista em Arquitetura de Software.md +0 -177
- package/dist/content/specialists/Especialista em Banco de Dados.md +0 -260
- package/dist/content/specialists/Especialista em Contrato de API.md +0 -172
- package/dist/content/specialists/Especialista em Dados e Analytics com IA.md +0 -246
- package/dist/content/specialists/Especialista em Debugging e Troubleshooting.md +0 -191
- package/dist/content/specialists/Especialista em Desenvolvimento Frontend.md +0 -477
- package/dist/content/specialists/Especialista em Desenvolvimento Mobile.md +0 -241
- package/dist/content/specialists/Especialista em Desenvolvimento e Vibe Coding Estruturado.md +0 -417
- package/dist/content/specialists/Especialista em DevOps e Infraestrutura.md +0 -294
- package/dist/content/specialists/Especialista em Documenta/303/247/303/243o T/303/251cnica.md" +0 -227
- package/dist/content/specialists/Especialista em Engenharia de Requisitos com IA.md +0 -299
- package/dist/content/specialists/Especialista em Explora/303/247/303/243o de Codebase.md" +0 -179
- package/dist/content/specialists/Especialista em Gest/303/243o de Produto.md" +0 -179
- package/dist/content/specialists/Especialista em Migra/303/247/303/243o e Moderniza/303/247/303/243o.md" +0 -410
- package/dist/content/specialists/Especialista em Modelagem e Arquitetura de Dom/303/255nio com IA.md" +0 -248
- package/dist/content/specialists/Especialista em Observabilidade.md +0 -415
- package/dist/content/specialists/Especialista em Performance e Escalabilidade.md +0 -373
- package/dist/content/specialists/Especialista em Plano de Execu/303/247/303/243o com IA.md" +0 -341
- package/dist/content/specialists/Especialista em Prototipagem R/303/241pida com Google Stitch.md" +0 -419
- package/dist/content/specialists/Especialista em Seguran/303/247a da Informa/303/247/303/243o.md" +0 -508
- package/dist/content/specialists/Especialista em UX Design.md +0 -453
- package/dist/content/specialists/INDEX.md +0 -43
- package/dist/content/templates/PRD.md +0 -165
- package/dist/content/templates/README.md +0 -65
- package/dist/content/templates/adr.md +0 -103
- package/dist/content/templates/arquitetura.md +0 -279
- package/dist/content/templates/backlog.md +0 -185
- package/dist/content/templates/checklist-seguranca.md +0 -180
- package/dist/content/templates/contexto.md +0 -120
- package/dist/content/templates/criterios-aceite.md +0 -99
- package/dist/content/templates/design-banco.md +0 -270
- package/dist/content/templates/design-doc.md +0 -240
- package/dist/content/templates/feature.md +0 -88
- package/dist/content/templates/historia-backend.md +0 -84
- package/dist/content/templates/historia-frontend.md +0 -75
- package/dist/content/templates/historia-usuario.md +0 -125
- package/dist/content/templates/mapa-navegacao.md +0 -133
- package/dist/content/templates/matriz-rastreabilidade.md +0 -121
- package/dist/content/templates/modelo-dominio.md +0 -219
- package/dist/content/templates/plano-testes.md +0 -199
- package/dist/content/templates/prototipo-stitch.md +0 -138
- package/dist/content/templates/requisitos.md +0 -162
- package/dist/content/templates/slo-sli.md +0 -197
- /package/dist/content/{guides/Guia de Debugging com IA.md → skills/specialist-debugging-troubleshooting/resources/reference/debugging-ai-guide.md} +0 -0
- /package/dist/content/{prompts/arquitetura → skills/specialist-modelagem-dominio/resources/prompts}/ddd-bounded-contexts.md +0 -0
- /package/dist/content/{prompts/arquitetura → skills/specialist-modelagem-dominio/resources/prompts}/ddd-cqrs.md +0 -0
- /package/dist/content/{prompts/arquitetura → skills/specialist-modelagem-dominio/resources/prompts}/modelo-dominio.md +0 -0
package/dist/content/skills/specialist-desenvolvimento-frontend/mcp_functions/validate_frontend.py
ADDED
|
@@ -0,0 +1,766 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Função MCP de Referência: validate_frontend_quality()
|
|
3
|
+
|
|
4
|
+
ESTE ARQUIVO É APENAS REFERÊNCIA PARA IMPLEMENTAÇÃO NO MCP
|
|
5
|
+
NÃO EXECUTÁVEL LOCALMENTE
|
|
6
|
+
|
|
7
|
+
Implementação real deve ser feita no servidor MCP externo.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
import json
|
|
12
|
+
import re
|
|
13
|
+
from typing import Dict, List, Any, Optional, Tuple
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
async def validate_frontend_quality(params: Dict[str, Any]) -> Dict[str, Any]:
|
|
17
|
+
"""
|
|
18
|
+
Valida qualidade dos componentes frontend
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
params: Dicionário com parâmetros de validação
|
|
22
|
+
- project_path: str - Caminho do projeto
|
|
23
|
+
- artifact_path: str - Caminho do artefato principal
|
|
24
|
+
- threshold: int - Score mínimo (default: 75)
|
|
25
|
+
- check_types: list - Tipos de validação
|
|
26
|
+
- stack: str - Stack tecnológico
|
|
27
|
+
- strict_mode: bool - Modo estrito de validação
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
Dict com resultado da validação
|
|
31
|
+
- success: bool - Status da operação
|
|
32
|
+
- score: int - Score final (0-100)
|
|
33
|
+
- validation_results: dict - Resultados detalhados
|
|
34
|
+
- issues_found: list - Lista de problemas encontrados
|
|
35
|
+
- recommendations: list - Recomendações de melhoria
|
|
36
|
+
- passed_threshold: bool - Se passou no threshold
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
try:
|
|
40
|
+
project_path = params.get("project_path")
|
|
41
|
+
artifact_path = params.get("artifact_path", "")
|
|
42
|
+
threshold = params.get("threshold", 75)
|
|
43
|
+
stack = params.get("stack", "react")
|
|
44
|
+
strict_mode = params.get("strict_mode", False)
|
|
45
|
+
|
|
46
|
+
if not project_path:
|
|
47
|
+
return {
|
|
48
|
+
"success": False,
|
|
49
|
+
"score": 0,
|
|
50
|
+
"validation_results": {},
|
|
51
|
+
"issues_found": ["project_path é obrigatório"],
|
|
52
|
+
"recommendations": [],
|
|
53
|
+
"passed_threshold": False
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
# Tipos de validação padrão
|
|
57
|
+
check_types = params.get("check_types", [
|
|
58
|
+
"structure", "components", "tests", "performance",
|
|
59
|
+
"accessibility", "security"
|
|
60
|
+
])
|
|
61
|
+
|
|
62
|
+
validation_results = {}
|
|
63
|
+
total_score = 0
|
|
64
|
+
max_score = 0
|
|
65
|
+
all_issues = []
|
|
66
|
+
|
|
67
|
+
# 1. Validação de Estrutura (20 pontos)
|
|
68
|
+
if "structure" in check_types:
|
|
69
|
+
structure_score, structure_issues = await validate_project_structure(
|
|
70
|
+
project_path, stack, strict_mode
|
|
71
|
+
)
|
|
72
|
+
validation_results["structure"] = {
|
|
73
|
+
"score": structure_score,
|
|
74
|
+
"max_score": 20,
|
|
75
|
+
"issues": structure_issues
|
|
76
|
+
}
|
|
77
|
+
total_score += structure_score
|
|
78
|
+
max_score += 20
|
|
79
|
+
all_issues.extend(structure_issues)
|
|
80
|
+
|
|
81
|
+
# 2. Validação de Componentes (25 pontos)
|
|
82
|
+
if "components" in check_types:
|
|
83
|
+
components_score, components_issues = await validate_components(
|
|
84
|
+
project_path, stack, strict_mode
|
|
85
|
+
)
|
|
86
|
+
validation_results["components"] = {
|
|
87
|
+
"score": components_score,
|
|
88
|
+
"max_score": 25,
|
|
89
|
+
"issues": components_issues
|
|
90
|
+
}
|
|
91
|
+
total_score += components_score
|
|
92
|
+
max_score += 25
|
|
93
|
+
all_issues.extend(components_issues)
|
|
94
|
+
|
|
95
|
+
# 3. Validação de Testes (20 pontos)
|
|
96
|
+
if "tests" in check_types:
|
|
97
|
+
tests_score, tests_issues = await validate_tests(
|
|
98
|
+
project_path, stack, strict_mode
|
|
99
|
+
)
|
|
100
|
+
validation_results["tests"] = {
|
|
101
|
+
"score": tests_score,
|
|
102
|
+
"max_score": 20,
|
|
103
|
+
"issues": tests_issues
|
|
104
|
+
}
|
|
105
|
+
total_score += tests_score
|
|
106
|
+
max_score += 20
|
|
107
|
+
all_issues.extend(tests_issues)
|
|
108
|
+
|
|
109
|
+
# 4. Validação de Performance (15 pontos)
|
|
110
|
+
if "performance" in check_types:
|
|
111
|
+
performance_score, performance_issues = await validate_performance(
|
|
112
|
+
project_path, strict_mode
|
|
113
|
+
)
|
|
114
|
+
validation_results["performance"] = {
|
|
115
|
+
"score": performance_score,
|
|
116
|
+
"max_score": 15,
|
|
117
|
+
"issues": performance_issues
|
|
118
|
+
}
|
|
119
|
+
total_score += performance_score
|
|
120
|
+
max_score += 15
|
|
121
|
+
all_issues.extend(performance_issues)
|
|
122
|
+
|
|
123
|
+
# 5. Validação de Acessibilidade (10 pontos)
|
|
124
|
+
if "accessibility" in check_types:
|
|
125
|
+
accessibility_score, accessibility_issues = await validate_accessibility(
|
|
126
|
+
project_path, strict_mode
|
|
127
|
+
)
|
|
128
|
+
validation_results["accessibility"] = {
|
|
129
|
+
"score": accessibility_score,
|
|
130
|
+
"max_score": 10,
|
|
131
|
+
"issues": accessibility_issues
|
|
132
|
+
}
|
|
133
|
+
total_score += accessibility_score
|
|
134
|
+
max_score += 10
|
|
135
|
+
all_issues.extend(accessibility_issues)
|
|
136
|
+
|
|
137
|
+
# 6. Validação de Segurança (10 pontos)
|
|
138
|
+
if "security" in check_types:
|
|
139
|
+
security_score, security_issues = await validate_security(
|
|
140
|
+
project_path, strict_mode
|
|
141
|
+
)
|
|
142
|
+
validation_results["security"] = {
|
|
143
|
+
"score": security_score,
|
|
144
|
+
"max_score": 10,
|
|
145
|
+
"issues": security_issues
|
|
146
|
+
}
|
|
147
|
+
total_score += security_score
|
|
148
|
+
max_score += 10
|
|
149
|
+
all_issues.extend(security_issues)
|
|
150
|
+
|
|
151
|
+
# Calcular score final
|
|
152
|
+
final_score = int((total_score / max_score) * 100) if max_score > 0 else 0
|
|
153
|
+
passed_threshold = final_score >= threshold
|
|
154
|
+
|
|
155
|
+
# Gerar recomendações
|
|
156
|
+
recommendations = await generate_recommendations(validation_results, all_issues)
|
|
157
|
+
|
|
158
|
+
return {
|
|
159
|
+
"success": True,
|
|
160
|
+
"score": final_score,
|
|
161
|
+
"validation_results": validation_results,
|
|
162
|
+
"issues_found": all_issues,
|
|
163
|
+
"recommendations": recommendations,
|
|
164
|
+
"passed_threshold": passed_threshold
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
except Exception as e:
|
|
168
|
+
return {
|
|
169
|
+
"success": False,
|
|
170
|
+
"score": 0,
|
|
171
|
+
"validation_results": {},
|
|
172
|
+
"issues_found": [f"Erro na validação: {str(e)}"],
|
|
173
|
+
"recommendations": [],
|
|
174
|
+
"passed_threshold": False
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
async def validate_project_structure(project_path: str, stack: str, strict_mode: bool) -> Tuple[int, List[str]]:
|
|
178
|
+
"""Valida estrutura do projeto"""
|
|
179
|
+
|
|
180
|
+
issues = []
|
|
181
|
+
score = 20
|
|
182
|
+
|
|
183
|
+
# Diretórios obrigatórios
|
|
184
|
+
required_dirs = [
|
|
185
|
+
"src/components",
|
|
186
|
+
"src/pages",
|
|
187
|
+
"src/hooks",
|
|
188
|
+
"src/tests",
|
|
189
|
+
"src/types",
|
|
190
|
+
"src/utils",
|
|
191
|
+
"src/styles",
|
|
192
|
+
"src/assets",
|
|
193
|
+
"docs/10-frontend",
|
|
194
|
+
"public"
|
|
195
|
+
]
|
|
196
|
+
|
|
197
|
+
for dir_path in required_dirs:
|
|
198
|
+
full_path = os.path.join(project_path, dir_path)
|
|
199
|
+
if not os.path.exists(full_path):
|
|
200
|
+
issues.append(f"Diretório obrigatório ausente: {dir_path}")
|
|
201
|
+
score -= 2
|
|
202
|
+
|
|
203
|
+
# Arquivos de configuração obrigatórios
|
|
204
|
+
config_files = {
|
|
205
|
+
"react": ["package.json", "tsconfig.json", "vite.config.ts", ".eslintrc.js"],
|
|
206
|
+
"vue": ["package.json", "vue.config.js", "tsconfig.json"],
|
|
207
|
+
"angular": ["package.json", "angular.json", "tsconfig.json"]
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
for config_file in config_files.get(stack, ["package.json"]):
|
|
211
|
+
config_path = os.path.join(project_path, config_file)
|
|
212
|
+
if not os.path.exists(config_path):
|
|
213
|
+
issues.append(f"Arquivo de configuração ausente: {config_file}")
|
|
214
|
+
score -= 1
|
|
215
|
+
|
|
216
|
+
# Verificar conteúdo dos diretórios
|
|
217
|
+
components_dir = os.path.join(project_path, "src/components")
|
|
218
|
+
if os.path.exists(components_dir):
|
|
219
|
+
components = os.listdir(components_dir)
|
|
220
|
+
if len(components) == 0:
|
|
221
|
+
issues.append("Diretório de componentes vazio")
|
|
222
|
+
score -= 3
|
|
223
|
+
|
|
224
|
+
# Verificar arquivos de documentação
|
|
225
|
+
docs_dir = os.path.join(project_path, "docs", "10-frontend")
|
|
226
|
+
if os.path.exists(docs_dir):
|
|
227
|
+
docs_files = os.listdir(docs_dir)
|
|
228
|
+
if "historia-frontend.md" not in docs_files:
|
|
229
|
+
issues.append("Arquivo história-frontend.md não encontrado")
|
|
230
|
+
score -= 2
|
|
231
|
+
|
|
232
|
+
return max(0, score), issues
|
|
233
|
+
|
|
234
|
+
async def validate_components(project_path: str, stack: str, strict_mode: bool) -> Tuple[int, List[str]]:
|
|
235
|
+
"""Valida componentes frontend"""
|
|
236
|
+
|
|
237
|
+
issues = []
|
|
238
|
+
score = 25
|
|
239
|
+
|
|
240
|
+
components_path = os.path.join(project_path, "src/components")
|
|
241
|
+
|
|
242
|
+
if not os.path.exists(components_path):
|
|
243
|
+
return 0, ["Diretório de componentes não encontrado"]
|
|
244
|
+
|
|
245
|
+
# Verificar componentes
|
|
246
|
+
components = []
|
|
247
|
+
for item in os.listdir(components_path):
|
|
248
|
+
item_path = os.path.join(components_path, item)
|
|
249
|
+
if os.path.isdir(item_path):
|
|
250
|
+
components.append(item)
|
|
251
|
+
|
|
252
|
+
if not components:
|
|
253
|
+
issues.append("Nenhum componente encontrado")
|
|
254
|
+
score -= 10
|
|
255
|
+
else:
|
|
256
|
+
# Validar estrutura de cada componente
|
|
257
|
+
for component in components[:5]: # Limitar a 5 componentes para performance
|
|
258
|
+
comp_path = os.path.join(components_path, component)
|
|
259
|
+
component_issues = await validate_single_component(comp_path, component, stack, strict_mode)
|
|
260
|
+
issues.extend(component_issues)
|
|
261
|
+
|
|
262
|
+
# Penalizar por cada issue de componente
|
|
263
|
+
score -= min(len(component_issues), 3)
|
|
264
|
+
|
|
265
|
+
# Verificar se há componentes reutilizáveis
|
|
266
|
+
reusable_count = 0
|
|
267
|
+
for component in components:
|
|
268
|
+
comp_path = os.path.join(components_path, component)
|
|
269
|
+
if await is_component_reusable(comp_path):
|
|
270
|
+
reusable_count += 1
|
|
271
|
+
|
|
272
|
+
if reusable_count < len(components) * 0.5:
|
|
273
|
+
issues.append(f"Poucos componentes reutilizáveis: {reusable_count}/{len(components)}")
|
|
274
|
+
score -= 5
|
|
275
|
+
|
|
276
|
+
return max(0, score), issues
|
|
277
|
+
|
|
278
|
+
async def validate_single_component(component_path: str, component_name: str, stack: str, strict_mode: bool) -> List[str]:
|
|
279
|
+
"""Valida estrutura de um único componente"""
|
|
280
|
+
|
|
281
|
+
issues = []
|
|
282
|
+
|
|
283
|
+
# Arquivos obrigatórios por stack
|
|
284
|
+
required_files = {
|
|
285
|
+
"react": [f"{component_name}.tsx", f"{component_name}.test.tsx"],
|
|
286
|
+
"vue": [f"{component_name}.vue", f"{component_name}.test.js"],
|
|
287
|
+
"angular": [f"{component_name}.component.ts", f"{component_name}.component.spec.ts"]
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
for req_file in required_files.get(stack, []):
|
|
291
|
+
file_path = os.path.join(component_path, req_file)
|
|
292
|
+
if not os.path.exists(file_path):
|
|
293
|
+
issues.append(f"Componente {component_name}缺少 arquivo: {req_file}")
|
|
294
|
+
|
|
295
|
+
# Verificar index.tsx
|
|
296
|
+
index_path = os.path.join(component_path, "index.ts")
|
|
297
|
+
if not os.path.exists(index_path):
|
|
298
|
+
issues.append(f"Componente {component_name}缺少 arquivo: index.ts")
|
|
299
|
+
|
|
300
|
+
# Verificar Storybook story
|
|
301
|
+
story_path = os.path.join(component_path, f"{component_name}.stories.tsx")
|
|
302
|
+
if not os.path.exists(story_path):
|
|
303
|
+
issues.append(f"Componente {component_name}缺少 Storybook story")
|
|
304
|
+
|
|
305
|
+
# Analisar código do componente principal
|
|
306
|
+
if stack == "react":
|
|
307
|
+
component_file = os.path.join(component_path, f"{component_name}.tsx")
|
|
308
|
+
if os.path.exists(component_file):
|
|
309
|
+
code_issues = await analyze_react_component_code(component_file, strict_mode)
|
|
310
|
+
issues.extend(code_issues)
|
|
311
|
+
|
|
312
|
+
return issues
|
|
313
|
+
|
|
314
|
+
async def analyze_react_component_code(file_path: str, strict_mode: bool) -> List[str]:
|
|
315
|
+
"""Analisa código de componente React"""
|
|
316
|
+
|
|
317
|
+
issues = []
|
|
318
|
+
|
|
319
|
+
try:
|
|
320
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
321
|
+
content = f.read()
|
|
322
|
+
|
|
323
|
+
# Verificar TypeScript
|
|
324
|
+
if not content.strip().startswith('// @ts-nocheck') and 'interface ' not in content and 'type ' not in content:
|
|
325
|
+
issues.append("Componente sem tipagem TypeScript")
|
|
326
|
+
|
|
327
|
+
# Verificar props tipadas
|
|
328
|
+
if 'interface Props' not in content and 'type Props' not in content:
|
|
329
|
+
issues.append("Props não tipadas")
|
|
330
|
+
|
|
331
|
+
# Verificar export default
|
|
332
|
+
if 'export default' not in content:
|
|
333
|
+
issues.append("Componente sem export default")
|
|
334
|
+
|
|
335
|
+
# Verificar se usa React.memo (performance)
|
|
336
|
+
if strict_mode and 'React.memo' not in content:
|
|
337
|
+
issues.append("Componente não otimizado com React.memo")
|
|
338
|
+
|
|
339
|
+
# Verificar se há tratamento de erro
|
|
340
|
+
if 'try {' not in content and 'catch' not in content:
|
|
341
|
+
issues.append("Componente sem tratamento de erro")
|
|
342
|
+
|
|
343
|
+
# Verificar acessibilidade básica
|
|
344
|
+
if 'aria-' not in content and 'role=' not in content:
|
|
345
|
+
issues.append("Componente sem atributos de acessibilidade")
|
|
346
|
+
|
|
347
|
+
except Exception as e:
|
|
348
|
+
issues.append(f"Erro ao analisar arquivo {file_path}: {str(e)}")
|
|
349
|
+
|
|
350
|
+
return issues
|
|
351
|
+
|
|
352
|
+
async def is_component_reusable(component_path: str) -> bool:
|
|
353
|
+
"""Verifica se um componente é reutilizável"""
|
|
354
|
+
|
|
355
|
+
try:
|
|
356
|
+
# Procurar arquivo principal do componente
|
|
357
|
+
for file in os.listdir(component_path):
|
|
358
|
+
if file.endswith(('.tsx', '.jsx', '.vue')):
|
|
359
|
+
file_path = os.path.join(component_path, file)
|
|
360
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
361
|
+
content = f.read()
|
|
362
|
+
|
|
363
|
+
# Verificar se tem props configuráveis
|
|
364
|
+
if 'interface Props' in content or 'type Props' in content:
|
|
365
|
+
props_match = re.search(r'(interface|type) Props\s*{([^}]+)}', content)
|
|
366
|
+
if props_match:
|
|
367
|
+
props_content = props_match.group(2)
|
|
368
|
+
# Se tiver mais de 2 props, consideramos reutilizável
|
|
369
|
+
prop_count = len(re.findall(r'\w+:', props_content))
|
|
370
|
+
return prop_count > 2
|
|
371
|
+
|
|
372
|
+
return False
|
|
373
|
+
except:
|
|
374
|
+
return False
|
|
375
|
+
|
|
376
|
+
async def validate_tests(project_path: str, stack: str, strict_mode: bool) -> Tuple[int, List[str]]:
|
|
377
|
+
"""Valida testes"""
|
|
378
|
+
|
|
379
|
+
issues = []
|
|
380
|
+
score = 20
|
|
381
|
+
|
|
382
|
+
tests_path = os.path.join(project_path, "src/tests")
|
|
383
|
+
|
|
384
|
+
if not os.path.exists(tests_path):
|
|
385
|
+
return 0, ["Diretório de testes não encontrado"]
|
|
386
|
+
|
|
387
|
+
# Verificar configuração de testes
|
|
388
|
+
test_configs = ["vitest.config.ts", "jest.config.js", "package.json"]
|
|
389
|
+
|
|
390
|
+
has_config = False
|
|
391
|
+
for config in test_configs:
|
|
392
|
+
config_path = os.path.join(project_path, config)
|
|
393
|
+
if os.path.exists(config_path):
|
|
394
|
+
has_config = True
|
|
395
|
+
break
|
|
396
|
+
|
|
397
|
+
if not has_config:
|
|
398
|
+
issues.append("Configuração de testes não encontrada")
|
|
399
|
+
score -= 5
|
|
400
|
+
|
|
401
|
+
# Contar arquivos de teste
|
|
402
|
+
test_files = []
|
|
403
|
+
for root, dirs, files in os.walk(tests_path):
|
|
404
|
+
for file in files:
|
|
405
|
+
if file.endswith(('.test.ts', '.test.tsx', '.test.js', '.spec.ts', '.spec.tsx')):
|
|
406
|
+
test_files.append(file)
|
|
407
|
+
|
|
408
|
+
# Também procurar testes em outros diretórios
|
|
409
|
+
for root, dirs, files in os.walk(os.path.join(project_path, "src")):
|
|
410
|
+
if "tests" not in root:
|
|
411
|
+
for file in files:
|
|
412
|
+
if file.endswith(('.test.ts', '.test.tsx', '.test.js', '.spec.ts', '.spec.tsx')):
|
|
413
|
+
test_files.append(file)
|
|
414
|
+
|
|
415
|
+
if len(test_files) < 3:
|
|
416
|
+
issues.append(f"Poucos arquivos de teste encontrados: {len(test_files)}")
|
|
417
|
+
score -= 5
|
|
418
|
+
|
|
419
|
+
# Verificar qualidade dos testes
|
|
420
|
+
test_quality_score = 15
|
|
421
|
+
for test_file in test_files[:10]: # Limitar a 10 arquivos
|
|
422
|
+
test_path = None
|
|
423
|
+
for root, dirs, files in os.walk(os.path.join(project_path, "src")):
|
|
424
|
+
if test_file in files:
|
|
425
|
+
test_path = os.path.join(root, test_file)
|
|
426
|
+
break
|
|
427
|
+
|
|
428
|
+
if test_path:
|
|
429
|
+
quality_issues = await analyze_test_file(test_path, strict_mode)
|
|
430
|
+
issues.extend(quality_issues)
|
|
431
|
+
test_quality_score -= min(len(quality_issues), 2)
|
|
432
|
+
|
|
433
|
+
score += max(0, test_quality_score)
|
|
434
|
+
|
|
435
|
+
return max(0, score), issues
|
|
436
|
+
|
|
437
|
+
async def analyze_test_file(file_path: str, strict_mode: bool) -> List[str]:
|
|
438
|
+
"""Analisa qualidade de um arquivo de teste"""
|
|
439
|
+
|
|
440
|
+
issues = []
|
|
441
|
+
|
|
442
|
+
try:
|
|
443
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
444
|
+
content = f.read()
|
|
445
|
+
|
|
446
|
+
# Verificar se tem describe blocks
|
|
447
|
+
if 'describe(' not in content:
|
|
448
|
+
issues.append(f"Teste sem describe blocks: {os.path.basename(file_path)}")
|
|
449
|
+
|
|
450
|
+
# Verificar se tem assertions
|
|
451
|
+
if 'expect(' not in content and 'assert.' not in content:
|
|
452
|
+
issues.append(f"Teste sem assertions: {os.path.basename(file_path)}")
|
|
453
|
+
|
|
454
|
+
# Verificar se testa casos de erro
|
|
455
|
+
if strict_mode and 'error' not in content.lower() and 'exception' not in content.lower():
|
|
456
|
+
issues.append(f"Teste não cobre casos de erro: {os.path.basename(file_path)}")
|
|
457
|
+
|
|
458
|
+
# Verificar se tem mocks
|
|
459
|
+
if 'vi.mock' not in content and 'jest.mock' not in content and 'mock(' not in content:
|
|
460
|
+
issues.append(f"Teste sem mocks: {os.path.basename(file_path)}")
|
|
461
|
+
|
|
462
|
+
except Exception as e:
|
|
463
|
+
issues.append(f"Erro ao analisar teste {file_path}: {str(e)}")
|
|
464
|
+
|
|
465
|
+
return issues
|
|
466
|
+
|
|
467
|
+
async def validate_performance(project_path: str, strict_mode: bool) -> Tuple[int, List[str]]:
|
|
468
|
+
"""Valida performance"""
|
|
469
|
+
|
|
470
|
+
issues = []
|
|
471
|
+
score = 15
|
|
472
|
+
|
|
473
|
+
# Verificar package.json para dependências de performance
|
|
474
|
+
package_path = os.path.join(project_path, "package.json")
|
|
475
|
+
if os.path.exists(package_path):
|
|
476
|
+
try:
|
|
477
|
+
with open(package_path, 'r') as f:
|
|
478
|
+
package_data = json.load(f)
|
|
479
|
+
|
|
480
|
+
# Verificar dependências de performance
|
|
481
|
+
perf_deps = ["@next/bundle-analyzer", "webpack-bundle-analyzer", "lighthouse", "web-vitals"]
|
|
482
|
+
has_perf_tools = any(
|
|
483
|
+
dep in package_data.get("devDependencies", {}) or
|
|
484
|
+
dep in package_data.get("dependencies", {})
|
|
485
|
+
for dep in perf_deps
|
|
486
|
+
)
|
|
487
|
+
|
|
488
|
+
if not has_perf_tools:
|
|
489
|
+
issues.append("Ferramentas de performance não configuradas")
|
|
490
|
+
score -= 3
|
|
491
|
+
|
|
492
|
+
# Verificar se tem scripts de build/analyze
|
|
493
|
+
scripts = package_data.get("scripts", {})
|
|
494
|
+
if "build" not in scripts:
|
|
495
|
+
issues.append("Script de build não configurado")
|
|
496
|
+
score -= 2
|
|
497
|
+
|
|
498
|
+
if "analyze" not in scripts and strict_mode:
|
|
499
|
+
issues.append("Script de análise de bundle não configurado")
|
|
500
|
+
score -= 1
|
|
501
|
+
|
|
502
|
+
except Exception as e:
|
|
503
|
+
issues.append(f"Erro ao ler package.json: {str(e)}")
|
|
504
|
+
score -= 5
|
|
505
|
+
|
|
506
|
+
# Verificar otimizações no código
|
|
507
|
+
src_path = os.path.join(project_path, "src")
|
|
508
|
+
if os.path.exists(src_path):
|
|
509
|
+
optimization_score = 10
|
|
510
|
+
|
|
511
|
+
# Procurar por lazy loading
|
|
512
|
+
lazy_files = []
|
|
513
|
+
for root, dirs, files in os.walk(src_path):
|
|
514
|
+
for file in files:
|
|
515
|
+
if file.endswith(('.ts', '.tsx', '.js', '.jsx')):
|
|
516
|
+
file_path = os.path.join(root, file)
|
|
517
|
+
try:
|
|
518
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
519
|
+
content = f.read()
|
|
520
|
+
if 'lazy(' in content or 'import(' in content:
|
|
521
|
+
lazy_files.append(file)
|
|
522
|
+
except:
|
|
523
|
+
continue
|
|
524
|
+
|
|
525
|
+
if len(lazy_files) == 0:
|
|
526
|
+
issues.append("Nenhum lazy loading encontrado")
|
|
527
|
+
optimization_score -= 3
|
|
528
|
+
|
|
529
|
+
# Procurar por React.memo
|
|
530
|
+
memo_files = []
|
|
531
|
+
for root, dirs, files in os.walk(src_path):
|
|
532
|
+
for file in files:
|
|
533
|
+
if file.endswith(('.tsx', '.jsx')):
|
|
534
|
+
file_path = os.path.join(root, file)
|
|
535
|
+
try:
|
|
536
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
537
|
+
content = f.read()
|
|
538
|
+
if 'React.memo' in content or 'memo(' in content:
|
|
539
|
+
memo_files.append(file)
|
|
540
|
+
except:
|
|
541
|
+
continue
|
|
542
|
+
|
|
543
|
+
if len(memo_files) == 0 and strict_mode:
|
|
544
|
+
issues.append("Nenhuma otimização com React.memo encontrada")
|
|
545
|
+
optimization_score -= 2
|
|
546
|
+
|
|
547
|
+
# Procurar por useMemo/useCallback
|
|
548
|
+
optimization_files = []
|
|
549
|
+
for root, dirs, files in os.walk(src_path):
|
|
550
|
+
for file in files:
|
|
551
|
+
if file.endswith(('.ts', '.tsx', '.js', '.jsx')):
|
|
552
|
+
file_path = os.path.join(root, file)
|
|
553
|
+
try:
|
|
554
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
555
|
+
content = f.read()
|
|
556
|
+
if 'useMemo' in content or 'useCallback' in content:
|
|
557
|
+
optimization_files.append(file)
|
|
558
|
+
except:
|
|
559
|
+
continue
|
|
560
|
+
|
|
561
|
+
if len(optimization_files) == 0:
|
|
562
|
+
issues.append("Nenhuma otimização useMemo/useCallback encontrada")
|
|
563
|
+
optimization_score -= 2
|
|
564
|
+
|
|
565
|
+
score += max(0, optimization_score)
|
|
566
|
+
|
|
567
|
+
return max(0, score), issues
|
|
568
|
+
|
|
569
|
+
async def validate_accessibility(project_path: str, strict_mode: bool) -> Tuple[int, List[str]]:
|
|
570
|
+
"""Valida acessibilidade"""
|
|
571
|
+
|
|
572
|
+
issues = []
|
|
573
|
+
score = 10
|
|
574
|
+
|
|
575
|
+
# Verificar package.json para dependências de acessibilidade
|
|
576
|
+
package_path = os.path.join(project_path, "package.json")
|
|
577
|
+
if os.path.exists(package_path):
|
|
578
|
+
try:
|
|
579
|
+
with open(package_path, 'r') as f:
|
|
580
|
+
package_data = json.load(f)
|
|
581
|
+
|
|
582
|
+
# Verificar dependências de acessibilidade
|
|
583
|
+
a11y_deps = ["@axe-core/react", "eslint-plugin-jsx-a11y", "cypress-axe", "jest-axe"]
|
|
584
|
+
has_a11y_tools = any(
|
|
585
|
+
dep in package_data.get("devDependencies", {}) or
|
|
586
|
+
dep in package_data.get("dependencies", {})
|
|
587
|
+
for dep in a11y_deps
|
|
588
|
+
)
|
|
589
|
+
|
|
590
|
+
if not has_a11y_tools:
|
|
591
|
+
issues.append("Ferramentas de acessibilidade não configuradas")
|
|
592
|
+
score -= 3
|
|
593
|
+
|
|
594
|
+
except Exception as e:
|
|
595
|
+
issues.append(f"Erro ao ler package.json: {str(e)}")
|
|
596
|
+
score -= 3
|
|
597
|
+
|
|
598
|
+
# Verificar uso de ARIA no código
|
|
599
|
+
src_path = os.path.join(project_path, "src")
|
|
600
|
+
if os.path.exists(src_path):
|
|
601
|
+
aria_files = []
|
|
602
|
+
total_files = 0
|
|
603
|
+
|
|
604
|
+
for root, dirs, files in os.walk(src_path):
|
|
605
|
+
for file in files:
|
|
606
|
+
if file.endswith(('.tsx', '.jsx')):
|
|
607
|
+
total_files += 1
|
|
608
|
+
file_path = os.path.join(root, file)
|
|
609
|
+
try:
|
|
610
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
611
|
+
content = f.read()
|
|
612
|
+
if 'aria-' in content or 'role=' in content:
|
|
613
|
+
aria_files.append(file)
|
|
614
|
+
except:
|
|
615
|
+
continue
|
|
616
|
+
|
|
617
|
+
if len(aria_files) == 0:
|
|
618
|
+
issues.append("Nenhum atributo ARIA encontrado")
|
|
619
|
+
score -= 4
|
|
620
|
+
elif len(aria_files) < total_files * 0.5:
|
|
621
|
+
issues.append(f"Poucos arquivos com atributos ARIA: {len(aria_files)}/{total_files}")
|
|
622
|
+
score -= 2
|
|
623
|
+
|
|
624
|
+
# Verificar elementos semânticos
|
|
625
|
+
semantic_files = []
|
|
626
|
+
for root, dirs, files in os.walk(src_path):
|
|
627
|
+
for file in files:
|
|
628
|
+
if file.endswith(('.tsx', '.jsx')):
|
|
629
|
+
file_path = os.path.join(root, file)
|
|
630
|
+
try:
|
|
631
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
632
|
+
content = f.read()
|
|
633
|
+
semantic_tags = ['<header', '<nav', '<main', '<section', '<article', '<aside', '<footer']
|
|
634
|
+
if any(tag in content for tag in semantic_tags):
|
|
635
|
+
semantic_files.append(file)
|
|
636
|
+
except:
|
|
637
|
+
continue
|
|
638
|
+
|
|
639
|
+
if len(semantic_files) < total_files * 0.3:
|
|
640
|
+
issues.append("Pouco uso de HTML semântico")
|
|
641
|
+
score -= 1
|
|
642
|
+
|
|
643
|
+
return max(0, score), issues
|
|
644
|
+
|
|
645
|
+
async def validate_security(project_path: str, strict_mode: bool) -> Tuple[int, List[str]]:
|
|
646
|
+
"""Valida segurança"""
|
|
647
|
+
|
|
648
|
+
issues = []
|
|
649
|
+
score = 10
|
|
650
|
+
|
|
651
|
+
# Verificar package.json para dependências de segurança
|
|
652
|
+
package_path = os.path.join(project_path, "package.json")
|
|
653
|
+
if os.path.exists(package_path):
|
|
654
|
+
try:
|
|
655
|
+
with open(package_path, 'r') as f:
|
|
656
|
+
package_data = json.load(f)
|
|
657
|
+
|
|
658
|
+
# Verificar dependências de segurança
|
|
659
|
+
security_deps = ["helmet", "dompurify", "eslint-plugin-security", "@typescript-eslint/eslint-plugin"]
|
|
660
|
+
has_security_tools = any(
|
|
661
|
+
dep in package_data.get("devDependencies", {}) or
|
|
662
|
+
dep in package_data.get("dependencies", {})
|
|
663
|
+
for dep in security_deps
|
|
664
|
+
)
|
|
665
|
+
|
|
666
|
+
if not has_security_tools:
|
|
667
|
+
issues.append("Ferramentas de segurança não configuradas")
|
|
668
|
+
score -= 3
|
|
669
|
+
|
|
670
|
+
except Exception as e:
|
|
671
|
+
issues.append(f"Erro ao ler package.json: {str(e)}")
|
|
672
|
+
score -= 3
|
|
673
|
+
|
|
674
|
+
# Verificar práticas de segurança no código
|
|
675
|
+
src_path = os.path.join(project_path, "src")
|
|
676
|
+
if os.path.exists(src_path):
|
|
677
|
+
security_issues = []
|
|
678
|
+
|
|
679
|
+
for root, dirs, files in os.walk(src_path):
|
|
680
|
+
for file in files:
|
|
681
|
+
if file.endswith(('.ts', '.tsx', '.js', '.jsx')):
|
|
682
|
+
file_path = os.path.join(root, file)
|
|
683
|
+
try:
|
|
684
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
685
|
+
content = f.read()
|
|
686
|
+
|
|
687
|
+
# Verificar uso perigoso de innerHTML
|
|
688
|
+
if 'innerHTML' in content and 'sanitize' not in content:
|
|
689
|
+
security_issues.append(f"Uso perigoso de innerHTML em {file}")
|
|
690
|
+
|
|
691
|
+
# Verificar eval() usage
|
|
692
|
+
if 'eval(' in content:
|
|
693
|
+
security_issues.append(f"Uso perigoso de eval() em {file}")
|
|
694
|
+
|
|
695
|
+
# Verificar document.write
|
|
696
|
+
if 'document.write' in content:
|
|
697
|
+
security_issues.append(f"Uso perigoso de document.write em {file}")
|
|
698
|
+
|
|
699
|
+
# Verificar se há validação de inputs
|
|
700
|
+
if 'onChange' in content or 'onInput' in content:
|
|
701
|
+
if 'validate' not in content and 'sanitize' not in content:
|
|
702
|
+
security_issues.append(f"Input sem validação em {file}")
|
|
703
|
+
|
|
704
|
+
except:
|
|
705
|
+
continue
|
|
706
|
+
|
|
707
|
+
issues.extend(security_issues[:5]) # Limitar a 5 issues de segurança
|
|
708
|
+
score -= min(len(security_issues), 5)
|
|
709
|
+
|
|
710
|
+
return max(0, score), issues
|
|
711
|
+
|
|
712
|
+
async def generate_recommendations(validation_results: Dict[str, Any], issues: List[str]) -> List[str]:
|
|
713
|
+
"""Gera recomendações baseado nos resultados"""
|
|
714
|
+
|
|
715
|
+
recommendations = []
|
|
716
|
+
|
|
717
|
+
# Recomendações baseadas nos scores
|
|
718
|
+
for category, result in validation_results.items():
|
|
719
|
+
score = result.get("score", 0)
|
|
720
|
+
max_score = result.get("max_score", 20)
|
|
721
|
+
percentage = (score / max_score) * 100 if max_score > 0 else 0
|
|
722
|
+
|
|
723
|
+
if percentage < 50:
|
|
724
|
+
if category == "structure":
|
|
725
|
+
recommendations.append("📁 Reorganize a estrutura do projeto seguindo as melhores práticas")
|
|
726
|
+
elif category == "components":
|
|
727
|
+
recommendations.append("🧩 Crie componentes reutilizáveis com testes adequados")
|
|
728
|
+
elif category == "tests":
|
|
729
|
+
recommendations.append("🧪 Aumente a cobertura de testes para >80%")
|
|
730
|
+
elif category == "performance":
|
|
731
|
+
recommendations.append("⚡ Implemente otimizações de performance")
|
|
732
|
+
elif category == "accessibility":
|
|
733
|
+
recommendations.append("♿ Melhore a acessibilidade seguindo WCAG 2.1 AA")
|
|
734
|
+
elif category == "security":
|
|
735
|
+
recommendations.append("🔐 Adicione validações de segurança")
|
|
736
|
+
elif percentage < 75:
|
|
737
|
+
if category == "components":
|
|
738
|
+
recommendations.append("🔧 Melhore a qualidade e reusabilidade dos componentes")
|
|
739
|
+
elif category == "tests":
|
|
740
|
+
recommendations.append("📈 Melhore a qualidade e cobertura dos testes")
|
|
741
|
+
elif category == "performance":
|
|
742
|
+
recommendations.append("🚀 Adicione mais otimizações de performance")
|
|
743
|
+
|
|
744
|
+
# Recomendações baseadas em issues específicas
|
|
745
|
+
if any("diretório" in issue.lower() for issue in issues):
|
|
746
|
+
recommendations.append("📂 Verifique e crie os diretórios obrigatórios da estrutura")
|
|
747
|
+
|
|
748
|
+
if any("configuração" in issue.lower() for issue in issues):
|
|
749
|
+
recommendations.append("⚙️ Configure os arquivos de configuração necessários")
|
|
750
|
+
|
|
751
|
+
if any("test" in issue.lower() for issue in issues):
|
|
752
|
+
recommendations.append("🧪 Implemente testes unitários e de integração")
|
|
753
|
+
|
|
754
|
+
if any("accessibility" in issue.lower() or "aria" in issue.lower() for issue in issues):
|
|
755
|
+
recommendations.append("♿ Adicione atributos ARIA e melhore a acessibilidade")
|
|
756
|
+
|
|
757
|
+
if any("performance" in issue.lower() or "lazy" in issue.lower() for issue in issues):
|
|
758
|
+
recommendations.append("⚡ Implemente lazy loading e otimizações de performance")
|
|
759
|
+
|
|
760
|
+
# Remover duplicatas
|
|
761
|
+
recommendations = list(dict.fromkeys(recommendations))
|
|
762
|
+
|
|
763
|
+
return recommendations
|
|
764
|
+
|
|
765
|
+
# Exportar função principal
|
|
766
|
+
__all__ = ['validate_frontend_quality']
|