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.
- moai_adk/__init__.py +2 -5
- moai_adk/__main__.py +114 -82
- moai_adk/cli/__init__.py +6 -1
- moai_adk/cli/commands/__init__.py +1 -3
- moai_adk/cli/commands/analyze.py +5 -16
- moai_adk/cli/commands/doctor.py +6 -18
- moai_adk/cli/commands/init.py +56 -125
- moai_adk/cli/commands/language.py +14 -35
- moai_adk/cli/commands/status.py +9 -15
- moai_adk/cli/commands/update.py +1555 -190
- moai_adk/cli/prompts/init_prompts.py +112 -56
- moai_adk/cli/spec_status.py +263 -0
- moai_adk/cli/ui/__init__.py +44 -0
- moai_adk/cli/ui/progress.py +422 -0
- moai_adk/cli/ui/prompts.py +389 -0
- moai_adk/cli/ui/theme.py +129 -0
- moai_adk/cli/worktree/__init__.py +27 -0
- moai_adk/cli/worktree/__main__.py +31 -0
- moai_adk/cli/worktree/cli.py +672 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +490 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +128 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/analysis/session_analyzer.py +17 -56
- moai_adk/core/claude_integration.py +26 -54
- moai_adk/core/command_helpers.py +10 -10
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/auto_spec_config.py +5 -11
- moai_adk/core/config/migration.py +19 -9
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +6 -12
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +725 -112
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +8 -0
- moai_adk/core/git/branch_manager.py +3 -11
- moai_adk/core/git/checkpoint.py +1 -3
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/manager.py +91 -1
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +56 -80
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/engine.py +6 -18
- moai_adk/core/integration/integration_tester.py +10 -9
- moai_adk/core/integration/utils.py +1 -1
- moai_adk/core/issue_creator.py +10 -28
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config_resolver.py +485 -0
- moai_adk/core/language_validator.py +28 -41
- moai_adk/core/mcp/setup.py +15 -12
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +481 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +78 -9
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +8 -17
- moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
- moai_adk/core/migration/selective_restorer.py +470 -0
- moai_adk/core/migration/template_utils.py +74 -0
- moai_adk/core/migration/user_selection_ui.py +338 -0
- moai_adk/core/migration/version_detector.py +6 -10
- moai_adk/core/migration/version_migrator.py +3 -3
- moai_adk/core/performance/cache_system.py +8 -10
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/checker.py +2 -4
- moai_adk/core/project/detector.py +1 -3
- moai_adk/core/project/initializer.py +135 -23
- moai_adk/core/project/phase_executor.py +54 -81
- moai_adk/core/project/validator.py +6 -12
- moai_adk/core/quality/trust_checker.py +9 -27
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +73 -148
- moai_adk/core/session_manager.py +10 -26
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +31 -100
- moai_adk/core/spec/ears_template_engine.py +351 -286
- moai_adk/core/spec/quality_validator.py +35 -69
- moai_adk/core/spec_status_manager.py +64 -74
- moai_adk/core/template/backup.py +45 -20
- moai_adk/core/template/config.py +112 -39
- moai_adk/core/template/merger.py +11 -19
- moai_adk/core/template/processor.py +253 -149
- moai_adk/core/template_engine.py +73 -40
- moai_adk/core/template_variable_synchronizer.py +417 -0
- moai_adk/core/unified_permission_manager.py +745 -0
- moai_adk/core/user_behavior_analytics.py +851 -0
- moai_adk/core/version_sync.py +429 -0
- moai_adk/foundation/__init__.py +56 -0
- moai_adk/foundation/backend.py +1027 -0
- moai_adk/foundation/database.py +1115 -0
- moai_adk/foundation/devops.py +1585 -0
- moai_adk/foundation/ears.py +431 -0
- moai_adk/foundation/frontend.py +870 -0
- moai_adk/foundation/git/commit_templates.py +4 -12
- moai_adk/foundation/git.py +376 -0
- moai_adk/foundation/langs.py +484 -0
- moai_adk/foundation/ml_ops.py +1162 -0
- moai_adk/foundation/testing.py +1524 -0
- moai_adk/foundation/trust/trust_principles.py +23 -72
- moai_adk/foundation/trust/validation_checklist.py +57 -162
- moai_adk/project/__init__.py +0 -0
- moai_adk/project/configuration.py +1084 -0
- moai_adk/project/documentation.py +566 -0
- moai_adk/project/schema.py +447 -0
- moai_adk/statusline/alfred_detector.py +1 -3
- moai_adk/statusline/config.py +13 -4
- moai_adk/statusline/enhanced_output_style_detector.py +23 -15
- moai_adk/statusline/main.py +51 -15
- moai_adk/statusline/renderer.py +104 -48
- moai_adk/statusline/update_checker.py +3 -9
- moai_adk/statusline/version_reader.py +140 -46
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
- moai_adk/templates/.claude/hooks/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
- moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
- moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
- moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
- moai_adk/templates/.claude/settings.json +172 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +320 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +496 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
- moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
- moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +103 -41
- moai_adk/templates/.git-hooks/pre-push +116 -21
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.gitignore +184 -44
- moai_adk/templates/.mcp.json +7 -9
- moai_adk/templates/.moai/cache/personalization.json +10 -0
- moai_adk/templates/.moai/config/config.yaml +344 -0
- moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
- moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
- moai_adk/templates/.moai/config/presets/team.yaml +33 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
- moai_adk/templates/.moai/config/sections/language.yaml +11 -0
- moai_adk/templates/.moai/config/sections/project.yaml +13 -0
- moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
- moai_adk/templates/.moai/config/sections/system.yaml +14 -0
- moai_adk/templates/.moai/config/sections/user.yaml +5 -0
- moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +382 -501
- moai_adk/utils/__init__.py +24 -1
- moai_adk/utils/banner.py +7 -10
- moai_adk/utils/common.py +16 -30
- moai_adk/utils/link_validator.py +4 -12
- moai_adk/utils/safe_file_reader.py +2 -6
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.32.8.dist-info/METADATA +2478 -0
- moai_adk-0.32.8.dist-info/RECORD +396 -0
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
- moai_adk/cli/commands/backup.py +0 -82
- moai_adk/cli/commands/improve_user_experience.py +0 -348
- moai_adk/cli/commands/migrate.py +0 -158
- moai_adk/cli/commands/validate_links.py +0 -118
- moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -413
- moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
- moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
- moai_adk/utils/user_experience.py +0 -531
- moai_adk-0.25.4.dist-info/METADATA +0 -2279
- moai_adk-0.25.4.dist-info/RECORD +0 -112
- {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
|
moai_adk/cli/commands/migrate.py
DELETED
|
@@ -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
|