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,348 +0,0 @@
1
- """
2
- User Experience Improvement CLI Command
3
- """
4
-
5
- import argparse
6
- import asyncio
7
- from pathlib import Path
8
-
9
- from rich.console import Console
10
- from rich.panel import Panel
11
- from rich.progress import Progress, SpinnerColumn, TextColumn
12
- from rich.table import Table
13
-
14
- from moai_adk.utils.user_experience import (
15
- UserExperienceAnalyzer,
16
- generate_improvement_plan,
17
- )
18
-
19
- console = Console()
20
-
21
-
22
- def create_parser(subparsers) -> argparse.ArgumentParser:
23
- """Create user experience improvement parser"""
24
- parser = subparsers.add_parser(
25
- "improve-ux",
26
- help="Analyze user experience improvements",
27
- description="Analyze user experience of online documentation portal and provide improvement plan",
28
- )
29
-
30
- parser.add_argument(
31
- "--url",
32
- "-u",
33
- type=str,
34
- default="https://adk.mo.ai.kr",
35
- help="URL to analyze (default: https://adk.mo.ai.kr)",
36
- )
37
-
38
- parser.add_argument(
39
- "--output", "-o", type=str, help="File path to save analysis results"
40
- )
41
-
42
- parser.add_argument(
43
- "--format",
44
- "-f",
45
- type=str,
46
- choices=["json", "markdown", "text"],
47
- default="markdown",
48
- help="Output format (default: markdown)",
49
- )
50
-
51
- parser.add_argument(
52
- "--verbose", "-v", action="store_true", help="Display detailed progress"
53
- )
54
-
55
- parser.add_argument(
56
- "--max-workers",
57
- "-w",
58
- type=int,
59
- default=5,
60
- help="Maximum number of concurrent tasks (default: 5)",
61
- )
62
-
63
- return parser
64
-
65
-
66
- def format_metrics_table(metrics: dict) -> Table:
67
- """Format metrics table"""
68
- table = Table(title="User Experience Metrics")
69
- table.add_column("Category", style="cyan")
70
- table.add_column("Score", style="magenta")
71
- table.add_column("Status", style="green")
72
-
73
- # Performance metrics
74
- perf = metrics.get("performance")
75
- table.add_row(
76
- "Performance",
77
- f"{perf.success_rate if perf else 0:.2f}",
78
- "✅ Good" if (perf and perf.is_good) else "❌ Needs Improvement",
79
- )
80
-
81
- # Navigation metrics
82
- nav = metrics.get("navigation")
83
- table.add_row(
84
- "Navigation",
85
- f"{nav.structure_score if nav else 0:.2f}",
86
- "✅ Good" if (nav and nav.is_good) else "❌ Needs Improvement",
87
- )
88
-
89
- # Content metrics
90
- content = metrics.get("content")
91
- table.add_row(
92
- "Content",
93
- f"{content.accuracy_score if content else 0:.2f}",
94
- "✅ Good" if (content and content.is_good) else "❌ Needs Improvement",
95
- )
96
-
97
- # Accessibility metrics
98
- acc = metrics.get("accessibility")
99
- table.add_row(
100
- "Accessibility",
101
- f"{1.0 if (acc and acc.is_good) else 0.0:.2f}",
102
- "✅ Good" if (acc and acc.is_good) else "❌ Needs Improvement",
103
- )
104
-
105
- return table
106
-
107
-
108
- def format_recommendations(recommendations: list) -> Table:
109
- """Format recommendations table"""
110
- table = Table(title="Improvement Recommendations")
111
- table.add_column("Recommendation", style="yellow")
112
- table.add_column("Priority", style="red")
113
-
114
- for i, rec in enumerate(recommendations, 1):
115
- priority = "Medium" # Default
116
- if (
117
- "error" in rec.lower()
118
- or "keyboard" in rec.lower()
119
- or "accuracy" in rec.lower()
120
- ):
121
- priority = "High"
122
- elif "performance" in rec.lower() or "structure" in rec.lower():
123
- priority = "Medium"
124
- else:
125
- priority = "Low"
126
-
127
- table.add_row(f"{i}. {rec}", priority)
128
-
129
- return table
130
-
131
-
132
- def format_timeline(timeline: dict) -> Table:
133
- """Format timeline table"""
134
- table = Table(title="Implementation Plan")
135
- table.add_column("Period", style="cyan")
136
- table.add_column("Tasks", style="magenta")
137
-
138
- for period, tasks in timeline.items():
139
- if tasks:
140
- table.add_row(
141
- period.replace("_", " ").title(),
142
- "\n".join(f"• {task}" for task in tasks),
143
- )
144
-
145
- return table
146
-
147
-
148
- async def analyze_user_experience(
149
- url: str, max_workers: int = 5, verbose: bool = False
150
- ) -> dict:
151
- """Perform user experience analysis"""
152
- if verbose:
153
- console.print(f"[blue]Starting user experience analysis: {url}[/blue]")
154
-
155
- analyzer = UserExperienceAnalyzer(url, max_workers=max_workers)
156
-
157
- with Progress(
158
- SpinnerColumn(),
159
- TextColumn("[progress.description]{task.description}"),
160
- console=console,
161
- transient=True,
162
- ) as progress:
163
- # Create analysis task
164
- analysis_task = progress.add_task("Analyzing user experience...", total=None)
165
-
166
- # Execute analysis
167
- analysis_report = await analyzer.generate_report()
168
-
169
- progress.update(analysis_task, completed=True)
170
-
171
- return analysis_report
172
-
173
-
174
- def generate_markdown_report(analysis_report: dict, improvement_plan: dict) -> str:
175
- """Generate markdown report"""
176
- report = []
177
-
178
- # Header
179
- report.append("# User Experience Improvement Report")
180
- report.append("")
181
- report.append(f"**Analysis Target**: {analysis_report.get('base_url', 'N/A')}")
182
- report.append(f"**Analysis Time**: {analysis_report.get('generated_at', 'N/A')}")
183
- report.append("")
184
-
185
- # Overall score
186
- overall_score = analysis_report.get("overall_score", 0)
187
- report.append(f"## Overall Score: {overall_score:.2f}")
188
- report.append("")
189
-
190
- # Metrics details
191
- report.append("### Metrics Details")
192
- report.append("")
193
-
194
- # Performance metrics
195
- performance = analysis_report.get("performance")
196
- report.append("#### Performance")
197
- report.append(
198
- f"- Success Rate: {performance.success_rate if performance else 0:.2f}"
199
- )
200
- report.append(
201
- f"- Average Load Time: {performance.load_time if performance else 0:.2f}s"
202
- )
203
- report.append(
204
- f"- Response Time: {performance.response_time if performance else 0:.2f}s"
205
- )
206
- report.append(f"- Error Rate: {performance.error_rate if performance else 0:.2f}")
207
- report.append("")
208
-
209
- # Navigation metrics
210
- navigation = analysis_report.get("navigation")
211
- report.append("#### Navigation")
212
- report.append(
213
- f"- Structure Score: {navigation.structure_score if navigation else 0:.2f}"
214
- )
215
- report.append(f"- Link Count: {navigation.link_count if navigation else 0}")
216
- report.append(f"- Depth: {navigation.depth if navigation else 0}")
217
- report.append(f"- Completeness: {navigation.completeness if navigation else 0:.2f}")
218
- report.append("")
219
-
220
- # Content metrics
221
- content = analysis_report.get("content")
222
- report.append("#### Content")
223
- report.append(f"- Accuracy: {content.accuracy_score if content else 0:.2f}")
224
- report.append(f"- Completeness: {content.completeness_score if content else 0:.2f}")
225
- report.append(f"- Organization: {content.organization_score if content else 0:.2f}")
226
- report.append(f"- Readability: {content.readability_score if content else 0:.2f}")
227
- report.append("")
228
-
229
- # Accessibility metrics
230
- accessibility = analysis_report.get("accessibility")
231
- report.append("#### Accessibility")
232
- report.append(
233
- f"- Keyboard Navigation: {'✅' if (accessibility and accessibility.keyboard_navigation) else '❌'}"
234
- )
235
- report.append(
236
- f"- Screen Reader Support: {'✅' if (accessibility and accessibility.screen_reader_support) else '❌'}"
237
- )
238
- report.append(
239
- f"- Color Contrast: {'✅' if (accessibility and accessibility.color_contrast) else '❌'}"
240
- )
241
- report.append(
242
- f"- Responsive Design: {'✅' if (accessibility and accessibility.responsive_design) else '❌'}"
243
- )
244
- report.append(
245
- f"- ARIA Labels: {'✅' if (accessibility and accessibility.aria_labels) else '❌'}"
246
- )
247
- report.append("")
248
-
249
- # Recommendations
250
- report.append("### Improvement Recommendations")
251
- report.append("")
252
- for rec in analysis_report.get("recommendations", []):
253
- report.append(f"- {rec}")
254
- report.append("")
255
-
256
- # Implementation plan
257
- report.append("### Implementation Plan")
258
- report.append("")
259
- report.append(
260
- f"**Estimated Duration**: {improvement_plan.get('estimated_duration', 'N/A')}"
261
- )
262
- report.append("")
263
-
264
- timeline = improvement_plan.get("timeline", {})
265
- for period, tasks in timeline.items():
266
- if tasks:
267
- report.append(f"#### {period.replace('_', ' ').title()}")
268
- for task in tasks:
269
- report.append(f"- {task}")
270
- report.append("")
271
-
272
- return "\n".join(report)
273
-
274
-
275
- def run_command(args) -> int:
276
- """Run user experience improvement command"""
277
- try:
278
- # Execute analysis
279
- analysis_report = asyncio.run(
280
- analyze_user_experience(args.url, args.max_workers, args.verbose)
281
- )
282
-
283
- # Generate improvement plan
284
- improvement_plan = generate_improvement_plan(analysis_report)
285
-
286
- # Display results
287
- if args.verbose:
288
- console.print(
289
- Panel.fit(
290
- f"Overall Score: {analysis_report['overall_score']:.2f}",
291
- title="Analysis Results",
292
- style="blue",
293
- )
294
- )
295
-
296
- # Display metrics table
297
- metrics_table = format_metrics_table(analysis_report)
298
- console.print(metrics_table)
299
-
300
- # Display recommendations
301
- if analysis_report.get("recommendations"):
302
- recommendations_table = format_recommendations(
303
- analysis_report["recommendations"]
304
- )
305
- console.print(recommendations_table)
306
-
307
- # Display implementation plan
308
- if improvement_plan.get("timeline"):
309
- timeline_table = format_timeline(improvement_plan["timeline"])
310
- console.print(timeline_table)
311
-
312
- # Save results
313
- if args.output:
314
- if args.format == "json":
315
- import json
316
-
317
- result = {
318
- "analysis": analysis_report,
319
- "improvement_plan": improvement_plan,
320
- }
321
- output_content = json.dumps(result, indent=2, ensure_ascii=False)
322
- else:
323
- output_content = generate_markdown_report(
324
- analysis_report, improvement_plan
325
- )
326
-
327
- output_path = Path(args.output)
328
- output_path.write_text(output_content, encoding="utf-8")
329
- console.print(f"\n[green]Results saved:[/green] {output_path}")
330
-
331
- # Return exit code
332
- if analysis_report["overall_score"] >= 0.85:
333
- console.print(
334
- f"\n[green]✅ User experience is excellent (score: {analysis_report['overall_score']:.2f})[/green]"
335
- )
336
- return 0
337
- else:
338
- console.print(
339
- f"\n[yellow]⚠️ User experience needs improvement (score: {analysis_report['overall_score']:.2f})[/yellow]"
340
- )
341
- return 1
342
-
343
- except KeyboardInterrupt:
344
- console.print("\n[yellow]Analysis interrupted by user.[/yellow]")
345
- return 1
346
- except Exception as e:
347
- console.print(f"[red]Error occurred:[/red] {e}")
348
- return 1
@@ -1,158 +0,0 @@
1
- """
2
- Migration CLI command for MoAI-ADK
3
-
4
- Provides command-line interface for project version migrations.
5
- """
6
-
7
- import logging
8
- import sys
9
- from pathlib import Path
10
-
11
- import click
12
-
13
- from moai_adk.core.migration import VersionMigrator
14
-
15
- logger = logging.getLogger(__name__)
16
-
17
-
18
- @click.command()
19
- @click.option(
20
- "--check",
21
- is_flag=True,
22
- help="Check if migration is needed without executing",
23
- )
24
- @click.option(
25
- "--dry-run",
26
- is_flag=True,
27
- help="Show migration plan without making changes",
28
- )
29
- @click.option(
30
- "--no-cleanup",
31
- is_flag=True,
32
- help="Keep old files after migration",
33
- )
34
- @click.option(
35
- "--rollback",
36
- is_flag=True,
37
- help="Rollback to the latest backup",
38
- )
39
- @click.option(
40
- "--list-backups",
41
- is_flag=True,
42
- help="List available backups",
43
- )
44
- def migrate(check, dry_run, no_cleanup, rollback, list_backups):
45
- """
46
- Migrate MoAI-ADK project to the latest version
47
-
48
- This command automatically migrates your project structure to match
49
- the latest MoAI-ADK version. It creates backups before migration
50
- and can rollback if issues occur.
51
-
52
- Examples:
53
-
54
- # Check if migration is needed
55
- moai-adk migrate --check
56
-
57
- # Preview migration plan
58
- moai-adk migrate --dry-run
59
-
60
- # Execute migration
61
- moai-adk migrate
62
-
63
- # Migrate without cleaning up old files
64
- moai-adk migrate --no-cleanup
65
-
66
- # Rollback to latest backup
67
- moai-adk migrate --rollback
68
-
69
- # List available backups
70
- moai-adk migrate --list-backups
71
- """
72
- try:
73
- project_root = Path.cwd()
74
- migrator = VersionMigrator(project_root)
75
-
76
- # List backups
77
- if list_backups:
78
- backups = migrator.backup_manager.list_backups()
79
- if not backups:
80
- click.echo("📦 No backups found")
81
- return
82
-
83
- click.echo("📦 Available backups:\n")
84
- for i, backup in enumerate(backups, 1):
85
- click.echo(f"{i}. {backup['description']} ({backup['timestamp']})")
86
- click.echo(f" Path: {backup['path']}")
87
- click.echo(f" Files: {backup['files']}")
88
- click.echo()
89
- return
90
-
91
- # Rollback
92
- if rollback:
93
- click.echo("🔙 Rolling back to latest backup...")
94
- if migrator.rollback_to_latest_backup():
95
- click.echo("✅ Rollback completed successfully")
96
- sys.exit(0)
97
- else:
98
- click.echo("❌ Rollback failed", err=True)
99
- sys.exit(1)
100
-
101
- # Check status
102
- if check:
103
- status = migrator.check_status()
104
- version_info = status["version"]
105
- migration_info = status["migration"]
106
-
107
- click.echo("📊 Migration Status:\n")
108
- click.echo(f"Current Version: {version_info['detected_version']}")
109
- click.echo(
110
- f"Needs Migration: {'Yes' if version_info['needs_migration'] else 'No'}"
111
- )
112
-
113
- if version_info["needs_migration"]:
114
- click.echo(f"Target Version: {migration_info['target_version']}")
115
- click.echo(f"Files to migrate: {migration_info['file_count']}")
116
- click.echo("\n💡 Run 'moai-adk migrate' to execute migration")
117
- else:
118
- click.echo("\n✅ Project is up to date")
119
-
120
- return
121
-
122
- # Dry run
123
- if dry_run:
124
- if migrator.needs_migration():
125
- migrator.migrate_to_v024(dry_run=True)
126
- else:
127
- click.echo("✅ Project is already up to date")
128
- return
129
-
130
- # Execute migration
131
- if not migrator.needs_migration():
132
- click.echo("✅ Project is already up to date")
133
- return
134
-
135
- click.echo("🚀 MoAI-ADK Project Migration\n")
136
- click.echo("This will migrate your project to v0.24.0")
137
- click.echo("A backup will be created automatically\n")
138
-
139
- # Confirm with user
140
- if not click.confirm("Do you want to proceed?"):
141
- click.echo("❌ Migration cancelled")
142
- return
143
-
144
- # Execute migration
145
- success = migrator.migrate_to_v024(dry_run=False, cleanup=not no_cleanup)
146
-
147
- if success:
148
- click.echo("\n🎉 Migration completed successfully!")
149
- sys.exit(0)
150
- else:
151
- click.echo("\n❌ Migration failed", err=True)
152
- click.echo("💡 Use 'moai-adk migrate --rollback' to restore from backup")
153
- sys.exit(1)
154
-
155
- except Exception as e:
156
- logger.error(f"Migration command failed: {e}", exc_info=True)
157
- click.echo(f"❌ Error: {e}", err=True)
158
- sys.exit(1)
@@ -1,118 +0,0 @@
1
- """
2
- Link Validation CLI Command
3
-
4
- Validate online documentation links
5
- """
6
-
7
- import argparse
8
- import asyncio
9
- from pathlib import Path
10
-
11
- from moai_adk.utils.link_validator import LinkValidator
12
-
13
-
14
- def create_parser(subparsers) -> argparse.ArgumentParser:
15
- """Create link validation parser"""
16
- parser = subparsers.add_parser(
17
- "validate-links",
18
- help="Validate online documentation links",
19
- description="Automatically validate all online documentation links in README.ko.md",
20
- )
21
-
22
- parser.add_argument(
23
- "--file",
24
- "-f",
25
- type=str,
26
- default="README.ko.md",
27
- help="File path to validate (default: README.ko.md)",
28
- )
29
-
30
- parser.add_argument(
31
- "--max-concurrent",
32
- "-c",
33
- type=int,
34
- default=3,
35
- help="Maximum number of links to validate concurrently (default: 3)",
36
- )
37
-
38
- parser.add_argument(
39
- "--timeout",
40
- "-t",
41
- type=int,
42
- default=8,
43
- help="Request timeout in seconds (default: 8)",
44
- )
45
-
46
- parser.add_argument("--output", "-o", type=str, help="File path to save results")
47
-
48
- parser.add_argument(
49
- "--verbose",
50
- "-v",
51
- action="store_true",
52
- help="Display detailed progress information",
53
- )
54
-
55
- return parser
56
-
57
-
58
- def run_command(args) -> int:
59
- """Execute link validation command"""
60
- try:
61
- # Configure file path
62
- file_path = Path(args.file)
63
- if not file_path.exists():
64
- print(f"Error: File does not exist: {file_path}")
65
- return 1
66
-
67
- # Create validator
68
- validator = LinkValidator(
69
- max_concurrent=args.max_concurrent, timeout=args.timeout
70
- )
71
-
72
- if args.verbose:
73
- print(f"Extracting links from file: {file_path}")
74
-
75
- # Extract links
76
- links = validator.extract_links_from_file(file_path)
77
-
78
- if not links:
79
- print("No links to validate.")
80
- return 0
81
-
82
- if args.verbose:
83
- print(f"Validating a total of {len(links)} links...")
84
-
85
- # Execute async validation
86
- async def validate_links():
87
- async with validator:
88
- result = await validator.validate_all_links(links)
89
- return result
90
-
91
- result = asyncio.run(validate_links())
92
-
93
- # Generate report
94
- report = validator.generate_report(result)
95
-
96
- # Output
97
- print(report)
98
-
99
- # Save to file
100
- if args.output:
101
- output_path = Path(args.output)
102
- output_path.write_text(report, encoding="utf-8")
103
- print(f"\nResults saved to: {output_path}")
104
-
105
- # Return exit code
106
- if result.invalid_links > 0:
107
- print(f"\n⚠️ {result.invalid_links} link(s) failed validation.")
108
- return 1
109
- else:
110
- print("\n✅ All links validated successfully.")
111
- return 0
112
-
113
- except KeyboardInterrupt:
114
- print("\nValidation cancelled by user.")
115
- return 1
116
- except Exception as e:
117
- print(f"Error occurred: {e}")
118
- return 1