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

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

Potentially problematic release.


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

Files changed (378) hide show
  1. moai_adk/__init__.py +2 -5
  2. moai_adk/__main__.py +114 -82
  3. moai_adk/cli/__init__.py +6 -1
  4. moai_adk/cli/commands/__init__.py +1 -3
  5. moai_adk/cli/commands/analyze.py +5 -16
  6. moai_adk/cli/commands/doctor.py +6 -18
  7. moai_adk/cli/commands/init.py +56 -125
  8. moai_adk/cli/commands/language.py +14 -35
  9. moai_adk/cli/commands/status.py +9 -15
  10. moai_adk/cli/commands/update.py +1555 -190
  11. moai_adk/cli/prompts/init_prompts.py +112 -56
  12. moai_adk/cli/spec_status.py +263 -0
  13. moai_adk/cli/ui/__init__.py +44 -0
  14. moai_adk/cli/ui/progress.py +422 -0
  15. moai_adk/cli/ui/prompts.py +389 -0
  16. moai_adk/cli/ui/theme.py +129 -0
  17. moai_adk/cli/worktree/__init__.py +27 -0
  18. moai_adk/cli/worktree/__main__.py +31 -0
  19. moai_adk/cli/worktree/cli.py +672 -0
  20. moai_adk/cli/worktree/exceptions.py +89 -0
  21. moai_adk/cli/worktree/manager.py +490 -0
  22. moai_adk/cli/worktree/models.py +65 -0
  23. moai_adk/cli/worktree/registry.py +128 -0
  24. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  25. moai_adk/core/analysis/session_analyzer.py +17 -56
  26. moai_adk/core/claude_integration.py +26 -54
  27. moai_adk/core/command_helpers.py +10 -10
  28. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  29. moai_adk/core/config/auto_spec_config.py +5 -11
  30. moai_adk/core/config/migration.py +19 -9
  31. moai_adk/core/config/unified.py +436 -0
  32. moai_adk/core/context_manager.py +6 -12
  33. moai_adk/core/enterprise_features.py +1404 -0
  34. moai_adk/core/error_recovery_system.py +725 -112
  35. moai_adk/core/event_driven_hook_system.py +1371 -0
  36. moai_adk/core/git/__init__.py +8 -0
  37. moai_adk/core/git/branch_manager.py +3 -11
  38. moai_adk/core/git/checkpoint.py +1 -3
  39. moai_adk/core/git/conflict_detector.py +413 -0
  40. moai_adk/core/git/manager.py +91 -1
  41. moai_adk/core/hooks/post_tool_auto_spec_completion.py +56 -80
  42. moai_adk/core/input_validation_middleware.py +1006 -0
  43. moai_adk/core/integration/engine.py +6 -18
  44. moai_adk/core/integration/integration_tester.py +10 -9
  45. moai_adk/core/integration/utils.py +1 -1
  46. moai_adk/core/issue_creator.py +10 -28
  47. moai_adk/core/jit_context_loader.py +956 -0
  48. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  49. moai_adk/core/language_config_resolver.py +485 -0
  50. moai_adk/core/language_validator.py +28 -41
  51. moai_adk/core/mcp/setup.py +15 -12
  52. moai_adk/core/merge/__init__.py +9 -0
  53. moai_adk/core/merge/analyzer.py +481 -0
  54. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  55. moai_adk/core/migration/backup_manager.py +78 -9
  56. moai_adk/core/migration/custom_element_scanner.py +358 -0
  57. moai_adk/core/migration/file_migrator.py +8 -17
  58. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  59. moai_adk/core/migration/selective_restorer.py +470 -0
  60. moai_adk/core/migration/template_utils.py +74 -0
  61. moai_adk/core/migration/user_selection_ui.py +338 -0
  62. moai_adk/core/migration/version_detector.py +6 -10
  63. moai_adk/core/migration/version_migrator.py +3 -3
  64. moai_adk/core/performance/cache_system.py +8 -10
  65. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  66. moai_adk/core/project/checker.py +2 -4
  67. moai_adk/core/project/detector.py +1 -3
  68. moai_adk/core/project/initializer.py +135 -23
  69. moai_adk/core/project/phase_executor.py +54 -81
  70. moai_adk/core/project/validator.py +6 -12
  71. moai_adk/core/quality/trust_checker.py +9 -27
  72. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  73. moai_adk/core/robust_json_parser.py +611 -0
  74. moai_adk/core/rollback_manager.py +73 -148
  75. moai_adk/core/session_manager.py +10 -26
  76. moai_adk/core/skill_loading_system.py +579 -0
  77. moai_adk/core/spec/confidence_scoring.py +31 -100
  78. moai_adk/core/spec/ears_template_engine.py +351 -286
  79. moai_adk/core/spec/quality_validator.py +35 -69
  80. moai_adk/core/spec_status_manager.py +64 -74
  81. moai_adk/core/template/backup.py +45 -20
  82. moai_adk/core/template/config.py +112 -39
  83. moai_adk/core/template/merger.py +11 -19
  84. moai_adk/core/template/processor.py +253 -149
  85. moai_adk/core/template_engine.py +73 -40
  86. moai_adk/core/template_variable_synchronizer.py +417 -0
  87. moai_adk/core/unified_permission_manager.py +745 -0
  88. moai_adk/core/user_behavior_analytics.py +851 -0
  89. moai_adk/core/version_sync.py +429 -0
  90. moai_adk/foundation/__init__.py +56 -0
  91. moai_adk/foundation/backend.py +1027 -0
  92. moai_adk/foundation/database.py +1115 -0
  93. moai_adk/foundation/devops.py +1585 -0
  94. moai_adk/foundation/ears.py +431 -0
  95. moai_adk/foundation/frontend.py +870 -0
  96. moai_adk/foundation/git/commit_templates.py +4 -12
  97. moai_adk/foundation/git.py +376 -0
  98. moai_adk/foundation/langs.py +484 -0
  99. moai_adk/foundation/ml_ops.py +1162 -0
  100. moai_adk/foundation/testing.py +1524 -0
  101. moai_adk/foundation/trust/trust_principles.py +23 -72
  102. moai_adk/foundation/trust/validation_checklist.py +57 -162
  103. moai_adk/project/__init__.py +0 -0
  104. moai_adk/project/configuration.py +1084 -0
  105. moai_adk/project/documentation.py +566 -0
  106. moai_adk/project/schema.py +447 -0
  107. moai_adk/statusline/alfred_detector.py +1 -3
  108. moai_adk/statusline/config.py +13 -4
  109. moai_adk/statusline/enhanced_output_style_detector.py +23 -15
  110. moai_adk/statusline/main.py +51 -15
  111. moai_adk/statusline/renderer.py +104 -48
  112. moai_adk/statusline/update_checker.py +3 -9
  113. moai_adk/statusline/version_reader.py +140 -46
  114. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
  115. moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
  116. moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
  117. moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
  118. moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
  119. moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
  120. moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
  121. moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
  122. moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
  123. moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
  124. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
  125. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
  126. moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
  127. moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
  128. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  129. moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
  130. moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
  131. moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
  132. moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
  133. moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
  134. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
  135. moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
  136. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
  137. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
  138. moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
  139. moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
  140. moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
  141. moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
  142. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  143. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  144. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  145. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  146. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  147. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  148. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  149. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  150. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  151. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  152. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  153. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  154. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  155. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  156. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  157. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  158. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  159. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  160. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
  161. moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
  162. moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
  163. moai_adk/templates/.claude/settings.json +172 -0
  164. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
  165. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  166. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  167. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  168. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  169. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  170. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +319 -0
  171. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +320 -0
  172. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  173. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  174. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  175. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  176. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +496 -0
  177. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
  178. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  179. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  180. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  181. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
  182. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  183. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  184. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  185. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
  186. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  187. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  188. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  189. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  190. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  191. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  192. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
  193. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  194. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  195. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  196. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  197. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  198. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  199. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  200. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  201. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  202. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  203. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  204. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  205. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  206. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  207. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
  208. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
  209. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  210. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
  211. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  212. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  213. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  214. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  215. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  216. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  217. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  218. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  219. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
  220. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  221. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  222. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  223. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  224. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  225. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  226. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  227. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  228. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  229. moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
  230. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
  231. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
  232. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
  233. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
  234. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
  235. moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
  236. moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
  237. moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
  238. moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
  239. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
  240. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  241. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  242. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  243. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  244. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
  245. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  246. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  247. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  248. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  249. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  250. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  251. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  252. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  253. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  254. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  255. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
  256. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  257. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  258. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  259. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  260. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  261. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  262. moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
  263. moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
  264. moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
  265. moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
  266. moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
  267. moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
  268. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
  269. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  270. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  271. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  272. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
  273. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  274. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  275. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  276. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  277. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  278. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
  279. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  280. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  281. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  282. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  283. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  284. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  285. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  286. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  287. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  288. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  289. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  290. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
  291. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  292. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  293. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  294. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
  295. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  296. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  297. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  298. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  299. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  300. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  301. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
  302. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  303. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  304. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  305. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  306. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
  307. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  308. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  309. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  310. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  311. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  312. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  313. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  314. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  315. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  316. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  317. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  318. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  319. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  320. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  321. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  322. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  323. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
  324. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  325. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  326. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  327. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  328. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  329. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  330. moai_adk/templates/.git-hooks/pre-commit +103 -41
  331. moai_adk/templates/.git-hooks/pre-push +116 -21
  332. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  333. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  334. moai_adk/templates/.gitignore +184 -44
  335. moai_adk/templates/.mcp.json +7 -9
  336. moai_adk/templates/.moai/cache/personalization.json +10 -0
  337. moai_adk/templates/.moai/config/config.yaml +344 -0
  338. moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
  339. moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
  340. moai_adk/templates/.moai/config/presets/team.yaml +33 -0
  341. moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
  342. moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
  343. moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
  344. moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
  345. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
  346. moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
  347. moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
  348. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  349. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  350. moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
  351. moai_adk/templates/.moai/config/sections/system.yaml +14 -0
  352. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  353. moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
  354. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  355. moai_adk/templates/CLAUDE.md +382 -501
  356. moai_adk/utils/__init__.py +24 -1
  357. moai_adk/utils/banner.py +7 -10
  358. moai_adk/utils/common.py +16 -30
  359. moai_adk/utils/link_validator.py +4 -12
  360. moai_adk/utils/safe_file_reader.py +2 -6
  361. moai_adk/utils/timeout.py +160 -0
  362. moai_adk/utils/toon_utils.py +256 -0
  363. moai_adk/version.py +22 -0
  364. moai_adk-0.32.8.dist-info/METADATA +2478 -0
  365. moai_adk-0.32.8.dist-info/RECORD +396 -0
  366. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
  367. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
  368. moai_adk/cli/commands/backup.py +0 -82
  369. moai_adk/cli/commands/improve_user_experience.py +0 -348
  370. moai_adk/cli/commands/migrate.py +0 -158
  371. moai_adk/cli/commands/validate_links.py +0 -118
  372. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -413
  373. moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
  374. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
  375. moai_adk/utils/user_experience.py +0 -531
  376. moai_adk-0.25.4.dist-info/METADATA +0 -2279
  377. moai_adk-0.25.4.dist-info/RECORD +0 -112
  378. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
@@ -86,9 +86,7 @@ class SessionAnalyzer:
86
86
  sessions.append(session)
87
87
  except json.JSONDecodeError as e:
88
88
  if self.verbose:
89
- print(
90
- f"⚠️ Error reading line {line_num} in {session_file}: {e}"
91
- )
89
+ print(f"⚠️ Error reading line {line_num} in {session_file}: {e}")
92
90
 
93
91
  # Analyze each session from the JSONL file
94
92
  for session in sessions:
@@ -120,15 +118,9 @@ class SessionAnalyzer:
120
118
  summary = cast(str, session.get("summary", "")).lower()
121
119
 
122
120
  # Simple analysis of session summaries
123
- if any(
124
- keyword in summary for keyword in ["error", "fail", "issue", "problem"]
125
- ):
126
- self.patterns["failed_sessions"] = (
127
- cast(int, self.patterns["failed_sessions"]) + 1
128
- )
129
- tool_failures = cast(
130
- defaultdict[str, int], self.patterns["tool_failures"]
131
- )
121
+ if any(keyword in summary for keyword in ["error", "fail", "issue", "problem"]):
122
+ self.patterns["failed_sessions"] = cast(int, self.patterns["failed_sessions"]) + 1
123
+ tool_failures = cast(defaultdict[str, int], self.patterns["tool_failures"])
132
124
  tool_failures["session_error_in_summary"] += 1
133
125
 
134
126
  # Extract potential tool usage from summary
@@ -153,9 +145,7 @@ class SessionAnalyzer:
153
145
 
154
146
  # Handle detailed event format (legacy session-*.json format)
155
147
  events = cast(list[Dict[str, Any]], session.get("events", []))
156
- self.patterns["total_events"] = cast(int, self.patterns["total_events"]) + len(
157
- events
158
- )
148
+ self.patterns["total_events"] = cast(int, self.patterns["total_events"]) + len(events)
159
149
 
160
150
  has_error = False
161
151
 
@@ -171,26 +161,20 @@ class SessionAnalyzer:
171
161
  # Tool error patterns
172
162
  elif event_type == "tool_error":
173
163
  error_msg = cast(str, event.get("error", "unknown error"))
174
- tool_failures = cast(
175
- defaultdict[str, int], self.patterns["tool_failures"]
176
- )
164
+ tool_failures = cast(defaultdict[str, int], self.patterns["tool_failures"])
177
165
  tool_failures[error_msg[:50]] += 1 # First 50 characters
178
166
  has_error = True
179
167
 
180
168
  # Permission requests
181
169
  elif event_type == "permission_request":
182
170
  perm_type = cast(str, event.get("permission_type", "unknown"))
183
- perm_requests = cast(
184
- defaultdict[str, int], self.patterns["permission_requests"]
185
- )
171
+ perm_requests = cast(defaultdict[str, int], self.patterns["permission_requests"])
186
172
  perm_requests[perm_type] += 1
187
173
 
188
174
  # Hook failures
189
175
  elif event_type == "hook_failure":
190
176
  hook_name = cast(str, event.get("hook_name", "unknown"))
191
- hook_failures = cast(
192
- defaultdict[str, int], self.patterns["hook_failures"]
193
- )
177
+ hook_failures = cast(defaultdict[str, int], self.patterns["hook_failures"])
194
178
  hook_failures[hook_name] += 1
195
179
  has_error = True
196
180
 
@@ -199,15 +183,11 @@ class SessionAnalyzer:
199
183
  cmd_str = cast(str, event.get("command", "")).split()
200
184
  if cmd_str:
201
185
  cmd = cmd_str[0]
202
- cmd_freq = cast(
203
- defaultdict[str, int], self.patterns["command_frequency"]
204
- )
186
+ cmd_freq = cast(defaultdict[str, int], self.patterns["command_frequency"])
205
187
  cmd_freq[cmd] += 1
206
188
 
207
189
  if has_error:
208
- self.patterns["failed_sessions"] = (
209
- cast(int, self.patterns["failed_sessions"]) + 1
210
- )
190
+ self.patterns["failed_sessions"] = cast(int, self.patterns["failed_sessions"]) + 1
211
191
 
212
192
  def generate_report(self) -> str:
213
193
  """
@@ -220,11 +200,7 @@ class SessionAnalyzer:
220
200
  total_sessions = cast(int, self.patterns["total_sessions"])
221
201
  failed_sessions = cast(int, self.patterns["failed_sessions"])
222
202
  total_events = cast(int, self.patterns["total_events"])
223
- success_rate = (
224
- ((total_sessions - failed_sessions) / total_sessions * 100)
225
- if total_sessions > 0
226
- else 0
227
- )
203
+ success_rate = ((total_sessions - failed_sessions) / total_sessions * 100) if total_sessions > 0 else 0
228
204
 
229
205
  report = f"""# MoAI-ADK Session Meta-Analysis Report
230
206
 
@@ -291,9 +267,7 @@ class SessionAnalyzer:
291
267
  # Permission request analysis
292
268
  report += "\n## Permission Request Patterns\n\n"
293
269
 
294
- perm_requests = cast(
295
- defaultdict[str, int], self.patterns["permission_requests"]
296
- )
270
+ perm_requests = cast(defaultdict[str, int], self.patterns["permission_requests"])
297
271
  if perm_requests:
298
272
  sorted_perms = sorted(
299
273
  perm_requests.items(),
@@ -322,9 +296,7 @@ class SessionAnalyzer:
322
296
  suggestions: list[str] = []
323
297
 
324
298
  # High permission requests - review permission settings
325
- perm_requests = cast(
326
- defaultdict[str, int], self.patterns["permission_requests"]
327
- )
299
+ perm_requests = cast(defaultdict[str, int], self.patterns["permission_requests"])
328
300
  if perm_requests:
329
301
  top_perm = max(
330
302
  perm_requests.items(),
@@ -369,11 +341,7 @@ class SessionAnalyzer:
369
341
  # Low success rate - general diagnosis
370
342
  total_sessions = cast(int, self.patterns["total_sessions"])
371
343
  failed_sessions = cast(int, self.patterns["failed_sessions"])
372
- success_rate = (
373
- ((total_sessions - failed_sessions) / total_sessions * 100)
374
- if total_sessions > 0
375
- else 0
376
- )
344
+ success_rate = ((total_sessions - failed_sessions) / total_sessions * 100) if total_sessions > 0 else 0
377
345
 
378
346
  if success_rate < 80 and total_sessions >= 5:
379
347
  suggestions.append(
@@ -384,16 +352,11 @@ class SessionAnalyzer:
384
352
  )
385
353
 
386
354
  if not suggestions:
387
- suggestions.append(
388
- "✅ No major issues detected\n"
389
- " - Current settings and rules are working well"
390
- )
355
+ suggestions.append("✅ No major issues detected\n - Current settings and rules are working well")
391
356
 
392
357
  return "\n\n".join(suggestions)
393
358
 
394
- def save_report(
395
- self, output_path: Optional[Path] = None, project_path: Optional[Path] = None
396
- ) -> Path:
359
+ def save_report(self, output_path: Optional[Path] = None, project_path: Optional[Path] = None) -> Path:
397
360
  """
398
361
  Save report to file
399
362
 
@@ -431,9 +394,7 @@ class SessionAnalyzer:
431
394
  if total_sessions > 0:
432
395
  failed_sessions = cast(int, self.patterns["failed_sessions"])
433
396
  total_events = cast(int, self.patterns["total_events"])
434
- self.patterns["success_rate"] = (
435
- (total_sessions - failed_sessions) / total_sessions * 100
436
- )
397
+ self.patterns["success_rate"] = (total_sessions - failed_sessions) / total_sessions * 100
437
398
  self.patterns["average_session_length"] = total_events / total_sessions
438
399
 
439
400
  return self.patterns.copy()
@@ -35,9 +35,7 @@ class ClaudeCLIIntegration:
35
35
  """
36
36
  self.template_engine = template_engine or TemplateEngine()
37
37
 
38
- def generate_claude_settings(
39
- self, variables: Dict[str, Any], output_path: Optional[Path] = None
40
- ) -> Path:
38
+ def generate_claude_settings(self, variables: Dict[str, Any], output_path: Optional[Path] = None) -> Path:
41
39
  """Generate Claude settings JSON file with variables.
42
40
 
43
41
  Args:
@@ -48,9 +46,7 @@ class ClaudeCLIIntegration:
48
46
  Path to generated settings file
49
47
  """
50
48
  if output_path is None:
51
- temp_file = tempfile.NamedTemporaryFile(
52
- mode="w", suffix=".json", delete=False
53
- )
49
+ temp_file = tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False)
54
50
  output_path = Path(temp_file.name)
55
51
  temp_file.close()
56
52
 
@@ -58,9 +54,7 @@ class ClaudeCLIIntegration:
58
54
  "variables": variables,
59
55
  "template_context": {
60
56
  "conversation_language": variables.get("CONVERSATION_LANGUAGE", "en"),
61
- "conversation_language_name": variables.get(
62
- "CONVERSATION_LANGUAGE_NAME", "English"
63
- ),
57
+ "conversation_language_name": variables.get("CONVERSATION_LANGUAGE_NAME", "English"),
64
58
  "project_name": variables.get("PROJECT_NAME", ""),
65
59
  "codebase_language": variables.get("CODEBASE_LANGUAGE", "python"),
66
60
  },
@@ -89,9 +83,7 @@ class ClaudeCLIIntegration:
89
83
  """
90
84
  try:
91
85
  # Process template variables
92
- processed_command = self.template_engine.render_string(
93
- command_template, variables
94
- )
86
+ processed_command = self.template_engine.render_string(command_template, variables)
95
87
 
96
88
  # Build Claude CLI command
97
89
  cmd_parts = ["claude"]
@@ -108,14 +100,12 @@ class ClaudeCLIIntegration:
108
100
  cmd_parts.append(processed_command)
109
101
 
110
102
  # Execute Claude CLI
111
- result = subprocess.run(
112
- cmd_parts, capture_output=True, text=True, encoding="utf-8"
113
- )
103
+ result = subprocess.run(cmd_parts, capture_output=True, text=True, encoding="utf-8")
114
104
 
115
105
  # Cleanup settings file
116
106
  try:
117
107
  settings_file.unlink()
118
- except:
108
+ except OSError:
119
109
  pass # Ignore cleanup errors
120
110
 
121
111
  return {
@@ -168,7 +158,7 @@ class ClaudeCLIIntegration:
168
158
  continue
169
159
 
170
160
  # Create language-specific description prompt
171
- translation_prompt = f"""Translate the following Claude Code description to {lang_info['native_name']}.
161
+ translation_prompt = f"""Translate the following Claude Code description to {lang_info["native_name"]}.
172
162
  Keep technical terms in English. Provide only the translation without explanation:
173
163
 
174
164
  Original: {base_desc}
@@ -215,15 +205,11 @@ Translation:"""
215
205
  target_languages = ["en", "ko", "ja", "es", "fr", "de"]
216
206
 
217
207
  # Generate multilingual descriptions
218
- descriptions = self.generate_multilingual_descriptions(
219
- {agent_name: base_description}, target_languages
220
- )
208
+ descriptions = self.generate_multilingual_descriptions({agent_name: base_description}, target_languages)
221
209
 
222
210
  agent_config = {
223
211
  "name": agent_name,
224
- "description": descriptions[agent_name][
225
- "en"
226
- ], # Primary English description
212
+ "description": descriptions[agent_name]["en"], # Primary English description
227
213
  "tools": tools,
228
214
  "model": model,
229
215
  "descriptions": descriptions[agent_name], # All language versions
@@ -258,15 +244,11 @@ Translation:"""
258
244
  target_languages = ["en", "ko", "ja", "es", "fr", "de"]
259
245
 
260
246
  # Generate multilingual descriptions
261
- descriptions = self.generate_multilingual_descriptions(
262
- {command_name: base_description}, target_languages
263
- )
247
+ descriptions = self.generate_multilingual_descriptions({command_name: base_description}, target_languages)
264
248
 
265
249
  command_config = {
266
250
  "name": command_name,
267
- "description": descriptions[command_name][
268
- "en"
269
- ], # Primary English description
251
+ "description": descriptions[command_name]["en"], # Primary English description
270
252
  "argument-hint": argument_hint,
271
253
  "tools": tools,
272
254
  "model": model,
@@ -290,21 +272,23 @@ Translation:"""
290
272
  Returns:
291
273
  Processed input data
292
274
  """
275
+ # Convert string to dict if needed
276
+ processed_data: Dict[str, Any]
293
277
  if isinstance(input_data, str):
294
278
  try:
295
- input_data = json.loads(input_data)
279
+ processed_data = json.loads(input_data)
296
280
  except json.JSONDecodeError as e:
297
281
  raise ValueError(f"Invalid JSON input: {e}")
282
+ else:
283
+ processed_data = input_data
298
284
 
299
285
  if variables:
300
- # Process any string values in input_data with variables
301
- for key, value in input_data.items():
286
+ # Process any string values in processed_data with variables
287
+ for key, value in processed_data.items():
302
288
  if isinstance(value, str) and "{{" in value and "}}" in value:
303
- input_data[key] = self.template_engine.render_string(
304
- value, variables
305
- )
289
+ processed_data[key] = self.template_engine.render_string(value, variables)
306
290
 
307
- return input_data
291
+ return processed_data
308
292
 
309
293
  def execute_headless_command(
310
294
  self,
@@ -328,9 +312,7 @@ Translation:"""
328
312
  """
329
313
  try:
330
314
  # Process prompt template
331
- processed_prompt = self.template_engine.render_string(
332
- prompt_template, variables
333
- )
315
+ processed_prompt = self.template_engine.render_string(prompt_template, variables)
334
316
 
335
317
  # Build Claude command
336
318
  cmd_parts = ["claude", "--print"]
@@ -367,11 +349,7 @@ Translation:"""
367
349
  stdout_line = process.stdout.readline()
368
350
  stderr_line = process.stderr.readline()
369
351
 
370
- if (
371
- stdout_line == ""
372
- and stderr_line == ""
373
- and process.poll() is not None
374
- ):
352
+ if stdout_line == "" and stderr_line == "" and process.poll() is not None:
375
353
  break
376
354
 
377
355
  if stdout_line:
@@ -385,22 +363,16 @@ Translation:"""
385
363
 
386
364
  else:
387
365
  # Non-streaming execution
388
- result = subprocess.run(
389
- cmd_parts, capture_output=True, text=True, encoding="utf-8"
390
- )
366
+ result = subprocess.run(cmd_parts, capture_output=True, text=True, encoding="utf-8")
391
367
 
392
- stdout_lines = (
393
- result.stdout.strip().split("\n") if result.stdout else []
394
- )
395
- stderr_lines = (
396
- result.stderr.strip().split("\n") if result.stderr else []
397
- )
368
+ stdout_lines = result.stdout.strip().split("\n") if result.stdout else []
369
+ stderr_lines = result.stderr.strip().split("\n") if result.stderr else []
398
370
  returncode = result.returncode
399
371
 
400
372
  # Cleanup
401
373
  try:
402
374
  settings_file.unlink()
403
- except:
375
+ except OSError:
404
376
  pass
405
377
 
406
378
  return {
@@ -10,6 +10,8 @@ import os
10
10
  from datetime import datetime, timezone
11
11
  from typing import Any, Dict, List, Optional
12
12
 
13
+ import yaml
14
+
13
15
  # Conditional import of ContextManager
14
16
  try:
15
17
  from moai_adk.core.context_manager import (
@@ -25,7 +27,7 @@ except ImportError:
25
27
 
26
28
  def extract_project_metadata(project_root: str) -> Dict[str, Any]:
27
29
  """
28
- Extract project metadata from config.json.
30
+ Extract project metadata from config.yaml.
29
31
 
30
32
  Args:
31
33
  project_root: Root directory of the project
@@ -34,22 +36,22 @@ def extract_project_metadata(project_root: str) -> Dict[str, Any]:
34
36
  Dictionary containing project metadata
35
37
 
36
38
  Raises:
37
- FileNotFoundError: If config.json doesn't exist
38
- json.JSONDecodeError: If config.json is invalid
39
+ FileNotFoundError: If config.yaml doesn't exist
40
+ yaml.YAMLError: If config.yaml is invalid
39
41
  """
40
- config_path = os.path.join(project_root, ".moai", "config", "config.json")
42
+ config_path = os.path.join(project_root, ".moai", "config", "config.yaml")
41
43
 
42
44
  if not os.path.exists(config_path):
43
45
  raise FileNotFoundError(f"Config file not found: {config_path}")
44
46
 
45
- with open(config_path, "r") as f:
46
- config = json.load(f)
47
+ with open(config_path, "r", encoding="utf-8") as f:
48
+ config = yaml.safe_load(f) or {}
47
49
 
48
50
  # Extract key metadata
49
51
  metadata = {
50
52
  "project_name": config.get("project", {}).get("name", "Unknown"),
51
53
  "mode": config.get("project", {}).get("mode", "personal"),
52
- "owner": config.get("project", {}).get("owner", "@user"),
54
+ "github_profile": config.get("github", {}).get("profile_name", ""),
53
55
  "language": config.get("language", {}).get("conversation_language", "en"),
54
56
  "tech_stack": [], # To be detected separately
55
57
  }
@@ -238,9 +240,7 @@ def save_command_context(
238
240
  try:
239
241
  context_mgr = ContextManager(project_root)
240
242
  absolute_paths = validate_phase_files(files_created, project_root)
241
- phase_data = _prepare_phase_data(
242
- phase_name, status, outputs, absolute_paths, next_phase
243
- )
243
+ phase_data = _prepare_phase_data(phase_name, status, outputs, absolute_paths, next_phase)
244
244
  return _validate_and_save(context_mgr, phase_data)
245
245
 
246
246
  except Exception as e: