moai-adk 0.15.1__py3-none-any.whl → 0.32.8__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (699) hide show
  1. moai_adk/__init__.py +2 -6
  2. moai_adk/__main__.py +136 -21
  3. moai_adk/cli/__init__.py +6 -2
  4. moai_adk/cli/commands/__init__.py +1 -4
  5. moai_adk/cli/commands/analyze.py +116 -0
  6. moai_adk/cli/commands/doctor.py +17 -5
  7. moai_adk/cli/commands/init.py +105 -47
  8. moai_adk/cli/commands/language.py +248 -0
  9. moai_adk/cli/commands/status.py +8 -13
  10. moai_adk/cli/commands/update.py +1734 -65
  11. moai_adk/cli/main.py +3 -2
  12. moai_adk/cli/prompts/init_prompts.py +144 -91
  13. moai_adk/cli/spec_status.py +263 -0
  14. moai_adk/cli/ui/__init__.py +44 -0
  15. moai_adk/cli/ui/progress.py +422 -0
  16. moai_adk/cli/ui/prompts.py +389 -0
  17. moai_adk/cli/ui/theme.py +129 -0
  18. moai_adk/cli/worktree/__init__.py +27 -0
  19. moai_adk/cli/worktree/__main__.py +31 -0
  20. moai_adk/cli/worktree/cli.py +672 -0
  21. moai_adk/cli/worktree/exceptions.py +89 -0
  22. moai_adk/cli/worktree/manager.py +490 -0
  23. moai_adk/cli/worktree/models.py +65 -0
  24. moai_adk/cli/worktree/registry.py +128 -0
  25. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  26. moai_adk/core/__init__.py +0 -1
  27. moai_adk/core/analysis/__init__.py +9 -0
  28. moai_adk/core/analysis/session_analyzer.py +400 -0
  29. moai_adk/core/claude_integration.py +393 -0
  30. moai_adk/core/command_helpers.py +270 -0
  31. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  32. moai_adk/core/config/__init__.py +6 -0
  33. moai_adk/core/config/auto_spec_config.py +340 -0
  34. moai_adk/core/config/migration.py +147 -16
  35. moai_adk/core/config/unified.py +436 -0
  36. moai_adk/core/context_manager.py +273 -0
  37. moai_adk/core/diagnostics/slash_commands.py +0 -1
  38. moai_adk/core/enterprise_features.py +1404 -0
  39. moai_adk/core/error_recovery_system.py +1902 -0
  40. moai_adk/core/event_driven_hook_system.py +1371 -0
  41. moai_adk/core/git/__init__.py +8 -1
  42. moai_adk/core/git/branch.py +0 -1
  43. moai_adk/core/git/branch_manager.py +2 -10
  44. moai_adk/core/git/checkpoint.py +1 -7
  45. moai_adk/core/git/commit.py +0 -1
  46. moai_adk/core/git/conflict_detector.py +413 -0
  47. moai_adk/core/git/event_detector.py +3 -5
  48. moai_adk/core/git/manager.py +91 -2
  49. moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
  50. moai_adk/core/input_validation_middleware.py +1006 -0
  51. moai_adk/core/integration/__init__.py +22 -0
  52. moai_adk/core/integration/engine.py +157 -0
  53. moai_adk/core/integration/integration_tester.py +226 -0
  54. moai_adk/core/integration/models.py +88 -0
  55. moai_adk/core/integration/utils.py +211 -0
  56. moai_adk/core/issue_creator.py +20 -28
  57. moai_adk/core/jit_context_loader.py +956 -0
  58. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  59. moai_adk/core/language_config.py +202 -0
  60. moai_adk/core/language_config_resolver.py +485 -0
  61. moai_adk/core/language_validator.py +543 -0
  62. moai_adk/core/mcp/setup.py +116 -0
  63. moai_adk/core/merge/__init__.py +9 -0
  64. moai_adk/core/merge/analyzer.py +481 -0
  65. moai_adk/core/migration/__init__.py +18 -0
  66. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  67. moai_adk/core/migration/backup_manager.py +277 -0
  68. moai_adk/core/migration/custom_element_scanner.py +358 -0
  69. moai_adk/core/migration/file_migrator.py +209 -0
  70. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  71. moai_adk/core/migration/selective_restorer.py +470 -0
  72. moai_adk/core/migration/template_utils.py +74 -0
  73. moai_adk/core/migration/user_selection_ui.py +338 -0
  74. moai_adk/core/migration/version_detector.py +139 -0
  75. moai_adk/core/migration/version_migrator.py +228 -0
  76. moai_adk/core/performance/__init__.py +6 -0
  77. moai_adk/core/performance/cache_system.py +316 -0
  78. moai_adk/core/performance/parallel_processor.py +116 -0
  79. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  80. moai_adk/core/project/__init__.py +0 -1
  81. moai_adk/core/project/backup_utils.py +2 -7
  82. moai_adk/core/project/checker.py +2 -4
  83. moai_adk/core/project/detector.py +17 -39
  84. moai_adk/core/project/initializer.py +170 -33
  85. moai_adk/core/project/phase_executor.py +398 -68
  86. moai_adk/core/project/validator.py +7 -32
  87. moai_adk/core/quality/__init__.py +1 -1
  88. moai_adk/core/quality/trust_checker.py +37 -101
  89. moai_adk/core/quality/validators/__init__.py +1 -1
  90. moai_adk/core/quality/validators/base_validator.py +1 -1
  91. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  92. moai_adk/core/robust_json_parser.py +611 -0
  93. moai_adk/core/rollback_manager.py +918 -0
  94. moai_adk/core/session_manager.py +651 -0
  95. moai_adk/core/skill_loading_system.py +579 -0
  96. moai_adk/core/spec/confidence_scoring.py +680 -0
  97. moai_adk/core/spec/ears_template_engine.py +1247 -0
  98. moai_adk/core/spec/quality_validator.py +687 -0
  99. moai_adk/core/spec_status_manager.py +478 -0
  100. moai_adk/core/template/__init__.py +0 -1
  101. moai_adk/core/template/backup.py +82 -17
  102. moai_adk/core/template/config.py +112 -40
  103. moai_adk/core/template/languages.py +0 -1
  104. moai_adk/core/template/merger.py +75 -26
  105. moai_adk/core/template/processor.py +750 -72
  106. moai_adk/core/template_engine.py +90 -48
  107. moai_adk/core/template_variable_synchronizer.py +417 -0
  108. moai_adk/core/unified_permission_manager.py +745 -0
  109. moai_adk/core/user_behavior_analytics.py +851 -0
  110. moai_adk/core/version_sync.py +429 -0
  111. moai_adk/foundation/__init__.py +56 -0
  112. moai_adk/foundation/backend.py +1027 -0
  113. moai_adk/foundation/database.py +1115 -0
  114. moai_adk/foundation/devops.py +1585 -0
  115. moai_adk/foundation/ears.py +431 -0
  116. moai_adk/foundation/frontend.py +870 -0
  117. moai_adk/foundation/git/commit_templates.py +557 -0
  118. moai_adk/foundation/git.py +376 -0
  119. moai_adk/foundation/langs.py +484 -0
  120. moai_adk/foundation/ml_ops.py +1162 -0
  121. moai_adk/foundation/testing.py +1524 -0
  122. moai_adk/foundation/trust/trust_principles.py +676 -0
  123. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  124. moai_adk/project/__init__.py +0 -0
  125. moai_adk/project/configuration.py +1084 -0
  126. moai_adk/project/documentation.py +566 -0
  127. moai_adk/project/schema.py +447 -0
  128. moai_adk/statusline/__init__.py +38 -0
  129. moai_adk/statusline/alfred_detector.py +105 -0
  130. moai_adk/statusline/config.py +373 -0
  131. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  132. moai_adk/statusline/git_collector.py +190 -0
  133. moai_adk/statusline/main.py +264 -0
  134. moai_adk/statusline/metrics_tracker.py +78 -0
  135. moai_adk/statusline/renderer.py +383 -0
  136. moai_adk/statusline/update_checker.py +129 -0
  137. moai_adk/statusline/version_reader.py +741 -0
  138. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
  139. moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
  140. moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
  141. moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
  142. moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
  143. moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
  144. moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
  145. moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
  146. moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
  147. moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
  148. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
  149. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
  150. moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
  151. moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
  152. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  153. moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
  154. moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
  155. moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
  156. moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
  157. moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
  158. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
  159. moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
  160. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
  161. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
  162. moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
  163. moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
  164. moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
  165. moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
  166. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  167. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  168. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  169. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  170. moai_adk/templates/.claude/hooks/{alfred/shared/core → moai/lib}/checkpoint.py +9 -36
  171. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  172. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  173. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  179. moai_adk/templates/.claude/hooks/{alfred/shared/core → moai/lib}/project.py +63 -44
  180. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  181. moai_adk/templates/.claude/hooks/{alfred/core → moai/lib}/timeout.py +40 -16
  182. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  183. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  184. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
  185. moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
  186. moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
  187. moai_adk/templates/.claude/settings.json +78 -50
  188. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
  189. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  190. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  191. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  192. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  193. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  194. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +312 -283
  195. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +291 -94
  196. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  197. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  198. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  199. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  200. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +469 -101
  201. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
  202. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  203. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  204. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  205. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
  206. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  207. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  208. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  209. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
  210. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  211. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  212. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  213. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  214. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  215. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  216. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
  217. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  218. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  219. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  220. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  221. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  222. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  223. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  224. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  225. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  226. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  227. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  228. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  229. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  230. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  231. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
  232. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
  233. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  253. moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
  254. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
  255. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
  256. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
  257. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
  258. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
  259. moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
  260. moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
  261. moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
  262. moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
  263. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
  264. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  265. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  266. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  267. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  268. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
  269. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  270. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  271. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  272. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  273. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  274. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  275. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  276. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  277. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  278. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  279. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
  280. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  281. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  282. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  283. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  284. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  285. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  286. moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
  287. moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
  288. moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
  289. moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
  290. moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
  291. moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
  292. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
  293. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  294. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  295. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  296. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
  297. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  298. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  299. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  300. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  301. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  302. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
  303. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  304. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  305. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  306. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  307. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  308. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  309. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  310. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  311. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  312. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  313. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  314. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
  315. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  316. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  317. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  318. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
  319. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  320. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  321. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  322. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  323. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  324. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  325. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
  326. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  327. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  328. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  329. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  330. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
  331. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  332. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  333. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  334. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  335. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  336. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  337. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  338. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  339. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  340. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  341. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  342. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  343. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  344. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  345. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  346. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  347. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
  348. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  349. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  350. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  351. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  352. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  353. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  354. moai_adk/templates/.git-hooks/pre-commit +128 -0
  355. moai_adk/templates/.git-hooks/pre-push +220 -13
  356. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  357. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  358. moai_adk/templates/.github/workflows/spec-issue-sync.yml +0 -1
  359. moai_adk/templates/.gitignore +197 -13
  360. moai_adk/templates/.mcp.json +20 -0
  361. moai_adk/templates/.moai/cache/personalization.json +10 -0
  362. moai_adk/templates/.moai/config/config.yaml +344 -0
  363. moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
  364. moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
  365. moai_adk/templates/.moai/config/presets/team.yaml +33 -0
  366. moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
  367. moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
  368. moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
  369. moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
  370. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
  371. moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
  372. moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
  373. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  374. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  375. moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
  376. moai_adk/templates/.moai/config/sections/system.yaml +14 -0
  377. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  378. moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
  379. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  380. moai_adk/templates/CLAUDE.md +310 -1050
  381. moai_adk/utils/__init__.py +24 -2
  382. moai_adk/utils/banner.py +7 -11
  383. moai_adk/utils/common.py +294 -0
  384. moai_adk/utils/link_validator.py +241 -0
  385. moai_adk/utils/logger.py +4 -9
  386. moai_adk/utils/safe_file_reader.py +206 -0
  387. moai_adk/{templates/.claude/hooks/alfred/utils → utils}/timeout.py +8 -9
  388. moai_adk/utils/toon_utils.py +256 -0
  389. moai_adk/version.py +22 -0
  390. moai_adk-0.32.8.dist-info/METADATA +2478 -0
  391. moai_adk-0.32.8.dist-info/RECORD +396 -0
  392. {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
  393. {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
  394. moai_adk/cli/commands/backup.py +0 -80
  395. moai_adk/core/tags/__init__.py +0 -86
  396. moai_adk/core/tags/ci_validator.py +0 -463
  397. moai_adk/core/tags/cli.py +0 -283
  398. moai_adk/core/tags/generator.py +0 -109
  399. moai_adk/core/tags/inserter.py +0 -99
  400. moai_adk/core/tags/mapper.py +0 -126
  401. moai_adk/core/tags/parser.py +0 -76
  402. moai_adk/core/tags/pre_commit_validator.py +0 -393
  403. moai_adk/core/tags/reporter.py +0 -956
  404. moai_adk/core/tags/tags.py +0 -149
  405. moai_adk/core/tags/validator.py +0 -897
  406. moai_adk/templates/.claude/agents/alfred/backend-expert.md +0 -319
  407. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -316
  408. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -208
  409. moai_adk/templates/.claude/agents/alfred/devops-expert.md +0 -464
  410. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -214
  411. moai_adk/templates/.claude/agents/alfred/frontend-expert.md +0 -357
  412. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -406
  413. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -423
  414. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -312
  415. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -343
  416. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -865
  417. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -426
  418. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -361
  419. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -428
  420. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -375
  421. moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +0 -571
  422. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1854
  423. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -880
  424. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -793
  425. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -1084
  426. moai_adk/templates/.claude/commands/alfred/9-feedback.md +0 -149
  427. moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -748
  428. moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +0 -108
  429. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +0 -198
  430. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -29
  431. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +0 -94
  432. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +0 -100
  433. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +0 -94
  434. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +0 -94
  435. moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +0 -170
  436. moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +0 -67
  437. moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +0 -230
  438. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +0 -198
  439. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +0 -21
  440. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +0 -154
  441. moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +0 -174
  442. moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +0 -87
  443. moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +0 -61
  444. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +0 -112
  445. moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +0 -1
  446. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +0 -70
  447. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +0 -62
  448. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +0 -242
  449. moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +0 -56
  450. moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +0 -28
  451. moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +0 -444
  452. moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +0 -62
  453. moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +0 -28
  454. moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +0 -405
  455. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +0 -51
  456. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +0 -355
  457. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +0 -239
  458. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  459. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  460. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  461. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +0 -323
  462. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +0 -286
  463. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +0 -126
  464. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  465. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  466. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  467. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/SKILL.md +0 -74
  468. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +0 -4
  469. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +0 -269
  470. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  471. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  472. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  473. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +0 -19
  474. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +0 -4
  475. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +0 -150
  476. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  477. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  478. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  479. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/SKILL.md +0 -198
  480. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +0 -431
  481. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +0 -141
  482. moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +0 -89
  483. moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +0 -122
  484. moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +0 -369
  485. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +0 -508
  486. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +0 -481
  487. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +0 -100
  488. moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +0 -273
  489. moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +0 -77
  490. moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +0 -265
  491. moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +0 -539
  492. moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +0 -19
  493. moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +0 -4
  494. moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +0 -84
  495. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +0 -137
  496. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +0 -219
  497. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +0 -161
  498. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +0 -541
  499. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +0 -622
  500. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +0 -115
  501. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +0 -4
  502. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +0 -348
  503. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  504. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  505. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  506. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  507. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  508. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  509. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +0 -19
  510. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +0 -4
  511. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +0 -211
  512. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
  513. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
  514. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
  515. moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +0 -288
  516. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
  517. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  518. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  519. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  520. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  521. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  522. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  523. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  524. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  525. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  526. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  527. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  528. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  529. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  530. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  531. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  532. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/SKILL.md +0 -19
  533. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +0 -4
  534. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/reference.md +0 -218
  535. moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +0 -482
  536. moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +0 -278
  537. moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  538. moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +0 -477
  539. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  540. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  541. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  542. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  543. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +0 -271
  544. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  545. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +0 -583
  546. moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +0 -526
  547. moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +0 -465
  548. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +0 -328
  549. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +0 -312
  550. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  551. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +0 -285
  552. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +0 -278
  553. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +0 -303
  554. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  555. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  556. moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +0 -802
  557. moai_adk/templates/.claude/skills/moai-design-systems/examples.md +0 -1238
  558. moai_adk/templates/.claude/skills/moai-design-systems/reference.md +0 -673
  559. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +0 -1633
  560. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +0 -660
  561. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  562. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  563. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  564. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  565. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  566. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  567. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +0 -29
  568. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +0 -30
  569. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  570. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  571. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  572. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +0 -29
  573. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +0 -31
  574. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  575. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  576. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  577. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  578. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  579. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  580. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  581. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  582. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  583. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  584. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  585. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  586. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  587. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  588. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  589. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  590. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  591. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  592. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  593. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  594. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  595. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  596. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  597. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  598. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -116
  599. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  600. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  601. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  602. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  603. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  604. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  605. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  606. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  607. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  608. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  609. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  610. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  611. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  612. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  613. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  614. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  615. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  616. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  617. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  618. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  619. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +0 -124
  620. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
  621. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
  622. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +0 -123
  623. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
  624. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
  625. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  626. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  627. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  628. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +0 -127
  629. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +0 -29
  630. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +0 -31
  631. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +0 -126
  632. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +0 -29
  633. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +0 -31
  634. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
  635. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
  636. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
  637. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +0 -124
  638. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +0 -29
  639. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +0 -31
  640. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +0 -126
  641. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
  642. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
  643. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +0 -433
  644. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +0 -624
  645. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +0 -316
  646. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +0 -123
  647. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
  648. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
  649. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +0 -124
  650. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
  651. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
  652. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +0 -127
  653. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +0 -29
  654. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +0 -31
  655. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +0 -125
  656. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +0 -29
  657. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +0 -30
  658. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  659. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  660. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  661. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  662. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  663. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  664. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +0 -123
  665. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +0 -29
  666. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +0 -30
  667. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +0 -133
  668. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +0 -29
  669. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +0 -34
  670. moai_adk/templates/.claude/skills/moai-project-documentation.md +0 -622
  671. moai_adk/templates/.github/workflows/c-tag-validation.yml +0 -11
  672. moai_adk/templates/.github/workflows/cpp-tag-validation.yml +0 -11
  673. moai_adk/templates/.github/workflows/csharp-tag-validation.yml +0 -11
  674. moai_adk/templates/.github/workflows/dart-tag-validation.yml +0 -11
  675. moai_adk/templates/.github/workflows/go-tag-validation.yml +0 -130
  676. moai_adk/templates/.github/workflows/java-tag-validation.yml +0 -11
  677. moai_adk/templates/.github/workflows/javascript-tag-validation.yml +0 -135
  678. moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +0 -11
  679. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -419
  680. moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
  681. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
  682. moai_adk/templates/.github/workflows/php-tag-validation.yml +0 -11
  683. moai_adk/templates/.github/workflows/python-tag-validation.yml +0 -118
  684. moai_adk/templates/.github/workflows/release.yml +0 -118
  685. moai_adk/templates/.github/workflows/ruby-tag-validation.yml +0 -11
  686. moai_adk/templates/.github/workflows/rust-tag-validation.yml +0 -11
  687. moai_adk/templates/.github/workflows/shell-tag-validation.yml +0 -11
  688. moai_adk/templates/.github/workflows/swift-tag-validation.yml +0 -11
  689. moai_adk/templates/.github/workflows/tag-report.yml +0 -269
  690. moai_adk/templates/.github/workflows/tag-validation.yml +0 -186
  691. moai_adk/templates/.github/workflows/typescript-tag-validation.yml +0 -154
  692. moai_adk/templates/.moai/config.json +0 -115
  693. moai_adk/templates/workflows/go-tag-validation.yml +0 -30
  694. moai_adk/templates/workflows/javascript-tag-validation.yml +0 -41
  695. moai_adk/templates/workflows/python-tag-validation.yml +0 -42
  696. moai_adk/templates/workflows/typescript-tag-validation.yml +0 -31
  697. moai_adk-0.15.1.dist-info/METADATA +0 -3094
  698. moai_adk-0.15.1.dist-info/RECORD +0 -365
  699. {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,383 @@
1
+ """
2
+ Alfred to Moai folder structure migration for MoAI-ADK
3
+
4
+ Handles automatic migration from legacy alfred/ folders to new moai/ structure.
5
+ - Creates backup before migration
6
+ - Installs fresh moai/ templates from package
7
+ - Deletes alfred/ folders
8
+ - Updates settings.json Hook paths
9
+ - Records migration status in config.json
10
+ - Provides automatic rollback on failure
11
+ """
12
+
13
+ import json
14
+ import logging
15
+ import shutil
16
+ from datetime import datetime
17
+ from pathlib import Path
18
+ from typing import Optional
19
+
20
+ from .backup_manager import BackupManager
21
+
22
+ logger = logging.getLogger(__name__)
23
+
24
+
25
+ class AlfredToMoaiMigrator:
26
+ """Handles automatic migration from Alfred to Moai folder structure"""
27
+
28
+ def __init__(self, project_root: Path):
29
+ """
30
+ Initialize Alfred to Moai migrator
31
+
32
+ Args:
33
+ project_root: Root directory of the project
34
+ """
35
+ self.project_root = Path(project_root)
36
+ self.claude_root = self.project_root / ".claude"
37
+ self.config_path = self.project_root / ".moai" / "config" / "config.json"
38
+ self.settings_path = self.claude_root / "settings.json"
39
+ self.backup_manager = BackupManager(project_root)
40
+
41
+ # Define folder paths
42
+ self.alfred_folders = {
43
+ "commands": self.claude_root / "commands" / "alfred",
44
+ "agents": self.claude_root / "agents" / "alfred",
45
+ "hooks": self.claude_root / "hooks" / "alfred",
46
+ }
47
+
48
+ self.moai_folders = {
49
+ "commands": self.claude_root / "commands" / "moai",
50
+ "agents": self.claude_root / "agents" / "moai",
51
+ "hooks": self.claude_root / "hooks" / "moai",
52
+ }
53
+
54
+ def _load_config(self) -> dict:
55
+ """
56
+ Load config.json
57
+
58
+ Returns:
59
+ Dictionary from config.json, or empty dict if not found
60
+ """
61
+ if not self.config_path.exists():
62
+ return {}
63
+
64
+ try:
65
+ return json.loads(self.config_path.read_text(encoding="utf-8"))
66
+ except Exception as e:
67
+ logger.warning(f"Failed to load config.json: {e}")
68
+ return {}
69
+
70
+ def _save_config(self, config: dict) -> None:
71
+ """
72
+ Save config.json
73
+
74
+ Args:
75
+ config: Configuration dictionary to save
76
+
77
+ Raises:
78
+ Exception: If save fails
79
+ """
80
+ self.config_path.parent.mkdir(parents=True, exist_ok=True)
81
+ self.config_path.write_text(json.dumps(config, indent=2, ensure_ascii=False))
82
+
83
+ def needs_migration(self) -> bool:
84
+ """
85
+ Check if Alfred to Moai migration is needed
86
+
87
+ Returns:
88
+ True if migration is needed, False otherwise
89
+ """
90
+ # Check if already migrated
91
+ try:
92
+ config = self._load_config()
93
+ migration_state = config.get("migration", {}).get("alfred_to_moai", {})
94
+ if migration_state.get("migrated"):
95
+ logger.info("ℹ️ Alfred → Moai migration already completed")
96
+ if migration_state.get("timestamp"):
97
+ logger.info(f"Timestamp: {migration_state['timestamp']}")
98
+ return False
99
+ except Exception as e:
100
+ logger.debug(f"Config check error: {e}")
101
+
102
+ # Check if any alfred folder exists
103
+ has_alfred = any(folder.exists() for folder in self.alfred_folders.values())
104
+
105
+ if has_alfred:
106
+ detected = [name for name, folder in self.alfred_folders.items() if folder.exists()]
107
+ logger.debug(f"Alfred folders detected: {', '.join(detected)}")
108
+
109
+ return has_alfred
110
+
111
+ def execute_migration(self, backup_path: Optional[Path] = None) -> bool:
112
+ """
113
+ Execute Alfred to Moai migration
114
+
115
+ Args:
116
+ backup_path: Path to use for backup (if None, creates new backup)
117
+
118
+ Returns:
119
+ True if migration successful, False otherwise
120
+ """
121
+ try:
122
+ logger.info("\n[1/5] Backing up project...")
123
+
124
+ # Step 1: Create or use existing backup
125
+ if backup_path is None:
126
+ try:
127
+ backup_path = self.backup_manager.create_backup("alfred_to_moai_migration")
128
+ logger.info(f"✅ Backup completed: {backup_path}")
129
+ except Exception as e:
130
+ logger.error("❌ Error: Backup failed")
131
+ logger.error(f"Cause: {str(e)}")
132
+ return False
133
+ else:
134
+ logger.info(f"✅ Using existing backup: {backup_path}")
135
+
136
+ # Step 2: Detect alfred folders
137
+ logger.info("\n[2/5] Alfred folders detected:")
138
+ alfred_detected = {name: folder for name, folder in self.alfred_folders.items() if folder.exists()}
139
+
140
+ if not alfred_detected:
141
+ logger.warning("No Alfred folders found - skipping migration")
142
+ return True
143
+
144
+ logger.info(", ".join(alfred_detected.keys()))
145
+
146
+ # Step 3: Verify moai folders exist (should be created in Phase 1)
147
+ logger.info("\n[3/5] Verifying Moai template installation...")
148
+ missing_moai = [name for name, folder in self.moai_folders.items() if not folder.exists()]
149
+
150
+ if missing_moai:
151
+ logger.error(f"❌ Missing Moai folders: {', '.join(missing_moai)}")
152
+ logger.error("Phase 1 implementation required first (package template moai structure)")
153
+ self._rollback_migration(backup_path)
154
+ return False
155
+
156
+ logger.info("✅ Moai templates installed")
157
+
158
+ # Step 4: Update settings.json hooks
159
+ logger.info("\n[4/5] Updating paths...")
160
+ try:
161
+ self._update_settings_json_hooks()
162
+ logger.info("✅ settings.json Hook paths updated")
163
+ except Exception as e:
164
+ logger.error("❌ Error: Failed to update settings.json")
165
+ logger.error(f"Cause: {str(e)}")
166
+ self._rollback_migration(backup_path)
167
+ return False
168
+
169
+ # Step 5: Delete alfred folders
170
+ logger.info("\n[5/5] Cleaning up...")
171
+ try:
172
+ self._delete_alfred_folders(alfred_detected)
173
+ logger.info("✅ Alfred folders deleted")
174
+ except Exception as e:
175
+ logger.error("❌ Error: Failed to delete Alfred folders")
176
+ logger.error(f"Cause: {str(e)}")
177
+ self._rollback_migration(backup_path)
178
+ return False
179
+
180
+ # Step 6: Verify migration
181
+ logger.info("\n[6/6] Verifying migration...")
182
+ if not self._verify_migration():
183
+ logger.error("❌ Migration verification failed")
184
+ self._rollback_migration(backup_path)
185
+ return False
186
+
187
+ logger.info("✅ Migration verification passed")
188
+
189
+ # Step 7: Record migration status
190
+ logger.info("\nRecording migration status...")
191
+ try:
192
+ self._record_migration_state(backup_path, len(alfred_detected))
193
+ logger.info("✅ Migration status recorded")
194
+ except Exception as e:
195
+ logger.warning(f"⚠️ Failed to record status: {str(e)}")
196
+ # Don't rollback for this, migration was successful
197
+
198
+ logger.info("\n✅ Alfred → Moai migration completed!")
199
+ return True
200
+
201
+ except Exception as e:
202
+ logger.error(f"\n❌ Unexpected error: {str(e)}")
203
+ if backup_path:
204
+ self._rollback_migration(backup_path)
205
+ return False
206
+
207
+ def _delete_alfred_folders(self, alfred_detected: dict) -> None:
208
+ """
209
+ Delete Alfred folders
210
+
211
+ Args:
212
+ alfred_detected: Dictionary of detected alfred folders
213
+
214
+ Raises:
215
+ Exception: If deletion fails
216
+ """
217
+ for name, folder in alfred_detected.items():
218
+ if folder.exists():
219
+ try:
220
+ shutil.rmtree(folder)
221
+ logger.debug(f"Deleted: {folder}")
222
+ except Exception as e:
223
+ raise Exception(f"Failed to delete {name} folder: {str(e)}")
224
+
225
+ def _update_settings_json_hooks(self) -> None:
226
+ """
227
+ Update settings.json to replace alfred paths with moai paths
228
+
229
+ Raises:
230
+ Exception: If update fails
231
+ """
232
+ if not self.settings_path.exists():
233
+ logger.warning(f"settings.json file missing: {self.settings_path}")
234
+ return
235
+
236
+ try:
237
+ # Read settings.json
238
+ with open(self.settings_path, "r", encoding="utf-8") as f:
239
+ settings_content = f.read()
240
+
241
+ # Replace all alfred references with moai
242
+ # Pattern: .claude/hooks/alfred/ → .claude/hooks/moai/
243
+ updated_content = settings_content.replace(".claude/hooks/alfred/", ".claude/hooks/moai/")
244
+ updated_content = updated_content.replace(".claude/commands/alfred/", ".claude/commands/moai/")
245
+ updated_content = updated_content.replace(".claude/agents/alfred/", ".claude/agents/moai/")
246
+
247
+ # Write back to file
248
+ with open(self.settings_path, "w", encoding="utf-8") as f:
249
+ f.write(updated_content)
250
+
251
+ # Verify JSON validity
252
+ with open(self.settings_path, "r", encoding="utf-8") as f:
253
+ json.load(f) # This will raise if JSON is invalid
254
+
255
+ logger.debug("settings.json update and verification completed")
256
+
257
+ except json.JSONDecodeError as e:
258
+ raise Exception(f"settings.json JSON format error: {str(e)}")
259
+ except Exception as e:
260
+ raise Exception(f"Failed to update settings.json: {str(e)}")
261
+
262
+ def _verify_migration(self) -> bool:
263
+ """
264
+ Verify migration was successful
265
+
266
+ Returns:
267
+ True if migration is valid, False otherwise
268
+ """
269
+ # Check moai folders exist
270
+ for name, folder in self.moai_folders.items():
271
+ if not folder.exists():
272
+ logger.error(f"❌ Missing Moai {name} folder: {folder}")
273
+ return False
274
+
275
+ # Check alfred folders are deleted
276
+ for name, folder in self.alfred_folders.items():
277
+ if folder.exists():
278
+ logger.warning(f"⚠️ Alfred {name} folder still exists: {folder}")
279
+ return False
280
+
281
+ # Check settings.json hooks paths (ignore pattern matching strings like "Bash(alfred:*)")
282
+ if self.settings_path.exists():
283
+ try:
284
+ with open(self.settings_path, "r", encoding="utf-8") as f:
285
+ settings_content = f.read()
286
+
287
+ # Only check for hooks/alfred paths, not pattern strings
288
+ if (
289
+ ".claude/hooks/alfred/" in settings_content
290
+ or ".claude/commands/alfred/" in settings_content
291
+ or ".claude/agents/alfred/" in settings_content
292
+ ):
293
+ logger.error("❌ settings.json still contains alfred hook paths")
294
+ return False
295
+
296
+ if "moai" not in settings_content.lower():
297
+ logger.warning("⚠️ No moai references in settings.json")
298
+
299
+ except Exception as e:
300
+ logger.error(f"❌ settings.json verification failed: {str(e)}")
301
+ return False
302
+
303
+ logger.debug("Migration verification completed")
304
+ return True
305
+
306
+ def _record_migration_state(self, backup_path: Path, folders_count: int) -> None:
307
+ """
308
+ Record migration state in config.json
309
+
310
+ Args:
311
+ backup_path: Path to the backup
312
+ folders_count: Number of folders migrated
313
+
314
+ Raises:
315
+ Exception: If recording fails
316
+ """
317
+ try:
318
+ config = self._load_config()
319
+
320
+ # Initialize migration section if not exists
321
+ if "migration" not in config:
322
+ config["migration"] = {}
323
+
324
+ config["migration"]["alfred_to_moai"] = {
325
+ "migrated": True,
326
+ "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
327
+ "folders_installed": 3, # commands, agents, hooks
328
+ "folders_removed": folders_count,
329
+ "backup_path": str(backup_path),
330
+ "package_version": self._get_package_version(),
331
+ }
332
+
333
+ self._save_config(config)
334
+ logger.debug("Migration state recorded in config.json")
335
+
336
+ except Exception as e:
337
+ raise Exception(f"Migration state recording failed: {str(e)}")
338
+
339
+ def _rollback_migration(self, backup_path: Path) -> None:
340
+ """
341
+ Rollback migration from backup
342
+
343
+ Args:
344
+ backup_path: Path to the backup to restore from
345
+ """
346
+ try:
347
+ logger.info("\n🔄 Starting automatic rollback...")
348
+ logger.info("[1/3] Restoring project...")
349
+
350
+ # Restore from backup
351
+ self.backup_manager.restore_backup(backup_path)
352
+
353
+ logger.info("✅ Project restored")
354
+ logger.info("[2/3] Resetting migration state...")
355
+
356
+ # Clear migration state in config
357
+ try:
358
+ config = self._load_config()
359
+ if "migration" in config and "alfred_to_moai" in config["migration"]:
360
+ del config["migration"]["alfred_to_moai"]
361
+ self._save_config(config)
362
+ except Exception as e:
363
+ logger.warning(f"⚠️ Failed to reset state: {str(e)}")
364
+
365
+ logger.info("✅ Rollback completed")
366
+ logger.info("💡 Tip: Run `moai-adk update` again after resolving the error")
367
+
368
+ except Exception as e:
369
+ logger.error(f"\n❌ Rollback failed: {str(e)}")
370
+ logger.error(f"⚠️ Manual recovery required: Please restore manually from backup: {backup_path}")
371
+
372
+ def _get_package_version(self) -> str:
373
+ """
374
+ Get current package version
375
+
376
+ Returns:
377
+ Version string
378
+ """
379
+ try:
380
+ config = self._load_config()
381
+ return config.get("moai", {}).get("version", "unknown")
382
+ except Exception:
383
+ return "unknown"
@@ -0,0 +1,277 @@
1
+ """
2
+ Backup management module for MoAI-ADK migrations
3
+
4
+ Creates and manages backups during migration processes
5
+ to ensure data safety and enable rollback.
6
+ """
7
+
8
+ import json
9
+ import logging
10
+ import shutil
11
+ from datetime import datetime
12
+ from pathlib import Path
13
+ from typing import Any, Dict, List, Optional
14
+
15
+ logger = logging.getLogger(__name__)
16
+
17
+
18
+ class BackupManager:
19
+ """Manages backup creation and restoration for migrations"""
20
+
21
+ def __init__(self, project_root: Path):
22
+ """
23
+ Initialize backup manager
24
+
25
+ Args:
26
+ project_root: Root directory of the project
27
+ """
28
+ self.project_root = Path(project_root)
29
+ self.backup_base_dir = self.project_root / ".moai" / "backups"
30
+ self.backup_base_dir.mkdir(parents=True, exist_ok=True)
31
+
32
+ def create_backup(self, description: str = "migration") -> Path:
33
+ """
34
+ Create a full backup of configuration files
35
+
36
+ Args:
37
+ description: Description of this backup
38
+
39
+ Returns:
40
+ Path to the backup directory
41
+ """
42
+ # Create timestamped backup directory
43
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
44
+ backup_dir = self.backup_base_dir / f"{description}_{timestamp}"
45
+ backup_dir.mkdir(parents=True, exist_ok=True)
46
+
47
+ logger.info(f"Creating backup at {backup_dir}")
48
+
49
+ # Files to backup
50
+ backup_targets = [
51
+ self.project_root / ".moai" / "config.json",
52
+ self.project_root / ".moai" / "config" / "config.json",
53
+ self.project_root / ".claude" / "statusline-config.yaml",
54
+ self.project_root / ".moai" / "config" / "statusline-config.yaml",
55
+ ]
56
+
57
+ backed_up_files = []
58
+
59
+ for target in backup_targets:
60
+ if target.exists():
61
+ # Preserve relative path structure in backup
62
+ rel_path = target.relative_to(self.project_root)
63
+ backup_path = backup_dir / rel_path
64
+
65
+ # Create parent directories
66
+ backup_path.parent.mkdir(parents=True, exist_ok=True)
67
+
68
+ # Copy file
69
+ shutil.copy2(target, backup_path)
70
+ backed_up_files.append(str(rel_path))
71
+ logger.debug(f"Backed up: {rel_path}")
72
+
73
+ # Save backup metadata
74
+ metadata = {
75
+ "timestamp": timestamp,
76
+ "description": description,
77
+ "backed_up_files": backed_up_files,
78
+ "project_root": str(self.project_root),
79
+ }
80
+
81
+ metadata_path = backup_dir / "backup_metadata.json"
82
+ with open(metadata_path, "w", encoding="utf-8") as f:
83
+ json.dump(metadata, f, indent=2, ensure_ascii=False)
84
+
85
+ logger.info(f"✅ Backup created successfully: {backup_dir}")
86
+ return backup_dir
87
+
88
+ def list_backups(self) -> List[Dict[str, str]]:
89
+ """
90
+ List all available backups
91
+
92
+ Returns:
93
+ List of backup information dictionaries
94
+ """
95
+ backups: List[Dict[str, Any]] = []
96
+
97
+ if not self.backup_base_dir.exists():
98
+ return backups
99
+
100
+ for backup_dir in sorted(self.backup_base_dir.iterdir(), reverse=True):
101
+ if backup_dir.is_dir():
102
+ metadata_path = backup_dir / "backup_metadata.json"
103
+ if metadata_path.exists():
104
+ try:
105
+ with open(metadata_path, "r", encoding="utf-8") as f:
106
+ metadata = json.load(f)
107
+ backups.append(
108
+ {
109
+ "path": str(backup_dir),
110
+ "timestamp": metadata.get("timestamp", "unknown"),
111
+ "description": metadata.get("description", "unknown"),
112
+ "files": len(metadata.get("backed_up_files", [])),
113
+ }
114
+ )
115
+ except Exception as e:
116
+ logger.warning(f"Failed to read backup metadata: {e}")
117
+
118
+ return backups
119
+
120
+ def restore_backup(self, backup_path: Path) -> bool:
121
+ """
122
+ Restore files from a backup
123
+
124
+ Args:
125
+ backup_path: Path to the backup directory
126
+
127
+ Returns:
128
+ True if restore was successful, False otherwise
129
+ """
130
+ backup_path = Path(backup_path)
131
+
132
+ if not backup_path.exists():
133
+ logger.error(f"Backup directory not found: {backup_path}")
134
+ return False
135
+
136
+ metadata_path = backup_path / "backup_metadata.json"
137
+ if not metadata_path.exists():
138
+ logger.error(f"Backup metadata not found: {metadata_path}")
139
+ return False
140
+
141
+ try:
142
+ # Read metadata
143
+ with open(metadata_path, "r", encoding="utf-8") as f:
144
+ metadata = json.load(f)
145
+
146
+ logger.info(f"Restoring backup from {backup_path}")
147
+
148
+ # Restore each file
149
+ for rel_path in metadata.get("backed_up_files", []):
150
+ backup_file = backup_path / rel_path
151
+ target_file = self.project_root / rel_path
152
+
153
+ if backup_file.exists():
154
+ # Create parent directories
155
+ target_file.parent.mkdir(parents=True, exist_ok=True)
156
+
157
+ # Restore file
158
+ shutil.copy2(backup_file, target_file)
159
+ logger.debug(f"Restored: {rel_path}")
160
+
161
+ logger.info("✅ Backup restored successfully")
162
+ return True
163
+
164
+ except Exception as e:
165
+ logger.error(f"Failed to restore backup: {e}")
166
+ return False
167
+
168
+ def cleanup_old_backups(self, keep_count: int = 5) -> int:
169
+ """
170
+ Clean up old backups, keeping only the most recent ones
171
+
172
+ Args:
173
+ keep_count: Number of recent backups to keep
174
+
175
+ Returns:
176
+ Number of backups deleted
177
+ """
178
+ backups = self.list_backups()
179
+
180
+ if len(backups) <= keep_count:
181
+ return 0
182
+
183
+ deleted_count = 0
184
+ for backup_info in backups[keep_count:]:
185
+ backup_path = Path(backup_info["path"])
186
+ try:
187
+ shutil.rmtree(backup_path)
188
+ deleted_count += 1
189
+ logger.debug(f"Deleted old backup: {backup_path}")
190
+ except Exception as e:
191
+ logger.warning(f"Failed to delete backup {backup_path}: {e}")
192
+
193
+ logger.info(f"Cleaned up {deleted_count} old backups")
194
+ return deleted_count
195
+
196
+ def get_latest_backup(self) -> Optional[Path]:
197
+ """
198
+ Get the most recent backup
199
+
200
+ Returns:
201
+ Path to the latest backup directory, or None if no backups exist
202
+ """
203
+ backups = self.list_backups()
204
+ if backups:
205
+ return Path(backups[0]["path"])
206
+ return None
207
+
208
+ def create_full_project_backup(self, description: str = "pre-update-backup") -> Path:
209
+ """
210
+ Create a complete backup of entire project structure before update
211
+
212
+ Backs up:
213
+ - .claude/ (entire directory)
214
+ - .moai/ (entire directory)
215
+ - CLAUDE.md (file)
216
+
217
+ Args:
218
+ description: Description of this backup (default: "pre-update-backup")
219
+
220
+ Returns:
221
+ Path to the backup directory
222
+ """
223
+ # Create timestamped backup directory
224
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
225
+ backup_dir = self.project_root / ".moai-backups" / f"{description}_{timestamp}"
226
+ backup_dir.mkdir(parents=True, exist_ok=True)
227
+
228
+ logger.info(f"Creating full project backup at {backup_dir}")
229
+
230
+ # Directories and files to backup
231
+ backup_targets = [
232
+ (self.project_root / ".claude", True), # (path, is_directory)
233
+ (self.project_root / ".moai", True),
234
+ (self.project_root / "CLAUDE.md", False),
235
+ ]
236
+
237
+ backed_up_items = []
238
+
239
+ for target_path, is_dir in backup_targets:
240
+ if not target_path.exists():
241
+ continue
242
+
243
+ try:
244
+ rel_path = target_path.relative_to(self.project_root)
245
+ backup_path = backup_dir / rel_path
246
+
247
+ if is_dir:
248
+ # Backup directory
249
+ shutil.copytree(target_path, backup_path, dirs_exist_ok=True)
250
+ backed_up_items.append(str(rel_path))
251
+ logger.debug(f"Backed up directory: {rel_path}")
252
+ else:
253
+ # Backup file
254
+ backup_path.parent.mkdir(parents=True, exist_ok=True)
255
+ shutil.copy2(target_path, backup_path)
256
+ backed_up_items.append(str(rel_path))
257
+ logger.debug(f"Backed up file: {rel_path}")
258
+
259
+ except Exception as e:
260
+ logger.error(f"Failed to backup {target_path}: {e}")
261
+ raise
262
+
263
+ # Save backup metadata
264
+ metadata = {
265
+ "timestamp": timestamp,
266
+ "description": description,
267
+ "backed_up_items": backed_up_items,
268
+ "project_root": str(self.project_root),
269
+ "backup_type": "full_project",
270
+ }
271
+
272
+ metadata_path = backup_dir / "backup_metadata.json"
273
+ with open(metadata_path, "w", encoding="utf-8") as f:
274
+ json.dump(metadata, f, indent=2, ensure_ascii=False)
275
+
276
+ logger.info(f"✅ Full project backup created successfully: {backup_dir}")
277
+ return backup_dir