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,372 @@
|
|
|
1
|
+
# SPEC: SPEC-CLI-001.md, SPEC-INIT-003.md
|
|
2
|
+
# TEST: tests/unit/test_cli_commands.py, tests/unit/test_init_reinit.py
|
|
3
|
+
"""MoAI-ADK init command
|
|
4
|
+
|
|
5
|
+
Project initialization command (interactive/non-interactive):
|
|
6
|
+
- Interactive Mode: Ask user for project settings
|
|
7
|
+
- Non-Interactive Mode: Use defaults or CLI options
|
|
8
|
+
|
|
9
|
+
## Skill Invocation Guide (English-Only)
|
|
10
|
+
|
|
11
|
+
### Related Skills
|
|
12
|
+
- **moai-foundation-langs**: For language detection and stack configuration
|
|
13
|
+
- Trigger: When language parameter is not specified (auto-detection)
|
|
14
|
+
- Invocation: Called implicitly during project initialization for language matrix detection
|
|
15
|
+
|
|
16
|
+
### When to Invoke Skills in Related Workflows
|
|
17
|
+
1. **After project initialization**:
|
|
18
|
+
- Run `Skill("moai-foundation-trust")` to verify project structure and toolchain
|
|
19
|
+
- Run `Skill("moai-foundation-langs")` to validate detected language stack
|
|
20
|
+
|
|
21
|
+
2. **Before first SPEC creation**:
|
|
22
|
+
- Use `Skill("moai-core-language-detection")` to confirm language selection
|
|
23
|
+
|
|
24
|
+
3. **Project reinitialization** (`--force`):
|
|
25
|
+
- Skills automatically adapt to new project structure
|
|
26
|
+
- No manual intervention required
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
import json
|
|
30
|
+
from pathlib import Path
|
|
31
|
+
from typing import Sequence
|
|
32
|
+
|
|
33
|
+
import click
|
|
34
|
+
import yaml
|
|
35
|
+
from rich.console import Console
|
|
36
|
+
from rich.progress import BarColumn, Progress, SpinnerColumn, TaskID, TextColumn
|
|
37
|
+
|
|
38
|
+
from moai_adk import __version__
|
|
39
|
+
from moai_adk.cli.prompts import prompt_project_setup
|
|
40
|
+
from moai_adk.core.project.initializer import ProjectInitializer
|
|
41
|
+
from moai_adk.statusline.version_reader import (
|
|
42
|
+
VersionConfig,
|
|
43
|
+
VersionReader,
|
|
44
|
+
)
|
|
45
|
+
from moai_adk.utils.banner import print_banner, print_welcome_message
|
|
46
|
+
|
|
47
|
+
console = Console()
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def create_progress_callback(progress: Progress, task_ids: Sequence[TaskID]):
|
|
51
|
+
"""Create progress callback
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
progress: Rich Progress object
|
|
55
|
+
task_ids: List of task IDs (one per phase)
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
Progress callback function
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
def callback(message: str, current: int, total: int) -> None:
|
|
62
|
+
"""Update progress
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
message: Progress message
|
|
66
|
+
current: Current phase (1-based)
|
|
67
|
+
total: Total phases
|
|
68
|
+
"""
|
|
69
|
+
# Complete current phase (1-based index → 0-based)
|
|
70
|
+
if 1 <= current <= len(task_ids):
|
|
71
|
+
progress.update(task_ids[current - 1], completed=1, description=message)
|
|
72
|
+
|
|
73
|
+
return callback
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@click.command()
|
|
77
|
+
@click.argument("path", type=click.Path(), default=".")
|
|
78
|
+
@click.option(
|
|
79
|
+
"--non-interactive",
|
|
80
|
+
"-y",
|
|
81
|
+
is_flag=True,
|
|
82
|
+
help="Non-interactive mode (use defaults)",
|
|
83
|
+
)
|
|
84
|
+
@click.option(
|
|
85
|
+
"--mode",
|
|
86
|
+
type=click.Choice(["personal", "team"]),
|
|
87
|
+
default="personal",
|
|
88
|
+
help="Project mode",
|
|
89
|
+
)
|
|
90
|
+
@click.option(
|
|
91
|
+
"--locale",
|
|
92
|
+
type=click.Choice(["ko", "en", "ja", "zh"]),
|
|
93
|
+
default=None,
|
|
94
|
+
help="Preferred language (ko/en/ja/zh, default: en)",
|
|
95
|
+
)
|
|
96
|
+
@click.option(
|
|
97
|
+
"--language",
|
|
98
|
+
type=str,
|
|
99
|
+
default=None,
|
|
100
|
+
help="Programming language (auto-detect if not specified)",
|
|
101
|
+
)
|
|
102
|
+
@click.option(
|
|
103
|
+
"--force",
|
|
104
|
+
is_flag=True,
|
|
105
|
+
help="Force reinitialize without confirmation",
|
|
106
|
+
)
|
|
107
|
+
def init(
|
|
108
|
+
path: str,
|
|
109
|
+
non_interactive: bool,
|
|
110
|
+
mode: str,
|
|
111
|
+
locale: str,
|
|
112
|
+
language: str | None,
|
|
113
|
+
force: bool,
|
|
114
|
+
) -> None:
|
|
115
|
+
"""Initialize a new MoAI-ADK project
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
path: Project directory path (default: current directory)
|
|
119
|
+
non_interactive: Skip prompts and use defaults
|
|
120
|
+
mode: Project mode (personal/team)
|
|
121
|
+
locale: Preferred language (ko/en/ja/zh). Interactive mode supports additional languages.
|
|
122
|
+
language: Programming language
|
|
123
|
+
with_mcp: Install specific MCP servers (can be used multiple times)
|
|
124
|
+
mcp_auto: Auto-install all recommended MCP servers
|
|
125
|
+
force: Force reinitialize without confirmation
|
|
126
|
+
"""
|
|
127
|
+
try:
|
|
128
|
+
# 1. Print banner with enhanced version info
|
|
129
|
+
print_banner(__version__)
|
|
130
|
+
|
|
131
|
+
# 2. Enhanced version reading with error handling
|
|
132
|
+
try:
|
|
133
|
+
version_config = VersionConfig(
|
|
134
|
+
cache_ttl_seconds=10, # Very short cache for CLI
|
|
135
|
+
fallback_version=__version__,
|
|
136
|
+
debug_mode=False,
|
|
137
|
+
)
|
|
138
|
+
version_reader = VersionReader(version_config)
|
|
139
|
+
current_version = version_reader.get_version()
|
|
140
|
+
|
|
141
|
+
# Log version info for debugging
|
|
142
|
+
console.print(f"[dim]Current MoAI-ADK version: {current_version}[/dim]")
|
|
143
|
+
except Exception as e:
|
|
144
|
+
console.print(f"[yellow]⚠️ Version read error: {e}[/yellow]")
|
|
145
|
+
|
|
146
|
+
# 3. Check current directory mode
|
|
147
|
+
is_current_dir = path == "."
|
|
148
|
+
project_path = Path(path).resolve()
|
|
149
|
+
|
|
150
|
+
# Initialize variables
|
|
151
|
+
custom_language = None
|
|
152
|
+
|
|
153
|
+
# 3. Interactive vs Non-Interactive
|
|
154
|
+
if non_interactive:
|
|
155
|
+
# Non-Interactive Mode
|
|
156
|
+
console.print(f"\n[cyan]🚀 Initializing project at {project_path}...[/cyan]\n")
|
|
157
|
+
project_name = project_path.name if is_current_dir else path
|
|
158
|
+
locale = locale or "en"
|
|
159
|
+
# Language detection happens in /moai:0-project, so default to None here
|
|
160
|
+
# This will become "generic" internally, but Summary will show more helpful message
|
|
161
|
+
if not language:
|
|
162
|
+
language = None
|
|
163
|
+
else:
|
|
164
|
+
# Interactive Mode
|
|
165
|
+
print_welcome_message()
|
|
166
|
+
|
|
167
|
+
# Interactive prompt
|
|
168
|
+
answers = prompt_project_setup(
|
|
169
|
+
project_name=None if is_current_dir else path,
|
|
170
|
+
is_current_dir=is_current_dir,
|
|
171
|
+
project_path=project_path,
|
|
172
|
+
initial_locale=locale,
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
# Override with prompt answers
|
|
176
|
+
mode = answers["mode"]
|
|
177
|
+
locale = answers["locale"]
|
|
178
|
+
language = answers["language"]
|
|
179
|
+
project_name = answers["project_name"]
|
|
180
|
+
custom_language = answers.get("custom_language")
|
|
181
|
+
|
|
182
|
+
console.print("\n[cyan]🚀 Starting installation...[/cyan]\n")
|
|
183
|
+
|
|
184
|
+
if locale is None:
|
|
185
|
+
locale = answers["locale"]
|
|
186
|
+
|
|
187
|
+
# 4. Check for reinitialization (SPEC-INIT-003 v0.3.0) - DEFAULT TO FORCE MODE
|
|
188
|
+
initializer = ProjectInitializer(project_path)
|
|
189
|
+
|
|
190
|
+
if initializer.is_initialized():
|
|
191
|
+
# Always reinitialize without confirmation (force mode by default)
|
|
192
|
+
if non_interactive:
|
|
193
|
+
console.print("\n[green]🔄 Reinitializing project (force mode)...[/green]\n")
|
|
194
|
+
else:
|
|
195
|
+
# Interactive mode: Simple notification
|
|
196
|
+
console.print("\n[cyan]🔄 Reinitializing project...[/cyan]")
|
|
197
|
+
console.print(" Backup will be created at .moai-backups/backup/\n")
|
|
198
|
+
|
|
199
|
+
# 5. Initialize project (Progress Bar with 5 phases)
|
|
200
|
+
# Always allow reinit (force mode by default)
|
|
201
|
+
is_reinit = initializer.is_initialized()
|
|
202
|
+
|
|
203
|
+
# Reinit mode: set config.json optimized to false (v0.3.1+)
|
|
204
|
+
if is_reinit:
|
|
205
|
+
# Migration: Remove old hook files (Issue #163)
|
|
206
|
+
old_hook_files = [
|
|
207
|
+
".claude/hooks/alfred/session_start__startup.py", # v0.8.0 deprecated
|
|
208
|
+
]
|
|
209
|
+
for old_file in old_hook_files:
|
|
210
|
+
old_path = project_path / old_file
|
|
211
|
+
if old_path.exists():
|
|
212
|
+
try:
|
|
213
|
+
old_path.unlink() # Remove old file
|
|
214
|
+
except Exception:
|
|
215
|
+
pass # Ignore removal failures
|
|
216
|
+
|
|
217
|
+
# Support both YAML (v0.32.5+) and JSON (legacy) config files
|
|
218
|
+
config_yaml_path = project_path / ".moai" / "config" / "config.yaml"
|
|
219
|
+
config_json_path = project_path / ".moai" / "config" / "config.json"
|
|
220
|
+
|
|
221
|
+
config_path = config_yaml_path if config_yaml_path.exists() else config_json_path
|
|
222
|
+
is_yaml = config_path.suffix in (".yaml", ".yml")
|
|
223
|
+
|
|
224
|
+
if config_path.exists():
|
|
225
|
+
try:
|
|
226
|
+
with open(config_path, "r", encoding="utf-8") as f:
|
|
227
|
+
if is_yaml:
|
|
228
|
+
config_data = yaml.safe_load(f) or {}
|
|
229
|
+
else:
|
|
230
|
+
config_data = json.load(f)
|
|
231
|
+
|
|
232
|
+
# Update version and optimization flags
|
|
233
|
+
if "moai" not in config_data:
|
|
234
|
+
config_data["moai"] = {}
|
|
235
|
+
|
|
236
|
+
# Use enhanced version reader for consistent version handling
|
|
237
|
+
try:
|
|
238
|
+
version_config = VersionConfig(
|
|
239
|
+
cache_ttl_seconds=5, # Very short cache for config update
|
|
240
|
+
fallback_version=__version__,
|
|
241
|
+
debug_mode=False,
|
|
242
|
+
)
|
|
243
|
+
version_reader = VersionReader(version_config)
|
|
244
|
+
current_version = version_reader.get_version()
|
|
245
|
+
config_data["moai"]["version"] = current_version
|
|
246
|
+
except Exception:
|
|
247
|
+
# Fallback to package version
|
|
248
|
+
config_data["moai"]["version"] = __version__
|
|
249
|
+
|
|
250
|
+
if "project" not in config_data:
|
|
251
|
+
config_data["project"] = {}
|
|
252
|
+
config_data["project"]["optimized"] = False
|
|
253
|
+
|
|
254
|
+
with open(config_path, "w", encoding="utf-8") as f:
|
|
255
|
+
if is_yaml:
|
|
256
|
+
yaml.safe_dump(
|
|
257
|
+
config_data, f, default_flow_style=False, allow_unicode=True, sort_keys=False
|
|
258
|
+
)
|
|
259
|
+
else:
|
|
260
|
+
json.dump(config_data, f, indent=2, ensure_ascii=False)
|
|
261
|
+
except Exception:
|
|
262
|
+
# Ignore read/write failures; config is regenerated during initialization
|
|
263
|
+
pass
|
|
264
|
+
|
|
265
|
+
with Progress(
|
|
266
|
+
SpinnerColumn(),
|
|
267
|
+
TextColumn("[progress.description]{task.description}"),
|
|
268
|
+
BarColumn(),
|
|
269
|
+
TextColumn("[progress.percentage]{task.percentage:>3.0f}%"),
|
|
270
|
+
console=console,
|
|
271
|
+
) as progress:
|
|
272
|
+
# Create 5 phase tasks
|
|
273
|
+
phase_names = [
|
|
274
|
+
"Phase 1: Preparation and backup...",
|
|
275
|
+
"Phase 2: Creating directory structure...",
|
|
276
|
+
"Phase 3: Installing resources...",
|
|
277
|
+
"Phase 4: Generating configurations...",
|
|
278
|
+
"Phase 5: Validation and finalization...",
|
|
279
|
+
]
|
|
280
|
+
task_ids = [progress.add_task(name, total=1) for name in phase_names]
|
|
281
|
+
callback = create_progress_callback(progress, task_ids)
|
|
282
|
+
|
|
283
|
+
result = initializer.initialize(
|
|
284
|
+
mode=mode,
|
|
285
|
+
locale=locale,
|
|
286
|
+
language=language,
|
|
287
|
+
custom_language=custom_language,
|
|
288
|
+
backup_enabled=True,
|
|
289
|
+
progress_callback=callback,
|
|
290
|
+
reinit=True, # Always allow reinit (force mode by default)
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
# 6. Output results
|
|
294
|
+
if result.success:
|
|
295
|
+
separator = "[dim]" + ("─" * 60) + "[/dim]"
|
|
296
|
+
console.print("\n[green bold]✅ Initialization Completed Successfully![/green bold]")
|
|
297
|
+
console.print(separator)
|
|
298
|
+
console.print("\n[cyan]📊 Summary:[/cyan]")
|
|
299
|
+
console.print(f" [dim]📁 Location:[/dim] {result.project_path}")
|
|
300
|
+
# Show language more clearly - "generic" means auto-detect
|
|
301
|
+
language_display = "Auto-detect (use /moai:0-project)" if result.language == "generic" else result.language
|
|
302
|
+
console.print(f" [dim]🌐 Language:[/dim] {language_display}")
|
|
303
|
+
# Show Git Strategy (default: manual = local-only, no auto-branch)
|
|
304
|
+
console.print(" [dim]🔀 Git:[/dim] manual (github-flow, branch: manual)")
|
|
305
|
+
console.print(f" [dim]🌍 Locale:[/dim] {result.locale}")
|
|
306
|
+
console.print(f" [dim]📄 Files:[/dim] {len(result.created_files)} created")
|
|
307
|
+
console.print(f" [dim]⏱️ Duration:[/dim] {result.duration}ms")
|
|
308
|
+
|
|
309
|
+
# Show backup info if reinitialized
|
|
310
|
+
if is_reinit:
|
|
311
|
+
backup_dir = project_path / ".moai-backups"
|
|
312
|
+
if backup_dir.exists():
|
|
313
|
+
latest_backup = max(backup_dir.iterdir(), key=lambda p: p.stat().st_mtime)
|
|
314
|
+
console.print(f" [dim]💾 Backup:[/dim] {latest_backup.name}/")
|
|
315
|
+
|
|
316
|
+
console.print(f"\n{separator}")
|
|
317
|
+
|
|
318
|
+
# Show config merge notice if reinitialized
|
|
319
|
+
if is_reinit:
|
|
320
|
+
console.print("\n[yellow]⚠️ Configuration Status: optimized=false (merge required)[/yellow]")
|
|
321
|
+
console.print()
|
|
322
|
+
console.print("[cyan]What Happened:[/cyan]")
|
|
323
|
+
console.print(" ✅ Template files updated to latest version")
|
|
324
|
+
console.print(" 💾 Your previous settings backed up in: [cyan].moai-backups/backup/[/cyan]")
|
|
325
|
+
console.print(" ⏳ Configuration merge required")
|
|
326
|
+
console.print()
|
|
327
|
+
console.print("[cyan]What is optimized=false?[/cyan]")
|
|
328
|
+
console.print(" • Template version changed (you get new features)")
|
|
329
|
+
console.print(" • Your previous settings are safe (backed up)")
|
|
330
|
+
console.print(" • Next: Run /moai:0-project to merge")
|
|
331
|
+
console.print()
|
|
332
|
+
console.print("[cyan]What Happens Next:[/cyan]")
|
|
333
|
+
console.print(" 1. Run [bold]/moai:0-project[/bold] in Claude Code")
|
|
334
|
+
console.print(" 2. System intelligently merges old settings + new template")
|
|
335
|
+
console.print(" 3. After successful merge → optimized becomes true")
|
|
336
|
+
console.print(" 4. You're ready to continue developing\n")
|
|
337
|
+
|
|
338
|
+
console.print("\n[cyan]🚀 Next Steps:[/cyan]")
|
|
339
|
+
if not is_current_dir:
|
|
340
|
+
console.print(f" [blue]1.[/blue] Run [bold]cd {project_name}[/bold] to enter the project")
|
|
341
|
+
console.print(" [blue]2.[/blue] Run [bold]/moai:0-project[/bold] in Claude Code for full setup")
|
|
342
|
+
console.print(" (Configure: mode, language, report generation, etc.)")
|
|
343
|
+
else:
|
|
344
|
+
console.print(" [blue]1.[/blue] Run [bold]/moai:0-project[/bold] in Claude Code for full setup")
|
|
345
|
+
console.print(" (Configure: mode, language, report generation, etc.)")
|
|
346
|
+
|
|
347
|
+
if not is_current_dir:
|
|
348
|
+
console.print(" [blue]3.[/blue] Start developing with MoAI-ADK!\n")
|
|
349
|
+
else:
|
|
350
|
+
console.print(" [blue]2.[/blue] Start developing with MoAI-ADK!\n")
|
|
351
|
+
else:
|
|
352
|
+
console.print("\n[red bold]❌ Initialization Failed![/red bold]")
|
|
353
|
+
if result.errors:
|
|
354
|
+
console.print("\n[red]Errors:[/red]")
|
|
355
|
+
for error in result.errors:
|
|
356
|
+
console.print(f" [red]•[/red] {error}")
|
|
357
|
+
console.print()
|
|
358
|
+
raise click.ClickException("Installation failed")
|
|
359
|
+
|
|
360
|
+
except KeyboardInterrupt:
|
|
361
|
+
console.print("\n\n[yellow]⚠ Initialization cancelled by user[/yellow]\n")
|
|
362
|
+
raise click.Abort()
|
|
363
|
+
except FileExistsError as e:
|
|
364
|
+
console.print("\n[yellow]⚠ Project already initialized[/yellow]")
|
|
365
|
+
console.print("[dim] Use 'python -m moai_adk status' to check configuration[/dim]\n")
|
|
366
|
+
raise click.Abort() from e
|
|
367
|
+
except Exception as e:
|
|
368
|
+
console.print(f"\n[red]✗ Initialization failed: {e}[/red]\n")
|
|
369
|
+
raise click.ClickException(str(e)) from e
|
|
370
|
+
finally:
|
|
371
|
+
# Explicitly flush output buffer
|
|
372
|
+
console.file.flush()
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"""Language management commands for MoAI-ADK.
|
|
2
|
+
|
|
3
|
+
Provides commands for language configuration, template processing,
|
|
4
|
+
and multilingual content generation.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
import click
|
|
11
|
+
from rich.console import Console
|
|
12
|
+
from rich.table import Table
|
|
13
|
+
|
|
14
|
+
from ...core.claude_integration import ClaudeCLIIntegration
|
|
15
|
+
from ...core.language_config import (
|
|
16
|
+
LANGUAGE_CONFIG,
|
|
17
|
+
get_all_supported_codes,
|
|
18
|
+
get_native_name,
|
|
19
|
+
get_optimal_model,
|
|
20
|
+
)
|
|
21
|
+
from ...core.template_engine import TemplateEngine
|
|
22
|
+
|
|
23
|
+
console = Console()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@click.group()
|
|
27
|
+
def language():
|
|
28
|
+
"""Language management and multilingual support."""
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@language.command()
|
|
33
|
+
@click.option("--json-output", is_flag=True, help="Output as JSON")
|
|
34
|
+
def list(json_output):
|
|
35
|
+
"""List all supported languages."""
|
|
36
|
+
if json_output:
|
|
37
|
+
console.print(json.dumps(LANGUAGE_CONFIG, indent=2, ensure_ascii=False))
|
|
38
|
+
return
|
|
39
|
+
|
|
40
|
+
table = Table(title="Supported Languages")
|
|
41
|
+
table.add_column("Code", style="cyan", no_wrap=True)
|
|
42
|
+
table.add_column("English Name", style="green")
|
|
43
|
+
table.add_column("Native Name", style="yellow")
|
|
44
|
+
table.add_column("Family", style="blue")
|
|
45
|
+
|
|
46
|
+
for code, info in LANGUAGE_CONFIG.items():
|
|
47
|
+
table.add_row(code, info["name"], info["native_name"], info["family"])
|
|
48
|
+
|
|
49
|
+
console.print(table)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@language.command()
|
|
53
|
+
@click.argument("language_code")
|
|
54
|
+
@click.option("--detail", is_flag=True, help="Show detailed information")
|
|
55
|
+
def info(language_code, detail):
|
|
56
|
+
"""Show information about a specific language."""
|
|
57
|
+
lang_info = LANGUAGE_CONFIG.get(language_code.lower())
|
|
58
|
+
|
|
59
|
+
if not lang_info:
|
|
60
|
+
console.print(f"[red]Language code '{language_code}' not found.[/red]")
|
|
61
|
+
console.print(f"Available codes: {', '.join(get_all_supported_codes())}")
|
|
62
|
+
return
|
|
63
|
+
|
|
64
|
+
console.print("[bold]Language Information:[/bold]")
|
|
65
|
+
console.print(f"Code: {language_code}")
|
|
66
|
+
console.print(f"English Name: {lang_info['name']}")
|
|
67
|
+
console.print(f"Native Name: {lang_info['native_name']}")
|
|
68
|
+
console.print(f"Family: {lang_info['family']}")
|
|
69
|
+
|
|
70
|
+
if detail:
|
|
71
|
+
optimal_model = get_optimal_model(language_code)
|
|
72
|
+
console.print(f"Optimal Claude Model: {optimal_model}")
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
@language.command()
|
|
76
|
+
@click.argument("template_path", type=click.Path(exists=True))
|
|
77
|
+
@click.argument("variables_file", type=click.Path(exists=True))
|
|
78
|
+
@click.option("--output", "-o", type=click.Path(), help="Output file path")
|
|
79
|
+
@click.option("--language", "-l", help="Target language code")
|
|
80
|
+
def render_template(template_path, variables_file, output, language):
|
|
81
|
+
"""Render template with variables and language support."""
|
|
82
|
+
try:
|
|
83
|
+
# Load variables
|
|
84
|
+
with open(variables_file, "r", encoding="utf-8") as f:
|
|
85
|
+
variables = json.load(f)
|
|
86
|
+
|
|
87
|
+
# Add language info if specified
|
|
88
|
+
if language:
|
|
89
|
+
variables["CONVERSATION_LANGUAGE"] = language
|
|
90
|
+
variables["CONVERSATION_LANGUAGE_NAME"] = get_native_name(language)
|
|
91
|
+
|
|
92
|
+
# Render template
|
|
93
|
+
template_engine = TemplateEngine()
|
|
94
|
+
template_path_obj = Path(template_path)
|
|
95
|
+
output_path_obj = Path(output) if output else None
|
|
96
|
+
|
|
97
|
+
rendered = template_engine.render_file(template_path_obj, variables, output_path_obj)
|
|
98
|
+
|
|
99
|
+
if not output:
|
|
100
|
+
console.print("[bold]Rendered Template:[/bold]")
|
|
101
|
+
console.print(rendered)
|
|
102
|
+
else:
|
|
103
|
+
console.print(f"[green]Template rendered to: {output}[/green]")
|
|
104
|
+
|
|
105
|
+
except Exception as e:
|
|
106
|
+
console.print(f"[red]Error rendering template: {e}[/red]")
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
@language.command()
|
|
110
|
+
@click.argument("base_description")
|
|
111
|
+
@click.option("--target-languages", "-t", help="Comma-separated target language codes")
|
|
112
|
+
@click.option("--output", "-o", type=click.Path(), help="Output JSON file")
|
|
113
|
+
def translate_descriptions(base_description, target_languages, output):
|
|
114
|
+
"""Generate multilingual descriptions using Claude CLI."""
|
|
115
|
+
try:
|
|
116
|
+
if target_languages:
|
|
117
|
+
languages = [lang.strip() for lang in target_languages.split(",")]
|
|
118
|
+
else:
|
|
119
|
+
languages = ["en", "ko", "ja", "es", "fr", "de"]
|
|
120
|
+
|
|
121
|
+
claude_integration = ClaudeCLIIntegration()
|
|
122
|
+
descriptions = claude_integration.generate_multilingual_descriptions({"base": base_description}, languages)
|
|
123
|
+
|
|
124
|
+
if output:
|
|
125
|
+
with open(output, "w", encoding="utf-8") as f:
|
|
126
|
+
json.dump(descriptions, f, indent=2, ensure_ascii=False)
|
|
127
|
+
console.print(f"[green]Descriptions saved to: {output}[/green]")
|
|
128
|
+
else:
|
|
129
|
+
console.print("[bold]Multilingual Descriptions:[/bold]")
|
|
130
|
+
console.print(json.dumps(descriptions, indent=2, ensure_ascii=False))
|
|
131
|
+
|
|
132
|
+
except Exception as e:
|
|
133
|
+
console.print(f"[red]Error generating descriptions: {e}[/red]")
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
@language.command()
|
|
137
|
+
@click.argument("prompt_template")
|
|
138
|
+
@click.option("--variables", "-v", type=click.Path(exists=True), help="Variables JSON file")
|
|
139
|
+
@click.option("--language", "-l", help="Target language code")
|
|
140
|
+
@click.option("--output-format", default="json", help="Output format (text, json, stream-json)")
|
|
141
|
+
@click.option("--dry-run", is_flag=True, help="Show command without executing")
|
|
142
|
+
def execute(prompt_template, variables, language, output_format, dry_run):
|
|
143
|
+
"""Execute Claude CLI with template variables and language support."""
|
|
144
|
+
try:
|
|
145
|
+
# Load or create variables
|
|
146
|
+
template_vars = {}
|
|
147
|
+
if variables:
|
|
148
|
+
with open(variables, "r", encoding="utf-8") as f:
|
|
149
|
+
template_vars = json.load(f)
|
|
150
|
+
|
|
151
|
+
if language:
|
|
152
|
+
template_vars["CONVERSATION_LANGUAGE"] = language
|
|
153
|
+
template_vars["CONVERSATION_LANGUAGE_NAME"] = get_native_name(language)
|
|
154
|
+
|
|
155
|
+
# Process template
|
|
156
|
+
template_engine = TemplateEngine()
|
|
157
|
+
processed_prompt = template_engine.render_string(prompt_template, template_vars)
|
|
158
|
+
|
|
159
|
+
if dry_run:
|
|
160
|
+
console.print("[bold]Dry Run - Command that would be executed:[/bold]")
|
|
161
|
+
console.print(f"claude --print --output-format {output_format} '{processed_prompt}'")
|
|
162
|
+
console.print("[bold]Variables used:[/bold]")
|
|
163
|
+
console.print(json.dumps(template_vars, indent=2, ensure_ascii=False))
|
|
164
|
+
return
|
|
165
|
+
|
|
166
|
+
# Execute with Claude integration
|
|
167
|
+
claude_integration = ClaudeCLIIntegration()
|
|
168
|
+
result = claude_integration.process_template_command(
|
|
169
|
+
prompt_template, template_vars, print_mode=True, output_format=output_format
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
if result["success"]:
|
|
173
|
+
console.print("[green]✓ Command executed successfully[/green]")
|
|
174
|
+
if output_format == "json" and result["stdout"]:
|
|
175
|
+
try:
|
|
176
|
+
output_data = json.loads(result["stdout"])
|
|
177
|
+
console.print(json.dumps(output_data, indent=2, ensure_ascii=False))
|
|
178
|
+
except json.JSONDecodeError:
|
|
179
|
+
console.print(result["stdout"])
|
|
180
|
+
else:
|
|
181
|
+
console.print(result["stdout"])
|
|
182
|
+
else:
|
|
183
|
+
console.print("[red]✗ Command execution failed[/red]")
|
|
184
|
+
if "error" in result:
|
|
185
|
+
console.print(f"Error: {result['error']}")
|
|
186
|
+
if result["stderr"]:
|
|
187
|
+
console.print(f"Stderr: {result['stderr']}")
|
|
188
|
+
|
|
189
|
+
except Exception as e:
|
|
190
|
+
console.print(f"[red]Error executing command: {e}[/red]")
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
@language.command()
|
|
194
|
+
@click.argument("config_file", type=click.Path(exists=True))
|
|
195
|
+
@click.option("--validate-languages", is_flag=True, help="Validate language codes in config")
|
|
196
|
+
def validate_config(config_file, validate_languages):
|
|
197
|
+
"""Validate language configuration in MoAI-ADK config file."""
|
|
198
|
+
try:
|
|
199
|
+
with open(config_file, "r", encoding="utf-8") as f:
|
|
200
|
+
config = json.load(f)
|
|
201
|
+
|
|
202
|
+
console.print(f"[bold]Validating config: {config_file}[/bold]")
|
|
203
|
+
|
|
204
|
+
# Basic structure validation
|
|
205
|
+
if "language" not in config:
|
|
206
|
+
console.print("[yellow]⚠ No 'language' section found in config[/yellow]")
|
|
207
|
+
else:
|
|
208
|
+
lang_config = config["language"]
|
|
209
|
+
if not isinstance(lang_config, dict):
|
|
210
|
+
console.print("[red]✗ 'language' section must be an object[/red]")
|
|
211
|
+
else:
|
|
212
|
+
console.print("[green]✓ Language section structure is valid[/green]")
|
|
213
|
+
|
|
214
|
+
# Check conversation_language
|
|
215
|
+
conv_lang = lang_config.get("conversation_language")
|
|
216
|
+
if conv_lang:
|
|
217
|
+
if conv_lang in get_all_supported_codes():
|
|
218
|
+
console.print(f"[green]✓ conversation_language '{conv_lang}' is supported[/green]")
|
|
219
|
+
else:
|
|
220
|
+
console.print(f"[red]✗ conversation_language '{conv_lang}' is not supported[/red]")
|
|
221
|
+
else:
|
|
222
|
+
console.print("[yellow]⚠ No conversation_language specified[/yellow]")
|
|
223
|
+
|
|
224
|
+
# Check conversation_language_name
|
|
225
|
+
conv_lang_name = lang_config.get("conversation_language_name")
|
|
226
|
+
if conv_lang_name and conv_lang:
|
|
227
|
+
expected_name = get_native_name(conv_lang)
|
|
228
|
+
if conv_lang_name == expected_name:
|
|
229
|
+
console.print("[green]✓ conversation_language_name matches[/green]")
|
|
230
|
+
else:
|
|
231
|
+
warning_msg = (
|
|
232
|
+
f"⚠ conversation_language_name '{conv_lang_name}' doesn't match expected '{expected_name}'"
|
|
233
|
+
)
|
|
234
|
+
console.print(f"[yellow]{warning_msg}[/yellow]")
|
|
235
|
+
|
|
236
|
+
if validate_languages:
|
|
237
|
+
# Scan entire config for language codes
|
|
238
|
+
config_str = json.dumps(config)
|
|
239
|
+
found_codes = []
|
|
240
|
+
for code in get_all_supported_codes():
|
|
241
|
+
if code in config_str:
|
|
242
|
+
found_codes.append(code)
|
|
243
|
+
|
|
244
|
+
if found_codes:
|
|
245
|
+
console.print(f"[blue]Found language codes in config: {', '.join(found_codes)}[/blue]")
|
|
246
|
+
|
|
247
|
+
except Exception as e:
|
|
248
|
+
console.print(f"[red]Error validating config: {e}[/red]")
|