moai-adk 0.35.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of moai-adk might be problematic. Click here for more details.

Files changed (502) hide show
  1. moai_adk/__init__.py +10 -0
  2. moai_adk/__main__.py +199 -0
  3. moai_adk/cli/__init__.py +6 -0
  4. moai_adk/cli/commands/__init__.py +17 -0
  5. moai_adk/cli/commands/analyze.py +116 -0
  6. moai_adk/cli/commands/doctor.py +272 -0
  7. moai_adk/cli/commands/init.py +372 -0
  8. moai_adk/cli/commands/language.py +248 -0
  9. moai_adk/cli/commands/status.py +104 -0
  10. moai_adk/cli/commands/update.py +2686 -0
  11. moai_adk/cli/main.py +13 -0
  12. moai_adk/cli/prompts/__init__.py +5 -0
  13. moai_adk/cli/prompts/init_prompts.py +219 -0
  14. moai_adk/cli/spec_status.py +263 -0
  15. moai_adk/cli/ui/__init__.py +44 -0
  16. moai_adk/cli/ui/progress.py +422 -0
  17. moai_adk/cli/ui/prompts.py +389 -0
  18. moai_adk/cli/ui/theme.py +129 -0
  19. moai_adk/cli/worktree/__init__.py +27 -0
  20. moai_adk/cli/worktree/__main__.py +31 -0
  21. moai_adk/cli/worktree/cli.py +683 -0
  22. moai_adk/cli/worktree/exceptions.py +89 -0
  23. moai_adk/cli/worktree/manager.py +493 -0
  24. moai_adk/cli/worktree/models.py +65 -0
  25. moai_adk/cli/worktree/registry.py +422 -0
  26. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  27. moai_adk/core/__init__.py +1 -0
  28. moai_adk/core/analysis/__init__.py +9 -0
  29. moai_adk/core/analysis/session_analyzer.py +400 -0
  30. moai_adk/core/claude_integration.py +393 -0
  31. moai_adk/core/command_helpers.py +270 -0
  32. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  33. moai_adk/core/config/__init__.py +19 -0
  34. moai_adk/core/config/auto_spec_config.py +340 -0
  35. moai_adk/core/config/migration.py +244 -0
  36. moai_adk/core/config/unified.py +436 -0
  37. moai_adk/core/context_manager.py +273 -0
  38. moai_adk/core/diagnostics/__init__.py +19 -0
  39. moai_adk/core/diagnostics/slash_commands.py +159 -0
  40. moai_adk/core/enterprise_features.py +1404 -0
  41. moai_adk/core/error_recovery_system.py +1902 -0
  42. moai_adk/core/event_driven_hook_system.py +1371 -0
  43. moai_adk/core/git/__init__.py +31 -0
  44. moai_adk/core/git/branch.py +25 -0
  45. moai_adk/core/git/branch_manager.py +129 -0
  46. moai_adk/core/git/checkpoint.py +134 -0
  47. moai_adk/core/git/commit.py +67 -0
  48. moai_adk/core/git/conflict_detector.py +413 -0
  49. moai_adk/core/git/event_detector.py +79 -0
  50. moai_adk/core/git/manager.py +216 -0
  51. moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
  52. moai_adk/core/input_validation_middleware.py +1006 -0
  53. moai_adk/core/integration/__init__.py +22 -0
  54. moai_adk/core/integration/engine.py +157 -0
  55. moai_adk/core/integration/integration_tester.py +226 -0
  56. moai_adk/core/integration/models.py +88 -0
  57. moai_adk/core/integration/utils.py +211 -0
  58. moai_adk/core/issue_creator.py +305 -0
  59. moai_adk/core/jit_context_loader.py +956 -0
  60. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  61. moai_adk/core/language_config.py +202 -0
  62. moai_adk/core/language_config_resolver.py +572 -0
  63. moai_adk/core/language_validator.py +543 -0
  64. moai_adk/core/mcp/setup.py +116 -0
  65. moai_adk/core/merge/__init__.py +9 -0
  66. moai_adk/core/merge/analyzer.py +605 -0
  67. moai_adk/core/migration/__init__.py +18 -0
  68. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  69. moai_adk/core/migration/backup_manager.py +277 -0
  70. moai_adk/core/migration/custom_element_scanner.py +358 -0
  71. moai_adk/core/migration/file_migrator.py +209 -0
  72. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  73. moai_adk/core/migration/selective_restorer.py +470 -0
  74. moai_adk/core/migration/template_utils.py +74 -0
  75. moai_adk/core/migration/user_selection_ui.py +338 -0
  76. moai_adk/core/migration/version_detector.py +139 -0
  77. moai_adk/core/migration/version_migrator.py +228 -0
  78. moai_adk/core/performance/__init__.py +6 -0
  79. moai_adk/core/performance/cache_system.py +316 -0
  80. moai_adk/core/performance/parallel_processor.py +116 -0
  81. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  82. moai_adk/core/project/__init__.py +1 -0
  83. moai_adk/core/project/backup_utils.py +70 -0
  84. moai_adk/core/project/checker.py +300 -0
  85. moai_adk/core/project/detector.py +293 -0
  86. moai_adk/core/project/initializer.py +387 -0
  87. moai_adk/core/project/phase_executor.py +716 -0
  88. moai_adk/core/project/validator.py +139 -0
  89. moai_adk/core/quality/__init__.py +6 -0
  90. moai_adk/core/quality/trust_checker.py +377 -0
  91. moai_adk/core/quality/validators/__init__.py +6 -0
  92. moai_adk/core/quality/validators/base_validator.py +19 -0
  93. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  94. moai_adk/core/robust_json_parser.py +611 -0
  95. moai_adk/core/rollback_manager.py +918 -0
  96. moai_adk/core/session_manager.py +651 -0
  97. moai_adk/core/skill_loading_system.py +579 -0
  98. moai_adk/core/spec/confidence_scoring.py +680 -0
  99. moai_adk/core/spec/ears_template_engine.py +1247 -0
  100. moai_adk/core/spec/quality_validator.py +687 -0
  101. moai_adk/core/spec_status_manager.py +478 -0
  102. moai_adk/core/template/__init__.py +7 -0
  103. moai_adk/core/template/backup.py +174 -0
  104. moai_adk/core/template/config.py +191 -0
  105. moai_adk/core/template/languages.py +43 -0
  106. moai_adk/core/template/merger.py +233 -0
  107. moai_adk/core/template/processor.py +1200 -0
  108. moai_adk/core/template_engine.py +310 -0
  109. moai_adk/core/template_variable_synchronizer.py +417 -0
  110. moai_adk/core/unified_permission_manager.py +745 -0
  111. moai_adk/core/user_behavior_analytics.py +851 -0
  112. moai_adk/core/version_sync.py +429 -0
  113. moai_adk/foundation/__init__.py +56 -0
  114. moai_adk/foundation/backend.py +1027 -0
  115. moai_adk/foundation/database.py +1115 -0
  116. moai_adk/foundation/devops.py +1585 -0
  117. moai_adk/foundation/ears.py +431 -0
  118. moai_adk/foundation/frontend.py +870 -0
  119. moai_adk/foundation/git/commit_templates.py +557 -0
  120. moai_adk/foundation/git.py +376 -0
  121. moai_adk/foundation/langs.py +484 -0
  122. moai_adk/foundation/ml_ops.py +1162 -0
  123. moai_adk/foundation/testing.py +1524 -0
  124. moai_adk/foundation/trust/trust_principles.py +676 -0
  125. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  126. moai_adk/project/__init__.py +0 -0
  127. moai_adk/project/configuration.py +1084 -0
  128. moai_adk/project/documentation.py +566 -0
  129. moai_adk/project/schema.py +447 -0
  130. moai_adk/statusline/__init__.py +38 -0
  131. moai_adk/statusline/alfred_detector.py +105 -0
  132. moai_adk/statusline/config.py +376 -0
  133. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  134. moai_adk/statusline/git_collector.py +190 -0
  135. moai_adk/statusline/main.py +322 -0
  136. moai_adk/statusline/metrics_tracker.py +78 -0
  137. moai_adk/statusline/renderer.py +343 -0
  138. moai_adk/statusline/update_checker.py +129 -0
  139. moai_adk/statusline/version_reader.py +741 -0
  140. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
  141. moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
  142. moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
  143. moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
  144. moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
  145. moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
  146. moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
  147. moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
  148. moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
  149. moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
  150. moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
  151. moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
  152. moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
  153. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
  154. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
  155. moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
  156. moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
  157. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  158. moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
  159. moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
  160. moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
  161. moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
  162. moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
  163. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
  164. moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
  165. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
  166. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
  167. moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
  168. moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
  169. moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
  170. moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
  171. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  172. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  173. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  179. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  180. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  181. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  182. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  183. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  184. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  185. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  186. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  187. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  188. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  189. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -0
  190. moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
  191. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  192. moai_adk/templates/.claude/settings.json +172 -0
  193. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
  194. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  195. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
  196. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
  197. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
  198. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
  199. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  200. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  201. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  202. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  203. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  204. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
  205. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -0
  206. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
  207. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
  208. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
  209. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
  210. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  211. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  212. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  213. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  214. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
  215. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
  216. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
  217. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
  218. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
  219. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  220. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  221. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  222. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  223. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  224. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  225. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
  226. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  227. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  228. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  229. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  230. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  231. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  232. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  233. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  254. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  257. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  260. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  263. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  266. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  270. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  272. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  273. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  274. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
  275. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  276. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  277. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  278. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  279. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  280. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  281. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  282. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  283. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  284. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +649 -0
  285. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
  286. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
  287. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
  288. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  289. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  290. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +376 -0
  291. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
  292. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
  293. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
  294. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
  295. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
  296. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
  297. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
  298. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
  299. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
  300. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
  301. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
  302. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
  303. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
  304. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
  305. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
  306. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
  307. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
  308. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
  309. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
  310. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
  311. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
  312. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
  313. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
  314. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
  315. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
  316. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
  317. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
  318. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  319. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  320. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  321. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  322. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
  323. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  324. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  325. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  326. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  327. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  328. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  329. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  330. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  331. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  332. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  333. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  334. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  335. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
  336. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  337. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  338. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  339. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  340. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  341. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  342. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
  343. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
  344. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
  345. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
  346. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
  347. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
  348. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
  349. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
  350. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
  351. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
  352. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
  353. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
  354. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
  355. moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
  356. moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
  357. moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
  358. moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
  359. moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
  360. moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
  361. moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
  362. moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
  363. moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
  364. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
  365. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
  366. moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
  367. moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
  368. moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
  369. moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
  370. moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
  371. moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
  372. moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
  373. moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
  374. moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
  375. moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
  376. moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
  377. moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
  378. moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
  379. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
  380. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
  381. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
  382. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
  383. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
  384. moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
  385. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
  386. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
  387. moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
  388. moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
  389. moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
  390. moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
  391. moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  409. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  417. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  418. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
  419. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  420. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  421. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  422. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  423. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  424. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  425. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  426. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  427. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  428. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  429. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
  430. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  431. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  432. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
  433. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  434. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  435. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  436. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  437. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  438. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  439. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
  440. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  441. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  442. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  443. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  444. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  445. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  446. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  447. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  448. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  449. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  450. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  451. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  452. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  453. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  454. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  455. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  456. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  457. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  458. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
  459. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  460. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  461. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  462. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  463. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  464. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  465. moai_adk/templates/.git-hooks/pre-commit +128 -0
  466. moai_adk/templates/.git-hooks/pre-push +365 -0
  467. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  468. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  469. moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
  470. moai_adk/templates/.gitignore +222 -0
  471. moai_adk/templates/.mcp.json +13 -0
  472. moai_adk/templates/.moai/config/config.yaml +58 -0
  473. moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
  474. moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
  475. moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
  476. moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
  477. moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
  478. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
  479. moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
  480. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  481. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  482. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  483. moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
  484. moai_adk/templates/.moai/config/sections/system.yaml +24 -0
  485. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  486. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  487. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  488. moai_adk/templates/CLAUDE.md +642 -0
  489. moai_adk/utils/__init__.py +30 -0
  490. moai_adk/utils/banner.py +38 -0
  491. moai_adk/utils/common.py +294 -0
  492. moai_adk/utils/link_validator.py +241 -0
  493. moai_adk/utils/logger.py +147 -0
  494. moai_adk/utils/safe_file_reader.py +206 -0
  495. moai_adk/utils/timeout.py +160 -0
  496. moai_adk/utils/toon_utils.py +256 -0
  497. moai_adk/version.py +22 -0
  498. moai_adk-0.35.1.dist-info/METADATA +3018 -0
  499. moai_adk-0.35.1.dist-info/RECORD +502 -0
  500. moai_adk-0.35.1.dist-info/WHEEL +4 -0
  501. moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
  502. moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,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)
@@ -0,0 +1,79 @@
1
+ """
2
+ Event Detector - Identify risky operations.
3
+
4
+ SPEC: .moai/specs/SPEC-CHECKPOINT-EVENT-001/spec.md
5
+ """
6
+
7
+ from pathlib import Path
8
+
9
+
10
+ class EventDetector:
11
+ """Detect potentially risky operations."""
12
+
13
+ CRITICAL_FILES = {
14
+ "CLAUDE.md",
15
+ "config.json",
16
+ ".moai/config/config.json",
17
+ }
18
+
19
+ CRITICAL_DIRS = {
20
+ ".moai/memory",
21
+ }
22
+
23
+ def is_risky_deletion(self, deleted_files: list[str]) -> bool:
24
+ """
25
+ Detect large-scale file deletions.
26
+
27
+ SPEC requirement: deleting 10 or more files counts as risky.
28
+
29
+ Args:
30
+ deleted_files: Files slated for deletion.
31
+
32
+ Returns:
33
+ True when 10 or more files are deleted, otherwise False.
34
+ """
35
+ return len(deleted_files) >= 10
36
+
37
+ def is_risky_refactoring(self, renamed_files: list[tuple[str, str]]) -> bool:
38
+ """
39
+ Detect large-scale refactoring.
40
+
41
+ SPEC requirement: renaming 10 or more files counts as risky.
42
+
43
+ Args:
44
+ renamed_files: List of (old_name, new_name) pairs.
45
+
46
+ Returns:
47
+ True when 10 or more files are renamed, otherwise False.
48
+ """
49
+ return len(renamed_files) >= 10
50
+
51
+ def is_critical_file(self, file_path: Path) -> bool:
52
+ """
53
+ Determine whether the file is critical.
54
+
55
+ SPEC requirement: modifying CLAUDE.md, config.json, or .moai/memory/*.md is risky.
56
+
57
+ Args:
58
+ file_path: File path to inspect.
59
+
60
+ Returns:
61
+ True when the file is critical, otherwise False.
62
+ """
63
+ # Check whether the file name is in the critical list
64
+ if file_path.name in self.CRITICAL_FILES:
65
+ return True
66
+
67
+ # Convert to string for further checks
68
+ path_str = str(file_path)
69
+
70
+ # Detect .moai/config/config.json paths
71
+ if ".moai/config/config.json" in path_str or ".moai\\config.json" in path_str:
72
+ return True
73
+
74
+ # Detect files inside the .moai/memory/ directory
75
+ for critical_dir in self.CRITICAL_DIRS:
76
+ if critical_dir in path_str or critical_dir.replace("/", "\\") in path_str:
77
+ return True
78
+
79
+ return False
@@ -0,0 +1,216 @@
1
+ """
2
+ Git repository management built on GitPython.
3
+
4
+ SPEC: .moai/specs/SPEC-CORE-GIT-001/spec.md
5
+ """
6
+
7
+ from pathlib import Path
8
+
9
+ from git import InvalidGitRepositoryError, Repo
10
+
11
+ from moai_adk.core.git.conflict_detector import GitConflictDetector
12
+
13
+
14
+ class GitManager:
15
+ """Manage interactions with a Git repository."""
16
+
17
+ def __init__(self, repo_path: str | Path = "."):
18
+ """
19
+ Initialize the GitManager.
20
+
21
+ Args:
22
+ repo_path: Path to the Git repository (default: current directory)
23
+
24
+ Raises:
25
+ InvalidGitRepositoryError: Raised when the path is not a Git repository.
26
+ """
27
+ self.repo = Repo(repo_path)
28
+ self.git = self.repo.git
29
+ self.repo_path = Path(repo_path).resolve()
30
+ self.conflict_detector = GitConflictDetector(self.repo_path)
31
+
32
+ def is_repo(self) -> bool:
33
+ """
34
+ Check whether the path points to a Git repository.
35
+
36
+ Returns:
37
+ True when the location is a Git repository, otherwise False.
38
+
39
+ Examples:
40
+ >>> manager = GitManager("/path/to/repo")
41
+ >>> manager.is_repo()
42
+ True
43
+ """
44
+ try:
45
+ _ = self.repo.git_dir
46
+ return True
47
+ except (InvalidGitRepositoryError, Exception):
48
+ return False
49
+
50
+ def current_branch(self) -> str:
51
+ """
52
+ Return the active branch name.
53
+
54
+ Returns:
55
+ Name of the currently checked-out branch.
56
+
57
+ Examples:
58
+ >>> manager = GitManager()
59
+ >>> manager.current_branch()
60
+ 'main'
61
+ """
62
+ return self.repo.active_branch.name
63
+
64
+ def is_dirty(self) -> bool:
65
+ """
66
+ Check whether the working tree has uncommitted changes.
67
+
68
+ Returns:
69
+ True when the worktree is dirty, otherwise False.
70
+
71
+ Examples:
72
+ >>> manager = GitManager()
73
+ >>> manager.is_dirty()
74
+ False
75
+ """
76
+ return self.repo.is_dirty()
77
+
78
+ def create_branch(self, branch_name: str, from_branch: str | None = None) -> None:
79
+ """
80
+ Create and switch to a new branch.
81
+
82
+ Args:
83
+ branch_name: Name of the branch to create.
84
+ from_branch: Base branch (default: current branch).
85
+
86
+ Examples:
87
+ >>> manager = GitManager()
88
+ >>> manager.create_branch("feature/SPEC-AUTH-001")
89
+ >>> manager.current_branch()
90
+ 'feature/SPEC-AUTH-001'
91
+ """
92
+ if from_branch:
93
+ self.git.checkout("-b", branch_name, from_branch)
94
+ else:
95
+ self.git.checkout("-b", branch_name)
96
+
97
+ def commit(self, message: str, files: list[str] | None = None) -> None:
98
+ """
99
+ Stage files and create a commit.
100
+
101
+ Args:
102
+ message: Commit message.
103
+ files: Optional list of files to commit (default: all changes).
104
+
105
+ Examples:
106
+ >>> manager = GitManager()
107
+ >>> manager.commit("feat: add authentication", files=["auth.py"])
108
+ """
109
+ if files:
110
+ self.repo.index.add(files)
111
+ else:
112
+ self.git.add(A=True)
113
+
114
+ self.repo.index.commit(message)
115
+
116
+ def push(self, branch: str | None = None, set_upstream: bool = False) -> None:
117
+ """
118
+ Push commits to the remote repository.
119
+
120
+ Args:
121
+ branch: Branch to push (default: current branch).
122
+ set_upstream: Whether to set the upstream tracking branch.
123
+
124
+ Examples:
125
+ >>> manager = GitManager()
126
+ >>> manager.push(set_upstream=True)
127
+ """
128
+ if set_upstream:
129
+ target_branch = branch or self.current_branch()
130
+ self.git.push("--set-upstream", "origin", target_branch)
131
+ else:
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()