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.

Files changed (502) hide show
  1. moai_adk/__init__.py +10 -0
  2. moai_adk/__main__.py +199 -0
  3. moai_adk/cli/__init__.py +6 -0
  4. moai_adk/cli/commands/__init__.py +17 -0
  5. moai_adk/cli/commands/analyze.py +116 -0
  6. moai_adk/cli/commands/doctor.py +272 -0
  7. moai_adk/cli/commands/init.py +372 -0
  8. moai_adk/cli/commands/language.py +248 -0
  9. moai_adk/cli/commands/status.py +104 -0
  10. moai_adk/cli/commands/update.py +2686 -0
  11. moai_adk/cli/main.py +13 -0
  12. moai_adk/cli/prompts/__init__.py +5 -0
  13. moai_adk/cli/prompts/init_prompts.py +219 -0
  14. moai_adk/cli/spec_status.py +263 -0
  15. moai_adk/cli/ui/__init__.py +44 -0
  16. moai_adk/cli/ui/progress.py +422 -0
  17. moai_adk/cli/ui/prompts.py +389 -0
  18. moai_adk/cli/ui/theme.py +129 -0
  19. moai_adk/cli/worktree/__init__.py +27 -0
  20. moai_adk/cli/worktree/__main__.py +31 -0
  21. moai_adk/cli/worktree/cli.py +683 -0
  22. moai_adk/cli/worktree/exceptions.py +89 -0
  23. moai_adk/cli/worktree/manager.py +493 -0
  24. moai_adk/cli/worktree/models.py +65 -0
  25. moai_adk/cli/worktree/registry.py +422 -0
  26. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  27. moai_adk/core/__init__.py +1 -0
  28. moai_adk/core/analysis/__init__.py +9 -0
  29. moai_adk/core/analysis/session_analyzer.py +400 -0
  30. moai_adk/core/claude_integration.py +393 -0
  31. moai_adk/core/command_helpers.py +270 -0
  32. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  33. moai_adk/core/config/__init__.py +19 -0
  34. moai_adk/core/config/auto_spec_config.py +340 -0
  35. moai_adk/core/config/migration.py +244 -0
  36. moai_adk/core/config/unified.py +436 -0
  37. moai_adk/core/context_manager.py +273 -0
  38. moai_adk/core/diagnostics/__init__.py +19 -0
  39. moai_adk/core/diagnostics/slash_commands.py +159 -0
  40. moai_adk/core/enterprise_features.py +1404 -0
  41. moai_adk/core/error_recovery_system.py +1902 -0
  42. moai_adk/core/event_driven_hook_system.py +1371 -0
  43. moai_adk/core/git/__init__.py +31 -0
  44. moai_adk/core/git/branch.py +25 -0
  45. moai_adk/core/git/branch_manager.py +129 -0
  46. moai_adk/core/git/checkpoint.py +134 -0
  47. moai_adk/core/git/commit.py +67 -0
  48. moai_adk/core/git/conflict_detector.py +413 -0
  49. moai_adk/core/git/event_detector.py +79 -0
  50. moai_adk/core/git/manager.py +216 -0
  51. moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
  52. moai_adk/core/input_validation_middleware.py +1006 -0
  53. moai_adk/core/integration/__init__.py +22 -0
  54. moai_adk/core/integration/engine.py +157 -0
  55. moai_adk/core/integration/integration_tester.py +226 -0
  56. moai_adk/core/integration/models.py +88 -0
  57. moai_adk/core/integration/utils.py +211 -0
  58. moai_adk/core/issue_creator.py +305 -0
  59. moai_adk/core/jit_context_loader.py +956 -0
  60. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  61. moai_adk/core/language_config.py +202 -0
  62. moai_adk/core/language_config_resolver.py +572 -0
  63. moai_adk/core/language_validator.py +543 -0
  64. moai_adk/core/mcp/setup.py +116 -0
  65. moai_adk/core/merge/__init__.py +9 -0
  66. moai_adk/core/merge/analyzer.py +605 -0
  67. moai_adk/core/migration/__init__.py +18 -0
  68. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  69. moai_adk/core/migration/backup_manager.py +277 -0
  70. moai_adk/core/migration/custom_element_scanner.py +358 -0
  71. moai_adk/core/migration/file_migrator.py +209 -0
  72. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  73. moai_adk/core/migration/selective_restorer.py +470 -0
  74. moai_adk/core/migration/template_utils.py +74 -0
  75. moai_adk/core/migration/user_selection_ui.py +338 -0
  76. moai_adk/core/migration/version_detector.py +139 -0
  77. moai_adk/core/migration/version_migrator.py +228 -0
  78. moai_adk/core/performance/__init__.py +6 -0
  79. moai_adk/core/performance/cache_system.py +316 -0
  80. moai_adk/core/performance/parallel_processor.py +116 -0
  81. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  82. moai_adk/core/project/__init__.py +1 -0
  83. moai_adk/core/project/backup_utils.py +70 -0
  84. moai_adk/core/project/checker.py +300 -0
  85. moai_adk/core/project/detector.py +293 -0
  86. moai_adk/core/project/initializer.py +387 -0
  87. moai_adk/core/project/phase_executor.py +716 -0
  88. moai_adk/core/project/validator.py +139 -0
  89. moai_adk/core/quality/__init__.py +6 -0
  90. moai_adk/core/quality/trust_checker.py +377 -0
  91. moai_adk/core/quality/validators/__init__.py +6 -0
  92. moai_adk/core/quality/validators/base_validator.py +19 -0
  93. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  94. moai_adk/core/robust_json_parser.py +611 -0
  95. moai_adk/core/rollback_manager.py +918 -0
  96. moai_adk/core/session_manager.py +651 -0
  97. moai_adk/core/skill_loading_system.py +579 -0
  98. moai_adk/core/spec/confidence_scoring.py +680 -0
  99. moai_adk/core/spec/ears_template_engine.py +1247 -0
  100. moai_adk/core/spec/quality_validator.py +687 -0
  101. moai_adk/core/spec_status_manager.py +478 -0
  102. moai_adk/core/template/__init__.py +7 -0
  103. moai_adk/core/template/backup.py +174 -0
  104. moai_adk/core/template/config.py +191 -0
  105. moai_adk/core/template/languages.py +43 -0
  106. moai_adk/core/template/merger.py +233 -0
  107. moai_adk/core/template/processor.py +1200 -0
  108. moai_adk/core/template_engine.py +310 -0
  109. moai_adk/core/template_variable_synchronizer.py +417 -0
  110. moai_adk/core/unified_permission_manager.py +745 -0
  111. moai_adk/core/user_behavior_analytics.py +851 -0
  112. moai_adk/core/version_sync.py +429 -0
  113. moai_adk/foundation/__init__.py +56 -0
  114. moai_adk/foundation/backend.py +1027 -0
  115. moai_adk/foundation/database.py +1115 -0
  116. moai_adk/foundation/devops.py +1585 -0
  117. moai_adk/foundation/ears.py +431 -0
  118. moai_adk/foundation/frontend.py +870 -0
  119. moai_adk/foundation/git/commit_templates.py +557 -0
  120. moai_adk/foundation/git.py +376 -0
  121. moai_adk/foundation/langs.py +484 -0
  122. moai_adk/foundation/ml_ops.py +1162 -0
  123. moai_adk/foundation/testing.py +1524 -0
  124. moai_adk/foundation/trust/trust_principles.py +676 -0
  125. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  126. moai_adk/project/__init__.py +0 -0
  127. moai_adk/project/configuration.py +1084 -0
  128. moai_adk/project/documentation.py +566 -0
  129. moai_adk/project/schema.py +447 -0
  130. moai_adk/statusline/__init__.py +38 -0
  131. moai_adk/statusline/alfred_detector.py +105 -0
  132. moai_adk/statusline/config.py +376 -0
  133. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  134. moai_adk/statusline/git_collector.py +190 -0
  135. moai_adk/statusline/main.py +322 -0
  136. moai_adk/statusline/metrics_tracker.py +78 -0
  137. moai_adk/statusline/renderer.py +343 -0
  138. moai_adk/statusline/update_checker.py +129 -0
  139. moai_adk/statusline/version_reader.py +741 -0
  140. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
  141. moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
  142. moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
  143. moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
  144. moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
  145. moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
  146. moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
  147. moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
  148. moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
  149. moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
  150. moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
  151. moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
  152. moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
  153. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
  154. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
  155. moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
  156. moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
  157. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  158. moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
  159. moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
  160. moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
  161. moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
  162. moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
  163. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
  164. moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
  165. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
  166. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
  167. moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
  168. moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
  169. moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
  170. moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
  171. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  172. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  173. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  179. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  180. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  181. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  182. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  183. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  184. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  185. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  186. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  187. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  188. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  189. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -0
  190. moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
  191. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  192. moai_adk/templates/.claude/settings.json +172 -0
  193. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
  194. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  195. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
  196. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
  197. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
  198. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
  199. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  200. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  201. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  202. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  203. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  204. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
  205. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -0
  206. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
  207. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
  208. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
  209. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
  210. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  211. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  212. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  213. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  214. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
  215. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
  216. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
  217. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
  218. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
  219. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  220. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  221. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  222. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  223. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  224. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  225. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
  226. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  227. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  228. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  229. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  230. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  231. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  232. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  233. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  254. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  257. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  260. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  263. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  266. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  270. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  272. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  273. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  274. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
  275. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  276. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  277. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  278. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  279. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  280. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  281. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  282. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  283. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  284. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +649 -0
  285. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
  286. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
  287. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
  288. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  289. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  290. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +376 -0
  291. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
  292. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
  293. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
  294. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
  295. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
  296. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
  297. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
  298. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
  299. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
  300. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
  301. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
  302. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
  303. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
  304. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
  305. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
  306. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
  307. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
  308. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
  309. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
  310. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
  311. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
  312. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
  313. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
  314. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
  315. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
  316. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
  317. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
  318. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  319. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  320. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  321. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  322. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
  323. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  324. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  325. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  326. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  327. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  328. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  329. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  330. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  331. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  332. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  333. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  334. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  335. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
  336. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  337. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  338. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  339. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  340. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  341. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  342. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
  343. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
  344. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
  345. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
  346. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
  347. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
  348. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
  349. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
  350. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
  351. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
  352. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
  353. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
  354. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
  355. moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
  356. moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
  357. moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
  358. moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
  359. moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
  360. moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
  361. moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
  362. moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
  363. moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
  364. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
  365. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
  366. moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
  367. moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
  368. moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
  369. moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
  370. moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
  371. moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
  372. moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
  373. moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
  374. moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
  375. moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
  376. moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
  377. moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
  378. moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
  379. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
  380. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
  381. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
  382. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
  383. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
  384. moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
  385. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
  386. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
  387. moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
  388. moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
  389. moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
  390. moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
  391. moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  409. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  417. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  418. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
  419. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  420. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  421. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  422. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  423. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  424. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  425. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  426. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  427. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  428. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  429. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
  430. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  431. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  432. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
  433. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  434. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  435. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  436. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  437. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  438. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  439. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
  440. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  441. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  442. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  443. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  444. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  445. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  446. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  447. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  448. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  449. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  450. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  451. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  452. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  453. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  454. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  455. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  456. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  457. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  458. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
  459. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  460. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  461. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  462. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  463. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  464. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  465. moai_adk/templates/.git-hooks/pre-commit +128 -0
  466. moai_adk/templates/.git-hooks/pre-push +365 -0
  467. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  468. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  469. moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
  470. moai_adk/templates/.gitignore +222 -0
  471. moai_adk/templates/.mcp.json +13 -0
  472. moai_adk/templates/.moai/config/config.yaml +58 -0
  473. moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
  474. moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
  475. moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
  476. moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
  477. moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
  478. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
  479. moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
  480. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  481. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  482. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  483. moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
  484. moai_adk/templates/.moai/config/sections/system.yaml +24 -0
  485. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  486. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  487. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  488. moai_adk/templates/CLAUDE.md +642 -0
  489. moai_adk/utils/__init__.py +30 -0
  490. moai_adk/utils/banner.py +38 -0
  491. moai_adk/utils/common.py +294 -0
  492. moai_adk/utils/link_validator.py +241 -0
  493. moai_adk/utils/logger.py +147 -0
  494. moai_adk/utils/safe_file_reader.py +206 -0
  495. moai_adk/utils/timeout.py +160 -0
  496. moai_adk/utils/toon_utils.py +256 -0
  497. moai_adk/version.py +22 -0
  498. moai_adk-0.35.1.dist-info/METADATA +3018 -0
  499. moai_adk-0.35.1.dist-info/RECORD +502 -0
  500. moai_adk-0.35.1.dist-info/WHEEL +4 -0
  501. moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
  502. moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,687 @@
1
+ """Quality Validator for Auto-Generated SPECs."""
2
+
3
+ import logging
4
+ import re
5
+ import time
6
+ from typing import Any, Dict, List
7
+
8
+ from moai_adk.core.spec.confidence_scoring import ConfidenceScoringSystem
9
+
10
+ # Configure logging
11
+ logger = logging.getLogger(__name__)
12
+
13
+ # Traceability tag patterns
14
+ TRACEABILITY_TAGS = ["@SPEC:", "@REQ:", "@TEST:", "@IMPL:", "@DOC:"]
15
+
16
+
17
+ class QualityValidator:
18
+ """
19
+ Quality Validator for auto-generated SPEC documents.
20
+
21
+ This validator ensures that auto-generated SPECs meet quality standards,
22
+ follow EARS format, and are complete and accurate.
23
+ """
24
+
25
+ def __init__(self, config: Dict[str, Any] = None):
26
+ """Initialize the quality validator."""
27
+ self.config = config or {}
28
+ self.confidence_scorer = ConfidenceScoringSystem()
29
+
30
+ # Quality thresholds from config
31
+ self.min_ears_compliance = self.config.get("min_ears_compliance", 0.85)
32
+ self.min_confidence_score = self.config.get("min_confidence_score", 0.7)
33
+ self.min_content_length = self.config.get("min_content_length", 500)
34
+ self.max_review_suggestions = self.config.get("max_review_suggestions", 10)
35
+
36
+ # Quality metrics weights
37
+ self.quality_weights = self.config.get(
38
+ "quality_weights",
39
+ {
40
+ "ears_compliance": 0.3,
41
+ "content_completeness": 0.25,
42
+ "technical_accuracy": 0.2,
43
+ "clarity_score": 0.15,
44
+ "traceability": 0.1,
45
+ },
46
+ )
47
+
48
+ # Validation rules
49
+ self.validation_rules = {
50
+ "required_sections": [
51
+ "Overview",
52
+ "Environment",
53
+ "Assumptions",
54
+ "Requirements",
55
+ "Specifications",
56
+ "Traceability",
57
+ ],
58
+ "required_plan_sections": [
59
+ "Implementation Phases",
60
+ "Technical Approach",
61
+ "Success Criteria",
62
+ "Next Steps",
63
+ ],
64
+ "required_acceptance_sections": [
65
+ "Acceptance Criteria",
66
+ "Validation Process",
67
+ "Completion Criteria",
68
+ ],
69
+ "technical_keywords": [
70
+ "API",
71
+ "Database",
72
+ "Authentication",
73
+ "Security",
74
+ "Performance",
75
+ "Scalability",
76
+ "Testing",
77
+ ],
78
+ }
79
+
80
+ def validate_spec_quality(
81
+ self, spec_content: Dict[str, str], code_analysis: Dict[str, Any] = None
82
+ ) -> Dict[str, Any]:
83
+ """
84
+ Validate the quality of a generated SPEC.
85
+
86
+ Args:
87
+ spec_content: Dictionary with spec_md, plan_md, and acceptance_md
88
+ code_analysis: Original code analysis for reference
89
+
90
+ Returns:
91
+ Quality validation results with scores and recommendations
92
+ """
93
+ start_time = time.time()
94
+
95
+ logger.info("Starting SPEC quality validation")
96
+
97
+ # Initialize validation results
98
+ validation_result: Dict[str, Any] = {
99
+ "validation_time": 0.0,
100
+ "overall_score": 0.0,
101
+ "quality_grade": "F",
102
+ "passed_checks": [],
103
+ "failed_checks": [],
104
+ "recommendations": [],
105
+ "metrics": {},
106
+ "details": {},
107
+ }
108
+
109
+ try:
110
+ # Validate EARS format compliance
111
+ ears_result = self._validate_ears_format(spec_content["spec_md"])
112
+ validation_result["details"]["ears_compliance"] = ears_result
113
+
114
+ # Validate content completeness
115
+ completeness_result = self._validate_content_completeness(spec_content)
116
+ validation_result["details"]["content_completeness"] = completeness_result
117
+
118
+ # Validate technical accuracy
119
+ technical_result = self._validate_technical_accuracy(spec_content, code_analysis)
120
+ validation_result["details"]["technical_accuracy"] = technical_result
121
+
122
+ # Validate clarity and readability
123
+ clarity_result = self._validate_clarity(spec_content)
124
+ validation_result["details"]["clarity_score"] = clarity_result
125
+
126
+ # Validate traceability
127
+ traceability_result = self._validate_traceability(spec_content)
128
+ validation_result["details"]["traceability"] = traceability_result
129
+
130
+ # Calculate overall quality score
131
+ overall_score = self._calculate_overall_score(validation_result["details"])
132
+ validation_result["overall_score"] = overall_score
133
+
134
+ # Determine quality grade
135
+ validation_result["quality_grade"] = self._determine_quality_grade(overall_score)
136
+
137
+ # Check if SPEC meets minimum quality standards
138
+ meets_standards = self._check_quality_standards(validation_result)
139
+ validation_result["meets_minimum_standards"] = meets_standards
140
+
141
+ # Generate recommendations
142
+ recommendations = self._generate_recommendations(validation_result)
143
+ validation_result["recommendations"] = recommendations
144
+
145
+ # Compile check results
146
+ validation_result["passed_checks"] = self._compile_passed_checks(validation_result["details"])
147
+ validation_result["failed_checks"] = self._compile_failed_checks(validation_result["details"])
148
+
149
+ except Exception as e:
150
+ logger.error(f"Error during SPEC validation: {str(e)}")
151
+ validation_result["error"] = str(e)
152
+
153
+ # Set validation time
154
+ validation_result["validation_time"] = time.time() - start_time
155
+
156
+ logger.info(f"SPEC quality validation completed in {validation_result['validation_time']:.2f}s")
157
+
158
+ return validation_result
159
+
160
+ def _validate_ears_format(self, spec_md: str) -> Dict[str, Any]:
161
+ """Validate EARS format compliance."""
162
+ logger.info("Validating EARS format compliance")
163
+
164
+ required_sections = self.validation_rules["required_sections"]
165
+ section_scores = {}
166
+ missing_sections = []
167
+
168
+ # Check each required section
169
+ for section in required_sections:
170
+ if section in spec_md:
171
+ section_scores[section] = 1.0
172
+ else:
173
+ section_scores[section] = 0.0
174
+ missing_sections.append(section)
175
+
176
+ # Calculate overall compliance
177
+ overall_compliance = sum(section_scores.values()) / len(required_sections)
178
+
179
+ # Check for META information
180
+ has_meta = "---" in spec_md and "title:" in spec_md
181
+
182
+ # Check for tags
183
+ has_tags = self._check_traceability_tags(spec_md)
184
+
185
+ # Check for proper structure
186
+ has_proper_headings = self._check_heading_structure(spec_md)
187
+
188
+ return {
189
+ "overall_compliance": round(overall_compliance, 2),
190
+ "section_scores": section_scores,
191
+ "missing_sections": missing_sections,
192
+ "has_meta_info": has_meta,
193
+ "has_tags": has_tags,
194
+ "has_proper_structure": has_proper_headings,
195
+ "total_sections": len(required_sections),
196
+ "present_sections": sum(1 for score in section_scores.values() if score > 0),
197
+ }
198
+
199
+ def _validate_content_completeness(self, spec_content: Dict[str, str]) -> Dict[str, Any]:
200
+ """Validate content completeness across all SPEC files."""
201
+ logger.info("Validating content completeness")
202
+
203
+ results = {
204
+ "spec_completeness": 0.0,
205
+ "plan_completeness": 0.0,
206
+ "acceptance_completeness": 0.0,
207
+ "overall_completeness": 0.0,
208
+ }
209
+
210
+ # Validate spec.md completeness
211
+ spec_md = spec_content.get("spec_md", "")
212
+ spec_completeness = self._assess_section_completeness(spec_md)
213
+ results["spec_completeness"] = spec_completeness
214
+
215
+ # Validate plan.md completeness
216
+ plan_md = spec_content.get("plan_md", "")
217
+ plan_completeness = self._assess_plan_completeness(plan_md)
218
+ results["plan_completeness"] = plan_completeness
219
+
220
+ # Validate acceptance.md completeness
221
+ acceptance_md = spec_content.get("acceptance_md", "")
222
+ acceptance_completeness = self._assess_acceptance_completeness(acceptance_md)
223
+ results["acceptance_completeness"] = acceptance_completeness
224
+
225
+ # Calculate overall completeness
226
+ overall_completeness = (spec_completeness + plan_completeness + acceptance_completeness) / 3
227
+ results["overall_completeness"] = round(overall_completeness, 2)
228
+
229
+ return results
230
+
231
+ def _validate_technical_accuracy(
232
+ self, spec_content: Dict[str, str], code_analysis: Dict[str, Any] = None
233
+ ) -> Dict[str, Any]:
234
+ """Validate technical accuracy of the SPEC."""
235
+ logger.info("Validating technical accuracy")
236
+
237
+ spec_md = spec_content.get("spec_md", "")
238
+
239
+ # Check for technical keywords presence
240
+ technical_keywords = self.validation_rules["technical_keywords"]
241
+ keyword_presence = self._check_technical_keywords(spec_md, technical_keywords)
242
+
243
+ # Check consistency with code analysis
244
+ consistency_score = 1.0
245
+ if code_analysis:
246
+ consistency_score = self._check_code_consistency(spec_md, code_analysis)
247
+
248
+ # Check for technical specifications
249
+ has_technical_specs = self._check_technical_specifications(spec_md)
250
+
251
+ # Check for realistic estimates
252
+ has_realistic_estimates = self._check_realistic_estimates(spec_md)
253
+
254
+ return {
255
+ "keyword_presence": keyword_presence,
256
+ "code_consistency": consistency_score,
257
+ "has_technical_specs": has_technical_specs,
258
+ "has_realistic_estimates": has_realistic_estimates,
259
+ "overall_accuracy": round(
260
+ (
261
+ keyword_presence
262
+ + consistency_score
263
+ + (1.0 if has_technical_specs else 0.0)
264
+ + (1.0 if has_realistic_estimates else 0.0)
265
+ )
266
+ / 4,
267
+ 2,
268
+ ),
269
+ }
270
+
271
+ def _validate_clarity(self, spec_content: Dict[str, str]) -> Dict[str, Any]:
272
+ """Validate clarity and readability of the SPEC."""
273
+ logger.info("Validating clarity and readability")
274
+
275
+ spec_md = spec_content.get("spec_md", "")
276
+
277
+ # Check for proper language use
278
+ language_quality = self._check_language_quality(spec_md)
279
+
280
+ # Check for clarity requirements
281
+ clarity_requirements = self._check_clarity_requirements(spec_md)
282
+
283
+ # Check for ambiguity
284
+ ambiguity_score = self._check_ambiguity(spec_md)
285
+
286
+ # Check for consistency
287
+ consistency_score = self._check_consistency(spec_md)
288
+
289
+ return {
290
+ "language_quality": language_quality,
291
+ "clarity_requirements": clarity_requirements,
292
+ "ambiguity_score": ambiguity_score,
293
+ "consistency_score": consistency_score,
294
+ "overall_clarity": round(
295
+ (language_quality + clarity_requirements + (1.0 - ambiguity_score) + consistency_score) / 4,
296
+ 2,
297
+ ),
298
+ }
299
+
300
+ def _validate_traceability(self, spec_content: Dict[str, str]) -> Dict[str, Any]:
301
+ """Validate traceability in the SPEC."""
302
+ logger.info("Validating traceability")
303
+
304
+ spec_md = spec_content.get("spec_md", "")
305
+
306
+ # Check for basic traceability elements
307
+ has_traceability = "@SPEC:" in spec_md or "Requirements:" in spec_md
308
+
309
+ return {
310
+ "has_traceability_elements": has_traceability,
311
+ "overall_traceability": 1.0 if has_traceability else 0.5,
312
+ }
313
+
314
+ def _calculate_overall_score(self, details: Dict[str, Any]) -> float:
315
+ """Calculate overall quality score."""
316
+ weights = self.quality_weights
317
+
318
+ overall_score = (
319
+ details["ears_compliance"]["overall_compliance"] * weights["ears_compliance"]
320
+ + details["content_completeness"]["overall_completeness"] * weights["content_completeness"]
321
+ + details["technical_accuracy"]["overall_accuracy"] * weights["technical_accuracy"]
322
+ + details["clarity_score"]["overall_clarity"] * weights["clarity_score"]
323
+ + details["traceability"]["overall_traceability"] * weights["traceability"]
324
+ )
325
+
326
+ return round(overall_score, 2)
327
+
328
+ def _determine_quality_grade(self, score: float) -> str:
329
+ """Determine quality grade based on score."""
330
+ if score >= 0.9:
331
+ return "A"
332
+ elif score >= 0.8:
333
+ return "B"
334
+ elif score >= 0.7:
335
+ return "C"
336
+ elif score >= 0.6:
337
+ return "D"
338
+ else:
339
+ return "F"
340
+
341
+ def _check_quality_standards(self, validation_result: Dict[str, Any]) -> bool:
342
+ """Check if SPEC meets minimum quality standards."""
343
+ overall_score = validation_result["overall_score"]
344
+ ears_compliance = validation_result["details"]["ears_compliance"]["overall_compliance"]
345
+
346
+ meets_overall = overall_score >= self.min_confidence_score
347
+ meets_ears = ears_compliance >= self.min_ears_compliance
348
+
349
+ return meets_overall and meets_ears
350
+
351
+ def _generate_recommendations(self, validation_result: Dict[str, Any]) -> List[str]:
352
+ """Generate improvement recommendations."""
353
+ recommendations = []
354
+ details = validation_result["details"]
355
+
356
+ # EARS compliance recommendations
357
+ if details["ears_compliance"]["overall_compliance"] < 1.0:
358
+ missing = details["ears_compliance"]["missing_sections"]
359
+ recommendations.append(f"Add missing EARS sections: {', '.join(missing[:3])}")
360
+
361
+ # Content completeness recommendations
362
+ if details["content_completeness"]["overall_completeness"] < 0.8:
363
+ recommendations.append("Expand content sections with more detailed requirements")
364
+
365
+ # Technical accuracy recommendations
366
+ if details["technical_accuracy"]["overall_accuracy"] < 0.8:
367
+ recommendations.append("Add more technical specifications and details")
368
+
369
+ # Clarity recommendations
370
+ if details["clarity_score"]["overall_clarity"] < 0.7:
371
+ recommendations.append("Improve language clarity and reduce ambiguity")
372
+
373
+ # Traceability recommendations
374
+ if details["traceability"]["overall_traceability"] < 0.8:
375
+ recommendations.append("Add proper traceability tags and relationships")
376
+
377
+ # Limit recommendations
378
+ return recommendations[: self.max_review_suggestions]
379
+
380
+ def _compile_passed_checks(self, details: Dict[str, Any]) -> List[str]:
381
+ """Compile list of passed quality checks."""
382
+ passed = []
383
+
384
+ if details["ears_compliance"]["overall_compliance"] >= self.min_ears_compliance:
385
+ passed.append("EARS format compliance")
386
+
387
+ if details["content_completeness"]["overall_completeness"] >= 0.8:
388
+ passed.append("Content completeness")
389
+
390
+ if details["technical_accuracy"]["overall_accuracy"] >= 0.7:
391
+ passed.append("Technical accuracy")
392
+
393
+ if details["clarity_score"]["overall_clarity"] >= 0.7:
394
+ passed.append("Clarity and readability")
395
+
396
+ if details["traceability"]["overall_traceability"] >= 0.7:
397
+ passed.append("Traceability")
398
+
399
+ return passed
400
+
401
+ def _compile_failed_checks(self, details: Dict[str, Any]) -> List[str]:
402
+ """Compile list of failed quality checks."""
403
+ failed = []
404
+
405
+ if details["ears_compliance"]["overall_compliance"] < self.min_ears_compliance:
406
+ failed.append("EARS format compliance")
407
+
408
+ if details["content_completeness"]["overall_completeness"] < 0.8:
409
+ failed.append("Content completeness")
410
+
411
+ if details["technical_accuracy"]["overall_accuracy"] < 0.7:
412
+ failed.append("Technical accuracy")
413
+
414
+ if details["clarity_score"]["overall_clarity"] < 0.7:
415
+ failed.append("Clarity and readability")
416
+
417
+ if details["traceability"]["overall_traceability"] < 0.7:
418
+ failed.append("Traceability")
419
+
420
+ return failed
421
+
422
+ # Helper methods
423
+ def _check_heading_structure(self, spec_md: str) -> bool:
424
+ """Check if proper heading structure exists."""
425
+ # Look for proper markdown heading structure
426
+ heading_pattern = r"^#+\s+.*$"
427
+ headings = re.findall(heading_pattern, spec_md, re.MULTILINE)
428
+ return len(headings) >= 5 # At least 5 headings
429
+
430
+ def _assess_section_completeness(self, content: str) -> float:
431
+ """Assess completeness of a section."""
432
+ if len(content) < self.min_content_length:
433
+ return 0.0
434
+
435
+ # Check for key indicators of completeness
436
+ completeness_indicators = [
437
+ r"##\s+.*", # Subheadings
438
+ r"\*\*.*\*\*", # Bold text
439
+ r"-\s+.*", # Lists
440
+ r"`[^`]+`", # Code snippets
441
+ r"\d+\.", # Numbered lists
442
+ ]
443
+
444
+ score = 0.0
445
+ for indicator in completeness_indicators:
446
+ matches = re.findall(indicator, content)
447
+ if matches:
448
+ score += 0.2
449
+
450
+ return min(score, 1.0)
451
+
452
+ def _assess_plan_completeness(self, plan_content: str) -> float:
453
+ """Assess completeness of implementation plan."""
454
+ if not plan_content:
455
+ return 0.0
456
+
457
+ # Check for plan-specific elements
458
+ plan_indicators = [
459
+ r"Phase", # Phases
460
+ r"Priority", # Priorities
461
+ r"Task", # Tasks
462
+ r"\[\s*\]", # Checkboxes
463
+ r"Phase 1", # Phase indicators
464
+ ]
465
+
466
+ score = 0.0
467
+ for indicator in plan_indicators:
468
+ if re.search(indicator, plan_content):
469
+ score += 0.2
470
+
471
+ return min(score, 1.0)
472
+
473
+ def _assess_acceptance_criteria_completeness(self, acceptance_content: str) -> float:
474
+ """Assess completeness of acceptance criteria."""
475
+ if not acceptance_content:
476
+ return 0.0
477
+
478
+ # Check for acceptance-specific elements
479
+ acceptance_indicators = [
480
+ r"Acceptance", # Acceptance
481
+ r"Criteria", # Criteria
482
+ r"Pass", # Pass
483
+ r"Fail", # Fail
484
+ r"Test", # Test
485
+ ]
486
+
487
+ score = 0.0
488
+ for indicator in acceptance_indicators:
489
+ if re.search(indicator, acceptance_content):
490
+ score += 0.2
491
+
492
+ return min(score, 1.0)
493
+
494
+ def _check_technical_keywords(self, spec_md: str, keywords: List[str]) -> float:
495
+ """Check for presence of technical keywords."""
496
+ found_keywords = []
497
+ for keyword in keywords:
498
+ if keyword in spec_md:
499
+ found_keywords.append(keyword)
500
+
501
+ return len(found_keywords) / len(keywords)
502
+
503
+ def _check_code_consistency(self, spec_md: str, code_analysis: Dict[str, Any]) -> float:
504
+ """Check consistency between SPEC and code analysis."""
505
+ # Extract key elements from code analysis
506
+ classes = code_analysis.get("structure_info", {}).get("classes", [])
507
+ functions = code_analysis.get("structure_info", {}).get("functions", [])
508
+
509
+ # Check if these elements are mentioned in the SPEC
510
+ class_mentions = sum(1 for cls in classes if cls in spec_md)
511
+ function_mentions = sum(1 for func in functions if func in spec_md)
512
+
513
+ total_elements = len(classes) + len(functions)
514
+ if total_elements == 0:
515
+ return 1.0
516
+
517
+ consistency = (class_mentions + function_mentions) / total_elements
518
+ return min(consistency, 1.0)
519
+
520
+ def _check_technical_specifications(self, spec_md: str) -> bool:
521
+ """Check for presence of technical specifications."""
522
+ technical_patterns = [
523
+ r"API\s+Endpoint",
524
+ r"Database\s+Schema",
525
+ r"Authentication",
526
+ r"Performance\s+Requirement",
527
+ r"Security\s+Requirement",
528
+ r"Scalability\s+Plan",
529
+ r"Testing\s+Strategy",
530
+ ]
531
+
532
+ return any(re.search(pattern, spec_md) for pattern in technical_patterns)
533
+
534
+ def _check_realistic_estimates(self, spec_md: str) -> bool:
535
+ """Check for realistic time/effort estimates."""
536
+ # Look for realistic time estimates
537
+ time_patterns = [r"1-2\s*days", r"3-5\s*days", r"1-2\s*weeks", r"\d+\s*hours"]
538
+
539
+ return any(re.search(pattern, spec_md) for pattern in time_patterns)
540
+
541
+ def _check_language_quality(self, spec_md: str) -> float:
542
+ """Check language quality."""
543
+ # Simple language quality checks
544
+ sentences = spec_md.split(".")
545
+ avg_sentence_length = sum(len(s.split()) for s in sentences) / len(sentences)
546
+
547
+ # Optimal sentence length is around 15-20 words
548
+ if 15 <= avg_sentence_length <= 25:
549
+ return 1.0
550
+ elif 10 <= avg_sentence_length <= 30:
551
+ return 0.8
552
+ else:
553
+ return 0.5
554
+
555
+ def _check_clarity_requirements(self, spec_md: str) -> float:
556
+ """Check clarity requirements."""
557
+ clarity_indicators = [
558
+ r"Clear",
559
+ r"Specific",
560
+ r"Measurable",
561
+ r"Achievable",
562
+ r"Relevant",
563
+ ]
564
+
565
+ found_indicators = sum(1 for indicator in clarity_indicators if re.search(indicator, spec_md))
566
+
567
+ return min(found_indicators / len(clarity_indicators), 1.0)
568
+
569
+ def _check_ambiguity(self, spec_md: str) -> float:
570
+ """Check for ambiguous language."""
571
+ ambiguity_indicators = [
572
+ r"degree",
573
+ r"extent",
574
+ r"approximately",
575
+ r"about",
576
+ r"around",
577
+ ]
578
+
579
+ ambiguous_count = sum(1 for indicator in ambiguity_indicators if re.search(indicator, spec_md))
580
+
581
+ # Normalize by content length
582
+ content_length = len(spec_md.split())
583
+ ambiguity_ratio = ambiguous_count / max(content_length / 100, 1)
584
+
585
+ return min(ambiguity_ratio, 1.0)
586
+
587
+ def _check_consistency(self, spec_md: str) -> float:
588
+ """Check for consistency in terminology."""
589
+ # Check for consistent terminology
590
+ # This is a simplified check - in practice, you'd use more sophisticated NLP
591
+ sentences = spec_md.split(".")
592
+ if len(sentences) < 2:
593
+ return 1.0
594
+
595
+ # Simple consistency check: look for repeated terms
596
+ words = spec_md.lower().split()
597
+ unique_words = set(words)
598
+ consistency_ratio = len(unique_words) / len(words)
599
+
600
+ return consistency_ratio
601
+
602
+ def _check_traceability_tags(self, spec_md: str) -> bool:
603
+ """Check for traceability tags."""
604
+ return any(tag in spec_md for tag in TRACEABILITY_TAGS)
605
+
606
+ def _check_tag_formatting(self, spec_md: str) -> float:
607
+ """Check proper tag formatting."""
608
+ # Look for properly formatted tags
609
+ tag_pattern = r"@[A-Z]+:[A-Za-z0-9\-]+"
610
+ matches = re.findall(tag_pattern, spec_md)
611
+
612
+ # Count total tags to check ratio
613
+ total_tags = len(re.findall(r"@[A-Z]+:", spec_md))
614
+
615
+ if total_tags == 0:
616
+ return 1.0
617
+
618
+ return len(matches) / total_tags
619
+
620
+ def _check_traceability_relationships(self, spec_md: str) -> float:
621
+ """Check traceability relationships."""
622
+ # Look for traceability indicators
623
+ traceability_indicators = [
624
+ r"←|→", # Arrows for relationships
625
+ r"Relationship",
626
+ r"Connect",
627
+ r"Trace",
628
+ ]
629
+
630
+ found_indicators = sum(1 for indicator in traceability_indicators if re.search(indicator, spec_md))
631
+
632
+ return min(found_indicators / len(traceability_indicators), 1.0)
633
+
634
+ def _assess_acceptance_completeness(self, acceptance_content: str) -> float:
635
+ """Assess completeness of acceptance criteria section."""
636
+ if not acceptance_content:
637
+ return 0.0
638
+
639
+ # Check for acceptance-specific elements
640
+ acceptance_indicators = [
641
+ r"Acceptance", # Acceptance
642
+ r"Criteria", # Criteria
643
+ r"Pass", # Pass
644
+ r"Fail", # Fail
645
+ r"Test", # Test
646
+ ]
647
+
648
+ score = 0.0
649
+ for indicator in acceptance_indicators:
650
+ if re.search(indicator, acceptance_content):
651
+ score += 0.2
652
+
653
+ return min(score, 1.0)
654
+
655
+ def generate_quality_report(self, validation_result: Dict[str, Any]) -> str:
656
+ """Generate a quality report string."""
657
+ report = f"""
658
+ # Quality Validation Report
659
+
660
+ ## Overall Quality Score: {validation_result["overall_score"]:.2f}/1.0
661
+ ## Quality Grade: {validation_result["quality_grade"]}
662
+ ## Validation Time: {validation_result["validation_time"]:.2f}s
663
+
664
+ ## Summary
665
+ - Passed Checks: {len(validation_result["passed_checks"])}
666
+ - Failed Checks: {len(validation_result["failed_checks"])}
667
+ - Recommendations: {len(validation_result["recommendations"])}
668
+
669
+ ## Detailed Metrics
670
+ """
671
+
672
+ # Add detailed metrics
673
+ for metric_name, metric_value in validation_result["metrics"].items():
674
+ report += f"- {metric_name}: {metric_value:.2f}\n"
675
+
676
+ # Add recommendations
677
+ if validation_result["recommendations"]:
678
+ report += "\n## Recommendations\n"
679
+ for i, rec in enumerate(validation_result["recommendations"], 1):
680
+ report += f"{i}. {rec}\n"
681
+
682
+ # Add quality determination
683
+ meets_standards = validation_result.get("meets_minimum_standards", False)
684
+ status = "PASSED" if meets_standards else "FAILED"
685
+ report += f"\n## Quality Status: {status}\n"
686
+
687
+ return report