moai-adk 0.25.4__py3-none-any.whl → 0.32.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +2 -5
- moai_adk/__main__.py +114 -82
- moai_adk/cli/__init__.py +6 -1
- moai_adk/cli/commands/__init__.py +1 -3
- moai_adk/cli/commands/analyze.py +5 -16
- moai_adk/cli/commands/doctor.py +6 -18
- moai_adk/cli/commands/init.py +56 -125
- moai_adk/cli/commands/language.py +14 -35
- moai_adk/cli/commands/status.py +9 -15
- moai_adk/cli/commands/update.py +1555 -190
- moai_adk/cli/prompts/init_prompts.py +112 -56
- moai_adk/cli/spec_status.py +263 -0
- moai_adk/cli/ui/__init__.py +44 -0
- moai_adk/cli/ui/progress.py +422 -0
- moai_adk/cli/ui/prompts.py +389 -0
- moai_adk/cli/ui/theme.py +129 -0
- moai_adk/cli/worktree/__init__.py +27 -0
- moai_adk/cli/worktree/__main__.py +31 -0
- moai_adk/cli/worktree/cli.py +672 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +490 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +128 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/analysis/session_analyzer.py +17 -56
- moai_adk/core/claude_integration.py +26 -54
- moai_adk/core/command_helpers.py +10 -10
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/auto_spec_config.py +5 -11
- moai_adk/core/config/migration.py +19 -9
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +6 -12
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +725 -112
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +8 -0
- moai_adk/core/git/branch_manager.py +3 -11
- moai_adk/core/git/checkpoint.py +1 -3
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/manager.py +91 -1
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +56 -80
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/engine.py +6 -18
- moai_adk/core/integration/integration_tester.py +10 -9
- moai_adk/core/integration/utils.py +1 -1
- moai_adk/core/issue_creator.py +10 -28
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config_resolver.py +485 -0
- moai_adk/core/language_validator.py +28 -41
- moai_adk/core/mcp/setup.py +15 -12
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +481 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +78 -9
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +8 -17
- moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
- moai_adk/core/migration/selective_restorer.py +470 -0
- moai_adk/core/migration/template_utils.py +74 -0
- moai_adk/core/migration/user_selection_ui.py +338 -0
- moai_adk/core/migration/version_detector.py +6 -10
- moai_adk/core/migration/version_migrator.py +3 -3
- moai_adk/core/performance/cache_system.py +8 -10
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/checker.py +2 -4
- moai_adk/core/project/detector.py +1 -3
- moai_adk/core/project/initializer.py +135 -23
- moai_adk/core/project/phase_executor.py +54 -81
- moai_adk/core/project/validator.py +6 -12
- moai_adk/core/quality/trust_checker.py +9 -27
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +73 -148
- moai_adk/core/session_manager.py +10 -26
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +31 -100
- moai_adk/core/spec/ears_template_engine.py +351 -286
- moai_adk/core/spec/quality_validator.py +35 -69
- moai_adk/core/spec_status_manager.py +64 -74
- moai_adk/core/template/backup.py +45 -20
- moai_adk/core/template/config.py +112 -39
- moai_adk/core/template/merger.py +11 -19
- moai_adk/core/template/processor.py +253 -149
- moai_adk/core/template_engine.py +73 -40
- moai_adk/core/template_variable_synchronizer.py +417 -0
- moai_adk/core/unified_permission_manager.py +745 -0
- moai_adk/core/user_behavior_analytics.py +851 -0
- moai_adk/core/version_sync.py +429 -0
- moai_adk/foundation/__init__.py +56 -0
- moai_adk/foundation/backend.py +1027 -0
- moai_adk/foundation/database.py +1115 -0
- moai_adk/foundation/devops.py +1585 -0
- moai_adk/foundation/ears.py +431 -0
- moai_adk/foundation/frontend.py +870 -0
- moai_adk/foundation/git/commit_templates.py +4 -12
- moai_adk/foundation/git.py +376 -0
- moai_adk/foundation/langs.py +484 -0
- moai_adk/foundation/ml_ops.py +1162 -0
- moai_adk/foundation/testing.py +1524 -0
- moai_adk/foundation/trust/trust_principles.py +23 -72
- moai_adk/foundation/trust/validation_checklist.py +57 -162
- moai_adk/project/__init__.py +0 -0
- moai_adk/project/configuration.py +1084 -0
- moai_adk/project/documentation.py +566 -0
- moai_adk/project/schema.py +447 -0
- moai_adk/statusline/alfred_detector.py +1 -3
- moai_adk/statusline/config.py +13 -4
- moai_adk/statusline/enhanced_output_style_detector.py +23 -15
- moai_adk/statusline/main.py +51 -15
- moai_adk/statusline/renderer.py +104 -48
- moai_adk/statusline/update_checker.py +3 -9
- moai_adk/statusline/version_reader.py +140 -46
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
- moai_adk/templates/.claude/hooks/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
- moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
- moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
- moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
- moai_adk/templates/.claude/settings.json +172 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +320 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +496 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
- moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
- moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +103 -41
- moai_adk/templates/.git-hooks/pre-push +116 -21
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.gitignore +184 -44
- moai_adk/templates/.mcp.json +7 -9
- moai_adk/templates/.moai/cache/personalization.json +10 -0
- moai_adk/templates/.moai/config/config.yaml +344 -0
- moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
- moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
- moai_adk/templates/.moai/config/presets/team.yaml +33 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
- moai_adk/templates/.moai/config/sections/language.yaml +11 -0
- moai_adk/templates/.moai/config/sections/project.yaml +13 -0
- moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
- moai_adk/templates/.moai/config/sections/system.yaml +14 -0
- moai_adk/templates/.moai/config/sections/user.yaml +5 -0
- moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +382 -501
- moai_adk/utils/__init__.py +24 -1
- moai_adk/utils/banner.py +7 -10
- moai_adk/utils/common.py +16 -30
- moai_adk/utils/link_validator.py +4 -12
- moai_adk/utils/safe_file_reader.py +2 -6
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.32.8.dist-info/METADATA +2478 -0
- moai_adk-0.32.8.dist-info/RECORD +396 -0
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
- moai_adk/cli/commands/backup.py +0 -82
- moai_adk/cli/commands/improve_user_experience.py +0 -348
- moai_adk/cli/commands/migrate.py +0 -158
- moai_adk/cli/commands/validate_links.py +0 -118
- moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -413
- moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
- moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
- moai_adk/utils/user_experience.py +0 -531
- moai_adk-0.25.4.dist-info/METADATA +0 -2279
- moai_adk-0.25.4.dist-info/RECORD +0 -112
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Version Synchronization System for MoAI-ADK
|
|
3
|
+
|
|
4
|
+
Ensures version consistency across multiple configuration files and provides
|
|
5
|
+
automatic synchronization capabilities.
|
|
6
|
+
|
|
7
|
+
Key Features:
|
|
8
|
+
- Version consistency validation across pyproject.toml, __init__.py, and config.json
|
|
9
|
+
- Automatic synchronization when inconsistencies detected
|
|
10
|
+
- Cache invalidation for statusline version readers
|
|
11
|
+
- Version change detection and notification system
|
|
12
|
+
- Fallback strategies for version resolution
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import json
|
|
16
|
+
import logging
|
|
17
|
+
import re
|
|
18
|
+
from dataclasses import dataclass, field
|
|
19
|
+
from datetime import datetime
|
|
20
|
+
from enum import Enum
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
from typing import Any, Dict, List, Optional, Tuple
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class VersionSource(Enum):
|
|
28
|
+
"""Enum for version source tracking"""
|
|
29
|
+
|
|
30
|
+
PYPROJECT_TOML = "pyproject_toml"
|
|
31
|
+
CONFIG_JSON = "config_json"
|
|
32
|
+
PACKAGE_METADATA = "package_metadata"
|
|
33
|
+
FALLBACK = "fallback"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@dataclass
|
|
37
|
+
class VersionInfo:
|
|
38
|
+
"""Version information with metadata"""
|
|
39
|
+
|
|
40
|
+
version: str
|
|
41
|
+
source: VersionSource
|
|
42
|
+
file_path: Path
|
|
43
|
+
raw_content: str
|
|
44
|
+
timestamp: datetime = field(default_factory=datetime.now)
|
|
45
|
+
is_valid: bool = True
|
|
46
|
+
|
|
47
|
+
def __post_init__(self):
|
|
48
|
+
"""Validate version format after initialization"""
|
|
49
|
+
self.is_valid = self._is_valid_version(self.version)
|
|
50
|
+
|
|
51
|
+
def _is_valid_version(self, version: str) -> bool:
|
|
52
|
+
"""Check if version follows semantic versioning"""
|
|
53
|
+
pattern = r"^\d+\.\d+\.\d+(?:-[a-zA-Z0-9]+)?$"
|
|
54
|
+
return bool(re.match(pattern, version))
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class VersionSynchronizer:
|
|
58
|
+
"""
|
|
59
|
+
Version synchronization system for MoAI-ADK
|
|
60
|
+
|
|
61
|
+
Ensures version consistency across multiple files and provides
|
|
62
|
+
automatic synchronization capabilities.
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
def __init__(self, working_dir: Optional[Path] = None):
|
|
66
|
+
"""
|
|
67
|
+
Initialize version synchronizer
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
working_dir: Project directory. If None, uses current working directory
|
|
71
|
+
"""
|
|
72
|
+
if working_dir is None:
|
|
73
|
+
working_dir = Path.cwd()
|
|
74
|
+
|
|
75
|
+
self.working_dir = working_dir
|
|
76
|
+
self.pyproject_path = working_dir / "pyproject.toml"
|
|
77
|
+
self.config_path = working_dir / ".moai" / "config" / "config.json"
|
|
78
|
+
self.init_path = working_dir / "src" / "moai_adk" / "__init__.py"
|
|
79
|
+
|
|
80
|
+
# Version file paths in order of priority
|
|
81
|
+
# Note: __init__.py reads version dynamically, so we don't synchronize it
|
|
82
|
+
self.version_files = [
|
|
83
|
+
(self.pyproject_path, VersionSource.PYPROJECT_TOML),
|
|
84
|
+
(self.config_path, VersionSource.CONFIG_JSON),
|
|
85
|
+
]
|
|
86
|
+
|
|
87
|
+
# Statusline cache directories to invalidate
|
|
88
|
+
self.cache_directories = [
|
|
89
|
+
working_dir / ".moai" / "cache",
|
|
90
|
+
working_dir / ".claude" / "cache",
|
|
91
|
+
]
|
|
92
|
+
|
|
93
|
+
logger.info(f"VersionSynchronizer initialized for: {working_dir}")
|
|
94
|
+
|
|
95
|
+
def check_consistency(self) -> Tuple[bool, List[VersionInfo]]:
|
|
96
|
+
"""
|
|
97
|
+
Check version consistency across all version files
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
Tuple of (is_consistent, version_info_list)
|
|
101
|
+
"""
|
|
102
|
+
version_infos = []
|
|
103
|
+
|
|
104
|
+
for file_path, source in self.version_files:
|
|
105
|
+
try:
|
|
106
|
+
version_info = self._extract_version(file_path, source)
|
|
107
|
+
if version_info:
|
|
108
|
+
version_infos.append(version_info)
|
|
109
|
+
except Exception as e:
|
|
110
|
+
logger.warning(f"Failed to extract version from {file_path}: {e}")
|
|
111
|
+
continue
|
|
112
|
+
|
|
113
|
+
if not version_infos:
|
|
114
|
+
logger.error("No version information found in any file")
|
|
115
|
+
return False, []
|
|
116
|
+
|
|
117
|
+
# Check if all valid versions are the same
|
|
118
|
+
valid_versions = [info.version for info in version_infos if info.is_valid]
|
|
119
|
+
is_consistent = len(set(valid_versions)) <= 1
|
|
120
|
+
|
|
121
|
+
if not is_consistent:
|
|
122
|
+
logger.warning(f"Version inconsistency detected: {valid_versions}")
|
|
123
|
+
|
|
124
|
+
return is_consistent, version_infos
|
|
125
|
+
|
|
126
|
+
def get_master_version(self) -> Optional[VersionInfo]:
|
|
127
|
+
"""
|
|
128
|
+
Get master version from pyproject.toml (primary source)
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
VersionInfo from pyproject.toml or None if not found
|
|
132
|
+
"""
|
|
133
|
+
try:
|
|
134
|
+
version_info = self._extract_version(self.pyproject_path, VersionSource.PYPROJECT_TOML)
|
|
135
|
+
if version_info and version_info.is_valid:
|
|
136
|
+
logger.info(f"Master version from pyproject.toml: {version_info.version}")
|
|
137
|
+
return version_info
|
|
138
|
+
except Exception as e:
|
|
139
|
+
logger.error(f"Failed to get master version from pyproject.toml: {e}")
|
|
140
|
+
|
|
141
|
+
return None
|
|
142
|
+
|
|
143
|
+
def synchronize_all(self, target_version: Optional[str] = None, dry_run: bool = False) -> bool:
|
|
144
|
+
"""
|
|
145
|
+
Synchronize all version files to match master version
|
|
146
|
+
|
|
147
|
+
Args:
|
|
148
|
+
target_version: Target version to synchronize to. If None, uses pyproject.toml version
|
|
149
|
+
dry_run: If True, only shows what would be changed without making changes
|
|
150
|
+
|
|
151
|
+
Returns:
|
|
152
|
+
True if synchronization successful
|
|
153
|
+
"""
|
|
154
|
+
if target_version is None:
|
|
155
|
+
master_info = self.get_master_version()
|
|
156
|
+
if not master_info:
|
|
157
|
+
logger.error("No master version found for synchronization")
|
|
158
|
+
return False
|
|
159
|
+
target_version = master_info.version
|
|
160
|
+
|
|
161
|
+
logger.info(f"Synchronizing all files to version: {target_version}")
|
|
162
|
+
|
|
163
|
+
sync_results = []
|
|
164
|
+
|
|
165
|
+
for file_path, source in self.version_files:
|
|
166
|
+
if source == VersionSource.PYPROJECT_TOML:
|
|
167
|
+
continue # Skip pyproject.toml as it's the source
|
|
168
|
+
|
|
169
|
+
try:
|
|
170
|
+
success = self._synchronize_file(file_path, source, target_version, dry_run)
|
|
171
|
+
sync_results.append((file_path, success))
|
|
172
|
+
|
|
173
|
+
if not dry_run and success:
|
|
174
|
+
logger.info(f"Synchronized {file_path} to version {target_version}")
|
|
175
|
+
elif dry_run:
|
|
176
|
+
logger.info(f"[DRY RUN] Would synchronize {file_path} to version {target_version}")
|
|
177
|
+
|
|
178
|
+
except Exception as e:
|
|
179
|
+
logger.error(f"Failed to synchronize {file_path}: {e}")
|
|
180
|
+
sync_results.append((file_path, False))
|
|
181
|
+
|
|
182
|
+
# Clear caches after successful synchronization
|
|
183
|
+
if not dry_run and all(success for _, success in sync_results):
|
|
184
|
+
self._clear_caches()
|
|
185
|
+
logger.info("All version files synchronized successfully")
|
|
186
|
+
return True
|
|
187
|
+
|
|
188
|
+
logger.error("Some files failed to synchronize")
|
|
189
|
+
return False
|
|
190
|
+
|
|
191
|
+
def _extract_version(self, file_path: Path, source: VersionSource) -> Optional[VersionInfo]:
|
|
192
|
+
"""Extract version from specific file based on source type"""
|
|
193
|
+
if not file_path.exists():
|
|
194
|
+
logger.debug(f"File not found: {file_path}")
|
|
195
|
+
return None
|
|
196
|
+
|
|
197
|
+
try:
|
|
198
|
+
with open(file_path, "r", encoding="utf-8") as f:
|
|
199
|
+
content = f.read()
|
|
200
|
+
|
|
201
|
+
if source == VersionSource.PYPROJECT_TOML:
|
|
202
|
+
version = self._extract_from_pyproject(content)
|
|
203
|
+
elif source == VersionSource.CONFIG_JSON:
|
|
204
|
+
version = self._extract_from_config(content)
|
|
205
|
+
elif source == VersionSource.PACKAGE_METADATA:
|
|
206
|
+
version = self._extract_from_init(content)
|
|
207
|
+
else:
|
|
208
|
+
return None
|
|
209
|
+
|
|
210
|
+
if version:
|
|
211
|
+
return VersionInfo(
|
|
212
|
+
version=version,
|
|
213
|
+
source=source,
|
|
214
|
+
file_path=file_path,
|
|
215
|
+
raw_content=content,
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
except Exception as e:
|
|
219
|
+
logger.error(f"Error reading {file_path}: {e}")
|
|
220
|
+
|
|
221
|
+
return None
|
|
222
|
+
|
|
223
|
+
def _extract_from_pyproject(self, content: str) -> Optional[str]:
|
|
224
|
+
"""Extract version from pyproject.toml"""
|
|
225
|
+
pattern = r'^version\s*=\s*["\']([^"\']+)["\']'
|
|
226
|
+
match = re.search(pattern, content, re.MULTILINE)
|
|
227
|
+
return match.group(1) if match else None
|
|
228
|
+
|
|
229
|
+
def _extract_from_config(self, content: str) -> Optional[str]:
|
|
230
|
+
"""Extract version from .moai/config/config.json"""
|
|
231
|
+
try:
|
|
232
|
+
config_data = json.loads(content)
|
|
233
|
+
moai_config = config_data.get("moai", {})
|
|
234
|
+
return moai_config.get("version")
|
|
235
|
+
except json.JSONDecodeError:
|
|
236
|
+
logger.error("Invalid JSON in config.json")
|
|
237
|
+
return None
|
|
238
|
+
|
|
239
|
+
def _extract_from_init(self, content: str) -> Optional[str]:
|
|
240
|
+
"""Extract version from __init__.py"""
|
|
241
|
+
pattern = r'__version__\s*=\s*["\']([^"\']+)["\']'
|
|
242
|
+
match = re.search(pattern, content)
|
|
243
|
+
return match.group(1) if match else None
|
|
244
|
+
|
|
245
|
+
def _synchronize_file(self, file_path: Path, source: VersionSource, target_version: str, dry_run: bool) -> bool:
|
|
246
|
+
"""Synchronize specific file to target version"""
|
|
247
|
+
current_info = self._extract_version(file_path, source)
|
|
248
|
+
if not current_info:
|
|
249
|
+
logger.warning(f"No current version found in {file_path}")
|
|
250
|
+
return True # Nothing to synchronize
|
|
251
|
+
|
|
252
|
+
if current_info.version == target_version:
|
|
253
|
+
logger.debug(f"Version already synchronized in {file_path}")
|
|
254
|
+
return True
|
|
255
|
+
|
|
256
|
+
if dry_run:
|
|
257
|
+
return True
|
|
258
|
+
|
|
259
|
+
try:
|
|
260
|
+
new_content = self._update_version_in_content(current_info.raw_content, source, target_version)
|
|
261
|
+
|
|
262
|
+
with open(file_path, "w", encoding="utf-8") as f:
|
|
263
|
+
f.write(new_content)
|
|
264
|
+
|
|
265
|
+
return True
|
|
266
|
+
|
|
267
|
+
except Exception as e:
|
|
268
|
+
logger.error(f"Failed to update {file_path}: {e}")
|
|
269
|
+
return False
|
|
270
|
+
|
|
271
|
+
def _update_version_in_content(self, content: str, source: VersionSource, target_version: str) -> str:
|
|
272
|
+
"""Update version in content based on source type"""
|
|
273
|
+
if source == VersionSource.CONFIG_JSON:
|
|
274
|
+
# Update moai.version in JSON
|
|
275
|
+
try:
|
|
276
|
+
config_data = json.loads(content)
|
|
277
|
+
if "moai" not in config_data:
|
|
278
|
+
config_data["moai"] = {}
|
|
279
|
+
config_data["moai"]["version"] = target_version
|
|
280
|
+
return json.dumps(config_data, indent=2)
|
|
281
|
+
except json.JSONDecodeError:
|
|
282
|
+
# Fallback: regex replacement
|
|
283
|
+
pattern = r'("moai"\s*:\s*\{[^}]*"version"\s*:\s*")[^"\']+(")'
|
|
284
|
+
return re.sub(pattern, f"\\1{target_version}\\2", content, flags=re.DOTALL)
|
|
285
|
+
|
|
286
|
+
elif source == VersionSource.PACKAGE_METADATA:
|
|
287
|
+
# Update __version__ in Python (fallback version)
|
|
288
|
+
pattern = r'(__version__\s*=\s*["\'])([^"\']+)(["\'])'
|
|
289
|
+
return re.sub(pattern, f"\\1{target_version}\\3", content)
|
|
290
|
+
|
|
291
|
+
return content
|
|
292
|
+
|
|
293
|
+
def _clear_caches(self) -> None:
|
|
294
|
+
"""Clear all relevant caches"""
|
|
295
|
+
cleared_count = 0
|
|
296
|
+
|
|
297
|
+
for cache_dir in self.cache_directories:
|
|
298
|
+
if cache_dir.exists():
|
|
299
|
+
try:
|
|
300
|
+
import shutil
|
|
301
|
+
|
|
302
|
+
cache_size = sum(1 for _ in cache_dir.rglob("*") if _.is_file())
|
|
303
|
+
shutil.rmtree(cache_dir)
|
|
304
|
+
cache_dir.mkdir(exist_ok=True)
|
|
305
|
+
cleared_count += cache_size
|
|
306
|
+
logger.info(f"Cleared cache directory: {cache_dir} ({cache_size} files)")
|
|
307
|
+
except Exception as e:
|
|
308
|
+
logger.warning(f"Failed to clear cache directory {cache_dir}: {e}")
|
|
309
|
+
|
|
310
|
+
# Clear version reader cache if available
|
|
311
|
+
try:
|
|
312
|
+
from ..statusline.version_reader import VersionReader
|
|
313
|
+
|
|
314
|
+
reader = VersionReader(working_dir=self.working_dir)
|
|
315
|
+
reader.clear_cache()
|
|
316
|
+
logger.info("Cleared VersionReader cache")
|
|
317
|
+
cleared_count += 1
|
|
318
|
+
except ImportError:
|
|
319
|
+
pass
|
|
320
|
+
except Exception as e:
|
|
321
|
+
logger.warning(f"Failed to clear VersionReader cache: {e}")
|
|
322
|
+
|
|
323
|
+
logger.info(f"Cache clearing completed: {cleared_count} cache entries cleared")
|
|
324
|
+
|
|
325
|
+
def validate_version_format(self, version: str) -> Tuple[bool, Optional[str]]:
|
|
326
|
+
"""
|
|
327
|
+
Validate version format and return normalized version
|
|
328
|
+
|
|
329
|
+
Args:
|
|
330
|
+
version: Version string to validate
|
|
331
|
+
|
|
332
|
+
Returns:
|
|
333
|
+
Tuple of (is_valid, normalized_version)
|
|
334
|
+
"""
|
|
335
|
+
if not version:
|
|
336
|
+
return False, None
|
|
337
|
+
|
|
338
|
+
# Remove 'v' prefix if present
|
|
339
|
+
normalized = version[1:] if version.startswith("v") else version
|
|
340
|
+
|
|
341
|
+
# Validate semantic versioning
|
|
342
|
+
pattern = r"^(\d+)\.(\d+)\.(\d+)(?:[-.]([a-zA-Z0-9]+))?$"
|
|
343
|
+
match = re.match(pattern, normalized)
|
|
344
|
+
|
|
345
|
+
if match:
|
|
346
|
+
return True, normalized
|
|
347
|
+
|
|
348
|
+
return False, None
|
|
349
|
+
|
|
350
|
+
def get_version_report(self) -> Dict[str, Any]:
|
|
351
|
+
"""
|
|
352
|
+
Generate comprehensive version report
|
|
353
|
+
|
|
354
|
+
Returns:
|
|
355
|
+
Dictionary containing version information and status
|
|
356
|
+
"""
|
|
357
|
+
is_consistent, version_infos = self.check_consistency()
|
|
358
|
+
|
|
359
|
+
report: Dict[str, Any] = {
|
|
360
|
+
"timestamp": datetime.now().isoformat(),
|
|
361
|
+
"working_directory": str(self.working_dir),
|
|
362
|
+
"is_consistent": is_consistent,
|
|
363
|
+
"version_count": len(version_infos),
|
|
364
|
+
"versions": [],
|
|
365
|
+
"issues": [],
|
|
366
|
+
"recommendations": [],
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
# Add version information
|
|
370
|
+
versions_list: List[Dict[str, Any]] = report["versions"] # type: ignore[assignment]
|
|
371
|
+
for info in version_infos:
|
|
372
|
+
versions_list.append(
|
|
373
|
+
{
|
|
374
|
+
"version": info.version,
|
|
375
|
+
"source": info.source.value,
|
|
376
|
+
"file": str(info.file_path),
|
|
377
|
+
"is_valid": info.is_valid,
|
|
378
|
+
"last_modified": info.timestamp.isoformat(),
|
|
379
|
+
}
|
|
380
|
+
)
|
|
381
|
+
|
|
382
|
+
# Add issues and recommendations
|
|
383
|
+
issues_list: List[str] = report["issues"] # type: ignore[assignment]
|
|
384
|
+
recommendations_list: List[str] = report["recommendations"] # type: ignore[assignment]
|
|
385
|
+
|
|
386
|
+
if not version_infos:
|
|
387
|
+
issues_list.append("No version information found in any file")
|
|
388
|
+
recommendations_list.append("Initialize version in pyproject.toml")
|
|
389
|
+
|
|
390
|
+
if not is_consistent:
|
|
391
|
+
issues_list.append("Version inconsistency detected across files")
|
|
392
|
+
recommendations_list.append("Run synchronize_all() to fix inconsistencies")
|
|
393
|
+
|
|
394
|
+
invalid_versions = [info for info in version_infos if not info.is_valid]
|
|
395
|
+
if invalid_versions:
|
|
396
|
+
issues_list.append(f"Invalid version format in {len(invalid_versions)} files")
|
|
397
|
+
recommendations_list.append("Fix version format to follow semantic versioning")
|
|
398
|
+
|
|
399
|
+
return report
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
# Convenience functions for common operations
|
|
403
|
+
def check_project_versions(working_dir: Optional[Path] = None) -> Dict[str, Any]:
|
|
404
|
+
"""
|
|
405
|
+
Check version consistency for the project
|
|
406
|
+
|
|
407
|
+
Args:
|
|
408
|
+
working_dir: Project directory (defaults to current directory)
|
|
409
|
+
|
|
410
|
+
Returns:
|
|
411
|
+
Version report dictionary
|
|
412
|
+
"""
|
|
413
|
+
synchronizer = VersionSynchronizer(working_dir)
|
|
414
|
+
return synchronizer.get_version_report()
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
def synchronize_project_versions(working_dir: Optional[Path] = None, dry_run: bool = False) -> bool:
|
|
418
|
+
"""
|
|
419
|
+
Synchronize all version files in the project
|
|
420
|
+
|
|
421
|
+
Args:
|
|
422
|
+
working_dir: Project directory (defaults to current directory)
|
|
423
|
+
dry_run: If True, only show what would be changed
|
|
424
|
+
|
|
425
|
+
Returns:
|
|
426
|
+
True if synchronization successful
|
|
427
|
+
"""
|
|
428
|
+
synchronizer = VersionSynchronizer(working_dir)
|
|
429
|
+
return synchronizer.synchronize_all(dry_run=dry_run)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""
|
|
2
|
+
MoAI Foundation module - Core foundation-level implementations.
|
|
3
|
+
Includes: EARS methodology, programming language ecosystem, Git workflows.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from .ears import EARSAnalyzer, EARSParser, EARSValidator
|
|
7
|
+
from .git import (
|
|
8
|
+
BranchingStrategySelector,
|
|
9
|
+
ConventionalCommitValidator,
|
|
10
|
+
GitInfo,
|
|
11
|
+
GitPerformanceOptimizer,
|
|
12
|
+
GitVersionDetector,
|
|
13
|
+
GitWorkflowManager,
|
|
14
|
+
TDDCommitPhase,
|
|
15
|
+
ValidateResult,
|
|
16
|
+
)
|
|
17
|
+
from .langs import (
|
|
18
|
+
AntiPatternDetector,
|
|
19
|
+
EcosystemAnalyzer,
|
|
20
|
+
FrameworkRecommender,
|
|
21
|
+
LanguageInfo,
|
|
22
|
+
LanguageVersionManager,
|
|
23
|
+
Pattern,
|
|
24
|
+
PatternAnalyzer,
|
|
25
|
+
PerformanceOptimizer,
|
|
26
|
+
TestingStrategy,
|
|
27
|
+
TestingStrategyAdvisor,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
__all__ = [
|
|
31
|
+
# EARS
|
|
32
|
+
"EARSParser",
|
|
33
|
+
"EARSValidator",
|
|
34
|
+
"EARSAnalyzer",
|
|
35
|
+
# Language Ecosystem
|
|
36
|
+
"LanguageVersionManager",
|
|
37
|
+
"FrameworkRecommender",
|
|
38
|
+
"PatternAnalyzer",
|
|
39
|
+
"AntiPatternDetector",
|
|
40
|
+
"EcosystemAnalyzer",
|
|
41
|
+
"PerformanceOptimizer",
|
|
42
|
+
"TestingStrategyAdvisor",
|
|
43
|
+
# Git Workflow
|
|
44
|
+
"GitVersionDetector",
|
|
45
|
+
"ConventionalCommitValidator",
|
|
46
|
+
"BranchingStrategySelector",
|
|
47
|
+
"GitWorkflowManager",
|
|
48
|
+
"GitPerformanceOptimizer",
|
|
49
|
+
# Data structures
|
|
50
|
+
"LanguageInfo",
|
|
51
|
+
"Pattern",
|
|
52
|
+
"TestingStrategy",
|
|
53
|
+
"GitInfo",
|
|
54
|
+
"ValidateResult",
|
|
55
|
+
"TDDCommitPhase",
|
|
56
|
+
]
|