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