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

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

Potentially problematic release.


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

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