moai-adk 0.35.1__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 +10 -0
- moai_adk/__main__.py +199 -0
- moai_adk/cli/__init__.py +6 -0
- moai_adk/cli/commands/__init__.py +17 -0
- moai_adk/cli/commands/analyze.py +116 -0
- moai_adk/cli/commands/doctor.py +272 -0
- moai_adk/cli/commands/init.py +372 -0
- moai_adk/cli/commands/language.py +248 -0
- moai_adk/cli/commands/status.py +104 -0
- moai_adk/cli/commands/update.py +2686 -0
- moai_adk/cli/main.py +13 -0
- moai_adk/cli/prompts/__init__.py +5 -0
- moai_adk/cli/prompts/init_prompts.py +219 -0
- moai_adk/cli/spec_status.py +263 -0
- moai_adk/cli/ui/__init__.py +44 -0
- moai_adk/cli/ui/progress.py +422 -0
- moai_adk/cli/ui/prompts.py +389 -0
- moai_adk/cli/ui/theme.py +129 -0
- moai_adk/cli/worktree/__init__.py +27 -0
- moai_adk/cli/worktree/__main__.py +31 -0
- moai_adk/cli/worktree/cli.py +683 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +493 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +422 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/__init__.py +1 -0
- 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 +19 -0
- moai_adk/core/config/auto_spec_config.py +340 -0
- moai_adk/core/config/migration.py +244 -0
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +273 -0
- moai_adk/core/diagnostics/__init__.py +19 -0
- moai_adk/core/diagnostics/slash_commands.py +159 -0
- 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 +31 -0
- moai_adk/core/git/branch.py +25 -0
- moai_adk/core/git/branch_manager.py +129 -0
- moai_adk/core/git/checkpoint.py +134 -0
- moai_adk/core/git/commit.py +67 -0
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/event_detector.py +79 -0
- moai_adk/core/git/manager.py +216 -0
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +157 -0
- moai_adk/core/integration/integration_tester.py +226 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +305 -0
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_config_resolver.py +572 -0
- moai_adk/core/language_validator.py +543 -0
- moai_adk/core/mcp/setup.py +116 -0
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +605 -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 +1 -0
- moai_adk/core/project/backup_utils.py +70 -0
- moai_adk/core/project/checker.py +300 -0
- moai_adk/core/project/detector.py +293 -0
- moai_adk/core/project/initializer.py +387 -0
- moai_adk/core/project/phase_executor.py +716 -0
- moai_adk/core/project/validator.py +139 -0
- moai_adk/core/quality/__init__.py +6 -0
- moai_adk/core/quality/trust_checker.py +377 -0
- moai_adk/core/quality/validators/__init__.py +6 -0
- moai_adk/core/quality/validators/base_validator.py +19 -0
- 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 +7 -0
- moai_adk/core/template/backup.py +174 -0
- moai_adk/core/template/config.py +191 -0
- moai_adk/core/template/languages.py +43 -0
- moai_adk/core/template/merger.py +233 -0
- moai_adk/core/template/processor.py +1200 -0
- moai_adk/core/template_engine.py +310 -0
- moai_adk/core/template_variable_synchronizer.py +417 -0
- moai_adk/core/unified_permission_manager.py +745 -0
- moai_adk/core/user_behavior_analytics.py +851 -0
- moai_adk/core/version_sync.py +429 -0
- moai_adk/foundation/__init__.py +56 -0
- moai_adk/foundation/backend.py +1027 -0
- moai_adk/foundation/database.py +1115 -0
- moai_adk/foundation/devops.py +1585 -0
- moai_adk/foundation/ears.py +431 -0
- moai_adk/foundation/frontend.py +870 -0
- moai_adk/foundation/git/commit_templates.py +557 -0
- moai_adk/foundation/git.py +376 -0
- moai_adk/foundation/langs.py +484 -0
- moai_adk/foundation/ml_ops.py +1162 -0
- moai_adk/foundation/testing.py +1524 -0
- moai_adk/foundation/trust/trust_principles.py +676 -0
- moai_adk/foundation/trust/validation_checklist.py +1573 -0
- moai_adk/project/__init__.py +0 -0
- moai_adk/project/configuration.py +1084 -0
- moai_adk/project/documentation.py +566 -0
- moai_adk/project/schema.py +447 -0
- moai_adk/statusline/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +105 -0
- moai_adk/statusline/config.py +376 -0
- moai_adk/statusline/enhanced_output_style_detector.py +372 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +322 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +343 -0
- moai_adk/statusline/update_checker.py +129 -0
- moai_adk/statusline/version_reader.py +741 -0
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
- moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
- moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
- moai_adk/templates/.claude/hooks/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
- moai_adk/templates/.claude/hooks/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 +1083 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
- moai_adk/templates/.claude/settings.json +172 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -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-database/reference.md +545 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
- moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
- moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +649 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +376 -0
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
- moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
- moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +128 -0
- moai_adk/templates/.git-hooks/pre-push +365 -0
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
- moai_adk/templates/.gitignore +222 -0
- moai_adk/templates/.mcp.json +13 -0
- moai_adk/templates/.moai/config/config.yaml +58 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
- moai_adk/templates/.moai/config/sections/language.yaml +11 -0
- moai_adk/templates/.moai/config/sections/project.yaml +13 -0
- moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
- moai_adk/templates/.moai/config/sections/system.yaml +24 -0
- moai_adk/templates/.moai/config/sections/user.yaml +5 -0
- moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +642 -0
- moai_adk/utils/__init__.py +30 -0
- moai_adk/utils/banner.py +38 -0
- moai_adk/utils/common.py +294 -0
- moai_adk/utils/link_validator.py +241 -0
- moai_adk/utils/logger.py +147 -0
- moai_adk/utils/safe_file_reader.py +206 -0
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.35.1.dist-info/METADATA +3018 -0
- moai_adk-0.35.1.dist-info/RECORD +502 -0
- moai_adk-0.35.1.dist-info/WHEEL +4 -0
- moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
- moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
"""
|
|
2
|
+
MoAI Menu Project - Unified Configuration Manager
|
|
3
|
+
|
|
4
|
+
This module provides centralized configuration management for all menu project
|
|
5
|
+
components, replacing individual configuration managers from 5 separate skills.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
import logging
|
|
10
|
+
import shutil
|
|
11
|
+
from dataclasses import dataclass
|
|
12
|
+
from datetime import UTC, datetime
|
|
13
|
+
from functools import lru_cache
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
from typing import Any, Dict, List, Optional, Union
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
import yaml
|
|
19
|
+
|
|
20
|
+
HAS_YAML = True
|
|
21
|
+
except ImportError:
|
|
22
|
+
HAS_YAML = False
|
|
23
|
+
|
|
24
|
+
try:
|
|
25
|
+
import jsonschema
|
|
26
|
+
|
|
27
|
+
HAS_JSONSCHEMA = True
|
|
28
|
+
except ImportError:
|
|
29
|
+
HAS_JSONSCHEMA = False
|
|
30
|
+
|
|
31
|
+
# Setup logging
|
|
32
|
+
logging.basicConfig(level=logging.INFO)
|
|
33
|
+
logger = logging.getLogger(__name__)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@dataclass
|
|
37
|
+
class ConfigMetadata:
|
|
38
|
+
"""Configuration metadata tracking."""
|
|
39
|
+
|
|
40
|
+
created_at: str
|
|
41
|
+
updated_at: str
|
|
42
|
+
migration_history: List[Dict[str, Any]]
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def create_new(cls) -> "ConfigMetadata":
|
|
46
|
+
"""Create new metadata with current timestamp."""
|
|
47
|
+
now = datetime.now(UTC).isoformat() + "Z"
|
|
48
|
+
return cls(created_at=now, updated_at=now, migration_history=[])
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class ValidationError(Exception):
|
|
52
|
+
"""Configuration validation error."""
|
|
53
|
+
|
|
54
|
+
pass
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class MigrationError(Exception):
|
|
58
|
+
"""Configuration migration error."""
|
|
59
|
+
|
|
60
|
+
pass
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class UnifiedConfigManager:
|
|
64
|
+
"""
|
|
65
|
+
Centralized configuration manager for menu project system.
|
|
66
|
+
|
|
67
|
+
Features:
|
|
68
|
+
- Single source of truth for all configuration
|
|
69
|
+
- JSON Schema validation
|
|
70
|
+
- Automatic migration support
|
|
71
|
+
- Caching for performance
|
|
72
|
+
- Backup and recovery
|
|
73
|
+
- Environment-specific overrides
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
def __init__(
|
|
77
|
+
self,
|
|
78
|
+
config_path: Union[str, Path],
|
|
79
|
+
schema_path: Optional[Union[str, Path]] = None,
|
|
80
|
+
):
|
|
81
|
+
"""
|
|
82
|
+
Initialize configuration manager.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
config_path: Path to configuration file
|
|
86
|
+
schema_path: Path to JSON schema file (optional)
|
|
87
|
+
"""
|
|
88
|
+
self.config_path = Path(config_path)
|
|
89
|
+
self.schema_path = Path(schema_path) if schema_path else None
|
|
90
|
+
self.config_dir = self.config_path.parent
|
|
91
|
+
self.backup_dir = self.config_dir / "backups"
|
|
92
|
+
|
|
93
|
+
# Ensure directories exist
|
|
94
|
+
self.config_dir.mkdir(parents=True, exist_ok=True)
|
|
95
|
+
self.backup_dir.mkdir(parents=True, exist_ok=True)
|
|
96
|
+
|
|
97
|
+
# Initialize cache
|
|
98
|
+
self._config_cache: Optional[Dict[str, Any]] = None
|
|
99
|
+
self._schema_cache: Optional[Dict[str, Any]] = None
|
|
100
|
+
self._last_modified: Optional[float] = None
|
|
101
|
+
|
|
102
|
+
# Load schema if available
|
|
103
|
+
if self.schema_path and self.schema_path.exists():
|
|
104
|
+
self._load_schema()
|
|
105
|
+
|
|
106
|
+
def _load_schema(self) -> None:
|
|
107
|
+
"""Load JSON schema for validation."""
|
|
108
|
+
if not HAS_JSONSCHEMA:
|
|
109
|
+
logger.warning("jsonschema not available, skipping validation")
|
|
110
|
+
return
|
|
111
|
+
|
|
112
|
+
try:
|
|
113
|
+
with open(self.schema_path, "r", encoding="utf-8") as f:
|
|
114
|
+
self._schema_cache = json.load(f)
|
|
115
|
+
logger.info(f"Schema loaded from {self.schema_path}")
|
|
116
|
+
except Exception as e:
|
|
117
|
+
logger.error(f"Failed to load schema: {e}")
|
|
118
|
+
raise
|
|
119
|
+
|
|
120
|
+
def _get_file_mtime(self) -> float:
|
|
121
|
+
"""Get file modification time."""
|
|
122
|
+
return self.config_path.stat().st_mtime if self.config_path.exists() else 0
|
|
123
|
+
|
|
124
|
+
def _is_cache_valid(self) -> bool:
|
|
125
|
+
"""Check if cache is still valid."""
|
|
126
|
+
if self._config_cache is None:
|
|
127
|
+
return False
|
|
128
|
+
return self._last_modified == self._get_file_mtime()
|
|
129
|
+
|
|
130
|
+
def _invalidate_cache(self) -> None:
|
|
131
|
+
"""Invalidate configuration cache."""
|
|
132
|
+
self._config_cache = None
|
|
133
|
+
self._last_modified = None
|
|
134
|
+
|
|
135
|
+
def load_config(self, force_reload: bool = False) -> Dict[str, Any]:
|
|
136
|
+
"""
|
|
137
|
+
Load configuration from file with caching.
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
force_reload: Force reload even if cache is valid
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
Configuration dictionary
|
|
144
|
+
"""
|
|
145
|
+
if not force_reload and self._is_cache_valid():
|
|
146
|
+
return self._config_cache
|
|
147
|
+
|
|
148
|
+
if not self.config_path.exists():
|
|
149
|
+
# Create default configuration
|
|
150
|
+
config = self._create_default_config()
|
|
151
|
+
self.save_config(config)
|
|
152
|
+
return config
|
|
153
|
+
|
|
154
|
+
try:
|
|
155
|
+
with open(self.config_path, "r", encoding="utf-8") as f:
|
|
156
|
+
if self.config_path.suffix.lower() in [".yml", ".yaml"]:
|
|
157
|
+
if not HAS_YAML:
|
|
158
|
+
raise ImportError("PyYAML is required for YAML configuration files")
|
|
159
|
+
config = yaml.safe_load(f)
|
|
160
|
+
else:
|
|
161
|
+
config = json.load(f)
|
|
162
|
+
|
|
163
|
+
# Validate against schema if available
|
|
164
|
+
if self._schema_cache:
|
|
165
|
+
self._validate_config(config)
|
|
166
|
+
|
|
167
|
+
# Update cache
|
|
168
|
+
self._config_cache = config
|
|
169
|
+
self._last_modified = self._get_file_mtime()
|
|
170
|
+
|
|
171
|
+
logger.info(f"Configuration loaded from {self.config_path}")
|
|
172
|
+
return config
|
|
173
|
+
|
|
174
|
+
except Exception as e:
|
|
175
|
+
logger.error(f"Failed to load configuration: {e}")
|
|
176
|
+
raise
|
|
177
|
+
|
|
178
|
+
def save_config(self, config: Dict[str, Any], create_backup: bool = True) -> None:
|
|
179
|
+
"""
|
|
180
|
+
Save configuration to file.
|
|
181
|
+
|
|
182
|
+
Args:
|
|
183
|
+
config: Configuration dictionary to save
|
|
184
|
+
create_backup: Whether to create backup before saving
|
|
185
|
+
"""
|
|
186
|
+
# Validate before saving
|
|
187
|
+
if self._schema_cache:
|
|
188
|
+
self._validate_config(config)
|
|
189
|
+
|
|
190
|
+
# Update metadata
|
|
191
|
+
self._update_metadata(config)
|
|
192
|
+
|
|
193
|
+
# Create backup if requested
|
|
194
|
+
if create_backup and self.config_path.exists():
|
|
195
|
+
self._create_backup()
|
|
196
|
+
|
|
197
|
+
# Ensure config has version
|
|
198
|
+
if "version" not in config:
|
|
199
|
+
config["version"] = "1.0.0"
|
|
200
|
+
|
|
201
|
+
try:
|
|
202
|
+
# Save with atomic write
|
|
203
|
+
temp_path = self.config_path.with_suffix(".tmp")
|
|
204
|
+
with open(temp_path, "w", encoding="utf-8") as f:
|
|
205
|
+
json.dump(config, f, indent=2, ensure_ascii=False)
|
|
206
|
+
|
|
207
|
+
# Atomic replace
|
|
208
|
+
temp_path.replace(self.config_path)
|
|
209
|
+
|
|
210
|
+
# Update cache
|
|
211
|
+
self._config_cache = config
|
|
212
|
+
self._last_modified = self._get_file_mtime()
|
|
213
|
+
|
|
214
|
+
logger.info(f"Configuration saved to {self.config_path}")
|
|
215
|
+
|
|
216
|
+
except Exception as e:
|
|
217
|
+
logger.error(f"Failed to save configuration: {e}")
|
|
218
|
+
raise
|
|
219
|
+
|
|
220
|
+
def _validate_config(self, config: Dict[str, Any]) -> None:
|
|
221
|
+
"""Validate configuration against schema."""
|
|
222
|
+
if not HAS_JSONSCHEMA or not self._schema_cache:
|
|
223
|
+
return
|
|
224
|
+
|
|
225
|
+
try:
|
|
226
|
+
jsonschema.validate(config, self._schema_cache)
|
|
227
|
+
except jsonschema.ValidationError as e:
|
|
228
|
+
raise ValidationError(f"Configuration validation failed: {e.message}")
|
|
229
|
+
|
|
230
|
+
def _create_default_config(self) -> Dict[str, Any]:
|
|
231
|
+
"""Create default configuration."""
|
|
232
|
+
now = datetime.now(UTC).isoformat() + "Z"
|
|
233
|
+
|
|
234
|
+
return {
|
|
235
|
+
"version": "1.0.0",
|
|
236
|
+
"metadata": {"created_at": now, "updated_at": now, "migration_history": []},
|
|
237
|
+
"project_settings": {
|
|
238
|
+
"name": "MoAI Menu Project",
|
|
239
|
+
"type": "web",
|
|
240
|
+
"description": "Menu project management system",
|
|
241
|
+
"author": "MoAI Team",
|
|
242
|
+
"license": "MIT",
|
|
243
|
+
},
|
|
244
|
+
"batch_questions": {
|
|
245
|
+
"enabled": True,
|
|
246
|
+
"max_questions": 50,
|
|
247
|
+
"timeout_seconds": 300,
|
|
248
|
+
"retry_attempts": 3,
|
|
249
|
+
"output_format": "json",
|
|
250
|
+
"caching": {"enabled": True, "ttl_hours": 24, "max_cache_size_mb": 100},
|
|
251
|
+
},
|
|
252
|
+
"documentation": {
|
|
253
|
+
"auto_generate": True,
|
|
254
|
+
"format": "markdown",
|
|
255
|
+
"include_api_docs": True,
|
|
256
|
+
"include_examples": True,
|
|
257
|
+
"template_engine": "jinja2",
|
|
258
|
+
"output_directory": "docs",
|
|
259
|
+
},
|
|
260
|
+
"language_config": {
|
|
261
|
+
"default_language": "en",
|
|
262
|
+
"supported_languages": ["en", "ko", "ja", "zh"],
|
|
263
|
+
"auto_detect": True,
|
|
264
|
+
"fallback_language": "en",
|
|
265
|
+
"translation_service": {"provider": "local", "cache_enabled": True},
|
|
266
|
+
},
|
|
267
|
+
"template_optimizer": {
|
|
268
|
+
"enabled": True,
|
|
269
|
+
"optimization_level": "basic",
|
|
270
|
+
"minification": False,
|
|
271
|
+
"caching": {"enabled": True, "strategy": "memory", "ttl_minutes": 60},
|
|
272
|
+
"validation": {
|
|
273
|
+
"strict_mode": False,
|
|
274
|
+
"check_syntax": True,
|
|
275
|
+
"check_security": True,
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
"project_initializer": {
|
|
279
|
+
"auto_dependencies": True,
|
|
280
|
+
"git_init": True,
|
|
281
|
+
"create_virtual_env": True,
|
|
282
|
+
"package_managers": {"python": {"enabled": True, "tool": "pip"}},
|
|
283
|
+
},
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
def _update_metadata(self, config: Dict[str, Any]) -> None:
|
|
287
|
+
"""Update configuration metadata."""
|
|
288
|
+
if "metadata" not in config:
|
|
289
|
+
config["metadata"] = ConfigMetadata.create_new().__dict__
|
|
290
|
+
|
|
291
|
+
config["metadata"]["updated_at"] = datetime.now(UTC).isoformat() + "Z"
|
|
292
|
+
|
|
293
|
+
def _create_backup(self) -> None:
|
|
294
|
+
"""Create backup of current configuration."""
|
|
295
|
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
296
|
+
backup_name = f"config_backup_{timestamp}.json"
|
|
297
|
+
backup_path = self.backup_dir / backup_name
|
|
298
|
+
|
|
299
|
+
try:
|
|
300
|
+
shutil.copy2(self.config_path, backup_path)
|
|
301
|
+
logger.info(f"Configuration backed up to {backup_path}")
|
|
302
|
+
except Exception as e:
|
|
303
|
+
logger.warning(f"Failed to create backup: {e}")
|
|
304
|
+
|
|
305
|
+
def get_module_config(self, module_name: str) -> Dict[str, Any]:
|
|
306
|
+
"""
|
|
307
|
+
Get configuration for specific module.
|
|
308
|
+
|
|
309
|
+
Args:
|
|
310
|
+
module_name: Name of module (e.g., 'batch_questions', 'documentation')
|
|
311
|
+
|
|
312
|
+
Returns:
|
|
313
|
+
Module configuration dictionary
|
|
314
|
+
"""
|
|
315
|
+
config = self.load_config()
|
|
316
|
+
|
|
317
|
+
# Handle nested modules
|
|
318
|
+
if module_name in config:
|
|
319
|
+
return config[module_name]
|
|
320
|
+
|
|
321
|
+
# Check for nested module names
|
|
322
|
+
for key, value in config.items():
|
|
323
|
+
if isinstance(value, dict) and module_name in value:
|
|
324
|
+
return value[module_name]
|
|
325
|
+
|
|
326
|
+
raise KeyError(f"Module '{module_name}' not found in configuration")
|
|
327
|
+
|
|
328
|
+
def update_module_config(self, module_name: str, updates: Dict[str, Any]) -> None:
|
|
329
|
+
"""
|
|
330
|
+
Update configuration for specific module.
|
|
331
|
+
|
|
332
|
+
Args:
|
|
333
|
+
module_name: Name of module to update
|
|
334
|
+
updates: Configuration updates to apply
|
|
335
|
+
"""
|
|
336
|
+
config = self.load_config()
|
|
337
|
+
|
|
338
|
+
# Deep merge updates
|
|
339
|
+
if module_name not in config:
|
|
340
|
+
config[module_name] = {}
|
|
341
|
+
|
|
342
|
+
config[module_name].update(updates)
|
|
343
|
+
|
|
344
|
+
self.save_config(config)
|
|
345
|
+
|
|
346
|
+
def migrate_config(self, target_version: str) -> None:
|
|
347
|
+
"""
|
|
348
|
+
Migrate configuration to target version.
|
|
349
|
+
|
|
350
|
+
Args:
|
|
351
|
+
target_version: Target version to migrate to
|
|
352
|
+
"""
|
|
353
|
+
config = self.load_config()
|
|
354
|
+
current_version = config.get("version", "1.0.0")
|
|
355
|
+
|
|
356
|
+
if current_version == target_version:
|
|
357
|
+
logger.info("Configuration already at target version")
|
|
358
|
+
return
|
|
359
|
+
|
|
360
|
+
# Record migration in history
|
|
361
|
+
migration_record = {
|
|
362
|
+
"from_version": current_version,
|
|
363
|
+
"to_version": target_version,
|
|
364
|
+
"timestamp": datetime.now(UTC).isoformat() + "Z",
|
|
365
|
+
"description": f"Migrated from {current_version} to {target_version}",
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
if "metadata" not in config:
|
|
369
|
+
config["metadata"] = ConfigMetadata.create_new().__dict__
|
|
370
|
+
|
|
371
|
+
config["metadata"]["migration_history"].append(migration_record)
|
|
372
|
+
config["version"] = target_version
|
|
373
|
+
|
|
374
|
+
# Perform actual migration logic here
|
|
375
|
+
# This would be version-specific
|
|
376
|
+
|
|
377
|
+
self.save_config(config)
|
|
378
|
+
logger.info(f"Configuration migrated to version {target_version}")
|
|
379
|
+
|
|
380
|
+
def restore_backup(self, backup_name: str) -> None:
|
|
381
|
+
"""
|
|
382
|
+
Restore configuration from backup.
|
|
383
|
+
|
|
384
|
+
Args:
|
|
385
|
+
backup_name: Name of backup file to restore
|
|
386
|
+
"""
|
|
387
|
+
backup_path = self.backup_dir / backup_name
|
|
388
|
+
|
|
389
|
+
if not backup_path.exists():
|
|
390
|
+
raise FileNotFoundError(f"Backup file '{backup_name}' not found")
|
|
391
|
+
|
|
392
|
+
try:
|
|
393
|
+
shutil.copy2(backup_path, self.config_path)
|
|
394
|
+
self._invalidate_cache()
|
|
395
|
+
logger.info(f"Configuration restored from {backup_name}")
|
|
396
|
+
except Exception as e:
|
|
397
|
+
logger.error(f"Failed to restore backup: {e}")
|
|
398
|
+
raise
|
|
399
|
+
|
|
400
|
+
def list_backups(self) -> List[str]:
|
|
401
|
+
"""List available backup files."""
|
|
402
|
+
if not self.backup_dir.exists():
|
|
403
|
+
return []
|
|
404
|
+
|
|
405
|
+
backups = []
|
|
406
|
+
for file_path in self.backup_dir.glob("config_backup_*.json"):
|
|
407
|
+
backups.append(file_path.name)
|
|
408
|
+
|
|
409
|
+
return sorted(backups, reverse=True)
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
# Specialized Module Managers
|
|
413
|
+
class BatchQuestionsConfigManager:
|
|
414
|
+
"""Specialized manager for batch questions configuration."""
|
|
415
|
+
|
|
416
|
+
def __init__(self, config_manager: UnifiedConfigManager):
|
|
417
|
+
self.config_manager = config_manager
|
|
418
|
+
|
|
419
|
+
def get_config(self) -> Dict[str, Any]:
|
|
420
|
+
"""Get batch questions configuration."""
|
|
421
|
+
return self.config_manager.get_module_config("batch_questions")
|
|
422
|
+
|
|
423
|
+
def update_config(self, updates: Dict[str, Any]) -> None:
|
|
424
|
+
"""Update batch questions configuration."""
|
|
425
|
+
self.config_manager.update_module_config("batch_questions", updates)
|
|
426
|
+
|
|
427
|
+
def is_enabled(self) -> bool:
|
|
428
|
+
"""Check if batch questions is enabled."""
|
|
429
|
+
return self.get_config().get("enabled", True)
|
|
430
|
+
|
|
431
|
+
def get_max_questions(self) -> int:
|
|
432
|
+
"""Get maximum questions limit."""
|
|
433
|
+
return self.get_config().get("max_questions", 50)
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
class DocumentationConfigManager:
|
|
437
|
+
"""Specialized manager for documentation configuration."""
|
|
438
|
+
|
|
439
|
+
def __init__(self, config_manager: UnifiedConfigManager):
|
|
440
|
+
self.config_manager = config_manager
|
|
441
|
+
|
|
442
|
+
def get_config(self) -> Dict[str, Any]:
|
|
443
|
+
"""Get documentation configuration."""
|
|
444
|
+
return self.config_manager.get_module_config("documentation")
|
|
445
|
+
|
|
446
|
+
def update_config(self, updates: Dict[str, Any]) -> None:
|
|
447
|
+
"""Update documentation configuration."""
|
|
448
|
+
self.config_manager.update_module_config("documentation", updates)
|
|
449
|
+
|
|
450
|
+
def should_auto_generate(self) -> bool:
|
|
451
|
+
"""Check if auto-generation is enabled."""
|
|
452
|
+
return self.get_config().get("auto_generate", True)
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
class LanguageConfigManager:
|
|
456
|
+
"""Specialized manager for language configuration."""
|
|
457
|
+
|
|
458
|
+
def __init__(self, config_manager: UnifiedConfigManager):
|
|
459
|
+
self.config_manager = config_manager
|
|
460
|
+
|
|
461
|
+
def get_config(self) -> Dict[str, Any]:
|
|
462
|
+
"""Get language configuration."""
|
|
463
|
+
return self.config_manager.get_module_config("language_config")
|
|
464
|
+
|
|
465
|
+
def update_config(self, updates: Dict[str, Any]) -> None:
|
|
466
|
+
"""Update language configuration."""
|
|
467
|
+
self.config_manager.update_module_config("language_config", updates)
|
|
468
|
+
|
|
469
|
+
def get_default_language(self) -> str:
|
|
470
|
+
"""Get default language."""
|
|
471
|
+
return self.get_config().get("default_language", "en")
|
|
472
|
+
|
|
473
|
+
def get_supported_languages(self) -> List[str]:
|
|
474
|
+
"""Get list of supported languages."""
|
|
475
|
+
return self.get_config().get("supported_languages", ["en"])
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
class TemplateOptimizerConfigManager:
|
|
479
|
+
"""Specialized manager for template optimizer configuration."""
|
|
480
|
+
|
|
481
|
+
def __init__(self, config_manager: UnifiedConfigManager):
|
|
482
|
+
self.config_manager = config_manager
|
|
483
|
+
|
|
484
|
+
def get_config(self) -> Dict[str, Any]:
|
|
485
|
+
"""Get template optimizer configuration."""
|
|
486
|
+
return self.config_manager.get_module_config("template_optimizer")
|
|
487
|
+
|
|
488
|
+
def update_config(self, updates: Dict[str, Any]) -> None:
|
|
489
|
+
"""Update template optimizer configuration."""
|
|
490
|
+
self.config_manager.update_module_config("template_optimizer", updates)
|
|
491
|
+
|
|
492
|
+
def get_optimization_level(self) -> str:
|
|
493
|
+
"""Get optimization level."""
|
|
494
|
+
return self.get_config().get("optimization_level", "basic")
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
class ProjectInitializerConfigManager:
|
|
498
|
+
"""Specialized manager for project initializer configuration."""
|
|
499
|
+
|
|
500
|
+
def __init__(self, config_manager: UnifiedConfigManager):
|
|
501
|
+
self.config_manager = config_manager
|
|
502
|
+
|
|
503
|
+
def get_config(self) -> Dict[str, Any]:
|
|
504
|
+
"""Get project initializer configuration."""
|
|
505
|
+
return self.config_manager.get_module_config("project_initializer")
|
|
506
|
+
|
|
507
|
+
def update_config(self, updates: Dict[str, Any]) -> None:
|
|
508
|
+
"""Update project initializer configuration."""
|
|
509
|
+
self.config_manager.update_module_config("project_initializer", updates)
|
|
510
|
+
|
|
511
|
+
def should_auto_dependencies(self) -> bool:
|
|
512
|
+
"""Check if auto-dependency installation is enabled."""
|
|
513
|
+
return self.get_config().get("auto_dependencies", True)
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
# Factory function
|
|
517
|
+
def create_config_manager(config_dir: Union[str, Path]) -> UnifiedConfigManager:
|
|
518
|
+
"""
|
|
519
|
+
Create unified configuration manager with default schema.
|
|
520
|
+
|
|
521
|
+
Args:
|
|
522
|
+
config_dir: Directory containing configuration files
|
|
523
|
+
|
|
524
|
+
Returns:
|
|
525
|
+
Configured UnifiedConfigManager instance
|
|
526
|
+
"""
|
|
527
|
+
config_dir = Path(config_dir)
|
|
528
|
+
config_path = config_dir / "config.json"
|
|
529
|
+
schema_path = config_dir / "schemas" / "config-schema.json"
|
|
530
|
+
|
|
531
|
+
return UnifiedConfigManager(config_path, schema_path)
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
# Convenience access functions
|
|
535
|
+
@lru_cache(maxsize=32)
|
|
536
|
+
def get_config_manager(config_path: str) -> UnifiedConfigManager:
|
|
537
|
+
"""Get cached configuration manager instance."""
|
|
538
|
+
return UnifiedConfigManager(config_path)
|