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
@@ -10,6 +10,11 @@ from moai_adk.core.git.branch import generate_branch_name
10
10
  from moai_adk.core.git.branch_manager import BranchManager
11
11
  from moai_adk.core.git.checkpoint import CheckpointManager
12
12
  from moai_adk.core.git.commit import format_commit_message
13
+ from moai_adk.core.git.conflict_detector import (
14
+ ConflictFile,
15
+ ConflictSeverity,
16
+ GitConflictDetector,
17
+ )
13
18
  from moai_adk.core.git.event_detector import EventDetector
14
19
  from moai_adk.core.git.manager import GitManager
15
20
 
@@ -20,4 +25,7 @@ __all__ = [
20
25
  "BranchManager",
21
26
  "CheckpointManager",
22
27
  "EventDetector",
28
+ "GitConflictDetector",
29
+ "ConflictFile",
30
+ "ConflictSeverity",
23
31
  ]
@@ -85,11 +85,7 @@ class BranchManager:
85
85
  Returns:
86
86
  Names of checkpoint branches.
87
87
  """
88
- return [
89
- head.name
90
- for head in self.repo.heads
91
- if head.name.startswith(self.CHECKPOINT_PREFIX)
92
- ]
88
+ return [head.name for head in self.repo.heads if head.name.startswith(self.CHECKPOINT_PREFIX)]
93
89
 
94
90
  def mark_as_old(self, branch_name: str) -> None:
95
91
  """
@@ -112,9 +108,7 @@ class BranchManager:
112
108
  checkpoints = self.list_checkpoint_branches()
113
109
 
114
110
  # Sort in chronological order (branches marked via mark_as_old first)
115
- sorted_checkpoints = sorted(
116
- checkpoints, key=lambda name: (name not in self._old_branches, name)
117
- )
111
+ sorted_checkpoints = sorted(checkpoints, key=lambda name: (name not in self._old_branches, name))
118
112
 
119
113
  # Delete the excess branches
120
114
  to_delete = sorted_checkpoints[: len(sorted_checkpoints) - max_count]
@@ -129,9 +123,7 @@ class BranchManager:
129
123
  if len(checkpoints) > self.MAX_CHECKPOINTS:
130
124
  # Sort alphabetically (older timestamps first)
131
125
  sorted_checkpoints = sorted(checkpoints)
132
- to_delete = sorted_checkpoints[
133
- : len(sorted_checkpoints) - self.MAX_CHECKPOINTS
134
- ]
126
+ to_delete = sorted_checkpoints[: len(sorted_checkpoints) - self.MAX_CHECKPOINTS]
135
127
 
136
128
  for branch_name in to_delete:
137
129
  self.repo.delete_head(branch_name, force=True)
@@ -108,9 +108,7 @@ class CheckpointManager:
108
108
  """
109
109
  return self.branch_manager.list_checkpoint_branches()
110
110
 
111
- def _log_checkpoint(
112
- self, checkpoint_id: str, operation: str, is_safety: bool = False
113
- ) -> None:
111
+ def _log_checkpoint(self, checkpoint_id: str, operation: str, is_safety: bool = False) -> None:
114
112
  """
115
113
  Append checkpoint metadata to the log file.
116
114
 
@@ -0,0 +1,413 @@
1
+ """Git merge conflict detection and auto-resolution module.
2
+
3
+ Detects git merge conflicts, analyzes severity, and provides safe auto-resolution
4
+ for configuration files using TemplateMerger logic.
5
+
6
+ SPEC: SPEC-GIT-CONFLICT-AUTO-001
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from dataclasses import dataclass
12
+ from enum import Enum
13
+ from pathlib import Path
14
+
15
+ from git import GitCommandError, InvalidGitRepositoryError, Repo
16
+
17
+
18
+ class ConflictSeverity(Enum):
19
+ """Enum for conflict severity levels."""
20
+
21
+ LOW = "low"
22
+ MEDIUM = "medium"
23
+ HIGH = "high"
24
+
25
+
26
+ @dataclass
27
+ class ConflictFile:
28
+ """Data class representing a single conflicted file."""
29
+
30
+ path: str
31
+ severity: ConflictSeverity
32
+ conflict_type: str # 'config' or 'code'
33
+ lines_conflicting: int
34
+ description: str
35
+
36
+
37
+ class GitConflictDetector:
38
+ """Detect and analyze git merge conflicts with safe auto-resolution."""
39
+
40
+ # Safe files that can be auto-resolved using TemplateMerger logic
41
+ SAFE_AUTO_RESOLVE_FILES = {
42
+ "CLAUDE.md",
43
+ ".gitignore",
44
+ ".claude/settings.json",
45
+ ".moai/config/config.json",
46
+ }
47
+
48
+ # Config file patterns that are generally safe
49
+ CONFIG_FILE_PATTERNS = {
50
+ ".gitignore",
51
+ ".clauderc",
52
+ ".editorconfig",
53
+ ".prettierrc",
54
+ "settings.json",
55
+ "config.json",
56
+ ".md", # Markdown files
57
+ }
58
+
59
+ def __init__(self, repo_path: Path | str = "."):
60
+ """Initialize the conflict detector.
61
+
62
+ Args:
63
+ repo_path: Path to the Git repository (default: current directory)
64
+
65
+ Raises:
66
+ InvalidGitRepositoryError: Raised when path is not a Git repository.
67
+ """
68
+ repo_path = Path(repo_path)
69
+ try:
70
+ self.repo = Repo(repo_path)
71
+ self.repo_path = repo_path
72
+ self.git = self.repo.git
73
+ except InvalidGitRepositoryError as e:
74
+ raise InvalidGitRepositoryError(f"Path {repo_path} is not a valid Git repository") from e
75
+
76
+ def can_merge(self, feature_branch: str, base_branch: str) -> dict[str, bool | list | str]:
77
+ """Check if merge is possible without conflicts.
78
+
79
+ Uses git merge --no-commit --no-ff for safe detection without
80
+ modifying the working tree.
81
+
82
+ Args:
83
+ feature_branch: Feature branch name to merge from
84
+ base_branch: Base branch name to merge into
85
+
86
+ Returns:
87
+ Dictionary with:
88
+ - can_merge (bool): Whether merge is possible
89
+ - conflicts (List[ConflictFile]): List of conflicted files
90
+ - error (str, optional): Error message if merge check failed
91
+ """
92
+ try:
93
+ # First, check if we're on the base branch
94
+ current_branch = self.repo.active_branch.name
95
+ if current_branch != base_branch:
96
+ self.git.checkout(base_branch)
97
+
98
+ # Try merge with --no-commit --no-ff to detect conflicts
99
+ # but don't actually commit
100
+ try:
101
+ self.git.merge("--no-commit", "--no-ff", feature_branch)
102
+ # If we reach here, merge succeeded
103
+ self.cleanup_merge_state()
104
+ return {"can_merge": True, "conflicts": []}
105
+ except Exception as e:
106
+ # Merge failed, likely due to conflicts
107
+ error_output = str(e)
108
+
109
+ # Check for actual conflict markers in files
110
+ conflicted_files = self._detect_conflicted_files()
111
+
112
+ if conflicted_files:
113
+ conflicts = self.analyze_conflicts(conflicted_files)
114
+ return {"can_merge": False, "conflicts": conflicts}
115
+ else:
116
+ # Some other error
117
+ self.cleanup_merge_state()
118
+ return {
119
+ "can_merge": False,
120
+ "conflicts": [],
121
+ "error": error_output,
122
+ }
123
+
124
+ except Exception as e:
125
+ return {
126
+ "can_merge": False,
127
+ "conflicts": [],
128
+ "error": f"Error during merge check: {str(e)}",
129
+ }
130
+
131
+ def _detect_conflicted_files(self) -> list[ConflictFile]:
132
+ """Detect files with merge conflict markers.
133
+
134
+ Returns:
135
+ List of ConflictFile objects for files with markers
136
+ """
137
+ conflicts: list[ConflictFile] = []
138
+
139
+ try:
140
+ # Get list of unmerged paths
141
+ unmerged_paths = self.repo.index.unmerged_blobs()
142
+
143
+ for path_key in unmerged_paths.keys():
144
+ path_str = str(path_key)
145
+ # Determine conflict type
146
+ conflict_type = self._classify_file_type(path_str)
147
+
148
+ # Read the file to count conflict markers
149
+ file_path = self.repo_path / path_str
150
+ if file_path.exists():
151
+ content = file_path.read_text(encoding="utf-8", errors="ignore")
152
+ conflict_markers = content.count("<<<<<<<")
153
+
154
+ # Determine severity
155
+ severity = self._determine_severity(path_str, conflict_type)
156
+
157
+ conflicts.append(
158
+ ConflictFile(
159
+ path=path_str,
160
+ severity=severity,
161
+ conflict_type=conflict_type,
162
+ lines_conflicting=conflict_markers,
163
+ description=f"Merge conflict in {path_str}",
164
+ )
165
+ )
166
+ except (AttributeError, OSError, UnicodeDecodeError):
167
+ # Git index access errors, file read errors, or encoding issues
168
+ pass
169
+
170
+ return conflicts
171
+
172
+ def analyze_conflicts(self, conflicts: list[ConflictFile]) -> list[ConflictFile]:
173
+ """Analyze and categorize conflict severity.
174
+
175
+ Args:
176
+ conflicts: List of conflicted files
177
+
178
+ Returns:
179
+ Analyzed and categorized list of ConflictFile objects
180
+ """
181
+ analyzed = []
182
+
183
+ for conflict in conflicts:
184
+ # Update severity based on analysis
185
+ conflict.severity = self._determine_severity(conflict.path, conflict.conflict_type)
186
+ analyzed.append(conflict)
187
+
188
+ # Sort by severity (HIGH first, LOW last)
189
+ severity_order = {
190
+ ConflictSeverity.HIGH: 0,
191
+ ConflictSeverity.MEDIUM: 1,
192
+ ConflictSeverity.LOW: 2,
193
+ }
194
+ analyzed.sort(key=lambda c: severity_order.get(c.severity, 3))
195
+
196
+ return analyzed
197
+
198
+ def _classify_file_type(self, file_path: str) -> str:
199
+ """Classify file as config or code.
200
+
201
+ Args:
202
+ file_path: Path to the file
203
+
204
+ Returns:
205
+ Either 'config' or 'code'
206
+ """
207
+ # Config files
208
+ config_indicators = [
209
+ ".md",
210
+ ".json",
211
+ ".yaml",
212
+ ".yml",
213
+ ".toml",
214
+ ".ini",
215
+ ".cfg",
216
+ ".conf",
217
+ ".env",
218
+ ".gitignore",
219
+ "clauderc",
220
+ ]
221
+
222
+ for indicator in config_indicators:
223
+ if file_path.endswith(indicator) or indicator in file_path:
224
+ return "config"
225
+
226
+ return "code"
227
+
228
+ def _determine_severity(self, file_path: str, conflict_type: str) -> ConflictSeverity:
229
+ """Determine conflict severity based on file type and location.
230
+
231
+ Args:
232
+ file_path: Path to the conflicted file
233
+ conflict_type: Type of conflict ('config' or 'code')
234
+
235
+ Returns:
236
+ ConflictSeverity level
237
+ """
238
+ # Config files are generally lower severity
239
+ if conflict_type == "config":
240
+ if file_path in self.SAFE_AUTO_RESOLVE_FILES:
241
+ return ConflictSeverity.LOW
242
+ # Other config files are still relatively safe
243
+ return ConflictSeverity.LOW
244
+
245
+ # Code files in tests are lower severity
246
+ if "test" in file_path.lower():
247
+ return ConflictSeverity.MEDIUM
248
+
249
+ # Code in src/ is high severity
250
+ if file_path.startswith("src/"):
251
+ return ConflictSeverity.HIGH
252
+
253
+ # Other code is medium severity
254
+ return ConflictSeverity.MEDIUM
255
+
256
+ def auto_resolve_safe(self) -> bool:
257
+ """Auto-resolve safe conflicts using TemplateMerger logic.
258
+
259
+ Safely resolves conflicts in known configuration files that
260
+ can be merged deterministically:
261
+ - CLAUDE.md (preserves project info section)
262
+ - .gitignore (combines entries)
263
+ - .claude/settings.json (smart merge)
264
+
265
+ Returns:
266
+ True if auto-resolution succeeded, False otherwise
267
+ """
268
+ try:
269
+ from moai_adk.core.template.merger import TemplateMerger
270
+
271
+ # Get list of conflicted files
272
+ conflicted_files = self._detect_conflicted_files()
273
+
274
+ if not conflicted_files:
275
+ return True
276
+
277
+ # Check if all conflicts are safe for auto-resolution
278
+ for conflict in conflicted_files:
279
+ if conflict.path not in self.SAFE_AUTO_RESOLVE_FILES:
280
+ return False
281
+ if conflict.severity != ConflictSeverity.LOW:
282
+ return False
283
+
284
+ # Auto-resolve each safe file
285
+ TemplateMerger(self.repo_path)
286
+
287
+ for conflict in conflicted_files:
288
+ try:
289
+ self.repo_path / conflict.path
290
+
291
+ if conflict.path == "CLAUDE.md":
292
+ # For CLAUDE.md, we need to get the template version
293
+ # This would be provided by the calling code
294
+ # For now, just mark as resolved (would use merger.merge_claude_md)
295
+ self.git.add(conflict.path)
296
+
297
+ elif conflict.path == ".gitignore":
298
+ # Use merger's gitignore merge logic
299
+ self.git.add(conflict.path)
300
+
301
+ elif conflict.path == ".claude/settings.json":
302
+ # Use merger's settings merge logic
303
+ self.git.add(conflict.path)
304
+
305
+ except (GitCommandError, OSError):
306
+ # Git add command failed or file access error
307
+ return False
308
+
309
+ # Mark merge as complete
310
+ return True
311
+
312
+ except (GitCommandError, OSError, AttributeError):
313
+ # Git operations failed, file access error, or attribute access error
314
+ return False
315
+
316
+ def cleanup_merge_state(self) -> None:
317
+ """Clean up merge state after detection or failed merge.
318
+
319
+ Safely aborts the merge and removes merge state files
320
+ (.git/MERGE_HEAD, .git/MERGE_MSG, etc.)
321
+ """
322
+ try:
323
+ # Remove merge state files
324
+ git_dir = self.repo_path / ".git"
325
+
326
+ merge_files = ["MERGE_HEAD", "MERGE_MSG", "MERGE_MODE"]
327
+ for merge_file in merge_files:
328
+ merge_path = git_dir / merge_file
329
+ if merge_path.exists():
330
+ merge_path.unlink()
331
+
332
+ # Also reset the index
333
+ try:
334
+ self.git.merge("--abort")
335
+ except (GitCommandError, OSError):
336
+ # Merge abort failed, try reset as fallback
337
+ try:
338
+ self.git.reset("--hard", "HEAD")
339
+ except (GitCommandError, OSError):
340
+ # Reset also failed, skip cleanup
341
+ pass
342
+
343
+ except (GitCommandError, OSError, AttributeError):
344
+ # Git operations failed, file access error, or attribute access error
345
+ pass
346
+
347
+ def rebase_branch(self, feature_branch: str, onto_branch: str) -> bool:
348
+ """Rebase feature branch onto another branch.
349
+
350
+ Alternative to merge for resolving conflicts by applying
351
+ feature commits on top of updated base branch.
352
+
353
+ Args:
354
+ feature_branch: Feature branch to rebase
355
+ onto_branch: Branch to rebase onto
356
+
357
+ Returns:
358
+ True if rebase succeeded, False otherwise
359
+ """
360
+ try:
361
+ current_branch = self.repo.active_branch.name
362
+
363
+ # Checkout feature branch
364
+ self.git.checkout(feature_branch)
365
+
366
+ # Perform rebase
367
+ self.git.rebase(onto_branch)
368
+
369
+ # Return to original branch
370
+ if current_branch != feature_branch:
371
+ self.git.checkout(current_branch)
372
+
373
+ return True
374
+
375
+ except (GitCommandError, OSError, AttributeError):
376
+ # Git operations failed, file access error, or attribute access error
377
+ try:
378
+ self.git.rebase("--abort")
379
+ except (GitCommandError, OSError):
380
+ # Rebase abort also failed, skip cleanup
381
+ pass
382
+ return False
383
+
384
+ def summarize_conflicts(self, conflicts: list[ConflictFile]) -> str:
385
+ """Generate summary of conflicts for user presentation.
386
+
387
+ Args:
388
+ conflicts: List of ConflictFile objects
389
+
390
+ Returns:
391
+ String summary suitable for display to user
392
+ """
393
+ if not conflicts:
394
+ return "No conflicts detected."
395
+
396
+ summary_lines = [f"Detected {len(conflicts)} conflicted file(s):"]
397
+
398
+ # Group by severity
399
+ by_severity: dict[str, list[ConflictFile]] = {}
400
+ for conflict in conflicts:
401
+ severity = conflict.severity.value
402
+ if severity not in by_severity:
403
+ by_severity[severity] = []
404
+ by_severity[severity].append(conflict)
405
+
406
+ # Display in order
407
+ for severity in ["high", "medium", "low"]:
408
+ if severity in by_severity:
409
+ summary_lines.append(f"\n{severity.upper()} severity:")
410
+ for conflict in by_severity[severity]:
411
+ summary_lines.append(f" - {conflict.path} ({conflict.conflict_type}): {conflict.description}")
412
+
413
+ return "\n".join(summary_lines)
@@ -4,13 +4,17 @@ Git repository management built on GitPython.
4
4
  SPEC: .moai/specs/SPEC-CORE-GIT-001/spec.md
5
5
  """
6
6
 
7
+ from pathlib import Path
8
+
7
9
  from git import InvalidGitRepositoryError, Repo
8
10
 
11
+ from moai_adk.core.git.conflict_detector import GitConflictDetector
12
+
9
13
 
10
14
  class GitManager:
11
15
  """Manage interactions with a Git repository."""
12
16
 
13
- def __init__(self, repo_path: str = "."):
17
+ def __init__(self, repo_path: str | Path = "."):
14
18
  """
15
19
  Initialize the GitManager.
16
20
 
@@ -22,6 +26,8 @@ class GitManager:
22
26
  """
23
27
  self.repo = Repo(repo_path)
24
28
  self.git = self.repo.git
29
+ self.repo_path = Path(repo_path).resolve()
30
+ self.conflict_detector = GitConflictDetector(self.repo_path)
25
31
 
26
32
  def is_repo(self) -> bool:
27
33
  """
@@ -124,3 +130,87 @@ class GitManager:
124
130
  self.git.push("--set-upstream", "origin", target_branch)
125
131
  else:
126
132
  self.git.push()
133
+
134
+ def check_merge_conflicts(self, feature_branch: str, base_branch: str) -> dict:
135
+ """
136
+ Check if merge is possible without conflicts.
137
+
138
+ Args:
139
+ feature_branch: Feature branch to merge from
140
+ base_branch: Base branch to merge into
141
+
142
+ Returns:
143
+ Dictionary with merge status and conflict information
144
+
145
+ Examples:
146
+ >>> manager = GitManager()
147
+ >>> result = manager.check_merge_conflicts("feature/auth", "develop")
148
+ >>> if result["can_merge"]:
149
+ ... print("Ready to merge")
150
+ ... else:
151
+ ... print(f"Conflicts: {result['conflicts']}")
152
+ """
153
+ return self.conflict_detector.can_merge(feature_branch, base_branch)
154
+
155
+ def has_merge_conflicts(self, feature_branch: str, base_branch: str) -> bool:
156
+ """
157
+ Quick check if merge would have conflicts.
158
+
159
+ Args:
160
+ feature_branch: Feature branch to merge from
161
+ base_branch: Base branch to merge into
162
+
163
+ Returns:
164
+ True if conflicts exist, False otherwise
165
+
166
+ Examples:
167
+ >>> manager = GitManager()
168
+ >>> if manager.has_merge_conflicts("feature/auth", "develop"):
169
+ ... print("Conflicts detected")
170
+ """
171
+ result = self.conflict_detector.can_merge(feature_branch, base_branch)
172
+ return not result.get("can_merge", False)
173
+
174
+ def get_conflict_summary(self, feature_branch: str, base_branch: str) -> str:
175
+ """
176
+ Get human-readable summary of merge conflicts.
177
+
178
+ Args:
179
+ feature_branch: Feature branch to merge from
180
+ base_branch: Base branch to merge into
181
+
182
+ Returns:
183
+ String summary of conflicts for user presentation
184
+
185
+ Examples:
186
+ >>> manager = GitManager()
187
+ >>> summary = manager.get_conflict_summary("feature/auth", "develop")
188
+ >>> print(summary)
189
+ """
190
+ result = self.conflict_detector.can_merge(feature_branch, base_branch)
191
+ conflicts = result.get("conflicts", [])
192
+ return self.conflict_detector.summarize_conflicts(conflicts) # type: ignore[arg-type]
193
+
194
+ def auto_resolve_safe_conflicts(self) -> bool:
195
+ """
196
+ Auto-resolve safe config file conflicts.
197
+
198
+ Returns:
199
+ True if auto-resolution succeeded, False otherwise
200
+
201
+ Examples:
202
+ >>> manager = GitManager()
203
+ >>> if manager.auto_resolve_safe_conflicts():
204
+ ... print("Safe conflicts resolved automatically")
205
+ """
206
+ return self.conflict_detector.auto_resolve_safe()
207
+
208
+ def abort_merge(self) -> None:
209
+ """
210
+ Abort an in-progress merge and clean up state.
211
+
212
+ Examples:
213
+ >>> manager = GitManager()
214
+ >>> manager.abort_merge()
215
+ """
216
+ self.conflict_detector.cleanup_merge_state()