moai-adk 0.25.4__py3-none-any.whl → 0.41.0__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 (672) 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 +60 -126
  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 +1560 -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 +683 -0
  20. moai_adk/cli/worktree/exceptions.py +89 -0
  21. moai_adk/cli/worktree/manager.py +493 -0
  22. moai_adk/cli/worktree/models.py +65 -0
  23. moai_adk/cli/worktree/registry.py +422 -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/migration.py +19 -9
  30. moai_adk/core/config/unified.py +610 -0
  31. moai_adk/core/context_manager.py +6 -12
  32. moai_adk/core/enterprise_features.py +1404 -0
  33. moai_adk/core/error_recovery_system.py +747 -116
  34. moai_adk/core/event_driven_hook_system.py +1371 -0
  35. moai_adk/core/git/__init__.py +8 -0
  36. moai_adk/core/git/branch_manager.py +3 -11
  37. moai_adk/core/git/checkpoint.py +1 -3
  38. moai_adk/core/git/conflict_detector.py +422 -0
  39. moai_adk/core/git/event_detector.py +16 -5
  40. moai_adk/core/git/manager.py +91 -1
  41. moai_adk/core/input_validation_middleware.py +1006 -0
  42. moai_adk/core/integration/engine.py +6 -18
  43. moai_adk/core/integration/integration_tester.py +10 -9
  44. moai_adk/core/integration/utils.py +1 -1
  45. moai_adk/core/issue_creator.py +10 -28
  46. moai_adk/core/jit_context_loader.py +956 -0
  47. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  48. moai_adk/core/language_config_resolver.py +578 -0
  49. moai_adk/core/language_validator.py +28 -41
  50. moai_adk/core/mcp/setup.py +15 -12
  51. moai_adk/core/merge/__init__.py +9 -0
  52. moai_adk/core/merge/analyzer.py +666 -0
  53. moai_adk/core/migration/alfred_to_moai_migrator.py +389 -0
  54. moai_adk/core/migration/backup_manager.py +131 -12
  55. moai_adk/core/migration/custom_element_scanner.py +358 -0
  56. moai_adk/core/migration/file_migrator.py +181 -18
  57. moai_adk/core/migration/interactive_checkbox_ui.py +499 -0
  58. moai_adk/core/migration/selective_restorer.py +470 -0
  59. moai_adk/core/migration/template_utils.py +74 -0
  60. moai_adk/core/migration/user_selection_ui.py +338 -0
  61. moai_adk/core/migration/version_detector.py +127 -27
  62. moai_adk/core/migration/version_migrator.py +47 -12
  63. moai_adk/core/performance/cache_system.py +8 -10
  64. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  65. moai_adk/core/project/backup_utils.py +9 -1
  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 +142 -93
  69. moai_adk/core/project/phase_executor.py +130 -111
  70. moai_adk/core/project/validator.py +6 -12
  71. moai_adk/core/quality/trust_checker.py +39 -37
  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 +116 -164
  75. moai_adk/core/session_manager.py +10 -26
  76. moai_adk/core/skill_loading_system.py +579 -0
  77. moai_adk/core/spec_status_manager.py +64 -74
  78. moai_adk/core/template/backup.py +48 -22
  79. moai_adk/core/template/config.py +142 -45
  80. moai_adk/core/template/merger.py +45 -27
  81. moai_adk/core/template/processor.py +391 -152
  82. moai_adk/core/template_engine.py +83 -41
  83. moai_adk/core/template_variable_synchronizer.py +431 -0
  84. moai_adk/core/unified_permission_manager.py +745 -0
  85. moai_adk/core/user_behavior_analytics.py +851 -0
  86. moai_adk/core/version_sync.py +477 -0
  87. moai_adk/foundation/__init__.py +56 -0
  88. moai_adk/foundation/backend.py +1027 -0
  89. moai_adk/foundation/database.py +1115 -0
  90. moai_adk/foundation/devops.py +1585 -0
  91. moai_adk/foundation/ears.py +431 -0
  92. moai_adk/foundation/frontend.py +870 -0
  93. moai_adk/foundation/git/commit_templates.py +4 -12
  94. moai_adk/foundation/git.py +376 -0
  95. moai_adk/foundation/langs.py +484 -0
  96. moai_adk/foundation/ml_ops.py +1162 -0
  97. moai_adk/foundation/testing.py +1524 -0
  98. moai_adk/foundation/trust/trust_principles.py +23 -72
  99. moai_adk/foundation/trust/validation_checklist.py +57 -162
  100. moai_adk/project/__init__.py +0 -0
  101. moai_adk/project/configuration.py +1084 -0
  102. moai_adk/project/documentation.py +566 -0
  103. moai_adk/project/schema.py +447 -0
  104. moai_adk/statusline/alfred_detector.py +1 -3
  105. moai_adk/statusline/config.py +18 -6
  106. moai_adk/statusline/enhanced_output_style_detector.py +23 -15
  107. moai_adk/statusline/main.py +109 -15
  108. moai_adk/statusline/renderer.py +85 -69
  109. moai_adk/statusline/update_checker.py +3 -9
  110. moai_adk/statusline/version_reader.py +140 -46
  111. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +716 -0
  112. moai_adk/templates/.claude/agents/moai/builder-agent.md +480 -0
  113. moai_adk/templates/.claude/agents/moai/builder-command.md +1194 -0
  114. moai_adk/templates/.claude/agents/moai/builder-plugin.md +753 -0
  115. moai_adk/templates/.claude/agents/moai/builder-skill.md +672 -0
  116. moai_adk/templates/.claude/agents/moai/expert-backend.md +903 -0
  117. moai_adk/templates/.claude/agents/moai/expert-database.md +782 -0
  118. moai_adk/templates/.claude/agents/moai/expert-debug.md +407 -0
  119. moai_adk/templates/.claude/agents/moai/expert-devops.md +722 -0
  120. moai_adk/templates/.claude/agents/moai/expert-frontend.md +727 -0
  121. moai_adk/templates/.claude/agents/moai/expert-performance.md +661 -0
  122. moai_adk/templates/.claude/agents/moai/expert-refactoring.md +218 -0
  123. moai_adk/templates/.claude/agents/moai/expert-security.md +525 -0
  124. moai_adk/templates/.claude/agents/moai/expert-testing.md +737 -0
  125. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1047 -0
  126. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +438 -0
  127. moai_adk/templates/.claude/agents/moai/manager-docs.md +578 -0
  128. moai_adk/templates/.claude/agents/moai/manager-git.md +1092 -0
  129. moai_adk/templates/.claude/agents/moai/manager-project.md +897 -0
  130. moai_adk/templates/.claude/agents/moai/manager-quality.md +640 -0
  131. moai_adk/templates/.claude/agents/moai/manager-spec.md +815 -0
  132. moai_adk/templates/.claude/agents/moai/manager-strategy.md +786 -0
  133. moai_adk/templates/.claude/agents/moai/manager-tdd.md +797 -0
  134. moai_adk/templates/.claude/agents/moai/mcp-context7.md +464 -0
  135. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1588 -0
  136. moai_adk/templates/.claude/agents/moai/mcp-notion.md +795 -0
  137. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +475 -0
  138. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1038 -0
  139. moai_adk/templates/.claude/commands/moai/0-project.md +1339 -0
  140. moai_adk/templates/.claude/commands/moai/1-plan.md +1367 -0
  141. moai_adk/templates/.claude/commands/moai/2-run.md +825 -0
  142. moai_adk/templates/.claude/commands/moai/3-sync.md +1358 -0
  143. moai_adk/templates/.claude/commands/moai/9-feedback.md +320 -0
  144. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  145. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  146. moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
  147. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +104 -0
  148. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +247 -0
  149. moai_adk/templates/.claude/hooks/moai/lib/common.py +161 -0
  150. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +444 -0
  151. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  152. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  153. moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
  154. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  155. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +407 -0
  156. moai_adk/templates/.claude/hooks/moai/lib/models.py +104 -0
  157. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +219 -0
  158. moai_adk/templates/.claude/hooks/moai/lib/project.py +777 -0
  159. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  160. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  161. moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +804 -0
  162. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +542 -0
  163. moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +256 -0
  164. moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +253 -0
  165. moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +307 -0
  166. moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +231 -0
  167. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +866 -0
  168. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1125 -0
  169. moai_adk/templates/.claude/output-styles/moai/r2d2.md +643 -0
  170. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  171. moai_adk/templates/.claude/settings.json +209 -0
  172. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +302 -0
  173. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  174. moai_adk/templates/.claude/skills/moai-ai-nano-banana/reference.md +139 -0
  175. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
  176. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
  177. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +302 -0
  178. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +252 -0
  179. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +56 -0
  180. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +120 -0
  181. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  182. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +185 -0
  183. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +207 -0
  184. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +234 -0
  185. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +324 -0
  186. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
  187. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
  188. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +326 -0
  189. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
  190. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  191. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  192. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  193. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  194. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
  195. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +194 -0
  196. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
  197. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
  198. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
  199. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
  200. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
  201. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
  202. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
  203. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
  204. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +454 -0
  205. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  206. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  207. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  208. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  209. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  210. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  211. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +280 -0
  212. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  213. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +327 -0
  214. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  215. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  216. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  217. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  218. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  219. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  220. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +243 -0
  221. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  222. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
  223. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  224. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
  225. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  226. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
  227. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
  228. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
  229. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +670 -0
  230. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  231. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  232. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
  233. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +432 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +467 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +420 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +449 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +414 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  254. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +228 -0
  257. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
  260. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +171 -0
  263. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -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 +239 -0
  266. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +311 -0
  270. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  272. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  273. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  274. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  275. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  276. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +363 -0
  277. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  278. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  279. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  280. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  281. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  282. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  283. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  284. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  285. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  286. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +430 -0
  287. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +17 -0
  288. moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
  289. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +17 -0
  290. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +193 -0
  291. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
  292. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
  293. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
  294. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
  295. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
  296. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
  297. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
  298. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +394 -0
  299. moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +17 -0
  300. moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
  301. moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +17 -0
  302. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +472 -0
  303. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  304. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  305. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +377 -0
  306. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
  307. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
  308. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +386 -0
  309. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
  310. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
  311. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +418 -0
  312. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +973 -0
  313. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1543 -0
  314. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +383 -0
  315. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
  316. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
  317. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +504 -0
  318. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +17 -0
  319. moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
  320. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +17 -0
  321. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +489 -0
  322. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
  323. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
  324. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +389 -0
  325. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +17 -0
  326. moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
  327. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +17 -0
  328. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +432 -0
  329. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +17 -0
  330. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
  331. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
  332. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +17 -0
  333. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +377 -0
  334. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
  335. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
  336. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +211 -0
  337. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
  338. moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
  339. moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
  340. moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
  341. moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
  342. moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
  343. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
  344. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +191 -0
  345. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
  346. moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
  347. moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
  348. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
  349. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
  350. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
  351. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +364 -0
  352. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
  353. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
  354. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +164 -0
  355. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  356. moai_adk/templates/.claude/skills/moai-library-mermaid/modules/advanced-patterns.md +465 -0
  357. moai_adk/templates/.claude/skills/moai-library-mermaid/modules/optimization.md +440 -0
  358. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  359. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +335 -0
  360. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  361. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  362. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +336 -0
  363. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +350 -0
  364. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  365. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  366. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  367. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  368. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  369. moai_adk/templates/.claude/skills/moai-library-nextra/modules/optimization.md +303 -0
  370. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  371. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +373 -0
  372. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  373. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  374. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  375. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  376. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  377. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  378. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +283 -0
  379. moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
  380. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
  381. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
  382. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
  383. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
  384. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
  385. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
  386. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
  387. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
  388. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
  389. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
  390. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
  391. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
  392. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
  393. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
  394. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
  395. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
  396. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
  397. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
  398. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
  399. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
  400. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
  401. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
  402. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
  403. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
  404. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
  405. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
  406. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
  407. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
  408. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
  409. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
  410. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
  411. moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
  412. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +425 -0
  413. moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
  414. moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
  415. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +228 -0
  416. moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
  417. moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
  418. moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
  419. moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
  420. moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
  421. moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
  422. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +249 -0
  423. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
  424. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
  425. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
  426. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
  427. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
  428. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +230 -0
  429. moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
  430. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
  431. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
  432. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
  433. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
  434. moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
  435. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +205 -0
  436. moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
  437. moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
  438. moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
  439. moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
  440. moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
  441. moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
  442. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +223 -0
  443. moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
  444. moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
  445. moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
  446. moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
  447. moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
  448. moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
  449. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +206 -0
  450. moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
  451. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
  452. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
  453. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
  454. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
  455. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
  456. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
  457. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
  458. moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
  459. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +209 -0
  460. moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
  461. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
  462. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
  463. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
  464. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
  465. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
  466. moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
  467. moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +473 -0
  468. moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
  469. moai_adk/templates/.claude/skills/moai-plugin-builder/modules/migration.md +341 -0
  470. moai_adk/templates/.claude/skills/moai-plugin-builder/modules/validation.md +373 -0
  471. moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +464 -0
  472. moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +306 -0
  473. moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
  474. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
  475. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
  476. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
  477. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
  478. moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
  479. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
  480. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
  481. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
  482. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
  483. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
  484. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
  485. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
  486. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
  487. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
  488. moai_adk/templates/.claude/skills/moai-tool-opencode/SKILL.md +214 -0
  489. moai_adk/templates/.claude/skills/moai-tool-opencode/examples.md +697 -0
  490. moai_adk/templates/.claude/skills/moai-tool-opencode/index.md +96 -0
  491. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/acp.md +115 -0
  492. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/agents.md +241 -0
  493. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/commands.md +197 -0
  494. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/custom-tools.md +197 -0
  495. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/formatters.md +164 -0
  496. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/keybinds.md +150 -0
  497. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/lsp-servers.md +156 -0
  498. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/mcp-servers.md +214 -0
  499. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/models.md +197 -0
  500. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/permissions.md +162 -0
  501. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/rules.md +129 -0
  502. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/skills.md +192 -0
  503. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/themes.md +200 -0
  504. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/tools.md +169 -0
  505. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/config.md +211 -0
  506. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/enterprise.md +68 -0
  507. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/intro.md +127 -0
  508. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/migration-1.0.md +82 -0
  509. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/network.md +72 -0
  510. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/providers.md +310 -0
  511. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/troubleshooting.md +124 -0
  512. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/ecosystem.md +75 -0
  513. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/plugins.md +218 -0
  514. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/sdk.md +266 -0
  515. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/server.md +207 -0
  516. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/cli.md +159 -0
  517. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/github.md +181 -0
  518. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/gitlab.md +122 -0
  519. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/ide.md +74 -0
  520. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/share.md +106 -0
  521. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/tui.md +129 -0
  522. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/zen.md +118 -0
  523. moai_adk/templates/.claude/skills/moai-tool-opencode/reference.md +790 -0
  524. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +211 -0
  525. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  526. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/modules/advanced-patterns.md +379 -0
  527. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/modules/optimization.md +286 -0
  528. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  529. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  530. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +260 -0
  531. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  532. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  533. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  534. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
  535. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  536. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  537. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  538. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  539. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  540. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  541. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  542. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  543. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  544. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +336 -0
  545. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  546. moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
  547. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  548. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +386 -0
  549. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  550. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  551. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  552. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  553. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  554. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  555. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +307 -0
  556. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  557. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  558. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  559. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  560. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  561. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +269 -0
  562. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/advanced-patterns.md +576 -0
  563. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +302 -0
  564. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
  565. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
  566. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
  567. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
  568. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
  569. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
  570. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
  571. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
  572. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
  573. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +263 -0
  574. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
  575. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
  576. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
  577. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
  578. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
  579. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/optimization.md +505 -0
  580. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
  581. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
  582. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
  583. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
  584. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
  585. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
  586. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
  587. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +327 -0
  588. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
  589. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
  590. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
  591. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
  592. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +313 -0
  593. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
  594. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
  595. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
  596. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
  597. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
  598. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
  599. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +265 -0
  600. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
  601. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  602. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  603. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  604. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  605. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  606. moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +227 -0
  607. moai_adk/templates/.claude/skills/moai-workflow-worktree/examples.md +606 -0
  608. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
  609. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
  610. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
  611. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
  612. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
  613. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
  614. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
  615. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
  616. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
  617. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
  618. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
  619. moai_adk/templates/.claude/skills/moai-workflow-worktree/reference.md +357 -0
  620. moai_adk/templates/.git-hooks/pre-commit +103 -41
  621. moai_adk/templates/.git-hooks/pre-push +244 -31
  622. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  623. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  624. moai_adk/templates/.gitignore +181 -44
  625. moai_adk/templates/.lsp.json +152 -0
  626. moai_adk/templates/.mcp.json +6 -15
  627. moai_adk/templates/.moai/config/config.yaml +58 -0
  628. moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
  629. moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
  630. moai_adk/templates/.moai/config/questions/tab0-init.yaml +259 -0
  631. moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
  632. moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
  633. moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
  634. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +183 -0
  635. moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
  636. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  637. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  638. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  639. moai_adk/templates/.moai/config/sections/quality.yaml +18 -0
  640. moai_adk/templates/.moai/config/sections/system.yaml +24 -0
  641. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  642. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  643. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  644. moai_adk/templates/CLAUDE.md +804 -499
  645. moai_adk/utils/__init__.py +24 -1
  646. moai_adk/utils/banner.py +7 -10
  647. moai_adk/utils/common.py +49 -30
  648. moai_adk/utils/link_validator.py +4 -12
  649. moai_adk/utils/safe_file_reader.py +2 -6
  650. moai_adk/utils/timeout.py +160 -0
  651. moai_adk/utils/toon_utils.py +256 -0
  652. moai_adk/version.py +22 -0
  653. moai_adk-0.41.0.dist-info/METADATA +3274 -0
  654. moai_adk-0.41.0.dist-info/RECORD +683 -0
  655. {moai_adk-0.25.4.dist-info → moai_adk-0.41.0.dist-info}/WHEEL +1 -1
  656. {moai_adk-0.25.4.dist-info → moai_adk-0.41.0.dist-info}/entry_points.txt +1 -0
  657. moai_adk/cli/commands/backup.py +0 -82
  658. moai_adk/cli/commands/improve_user_experience.py +0 -348
  659. moai_adk/cli/commands/migrate.py +0 -158
  660. moai_adk/cli/commands/validate_links.py +0 -118
  661. moai_adk/core/config/auto_spec_config.py +0 -346
  662. moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -925
  663. moai_adk/core/spec/confidence_scoring.py +0 -749
  664. moai_adk/core/spec/ears_template_engine.py +0 -1182
  665. moai_adk/core/spec/quality_validator.py +0 -721
  666. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -413
  667. moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
  668. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
  669. moai_adk/utils/user_experience.py +0 -531
  670. moai_adk-0.25.4.dist-info/METADATA +0 -2279
  671. moai_adk-0.25.4.dist-info/RECORD +0 -112
  672. {moai_adk-0.25.4.dist-info → moai_adk-0.41.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1125 @@
1
+ #!/usr/bin/env python3
2
+ # SessionStart Hook: Enhanced Project Information
3
+ """SessionStart Hook: Enhanced Project Information
4
+
5
+ Claude Code Event: SessionStart
6
+ Purpose: Display enhanced project status with Git info, test status, and SPEC progress
7
+ Execution: Triggered automatically when Claude Code session begins
8
+
9
+ Enhanced Features:
10
+ - Optimized timeout handling with unified manager
11
+ - Efficient Git operations with connection pooling and caching
12
+ - Enhanced error handling with graceful degradation
13
+ - Resource monitoring and cleanup
14
+ - Risk assessment with performance metrics
15
+ """
16
+
17
+ import json
18
+ import logging
19
+ import sys
20
+ from datetime import datetime
21
+ from pathlib import Path
22
+ from typing import Any, Dict
23
+
24
+ # =============================================================================
25
+ # Constants - Risk Assessment Thresholds
26
+ # =============================================================================
27
+ # These thresholds determine project risk level based on various factors
28
+ RISK_SCORE_HIGH = 20 # Score >= this is HIGH risk
29
+ RISK_SCORE_MEDIUM = 10 # Score >= this (and < HIGH) is MEDIUM risk
30
+
31
+ # Git changes thresholds for risk calculation
32
+ GIT_CHANGES_HIGH_THRESHOLD = 20 # Adds 10 to risk score
33
+ GIT_CHANGES_MEDIUM_THRESHOLD = 10 # Adds 5 to risk score
34
+
35
+ # SPEC progress thresholds
36
+ SPEC_PROGRESS_LOW = 50 # Below this adds 15 to risk score
37
+ SPEC_PROGRESS_MEDIUM = 80 # Below this adds 8 to risk score
38
+
39
+ # Risk score contributions
40
+ RISK_GIT_CHANGES_HIGH = 10
41
+ RISK_GIT_CHANGES_MEDIUM = 5
42
+ RISK_SPEC_LOW = 15
43
+ RISK_SPEC_MEDIUM = 8
44
+ RISK_TEST_FAILED = 12
45
+ RISK_COVERAGE_UNKNOWN = 5
46
+
47
+ # Setup message suppression period (days)
48
+ SETUP_MESSAGE_RESCAN_DAYS = 7
49
+
50
+ # =============================================================================
51
+ # Setup import path for shared modules
52
+ HOOKS_DIR = Path(__file__).parent
53
+ LIB_DIR = HOOKS_DIR / "lib"
54
+ if str(LIB_DIR) not in sys.path:
55
+ sys.path.insert(0, str(LIB_DIR))
56
+
57
+ # Import path utils for project root resolution
58
+ from lib.path_utils import find_project_root # noqa: E402
59
+
60
+ # Import unified timeout manager and Git operations manager
61
+ try:
62
+ from lib.git_operations_manager import GitOperationType, get_git_manager
63
+ from lib.timeout import TimeoutError as PlatformTimeoutError
64
+ from lib.unified_timeout_manager import (
65
+ HookTimeoutConfig,
66
+ HookTimeoutError,
67
+ TimeoutPolicy,
68
+ get_timeout_manager,
69
+ hook_timeout_context,
70
+ )
71
+ except ImportError:
72
+ # Fallback implementations if new modules not available
73
+
74
+ def get_timeout_manager():
75
+ return None
76
+
77
+ def hook_timeout_context(hook_name, config=None):
78
+ import contextlib
79
+
80
+ @contextlib.contextmanager
81
+ def dummy_context():
82
+ yield
83
+
84
+ return dummy_context()
85
+
86
+ class HookTimeoutConfig: # type: ignore[no-redef]
87
+ def __init__(self, **kwargs):
88
+ pass
89
+
90
+ class TimeoutPolicy: # type: ignore[no-redef]
91
+ FAST = "fast"
92
+ NORMAL = "normal"
93
+ SLOW = "slow"
94
+
95
+ class HookTimeoutError(Exception): # type: ignore[no-redef]
96
+ pass
97
+
98
+ def get_git_manager():
99
+ return None
100
+
101
+ class GitOperationType: # type: ignore[no-redef]
102
+ BRANCH = "branch"
103
+ LOG = "log"
104
+ STATUS = "status"
105
+
106
+ class PlatformTimeoutError(Exception): # type: ignore[no-redef]
107
+ pass
108
+
109
+
110
+ # Import config cache
111
+ try:
112
+ from core.config_cache import get_cached_config, get_cached_spec_progress
113
+ except ImportError:
114
+ # Fallback to direct functions if cache not available
115
+ # Try PyYAML first, then use simple parser
116
+ try:
117
+ import yaml as yaml_fallback
118
+
119
+ HAS_YAML_FALLBACK = True
120
+ except ImportError:
121
+ HAS_YAML_FALLBACK = False
122
+
123
+ def _simple_yaml_parse(content: str) -> dict:
124
+ """Simple YAML parser for basic key-value configs without PyYAML dependency.
125
+
126
+ Handles:
127
+ - Top-level keys with nested values
128
+ - String values (quoted or unquoted, including empty strings)
129
+ - Boolean values (true/false)
130
+ - Numeric values
131
+ - Comments (lines starting with # or inline after values)
132
+
133
+ Does NOT handle:
134
+ - Lists
135
+ - Complex nested structures beyond 2 levels
136
+ - Multi-line strings
137
+ """
138
+ result = {}
139
+ current_section = None
140
+ lines = content.split("\n")
141
+
142
+ for line in lines:
143
+ # Skip empty lines and comments
144
+ stripped = line.strip()
145
+ if not stripped or stripped.startswith("#"):
146
+ continue
147
+
148
+ # Count leading spaces for indentation
149
+ indent = len(line) - len(line.lstrip())
150
+
151
+ # Check if this is a key-value pair
152
+ if ":" in stripped:
153
+ key_part, _, value_part = stripped.partition(":")
154
+ key = key_part.strip()
155
+ value = value_part.strip()
156
+
157
+ # Track if value was explicitly quoted (including empty strings)
158
+ was_quoted = False
159
+
160
+ # Handle quoted strings first - extract value within quotes
161
+ if value.startswith('"'):
162
+ # Find the closing quote
163
+ close_quote = value.find('"', 1)
164
+ if close_quote > 0:
165
+ value = value[1:close_quote]
166
+ was_quoted = True
167
+ elif value == '""':
168
+ # Handle explicit empty string ""
169
+ value = ""
170
+ was_quoted = True
171
+ elif value.startswith("'"):
172
+ # Find the closing quote
173
+ close_quote = value.find("'", 1)
174
+ if close_quote > 0:
175
+ value = value[1:close_quote]
176
+ was_quoted = True
177
+ elif value == "''":
178
+ # Handle explicit empty string ''
179
+ value = ""
180
+ was_quoted = True
181
+ else:
182
+ # Remove inline comments for unquoted values
183
+ if "#" in value:
184
+ value = value.split("#")[0].strip()
185
+
186
+ # Top-level key (no indentation or minimal indentation)
187
+ if indent == 0:
188
+ if value or was_quoted:
189
+ # Simple key: value (including empty quoted strings)
190
+ result[key] = _parse_simple_value(value)
191
+ else:
192
+ # Section header (e.g., "user:", "language:")
193
+ current_section = key
194
+ result[current_section] = {}
195
+ elif current_section and indent > 0:
196
+ # Nested key under current section
197
+ if value or was_quoted:
198
+ # Store value (including empty quoted strings)
199
+ result[current_section][key] = _parse_simple_value(value)
200
+ else:
201
+ # Nested section (2-level nesting) - only when no value at all
202
+ result[current_section][key] = {}
203
+
204
+ return result
205
+
206
+ def _parse_simple_value(value: str):
207
+ """Parse a simple value string into appropriate Python type."""
208
+ if not value:
209
+ return ""
210
+
211
+ # Boolean
212
+ if value.lower() == "true":
213
+ return True
214
+ if value.lower() == "false":
215
+ return False
216
+
217
+ # Numeric
218
+ try:
219
+ if "." in value:
220
+ return float(value)
221
+ return int(value)
222
+ except ValueError:
223
+ pass
224
+
225
+ return value
226
+
227
+ def _merge_configs(base: dict, override: dict) -> dict:
228
+ """Recursively merge two configuration dictionaries."""
229
+ result = base.copy()
230
+ for key, value in override.items():
231
+ if key in result and isinstance(result[key], dict) and isinstance(value, dict):
232
+ result[key] = _merge_configs(result[key], value)
233
+ else:
234
+ result[key] = value
235
+ return result
236
+
237
+ def _load_yaml_file(file_path: Path) -> dict:
238
+ """Load a YAML file using PyYAML or simple parser."""
239
+ if not file_path.exists():
240
+ return {}
241
+ try:
242
+ content = file_path.read_text(encoding="utf-8")
243
+ if HAS_YAML_FALLBACK:
244
+ return yaml_fallback.safe_load(content) or {}
245
+ else:
246
+ return _simple_yaml_parse(content)
247
+ except Exception:
248
+ return {}
249
+
250
+ def get_cached_config():
251
+ """Load config with section file merging for complete configuration.
252
+
253
+ FIX #245/#243: Properly loads both config.yaml AND section files,
254
+ merging them to provide complete configuration data.
255
+
256
+ Priority (highest to lowest):
257
+ 1. Section files (.moai/config/sections/*.yaml)
258
+ 2. Main config file (.moai/config/config.yaml)
259
+ """
260
+ project_root = find_project_root()
261
+ config_dir = project_root / ".moai" / "config"
262
+
263
+ # Start with main config file
264
+ main_config_path = config_dir / "config.yaml"
265
+ config = _load_yaml_file(main_config_path)
266
+
267
+ # If main config failed, try JSON fallback
268
+ if not config:
269
+ json_config_path = config_dir / "config.json"
270
+ if json_config_path.exists():
271
+ try:
272
+ config = json.loads(json_config_path.read_text(encoding="utf-8"))
273
+ except (json.JSONDecodeError, OSError):
274
+ config = {}
275
+
276
+ # Merge section files (they take priority for their specific keys)
277
+ sections_dir = config_dir / "sections"
278
+ if sections_dir.exists():
279
+ section_files = [
280
+ ("user.yaml", "user"),
281
+ ("language.yaml", "language"),
282
+ ("git-strategy.yaml", "git_strategy"),
283
+ ("project.yaml", "project"),
284
+ ("quality.yaml", "quality"),
285
+ ("system.yaml", "system"),
286
+ ]
287
+
288
+ for filename, key in section_files:
289
+ section_path = sections_dir / filename
290
+ section_data = _load_yaml_file(section_path)
291
+ if section_data:
292
+ # Merge section data into config
293
+ config = _merge_configs(config, section_data)
294
+
295
+ return config if config else None
296
+
297
+ def get_cached_spec_progress():
298
+ """Get SPEC progress information - FIXED to use YAML frontmatter parsing"""
299
+ # FIX #3: Use absolute path from find_project_root() to ensure current project only
300
+ project_root = find_project_root()
301
+ specs_dir = project_root / ".moai" / "specs"
302
+
303
+ if not specs_dir.exists():
304
+ return {"completed": 0, "total": 0, "percentage": 0}
305
+ try:
306
+ # Only scan SPEC folders in THIS project's .moai/specs/ directory
307
+ spec_folders = [d for d in specs_dir.iterdir() if d.is_dir() and d.name.startswith("SPEC-")]
308
+ total = len(spec_folders)
309
+
310
+ # FIX: Parse YAML frontmatter to check for status: completed
311
+ completed = 0
312
+ for folder in spec_folders:
313
+ spec_file = folder / "spec.md"
314
+ if not spec_file.exists():
315
+ continue
316
+
317
+ try:
318
+ # Read spec.md content
319
+ content = spec_file.read_text(encoding="utf-8")
320
+
321
+ # Parse YAML frontmatter (between --- delimiters)
322
+ if content.startswith("---"):
323
+ yaml_end = content.find("---", 3)
324
+ if yaml_end > 0:
325
+ yaml_content = content[3:yaml_end]
326
+ # Check for status: completed (with or without quotes)
327
+ if "status: completed" in yaml_content or 'status: "completed"' in yaml_content:
328
+ completed += 1
329
+ except (OSError, UnicodeDecodeError):
330
+ # File read failure or encoding error - considered incomplete
331
+ pass
332
+
333
+ percentage = (completed / total * 100) if total > 0 else 0
334
+ return {
335
+ "completed": completed,
336
+ "total": total,
337
+ "percentage": round(percentage, 0),
338
+ }
339
+ except (OSError, PermissionError):
340
+ # Directory access or permission errors
341
+ return {"completed": 0, "total": 0, "percentage": 0}
342
+
343
+
344
+ def should_show_setup_messages() -> bool:
345
+ """Determine whether to show setup completion messages (cached version).
346
+
347
+ Logic:
348
+ 1. Read .moai/config/config.yaml (using cache)
349
+ 2. Check session.suppress_setup_messages flag
350
+ 3. If suppress_setup_messages is False, always show messages
351
+ 4. If suppress_setup_messages is True:
352
+ - Check if more than 7 days have passed since suppression
353
+ - Show messages if time threshold exceeded
354
+
355
+ Uses ConfigCache to avoid repeated config file reads.
356
+
357
+ Returns:
358
+ bool: True if messages should be shown, False otherwise
359
+ """
360
+ config = get_cached_config()
361
+
362
+ # If config doesn't exist, show messages
363
+ if not config:
364
+ return True
365
+
366
+ # Check project initialization status
367
+ if not config.get("project", {}).get("initialized", False):
368
+ return True
369
+
370
+ # Check suppress_setup_messages flag
371
+ session_config = config.get("session", {})
372
+ suppress = session_config.get("suppress_setup_messages", False)
373
+
374
+ if not suppress:
375
+ # Flag is False, show messages
376
+ return True
377
+
378
+ # Flag is True, check time threshold
379
+ suppressed_at_str = session_config.get("setup_messages_suppressed_at")
380
+ if not suppressed_at_str:
381
+ # No timestamp recorded, show messages
382
+ return True
383
+
384
+ try:
385
+ suppressed_at = datetime.fromisoformat(suppressed_at_str)
386
+ now = datetime.now(suppressed_at.tzinfo) if suppressed_at.tzinfo else datetime.now()
387
+ days_passed = (now - suppressed_at).days
388
+
389
+ # Show messages if threshold exceeded
390
+ return days_passed >= SETUP_MESSAGE_RESCAN_DAYS
391
+ except (ValueError, TypeError):
392
+ # If timestamp is invalid, show messages
393
+ return True
394
+
395
+
396
+ def check_git_initialized() -> bool:
397
+ """Check if git repository is initialized
398
+
399
+ Returns:
400
+ bool: True if .git directory exists, False otherwise
401
+ """
402
+ try:
403
+ project_root = find_project_root()
404
+ git_dir = project_root / ".git"
405
+ return git_dir.exists() and git_dir.is_dir()
406
+ except Exception:
407
+ return False
408
+
409
+
410
+ def get_git_info() -> Dict[str, Any]:
411
+ """Get comprehensive git information using optimized Git operations manager
412
+
413
+ FIXED: Handles git not initialized state properly
414
+ - Branch: Shows helpful message if git not initialized
415
+ - Last Commit: Shows helpful message if git not initialized or no commits
416
+
417
+ Uses connection pooling, caching, and parallel execution for optimal performance.
418
+ Falls back to basic implementation if Git manager unavailable.
419
+ """
420
+ # FIX #1 and #4: Check if git is initialized first
421
+ if not check_git_initialized():
422
+ return {
423
+ "branch": "Git not initialized → Run 'moai-adk init' to set up Git repository",
424
+ "last_commit": "Git not initialized → Run 'moai-adk init' to set up Git repository",
425
+ "commit_time": "",
426
+ "changes": 0,
427
+ "git_initialized": False,
428
+ }
429
+
430
+ git_manager = get_git_manager()
431
+ if git_manager:
432
+ try:
433
+ # Use optimized Git manager
434
+ project_info = git_manager.get_project_info(use_cache=True)
435
+ branch = project_info.get("branch", "unknown")
436
+ last_commit = project_info.get("last_commit", "unknown")
437
+
438
+ # FIX #1: Handle empty branch (no commits yet)
439
+ if not branch or branch == "unknown":
440
+ branch = "No commits yet → Make your first commit"
441
+
442
+ # FIX #4: Handle no commits case
443
+ if not last_commit or last_commit == "unknown":
444
+ last_commit = "No commits yet"
445
+
446
+ return {
447
+ "branch": branch,
448
+ "last_commit": last_commit,
449
+ "commit_time": project_info.get("commit_time", "unknown"),
450
+ "changes": project_info.get("changes", 0),
451
+ "fetch_time": project_info.get("fetch_time", ""),
452
+ "git_initialized": True,
453
+ }
454
+ except Exception as e:
455
+ logging.warning(f"Git manager failed, falling back: {e}")
456
+
457
+ # Fallback to basic Git operations
458
+ try:
459
+ from concurrent.futures import ThreadPoolExecutor, as_completed
460
+
461
+ # Define git commands to run in parallel
462
+ git_commands = [
463
+ (["git", "branch", "--show-current"], "branch"),
464
+ (["git", "rev-parse", "--abbrev-ref", "HEAD"], "head_ref"),
465
+ (["git", "rev-parse", "--short", "HEAD"], "head_commit"),
466
+ (["git", "log", "--pretty=format:%h %s", "-1"], "last_commit"),
467
+ (["git", "log", "--pretty=format:%ar", "-1"], "commit_time"),
468
+ (["git", "status", "--porcelain"], "changes_raw"),
469
+ ]
470
+
471
+ # Execute git commands in parallel
472
+ results = {}
473
+ with ThreadPoolExecutor(max_workers=4) as executor:
474
+ # Submit all tasks
475
+ futures = {executor.submit(_run_git_command_fallback, cmd): key for cmd, key in git_commands}
476
+
477
+ # Collect results as they complete
478
+ for future in as_completed(futures):
479
+ key = futures[future]
480
+ try:
481
+ results[key] = future.result()
482
+ except (TimeoutError, RuntimeError):
483
+ # Future execution timeout or runtime errors
484
+ results[key] = ""
485
+
486
+ # Process results with proper handling for empty values
487
+ branch = results.get("branch", "")
488
+ head_ref = results.get("head_ref", "")
489
+ head_commit = results.get("head_commit", "")
490
+ last_commit = results.get("last_commit", "")
491
+
492
+ # FIX: Detect detached HEAD state
493
+ if not branch and head_ref == "HEAD":
494
+ # Detached HEAD state - show commit hash
495
+ branch = f"HEAD detached at {head_commit}"
496
+ elif not branch:
497
+ # No commits yet
498
+ branch = "No commits yet → Make your first commit"
499
+
500
+ # FIX #4: Handle no commits case
501
+ if not last_commit:
502
+ last_commit = "No commits yet"
503
+
504
+ return {
505
+ "branch": branch,
506
+ "last_commit": last_commit,
507
+ "commit_time": results.get("commit_time", ""),
508
+ "changes": (len(results.get("changes_raw", "").splitlines()) if results.get("changes_raw") else 0),
509
+ "git_initialized": True,
510
+ }
511
+
512
+ except (RuntimeError, OSError, TimeoutError):
513
+ # ThreadPoolExecutor, git command, or timeout errors
514
+ return {
515
+ "branch": "Error reading git info",
516
+ "last_commit": "Error reading git info",
517
+ "commit_time": "",
518
+ "changes": 0,
519
+ "git_initialized": True,
520
+ }
521
+
522
+
523
+ def _run_git_command_fallback(cmd: list[str]) -> str:
524
+ """Fallback git command execution"""
525
+ try:
526
+ import subprocess
527
+
528
+ result = subprocess.run(cmd, capture_output=True, text=True, timeout=3)
529
+ return result.stdout.strip() if result.returncode == 0 else ""
530
+ except (
531
+ subprocess.TimeoutExpired,
532
+ subprocess.SubprocessError,
533
+ FileNotFoundError,
534
+ OSError,
535
+ ):
536
+ # Git command timeout, subprocess error, or git not found
537
+ return ""
538
+
539
+
540
+ def get_git_strategy_info(config: dict) -> dict:
541
+ """Get git strategy information from config
542
+
543
+ FIX #2: NEW FEATURE - Display git strategy information
544
+
545
+ Args:
546
+ config: Configuration dictionary
547
+
548
+ Returns:
549
+ Dictionary with git_flow and auto_branch information
550
+ """
551
+ if not config:
552
+ return {"git_flow": "unknown", "auto_branch": "unknown"}
553
+
554
+ git_strategy = config.get("git_strategy", {})
555
+ mode = git_strategy.get("mode", "manual")
556
+
557
+ # Get auto_branch setting from branch_creation config
558
+ branch_creation = git_strategy.get("branch_creation", {})
559
+ auto_enabled = branch_creation.get("auto_enabled", False)
560
+
561
+ # Determine auto_branch display
562
+ auto_branch_display = "Yes" if auto_enabled else "No"
563
+
564
+ return {"git_flow": mode, "auto_branch": auto_branch_display}
565
+
566
+
567
+ def _parse_version(version_str: str) -> tuple[int, ...]:
568
+ """Parse version string to comparable tuple
569
+
570
+ Args:
571
+ version_str: Version string (e.g., "0.25.4")
572
+
573
+ Returns:
574
+ Tuple of integers for comparison (e.g., (0, 25, 4))
575
+ """
576
+ try:
577
+ import re
578
+
579
+ clean = version_str.lstrip("v")
580
+ parts = [int(x) for x in re.split(r"[^\d]+", clean) if x.isdigit()]
581
+ return tuple(parts) if parts else (0,)
582
+ except (ValueError, AttributeError, TypeError):
583
+ # Version parsing errors (invalid format, None input, type mismatch)
584
+ return (0,)
585
+
586
+
587
+ def _is_newer_version(newer: str, older: str) -> bool:
588
+ """Compare two versions (semantic versioning)
589
+
590
+ Args:
591
+ newer: Version that might be newer
592
+ older: Version that might be older
593
+
594
+ Returns:
595
+ True if newer > older
596
+ """
597
+ newer_parts = _parse_version(newer)
598
+ older_parts = _parse_version(older)
599
+ return newer_parts > older_parts
600
+
601
+
602
+ def check_version_update() -> tuple[str, bool]:
603
+ """Check if version update is available (fast version using cached data)
604
+
605
+ Reuses PyPI cache from Phase 1 (config_health_check.py).
606
+ Falls back to importlib.metadata for installed version.
607
+
608
+ Returns:
609
+ (status_indicator, has_update)
610
+ - status_indicator: "(latest)", "(dev)" or "⬆️ X.X.X available"
611
+ - has_update: True if update available
612
+ """
613
+ try:
614
+ import importlib.metadata
615
+
616
+ # Get installed version (fast, ~6ms)
617
+ try:
618
+ installed_version = importlib.metadata.version("moai-adk")
619
+ except importlib.metadata.PackageNotFoundError:
620
+ return "(latest)", False
621
+
622
+ # Try to load cached PyPI version from Phase 1
623
+ version_cache_file = find_project_root() / ".moai" / "cache" / "version-check.json"
624
+ latest_version = None
625
+
626
+ if version_cache_file.exists():
627
+ try:
628
+ cache_data = json.loads(version_cache_file.read_text())
629
+ latest_version = cache_data.get("latest")
630
+ except (json.JSONDecodeError, OSError, UnicodeDecodeError):
631
+ # Cache file read or JSON parsing errors
632
+ pass
633
+
634
+ # If no cache or cache is stale, skip check (avoid slow subprocess)
635
+ if not latest_version:
636
+ return "(latest)", False
637
+
638
+ # Compare versions with semantic versioning
639
+ if _is_newer_version(latest_version, installed_version):
640
+ # PyPI has newer version (use update icon instead of warning)
641
+ return f"⬆️ {latest_version} available", True
642
+ elif _is_newer_version(installed_version, latest_version):
643
+ # Local version is newer (development version)
644
+ return "(dev)", False
645
+ else:
646
+ # Same version
647
+ return "(latest)", False
648
+
649
+ except (ImportError, AttributeError, TypeError):
650
+ # Import errors or unexpected type/attribute errors
651
+ return "(latest)", False
652
+
653
+
654
+ def get_test_info() -> dict[str, Any]:
655
+ """Get test coverage and status information
656
+
657
+ NOTE: SessionStart hook must complete quickly (<0.5s).
658
+ Running pytest is too slow (5+ seconds), so we skip it and return unknown status.
659
+ Users can run tests manually with: pytest --cov
660
+
661
+ To check test status, use: /moai:test-status (future feature)
662
+ """
663
+ # Skip pytest execution - it's too slow for SessionStart
664
+ return {"coverage": "unknown", "status": "❓"}
665
+
666
+
667
+ def get_spec_progress() -> dict[str, Any]:
668
+ """Get SPEC progress information (cached version)
669
+
670
+ Uses ConfigCache to avoid repeated filesystem scans.
671
+ Cache is valid for 5 minutes or until .moai/specs/ is modified.
672
+
673
+ Returns:
674
+ Dict with keys: completed, total, percentage
675
+ """
676
+ return get_cached_spec_progress()
677
+
678
+
679
+ def calculate_risk(git_info: dict, spec_progress: dict, test_info: dict) -> str:
680
+ """Calculate overall project risk level using defined thresholds."""
681
+ risk_score = 0
682
+
683
+ # Git changes contribute to risk
684
+ if git_info["changes"] > GIT_CHANGES_HIGH_THRESHOLD:
685
+ risk_score += RISK_GIT_CHANGES_HIGH
686
+ elif git_info["changes"] > GIT_CHANGES_MEDIUM_THRESHOLD:
687
+ risk_score += RISK_GIT_CHANGES_MEDIUM
688
+
689
+ # SPEC progress contributes to risk
690
+ if spec_progress["percentage"] < SPEC_PROGRESS_LOW:
691
+ risk_score += RISK_SPEC_LOW
692
+ elif spec_progress["percentage"] < SPEC_PROGRESS_MEDIUM:
693
+ risk_score += RISK_SPEC_MEDIUM
694
+
695
+ # Test status contributes to risk
696
+ if test_info["status"] != "✅":
697
+ risk_score += RISK_TEST_FAILED
698
+ elif test_info["coverage"] == "unknown":
699
+ risk_score += RISK_COVERAGE_UNKNOWN
700
+
701
+ # Determine risk level
702
+ if risk_score >= RISK_SCORE_HIGH:
703
+ return "HIGH"
704
+ elif risk_score >= RISK_SCORE_MEDIUM:
705
+ return "MEDIUM"
706
+ else:
707
+ return "LOW"
708
+
709
+
710
+ def format_project_metadata() -> str:
711
+ """Format project metadata information as a string.
712
+
713
+ Returns:
714
+ Formatted project metadata string with version and Git info
715
+ """
716
+ moai_version = "unknown"
717
+ config = get_cached_config()
718
+ if config:
719
+ moai_version = config.get("moai", {}).get("version", "unknown")
720
+
721
+ version_status, _has_update = check_version_update()
722
+ return f"📦 Version: {moai_version} {version_status}"
723
+
724
+
725
+ def get_language_info(config: dict) -> dict:
726
+ """Get language configuration information
727
+
728
+ Args:
729
+ config: Configuration dictionary
730
+
731
+ Returns:
732
+ Dictionary with language info including display name and status
733
+ """
734
+ if not config:
735
+ return {
736
+ "conversation_language": "en",
737
+ "language_name": "English",
738
+ "status": "⚠️ No config",
739
+ }
740
+
741
+ lang_config = config.get("language", {})
742
+ conversation_lang = lang_config.get("conversation_language", "en")
743
+ lang_name = lang_config.get("conversation_language_name", "Unknown")
744
+
745
+ # Language status indicator (removed Active indicator for cleaner output)
746
+ return {"conversation_language": conversation_lang, "language_name": lang_name}
747
+
748
+
749
+ def load_user_personalization() -> dict:
750
+ """Load user personalization settings using centralized language configuration resolver
751
+
752
+ FIX #5: Check for template variables and provide setup guidance
753
+
754
+ Uses the new LanguageConfigResolver which provides:
755
+ - Environment variable priority handling
756
+ - Configuration file integration
757
+ - Consistency validation and auto-correction
758
+ - Template variable export capabilities
759
+
760
+ Returns:
761
+ Dictionary with user personalization information
762
+ """
763
+ try:
764
+ # Import the centralized language configuration resolver
765
+ from src.moai_adk.core.language_config_resolver import get_resolver
766
+
767
+ # Get resolver instance and resolve configuration
768
+ resolver = get_resolver(str(find_project_root()))
769
+ config = resolver.resolve_config()
770
+
771
+ # FIX #5: Check if USER_NAME is a template variable or empty
772
+ user_name = config.get("user_name", "")
773
+ has_valid_name = user_name and not user_name.startswith("{{") and not user_name.endswith("}}")
774
+
775
+ # Build personalization info using resolved configuration
776
+ personalization = {
777
+ "user_name": user_name if has_valid_name else "",
778
+ "conversation_language": config.get("conversation_language", "en"),
779
+ "conversation_language_name": config.get("conversation_language_name", "English"),
780
+ "agent_prompt_language": config.get("agent_prompt_language", "en"),
781
+ "is_korean": config.get("conversation_language") == "ko",
782
+ "has_personalization": has_valid_name,
783
+ "config_source": config.get("config_source", "default"),
784
+ "personalized_greeting": (resolver.get_personalized_greeting(config) if has_valid_name else ""),
785
+ "needs_setup": not has_valid_name, # FIX #5: Flag for setup guidance
786
+ }
787
+
788
+ # Export template variables for other system components
789
+ template_vars = resolver.export_template_variables(config)
790
+
791
+ # Store resolved configuration for session-wide access
792
+ personalization_cache_file = find_project_root() / ".moai" / "cache" / "personalization.json"
793
+ try:
794
+ personalization_cache_file.parent.mkdir(parents=True, exist_ok=True)
795
+
796
+ # Store both personalization info and template variables
797
+ cache_data = {
798
+ "personalization": personalization,
799
+ "template_variables": template_vars,
800
+ "resolved_at": datetime.now().isoformat(),
801
+ "config_source": config.get("config_source", "default"),
802
+ }
803
+ personalization_cache_file.write_text(json.dumps(cache_data, ensure_ascii=False, indent=2))
804
+
805
+ except (OSError, PermissionError):
806
+ # Cache write errors are non-critical
807
+ pass
808
+
809
+ return personalization
810
+
811
+ except ImportError:
812
+ # Fallback to basic implementation if resolver not available
813
+ import os
814
+
815
+ # Load config from cache or direct file
816
+ config = get_cached_config()
817
+
818
+ # Environment variables take priority
819
+ user_name = os.getenv("MOAI_USER_NAME")
820
+ conversation_lang = os.getenv("MOAI_CONVERSATION_LANG")
821
+
822
+ # Fallback to config file if environment variables not set
823
+ if user_name is None and config:
824
+ user_name = config.get("user", {}).get("name", "")
825
+
826
+ if conversation_lang is None and config:
827
+ conversation_lang = config.get("language", {}).get("conversation_language", "en")
828
+
829
+ # FIX #5: Check if USER_NAME is a template variable or empty
830
+ has_valid_name = user_name and not user_name.startswith("{{") and not user_name.endswith("}}")
831
+
832
+ # Get language name
833
+ lang_name_map = {
834
+ "ko": "Korean",
835
+ "en": "English",
836
+ "ja": "Japanese",
837
+ "zh": "Chinese",
838
+ "es": "Spanish",
839
+ "fr": "French",
840
+ "de": "German",
841
+ "ru": "Russian",
842
+ }
843
+ lang_name = lang_name_map.get(conversation_lang, "Unknown")
844
+
845
+ # Build personalization info
846
+ personalization = {
847
+ "user_name": user_name if has_valid_name else "",
848
+ "conversation_language": conversation_lang or "en",
849
+ "conversation_language_name": lang_name,
850
+ "is_korean": conversation_lang == "ko",
851
+ "has_personalization": has_valid_name,
852
+ "config_source": "fallback",
853
+ "personalized_greeting": (
854
+ f"{user_name}님"
855
+ if has_valid_name and conversation_lang == "ko"
856
+ else user_name
857
+ if has_valid_name
858
+ else ""
859
+ ),
860
+ "needs_setup": not has_valid_name, # FIX #5: Flag for setup guidance
861
+ }
862
+
863
+ # Store for session-wide access
864
+ personalization_cache_file = find_project_root() / ".moai" / "cache" / "personalization.json"
865
+ try:
866
+ personalization_cache_file.parent.mkdir(parents=True, exist_ok=True)
867
+ personalization_cache_file.write_text(json.dumps(personalization, ensure_ascii=False, indent=2))
868
+ except (OSError, PermissionError):
869
+ # Cache write errors are non-critical
870
+ pass
871
+
872
+ return personalization
873
+
874
+
875
+ def format_session_output() -> str:
876
+ """Format the complete session start output with proper line alignment (optimized).
877
+
878
+ Uses caches for config and SPEC progress to minimize file I/O.
879
+ Parallel git command execution for fast data gathering.
880
+ """
881
+ # Gather information (in parallel for git, cached for config/SPEC)
882
+ git_info = get_git_info()
883
+
884
+ # Get config for language and version info
885
+ config = get_cached_config()
886
+
887
+ # Load user personalization settings
888
+ personalization = load_user_personalization()
889
+
890
+ # Get MoAI version from installed package (not config.json)
891
+ try:
892
+ from moai_adk import __version__ as installed_version
893
+
894
+ moai_version = installed_version
895
+ except ImportError:
896
+ # Fallback to config version if package import fails
897
+ moai_version = "unknown"
898
+ if config:
899
+ moai_version = config.get("moai", {}).get("version", "unknown")
900
+
901
+ # Get language info
902
+ lang_info = get_language_info(config)
903
+
904
+ # FIX #2: Get git strategy info
905
+ git_strategy = get_git_strategy_info(config)
906
+
907
+ # Check for version updates (uses Phase 1 cache)
908
+ version_status, _has_update = check_version_update()
909
+
910
+ # Format output with each item on separate line (reordered per user request)
911
+ output = [
912
+ "🚀 MoAI-ADK Session Started",
913
+ f" 📦 Version: {moai_version} {version_status}",
914
+ f" 🔄 Changes: {git_info['changes']}",
915
+ f" 🌿 Branch: {git_info['branch']}",
916
+ # FIX #2: Add Git Strategy information
917
+ f" 🔧 Github-Flow: {git_strategy['git_flow']} | Auto Branch: {git_strategy['auto_branch']}",
918
+ f" 🔨 Last Commit: {git_info['last_commit']}",
919
+ f" 🌐 Language: {lang_info['language_name']} ({lang_info['conversation_language']})",
920
+ ]
921
+
922
+ # FIX #5: Add personalization or setup guidance (never show template variables)
923
+ if personalization.get("needs_setup", False):
924
+ # Show setup guidance (based on conversation_language)
925
+ if personalization["is_korean"]:
926
+ output.append(
927
+ " 👋 환영합니다! 프로젝트를 시작하기 전에 "
928
+ "'/moai:0-project setting' 명령어로 사용자 이름과 설정을 구성해주세요"
929
+ )
930
+ else:
931
+ output.append(
932
+ " 👋 Welcome! Before starting, please run '/moai:0-project setting' "
933
+ "to configure your name and project settings"
934
+ )
935
+ elif personalization["has_personalization"]:
936
+ user_greeting = personalization.get("personalized_greeting", "")
937
+ if user_greeting:
938
+ if personalization["is_korean"]:
939
+ greeting = f" 👋 다시 오신 것을 환영합니다, {user_greeting}!"
940
+ else:
941
+ greeting = f" 👋 Welcome back, {user_greeting}!"
942
+ else:
943
+ if personalization["is_korean"]:
944
+ greeting = f" 👋 다시 오신 것을 환영합니다, {personalization['user_name']}님!"
945
+ else:
946
+ greeting = f" 👋 Welcome back, {personalization['user_name']}!"
947
+ output.append(greeting)
948
+
949
+ # Configuration source is now handled silently for cleaner output
950
+ # Users can check configuration using dedicated tools if needed
951
+
952
+ return "\n".join(output)
953
+
954
+
955
+ def main() -> None:
956
+ """Main entry point for enhanced SessionStart hook
957
+
958
+ Displays enhanced project information including:
959
+ - Programming language and version
960
+ - Git branch, changes, and last commit with time
961
+ - Git strategy (mode and auto_branch setting)
962
+ - SPEC progress (completed/total)
963
+ - Test coverage and status
964
+ - Risk assessment
965
+
966
+ Features:
967
+ - Optimized timeout handling with unified manager
968
+ - Enhanced error handling with graceful degradation
969
+ - Resource monitoring and cleanup
970
+ - Retry mechanisms for transient failures
971
+
972
+ Exit Codes:
973
+ 0: Success
974
+ 1: Error (timeout, JSON parse failure, handler exception)
975
+ """
976
+ # Configure timeout for session start hook
977
+ timeout_config = HookTimeoutConfig(
978
+ policy=TimeoutPolicy.NORMAL,
979
+ custom_timeout_ms=5000, # 5 seconds
980
+ retry_count=1,
981
+ retry_delay_ms=200,
982
+ graceful_degradation=True,
983
+ memory_limit_mb=100, # Optional memory limit
984
+ )
985
+
986
+ def execute_session_start():
987
+ """Execute session start logic with proper error handling"""
988
+ # Read JSON payload from stdin (for compatibility)
989
+ # Handle Docker/non-interactive environments by checking TTY
990
+ # Note: SessionStart hook receives session info but we don't need it currently
991
+ input_data = sys.stdin.read() if not sys.stdin.isatty() else "{}"
992
+ _ = json.loads(input_data) if input_data.strip() else {} # Explicitly ignore
993
+
994
+ # Check if setup messages should be shown
995
+ show_messages = should_show_setup_messages()
996
+
997
+ # Generate enhanced session output (conditionally)
998
+ session_output = format_session_output() if show_messages else ""
999
+
1000
+ # Return as system message
1001
+ result: Dict[str, Any] = {
1002
+ "continue": True,
1003
+ "systemMessage": session_output,
1004
+ "performance": {
1005
+ "git_manager_used": get_git_manager() is not None,
1006
+ "timeout_manager_used": get_timeout_manager() is not None,
1007
+ },
1008
+ }
1009
+
1010
+ return result
1011
+
1012
+ # Use unified timeout manager if available
1013
+ timeout_manager = get_timeout_manager()
1014
+ if timeout_manager:
1015
+ try:
1016
+ result = timeout_manager.execute_with_timeout(
1017
+ "session_start__show_project_info",
1018
+ execute_session_start,
1019
+ config=timeout_config,
1020
+ )
1021
+
1022
+ print(json.dumps(result, ensure_ascii=False))
1023
+ sys.exit(0)
1024
+
1025
+ except HookTimeoutError as e:
1026
+ # Enhanced timeout error handling
1027
+ timeout_response: Dict[str, Any] = {
1028
+ "continue": True,
1029
+ "systemMessage": "⚠️ Session start timeout - continuing without project info",
1030
+ "error_details": {
1031
+ "hook_id": e.hook_id,
1032
+ "timeout_seconds": e.timeout_seconds,
1033
+ "execution_time": e.execution_time,
1034
+ "will_retry": e.will_retry,
1035
+ },
1036
+ }
1037
+ print(json.dumps(timeout_response, ensure_ascii=False))
1038
+ print(f"SessionStart hook timeout: {e}", file=sys.stderr)
1039
+ sys.exit(1)
1040
+
1041
+ except Exception as e:
1042
+ # Enhanced error handling with context
1043
+ error_response: Dict[str, Any] = {
1044
+ "continue": True,
1045
+ "systemMessage": "⚠️ Session start encountered an error - continuing",
1046
+ "error_details": {
1047
+ "error_type": type(e).__name__,
1048
+ "message": str(e),
1049
+ "graceful_degradation": True,
1050
+ },
1051
+ }
1052
+ print(json.dumps(error_response, ensure_ascii=False))
1053
+ print(f"SessionStart error: {e}", file=sys.stderr)
1054
+ sys.exit(1)
1055
+
1056
+ else:
1057
+ # Fallback to legacy timeout handling
1058
+ try:
1059
+ from lib.timeout import CrossPlatformTimeout
1060
+ from lib.timeout import TimeoutError as PlatformTimeoutError
1061
+
1062
+ # Set 5-second timeout
1063
+ timeout = CrossPlatformTimeout(5)
1064
+ timeout.start()
1065
+
1066
+ try:
1067
+ result = execute_session_start()
1068
+ print(json.dumps(result))
1069
+ sys.exit(0)
1070
+
1071
+ except PlatformTimeoutError:
1072
+ # Timeout - return minimal valid response
1073
+ timeout_response_legacy: Dict[str, Any] = {
1074
+ "continue": True,
1075
+ "systemMessage": "⚠️ Session start timeout - continuing without project info",
1076
+ }
1077
+ print(json.dumps(timeout_response_legacy))
1078
+ print("SessionStart hook timeout after 5 seconds", file=sys.stderr)
1079
+ sys.exit(1)
1080
+
1081
+ finally:
1082
+ # Always cancel timeout
1083
+ timeout.cancel()
1084
+
1085
+ except ImportError:
1086
+ # No timeout handling available
1087
+ try:
1088
+ result = execute_session_start()
1089
+ print(json.dumps(result))
1090
+ sys.exit(0)
1091
+ except Exception as e:
1092
+ print(
1093
+ json.dumps(
1094
+ {
1095
+ "continue": True,
1096
+ "systemMessage": "⚠️ Session start completed with errors",
1097
+ "error": str(e),
1098
+ }
1099
+ )
1100
+ )
1101
+ sys.exit(0)
1102
+
1103
+ except json.JSONDecodeError as e:
1104
+ # JSON parse error
1105
+ json_error_response: Dict[str, Any] = {
1106
+ "continue": True,
1107
+ "hookSpecificOutput": {"error": f"JSON parse error: {e}"},
1108
+ }
1109
+ print(json.dumps(json_error_response))
1110
+ print(f"SessionStart JSON parse error: {e}", file=sys.stderr)
1111
+ sys.exit(1)
1112
+
1113
+ except Exception as e:
1114
+ # Unexpected error
1115
+ general_error_response: Dict[str, Any] = {
1116
+ "continue": True,
1117
+ "hookSpecificOutput": {"error": f"SessionStart error: {e}"},
1118
+ }
1119
+ print(json.dumps(general_error_response))
1120
+ print(f"SessionStart unexpected error: {e}", file=sys.stderr)
1121
+ sys.exit(1)
1122
+
1123
+
1124
+ if __name__ == "__main__":
1125
+ main()