moai-adk 0.15.1__py3-none-any.whl → 0.32.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +2 -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 +105 -47
- moai_adk/cli/commands/language.py +248 -0
- moai_adk/cli/commands/status.py +8 -13
- moai_adk/cli/commands/update.py +1734 -65
- 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 +672 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +490 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +128 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/__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 +147 -16
- 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 +20 -28
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_config_resolver.py +485 -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 +17 -39
- moai_adk/core/project/initializer.py +170 -33
- moai_adk/core/project/phase_executor.py +398 -68
- 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 +90 -48
- 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 +373 -0
- moai_adk/statusline/enhanced_output_style_detector.py +372 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +264 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +383 -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 +549 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
- moai_adk/templates/.claude/hooks/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
- moai_adk/templates/.claude/hooks/{alfred/shared/core → moai/lib}/checkpoint.py +9 -36
- 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/{alfred/shared/core → moai/lib}/project.py +63 -44
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/{alfred/core → moai/lib}/timeout.py +40 -16
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
- moai_adk/templates/.claude/settings.json +78 -50
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +312 -283
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +291 -94
- moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +469 -101
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
- moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
- moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +128 -0
- moai_adk/templates/.git-hooks/pre-push +220 -13
- 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 +0 -1
- moai_adk/templates/.gitignore +197 -13
- moai_adk/templates/.mcp.json +20 -0
- moai_adk/templates/.moai/cache/personalization.json +10 -0
- moai_adk/templates/.moai/config/config.yaml +344 -0
- moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
- moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
- moai_adk/templates/.moai/config/presets/team.yaml +33 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
- moai_adk/templates/.moai/config/sections/language.yaml +11 -0
- moai_adk/templates/.moai/config/sections/project.yaml +13 -0
- moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
- moai_adk/templates/.moai/config/sections/system.yaml +14 -0
- moai_adk/templates/.moai/config/sections/user.yaml +5 -0
- moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +310 -1050
- moai_adk/utils/__init__.py +24 -2
- moai_adk/utils/banner.py +7 -11
- 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/{templates/.claude/hooks/alfred/utils → utils}/timeout.py +8 -9
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.32.8.dist-info/METADATA +2478 -0
- moai_adk-0.32.8.dist-info/RECORD +396 -0
- {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
- {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
- moai_adk/cli/commands/backup.py +0 -80
- moai_adk/core/tags/__init__.py +0 -86
- moai_adk/core/tags/ci_validator.py +0 -463
- moai_adk/core/tags/cli.py +0 -283
- moai_adk/core/tags/generator.py +0 -109
- moai_adk/core/tags/inserter.py +0 -99
- moai_adk/core/tags/mapper.py +0 -126
- moai_adk/core/tags/parser.py +0 -76
- moai_adk/core/tags/pre_commit_validator.py +0 -393
- moai_adk/core/tags/reporter.py +0 -956
- moai_adk/core/tags/tags.py +0 -149
- moai_adk/core/tags/validator.py +0 -897
- moai_adk/templates/.claude/agents/alfred/backend-expert.md +0 -319
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -316
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -208
- moai_adk/templates/.claude/agents/alfred/devops-expert.md +0 -464
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -214
- moai_adk/templates/.claude/agents/alfred/frontend-expert.md +0 -357
- moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -406
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -423
- moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -312
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -343
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -865
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -426
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -361
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -428
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -375
- moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +0 -571
- moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1854
- moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -880
- moai_adk/templates/.claude/commands/alfred/2-run.md +0 -793
- moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -1084
- moai_adk/templates/.claude/commands/alfred/9-feedback.md +0 -149
- moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -748
- moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +0 -108
- moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -29
- moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +0 -100
- moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +0 -170
- moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +0 -67
- moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +0 -230
- moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +0 -21
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +0 -154
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +0 -174
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +0 -87
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +0 -61
- moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +0 -112
- moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +0 -1
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +0 -70
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +0 -62
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +0 -242
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +0 -56
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +0 -444
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +0 -62
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +0 -405
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +0 -51
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +0 -355
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +0 -239
- 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-expertise-detection/SKILL.md +0 -323
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +0 -286
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +0 -126
- 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-gitflow-policy/SKILL.md +0 -74
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +0 -269
- 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-issue-labels/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +0 -150
- 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-persona-roles/SKILL.md +0 -198
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +0 -431
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +0 -141
- moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +0 -89
- moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +0 -122
- moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +0 -369
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +0 -508
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +0 -481
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +0 -100
- moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +0 -273
- moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +0 -77
- moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +0 -265
- moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +0 -539
- moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +0 -84
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +0 -137
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +0 -219
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +0 -161
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +0 -541
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +0 -622
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +0 -115
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +0 -348
- 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-todowrite-pattern/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +0 -211
- 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-alfred-workflow/SKILL.md +0 -288
- 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-skill-descriptions/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/reference.md +0 -218
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +0 -482
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +0 -278
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +0 -477
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +0 -271
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +0 -583
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +0 -526
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +0 -465
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +0 -328
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +0 -312
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +0 -285
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +0 -278
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +0 -303
- 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-design-systems/SKILL.md +0 -802
- moai_adk/templates/.claude/skills/moai-design-systems/examples.md +0 -1238
- moai_adk/templates/.claude/skills/moai-design-systems/reference.md +0 -673
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +0 -1633
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +0 -660
- 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-database/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-database/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-frontend/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-frontend/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 -116
- 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/SKILL.md +0 -124
- 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/SKILL.md +0 -123
- 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-go/SKILL.md +0 -127
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +0 -126
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +0 -31
- 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-kotlin/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +0 -126
- 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-python/SKILL.md +0 -433
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +0 -624
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +0 -316
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +0 -123
- 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/SKILL.md +0 -124
- 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-rust/SKILL.md +0 -127
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +0 -125
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +0 -30
- 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-lang-swift/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +0 -133
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +0 -34
- moai_adk/templates/.claude/skills/moai-project-documentation.md +0 -622
- moai_adk/templates/.github/workflows/c-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/cpp-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/csharp-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/dart-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/go-tag-validation.yml +0 -130
- moai_adk/templates/.github/workflows/java-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/javascript-tag-validation.yml +0 -135
- moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -419
- moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
- moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
- moai_adk/templates/.github/workflows/php-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/python-tag-validation.yml +0 -118
- moai_adk/templates/.github/workflows/release.yml +0 -118
- moai_adk/templates/.github/workflows/ruby-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/rust-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/shell-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/swift-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/tag-report.yml +0 -269
- moai_adk/templates/.github/workflows/tag-validation.yml +0 -186
- moai_adk/templates/.github/workflows/typescript-tag-validation.yml +0 -154
- moai_adk/templates/.moai/config.json +0 -115
- moai_adk/templates/workflows/go-tag-validation.yml +0 -30
- moai_adk/templates/workflows/javascript-tag-validation.yml +0 -41
- moai_adk/templates/workflows/python-tag-validation.yml +0 -42
- moai_adk/templates/workflows/typescript-tag-validation.yml +0 -31
- moai_adk-0.15.1.dist-info/METADATA +0 -3094
- moai_adk-0.15.1.dist-info/RECORD +0 -365
- {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
#
|
|
2
|
-
# @CODE:TEST-COVERAGE-001 | SPEC: SPEC-TEST-COVERAGE-001.md | TEST: tests/unit/test_phase_executor.py
|
|
1
|
+
# type: ignore
|
|
3
2
|
"""Phase-based installation executor (SPEC-INIT-003 v0.4.2)
|
|
4
3
|
|
|
5
4
|
Runs the project initialization across five phases:
|
|
@@ -13,6 +12,8 @@ Test coverage includes 5-phase integration tests with backup, configuration, and
|
|
|
13
12
|
"""
|
|
14
13
|
|
|
15
14
|
import json
|
|
15
|
+
import logging
|
|
16
|
+
import platform
|
|
16
17
|
import shutil
|
|
17
18
|
import subprocess
|
|
18
19
|
from collections.abc import Callable
|
|
@@ -30,6 +31,7 @@ from moai_adk.core.project.backup_utils import (
|
|
|
30
31
|
)
|
|
31
32
|
from moai_adk.core.project.validator import ProjectValidator
|
|
32
33
|
from moai_adk.core.template.processor import TemplateProcessor
|
|
34
|
+
from moai_adk.statusline.version_reader import VersionConfig, VersionReader
|
|
33
35
|
|
|
34
36
|
console = Console()
|
|
35
37
|
|
|
@@ -46,6 +48,8 @@ class PhaseExecutor:
|
|
|
46
48
|
3. Resource: Copy template resources.
|
|
47
49
|
4. Configuration: Generate configuration files.
|
|
48
50
|
5. Validation: Perform final checks.
|
|
51
|
+
|
|
52
|
+
Enhanced with improved version reading and context management.
|
|
49
53
|
"""
|
|
50
54
|
|
|
51
55
|
# Required directory structure
|
|
@@ -69,6 +73,166 @@ class PhaseExecutor:
|
|
|
69
73
|
self.validator = validator
|
|
70
74
|
self.total_phases = 5
|
|
71
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
|
|
72
236
|
|
|
73
237
|
def execute_preparation_phase(
|
|
74
238
|
self,
|
|
@@ -84,9 +248,7 @@ class PhaseExecutor:
|
|
|
84
248
|
progress_callback: Optional progress callback.
|
|
85
249
|
"""
|
|
86
250
|
self.current_phase = 1
|
|
87
|
-
self._report_progress(
|
|
88
|
-
"Phase 1: Preparation and backup...", progress_callback
|
|
89
|
-
)
|
|
251
|
+
self._report_progress("Phase 1: Preparation and backup...", progress_callback)
|
|
90
252
|
|
|
91
253
|
# Validate system requirements
|
|
92
254
|
self.validator.validate_system_requirements()
|
|
@@ -110,9 +272,7 @@ class PhaseExecutor:
|
|
|
110
272
|
progress_callback: Optional progress callback.
|
|
111
273
|
"""
|
|
112
274
|
self.current_phase = 2
|
|
113
|
-
self._report_progress(
|
|
114
|
-
"Phase 2: Creating directory structure...", progress_callback
|
|
115
|
-
)
|
|
275
|
+
self._report_progress("Phase 2: Creating directory structure...", progress_callback)
|
|
116
276
|
|
|
117
277
|
for directory in self.REQUIRED_DIRECTORIES:
|
|
118
278
|
dir_path = project_path / directory
|
|
@@ -134,23 +294,28 @@ class PhaseExecutor:
|
|
|
134
294
|
Returns:
|
|
135
295
|
List of created files or directories.
|
|
136
296
|
"""
|
|
297
|
+
import stat
|
|
298
|
+
|
|
137
299
|
self.current_phase = 3
|
|
138
|
-
self._report_progress(
|
|
139
|
-
"Phase 3: Installing resources...", progress_callback
|
|
140
|
-
)
|
|
300
|
+
self._report_progress("Phase 3: Installing resources...", progress_callback)
|
|
141
301
|
|
|
142
302
|
# Copy resources via TemplateProcessor in silent mode
|
|
143
303
|
processor = TemplateProcessor(project_path)
|
|
144
304
|
|
|
145
305
|
# Set template variable context (if provided)
|
|
146
306
|
if config:
|
|
147
|
-
# @TAG:LANG-FIX-001:PY-CONFIG | Read language from nested config structure
|
|
148
307
|
language_config: dict[str, Any] = config.get("language", {})
|
|
149
308
|
if not isinstance(language_config, dict):
|
|
150
309
|
language_config = {}
|
|
151
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
|
+
|
|
152
317
|
context = {
|
|
153
|
-
|
|
318
|
+
**version_context,
|
|
154
319
|
"CREATION_TIMESTAMP": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
|
155
320
|
"PROJECT_NAME": config.get("name", "unknown"),
|
|
156
321
|
"PROJECT_DESCRIPTION": config.get("description", ""),
|
|
@@ -161,11 +326,30 @@ class PhaseExecutor:
|
|
|
161
326
|
"CONVERSATION_LANGUAGE": language_config.get("conversation_language", "en"),
|
|
162
327
|
"CONVERSATION_LANGUAGE_NAME": language_config.get("conversation_language_name", "English"),
|
|
163
328
|
"CODEBASE_LANGUAGE": config.get("language", "generic"),
|
|
329
|
+
"PROJECT_DIR": hook_project_dir,
|
|
164
330
|
}
|
|
165
331
|
processor.set_context(context)
|
|
166
332
|
|
|
167
333
|
processor.copy_templates(backup=False, silent=True) # Avoid progress bar conflicts
|
|
168
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
|
+
|
|
169
353
|
# Return a simplified list of generated assets
|
|
170
354
|
return [
|
|
171
355
|
".claude/",
|
|
@@ -192,61 +376,206 @@ class PhaseExecutor:
|
|
|
192
376
|
List of created files.
|
|
193
377
|
"""
|
|
194
378
|
self.current_phase = 4
|
|
195
|
-
self._report_progress(
|
|
196
|
-
|
|
197
|
-
)
|
|
379
|
+
self._report_progress("Phase 4: Generating configurations...", progress_callback)
|
|
380
|
+
|
|
381
|
+
logger = logging.getLogger(__name__)
|
|
198
382
|
|
|
199
383
|
# Read existing config to preserve user settings (Issue #165)
|
|
200
|
-
config_path = project_path / ".moai" / "config.json"
|
|
384
|
+
config_path = project_path / ".moai" / "config" / "config.json"
|
|
201
385
|
existing_config: dict[str, Any] = {}
|
|
202
386
|
if config_path.exists():
|
|
203
387
|
try:
|
|
204
388
|
with open(config_path, "r", encoding="utf-8") as f:
|
|
205
389
|
existing_config = json.load(f)
|
|
206
|
-
|
|
207
|
-
|
|
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.")
|
|
208
393
|
existing_config = {}
|
|
209
394
|
|
|
210
|
-
#
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
if isinstance(existing_lang, dict):
|
|
230
|
-
# Preserve conversation_language settings
|
|
231
|
-
if "conversation_language" in existing_lang:
|
|
232
|
-
lang_config["conversation_language"] = existing_lang["conversation_language"]
|
|
233
|
-
if "conversation_language_name" in existing_lang:
|
|
234
|
-
lang_config["conversation_language_name"] = existing_lang["conversation_language_name"]
|
|
235
|
-
|
|
236
|
-
# Ensure project section exists and set defaults
|
|
237
|
-
if "project" not in config:
|
|
238
|
-
config["project"] = {}
|
|
239
|
-
# Type guard for mypy
|
|
240
|
-
project_config = config["project"]
|
|
241
|
-
if isinstance(project_config, dict):
|
|
242
|
-
project_config["optimized"] = False # Default value
|
|
243
|
-
|
|
244
|
-
# Write config.json
|
|
245
|
-
with open(config_path, "w", encoding="utf-8") as f:
|
|
246
|
-
json.dump(config, f, indent=2, ensure_ascii=False)
|
|
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}")
|
|
247
414
|
|
|
248
415
|
return [str(config_path)]
|
|
249
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
|
+
|
|
250
579
|
def execute_validation_phase(
|
|
251
580
|
self,
|
|
252
581
|
project_path: Path,
|
|
@@ -255,8 +584,6 @@ class PhaseExecutor:
|
|
|
255
584
|
) -> None:
|
|
256
585
|
"""Phase 5: validation and wrap-up.
|
|
257
586
|
|
|
258
|
-
@CODE:INIT-PHASE-001 | Phase 5 verification logic
|
|
259
|
-
@REQ:VALIDATION-001 | SPEC-INIT-004: Verify required files after initialization completion
|
|
260
587
|
|
|
261
588
|
Args:
|
|
262
589
|
project_path: Project path.
|
|
@@ -264,9 +591,7 @@ class PhaseExecutor:
|
|
|
264
591
|
progress_callback: Optional progress callback.
|
|
265
592
|
"""
|
|
266
593
|
self.current_phase = 5
|
|
267
|
-
self._report_progress(
|
|
268
|
-
"Phase 5: Validation and finalization...", progress_callback
|
|
269
|
-
)
|
|
594
|
+
self._report_progress("Phase 5: Validation and finalization...", progress_callback)
|
|
270
595
|
|
|
271
596
|
# Validate installation results
|
|
272
597
|
# Comprehensive installation validation
|
|
@@ -274,9 +599,8 @@ class PhaseExecutor:
|
|
|
274
599
|
# - 0-project.md, 1-plan.md, 2-run.md, 3-sync.md
|
|
275
600
|
self.validator.validate_installation(project_path)
|
|
276
601
|
|
|
277
|
-
# Initialize Git for team
|
|
278
|
-
|
|
279
|
-
self._initialize_git(project_path)
|
|
602
|
+
# Initialize Git for all modes (team, personal, solo)
|
|
603
|
+
self._initialize_git(project_path)
|
|
280
604
|
|
|
281
605
|
def _create_backup(self, project_path: Path) -> None:
|
|
282
606
|
"""Create a single backup (v0.4.2).
|
|
@@ -294,6 +618,8 @@ class PhaseExecutor:
|
|
|
294
618
|
if backup_path.exists():
|
|
295
619
|
shutil.rmtree(backup_path)
|
|
296
620
|
|
|
621
|
+
# Create backup directories
|
|
622
|
+
backups_dir.mkdir(parents=True, exist_ok=True)
|
|
297
623
|
backup_path.mkdir(parents=True, exist_ok=True)
|
|
298
624
|
|
|
299
625
|
# Collect backup targets
|
|
@@ -339,11 +665,17 @@ class PhaseExecutor:
|
|
|
339
665
|
dst_item.mkdir(parents=True, exist_ok=True)
|
|
340
666
|
|
|
341
667
|
def _initialize_git(self, project_path: Path) -> None:
|
|
342
|
-
"""Initialize a Git repository.
|
|
668
|
+
"""Initialize a Git repository if not already initialized.
|
|
343
669
|
|
|
344
670
|
Args:
|
|
345
671
|
project_path: Project path.
|
|
346
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
|
+
|
|
347
679
|
try:
|
|
348
680
|
subprocess.run(
|
|
349
681
|
["git", "init"],
|
|
@@ -360,9 +692,7 @@ class PhaseExecutor:
|
|
|
360
692
|
# Only log on error; failures are non-fatal
|
|
361
693
|
pass
|
|
362
694
|
|
|
363
|
-
def _report_progress(
|
|
364
|
-
self, message: str, callback: ProgressCallback | None
|
|
365
|
-
) -> None:
|
|
695
|
+
def _report_progress(self, message: str, callback: ProgressCallback | None) -> None:
|
|
366
696
|
"""Report progress.
|
|
367
697
|
|
|
368
698
|
Args:
|