moai-adk 0.25.4__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 (378) hide show
  1. moai_adk/__init__.py +2 -5
  2. moai_adk/__main__.py +114 -82
  3. moai_adk/cli/__init__.py +6 -1
  4. moai_adk/cli/commands/__init__.py +1 -3
  5. moai_adk/cli/commands/analyze.py +5 -16
  6. moai_adk/cli/commands/doctor.py +6 -18
  7. moai_adk/cli/commands/init.py +56 -125
  8. moai_adk/cli/commands/language.py +14 -35
  9. moai_adk/cli/commands/status.py +9 -15
  10. moai_adk/cli/commands/update.py +1555 -190
  11. moai_adk/cli/prompts/init_prompts.py +112 -56
  12. moai_adk/cli/spec_status.py +263 -0
  13. moai_adk/cli/ui/__init__.py +44 -0
  14. moai_adk/cli/ui/progress.py +422 -0
  15. moai_adk/cli/ui/prompts.py +389 -0
  16. moai_adk/cli/ui/theme.py +129 -0
  17. moai_adk/cli/worktree/__init__.py +27 -0
  18. moai_adk/cli/worktree/__main__.py +31 -0
  19. moai_adk/cli/worktree/cli.py +672 -0
  20. moai_adk/cli/worktree/exceptions.py +89 -0
  21. moai_adk/cli/worktree/manager.py +490 -0
  22. moai_adk/cli/worktree/models.py +65 -0
  23. moai_adk/cli/worktree/registry.py +128 -0
  24. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  25. moai_adk/core/analysis/session_analyzer.py +17 -56
  26. moai_adk/core/claude_integration.py +26 -54
  27. moai_adk/core/command_helpers.py +10 -10
  28. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  29. moai_adk/core/config/auto_spec_config.py +5 -11
  30. moai_adk/core/config/migration.py +19 -9
  31. moai_adk/core/config/unified.py +436 -0
  32. moai_adk/core/context_manager.py +6 -12
  33. moai_adk/core/enterprise_features.py +1404 -0
  34. moai_adk/core/error_recovery_system.py +725 -112
  35. moai_adk/core/event_driven_hook_system.py +1371 -0
  36. moai_adk/core/git/__init__.py +8 -0
  37. moai_adk/core/git/branch_manager.py +3 -11
  38. moai_adk/core/git/checkpoint.py +1 -3
  39. moai_adk/core/git/conflict_detector.py +413 -0
  40. moai_adk/core/git/manager.py +91 -1
  41. moai_adk/core/hooks/post_tool_auto_spec_completion.py +56 -80
  42. moai_adk/core/input_validation_middleware.py +1006 -0
  43. moai_adk/core/integration/engine.py +6 -18
  44. moai_adk/core/integration/integration_tester.py +10 -9
  45. moai_adk/core/integration/utils.py +1 -1
  46. moai_adk/core/issue_creator.py +10 -28
  47. moai_adk/core/jit_context_loader.py +956 -0
  48. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  49. moai_adk/core/language_config_resolver.py +485 -0
  50. moai_adk/core/language_validator.py +28 -41
  51. moai_adk/core/mcp/setup.py +15 -12
  52. moai_adk/core/merge/__init__.py +9 -0
  53. moai_adk/core/merge/analyzer.py +481 -0
  54. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  55. moai_adk/core/migration/backup_manager.py +78 -9
  56. moai_adk/core/migration/custom_element_scanner.py +358 -0
  57. moai_adk/core/migration/file_migrator.py +8 -17
  58. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  59. moai_adk/core/migration/selective_restorer.py +470 -0
  60. moai_adk/core/migration/template_utils.py +74 -0
  61. moai_adk/core/migration/user_selection_ui.py +338 -0
  62. moai_adk/core/migration/version_detector.py +6 -10
  63. moai_adk/core/migration/version_migrator.py +3 -3
  64. moai_adk/core/performance/cache_system.py +8 -10
  65. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  66. moai_adk/core/project/checker.py +2 -4
  67. moai_adk/core/project/detector.py +1 -3
  68. moai_adk/core/project/initializer.py +135 -23
  69. moai_adk/core/project/phase_executor.py +54 -81
  70. moai_adk/core/project/validator.py +6 -12
  71. moai_adk/core/quality/trust_checker.py +9 -27
  72. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  73. moai_adk/core/robust_json_parser.py +611 -0
  74. moai_adk/core/rollback_manager.py +73 -148
  75. moai_adk/core/session_manager.py +10 -26
  76. moai_adk/core/skill_loading_system.py +579 -0
  77. moai_adk/core/spec/confidence_scoring.py +31 -100
  78. moai_adk/core/spec/ears_template_engine.py +351 -286
  79. moai_adk/core/spec/quality_validator.py +35 -69
  80. moai_adk/core/spec_status_manager.py +64 -74
  81. moai_adk/core/template/backup.py +45 -20
  82. moai_adk/core/template/config.py +112 -39
  83. moai_adk/core/template/merger.py +11 -19
  84. moai_adk/core/template/processor.py +253 -149
  85. moai_adk/core/template_engine.py +73 -40
  86. moai_adk/core/template_variable_synchronizer.py +417 -0
  87. moai_adk/core/unified_permission_manager.py +745 -0
  88. moai_adk/core/user_behavior_analytics.py +851 -0
  89. moai_adk/core/version_sync.py +429 -0
  90. moai_adk/foundation/__init__.py +56 -0
  91. moai_adk/foundation/backend.py +1027 -0
  92. moai_adk/foundation/database.py +1115 -0
  93. moai_adk/foundation/devops.py +1585 -0
  94. moai_adk/foundation/ears.py +431 -0
  95. moai_adk/foundation/frontend.py +870 -0
  96. moai_adk/foundation/git/commit_templates.py +4 -12
  97. moai_adk/foundation/git.py +376 -0
  98. moai_adk/foundation/langs.py +484 -0
  99. moai_adk/foundation/ml_ops.py +1162 -0
  100. moai_adk/foundation/testing.py +1524 -0
  101. moai_adk/foundation/trust/trust_principles.py +23 -72
  102. moai_adk/foundation/trust/validation_checklist.py +57 -162
  103. moai_adk/project/__init__.py +0 -0
  104. moai_adk/project/configuration.py +1084 -0
  105. moai_adk/project/documentation.py +566 -0
  106. moai_adk/project/schema.py +447 -0
  107. moai_adk/statusline/alfred_detector.py +1 -3
  108. moai_adk/statusline/config.py +13 -4
  109. moai_adk/statusline/enhanced_output_style_detector.py +23 -15
  110. moai_adk/statusline/main.py +51 -15
  111. moai_adk/statusline/renderer.py +104 -48
  112. moai_adk/statusline/update_checker.py +3 -9
  113. moai_adk/statusline/version_reader.py +140 -46
  114. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
  115. moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
  116. moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
  117. moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
  118. moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
  119. moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
  120. moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
  121. moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
  122. moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
  123. moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
  124. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
  125. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
  126. moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
  127. moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
  128. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  129. moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
  130. moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
  131. moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
  132. moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
  133. moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
  134. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
  135. moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
  136. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
  137. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
  138. moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
  139. moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
  140. moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
  141. moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
  142. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  143. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  144. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  145. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  146. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  147. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  148. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  149. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  150. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  151. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  152. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  153. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  154. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  155. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  156. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  157. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  158. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  159. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  160. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
  161. moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
  162. moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
  163. moai_adk/templates/.claude/settings.json +172 -0
  164. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
  165. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  166. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  167. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  168. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  169. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  170. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +319 -0
  171. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +320 -0
  172. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  173. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  174. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  175. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  176. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +496 -0
  177. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
  178. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  179. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  180. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  181. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
  182. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  183. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  184. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  185. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
  186. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  187. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  188. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  189. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  190. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  191. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  192. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
  193. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  194. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  195. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  196. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  197. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  198. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  199. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  200. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  201. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  202. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  203. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  204. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  205. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  206. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  207. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
  208. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
  209. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  210. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
  211. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  212. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  213. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  214. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  215. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  216. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  217. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  218. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  219. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
  220. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  221. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  222. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  223. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  224. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  225. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  226. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  227. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  228. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  229. moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
  230. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
  231. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
  232. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
  233. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
  234. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
  235. moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
  236. moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
  237. moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
  238. moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
  239. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
  240. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  241. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  242. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  243. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  244. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
  245. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  246. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  247. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  248. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  249. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  250. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  251. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  252. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  253. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  254. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  255. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
  256. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  257. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  258. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  259. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  260. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  261. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  262. moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
  263. moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
  264. moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
  265. moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
  266. moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
  267. moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
  268. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
  269. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  270. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  271. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  272. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
  273. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  274. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  275. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  276. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  277. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  278. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
  279. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  280. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  281. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  282. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  283. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  284. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  285. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  286. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  287. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  288. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  289. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  290. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
  291. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  292. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  293. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  294. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
  295. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  296. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  297. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  298. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  299. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  300. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  301. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
  302. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  303. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  304. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  305. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  306. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
  307. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  308. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  309. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  310. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  311. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  312. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  313. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  314. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  315. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  316. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  317. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  318. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  319. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  320. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  321. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  322. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  323. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
  324. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  325. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  326. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  327. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  328. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  329. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  330. moai_adk/templates/.git-hooks/pre-commit +103 -41
  331. moai_adk/templates/.git-hooks/pre-push +116 -21
  332. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  333. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  334. moai_adk/templates/.gitignore +184 -44
  335. moai_adk/templates/.mcp.json +7 -9
  336. moai_adk/templates/.moai/cache/personalization.json +10 -0
  337. moai_adk/templates/.moai/config/config.yaml +344 -0
  338. moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
  339. moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
  340. moai_adk/templates/.moai/config/presets/team.yaml +33 -0
  341. moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
  342. moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
  343. moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
  344. moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
  345. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
  346. moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
  347. moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
  348. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  349. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  350. moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
  351. moai_adk/templates/.moai/config/sections/system.yaml +14 -0
  352. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  353. moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
  354. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  355. moai_adk/templates/CLAUDE.md +382 -501
  356. moai_adk/utils/__init__.py +24 -1
  357. moai_adk/utils/banner.py +7 -10
  358. moai_adk/utils/common.py +16 -30
  359. moai_adk/utils/link_validator.py +4 -12
  360. moai_adk/utils/safe_file_reader.py +2 -6
  361. moai_adk/utils/timeout.py +160 -0
  362. moai_adk/utils/toon_utils.py +256 -0
  363. moai_adk/version.py +22 -0
  364. moai_adk-0.32.8.dist-info/METADATA +2478 -0
  365. moai_adk-0.32.8.dist-info/RECORD +396 -0
  366. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
  367. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
  368. moai_adk/cli/commands/backup.py +0 -82
  369. moai_adk/cli/commands/improve_user_experience.py +0 -348
  370. moai_adk/cli/commands/migrate.py +0 -158
  371. moai_adk/cli/commands/validate_links.py +0 -118
  372. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -413
  373. moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
  374. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
  375. moai_adk/utils/user_experience.py +0 -531
  376. moai_adk-0.25.4.dist-info/METADATA +0 -2279
  377. moai_adk-0.25.4.dist-info/RECORD +0 -112
  378. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,484 @@
1
+ """
2
+ Programming Language Ecosystem Implementation (moai-foundation-langs).
3
+
4
+ Provides:
5
+ - LanguageVersionManager: Language version detection and validation
6
+ - FrameworkRecommender: Framework suggestions by language
7
+ - PatternAnalyzer: Code pattern recognition and analysis
8
+ - AntiPatternDetector: Anti-pattern detection
9
+ - EcosystemAnalyzer: Language ecosystem analysis
10
+ - PerformanceOptimizer: Performance optimization tips
11
+
12
+ Reference: moai-foundation-langs for modern language patterns and best practices
13
+ """
14
+
15
+ import re
16
+ from dataclasses import dataclass, field
17
+ from typing import List, Optional
18
+
19
+
20
+ @dataclass
21
+ class LanguageInfo:
22
+ """Language information and ecosystem details."""
23
+
24
+ name: str
25
+ version: str
26
+ is_supported: bool = True
27
+ tier: Optional[str] = None
28
+ frameworks: List[str] = field(default_factory=list)
29
+ features: List[str] = field(default_factory=list)
30
+
31
+ def __contains__(self, key: str) -> bool:
32
+ """Support 'in' operator for feature checking."""
33
+ return key in self.features
34
+
35
+
36
+ @dataclass
37
+ class Pattern:
38
+ """Code pattern with recommendations."""
39
+
40
+ pattern_type: str # "best_practice" or "anti_pattern"
41
+ language: str
42
+ description: str
43
+ example: str
44
+ severity: Optional[str] = None # "low", "medium", "high", "critical"
45
+ alternative: Optional[str] = None
46
+ priority: int = 5
47
+
48
+
49
+ @dataclass
50
+ class TestingStrategy:
51
+ """Testing strategy recommendation."""
52
+
53
+ framework: str
54
+ features: str
55
+ language: str
56
+ examples: List[str] = field(default_factory=list)
57
+
58
+
59
+ class LanguageVersionManager:
60
+ """Manages language versions and compatibility."""
61
+
62
+ SUPPORTED_LANGUAGES = {
63
+ "Python": {
64
+ "min_version": "3.10",
65
+ "current": "3.13",
66
+ "lts": "3.12",
67
+ "tier": "Tier 1",
68
+ "deprecated_versions": ["2.7", "3.9"],
69
+ },
70
+ "TypeScript": {
71
+ "min_version": "4.5",
72
+ "current": "5.9",
73
+ "tier": "Tier 1",
74
+ "deprecated_versions": [],
75
+ },
76
+ "Go": {
77
+ "min_version": "1.20",
78
+ "current": "1.23",
79
+ "tier": "Tier 1",
80
+ "deprecated_versions": ["1.19"],
81
+ },
82
+ "Rust": {
83
+ "min_version": "1.70",
84
+ "current": "1.77",
85
+ "tier": "Tier 1",
86
+ "deprecated_versions": [],
87
+ },
88
+ "Java": {
89
+ "min_version": "11",
90
+ "current": "23",
91
+ "lts": "21",
92
+ "tier": "Tier 2",
93
+ "deprecated_versions": ["8", "9", "10"],
94
+ },
95
+ "C#": {
96
+ "min_version": "11",
97
+ "current": "12",
98
+ "tier": "Tier 2",
99
+ "deprecated_versions": ["7", "8"],
100
+ },
101
+ "PHP": {
102
+ "min_version": "8.2",
103
+ "current": "8.4",
104
+ "tier": "Tier 2",
105
+ "deprecated_versions": ["5.6", "7.0", "7.1", "7.2"],
106
+ },
107
+ "JavaScript": {
108
+ "min_version": "ES2020",
109
+ "current": "ES2024",
110
+ "tier": "Tier 2",
111
+ "deprecated_versions": ["ES5"],
112
+ },
113
+ "R": {
114
+ "min_version": "4.2",
115
+ "current": "4.4",
116
+ "tier": "Tier 3",
117
+ "deprecated_versions": ["3.x"],
118
+ },
119
+ }
120
+
121
+ def detect(self, language_version_str: str) -> LanguageInfo:
122
+ """Detect language and version from string."""
123
+ match = re.match(r"(\w+(?:\s+\w+)?)\s+([\d.]+|ES\d{4}|\w+\d+)", language_version_str)
124
+ if not match:
125
+ return LanguageInfo(name="Unknown", version="unknown", is_supported=False)
126
+
127
+ lang_name = match.group(1).strip()
128
+ version = match.group(2)
129
+
130
+ if lang_name not in self.SUPPORTED_LANGUAGES:
131
+ return LanguageInfo(name=lang_name, version=version, is_supported=False)
132
+
133
+ lang_info = self.SUPPORTED_LANGUAGES[lang_name]
134
+ is_supported = self._check_version_support(lang_name, version)
135
+
136
+ tier_value = lang_info.get("tier")
137
+ tier_str: Optional[str] = str(tier_value) if tier_value is not None else None
138
+
139
+ return LanguageInfo(
140
+ name=lang_name,
141
+ version=version,
142
+ is_supported=is_supported,
143
+ tier=tier_str,
144
+ frameworks=[],
145
+ features=[],
146
+ )
147
+
148
+ def _check_version_support(self, language: str, version: str) -> bool:
149
+ """Check if version is supported."""
150
+ lang_info = self.SUPPORTED_LANGUAGES.get(language, {})
151
+ deprecated = lang_info.get("deprecated_versions", [])
152
+
153
+ # Check for deprecated versions
154
+ for dep_version in deprecated:
155
+ if version.startswith(dep_version):
156
+ return False
157
+
158
+ return True
159
+
160
+ def get_tier(self, language: str) -> Optional[str]:
161
+ """Get language tier (1, 2, or 3)."""
162
+ tier_value = self.SUPPORTED_LANGUAGES.get(language, {}).get("tier")
163
+ return str(tier_value) if tier_value is not None else None
164
+
165
+
166
+ class FrameworkRecommender:
167
+ """Recommends frameworks for each programming language."""
168
+
169
+ FRAMEWORKS = {
170
+ "Python": {
171
+ "apis": ["FastAPI", "Django REST Framework"],
172
+ "web": ["Django 5.0", "Starlette"],
173
+ "async": ["asyncio", "Trio"],
174
+ "data": ["Pydantic", "SQLAlchemy 2.0"],
175
+ "testing": ["pytest", "pytest-asyncio"],
176
+ },
177
+ "TypeScript": {
178
+ "frontend": ["Next.js 16", "React 19", "Vue 3.5"],
179
+ "backend": ["tRPC", "NestJS", "Fastify"],
180
+ "data": ["Zod", "Prisma", "TypeORM"],
181
+ "testing": ["Vitest", "Jest"],
182
+ },
183
+ "Go": {
184
+ "web": ["Fiber v3", "Echo", "Chi"],
185
+ "data": ["GORM", "sqlc", "ent"],
186
+ "async": ["goroutines", "channels"],
187
+ "testing": ["testify", "go-testify"],
188
+ },
189
+ "Rust": {
190
+ "web": ["Tokio", "Axum", "Actix-web"],
191
+ "data": ["Sqlx", "Diesel", "Sea-ORM"],
192
+ "testing": ["cargo test", "criterion"],
193
+ },
194
+ "Java": {
195
+ "web": ["Spring Boot 3", "Micronaut", "Quarkus"],
196
+ "testing": ["JUnit 5", "Mockito"],
197
+ },
198
+ }
199
+
200
+ def get_frameworks_for(self, language: str) -> List[str]:
201
+ """Get framework recommendations for a language."""
202
+ lang_frameworks = self.FRAMEWORKS.get(language, {})
203
+ all_frameworks = []
204
+ for frameworks in lang_frameworks.values():
205
+ all_frameworks.extend(frameworks)
206
+ return all_frameworks
207
+
208
+ def get_frameworks_by_category(self, language: str, category: str) -> List[str]:
209
+ """Get frameworks for specific category."""
210
+ return self.FRAMEWORKS.get(language, {}).get(category, [])
211
+
212
+
213
+ class PatternAnalyzer:
214
+ """Analyzes code patterns and identifies best practices."""
215
+
216
+ BEST_PRACTICES = {
217
+ "async": {
218
+ "languages": ["Python", "JavaScript", "TypeScript", "C#"],
219
+ "description": "Async/await pattern for non-blocking I/O",
220
+ },
221
+ "type_hints": {
222
+ "languages": ["Python", "TypeScript", "Go", "Rust", "Java"],
223
+ "description": "Type hints for better code clarity and safety",
224
+ },
225
+ "error_handling": {
226
+ "languages": ["Go", "Rust", "Python"],
227
+ "description": "Proper error handling with Result/Option types",
228
+ },
229
+ "dependency_injection": {
230
+ "languages": ["Python", "Java", "C#"],
231
+ "description": "Dependency injection for loose coupling",
232
+ },
233
+ }
234
+
235
+ def identify_pattern(self, code: str, language: Optional[str] = None) -> Optional[Pattern]:
236
+ """Identify pattern type and return Pattern object."""
237
+ code_lower = code.lower()
238
+
239
+ # Async/await pattern
240
+ if any(kw in code_lower for kw in ["async ", "await ", "async def", "async fn"]):
241
+ return Pattern(
242
+ pattern_type="best_practice",
243
+ language=language or "Multi-language",
244
+ description="Async/await pattern for non-blocking I/O",
245
+ example=code,
246
+ priority=9,
247
+ )
248
+
249
+ # Type hints (Python, TypeScript)
250
+ if (":" in code and "->" in code) or ("type " in code_lower) or ("interface " in code_lower):
251
+ return Pattern(
252
+ pattern_type="best_practice",
253
+ language=language or "Python/TypeScript",
254
+ description="Type hints/annotations for type safety",
255
+ example=code,
256
+ priority=8,
257
+ )
258
+
259
+ # Parameterized queries
260
+ if "?" in code or "param" in code_lower or "prepare" in code_lower:
261
+ return Pattern(
262
+ pattern_type="best_practice",
263
+ language=language or "Multi-language",
264
+ description="Parameterized queries for SQL safety",
265
+ example=code,
266
+ priority=10,
267
+ )
268
+
269
+ return None
270
+
271
+
272
+ class AntiPatternDetector:
273
+ """Detects anti-patterns and code smells."""
274
+
275
+ ANTI_PATTERNS = {
276
+ "callback_hell": {
277
+ "keywords": ["callback", "=>"],
278
+ "language": "JavaScript",
279
+ "severity": "high",
280
+ "alternative": "Use async/await or Promises",
281
+ },
282
+ "global_state": {
283
+ "keywords": ["GLOBAL", "global "],
284
+ "language": "Python/Go",
285
+ "severity": "medium",
286
+ "alternative": "Use dependency injection or functional patterns",
287
+ },
288
+ "sql_injection": {
289
+ "keywords": ["f'", 'f"', "+ str(", "+ var"],
290
+ "language": "Python/JavaScript",
291
+ "severity": "critical",
292
+ "alternative": "Use parameterized queries or ORM",
293
+ },
294
+ "silent_failure": {
295
+ "keywords": ["pass", "except:", "try"],
296
+ "language": "Python",
297
+ "severity": "high",
298
+ "alternative": "Use proper error handling",
299
+ },
300
+ }
301
+
302
+ def detect_anti_pattern(self, code: str, language: Optional[str] = None) -> Optional[Pattern]:
303
+ """Detect anti-pattern and return Pattern object."""
304
+ code_lower = code.lower()
305
+
306
+ # Callback hell detection
307
+ if "callback" in code_lower and ("=>" in code or "function" in code_lower):
308
+ return Pattern(
309
+ pattern_type="anti_pattern",
310
+ language=language or "JavaScript",
311
+ description="Callback hell - deeply nested callbacks",
312
+ example=code,
313
+ severity="high",
314
+ alternative="Use async/await or Promises",
315
+ priority=9,
316
+ )
317
+
318
+ # Global state detection
319
+ if "global_state" in code_lower or "global " in code_lower:
320
+ return Pattern(
321
+ pattern_type="anti_pattern",
322
+ language=language or "Python",
323
+ description="Mutable global state",
324
+ example=code,
325
+ severity="medium",
326
+ alternative="Use dependency injection or functional patterns",
327
+ priority=7,
328
+ )
329
+
330
+ # SQL injection detection
331
+ if ("f'" in code or 'f"' in code) and ("SELECT" in code.upper() or "FROM" in code.upper()):
332
+ return Pattern(
333
+ pattern_type="anti_pattern",
334
+ language=language or "Python",
335
+ description="SQL injection risk - using f-strings in SQL",
336
+ example=code,
337
+ severity="critical",
338
+ alternative="Use parameterized queries with ORM",
339
+ priority=10,
340
+ )
341
+
342
+ return None
343
+
344
+
345
+ class EcosystemAnalyzer:
346
+ """Analyzes programming language ecosystems."""
347
+
348
+ def analyze(self, language: str) -> Optional[LanguageInfo]:
349
+ """Analyze ecosystem for a language."""
350
+ ecosystems = {
351
+ "Python": LanguageInfo(
352
+ name="Python",
353
+ version="3.12+",
354
+ tier="Tier 1",
355
+ frameworks=["FastAPI", "Django"],
356
+ features=["async", "type hints", "dataclasses"],
357
+ ),
358
+ "TypeScript": LanguageInfo(
359
+ name="TypeScript",
360
+ version="5.0+",
361
+ tier="Tier 1",
362
+ frameworks=["Next.js", "React"],
363
+ features=["strict typing", "type safety", "decorators"],
364
+ ),
365
+ "Go": LanguageInfo(
366
+ name="Go",
367
+ version="1.20+",
368
+ tier="Tier 1",
369
+ frameworks=["Fiber", "GORM"],
370
+ features=["goroutines", "channels", "simplicity"],
371
+ ),
372
+ }
373
+ return ecosystems.get(language)
374
+
375
+ def analyze_multiple(self, languages: List[str]) -> List[LanguageInfo]:
376
+ """Analyze multiple languages."""
377
+ results = []
378
+ for lang in languages:
379
+ result = self.analyze(lang)
380
+ if result:
381
+ results.append(result)
382
+ return results
383
+
384
+ def check_compatibility(self, language: str, version: str, framework: str) -> bool:
385
+ """Check if language version supports framework."""
386
+ if language == "Python" and version.startswith("2"):
387
+ return False
388
+ if language == "TypeScript" and version.startswith("3"):
389
+ return False
390
+ return True
391
+
392
+
393
+ class PerformanceOptimizer:
394
+ """Provides performance optimization tips."""
395
+
396
+ PERFORMANCE_TIPS = {
397
+ "Python": [
398
+ "Use async/await for I/O operations",
399
+ "Leverage type hints for faster execution",
400
+ "Batch database operations",
401
+ "Use connection pooling (asyncpg, psycopg[c])",
402
+ "Profile code with cProfile or py-spy",
403
+ ],
404
+ "TypeScript": [
405
+ "Enable strict mode for better optimization",
406
+ "Use const assertions for literals",
407
+ "Tree-shake unused code",
408
+ "Optimize bundle size with dynamic imports",
409
+ "Use native Node.js features instead of polyfills",
410
+ ],
411
+ "Go": [
412
+ "Use goroutines for lightweight concurrency",
413
+ "Implement connection pooling for databases",
414
+ "Use buffered channels for performance",
415
+ "Profile with pprof",
416
+ "Compile with release optimizations",
417
+ ],
418
+ "Rust": [
419
+ "Use zero-cost abstractions",
420
+ "Enable compile-time optimizations",
421
+ "Avoid unnecessary allocations",
422
+ "Use release builds for production",
423
+ "Profile with flamegraph",
424
+ ],
425
+ }
426
+
427
+ def get_tips(self, language: str) -> List[str]:
428
+ """Get performance tips for a language."""
429
+ return self.PERFORMANCE_TIPS.get(language, [])
430
+
431
+ def get_tip_count(self, language: str) -> int:
432
+ """Get count of optimization tips."""
433
+ return len(self.get_tips(language))
434
+
435
+
436
+ class TestingStrategyAdvisor:
437
+ """Provides testing strategy recommendations."""
438
+
439
+ STRATEGIES = {
440
+ "Python": TestingStrategy(
441
+ framework="pytest",
442
+ features="async support, fixtures, parametrization, pytest-asyncio",
443
+ language="Python",
444
+ ),
445
+ "TypeScript": TestingStrategy(
446
+ framework="Vitest/Jest",
447
+ features="snapshot testing, coverage reporting, mocking",
448
+ language="TypeScript",
449
+ ),
450
+ "Go": TestingStrategy(
451
+ framework="testing + testify",
452
+ features="assertions, mocking, test helpers, benchmarks",
453
+ language="Go",
454
+ ),
455
+ "Rust": TestingStrategy(
456
+ framework="cargo test",
457
+ features="unit tests, integration tests, doc tests",
458
+ language="Rust",
459
+ ),
460
+ }
461
+
462
+ def get_strategy(self, language: str) -> Optional[TestingStrategy]:
463
+ """Get testing strategy for a language."""
464
+ return self.STRATEGIES.get(language)
465
+
466
+ def get_recommended_framework(self, language: str) -> Optional[str]:
467
+ """Get recommended testing framework."""
468
+ strategy = self.get_strategy(language)
469
+ return strategy.framework if strategy else None
470
+
471
+
472
+ # Export public API
473
+ __all__ = [
474
+ "LanguageInfo",
475
+ "Pattern",
476
+ "TestingStrategy",
477
+ "LanguageVersionManager",
478
+ "FrameworkRecommender",
479
+ "PatternAnalyzer",
480
+ "AntiPatternDetector",
481
+ "EcosystemAnalyzer",
482
+ "PerformanceOptimizer",
483
+ "TestingStrategyAdvisor",
484
+ ]