moai-adk 0.8.0__py3-none-any.whl → 0.34.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- moai_adk/__init__.py +2 -6
- moai_adk/__main__.py +136 -21
- moai_adk/cli/__init__.py +6 -2
- moai_adk/cli/commands/__init__.py +1 -4
- moai_adk/cli/commands/analyze.py +116 -0
- moai_adk/cli/commands/doctor.py +17 -5
- moai_adk/cli/commands/init.py +118 -48
- moai_adk/cli/commands/language.py +248 -0
- moai_adk/cli/commands/status.py +8 -13
- moai_adk/cli/commands/update.py +1978 -149
- moai_adk/cli/main.py +3 -2
- moai_adk/cli/prompts/init_prompts.py +144 -91
- 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 +683 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +493 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +422 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/__init__.py +0 -1
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +400 -0
- moai_adk/core/claude_integration.py +393 -0
- moai_adk/core/command_helpers.py +270 -0
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/__init__.py +6 -0
- moai_adk/core/config/auto_spec_config.py +340 -0
- moai_adk/core/config/migration.py +148 -17
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +273 -0
- moai_adk/core/diagnostics/slash_commands.py +0 -1
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +1902 -0
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +8 -1
- moai_adk/core/git/branch.py +0 -1
- moai_adk/core/git/branch_manager.py +2 -10
- moai_adk/core/git/checkpoint.py +1 -7
- moai_adk/core/git/commit.py +0 -1
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/event_detector.py +3 -5
- moai_adk/core/git/manager.py +91 -2
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +157 -0
- moai_adk/core/integration/integration_tester.py +226 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +305 -0
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_config_resolver.py +572 -0
- moai_adk/core/language_validator.py +543 -0
- moai_adk/core/mcp/setup.py +116 -0
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +481 -0
- moai_adk/core/migration/__init__.py +18 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +277 -0
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +209 -0
- 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 +139 -0
- moai_adk/core/migration/version_migrator.py +228 -0
- moai_adk/core/performance/__init__.py +6 -0
- moai_adk/core/performance/cache_system.py +316 -0
- moai_adk/core/performance/parallel_processor.py +116 -0
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/__init__.py +0 -1
- moai_adk/core/project/backup_utils.py +2 -7
- moai_adk/core/project/checker.py +2 -4
- moai_adk/core/project/detector.py +189 -22
- moai_adk/core/project/initializer.py +218 -27
- moai_adk/core/project/phase_executor.py +416 -44
- moai_adk/core/project/validator.py +7 -32
- moai_adk/core/quality/__init__.py +1 -1
- moai_adk/core/quality/trust_checker.py +37 -101
- moai_adk/core/quality/validators/__init__.py +1 -1
- moai_adk/core/quality/validators/base_validator.py +1 -1
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +918 -0
- moai_adk/core/session_manager.py +651 -0
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +680 -0
- moai_adk/core/spec/ears_template_engine.py +1247 -0
- moai_adk/core/spec/quality_validator.py +687 -0
- moai_adk/core/spec_status_manager.py +478 -0
- moai_adk/core/template/__init__.py +0 -1
- moai_adk/core/template/backup.py +82 -17
- moai_adk/core/template/config.py +112 -40
- moai_adk/core/template/languages.py +0 -1
- moai_adk/core/template/merger.py +75 -26
- moai_adk/core/template/processor.py +750 -72
- moai_adk/core/template_engine.py +310 -0
- 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 +557 -0
- 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 +676 -0
- moai_adk/foundation/trust/validation_checklist.py +1573 -0
- 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/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +105 -0
- moai_adk/statusline/config.py +376 -0
- moai_adk/statusline/enhanced_output_style_detector.py +372 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +322 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +343 -0
- moai_adk/statusline/update_checker.py +129 -0
- moai_adk/statusline/version_reader.py +741 -0
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +670 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
- moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +509 -0
- moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +1020 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1384 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -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/{alfred/core → moai/lib}/checkpoint.py +10 -37
- 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 +1075 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
- moai_adk/templates/.claude/settings.json +78 -50
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +438 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -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-docs-generation/reference.md +328 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +313 -283
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +610 -1525
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +423 -619
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +295 -95
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +817 -16
- 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-database/reference.md +532 -17
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +470 -97
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +955 -16
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +651 -18
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -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 +492 -0
- moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -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-formats-data/reference.md +585 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -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-claude/reference.md +209 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -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 +359 -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-core/reference.md +478 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -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-lang-cpp/SKILL.md +618 -93
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +446 -91
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +346 -94
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +906 -16
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +721 -15
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +352 -91
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +851 -16
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +278 -18
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +344 -86
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +993 -16
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +549 -18
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +617 -96
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +364 -314
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +849 -496
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +731 -243
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +545 -89
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +650 -87
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +341 -93
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +646 -16
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +491 -18
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +463 -89
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +620 -16
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +410 -17
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +486 -112
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +905 -16
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +659 -17
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +333 -92
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1076 -16
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +718 -21
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -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 +319 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -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-nextra/reference.md +379 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -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-mcp-figma/SKILL.md +402 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +290 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -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 +175 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -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/reference.md +275 -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 +1462 -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 +92 -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-spec/SKILL.md +534 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -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-templates/reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -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/examples.md +672 -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/reference.md +440 -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 +411 -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 +128 -0
- moai_adk/templates/.git-hooks/pre-push +365 -0
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +206 -36
- moai_adk/templates/.gitignore +194 -13
- moai_adk/templates/.mcp.json +31 -0
- moai_adk/templates/.moai/config/config.yaml +58 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +151 -0
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +81 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +634 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +170 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +87 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -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 +17 -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 +92 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +571 -244
- moai_adk/utils/__init__.py +24 -2
- moai_adk/utils/banner.py +9 -13
- moai_adk/utils/common.py +294 -0
- moai_adk/utils/link_validator.py +241 -0
- moai_adk/utils/logger.py +4 -9
- moai_adk/utils/safe_file_reader.py +206 -0
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.34.0.dist-info/METADATA +2999 -0
- moai_adk-0.34.0.dist-info/RECORD +463 -0
- {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/WHEEL +1 -1
- {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/entry_points.txt +1 -0
- moai_adk/cli/commands/backup.py +0 -80
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -293
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -196
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -207
- moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -375
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -343
- moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -246
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -320
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -837
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -272
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -265
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -311
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -352
- moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1184
- moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -665
- moai_adk/templates/.claude/commands/alfred/2-run.md +0 -488
- moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -623
- moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
- moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
- moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
- moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -170
- moai_adk/templates/.claude/hooks/alfred/core/context.py +0 -67
- moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -416
- moai_adk/templates/.claude/hooks/alfred/core/tags.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -21
- moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
- moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -161
- moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -90
- moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -42
- moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
- moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
- moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
- moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
- moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
- moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
- moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
- moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
- moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
- moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
- moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
- moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
- moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
- moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
- moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
- moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
- moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
- moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
- moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
- moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +0 -482
- moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -278
- moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
- moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -477
- moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
- moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -271
- moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
- moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -583
- moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -526
- moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -465
- moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -328
- moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -312
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -285
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -278
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -303
- moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
- moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
- moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -161
- moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
- moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
- moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
- moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
- moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -256
- moai_adk/templates/.moai/config.json +0 -96
- moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +0 -208
- moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +0 -369
- moai_adk/templates/.moai/memory/CLAUDE-RULES.md +0 -539
- moai_adk/templates/.moai/memory/CONFIG-SCHEMA.md +0 -444
- moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
- moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
- moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +0 -218
- moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
- moai_adk/templates/.moai/memory/config-schema.md +0 -444
- moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
- moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
- moai_adk/templates/.moai/project/product.md +0 -161
- moai_adk/templates/.moai/project/structure.md +0 -156
- moai_adk/templates/.moai/project/tech.md +0 -227
- moai_adk/templates/__init__.py +0 -2
- moai_adk-0.8.0.dist-info/METADATA +0 -1722
- moai_adk-0.8.0.dist-info/RECORD +0 -282
- {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Alfred to Moai folder structure migration for MoAI-ADK
|
|
3
|
+
|
|
4
|
+
Handles automatic migration from legacy alfred/ folders to new moai/ structure.
|
|
5
|
+
- Creates backup before migration
|
|
6
|
+
- Installs fresh moai/ templates from package
|
|
7
|
+
- Deletes alfred/ folders
|
|
8
|
+
- Updates settings.json Hook paths
|
|
9
|
+
- Records migration status in config.json
|
|
10
|
+
- Provides automatic rollback on failure
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import json
|
|
14
|
+
import logging
|
|
15
|
+
import shutil
|
|
16
|
+
from datetime import datetime
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
from typing import Optional
|
|
19
|
+
|
|
20
|
+
from .backup_manager import BackupManager
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class AlfredToMoaiMigrator:
|
|
26
|
+
"""Handles automatic migration from Alfred to Moai folder structure"""
|
|
27
|
+
|
|
28
|
+
def __init__(self, project_root: Path):
|
|
29
|
+
"""
|
|
30
|
+
Initialize Alfred to Moai migrator
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
project_root: Root directory of the project
|
|
34
|
+
"""
|
|
35
|
+
self.project_root = Path(project_root)
|
|
36
|
+
self.claude_root = self.project_root / ".claude"
|
|
37
|
+
self.config_path = self.project_root / ".moai" / "config" / "config.json"
|
|
38
|
+
self.settings_path = self.claude_root / "settings.json"
|
|
39
|
+
self.backup_manager = BackupManager(project_root)
|
|
40
|
+
|
|
41
|
+
# Define folder paths
|
|
42
|
+
self.alfred_folders = {
|
|
43
|
+
"commands": self.claude_root / "commands" / "alfred",
|
|
44
|
+
"agents": self.claude_root / "agents" / "alfred",
|
|
45
|
+
"hooks": self.claude_root / "hooks" / "alfred",
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
self.moai_folders = {
|
|
49
|
+
"commands": self.claude_root / "commands" / "moai",
|
|
50
|
+
"agents": self.claude_root / "agents" / "moai",
|
|
51
|
+
"hooks": self.claude_root / "hooks" / "moai",
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
def _load_config(self) -> dict:
|
|
55
|
+
"""
|
|
56
|
+
Load config.json
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
Dictionary from config.json, or empty dict if not found
|
|
60
|
+
"""
|
|
61
|
+
if not self.config_path.exists():
|
|
62
|
+
return {}
|
|
63
|
+
|
|
64
|
+
try:
|
|
65
|
+
return json.loads(self.config_path.read_text(encoding="utf-8"))
|
|
66
|
+
except Exception as e:
|
|
67
|
+
logger.warning(f"Failed to load config.json: {e}")
|
|
68
|
+
return {}
|
|
69
|
+
|
|
70
|
+
def _save_config(self, config: dict) -> None:
|
|
71
|
+
"""
|
|
72
|
+
Save config.json
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
config: Configuration dictionary to save
|
|
76
|
+
|
|
77
|
+
Raises:
|
|
78
|
+
Exception: If save fails
|
|
79
|
+
"""
|
|
80
|
+
self.config_path.parent.mkdir(parents=True, exist_ok=True)
|
|
81
|
+
self.config_path.write_text(json.dumps(config, indent=2, ensure_ascii=False))
|
|
82
|
+
|
|
83
|
+
def needs_migration(self) -> bool:
|
|
84
|
+
"""
|
|
85
|
+
Check if Alfred to Moai migration is needed
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
True if migration is needed, False otherwise
|
|
89
|
+
"""
|
|
90
|
+
# Check if already migrated
|
|
91
|
+
try:
|
|
92
|
+
config = self._load_config()
|
|
93
|
+
migration_state = config.get("migration", {}).get("alfred_to_moai", {})
|
|
94
|
+
if migration_state.get("migrated"):
|
|
95
|
+
logger.info("ℹ️ Alfred → Moai migration already completed")
|
|
96
|
+
if migration_state.get("timestamp"):
|
|
97
|
+
logger.info(f"Timestamp: {migration_state['timestamp']}")
|
|
98
|
+
return False
|
|
99
|
+
except Exception as e:
|
|
100
|
+
logger.debug(f"Config check error: {e}")
|
|
101
|
+
|
|
102
|
+
# Check if any alfred folder exists
|
|
103
|
+
has_alfred = any(folder.exists() for folder in self.alfred_folders.values())
|
|
104
|
+
|
|
105
|
+
if has_alfred:
|
|
106
|
+
detected = [name for name, folder in self.alfred_folders.items() if folder.exists()]
|
|
107
|
+
logger.debug(f"Alfred folders detected: {', '.join(detected)}")
|
|
108
|
+
|
|
109
|
+
return has_alfred
|
|
110
|
+
|
|
111
|
+
def execute_migration(self, backup_path: Optional[Path] = None) -> bool:
|
|
112
|
+
"""
|
|
113
|
+
Execute Alfred to Moai migration
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
backup_path: Path to use for backup (if None, creates new backup)
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
True if migration successful, False otherwise
|
|
120
|
+
"""
|
|
121
|
+
try:
|
|
122
|
+
logger.info("\n[1/5] Backing up project...")
|
|
123
|
+
|
|
124
|
+
# Step 1: Create or use existing backup
|
|
125
|
+
if backup_path is None:
|
|
126
|
+
try:
|
|
127
|
+
backup_path = self.backup_manager.create_backup("alfred_to_moai_migration")
|
|
128
|
+
logger.info(f"✅ Backup completed: {backup_path}")
|
|
129
|
+
except Exception as e:
|
|
130
|
+
logger.error("❌ Error: Backup failed")
|
|
131
|
+
logger.error(f"Cause: {str(e)}")
|
|
132
|
+
return False
|
|
133
|
+
else:
|
|
134
|
+
logger.info(f"✅ Using existing backup: {backup_path}")
|
|
135
|
+
|
|
136
|
+
# Step 2: Detect alfred folders
|
|
137
|
+
logger.info("\n[2/5] Alfred folders detected:")
|
|
138
|
+
alfred_detected = {name: folder for name, folder in self.alfred_folders.items() if folder.exists()}
|
|
139
|
+
|
|
140
|
+
if not alfred_detected:
|
|
141
|
+
logger.warning("No Alfred folders found - skipping migration")
|
|
142
|
+
return True
|
|
143
|
+
|
|
144
|
+
logger.info(", ".join(alfred_detected.keys()))
|
|
145
|
+
|
|
146
|
+
# Step 3: Verify moai folders exist (should be created in Phase 1)
|
|
147
|
+
logger.info("\n[3/5] Verifying Moai template installation...")
|
|
148
|
+
missing_moai = [name for name, folder in self.moai_folders.items() if not folder.exists()]
|
|
149
|
+
|
|
150
|
+
if missing_moai:
|
|
151
|
+
logger.error(f"❌ Missing Moai folders: {', '.join(missing_moai)}")
|
|
152
|
+
logger.error("Phase 1 implementation required first (package template moai structure)")
|
|
153
|
+
self._rollback_migration(backup_path)
|
|
154
|
+
return False
|
|
155
|
+
|
|
156
|
+
logger.info("✅ Moai templates installed")
|
|
157
|
+
|
|
158
|
+
# Step 4: Update settings.json hooks
|
|
159
|
+
logger.info("\n[4/5] Updating paths...")
|
|
160
|
+
try:
|
|
161
|
+
self._update_settings_json_hooks()
|
|
162
|
+
logger.info("✅ settings.json Hook paths updated")
|
|
163
|
+
except Exception as e:
|
|
164
|
+
logger.error("❌ Error: Failed to update settings.json")
|
|
165
|
+
logger.error(f"Cause: {str(e)}")
|
|
166
|
+
self._rollback_migration(backup_path)
|
|
167
|
+
return False
|
|
168
|
+
|
|
169
|
+
# Step 5: Delete alfred folders
|
|
170
|
+
logger.info("\n[5/5] Cleaning up...")
|
|
171
|
+
try:
|
|
172
|
+
self._delete_alfred_folders(alfred_detected)
|
|
173
|
+
logger.info("✅ Alfred folders deleted")
|
|
174
|
+
except Exception as e:
|
|
175
|
+
logger.error("❌ Error: Failed to delete Alfred folders")
|
|
176
|
+
logger.error(f"Cause: {str(e)}")
|
|
177
|
+
self._rollback_migration(backup_path)
|
|
178
|
+
return False
|
|
179
|
+
|
|
180
|
+
# Step 6: Verify migration
|
|
181
|
+
logger.info("\n[6/6] Verifying migration...")
|
|
182
|
+
if not self._verify_migration():
|
|
183
|
+
logger.error("❌ Migration verification failed")
|
|
184
|
+
self._rollback_migration(backup_path)
|
|
185
|
+
return False
|
|
186
|
+
|
|
187
|
+
logger.info("✅ Migration verification passed")
|
|
188
|
+
|
|
189
|
+
# Step 7: Record migration status
|
|
190
|
+
logger.info("\nRecording migration status...")
|
|
191
|
+
try:
|
|
192
|
+
self._record_migration_state(backup_path, len(alfred_detected))
|
|
193
|
+
logger.info("✅ Migration status recorded")
|
|
194
|
+
except Exception as e:
|
|
195
|
+
logger.warning(f"⚠️ Failed to record status: {str(e)}")
|
|
196
|
+
# Don't rollback for this, migration was successful
|
|
197
|
+
|
|
198
|
+
logger.info("\n✅ Alfred → Moai migration completed!")
|
|
199
|
+
return True
|
|
200
|
+
|
|
201
|
+
except Exception as e:
|
|
202
|
+
logger.error(f"\n❌ Unexpected error: {str(e)}")
|
|
203
|
+
if backup_path:
|
|
204
|
+
self._rollback_migration(backup_path)
|
|
205
|
+
return False
|
|
206
|
+
|
|
207
|
+
def _delete_alfred_folders(self, alfred_detected: dict) -> None:
|
|
208
|
+
"""
|
|
209
|
+
Delete Alfred folders
|
|
210
|
+
|
|
211
|
+
Args:
|
|
212
|
+
alfred_detected: Dictionary of detected alfred folders
|
|
213
|
+
|
|
214
|
+
Raises:
|
|
215
|
+
Exception: If deletion fails
|
|
216
|
+
"""
|
|
217
|
+
for name, folder in alfred_detected.items():
|
|
218
|
+
if folder.exists():
|
|
219
|
+
try:
|
|
220
|
+
shutil.rmtree(folder)
|
|
221
|
+
logger.debug(f"Deleted: {folder}")
|
|
222
|
+
except Exception as e:
|
|
223
|
+
raise Exception(f"Failed to delete {name} folder: {str(e)}")
|
|
224
|
+
|
|
225
|
+
def _update_settings_json_hooks(self) -> None:
|
|
226
|
+
"""
|
|
227
|
+
Update settings.json to replace alfred paths with moai paths
|
|
228
|
+
|
|
229
|
+
Raises:
|
|
230
|
+
Exception: If update fails
|
|
231
|
+
"""
|
|
232
|
+
if not self.settings_path.exists():
|
|
233
|
+
logger.warning(f"settings.json file missing: {self.settings_path}")
|
|
234
|
+
return
|
|
235
|
+
|
|
236
|
+
try:
|
|
237
|
+
# Read settings.json
|
|
238
|
+
with open(self.settings_path, "r", encoding="utf-8") as f:
|
|
239
|
+
settings_content = f.read()
|
|
240
|
+
|
|
241
|
+
# Replace all alfred references with moai
|
|
242
|
+
# Pattern: .claude/hooks/alfred/ → .claude/hooks/moai/
|
|
243
|
+
updated_content = settings_content.replace(".claude/hooks/alfred/", ".claude/hooks/moai/")
|
|
244
|
+
updated_content = updated_content.replace(".claude/commands/alfred/", ".claude/commands/moai/")
|
|
245
|
+
updated_content = updated_content.replace(".claude/agents/alfred/", ".claude/agents/moai/")
|
|
246
|
+
|
|
247
|
+
# Write back to file
|
|
248
|
+
with open(self.settings_path, "w", encoding="utf-8") as f:
|
|
249
|
+
f.write(updated_content)
|
|
250
|
+
|
|
251
|
+
# Verify JSON validity
|
|
252
|
+
with open(self.settings_path, "r", encoding="utf-8") as f:
|
|
253
|
+
json.load(f) # This will raise if JSON is invalid
|
|
254
|
+
|
|
255
|
+
logger.debug("settings.json update and verification completed")
|
|
256
|
+
|
|
257
|
+
except json.JSONDecodeError as e:
|
|
258
|
+
raise Exception(f"settings.json JSON format error: {str(e)}")
|
|
259
|
+
except Exception as e:
|
|
260
|
+
raise Exception(f"Failed to update settings.json: {str(e)}")
|
|
261
|
+
|
|
262
|
+
def _verify_migration(self) -> bool:
|
|
263
|
+
"""
|
|
264
|
+
Verify migration was successful
|
|
265
|
+
|
|
266
|
+
Returns:
|
|
267
|
+
True if migration is valid, False otherwise
|
|
268
|
+
"""
|
|
269
|
+
# Check moai folders exist
|
|
270
|
+
for name, folder in self.moai_folders.items():
|
|
271
|
+
if not folder.exists():
|
|
272
|
+
logger.error(f"❌ Missing Moai {name} folder: {folder}")
|
|
273
|
+
return False
|
|
274
|
+
|
|
275
|
+
# Check alfred folders are deleted
|
|
276
|
+
for name, folder in self.alfred_folders.items():
|
|
277
|
+
if folder.exists():
|
|
278
|
+
logger.warning(f"⚠️ Alfred {name} folder still exists: {folder}")
|
|
279
|
+
return False
|
|
280
|
+
|
|
281
|
+
# Check settings.json hooks paths (ignore pattern matching strings like "Bash(alfred:*)")
|
|
282
|
+
if self.settings_path.exists():
|
|
283
|
+
try:
|
|
284
|
+
with open(self.settings_path, "r", encoding="utf-8") as f:
|
|
285
|
+
settings_content = f.read()
|
|
286
|
+
|
|
287
|
+
# Only check for hooks/alfred paths, not pattern strings
|
|
288
|
+
if (
|
|
289
|
+
".claude/hooks/alfred/" in settings_content
|
|
290
|
+
or ".claude/commands/alfred/" in settings_content
|
|
291
|
+
or ".claude/agents/alfred/" in settings_content
|
|
292
|
+
):
|
|
293
|
+
logger.error("❌ settings.json still contains alfred hook paths")
|
|
294
|
+
return False
|
|
295
|
+
|
|
296
|
+
if "moai" not in settings_content.lower():
|
|
297
|
+
logger.warning("⚠️ No moai references in settings.json")
|
|
298
|
+
|
|
299
|
+
except Exception as e:
|
|
300
|
+
logger.error(f"❌ settings.json verification failed: {str(e)}")
|
|
301
|
+
return False
|
|
302
|
+
|
|
303
|
+
logger.debug("Migration verification completed")
|
|
304
|
+
return True
|
|
305
|
+
|
|
306
|
+
def _record_migration_state(self, backup_path: Path, folders_count: int) -> None:
|
|
307
|
+
"""
|
|
308
|
+
Record migration state in config.json
|
|
309
|
+
|
|
310
|
+
Args:
|
|
311
|
+
backup_path: Path to the backup
|
|
312
|
+
folders_count: Number of folders migrated
|
|
313
|
+
|
|
314
|
+
Raises:
|
|
315
|
+
Exception: If recording fails
|
|
316
|
+
"""
|
|
317
|
+
try:
|
|
318
|
+
config = self._load_config()
|
|
319
|
+
|
|
320
|
+
# Initialize migration section if not exists
|
|
321
|
+
if "migration" not in config:
|
|
322
|
+
config["migration"] = {}
|
|
323
|
+
|
|
324
|
+
config["migration"]["alfred_to_moai"] = {
|
|
325
|
+
"migrated": True,
|
|
326
|
+
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
|
327
|
+
"folders_installed": 3, # commands, agents, hooks
|
|
328
|
+
"folders_removed": folders_count,
|
|
329
|
+
"backup_path": str(backup_path),
|
|
330
|
+
"package_version": self._get_package_version(),
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
self._save_config(config)
|
|
334
|
+
logger.debug("Migration state recorded in config.json")
|
|
335
|
+
|
|
336
|
+
except Exception as e:
|
|
337
|
+
raise Exception(f"Migration state recording failed: {str(e)}")
|
|
338
|
+
|
|
339
|
+
def _rollback_migration(self, backup_path: Path) -> None:
|
|
340
|
+
"""
|
|
341
|
+
Rollback migration from backup
|
|
342
|
+
|
|
343
|
+
Args:
|
|
344
|
+
backup_path: Path to the backup to restore from
|
|
345
|
+
"""
|
|
346
|
+
try:
|
|
347
|
+
logger.info("\n🔄 Starting automatic rollback...")
|
|
348
|
+
logger.info("[1/3] Restoring project...")
|
|
349
|
+
|
|
350
|
+
# Restore from backup
|
|
351
|
+
self.backup_manager.restore_backup(backup_path)
|
|
352
|
+
|
|
353
|
+
logger.info("✅ Project restored")
|
|
354
|
+
logger.info("[2/3] Resetting migration state...")
|
|
355
|
+
|
|
356
|
+
# Clear migration state in config
|
|
357
|
+
try:
|
|
358
|
+
config = self._load_config()
|
|
359
|
+
if "migration" in config and "alfred_to_moai" in config["migration"]:
|
|
360
|
+
del config["migration"]["alfred_to_moai"]
|
|
361
|
+
self._save_config(config)
|
|
362
|
+
except Exception as e:
|
|
363
|
+
logger.warning(f"⚠️ Failed to reset state: {str(e)}")
|
|
364
|
+
|
|
365
|
+
logger.info("✅ Rollback completed")
|
|
366
|
+
logger.info("💡 Tip: Run `moai-adk update` again after resolving the error")
|
|
367
|
+
|
|
368
|
+
except Exception as e:
|
|
369
|
+
logger.error(f"\n❌ Rollback failed: {str(e)}")
|
|
370
|
+
logger.error(f"⚠️ Manual recovery required: Please restore manually from backup: {backup_path}")
|
|
371
|
+
|
|
372
|
+
def _get_package_version(self) -> str:
|
|
373
|
+
"""
|
|
374
|
+
Get current package version
|
|
375
|
+
|
|
376
|
+
Returns:
|
|
377
|
+
Version string
|
|
378
|
+
"""
|
|
379
|
+
try:
|
|
380
|
+
config = self._load_config()
|
|
381
|
+
return config.get("moai", {}).get("version", "unknown")
|
|
382
|
+
except Exception:
|
|
383
|
+
return "unknown"
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Backup management module for MoAI-ADK migrations
|
|
3
|
+
|
|
4
|
+
Creates and manages backups during migration processes
|
|
5
|
+
to ensure data safety and enable rollback.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
import logging
|
|
10
|
+
import shutil
|
|
11
|
+
from datetime import datetime
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from typing import Any, Dict, List, Optional
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class BackupManager:
|
|
19
|
+
"""Manages backup creation and restoration for migrations"""
|
|
20
|
+
|
|
21
|
+
def __init__(self, project_root: Path):
|
|
22
|
+
"""
|
|
23
|
+
Initialize backup manager
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
project_root: Root directory of the project
|
|
27
|
+
"""
|
|
28
|
+
self.project_root = Path(project_root)
|
|
29
|
+
self.backup_base_dir = self.project_root / ".moai" / "backups"
|
|
30
|
+
self.backup_base_dir.mkdir(parents=True, exist_ok=True)
|
|
31
|
+
|
|
32
|
+
def create_backup(self, description: str = "migration") -> Path:
|
|
33
|
+
"""
|
|
34
|
+
Create a full backup of configuration files
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
description: Description of this backup
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
Path to the backup directory
|
|
41
|
+
"""
|
|
42
|
+
# Create timestamped backup directory
|
|
43
|
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
44
|
+
backup_dir = self.backup_base_dir / f"{description}_{timestamp}"
|
|
45
|
+
backup_dir.mkdir(parents=True, exist_ok=True)
|
|
46
|
+
|
|
47
|
+
logger.info(f"Creating backup at {backup_dir}")
|
|
48
|
+
|
|
49
|
+
# Files to backup
|
|
50
|
+
backup_targets = [
|
|
51
|
+
self.project_root / ".moai" / "config.json",
|
|
52
|
+
self.project_root / ".moai" / "config" / "config.json",
|
|
53
|
+
self.project_root / ".claude" / "statusline-config.yaml",
|
|
54
|
+
self.project_root / ".moai" / "config" / "statusline-config.yaml",
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
backed_up_files = []
|
|
58
|
+
|
|
59
|
+
for target in backup_targets:
|
|
60
|
+
if target.exists():
|
|
61
|
+
# Preserve relative path structure in backup
|
|
62
|
+
rel_path = target.relative_to(self.project_root)
|
|
63
|
+
backup_path = backup_dir / rel_path
|
|
64
|
+
|
|
65
|
+
# Create parent directories
|
|
66
|
+
backup_path.parent.mkdir(parents=True, exist_ok=True)
|
|
67
|
+
|
|
68
|
+
# Copy file
|
|
69
|
+
shutil.copy2(target, backup_path)
|
|
70
|
+
backed_up_files.append(str(rel_path))
|
|
71
|
+
logger.debug(f"Backed up: {rel_path}")
|
|
72
|
+
|
|
73
|
+
# Save backup metadata
|
|
74
|
+
metadata = {
|
|
75
|
+
"timestamp": timestamp,
|
|
76
|
+
"description": description,
|
|
77
|
+
"backed_up_files": backed_up_files,
|
|
78
|
+
"project_root": str(self.project_root),
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
metadata_path = backup_dir / "backup_metadata.json"
|
|
82
|
+
with open(metadata_path, "w", encoding="utf-8") as f:
|
|
83
|
+
json.dump(metadata, f, indent=2, ensure_ascii=False)
|
|
84
|
+
|
|
85
|
+
logger.info(f"✅ Backup created successfully: {backup_dir}")
|
|
86
|
+
return backup_dir
|
|
87
|
+
|
|
88
|
+
def list_backups(self) -> List[Dict[str, str]]:
|
|
89
|
+
"""
|
|
90
|
+
List all available backups
|
|
91
|
+
|
|
92
|
+
Returns:
|
|
93
|
+
List of backup information dictionaries
|
|
94
|
+
"""
|
|
95
|
+
backups: List[Dict[str, Any]] = []
|
|
96
|
+
|
|
97
|
+
if not self.backup_base_dir.exists():
|
|
98
|
+
return backups
|
|
99
|
+
|
|
100
|
+
for backup_dir in sorted(self.backup_base_dir.iterdir(), reverse=True):
|
|
101
|
+
if backup_dir.is_dir():
|
|
102
|
+
metadata_path = backup_dir / "backup_metadata.json"
|
|
103
|
+
if metadata_path.exists():
|
|
104
|
+
try:
|
|
105
|
+
with open(metadata_path, "r", encoding="utf-8") as f:
|
|
106
|
+
metadata = json.load(f)
|
|
107
|
+
backups.append(
|
|
108
|
+
{
|
|
109
|
+
"path": str(backup_dir),
|
|
110
|
+
"timestamp": metadata.get("timestamp", "unknown"),
|
|
111
|
+
"description": metadata.get("description", "unknown"),
|
|
112
|
+
"files": len(metadata.get("backed_up_files", [])),
|
|
113
|
+
}
|
|
114
|
+
)
|
|
115
|
+
except Exception as e:
|
|
116
|
+
logger.warning(f"Failed to read backup metadata: {e}")
|
|
117
|
+
|
|
118
|
+
return backups
|
|
119
|
+
|
|
120
|
+
def restore_backup(self, backup_path: Path) -> bool:
|
|
121
|
+
"""
|
|
122
|
+
Restore files from a backup
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
backup_path: Path to the backup directory
|
|
126
|
+
|
|
127
|
+
Returns:
|
|
128
|
+
True if restore was successful, False otherwise
|
|
129
|
+
"""
|
|
130
|
+
backup_path = Path(backup_path)
|
|
131
|
+
|
|
132
|
+
if not backup_path.exists():
|
|
133
|
+
logger.error(f"Backup directory not found: {backup_path}")
|
|
134
|
+
return False
|
|
135
|
+
|
|
136
|
+
metadata_path = backup_path / "backup_metadata.json"
|
|
137
|
+
if not metadata_path.exists():
|
|
138
|
+
logger.error(f"Backup metadata not found: {metadata_path}")
|
|
139
|
+
return False
|
|
140
|
+
|
|
141
|
+
try:
|
|
142
|
+
# Read metadata
|
|
143
|
+
with open(metadata_path, "r", encoding="utf-8") as f:
|
|
144
|
+
metadata = json.load(f)
|
|
145
|
+
|
|
146
|
+
logger.info(f"Restoring backup from {backup_path}")
|
|
147
|
+
|
|
148
|
+
# Restore each file
|
|
149
|
+
for rel_path in metadata.get("backed_up_files", []):
|
|
150
|
+
backup_file = backup_path / rel_path
|
|
151
|
+
target_file = self.project_root / rel_path
|
|
152
|
+
|
|
153
|
+
if backup_file.exists():
|
|
154
|
+
# Create parent directories
|
|
155
|
+
target_file.parent.mkdir(parents=True, exist_ok=True)
|
|
156
|
+
|
|
157
|
+
# Restore file
|
|
158
|
+
shutil.copy2(backup_file, target_file)
|
|
159
|
+
logger.debug(f"Restored: {rel_path}")
|
|
160
|
+
|
|
161
|
+
logger.info("✅ Backup restored successfully")
|
|
162
|
+
return True
|
|
163
|
+
|
|
164
|
+
except Exception as e:
|
|
165
|
+
logger.error(f"Failed to restore backup: {e}")
|
|
166
|
+
return False
|
|
167
|
+
|
|
168
|
+
def cleanup_old_backups(self, keep_count: int = 5) -> int:
|
|
169
|
+
"""
|
|
170
|
+
Clean up old backups, keeping only the most recent ones
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
keep_count: Number of recent backups to keep
|
|
174
|
+
|
|
175
|
+
Returns:
|
|
176
|
+
Number of backups deleted
|
|
177
|
+
"""
|
|
178
|
+
backups = self.list_backups()
|
|
179
|
+
|
|
180
|
+
if len(backups) <= keep_count:
|
|
181
|
+
return 0
|
|
182
|
+
|
|
183
|
+
deleted_count = 0
|
|
184
|
+
for backup_info in backups[keep_count:]:
|
|
185
|
+
backup_path = Path(backup_info["path"])
|
|
186
|
+
try:
|
|
187
|
+
shutil.rmtree(backup_path)
|
|
188
|
+
deleted_count += 1
|
|
189
|
+
logger.debug(f"Deleted old backup: {backup_path}")
|
|
190
|
+
except Exception as e:
|
|
191
|
+
logger.warning(f"Failed to delete backup {backup_path}: {e}")
|
|
192
|
+
|
|
193
|
+
logger.info(f"Cleaned up {deleted_count} old backups")
|
|
194
|
+
return deleted_count
|
|
195
|
+
|
|
196
|
+
def get_latest_backup(self) -> Optional[Path]:
|
|
197
|
+
"""
|
|
198
|
+
Get the most recent backup
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
Path to the latest backup directory, or None if no backups exist
|
|
202
|
+
"""
|
|
203
|
+
backups = self.list_backups()
|
|
204
|
+
if backups:
|
|
205
|
+
return Path(backups[0]["path"])
|
|
206
|
+
return None
|
|
207
|
+
|
|
208
|
+
def create_full_project_backup(self, description: str = "pre-update-backup") -> Path:
|
|
209
|
+
"""
|
|
210
|
+
Create a complete backup of entire project structure before update
|
|
211
|
+
|
|
212
|
+
Backs up:
|
|
213
|
+
- .claude/ (entire directory)
|
|
214
|
+
- .moai/ (entire directory)
|
|
215
|
+
- CLAUDE.md (file)
|
|
216
|
+
|
|
217
|
+
Args:
|
|
218
|
+
description: Description of this backup (default: "pre-update-backup")
|
|
219
|
+
|
|
220
|
+
Returns:
|
|
221
|
+
Path to the backup directory
|
|
222
|
+
"""
|
|
223
|
+
# Create timestamped backup directory
|
|
224
|
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
225
|
+
backup_dir = self.project_root / ".moai-backups" / f"{description}_{timestamp}"
|
|
226
|
+
backup_dir.mkdir(parents=True, exist_ok=True)
|
|
227
|
+
|
|
228
|
+
logger.info(f"Creating full project backup at {backup_dir}")
|
|
229
|
+
|
|
230
|
+
# Directories and files to backup
|
|
231
|
+
backup_targets = [
|
|
232
|
+
(self.project_root / ".claude", True), # (path, is_directory)
|
|
233
|
+
(self.project_root / ".moai", True),
|
|
234
|
+
(self.project_root / "CLAUDE.md", False),
|
|
235
|
+
]
|
|
236
|
+
|
|
237
|
+
backed_up_items = []
|
|
238
|
+
|
|
239
|
+
for target_path, is_dir in backup_targets:
|
|
240
|
+
if not target_path.exists():
|
|
241
|
+
continue
|
|
242
|
+
|
|
243
|
+
try:
|
|
244
|
+
rel_path = target_path.relative_to(self.project_root)
|
|
245
|
+
backup_path = backup_dir / rel_path
|
|
246
|
+
|
|
247
|
+
if is_dir:
|
|
248
|
+
# Backup directory
|
|
249
|
+
shutil.copytree(target_path, backup_path, dirs_exist_ok=True)
|
|
250
|
+
backed_up_items.append(str(rel_path))
|
|
251
|
+
logger.debug(f"Backed up directory: {rel_path}")
|
|
252
|
+
else:
|
|
253
|
+
# Backup file
|
|
254
|
+
backup_path.parent.mkdir(parents=True, exist_ok=True)
|
|
255
|
+
shutil.copy2(target_path, backup_path)
|
|
256
|
+
backed_up_items.append(str(rel_path))
|
|
257
|
+
logger.debug(f"Backed up file: {rel_path}")
|
|
258
|
+
|
|
259
|
+
except Exception as e:
|
|
260
|
+
logger.error(f"Failed to backup {target_path}: {e}")
|
|
261
|
+
raise
|
|
262
|
+
|
|
263
|
+
# Save backup metadata
|
|
264
|
+
metadata = {
|
|
265
|
+
"timestamp": timestamp,
|
|
266
|
+
"description": description,
|
|
267
|
+
"backed_up_items": backed_up_items,
|
|
268
|
+
"project_root": str(self.project_root),
|
|
269
|
+
"backup_type": "full_project",
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
metadata_path = backup_dir / "backup_metadata.json"
|
|
273
|
+
with open(metadata_path, "w", encoding="utf-8") as f:
|
|
274
|
+
json.dump(metadata, f, indent=2, ensure_ascii=False)
|
|
275
|
+
|
|
276
|
+
logger.info(f"✅ Full project backup created successfully: {backup_dir}")
|
|
277
|
+
return backup_dir
|