moai-adk 0.8.0__py3-none-any.whl → 0.34.0__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.
Files changed (654) 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 +118 -48
  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 +1978 -149
  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 +683 -0
  21. moai_adk/cli/worktree/exceptions.py +89 -0
  22. moai_adk/cli/worktree/manager.py +493 -0
  23. moai_adk/cli/worktree/models.py +65 -0
  24. moai_adk/cli/worktree/registry.py +422 -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 +148 -17
  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 +305 -0
  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 +572 -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 +189 -22
  84. moai_adk/core/project/initializer.py +218 -27
  85. moai_adk/core/project/phase_executor.py +416 -44
  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 +310 -0
  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 +376 -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 +322 -0
  134. moai_adk/statusline/metrics_tracker.py +78 -0
  135. moai_adk/statusline/renderer.py +343 -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 +670 -0
  139. moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
  140. moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
  141. moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
  142. moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
  143. moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
  144. moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
  145. moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
  146. moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
  147. moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
  148. moai_adk/templates/.claude/agents/moai/expert-security.md +509 -0
  149. moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
  150. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
  151. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
  152. moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
  153. moai_adk/templates/.claude/agents/moai/manager-git.md +1020 -0
  154. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  155. moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
  156. moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
  157. moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
  158. moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
  159. moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
  160. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
  161. moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
  162. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
  163. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
  164. moai_adk/templates/.claude/commands/moai/0-project.md +1384 -0
  165. moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
  166. moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
  167. moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
  168. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  169. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  170. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  171. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  172. moai_adk/templates/.claude/hooks/{alfred/core → moai/lib}/checkpoint.py +10 -37
  173. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  179. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  180. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  181. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  182. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  183. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  184. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  185. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  186. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1075 -0
  187. moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
  188. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  189. moai_adk/templates/.claude/settings.json +78 -50
  190. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +438 -0
  191. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  192. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
  193. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
  194. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  195. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  196. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  197. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  198. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  199. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
  200. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +313 -283
  201. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +610 -1525
  202. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +423 -619
  203. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +295 -95
  204. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +817 -16
  205. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  206. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  207. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  208. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  209. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +532 -17
  210. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +470 -97
  211. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +955 -16
  212. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +651 -18
  213. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
  214. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  215. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  216. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  217. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
  218. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  219. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  220. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  221. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
  222. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  223. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  224. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  225. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  226. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  227. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  228. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  229. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  230. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
  231. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  232. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  233. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  254. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  257. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  260. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  263. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  266. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  270. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  272. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  273. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  274. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  275. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  276. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  277. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  278. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  279. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  280. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +618 -93
  281. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +446 -91
  282. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
  283. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
  284. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  285. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  286. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +346 -94
  287. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +906 -16
  288. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +721 -15
  289. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +352 -91
  290. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +851 -16
  291. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +278 -18
  292. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +344 -86
  293. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +993 -16
  294. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +549 -18
  295. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +617 -96
  296. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +364 -314
  297. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +849 -496
  298. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +731 -243
  299. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +545 -89
  300. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +650 -87
  301. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +341 -93
  302. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +646 -16
  303. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +491 -18
  304. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +463 -89
  305. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +620 -16
  306. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +410 -17
  307. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +486 -112
  308. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +905 -16
  309. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +659 -17
  310. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +333 -92
  311. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1076 -16
  312. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +718 -21
  313. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
  314. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  315. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  316. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  317. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  318. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
  319. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  320. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  321. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  322. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  323. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  324. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  325. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  326. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  327. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  328. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  329. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  330. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  331. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
  332. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  333. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  334. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  335. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  336. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  337. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  338. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
  339. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
  340. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
  341. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
  342. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +290 -0
  343. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
  344. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
  345. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
  346. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
  347. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
  348. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
  349. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
  350. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
  351. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
  352. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  353. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  354. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  355. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  356. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  357. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
  358. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  359. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  360. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  361. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  362. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  363. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
  364. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  365. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  366. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  367. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  368. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  369. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  370. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  371. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  372. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  373. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  374. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  375. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  376. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  377. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1462 -0
  378. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  379. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  380. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  381. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  382. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  383. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  384. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  385. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  386. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  387. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  388. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
  389. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  390. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  391. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  409. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  417. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
  418. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  419. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  420. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  421. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  422. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  423. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  424. moai_adk/templates/.git-hooks/pre-commit +128 -0
  425. moai_adk/templates/.git-hooks/pre-push +365 -0
  426. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  427. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  428. moai_adk/templates/.github/workflows/spec-issue-sync.yml +206 -36
  429. moai_adk/templates/.gitignore +194 -13
  430. moai_adk/templates/.mcp.json +31 -0
  431. moai_adk/templates/.moai/config/config.yaml +58 -0
  432. moai_adk/templates/.moai/config/questions/_schema.yaml +151 -0
  433. moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
  434. moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
  435. moai_adk/templates/.moai/config/questions/tab2-project.yaml +81 -0
  436. moai_adk/templates/.moai/config/questions/tab3-git.yaml +634 -0
  437. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +170 -0
  438. moai_adk/templates/.moai/config/questions/tab5-system.yaml +87 -0
  439. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  440. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  441. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  442. moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
  443. moai_adk/templates/.moai/config/sections/system.yaml +14 -0
  444. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  445. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  446. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  447. moai_adk/templates/CLAUDE.md +571 -244
  448. moai_adk/utils/__init__.py +24 -2
  449. moai_adk/utils/banner.py +9 -13
  450. moai_adk/utils/common.py +294 -0
  451. moai_adk/utils/link_validator.py +241 -0
  452. moai_adk/utils/logger.py +4 -9
  453. moai_adk/utils/safe_file_reader.py +206 -0
  454. moai_adk/utils/timeout.py +160 -0
  455. moai_adk/utils/toon_utils.py +256 -0
  456. moai_adk/version.py +22 -0
  457. moai_adk-0.34.0.dist-info/METADATA +2999 -0
  458. moai_adk-0.34.0.dist-info/RECORD +463 -0
  459. {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/WHEEL +1 -1
  460. {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/entry_points.txt +1 -0
  461. moai_adk/cli/commands/backup.py +0 -80
  462. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -293
  463. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -196
  464. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -207
  465. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -375
  466. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -343
  467. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -246
  468. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -320
  469. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -837
  470. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -272
  471. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -265
  472. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -311
  473. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -352
  474. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1184
  475. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -665
  476. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -488
  477. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -623
  478. moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
  479. moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
  480. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
  481. moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -170
  482. moai_adk/templates/.claude/hooks/alfred/core/context.py +0 -67
  483. moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -416
  484. moai_adk/templates/.claude/hooks/alfred/core/tags.py +0 -198
  485. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -21
  486. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
  487. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -161
  488. moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -90
  489. moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -42
  490. moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
  491. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
  492. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
  493. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
  494. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  495. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  496. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  497. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  498. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  499. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  500. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  501. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  502. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  503. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  504. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  505. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  506. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  507. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  508. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  509. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  510. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  511. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  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-cc-agents/SKILL.md +0 -269
  516. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  517. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  518. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  519. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  520. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  521. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  522. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  523. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  524. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  525. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  526. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  527. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  528. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  529. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  530. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  531. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  532. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  533. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  534. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  535. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  536. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  537. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  538. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  539. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  540. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  541. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  542. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  543. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  544. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  545. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  546. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  547. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  548. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  549. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  550. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  551. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  552. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  553. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  554. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  555. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  556. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  557. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  558. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  559. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  560. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  561. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  562. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  563. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  564. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  565. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  566. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -113
  567. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  568. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  569. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  570. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  571. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  572. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  573. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  574. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  575. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  576. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  577. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  578. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  579. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  580. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  581. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  582. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  583. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  584. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  585. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  586. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  587. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
  588. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
  589. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
  590. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
  591. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  592. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  593. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  594. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
  595. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
  596. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
  597. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
  598. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
  599. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
  600. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
  601. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
  602. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
  603. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  604. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  605. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  606. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  607. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  608. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  609. moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +0 -482
  610. moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -278
  611. moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  612. moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -477
  613. moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  614. moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  615. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  616. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  617. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -271
  618. moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  619. moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -583
  620. moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -526
  621. moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -465
  622. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -328
  623. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -312
  624. moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  625. moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -285
  626. moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -278
  627. moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -303
  628. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
  629. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
  630. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -161
  631. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
  632. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
  633. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
  634. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  635. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -256
  636. moai_adk/templates/.moai/config.json +0 -96
  637. moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +0 -208
  638. moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +0 -369
  639. moai_adk/templates/.moai/memory/CLAUDE-RULES.md +0 -539
  640. moai_adk/templates/.moai/memory/CONFIG-SCHEMA.md +0 -444
  641. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
  642. moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
  643. moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +0 -218
  644. moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
  645. moai_adk/templates/.moai/memory/config-schema.md +0 -444
  646. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  647. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  648. moai_adk/templates/.moai/project/product.md +0 -161
  649. moai_adk/templates/.moai/project/structure.md +0 -156
  650. moai_adk/templates/.moai/project/tech.md +0 -227
  651. moai_adk/templates/__init__.py +0 -2
  652. moai_adk-0.8.0.dist-info/METADATA +0 -1722
  653. moai_adk-0.8.0.dist-info/RECORD +0 -282
  654. {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.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
+ ]