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,605 @@
1
+ """Claude Code Headless-based Merge Analyzer
2
+
3
+ Analyzes template merge differences using Claude Code headless mode
4
+ for intelligent backup vs new template comparison and recommendations.
5
+ """
6
+
7
+ import json
8
+ import logging
9
+ import os
10
+ import re
11
+ import shutil
12
+ import subprocess
13
+ import sys
14
+ from difflib import unified_diff
15
+ from pathlib import Path
16
+ from typing import Any, Optional
17
+
18
+ import click
19
+ from rich.console import Console
20
+ from rich.live import Live
21
+ from rich.spinner import Spinner
22
+ from rich.table import Table
23
+
24
+ console = Console()
25
+ logger = logging.getLogger(__name__)
26
+
27
+
28
+ class MergeAnalyzer:
29
+ """Merge analyzer using Claude Code for intelligent template merge analysis
30
+
31
+ Compares backed-up user configurations with new templates,
32
+ analyzes them using Claude AI, and provides merge recommendations.
33
+ """
34
+
35
+ # Primary files to analyze
36
+ ANALYZED_FILES = [
37
+ "CLAUDE.md",
38
+ ".claude/settings.json",
39
+ ".moai/config/config.yaml", # Updated: JSON → YAML migration
40
+ ".gitignore",
41
+ ]
42
+
43
+ # Claude headless execution settings
44
+ CLAUDE_TIMEOUT = 120 # Maximum 2 minutes
45
+ CLAUDE_MODEL = "claude-haiku-4-5-20251001" # Latest Haiku (cost optimized)
46
+ CLAUDE_TOOLS = ["Read", "Glob", "Grep"] # Read-only tools
47
+
48
+ def __init__(self, project_path: Path):
49
+ """Initialize analyzer with project path."""
50
+ self.project_path = project_path
51
+
52
+ def analyze_merge(self, backup_path: Path, template_path: Path) -> dict[str, Any]:
53
+ """Perform merge analysis using Claude Code headless mode
54
+
55
+ Args:
56
+ backup_path: Path to backed-up configuration directory
57
+ template_path: Path to new template directory
58
+
59
+ Returns:
60
+ Dictionary containing analysis results:
61
+ - files: List of changes by file
62
+ - safe_to_auto_merge: Whether auto-merge is safe
63
+ - user_action_required: Whether user intervention is needed
64
+ - summary: Overall summary
65
+ - error: Error message (if any)
66
+ """
67
+ # 1. Collect files to compare
68
+ diff_files = self._collect_diff_files(backup_path, template_path)
69
+
70
+ # 2. Create Claude headless prompt
71
+ prompt = self._create_analysis_prompt(backup_path, template_path, diff_files)
72
+
73
+ # 3. Run Claude Code headless (show spinner)
74
+ spinner = Spinner("dots", text="[cyan]Running Claude Code analysis...[/cyan]")
75
+
76
+ try:
77
+ with Live(spinner, refresh_per_second=12):
78
+ result = subprocess.run(
79
+ self._build_claude_command(),
80
+ input=prompt,
81
+ capture_output=True,
82
+ text=True,
83
+ timeout=self.CLAUDE_TIMEOUT,
84
+ )
85
+
86
+ if result.returncode == 0:
87
+ # Use new response parsing method
88
+ analysis = self._parse_claude_response(result.stdout)
89
+ if "error" not in analysis:
90
+ console.print("[green]✅ Analysis complete[/green]")
91
+ return analysis
92
+ else:
93
+ console.print(f"[yellow]⚠️ Analysis failed: {analysis.get('summary', 'Unknown error')}[/yellow]")
94
+ return self._fallback_analysis(backup_path, template_path, diff_files)
95
+ else:
96
+ # Use improved error detection with full context
97
+ error_msg = self._detect_claude_errors(
98
+ result.stderr,
99
+ returncode=result.returncode,
100
+ stdout=result.stdout,
101
+ )
102
+ logger.warning(
103
+ f"Claude Code failed: returncode={result.returncode}, "
104
+ f"stderr={result.stderr[:200] if result.stderr else 'empty'}, "
105
+ f"stdout_hint={result.stdout[:100] if result.stdout else 'empty'}"
106
+ )
107
+ console.print(f"[yellow]⚠️ Claude execution error: {error_msg}[/yellow]")
108
+ return self._fallback_analysis(backup_path, template_path, diff_files)
109
+
110
+ except subprocess.TimeoutExpired:
111
+ console.print("[yellow]⚠️ Claude analysis timeout (exceeded 120 seconds)[/yellow]")
112
+ return self._fallback_analysis(backup_path, template_path, diff_files)
113
+ except FileNotFoundError:
114
+ console.print("[red]❌ Claude Code not found.[/red]")
115
+ console.print("[cyan] Install Claude Code: https://claude.com/claude-code[/cyan]")
116
+ return self._fallback_analysis(backup_path, template_path, diff_files)
117
+
118
+ def ask_user_confirmation(self, analysis: dict[str, Any]) -> bool:
119
+ """Display analysis results and request user confirmation
120
+
121
+ Args:
122
+ analysis: Result from analyze_merge()
123
+
124
+ Returns:
125
+ True: Proceed, False: Cancel
126
+ """
127
+ # 1. Display analysis results
128
+ self._display_analysis(analysis)
129
+
130
+ # 2. User confirmation
131
+ if analysis.get("user_action_required", False):
132
+ console.print(
133
+ "\n⚠️ User intervention required. Please review the following:",
134
+ style="warning",
135
+ )
136
+ for file_info in analysis.get("files", []):
137
+ if file_info.get("conflict_severity") in ["medium", "high"]:
138
+ console.print(
139
+ f" • {file_info['filename']}: {file_info.get('note', '')}",
140
+ )
141
+
142
+ # 3. Confirmation prompt
143
+ proceed = click.confirm(
144
+ "\nProceed with merge?",
145
+ default=analysis.get("safe_to_auto_merge", False),
146
+ )
147
+
148
+ return proceed
149
+
150
+ def _collect_diff_files(self, backup_path: Path, template_path: Path) -> dict[str, dict[str, Any]]:
151
+ """Collect differences between backup and template files
152
+
153
+ Returns:
154
+ Dictionary with diff information per file
155
+ """
156
+ diff_files = {}
157
+
158
+ for file_name in self.ANALYZED_FILES:
159
+ backup_file = backup_path / file_name
160
+ template_file = template_path / file_name
161
+
162
+ if not backup_file.exists() and not template_file.exists():
163
+ continue
164
+
165
+ diff_info = {
166
+ "backup_exists": backup_file.exists(),
167
+ "template_exists": template_file.exists(),
168
+ "has_diff": False,
169
+ "diff_lines": 0,
170
+ }
171
+
172
+ if backup_file.exists() and template_file.exists():
173
+ backup_content = backup_file.read_text(encoding="utf-8")
174
+ template_content = template_file.read_text(encoding="utf-8")
175
+
176
+ if backup_content != template_content:
177
+ diff = list(
178
+ unified_diff(
179
+ backup_content.splitlines(),
180
+ template_content.splitlines(),
181
+ lineterm="",
182
+ )
183
+ )
184
+ diff_info["has_diff"] = True
185
+ diff_info["diff_lines"] = len(diff)
186
+
187
+ diff_files[file_name] = diff_info
188
+
189
+ return diff_files
190
+
191
+ def _create_analysis_prompt(
192
+ self,
193
+ backup_path: Path,
194
+ template_path: Path,
195
+ diff_files: dict[str, dict[str, Any]],
196
+ ) -> str:
197
+ """Generate Claude headless analysis prompt
198
+
199
+ Returns:
200
+ Analysis prompt to send to Claude
201
+ """
202
+ return f"""You are a MoAI-ADK configuration file merge expert.
203
+
204
+ ## Context
205
+ - Backed-up user configuration: {backup_path}
206
+ - New template: {template_path}
207
+ - Files to analyze: {", ".join(self.ANALYZED_FILES)}
208
+
209
+ ## Files to Analyze
210
+ {self._format_diff_summary(diff_files)}
211
+
212
+ ## Analysis Tasks
213
+ Analyze the following items and provide a JSON response:
214
+
215
+ 1. Identify changes per file
216
+ 2. Assess conflict risk (low/medium/high)
217
+ 3. Merge recommendations (use_template/keep_existing/smart_merge)
218
+ 4. Overall safety assessment
219
+
220
+ ## Response Format (JSON)
221
+ {{
222
+ "files": [
223
+ {{
224
+ "filename": "CLAUDE.md",
225
+ "changes": "Description of changes",
226
+ "recommendation": "use_template|keep_existing|smart_merge",
227
+ "conflict_severity": "low|medium|high",
228
+ "note": "Additional notes (optional)"
229
+ }}
230
+ ],
231
+ "safe_to_auto_merge": true/false,
232
+ "user_action_required": true/false,
233
+ "summary": "Whether merge is safe and why",
234
+ "risk_assessment": "Risk assessment"
235
+ }}
236
+
237
+ ## Merge Rules Reference
238
+ - CLAUDE.md: Preserve Project Information section
239
+ - settings.json: Merge env variables, prioritize template permissions.deny
240
+ - config.json: Preserve user metadata, update schema
241
+ - .gitignore: Additions only (preserve existing items)
242
+
243
+ ## Additional Considerations
244
+ - Assess risk of user customization loss
245
+ - Determine if force overwriting Alfred infrastructure files
246
+ - Review rollback possibilities
247
+ """
248
+
249
+ def _display_analysis(self, analysis: dict[str, Any]) -> None:
250
+ """Display analysis results in Rich format"""
251
+ # Title
252
+ console.print("\n📊 Merge Analysis Results (Claude Code)", style="bold")
253
+
254
+ # Summary
255
+ summary = analysis.get("summary", "No analysis results")
256
+ console.print(f"\n📝 {summary}")
257
+
258
+ # Risk assessment
259
+ risk_assessment = analysis.get("risk_assessment", "")
260
+ if risk_assessment:
261
+ risk_style = "green" if "safe" in risk_assessment.lower() else "yellow"
262
+ console.print(f"⚠️ Risk Level: {risk_assessment}", style=risk_style)
263
+
264
+ # Changes by file table
265
+ files_list = analysis.get("files")
266
+ if files_list and isinstance(files_list, list):
267
+ table = Table(title="Changes by File")
268
+ table.add_column("File", style="cyan")
269
+ table.add_column("Changes", style="white")
270
+ table.add_column("Recommendation", style="yellow")
271
+ table.add_column("Risk", style="red")
272
+
273
+ for file_info in files_list:
274
+ # Ensure file_info is a dictionary
275
+ if not isinstance(file_info, dict):
276
+ continue
277
+
278
+ severity_style = {
279
+ "low": "green",
280
+ "medium": "yellow",
281
+ "high": "red",
282
+ }.get(file_info.get("conflict_severity", "low"), "white")
283
+
284
+ table.add_row(
285
+ file_info.get("filename", "?"),
286
+ file_info.get("changes", "")[:30],
287
+ file_info.get("recommendation", "?"),
288
+ file_info.get("conflict_severity", "?"),
289
+ style=severity_style,
290
+ )
291
+
292
+ console.print(table)
293
+
294
+ # Additional details
295
+ for file_info in files_list:
296
+ # Ensure file_info is a dictionary
297
+ if not isinstance(file_info, dict):
298
+ continue
299
+
300
+ if file_info.get("note"):
301
+ console.print(
302
+ f"\n💡 {file_info['filename']}: {file_info['note']}",
303
+ style="dim",
304
+ )
305
+
306
+ def _parse_claude_response(self, response_text: str) -> dict[str, Any]:
307
+ """Parse Claude Code response supporting both v1.x and v2.0+ formats.
308
+
309
+ Args:
310
+ response_text: Raw response text from Claude Code
311
+
312
+ Returns:
313
+ Parsed analysis dictionary
314
+ """
315
+ try:
316
+ # First try direct JSON parsing (v1.x format)
317
+ return json.loads(response_text)
318
+ except json.JSONDecodeError:
319
+ # Try v2.0+ wrapped format
320
+ try:
321
+ # Look for JSON in the response
322
+ if '"type":' in response_text and '"result":' in response_text:
323
+ # Parse the wrapped v2.0+ format
324
+ response_obj = json.loads(response_text)
325
+ if "result" in response_obj:
326
+ result_text = response_obj["result"]
327
+
328
+ # Try to extract JSON from the result field
329
+ if isinstance(result_text, str):
330
+ # Look for JSON blocks in the result
331
+ if "```json" in result_text:
332
+ # Extract JSON from code block
333
+ start = result_text.find("```json") + 7
334
+ end = result_text.find("```", start)
335
+ if end != -1:
336
+ json_text = result_text[start:end].strip()
337
+ return json.loads(json_text)
338
+ elif result_text.strip().startswith("{"):
339
+ # Try direct JSON parsing
340
+ return json.loads(result_text)
341
+ else:
342
+ # Try to find JSON pattern in text
343
+ json_match = re.search(r"\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}", result_text)
344
+ if json_match:
345
+ try:
346
+ return json.loads(json_match.group(0))
347
+ except json.JSONDecodeError:
348
+ pass
349
+
350
+ # Fallback: try to find any JSON in the text
351
+ json_match = re.search(r"\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}", response_text)
352
+ if json_match:
353
+ return json.loads(json_match.group(0))
354
+
355
+ except (json.JSONDecodeError, KeyError, TypeError) as e:
356
+ console.print(f"[yellow]⚠️ Failed to parse Claude v2.0+ response: {e}[/yellow]")
357
+ logger.warning(f"Claude response parsing failed: {e}")
358
+
359
+ # If all parsing attempts fail, return error structure
360
+ logger.error(f"Could not parse Claude response. Raw response: {response_text[:500]}...")
361
+ return {
362
+ "files": [],
363
+ "safe_to_auto_merge": False,
364
+ "user_action_required": True,
365
+ "summary": "Failed to parse Claude response",
366
+ "risk_assessment": "High - Response parsing failed",
367
+ "error": "response_parse_failed",
368
+ "raw_response": response_text[:500] if response_text else "",
369
+ }
370
+
371
+ def _detect_claude_errors(
372
+ self,
373
+ stderr: str,
374
+ returncode: int = None,
375
+ stdout: str = None,
376
+ ) -> str:
377
+ """Detect and interpret Claude Code specific errors.
378
+
379
+ Args:
380
+ stderr: Standard error output from Claude Code
381
+ returncode: Process exit code (optional, for better diagnostics)
382
+ stdout: Standard output (optional, may contain error hints)
383
+
384
+ Returns:
385
+ User-friendly error message with actionable guidance
386
+ """
387
+ # Case 1: Process failed but stderr is empty (silent failure)
388
+ if not stderr and returncode is not None and returncode != 0:
389
+ # Try to extract hints from stdout
390
+ if stdout:
391
+ stdout_lower = stdout.lower()
392
+ if "error" in stdout_lower or "failed" in stdout_lower or "exception" in stdout_lower:
393
+ stdout_hint = stdout[:300] if len(stdout) > 300 else stdout
394
+ return f"Process failed (exit code {returncode}). Output: {stdout_hint}"
395
+ return (
396
+ f"Process failed silently (exit code {returncode}). "
397
+ "No error details available. Try 'claude --version' to verify installation."
398
+ )
399
+
400
+ # Case 2: No stderr and no returncode context
401
+ if not stderr:
402
+ return "No error details available. Try running 'claude --version' to verify installation."
403
+
404
+ error_lower = stderr.lower()
405
+
406
+ # Pattern matching for specific known errors
407
+ if "model not found" in error_lower or "unknown model" in error_lower:
408
+ return f"Claude model '{self.CLAUDE_MODEL}' not found. Run 'claude --models' to see available models."
409
+
410
+ if "permission denied" in error_lower:
411
+ return "Permission denied. Check file permissions and Claude Code access rights."
412
+
413
+ if "timeout" in error_lower:
414
+ return f"Claude analysis timed out after {self.CLAUDE_TIMEOUT} seconds. Consider increasing timeout."
415
+
416
+ if "file not found" in error_lower:
417
+ return "Required files not found. Check project structure and file paths."
418
+
419
+ if "invalid argument" in error_lower or "unknown option" in error_lower:
420
+ return "Invalid Claude Code arguments. This might be a version compatibility issue. Try 'claude --help'."
421
+
422
+ if "api key" in error_lower or "authentication" in error_lower or "unauthorized" in error_lower:
423
+ return "Authentication error. Check your Claude API key configuration."
424
+
425
+ if "rate limit" in error_lower or "too many requests" in error_lower:
426
+ return "Rate limit exceeded. Please wait a moment and try again."
427
+
428
+ if "connection" in error_lower or "network" in error_lower:
429
+ return "Network connection error. Check your internet connection."
430
+
431
+ # Return generic error with exit code if available (extended to 300 chars)
432
+ exit_info = f" (exit code {returncode})" if returncode is not None else ""
433
+ return f"Claude Code error{exit_info}: {stderr[:300]}"
434
+
435
+ def _find_claude_executable(self) -> Optional[str]:
436
+ """Find Claude Code executable path with Windows compatibility.
437
+
438
+ Searches for Claude Code in:
439
+ 1. System PATH (shutil.which)
440
+ 2. Windows npm global directory
441
+ 3. Windows local AppData directory
442
+ 4. Common installation paths
443
+
444
+ Returns:
445
+ Full path to Claude executable or None if not found
446
+ """
447
+ # First try system PATH
448
+ claude_path = shutil.which("claude")
449
+ if claude_path:
450
+ return claude_path
451
+
452
+ # Windows-specific additional paths
453
+ if sys.platform == "win32":
454
+ possible_paths = []
455
+
456
+ # npm global installation
457
+ appdata = os.environ.get("APPDATA", "")
458
+ if appdata:
459
+ possible_paths.extend(
460
+ [
461
+ Path(appdata) / "npm" / "claude.cmd",
462
+ Path(appdata) / "npm" / "claude.exe",
463
+ Path(appdata) / "npm" / "claude",
464
+ ]
465
+ )
466
+
467
+ # Local AppData installation
468
+ localappdata = os.environ.get("LOCALAPPDATA", "")
469
+ if localappdata:
470
+ possible_paths.extend(
471
+ [
472
+ Path(localappdata) / "Programs" / "claude" / "claude.exe",
473
+ Path(localappdata)
474
+ / "Microsoft"
475
+ / "WinGet"
476
+ / "Packages"
477
+ / "Anthropic.ClaudeCode_*"
478
+ / "claude.exe",
479
+ ]
480
+ )
481
+
482
+ # User profile paths
483
+ userprofile = os.environ.get("USERPROFILE", "")
484
+ if userprofile:
485
+ possible_paths.extend(
486
+ [
487
+ Path(userprofile) / ".claude" / "claude.exe",
488
+ Path(userprofile) / "AppData" / "Local" / "Programs" / "claude" / "claude.exe",
489
+ ]
490
+ )
491
+
492
+ # Check each possible path
493
+ for p in possible_paths:
494
+ # Handle glob patterns
495
+ if "*" in str(p):
496
+ parent = p.parent
497
+ pattern = p.name
498
+ if parent.exists():
499
+ matches = list(parent.glob(pattern))
500
+ if matches:
501
+ return str(matches[0])
502
+ elif p.exists():
503
+ return str(p)
504
+
505
+ return None
506
+
507
+ def _build_claude_command(self) -> list[str]:
508
+ """Build Claude Code headless command (based on official v4.0+)
509
+
510
+ Claude Code CLI official options:
511
+ - -p: Non-interactive headless mode
512
+ - --model: Explicit model selection (Haiku)
513
+ - --output-format: JSON response format
514
+ - --tools: Read-only tools only (space-separated - POSIX standard)
515
+ - --permission-mode: Auto-approval (background task)
516
+
517
+ Returns:
518
+ List of Claude CLI command arguments
519
+
520
+ Raises:
521
+ FileNotFoundError: If Claude Code executable is not found
522
+ """
523
+ # Find Claude executable with Windows compatibility
524
+ claude_path = self._find_claude_executable()
525
+ if not claude_path:
526
+ raise FileNotFoundError("Claude Code executable not found")
527
+
528
+ # Tools list space-separated (POSIX standard, officially recommended)
529
+ tools_str = " ".join(self.CLAUDE_TOOLS)
530
+
531
+ return [
532
+ claude_path, # Use full path instead of just "claude"
533
+ "-p", # Non-interactive headless mode
534
+ "--model",
535
+ self.CLAUDE_MODEL, # Explicit model specification (Haiku)
536
+ "--output-format",
537
+ "json", # Single JSON response
538
+ "--tools",
539
+ tools_str, # Space-separated (Read Glob Grep)
540
+ "--permission-mode",
541
+ "dontAsk", # Auto-approval (safe, read-only)
542
+ ]
543
+
544
+ def _format_diff_summary(self, diff_files: dict[str, dict[str, Any]]) -> str:
545
+ """Format diff_files for prompt"""
546
+ summary = []
547
+ for file_name, info in diff_files.items():
548
+ if info["backup_exists"] and info["template_exists"]:
549
+ status = f"✏️ Modified ({info['diff_lines']} lines)" if info["has_diff"] else "✓ Identical"
550
+ elif info["backup_exists"]:
551
+ status = "❌ Deleted from template"
552
+ else:
553
+ status = "✨ New file (from template)"
554
+
555
+ summary.append(f"- {file_name}: {status}")
556
+
557
+ return "\n".join(summary)
558
+
559
+ def _fallback_analysis(
560
+ self,
561
+ backup_path: Path,
562
+ template_path: Path,
563
+ diff_files: dict[str, dict[str, Any]],
564
+ ) -> dict[str, Any]:
565
+ """Fallback analysis when Claude call fails (difflib-based)
566
+
567
+ Returns basic analysis results when Claude is unavailable
568
+ """
569
+ console.print(
570
+ "⚠️ Claude Code unavailable. Using fallback analysis.",
571
+ style="yellow",
572
+ )
573
+
574
+ files_analysis = []
575
+ has_high_risk = False
576
+
577
+ for file_name, info in diff_files.items():
578
+ if not info["has_diff"]:
579
+ continue
580
+
581
+ # Simple risk assessment
582
+ severity = "low"
583
+ if file_name in [".claude/settings.json", ".moai/config/config.json"]:
584
+ severity = "medium" if info["diff_lines"] > 10 else "low"
585
+
586
+ files_analysis.append(
587
+ {
588
+ "filename": file_name,
589
+ "changes": f"{info['diff_lines']} lines changed",
590
+ "recommendation": "smart_merge",
591
+ "conflict_severity": severity,
592
+ }
593
+ )
594
+
595
+ if severity == "high":
596
+ has_high_risk = True
597
+
598
+ return {
599
+ "files": files_analysis,
600
+ "safe_to_auto_merge": not has_high_risk,
601
+ "user_action_required": has_high_risk,
602
+ "summary": f"{len(files_analysis)} files changed (fallback analysis)",
603
+ "risk_assessment": ("High - Claude unavailable, manual review recommended" if has_high_risk else "Low"),
604
+ "fallback": True,
605
+ }
@@ -0,0 +1,18 @@
1
+ """
2
+ Migration module for MoAI-ADK version upgrades
3
+
4
+ Handles automatic migration of configuration files and project structure
5
+ when upgrading between versions.
6
+ """
7
+
8
+ from .backup_manager import BackupManager
9
+ from .file_migrator import FileMigrator
10
+ from .version_detector import VersionDetector
11
+ from .version_migrator import VersionMigrator
12
+
13
+ __all__ = [
14
+ "VersionMigrator",
15
+ "VersionDetector",
16
+ "BackupManager",
17
+ "FileMigrator",
18
+ ]