moai-adk 0.15.0__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 -392
- 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 -1525
- moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -802
- moai_adk/templates/.claude/commands/alfred/2-run.md +0 -709
- moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -1009
- 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.0.dist-info/METADATA +0 -3079
- moai_adk-0.15.0.dist-info/RECORD +0 -365
- {moai_adk-0.15.0.dist-info ā moai_adk-0.25.4.dist-info}/WHEEL +0 -0
- {moai_adk-0.15.0.dist-info ā moai_adk-0.25.4.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.15.0.dist-info ā moai_adk-0.25.4.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"""Language management commands for MoAI-ADK.
|
|
2
|
+
|
|
3
|
+
Provides commands for language configuration, template processing,
|
|
4
|
+
and multilingual content generation.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
import click
|
|
11
|
+
from rich.console import Console
|
|
12
|
+
from rich.table import Table
|
|
13
|
+
|
|
14
|
+
from ...core.claude_integration import ClaudeCLIIntegration
|
|
15
|
+
from ...core.language_config import (
|
|
16
|
+
LANGUAGE_CONFIG,
|
|
17
|
+
get_all_supported_codes,
|
|
18
|
+
get_native_name,
|
|
19
|
+
get_optimal_model,
|
|
20
|
+
)
|
|
21
|
+
from ...core.template_engine import TemplateEngine
|
|
22
|
+
|
|
23
|
+
console = Console()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@click.group()
|
|
27
|
+
def language():
|
|
28
|
+
"""Language management and multilingual support."""
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@language.command()
|
|
33
|
+
@click.option("--json-output", is_flag=True, help="Output as JSON")
|
|
34
|
+
def list(json_output):
|
|
35
|
+
"""List all supported languages."""
|
|
36
|
+
if json_output:
|
|
37
|
+
console.print(json.dumps(LANGUAGE_CONFIG, indent=2, ensure_ascii=False))
|
|
38
|
+
return
|
|
39
|
+
|
|
40
|
+
table = Table(title="Supported Languages")
|
|
41
|
+
table.add_column("Code", style="cyan", no_wrap=True)
|
|
42
|
+
table.add_column("English Name", style="green")
|
|
43
|
+
table.add_column("Native Name", style="yellow")
|
|
44
|
+
table.add_column("Family", style="blue")
|
|
45
|
+
|
|
46
|
+
for code, info in LANGUAGE_CONFIG.items():
|
|
47
|
+
table.add_row(code, info["name"], info["native_name"], info["family"])
|
|
48
|
+
|
|
49
|
+
console.print(table)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@language.command()
|
|
53
|
+
@click.argument("language_code")
|
|
54
|
+
@click.option("--detail", is_flag=True, help="Show detailed information")
|
|
55
|
+
def info(language_code, detail):
|
|
56
|
+
"""Show information about a specific language."""
|
|
57
|
+
lang_info = LANGUAGE_CONFIG.get(language_code.lower())
|
|
58
|
+
|
|
59
|
+
if not lang_info:
|
|
60
|
+
console.print(f"[red]Language code '{language_code}' not found.[/red]")
|
|
61
|
+
console.print(f"Available codes: {', '.join(get_all_supported_codes())}")
|
|
62
|
+
return
|
|
63
|
+
|
|
64
|
+
console.print("[bold]Language Information:[/bold]")
|
|
65
|
+
console.print(f"Code: {language_code}")
|
|
66
|
+
console.print(f"English Name: {lang_info['name']}")
|
|
67
|
+
console.print(f"Native Name: {lang_info['native_name']}")
|
|
68
|
+
console.print(f"Family: {lang_info['family']}")
|
|
69
|
+
|
|
70
|
+
if detail:
|
|
71
|
+
optimal_model = get_optimal_model(language_code)
|
|
72
|
+
console.print(f"Optimal Claude Model: {optimal_model}")
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
@language.command()
|
|
76
|
+
@click.argument("template_path", type=click.Path(exists=True))
|
|
77
|
+
@click.argument("variables_file", type=click.Path(exists=True))
|
|
78
|
+
@click.option("--output", "-o", type=click.Path(), help="Output file path")
|
|
79
|
+
@click.option("--language", "-l", help="Target language code")
|
|
80
|
+
def render_template(template_path, variables_file, output, language):
|
|
81
|
+
"""Render template with variables and language support."""
|
|
82
|
+
try:
|
|
83
|
+
# Load variables
|
|
84
|
+
with open(variables_file, "r", encoding="utf-8") as f:
|
|
85
|
+
variables = json.load(f)
|
|
86
|
+
|
|
87
|
+
# Add language info if specified
|
|
88
|
+
if language:
|
|
89
|
+
variables["CONVERSATION_LANGUAGE"] = language
|
|
90
|
+
variables["CONVERSATION_LANGUAGE_NAME"] = get_native_name(language)
|
|
91
|
+
|
|
92
|
+
# Render template
|
|
93
|
+
template_engine = TemplateEngine()
|
|
94
|
+
template_path_obj = Path(template_path)
|
|
95
|
+
output_path_obj = Path(output) if output else None
|
|
96
|
+
|
|
97
|
+
rendered = template_engine.render_file(
|
|
98
|
+
template_path_obj, variables, output_path_obj
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
if not output:
|
|
102
|
+
console.print("[bold]Rendered Template:[/bold]")
|
|
103
|
+
console.print(rendered)
|
|
104
|
+
else:
|
|
105
|
+
console.print(f"[green]Template rendered to: {output}[/green]")
|
|
106
|
+
|
|
107
|
+
except Exception as e:
|
|
108
|
+
console.print(f"[red]Error rendering template: {e}[/red]")
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
@language.command()
|
|
112
|
+
@click.argument("base_description")
|
|
113
|
+
@click.option("--target-languages", "-t", help="Comma-separated target language codes")
|
|
114
|
+
@click.option("--output", "-o", type=click.Path(), help="Output JSON file")
|
|
115
|
+
def translate_descriptions(base_description, target_languages, output):
|
|
116
|
+
"""Generate multilingual descriptions using Claude CLI."""
|
|
117
|
+
try:
|
|
118
|
+
if target_languages:
|
|
119
|
+
languages = [lang.strip() for lang in target_languages.split(",")]
|
|
120
|
+
else:
|
|
121
|
+
languages = ["en", "ko", "ja", "es", "fr", "de"]
|
|
122
|
+
|
|
123
|
+
claude_integration = ClaudeCLIIntegration()
|
|
124
|
+
descriptions = claude_integration.generate_multilingual_descriptions(
|
|
125
|
+
{"base": base_description}, languages
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
if output:
|
|
129
|
+
with open(output, "w", encoding="utf-8") as f:
|
|
130
|
+
json.dump(descriptions, f, indent=2, ensure_ascii=False)
|
|
131
|
+
console.print(f"[green]Descriptions saved to: {output}[/green]")
|
|
132
|
+
else:
|
|
133
|
+
console.print("[bold]Multilingual Descriptions:[/bold]")
|
|
134
|
+
console.print(json.dumps(descriptions, indent=2, ensure_ascii=False))
|
|
135
|
+
|
|
136
|
+
except Exception as e:
|
|
137
|
+
console.print(f"[red]Error generating descriptions: {e}[/red]")
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
@language.command()
|
|
141
|
+
@click.argument("prompt_template")
|
|
142
|
+
@click.option(
|
|
143
|
+
"--variables", "-v", type=click.Path(exists=True), help="Variables JSON file"
|
|
144
|
+
)
|
|
145
|
+
@click.option("--language", "-l", help="Target language code")
|
|
146
|
+
@click.option(
|
|
147
|
+
"--output-format", default="json", help="Output format (text, json, stream-json)"
|
|
148
|
+
)
|
|
149
|
+
@click.option("--dry-run", is_flag=True, help="Show command without executing")
|
|
150
|
+
def execute(prompt_template, variables, language, output_format, dry_run):
|
|
151
|
+
"""Execute Claude CLI with template variables and language support."""
|
|
152
|
+
try:
|
|
153
|
+
# Load or create variables
|
|
154
|
+
template_vars = {}
|
|
155
|
+
if variables:
|
|
156
|
+
with open(variables, "r", encoding="utf-8") as f:
|
|
157
|
+
template_vars = json.load(f)
|
|
158
|
+
|
|
159
|
+
if language:
|
|
160
|
+
template_vars["CONVERSATION_LANGUAGE"] = language
|
|
161
|
+
template_vars["CONVERSATION_LANGUAGE_NAME"] = get_native_name(language)
|
|
162
|
+
|
|
163
|
+
# Process template
|
|
164
|
+
template_engine = TemplateEngine()
|
|
165
|
+
processed_prompt = template_engine.render_string(prompt_template, template_vars)
|
|
166
|
+
|
|
167
|
+
if dry_run:
|
|
168
|
+
console.print("[bold]Dry Run - Command that would be executed:[/bold]")
|
|
169
|
+
console.print(
|
|
170
|
+
f"claude --print --output-format {output_format} '{processed_prompt}'"
|
|
171
|
+
)
|
|
172
|
+
console.print("[bold]Variables used:[/bold]")
|
|
173
|
+
console.print(json.dumps(template_vars, indent=2, ensure_ascii=False))
|
|
174
|
+
return
|
|
175
|
+
|
|
176
|
+
# Execute with Claude integration
|
|
177
|
+
claude_integration = ClaudeCLIIntegration()
|
|
178
|
+
result = claude_integration.process_template_command(
|
|
179
|
+
prompt_template, template_vars, print_mode=True, output_format=output_format
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
if result["success"]:
|
|
183
|
+
console.print("[green]ā Command executed successfully[/green]")
|
|
184
|
+
if output_format == "json" and result["stdout"]:
|
|
185
|
+
try:
|
|
186
|
+
output_data = json.loads(result["stdout"])
|
|
187
|
+
console.print(json.dumps(output_data, indent=2, ensure_ascii=False))
|
|
188
|
+
except json.JSONDecodeError:
|
|
189
|
+
console.print(result["stdout"])
|
|
190
|
+
else:
|
|
191
|
+
console.print(result["stdout"])
|
|
192
|
+
else:
|
|
193
|
+
console.print("[red]ā Command execution failed[/red]")
|
|
194
|
+
if "error" in result:
|
|
195
|
+
console.print(f"Error: {result['error']}")
|
|
196
|
+
if result["stderr"]:
|
|
197
|
+
console.print(f"Stderr: {result['stderr']}")
|
|
198
|
+
|
|
199
|
+
except Exception as e:
|
|
200
|
+
console.print(f"[red]Error executing command: {e}[/red]")
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
@language.command()
|
|
204
|
+
@click.argument("config_file", type=click.Path(exists=True))
|
|
205
|
+
@click.option(
|
|
206
|
+
"--validate-languages", is_flag=True, help="Validate language codes in config"
|
|
207
|
+
)
|
|
208
|
+
def validate_config(config_file, validate_languages):
|
|
209
|
+
"""Validate language configuration in MoAI-ADK config file."""
|
|
210
|
+
try:
|
|
211
|
+
with open(config_file, "r", encoding="utf-8") as f:
|
|
212
|
+
config = json.load(f)
|
|
213
|
+
|
|
214
|
+
console.print(f"[bold]Validating config: {config_file}[/bold]")
|
|
215
|
+
|
|
216
|
+
# Basic structure validation
|
|
217
|
+
if "language" not in config:
|
|
218
|
+
console.print("[yellow]ā No 'language' section found in config[/yellow]")
|
|
219
|
+
else:
|
|
220
|
+
lang_config = config["language"]
|
|
221
|
+
if not isinstance(lang_config, dict):
|
|
222
|
+
console.print("[red]ā 'language' section must be an object[/red]")
|
|
223
|
+
else:
|
|
224
|
+
console.print("[green]ā Language section structure is valid[/green]")
|
|
225
|
+
|
|
226
|
+
# Check conversation_language
|
|
227
|
+
conv_lang = lang_config.get("conversation_language")
|
|
228
|
+
if conv_lang:
|
|
229
|
+
if conv_lang in get_all_supported_codes():
|
|
230
|
+
console.print(
|
|
231
|
+
f"[green]ā conversation_language '{conv_lang}' is supported[/green]"
|
|
232
|
+
)
|
|
233
|
+
else:
|
|
234
|
+
console.print(
|
|
235
|
+
f"[red]ā conversation_language '{conv_lang}' is not supported[/red]"
|
|
236
|
+
)
|
|
237
|
+
else:
|
|
238
|
+
console.print(
|
|
239
|
+
"[yellow]ā No conversation_language specified[/yellow]"
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
# Check conversation_language_name
|
|
243
|
+
conv_lang_name = lang_config.get("conversation_language_name")
|
|
244
|
+
if conv_lang_name and conv_lang:
|
|
245
|
+
expected_name = get_native_name(conv_lang)
|
|
246
|
+
if conv_lang_name == expected_name:
|
|
247
|
+
console.print(
|
|
248
|
+
"[green]ā conversation_language_name matches[/green]"
|
|
249
|
+
)
|
|
250
|
+
else:
|
|
251
|
+
console.print(
|
|
252
|
+
f"[yellow]ā conversation_language_name '{conv_lang_name}' doesn't match expected '{expected_name}'[/yellow]"
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
if validate_languages:
|
|
256
|
+
# Scan entire config for language codes
|
|
257
|
+
config_str = json.dumps(config)
|
|
258
|
+
found_codes = []
|
|
259
|
+
for code in get_all_supported_codes():
|
|
260
|
+
if code in config_str:
|
|
261
|
+
found_codes.append(code)
|
|
262
|
+
|
|
263
|
+
if found_codes:
|
|
264
|
+
console.print(
|
|
265
|
+
f"[blue]Found language codes in config: {', '.join(found_codes)}[/blue]"
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
except Exception as e:
|
|
269
|
+
console.print(f"[red]Error validating config: {e}[/red]")
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Migration CLI command for MoAI-ADK
|
|
3
|
+
|
|
4
|
+
Provides command-line interface for project version migrations.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
import click
|
|
12
|
+
|
|
13
|
+
from moai_adk.core.migration import VersionMigrator
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@click.command()
|
|
19
|
+
@click.option(
|
|
20
|
+
"--check",
|
|
21
|
+
is_flag=True,
|
|
22
|
+
help="Check if migration is needed without executing",
|
|
23
|
+
)
|
|
24
|
+
@click.option(
|
|
25
|
+
"--dry-run",
|
|
26
|
+
is_flag=True,
|
|
27
|
+
help="Show migration plan without making changes",
|
|
28
|
+
)
|
|
29
|
+
@click.option(
|
|
30
|
+
"--no-cleanup",
|
|
31
|
+
is_flag=True,
|
|
32
|
+
help="Keep old files after migration",
|
|
33
|
+
)
|
|
34
|
+
@click.option(
|
|
35
|
+
"--rollback",
|
|
36
|
+
is_flag=True,
|
|
37
|
+
help="Rollback to the latest backup",
|
|
38
|
+
)
|
|
39
|
+
@click.option(
|
|
40
|
+
"--list-backups",
|
|
41
|
+
is_flag=True,
|
|
42
|
+
help="List available backups",
|
|
43
|
+
)
|
|
44
|
+
def migrate(check, dry_run, no_cleanup, rollback, list_backups):
|
|
45
|
+
"""
|
|
46
|
+
Migrate MoAI-ADK project to the latest version
|
|
47
|
+
|
|
48
|
+
This command automatically migrates your project structure to match
|
|
49
|
+
the latest MoAI-ADK version. It creates backups before migration
|
|
50
|
+
and can rollback if issues occur.
|
|
51
|
+
|
|
52
|
+
Examples:
|
|
53
|
+
|
|
54
|
+
# Check if migration is needed
|
|
55
|
+
moai-adk migrate --check
|
|
56
|
+
|
|
57
|
+
# Preview migration plan
|
|
58
|
+
moai-adk migrate --dry-run
|
|
59
|
+
|
|
60
|
+
# Execute migration
|
|
61
|
+
moai-adk migrate
|
|
62
|
+
|
|
63
|
+
# Migrate without cleaning up old files
|
|
64
|
+
moai-adk migrate --no-cleanup
|
|
65
|
+
|
|
66
|
+
# Rollback to latest backup
|
|
67
|
+
moai-adk migrate --rollback
|
|
68
|
+
|
|
69
|
+
# List available backups
|
|
70
|
+
moai-adk migrate --list-backups
|
|
71
|
+
"""
|
|
72
|
+
try:
|
|
73
|
+
project_root = Path.cwd()
|
|
74
|
+
migrator = VersionMigrator(project_root)
|
|
75
|
+
|
|
76
|
+
# List backups
|
|
77
|
+
if list_backups:
|
|
78
|
+
backups = migrator.backup_manager.list_backups()
|
|
79
|
+
if not backups:
|
|
80
|
+
click.echo("š¦ No backups found")
|
|
81
|
+
return
|
|
82
|
+
|
|
83
|
+
click.echo("š¦ Available backups:\n")
|
|
84
|
+
for i, backup in enumerate(backups, 1):
|
|
85
|
+
click.echo(f"{i}. {backup['description']} ({backup['timestamp']})")
|
|
86
|
+
click.echo(f" Path: {backup['path']}")
|
|
87
|
+
click.echo(f" Files: {backup['files']}")
|
|
88
|
+
click.echo()
|
|
89
|
+
return
|
|
90
|
+
|
|
91
|
+
# Rollback
|
|
92
|
+
if rollback:
|
|
93
|
+
click.echo("š Rolling back to latest backup...")
|
|
94
|
+
if migrator.rollback_to_latest_backup():
|
|
95
|
+
click.echo("ā
Rollback completed successfully")
|
|
96
|
+
sys.exit(0)
|
|
97
|
+
else:
|
|
98
|
+
click.echo("ā Rollback failed", err=True)
|
|
99
|
+
sys.exit(1)
|
|
100
|
+
|
|
101
|
+
# Check status
|
|
102
|
+
if check:
|
|
103
|
+
status = migrator.check_status()
|
|
104
|
+
version_info = status["version"]
|
|
105
|
+
migration_info = status["migration"]
|
|
106
|
+
|
|
107
|
+
click.echo("š Migration Status:\n")
|
|
108
|
+
click.echo(f"Current Version: {version_info['detected_version']}")
|
|
109
|
+
click.echo(
|
|
110
|
+
f"Needs Migration: {'Yes' if version_info['needs_migration'] else 'No'}"
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
if version_info["needs_migration"]:
|
|
114
|
+
click.echo(f"Target Version: {migration_info['target_version']}")
|
|
115
|
+
click.echo(f"Files to migrate: {migration_info['file_count']}")
|
|
116
|
+
click.echo("\nš” Run 'moai-adk migrate' to execute migration")
|
|
117
|
+
else:
|
|
118
|
+
click.echo("\nā
Project is up to date")
|
|
119
|
+
|
|
120
|
+
return
|
|
121
|
+
|
|
122
|
+
# Dry run
|
|
123
|
+
if dry_run:
|
|
124
|
+
if migrator.needs_migration():
|
|
125
|
+
migrator.migrate_to_v024(dry_run=True)
|
|
126
|
+
else:
|
|
127
|
+
click.echo("ā
Project is already up to date")
|
|
128
|
+
return
|
|
129
|
+
|
|
130
|
+
# Execute migration
|
|
131
|
+
if not migrator.needs_migration():
|
|
132
|
+
click.echo("ā
Project is already up to date")
|
|
133
|
+
return
|
|
134
|
+
|
|
135
|
+
click.echo("š MoAI-ADK Project Migration\n")
|
|
136
|
+
click.echo("This will migrate your project to v0.24.0")
|
|
137
|
+
click.echo("A backup will be created automatically\n")
|
|
138
|
+
|
|
139
|
+
# Confirm with user
|
|
140
|
+
if not click.confirm("Do you want to proceed?"):
|
|
141
|
+
click.echo("ā Migration cancelled")
|
|
142
|
+
return
|
|
143
|
+
|
|
144
|
+
# Execute migration
|
|
145
|
+
success = migrator.migrate_to_v024(dry_run=False, cleanup=not no_cleanup)
|
|
146
|
+
|
|
147
|
+
if success:
|
|
148
|
+
click.echo("\nš Migration completed successfully!")
|
|
149
|
+
sys.exit(0)
|
|
150
|
+
else:
|
|
151
|
+
click.echo("\nā Migration failed", err=True)
|
|
152
|
+
click.echo("š” Use 'moai-adk migrate --rollback' to restore from backup")
|
|
153
|
+
sys.exit(1)
|
|
154
|
+
|
|
155
|
+
except Exception as e:
|
|
156
|
+
logger.error(f"Migration command failed: {e}", exc_info=True)
|
|
157
|
+
click.echo(f"ā Error: {e}", err=True)
|
|
158
|
+
sys.exit(1)
|
moai_adk/cli/commands/status.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# @CODE:CLI-001 | SPEC: SPEC-CLI-001/spec.md | TEST: tests/unit/test_cli_commands.py
|
|
2
1
|
"""MoAI-ADK status command
|
|
3
2
|
|
|
4
3
|
Project status display:
|
|
@@ -9,11 +8,8 @@ Project status display:
|
|
|
9
8
|
## Skill Invocation Guide (English-Only)
|
|
10
9
|
|
|
11
10
|
### Related Skills
|
|
12
|
-
- **moai-foundation-tags**: For detailed TAG inventory and orphan detection
|
|
13
|
-
- Trigger: When you need to verify TAG chain integrity beyond what status shows
|
|
14
|
-
- Invocation: `Skill("moai-foundation-tags")` to scan full project for orphan TAGs
|
|
15
11
|
|
|
16
|
-
- **moai-foundation-trust**: For comprehensive TRUST
|
|
12
|
+
- **moai-foundation-trust**: For comprehensive TRUST 4-principles verification
|
|
17
13
|
- Trigger: After status shows SPECs exist, to validate code quality
|
|
18
14
|
- Invocation: `Skill("moai-foundation-trust")` to verify all quality gates
|
|
19
15
|
|
|
@@ -23,7 +19,6 @@ Project status display:
|
|
|
23
19
|
|
|
24
20
|
### When to Invoke Skills in Related Workflows
|
|
25
21
|
1. **Before starting new SPEC creation**:
|
|
26
|
-
- Run `Skill("moai-foundation-tags")` to verify no orphan TAGs exist from previous work
|
|
27
22
|
- Check the SPEC count from status command
|
|
28
23
|
|
|
29
24
|
2. **After modifications to code/docs**:
|
|
@@ -32,7 +27,7 @@ Project status display:
|
|
|
32
27
|
|
|
33
28
|
3. **Periodic health checks**:
|
|
34
29
|
- Run status command regularly
|
|
35
|
-
- When SPEC count grows, verify with `Skill("moai-foundation-
|
|
30
|
+
- When SPEC count grows, verify with `Skill("moai-foundation-trust")`
|
|
36
31
|
"""
|
|
37
32
|
|
|
38
33
|
import json
|
|
@@ -58,10 +53,12 @@ def status() -> None:
|
|
|
58
53
|
"""
|
|
59
54
|
try:
|
|
60
55
|
# Read config.json
|
|
61
|
-
config_path = Path.cwd() / ".moai" / "config.json"
|
|
56
|
+
config_path = Path.cwd() / ".moai" / "config" / "config.json"
|
|
62
57
|
if not config_path.exists():
|
|
63
|
-
console.print("[yellow]ā No .moai/config.json found[/yellow]")
|
|
64
|
-
console.print(
|
|
58
|
+
console.print("[yellow]ā No .moai/config/config.json found[/yellow]")
|
|
59
|
+
console.print(
|
|
60
|
+
"[dim]Run [cyan]python -m moai_adk init .[/cyan] to initialize the project[/dim]"
|
|
61
|
+
)
|
|
65
62
|
raise click.Abort()
|
|
66
63
|
|
|
67
64
|
with open(config_path) as f:
|
|
@@ -69,7 +66,9 @@ def status() -> None:
|
|
|
69
66
|
|
|
70
67
|
# Count SPEC documents
|
|
71
68
|
specs_dir = Path.cwd() / ".moai" / "specs"
|
|
72
|
-
spec_count =
|
|
69
|
+
spec_count = (
|
|
70
|
+
len(list(specs_dir.glob("SPEC-*/spec.md"))) if specs_dir.exists() else 0
|
|
71
|
+
)
|
|
73
72
|
|
|
74
73
|
# Build the status table
|
|
75
74
|
table = Table(show_header=False, box=None, padding=(0, 2))
|
|
@@ -79,7 +78,9 @@ def status() -> None:
|
|
|
79
78
|
# Read from project section (with legacy fallback)
|
|
80
79
|
project = config.get("project", {})
|
|
81
80
|
table.add_row("Mode", project.get("mode") or config.get("mode", "unknown"))
|
|
82
|
-
table.add_row(
|
|
81
|
+
table.add_row(
|
|
82
|
+
"Locale", project.get("locale") or config.get("locale", "unknown")
|
|
83
|
+
)
|
|
83
84
|
table.add_row("SPECs", str(spec_count))
|
|
84
85
|
|
|
85
86
|
# Optionally include Git information
|