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

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

Potentially problematic release.


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

Files changed (378) hide show
  1. moai_adk/__init__.py +2 -5
  2. moai_adk/__main__.py +114 -82
  3. moai_adk/cli/__init__.py +6 -1
  4. moai_adk/cli/commands/__init__.py +1 -3
  5. moai_adk/cli/commands/analyze.py +5 -16
  6. moai_adk/cli/commands/doctor.py +6 -18
  7. moai_adk/cli/commands/init.py +56 -125
  8. moai_adk/cli/commands/language.py +14 -35
  9. moai_adk/cli/commands/status.py +9 -15
  10. moai_adk/cli/commands/update.py +1555 -190
  11. moai_adk/cli/prompts/init_prompts.py +112 -56
  12. moai_adk/cli/spec_status.py +263 -0
  13. moai_adk/cli/ui/__init__.py +44 -0
  14. moai_adk/cli/ui/progress.py +422 -0
  15. moai_adk/cli/ui/prompts.py +389 -0
  16. moai_adk/cli/ui/theme.py +129 -0
  17. moai_adk/cli/worktree/__init__.py +27 -0
  18. moai_adk/cli/worktree/__main__.py +31 -0
  19. moai_adk/cli/worktree/cli.py +672 -0
  20. moai_adk/cli/worktree/exceptions.py +89 -0
  21. moai_adk/cli/worktree/manager.py +490 -0
  22. moai_adk/cli/worktree/models.py +65 -0
  23. moai_adk/cli/worktree/registry.py +128 -0
  24. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  25. moai_adk/core/analysis/session_analyzer.py +17 -56
  26. moai_adk/core/claude_integration.py +26 -54
  27. moai_adk/core/command_helpers.py +10 -10
  28. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  29. moai_adk/core/config/auto_spec_config.py +5 -11
  30. moai_adk/core/config/migration.py +19 -9
  31. moai_adk/core/config/unified.py +436 -0
  32. moai_adk/core/context_manager.py +6 -12
  33. moai_adk/core/enterprise_features.py +1404 -0
  34. moai_adk/core/error_recovery_system.py +725 -112
  35. moai_adk/core/event_driven_hook_system.py +1371 -0
  36. moai_adk/core/git/__init__.py +8 -0
  37. moai_adk/core/git/branch_manager.py +3 -11
  38. moai_adk/core/git/checkpoint.py +1 -3
  39. moai_adk/core/git/conflict_detector.py +413 -0
  40. moai_adk/core/git/manager.py +91 -1
  41. moai_adk/core/hooks/post_tool_auto_spec_completion.py +56 -80
  42. moai_adk/core/input_validation_middleware.py +1006 -0
  43. moai_adk/core/integration/engine.py +6 -18
  44. moai_adk/core/integration/integration_tester.py +10 -9
  45. moai_adk/core/integration/utils.py +1 -1
  46. moai_adk/core/issue_creator.py +10 -28
  47. moai_adk/core/jit_context_loader.py +956 -0
  48. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  49. moai_adk/core/language_config_resolver.py +485 -0
  50. moai_adk/core/language_validator.py +28 -41
  51. moai_adk/core/mcp/setup.py +15 -12
  52. moai_adk/core/merge/__init__.py +9 -0
  53. moai_adk/core/merge/analyzer.py +481 -0
  54. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  55. moai_adk/core/migration/backup_manager.py +78 -9
  56. moai_adk/core/migration/custom_element_scanner.py +358 -0
  57. moai_adk/core/migration/file_migrator.py +8 -17
  58. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  59. moai_adk/core/migration/selective_restorer.py +470 -0
  60. moai_adk/core/migration/template_utils.py +74 -0
  61. moai_adk/core/migration/user_selection_ui.py +338 -0
  62. moai_adk/core/migration/version_detector.py +6 -10
  63. moai_adk/core/migration/version_migrator.py +3 -3
  64. moai_adk/core/performance/cache_system.py +8 -10
  65. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  66. moai_adk/core/project/checker.py +2 -4
  67. moai_adk/core/project/detector.py +1 -3
  68. moai_adk/core/project/initializer.py +135 -23
  69. moai_adk/core/project/phase_executor.py +54 -81
  70. moai_adk/core/project/validator.py +6 -12
  71. moai_adk/core/quality/trust_checker.py +9 -27
  72. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  73. moai_adk/core/robust_json_parser.py +611 -0
  74. moai_adk/core/rollback_manager.py +73 -148
  75. moai_adk/core/session_manager.py +10 -26
  76. moai_adk/core/skill_loading_system.py +579 -0
  77. moai_adk/core/spec/confidence_scoring.py +31 -100
  78. moai_adk/core/spec/ears_template_engine.py +351 -286
  79. moai_adk/core/spec/quality_validator.py +35 -69
  80. moai_adk/core/spec_status_manager.py +64 -74
  81. moai_adk/core/template/backup.py +45 -20
  82. moai_adk/core/template/config.py +112 -39
  83. moai_adk/core/template/merger.py +11 -19
  84. moai_adk/core/template/processor.py +253 -149
  85. moai_adk/core/template_engine.py +73 -40
  86. moai_adk/core/template_variable_synchronizer.py +417 -0
  87. moai_adk/core/unified_permission_manager.py +745 -0
  88. moai_adk/core/user_behavior_analytics.py +851 -0
  89. moai_adk/core/version_sync.py +429 -0
  90. moai_adk/foundation/__init__.py +56 -0
  91. moai_adk/foundation/backend.py +1027 -0
  92. moai_adk/foundation/database.py +1115 -0
  93. moai_adk/foundation/devops.py +1585 -0
  94. moai_adk/foundation/ears.py +431 -0
  95. moai_adk/foundation/frontend.py +870 -0
  96. moai_adk/foundation/git/commit_templates.py +4 -12
  97. moai_adk/foundation/git.py +376 -0
  98. moai_adk/foundation/langs.py +484 -0
  99. moai_adk/foundation/ml_ops.py +1162 -0
  100. moai_adk/foundation/testing.py +1524 -0
  101. moai_adk/foundation/trust/trust_principles.py +23 -72
  102. moai_adk/foundation/trust/validation_checklist.py +57 -162
  103. moai_adk/project/__init__.py +0 -0
  104. moai_adk/project/configuration.py +1084 -0
  105. moai_adk/project/documentation.py +566 -0
  106. moai_adk/project/schema.py +447 -0
  107. moai_adk/statusline/alfred_detector.py +1 -3
  108. moai_adk/statusline/config.py +13 -4
  109. moai_adk/statusline/enhanced_output_style_detector.py +23 -15
  110. moai_adk/statusline/main.py +51 -15
  111. moai_adk/statusline/renderer.py +104 -48
  112. moai_adk/statusline/update_checker.py +3 -9
  113. moai_adk/statusline/version_reader.py +140 -46
  114. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
  115. moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
  116. moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
  117. moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
  118. moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
  119. moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
  120. moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
  121. moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
  122. moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
  123. moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
  124. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
  125. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
  126. moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
  127. moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
  128. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  129. moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
  130. moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
  131. moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
  132. moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
  133. moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
  134. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
  135. moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
  136. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
  137. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
  138. moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
  139. moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
  140. moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
  141. moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
  142. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  143. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  144. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  145. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  146. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  147. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  148. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  149. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  150. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  151. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  152. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  153. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  154. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  155. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  156. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  157. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  158. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  159. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  160. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
  161. moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
  162. moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
  163. moai_adk/templates/.claude/settings.json +172 -0
  164. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
  165. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  166. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  167. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  168. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  169. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  170. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +319 -0
  171. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +320 -0
  172. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  173. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  174. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  175. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  176. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +496 -0
  177. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
  178. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  179. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  180. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  181. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
  182. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  183. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  184. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  185. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
  186. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  187. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  188. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  189. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  190. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  191. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  192. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
  193. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  194. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  195. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  196. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  197. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  198. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  199. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  200. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  201. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  202. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  203. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  204. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  205. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  206. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  207. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
  208. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
  209. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  210. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
  211. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  212. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  213. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  214. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  215. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  216. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  217. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  218. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  219. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
  220. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  221. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  222. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  223. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  224. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  225. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  226. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  227. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  228. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  229. moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
  230. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
  231. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
  232. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
  233. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
  234. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
  235. moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
  236. moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
  237. moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
  238. moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
  239. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
  240. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  241. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  242. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  243. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  244. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
  245. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  246. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  247. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  248. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  249. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  250. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  251. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  252. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  253. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  254. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  255. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
  256. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  257. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  258. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  259. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  260. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  261. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  262. moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
  263. moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
  264. moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
  265. moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
  266. moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
  267. moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
  268. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
  269. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  270. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  271. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  272. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
  273. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  274. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  275. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  276. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  277. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  278. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
  279. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  280. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  281. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  282. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  283. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  284. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  285. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  286. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  287. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  288. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  289. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  290. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
  291. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  292. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  293. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  294. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
  295. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  296. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  297. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  298. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  299. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  300. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  301. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
  302. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  303. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  304. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  305. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  306. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
  307. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  308. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  309. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  310. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  311. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  312. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  313. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  314. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  315. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  316. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  317. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  318. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  319. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  320. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  321. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  322. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  323. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
  324. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  325. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  326. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  327. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  328. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  329. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  330. moai_adk/templates/.git-hooks/pre-commit +103 -41
  331. moai_adk/templates/.git-hooks/pre-push +116 -21
  332. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  333. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  334. moai_adk/templates/.gitignore +184 -44
  335. moai_adk/templates/.mcp.json +7 -9
  336. moai_adk/templates/.moai/cache/personalization.json +10 -0
  337. moai_adk/templates/.moai/config/config.yaml +344 -0
  338. moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
  339. moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
  340. moai_adk/templates/.moai/config/presets/team.yaml +33 -0
  341. moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
  342. moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
  343. moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
  344. moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
  345. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
  346. moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
  347. moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
  348. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  349. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  350. moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
  351. moai_adk/templates/.moai/config/sections/system.yaml +14 -0
  352. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  353. moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
  354. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  355. moai_adk/templates/CLAUDE.md +382 -501
  356. moai_adk/utils/__init__.py +24 -1
  357. moai_adk/utils/banner.py +7 -10
  358. moai_adk/utils/common.py +16 -30
  359. moai_adk/utils/link_validator.py +4 -12
  360. moai_adk/utils/safe_file_reader.py +2 -6
  361. moai_adk/utils/timeout.py +160 -0
  362. moai_adk/utils/toon_utils.py +256 -0
  363. moai_adk/version.py +22 -0
  364. moai_adk-0.32.8.dist-info/METADATA +2478 -0
  365. moai_adk-0.32.8.dist-info/RECORD +396 -0
  366. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
  367. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
  368. moai_adk/cli/commands/backup.py +0 -82
  369. moai_adk/cli/commands/improve_user_experience.py +0 -348
  370. moai_adk/cli/commands/migrate.py +0 -158
  371. moai_adk/cli/commands/validate_links.py +0 -118
  372. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -413
  373. moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
  374. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
  375. moai_adk/utils/user_experience.py +0 -531
  376. moai_adk-0.25.4.dist-info/METADATA +0 -2279
  377. moai_adk-0.25.4.dist-info/RECORD +0 -112
  378. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
@@ -1,12 +1,11 @@
1
1
  """Project initialization prompts
2
2
 
3
- Collect interactive project settings
3
+ Collect interactive project settings with modern UI.
4
4
  """
5
5
 
6
6
  from pathlib import Path
7
7
  from typing import TypedDict
8
8
 
9
- import questionary
10
9
  from rich.console import Console
11
10
 
12
11
  console = Console()
@@ -18,9 +17,8 @@ class ProjectSetupAnswers(TypedDict):
18
17
  project_name: str
19
18
  mode: str # personal | team (default from init)
20
19
  locale: str # ko | en | ja | zh | other (default from init)
21
- language: str | None # Will be set in /alfred:0-project
22
- author: str # Will be set in /alfred:0-project
23
- mcp_servers: list[str] # Selected MCP servers to install
20
+ language: str | None # Will be set in /moai:0-project
21
+ author: str # Will be set in /moai:0-project
24
22
  custom_language: str | None # User input for "other" language option
25
23
 
26
24
 
@@ -30,7 +28,7 @@ def prompt_project_setup(
30
28
  project_path: Path | None = None,
31
29
  initial_locale: str | None = None,
32
30
  ) -> ProjectSetupAnswers:
33
- """Project setup prompt
31
+ """Project setup prompt with modern UI.
34
32
 
35
33
  Args:
36
34
  project_name: Project name (asks when None)
@@ -46,29 +44,29 @@ def prompt_project_setup(
46
44
  """
47
45
  answers: ProjectSetupAnswers = {
48
46
  "project_name": "",
49
- "mode": "personal", # Default: will be configurable in /alfred:0-project
50
- "locale": "en", # Default: will be configurable in /alfred:0-project
51
- "language": None, # Will be detected in /alfred:0-project
52
- "author": "", # Will be set in /alfred:0-project
53
- "mcp_servers": [], # Selected MCP servers
47
+ "mode": "personal", # Default: will be configurable in /moai:0-project
48
+ "locale": "en", # Default: will be configurable in /moai:0-project
49
+ "language": None, # Will be detected in /moai:0-project
50
+ "author": "", # Will be set in /moai:0-project
54
51
  "custom_language": None, # User input for other language
55
52
  }
56
53
 
57
54
  try:
58
55
  # SIMPLIFIED: Only ask for project name
59
- # All other settings (mode, locale, language, author) are now configured in /alfred:0-project
56
+ # All other settings (mode, locale, language, author) are now configured in /moai:0-project
60
57
 
61
58
  # 1. Project name (only when not using the current directory)
62
59
  if not is_current_dir:
63
60
  if project_name:
64
61
  answers["project_name"] = project_name
65
- console.print(f"[cyan]📦 Project Name:[/cyan] {project_name}")
62
+ console.print(f"[#DA7756]📦 Project Name:[/#DA7756] {project_name}")
66
63
  else:
67
- result = questionary.text(
64
+ # Try new UI, fallback to questionary
65
+ result = _prompt_text(
68
66
  "📦 Project Name:",
69
67
  default="my-moai-project",
70
- validate=lambda text: len(text) > 0 or "Project name is required",
71
- ).ask()
68
+ required=True,
69
+ )
72
70
  if result is None:
73
71
  raise KeyboardInterrupt
74
72
  answers["project_name"] = result
@@ -81,7 +79,7 @@ def prompt_project_setup(
81
79
  else:
82
80
  answers["project_name"] = Path.cwd().name # fallback
83
81
  console.print(
84
- f"[cyan]📦 Project Name:[/cyan] {answers['project_name']} [dim](current directory)[/dim]"
82
+ f"[#DA7756]📦 Project Name:[/#DA7756] {answers['project_name']} [dim](current directory)[/dim]"
85
83
  )
86
84
 
87
85
  # 2. Language selection - Korean, English, Japanese, Chinese, Other
@@ -89,75 +87,133 @@ def prompt_project_setup(
89
87
 
90
88
  # Build choices list
91
89
  language_choices = [
92
- "한국어 (Korean)",
93
- "English",
94
- "日本語 (Japanese)",
95
- "中文 (Chinese)",
96
- "Other - Manual input",
90
+ {"name": "Korean (한국어)", "value": "ko"},
91
+ {"name": "English", "value": "en"},
92
+ {"name": "Japanese (日本語)", "value": "ja"},
93
+ {"name": "Chinese (中文)", "value": "zh"},
94
+ {"name": "Other - Manual input", "value": "other"},
97
95
  ]
98
96
 
99
- # Determine default choice index
97
+ # Determine default
100
98
  language_values = ["ko", "en", "ja", "zh", "other"]
101
99
  default_locale = initial_locale or "en"
102
- default_index = language_values.index(default_locale) if default_locale in language_values else 1
100
+ default_value = default_locale if default_locale in language_values else "en"
103
101
 
104
- language_choice_name = questionary.select(
102
+ language_choice = _prompt_select(
105
103
  "Select your conversation language:",
106
104
  choices=language_choices,
107
- default=language_choices[default_index],
108
- ).ask()
109
-
110
- # Map choice name back to value
111
- choice_mapping = {
112
- "한국어 (Korean)": "ko",
113
- "English": "en",
114
- "日本語 (Japanese)": "ja",
115
- "中文 (Chinese)": "zh",
116
- "Other - Manual input": "other",
117
- }
118
- language_choice = choice_mapping.get(language_choice_name)
105
+ default=default_value,
106
+ )
119
107
 
120
108
  if language_choice is None:
121
109
  raise KeyboardInterrupt
122
110
 
123
111
  if language_choice == "other":
124
112
  # Prompt for manual input
125
- custom_lang = questionary.text(
113
+ custom_lang = _prompt_text(
126
114
  "Enter your language:",
127
- validate=lambda text: len(text) > 0 or "Language is required",
128
- ).ask()
115
+ required=True,
116
+ )
129
117
 
130
118
  if custom_lang is None:
131
119
  raise KeyboardInterrupt
132
120
 
133
121
  answers["custom_language"] = custom_lang
134
122
  answers["locale"] = "other" # When ISO code is not available
135
- console.print(f"[cyan]🌐 Selected Language:[/cyan] {custom_lang}")
123
+ console.print(f"[#DA7756]🌐 Selected Language:[/#DA7756] {custom_lang}")
136
124
  else:
137
125
  answers["locale"] = language_choice
138
126
  language_names = {
139
- "ko": "한국어 (Korean)",
127
+ "ko": "Korean (한국어)",
140
128
  "en": "English",
141
- "ja": "日本語 (Japanese)",
142
- "zh": "中文 (Chinese)",
129
+ "ja": "Japanese (日本語)",
130
+ "zh": "Chinese (中文)",
143
131
  }
144
132
  console.print(
145
- f"[cyan]🌐 Selected Language:[/cyan] {language_names.get(language_choice, language_choice)}"
133
+ f"[#DA7756]🌐 Selected Language:[/#DA7756] {language_names.get(language_choice, language_choice)}"
146
134
  )
147
135
 
148
- # Auto-install MCP servers
149
- mcp_servers = ["context7", "playwright", "sequential-thinking"]
150
- answers["mcp_servers"] = mcp_servers
151
- console.print("\n[blue]🔧 MCP (Model Context Protocol) Configuration[/blue]")
152
- console.print(
153
- "[dim]Enhance AI capabilities with MCP servers (auto-installing recommended servers)[/dim]\n"
154
- )
155
- console.print(
156
- f"[green]✅ MCP servers auto-installed: {', '.join(mcp_servers)}[/green]"
157
- )
158
-
159
136
  return answers
160
137
 
161
138
  except KeyboardInterrupt:
162
139
  console.print("\n[yellow]Setup cancelled by user[/yellow]")
163
140
  raise
141
+
142
+
143
+ def _prompt_text(
144
+ message: str,
145
+ default: str = "",
146
+ required: bool = False,
147
+ ) -> str | None:
148
+ """Display text input prompt with modern UI fallback.
149
+
150
+ Args:
151
+ message: Prompt message
152
+ default: Default value
153
+ required: Whether input is required
154
+
155
+ Returns:
156
+ User input or None if cancelled
157
+ """
158
+ try:
159
+ from moai_adk.cli.ui.prompts import styled_input
160
+
161
+ return styled_input(message, default=default, required=required)
162
+ except ImportError:
163
+ import questionary
164
+
165
+ if required:
166
+ result = questionary.text(
167
+ message,
168
+ default=default,
169
+ validate=lambda text: len(text) > 0 or "This field is required",
170
+ ).ask()
171
+ else:
172
+ result = questionary.text(message, default=default).ask()
173
+ return result
174
+
175
+
176
+ def _prompt_select(
177
+ message: str,
178
+ choices: list[dict[str, str]],
179
+ default: str | None = None,
180
+ ) -> str | None:
181
+ """Display select prompt with modern UI fallback.
182
+
183
+ Args:
184
+ message: Prompt message
185
+ choices: List of choices with name and value
186
+ default: Default value
187
+
188
+ Returns:
189
+ Selected value or None if cancelled
190
+ """
191
+ try:
192
+ from moai_adk.cli.ui.prompts import styled_select
193
+
194
+ return styled_select(message, choices=choices, default=default)
195
+ except ImportError:
196
+ import questionary
197
+
198
+ # Map choices for questionary format
199
+ choice_names = [c["name"] for c in choices]
200
+ value_map = {c["name"]: c["value"] for c in choices}
201
+
202
+ # Find default name
203
+ default_name = None
204
+ if default:
205
+ for c in choices:
206
+ if c["value"] == default:
207
+ default_name = c["name"]
208
+ break
209
+
210
+ result_name = questionary.select(
211
+ message,
212
+ choices=choice_names,
213
+ default=default_name,
214
+ ).ask()
215
+
216
+ if result_name is None:
217
+ return None
218
+
219
+ return value_map.get(result_name)
@@ -0,0 +1,263 @@
1
+ #!/usr/bin/env python3
2
+ """Spec Status Manager CLI Tool
3
+
4
+ Provides command-line interface for managing SPEC status tracking.
5
+
6
+ Usage:
7
+ python3 -m moai_adk.cli.spec_status <command> <spec_id> [options]
8
+ moai-spec <command> <spec_id> [options]
9
+
10
+ Commands:
11
+ - status_update: Update SPEC status
12
+ - validate_completion: Validate if SPEC is ready for completion
13
+ - batch_update: Update all completed SPECs
14
+ """
15
+
16
+ import argparse
17
+ import json
18
+ import sys
19
+ from datetime import datetime
20
+ from pathlib import Path
21
+ from typing import Any, Dict
22
+
23
+ try:
24
+ from moai_adk.core.spec_status_manager import SpecStatusManager
25
+ except ImportError:
26
+ # Fallback: look in current directory
27
+ import sys
28
+ from pathlib import Path
29
+
30
+ sys.path.insert(0, str(Path(__file__).parent.parent))
31
+ try:
32
+ from core.spec_status_manager import SpecStatusManager # type: ignore[no-redef]
33
+ except ImportError:
34
+ raise ImportError("SpecStatusManager not found")
35
+
36
+
37
+ def update_spec_status(spec_id: str, new_status: str, reason: str = "") -> Dict[str, Any]:
38
+ """Update SPEC status with validation and logging
39
+
40
+ Args:
41
+ spec_id: The SPEC identifier
42
+ new_status: New status value
43
+ reason: Reason for status change
44
+
45
+ Returns:
46
+ Update result dictionary
47
+ """
48
+ try:
49
+ # Initialize manager
50
+ project_root = Path.cwd()
51
+ manager = SpecStatusManager(project_root)
52
+
53
+ # Validate new status
54
+ valid_statuses = ["draft", "in-progress", "completed", "archived"]
55
+ if new_status not in valid_statuses:
56
+ return {
57
+ "success": False,
58
+ "error": f"Invalid status: {new_status}. Valid statuses: {valid_statuses}",
59
+ }
60
+
61
+ # Check if SPEC exists
62
+ spec_file = project_root / ".moai" / "specs" / spec_id / "spec.md"
63
+ if not spec_file.exists():
64
+ return {"success": False, "error": f"SPEC file not found: {spec_file}"}
65
+
66
+ # Update status
67
+ success = manager.update_spec_status(spec_id, new_status)
68
+
69
+ if success:
70
+ # Log the status change
71
+ log_entry = {
72
+ "timestamp": datetime.now().isoformat(),
73
+ "spec_id": spec_id,
74
+ "old_status": "unknown", # Could be extracted from file before update
75
+ "new_status": new_status,
76
+ "reason": reason,
77
+ }
78
+
79
+ # Create status change log
80
+ log_dir = project_root / ".moai" / "logs"
81
+ log_dir.mkdir(parents=True, exist_ok=True)
82
+ log_file = log_dir / "spec_status_changes.jsonl"
83
+
84
+ with open(log_file, "a", encoding="utf-8") as f:
85
+ f.write(json.dumps(log_entry, ensure_ascii=False) + "\n")
86
+
87
+ return {
88
+ "success": True,
89
+ "spec_id": spec_id,
90
+ "new_status": new_status,
91
+ "reason": reason,
92
+ "timestamp": log_entry["timestamp"],
93
+ }
94
+ else:
95
+ return {
96
+ "success": False,
97
+ "error": f"Failed to update SPEC {spec_id} status",
98
+ }
99
+
100
+ except Exception as e:
101
+ return {"success": False, "error": f"Error updating SPEC status: {str(e)}"}
102
+
103
+
104
+ def validate_spec_completion(spec_id: str) -> Dict[str, Any]:
105
+ """Validate if SPEC is ready for completion
106
+
107
+ Args:
108
+ spec_id: The SPEC identifier
109
+
110
+ Returns:
111
+ Validation result dictionary
112
+ """
113
+ try:
114
+ project_root = Path.cwd()
115
+ manager = SpecStatusManager(project_root)
116
+
117
+ # Run validation
118
+ validation = manager.validate_spec_for_completion(spec_id)
119
+
120
+ return {"success": True, "spec_id": spec_id, "validation": validation}
121
+
122
+ except Exception as e:
123
+ return {
124
+ "success": False,
125
+ "error": f"Error validating SPEC completion: {str(e)}",
126
+ }
127
+
128
+
129
+ def batch_update_completed_specs() -> Dict[str, Any]:
130
+ """Batch update all draft SPECs that have completed implementations
131
+
132
+ Returns:
133
+ Batch update result dictionary
134
+ """
135
+ try:
136
+ project_root = Path.cwd()
137
+ manager = SpecStatusManager(project_root)
138
+
139
+ # Run batch update
140
+ results = manager.batch_update_completed_specs()
141
+
142
+ # Log the batch update
143
+ log_entry = {
144
+ "timestamp": datetime.now().isoformat(),
145
+ "operation": "batch_update_completed",
146
+ "results": results,
147
+ }
148
+
149
+ log_dir = project_root / ".moai" / "logs"
150
+ log_dir.mkdir(parents=True, exist_ok=True)
151
+ log_file = log_dir / "spec_status_changes.jsonl"
152
+
153
+ with open(log_file, "a", encoding="utf-8") as f:
154
+ f.write(json.dumps(log_entry, ensure_ascii=False) + "\n")
155
+
156
+ return {
157
+ "success": True,
158
+ "results": results,
159
+ "timestamp": log_entry["timestamp"],
160
+ }
161
+
162
+ except Exception as e:
163
+ return {"success": False, "error": f"Error in batch update: {str(e)}"}
164
+
165
+
166
+ def detect_draft_specs() -> Dict[str, Any]:
167
+ """Detect all draft SPECs in the project
168
+
169
+ Returns:
170
+ List of draft SPEC IDs
171
+ """
172
+ try:
173
+ project_root = Path.cwd()
174
+ manager = SpecStatusManager(project_root)
175
+
176
+ draft_specs = manager.detect_draft_specs()
177
+
178
+ return {
179
+ "success": True,
180
+ "draft_specs": list(draft_specs),
181
+ "count": len(draft_specs),
182
+ }
183
+
184
+ except Exception as e:
185
+ return {"success": False, "error": f"Error detecting draft SPECs: {str(e)}"}
186
+
187
+
188
+ def main():
189
+ """Main function"""
190
+ parser = argparse.ArgumentParser(description="Spec Status Manager Hooks")
191
+ parser.add_argument(
192
+ "command",
193
+ choices=[
194
+ "status_update",
195
+ "validate_completion",
196
+ "batch_update",
197
+ "detect_drafts",
198
+ ],
199
+ help="Command to execute",
200
+ )
201
+ parser.add_argument("spec_id", nargs="?", help="SPEC ID (for specific commands)")
202
+ parser.add_argument("--status", help="New status value")
203
+ parser.add_argument("--reason", default="", help="Reason for status change")
204
+
205
+ args = parser.parse_args()
206
+
207
+ try:
208
+ result = {}
209
+
210
+ if args.command == "status_update":
211
+ if not args.spec_id or not args.status:
212
+ print(
213
+ json.dumps(
214
+ {
215
+ "success": False,
216
+ "error": "status_update requires spec_id and --status",
217
+ }
218
+ )
219
+ )
220
+ sys.exit(1)
221
+
222
+ result = update_spec_status(args.spec_id, args.status, args.reason)
223
+
224
+ elif args.command == "validate_completion":
225
+ if not args.spec_id:
226
+ print(
227
+ json.dumps(
228
+ {
229
+ "success": False,
230
+ "error": "validate_completion requires spec_id",
231
+ }
232
+ )
233
+ )
234
+ sys.exit(1)
235
+
236
+ result = validate_spec_completion(args.spec_id)
237
+
238
+ elif args.command == "batch_update":
239
+ result = batch_update_completed_specs()
240
+
241
+ elif args.command == "detect_drafts":
242
+ result = detect_draft_specs()
243
+
244
+ # Add command info
245
+ result["command"] = args.command
246
+ result["execution_time"] = datetime.now().isoformat()
247
+
248
+ print(json.dumps(result, ensure_ascii=False, indent=2))
249
+
250
+ except Exception as e:
251
+ error_result = {
252
+ "success": False,
253
+ "command": args.command if "args" in locals() else "unknown",
254
+ "error": str(e),
255
+ "execution_time": datetime.now().isoformat(),
256
+ }
257
+
258
+ print(json.dumps(error_result, ensure_ascii=False, indent=2))
259
+ sys.exit(1)
260
+
261
+
262
+ if __name__ == "__main__":
263
+ main()
@@ -0,0 +1,44 @@
1
+ """MoAI-ADK CLI UI Components
2
+
3
+ Modern, user-friendly CLI interface components using InquirerPy and Rich.
4
+
5
+ Provides:
6
+ - Fuzzy search checkbox prompts
7
+ - Progress indicators (bars, spinners)
8
+ - Styled text input and selection prompts
9
+ - Consistent theming across all CLI commands
10
+ """
11
+
12
+ from .progress import (
13
+ ProgressContext,
14
+ SpinnerContext,
15
+ create_progress_bar,
16
+ create_spinner,
17
+ )
18
+ from .prompts import (
19
+ fuzzy_checkbox,
20
+ fuzzy_select,
21
+ styled_checkbox,
22
+ styled_confirm,
23
+ styled_input,
24
+ styled_select,
25
+ )
26
+ from .theme import MOAI_THEME, get_styled_choice
27
+
28
+ __all__ = [
29
+ # Prompts
30
+ "fuzzy_checkbox",
31
+ "fuzzy_select",
32
+ "styled_checkbox",
33
+ "styled_confirm",
34
+ "styled_input",
35
+ "styled_select",
36
+ # Progress
37
+ "ProgressContext",
38
+ "SpinnerContext",
39
+ "create_progress_bar",
40
+ "create_spinner",
41
+ # Theme
42
+ "MOAI_THEME",
43
+ "get_styled_choice",
44
+ ]