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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# type: ignore
|
|
2
2
|
"""Phase-based installation executor (SPEC-INIT-003 v0.4.2)
|
|
3
3
|
|
|
4
4
|
Runs the project initialization across five phases:
|
|
@@ -7,9 +7,13 @@ Runs the project initialization across five phases:
|
|
|
7
7
|
- Phase 3: Resource (copy templates while preserving user content)
|
|
8
8
|
- Phase 4: Configuration (generate configuration files)
|
|
9
9
|
- Phase 5: Validation (verify and finalize)
|
|
10
|
+
|
|
11
|
+
Test coverage includes 5-phase integration tests with backup, configuration, and validation
|
|
10
12
|
"""
|
|
11
13
|
|
|
12
14
|
import json
|
|
15
|
+
import logging
|
|
16
|
+
import platform
|
|
13
17
|
import shutil
|
|
14
18
|
import subprocess
|
|
15
19
|
from collections.abc import Callable
|
|
@@ -27,6 +31,7 @@ from moai_adk.core.project.backup_utils import (
|
|
|
27
31
|
)
|
|
28
32
|
from moai_adk.core.project.validator import ProjectValidator
|
|
29
33
|
from moai_adk.core.template.processor import TemplateProcessor
|
|
34
|
+
from moai_adk.statusline.version_reader import VersionConfig, VersionReader
|
|
30
35
|
|
|
31
36
|
console = Console()
|
|
32
37
|
|
|
@@ -43,6 +48,8 @@ class PhaseExecutor:
|
|
|
43
48
|
3. Resource: Copy template resources.
|
|
44
49
|
4. Configuration: Generate configuration files.
|
|
45
50
|
5. Validation: Perform final checks.
|
|
51
|
+
|
|
52
|
+
Enhanced with improved version reading and context management.
|
|
46
53
|
"""
|
|
47
54
|
|
|
48
55
|
# Required directory structure
|
|
@@ -66,6 +73,166 @@ class PhaseExecutor:
|
|
|
66
73
|
self.validator = validator
|
|
67
74
|
self.total_phases = 5
|
|
68
75
|
self.current_phase = 0
|
|
76
|
+
self._version_reader: VersionReader | None = None
|
|
77
|
+
|
|
78
|
+
def _get_version_reader(self) -> VersionReader:
|
|
79
|
+
"""
|
|
80
|
+
Get or create version reader instance.
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
VersionReader instance with enhanced configuration
|
|
84
|
+
"""
|
|
85
|
+
if self._version_reader is None:
|
|
86
|
+
config = VersionConfig(
|
|
87
|
+
cache_ttl_seconds=120, # Longer cache for phase execution
|
|
88
|
+
fallback_version=__version__,
|
|
89
|
+
version_format_regex=r"^v?(\d+\.\d+\.\d+(-[a-zA-Z0-9]+)?)$",
|
|
90
|
+
cache_enabled=True,
|
|
91
|
+
debug_mode=False,
|
|
92
|
+
)
|
|
93
|
+
self._version_reader = VersionReader(config)
|
|
94
|
+
return self._version_reader
|
|
95
|
+
|
|
96
|
+
def _get_enhanced_version_context(self) -> dict[str, str]:
|
|
97
|
+
"""
|
|
98
|
+
Get enhanced version context with fallback strategies and comprehensive configuration.
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
Dictionary containing version-related template variables with enhanced formatting
|
|
102
|
+
"""
|
|
103
|
+
version_context = {}
|
|
104
|
+
logger = logging.getLogger(__name__)
|
|
105
|
+
|
|
106
|
+
try:
|
|
107
|
+
version_reader = self._get_version_reader()
|
|
108
|
+
moai_version = version_reader.get_version()
|
|
109
|
+
|
|
110
|
+
# Enhanced version context with multiple format options
|
|
111
|
+
version_context["MOAI_VERSION"] = moai_version
|
|
112
|
+
version_context["MOAI_VERSION_SHORT"] = self._format_short_version(moai_version)
|
|
113
|
+
version_context["MOAI_VERSION_DISPLAY"] = self._format_display_version(moai_version)
|
|
114
|
+
version_context["MOAI_VERSION_TRIMMED"] = self._format_trimmed_version(moai_version, max_length=10)
|
|
115
|
+
version_context["MOAI_VERSION_SEMVER"] = self._format_semver_version(moai_version)
|
|
116
|
+
version_context["MOAI_VERSION_VALID"] = "true" if moai_version != "unknown" else "false"
|
|
117
|
+
version_context["MOAI_VERSION_SOURCE"] = self._get_version_source(version_reader)
|
|
118
|
+
|
|
119
|
+
# Add performance metrics for debugging
|
|
120
|
+
cache_age = version_reader.get_cache_age_seconds()
|
|
121
|
+
if cache_age is not None:
|
|
122
|
+
version_context["MOAI_VERSION_CACHE_AGE"] = f"{cache_age:.2f}s"
|
|
123
|
+
else:
|
|
124
|
+
version_context["MOAI_VERSION_CACHE_AGE"] = "uncached"
|
|
125
|
+
|
|
126
|
+
except Exception as e:
|
|
127
|
+
logger.warning(f"Failed to read version for context: {e}")
|
|
128
|
+
# Use fallback version with comprehensive fallback formatting
|
|
129
|
+
fallback_version = __version__
|
|
130
|
+
version_context["MOAI_VERSION"] = fallback_version
|
|
131
|
+
version_context["MOAI_VERSION_SHORT"] = self._format_short_version(fallback_version)
|
|
132
|
+
version_context["MOAI_VERSION_DISPLAY"] = self._format_display_version(fallback_version)
|
|
133
|
+
version_context["MOAI_VERSION_TRIMMED"] = self._format_trimmed_version(fallback_version, max_length=10)
|
|
134
|
+
version_context["MOAI_VERSION_SEMVER"] = self._format_semver_version(fallback_version)
|
|
135
|
+
version_context["MOAI_VERSION_VALID"] = "true"
|
|
136
|
+
version_context["MOAI_VERSION_SOURCE"] = "fallback_package"
|
|
137
|
+
version_context["MOAI_VERSION_CACHE_AGE"] = "unavailable"
|
|
138
|
+
|
|
139
|
+
return version_context
|
|
140
|
+
|
|
141
|
+
def _format_short_version(self, version: str) -> str:
|
|
142
|
+
"""
|
|
143
|
+
Format short version by removing 'v' prefix if present.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
version: Version string
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
Short version string
|
|
150
|
+
"""
|
|
151
|
+
return version[1:] if version.startswith("v") else version
|
|
152
|
+
|
|
153
|
+
def _format_display_version(self, version: str) -> str:
|
|
154
|
+
"""
|
|
155
|
+
Format display version with proper formatting.
|
|
156
|
+
|
|
157
|
+
Args:
|
|
158
|
+
version: Version string
|
|
159
|
+
|
|
160
|
+
Returns:
|
|
161
|
+
Display version string
|
|
162
|
+
"""
|
|
163
|
+
if version == "unknown":
|
|
164
|
+
return "MoAI-ADK unknown version"
|
|
165
|
+
elif version.startswith("v"):
|
|
166
|
+
return f"MoAI-ADK {version}"
|
|
167
|
+
else:
|
|
168
|
+
return f"MoAI-ADK v{version}"
|
|
169
|
+
|
|
170
|
+
def _format_trimmed_version(self, version: str, max_length: int = 10) -> str:
|
|
171
|
+
"""
|
|
172
|
+
Format version with maximum length, suitable for UI displays.
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
version: Version string
|
|
176
|
+
max_length: Maximum allowed length for the version string
|
|
177
|
+
|
|
178
|
+
Returns:
|
|
179
|
+
Trimmed version string
|
|
180
|
+
"""
|
|
181
|
+
if version == "unknown":
|
|
182
|
+
return "unknown"
|
|
183
|
+
|
|
184
|
+
# Remove 'v' prefix for trimming
|
|
185
|
+
clean_version = version[1:] if version.startswith("v") else version
|
|
186
|
+
|
|
187
|
+
# Trim if necessary
|
|
188
|
+
if len(clean_version) > max_length:
|
|
189
|
+
return clean_version[:max_length]
|
|
190
|
+
return clean_version
|
|
191
|
+
|
|
192
|
+
def _format_semver_version(self, version: str) -> str:
|
|
193
|
+
"""
|
|
194
|
+
Format version as semantic version with major.minor.patch structure.
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
version: Version string
|
|
198
|
+
|
|
199
|
+
Returns:
|
|
200
|
+
Semantic version string
|
|
201
|
+
"""
|
|
202
|
+
if version == "unknown":
|
|
203
|
+
return "0.0.0"
|
|
204
|
+
|
|
205
|
+
# Remove 'v' prefix and extract semantic version
|
|
206
|
+
clean_version = version[1:] if version.startswith("v") else version
|
|
207
|
+
|
|
208
|
+
# Extract core semantic version (remove pre-release and build metadata)
|
|
209
|
+
import re
|
|
210
|
+
|
|
211
|
+
semver_match = re.match(r"^(\d+\.\d+\.\d+)", clean_version)
|
|
212
|
+
if semver_match:
|
|
213
|
+
return semver_match.group(1)
|
|
214
|
+
return "0.0.0"
|
|
215
|
+
|
|
216
|
+
def _get_version_source(self, version_reader: VersionReader) -> str:
|
|
217
|
+
"""
|
|
218
|
+
Determine the source of the version information.
|
|
219
|
+
|
|
220
|
+
Args:
|
|
221
|
+
version_reader: VersionReader instance
|
|
222
|
+
|
|
223
|
+
Returns:
|
|
224
|
+
String indicating version source
|
|
225
|
+
"""
|
|
226
|
+
config = version_reader.get_config()
|
|
227
|
+
|
|
228
|
+
# Check if we have a cached version (most likely from config)
|
|
229
|
+
cache_age = version_reader.get_cache_age_seconds()
|
|
230
|
+
if cache_age is not None and cache_age < config.cache_ttl_seconds:
|
|
231
|
+
return "config_cached"
|
|
232
|
+
elif cache_age is not None:
|
|
233
|
+
return "config_stale"
|
|
234
|
+
else:
|
|
235
|
+
return config.fallback_version
|
|
69
236
|
|
|
70
237
|
def execute_preparation_phase(
|
|
71
238
|
self,
|
|
@@ -81,9 +248,7 @@ class PhaseExecutor:
|
|
|
81
248
|
progress_callback: Optional progress callback.
|
|
82
249
|
"""
|
|
83
250
|
self.current_phase = 1
|
|
84
|
-
self._report_progress(
|
|
85
|
-
"Phase 1: Preparation and backup...", progress_callback
|
|
86
|
-
)
|
|
251
|
+
self._report_progress("Phase 1: Preparation and backup...", progress_callback)
|
|
87
252
|
|
|
88
253
|
# Validate system requirements
|
|
89
254
|
self.validator.validate_system_requirements()
|
|
@@ -107,9 +272,7 @@ class PhaseExecutor:
|
|
|
107
272
|
progress_callback: Optional progress callback.
|
|
108
273
|
"""
|
|
109
274
|
self.current_phase = 2
|
|
110
|
-
self._report_progress(
|
|
111
|
-
"Phase 2: Creating directory structure...", progress_callback
|
|
112
|
-
)
|
|
275
|
+
self._report_progress("Phase 2: Creating directory structure...", progress_callback)
|
|
113
276
|
|
|
114
277
|
for directory in self.REQUIRED_DIRECTORIES:
|
|
115
278
|
dir_path = project_path / directory
|
|
@@ -131,23 +294,28 @@ class PhaseExecutor:
|
|
|
131
294
|
Returns:
|
|
132
295
|
List of created files or directories.
|
|
133
296
|
"""
|
|
297
|
+
import stat
|
|
298
|
+
|
|
134
299
|
self.current_phase = 3
|
|
135
|
-
self._report_progress(
|
|
136
|
-
"Phase 3: Installing resources...", progress_callback
|
|
137
|
-
)
|
|
300
|
+
self._report_progress("Phase 3: Installing resources...", progress_callback)
|
|
138
301
|
|
|
139
302
|
# Copy resources via TemplateProcessor in silent mode
|
|
140
303
|
processor = TemplateProcessor(project_path)
|
|
141
304
|
|
|
142
305
|
# Set template variable context (if provided)
|
|
143
306
|
if config:
|
|
144
|
-
|
|
145
|
-
language_config = config.get("language", {})
|
|
307
|
+
language_config: dict[str, Any] = config.get("language", {})
|
|
146
308
|
if not isinstance(language_config, dict):
|
|
147
309
|
language_config = {}
|
|
148
310
|
|
|
311
|
+
# Detect OS for cross-platform Hook path configuration
|
|
312
|
+
hook_project_dir = "%CLAUDE_PROJECT_DIR%" if platform.system() == "Windows" else "$CLAUDE_PROJECT_DIR"
|
|
313
|
+
|
|
314
|
+
# Get enhanced version context with fallback strategies
|
|
315
|
+
version_context = self._get_enhanced_version_context()
|
|
316
|
+
|
|
149
317
|
context = {
|
|
150
|
-
|
|
318
|
+
**version_context,
|
|
151
319
|
"CREATION_TIMESTAMP": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
|
152
320
|
"PROJECT_NAME": config.get("name", "unknown"),
|
|
153
321
|
"PROJECT_DESCRIPTION": config.get("description", ""),
|
|
@@ -158,11 +326,30 @@ class PhaseExecutor:
|
|
|
158
326
|
"CONVERSATION_LANGUAGE": language_config.get("conversation_language", "en"),
|
|
159
327
|
"CONVERSATION_LANGUAGE_NAME": language_config.get("conversation_language_name", "English"),
|
|
160
328
|
"CODEBASE_LANGUAGE": config.get("language", "generic"),
|
|
329
|
+
"PROJECT_DIR": hook_project_dir,
|
|
161
330
|
}
|
|
162
331
|
processor.set_context(context)
|
|
163
332
|
|
|
164
333
|
processor.copy_templates(backup=False, silent=True) # Avoid progress bar conflicts
|
|
165
334
|
|
|
335
|
+
# Post-process: Set executable permission on shell scripts
|
|
336
|
+
# This is necessary because git may not preserve file permissions during clone/checkout
|
|
337
|
+
scripts_dir = project_path / ".moai" / "scripts"
|
|
338
|
+
logger = logging.getLogger(__name__)
|
|
339
|
+
if scripts_dir.exists():
|
|
340
|
+
logger.debug(f"Processing shell scripts in {scripts_dir}")
|
|
341
|
+
for script_file in scripts_dir.glob("*.sh"):
|
|
342
|
+
try:
|
|
343
|
+
# Add execute permission for user, group, and others
|
|
344
|
+
current_mode = script_file.stat().st_mode
|
|
345
|
+
new_mode = current_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
|
|
346
|
+
script_file.chmod(new_mode)
|
|
347
|
+
logger.debug(f"Set executable permission on {script_file}: {oct(current_mode)} -> {oct(new_mode)}")
|
|
348
|
+
except Exception as e:
|
|
349
|
+
logger.warning(f"Failed to set executable permission on {script_file}: {e}")
|
|
350
|
+
else:
|
|
351
|
+
logger.debug(f"Scripts directory not found: {scripts_dir}")
|
|
352
|
+
|
|
166
353
|
# Return a simplified list of generated assets
|
|
167
354
|
return [
|
|
168
355
|
".claude/",
|
|
@@ -189,25 +376,206 @@ class PhaseExecutor:
|
|
|
189
376
|
List of created files.
|
|
190
377
|
"""
|
|
191
378
|
self.current_phase = 4
|
|
192
|
-
self._report_progress(
|
|
193
|
-
|
|
194
|
-
)
|
|
195
|
-
|
|
196
|
-
#
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
379
|
+
self._report_progress("Phase 4: Generating configurations...", progress_callback)
|
|
380
|
+
|
|
381
|
+
logger = logging.getLogger(__name__)
|
|
382
|
+
|
|
383
|
+
# Read existing config to preserve user settings (Issue #165)
|
|
384
|
+
config_path = project_path / ".moai" / "config" / "config.json"
|
|
385
|
+
existing_config: dict[str, Any] = {}
|
|
386
|
+
if config_path.exists():
|
|
387
|
+
try:
|
|
388
|
+
with open(config_path, "r", encoding="utf-8") as f:
|
|
389
|
+
existing_config = json.load(f)
|
|
390
|
+
logger.debug(f"Successfully read existing config from {config_path}")
|
|
391
|
+
except (json.JSONDecodeError, OSError) as e:
|
|
392
|
+
logger.warning(f"Failed to read existing config: {e}. Starting fresh.")
|
|
393
|
+
existing_config = {}
|
|
394
|
+
|
|
395
|
+
# Enhanced config merging with comprehensive version preservation
|
|
396
|
+
merged_config = self._merge_configuration_preserving_versions(config, existing_config)
|
|
397
|
+
|
|
398
|
+
# Enhanced version handling using VersionReader for consistency
|
|
399
|
+
try:
|
|
400
|
+
version_reader = self._get_version_reader()
|
|
401
|
+
current_config_version = version_reader.get_version()
|
|
402
|
+
|
|
403
|
+
# Ensure version consistency across the merged config
|
|
404
|
+
self._ensure_version_consistency(merged_config, current_config_version, existing_config)
|
|
405
|
+
|
|
406
|
+
logger.debug(f"Version consistency check completed. Current version: {current_config_version}")
|
|
407
|
+
except Exception as e:
|
|
408
|
+
logger.warning(f"Version consistency check failed: {e}. Using fallback version.")
|
|
409
|
+
merged_config["moai"]["version"] = __version__
|
|
410
|
+
|
|
411
|
+
# Write final config with enhanced formatting
|
|
412
|
+
self._write_configuration_file(config_path, merged_config)
|
|
413
|
+
logger.info(f"Configuration file written to {config_path}")
|
|
208
414
|
|
|
209
415
|
return [str(config_path)]
|
|
210
416
|
|
|
417
|
+
def _merge_configuration_preserving_versions(
|
|
418
|
+
self, new_config: dict[str, Any], existing_config: dict[str, Any]
|
|
419
|
+
) -> dict[str, Any]:
|
|
420
|
+
"""
|
|
421
|
+
Merge configurations while preserving user settings and version information.
|
|
422
|
+
|
|
423
|
+
Args:
|
|
424
|
+
new_config: New configuration from initialization
|
|
425
|
+
existing_config: Existing configuration from project
|
|
426
|
+
|
|
427
|
+
Returns:
|
|
428
|
+
Merged configuration dictionary
|
|
429
|
+
"""
|
|
430
|
+
logger = logging.getLogger(__name__)
|
|
431
|
+
merged_config = new_config.copy()
|
|
432
|
+
|
|
433
|
+
# Define configuration sections with their merge strategies
|
|
434
|
+
config_sections = {
|
|
435
|
+
"moai": {"preserve_all": True, "priority": "user"},
|
|
436
|
+
"user": {"preserve_keys": ["nickname"], "priority": "user"},
|
|
437
|
+
"language": {
|
|
438
|
+
"preserve_keys": [],
|
|
439
|
+
"priority": "new",
|
|
440
|
+
}, # Use new language config during init
|
|
441
|
+
"project": {"preserve_keys": [], "priority": "new"},
|
|
442
|
+
"git": {"preserve_keys": [], "priority": "new"},
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
for section_name, strategy in config_sections.items():
|
|
446
|
+
if section_name in existing_config:
|
|
447
|
+
logger.debug(f"Merging section: {section_name}")
|
|
448
|
+
self._merge_config_section(merged_config, existing_config, section_name, strategy)
|
|
449
|
+
|
|
450
|
+
return merged_config
|
|
451
|
+
|
|
452
|
+
def _merge_config_section(
|
|
453
|
+
self,
|
|
454
|
+
merged_config: dict[str, Any],
|
|
455
|
+
existing_config: dict[str, Any],
|
|
456
|
+
section_name: str,
|
|
457
|
+
strategy: dict[str, Any],
|
|
458
|
+
) -> None:
|
|
459
|
+
"""
|
|
460
|
+
Merge a specific configuration section.
|
|
461
|
+
|
|
462
|
+
Args:
|
|
463
|
+
merged_config: Target configuration to merge into
|
|
464
|
+
existing_config: Source configuration to merge from
|
|
465
|
+
section_name: Name of the section to merge
|
|
466
|
+
strategy: Merge strategy for this section
|
|
467
|
+
"""
|
|
468
|
+
logger = logging.getLogger(__name__)
|
|
469
|
+
if section_name not in merged_config:
|
|
470
|
+
merged_config[section_name] = {}
|
|
471
|
+
|
|
472
|
+
section_config = merged_config[section_name]
|
|
473
|
+
existing_section = existing_config[section_name]
|
|
474
|
+
|
|
475
|
+
if strategy["priority"] == "user":
|
|
476
|
+
# User priority: preserve existing values
|
|
477
|
+
preserve_keys = strategy.get("preserve_keys", [])
|
|
478
|
+
# Convert frozenset to list if needed
|
|
479
|
+
if isinstance(preserve_keys, frozenset):
|
|
480
|
+
preserve_keys = list(preserve_keys)
|
|
481
|
+
elif not isinstance(preserve_keys, list):
|
|
482
|
+
preserve_keys = list(preserve_keys) if preserve_keys else []
|
|
483
|
+
|
|
484
|
+
for key, value in existing_section.items():
|
|
485
|
+
if strategy.get("preserve_all", False) or key in preserve_keys:
|
|
486
|
+
section_config[key] = value
|
|
487
|
+
logger.debug(f"Preserved {section_name}.{key} = {value}")
|
|
488
|
+
else:
|
|
489
|
+
# New priority: keep new config, but don't overwrite if exists
|
|
490
|
+
for key, value in existing_section.items():
|
|
491
|
+
if key not in section_config:
|
|
492
|
+
section_config[key] = value
|
|
493
|
+
logger.debug(f"Inherited {section_name}.{key} = {value}")
|
|
494
|
+
|
|
495
|
+
def _ensure_version_consistency(
|
|
496
|
+
self,
|
|
497
|
+
config: dict[str, Any],
|
|
498
|
+
current_version: str,
|
|
499
|
+
existing_config: dict[str, Any],
|
|
500
|
+
) -> None:
|
|
501
|
+
"""
|
|
502
|
+
Ensure version consistency across the configuration.
|
|
503
|
+
|
|
504
|
+
Args:
|
|
505
|
+
config: Configuration to update
|
|
506
|
+
current_version: Current version from VersionReader
|
|
507
|
+
existing_config: Existing configuration for reference
|
|
508
|
+
"""
|
|
509
|
+
logger = logging.getLogger(__name__)
|
|
510
|
+
|
|
511
|
+
# Ensure moai section exists
|
|
512
|
+
if "moai" not in config:
|
|
513
|
+
config["moai"] = {}
|
|
514
|
+
|
|
515
|
+
# Version field priority strategy:
|
|
516
|
+
# 1. User explicitly set in existing config -> preserve
|
|
517
|
+
# 2. Version from config file -> use
|
|
518
|
+
# 3. Current version from VersionReader -> use
|
|
519
|
+
# 4. Package version -> fallback
|
|
520
|
+
|
|
521
|
+
existing_moai = existing_config.get("moai", {})
|
|
522
|
+
config_moai = config["moai"]
|
|
523
|
+
|
|
524
|
+
# Check if user explicitly set a version in existing config
|
|
525
|
+
if "version" in existing_moai:
|
|
526
|
+
user_version = existing_moai["version"]
|
|
527
|
+
logger.debug(f"User explicitly set version: {user_version}")
|
|
528
|
+
config_moai["version"] = user_version
|
|
529
|
+
elif "version" in config_moai:
|
|
530
|
+
# Version already in new config, validate it
|
|
531
|
+
config_version = config_moai["version"]
|
|
532
|
+
if config_version == "unknown" or not self._is_valid_version_format(config_version):
|
|
533
|
+
logger.debug(f"Invalid config version {config_version}, updating to current: {current_version}")
|
|
534
|
+
config_moai["version"] = current_version
|
|
535
|
+
else:
|
|
536
|
+
# No version found, use current version
|
|
537
|
+
logger.debug(f"No version found, setting to current: {current_version}")
|
|
538
|
+
config_moai["version"] = current_version
|
|
539
|
+
|
|
540
|
+
def _is_valid_version_format(self, version: str) -> bool:
|
|
541
|
+
"""
|
|
542
|
+
Check if version format is valid.
|
|
543
|
+
|
|
544
|
+
Args:
|
|
545
|
+
version: Version string to validate
|
|
546
|
+
|
|
547
|
+
Returns:
|
|
548
|
+
True if version format is valid
|
|
549
|
+
"""
|
|
550
|
+
import re
|
|
551
|
+
|
|
552
|
+
pattern = r"^v?(\d+\.\d+\.\d+(-[a-zA-Z0-9]+)?)$"
|
|
553
|
+
return bool(re.match(pattern, version))
|
|
554
|
+
|
|
555
|
+
def _write_configuration_file(self, config_path: Path, config: dict[str, Any]) -> None:
|
|
556
|
+
"""
|
|
557
|
+
Write configuration file with enhanced formatting and error handling.
|
|
558
|
+
|
|
559
|
+
Args:
|
|
560
|
+
config_path: Path to write configuration file
|
|
561
|
+
config: Configuration dictionary to write
|
|
562
|
+
"""
|
|
563
|
+
logger = logging.getLogger(__name__)
|
|
564
|
+
|
|
565
|
+
try:
|
|
566
|
+
# Ensure parent directory exists
|
|
567
|
+
config_path.parent.mkdir(parents=True, exist_ok=True)
|
|
568
|
+
|
|
569
|
+
# Write with enhanced formatting
|
|
570
|
+
with open(config_path, "w", encoding="utf-8") as f:
|
|
571
|
+
json.dump(config, f, indent=2, ensure_ascii=False)
|
|
572
|
+
|
|
573
|
+
logger.info(f"Configuration successfully written to {config_path}")
|
|
574
|
+
|
|
575
|
+
except Exception as e:
|
|
576
|
+
logger.error(f"Failed to write configuration file: {e}")
|
|
577
|
+
raise
|
|
578
|
+
|
|
211
579
|
def execute_validation_phase(
|
|
212
580
|
self,
|
|
213
581
|
project_path: Path,
|
|
@@ -216,9 +584,6 @@ class PhaseExecutor:
|
|
|
216
584
|
) -> None:
|
|
217
585
|
"""Phase 5: validation and wrap-up.
|
|
218
586
|
|
|
219
|
-
@CODE:INIT-004:PHASE5 | Phase 5 verification logic
|
|
220
|
-
@REQ:VALIDATION-001 | SPEC-INIT-004: Verify required files after initialization completion
|
|
221
|
-
@CODE:INIT-004:PHASE5-INTEGRATION | Integration of validation in Phase 5
|
|
222
587
|
|
|
223
588
|
Args:
|
|
224
589
|
project_path: Project path.
|
|
@@ -226,19 +591,16 @@ class PhaseExecutor:
|
|
|
226
591
|
progress_callback: Optional progress callback.
|
|
227
592
|
"""
|
|
228
593
|
self.current_phase = 5
|
|
229
|
-
self._report_progress(
|
|
230
|
-
"Phase 5: Validation and finalization...", progress_callback
|
|
231
|
-
)
|
|
594
|
+
self._report_progress("Phase 5: Validation and finalization...", progress_callback)
|
|
232
595
|
|
|
233
|
-
#
|
|
234
|
-
#
|
|
596
|
+
# Validate installation results
|
|
597
|
+
# Comprehensive installation validation
|
|
235
598
|
# Verifies all required files including 4 Alfred command files:
|
|
236
599
|
# - 0-project.md, 1-plan.md, 2-run.md, 3-sync.md
|
|
237
600
|
self.validator.validate_installation(project_path)
|
|
238
601
|
|
|
239
|
-
# Initialize Git for team
|
|
240
|
-
|
|
241
|
-
self._initialize_git(project_path)
|
|
602
|
+
# Initialize Git for all modes (team, personal, solo)
|
|
603
|
+
self._initialize_git(project_path)
|
|
242
604
|
|
|
243
605
|
def _create_backup(self, project_path: Path) -> None:
|
|
244
606
|
"""Create a single backup (v0.4.2).
|
|
@@ -256,6 +618,8 @@ class PhaseExecutor:
|
|
|
256
618
|
if backup_path.exists():
|
|
257
619
|
shutil.rmtree(backup_path)
|
|
258
620
|
|
|
621
|
+
# Create backup directories
|
|
622
|
+
backups_dir.mkdir(parents=True, exist_ok=True)
|
|
259
623
|
backup_path.mkdir(parents=True, exist_ok=True)
|
|
260
624
|
|
|
261
625
|
# Collect backup targets
|
|
@@ -301,26 +665,34 @@ class PhaseExecutor:
|
|
|
301
665
|
dst_item.mkdir(parents=True, exist_ok=True)
|
|
302
666
|
|
|
303
667
|
def _initialize_git(self, project_path: Path) -> None:
|
|
304
|
-
"""Initialize a Git repository.
|
|
668
|
+
"""Initialize a Git repository if not already initialized.
|
|
305
669
|
|
|
306
670
|
Args:
|
|
307
671
|
project_path: Project path.
|
|
308
672
|
"""
|
|
673
|
+
# Check if .git directory already exists
|
|
674
|
+
git_dir = project_path / ".git"
|
|
675
|
+
if git_dir.exists() and git_dir.is_dir():
|
|
676
|
+
# Git already initialized, skip
|
|
677
|
+
return
|
|
678
|
+
|
|
309
679
|
try:
|
|
310
680
|
subprocess.run(
|
|
311
681
|
["git", "init"],
|
|
312
682
|
cwd=project_path,
|
|
313
683
|
check=True,
|
|
314
684
|
capture_output=True,
|
|
685
|
+
timeout=30, # Default timeout for git operations
|
|
315
686
|
)
|
|
316
687
|
# Intentionally avoid printing to keep progress output clean
|
|
688
|
+
except subprocess.TimeoutExpired:
|
|
689
|
+
# Timeout is non-fatal
|
|
690
|
+
pass
|
|
317
691
|
except subprocess.CalledProcessError:
|
|
318
692
|
# Only log on error; failures are non-fatal
|
|
319
693
|
pass
|
|
320
694
|
|
|
321
|
-
def _report_progress(
|
|
322
|
-
self, message: str, callback: ProgressCallback | None
|
|
323
|
-
) -> None:
|
|
695
|
+
def _report_progress(self, message: str, callback: ProgressCallback | None) -> None:
|
|
324
696
|
"""Report progress.
|
|
325
697
|
|
|
326
698
|
Args:
|