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.

Files changed (433) hide show
  1. moai_adk/__init__.py +1 -1
  2. moai_adk/__main__.py +74 -1
  3. moai_adk/cli/commands/__init__.py +1 -1
  4. moai_adk/cli/commands/analyze.py +119 -0
  5. moai_adk/cli/commands/backup.py +25 -1
  6. moai_adk/cli/commands/doctor.py +31 -5
  7. moai_adk/cli/commands/improve_user_experience.py +307 -0
  8. moai_adk/cli/commands/init.py +111 -10
  9. moai_adk/cli/commands/status.py +33 -3
  10. moai_adk/cli/commands/update.py +921 -130
  11. moai_adk/cli/commands/validate_links.py +120 -0
  12. moai_adk/cli/prompts/init_prompts.py +22 -87
  13. moai_adk/core/analysis/__init__.py +9 -0
  14. moai_adk/core/analysis/session_analyzer.py +388 -0
  15. moai_adk/core/analysis/tag_chain_analyzer.py +344 -0
  16. moai_adk/core/analysis/tag_chain_repair.py +879 -0
  17. moai_adk/core/config/__init__.py +19 -0
  18. moai_adk/core/config/migration.py +235 -0
  19. moai_adk/core/git/__init__.py +1 -1
  20. moai_adk/core/git/branch.py +1 -1
  21. moai_adk/core/git/commit.py +1 -1
  22. moai_adk/core/git/manager.py +1 -1
  23. moai_adk/core/issue_creator.py +313 -0
  24. moai_adk/core/mcp/setup.py +56 -0
  25. moai_adk/core/mcp/setup_old.py +296 -0
  26. moai_adk/core/project/backup_utils.py +1 -1
  27. moai_adk/core/project/checker.py +2 -2
  28. moai_adk/core/project/detector.py +211 -12
  29. moai_adk/core/project/initializer.py +85 -15
  30. moai_adk/core/project/phase_executor.py +76 -13
  31. moai_adk/core/project/validator.py +13 -13
  32. moai_adk/core/quality/__init__.py +1 -1
  33. moai_adk/core/quality/trust_checker.py +1 -1
  34. moai_adk/core/quality/validators/__init__.py +1 -1
  35. moai_adk/core/quality/validators/base_validator.py +1 -1
  36. moai_adk/core/tags/__init__.py +86 -0
  37. moai_adk/core/tags/auto_corrector.py +693 -0
  38. moai_adk/core/tags/ci_validator.py +463 -0
  39. moai_adk/core/tags/cli.py +283 -0
  40. moai_adk/core/tags/generator.py +109 -0
  41. moai_adk/core/tags/inserter.py +99 -0
  42. moai_adk/core/tags/mapper.py +126 -0
  43. moai_adk/core/tags/parser.py +76 -0
  44. moai_adk/core/tags/policy_validator.py +580 -0
  45. moai_adk/core/tags/pre_commit_validator.py +421 -0
  46. moai_adk/core/tags/reporter.py +956 -0
  47. moai_adk/core/tags/rollback_manager.py +525 -0
  48. moai_adk/core/tags/tags.py +149 -0
  49. moai_adk/core/tags/validator.py +897 -0
  50. moai_adk/core/template/__init__.py +1 -1
  51. moai_adk/core/template/backup.py +1 -1
  52. moai_adk/core/template/merger.py +50 -1
  53. moai_adk/core/template/processor.py +119 -13
  54. moai_adk/core/template_engine.py +268 -0
  55. moai_adk/templates/.claude/agents/alfred/backend-expert.md +348 -0
  56. moai_adk/templates/.claude/agents/alfred/cc-manager.md +209 -944
  57. moai_adk/templates/.claude/agents/alfred/database-expert.md +352 -0
  58. moai_adk/templates/.claude/agents/alfred/debug-helper.md +34 -5
  59. moai_adk/templates/.claude/agents/alfred/devops-expert.md +464 -0
  60. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +38 -8
  61. moai_adk/templates/.claude/agents/alfred/format-expert.md +469 -0
  62. moai_adk/templates/.claude/agents/alfred/frontend-expert.md +357 -0
  63. moai_adk/templates/.claude/agents/alfred/git-manager.md +128 -9
  64. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +104 -6
  65. moai_adk/templates/.claude/agents/alfred/project-manager.md +88 -16
  66. moai_adk/templates/.claude/agents/alfred/quality-gate.md +36 -9
  67. moai_adk/templates/.claude/agents/alfred/security-expert.md +270 -0
  68. moai_adk/templates/.claude/agents/alfred/skill-factory.md +865 -0
  69. moai_adk/templates/.claude/agents/alfred/spec-builder.md +214 -43
  70. moai_adk/templates/.claude/agents/alfred/tag-agent.md +111 -9
  71. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +309 -160
  72. moai_adk/templates/.claude/agents/alfred/trust-checker.md +36 -7
  73. moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +605 -0
  74. moai_adk/templates/.claude/commands/alfred/0-project.md +393 -966
  75. moai_adk/templates/.claude/commands/alfred/1-plan.md +651 -367
  76. moai_adk/templates/.claude/commands/alfred/2-run.md +388 -241
  77. moai_adk/templates/.claude/commands/alfred/3-sync.md +1921 -410
  78. moai_adk/templates/.claude/commands/alfred/9-feedback.md +153 -0
  79. moai_adk/templates/.claude/commands/alfred/release-new.md +3604 -0
  80. moai_adk/templates/.claude/hooks/alfred/core/project.py +484 -20
  81. moai_adk/templates/.claude/hooks/alfred/core/timeout.py +136 -0
  82. moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +108 -0
  83. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +198 -0
  84. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +14 -6
  85. moai_adk/templates/.claude/hooks/alfred/post_tool__enable_streaming_ui.py +50 -0
  86. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +93 -0
  87. moai_adk/templates/.claude/hooks/alfred/post_tool__tag_auto_corrector.py +407 -0
  88. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +99 -0
  89. moai_adk/templates/.claude/hooks/alfred/pre_tool__realtime_tag_monitor.py +335 -0
  90. moai_adk/templates/.claude/hooks/alfred/pre_tool__tag_policy_validator.py +325 -0
  91. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +93 -0
  92. moai_adk/templates/.claude/hooks/alfred/session_start__auto_cleanup.py +580 -0
  93. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +298 -0
  94. moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +170 -0
  95. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/checkpoint.py +3 -3
  96. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/context.py +5 -5
  97. moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +749 -0
  98. moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +230 -0
  99. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +198 -0
  100. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +21 -0
  101. moai_adk/templates/.claude/hooks/alfred/shared/handlers/daily_analysis.py +351 -0
  102. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +154 -0
  103. moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +174 -0
  104. moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +87 -0
  105. moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +61 -0
  106. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +111 -0
  107. moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +1 -0
  108. moai_adk/templates/.claude/hooks/alfred/utils/hook_config.py +94 -0
  109. moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +161 -0
  110. moai_adk/templates/.claude/output-styles/alfred/alfred-moai-adk-beginner.md +267 -0
  111. moai_adk/templates/.claude/output-styles/alfred/keating-personal-tutor.md +440 -0
  112. moai_adk/templates/.claude/output-styles/alfred/r2d2-agentic-coding.md +583 -0
  113. moai_adk/templates/.claude/settings.json +96 -14
  114. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +70 -0
  115. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +62 -0
  116. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +242 -0
  117. moai_adk/templates/.claude/skills/moai-alfred-ask-user-questions/SKILL.md +237 -0
  118. moai_adk/templates/.claude/skills/moai-alfred-ask-user-questions/examples.md +871 -0
  119. moai_adk/templates/.claude/skills/moai-alfred-ask-user-questions/reference.md +653 -0
  120. moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/README.md +162 -0
  121. moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/SKILL.md +227 -0
  122. moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/examples.md +354 -0
  123. moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/reference.md +158 -0
  124. moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/SKILL.md +179 -79
  125. moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/examples.md +117 -0
  126. moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/scripts/pre-review-check.sh +62 -0
  127. moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +132 -0
  128. moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +28 -0
  129. moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +444 -0
  130. moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +62 -0
  131. moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +28 -0
  132. moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +405 -0
  133. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +51 -0
  134. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +355 -0
  135. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +239 -0
  136. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +323 -0
  137. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +286 -0
  138. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +126 -0
  139. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +229 -0
  140. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +4 -0
  141. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +150 -0
  142. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +87 -73
  143. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +29 -0
  144. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +28 -0
  145. moai_adk/templates/.claude/skills/moai-alfred-personas/README.md +42 -0
  146. moai_adk/templates/.claude/skills/moai-alfred-personas/SKILL.md +429 -0
  147. moai_adk/templates/.claude/skills/moai-alfred-personas/examples.md +520 -0
  148. moai_adk/templates/.claude/skills/moai-alfred-personas/reference.md +405 -0
  149. moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +89 -0
  150. moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +122 -0
  151. moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +369 -0
  152. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +508 -0
  153. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +481 -0
  154. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +100 -0
  155. moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +77 -0
  156. moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +265 -0
  157. moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +539 -0
  158. moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +320 -0
  159. moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +4 -0
  160. moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +84 -0
  161. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +137 -0
  162. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +219 -0
  163. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +161 -0
  164. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +541 -0
  165. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +622 -0
  166. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +19 -0
  167. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +4 -0
  168. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +211 -0
  169. moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +288 -0
  170. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +269 -0
  171. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +32 -0
  172. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +298 -0
  173. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +26 -0
  174. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +307 -0
  175. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +21 -0
  176. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +252 -0
  177. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +19 -0
  178. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +19 -0
  179. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +24 -0
  180. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +199 -0
  181. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +39 -0
  182. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +316 -0
  183. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +18 -0
  184. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +263 -0
  185. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +30 -0
  186. moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +482 -0
  187. moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +303 -0
  188. moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +524 -0
  189. moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +477 -0
  190. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +429 -0
  191. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +391 -0
  192. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +431 -0
  193. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +577 -0
  194. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +273 -0
  195. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +466 -0
  196. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +583 -0
  197. moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +526 -0
  198. moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +608 -0
  199. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +328 -0
  200. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +312 -0
  201. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +245 -0
  202. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +285 -0
  203. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +278 -0
  204. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +303 -0
  205. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +291 -0
  206. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +15 -0
  207. moai_adk/templates/.claude/skills/moai-change-logger/SKILL.md +563 -0
  208. moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +802 -0
  209. moai_adk/templates/.claude/skills/moai-design-systems/examples.md +1238 -0
  210. moai_adk/templates/.claude/skills/moai-design-systems/reference.md +673 -0
  211. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +234 -43
  212. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +1633 -0
  213. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +660 -0
  214. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +97 -69
  215. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +29 -0
  216. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +30 -0
  217. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +97 -72
  218. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +29 -0
  219. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +30 -0
  220. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +97 -74
  221. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +29 -0
  222. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +30 -0
  223. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +98 -74
  224. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +29 -0
  225. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +31 -0
  226. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +102 -73
  227. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +29 -0
  228. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +31 -0
  229. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +97 -73
  230. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +29 -0
  231. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +30 -0
  232. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +97 -67
  233. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +29 -0
  234. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +30 -0
  235. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +97 -79
  236. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +29 -0
  237. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +30 -0
  238. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +97 -71
  239. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +29 -0
  240. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +30 -0
  241. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +265 -64
  242. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +1064 -0
  243. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +1047 -0
  244. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +87 -78
  245. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +29 -0
  246. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +28 -0
  247. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +87 -70
  248. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +29 -0
  249. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +28 -0
  250. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +87 -86
  251. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +29 -0
  252. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +28 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +80 -62
  254. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +29 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +28 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +207 -50
  257. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +29 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +29 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +90 -71
  260. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +29 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +28 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +78 -58
  263. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +29 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +28 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +78 -51
  266. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +29 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +28 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-trust/.!11330!examples.md +0 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +253 -32
  270. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +1099 -0
  272. moai_adk/templates/.claude/skills/moai-jit-docs-enhanced/SKILL.md +460 -0
  273. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +98 -74
  274. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +29 -0
  275. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +31 -0
  276. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +98 -76
  277. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +29 -0
  278. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +31 -0
  279. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +2358 -70
  280. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +29 -0
  281. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +30 -0
  282. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +2962 -68
  283. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +29 -0
  284. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +30 -0
  285. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +1898 -70
  286. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +29 -0
  287. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +31 -0
  288. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +1465 -68
  289. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +29 -0
  290. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +31 -0
  291. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +2364 -66
  292. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +29 -0
  293. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +32 -0
  294. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +1630 -69
  295. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +29 -0
  296. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +31 -0
  297. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +89 -61
  298. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +29 -0
  299. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +30 -0
  300. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +735 -66
  301. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +624 -0
  302. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +316 -0
  303. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +97 -73
  304. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +29 -0
  305. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +30 -0
  306. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +98 -73
  307. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +29 -0
  308. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +31 -0
  309. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +1834 -70
  310. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +29 -0
  311. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +31 -0
  312. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +99 -74
  313. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +29 -0
  314. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +30 -0
  315. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +97 -74
  316. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +29 -0
  317. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +30 -0
  318. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +98 -74
  319. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +29 -0
  320. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +31 -0
  321. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +1959 -69
  322. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +29 -0
  323. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +30 -0
  324. moai_adk/templates/.claude/skills/moai-lang-template/SKILL.md +348 -0
  325. moai_adk/templates/.claude/skills/moai-lang-template/VARIABLES.md +98 -0
  326. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +1230 -66
  327. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +29 -0
  328. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +34 -0
  329. moai_adk/templates/.claude/skills/moai-learning-optimizer/SKILL.md +575 -0
  330. moai_adk/templates/.claude/skills/moai-project-batch-questions/README.md +50 -0
  331. moai_adk/templates/.claude/skills/moai-project-batch-questions/SKILL.md +304 -0
  332. moai_adk/templates/.claude/skills/moai-project-batch-questions/examples.md +417 -0
  333. moai_adk/templates/.claude/skills/moai-project-batch-questions/reference.md +704 -0
  334. moai_adk/templates/.claude/skills/moai-project-config-manager/README.md +87 -0
  335. moai_adk/templates/.claude/skills/moai-project-config-manager/SKILL.md +552 -0
  336. moai_adk/templates/.claude/skills/moai-project-config-manager/examples.md +1109 -0
  337. moai_adk/templates/.claude/skills/moai-project-config-manager/reference.md +514 -0
  338. moai_adk/templates/.claude/skills/moai-project-config-manager/validate.py +106 -0
  339. moai_adk/templates/.claude/skills/moai-project-documentation/README.md +11 -0
  340. moai_adk/templates/.claude/skills/moai-project-documentation/SKILL.md +622 -0
  341. moai_adk/templates/.claude/skills/moai-project-documentation/examples.md +20 -0
  342. moai_adk/templates/.claude/skills/moai-project-documentation/reference.md +12 -0
  343. moai_adk/templates/.claude/skills/moai-project-language-initializer/README.md +152 -0
  344. moai_adk/templates/.claude/skills/moai-project-language-initializer/SKILL.md +285 -0
  345. moai_adk/templates/.claude/skills/moai-project-language-initializer/examples.md +333 -0
  346. moai_adk/templates/.claude/skills/moai-project-language-initializer/reference.md +386 -0
  347. moai_adk/templates/.claude/skills/moai-project-template-optimizer/README.md +49 -0
  348. moai_adk/templates/.claude/skills/moai-project-template-optimizer/SKILL.md +319 -0
  349. moai_adk/templates/.claude/skills/moai-project-template-optimizer/examples.md +58 -0
  350. moai_adk/templates/.claude/skills/moai-project-template-optimizer/reference.md +123 -0
  351. moai_adk/templates/.claude/skills/moai-session-info/SKILL.md +314 -0
  352. moai_adk/templates/.claude/skills/moai-streaming-ui/SKILL.md +552 -0
  353. moai_adk/templates/.claude/skills/moai-tag-policy-validator/SKILL.md +570 -0
  354. moai_adk/templates/.git-hooks/pre-commit +66 -0
  355. moai_adk/templates/.git-hooks/pre-push +255 -0
  356. moai_adk/templates/.github/workflows/c-tag-validation.yml +11 -0
  357. moai_adk/templates/.github/workflows/cpp-tag-validation.yml +11 -0
  358. moai_adk/templates/.github/workflows/csharp-tag-validation.yml +11 -0
  359. moai_adk/templates/.github/workflows/dart-tag-validation.yml +11 -0
  360. moai_adk/templates/.github/workflows/go-tag-validation.yml +130 -0
  361. moai_adk/templates/.github/workflows/java-tag-validation.yml +11 -0
  362. moai_adk/templates/.github/workflows/javascript-tag-validation.yml +135 -0
  363. moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +11 -0
  364. moai_adk/templates/.github/workflows/moai-gitflow.yml +166 -3
  365. moai_adk/templates/.github/workflows/moai-release-create.yml +100 -0
  366. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +188 -0
  367. moai_adk/templates/.github/workflows/php-tag-validation.yml +11 -0
  368. moai_adk/templates/.github/workflows/python-tag-validation.yml +118 -0
  369. moai_adk/templates/.github/workflows/release.yml +118 -0
  370. moai_adk/templates/.github/workflows/ruby-tag-validation.yml +11 -0
  371. moai_adk/templates/.github/workflows/rust-tag-validation.yml +11 -0
  372. moai_adk/templates/.github/workflows/shell-tag-validation.yml +11 -0
  373. moai_adk/templates/.github/workflows/spec-issue-sync.yml +338 -0
  374. moai_adk/templates/.github/workflows/swift-tag-validation.yml +11 -0
  375. moai_adk/templates/.github/workflows/tag-report.yml +269 -0
  376. moai_adk/templates/.github/workflows/tag-validation.yml +186 -0
  377. moai_adk/templates/.github/workflows/typescript-tag-validation.yml +154 -0
  378. moai_adk/templates/.mcp.json +31 -0
  379. moai_adk/templates/.moai/config.json +80 -7
  380. moai_adk/templates/CLAUDE.md +562 -546
  381. moai_adk/utils/banner.py +5 -5
  382. moai_adk/utils/common.py +294 -0
  383. moai_adk/utils/link_validator.py +235 -0
  384. moai_adk/utils/logger.py +8 -8
  385. moai_adk/utils/user_experience.py +451 -0
  386. moai_adk-0.20.1.dist-info/METADATA +233 -0
  387. moai_adk-0.20.1.dist-info/RECORD +404 -0
  388. moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
  389. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -156
  390. moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -85
  391. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
  392. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -92
  393. moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -70
  394. moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -41
  395. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -636
  396. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -692
  397. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -470
  398. moai_adk/templates/.claude/skills/moai-alfred-debugger-pro/SKILL.md +0 -103
  399. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -103
  400. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -95
  401. moai_adk/templates/.claude/skills/moai-alfred-performance-optimizer/SKILL.md +0 -105
  402. moai_adk/templates/.claude/skills/moai-alfred-refactoring-coach/SKILL.md +0 -97
  403. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -97
  404. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -90
  405. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -99
  406. moai_adk/templates/.claude/skills/moai-alfred-tui-survey/SKILL.md +0 -87
  407. moai_adk/templates/.claude/skills/moai-alfred-tui-survey/examples.md +0 -62
  408. moai_adk/templates/.claude/skills/moai-claude-code/SKILL.md +0 -94
  409. moai_adk/templates/.claude/skills/moai-claude-code/examples.md +0 -513
  410. moai_adk/templates/.claude/skills/moai-claude-code/reference.md +0 -433
  411. moai_adk/templates/.claude/skills/moai-claude-code/templates/agent-full.md +0 -332
  412. moai_adk/templates/.claude/skills/moai-claude-code/templates/command-full.md +0 -384
  413. moai_adk/templates/.claude/skills/moai-claude-code/templates/plugin-full.json +0 -363
  414. moai_adk/templates/.claude/skills/moai-claude-code/templates/settings-full.json +0 -595
  415. moai_adk/templates/.claude/skills/moai-claude-code/templates/skill-full.md +0 -496
  416. moai_adk/templates/.claude/skills/moai-lang-clojure/SKILL.md +0 -100
  417. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +0 -99
  418. moai_adk/templates/.claude/skills/moai-lang-haskell/SKILL.md +0 -100
  419. moai_adk/templates/.claude/skills/moai-lang-julia/SKILL.md +0 -98
  420. moai_adk/templates/.claude/skills/moai-lang-lua/SKILL.md +0 -98
  421. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  422. moai_adk/templates/.moai/memory/development-guide.md +0 -344
  423. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  424. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  425. moai_adk/templates/.moai/project/product.md +0 -161
  426. moai_adk/templates/.moai/project/structure.md +0 -156
  427. moai_adk/templates/.moai/project/tech.md +0 -227
  428. moai_adk/templates/__init__.py +0 -2
  429. moai_adk-0.4.5.dist-info/METADATA +0 -369
  430. moai_adk-0.4.5.dist-info/RECORD +0 -152
  431. {moai_adk-0.4.5.dist-info → moai_adk-0.20.1.dist-info}/WHEEL +0 -0
  432. {moai_adk-0.4.5.dist-info → moai_adk-0.20.1.dist-info}/entry_points.txt +0 -0
  433. {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-003:BACKUP | SPEC: .moai/specs/SPEC-INIT-003/spec.md | TEST: tests/unit/test_backup_utils.py
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:
@@ -1,4 +1,4 @@
1
- # @CODE:CLI-001 | SPEC: SPEC-CLI-001.md | TEST: tests/unit/test_cli_commands.py
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-001:DATA - Language toolchain mapping (20 languages)
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
- # PHP moved to top for priority (Laravel detection)
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
- "java": ["*.java", "pom.xml", "build.gradle"],
31
- "go": ["*.go", "go.mod"],
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
- "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).