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,716 @@
1
+ # type: ignore
2
+ """Phase-based installation executor (SPEC-INIT-003 v0.4.2)
3
+
4
+ Runs the project initialization across five phases:
5
+ - Phase 1: Preparation (create single backup at .moai-backups/backup/)
6
+ - Phase 2: Directory (build directory structure)
7
+ - Phase 3: Resource (copy templates while preserving user content)
8
+ - Phase 4: Configuration (generate configuration files)
9
+ - Phase 5: Validation (verify and finalize)
10
+
11
+ Test coverage includes 5-phase integration tests with backup, configuration, and validation
12
+ """
13
+
14
+ import json
15
+ import logging
16
+ import platform
17
+ import shutil
18
+ import subprocess
19
+ from collections.abc import Callable
20
+ from datetime import datetime
21
+ from pathlib import Path
22
+ from typing import Any
23
+
24
+ from rich.console import Console
25
+
26
+ from moai_adk import __version__
27
+ from moai_adk.core.project.backup_utils import (
28
+ get_backup_targets,
29
+ has_any_moai_files,
30
+ is_protected_path,
31
+ )
32
+ from moai_adk.core.project.validator import ProjectValidator
33
+ from moai_adk.core.template.processor import TemplateProcessor
34
+ from moai_adk.statusline.version_reader import VersionConfig, VersionReader
35
+
36
+ console = Console()
37
+
38
+ # Progress callback type alias
39
+ ProgressCallback = Callable[[str, int, int], None]
40
+
41
+
42
+ class PhaseExecutor:
43
+ """Execute the installation across the five phases.
44
+
45
+ Phases:
46
+ 1. Preparation: Back up and verify the system.
47
+ 2. Directory: Create the directory structure.
48
+ 3. Resource: Copy template resources.
49
+ 4. Configuration: Generate configuration files.
50
+ 5. Validation: Perform final checks.
51
+
52
+ Enhanced with improved version reading and context management.
53
+ """
54
+
55
+ # Required directory structure
56
+ REQUIRED_DIRECTORIES = [
57
+ ".moai/",
58
+ ".moai/project/",
59
+ ".moai/specs/",
60
+ ".moai/reports/",
61
+ ".moai/memory/",
62
+ ".claude/",
63
+ ".claude/logs/",
64
+ ".github/",
65
+ ]
66
+
67
+ def __init__(self, validator: ProjectValidator) -> None:
68
+ """Initialize the executor.
69
+
70
+ Args:
71
+ validator: Project validation helper.
72
+ """
73
+ self.validator = validator
74
+ self.total_phases = 5
75
+ self.current_phase = 0
76
+ self._version_reader: VersionReader | None = None
77
+
78
+ def _get_version_reader(self) -> VersionReader:
79
+ """
80
+ Get or create version reader instance.
81
+
82
+ Returns:
83
+ VersionReader instance with enhanced configuration
84
+ """
85
+ if self._version_reader is None:
86
+ config = VersionConfig(
87
+ cache_ttl_seconds=120, # Longer cache for phase execution
88
+ fallback_version=__version__,
89
+ version_format_regex=r"^v?(\d+\.\d+\.\d+(-[a-zA-Z0-9]+)?)$",
90
+ cache_enabled=True,
91
+ debug_mode=False,
92
+ )
93
+ self._version_reader = VersionReader(config)
94
+ return self._version_reader
95
+
96
+ def _get_enhanced_version_context(self) -> dict[str, str]:
97
+ """
98
+ Get enhanced version context with fallback strategies and comprehensive configuration.
99
+
100
+ Returns:
101
+ Dictionary containing version-related template variables with enhanced formatting
102
+ """
103
+ version_context = {}
104
+ logger = logging.getLogger(__name__)
105
+
106
+ try:
107
+ version_reader = self._get_version_reader()
108
+ moai_version = version_reader.get_version()
109
+
110
+ # Enhanced version context with multiple format options
111
+ version_context["MOAI_VERSION"] = moai_version
112
+ version_context["MOAI_VERSION_SHORT"] = self._format_short_version(moai_version)
113
+ version_context["MOAI_VERSION_DISPLAY"] = self._format_display_version(moai_version)
114
+ version_context["MOAI_VERSION_TRIMMED"] = self._format_trimmed_version(moai_version, max_length=10)
115
+ version_context["MOAI_VERSION_SEMVER"] = self._format_semver_version(moai_version)
116
+ version_context["MOAI_VERSION_VALID"] = "true" if moai_version != "unknown" else "false"
117
+ version_context["MOAI_VERSION_SOURCE"] = self._get_version_source(version_reader)
118
+
119
+ # Add performance metrics for debugging
120
+ cache_age = version_reader.get_cache_age_seconds()
121
+ if cache_age is not None:
122
+ version_context["MOAI_VERSION_CACHE_AGE"] = f"{cache_age:.2f}s"
123
+ else:
124
+ version_context["MOAI_VERSION_CACHE_AGE"] = "uncached"
125
+
126
+ except Exception as e:
127
+ logger.warning(f"Failed to read version for context: {e}")
128
+ # Use fallback version with comprehensive fallback formatting
129
+ fallback_version = __version__
130
+ version_context["MOAI_VERSION"] = fallback_version
131
+ version_context["MOAI_VERSION_SHORT"] = self._format_short_version(fallback_version)
132
+ version_context["MOAI_VERSION_DISPLAY"] = self._format_display_version(fallback_version)
133
+ version_context["MOAI_VERSION_TRIMMED"] = self._format_trimmed_version(fallback_version, max_length=10)
134
+ version_context["MOAI_VERSION_SEMVER"] = self._format_semver_version(fallback_version)
135
+ version_context["MOAI_VERSION_VALID"] = "true"
136
+ version_context["MOAI_VERSION_SOURCE"] = "fallback_package"
137
+ version_context["MOAI_VERSION_CACHE_AGE"] = "unavailable"
138
+
139
+ return version_context
140
+
141
+ def _format_short_version(self, version: str) -> str:
142
+ """
143
+ Format short version by removing 'v' prefix if present.
144
+
145
+ Args:
146
+ version: Version string
147
+
148
+ Returns:
149
+ Short version string
150
+ """
151
+ return version[1:] if version.startswith("v") else version
152
+
153
+ def _format_display_version(self, version: str) -> str:
154
+ """
155
+ Format display version with proper formatting.
156
+
157
+ Args:
158
+ version: Version string
159
+
160
+ Returns:
161
+ Display version string
162
+ """
163
+ if version == "unknown":
164
+ return "MoAI-ADK unknown version"
165
+ elif version.startswith("v"):
166
+ return f"MoAI-ADK {version}"
167
+ else:
168
+ return f"MoAI-ADK v{version}"
169
+
170
+ def _format_trimmed_version(self, version: str, max_length: int = 10) -> str:
171
+ """
172
+ Format version with maximum length, suitable for UI displays.
173
+
174
+ Args:
175
+ version: Version string
176
+ max_length: Maximum allowed length for the version string
177
+
178
+ Returns:
179
+ Trimmed version string
180
+ """
181
+ if version == "unknown":
182
+ return "unknown"
183
+
184
+ # Remove 'v' prefix for trimming
185
+ clean_version = version[1:] if version.startswith("v") else version
186
+
187
+ # Trim if necessary
188
+ if len(clean_version) > max_length:
189
+ return clean_version[:max_length]
190
+ return clean_version
191
+
192
+ def _format_semver_version(self, version: str) -> str:
193
+ """
194
+ Format version as semantic version with major.minor.patch structure.
195
+
196
+ Args:
197
+ version: Version string
198
+
199
+ Returns:
200
+ Semantic version string
201
+ """
202
+ if version == "unknown":
203
+ return "0.0.0"
204
+
205
+ # Remove 'v' prefix and extract semantic version
206
+ clean_version = version[1:] if version.startswith("v") else version
207
+
208
+ # Extract core semantic version (remove pre-release and build metadata)
209
+ import re
210
+
211
+ semver_match = re.match(r"^(\d+\.\d+\.\d+)", clean_version)
212
+ if semver_match:
213
+ return semver_match.group(1)
214
+ return "0.0.0"
215
+
216
+ def _get_version_source(self, version_reader: VersionReader) -> str:
217
+ """
218
+ Determine the source of the version information.
219
+
220
+ Args:
221
+ version_reader: VersionReader instance
222
+
223
+ Returns:
224
+ String indicating version source
225
+ """
226
+ config = version_reader.get_config()
227
+
228
+ # Check if we have a cached version (most likely from config)
229
+ cache_age = version_reader.get_cache_age_seconds()
230
+ if cache_age is not None and cache_age < config.cache_ttl_seconds:
231
+ return "config_cached"
232
+ elif cache_age is not None:
233
+ return "config_stale"
234
+ else:
235
+ return config.fallback_version
236
+
237
+ def execute_preparation_phase(
238
+ self,
239
+ project_path: Path,
240
+ backup_enabled: bool = True,
241
+ progress_callback: ProgressCallback | None = None,
242
+ ) -> None:
243
+ """Phase 1: preparation and backup.
244
+
245
+ Args:
246
+ project_path: Project path.
247
+ backup_enabled: Whether backups are enabled.
248
+ progress_callback: Optional progress callback.
249
+ """
250
+ self.current_phase = 1
251
+ self._report_progress("Phase 1: Preparation and backup...", progress_callback)
252
+
253
+ # Validate system requirements
254
+ self.validator.validate_system_requirements()
255
+
256
+ # Verify the project path
257
+ self.validator.validate_project_path(project_path)
258
+
259
+ # Create a backup when needed
260
+ if backup_enabled and has_any_moai_files(project_path):
261
+ self._create_backup(project_path)
262
+
263
+ def execute_directory_phase(
264
+ self,
265
+ project_path: Path,
266
+ progress_callback: ProgressCallback | None = None,
267
+ ) -> None:
268
+ """Phase 2: create directories.
269
+
270
+ Args:
271
+ project_path: Project path.
272
+ progress_callback: Optional progress callback.
273
+ """
274
+ self.current_phase = 2
275
+ self._report_progress("Phase 2: Creating directory structure...", progress_callback)
276
+
277
+ for directory in self.REQUIRED_DIRECTORIES:
278
+ dir_path = project_path / directory
279
+ dir_path.mkdir(parents=True, exist_ok=True)
280
+
281
+ def execute_resource_phase(
282
+ self,
283
+ project_path: Path,
284
+ config: dict[str, str] | None = None,
285
+ progress_callback: ProgressCallback | None = None,
286
+ ) -> list[str]:
287
+ """Phase 3: install resources with variable substitution.
288
+
289
+ Args:
290
+ project_path: Project path.
291
+ config: Configuration dictionary for template variable substitution.
292
+ progress_callback: Optional progress callback.
293
+
294
+ Returns:
295
+ List of created files or directories.
296
+ """
297
+ import stat
298
+
299
+ self.current_phase = 3
300
+ self._report_progress("Phase 3: Installing resources...", progress_callback)
301
+
302
+ # Copy resources via TemplateProcessor in silent mode
303
+ processor = TemplateProcessor(project_path)
304
+
305
+ # Set template variable context (if provided)
306
+ if config:
307
+ # Get language settings from 'language_settings' key (dict)
308
+ # Falls back to 'language' key for backwards compatibility
309
+ language_config: dict[str, Any] = config.get("language_settings") or {}
310
+ if not language_config or not isinstance(language_config, dict):
311
+ # Backwards compatibility: try 'language' key as dict
312
+ legacy_lang = config.get("language", {})
313
+ language_config = legacy_lang if isinstance(legacy_lang, dict) else {}
314
+
315
+ # Detect OS for cross-platform Hook path configuration
316
+ hook_project_dir = "%CLAUDE_PROJECT_DIR%" if platform.system() == "Windows" else "$CLAUDE_PROJECT_DIR"
317
+
318
+ # Detect OS for cross-platform statusline command
319
+ # Windows: Use python -m for better PATH compatibility
320
+ # Unix: Use moai-adk directly (assumes installed via uv tool)
321
+ if platform.system() == "Windows":
322
+ statusline_command = "python -m moai_adk statusline"
323
+ else:
324
+ statusline_command = "moai-adk statusline"
325
+
326
+ # Get enhanced version context with fallback strategies
327
+ version_context = self._get_enhanced_version_context()
328
+
329
+ context = {
330
+ **version_context,
331
+ "CREATION_TIMESTAMP": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
332
+ "PROJECT_NAME": config.get("name", "unknown"),
333
+ "PROJECT_DESCRIPTION": config.get("description", ""),
334
+ "PROJECT_MODE": config.get("mode", "personal"),
335
+ "PROJECT_VERSION": config.get("version", "0.1.0"),
336
+ "PROJECT_OWNER": config.get("author", "@user"),
337
+ "AUTHOR": config.get("author", "@user"),
338
+ "CONVERSATION_LANGUAGE": language_config.get("conversation_language", "en"),
339
+ "CONVERSATION_LANGUAGE_NAME": language_config.get("conversation_language_name", "English"),
340
+ "CODEBASE_LANGUAGE": config.get("language", "generic"),
341
+ "PROJECT_DIR": hook_project_dir,
342
+ "STATUSLINE_COMMAND": statusline_command,
343
+ }
344
+ processor.set_context(context)
345
+
346
+ processor.copy_templates(backup=False, silent=True) # Avoid progress bar conflicts
347
+
348
+ # Post-process: Set executable permission on shell scripts
349
+ # This is necessary because git may not preserve file permissions during clone/checkout
350
+ scripts_dir = project_path / ".moai" / "scripts"
351
+ logger = logging.getLogger(__name__)
352
+ if scripts_dir.exists():
353
+ logger.debug(f"Processing shell scripts in {scripts_dir}")
354
+ for script_file in scripts_dir.glob("*.sh"):
355
+ try:
356
+ # Add execute permission for user, group, and others
357
+ current_mode = script_file.stat().st_mode
358
+ new_mode = current_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
359
+ script_file.chmod(new_mode)
360
+ logger.debug(f"Set executable permission on {script_file}: {oct(current_mode)} -> {oct(new_mode)}")
361
+ except Exception as e:
362
+ logger.warning(f"Failed to set executable permission on {script_file}: {e}")
363
+ else:
364
+ logger.debug(f"Scripts directory not found: {scripts_dir}")
365
+
366
+ # Return a simplified list of generated assets
367
+ return [
368
+ ".claude/",
369
+ ".moai/",
370
+ ".github/",
371
+ "CLAUDE.md",
372
+ ".gitignore",
373
+ ]
374
+
375
+ def execute_configuration_phase(
376
+ self,
377
+ project_path: Path,
378
+ config: dict[str, str | bool | dict[Any, Any]],
379
+ progress_callback: ProgressCallback | None = None,
380
+ ) -> list[str]:
381
+ """Phase 4: generate configuration.
382
+
383
+ Args:
384
+ project_path: Project path.
385
+ config: Configuration dictionary.
386
+ progress_callback: Optional progress callback.
387
+
388
+ Returns:
389
+ List of created files.
390
+ """
391
+ self.current_phase = 4
392
+ self._report_progress("Phase 4: Generating configurations...", progress_callback)
393
+
394
+ logger = logging.getLogger(__name__)
395
+
396
+ # Read existing config to preserve user settings (Issue #165)
397
+ config_path = project_path / ".moai" / "config" / "config.json"
398
+ existing_config: dict[str, Any] = {}
399
+ if config_path.exists():
400
+ try:
401
+ with open(config_path, "r", encoding="utf-8") as f:
402
+ existing_config = json.load(f)
403
+ logger.debug(f"Successfully read existing config from {config_path}")
404
+ except (json.JSONDecodeError, OSError) as e:
405
+ logger.warning(f"Failed to read existing config: {e}. Starting fresh.")
406
+ existing_config = {}
407
+
408
+ # Enhanced config merging with comprehensive version preservation
409
+ merged_config = self._merge_configuration_preserving_versions(config, existing_config)
410
+
411
+ # Enhanced version handling using VersionReader for consistency
412
+ try:
413
+ version_reader = self._get_version_reader()
414
+ current_config_version = version_reader.get_version()
415
+
416
+ # Ensure version consistency across the merged config
417
+ self._ensure_version_consistency(merged_config, current_config_version, existing_config)
418
+
419
+ logger.debug(f"Version consistency check completed. Current version: {current_config_version}")
420
+ except Exception as e:
421
+ logger.warning(f"Version consistency check failed: {e}. Using fallback version.")
422
+ merged_config["moai"]["version"] = __version__
423
+
424
+ # Write final config with enhanced formatting
425
+ self._write_configuration_file(config_path, merged_config)
426
+ logger.info(f"Configuration file written to {config_path}")
427
+
428
+ return [str(config_path)]
429
+
430
+ def _merge_configuration_preserving_versions(
431
+ self, new_config: dict[str, Any], existing_config: dict[str, Any]
432
+ ) -> dict[str, Any]:
433
+ """
434
+ Merge configurations while preserving user settings and version information.
435
+
436
+ Args:
437
+ new_config: New configuration from initialization
438
+ existing_config: Existing configuration from project
439
+
440
+ Returns:
441
+ Merged configuration dictionary
442
+ """
443
+ logger = logging.getLogger(__name__)
444
+ merged_config = new_config.copy()
445
+
446
+ # Define configuration sections with their merge strategies
447
+ config_sections = {
448
+ "moai": {"preserve_all": True, "priority": "user"},
449
+ "user": {"preserve_keys": ["nickname"], "priority": "user"},
450
+ "language": {
451
+ "preserve_keys": [],
452
+ "priority": "new",
453
+ }, # Use new language config during init
454
+ "project": {"preserve_keys": [], "priority": "new"},
455
+ "git": {"preserve_keys": [], "priority": "new"},
456
+ }
457
+
458
+ for section_name, strategy in config_sections.items():
459
+ if section_name in existing_config:
460
+ logger.debug(f"Merging section: {section_name}")
461
+ self._merge_config_section(merged_config, existing_config, section_name, strategy)
462
+
463
+ return merged_config
464
+
465
+ def _merge_config_section(
466
+ self,
467
+ merged_config: dict[str, Any],
468
+ existing_config: dict[str, Any],
469
+ section_name: str,
470
+ strategy: dict[str, Any],
471
+ ) -> None:
472
+ """
473
+ Merge a specific configuration section.
474
+
475
+ Args:
476
+ merged_config: Target configuration to merge into
477
+ existing_config: Source configuration to merge from
478
+ section_name: Name of the section to merge
479
+ strategy: Merge strategy for this section
480
+ """
481
+ logger = logging.getLogger(__name__)
482
+ if section_name not in merged_config:
483
+ merged_config[section_name] = {}
484
+
485
+ section_config = merged_config[section_name]
486
+ existing_section = existing_config[section_name]
487
+
488
+ if strategy["priority"] == "user":
489
+ # User priority: preserve existing values
490
+ preserve_keys = strategy.get("preserve_keys", [])
491
+ # Convert frozenset to list if needed
492
+ if isinstance(preserve_keys, frozenset):
493
+ preserve_keys = list(preserve_keys)
494
+ elif not isinstance(preserve_keys, list):
495
+ preserve_keys = list(preserve_keys) if preserve_keys else []
496
+
497
+ for key, value in existing_section.items():
498
+ if strategy.get("preserve_all", False) or key in preserve_keys:
499
+ section_config[key] = value
500
+ logger.debug(f"Preserved {section_name}.{key} = {value}")
501
+ else:
502
+ # New priority: keep new config, but don't overwrite if exists
503
+ for key, value in existing_section.items():
504
+ if key not in section_config:
505
+ section_config[key] = value
506
+ logger.debug(f"Inherited {section_name}.{key} = {value}")
507
+
508
+ def _ensure_version_consistency(
509
+ self,
510
+ config: dict[str, Any],
511
+ current_version: str,
512
+ existing_config: dict[str, Any],
513
+ ) -> None:
514
+ """
515
+ Ensure version consistency across the configuration.
516
+
517
+ Args:
518
+ config: Configuration to update
519
+ current_version: Current version from VersionReader
520
+ existing_config: Existing configuration for reference
521
+ """
522
+ logger = logging.getLogger(__name__)
523
+
524
+ # Ensure moai section exists
525
+ if "moai" not in config:
526
+ config["moai"] = {}
527
+
528
+ # Version field priority strategy:
529
+ # 1. User explicitly set in existing config -> preserve
530
+ # 2. Version from config file -> use
531
+ # 3. Current version from VersionReader -> use
532
+ # 4. Package version -> fallback
533
+
534
+ existing_moai = existing_config.get("moai", {})
535
+ config_moai = config["moai"]
536
+
537
+ # Check if user explicitly set a version in existing config
538
+ if "version" in existing_moai:
539
+ user_version = existing_moai["version"]
540
+ logger.debug(f"User explicitly set version: {user_version}")
541
+ config_moai["version"] = user_version
542
+ elif "version" in config_moai:
543
+ # Version already in new config, validate it
544
+ config_version = config_moai["version"]
545
+ if config_version == "unknown" or not self._is_valid_version_format(config_version):
546
+ logger.debug(f"Invalid config version {config_version}, updating to current: {current_version}")
547
+ config_moai["version"] = current_version
548
+ else:
549
+ # No version found, use current version
550
+ logger.debug(f"No version found, setting to current: {current_version}")
551
+ config_moai["version"] = current_version
552
+
553
+ def _is_valid_version_format(self, version: str) -> bool:
554
+ """
555
+ Check if version format is valid.
556
+
557
+ Args:
558
+ version: Version string to validate
559
+
560
+ Returns:
561
+ True if version format is valid
562
+ """
563
+ import re
564
+
565
+ pattern = r"^v?(\d+\.\d+\.\d+(-[a-zA-Z0-9]+)?)$"
566
+ return bool(re.match(pattern, version))
567
+
568
+ def _write_configuration_file(self, config_path: Path, config: dict[str, Any]) -> None:
569
+ """
570
+ Write configuration file with enhanced formatting and error handling.
571
+
572
+ Args:
573
+ config_path: Path to write configuration file
574
+ config: Configuration dictionary to write
575
+ """
576
+ logger = logging.getLogger(__name__)
577
+
578
+ try:
579
+ # Ensure parent directory exists
580
+ config_path.parent.mkdir(parents=True, exist_ok=True)
581
+
582
+ # Write with enhanced formatting
583
+ with open(config_path, "w", encoding="utf-8") as f:
584
+ json.dump(config, f, indent=2, ensure_ascii=False)
585
+
586
+ logger.info(f"Configuration successfully written to {config_path}")
587
+
588
+ except Exception as e:
589
+ logger.error(f"Failed to write configuration file: {e}")
590
+ raise
591
+
592
+ def execute_validation_phase(
593
+ self,
594
+ project_path: Path,
595
+ mode: str = "personal",
596
+ progress_callback: ProgressCallback | None = None,
597
+ ) -> None:
598
+ """Phase 5: validation and wrap-up.
599
+
600
+
601
+ Args:
602
+ project_path: Project path.
603
+ mode: Project mode (personal/team).
604
+ progress_callback: Optional progress callback.
605
+ """
606
+ self.current_phase = 5
607
+ self._report_progress("Phase 5: Validation and finalization...", progress_callback)
608
+
609
+ # Validate installation results
610
+ # Comprehensive installation validation
611
+ # Verifies all required files including 4 Alfred command files:
612
+ # - 0-project.md, 1-plan.md, 2-run.md, 3-sync.md
613
+ self.validator.validate_installation(project_path)
614
+
615
+ # Initialize Git for all modes (team, personal, solo)
616
+ self._initialize_git(project_path)
617
+
618
+ def _create_backup(self, project_path: Path) -> None:
619
+ """Create a single backup (v0.4.2).
620
+
621
+ Maintains only one backup at .moai-backups/backup/.
622
+
623
+ Args:
624
+ project_path: Project path.
625
+ """
626
+ # Define backup directory
627
+ backups_dir = project_path / ".moai-backups"
628
+ backup_path = backups_dir / "backup"
629
+
630
+ # Remove existing backup if present
631
+ if backup_path.exists():
632
+ shutil.rmtree(backup_path)
633
+
634
+ # Create backup directories
635
+ backups_dir.mkdir(parents=True, exist_ok=True)
636
+ backup_path.mkdir(parents=True, exist_ok=True)
637
+
638
+ # Collect backup targets
639
+ targets = get_backup_targets(project_path)
640
+ backed_up_files: list[str] = []
641
+
642
+ # Execute the backup
643
+ for target in targets:
644
+ src_path = project_path / target
645
+ dst_path = backup_path / target
646
+
647
+ if src_path.is_dir():
648
+ self._copy_directory_selective(src_path, dst_path)
649
+ backed_up_files.append(f"{target}/")
650
+ else:
651
+ dst_path.parent.mkdir(parents=True, exist_ok=True)
652
+ shutil.copy2(src_path, dst_path)
653
+ backed_up_files.append(target)
654
+
655
+ # Avoid additional console messages to prevent progress bar conflicts
656
+
657
+ def _copy_directory_selective(self, src: Path, dst: Path) -> None:
658
+ """Copy a directory while skipping protected paths.
659
+
660
+ Args:
661
+ src: Source directory.
662
+ dst: Destination directory.
663
+ """
664
+ dst.mkdir(parents=True, exist_ok=True)
665
+
666
+ for item in src.rglob("*"):
667
+ rel_path = item.relative_to(src)
668
+
669
+ # Skip protected paths
670
+ if is_protected_path(rel_path):
671
+ continue
672
+
673
+ dst_item = dst / rel_path
674
+ if item.is_file():
675
+ dst_item.parent.mkdir(parents=True, exist_ok=True)
676
+ shutil.copy2(item, dst_item)
677
+ elif item.is_dir():
678
+ dst_item.mkdir(parents=True, exist_ok=True)
679
+
680
+ def _initialize_git(self, project_path: Path) -> None:
681
+ """Initialize a Git repository if not already initialized.
682
+
683
+ Args:
684
+ project_path: Project path.
685
+ """
686
+ # Check if .git directory already exists
687
+ git_dir = project_path / ".git"
688
+ if git_dir.exists() and git_dir.is_dir():
689
+ # Git already initialized, skip
690
+ return
691
+
692
+ try:
693
+ subprocess.run(
694
+ ["git", "init"],
695
+ cwd=project_path,
696
+ check=True,
697
+ capture_output=True,
698
+ timeout=30, # Default timeout for git operations
699
+ )
700
+ # Intentionally avoid printing to keep progress output clean
701
+ except subprocess.TimeoutExpired:
702
+ # Timeout is non-fatal
703
+ pass
704
+ except subprocess.CalledProcessError:
705
+ # Only log on error; failures are non-fatal
706
+ pass
707
+
708
+ def _report_progress(self, message: str, callback: ProgressCallback | None) -> None:
709
+ """Report progress.
710
+
711
+ Args:
712
+ message: Progress message.
713
+ callback: Callback function.
714
+ """
715
+ if callback:
716
+ callback(message, self.current_phase, self.total_phases)