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