moai-adk 0.15.1__py3-none-any.whl → 0.25.4__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 +1 -2
- moai_adk/__main__.py +85 -2
- moai_adk/cli/__init__.py +0 -1
- moai_adk/cli/commands/__init__.py +0 -1
- moai_adk/cli/commands/analyze.py +127 -0
- moai_adk/cli/commands/backup.py +5 -3
- moai_adk/cli/commands/doctor.py +35 -11
- moai_adk/cli/commands/improve_user_experience.py +348 -0
- moai_adk/cli/commands/init.py +150 -23
- moai_adk/cli/commands/language.py +269 -0
- moai_adk/cli/commands/migrate.py +158 -0
- moai_adk/cli/commands/status.py +13 -12
- moai_adk/cli/commands/update.py +364 -60
- moai_adk/cli/commands/validate_links.py +118 -0
- moai_adk/cli/main.py +3 -2
- moai_adk/cli/prompts/init_prompts.py +79 -82
- moai_adk/core/__init__.py +0 -1
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +439 -0
- moai_adk/core/claude_integration.py +421 -0
- moai_adk/core/command_helpers.py +270 -0
- moai_adk/core/config/__init__.py +6 -0
- moai_adk/core/config/auto_spec_config.py +346 -0
- moai_adk/core/config/migration.py +133 -12
- moai_adk/core/context_manager.py +279 -0
- moai_adk/core/diagnostics/slash_commands.py +0 -1
- moai_adk/core/error_recovery_system.py +1289 -0
- moai_adk/core/git/__init__.py +0 -1
- moai_adk/core/git/branch.py +0 -1
- moai_adk/core/git/branch_manager.py +4 -4
- moai_adk/core/git/checkpoint.py +1 -5
- moai_adk/core/git/commit.py +0 -1
- moai_adk/core/git/event_detector.py +3 -5
- moai_adk/core/git/manager.py +0 -1
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +925 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +169 -0
- moai_adk/core/integration/integration_tester.py +225 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +28 -18
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_validator.py +556 -0
- moai_adk/core/mcp/setup.py +113 -0
- moai_adk/core/migration/__init__.py +18 -0
- moai_adk/core/migration/backup_manager.py +208 -0
- moai_adk/core/migration/file_migrator.py +218 -0
- moai_adk/core/migration/version_detector.py +143 -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 +318 -0
- moai_adk/core/performance/parallel_processor.py +116 -0
- moai_adk/core/project/__init__.py +0 -1
- moai_adk/core/project/backup_utils.py +2 -7
- moai_adk/core/project/checker.py +3 -3
- moai_adk/core/project/detector.py +20 -40
- moai_adk/core/project/initializer.py +42 -17
- moai_adk/core/project/phase_executor.py +415 -58
- moai_adk/core/project/validator.py +6 -25
- moai_adk/core/quality/__init__.py +1 -1
- moai_adk/core/quality/trust_checker.py +64 -110
- moai_adk/core/quality/validators/__init__.py +1 -1
- moai_adk/core/quality/validators/base_validator.py +1 -1
- moai_adk/core/rollback_manager.py +993 -0
- moai_adk/core/session_manager.py +667 -0
- moai_adk/core/spec/confidence_scoring.py +749 -0
- moai_adk/core/spec/ears_template_engine.py +1182 -0
- moai_adk/core/spec/quality_validator.py +721 -0
- moai_adk/core/spec_status_manager.py +488 -0
- moai_adk/core/template/__init__.py +0 -1
- moai_adk/core/template/backup.py +41 -1
- moai_adk/core/template/config.py +11 -12
- moai_adk/core/template/languages.py +0 -1
- moai_adk/core/template/merger.py +79 -22
- moai_adk/core/template/processor.py +614 -40
- moai_adk/core/template_engine.py +36 -27
- moai_adk/foundation/git/commit_templates.py +565 -0
- moai_adk/foundation/trust/trust_principles.py +725 -0
- moai_adk/foundation/trust/validation_checklist.py +1678 -0
- moai_adk/statusline/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +107 -0
- moai_adk/statusline/config.py +364 -0
- moai_adk/statusline/enhanced_output_style_detector.py +364 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +228 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +327 -0
- moai_adk/statusline/update_checker.py +135 -0
- moai_adk/statusline/version_reader.py +647 -0
- moai_adk/templates/.git-hooks/pre-commit +66 -0
- moai_adk/templates/.git-hooks/pre-push +116 -4
- moai_adk/templates/.github/workflows/moai-gitflow.yml +1 -7
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +0 -1
- moai_adk/templates/.gitignore +44 -0
- moai_adk/templates/.mcp.json +22 -0
- moai_adk/templates/CLAUDE.md +450 -1071
- moai_adk/utils/__init__.py +0 -1
- moai_adk/utils/banner.py +0 -1
- moai_adk/utils/common.py +308 -0
- moai_adk/utils/link_validator.py +249 -0
- moai_adk/utils/logger.py +4 -9
- moai_adk/utils/safe_file_reader.py +210 -0
- moai_adk/utils/user_experience.py +531 -0
- moai_adk-0.25.4.dist-info/METADATA +2279 -0
- moai_adk-0.25.4.dist-info/RECORD +112 -0
- moai_adk/core/tags/__init__.py +0 -86
- moai_adk/core/tags/ci_validator.py +0 -463
- moai_adk/core/tags/cli.py +0 -283
- moai_adk/core/tags/generator.py +0 -109
- moai_adk/core/tags/inserter.py +0 -99
- moai_adk/core/tags/mapper.py +0 -126
- moai_adk/core/tags/parser.py +0 -76
- moai_adk/core/tags/pre_commit_validator.py +0 -393
- moai_adk/core/tags/reporter.py +0 -956
- moai_adk/core/tags/tags.py +0 -149
- moai_adk/core/tags/validator.py +0 -897
- moai_adk/templates/.claude/agents/alfred/backend-expert.md +0 -319
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -316
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -208
- moai_adk/templates/.claude/agents/alfred/devops-expert.md +0 -464
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -214
- moai_adk/templates/.claude/agents/alfred/frontend-expert.md +0 -357
- moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -406
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -423
- moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -312
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -343
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -865
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -426
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -361
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -428
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -375
- moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +0 -571
- moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1854
- moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -880
- moai_adk/templates/.claude/commands/alfred/2-run.md +0 -793
- moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -1084
- moai_adk/templates/.claude/commands/alfred/9-feedback.md +0 -149
- moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -748
- moai_adk/templates/.claude/hooks/alfred/core/timeout.py +0 -136
- moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +0 -108
- moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -29
- moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +0 -100
- moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +0 -170
- moai_adk/templates/.claude/hooks/alfred/shared/core/checkpoint.py +0 -271
- moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +0 -67
- moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +0 -749
- moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +0 -230
- moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +0 -21
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +0 -154
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +0 -174
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +0 -87
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +0 -61
- moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +0 -112
- moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +0 -1
- moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +0 -161
- moai_adk/templates/.claude/settings.json +0 -144
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +0 -70
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +0 -62
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +0 -242
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +0 -56
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +0 -444
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +0 -62
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +0 -405
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +0 -51
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +0 -355
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +0 -239
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +0 -323
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +0 -286
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +0 -126
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/SKILL.md +0 -74
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +0 -269
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +0 -150
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/SKILL.md +0 -198
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +0 -431
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +0 -141
- moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +0 -89
- moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +0 -122
- moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +0 -369
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +0 -508
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +0 -481
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +0 -100
- moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +0 -273
- moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +0 -77
- moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +0 -265
- moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +0 -539
- moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +0 -84
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +0 -137
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +0 -219
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +0 -161
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +0 -541
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +0 -622
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +0 -115
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +0 -348
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +0 -211
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +0 -288
- moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
- moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
- moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
- moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
- moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
- moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
- moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
- moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
- moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
- moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/reference.md +0 -218
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +0 -482
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +0 -278
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +0 -477
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +0 -271
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +0 -583
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +0 -526
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +0 -465
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +0 -328
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +0 -312
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +0 -285
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +0 -278
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +0 -303
- moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
- moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
- moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +0 -802
- moai_adk/templates/.claude/skills/moai-design-systems/examples.md +0 -1238
- moai_adk/templates/.claude/skills/moai-design-systems/reference.md +0 -673
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +0 -290
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +0 -1633
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +0 -660
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +0 -128
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
- moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
- moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
- moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -116
- moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
- moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
- moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +0 -127
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +0 -126
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +0 -126
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +0 -433
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +0 -624
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +0 -316
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +0 -127
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +0 -125
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +0 -133
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +0 -34
- moai_adk/templates/.claude/skills/moai-project-documentation.md +0 -622
- moai_adk/templates/.github/workflows/c-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/cpp-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/csharp-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/dart-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/go-tag-validation.yml +0 -130
- moai_adk/templates/.github/workflows/java-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/javascript-tag-validation.yml +0 -135
- moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/php-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/python-tag-validation.yml +0 -118
- moai_adk/templates/.github/workflows/release.yml +0 -118
- moai_adk/templates/.github/workflows/ruby-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/rust-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/shell-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/swift-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/tag-report.yml +0 -269
- moai_adk/templates/.github/workflows/tag-validation.yml +0 -186
- moai_adk/templates/.github/workflows/typescript-tag-validation.yml +0 -154
- moai_adk/templates/.moai/config.json +0 -115
- moai_adk/templates/workflows/go-tag-validation.yml +0 -30
- moai_adk/templates/workflows/javascript-tag-validation.yml +0 -41
- moai_adk/templates/workflows/python-tag-validation.yml +0 -42
- moai_adk/templates/workflows/typescript-tag-validation.yml +0 -31
- moai_adk-0.15.1.dist-info/METADATA +0 -3094
- moai_adk-0.15.1.dist-info/RECORD +0 -365
- {moai_adk-0.15.1.dist-info → moai_adk-0.25.4.dist-info}/WHEEL +0 -0
- {moai_adk-0.15.1.dist-info → moai_adk-0.25.4.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.15.1.dist-info → moai_adk-0.25.4.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Integration testing utilities and helper functions.
|
|
3
|
+
|
|
4
|
+
This module contains utility functions for component discovery,
|
|
5
|
+
dependency resolution, and test result analysis.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import shutil
|
|
9
|
+
import tempfile
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any, Dict, List, Optional
|
|
12
|
+
|
|
13
|
+
from .models import IntegrationTestResult, TestComponent
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ComponentDiscovery:
|
|
17
|
+
"""
|
|
18
|
+
Component discovery utilities for integration testing.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
@staticmethod
|
|
22
|
+
def discover_components(base_path: str) -> List[TestComponent]:
|
|
23
|
+
"""
|
|
24
|
+
Discover testable components in the given path.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
base_path: Base path to search for components
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
List of discovered components
|
|
31
|
+
"""
|
|
32
|
+
components = []
|
|
33
|
+
base_dir = Path(base_path)
|
|
34
|
+
|
|
35
|
+
if not base_dir.exists():
|
|
36
|
+
return components
|
|
37
|
+
|
|
38
|
+
# Look for Python modules
|
|
39
|
+
for py_file in base_dir.rglob("*.py"):
|
|
40
|
+
if py_file.name.startswith("__"):
|
|
41
|
+
continue
|
|
42
|
+
|
|
43
|
+
relative_path = py_file.relative_to(base_dir)
|
|
44
|
+
module_name = str(relative_path.with_suffix("")).replace("/", ".")
|
|
45
|
+
|
|
46
|
+
component = TestComponent(
|
|
47
|
+
name=module_name,
|
|
48
|
+
component_type="python_module",
|
|
49
|
+
version="1.0.0", # Default version
|
|
50
|
+
)
|
|
51
|
+
components.append(component)
|
|
52
|
+
|
|
53
|
+
return components
|
|
54
|
+
|
|
55
|
+
@staticmethod
|
|
56
|
+
def resolve_dependencies(components: List[TestComponent]) -> Dict[str, List[str]]:
|
|
57
|
+
"""
|
|
58
|
+
Resolve dependencies between components.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
components: List of components to analyze
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
Dictionary mapping component names to their dependencies
|
|
65
|
+
"""
|
|
66
|
+
dependency_map = {}
|
|
67
|
+
|
|
68
|
+
for component in components:
|
|
69
|
+
try:
|
|
70
|
+
# Try to import and analyze dependencies
|
|
71
|
+
dependencies = ComponentDiscovery._analyze_imports(component)
|
|
72
|
+
dependency_map[component.name] = dependencies
|
|
73
|
+
except Exception:
|
|
74
|
+
dependency_map[component.name] = component.dependencies
|
|
75
|
+
|
|
76
|
+
return dependency_map
|
|
77
|
+
|
|
78
|
+
@staticmethod
|
|
79
|
+
def _analyze_imports(component: TestComponent) -> List[str]:
|
|
80
|
+
"""
|
|
81
|
+
Analyze imports for a component to determine dependencies.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
component: Component to analyze
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
List of dependency names
|
|
88
|
+
"""
|
|
89
|
+
# This is a simplified implementation
|
|
90
|
+
# In a real scenario, you would parse the source code
|
|
91
|
+
return component.dependencies
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class TestResultAnalyzer:
|
|
95
|
+
"""
|
|
96
|
+
Test result analysis utilities.
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
@staticmethod
|
|
100
|
+
def calculate_success_rate(results: List[IntegrationTestResult]) -> float:
|
|
101
|
+
"""
|
|
102
|
+
Calculate the success rate of test results.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
results: List of test results
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
Success rate as percentage (0-100)
|
|
109
|
+
"""
|
|
110
|
+
if not results:
|
|
111
|
+
return 0.0
|
|
112
|
+
|
|
113
|
+
passed = sum(1 for result in results if result.passed)
|
|
114
|
+
return (passed / len(results)) * 100
|
|
115
|
+
|
|
116
|
+
@staticmethod
|
|
117
|
+
def get_failed_tests(
|
|
118
|
+
results: List[IntegrationTestResult],
|
|
119
|
+
) -> List[IntegrationTestResult]:
|
|
120
|
+
"""
|
|
121
|
+
Get list of failed tests.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
results: List of test results
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
List of failed test results
|
|
128
|
+
"""
|
|
129
|
+
return [result for result in results if not result.passed]
|
|
130
|
+
|
|
131
|
+
@staticmethod
|
|
132
|
+
def get_execution_stats(results: List[IntegrationTestResult]) -> Dict[str, Any]:
|
|
133
|
+
"""
|
|
134
|
+
Get execution statistics for test results.
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
results: List of test results
|
|
138
|
+
|
|
139
|
+
Returns:
|
|
140
|
+
Dictionary with execution statistics
|
|
141
|
+
"""
|
|
142
|
+
if not results:
|
|
143
|
+
return {
|
|
144
|
+
"total": 0,
|
|
145
|
+
"passed": 0,
|
|
146
|
+
"failed": 0,
|
|
147
|
+
"success_rate": 0.0,
|
|
148
|
+
"total_time": 0.0,
|
|
149
|
+
"avg_time": 0.0,
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
passed = sum(1 for result in results if result.passed)
|
|
153
|
+
failed = len(results) - passed
|
|
154
|
+
total_time = sum(result.execution_time for result in results)
|
|
155
|
+
|
|
156
|
+
return {
|
|
157
|
+
"total": len(results),
|
|
158
|
+
"passed": passed,
|
|
159
|
+
"failed": failed,
|
|
160
|
+
"success_rate": TestResultAnalyzer.calculate_success_rate(results),
|
|
161
|
+
"total_time": total_time,
|
|
162
|
+
"avg_time": total_time / len(results),
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class TestEnvironment:
|
|
167
|
+
"""
|
|
168
|
+
Test environment management utilities.
|
|
169
|
+
"""
|
|
170
|
+
|
|
171
|
+
def __init__(self, temp_dir: Optional[str] = None):
|
|
172
|
+
"""
|
|
173
|
+
Initialize test environment.
|
|
174
|
+
|
|
175
|
+
Args:
|
|
176
|
+
temp_dir: Optional temporary directory path
|
|
177
|
+
"""
|
|
178
|
+
self.temp_dir = temp_dir
|
|
179
|
+
self.created_temp = False
|
|
180
|
+
|
|
181
|
+
if self.temp_dir is None:
|
|
182
|
+
self.temp_dir = tempfile.mkdtemp(prefix="moai_integration_test_")
|
|
183
|
+
self.created_temp = True
|
|
184
|
+
|
|
185
|
+
def cleanup(self):
|
|
186
|
+
"""Clean up test environment."""
|
|
187
|
+
if self.created_temp and self.temp_dir:
|
|
188
|
+
try:
|
|
189
|
+
shutil.rmtree(self.temp_dir)
|
|
190
|
+
except Exception:
|
|
191
|
+
pass # Ignore cleanup errors
|
|
192
|
+
|
|
193
|
+
def get_temp_path(self, name: str) -> str:
|
|
194
|
+
"""
|
|
195
|
+
Get a temporary file path.
|
|
196
|
+
|
|
197
|
+
Args:
|
|
198
|
+
name: File name
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
Full path to temporary file
|
|
202
|
+
"""
|
|
203
|
+
return str(Path(self.temp_dir) / name)
|
|
204
|
+
|
|
205
|
+
def __enter__(self):
|
|
206
|
+
"""Context manager entry."""
|
|
207
|
+
return self
|
|
208
|
+
|
|
209
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
210
|
+
"""Context manager exit."""
|
|
211
|
+
self.cleanup()
|
moai_adk/core/issue_creator.py
CHANGED
|
@@ -4,8 +4,6 @@ GitHub Issue Creator for MoAI-ADK quick issue reporting.
|
|
|
4
4
|
Enables users to quickly create GitHub Issues with standardized templates
|
|
5
5
|
using `/alfred:9-feedback` interactive dialog.
|
|
6
6
|
|
|
7
|
-
@TAG:ISSUE-CREATOR-001 - GitHub issue creation system
|
|
8
|
-
@TAG:QUICK-REPORTING-001 - Quick issue reporting functionality
|
|
9
7
|
"""
|
|
10
8
|
|
|
11
9
|
import subprocess
|
|
@@ -16,6 +14,7 @@ from typing import Any, Dict, List, Optional
|
|
|
16
14
|
|
|
17
15
|
class IssueType(Enum):
|
|
18
16
|
"""Supported GitHub issue types."""
|
|
17
|
+
|
|
19
18
|
BUG = "bug"
|
|
20
19
|
FEATURE = "feature"
|
|
21
20
|
IMPROVEMENT = "improvement"
|
|
@@ -24,6 +23,7 @@ class IssueType(Enum):
|
|
|
24
23
|
|
|
25
24
|
class IssuePriority(Enum):
|
|
26
25
|
"""Issue priority levels."""
|
|
26
|
+
|
|
27
27
|
CRITICAL = "critical"
|
|
28
28
|
HIGH = "high"
|
|
29
29
|
MEDIUM = "medium"
|
|
@@ -33,6 +33,7 @@ class IssuePriority(Enum):
|
|
|
33
33
|
@dataclass
|
|
34
34
|
class IssueConfig:
|
|
35
35
|
"""Configuration for issue creation."""
|
|
36
|
+
|
|
36
37
|
issue_type: IssueType
|
|
37
38
|
title: str
|
|
38
39
|
description: str
|
|
@@ -59,7 +60,10 @@ class GitHubIssueCreator:
|
|
|
59
60
|
IssueType.BUG: ["bug", "reported"],
|
|
60
61
|
IssueType.FEATURE: ["feature-request", "enhancement"],
|
|
61
62
|
IssueType.IMPROVEMENT: ["improvement", "enhancement"],
|
|
62
|
-
IssueType.QUESTION: [
|
|
63
|
+
IssueType.QUESTION: [
|
|
64
|
+
"question",
|
|
65
|
+
"help wanted",
|
|
66
|
+
], # Fixed: "help-wanted" → "help wanted" (GitHub standard)
|
|
63
67
|
}
|
|
64
68
|
|
|
65
69
|
# Priority emoji
|
|
@@ -97,10 +101,7 @@ class GitHubIssueCreator:
|
|
|
97
101
|
"""
|
|
98
102
|
try:
|
|
99
103
|
result = subprocess.run(
|
|
100
|
-
["gh", "auth", "status"],
|
|
101
|
-
capture_output=True,
|
|
102
|
-
text=True,
|
|
103
|
-
timeout=5
|
|
104
|
+
["gh", "auth", "status"], capture_output=True, text=True, timeout=5
|
|
104
105
|
)
|
|
105
106
|
if result.returncode != 0:
|
|
106
107
|
raise RuntimeError(
|
|
@@ -145,7 +146,9 @@ class GitHubIssueCreator:
|
|
|
145
146
|
# Collect labels
|
|
146
147
|
labels = self.LABEL_MAP.get(config.issue_type, []).copy()
|
|
147
148
|
if config.priority:
|
|
148
|
-
labels.append(
|
|
149
|
+
labels.append(
|
|
150
|
+
config.priority.value
|
|
151
|
+
) # Fixed: removed "priority-" prefix (use direct label names)
|
|
149
152
|
if config.category:
|
|
150
153
|
labels.append(f"category-{config.category.lower().replace(' ', '-')}")
|
|
151
154
|
if config.custom_labels:
|
|
@@ -153,9 +156,13 @@ class GitHubIssueCreator:
|
|
|
153
156
|
|
|
154
157
|
# Build gh command
|
|
155
158
|
gh_command = [
|
|
156
|
-
"gh",
|
|
157
|
-
"
|
|
158
|
-
"
|
|
159
|
+
"gh",
|
|
160
|
+
"issue",
|
|
161
|
+
"create",
|
|
162
|
+
"--title",
|
|
163
|
+
full_title,
|
|
164
|
+
"--body",
|
|
165
|
+
body,
|
|
159
166
|
]
|
|
160
167
|
|
|
161
168
|
# Add labels
|
|
@@ -168,10 +175,7 @@ class GitHubIssueCreator:
|
|
|
168
175
|
|
|
169
176
|
try:
|
|
170
177
|
result = subprocess.run(
|
|
171
|
-
gh_command,
|
|
172
|
-
capture_output=True,
|
|
173
|
-
text=True,
|
|
174
|
-
timeout=30
|
|
178
|
+
gh_command, capture_output=True, text=True, timeout=30
|
|
175
179
|
)
|
|
176
180
|
|
|
177
181
|
if result.returncode != 0:
|
|
@@ -256,7 +260,9 @@ class GitHubIssueCreator:
|
|
|
256
260
|
output += f"🏷️ Labels: {', '.join(result['labels'])}\n"
|
|
257
261
|
return output
|
|
258
262
|
else:
|
|
259
|
-
return
|
|
263
|
+
return (
|
|
264
|
+
f"❌ Failed to create issue: {result.get('message', 'Unknown error')}"
|
|
265
|
+
)
|
|
260
266
|
|
|
261
267
|
|
|
262
268
|
class IssueCreatorFactory:
|
|
@@ -265,7 +271,9 @@ class IssueCreatorFactory:
|
|
|
265
271
|
"""
|
|
266
272
|
|
|
267
273
|
@staticmethod
|
|
268
|
-
def create_bug_issue(
|
|
274
|
+
def create_bug_issue(
|
|
275
|
+
title: str, description: str, priority: IssuePriority = IssuePriority.HIGH
|
|
276
|
+
) -> IssueConfig:
|
|
269
277
|
"""Create a bug report issue configuration."""
|
|
270
278
|
return IssueConfig(
|
|
271
279
|
issue_type=IssueType.BUG,
|
|
@@ -302,7 +310,9 @@ class IssueCreatorFactory:
|
|
|
302
310
|
)
|
|
303
311
|
|
|
304
312
|
@staticmethod
|
|
305
|
-
def create_question_issue(
|
|
313
|
+
def create_question_issue(
|
|
314
|
+
title: str, description: str, priority: IssuePriority = IssuePriority.LOW
|
|
315
|
+
) -> IssueConfig:
|
|
306
316
|
"""Create a question/discussion issue configuration."""
|
|
307
317
|
return IssueConfig(
|
|
308
318
|
issue_type=IssueType.QUESTION,
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Enhanced language configuration for MoAI-ADK.
|
|
3
|
+
|
|
4
|
+
Supports extended language list with native names and automatic translation capabilities.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Dict, Optional
|
|
8
|
+
|
|
9
|
+
# Enhanced language configuration with native names
|
|
10
|
+
LANGUAGE_CONFIG: Dict[str, Dict[str, str]] = {
|
|
11
|
+
"en": {
|
|
12
|
+
"name": "English",
|
|
13
|
+
"native_name": "English",
|
|
14
|
+
"code": "en",
|
|
15
|
+
"family": "indo-european",
|
|
16
|
+
},
|
|
17
|
+
"ko": {
|
|
18
|
+
"name": "Korean",
|
|
19
|
+
"native_name": "한국어",
|
|
20
|
+
"code": "ko",
|
|
21
|
+
"family": "koreanic",
|
|
22
|
+
},
|
|
23
|
+
"ja": {
|
|
24
|
+
"name": "Japanese",
|
|
25
|
+
"native_name": "日本語",
|
|
26
|
+
"code": "ja",
|
|
27
|
+
"family": "japonic",
|
|
28
|
+
},
|
|
29
|
+
"es": {
|
|
30
|
+
"name": "Spanish",
|
|
31
|
+
"native_name": "Español", # Spanish native representation
|
|
32
|
+
"code": "es",
|
|
33
|
+
"family": "indo-european",
|
|
34
|
+
},
|
|
35
|
+
"fr": {
|
|
36
|
+
"name": "French",
|
|
37
|
+
"native_name": "Français",
|
|
38
|
+
"code": "fr",
|
|
39
|
+
"family": "indo-european",
|
|
40
|
+
},
|
|
41
|
+
"de": {
|
|
42
|
+
"name": "German",
|
|
43
|
+
"native_name": "Deutsch",
|
|
44
|
+
"code": "de",
|
|
45
|
+
"family": "indo-european",
|
|
46
|
+
},
|
|
47
|
+
"zh": {
|
|
48
|
+
"name": "Chinese",
|
|
49
|
+
"native_name": "中文",
|
|
50
|
+
"code": "zh",
|
|
51
|
+
"family": "sino-tibetan",
|
|
52
|
+
},
|
|
53
|
+
"pt": {
|
|
54
|
+
"name": "Portuguese",
|
|
55
|
+
"native_name": "Português",
|
|
56
|
+
"code": "pt",
|
|
57
|
+
"family": "indo-european",
|
|
58
|
+
},
|
|
59
|
+
"ru": {
|
|
60
|
+
"name": "Russian",
|
|
61
|
+
"native_name": "Русский",
|
|
62
|
+
"code": "ru",
|
|
63
|
+
"family": "indo-european",
|
|
64
|
+
},
|
|
65
|
+
"it": {
|
|
66
|
+
"name": "Italian",
|
|
67
|
+
"native_name": "Italiano",
|
|
68
|
+
"code": "it",
|
|
69
|
+
"family": "indo-european",
|
|
70
|
+
},
|
|
71
|
+
"ar": {
|
|
72
|
+
"name": "Arabic",
|
|
73
|
+
"native_name": "العربية",
|
|
74
|
+
"code": "ar",
|
|
75
|
+
"family": "afro-asiatic",
|
|
76
|
+
},
|
|
77
|
+
"hi": {
|
|
78
|
+
"name": "Hindi",
|
|
79
|
+
"native_name": "हिन्दी",
|
|
80
|
+
"code": "hi",
|
|
81
|
+
"family": "indo-european",
|
|
82
|
+
},
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def get_language_info(language_code: str) -> Optional[Dict[str, str]]:
|
|
87
|
+
"""Get language information by code.
|
|
88
|
+
|
|
89
|
+
Args:
|
|
90
|
+
language_code: ISO language code (e.g., 'ko', 'en')
|
|
91
|
+
|
|
92
|
+
Returns:
|
|
93
|
+
Language information dictionary or None if not found
|
|
94
|
+
"""
|
|
95
|
+
return LANGUAGE_CONFIG.get(language_code.lower())
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def get_native_name(language_code: str) -> str:
|
|
99
|
+
"""Get native language name.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
language_code: ISO language code
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
Native language name or English fallback
|
|
106
|
+
"""
|
|
107
|
+
lang_info = get_language_info(language_code)
|
|
108
|
+
return lang_info["native_name"] if lang_info else "English"
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def get_english_name(language_code: str) -> str:
|
|
112
|
+
"""Get English language name.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
language_code: ISO language code
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
English language name or fallback
|
|
119
|
+
"""
|
|
120
|
+
lang_info = get_language_info(language_code)
|
|
121
|
+
return lang_info["name"] if lang_info else "English"
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def get_all_supported_codes() -> list[str]:
|
|
125
|
+
"""Get list of all supported language codes."""
|
|
126
|
+
return list(LANGUAGE_CONFIG.keys())
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def get_language_family(language_code: str) -> Optional[str]:
|
|
130
|
+
"""Get language family for linguistic analysis.
|
|
131
|
+
|
|
132
|
+
Args:
|
|
133
|
+
language_code: ISO language code
|
|
134
|
+
|
|
135
|
+
Returns:
|
|
136
|
+
Language family string or None
|
|
137
|
+
"""
|
|
138
|
+
lang_info = get_language_info(language_code)
|
|
139
|
+
return lang_info.get("family") if lang_info else None
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
# Language to Claude model mapping for optimal performance
|
|
143
|
+
LANGUAGE_MODEL_PREFERENCE: Dict[str, str] = {
|
|
144
|
+
"en": "claude-sonnet-4-5-20250929", # Best for English
|
|
145
|
+
"ko": "claude-sonnet-4-5-20250929", # Strong Korean support
|
|
146
|
+
"ja": "claude-sonnet-4-5-20250929", # Strong Japanese support
|
|
147
|
+
"es": "claude-sonnet-4-5-20250929", # Strong Spanish support
|
|
148
|
+
"fr": "claude-sonnet-4-5-20250929", # Strong French support
|
|
149
|
+
"de": "claude-sonnet-4-5-20250929", # Strong German support
|
|
150
|
+
"zh": "claude-sonnet-4-5-20250929", # Strong Chinese support
|
|
151
|
+
"pt": "claude-sonnet-4-5-20250929", # Portuguese support
|
|
152
|
+
"ru": "claude-sonnet-4-5-20250929", # Russian support
|
|
153
|
+
"it": "claude-sonnet-4-5-20250929", # Italian support
|
|
154
|
+
"ar": "claude-sonnet-4-5-20250929", # Arabic support
|
|
155
|
+
"hi": "claude-sonnet-4-5-20250929", # Hindi support
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def get_optimal_model(language_code: str) -> str:
|
|
160
|
+
"""Get optimal Claude model for specific language.
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
language_code: ISO language code
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
Recommended Claude model identifier
|
|
167
|
+
"""
|
|
168
|
+
return LANGUAGE_MODEL_PREFERENCE.get(language_code, "claude-sonnet-4-5-20250929")
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
# RTL (Right-to-Left) language detection
|
|
172
|
+
RTL_LANGUAGES = {"ar", "he", "fa", "ur"}
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def is_rtl_language(language_code: str) -> bool:
|
|
176
|
+
"""Check if language uses right-to-left script.
|
|
177
|
+
|
|
178
|
+
Args:
|
|
179
|
+
language_code: ISO language code
|
|
180
|
+
|
|
181
|
+
Returns:
|
|
182
|
+
True if RTL language, False otherwise
|
|
183
|
+
"""
|
|
184
|
+
return language_code.lower() in RTL_LANGUAGES
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
# Translation priorities for descriptions
|
|
188
|
+
TRANSLATION_PRIORITY = [
|
|
189
|
+
"en", # English base
|
|
190
|
+
"ko", # Korean
|
|
191
|
+
"ja", # Japanese
|
|
192
|
+
"es", # Spanish
|
|
193
|
+
"fr", # French
|
|
194
|
+
"de", # German
|
|
195
|
+
"zh", # Chinese
|
|
196
|
+
"pt", # Portuguese
|
|
197
|
+
]
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def get_translation_priority() -> list[str]:
|
|
201
|
+
"""Get language translation priority order."""
|
|
202
|
+
return TRANSLATION_PRIORITY.copy()
|