moai-adk 0.15.1__py3-none-any.whl → 0.32.8__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 (699) hide show
  1. moai_adk/__init__.py +2 -6
  2. moai_adk/__main__.py +136 -21
  3. moai_adk/cli/__init__.py +6 -2
  4. moai_adk/cli/commands/__init__.py +1 -4
  5. moai_adk/cli/commands/analyze.py +116 -0
  6. moai_adk/cli/commands/doctor.py +17 -5
  7. moai_adk/cli/commands/init.py +105 -47
  8. moai_adk/cli/commands/language.py +248 -0
  9. moai_adk/cli/commands/status.py +8 -13
  10. moai_adk/cli/commands/update.py +1734 -65
  11. moai_adk/cli/main.py +3 -2
  12. moai_adk/cli/prompts/init_prompts.py +144 -91
  13. moai_adk/cli/spec_status.py +263 -0
  14. moai_adk/cli/ui/__init__.py +44 -0
  15. moai_adk/cli/ui/progress.py +422 -0
  16. moai_adk/cli/ui/prompts.py +389 -0
  17. moai_adk/cli/ui/theme.py +129 -0
  18. moai_adk/cli/worktree/__init__.py +27 -0
  19. moai_adk/cli/worktree/__main__.py +31 -0
  20. moai_adk/cli/worktree/cli.py +672 -0
  21. moai_adk/cli/worktree/exceptions.py +89 -0
  22. moai_adk/cli/worktree/manager.py +490 -0
  23. moai_adk/cli/worktree/models.py +65 -0
  24. moai_adk/cli/worktree/registry.py +128 -0
  25. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  26. moai_adk/core/__init__.py +0 -1
  27. moai_adk/core/analysis/__init__.py +9 -0
  28. moai_adk/core/analysis/session_analyzer.py +400 -0
  29. moai_adk/core/claude_integration.py +393 -0
  30. moai_adk/core/command_helpers.py +270 -0
  31. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  32. moai_adk/core/config/__init__.py +6 -0
  33. moai_adk/core/config/auto_spec_config.py +340 -0
  34. moai_adk/core/config/migration.py +147 -16
  35. moai_adk/core/config/unified.py +436 -0
  36. moai_adk/core/context_manager.py +273 -0
  37. moai_adk/core/diagnostics/slash_commands.py +0 -1
  38. moai_adk/core/enterprise_features.py +1404 -0
  39. moai_adk/core/error_recovery_system.py +1902 -0
  40. moai_adk/core/event_driven_hook_system.py +1371 -0
  41. moai_adk/core/git/__init__.py +8 -1
  42. moai_adk/core/git/branch.py +0 -1
  43. moai_adk/core/git/branch_manager.py +2 -10
  44. moai_adk/core/git/checkpoint.py +1 -7
  45. moai_adk/core/git/commit.py +0 -1
  46. moai_adk/core/git/conflict_detector.py +413 -0
  47. moai_adk/core/git/event_detector.py +3 -5
  48. moai_adk/core/git/manager.py +91 -2
  49. moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
  50. moai_adk/core/input_validation_middleware.py +1006 -0
  51. moai_adk/core/integration/__init__.py +22 -0
  52. moai_adk/core/integration/engine.py +157 -0
  53. moai_adk/core/integration/integration_tester.py +226 -0
  54. moai_adk/core/integration/models.py +88 -0
  55. moai_adk/core/integration/utils.py +211 -0
  56. moai_adk/core/issue_creator.py +20 -28
  57. moai_adk/core/jit_context_loader.py +956 -0
  58. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  59. moai_adk/core/language_config.py +202 -0
  60. moai_adk/core/language_config_resolver.py +485 -0
  61. moai_adk/core/language_validator.py +543 -0
  62. moai_adk/core/mcp/setup.py +116 -0
  63. moai_adk/core/merge/__init__.py +9 -0
  64. moai_adk/core/merge/analyzer.py +481 -0
  65. moai_adk/core/migration/__init__.py +18 -0
  66. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  67. moai_adk/core/migration/backup_manager.py +277 -0
  68. moai_adk/core/migration/custom_element_scanner.py +358 -0
  69. moai_adk/core/migration/file_migrator.py +209 -0
  70. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  71. moai_adk/core/migration/selective_restorer.py +470 -0
  72. moai_adk/core/migration/template_utils.py +74 -0
  73. moai_adk/core/migration/user_selection_ui.py +338 -0
  74. moai_adk/core/migration/version_detector.py +139 -0
  75. moai_adk/core/migration/version_migrator.py +228 -0
  76. moai_adk/core/performance/__init__.py +6 -0
  77. moai_adk/core/performance/cache_system.py +316 -0
  78. moai_adk/core/performance/parallel_processor.py +116 -0
  79. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  80. moai_adk/core/project/__init__.py +0 -1
  81. moai_adk/core/project/backup_utils.py +2 -7
  82. moai_adk/core/project/checker.py +2 -4
  83. moai_adk/core/project/detector.py +17 -39
  84. moai_adk/core/project/initializer.py +170 -33
  85. moai_adk/core/project/phase_executor.py +398 -68
  86. moai_adk/core/project/validator.py +7 -32
  87. moai_adk/core/quality/__init__.py +1 -1
  88. moai_adk/core/quality/trust_checker.py +37 -101
  89. moai_adk/core/quality/validators/__init__.py +1 -1
  90. moai_adk/core/quality/validators/base_validator.py +1 -1
  91. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  92. moai_adk/core/robust_json_parser.py +611 -0
  93. moai_adk/core/rollback_manager.py +918 -0
  94. moai_adk/core/session_manager.py +651 -0
  95. moai_adk/core/skill_loading_system.py +579 -0
  96. moai_adk/core/spec/confidence_scoring.py +680 -0
  97. moai_adk/core/spec/ears_template_engine.py +1247 -0
  98. moai_adk/core/spec/quality_validator.py +687 -0
  99. moai_adk/core/spec_status_manager.py +478 -0
  100. moai_adk/core/template/__init__.py +0 -1
  101. moai_adk/core/template/backup.py +82 -17
  102. moai_adk/core/template/config.py +112 -40
  103. moai_adk/core/template/languages.py +0 -1
  104. moai_adk/core/template/merger.py +75 -26
  105. moai_adk/core/template/processor.py +750 -72
  106. moai_adk/core/template_engine.py +90 -48
  107. moai_adk/core/template_variable_synchronizer.py +417 -0
  108. moai_adk/core/unified_permission_manager.py +745 -0
  109. moai_adk/core/user_behavior_analytics.py +851 -0
  110. moai_adk/core/version_sync.py +429 -0
  111. moai_adk/foundation/__init__.py +56 -0
  112. moai_adk/foundation/backend.py +1027 -0
  113. moai_adk/foundation/database.py +1115 -0
  114. moai_adk/foundation/devops.py +1585 -0
  115. moai_adk/foundation/ears.py +431 -0
  116. moai_adk/foundation/frontend.py +870 -0
  117. moai_adk/foundation/git/commit_templates.py +557 -0
  118. moai_adk/foundation/git.py +376 -0
  119. moai_adk/foundation/langs.py +484 -0
  120. moai_adk/foundation/ml_ops.py +1162 -0
  121. moai_adk/foundation/testing.py +1524 -0
  122. moai_adk/foundation/trust/trust_principles.py +676 -0
  123. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  124. moai_adk/project/__init__.py +0 -0
  125. moai_adk/project/configuration.py +1084 -0
  126. moai_adk/project/documentation.py +566 -0
  127. moai_adk/project/schema.py +447 -0
  128. moai_adk/statusline/__init__.py +38 -0
  129. moai_adk/statusline/alfred_detector.py +105 -0
  130. moai_adk/statusline/config.py +373 -0
  131. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  132. moai_adk/statusline/git_collector.py +190 -0
  133. moai_adk/statusline/main.py +264 -0
  134. moai_adk/statusline/metrics_tracker.py +78 -0
  135. moai_adk/statusline/renderer.py +383 -0
  136. moai_adk/statusline/update_checker.py +129 -0
  137. moai_adk/statusline/version_reader.py +741 -0
  138. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
  139. moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
  140. moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
  141. moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
  142. moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
  143. moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
  144. moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
  145. moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
  146. moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
  147. moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
  148. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
  149. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
  150. moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
  151. moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
  152. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  153. moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
  154. moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
  155. moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
  156. moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
  157. moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
  158. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
  159. moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
  160. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
  161. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
  162. moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
  163. moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
  164. moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
  165. moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
  166. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  167. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  168. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  169. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  170. moai_adk/templates/.claude/hooks/{alfred/shared/core → moai/lib}/checkpoint.py +9 -36
  171. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  172. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  173. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  179. moai_adk/templates/.claude/hooks/{alfred/shared/core → moai/lib}/project.py +63 -44
  180. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  181. moai_adk/templates/.claude/hooks/{alfred/core → moai/lib}/timeout.py +40 -16
  182. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  183. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  184. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
  185. moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
  186. moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
  187. moai_adk/templates/.claude/settings.json +78 -50
  188. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
  189. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  190. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  191. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  192. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  193. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  194. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +312 -283
  195. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +291 -94
  196. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  197. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  198. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  199. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  200. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +469 -101
  201. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
  202. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  203. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  204. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  205. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
  206. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  207. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  208. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  209. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
  210. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  211. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  212. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  213. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  214. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  215. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  216. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
  217. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  218. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  219. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  220. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  221. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  222. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  223. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  224. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  225. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  226. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  227. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  228. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  229. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  230. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  231. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
  232. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
  233. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  253. moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
  254. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
  255. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
  256. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
  257. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
  258. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
  259. moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
  260. moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
  261. moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
  262. moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
  263. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
  264. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  265. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  266. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  267. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  268. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
  269. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  270. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  271. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  272. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  273. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  274. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  275. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  276. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  277. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  278. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  279. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
  280. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  281. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  282. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  283. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  284. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  285. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  286. moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
  287. moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
  288. moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
  289. moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
  290. moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
  291. moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
  292. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
  293. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  294. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  295. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  296. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
  297. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  298. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  299. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  300. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  301. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  302. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
  303. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  304. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  305. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  306. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  307. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  308. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  309. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  310. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  311. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  312. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  313. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  314. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
  315. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  316. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  317. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  318. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
  319. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  320. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  321. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  322. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  323. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  324. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  325. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
  326. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  327. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  328. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  329. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  330. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
  331. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  332. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  333. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  334. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  335. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  336. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  337. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  338. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  339. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  340. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  341. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  342. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  343. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  344. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  345. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  346. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  347. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
  348. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  349. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  350. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  351. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  352. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  353. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  354. moai_adk/templates/.git-hooks/pre-commit +128 -0
  355. moai_adk/templates/.git-hooks/pre-push +220 -13
  356. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  357. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  358. moai_adk/templates/.github/workflows/spec-issue-sync.yml +0 -1
  359. moai_adk/templates/.gitignore +197 -13
  360. moai_adk/templates/.mcp.json +20 -0
  361. moai_adk/templates/.moai/cache/personalization.json +10 -0
  362. moai_adk/templates/.moai/config/config.yaml +344 -0
  363. moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
  364. moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
  365. moai_adk/templates/.moai/config/presets/team.yaml +33 -0
  366. moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
  367. moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
  368. moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
  369. moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
  370. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
  371. moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
  372. moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
  373. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  374. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  375. moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
  376. moai_adk/templates/.moai/config/sections/system.yaml +14 -0
  377. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  378. moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
  379. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  380. moai_adk/templates/CLAUDE.md +310 -1050
  381. moai_adk/utils/__init__.py +24 -2
  382. moai_adk/utils/banner.py +7 -11
  383. moai_adk/utils/common.py +294 -0
  384. moai_adk/utils/link_validator.py +241 -0
  385. moai_adk/utils/logger.py +4 -9
  386. moai_adk/utils/safe_file_reader.py +206 -0
  387. moai_adk/{templates/.claude/hooks/alfred/utils → utils}/timeout.py +8 -9
  388. moai_adk/utils/toon_utils.py +256 -0
  389. moai_adk/version.py +22 -0
  390. moai_adk-0.32.8.dist-info/METADATA +2478 -0
  391. moai_adk-0.32.8.dist-info/RECORD +396 -0
  392. {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
  393. {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
  394. moai_adk/cli/commands/backup.py +0 -80
  395. moai_adk/core/tags/__init__.py +0 -86
  396. moai_adk/core/tags/ci_validator.py +0 -463
  397. moai_adk/core/tags/cli.py +0 -283
  398. moai_adk/core/tags/generator.py +0 -109
  399. moai_adk/core/tags/inserter.py +0 -99
  400. moai_adk/core/tags/mapper.py +0 -126
  401. moai_adk/core/tags/parser.py +0 -76
  402. moai_adk/core/tags/pre_commit_validator.py +0 -393
  403. moai_adk/core/tags/reporter.py +0 -956
  404. moai_adk/core/tags/tags.py +0 -149
  405. moai_adk/core/tags/validator.py +0 -897
  406. moai_adk/templates/.claude/agents/alfred/backend-expert.md +0 -319
  407. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -316
  408. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -208
  409. moai_adk/templates/.claude/agents/alfred/devops-expert.md +0 -464
  410. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -214
  411. moai_adk/templates/.claude/agents/alfred/frontend-expert.md +0 -357
  412. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -406
  413. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -423
  414. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -312
  415. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -343
  416. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -865
  417. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -426
  418. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -361
  419. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -428
  420. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -375
  421. moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +0 -571
  422. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1854
  423. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -880
  424. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -793
  425. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -1084
  426. moai_adk/templates/.claude/commands/alfred/9-feedback.md +0 -149
  427. moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -748
  428. moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +0 -108
  429. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +0 -198
  430. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -29
  431. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +0 -94
  432. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +0 -100
  433. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +0 -94
  434. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +0 -94
  435. moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +0 -170
  436. moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +0 -67
  437. moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +0 -230
  438. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +0 -198
  439. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +0 -21
  440. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +0 -154
  441. moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +0 -174
  442. moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +0 -87
  443. moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +0 -61
  444. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +0 -112
  445. moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +0 -1
  446. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +0 -70
  447. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +0 -62
  448. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +0 -242
  449. moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +0 -56
  450. moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +0 -28
  451. moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +0 -444
  452. moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +0 -62
  453. moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +0 -28
  454. moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +0 -405
  455. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +0 -51
  456. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +0 -355
  457. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +0 -239
  458. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  459. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  460. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  461. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +0 -323
  462. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +0 -286
  463. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +0 -126
  464. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  465. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  466. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  467. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/SKILL.md +0 -74
  468. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +0 -4
  469. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +0 -269
  470. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  471. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  472. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  473. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +0 -19
  474. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +0 -4
  475. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +0 -150
  476. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  477. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  478. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  479. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/SKILL.md +0 -198
  480. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +0 -431
  481. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +0 -141
  482. moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +0 -89
  483. moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +0 -122
  484. moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +0 -369
  485. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +0 -508
  486. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +0 -481
  487. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +0 -100
  488. moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +0 -273
  489. moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +0 -77
  490. moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +0 -265
  491. moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +0 -539
  492. moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +0 -19
  493. moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +0 -4
  494. moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +0 -84
  495. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +0 -137
  496. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +0 -219
  497. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +0 -161
  498. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +0 -541
  499. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +0 -622
  500. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +0 -115
  501. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +0 -4
  502. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +0 -348
  503. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  504. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  505. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  506. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  507. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  508. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  509. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +0 -19
  510. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +0 -4
  511. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +0 -211
  512. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
  513. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
  514. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
  515. moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +0 -288
  516. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
  517. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  518. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  519. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  520. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  521. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  522. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  523. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  524. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  525. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  526. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  527. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  528. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  529. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  530. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  531. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  532. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/SKILL.md +0 -19
  533. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +0 -4
  534. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/reference.md +0 -218
  535. moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +0 -482
  536. moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +0 -278
  537. moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  538. moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +0 -477
  539. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  540. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  541. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  542. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  543. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +0 -271
  544. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  545. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +0 -583
  546. moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +0 -526
  547. moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +0 -465
  548. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +0 -328
  549. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +0 -312
  550. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  551. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +0 -285
  552. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +0 -278
  553. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +0 -303
  554. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  555. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  556. moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +0 -802
  557. moai_adk/templates/.claude/skills/moai-design-systems/examples.md +0 -1238
  558. moai_adk/templates/.claude/skills/moai-design-systems/reference.md +0 -673
  559. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +0 -1633
  560. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +0 -660
  561. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  562. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  563. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  564. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  565. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  566. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  567. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +0 -29
  568. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +0 -30
  569. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  570. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  571. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  572. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +0 -29
  573. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +0 -31
  574. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  575. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  576. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  577. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  578. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  579. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  580. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  581. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  582. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  583. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  584. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  585. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  586. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  587. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  588. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  589. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  590. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  591. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  592. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  593. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  594. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  595. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  596. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  597. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  598. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -116
  599. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  600. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  601. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  602. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  603. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  604. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  605. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  606. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  607. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  608. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  609. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  610. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  611. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  612. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  613. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  614. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  615. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  616. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  617. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  618. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  619. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +0 -124
  620. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
  621. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
  622. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +0 -123
  623. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
  624. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
  625. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  626. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  627. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  628. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +0 -127
  629. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +0 -29
  630. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +0 -31
  631. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +0 -126
  632. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +0 -29
  633. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +0 -31
  634. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
  635. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
  636. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
  637. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +0 -124
  638. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +0 -29
  639. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +0 -31
  640. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +0 -126
  641. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
  642. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
  643. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +0 -433
  644. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +0 -624
  645. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +0 -316
  646. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +0 -123
  647. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
  648. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
  649. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +0 -124
  650. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
  651. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
  652. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +0 -127
  653. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +0 -29
  654. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +0 -31
  655. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +0 -125
  656. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +0 -29
  657. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +0 -30
  658. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  659. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  660. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  661. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  662. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  663. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  664. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +0 -123
  665. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +0 -29
  666. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +0 -30
  667. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +0 -133
  668. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +0 -29
  669. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +0 -34
  670. moai_adk/templates/.claude/skills/moai-project-documentation.md +0 -622
  671. moai_adk/templates/.github/workflows/c-tag-validation.yml +0 -11
  672. moai_adk/templates/.github/workflows/cpp-tag-validation.yml +0 -11
  673. moai_adk/templates/.github/workflows/csharp-tag-validation.yml +0 -11
  674. moai_adk/templates/.github/workflows/dart-tag-validation.yml +0 -11
  675. moai_adk/templates/.github/workflows/go-tag-validation.yml +0 -130
  676. moai_adk/templates/.github/workflows/java-tag-validation.yml +0 -11
  677. moai_adk/templates/.github/workflows/javascript-tag-validation.yml +0 -135
  678. moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +0 -11
  679. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -419
  680. moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
  681. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
  682. moai_adk/templates/.github/workflows/php-tag-validation.yml +0 -11
  683. moai_adk/templates/.github/workflows/python-tag-validation.yml +0 -118
  684. moai_adk/templates/.github/workflows/release.yml +0 -118
  685. moai_adk/templates/.github/workflows/ruby-tag-validation.yml +0 -11
  686. moai_adk/templates/.github/workflows/rust-tag-validation.yml +0 -11
  687. moai_adk/templates/.github/workflows/shell-tag-validation.yml +0 -11
  688. moai_adk/templates/.github/workflows/swift-tag-validation.yml +0 -11
  689. moai_adk/templates/.github/workflows/tag-report.yml +0 -269
  690. moai_adk/templates/.github/workflows/tag-validation.yml +0 -186
  691. moai_adk/templates/.github/workflows/typescript-tag-validation.yml +0 -154
  692. moai_adk/templates/.moai/config.json +0 -115
  693. moai_adk/templates/workflows/go-tag-validation.yml +0 -30
  694. moai_adk/templates/workflows/javascript-tag-validation.yml +0 -41
  695. moai_adk/templates/workflows/python-tag-validation.yml +0 -42
  696. moai_adk/templates/workflows/typescript-tag-validation.yml +0 -31
  697. moai_adk-0.15.1.dist-info/METADATA +0 -3094
  698. moai_adk-0.15.1.dist-info/RECORD +0 -365
  699. {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1115 @@
1
+ """
2
+ Database Architecture Foundation Module
3
+
4
+ Provides enterprise database patterns:
5
+ - Schema normalization validation (1NF, 2NF, 3NF, BCNF)
6
+ - Database technology selection (PostgreSQL, MySQL, MongoDB, Redis)
7
+ - Indexing strategy optimization (B-tree, Hash, Composite)
8
+ - Connection pooling management
9
+ - Migration pattern planning
10
+ - ACID transaction handling
11
+ - Performance monitoring
12
+
13
+ Framework Versions:
14
+ - PostgreSQL 17+
15
+ - MySQL 8.4+ LTS
16
+ - MongoDB 8.0+
17
+ - Redis 7.4+
18
+ - Python 3.13+
19
+
20
+ Created: 2025-11-24
21
+ Status: GREEN Phase (Implementation complete)
22
+ """
23
+
24
+ from dataclasses import dataclass
25
+ from typing import Any, Dict, List, Optional
26
+
27
+ # ============================================================================
28
+ # Data Classes
29
+ # ============================================================================
30
+
31
+
32
+ @dataclass
33
+ class ValidationResult:
34
+ """Schema validation result."""
35
+
36
+ is_valid: bool
37
+ violations: List[str]
38
+ normalization_level: str
39
+ suggestions: List[str] = None
40
+
41
+ def __post_init__(self):
42
+ if self.suggestions is None:
43
+ self.suggestions = []
44
+
45
+
46
+ @dataclass
47
+ class DatabaseRecommendation:
48
+ """Database technology recommendation."""
49
+
50
+ database: str
51
+ version: str
52
+ reasoning: str
53
+ alternatives: List[str] = None
54
+
55
+ def __post_init__(self):
56
+ if self.alternatives is None:
57
+ self.alternatives = []
58
+
59
+
60
+ @dataclass
61
+ class IndexRecommendation:
62
+ """Index recommendation."""
63
+
64
+ index_type: str
65
+ columns: List[str]
66
+ reasoning: str
67
+ estimated_improvement: Optional[float] = None
68
+
69
+
70
+ @dataclass
71
+ class PoolConfiguration:
72
+ """Connection pool configuration."""
73
+
74
+ min_size: int
75
+ max_size: int
76
+ timeout_seconds: int
77
+ idle_timeout: Optional[int] = None
78
+
79
+
80
+ @dataclass
81
+ class MigrationPlan:
82
+ """Database migration plan."""
83
+
84
+ steps: List[str]
85
+ reversible: bool
86
+ rollback_steps: List[str]
87
+ estimated_duration: Optional[str] = None
88
+
89
+
90
+ @dataclass
91
+ class ACIDCompliance:
92
+ """ACID property compliance check."""
93
+
94
+ atomicity: bool
95
+ consistency: bool
96
+ isolation: bool
97
+ durability: bool
98
+
99
+
100
+ # ============================================================================
101
+ # Class 1: SchemaNormalizer
102
+ # ============================================================================
103
+
104
+
105
+ class SchemaNormalizer:
106
+ """
107
+ Schema normalization validator.
108
+
109
+ Validates database schemas against normal forms (1NF, 2NF, 3NF, BCNF)
110
+ and provides normalization recommendations.
111
+ """
112
+
113
+ def validate_1nf(self, schema: Dict[str, Any]) -> Dict[str, Any]:
114
+ """
115
+ Validate First Normal Form (1NF).
116
+
117
+ Requirements:
118
+ - Each column contains atomic values
119
+ - No repeating groups
120
+ - Each row is unique
121
+
122
+ Args:
123
+ schema: Database schema definition
124
+
125
+ Returns:
126
+ Validation result with violations
127
+ """
128
+ violations = []
129
+
130
+ for table_name, table_def in schema.items():
131
+ for column_name, column_type in table_def.items():
132
+ if column_name == "PRIMARY KEY":
133
+ continue
134
+
135
+ # Check for multi-valued attributes (common patterns)
136
+ multi_value_patterns = [
137
+ "_list",
138
+ "_array",
139
+ "_set",
140
+ "items",
141
+ "tags",
142
+ "categories",
143
+ "numbers",
144
+ "emails",
145
+ "addresses",
146
+ ]
147
+ if any(pattern in column_name.lower() for pattern in multi_value_patterns):
148
+ if "VARCHAR" in column_type or "TEXT" in column_type:
149
+ violations.append(f"{table_name}.{column_name}: Likely contains multiple values")
150
+
151
+ is_valid = len(violations) == 0
152
+ normalization_level = "1NF" if is_valid else "0NF"
153
+
154
+ return {
155
+ "is_valid": is_valid,
156
+ "violations": violations,
157
+ "normalization_level": normalization_level,
158
+ "suggestions": self._generate_1nf_suggestions(violations),
159
+ }
160
+
161
+ def validate_2nf(self, schema: Dict[str, Any]) -> Dict[str, Any]:
162
+ """
163
+ Validate Second Normal Form (2NF).
164
+
165
+ Requirements:
166
+ - Must be in 1NF
167
+ - No partial dependencies (non-key attributes depend on entire primary key)
168
+
169
+ Args:
170
+ schema: Database schema definition
171
+
172
+ Returns:
173
+ Validation result with violations
174
+ """
175
+ violations = []
176
+
177
+ for table_name, table_def in schema.items():
178
+ primary_key = table_def.get("PRIMARY KEY", "")
179
+
180
+ # Check for composite primary keys
181
+ if "," in primary_key:
182
+ pk_columns = [col.strip() for col in primary_key.strip("()").split(",")]
183
+
184
+ # Check for attributes that depend on only part of the key
185
+ for column_name, column_type in table_def.items():
186
+ if column_name in pk_columns or column_name == "PRIMARY KEY":
187
+ continue
188
+
189
+ # Heuristic: If column name contains part of PK, likely partial dependency
190
+ for pk_col in pk_columns:
191
+ if pk_col in column_name and column_name != pk_col:
192
+ violations.append(
193
+ f"{table_name}.{column_name}: Depends only on {pk_col} (partial dependency)"
194
+ )
195
+ # Also check for product/order-specific patterns
196
+ elif "product_" in column_name and "product_id" in pk_columns:
197
+ violations.append(
198
+ f"{table_name}.{column_name}: Depends only on product_id (partial dependency)"
199
+ )
200
+
201
+ is_valid = len(violations) == 0
202
+ normalization_level = "2NF" if is_valid else "1NF"
203
+
204
+ return {
205
+ "is_valid": is_valid,
206
+ "violations": violations,
207
+ "normalization_level": normalization_level,
208
+ "suggestions": self._generate_2nf_suggestions(violations),
209
+ }
210
+
211
+ def validate_3nf(self, schema: Dict[str, Any]) -> Dict[str, Any]:
212
+ """
213
+ Validate Third Normal Form (3NF).
214
+
215
+ Requirements:
216
+ - Must be in 2NF
217
+ - No transitive dependencies (non-key attributes depend only on primary key)
218
+
219
+ Args:
220
+ schema: Database schema definition
221
+
222
+ Returns:
223
+ Validation result with violations
224
+ """
225
+ violations = []
226
+
227
+ for table_name, table_def in schema.items():
228
+ columns = [col for col in table_def.keys() if col != "PRIMARY KEY"]
229
+
230
+ # Heuristic: Detect potential foreign key relationships
231
+ for column_name in columns:
232
+ if column_name.endswith("_id"):
233
+ base_entity = column_name[:-3] # Remove "_id"
234
+
235
+ # Check for attributes that should belong to referenced entity
236
+ for other_column in columns:
237
+ if (
238
+ other_column.startswith(base_entity)
239
+ and other_column != column_name
240
+ and not other_column.endswith("_id")
241
+ ):
242
+ violations.append(
243
+ f"{table_name}.{other_column}: Depends on {column_name} (transitive dependency)"
244
+ )
245
+
246
+ is_valid = len(violations) == 0
247
+ normalization_level = "3NF" if is_valid else "2NF"
248
+
249
+ return {
250
+ "is_valid": is_valid,
251
+ "violations": violations,
252
+ "normalization_level": normalization_level,
253
+ "suggestions": self._generate_3nf_suggestions(violations),
254
+ }
255
+
256
+ def recommend_normalization(self, schema: Dict[str, Any]) -> List[Dict[str, str]]:
257
+ """
258
+ Generate normalization recommendations.
259
+
260
+ Args:
261
+ schema: Database schema definition
262
+
263
+ Returns:
264
+ List of normalization recommendations
265
+ """
266
+ recommendations = []
267
+
268
+ # Check 1NF
269
+ result_1nf = self.validate_1nf(schema)
270
+ if not result_1nf["is_valid"]:
271
+ recommendations.append(
272
+ {
273
+ "level": "1NF",
274
+ "description": "Split multi-valued attributes into separate rows (1NF requirement)",
275
+ "violations": result_1nf["violations"],
276
+ }
277
+ )
278
+
279
+ # Check 2NF
280
+ result_2nf = self.validate_2nf(schema)
281
+ if not result_2nf["is_valid"]:
282
+ recommendations.append(
283
+ {
284
+ "level": "2NF",
285
+ "description": "Extract partially dependent attributes to new tables",
286
+ "violations": result_2nf["violations"],
287
+ }
288
+ )
289
+
290
+ # Check 3NF
291
+ result_3nf = self.validate_3nf(schema)
292
+ if not result_3nf["is_valid"]:
293
+ recommendations.append(
294
+ {
295
+ "level": "3NF",
296
+ "description": "Remove transitive dependencies by creating reference tables",
297
+ "violations": result_3nf["violations"],
298
+ }
299
+ )
300
+
301
+ # Suggest table extraction for customer data
302
+ for table_name, table_def in schema.items():
303
+ customer_columns = [col for col in table_def if "customer" in col.lower()]
304
+ if len(customer_columns) >= 2: # 2 or more customer fields
305
+ recommendations.append(
306
+ {
307
+ "level": "3NF",
308
+ "description": f"Extract customer data from {table_name} to separate customers table",
309
+ "violations": [f"Multiple customer attributes in {table_name}"],
310
+ }
311
+ )
312
+
313
+ return recommendations
314
+
315
+ def _generate_1nf_suggestions(self, violations: List[str]) -> List[str]:
316
+ """Generate 1NF normalization suggestions."""
317
+ return [
318
+ "Create separate table for multi-valued attributes",
319
+ "Use foreign keys to link related entities",
320
+ ]
321
+
322
+ def _generate_2nf_suggestions(self, violations: List[str]) -> List[str]:
323
+ """Generate 2NF normalization suggestions."""
324
+ return [
325
+ "Extract partially dependent attributes to new tables",
326
+ "Create proper foreign key relationships",
327
+ ]
328
+
329
+ def _generate_3nf_suggestions(self, violations: List[str]) -> List[str]:
330
+ """Generate 3NF normalization suggestions."""
331
+ return [
332
+ "Create separate reference tables for dependent attributes",
333
+ "Use foreign keys to maintain relationships",
334
+ ]
335
+
336
+
337
+ # ============================================================================
338
+ # Class 2: DatabaseSelector
339
+ # ============================================================================
340
+
341
+
342
+ class DatabaseSelector:
343
+ """
344
+ Database technology selection advisor.
345
+
346
+ Recommends appropriate database systems based on requirements:
347
+ - PostgreSQL 17+ for ACID compliance
348
+ - MySQL 8.4+ for legacy compatibility
349
+ - MongoDB 8.0+ for flexible schemas
350
+ - Redis 7.4+ for caching
351
+ """
352
+
353
+ def select_database(self, requirements: Dict[str, Any]) -> Dict[str, Any]:
354
+ """
355
+ Select appropriate database technology.
356
+
357
+ Args:
358
+ requirements: Project requirements dictionary
359
+
360
+ Returns:
361
+ Database recommendation with reasoning
362
+ """
363
+ # PostgreSQL for ACID compliance
364
+ if requirements.get("acid_compliance") or requirements.get("transactions") == "required":
365
+ return {
366
+ "database": "PostgreSQL",
367
+ "version": "17",
368
+ "reasoning": "PostgreSQL 17+ provides full ACID compliance, "
369
+ "advanced transaction support, and strong consistency guarantees",
370
+ "alternatives": ["MySQL 8.4+ for legacy compatibility"],
371
+ }
372
+
373
+ # MongoDB for flexible schemas
374
+ if requirements.get("schema_flexibility") == "high" or requirements.get("data_model") == "document":
375
+ return {
376
+ "database": "MongoDB",
377
+ "version": "8.0",
378
+ "reasoning": "MongoDB 8.0+ offers flexible schema design, "
379
+ "horizontal scalability, and document-based data model",
380
+ "alternatives": ["PostgreSQL with JSONB for hybrid approach"],
381
+ }
382
+
383
+ # Redis for caching
384
+ if requirements.get("use_case") == "caching" or requirements.get("speed") == "critical":
385
+ return {
386
+ "database": "Redis",
387
+ "version": "7.4",
388
+ "reasoning": "Redis 7.4+ provides in-memory cache, TTL support, "
389
+ "and high-performance key-value operations",
390
+ "alternatives": ["Memcached for simpler caching needs"],
391
+ }
392
+
393
+ # MySQL for legacy compatibility
394
+ if requirements.get("legacy_support") or requirements.get("ecosystem") == "mature":
395
+ return {
396
+ "database": "MySQL",
397
+ "version": "8.4",
398
+ "reasoning": "MySQL 8.4 LTS offers legacy compatibility, "
399
+ "mature ecosystem, and reliable relational database features",
400
+ "alternatives": ["MariaDB for open-source alternative"],
401
+ }
402
+
403
+ # Default: PostgreSQL
404
+ return {
405
+ "database": "PostgreSQL",
406
+ "version": "17",
407
+ "reasoning": "PostgreSQL 17+ is recommended as the default choice for robust, scalable applications",
408
+ "alternatives": ["MySQL, MongoDB, or Redis depending on specific needs"],
409
+ }
410
+
411
+
412
+ # ============================================================================
413
+ # Class 3: IndexingOptimizer
414
+ # ============================================================================
415
+
416
+
417
+ class IndexingOptimizer:
418
+ """
419
+ Indexing strategy optimizer.
420
+
421
+ Recommends appropriate index types:
422
+ - B-tree for range queries
423
+ - Hash for equality queries
424
+ - Composite for multi-column queries
425
+ """
426
+
427
+ def recommend_index(self, query_pattern: Dict[str, Any]) -> Dict[str, Any]:
428
+ """
429
+ Recommend index type based on query pattern.
430
+
431
+ Args:
432
+ query_pattern: Query analysis with columns and conditions
433
+
434
+ Returns:
435
+ Index recommendation
436
+ """
437
+ columns = query_pattern.get("columns", [])
438
+ conditions = query_pattern.get("conditions", [])
439
+
440
+ # Check for multi-column queries FIRST (higher priority)
441
+ if len(columns) > 1:
442
+ # Sort columns: equality columns first, then range columns
443
+ sorted_columns = self._sort_columns_for_composite(columns, conditions)
444
+ return {
445
+ "index_type": "COMPOSITE",
446
+ "columns": sorted_columns,
447
+ "reasoning": "Composite index improves multi-column queries; equality columns placed first",
448
+ "estimated_improvement": 0.80,
449
+ }
450
+
451
+ # Check for range queries
452
+ if any(">" in cond or "<" in cond or "BETWEEN" in cond for cond in conditions):
453
+ return {
454
+ "index_type": "BTREE",
455
+ "columns": columns,
456
+ "reasoning": "B-tree index is optimal for range queries and inequality comparisons",
457
+ "estimated_improvement": 0.75,
458
+ }
459
+
460
+ # Equality queries
461
+ if any("=" in cond for cond in conditions):
462
+ return {
463
+ "index_type": "HASH",
464
+ "columns": columns,
465
+ "reasoning": "Hash index provides O(1) lookup for exact match equality queries",
466
+ "estimated_improvement": 0.90,
467
+ }
468
+
469
+ # Default: B-tree
470
+ return {
471
+ "index_type": "BTREE",
472
+ "columns": columns,
473
+ "reasoning": "B-tree is the default index type supporting range and equality queries",
474
+ "estimated_improvement": 0.60,
475
+ }
476
+
477
+ def detect_redundant_indexes(self, existing_indexes: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
478
+ """
479
+ Detect redundant indexes.
480
+
481
+ Args:
482
+ existing_indexes: List of existing indexes
483
+
484
+ Returns:
485
+ List of redundant indexes
486
+ """
487
+ redundant = []
488
+
489
+ for i, index1 in enumerate(existing_indexes):
490
+ for index2 in existing_indexes[i + 1 :]:
491
+ # Check if index1 is prefix of index2
492
+ if self._is_prefix_index(index1, index2):
493
+ redundant.append(
494
+ {
495
+ "name": index1["name"],
496
+ "reason": f"Redundant with composite index {index2['name']}",
497
+ }
498
+ )
499
+
500
+ # Check for duplicate indexes on same column
501
+ if index1["columns"] == index2["columns"] and index1["name"] != index2["name"]:
502
+ redundant.append(
503
+ {
504
+ "name": index2["name"],
505
+ "reason": f"Duplicate of index {index1['name']}",
506
+ }
507
+ )
508
+
509
+ return redundant
510
+
511
+ def _sort_columns_for_composite(self, columns: List[str], conditions: List[str]) -> List[str]:
512
+ """Sort columns for composite index (equality columns first)."""
513
+ equality_cols = []
514
+ range_cols = []
515
+
516
+ for col in columns:
517
+ # Check if column is used in equality condition
518
+ is_equality = any(f"{col} = " in cond for cond in conditions)
519
+ if is_equality:
520
+ equality_cols.append(col)
521
+ else:
522
+ range_cols.append(col)
523
+
524
+ return equality_cols + range_cols
525
+
526
+ def _is_prefix_index(self, index1: Dict[str, Any], index2: Dict[str, Any]) -> bool:
527
+ """Check if index1 is a prefix of index2."""
528
+ cols1 = index1["columns"]
529
+ cols2 = index2["columns"]
530
+
531
+ if len(cols1) >= len(cols2):
532
+ return False
533
+
534
+ # Check if cols1 is prefix of cols2
535
+ for i, col in enumerate(cols1):
536
+ if col != cols2[i]:
537
+ return False
538
+
539
+ return True
540
+
541
+
542
+ # ============================================================================
543
+ # Class 4: ConnectionPoolManager
544
+ # ============================================================================
545
+
546
+
547
+ class ConnectionPoolManager:
548
+ """
549
+ Connection pool optimization and monitoring.
550
+
551
+ Calculates optimal pool sizes and monitors pool health.
552
+ """
553
+
554
+ def calculate_optimal_pool_size(self, server_config: Dict[str, Any]) -> Dict[str, int]:
555
+ """
556
+ Calculate optimal connection pool size.
557
+
558
+ Formula:
559
+ - min_size = cpu_cores * 2
560
+ - max_size = min(expected_concurrency * 1.2, max_connections * 0.8)
561
+
562
+ Args:
563
+ server_config: Server configuration parameters
564
+
565
+ Returns:
566
+ Optimal pool configuration
567
+ """
568
+ cpu_cores = server_config.get("cpu_cores", 4)
569
+ max_connections = server_config.get("max_connections", 100)
570
+ expected_concurrency = server_config.get("expected_concurrency", 20)
571
+
572
+ # Calculate pool sizes
573
+ min_size = max(5, cpu_cores * 2) # At least 5, typically 2x CPU cores
574
+ max_size = min(int(expected_concurrency * 1.2), int(max_connections * 0.8))
575
+
576
+ # Ensure max > min
577
+ if max_size <= min_size:
578
+ max_size = min_size + 10
579
+
580
+ return {
581
+ "min_size": min_size,
582
+ "max_size": max_size,
583
+ "timeout_seconds": 30,
584
+ "idle_timeout": 600, # 10 minutes
585
+ }
586
+
587
+ def monitor_pool_health(self, pool_stats: Dict[str, Any]) -> Dict[str, Any]:
588
+ """
589
+ Monitor connection pool health.
590
+
591
+ Args:
592
+ pool_stats: Current pool statistics
593
+
594
+ Returns:
595
+ Health assessment with warnings
596
+ """
597
+ active = pool_stats.get("active_connections", 0)
598
+ idle = pool_stats.get("idle_connections", 0)
599
+ max_conns = pool_stats.get("max_connections", 100)
600
+ wait_time = pool_stats.get("wait_time_avg_ms", 0)
601
+
602
+ total_usage = active + idle
603
+ saturation_level = total_usage / max_conns
604
+
605
+ warnings = []
606
+ is_saturated = saturation_level >= 0.90
607
+
608
+ if is_saturated:
609
+ warnings.append(f"Pool saturation at {saturation_level:.1%} - consider increasing max size")
610
+
611
+ if wait_time > 100:
612
+ warnings.append(f"Average wait time {wait_time}ms exceeds threshold - pool may be undersized")
613
+
614
+ if idle / max(total_usage, 1) < 0.10:
615
+ warnings.append("Low idle connection count - pool may need expansion")
616
+
617
+ return {
618
+ "is_saturated": is_saturated,
619
+ "saturation_level": saturation_level,
620
+ "warnings": warnings,
621
+ "health_score": self._calculate_health_score(saturation_level, wait_time),
622
+ }
623
+
624
+ def recommend_adjustments(self, current_config: Dict[str, int], metrics: Dict[str, Any]) -> Dict[str, Any]:
625
+ """
626
+ Recommend pool configuration adjustments.
627
+
628
+ Args:
629
+ current_config: Current pool configuration
630
+ metrics: Performance metrics
631
+
632
+ Returns:
633
+ Adjustment recommendations
634
+ """
635
+ avg_wait = metrics.get("avg_wait_time_ms", 0)
636
+ saturation_events = metrics.get("saturation_events_per_hour", 0)
637
+
638
+ # Recommend increase if high wait times or frequent saturation
639
+ if avg_wait > 200 or saturation_events > 10:
640
+ suggested_max = int(current_config["max_size"] * 1.5)
641
+ return {
642
+ "suggested_max_size": suggested_max,
643
+ "reasoning": "Increase max size due to high wait times and frequent saturation events",
644
+ "priority": "high",
645
+ }
646
+
647
+ # Recommend decrease if very low utilization
648
+ if metrics.get("idle_time_percent", 0) > 80:
649
+ suggested_max = int(current_config["max_size"] * 0.75)
650
+ return {
651
+ "suggested_max_size": suggested_max,
652
+ "reasoning": "Decrease max size due to low utilization (>80% idle time)",
653
+ "priority": "low",
654
+ }
655
+
656
+ return {
657
+ "suggested_max_size": current_config["max_size"],
658
+ "reasoning": "Current configuration is optimal",
659
+ "priority": "none",
660
+ }
661
+
662
+ def _calculate_health_score(self, saturation: float, wait_time: float) -> float:
663
+ """Calculate overall pool health score (0.0 to 1.0)."""
664
+ saturation_score = 1.0 - min(saturation, 1.0)
665
+ wait_score = max(0.0, 1.0 - (wait_time / 500)) # 500ms = 0 score
666
+ return (saturation_score + wait_score) / 2
667
+
668
+
669
+ # ============================================================================
670
+ # Class 5: MigrationPlanner
671
+ # ============================================================================
672
+
673
+
674
+ class MigrationPlanner:
675
+ """
676
+ Database migration planning and safety validation.
677
+
678
+ Generates migration plans with rollback strategies.
679
+ """
680
+
681
+ def generate_migration_plan(self, change_request: Dict[str, Any]) -> Dict[str, Any]:
682
+ """
683
+ Generate migration plan for schema change.
684
+
685
+ Args:
686
+ change_request: Requested schema change
687
+
688
+ Returns:
689
+ Migration plan with steps and rollback
690
+ """
691
+ operation = change_request.get("operation")
692
+
693
+ if operation == "add_column":
694
+ return self._plan_add_column(change_request)
695
+ elif operation == "drop_column":
696
+ return self._plan_drop_column(change_request)
697
+ elif operation == "change_column_type":
698
+ return self._plan_change_type(change_request)
699
+ else:
700
+ return {
701
+ "steps": ["Execute custom migration"],
702
+ "reversible": False,
703
+ "rollback_steps": [],
704
+ "estimated_duration": "unknown",
705
+ }
706
+
707
+ def validate_safety(self, migration: Dict[str, Any]) -> Dict[str, Any]:
708
+ """
709
+ Validate migration safety.
710
+
711
+ Args:
712
+ migration: Migration definition
713
+
714
+ Returns:
715
+ Safety assessment
716
+ """
717
+ operation = migration.get("operation")
718
+ risks = []
719
+ is_safe = True
720
+
721
+ # Check for destructive operations
722
+ if operation == "drop_column":
723
+ if not migration.get("backup", False):
724
+ risks.append("Data loss risk: column will be permanently deleted without backup")
725
+ is_safe = False
726
+
727
+ if operation == "change_column_type":
728
+ risks.append("Type conversion may fail for incompatible data")
729
+ is_safe = False
730
+
731
+ requires_backup = operation in [
732
+ "drop_column",
733
+ "change_column_type",
734
+ "drop_table",
735
+ ]
736
+
737
+ return {
738
+ "is_safe": is_safe,
739
+ "risks": risks if risks else ["No major risks detected"],
740
+ "requires_backup": requires_backup,
741
+ "recommended_actions": self._generate_safety_recommendations(operation),
742
+ }
743
+
744
+ def detect_breaking_changes(self, migration: Dict[str, Any]) -> Dict[str, Any]:
745
+ """
746
+ Detect breaking changes in migration.
747
+
748
+ Args:
749
+ migration: Migration definition
750
+
751
+ Returns:
752
+ Breaking change analysis
753
+ """
754
+ operation = migration.get("operation")
755
+ breaking_changes = []
756
+ has_breaking = False
757
+
758
+ # Type changes are often breaking
759
+ if operation == "change_column_type":
760
+ breaking_changes.append(
761
+ f"Type conversion from {migration['old_type']} to {migration['new_type']} may cause data loss"
762
+ )
763
+ has_breaking = True
764
+
765
+ # Dropping columns is breaking
766
+ if operation == "drop_column":
767
+ breaking_changes.append(f"Dropping column {migration['column']} will break dependent code")
768
+ has_breaking = True
769
+
770
+ # Adding non-nullable columns without default
771
+ if operation == "add_column":
772
+ column_def = migration.get("column", {})
773
+ if not column_def.get("nullable", True) and column_def.get("default") is None:
774
+ breaking_changes.append("Adding non-nullable column without default will fail on existing rows")
775
+ has_breaking = True
776
+
777
+ impact_level = "high" if has_breaking else "low"
778
+
779
+ return {
780
+ "has_breaking_changes": has_breaking,
781
+ "changes": (breaking_changes if breaking_changes else ["No breaking changes detected"]),
782
+ "impact_level": impact_level,
783
+ "mitigation_strategies": self._generate_mitigation_strategies(breaking_changes),
784
+ }
785
+
786
+ def _plan_add_column(self, change_request: Dict[str, Any]) -> Dict[str, Any]:
787
+ """Generate plan for adding a column."""
788
+ table = change_request["table"]
789
+ column_def = change_request["column"]
790
+
791
+ steps = [
792
+ f"Check table {table} exists",
793
+ f"Add column {column_def['name']} {column_def['type']}",
794
+ f"Set default value {column_def.get('default')} for existing rows",
795
+ "Verify column added successfully",
796
+ ]
797
+
798
+ rollback_steps = [f"Drop column {column_def['name']} from {table}"]
799
+
800
+ return {
801
+ "steps": steps,
802
+ "reversible": True,
803
+ "rollback_steps": rollback_steps,
804
+ "estimated_duration": "1-5 minutes",
805
+ }
806
+
807
+ def _plan_drop_column(self, change_request: Dict[str, Any]) -> Dict[str, Any]:
808
+ """Generate plan for dropping a column."""
809
+ table = change_request["table"]
810
+ column = change_request["column"]
811
+
812
+ steps = [
813
+ f"Backup table {table} data",
814
+ f"Drop column {column} from {table}",
815
+ "Verify column removed",
816
+ ]
817
+
818
+ rollback_steps = [f"Restore table {table} from backup"]
819
+
820
+ return {
821
+ "steps": steps,
822
+ "reversible": True,
823
+ "rollback_steps": rollback_steps,
824
+ "estimated_duration": "2-10 minutes",
825
+ }
826
+
827
+ def _plan_change_type(self, change_request: Dict[str, Any]) -> Dict[str, Any]:
828
+ """Generate plan for changing column type."""
829
+ table = change_request["table"]
830
+ column = change_request["column"]
831
+
832
+ steps = [
833
+ f"Backup table {table} data",
834
+ "Create temporary column with new type",
835
+ f"Migrate data from {column} to temporary column",
836
+ f"Drop original {column}",
837
+ f"Rename temporary column to {column}",
838
+ "Verify type change successful",
839
+ ]
840
+
841
+ rollback_steps = [f"Restore table {table} from backup"]
842
+
843
+ return {
844
+ "steps": steps,
845
+ "reversible": True,
846
+ "rollback_steps": rollback_steps,
847
+ "estimated_duration": "5-30 minutes",
848
+ }
849
+
850
+ def _generate_safety_recommendations(self, operation: str) -> List[str]:
851
+ """Generate safety recommendations for operation."""
852
+ return [
853
+ "Create full database backup before migration",
854
+ "Test migration in staging environment first",
855
+ "Plan for rollback in case of failure",
856
+ ]
857
+
858
+ def _generate_mitigation_strategies(self, breaking_changes: List[str]) -> List[str]:
859
+ """Generate mitigation strategies for breaking changes."""
860
+ if not breaking_changes:
861
+ return []
862
+
863
+ return [
864
+ "Deploy code changes before schema migration",
865
+ "Use feature flags to control rollout",
866
+ "Monitor application logs for errors",
867
+ "Prepare rollback procedure",
868
+ ]
869
+
870
+
871
+ # ============================================================================
872
+ # Class 6: TransactionManager
873
+ # ============================================================================
874
+
875
+
876
+ class TransactionManager:
877
+ """
878
+ ACID transaction management and validation.
879
+
880
+ Validates transaction configurations and handles deadlock detection.
881
+ """
882
+
883
+ def validate_acid_compliance(self, transaction_config: Dict[str, Any]) -> Dict[str, bool]:
884
+ """
885
+ Validate ACID property compliance.
886
+
887
+ Args:
888
+ transaction_config: Transaction configuration
889
+
890
+ Returns:
891
+ ACID compliance check results
892
+ """
893
+ # Check for proper isolation level
894
+ isolation_level = transaction_config.get("isolation_level")
895
+ valid_isolation = isolation_level in [
896
+ "READ_UNCOMMITTED",
897
+ "READ_COMMITTED",
898
+ "REPEATABLE_READ",
899
+ "SERIALIZABLE",
900
+ ]
901
+
902
+ # All properties validated (simplified for demonstration)
903
+ return {
904
+ "atomicity": True, # Transactions are all-or-nothing
905
+ "consistency": True, # Database remains in valid state
906
+ "isolation": valid_isolation, # Proper isolation level set
907
+ "durability": True, # Committed transactions persisted
908
+ }
909
+
910
+ def detect_deadlock(self, transactions: List[Dict[str, Any]]) -> Dict[str, Any]:
911
+ """
912
+ Detect circular wait conditions (deadlocks).
913
+
914
+ Args:
915
+ transactions: List of active transactions with lock info
916
+
917
+ Returns:
918
+ Deadlock analysis
919
+ """
920
+ # Build resource-to-transaction mapping
921
+ resource_holders = {}
922
+ for tx in transactions:
923
+ tx_id = tx["id"]
924
+ locks = tx.get("locks", [])
925
+ for resource in locks:
926
+ resource_holders[resource] = tx_id
927
+
928
+ # Build wait-for graph (transaction -> transaction)
929
+ wait_graph = {}
930
+ for tx in transactions:
931
+ tx_id = tx["id"]
932
+ waiting_for_resource = tx.get("waiting_for")
933
+ if waiting_for_resource and waiting_for_resource in resource_holders:
934
+ # This transaction waits for the transaction holding the resource
935
+ wait_graph[tx_id] = resource_holders[waiting_for_resource]
936
+
937
+ # Detect cycles using DFS from each node
938
+ deadlock_detected = False
939
+ involved = set()
940
+ visited_global: set[str] = set()
941
+
942
+ for tx_id in wait_graph:
943
+ if tx_id not in visited_global:
944
+ rec_stack: set[str] = set()
945
+ if self._has_cycle_dfs(tx_id, wait_graph, visited_global, rec_stack):
946
+ deadlock_detected = True
947
+ # Add all nodes in cycle to involved list
948
+ involved.update(rec_stack)
949
+ # Also add the starting node
950
+ involved.add(tx_id)
951
+
952
+ return {
953
+ "deadlock_detected": deadlock_detected,
954
+ "involved_transactions": list(involved),
955
+ "resolution_strategy": ("Abort lowest priority transaction" if deadlock_detected else None),
956
+ }
957
+
958
+ def _has_cycle_dfs(self, node: str, graph: Dict[str, str], visited: set, rec_stack: set) -> bool:
959
+ """Detect cycle using DFS with recursion stack."""
960
+ # Mark current node as visited and in recursion stack
961
+ visited.add(node)
962
+ rec_stack.add(node)
963
+
964
+ # Check successors
965
+ if node in graph:
966
+ successor = graph[node]
967
+ # If successor is in recursion stack, we found a cycle
968
+ if successor in rec_stack:
969
+ return True
970
+ # If successor not visited, recurse
971
+ if successor not in visited:
972
+ if self._has_cycle_dfs(successor, graph, visited, rec_stack):
973
+ return True
974
+
975
+ # Remove from recursion stack before returning
976
+ rec_stack.discard(node)
977
+ return False
978
+
979
+ def generate_retry_plan(self, retry_config: Dict[str, Any]) -> Dict[str, Any]:
980
+ """
981
+ Generate transaction retry plan with exponential backoff.
982
+
983
+ Args:
984
+ retry_config: Retry configuration parameters
985
+
986
+ Returns:
987
+ Retry plan with delays
988
+ """
989
+ max_retries = retry_config.get("max_retries", 3)
990
+ initial_backoff = retry_config.get("initial_backoff_ms", 100)
991
+ multiplier = retry_config.get("backoff_multiplier", 2.0)
992
+ max_backoff = retry_config.get("max_backoff_ms", 1000)
993
+
994
+ delays = []
995
+ current_delay = initial_backoff
996
+
997
+ for _ in range(max_retries):
998
+ delays.append(min(current_delay, max_backoff))
999
+ current_delay *= multiplier
1000
+
1001
+ return {
1002
+ "retry_delays": delays,
1003
+ "total_max_time_ms": sum(delays),
1004
+ "strategy": "exponential_backoff",
1005
+ }
1006
+
1007
+
1008
+ # ============================================================================
1009
+ # Class 7: PerformanceMonitor
1010
+ # ============================================================================
1011
+
1012
+
1013
+ class PerformanceMonitor:
1014
+ """
1015
+ Database performance monitoring and metrics.
1016
+
1017
+ Tracks query performance, connection usage, and system health.
1018
+ """
1019
+
1020
+ def analyze_query_performance(self, query_stats: Dict[str, Any]) -> Dict[str, Any]:
1021
+ """
1022
+ Analyze query performance metrics.
1023
+
1024
+ Args:
1025
+ query_stats: Query execution statistics
1026
+
1027
+ Returns:
1028
+ Performance analysis
1029
+ """
1030
+ avg_time = query_stats.get("avg_execution_time_ms", 0)
1031
+ max_time = query_stats.get("max_execution_time_ms", 0)
1032
+ query_stats.get("call_count", 0)
1033
+
1034
+ performance_rating = "excellent"
1035
+ if avg_time > 1000:
1036
+ performance_rating = "poor"
1037
+ elif avg_time > 500:
1038
+ performance_rating = "needs_improvement"
1039
+ elif avg_time > 100:
1040
+ performance_rating = "good"
1041
+
1042
+ recommendations = []
1043
+ if avg_time > 500:
1044
+ recommendations.append("Consider adding indexes to improve query speed")
1045
+ if max_time > 5000:
1046
+ recommendations.append("Investigate slow queries exceeding 5 seconds")
1047
+
1048
+ return {
1049
+ "performance_rating": performance_rating,
1050
+ "avg_time_ms": avg_time,
1051
+ "recommendations": recommendations,
1052
+ "optimization_priority": "high" if avg_time > 1000 else "low",
1053
+ }
1054
+
1055
+ def monitor_connection_usage(self, connection_metrics: Dict[str, Any]) -> Dict[str, Any]:
1056
+ """
1057
+ Monitor database connection usage.
1058
+
1059
+ Args:
1060
+ connection_metrics: Connection usage statistics
1061
+
1062
+ Returns:
1063
+ Connection health assessment
1064
+ """
1065
+ active = connection_metrics.get("active_connections", 0)
1066
+ max_conns = connection_metrics.get("max_connections", 100)
1067
+ failed_attempts = connection_metrics.get("failed_connection_attempts", 0)
1068
+
1069
+ usage_ratio = active / max(max_conns, 1)
1070
+
1071
+ health = "healthy"
1072
+ if usage_ratio > 0.90:
1073
+ health = "critical"
1074
+ elif usage_ratio > 0.75:
1075
+ health = "warning"
1076
+
1077
+ return {
1078
+ "health_status": health,
1079
+ "usage_ratio": usage_ratio,
1080
+ "failed_attempts": failed_attempts,
1081
+ "recommendations": self._generate_connection_recommendations(usage_ratio, failed_attempts),
1082
+ }
1083
+
1084
+ def _generate_connection_recommendations(self, usage_ratio: float, failed_attempts: int) -> List[str]:
1085
+ """Generate connection usage recommendations."""
1086
+ recommendations = []
1087
+
1088
+ if usage_ratio > 0.80:
1089
+ recommendations.append("Increase connection pool size")
1090
+
1091
+ if failed_attempts > 10:
1092
+ recommendations.append("Investigate connection failures and timeout settings")
1093
+
1094
+ return recommendations
1095
+
1096
+
1097
+ # ============================================================================
1098
+ # Module Exports
1099
+ # ============================================================================
1100
+
1101
+ __all__ = [
1102
+ "SchemaNormalizer",
1103
+ "DatabaseSelector",
1104
+ "IndexingOptimizer",
1105
+ "ConnectionPoolManager",
1106
+ "MigrationPlanner",
1107
+ "TransactionManager",
1108
+ "PerformanceMonitor",
1109
+ "ValidationResult",
1110
+ "DatabaseRecommendation",
1111
+ "IndexRecommendation",
1112
+ "PoolConfiguration",
1113
+ "MigrationPlan",
1114
+ "ACIDCompliance",
1115
+ ]