moai-adk 0.4.5__py3-none-any.whl → 0.20.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +1 -1
- moai_adk/__main__.py +74 -1
- moai_adk/cli/commands/__init__.py +1 -1
- moai_adk/cli/commands/analyze.py +119 -0
- moai_adk/cli/commands/backup.py +25 -1
- moai_adk/cli/commands/doctor.py +31 -5
- moai_adk/cli/commands/improve_user_experience.py +307 -0
- moai_adk/cli/commands/init.py +111 -10
- moai_adk/cli/commands/status.py +33 -3
- moai_adk/cli/commands/update.py +921 -130
- moai_adk/cli/commands/validate_links.py +120 -0
- moai_adk/cli/prompts/init_prompts.py +22 -87
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +388 -0
- moai_adk/core/analysis/tag_chain_analyzer.py +344 -0
- moai_adk/core/analysis/tag_chain_repair.py +879 -0
- moai_adk/core/config/__init__.py +19 -0
- moai_adk/core/config/migration.py +235 -0
- moai_adk/core/git/__init__.py +1 -1
- moai_adk/core/git/branch.py +1 -1
- moai_adk/core/git/commit.py +1 -1
- moai_adk/core/git/manager.py +1 -1
- moai_adk/core/issue_creator.py +313 -0
- moai_adk/core/mcp/setup.py +56 -0
- moai_adk/core/mcp/setup_old.py +296 -0
- moai_adk/core/project/backup_utils.py +1 -1
- moai_adk/core/project/checker.py +2 -2
- moai_adk/core/project/detector.py +211 -12
- moai_adk/core/project/initializer.py +85 -15
- moai_adk/core/project/phase_executor.py +76 -13
- moai_adk/core/project/validator.py +13 -13
- moai_adk/core/quality/__init__.py +1 -1
- moai_adk/core/quality/trust_checker.py +1 -1
- moai_adk/core/quality/validators/__init__.py +1 -1
- moai_adk/core/quality/validators/base_validator.py +1 -1
- moai_adk/core/tags/__init__.py +86 -0
- moai_adk/core/tags/auto_corrector.py +693 -0
- moai_adk/core/tags/ci_validator.py +463 -0
- moai_adk/core/tags/cli.py +283 -0
- moai_adk/core/tags/generator.py +109 -0
- moai_adk/core/tags/inserter.py +99 -0
- moai_adk/core/tags/mapper.py +126 -0
- moai_adk/core/tags/parser.py +76 -0
- moai_adk/core/tags/policy_validator.py +580 -0
- moai_adk/core/tags/pre_commit_validator.py +421 -0
- moai_adk/core/tags/reporter.py +956 -0
- moai_adk/core/tags/rollback_manager.py +525 -0
- moai_adk/core/tags/tags.py +149 -0
- moai_adk/core/tags/validator.py +897 -0
- moai_adk/core/template/__init__.py +1 -1
- moai_adk/core/template/backup.py +1 -1
- moai_adk/core/template/merger.py +50 -1
- moai_adk/core/template/processor.py +119 -13
- moai_adk/core/template_engine.py +268 -0
- moai_adk/templates/.claude/agents/alfred/backend-expert.md +348 -0
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +209 -944
- moai_adk/templates/.claude/agents/alfred/database-expert.md +352 -0
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +34 -5
- moai_adk/templates/.claude/agents/alfred/devops-expert.md +464 -0
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +38 -8
- moai_adk/templates/.claude/agents/alfred/format-expert.md +469 -0
- moai_adk/templates/.claude/agents/alfred/frontend-expert.md +357 -0
- moai_adk/templates/.claude/agents/alfred/git-manager.md +128 -9
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +104 -6
- moai_adk/templates/.claude/agents/alfred/project-manager.md +88 -16
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +36 -9
- moai_adk/templates/.claude/agents/alfred/security-expert.md +270 -0
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +865 -0
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +214 -43
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +111 -9
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +309 -160
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +36 -7
- moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +605 -0
- moai_adk/templates/.claude/commands/alfred/0-project.md +393 -966
- moai_adk/templates/.claude/commands/alfred/1-plan.md +651 -367
- moai_adk/templates/.claude/commands/alfred/2-run.md +388 -241
- moai_adk/templates/.claude/commands/alfred/3-sync.md +1921 -410
- moai_adk/templates/.claude/commands/alfred/9-feedback.md +153 -0
- moai_adk/templates/.claude/commands/alfred/release-new.md +3604 -0
- moai_adk/templates/.claude/hooks/alfred/core/project.py +484 -20
- moai_adk/templates/.claude/hooks/alfred/core/timeout.py +136 -0
- moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +108 -0
- moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +198 -0
- moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +14 -6
- moai_adk/templates/.claude/hooks/alfred/post_tool__enable_streaming_ui.py +50 -0
- moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +93 -0
- moai_adk/templates/.claude/hooks/alfred/post_tool__tag_auto_corrector.py +407 -0
- moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +99 -0
- moai_adk/templates/.claude/hooks/alfred/pre_tool__realtime_tag_monitor.py +335 -0
- moai_adk/templates/.claude/hooks/alfred/pre_tool__tag_policy_validator.py +325 -0
- moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +93 -0
- moai_adk/templates/.claude/hooks/alfred/session_start__auto_cleanup.py +580 -0
- moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +298 -0
- moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +170 -0
- moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/checkpoint.py +3 -3
- moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/context.py +5 -5
- moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +749 -0
- moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +230 -0
- moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +198 -0
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +21 -0
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/daily_analysis.py +351 -0
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +154 -0
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +174 -0
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +87 -0
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +61 -0
- moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +111 -0
- moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +1 -0
- moai_adk/templates/.claude/hooks/alfred/utils/hook_config.py +94 -0
- moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +161 -0
- moai_adk/templates/.claude/output-styles/alfred/alfred-moai-adk-beginner.md +267 -0
- moai_adk/templates/.claude/output-styles/alfred/keating-personal-tutor.md +440 -0
- moai_adk/templates/.claude/output-styles/alfred/r2d2-agentic-coding.md +583 -0
- moai_adk/templates/.claude/settings.json +96 -14
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +70 -0
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +62 -0
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +242 -0
- moai_adk/templates/.claude/skills/moai-alfred-ask-user-questions/SKILL.md +237 -0
- moai_adk/templates/.claude/skills/moai-alfred-ask-user-questions/examples.md +871 -0
- moai_adk/templates/.claude/skills/moai-alfred-ask-user-questions/reference.md +653 -0
- moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/README.md +162 -0
- moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/SKILL.md +227 -0
- moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/examples.md +354 -0
- moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/reference.md +158 -0
- moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/SKILL.md +179 -79
- moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/examples.md +117 -0
- moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/scripts/pre-review-check.sh +62 -0
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +132 -0
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +28 -0
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +444 -0
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +62 -0
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +28 -0
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +405 -0
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +51 -0
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +355 -0
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +239 -0
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +323 -0
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +286 -0
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +126 -0
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +229 -0
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +4 -0
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +150 -0
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +87 -73
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-alfred-personas/README.md +42 -0
- moai_adk/templates/.claude/skills/moai-alfred-personas/SKILL.md +429 -0
- moai_adk/templates/.claude/skills/moai-alfred-personas/examples.md +520 -0
- moai_adk/templates/.claude/skills/moai-alfred-personas/reference.md +405 -0
- moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +89 -0
- moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +122 -0
- moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +369 -0
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +508 -0
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +481 -0
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +100 -0
- moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +77 -0
- moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +265 -0
- moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +539 -0
- moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +320 -0
- moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +4 -0
- moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +84 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +137 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +219 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +161 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +541 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +622 -0
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +19 -0
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +4 -0
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +211 -0
- moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +288 -0
- moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +269 -0
- moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +32 -0
- moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +298 -0
- moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +26 -0
- moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +307 -0
- moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +21 -0
- moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +252 -0
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +19 -0
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +19 -0
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +24 -0
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +199 -0
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +39 -0
- moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +316 -0
- moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +18 -0
- moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +263 -0
- moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +30 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +482 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +303 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +524 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +477 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +429 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +391 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +431 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +577 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +273 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +466 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +583 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +526 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +608 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +328 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +312 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +245 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +285 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +278 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +303 -0
- moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +291 -0
- moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +15 -0
- moai_adk/templates/.claude/skills/moai-change-logger/SKILL.md +563 -0
- moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +802 -0
- moai_adk/templates/.claude/skills/moai-design-systems/examples.md +1238 -0
- moai_adk/templates/.claude/skills/moai-design-systems/reference.md +673 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +234 -43
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +1633 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +660 -0
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +97 -69
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +97 -72
- moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +97 -74
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +98 -74
- moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +102 -73
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +97 -73
- moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +97 -67
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +97 -79
- moai_adk/templates/.claude/skills/moai-domain-security/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-security/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +97 -71
- moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +265 -64
- moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +1064 -0
- moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +1047 -0
- moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +87 -78
- moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +87 -70
- moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +87 -86
- moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +80 -62
- moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +207 -50
- moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +29 -0
- moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +90 -71
- moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +78 -58
- moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +78 -51
- moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-foundation-trust/.!11330!examples.md +0 -0
- moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +253 -32
- moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
- moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +1099 -0
- moai_adk/templates/.claude/skills/moai-jit-docs-enhanced/SKILL.md +460 -0
- moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +98 -74
- moai_adk/templates/.claude/skills/moai-lang-c/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-c/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +98 -76
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +2358 -70
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +2962 -68
- moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +1898 -70
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +1465 -68
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +2364 -66
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +32 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +1630 -69
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +89 -61
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +735 -66
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +624 -0
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +316 -0
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +97 -73
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +98 -73
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +1834 -70
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +99 -74
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +97 -74
- moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +98 -74
- moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +1959 -69
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-template/SKILL.md +348 -0
- moai_adk/templates/.claude/skills/moai-lang-template/VARIABLES.md +98 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +1230 -66
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +34 -0
- moai_adk/templates/.claude/skills/moai-learning-optimizer/SKILL.md +575 -0
- moai_adk/templates/.claude/skills/moai-project-batch-questions/README.md +50 -0
- moai_adk/templates/.claude/skills/moai-project-batch-questions/SKILL.md +304 -0
- moai_adk/templates/.claude/skills/moai-project-batch-questions/examples.md +417 -0
- moai_adk/templates/.claude/skills/moai-project-batch-questions/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-project-config-manager/README.md +87 -0
- moai_adk/templates/.claude/skills/moai-project-config-manager/SKILL.md +552 -0
- moai_adk/templates/.claude/skills/moai-project-config-manager/examples.md +1109 -0
- moai_adk/templates/.claude/skills/moai-project-config-manager/reference.md +514 -0
- moai_adk/templates/.claude/skills/moai-project-config-manager/validate.py +106 -0
- moai_adk/templates/.claude/skills/moai-project-documentation/README.md +11 -0
- moai_adk/templates/.claude/skills/moai-project-documentation/SKILL.md +622 -0
- moai_adk/templates/.claude/skills/moai-project-documentation/examples.md +20 -0
- moai_adk/templates/.claude/skills/moai-project-documentation/reference.md +12 -0
- moai_adk/templates/.claude/skills/moai-project-language-initializer/README.md +152 -0
- moai_adk/templates/.claude/skills/moai-project-language-initializer/SKILL.md +285 -0
- moai_adk/templates/.claude/skills/moai-project-language-initializer/examples.md +333 -0
- moai_adk/templates/.claude/skills/moai-project-language-initializer/reference.md +386 -0
- moai_adk/templates/.claude/skills/moai-project-template-optimizer/README.md +49 -0
- moai_adk/templates/.claude/skills/moai-project-template-optimizer/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-project-template-optimizer/examples.md +58 -0
- moai_adk/templates/.claude/skills/moai-project-template-optimizer/reference.md +123 -0
- moai_adk/templates/.claude/skills/moai-session-info/SKILL.md +314 -0
- moai_adk/templates/.claude/skills/moai-streaming-ui/SKILL.md +552 -0
- moai_adk/templates/.claude/skills/moai-tag-policy-validator/SKILL.md +570 -0
- moai_adk/templates/.git-hooks/pre-commit +66 -0
- moai_adk/templates/.git-hooks/pre-push +255 -0
- moai_adk/templates/.github/workflows/c-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/cpp-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/csharp-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/dart-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/go-tag-validation.yml +130 -0
- moai_adk/templates/.github/workflows/java-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/javascript-tag-validation.yml +135 -0
- moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/moai-gitflow.yml +166 -3
- moai_adk/templates/.github/workflows/moai-release-create.yml +100 -0
- moai_adk/templates/.github/workflows/moai-release-pipeline.yml +188 -0
- moai_adk/templates/.github/workflows/php-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/python-tag-validation.yml +118 -0
- moai_adk/templates/.github/workflows/release.yml +118 -0
- moai_adk/templates/.github/workflows/ruby-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/rust-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/shell-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +338 -0
- moai_adk/templates/.github/workflows/swift-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/tag-report.yml +269 -0
- moai_adk/templates/.github/workflows/tag-validation.yml +186 -0
- moai_adk/templates/.github/workflows/typescript-tag-validation.yml +154 -0
- moai_adk/templates/.mcp.json +31 -0
- moai_adk/templates/.moai/config.json +80 -7
- moai_adk/templates/CLAUDE.md +562 -546
- moai_adk/utils/banner.py +5 -5
- moai_adk/utils/common.py +294 -0
- moai_adk/utils/link_validator.py +235 -0
- moai_adk/utils/logger.py +8 -8
- moai_adk/utils/user_experience.py +451 -0
- moai_adk-0.20.1.dist-info/METADATA +233 -0
- moai_adk-0.20.1.dist-info/RECORD +404 -0
- moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
- moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -156
- moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -85
- moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
- moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -92
- moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -70
- moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -41
- moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -636
- moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -692
- moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -470
- moai_adk/templates/.claude/skills/moai-alfred-debugger-pro/SKILL.md +0 -103
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -103
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -95
- moai_adk/templates/.claude/skills/moai-alfred-performance-optimizer/SKILL.md +0 -105
- moai_adk/templates/.claude/skills/moai-alfred-refactoring-coach/SKILL.md +0 -97
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -97
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -90
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -99
- moai_adk/templates/.claude/skills/moai-alfred-tui-survey/SKILL.md +0 -87
- moai_adk/templates/.claude/skills/moai-alfred-tui-survey/examples.md +0 -62
- moai_adk/templates/.claude/skills/moai-claude-code/SKILL.md +0 -94
- moai_adk/templates/.claude/skills/moai-claude-code/examples.md +0 -513
- moai_adk/templates/.claude/skills/moai-claude-code/reference.md +0 -433
- moai_adk/templates/.claude/skills/moai-claude-code/templates/agent-full.md +0 -332
- moai_adk/templates/.claude/skills/moai-claude-code/templates/command-full.md +0 -384
- moai_adk/templates/.claude/skills/moai-claude-code/templates/plugin-full.json +0 -363
- moai_adk/templates/.claude/skills/moai-claude-code/templates/settings-full.json +0 -595
- moai_adk/templates/.claude/skills/moai-claude-code/templates/skill-full.md +0 -496
- moai_adk/templates/.claude/skills/moai-lang-clojure/SKILL.md +0 -100
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +0 -99
- moai_adk/templates/.claude/skills/moai-lang-haskell/SKILL.md +0 -100
- moai_adk/templates/.claude/skills/moai-lang-julia/SKILL.md +0 -98
- moai_adk/templates/.claude/skills/moai-lang-lua/SKILL.md +0 -98
- moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
- moai_adk/templates/.moai/memory/development-guide.md +0 -344
- moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
- moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
- moai_adk/templates/.moai/project/product.md +0 -161
- moai_adk/templates/.moai/project/structure.md +0 -156
- moai_adk/templates/.moai/project/tech.md +0 -227
- moai_adk/templates/__init__.py +0 -2
- moai_adk-0.4.5.dist-info/METADATA +0 -369
- moai_adk-0.4.5.dist-info/RECORD +0 -152
- {moai_adk-0.4.5.dist-info → moai_adk-0.20.1.dist-info}/WHEEL +0 -0
- {moai_adk-0.4.5.dist-info → moai_adk-0.20.1.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.4.5.dist-info → moai_adk-0.20.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
# @CODE:MCP-SETUP-001 | SPEC: SPEC-MCP-SETUP-001/spec.md
|
|
2
|
+
"""MCP (Model Context Protocol) Setup and Configuration
|
|
3
|
+
|
|
4
|
+
Handles MCP server installation, configuration, and management for MoAI-ADK projects.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
import subprocess
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Dict, List
|
|
11
|
+
|
|
12
|
+
from rich.console import Console
|
|
13
|
+
from rich.progress import BarColumn, Progress, SpinnerColumn, TextColumn
|
|
14
|
+
|
|
15
|
+
console = Console()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class MCPSetupManager:
|
|
19
|
+
"""Manages MCP server setup and configuration"""
|
|
20
|
+
|
|
21
|
+
def __init__(self, project_path: Path):
|
|
22
|
+
self.project_path = project_path
|
|
23
|
+
self.settings_path = project_path / ".claude" / "settings.json"
|
|
24
|
+
|
|
25
|
+
def get_npm_global_path(self) -> str:
|
|
26
|
+
"""Get npm global modules path"""
|
|
27
|
+
try:
|
|
28
|
+
result = subprocess.run(
|
|
29
|
+
["npm", "root", "-g"],
|
|
30
|
+
capture_output=True,
|
|
31
|
+
text=True,
|
|
32
|
+
check=True
|
|
33
|
+
)
|
|
34
|
+
return result.stdout.strip()
|
|
35
|
+
except subprocess.CalledProcessError:
|
|
36
|
+
return "/usr/local/lib/node_modules"
|
|
37
|
+
|
|
38
|
+
def check_npm_package_installed(self, package: str) -> bool:
|
|
39
|
+
"""Check if npm package is installed globally"""
|
|
40
|
+
try:
|
|
41
|
+
result = subprocess.run(
|
|
42
|
+
["npm", "list", "-g", package],
|
|
43
|
+
capture_output=True,
|
|
44
|
+
text=True,
|
|
45
|
+
check=True
|
|
46
|
+
)
|
|
47
|
+
return package in result.stdout
|
|
48
|
+
except subprocess.CalledProcessError:
|
|
49
|
+
return False
|
|
50
|
+
|
|
51
|
+
def install_mcp_server(self, package: str, display_name: str) -> bool:
|
|
52
|
+
"""Install MCP server globally"""
|
|
53
|
+
console.print(f"📦 Installing {display_name}...")
|
|
54
|
+
|
|
55
|
+
try:
|
|
56
|
+
subprocess.run(
|
|
57
|
+
["npm", "install", "-g", package],
|
|
58
|
+
check=True,
|
|
59
|
+
capture_output=True
|
|
60
|
+
)
|
|
61
|
+
console.print(f"✅ {display_name} installed successfully")
|
|
62
|
+
return True
|
|
63
|
+
except subprocess.CalledProcessError as e:
|
|
64
|
+
console.print(f"❌ Failed to install {display_name}: {e}")
|
|
65
|
+
return False
|
|
66
|
+
|
|
67
|
+
def detect_mcp_servers(self, servers: List[str]) -> Dict[str, bool]:
|
|
68
|
+
"""Detect installation status of MCP servers"""
|
|
69
|
+
status = {}
|
|
70
|
+
|
|
71
|
+
package_mapping = {
|
|
72
|
+
"context7": "@upstash/context7-mcp",
|
|
73
|
+
"playwright": "@playwright/mcp",
|
|
74
|
+
"sequential-thinking": "@modelcontextprotocol/server-sequential-thinking"
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
for server in servers:
|
|
78
|
+
package = package_mapping.get(server)
|
|
79
|
+
if package:
|
|
80
|
+
status[server] = self.check_npm_package_installed(package)
|
|
81
|
+
else:
|
|
82
|
+
status[server] = False
|
|
83
|
+
|
|
84
|
+
return status
|
|
85
|
+
|
|
86
|
+
def install_mcp_servers(self, servers: List[str]) -> Dict[str, bool]:
|
|
87
|
+
"""Install specified MCP servers"""
|
|
88
|
+
results = {}
|
|
89
|
+
|
|
90
|
+
package_mapping = {
|
|
91
|
+
"context7": ("@upstash/context7-mcp", "Context7 MCP"),
|
|
92
|
+
"playwright": ("@playwright/mcp", "Playwright MCP"),
|
|
93
|
+
"sequential-thinking": ("@modelcontextprotocol/server-sequential-thinking", "Sequential Thinking MCP")
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
for server in servers:
|
|
97
|
+
if server in package_mapping:
|
|
98
|
+
package, display_name = package_mapping[server]
|
|
99
|
+
results[server] = self.install_mcp_server(package, display_name)
|
|
100
|
+
else:
|
|
101
|
+
console.print(f"⚠️ Unknown MCP server: {server}")
|
|
102
|
+
results[server] = False
|
|
103
|
+
|
|
104
|
+
return results
|
|
105
|
+
|
|
106
|
+
def generate_mcp_config(self, installed_servers: Dict[str, bool]) -> Dict:
|
|
107
|
+
"""Generate MCP configuration following Microsoft MCP standard"""
|
|
108
|
+
config = {"servers": {}}
|
|
109
|
+
|
|
110
|
+
# Context7 MCP
|
|
111
|
+
if installed_servers.get("context7", False):
|
|
112
|
+
config["servers"]["context7"] = {
|
|
113
|
+
"type": "stdio",
|
|
114
|
+
"command": "npx",
|
|
115
|
+
"args": [
|
|
116
|
+
"-y",
|
|
117
|
+
"@upstash/context7-mcp"
|
|
118
|
+
],
|
|
119
|
+
"env": {}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
# Playwright MCP
|
|
124
|
+
if installed_servers.get("playwright", False):
|
|
125
|
+
config["servers"]["playwright"] = {
|
|
126
|
+
"type": "stdio",
|
|
127
|
+
"command": "npx",
|
|
128
|
+
"args": [
|
|
129
|
+
"-y",
|
|
130
|
+
"@playwright/mcp"
|
|
131
|
+
],
|
|
132
|
+
"env": {}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
# Sequential Thinking MCP
|
|
136
|
+
if installed_servers.get("sequential-thinking", False):
|
|
137
|
+
config["servers"]["sequential-thinking"] = {
|
|
138
|
+
"type": "stdio",
|
|
139
|
+
"command": "npx",
|
|
140
|
+
"args": [
|
|
141
|
+
"-y",
|
|
142
|
+
"@modelcontextprotocol/server-sequential-thinking"
|
|
143
|
+
],
|
|
144
|
+
"env": {}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return config
|
|
148
|
+
|
|
149
|
+
def backup_settings(self) -> bool:
|
|
150
|
+
"""Backup existing settings file (legacy - not used for MCP)"""
|
|
151
|
+
# Settings backup is no longer needed for MCP setup
|
|
152
|
+
# We only create .mcp.json in project root
|
|
153
|
+
return True
|
|
154
|
+
|
|
155
|
+
def update_mcp_file(self, mcp_config: Dict) -> bool:
|
|
156
|
+
"""Update MCP configuration file following Microsoft MCP standard (legacy - not used)"""
|
|
157
|
+
# This method is no longer used - we only create .mcp.json in project root
|
|
158
|
+
return True
|
|
159
|
+
|
|
160
|
+
def create_project_mcp_file(self, mcp_config: Dict) -> bool:
|
|
161
|
+
"""Create .mcp.json file in project root for Claude Code compatibility"""
|
|
162
|
+
try:
|
|
163
|
+
# Create .mcp.json path in project root
|
|
164
|
+
mcp_root_path = self.project_path / ".mcp.json"
|
|
165
|
+
|
|
166
|
+
# Write MCP configuration to project root
|
|
167
|
+
with open(mcp_root_path, 'w') as f:
|
|
168
|
+
json.dump(mcp_config, f, indent=2)
|
|
169
|
+
|
|
170
|
+
console.print("✅ Project MCP file created (.mcp.json)")
|
|
171
|
+
return True
|
|
172
|
+
|
|
173
|
+
except Exception as e:
|
|
174
|
+
console.print(f"❌ Failed to create project MCP file: {e}")
|
|
175
|
+
return False
|
|
176
|
+
|
|
177
|
+
def update_settings_file(self, mcp_config: Dict) -> bool:
|
|
178
|
+
"""Update Claude Code settings file with MCP configuration (legacy - not used)"""
|
|
179
|
+
# This method is no longer used - we only create .mcp.json in project root
|
|
180
|
+
return True
|
|
181
|
+
|
|
182
|
+
def copy_template_mcp_config(self) -> bool:
|
|
183
|
+
"""Copy MCP configuration from package template"""
|
|
184
|
+
try:
|
|
185
|
+
# Get the package template path
|
|
186
|
+
import moai_adk
|
|
187
|
+
package_path = Path(moai_adk.__file__).parent
|
|
188
|
+
template_mcp_path = package_path / "templates" / ".mcp.json"
|
|
189
|
+
|
|
190
|
+
if template_mcp_path.exists():
|
|
191
|
+
# Copy template to project
|
|
192
|
+
project_mcp_path = self.project_path / ".mcp.json"
|
|
193
|
+
|
|
194
|
+
# Read template
|
|
195
|
+
with open(template_mcp_path, 'r') as f:
|
|
196
|
+
mcp_config = json.load(f)
|
|
197
|
+
|
|
198
|
+
# Write to project
|
|
199
|
+
with open(project_mcp_path, 'w') as f:
|
|
200
|
+
json.dump(mcp_config, f, indent=2)
|
|
201
|
+
|
|
202
|
+
server_names = list(mcp_config.get('mcpServers', {}).keys())
|
|
203
|
+
console.print("✅ MCP configuration copied from template")
|
|
204
|
+
console.print(f"📋 Configured servers: {', '.join(server_names)}")
|
|
205
|
+
return True
|
|
206
|
+
else:
|
|
207
|
+
console.print("❌ Template MCP configuration not found")
|
|
208
|
+
return False
|
|
209
|
+
|
|
210
|
+
except Exception as e:
|
|
211
|
+
console.print(f"❌ Failed to copy MCP configuration: {e}")
|
|
212
|
+
return False
|
|
213
|
+
|
|
214
|
+
def setup_mcp_servers(self, selected_servers: List[str]) -> bool:
|
|
215
|
+
"""Complete MCP server setup process"""
|
|
216
|
+
if not selected_servers:
|
|
217
|
+
console.print("ℹ️ No MCP servers selected")
|
|
218
|
+
return True
|
|
219
|
+
|
|
220
|
+
with Progress(
|
|
221
|
+
SpinnerColumn(),
|
|
222
|
+
TextColumn("[progress.description]"),
|
|
223
|
+
BarColumn(),
|
|
224
|
+
console=console
|
|
225
|
+
) as progress:
|
|
226
|
+
task = progress.add_task("Setting up MCP servers...", total=100)
|
|
227
|
+
|
|
228
|
+
# Step 1: Detect installation status
|
|
229
|
+
progress.update(task, completed=10, description="Detecting server installation...")
|
|
230
|
+
installed_status = self.detect_mcp_servers(selected_servers)
|
|
231
|
+
|
|
232
|
+
# Step 2: Install missing servers
|
|
233
|
+
missing_servers = [s for s in selected_servers if not installed_status.get(s, False)]
|
|
234
|
+
if missing_servers:
|
|
235
|
+
progress.update(task, completed=30, description="Installing missing servers...")
|
|
236
|
+
install_results = self.install_mcp_servers(missing_servers)
|
|
237
|
+
|
|
238
|
+
# Update status with installation results
|
|
239
|
+
for server, result in install_results.items():
|
|
240
|
+
installed_status[server] = result
|
|
241
|
+
|
|
242
|
+
# Step 3: Generate configuration
|
|
243
|
+
progress.update(task, completed=70, description="Generating configuration...")
|
|
244
|
+
mcp_config = self.generate_mcp_config(installed_status)
|
|
245
|
+
|
|
246
|
+
# Step 4: Create .mcp.json in project root for Claude Code compatibility only
|
|
247
|
+
progress.update(task, completed=80, description="Creating project MCP file...")
|
|
248
|
+
success = self.create_project_mcp_file(mcp_config)
|
|
249
|
+
|
|
250
|
+
# Step 5: Final verification
|
|
251
|
+
progress.update(task, completed=100, description="Final verification...")
|
|
252
|
+
|
|
253
|
+
if success:
|
|
254
|
+
console.print("\n🎉 MCP setup completed successfully!")
|
|
255
|
+
console.print(f"📋 Configured servers: {', '.join([s for s, installed in installed_status.items() if installed])}")
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
return True
|
|
259
|
+
else:
|
|
260
|
+
console.print("\n❌ MCP setup failed")
|
|
261
|
+
return False
|
|
262
|
+
|
|
263
|
+
def get_installed_servers(self) -> List[str]:
|
|
264
|
+
"""Get list of currently installed MCP servers"""
|
|
265
|
+
all_servers = ["context7", "playwright", "sequential-thinking"]
|
|
266
|
+
status = self.detect_mcp_servers(all_servers)
|
|
267
|
+
return [server for server, installed in status.items() if installed]
|
|
268
|
+
|
|
269
|
+
def verify_mcp_configuration(self) -> Dict[str, bool]:
|
|
270
|
+
"""Verify MCP configuration and server availability"""
|
|
271
|
+
mcp_path = self.project_path / ".claude" / "mcp.json"
|
|
272
|
+
|
|
273
|
+
if not mcp_path.exists():
|
|
274
|
+
return {"config_exists": False, "servers_configured": 0}
|
|
275
|
+
|
|
276
|
+
try:
|
|
277
|
+
with open(mcp_path, 'r') as f:
|
|
278
|
+
config = json.load(f)
|
|
279
|
+
|
|
280
|
+
servers = config.get("servers", {})
|
|
281
|
+
installed_servers = self.get_installed_servers()
|
|
282
|
+
|
|
283
|
+
verification = {
|
|
284
|
+
"config_exists": True,
|
|
285
|
+
"servers_configured": len(servers),
|
|
286
|
+
"servers_available": len(installed_servers),
|
|
287
|
+
"server_status": {}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
for server_name in servers.keys():
|
|
291
|
+
verification["server_status"][server_name] = server_name in installed_servers
|
|
292
|
+
|
|
293
|
+
return verification
|
|
294
|
+
|
|
295
|
+
except Exception as e:
|
|
296
|
+
return {"config_exists": False, "error": str(e)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @CODE:INIT-
|
|
1
|
+
# @CODE:INIT-005:BACKUP | SPEC: .moai/specs/SPEC-INIT-003/spec.md | TEST: tests/unit/test_backup_utils.py
|
|
2
2
|
"""Backup utility module (SPEC-INIT-003 v0.3.0)
|
|
3
3
|
|
|
4
4
|
Selective backup strategy:
|
moai_adk/core/project/checker.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @CODE:CLI-
|
|
1
|
+
# @CODE:CLI-003 | SPEC: SPEC-CLI-001.md | TEST: tests/unit/test_cli_commands.py
|
|
2
2
|
"""System requirements validation module.
|
|
3
3
|
|
|
4
4
|
Checks whether required and optional tools are installed.
|
|
@@ -24,7 +24,7 @@ class SystemChecker:
|
|
|
24
24
|
"docker": "docker --version",
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
# @CODE:CLI-
|
|
27
|
+
# @CODE:CLI-003:DATA - Language toolchain mapping (20 languages)
|
|
28
28
|
LANGUAGE_TOOLS: dict[str, dict[str, list[str]]] = {
|
|
29
29
|
"python": {
|
|
30
30
|
"required": ["python3", "pip"],
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
# @CODE:CORE-PROJECT-001 | SPEC: SPEC-CORE-PROJECT-001.md | TEST: tests/unit/test_language_detector.py
|
|
2
2
|
# @CODE:LANG-DETECT-001 | SPEC: SPEC-LANG-DETECT-001.md | TEST: tests/unit/test_detector.py
|
|
3
|
+
# @CODE:LDE-EXTENDED-001 | SPEC: SPEC-LANGUAGE-DETECTION-EXTENDED-001/spec.md | \
|
|
4
|
+
# TEST: tests/unit/test_language_detector_extended.py
|
|
3
5
|
"""Language detector module.
|
|
4
6
|
|
|
5
7
|
Automatically detects 20 programming languages.
|
|
8
|
+
|
|
9
|
+
Extended detection supports:
|
|
10
|
+
- 11 new languages: Ruby, PHP, Java, Rust, Dart, Swift, Kotlin, C#, C, C++, Shell
|
|
11
|
+
- 5 build tool detection: Maven, Gradle, CMake, SPM, dotnet
|
|
12
|
+
- Package manager detection: bundle, composer, cargo
|
|
13
|
+
- Priority conflict resolution for multi-language projects
|
|
6
14
|
"""
|
|
7
15
|
|
|
8
16
|
from pathlib import Path
|
|
@@ -16,7 +24,28 @@ class LanguageDetector:
|
|
|
16
24
|
"""
|
|
17
25
|
|
|
18
26
|
LANGUAGE_PATTERNS = {
|
|
19
|
-
#
|
|
27
|
+
# @CODE:LDE-PRIORITY-001 | SPEC: SPEC-LANGUAGE-DETECTION-EXTENDED-001/spec.md
|
|
28
|
+
# Priority order (highest to lowest):
|
|
29
|
+
# 1. Rust, 2. Dart, 3. Swift, 4. Kotlin, 5. C#, 6. Java, 7. Ruby, 8. PHP
|
|
30
|
+
# 9. Go, 10. Python, 11. TypeScript, 12. JavaScript, 13. C++, 14. C, 15. Shell
|
|
31
|
+
|
|
32
|
+
"rust": ["*.rs", "Cargo.toml"],
|
|
33
|
+
"dart": ["*.dart", "pubspec.yaml"],
|
|
34
|
+
"swift": ["*.swift", "Package.swift"],
|
|
35
|
+
"kotlin": ["*.kt", "build.gradle.kts"],
|
|
36
|
+
"csharp": ["*.cs", "*.csproj"],
|
|
37
|
+
"java": ["*.java", "pom.xml", "build.gradle"],
|
|
38
|
+
# Ruby moved for priority (Rails detection)
|
|
39
|
+
# @CODE:LANG-DETECT-RUBY-001 | SPEC: Issue #51 Language Detection Fix
|
|
40
|
+
"ruby": [
|
|
41
|
+
"*.rb",
|
|
42
|
+
"Gemfile",
|
|
43
|
+
"Gemfile.lock", # Bundler: lock file (unique to Ruby)
|
|
44
|
+
"config/routes.rb", # Rails: routing file (unique identifier)
|
|
45
|
+
"app/controllers/", # Rails: controller directory
|
|
46
|
+
"Rakefile" # Rails/Ruby: task file
|
|
47
|
+
],
|
|
48
|
+
# PHP after Ruby (Laravel detection)
|
|
20
49
|
"php": [
|
|
21
50
|
"*.php",
|
|
22
51
|
"composer.json",
|
|
@@ -24,24 +53,18 @@ class LanguageDetector:
|
|
|
24
53
|
"app/", # Laravel: application directory
|
|
25
54
|
"bootstrap/laravel.php" # Laravel: bootstrap file
|
|
26
55
|
],
|
|
56
|
+
"go": ["*.go", "go.mod"],
|
|
27
57
|
"python": ["*.py", "pyproject.toml", "requirements.txt", "setup.py"],
|
|
28
58
|
"typescript": ["*.ts", "tsconfig.json"],
|
|
29
59
|
"javascript": ["*.js", "package.json"],
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
"swift": ["*.swift", "Package.swift"],
|
|
35
|
-
"kotlin": ["*.kt", "build.gradle.kts"],
|
|
36
|
-
"csharp": ["*.cs", "*.csproj"],
|
|
37
|
-
"ruby": ["*.rb", "Gemfile"],
|
|
60
|
+
"cpp": ["*.cpp", "CMakeLists.txt"],
|
|
61
|
+
"c": ["*.c", "Makefile"],
|
|
62
|
+
"shell": ["*.sh", "*.bash"],
|
|
63
|
+
# Additional languages (lower priority)
|
|
38
64
|
"elixir": ["*.ex", "mix.exs"],
|
|
39
65
|
"scala": ["*.scala", "build.sbt"],
|
|
40
66
|
"clojure": ["*.clj", "project.clj"],
|
|
41
67
|
"haskell": ["*.hs", "*.cabal"],
|
|
42
|
-
"c": ["*.c", "Makefile"],
|
|
43
|
-
"cpp": ["*.cpp", "CMakeLists.txt"],
|
|
44
|
-
"shell": ["*.sh", "*.bash"],
|
|
45
68
|
"lua": ["*.lua"],
|
|
46
69
|
}
|
|
47
70
|
|
|
@@ -103,6 +126,182 @@ class LanguageDetector:
|
|
|
103
126
|
|
|
104
127
|
return False
|
|
105
128
|
|
|
129
|
+
def get_workflow_template_path(self, language: str) -> str:
|
|
130
|
+
"""Get the GitHub Actions workflow template path for a language.
|
|
131
|
+
|
|
132
|
+
@CODE:LDE-WORKFLOW-PATH-001 | SPEC: SPEC-LANGUAGE-DETECTION-EXTENDED-001/spec.md
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
language: Programming language name (lowercase).
|
|
136
|
+
|
|
137
|
+
Returns:
|
|
138
|
+
Workflow template file path relative to templates directory.
|
|
139
|
+
|
|
140
|
+
Raises:
|
|
141
|
+
ValueError: If language is not supported for workflows.
|
|
142
|
+
"""
|
|
143
|
+
workflow_mapping = {
|
|
144
|
+
"python": ".github/workflows/python-tag-validation.yml",
|
|
145
|
+
"javascript": ".github/workflows/javascript-tag-validation.yml",
|
|
146
|
+
"typescript": ".github/workflows/typescript-tag-validation.yml",
|
|
147
|
+
"go": ".github/workflows/go-tag-validation.yml",
|
|
148
|
+
"ruby": ".github/workflows/ruby-tag-validation.yml",
|
|
149
|
+
"php": ".github/workflows/php-tag-validation.yml",
|
|
150
|
+
"java": ".github/workflows/java-tag-validation.yml",
|
|
151
|
+
"rust": ".github/workflows/rust-tag-validation.yml",
|
|
152
|
+
"dart": ".github/workflows/dart-tag-validation.yml",
|
|
153
|
+
"swift": ".github/workflows/swift-tag-validation.yml",
|
|
154
|
+
"kotlin": ".github/workflows/kotlin-tag-validation.yml",
|
|
155
|
+
"csharp": ".github/workflows/csharp-tag-validation.yml",
|
|
156
|
+
"c": ".github/workflows/c-tag-validation.yml",
|
|
157
|
+
"cpp": ".github/workflows/cpp-tag-validation.yml",
|
|
158
|
+
"shell": ".github/workflows/shell-tag-validation.yml",
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if language.lower() not in workflow_mapping:
|
|
162
|
+
raise ValueError(
|
|
163
|
+
f"Unsupported language: {language}. "
|
|
164
|
+
f"Supported languages: {', '.join(workflow_mapping.keys())}"
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
return workflow_mapping[language.lower()]
|
|
168
|
+
|
|
169
|
+
def detect_package_manager(self, path: str | Path = ".") -> str | None:
|
|
170
|
+
"""Detect the package manager for the detected language.
|
|
171
|
+
|
|
172
|
+
@CODE:LDE-PKG-MGR-001 | SPEC: SPEC-LANGUAGE-DETECTION-EXTENDED-001/spec.md
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
path: Directory to inspect.
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Package manager name or None if not detected.
|
|
179
|
+
"""
|
|
180
|
+
path = Path(path)
|
|
181
|
+
|
|
182
|
+
# Ruby
|
|
183
|
+
if (path / "Gemfile").exists():
|
|
184
|
+
return "bundle"
|
|
185
|
+
|
|
186
|
+
# PHP
|
|
187
|
+
if (path / "composer.json").exists():
|
|
188
|
+
return "composer"
|
|
189
|
+
|
|
190
|
+
# Java/Kotlin
|
|
191
|
+
if (path / "pom.xml").exists():
|
|
192
|
+
return "maven"
|
|
193
|
+
if (path / "build.gradle").exists() or (path / "build.gradle.kts").exists():
|
|
194
|
+
return "gradle"
|
|
195
|
+
|
|
196
|
+
# Rust
|
|
197
|
+
if (path / "Cargo.toml").exists():
|
|
198
|
+
return "cargo"
|
|
199
|
+
|
|
200
|
+
# Dart/Flutter
|
|
201
|
+
if (path / "pubspec.yaml").exists():
|
|
202
|
+
return "dart_pub"
|
|
203
|
+
|
|
204
|
+
# Swift
|
|
205
|
+
if (path / "Package.swift").exists():
|
|
206
|
+
return "spm"
|
|
207
|
+
|
|
208
|
+
# C#
|
|
209
|
+
if list(path.glob("*.csproj")) or list(path.glob("*.sln")):
|
|
210
|
+
return "dotnet"
|
|
211
|
+
|
|
212
|
+
# Python
|
|
213
|
+
if (path / "pyproject.toml").exists():
|
|
214
|
+
return "pip"
|
|
215
|
+
|
|
216
|
+
# JavaScript/TypeScript (check in priority order)
|
|
217
|
+
# Check for lock files and package managers
|
|
218
|
+
if (path / "bun.lockb").exists():
|
|
219
|
+
return "bun"
|
|
220
|
+
elif (path / "pnpm-lock.yaml").exists():
|
|
221
|
+
return "pnpm"
|
|
222
|
+
elif (path / "yarn.lock").exists():
|
|
223
|
+
return "yarn"
|
|
224
|
+
elif (path / "package-lock.json").exists():
|
|
225
|
+
return "npm"
|
|
226
|
+
elif (path / "package.json").exists():
|
|
227
|
+
# Default to npm for package.json without lock files
|
|
228
|
+
return "npm"
|
|
229
|
+
|
|
230
|
+
# Go
|
|
231
|
+
if (path / "go.mod").exists():
|
|
232
|
+
return "go_modules"
|
|
233
|
+
|
|
234
|
+
return None
|
|
235
|
+
|
|
236
|
+
def detect_build_tool(self, path: str | Path = ".", language: str | None = None) -> str | None:
|
|
237
|
+
"""Detect the build tool for the detected language.
|
|
238
|
+
|
|
239
|
+
@CODE:LDE-BUILD-TOOL-001 | SPEC: SPEC-LANGUAGE-DETECTION-EXTENDED-001/spec.md
|
|
240
|
+
|
|
241
|
+
Args:
|
|
242
|
+
path: Directory to inspect.
|
|
243
|
+
language: Optional language hint for disambiguation.
|
|
244
|
+
|
|
245
|
+
Returns:
|
|
246
|
+
Build tool name or None if not detected.
|
|
247
|
+
"""
|
|
248
|
+
path = Path(path)
|
|
249
|
+
|
|
250
|
+
# C/C++
|
|
251
|
+
if (path / "CMakeLists.txt").exists():
|
|
252
|
+
return "cmake"
|
|
253
|
+
if (path / "Makefile").exists():
|
|
254
|
+
return "make"
|
|
255
|
+
|
|
256
|
+
# Java/Kotlin
|
|
257
|
+
if language in ["java", "kotlin"]:
|
|
258
|
+
if (path / "pom.xml").exists():
|
|
259
|
+
return "maven"
|
|
260
|
+
if (path / "build.gradle").exists() or (path / "build.gradle.kts").exists():
|
|
261
|
+
return "gradle"
|
|
262
|
+
|
|
263
|
+
# Rust
|
|
264
|
+
if (path / "Cargo.toml").exists():
|
|
265
|
+
return "cargo"
|
|
266
|
+
|
|
267
|
+
# Swift
|
|
268
|
+
if (path / "Package.swift").exists():
|
|
269
|
+
return "spm"
|
|
270
|
+
if list(path.glob("*.xcodeproj")) or list(path.glob("*.xcworkspace")):
|
|
271
|
+
return "xcode"
|
|
272
|
+
|
|
273
|
+
# C#
|
|
274
|
+
if list(path.glob("*.csproj")) or list(path.glob("*.sln")):
|
|
275
|
+
return "dotnet"
|
|
276
|
+
|
|
277
|
+
return None
|
|
278
|
+
|
|
279
|
+
def get_supported_languages_for_workflows(self) -> list[str]:
|
|
280
|
+
"""Get the list of languages with dedicated CI/CD workflow support.
|
|
281
|
+
|
|
282
|
+
@CODE:LDE-SUPPORTED-LANGS-001 | SPEC: SPEC-LANGUAGE-DETECTION-EXTENDED-001/spec.md
|
|
283
|
+
|
|
284
|
+
Returns:
|
|
285
|
+
List of supported language names (15 total).
|
|
286
|
+
"""
|
|
287
|
+
return [
|
|
288
|
+
"python",
|
|
289
|
+
"javascript",
|
|
290
|
+
"typescript",
|
|
291
|
+
"go",
|
|
292
|
+
"ruby",
|
|
293
|
+
"php",
|
|
294
|
+
"java",
|
|
295
|
+
"rust",
|
|
296
|
+
"dart",
|
|
297
|
+
"swift",
|
|
298
|
+
"kotlin",
|
|
299
|
+
"csharp",
|
|
300
|
+
"c",
|
|
301
|
+
"cpp",
|
|
302
|
+
"shell",
|
|
303
|
+
]
|
|
304
|
+
|
|
106
305
|
|
|
107
306
|
def detect_project_language(path: str | Path = ".") -> str | None:
|
|
108
307
|
"""Detect the project language (helper).
|