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,730 @@
|
|
|
1
|
+
"""
|
|
2
|
+
MoAI Menu Project - Language Initializer Module
|
|
3
|
+
|
|
4
|
+
Comprehensive language detection, configuration, and localization system.
|
|
5
|
+
Integrates patterns from moai-project-language-initializer skill with
|
|
6
|
+
advanced multilingual support and locale management.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import json
|
|
10
|
+
import locale
|
|
11
|
+
import os
|
|
12
|
+
from datetime import datetime
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import Any, Dict, List, Optional
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class LanguageInitializer:
|
|
18
|
+
"""Comprehensive language and localization management system."""
|
|
19
|
+
|
|
20
|
+
# Language configuration mappings
|
|
21
|
+
LANGUAGE_CONFIG = {
|
|
22
|
+
"en": {
|
|
23
|
+
"name": "English",
|
|
24
|
+
"native_name": "English",
|
|
25
|
+
"code": "en",
|
|
26
|
+
"locale": "en_US.UTF-8",
|
|
27
|
+
"agent_prompt_language": "english",
|
|
28
|
+
"documentation_language": "en",
|
|
29
|
+
"rtl": False,
|
|
30
|
+
"date_format": "%Y-%m-%d",
|
|
31
|
+
"time_format": "%H:%M:%S",
|
|
32
|
+
},
|
|
33
|
+
"ko": {
|
|
34
|
+
"name": "Korean",
|
|
35
|
+
"native_name": "한국어",
|
|
36
|
+
"code": "ko",
|
|
37
|
+
"locale": "ko_KR.UTF-8",
|
|
38
|
+
"agent_prompt_language": "localized",
|
|
39
|
+
"documentation_language": "ko",
|
|
40
|
+
"rtl": False,
|
|
41
|
+
"date_format": "%Y년 %m월 %d일",
|
|
42
|
+
"time_format": "%H:%M:%S",
|
|
43
|
+
},
|
|
44
|
+
"ja": {
|
|
45
|
+
"name": "Japanese",
|
|
46
|
+
"native_name": "日本語",
|
|
47
|
+
"code": "ja",
|
|
48
|
+
"locale": "ja_JP.UTF-8",
|
|
49
|
+
"agent_prompt_language": "localized",
|
|
50
|
+
"documentation_language": "ja",
|
|
51
|
+
"rtl": False,
|
|
52
|
+
"date_format": "%Y年%m月%d日",
|
|
53
|
+
"time_format": "%H:%M:%S",
|
|
54
|
+
},
|
|
55
|
+
"zh": {
|
|
56
|
+
"name": "Chinese",
|
|
57
|
+
"native_name": "中文",
|
|
58
|
+
"code": "zh",
|
|
59
|
+
"locale": "zh_CN.UTF-8",
|
|
60
|
+
"agent_prompt_language": "localized",
|
|
61
|
+
"documentation_language": "zh",
|
|
62
|
+
"rtl": False,
|
|
63
|
+
"date_format": "%Y年%m月%d日",
|
|
64
|
+
"time_format": "%H:%M:%S",
|
|
65
|
+
},
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# Domain-specific language mappings
|
|
69
|
+
DOMAIN_LANGUAGES = {
|
|
70
|
+
"backend": ["en", "ko"],
|
|
71
|
+
"frontend": ["en", "ko", "ja"],
|
|
72
|
+
"mobile": ["en", "ko", "ja", "zh"],
|
|
73
|
+
"devops": ["en"],
|
|
74
|
+
"data_science": ["en", "ko", "zh"],
|
|
75
|
+
"ai_ml": ["en", "ko", "ja", "zh"],
|
|
76
|
+
"security": ["en"],
|
|
77
|
+
"testing": ["en", "ko"],
|
|
78
|
+
"documentation": ["en", "ko", "ja", "zh"],
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
def __init__(self, project_root: str, config: Dict[str, Any]):
|
|
82
|
+
self.project_root = Path(project_root)
|
|
83
|
+
self.config = config
|
|
84
|
+
self.config_path = self.project_root / ".moai/config/config.yaml"
|
|
85
|
+
self._ensure_config_exists()
|
|
86
|
+
|
|
87
|
+
def _ensure_config_exists(self):
|
|
88
|
+
"""Ensure config file exists with basic structure."""
|
|
89
|
+
self.config_path.parent.mkdir(parents=True, exist_ok=True)
|
|
90
|
+
|
|
91
|
+
if not self.config_path.exists():
|
|
92
|
+
default_config = {
|
|
93
|
+
"language": {
|
|
94
|
+
"conversation_language": "en",
|
|
95
|
+
"conversation_language_name": "English",
|
|
96
|
+
"agent_prompt_language": "english",
|
|
97
|
+
"documentation_language": "en",
|
|
98
|
+
},
|
|
99
|
+
"user": {
|
|
100
|
+
"name": "Developer",
|
|
101
|
+
"selected_at": datetime.now().isoformat(),
|
|
102
|
+
},
|
|
103
|
+
"project": {"name": "My Project", "type": "web_application"},
|
|
104
|
+
}
|
|
105
|
+
self.config_path.write_text(
|
|
106
|
+
json.dumps(default_config, indent=2, ensure_ascii=False),
|
|
107
|
+
encoding="utf-8",
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
def detect_project_language(self) -> str:
|
|
111
|
+
"""
|
|
112
|
+
Auto-detect project language based on project structure and content.
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
Detected language code (en, ko, ja, zh)
|
|
116
|
+
"""
|
|
117
|
+
|
|
118
|
+
# Method 1: Check existing config
|
|
119
|
+
if self.config_path.exists():
|
|
120
|
+
existing_config = json.loads(self.config_path.read_text(encoding="utf-8"))
|
|
121
|
+
existing_lang = existing_config.get("language", {}).get("conversation_language")
|
|
122
|
+
if existing_lang:
|
|
123
|
+
return existing_lang
|
|
124
|
+
|
|
125
|
+
# Method 2: Analyze file content
|
|
126
|
+
detected_language = self._analyze_file_content()
|
|
127
|
+
if detected_language:
|
|
128
|
+
return detected_language
|
|
129
|
+
|
|
130
|
+
# Method 3: Check system locale
|
|
131
|
+
system_language = self._get_system_language()
|
|
132
|
+
if system_language in self.LANGUAGE_CONFIG:
|
|
133
|
+
return system_language
|
|
134
|
+
|
|
135
|
+
# Method 4: Default to English
|
|
136
|
+
return "en"
|
|
137
|
+
|
|
138
|
+
def _analyze_file_content(self) -> Optional[str]:
|
|
139
|
+
"""Analyze project files to detect primary language."""
|
|
140
|
+
|
|
141
|
+
# Check for language indicators in common files
|
|
142
|
+
indicators = {
|
|
143
|
+
"ko": ["한국어", "한글", "ko_KR", ".ko."],
|
|
144
|
+
"ja": ["日本語", "ja_JP", ".ja."],
|
|
145
|
+
"zh": ["中文", "简体中文", "zh_CN", ".zh."],
|
|
146
|
+
"en": ["English", "en_US", ".en."],
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
# Search in README files
|
|
150
|
+
for readme_file in self.project_root.glob("README*"):
|
|
151
|
+
if readme_file.is_file():
|
|
152
|
+
content = readme_file.read_text(encoding="utf-8", errors="ignore")
|
|
153
|
+
for lang_code, lang_indicators in indicators.items():
|
|
154
|
+
for indicator in lang_indicators:
|
|
155
|
+
if indicator in content:
|
|
156
|
+
return lang_code
|
|
157
|
+
|
|
158
|
+
# Search in package.json
|
|
159
|
+
package_json = self.project_root / "package.json"
|
|
160
|
+
if package_json.exists():
|
|
161
|
+
try:
|
|
162
|
+
package_data = json.loads(package_json.read_text(encoding="utf-8"))
|
|
163
|
+
# Check for language-specific fields
|
|
164
|
+
if "name" in package_data:
|
|
165
|
+
name = package_data["name"]
|
|
166
|
+
if any(char in name for char in "가나다라마바사"):
|
|
167
|
+
return "ko"
|
|
168
|
+
elif any(char in name for char in "あいうえお"):
|
|
169
|
+
return "ja"
|
|
170
|
+
elif any(char in name for char in "中文测试"):
|
|
171
|
+
return "zh"
|
|
172
|
+
except (json.JSONDecodeError, UnicodeDecodeError):
|
|
173
|
+
pass
|
|
174
|
+
|
|
175
|
+
# Search in source code comments
|
|
176
|
+
src_dir = self.project_root / "src"
|
|
177
|
+
if src_dir.exists():
|
|
178
|
+
for file_path in src_dir.rglob("*"):
|
|
179
|
+
if file_path.is_file() and file_path.suffix in [
|
|
180
|
+
".py",
|
|
181
|
+
".js",
|
|
182
|
+
".ts",
|
|
183
|
+
".java",
|
|
184
|
+
".cpp",
|
|
185
|
+
]:
|
|
186
|
+
try:
|
|
187
|
+
content = file_path.read_text(encoding="utf-8", errors="ignore")
|
|
188
|
+
for lang_code, lang_indicators in indicators.items():
|
|
189
|
+
for indicator in lang_indicators:
|
|
190
|
+
if indicator in content:
|
|
191
|
+
return lang_code
|
|
192
|
+
except UnicodeDecodeError:
|
|
193
|
+
continue
|
|
194
|
+
|
|
195
|
+
return None
|
|
196
|
+
|
|
197
|
+
def _get_system_language(self) -> str:
|
|
198
|
+
"""Get system default language."""
|
|
199
|
+
|
|
200
|
+
try:
|
|
201
|
+
# Try to get system locale
|
|
202
|
+
system_locale = locale.getdefaultlocale()
|
|
203
|
+
if system_locale and system_locale[0]:
|
|
204
|
+
lang_code = system_locale[0].split("_")[0]
|
|
205
|
+
if lang_code in self.LANGUAGE_CONFIG:
|
|
206
|
+
return lang_code
|
|
207
|
+
except (ValueError, IndexError):
|
|
208
|
+
pass
|
|
209
|
+
|
|
210
|
+
# Try environment variables
|
|
211
|
+
env_lang = os.environ.get("LANG", "").split(".")[0].split("_")[0]
|
|
212
|
+
if env_lang in self.LANGUAGE_CONFIG:
|
|
213
|
+
return env_lang
|
|
214
|
+
|
|
215
|
+
return "en"
|
|
216
|
+
|
|
217
|
+
def initialize_language_configuration(
|
|
218
|
+
self, language: str = None, user_name: str = None, domains: List[str] = None
|
|
219
|
+
) -> Dict[str, Any]:
|
|
220
|
+
"""
|
|
221
|
+
Initialize comprehensive language configuration.
|
|
222
|
+
|
|
223
|
+
Args:
|
|
224
|
+
language: Target language code (auto-detected if not provided)
|
|
225
|
+
user_name: User name for personalization
|
|
226
|
+
domains: List of selected domains
|
|
227
|
+
|
|
228
|
+
Returns:
|
|
229
|
+
Configuration results and updated settings
|
|
230
|
+
"""
|
|
231
|
+
|
|
232
|
+
# Auto-detect language if not provided
|
|
233
|
+
if not language:
|
|
234
|
+
language = self.detect_project_language()
|
|
235
|
+
|
|
236
|
+
# Validate language
|
|
237
|
+
if language not in self.LANGUAGE_CONFIG:
|
|
238
|
+
language = "en" # Fallback
|
|
239
|
+
|
|
240
|
+
lang_config = self.LANGUAGE_CONFIG[language]
|
|
241
|
+
|
|
242
|
+
# Load existing config
|
|
243
|
+
current_config = {}
|
|
244
|
+
if self.config_path.exists():
|
|
245
|
+
current_config = json.loads(self.config_path.read_text(encoding="utf-8"))
|
|
246
|
+
|
|
247
|
+
# Update language settings
|
|
248
|
+
current_config.setdefault("language", {}).update(
|
|
249
|
+
{
|
|
250
|
+
"conversation_language": language,
|
|
251
|
+
"conversation_language_name": lang_config["native_name"],
|
|
252
|
+
"agent_prompt_language": lang_config["agent_prompt_language"],
|
|
253
|
+
"documentation_language": lang_config["documentation_language"],
|
|
254
|
+
"locale": lang_config["locale"],
|
|
255
|
+
"rtl": lang_config["rtl"],
|
|
256
|
+
"date_format": lang_config["date_format"],
|
|
257
|
+
"time_format": lang_config["time_format"],
|
|
258
|
+
"initialized_at": datetime.now().isoformat(),
|
|
259
|
+
}
|
|
260
|
+
)
|
|
261
|
+
|
|
262
|
+
# Update user settings
|
|
263
|
+
if user_name:
|
|
264
|
+
current_config.setdefault("user", {}).update({"name": user_name, "selected_at": datetime.now().isoformat()})
|
|
265
|
+
|
|
266
|
+
# Update domain settings if provided
|
|
267
|
+
if domains:
|
|
268
|
+
# Validate domains for selected language
|
|
269
|
+
valid_domains = []
|
|
270
|
+
for domain in domains:
|
|
271
|
+
if language in self.DOMAIN_LANGUAGES.get(domain, ["en"]):
|
|
272
|
+
valid_domains.append(domain)
|
|
273
|
+
|
|
274
|
+
current_config.setdefault("project", {}).update(
|
|
275
|
+
{
|
|
276
|
+
"selected_domains": valid_domains,
|
|
277
|
+
"domain_selection_date": datetime.now().isoformat(),
|
|
278
|
+
}
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
# Generate localized templates
|
|
282
|
+
templates = self._generate_localized_templates(language)
|
|
283
|
+
|
|
284
|
+
# Save updated configuration
|
|
285
|
+
self.config_path.write_text(json.dumps(current_config, indent=2, ensure_ascii=False), encoding="utf-8")
|
|
286
|
+
|
|
287
|
+
return {
|
|
288
|
+
"language": language,
|
|
289
|
+
"language_config": lang_config,
|
|
290
|
+
"updated_config": current_config,
|
|
291
|
+
"templates": templates,
|
|
292
|
+
"domains_supported": self._get_supported_domains(language),
|
|
293
|
+
"token_cost_impact": self._calculate_token_impact(language),
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
def _generate_localized_templates(self, language: str) -> Dict[str, str]:
|
|
297
|
+
"""Generate language-specific templates and prompts."""
|
|
298
|
+
|
|
299
|
+
templates = {
|
|
300
|
+
"welcome_message": "",
|
|
301
|
+
"error_messages": {},
|
|
302
|
+
"success_messages": {},
|
|
303
|
+
"prompts": {},
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
if language == "ko":
|
|
307
|
+
templates.update(
|
|
308
|
+
{
|
|
309
|
+
"welcome_message": "MoAI 프로젝트에 오신 것을 환영합니다!",
|
|
310
|
+
"error_messages": {
|
|
311
|
+
"config_load_error": "구성 파일을 로드할 수 없습니다.",
|
|
312
|
+
"invalid_language": "지원되지 않는 언어입니다.",
|
|
313
|
+
"file_not_found": "파일을 찾을 수 없습니다.",
|
|
314
|
+
},
|
|
315
|
+
"success_messages": {
|
|
316
|
+
"config_saved": "구성이 성공적으로 저장되었습니다.",
|
|
317
|
+
"project_initialized": "프로젝트가 초기화되었습니다.",
|
|
318
|
+
"language_set": "언어가 한국어로 설정되었습니다.",
|
|
319
|
+
},
|
|
320
|
+
"prompts": {
|
|
321
|
+
"select_language": "사용할 언어를 선택해주세요:",
|
|
322
|
+
"enter_name": "사용자 이름을 입력해주세요:",
|
|
323
|
+
"select_domains": "작업할 도메인을 선택해주세요:",
|
|
324
|
+
},
|
|
325
|
+
}
|
|
326
|
+
)
|
|
327
|
+
elif language == "ja":
|
|
328
|
+
templates.update(
|
|
329
|
+
{
|
|
330
|
+
"welcome_message": "MoAIプロジェクトへようこそ!",
|
|
331
|
+
"error_messages": {
|
|
332
|
+
"config_load_error": "設定ファイルを読み込めませんでした。",
|
|
333
|
+
"invalid_language": "サポートされていない言語です。",
|
|
334
|
+
"file_not_found": "ファイルが見つかりません。",
|
|
335
|
+
},
|
|
336
|
+
"success_messages": {
|
|
337
|
+
"config_saved": "設定が正常に保存されました。",
|
|
338
|
+
"project_initialized": "プロジェクトが初期化されました。",
|
|
339
|
+
"language_set": "言語が日本語に設定されました。",
|
|
340
|
+
},
|
|
341
|
+
"prompts": {
|
|
342
|
+
"select_language": "使用する言語を選択してください:",
|
|
343
|
+
"enter_name": "ユーザー名を入力してください:",
|
|
344
|
+
"select_domains": "作業するドメインを選択してください:",
|
|
345
|
+
},
|
|
346
|
+
}
|
|
347
|
+
)
|
|
348
|
+
elif language == "zh":
|
|
349
|
+
templates.update(
|
|
350
|
+
{
|
|
351
|
+
"welcome_message": "欢迎使用 MoAI 项目!",
|
|
352
|
+
"error_messages": {
|
|
353
|
+
"config_load_error": "无法加载配置文件。",
|
|
354
|
+
"invalid_language": "不支持的语言。",
|
|
355
|
+
"file_not_found": "找不到文件。",
|
|
356
|
+
},
|
|
357
|
+
"success_messages": {
|
|
358
|
+
"config_saved": "配置已成功保存。",
|
|
359
|
+
"project_initialized": "项目已初始化。",
|
|
360
|
+
"language_set": "语言已设置为中文。",
|
|
361
|
+
},
|
|
362
|
+
"prompts": {
|
|
363
|
+
"select_language": "请选择使用的语言:",
|
|
364
|
+
"enter_name": "请输入用户名:",
|
|
365
|
+
"select_domains": "请选择工作领域:",
|
|
366
|
+
},
|
|
367
|
+
}
|
|
368
|
+
)
|
|
369
|
+
else: # English (default)
|
|
370
|
+
templates.update(
|
|
371
|
+
{
|
|
372
|
+
"welcome_message": "Welcome to MoAI Project!",
|
|
373
|
+
"error_messages": {
|
|
374
|
+
"config_load_error": "Cannot load configuration file.",
|
|
375
|
+
"invalid_language": "Unsupported language.",
|
|
376
|
+
"file_not_found": "File not found.",
|
|
377
|
+
},
|
|
378
|
+
"success_messages": {
|
|
379
|
+
"config_saved": "Configuration saved successfully.",
|
|
380
|
+
"project_initialized": "Project initialized successfully.",
|
|
381
|
+
"language_set": "Language set to English.",
|
|
382
|
+
},
|
|
383
|
+
"prompts": {
|
|
384
|
+
"select_language": "Please select your preferred language:",
|
|
385
|
+
"enter_name": "Please enter your name:",
|
|
386
|
+
"select_domains": "Please select your work domains:",
|
|
387
|
+
},
|
|
388
|
+
}
|
|
389
|
+
)
|
|
390
|
+
|
|
391
|
+
return templates
|
|
392
|
+
|
|
393
|
+
def _get_supported_domains(self, language: str) -> List[str]:
|
|
394
|
+
"""Get list of domains supported for the given language."""
|
|
395
|
+
|
|
396
|
+
supported = []
|
|
397
|
+
for domain, langs in self.DOMAIN_LANGUAGES.items():
|
|
398
|
+
if language in langs:
|
|
399
|
+
supported.append(domain)
|
|
400
|
+
|
|
401
|
+
return sorted(supported)
|
|
402
|
+
|
|
403
|
+
def _calculate_token_impact(self, language: str) -> Dict[str, Any]:
|
|
404
|
+
"""Calculate token cost impact for the selected language."""
|
|
405
|
+
|
|
406
|
+
impact = {
|
|
407
|
+
"language": language,
|
|
408
|
+
"conversation_overhead": 0,
|
|
409
|
+
"agent_prompt_overhead": 0,
|
|
410
|
+
"documentation_overhead": 0,
|
|
411
|
+
"total_overhead_percentage": 0,
|
|
412
|
+
"recommendations": [],
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
if language == "en":
|
|
416
|
+
impact.update(
|
|
417
|
+
{
|
|
418
|
+
"conversation_overhead": 0,
|
|
419
|
+
"agent_prompt_overhead": 0,
|
|
420
|
+
"documentation_overhead": 0,
|
|
421
|
+
"total_overhead_percentage": 0,
|
|
422
|
+
"recommendations": [
|
|
423
|
+
"Most token-efficient choice",
|
|
424
|
+
"Widely supported documentation and libraries",
|
|
425
|
+
],
|
|
426
|
+
}
|
|
427
|
+
)
|
|
428
|
+
else:
|
|
429
|
+
# Non-English languages typically require 15-25% more tokens
|
|
430
|
+
overhead_percentage = 20
|
|
431
|
+
|
|
432
|
+
impact.update(
|
|
433
|
+
{
|
|
434
|
+
"conversation_overhead": overhead_percentage,
|
|
435
|
+
"agent_prompt_overhead": (
|
|
436
|
+
15
|
|
437
|
+
if self.LANGUAGE_CONFIG[language]["agent_prompt_language"] == "english"
|
|
438
|
+
else overhead_percentage
|
|
439
|
+
),
|
|
440
|
+
"documentation_overhead": overhead_percentage,
|
|
441
|
+
"total_overhead_percentage": overhead_percentage,
|
|
442
|
+
"recommendations": [
|
|
443
|
+
f"Expect ~{overhead_percentage}% increase in token usage",
|
|
444
|
+
"Consider using English for agent prompts to reduce costs",
|
|
445
|
+
"Localized prompts provide better user experience",
|
|
446
|
+
],
|
|
447
|
+
}
|
|
448
|
+
)
|
|
449
|
+
|
|
450
|
+
return impact
|
|
451
|
+
|
|
452
|
+
def localize_agent_prompts(self, prompt_template: str, language: str = None) -> str:
|
|
453
|
+
"""
|
|
454
|
+
Localize agent prompts based on language configuration.
|
|
455
|
+
|
|
456
|
+
Args:
|
|
457
|
+
prompt_template: Base prompt template
|
|
458
|
+
language: Target language (uses config default if not provided)
|
|
459
|
+
|
|
460
|
+
Returns:
|
|
461
|
+
Localized prompt string
|
|
462
|
+
"""
|
|
463
|
+
|
|
464
|
+
if not language:
|
|
465
|
+
language = self.detect_project_language()
|
|
466
|
+
|
|
467
|
+
# Load current configuration
|
|
468
|
+
if self.config_path.exists():
|
|
469
|
+
config = json.loads(self.config_path.read_text(encoding="utf-8"))
|
|
470
|
+
agent_lang = config.get("language", {}).get("agent_prompt_language", "english")
|
|
471
|
+
else:
|
|
472
|
+
agent_lang = "english"
|
|
473
|
+
|
|
474
|
+
# If agent prompts should be in English, return as-is
|
|
475
|
+
if agent_lang == "english":
|
|
476
|
+
return prompt_template
|
|
477
|
+
|
|
478
|
+
# Apply language-specific localizations
|
|
479
|
+
localized_prompt = prompt_template
|
|
480
|
+
|
|
481
|
+
if language == "ko":
|
|
482
|
+
# Add Korean-specific instructions
|
|
483
|
+
korean_additions = (
|
|
484
|
+
"\n\nIMPORTANT: Please respond in Korean (한국어) "
|
|
485
|
+
"when interacting with the user. Use formal polite form (합니다/입니다 style)."
|
|
486
|
+
)
|
|
487
|
+
localized_prompt += korean_additions
|
|
488
|
+
|
|
489
|
+
elif language == "ja":
|
|
490
|
+
# Add Japanese-specific instructions
|
|
491
|
+
japanese_additions = (
|
|
492
|
+
"\n\nIMPORTANT: Please respond in Japanese (日本語) "
|
|
493
|
+
"when interacting with the user. Use polite form (です/ます style)."
|
|
494
|
+
)
|
|
495
|
+
localized_prompt += japanese_additions
|
|
496
|
+
|
|
497
|
+
elif language == "zh":
|
|
498
|
+
# Add Chinese-specific instructions
|
|
499
|
+
chinese_additions = (
|
|
500
|
+
"\n\nIMPORTANT: Please respond in Chinese (中文) when interacting with the user. Use standard Mandarin."
|
|
501
|
+
)
|
|
502
|
+
localized_prompt += chinese_additions
|
|
503
|
+
|
|
504
|
+
return localized_prompt
|
|
505
|
+
|
|
506
|
+
def create_multilingual_documentation_structure(self, language: str = None) -> Dict[str, Any]:
|
|
507
|
+
"""
|
|
508
|
+
Create documentation structure for multilingual support.
|
|
509
|
+
|
|
510
|
+
Args:
|
|
511
|
+
language: Primary language for documentation
|
|
512
|
+
|
|
513
|
+
Returns:
|
|
514
|
+
Documentation structure configuration
|
|
515
|
+
"""
|
|
516
|
+
|
|
517
|
+
if not language:
|
|
518
|
+
language = self.detect_project_language()
|
|
519
|
+
|
|
520
|
+
docs_root = self.project_root / "docs"
|
|
521
|
+
|
|
522
|
+
# Create language-specific directories
|
|
523
|
+
lang_dirs = {
|
|
524
|
+
"primary": docs_root / language,
|
|
525
|
+
"en": docs_root / "en", # Always include English as fallback
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
# Create additional language directories if needed
|
|
529
|
+
for lang_code in ["ko", "ja", "zh"]:
|
|
530
|
+
if lang_code != language:
|
|
531
|
+
lang_dirs[lang_code] = docs_root / lang_code
|
|
532
|
+
|
|
533
|
+
# Ensure directories exist
|
|
534
|
+
for lang_dir in lang_dirs.values():
|
|
535
|
+
lang_dir.mkdir(parents=True, exist_ok=True)
|
|
536
|
+
|
|
537
|
+
# Create language index
|
|
538
|
+
language_index = {
|
|
539
|
+
"primary_language": language,
|
|
540
|
+
"supported_languages": list(lang_dirs.keys()),
|
|
541
|
+
"directory_structure": {k: str(v) for k, v in lang_dirs.items()},
|
|
542
|
+
"fallback_language": "en",
|
|
543
|
+
"auto_redirect": True,
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
# Save language index
|
|
547
|
+
index_path = docs_root / "languages.json"
|
|
548
|
+
index_path.write_text(json.dumps(language_index, indent=2, ensure_ascii=False), encoding="utf-8")
|
|
549
|
+
|
|
550
|
+
# Create .htaccess for language redirection (if web docs)
|
|
551
|
+
htaccess_content = f"""
|
|
552
|
+
# Language negotiation
|
|
553
|
+
Options +MultiViews
|
|
554
|
+
AddLanguage ko .ko
|
|
555
|
+
AddLanguage ja .ja
|
|
556
|
+
AddLanguage zh .zh
|
|
557
|
+
AddLanguage en .en
|
|
558
|
+
|
|
559
|
+
# Default language
|
|
560
|
+
DefaultLanguage {language}
|
|
561
|
+
|
|
562
|
+
# Force language for specific files
|
|
563
|
+
<Files "README">
|
|
564
|
+
ForceType text/html
|
|
565
|
+
Header set Content-Language {language}
|
|
566
|
+
</Files>
|
|
567
|
+
"""
|
|
568
|
+
|
|
569
|
+
htaccess_path = docs_root / ".htaccess"
|
|
570
|
+
htaccess_path.write_text(htaccess_content.strip(), encoding="utf-8")
|
|
571
|
+
|
|
572
|
+
return {
|
|
573
|
+
"created_directories": [str(d) for d in lang_dirs.values()],
|
|
574
|
+
"language_index": language_index,
|
|
575
|
+
"primary_language": language,
|
|
576
|
+
"total_languages": len(lang_dirs),
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
def validate_language_configuration(self) -> Dict[str, Any]:
|
|
580
|
+
"""
|
|
581
|
+
Validate current language configuration.
|
|
582
|
+
|
|
583
|
+
Returns:
|
|
584
|
+
Validation results with recommendations
|
|
585
|
+
"""
|
|
586
|
+
|
|
587
|
+
validation_result = {
|
|
588
|
+
"valid": True,
|
|
589
|
+
"errors": [],
|
|
590
|
+
"warnings": [],
|
|
591
|
+
"recommendations": [],
|
|
592
|
+
"current_config": {},
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
if not self.config_path.exists():
|
|
596
|
+
validation_result["errors"].append("Configuration file does not exist")
|
|
597
|
+
validation_result["valid"] = False
|
|
598
|
+
return validation_result
|
|
599
|
+
|
|
600
|
+
try:
|
|
601
|
+
current_config = json.loads(self.config_path.read_text(encoding="utf-8"))
|
|
602
|
+
validation_result["current_config"] = current_config
|
|
603
|
+
|
|
604
|
+
# Validate language section
|
|
605
|
+
language_config = current_config.get("language", {})
|
|
606
|
+
|
|
607
|
+
# Check required fields
|
|
608
|
+
required_fields = [
|
|
609
|
+
"conversation_language",
|
|
610
|
+
"conversation_language_name",
|
|
611
|
+
"agent_prompt_language",
|
|
612
|
+
"documentation_language",
|
|
613
|
+
]
|
|
614
|
+
|
|
615
|
+
for field in required_fields:
|
|
616
|
+
if field not in language_config:
|
|
617
|
+
validation_result["errors"].append(f"Missing required field: language.{field}")
|
|
618
|
+
validation_result["valid"] = False
|
|
619
|
+
|
|
620
|
+
# Validate language codes
|
|
621
|
+
conv_lang = language_config.get("conversation_language")
|
|
622
|
+
if conv_lang and conv_lang not in self.LANGUAGE_CONFIG:
|
|
623
|
+
validation_result["errors"].append(f"Invalid conversation language: {conv_lang}")
|
|
624
|
+
validation_result["valid"] = False
|
|
625
|
+
|
|
626
|
+
# Check agent prompt language consistency
|
|
627
|
+
agent_lang = language_config.get("agent_prompt_language")
|
|
628
|
+
if agent_lang and agent_lang not in ["english", "localized"]:
|
|
629
|
+
validation_result["warnings"].append(f"Unusual agent prompt language: {agent_lang}")
|
|
630
|
+
|
|
631
|
+
# Check for optimization opportunities
|
|
632
|
+
if conv_lang != "en" and agent_lang == "localized":
|
|
633
|
+
validation_result["recommendations"].append(
|
|
634
|
+
"Consider using English for agent prompts to reduce token costs by ~15%"
|
|
635
|
+
)
|
|
636
|
+
|
|
637
|
+
# Validate user section
|
|
638
|
+
user_config = current_config.get("user", {})
|
|
639
|
+
if "name" not in user_config:
|
|
640
|
+
validation_result["recommendations"].append("Set user name for personalized experience")
|
|
641
|
+
|
|
642
|
+
except json.JSONDecodeError as e:
|
|
643
|
+
validation_result["errors"].append(f"Invalid JSON in configuration: {e}")
|
|
644
|
+
validation_result["valid"] = False
|
|
645
|
+
|
|
646
|
+
return validation_result
|
|
647
|
+
|
|
648
|
+
def update_language_settings(self, updates: Dict[str, Any]) -> Dict[str, Any]:
|
|
649
|
+
"""
|
|
650
|
+
Update specific language settings.
|
|
651
|
+
|
|
652
|
+
Args:
|
|
653
|
+
updates: Dictionary of settings to update
|
|
654
|
+
|
|
655
|
+
Returns:
|
|
656
|
+
Update results
|
|
657
|
+
"""
|
|
658
|
+
|
|
659
|
+
if not self.config_path.exists():
|
|
660
|
+
return {"success": False, "error": "Configuration file does not exist"}
|
|
661
|
+
|
|
662
|
+
try:
|
|
663
|
+
# Load current config
|
|
664
|
+
current_config = json.loads(self.config_path.read_text(encoding="utf-8"))
|
|
665
|
+
|
|
666
|
+
# Apply updates
|
|
667
|
+
for key_path, value in updates.items():
|
|
668
|
+
keys = key_path.split(".")
|
|
669
|
+
target = current_config
|
|
670
|
+
|
|
671
|
+
for key in keys[:-1]:
|
|
672
|
+
target = target.setdefault(key, {})
|
|
673
|
+
|
|
674
|
+
target[keys[-1]] = value
|
|
675
|
+
|
|
676
|
+
# Save updated config
|
|
677
|
+
self.config_path.write_text(
|
|
678
|
+
json.dumps(current_config, indent=2, ensure_ascii=False),
|
|
679
|
+
encoding="utf-8",
|
|
680
|
+
)
|
|
681
|
+
|
|
682
|
+
return {
|
|
683
|
+
"success": True,
|
|
684
|
+
"updated_config": current_config,
|
|
685
|
+
"updates_applied": updates,
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
except Exception as e:
|
|
689
|
+
return {"success": False, "error": str(e)}
|
|
690
|
+
|
|
691
|
+
def get_language_status(self) -> Dict[str, Any]:
|
|
692
|
+
"""
|
|
693
|
+
Get comprehensive language configuration status.
|
|
694
|
+
|
|
695
|
+
Returns:
|
|
696
|
+
Language status and metrics
|
|
697
|
+
"""
|
|
698
|
+
|
|
699
|
+
status = {
|
|
700
|
+
"detected_language": self.detect_project_language(),
|
|
701
|
+
"configured_language": None,
|
|
702
|
+
"system_language": self._get_system_language(),
|
|
703
|
+
"supported_languages": list(self.LANGUAGE_CONFIG.keys()),
|
|
704
|
+
"configuration_exists": self.config_path.exists(),
|
|
705
|
+
"token_impact": {},
|
|
706
|
+
"domain_support": {},
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
# Load current configuration if exists
|
|
710
|
+
if self.config_path.exists():
|
|
711
|
+
try:
|
|
712
|
+
config = json.loads(self.config_path.read_text(encoding="utf-8"))
|
|
713
|
+
lang_config = config.get("language", {})
|
|
714
|
+
status["configured_language"] = lang_config.get("conversation_language")
|
|
715
|
+
|
|
716
|
+
# Calculate token impact
|
|
717
|
+
if status["configured_language"]:
|
|
718
|
+
status["token_impact"] = self._calculate_token_impact(status["configured_language"])
|
|
719
|
+
|
|
720
|
+
# Get domain support
|
|
721
|
+
if status["configured_language"]:
|
|
722
|
+
status["domain_support"] = {
|
|
723
|
+
domain: status["configured_language"] in langs
|
|
724
|
+
for domain, langs in self.DOMAIN_LANGUAGES.items()
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
except json.JSONDecodeError:
|
|
728
|
+
status["configuration_error"] = "Invalid JSON in configuration file"
|
|
729
|
+
|
|
730
|
+
return status
|